From dd8478292199fa1aad575e7a639283d73d954769 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 27 Oct 2024 14:02:55 -0500 Subject: [PATCH 001/722] JIT Sparse Function Table, by riperiperi --- src/ARMeilleure/Common/AddressTable.cs | 252 --------- src/ARMeilleure/Common/AddressTableLevel.cs | 44 ++ src/ARMeilleure/Common/AddressTablePresets.cs | 51 ++ src/ARMeilleure/Common/Allocator.cs | 2 +- src/ARMeilleure/Common/IAddressTable.cs | 51 ++ src/ARMeilleure/Common/NativeAllocator.cs | 2 +- .../Instructions/InstEmitFlowHelper.cs | 32 ++ .../Signal/NativeSignalHandlerGenerator.cs | 2 +- .../Translation/ArmEmitterContext.cs | 4 +- src/ARMeilleure/Translation/PTC/Ptc.cs | 7 +- src/ARMeilleure/Translation/Translator.cs | 26 +- .../Translation/TranslatorStubs.cs | 4 +- src/Ryujinx.Cpu/AddressTable.cs | 484 ++++++++++++++++++ src/Ryujinx.Cpu/Jit/JitCpuContext.cs | 6 +- .../Arm32/Target/Arm64/InstEmitFlow.cs | 68 ++- .../Arm64/Target/Arm64/InstEmitSystem.cs | 68 ++- .../LightningJit/LightningJitCpuContext.cs | 9 +- src/Ryujinx.Cpu/LightningJit/Translator.cs | 25 +- .../LightningJit/TranslatorStubs.cs | 4 +- src/Ryujinx.Memory/SparseMemoryBlock.cs | 125 +++++ src/Ryujinx.Tests/Cpu/CpuContext.cs | 3 +- src/Ryujinx.Tests/Cpu/EnvironmentTests.cs | 7 +- src/Ryujinx.Tests/Memory/PartialUnmaps.cs | 7 +- 23 files changed, 969 insertions(+), 314 deletions(-) delete mode 100644 src/ARMeilleure/Common/AddressTable.cs create mode 100644 src/ARMeilleure/Common/AddressTableLevel.cs create mode 100644 src/ARMeilleure/Common/AddressTablePresets.cs create mode 100644 src/ARMeilleure/Common/IAddressTable.cs create mode 100644 src/Ryujinx.Cpu/AddressTable.cs create mode 100644 src/Ryujinx.Memory/SparseMemoryBlock.cs diff --git a/src/ARMeilleure/Common/AddressTable.cs b/src/ARMeilleure/Common/AddressTable.cs deleted file mode 100644 index a3ffaf470..000000000 --- a/src/ARMeilleure/Common/AddressTable.cs +++ /dev/null @@ -1,252 +0,0 @@ -using ARMeilleure.Diagnostics; -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace ARMeilleure.Common -{ - /// - /// Represents a table of guest address to a value. - /// - /// Type of the value - public unsafe class AddressTable : IDisposable where TEntry : unmanaged - { - /// - /// Represents a level in an . - /// - public readonly struct Level - { - /// - /// Gets the index of the in the guest address. - /// - public int Index { get; } - - /// - /// Gets the length of the in the guest address. - /// - public int Length { get; } - - /// - /// Gets the mask which masks the bits used by the . - /// - public ulong Mask => ((1ul << Length) - 1) << Index; - - /// - /// Initializes a new instance of the structure with the specified - /// and . - /// - /// Index of the - /// Length of the - public Level(int index, int length) - { - (Index, Length) = (index, length); - } - - /// - /// Gets the value of the from the specified guest . - /// - /// Guest address - /// Value of the from the specified guest - public int GetValue(ulong address) - { - return (int)((address & Mask) >> Index); - } - } - - private bool _disposed; - private TEntry** _table; - private readonly List _pages; - - /// - /// Gets the bits used by the of the instance. - /// - public ulong Mask { get; } - - /// - /// Gets the s used by the instance. - /// - public Level[] Levels { get; } - - /// - /// Gets or sets the default fill value of newly created leaf pages. - /// - public TEntry Fill { get; set; } - - /// - /// Gets the base address of the . - /// - /// instance was disposed - public nint Base - { - get - { - ObjectDisposedException.ThrowIf(_disposed, this); - - lock (_pages) - { - return (nint)GetRootPage(); - } - } - } - - /// - /// Constructs a new instance of the class with the specified list of - /// . - /// - /// is null - /// Length of is less than 2 - public AddressTable(Level[] levels) - { - ArgumentNullException.ThrowIfNull(levels); - - if (levels.Length < 2) - { - throw new ArgumentException("Table must be at least 2 levels deep.", nameof(levels)); - } - - _pages = new List(capacity: 16); - - Levels = levels; - Mask = 0; - - foreach (var level in Levels) - { - Mask |= level.Mask; - } - } - - /// - /// Determines if the specified is in the range of the - /// . - /// - /// Guest address - /// if is valid; otherwise - public bool IsValid(ulong address) - { - return (address & ~Mask) == 0; - } - - /// - /// Gets a reference to the value at the specified guest . - /// - /// Guest address - /// Reference to the value at the specified guest - /// instance was disposed - /// is not mapped - public ref TEntry GetValue(ulong address) - { - ObjectDisposedException.ThrowIf(_disposed, this); - - if (!IsValid(address)) - { - throw new ArgumentException($"Address 0x{address:X} is not mapped onto the table.", nameof(address)); - } - - lock (_pages) - { - return ref GetPage(address)[Levels[^1].GetValue(address)]; - } - } - - /// - /// Gets the leaf page for the specified guest . - /// - /// Guest address - /// Leaf page for the specified guest - private TEntry* GetPage(ulong address) - { - TEntry** page = GetRootPage(); - - for (int i = 0; i < Levels.Length - 1; i++) - { - ref Level level = ref Levels[i]; - ref TEntry* nextPage = ref page[level.GetValue(address)]; - - if (nextPage == null) - { - ref Level nextLevel = ref Levels[i + 1]; - - nextPage = i == Levels.Length - 2 ? - (TEntry*)Allocate(1 << nextLevel.Length, Fill, leaf: true) : - (TEntry*)Allocate(1 << nextLevel.Length, nint.Zero, leaf: false); - } - - page = (TEntry**)nextPage; - } - - return (TEntry*)page; - } - - /// - /// Lazily initialize and get the root page of the . - /// - /// Root page of the - private TEntry** GetRootPage() - { - if (_table == null) - { - _table = (TEntry**)Allocate(1 << Levels[0].Length, fill: nint.Zero, leaf: false); - } - - return _table; - } - - /// - /// Allocates a block of memory of the specified type and length. - /// - /// Type of elements - /// Number of elements - /// Fill value - /// if leaf; otherwise - /// Allocated block - private nint Allocate(int length, T fill, bool leaf) where T : unmanaged - { - var size = sizeof(T) * length; - var page = (nint)NativeAllocator.Instance.Allocate((uint)size); - var span = new Span((void*)page, length); - - span.Fill(fill); - - _pages.Add(page); - - TranslatorEventSource.Log.AddressTableAllocated(size, leaf); - - return page; - } - - /// - /// Releases all resources used by the instance. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Releases all unmanaged and optionally managed resources used by the - /// instance. - /// - /// to dispose managed resources also; otherwise just unmanaged resouces - protected virtual void Dispose(bool disposing) - { - if (!_disposed) - { - foreach (var page in _pages) - { - Marshal.FreeHGlobal(page); - } - - _disposed = true; - } - } - - /// - /// Frees resources used by the instance. - /// - ~AddressTable() - { - Dispose(false); - } - } -} diff --git a/src/ARMeilleure/Common/AddressTableLevel.cs b/src/ARMeilleure/Common/AddressTableLevel.cs new file mode 100644 index 000000000..6107726ee --- /dev/null +++ b/src/ARMeilleure/Common/AddressTableLevel.cs @@ -0,0 +1,44 @@ +namespace ARMeilleure.Common +{ + /// + /// Represents a level in an . + /// + public readonly struct AddressTableLevel + { + /// + /// Gets the index of the in the guest address. + /// + public int Index { get; } + + /// + /// Gets the length of the in the guest address. + /// + public int Length { get; } + + /// + /// Gets the mask which masks the bits used by the . + /// + public ulong Mask => ((1ul << Length) - 1) << Index; + + /// + /// Initializes a new instance of the structure with the specified + /// and . + /// + /// Index of the + /// Length of the + public AddressTableLevel(int index, int length) + { + (Index, Length) = (index, length); + } + + /// + /// Gets the value of the from the specified guest . + /// + /// Guest address + /// Value of the from the specified guest + public int GetValue(ulong address) + { + return (int)((address & Mask) >> Index); + } + } +} diff --git a/src/ARMeilleure/Common/AddressTablePresets.cs b/src/ARMeilleure/Common/AddressTablePresets.cs new file mode 100644 index 000000000..e7eaf62cd --- /dev/null +++ b/src/ARMeilleure/Common/AddressTablePresets.cs @@ -0,0 +1,51 @@ +namespace ARMeilleure.Common +{ + public static class AddressTablePresets + { + private static readonly AddressTableLevel[] _levels64Bit = + new AddressTableLevel[] + { + new(31, 17), + new(23, 8), + new(15, 8), + new( 7, 8), + new( 2, 5), + }; + + private static readonly AddressTableLevel[] _levels32Bit = + new AddressTableLevel[] + { + new(31, 17), + new(23, 8), + new(15, 8), + new( 7, 8), + new( 1, 6), + }; + + private static readonly AddressTableLevel[] _levels64BitSparse = + new AddressTableLevel[] + { + new(23, 16), + new( 2, 21), + }; + + private static readonly AddressTableLevel[] _levels32BitSparse = + new AddressTableLevel[] + { + new(22, 10), + new( 1, 21), + }; + + public static AddressTableLevel[] GetArmPreset(bool for64Bits, bool sparse) + { + if (sparse) + { + return for64Bits ? _levels64BitSparse : _levels32BitSparse; + } + else + { + return for64Bits ? _levels64Bit : _levels32Bit; + } + } + } +} diff --git a/src/ARMeilleure/Common/Allocator.cs b/src/ARMeilleure/Common/Allocator.cs index 6905a614f..de6a77ebe 100644 --- a/src/ARMeilleure/Common/Allocator.cs +++ b/src/ARMeilleure/Common/Allocator.cs @@ -2,7 +2,7 @@ using System; namespace ARMeilleure.Common { - unsafe abstract class Allocator : IDisposable + public unsafe abstract class Allocator : IDisposable { public T* Allocate(ulong count = 1) where T : unmanaged { diff --git a/src/ARMeilleure/Common/IAddressTable.cs b/src/ARMeilleure/Common/IAddressTable.cs new file mode 100644 index 000000000..65077ec43 --- /dev/null +++ b/src/ARMeilleure/Common/IAddressTable.cs @@ -0,0 +1,51 @@ +using System; + +namespace ARMeilleure.Common +{ + public interface IAddressTable : IDisposable where TEntry : unmanaged + { + /// + /// True if the address table's bottom level is sparsely mapped. + /// This also ensures the second bottom level is filled with a dummy page rather than 0. + /// + bool Sparse { get; } + + /// + /// Gets the bits used by the of the instance. + /// + ulong Mask { get; } + + /// + /// Gets the s used by the instance. + /// + AddressTableLevel[] Levels { get; } + + /// + /// Gets or sets the default fill value of newly created leaf pages. + /// + TEntry Fill { get; set; } + + /// + /// Gets the base address of the . + /// + /// instance was disposed + nint Base { get; } + + /// + /// Determines if the specified is in the range of the + /// . + /// + /// Guest address + /// if is valid; otherwise + bool IsValid(ulong address); + + /// + /// Gets a reference to the value at the specified guest . + /// + /// Guest address + /// Reference to the value at the specified guest + /// instance was disposed + /// is not mapped + ref TEntry GetValue(ulong address); + } +} diff --git a/src/ARMeilleure/Common/NativeAllocator.cs b/src/ARMeilleure/Common/NativeAllocator.cs index ca5d3a850..ffcffa4bc 100644 --- a/src/ARMeilleure/Common/NativeAllocator.cs +++ b/src/ARMeilleure/Common/NativeAllocator.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; namespace ARMeilleure.Common { - unsafe sealed class NativeAllocator : Allocator + public unsafe sealed class NativeAllocator : Allocator { public static NativeAllocator Instance { get; } = new(); diff --git a/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs b/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs index 2009bafda..8b235b81e 100644 --- a/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs +++ b/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs @@ -193,6 +193,8 @@ namespace ARMeilleure.Instructions Operand hostAddress; + var table = context.FunctionTable; + // If address is mapped onto the function table, we can skip the table walk. Otherwise we fallback // onto the dispatch stub. if (guestAddress.Kind == OperandKind.Constant && context.FunctionTable.IsValid(guestAddress.Value)) @@ -203,6 +205,36 @@ namespace ARMeilleure.Instructions hostAddress = context.Load(OperandType.I64, hostAddressAddr); } + else if (table.Sparse && table.Levels.Length == 2) + { + // Inline table lookup. Only enabled when the sparse function table is enabled with 2 levels. + // Deliberately attempts to avoid branches. + + var level0 = table.Levels[0]; + int clearBits0 = 64 - (level0.Index + level0.Length); + + Operand index = context.ShiftLeft( + context.ShiftRightUI(context.ShiftLeft(guestAddress, Const(clearBits0)), Const(clearBits0 + level0.Index)), + Const(3) + ); + + Operand tableBase = !context.HasPtc ? + Const(table.Base) : + Const(table.Base, Ptc.FunctionTableSymbol); + + Operand page = context.Load(OperandType.I64, context.Add(tableBase, index)); + + // Second level + var level1 = table.Levels[1]; + int clearBits1 = 64 - (level1.Index + level1.Length); + + Operand index2 = context.ShiftLeft( + context.ShiftRightUI(context.ShiftLeft(guestAddress, Const(clearBits1)), Const(clearBits1 + level1.Index)), + Const(3) + ); + + hostAddress = context.Load(OperandType.I64, context.Add(page, index2)); + } else { hostAddress = !context.HasPtc ? diff --git a/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs b/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs index 1b3689e3f..35747d7a4 100644 --- a/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs +++ b/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs @@ -8,7 +8,7 @@ namespace ARMeilleure.Signal { public static class NativeSignalHandlerGenerator { - public const int MaxTrackedRanges = 8; + public const int MaxTrackedRanges = 16; private const int StructAddressOffset = 0; private const int StructWriteOffset = 4; diff --git a/src/ARMeilleure/Translation/ArmEmitterContext.cs b/src/ARMeilleure/Translation/ArmEmitterContext.cs index 5d79171a2..82f12bb02 100644 --- a/src/ARMeilleure/Translation/ArmEmitterContext.cs +++ b/src/ARMeilleure/Translation/ArmEmitterContext.cs @@ -46,7 +46,7 @@ namespace ARMeilleure.Translation public IMemoryManager Memory { get; } public EntryTable CountTable { get; } - public AddressTable FunctionTable { get; } + public IAddressTable FunctionTable { get; } public TranslatorStubs Stubs { get; } public ulong EntryAddress { get; } @@ -62,7 +62,7 @@ namespace ARMeilleure.Translation public ArmEmitterContext( IMemoryManager memory, EntryTable countTable, - AddressTable funcTable, + IAddressTable funcTable, TranslatorStubs stubs, ulong entryAddress, bool highCq, diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index 2fecbc3d9..19ca054c8 100644 --- a/src/ARMeilleure/Translation/PTC/Ptc.cs +++ b/src/ARMeilleure/Translation/PTC/Ptc.cs @@ -29,7 +29,7 @@ namespace ARMeilleure.Translation.PTC private const string OuterHeaderMagicString = "PTCohd\0\0"; private const string InnerHeaderMagicString = "PTCihd\0\0"; - private const uint InternalVersion = 6950; //! To be incremented manually for each change to the ARMeilleure project. + private const uint InternalVersion = 6978; //! To be incremented manually for each change to the ARMeilleure project. private const string ActualDir = "0"; private const string BackupDir = "1"; @@ -40,6 +40,7 @@ namespace ARMeilleure.Translation.PTC public static readonly Symbol PageTableSymbol = new(SymbolType.Special, 1); public static readonly Symbol CountTableSymbol = new(SymbolType.Special, 2); public static readonly Symbol DispatchStubSymbol = new(SymbolType.Special, 3); + public static readonly Symbol FunctionTableSymbol = new(SymbolType.Special, 4); private const byte FillingByte = 0x00; private const CompressionLevel SaveCompressionLevel = CompressionLevel.Fastest; @@ -705,6 +706,10 @@ namespace ARMeilleure.Translation.PTC { imm = translator.Stubs.DispatchStub; } + else if (symbol == FunctionTableSymbol) + { + imm = translator.FunctionTable.Base; + } if (imm == null) { diff --git a/src/ARMeilleure/Translation/Translator.cs b/src/ARMeilleure/Translation/Translator.cs index 24fbd7621..a20bef9a4 100644 --- a/src/ARMeilleure/Translation/Translator.cs +++ b/src/ARMeilleure/Translation/Translator.cs @@ -22,33 +22,13 @@ namespace ARMeilleure.Translation { public class Translator { - private static readonly AddressTable.Level[] _levels64Bit = - new AddressTable.Level[] - { - new(31, 17), - new(23, 8), - new(15, 8), - new( 7, 8), - new( 2, 5), - }; - - private static readonly AddressTable.Level[] _levels32Bit = - new AddressTable.Level[] - { - new(31, 17), - new(23, 8), - new(15, 8), - new( 7, 8), - new( 1, 6), - }; - private readonly IJitMemoryAllocator _allocator; private readonly ConcurrentQueue> _oldFuncs; private readonly Ptc _ptc; internal TranslatorCache Functions { get; } - internal AddressTable FunctionTable { get; } + internal IAddressTable FunctionTable { get; } internal EntryTable CountTable { get; } internal TranslatorStubs Stubs { get; } internal TranslatorQueue Queue { get; } @@ -57,7 +37,7 @@ namespace ARMeilleure.Translation private Thread[] _backgroundTranslationThreads; private volatile int _threadCount; - public Translator(IJitMemoryAllocator allocator, IMemoryManager memory, bool for64Bits) + public Translator(IJitMemoryAllocator allocator, IMemoryManager memory, IAddressTable functionTable) { _allocator = allocator; Memory = memory; @@ -72,7 +52,7 @@ namespace ARMeilleure.Translation CountTable = new EntryTable(); Functions = new TranslatorCache(); - FunctionTable = new AddressTable(for64Bits ? _levels64Bit : _levels32Bit); + FunctionTable = functionTable; Stubs = new TranslatorStubs(FunctionTable); FunctionTable.Fill = (ulong)Stubs.SlowDispatchStub; diff --git a/src/ARMeilleure/Translation/TranslatorStubs.cs b/src/ARMeilleure/Translation/TranslatorStubs.cs index 364cca13c..bd9aed8d4 100644 --- a/src/ARMeilleure/Translation/TranslatorStubs.cs +++ b/src/ARMeilleure/Translation/TranslatorStubs.cs @@ -19,7 +19,7 @@ namespace ARMeilleure.Translation private bool _disposed; - private readonly AddressTable _functionTable; + private readonly IAddressTable _functionTable; private readonly Lazy _dispatchStub; private readonly Lazy _dispatchLoop; private readonly Lazy _contextWrapper; @@ -86,7 +86,7 @@ namespace ARMeilleure.Translation /// /// Function table used to store pointers to the functions that the guest code will call /// is null - public TranslatorStubs(AddressTable functionTable) + public TranslatorStubs(IAddressTable functionTable) { ArgumentNullException.ThrowIfNull(functionTable); diff --git a/src/Ryujinx.Cpu/AddressTable.cs b/src/Ryujinx.Cpu/AddressTable.cs new file mode 100644 index 000000000..7b1851ed2 --- /dev/null +++ b/src/Ryujinx.Cpu/AddressTable.cs @@ -0,0 +1,484 @@ +using ARMeilleure.Memory; +using Ryujinx.Common; +using Ryujinx.Cpu.Signal; +using Ryujinx.Memory; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Threading; +using static Ryujinx.Cpu.MemoryEhMeilleure; + +namespace ARMeilleure.Common +{ + /// + /// Represents a table of guest address to a value. + /// + /// Type of the value + public unsafe class AddressTable : IAddressTable where TEntry : unmanaged + { + /// + /// Represents a page of the address table. + /// + private readonly struct AddressTablePage + { + /// + /// True if the allocation belongs to a sparse block, false otherwise. + /// + public readonly bool IsSparse; + + /// + /// Base address for the page. + /// + public readonly IntPtr Address; + + public AddressTablePage(bool isSparse, IntPtr address) + { + IsSparse = isSparse; + Address = address; + } + } + + /// + /// A sparsely mapped block of memory with a signal handler to map pages as they're accessed. + /// + private readonly struct TableSparseBlock : IDisposable + { + public readonly SparseMemoryBlock Block; + private readonly TrackingEventDelegate _trackingEvent; + + public TableSparseBlock(ulong size, Action ensureMapped, PageInitDelegate pageInit) + { + var block = new SparseMemoryBlock(size, pageInit, null); + + _trackingEvent = (ulong address, ulong size, bool write) => + { + ulong pointer = (ulong)block.Block.Pointer + address; + ensureMapped((IntPtr)pointer); + return pointer; + }; + + bool added = NativeSignalHandler.AddTrackedRegion( + (nuint)block.Block.Pointer, + (nuint)(block.Block.Pointer + (IntPtr)block.Block.Size), + Marshal.GetFunctionPointerForDelegate(_trackingEvent)); + + if (!added) + { + throw new InvalidOperationException("Number of allowed tracked regions exceeded."); + } + + Block = block; + } + + public void Dispose() + { + NativeSignalHandler.RemoveTrackedRegion((nuint)Block.Block.Pointer); + + Block.Dispose(); + } + } + + private bool _disposed; + private TEntry** _table; + private readonly List _pages; + private TEntry _fill; + + private readonly MemoryBlock _sparseFill; + private readonly SparseMemoryBlock _fillBottomLevel; + private readonly TEntry* _fillBottomLevelPtr; + + private readonly List _sparseReserved; + private readonly ReaderWriterLockSlim _sparseLock; + + private ulong _sparseBlockSize; + private ulong _sparseReservedOffset; + + public bool Sparse { get; } + + /// + public ulong Mask { get; } + + /// + public AddressTableLevel[] Levels { get; } + + /// + public TEntry Fill + { + get + { + return _fill; + } + set + { + UpdateFill(value); + } + } + + /// + public IntPtr Base + { + get + { + ObjectDisposedException.ThrowIf(_disposed, this); + + lock (_pages) + { + return (IntPtr)GetRootPage(); + } + } + } + + /// + /// Constructs a new instance of the class with the specified list of + /// . + /// + /// Levels for the address table + /// True if the bottom page should be sparsely mapped + /// is null + /// Length of is less than 2 + public AddressTable(AddressTableLevel[] levels, bool sparse) + { + ArgumentNullException.ThrowIfNull(levels); + + if (levels.Length < 2) + { + throw new ArgumentException("Table must be at least 2 levels deep.", nameof(levels)); + } + + _pages = new List(capacity: 16); + + Levels = levels; + Mask = 0; + + foreach (var level in Levels) + { + Mask |= level.Mask; + } + + Sparse = sparse; + + if (sparse) + { + // If the address table is sparse, allocate a fill block + + _sparseFill = new MemoryBlock(65536, MemoryAllocationFlags.Mirrorable); + + ulong bottomLevelSize = (1ul << levels.Last().Length) * (ulong)sizeof(TEntry); + + _fillBottomLevel = new SparseMemoryBlock(bottomLevelSize, null, _sparseFill); + _fillBottomLevelPtr = (TEntry*)_fillBottomLevel.Block.Pointer; + + _sparseReserved = new List(); + _sparseLock = new ReaderWriterLockSlim(); + + _sparseBlockSize = bottomLevelSize; + } + } + + /// + /// Create an instance for an ARM function table. + /// Selects the best table structure for A32/A64, taking into account the selected memory manager type. + /// + /// True if the guest is A64, false otherwise + /// Memory manager type + /// An for ARM function lookup + public static AddressTable CreateForArm(bool for64Bits, MemoryManagerType type) + { + // Assume software memory means that we don't want to use any signal handlers. + bool sparse = type != MemoryManagerType.SoftwareMmu && type != MemoryManagerType.SoftwarePageTable; + + return new AddressTable(AddressTablePresets.GetArmPreset(for64Bits, sparse), sparse); + } + + /// + /// Update the fill value for the bottom level of the table. + /// + /// New fill value + private void UpdateFill(TEntry fillValue) + { + if (_sparseFill != null) + { + Span span = _sparseFill.GetSpan(0, (int)_sparseFill.Size); + MemoryMarshal.Cast(span).Fill(fillValue); + } + + _fill = fillValue; + } + + /// + /// Signal that the given code range exists. + /// + /// + /// + public void SignalCodeRange(ulong address, ulong size) + { + AddressTableLevel bottom = Levels.Last(); + ulong bottomLevelEntries = 1ul << bottom.Length; + + ulong entryIndex = address >> bottom.Index; + ulong entries = size >> bottom.Index; + entries += entryIndex - BitUtils.AlignDown(entryIndex, bottomLevelEntries); + + _sparseBlockSize = Math.Max(_sparseBlockSize, BitUtils.AlignUp(entries, bottomLevelEntries) * (ulong)sizeof(TEntry)); + } + + /// + public bool IsValid(ulong address) + { + return (address & ~Mask) == 0; + } + + /// + public ref TEntry GetValue(ulong address) + { + ObjectDisposedException.ThrowIf(_disposed, this); + + if (!IsValid(address)) + { + throw new ArgumentException($"Address 0x{address:X} is not mapped onto the table.", nameof(address)); + } + + lock (_pages) + { + TEntry* page = GetPage(address); + + int index = Levels[^1].GetValue(address); + + EnsureMapped((IntPtr)(page + index)); + + return ref page[index]; + } + } + + /// + /// Gets the leaf page for the specified guest . + /// + /// Guest address + /// Leaf page for the specified guest + private TEntry* GetPage(ulong address) + { + TEntry** page = GetRootPage(); + + for (int i = 0; i < Levels.Length - 1; i++) + { + ref AddressTableLevel level = ref Levels[i]; + ref TEntry* nextPage = ref page[level.GetValue(address)]; + + if (nextPage == null || nextPage == _fillBottomLevelPtr) + { + ref AddressTableLevel nextLevel = ref Levels[i + 1]; + + if (i == Levels.Length - 2) + { + nextPage = (TEntry*)Allocate(1 << nextLevel.Length, Fill, leaf: true); + } + else + { + nextPage = (TEntry*)Allocate(1 << nextLevel.Length, GetFillValue(i), leaf: false); + } + } + + page = (TEntry**)nextPage; + } + + return (TEntry*)page; + } + + /// + /// Ensure the given pointer is mapped in any overlapping sparse reservations. + /// + /// Pointer to be mapped + private void EnsureMapped(IntPtr ptr) + { + if (Sparse) + { + // Check sparse allocations to see if the pointer is in any of them. + // Ensure the page is committed if there's a match. + + _sparseLock.EnterReadLock(); + + try + { + foreach (TableSparseBlock reserved in _sparseReserved) + { + SparseMemoryBlock sparse = reserved.Block; + + if (ptr >= sparse.Block.Pointer && ptr < sparse.Block.Pointer + (IntPtr)sparse.Block.Size) + { + sparse.EnsureMapped((ulong)(ptr - sparse.Block.Pointer)); + + break; + } + } + } + finally + { + _sparseLock.ExitReadLock(); + } + } + } + + /// + /// Get the fill value for a non-leaf level of the table. + /// + /// Level to get the fill value for + /// The fill value + private IntPtr GetFillValue(int level) + { + if (_fillBottomLevel != null && level == Levels.Length - 2) + { + return (IntPtr)_fillBottomLevelPtr; + } + else + { + return IntPtr.Zero; + } + } + + /// + /// Lazily initialize and get the root page of the . + /// + /// Root page of the + private TEntry** GetRootPage() + { + if (_table == null) + { + _table = (TEntry**)Allocate(1 << Levels[0].Length, GetFillValue(0), leaf: false); + } + + return _table; + } + + /// + /// Initialize a leaf page with the fill value. + /// + /// Page to initialize + private void InitLeafPage(Span page) + { + MemoryMarshal.Cast(page).Fill(_fill); + } + + /// + /// Reserve a new sparse block, and add it to the list. + /// + /// The new sparse block that was added + private TableSparseBlock ReserveNewSparseBlock() + { + var block = new TableSparseBlock(_sparseBlockSize, EnsureMapped, InitLeafPage); + + _sparseReserved.Add(block); + _sparseReservedOffset = 0; + + return block; + } + + /// + /// Allocates a block of memory of the specified type and length. + /// + /// Type of elements + /// Number of elements + /// Fill value + /// if leaf; otherwise + /// Allocated block + private IntPtr Allocate(int length, T fill, bool leaf) where T : unmanaged + { + var size = sizeof(T) * length; + + AddressTablePage page; + + if (Sparse && leaf) + { + _sparseLock.EnterWriteLock(); + + SparseMemoryBlock block; + + if (_sparseReserved.Count == 0) + { + block = ReserveNewSparseBlock().Block; + } + else + { + block = _sparseReserved.Last().Block; + + if (_sparseReservedOffset == block.Block.Size) + { + block = ReserveNewSparseBlock().Block; + } + } + + page = new AddressTablePage(true, block.Block.Pointer + (IntPtr)_sparseReservedOffset); + + _sparseReservedOffset += (ulong)size; + + _sparseLock.ExitWriteLock(); + } + else + { + var address = (IntPtr)NativeAllocator.Instance.Allocate((uint)size); + page = new AddressTablePage(false, address); + + var span = new Span((void*)page.Address, length); + span.Fill(fill); + } + + _pages.Add(page); + + //TranslatorEventSource.Log.AddressTableAllocated(size, leaf); + + return page.Address; + } + + /// + /// Releases all resources used by the instance. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Releases all unmanaged and optionally managed resources used by the + /// instance. + /// + /// to dispose managed resources also; otherwise just unmanaged resouces + protected virtual void Dispose(bool disposing) + { + if (!_disposed) + { + foreach (var page in _pages) + { + if (!page.IsSparse) + { + Marshal.FreeHGlobal(page.Address); + } + } + + if (Sparse) + { + foreach (TableSparseBlock block in _sparseReserved) + { + block.Dispose(); + } + + _sparseReserved.Clear(); + + _fillBottomLevel.Dispose(); + _sparseFill.Dispose(); + _sparseLock.Dispose(); + } + + _disposed = true; + } + } + + /// + /// Frees resources used by the instance. + /// + ~AddressTable() + { + Dispose(false); + } + } +} diff --git a/src/Ryujinx.Cpu/Jit/JitCpuContext.cs b/src/Ryujinx.Cpu/Jit/JitCpuContext.cs index 9893c59b2..9d9e02707 100644 --- a/src/Ryujinx.Cpu/Jit/JitCpuContext.cs +++ b/src/Ryujinx.Cpu/Jit/JitCpuContext.cs @@ -1,3 +1,4 @@ +using ARMeilleure.Common; using ARMeilleure.Memory; using ARMeilleure.Translation; using Ryujinx.Cpu.Signal; @@ -9,11 +10,13 @@ namespace Ryujinx.Cpu.Jit { private readonly ITickSource _tickSource; private readonly Translator _translator; + private readonly AddressTable _functionTable; public JitCpuContext(ITickSource tickSource, IMemoryManager memory, bool for64Bit) { _tickSource = tickSource; - _translator = new Translator(new JitMemoryAllocator(forJit: true), memory, for64Bit); + _functionTable = AddressTable.CreateForArm(for64Bit, memory.Type); + _translator = new Translator(new JitMemoryAllocator(forJit: true), memory, _functionTable); if (memory.Type.IsHostMappedOrTracked()) { @@ -55,6 +58,7 @@ namespace Ryujinx.Cpu.Jit /// public void PrepareCodeRange(ulong address, ulong size) { + _functionTable.SignalCodeRange(address, size); _translator.PrepareCodeRange(address, size); } diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs index 7f5e4835c..beef52582 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs @@ -140,6 +140,11 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 bool isTail = false) { int tempRegister; + int tempGuestAddress = -1; + + bool inlineLookup = guestAddress.Kind != OperandKind.Constant && + funcTable is { Sparse: true } && + funcTable.Levels.Length == 2; if (guestAddress.Kind == OperandKind.Constant) { @@ -153,9 +158,16 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 else { asm.StrRiUn(guestAddress, Register(regAlloc.FixedContextRegister), NativeContextOffsets.DispatchAddressOffset); + + if (inlineLookup && guestAddress.Value == 0) + { + // X0 will be overwritten. Move the address to a temp register. + tempGuestAddress = regAlloc.AllocateTempGprRegister(); + asm.Mov(Register(tempGuestAddress), guestAddress); + } } - tempRegister = regAlloc.FixedContextRegister == 1 ? 2 : 1; + tempRegister = NextFreeRegister(1, tempGuestAddress); if (!isTail) { @@ -176,6 +188,45 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 asm.Mov(rn, funcPtrLoc & ~0xfffUL); asm.LdrRiUn(rn, rn, (int)(funcPtrLoc & 0xfffUL)); } + else if (inlineLookup) + { + // Inline table lookup. Only enabled when the sparse function table is enabled with 2 levels. + + Operand indexReg = Register(NextFreeRegister(tempRegister + 1, tempGuestAddress)); + + if (tempGuestAddress != -1) + { + guestAddress = Register(tempGuestAddress); + } + + var level0 = funcTable.Levels[0]; + asm.Ubfx(indexReg, guestAddress, level0.Index, level0.Length); + asm.Lsl(indexReg, indexReg, Const(3)); + + ulong tableBase = (ulong)funcTable.Base; + + // Index into the table. + asm.Mov(rn, tableBase); + asm.Add(rn, rn, indexReg); + + // Load the page address. + asm.LdrRiUn(rn, rn, 0); + + var level1 = funcTable.Levels[1]; + asm.Ubfx(indexReg, guestAddress, level1.Index, level1.Length); + asm.Lsl(indexReg, indexReg, Const(3)); + + // Index into the page. + asm.Add(rn, rn, indexReg); + + // Load the final branch address + asm.LdrRiUn(rn, rn, 0); + + if (tempGuestAddress != -1) + { + regAlloc.FreeTempGprRegister(tempGuestAddress); + } + } else { asm.Mov(rn, (ulong)funcPtr); @@ -252,5 +303,20 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 { return new Operand(register, RegisterType.Integer, type); } + + private static Operand Const(long value, OperandType type = OperandType.I64) + { + return new Operand(type, (ulong)value); + } + + private static int NextFreeRegister(int start, int avoid) + { + if (start == avoid) + { + start++; + } + + return start; + } } } diff --git a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs index 1eeeb746e..df54cef2a 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs @@ -305,6 +305,11 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 bool isTail = false) { int tempRegister; + int tempGuestAddress = -1; + + bool inlineLookup = guestAddress.Kind != OperandKind.Constant && + funcTable is { Sparse: true } && + funcTable.Levels.Length == 2; if (guestAddress.Kind == OperandKind.Constant) { @@ -318,9 +323,16 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 else { asm.StrRiUn(guestAddress, Register(regAlloc.FixedContextRegister), NativeContextOffsets.DispatchAddressOffset); + + if (inlineLookup && guestAddress.Value == 0) + { + // X0 will be overwritten. Move the address to a temp register. + tempGuestAddress = regAlloc.AllocateTempGprRegister(); + asm.Mov(Register(tempGuestAddress), guestAddress); + } } - tempRegister = regAlloc.FixedContextRegister == 1 ? 2 : 1; + tempRegister = NextFreeRegister(1, tempGuestAddress); if (!isTail) { @@ -341,6 +353,45 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 asm.Mov(rn, funcPtrLoc & ~0xfffUL); asm.LdrRiUn(rn, rn, (int)(funcPtrLoc & 0xfffUL)); } + else if (inlineLookup) + { + // Inline table lookup. Only enabled when the sparse function table is enabled with 2 levels. + + Operand indexReg = Register(NextFreeRegister(tempRegister + 1, tempGuestAddress)); + + if (tempGuestAddress != -1) + { + guestAddress = Register(tempGuestAddress); + } + + var level0 = funcTable.Levels[0]; + asm.Ubfx(indexReg, guestAddress, level0.Index, level0.Length); + asm.Lsl(indexReg, indexReg, Const(3)); + + ulong tableBase = (ulong)funcTable.Base; + + // Index into the table. + asm.Mov(rn, tableBase); + asm.Add(rn, rn, indexReg); + + // Load the page address. + asm.LdrRiUn(rn, rn, 0); + + var level1 = funcTable.Levels[1]; + asm.Ubfx(indexReg, guestAddress, level1.Index, level1.Length); + asm.Lsl(indexReg, indexReg, Const(3)); + + // Index into the page. + asm.Add(rn, rn, indexReg); + + // Load the final branch address + asm.LdrRiUn(rn, rn, 0); + + if (tempGuestAddress != -1) + { + regAlloc.FreeTempGprRegister(tempGuestAddress); + } + } else { asm.Mov(rn, (ulong)funcPtr); @@ -613,5 +664,20 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 { return new Operand(register, RegisterType.Integer, type); } + + private static Operand Const(long value, OperandType type = OperandType.I64) + { + return new Operand(type, (ulong)value); + } + + private static int NextFreeRegister(int start, int avoid) + { + if (start == avoid) + { + start++; + } + + return start; + } } } diff --git a/src/Ryujinx.Cpu/LightningJit/LightningJitCpuContext.cs b/src/Ryujinx.Cpu/LightningJit/LightningJitCpuContext.cs index b63636e39..0ac9dc8b5 100644 --- a/src/Ryujinx.Cpu/LightningJit/LightningJitCpuContext.cs +++ b/src/Ryujinx.Cpu/LightningJit/LightningJitCpuContext.cs @@ -1,3 +1,4 @@ +using ARMeilleure.Common; using ARMeilleure.Memory; using Ryujinx.Cpu.Jit; using Ryujinx.Cpu.LightningJit.State; @@ -8,11 +9,16 @@ namespace Ryujinx.Cpu.LightningJit { private readonly ITickSource _tickSource; private readonly Translator _translator; + private readonly AddressTable _functionTable; public LightningJitCpuContext(ITickSource tickSource, IMemoryManager memory, bool for64Bit) { _tickSource = tickSource; - _translator = new Translator(memory, for64Bit); + + _functionTable = AddressTable.CreateForArm(for64Bit, memory.Type); + + _translator = new Translator(memory, _functionTable); + memory.UnmapEvent += UnmapHandler; } @@ -48,6 +54,7 @@ namespace Ryujinx.Cpu.LightningJit /// public void PrepareCodeRange(ulong address, ulong size) { + _functionTable.SignalCodeRange(address, size); } public void Dispose() diff --git a/src/Ryujinx.Cpu/LightningJit/Translator.cs b/src/Ryujinx.Cpu/LightningJit/Translator.cs index b4710e34e..b8d97d163 100644 --- a/src/Ryujinx.Cpu/LightningJit/Translator.cs +++ b/src/Ryujinx.Cpu/LightningJit/Translator.cs @@ -19,35 +19,16 @@ namespace Ryujinx.Cpu.LightningJit // Should be enabled on platforms that enforce W^X. private static bool IsNoWxPlatform => false; - private static readonly AddressTable.Level[] _levels64Bit = - new AddressTable.Level[] - { - new(31, 17), - new(23, 8), - new(15, 8), - new( 7, 8), - new( 2, 5), - }; - - private static readonly AddressTable.Level[] _levels32Bit = - new AddressTable.Level[] - { - new(23, 9), - new(15, 8), - new( 7, 8), - new( 1, 6), - }; - private readonly ConcurrentQueue> _oldFuncs; private readonly NoWxCache _noWxCache; private bool _disposed; internal TranslatorCache Functions { get; } - internal AddressTable FunctionTable { get; } + internal IAddressTable FunctionTable { get; } internal TranslatorStubs Stubs { get; } internal IMemoryManager Memory { get; } - public Translator(IMemoryManager memory, bool for64Bits) + public Translator(IMemoryManager memory, IAddressTable functionTable) { Memory = memory; @@ -63,7 +44,7 @@ namespace Ryujinx.Cpu.LightningJit } Functions = new TranslatorCache(); - FunctionTable = new AddressTable(for64Bits ? _levels64Bit : _levels32Bit); + FunctionTable = functionTable; Stubs = new TranslatorStubs(FunctionTable, _noWxCache); FunctionTable.Fill = (ulong)Stubs.SlowDispatchStub; diff --git a/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs b/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs index e88414d5e..c5231e506 100644 --- a/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs +++ b/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs @@ -23,7 +23,7 @@ namespace Ryujinx.Cpu.LightningJit private bool _disposed; - private readonly AddressTable _functionTable; + private readonly IAddressTable _functionTable; private readonly NoWxCache _noWxCache; private readonly GetFunctionAddressDelegate _getFunctionAddressRef; private readonly nint _getFunctionAddress; @@ -79,7 +79,7 @@ namespace Ryujinx.Cpu.LightningJit /// Function table used to store pointers to the functions that the guest code will call /// Cache used on platforms that enforce W^X, otherwise should be null /// is null - public TranslatorStubs(AddressTable functionTable, NoWxCache noWxCache) + public TranslatorStubs(IAddressTable functionTable, NoWxCache noWxCache) { ArgumentNullException.ThrowIfNull(functionTable); diff --git a/src/Ryujinx.Memory/SparseMemoryBlock.cs b/src/Ryujinx.Memory/SparseMemoryBlock.cs new file mode 100644 index 000000000..523685de1 --- /dev/null +++ b/src/Ryujinx.Memory/SparseMemoryBlock.cs @@ -0,0 +1,125 @@ +using Ryujinx.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; + +namespace Ryujinx.Memory +{ + public delegate void PageInitDelegate(Span page); + + public class SparseMemoryBlock : IDisposable + { + private const ulong MapGranularity = 1UL << 17; + + private readonly PageInitDelegate _pageInit; + + private readonly object _lock = new object(); + private readonly ulong _pageSize; + private readonly MemoryBlock _reservedBlock; + private readonly List _mappedBlocks; + private ulong _mappedBlockUsage; + + private readonly ulong[] _mappedPageBitmap; + + public MemoryBlock Block => _reservedBlock; + + public SparseMemoryBlock(ulong size, PageInitDelegate pageInit, MemoryBlock fill) + { + _pageSize = MemoryBlock.GetPageSize(); + _reservedBlock = new MemoryBlock(size, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible); + _mappedBlocks = new List(); + _pageInit = pageInit; + + int pages = (int)BitUtils.DivRoundUp(size, _pageSize); + int bitmapEntries = BitUtils.DivRoundUp(pages, 64); + _mappedPageBitmap = new ulong[bitmapEntries]; + + if (fill != null) + { + // Fill the block with mappings from the fill block. + + if (fill.Size % _pageSize != 0) + { + throw new ArgumentException("Fill memory block should be page aligned.", nameof(fill)); + } + + int repeats = (int)BitUtils.DivRoundUp(size, fill.Size); + + ulong offset = 0; + for (int i = 0; i < repeats; i++) + { + _reservedBlock.MapView(fill, 0, offset, Math.Min(fill.Size, size - offset)); + offset += fill.Size; + } + } + + // If a fill block isn't provided, the pages that aren't EnsureMapped are unmapped. + // The caller can rely on signal handler to fill empty pages instead. + } + + private void MapPage(ulong pageOffset) + { + // Take a page from the latest mapped block. + MemoryBlock block = _mappedBlocks.LastOrDefault(); + + if (block == null || _mappedBlockUsage == MapGranularity) + { + // Need to map some more memory. + + block = new MemoryBlock(MapGranularity, MemoryAllocationFlags.Mirrorable); + + _mappedBlocks.Add(block); + + _mappedBlockUsage = 0; + } + + _pageInit(block.GetSpan(_mappedBlockUsage, (int)_pageSize)); + _reservedBlock.MapView(block, _mappedBlockUsage, pageOffset, _pageSize); + + _mappedBlockUsage += _pageSize; + } + + public void EnsureMapped(ulong offset) + { + int pageIndex = (int)(offset / _pageSize); + int bitmapIndex = pageIndex >> 6; + + ref ulong entry = ref _mappedPageBitmap[bitmapIndex]; + ulong bit = 1UL << (pageIndex & 63); + + if ((Volatile.Read(ref entry) & bit) == 0) + { + // Not mapped. + + lock (_lock) + { + // Check the bit while locked to make sure that this only happens once. + + ulong lockedEntry = Volatile.Read(ref entry); + + if ((lockedEntry & bit) == 0) + { + MapPage(offset & ~(_pageSize - 1)); + + lockedEntry |= bit; + + Interlocked.Exchange(ref entry, lockedEntry); + } + } + } + } + + public void Dispose() + { + _reservedBlock.Dispose(); + + foreach (MemoryBlock block in _mappedBlocks) + { + block.Dispose(); + } + + GC.SuppressFinalize(this); + } + } +} diff --git a/src/Ryujinx.Tests/Cpu/CpuContext.cs b/src/Ryujinx.Tests/Cpu/CpuContext.cs index 96b4965a2..81e8ba8c9 100644 --- a/src/Ryujinx.Tests/Cpu/CpuContext.cs +++ b/src/Ryujinx.Tests/Cpu/CpuContext.cs @@ -1,3 +1,4 @@ +using ARMeilleure.Common; using ARMeilleure.Memory; using ARMeilleure.State; using ARMeilleure.Translation; @@ -12,7 +13,7 @@ namespace Ryujinx.Tests.Cpu public CpuContext(IMemoryManager memory, bool for64Bit) { - _translator = new Translator(new JitMemoryAllocator(), memory, for64Bit); + _translator = new Translator(new JitMemoryAllocator(), memory, AddressTable.CreateForArm(for64Bit, memory.Type)); memory.UnmapEvent += UnmapHandler; } diff --git a/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs b/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs index 2a4775a31..43c84c193 100644 --- a/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs +++ b/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs @@ -1,3 +1,5 @@ +using ARMeilleure.Common; +using ARMeilleure.Memory; using ARMeilleure.Translation; using NUnit.Framework; using Ryujinx.Cpu.Jit; @@ -17,7 +19,10 @@ namespace Ryujinx.Tests.Cpu private static void EnsureTranslator() { // Create a translator, as one is needed to register the signal handler or emit methods. - _translator ??= new Translator(new JitMemoryAllocator(), new MockMemoryManager(), true); + _translator ??= new Translator( + new JitMemoryAllocator(), + new MockMemoryManager(), + AddressTable.CreateForArm(true, MemoryManagerType.SoftwarePageTable)); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] diff --git a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs index 6d2ad8fb0..3e5b47423 100644 --- a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs +++ b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs @@ -1,3 +1,5 @@ +using ARMeilleure.Common; +using ARMeilleure.Memory; using ARMeilleure.Signal; using ARMeilleure.Translation; using NUnit.Framework; @@ -53,7 +55,10 @@ namespace Ryujinx.Tests.Memory private static void EnsureTranslator() { // Create a translator, as one is needed to register the signal handler or emit methods. - _translator ??= new Translator(new JitMemoryAllocator(), new MockMemoryManager(), true); + _translator ??= new Translator( + new JitMemoryAllocator(), + new MockMemoryManager(), + AddressTable.CreateForArm(true, MemoryManagerType.SoftwarePageTable)); } [Test] -- 2.47.1 From df7e543877f38a2620290eb7cbad9a5717d93ab3 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 27 Oct 2024 14:09:17 -0500 Subject: [PATCH 002/722] I may be stupid --- src/Ryujinx.Cpu/LightningJit/Translator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.Cpu/LightningJit/Translator.cs b/src/Ryujinx.Cpu/LightningJit/Translator.cs index b8d97d163..4c4011f11 100644 --- a/src/Ryujinx.Cpu/LightningJit/Translator.cs +++ b/src/Ryujinx.Cpu/LightningJit/Translator.cs @@ -24,11 +24,11 @@ namespace Ryujinx.Cpu.LightningJit private bool _disposed; internal TranslatorCache Functions { get; } - internal IAddressTable FunctionTable { get; } + internal AddressTable FunctionTable { get; } internal TranslatorStubs Stubs { get; } internal IMemoryManager Memory { get; } - public Translator(IMemoryManager memory, IAddressTable functionTable) + public Translator(IMemoryManager memory, AddressTable functionTable) { Memory = memory; -- 2.47.1 From 123ccdc7489dd735e018e3fa648e2f185b202dcc Mon Sep 17 00:00:00 2001 From: Ryan2603 Date: Wed, 6 Nov 2024 09:13:37 +0800 Subject: [PATCH 003/722] Update Vendor.cs --- src/Ryujinx.Graphics.Vulkan/Vendor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.Graphics.Vulkan/Vendor.cs b/src/Ryujinx.Graphics.Vulkan/Vendor.cs index 55ae0cd81..6a2a76a88 100644 --- a/src/Ryujinx.Graphics.Vulkan/Vendor.cs +++ b/src/Ryujinx.Graphics.Vulkan/Vendor.cs @@ -92,7 +92,7 @@ namespace Ryujinx.Graphics.Vulkan DriverId.MesaDozen => "Dozen", DriverId.MesaNvk => "NVK", DriverId.ImaginationOpenSourceMesa => "Imagination (Open)", - DriverId.MesaAgxv => "Honeykrisp", + DriverId.MesaHoneykrisp => "Honeykrisp", _ => id.ToString(), }; } -- 2.47.1 From 27e0c79d60fc9bcf16134c7d76ffb82c04a85c38 Mon Sep 17 00:00:00 2001 From: Ryan2603 Date: Wed, 6 Nov 2024 09:28:40 +0800 Subject: [PATCH 004/722] Better Vulkan Graphic (Clear & Sharper) by updates the following packages: Bump Silk.NET.Vulkan to 2.22 from 2.21 --- Directory.Packages.props | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index e6be60790..ce043c2b2 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -41,9 +41,9 @@ - - - + + + @@ -51,4 +51,4 @@ - \ No newline at end of file + -- 2.47.1 From 0c88b9eff71e75e6578c8a793a7bbe666b6429aa Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 6 Nov 2024 16:48:20 -0600 Subject: [PATCH 005/722] Canary & Release separation. --- .github/workflows/canary.yml | 252 +++++++++++++++++++++++ .github/workflows/release.yml | 4 +- Ryujinx.sln | 17 +- src/Ryujinx.Common/ReleaseInformation.cs | 10 +- 4 files changed, 271 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/canary.yml diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml new file mode 100644 index 000000000..195a3f435 --- /dev/null +++ b/.github/workflows/canary.yml @@ -0,0 +1,252 @@ +name: Canary release job + +on: + workflow_dispatch: + inputs: {} + push: + branches: [ master ] + paths-ignore: + - '.github/**' + - 'docs/**' + - 'assets/**' + - '*.yml' + - '*.json' + - '*.config' + - '*.md' + +concurrency: release + +env: + POWERSHELL_TELEMETRY_OPTOUT: 1 + DOTNET_CLI_TELEMETRY_OPTOUT: 1 + RYUJINX_BASE_VERSION: "1.2" + RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "canary" + RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "GreemDev" + RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Ryujinx-Canary" + RELEASE: 1 + +jobs: + tag: + name: Create tag + runs-on: ubuntu-20.04 + steps: + - name: Get version info + id: version_info + run: | + echo "build_version=${{ env.RYUJINX_BASE_VERSION }}.${{ github.run_number }}" >> $GITHUB_OUTPUT + echo "prev_build_version=${{ env.RYUJINX_BASE_VERSION }}.$((${{ github.run_number }} - 1))" >> $GITHUB_OUTPUT + shell: bash + + - name: Create tag + uses: actions/github-script@v7 + with: + script: | + github.rest.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: 'refs/tags/${{ steps.version_info.outputs.build_version }}', + sha: context.sha + }) + + - name: Create release + uses: ncipollo/release-action@v1 + with: + name: "Canary ${{ steps.version_info.outputs.build_version }}" + tag: ${{ steps.version_info.outputs.build_version }} + omitBodyDuringUpdate: true + owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }} + repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }} + token: ${{ secrets.RELEASE_TOKEN }} + + release: + name: Release for ${{ matrix.platform.name }} + runs-on: ${{ matrix.platform.os }} + strategy: + matrix: + platform: + - { name: win-x64, os: windows-latest, zip_os_name: win_x64 } + - { name: linux-x64, os: ubuntu-latest, zip_os_name: linux_x64 } + - { name: linux-arm64, os: ubuntu-latest, zip_os_name: linux_arm64 } + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-dotnet@v4 + with: + global-json-file: global.json + + - name: Overwrite csc problem matcher + run: echo "::add-matcher::.github/csc.json" + + - name: Get version info + id: version_info + run: | + echo "build_version=${{ env.RYUJINX_BASE_VERSION }}.${{ github.run_number }}" >> $GITHUB_OUTPUT + echo "prev_build_version=${{ env.RYUJINX_BASE_VERSION }}.$((${{ github.run_number }} - 1))" >> $GITHUB_OUTPUT + echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT + shell: bash + + - name: Configure for release + run: | + sed -r --in-place 's/\%\%RYUJINX_BUILD_VERSION\%\%/${{ steps.version_info.outputs.build_version }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_BUILD_GIT_HASH\%\%/${{ steps.version_info.outputs.git_short_hash }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs + shell: bash + + - name: Create output dir + run: "mkdir release_output" + + - name: Publish + run: | + dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_ava/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained -p:IncludeNativeLibrariesForSelfExtract=true + dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained -p:IncludeNativeLibrariesForSelfExtract=true + + - name: Packing Windows builds + if: matrix.platform.os == 'windows-latest' + run: | + pushd publish_ava + rm publish/libarmeilleure-jitsupport.dylib + 7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish + popd + + pushd publish_sdl2_headless + rm publish/libarmeilleure-jitsupport.dylib + 7z a ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish + popd + shell: bash + + - name: Packing Linux builds + if: matrix.platform.os == 'ubuntu-latest' + run: | + pushd publish_ava + rm publish/libarmeilleure-jitsupport.dylib + chmod +x publish/Ryujinx.sh publish/Ryujinx + tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish + popd + + pushd publish_sdl2_headless + rm publish/libarmeilleure-jitsupport.dylib + chmod +x publish/Ryujinx.sh publish/Ryujinx.Headless.SDL2 + tar -czvf ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish + popd + shell: bash + + #- name: Build AppImage (Linux) + # if: matrix.platform.os == 'ubuntu-latest' + # run: | + # BUILD_VERSION="${{ steps.version_info.outputs.build_version }}" + # PLATFORM_NAME="${{ matrix.platform.name }}" + + # sudo apt install -y zsync desktop-file-utils appstream + + # mkdir -p tools + # export PATH="$PATH:$(readlink -f tools)" + + # Setup appimagetool + # wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" + # chmod +x tools/appimagetool + # chmod +x distribution/linux/appimage/build-appimage.sh + + # Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name) + # if [ "$PLATFORM_NAME" = "linux-x64" ]; then + # ARCH_NAME=x64 + # export ARCH=x86_64 + # elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then + # ARCH_NAME=arm64 + # export ARCH=aarch64 + # else + # echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME"" + # exit 1 + # fi + + # export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync" + # BUILDDIR=publish_ava OUTDIR=publish_ava_appimage distribution/linux/appimage/build-appimage.sh + + # Add to release output + # pushd publish_ava_appimage + # mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage + # mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync + # popd + # shell: bash + + - name: Pushing new release + uses: ncipollo/release-action@v1 + with: + name: ${{ steps.version_info.outputs.build_version }} + artifacts: "release_output/*.tar.gz,release_output/*.zip" + #artifacts: "release_output/*.tar.gz,release_output/*.zip/*AppImage*" + tag: ${{ steps.version_info.outputs.build_version }} + body: "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}" + omitBodyDuringUpdate: true + allowUpdates: true + replacesArtifacts: true + owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }} + repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }} + token: ${{ secrets.RELEASE_TOKEN }} + + macos_release: + name: Release MacOS universal + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-dotnet@v4 + with: + global-json-file: global.json + + - name: Setup LLVM 15 + run: | + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 15 + + - name: Install rcodesign + run: | + mkdir -p $HOME/.bin + gh release download -R indygreg/apple-platform-rs -O apple-codesign.tar.gz -p 'apple-codesign-*-x86_64-unknown-linux-musl.tar.gz' + tar -xzvf apple-codesign.tar.gz --wildcards '*/rcodesign' --strip-components=1 + rm apple-codesign.tar.gz + mv rcodesign $HOME/.bin/ + echo "$HOME/.bin" >> $GITHUB_PATH + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Get version info + id: version_info + run: | + echo "build_version=${{ env.RYUJINX_BASE_VERSION }}.${{ github.run_number }}" >> $GITHUB_OUTPUT + echo "prev_build_version=${{ env.RYUJINX_BASE_VERSION }}.$((${{ github.run_number }} - 1))" >> $GITHUB_OUTPUT + echo "git_short_hash=$(git rev-parse --short "${{ github.sha }}")" >> $GITHUB_OUTPUT + + - name: Configure for release + run: | + sed -r --in-place 's/\%\%RYUJINX_BUILD_VERSION\%\%/${{ steps.version_info.outputs.build_version }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_BUILD_GIT_HASH\%\%/${{ steps.version_info.outputs.git_short_hash }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs + shell: bash + + - name: Publish macOS Ryujinx + run: | + ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish_ava ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release + + - name: Publish macOS Ryujinx.Headless.SDL2 + run: | + ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release + + - name: Pushing new release + uses: ncipollo/release-action@v1 + with: + name: "Canary ${{ steps.version_info.outputs.build_version }}" + artifacts: "publish_ava/*.tar.gz, publish_headless/*.tar.gz" + tag: ${{ steps.version_info.outputs.build_version }} + omitBodyDuringUpdate: true + allowUpdates: true + replacesArtifacts: true + owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }} + repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }} + token: ${{ secrets.RELEASE_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index aad32deb6..c3c1e2a28 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: inputs: {} push: - branches: [ master ] + branches: [ release ] paths-ignore: - '.github/**' - 'docs/**' @@ -20,7 +20,7 @@ env: POWERSHELL_TELEMETRY_OPTOUT: 1 DOTNET_CLI_TELEMETRY_OPTOUT: 1 RYUJINX_BASE_VERSION: "1.2" - RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "master" + RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "release" RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "GreemDev" RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Ryujinx" RELEASE: 1 diff --git a/Ryujinx.sln b/Ryujinx.sln index eaa28f8dd..d661b903c 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -29,14 +29,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec", "s EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio", "src\Ryujinx.Audio\Ryujinx.Audio.csproj", "{806ACF6D-90B0-45D0-A1AC-5F220F3B3985}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - Directory.Packages.props = Directory.Packages.props - Release Script = .github/workflows/release.yml - Build Script = .github/workflows/build.yml - EndProjectSection -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Memory", "src\Ryujinx.Memory\Ryujinx.Memory.csproj", "{A5E6C691-9E22-4263-8F40-42F002CE66BE}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Memory", "src\Ryujinx.Tests.Memory\Ryujinx.Tests.Memory.csproj", "{D1CC5322-7325-4F6B-9625-194B30BE1296}" @@ -89,6 +81,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Gene EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + Directory.Packages.props = Directory.Packages.props + .github/workflows/release.yml = .github/workflows/release.yml + .github/workflows/canary.yml = .github/workflows/canary.yml + .github/workflows/build.yml = .github/workflows/build.yml + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/src/Ryujinx.Common/ReleaseInformation.cs b/src/Ryujinx.Common/ReleaseInformation.cs index dfba64191..888c57e81 100644 --- a/src/Ryujinx.Common/ReleaseInformation.cs +++ b/src/Ryujinx.Common/ReleaseInformation.cs @@ -5,7 +5,9 @@ namespace Ryujinx.Common // DO NOT EDIT, filled by CI public static class ReleaseInformation { - private const string FlatHubChannelOwner = "flathub"; + private const string FlatHubChannel = "flathub"; + private const string CanaryChannel = "canary"; + private const string ReleaseChannel = "release"; private const string BuildVersion = "%%RYUJINX_BUILD_VERSION%%"; public const string BuildGitHash = "%%RYUJINX_BUILD_GIT_HASH%%"; @@ -24,7 +26,11 @@ namespace Ryujinx.Common !ReleaseChannelRepo.StartsWith("%%") && !ConfigFileName.StartsWith("%%"); - public static bool IsFlatHubBuild => IsValid && ReleaseChannelOwner.Equals(FlatHubChannelOwner); + public static bool IsFlatHubBuild => IsValid && ReleaseChannelOwner.Equals(FlatHubChannel); + + public static bool IsCanaryBuild => IsValid && ReleaseChannelOwner.Equals(CanaryChannel); + + public static bool IsReleaseBuild => IsValid && ReleaseChannelOwner.Equals(ReleaseChannel); public static string Version => IsValid ? BuildVersion : Assembly.GetEntryAssembly()!.GetCustomAttribute()?.InformationalVersion; } -- 2.47.1 From 3e1182af22d7737f0e5d7502bc233566d901cb2e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 6 Nov 2024 16:55:17 -0600 Subject: [PATCH 006/722] Specify what is a canary tag --- .github/workflows/canary.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 195a3f435..7db2f5be7 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -44,7 +44,7 @@ jobs: github.rest.git.createRef({ owner: context.repo.owner, repo: context.repo.repo, - ref: 'refs/tags/${{ steps.version_info.outputs.build_version }}', + ref: 'refs/tags/Canary-${{ steps.version_info.outputs.build_version }}', sha: context.sha }) -- 2.47.1 From f4957d2a092af0c59db5f01333d4fb328658d53a Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 6 Nov 2024 17:00:16 -0600 Subject: [PATCH 007/722] Didn't realize you could compare tags and not just releases although that should have been obvious --- .github/workflows/canary.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 7db2f5be7..638d25a32 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -178,7 +178,7 @@ jobs: artifacts: "release_output/*.tar.gz,release_output/*.zip" #artifacts: "release_output/*.tar.gz,release_output/*.zip/*AppImage*" tag: ${{ steps.version_info.outputs.build_version }} - body: "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}" + body: "**Full Changelog**: https://github.com/${{ github.repository }}/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }}" omitBodyDuringUpdate: true allowUpdates: true replacesArtifacts: true @@ -244,6 +244,7 @@ jobs: name: "Canary ${{ steps.version_info.outputs.build_version }}" artifacts: "publish_ava/*.tar.gz, publish_headless/*.tar.gz" tag: ${{ steps.version_info.outputs.build_version }} + body: "**Full Changelog**: https://github.com/${{ github.repository }}/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }}" omitBodyDuringUpdate: true allowUpdates: true replacesArtifacts: true -- 2.47.1 From 683baec1afd91d73a4dd49f649a6f7fc7fc10d97 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 6 Nov 2024 17:04:20 -0600 Subject: [PATCH 008/722] OOPSIE!!!!!!!!! --- .github/workflows/canary.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 638d25a32..b64fc1d92 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -53,6 +53,7 @@ jobs: with: name: "Canary ${{ steps.version_info.outputs.build_version }}" tag: ${{ steps.version_info.outputs.build_version }} + body: "**Full Changelog**: https://github.com/${{ github.repository }}/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }}" omitBodyDuringUpdate: true owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }} repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }} -- 2.47.1 From 20cc21add60bd850f7ca4e73e8bbc3dff92c862d Mon Sep 17 00:00:00 2001 From: James Duarte Date: Wed, 6 Nov 2024 23:36:02 +0000 Subject: [PATCH 009/722] fix minor grammatical issues in en_US.json (#183) --- src/Ryujinx/Assets/Locales/en_US.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index 68b48146b..8c2e7db71 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -439,13 +439,13 @@ "DialogNcaExtractionMessage": "Extracting {0} section from {1}...", "DialogNcaExtractionTitle": "Ryujinx - NCA Section Extractor", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Extraction failure. The main NCA was not present in the selected file.", - "DialogNcaExtractionCheckLogErrorMessage": "Extraction failure. Read the log file for further information.", + "DialogNcaExtractionCheckLogErrorMessage": "Extraction failed. Please check the log file for more details.", "DialogNcaExtractionSuccessMessage": "Extraction completed successfully.", - "DialogUpdaterConvertFailedMessage": "Failed to convert the current Ryujinx version.", - "DialogUpdaterCancelUpdateMessage": "Cancelling Update!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "You are already using the most updated version of Ryujinx!", - "DialogUpdaterFailedToGetVersionMessage": "An error has occurred when trying to get release information from GitHub Release. This can be caused if a new release is being compiled by GitHub Actions. Try again in a few minutes.", - "DialogUpdaterConvertFailedGithubMessage": "Failed to convert the received Ryujinx version from Github Release.", + "DialogUpdaterConvertFailedMessage": "Unable to convert the current Ryujinx version.", + "DialogUpdaterCancelUpdateMessage": "Update canceled!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "You are already using the latest version of Ryujinx!", + "DialogUpdaterFailedToGetVersionMessage": "An error occurred while trying to retrieve release information from GitHub. This may happen if a new release is currently being compiled by GitHub Actions. Please try again in a few minutes.", + "DialogUpdaterConvertFailedGithubMessage": "Failed to convert the Ryujinx version received from GitHub." "DialogUpdaterDownloadingMessage": "Downloading Update...", "DialogUpdaterExtractionMessage": "Extracting Update...", "DialogUpdaterRenamingMessage": "Renaming Update...", @@ -455,7 +455,7 @@ "DialogUpdaterNoInternetMessage": "You are not connected to the Internet!", "DialogUpdaterNoInternetSubMessage": "Please verify that you have a working Internet connection!", "DialogUpdaterDirtyBuildMessage": "You Cannot update a Dirty build of Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Please download Ryujinx at https://https://github.com/GreemDev/Ryujinx/releases/ if you are looking for a supported version.", + "DialogUpdaterDirtyBuildSubMessage": "Please download Ryujinx at https://github.com/GreemDev/Ryujinx/releases/ if you are looking for a supported version.", "DialogRestartRequiredMessage": "Restart Required", "DialogThemeRestartMessage": "Theme has been saved. A restart is needed to apply the theme.", "DialogThemeRestartSubMessage": "Do you want to restart", -- 2.47.1 From 47b81458095453e435a6c5530b9b2a7833df108a Mon Sep 17 00:00:00 2001 From: Luke Warner <65521430+LukeWarnut@users.noreply.github.com> Date: Wed, 6 Nov 2024 18:36:30 -0500 Subject: [PATCH 010/722] Fix fullscreen when using 'Show Title Bar' (#150) --- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 2 ++ src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml | 14 +++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 88a24c34d..7fd1ad104 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -1776,6 +1776,7 @@ namespace Ryujinx.Ava.UI.ViewModels if (WindowState is not WindowState.Normal) { WindowState = WindowState.Normal; + Window.TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowTitleBar; if (IsGameRunning) { @@ -1785,6 +1786,7 @@ namespace Ryujinx.Ava.UI.ViewModels else { WindowState = WindowState.FullScreen; + Window.TitleBar.ExtendsContentIntoTitleBar = true; if (IsGameRunning) { diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index fe8b64eb6..94e035022 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -12,13 +12,13 @@ - - - + Date: Thu, 7 Nov 2024 09:37:30 +1000 Subject: [PATCH 011/722] Add ability to trim and untrim XCI files from the application context menu AND in Bulk (#105) --- src/Ryujinx.Common/Logging/LogClass.cs | 1 + .../Logging/XCIFileTrimmerLog.cs | 30 + .../Utilities/XCIFileTrimmer.cs | 524 +++++++++++++++++ .../IpcServiceGenerator.cs | 2 + .../Models/XCITrimmerFileModel.cs | 55 ++ src/Ryujinx/Assets/Locales/en_US.json | 40 ++ src/Ryujinx/Assets/Styles/Styles.xaml | 14 +- .../Common/XCIFileTrimmerMainWindowLog.cs | 24 + src/Ryujinx/Common/XCIFileTrimmerWindowLog.cs | 23 + .../UI/Controls/ApplicationContextMenu.axaml | 6 + .../Controls/ApplicationContextMenu.axaml.cs | 13 + .../UI/Helpers/AvaloniaListExtensions.cs | 62 ++ .../XCITrimmerFileSpaceSavingsConverter.cs | 48 ++ .../Helpers/XCITrimmerFileStatusConverter.cs | 46 ++ .../XCITrimmerFileStatusDetailConverter.cs | 42 ++ .../XCITrimmerOperationOutcomeHelper.cs | 36 ++ .../UI/ViewModels/MainWindowViewModel.cs | 119 ++++ .../UI/ViewModels/XCITrimmerViewModel.cs | 541 ++++++++++++++++++ .../UI/Views/Main/MainMenuBarView.axaml | 2 + .../UI/Views/Main/MainMenuBarView.axaml.cs | 2 + .../UI/Views/Main/MainStatusBarView.axaml | 13 +- src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml | 354 ++++++++++++ .../UI/Windows/XCITrimmerWindow.axaml.cs | 101 ++++ 23 files changed, 2095 insertions(+), 3 deletions(-) create mode 100644 src/Ryujinx.Common/Logging/XCIFileTrimmerLog.cs create mode 100644 src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs create mode 100644 src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs create mode 100644 src/Ryujinx/Common/XCIFileTrimmerMainWindowLog.cs create mode 100644 src/Ryujinx/Common/XCIFileTrimmerWindowLog.cs create mode 100644 src/Ryujinx/UI/Helpers/AvaloniaListExtensions.cs create mode 100644 src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs create mode 100644 src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs create mode 100644 src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs create mode 100644 src/Ryujinx/UI/Helpers/XCITrimmerOperationOutcomeHelper.cs create mode 100644 src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs create mode 100644 src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml create mode 100644 src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs diff --git a/src/Ryujinx.Common/Logging/LogClass.cs b/src/Ryujinx.Common/Logging/LogClass.cs index 1b404a06a..a4117580e 100644 --- a/src/Ryujinx.Common/Logging/LogClass.cs +++ b/src/Ryujinx.Common/Logging/LogClass.cs @@ -72,5 +72,6 @@ namespace Ryujinx.Common.Logging TamperMachine, UI, Vic, + XCIFileTrimmer } } diff --git a/src/Ryujinx.Common/Logging/XCIFileTrimmerLog.cs b/src/Ryujinx.Common/Logging/XCIFileTrimmerLog.cs new file mode 100644 index 000000000..fb11432b0 --- /dev/null +++ b/src/Ryujinx.Common/Logging/XCIFileTrimmerLog.cs @@ -0,0 +1,30 @@ +using Ryujinx.Common.Utilities; + +namespace Ryujinx.Common.Logging +{ + public class XCIFileTrimmerLog : XCIFileTrimmer.ILog + { + public virtual void Progress(long current, long total, string text, bool complete) + { + } + + public void Write(XCIFileTrimmer.LogType logType, string text) + { + switch (logType) + { + case XCIFileTrimmer.LogType.Info: + Logger.Notice.Print(LogClass.XCIFileTrimmer, text); + break; + case XCIFileTrimmer.LogType.Warn: + Logger.Warning?.Print(LogClass.XCIFileTrimmer, text); + break; + case XCIFileTrimmer.LogType.Error: + Logger.Error?.Print(LogClass.XCIFileTrimmer, text); + break; + case XCIFileTrimmer.LogType.Progress: + Logger.Info?.Print(LogClass.XCIFileTrimmer, text); + break; + } + } + } +} diff --git a/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs b/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs new file mode 100644 index 000000000..050e78d1e --- /dev/null +++ b/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs @@ -0,0 +1,524 @@ +// Uncomment the line below to ensure XCIFileTrimmer does not modify files +//#define XCI_TRIMMER_READ_ONLY_MODE + +using Gommon; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Threading; + +namespace Ryujinx.Common.Utilities +{ + public sealed class XCIFileTrimmer + { + private const long BytesInAMegabyte = 1024 * 1024; + private const int BufferSize = 8 * (int)BytesInAMegabyte; + + private const long CartSizeMBinFormattedGB = 952; + private const int CartKeyAreaSize = 0x1000; + private const byte PaddingByte = 0xFF; + private const int HeaderFilePos = 0x100; + private const int CartSizeFilePos = 0x10D; + private const int DataSizeFilePos = 0x118; + private const string HeaderMagicValue = "HEAD"; + + /// + /// Cartridge Sizes (ByteIdentifier, SizeInGB) + /// + private static readonly Dictionary _cartSizesGB = new() + { + { 0xFA, 1 }, + { 0xF8, 2 }, + { 0xF0, 4 }, + { 0xE0, 8 }, + { 0xE1, 16 }, + { 0xE2, 32 } + }; + + private static long RecordsToByte(long records) + { + return 512 + (records * 512); + } + + public static bool CanTrim(string filename, ILog log = null) + { + if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase)) + { + var trimmer = new XCIFileTrimmer(filename, log); + return trimmer.CanBeTrimmed; + } + + return false; + } + + public static bool CanUntrim(string filename, ILog log = null) + { + if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase)) + { + var trimmer = new XCIFileTrimmer(filename, log); + return trimmer.CanBeUntrimmed; + } + + return false; + } + + private ILog _log; + private string _filename; + private FileStream _fileStream; + private BinaryReader _binaryReader; + private long _offsetB, _dataSizeB, _cartSizeB, _fileSizeB; + private bool _fileOK = true; + private bool _freeSpaceChecked = false; + private bool _freeSpaceValid = false; + + public enum OperationOutcome + { + Undetermined, + InvalidXCIFile, + NoTrimNecessary, + NoUntrimPossible, + FreeSpaceCheckFailed, + FileIOWriteError, + ReadOnlyFileCannotFix, + FileSizeChanged, + Successful, + Cancelled + } + + public enum LogType + { + Info, + Warn, + Error, + Progress + } + + public interface ILog + { + public void Write(LogType logType, string text); + public void Progress(long current, long total, string text, bool complete); + } + + public bool FileOK => _fileOK; + public bool Trimmed => _fileOK && FileSizeB < UntrimmedFileSizeB; + public bool ContainsKeyArea => _offsetB != 0; + public bool CanBeTrimmed => _fileOK && FileSizeB > TrimmedFileSizeB; + public bool CanBeUntrimmed => _fileOK && FileSizeB < UntrimmedFileSizeB; + public bool FreeSpaceChecked => _fileOK && _freeSpaceChecked; + public bool FreeSpaceValid => _fileOK && _freeSpaceValid; + public long DataSizeB => _dataSizeB; + public long CartSizeB => _cartSizeB; + public long FileSizeB => _fileSizeB; + public long DiskSpaceSavedB => CartSizeB - FileSizeB; + public long DiskSpaceSavingsB => CartSizeB - DataSizeB; + public long TrimmedFileSizeB => _offsetB + _dataSizeB; + public long UntrimmedFileSizeB => _offsetB + _cartSizeB; + + public ILog Log + { + get => _log; + set => _log = value; + } + + public String Filename + { + get => _filename; + set + { + _filename = value; + Reset(); + } + } + + public long Pos + { + get => _fileStream.Position; + set => _fileStream.Position = value; + } + + public XCIFileTrimmer(string path, ILog log = null) + { + Log = log; + Filename = path; + ReadHeader(); + } + + public void CheckFreeSpace(CancellationToken? cancelToken = null) + { + if (FreeSpaceChecked) + return; + + try + { + if (CanBeTrimmed) + { + _freeSpaceValid = false; + + OpenReaders(); + + try + { + Pos = TrimmedFileSizeB; + bool freeSpaceValid = true; + long readSizeB = FileSizeB - TrimmedFileSizeB; + + Stopwatch timedSw = Lambda.Timed(() => + { + freeSpaceValid = CheckPadding(readSizeB, cancelToken); + }); + + if (timedSw.Elapsed.TotalSeconds > 0) + { + Log?.Write(LogType.Info, $"Checked at {readSizeB / (double)XCIFileTrimmer.BytesInAMegabyte / timedSw.Elapsed.TotalSeconds:N} Mb/sec"); + } + + if (freeSpaceValid) + Log?.Write(LogType.Info, "Free space is valid"); + + _freeSpaceValid = freeSpaceValid; + } + finally + { + CloseReaders(); + } + + } + else + { + Log?.Write(LogType.Warn, "There is no free space to check."); + _freeSpaceValid = false; + } + } + finally + { + _freeSpaceChecked = true; + } + } + + private bool CheckPadding(long readSizeB, CancellationToken? cancelToken = null) + { + long maxReads = readSizeB / XCIFileTrimmer.BufferSize; + long read = 0; + var buffer = new byte[BufferSize]; + + while (true) + { + if (cancelToken.HasValue && cancelToken.Value.IsCancellationRequested) + { + return false; + } + + int bytes = _fileStream.Read(buffer, 0, XCIFileTrimmer.BufferSize); + if (bytes == 0) + break; + + Log?.Progress(read, maxReads, "Verifying file can be trimmed", false); + if (buffer.Take(bytes).AsParallel().Any(b => b != XCIFileTrimmer.PaddingByte)) + { + Log?.Write(LogType.Warn, "Free space is NOT valid"); + return false; + } + + read++; + } + + return true; + } + + private void Reset() + { + _freeSpaceChecked = false; + _freeSpaceValid = false; + ReadHeader(); + } + + public OperationOutcome Trim(CancellationToken? cancelToken = null) + { + if (!FileOK) + { + return OperationOutcome.InvalidXCIFile; + } + + if (!CanBeTrimmed) + { + return OperationOutcome.NoTrimNecessary; + } + + if (!FreeSpaceChecked) + { + CheckFreeSpace(cancelToken); + } + + if (!FreeSpaceValid) + { + if (cancelToken.HasValue && cancelToken.Value.IsCancellationRequested) + { + return OperationOutcome.Cancelled; + } + else + { + return OperationOutcome.FreeSpaceCheckFailed; + } + } + + Log?.Write(LogType.Info, "Trimming..."); + + try + { + var info = new FileInfo(Filename); + if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) + { + try + { + Log?.Write(LogType.Info, "Attempting to remove ReadOnly attribute"); + File.SetAttributes(Filename, info.Attributes & ~FileAttributes.ReadOnly); + } + catch (Exception e) + { + Log?.Write(LogType.Error, e.ToString()); + return OperationOutcome.ReadOnlyFileCannotFix; + } + } + + if (info.Length != FileSizeB) + { + Log?.Write(LogType.Error, "File size has changed, cannot safely trim."); + return OperationOutcome.FileSizeChanged; + } + + var outfileStream = new FileStream(_filename, FileMode.Open, FileAccess.Write, FileShare.Write); + + try + { + +#if !XCI_TRIMMER_READ_ONLY_MODE + outfileStream.SetLength(TrimmedFileSizeB); +#endif + return OperationOutcome.Successful; + } + finally + { + outfileStream.Close(); + Reset(); + } + } + catch (Exception e) + { + Log?.Write(LogType.Error, e.ToString()); + return OperationOutcome.FileIOWriteError; + } + } + + public OperationOutcome Untrim(CancellationToken? cancelToken = null) + { + if (!FileOK) + { + return OperationOutcome.InvalidXCIFile; + } + + if (!CanBeUntrimmed) + { + return OperationOutcome.NoUntrimPossible; + } + + try + { + Log?.Write(LogType.Info, "Untrimming..."); + + var info = new FileInfo(Filename); + if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) + { + try + { + Log?.Write(LogType.Info, "Attempting to remove ReadOnly attribute"); + File.SetAttributes(Filename, info.Attributes & ~FileAttributes.ReadOnly); + } + catch (Exception e) + { + Log?.Write(LogType.Error, e.ToString()); + return OperationOutcome.ReadOnlyFileCannotFix; + } + } + + if (info.Length != FileSizeB) + { + Log?.Write(LogType.Error, "File size has changed, cannot safely untrim."); + return OperationOutcome.FileSizeChanged; + } + + var outfileStream = new FileStream(_filename, FileMode.Append, FileAccess.Write, FileShare.Write); + long bytesToWriteB = UntrimmedFileSizeB - FileSizeB; + + try + { + Stopwatch timedSw = Lambda.Timed(() => + { + WritePadding(outfileStream, bytesToWriteB, cancelToken); + }); + + if (timedSw.Elapsed.TotalSeconds > 0) + { + Log?.Write(LogType.Info, $"Wrote at {bytesToWriteB / (double)XCIFileTrimmer.BytesInAMegabyte / timedSw.Elapsed.TotalSeconds:N} Mb/sec"); + } + + if (cancelToken.HasValue && cancelToken.Value.IsCancellationRequested) + { + return OperationOutcome.Cancelled; + } + else + { + return OperationOutcome.Successful; + } + } + finally + { + outfileStream.Close(); + Reset(); + } + } + catch (Exception e) + { + Log?.Write(LogType.Error, e.ToString()); + return OperationOutcome.FileIOWriteError; + } + } + + private void WritePadding(FileStream outfileStream, long bytesToWriteB, CancellationToken? cancelToken = null) + { + long bytesLeftToWriteB = bytesToWriteB; + long writes = bytesLeftToWriteB / XCIFileTrimmer.BufferSize; + int write = 0; + + try + { + var buffer = new byte[BufferSize]; + Array.Fill(buffer, XCIFileTrimmer.PaddingByte); + + while (bytesLeftToWriteB > 0) + { + if (cancelToken.HasValue && cancelToken.Value.IsCancellationRequested) + { + return; + } + + long bytesToWrite = Math.Min(XCIFileTrimmer.BufferSize, bytesLeftToWriteB); + +#if !XCI_TRIMMER_READ_ONLY_MODE + outfileStream.Write(buffer, 0, (int)bytesToWrite); +#endif + + bytesLeftToWriteB -= bytesToWrite; + Log?.Progress(write, writes, "Writing padding data...", false); + write++; + } + } + finally + { + Log?.Progress(write, writes, "Writing padding data...", true); + } + } + + private void OpenReaders() + { + if (_binaryReader == null) + { + _fileStream = new FileStream(_filename, FileMode.Open, FileAccess.Read, FileShare.Read); + _binaryReader = new BinaryReader(_fileStream); + } + } + + private void CloseReaders() + { + if (_binaryReader != null && _binaryReader.BaseStream != null) + _binaryReader.Close(); + _binaryReader = null; + _fileStream = null; + GC.Collect(); + } + + private void ReadHeader() + { + try + { + OpenReaders(); + + try + { + // Attempt without key area + bool success = CheckAndReadHeader(false); + + if (!success) + { + // Attempt with key area + success = CheckAndReadHeader(true); + } + + _fileOK = success; + } + finally + { + CloseReaders(); + } + } + catch (Exception ex) + { + Log?.Write(LogType.Error, ex.Message); + _fileOK = false; + _dataSizeB = 0; + _cartSizeB = 0; + _fileSizeB = 0; + _offsetB = 0; + } + } + + private bool CheckAndReadHeader(bool assumeKeyArea) + { + // Read file size + _fileSizeB = _fileStream.Length; + if (_fileSizeB < 32 * 1024) + { + Log?.Write(LogType.Error, "The source file doesn't look like an XCI file as the data size is too small"); + return false; + } + + // Setup offset + _offsetB = (long)(assumeKeyArea ? XCIFileTrimmer.CartKeyAreaSize : 0); + + // Check header + Pos = _offsetB + XCIFileTrimmer.HeaderFilePos; + string head = System.Text.Encoding.ASCII.GetString(_binaryReader.ReadBytes(4)); + if (head != XCIFileTrimmer.HeaderMagicValue) + { + if (!assumeKeyArea) + { + Log?.Write(LogType.Warn, $"Incorrect header found, file mat contain a key area..."); + } + else + { + Log?.Write(LogType.Error, "The source file doesn't look like an XCI file as the header is corrupted"); + } + + return false; + } + + // Read Cart Size + Pos = _offsetB + XCIFileTrimmer.CartSizeFilePos; + byte cartSizeId = _binaryReader.ReadByte(); + if (!_cartSizesGB.TryGetValue(cartSizeId, out long cartSizeNGB)) + { + Log?.Write(LogType.Error, $"The source file doesn't look like an XCI file as the Cartridge Size is incorrect (0x{cartSizeId:X2})"); + return false; + } + _cartSizeB = cartSizeNGB * XCIFileTrimmer.CartSizeMBinFormattedGB * XCIFileTrimmer.BytesInAMegabyte; + + // Read data size + Pos = _offsetB + XCIFileTrimmer.DataSizeFilePos; + long records = (long)BitConverter.ToUInt32(_binaryReader.ReadBytes(4), 0); + _dataSizeB = RecordsToByte(records); + + return true; + } + } +} diff --git a/src/Ryujinx.HLE.Generators/IpcServiceGenerator.cs b/src/Ryujinx.HLE.Generators/IpcServiceGenerator.cs index 5dcd49af5..5cac4d13a 100644 --- a/src/Ryujinx.HLE.Generators/IpcServiceGenerator.cs +++ b/src/Ryujinx.HLE.Generators/IpcServiceGenerator.cs @@ -13,6 +13,7 @@ namespace Ryujinx.HLE.Generators var syntaxReceiver = (ServiceSyntaxReceiver)context.SyntaxReceiver; CodeGenerator generator = new CodeGenerator(); + generator.AppendLine("#nullable enable"); generator.AppendLine("using System;"); generator.EnterScope($"namespace Ryujinx.HLE.HOS.Services.Sm"); generator.EnterScope($"partial class IUserInterface"); @@ -58,6 +59,7 @@ namespace Ryujinx.HLE.Generators generator.LeaveScope(); generator.LeaveScope(); + generator.AppendLine("#nullable disable"); context.AddSource($"IUserInterface.g.cs", generator.ToString()); } diff --git a/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs b/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs new file mode 100644 index 000000000..05fa82920 --- /dev/null +++ b/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs @@ -0,0 +1,55 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Common.Utilities; +using Ryujinx.UI.App.Common; + +namespace Ryujinx.UI.Common.Models +{ + public record XCITrimmerFileModel( + string Name, + string Path, + bool Trimmable, + bool Untrimmable, + long PotentialSavingsB, + long CurrentSavingsB, + int? PercentageProgress, + XCIFileTrimmer.OperationOutcome ProcessingOutcome) + { + public static XCITrimmerFileModel FromApplicationData(ApplicationData applicationData, XCIFileTrimmerLog logger) + { + var trimmer = new XCIFileTrimmer(applicationData.Path, logger); + + return new XCITrimmerFileModel( + applicationData.Name, + applicationData.Path, + trimmer.CanBeTrimmed, + trimmer.CanBeUntrimmed, + trimmer.DiskSpaceSavingsB, + trimmer.DiskSpaceSavedB, + null, + XCIFileTrimmer.OperationOutcome.Undetermined + ); + } + + public bool IsFailed + { + get + { + return ProcessingOutcome != XCIFileTrimmer.OperationOutcome.Undetermined && + ProcessingOutcome != XCIFileTrimmer.OperationOutcome.Successful; + } + } + + public virtual bool Equals(XCITrimmerFileModel obj) + { + if (obj == null) + return false; + else + return this.Path == obj.Path; + } + + public override int GetHashCode() + { + return this.Path.GetHashCode(); + } + } +} diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index 8c2e7db71..c2ea29b9a 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "Manage file types", "MenuBarToolsInstallFileTypes": "Install file types", "MenuBarToolsUninstallFileTypes": "Uninstall file types", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_View", "MenuBarViewWindow": "Window Size", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Opens the directory which contains Application's Mods", "GameListContextMenuOpenSdModsDirectory": "Open Atmosphere Mods Directory", "GameListContextMenuOpenSdModsDirectoryToolTip": "Opens the alternative SD card Atmosphere directory which contains Application's Mods. Useful for mods that are packaged for real hardware.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} Games Loaded", "StatusBarSystemVersion": "System Version: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "Low limit for memory mappings detected", "LinuxVmMaxMapCountDialogTextPrimary": "Would you like to increase the value of vm.max_map_count to {0}", "LinuxVmMaxMapCountDialogTextSecondary": "Some games might try to create more memory mappings than currently allowed. Ryujinx will crash as soon as this limit gets exceeded.", @@ -400,6 +404,8 @@ "InputDialogTitle": "Input Dialog", "InputDialogOk": "OK", "InputDialogCancel": "Cancel", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "Choose the Profile Name", "InputDialogAddNewProfileHeader": "Please Enter a Profile Name", "InputDialogAddNewProfileSubtext": "(Max Length: {0})", @@ -468,6 +474,7 @@ "DialogUninstallFileTypesSuccessMessage": "Successfully uninstalled file types!", "DialogUninstallFileTypesErrorMessage": "Failed to uninstall file types.", "DialogOpenSettingsWindowLabel": "Open Settings Window", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "Controller Applet", "DialogMessageDialogErrorExceptionMessage": "Error displaying Message Dialog: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Error displaying Software Keyboard: {0}", @@ -670,6 +677,12 @@ "TitleUpdateVersionLabel": "Version {0}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - Info", "RyujinxConfirm": "Ryujinx - Confirmation", "FileDialogAllTypes": "All types", @@ -722,11 +735,37 @@ "SelectDlcDialogTitle": "Select DLC files", "SelectUpdateDialogTitle": "Select update files", "SelectModDialogTitle": "Select mod directory", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "User Profiles Manager", "CheatWindowTitle": "Cheats Manager", "DlcWindowTitle": "Manage Downloadable Content for {0} ({1})", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Title Update Manager", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Cheats Available for {0} [{1}]", @@ -740,6 +779,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Edit Selected", + "Continue": "Continue", "Cancel": "Cancel", "Save": "Save", "Discard": "Discard", diff --git a/src/Ryujinx/Assets/Styles/Styles.xaml b/src/Ryujinx/Assets/Styles/Styles.xaml index b3a6f59c8..05212a7dd 100644 --- a/src/Ryujinx/Assets/Styles/Styles.xaml +++ b/src/Ryujinx/Assets/Styles/Styles.xaml @@ -43,6 +43,10 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs new file mode 100644 index 000000000..580ebc9da --- /dev/null +++ b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs @@ -0,0 +1,101 @@ +using Avalonia.Controls; +using Avalonia.Interactivity; +using Avalonia.Styling; +using FluentAvalonia.UI.Controls; +using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.UI.Common.Models; +using System; +using System.Threading.Tasks; + +namespace Ryujinx.Ava.UI.Windows +{ + public partial class XCITrimmerWindow : UserControl + { + public XCITrimmerViewModel ViewModel; + + public XCITrimmerWindow() + { + DataContext = this; + + InitializeComponent(); + } + + public XCITrimmerWindow(MainWindowViewModel mainWindowViewModel) + { + DataContext = ViewModel = new XCITrimmerViewModel(mainWindowViewModel); + + InitializeComponent(); + } + + public static async Task Show(MainWindowViewModel mainWindowViewModel) + { + ContentDialog contentDialog = new() + { + PrimaryButtonText = "", + SecondaryButtonText = "", + CloseButtonText = "", + Content = new XCITrimmerWindow(mainWindowViewModel), + Title = string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerWindowTitle]), + }; + + Style bottomBorder = new(x => x.OfType().Name("DialogSpace").Child().OfType()); + bottomBorder.Setters.Add(new Setter(IsVisibleProperty, false)); + + contentDialog.Styles.Add(bottomBorder); + + await contentDialog.ShowAsync(); + } + + private void Trim(object sender, RoutedEventArgs e) + { + ViewModel.TrimSelected(); + } + + private void Untrim(object sender, RoutedEventArgs e) + { + ViewModel.UntrimSelected(); + } + + private void Close(object sender, RoutedEventArgs e) + { + ((ContentDialog)Parent).Hide(); + } + + private void Cancel(Object sender, RoutedEventArgs e) + { + ViewModel.Cancel = true; + } + + public void Sort_Checked(object sender, RoutedEventArgs args) + { + if (sender is RadioButton { Tag: string sortField }) + ViewModel.SortingField = Enum.Parse(sortField); + } + + public void Order_Checked(object sender, RoutedEventArgs args) + { + if (sender is RadioButton { Tag: string sortOrder }) + ViewModel.SortingAscending = sortOrder is "Ascending"; + } + + private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) + { + foreach (var content in e.AddedItems) + { + if (content is XCITrimmerFileModel applicationData) + { + ViewModel.Select(applicationData); + } + } + + foreach (var content in e.RemovedItems) + { + if (content is XCITrimmerFileModel applicationData) + { + ViewModel.Deselect(applicationData); + } + } + } + } +} -- 2.47.1 From 75f714488e46fc7181b65dbd9ff433e39fc5339b Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Thu, 7 Nov 2024 00:57:12 +0100 Subject: [PATCH 012/722] Add many missing locales to all languages (#160) * Added many missing locales --- src/Ryujinx/Assets/Locales/ar_SA.json | 22 ++++++++++++++++++++++ src/Ryujinx/Assets/Locales/de_DE.json | 22 ++++++++++++++++++++++ src/Ryujinx/Assets/Locales/el_GR.json | 22 ++++++++++++++++++++++ src/Ryujinx/Assets/Locales/en_US.json | 2 +- src/Ryujinx/Assets/Locales/es_ES.json | 21 +++++++++++++++++++++ src/Ryujinx/Assets/Locales/fr_FR.json | 10 +++++----- src/Ryujinx/Assets/Locales/he_IL.json | 22 ++++++++++++++++++++++ src/Ryujinx/Assets/Locales/it_IT.json | 2 +- src/Ryujinx/Assets/Locales/ja_JP.json | 21 +++++++++++++++++++++ src/Ryujinx/Assets/Locales/ko_KR.json | 22 ++++++++++++++++++++++ src/Ryujinx/Assets/Locales/pl_PL.json | 22 ++++++++++++++++++++++ src/Ryujinx/Assets/Locales/ru_RU.json | 22 ++++++++++++++++++++++ src/Ryujinx/Assets/Locales/th_TH.json | 4 +++- src/Ryujinx/Assets/Locales/tr_TR.json | 24 +++++++++++++++++++++++- src/Ryujinx/Assets/Locales/uk_UA.json | 22 ++++++++++++++++++++++ src/Ryujinx/Assets/Locales/zh_CN.json | 4 +++- src/Ryujinx/Assets/Locales/zh_TW.json | 22 ++++++++++++++++++++++ 17 files changed, 276 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index 22e270901..f2720b669 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "استخدم مراقب الأجهزة الافتراضية", "MenuBarFile": "_ملف", "MenuBarFileOpenFromFile": "_تحميل تطبيق من ملف", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "تحميل لُعْبَة غير محزومة", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "‫فتح مجلد Ryujinx", "MenuBarFileOpenLogsFolder": "فتح مجلد السجلات", "MenuBarFileExit": "_خروج", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "عند الخمول", "SettingsTabGeneralHideCursorAlways": "دائما", "SettingsTabGeneralGameDirectories": "مجلدات الألعاب", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "إضافة", "SettingsTabGeneralRemove": "إزالة", "SettingsTabSystem": "النظام", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "تعيين كمفضل", "GameListContextMenuToggleFavoriteToolTip": "تبديل الحالة المفضلة للعبة", "SettingsTabGeneralTheme": "السمة:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "داكن", "SettingsTabGeneralThemeLight": "فاتح", "ControllerSettingsConfigureGeneral": "ضبط", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "أدخل مجلد اللعبة لإضافته إلى القائمة", "AddGameDirTooltip": "إضافة مجلد اللعبة إلى القائمة", "RemoveGameDirTooltip": "إزالة مجلد اللعبة المحدد", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "استخدم سمة أفالونيا المخصصة لواجهة المستخدم الرسومية لتغيير مظهر قوائم المحاكي", "CustomThemePathTooltip": "مسار سمة واجهة المستخدم المخصصة", "CustomThemeBrowseTooltip": "تصفح للحصول على سمة واجهة المستخدم المخصصة", @@ -606,6 +615,8 @@ "DebugLogTooltip": "طباعة رسائل سجل التصحيح في وحدة التحكم.\n\nاستخدم هذا فقط إذا طلب منك أحد الموظفين تحديدًا ذلك، لأنه سيجعل من الصعب قراءة السجلات وسيؤدي إلى تدهور أداء المحاكي.", "LoadApplicationFileTooltip": "افتح مستكشف الملفات لاختيار ملف متوافق مع سويتش لتحميله", "LoadApplicationFolderTooltip": "افتح مستكشف الملفات لاختيار تطبيق متوافق مع سويتش للتحميل", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "فتح مجلد نظام ملفات ريوجينكس", "OpenRyujinxLogsTooltip": "يفتح المجلد الذي تتم كتابة السجلات إليه", "ExitTooltip": "الخروج من ريوجينكس", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "فتح دليل الإعداد", "NoUpdate": "لا يوجد تحديث", "TitleUpdateVersionLabel": "الإصدار: {0}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "ريوجينكس - معلومات", "RyujinxConfirm": "ريوجينكس - تأكيد", "FileDialogAllTypes": "كل الأنواع", @@ -714,9 +727,17 @@ "DlcWindowTitle": "إدارة المحتوى القابل للتنزيل لـ {0} ({1})", "ModWindowTitle": "إدارة التعديلات لـ {0} ({1})", "UpdateWindowTitle": "مدير تحديث العنوان", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "الغش متوفر لـ {0} [{1}]", "BuildId": "معرف البناء:", + "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", "DlcWindowHeading": "المحتويات القابلة للتنزيل {0}", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} تعديل", "UserProfilesEditProfile": "تعديل المحدد", "Cancel": "إلغاء", @@ -767,6 +788,7 @@ "GraphicsScalingFilterBilinear": "Bilinear", "GraphicsScalingFilterNearest": "Nearest", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "المستوى", "GraphicsScalingFilterLevelTooltip": "اضبط مستوى وضوح FSR 1.0. الأعلى هو أكثر وضوحا.", "SmaaLow": "SMAA منخفض", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index 94e372e2e..4004ec325 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "Hypervisor verwenden", "MenuBarFile": "_Datei", "MenuBarFileOpenFromFile": "Datei _öffnen", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "_Entpacktes Spiel öffnen", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "Ryujinx-Ordner öffnen", "MenuBarFileOpenLogsFolder": "Logs-Ordner öffnen", "MenuBarFileExit": "_Beenden", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "Mauszeiger bei Inaktivität ausblenden", "SettingsTabGeneralHideCursorAlways": "Immer", "SettingsTabGeneralGameDirectories": "Spielverzeichnisse", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "Hinzufügen", "SettingsTabGeneralRemove": "Entfernen", "SettingsTabSystem": "System", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "Als Favoriten hinzufügen/entfernen", "GameListContextMenuToggleFavoriteToolTip": "Aktiviert den Favoriten-Status des Spiels", "SettingsTabGeneralTheme": "Design:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "Dunkel", "SettingsTabGeneralThemeLight": "Hell", "ControllerSettingsConfigureGeneral": "Konfigurieren", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "Gibt das Spielverzeichnis an, das der Liste hinzuzufügt wird", "AddGameDirTooltip": "Fügt ein neues Spielverzeichnis hinzu", "RemoveGameDirTooltip": "Entfernt das ausgewähltes Spielverzeichnis", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "Verwende ein eigenes Design für die Emulator-Benutzeroberfläche", "CustomThemePathTooltip": "Gibt den Pfad zum Design für die Emulator-Benutzeroberfläche an", "CustomThemeBrowseTooltip": "Ermöglicht die Suche nach einem benutzerdefinierten Design für die Emulator-Benutzeroberfläche", @@ -606,6 +615,8 @@ "DebugLogTooltip": "Ausgabe von Debug-Logs in der Konsole.\n\nVerwende diese Option nur auf ausdrückliche Anweisung von Ryujinx Entwicklern, da sie das Lesen der Protokolle erschwert und die Leistung des Emulators verschlechtert.", "LoadApplicationFileTooltip": "Öffnet die Dateiauswahl um Datei zu laden, welche mit der Switch kompatibel ist", "LoadApplicationFolderTooltip": "Öffnet die Dateiauswahl um ein Spiel zu laden, welches mit der Switch kompatibel ist", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "Öffnet den Ordner, der das Ryujinx Dateisystem enthält", "OpenRyujinxLogsTooltip": "Öffnet den Ordner, in welchem die Logs gespeichert werden", "ExitTooltip": "Beendet Ryujinx", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "Öffne den 'Setup Guide'", "NoUpdate": "Kein Update", "TitleUpdateVersionLabel": "Version {0} - {1}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "Ryujinx - Info", "RyujinxConfirm": "Ryujinx - Bestätigung", "FileDialogAllTypes": "Alle Typen", @@ -714,9 +727,17 @@ "DlcWindowTitle": "Spiel-DLC verwalten", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Spiel-Updates verwalten", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Cheats verfügbar für {0} [{1}]", + "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", "BuildId": "BuildId:", "DlcWindowHeading": "DLC verfügbar für {0} [{1}]", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Profil bearbeiten", "Cancel": "Abbrechen", @@ -767,6 +788,7 @@ "GraphicsScalingFilterBilinear": "Bilinear", "GraphicsScalingFilterNearest": "Nächstes", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "Stufe", "GraphicsScalingFilterLevelTooltip": "FSR 1.0 Schärfelevel festlegen. Höher ist schärfer.", "SmaaLow": "SMAA Niedrig", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index 89389d337..56940ffc9 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "Χρήση Hypervisor", "MenuBarFile": "_Αρχείο", "MenuBarFileOpenFromFile": "_Φόρτωση Αρχείου Εφαρμογής", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "Φόρτωση Απακετάριστου _Παιχνιδιού", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "Άνοιγμα Φακέλου Ryujinx", "MenuBarFileOpenLogsFolder": "Άνοιγμα Φακέλου Καταγραφής", "MenuBarFileExit": "_Έξοδος", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "Απόκρυψη Δρομέα στην Αδράνεια", "SettingsTabGeneralHideCursorAlways": "Πάντα", "SettingsTabGeneralGameDirectories": "Τοποθεσίες παιχνιδιών", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "Προσθήκη", "SettingsTabGeneralRemove": "Αφαίρεση", "SettingsTabSystem": "Σύστημα", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "Εναλλαγή Αγαπημένου", "GameListContextMenuToggleFavoriteToolTip": "Εναλλαγή της Κατάστασης Αγαπημένο του Παιχνιδιού", "SettingsTabGeneralTheme": "Theme:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "Dark", "SettingsTabGeneralThemeLight": "Light", "ControllerSettingsConfigureGeneral": "Παραμέτρων", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "Εισαγάγετε μία τοποθεσία παιχνιδιών για προσθήκη στη λίστα", "AddGameDirTooltip": "Προσθέστε μία τοποθεσία παιχνιδιών στη λίστα", "RemoveGameDirTooltip": "Αφαιρέστε την επιλεγμένη τοποθεσία παιχνιδιών", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "Ενεργοποίηση ή απενεργοποίηση προσαρμοσμένων θεμάτων στο GUI", "CustomThemePathTooltip": "Διαδρομή προς το προσαρμοσμένο θέμα GUI", "CustomThemeBrowseTooltip": "Αναζητήστε ένα προσαρμοσμένο θέμα GUI", @@ -606,6 +615,8 @@ "DebugLogTooltip": "Ενεργοποιεί την εκτύπωση μηνυμάτων αρχείου καταγραφής εντοπισμού σφαλμάτων", "LoadApplicationFileTooltip": "Ανοίξτε έναν επιλογέα αρχείων για να επιλέξετε ένα αρχείο συμβατό με το Switch για φόρτωση", "LoadApplicationFolderTooltip": "Ανοίξτε έναν επιλογέα αρχείων για να επιλέξετε μία μη συσκευασμένη εφαρμογή, συμβατή με το Switch για φόρτωση", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "Ανοίξτε το φάκελο συστήματος αρχείων Ryujinx", "OpenRyujinxLogsTooltip": "Ανοίξτε το φάκελο στον οποίο διατηρούνται τα αρχεία καταγραφής", "ExitTooltip": "Έξοδος από το Ryujinx", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "Ανοίξτε τον Οδηγό Εγκατάστασης.", "NoUpdate": "Καμία Eνημέρωση", "TitleUpdateVersionLabel": "Version {0} - {1}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "Ryujinx - Πληροφορίες", "RyujinxConfirm": "Ryujinx - Επιβεβαίωση", "FileDialogAllTypes": "Όλοι οι τύποι", @@ -714,9 +727,17 @@ "DlcWindowTitle": "Downloadable Content Manager", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Διαχειριστής Ενημερώσεων Τίτλου", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Διαθέσιμα Cheats για {0} [{1}]", "BuildId": "BuildId:", + "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", "DlcWindowHeading": "{0} Downloadable Content(s) available for {1} ({2})", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Επεξεργασία Επιλεγμένων", "Cancel": "Ακύρωση", @@ -767,6 +788,7 @@ "GraphicsScalingFilterBilinear": "Bilinear", "GraphicsScalingFilterNearest": "Nearest", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "Επίπεδο", "GraphicsScalingFilterLevelTooltip": "Set FSR 1.0 sharpening level. Higher is sharper.", "SmaaLow": "Χαμηλό SMAA", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index c2ea29b9a..f0b10c945 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -771,7 +771,7 @@ "CheatWindowHeading": "Cheats Available for {0} [{1}]", "BuildId": "BuildId:", "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", - "DlcWindowHeading": "{0} Downloadable Content(s)", + "DlcWindowHeading": "{0} Downloadable Content(s) available for {1} ({2})", "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index d6eb8017a..bbc86ed0c 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "Usar hipervisor", "MenuBarFile": "_Archivo", "MenuBarFileOpenFromFile": "_Cargar aplicación desde un archivo", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "Cargar juego _desempaquetado", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "Abrir carpeta de Ryujinx", "MenuBarFileOpenLogsFolder": "Abrir carpeta de registros", "MenuBarFileExit": "_Salir", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "Ocultar cursor cuando esté inactivo", "SettingsTabGeneralHideCursorAlways": "Siempre", "SettingsTabGeneralGameDirectories": "Carpetas de juegos", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "Agregar", "SettingsTabGeneralRemove": "Quitar", "SettingsTabSystem": "Sistema", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "Marcar favorito", "GameListContextMenuToggleFavoriteToolTip": "Marca o desmarca el juego como favorito", "SettingsTabGeneralTheme": "Tema:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "Oscuro", "SettingsTabGeneralThemeLight": "Claro", "ControllerSettingsConfigureGeneral": "Configurar", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "Elige un directorio de juegos para mostrar en la ventana principal", "AddGameDirTooltip": "Agrega un directorio de juegos a la lista", "RemoveGameDirTooltip": "Quita el directorio seleccionado de la lista", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "Activa o desactiva los temas personalizados para la interfaz", "CustomThemePathTooltip": "Carpeta que contiene los temas personalizados para la interfaz", "CustomThemeBrowseTooltip": "Busca un tema personalizado para la interfaz", @@ -606,6 +615,8 @@ "DebugLogTooltip": "Escribe mensajes de debug en la consola\n\nActiva esto solo si un miembro del equipo te lo pide expresamente, pues hará que el registro sea difícil de leer y empeorará el rendimiento del emulador.", "LoadApplicationFileTooltip": "Abre el explorador de archivos para elegir un archivo compatible con Switch para cargar", "LoadApplicationFolderTooltip": "Abre el explorador de archivos para elegir un archivo desempaquetado y compatible con Switch para cargar", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "Abre la carpeta de sistema de Ryujinx", "OpenRyujinxLogsTooltip": "Abre la carpeta en la que se guardan los registros", "ExitTooltip": "Cierra Ryujinx", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "Abrir la guía de instalación", "NoUpdate": "No actualizado", "TitleUpdateVersionLabel": "Versión {0} - {1}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "Ryujinx - Info", "RyujinxConfirm": "Ryujinx - Confirmación", "FileDialogAllTypes": "Todos los tipos", @@ -714,9 +727,16 @@ "DlcWindowTitle": "Administrar contenido descargable", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Administrar actualizaciones", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Cheats disponibles para {0} [{1}]", "BuildId": "Id de compilación:", "DlcWindowHeading": "Contenido descargable disponible para {0} [{1}]", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Editar selección", "Cancel": "Cancelar", @@ -767,6 +787,7 @@ "GraphicsScalingFilterBilinear": "Bilinear\n", "GraphicsScalingFilterNearest": "Cercano", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "Nivel", "GraphicsScalingFilterLevelTooltip": "Ajuste el nivel de nitidez FSR 1.0. Mayor es más nítido.", "SmaaLow": "SMAA Bajo", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index df8adac00..0c673f719 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -100,7 +100,7 @@ "SettingsTabGeneralCheckUpdatesOnLaunch": "Vérifier les mises à jour au démarrage", "SettingsTabGeneralShowConfirmExitDialog": "Afficher le message de \"Confirmation de sortie\"", "SettingsTabGeneralRememberWindowState": "Mémoriser la taille/position de la fenêtre", - "SettingsTabGeneralShowTitleBar": "Show Title Bar (Requires restart)", + "SettingsTabGeneralShowTitleBar": "Afficher Barre de Titre (Nécessite redémarrage)", "SettingsTabGeneralHideCursor": "Masquer le Curseur :", "SettingsTabGeneralHideCursorNever": "Jamais", "SettingsTabGeneralHideCursorOnIdle": "Masquer le curseur si inactif", @@ -151,7 +151,7 @@ "SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacksNote": "Cela peut causer des instabilités", - "SettingsTabSystemDramSize": "Taille de la DRAM:", + "SettingsTabSystemDramSize": "Taille de la DRAM :", "SettingsTabSystemDramSize4GiB": "4GiO", "SettingsTabSystemDramSize6GiB": "6GiO", "SettingsTabSystemDramSize8GiB": "8GiO", @@ -181,7 +181,7 @@ "SettingsTabGraphicsAspectRatio32x9": "32:9", "SettingsTabGraphicsAspectRatioStretch": "Étirer pour remplir la fenêtre", "SettingsTabGraphicsDeveloperOptions": "Options développeur", - "SettingsTabGraphicsShaderDumpPath": "Chemin du dossier de copie des shaders:", + "SettingsTabGraphicsShaderDumpPath": "Chemin du dossier de copie des shaders :", "SettingsTabLogging": "Journaux", "SettingsTabLoggingLogging": "Journaux", "SettingsTabLoggingEnableLoggingToFile": "Activer la sauvegarde des journaux vers un fichier", @@ -387,7 +387,7 @@ "UserProfilesSelectedUserProfile": "Profil utilisateur sélectionné :", "UserProfilesSaveProfileName": "Enregistrer le nom du profil", "UserProfilesChangeProfileImage": "Changer l'image du profil", - "UserProfilesAvailableUserProfiles": "Profils utilisateurs disponibles:", + "UserProfilesAvailableUserProfiles": "Profils utilisateurs disponibles :", "UserProfilesAddNewProfile": "Créer un profil", "UserProfilesDelete": "Supprimer", "UserProfilesClose": "Fermer", @@ -669,7 +669,7 @@ "NoUpdate": "Aucune mise à jour", "TitleUpdateVersionLabel": "Version {0}", "TitleBundledUpdateVersionLabel": "Inclus avec le jeu: Version {0}", - "TitleBundledDlcLabel": "Inclus avec le jeu:", + "TitleBundledDlcLabel": "Inclus avec le jeu :", "RyujinxInfo": "Ryujinx - Info", "RyujinxConfirm": "Ryujinx - Confirmation", "FileDialogAllTypes": "Tous les types", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index eb7ccf322..cac3fbf53 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "השתמש ב Hypervisor", "MenuBarFile": "_קובץ", "MenuBarFileOpenFromFile": "_טען יישום מקובץ", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "טען משחק _שאינו ארוז", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "פתח את תיקיית ריוג'ינקס", "MenuBarFileOpenLogsFolder": "פתח את תיקיית קבצי הלוג", "MenuBarFileExit": "_יציאה", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "במצב סרק", "SettingsTabGeneralHideCursorAlways": "תמיד", "SettingsTabGeneralGameDirectories": "תקיות משחקים", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "הוסף", "SettingsTabGeneralRemove": "הסר", "SettingsTabSystem": "מערכת", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "למתג העדפה", "GameListContextMenuToggleFavoriteToolTip": "למתג סטטוס העדפה של משחק", "SettingsTabGeneralTheme": "ערכת נושא:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "כהה", "SettingsTabGeneralThemeLight": "בהיר", "ControllerSettingsConfigureGeneral": "הגדר", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "הזן תקיית משחקים כדי להוסיף לרשימה", "AddGameDirTooltip": "הוסף תקיית משחקים לרשימה", "RemoveGameDirTooltip": "הסר את תקיית המשחקים שנבחרה", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "השתמש בעיצוב מותאם אישית של אבלוניה עבור ה-ממשק הגראפי כדי לשנות את המראה של תפריטי האמולטור", "CustomThemePathTooltip": "נתיב לערכת נושא לממשק גראפי מותאם אישית", "CustomThemeBrowseTooltip": "חפש עיצוב ממשק גראפי מותאם אישית", @@ -606,6 +615,8 @@ "DebugLogTooltip": "מדפיס הודעות יומן ניפוי באגים בשורת הפקודות.", "LoadApplicationFileTooltip": "פתח סייר קבצים כדי לבחור קובץ תואם סוויץ' לטעינה", "LoadApplicationFolderTooltip": "פתח סייר קבצים כדי לבחור יישום תואם סוויץ', לא ארוז לטעינה.", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "פתח את תיקיית מערכת הקבצים ריוג'ינקס", "OpenRyujinxLogsTooltip": "פותח את התיקיה שאליה נכתבים רישומים", "ExitTooltip": "צא מריוג'ינקס", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "פתח מדריך התקנה", "NoUpdate": "אין עדכון", "TitleUpdateVersionLabel": "גרסה {0}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "ריוג'ינקס - מידע", "RyujinxConfirm": "ריוג'ינקס - אישור", "FileDialogAllTypes": "כל הסוגים", @@ -714,9 +727,17 @@ "DlcWindowTitle": "נהל הרחבות משחק עבור {0} ({1})", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "נהל עדכוני משחקים", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "צ'יטים זמינים עבור {0} [{1}]", "BuildId": "מזהה בניה:", + "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", "DlcWindowHeading": "{0} הרחבות משחק", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} מוד(ים)", "UserProfilesEditProfile": "ערוך נבחר/ים", "Cancel": "בטל", @@ -767,6 +788,7 @@ "GraphicsScalingFilterBilinear": "Bilinear", "GraphicsScalingFilterNearest": "Nearest", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "רמה", "GraphicsScalingFilterLevelTooltip": "Set FSR 1.0 sharpening level. Higher is sharper.", "SmaaLow": "SMAA נמוך", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index 87c8e6bab..419a5dd2b 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -788,12 +788,12 @@ "GraphicsScalingFilterBilinear": "Bilineare", "GraphicsScalingFilterNearest": "Nearest", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "Livello", "GraphicsScalingFilterLevelTooltip": "Imposta il livello di nitidezza di FSR 1.0. Valori più alti comportano una maggiore nitidezza.", "SmaaLow": "SMAA Basso", "SmaaMedium": "SMAA Medio", "SmaaHigh": "SMAA Alto", - "GraphicsScalingFilterArea": "Area", "SmaaUltra": "SMAA Ultra", "UserEditorTitle": "Modificare L'Utente", "UserEditorTitleCreate": "Crea Un Utente", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index d43dedc2a..b2c0a506e 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "ハイパーバイザーを使用", "MenuBarFile": "ファイル(_F)", "MenuBarFileOpenFromFile": "ファイルからアプリケーションをロード(_L)", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "展開されたゲームをロード", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "Ryujinx フォルダを開く", "MenuBarFileOpenLogsFolder": "ログフォルダを開く", "MenuBarFileExit": "終了(_E)", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "アイドル時", "SettingsTabGeneralHideCursorAlways": "常時", "SettingsTabGeneralGameDirectories": "ゲームディレクトリ", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "追加", "SettingsTabGeneralRemove": "削除", "SettingsTabSystem": "システム", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "お気に入りを切り替え", "GameListContextMenuToggleFavoriteToolTip": "ゲームをお気に入りに含めるかどうかを切り替えます", "SettingsTabGeneralTheme": "テーマ:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "ダーク", "SettingsTabGeneralThemeLight": "ライト", "ControllerSettingsConfigureGeneral": "設定", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "リストに追加するゲームディレクトリを入力します", "AddGameDirTooltip": "リストにゲームディレクトリを追加します", "RemoveGameDirTooltip": "選択したゲームディレクトリを削除します", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "エミュレータのメニュー外観を変更するためカスタム Avalonia テーマを使用します", "CustomThemePathTooltip": "カスタム GUI テーマのパスです", "CustomThemeBrowseTooltip": "カスタム GUI テーマを参照します", @@ -606,6 +615,8 @@ "DebugLogTooltip": "デバッグログメッセージをコンソールに出力します.\n\nログが読みづらくなり,エミュレータのパフォーマンスが低下するため,開発者から特別な指示がある場合のみ使用してください.", "LoadApplicationFileTooltip": "ロードする Switch 互換のファイルを選択するためファイルエクスプローラを開きます", "LoadApplicationFolderTooltip": "ロードする Switch 互換の展開済みアプリケーションを選択するためファイルエクスプローラを開きます", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "Ryujinx ファイルシステムフォルダを開きます", "OpenRyujinxLogsTooltip": "ログが格納されるフォルダを開きます", "ExitTooltip": "Ryujinx を終了します", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "セットアップガイドを開く", "NoUpdate": "アップデートなし", "TitleUpdateVersionLabel": "バージョン {0} - {1}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "Ryujinx - 情報", "RyujinxConfirm": "Ryujinx - 確認", "FileDialogAllTypes": "すべての種別", @@ -714,9 +727,16 @@ "DlcWindowTitle": "DLC 管理", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "アップデート管理", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "利用可能なチート {0} [{1}]", "BuildId": "ビルドID:", "DlcWindowHeading": "利用可能な DLC {0} [{1}]", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "編集", "Cancel": "キャンセル", @@ -767,6 +787,7 @@ "GraphicsScalingFilterBilinear": "Bilinear", "GraphicsScalingFilterNearest": "Nearest", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "レベル", "GraphicsScalingFilterLevelTooltip": "FSR 1.0のシャープ化レベルを設定します. 高い値ほどシャープになります.", "SmaaLow": "SMAA Low", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 6e5a7f187..bce762d19 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "하이퍼바이저 사용하기", "MenuBarFile": "_파일", "MenuBarFileOpenFromFile": "_파일에서 응용 프로그램 불러오기", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "_압축을 푼 게임 불러오기", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "Ryujinx 폴더 열기", "MenuBarFileOpenLogsFolder": "로그 폴더 열기", "MenuBarFileExit": "_종료", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "유휴 상태", "SettingsTabGeneralHideCursorAlways": "언제나", "SettingsTabGeneralGameDirectories": "게임 디렉터리", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "추가", "SettingsTabGeneralRemove": "제거", "SettingsTabSystem": "시스템", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "즐겨찾기 전환", "GameListContextMenuToggleFavoriteToolTip": "게임 즐겨찾기 상태 전환", "SettingsTabGeneralTheme": "테마:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "어두운 테마", "SettingsTabGeneralThemeLight": "밝은 테마", "ControllerSettingsConfigureGeneral": "구성", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "목록에 추가할 게임 디렉터리 입력", "AddGameDirTooltip": "목록에 게임 디렉터리 추가", "RemoveGameDirTooltip": "선택한 게임 디렉터리 제거", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "GUI에 사용자 지정 Avalonia 테마를 사용하여 에뮬레이터 메뉴의 모양 변경", "CustomThemePathTooltip": "사용자 정의 GUI 테마 경로", "CustomThemeBrowseTooltip": "사용자 정의 GUI 테마 찾아보기", @@ -606,6 +615,8 @@ "DebugLogTooltip": "콘솔에 디버그 로그 메시지를 인쇄합니다.\n\n로그를 읽기 어렵게 만들고 에뮬레이터 성능을 악화시키므로 직원이 구체적으로 지시한 경우에만 사용하세요.", "LoadApplicationFileTooltip": "파일 탐색기를 열어 불러올 스위치 호환 파일 선택", "LoadApplicationFolderTooltip": "파일 탐색기를 열어 불러올 스위치 호환 압축 해제 응용 프로그램 선택", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "Ryujinx 파일 시스템 폴더 열기", "OpenRyujinxLogsTooltip": "로그가 기록된 폴더 열기", "ExitTooltip": "Ryujinx 종료", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "설정 가이드 열기", "NoUpdate": "업데이트 없음", "TitleUpdateVersionLabel": "버전 {0}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "Ryujinx - 정보", "RyujinxConfirm": "Ryujinx - 확인", "FileDialogAllTypes": "모든 유형", @@ -714,9 +727,17 @@ "DlcWindowTitle": "{0} ({1})의 다운로드 가능한 콘텐츠 관리", "ModWindowTitle": "{0} ({1})의 Mod 관리", "UpdateWindowTitle": "타이틀 업데이트 관리자", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "{0} [{1}]에 사용할 수 있는 치트", "BuildId": "빌드ID :", + "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", "DlcWindowHeading": "{0} 내려받기 가능한 콘텐츠", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "선택된 항목 편집", "Cancel": "취소", @@ -767,6 +788,7 @@ "GraphicsScalingFilterBilinear": "Bilinear", "GraphicsScalingFilterNearest": "Nearest", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "수준", "GraphicsScalingFilterLevelTooltip": "FSR 1.0의 샤프닝 레벨을 설정하세요. 높을수록 더 또렷해집니다.", "SmaaLow": "SMAA 낮음", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index a377979bd..5a276a7c5 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "Użyj Hipernadzorcy", "MenuBarFile": "_Plik", "MenuBarFileOpenFromFile": "_Załaduj aplikację z pliku", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "Załaduj _rozpakowaną grę", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "Otwórz folder Ryujinx", "MenuBarFileOpenLogsFolder": "Otwórz folder plików dziennika zdarzeń", "MenuBarFileExit": "_Wyjdź", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "Gdy bezczynny", "SettingsTabGeneralHideCursorAlways": "Zawsze", "SettingsTabGeneralGameDirectories": "Katalogi gier", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "Dodaj", "SettingsTabGeneralRemove": "Usuń", "SettingsTabSystem": "System", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "Przełącz na ulubione", "GameListContextMenuToggleFavoriteToolTip": "Przełącz status Ulubionej Gry", "SettingsTabGeneralTheme": "Motyw:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "Ciemny", "SettingsTabGeneralThemeLight": "Jasny", "ControllerSettingsConfigureGeneral": "Konfiguruj", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "Wprowadź katalog gier aby dodać go do listy", "AddGameDirTooltip": "Dodaj katalog gier do listy", "RemoveGameDirTooltip": "Usuń wybrany katalog gier", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "Użyj niestandardowego motywu Avalonia dla GUI, aby zmienić wygląd menu emulatora", "CustomThemePathTooltip": "Ścieżka do niestandardowego motywu GUI", "CustomThemeBrowseTooltip": "Wyszukaj niestandardowy motyw GUI", @@ -606,6 +615,8 @@ "DebugLogTooltip": "Wyświetla komunikaty dziennika debugowania w konsoli.\n\nUżywaj tego tylko na wyraźne polecenie członka załogi, ponieważ utrudni to odczytanie dzienników i pogorszy wydajność emulatora.", "LoadApplicationFileTooltip": "Otwórz eksplorator plików, aby wybrać plik kompatybilny z Switch do wczytania", "LoadApplicationFolderTooltip": "Otwórz eksplorator plików, aby wybrać zgodną z Switch, rozpakowaną aplikację do załadowania", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "Otwórz folder systemu plików Ryujinx", "OpenRyujinxLogsTooltip": "Otwiera folder, w którym zapisywane są logi", "ExitTooltip": "Wyjdź z Ryujinx", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "Otwórz Podręcznik Konfiguracji", "NoUpdate": "Brak Aktualizacji", "TitleUpdateVersionLabel": "Wersja {0} - {1}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "Ryujinx - Info", "RyujinxConfirm": "Ryujinx - Potwierdzenie", "FileDialogAllTypes": "Wszystkie typy", @@ -714,9 +727,17 @@ "DlcWindowTitle": "Menedżer Zawartości do Pobrania", "ModWindowTitle": "Zarządzaj modami dla {0} ({1})", "UpdateWindowTitle": "Menedżer Aktualizacji Tytułu", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Kody Dostępne dla {0} [{1}]", "BuildId": "Identyfikator wersji:", + "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", "DlcWindowHeading": "{0} Zawartości do Pobrania dostępna dla {1} ({2})", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(y/ów)", "UserProfilesEditProfile": "Edytuj Zaznaczone", "Cancel": "Anuluj", @@ -767,6 +788,7 @@ "GraphicsScalingFilterBilinear": "Dwuliniowe", "GraphicsScalingFilterNearest": "Najbliższe", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "Poziom", "GraphicsScalingFilterLevelTooltip": "Ustaw poziom ostrzeżenia FSR 1.0. Wyższy jest ostrzejszy.", "SmaaLow": "SMAA Niskie", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index 8b9d39302..4980a9a5d 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "Использовать Hypervisor", "MenuBarFile": "_Файл", "MenuBarFileOpenFromFile": "_Добавить приложение из файла", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "Добавить _распакованную игру", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "Открыть папку Ryujinx", "MenuBarFileOpenLogsFolder": "Открыть папку с логами", "MenuBarFileExit": "_Выход", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "В простое", "SettingsTabGeneralHideCursorAlways": "Всегда", "SettingsTabGeneralGameDirectories": "Папки с играми", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "Добавить", "SettingsTabGeneralRemove": "Удалить", "SettingsTabSystem": "Система", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "Добавить в избранное", "GameListContextMenuToggleFavoriteToolTip": "Добавляет игру в избранное и помечает звездочкой", "SettingsTabGeneralTheme": "Тема:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "Темная", "SettingsTabGeneralThemeLight": "Светлая", "ControllerSettingsConfigureGeneral": "Настройка", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "Введите путь к папке с играми для добавления ее в список выше", "AddGameDirTooltip": "Добавить папку с играми в список", "RemoveGameDirTooltip": "Удалить выбранную папку игры", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "Включить или отключить пользовательские темы", "CustomThemePathTooltip": "Путь к пользовательской теме для интерфейса", "CustomThemeBrowseTooltip": "Просмотр пользовательской темы интерфейса", @@ -606,6 +615,8 @@ "DebugLogTooltip": "Выводит журнал сообщений отладки в консоли.\n\nИспользуйте только в случае просьбы разработчика, так как включение этой функции затруднит чтение журналов и ухудшит работу эмулятора.", "LoadApplicationFileTooltip": "Открывает файловый менеджер для выбора файла, совместимого с Nintendo Switch.", "LoadApplicationFolderTooltip": "Открывает файловый менеджер для выбора распакованного приложения, совместимого с Nintendo Switch.", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "Открывает папку с файлами Ryujinx. ", "OpenRyujinxLogsTooltip": "Открывает папку в которую записываются логи", "ExitTooltip": "Выйти из Ryujinx", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "Открыть руководство по установке", "NoUpdate": "Без обновлений", "TitleUpdateVersionLabel": "Version {0} - {1}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "Ryujinx - Информация", "RyujinxConfirm": "Ryujinx - Подтверждение", "FileDialogAllTypes": "Все типы", @@ -714,9 +727,17 @@ "DlcWindowTitle": "Управление DLC для {0} ({1})", "ModWindowTitle": "Управление модами для {0} ({1})", "UpdateWindowTitle": "Менеджер обновлений игр", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Доступные читы для {0} [{1}]", "BuildId": "ID версии:", + "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", "DlcWindowHeading": "{0} DLC", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "Моды для {0} ", "UserProfilesEditProfile": "Изменить выбранные", "Cancel": "Отмена", @@ -767,6 +788,7 @@ "GraphicsScalingFilterBilinear": "Билинейная", "GraphicsScalingFilterNearest": "Ступенчатая", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "Уровень", "GraphicsScalingFilterLevelTooltip": "Выбор режима работы FSR 1.0. Выше - четче.", "SmaaLow": "SMAA Низкое", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index 9e267dc9e..16c2d9455 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -107,6 +107,7 @@ "SettingsTabGeneralHideCursorAlways": "ตลอดเวลา", "SettingsTabGeneralGameDirectories": "ไดเรกทอรี่ของเกม", "SettingsTabGeneralAutoloadDirectories": "โหลดไดเรกทอรี DLC/ไฟล์อัปเดต อัตโนมัติ", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "เพิ่ม", "SettingsTabGeneralRemove": "เอาออก", "SettingsTabSystem": "ระบบ", @@ -734,8 +735,9 @@ "DlcWindowHeading": "{0} DLC ที่สามารถดาวน์โหลดได้", "DlcWindowDlcAddedMessage": "{0} DLC ใหม่ที่เพิ่มเข้ามา", "AutoloadDlcAddedMessage": "{0} ใหม่ที่เพิ่มเข้ามา", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", "AutoloadUpdateAddedMessage": "{0} อัพเดตใหม่ที่เพิ่มเข้ามา", - "AutoloadDlcAndUpdateAddedMessage": "{0} DLC ใหม่ที่เพิ่มเข้ามาและ {1} อัพเดตใหม่ที่เพิ่มเข้ามา", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} ม็อด", "UserProfilesEditProfile": "แก้ไขที่เลือกแล้ว", "Cancel": "ยกเลิก", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index 1360a122e..d26ca18b7 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "Hypervisor Kullan", "MenuBarFile": "_Dosya", "MenuBarFileOpenFromFile": "_Dosyadan Uygulama Aç", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "_Sıkıştırılmamış Oyun Aç", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "Ryujinx Klasörünü aç", "MenuBarFileOpenLogsFolder": "Logs Klasörünü aç", "MenuBarFileExit": "_Çıkış", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "Hareketsiz Durumda", "SettingsTabGeneralHideCursorAlways": "Her Zaman", "SettingsTabGeneralGameDirectories": "Oyun Dizinleri", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "Ekle", "SettingsTabGeneralRemove": "Kaldır", "SettingsTabSystem": "Sistem", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "Favori Ayarla", "GameListContextMenuToggleFavoriteToolTip": "Oyunu Favorilere Ekle/Çıkar", "SettingsTabGeneralTheme": "Tema:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "Karanlık", "SettingsTabGeneralThemeLight": "Aydınlık", "ControllerSettingsConfigureGeneral": "Ayarla", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "Listeye eklemek için oyun dizini seçin", "AddGameDirTooltip": "Listeye oyun dizini ekle", "RemoveGameDirTooltip": "Seçili oyun dizinini kaldır", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "Emülatör pencerelerinin görünümünü değiştirmek için özel bir Avalonia teması kullan", "CustomThemePathTooltip": "Özel arayüz temasının yolu", "CustomThemeBrowseTooltip": "Özel arayüz teması için göz at", @@ -606,6 +615,8 @@ "DebugLogTooltip": "Debug log mesajlarını konsola yazdırır.\n\nBu seçeneği yalnızca geliştirici üyemiz belirtirse aktifleştirin, çünkü bu seçenek log dosyasını okumayı zorlaştırır ve emülatörün performansını düşürür.", "LoadApplicationFileTooltip": "Switch ile uyumlu bir dosya yüklemek için dosya tarayıcısını açar", "LoadApplicationFolderTooltip": "Switch ile uyumlu ayrıştırılmamış bir uygulama yüklemek için dosya tarayıcısını açar", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "Ryujinx dosya sistem klasörünü açar", "OpenRyujinxLogsTooltip": "Log dosyalarının bulunduğu klasörü açar", "ExitTooltip": "Ryujinx'ten çıkış yapmayı sağlar", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "Kurulum Kılavuzunu Aç", "NoUpdate": "Güncelleme Yok", "TitleUpdateVersionLabel": "Sürüm {0} - {1}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "Ryujinx - Bilgi", "RyujinxConfirm": "Ryujinx - Doğrulama", "FileDialogAllTypes": "Tüm türler", @@ -714,9 +727,17 @@ "DlcWindowTitle": "Oyun DLC'lerini Yönet", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Oyun Güncellemelerini Yönet", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "{0} için Hile mevcut [{1}]", "BuildId": "BuildId:", - "DlcWindowHeading": "{0} için DLC mevcut [{1}]", + "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", + "DlcWindowHeading": "{0} Downloadable Content(s) available for {1} ({2})", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(lar)", "UserProfilesEditProfile": "Seçiliyi Düzenle", "Cancel": "İptal", @@ -767,6 +788,7 @@ "GraphicsScalingFilterBilinear": "Bilinear", "GraphicsScalingFilterNearest": "Nearest", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "Seviye", "GraphicsScalingFilterLevelTooltip": "Set FSR 1.0 sharpening level. Higher is sharper.", "SmaaLow": "Düşük SMAA", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 2fe5758b5..0a4f251fe 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "Використовувати гіпервізор", "MenuBarFile": "_Файл", "MenuBarFileOpenFromFile": "_Завантажити програму з файлу", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "Завантажити _розпаковану гру", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "Відкрити теку Ryujinx", "MenuBarFileOpenLogsFolder": "Відкрити теку журналів змін", "MenuBarFileExit": "_Вихід", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "Сховати у режимі очікування", "SettingsTabGeneralHideCursorAlways": "Завжди", "SettingsTabGeneralGameDirectories": "Тека ігор", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "Додати", "SettingsTabGeneralRemove": "Видалити", "SettingsTabSystem": "Система", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "Перемкнути вибране", "GameListContextMenuToggleFavoriteToolTip": "Перемкнути улюблений статус гри", "SettingsTabGeneralTheme": "Тема:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "Темна", "SettingsTabGeneralThemeLight": "Світла", "ControllerSettingsConfigureGeneral": "Налаштування", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "Введіть каталог ігор, щоб додати до списку", "AddGameDirTooltip": "Додати каталог гри до списку", "RemoveGameDirTooltip": "Видалити вибраний каталог гри", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "Використовуйте користувацьку тему Avalonia для графічного інтерфейсу, щоб змінити вигляд меню емулятора", "CustomThemePathTooltip": "Шлях до користувацької теми графічного інтерфейсу", "CustomThemeBrowseTooltip": "Огляд користувацької теми графічного інтерфейсу", @@ -606,6 +615,8 @@ "DebugLogTooltip": "Друкує повідомлення журналу налагодження на консолі.\n\nВикористовуйте це лише за спеціальною вказівкою співробітника, оскільки це ускладнить читання журналів і погіршить роботу емулятора.", "LoadApplicationFileTooltip": "Відкриває файловий провідник, щоб вибрати для завантаження сумісний файл Switch", "LoadApplicationFolderTooltip": "Відкриває файловий провідник, щоб вибрати сумісну з комутатором розпаковану програму для завантаження", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "Відкриває папку файлової системи Ryujinx", "OpenRyujinxLogsTooltip": "Відкриває папку, куди записуються журнали", "ExitTooltip": "Виходить з Ryujinx", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "Відкрити посібник із налаштування", "NoUpdate": "Немає оновлень", "TitleUpdateVersionLabel": "Версія {0} - {1}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "Ryujin x - Інформація", "RyujinxConfirm": "Ryujinx - Підтвердження", "FileDialogAllTypes": "Всі типи", @@ -714,9 +727,17 @@ "DlcWindowTitle": "Менеджер вмісту для завантаження", "ModWindowTitle": "Керувати модами для {0} ({1})", "UpdateWindowTitle": "Менеджер оновлення назв", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Коди доступні для {0} [{1}]", "BuildId": "ID збірки:", + "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", "DlcWindowHeading": "Вміст для завантаження, доступний для {1} ({2}): {0}", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} мод(ів)", "UserProfilesEditProfile": "Редагувати вибране", "Cancel": "Скасувати", @@ -767,6 +788,7 @@ "GraphicsScalingFilterBilinear": "Білінійний", "GraphicsScalingFilterNearest": "Найближчий", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "Рівень", "GraphicsScalingFilterLevelTooltip": "Встановити рівень різкості в FSR 1.0. Чим вище - тим різкіше.", "SmaaLow": "SMAA Низький", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index e0fd15922..d1f3c13e3 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -107,6 +107,7 @@ "SettingsTabGeneralHideCursorAlways": "始终隐藏", "SettingsTabGeneralGameDirectories": "游戏目录", "SettingsTabGeneralAutoloadDirectories": "自动加载DLC/游戏更新目录", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "添加", "SettingsTabGeneralRemove": "删除", "SettingsTabSystem": "系统", @@ -734,8 +735,9 @@ "DlcWindowHeading": "{0} 个 DLC", "DlcWindowDlcAddedMessage": "{0} 个DLC被添加", "AutoloadDlcAddedMessage": "{0} 个DLC被添加", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", "AutoloadUpdateAddedMessage": "{0} 个游戏更新被添加", - "AutoloadDlcAndUpdateAddedMessage": "{0} 个DLC和{1} 个游戏更新被添加", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "编辑所选", "Cancel": "取消", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index e7cf35e5f..e67fcf566 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -10,7 +10,10 @@ "SettingsTabSystemUseHypervisor": "使用 Hypervisor", "MenuBarFile": "檔案(_F)", "MenuBarFileOpenFromFile": "從檔案載入應用程式(_L)", + "MenuBarFileOpenFromFileError": "No applications found in selected file.", "MenuBarFileOpenUnpacked": "載入未封裝的遊戲(_U)", + "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", + "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", "MenuBarFileOpenEmuFolder": "開啟 Ryujinx 資料夾", "MenuBarFileOpenLogsFolder": "開啟日誌資料夾", "MenuBarFileExit": "結束(_E)", @@ -103,6 +106,8 @@ "SettingsTabGeneralHideCursorOnIdle": "閒置時", "SettingsTabGeneralHideCursorAlways": "總是", "SettingsTabGeneralGameDirectories": "遊戲資料夾", + "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", + "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", "SettingsTabGeneralAdd": "新增", "SettingsTabGeneralRemove": "刪除", "SettingsTabSystem": "系統", @@ -411,6 +416,7 @@ "GameListContextMenuToggleFavorite": "加入/移除為我的最愛", "GameListContextMenuToggleFavoriteToolTip": "切換遊戲的我的最愛狀態", "SettingsTabGeneralTheme": "佈景主題:", + "SettingsTabGeneralThemeAuto": "Auto", "SettingsTabGeneralThemeDark": "深色", "SettingsTabGeneralThemeLight": "淺色", "ControllerSettingsConfigureGeneral": "配置", @@ -561,6 +567,9 @@ "AddGameDirBoxTooltip": "輸入要新增到清單中的遊戲資料夾", "AddGameDirTooltip": "新增遊戲資料夾到清單中", "RemoveGameDirTooltip": "移除選取的遊戲資料夾", + "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", + "AddAutoloadDirTooltip": "Add an autoload directory to the list", + "RemoveAutoloadDirTooltip": "Remove selected autoload directory", "CustomThemeCheckTooltip": "為圖形使用者介面使用自訂 Avalonia 佈景主題,變更模擬器功能表的外觀", "CustomThemePathTooltip": "自訂 GUI 佈景主題的路徑", "CustomThemeBrowseTooltip": "瀏覽自訂 GUI 佈景主題", @@ -606,6 +615,8 @@ "DebugLogTooltip": "在控制台中輸出偵錯日誌訊息。\n\n只有在人員特別指示的情況下才能使用,因為這會導致日誌難以閱讀,並降低模擬器效能。", "LoadApplicationFileTooltip": "開啟檔案總管,選擇與 Switch 相容的檔案來載入", "LoadApplicationFolderTooltip": "開啟檔案總管,選擇與 Switch 相容且未封裝的應用程式來載入", + "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", + "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", "OpenRyujinxFolderTooltip": "開啟 Ryujinx 檔案系統資料夾", "OpenRyujinxLogsTooltip": "開啟日誌被寫入的資料夾", "ExitTooltip": "結束 Ryujinx", @@ -657,6 +668,8 @@ "OpenSetupGuideMessage": "開啟設定指南", "NoUpdate": "沒有更新", "TitleUpdateVersionLabel": "版本 {0}", + "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", + "TitleBundledDlcLabel": "Bundled:", "RyujinxInfo": "Ryujinx - 資訊", "RyujinxConfirm": "Ryujinx - 確認", "FileDialogAllTypes": "全部類型", @@ -714,9 +727,17 @@ "DlcWindowTitle": "管理 {0} 的可下載內容 ({1})", "ModWindowTitle": "管理 {0} 的模組 ({1})", "UpdateWindowTitle": "遊戲更新管理員", + "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", + "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "可用於 {0} [{1}] 的密技", "BuildId": "組建識別碼:", + "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", "DlcWindowHeading": "{0} 個可下載內容", + "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", + "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadUpdateAddedMessage": "{0} new update(s) added", + "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} 模組", "UserProfilesEditProfile": "編輯所選", "Cancel": "取消", @@ -767,6 +788,7 @@ "GraphicsScalingFilterBilinear": "雙線性 (Bilinear)", "GraphicsScalingFilterNearest": "近鄰性 (Nearest)", "GraphicsScalingFilterFsr": "FSR", + "GraphicsScalingFilterArea": "Area", "GraphicsScalingFilterLevelLabel": "日誌等級", "GraphicsScalingFilterLevelTooltip": "設定 FSR 1.0 銳化等級。越高越清晰。", "SmaaLow": "低階 SMAA", -- 2.47.1 From 36c374cc7a36336f89a094510bf7c2a6b4989321 Mon Sep 17 00:00:00 2001 From: Kekschen <52585984+Kek5chen@users.noreply.github.com> Date: Thu, 7 Nov 2024 01:18:59 +0100 Subject: [PATCH 013/722] fix: remove --deep (#188) --- distribution/macos/create_app_bundle.sh | 4 ++-- distribution/macos/create_macos_build_ava.sh | 4 ++-- distribution/macos/create_macos_build_headless.sh | 4 ++-- src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj | 4 ++-- src/Ryujinx/Ryujinx.csproj | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/distribution/macos/create_app_bundle.sh b/distribution/macos/create_app_bundle.sh index 0fa54eadd..e4397da84 100755 --- a/distribution/macos/create_app_bundle.sh +++ b/distribution/macos/create_app_bundle.sh @@ -46,5 +46,5 @@ then rcodesign sign --entitlements-xml-path "$ENTITLEMENTS_FILE_PATH" "$APP_BUNDLE_DIRECTORY" else echo "Usign codesign for ad-hoc signing" - codesign --entitlements "$ENTITLEMENTS_FILE_PATH" -f --deep -s - "$APP_BUNDLE_DIRECTORY" -fi \ No newline at end of file + codesign --entitlements "$ENTITLEMENTS_FILE_PATH" -f -s - "$APP_BUNDLE_DIRECTORY" +fi diff --git a/distribution/macos/create_macos_build_ava.sh b/distribution/macos/create_macos_build_ava.sh index 6785cbb23..80bd6662c 100755 --- a/distribution/macos/create_macos_build_ava.sh +++ b/distribution/macos/create_macos_build_ava.sh @@ -99,7 +99,7 @@ then rcodesign sign --entitlements-xml-path "$ENTITLEMENTS_FILE_PATH" "$UNIVERSAL_APP_BUNDLE" else echo "Using codesign for ad-hoc signing" - codesign --entitlements "$ENTITLEMENTS_FILE_PATH" -f --deep -s - "$UNIVERSAL_APP_BUNDLE" + codesign --entitlements "$ENTITLEMENTS_FILE_PATH" -f -s - "$UNIVERSAL_APP_BUNDLE" fi echo "Creating archive" @@ -111,4 +111,4 @@ rm "$RELEASE_TAR_FILE_NAME" popd -echo "Done" \ No newline at end of file +echo "Done" diff --git a/distribution/macos/create_macos_build_headless.sh b/distribution/macos/create_macos_build_headless.sh index a439aef45..2715699d0 100755 --- a/distribution/macos/create_macos_build_headless.sh +++ b/distribution/macos/create_macos_build_headless.sh @@ -95,7 +95,7 @@ else echo "Using codesign for ad-hoc signing" for FILE in "$UNIVERSAL_OUTPUT"/*; do if [[ $(file "$FILE") == *"Mach-O"* ]]; then - codesign --entitlements "$ENTITLEMENTS_FILE_PATH" -f --deep -s - "$FILE" + codesign --entitlements "$ENTITLEMENTS_FILE_PATH" -f -s - "$FILE" fi done fi @@ -108,4 +108,4 @@ gzip -9 < "$RELEASE_TAR_FILE_NAME" > "$RELEASE_TAR_FILE_NAME.gz" rm "$RELEASE_TAR_FILE_NAME" popd -echo "Done" \ No newline at end of file +echo "Done" diff --git a/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj b/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj index 610229544..ebda97b46 100644 --- a/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj +++ b/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -17,7 +17,7 @@ - + diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index c1c238926..b41ec1cd4 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -14,7 +14,7 @@ - + -- 2.47.1 From 730ba44043ea352fa53fe38dfe500cadd71ff2bd Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 6 Nov 2024 18:23:21 -0600 Subject: [PATCH 014/722] misc: Canary-specific naming & other small changes I had that I need to push. --- src/Ryujinx/App.axaml.cs | 6 +- .../Common/Markup/BasicMarkupExtension.cs | 37 ++- src/Ryujinx/Common/Markup/MarkupExtensions.cs | 45 +-- src/Ryujinx/Input/AvaloniaKeyboard.cs | 14 +- src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 6 +- .../UI/Views/Input/KeyboardInputView.axaml.cs | 260 +++++++++--------- .../UI/Views/Main/MainMenuBarView.axaml | 4 +- .../UI/Views/Main/MainMenuBarView.axaml.cs | 8 +- .../UserProfileImageSelectorView.axaml.cs | 3 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 31 +-- src/Ryujinx/Updater.cs | 15 +- 11 files changed, 200 insertions(+), 229 deletions(-) diff --git a/src/Ryujinx/App.axaml.cs b/src/Ryujinx/App.axaml.cs index 509deb34c..15ada201c 100644 --- a/src/Ryujinx/App.axaml.cs +++ b/src/Ryujinx/App.axaml.cs @@ -23,8 +23,10 @@ namespace Ryujinx.Ava { internal static string FormatTitle(LocaleKeys? windowTitleKey = null) => windowTitleKey is null - ? $"Ryujinx {Program.Version}" - : $"Ryujinx {Program.Version} - {LocaleManager.Instance[windowTitleKey.Value]}"; + ? $"{FullAppName} {Program.Version}" + : $"{FullAppName} {Program.Version} - {LocaleManager.Instance[windowTitleKey.Value]}"; + + public static readonly string FullAppName = ReleaseInformation.IsCanaryBuild ? "Ryujinx Canary" : "Ryujinx"; public static MainWindow MainWindow => Current! .ApplicationLifetime.Cast() diff --git a/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs b/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs index 73b298bc7..67c016562 100644 --- a/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs +++ b/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs @@ -2,19 +2,38 @@ using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml.MarkupExtensions; using Avalonia.Markup.Xaml.MarkupExtensions.CompiledBindings; +using Gommon; using System; +// ReSharper disable VirtualMemberNeverOverridden.Global +// ReSharper disable MemberCanBeProtected.Global +// ReSharper disable MemberCanBePrivate.Global + +#nullable enable namespace Ryujinx.Ava.Common.Markup { - internal abstract class BasicMarkupExtension : MarkupExtension + internal abstract class BasicMarkupExtension : MarkupExtension { - protected abstract ClrPropertyInfo PropertyInfo { get; } - - public override object ProvideValue(IServiceProvider serviceProvider) => - new CompiledBindingExtension( - new CompiledBindingPathBuilder() - .Property(PropertyInfo, PropertyInfoAccessorFactory.CreateInpcPropertyAccessor) - .Build() - ).ProvideValue(serviceProvider); + public virtual string Name => "Item"; + public virtual Action? Setter => null; + + protected abstract T? GetValue(); + + protected virtual void ConfigureBindingExtension(CompiledBindingExtension _) { } + + private ClrPropertyInfo PropertyInfo => + new(Name, + _ => GetValue(), + Setter as Action, + typeof(T)); + + public override object ProvideValue(IServiceProvider serviceProvider) + => new CompiledBindingExtension( + new CompiledBindingPathBuilder() + .Property(PropertyInfo, PropertyInfoAccessorFactory.CreateInpcPropertyAccessor) + .Build() + ) + .Apply(ConfigureBindingExtension) + .ProvideValue(serviceProvider); } } diff --git a/src/Ryujinx/Common/Markup/MarkupExtensions.cs b/src/Ryujinx/Common/Markup/MarkupExtensions.cs index af917b973..a804792c7 100644 --- a/src/Ryujinx/Common/Markup/MarkupExtensions.cs +++ b/src/Ryujinx/Common/Markup/MarkupExtensions.cs @@ -1,51 +1,24 @@ -using Avalonia.Data.Core; -using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml.MarkupExtensions; -using Avalonia.Markup.Xaml.MarkupExtensions.CompiledBindings; using Projektanker.Icons.Avalonia; using Ryujinx.Ava.Common.Locale; -using System; namespace Ryujinx.Ava.Common.Markup { - internal class IconExtension(string iconString) : BasicMarkupExtension + internal class IconExtension(string iconString) : BasicMarkupExtension { - protected override ClrPropertyInfo PropertyInfo - => new( - "Item", - _ => new Icon { Value = iconString }, - null, - typeof(Icon) - ); + protected override Icon GetValue() => new() { Value = iconString }; } - internal class SpinningIconExtension(string iconString) : BasicMarkupExtension + internal class SpinningIconExtension(string iconString) : BasicMarkupExtension { - protected override ClrPropertyInfo PropertyInfo - => new( - "Item", - _ => new Icon { Value = iconString, Animation = IconAnimation.Spin }, - null, - typeof(Icon) - ); + protected override Icon GetValue() => new() { Value = iconString, Animation = IconAnimation.Spin }; } - internal class LocaleExtension(LocaleKeys key) : MarkupExtension + internal class LocaleExtension(LocaleKeys key) : BasicMarkupExtension { - private ClrPropertyInfo PropertyInfo - => new( - "Item", - _ => LocaleManager.Instance[key], - null, - typeof(string) - ); - - public override object ProvideValue(IServiceProvider serviceProvider) => - new CompiledBindingExtension( - new CompiledBindingPathBuilder() - .Property(PropertyInfo, PropertyInfoAccessorFactory.CreateInpcPropertyAccessor) - .Build() - ) { Source = LocaleManager.Instance } - .ProvideValue(serviceProvider); + protected override string GetValue() => LocaleManager.Instance[key]; + + protected override void ConfigureBindingExtension(CompiledBindingExtension bindingExtension) + => bindingExtension.Source = LocaleManager.Instance; } } diff --git a/src/Ryujinx/Input/AvaloniaKeyboard.cs b/src/Ryujinx/Input/AvaloniaKeyboard.cs index ff88de79e..95d2936f6 100644 --- a/src/Ryujinx/Input/AvaloniaKeyboard.cs +++ b/src/Ryujinx/Input/AvaloniaKeyboard.cs @@ -23,21 +23,15 @@ namespace Ryujinx.Ava.Input public bool IsConnected => true; public GamepadFeaturesFlag Features => GamepadFeaturesFlag.None; - private class ButtonMappingEntry + private class ButtonMappingEntry(GamepadButtonInputId to, Key from) { - public readonly Key From; - public readonly GamepadButtonInputId To; - - public ButtonMappingEntry(GamepadButtonInputId to, Key from) - { - To = to; - From = from; - } + public readonly GamepadButtonInputId To = to; + public readonly Key From = from; } public AvaloniaKeyboard(AvaloniaKeyboardDriver driver, string id, string name) { - _buttonsUserMapping = new List(); + _buttonsUserMapping = []; _driver = driver; Id = id; diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index f09460b1f..1dbf37255 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -127,11 +127,11 @@ namespace Ryujinx.Ava.UI.Applet try { _parent.ViewModel.AppHost.NpadManager.BlockInputUpdates(); - var response = await SwkbdAppletDialog.ShowInputDialog(LocaleManager.Instance[LocaleKeys.SoftwareKeyboard], args); + (UserResult result, string userInput) = await SwkbdAppletDialog.ShowInputDialog(LocaleManager.Instance[LocaleKeys.SoftwareKeyboard], args); - if (response.Result == UserResult.Ok) + if (result == UserResult.Ok) { - inputText = response.Input; + inputText = userInput; okPressed = true; } } diff --git a/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs index f17c7496c..090d0335c 100644 --- a/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Ava.UI.Views.Input { base.OnPointerReleased(e); - if (_currentAssigner != null && _currentAssigner.ToggledButton != null && !_currentAssigner.ToggledButton.IsPointerOver) + if (_currentAssigner is { ToggledButton.IsPointerOver: false }) { _currentAssigner.Cancel(); } @@ -41,143 +41,146 @@ namespace Ryujinx.Ava.UI.Views.Input private void Button_IsCheckedChanged(object sender, RoutedEventArgs e) { - if (sender is ToggleButton button) + if (sender is not ToggleButton button) + return; + + if (button.IsChecked is true) { - if ((bool)button.IsChecked) + if (_currentAssigner != null && button == _currentAssigner.ToggledButton) { - if (_currentAssigner != null && button == _currentAssigner.ToggledButton) - { + return; + } + + if (_currentAssigner == null) + { + _currentAssigner = new ButtonKeyAssigner(button); + + Focus(NavigationMethod.Pointer); + + PointerPressed += MouseClick; + + if (DataContext is not KeyboardInputViewModel viewModel) return; - } - if (_currentAssigner == null) + IKeyboard keyboard = + (IKeyboard)viewModel.ParentModel.AvaloniaKeyboardDriver.GetGamepad("0"); // Open Avalonia keyboard for cancel operations. + IButtonAssigner assigner = + new KeyboardKeyAssigner((IKeyboard)viewModel.ParentModel.SelectedGamepad); + + _currentAssigner.ButtonAssigned += (_, e) => { - _currentAssigner = new ButtonKeyAssigner(button); - - Focus(NavigationMethod.Pointer); - - PointerPressed += MouseClick; - - var viewModel = (DataContext as KeyboardInputViewModel); - - IKeyboard keyboard = (IKeyboard)viewModel.ParentModel.AvaloniaKeyboardDriver.GetGamepad("0"); // Open Avalonia keyboard for cancel operations. - IButtonAssigner assigner = CreateButtonAssigner(); - - _currentAssigner.ButtonAssigned += (sender, e) => + if (e.ButtonValue.HasValue) { - if (e.ButtonValue.HasValue) + var buttonValue = e.ButtonValue.Value; + viewModel.ParentModel.IsModified = true; + + switch (button.Name) { - var buttonValue = e.ButtonValue.Value; - viewModel.ParentModel.IsModified = true; - - switch (button.Name) - { - case "ButtonZl": - viewModel.Config.ButtonZl = buttonValue.AsHidType(); - break; - case "ButtonL": - viewModel.Config.ButtonL = buttonValue.AsHidType(); - break; - case "ButtonMinus": - viewModel.Config.ButtonMinus = buttonValue.AsHidType(); - break; - case "LeftStickButton": - viewModel.Config.LeftStickButton = buttonValue.AsHidType(); - break; - case "LeftStickUp": - viewModel.Config.LeftStickUp = buttonValue.AsHidType(); - break; - case "LeftStickDown": - viewModel.Config.LeftStickDown = buttonValue.AsHidType(); - break; - case "LeftStickRight": - viewModel.Config.LeftStickRight = buttonValue.AsHidType(); - break; - case "LeftStickLeft": - viewModel.Config.LeftStickLeft = buttonValue.AsHidType(); - break; - case "DpadUp": - viewModel.Config.DpadUp = buttonValue.AsHidType(); - break; - case "DpadDown": - viewModel.Config.DpadDown = buttonValue.AsHidType(); - break; - case "DpadLeft": - viewModel.Config.DpadLeft = buttonValue.AsHidType(); - break; - case "DpadRight": - viewModel.Config.DpadRight = buttonValue.AsHidType(); - break; - case "LeftButtonSr": - viewModel.Config.LeftButtonSr = buttonValue.AsHidType(); - break; - case "LeftButtonSl": - viewModel.Config.LeftButtonSl = buttonValue.AsHidType(); - break; - case "RightButtonSr": - viewModel.Config.RightButtonSr = buttonValue.AsHidType(); - break; - case "RightButtonSl": - viewModel.Config.RightButtonSl = buttonValue.AsHidType(); - break; - case "ButtonZr": - viewModel.Config.ButtonZr = buttonValue.AsHidType(); - break; - case "ButtonR": - viewModel.Config.ButtonR = buttonValue.AsHidType(); - break; - case "ButtonPlus": - viewModel.Config.ButtonPlus = buttonValue.AsHidType(); - break; - case "ButtonA": - viewModel.Config.ButtonA = buttonValue.AsHidType(); - break; - case "ButtonB": - viewModel.Config.ButtonB = buttonValue.AsHidType(); - break; - case "ButtonX": - viewModel.Config.ButtonX = buttonValue.AsHidType(); - break; - case "ButtonY": - viewModel.Config.ButtonY = buttonValue.AsHidType(); - break; - case "RightStickButton": - viewModel.Config.RightStickButton = buttonValue.AsHidType(); - break; - case "RightStickUp": - viewModel.Config.RightStickUp = buttonValue.AsHidType(); - break; - case "RightStickDown": - viewModel.Config.RightStickDown = buttonValue.AsHidType(); - break; - case "RightStickRight": - viewModel.Config.RightStickRight = buttonValue.AsHidType(); - break; - case "RightStickLeft": - viewModel.Config.RightStickLeft = buttonValue.AsHidType(); - break; - } + case "ButtonZl": + viewModel.Config.ButtonZl = buttonValue.AsHidType(); + break; + case "ButtonL": + viewModel.Config.ButtonL = buttonValue.AsHidType(); + break; + case "ButtonMinus": + viewModel.Config.ButtonMinus = buttonValue.AsHidType(); + break; + case "LeftStickButton": + viewModel.Config.LeftStickButton = buttonValue.AsHidType(); + break; + case "LeftStickUp": + viewModel.Config.LeftStickUp = buttonValue.AsHidType(); + break; + case "LeftStickDown": + viewModel.Config.LeftStickDown = buttonValue.AsHidType(); + break; + case "LeftStickRight": + viewModel.Config.LeftStickRight = buttonValue.AsHidType(); + break; + case "LeftStickLeft": + viewModel.Config.LeftStickLeft = buttonValue.AsHidType(); + break; + case "DpadUp": + viewModel.Config.DpadUp = buttonValue.AsHidType(); + break; + case "DpadDown": + viewModel.Config.DpadDown = buttonValue.AsHidType(); + break; + case "DpadLeft": + viewModel.Config.DpadLeft = buttonValue.AsHidType(); + break; + case "DpadRight": + viewModel.Config.DpadRight = buttonValue.AsHidType(); + break; + case "LeftButtonSr": + viewModel.Config.LeftButtonSr = buttonValue.AsHidType(); + break; + case "LeftButtonSl": + viewModel.Config.LeftButtonSl = buttonValue.AsHidType(); + break; + case "RightButtonSr": + viewModel.Config.RightButtonSr = buttonValue.AsHidType(); + break; + case "RightButtonSl": + viewModel.Config.RightButtonSl = buttonValue.AsHidType(); + break; + case "ButtonZr": + viewModel.Config.ButtonZr = buttonValue.AsHidType(); + break; + case "ButtonR": + viewModel.Config.ButtonR = buttonValue.AsHidType(); + break; + case "ButtonPlus": + viewModel.Config.ButtonPlus = buttonValue.AsHidType(); + break; + case "ButtonA": + viewModel.Config.ButtonA = buttonValue.AsHidType(); + break; + case "ButtonB": + viewModel.Config.ButtonB = buttonValue.AsHidType(); + break; + case "ButtonX": + viewModel.Config.ButtonX = buttonValue.AsHidType(); + break; + case "ButtonY": + viewModel.Config.ButtonY = buttonValue.AsHidType(); + break; + case "RightStickButton": + viewModel.Config.RightStickButton = buttonValue.AsHidType(); + break; + case "RightStickUp": + viewModel.Config.RightStickUp = buttonValue.AsHidType(); + break; + case "RightStickDown": + viewModel.Config.RightStickDown = buttonValue.AsHidType(); + break; + case "RightStickRight": + viewModel.Config.RightStickRight = buttonValue.AsHidType(); + break; + case "RightStickLeft": + viewModel.Config.RightStickLeft = buttonValue.AsHidType(); + break; } - }; - - _currentAssigner.GetInputAndAssign(assigner, keyboard); - } - else - { - if (_currentAssigner != null) - { - _currentAssigner.Cancel(); - _currentAssigner = null; - button.IsChecked = false; } - } + }; + + _currentAssigner.GetInputAndAssign(assigner, keyboard); } else { - _currentAssigner?.Cancel(); - _currentAssigner = null; + if (_currentAssigner != null) + { + _currentAssigner.Cancel(); + _currentAssigner = null; + button.IsChecked = false; + } } } + else + { + _currentAssigner?.Cancel(); + _currentAssigner = null; + } } private void MouseClick(object sender, PointerPressedEventArgs e) @@ -189,15 +192,6 @@ namespace Ryujinx.Ava.UI.Views.Input PointerPressed -= MouseClick; } - private IButtonAssigner CreateButtonAssigner() - { - IButtonAssigner assigner; - - assigner = new KeyboardKeyAssigner((IKeyboard)(DataContext as KeyboardInputViewModel).ParentModel.SelectedGamepad); - - return assigner; - } - protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e) { base.OnDetachedFromVisualTree(e); diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 31dda8873..03b7cfbe4 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -273,8 +273,8 @@ - - + + diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 88b9bb980..1acee3af5 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -184,8 +184,10 @@ namespace Ryujinx.Ava.UI.Views.Main if (sender is not MenuItem { Tag: string resolution }) return; - (int height, int width) = resolution.Split(' ') - .Into(parts => (int.Parse(parts[0]), int.Parse(parts[1]))); + (int width, int height) = resolution.Split(' ', 2) + .Into(parts => + (int.Parse(parts[0]), int.Parse(parts[1])) + ); await Dispatcher.UIThread.InvokeAsync(() => { @@ -200,7 +202,7 @@ namespace Ryujinx.Ava.UI.Views.Main public async void CheckForUpdates(object sender, RoutedEventArgs e) { if (Updater.CanUpdate(true)) - await Updater.BeginParse(Window, true); + await Window.BeginUpdateAsync(true); } public async void OpenXCITrimmerWindow(object sender, RoutedEventArgs e) => await XCITrimmerWindow.Show(ViewModel); diff --git a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs index b4f23b5b8..dba762972 100644 --- a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs @@ -63,8 +63,7 @@ namespace Ryujinx.Ava.UI.Views.User private async void Import_OnClick(object sender, RoutedEventArgs e) { - var window = this.GetVisualRoot() as Window; - var result = await window.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + var result = await ((Window)this.GetVisualRoot()!).StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { AllowMultiple = false, FileTypeFilter = new List diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 8a6be3c81..24a1b62a2 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -28,6 +28,7 @@ using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; using System; using System.Collections.Generic; +using System.Linq; using System.Reactive.Linq; using System.Runtime.Versioning; using System.Threading; @@ -349,12 +350,12 @@ namespace Ryujinx.Ava.UI.Windows await Dispatcher.UIThread.InvokeAsync(async () => await UserErrorDialog.ShowUserErrorDialog(UserError.NoKeys)); } - if (ConfigurationState.Instance.CheckUpdatesOnStart && Updater.CanUpdate(false)) + if (ConfigurationState.Instance.CheckUpdatesOnStart && Updater.CanUpdate()) { - await Updater.BeginParse(this, false).ContinueWith(task => - { - Logger.Error?.Print(LogClass.Application, $"Updater Error: {task.Exception}"); - }, TaskContinuationOptions.OnlyOnFaulted); + await this.BeginUpdateAsync() + .ContinueWith( + task => Logger.Error?.Print(LogClass.Application, $"Updater Error: {task.Exception}"), + TaskContinuationOptions.OnlyOnFaulted); } } @@ -392,30 +393,17 @@ namespace Ryujinx.Ava.UI.Windows ViewModel.WindowState = ConfigurationState.Instance.UI.WindowStartup.WindowMaximized.Value ? WindowState.Maximized : WindowState.Normal; - if (CheckScreenBounds(savedPoint)) + if (Screens.All.Any(screen => screen.Bounds.Contains(savedPoint))) { Position = savedPoint; } else { + Logger.Warning?.Print(LogClass.Application, "Failed to find valid start-up coordinates. Defaulting to primary monitor center."); WindowStartupLocation = WindowStartupLocation.CenterScreen; } } - private bool CheckScreenBounds(PixelPoint configPoint) - { - for (int i = 0; i < Screens.ScreenCount; i++) - { - if (Screens.All[i].Bounds.Contains(configPoint)) - { - return true; - } - } - - Logger.Warning?.Print(LogClass.Application, "Failed to find valid start-up coordinates. Defaulting to primary monitor center."); - return false; - } - private void SaveWindowSizePosition() { ConfigurationState.Instance.UI.WindowStartup.WindowMaximized.Value = WindowState == WindowState.Maximized; @@ -507,8 +495,7 @@ namespace Ryujinx.Ava.UI.Windows private void VolumeStatus_CheckedChanged(object sender, RoutedEventArgs e) { - var volumeSplitButton = sender as ToggleSplitButton; - if (ViewModel.IsGameRunning) + if (ViewModel.IsGameRunning && sender is ToggleSplitButton volumeSplitButton) { if (!volumeSplitButton.IsChecked) { diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index e8ef02052..7005fe528 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -32,6 +32,8 @@ namespace Ryujinx.Ava internal static class Updater { private const string GitHubApiUrl = "https://api.github.com"; + private const string LatestReleaseUrl = $"{GitHubApiUrl}/repos/{ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}/releases/latest"; + private static readonly GithubReleasesJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); private static readonly string _homeDir = AppDomain.CurrentDomain.BaseDirectory; @@ -46,9 +48,9 @@ namespace Ryujinx.Ava private static bool _updateSuccessful; private static bool _running; - private static readonly string[] _windowsDependencyDirs = Array.Empty(); + private static readonly string[] _windowsDependencyDirs = []; - public static async Task BeginParse(Window mainWindow, bool showVersionUpToDate) + public static async Task BeginUpdateAsync(this Window mainWindow, bool showVersionUpToDate = false) { if (_running) { @@ -96,9 +98,8 @@ namespace Ryujinx.Ava try { using HttpClient jsonClient = ConstructHttpClient(); - - string buildInfoUrl = $"{GitHubApiUrl}/repos/{ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}/releases/latest"; - string fetchedJson = await jsonClient.GetStringAsync(buildInfoUrl); + + string fetchedJson = await jsonClient.GetStringAsync(LatestReleaseUrl); var fetched = JsonHelper.Deserialize(fetchedJson, _serializerContext.GithubReleasesJsonResponse); _buildVer = fetched.Name; @@ -159,7 +160,7 @@ namespace Ryujinx.Ava } catch { - Logger.Error?.Print(LogClass.Application, "Failed to convert the received Ryujinx version from Github!"); + Logger.Error?.Print(LogClass.Application, $"Failed to convert the received {App.FullAppName} version from GitHub!"); await ContentDialogHelper.CreateWarningDialog( LocaleManager.Instance[LocaleKeys.DialogUpdaterConvertFailedGithubMessage], @@ -636,7 +637,7 @@ namespace Ryujinx.Ava taskDialog.Hide(); } - public static bool CanUpdate(bool showWarnings) + public static bool CanUpdate(bool showWarnings = false) { #if !DISABLE_UPDATER if (!NetworkInterface.GetIsNetworkAvailable()) -- 2.47.1 From 5bf50836e17f721f0f062c7d5c0b048188eaf698 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 6 Nov 2024 18:24:30 -0600 Subject: [PATCH 015/722] i18n: missing comma in en_US locale --- src/Ryujinx/Assets/Locales/en_US.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index f0b10c945..faa53230d 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -451,7 +451,7 @@ "DialogUpdaterCancelUpdateMessage": "Update canceled!", "DialogUpdaterAlreadyOnLatestVersionMessage": "You are already using the latest version of Ryujinx!", "DialogUpdaterFailedToGetVersionMessage": "An error occurred while trying to retrieve release information from GitHub. This may happen if a new release is currently being compiled by GitHub Actions. Please try again in a few minutes.", - "DialogUpdaterConvertFailedGithubMessage": "Failed to convert the Ryujinx version received from GitHub." + "DialogUpdaterConvertFailedGithubMessage": "Failed to convert the Ryujinx version received from GitHub.", "DialogUpdaterDownloadingMessage": "Downloading Update...", "DialogUpdaterExtractionMessage": "Extracting Update...", "DialogUpdaterRenamingMessage": "Renaming Update...", -- 2.47.1 From 708256ce9619f77c4d8a5c112f26a98f58843fdb Mon Sep 17 00:00:00 2001 From: Luke Warner <65521430+LukeWarnut@users.noreply.github.com> Date: Wed, 6 Nov 2024 20:22:40 -0500 Subject: [PATCH 016/722] Add just, a whole bunch of games to RPC assets. (#98) --- .../DiscordIntegrationModule.cs | 160 +++++++++++++----- 1 file changed, 117 insertions(+), 43 deletions(-) diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs index 01781bab6..7bfb1c95b 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs @@ -122,70 +122,144 @@ namespace Ryujinx.UI.Common private static readonly string[] _discordGameAssetKeys = [ - "01002da013484000", // The Legend of Zelda: Skyward Sword HD + "010055d009f78000", // Fire Emblem: Three Houses + "0100a12011cc8000", // Fire Emblem: Shadow Dragon + "0100a6301214e000", // Fire Emblem Engage + "0100f15003e64000", // Fire Emblem Warriors + "010071f0143ea000", // Fire Emblem Warriors: Three Hopes + + "01007e3006dda000", // Kirby Star Allies + "01004d300c5ae000", // Kirby and the Forgotten Land + "01006b601380e000", // Kirby's Return to Dream Land Deluxe + "01003fb00c5a8000", // Super Kirby Clash + "0100227010460000", // Kirby Fighters 2 + "0100a8e016236000", // Kirby's Dream Buffet + "01007ef00011e000", // The Legend of Zelda: Breath of the Wild + "01006bb00c6f0000", // The Legend of Zelda: Link's Awakening + "01002da013484000", // The Legend of Zelda: Skyward Sword HD "0100f2c0115b6000", // The Legend of Zelda: Tears of the Kingdom "01008cf01baac000", // The Legend of Zelda: Echoes of Wisdom - "01006bb00c6f0000", // The Legend of Zelda: Link's Awakening - - "0100000000010000", // SUPER MARIO ODYSSEY - "010015100b514000", // Super Mario Bros. Wonder - "0100152000022000", // Mario Kart 8 Deluxe - "01006fe013472000", // Mario Party Superstars - "0100965017338000", // Super Mario Party Jamboree - "010049900f546000", // Super Mario 3D All-Stars - "010028600ebda000", // Super Mario 3D World + Bowser's Fury - "0100ecd018ebe000", // Paper Mario: The Thousand-Year Door - "010019401051c000", // Mario Strikers League - "0100ea80032ea000", // Super Mario Bros. U Deluxe - "0100bc0018138000", // Super Mario RPG - "0100bde00862a000", // Mario Tennis Aces + "01000b900d8b0000", // Cadence of Hyrule + "0100ae00096ea000", // Hyrule Warriors: Definitive Edition + "01002b00111a2000", // Hyrule Warriors: Age of Calamity "010048701995e000", // Luigi's Mansion 2 HD "0100dca0064a6000", // Luigi's Mansion 3 - "01008f6008c5e000", // Pokémon Violet - "0100abf008968000", // Pokémon Sword - "01008db008c2c000", // Pokémon Shield - "0100000011d90000", // Pokémon Brilliant Diamond - "01001f5010dfa000", // Pokémon Legends: Arceus + "010093801237c000", // Metroid Dread + "010012101468c000", // Metroid Prime Remastered + + "0100000000010000", // SUPER MARIO ODYSSEY + "0100ea80032ea000", // Super Mario Bros. U Deluxe + "01009b90006dc000", // Super Mario Maker 2 + "010049900f546000", // Super Mario 3D All-Stars + "010049900F546001", // ^ 64 + "010049900F546002", // ^ Sunshine + "010049900F546003", // ^ Galaxy + "010028600ebda000", // Super Mario 3D World + Bowser's Fury + "010015100b514000", // Super Mario Bros. Wonder + "0100152000022000", // Mario Kart 8 Deluxe + "010036b0034e4000", // Super Mario Party + "01006fe013472000", // Mario Party Superstars + "0100965017338000", // Super Mario Party Jamboree + "010067300059a000", // Mario + Rabbids: Kingdom Battle + "0100317013770000", // Mario + Rabbids: Sparks of Hope + "0100a3900c3e2000", // Paper Mario: The Origami King + "0100ecd018ebe000", // Paper Mario: The Thousand-Year Door + "0100bc0018138000", // Super Mario RPG + "0100bde00862a000", // Mario Tennis Aces + "0100c9c00e25c000", // Mario Golf: Super Rush + "010019401051c000", // Mario Strikers: Battle League + "010003000e146000", // Mario & Sonic at the Olympic Games Tokyo 2020 + "0100b99019412000", // Mario vs. Donkey Kong "0100aa80194b0000", // Pikmin 1 "0100d680194b2000", // Pikmin 2 "0100f4c009322000", // Pikmin 3 Deluxe "0100b7c00933a000", // Pikmin 4 - + + "010003f003a34000", // Pokémon: Let's Go Pikachu! + "0100187003a36000", // Pokémon: Let's Go Eevee! + "0100abf008968000", // Pokémon Sword + "01008db008c2c000", // Pokémon Shield + "0100000011d90000", // Pokémon Brilliant Diamond + "010018e011d92000", // Pokémon Shining Pearl + "01001f5010dfa000", // Pokémon Legends: Arceus + "0100a3d008c5c000", // Pokémon Scarlet + "01008f6008c5e000", // Pokémon Violet + "0100b3f000be2000", // Pokkén Tournament DX + "0100f4300bf2c000", // New Pokémon Snap + + "01003bc0000a0000", // Splatoon 2 (US) + "0100f8f0000a2000", // Splatoon 2 (EU) + "01003c700009c000", // Splatoon 2 (JP) + "0100c2500fc20000", // Splatoon 3 + "0100ba0018500000", // Splatoon 3: Splatfest World Premiere + + "010040600c5ce000", // Tetris 99 + "0100277011f1a000", // Super Mario Bros. 35 + "0100ad9012510000", // PAC-MAN 99 + "0100ccf019c8c000", // F-ZERO 99 + "0100d870045b6000", // NES - Nintendo Switch Online + "01008d300c50c000", // SNES - Nintendo Switch Online + "0100c9a00ece6000", // N64 - Nintendo Switch Online + "0100e0601c632000", // N64 - Nintendo Switch Online 18+ + "0100c62011050000", // GB - Nintendo Switch Online + "010012f017576000", // GBA - Nintendo Switch Online + + "01000320000cc000", // 1-2 Switch + "0100300012f2a000", // Advance Wars 1+2: Re-Boot Camp + "01006f8002326000", // Animal Crossing: New Horizons + "0100620012d6e000", // Big Brain Academy: Brain vs. Brain + "010018300d006000", // BOXBOY! + BOXGIRL! + "0100c1f0051b6000", // Donkey Kong Country: Tropical Freeze + "0100ed000d390000", // Dr. Kawashima's Brain Training + "010067b017588000", // Endless Ocean Luminous + "0100d2f00d5c0000", // Nintendo Switch Sports + "01006b5012b32000", // Part Time UFO + "0100704000B3A000", // Snipperclips + "01006a800016e000", // Super Smash Bros. Ultimate + "0100a9400c9c2000", // Tokyo Mirage Sessions #FE Encore + + "010076f0049a2000", // Bayonetta + "01007960049a0000", // Bayonetta 2 + "01004a4010fea000", // Bayonetta 3 + "0100cf5010fec000", // Bayonetta Origins: Cereza and the Lost Demon + + "0100dcd01525a000", // Persona 3 Portable + "010062b01525c000", // Persona 4 Golden + "010075a016a3a000", // Persona 4 Arena Ultimax + "01005ca01580e000", // Persona 5 Royal + "0100801011c3e000", // Persona 5 Strikers + "010087701b092000", // Persona 5 Tactica + + "01009aa000faa000", // Sonic Mania "01004ad014bf0000", // Sonic Frontiers "01005ea01c0fc000", // SONIC X SHADOW GENERATIONS "01005ea01c0fc001", // ^ - - "01004d300c5ae000", // Kirby and the Forgotten Land - "01006b601380e000", // Kirby's Return to Dreamland Deluxe - "01007e3006dda000", // Kirby Star Allies - "0100c2500fc20000", // Splatoon 3 - "0100ba0018500000", // Splatoon 3: Splatfest World Premiere - "01000a10041ea000", // The Elder Scrolls V: Skyrim - "01007820196a6000", // Red Dead Redemption - "01008c8012920000", // Dying Light Platinum Edition - "0100744001588000", // Cars 3: Driven to Win - "0100c1f0051b6000", // Donkey Kong Country: Tropical Freeze - "01002b00111a2000", // Hyrule Warriors: Age of Calamity - "01006f8002326000", // Animal Crossing: New Horizons - "0100853015e86000", // No Man's Sky - "01008d100d43e000", // Saints Row IV - "0100de600beee000", // Saints Row: The Third - The Full Package - "0100d7a01b7a2000", // Star Wars: Bounty Hunter - "0100dbf01000a000", // Burnout Paradise Remastered - "0100e46006708000", // Terraria "010056e00853a000", // A Hat in Time - "01006a800016e000", // Super Smash Bros. Ultimate + "0100dbf01000a000", // Burnout Paradise Remastered + "0100744001588000", // Cars 3: Driven to Win + "0100b41013c82000", // Cruis'n Blast + "01008c8012920000", // Dying Light Platinum Edition + "01000a10041ea000", // The Elder Scrolls V: Skyrim + "0100770008dd8000", // Monster Hunter Generations Ultimate + "0100b04011742000", // Monster Hunter Rise + "0100853015e86000", // No Man's Sky "01007bb017812000", // Portal "0100abd01785c000", // Portal 2 "01008e200c5c2000", // Muse Dash + "01007820196a6000", // Red Dead Redemption + "01002f7013224000", // Rune Factory 5 + "01008d100d43e000", // Saints Row IV + "0100de600beee000", // Saints Row: The Third - The Full Package "01001180021fa000", // Shovel Knight: Specter of Torment - "010012101468c000", // Metroid Prime Remastered - "0100c9a00ece6000", // Nintendo 64 - Nintendo Switch Online + "0100d7a01b7a2000", // Star Wars: Bounty Hunter + "0100800015926000", // Suika Game + "0100e46006708000", // Terraria + "010080b00ad66000", // Undertale ]; } } -- 2.47.1 From 6acd86c890cd03a4bcf4eacd6ef1412c7cba2935 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 6 Nov 2024 19:46:20 -0600 Subject: [PATCH 017/722] Fix canary updater & checking if current build is canary. --- src/Ryujinx.Common/ReleaseInformation.cs | 4 ++-- src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs | 2 +- src/Ryujinx/Updater.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.Common/ReleaseInformation.cs b/src/Ryujinx.Common/ReleaseInformation.cs index 888c57e81..523479d82 100644 --- a/src/Ryujinx.Common/ReleaseInformation.cs +++ b/src/Ryujinx.Common/ReleaseInformation.cs @@ -28,9 +28,9 @@ namespace Ryujinx.Common public static bool IsFlatHubBuild => IsValid && ReleaseChannelOwner.Equals(FlatHubChannel); - public static bool IsCanaryBuild => IsValid && ReleaseChannelOwner.Equals(CanaryChannel); + public static bool IsCanaryBuild => IsValid && ReleaseChannelName.Equals(CanaryChannel); - public static bool IsReleaseBuild => IsValid && ReleaseChannelOwner.Equals(ReleaseChannel); + public static bool IsReleaseBuild => IsValid && ReleaseChannelName.Equals(ReleaseChannel); public static string Version => IsValid ? BuildVersion : Assembly.GetEntryAssembly()!.GetCustomAttribute()?.InformationalVersion; } diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs index 068dee350..fd413d2f9 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Ava.UI.Views.Main LocaleManager.Instance.LocaleChanged += () => Dispatcher.UIThread.Post(() => { if (Window.ViewModel.EnableNonGameRunningControls) - Refresh_OnClick(null, null); + Window.LoadApplications(); }); } } diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 7005fe528..7fc362cda 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -156,7 +156,7 @@ namespace Ryujinx.Ava try { - newVersion = Version.Parse(_buildVer); + newVersion = Version.Parse(ReleaseInformation.IsCanaryBuild ? _buildVer.Split(' ')[1] : _buildVer); } catch { -- 2.47.1 From 640d7f9e779b51433406b4f65ca175bbbb960394 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 6 Nov 2024 19:55:58 -0600 Subject: [PATCH 018/722] Updater: kinda confused how this didn't work? --- .../Models/Github/GithubReleasesJsonResponse.cs | 2 ++ src/Ryujinx/Updater.cs | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs b/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs index 0250e1094..7bec1bcdc 100644 --- a/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs +++ b/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs @@ -5,6 +5,8 @@ namespace Ryujinx.UI.Common.Models.Github public class GithubReleasesJsonResponse { public string Name { get; set; } + + public string TagName { get; set; } public List Assets { get; set; } } } diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 7fc362cda..a466ea832 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -101,7 +101,7 @@ namespace Ryujinx.Ava string fetchedJson = await jsonClient.GetStringAsync(LatestReleaseUrl); var fetched = JsonHelper.Deserialize(fetchedJson, _serializerContext.GithubReleasesJsonResponse); - _buildVer = fetched.Name; + _buildVer = fetched.TagName; foreach (var asset in fetched.Assets) { @@ -156,7 +156,7 @@ namespace Ryujinx.Ava try { - newVersion = Version.Parse(ReleaseInformation.IsCanaryBuild ? _buildVer.Split(' ')[1] : _buildVer); + newVersion = Version.Parse(_buildVer); } catch { -- 2.47.1 From bd2681b2f9f98c10cd4981c39c0337fbfd661312 Mon Sep 17 00:00:00 2001 From: WilliamWsyHK Date: Fri, 8 Nov 2024 00:46:40 +0800 Subject: [PATCH 019/722] Add missing and update translations for zh-tw (#158) Simply add back some missing translations and update outdated translations for zh-tw. --- src/Ryujinx/Assets/Locales/zh_TW.json | 50 +++++++++++++-------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index e67fcf566..d69e57a9c 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -10,10 +10,10 @@ "SettingsTabSystemUseHypervisor": "使用 Hypervisor", "MenuBarFile": "檔案(_F)", "MenuBarFileOpenFromFile": "從檔案載入應用程式(_L)", - "MenuBarFileOpenFromFileError": "No applications found in selected file.", + "MenuBarFileOpenFromFileError": "未能從已選擇的檔案中找到應用程式。", "MenuBarFileOpenUnpacked": "載入未封裝的遊戲(_U)", - "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", - "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", + "MenuBarFileLoadDlcFromFolder": "從資料夾中載入 DLC", + "MenuBarFileLoadTitleUpdatesFromFolder": "從資料夾中載入遊戲更新", "MenuBarFileOpenEmuFolder": "開啟 Ryujinx 資料夾", "MenuBarFileOpenLogsFolder": "開啟日誌資料夾", "MenuBarFileExit": "結束(_E)", @@ -100,14 +100,14 @@ "SettingsTabGeneralCheckUpdatesOnLaunch": "啟動時檢查更新", "SettingsTabGeneralShowConfirmExitDialog": "顯示「確認結束」對話方塊", "SettingsTabGeneralRememberWindowState": "記住視窗大小/位置", - "SettingsTabGeneralShowTitleBar": "Show Title Bar (Requires restart)", + "SettingsTabGeneralShowTitleBar": "顯示「標題列」 (需要重新開啟Ryujinx)", "SettingsTabGeneralHideCursor": "隱藏滑鼠游標:", "SettingsTabGeneralHideCursorNever": "從不", "SettingsTabGeneralHideCursorOnIdle": "閒置時", "SettingsTabGeneralHideCursorAlways": "總是", "SettingsTabGeneralGameDirectories": "遊戲資料夾", - "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", - "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", + "SettingsTabGeneralAutoloadDirectories": "自動載入 DLC/遊戲更新資料夾", + "SettingsTabGeneralAutoloadNote": "遺失的 DLC 及遊戲更新檔案將會在自動載入中移除", "SettingsTabGeneralAdd": "新增", "SettingsTabGeneralRemove": "刪除", "SettingsTabSystem": "系統", @@ -142,7 +142,7 @@ "SettingsTabSystemSystemTime": "系統時鐘:", "SettingsTabSystemEnableVsync": "垂直同步", "SettingsTabSystemEnablePptc": "PPTC (剖析式持久轉譯快取, Profiled Persistent Translation Cache)", - "SettingsTabSystemEnableLowPowerPptc": "Low-power PPTC", + "SettingsTabSystemEnableLowPowerPptc": "低功耗 PPTC", "SettingsTabSystemEnableFsIntegrityChecks": "檔案系統完整性檢查", "SettingsTabSystemAudioBackend": "音效後端:", "SettingsTabSystemAudioBackendDummy": "虛設 (Dummy)", @@ -416,7 +416,7 @@ "GameListContextMenuToggleFavorite": "加入/移除為我的最愛", "GameListContextMenuToggleFavoriteToolTip": "切換遊戲的我的最愛狀態", "SettingsTabGeneralTheme": "佈景主題:", - "SettingsTabGeneralThemeAuto": "Auto", + "SettingsTabGeneralThemeAuto": "自動", "SettingsTabGeneralThemeDark": "深色", "SettingsTabGeneralThemeLight": "淺色", "ControllerSettingsConfigureGeneral": "配置", @@ -567,9 +567,9 @@ "AddGameDirBoxTooltip": "輸入要新增到清單中的遊戲資料夾", "AddGameDirTooltip": "新增遊戲資料夾到清單中", "RemoveGameDirTooltip": "移除選取的遊戲資料夾", - "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", - "AddAutoloadDirTooltip": "Add an autoload directory to the list", - "RemoveAutoloadDirTooltip": "Remove selected autoload directory", + "AddAutoloadDirBoxTooltip": "輸入要新增到清單中的「自動載入 DLC/遊戲更新資料夾」", + "AddAutoloadDirTooltip": "新增「自動載入 DLC/遊戲更新資料夾」到清單中", + "RemoveAutoloadDirTooltip": "移除選取的「自動載入 DLC/遊戲更新資料夾」", "CustomThemeCheckTooltip": "為圖形使用者介面使用自訂 Avalonia 佈景主題,變更模擬器功能表的外觀", "CustomThemePathTooltip": "自訂 GUI 佈景主題的路徑", "CustomThemeBrowseTooltip": "瀏覽自訂 GUI 佈景主題", @@ -582,7 +582,7 @@ "TimeTooltip": "變更系統時鐘", "VSyncToggleTooltip": "模擬遊戲機的垂直同步。對大多數遊戲來說,它本質上是一個幀率限制器;停用它可能會導致遊戲以更高的速度執行,或使載入畫面耗時更長或卡住。\n\n可以在遊戲中使用快速鍵進行切換 (預設為 F1)。如果您打算停用,我們建議您這樣做。\n\n如果不確定,請保持開啟狀態。", "PptcToggleTooltip": "儲存已轉譯的 JIT 函數,這樣每次載入遊戲時就無需再轉譯這些函數。\n\n減少遊戲首次啟動後的卡頓現象,並大大加快啟動時間。\n\n如果不確定,請保持開啟狀態。", - "LowPowerPptcToggleTooltip": "Load the PPTC using a third of the amount of cores.", + "LowPowerPptcToggleTooltip": "使用 CPU 核心數量的三分之一載入 PPTC。", "FsIntegrityToggleTooltip": "在啟動遊戲時檢查損壞的檔案,如果檢測到損壞的檔案,則在日誌中顯示雜湊值錯誤。\n\n對效能沒有影響,旨在幫助排除故障。\n\n如果不確定,請保持開啟狀態。", "AudioBackendTooltip": "變更用於繪製音訊的後端。\n\nSDL2 是首選,而 OpenAL 和 SoundIO 則作為備用。虛設 (Dummy) 將沒有聲音。\n\n如果不確定,請設定為 SDL2。", "MemoryManagerTooltip": "變更客體記憶體的映射和存取方式。這會極大地影響模擬 CPU 效能。\n\n如果不確定,請設定為主體略過檢查模式。", @@ -590,7 +590,7 @@ "MemoryManagerHostTooltip": "直接映射主體位址空間中的記憶體。更快的 JIT 編譯和執行速度。", "MemoryManagerUnsafeTooltip": "直接映射記憶體,但在存取前不封鎖客體位址空間內的位址。速度更快,但相對不安全。訪客應用程式可以從 Ryujinx 中的任何地方存取記憶體,因此只能使用該模式執行您信任的程式。", "UseHypervisorTooltip": "使用 Hypervisor 取代 JIT。使用時可大幅提高效能,但在目前狀態下可能不穩定。", - "DRamTooltip": "利用另一種 MemoryMode 配置來模仿 Switch 開發模式。\n\n這僅對高解析度紋理套件或 4K 解析度模組有用。不會提高效能。\n\n如果不確定,請保持關閉狀態。", + "DRamTooltip": "利用另一種 MemoryMode 配置來模仿 Switch 開發模式。\n\n這僅對高解析度紋理套件或 4K 解析度模組有用。不會提高效能。\n\n如果不確定,請設定為 4GiB。", "IgnoreMissingServicesTooltip": "忽略未實現的 Horizon OS 服務。這可能有助於在啟動某些遊戲時避免崩潰。\n\n如果不確定,請保持關閉狀態。", "IgnoreAppletTooltip": "如果遊戲手把在遊戲過程中斷開連接,則外部對話方塊「控制器小程式」將不會出現。不會提示關閉對話方塊或設定新控制器。一旦先前斷開的控制器重新連接,遊戲將自動恢復。", "GraphicsBackendThreadingTooltip": "在第二個執行緒上執行圖形後端指令。\n\n在本身不支援多執行緒的 GPU 驅動程式上,可加快著色器編譯、減少卡頓並提高效能。在支援多執行緒的驅動程式上效能略有提升。\n\n如果不確定,請設定為自動。", @@ -615,8 +615,8 @@ "DebugLogTooltip": "在控制台中輸出偵錯日誌訊息。\n\n只有在人員特別指示的情況下才能使用,因為這會導致日誌難以閱讀,並降低模擬器效能。", "LoadApplicationFileTooltip": "開啟檔案總管,選擇與 Switch 相容的檔案來載入", "LoadApplicationFolderTooltip": "開啟檔案總管,選擇與 Switch 相容且未封裝的應用程式來載入", - "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", - "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", + "LoadDlcFromFolderTooltip": "開啟檔案總管,選擇一個或多個資料夾來大量載入 DLC", + "LoadTitleUpdatesFromFolderTooltip": "開啟檔案總管,選擇一個或多個資料夾來大量載入遊戲更新", "OpenRyujinxFolderTooltip": "開啟 Ryujinx 檔案系統資料夾", "OpenRyujinxLogsTooltip": "開啟日誌被寫入的資料夾", "ExitTooltip": "結束 Ryujinx", @@ -668,8 +668,8 @@ "OpenSetupGuideMessage": "開啟設定指南", "NoUpdate": "沒有更新", "TitleUpdateVersionLabel": "版本 {0}", - "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", - "TitleBundledDlcLabel": "Bundled:", + "TitleBundledUpdateVersionLabel": "附帶: 版本 {0}", + "TitleBundledDlcLabel": "附帶:", "RyujinxInfo": "Ryujinx - 資訊", "RyujinxConfirm": "Ryujinx - 確認", "FileDialogAllTypes": "全部類型", @@ -727,17 +727,17 @@ "DlcWindowTitle": "管理 {0} 的可下載內容 ({1})", "ModWindowTitle": "管理 {0} 的模組 ({1})", "UpdateWindowTitle": "遊戲更新管理員", - "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", - "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", + "UpdateWindowUpdateAddedMessage": "已加入 {0} 個遊戲更新", + "UpdateWindowBundledContentNotice": "附帶的遊戲更新只能被停用而無法被刪除。", "CheatWindowHeading": "可用於 {0} [{1}] 的密技", "BuildId": "組建識別碼:", - "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", + "DlcWindowBundledContentNotice": "附帶的 DLC 只能被停用而無法被刪除。", "DlcWindowHeading": "{0} 個可下載內容", - "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", - "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", - "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", - "AutoloadUpdateAddedMessage": "{0} new update(s) added", - "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", + "DlcWindowDlcAddedMessage": "已加入 {0} 個 DLC", + "AutoloadDlcAddedMessage": "已加入 {0} 個 DLC", + "AutoloadDlcRemovedMessage": "已刪除 {0} 個遺失的 DLC", + "AutoloadUpdateAddedMessage": "已加入 {0} 個遊戲更新", + "AutoloadUpdateRemovedMessage": "已刪除 {0} 個遺失的遊戲更新", "ModWindowHeading": "{0} 模組", "UserProfilesEditProfile": "編輯所選", "Cancel": "取消", -- 2.47.1 From ab7d0a2e6d0ba1a76c37b3b09ee993eb1459330e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 10:47:40 -0600 Subject: [PATCH 020/722] nuget: bump Microsoft.IdentityModel.JsonWebTokens from 8.0.1 to 8.1.2 (#13) --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index e6be60790..fff045062 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -22,7 +22,7 @@ - + -- 2.47.1 From 2a23000fed841b98ea114380c0ccd4a6ba54047b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 8 Nov 2024 19:54:36 -0600 Subject: [PATCH 021/722] Add Canary release badge & links --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index d2ce7ca01..7fa78c4b0 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,15 @@ Latest Release +
+ + + + + Latest Canary Release +

-- 2.47.1 From 8c2d6192bac7a82e906bd5cf45f5106b647fd68c Mon Sep 17 00:00:00 2001 From: Jacobwasbeast <38381609+Jacobwasbeast@users.noreply.github.com> Date: Sat, 9 Nov 2024 19:28:12 -0600 Subject: [PATCH 022/722] Add Dummy Applet to Replace NotImplementedException (#216) Currently, in Ryujinx, if an app attempts to open an unimplemented applet, it crashes. This change adds a dummy applet to send a dummy response instead of crashing and logs the applet. --- src/Ryujinx.HLE/HOS/Applets/AppletManager.cs | 8 +++- .../HOS/Applets/Dummy/DummyApplet.cs | 43 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs diff --git a/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs b/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs index 3c34d5c78..da4d2e51b 100644 --- a/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs +++ b/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs @@ -1,4 +1,6 @@ +using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Applets.Browser; +using Ryujinx.HLE.HOS.Applets.Dummy; using Ryujinx.HLE.HOS.Applets.Error; using Ryujinx.HLE.HOS.Services.Am.AppletAE; using System; @@ -26,9 +28,13 @@ namespace Ryujinx.HLE.HOS.Applets return new BrowserApplet(system); case AppletId.LibAppletOff: return new BrowserApplet(system); + case AppletId.MiiEdit: + Logger.Warning?.Print(LogClass.Application, $"Please use the MiiEdit inside File/Open Applet"); + return new DummyApplet(system); } - throw new NotImplementedException($"{applet} applet is not implemented."); + Logger.Warning?.Print(LogClass.Application, $"Applet {applet} not implemented!"); + return new DummyApplet(system); } } } diff --git a/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs new file mode 100644 index 000000000..75df7a373 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs @@ -0,0 +1,43 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Common.Memory; +using Ryujinx.HLE.HOS.Applets; +using Ryujinx.HLE.HOS.Services.Am.AppletAE; +using System; +using System.IO; +using System.Runtime.InteropServices; +namespace Ryujinx.HLE.HOS.Applets.Dummy +{ + internal class DummyApplet : IApplet + { + private readonly Horizon _system; + private AppletSession _normalSession; + public event EventHandler AppletStateChanged; + public DummyApplet(Horizon system) + { + _system = system; + } + public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession) + { + _normalSession = normalSession; + _normalSession.Push(BuildResponse()); + AppletStateChanged?.Invoke(this, null); + _system.ReturnFocus(); + return ResultCode.Success; + } + private static T ReadStruct(byte[] data) where T : struct + { + return MemoryMarshal.Read(data.AsSpan()); + } + private static byte[] BuildResponse() + { + using MemoryStream stream = MemoryStreamManager.Shared.GetStream(); + using BinaryWriter writer = new(stream); + writer.Write((ulong)ResultCode.Success); + return stream.ToArray(); + } + public ResultCode GetResult() + { + return ResultCode.Success; + } + } +} -- 2.47.1 From a7b58df3fed826a027b18ec3c6321d2dc704cac1 Mon Sep 17 00:00:00 2001 From: Piplup <100526773+piplup55@users.noreply.github.com> Date: Sun, 10 Nov 2024 01:30:19 +0000 Subject: [PATCH 023/722] Appimage Round 2 (#73) --- .github/workflows/build.yml | 60 +++++++++---------- .github/workflows/release.yml | 108 ++++++++++++++++------------------ 2 files changed, 82 insertions(+), 86 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9b11f0778..b678e5f8e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -74,36 +74,36 @@ jobs: chmod +x ./publish_sdl2_headless/Ryujinx.Headless.SDL2 ./publish_sdl2_headless/Ryujinx.sh if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest' - #- name: Build AppImage - # if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest' - # run: | - # PLATFORM_NAME="${{ matrix.platform.name }}" + - name: Build AppImage + if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest' + run: | + PLATFORM_NAME="${{ matrix.platform.name }}" - # sudo apt install -y zsync desktop-file-utils appstream + sudo apt install -y zsync desktop-file-utils appstream - # mkdir -p tools - # export PATH="$PATH:$(readlink -f tools)" + mkdir -p tools + export PATH="$PATH:$(readlink -f tools)" - # # Setup appimagetool - # wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" - # chmod +x tools/appimagetool - # chmod +x distribution/linux/appimage/build-appimage.sh + # Setup appimagetool + wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" + chmod +x tools/appimagetool + chmod +x distribution/linux/appimage/build-appimage.sh # Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name) - # if [ "$PLATFORM_NAME" = "linux-x64" ]; then - # ARCH_NAME=x64 - # export ARCH=x86_64 - # elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then - # ARCH_NAME=arm64 - # export ARCH=aarch64 - # else - # echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME"" - # exit 1 - # fi + if [ "$PLATFORM_NAME" = "linux-x64" ]; then + ARCH_NAME=x64 + export ARCH=x86_64 + elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then + ARCH_NAME=arm64 + export ARCH=aarch64 + else + echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME"" + exit 1 + fi - # export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync" - # BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh - # shell: bash + export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync" + BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh + shell: bash - name: Upload Ryujinx artifact uses: actions/upload-artifact@v4 @@ -112,12 +112,12 @@ jobs: path: publish if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13' - #- name: Upload Ryujinx (AppImage) artifact - # uses: actions/upload-artifact@v4 - # if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest' - # with: - # name: ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }}-AppImage - # path: publish_appimage + - name: Upload Ryujinx (AppImage) artifact + uses: actions/upload-artifact@v4 + if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest' + with: + name: ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }}-AppImage + path: publish_appimage - name: Upload Ryujinx.Headless.SDL2 artifact uses: actions/upload-artifact@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c3c1e2a28..7a78718be 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -101,83 +101,79 @@ jobs: - name: Publish run: | - dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_ava/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained -p:IncludeNativeLibrariesForSelfExtract=true - dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained -p:IncludeNativeLibrariesForSelfExtract=true + dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained -p:IncludeNativeLibrariesForSelfExtract=true + dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained -p:IncludeNativeLibrariesForSelfExtract=true - name: Packing Windows builds if: matrix.platform.os == 'windows-latest' run: | - pushd publish_ava - rm publish/libarmeilleure-jitsupport.dylib - 7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish + pushd publish + rm libarmeilleure-jitsupport.dylib + 7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish popd pushd publish_sdl2_headless - rm publish/libarmeilleure-jitsupport.dylib - 7z a ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish + rm libarmeilleure-jitsupport.dylib + 7z a ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish popd shell: bash + + - name: Build AppImage (Linux) + if: matrix.platform.os == 'ubuntu-latest' + run: | + BUILD_VERSION="${{ steps.version_info.outputs.build_version }}" + PLATFORM_NAME="${{ matrix.platform.name }}" + + sudo apt install -y zsync desktop-file-utils appstream + + mkdir -p tools + export PATH="$PATH:$(readlink -f tools)" + + # Setup appimagetool + wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" + chmod +x tools/appimagetool + chmod +x distribution/linux/appimage/build-appimage.sh + + # Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name) + if [ "$PLATFORM_NAME" = "linux-x64" ]; then + ARCH_NAME=x64 + export ARCH=x86_64 + elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then + ARCH_NAME=arm64 + export ARCH=aarch64 + else + echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME"" + exit 1 + fi + + export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync" + BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh + + pushd publish_appimage + mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage + mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync + popd + shell: bash - name: Packing Linux builds if: matrix.platform.os == 'ubuntu-latest' run: | - pushd publish_ava - rm publish/libarmeilleure-jitsupport.dylib - chmod +x publish/Ryujinx.sh publish/Ryujinx - tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish + pushd publish + chmod +x Ryujinx.sh Ryujinx + tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish popd pushd publish_sdl2_headless - rm publish/libarmeilleure-jitsupport.dylib - chmod +x publish/Ryujinx.sh publish/Ryujinx.Headless.SDL2 - tar -czvf ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish + chmod +x Ryujinx.sh Ryujinx.Headless.SDL2 + tar -czvf ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish popd shell: bash - - #- name: Build AppImage (Linux) - # if: matrix.platform.os == 'ubuntu-latest' - # run: | - # BUILD_VERSION="${{ steps.version_info.outputs.build_version }}" - # PLATFORM_NAME="${{ matrix.platform.name }}" - - # sudo apt install -y zsync desktop-file-utils appstream - - # mkdir -p tools - # export PATH="$PATH:$(readlink -f tools)" - - # Setup appimagetool - # wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" - # chmod +x tools/appimagetool - # chmod +x distribution/linux/appimage/build-appimage.sh - - # Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name) - # if [ "$PLATFORM_NAME" = "linux-x64" ]; then - # ARCH_NAME=x64 - # export ARCH=x86_64 - # elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then - # ARCH_NAME=arm64 - # export ARCH=aarch64 - # else - # echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME"" - # exit 1 - # fi - - # export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync" - # BUILDDIR=publish_ava OUTDIR=publish_ava_appimage distribution/linux/appimage/build-appimage.sh - - # Add to release output - # pushd publish_ava_appimage - # mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage - # mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync - # popd - # shell: bash - name: Pushing new release uses: ncipollo/release-action@v1 with: name: ${{ steps.version_info.outputs.build_version }} - artifacts: "release_output/*.tar.gz,release_output/*.zip" - #artifacts: "release_output/*.tar.gz,release_output/*.zip/*AppImage*" + artifacts: "release_output/*.tar.gz,release_output/*.zip/*AppImage*" tag: ${{ steps.version_info.outputs.build_version }} body: "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}" omitBodyDuringUpdate: true @@ -233,7 +229,7 @@ jobs: - name: Publish macOS Ryujinx run: | - ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish_ava ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release + ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release - name: Publish macOS Ryujinx.Headless.SDL2 run: | @@ -243,7 +239,7 @@ jobs: uses: ncipollo/release-action@v1 with: name: ${{ steps.version_info.outputs.build_version }} - artifacts: "publish_ava/*.tar.gz, publish_headless/*.tar.gz" + artifacts: "publish/*.tar.gz, publish_headless/*.tar.gz" tag: ${{ steps.version_info.outputs.build_version }} body: "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}" omitBodyDuringUpdate: true -- 2.47.1 From b17e4f79fb956ed8c7df0f9c4d4f52dec9525295 Mon Sep 17 00:00:00 2001 From: Jacobwasbeast <38381609+Jacobwasbeast@users.noreply.github.com> Date: Sat, 9 Nov 2024 21:18:50 -0600 Subject: [PATCH 024/722] Adds the ability to read a amiibo's nickname from the VirtualAmiiboFile (#217) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This feature adds a way to change the Amiibo's nickname inside Smash and other places where it's used, so it’s not always "Ryujinx." However, I did not add a GUI or create the Cabinet applet that would allow users to change this. So you will have to go to system/amiibo and find your amiibo id to change it. --- .../Nfc/Nfp/NfpManager/Types/VirtualAmiiboFile.cs | 1 + src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/Types/VirtualAmiiboFile.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/Types/VirtualAmiiboFile.cs index 65d380979..e1db98e5f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/Types/VirtualAmiiboFile.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/Types/VirtualAmiiboFile.cs @@ -8,6 +8,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp.NfpManager public uint FileVersion { get; set; } public byte[] TagUuid { get; set; } public string AmiiboId { get; set; } + public string NickName { get; set; } public DateTime FirstWriteDate { get; set; } public DateTime LastWriteDate { get; set; } public ushort WriteCounter { get; set; } diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs index ba4a81e0e..7ce749d1a 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs @@ -64,16 +64,17 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp }; } - public static RegisterInfo GetRegisterInfo(ITickSource tickSource, string amiiboId, string nickname) + public static RegisterInfo GetRegisterInfo(ITickSource tickSource, string amiiboId, string userName) { VirtualAmiiboFile amiiboFile = LoadAmiiboFile(amiiboId); - + string nickname = amiiboFile.NickName ?? "Ryujinx"; UtilityImpl utilityImpl = new(tickSource); CharInfo charInfo = new(); charInfo.SetFromStoreData(StoreData.BuildDefault(utilityImpl, 0)); - charInfo.Nickname = Nickname.FromString(nickname); + // This is the player's name + charInfo.Nickname = Nickname.FromString(userName); RegisterInfo registerInfo = new() { @@ -85,7 +86,9 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp Reserved1 = new Array64(), Reserved2 = new Array58(), }; - "Ryujinx"u8.CopyTo(registerInfo.Nickname.AsSpan()); + // This is the amiibo's name + byte[] nicknameBytes = System.Text.Encoding.UTF8.GetBytes(nickname); + nicknameBytes.CopyTo(registerInfo.Nickname.AsSpan()); return registerInfo; } -- 2.47.1 From 299be822c43749166024c43bea23628883f97a04 Mon Sep 17 00:00:00 2001 From: Vladimir Sokolov Date: Sun, 10 Nov 2024 15:24:17 +1000 Subject: [PATCH 025/722] UI: fix: when switching players, it would show old config (#122) When switching between players' gamepads while saving settings, then returning to the previous player, the settings show the default settings instead of the actual settings applied --- src/Ryujinx/Assets/Locales/en_US.json | 1 + src/Ryujinx/Program.cs | 1 + src/Ryujinx/UI/Helpers/ContentDialogHelper.cs | 18 ++++++ .../UI/ViewModels/Input/InputViewModel.cs | 11 ++++ .../Views/Input/ControllerInputView.axaml.cs | 59 ++++++++++++++++++- src/Ryujinx/UI/Views/Input/InputView.axaml | 2 +- src/Ryujinx/UI/Views/Input/InputView.axaml.cs | 34 +++++++++-- 7 files changed, 119 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index faa53230d..30c84ab14 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -413,6 +413,7 @@ "AvatarSetBackgroundColor": "Set Background Color", "AvatarClose": "Close", "ControllerSettingsLoadProfileToolTip": "Load Profile", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "Add Profile", "ControllerSettingsRemoveProfileToolTip": "Remove Profile", "ControllerSettingsSaveProfileToolTip": "Save Profile", diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index a6a616c6a..31db628d3 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -30,6 +30,7 @@ namespace Ryujinx.Ava { internal partial class Program { + // public static double WindowScaleFactor { get; set; } public static double DesktopScaleFactor { get; set; } = 1.0; public static string Version { get; private set; } diff --git a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs b/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs index 67a3642a9..bd8c1e3a7 100644 --- a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs +++ b/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs @@ -226,6 +226,24 @@ namespace Ryujinx.Ava.UI.Helpers (int)Symbol.Help, primaryButtonResult); + internal static async Task CreateConfirmationDialogExtended( + string primaryText, + string secondaryText, + string acceptButtonText, + string noacceptButtonText, + string cancelButtonText, + string title, + UserResult primaryButtonResult = UserResult.Yes) + => await ShowTextDialog( + string.IsNullOrWhiteSpace(title) ? LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle] : title, + primaryText, + secondaryText, + acceptButtonText, + noacceptButtonText, + cancelButtonText, + (int)Symbol.Help, + primaryButtonResult); + internal static async Task CreateLocalizedConfirmationDialog(string primaryText, string secondaryText) => await CreateConfirmationDialog( primaryText, diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index c133f25fa..54f278cec 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -44,6 +44,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input private readonly MainWindow _mainWindow; private PlayerIndex _playerId; + private PlayerIndex _playerIdChoose; private int _controller; private string _controllerImage; private int _device; @@ -83,6 +84,12 @@ namespace Ryujinx.Ava.UI.ViewModels.Input } } + public PlayerIndex PlayerIdChoose + { + get => _playerIdChoose; + set { } + } + public PlayerIndex PlayerId { get => _playerId; @@ -90,6 +97,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Input { if (IsModified) { + + _playerIdChoose = value; return; } @@ -99,7 +108,9 @@ namespace Ryujinx.Ava.UI.ViewModels.Input if (!Enum.IsDefined(typeof(PlayerIndex), _playerId)) { _playerId = PlayerIndex.Player1; + } + _isLoaded = false; LoadConfiguration(); LoadDevice(); diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs index b76648da7..c900ea532 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs @@ -4,11 +4,14 @@ using Avalonia.Controls.Primitives; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.LogicalTree; +using DiscordRPC; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels.Input; using Ryujinx.Common.Configuration.Hid.Controller; +using Ryujinx.Common.Logging; using Ryujinx.Input; using Ryujinx.Input.Assigner; +using System; using StickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId; namespace Ryujinx.Ava.UI.Views.Input @@ -27,6 +30,16 @@ namespace Ryujinx.Ava.UI.Views.Input { button.IsCheckedChanged += Button_IsCheckedChanged; } + + if (visual is CheckBox check) + { + check.IsCheckedChanged += CheckBox_IsCheckedChanged; + } + + if (visual is Slider slider) + { + slider.PropertyChanged += Slider_IsCheckedChanged; + } } } @@ -40,9 +53,51 @@ namespace Ryujinx.Ava.UI.Views.Input } } + private float _changeSlider = -1.0f; + + private void Slider_IsCheckedChanged(object sender, AvaloniaPropertyChangedEventArgs e) + { + if (sender is Slider check) + { + if ((bool)check.IsPointerOver && _changeSlider == -1.0f) + { + _changeSlider = (float)check.Value; + + } + else if (!(bool)check.IsPointerOver) + { + _changeSlider = -1.0f; + } + + if (_changeSlider != -1.0f && _changeSlider != (float)check.Value) + { + + var viewModel = (DataContext as ControllerInputViewModel); + viewModel.ParentModel.IsModified = true; + _changeSlider = (float)check.Value; + } + } + } + + private void CheckBox_IsCheckedChanged(object sender, RoutedEventArgs e) + { + if (sender is CheckBox check) + { + if ((bool)check.IsPointerOver) + { + + var viewModel = (DataContext as ControllerInputViewModel); + viewModel.ParentModel.IsModified = true; + _currentAssigner?.Cancel(); + _currentAssigner = null; + } + } + } + + private void Button_IsCheckedChanged(object sender, RoutedEventArgs e) { - if (sender is ToggleButton button) + if (sender is ToggleButton button ) { if ((bool)button.IsChecked) { @@ -149,7 +204,7 @@ namespace Ryujinx.Ava.UI.Views.Input } else { - if (_currentAssigner != null) + if (_currentAssigner != null ) { _currentAssigner.Cancel(); _currentAssigner = null; diff --git a/src/Ryujinx/UI/Views/Input/InputView.axaml b/src/Ryujinx/UI/Views/Input/InputView.axaml index 851c9c626..b5bfa666d 100644 --- a/src/Ryujinx/UI/Views/Input/InputView.axaml +++ b/src/Ryujinx/UI/Views/Input/InputView.axaml @@ -108,7 +108,7 @@ ToolTip.Tip="{ext:Locale ControllerSettingsLoadProfileToolTip}" Command="{Binding LoadProfile}"> diff --git a/src/Ryujinx/UI/Views/Input/InputView.axaml.cs b/src/Ryujinx/UI/Views/Input/InputView.axaml.cs index 356381a8a..5fda7ef6a 100644 --- a/src/Ryujinx/UI/Views/Input/InputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/InputView.axaml.cs @@ -25,17 +25,27 @@ namespace Ryujinx.Ava.UI.Views.Input private async void PlayerIndexBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { + if (PlayerIndexBox != null) + { + if (PlayerIndexBox.SelectedIndex != (int)ViewModel.PlayerId) + { + PlayerIndexBox.SelectedIndex = (int)ViewModel.PlayerId; + } + } + if (ViewModel.IsModified && !_dialogOpen) { _dialogOpen = true; - var result = await ContentDialogHelper.CreateConfirmationDialog( + var result = await ContentDialogHelper.CreateConfirmationDialogExtended( LocaleManager.Instance[LocaleKeys.DialogControllerSettingsModifiedConfirmMessage], LocaleManager.Instance[LocaleKeys.DialogControllerSettingsModifiedConfirmSubMessage], LocaleManager.Instance[LocaleKeys.InputDialogYes], LocaleManager.Instance[LocaleKeys.InputDialogNo], + LocaleManager.Instance[LocaleKeys.Cancel], LocaleManager.Instance[LocaleKeys.RyujinxConfirm]); + if (result == UserResult.Yes) { ViewModel.Save(); @@ -43,14 +53,30 @@ namespace Ryujinx.Ava.UI.Views.Input _dialogOpen = false; + if (result == UserResult.Cancel) + { + + return; + } + ViewModel.IsModified = false; - if (e.AddedItems.Count > 0) + if (result != UserResult.Cancel) { - var player = (PlayerModel)e.AddedItems[0]; - ViewModel.PlayerId = player.Id; + ViewModel.PlayerId = ViewModel.PlayerIdChoose; + } + + if (result == UserResult.Cancel) + { + if (e.AddedItems.Count > 0) + { + ViewModel.IsModified = true; + var player = (PlayerModel)e.AddedItems[0]; + ViewModel.PlayerId = player.Id; + } } } + } public void Dispose() -- 2.47.1 From 4aae82bad15187005add218f000f4ea1d03a123f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 15:34:14 -0600 Subject: [PATCH 026/722] misc: Small cleanups --- src/ARMeilleure/Translation/Dominance.cs | 2 +- src/ARMeilleure/Translation/PTC/Ptc.cs | 20 +++++++++---------- .../Logging/Targets/AsyncLogTargetWrapper.cs | 4 ++-- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/ARMeilleure/Translation/Dominance.cs b/src/ARMeilleure/Translation/Dominance.cs index e2185bd85..b62714fdf 100644 --- a/src/ARMeilleure/Translation/Dominance.cs +++ b/src/ARMeilleure/Translation/Dominance.cs @@ -77,7 +77,7 @@ namespace ARMeilleure.Translation { continue; } - + for (int pBlkIndex = 0; pBlkIndex < block.Predecessors.Count; pBlkIndex++) { BasicBlock current = block.Predecessors[pBlkIndex]; diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index 6dd38ed89..8236150fe 100644 --- a/src/ARMeilleure/Translation/PTC/Ptc.cs +++ b/src/ARMeilleure/Translation/PTC/Ptc.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.IO.Compression; +using System.Linq; using System.Runtime; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -848,18 +849,15 @@ namespace ARMeilleure.Translation.PTC } } - List threads = new(); - for (int i = 0; i < degreeOfParallelism; i++) - { - Thread thread = new(TranslateFuncs) - { - IsBackground = true, - Name = "Ptc.TranslateThread." + i - }; - - threads.Add(thread); - } + List threads = Enumerable.Range(0, degreeOfParallelism) + .Select(idx => + new Thread(TranslateFuncs) + { + IsBackground = true, + Name = "Ptc.TranslateThread." + idx + } + ).ToList(); Stopwatch sw = Stopwatch.StartNew(); diff --git a/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs b/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs index 02c6dc97b..a9dbe646a 100644 --- a/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs +++ b/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs @@ -30,10 +30,10 @@ namespace Ryujinx.Common.Logging.Targets string ILogTarget.Name { get => _target.Name; } public AsyncLogTargetWrapper(ILogTarget target) - : this(target, -1, AsyncLogTargetOverflowAction.Block) + : this(target, -1) { } - public AsyncLogTargetWrapper(ILogTarget target, int queueLimit, AsyncLogTargetOverflowAction overflowAction) + public AsyncLogTargetWrapper(ILogTarget target, int queueLimit = -1, AsyncLogTargetOverflowAction overflowAction = AsyncLogTargetOverflowAction.Block) { _target = target; _messageQueue = new BlockingCollection(queueLimit); -- 2.47.1 From 9c82d98ec4ec4ab17c056dc2ec54ccff07c2afdb Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 15:48:07 -0600 Subject: [PATCH 027/722] headless: Add Ignore Controller Applet as a configurable option --- src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs | 5 +++-- src/Ryujinx.Headless.SDL2/Options.cs | 3 +++ src/Ryujinx.Headless.SDL2/Program.cs | 7 +++---- src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs | 5 +++-- src/Ryujinx.Headless.SDL2/WindowBase.cs | 7 ++++++- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs b/src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs index ce52f84d9..8c4854a11 100644 --- a/src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs +++ b/src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs @@ -117,8 +117,9 @@ namespace Ryujinx.Headless.SDL2.OpenGL GraphicsDebugLevel glLogLevel, AspectRatio aspectRatio, bool enableMouse, - HideCursorMode hideCursorMode) - : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode) + HideCursorMode hideCursorMode, + bool ignoreControllerApplet) + : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet) { _glLogLevel = glLogLevel; } diff --git a/src/Ryujinx.Headless.SDL2/Options.cs b/src/Ryujinx.Headless.SDL2/Options.cs index 2f86f3ebf..8078ca5e4 100644 --- a/src/Ryujinx.Headless.SDL2/Options.cs +++ b/src/Ryujinx.Headless.SDL2/Options.cs @@ -225,6 +225,9 @@ namespace Ryujinx.Headless.SDL2 [Option("ignore-missing-services", Required = false, Default = false, HelpText = "Enable ignoring missing services.")] public bool IgnoreMissingServices { get; set; } + + [Option("ignore-controller-applet", Required = false, Default = false, HelpText = "Enable ignoring the controller applet when your game loses connection to your controller.")] + public bool IgnoreControllerApplet { get; set; } // Values diff --git a/src/Ryujinx.Headless.SDL2/Program.cs b/src/Ryujinx.Headless.SDL2/Program.cs index b6ccb2ac4..78cdb7718 100644 --- a/src/Ryujinx.Headless.SDL2/Program.cs +++ b/src/Ryujinx.Headless.SDL2/Program.cs @@ -444,8 +444,7 @@ namespace Ryujinx.Headless.SDL2 { Logger.AddTarget(new AsyncLogTargetWrapper( new FileLogTarget("file", logFile), - 1000, - AsyncLogTargetOverflowAction.Block + 1000 )); } else @@ -506,8 +505,8 @@ namespace Ryujinx.Headless.SDL2 private static WindowBase CreateWindow(Options options) { return options.GraphicsBackend == GraphicsBackend.Vulkan - ? new VulkanWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode) - : new OpenGLWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode); + ? new VulkanWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode, options.IgnoreControllerApplet) + : new OpenGLWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode, options.IgnoreControllerApplet); } private static IRenderer CreateRenderer(Options options, WindowBase window) diff --git a/src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs b/src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs index fb73ca335..b88e0fe83 100644 --- a/src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs +++ b/src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs @@ -17,8 +17,9 @@ namespace Ryujinx.Headless.SDL2.Vulkan GraphicsDebugLevel glLogLevel, AspectRatio aspectRatio, bool enableMouse, - HideCursorMode hideCursorMode) - : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode) + HideCursorMode hideCursorMode, + bool ignoreControllerApplet) + : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet) { _glLogLevel = glLogLevel; } diff --git a/src/Ryujinx.Headless.SDL2/WindowBase.cs b/src/Ryujinx.Headless.SDL2/WindowBase.cs index bd47dfd5d..6d681e100 100644 --- a/src/Ryujinx.Headless.SDL2/WindowBase.cs +++ b/src/Ryujinx.Headless.SDL2/WindowBase.cs @@ -86,13 +86,15 @@ namespace Ryujinx.Headless.SDL2 private readonly AspectRatio _aspectRatio; private readonly bool _enableMouse; + private readonly bool _ignoreControllerApplet; public WindowBase( InputManager inputManager, GraphicsDebugLevel glLogLevel, AspectRatio aspectRatio, bool enableMouse, - HideCursorMode hideCursorMode) + HideCursorMode hideCursorMode, + bool ignoreControllerApplet) { MouseDriver = new SDL2MouseDriver(hideCursorMode); _inputManager = inputManager; @@ -108,6 +110,7 @@ namespace Ryujinx.Headless.SDL2 _gpuDoneEvent = new ManualResetEvent(false); _aspectRatio = aspectRatio; _enableMouse = enableMouse; + _ignoreControllerApplet = ignoreControllerApplet; HostUITheme = new HeadlessHostUiTheme(); SDL2Driver.Instance.Initialize(); @@ -484,6 +487,8 @@ namespace Ryujinx.Headless.SDL2 public bool DisplayMessageDialog(ControllerAppletUIArgs args) { + if (_ignoreControllerApplet) return false; + string playerCount = args.PlayerCountMin == args.PlayerCountMax ? $"exactly {args.PlayerCountMin}" : $"{args.PlayerCountMin}-{args.PlayerCountMax}"; string message = $"Application requests {playerCount} {"player".ToQuantity(args.PlayerCountMin + args.PlayerCountMax, ShowQuantityAs.None)} with:\n\n" -- 2.47.1 From e26625dfd5bacfed91871ca759d5f7e673072aa1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 16:17:36 -0600 Subject: [PATCH 028/722] UI: Disable XCI trimmer button when in-game --- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 03b7cfbe4..0a41b3458 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -269,7 +269,7 @@ - + -- 2.47.1 From e01a30016e600d2b41e209a2c8809713719b9c21 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 17:01:47 -0600 Subject: [PATCH 029/722] RPC: Add Mario & Luigi Brothership image. --- src/Ryujinx.UI.Common/DiscordIntegrationModule.cs | 1 + src/Ryujinx/Program.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs index 7bfb1c95b..c21a46e29 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs @@ -163,6 +163,7 @@ namespace Ryujinx.UI.Common "010036b0034e4000", // Super Mario Party "01006fe013472000", // Mario Party Superstars "0100965017338000", // Super Mario Party Jamboree + "01006d0017f7a000", // Mario & Luigi: Brothership "010067300059a000", // Mario + Rabbids: Kingdom Battle "0100317013770000", // Mario + Rabbids: Sparks of Hope "0100a3900c3e2000", // Paper Mario: The Origami King diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 31db628d3..cdce023cb 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -101,7 +101,7 @@ namespace Ryujinx.Ava // Delete backup files after updating. Task.Run(Updater.CleanupUpdate); - Console.Title = $"Ryujinx Console {Version}"; + Console.Title = $"{App.FullAppName} Console {Version}"; // Hook unhandled exception and process exit events. AppDomain.CurrentDomain.UnhandledException += (sender, e) -- 2.47.1 From 10c8d73b60c8390bdb9c8b43ecde3fa183ba8b33 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 19:10:02 -0600 Subject: [PATCH 030/722] UI: Ryujinx Canary title in NCA extractor --- src/Ryujinx/Assets/Locales/ar_SA.json | 2 +- src/Ryujinx/Assets/Locales/de_DE.json | 2 +- src/Ryujinx/Assets/Locales/el_GR.json | 2 +- src/Ryujinx/Assets/Locales/en_US.json | 4 ++-- src/Ryujinx/Assets/Locales/es_ES.json | 2 +- src/Ryujinx/Assets/Locales/fr_FR.json | 2 +- src/Ryujinx/Assets/Locales/he_IL.json | 2 +- src/Ryujinx/Assets/Locales/it_IT.json | 2 +- src/Ryujinx/Assets/Locales/ja_JP.json | 2 +- src/Ryujinx/Assets/Locales/ko_KR.json | 2 +- src/Ryujinx/Assets/Locales/pl_PL.json | 2 +- src/Ryujinx/Assets/Locales/pt_BR.json | 2 +- src/Ryujinx/Assets/Locales/ru_RU.json | 2 +- src/Ryujinx/Assets/Locales/th_TH.json | 2 +- src/Ryujinx/Assets/Locales/tr_TR.json | 2 +- src/Ryujinx/Assets/Locales/uk_UA.json | 2 +- src/Ryujinx/Assets/Locales/zh_CN.json | 2 +- src/Ryujinx/Assets/Locales/zh_TW.json | 2 +- src/Ryujinx/Common/ApplicationHelper.cs | 4 ++-- src/Ryujinx/Updater.cs | 2 +- 20 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index f2720b669..129558395 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "حدث خطأ أثناء البحث عن بيانات الحفظ المحددة: {0}", "FolderDialogExtractTitle": "اختر المجلد الذي تريد الاستخراج إليه", "DialogNcaExtractionMessage": "استخراج قسم {0} من {1}...", - "DialogNcaExtractionTitle": "ريوجينكس - مستخرج قسم NCA", + "DialogNcaExtractionTitle": "مستخرج قسم NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "فشل الاستخراج. لم يكن NCA الرئيسي موجودا في الملف المحدد.", "DialogNcaExtractionCheckLogErrorMessage": "فشل الاستخراج. اقرأ ملف التسجيل لمزيد من المعلومات.", "DialogNcaExtractionSuccessMessage": "تم الاستخراج بنجاح.", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index 4004ec325..7b25336c3 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "Es ist ein Fehler beim Suchen der angegebenen Speicherdaten aufgetreten: {0}", "FolderDialogExtractTitle": "Wähle den Ordner, in welchen die Dateien entpackt werden sollen", "DialogNcaExtractionMessage": "Extrahiert {0} abschnitt von {1}...", - "DialogNcaExtractionTitle": "Ryujinx - NCA-Abschnitt-Extraktor", + "DialogNcaExtractionTitle": "NCA-Abschnitt-Extraktor", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Extraktion fehlgeschlagen. Der Hauptheader der NCA war in der ausgewählten Datei nicht vorhanden.", "DialogNcaExtractionCheckLogErrorMessage": "Extraktion fehlgeschlagen. Überprüfe die Logs für weitere Informationen.", "DialogNcaExtractionSuccessMessage": "Extraktion erfolgreich abgeschlossen.", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index 56940ffc9..95c2062b0 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "Σφάλμα κατά την εύρεση των αποθηκευμένων δεδομένων: {0}", "FolderDialogExtractTitle": "Επιλέξτε τον φάκελο στον οποίο θέλετε να εξαγάγετε", "DialogNcaExtractionMessage": "Εξαγωγή ενότητας {0} από {1}...", - "DialogNcaExtractionTitle": "Ryujinx - NCA Εξαγωγέας Τμημάτων", + "DialogNcaExtractionTitle": "NCA Εξαγωγέας Τμημάτων", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Αποτυχία εξαγωγής. Η κύρια NCA δεν υπήρχε στο επιλεγμένο αρχείο.", "DialogNcaExtractionCheckLogErrorMessage": "Αποτυχία εξαγωγής. Διαβάστε το αρχείο καταγραφής για περισσότερες πληροφορίες.", "DialogNcaExtractionSuccessMessage": "Η εξαγωγή ολοκληρώθηκε με επιτυχία.", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index 30c84ab14..88eb43ce4 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -444,7 +444,7 @@ "DialogMessageFindSaveErrorMessage": "There was an error finding the specified savedata: {0}", "FolderDialogExtractTitle": "Choose the folder to extract into", "DialogNcaExtractionMessage": "Extracting {0} section from {1}...", - "DialogNcaExtractionTitle": "Ryujinx - NCA Section Extractor", + "DialogNcaExtractionTitle": "NCA Section Extractor", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Extraction failure. The main NCA was not present in the selected file.", "DialogNcaExtractionCheckLogErrorMessage": "Extraction failed. Please check the log file for more details.", "DialogNcaExtractionSuccessMessage": "Extraction completed successfully.", @@ -461,7 +461,7 @@ "DialogUpdaterRestartMessage": "Do you want to restart Ryujinx now?", "DialogUpdaterNoInternetMessage": "You are not connected to the Internet!", "DialogUpdaterNoInternetSubMessage": "Please verify that you have a working Internet connection!", - "DialogUpdaterDirtyBuildMessage": "You Cannot update a Dirty build of Ryujinx!", + "DialogUpdaterDirtyBuildMessage": "You cannot update a Dirty build of Ryujinx!", "DialogUpdaterDirtyBuildSubMessage": "Please download Ryujinx at https://github.com/GreemDev/Ryujinx/releases/ if you are looking for a supported version.", "DialogRestartRequiredMessage": "Restart Required", "DialogThemeRestartMessage": "Theme has been saved. A restart is needed to apply the theme.", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index bbc86ed0c..183addade 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "Hubo un error encontrando los datos de guardado especificados: {0}", "FolderDialogExtractTitle": "Elige la carpeta en la que deseas extraer", "DialogNcaExtractionMessage": "Extrayendo {0} sección de {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Extractor de sección NCA", + "DialogNcaExtractionTitle": "Extractor de sección NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Fallo de extracción. El NCA principal no estaba presente en el archivo seleccionado.", "DialogNcaExtractionCheckLogErrorMessage": "Fallo de extracción. Lee el registro para más información.", "DialogNcaExtractionSuccessMessage": "Se completó la extracción con éxito.", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index 0c673f719..34d53e16b 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "Une erreur s'est produite lors de la recherche de la sauvegarde spécifiée : {0}", "FolderDialogExtractTitle": "Choisissez le dossier dans lequel extraire", "DialogNcaExtractionMessage": "Extraction de la section {0} depuis {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Extracteur de la section NCA", + "DialogNcaExtractionTitle": "Extracteur de la section NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Échec de l'extraction. Le NCA principal n'était pas présent dans le fichier sélectionné.", "DialogNcaExtractionCheckLogErrorMessage": "Échec de l'extraction. Lisez le fichier journal pour plus d'informations.", "DialogNcaExtractionSuccessMessage": "Extraction terminée avec succès.", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index cac3fbf53..6bd8f0470 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "אירעה שגיאה במציאת שמור המשחק שצויין: {0}", "FolderDialogExtractTitle": "בחרו את התיקייה לחילוץ", "DialogNcaExtractionMessage": "מלחץ {0} ממקטע {1}...", - "DialogNcaExtractionTitle": "ריוג'ינקס - מחלץ מקטע NCA", + "DialogNcaExtractionTitle": "מחלץ מקטע NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "כשל בחילוץ. ה-NCA הראשי לא היה קיים בקובץ שנבחר.", "DialogNcaExtractionCheckLogErrorMessage": "כשל בחילוץ. קרא את קובץ הרישום למידע נוסף.", "DialogNcaExtractionSuccessMessage": "החילוץ הושלם בהצלחה.", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index 419a5dd2b..0d0edb42c 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "C'è stato un errore durante la ricerca dei dati di salvataggio: {0}", "FolderDialogExtractTitle": "Scegli una cartella in cui estrarre", "DialogNcaExtractionMessage": "Estrazione della sezione {0} da {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Estrazione sezione NCA", + "DialogNcaExtractionTitle": "Estrazione sezione NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "L'estrazione è fallita. L'NCA principale non era presente nel file selezionato.", "DialogNcaExtractionCheckLogErrorMessage": "L'estrazione è fallita. Consulta il file di log per maggiori informazioni.", "DialogNcaExtractionSuccessMessage": "Estrazione completata con successo.", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index b2c0a506e..3eade3e6e 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "セーブデータ: {0} の検索中にエラーが発生しました", "FolderDialogExtractTitle": "展開フォルダを選択", "DialogNcaExtractionMessage": "{1} から {0} セクションを展開中...", - "DialogNcaExtractionTitle": "Ryujinx - NCA セクション展開", + "DialogNcaExtractionTitle": "NCA セクション展開", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "展開に失敗しました. 選択されたファイルにはメイン NCA が存在しません.", "DialogNcaExtractionCheckLogErrorMessage": "展開に失敗しました. 詳細はログを確認してください.", "DialogNcaExtractionSuccessMessage": "展開が正常終了しました", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index bce762d19..bd5bed962 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "지정된 저장 데이터를 찾는 중에 오류 발생: {0}", "FolderDialogExtractTitle": "추출할 폴더 선택", "DialogNcaExtractionMessage": "{1}에서 {0} 섹션을 추출하는 중...", - "DialogNcaExtractionTitle": "Ryujinx - NCA 섹션 추출기", + "DialogNcaExtractionTitle": "NCA 섹션 추출기", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "추출 실패하였습니다. 선택한 파일에 기본 NCA가 없습니다.", "DialogNcaExtractionCheckLogErrorMessage": "추출 실패하였습니다. 자세한 내용은 로그 파일을 읽으세요.", "DialogNcaExtractionSuccessMessage": "추출이 성공적으로 완료되었습니다.", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index 5a276a7c5..6eb1118be 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "Wystąpił błąd podczas próby znalezienia określonych zapisanych danych: {0}", "FolderDialogExtractTitle": "Wybierz folder, do którego chcesz rozpakować", "DialogNcaExtractionMessage": "Wypakowywanie sekcji {0} z {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Asystent wypakowania sekcji NCA", + "DialogNcaExtractionTitle": "Asystent wypakowania sekcji NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Niepowodzenie podczas wypakowywania. W wybranym pliku nie było głównego NCA.", "DialogNcaExtractionCheckLogErrorMessage": "Niepowodzenie podczas wypakowywania. Przeczytaj plik dziennika, aby uzyskać więcej informacji.", "DialogNcaExtractionSuccessMessage": "Wypakowywanie zakończone pomyślnie.", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index 6aeb422ed..087098959 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "Ocorreu um erro ao tentar encontrar o diretório de salvamento: {0}", "FolderDialogExtractTitle": "Escolha o diretório onde os arquivos serão extraídos", "DialogNcaExtractionMessage": "Extraindo seção {0} de {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Extrator de seções NCA", + "DialogNcaExtractionTitle": "Extrator de seções NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Falha na extração. O NCA principal não foi encontrado no arquivo selecionado.", "DialogNcaExtractionCheckLogErrorMessage": "Falha na extração. Leia o arquivo de log para mais informações.", "DialogNcaExtractionSuccessMessage": "Extração concluída com êxito.", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index 4980a9a5d..f1a6f64e4 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "Произошла ошибка при поиске указанных данных сохранения: {0}", "FolderDialogExtractTitle": "Выберите папку для извлечения", "DialogNcaExtractionMessage": "Извлечение {0} раздела из {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Извлечение разделов NCA", + "DialogNcaExtractionTitle": "Извлечение разделов NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Ошибка извлечения. Основной NCA не присутствовал в выбранном файле.", "DialogNcaExtractionCheckLogErrorMessage": "Ошибка извлечения. Прочтите файл журнала для получения дополнительной информации.", "DialogNcaExtractionSuccessMessage": "Извлечение завершено успешно.", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index 16c2d9455..caf8f00ff 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "มีข้อผิดพลาดในการค้นหาข้อมูลบันทึกที่ระบุไว้: {0}", "FolderDialogExtractTitle": "เลือกโฟลเดอร์ที่จะแตกไฟล์เข้าไป", "DialogNcaExtractionMessage": "กำลังแตกไฟล์ {0} จากส่วน {1}...", - "DialogNcaExtractionTitle": "Ryujinx - เครื่องมือแตกไฟล์ของ NCA", + "DialogNcaExtractionTitle": "เครื่องมือแตกไฟล์ของ NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "เกิดความล้มเหลวในการแตกไฟล์เนื่องจากไม่พบ NCA หลักในไฟล์ที่เลือก", "DialogNcaExtractionCheckLogErrorMessage": "เกิดความล้มเหลวในการแตกไฟล์ โปรดอ่านไฟล์บันทึกประวัติเพื่อดูข้อมูลเพิ่มเติม", "DialogNcaExtractionSuccessMessage": "การแตกไฟล์เสร็จสมบูรณ์แล้ว", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index d26ca18b7..83791752b 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "Belirtilen kayıt verisi bulunmaya çalışırken hata: {0}", "FolderDialogExtractTitle": "İçine ayıklanacak klasörü seç", "DialogNcaExtractionMessage": "{1} den {0} kısmı ayıklanıyor...", - "DialogNcaExtractionTitle": "Ryujinx - NCA Kısmı Ayıklayıcısı", + "DialogNcaExtractionTitle": "NCA Kısmı Ayıklayıcısı", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Ayıklama hatası. Ana NCA seçilen dosyada bulunamadı.", "DialogNcaExtractionCheckLogErrorMessage": "Ayıklama hatası. Ek bilgi için kayıt dosyasını okuyun.", "DialogNcaExtractionSuccessMessage": "Ayıklama başarıyla tamamlandı.", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 0a4f251fe..807097f25 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "Під час пошуку вказаних даних збереження сталася помилка: {0}", "FolderDialogExtractTitle": "Виберіть папку для видобування", "DialogNcaExtractionMessage": "Видобування розділу {0} з {1}...", - "DialogNcaExtractionTitle": "Ryujinx - Екстрактор розділів NCA", + "DialogNcaExtractionTitle": "Екстрактор розділів NCA", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "Помилка видобування. Основний NCA не був присутній у вибраному файлі.", "DialogNcaExtractionCheckLogErrorMessage": "Помилка видобування. Прочитайте файл журналу для отримання додаткової інформації.", "DialogNcaExtractionSuccessMessage": "Видобування успішно завершено.", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index d1f3c13e3..98f27b4c2 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "查找指定存档时出错:{0}", "FolderDialogExtractTitle": "选择要提取到的文件夹", "DialogNcaExtractionMessage": "提取 {1} 的 {0} 分区...", - "DialogNcaExtractionTitle": "Ryujinx - NCA 分区提取", + "DialogNcaExtractionTitle": "NCA 分区提取", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "提取失败,所选文件中没有 NCA 文件", "DialogNcaExtractionCheckLogErrorMessage": "提取失败,请查看日志文件获取详情", "DialogNcaExtractionSuccessMessage": "提取成功!", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index d69e57a9c..491c07dd8 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -437,7 +437,7 @@ "DialogMessageFindSaveErrorMessage": "尋找指定的存檔時出現錯誤: {0}", "FolderDialogExtractTitle": "選擇要解壓到的資料夾", "DialogNcaExtractionMessage": "從 {1} 提取 {0} 分區...", - "DialogNcaExtractionTitle": "Ryujinx - NCA 分區提取器", + "DialogNcaExtractionTitle": "NCA 分區提取器", "DialogNcaExtractionMainNcaNotFoundErrorMessage": "提取失敗。所選檔案中不存在主 NCA 檔案。", "DialogNcaExtractionCheckLogErrorMessage": "提取失敗。請閱讀日誌檔案了解更多資訊。", "DialogNcaExtractionSuccessMessage": "提取成功。", diff --git a/src/Ryujinx/Common/ApplicationHelper.cs b/src/Ryujinx/Common/ApplicationHelper.cs index 43b69045c..db5961347 100644 --- a/src/Ryujinx/Common/ApplicationHelper.cs +++ b/src/Ryujinx/Common/ApplicationHelper.cs @@ -146,7 +146,7 @@ namespace Ryujinx.Ava.Common var cancellationToken = new CancellationTokenSource(); UpdateWaitWindow waitingDialog = new( - LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle], + App.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogNcaExtractionMessage, ncaSectionType, Path.GetFileName(titleFilePath)), cancellationToken); @@ -269,7 +269,7 @@ namespace Ryujinx.Ava.Common Dispatcher.UIThread.Post(waitingDialog.Close); NotificationHelper.Show( - LocaleManager.Instance[LocaleKeys.DialogNcaExtractionTitle], + App.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), $"{titleName}\n\n{LocaleManager.Instance[LocaleKeys.DialogNcaExtractionSuccessMessage]}", NotificationType.Information); } diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index a466ea832..4754f2091 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -83,7 +83,7 @@ namespace Ryujinx.Ava } catch { - Logger.Error?.Print(LogClass.Application, "Failed to convert the current Ryujinx version!"); + Logger.Error?.Print(LogClass.Application, $"Failed to convert the current {App.FullAppName} version!"); await ContentDialogHelper.CreateWarningDialog( LocaleManager.Instance[LocaleKeys.DialogUpdaterConvertFailedMessage], -- 2.47.1 From 69f75f2df17bb633e8bdf20590650880c6c9d3ad Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 19:58:02 -0600 Subject: [PATCH 031/722] misc: Fix small code formatting & styling issues --- .../Models/XCITrimmerFileModel.cs | 4 +- src/Ryujinx/Assets/Locales/ar_SA.json | 1 + src/Ryujinx/Assets/Locales/de_DE.json | 1 + src/Ryujinx/Assets/Locales/el_GR.json | 1 + src/Ryujinx/Assets/Locales/es_ES.json | 1 + src/Ryujinx/Assets/Locales/fr_FR.json | 1 + src/Ryujinx/Assets/Locales/he_IL.json | 1 + src/Ryujinx/Assets/Locales/it_IT.json | 1 + src/Ryujinx/Assets/Locales/ja_JP.json | 1 + src/Ryujinx/Assets/Locales/ko_KR.json | 1 + src/Ryujinx/Assets/Locales/pl_PL.json | 1 + src/Ryujinx/Assets/Locales/pt_BR.json | 1 + src/Ryujinx/Assets/Locales/ru_RU.json | 1 + src/Ryujinx/Assets/Locales/th_TH.json | 1 + src/Ryujinx/Assets/Locales/tr_TR.json | 1 + src/Ryujinx/Assets/Locales/uk_UA.json | 1 + src/Ryujinx/Assets/Locales/zh_CN.json | 1 + src/Ryujinx/Assets/Locales/zh_TW.json | 1 + src/Ryujinx/Program.cs | 1 - src/Ryujinx/UI/Helpers/ContentDialogHelper.cs | 6 +- .../Views/Input/ControllerInputView.axaml.cs | 66 ++++++++----------- src/Ryujinx/UI/Views/Input/InputView.axaml.cs | 23 ++----- src/Ryujinx/Updater.cs | 3 +- 23 files changed, 58 insertions(+), 62 deletions(-) diff --git a/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs b/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs index 05fa82920..95fb3985b 100644 --- a/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs +++ b/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs @@ -43,8 +43,8 @@ namespace Ryujinx.UI.Common.Models { if (obj == null) return false; - else - return this.Path == obj.Path; + + return this.Path == obj.Path; } public override int GetHashCode() diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index 129558395..495ab4b4d 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "تعيين لون الخلفية", "AvatarClose": "إغلاق", "ControllerSettingsLoadProfileToolTip": "تحميل الملف الشخصي", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "إضافة ملف شخصي", "ControllerSettingsRemoveProfileToolTip": "إزالة الملف الشخصي", "ControllerSettingsSaveProfileToolTip": "حفظ الملف الشخصي", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index 7b25336c3..e23f3b619 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "Hintergrundfarbe auswählen", "AvatarClose": "Schließen", "ControllerSettingsLoadProfileToolTip": "Lädt ein Profil", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "Fügt ein Profil hinzu", "ControllerSettingsRemoveProfileToolTip": "Entfernt ein Profil", "ControllerSettingsSaveProfileToolTip": "Speichert ein Profil", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index 95c2062b0..79975b892 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "Ορισμός Χρώματος Φόντου", "AvatarClose": "Κλείσιμο", "ControllerSettingsLoadProfileToolTip": "Φόρτωση Προφίλ", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "Προσθήκη Προφίλ", "ControllerSettingsRemoveProfileToolTip": "Κατάργηση Προφίλ", "ControllerSettingsSaveProfileToolTip": "Αποθήκευση Προφίλ", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index 183addade..e6da1d113 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "Establecer color de fondo", "AvatarClose": "Cerrar", "ControllerSettingsLoadProfileToolTip": "Cargar perfil", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "Agregar perfil", "ControllerSettingsRemoveProfileToolTip": "Eliminar perfil", "ControllerSettingsSaveProfileToolTip": "Guardar perfil", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index 34d53e16b..e52333cea 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -408,6 +408,7 @@ "AvatarClose": "Fermer", "ControllerSettingsLoadProfileToolTip": "Charger un profil", "ControllerSettingsAddProfileToolTip": "Ajouter un profil", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsRemoveProfileToolTip": "Supprimer un profil", "ControllerSettingsSaveProfileToolTip": "Enregistrer un profil", "MenuBarFileToolsTakeScreenshot": "Prendre une capture d'écran", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index 6bd8f0470..d2bd21124 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "הגדר צבע רקע", "AvatarClose": "סגור", "ControllerSettingsLoadProfileToolTip": "טען פרופיל", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "הוסף פרופיל", "ControllerSettingsRemoveProfileToolTip": "הסר פרופיל", "ControllerSettingsSaveProfileToolTip": "שמור פרופיל", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index 0d0edb42c..ee2bd3a16 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "Imposta colore di sfondo", "AvatarClose": "Chiudi", "ControllerSettingsLoadProfileToolTip": "Carica profilo", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "Aggiungi profilo", "ControllerSettingsRemoveProfileToolTip": "Rimuovi profilo", "ControllerSettingsSaveProfileToolTip": "Salva profilo", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index 3eade3e6e..8d15ab678 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "背景色を指定", "AvatarClose": "閉じる", "ControllerSettingsLoadProfileToolTip": "プロファイルをロード", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "プロファイルを追加", "ControllerSettingsRemoveProfileToolTip": "プロファイルを削除", "ControllerSettingsSaveProfileToolTip": "プロファイルをセーブ", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index bd5bed962..2a62c415d 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "배경색 설정", "AvatarClose": "닫기", "ControllerSettingsLoadProfileToolTip": "프로필 불러오기", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "프로필 추가", "ControllerSettingsRemoveProfileToolTip": "프로필 제거", "ControllerSettingsSaveProfileToolTip": "프로필 저장", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index 6eb1118be..d6356dc76 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "Ustaw kolor tła", "AvatarClose": "Zamknij", "ControllerSettingsLoadProfileToolTip": "Wczytaj profil", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "Dodaj profil", "ControllerSettingsRemoveProfileToolTip": "Usuń profil", "ControllerSettingsSaveProfileToolTip": "Zapisz profil", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index 087098959..42a8e437b 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "Definir cor de fundo", "AvatarClose": "Fechar", "ControllerSettingsLoadProfileToolTip": "Carregar perfil", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "Adicionar perfil", "ControllerSettingsRemoveProfileToolTip": "Remover perfil", "ControllerSettingsSaveProfileToolTip": "Salvar perfil", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index f1a6f64e4..4ef6ff6d9 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "Установить цвет фона", "AvatarClose": "Закрыть", "ControllerSettingsLoadProfileToolTip": "Загрузить профиль", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "Добавить профиль", "ControllerSettingsRemoveProfileToolTip": "Удалить профиль", "ControllerSettingsSaveProfileToolTip": "Сохранить профиль", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index caf8f00ff..91169d9e2 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "ตั้งค่าสีพื้นหลัง", "AvatarClose": "ปิด", "ControllerSettingsLoadProfileToolTip": "โหลด โปรไฟล์", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "เพิ่ม โปรไฟล์", "ControllerSettingsRemoveProfileToolTip": "ลบ โปรไฟล์", "ControllerSettingsSaveProfileToolTip": "บันทึก โปรไฟล์", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index 83791752b..b9ce3e884 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "Arka Plan Rengi Ayarla", "AvatarClose": "Kapat", "ControllerSettingsLoadProfileToolTip": "Profil Yükle", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "Profil Ekle", "ControllerSettingsRemoveProfileToolTip": "Profili Kaldır", "ControllerSettingsSaveProfileToolTip": "Profili Kaydet", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 807097f25..581d1bca1 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "Встановити колір фону", "AvatarClose": "Закрити", "ControllerSettingsLoadProfileToolTip": "Завантажити профіль", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "Додати профіль", "ControllerSettingsRemoveProfileToolTip": "Видалити профіль", "ControllerSettingsSaveProfileToolTip": "Зберегти профіль", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index 98f27b4c2..3426b8a4a 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "设置背景色", "AvatarClose": "关闭", "ControllerSettingsLoadProfileToolTip": "加载配置文件", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "新增配置文件", "ControllerSettingsRemoveProfileToolTip": "删除配置文件", "ControllerSettingsSaveProfileToolTip": "保存配置文件", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index 491c07dd8..fd02254e1 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -407,6 +407,7 @@ "AvatarSetBackgroundColor": "設定背景顏色", "AvatarClose": "關閉", "ControllerSettingsLoadProfileToolTip": "載入設定檔", + "ControllerSettingsViewProfileToolTip": "View Profile", "ControllerSettingsAddProfileToolTip": "新增設定檔", "ControllerSettingsRemoveProfileToolTip": "刪除設定檔", "ControllerSettingsSaveProfileToolTip": "儲存設定檔", diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index cdce023cb..76512a34a 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -30,7 +30,6 @@ namespace Ryujinx.Ava { internal partial class Program { - // public static double WindowScaleFactor { get; set; } public static double DesktopScaleFactor { get; set; } = 1.0; public static string Version { get; private set; } diff --git a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs b/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs index bd8c1e3a7..a7fe3f0ce 100644 --- a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs +++ b/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs @@ -226,11 +226,11 @@ namespace Ryujinx.Ava.UI.Helpers (int)Symbol.Help, primaryButtonResult); - internal static async Task CreateConfirmationDialogExtended( + internal static async Task CreateDeniableConfirmationDialog( string primaryText, string secondaryText, string acceptButtonText, - string noacceptButtonText, + string noAcceptButtonText, string cancelButtonText, string title, UserResult primaryButtonResult = UserResult.Yes) @@ -239,7 +239,7 @@ namespace Ryujinx.Ava.UI.Helpers primaryText, secondaryText, acceptButtonText, - noacceptButtonText, + noAcceptButtonText, cancelButtonText, (int)Symbol.Help, primaryButtonResult); diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs index c900ea532..ee84fbc37 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs @@ -26,19 +26,17 @@ namespace Ryujinx.Ava.UI.Views.Input foreach (ILogical visual in SettingButtons.GetLogicalDescendants()) { - if (visual is ToggleButton button and not CheckBox) + switch (visual) { - button.IsCheckedChanged += Button_IsCheckedChanged; - } - - if (visual is CheckBox check) - { - check.IsCheckedChanged += CheckBox_IsCheckedChanged; - } - - if (visual is Slider slider) - { - slider.PropertyChanged += Slider_IsCheckedChanged; + case ToggleButton button and not CheckBox: + button.IsCheckedChanged += Button_IsCheckedChanged; + break; + case CheckBox check: + check.IsCheckedChanged += CheckBox_IsCheckedChanged; + break; + case Slider slider: + slider.PropertyChanged += Slider_ValueChanged; + break; } } } @@ -47,33 +45,28 @@ namespace Ryujinx.Ava.UI.Views.Input { base.OnPointerReleased(e); - if (_currentAssigner != null && _currentAssigner.ToggledButton != null && !_currentAssigner.ToggledButton.IsPointerOver) + if (_currentAssigner is { ToggledButton.IsPointerOver: false }) { _currentAssigner.Cancel(); } } - private float _changeSlider = -1.0f; + private float _changeSlider = float.NaN; - private void Slider_IsCheckedChanged(object sender, AvaloniaPropertyChangedEventArgs e) + private void Slider_ValueChanged(object sender, AvaloniaPropertyChangedEventArgs e) { if (sender is Slider check) { - if ((bool)check.IsPointerOver && _changeSlider == -1.0f) + _changeSlider = check.IsPointerOver switch { - _changeSlider = (float)check.Value; - - } - else if (!(bool)check.IsPointerOver) - { - _changeSlider = -1.0f; - } + true when float.IsNaN(_changeSlider) => (float)check.Value, + false => float.NaN, + _ => _changeSlider + }; - if (_changeSlider != -1.0f && _changeSlider != (float)check.Value) + if (!float.IsNaN(_changeSlider) && _changeSlider != (float)check.Value) { - - var viewModel = (DataContext as ControllerInputViewModel); - viewModel.ParentModel.IsModified = true; + (DataContext as ControllerInputViewModel)!.ParentModel.IsModified = true; _changeSlider = (float)check.Value; } } @@ -81,25 +74,20 @@ namespace Ryujinx.Ava.UI.Views.Input private void CheckBox_IsCheckedChanged(object sender, RoutedEventArgs e) { - if (sender is CheckBox check) + if (sender is CheckBox { IsPointerOver: true }) { - if ((bool)check.IsPointerOver) - { - - var viewModel = (DataContext as ControllerInputViewModel); - viewModel.ParentModel.IsModified = true; - _currentAssigner?.Cancel(); - _currentAssigner = null; - } + (DataContext as ControllerInputViewModel)!.ParentModel.IsModified = true; + _currentAssigner?.Cancel(); + _currentAssigner = null; } } private void Button_IsCheckedChanged(object sender, RoutedEventArgs e) { - if (sender is ToggleButton button ) + if (sender is ToggleButton button) { - if ((bool)button.IsChecked) + if (button.IsChecked is true) { if (_currentAssigner != null && button == _currentAssigner.ToggledButton) { @@ -204,7 +192,7 @@ namespace Ryujinx.Ava.UI.Views.Input } else { - if (_currentAssigner != null ) + if (_currentAssigner != null) { _currentAssigner.Cancel(); _currentAssigner = null; diff --git a/src/Ryujinx/UI/Views/Input/InputView.axaml.cs b/src/Ryujinx/UI/Views/Input/InputView.axaml.cs index 5fda7ef6a..3c9d4040f 100644 --- a/src/Ryujinx/UI/Views/Input/InputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/InputView.axaml.cs @@ -37,7 +37,7 @@ namespace Ryujinx.Ava.UI.Views.Input { _dialogOpen = true; - var result = await ContentDialogHelper.CreateConfirmationDialogExtended( + var result = await ContentDialogHelper.CreateDeniableConfirmationDialog( LocaleManager.Instance[LocaleKeys.DialogControllerSettingsModifiedConfirmMessage], LocaleManager.Instance[LocaleKeys.DialogControllerSettingsModifiedConfirmSubMessage], LocaleManager.Instance[LocaleKeys.InputDialogYes], @@ -53,28 +53,19 @@ namespace Ryujinx.Ava.UI.Views.Input _dialogOpen = false; - if (result == UserResult.Cancel) - { - - return; - } - - ViewModel.IsModified = false; - - if (result != UserResult.Cancel) - { - ViewModel.PlayerId = ViewModel.PlayerIdChoose; - } - if (result == UserResult.Cancel) { if (e.AddedItems.Count > 0) { ViewModel.IsModified = true; - var player = (PlayerModel)e.AddedItems[0]; - ViewModel.PlayerId = player.Id; + ViewModel.PlayerId = ((PlayerModel)e.AddedItems[0])!.Id; } + return; } + + ViewModel.PlayerId = ViewModel.PlayerIdChoose; + + ViewModel.IsModified = false; } } diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 4754f2091..9deff5e86 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -32,7 +32,8 @@ namespace Ryujinx.Ava internal static class Updater { private const string GitHubApiUrl = "https://api.github.com"; - private const string LatestReleaseUrl = $"{GitHubApiUrl}/repos/{ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}/releases/latest"; + private const string LatestReleaseUrl = + $"{GitHubApiUrl}/repos/{ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}/releases/latest"; private static readonly GithubReleasesJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); -- 2.47.1 From eb6ce7bcb3ed35b82619464739cd8dda8b990a2e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 20:09:02 -0600 Subject: [PATCH 032/722] misc: chore: replace some new "" additions & some I missed --- src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs | 2 +- src/Ryujinx.HLE/HOS/ModLoader.cs | 2 +- src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs | 2 +- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs b/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs index 171a083f3..2e7b8ee76 100644 --- a/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs +++ b/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs @@ -2463,7 +2463,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler return ParseIntegerLiteral("unsigned short"); case 'i': _position++; - return ParseIntegerLiteral(""); + return ParseIntegerLiteral(string.Empty); case 'j': _position++; return ParseIntegerLiteral("u"); diff --git a/src/Ryujinx.HLE/HOS/ModLoader.cs b/src/Ryujinx.HLE/HOS/ModLoader.cs index ee179c929..9a81cc361 100644 --- a/src/Ryujinx.HLE/HOS/ModLoader.cs +++ b/src/Ryujinx.HLE/HOS/ModLoader.cs @@ -169,7 +169,7 @@ namespace Ryujinx.HLE.HOS foreach (var modDir in dir.EnumerateDirectories()) { types.Clear(); - Mod mod = new("", null, true); + Mod mod = new(string.Empty, null, true); if (StrEquals(RomfsDir, modDir.Name)) { diff --git a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs b/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs index 93b2d6138..24c2c64c0 100644 --- a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs +++ b/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs @@ -127,7 +127,7 @@ namespace Ryujinx.UI.Common.Helper Logger.Debug?.Print(LogClass.Application, $"Adding type association {ext}"); using var openCmd = key.CreateSubKey(@"shell\open\command"); - openCmd.SetValue("", $"\"{Environment.ProcessPath}\" \"%1\""); + openCmd.SetValue(string.Empty, $"\"{Environment.ProcessPath}\" \"%1\""); Logger.Debug?.Print(LogClass.Application, $"Added type association {ext}"); } diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index edca7949a..8c8d56b34 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -75,7 +75,7 @@ namespace Ryujinx.Ava.UI.Windows string parentPath = currentCheatFile.Replace(titleModsPath, string.Empty); buildId = Path.GetFileNameWithoutExtension(currentCheatFile).ToUpper(); - currentGroup = new CheatNode("", buildId, parentPath, true); + currentGroup = new CheatNode(string.Empty, buildId, parentPath, true); LoadedCheats.Add(currentGroup); } diff --git a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs index 580ebc9da..6df862283 100644 --- a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs @@ -32,9 +32,9 @@ namespace Ryujinx.Ava.UI.Windows { ContentDialog contentDialog = new() { - PrimaryButtonText = "", - SecondaryButtonText = "", - CloseButtonText = "", + PrimaryButtonText = string.Empty, + SecondaryButtonText = string.Empty, + CloseButtonText = string.Empty, Content = new XCITrimmerWindow(mainWindowViewModel), Title = string.Format(LocaleManager.Instance[LocaleKeys.XCITrimmerWindowTitle]), }; -- 2.47.1 From 617b81e209831c17de455c0c19bf108ab1173436 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 20:33:49 -0600 Subject: [PATCH 033/722] UI: Conditionally enable install/uninstall file types buttons based on whether they're installed already --- .../Helper/FileAssociationHelper.cs | 72 +++++++++---------- .../UI/ViewModels/MainWindowViewModel.cs | 5 ++ .../UI/Views/Main/MainMenuBarView.axaml | 6 +- 3 files changed, 43 insertions(+), 40 deletions(-) diff --git a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs b/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs index 24c2c64c0..be10deca0 100644 --- a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs +++ b/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs @@ -4,6 +4,7 @@ using Ryujinx.Common.Logging; using System; using System.Diagnostics; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using System.Runtime.Versioning; @@ -23,6 +24,26 @@ namespace Ryujinx.UI.Common.Helper public static partial void SHChangeNotify(uint wEventId, uint uFlags, nint dwItem1, nint dwItem2); public static bool IsTypeAssociationSupported => (OperatingSystem.IsLinux() || OperatingSystem.IsWindows()) && !ReleaseInformation.IsFlatHubBuild; + + public static bool AreMimeTypesRegistered + { + get + { + if (OperatingSystem.IsLinux()) + { + return AreMimeTypesRegisteredLinux(); + } + + if (OperatingSystem.IsWindows()) + { + return AreMimeTypesRegisteredWindows(); + } + + // TODO: Add macOS support. + + return false; + } + } [SupportedOSPlatform("linux")] private static bool AreMimeTypesRegisteredLinux() => File.Exists(Path.Combine(_mimeDbPath, "packages", "Ryujinx.xml")); @@ -72,6 +93,10 @@ namespace Ryujinx.UI.Common.Helper [SupportedOSPlatform("windows")] private static bool AreMimeTypesRegisteredWindows() { + return _fileExtensions.Aggregate(false, + (current, ext) => current | CheckRegistering(ext) + ); + static bool CheckRegistering(string ext) { RegistryKey key = Registry.CurrentUser.OpenSubKey(@$"Software\Classes\{ext}"); @@ -87,20 +112,20 @@ namespace Ryujinx.UI.Common.Helper return keyValue is not null && (keyValue.Contains("Ryujinx") || keyValue.Contains(AppDomain.CurrentDomain.FriendlyName)); } - - bool registered = false; - - foreach (string ext in _fileExtensions) - { - registered |= CheckRegistering(ext); - } - - return registered; } [SupportedOSPlatform("windows")] private static bool InstallWindowsMimeTypes(bool uninstall = false) { + bool registered = _fileExtensions.Aggregate(false, + (current, ext) => current | RegisterExtension(ext, uninstall) + ); + + // Notify Explorer the file association has been changed. + SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, nint.Zero, nint.Zero); + + return registered; + static bool RegisterExtension(string ext, bool uninstall = false) { string keyString = @$"Software\Classes\{ext}"; @@ -134,35 +159,6 @@ namespace Ryujinx.UI.Common.Helper return true; } - - bool registered = false; - - foreach (string ext in _fileExtensions) - { - registered |= RegisterExtension(ext, uninstall); - } - - // Notify Explorer the file association has been changed. - SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, nint.Zero, nint.Zero); - - return registered; - } - - public static bool AreMimeTypesRegistered() - { - if (OperatingSystem.IsLinux()) - { - return AreMimeTypesRegisteredLinux(); - } - - if (OperatingSystem.IsWindows()) - { - return AreMimeTypesRegisteredWindows(); - } - - // TODO: Add macOS support. - - return false; } public static bool Install() diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 70f8b2a82..437f9861d 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -802,6 +802,11 @@ namespace Ryujinx.Ava.UI.ViewModels { get => FileAssociationHelper.IsTypeAssociationSupported; } + + public bool AreMimeTypesRegistered + { + get => FileAssociationHelper.AreMimeTypesRegistered; + } public ObservableCollectionExtended Applications { diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 0a41b3458..910741089 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -4,8 +4,10 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" + xmlns:uih="clr-namespace:Ryujinx.UI.Common.Helper" mc:Ignorable="d" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" + xmlns:helper="clr-namespace:Ryujinx.UI.Common.Helper;assembly=Ryujinx.UI.Common" x:DataType="viewModels:MainWindowViewModel" x:Class="Ryujinx.Ava.UI.Views.Main.MainMenuBarView"> @@ -265,8 +267,8 @@ - - + + -- 2.47.1 From 285ee276b6a199e66d3bb5d8558fe63a686d363a Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 22:03:12 -0600 Subject: [PATCH 034/722] misc: Bake in value change logging into ReactiveObject to reduce logic duplication. --- src/Ryujinx.Common/ReactiveObject.cs | 22 ++++-- src/Ryujinx.HLE/HOS/ModLoader.cs | 17 ++--- .../Configuration/ConfigurationState.cs | 75 +++++++++---------- 3 files changed, 59 insertions(+), 55 deletions(-) diff --git a/src/Ryujinx.Common/ReactiveObject.cs b/src/Ryujinx.Common/ReactiveObject.cs index 4f27af546..8df1e20fe 100644 --- a/src/Ryujinx.Common/ReactiveObject.cs +++ b/src/Ryujinx.Common/ReactiveObject.cs @@ -1,11 +1,13 @@ +using Ryujinx.Common.Logging; using System; +using System.Globalization; using System.Threading; namespace Ryujinx.Common { public class ReactiveObject { - private readonly ReaderWriterLockSlim _readerWriterLock = new(); + private readonly ReaderWriterLockSlim _rwLock = new(); private bool _isInitialized; private T _value; @@ -15,15 +17,15 @@ namespace Ryujinx.Common { get { - _readerWriterLock.EnterReadLock(); + _rwLock.EnterReadLock(); T value = _value; - _readerWriterLock.ExitReadLock(); + _rwLock.ExitReadLock(); return value; } set { - _readerWriterLock.EnterWriteLock(); + _rwLock.EnterWriteLock(); T oldValue = _value; @@ -32,7 +34,7 @@ namespace Ryujinx.Common _isInitialized = true; _value = value; - _readerWriterLock.ExitWriteLock(); + _rwLock.ExitWriteLock(); if (!oldIsInitialized || oldValue == null || !oldValue.Equals(_value)) { @@ -40,12 +42,22 @@ namespace Ryujinx.Common } } } + + public void LogChangesToValue(string valueName, LogClass logClass = LogClass.Configuration) + => Event += (_, e) => ReactiveObjectHelper.LogValueChange(logClass, e, valueName); public static implicit operator T(ReactiveObject obj) => obj.Value; } public static class ReactiveObjectHelper { + public static void LogValueChange(LogClass logClass, ReactiveEventArgs eventArgs, string valueName) + { + string message = string.Create(CultureInfo.InvariantCulture, $"{valueName} set to: {eventArgs.NewValue}"); + + Logger.Info?.Print(logClass, message); + } + public static void Toggle(this ReactiveObject rBoolean) => rBoolean.Value = !rBoolean.Value; } diff --git a/src/Ryujinx.HLE/HOS/ModLoader.cs b/src/Ryujinx.HLE/HOS/ModLoader.cs index 9a81cc361..7cbe1afca 100644 --- a/src/Ryujinx.HLE/HOS/ModLoader.cs +++ b/src/Ryujinx.HLE/HOS/ModLoader.cs @@ -116,18 +116,13 @@ namespace Ryujinx.HLE.HOS private readonly Dictionary _appMods; // key is ApplicationId private PatchCache _patches; - private static readonly EnumerationOptions _dirEnumOptions; - - static ModLoader() + private static readonly EnumerationOptions _dirEnumOptions = new() { - _dirEnumOptions = new EnumerationOptions - { - MatchCasing = MatchCasing.CaseInsensitive, - MatchType = MatchType.Simple, - RecurseSubdirectories = false, - ReturnSpecialDirectories = false, - }; - } + MatchCasing = MatchCasing.CaseInsensitive, + MatchType = MatchType.Simple, + RecurseSubdirectories = false, + ReturnSpecialDirectories = false, + }; public ModLoader() { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs index 50b3569a1..27fc0a3f1 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs @@ -13,8 +13,6 @@ using Ryujinx.UI.Common.Configuration.UI; using Ryujinx.UI.Common.Helper; using System; using System.Collections.Generic; -using System.Globalization; -using System.Text.Json.Nodes; namespace Ryujinx.UI.Common.Configuration { @@ -201,7 +199,7 @@ namespace Ryujinx.UI.Common.Configuration IsAscendingOrder = new ReactiveObject(); LanguageCode = new ReactiveObject(); ShowConsole = new ReactiveObject(); - ShowConsole.Event += static (s, e) => { ConsoleHelper.SetConsoleWindowState(e.NewValue); }; + ShowConsole.Event += static (_, e) => ConsoleHelper.SetConsoleWindowState(e.NewValue); } } @@ -268,6 +266,7 @@ namespace Ryujinx.UI.Common.Configuration public LoggerSection() { EnableDebug = new ReactiveObject(); + EnableDebug.LogChangesToValue(nameof(EnableDebug)); EnableStub = new ReactiveObject(); EnableInfo = new ReactiveObject(); EnableWarn = new ReactiveObject(); @@ -277,7 +276,7 @@ namespace Ryujinx.UI.Common.Configuration EnableFsAccessLog = new ReactiveObject(); FilteredClasses = new ReactiveObject(); EnableFileLog = new ReactiveObject(); - EnableFileLog.Event += static (sender, e) => LogValueChange(e, nameof(EnableFileLog)); + EnableFileLog.LogChangesToValue(nameof(EnableFileLog)); GraphicsDebugLevel = new ReactiveObject(); } } @@ -370,33 +369,37 @@ namespace Ryujinx.UI.Common.Configuration public SystemSection() { Language = new ReactiveObject(); + Language.LogChangesToValue(nameof(Language)); Region = new ReactiveObject(); + Region.LogChangesToValue(nameof(Region)); TimeZone = new ReactiveObject(); + TimeZone.LogChangesToValue(nameof(TimeZone)); SystemTimeOffset = new ReactiveObject(); + SystemTimeOffset.LogChangesToValue(nameof(SystemTimeOffset)); EnableDockedMode = new ReactiveObject(); - EnableDockedMode.Event += static (sender, e) => LogValueChange(e, nameof(EnableDockedMode)); + EnableDockedMode.LogChangesToValue(nameof(EnableDockedMode)); EnablePtc = new ReactiveObject(); - EnablePtc.Event += static (sender, e) => LogValueChange(e, nameof(EnablePtc)); + EnablePtc.LogChangesToValue(nameof(EnablePtc)); EnableLowPowerPtc = new ReactiveObject(); - EnableLowPowerPtc.Event += static (sender, e) => LogValueChange(e, nameof(EnableLowPowerPtc)); + EnableLowPowerPtc.LogChangesToValue(nameof(EnableLowPowerPtc)); EnableInternetAccess = new ReactiveObject(); - EnableInternetAccess.Event += static (sender, e) => LogValueChange(e, nameof(EnableInternetAccess)); + EnableInternetAccess.LogChangesToValue(nameof(EnableInternetAccess)); EnableFsIntegrityChecks = new ReactiveObject(); - EnableFsIntegrityChecks.Event += static (sender, e) => LogValueChange(e, nameof(EnableFsIntegrityChecks)); + EnableFsIntegrityChecks.LogChangesToValue(nameof(EnableFsIntegrityChecks)); FsGlobalAccessLogMode = new ReactiveObject(); - FsGlobalAccessLogMode.Event += static (sender, e) => LogValueChange(e, nameof(FsGlobalAccessLogMode)); + FsGlobalAccessLogMode.LogChangesToValue(nameof(FsGlobalAccessLogMode)); AudioBackend = new ReactiveObject(); - AudioBackend.Event += static (sender, e) => LogValueChange(e, nameof(AudioBackend)); + AudioBackend.LogChangesToValue(nameof(AudioBackend)); MemoryManagerMode = new ReactiveObject(); - MemoryManagerMode.Event += static (sender, e) => LogValueChange(e, nameof(MemoryManagerMode)); + MemoryManagerMode.LogChangesToValue(nameof(MemoryManagerMode)); DramSize = new ReactiveObject(); - DramSize.Event += static (sender, e) => LogValueChange(e, nameof(DramSize)); + DramSize.LogChangesToValue(nameof(DramSize)); IgnoreMissingServices = new ReactiveObject(); - IgnoreMissingServices.Event += static (sender, e) => LogValueChange(e, nameof(IgnoreMissingServices)); + IgnoreMissingServices.LogChangesToValue(nameof(IgnoreMissingServices)); AudioVolume = new ReactiveObject(); - AudioVolume.Event += static (sender, e) => LogValueChange(e, nameof(AudioVolume)); + AudioVolume.LogChangesToValue(nameof(AudioVolume)); UseHypervisor = new ReactiveObject(); - UseHypervisor.Event += static (sender, e) => LogValueChange(e, nameof(UseHypervisor)); + UseHypervisor.LogChangesToValue(nameof(UseHypervisor)); } } @@ -524,36 +527,36 @@ namespace Ryujinx.UI.Common.Configuration public GraphicsSection() { BackendThreading = new ReactiveObject(); - BackendThreading.Event += static (_, e) => LogValueChange(e, nameof(BackendThreading)); + BackendThreading.LogChangesToValue(nameof(BackendThreading)); ResScale = new ReactiveObject(); - ResScale.Event += static (_, e) => LogValueChange(e, nameof(ResScale)); + ResScale.LogChangesToValue(nameof(ResScale)); ResScaleCustom = new ReactiveObject(); - ResScaleCustom.Event += static (_, e) => LogValueChange(e, nameof(ResScaleCustom)); + ResScaleCustom.LogChangesToValue(nameof(ResScaleCustom)); MaxAnisotropy = new ReactiveObject(); - MaxAnisotropy.Event += static (_, e) => LogValueChange(e, nameof(MaxAnisotropy)); + MaxAnisotropy.LogChangesToValue(nameof(MaxAnisotropy)); AspectRatio = new ReactiveObject(); - AspectRatio.Event += static (_, e) => LogValueChange(e, nameof(AspectRatio)); + AspectRatio.LogChangesToValue(nameof(AspectRatio)); ShadersDumpPath = new ReactiveObject(); EnableVsync = new ReactiveObject(); - EnableVsync.Event += static (_, e) => LogValueChange(e, nameof(EnableVsync)); + EnableVsync.LogChangesToValue(nameof(EnableVsync)); EnableShaderCache = new ReactiveObject(); - EnableShaderCache.Event += static (_, e) => LogValueChange(e, nameof(EnableShaderCache)); + EnableShaderCache.LogChangesToValue(nameof(EnableShaderCache)); EnableTextureRecompression = new ReactiveObject(); - EnableTextureRecompression.Event += static (_, e) => LogValueChange(e, nameof(EnableTextureRecompression)); + EnableTextureRecompression.LogChangesToValue(nameof(EnableTextureRecompression)); GraphicsBackend = new ReactiveObject(); - GraphicsBackend.Event += static (_, e) => LogValueChange(e, nameof(GraphicsBackend)); + GraphicsBackend.LogChangesToValue(nameof(GraphicsBackend)); PreferredGpu = new ReactiveObject(); - PreferredGpu.Event += static (_, e) => LogValueChange(e, nameof(PreferredGpu)); + PreferredGpu.LogChangesToValue(nameof(PreferredGpu)); EnableMacroHLE = new ReactiveObject(); - EnableMacroHLE.Event += static (_, e) => LogValueChange(e, nameof(EnableMacroHLE)); + EnableMacroHLE.LogChangesToValue(nameof(EnableMacroHLE)); EnableColorSpacePassthrough = new ReactiveObject(); - EnableColorSpacePassthrough.Event += static (_, e) => LogValueChange(e, nameof(EnableColorSpacePassthrough)); + EnableColorSpacePassthrough.LogChangesToValue(nameof(EnableColorSpacePassthrough)); AntiAliasing = new ReactiveObject(); - AntiAliasing.Event += static (_, e) => LogValueChange(e, nameof(AntiAliasing)); + AntiAliasing.LogChangesToValue(nameof(AntiAliasing)); ScalingFilter = new ReactiveObject(); - ScalingFilter.Event += static (_, e) => LogValueChange(e, nameof(ScalingFilter)); + ScalingFilter.LogChangesToValue(nameof(ScalingFilter)); ScalingFilterLevel = new ReactiveObject(); - ScalingFilterLevel.Event += static (_, e) => LogValueChange(e, nameof(ScalingFilterLevel)); + ScalingFilterLevel.LogChangesToValue(nameof(ScalingFilterLevel)); } } @@ -576,7 +579,7 @@ namespace Ryujinx.UI.Common.Configuration { LanInterfaceId = new ReactiveObject(); Mode = new ReactiveObject(); - Mode.Event += static (_, e) => LogValueChange(e, nameof(MultiplayerMode)); + Mode.LogChangesToValue(nameof(Mode)); } } @@ -667,6 +670,7 @@ namespace Ryujinx.UI.Common.Configuration CheckUpdatesOnStart = new ReactiveObject(); ShowConfirmExit = new ReactiveObject(); IgnoreApplet = new ReactiveObject(); + IgnoreApplet.LogChangesToValue(nameof(IgnoreApplet)); RememberWindowState = new ReactiveObject(); ShowTitleBar = new ReactiveObject(); EnableHardwareAcceleration = new ReactiveObject(); @@ -1654,13 +1658,6 @@ namespace Ryujinx.UI.Common.Configuration return GraphicsBackend.OpenGl; } - private static void LogValueChange(ReactiveEventArgs eventArgs, string valueName) - { - string message = string.Create(CultureInfo.InvariantCulture, $"{valueName} set to: {eventArgs.NewValue}"); - - Ryujinx.Common.Logging.Logger.Info?.Print(LogClass.Configuration, message); - } - public static void Initialize() { if (Instance != null) -- 2.47.1 From 15c20920b37ac99863caeaff4681f2e1de1a695a Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 22:04:55 -0600 Subject: [PATCH 035/722] I thought this was a typo on my part; it wasn't --- src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs index 27fc0a3f1..c0abb372a 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs @@ -579,7 +579,7 @@ namespace Ryujinx.UI.Common.Configuration { LanInterfaceId = new ReactiveObject(); Mode = new ReactiveObject(); - Mode.LogChangesToValue(nameof(Mode)); + Mode.LogChangesToValue(nameof(MultiplayerMode)); } } -- 2.47.1 From a506d81989d492e3bc1a18b76f313e2c0cc6c698 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 22:16:45 -0600 Subject: [PATCH 036/722] Split ConfigurationState into 3 parts: Migration, Model, and everything else. --- .../ConfigurationState.Migration.cs | 715 +++++++++ .../Configuration/ConfigurationState.Model.cs | 674 ++++++++ .../Configuration/ConfigurationState.cs | 1374 +---------------- 3 files changed, 1396 insertions(+), 1367 deletions(-) create mode 100644 src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs create mode 100644 src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs new file mode 100644 index 000000000..18326a3a4 --- /dev/null +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs @@ -0,0 +1,715 @@ +using Ryujinx.Common.Configuration; +using Ryujinx.Common.Configuration.Hid; +using Ryujinx.Common.Configuration.Hid.Controller; +using Ryujinx.Common.Configuration.Hid.Keyboard; +using Ryujinx.Common.Configuration.Multiplayer; +using Ryujinx.Common.Logging; +using Ryujinx.HLE; +using Ryujinx.UI.Common.Configuration.System; +using Ryujinx.UI.Common.Configuration.UI; +using System; +using System.Collections.Generic; + +namespace Ryujinx.UI.Common.Configuration +{ + public partial class ConfigurationState + { + public void Load(ConfigurationFileFormat configurationFileFormat, string configurationFilePath) + { + bool configurationFileUpdated = false; + + if (configurationFileFormat.Version is < 0 or > ConfigurationFileFormat.CurrentVersion) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Unsupported configuration version {configurationFileFormat.Version}, loading default."); + + LoadDefault(); + } + + if (configurationFileFormat.Version < 2) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 2."); + + configurationFileFormat.SystemRegion = Region.USA; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 3) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 3."); + + configurationFileFormat.SystemTimeZone = "UTC"; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 4) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 4."); + + configurationFileFormat.MaxAnisotropy = -1; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 5) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 5."); + + configurationFileFormat.SystemTimeOffset = 0; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 8) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 8."); + + configurationFileFormat.EnablePtc = true; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 9) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 9."); + + configurationFileFormat.ColumnSort = new ColumnSort + { + SortColumnId = 0, + SortAscending = false, + }; + + configurationFileFormat.Hotkeys = new KeyboardHotkeys + { + ToggleVsync = Key.F1, + }; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 10) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 10."); + + configurationFileFormat.AudioBackend = AudioBackend.OpenAl; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 11) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 11."); + + configurationFileFormat.ResScale = 1; + configurationFileFormat.ResScaleCustom = 1.0f; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 12) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 12."); + + configurationFileFormat.LoggingGraphicsDebugLevel = GraphicsDebugLevel.None; + + configurationFileUpdated = true; + } + + // configurationFileFormat.Version == 13 -> LDN1 + + if (configurationFileFormat.Version < 14) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 14."); + + configurationFileFormat.CheckUpdatesOnStart = true; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 16) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 16."); + + configurationFileFormat.EnableShaderCache = true; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 17) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 17."); + + configurationFileFormat.StartFullscreen = false; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 18) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 18."); + + configurationFileFormat.AspectRatio = AspectRatio.Fixed16x9; + + configurationFileUpdated = true; + } + + // configurationFileFormat.Version == 19 -> LDN2 + + if (configurationFileFormat.Version < 20) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 20."); + + configurationFileFormat.ShowConfirmExit = true; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 21) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 21."); + + // Initialize network config. + + configurationFileFormat.MultiplayerMode = MultiplayerMode.Disabled; + configurationFileFormat.MultiplayerLanInterfaceId = "0"; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 22) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 22."); + + configurationFileFormat.HideCursor = HideCursorMode.Never; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 24) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 24."); + + configurationFileFormat.InputConfig = new List + { + new StandardKeyboardInputConfig + { + Version = InputConfig.CurrentVersion, + Backend = InputBackendType.WindowKeyboard, + Id = "0", + PlayerIndex = PlayerIndex.Player1, + ControllerType = ControllerType.ProController, + LeftJoycon = new LeftJoyconCommonConfig + { + DpadUp = Key.Up, + DpadDown = Key.Down, + DpadLeft = Key.Left, + DpadRight = Key.Right, + ButtonMinus = Key.Minus, + ButtonL = Key.E, + ButtonZl = Key.Q, + ButtonSl = Key.Unbound, + ButtonSr = Key.Unbound, + }, + LeftJoyconStick = new JoyconConfigKeyboardStick + { + StickUp = Key.W, + StickDown = Key.S, + StickLeft = Key.A, + StickRight = Key.D, + StickButton = Key.F, + }, + RightJoycon = new RightJoyconCommonConfig + { + ButtonA = Key.Z, + ButtonB = Key.X, + ButtonX = Key.C, + ButtonY = Key.V, + ButtonPlus = Key.Plus, + ButtonR = Key.U, + ButtonZr = Key.O, + ButtonSl = Key.Unbound, + ButtonSr = Key.Unbound, + }, + RightJoyconStick = new JoyconConfigKeyboardStick + { + StickUp = Key.I, + StickDown = Key.K, + StickLeft = Key.J, + StickRight = Key.L, + StickButton = Key.H, + }, + }, + }; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 25) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 25."); + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 26) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 26."); + + configurationFileFormat.MemoryManagerMode = MemoryManagerMode.HostMappedUnsafe; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 27) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 27."); + + configurationFileFormat.EnableMouse = false; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 28) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 28."); + + configurationFileFormat.Hotkeys = new KeyboardHotkeys + { + ToggleVsync = Key.F1, + Screenshot = Key.F8, + }; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 29) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 29."); + + configurationFileFormat.Hotkeys = new KeyboardHotkeys + { + ToggleVsync = Key.F1, + Screenshot = Key.F8, + ShowUI = Key.F4, + }; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 30) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 30."); + + foreach (InputConfig config in configurationFileFormat.InputConfig) + { + if (config is StandardControllerInputConfig controllerConfig) + { + controllerConfig.Rumble = new RumbleConfigController + { + EnableRumble = false, + StrongRumble = 1f, + WeakRumble = 1f, + }; + } + } + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 31) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 31."); + + configurationFileFormat.BackendThreading = BackendThreading.Auto; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 32) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 32."); + + configurationFileFormat.Hotkeys = new KeyboardHotkeys + { + ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, + Screenshot = configurationFileFormat.Hotkeys.Screenshot, + ShowUI = configurationFileFormat.Hotkeys.ShowUI, + Pause = Key.F5, + }; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 33) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 33."); + + configurationFileFormat.Hotkeys = new KeyboardHotkeys + { + ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, + Screenshot = configurationFileFormat.Hotkeys.Screenshot, + ShowUI = configurationFileFormat.Hotkeys.ShowUI, + Pause = configurationFileFormat.Hotkeys.Pause, + ToggleMute = Key.F2, + }; + + configurationFileFormat.AudioVolume = 1; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 34) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 34."); + + configurationFileFormat.EnableInternetAccess = false; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 35) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 35."); + + foreach (InputConfig config in configurationFileFormat.InputConfig) + { + if (config is StandardControllerInputConfig controllerConfig) + { + controllerConfig.RangeLeft = 1.0f; + controllerConfig.RangeRight = 1.0f; + } + } + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 36) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 36."); + + configurationFileFormat.LoggingEnableTrace = false; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 37) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 37."); + + configurationFileFormat.ShowConsole = true; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 38) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 38."); + + configurationFileFormat.BaseStyle = "Dark"; + configurationFileFormat.GameListViewMode = 0; + configurationFileFormat.ShowNames = true; + configurationFileFormat.GridSize = 2; + configurationFileFormat.LanguageCode = "en_US"; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 39) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 39."); + + configurationFileFormat.Hotkeys = new KeyboardHotkeys + { + ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, + Screenshot = configurationFileFormat.Hotkeys.Screenshot, + ShowUI = configurationFileFormat.Hotkeys.ShowUI, + Pause = configurationFileFormat.Hotkeys.Pause, + ToggleMute = configurationFileFormat.Hotkeys.ToggleMute, + ResScaleUp = Key.Unbound, + ResScaleDown = Key.Unbound, + }; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 40) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 40."); + + configurationFileFormat.GraphicsBackend = GraphicsBackend.OpenGl; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 41) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 41."); + + configurationFileFormat.Hotkeys = new KeyboardHotkeys + { + ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, + Screenshot = configurationFileFormat.Hotkeys.Screenshot, + ShowUI = configurationFileFormat.Hotkeys.ShowUI, + Pause = configurationFileFormat.Hotkeys.Pause, + ToggleMute = configurationFileFormat.Hotkeys.ToggleMute, + ResScaleUp = configurationFileFormat.Hotkeys.ResScaleUp, + ResScaleDown = configurationFileFormat.Hotkeys.ResScaleDown, + VolumeUp = Key.Unbound, + VolumeDown = Key.Unbound, + }; + } + + if (configurationFileFormat.Version < 42) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 42."); + + configurationFileFormat.EnableMacroHLE = true; + } + + if (configurationFileFormat.Version < 43) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 43."); + + configurationFileFormat.UseHypervisor = true; + } + + if (configurationFileFormat.Version < 44) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 44."); + + configurationFileFormat.AntiAliasing = AntiAliasing.None; + configurationFileFormat.ScalingFilter = ScalingFilter.Bilinear; + configurationFileFormat.ScalingFilterLevel = 80; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 45) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 45."); + + configurationFileFormat.ShownFileTypes = new ShownFileTypes + { + NSP = true, + PFS0 = true, + XCI = true, + NCA = true, + NRO = true, + NSO = true, + }; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 46) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 46."); + + configurationFileFormat.MultiplayerLanInterfaceId = "0"; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 47) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 47."); + + configurationFileFormat.WindowStartup = new WindowStartup + { + WindowPositionX = 0, + WindowPositionY = 0, + WindowSizeHeight = 760, + WindowSizeWidth = 1280, + WindowMaximized = false, + }; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 48) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 48."); + + configurationFileFormat.EnableColorSpacePassthrough = false; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 49) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 49."); + + if (OperatingSystem.IsMacOS()) + { + AppDataManager.FixMacOSConfigurationFolders(); + } + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 50) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 50."); + + configurationFileFormat.EnableHardwareAcceleration = true; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 51) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 51."); + + configurationFileFormat.RememberWindowState = true; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 52) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 52."); + + configurationFileFormat.AutoloadDirs = []; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 53) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 53."); + + configurationFileFormat.EnableLowPowerPtc = false; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 54) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 54."); + + configurationFileFormat.DramSize = MemoryConfiguration.MemoryConfiguration4GiB; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 55) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 55."); + + configurationFileFormat.IgnoreApplet = false; + + configurationFileUpdated = true; + } + + if (configurationFileFormat.Version < 56) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 56."); + + configurationFileFormat.ShowTitleBar = !OperatingSystem.IsWindows(); + + configurationFileUpdated = true; + } + + Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; + Graphics.ResScale.Value = configurationFileFormat.ResScale; + Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom; + Graphics.MaxAnisotropy.Value = configurationFileFormat.MaxAnisotropy; + Graphics.AspectRatio.Value = configurationFileFormat.AspectRatio; + Graphics.ShadersDumpPath.Value = configurationFileFormat.GraphicsShadersDumpPath; + Graphics.BackendThreading.Value = configurationFileFormat.BackendThreading; + Graphics.GraphicsBackend.Value = configurationFileFormat.GraphicsBackend; + Graphics.PreferredGpu.Value = configurationFileFormat.PreferredGpu; + Graphics.AntiAliasing.Value = configurationFileFormat.AntiAliasing; + Graphics.ScalingFilter.Value = configurationFileFormat.ScalingFilter; + Graphics.ScalingFilterLevel.Value = configurationFileFormat.ScalingFilterLevel; + Logger.EnableDebug.Value = configurationFileFormat.LoggingEnableDebug; + Logger.EnableStub.Value = configurationFileFormat.LoggingEnableStub; + Logger.EnableInfo.Value = configurationFileFormat.LoggingEnableInfo; + Logger.EnableWarn.Value = configurationFileFormat.LoggingEnableWarn; + Logger.EnableError.Value = configurationFileFormat.LoggingEnableError; + Logger.EnableTrace.Value = configurationFileFormat.LoggingEnableTrace; + Logger.EnableGuest.Value = configurationFileFormat.LoggingEnableGuest; + Logger.EnableFsAccessLog.Value = configurationFileFormat.LoggingEnableFsAccessLog; + Logger.FilteredClasses.Value = configurationFileFormat.LoggingFilteredClasses; + Logger.GraphicsDebugLevel.Value = configurationFileFormat.LoggingGraphicsDebugLevel; + System.Language.Value = configurationFileFormat.SystemLanguage; + System.Region.Value = configurationFileFormat.SystemRegion; + System.TimeZone.Value = configurationFileFormat.SystemTimeZone; + System.SystemTimeOffset.Value = configurationFileFormat.SystemTimeOffset; + System.EnableDockedMode.Value = configurationFileFormat.DockedMode; + EnableDiscordIntegration.Value = configurationFileFormat.EnableDiscordIntegration; + CheckUpdatesOnStart.Value = configurationFileFormat.CheckUpdatesOnStart; + ShowConfirmExit.Value = configurationFileFormat.ShowConfirmExit; + IgnoreApplet.Value = configurationFileFormat.IgnoreApplet; + RememberWindowState.Value = configurationFileFormat.RememberWindowState; + ShowTitleBar.Value = configurationFileFormat.ShowTitleBar; + EnableHardwareAcceleration.Value = configurationFileFormat.EnableHardwareAcceleration; + HideCursor.Value = configurationFileFormat.HideCursor; + Graphics.EnableVsync.Value = configurationFileFormat.EnableVsync; + Graphics.EnableShaderCache.Value = configurationFileFormat.EnableShaderCache; + Graphics.EnableTextureRecompression.Value = configurationFileFormat.EnableTextureRecompression; + Graphics.EnableMacroHLE.Value = configurationFileFormat.EnableMacroHLE; + Graphics.EnableColorSpacePassthrough.Value = configurationFileFormat.EnableColorSpacePassthrough; + System.EnablePtc.Value = configurationFileFormat.EnablePtc; + System.EnableLowPowerPtc.Value = configurationFileFormat.EnableLowPowerPtc; + System.EnableInternetAccess.Value = configurationFileFormat.EnableInternetAccess; + System.EnableFsIntegrityChecks.Value = configurationFileFormat.EnableFsIntegrityChecks; + System.FsGlobalAccessLogMode.Value = configurationFileFormat.FsGlobalAccessLogMode; + System.AudioBackend.Value = configurationFileFormat.AudioBackend; + System.AudioVolume.Value = configurationFileFormat.AudioVolume; + System.MemoryManagerMode.Value = configurationFileFormat.MemoryManagerMode; + System.DramSize.Value = configurationFileFormat.DramSize; + System.IgnoreMissingServices.Value = configurationFileFormat.IgnoreMissingServices; + System.UseHypervisor.Value = configurationFileFormat.UseHypervisor; + UI.GuiColumns.FavColumn.Value = configurationFileFormat.GuiColumns.FavColumn; + UI.GuiColumns.IconColumn.Value = configurationFileFormat.GuiColumns.IconColumn; + UI.GuiColumns.AppColumn.Value = configurationFileFormat.GuiColumns.AppColumn; + UI.GuiColumns.DevColumn.Value = configurationFileFormat.GuiColumns.DevColumn; + UI.GuiColumns.VersionColumn.Value = configurationFileFormat.GuiColumns.VersionColumn; + UI.GuiColumns.TimePlayedColumn.Value = configurationFileFormat.GuiColumns.TimePlayedColumn; + UI.GuiColumns.LastPlayedColumn.Value = configurationFileFormat.GuiColumns.LastPlayedColumn; + UI.GuiColumns.FileExtColumn.Value = configurationFileFormat.GuiColumns.FileExtColumn; + UI.GuiColumns.FileSizeColumn.Value = configurationFileFormat.GuiColumns.FileSizeColumn; + UI.GuiColumns.PathColumn.Value = configurationFileFormat.GuiColumns.PathColumn; + UI.ColumnSort.SortColumnId.Value = configurationFileFormat.ColumnSort.SortColumnId; + UI.ColumnSort.SortAscending.Value = configurationFileFormat.ColumnSort.SortAscending; + UI.GameDirs.Value = configurationFileFormat.GameDirs; + UI.AutoloadDirs.Value = configurationFileFormat.AutoloadDirs ?? []; + UI.ShownFileTypes.NSP.Value = configurationFileFormat.ShownFileTypes.NSP; + UI.ShownFileTypes.PFS0.Value = configurationFileFormat.ShownFileTypes.PFS0; + UI.ShownFileTypes.XCI.Value = configurationFileFormat.ShownFileTypes.XCI; + UI.ShownFileTypes.NCA.Value = configurationFileFormat.ShownFileTypes.NCA; + UI.ShownFileTypes.NRO.Value = configurationFileFormat.ShownFileTypes.NRO; + UI.ShownFileTypes.NSO.Value = configurationFileFormat.ShownFileTypes.NSO; + UI.LanguageCode.Value = configurationFileFormat.LanguageCode; + UI.BaseStyle.Value = configurationFileFormat.BaseStyle; + UI.GameListViewMode.Value = configurationFileFormat.GameListViewMode; + UI.ShowNames.Value = configurationFileFormat.ShowNames; + UI.IsAscendingOrder.Value = configurationFileFormat.IsAscendingOrder; + UI.GridSize.Value = configurationFileFormat.GridSize; + UI.ApplicationSort.Value = configurationFileFormat.ApplicationSort; + UI.StartFullscreen.Value = configurationFileFormat.StartFullscreen; + UI.ShowConsole.Value = configurationFileFormat.ShowConsole; + UI.WindowStartup.WindowSizeWidth.Value = configurationFileFormat.WindowStartup.WindowSizeWidth; + UI.WindowStartup.WindowSizeHeight.Value = configurationFileFormat.WindowStartup.WindowSizeHeight; + UI.WindowStartup.WindowPositionX.Value = configurationFileFormat.WindowStartup.WindowPositionX; + UI.WindowStartup.WindowPositionY.Value = configurationFileFormat.WindowStartup.WindowPositionY; + UI.WindowStartup.WindowMaximized.Value = configurationFileFormat.WindowStartup.WindowMaximized; + Hid.EnableKeyboard.Value = configurationFileFormat.EnableKeyboard; + Hid.EnableMouse.Value = configurationFileFormat.EnableMouse; + Hid.Hotkeys.Value = configurationFileFormat.Hotkeys; + Hid.InputConfig.Value = configurationFileFormat.InputConfig ?? []; + + Multiplayer.LanInterfaceId.Value = configurationFileFormat.MultiplayerLanInterfaceId; + Multiplayer.Mode.Value = configurationFileFormat.MultiplayerMode; + + if (configurationFileUpdated) + { + ToFileFormat().SaveConfig(configurationFilePath); + + Ryujinx.Common.Logging.Logger.Notice.Print(LogClass.Application, $"Configuration file updated to version {ConfigurationFileFormat.CurrentVersion}"); + } + } + } +} diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs new file mode 100644 index 000000000..3b9ffb5d3 --- /dev/null +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs @@ -0,0 +1,674 @@ +using Ryujinx.Common; +using Ryujinx.Common.Configuration; +using Ryujinx.Common.Configuration.Hid; +using Ryujinx.Common.Configuration.Multiplayer; +using Ryujinx.Common.Logging; +using Ryujinx.HLE; +using Ryujinx.UI.Common.Configuration.System; +using Ryujinx.UI.Common.Helper; +using System.Collections.Generic; + +namespace Ryujinx.UI.Common.Configuration +{ + public partial class ConfigurationState + { + ///

+ /// UI configuration section + /// + public class UISection + { + public class Columns + { + public ReactiveObject FavColumn { get; private set; } + public ReactiveObject IconColumn { get; private set; } + public ReactiveObject AppColumn { get; private set; } + public ReactiveObject DevColumn { get; private set; } + public ReactiveObject VersionColumn { get; private set; } + public ReactiveObject TimePlayedColumn { get; private set; } + public ReactiveObject LastPlayedColumn { get; private set; } + public ReactiveObject FileExtColumn { get; private set; } + public ReactiveObject FileSizeColumn { get; private set; } + public ReactiveObject PathColumn { get; private set; } + + public Columns() + { + FavColumn = new ReactiveObject(); + IconColumn = new ReactiveObject(); + AppColumn = new ReactiveObject(); + DevColumn = new ReactiveObject(); + VersionColumn = new ReactiveObject(); + TimePlayedColumn = new ReactiveObject(); + LastPlayedColumn = new ReactiveObject(); + FileExtColumn = new ReactiveObject(); + FileSizeColumn = new ReactiveObject(); + PathColumn = new ReactiveObject(); + } + } + + public class ColumnSortSettings + { + public ReactiveObject SortColumnId { get; private set; } + public ReactiveObject SortAscending { get; private set; } + + public ColumnSortSettings() + { + SortColumnId = new ReactiveObject(); + SortAscending = new ReactiveObject(); + } + } + + /// + /// Used to toggle which file types are shown in the UI + /// + public class ShownFileTypeSettings + { + public ReactiveObject NSP { get; private set; } + public ReactiveObject PFS0 { get; private set; } + public ReactiveObject XCI { get; private set; } + public ReactiveObject NCA { get; private set; } + public ReactiveObject NRO { get; private set; } + public ReactiveObject NSO { get; private set; } + + public ShownFileTypeSettings() + { + NSP = new ReactiveObject(); + PFS0 = new ReactiveObject(); + XCI = new ReactiveObject(); + NCA = new ReactiveObject(); + NRO = new ReactiveObject(); + NSO = new ReactiveObject(); + } + } + + // + /// Determines main window start-up position, size and state + /// + public class WindowStartupSettings + { + public ReactiveObject WindowSizeWidth { get; private set; } + public ReactiveObject WindowSizeHeight { get; private set; } + public ReactiveObject WindowPositionX { get; private set; } + public ReactiveObject WindowPositionY { get; private set; } + public ReactiveObject WindowMaximized { get; private set; } + + public WindowStartupSettings() + { + WindowSizeWidth = new ReactiveObject(); + WindowSizeHeight = new ReactiveObject(); + WindowPositionX = new ReactiveObject(); + WindowPositionY = new ReactiveObject(); + WindowMaximized = new ReactiveObject(); + } + } + + /// + /// Used to toggle columns in the GUI + /// + public Columns GuiColumns { get; private set; } + + /// + /// Used to configure column sort settings in the GUI + /// + public ColumnSortSettings ColumnSort { get; private set; } + + /// + /// A list of directories containing games to be used to load games into the games list + /// + public ReactiveObject> GameDirs { get; private set; } + + /// + /// A list of directories containing DLC/updates the user wants to autoload during library refreshes + /// + public ReactiveObject> AutoloadDirs { get; private set; } + + /// + /// A list of file types to be hidden in the games List + /// + public ShownFileTypeSettings ShownFileTypes { get; private set; } + + /// + /// Determines main window start-up position, size and state + /// + public WindowStartupSettings WindowStartup { get; private set; } + + /// + /// Language Code for the UI + /// + public ReactiveObject LanguageCode { get; private set; } + + /// + /// Selects the base style + /// + public ReactiveObject BaseStyle { get; private set; } + + /// + /// Start games in fullscreen mode + /// + public ReactiveObject StartFullscreen { get; private set; } + + /// + /// Hide / Show Console Window + /// + public ReactiveObject ShowConsole { get; private set; } + + /// + /// View Mode of the Game list + /// + public ReactiveObject GameListViewMode { get; private set; } + + /// + /// Show application name in Grid Mode + /// + public ReactiveObject ShowNames { get; private set; } + + /// + /// Sets App Icon Size in Grid Mode + /// + public ReactiveObject GridSize { get; private set; } + + /// + /// Sorts Apps in Grid Mode + /// + public ReactiveObject ApplicationSort { get; private set; } + + /// + /// Sets if Grid is ordered in Ascending Order + /// + public ReactiveObject IsAscendingOrder { get; private set; } + + public UISection() + { + GuiColumns = new Columns(); + ColumnSort = new ColumnSortSettings(); + GameDirs = new ReactiveObject>(); + AutoloadDirs = new ReactiveObject>(); + ShownFileTypes = new ShownFileTypeSettings(); + WindowStartup = new WindowStartupSettings(); + BaseStyle = new ReactiveObject(); + StartFullscreen = new ReactiveObject(); + GameListViewMode = new ReactiveObject(); + ShowNames = new ReactiveObject(); + GridSize = new ReactiveObject(); + ApplicationSort = new ReactiveObject(); + IsAscendingOrder = new ReactiveObject(); + LanguageCode = new ReactiveObject(); + ShowConsole = new ReactiveObject(); + ShowConsole.Event += static (_, e) => ConsoleHelper.SetConsoleWindowState(e.NewValue); + } + } + + /// + /// Logger configuration section + /// + public class LoggerSection + { + /// + /// Enables printing debug log messages + /// + public ReactiveObject EnableDebug { get; private set; } + + /// + /// Enables printing stub log messages + /// + public ReactiveObject EnableStub { get; private set; } + + /// + /// Enables printing info log messages + /// + public ReactiveObject EnableInfo { get; private set; } + + /// + /// Enables printing warning log messages + /// + public ReactiveObject EnableWarn { get; private set; } + + /// + /// Enables printing error log messages + /// + public ReactiveObject EnableError { get; private set; } + + /// + /// Enables printing trace log messages + /// + public ReactiveObject EnableTrace { get; private set; } + + /// + /// Enables printing guest log messages + /// + public ReactiveObject EnableGuest { get; private set; } + + /// + /// Enables printing FS access log messages + /// + public ReactiveObject EnableFsAccessLog { get; private set; } + + /// + /// Controls which log messages are written to the log targets + /// + public ReactiveObject FilteredClasses { get; private set; } + + /// + /// Enables or disables logging to a file on disk + /// + public ReactiveObject EnableFileLog { get; private set; } + + /// + /// Controls which OpenGL log messages are recorded in the log + /// + public ReactiveObject GraphicsDebugLevel { get; private set; } + + public LoggerSection() + { + EnableDebug = new ReactiveObject(); + EnableDebug.LogChangesToValue(nameof(EnableDebug)); + EnableStub = new ReactiveObject(); + EnableInfo = new ReactiveObject(); + EnableWarn = new ReactiveObject(); + EnableError = new ReactiveObject(); + EnableTrace = new ReactiveObject(); + EnableGuest = new ReactiveObject(); + EnableFsAccessLog = new ReactiveObject(); + FilteredClasses = new ReactiveObject(); + EnableFileLog = new ReactiveObject(); + EnableFileLog.LogChangesToValue(nameof(EnableFileLog)); + GraphicsDebugLevel = new ReactiveObject(); + } + } + + /// + /// System configuration section + /// + public class SystemSection + { + /// + /// Change System Language + /// + public ReactiveObject Language { get; private set; } + + /// + /// Change System Region + /// + public ReactiveObject Region { get; private set; } + + /// + /// Change System TimeZone + /// + public ReactiveObject TimeZone { get; private set; } + + /// + /// System Time Offset in Seconds + /// + public ReactiveObject SystemTimeOffset { get; private set; } + + /// + /// Enables or disables Docked Mode + /// + public ReactiveObject EnableDockedMode { get; private set; } + + /// + /// Enables or disables persistent profiled translation cache + /// + public ReactiveObject EnablePtc { get; private set; } + + /// + /// Enables or disables low-power persistent profiled translation cache loading + /// + public ReactiveObject EnableLowPowerPtc { get; private set; } + + /// + /// Enables or disables guest Internet access + /// + public ReactiveObject EnableInternetAccess { get; private set; } + + /// + /// Enables integrity checks on Game content files + /// + public ReactiveObject EnableFsIntegrityChecks { get; private set; } + + /// + /// Enables FS access log output to the console. Possible modes are 0-3 + /// + public ReactiveObject FsGlobalAccessLogMode { get; private set; } + + /// + /// The selected audio backend + /// + public ReactiveObject AudioBackend { get; private set; } + + /// + /// The audio backend volume + /// + public ReactiveObject AudioVolume { get; private set; } + + /// + /// The selected memory manager mode + /// + public ReactiveObject MemoryManagerMode { get; private set; } + + /// + /// Defines the amount of RAM available on the emulated system, and how it is distributed + /// + public ReactiveObject DramSize { get; private set; } + + /// + /// Enable or disable ignoring missing services + /// + public ReactiveObject IgnoreMissingServices { get; private set; } + + /// + /// Uses Hypervisor over JIT if available + /// + public ReactiveObject UseHypervisor { get; private set; } + + public SystemSection() + { + Language = new ReactiveObject(); + Language.LogChangesToValue(nameof(Language)); + Region = new ReactiveObject(); + Region.LogChangesToValue(nameof(Region)); + TimeZone = new ReactiveObject(); + TimeZone.LogChangesToValue(nameof(TimeZone)); + SystemTimeOffset = new ReactiveObject(); + SystemTimeOffset.LogChangesToValue(nameof(SystemTimeOffset)); + EnableDockedMode = new ReactiveObject(); + EnableDockedMode.LogChangesToValue(nameof(EnableDockedMode)); + EnablePtc = new ReactiveObject(); + EnablePtc.LogChangesToValue(nameof(EnablePtc)); + EnableLowPowerPtc = new ReactiveObject(); + EnableLowPowerPtc.LogChangesToValue(nameof(EnableLowPowerPtc)); + EnableInternetAccess = new ReactiveObject(); + EnableInternetAccess.LogChangesToValue(nameof(EnableInternetAccess)); + EnableFsIntegrityChecks = new ReactiveObject(); + EnableFsIntegrityChecks.LogChangesToValue(nameof(EnableFsIntegrityChecks)); + FsGlobalAccessLogMode = new ReactiveObject(); + FsGlobalAccessLogMode.LogChangesToValue(nameof(FsGlobalAccessLogMode)); + AudioBackend = new ReactiveObject(); + AudioBackend.LogChangesToValue(nameof(AudioBackend)); + MemoryManagerMode = new ReactiveObject(); + MemoryManagerMode.LogChangesToValue(nameof(MemoryManagerMode)); + DramSize = new ReactiveObject(); + DramSize.LogChangesToValue(nameof(DramSize)); + IgnoreMissingServices = new ReactiveObject(); + IgnoreMissingServices.LogChangesToValue(nameof(IgnoreMissingServices)); + AudioVolume = new ReactiveObject(); + AudioVolume.LogChangesToValue(nameof(AudioVolume)); + UseHypervisor = new ReactiveObject(); + UseHypervisor.LogChangesToValue(nameof(UseHypervisor)); + } + } + + /// + /// Hid configuration section + /// + public class HidSection + { + /// + /// Enable or disable keyboard support (Independent from controllers binding) + /// + public ReactiveObject EnableKeyboard { get; private set; } + + /// + /// Enable or disable mouse support (Independent from controllers binding) + /// + public ReactiveObject EnableMouse { get; private set; } + + /// + /// Hotkey Keyboard Bindings + /// + public ReactiveObject Hotkeys { get; private set; } + + /// + /// Input device configuration. + /// NOTE: This ReactiveObject won't issue an event when the List has elements added or removed. + /// TODO: Implement a ReactiveList class. + /// + public ReactiveObject> InputConfig { get; private set; } + + public HidSection() + { + EnableKeyboard = new ReactiveObject(); + EnableMouse = new ReactiveObject(); + Hotkeys = new ReactiveObject(); + InputConfig = new ReactiveObject>(); + } + } + + /// + /// Graphics configuration section + /// + public class GraphicsSection + { + /// + /// Whether or not backend threading is enabled. The "Auto" setting will determine whether threading should be enabled at runtime. + /// + public ReactiveObject BackendThreading { get; private set; } + + /// + /// Max Anisotropy. Values range from 0 - 16. Set to -1 to let the game decide. + /// + public ReactiveObject MaxAnisotropy { get; private set; } + + /// + /// Aspect Ratio applied to the renderer window. + /// + public ReactiveObject AspectRatio { get; private set; } + + /// + /// Resolution Scale. An integer scale applied to applicable render targets. Values 1-4, or -1 to use a custom floating point scale instead. + /// + public ReactiveObject ResScale { get; private set; } + + /// + /// Custom Resolution Scale. A custom floating point scale applied to applicable render targets. Only active when Resolution Scale is -1. + /// + public ReactiveObject ResScaleCustom { get; private set; } + + /// + /// Dumps shaders in this local directory + /// + public ReactiveObject ShadersDumpPath { get; private set; } + + /// + /// Enables or disables Vertical Sync + /// + public ReactiveObject EnableVsync { get; private set; } + + /// + /// Enables or disables Shader cache + /// + public ReactiveObject EnableShaderCache { get; private set; } + + /// + /// Enables or disables texture recompression + /// + public ReactiveObject EnableTextureRecompression { get; private set; } + + /// + /// Enables or disables Macro high-level emulation + /// + public ReactiveObject EnableMacroHLE { get; private set; } + + /// + /// Enables or disables color space passthrough, if available. + /// + public ReactiveObject EnableColorSpacePassthrough { get; private set; } + + /// + /// Graphics backend + /// + public ReactiveObject GraphicsBackend { get; private set; } + + /// + /// Applies anti-aliasing to the renderer. + /// + public ReactiveObject AntiAliasing { get; private set; } + + /// + /// Sets the framebuffer upscaling type. + /// + public ReactiveObject ScalingFilter { get; private set; } + + /// + /// Sets the framebuffer upscaling level. + /// + public ReactiveObject ScalingFilterLevel { get; private set; } + + /// + /// Preferred GPU + /// + public ReactiveObject PreferredGpu { get; private set; } + + public GraphicsSection() + { + BackendThreading = new ReactiveObject(); + BackendThreading.LogChangesToValue(nameof(BackendThreading)); + ResScale = new ReactiveObject(); + ResScale.LogChangesToValue(nameof(ResScale)); + ResScaleCustom = new ReactiveObject(); + ResScaleCustom.LogChangesToValue(nameof(ResScaleCustom)); + MaxAnisotropy = new ReactiveObject(); + MaxAnisotropy.LogChangesToValue(nameof(MaxAnisotropy)); + AspectRatio = new ReactiveObject(); + AspectRatio.LogChangesToValue(nameof(AspectRatio)); + ShadersDumpPath = new ReactiveObject(); + EnableVsync = new ReactiveObject(); + EnableVsync.LogChangesToValue(nameof(EnableVsync)); + EnableShaderCache = new ReactiveObject(); + EnableShaderCache.LogChangesToValue(nameof(EnableShaderCache)); + EnableTextureRecompression = new ReactiveObject(); + EnableTextureRecompression.LogChangesToValue(nameof(EnableTextureRecompression)); + GraphicsBackend = new ReactiveObject(); + GraphicsBackend.LogChangesToValue(nameof(GraphicsBackend)); + PreferredGpu = new ReactiveObject(); + PreferredGpu.LogChangesToValue(nameof(PreferredGpu)); + EnableMacroHLE = new ReactiveObject(); + EnableMacroHLE.LogChangesToValue(nameof(EnableMacroHLE)); + EnableColorSpacePassthrough = new ReactiveObject(); + EnableColorSpacePassthrough.LogChangesToValue(nameof(EnableColorSpacePassthrough)); + AntiAliasing = new ReactiveObject(); + AntiAliasing.LogChangesToValue(nameof(AntiAliasing)); + ScalingFilter = new ReactiveObject(); + ScalingFilter.LogChangesToValue(nameof(ScalingFilter)); + ScalingFilterLevel = new ReactiveObject(); + ScalingFilterLevel.LogChangesToValue(nameof(ScalingFilterLevel)); + } + } + + /// + /// Multiplayer configuration section + /// + public class MultiplayerSection + { + /// + /// GUID for the network interface used by LAN (or 0 for default) + /// + public ReactiveObject LanInterfaceId { get; private set; } + + /// + /// Multiplayer Mode + /// + public ReactiveObject Mode { get; private set; } + + public MultiplayerSection() + { + LanInterfaceId = new ReactiveObject(); + Mode = new ReactiveObject(); + Mode.LogChangesToValue(nameof(MultiplayerMode)); + } + } + + /// + /// The default configuration instance + /// + public static ConfigurationState Instance { get; private set; } + + /// + /// The UI section + /// + public UISection UI { get; private set; } + + /// + /// The Logger section + /// + public LoggerSection Logger { get; private set; } + + /// + /// The System section + /// + public SystemSection System { get; private set; } + + /// + /// The Graphics section + /// + public GraphicsSection Graphics { get; private set; } + + /// + /// The Hid section + /// + public HidSection Hid { get; private set; } + + /// + /// The Multiplayer section + /// + public MultiplayerSection Multiplayer { get; private set; } + + /// + /// Enables or disables Discord Rich Presence + /// + public ReactiveObject EnableDiscordIntegration { get; private set; } + + /// + /// Checks for updates when Ryujinx starts when enabled + /// + public ReactiveObject CheckUpdatesOnStart { get; private set; } + + /// + /// Show "Confirm Exit" Dialog + /// + public ReactiveObject ShowConfirmExit { get; private set; } + + /// + /// Ignore Applet + /// + public ReactiveObject IgnoreApplet { get; private set; } + + /// + /// Enables or disables save window size, position and state on close. + /// + public ReactiveObject RememberWindowState { get; private set; } + + /// + /// Enables or disables the redesigned title bar + /// + public ReactiveObject ShowTitleBar { get; private set; } + + /// + /// Enables hardware-accelerated rendering for Avalonia + /// + public ReactiveObject EnableHardwareAcceleration { get; private set; } + + /// + /// Hide Cursor on Idle + /// + public ReactiveObject HideCursor { get; private set; } + + private ConfigurationState() + { + UI = new UISection(); + Logger = new LoggerSection(); + System = new SystemSection(); + Graphics = new GraphicsSection(); + Hid = new HidSection(); + Multiplayer = new MultiplayerSection(); + EnableDiscordIntegration = new ReactiveObject(); + CheckUpdatesOnStart = new ReactiveObject(); + ShowConfirmExit = new ReactiveObject(); + IgnoreApplet = new ReactiveObject(); + IgnoreApplet.LogChangesToValue(nameof(IgnoreApplet)); + RememberWindowState = new ReactiveObject(); + ShowTitleBar = new ReactiveObject(); + EnableHardwareAcceleration = new ReactiveObject(); + HideCursor = new ReactiveObject(); + } + } +} diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs index c0abb372a..5023e48c0 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs @@ -1,5 +1,4 @@ using ARMeilleure; -using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; @@ -10,673 +9,25 @@ using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.UI.Common.Configuration.System; using Ryujinx.UI.Common.Configuration.UI; -using Ryujinx.UI.Common.Helper; using System; using System.Collections.Generic; namespace Ryujinx.UI.Common.Configuration { - public class ConfigurationState + public partial class ConfigurationState { - /// - /// UI configuration section - /// - public class UISection + public static void Initialize() { - public class Columns + if (Instance != null) { - public ReactiveObject FavColumn { get; private set; } - public ReactiveObject IconColumn { get; private set; } - public ReactiveObject AppColumn { get; private set; } - public ReactiveObject DevColumn { get; private set; } - public ReactiveObject VersionColumn { get; private set; } - public ReactiveObject TimePlayedColumn { get; private set; } - public ReactiveObject LastPlayedColumn { get; private set; } - public ReactiveObject FileExtColumn { get; private set; } - public ReactiveObject FileSizeColumn { get; private set; } - public ReactiveObject PathColumn { get; private set; } - - public Columns() - { - FavColumn = new ReactiveObject(); - IconColumn = new ReactiveObject(); - AppColumn = new ReactiveObject(); - DevColumn = new ReactiveObject(); - VersionColumn = new ReactiveObject(); - TimePlayedColumn = new ReactiveObject(); - LastPlayedColumn = new ReactiveObject(); - FileExtColumn = new ReactiveObject(); - FileSizeColumn = new ReactiveObject(); - PathColumn = new ReactiveObject(); - } + throw new InvalidOperationException("Configuration is already initialized"); } - public class ColumnSortSettings - { - public ReactiveObject SortColumnId { get; private set; } - public ReactiveObject SortAscending { get; private set; } + Instance = new ConfigurationState(); - public ColumnSortSettings() - { - SortColumnId = new ReactiveObject(); - SortAscending = new ReactiveObject(); - } - } - - /// - /// Used to toggle which file types are shown in the UI - /// - public class ShownFileTypeSettings - { - public ReactiveObject NSP { get; private set; } - public ReactiveObject PFS0 { get; private set; } - public ReactiveObject XCI { get; private set; } - public ReactiveObject NCA { get; private set; } - public ReactiveObject NRO { get; private set; } - public ReactiveObject NSO { get; private set; } - - public ShownFileTypeSettings() - { - NSP = new ReactiveObject(); - PFS0 = new ReactiveObject(); - XCI = new ReactiveObject(); - NCA = new ReactiveObject(); - NRO = new ReactiveObject(); - NSO = new ReactiveObject(); - } - } - - // - /// Determines main window start-up position, size and state - /// - public class WindowStartupSettings - { - public ReactiveObject WindowSizeWidth { get; private set; } - public ReactiveObject WindowSizeHeight { get; private set; } - public ReactiveObject WindowPositionX { get; private set; } - public ReactiveObject WindowPositionY { get; private set; } - public ReactiveObject WindowMaximized { get; private set; } - - public WindowStartupSettings() - { - WindowSizeWidth = new ReactiveObject(); - WindowSizeHeight = new ReactiveObject(); - WindowPositionX = new ReactiveObject(); - WindowPositionY = new ReactiveObject(); - WindowMaximized = new ReactiveObject(); - } - } - - /// - /// Used to toggle columns in the GUI - /// - public Columns GuiColumns { get; private set; } - - /// - /// Used to configure column sort settings in the GUI - /// - public ColumnSortSettings ColumnSort { get; private set; } - - /// - /// A list of directories containing games to be used to load games into the games list - /// - public ReactiveObject> GameDirs { get; private set; } - - /// - /// A list of directories containing DLC/updates the user wants to autoload during library refreshes - /// - public ReactiveObject> AutoloadDirs { get; private set; } - - /// - /// A list of file types to be hidden in the games List - /// - public ShownFileTypeSettings ShownFileTypes { get; private set; } - - /// - /// Determines main window start-up position, size and state - /// - public WindowStartupSettings WindowStartup { get; private set; } - - /// - /// Language Code for the UI - /// - public ReactiveObject LanguageCode { get; private set; } - - /// - /// Selects the base style - /// - public ReactiveObject BaseStyle { get; private set; } - - /// - /// Start games in fullscreen mode - /// - public ReactiveObject StartFullscreen { get; private set; } - - /// - /// Hide / Show Console Window - /// - public ReactiveObject ShowConsole { get; private set; } - - /// - /// View Mode of the Game list - /// - public ReactiveObject GameListViewMode { get; private set; } - - /// - /// Show application name in Grid Mode - /// - public ReactiveObject ShowNames { get; private set; } - - /// - /// Sets App Icon Size in Grid Mode - /// - public ReactiveObject GridSize { get; private set; } - - /// - /// Sorts Apps in Grid Mode - /// - public ReactiveObject ApplicationSort { get; private set; } - - /// - /// Sets if Grid is ordered in Ascending Order - /// - public ReactiveObject IsAscendingOrder { get; private set; } - - public UISection() - { - GuiColumns = new Columns(); - ColumnSort = new ColumnSortSettings(); - GameDirs = new ReactiveObject>(); - AutoloadDirs = new ReactiveObject>(); - ShownFileTypes = new ShownFileTypeSettings(); - WindowStartup = new WindowStartupSettings(); - BaseStyle = new ReactiveObject(); - StartFullscreen = new ReactiveObject(); - GameListViewMode = new ReactiveObject(); - ShowNames = new ReactiveObject(); - GridSize = new ReactiveObject(); - ApplicationSort = new ReactiveObject(); - IsAscendingOrder = new ReactiveObject(); - LanguageCode = new ReactiveObject(); - ShowConsole = new ReactiveObject(); - ShowConsole.Event += static (_, e) => ConsoleHelper.SetConsoleWindowState(e.NewValue); - } + Instance.System.EnableLowPowerPtc.Event += (_, evnt) => Optimizations.LowPower = evnt.NewValue; } - - /// - /// Logger configuration section - /// - public class LoggerSection - { - /// - /// Enables printing debug log messages - /// - public ReactiveObject EnableDebug { get; private set; } - - /// - /// Enables printing stub log messages - /// - public ReactiveObject EnableStub { get; private set; } - - /// - /// Enables printing info log messages - /// - public ReactiveObject EnableInfo { get; private set; } - - /// - /// Enables printing warning log messages - /// - public ReactiveObject EnableWarn { get; private set; } - - /// - /// Enables printing error log messages - /// - public ReactiveObject EnableError { get; private set; } - - /// - /// Enables printing trace log messages - /// - public ReactiveObject EnableTrace { get; private set; } - - /// - /// Enables printing guest log messages - /// - public ReactiveObject EnableGuest { get; private set; } - - /// - /// Enables printing FS access log messages - /// - public ReactiveObject EnableFsAccessLog { get; private set; } - - /// - /// Controls which log messages are written to the log targets - /// - public ReactiveObject FilteredClasses { get; private set; } - - /// - /// Enables or disables logging to a file on disk - /// - public ReactiveObject EnableFileLog { get; private set; } - - /// - /// Controls which OpenGL log messages are recorded in the log - /// - public ReactiveObject GraphicsDebugLevel { get; private set; } - - public LoggerSection() - { - EnableDebug = new ReactiveObject(); - EnableDebug.LogChangesToValue(nameof(EnableDebug)); - EnableStub = new ReactiveObject(); - EnableInfo = new ReactiveObject(); - EnableWarn = new ReactiveObject(); - EnableError = new ReactiveObject(); - EnableTrace = new ReactiveObject(); - EnableGuest = new ReactiveObject(); - EnableFsAccessLog = new ReactiveObject(); - FilteredClasses = new ReactiveObject(); - EnableFileLog = new ReactiveObject(); - EnableFileLog.LogChangesToValue(nameof(EnableFileLog)); - GraphicsDebugLevel = new ReactiveObject(); - } - } - - /// - /// System configuration section - /// - public class SystemSection - { - /// - /// Change System Language - /// - public ReactiveObject Language { get; private set; } - - /// - /// Change System Region - /// - public ReactiveObject Region { get; private set; } - - /// - /// Change System TimeZone - /// - public ReactiveObject TimeZone { get; private set; } - - /// - /// System Time Offset in Seconds - /// - public ReactiveObject SystemTimeOffset { get; private set; } - - /// - /// Enables or disables Docked Mode - /// - public ReactiveObject EnableDockedMode { get; private set; } - - /// - /// Enables or disables persistent profiled translation cache - /// - public ReactiveObject EnablePtc { get; private set; } - - /// - /// Enables or disables low-power persistent profiled translation cache loading - /// - public ReactiveObject EnableLowPowerPtc { get; private set; } - - /// - /// Enables or disables guest Internet access - /// - public ReactiveObject EnableInternetAccess { get; private set; } - - /// - /// Enables integrity checks on Game content files - /// - public ReactiveObject EnableFsIntegrityChecks { get; private set; } - - /// - /// Enables FS access log output to the console. Possible modes are 0-3 - /// - public ReactiveObject FsGlobalAccessLogMode { get; private set; } - - /// - /// The selected audio backend - /// - public ReactiveObject AudioBackend { get; private set; } - - /// - /// The audio backend volume - /// - public ReactiveObject AudioVolume { get; private set; } - - /// - /// The selected memory manager mode - /// - public ReactiveObject MemoryManagerMode { get; private set; } - - /// - /// Defines the amount of RAM available on the emulated system, and how it is distributed - /// - public ReactiveObject DramSize { get; private set; } - - /// - /// Enable or disable ignoring missing services - /// - public ReactiveObject IgnoreMissingServices { get; private set; } - - /// - /// Uses Hypervisor over JIT if available - /// - public ReactiveObject UseHypervisor { get; private set; } - - public SystemSection() - { - Language = new ReactiveObject(); - Language.LogChangesToValue(nameof(Language)); - Region = new ReactiveObject(); - Region.LogChangesToValue(nameof(Region)); - TimeZone = new ReactiveObject(); - TimeZone.LogChangesToValue(nameof(TimeZone)); - SystemTimeOffset = new ReactiveObject(); - SystemTimeOffset.LogChangesToValue(nameof(SystemTimeOffset)); - EnableDockedMode = new ReactiveObject(); - EnableDockedMode.LogChangesToValue(nameof(EnableDockedMode)); - EnablePtc = new ReactiveObject(); - EnablePtc.LogChangesToValue(nameof(EnablePtc)); - EnableLowPowerPtc = new ReactiveObject(); - EnableLowPowerPtc.LogChangesToValue(nameof(EnableLowPowerPtc)); - EnableInternetAccess = new ReactiveObject(); - EnableInternetAccess.LogChangesToValue(nameof(EnableInternetAccess)); - EnableFsIntegrityChecks = new ReactiveObject(); - EnableFsIntegrityChecks.LogChangesToValue(nameof(EnableFsIntegrityChecks)); - FsGlobalAccessLogMode = new ReactiveObject(); - FsGlobalAccessLogMode.LogChangesToValue(nameof(FsGlobalAccessLogMode)); - AudioBackend = new ReactiveObject(); - AudioBackend.LogChangesToValue(nameof(AudioBackend)); - MemoryManagerMode = new ReactiveObject(); - MemoryManagerMode.LogChangesToValue(nameof(MemoryManagerMode)); - DramSize = new ReactiveObject(); - DramSize.LogChangesToValue(nameof(DramSize)); - IgnoreMissingServices = new ReactiveObject(); - IgnoreMissingServices.LogChangesToValue(nameof(IgnoreMissingServices)); - AudioVolume = new ReactiveObject(); - AudioVolume.LogChangesToValue(nameof(AudioVolume)); - UseHypervisor = new ReactiveObject(); - UseHypervisor.LogChangesToValue(nameof(UseHypervisor)); - } - } - - /// - /// Hid configuration section - /// - public class HidSection - { - /// - /// Enable or disable keyboard support (Independent from controllers binding) - /// - public ReactiveObject EnableKeyboard { get; private set; } - - /// - /// Enable or disable mouse support (Independent from controllers binding) - /// - public ReactiveObject EnableMouse { get; private set; } - - /// - /// Hotkey Keyboard Bindings - /// - public ReactiveObject Hotkeys { get; private set; } - - /// - /// Input device configuration. - /// NOTE: This ReactiveObject won't issue an event when the List has elements added or removed. - /// TODO: Implement a ReactiveList class. - /// - public ReactiveObject> InputConfig { get; private set; } - - public HidSection() - { - EnableKeyboard = new ReactiveObject(); - EnableMouse = new ReactiveObject(); - Hotkeys = new ReactiveObject(); - InputConfig = new ReactiveObject>(); - } - } - - /// - /// Graphics configuration section - /// - public class GraphicsSection - { - /// - /// Whether or not backend threading is enabled. The "Auto" setting will determine whether threading should be enabled at runtime. - /// - public ReactiveObject BackendThreading { get; private set; } - - /// - /// Max Anisotropy. Values range from 0 - 16. Set to -1 to let the game decide. - /// - public ReactiveObject MaxAnisotropy { get; private set; } - - /// - /// Aspect Ratio applied to the renderer window. - /// - public ReactiveObject AspectRatio { get; private set; } - - /// - /// Resolution Scale. An integer scale applied to applicable render targets. Values 1-4, or -1 to use a custom floating point scale instead. - /// - public ReactiveObject ResScale { get; private set; } - - /// - /// Custom Resolution Scale. A custom floating point scale applied to applicable render targets. Only active when Resolution Scale is -1. - /// - public ReactiveObject ResScaleCustom { get; private set; } - - /// - /// Dumps shaders in this local directory - /// - public ReactiveObject ShadersDumpPath { get; private set; } - - /// - /// Enables or disables Vertical Sync - /// - public ReactiveObject EnableVsync { get; private set; } - - /// - /// Enables or disables Shader cache - /// - public ReactiveObject EnableShaderCache { get; private set; } - - /// - /// Enables or disables texture recompression - /// - public ReactiveObject EnableTextureRecompression { get; private set; } - - /// - /// Enables or disables Macro high-level emulation - /// - public ReactiveObject EnableMacroHLE { get; private set; } - - /// - /// Enables or disables color space passthrough, if available. - /// - public ReactiveObject EnableColorSpacePassthrough { get; private set; } - - /// - /// Graphics backend - /// - public ReactiveObject GraphicsBackend { get; private set; } - - /// - /// Applies anti-aliasing to the renderer. - /// - public ReactiveObject AntiAliasing { get; private set; } - - /// - /// Sets the framebuffer upscaling type. - /// - public ReactiveObject ScalingFilter { get; private set; } - - /// - /// Sets the framebuffer upscaling level. - /// - public ReactiveObject ScalingFilterLevel { get; private set; } - - /// - /// Preferred GPU - /// - public ReactiveObject PreferredGpu { get; private set; } - - public GraphicsSection() - { - BackendThreading = new ReactiveObject(); - BackendThreading.LogChangesToValue(nameof(BackendThreading)); - ResScale = new ReactiveObject(); - ResScale.LogChangesToValue(nameof(ResScale)); - ResScaleCustom = new ReactiveObject(); - ResScaleCustom.LogChangesToValue(nameof(ResScaleCustom)); - MaxAnisotropy = new ReactiveObject(); - MaxAnisotropy.LogChangesToValue(nameof(MaxAnisotropy)); - AspectRatio = new ReactiveObject(); - AspectRatio.LogChangesToValue(nameof(AspectRatio)); - ShadersDumpPath = new ReactiveObject(); - EnableVsync = new ReactiveObject(); - EnableVsync.LogChangesToValue(nameof(EnableVsync)); - EnableShaderCache = new ReactiveObject(); - EnableShaderCache.LogChangesToValue(nameof(EnableShaderCache)); - EnableTextureRecompression = new ReactiveObject(); - EnableTextureRecompression.LogChangesToValue(nameof(EnableTextureRecompression)); - GraphicsBackend = new ReactiveObject(); - GraphicsBackend.LogChangesToValue(nameof(GraphicsBackend)); - PreferredGpu = new ReactiveObject(); - PreferredGpu.LogChangesToValue(nameof(PreferredGpu)); - EnableMacroHLE = new ReactiveObject(); - EnableMacroHLE.LogChangesToValue(nameof(EnableMacroHLE)); - EnableColorSpacePassthrough = new ReactiveObject(); - EnableColorSpacePassthrough.LogChangesToValue(nameof(EnableColorSpacePassthrough)); - AntiAliasing = new ReactiveObject(); - AntiAliasing.LogChangesToValue(nameof(AntiAliasing)); - ScalingFilter = new ReactiveObject(); - ScalingFilter.LogChangesToValue(nameof(ScalingFilter)); - ScalingFilterLevel = new ReactiveObject(); - ScalingFilterLevel.LogChangesToValue(nameof(ScalingFilterLevel)); - } - } - - /// - /// Multiplayer configuration section - /// - public class MultiplayerSection - { - /// - /// GUID for the network interface used by LAN (or 0 for default) - /// - public ReactiveObject LanInterfaceId { get; private set; } - - /// - /// Multiplayer Mode - /// - public ReactiveObject Mode { get; private set; } - - public MultiplayerSection() - { - LanInterfaceId = new ReactiveObject(); - Mode = new ReactiveObject(); - Mode.LogChangesToValue(nameof(MultiplayerMode)); - } - } - - /// - /// The default configuration instance - /// - public static ConfigurationState Instance { get; private set; } - - /// - /// The UI section - /// - public UISection UI { get; private set; } - - /// - /// The Logger section - /// - public LoggerSection Logger { get; private set; } - - /// - /// The System section - /// - public SystemSection System { get; private set; } - - /// - /// The Graphics section - /// - public GraphicsSection Graphics { get; private set; } - - /// - /// The Hid section - /// - public HidSection Hid { get; private set; } - - /// - /// The Multiplayer section - /// - public MultiplayerSection Multiplayer { get; private set; } - - /// - /// Enables or disables Discord Rich Presence - /// - public ReactiveObject EnableDiscordIntegration { get; private set; } - - /// - /// Checks for updates when Ryujinx starts when enabled - /// - public ReactiveObject CheckUpdatesOnStart { get; private set; } - - /// - /// Show "Confirm Exit" Dialog - /// - public ReactiveObject ShowConfirmExit { get; private set; } - - /// - /// Ignore Applet - /// - public ReactiveObject IgnoreApplet { get; private set; } - - /// - /// Enables or disables save window size, position and state on close. - /// - public ReactiveObject RememberWindowState { get; private set; } - - /// - /// Enables or disables the redesigned title bar - /// - public ReactiveObject ShowTitleBar { get; private set; } - - /// - /// Enables hardware-accelerated rendering for Avalonia - /// - public ReactiveObject EnableHardwareAcceleration { get; private set; } - - /// - /// Hide Cursor on Idle - /// - public ReactiveObject HideCursor { get; private set; } - - private ConfigurationState() - { - UI = new UISection(); - Logger = new LoggerSection(); - System = new SystemSection(); - Graphics = new GraphicsSection(); - Hid = new HidSection(); - Multiplayer = new MultiplayerSection(); - EnableDiscordIntegration = new ReactiveObject(); - CheckUpdatesOnStart = new ReactiveObject(); - ShowConfirmExit = new ReactiveObject(); - IgnoreApplet = new ReactiveObject(); - IgnoreApplet.LogChangesToValue(nameof(IgnoreApplet)); - RememberWindowState = new ReactiveObject(); - ShowTitleBar = new ReactiveObject(); - EnableHardwareAcceleration = new ReactiveObject(); - HideCursor = new ReactiveObject(); - } - + public ConfigurationFileFormat ToFileFormat() { ConfigurationFileFormat configurationFile = new() @@ -944,708 +295,9 @@ namespace Ryujinx.UI.Common.Configuration StickButton = Key.H, }, } - ]; } - public void Load(ConfigurationFileFormat configurationFileFormat, string configurationFilePath) - { - bool configurationFileUpdated = false; - - if (configurationFileFormat.Version is < 0 or > ConfigurationFileFormat.CurrentVersion) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Unsupported configuration version {configurationFileFormat.Version}, loading default."); - - LoadDefault(); - } - - if (configurationFileFormat.Version < 2) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 2."); - - configurationFileFormat.SystemRegion = Region.USA; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 3) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 3."); - - configurationFileFormat.SystemTimeZone = "UTC"; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 4) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 4."); - - configurationFileFormat.MaxAnisotropy = -1; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 5) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 5."); - - configurationFileFormat.SystemTimeOffset = 0; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 8) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 8."); - - configurationFileFormat.EnablePtc = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 9) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 9."); - - configurationFileFormat.ColumnSort = new ColumnSort - { - SortColumnId = 0, - SortAscending = false, - }; - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVsync = Key.F1, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 10) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 10."); - - configurationFileFormat.AudioBackend = AudioBackend.OpenAl; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 11) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 11."); - - configurationFileFormat.ResScale = 1; - configurationFileFormat.ResScaleCustom = 1.0f; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 12) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 12."); - - configurationFileFormat.LoggingGraphicsDebugLevel = GraphicsDebugLevel.None; - - configurationFileUpdated = true; - } - - // configurationFileFormat.Version == 13 -> LDN1 - - if (configurationFileFormat.Version < 14) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 14."); - - configurationFileFormat.CheckUpdatesOnStart = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 16) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 16."); - - configurationFileFormat.EnableShaderCache = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 17) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 17."); - - configurationFileFormat.StartFullscreen = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 18) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 18."); - - configurationFileFormat.AspectRatio = AspectRatio.Fixed16x9; - - configurationFileUpdated = true; - } - - // configurationFileFormat.Version == 19 -> LDN2 - - if (configurationFileFormat.Version < 20) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 20."); - - configurationFileFormat.ShowConfirmExit = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 21) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 21."); - - // Initialize network config. - - configurationFileFormat.MultiplayerMode = MultiplayerMode.Disabled; - configurationFileFormat.MultiplayerLanInterfaceId = "0"; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 22) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 22."); - - configurationFileFormat.HideCursor = HideCursorMode.Never; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 24) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 24."); - - configurationFileFormat.InputConfig = new List - { - new StandardKeyboardInputConfig - { - Version = InputConfig.CurrentVersion, - Backend = InputBackendType.WindowKeyboard, - Id = "0", - PlayerIndex = PlayerIndex.Player1, - ControllerType = ControllerType.ProController, - LeftJoycon = new LeftJoyconCommonConfig - { - DpadUp = Key.Up, - DpadDown = Key.Down, - DpadLeft = Key.Left, - DpadRight = Key.Right, - ButtonMinus = Key.Minus, - ButtonL = Key.E, - ButtonZl = Key.Q, - ButtonSl = Key.Unbound, - ButtonSr = Key.Unbound, - }, - LeftJoyconStick = new JoyconConfigKeyboardStick - { - StickUp = Key.W, - StickDown = Key.S, - StickLeft = Key.A, - StickRight = Key.D, - StickButton = Key.F, - }, - RightJoycon = new RightJoyconCommonConfig - { - ButtonA = Key.Z, - ButtonB = Key.X, - ButtonX = Key.C, - ButtonY = Key.V, - ButtonPlus = Key.Plus, - ButtonR = Key.U, - ButtonZr = Key.O, - ButtonSl = Key.Unbound, - ButtonSr = Key.Unbound, - }, - RightJoyconStick = new JoyconConfigKeyboardStick - { - StickUp = Key.I, - StickDown = Key.K, - StickLeft = Key.J, - StickRight = Key.L, - StickButton = Key.H, - }, - }, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 25) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 25."); - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 26) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 26."); - - configurationFileFormat.MemoryManagerMode = MemoryManagerMode.HostMappedUnsafe; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 27) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 27."); - - configurationFileFormat.EnableMouse = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 28) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 28."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVsync = Key.F1, - Screenshot = Key.F8, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 29) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 29."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVsync = Key.F1, - Screenshot = Key.F8, - ShowUI = Key.F4, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 30) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 30."); - - foreach (InputConfig config in configurationFileFormat.InputConfig) - { - if (config is StandardControllerInputConfig controllerConfig) - { - controllerConfig.Rumble = new RumbleConfigController - { - EnableRumble = false, - StrongRumble = 1f, - WeakRumble = 1f, - }; - } - } - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 31) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 31."); - - configurationFileFormat.BackendThreading = BackendThreading.Auto; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 32) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 32."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, - Screenshot = configurationFileFormat.Hotkeys.Screenshot, - ShowUI = configurationFileFormat.Hotkeys.ShowUI, - Pause = Key.F5, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 33) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 33."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, - Screenshot = configurationFileFormat.Hotkeys.Screenshot, - ShowUI = configurationFileFormat.Hotkeys.ShowUI, - Pause = configurationFileFormat.Hotkeys.Pause, - ToggleMute = Key.F2, - }; - - configurationFileFormat.AudioVolume = 1; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 34) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 34."); - - configurationFileFormat.EnableInternetAccess = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 35) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 35."); - - foreach (InputConfig config in configurationFileFormat.InputConfig) - { - if (config is StandardControllerInputConfig controllerConfig) - { - controllerConfig.RangeLeft = 1.0f; - controllerConfig.RangeRight = 1.0f; - } - } - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 36) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 36."); - - configurationFileFormat.LoggingEnableTrace = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 37) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 37."); - - configurationFileFormat.ShowConsole = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 38) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 38."); - - configurationFileFormat.BaseStyle = "Dark"; - configurationFileFormat.GameListViewMode = 0; - configurationFileFormat.ShowNames = true; - configurationFileFormat.GridSize = 2; - configurationFileFormat.LanguageCode = "en_US"; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 39) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 39."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, - Screenshot = configurationFileFormat.Hotkeys.Screenshot, - ShowUI = configurationFileFormat.Hotkeys.ShowUI, - Pause = configurationFileFormat.Hotkeys.Pause, - ToggleMute = configurationFileFormat.Hotkeys.ToggleMute, - ResScaleUp = Key.Unbound, - ResScaleDown = Key.Unbound, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 40) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 40."); - - configurationFileFormat.GraphicsBackend = GraphicsBackend.OpenGl; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 41) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 41."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, - Screenshot = configurationFileFormat.Hotkeys.Screenshot, - ShowUI = configurationFileFormat.Hotkeys.ShowUI, - Pause = configurationFileFormat.Hotkeys.Pause, - ToggleMute = configurationFileFormat.Hotkeys.ToggleMute, - ResScaleUp = configurationFileFormat.Hotkeys.ResScaleUp, - ResScaleDown = configurationFileFormat.Hotkeys.ResScaleDown, - VolumeUp = Key.Unbound, - VolumeDown = Key.Unbound, - }; - } - - if (configurationFileFormat.Version < 42) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 42."); - - configurationFileFormat.EnableMacroHLE = true; - } - - if (configurationFileFormat.Version < 43) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 43."); - - configurationFileFormat.UseHypervisor = true; - } - - if (configurationFileFormat.Version < 44) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 44."); - - configurationFileFormat.AntiAliasing = AntiAliasing.None; - configurationFileFormat.ScalingFilter = ScalingFilter.Bilinear; - configurationFileFormat.ScalingFilterLevel = 80; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 45) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 45."); - - configurationFileFormat.ShownFileTypes = new ShownFileTypes - { - NSP = true, - PFS0 = true, - XCI = true, - NCA = true, - NRO = true, - NSO = true, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 46) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 46."); - - configurationFileFormat.MultiplayerLanInterfaceId = "0"; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 47) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 47."); - - configurationFileFormat.WindowStartup = new WindowStartup - { - WindowPositionX = 0, - WindowPositionY = 0, - WindowSizeHeight = 760, - WindowSizeWidth = 1280, - WindowMaximized = false, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 48) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 48."); - - configurationFileFormat.EnableColorSpacePassthrough = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 49) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 49."); - - if (OperatingSystem.IsMacOS()) - { - AppDataManager.FixMacOSConfigurationFolders(); - } - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 50) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 50."); - - configurationFileFormat.EnableHardwareAcceleration = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 51) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 51."); - - configurationFileFormat.RememberWindowState = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 52) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 52."); - - configurationFileFormat.AutoloadDirs = []; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 53) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 53."); - - configurationFileFormat.EnableLowPowerPtc = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 54) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 54."); - - configurationFileFormat.DramSize = MemoryConfiguration.MemoryConfiguration4GiB; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 55) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 55."); - - configurationFileFormat.IgnoreApplet = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 56) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 56."); - - configurationFileFormat.ShowTitleBar = !OperatingSystem.IsWindows(); - - configurationFileUpdated = true; - } - - Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; - Graphics.ResScale.Value = configurationFileFormat.ResScale; - Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom; - Graphics.MaxAnisotropy.Value = configurationFileFormat.MaxAnisotropy; - Graphics.AspectRatio.Value = configurationFileFormat.AspectRatio; - Graphics.ShadersDumpPath.Value = configurationFileFormat.GraphicsShadersDumpPath; - Graphics.BackendThreading.Value = configurationFileFormat.BackendThreading; - Graphics.GraphicsBackend.Value = configurationFileFormat.GraphicsBackend; - Graphics.PreferredGpu.Value = configurationFileFormat.PreferredGpu; - Graphics.AntiAliasing.Value = configurationFileFormat.AntiAliasing; - Graphics.ScalingFilter.Value = configurationFileFormat.ScalingFilter; - Graphics.ScalingFilterLevel.Value = configurationFileFormat.ScalingFilterLevel; - Logger.EnableDebug.Value = configurationFileFormat.LoggingEnableDebug; - Logger.EnableStub.Value = configurationFileFormat.LoggingEnableStub; - Logger.EnableInfo.Value = configurationFileFormat.LoggingEnableInfo; - Logger.EnableWarn.Value = configurationFileFormat.LoggingEnableWarn; - Logger.EnableError.Value = configurationFileFormat.LoggingEnableError; - Logger.EnableTrace.Value = configurationFileFormat.LoggingEnableTrace; - Logger.EnableGuest.Value = configurationFileFormat.LoggingEnableGuest; - Logger.EnableFsAccessLog.Value = configurationFileFormat.LoggingEnableFsAccessLog; - Logger.FilteredClasses.Value = configurationFileFormat.LoggingFilteredClasses; - Logger.GraphicsDebugLevel.Value = configurationFileFormat.LoggingGraphicsDebugLevel; - System.Language.Value = configurationFileFormat.SystemLanguage; - System.Region.Value = configurationFileFormat.SystemRegion; - System.TimeZone.Value = configurationFileFormat.SystemTimeZone; - System.SystemTimeOffset.Value = configurationFileFormat.SystemTimeOffset; - System.EnableDockedMode.Value = configurationFileFormat.DockedMode; - EnableDiscordIntegration.Value = configurationFileFormat.EnableDiscordIntegration; - CheckUpdatesOnStart.Value = configurationFileFormat.CheckUpdatesOnStart; - ShowConfirmExit.Value = configurationFileFormat.ShowConfirmExit; - IgnoreApplet.Value = configurationFileFormat.IgnoreApplet; - RememberWindowState.Value = configurationFileFormat.RememberWindowState; - ShowTitleBar.Value = configurationFileFormat.ShowTitleBar; - EnableHardwareAcceleration.Value = configurationFileFormat.EnableHardwareAcceleration; - HideCursor.Value = configurationFileFormat.HideCursor; - Graphics.EnableVsync.Value = configurationFileFormat.EnableVsync; - Graphics.EnableShaderCache.Value = configurationFileFormat.EnableShaderCache; - Graphics.EnableTextureRecompression.Value = configurationFileFormat.EnableTextureRecompression; - Graphics.EnableMacroHLE.Value = configurationFileFormat.EnableMacroHLE; - Graphics.EnableColorSpacePassthrough.Value = configurationFileFormat.EnableColorSpacePassthrough; - System.EnablePtc.Value = configurationFileFormat.EnablePtc; - System.EnableLowPowerPtc.Value = configurationFileFormat.EnableLowPowerPtc; - System.EnableInternetAccess.Value = configurationFileFormat.EnableInternetAccess; - System.EnableFsIntegrityChecks.Value = configurationFileFormat.EnableFsIntegrityChecks; - System.FsGlobalAccessLogMode.Value = configurationFileFormat.FsGlobalAccessLogMode; - System.AudioBackend.Value = configurationFileFormat.AudioBackend; - System.AudioVolume.Value = configurationFileFormat.AudioVolume; - System.MemoryManagerMode.Value = configurationFileFormat.MemoryManagerMode; - System.DramSize.Value = configurationFileFormat.DramSize; - System.IgnoreMissingServices.Value = configurationFileFormat.IgnoreMissingServices; - System.UseHypervisor.Value = configurationFileFormat.UseHypervisor; - UI.GuiColumns.FavColumn.Value = configurationFileFormat.GuiColumns.FavColumn; - UI.GuiColumns.IconColumn.Value = configurationFileFormat.GuiColumns.IconColumn; - UI.GuiColumns.AppColumn.Value = configurationFileFormat.GuiColumns.AppColumn; - UI.GuiColumns.DevColumn.Value = configurationFileFormat.GuiColumns.DevColumn; - UI.GuiColumns.VersionColumn.Value = configurationFileFormat.GuiColumns.VersionColumn; - UI.GuiColumns.TimePlayedColumn.Value = configurationFileFormat.GuiColumns.TimePlayedColumn; - UI.GuiColumns.LastPlayedColumn.Value = configurationFileFormat.GuiColumns.LastPlayedColumn; - UI.GuiColumns.FileExtColumn.Value = configurationFileFormat.GuiColumns.FileExtColumn; - UI.GuiColumns.FileSizeColumn.Value = configurationFileFormat.GuiColumns.FileSizeColumn; - UI.GuiColumns.PathColumn.Value = configurationFileFormat.GuiColumns.PathColumn; - UI.ColumnSort.SortColumnId.Value = configurationFileFormat.ColumnSort.SortColumnId; - UI.ColumnSort.SortAscending.Value = configurationFileFormat.ColumnSort.SortAscending; - UI.GameDirs.Value = configurationFileFormat.GameDirs; - UI.AutoloadDirs.Value = configurationFileFormat.AutoloadDirs ?? []; - UI.ShownFileTypes.NSP.Value = configurationFileFormat.ShownFileTypes.NSP; - UI.ShownFileTypes.PFS0.Value = configurationFileFormat.ShownFileTypes.PFS0; - UI.ShownFileTypes.XCI.Value = configurationFileFormat.ShownFileTypes.XCI; - UI.ShownFileTypes.NCA.Value = configurationFileFormat.ShownFileTypes.NCA; - UI.ShownFileTypes.NRO.Value = configurationFileFormat.ShownFileTypes.NRO; - UI.ShownFileTypes.NSO.Value = configurationFileFormat.ShownFileTypes.NSO; - UI.LanguageCode.Value = configurationFileFormat.LanguageCode; - UI.BaseStyle.Value = configurationFileFormat.BaseStyle; - UI.GameListViewMode.Value = configurationFileFormat.GameListViewMode; - UI.ShowNames.Value = configurationFileFormat.ShowNames; - UI.IsAscendingOrder.Value = configurationFileFormat.IsAscendingOrder; - UI.GridSize.Value = configurationFileFormat.GridSize; - UI.ApplicationSort.Value = configurationFileFormat.ApplicationSort; - UI.StartFullscreen.Value = configurationFileFormat.StartFullscreen; - UI.ShowConsole.Value = configurationFileFormat.ShowConsole; - UI.WindowStartup.WindowSizeWidth.Value = configurationFileFormat.WindowStartup.WindowSizeWidth; - UI.WindowStartup.WindowSizeHeight.Value = configurationFileFormat.WindowStartup.WindowSizeHeight; - UI.WindowStartup.WindowPositionX.Value = configurationFileFormat.WindowStartup.WindowPositionX; - UI.WindowStartup.WindowPositionY.Value = configurationFileFormat.WindowStartup.WindowPositionY; - UI.WindowStartup.WindowMaximized.Value = configurationFileFormat.WindowStartup.WindowMaximized; - Hid.EnableKeyboard.Value = configurationFileFormat.EnableKeyboard; - Hid.EnableMouse.Value = configurationFileFormat.EnableMouse; - Hid.Hotkeys.Value = configurationFileFormat.Hotkeys; - Hid.InputConfig.Value = configurationFileFormat.InputConfig ?? []; - - Multiplayer.LanInterfaceId.Value = configurationFileFormat.MultiplayerLanInterfaceId; - Multiplayer.Mode.Value = configurationFileFormat.MultiplayerMode; - - if (configurationFileUpdated) - { - ToFileFormat().SaveConfig(configurationFilePath); - - Ryujinx.Common.Logging.Logger.Notice.Print(LogClass.Application, $"Configuration file updated to version {ConfigurationFileFormat.CurrentVersion}"); - } - } - private static GraphicsBackend DefaultGraphicsBackend() { // Any system running macOS or returning any amount of valid Vulkan devices should default to Vulkan. @@ -1657,17 +309,5 @@ namespace Ryujinx.UI.Common.Configuration return GraphicsBackend.OpenGl; } - - public static void Initialize() - { - if (Instance != null) - { - throw new InvalidOperationException("Configuration is already initialized"); - } - - Instance = new ConfigurationState(); - - Instance.System.EnableLowPowerPtc.Event += (_, evnt) => Optimizations.LowPower = evnt.NewValue; - } } } -- 2.47.1 From 736907945995e2b802b431e05ab08706d723c929 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 22:23:03 -0600 Subject: [PATCH 037/722] misc: chore: cleanup 2 accidental xml namespaces --- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 910741089..883bf8971 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -4,10 +4,8 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" - xmlns:uih="clr-namespace:Ryujinx.UI.Common.Helper" mc:Ignorable="d" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" - xmlns:helper="clr-namespace:Ryujinx.UI.Common.Helper;assembly=Ryujinx.UI.Common" x:DataType="viewModels:MainWindowViewModel" x:Class="Ryujinx.Ava.UI.Views.Main.MainMenuBarView"> -- 2.47.1 From 826ffd4a04f53e2c209706160c1f7f10639d35d5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 22:31:26 -0600 Subject: [PATCH 038/722] misc: Move the LowPowerPtc event handler that changes Optimizations.LowPower into the ConfigurationState ctor --- .../Configuration/ConfigurationState.Model.cs | 7 +++++-- src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs | 2 -- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs index 3b9ffb5d3..2b43b2032 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs @@ -1,4 +1,5 @@ -using Ryujinx.Common; +using ARMeilleure; +using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Multiplayer; @@ -12,7 +13,7 @@ namespace Ryujinx.UI.Common.Configuration { public partial class ConfigurationState { - /// + /// /// UI configuration section /// public class UISection @@ -376,6 +377,8 @@ namespace Ryujinx.UI.Common.Configuration EnablePtc.LogChangesToValue(nameof(EnablePtc)); EnableLowPowerPtc = new ReactiveObject(); EnableLowPowerPtc.LogChangesToValue(nameof(EnableLowPowerPtc)); + EnableLowPowerPtc.Event += (_, evnt) + => Optimizations.LowPower = evnt.NewValue; EnableInternetAccess = new ReactiveObject(); EnableInternetAccess.LogChangesToValue(nameof(EnableInternetAccess)); EnableFsIntegrityChecks = new ReactiveObject(); diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs index 5023e48c0..6fd5cfb93 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs @@ -24,8 +24,6 @@ namespace Ryujinx.UI.Common.Configuration } Instance = new ConfigurationState(); - - Instance.System.EnableLowPowerPtc.Event += (_, evnt) => Optimizations.LowPower = evnt.NewValue; } public ConfigurationFileFormat ToFileFormat() -- 2.47.1 From 79ba9d12580675c1d1f6a34168f1f1ba5212315d Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 23:26:15 -0600 Subject: [PATCH 039/722] UI: RPC: Fix asset image hover string version pointing to the Canary repo in Canary --- .github/workflows/canary.yml | 5 +- .../Logging/Targets/FileLogTarget.cs | 2 +- .../Configuration/LoggerModule.cs | 145 +++++++----------- .../DiscordIntegrationModule.cs | 10 +- 4 files changed, 66 insertions(+), 96 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index b64fc1d92..0fde764d5 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -22,6 +22,7 @@ env: RYUJINX_BASE_VERSION: "1.2" RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "canary" RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "GreemDev" + RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO: "Ryujinx" RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Ryujinx-Canary" RELEASE: 1 @@ -92,7 +93,7 @@ jobs: sed -r --in-place 's/\%\%RYUJINX_BUILD_GIT_HASH\%\%/${{ steps.version_info.outputs.git_short_hash }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs - sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs shell: bash @@ -227,7 +228,7 @@ jobs: sed -r --in-place 's/\%\%RYUJINX_BUILD_GIT_HASH\%\%/${{ steps.version_info.outputs.git_short_hash }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs - sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs shell: bash diff --git a/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs b/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs index 8d4ede96c..631df3056 100644 --- a/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs +++ b/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs @@ -47,7 +47,7 @@ namespace Ryujinx.Common.Logging.Targets } // Clean up old logs, should only keep 3 - FileInfo[] files = logDir.GetFiles("*.log").OrderBy((info => info.CreationTime)).ToArray(); + FileInfo[] files = logDir.GetFiles("*.log").OrderBy(info => info.CreationTime).ToArray(); for (int i = 0; i < files.Length - 2; i++) { try diff --git a/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs b/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs index 9cb283593..7ac505349 100644 --- a/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs +++ b/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs @@ -1,4 +1,3 @@ -using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Logging.Targets; @@ -11,103 +10,69 @@ namespace Ryujinx.UI.Common.Configuration { public static void Initialize() { - ConfigurationState.Instance.Logger.EnableDebug.Event += ReloadEnableDebug; - ConfigurationState.Instance.Logger.EnableStub.Event += ReloadEnableStub; - ConfigurationState.Instance.Logger.EnableInfo.Event += ReloadEnableInfo; - ConfigurationState.Instance.Logger.EnableWarn.Event += ReloadEnableWarning; - ConfigurationState.Instance.Logger.EnableError.Event += ReloadEnableError; - ConfigurationState.Instance.Logger.EnableTrace.Event += ReloadEnableTrace; - ConfigurationState.Instance.Logger.EnableGuest.Event += ReloadEnableGuest; - ConfigurationState.Instance.Logger.EnableFsAccessLog.Event += ReloadEnableFsAccessLog; - ConfigurationState.Instance.Logger.FilteredClasses.Event += ReloadFilteredClasses; - ConfigurationState.Instance.Logger.EnableFileLog.Event += ReloadFileLogger; - } - - private static void ReloadEnableDebug(object sender, ReactiveEventArgs e) - { - Logger.SetEnable(LogLevel.Debug, e.NewValue); - } - - private static void ReloadEnableStub(object sender, ReactiveEventArgs e) - { - Logger.SetEnable(LogLevel.Stub, e.NewValue); - } - - private static void ReloadEnableInfo(object sender, ReactiveEventArgs e) - { - Logger.SetEnable(LogLevel.Info, e.NewValue); - } - - private static void ReloadEnableWarning(object sender, ReactiveEventArgs e) - { - Logger.SetEnable(LogLevel.Warning, e.NewValue); - } - - private static void ReloadEnableError(object sender, ReactiveEventArgs e) - { - Logger.SetEnable(LogLevel.Error, e.NewValue); - } - - private static void ReloadEnableTrace(object sender, ReactiveEventArgs e) - { - Logger.SetEnable(LogLevel.Trace, e.NewValue); - } - - private static void ReloadEnableGuest(object sender, ReactiveEventArgs e) - { - Logger.SetEnable(LogLevel.Guest, e.NewValue); - } - - private static void ReloadEnableFsAccessLog(object sender, ReactiveEventArgs e) - { - Logger.SetEnable(LogLevel.AccessLog, e.NewValue); - } - - private static void ReloadFilteredClasses(object sender, ReactiveEventArgs e) - { - bool noFilter = e.NewValue.Length == 0; - - foreach (var logClass in Enum.GetValues()) + ConfigurationState.Instance.Logger.EnableDebug.Event += + (_, e) => Logger.SetEnable(LogLevel.Debug, e.NewValue); + ConfigurationState.Instance.Logger.EnableStub.Event += + (_, e) => Logger.SetEnable(LogLevel.Stub, e.NewValue); + ConfigurationState.Instance.Logger.EnableInfo.Event += + (_, e) => Logger.SetEnable(LogLevel.Info, e.NewValue); + ConfigurationState.Instance.Logger.EnableWarn.Event += + (_, e) => Logger.SetEnable(LogLevel.Warning, e.NewValue); + ConfigurationState.Instance.Logger.EnableError.Event += + (_, e) => Logger.SetEnable(LogLevel.Error, e.NewValue); + ConfigurationState.Instance.Logger.EnableTrace.Event += + (_, e) => Logger.SetEnable(LogLevel.Error, e.NewValue); + ConfigurationState.Instance.Logger.EnableGuest.Event += + (_, e) => Logger.SetEnable(LogLevel.Guest, e.NewValue); + ConfigurationState.Instance.Logger.EnableFsAccessLog.Event += + (_, e) => Logger.SetEnable(LogLevel.AccessLog, e.NewValue); + + ConfigurationState.Instance.Logger.FilteredClasses.Event += (_, e) => { - Logger.SetEnable(logClass, noFilter); - } + bool noFilter = e.NewValue.Length == 0; - foreach (var logClass in e.NewValue) - { - Logger.SetEnable(logClass, true); - } - } - - private static void ReloadFileLogger(object sender, ReactiveEventArgs e) - { - if (e.NewValue) - { - string logDir = AppDataManager.LogsDirPath; - FileStream logFile = null; - - if (!string.IsNullOrEmpty(logDir)) + foreach (var logClass in Enum.GetValues()) { - logFile = FileLogTarget.PrepareLogFile(logDir); + Logger.SetEnable(logClass, noFilter); } - if (logFile == null) + foreach (var logClass in e.NewValue) + { + Logger.SetEnable(logClass, true); + } + }; + + ConfigurationState.Instance.Logger.EnableFileLog.Event += (_, e) => + { + if (e.NewValue) + { + string logDir = AppDataManager.LogsDirPath; + FileStream logFile = null; + + if (!string.IsNullOrEmpty(logDir)) + { + logFile = FileLogTarget.PrepareLogFile(logDir); + } + + if (logFile == null) + { + Logger.Error?.Print(LogClass.Application, + "No writable log directory available. Make sure either the Logs directory, Application Data, or the Ryujinx directory is writable."); + Logger.RemoveTarget("file"); + + return; + } + + Logger.AddTarget(new AsyncLogTargetWrapper( + new FileLogTarget("file", logFile), + 1000 + )); + } + else { - Logger.Error?.Print(LogClass.Application, "No writable log directory available. Make sure either the Logs directory, Application Data, or the Ryujinx directory is writable."); Logger.RemoveTarget("file"); - - return; } - - Logger.AddTarget(new AsyncLogTargetWrapper( - new FileLogTarget("file", logFile), - 1000, - AsyncLogTargetOverflowAction.Block - )); - } - else - { - Logger.RemoveTarget("file"); - } + }; } } } diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs index c21a46e29..780d94249 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs @@ -15,9 +15,13 @@ namespace Ryujinx.UI.Common { public static Timestamps StartedAt { get; set; } - private static readonly string _description = ReleaseInformation.IsValid - ? $"v{ReleaseInformation.Version} {ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}@{ReleaseInformation.BuildGitHash}" - : "dev build"; + private static string VersionString + => (ReleaseInformation.IsCanaryBuild ? "Canary " : string.Empty) + $"v{ReleaseInformation.Version}"; + + private static readonly string _description = + ReleaseInformation.IsValid + ? $"{VersionString} {ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}@{ReleaseInformation.BuildGitHash}" + : "dev build"; private const string ApplicationId = "1293250299716173864"; -- 2.47.1 From 42cbe24bb10baa21f847a550ed1fec3fb5194d11 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 23:32:37 -0600 Subject: [PATCH 040/722] Actually fix Canary showing the wrong repo --- .github/workflows/canary.yml | 4 +++- .github/workflows/release.yml | 2 ++ src/Ryujinx.Common/ReleaseInformation.cs | 2 ++ src/Ryujinx.UI.Common/DiscordIntegrationModule.cs | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 0fde764d5..f3593dff3 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -94,6 +94,7 @@ jobs: sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs shell: bash @@ -228,7 +229,8 @@ jobs: sed -r --in-place 's/\%\%RYUJINX_BUILD_GIT_HASH\%\%/${{ steps.version_info.outputs.git_short_hash }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs - sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs shell: bash diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7a78718be..183d4c618 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -93,6 +93,7 @@ jobs: sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs shell: bash @@ -224,6 +225,7 @@ jobs: sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs shell: bash diff --git a/src/Ryujinx.Common/ReleaseInformation.cs b/src/Ryujinx.Common/ReleaseInformation.cs index 523479d82..f4c62155a 100644 --- a/src/Ryujinx.Common/ReleaseInformation.cs +++ b/src/Ryujinx.Common/ReleaseInformation.cs @@ -15,6 +15,7 @@ namespace Ryujinx.Common private const string ConfigFileName = "%%RYUJINX_CONFIG_FILE_NAME%%"; public const string ReleaseChannelOwner = "%%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER%%"; + public const string ReleaseChannelSourceRepo = "%%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO%%"; public const string ReleaseChannelRepo = "%%RYUJINX_TARGET_RELEASE_CHANNEL_REPO%%"; public static string ConfigName => !ConfigFileName.StartsWith("%%") ? ConfigFileName : "Config.json"; @@ -23,6 +24,7 @@ namespace Ryujinx.Common !BuildGitHash.StartsWith("%%") && !ReleaseChannelName.StartsWith("%%") && !ReleaseChannelOwner.StartsWith("%%") && + !ReleaseChannelSourceRepo.StartsWith("%%") && !ReleaseChannelRepo.StartsWith("%%") && !ConfigFileName.StartsWith("%%"); diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs index 780d94249..03dd9a41e 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs @@ -20,7 +20,7 @@ namespace Ryujinx.UI.Common private static readonly string _description = ReleaseInformation.IsValid - ? $"{VersionString} {ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}@{ReleaseInformation.BuildGitHash}" + ? $"{VersionString} {ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelSourceRepo}@{ReleaseInformation.BuildGitHash}" : "dev build"; private const string ApplicationId = "1293250299716173864"; -- 2.47.1 From d404a8b05b8b28261d1c596af1bf7f942a74e000 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 10 Nov 2024 23:34:30 -0600 Subject: [PATCH 041/722] i may be stupid --- .github/workflows/canary.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index f3593dff3..d102beaa3 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -93,7 +93,7 @@ jobs: sed -r --in-place 's/\%\%RYUJINX_BUILD_GIT_HASH\%\%/${{ steps.version_info.outputs.git_short_hash }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_NAME }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/g;' src/Ryujinx.Common/ReleaseInformation.cs - sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs shell: bash -- 2.47.1 From abfcfcaf0f006d508922ab31ce14051409010e23 Mon Sep 17 00:00:00 2001 From: Jonas Henriksson Date: Mon, 11 Nov 2024 21:14:29 +0100 Subject: [PATCH 042/722] Fix issue with Logger.Trace (#228) --- src/Ryujinx.UI.Common/Configuration/LoggerModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs b/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs index 7ac505349..a7913f142 100644 --- a/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs +++ b/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs @@ -21,7 +21,7 @@ namespace Ryujinx.UI.Common.Configuration ConfigurationState.Instance.Logger.EnableError.Event += (_, e) => Logger.SetEnable(LogLevel.Error, e.NewValue); ConfigurationState.Instance.Logger.EnableTrace.Event += - (_, e) => Logger.SetEnable(LogLevel.Error, e.NewValue); + (_, e) => Logger.SetEnable(LogLevel.Trace, e.NewValue); ConfigurationState.Instance.Logger.EnableGuest.Event += (_, e) => Logger.SetEnable(LogLevel.Guest, e.NewValue); ConfigurationState.Instance.Logger.EnableFsAccessLog.Event += -- 2.47.1 From 6d8738c04853fa02947b56157a949549ad55fb3e Mon Sep 17 00:00:00 2001 From: Vudjun Date: Mon, 11 Nov 2024 22:06:50 +0000 Subject: [PATCH 043/722] TESTERS WANTED: RyuLDN implementation (#65) These changes allow players to matchmake for local wireless using a LDN server. The network implementation originates from Berry's public TCP RyuLDN fork. Logo and unrelated changes have been removed. Additionally displays LDN game status in the game selection window when RyuLDN is enabled. Functionality is only enabled while network mode is set to "RyuLDN" in the settings. --- Directory.Packages.props | 1 + .../Multiplayer/MultiplayerMode.cs | 1 + .../Memory/StructArrayHelpers.cs | 24 +- .../Utilities/NetworkHelpers.cs | 6 + src/Ryujinx.Graphics.GAL/IRenderer.cs | 2 +- src/Ryujinx.Graphics.OpenGL/OpenGLRenderer.cs | 2 +- src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | 2 +- src/Ryujinx.HLE/HLEConfiguration.cs | 23 +- .../HOS/Services/Ldn/Types/NetworkConfig.cs | 2 +- .../HOS/Services/Ldn/Types/ScanFilter.cs | 2 +- .../HOS/Services/Ldn/Types/SecurityConfig.cs | 2 +- .../Services/Ldn/Types/SecurityParameter.cs | 2 +- .../HOS/Services/Ldn/Types/UserConfig.cs | 2 +- .../Ldn/UserServiceCreator/AccessPoint.cs | 9 +- .../Ldn/UserServiceCreator/INetworkClient.cs | 1 + .../IUserLocalCommunicationService.cs | 62 +- .../UserServiceCreator/LdnDisabledClient.cs | 7 + .../LdnMitm/LdnMitmClient.cs | 1 + .../UserServiceCreator/LdnRyu/IProxyClient.cs | 7 + .../LdnRyu/LdnMasterProxyClient.cs | 645 ++++++++++++++ .../LdnRyu/NetworkTimeout.cs | 83 ++ .../LdnRyu/Proxy/EphemeralPortPool.cs | 53 ++ .../LdnRyu/Proxy/LdnProxy.cs | 254 ++++++ .../LdnRyu/Proxy/LdnProxySocket.cs | 797 ++++++++++++++++++ .../LdnRyu/Proxy/P2pProxyClient.cs | 93 ++ .../LdnRyu/Proxy/P2pProxyServer.cs | 388 +++++++++ .../LdnRyu/Proxy/P2pProxySession.cs | 90 ++ .../LdnRyu/Proxy/ProxyHelpers.cs | 24 + .../LdnRyu/RyuLdnProtocol.cs | 380 +++++++++ .../LdnRyu/Types/DisconnectMessage.cs | 10 + .../LdnRyu/Types/ExternalProxyConfig.cs | 19 + .../Types/ExternalProxyConnectionState.cs | 18 + .../LdnRyu/Types/ExternalProxyToken.cs | 20 + .../LdnRyu/Types/InitializeMessage.cs | 20 + .../LdnRyu/Types/LdnHeader.cs | 13 + .../LdnRyu/Types/PacketId.cs | 36 + .../LdnRyu/Types/PassphraseMessage.cs | 11 + .../LdnRyu/Types/PingMessage.cs | 11 + .../LdnRyu/Types/ProxyConnectRequest.cs | 10 + .../LdnRyu/Types/ProxyConnectResponse.cs | 10 + .../LdnRyu/Types/ProxyDataHeader.cs | 14 + .../LdnRyu/Types/ProxyDataPacket.cs | 8 + .../LdnRyu/Types/ProxyDisconnectMessage.cs | 11 + .../LdnRyu/Types/ProxyInfo.cs | 20 + .../LdnRyu/Types/RejectRequest.cs | 18 + .../LdnRyu/Types/RyuNetworkConfig.cs | 23 + .../LdnRyu/Types/SetAcceptPolicyRequest.cs | 11 + .../Ldn/UserServiceCreator/Station.cs | 9 +- .../Types/CreateAccessPointPrivateRequest.cs | 3 + .../Types/CreateAccessPointRequest.cs | 5 +- .../UserServiceCreator/Types/ProxyConfig.cs | 11 + .../HOS/Services/Sockets/Bsd/IClient.cs | 2 +- .../Sockets/Bsd/Impl/ManagedSocket.cs | 33 +- .../Bsd/Impl/ManagedSocketPollManager.cs | 159 ++-- .../Sockets/Bsd/Proxy/DefaultSocket.cs | 178 ++++ .../HOS/Services/Sockets/Bsd/Proxy/ISocket.cs | 47 ++ .../Sockets/Bsd/Proxy/SocketHelpers.cs | 74 ++ .../Services/Sockets/Sfdnsres/IResolver.cs | 2 +- .../SslService/SslManagedSocketConnection.cs | 3 +- .../Loaders/Processes/ProcessResult.cs | 4 +- src/Ryujinx.HLE/Ryujinx.HLE.csproj | 1 + src/Ryujinx.Headless.SDL2/Program.cs | 5 +- src/Ryujinx.UI.Common/App/ApplicationData.cs | 2 + .../App/ApplicationLibrary.cs | 49 +- src/Ryujinx.UI.Common/App/LdnGameData.cs | 16 + .../App/LdnGameDataReceivedEventArgs.cs | 10 + .../App/LdnGameDataSerializerContext.cs | 11 + .../Configuration/ConfigurationFileFormat.cs | 15 + .../ConfigurationState.Migration.cs | 5 +- .../Configuration/ConfigurationState.Model.cs | 25 +- .../Configuration/ConfigurationState.cs | 17 +- .../Configuration/UI/GuiColumns.cs | 1 + src/Ryujinx/AppHost.cs | 29 +- src/Ryujinx/Assets/Locales/en_US.json | 14 +- src/Ryujinx/Common/LocaleManager.cs | 2 +- src/Ryujinx/Program.cs | 14 +- src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 2 +- .../Applet/AvaloniaDynamicTextInputHandler.cs | 4 +- .../UI/Applet/ControllerAppletDialog.axaml.cs | 4 +- .../UI/Controls/ApplicationListView.axaml | 6 + .../UI/Controls/NavigationDialogHost.axaml.cs | 12 +- src/Ryujinx/UI/Helpers/GlyphValueConverter.cs | 4 +- .../UI/Helpers/MultiplayerInfoConverter.cs | 44 + src/Ryujinx/UI/Helpers/TimeZoneConverter.cs | 8 +- .../UI/Models/StatusUpdatedEventArgs.cs | 2 +- .../UI/ViewModels/MainWindowViewModel.cs | 20 +- .../UI/ViewModels/SettingsViewModel.cs | 45 +- .../UI/Views/Main/MainMenuBarView.axaml.cs | 4 +- .../Views/Settings/SettingsNetworkView.axaml | 48 +- .../Settings/SettingsNetworkView.axaml.cs | 17 + src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 72 +- .../UI/Windows/SettingsWindow.axaml.cs | 1 + src/Ryujinx/UI/Windows/StyleableWindow.cs | 2 +- 93 files changed, 4100 insertions(+), 189 deletions(-) create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/IProxyClient.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/NetworkTimeout.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyClient.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxySession.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/ProxyHelpers.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/RyuLdnProtocol.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/DisconnectMessage.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyConfig.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyConnectionState.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyToken.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/InitializeMessage.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/LdnHeader.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PacketId.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PassphraseMessage.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PingMessage.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyConnectRequest.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyConnectResponse.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDataHeader.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDataPacket.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDisconnectMessage.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyInfo.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/RejectRequest.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/RyuNetworkConfig.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/SetAcceptPolicyRequest.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/ProxyConfig.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/DefaultSocket.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/ISocket.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs create mode 100644 src/Ryujinx.UI.Common/App/LdnGameData.cs create mode 100644 src/Ryujinx.UI.Common/App/LdnGameDataReceivedEventArgs.cs create mode 100644 src/Ryujinx.UI.Common/App/LdnGameDataSerializerContext.cs create mode 100644 src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index fff045062..c0ace079d 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -33,6 +33,7 @@ + diff --git a/src/Ryujinx.Common/Configuration/Multiplayer/MultiplayerMode.cs b/src/Ryujinx.Common/Configuration/Multiplayer/MultiplayerMode.cs index 69f7d876d..be0e1518c 100644 --- a/src/Ryujinx.Common/Configuration/Multiplayer/MultiplayerMode.cs +++ b/src/Ryujinx.Common/Configuration/Multiplayer/MultiplayerMode.cs @@ -3,6 +3,7 @@ namespace Ryujinx.Common.Configuration.Multiplayer public enum MultiplayerMode { Disabled, + LdnRyu, LdnMitm, } } diff --git a/src/Ryujinx.Common/Memory/StructArrayHelpers.cs b/src/Ryujinx.Common/Memory/StructArrayHelpers.cs index 762c73889..fcb2229a7 100644 --- a/src/Ryujinx.Common/Memory/StructArrayHelpers.cs +++ b/src/Ryujinx.Common/Memory/StructArrayHelpers.cs @@ -803,18 +803,6 @@ namespace Ryujinx.Common.Memory public Span AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); } - public struct Array256 : IArray where T : unmanaged - { - T _e0; - Array128 _other; - Array127 _other2; - public readonly int Length => 256; - public ref T this[int index] => ref AsSpan()[index]; - - [Pure] - public Span AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); - } - public struct Array140 : IArray where T : unmanaged { T _e0; @@ -828,6 +816,18 @@ namespace Ryujinx.Common.Memory public Span AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); } + public struct Array256 : IArray where T : unmanaged + { + T _e0; + Array128 _other; + Array127 _other2; + public readonly int Length => 256; + public ref T this[int index] => ref AsSpan()[index]; + + [Pure] + public Span AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); + } + public struct Array384 : IArray where T : unmanaged { T _e0; diff --git a/src/Ryujinx.Common/Utilities/NetworkHelpers.cs b/src/Ryujinx.Common/Utilities/NetworkHelpers.cs index 71e02184e..53d1e4f33 100644 --- a/src/Ryujinx.Common/Utilities/NetworkHelpers.cs +++ b/src/Ryujinx.Common/Utilities/NetworkHelpers.cs @@ -1,6 +1,7 @@ using System.Buffers.Binary; using System.Net; using System.Net.NetworkInformation; +using System.Runtime.InteropServices; namespace Ryujinx.Common.Utilities { @@ -65,6 +66,11 @@ namespace Ryujinx.Common.Utilities return (targetProperties, targetAddressInfo); } + public static bool SupportsDynamicDns() + { + return RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + } + public static uint ConvertIpv4Address(IPAddress ipAddress) { return BinaryPrimitives.ReadUInt32BigEndian(ipAddress.GetAddressBytes()); diff --git a/src/Ryujinx.Graphics.GAL/IRenderer.cs b/src/Ryujinx.Graphics.GAL/IRenderer.cs index 9b5e2cc42..c2fdcbe4b 100644 --- a/src/Ryujinx.Graphics.GAL/IRenderer.cs +++ b/src/Ryujinx.Graphics.GAL/IRenderer.cs @@ -13,7 +13,7 @@ namespace Ryujinx.Graphics.GAL IPipeline Pipeline { get; } IWindow Window { get; } - + uint ProgramCount { get; } void BackgroundContextAction(Action action, bool alwaysBackground = false); diff --git a/src/Ryujinx.Graphics.OpenGL/OpenGLRenderer.cs b/src/Ryujinx.Graphics.OpenGL/OpenGLRenderer.cs index 2deee045c..6ead314fd 100644 --- a/src/Ryujinx.Graphics.OpenGL/OpenGLRenderer.cs +++ b/src/Ryujinx.Graphics.OpenGL/OpenGLRenderer.cs @@ -97,7 +97,7 @@ namespace Ryujinx.Graphics.OpenGL public IProgram CreateProgram(ShaderSource[] shaders, ShaderInfo info) { ProgramCount++; - + return new Program(shaders, info.FragmentOutputMap); } diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs index 8d324957a..cc2bc36c2 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs @@ -549,7 +549,7 @@ namespace Ryujinx.Graphics.Vulkan public IProgram CreateProgram(ShaderSource[] sources, ShaderInfo info) { ProgramCount++; - + bool isCompute = sources.Length == 1 && sources[0].Stage == ShaderStage.Compute; if (info.State.HasValue || isCompute) diff --git a/src/Ryujinx.HLE/HLEConfiguration.cs b/src/Ryujinx.HLE/HLEConfiguration.cs index 955fee4b5..70fcf278d 100644 --- a/src/Ryujinx.HLE/HLEConfiguration.cs +++ b/src/Ryujinx.HLE/HLEConfiguration.cs @@ -164,6 +164,21 @@ namespace Ryujinx.HLE /// public MultiplayerMode MultiplayerMode { internal get; set; } + /// + /// Disable P2P mode + /// + public bool MultiplayerDisableP2p { internal get; set; } + + /// + /// Multiplayer Passphrase + /// + public string MultiplayerLdnPassphrase { internal get; set; } + + /// + /// LDN Server + /// + public string MultiplayerLdnServer { internal get; set; } + /// /// An action called when HLE force a refresh of output after docked mode changed. /// @@ -194,7 +209,10 @@ namespace Ryujinx.HLE float audioVolume, bool useHypervisor, string multiplayerLanInterfaceId, - MultiplayerMode multiplayerMode) + MultiplayerMode multiplayerMode, + bool multiplayerDisableP2p, + string multiplayerLdnPassphrase, + string multiplayerLdnServer) { VirtualFileSystem = virtualFileSystem; LibHacHorizonManager = libHacHorizonManager; @@ -222,6 +240,9 @@ namespace Ryujinx.HLE UseHypervisor = useHypervisor; MultiplayerLanInterfaceId = multiplayerLanInterfaceId; MultiplayerMode = multiplayerMode; + MultiplayerDisableP2p = multiplayerDisableP2p; + MultiplayerLdnPassphrase = multiplayerLdnPassphrase; + MultiplayerLdnServer = multiplayerLdnServer; } } } diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/Types/NetworkConfig.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/Types/NetworkConfig.cs index 4da5fe42b..c6d6ac944 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/Types/NetworkConfig.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/Types/NetworkConfig.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Ldn.Types { - [StructLayout(LayoutKind.Sequential, Size = 0x20)] + [StructLayout(LayoutKind.Sequential, Size = 0x20, Pack = 8)] struct NetworkConfig { public IntentId IntentId; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/Types/ScanFilter.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/Types/ScanFilter.cs index 449c923cc..f3ab1edd5 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/Types/ScanFilter.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/Types/ScanFilter.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Ldn.Types { - [StructLayout(LayoutKind.Sequential, Size = 0x60)] + [StructLayout(LayoutKind.Sequential, Size = 0x60, Pack = 8)] struct ScanFilter { public NetworkId NetworkId; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/Types/SecurityConfig.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/Types/SecurityConfig.cs index 5939a1394..f3968aab4 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/Types/SecurityConfig.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/Types/SecurityConfig.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Ldn.Types { - [StructLayout(LayoutKind.Sequential, Size = 0x44)] + [StructLayout(LayoutKind.Sequential, Size = 0x44, Pack = 2)] struct SecurityConfig { public SecurityMode SecurityMode; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/Types/SecurityParameter.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/Types/SecurityParameter.cs index dbcaa9eeb..e564a2ec9 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/Types/SecurityParameter.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/Types/SecurityParameter.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Ldn.Types { - [StructLayout(LayoutKind.Sequential, Size = 0x20)] + [StructLayout(LayoutKind.Sequential, Size = 0x20, Pack = 1)] struct SecurityParameter { public Array16 Data; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/Types/UserConfig.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/Types/UserConfig.cs index 3820f936e..7246f6f80 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/Types/UserConfig.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/Types/UserConfig.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Ldn.Types { - [StructLayout(LayoutKind.Sequential, Size = 0x30)] + [StructLayout(LayoutKind.Sequential, Size = 0x30, Pack = 1)] struct UserConfig { public Array33 UserName; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/AccessPoint.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/AccessPoint.cs index 78ebcac82..bd00a3139 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/AccessPoint.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/AccessPoint.cs @@ -15,6 +15,8 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator public Array8 LatestUpdates = new(); public bool Connected { get; private set; } + public ProxyConfig Config => _parent.NetworkClient.Config; + public AccessPoint(IUserLocalCommunicationService parent) { _parent = parent; @@ -24,9 +26,12 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator public void Dispose() { - _parent.NetworkClient.DisconnectNetwork(); + if (_parent?.NetworkClient != null) + { + _parent.NetworkClient.DisconnectNetwork(); - _parent.NetworkClient.NetworkChange -= NetworkChanged; + _parent.NetworkClient.NetworkChange -= NetworkChanged; + } } private void NetworkChanged(object sender, NetworkChangeEventArgs e) diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/INetworkClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/INetworkClient.cs index 7ad6de51d..028ab6cfc 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/INetworkClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/INetworkClient.cs @@ -6,6 +6,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator { interface INetworkClient : IDisposable { + ProxyConfig Config { get; } bool NeedsRealId { get; } event EventHandler NetworkChange; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs index 1d4b5485e..9f65aed4b 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs @@ -9,6 +9,8 @@ using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.HOS.Kernel.Threading; using Ryujinx.HLE.HOS.Services.Ldn.Types; using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types; using Ryujinx.Horizon.Common; using Ryujinx.Memory; using System; @@ -21,6 +23,9 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator { class IUserLocalCommunicationService : IpcService, IDisposable { + public static string DefaultLanPlayHost = "ryuldn.vudjun.com"; + public static short LanPlayPort = 30456; + public INetworkClient NetworkClient { get; private set; } private const int NifmRequestID = 90; @@ -175,19 +180,37 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator if (_state == NetworkState.AccessPointCreated || _state == NetworkState.StationConnected) { - (_, UnicastIPAddressInformation unicastAddress) = NetworkHelpers.GetLocalInterface(context.Device.Configuration.MultiplayerLanInterfaceId); - - if (unicastAddress == null) + ProxyConfig config = _state switch { - context.ResponseData.Write(NetworkHelpers.ConvertIpv4Address(DefaultIPAddress)); - context.ResponseData.Write(NetworkHelpers.ConvertIpv4Address(DefaultSubnetMask)); + NetworkState.AccessPointCreated => _accessPoint.Config, + NetworkState.StationConnected => _station.Config, + + _ => default + }; + + if (config.ProxyIp == 0) + { + (_, UnicastIPAddressInformation unicastAddress) = NetworkHelpers.GetLocalInterface(context.Device.Configuration.MultiplayerLanInterfaceId); + + if (unicastAddress == null) + { + context.ResponseData.Write(NetworkHelpers.ConvertIpv4Address(DefaultIPAddress)); + context.ResponseData.Write(NetworkHelpers.ConvertIpv4Address(DefaultSubnetMask)); + } + else + { + Logger.Info?.Print(LogClass.ServiceLdn, $"Console's LDN IP is \"{unicastAddress.Address}\"."); + + context.ResponseData.Write(NetworkHelpers.ConvertIpv4Address(unicastAddress.Address)); + context.ResponseData.Write(NetworkHelpers.ConvertIpv4Address(unicastAddress.IPv4Mask)); + } } else { - Logger.Info?.Print(LogClass.ServiceLdn, $"Console's LDN IP is \"{unicastAddress.Address}\"."); + Logger.Info?.Print(LogClass.ServiceLdn, $"LDN obtained proxy IP."); - context.ResponseData.Write(NetworkHelpers.ConvertIpv4Address(unicastAddress.Address)); - context.ResponseData.Write(NetworkHelpers.ConvertIpv4Address(unicastAddress.IPv4Mask)); + context.ResponseData.Write(config.ProxyIp); + context.ResponseData.Write(config.ProxySubnetMask); } } else @@ -1066,6 +1089,27 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator switch (mode) { + case MultiplayerMode.LdnRyu: + try + { + string ldnServer = context.Device.Configuration.MultiplayerLdnServer; + if (string.IsNullOrEmpty(ldnServer)) + { + ldnServer = DefaultLanPlayHost; + } + if (!IPAddress.TryParse(ldnServer, out IPAddress ipAddress)) + { + ipAddress = Dns.GetHostEntry(ldnServer).AddressList[0]; + } + NetworkClient = new LdnMasterProxyClient(ipAddress.ToString(), LanPlayPort, context.Device.Configuration); + } + catch (Exception ex) + { + Logger.Error?.Print(LogClass.ServiceLdn, "Could not locate LdnRyu server. Defaulting to stubbed wireless."); + Logger.Error?.Print(LogClass.ServiceLdn, ex.Message); + NetworkClient = new LdnDisabledClient(); + } + break; case MultiplayerMode.LdnMitm: NetworkClient = new LdnMitmClient(context.Device.Configuration); break; @@ -1103,7 +1147,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator _accessPoint?.Dispose(); _accessPoint = null; - NetworkClient?.Dispose(); + NetworkClient?.DisconnectAndStop(); NetworkClient = null; } } diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnDisabledClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnDisabledClient.cs index e3385a1ed..2e8bb8d83 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnDisabledClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnDisabledClient.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Services.Ldn.Types; using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types; using System; @@ -6,12 +7,14 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator { class LdnDisabledClient : INetworkClient { + public ProxyConfig Config { get; } public bool NeedsRealId => true; public event EventHandler NetworkChange; public NetworkError Connect(ConnectRequest request) { + Logger.Warning?.PrintMsg(LogClass.ServiceLdn, "Attempted to connect to a network, but Multiplayer is disabled!"); NetworkChange?.Invoke(this, new NetworkChangeEventArgs(new NetworkInfo(), false)); return NetworkError.None; @@ -19,6 +22,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator public NetworkError ConnectPrivate(ConnectPrivateRequest request) { + Logger.Warning?.PrintMsg(LogClass.ServiceLdn, "Attempted to connect to a network, but Multiplayer is disabled!"); NetworkChange?.Invoke(this, new NetworkChangeEventArgs(new NetworkInfo(), false)); return NetworkError.None; @@ -26,6 +30,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator public bool CreateNetwork(CreateAccessPointRequest request, byte[] advertiseData) { + Logger.Warning?.PrintMsg(LogClass.ServiceLdn, "Attempted to create a network, but Multiplayer is disabled!"); NetworkChange?.Invoke(this, new NetworkChangeEventArgs(new NetworkInfo(), false)); return true; @@ -33,6 +38,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator public bool CreateNetworkPrivate(CreateAccessPointPrivateRequest request, byte[] advertiseData) { + Logger.Warning?.PrintMsg(LogClass.ServiceLdn, "Attempted to create a network, but Multiplayer is disabled!"); NetworkChange?.Invoke(this, new NetworkChangeEventArgs(new NetworkInfo(), false)); return true; @@ -49,6 +55,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator public NetworkInfo[] Scan(ushort channel, ScanFilter scanFilter) { + Logger.Warning?.PrintMsg(LogClass.ServiceLdn, "Attempted to scan for networks, but Multiplayer is disabled!"); return Array.Empty(); } diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs index 273acdd5e..40697d122 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs @@ -12,6 +12,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm /// internal class LdnMitmClient : INetworkClient { + public ProxyConfig Config { get; } public bool NeedsRealId => false; public event EventHandler NetworkChange; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/IProxyClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/IProxyClient.cs new file mode 100644 index 000000000..a7c435506 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/IProxyClient.cs @@ -0,0 +1,7 @@ +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu +{ + interface IProxyClient + { + bool SendAsync(byte[] buffer); + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs new file mode 100644 index 000000000..4c7814b8e --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs @@ -0,0 +1,645 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Common.Utilities; +using Ryujinx.HLE.HOS.Services.Ldn.Types; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types; +using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Proxy; +using Ryujinx.HLE.Utilities; +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using TcpClient = NetCoreServer.TcpClient; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu +{ + class LdnMasterProxyClient : TcpClient, INetworkClient, IProxyClient + { + public bool NeedsRealId => true; + + private static InitializeMessage InitializeMemory = new InitializeMessage(); + + private const int InactiveTimeout = 6000; + private const int FailureTimeout = 4000; + private const int ScanTimeout = 1000; + + private bool _useP2pProxy; + private NetworkError _lastError; + + private readonly ManualResetEvent _connected = new ManualResetEvent(false); + private readonly ManualResetEvent _error = new ManualResetEvent(false); + private readonly ManualResetEvent _scan = new ManualResetEvent(false); + private readonly ManualResetEvent _reject = new ManualResetEvent(false); + private readonly AutoResetEvent _apConnected = new AutoResetEvent(false); + + private readonly RyuLdnProtocol _protocol; + private readonly NetworkTimeout _timeout; + + private readonly List _availableGames = new List(); + private DisconnectReason _disconnectReason; + + private P2pProxyServer _hostedProxy; + private P2pProxyClient _connectedProxy; + + private bool _networkConnected; + + private string _passphrase; + private byte[] _gameVersion = new byte[0x10]; + + private readonly HLEConfiguration _config; + + public event EventHandler NetworkChange; + + public ProxyConfig Config { get; private set; } + + public LdnMasterProxyClient(string address, int port, HLEConfiguration config) : base(address, port) + { + if (ProxyHelpers.SupportsNoDelay()) + { + OptionNoDelay = true; + } + + _protocol = new RyuLdnProtocol(); + _timeout = new NetworkTimeout(InactiveTimeout, TimeoutConnection); + + _protocol.Initialize += HandleInitialize; + _protocol.Connected += HandleConnected; + _protocol.Reject += HandleReject; + _protocol.RejectReply += HandleRejectReply; + _protocol.SyncNetwork += HandleSyncNetwork; + _protocol.ProxyConfig += HandleProxyConfig; + _protocol.Disconnected += HandleDisconnected; + + _protocol.ScanReply += HandleScanReply; + _protocol.ScanReplyEnd += HandleScanReplyEnd; + _protocol.ExternalProxy += HandleExternalProxy; + + _protocol.Ping += HandlePing; + _protocol.NetworkError += HandleNetworkError; + + _config = config; + _useP2pProxy = !config.MultiplayerDisableP2p; + } + + private void TimeoutConnection() + { + _connected.Reset(); + + DisconnectAsync(); + + while (IsConnected) + { + Thread.Yield(); + } + } + + private bool EnsureConnected() + { + if (IsConnected) + { + return true; + } + + _error.Reset(); + + ConnectAsync(); + + int index = WaitHandle.WaitAny(new WaitHandle[] { _connected, _error }, FailureTimeout); + + if (IsConnected) + { + SendAsync(_protocol.Encode(PacketId.Initialize, InitializeMemory)); + } + + return index == 0 && IsConnected; + } + + private void UpdatePassphraseIfNeeded() + { + string passphrase = _config.MultiplayerLdnPassphrase ?? ""; + if (passphrase != _passphrase) + { + _passphrase = passphrase; + + SendAsync(_protocol.Encode(PacketId.Passphrase, StringUtils.GetFixedLengthBytes(passphrase, 0x80, Encoding.UTF8))); + } + } + + protected override void OnConnected() + { + Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"LDN TCP client connected a new session with Id {Id}"); + + UpdatePassphraseIfNeeded(); + + _connected.Set(); + } + + protected override void OnDisconnected() + { + Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"LDN TCP client disconnected a session with Id {Id}"); + + _passphrase = null; + + _connected.Reset(); + + if (_networkConnected) + { + DisconnectInternal(); + } + } + + public void DisconnectAndStop() + { + _timeout.Dispose(); + + DisconnectAsync(); + + while (IsConnected) + { + Thread.Yield(); + } + + Dispose(); + } + + protected override void OnReceived(byte[] buffer, long offset, long size) + { + _protocol.Read(buffer, (int)offset, (int)size); + } + + protected override void OnError(SocketError error) + { + Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"LDN TCP client caught an error with code {error}"); + + _error.Set(); + } + + + + private void HandleInitialize(LdnHeader header, InitializeMessage initialize) + { + InitializeMemory = initialize; + } + + private void HandleExternalProxy(LdnHeader header, ExternalProxyConfig config) + { + int length = config.AddressFamily switch + { + AddressFamily.InterNetwork => 4, + AddressFamily.InterNetworkV6 => 16, + _ => 0 + }; + + if (length == 0) + { + return; // Invalid external proxy. + } + + IPAddress address = new(config.ProxyIp.AsSpan()[..length].ToArray()); + P2pProxyClient proxy = new(address.ToString(), config.ProxyPort); + + _connectedProxy = proxy; + + bool success = proxy.PerformAuth(config); + + if (!success) + { + DisconnectInternal(); + } + } + + private void HandlePing(LdnHeader header, PingMessage ping) + { + if (ping.Requester == 0) // Server requested. + { + // Send the ping message back. + + SendAsync(_protocol.Encode(PacketId.Ping, ping)); + } + } + + private void HandleNetworkError(LdnHeader header, NetworkErrorMessage error) + { + if (error.Error == NetworkError.PortUnreachable) + { + _useP2pProxy = false; + } + else + { + _lastError = error.Error; + } + } + + private NetworkError ConsumeNetworkError() + { + NetworkError result = _lastError; + + _lastError = NetworkError.None; + + return result; + } + + private void HandleSyncNetwork(LdnHeader header, NetworkInfo info) + { + NetworkChange?.Invoke(this, new NetworkChangeEventArgs(info, true)); + } + + private void HandleConnected(LdnHeader header, NetworkInfo info) + { + _networkConnected = true; + _disconnectReason = DisconnectReason.None; + + _apConnected.Set(); + + NetworkChange?.Invoke(this, new NetworkChangeEventArgs(info, true)); + } + + private void HandleDisconnected(LdnHeader header, DisconnectMessage message) + { + DisconnectInternal(); + } + + private void HandleReject(LdnHeader header, RejectRequest reject) + { + // When the client receives a Reject request, we have been rejected and will be disconnected shortly. + _disconnectReason = reject.DisconnectReason; + } + + private void HandleRejectReply(LdnHeader header) + { + _reject.Set(); + } + + private void HandleScanReply(LdnHeader header, NetworkInfo info) + { + _availableGames.Add(info); + } + + private void HandleScanReplyEnd(LdnHeader obj) + { + _scan.Set(); + } + + private void DisconnectInternal() + { + if (_networkConnected) + { + _networkConnected = false; + + _hostedProxy?.Dispose(); + _hostedProxy = null; + + _connectedProxy?.Dispose(); + _connectedProxy = null; + + _apConnected.Reset(); + + NetworkChange?.Invoke(this, new NetworkChangeEventArgs(new NetworkInfo(), false, _disconnectReason)); + + if (IsConnected) + { + _timeout.RefreshTimeout(); + } + } + } + + public void DisconnectNetwork() + { + if (_networkConnected) + { + SendAsync(_protocol.Encode(PacketId.Disconnect, new DisconnectMessage())); + + DisconnectInternal(); + } + } + + public ResultCode Reject(DisconnectReason disconnectReason, uint nodeId) + { + if (_networkConnected) + { + _reject.Reset(); + + SendAsync(_protocol.Encode(PacketId.Reject, new RejectRequest(disconnectReason, nodeId))); + + int index = WaitHandle.WaitAny(new WaitHandle[] { _reject, _error }, InactiveTimeout); + + if (index == 0) + { + return (ConsumeNetworkError() != NetworkError.None) ? ResultCode.InvalidState : ResultCode.Success; + } + } + + return ResultCode.InvalidState; + } + + public void SetAdvertiseData(byte[] data) + { + // TODO: validate we're the owner (the server will do this anyways tho) + if (_networkConnected) + { + SendAsync(_protocol.Encode(PacketId.SetAdvertiseData, data)); + } + } + + public void SetGameVersion(byte[] versionString) + { + _gameVersion = versionString; + + if (_gameVersion.Length < 0x10) + { + Array.Resize(ref _gameVersion, 0x10); + } + } + + public void SetStationAcceptPolicy(AcceptPolicy acceptPolicy) + { + // TODO: validate we're the owner (the server will do this anyways tho) + if (_networkConnected) + { + SendAsync(_protocol.Encode(PacketId.SetAcceptPolicy, new SetAcceptPolicyRequest + { + StationAcceptPolicy = acceptPolicy + })); + } + } + + private void DisposeProxy() + { + _hostedProxy?.Dispose(); + _hostedProxy = null; + } + + private void ConfigureAccessPoint(ref RyuNetworkConfig request) + { + _gameVersion.AsSpan().CopyTo(request.GameVersion.AsSpan()); + + if (_useP2pProxy) + { + // Before sending the request, attempt to set up a proxy server. + // This can be on a range of private ports, which can be exposed on a range of public + // ports via UPnP. If any of this fails, we just fall back to using the master server. + + int i = 0; + for (; i < P2pProxyServer.PrivatePortRange; i++) + { + _hostedProxy = new P2pProxyServer(this, (ushort)(P2pProxyServer.PrivatePortBase + i), _protocol); + + try + { + _hostedProxy.Start(); + + break; + } + catch (SocketException e) + { + _hostedProxy.Dispose(); + _hostedProxy = null; + + if (e.SocketErrorCode != SocketError.AddressAlreadyInUse) + { + i = P2pProxyServer.PrivatePortRange; // Immediately fail. + } + } + } + + bool openSuccess = i < P2pProxyServer.PrivatePortRange; + + if (openSuccess) + { + Task natPunchResult = _hostedProxy.NatPunch(); + + try + { + if (natPunchResult.Result != 0) + { + // Tell the server that we are hosting the proxy. + request.ExternalProxyPort = natPunchResult.Result; + } + } + catch (Exception) { } + + if (request.ExternalProxyPort == 0) + { + Logger.Warning?.Print(LogClass.ServiceLdn, "Failed to open a port with UPnP for P2P connection. Proxying through the master server instead. Expect higher latency."); + _hostedProxy.Dispose(); + } + else + { + Logger.Info?.Print(LogClass.ServiceLdn, $"Created a wireless P2P network on port {request.ExternalProxyPort}."); + _hostedProxy.Start(); + + (_, UnicastIPAddressInformation unicastAddress) = NetworkHelpers.GetLocalInterface(); + + unicastAddress.Address.GetAddressBytes().AsSpan().CopyTo(request.PrivateIp.AsSpan()); + request.InternalProxyPort = _hostedProxy.PrivatePort; + request.AddressFamily = unicastAddress.Address.AddressFamily; + } + } + else + { + Logger.Warning?.Print(LogClass.ServiceLdn, "Cannot create a P2P server. Proxying through the master server instead. Expect higher latency."); + } + } + } + + private bool CreateNetworkCommon() + { + bool signalled = _apConnected.WaitOne(FailureTimeout); + + if (!_useP2pProxy && _hostedProxy != null) + { + Logger.Warning?.Print(LogClass.ServiceLdn, "Locally hosted proxy server was not externally reachable. Proxying through the master server instead. Expect higher latency."); + + DisposeProxy(); + } + + if (signalled && _connectedProxy != null) + { + _connectedProxy.EnsureProxyReady(); + + Config = _connectedProxy.ProxyConfig; + } + else + { + DisposeProxy(); + } + + return signalled; + } + + public bool CreateNetwork(CreateAccessPointRequest request, byte[] advertiseData) + { + _timeout.DisableTimeout(); + + ConfigureAccessPoint(ref request.RyuNetworkConfig); + + if (!EnsureConnected()) + { + DisposeProxy(); + + return false; + } + + UpdatePassphraseIfNeeded(); + + SendAsync(_protocol.Encode(PacketId.CreateAccessPoint, request, advertiseData)); + + // Send a network change event with dummy data immediately. Necessary to avoid crashes in some games + var networkChangeEvent = new NetworkChangeEventArgs(new NetworkInfo() + { + Common = new CommonNetworkInfo() + { + MacAddress = InitializeMemory.MacAddress, + Channel = request.NetworkConfig.Channel, + LinkLevel = 3, + NetworkType = 2, + Ssid = new Ssid() + { + Length = 32 + } + }, + Ldn = new LdnNetworkInfo() + { + AdvertiseDataSize = (ushort)advertiseData.Length, + AuthenticationId = 0, + NodeCount = 1, + NodeCountMax = request.NetworkConfig.NodeCountMax, + SecurityMode = (ushort)request.SecurityConfig.SecurityMode + } + }, true); + networkChangeEvent.Info.Ldn.Nodes[0] = new NodeInfo() + { + Ipv4Address = 175243265, + IsConnected = 1, + LocalCommunicationVersion = request.NetworkConfig.LocalCommunicationVersion, + MacAddress = InitializeMemory.MacAddress, + NodeId = 0, + UserName = request.UserConfig.UserName + }; + "12345678123456781234567812345678"u8.ToArray().CopyTo(networkChangeEvent.Info.Common.Ssid.Name.AsSpan()); + NetworkChange?.Invoke(this, networkChangeEvent); + + return CreateNetworkCommon(); + } + + public bool CreateNetworkPrivate(CreateAccessPointPrivateRequest request, byte[] advertiseData) + { + _timeout.DisableTimeout(); + + ConfigureAccessPoint(ref request.RyuNetworkConfig); + + if (!EnsureConnected()) + { + DisposeProxy(); + + return false; + } + + UpdatePassphraseIfNeeded(); + + SendAsync(_protocol.Encode(PacketId.CreateAccessPointPrivate, request, advertiseData)); + + return CreateNetworkCommon(); + } + + public NetworkInfo[] Scan(ushort channel, ScanFilter scanFilter) + { + if (!_networkConnected) + { + _timeout.RefreshTimeout(); + } + + _availableGames.Clear(); + + int index = -1; + + if (EnsureConnected()) + { + UpdatePassphraseIfNeeded(); + + _scan.Reset(); + + SendAsync(_protocol.Encode(PacketId.Scan, scanFilter)); + + index = WaitHandle.WaitAny(new WaitHandle[] { _scan, _error }, ScanTimeout); + } + + if (index != 0) + { + // An error occurred or timeout. Write 0 games. + return Array.Empty(); + } + + return _availableGames.ToArray(); + } + + private NetworkError ConnectCommon() + { + bool signalled = _apConnected.WaitOne(FailureTimeout); + + NetworkError error = ConsumeNetworkError(); + + if (error != NetworkError.None) + { + return error; + } + + if (signalled && _connectedProxy != null) + { + _connectedProxy.EnsureProxyReady(); + + Config = _connectedProxy.ProxyConfig; + } + + return signalled ? NetworkError.None : NetworkError.ConnectTimeout; + } + + public NetworkError Connect(ConnectRequest request) + { + _timeout.DisableTimeout(); + + if (!EnsureConnected()) + { + return NetworkError.Unknown; + } + + SendAsync(_protocol.Encode(PacketId.Connect, request)); + + var networkChangeEvent = new NetworkChangeEventArgs(new NetworkInfo() + { + Common = request.NetworkInfo.Common, + Ldn = request.NetworkInfo.Ldn + }, true); + + NetworkChange?.Invoke(this, networkChangeEvent); + + return ConnectCommon(); + } + + public NetworkError ConnectPrivate(ConnectPrivateRequest request) + { + _timeout.DisableTimeout(); + + if (!EnsureConnected()) + { + return NetworkError.Unknown; + } + + SendAsync(_protocol.Encode(PacketId.ConnectPrivate, request)); + + return ConnectCommon(); + } + + private void HandleProxyConfig(LdnHeader header, ProxyConfig config) + { + Config = config; + + SocketHelpers.RegisterProxy(new LdnProxy(config, this, _protocol)); + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/NetworkTimeout.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/NetworkTimeout.cs new file mode 100644 index 000000000..5012d5d81 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/NetworkTimeout.cs @@ -0,0 +1,83 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu +{ + class NetworkTimeout : IDisposable + { + private readonly int _idleTimeout; + private readonly Action _timeoutCallback; + private CancellationTokenSource _cancel; + + private readonly object _lock = new object(); + + public NetworkTimeout(int idleTimeout, Action timeoutCallback) + { + _idleTimeout = idleTimeout; + _timeoutCallback = timeoutCallback; + } + + private async Task TimeoutTask() + { + CancellationTokenSource cts; + + lock (_lock) + { + cts = _cancel; + } + + if (cts == null) + { + return; + } + + try + { + await Task.Delay(_idleTimeout, cts.Token); + } + catch (TaskCanceledException) + { + return; // Timeout cancelled. + } + + lock (_lock) + { + // Run the timeout callback. If the cancel token source has been replaced, we have _just_ been cancelled. + if (cts == _cancel) + { + _timeoutCallback(); + } + } + } + + public bool RefreshTimeout() + { + lock (_lock) + { + _cancel?.Cancel(); + + _cancel = new CancellationTokenSource(); + + Task.Run(TimeoutTask); + } + + return true; + } + + public void DisableTimeout() + { + lock (_lock) + { + _cancel?.Cancel(); + + _cancel = new CancellationTokenSource(); + } + } + + public void Dispose() + { + DisableTimeout(); + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs new file mode 100644 index 000000000..bc3a5edf2 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy +{ + public class EphemeralPortPool + { + private const ushort EphemeralBase = 49152; + + private readonly List _ephemeralPorts = new List(); + + private readonly object _lock = new object(); + + public ushort Get() + { + ushort port = EphemeralBase; + lock (_lock) + { + // Starting at the ephemeral port base, return an ephemeral port that is not in use. + // Returns 0 if the range is exhausted. + + for (int i = 0; i < _ephemeralPorts.Count; i++) + { + ushort existingPort = _ephemeralPorts[i]; + + if (existingPort > port) + { + // The port was free - take it. + _ephemeralPorts.Insert(i, port); + + return port; + } + + port++; + } + + if (port != 0) + { + _ephemeralPorts.Add(port); + } + + return port; + } + } + + public void Return(ushort port) + { + lock (_lock) + { + _ephemeralPorts.Remove(port); + } + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs new file mode 100644 index 000000000..bb390d49a --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs @@ -0,0 +1,254 @@ +using Ryujinx.Common.Logging; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types; +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy +{ + class LdnProxy : IDisposable + { + public EndPoint LocalEndpoint { get; } + public IPAddress LocalAddress { get; } + + private readonly List _sockets = new List(); + private readonly Dictionary _ephemeralPorts = new Dictionary(); + + private readonly IProxyClient _parent; + private RyuLdnProtocol _protocol; + private readonly uint _subnetMask; + private readonly uint _localIp; + private readonly uint _broadcast; + + public LdnProxy(ProxyConfig config, IProxyClient client, RyuLdnProtocol protocol) + { + _parent = client; + _protocol = protocol; + + _ephemeralPorts[ProtocolType.Udp] = new EphemeralPortPool(); + _ephemeralPorts[ProtocolType.Tcp] = new EphemeralPortPool(); + + byte[] address = BitConverter.GetBytes(config.ProxyIp); + Array.Reverse(address); + LocalAddress = new IPAddress(address); + + _subnetMask = config.ProxySubnetMask; + _localIp = config.ProxyIp; + _broadcast = _localIp | (~_subnetMask); + + RegisterHandlers(protocol); + } + + public bool Supported(AddressFamily domain, SocketType type, ProtocolType protocol) + { + if (protocol == ProtocolType.Tcp) + { + Logger.Error?.PrintMsg(LogClass.ServiceLdn, "Tcp proxy networking is untested. Please report this game so that it can be tested."); + } + return domain == AddressFamily.InterNetwork && (protocol == ProtocolType.Tcp || protocol == ProtocolType.Udp); + } + + private void RegisterHandlers(RyuLdnProtocol protocol) + { + protocol.ProxyConnect += HandleConnectionRequest; + protocol.ProxyConnectReply += HandleConnectionResponse; + protocol.ProxyData += HandleData; + protocol.ProxyDisconnect += HandleDisconnect; + + _protocol = protocol; + } + + public void UnregisterHandlers(RyuLdnProtocol protocol) + { + protocol.ProxyConnect -= HandleConnectionRequest; + protocol.ProxyConnectReply -= HandleConnectionResponse; + protocol.ProxyData -= HandleData; + protocol.ProxyDisconnect -= HandleDisconnect; + } + + public ushort GetEphemeralPort(ProtocolType type) + { + return _ephemeralPorts[type].Get(); + } + + public void ReturnEphemeralPort(ProtocolType type, ushort port) + { + _ephemeralPorts[type].Return(port); + } + + public void RegisterSocket(LdnProxySocket socket) + { + lock (_sockets) + { + _sockets.Add(socket); + } + } + + public void UnregisterSocket(LdnProxySocket socket) + { + lock (_sockets) + { + _sockets.Remove(socket); + } + } + + private void ForRoutedSockets(ProxyInfo info, Action action) + { + lock (_sockets) + { + foreach (LdnProxySocket socket in _sockets) + { + // Must match protocol and destination port. + if (socket.ProtocolType != info.Protocol || socket.LocalEndPoint is not IPEndPoint endpoint || endpoint.Port != info.DestPort) + { + continue; + } + + // We can assume packets routed to us have been sent to our destination. + // They will either be sent to us, or broadcast packets. + + action(socket); + } + } + } + + public void HandleConnectionRequest(LdnHeader header, ProxyConnectRequest request) + { + ForRoutedSockets(request.Info, (socket) => + { + socket.HandleConnectRequest(request); + }); + } + + public void HandleConnectionResponse(LdnHeader header, ProxyConnectResponse response) + { + ForRoutedSockets(response.Info, (socket) => + { + socket.HandleConnectResponse(response); + }); + } + + public void HandleData(LdnHeader header, ProxyDataHeader proxyHeader, byte[] data) + { + ProxyDataPacket packet = new ProxyDataPacket() { Header = proxyHeader, Data = data }; + + ForRoutedSockets(proxyHeader.Info, (socket) => + { + socket.IncomingData(packet); + }); + } + + public void HandleDisconnect(LdnHeader header, ProxyDisconnectMessage disconnect) + { + ForRoutedSockets(disconnect.Info, (socket) => + { + socket.HandleDisconnect(disconnect); + }); + } + + private uint GetIpV4(IPEndPoint endpoint) + { + if (endpoint.AddressFamily != AddressFamily.InterNetwork) + { + throw new NotSupportedException(); + } + + byte[] address = endpoint.Address.GetAddressBytes(); + Array.Reverse(address); + + return BitConverter.ToUInt32(address); + } + + private ProxyInfo MakeInfo(IPEndPoint localEp, IPEndPoint remoteEP, ProtocolType type) + { + return new ProxyInfo + { + SourceIpV4 = GetIpV4(localEp), + SourcePort = (ushort)localEp.Port, + + DestIpV4 = GetIpV4(remoteEP), + DestPort = (ushort)remoteEP.Port, + + Protocol = type + }; + } + + public void RequestConnection(IPEndPoint localEp, IPEndPoint remoteEp, ProtocolType type) + { + // We must ask the other side to initialize a connection, so they can accept a socket for us. + + ProxyConnectRequest request = new ProxyConnectRequest + { + Info = MakeInfo(localEp, remoteEp, type) + }; + + _parent.SendAsync(_protocol.Encode(PacketId.ProxyConnect, request)); + } + + public void SignalConnected(IPEndPoint localEp, IPEndPoint remoteEp, ProtocolType type) + { + // We must tell the other side that we have accepted their request for connection. + + ProxyConnectResponse request = new ProxyConnectResponse + { + Info = MakeInfo(localEp, remoteEp, type) + }; + + _parent.SendAsync(_protocol.Encode(PacketId.ProxyConnectReply, request)); + } + + public void EndConnection(IPEndPoint localEp, IPEndPoint remoteEp, ProtocolType type) + { + // We must tell the other side that our connection is dropped. + + ProxyDisconnectMessage request = new ProxyDisconnectMessage + { + Info = MakeInfo(localEp, remoteEp, type), + DisconnectReason = 0 // TODO + }; + + _parent.SendAsync(_protocol.Encode(PacketId.ProxyDisconnect, request)); + } + + public int SendTo(ReadOnlySpan buffer, SocketFlags flags, IPEndPoint localEp, IPEndPoint remoteEp, ProtocolType type) + { + // We send exactly as much as the user wants us to, currently instantly. + // TODO: handle over "virtual mtu" (we have a max packet size to worry about anyways). fragment if tcp? throw if udp? + + ProxyDataHeader request = new ProxyDataHeader + { + Info = MakeInfo(localEp, remoteEp, type), + DataLength = (uint)buffer.Length + }; + + _parent.SendAsync(_protocol.Encode(PacketId.ProxyData, request, buffer.ToArray())); + + return buffer.Length; + } + + public bool IsBroadcast(uint ip) + { + return ip == _broadcast; + } + + public bool IsMyself(uint ip) + { + return ip == _localIp; + } + + public void Dispose() + { + UnregisterHandlers(_protocol); + + lock (_sockets) + { + foreach (LdnProxySocket socket in _sockets) + { + socket.ProxyDestroyed(); + } + } + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs new file mode 100644 index 000000000..ed7a9c751 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs @@ -0,0 +1,797 @@ +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types; +using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl; +using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Proxy; +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using System.Threading; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy +{ + /// + /// This socket is forwarded through a TCP stream that goes through the Ldn server. + /// The Ldn server will then route the packets we send (or need to receive) within the virtual adhoc network. + /// + class LdnProxySocket : ISocketImpl + { + private readonly LdnProxy _proxy; + + private bool _isListening; + private readonly List _listenSockets = new List(); + + private readonly Queue _connectRequests = new Queue(); + + private readonly AutoResetEvent _acceptEvent = new AutoResetEvent(false); + private readonly int _acceptTimeout = -1; + + private readonly Queue _errors = new Queue(); + + private readonly AutoResetEvent _connectEvent = new AutoResetEvent(false); + private ProxyConnectResponse _connectResponse; + + private int _receiveTimeout = -1; + private readonly AutoResetEvent _receiveEvent = new AutoResetEvent(false); + private readonly Queue _receiveQueue = new Queue(); + + // private int _sendTimeout = -1; // Sends are techically instant right now, so not _really_ used. + + private bool _connecting; + private bool _broadcast; + private bool _readShutdown; + // private bool _writeShutdown; + private bool _closed; + + private readonly Dictionary _socketOptions = new Dictionary() + { + { SocketOptionName.Broadcast, 0 }, //TODO: honor this value + { SocketOptionName.DontLinger, 0 }, + { SocketOptionName.Debug, 0 }, + { SocketOptionName.Error, 0 }, + { SocketOptionName.KeepAlive, 0 }, + { SocketOptionName.OutOfBandInline, 0 }, + { SocketOptionName.ReceiveBuffer, 131072 }, + { SocketOptionName.ReceiveTimeout, -1 }, + { SocketOptionName.SendBuffer, 131072 }, + { SocketOptionName.SendTimeout, -1 }, + { SocketOptionName.Type, 0 }, + { SocketOptionName.ReuseAddress, 0 } //TODO: honor this value + }; + + public EndPoint RemoteEndPoint { get; private set; } + + public EndPoint LocalEndPoint { get; private set; } + + public bool Connected { get; private set; } + + public bool IsBound { get; private set; } + + public AddressFamily AddressFamily { get; } + + public SocketType SocketType { get; } + + public ProtocolType ProtocolType { get; } + + public bool Blocking { get; set; } + + public int Available + { + get + { + int result = 0; + + lock (_receiveQueue) + { + foreach (ProxyDataPacket data in _receiveQueue) + { + result += data.Data.Length; + } + } + + return result; + } + } + + public bool Readable + { + get + { + if (_isListening) + { + lock (_connectRequests) + { + return _connectRequests.Count > 0; + } + } + else + { + if (_readShutdown) + { + return true; + } + + lock (_receiveQueue) + { + return _receiveQueue.Count > 0; + } + } + + } + } + public bool Writable => Connected || ProtocolType == ProtocolType.Udp; + public bool Error => false; + + public LdnProxySocket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType, LdnProxy proxy) + { + AddressFamily = addressFamily; + SocketType = socketType; + ProtocolType = protocolType; + + _proxy = proxy; + _socketOptions[SocketOptionName.Type] = (int)socketType; + + proxy.RegisterSocket(this); + } + + private IPEndPoint EnsureLocalEndpoint(bool replace) + { + if (LocalEndPoint != null) + { + if (replace) + { + _proxy.ReturnEphemeralPort(ProtocolType, (ushort)((IPEndPoint)LocalEndPoint).Port); + } + else + { + return (IPEndPoint)LocalEndPoint; + } + } + + IPEndPoint localEp = new IPEndPoint(_proxy.LocalAddress, _proxy.GetEphemeralPort(ProtocolType)); + LocalEndPoint = localEp; + + return localEp; + } + + public LdnProxySocket AsAccepted(IPEndPoint remoteEp) + { + Connected = true; + RemoteEndPoint = remoteEp; + + IPEndPoint localEp = EnsureLocalEndpoint(true); + + _proxy.SignalConnected(localEp, remoteEp, ProtocolType); + + return this; + } + + private void SignalError(WsaError error) + { + lock (_errors) + { + _errors.Enqueue((int)error); + } + } + + private IPEndPoint GetEndpoint(uint ipv4, ushort port) + { + byte[] address = BitConverter.GetBytes(ipv4); + Array.Reverse(address); + + return new IPEndPoint(new IPAddress(address), port); + } + + public void IncomingData(ProxyDataPacket packet) + { + bool isBroadcast = _proxy.IsBroadcast(packet.Header.Info.DestIpV4); + + if (!_closed && (_broadcast || !isBroadcast)) + { + lock (_receiveQueue) + { + _receiveQueue.Enqueue(packet); + } + } + } + + public ISocketImpl Accept() + { + if (!_isListening) + { + throw new InvalidOperationException(); + } + + // Accept a pending request to this socket. + + lock (_connectRequests) + { + if (!Blocking && _connectRequests.Count == 0) + { + throw new SocketException((int)WsaError.WSAEWOULDBLOCK); + } + } + + while (true) + { + _acceptEvent.WaitOne(_acceptTimeout); + + lock (_connectRequests) + { + while (_connectRequests.Count > 0) + { + ProxyConnectRequest request = _connectRequests.Dequeue(); + + if (_connectRequests.Count > 0) + { + _acceptEvent.Set(); // Still more accepts to do. + } + + // Is this request made for us? + IPEndPoint endpoint = GetEndpoint(request.Info.DestIpV4, request.Info.DestPort); + + if (Equals(endpoint, LocalEndPoint)) + { + // Yes - let's accept. + IPEndPoint remoteEndpoint = GetEndpoint(request.Info.SourceIpV4, request.Info.SourcePort); + + LdnProxySocket socket = new LdnProxySocket(AddressFamily, SocketType, ProtocolType, _proxy).AsAccepted(remoteEndpoint); + + lock (_listenSockets) + { + _listenSockets.Add(socket); + } + + return socket; + } + } + } + } + } + + public void Bind(EndPoint localEP) + { + ArgumentNullException.ThrowIfNull(localEP); + + if (LocalEndPoint != null) + { + _proxy.ReturnEphemeralPort(ProtocolType, (ushort)((IPEndPoint)LocalEndPoint).Port); + } + var asIPEndpoint = (IPEndPoint)localEP; + if (asIPEndpoint.Port == 0) + { + asIPEndpoint.Port = (ushort)_proxy.GetEphemeralPort(ProtocolType); + } + + LocalEndPoint = (IPEndPoint)localEP; + + IsBound = true; + } + + public void Close() + { + _closed = true; + + _proxy.UnregisterSocket(this); + + if (Connected) + { + Disconnect(false); + } + + lock (_listenSockets) + { + foreach (LdnProxySocket socket in _listenSockets) + { + socket.Close(); + } + } + + _isListening = false; + } + + public void Connect(EndPoint remoteEP) + { + if (_isListening || !IsBound) + { + throw new InvalidOperationException(); + } + + if (remoteEP is not IPEndPoint) + { + throw new NotSupportedException(); + } + + IPEndPoint localEp = EnsureLocalEndpoint(true); + + _connecting = true; + + _proxy.RequestConnection(localEp, (IPEndPoint)remoteEP, ProtocolType); + + if (!Blocking && ProtocolType == ProtocolType.Tcp) + { + throw new SocketException((int)WsaError.WSAEWOULDBLOCK); + } + + _connectEvent.WaitOne(); //timeout? + + if (_connectResponse.Info.SourceIpV4 == 0) + { + throw new SocketException((int)WsaError.WSAECONNREFUSED); + } + + _connectResponse = default; + } + + public void HandleConnectResponse(ProxyConnectResponse obj) + { + if (!_connecting) + { + return; + } + + _connecting = false; + + if (_connectResponse.Info.SourceIpV4 != 0) + { + IPEndPoint remoteEp = GetEndpoint(obj.Info.SourceIpV4, obj.Info.SourcePort); + RemoteEndPoint = remoteEp; + + Connected = true; + } + else + { + // Connection failed + + SignalError(WsaError.WSAECONNREFUSED); + } + } + + public void Disconnect(bool reuseSocket) + { + if (Connected) + { + ConnectionEnded(); + + // The other side needs to be notified that connection ended. + _proxy.EndConnection(LocalEndPoint as IPEndPoint, RemoteEndPoint as IPEndPoint, ProtocolType); + } + } + + private void ConnectionEnded() + { + if (Connected) + { + RemoteEndPoint = null; + Connected = false; + } + } + + public void GetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, byte[] optionValue) + { + if (optionLevel != SocketOptionLevel.Socket) + { + throw new NotImplementedException(); + } + + if (_socketOptions.TryGetValue(optionName, out int result)) + { + byte[] data = BitConverter.GetBytes(result); + Array.Copy(data, 0, optionValue, 0, Math.Min(data.Length, optionValue.Length)); + } + else + { + throw new NotImplementedException(); + } + } + + public void Listen(int backlog) + { + if (!IsBound) + { + throw new SocketException(); + } + + _isListening = true; + } + + public void HandleConnectRequest(ProxyConnectRequest obj) + { + lock (_connectRequests) + { + _connectRequests.Enqueue(obj); + } + + _connectEvent.Set(); + } + + public void HandleDisconnect(ProxyDisconnectMessage message) + { + Disconnect(false); + } + + public int Receive(Span buffer) + { + EndPoint dummy = new IPEndPoint(IPAddress.Any, 0); + + return ReceiveFrom(buffer, SocketFlags.None, ref dummy); + } + + public int Receive(Span buffer, SocketFlags flags) + { + EndPoint dummy = new IPEndPoint(IPAddress.Any, 0); + + return ReceiveFrom(buffer, flags, ref dummy); + } + + public int Receive(Span buffer, SocketFlags flags, out SocketError socketError) + { + EndPoint dummy = new IPEndPoint(IPAddress.Any, 0); + + return ReceiveFrom(buffer, flags, out socketError, ref dummy); + } + + public int ReceiveFrom(Span buffer, SocketFlags flags, ref EndPoint remoteEp) + { + // We just receive all packets meant for us anyways regardless of EP in the actual implementation. + // The point is mostly to return the endpoint that we got the data from. + + if (!Connected && ProtocolType == ProtocolType.Tcp) + { + throw new SocketException((int)WsaError.WSAECONNRESET); + } + + lock (_receiveQueue) + { + if (_receiveQueue.Count > 0) + { + return ReceiveFromQueue(buffer, flags, ref remoteEp); + } + else if (_readShutdown) + { + return 0; + } + else if (!Blocking) + { + throw new SocketException((int)WsaError.WSAEWOULDBLOCK); + } + } + + int timeout = _receiveTimeout; + + _receiveEvent.WaitOne(timeout == 0 ? -1 : timeout); + + if (!Connected && ProtocolType == ProtocolType.Tcp) + { + throw new SocketException((int)WsaError.WSAECONNRESET); + } + + lock (_receiveQueue) + { + if (_receiveQueue.Count > 0) + { + return ReceiveFromQueue(buffer, flags, ref remoteEp); + } + else if (_readShutdown) + { + return 0; + } + else + { + throw new SocketException((int)WsaError.WSAETIMEDOUT); + } + } + } + + public int ReceiveFrom(Span buffer, SocketFlags flags, out SocketError socketError, ref EndPoint remoteEp) + { + // We just receive all packets meant for us anyways regardless of EP in the actual implementation. + // The point is mostly to return the endpoint that we got the data from. + + if (!Connected && ProtocolType == ProtocolType.Tcp) + { + socketError = SocketError.ConnectionReset; + return -1; + } + + lock (_receiveQueue) + { + if (_receiveQueue.Count > 0) + { + return ReceiveFromQueue(buffer, flags, out socketError, ref remoteEp); + } + else if (_readShutdown) + { + socketError = SocketError.Success; + return 0; + } + else if (!Blocking) + { + throw new SocketException((int)WsaError.WSAEWOULDBLOCK); + } + } + + int timeout = _receiveTimeout; + + _receiveEvent.WaitOne(timeout == 0 ? -1 : timeout); + + if (!Connected && ProtocolType == ProtocolType.Tcp) + { + throw new SocketException((int)WsaError.WSAECONNRESET); + } + + lock (_receiveQueue) + { + if (_receiveQueue.Count > 0) + { + return ReceiveFromQueue(buffer, flags, out socketError, ref remoteEp); + } + else if (_readShutdown) + { + socketError = SocketError.Success; + return 0; + } + else + { + socketError = SocketError.TimedOut; + return -1; + } + } + } + + private int ReceiveFromQueue(Span buffer, SocketFlags flags, ref EndPoint remoteEp) + { + int size = buffer.Length; + + // Assumes we have the receive queue lock, and at least one item in the queue. + ProxyDataPacket packet = _receiveQueue.Peek(); + + remoteEp = GetEndpoint(packet.Header.Info.SourceIpV4, packet.Header.Info.SourcePort); + + bool peek = (flags & SocketFlags.Peek) != 0; + + int read; + + if (packet.Data.Length > size) + { + read = size; + + // Cannot fit in the output buffer. Copy up to what we've got. + packet.Data.AsSpan(0, size).CopyTo(buffer); + + if (ProtocolType == ProtocolType.Udp) + { + // Udp overflows, loses the data, then throws an exception. + + if (!peek) + { + _receiveQueue.Dequeue(); + } + + throw new SocketException((int)WsaError.WSAEMSGSIZE); + } + else if (ProtocolType == ProtocolType.Tcp) + { + // Split the data at the buffer boundary. It will stay on the recieve queue. + + byte[] newData = new byte[packet.Data.Length - size]; + Array.Copy(packet.Data, size, newData, 0, newData.Length); + + packet.Data = newData; + } + } + else + { + read = packet.Data.Length; + + packet.Data.AsSpan(0, packet.Data.Length).CopyTo(buffer); + + if (!peek) + { + _receiveQueue.Dequeue(); + } + } + + return read; + } + + private int ReceiveFromQueue(Span buffer, SocketFlags flags, out SocketError socketError, ref EndPoint remoteEp) + { + int size = buffer.Length; + + // Assumes we have the receive queue lock, and at least one item in the queue. + ProxyDataPacket packet = _receiveQueue.Peek(); + + remoteEp = GetEndpoint(packet.Header.Info.SourceIpV4, packet.Header.Info.SourcePort); + + bool peek = (flags & SocketFlags.Peek) != 0; + + int read; + + if (packet.Data.Length > size) + { + read = size; + + // Cannot fit in the output buffer. Copy up to what we've got. + packet.Data.AsSpan(0, size).CopyTo(buffer); + + if (ProtocolType == ProtocolType.Udp) + { + // Udp overflows, loses the data, then throws an exception. + + if (!peek) + { + _receiveQueue.Dequeue(); + } + + socketError = SocketError.MessageSize; + return -1; + } + else if (ProtocolType == ProtocolType.Tcp) + { + // Split the data at the buffer boundary. It will stay on the recieve queue. + + byte[] newData = new byte[packet.Data.Length - size]; + Array.Copy(packet.Data, size, newData, 0, newData.Length); + + packet.Data = newData; + } + } + else + { + read = packet.Data.Length; + + packet.Data.AsSpan(0, packet.Data.Length).CopyTo(buffer); + + if (!peek) + { + _receiveQueue.Dequeue(); + } + } + + socketError = SocketError.Success; + + return read; + } + + public int Send(ReadOnlySpan buffer) + { + // Send to the remote host chosen when we "connect" or "accept". + if (!Connected) + { + throw new SocketException(); + } + + return SendTo(buffer, SocketFlags.None, RemoteEndPoint); + } + + public int Send(ReadOnlySpan buffer, SocketFlags flags) + { + // Send to the remote host chosen when we "connect" or "accept". + if (!Connected) + { + throw new SocketException(); + } + + return SendTo(buffer, flags, RemoteEndPoint); + } + + public int Send(ReadOnlySpan buffer, SocketFlags flags, out SocketError socketError) + { + // Send to the remote host chosen when we "connect" or "accept". + if (!Connected) + { + throw new SocketException(); + } + + return SendTo(buffer, flags, out socketError, RemoteEndPoint); + } + + public int SendTo(ReadOnlySpan buffer, SocketFlags flags, EndPoint remoteEP) + { + if (!Connected && ProtocolType == ProtocolType.Tcp) + { + throw new SocketException((int)WsaError.WSAECONNRESET); + } + + IPEndPoint localEp = EnsureLocalEndpoint(false); + + if (remoteEP is not IPEndPoint) + { + throw new NotSupportedException(); + } + + return _proxy.SendTo(buffer, flags, localEp, (IPEndPoint)remoteEP, ProtocolType); + } + + public int SendTo(ReadOnlySpan buffer, SocketFlags flags, out SocketError socketError, EndPoint remoteEP) + { + if (!Connected && ProtocolType == ProtocolType.Tcp) + { + socketError = SocketError.ConnectionReset; + return -1; + } + + IPEndPoint localEp = EnsureLocalEndpoint(false); + + if (remoteEP is not IPEndPoint) + { + // throw new NotSupportedException(); + socketError = SocketError.OperationNotSupported; + return -1; + } + + socketError = SocketError.Success; + + return _proxy.SendTo(buffer, flags, localEp, (IPEndPoint)remoteEP, ProtocolType); + } + + public bool Poll(int microSeconds, SelectMode mode) + { + return mode switch + { + SelectMode.SelectRead => Readable, + SelectMode.SelectWrite => Writable, + SelectMode.SelectError => Error, + _ => false + }; + } + + public void SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, int optionValue) + { + if (optionLevel != SocketOptionLevel.Socket) + { + throw new NotImplementedException(); + } + + switch (optionName) + { + case SocketOptionName.SendTimeout: + //_sendTimeout = optionValue; + break; + case SocketOptionName.ReceiveTimeout: + _receiveTimeout = optionValue; + break; + case SocketOptionName.Broadcast: + _broadcast = optionValue != 0; + break; + } + + lock (_socketOptions) + { + _socketOptions[optionName] = optionValue; + } + } + + public void SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, object optionValue) + { + // Just linger uses this for now in BSD, which we ignore. + } + + public void Shutdown(SocketShutdown how) + { + switch (how) + { + case SocketShutdown.Both: + _readShutdown = true; + // _writeShutdown = true; + break; + case SocketShutdown.Receive: + _readShutdown = true; + break; + case SocketShutdown.Send: + // _writeShutdown = true; + break; + } + } + + public void ProxyDestroyed() + { + // Do nothing, for now. Will likely be more useful with TCP. + } + + public void Dispose() + { + + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyClient.cs new file mode 100644 index 000000000..7da1aa998 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyClient.cs @@ -0,0 +1,93 @@ +using Ryujinx.Common.Logging; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types; +using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Proxy; +using System.Net.Sockets; +using System.Threading; +using TcpClient = NetCoreServer.TcpClient; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy +{ + class P2pProxyClient : TcpClient, IProxyClient + { + private const int FailureTimeout = 4000; + + public ProxyConfig ProxyConfig { get; private set; } + + private readonly RyuLdnProtocol _protocol; + + private readonly ManualResetEvent _connected = new ManualResetEvent(false); + private readonly ManualResetEvent _ready = new ManualResetEvent(false); + private readonly AutoResetEvent _error = new AutoResetEvent(false); + + public P2pProxyClient(string address, int port) : base(address, port) + { + if (ProxyHelpers.SupportsNoDelay()) + { + OptionNoDelay = true; + } + + _protocol = new RyuLdnProtocol(); + + _protocol.ProxyConfig += HandleProxyConfig; + + ConnectAsync(); + } + + protected override void OnConnected() + { + Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Proxy TCP client connected a new session with Id {Id}"); + + _connected.Set(); + } + + protected override void OnDisconnected() + { + Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Proxy TCP client disconnected a session with Id {Id}"); + + SocketHelpers.UnregisterProxy(); + + _connected.Reset(); + } + + protected override void OnReceived(byte[] buffer, long offset, long size) + { + _protocol.Read(buffer, (int)offset, (int)size); + } + + protected override void OnError(SocketError error) + { + Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Proxy TCP client caught an error with code {error}"); + + _error.Set(); + } + + private void HandleProxyConfig(LdnHeader header, ProxyConfig config) + { + ProxyConfig = config; + + SocketHelpers.RegisterProxy(new LdnProxy(config, this, _protocol)); + + _ready.Set(); + } + + public bool EnsureProxyReady() + { + return _ready.WaitOne(FailureTimeout); + } + + public bool PerformAuth(ExternalProxyConfig config) + { + bool signalled = _connected.WaitOne(FailureTimeout); + + if (!signalled) + { + return false; + } + + SendAsync(_protocol.Encode(PacketId.ExternalProxy, config)); + + return true; + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs new file mode 100644 index 000000000..598fb654f --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs @@ -0,0 +1,388 @@ +using NetCoreServer; +using Open.Nat; +using Ryujinx.Common.Logging; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using System.Threading.Tasks; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy +{ + class P2pProxyServer : TcpServer, IDisposable + { + public const ushort PrivatePortBase = 39990; + public const int PrivatePortRange = 10; + + private const ushort PublicPortBase = 39990; + private const int PublicPortRange = 10; + + private const ushort PortLeaseLength = 60; + private const ushort PortLeaseRenew = 50; + + private const ushort AuthWaitSeconds = 1; + + private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); + + public ushort PrivatePort { get; } + + private ushort _publicPort; + + private bool _disposed; + private readonly CancellationTokenSource _disposedCancellation = new CancellationTokenSource(); + + private NatDevice _natDevice; + private Mapping _portMapping; + + private readonly List _players = new List(); + + private readonly List _waitingTokens = new List(); + private readonly AutoResetEvent _tokenEvent = new AutoResetEvent(false); + + private uint _broadcastAddress; + + private readonly LdnMasterProxyClient _master; + private readonly RyuLdnProtocol _masterProtocol; + private readonly RyuLdnProtocol _protocol; + + public P2pProxyServer(LdnMasterProxyClient master, ushort port, RyuLdnProtocol masterProtocol) : base(IPAddress.Any, port) + { + if (ProxyHelpers.SupportsNoDelay()) + { + OptionNoDelay = true; + } + + PrivatePort = port; + + _master = master; + _masterProtocol = masterProtocol; + + _masterProtocol.ExternalProxyState += HandleStateChange; + _masterProtocol.ExternalProxyToken += HandleToken; + + _protocol = new RyuLdnProtocol(); + } + + private void HandleToken(LdnHeader header, ExternalProxyToken token) + { + _lock.EnterWriteLock(); + + _waitingTokens.Add(token); + + _lock.ExitWriteLock(); + + _tokenEvent.Set(); + } + + private void HandleStateChange(LdnHeader header, ExternalProxyConnectionState state) + { + if (!state.Connected) + { + _lock.EnterWriteLock(); + + _waitingTokens.RemoveAll(token => token.VirtualIp == state.IpAddress); + + _players.RemoveAll(player => + { + if (player.VirtualIpAddress == state.IpAddress) + { + player.DisconnectAndStop(); + + return true; + } + + return false; + }); + + _lock.ExitWriteLock(); + } + } + + public void Configure(ProxyConfig config) + { + _broadcastAddress = config.ProxyIp | (~config.ProxySubnetMask); + } + + public async Task NatPunch() + { + NatDiscoverer discoverer = new NatDiscoverer(); + CancellationTokenSource cts = new CancellationTokenSource(1000); + + NatDevice device; + + try + { + device = await discoverer.DiscoverDeviceAsync(PortMapper.Upnp, cts); + } + catch (NatDeviceNotFoundException) + { + return 0; + } + + _publicPort = PublicPortBase; + + for (int i = 0; i < PublicPortRange; i++) + { + try + { + _portMapping = new Mapping(Protocol.Tcp, PrivatePort, _publicPort, PortLeaseLength, "Ryujinx Local Multiplayer"); + + await device.CreatePortMapAsync(_portMapping); + + break; + } + catch (MappingException) + { + _publicPort++; + } + catch (Exception) + { + return 0; + } + + if (i == PublicPortRange - 1) + { + _publicPort = 0; + } + } + + if (_publicPort != 0) + { + _ = Task.Delay(PortLeaseRenew * 1000, _disposedCancellation.Token).ContinueWith((task) => Task.Run(RefreshLease)); + } + + _natDevice = device; + + return _publicPort; + } + + // Proxy handlers + + private void RouteMessage(P2pProxySession sender, ref ProxyInfo info, Action action) + { + if (info.SourceIpV4 == 0) + { + // If they sent from a connection bound on 0.0.0.0, make others see it as them. + info.SourceIpV4 = sender.VirtualIpAddress; + } + else if (info.SourceIpV4 != sender.VirtualIpAddress) + { + // Can't pretend to be somebody else. + return; + } + + uint destIp = info.DestIpV4; + + if (destIp == 0xc0a800ff) + { + destIp = _broadcastAddress; + } + + bool isBroadcast = destIp == _broadcastAddress; + + _lock.EnterReadLock(); + + if (isBroadcast) + { + _players.ForEach(player => + { + action(player); + }); + } + else + { + P2pProxySession target = _players.FirstOrDefault(player => player.VirtualIpAddress == destIp); + + if (target != null) + { + action(target); + } + } + + _lock.ExitReadLock(); + } + + public void HandleProxyDisconnect(P2pProxySession sender, LdnHeader header, ProxyDisconnectMessage message) + { + RouteMessage(sender, ref message.Info, (target) => + { + target.SendAsync(sender.Protocol.Encode(PacketId.ProxyDisconnect, message)); + }); + } + + public void HandleProxyData(P2pProxySession sender, LdnHeader header, ProxyDataHeader message, byte[] data) + { + RouteMessage(sender, ref message.Info, (target) => + { + target.SendAsync(sender.Protocol.Encode(PacketId.ProxyData, message, data)); + }); + } + + public void HandleProxyConnectReply(P2pProxySession sender, LdnHeader header, ProxyConnectResponse message) + { + RouteMessage(sender, ref message.Info, (target) => + { + target.SendAsync(sender.Protocol.Encode(PacketId.ProxyConnectReply, message)); + }); + } + + public void HandleProxyConnect(P2pProxySession sender, LdnHeader header, ProxyConnectRequest message) + { + RouteMessage(sender, ref message.Info, (target) => + { + target.SendAsync(sender.Protocol.Encode(PacketId.ProxyConnect, message)); + }); + } + + // End proxy handlers + + private async Task RefreshLease() + { + if (_disposed || _natDevice == null) + { + return; + } + + try + { + await _natDevice.CreatePortMapAsync(_portMapping); + } + catch (Exception) + { + + } + + _ = Task.Delay(PortLeaseRenew, _disposedCancellation.Token).ContinueWith((task) => Task.Run(RefreshLease)); + } + + public bool TryRegisterUser(P2pProxySession session, ExternalProxyConfig config) + { + _lock.EnterWriteLock(); + + // Attempt to find matching configuration. If we don't find one, wait for a bit and try again. + // Woken by new tokens coming in from the master server. + + IPAddress address = (session.Socket.RemoteEndPoint as IPEndPoint).Address; + byte[] addressBytes = ProxyHelpers.AddressTo16Byte(address); + + long time; + long endTime = Stopwatch.GetTimestamp() + Stopwatch.Frequency * AuthWaitSeconds; + + do + { + for (int i = 0; i < _waitingTokens.Count; i++) + { + ExternalProxyToken waitToken = _waitingTokens[i]; + + // Allow any client that has a private IP to connect. (indicated by the server as all 0 in the token) + + bool isPrivate = waitToken.PhysicalIp.AsSpan().SequenceEqual(new byte[16]); + bool ipEqual = isPrivate || waitToken.AddressFamily == address.AddressFamily && waitToken.PhysicalIp.AsSpan().SequenceEqual(addressBytes); + + if (ipEqual && waitToken.Token.AsSpan().SequenceEqual(config.Token.AsSpan())) + { + // This is a match. + + _waitingTokens.RemoveAt(i); + + session.SetIpv4(waitToken.VirtualIp); + + ProxyConfig pconfig = new ProxyConfig + { + ProxyIp = session.VirtualIpAddress, + ProxySubnetMask = 0xFFFF0000 // TODO: Use from server. + }; + + if (_players.Count == 0) + { + Configure(pconfig); + } + + _players.Add(session); + + session.SendAsync(_protocol.Encode(PacketId.ProxyConfig, pconfig)); + + _lock.ExitWriteLock(); + + return true; + } + } + + // Couldn't find the token. + // It may not have arrived yet, so wait for one to arrive. + + _lock.ExitWriteLock(); + + time = Stopwatch.GetTimestamp(); + int remainingMs = (int)((endTime - time) / (Stopwatch.Frequency / 1000)); + + if (remainingMs < 0) + { + remainingMs = 0; + } + + _tokenEvent.WaitOne(remainingMs); + + _lock.EnterWriteLock(); + + } while (time < endTime); + + _lock.ExitWriteLock(); + + return false; + } + + public void DisconnectProxyClient(P2pProxySession session) + { + _lock.EnterWriteLock(); + + bool removed = _players.Remove(session); + + if (removed) + { + _master.SendAsync(_masterProtocol.Encode(PacketId.ExternalProxyState, new ExternalProxyConnectionState + { + IpAddress = session.VirtualIpAddress, + Connected = false + })); + } + + _lock.ExitWriteLock(); + } + + public new void Dispose() + { + base.Dispose(); + + _disposed = true; + _disposedCancellation.Cancel(); + + try + { + Task delete = _natDevice?.DeletePortMapAsync(new Mapping(Protocol.Tcp, PrivatePort, _publicPort, 60, "Ryujinx Local Multiplayer")); + + // Just absorb any exceptions. + delete?.ContinueWith((task) => { }); + } + catch (Exception) + { + // Fail silently. + } + } + + protected override TcpSession CreateSession() + { + return new P2pProxySession(this); + } + + protected override void OnError(SocketError error) + { + Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Proxy TCP server caught an error with code {error}"); + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxySession.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxySession.cs new file mode 100644 index 000000000..515feeac5 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxySession.cs @@ -0,0 +1,90 @@ +using NetCoreServer; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types; +using System; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy +{ + class P2pProxySession : TcpSession + { + public uint VirtualIpAddress { get; private set; } + public RyuLdnProtocol Protocol { get; } + + private readonly P2pProxyServer _parent; + + private bool _masterClosed; + + public P2pProxySession(P2pProxyServer server) : base(server) + { + _parent = server; + + Protocol = new RyuLdnProtocol(); + + Protocol.ProxyDisconnect += HandleProxyDisconnect; + Protocol.ProxyData += HandleProxyData; + Protocol.ProxyConnectReply += HandleProxyConnectReply; + Protocol.ProxyConnect += HandleProxyConnect; + + Protocol.ExternalProxy += HandleAuthentication; + } + + private void HandleAuthentication(LdnHeader header, ExternalProxyConfig token) + { + if (!_parent.TryRegisterUser(this, token)) + { + Disconnect(); + } + } + + public void SetIpv4(uint ip) + { + VirtualIpAddress = ip; + } + + public void DisconnectAndStop() + { + _masterClosed = true; + + Disconnect(); + } + + protected override void OnDisconnected() + { + if (!_masterClosed) + { + _parent.DisconnectProxyClient(this); + } + } + + protected override void OnReceived(byte[] buffer, long offset, long size) + { + try + { + Protocol.Read(buffer, (int)offset, (int)size); + } + catch (Exception) + { + Disconnect(); + } + } + + private void HandleProxyDisconnect(LdnHeader header, ProxyDisconnectMessage message) + { + _parent.HandleProxyDisconnect(this, header, message); + } + + private void HandleProxyData(LdnHeader header, ProxyDataHeader message, byte[] data) + { + _parent.HandleProxyData(this, header, message, data); + } + + private void HandleProxyConnectReply(LdnHeader header, ProxyConnectResponse data) + { + _parent.HandleProxyConnectReply(this, header, data); + } + + private void HandleProxyConnect(LdnHeader header, ProxyConnectRequest message) + { + _parent.HandleProxyConnect(this, header, message); + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/ProxyHelpers.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/ProxyHelpers.cs new file mode 100644 index 000000000..42b1ab6a2 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/ProxyHelpers.cs @@ -0,0 +1,24 @@ +using System; +using System.Net; +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy +{ + static class ProxyHelpers + { + public static byte[] AddressTo16Byte(IPAddress address) + { + byte[] ipBytes = new byte[16]; + byte[] srcBytes = address.GetAddressBytes(); + + Array.Copy(srcBytes, 0, ipBytes, 0, srcBytes.Length); + + return ipBytes; + } + + public static bool SupportsNoDelay() + { + return RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/RyuLdnProtocol.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/RyuLdnProtocol.cs new file mode 100644 index 000000000..d0eeaf125 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/RyuLdnProtocol.cs @@ -0,0 +1,380 @@ +using Ryujinx.Common.Utilities; +using Ryujinx.HLE.HOS.Services.Ldn.Types; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types; +using System; +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu +{ + class RyuLdnProtocol + { + private const byte CurrentProtocolVersion = 1; + private const int Magic = ('R' << 0) | ('L' << 8) | ('D' << 16) | ('N' << 24); + private const int MaxPacketSize = 131072; + + private readonly int _headerSize = Marshal.SizeOf(); + + private readonly byte[] _buffer = new byte[MaxPacketSize]; + private int _bufferEnd = 0; + + // Client Packets. + public event Action Initialize; + public event Action Passphrase; + public event Action Connected; + public event Action SyncNetwork; + public event Action ScanReply; + public event Action ScanReplyEnd; + public event Action Disconnected; + + // External Proxy Packets. + public event Action ExternalProxy; + public event Action ExternalProxyState; + public event Action ExternalProxyToken; + + // Server Packets. + public event Action CreateAccessPoint; + public event Action CreateAccessPointPrivate; + public event Action Reject; + public event Action RejectReply; + public event Action SetAcceptPolicy; + public event Action SetAdvertiseData; + public event Action Connect; + public event Action ConnectPrivate; + public event Action Scan; + + // Proxy Packets. + public event Action ProxyConfig; + public event Action ProxyConnect; + public event Action ProxyConnectReply; + public event Action ProxyData; + public event Action ProxyDisconnect; + + // Lifecycle Packets. + public event Action NetworkError; + public event Action Ping; + + public RyuLdnProtocol() { } + + public void Reset() + { + _bufferEnd = 0; + } + + public void Read(byte[] data, int offset, int size) + { + int index = 0; + + while (index < size) + { + if (_bufferEnd < _headerSize) + { + // Assemble the header first. + + int copyable = Math.Min(size - index, Math.Min(size, _headerSize - _bufferEnd)); + + Array.Copy(data, index + offset, _buffer, _bufferEnd, copyable); + + index += copyable; + _bufferEnd += copyable; + } + + if (_bufferEnd >= _headerSize) + { + // The header is available. Make sure we received all the data (size specified in the header) + + LdnHeader ldnHeader = MemoryMarshal.Cast(_buffer)[0]; + + if (ldnHeader.Magic != Magic) + { + throw new InvalidOperationException("Invalid magic number in received packet."); + } + + if (ldnHeader.Version != CurrentProtocolVersion) + { + throw new InvalidOperationException($"Protocol version mismatch. Expected ${CurrentProtocolVersion}, was ${ldnHeader.Version}."); + } + + int finalSize = _headerSize + ldnHeader.DataSize; + + if (finalSize >= MaxPacketSize) + { + throw new InvalidOperationException($"Max packet size {MaxPacketSize} exceeded."); + } + + int copyable = Math.Min(size - index, Math.Min(size, finalSize - _bufferEnd)); + + Array.Copy(data, index + offset, _buffer, _bufferEnd, copyable); + + index += copyable; + _bufferEnd += copyable; + + if (finalSize == _bufferEnd) + { + // The full packet has been retrieved. Send it to be decoded. + + byte[] ldnData = new byte[ldnHeader.DataSize]; + + Array.Copy(_buffer, _headerSize, ldnData, 0, ldnData.Length); + + DecodeAndHandle(ldnHeader, ldnData); + + Reset(); + } + } + } + } + + private (T, byte[]) ParseWithData(byte[] data) where T : struct + { + T str = default; + int size = Marshal.SizeOf(str); + + byte[] remainder = new byte[data.Length - size]; + + if (remainder.Length > 0) + { + Array.Copy(data, size, remainder, 0, remainder.Length); + } + + return (MemoryMarshal.Read(data), remainder); + } + + private void DecodeAndHandle(LdnHeader header, byte[] data) + { + switch ((PacketId)header.Type) + { + // Client Packets. + case PacketId.Initialize: + { + Initialize?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.Passphrase: + { + Passphrase?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.Connected: + { + Connected?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.SyncNetwork: + { + SyncNetwork?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.ScanReply: + { + ScanReply?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + + case PacketId.ScanReplyEnd: + { + ScanReplyEnd?.Invoke(header); + + break; + } + case PacketId.Disconnect: + { + Disconnected?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + + // External Proxy Packets. + case PacketId.ExternalProxy: + { + ExternalProxy?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.ExternalProxyState: + { + ExternalProxyState?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.ExternalProxyToken: + { + ExternalProxyToken?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + + // Server Packets. + case PacketId.CreateAccessPoint: + { + (CreateAccessPointRequest packet, byte[] extraData) = ParseWithData(data); + CreateAccessPoint?.Invoke(header, packet, extraData); + break; + } + case PacketId.CreateAccessPointPrivate: + { + (CreateAccessPointPrivateRequest packet, byte[] extraData) = ParseWithData(data); + CreateAccessPointPrivate?.Invoke(header, packet, extraData); + break; + } + case PacketId.Reject: + { + Reject?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.RejectReply: + { + RejectReply?.Invoke(header); + + break; + } + case PacketId.SetAcceptPolicy: + { + SetAcceptPolicy?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.SetAdvertiseData: + { + SetAdvertiseData?.Invoke(header, data); + + break; + } + case PacketId.Connect: + { + Connect?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.ConnectPrivate: + { + ConnectPrivate?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.Scan: + { + Scan?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + + // Proxy Packets + case PacketId.ProxyConfig: + { + ProxyConfig?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.ProxyConnect: + { + ProxyConnect?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.ProxyConnectReply: + { + ProxyConnectReply?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.ProxyData: + { + (ProxyDataHeader packet, byte[] extraData) = ParseWithData(data); + + ProxyData?.Invoke(header, packet, extraData); + + break; + } + case PacketId.ProxyDisconnect: + { + ProxyDisconnect?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + + // Lifecycle Packets. + case PacketId.Ping: + { + Ping?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + case PacketId.NetworkError: + { + NetworkError?.Invoke(header, MemoryMarshal.Read(data)); + + break; + } + + default: + break; + } + } + + private static LdnHeader GetHeader(PacketId type, int dataSize) + { + return new LdnHeader() + { + Magic = Magic, + Version = CurrentProtocolVersion, + Type = (byte)type, + DataSize = dataSize + }; + } + + public byte[] Encode(PacketId type) + { + LdnHeader header = GetHeader(type, 0); + + return SpanHelpers.AsSpan(ref header).ToArray(); + } + + public byte[] Encode(PacketId type, byte[] data) + { + LdnHeader header = GetHeader(type, data.Length); + + byte[] result = SpanHelpers.AsSpan(ref header).ToArray(); + + Array.Resize(ref result, result.Length + data.Length); + Array.Copy(data, 0, result, Marshal.SizeOf(), data.Length); + + return result; + } + + public byte[] Encode(PacketId type, T packet) where T : unmanaged + { + byte[] packetData = SpanHelpers.AsSpan(ref packet).ToArray(); + + LdnHeader header = GetHeader(type, packetData.Length); + + byte[] result = SpanHelpers.AsSpan(ref header).ToArray(); + + Array.Resize(ref result, result.Length + packetData.Length); + Array.Copy(packetData, 0, result, Marshal.SizeOf(), packetData.Length); + + return result; + } + + public byte[] Encode(PacketId type, T packet, byte[] data) where T : unmanaged + { + byte[] packetData = SpanHelpers.AsSpan(ref packet).ToArray(); + + LdnHeader header = GetHeader(type, packetData.Length + data.Length); + + byte[] result = SpanHelpers.AsSpan(ref header).ToArray(); + + Array.Resize(ref result, result.Length + packetData.Length + data.Length); + Array.Copy(packetData, 0, result, Marshal.SizeOf(), packetData.Length); + Array.Copy(data, 0, result, Marshal.SizeOf() + packetData.Length, data.Length); + + return result; + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/DisconnectMessage.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/DisconnectMessage.cs new file mode 100644 index 000000000..448d33f29 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/DisconnectMessage.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0x4)] + struct DisconnectMessage + { + public uint DisconnectIP; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyConfig.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyConfig.cs new file mode 100644 index 000000000..9cbb80242 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyConfig.cs @@ -0,0 +1,19 @@ +using Ryujinx.Common.Memory; +using System.Net.Sockets; +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + /// + /// Sent by the server to point a client towards an external server being used as a proxy. + /// The client then forwards this to the external proxy after connecting, to verify the connection worked. + /// + [StructLayout(LayoutKind.Sequential, Size = 0x26, Pack = 1)] + struct ExternalProxyConfig + { + public Array16 ProxyIp; + public AddressFamily AddressFamily; + public ushort ProxyPort; + public Array16 Token; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyConnectionState.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyConnectionState.cs new file mode 100644 index 000000000..ecf4e14f7 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyConnectionState.cs @@ -0,0 +1,18 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + /// + /// Indicates a change in connection state for the given client. + /// Is sent to notify the master server when connection is first established. + /// Can be sent by the external proxy to the master server to notify it of a proxy disconnect. + /// Can be sent by the master server to notify the external proxy of a user leaving a room. + /// Both will result in a force kick. + /// + [StructLayout(LayoutKind.Sequential, Size = 0x8, Pack = 4)] + struct ExternalProxyConnectionState + { + public uint IpAddress; + public bool Connected; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyToken.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyToken.cs new file mode 100644 index 000000000..0a8980c37 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ExternalProxyToken.cs @@ -0,0 +1,20 @@ +using Ryujinx.Common.Memory; +using System.Net.Sockets; +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + /// + /// Sent by the master server to an external proxy to tell them someone is going to connect. + /// This drives authentication, and lets the proxy know what virtual IP to give to each joiner, + /// as these are managed by the master server. + /// + [StructLayout(LayoutKind.Sequential, Size = 0x28)] + struct ExternalProxyToken + { + public uint VirtualIp; + public Array16 Token; + public Array16 PhysicalIp; + public AddressFamily AddressFamily; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/InitializeMessage.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/InitializeMessage.cs new file mode 100644 index 000000000..36ddc65fe --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/InitializeMessage.cs @@ -0,0 +1,20 @@ +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + /// + /// This message is first sent by the client to identify themselves. + /// If the server has a token+mac combo that matches the submission, then they are returned their new ID and mac address. (the mac is also reassigned to the new id) + /// Otherwise, they are returned a random mac address. + /// + [StructLayout(LayoutKind.Sequential, Size = 0x16)] + struct InitializeMessage + { + // All 0 if we don't have an ID yet. + public Array16 Id; + + // All 0 if we don't have a mac yet. + public Array6 MacAddress; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/LdnHeader.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/LdnHeader.cs new file mode 100644 index 000000000..f41f15ab4 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/LdnHeader.cs @@ -0,0 +1,13 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0xA)] + struct LdnHeader + { + public uint Magic; + public byte Type; + public byte Version; + public int DataSize; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PacketId.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PacketId.cs new file mode 100644 index 000000000..b8ef5fbc1 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PacketId.cs @@ -0,0 +1,36 @@ +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + enum PacketId + { + Initialize, + Passphrase, + + CreateAccessPoint, + CreateAccessPointPrivate, + ExternalProxy, + ExternalProxyToken, + ExternalProxyState, + SyncNetwork, + Reject, + RejectReply, + Scan, + ScanReply, + ScanReplyEnd, + Connect, + ConnectPrivate, + Connected, + Disconnect, + + ProxyConfig, + ProxyConnect, + ProxyConnectReply, + ProxyData, + ProxyDisconnect, + + SetAcceptPolicy, + SetAdvertiseData, + + Ping = 254, + NetworkError = 255 + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PassphraseMessage.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PassphraseMessage.cs new file mode 100644 index 000000000..0deba0b07 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PassphraseMessage.cs @@ -0,0 +1,11 @@ +using Ryujinx.Common.Memory; +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0x80)] + struct PassphraseMessage + { + public Array128 Passphrase; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PingMessage.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PingMessage.cs new file mode 100644 index 000000000..135e39caa --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/PingMessage.cs @@ -0,0 +1,11 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0x2)] + struct PingMessage + { + public byte Requester; + public byte Id; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyConnectRequest.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyConnectRequest.cs new file mode 100644 index 000000000..ffce77791 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyConnectRequest.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0x10)] + struct ProxyConnectRequest + { + public ProxyInfo Info; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyConnectResponse.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyConnectResponse.cs new file mode 100644 index 000000000..de2e430fb --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyConnectResponse.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0x10)] + struct ProxyConnectResponse + { + public ProxyInfo Info; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDataHeader.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDataHeader.cs new file mode 100644 index 000000000..e46a40692 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDataHeader.cs @@ -0,0 +1,14 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + /// + /// Represents data sent over a transport layer. + /// + [StructLayout(LayoutKind.Sequential, Size = 0x14)] + struct ProxyDataHeader + { + public ProxyInfo Info; + public uint DataLength; // Followed by the data with the specified byte length. + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDataPacket.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDataPacket.cs new file mode 100644 index 000000000..eb3648413 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDataPacket.cs @@ -0,0 +1,8 @@ +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + class ProxyDataPacket + { + public ProxyDataHeader Header; + public byte[] Data; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDisconnectMessage.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDisconnectMessage.cs new file mode 100644 index 000000000..2154ae109 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyDisconnectMessage.cs @@ -0,0 +1,11 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0x14)] + struct ProxyDisconnectMessage + { + public ProxyInfo Info; + public int DisconnectReason; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyInfo.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyInfo.cs new file mode 100644 index 000000000..d9338f244 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/ProxyInfo.cs @@ -0,0 +1,20 @@ +using System.Net.Sockets; +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + /// + /// Information included in all proxied communication. + /// + [StructLayout(LayoutKind.Sequential, Size = 0x10, Pack = 1)] + struct ProxyInfo + { + public uint SourceIpV4; + public ushort SourcePort; + + public uint DestIpV4; + public ushort DestPort; + + public ProtocolType Protocol; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/RejectRequest.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/RejectRequest.cs new file mode 100644 index 000000000..1c2ce1f8b --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/RejectRequest.cs @@ -0,0 +1,18 @@ +using Ryujinx.HLE.HOS.Services.Ldn.Types; +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0x8)] + struct RejectRequest + { + public uint NodeId; + public DisconnectReason DisconnectReason; + + public RejectRequest(DisconnectReason disconnectReason, uint nodeId) + { + DisconnectReason = disconnectReason; + NodeId = nodeId; + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/RyuNetworkConfig.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/RyuNetworkConfig.cs new file mode 100644 index 000000000..f3bd72023 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/RyuNetworkConfig.cs @@ -0,0 +1,23 @@ +using Ryujinx.Common.Memory; +using System.Net.Sockets; +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0x28, Pack = 1)] + struct RyuNetworkConfig + { + public Array16 GameVersion; + + // PrivateIp is included for external proxies for the case where a client attempts to join from + // their own LAN. UPnP forwarding can fail when connecting devices on the same network over the public IP, + // so if their public IP is identical, the internal address should be sent instead. + + // The fields below are 0 if not hosting a p2p proxy. + + public Array16 PrivateIp; + public AddressFamily AddressFamily; + public ushort ExternalProxyPort; + public ushort InternalProxyPort; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/SetAcceptPolicyRequest.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/SetAcceptPolicyRequest.cs new file mode 100644 index 000000000..c4a969901 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Types/SetAcceptPolicyRequest.cs @@ -0,0 +1,11 @@ +using Ryujinx.HLE.HOS.Services.Ldn.Types; +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0x1, Pack = 1)] + struct SetAcceptPolicyRequest + { + public AcceptPolicy StationAcceptPolicy; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Station.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Station.cs index e39c01978..fa43f789e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Station.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Station.cs @@ -14,6 +14,8 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator public bool Connected { get; private set; } + public ProxyConfig Config => _parent.NetworkClient.Config; + public Station(IUserLocalCommunicationService parent) { _parent = parent; @@ -48,9 +50,12 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator public void Dispose() { - _parent.NetworkClient.DisconnectNetwork(); + if (_parent.NetworkClient != null) + { + _parent.NetworkClient.DisconnectNetwork(); - _parent.NetworkClient.NetworkChange -= NetworkChanged; + _parent.NetworkClient.NetworkChange -= NetworkChanged; + } } private ResultCode NetworkErrorToResult(NetworkError error) diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/CreateAccessPointPrivateRequest.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/CreateAccessPointPrivateRequest.cs index ac0ff7d94..0972c21c0 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/CreateAccessPointPrivateRequest.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/CreateAccessPointPrivateRequest.cs @@ -1,4 +1,5 @@ using Ryujinx.HLE.HOS.Services.Ldn.Types; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types; using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types @@ -14,5 +15,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types public UserConfig UserConfig; public NetworkConfig NetworkConfig; public AddressList AddressList; + + public RyuNetworkConfig RyuNetworkConfig; } } diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/CreateAccessPointRequest.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/CreateAccessPointRequest.cs index f67f0aac9..d2dc5b698 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/CreateAccessPointRequest.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/CreateAccessPointRequest.cs @@ -1,4 +1,5 @@ using Ryujinx.HLE.HOS.Services.Ldn.Types; +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Types; using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types @@ -6,11 +7,13 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types /// /// Advertise data is appended separately (remaining data in the buffer). /// - [StructLayout(LayoutKind.Sequential, Size = 0x94, CharSet = CharSet.Ansi)] + [StructLayout(LayoutKind.Sequential, Size = 0xBC, Pack = 1)] struct CreateAccessPointRequest { public SecurityConfig SecurityConfig; public UserConfig UserConfig; public NetworkConfig NetworkConfig; + + public RyuNetworkConfig RyuNetworkConfig; } } diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/ProxyConfig.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/ProxyConfig.cs new file mode 100644 index 000000000..c89c08bbe --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/Types/ProxyConfig.cs @@ -0,0 +1,11 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types +{ + [StructLayout(LayoutKind.Sequential, Size = 0x8)] + struct ProxyConfig + { + public uint ProxyIp; + public uint ProxySubnetMask; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs index 21d48288e..3a40a4ac5 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs @@ -95,7 +95,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd } } - ISocket newBsdSocket = new ManagedSocket(netDomain, (SocketType)type, protocol) + ISocket newBsdSocket = new ManagedSocket(netDomain, (SocketType)type, protocol, context.Device.Configuration.MultiplayerLanInterfaceId) { Blocking = !creationFlags.HasFlag(BsdSocketCreationFlags.NonBlocking), }; diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocket.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocket.cs index c9b811cf5..981fe0a8f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocket.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocket.cs @@ -1,4 +1,5 @@ using Ryujinx.Common.Logging; +using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Proxy; using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Types; using System; using System.Collections.Generic; @@ -21,21 +22,21 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl public bool Blocking { get => Socket.Blocking; set => Socket.Blocking = value; } - public nint Handle => Socket.Handle; + public nint Handle => IntPtr.Zero; public IPEndPoint RemoteEndPoint => Socket.RemoteEndPoint as IPEndPoint; public IPEndPoint LocalEndPoint => Socket.LocalEndPoint as IPEndPoint; - public Socket Socket { get; } + public ISocketImpl Socket { get; } - public ManagedSocket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType) + public ManagedSocket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType, string lanInterfaceId) { - Socket = new Socket(addressFamily, socketType, protocolType); + Socket = SocketHelpers.CreateSocket(addressFamily, socketType, protocolType, lanInterfaceId); Refcount = 1; } - private ManagedSocket(Socket socket) + private ManagedSocket(ISocketImpl socket) { Socket = socket; Refcount = 1; @@ -185,6 +186,8 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl } } + bool hasEmittedBlockingWarning = false; + public LinuxError Receive(out int receiveSize, Span buffer, BsdSocketFlags flags) { LinuxError result; @@ -199,6 +202,12 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl shouldBlockAfterOperation = true; } + if (Blocking && !hasEmittedBlockingWarning) + { + Logger.Warning?.PrintMsg(LogClass.ServiceBsd, "Blocking socket operations are not yet working properly. Expect network errors."); + hasEmittedBlockingWarning = true; + } + receiveSize = Socket.Receive(buffer, ConvertBsdSocketFlags(flags)); result = LinuxError.SUCCESS; @@ -236,6 +245,12 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl shouldBlockAfterOperation = true; } + if (Blocking && !hasEmittedBlockingWarning) + { + Logger.Warning?.PrintMsg(LogClass.ServiceBsd, "Blocking socket operations are not yet working properly. Expect network errors."); + hasEmittedBlockingWarning = true; + } + if (!Socket.IsBound) { receiveSize = -1; @@ -313,7 +328,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl Logger.Warning?.Print(LogClass.ServiceBsd, $"Unsupported GetSockOpt Option: {option} Level: {level}"); optionValue.Clear(); - return LinuxError.SUCCESS; + return LinuxError.EOPNOTSUPP; } byte[] tempOptionValue = new byte[optionValue.Length]; @@ -347,7 +362,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl { Logger.Warning?.Print(LogClass.ServiceBsd, $"Unsupported SetSockOpt Option: {option} Level: {level}"); - return LinuxError.SUCCESS; + return LinuxError.EOPNOTSUPP; } int value = optionValue.Length >= 4 ? MemoryMarshal.Read(optionValue) : MemoryMarshal.Read(optionValue); @@ -493,7 +508,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl try { - int receiveSize = Socket.Receive(ConvertMessagesToBuffer(message), ConvertBsdSocketFlags(flags), out SocketError socketError); + int receiveSize = (Socket as DefaultSocket).BaseSocket.Receive(ConvertMessagesToBuffer(message), ConvertBsdSocketFlags(flags), out SocketError socketError); if (receiveSize > 0) { @@ -531,7 +546,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl try { - int sendSize = Socket.Send(ConvertMessagesToBuffer(message), ConvertBsdSocketFlags(flags), out SocketError socketError); + int sendSize = (Socket as DefaultSocket).BaseSocket.Send(ConvertMessagesToBuffer(message), ConvertBsdSocketFlags(flags), out SocketError socketError); if (sendSize > 0) { diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs index d0db44086..e870e8aea 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs @@ -1,4 +1,5 @@ using Ryujinx.Common.Logging; +using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Proxy; using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Types; using System.Collections.Generic; using System.Net.Sockets; @@ -26,45 +27,46 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl public LinuxError Poll(List events, int timeoutMilliseconds, out int updatedCount) { - List readEvents = new(); - List writeEvents = new(); - List errorEvents = new(); + List readEvents = new(); + List writeEvents = new(); + List errorEvents = new(); updatedCount = 0; foreach (PollEvent evnt in events) { - ManagedSocket socket = (ManagedSocket)evnt.FileDescriptor; - - bool isValidEvent = evnt.Data.InputEvents == 0; - - errorEvents.Add(socket.Socket); - - if ((evnt.Data.InputEvents & PollEventTypeMask.Input) != 0) + if (evnt.FileDescriptor is ManagedSocket ms) { - readEvents.Add(socket.Socket); + bool isValidEvent = evnt.Data.InputEvents == 0; - isValidEvent = true; - } + errorEvents.Add(ms.Socket); - if ((evnt.Data.InputEvents & PollEventTypeMask.UrgentInput) != 0) - { - readEvents.Add(socket.Socket); + if ((evnt.Data.InputEvents & PollEventTypeMask.Input) != 0) + { + readEvents.Add(ms.Socket); - isValidEvent = true; - } + isValidEvent = true; + } - if ((evnt.Data.InputEvents & PollEventTypeMask.Output) != 0) - { - writeEvents.Add(socket.Socket); + if ((evnt.Data.InputEvents & PollEventTypeMask.UrgentInput) != 0) + { + readEvents.Add(ms.Socket); - isValidEvent = true; - } + isValidEvent = true; + } - if (!isValidEvent) - { - Logger.Warning?.Print(LogClass.ServiceBsd, $"Unsupported Poll input event type: {evnt.Data.InputEvents}"); - return LinuxError.EINVAL; + if ((evnt.Data.InputEvents & PollEventTypeMask.Output) != 0) + { + writeEvents.Add(ms.Socket); + + isValidEvent = true; + } + + if (!isValidEvent) + { + Logger.Warning?.Print(LogClass.ServiceBsd, $"Unsupported Poll input event type: {evnt.Data.InputEvents}"); + return LinuxError.EINVAL; + } } } @@ -72,7 +74,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl { int actualTimeoutMicroseconds = timeoutMilliseconds == -1 ? -1 : timeoutMilliseconds * 1000; - Socket.Select(readEvents, writeEvents, errorEvents, actualTimeoutMicroseconds); + SocketHelpers.Select(readEvents, writeEvents, errorEvents, actualTimeoutMicroseconds); } catch (SocketException exception) { @@ -81,34 +83,37 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl foreach (PollEvent evnt in events) { - Socket socket = ((ManagedSocket)evnt.FileDescriptor).Socket; - - PollEventTypeMask outputEvents = evnt.Data.OutputEvents & ~evnt.Data.InputEvents; - - if (errorEvents.Contains(socket)) + if (evnt.FileDescriptor is ManagedSocket ms) { - outputEvents |= PollEventTypeMask.Error; + ISocketImpl socket = ms.Socket; - if (!socket.Connected || !socket.IsBound) + PollEventTypeMask outputEvents = evnt.Data.OutputEvents & ~evnt.Data.InputEvents; + + if (errorEvents.Contains(ms.Socket)) { - outputEvents |= PollEventTypeMask.Disconnected; - } - } + outputEvents |= PollEventTypeMask.Error; - if (readEvents.Contains(socket)) - { - if ((evnt.Data.InputEvents & PollEventTypeMask.Input) != 0) + if (!socket.Connected || !socket.IsBound) + { + outputEvents |= PollEventTypeMask.Disconnected; + } + } + + if (readEvents.Contains(ms.Socket)) { - outputEvents |= PollEventTypeMask.Input; + if ((evnt.Data.InputEvents & PollEventTypeMask.Input) != 0) + { + outputEvents |= PollEventTypeMask.Input; + } } - } - if (writeEvents.Contains(socket)) - { - outputEvents |= PollEventTypeMask.Output; - } + if (writeEvents.Contains(ms.Socket)) + { + outputEvents |= PollEventTypeMask.Output; + } - evnt.Data.OutputEvents = outputEvents; + evnt.Data.OutputEvents = outputEvents; + } } updatedCount = readEvents.Count + writeEvents.Count + errorEvents.Count; @@ -118,53 +123,55 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl public LinuxError Select(List events, int timeout, out int updatedCount) { - List readEvents = new(); - List writeEvents = new(); - List errorEvents = new(); + List readEvents = new(); + List writeEvents = new(); + List errorEvents = new(); updatedCount = 0; foreach (PollEvent pollEvent in events) { - ManagedSocket socket = (ManagedSocket)pollEvent.FileDescriptor; - - if (pollEvent.Data.InputEvents.HasFlag(PollEventTypeMask.Input)) + if (pollEvent.FileDescriptor is ManagedSocket ms) { - readEvents.Add(socket.Socket); - } + if (pollEvent.Data.InputEvents.HasFlag(PollEventTypeMask.Input)) + { + readEvents.Add(ms.Socket); + } - if (pollEvent.Data.InputEvents.HasFlag(PollEventTypeMask.Output)) - { - writeEvents.Add(socket.Socket); - } + if (pollEvent.Data.InputEvents.HasFlag(PollEventTypeMask.Output)) + { + writeEvents.Add(ms.Socket); + } - if (pollEvent.Data.InputEvents.HasFlag(PollEventTypeMask.Error)) - { - errorEvents.Add(socket.Socket); + if (pollEvent.Data.InputEvents.HasFlag(PollEventTypeMask.Error)) + { + errorEvents.Add(ms.Socket); + } } } - Socket.Select(readEvents, writeEvents, errorEvents, timeout); + SocketHelpers.Select(readEvents, writeEvents, errorEvents, timeout); updatedCount = readEvents.Count + writeEvents.Count + errorEvents.Count; foreach (PollEvent pollEvent in events) { - ManagedSocket socket = (ManagedSocket)pollEvent.FileDescriptor; - - if (readEvents.Contains(socket.Socket)) + if (pollEvent.FileDescriptor is ManagedSocket ms) { - pollEvent.Data.OutputEvents |= PollEventTypeMask.Input; - } + if (readEvents.Contains(ms.Socket)) + { + pollEvent.Data.OutputEvents |= PollEventTypeMask.Input; + } - if (writeEvents.Contains(socket.Socket)) - { - pollEvent.Data.OutputEvents |= PollEventTypeMask.Output; - } + if (writeEvents.Contains(ms.Socket)) + { + pollEvent.Data.OutputEvents |= PollEventTypeMask.Output; + } - if (errorEvents.Contains(socket.Socket)) - { - pollEvent.Data.OutputEvents |= PollEventTypeMask.Error; + if (errorEvents.Contains(ms.Socket)) + { + pollEvent.Data.OutputEvents |= PollEventTypeMask.Error; + } } } diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/DefaultSocket.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/DefaultSocket.cs new file mode 100644 index 000000000..f1040e799 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/DefaultSocket.cs @@ -0,0 +1,178 @@ +using Ryujinx.Common.Utilities; +using System; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; + +namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Proxy +{ + class DefaultSocket : ISocketImpl + { + public Socket BaseSocket { get; } + + public EndPoint RemoteEndPoint => BaseSocket.RemoteEndPoint; + + public EndPoint LocalEndPoint => BaseSocket.LocalEndPoint; + + public bool Connected => BaseSocket.Connected; + + public bool IsBound => BaseSocket.IsBound; + + public AddressFamily AddressFamily => BaseSocket.AddressFamily; + + public SocketType SocketType => BaseSocket.SocketType; + + public ProtocolType ProtocolType => BaseSocket.ProtocolType; + + public bool Blocking { get => BaseSocket.Blocking; set => BaseSocket.Blocking = value; } + + public int Available => BaseSocket.Available; + + private readonly string _lanInterfaceId; + + public DefaultSocket(Socket baseSocket, string lanInterfaceId) + { + _lanInterfaceId = lanInterfaceId; + + BaseSocket = baseSocket; + } + + public DefaultSocket(AddressFamily domain, SocketType type, ProtocolType protocol, string lanInterfaceId) + { + _lanInterfaceId = lanInterfaceId; + + BaseSocket = new Socket(domain, type, protocol); + } + + private void EnsureNetworkInterfaceBound() + { + if (_lanInterfaceId != "0" && !BaseSocket.IsBound) + { + (_, UnicastIPAddressInformation ipInfo) = NetworkHelpers.GetLocalInterface(_lanInterfaceId); + + BaseSocket.Bind(new IPEndPoint(ipInfo.Address, 0)); + } + } + + public ISocketImpl Accept() + { + return new DefaultSocket(BaseSocket.Accept(), _lanInterfaceId); + } + + public void Bind(EndPoint localEP) + { + // NOTE: The guest is able to receive on 0.0.0.0 without it being limited to the chosen network interface. + // This is because it must get loopback traffic as well. This could allow other network traffic to leak in. + + BaseSocket.Bind(localEP); + } + + public void Close() + { + BaseSocket.Close(); + } + + public void Connect(EndPoint remoteEP) + { + EnsureNetworkInterfaceBound(); + + BaseSocket.Connect(remoteEP); + } + + public void Disconnect(bool reuseSocket) + { + BaseSocket.Disconnect(reuseSocket); + } + + public void GetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, byte[] optionValue) + { + BaseSocket.GetSocketOption(optionLevel, optionName, optionValue); + } + + public void Listen(int backlog) + { + BaseSocket.Listen(backlog); + } + + public int Receive(Span buffer) + { + EnsureNetworkInterfaceBound(); + + return BaseSocket.Receive(buffer); + } + + public int Receive(Span buffer, SocketFlags flags) + { + EnsureNetworkInterfaceBound(); + + return BaseSocket.Receive(buffer, flags); + } + + public int Receive(Span buffer, SocketFlags flags, out SocketError socketError) + { + EnsureNetworkInterfaceBound(); + + return BaseSocket.Receive(buffer, flags, out socketError); + } + + public int ReceiveFrom(Span buffer, SocketFlags flags, ref EndPoint remoteEP) + { + EnsureNetworkInterfaceBound(); + + return BaseSocket.ReceiveFrom(buffer, flags, ref remoteEP); + } + + public int Send(ReadOnlySpan buffer) + { + EnsureNetworkInterfaceBound(); + + return BaseSocket.Send(buffer); + } + + public int Send(ReadOnlySpan buffer, SocketFlags flags) + { + EnsureNetworkInterfaceBound(); + + return BaseSocket.Send(buffer, flags); + } + + public int Send(ReadOnlySpan buffer, SocketFlags flags, out SocketError socketError) + { + EnsureNetworkInterfaceBound(); + + return BaseSocket.Send(buffer, flags, out socketError); + } + + public int SendTo(ReadOnlySpan buffer, SocketFlags flags, EndPoint remoteEP) + { + EnsureNetworkInterfaceBound(); + + return BaseSocket.SendTo(buffer, flags, remoteEP); + } + + public bool Poll(int microSeconds, SelectMode mode) + { + return BaseSocket.Poll(microSeconds, mode); + } + + public void SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, int optionValue) + { + BaseSocket.SetSocketOption(optionLevel, optionName, optionValue); + } + + public void SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, object optionValue) + { + BaseSocket.SetSocketOption(optionLevel, optionName, optionValue); + } + + public void Shutdown(SocketShutdown how) + { + BaseSocket.Shutdown(how); + } + + public void Dispose() + { + BaseSocket.Dispose(); + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/ISocket.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/ISocket.cs new file mode 100644 index 000000000..b7055f08b --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/ISocket.cs @@ -0,0 +1,47 @@ +using System; +using System.Net; +using System.Net.Sockets; + +namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Proxy +{ + interface ISocketImpl : IDisposable + { + EndPoint RemoteEndPoint { get; } + EndPoint LocalEndPoint { get; } + bool Connected { get; } + bool IsBound { get; } + + AddressFamily AddressFamily { get; } + SocketType SocketType { get; } + ProtocolType ProtocolType { get; } + + bool Blocking { get; set; } + int Available { get; } + + int Receive(Span buffer); + int Receive(Span buffer, SocketFlags flags); + int Receive(Span buffer, SocketFlags flags, out SocketError socketError); + int ReceiveFrom(Span buffer, SocketFlags flags, ref EndPoint remoteEP); + + int Send(ReadOnlySpan buffer); + int Send(ReadOnlySpan buffer, SocketFlags flags); + int Send(ReadOnlySpan buffer, SocketFlags flags, out SocketError socketError); + int SendTo(ReadOnlySpan buffer, SocketFlags flags, EndPoint remoteEP); + + bool Poll(int microSeconds, SelectMode mode); + + ISocketImpl Accept(); + + void Bind(EndPoint localEP); + void Connect(EndPoint remoteEP); + void Listen(int backlog); + + void GetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, byte[] optionValue); + void SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, int optionValue); + void SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, object optionValue); + + void Shutdown(SocketShutdown how); + void Disconnect(bool reuseSocket); + void Close(); + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs new file mode 100644 index 000000000..485a7f86b --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs @@ -0,0 +1,74 @@ +using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Sockets; + +namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Proxy +{ + static class SocketHelpers + { + private static LdnProxy _proxy; + + public static void Select(List readEvents, List writeEvents, List errorEvents, int timeout) + { + var readDefault = readEvents.Select(x => (x as DefaultSocket)?.BaseSocket).Where(x => x != null).ToList(); + var writeDefault = writeEvents.Select(x => (x as DefaultSocket)?.BaseSocket).Where(x => x != null).ToList(); + var errorDefault = errorEvents.Select(x => (x as DefaultSocket)?.BaseSocket).Where(x => x != null).ToList(); + + if (readDefault.Count != 0 || writeDefault.Count != 0 || errorDefault.Count != 0) + { + Socket.Select(readDefault, writeDefault, errorDefault, timeout); + } + + void FilterSockets(List removeFrom, List selectedSockets, Func ldnCheck) + { + removeFrom.RemoveAll(socket => + { + switch (socket) + { + case DefaultSocket dsocket: + return !selectedSockets.Contains(dsocket.BaseSocket); + case LdnProxySocket psocket: + return !ldnCheck(psocket); + default: + throw new NotImplementedException(); + } + }); + }; + + FilterSockets(readEvents, readDefault, (socket) => socket.Readable); + FilterSockets(writeEvents, writeDefault, (socket) => socket.Writable); + FilterSockets(errorEvents, errorDefault, (socket) => socket.Error); + } + + public static void RegisterProxy(LdnProxy proxy) + { + if (_proxy != null) + { + UnregisterProxy(); + } + + _proxy = proxy; + } + + public static void UnregisterProxy() + { + _proxy?.Dispose(); + _proxy = null; + } + + public static ISocketImpl CreateSocket(AddressFamily domain, SocketType type, ProtocolType protocol, string lanInterfaceId) + { + if (_proxy != null) + { + if (_proxy.Supported(domain, type, protocol)) + { + return new LdnProxySocket(domain, type, protocol, _proxy); + } + } + + return new DefaultSocket(domain, type, protocol, lanInterfaceId); + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs index 39af90383..5b2de13f0 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs @@ -292,7 +292,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres { string host = MemoryHelper.ReadAsciiString(context.Memory, inputBufferPosition, (int)inputBufferSize); - if (!context.Device.Configuration.EnableInternetAccess) + if (host != "localhost" && !context.Device.Configuration.EnableInternetAccess) { Logger.Info?.Print(LogClass.ServiceSfdnsres, $"Guest network access disabled, DNS Blocked: {host}"); diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs index 8cc761baf..dc33dd6a5 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs @@ -1,5 +1,6 @@ using Ryujinx.HLE.HOS.Services.Sockets.Bsd; using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl; +using Ryujinx.HLE.HOS.Services.Sockets.Bsd.Proxy; using Ryujinx.HLE.HOS.Services.Ssl.Types; using System; using System.IO; @@ -116,7 +117,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService public ResultCode Handshake(string hostName) { StartSslOperation(); - _stream = new SslStream(new NetworkStream(((ManagedSocket)Socket).Socket, false), false, null, null); + _stream = new SslStream(new NetworkStream(((DefaultSocket)((ManagedSocket)Socket).Socket).BaseSocket, false), false, null, null); hostName = RetrieveHostName(hostName); _stream.AuthenticateAsClient(hostName, null, TranslateSslVersion(_sslVersion), false); EndSslOperation(); diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs index 10561a5a1..e187b2360 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs @@ -85,8 +85,8 @@ namespace Ryujinx.HLE.Loaders.Processes } // TODO: LibHac npdm currently doesn't support version field. - string version = ProgramId > 0x0100000000007FFF - ? DisplayVersion + string version = ProgramId > 0x0100000000007FFF + ? DisplayVersion : device.System.ContentManager.GetCurrentFirmwareVersion()?.VersionString ?? "?"; Logger.Info?.Print(LogClass.Loader, $"Application Loaded: {Name} v{version} [{ProgramIdText}] [{(Is64Bit ? "64-bit" : "32-bit")}]"); diff --git a/src/Ryujinx.HLE/Ryujinx.HLE.csproj b/src/Ryujinx.HLE/Ryujinx.HLE.csproj index a7bb3cd7f..5f7f6db69 100644 --- a/src/Ryujinx.HLE/Ryujinx.HLE.csproj +++ b/src/Ryujinx.HLE/Ryujinx.HLE.csproj @@ -29,6 +29,7 @@ + diff --git a/src/Ryujinx.Headless.SDL2/Program.cs b/src/Ryujinx.Headless.SDL2/Program.cs index 78cdb7718..e3bbd1e51 100644 --- a/src/Ryujinx.Headless.SDL2/Program.cs +++ b/src/Ryujinx.Headless.SDL2/Program.cs @@ -577,7 +577,10 @@ namespace Ryujinx.Headless.SDL2 options.AudioVolume, options.UseHypervisor ?? true, options.MultiplayerLanInterfaceId, - Common.Configuration.Multiplayer.MultiplayerMode.Disabled); + Common.Configuration.Multiplayer.MultiplayerMode.Disabled, + false, + "", + ""); return new Switch(configuration); } diff --git a/src/Ryujinx.UI.Common/App/ApplicationData.cs b/src/Ryujinx.UI.Common/App/ApplicationData.cs index 4c1c1a043..7aa0dccaa 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationData.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationData.cs @@ -27,6 +27,8 @@ namespace Ryujinx.UI.App.Common public ulong Id { get; set; } public string Developer { get; set; } = "Unknown"; public string Version { get; set; } = "0"; + public int PlayerCount { get; set; } + public int GameCount { get; set; } public TimeSpan TimePlayed { get; set; } public DateTime? LastPlayed { get; set; } public string FileExtension { get; set; } diff --git a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs index 044eccbea..174db51ad 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs @@ -12,6 +12,7 @@ using LibHac.Tools.Fs; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Common.Configuration; +using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE.FileSystem; @@ -27,10 +28,12 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Net.Http; using System.Reflection; using System.Text; using System.Text.Json; using System.Threading; +using System.Threading.Tasks; using ContentType = LibHac.Ncm.ContentType; using MissingKeyException = LibHac.Common.Keys.MissingKeyException; using Path = System.IO.Path; @@ -41,8 +44,10 @@ namespace Ryujinx.UI.App.Common { public class ApplicationLibrary { + public static string DefaultLanPlayWebHost = "ryuldnweb.vudjun.com"; public Language DesiredLanguage { get; set; } public event EventHandler ApplicationCountUpdated; + public event EventHandler LdnGameDataReceived; public readonly IObservableCache Applications; public readonly IObservableCache<(TitleUpdateModel TitleUpdate, bool IsSelected), TitleUpdateModel> TitleUpdates; @@ -62,6 +67,7 @@ namespace Ryujinx.UI.App.Common private readonly SourceCache<(DownloadableContentModel Dlc, bool IsEnabled), DownloadableContentModel> _downloadableContents = new(it => it.Dlc); private static readonly ApplicationJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); + private static readonly LdnGameDataSerializerContext _ldnDataSerializerContext = new(JsonHelper.GetDefaultSerializerOptions()); public ApplicationLibrary(VirtualFileSystem virtualFileSystem, IntegrityCheckLevel checkLevel) { @@ -687,7 +693,7 @@ namespace Ryujinx.UI.App.Common (Path.GetExtension(file).ToLower() is ".pfs0" && ConfigurationState.Instance.UI.ShownFileTypes.PFS0) || (Path.GetExtension(file).ToLower() is ".xci" && ConfigurationState.Instance.UI.ShownFileTypes.XCI) || (Path.GetExtension(file).ToLower() is ".nca" && ConfigurationState.Instance.UI.ShownFileTypes.NCA) || - (Path.GetExtension(file).ToLower() is ".nro" && ConfigurationState.Instance.UI.ShownFileTypes.NRO) || + (Path.GetExtension(file).ToLower() is ".nro" && ConfigurationState.Instance.UI.ShownFileTypes.NRO) || (Path.GetExtension(file).ToLower() is ".nso" && ConfigurationState.Instance.UI.ShownFileTypes.NSO) ); @@ -719,6 +725,7 @@ namespace Ryujinx.UI.App.Common } } + // Loops through applications list, creating a struct and then firing an event containing the struct for each application foreach (string applicationPath in applicationPaths) { @@ -775,6 +782,46 @@ namespace Ryujinx.UI.App.Common } } + public async Task RefreshLdn() + { + + if (ConfigurationState.Instance.Multiplayer.Mode == MultiplayerMode.LdnRyu) + { + try + { + string ldnWebHost = ConfigurationState.Instance.Multiplayer.LdnServer; + if (string.IsNullOrEmpty(ldnWebHost)) + { + ldnWebHost = DefaultLanPlayWebHost; + } + IEnumerable ldnGameDataArray = Array.Empty(); + using HttpClient httpClient = new HttpClient(); + string ldnGameDataArrayString = await httpClient.GetStringAsync($"https://{ldnWebHost}/api/public_games"); + ldnGameDataArray = JsonHelper.Deserialize(ldnGameDataArrayString, _ldnDataSerializerContext.IEnumerableLdnGameData); + var evt = new LdnGameDataReceivedEventArgs + { + LdnData = ldnGameDataArray + }; + LdnGameDataReceived?.Invoke(null, evt); + } + catch (Exception ex) + { + Logger.Warning?.Print(LogClass.Application, $"Failed to fetch the public games JSON from the API. Player and game count in the game list will be unavailable.\n{ex.Message}"); + LdnGameDataReceived?.Invoke(null, new LdnGameDataReceivedEventArgs() + { + LdnData = Array.Empty() + }); + } + } + else + { + LdnGameDataReceived?.Invoke(null, new LdnGameDataReceivedEventArgs() + { + LdnData = Array.Empty() + }); + } + } + // Replace the currently stored DLC state for the game with the provided DLC state. public void SaveDownloadableContentsForGame(ApplicationData application, List<(DownloadableContentModel, bool IsEnabled)> dlcs) { diff --git a/src/Ryujinx.UI.Common/App/LdnGameData.cs b/src/Ryujinx.UI.Common/App/LdnGameData.cs new file mode 100644 index 000000000..6c784c991 --- /dev/null +++ b/src/Ryujinx.UI.Common/App/LdnGameData.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; + +namespace Ryujinx.UI.App.Common +{ + public struct LdnGameData + { + public string Id { get; set; } + public int PlayerCount { get; set; } + public int MaxPlayerCount { get; set; } + public string GameName { get; set; } + public string TitleId { get; set; } + public string Mode { get; set; } + public string Status { get; set; } + public IEnumerable Players { get; set; } + } +} diff --git a/src/Ryujinx.UI.Common/App/LdnGameDataReceivedEventArgs.cs b/src/Ryujinx.UI.Common/App/LdnGameDataReceivedEventArgs.cs new file mode 100644 index 000000000..7c7454411 --- /dev/null +++ b/src/Ryujinx.UI.Common/App/LdnGameDataReceivedEventArgs.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; + +namespace Ryujinx.UI.App.Common +{ + public class LdnGameDataReceivedEventArgs : EventArgs + { + public IEnumerable LdnData { get; set; } + } +} diff --git a/src/Ryujinx.UI.Common/App/LdnGameDataSerializerContext.cs b/src/Ryujinx.UI.Common/App/LdnGameDataSerializerContext.cs new file mode 100644 index 000000000..ce8edcdb6 --- /dev/null +++ b/src/Ryujinx.UI.Common/App/LdnGameDataSerializerContext.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using System.Text.Json.Serialization; + +namespace Ryujinx.UI.App.Common +{ + [JsonSerializable(typeof(IEnumerable))] + internal partial class LdnGameDataSerializerContext : JsonSerializerContext + { + + } +} diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs index 77c6346f2..80ba1b186 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs @@ -392,6 +392,21 @@ namespace Ryujinx.UI.Common.Configuration /// public string MultiplayerLanInterfaceId { get; set; } + /// + /// Disable P2p Toggle + /// + public bool MultiplayerDisableP2p { get; set; } + + /// + /// Local network passphrase, for private networks. + /// + public string MultiplayerLdnPassphrase { get; set; } + + /// + /// Custom LDN Server + /// + public string LdnServer { get; set; } + /// /// Uses Hypervisor over JIT if available /// diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs index 18326a3a4..65dd88106 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs @@ -1,4 +1,4 @@ -using Ryujinx.Common.Configuration; +using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.Configuration.Hid.Keyboard; @@ -703,6 +703,9 @@ namespace Ryujinx.UI.Common.Configuration Multiplayer.LanInterfaceId.Value = configurationFileFormat.MultiplayerLanInterfaceId; Multiplayer.Mode.Value = configurationFileFormat.MultiplayerMode; + Multiplayer.DisableP2p.Value = configurationFileFormat.MultiplayerDisableP2p; + Multiplayer.LdnPassphrase.Value = configurationFileFormat.MultiplayerLdnPassphrase; + Multiplayer.LdnServer.Value = configurationFileFormat.LdnServer; if (configurationFileUpdated) { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs index 2b43b2032..9be8f4df7 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs @@ -13,7 +13,7 @@ namespace Ryujinx.UI.Common.Configuration { public partial class ConfigurationState { - /// + /// /// UI configuration section /// public class UISection @@ -25,6 +25,7 @@ namespace Ryujinx.UI.Common.Configuration public ReactiveObject AppColumn { get; private set; } public ReactiveObject DevColumn { get; private set; } public ReactiveObject VersionColumn { get; private set; } + public ReactiveObject LdnInfoColumn { get; private set; } public ReactiveObject TimePlayedColumn { get; private set; } public ReactiveObject LastPlayedColumn { get; private set; } public ReactiveObject FileExtColumn { get; private set; } @@ -38,6 +39,7 @@ namespace Ryujinx.UI.Common.Configuration AppColumn = new ReactiveObject(); DevColumn = new ReactiveObject(); VersionColumn = new ReactiveObject(); + LdnInfoColumn = new ReactiveObject(); TimePlayedColumn = new ReactiveObject(); LastPlayedColumn = new ReactiveObject(); FileExtColumn = new ReactiveObject(); @@ -572,11 +574,32 @@ namespace Ryujinx.UI.Common.Configuration /// public ReactiveObject Mode { get; private set; } + /// + /// Disable P2P + /// + public ReactiveObject DisableP2p { get; private set; } + + /// + /// LDN PassPhrase + /// + public ReactiveObject LdnPassphrase { get; private set; } + + /// + /// LDN Server + /// + public ReactiveObject LdnServer { get; private set; } + public MultiplayerSection() { LanInterfaceId = new ReactiveObject(); Mode = new ReactiveObject(); Mode.LogChangesToValue(nameof(MultiplayerMode)); + DisableP2p = new ReactiveObject(); + DisableP2p.LogChangesToValue(nameof(DisableP2p)); + LdnPassphrase = new ReactiveObject(); + LdnPassphrase.LogChangesToValue(nameof(LdnPassphrase)); + LdnServer = new ReactiveObject(); + LdnServer.LogChangesToValue(nameof(LdnServer)); } } diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs index 6fd5cfb93..b3012568e 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs @@ -21,11 +21,11 @@ namespace Ryujinx.UI.Common.Configuration if (Instance != null) { throw new InvalidOperationException("Configuration is already initialized"); - } + } Instance = new ConfigurationState(); - } - + } + public ConfigurationFileFormat ToFileFormat() { ConfigurationFileFormat configurationFile = new() @@ -87,6 +87,7 @@ namespace Ryujinx.UI.Common.Configuration AppColumn = UI.GuiColumns.AppColumn, DevColumn = UI.GuiColumns.DevColumn, VersionColumn = UI.GuiColumns.VersionColumn, + LdnInfoColumn = UI.GuiColumns.LdnInfoColumn, TimePlayedColumn = UI.GuiColumns.TimePlayedColumn, LastPlayedColumn = UI.GuiColumns.LastPlayedColumn, FileExtColumn = UI.GuiColumns.FileExtColumn, @@ -136,6 +137,9 @@ namespace Ryujinx.UI.Common.Configuration PreferredGpu = Graphics.PreferredGpu, MultiplayerLanInterfaceId = Multiplayer.LanInterfaceId, MultiplayerMode = Multiplayer.Mode, + MultiplayerDisableP2p = Multiplayer.DisableP2p, + MultiplayerLdnPassphrase = Multiplayer.LdnPassphrase, + LdnServer = Multiplayer.LdnServer, }; return configurationFile; @@ -195,6 +199,9 @@ namespace Ryujinx.UI.Common.Configuration System.UseHypervisor.Value = true; Multiplayer.LanInterfaceId.Value = "0"; Multiplayer.Mode.Value = MultiplayerMode.Disabled; + Multiplayer.DisableP2p.Value = false; + Multiplayer.LdnPassphrase.Value = ""; + Multiplayer.LdnServer.Value = ""; UI.GuiColumns.FavColumn.Value = true; UI.GuiColumns.IconColumn.Value = true; UI.GuiColumns.AppColumn.Value = true; @@ -307,5 +314,5 @@ namespace Ryujinx.UI.Common.Configuration return GraphicsBackend.OpenGl; } - } -} + } + } diff --git a/src/Ryujinx.UI.Common/Configuration/UI/GuiColumns.cs b/src/Ryujinx.UI.Common/Configuration/UI/GuiColumns.cs index c778ef1f1..c486492e0 100644 --- a/src/Ryujinx.UI.Common/Configuration/UI/GuiColumns.cs +++ b/src/Ryujinx.UI.Common/Configuration/UI/GuiColumns.cs @@ -7,6 +7,7 @@ namespace Ryujinx.UI.Common.Configuration.UI public bool AppColumn { get; set; } public bool DevColumn { get; set; } public bool VersionColumn { get; set; } + public bool LdnInfoColumn { get; set; } public bool TimePlayedColumn { get; set; } public bool LastPlayedColumn { get; set; } public bool FileExtColumn { get; set; } diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index dc4f4ff36..7246be4b9 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -207,6 +207,9 @@ namespace Ryujinx.Ava ConfigurationState.Instance.System.EnableInternetAccess.Event += UpdateEnableInternetAccessState; ConfigurationState.Instance.Multiplayer.LanInterfaceId.Event += UpdateLanInterfaceIdState; ConfigurationState.Instance.Multiplayer.Mode.Event += UpdateMultiplayerModeState; + ConfigurationState.Instance.Multiplayer.LdnPassphrase.Event += UpdateLdnPassphraseState; + ConfigurationState.Instance.Multiplayer.LdnServer.Event += UpdateLdnServerState; + ConfigurationState.Instance.Multiplayer.DisableP2p.Event += UpdateDisableP2pState; _gpuCancellationTokenSource = new CancellationTokenSource(); _gpuDoneEvent = new ManualResetEvent(false); @@ -491,6 +494,21 @@ namespace Ryujinx.Ava Device.Configuration.MultiplayerMode = e.NewValue; } + private void UpdateLdnPassphraseState(object sender, ReactiveEventArgs e) + { + Device.Configuration.MultiplayerLdnPassphrase = e.NewValue; + } + + private void UpdateLdnServerState(object sender, ReactiveEventArgs e) + { + Device.Configuration.MultiplayerLdnServer = e.NewValue; + } + + private void UpdateDisableP2pState(object sender, ReactiveEventArgs e) + { + Device.Configuration.MultiplayerDisableP2p = e.NewValue; + } + public void ToggleVSync() { Device.EnableDeviceVsync = !Device.EnableDeviceVsync; @@ -863,10 +881,11 @@ namespace Ryujinx.Ava ConfigurationState.Instance.Graphics.AspectRatio, ConfigurationState.Instance.System.AudioVolume, ConfigurationState.Instance.System.UseHypervisor, - ConfigurationState.Instance.Multiplayer.LanInterfaceId, - ConfigurationState.Instance.Multiplayer.Mode - ) - ); + ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value, + ConfigurationState.Instance.Multiplayer.Mode, + ConfigurationState.Instance.Multiplayer.DisableP2p, + ConfigurationState.Instance.Multiplayer.LdnPassphrase, + ConfigurationState.Instance.Multiplayer.LdnServer)); } private static IHardwareDeviceDriver InitializeAudio() @@ -1050,7 +1069,7 @@ namespace Ryujinx.Ava string dockedMode = ConfigurationState.Instance.System.EnableDockedMode ? LocaleManager.Instance[LocaleKeys.Docked] : LocaleManager.Instance[LocaleKeys.Handheld]; UpdateShaderCount(); - + if (GraphicsConfig.ResScale != 1) { dockedMode += $" ({GraphicsConfig.ResScale}x)"; diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index 88eb43ce4..fdd2d4df2 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -848,5 +848,17 @@ "MultiplayerMode": "Mode:", "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Disabled", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index 3247a55f8..b57caa468 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -99,7 +99,7 @@ namespace Ryujinx.Ava.Common.Locale _ => false }; - public static string FormatDynamicValue(LocaleKeys key, params object[] values) + public static string FormatDynamicValue(LocaleKeys key, params object[] values) => Instance.UpdateAndGetDynamicValue(key, values); public string UpdateAndGetDynamicValue(LocaleKeys key, params object[] values) diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 76512a34a..f78b8e972 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -103,7 +103,7 @@ namespace Ryujinx.Ava Console.Title = $"{App.FullAppName} Console {Version}"; // Hook unhandled exception and process exit events. - AppDomain.CurrentDomain.UnhandledException += (sender, e) + AppDomain.CurrentDomain.UnhandledException += (sender, e) => ProcessUnhandledException(sender, e.ExceptionObject as Exception, e.IsTerminating); AppDomain.CurrentDomain.ProcessExit += (_, _) => Exit(); @@ -229,11 +229,9 @@ namespace Ryujinx.Ava var enabledLogLevels = Logger.GetEnabledLevels().ToArray(); - Logger.Notice.Print(LogClass.Application, $"Logs Enabled: { - (enabledLogLevels.Length is 0 + Logger.Notice.Print(LogClass.Application, $"Logs Enabled: {(enabledLogLevels.Length is 0 ? "" - : enabledLogLevels.JoinToString(", ")) - }"); + : enabledLogLevels.JoinToString(", "))}"); Logger.Notice.Print(LogClass.Application, AppDataManager.Mode == AppDataManager.LaunchMode.Custom @@ -245,13 +243,13 @@ namespace Ryujinx.Ava { Logger.Log log = Logger.Error ?? Logger.Notice; string message = $"Unhandled exception caught: {ex}"; - + // ReSharper disable once ConstantConditionalAccessQualifier - if (sender?.GetType()?.AsPrettyString() is {} senderName) + if (sender?.GetType()?.AsPrettyString() is { } senderName) log.Print(LogClass.Application, message, senderName); else log.PrintMsg(LogClass.Application, message); - + if (isTerminating) Exit(); } diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index 1dbf37255..2ebba7ac0 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -31,7 +31,7 @@ namespace Ryujinx.Ava.UI.Applet public bool DisplayMessageDialog(ControllerAppletUIArgs args) { ManualResetEvent dialogCloseEvent = new(false); - + bool okPressed = false; if (ConfigurationState.Instance.IgnoreApplet) diff --git a/src/Ryujinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs b/src/Ryujinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs index 5ec7737ed..0cd3f18e5 100644 --- a/src/Ryujinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs @@ -24,7 +24,7 @@ namespace Ryujinx.Ava.UI.Applet public AvaloniaDynamicTextInputHandler(MainWindow parent) { _parent = parent; - + if (_parent.InputManager.KeyboardDriver is AvaloniaKeyboardDriver avaloniaKeyboardDriver) { avaloniaKeyboardDriver.KeyPressed += AvaloniaDynamicTextInputHandler_KeyPressed; @@ -121,7 +121,7 @@ namespace Ryujinx.Ava.UI.Applet avaloniaKeyboardDriver.KeyRelease -= AvaloniaDynamicTextInputHandler_KeyRelease; avaloniaKeyboardDriver.TextInput -= AvaloniaDynamicTextInputHandler_TextInput; } - + _textChangedSubscription?.Dispose(); _selectionStartChangedSubscription?.Dispose(); _selectionEndtextChangedSubscription?.Dispose(); diff --git a/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs b/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs index 3a8350893..ee0e884d2 100644 --- a/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs +++ b/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs @@ -37,8 +37,8 @@ namespace Ryujinx.Ava.UI.Applet public ControllerAppletDialog(MainWindow mainWindow, ControllerAppletUIArgs args) { - PlayerCount = args.PlayerCountMin == args.PlayerCountMax - ? args.PlayerCountMin.ToString() + PlayerCount = args.PlayerCountMin == args.PlayerCountMax + ? args.PlayerCountMin.ToString() : $"{args.PlayerCountMin} - {args.PlayerCountMax}"; SupportsProController = (args.SupportedStyles & ControllerType.ProController) != 0; diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml b/src/Ryujinx/UI/Controls/ApplicationListView.axaml index ea748a3bf..0daa77ac4 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml @@ -7,6 +7,7 @@ xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" + xmlns:converters="clr-namespace:Avalonia.Data.Converters;assembly=Avalonia.Base" d:DesignHeight="450" d:DesignWidth="800" Focusable="True" @@ -110,6 +111,11 @@ Text="{Binding FileExtension}" TextAlignment="Start" TextWrapping="Wrap" /> + UserFirmwareAvatarSelectorViewModel.PreloadAvatars(contentManager, virtualFileSystem)); - + InitializeComponent(); } @@ -60,13 +60,13 @@ namespace Ryujinx.Ava.UI.Controls LoadProfiles(); } - public void Navigate(Type sourcePageType, object parameter) + public void Navigate(Type sourcePageType, object parameter) => ContentFrame.Navigate(sourcePageType, parameter); public static async Task Show( - AccountManager ownerAccountManager, + AccountManager ownerAccountManager, ContentManager ownerContentManager, - VirtualFileSystem ownerVirtualFileSystem, + VirtualFileSystem ownerVirtualFileSystem, HorizonClient ownerHorizonClient) { var content = new NavigationDialogHost(ownerAccountManager, ownerContentManager, ownerVirtualFileSystem, ownerHorizonClient); @@ -158,9 +158,9 @@ namespace Ryujinx.Ava.UI.Controls _ = Dispatcher.UIThread.InvokeAsync(async () => await ContentDialogHelper.CreateErrorDialog( LocaleManager.Instance[LocaleKeys.DialogUserProfileDeletionWarningMessage])); - + return; - } + } AccountManager.OpenUser(profile.UserId); } diff --git a/src/Ryujinx/UI/Helpers/GlyphValueConverter.cs b/src/Ryujinx/UI/Helpers/GlyphValueConverter.cs index 94c3ab35d..6196421c8 100644 --- a/src/Ryujinx/UI/Helpers/GlyphValueConverter.cs +++ b/src/Ryujinx/UI/Helpers/GlyphValueConverter.cs @@ -22,9 +22,9 @@ namespace Ryujinx.Ava.UI.Helpers _key = key; } - public string this[string key] => + public string this[string key] => _glyphs.TryGetValue(Enum.Parse(key), out var val) - ? val + ? val : string.Empty; public override object ProvideValue(IServiceProvider serviceProvider) => this[_key]; diff --git a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs new file mode 100644 index 000000000..8bd8b5f0d --- /dev/null +++ b/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs @@ -0,0 +1,44 @@ +using Avalonia.Data.Converters; +using Avalonia.Markup.Xaml; +using Ryujinx.Ava.Common.Locale; +using Ryujinx.UI.App.Common; +using Ryujinx.UI.Common.Helper; +using System; +using System.Globalization; + +namespace Ryujinx.Ava.UI.Helpers +{ + internal class MultiplayerInfoConverter : MarkupExtension, IValueConverter + { + private static readonly MultiplayerInfoConverter _instance = new(); + + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value is ApplicationData applicationData) + { + if (applicationData.PlayerCount != 0 && applicationData.GameCount != 0) + { + return $"Hosted Games: {applicationData.GameCount}\nOnline Players: {applicationData.PlayerCount}"; + } + else + { + return ""; + } + } + else + { + return ""; + } + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotSupportedException(); + } + + public override object ProvideValue(IServiceProvider serviceProvider) + { + return _instance; + } + } +} diff --git a/src/Ryujinx/UI/Helpers/TimeZoneConverter.cs b/src/Ryujinx/UI/Helpers/TimeZoneConverter.cs index 5edc6482e..0e5525c7b 100644 --- a/src/Ryujinx/UI/Helpers/TimeZoneConverter.cs +++ b/src/Ryujinx/UI/Helpers/TimeZoneConverter.cs @@ -9,12 +9,12 @@ namespace Ryujinx.Ava.UI.Helpers { public static TimeZoneConverter Instance = new(); - public object Convert(object value, Type targetType, object parameter, CultureInfo culture) - => value is TimeZone timeZone - ? $"{timeZone.UtcDifference} {timeZone.Location} {timeZone.Abbreviation}" + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + => value is TimeZone timeZone + ? $"{timeZone.UtcDifference} {timeZone.Location} {timeZone.Abbreviation}" : null; - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException(); } } diff --git a/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs b/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs index f12cf0aa6..40f783c44 100644 --- a/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs +++ b/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs @@ -10,7 +10,7 @@ namespace Ryujinx.Ava.UI.Models public string DockedMode { get; } public string FifoStatus { get; } public string GameStatus { get; } - + public uint ShaderCount { get; } public StatusUpdatedEventArgs(bool vSyncEnabled, string volumeStatus, string dockedMode, string aspectRatio, string gameStatus, string fifoStatus, uint shaderCount) diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 437f9861d..53263847b 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -117,6 +117,8 @@ namespace Ryujinx.Ava.UI.ViewModels public ApplicationData ListSelectedApplication; public ApplicationData GridSelectedApplication; + public IEnumerable LastLdnGameData; + public static readonly Bitmap IconBitmap = new(Assembly.GetAssembly(typeof(ConfigurationState))!.GetManifestResourceStream("Ryujinx.UI.Common.Resources.Logo_Ryujinx.png")!); @@ -173,7 +175,7 @@ namespace Ryujinx.Ava.UI.ViewModels SwitchToGameControl = switchToGameControl; SetMainContent = setMainContent; TopLevel = topLevel; - + #if DEBUG topLevel.AttachDevTools(new KeyGesture(Avalonia.Input.Key.F12, KeyModifiers.Control)); #endif @@ -268,7 +270,7 @@ namespace Ryujinx.Ava.UI.ViewModels public bool ShowFirmwareStatus => !ShowLoadProgress; - public bool ShowRightmostSeparator + public bool ShowRightmostSeparator { get => _showRightmostSeparator; set @@ -553,7 +555,7 @@ namespace Ryujinx.Ava.UI.ViewModels OnPropertyChanged(); } } - + public string ShaderCountText { get => _shaderCountText; @@ -1021,7 +1023,7 @@ namespace Ryujinx.Ava.UI.ViewModels ? SortExpressionComparer.Ascending(selector) : SortExpressionComparer.Descending(selector); - private IComparer GetComparer() + private IComparer GetComparer() => SortMode switch { #pragma warning disable IDE0055 // Disable formatting @@ -1251,7 +1253,7 @@ namespace Ryujinx.Ava.UI.ViewModels private void InitializeGame() { RendererHostControl.WindowCreated += RendererHost_Created; - + AppHost.StatusUpdatedEvent += Update_StatusBar; AppHost.AppExit += AppHost_AppExit; @@ -1300,9 +1302,9 @@ namespace Ryujinx.Ava.UI.ViewModels GameStatusText = args.GameStatus; VolumeStatusText = args.VolumeStatus; FifoStatusText = args.FifoStatus; - - ShaderCountText = (ShowRightmostSeparator = args.ShaderCount > 0) - ? $"{LocaleManager.Instance[LocaleKeys.CompilingShaders]}: {args.ShaderCount}" + + ShaderCountText = (ShowRightmostSeparator = args.ShaderCount > 0) + ? $"{LocaleManager.Instance[LocaleKeys.CompilingShaders]}: {args.ShaderCount}" : string.Empty; ShowStatusSeparator = true; @@ -1707,7 +1709,7 @@ namespace Ryujinx.Ava.UI.ViewModels RendererHostControl.Focus(); }); - public static void UpdateGameMetadata(string titleId) + public static void UpdateGameMetadata(string titleId) => ApplicationLibrary.LoadAndSaveMetaData(titleId, appMetadata => appMetadata.UpdatePostGame()); public void RefreshFirmwareStatus() diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index f069896f8..2da252d00 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -25,12 +25,13 @@ using System.Collections.ObjectModel; using System.Linq; using System.Net.NetworkInformation; using System.Runtime.InteropServices; +using System.Text.RegularExpressions; using System.Threading.Tasks; using TimeZone = Ryujinx.Ava.UI.Models.TimeZone; namespace Ryujinx.Ava.UI.ViewModels { - public class SettingsViewModel : BaseModel + public partial class SettingsViewModel : BaseModel { private readonly VirtualFileSystem _virtualFileSystem; private readonly ContentManager _contentManager; @@ -56,6 +57,8 @@ namespace Ryujinx.Ava.UI.ViewModels public event Action SaveSettingsEvent; private int _networkInterfaceIndex; private int _multiplayerModeIndex; + private string _ldnPassphrase; + private string _LdnServer; public int ResolutionScale { @@ -180,10 +183,24 @@ namespace Ryujinx.Ava.UI.ViewModels public bool IsVulkanSelected => GraphicsBackendIndex == 0; public bool UseHypervisor { get; set; } + public bool DisableP2P { get; set; } public string TimeZone { get; set; } public string ShaderDumpPath { get; set; } + public string LdnPassphrase + { + get => _ldnPassphrase; + set + { + _ldnPassphrase = value; + IsInvalidLdnPassphraseVisible = !ValidateLdnPassphrase(value); + + OnPropertyChanged(); + OnPropertyChanged(nameof(IsInvalidLdnPassphraseVisible)); + } + } + public int Language { get; set; } public int Region { get; set; } public int FsGlobalAccessLogMode { get; set; } @@ -276,6 +293,21 @@ namespace Ryujinx.Ava.UI.ViewModels } } + [GeneratedRegex("Ryujinx-[0-9a-f]{8}")] + private static partial Regex LdnPassphraseRegex(); + + public bool IsInvalidLdnPassphraseVisible { get; set; } + + public string LdnServer + { + get => _LdnServer; + set + { + _LdnServer = value; + OnPropertyChanged(); + } + } + public SettingsViewModel(VirtualFileSystem virtualFileSystem, ContentManager contentManager) : this() { _virtualFileSystem = virtualFileSystem; @@ -393,6 +425,11 @@ namespace Ryujinx.Ava.UI.ViewModels Dispatcher.UIThread.Post(() => OnPropertyChanged(nameof(NetworkInterfaceIndex))); } + private bool ValidateLdnPassphrase(string passphrase) + { + return string.IsNullOrEmpty(passphrase) || (passphrase.Length == 16 && LdnPassphraseRegex().IsMatch(passphrase)); + } + public void ValidateAndSetTimeZone(string location) { if (_validTzRegions.Contains(location)) @@ -497,6 +534,9 @@ namespace Ryujinx.Ava.UI.ViewModels OpenglDebugLevel = (int)config.Logger.GraphicsDebugLevel.Value; MultiplayerModeIndex = (int)config.Multiplayer.Mode.Value; + DisableP2P = config.Multiplayer.DisableP2p.Value; + LdnPassphrase = config.Multiplayer.LdnPassphrase.Value; + LdnServer = config.Multiplayer.LdnServer.Value; } public void SaveSettings() @@ -613,6 +653,9 @@ namespace Ryujinx.Ava.UI.ViewModels config.Multiplayer.LanInterfaceId.Value = _networkInterfaces[NetworkInterfaceList[NetworkInterfaceIndex]]; config.Multiplayer.Mode.Value = (MultiplayerMode)MultiplayerModeIndex; + config.Multiplayer.DisableP2p.Value = DisableP2P; + config.Multiplayer.LdnPassphrase.Value = LdnPassphrase; + config.Multiplayer.LdnServer.Value = LdnServer; config.ToFileFormat().SaveConfig(Program.ConfigurationPath); diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 1acee3af5..ce4d9fd59 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -40,8 +40,8 @@ namespace Ryujinx.Ava.UI.Views.Main private CheckBox[] GenerateToggleFileTypeItems() => Enum.GetValues() .Select(it => (FileName: Enum.GetName(it)!, FileType: it)) - .Select(it => - new CheckBox + .Select(it => + new CheckBox { Content = $".{it.FileName}", IsChecked = it.FileType.GetConfigValue(ConfigurationState.Instance.UI.ShownFileTypes), diff --git a/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml index c7736bf8d..2fc59f04d 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml @@ -1,4 +1,4 @@ - + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs index b771933eb..c69307522 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsNetworkView.axaml.cs @@ -1,12 +1,29 @@ using Avalonia.Controls; +using Avalonia.Interactivity; +using Ryujinx.Ava.UI.ViewModels; +using System; namespace Ryujinx.Ava.UI.Views.Settings { public partial class SettingsNetworkView : UserControl { + public SettingsViewModel ViewModel; + public SettingsNetworkView() { InitializeComponent(); } + + private void GenLdnPassButton_OnClick(object sender, RoutedEventArgs e) + { + byte[] code = new byte[4]; + new Random().NextBytes(code); + ViewModel.LdnPassphrase = $"Ryujinx-{BitConverter.ToUInt32(code):x8}"; + } + + private void ClearLdnPassButton_OnClick(object sender, RoutedEventArgs e) + { + ViewModel.LdnPassphrase = ""; + } } } diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 24a1b62a2..a43c29518 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -154,6 +154,36 @@ namespace Ryujinx.Ava.UI.Windows }); } + private void ApplicationLibrary_LdnGameDataReceived(object sender, LdnGameDataReceivedEventArgs e) + { + Dispatcher.UIThread.Post(() => + { + var ldnGameDataArray = e.LdnData; + ViewModel.LastLdnGameData = ldnGameDataArray; + foreach (var application in ViewModel.Applications) + { + UpdateApplicationWithLdnData(application); + } + ViewModel.RefreshView(); + }); + } + + private void UpdateApplicationWithLdnData(ApplicationData application) + { + if (application.ControlHolder.ByteSpan.Length > 0 && ViewModel.LastLdnGameData != null) + { + IEnumerable ldnGameData = ViewModel.LastLdnGameData.Where(game => application.ControlHolder.Value.LocalCommunicationId.Items.Contains(Convert.ToUInt64(game.TitleId, 16))); + + application.PlayerCount = ldnGameData.Sum(game => game.PlayerCount); + application.GameCount = ldnGameData.Count(); + } + else + { + application.PlayerCount = 0; + application.GameCount = 0; + } + } + public void Application_Opened(object sender, ApplicationOpenedEventArgs args) { if (args.Application != null) @@ -450,7 +480,20 @@ namespace Ryujinx.Ava.UI.Windows .Connect() .ObserveOn(SynchronizationContext.Current!) .Bind(ViewModel.Applications) + .OnItemAdded(UpdateApplicationWithLdnData) .Subscribe(); + ApplicationLibrary.LdnGameDataReceived += ApplicationLibrary_LdnGameDataReceived; + + ConfigurationState.Instance.Multiplayer.Mode.Event += (sender, evt) => + { + _ = Task.Run(ViewModel.ApplicationLibrary.RefreshLdn); + }; + + ConfigurationState.Instance.Multiplayer.LdnServer.Event += (sender, evt) => + { + _ = Task.Run(ViewModel.ApplicationLibrary.RefreshLdn); + }; + _ = Task.Run(ViewModel.ApplicationLibrary.RefreshLdn); ViewModel.RefreshFirmwareStatus(); @@ -459,7 +502,7 @@ namespace Ryujinx.Ava.UI.Windows { LoadApplications(); } - + _ = CheckLaunchState(); } @@ -588,13 +631,26 @@ namespace Ryujinx.Ava.UI.Windows { switch (fileType) { - case "NSP": ConfigurationState.Instance.UI.ShownFileTypes.NSP.Toggle(); break; - case "PFS0": ConfigurationState.Instance.UI.ShownFileTypes.PFS0.Toggle(); break; - case "XCI": ConfigurationState.Instance.UI.ShownFileTypes.XCI.Toggle(); break; - case "NCA": ConfigurationState.Instance.UI.ShownFileTypes.NCA.Toggle(); break; - case "NRO": ConfigurationState.Instance.UI.ShownFileTypes.NRO.Toggle(); break; - case "NSO": ConfigurationState.Instance.UI.ShownFileTypes.NSO.Toggle(); break; - default: throw new ArgumentOutOfRangeException(fileType); + case "NSP": + ConfigurationState.Instance.UI.ShownFileTypes.NSP.Toggle(); + break; + case "PFS0": + ConfigurationState.Instance.UI.ShownFileTypes.PFS0.Toggle(); + break; + case "XCI": + ConfigurationState.Instance.UI.ShownFileTypes.XCI.Toggle(); + break; + case "NCA": + ConfigurationState.Instance.UI.ShownFileTypes.NCA.Toggle(); + break; + case "NRO": + ConfigurationState.Instance.UI.ShownFileTypes.NRO.Toggle(); + break; + case "NSO": + ConfigurationState.Instance.UI.ShownFileTypes.NSO.Toggle(); + break; + default: + throw new ArgumentOutOfRangeException(fileType); } ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath); diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs b/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs index 1a177d182..d8c88bed8 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs @@ -80,6 +80,7 @@ namespace Ryujinx.Ava.UI.Windows NavPanel.Content = AudioPage; break; case "NetworkPage": + NetworkPage.ViewModel = ViewModel; NavPanel.Content = NetworkPage; break; case "LoggingPage": diff --git a/src/Ryujinx/UI/Windows/StyleableWindow.cs b/src/Ryujinx/UI/Windows/StyleableWindow.cs index 493214ee2..9e4eed2e4 100644 --- a/src/Ryujinx/UI/Windows/StyleableWindow.cs +++ b/src/Ryujinx/UI/Windows/StyleableWindow.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Ava.UI.Windows LocaleManager.Instance.LocaleChanged += LocaleChanged; LocaleChanged(); - + Icon = MainWindowViewModel.IconBitmap; } -- 2.47.1 From e1dfb48e23cea779d3f6280bcd3f5916aeee3e55 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 11 Nov 2024 18:21:52 -0600 Subject: [PATCH 044/722] misc: Specify Normal or Canary in Version log line --- src/Ryujinx/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index f78b8e972..05fd66b90 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -224,7 +224,7 @@ namespace Ryujinx.Ava private static void PrintSystemInfo() { - Logger.Notice.Print(LogClass.Application, $"Ryujinx Version: {Version}"); + Logger.Notice.Print(LogClass.Application, $"{App.FullAppName} Version: {Version}"); SystemInfo.Gather().Print(); var enabledLogLevels = Logger.GetEnabledLevels().ToArray(); -- 2.47.1 From 4cb5946be425477825f14080e9f37088c0b80d99 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 11 Nov 2024 18:22:14 -0600 Subject: [PATCH 045/722] UI: RPC: Only show hours at maximum for play time --- src/Ryujinx.UI.Common/DiscordIntegrationModule.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs index 03dd9a41e..d4b2a4187 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs @@ -1,11 +1,10 @@ using DiscordRPC; using Humanizer; -using LibHac.Bcat; +using Humanizer.Localisation; using Ryujinx.Common; using Ryujinx.HLE.Loaders.Processes; using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Configuration; -using System.Collections.Generic; using System.Linq; using System.Text; @@ -78,13 +77,13 @@ namespace Ryujinx.UI.Common Assets = new Assets { LargeImageKey = _discordGameAssetKeys.Contains(procRes.ProgramIdText) ? procRes.ProgramIdText : "game", - LargeImageText = TruncateToByteLength($"{appMeta.Title} | {procRes.DisplayVersion}"), + LargeImageText = TruncateToByteLength($"{appMeta.Title} (v{procRes.DisplayVersion})"), SmallImageKey = "ryujinx", SmallImageText = TruncateToByteLength(_description) }, Details = TruncateToByteLength($"Playing {appMeta.Title}"), State = appMeta.LastPlayed.HasValue && appMeta.TimePlayed.TotalSeconds > 5 - ? $"Total play time: {appMeta.TimePlayed.Humanize(2, false)}" + ? $"Total play time: {appMeta.TimePlayed.Humanize(2, false, maxUnit: TimeUnit.Hour)}" : "Never played", Timestamps = Timestamps.Now }); -- 2.47.1 From 5fccfb76b9fa3806ad364a2aa6df820862665d52 Mon Sep 17 00:00:00 2001 From: extherian Date: Thu, 14 Nov 2024 02:36:59 +0000 Subject: [PATCH 046/722] Fix divide by zero when recovering from missed draw (Vulkan), authored by EmulationEnjoyer (#235) Adds the fix for the crash in the opening cutscene of Baldo: The Sacred Owls when using Vulkan, from ryujinx-mirror. The original discussion about the fix can be found [here.](https://github.com/ryujinx-mirror/ryujinx/pull/52) It's up to you if you want to merge this, it's one of the very few improvements that ryujinx-mirror got that hasn't made it into your fork yet. My opinion is that without a graphics expert on board, we can't know the real cause of this divide-by-zero issue and will have to make do with this patch to fix it. And I think we will have to do this many times in the future for other games that suffer crashes at the moment as well, at least going by current discussions in the #development section of the discord. I did not come up with this fix, all credit goes to [EmulationEnjoyer](https://github.com/EmulationEnjoyer) for putting Ryujinx through a debugger and discovering the cause of the crash. --- src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs b/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs index 6f27bb68b..ce1293589 100644 --- a/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs +++ b/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs @@ -55,8 +55,10 @@ namespace Ryujinx.Graphics.Vulkan if (_handle != BufferHandle.Null) { // May need to restride the vertex buffer. - - if (gd.NeedsVertexBufferAlignment(AttributeScalarAlignment, out int alignment) && (_stride % alignment) != 0) + // + // Fix divide by zero when recovering from missed draw (Oct. 16 2024) + // (fixes crash in 'Baldo: The Guardian Owls' opening cutscene) + if (gd.NeedsVertexBufferAlignment(AttributeScalarAlignment, out int alignment) && alignment != 0 && (_stride % alignment) != 0) { autoBuffer = gd.BufferManager.GetAlignedVertexBuffer(cbs, _handle, _offset, _size, _stride, alignment); -- 2.47.1 From cef88febb2ef7a52e2b8e8e7cf0cb0f6272f7f26 Mon Sep 17 00:00:00 2001 From: Luke Warner <65521430+LukeWarnut@users.noreply.github.com> Date: Wed, 13 Nov 2024 23:29:00 -0500 Subject: [PATCH 047/722] Implement IAllSystemAppletProxiesService: 350 (OpenSystemApplicationProxy) (#237) Implements IAllSystemAppletProxiesService: 350 (OpenSystemApplicationProxy) This fixes a crash that occurs when launching an NSP forwarder generated by Nro2Nsp. --- .../Am/AppletAE/IAllSystemAppletProxiesService.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/IAllSystemAppletProxiesService.cs b/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/IAllSystemAppletProxiesService.cs index 0a032562a..b8741b22b 100644 --- a/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/IAllSystemAppletProxiesService.cs +++ b/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/IAllSystemAppletProxiesService.cs @@ -1,4 +1,5 @@ using Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService; +using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService; namespace Ryujinx.HLE.HOS.Services.Am.AppletAE { @@ -25,5 +26,14 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE return ResultCode.Success; } + + [CommandCmif(350)] + // OpenSystemApplicationProxy(u64, pid, handle) -> object + public ResultCode OpenSystemApplicationProxy(ServiceCtx context) + { + MakeObject(context, new IApplicationProxy(context.Request.HandleDesc.PId)); + + return ResultCode.Success; + } } } -- 2.47.1 From 104701e80d1de0999cb79f4f8786982ea16b4920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hack=E8=8C=B6=E3=82=93?= <120134269+Hackjjang@users.noreply.github.com> Date: Thu, 14 Nov 2024 17:08:56 +0900 Subject: [PATCH 048/722] Updtate Korean translation! (#226) I participated in the Ryujinx Korean localisation through crowdin, but there were some parts that I couldn't express in my own colours because of the existing translation, but I started from scratch and coloured it with my own colours. There were some duplicates while editing, so I fixed them all. --- src/Ryujinx/Assets/Locales/ko_KR.json | 802 ++++++++++++++------------ 1 file changed, 427 insertions(+), 375 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 2a62c415d..0c02f44e5 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -2,97 +2,101 @@ "Language": "한국어", "MenuBarFileOpenApplet": "애플릿 열기", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "독립 실행형 모드로 Mii 편집기 애플릿 열기", - "SettingsTabInputDirectMouseAccess": "다이렉트 마우스 접근", - "SettingsTabSystemMemoryManagerMode": "메모리 관리자 모드:", + "SettingsTabInputDirectMouseAccess": "마우스 직접 접근", + "SettingsTabSystemMemoryManagerMode": "메모리 관리자 모드 :", "SettingsTabSystemMemoryManagerModeSoftware": "소프트웨어", - "SettingsTabSystemMemoryManagerModeHost": "호스트 (빠름)", - "SettingsTabSystemMemoryManagerModeHostUnchecked": "호스트 확인 안함 (가장 빠르나 안전하지 않음)", - "SettingsTabSystemUseHypervisor": "하이퍼바이저 사용하기", - "MenuBarFile": "_파일", - "MenuBarFileOpenFromFile": "_파일에서 응용 프로그램 불러오기", - "MenuBarFileOpenFromFileError": "No applications found in selected file.", - "MenuBarFileOpenUnpacked": "_압축을 푼 게임 불러오기", - "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", - "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", + "SettingsTabSystemMemoryManagerModeHost": "호스트(빠름)", + "SettingsTabSystemMemoryManagerModeHostUnchecked": "호스트 확인 안함(가장 빠르나 위험)", + "SettingsTabSystemUseHypervisor": "하이퍼바이저 사용", + "MenuBarFile": "파일(_F)", + "MenuBarFileOpenFromFile": "파일에서 앱 불러오기(_L)", + "MenuBarFileOpenFromFileError": "선택한 파일에서 앱을 찾을 수 없습니다.", + "MenuBarFileOpenUnpacked": "압축 푼 게임 불러오기(_U)", + "MenuBarFileLoadDlcFromFolder": "폴더에서 DLC 불러오기", + "MenuBarFileLoadTitleUpdatesFromFolder": "폴더에서 타이틀 업데이트 불러오기", "MenuBarFileOpenEmuFolder": "Ryujinx 폴더 열기", "MenuBarFileOpenLogsFolder": "로그 폴더 열기", - "MenuBarFileExit": "_종료", + "MenuBarFileExit": "종료(_E)", "MenuBarOptions": "옵션(_O)", - "MenuBarOptionsToggleFullscreen": "전체화면 전환", - "MenuBarOptionsStartGamesInFullscreen": "전체 화면 모드에서 게임 시작", + "MenuBarOptionsToggleFullscreen": "전체 화면 전환", + "MenuBarOptionsStartGamesInFullscreen": "전체 화면 모드로 게임 시작", "MenuBarOptionsStopEmulation": "에뮬레이션 중지", - "MenuBarOptionsSettings": "_설정", - "MenuBarOptionsManageUserProfiles": "_사용자 프로파일 관리", - "MenuBarActions": "_동작", - "MenuBarOptionsSimulateWakeUpMessage": "깨우기 메시지 시뮬레이션", + "MenuBarOptionsSettings": "설정(_S)", + "MenuBarOptionsManageUserProfiles": "사용자 프로필 관리(_M)", + "MenuBarActions": "동작(_A)", + "MenuBarOptionsSimulateWakeUpMessage": "웨이크업 메시지 시뮬레이션", "MenuBarActionsScanAmiibo": "Amiibo 스캔", - "MenuBarTools": "_도구", + "MenuBarTools": "도구(_T)", "MenuBarToolsInstallFirmware": "펌웨어 설치", - "MenuBarFileToolsInstallFirmwareFromFile": "XCI 또는 ZIP에서 펌웨어 설치", + "MenuBarFileToolsInstallFirmwareFromFile": "XCI 또는 ZIP으로 펌웨어 설치", "MenuBarFileToolsInstallFirmwareFromDirectory": "디렉터리에서 펌웨어 설치", "MenuBarToolsManageFileTypes": "파일 형식 관리", "MenuBarToolsInstallFileTypes": "파일 형식 설치", - "MenuBarToolsUninstallFileTypes": "파일 형식 설치 제거", - "MenuBarView": "_보기", - "MenuBarViewWindow": "창 크기", + "MenuBarToolsUninstallFileTypes": "파일 형식 제거", + "MenuBarToolsXCITrimmer": "XCI 파일 트리머", + "MenuBarView": "보기(_V)", + "MenuBarViewWindow": "윈도 창", "MenuBarViewWindow720": "720p", "MenuBarViewWindow1080": "1080p", "MenuBarHelp": "도움말(_H)", "MenuBarHelpCheckForUpdates": "업데이트 확인", "MenuBarHelpAbout": "정보", - "MenuSearch": "검색...", + "MenuSearch": "찾기...", "GameListHeaderFavorite": "즐겨찾기", "GameListHeaderIcon": "아이콘", "GameListHeaderApplication": "이름", "GameListHeaderDeveloper": "개발자", "GameListHeaderVersion": "버전", - "GameListHeaderTimePlayed": "플레이 시간", + "GameListHeaderTimePlayed": "플레이 타임", "GameListHeaderLastPlayed": "마지막 플레이", "GameListHeaderFileExtension": "파일 확장자", "GameListHeaderFileSize": "파일 크기", "GameListHeaderPath": "경로", "GameListContextMenuOpenUserSaveDirectory": "사용자 저장 디렉터리 열기", - "GameListContextMenuOpenUserSaveDirectoryToolTip": "응용프로그램의 사용자 저장이 포함된 디렉터리 열기", - "GameListContextMenuOpenDeviceSaveDirectory": "사용자 장치 디렉토리 열기", - "GameListContextMenuOpenDeviceSaveDirectoryToolTip": "응용프로그램의 장치 저장이 포함된 디렉터리 열기", + "GameListContextMenuOpenUserSaveDirectoryToolTip": "앱의 사용자 저장이 포함된 디렉터리 열기", + "GameListContextMenuOpenDeviceSaveDirectory": "기기 저장 디렉터리 열기", + "GameListContextMenuOpenDeviceSaveDirectoryToolTip": "앱의 장치 저장이 포함된 디렉터리 열기", "GameListContextMenuOpenBcatSaveDirectory": "BCAT 저장 디렉터리 열기", - "GameListContextMenuOpenBcatSaveDirectoryToolTip": "응용프로그램의 BCAT 저장이 포함된 디렉터리 열기", + "GameListContextMenuOpenBcatSaveDirectoryToolTip": "앱의 BCAT 저장이 포함된 디렉터리 열기", "GameListContextMenuManageTitleUpdates": "타이틀 업데이트 관리", "GameListContextMenuManageTitleUpdatesToolTip": "타이틀 업데이트 관리 창 열기", "GameListContextMenuManageDlc": "DLC 관리", "GameListContextMenuManageDlcToolTip": "DLC 관리 창 열기", "GameListContextMenuCacheManagement": "캐시 관리", "GameListContextMenuCacheManagementPurgePptc": "대기열 PPTC 재구성", - "GameListContextMenuCacheManagementPurgePptcToolTip": "다음 게임 시작에서 부팅 시 PPTC가 다시 빌드하도록 트리거", - "GameListContextMenuCacheManagementPurgeShaderCache": "셰이더 캐시 제거", - "GameListContextMenuCacheManagementPurgeShaderCacheToolTip": "응용프로그램 셰이더 캐시 삭제\n", + "GameListContextMenuCacheManagementPurgePptcToolTip": "다음 게임 실행 부팅 시, PPTC를 트리거하여 다시 구성", + "GameListContextMenuCacheManagementPurgeShaderCache": "퍼지 셰이더 캐시", + "GameListContextMenuCacheManagementPurgeShaderCacheToolTip": "앱의 셰이더 캐시 삭제", "GameListContextMenuCacheManagementOpenPptcDirectory": "PPTC 디렉터리 열기", - "GameListContextMenuCacheManagementOpenPptcDirectoryToolTip": "응용프로그램 PPTC 캐시가 포함된 디렉터리 열기", + "GameListContextMenuCacheManagementOpenPptcDirectoryToolTip": "앱의 PPTC 캐시가 포함된 디렉터리 열기", "GameListContextMenuCacheManagementOpenShaderCacheDirectory": "셰이더 캐시 디렉터리 열기", - "GameListContextMenuCacheManagementOpenShaderCacheDirectoryToolTip": "응용프로그램 셰이더 캐시가 포함된 디렉터리 열기", + "GameListContextMenuCacheManagementOpenShaderCacheDirectoryToolTip": "앱의 셰이더 캐시가 포함된 디렉터리 열기", "GameListContextMenuExtractData": "데이터 추출", "GameListContextMenuExtractDataExeFS": "ExeFS", - "GameListContextMenuExtractDataExeFSToolTip": "응용프로그램의 현재 구성에서 ExeFS 추출 (업데이트 포함)", + "GameListContextMenuExtractDataExeFSToolTip": "앱의 현재 구성에서 ExeFS 추출(업데이트 포함)", "GameListContextMenuExtractDataRomFS": "RomFS", - "GameListContextMenuExtractDataRomFSToolTip": "응용 프로그램의 현재 구성에서 RomFS 추출 (업데이트 포함)", + "GameListContextMenuExtractDataRomFSToolTip": "앱의 현재 구성에서 RomFS 추출(업데이트 포함)", "GameListContextMenuExtractDataLogo": "로고", - "GameListContextMenuExtractDataLogoToolTip": "응용프로그램의 현재 구성에서 로고 섹션 추출 (업데이트 포함)", - "GameListContextMenuCreateShortcut": "애플리케이션 바로 가기 만들기", - "GameListContextMenuCreateShortcutToolTip": "선택한 애플리케이션을 실행하는 바탕 화면 바로 가기를 만듭니다.", - "GameListContextMenuCreateShortcutToolTipMacOS": "해당 게임을 실행할 수 있는 바로가기를 macOS의 응용 프로그램 폴더에 추가합니다.", - "GameListContextMenuOpenModsDirectory": "Mod 디렉터리 열기", - "GameListContextMenuOpenModsDirectoryToolTip": "해당 게임의 Mod가 저장된 디렉터리 열기", - "GameListContextMenuOpenSdModsDirectory": "Atmosphere Mod 디렉터리 열기", - "GameListContextMenuOpenSdModsDirectoryToolTip": "해당 게임의 Mod가 포함된 대체 SD 카드 Atmosphere 디렉터리를 엽니다. 실제 하드웨어용으로 패키징된 Mod에 유용합니다.", + "GameListContextMenuExtractDataLogoToolTip": "앱의 현재 구성에서 로고 섹션 추출 (업데이트 포함)", + "GameListContextMenuCreateShortcut": "바로 가기 만들기", + "GameListContextMenuCreateShortcutToolTip": "선택한 앱을 실행하는 바탕 화면에 바로 가기를 생성", + "GameListContextMenuCreateShortcutToolTipMacOS": "선택한 앱을 실행하는 macOS 앱 폴더에 바로 가기 만들기", + "GameListContextMenuOpenModsDirectory": "모드 디렉터리 열기", + "GameListContextMenuOpenModsDirectoryToolTip": "앱의 모드가 포함된 디렉터리 열기", + "GameListContextMenuOpenSdModsDirectory": "Atmosphere 모드 디렉터리 열기", + "GameListContextMenuOpenSdModsDirectoryToolTip": "해당 게임의 모드가 포함된 대체 SD 카드 Atmosphere 디렉터리를 엽니다. 실제 하드웨어용으로 패키징된 모드에 유용합니다.", + "GameListContextMenuTrimXCI": "XCI 파일 확인 및 트림", + "GameListContextMenuTrimXCIToolTip": "디스크 공간을 절약하기 위해 XCI 파일 확인 및 트림", "StatusBarGamesLoaded": "{0}/{1}개의 게임 불러옴", "StatusBarSystemVersion": "시스템 버전 : {0}", - "LinuxVmMaxMapCountDialogTitle": "감지된 메모리 매핑의 하한선", + "StatusBarXCIFileTrimming": "XCI 파일 '{0}' 트리밍", + "LinuxVmMaxMapCountDialogTitle": "메모리 매핑 한계 감지", "LinuxVmMaxMapCountDialogTextPrimary": "vm.max_map_count의 값을 {0}으로 늘리시겠습니까?", - "LinuxVmMaxMapCountDialogTextSecondary": "일부 게임은 현재 허용된 것보다 더 많은 메모리 매핑을 생성하려고 시도할 수 있습니다. 이 제한을 초과하는 즉시 Ryujinx에 문제가 발생합니다.", + "LinuxVmMaxMapCountDialogTextSecondary": "일부 게임은 현재 허용된 것보다 더 많은 메모리 매핑을 만들려고 할 수 있습니다. 이 제한을 초과하면 Ryujinx가 충돌이 발생할 수 있습니다.", "LinuxVmMaxMapCountDialogButtonUntilRestart": "예, 다음에 다시 시작할 때까지", "LinuxVmMaxMapCountDialogButtonPersistent": "예, 영구적으로", - "LinuxVmMaxMapCountWarningTextPrimary": "메모리 매핑의 최대 용량이 권장 용량보다 적습니다.", - "LinuxVmMaxMapCountWarningTextSecondary": "vm.max_map_count({0})의 현재 값이 {1}보다 낮습니다. 일부 게임은 현재 허용된 것보다 더 많은 메모리 매핑을 생성하려고 시도할 수 있습니다. 이 제한을 초과하는 즉시 Ryujinx에 문제가 발생합니다.\n\n수동으로 제한을 늘리거나 Ryujinx의 도움을 받을 수 있는 pkexec을 설치하는 것이 좋습니다.", + "LinuxVmMaxMapCountWarningTextPrimary": "메모리 매핑의 최대 용량이 권장 용량보다 부족합니다.", + "LinuxVmMaxMapCountWarningTextSecondary": "vm.max_map_count({0})의 현재 값은 {1}보다 낮습니다. 일부 게임은 현재 허용된 것보다 더 많은 메모리 매핑을 만들려고 할 수 있습니다. Ryujinx는 이 제한을 초과하자마자 충돌할 것입니다.\n\n제한을 수동으로 늘리거나 Ryujinx가 이를 지원할 수 있도록 pkexec를 설치하는 것을 추천합니다.", "Settings": "설정", "SettingsTabGeneral": "사용자 인터페이스", "SettingsTabGeneralGeneral": "일반", @@ -100,19 +104,19 @@ "SettingsTabGeneralCheckUpdatesOnLaunch": "시작 시, 업데이트 확인", "SettingsTabGeneralShowConfirmExitDialog": "\"종료 확인\" 대화 상자 표시", "SettingsTabGeneralRememberWindowState": "창 크기/위치 기억", - "SettingsTabGeneralShowTitleBar": "Show Title Bar (Requires restart)", - "SettingsTabGeneralHideCursor": "마우스 커서 숨기기", + "SettingsTabGeneralShowTitleBar": "제목 표시줄 표시(다시 시작해야 함)", + "SettingsTabGeneralHideCursor": "커서 숨기기 :", "SettingsTabGeneralHideCursorNever": "절대 안 함", "SettingsTabGeneralHideCursorOnIdle": "유휴 상태", - "SettingsTabGeneralHideCursorAlways": "언제나", - "SettingsTabGeneralGameDirectories": "게임 디렉터리", - "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", - "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", + "SettingsTabGeneralHideCursorAlways": "항상", + "SettingsTabGeneralGameDirectories": "게임 데릭터리", + "SettingsTabGeneralAutoloadDirectories": "DLC/업데이트 디렉터리 자동 불러오기", + "SettingsTabGeneralAutoloadNote": "누락된 파일을 참조하는 DLC 및 업데이트가 자동으로 언로드", "SettingsTabGeneralAdd": "추가", "SettingsTabGeneralRemove": "제거", "SettingsTabSystem": "시스템", "SettingsTabSystemCore": "코어", - "SettingsTabSystemSystemRegion": "시스템 지역:", + "SettingsTabSystemSystemRegion": "시스템 지역 :", "SettingsTabSystemSystemRegionJapan": "일본", "SettingsTabSystemSystemRegionUSA": "미국", "SettingsTabSystemSystemRegionEurope": "유럽", @@ -122,7 +126,7 @@ "SettingsTabSystemSystemRegionTaiwan": "대만", "SettingsTabSystemSystemLanguage": "시스템 언어 :", "SettingsTabSystemSystemLanguageJapanese": "일본어", - "SettingsTabSystemSystemLanguageAmericanEnglish": "영어(미국)", + "SettingsTabSystemSystemLanguageAmericanEnglish": "미국 영어", "SettingsTabSystemSystemLanguageFrench": "프랑스어", "SettingsTabSystemSystemLanguageGerman": "독일어", "SettingsTabSystemSystemLanguageItalian": "이탈리아어", @@ -133,29 +137,29 @@ "SettingsTabSystemSystemLanguagePortuguese": "포르투갈어", "SettingsTabSystemSystemLanguageRussian": "러시아어", "SettingsTabSystemSystemLanguageTaiwanese": "대만어", - "SettingsTabSystemSystemLanguageBritishEnglish": "영어(영국)", - "SettingsTabSystemSystemLanguageCanadianFrench": "프랑스어(캐나다)", - "SettingsTabSystemSystemLanguageLatinAmericanSpanish": "스페인어(라틴 아메리카)", + "SettingsTabSystemSystemLanguageBritishEnglish": "영국 영어", + "SettingsTabSystemSystemLanguageCanadianFrench": "캐나다 프랑스어", + "SettingsTabSystemSystemLanguageLatinAmericanSpanish": "남미 스페인어", "SettingsTabSystemSystemLanguageSimplifiedChinese": "중국어 간체", "SettingsTabSystemSystemLanguageTraditionalChinese": "중국어 번체", - "SettingsTabSystemSystemTimeZone": "시스템 시간대:", - "SettingsTabSystemSystemTime": "시스템 시간:", + "SettingsTabSystemSystemTimeZone": "시스템 시간대 :", + "SettingsTabSystemSystemTime": "시스템 시간 :", "SettingsTabSystemEnableVsync": "수직 동기화", "SettingsTabSystemEnablePptc": "PPTC(프로파일된 영구 번역 캐시)", - "SettingsTabSystemEnableLowPowerPptc": "Low-power PPTC", + "SettingsTabSystemEnableLowPowerPptc": "저전력 PPTC 캐시", "SettingsTabSystemEnableFsIntegrityChecks": "파일 시스템 무결성 검사", "SettingsTabSystemAudioBackend": "음향 후단부 :", "SettingsTabSystemAudioBackendDummy": "더미", "SettingsTabSystemAudioBackendOpenAL": "OpenAL", - "SettingsTabSystemAudioBackendSoundIO": "사운드IO", + "SettingsTabSystemAudioBackendSoundIO": "SoundIO", "SettingsTabSystemAudioBackendSDL2": "SDL2", - "SettingsTabSystemHacks": "해킹", + "SettingsTabSystemHacks": "핵", "SettingsTabSystemHacksNote": "불안정성을 유발할 수 있음", - "SettingsTabSystemDramSize": "대체 메모리 레이아웃 사용(개발자)", - "SettingsTabSystemDramSize4GiB": "4GiB", - "SettingsTabSystemDramSize6GiB": "6GiB", - "SettingsTabSystemDramSize8GiB": "8GiB", - "SettingsTabSystemDramSize12GiB": "12GiB", + "SettingsTabSystemDramSize": "DRAM 크기 :", + "SettingsTabSystemDramSize4GiB": "4GB", + "SettingsTabSystemDramSize6GiB": "6GB", + "SettingsTabSystemDramSize8GiB": "8GB", + "SettingsTabSystemDramSize12GiB": "12GB", "SettingsTabSystemIgnoreMissingServices": "누락된 서비스 무시", "SettingsTabSystemIgnoreApplet": "애플릿 무시", "SettingsTabGraphics": "그래픽", @@ -172,38 +176,38 @@ "SettingsTabGraphicsResolutionScaleNative": "원본(720p/1080p)", "SettingsTabGraphicsResolutionScale2x": "2배(1440p/2160p)", "SettingsTabGraphicsResolutionScale3x": "3배(2160p/3240p)", - "SettingsTabGraphicsResolutionScale4x": "4x (2880p/4320p) (권장하지 않음)", + "SettingsTabGraphicsResolutionScale4x": "4배(2880p/4320p) (권장하지 않음)", "SettingsTabGraphicsAspectRatio": "종횡비 :", "SettingsTabGraphicsAspectRatio4x3": "4:3", "SettingsTabGraphicsAspectRatio16x9": "16:9", "SettingsTabGraphicsAspectRatio16x10": "16:10", "SettingsTabGraphicsAspectRatio21x9": "21:9", "SettingsTabGraphicsAspectRatio32x9": "32:9", - "SettingsTabGraphicsAspectRatioStretch": "창에 맞게 늘리기", + "SettingsTabGraphicsAspectRatioStretch": "창에 맞춰 늘리기", "SettingsTabGraphicsDeveloperOptions": "개발자 옵션", "SettingsTabGraphicsShaderDumpPath": "그래픽 셰이더 덤프 경로 :", "SettingsTabLogging": "로그 기록", "SettingsTabLoggingLogging": "로그 기록", "SettingsTabLoggingEnableLoggingToFile": "파일에 로그 기록 활성화", - "SettingsTabLoggingEnableStubLogs": "스텁 로그 활성화", - "SettingsTabLoggingEnableInfoLogs": "정보 로그 활성화", - "SettingsTabLoggingEnableWarningLogs": "경고 로그 활성화", - "SettingsTabLoggingEnableErrorLogs": "오류 로그 활성화", - "SettingsTabLoggingEnableTraceLogs": "추적 로그 활성화", - "SettingsTabLoggingEnableGuestLogs": "게스트 로그 활성화", - "SettingsTabLoggingEnableFsAccessLogs": "Fs 접속 로그 활성화", - "SettingsTabLoggingFsGlobalAccessLogMode": "Fs 전역 접속 로그 모드 :", + "SettingsTabLoggingEnableStubLogs": "조각 기록 활성화", + "SettingsTabLoggingEnableInfoLogs": "정보 기록 활성화", + "SettingsTabLoggingEnableWarningLogs": "경고 기록 활성화", + "SettingsTabLoggingEnableErrorLogs": "오류 기록 활성화", + "SettingsTabLoggingEnableTraceLogs": "추적 기록 활성화", + "SettingsTabLoggingEnableGuestLogs": "방문 기록 활성화", + "SettingsTabLoggingEnableFsAccessLogs": "파일 시스템 접속 기록 활성화", + "SettingsTabLoggingFsGlobalAccessLogMode": "파일 시스템 전역 접속 로그 모드 :", "SettingsTabLoggingDeveloperOptions": "개발자 옵션", - "SettingsTabLoggingDeveloperOptionsNote": "경고: 성능이 저하됨", - "SettingsTabLoggingGraphicsBackendLogLevel": "그래픽 후단부 로그 수준 :", + "SettingsTabLoggingDeveloperOptionsNote": "경고 : 성능이 감소합니다.", + "SettingsTabLoggingGraphicsBackendLogLevel": "그래픽 후단부 기록 레벨 :", "SettingsTabLoggingGraphicsBackendLogLevelNone": "없음", "SettingsTabLoggingGraphicsBackendLogLevelError": "오류", - "SettingsTabLoggingGraphicsBackendLogLevelPerformance": "느려짐", + "SettingsTabLoggingGraphicsBackendLogLevelPerformance": "감속", "SettingsTabLoggingGraphicsBackendLogLevelAll": "모두", - "SettingsTabLoggingEnableDebugLogs": "디버그 로그 활성화", + "SettingsTabLoggingEnableDebugLogs": "디버그 기록 활성화", "SettingsTabInput": "입력", "SettingsTabInputEnableDockedMode": "도킹 모드", - "SettingsTabInputDirectKeyboardAccess": "직접 키보드 접속", + "SettingsTabInputDirectKeyboardAccess": "키보드 직접 접속", "SettingsButtonSave": "저장", "SettingsButtonClose": "닫기", "SettingsButtonOk": "확인", @@ -218,12 +222,12 @@ "ControllerSettingsPlayer6": "플레이어 6", "ControllerSettingsPlayer7": "플레이어 7", "ControllerSettingsPlayer8": "플레이어 8", - "ControllerSettingsHandheld": "휴대 모드", + "ControllerSettingsHandheld": "휴대", "ControllerSettingsInputDevice": "입력 장치", "ControllerSettingsRefresh": "새로 고침", "ControllerSettingsDeviceDisabled": "비활성화됨", "ControllerSettingsControllerType": "컨트롤러 유형", - "ControllerSettingsControllerTypeHandheld": "휴대 모드", + "ControllerSettingsControllerTypeHandheld": "휴대용", "ControllerSettingsControllerTypeProController": "프로 컨트롤러", "ControllerSettingsControllerTypeJoyConPair": "조이콘 페어링", "ControllerSettingsControllerTypeJoyConLeft": "좌측 조이콘", @@ -240,7 +244,7 @@ "ControllerSettingsButtonY": "Y", "ControllerSettingsButtonPlus": "+", "ControllerSettingsButtonMinus": "-", - "ControllerSettingsDPad": "방향 패드", + "ControllerSettingsDPad": "방향키", "ControllerSettingsDPadUp": "↑", "ControllerSettingsDPadDown": "↓", "ControllerSettingsDPadLeft": "←", @@ -250,17 +254,17 @@ "ControllerSettingsStickDown": "↓", "ControllerSettingsStickLeft": "←", "ControllerSettingsStickRight": "→", - "ControllerSettingsStickStick": "스틱", - "ControllerSettingsStickInvertXAxis": "스틱 X 축 반전", - "ControllerSettingsStickInvertYAxis": "스틱 Y 축 반전", - "ControllerSettingsStickDeadzone": "사각지대 :", + "ControllerSettingsStickStick": "스틴", + "ControllerSettingsStickInvertXAxis": "스틱 X축 반전", + "ControllerSettingsStickInvertYAxis": "스틱 Y축 반전", + "ControllerSettingsStickDeadzone": "데드존 :", "ControllerSettingsLStick": "좌측 스틱", "ControllerSettingsRStick": "우측 스틱", "ControllerSettingsTriggersLeft": "좌측 트리거", "ControllerSettingsTriggersRight": "우측 트리거", "ControllerSettingsTriggersButtonsLeft": "좌측 트리거 버튼", "ControllerSettingsTriggersButtonsRight": "우측 트리거 버튼", - "ControllerSettingsTriggers": "트리거 버튼", + "ControllerSettingsTriggers": "트리거", "ControllerSettingsTriggerL": "L", "ControllerSettingsTriggerR": "R", "ControllerSettingsTriggerZL": "ZL", @@ -273,50 +277,50 @@ "ControllerSettingsExtraButtonsRight": "우측 버튼", "ControllerSettingsMisc": "기타", "ControllerSettingsTriggerThreshold": "트리거 임계값 :", - "ControllerSettingsMotion": "동작", + "ControllerSettingsMotion": "모션", "ControllerSettingsMotionUseCemuhookCompatibleMotion": "CemuHook 호환 모션 사용", "ControllerSettingsMotionControllerSlot": "컨트롤러 슬롯 :", "ControllerSettingsMotionMirrorInput": "미러 입력", - "ControllerSettingsMotionRightJoyConSlot": "우측 조이콘 슬롯 :", + "ControllerSettingsMotionRightJoyConSlot": "우측 조이콘 슬롯:", "ControllerSettingsMotionServerHost": "서버 호스트 :", "ControllerSettingsMotionGyroSensitivity": "자이로 감도 :", - "ControllerSettingsMotionGyroDeadzone": "자이로 사각지대 :", + "ControllerSettingsMotionGyroDeadzone": "자이로 데드존 :", "ControllerSettingsSave": "저장", "ControllerSettingsClose": "닫기", "KeyUnknown": "알 수 없음", - "KeyShiftLeft": "왼쪽 Shift", - "KeyShiftRight": "오른쪽 Shift", - "KeyControlLeft": "왼쪽 Ctrl", - "KeyMacControlLeft": "왼쪽 ^", - "KeyControlRight": "오른쪽 Ctrl", - "KeyMacControlRight": "오른쪽 ^", - "KeyAltLeft": "왼쪽 Alt", - "KeyMacAltLeft": "왼쪽 ⌥", - "KeyAltRight": "오른쪽 Alt", - "KeyMacAltRight": "오른쪽 ⌥", - "KeyWinLeft": "왼쪽 ⊞", - "KeyMacWinLeft": "왼쪽 ⌘", - "KeyWinRight": "오른쪽 ⊞", - "KeyMacWinRight": "오른쪽 ⌘", + "KeyShiftLeft": "좌측 Shift", + "KeyShiftRight": "우측 Shift", + "KeyControlLeft": "좌측 Ctrl", + "KeyMacControlLeft": "좌측 ⌃", + "KeyControlRight": "우측 Ctrl", + "KeyMacControlRight": "우측 ⌃", + "KeyAltLeft": "좌측 Alt", + "KeyMacAltLeft": "좌측 ⌥", + "KeyAltRight": "우측 Alt", + "KeyMacAltRight": "우측 ⌥", + "KeyWinLeft": "좌측 ⊞", + "KeyMacWinLeft": "좌측 ⌘", + "KeyWinRight": "우측 ⊞", + "KeyMacWinRight": "우측 ⌘", "KeyMenu": "메뉴", "KeyUp": "↑", "KeyDown": "↓", "KeyLeft": "←", "KeyRight": "→", "KeyEnter": "엔터", - "KeyEscape": "이스케이프", + "KeyEscape": "Esc", "KeySpace": "스페이스", "KeyTab": "탭", "KeyBackSpace": "백스페이스", - "KeyInsert": "Ins", - "KeyDelete": "Del", + "KeyInsert": "Insert", + "KeyDelete": "Delete", "KeyPageUp": "Page Up", "KeyPageDown": "Page Down", "KeyHome": "Home", "KeyEnd": "End", "KeyCapsLock": "Caps Lock", "KeyScrollLock": "Scroll Lock", - "KeyPrintScreen": "프린트 스크린", + "KeyPrintScreen": "Print Screen", "KeyPause": "Pause", "KeyNumLock": "Num Lock", "KeyClear": "지우기", @@ -335,7 +339,7 @@ "KeyKeypadSubtract": "키패드 빼기", "KeyKeypadAdd": "키패드 추가", "KeyKeypadDecimal": "숫자 키패드", - "KeyKeypadEnter": "키패드 엔터", + "KeyKeypadEnter": "키패드 입력", "KeyNumber0": "0", "KeyNumber1": "1", "KeyNumber2": "2", @@ -358,9 +362,9 @@ "KeyPeriod": ".", "KeySlash": "/", "KeyBackSlash": "\\", - "KeyUnbound": "바인딩 해제", - "GamepadLeftStick": "L 스틱 버튼", - "GamepadRightStick": "R 스틱 버튼", + "KeyUnbound": "연동 해제", + "GamepadLeftStick": "좌측 스틱 버튼", + "GamepadRightStick": "우측 스틱 버튼", "GamepadLeftShoulder": "좌측 숄더", "GamepadRightShoulder": "우측 숄더", "GamepadLeftTrigger": "좌측 트리거", @@ -371,183 +375,186 @@ "GamepadDpadRight": "→", "GamepadMinus": "-", "GamepadPlus": "+", - "GamepadGuide": "안내", + "GamepadGuide": "가이드", "GamepadMisc1": "기타", "GamepadPaddle1": "패들 1", "GamepadPaddle2": "패들 2", "GamepadPaddle3": "패들 3", "GamepadPaddle4": "패들 4", "GamepadTouchpad": "터치패드", - "GamepadSingleLeftTrigger0": "왼쪽 트리거 0", - "GamepadSingleRightTrigger0": "오른쪽 트리거 0", - "GamepadSingleLeftTrigger1": "왼쪽 트리거 1", - "GamepadSingleRightTrigger1": "오른쪽 트리거 1", + "GamepadSingleLeftTrigger0": "좌측 트리거 0", + "GamepadSingleRightTrigger0": "우측 트리거 0", + "GamepadSingleLeftTrigger1": "좌측 트리거 1", + "GamepadSingleRightTrigger1": "우측 트리거 1", "StickLeft": "좌측 스틱", "StickRight": "우측 스틱", - "UserProfilesSelectedUserProfile": "선택한 사용자 프로필 :", + "UserProfilesSelectedUserProfile": "선택된 사용자 프로필 :", "UserProfilesSaveProfileName": "프로필 이름 저장", "UserProfilesChangeProfileImage": "프로필 이미지 변경", "UserProfilesAvailableUserProfiles": "사용 가능한 사용자 프로필 :", - "UserProfilesAddNewProfile": "프로필 생성", + "UserProfilesAddNewProfile": "프로필 만들기", "UserProfilesDelete": "삭제", "UserProfilesClose": "닫기", - "ProfileNameSelectionWatermark": "닉네임을 입력하세요", + "ProfileNameSelectionWatermark": "별명 선택", "ProfileImageSelectionTitle": "프로필 이미지 선택", - "ProfileImageSelectionHeader": "프로필 이미지 선택", + "ProfileImageSelectionHeader": "프로필 이미지를 선택", "ProfileImageSelectionNote": "사용자 지정 프로필 이미지를 가져오거나 시스템 펌웨어에서 아바타 선택 가능", "ProfileImageSelectionImportImage": "이미지 파일 가져오기", "ProfileImageSelectionSelectAvatar": "펌웨어 아바타 선택", - "InputDialogTitle": "입력 대화상자", + "InputDialogTitle": "대화 상자 입력", "InputDialogOk": "확인", "InputDialogCancel": "취소", + "InputDialogCancelling": "취소하기", + "InputDialogClose": "닫기", "InputDialogAddNewProfileTitle": "프로필 이름 선택", - "InputDialogAddNewProfileHeader": "프로필 이름 입력", + "InputDialogAddNewProfileHeader": "프로필 이름을 입력", "InputDialogAddNewProfileSubtext": "(최대 길이 : {0})", - "AvatarChoose": "선택", + "AvatarChoose": "아바타 선택", "AvatarSetBackgroundColor": "배경색 설정", "AvatarClose": "닫기", "ControllerSettingsLoadProfileToolTip": "프로필 불러오기", - "ControllerSettingsViewProfileToolTip": "View Profile", + "ControllerSettingsViewProfileToolTip": "프로필 보기", "ControllerSettingsAddProfileToolTip": "프로필 추가", - "ControllerSettingsRemoveProfileToolTip": "프로필 제거", - "ControllerSettingsSaveProfileToolTip": "프로필 저장", - "MenuBarFileToolsTakeScreenshot": "스크린 샷 찍기", + "ControllerSettingsRemoveProfileToolTip": "프로필 삭제", + "ControllerSettingsSaveProfileToolTip": "프로필 추가", + "MenuBarFileToolsTakeScreenshot": "스크린샷 찍기", "MenuBarFileToolsHideUi": "UI 숨기기", - "GameListContextMenuRunApplication": "응용프로그램 실행", + "GameListContextMenuRunApplication": "앱 실행", "GameListContextMenuToggleFavorite": "즐겨찾기 전환", - "GameListContextMenuToggleFavoriteToolTip": "게임 즐겨찾기 상태 전환", - "SettingsTabGeneralTheme": "테마:", - "SettingsTabGeneralThemeAuto": "Auto", - "SettingsTabGeneralThemeDark": "어두운 테마", - "SettingsTabGeneralThemeLight": "밝은 테마", - "ControllerSettingsConfigureGeneral": "구성", + "GameListContextMenuToggleFavoriteToolTip": "게임의 즐겨찾기 상태 전환", + "SettingsTabGeneralTheme": "테마 :", + "SettingsTabGeneralThemeAuto": "자동", + "SettingsTabGeneralThemeDark": "다크", + "SettingsTabGeneralThemeLight": "라이트", + "ControllerSettingsConfigureGeneral": "설정", "ControllerSettingsRumble": "진동", "ControllerSettingsRumbleStrongMultiplier": "강력한 진동 증폭기", "ControllerSettingsRumbleWeakMultiplier": "약한 진동 증폭기", "DialogMessageSaveNotAvailableMessage": "{0} [{1:x16}]에 대한 저장 데이터가 없음", - "DialogMessageSaveNotAvailableCreateSaveMessage": "이 게임에 대한 저장 데이터를 생성하겠습니까?", + "DialogMessageSaveNotAvailableCreateSaveMessage": "이 게임의 저장 데이터를 만들겠습니까?", "DialogConfirmationTitle": "Ryujinx - 확인", "DialogUpdaterTitle": "Ryujinx - 업데이터", "DialogErrorTitle": "Ryujinx - 오류", "DialogWarningTitle": "Ryujinx - 경고", "DialogExitTitle": "Ryujinx - 종료", - "DialogErrorMessage": "Ryujinx 오류 발생", - "DialogExitMessage": "Ryujinx를 종료하겠습니까?", - "DialogExitSubMessage": "저장하지 않은 모든 데이터는 손실됩니다!", - "DialogMessageCreateSaveErrorMessage": "지정된 저장 데이터를 작성하는 중에 오류 발생: {0}", - "DialogMessageFindSaveErrorMessage": "지정된 저장 데이터를 찾는 중에 오류 발생: {0}", - "FolderDialogExtractTitle": "추출할 폴더 선택", - "DialogNcaExtractionMessage": "{1}에서 {0} 섹션을 추출하는 중...", - "DialogNcaExtractionTitle": "NCA 섹션 추출기", - "DialogNcaExtractionMainNcaNotFoundErrorMessage": "추출 실패하였습니다. 선택한 파일에 기본 NCA가 없습니다.", - "DialogNcaExtractionCheckLogErrorMessage": "추출 실패하였습니다. 자세한 내용은 로그 파일을 읽으세요.", - "DialogNcaExtractionSuccessMessage": "추출이 성공적으로 완료되었습니다.", - "DialogUpdaterConvertFailedMessage": "현재 Ryujinx 버전을 변환하지 못했습니다.", - "DialogUpdaterCancelUpdateMessage": "업데이트 취소 중 입니다!", - "DialogUpdaterAlreadyOnLatestVersionMessage": "이미 최신 버전의 Ryujinx를 사용하고 있습니다!", - "DialogUpdaterFailedToGetVersionMessage": "GitHub 릴리스에서 릴리스 정보를 가져오는 중에 오류가 발생했습니다. 이는 GitHub Actions에서 새 릴리스를 컴파일하는 경우 발생할 수 있습니다. 몇 분 후에 다시 시도하세요.", - "DialogUpdaterConvertFailedGithubMessage": "Github 개정에서 받은 Ryujinx 버전을 변환하지 못했습니다.", - "DialogUpdaterDownloadingMessage": "업데이트 다운로드 중...", + "DialogErrorMessage": "Ryujinx에서 오류 발생", + "DialogExitMessage": "정말 Ryujinx를 닫으시겠습니까?", + "DialogExitSubMessage": "저장되지 않은 모든 데이터는 손실됩니다!", + "DialogMessageCreateSaveErrorMessage": "지정된 저장 데이터를 생성하는 동안 오류가 발생 : {0}", + "DialogMessageFindSaveErrorMessage": "지정된 저장 데이터를 찾는 중 오류가 발생 : {0}", + "FolderDialogExtractTitle": "압축을 풀 폴더를 선택", + "DialogNcaExtractionMessage": "{1}에서 {0} 단면 추출 중...", + "DialogNcaExtractionTitle": "NCA 단면 추출기", + "DialogNcaExtractionMainNcaNotFoundErrorMessage": "추출에 실패했습니다. 선택한 파일에 기본 NCA가 없습니다.", + "DialogNcaExtractionCheckLogErrorMessage": "추출에 실패했습니다. 자세한 내용은 로그 파일을 확인하시기 바랍니다.", + "DialogNcaExtractionSuccessMessage": "성공적으로 추출이 완료되었습니다.", + "DialogUpdaterConvertFailedMessage": "현재 Ryujinx 버전을 변환할 수 없습니다.", + "DialogUpdaterCancelUpdateMessage": "업데이트가 취소되었습니다!", + "DialogUpdaterAlreadyOnLatestVersionMessage": "이미 최신 버전의 Ryujinx를 사용 중입니다!", + "DialogUpdaterFailedToGetVersionMessage": "GitHub에서 릴리스 정보를 검색하는 동안 오류가 발생했습니다. 현재 GitHub Actions에서 새 릴리스를 컴파일하는 중일 때 발생할 수 있습니다. 몇 분 후에 다시 시도해 주세요.", + "DialogUpdaterConvertFailedGithubMessage": "GitHub에서 받은 Ryujinx 버전을 변환하지 못했습니다.", + "DialogUpdaterDownloadingMessage": "업데이트 내려받는 중...", "DialogUpdaterExtractionMessage": "업데이트 추출 중...", - "DialogUpdaterRenamingMessage": "업데이트 이름 바꾸는 중...", + "DialogUpdaterRenamingMessage": "이름 변경 업데이트...", "DialogUpdaterAddingFilesMessage": "새 업데이트 추가 중...", - "DialogUpdaterCompleteMessage": "업데이트를 완료했습니다!", - "DialogUpdaterRestartMessage": "지금 Ryujinx를 다시 시작하겠습니까?", + "DialogUpdaterCompleteMessage": "업데이트가 완료되었습니다!", + "DialogUpdaterRestartMessage": "지금 Ryujinx를 다시 시작하시겠습니까?", "DialogUpdaterNoInternetMessage": "인터넷에 연결되어 있지 않습니다!", - "DialogUpdaterNoInternetSubMessage": "인터넷 연결이 작동하는지 확인하세요!", - "DialogUpdaterDirtyBuildMessage": "Ryujinx의 나쁜 빌드는 업데이트할 수 없습니다!\n", - "DialogUpdaterDirtyBuildSubMessage": "지원되는 버전을 찾고 있다면 https://https://github.com/GreemDev/Ryujinx/releases/에서 Ryujinx를 다운로드하세요.", - "DialogRestartRequiredMessage": "재시작 필요", - "DialogThemeRestartMessage": "테마가 저장되었습니다. 테마를 적용하려면 다시 시작해야 합니다.", - "DialogThemeRestartSubMessage": "다시 시작하겠습니까?", - "DialogFirmwareInstallEmbeddedMessage": "이 게임에 내장된 펌웨어를 설치하겠습니까? (펌웨어 {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "설치된 펌웨어가 없지만 Ryujinx가 제공된 게임에서 펌웨어 {0}을(를) 설치할 수 있었습니다.\n이제 에뮬레이터가 시작됩니다.", - "DialogFirmwareNoFirmwareInstalledMessage": "설치된 펌웨어 없음", + "DialogUpdaterNoInternetSubMessage": "인터넷이 제대로 연결되어 있는지 확인하세요!", + "DialogUpdaterDirtyBuildMessage": "Ryujinx의 더티 빌드는 업데이트할 수 없습니다!", + "DialogUpdaterDirtyBuildSubMessage": "지원되는 버전을 찾으신다면 https://github.com/GreemDev/Ryujinx/releases/에서 Ryujinx를 내려받으세요.", + "DialogRestartRequiredMessage": "다시 시작 필요", + "DialogThemeRestartMessage": "테마를 저장했습니다. 테마를 적용하려면 다시 시작해야 합니다.", + "DialogThemeRestartSubMessage": "다시 시작하시겠습니까?", + "DialogFirmwareInstallEmbeddedMessage": "이 게임에 포함된 펌웨어를 설치하시겠습니까?(Firmware {0})", + "DialogFirmwareInstallEmbeddedSuccessMessage": "설치된 펌웨어를 찾을 수 없지만 Ryujinx는 제공된 게임에서 펌웨어 {0}을(를) 설치할 수 있습니다.\n이제 에뮬레이터가 시작됩니다.", + "DialogFirmwareNoFirmwareInstalledMessage": "펌웨어가 설치되어 있지 않음", "DialogFirmwareInstalledMessage": "펌웨어 {0}이(가) 설치됨", "DialogInstallFileTypesSuccessMessage": "파일 형식을 성공적으로 설치했습니다!", "DialogInstallFileTypesErrorMessage": "파일 형식을 설치하지 못했습니다.", - "DialogUninstallFileTypesSuccessMessage": "파일 형식을 성공적으로 제거했습니다!", + "DialogUninstallFileTypesSuccessMessage": "파일 형식이 성공적으로 제거되었습니다!", "DialogUninstallFileTypesErrorMessage": "파일 형식을 제거하지 못했습니다.", "DialogOpenSettingsWindowLabel": "설정 창 열기", + "DialogOpenXCITrimmerWindowLabel": "XCI 트리머 창", "DialogControllerAppletTitle": "컨트롤러 애플릿", - "DialogMessageDialogErrorExceptionMessage": "메시지 대화상자를 표시하는 동안 오류 발생 : {0}", - "DialogSoftwareKeyboardErrorExceptionMessage": "소프트웨어 키보드를 표시하는 동안 오류 발생 : {0}", - "DialogErrorAppletErrorExceptionMessage": "오류에플릿 대화상자를 표시하는 동안 오류 발생 : {0}", + "DialogMessageDialogErrorExceptionMessage": "메시지 대화 상자 표시 오류 : {0}", + "DialogSoftwareKeyboardErrorExceptionMessage": "소프트웨어 키보드 표시 오류 : {0}", + "DialogErrorAppletErrorExceptionMessage": "ErrorApplet 대화 상자 표시 오류 : {0}", "DialogUserErrorDialogMessage": "{0}: {1}", - "DialogUserErrorDialogInfoMessage": "\n이 오류를 수정하는 방법에 대한 자세한 내용은 설정 가이드를 따르세요.", - "DialogUserErrorDialogTitle": "Ryuijnx 오류 ({0})", + "DialogUserErrorDialogInfoMessage": "\n이 오류를 해결하는 방법에 대한 자세한 내용은 설정 가이드를 참조하세요.", + "DialogUserErrorDialogTitle": "Ryujinx 오류 ({0})", "DialogAmiiboApiTitle": "Amiibo API", - "DialogAmiiboApiFailFetchMessage": "API에서 정보를 가져오는 동안 오류가 발생했습니다.", - "DialogAmiiboApiConnectErrorMessage": "Amiibo API 서버에 연결할 수 없습니다. 서비스가 다운되었거나 인터넷 연결이 온라인 상태인지 확인해야 할 수 있습니다.", - "DialogProfileInvalidProfileErrorMessage": "{0} 프로필은 현재 입력 구성 시스템과 호환되지 않습니다.", - "DialogProfileDefaultProfileOverwriteErrorMessage": "기본 프로필을 덮어쓸 수 없음", - "DialogProfileDeleteProfileTitle": "프로필 삭제", - "DialogProfileDeleteProfileMessage": "이 작업은 되돌릴 수 없습니다. 계속하겠습니까?", + "DialogAmiiboApiFailFetchMessage": "API에서 정보를 가져오는 중에 오류가 발생했습니다.", + "DialogAmiiboApiConnectErrorMessage": "Amiibo API 서버에 연결할 수 없습니다. 서비스가 다운되었거나 인터넷 연결이 온라인 상태인지 확인이 필요합니다.", + "DialogProfileInvalidProfileErrorMessage": "프로필 {0}은(는) 현재 입력 구성 시스템과 호환되지 않습니다.", + "DialogProfileDefaultProfileOverwriteErrorMessage": "기본 프로필은 덮어쓸 수 없음", + "DialogProfileDeleteProfileTitle": "프로필 삭제하기", + "DialogProfileDeleteProfileMessage": "이 작업은 되돌릴 수 없습니다. 계속하시겠습니까?", "DialogWarning": "경고", - "DialogPPTCDeletionMessage": "다음 부팅 시, PPTC 재구축을 대기열에 추가 :\n\n{0}\n\n계속하겠습니까?", - "DialogPPTCDeletionErrorMessage": "{0}에서 PPTC 캐시 삭제 오류 : {1}", - "DialogShaderDeletionMessage": "다음에 대한 셰이더 캐시 삭제 :\n\n{0}\n\n계속하겠습니까?", - "DialogShaderDeletionErrorMessage": "{0}에서 셰이더 캐시 제거 오류 : {1}", - "DialogRyujinxErrorMessage": "Ryujinx에 오류 발생", + "DialogPPTCDeletionMessage": "다음에 부팅할 때, PPTC 재구축을 대기열에 추가하려고 합니다.\n\n{0}\n\n계속하시겠습니까?", + "DialogPPTCDeletionErrorMessage": "{0}에서 PPTC 캐시를 지우는 중 오류 발생 : {1}", + "DialogShaderDeletionMessage": "다음 셰이더 캐시를 삭제 :\n\n{0}\n\n계속하시겠습니까?", + "DialogShaderDeletionErrorMessage": "{0}에서 셰이더 캐시를 삭제하는 중 오류 발생 : {1}", + "DialogRyujinxErrorMessage": "Ryujinx에서 오류 발생", "DialogInvalidTitleIdErrorMessage": "UI 오류 : 선택한 게임에 유효한 타이틀 ID가 없음", "DialogFirmwareInstallerFirmwareNotFoundErrorMessage": "{0}에서 유효한 시스템 펌웨어를 찾을 수 없습니다.", "DialogFirmwareInstallerFirmwareInstallTitle": "펌웨어 {0} 설치", "DialogFirmwareInstallerFirmwareInstallMessage": "시스템 버전 {0}이(가) 설치됩니다.", - "DialogFirmwareInstallerFirmwareInstallSubMessage": "\n\n이것은 현재 시스템 버전 {0}을(를) 대체합니다.", - "DialogFirmwareInstallerFirmwareInstallConfirmMessage": "\n\n계속하겠습니까?", + "DialogFirmwareInstallerFirmwareInstallSubMessage": "\n\n현재 시스템 버전 {0}을(를) 대체합니다.", + "DialogFirmwareInstallerFirmwareInstallConfirmMessage": "\n\n계속하시겠습니까?", "DialogFirmwareInstallerFirmwareInstallWaitMessage": "펌웨어 설치 중...", - "DialogFirmwareInstallerFirmwareInstallSuccessMessage": "시스템 버전 {0}이(가) 성공적으로 설치되었습니다.", - "DialogUserProfileDeletionWarningMessage": "선택한 프로파일이 삭제되면 사용 가능한 다른 프로파일이 없음", - "DialogUserProfileDeletionConfirmMessage": "선택한 프로파일을 삭제하겠습니까?", - "DialogUserProfileUnsavedChangesTitle": "경고 - 변경사항 저장되지 않음", - "DialogUserProfileUnsavedChangesMessage": "저장되지 않은 사용자 프로파일을 수정했습니다.", - "DialogUserProfileUnsavedChangesSubMessage": "변경사항을 저장하지 않으시겠습니까?", + "DialogFirmwareInstallerFirmwareInstallSuccessMessage": "시스템 버전 {0}이(가) 설치되었습니다.", + "DialogUserProfileDeletionWarningMessage": "선택한 프로필을 삭제하면 다른 프로필을 열 수 없음", + "DialogUserProfileDeletionConfirmMessage": "선택한 프로필을 삭제하시겠습니까?", + "DialogUserProfileUnsavedChangesTitle": "경고 - 저장되지 않은 변경 사항", + "DialogUserProfileUnsavedChangesMessage": "저장되지 않은 사용자 프로필의 변경 사항이 있습니다.", + "DialogUserProfileUnsavedChangesSubMessage": "변경 사항을 취소하시겠습니까?", "DialogControllerSettingsModifiedConfirmMessage": "현재 컨트롤러 설정이 업데이트되었습니다.", - "DialogControllerSettingsModifiedConfirmSubMessage": "저장하겠습니까?", - "DialogLoadFileErrorMessage": "{0}. 오류 발생 파일 : {1}", - "DialogModAlreadyExistsMessage": "Mod가 이미 존재합니다.", - "DialogModInvalidMessage": "지정된 디렉터리에 Mod가 없습니다!", - "DialogModDeleteNoParentMessage": "삭제 실패: \"{0}\" Mod의 상위 디렉터리를 찾을 수 없습니다!", - "DialogDlcNoDlcErrorMessage": "지정된 파일에 선택한 타이틀에 대한 DLC가 포함되어 있지 않습니다!", - "DialogPerformanceCheckLoggingEnabledMessage": "개발자만 사용하도록 설계된 추적 로그 기록이 활성화되어 있습니다.", - "DialogPerformanceCheckLoggingEnabledConfirmMessage": "최적의 성능을 위해 추적 로그 생성을 비활성화하는 것이 좋습니다. 지금 추적 로그 기록을 비활성화하겠습니까?", - "DialogPerformanceCheckShaderDumpEnabledMessage": "개발자만 사용하도록 설계된 셰이더 덤프를 활성화했습니다.", - "DialogPerformanceCheckShaderDumpEnabledConfirmMessage": "최적의 성능을 위해 세이더 덤핑을 비활성화하는 것이 좋습니다. 지금 세이더 덤핑을 비활성화하겠습니까?", - "DialogLoadAppGameAlreadyLoadedMessage": "이미 게임 불러옴", - "DialogLoadAppGameAlreadyLoadedSubMessage": "다른 게임을 시작하기 전에 에뮬레이션을 중지하거나 에뮬레이터를 닫으세요.", - "DialogUpdateAddUpdateErrorMessage": "지정된 파일에 선택한 제목에 대한 업데이트가 포함되어 있지 않습니다!", + "DialogControllerSettingsModifiedConfirmSubMessage": "저장하시겠습니까?", + "DialogLoadFileErrorMessage": "{0}. 오류 파일 : {1}", + "DialogModAlreadyExistsMessage": "이미 존재하는 모드", + "DialogModInvalidMessage": "지정한 디렉터리에 모드가 없습니다!", + "DialogModDeleteNoParentMessage": "삭제 실패 : \"{0}\" 모드의 상위 디렉터리를 찾을 수 없습니다!", + "DialogDlcNoDlcErrorMessage": "지정된 파일에 선택한 타이틀의 DLC가 포함되어 있지 않습니다!", + "DialogPerformanceCheckLoggingEnabledMessage": "개발자만 사용하도록 설계된 추적 기록이 활성화되어 있습니다.", + "DialogPerformanceCheckLoggingEnabledConfirmMessage": "최적의 성능을 위해서는 추적 기록을 비활성화하는 것이 좋습니다. 지금 추적 기록을 비활성화하시겠습니까?", + "DialogPerformanceCheckShaderDumpEnabledMessage": "개발자만 사용하도록 설계된 셰이더 덤핑이 활성화되어 있습니다.", + "DialogPerformanceCheckShaderDumpEnabledConfirmMessage": "최적의 성능을 위해서는 셰이더 덤핑을 비활성화하는 것이 좋습니다. 지금 셰이더 덤핑을 비활성화하시겠습니까?", + "DialogLoadAppGameAlreadyLoadedMessage": "이미 게임을 불러옴", + "DialogLoadAppGameAlreadyLoadedSubMessage": "다른 게임을 실행하기 전에 에뮬레이션을 중지하거나 에뮬레이터를 닫으세요.", + "DialogUpdateAddUpdateErrorMessage": "지정한 파일에 선택한 타이틀에 대한 업데이트가 포함되어 있지 않습니다!", "DialogSettingsBackendThreadingWarningTitle": "경고 - 후단부 스레딩", - "DialogSettingsBackendThreadingWarningMessage": "변경 사항을 완전히 적용하려면 이 옵션을 변경한 후, Ryujinx를 다시 시작해야 합니다. 플랫폼에 따라 Ryujinx를 사용할 때 드라이버 자체의 멀티스레딩을 수동으로 비활성화해야 할 수도 있습니다.", - "DialogModManagerDeletionWarningMessage": "해당 Mod를 삭제하려고 합니다: {0}\n\n정말로 삭제하시겠습니까?", - "DialogModManagerDeletionAllWarningMessage": "해당 타이틀에 대한 모든 Mod들을 삭제하려고 합니다.\n\n정말로 삭제하시겠습니까?", + "DialogSettingsBackendThreadingWarningMessage": "완전히 적용하려면 이 옵션을 변경한 후 Ryujinx를 다시 시작해야 합니다. 플랫폼에 따라 Ryujinx를 사용할 때 드라이버 자체의 다중 스레딩을 수동으로 비활성화해야 할 수도 있습니다.", + "DialogModManagerDeletionWarningMessage": "모드 삭제 : {0}\n\n계속하시겠습니까?", + "DialogModManagerDeletionAllWarningMessage": "이 타이틀에 대한 모드를 모두 삭제하려고 합니다.\n\n계속하시겠습니까?", "SettingsTabGraphicsFeaturesOptions": "기능", - "SettingsTabGraphicsBackendMultithreading": "그래픽 후단부 멀티스레딩 :", + "SettingsTabGraphicsBackendMultithreading": "그래픽 후단부 다중 스레딩 :", "CommonAuto": "자동", "CommonOff": "끔", "CommonOn": "켬", "InputDialogYes": "예", "InputDialogNo": "아니오", "DialogProfileInvalidProfileNameErrorMessage": "파일 이름에 잘못된 문자가 포함되어 있습니다. 다시 시도하세요.", - "MenuBarOptionsPauseEmulation": "일시 정지", + "MenuBarOptionsPauseEmulation": "일시 중지", "MenuBarOptionsResumeEmulation": "다시 시작", - "AboutUrlTooltipMessage": "기본 브라우저에서 Ryujinx 웹사이트를 열려면 클릭하세요.", - "AboutDisclaimerMessage": "Ryujinx는 닌텐도™,\n또는 그 파트너와 제휴한 바가 없습니다.", - "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com)는\nAmiibo 에뮬레이션에 사용됩니다.", - "AboutPatreonUrlTooltipMessage": "기본 브라우저에서 Ryujinx Patreon 페이지를 열려면 클릭하세요.", - "AboutGithubUrlTooltipMessage": "기본 브라우저에서 Ryujinx GitHub 페이지를 열려면 클릭하세요.", - "AboutDiscordUrlTooltipMessage": "기본 브라우저에서 Ryujinx 디스코드 서버에 대한 초대를 열려면 클릭하세요.", - "AboutTwitterUrlTooltipMessage": "기본 브라우저에서 Ryujinx 트위터 페이지를 열려면 클릭하세요.", + "AboutUrlTooltipMessage": "클릭하면 기본 브라우저에서 Ryujinx 웹사이트가 열립니다.", + "AboutDisclaimerMessage": "Ryujinx는 Nintendo™\n또는 그 파트너와 제휴한 바가 없습니다.", + "AboutAmiiboDisclaimerMessage": "AmiiboAPI(www.amiiboapi.com)는\nAmiibo 에뮬레이션에 사용됩니다.", + "AboutPatreonUrlTooltipMessage": "클릭하면 기본 브라우저에서 Ryujinx Patreon 페이지가 열립니다.", + "AboutGithubUrlTooltipMessage": "클릭하면 기본 브라우저에서 Ryujinx GitHub 페이지가 열립니다.", + "AboutDiscordUrlTooltipMessage": "클릭하면 기본 브라우저에서 Ryujinx 디스코드 서버 초대장이 열립니다.", + "AboutTwitterUrlTooltipMessage": "클릭하면 기본 브라우저에서 Ryujinx 트위터 페이지가 열립니다.", "AboutRyujinxAboutTitle": "정보 :", - "AboutRyujinxAboutContent": "Ryujinx는 닌텐도 스위치™용 에뮬레이터입니다.\nPatreon에서 지원해 주세요.\n트위터나 디스코드에서 최신 소식을 받아보세요.\n기여에 참여하고자 하는 개발자는 GitHub 또는 디스코드에서 자세한 내용을 확인할 수 있습니다.", + "AboutRyujinxAboutContent": "Ryujinx는 Nintendo Switch™용 에뮬레이터입니다.\nPatreon에서 저희를 후원해 주세요.\nTwitter나 Discord에서 최신 뉴스를 모두 받아보세요.\n기여에 관심이 있는 개발자는 GitHub이나 Discord에서 자세한 내용을 알아볼 수 있습니다.", "AboutRyujinxMaintainersTitle": "유지 관리 :", - "AboutRyujinxMaintainersContentTooltipMessage": "기본 브라우저에서 기여자 페이지를 열려면 클릭하세요.", - "AboutRyujinxSupprtersTitle": "Patreon에서 후원:", + "AboutRyujinxMaintainersContentTooltipMessage": "클릭하면 기본 브라우저에서 기여자 페이지가 열립니다.", + "AboutRyujinxSupprtersTitle": "Patreon에서 후원 :", "AmiiboSeriesLabel": "Amiibo 시리즈", "AmiiboCharacterLabel": "캐릭터", - "AmiiboScanButtonLabel": "스캔", + "AmiiboScanButtonLabel": "스캔하기", "AmiiboOptionsShowAllLabel": "모든 Amiibo 표시", - "AmiiboOptionsUsRandomTagLabel": "해킹: 임의의 태그 UUID 사용", - "DlcManagerTableHeadingEnabledLabel": "활성화됨", + "AmiiboOptionsUsRandomTagLabel": "핵 : 무작위 태그 Uuid 사용", + "DlcManagerTableHeadingEnabledLabel": "활성화", "DlcManagerTableHeadingTitleIdLabel": "타이틀 ID", "DlcManagerTableHeadingContainerPathLabel": "컨테이너 경로", "DlcManagerTableHeadingFullPathLabel": "전체 경로", @@ -556,152 +563,158 @@ "DlcManagerDisableAllButton": "모두 비활성화", "ModManagerDeleteAllButton": "모두 삭제", "MenuBarOptionsChangeLanguage": "언어 변경", - "MenuBarShowFileTypes": "파일 유형 표시", + "MenuBarShowFileTypes": "파일 형식 표시", "CommonSort": "정렬", "CommonShowNames": "이름 표시", "CommonFavorite": "즐겨찾기", "OrderAscending": "오름차순", "OrderDescending": "내림차순", - "SettingsTabGraphicsFeatures": "기능ㆍ개선 사항", + "SettingsTabGraphicsFeatures": "기능 및 개선 사항", "ErrorWindowTitle": "오류 창", - "ToggleDiscordTooltip": "\"현재 재생 중인\" 디스코드 활동에 Ryujinx를 표시할지 여부 선택", - "AddGameDirBoxTooltip": "목록에 추가할 게임 디렉터리 입력", + "ToggleDiscordTooltip": "\"현재 진행 중인\" 디스코드 활동에 Ryujinx를 표시할지 여부를 선택", + "AddGameDirBoxTooltip": "목록에 추가할 게임 디렉터리를 입력", "AddGameDirTooltip": "목록에 게임 디렉터리 추가", "RemoveGameDirTooltip": "선택한 게임 디렉터리 제거", - "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", - "AddAutoloadDirTooltip": "Add an autoload directory to the list", - "RemoveAutoloadDirTooltip": "Remove selected autoload directory", - "CustomThemeCheckTooltip": "GUI에 사용자 지정 Avalonia 테마를 사용하여 에뮬레이터 메뉴의 모양 변경", + "AddAutoloadDirBoxTooltip": "목록에 추가할 자동 불러오기 디렉터리를 입력", + "AddAutoloadDirTooltip": "목록에 자동 불러오기 디렉터리 추가", + "RemoveAutoloadDirTooltip": "선택한 자동 불러오기 디렉터리 제거", + "CustomThemeCheckTooltip": "GUI용 사용자 정의 Avalonia 테마를 사용하여 에뮬레이터 메뉴의 모양 변경", "CustomThemePathTooltip": "사용자 정의 GUI 테마 경로", "CustomThemeBrowseTooltip": "사용자 정의 GUI 테마 찾아보기", - "DockModeToggleTooltip": "독 모드에서는 에뮬레이트된 시스템이 도킹된 닌텐도 스위치처럼 작동합니다. 이것은 대부분의 게임에서 그래픽 품질을 향상시킵니다. 반대로 이 기능을 비활성화하면 에뮬레이트된 시스템이 휴대용 닌텐도 스위치처럼 작동하여 그래픽 품질이 저하됩니다.\n\n독 모드를 사용하려는 경우 플레이어 1의 컨트롤을 구성하세요. 휴대 모드를 사용하려는 경우 휴대용 컨트롤을 구성하세요.\n\n확실하지 않으면 켜 두세요.", - "DirectKeyboardTooltip": "다이렉트 키보드 접근(HID)은 게임에서 사용자의 키보드를 텍스트 입력 장치로 사용할 수 있게끔 제공합니다.\n\n스위치 하드웨어에서 키보드 사용을 네이티브로 지원하는 게임에서만 작동합니다.\n\n이 옵션에 대해 잘 모른다면 끄기를 권장합니다.", - "DirectMouseTooltip": "다이렉트 마우스 접근(HID)은 게임에서 사용자의 마우스를 포인터 장치로 사용할 수 있게끔 제공합니다.\n\n스위치 하드웨어에서 마우스 사용을 네이티브로 지원하는 극히 일부 게임에서만 작동합니다.\n\n이 옵션이 활성화된 경우, 터치 스크린 기능이 작동하지 않을 수 있습니다.\n\n이 옵션에 대해 잘 모른다면 끄기를 권장합니다.", + "DockModeToggleTooltip": "도킹 모드를 사용하면 에뮬레이트된 시스템이 도킹된 Nintendo Switch처럼 동작합니다. 이 경우, 대부분의 게임에서 그래픽 충실도를 향상시킵니다. 반대로 이 기능을 비활성화하면 에뮬레이트된 시스템이 휴대용 Nintendo Switch처럼 작동하여 그래픽 품질이 저하됩니다.\n\n도킹 모드를 사용할 계획이라면 플레이어 1 컨트롤을 구성하세요. 휴대용 모드를 사용하려는 경우 휴대용 컨트롤을 구성하십시오.\n\n모르면 켬으로 두세요.", + "DirectKeyboardTooltip": "키보드 직접 접속(HID)을 지원합니다. 텍스트 입력 장치로 키보드에 대한 게임 접속을 제공합니다.\n\nSwitch 하드웨어에서 키보드 사용을 기본적으로 지원하는 게임에서만 작동합니다.\n\n모르면 끔으로 두세요.", + "DirectMouseTooltip": "마우스 직접 접속(HID)을 지원합니다. 마우스에 대한 게임 접속을 포인팅 장치로 제공합니다.\n\nSwitch 하드웨어에서 마우스 컨트롤을 기본적으로 지원하는 게임에서만 작동하며 거의 없습니다.\n\n활성화하면 터치 스크린 기능이 작동하지 않을 수 있습니다.\n\n모르면 끔으로 두세요.", "RegionTooltip": "시스템 지역 변경", "LanguageTooltip": "시스템 언어 변경", "TimezoneTooltip": "시스템 시간대 변경", "TimeTooltip": "시스템 시간 변경", - "VSyncToggleTooltip": "에뮬레이트된 콘솔의 수직 동기화. 기본적으로 대부분의 게임에 대한 프레임 제한 장치로, 비활성화시 게임이 더 빠른 속도로 실행되거나 로딩 화면이 더 오래 걸리거나 멈출 수 있습니다.\n\n게임 내에서 선호하는 핫키로 전환할 수 있습니다(기본값 F1). 핫키를 비활성화할 계획이라면 이 작업을 수행하는 것이 좋습니다.\n\n이 옵션에 대해 잘 모른다면 켜기를 권장드립니다.", - "PptcToggleTooltip": "게임이 불러올 때마다 번역할 필요가 없도록 번역된 JIT 기능을 저장합니다.\n\n게임을 처음 부팅한 후 끊김 현상을 줄이고 부팅 시간을 크게 단축합니다.\n\n확실하지 않으면 켜 두세요.", - "LowPowerPptcToggleTooltip": "Load the PPTC using a third of the amount of cores.", - "FsIntegrityToggleTooltip": "게임을 부팅할 때 손상된 파일을 확인하고 손상된 파일이 감지되면 로그에 해시 오류를 표시합니다.\n\n성능에 영향을 미치지 않으며 문제 해결에 도움이 됩니다.\n\n확실하지 않으면 켜 두세요.", - "AudioBackendTooltip": "오디오를 렌더링하는 데 사용되는 백엔드를 변경합니다.\n\nSDL2가 선호되는 반면 OpenAL 및 사운드IO는 폴백으로 사용됩니다. 더미는 소리가 나지 않습니다.\n\n확실하지 않으면 SDL2로 설정하세요.", - "MemoryManagerTooltip": "게스트 메모리가 매핑되고 접속되는 방식을 변경합니다. 에뮬레이트된 CPU 성능에 크게 영향을 미칩니다.\n\n확실하지 않은 경우 호스트 확인 안함으로 설정하세요.", - "MemoryManagerSoftwareTooltip": "주소 변환을 위해 소프트웨어 페이지 테이블을 사용하세요. 정확도는 가장 높지만 성능은 가장 느립니다.", - "MemoryManagerHostTooltip": "호스트 주소 공간의 메모리를 직접 매핑합니다. 훨씬 빠른 JIT 컴파일 및 실행합니다.", - "MemoryManagerUnsafeTooltip": "메모리를 직접 매핑하지만 접속하기 전에 게스트 주소 공간 내의 주소를 마스킹하지 마십시오. 더 빠르지만 안전을 희생해야 합니다. 게스트 응용 프로그램은 Ryujinx의 어디에서나 메모리에 접속할 수 있으므로 이 모드에서는 신뢰할 수 있는 프로그램만 실행하세요.", - "UseHypervisorTooltip": "JIT 대신 하이퍼바이저를 사용합니다. 하이퍼바이저를 사용할 수 있을 때 성능을 향상시키지만, 현재 상태에서는 불안정할 수 있습니다.", - "DRamTooltip": "대체 메모리모드 레이아웃을 활용하여 스위치 개발 모델을 모방합니다.\n\n고해상도 텍스처 팩 또는 4k 해상도 모드에만 유용합니다. 성능을 향상시키지 않습니다.\n\n확실하지 않으면 꺼 두세요.", - "IgnoreMissingServicesTooltip": "구현되지 않은 호라이즌 OS 서비스를 무시합니다. 이것은 특정 게임을 부팅할 때 충돌을 우회하는 데 도움이 될 수 있습니다.\n\n확실하지 않으면 꺼 두세요.", - "IgnoreAppletTooltip": "게임 플레이 중에 게임패드의 연결이 끊어지면 외부 대화 상자 '컨트롤러 애플릿'이 나타나지 않습니다. 대화 상자를 닫거나 새 컨트롤러를 설정하라는 메시지도 표시되지 않습니다. 이전에 연결이 끊어진 컨트롤러가 다시 연결되면 게임이 자동으로 재개됩니다.", - "GraphicsBackendThreadingTooltip": "두 번째 스레드에서 그래픽 백엔드 명령을 실행합니다.\n\n세이더 컴파일 속도를 높이고 끊김 현상을 줄이며 자체 멀티스레딩 지원 없이 GPU 드라이버의 성능을 향상시킵니다. 멀티스레딩이 있는 드라이버에서 성능이 약간 향상되었습니다.\n\n잘 모르겠으면 자동으로 설정하세요.", - "GalThreadingTooltip": "두 번째 스레드에서 그래픽 백엔드 명령을 실행합니다.\n\n세이더 컴파일 속도를 높이고 끊김 현상을 줄이며 자체 멀티스레딩 지원 없이 GPU 드라이버의 성능을 향상시킵니다. 멀티스레딩이 있는 드라이버에서 성능이 약간 향상되었습니다.\n\n잘 모르겠으면 자동으로 설정하세요.", - "ShaderCacheToggleTooltip": "후속 실행에서 끊김 현상을 줄이는 디스크 세이더 캐시를 저장합니다.\n\n확실하지 않으면 켜 두세요.", - "ResolutionScaleTooltip": "게임의 렌더링 해상도를 늘립니다.\n\n일부 게임에서는 해당 기능을 지원하지 않거나 해상도가 늘어났음에도 픽셀이 자글자글해 보일 수 있습니다; 이러한 게임들의 경우 사용자가 직접 안티 앨리어싱 기능을 끄는 Mod나 내부 렌더링 해상도를 증가시키는 Mod 등을 찾아보아야 합니다. 후자의 Mod를 사용 시에는 해당 옵션을 네이티브로 두시는 것이 좋습니다.\n\n이 옵션은 게임이 구동중일 때에도 아래 Apply 버튼을 눌러서 변경할 수 있습니다; 설정 창을 게임 창 옆에 두고 사용자가 선호하는 해상도를 실험하여 고를 수 있습니다.\n\n4x 설정은 어떤 셋업에서도 무리인 점을 유의하세요.", - "ResolutionScaleEntryTooltip": "1.5와 같은 부동 소수점 분해능 스케일입니다. 비통합 척도는 문제나 충돌을 일으킬 가능성이 더 큽니다.", - "AnisotropyTooltip": "비등방성 필터링 레벨. 게임에서 요청한 값을 사용하려면 자동으로 설정하세요.", - "AspectRatioTooltip": "렌더러 창에 적용될 화면비.\n\n화면비를 변경하는 Mod를 사용할 때에만 이 옵션을 바꾸세요, 그렇지 않을 경우 그래픽이 늘어나 보일 수 있습니다.\n\n이 옵션에 대해 잘 모른다면 16:9로 설정하세요.", + "VSyncToggleTooltip": "에뮬레이트된 콘솔의 수직 동기화입니다. 기본적으로 대부분의 게임에서 프레임 제한 기능으로, 비활성화하면 게임이 더 빠른 속도로 실행되거나 로딩 화면이 더 오래 걸리거나 멈출 수 있습니다.\n\n게임 내에서 원하는 단축키(기본값은 F1)로 전환할 수 있습니다. 비활성화하려면 이 작업을 수행하는 것이 좋습니다.\n\n모르면 켬으로 두세요.", + "PptcToggleTooltip": "번역된 JIT 함수를 저장하여 게임을 불러올 때마다 번역할 필요가 없도록 합니다.\n\n게임을 처음 부팅한 후 끊김 현상을 줄이고 부팅 시간을 크게 단축합니다.\n\n모르면 켬으로 두세요.", + "LowPowerPptcToggleTooltip": "코어의 3분의 1을 사용하여 PPTC를 불러옵니다.", + "FsIntegrityToggleTooltip": "게임을 부팅할 때 손상된 파일을 확인하고, 손상된 파일이 감지되면 로그에 해시 오류를 표시합니다.\n\n성능에 영향을 미치지 않으며 문제 해결에 도움이 됩니다.\n\n모르면 켬으로 두세요.", + "AudioBackendTooltip": "오디오 렌더링에 사용되는 백엔드를 변경합니다.\n\nSDL2가 선호되는 반면 OpenAL 및 SoundIO는 대체 수단으로 사용됩니다. 더미에는 소리가 나지 않습니다.\n\n모르면 SDL2로 설정하세요.", + "MemoryManagerTooltip": "게스트 메모리 매핑 및 접속 방법을 변경합니다. 에뮬레이트된 CPU 성능에 큰 영향을 미칩니다.\n\n모르면 호스트 확인 안 함으로 설정합니다.", + "MemoryManagerSoftwareTooltip": "주소 번역에 소프트웨어 페이지 테이블을 사용합니다. 정확도는 가장 높지만 가장 느립니다.", + "MemoryManagerHostTooltip": "호스트 주소 공간에 메모리를 직접 매핑합니다. JIT 컴파일 및 실행 속도가 훨씬 빨라집니다.", + "MemoryManagerUnsafeTooltip": "메모리를 직접 매핑하되 접속하기 전에 게스트 주소 공간 내의 주소를 마스킹하지 않습니다. 더 빠르지만 안전성이 희생됩니다. 게스트 애플리케이션은 Ryujinx의 어느 곳에서나 메모리에 접속할 수 있으므로 이 모드에서는 신뢰할 수 있는 프로그램만 실행하세요.", + "UseHypervisorTooltip": "JIT 대신 Hypervisor를 사용하세요. 사용 가능한 경우 성능이 크게 향상되지만 현재 상태에서는 불안정할 수 있습니다.", + "DRamTooltip": "Switch 개발 모델을 모방하기 위해 8GB DRAM이 포함된 대체 메모리 모드를 활용합니다.\n\n이는 고해상도 텍스처 팩 또는 4K 해상도 모드에만 유용합니다. 성능을 개선하지 않습니다.\n\n모르면 끔으로 두세요.", + "IgnoreMissingServicesTooltip": "구현되지 않은 Horizon OS 서비스는 무시됩니다. 특정 게임을 부팅할 때, 발생하는 충돌을 우회하는 데 도움이 될 수 있습니다.\n\n모르면 끔으로 두세요.", + "IgnoreAppletTooltip": "게임 플레이 중에 게임패드 연결이 끊어지면 외부 대화 상자 \"컨트롤러 애플릿\"이 나타나지 않습니다. 대화 상자를 닫거나 새 컨트롤러를 설정하라는 메시지가 표시되지 않습니다. 이전에 연결이 끊어진 컨트롤러가 다시 연결되면 게임이 자동으로 다시 시작됩니다.", + "GraphicsBackendThreadingTooltip": "2번째 스레드에서 그래픽 후단부 명령을 실행합니다.\n\n셰이더 컴파일 속도를 높이고, 끊김 현상을 줄이며, 자체 다중 스레딩 지원 없이 GPU 드라이버의 성능을 향상시킵니다. 다중 스레딩이 있는 드라이버에서 성능이 좀 더 좋습니다.\n\n모르면 자동으로 설정합니다.", + "GalThreadingTooltip": "2번째 스레드에서 그래픽 후단부 명령을 실행합니다.\n\n셰이더 컴파일 속도를 높이고 끊김 현상을 줄이며 자체 다중 스레딩 지원 없이 GPU 드라이버의 성능을 향상시킵니다. 다중 스레딩이 있는 드라이버에서 성능이 좀 더 좋습니다.\n\n모르면 자동으로 설정합니다.", + "ShaderCacheToggleTooltip": "후속 실행 시 끊김 현상을 줄이는 디스크 셰이더 캐시를 저장합니다.\n\n모르면 켬으로 두세요.", + "ResolutionScaleTooltip": "게임의 렌더링 해상도를 배가시킵니다.\n\n일부 게임에서는 이 기능이 작동하지 않고 해상도가 높아져도 픽셀화되어 보일 수 있습니다. 해당 게임의 경우 앤티 앨리어싱을 제거하거나 내부 렌더링 해상도를 높이는 모드를 찾아야 할 수 있습니다. 후자를 사용하려면 기본을 선택하는 것이 좋습니다.\n\n이 옵션은 아래의 \"적용\"을 클릭하여 게임이 실행되는 동안 변경할 수 있습니다. 설정 창을 옆으로 옮기고 원하는 게임 모양을 찾을 때까지 실험해 보세요.\n\n4배는 거의 모든 설정에서 과하다는 점을 명심하세요.", + "ResolutionScaleEntryTooltip": "부동 소수점 해상도 스케일(예: 1.5)입니다. 적분이 아닌 스케일은 문제나 충돌을 일으킬 가능성이 높습니다.", + "AnisotropyTooltip": "이방성 필터링 수준입니다. 게임에서 요청한 값을 사용하려면 자동으로 설정하세요.", + "AspectRatioTooltip": "렌더러 창에 적용되는 종횡비입니다.\n\n게임에 종횡비 모드를 사용하는 경우에만 이 설정을 변경하세요. 그렇지 않으면 그래픽이 늘어납니다.\n\n모르면 16:9로 두세요.", "ShaderDumpPathTooltip": "그래픽 셰이더 덤프 경로", - "FileLogTooltip": "디스크의 로그 파일에 콘솔 로깅을 저장합니다. 성능에 영향을 미치지 않습니다.", - "StubLogTooltip": "콘솔에 스텁 로그 메시지를 인쇄합니다. 성능에 영향을 미치지 않습니다.", - "InfoLogTooltip": "콘솔에 정보 로그 메시지를 인쇄합니다. 성능에 영향을 미치지 않습니다.", - "WarnLogTooltip": "콘솔에 경고 로그 메시지를 인쇄합니다. 성능에 영향을 미치지 않습니다.", - "ErrorLogTooltip": "콘솔에 오류 로그 메시지를 인쇄합니다. 성능에 영향을 미치지 않습니다.", - "TraceLogTooltip": "콘솔에 추적 로그 메시지를 인쇄합니다. 성능에 영향을 미치지 않습니다.", - "GuestLogTooltip": "콘솔에 게스트 로그 메시지를 인쇄합니다. 성능에 영향을 미치지 않습니다.", - "FileAccessLogTooltip": "콘솔에 파일 액세스 로그 메시지를 인쇄합니다.", - "FSAccessLogModeTooltip": "콘솔에 대한 FS 접속 로그 출력을 활성화합니다. 가능한 모드는 0-3\t\t\t\t", + "FileLogTooltip": "디스크의 로그 파일에 콘솔 기록을 저장합니다. 성능에 영향을 주지 않습니다.", + "StubLogTooltip": "콘솔에 조각 기록 메시지를 출력합니다. 성능에 영향을 주지 않습니다.", + "InfoLogTooltip": "콘솔에 정보 기록 메시지를 출력합니다. 성능에 영향을 주지 않습니다.", + "WarnLogTooltip": "콘솔에 경고 기록 메시지를 출력합니다. 성능에 영향을 주지 않습니다.", + "ErrorLogTooltip": "콘솔에 오류 기록 메시지를 출력합니다. 성능에 영향을 주지 않습니다.", + "TraceLogTooltip": "콘솔에 추적 기록 메시지를 출력합니다. 성능에 영향을 주지 않습니다.", + "GuestLogTooltip": "콘솔에 게스트 로그 메시지를 출력합니다. 성능에 영향을 주지 않습니다.", + "FileAccessLogTooltip": "콘솔에 파일 접속 기록 메시지를 출력합니다.", + "FSAccessLogModeTooltip": "콘솔에 파일 시스템 접속 기록 출력을 활성화합니다. 가능한 모드는 0-3", "DeveloperOptionTooltip": "주의해서 사용", - "OpenGlLogLevel": "적절한 로그 수준을 활성화해야 함", - "DebugLogTooltip": "콘솔에 디버그 로그 메시지를 인쇄합니다.\n\n로그를 읽기 어렵게 만들고 에뮬레이터 성능을 악화시키므로 직원이 구체적으로 지시한 경우에만 사용하세요.", - "LoadApplicationFileTooltip": "파일 탐색기를 열어 불러올 스위치 호환 파일 선택", - "LoadApplicationFolderTooltip": "파일 탐색기를 열어 불러올 스위치 호환 압축 해제 응용 프로그램 선택", - "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", - "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", + "OpenGlLogLevel": "적절한 기록 수준이 활성화되어 있어야 함", + "DebugLogTooltip": "콘솔에 디버그 기록 메시지를 출력합니다.\n\n담당자가 특별히 요청한 경우에만 이 기능을 사용하십시오. 로그를 읽기 어렵게 만들고 에뮬레이터 성능을 저하시킬 수 있기 때문입니다.", + "LoadApplicationFileTooltip": "파일 탐색기를 열어 불러올 Switch 호환 파일을 선택", + "LoadApplicationFolderTooltip": "Switch와 호환되는 압축 해제된 앱을 선택하여 불러오려면 파일 탐색기를 엽니다.", + "LoadDlcFromFolderTooltip": "파일 탐색기를 열어 DLC를 일괄 불러오기할 폴더를 하나 이상 선택", + "LoadTitleUpdatesFromFolderTooltip": "파일 탐색기를 열어 하나 이상의 폴더를 선택하여 대량으로 타이틀 업데이트 불러오기", "OpenRyujinxFolderTooltip": "Ryujinx 파일 시스템 폴더 열기", - "OpenRyujinxLogsTooltip": "로그가 기록된 폴더 열기", + "OpenRyujinxLogsTooltip": "로그가 기록되는 폴더 열기", "ExitTooltip": "Ryujinx 종료", "OpenSettingsTooltip": "설정 창 열기", - "OpenProfileManagerTooltip": "사용자 프로파일 관리자 창 열기", - "StopEmulationTooltip": "현재 게임의 에뮬레이션을 중지하고 게임 선택으로 돌아감", + "OpenProfileManagerTooltip": "사용자 프로필 관리자 창 열기", + "StopEmulationTooltip": "현재 게임의 에뮬레이션을 중지하고 게임 선택으로 돌아가기", "CheckUpdatesTooltip": "Ryujinx 업데이트 확인", "OpenAboutTooltip": "정보 창 열기", - "GridSize": "격자 크기", - "GridSizeTooltip": "격자 항목의 크기 변경", - "SettingsTabSystemSystemLanguageBrazilianPortuguese": "포르투갈어(브라질)", + "GridSize": "그리드 크기", + "GridSizeTooltip": "그리드 항목의 크기 변경", + "SettingsTabSystemSystemLanguageBrazilianPortuguese": "브라질 포르투갈어", "AboutRyujinxContributorsButtonHeader": "모든 기여자 보기", "SettingsTabSystemAudioVolume": "음량 : ", - "AudioVolumeTooltip": "음향 음량 변경", + "AudioVolumeTooltip": "음량 변경", "SettingsTabSystemEnableInternetAccess": "게스트 인터넷 접속/LAN 모드", - "EnableInternetAccessTooltip": "에뮬레이션된 응용프로그램이 인터넷에 연결되도록 허용합니다.\n\nLAN 모드가 있는 게임은 이 모드가 활성화되고 시스템이 동일한 접속 포인트에 연결된 경우 서로 연결할 수 있습니다. 여기에는 실제 콘솔도 포함됩니다.\n\n닌텐도 서버에 연결할 수 없습니다. 인터넷에 연결을 시도하는 특정 게임에서 충돌이 발생할 수 있습니다.\n\n확실하지 않으면 꺼두세요.", + "EnableInternetAccessTooltip": "에뮬레이트된 앱을 인터넷에 연결할 수 있습니다.\n\nLAN 모드가 있는 게임은 이 기능이 활성화되고 시스템이 동일한 접속 포인트에 연결되어 있을 때 서로 연결할 수 있습니다. 이는 실제 콘솔도 포함됩니다.\n\nNintendo 서버 연결을 허용하지 않습니다. 인터넷에 연결을 시도하는 특정 게임에서 충돌이 발생할 수 있습니다.\n\n모르면 끔으로 두세요.", "GameListContextMenuManageCheatToolTip": "치트 관리", "GameListContextMenuManageCheat": "치트 관리", - "GameListContextMenuManageModToolTip": "Mod 관리", - "GameListContextMenuManageMod": "Mod 관리", + "GameListContextMenuManageModToolTip": "모드 관리", + "GameListContextMenuManageMod": "모드 관리", "ControllerSettingsStickRange": "범위 :", "DialogStopEmulationTitle": "Ryujinx - 에뮬레이션 중지", - "DialogStopEmulationMessage": "에뮬레이션을 중지하겠습니까?", + "DialogStopEmulationMessage": "에뮬레이션을 중지하시겠습니까?", "SettingsTabCpu": "CPU", - "SettingsTabAudio": "오디오", + "SettingsTabAudio": "음향", "SettingsTabNetwork": "네트워크", "SettingsTabNetworkConnection": "네트워크 연결", "SettingsTabCpuCache": "CPU 캐시", "SettingsTabCpuMemory": "CPU 모드", "DialogUpdaterFlatpakNotSupportedMessage": "FlatHub를 통해 Ryujinx를 업데이트하세요.", - "UpdaterDisabledWarningTitle": "업데이터 비활성화입니다!", + "UpdaterDisabledWarningTitle": "업데이터가 비활성화되었습니다!", "ControllerSettingsRotate90": "시계 방향으로 90° 회전", "IconSize": "아이콘 크기", "IconSizeTooltip": "게임 아이콘 크기 변경", "MenuBarOptionsShowConsole": "콘솔 표시", - "ShaderCachePurgeError": "{0}에서 셰이더 캐시를 제거하는 중 오류 발생: {1}", + "ShaderCachePurgeError": "{0}에서 셰이더 캐시를 삭제하는 중 오류 발생 : {1}", "UserErrorNoKeys": "키를 찾을 수 없음", "UserErrorNoFirmware": "펌웨어를 찾을 수 없음", "UserErrorFirmwareParsingFailed": "펌웨어 구문 분석 오류", - "UserErrorApplicationNotFound": "응용 프로그램을 찾을 수 없음", + "UserErrorApplicationNotFound": "앱을 찾을 수 없음", "UserErrorUnknown": "알 수 없는 오류", "UserErrorUndefined": "정의되지 않은 오류", - "UserErrorNoKeysDescription": "Ryujinx가 'prod.keys' 파일을 찾을 수 없음", - "UserErrorNoFirmwareDescription": "Ryujinx가 설치된 펌웨어를 찾을 수 없음", - "UserErrorFirmwareParsingFailedDescription": "Ryujinx가 제공된 펌웨어를 구문 분석할 수 없습니다. 일반적으로 오래된 키가 원인입니다.", - "UserErrorApplicationNotFoundDescription": "Ryujinx가 지정된 경로에서 유효한 응용 프로그램을 찾을 수 없습니다.", + "UserErrorNoKeysDescription": "Ryujinx가 'prod.keys' 파일을 찾지 못함", + "UserErrorNoFirmwareDescription": "설치된 펌웨어를 찾을 수 없음", + "UserErrorFirmwareParsingFailedDescription": "Ryujinx가 제공된 펌웨어를 구문 분석하지 못했습니다. 이는 일반적으로 오래된 키로 인해 발생합니다.", + "UserErrorApplicationNotFoundDescription": "Ryujinx가 해당 경로에서 유효한 앱을 찾을 수 없습니다.", "UserErrorUnknownDescription": "알 수 없는 오류가 발생했습니다!", - "UserErrorUndefinedDescription": "정의되지 않은 오류가 발생했습니다! 이런 일이 발생하면 안 되므로, 개발자에게 문의하세요!", + "UserErrorUndefinedDescription": "정의되지 않은 오류가 발생했습니다! 이런 일이 발생하면 안 되니 개발자에게 문의하세요!", "OpenSetupGuideMessage": "설정 가이드 열기", "NoUpdate": "업데이트 없음", "TitleUpdateVersionLabel": "버전 {0}", - "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", - "TitleBundledDlcLabel": "Bundled:", + "TitleBundledUpdateVersionLabel": "번들 : 버전 {0}", + "TitleBundledDlcLabel": "번들 :", + "TitleXCIStatusPartialLabel": "일부", + "TitleXCIStatusTrimmableLabel": "트리밍되지 않음", + "TitleXCIStatusUntrimmableLabel": "트리밍됨", + "TitleXCIStatusFailedLabel": "(실패)", + "TitleXCICanSaveLabel": "{0:n0} Mb 저장", + "TitleXCISavingLabel": "{0:n0}Mb 저장됨", "RyujinxInfo": "Ryujinx - 정보", "RyujinxConfirm": "Ryujinx - 확인", - "FileDialogAllTypes": "모든 유형", + "FileDialogAllTypes": "모든 형식", "Never": "절대 안 함", "SwkbdMinCharacters": "{0}자 이상이어야 함", - "SwkbdMinRangeCharacters": "{0}-{1}자여야 함", + "SwkbdMinRangeCharacters": "{0}-{1}자 길이여야 함", "SoftwareKeyboard": "소프트웨어 키보드", - "SoftwareKeyboardModeNumeric": "'0~9' 또는 '.'만 가능", - "SoftwareKeyboardModeAlphabet": "한중일 문자가 아닌 문자만 가능", + "SoftwareKeyboardModeNumeric": "0-9 또는 '.'만 가능", + "SoftwareKeyboardModeAlphabet": "CJK 문자가 아닌 문자만 가능", "SoftwareKeyboardModeASCII": "ASCII 텍스트만 가능", - "ControllerAppletControllers": "지원하는 컨트롤러:", - "ControllerAppletPlayers": "플레이어:", - "ControllerAppletDescription": "현재 설정은 유효하지 않습니다. 설정을 열어 입력 장치를 다시 설정하세요.", - "ControllerAppletDocked": "독 모드가 설정되었습니다. 핸드헬드 컨트롤은 비활성화됩니다.", - "UpdaterRenaming": "이전 파일 이름 바꾸는 중...", - "UpdaterRenameFailed": "업데이터가 파일 이름을 바꿀 수 없음: {0}", - "UpdaterAddingFiles": "새로운 파일을 추가하는 중...", - "UpdaterExtracting": "업데이트를 추출하는 중...", - "UpdaterDownloading": "업데이트 다운로드 중...", + "ControllerAppletControllers": "지원되는 컨트롤러 :", + "ControllerAppletPlayers": "플레이어 :", + "ControllerAppletDescription": "현재 구성이 유효하지 않습니다. 설정을 열고 입력을 다시 구성하십시오.", + "ControllerAppletDocked": "도킹 모드가 설정되었습니다. 휴대용 제어 기능을 비활성화해야 합니다.", + "UpdaterRenaming": "오래된 파일 이름 바꾸기...", + "UpdaterRenameFailed": "업데이터가 파일 이름을 바꿀 수 없음 : {0}", + "UpdaterAddingFiles": "새 파일 추가...", + "UpdaterExtracting": "업데이트 추출...", + "UpdaterDownloading": ""업데이트 내려받기 중...", "Game": "게임", - "Docked": "도킹됨", - "Handheld": "휴대용", - "ConnectionError": "연결 오류입니다.", - "AboutPageDeveloperListMore": "{0} 등...", - "ApiError": "API 오류입니다.", - "LoadingHeading": "{0} 로딩 중", - "CompilingPPTC": "PTC 컴파일 중", - "CompilingShaders": "셰이더 컴파일 중", + "Docked": "도킹", + "Handheld": "휴대", + "ConnectionError": "연결 오류가 발생했습니다.", + "AboutPageDeveloperListMore": "{0} 외...", + "ApiError": "API 오류.", + "LoadingHeading": "{0} 불러오는 중", + "CompilingPPTC": "PTC 컴파일", + "CompilingShaders": "셰이더 컴파일", "AllKeyboards": "모든 키보드", - "OpenFileDialogTitle": "지원되는 파일을 선택", - "OpenFolderDialogTitle": "압축을 푼 게임이 있는 폴더 선택", + "OpenFileDialogTitle": "지원되는 파일을 선택하여 열기", + "OpenFolderDialogTitle": "압축 해제된 게임이 있는 폴더를 선택", "AllSupportedFormats": "지원되는 모든 형식", "RyujinxUpdater": "Ryujinx 업데이터", "SettingsTabHotkeys": "키보드 단축키", @@ -709,9 +722,9 @@ "SettingsTabHotkeysToggleVsyncHotkey": "수직 동기화 전환 :", "SettingsTabHotkeysScreenshotHotkey": "스크린샷 :", "SettingsTabHotkeysShowUiHotkey": "UI 표시 :", - "SettingsTabHotkeysPauseHotkey": "일시 중지 :", - "SettingsTabHotkeysToggleMuteHotkey": "음 소거 :", - "ControllerMotionTitle": "동작 제어 설정", + "SettingsTabHotkeysPauseHotkey": "중지 :", + "SettingsTabHotkeysToggleMuteHotkey": "음소거 :", + "ControllerMotionTitle": "모션 컨트롤 설정", "ControllerRumbleTitle": "진동 설정", "SettingsSelectThemeFileDialogTitle": "테마 파일 선택", "SettingsXamlThemeFile": "Xaml 테마 파일", @@ -722,91 +735,130 @@ "Writable": "쓰기 가능", "SelectDlcDialogTitle": "DLC 파일 선택", "SelectUpdateDialogTitle": "업데이트 파일 선택", - "SelectModDialogTitle": "Mod 디렉터리 선택", - "UserProfileWindowTitle": "사용자 프로파일 관리자", + "SelectModDialogTitle": "모드 디렉터리 선택", + "TrimXCIFileDialogTitle": "XCI 파일 확인 및 정리", + "TrimXCIFileDialogPrimaryText": "이 기능은 먼저 충분한 공간을 확보한 다음 XCI 파일을 트리밍하여 디스크 공간을 절약합니다.", + "TrimXCIFileDialogSecondaryText": "현재 파일 크기 : {0:n}MB\n게임 데이터 크기 : {1:n}MB\n디스크 공간 절약 : {2:n}MB", + "TrimXCIFileNoTrimNecessary": "XCI 파일은 트리밍할 필요가 없습니다. 자세한 내용은 로그를 확인", + "TrimXCIFileNoUntrimPossible": "XCI 파일은 트리밍을 해제할 수 없습니다. 자세한 내용은 로그를 확인", + "TrimXCIFileReadOnlyFileCannotFix": "XCI 파일은 읽기 전용이므로 쓰기 가능하게 만들 수 없습니다. 자세한 내용은 로그를 확인", + "TrimXCIFileFileSizeChanged": "XCI 파일이 스캔된 후 크기가 변경되었습니다. 파일이 쓰여지고 있지 않은지 확인하고 다시 시도하세요.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI 파일에 여유 공간 영역에 데이터가 있으므로 트리밍하는 것이 안전하지 않음", + "TrimXCIFileInvalidXCIFile": "XCI 파일에 유효하지 않은 데이터가 포함되어 있습니다. 자세한 내용은 로그를 확인", + "TrimXCIFileFileIOWriteError": "XCI 파일을 쓰기 위해 열 수 없습니다. 자세한 내용은 로그를 확인", + "TrimXCIFileFailedPrimaryText": "XCI 파일 트리밍에 실패", + "TrimXCIFileCancelled": "작업이 취소됨", + "TrimXCIFileFileUndertermined": "작업이 수행되지 않음", + "UserProfileWindowTitle": "사용자 프로필 관리자", "CheatWindowTitle": "치트 관리자", - "DlcWindowTitle": "{0} ({1})의 다운로드 가능한 콘텐츠 관리", - "ModWindowTitle": "{0} ({1})의 Mod 관리", + "DlcWindowTitle": "{0} ({1})의 내려받기 가능한 콘텐츠 관리", + "ModWindowTitle": "{0}({1})의 모드 관리", "UpdateWindowTitle": "타이틀 업데이트 관리자", - "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", - "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", - "CheatWindowHeading": "{0} [{1}]에 사용할 수 있는 치트", - "BuildId": "빌드ID :", - "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", - "DlcWindowHeading": "{0} 내려받기 가능한 콘텐츠", - "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", - "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", - "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", - "AutoloadUpdateAddedMessage": "{0} new update(s) added", - "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", - "ModWindowHeading": "{0} Mod(s)", - "UserProfilesEditProfile": "선택된 항목 편집", + "XCITrimmerWindowTitle": "XCI 파일 트리머", + "XCITrimmerTitleStatusCount": "{1}개 타이틀 중 {0}개 선택됨", + "XCITrimmerTitleStatusCountWithFilter": "{1}개 타이틀 중 {0}개 선택됨({2}개 표시됨)", + "XCITrimmerTitleStatusTrimming": "{0}개의 타이틀을 트리밍 중...", + "XCITrimmerTitleStatusUntrimming": "{0}개의 타이틀을 트리밍 해제 중...", + "XCITrimmerTitleStatusFailed": "실패", + "XCITrimmerPotentialSavings": "잠재적 비용 절감", + "XCITrimmerActualSavings": "실제 비용 절감", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "표시됨 선택", + "XCITrimmerDeselectDisplayed": "표시됨 선택 취소", + "XCITrimmerSortName": "타이틀", + "XCITrimmerSortSaved": "공간 절약s", + "UpdateWindowUpdateAddedMessage": "{0}개의 새 업데이트가 추가됨", + "UpdateWindowBundledContentNotice": "번들 업데이트는 제거할 수 없으며, 비활성화만 가능합니다.", + "CheatWindowHeading": "{0} [{1}]에 사용 가능한 치트", + "BuildId": "빌드ID:", + "DlcWindowBundledContentNotice": "번들 DLC는 제거할 수 없으며 비활성화만 가능합니다.", + "DlcWindowHeading": "{1} ({2})에 내려받기 가능한 콘텐츠 {0}개 사용 가능", + "DlcWindowDlcAddedMessage": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨", + "AutoloadDlcAddedMessage": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨", + "AutoloadDlcRemovedMessage": "{0}개의 내려받기 가능한 콘텐츠가 제거됨", + "AutoloadUpdateAddedMessage": "{0}개의 새 업데이트가 추가됨", + "AutoloadUpdateRemovedMessage": "누락된 업데이트 {0}개 삭제", + "ModWindowHeading": "{0} 모드", + "UserProfilesEditProfile": "선택 항목 편집", + "Continue": "계속", "Cancel": "취소", "Save": "저장", - "Discard": "삭제", - "Paused": "일시 중지", - "UserProfilesSetProfileImage": "프로파일 이미지 설정", - "UserProfileEmptyNameError": "이름 필요", - "UserProfileNoImageError": "프로파일 이미지를 설정해야 함", + "Discard": "폐기", + "Paused": "일시 중지됨", + "UserProfilesSetProfileImage": "프로필 이미지 설정", + "UserProfileEmptyNameError": "이름 필수 입력", + "UserProfileNoImageError": "프로필 이미지를 설정해야 함", "GameUpdateWindowHeading": "{0} ({1})에 대한 업데이트 관리", "SettingsTabHotkeysResScaleUpHotkey": "해상도 증가 :", "SettingsTabHotkeysResScaleDownHotkey": "해상도 감소 :", "UserProfilesName": "이름 :", "UserProfilesUserId": "사용자 ID :", "SettingsTabGraphicsBackend": "그래픽 후단부", - "SettingsTabGraphicsBackendTooltip": "에뮬레이터에 사용될 그래픽 백엔드를 선택합니다.\n\nVulkan이 드라이버가 최신이기 때문에 모든 현대 그래픽 카드들에서 더 좋은 성능을 발휘합니다. 또한 Vulkan은 모든 벤더사의 GPU에서 더 빠른 쉐이더 컴파일을 지원하여 스터터링이 적습니다.\n\nOpenGL의 경우 오래된 Nvidia GPU나 오래된 AMD GPU(리눅스 한정), 혹은 VRAM이 적은 GPU에서 더 나은 성능을 발휘할 수는 있으나 쉐이더 컴파일로 인한 스터터링이 Vulkan보다 심할 수 있습니다.\n\n이 옵션에 대해 잘 모른다면 Vulkan으로 설정하세요. 사용하는 GPU가 최신 그래픽 드라이버에서도 Vulkan을 지원하지 않는다면 그 땐 OpenGL로 설정하세요.", + "SettingsTabGraphicsBackendTooltip": "에뮬레이터에서 사용할 그래픽 후단부를 선택합니다.\n\nVulkan은 드라이버가 최신 상태인 한 모든 최신 그래픽 카드에 전반적으로 더 좋습니다. Vulkan은 또한 모든 GPU 공급업체에서 더 빠른 셰이더 컴파일(덜 끊김)을 제공합니다.\n\nOpenGL은 오래된 Nvidia GPU, Linux의 오래된 AMD GPU 또는 VRAM이 낮은 GPU에서 더 나은 결과를 얻을 수 있지만 셰이더 컴파일 끊김이 더 큽니다.\n\n모르면 Vulkan으로 설정합니다. 최신 그래픽 드라이버를 사용해도 GPU가 Vulkan을 지원하지 않는 경우 OpenGL로 설정하세요..", "SettingsEnableTextureRecompression": "텍스처 재압축 활성화", - "SettingsEnableTextureRecompressionTooltip": "ASTC 텍스처를 압축하여 VRAM 사용량을 줄입니다.\n\n애스트럴 체인, 바요네타 3, 파이어 엠블렘 인게이지, 메트로이드 프라임 리마스터, 슈퍼 마리오브라더스 원더, 젤다의 전설: 티어스 오브 더 킹덤 등이 이러한 텍스처 포맷을 사용합니다.\n\nVRAM이 4GiB 이하인 그래픽 카드로 위와 같은 게임들을 구동할시 특정 지점에서 크래시가 발생할 수 있습니다.\n\n위에 서술된 게임들에서 VRAM이 부족한 경우에만 해당 옵션을 켜고, 그 외의 경우에는 끄기를 권장드립니다.", - "SettingsTabGraphicsPreferredGpu": "선호하는 GPU", - "SettingsTabGraphicsPreferredGpuTooltip": "Vulkan 그래픽 후단부와 함께 사용할 그래픽 카드를 선택하세요.\n\nOpenGL이 사용할 GPU에는 영향을 미치지 않습니다.\n\n확실하지 않은 경우 \"dGPU\" 플래그가 지정된 GPU로 설정하세요. 없는 경우, 그대로 두세요.", + "SettingsEnableTextureRecompressionTooltip": "VRAM 사용량을 줄이기 위해 ASTC 텍스처를 압축합니다.\n\n이 텍스처 형식을 사용하는 게임에는 Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder, The Legend of Zelda: Tears of the Kingdom이 있습니다.\n\n4GiB VRAM 이하의 그래픽 카드는 이러한 게임을 실행하는 동안 어느 시점에서 충돌할 가능성이 있습니다.\n\n위에서 언급한 게임에서 VRAM이 부족한 경우에만 활성화합니다. 모르면 끔으로 두세요.", + "SettingsTabGraphicsPreferredGpu": "기본 GPU", + "SettingsTabGraphicsPreferredGpuTooltip": "Vulkan 그래픽 후단부와 함께 사용할 그래픽 카드를 선택하세요.\n\nOpenGL에서 사용할 GPU에는 영향을 미치지 않습니다.\n\n모르면 \"dGPU\"로 플래그가 지정된 GPU로 설정하세요. 없으면 그대로 두세요.", "SettingsAppRequiredRestartMessage": "Ryujinx 다시 시작 필요", - "SettingsGpuBackendRestartMessage": "그래픽 후단부 또는 GPU 설정이 수정되었습니다. 적용하려면 다시 시작해야 합니다.", - "SettingsGpuBackendRestartSubMessage": "지금 다시 시작하겠습니까?", - "RyujinxUpdaterMessage": "Ryujinx를 최신 버전으로 업데이트하겠습니까?", + "SettingsGpuBackendRestartMessage": "그래픽 후단부 또는 GPU 설정이 수정되었습니다. 이를 적용하려면 다시 시작이 필요", + "SettingsGpuBackendRestartSubMessage": "지금 다시 시작하시겠습니까?", + "RyujinxUpdaterMessage": "Ryujinx를 최신 버전으로 업데이트하시겠습니까?", "SettingsTabHotkeysVolumeUpHotkey": "음량 증가 :", "SettingsTabHotkeysVolumeDownHotkey": "음량 감소 :", "SettingsEnableMacroHLE": "매크로 HLE 활성화", - "SettingsEnableMacroHLETooltip": "GPU 매크로 코드의 높은 수준 에뮬레이션입니다.\n\n성능이 향상되지만 일부 게임에서 그래픽 결함이 발생할 수 있습니다.\n\n확실하지 않으면 켜 두세요.", + "SettingsEnableMacroHLETooltip": "GPU 매크로 코드의 고수준 에뮬레이션입니다.\n\n성능은 향상되지만 일부 게임에서 그래픽 오류가 발생할 수 있습니다.\n\n모르면 켬으로 두세요.", "SettingsEnableColorSpacePassthrough": "색 공간 통과", - "SettingsEnableColorSpacePassthroughTooltip": "색 공간을 지정하지 않고 색상 정보를 전달하도록 Vulkan 후단에 지시합니다. 와이드 가멋 디스플레이를 사용하는 사용자의 경우 색 정확도가 저하되지만 더 생생한 색상을 얻을 수 있습니다.", + "SettingsEnableColorSpacePassthroughTooltip": "Vulkan 후단부가 색 공간을 지정하지 않고 색상 정보를 전달하도록 지시합니다. 넓은 색역 화면 표시 장치를 사용하는 사용자의 경우 색상 정확성을 희생하고 더 생생한 색상이 나올 수 있습니다.", "VolumeShort": "음량", "UserProfilesManageSaves": "저장 관리", - "DeleteUserSave": "이 게임에 대한 사용자 저장을 삭제하겠습니까?", + "DeleteUserSave": "이 게임의 사용자 저장을 삭제하시겠습니까?", "IrreversibleActionNote": "이 작업은 되돌릴 수 없습니다.", - "SaveManagerHeading": "{0} ({1})의 저장 관리", - "SaveManagerTitle": "저장 관리자", + "SaveManagerHeading": "{0} ({1})에 대한 저장 관리", + "SaveManagerTitle": "관리자 저장", "Name": "이름", "Size": "크기", - "Search": "검색", + "Search": "찾기", "UserProfilesRecoverLostAccounts": "잃어버린 계정 복구", "Recover": "복구", "UserProfilesRecoverHeading": "다음 계정에 대한 저장 발견", - "UserProfilesRecoverEmptyList": "복구할 프로파일이 없습니다", - "GraphicsAATooltip": "게임 렌더에 안티 앨리어싱을 적용합니다.\n\nFXAA는 대부분의 이미지를 뿌옇게 만들지만, SMAA는 들쭉날쭉한 모서리 부분들을 찾아 부드럽게 만듭니다.\n\nFSR 스케일링 필터와 같이 사용하는 것은 권장하지 않습니다.\n\n이 옵션은 게임이 구동중일 때에도 아래 Apply 버튼을 눌러서 변경할 수 있습니다; 설정 창을 게임 창 옆에 두고 사용자가 선호하는 옵션을 실험하여 고를 수 있습니다.\n\n이 옵션에 대해 잘 모른다면 끄기를 권장드립니다.", - "GraphicsAALabel": "안티 앨리어싱:", - "GraphicsScalingFilterLabel": "스케일링 필터:", - "GraphicsScalingFilterTooltip": "해상도 스케일에 사용될 스케일링 필터를 선택하세요.\n\nBilinear는 3D 게임에서 잘 작동하며 안전한 기본값입니다.\n\nNearest는 픽셀 아트 게임에 추천합니다.\n\nFSR 1.0은 그저 샤프닝 필터임으로, FXAA나 SMAA와 같이 사용하는 것은 권장하지 않습니다.\n\n이 옵션은 게임이 구동중일 때에도 아래 Apply 버튼을 눌러서 변경할 수 있습니다; 설정 창을 게임 창 옆에 두고 사용자가 선호하는 옵션을 실험하여 고를 수 있습니다.\n\n이 옵션에 대해 잘 모른다면 BILINEAR로 두세요.", - "GraphicsScalingFilterBilinear": "Bilinear", - "GraphicsScalingFilterNearest": "Nearest", + "UserProfilesRecoverEmptyList": "복구할 프로필 없음", + "GraphicsAATooltip": "게임 렌더에 앤티 앨리어싱을 적용합니다.\n\nFXAA는 이미지 대부분을 흐리게 처리하지만 SMAA는 들쭉날쭉한 가장자리를 찾아 부드럽게 처리합니다.\n\nFSR 스케일링 필터와 함께 사용하지 않는 것이 좋습니다.\n\n이 옵션은 아래의 \"적용\"을 클릭하여 게임을 실행하는 동안 변경할 수 있습니다. 설정 창을 옆으로 옮겨 원하는 게임의 모습을 찾을 때까지 실험해 볼 수 있습니다.\n\n모르면 없음으로 두세요.", + "GraphicsAALabel": "앤티 앨리어싱 :", + "GraphicsScalingFilterLabel": "크기 조정 필터 :", + "GraphicsScalingFilterTooltip": "해상도 스케일을 사용할 때 적용될 스케일링 필터를 선택합니다.\n\n쌍선형은 3D 게임에 적합하며 안전한 기본 옵션입니다.\n\nNearest는 픽셀 아트 게임에 권장됩니다.\n\nFSR 1.0은 단순히 선명도 필터일 뿐이며 FXAA 또는 SMAA와 함께 사용하는 것은 권장되지 않습니다.\n\nArea 스케일링은 출력 창보다 큰 해상도를 다운스케일링할 때 권장됩니다. 2배 이상 다운스케일링할 때 슈퍼샘플링된 앤티앨리어싱 효과를 얻는 데 사용할 수 있습니다.\n\n이 옵션은 아래의 \"적용\"을 클릭하여 게임을 실행하는 동안 변경할 수 있습니다. 설정 창을 옆으로 옮겨 원하는 게임 모양을 찾을 때까지 실험하면 됩니다.\n\n모르면 쌍선형을 그대로 두세요.", + "GraphicsScalingFilterBilinear": "쌍선형", + "GraphicsScalingFilterNearest": "근린", "GraphicsScalingFilterFsr": "FSR", - "GraphicsScalingFilterArea": "Area", - "GraphicsScalingFilterLevelLabel": "수준", - "GraphicsScalingFilterLevelTooltip": "FSR 1.0의 샤프닝 레벨을 설정하세요. 높을수록 더 또렷해집니다.", + "GraphicsScalingFilterArea": "영역", + "GraphicsScalingFilterLevelLabel": "레벨", + "GraphicsScalingFilterLevelTooltip": "FSR 1.0 선명도 레벨을 설정합니다. 높을수록 더 선명합니다.", "SmaaLow": "SMAA 낮음", "SmaaMedium": "SMAA 중간", "SmaaHigh": "SMAA 높음", "SmaaUltra": "SMAA 울트라", - "UserEditorTitle": "사용자 수정", - "UserEditorTitleCreate": "사용자 생성", + "UserEditorTitle": "사용자 편집", + "UserEditorTitleCreate": "사용자 만들기", "SettingsTabNetworkInterface": "네트워크 인터페이스:", - "NetworkInterfaceTooltip": "LAN/LDN 기능에 사용될 네트워크 인터페이스입니다.\n\nLAN 기능을 지원하는 게임에서 VPN이나 XLink Kai 등을 동시에 사용하면, 인터넷을 통해 동일 네트워크 연결인 것을 속일 수 있습니다.\n\n이 옵션에 대해 잘 모른다면 기본값으로 설정하세요.", - "NetworkInterfaceDefault": "기본", - "PackagingShaders": "셰이더 패키징 중", - "AboutChangelogButton": "GitHub에서 변경 로그 보기", - "AboutChangelogButtonTooltipMessage": "기본 브라우저에서 이 버전의 변경 로그를 열려면 클릭합니다.", - "SettingsTabNetworkMultiplayer": "멀티 플레이어", + "NetworkInterfaceTooltip": "LAN/LDN 기능에 사용되는 네트워크 인터페이스입니다.\n\nVPN이나 ​​XLink Kai와 LAN 지원 게임과 함께 사용하면 인터넷을 통한 동일 네트워크 연결을 스푸핑하는 데 사용할 수 있습니다.\n\n모르면 기본값으로 두세요.", + "NetworkInterfaceDefault": "기본값", + "PackagingShaders": "패키징 셰이더", + "AboutChangelogButton": "GitHub에서 변경 내역 보기", + "AboutChangelogButtonTooltipMessage": "기본 브라우저에서 이 버전의 변경 내역을 열람하려면 클릭하세요.", + "SettingsTabNetworkMultiplayer": "멀티플레이어", "MultiplayerMode": "모드 :", - "MultiplayerModeTooltip": "LDN 멀티플레이어 모드를 변경합니다.\n\nLdnMitm은 로컬 무선/로컬 플레이 기능을 수정하여 LAN 모드에 있는 것처럼 만들어 로컬이나 동일한 네트워크 상에 있는 다른 Ryujinx 인스턴스나 커펌된 닌텐도 스위치 콘솔(ldn_mitm 모듈 설치 필요)과 연결할 수 있습니다.\n\n멀티플레이어 모드는 모든 플레이어들이 동일한 게임 버전을 요구합니다. 예를 들어 슈퍼 스매시브라더스 얼티밋 v13.0.1 사용자는 v13.0.0 사용자와 연결할 수 없습니다.\n\n해당 옵션에 대해 잘 모른다면 비활성화해두세요.", + "MultiplayerModeTooltip": "LDN 멀티플레이어 모드를 변경합니다.\n\nLdnMitm은 게임의 로컬 무선/로컬 플레이 기능을 LAN처럼 작동하도록 수정하여 다른 Ryujinx 인스턴스나 ldn_mitm 모듈이 설치된 해킹된 Nintendo Switch 콘솔과 로컬, 동일 네트워크 연결이 가능합니다.\n\n멀티플레이어는 모든 플레이어가 동일한 게임 버전을 사용해야 합니다(예: Super Smash Bros. Ultimate v13.0.1은 v13.0.0에 연결할 수 없음).\n\n모르면 비활성화 상태로 두세요.", "MultiplayerModeDisabled": "비활성화됨", "MultiplayerModeLdnMitm": "ldn_mitm" -} + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "P2P 네트워크 호스팅 비활성화(대기 시간이 늘어날 수 있음)", + "MultiplayerDisableP2PTooltip": "P2P 네트워크 호스팅을 비활성화하면 피어가 직접 연결하지 않고 마스터 서버를 통해 프록시합니다.", + "LdnPassphrase": "네트워크 암호 문구 :", + "LdnPassphraseTooltip": "귀하는 귀하와 동일한 암호를 사용하는 호스팅 게임만 볼 수 있습니다.", + "LdnPassphraseInputTooltip": "Ryujinx-<8 hex chars> 형식으로 암호를 입력하세요. 귀하는 귀하와 동일한 암호를 사용하는 호스팅 게임만 볼 수 있습니다.", + "LdnPassphraseInputPublic": "(일반)", + "GenLdnPass": "무작위 생성", + "GenLdnPassTooltip": "다른 플레이어와 공유할 수 있는 새로운 암호 문구를 생성합니다.", + "ClearLdnPass": "지우기", + "ClearLdnPassTooltip": "현재 암호를 지우고 공용 네트워크로 돌아갑니다.", + "InvalidLdnPassphrase": "유효하지 않은 암호입니다! \"Ryujinx-<8 hex chars>\" 형식이어야 합니다." + } -- 2.47.1 From 34caa033858278a698cdac3ea6b9da9e17891aef Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 14 Nov 2024 02:16:54 -0600 Subject: [PATCH 049/722] Update ko_KR.json --- src/Ryujinx/Assets/Locales/ko_KR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 0c02f44e5..34b3929e0 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -702,7 +702,7 @@ "UpdaterRenameFailed": "업데이터가 파일 이름을 바꿀 수 없음 : {0}", "UpdaterAddingFiles": "새 파일 추가...", "UpdaterExtracting": "업데이트 추출...", - "UpdaterDownloading": ""업데이트 내려받기 중...", + "UpdaterDownloading": "업데이트 내려받기 중...", "Game": "게임", "Docked": "도킹", "Handheld": "휴대", -- 2.47.1 From 1ed2aea029fa9c05d07749be3963c3cb91c1d1f6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 14 Nov 2024 02:28:00 -0600 Subject: [PATCH 050/722] Update ko_KR again --- src/Ryujinx/Assets/Locales/ko_KR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 34b3929e0..bcac40138 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -848,7 +848,7 @@ "MultiplayerMode": "모드 :", "MultiplayerModeTooltip": "LDN 멀티플레이어 모드를 변경합니다.\n\nLdnMitm은 게임의 로컬 무선/로컬 플레이 기능을 LAN처럼 작동하도록 수정하여 다른 Ryujinx 인스턴스나 ldn_mitm 모듈이 설치된 해킹된 Nintendo Switch 콘솔과 로컬, 동일 네트워크 연결이 가능합니다.\n\n멀티플레이어는 모든 플레이어가 동일한 게임 버전을 사용해야 합니다(예: Super Smash Bros. Ultimate v13.0.1은 v13.0.0에 연결할 수 없음).\n\n모르면 비활성화 상태로 두세요.", "MultiplayerModeDisabled": "비활성화됨", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", "MultiplayerModeLdnRyu": "RyuLDN", "MultiplayerDisableP2P": "P2P 네트워크 호스팅 비활성화(대기 시간이 늘어날 수 있음)", "MultiplayerDisableP2PTooltip": "P2P 네트워크 호스팅을 비활성화하면 피어가 직접 연결하지 않고 마스터 서버를 통해 프록시합니다.", -- 2.47.1 From 0c23104792aa5c65a470c8eac11298ebb53bb40c Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Fri, 15 Nov 2024 07:24:18 +0100 Subject: [PATCH 051/722] Add mention of canary to README.md (#236) --- README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7fa78c4b0..2f0f72dad 100644 --- a/README.md +++ b/README.md @@ -70,12 +70,18 @@ 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 release +## Latest build -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**. +Stable builds are made every so often onto a separate "release" branch that then gets put into the releases you know and love. +These stable builds exist so that the end user can get a more **enjoyable and stable experience**. -You can find the latest release [here](https://github.com/GreemDev/Ryujinx/releases/latest). +You can find the latest stable release [here](https://github.com/GreemDev/Ryujinx/releases/latest). + +Canary builds are compiled automatically for each commit on the master branch. +While we strive to ensure optimal stability and performance prior to pushing an update, these builds **may be unstable or completely broken**. +These canary builds are only recommended for experienced users. + +You can find the latest canary release [here](https://github.com/GreemDev/Ryujinx-Canary/releases/latest). ## Documentation -- 2.47.1 From 1e53a170415b9a0daa834f8633ecd47f46ca1acd Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 15 Nov 2024 01:18:00 -0600 Subject: [PATCH 052/722] misc: Add LEGO Horizon Adventures image asset to Discord RPC --- src/Ryujinx.UI.Common/DiscordIntegrationModule.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs index d4b2a4187..a26f6a7b2 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs @@ -248,7 +248,7 @@ namespace Ryujinx.UI.Common "0100744001588000", // Cars 3: Driven to Win "0100b41013c82000", // Cruis'n Blast "01008c8012920000", // Dying Light Platinum Edition - "01000a10041ea000", // The Elder Scrolls V: Skyrim + "010073c01af34000", // LEGO Horizon Adventures "0100770008dd8000", // Monster Hunter Generations Ultimate "0100b04011742000", // Monster Hunter Rise "0100853015e86000", // No Man's Sky @@ -263,6 +263,7 @@ namespace Ryujinx.UI.Common "0100d7a01b7a2000", // Star Wars: Bounty Hunter "0100800015926000", // Suika Game "0100e46006708000", // Terraria + "01000a10041ea000", // The Elder Scrolls V: Skyrim "010080b00ad66000", // Undertale ]; } -- 2.47.1 From 9b90e81817c06b8ef3495862af1a97de576d3f39 Mon Sep 17 00:00:00 2001 From: EmulationEnjoyer <144477224+EmulationEnjoyer@users.noreply.github.com> Date: Fri, 15 Nov 2024 07:26:35 +0000 Subject: [PATCH 053/722] Fix window sizing when "Show Title Bar" is enabled (#247) Fixes a bug that causes the main window to not size properly when the TitleBar is enabled (i.e.: when the TitleBar and MenuStrip are separate entities). Corrects the size for main window startup and when a user clicks a "View > Window Size > *Resolution Here*" MenuStripItem Prior to this fix if a user selects 720p/1080p and "Show Title Bar" is enabled, the window would be sized smaller than intended and display black bars on the sides of the render area --- .../UI/Views/Main/MainMenuBarView.axaml.cs | 14 ++++++++++---- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 18 ++++++++++++------ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index ce4d9fd59..144ab408f 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -184,18 +184,24 @@ namespace Ryujinx.Ava.UI.Views.Main if (sender is not MenuItem { Tag: string resolution }) return; - (int width, int height) = resolution.Split(' ', 2) + (int resolutionWidth, int resolutionHeight) = resolution.Split(' ', 2) .Into(parts => (int.Parse(parts[0]), int.Parse(parts[1])) ); + // Correctly size window when 'TitleBar' is enabled (Nov. 14, 2024) + double barsHeight = ((Window.StatusBarHeight + Window.MenuBarHeight) + + (ConfigurationState.Instance.ShowTitleBar ? (int)Window.TitleBar.Height : 0)); + + double windowWidthScaled = (resolutionWidth * Program.WindowScaleFactor); + double windowHeightScaled = ((resolutionHeight + barsHeight) * Program.WindowScaleFactor); + await Dispatcher.UIThread.InvokeAsync(() => { + ViewModel.WindowState = WindowState.Normal; - height += (int)Window.StatusBarHeight + (int)Window.MenuBarHeight; - - Window.Arrange(new Rect(Window.Position.X, Window.Position.Y, width, height)); + Window.Arrange(new Rect(Window.Position.X, Window.Position.Y, windowWidthScaled, windowHeightScaled)); }); } diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index a43c29518..4ddcee07f 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -65,6 +65,9 @@ namespace Ryujinx.Ava.UI.Windows public static bool ShowKeyErrorOnLoad { get; set; } public ApplicationLibrary ApplicationLibrary { get; set; } + // Correctly size window when 'TitleBar' is enabled (Nov. 14, 2024) + public readonly double TitleBarHeight; + public readonly double StatusBarHeight; public readonly double MenuBarHeight; @@ -85,12 +88,12 @@ namespace Ryujinx.Ava.UI.Windows TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowTitleBar; TitleBar.TitleBarHitTestType = (ConfigurationState.Instance.ShowTitleBar) ? TitleBarHitTestType.Simple : TitleBarHitTestType.Complex; + // Correctly size window when 'TitleBar' is enabled (Nov. 14, 2024) + TitleBarHeight = (ConfigurationState.Instance.ShowTitleBar ? TitleBar.Height : 0); + // NOTE: Height of MenuBar and StatusBar is not usable here, since it would still be 0 at this point. StatusBarHeight = StatusBarView.StatusBar.MinHeight; MenuBarHeight = MenuBar.MinHeight; - double barHeight = MenuBarHeight + StatusBarHeight; - Height = ((Height - barHeight) / Program.WindowScaleFactor) + barHeight; - Width /= Program.WindowScaleFactor; SetWindowSizePosition(); @@ -406,7 +409,8 @@ namespace Ryujinx.Ava.UI.Windows { if (!ConfigurationState.Instance.RememberWindowState) { - ViewModel.WindowHeight = (720 + StatusBarHeight + MenuBarHeight) * Program.WindowScaleFactor; + // Correctly size window when 'TitleBar' is enabled (Nov. 14, 2024) + ViewModel.WindowHeight = (720 + StatusBarHeight + MenuBarHeight + TitleBarHeight) * Program.WindowScaleFactor; ViewModel.WindowWidth = 1280 * Program.WindowScaleFactor; WindowState = WindowState.Normal; @@ -441,8 +445,10 @@ namespace Ryujinx.Ava.UI.Windows // Only save rectangle properties if the window is not in a maximized state. if (WindowState != WindowState.Maximized) { - ConfigurationState.Instance.UI.WindowStartup.WindowSizeHeight.Value = (int)Height; - ConfigurationState.Instance.UI.WindowStartup.WindowSizeWidth.Value = (int)Width; + // Since scaling is being applied to the loaded settings from disk (see SetWindowSizePosition() above), scaling should be removed from width/height before saving out to disk + // as well - otherwise anyone not using a 1.0 scale factor their window will increase in size with every subsequent launch of the program when scaling is applied (Nov. 14, 2024) + ConfigurationState.Instance.UI.WindowStartup.WindowSizeHeight.Value = (int)(Height / Program.WindowScaleFactor); + ConfigurationState.Instance.UI.WindowStartup.WindowSizeWidth.Value = (int)(Width / Program.WindowScaleFactor); ConfigurationState.Instance.UI.WindowStartup.WindowPositionX.Value = Position.X; ConfigurationState.Instance.UI.WindowStartup.WindowPositionY.Value = Position.Y; -- 2.47.1 From 6de3afc43db0a3b130d2444742e5a89237847f81 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 15 Nov 2024 06:02:26 -0600 Subject: [PATCH 054/722] misc: chore: Move build instructions into its own markdown file; remove compatibility section since there's no games list. --- COMPILING.md | 23 +++++++++++++++++++++++ README.md | 33 --------------------------------- 2 files changed, 23 insertions(+), 33 deletions(-) create mode 100644 COMPILING.md diff --git a/COMPILING.md b/COMPILING.md new file mode 100644 index 000000000..06cebab44 --- /dev/null +++ b/COMPILING.md @@ -0,0 +1,23 @@ +## Compilation + +Building the project is for advanced users. +If you wish to build the emulator yourself, follow these steps: + +### Step 1 + +Install the [.NET 8.0 (or higher) SDK](https://dotnet.microsoft.com/download/dotnet/8.0). +Make sure your SDK version is higher or equal to the required version specified in [global.json](global.json). + +### Step 2 + +Either use `git clone https://github.com/GreemDev/Ryujinx` on the command line to clone the repository or use Code --> Download zip button to get the files. + +### Step 3 + +To build Ryujinx, open a command prompt inside the project directory. +You can quickly access it on Windows by holding shift in File Explorer, then right clicking and selecting `Open command window here`. +Then type the following command: `dotnet build -c Release -o build` +the built files will be found in the newly created build directory. + +Ryujinx system files are stored in the `Ryujinx` folder. +This folder is located in the user folder, which can be accessed by clicking `Open Ryujinx Folder` under the File menu in the GUI. \ No newline at end of file diff --git a/README.md b/README.md index 2f0f72dad..3bc223f3a 100644 --- a/README.md +++ b/README.md @@ -56,15 +56,6 @@

-## Compatibility - -As of May 2024, Ryujinx has been tested on approximately 4,300 titles; -over 4,100 boot past menus and into gameplay, with roughly 3,550 of those being considered playable. - -Anyone is free to submit a new game test or update an existing game test entry; -simply follow the new issue template and testing guidelines, or post as a reply to the applicable game issue. -Use the search function to see if a game has been tested already! - ## Usage To run this emulator, your PC must be equipped with at least 8GiB of RAM; @@ -87,30 +78,6 @@ You can find the latest canary release [here](https://github.com/GreemDev/Ryujin If you are planning to contribute or just want to learn more about this project please read through our [documentation](docs/README.md). -## Building - -Building the project is for advanced users. -If you wish to build the emulator yourself, follow these steps: - -### Step 1 - -Install the [.NET 8.0 (or higher) SDK](https://dotnet.microsoft.com/download/dotnet/8.0). -Make sure your SDK version is higher or equal to the required version specified in [global.json](global.json). - -### Step 2 - -Either use `git clone https://github.com/GreemDev/Ryujinx` on the command line to clone the repository or use Code --> Download zip button to get the files. - -### Step 3 - -To build Ryujinx, open a command prompt inside the project directory. -You can quickly access it on Windows by holding shift in File Explorer, then right clicking and selecting `Open command window here`. -Then type the following command: `dotnet build -c Release -o build` -the built files will be found in the newly created build directory. - -Ryujinx system files are stored in the `Ryujinx` folder. -This folder is located in the user folder, which can be accessed by clicking `Open Ryujinx Folder` under the File menu in the GUI. - ## Features - **Audio** -- 2.47.1 From d394dd769a4f8390c41a978e8187964ca3312ef0 Mon Sep 17 00:00:00 2001 From: Nicola <61830443+nicola02nb@users.noreply.github.com> Date: Sun, 17 Nov 2024 07:15:06 +0100 Subject: [PATCH 055/722] Updated IT translation file (#243) --- src/Ryujinx/Assets/Locales/it_IT.json | 80 ++++++++++++++++++++------- 1 file changed, 60 insertions(+), 20 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index ee2bd3a16..349b53500 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -33,8 +33,9 @@ "MenuBarFileLoadDlcFromFolder": "Carica DLC Da una Cartella", "MenuBarFileLoadTitleUpdatesFromFolder": "Carica Aggiornamenti Da una Cartella", "MenuBarFileOpenFromFileError": "Nessuna applicazione trovata nel file selezionato", - "MenuBarView": "_View", - "MenuBarViewWindow": "Window Size", + "MenuBarToolsXCITrimmer": "Trim XCI Files", + "MenuBarView": "_Vista", + "MenuBarViewWindow": "Dimensione Finestra", "MenuBarViewWindow720": "720p", "MenuBarViewWindow1080": "1080p", "MenuBarHelp": "_Aiuto", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Apre la cartella che contiene le mod dell'applicazione", "GameListContextMenuOpenSdModsDirectory": "Apri la cartella delle mod Atmosphere", "GameListContextMenuOpenSdModsDirectoryToolTip": "Apre la cartella alternativa di Atmosphere sulla scheda SD che contiene le mod dell'applicazione. Utile per le mod create per funzionare sull'hardware reale.", - "StatusBarGamesLoaded": "{0}/{1} giochi caricati", + "GameListContextMenuTrimXCI": "Controlla e Trimma i file XCI", + "GameListContextMenuTrimXCIToolTip": "Controlla e Trimma i file XCI da Salvare Sullo Spazio del Disco", + "StatusBarGamesLoaded": "{0}/{1} Giochi Caricati", "StatusBarSystemVersion": "Versione di sistema: {0}", + "StatusBarXCIFileTrimming": "Trimmando i file XCI '{0}'", "LinuxVmMaxMapCountDialogTitle": "Rilevato limite basso per le mappature di memoria", "LinuxVmMaxMapCountDialogTextPrimary": "Vuoi aumentare il valore di vm.max_map_count a {0}?", "LinuxVmMaxMapCountDialogTextSecondary": "Alcuni giochi potrebbero provare a creare più mappature di memoria di quanto sia attualmente consentito. Ryujinx si bloccherà non appena questo limite viene superato.", @@ -99,8 +103,8 @@ "SettingsTabGeneralEnableDiscordRichPresence": "Attiva Discord Rich Presence", "SettingsTabGeneralCheckUpdatesOnLaunch": "Controlla aggiornamenti all'avvio", "SettingsTabGeneralShowConfirmExitDialog": "Mostra dialogo \"Conferma Uscita\"", - "SettingsTabGeneralRememberWindowState": "Remember Window Size/Position", - "SettingsTabGeneralShowTitleBar": "Show Title Bar (Requires restart)", + "SettingsTabGeneralRememberWindowState": "Ricorda Dimensione/Posizione Finestra", + "SettingsTabGeneralShowTitleBar": "Mostra barra del titolo (Richiede il riavvio)", "SettingsTabGeneralHideCursor": "Nascondi il cursore:", "SettingsTabGeneralHideCursorNever": "Mai", "SettingsTabGeneralHideCursorOnIdle": "Quando è inattivo", @@ -400,6 +404,8 @@ "InputDialogTitle": "Finestra di input", "InputDialogOk": "OK", "InputDialogCancel": "Annulla", + "InputDialogCancelling": "Cancellando", + "InputDialogClose": "Chiudi", "InputDialogAddNewProfileTitle": "Scegli il nome del profilo", "InputDialogAddNewProfileHeader": "Digita un nome profilo", "InputDialogAddNewProfileSubtext": "(Lunghezza massima: {0})", @@ -407,7 +413,7 @@ "AvatarSetBackgroundColor": "Imposta colore di sfondo", "AvatarClose": "Chiudi", "ControllerSettingsLoadProfileToolTip": "Carica profilo", - "ControllerSettingsViewProfileToolTip": "View Profile", + "ControllerSettingsViewProfileToolTip": "Visualizza profilo", "ControllerSettingsAddProfileToolTip": "Aggiungi profilo", "ControllerSettingsRemoveProfileToolTip": "Rimuovi profilo", "ControllerSettingsSaveProfileToolTip": "Salva profilo", @@ -417,7 +423,7 @@ "GameListContextMenuToggleFavorite": "Preferito", "GameListContextMenuToggleFavoriteToolTip": "Segna il gioco come preferito", "SettingsTabGeneralTheme": "Tema:", - "SettingsTabGeneralThemeAuto": "Auto", + "SettingsTabGeneralThemeAuto": "Automatico", "SettingsTabGeneralThemeDark": "Scuro", "SettingsTabGeneralThemeLight": "Chiaro", "ControllerSettingsConfigureGeneral": "Configura", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "Tipi di file disinstallati con successo!", "DialogUninstallFileTypesErrorMessage": "Disinstallazione dei tipi di file non riuscita.", "DialogOpenSettingsWindowLabel": "Apri finestra delle impostazioni", + "DialogOpenXCITrimmerWindowLabel": "Finestra XCI Trimmer", "DialogControllerAppletTitle": "Applet del controller", "DialogMessageDialogErrorExceptionMessage": "Errore nella visualizzazione del Message Dialog: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Errore nella visualizzazione della tastiera software: {0}", @@ -522,7 +529,7 @@ "DialogModManagerDeletionAllWarningMessage": "Stai per eliminare tutte le mod per questo titolo.\n\nVuoi davvero procedere?", "SettingsTabGraphicsFeaturesOptions": "Funzionalità", "SettingsTabGraphicsBackendMultithreading": "Multithreading del backend grafico:", - "CommonAuto": "Auto", + "CommonAuto": "Automatico", "CommonOff": "Disattivato", "CommonOn": "Attivo", "InputDialogYes": "Sì", @@ -669,9 +676,15 @@ "OpenSetupGuideMessage": "Apri la guida all'installazione", "NoUpdate": "Nessun aggiornamento", "TitleUpdateVersionLabel": "Versione {0}", - "TitleBundledUpdateVersionLabel": "Incluso: Version {0}", - "TitleBundledDlcLabel": "Incluso:", - "RyujinxInfo": "Ryujinx - Info", + "TitleBundledUpdateVersionLabel": "In bundle: Versione {0}", + "TitleBundledDlcLabel": "In bundle:", + "TitleXCIStatusPartialLabel": "Parziale", + "TitleXCIStatusTrimmableLabel": "Non Trimmato", + "TitleXCIStatusUntrimmableLabel": "Trimmato", + "TitleXCIStatusFailedLabel": "(Fallito)", + "TitleXCICanSaveLabel": "Salva {0:n0} Mb", + "TitleXCISavingLabel": "Salva {0:n0} Mb", + "RyujinxInfo": "Ryujinx - Informazioni", "RyujinxConfirm": "Ryujinx - Conferma", "FileDialogAllTypes": "Tutti i tipi", "Never": "Mai", @@ -723,27 +736,54 @@ "SelectDlcDialogTitle": "Seleziona file dei DLC", "SelectUpdateDialogTitle": "Seleziona file di aggiornamento", "SelectModDialogTitle": "Seleziona cartella delle mod", + "TrimXCIFileDialogTitle": "Controlla e Trimma i file XCI ", + "TrimXCIFileDialogPrimaryText": "Questa funzionalita controllerà prima lo spazio libero e poi trimmerà il file XCI per liberare dello spazio.", + "TrimXCIFileDialogSecondaryText": "Dimensioni Attuali File: {0:n} MB\nDimensioni Dati Gioco: {1:n} MB\nRisparimio Spazio Disco: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "Il file XCI non deve essere trimmato. Controlla i log per ulteriori dettagli", + "TrimXCIFileNoUntrimPossible": "Il file XCI non può essere untrimmato. Controlla i log per ulteriori dettagli", + "TrimXCIFileReadOnlyFileCannotFix": "Il file XCI è in sola lettura e non può essere reso Scrivibile. Controlla i log per ulteriori dettagli", + "TrimXCIFileFileSizeChanged": "Il file XCI ha cambiato dimensioni da quando è stato scansionato. Controlla che il file non stia venendo scritto da qualche altro programma e poi riprova.", + "TrimXCIFileFreeSpaceCheckFailed": "Il file XCI ha dati nello spazio libero, non è sicuro effettuare il trimming", + "TrimXCIFileInvalidXCIFile": "Il file XCI contiene dati invlidi. Controlla i log per ulteriori dettagli", + "TrimXCIFileFileIOWriteError": "Il file XCI non può essere aperto per essere scritto. Controlla i log per ulteriori dettagli", + "TrimXCIFileFailedPrimaryText": "Trimming del file XCI fallito", + "TrimXCIFileCancelled": "Operazione Cancellata", + "TrimXCIFileFileUndertermined": "Nessuna operazione è stata effettuata", "UserProfileWindowTitle": "Gestione profili utente", "CheatWindowTitle": "Gestione trucchi", "DlcWindowTitle": "Gestisci DLC per {0} ({1})", "ModWindowTitle": "Gestisci mod per {0} ({1})", "UpdateWindowTitle": "Gestione aggiornamenti", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} di {1} Titolo(i) Selezionati", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Titolo(i) Selezionati ({2} visualizzato)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Titolo(i)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Titolo(i)...", + "XCITrimmerTitleStatusFailed": "Fallito", + "XCITrimmerPotentialSavings": "Potenziali Salvataggi", + "XCITrimmerActualSavings": "Effettivi Salvataggi", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Seleziona Visualizzati", + "XCITrimmerDeselectDisplayed": "Deselziona Visualizzati", + "XCITrimmerSortName": "Titolo", + "XCITrimmerSortSaved": "Salvataggio Spazio", + "UpdateWindowUpdateAddedMessage": "{0} aggiornamento/i aggiunto/i", + "UpdateWindowBundledContentNotice": "Gli aggiornamenti inclusi non possono essere eliminati, ma solo disattivati", "CheatWindowHeading": "Trucchi disponibili per {0} [{1}]", "BuildId": "ID Build", + "DlcWindowBundledContentNotice": "i DLC \"impacchettati\" non possono essere rimossi, ma solo disabilitati.", "DlcWindowHeading": "DLC disponibili per {0} [{1}]", - "ModWindowHeading": "{0} mod", - "UserProfilesEditProfile": "Modifica selezionati", - "Cancel": "Annulla", - "Save": "Salva", - "Discard": "Scarta", - "UpdateWindowBundledContentNotice": "Gli aggiornamenti inclusi non possono essere eliminati, ma solo disattivati", + "DlcWindowDlcAddedMessage": "{0} nuovo/i contenuto/i scaricabile/i aggiunto/i", "AutoloadDlcAddedMessage": "{0} contenuto/i scaricabile/i aggiunto/i", "AutoloadDlcRemovedMessage": "{0} contenuto/i scaricabile/i mancante/i rimosso/i", "AutoloadUpdateAddedMessage": "{0} aggiornamento/i aggiunto/i", "AutoloadUpdateRemovedMessage": "{0} aggiornamento/i mancante/i rimosso/i", - "DlcWindowBundledContentNotice": "i DLC \"impacchettati\" non possono essere rimossi, ma solo disabilitati.", - "DlcWindowDlcAddedMessage": "{0} nuovo/i contenuto/i scaricabile/i aggiunto/i", - "UpdateWindowUpdateAddedMessage": "{0} aggiornamento/i aggiunto/i", + "ModWindowHeading": "{0} mod", + "UserProfilesEditProfile": "Modifica selezionati", + "Continue": "Continua", + "Cancel": "Annulla", + "Save": "Salva", + "Discard": "Scarta", "Paused": "In pausa", "UserProfilesSetProfileImage": "Imposta immagine profilo", "UserProfileEmptyNameError": "Il nome è obbligatorio", -- 2.47.1 From e5d076a1b2e5c7abac41758f3c7ac6c040502586 Mon Sep 17 00:00:00 2001 From: Nicola <61830443+nicola02nb@users.noreply.github.com> Date: Sun, 17 Nov 2024 07:16:05 +0100 Subject: [PATCH 056/722] Fixed some broken urls (#249) --- src/Ryujinx/Assets/Locales/ar_SA.json | 2 +- src/Ryujinx/Assets/Locales/de_DE.json | 2 +- src/Ryujinx/Assets/Locales/el_GR.json | 2 +- src/Ryujinx/Assets/Locales/en_US.json | 2 +- src/Ryujinx/Assets/Locales/es_ES.json | 2 +- src/Ryujinx/Assets/Locales/fr_FR.json | 2 +- src/Ryujinx/Assets/Locales/he_IL.json | 2 +- src/Ryujinx/Assets/Locales/it_IT.json | 2 +- src/Ryujinx/Assets/Locales/ja_JP.json | 2 +- src/Ryujinx/Assets/Locales/ko_KR.json | 4 ++-- src/Ryujinx/Assets/Locales/pl_PL.json | 2 +- src/Ryujinx/Assets/Locales/pt_BR.json | 2 +- src/Ryujinx/Assets/Locales/ru_RU.json | 2 +- src/Ryujinx/Assets/Locales/th_TH.json | 2 +- src/Ryujinx/Assets/Locales/tr_TR.json | 2 +- src/Ryujinx/Assets/Locales/uk_UA.json | 2 +- src/Ryujinx/Assets/Locales/zh_CN.json | 2 +- src/Ryujinx/Assets/Locales/zh_TW.json | 2 +- 18 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index 495ab4b4d..723a7f133 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "أنت غير متصل بالإنترنت.", "DialogUpdaterNoInternetSubMessage": "يرجى التحقق من أن لديك اتصال إنترنت فعال!", "DialogUpdaterDirtyBuildMessage": "لا يمكنك تحديث نسخة القذرة من ريوجينكس!", - "DialogUpdaterDirtyBuildSubMessage": "الرجاء تحميل ريوجينكس من https://https://github.com/GreemDev/Ryujinx/releases إذا كنت تبحث عن إصدار مدعوم.", + "DialogUpdaterDirtyBuildSubMessage": "الرجاء تحميل ريوجينكس من https://ryujinx.app/download إذا كنت تبحث عن إصدار مدعوم.", "DialogRestartRequiredMessage": "يتطلب إعادة التشغيل", "DialogThemeRestartMessage": "تم حفظ السمة. إعادة التشغيل مطلوبة لتطبيق السمة.", "DialogThemeRestartSubMessage": "هل تريد إعادة التشغيل", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index e23f3b619..856f87198 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "Es besteht keine Verbindung mit dem Internet!", "DialogUpdaterNoInternetSubMessage": "Bitte vergewissern, dass eine funktionierende Internetverbindung existiert!", "DialogUpdaterDirtyBuildMessage": "Inoffizielle Versionen von Ryujinx können nicht aktualisiert werden", - "DialogUpdaterDirtyBuildSubMessage": "Lade Ryujinx bitte von hier herunter, um eine unterstützte Version zu erhalten: https://https://github.com/GreemDev/Ryujinx/releases/", + "DialogUpdaterDirtyBuildSubMessage": "Lade Ryujinx bitte von hier herunter, um eine unterstützte Version zu erhalten: https://ryujinx.app/download", "DialogRestartRequiredMessage": "Neustart erforderlich", "DialogThemeRestartMessage": "Das Design wurde gespeichert. Ein Neustart ist erforderlich, um das Design anzuwenden.", "DialogThemeRestartSubMessage": "Jetzt neu starten?", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index 79975b892..9bba65ae2 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "Δεν είστε συνδεδεμένοι στο Διαδίκτυο!", "DialogUpdaterNoInternetSubMessage": "Επαληθεύστε ότι έχετε σύνδεση στο Διαδίκτυο που λειτουργεί!", "DialogUpdaterDirtyBuildMessage": "Δεν μπορείτε να ενημερώσετε μία Πρόχειρη Έκδοση του Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Κάντε λήψη του Ryujinx στη διεύθυνση https://https://github.com/GreemDev/Ryujinx/releases/ εάν αναζητάτε μία υποστηριζόμενη έκδοση.", + "DialogUpdaterDirtyBuildSubMessage": "Κάντε λήψη του Ryujinx στη διεύθυνση https://ryujinx.app/download εάν αναζητάτε μία υποστηριζόμενη έκδοση.", "DialogRestartRequiredMessage": "Απαιτείται Επανεκκίνηση", "DialogThemeRestartMessage": "Το θέμα έχει αποθηκευτεί. Απαιτείται επανεκκίνηση για την εφαρμογή του θέματος.", "DialogThemeRestartSubMessage": "Θέλετε να κάνετε επανεκκίνηση", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index fdd2d4df2..85691481f 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -462,7 +462,7 @@ "DialogUpdaterNoInternetMessage": "You are not connected to the Internet!", "DialogUpdaterNoInternetSubMessage": "Please verify that you have a working Internet connection!", "DialogUpdaterDirtyBuildMessage": "You cannot update a Dirty build of Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Please download Ryujinx at https://github.com/GreemDev/Ryujinx/releases/ if you are looking for a supported version.", + "DialogUpdaterDirtyBuildSubMessage": "Please download Ryujinx at https://ryujinx.app/download if you are looking for a supported version.", "DialogRestartRequiredMessage": "Restart Required", "DialogThemeRestartMessage": "Theme has been saved. A restart is needed to apply the theme.", "DialogThemeRestartSubMessage": "Do you want to restart", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index e6da1d113..161351539 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "¡No estás conectado a internet!", "DialogUpdaterNoInternetSubMessage": "¡Por favor, verifica que tu conexión a Internet funciona!", "DialogUpdaterDirtyBuildMessage": "¡No puedes actualizar una versión \"dirty\" de Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Por favor, descarga Ryujinx en https://https://github.com/GreemDev/Ryujinx/releases/ si buscas una versión con soporte.", + "DialogUpdaterDirtyBuildSubMessage": "Por favor, descarga Ryujinx en https://ryujinx.app/download si buscas una versión con soporte.", "DialogRestartRequiredMessage": "Se necesita reiniciar", "DialogThemeRestartMessage": "Tema guardado. Se necesita reiniciar para aplicar el tema.", "DialogThemeRestartSubMessage": "¿Quieres reiniciar?", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index e52333cea..0073a2cf5 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "Vous n'êtes pas connecté à Internet !", "DialogUpdaterNoInternetSubMessage": "Veuillez vérifier que vous disposez d'une connexion Internet fonctionnelle !", "DialogUpdaterDirtyBuildMessage": "Vous ne pouvez pas mettre à jour une version Dirty de Ryujinx !", - "DialogUpdaterDirtyBuildSubMessage": "Veuillez télécharger Ryujinx sur https://github.com/GreemDev/Ryujinx/releases/ si vous recherchez une version prise en charge.", + "DialogUpdaterDirtyBuildSubMessage": "Veuillez télécharger Ryujinx sur https://ryujinx.app/download si vous recherchez une version prise en charge.", "DialogRestartRequiredMessage": "Redémarrage requis", "DialogThemeRestartMessage": "Le thème a été enregistré. Un redémarrage est requis pour appliquer le thème.", "DialogThemeRestartSubMessage": "Voulez-vous redémarrer", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index d2bd21124..dd86e10f4 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "אתם לא מחוברים לאינטרנט!", "DialogUpdaterNoInternetSubMessage": "אנא ודא שיש לך חיבור אינטרנט תקין!", "DialogUpdaterDirtyBuildMessage": "אתם לא יכולים לעדכן מבנה מלוכלך של ריוג'ינקס!", - "DialogUpdaterDirtyBuildSubMessage": "אם אתם מחפשים גרסא נתמכת, אנא הורידו את ריוג'ינקס בכתובת https://https://github.com/GreemDev/Ryujinx/releases", + "DialogUpdaterDirtyBuildSubMessage": "אם אתם מחפשים גרסא נתמכת, אנא הורידו את ריוג'ינקס בכתובת https://ryujinx.app/download", "DialogRestartRequiredMessage": "אתחול נדרש", "DialogThemeRestartMessage": "ערכת הנושא נשמרה. יש צורך בהפעלה מחדש כדי להחיל את ערכת הנושא.", "DialogThemeRestartSubMessage": "האם ברצונך להפעיל מחדש?", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index 349b53500..fff0f99e9 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -462,7 +462,7 @@ "DialogUpdaterNoInternetMessage": "Non sei connesso ad Internet!", "DialogUpdaterNoInternetSubMessage": "Verifica di avere una connessione ad Internet funzionante!", "DialogUpdaterDirtyBuildMessage": "Non puoi aggiornare una Dirty build di Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Scarica Ryujinx da https://https://github.com/GreemDev/Ryujinx/releases/ se stai cercando una versione supportata.", + "DialogUpdaterDirtyBuildSubMessage": "Scarica Ryujinx da https://ryujinx.app/download se stai cercando una versione supportata.", "DialogRestartRequiredMessage": "Riavvio richiesto", "DialogThemeRestartMessage": "Il tema è stato salvato. È richiesto un riavvio per applicare il tema.", "DialogThemeRestartSubMessage": "Vuoi riavviare?", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index 8d15ab678..ed7809d03 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "インターネットに接続されていません!", "DialogUpdaterNoInternetSubMessage": "インターネット接続が正常動作しているか確認してください!", "DialogUpdaterDirtyBuildMessage": "Dirty ビルドの Ryujinx はアップデートできません!", - "DialogUpdaterDirtyBuildSubMessage": "サポートされているバージョンをお探しなら, https://https://github.com/GreemDev/Ryujinx/releases/ で Ryujinx をダウンロードしてください.", + "DialogUpdaterDirtyBuildSubMessage": "サポートされているバージョンをお探しなら, https://ryujinx.app/download で Ryujinx をダウンロードしてください.", "DialogRestartRequiredMessage": "再起動が必要", "DialogThemeRestartMessage": "テーマがセーブされました. テーマを適用するには再起動が必要です.", "DialogThemeRestartSubMessage": "再起動しますか", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index bcac40138..275fd3802 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -462,7 +462,7 @@ "DialogUpdaterNoInternetMessage": "인터넷에 연결되어 있지 않습니다!", "DialogUpdaterNoInternetSubMessage": "인터넷이 제대로 연결되어 있는지 확인하세요!", "DialogUpdaterDirtyBuildMessage": "Ryujinx의 더티 빌드는 업데이트할 수 없습니다!", - "DialogUpdaterDirtyBuildSubMessage": "지원되는 버전을 찾으신다면 https://github.com/GreemDev/Ryujinx/releases/에서 Ryujinx를 내려받으세요.", + "DialogUpdaterDirtyBuildSubMessage": "지원되는 버전을 찾으신다면 https://ryujinx.app/download 에서 Ryujinx를 내려받으세요.", "DialogRestartRequiredMessage": "다시 시작 필요", "DialogThemeRestartMessage": "테마를 저장했습니다. 테마를 적용하려면 다시 시작해야 합니다.", "DialogThemeRestartSubMessage": "다시 시작하시겠습니까?", @@ -861,4 +861,4 @@ "ClearLdnPass": "지우기", "ClearLdnPassTooltip": "현재 암호를 지우고 공용 네트워크로 돌아갑니다.", "InvalidLdnPassphrase": "유효하지 않은 암호입니다! \"Ryujinx-<8 hex chars>\" 형식이어야 합니다." - } +} diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index d6356dc76..37b0df9e8 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "Nie masz połączenia z Internetem!", "DialogUpdaterNoInternetSubMessage": "Sprawdź, czy masz działające połączenie internetowe!", "DialogUpdaterDirtyBuildMessage": "Nie możesz zaktualizować Dirty wersji Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Pobierz Ryujinx ze strony https://https://github.com/GreemDev/Ryujinx/releases/, jeśli szukasz obsługiwanej wersji.", + "DialogUpdaterDirtyBuildSubMessage": "Pobierz Ryujinx ze strony https://ryujinx.app/download, jeśli szukasz obsługiwanej wersji.", "DialogRestartRequiredMessage": "Wymagane Ponowne Uruchomienie", "DialogThemeRestartMessage": "Motyw został zapisany. Aby zastosować motyw, konieczne jest ponowne uruchomienie.", "DialogThemeRestartSubMessage": "Czy chcesz uruchomić ponownie?", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index 42a8e437b..e27c3d9a4 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "Você não está conectado à Internet!", "DialogUpdaterNoInternetSubMessage": "Por favor, certifique-se de que você tem uma conexão funcional à Internet!", "DialogUpdaterDirtyBuildMessage": "Você não pode atualizar uma compilação Dirty do Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Por favor, baixe o Ryujinx em https://https://github.com/GreemDev/Ryujinx/releases/ se está procurando por uma versão suportada.", + "DialogUpdaterDirtyBuildSubMessage": "Por favor, baixe o Ryujinx em https://ryujinx.app/download se está procurando por uma versão suportada.", "DialogRestartRequiredMessage": "Reinicialização necessária", "DialogThemeRestartMessage": "O tema foi salvo. Uma reinicialização é necessária para aplicar o tema.", "DialogThemeRestartSubMessage": "Deseja reiniciar?", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index 4ef6ff6d9..910e8a443 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "Вы не подключены к интернету", "DialogUpdaterNoInternetSubMessage": "Убедитесь, что у вас работает подключение к интернету", "DialogUpdaterDirtyBuildMessage": "Вы не можете обновлять Dirty Build", - "DialogUpdaterDirtyBuildSubMessage": "Загрузите Ryujinx по адресу https://https://github.com/GreemDev/Ryujinx/releases/ если вам нужна поддерживаемая версия.", + "DialogUpdaterDirtyBuildSubMessage": "Загрузите Ryujinx по адресу https://ryujinx.app/download если вам нужна поддерживаемая версия.", "DialogRestartRequiredMessage": "Требуется перезагрузка", "DialogThemeRestartMessage": "Тема сохранена. Для применения темы требуется перезапуск.", "DialogThemeRestartSubMessage": "Хотите перезапустить", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index 91169d9e2..ab7a26690 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "คุณไม่ได้เชื่อมต่อกับอินเทอร์เน็ต!", "DialogUpdaterNoInternetSubMessage": "โปรดตรวจสอบว่าคุณมีการเชื่อมต่ออินเทอร์เน็ตว่ามีการใช้งานได้หรือไม่!", "DialogUpdaterDirtyBuildMessage": "คุณไม่สามารถอัปเดต Dirty build ของ Ryujinx ได้!", - "DialogUpdaterDirtyBuildSubMessage": "โปรดดาวน์โหลด Ryujinx ได้ที่ https://https://github.com/GreemDev/Ryujinx/releases/ หากคุณกำลังมองหาเวอร์ชั่นที่รองรับ", + "DialogUpdaterDirtyBuildSubMessage": "โปรดดาวน์โหลด Ryujinx ได้ที่ https://ryujinx.app/download หากคุณกำลังมองหาเวอร์ชั่นที่รองรับ", "DialogRestartRequiredMessage": "จำเป็นต้องรีสตาร์ทเพื่อให้การอัพเดตสามารถให้งานได้", "DialogThemeRestartMessage": "บันทึกธีมแล้ว จำเป็นต้องรีสตาร์ทเพื่อใช้ธีม", "DialogThemeRestartSubMessage": "คุณต้องการรีสตาร์ทหรือไม่?", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index b9ce3e884..2b08c4590 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "İnternete bağlı değilsiniz!", "DialogUpdaterNoInternetSubMessage": "Lütfen aktif bir internet bağlantınız olduğunu kontrol edin!", "DialogUpdaterDirtyBuildMessage": "Ryujinx'in Dirty build'lerini güncelleyemezsiniz!", - "DialogUpdaterDirtyBuildSubMessage": "Desteklenen bir sürüm için lütfen Ryujinx'i https://https://github.com/GreemDev/Ryujinx/releases/ sitesinden indirin.", + "DialogUpdaterDirtyBuildSubMessage": "Desteklenen bir sürüm için lütfen Ryujinx'i https://ryujinx.app/download sitesinden indirin.", "DialogRestartRequiredMessage": "Yeniden Başlatma Gerekli", "DialogThemeRestartMessage": "Tema kaydedildi. Temayı uygulamak için yeniden başlatma gerekiyor.", "DialogThemeRestartSubMessage": "Yeniden başlatmak ister misiniz", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 581d1bca1..3d6c131b8 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "Ви не підключені до Інтернету!", "DialogUpdaterNoInternetSubMessage": "Будь ласка, переконайтеся, що у вас є робоче підключення до Інтернету!", "DialogUpdaterDirtyBuildMessage": "Ви не можете оновити брудну збірку Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "Будь ласка, завантажте Ryujinx на https://https://github.com/GreemDev/Ryujinx/releases/, якщо ви шукаєте підтримувану версію.", + "DialogUpdaterDirtyBuildSubMessage": "Будь ласка, завантажте Ryujinx на https://ryujinx.app/download, якщо ви шукаєте підтримувану версію.", "DialogRestartRequiredMessage": "Потрібен перезапуск", "DialogThemeRestartMessage": "Тему збережено. Щоб застосувати тему, потрібен перезапуск.", "DialogThemeRestartSubMessage": "Ви хочете перезапустити", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index 3426b8a4a..dd43dc741 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "没有连接到网络", "DialogUpdaterNoInternetSubMessage": "请确保互联网连接正常。", "DialogUpdaterDirtyBuildMessage": "无法更新非官方版本的 Ryujinx 模拟器!", - "DialogUpdaterDirtyBuildSubMessage": "如果想使用受支持的版本,请您在 https://https://github.com/GreemDev/Ryujinx/releases/ 下载官方版本。", + "DialogUpdaterDirtyBuildSubMessage": "如果想使用受支持的版本,请您在 https://ryujinx.app/download 下载官方版本。", "DialogRestartRequiredMessage": "需要重启模拟器", "DialogThemeRestartMessage": "主题设置已保存,需要重启模拟器才能生效。", "DialogThemeRestartSubMessage": "是否要重启模拟器?", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index fd02254e1..35a7cffdc 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -456,7 +456,7 @@ "DialogUpdaterNoInternetMessage": "您沒有連線到網際網路!", "DialogUpdaterNoInternetSubMessage": "請確認您的網際網路連線正常!", "DialogUpdaterDirtyBuildMessage": "您無法更新非官方版本的 Ryujinx!", - "DialogUpdaterDirtyBuildSubMessage": "如果您正在尋找受官方支援的版本,請從 https://https://github.com/GreemDev/Ryujinx/releases/ 下載 Ryujinx。", + "DialogUpdaterDirtyBuildSubMessage": "如果您正在尋找受官方支援的版本,請從 https://ryujinx.app/download 下載 Ryujinx。", "DialogRestartRequiredMessage": "需要重新啟動", "DialogThemeRestartMessage": "佈景主題設定已儲存。需要重新啟動才能套用主題。", "DialogThemeRestartSubMessage": "您要重新啟動嗎", -- 2.47.1 From 11416e21671f1ea5f01fb238b81466e3d7df3f92 Mon Sep 17 00:00:00 2001 From: jzumaran Date: Sun, 17 Nov 2024 03:17:56 -0300 Subject: [PATCH 057/722] i18n: es_ES: Added missing translations and minor fixes (#242) Added missing translations and fixed a few spelling mistakes. --- src/Ryujinx/Assets/Locales/es_ES.json | 90 +++++++++++++++------------ 1 file changed, 51 insertions(+), 39 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index 161351539..41af0c900 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -10,10 +10,10 @@ "SettingsTabSystemUseHypervisor": "Usar hipervisor", "MenuBarFile": "_Archivo", "MenuBarFileOpenFromFile": "_Cargar aplicación desde un archivo", - "MenuBarFileOpenFromFileError": "No applications found in selected file.", + "MenuBarFileOpenFromFileError": "No se encontraron aplicaciones en el archivo seleccionado.", "MenuBarFileOpenUnpacked": "Cargar juego _desempaquetado", - "MenuBarFileLoadDlcFromFolder": "Load DLC From Folder", - "MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder", + "MenuBarFileLoadDlcFromFolder": "Cargar DLC Desde Carpeta", + "MenuBarFileLoadTitleUpdatesFromFolder": "Cargar Actualizaciones de Títulos Desde Carpeta", "MenuBarFileOpenEmuFolder": "Abrir carpeta de Ryujinx", "MenuBarFileOpenLogsFolder": "Abrir carpeta de registros", "MenuBarFileExit": "_Salir", @@ -34,7 +34,7 @@ "MenuBarToolsInstallFileTypes": "Instalar tipos de archivo", "MenuBarToolsUninstallFileTypes": "Desinstalar tipos de archivo", "MenuBarView": "_View", - "MenuBarViewWindow": "Window Size", + "MenuBarViewWindow": "Tamaño Ventana", "MenuBarViewWindow720": "720p", "MenuBarViewWindow1080": "1080p", "MenuBarHelp": "_Ayuda", @@ -99,15 +99,15 @@ "SettingsTabGeneralEnableDiscordRichPresence": "Habilitar estado en Discord", "SettingsTabGeneralCheckUpdatesOnLaunch": "Buscar actualizaciones al iniciar", "SettingsTabGeneralShowConfirmExitDialog": "Mostrar diálogo de confirmación al cerrar", - "SettingsTabGeneralRememberWindowState": "Remember Window Size/Position", - "SettingsTabGeneralShowTitleBar": "Show Title Bar (Requires restart)", + "SettingsTabGeneralRememberWindowState": "Recordar Tamaño/Posición de la Ventana", + "SettingsTabGeneralShowTitleBar": "Mostrar Barra de Título (Requiere reinicio)", "SettingsTabGeneralHideCursor": "Esconder el cursor:", "SettingsTabGeneralHideCursorNever": "Nunca", "SettingsTabGeneralHideCursorOnIdle": "Ocultar cursor cuando esté inactivo", "SettingsTabGeneralHideCursorAlways": "Siempre", "SettingsTabGeneralGameDirectories": "Carpetas de juegos", - "SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories", - "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", + "SettingsTabGeneralAutoloadDirectories": "Carpetas de DLC/Actualizaciones para Carga Automática", + "SettingsTabGeneralAutoloadNote": "DLC y Actualizaciones que hacen referencia a archivos ausentes serán desactivado automáticamente", "SettingsTabGeneralAdd": "Agregar", "SettingsTabGeneralRemove": "Quitar", "SettingsTabSystem": "Sistema", @@ -142,10 +142,10 @@ "SettingsTabSystemSystemTime": "Hora del sistema:", "SettingsTabSystemEnableVsync": "Sincronización vertical", "SettingsTabSystemEnablePptc": "PPTC (Cache de Traducción de Perfil Persistente)", - "SettingsTabSystemEnableLowPowerPptc": "Low-power PPTC", + "SettingsTabSystemEnableLowPowerPptc": "Cache PPTC de bajo consumo", "SettingsTabSystemEnableFsIntegrityChecks": "Comprobar integridad de los archivos", "SettingsTabSystemAudioBackend": "Motor de audio:", - "SettingsTabSystemAudioBackendDummy": "Vacio", + "SettingsTabSystemAudioBackendDummy": "Vacío", "SettingsTabSystemAudioBackendOpenAL": "OpenAL", "SettingsTabSystemAudioBackendSoundIO": "SoundIO", "SettingsTabSystemAudioBackendSDL2": "SDL2", @@ -407,7 +407,7 @@ "AvatarSetBackgroundColor": "Establecer color de fondo", "AvatarClose": "Cerrar", "ControllerSettingsLoadProfileToolTip": "Cargar perfil", - "ControllerSettingsViewProfileToolTip": "View Profile", + "ControllerSettingsViewProfileToolTip": "Ver perfil", "ControllerSettingsAddProfileToolTip": "Agregar perfil", "ControllerSettingsRemoveProfileToolTip": "Eliminar perfil", "ControllerSettingsSaveProfileToolTip": "Guardar perfil", @@ -461,7 +461,7 @@ "DialogThemeRestartMessage": "Tema guardado. Se necesita reiniciar para aplicar el tema.", "DialogThemeRestartSubMessage": "¿Quieres reiniciar?", "DialogFirmwareInstallEmbeddedMessage": "¿Quieres instalar el firmware incluido en este juego? (Firmware versión {0})", - "DialogFirmwareInstallEmbeddedSuccessMessage": "No installed firmware was found but Ryujinx was able to install firmware {0} from the provided game.\nThe emulator will now start.", + "DialogFirmwareInstallEmbeddedSuccessMessage": "No se encontró ning{un firmware instalado pero Ryujinx pudo instalar firmware {0} del juego proporcionado.\nEl emulador iniciará.", "DialogFirmwareNoFirmwareInstalledMessage": "No hay firmware instalado", "DialogFirmwareInstalledMessage": "Se instaló el firmware {0}", "DialogInstallFileTypesSuccessMessage": "¡Tipos de archivos instalados con éxito!", @@ -568,22 +568,22 @@ "AddGameDirBoxTooltip": "Elige un directorio de juegos para mostrar en la ventana principal", "AddGameDirTooltip": "Agrega un directorio de juegos a la lista", "RemoveGameDirTooltip": "Quita el directorio seleccionado de la lista", - "AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list", - "AddAutoloadDirTooltip": "Add an autoload directory to the list", - "RemoveAutoloadDirTooltip": "Remove selected autoload directory", + "AddAutoloadDirBoxTooltip": "Elige un directorio de carga automática para agregar a la lista", + "AddAutoloadDirTooltip": "Agregar un directorio de carga automática a la lista", + "RemoveAutoloadDirTooltip": "Eliminar el directorio de carga automática seleccionado", "CustomThemeCheckTooltip": "Activa o desactiva los temas personalizados para la interfaz", "CustomThemePathTooltip": "Carpeta que contiene los temas personalizados para la interfaz", "CustomThemeBrowseTooltip": "Busca un tema personalizado para la interfaz", "DockModeToggleTooltip": "El modo dock o modo TV hace que la consola emulada se comporte como una Nintendo Switch en su dock. Esto mejora la calidad gráfica en la mayoría de los juegos. Del mismo modo, si lo desactivas, el sistema emulado se comportará como una Nintendo Switch en modo portátil, reduciendo la cálidad de los gráficos.\n\nConfigura los controles de \"Jugador\" 1 si planeas jugar en modo dock/TV; configura los controles de \"Portátil\" si planeas jugar en modo portátil.\n\nActívalo si no sabes qué hacer.", - "DirectKeyboardTooltip": "Direct keyboard access (HID) support. Provides games access to your keyboard as a text entry device.\n\nOnly works with games that natively support keyboard usage on Switch hardware.\n\nLeave OFF if unsure.", - "DirectMouseTooltip": "Direct mouse access (HID) support. Provides games access to your mouse as a pointing device.\n\nOnly works with games that natively support mouse controls on Switch hardware, which are few and far between.\n\nWhen enabled, touch screen functionality may not work.\n\nLeave OFF if unsure.", + "DirectKeyboardTooltip": "Soporte de acceso directo al teclado (HID). Proporciona a los juegos acceso a su teclado como dispositivo de entrada de texto.\n\nSolo funciona con juegos que permiten de forma nativa el uso del teclado en el hardware de Switch.\n\nDesactívalo si no sabes qué hacer.", + "DirectMouseTooltip": "Soporte de acceso directo al mouse (HID). Proporciona a los juegos acceso a su mouse como puntero.\n\nSolo funciona con juegos que permiten de forma nativa el uso de controles con mouse en el hardware de switch, lo cual son pocos.\n\nCuando esté activado, la funcionalidad de pantalla táctil puede no funcionar.\n\nDesactívalo si no sabes qué hacer.", "RegionTooltip": "Cambia la región del sistema", "LanguageTooltip": "Cambia el idioma del sistema", "TimezoneTooltip": "Cambia la zona horaria del sistema", "TimeTooltip": "Cambia la hora del sistema", - "VSyncToggleTooltip": "Emulated console's Vertical Sync. Essentially a frame-limiter for the majority of games; disabling it may cause games to run at higher speed or make loading screens take longer or get stuck.\n\nCan be toggled in-game with a hotkey of your preference (F1 by default). We recommend doing this if you plan on disabling it.\n\nLeave ON if unsure.", + "VSyncToggleTooltip": "Sincronización vertical de la consola emulada. En práctica un limitador del framerate para la mayoría de los juegos; desactivando puede causar que juegos corran a mayor velocidad o que las pantallas de carga tarden más o queden atascados.\n\nSe puede alternar en juego utilizando una tecla de acceso rápido configurable (F1 by default). Recomendamos hacer esto en caso de querer desactivar sincroniziación vertical.\n\nDesactívalo si no sabes qué hacer.", "PptcToggleTooltip": "Guarda funciones de JIT traducidas para que no sea necesario traducirlas cada vez que el juego carga.\n\nReduce los tirones y acelera significativamente el tiempo de inicio de los juegos después de haberlos ejecutado al menos una vez.\n\nActívalo si no sabes qué hacer.", - "LowPowerPptcToggleTooltip": "Load the PPTC using a third of the amount of cores.", + "LowPowerPptcToggleTooltip": "Cargue el PPTC utilizando un tercio de la cantidad de núcleos.", "FsIntegrityToggleTooltip": "Comprueba si hay archivos corruptos en los juegos que ejecutes al abrirlos, y si detecta archivos corruptos, muestra un error de Hash en los registros.\n\nEsto no tiene impacto alguno en el rendimiento y está pensado para ayudar a resolver problemas.\n\nActívalo si no sabes qué hacer.", "AudioBackendTooltip": "Cambia el motor usado para renderizar audio.\n\nSDL2 es el preferido, mientras que OpenAL y SoundIO se usan si hay problemas con este. Dummy no produce audio.\n\nSelecciona SDL2 si no sabes qué hacer.", "MemoryManagerTooltip": "Cambia la forma de mapear y acceder a la memoria del guest. Afecta en gran medida al rendimiento de la CPU emulada.\n\nSelecciona \"Host sin verificación\" si no sabes qué hacer.", @@ -597,10 +597,10 @@ "GraphicsBackendThreadingTooltip": "Ejecuta los comandos del motor gráfico en un segundo hilo. Acelera la compilación de sombreadores, reduce los tirones, y mejora el rendimiento en controladores gráficos que no realicen su propio procesamiento con múltiples hilos. Rendimiento ligeramente superior en controladores gráficos que soporten múltiples hilos.\n\nSelecciona \"Auto\" si no sabes qué hacer.", "GalThreadingTooltip": "Ejecuta los comandos del motor gráfico en un segundo hilo. Acelera la compilación de sombreadores, reduce los tirones, y mejora el rendimiento en controladores gráficos que no realicen su propio procesamiento con múltiples hilos. Rendimiento ligeramente superior en controladores gráficos que soporten múltiples hilos.\n\nSelecciona \"Auto\" si no sabes qué hacer.", "ShaderCacheToggleTooltip": "Guarda una caché de sombreadores en disco, la cual reduce los tirones a medida que vas jugando.\n\nActívalo si no sabes qué hacer.", - "ResolutionScaleTooltip": "Multiplies the game's rendering resolution.\n\nA few games may not work with this and look pixelated even when the resolution is increased; for those games, you may need to find mods that remove anti-aliasing or that increase their internal rendering resolution. For using the latter, you'll likely want to select Native.\n\nThis option can be changed while a game is running by clicking \"Apply\" below; you can simply move the settings window aside and experiment until you find your preferred look for a game.\n\nKeep in mind 4x is overkill for virtually any setup.", + "ResolutionScaleTooltip": "Multiplica la resolución de rendereo del juego.\n\nAlgunos juegos podrían no funcionar con esto y verse pixelado al aumentar la resolución; en esos casos, quizás sería necesario buscar mods que de anti-aliasing o que aumenten la resolución interna. Para usar este último, probablemente necesitarás seleccionar Nativa.\n\nEsta opción puede ser modificada mientras que un juego este corriendo haciendo click en \"Aplicar\" más abajo; simplemente puedes mover la ventana de configuración a un lado y experimentar hasta que encuentres tu estilo preferido para un juego.\n\nTener en cuenta que 4x es excesivo para prácticamente cualquier configuración.", "ResolutionScaleEntryTooltip": "Escalado de resolución de coma flotante, como por ejemplo 1,5. Los valores no íntegros pueden causar errores gráficos o crashes.", - "AnisotropyTooltip": "Level of Anisotropic Filtering. Set to Auto to use the value requested by the game.", - "AspectRatioTooltip": "Aspect Ratio applied to the renderer window.\n\nOnly change this if you're using an aspect ratio mod for your game, otherwise the graphics will be stretched.\n\nLeave on 16:9 if unsure.", + "AnisotropyTooltip": "Nivel de filtrado anisotrópico. Setear en Auto para utilizar el valor solicitado por el juego.", + "AspectRatioTooltip": "Relación de aspecto aplicada a la ventana del renderizador.\n\nSolamente modificar esto si estás utilizando un mod de relación de aspecto para su juego, en cualquier otro caso los gráficos se estirarán.\n\nDejar en 16:9 si no sabe que hacer.", "ShaderDumpPathTooltip": "Directorio en el cual se volcarán los sombreadores de los gráficos", "FileLogTooltip": "Guarda los registros de la consola en archivos en disco. No afectan al rendimiento.", "StubLogTooltip": "Escribe mensajes de Stub en la consola. No afectan al rendimiento.", @@ -616,8 +616,8 @@ "DebugLogTooltip": "Escribe mensajes de debug en la consola\n\nActiva esto solo si un miembro del equipo te lo pide expresamente, pues hará que el registro sea difícil de leer y empeorará el rendimiento del emulador.", "LoadApplicationFileTooltip": "Abre el explorador de archivos para elegir un archivo compatible con Switch para cargar", "LoadApplicationFolderTooltip": "Abre el explorador de archivos para elegir un archivo desempaquetado y compatible con Switch para cargar", - "LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from", - "LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from", + "LoadDlcFromFolderTooltip": "Abrir un explorador de archivos para seleccionar una o más carpetas para cargar DLC de forma masiva", + "LoadTitleUpdatesFromFolderTooltip": "Abrir un explorador de archivos para seleccionar una o más carpetas para cargar actualizaciones de título de forma masiva", "OpenRyujinxFolderTooltip": "Abre la carpeta de sistema de Ryujinx", "OpenRyujinxLogsTooltip": "Abre la carpeta en la que se guardan los registros", "ExitTooltip": "Cierra Ryujinx", @@ -726,18 +726,18 @@ "UserProfileWindowTitle": "Administrar perfiles de usuario", "CheatWindowTitle": "Administrar cheats", "DlcWindowTitle": "Administrar contenido descargable", - "ModWindowTitle": "Manage Mods for {0} ({1})", + "ModWindowTitle": "Administrar Mods para {0} ({1})", "UpdateWindowTitle": "Administrar actualizaciones", - "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", - "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", + "UpdateWindowUpdateAddedMessage": "{0} nueva(s) actualización(es) agregada(s)", + "UpdateWindowBundledContentNotice": "Las actualizaciones agrupadas no pueden ser eliminadas, solamente deshabilitadas.", "CheatWindowHeading": "Cheats disponibles para {0} [{1}]", "BuildId": "Id de compilación:", "DlcWindowHeading": "Contenido descargable disponible para {0} [{1}]", - "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", - "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", - "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", - "AutoloadUpdateAddedMessage": "{0} new update(s) added", - "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", + "DlcWindowDlcAddedMessage": "Se agregaron {0} nuevo(s) contenido(s) descargable(s)", + "AutoloadDlcAddedMessage": "Se agregaron {0} nuevo(s) contenido(s) descargable(s)", + "AutoloadDlcRemovedMessage": "Se eliminaron {0} contenido(s) descargable(s) faltantes", + "AutoloadUpdateAddedMessage": "Se agregaron {0} nueva(s) actualización(es)", + "AutoloadUpdateRemovedMessage": "Se eliminaron {0} actualización(es) faltantes", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Editar selección", "Cancel": "Cancelar", @@ -753,9 +753,9 @@ "UserProfilesName": "Nombre:", "UserProfilesUserId": "Id de Usuario:", "SettingsTabGraphicsBackend": "Fondo de gráficos", - "SettingsTabGraphicsBackendTooltip": "Select the graphics backend that will be used in the emulator.\n\nVulkan is overall better for all modern graphics cards, as long as their drivers are up to date. Vulkan also features faster shader compilation (less stuttering) on all GPU vendors.\n\nOpenGL may achieve better results on old Nvidia GPUs, on old AMD GPUs on Linux, or on GPUs with lower VRAM, though shader compilation stutters will be greater.\n\nSet to Vulkan if unsure. Set to OpenGL if your GPU does not support Vulkan even with the latest graphics drivers.", + "SettingsTabGraphicsBackendTooltip": "Seleccione el backend gráfico que utilizará el emulador.\n\nVulkan, en general, es mejor para todas las tarjetas gráficas modernas, mientras que sus controladores estén actualizados. Vulkan también cuenta con complicación más rápida de sombreadores (menos tirones) en todos los proveredores de GPU.\n\nOpenGL puede lograr mejores resultados en GPU Nvidia antiguas, GPU AMD antiguas en Linux o en GPUs con menor VRAM, aunque tirones de compilación de sombreadores serán mayores.\n\nSetear en Vulkan si no sabe que hacer. Setear en OpenGL si su GPU no tiene soporte para Vulkan aún con los últimos controladores gráficos.", "SettingsEnableTextureRecompression": "Activar recompresión de texturas", - "SettingsEnableTextureRecompressionTooltip": "Compresses ASTC textures in order to reduce VRAM usage.\n\nGames using this texture format include Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder and The Legend of Zelda: Tears of the Kingdom.\n\nGraphics cards with 4GiB VRAM or less will likely crash at some point while running these games.\n\nEnable only if you're running out of VRAM on the aforementioned games. Leave OFF if unsure.", + "SettingsEnableTextureRecompressionTooltip": "Comprimir texturas ASTC para reducir uso de VRAM.\n\nJuegos que utilizan este formato de textura incluyen Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder y The Legend of Zelda: Tears of the Kingdom.\n\nTarjetas gráficas con 4GiB de VRAM o menos probalemente se caeran en algún momento mientras que estén corriendo estos juegos.\n\nActivar solo si está quedan sin VRAM en los juegos antes mencionados. Desactívalo si no sabes qué hacer.", "SettingsTabGraphicsPreferredGpu": "GPU preferida", "SettingsTabGraphicsPreferredGpuTooltip": "Selecciona la tarjeta gráfica que se utilizará con los back-end de gráficos Vulkan.\n\nNo afecta la GPU que utilizará OpenGL.\n\nFije a la GPU marcada como \"dGUP\" ante dudas. Si no hay una, no haga modificaciones.", "SettingsAppRequiredRestartMessage": "Reinicio de Ryujinx requerido.", @@ -772,7 +772,7 @@ "UserProfilesManageSaves": "Administrar mis partidas guardadas", "DeleteUserSave": "¿Quieres borrar los datos de usuario de este juego?", "IrreversibleActionNote": "Esta acción no es reversible.", - "SaveManagerHeading": "Manage Saves for {0}", + "SaveManagerHeading": "Administrar partidas guardadas para {0}", "SaveManagerTitle": "Administrador de datos de guardado.", "Name": "Nombre", "Size": "Tamaño", @@ -781,11 +781,11 @@ "Recover": "Recuperar", "UserProfilesRecoverHeading": "Datos de guardado fueron encontrados para las siguientes cuentas", "UserProfilesRecoverEmptyList": "No hay perfiles a recuperar", - "GraphicsAATooltip": "Applies anti-aliasing to the game render.\n\nFXAA will blur most of the image, while SMAA will attempt to find jagged edges and smooth them out.\n\nNot recommended to use in conjunction with the FSR scaling filter.\n\nThis option can be changed while a game is running by clicking \"Apply\" below; you can simply move the settings window aside and experiment until you find your preferred look for a game.\n\nLeave on NONE if unsure.", + "GraphicsAATooltip": "Aplica antia-aliasing al rendereo del juego.\n\nFXAA desenfocará la mayor parte del la iamgen, mientras que SMAA intentará encontrar bordes irregulares y suavizarlos.\n\nNo se recomienda usar en conjunto con filtro de escala FSR.\n\nEsta opción puede ser modificada mientras que esté corriendo el juego haciendo click en \"Aplicar\" más abajo; simplemente puedes mover la ventana de configuración a un lado y experimentar hasta que encuentres tu estilo preferido para un juego.\n\nDejar en NADA si no está seguro.", "GraphicsAALabel": "Suavizado de bordes:", "GraphicsScalingFilterLabel": "Filtro de escalado:", "GraphicsScalingFilterTooltip": "Elija el filtro de escala que se aplicará al utilizar la escala de resolución.\n\nBilinear funciona bien para juegos 3D y es una opción predeterminada segura.\n\nSe recomienda el bilinear para juegos de pixel art.\n\nFSR 1.0 es simplemente un filtro de afilado, no se recomienda su uso con FXAA o SMAA.\n\nEsta opción se puede cambiar mientras se ejecuta un juego haciendo clic en \"Aplicar\" a continuación; simplemente puedes mover la ventana de configuración a un lado y experimentar hasta que encuentres tu estilo preferido para un juego.\n\nDéjelo en BILINEAR si no está seguro.", - "GraphicsScalingFilterBilinear": "Bilinear\n", + "GraphicsScalingFilterBilinear": "Bilinear", "GraphicsScalingFilterNearest": "Cercano", "GraphicsScalingFilterFsr": "FSR", "GraphicsScalingFilterArea": "Area", @@ -806,6 +806,18 @@ "SettingsTabNetworkMultiplayer": "Multijugador", "MultiplayerMode": "Modo:", "MultiplayerModeTooltip": "Cambiar modo LDN multijugador.\n\nLdnMitm modificará la funcionalidad local de juego inalámbrico para funcionar como si fuera LAN, permitiendo locales conexiones de la misma red con otras instancias de Ryujinx y consolas hackeadas de Nintendo Switch que tienen instalado el módulo ldn_mitm.\n\nMultijugador requiere que todos los jugadores estén en la misma versión del juego (por ejemplo, Super Smash Bros. Ultimate v13.0.1 no se puede conectar a v13.0.0).\n\nDejar DESACTIVADO si no está seguro.", - "MultiplayerModeDisabled": "Deshabilitar", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeDisabled": "Deshabilitado", + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Desactivar El Hosteo De Red P2P (puede aumentar latencia)", + "MultiplayerDisableP2PTooltip": "Desactivar el hosteo de red P2P, pares se conectarán a través del servidor maestro en lugar de conectarse directamente contigo.", + "LdnPassphrase": "Frase de contraseña de la Red:", + "LdnPassphraseTooltip": "Solo podrás ver los juegos hosteados con la misma frase de contraseña que tú.", + "LdnPassphraseInputTooltip": "Ingresar una frase de contraseña en formato Ryujinx-<8 caracteres hexadecimales>. Solamente podrás ver juegos hosteados con la misma frase de contraseña que tú.", + "LdnPassphraseInputPublic": "(público)", + "GenLdnPass": "Generar aleatorio", + "GenLdnPassTooltip": "Genera una nueva frase de contraseña, que puede ser compartida con otros jugadores.", + "ClearLdnPass": "Borrar", + "ClearLdnPassTooltip": "Borra la frase de contraseña actual, regresando a la red pública.", + "InvalidLdnPassphrase": "Frase de Contraseña Inválida! Debe ser en formato \"Ryujinx-<8 caracteres hexadecimales>\"" } -- 2.47.1 From 52f42d450fb5fb7d2b2dd1d72aef70a07d4e44d5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 17 Nov 2024 00:57:56 -0600 Subject: [PATCH 058/722] try 1: Fix IndexOutOfBounds in SDL2GamepadDriver.cs --- src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs b/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs index 0acbaaa19..fd34fe219 100644 --- a/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs +++ b/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs @@ -115,7 +115,10 @@ namespace Ryujinx.Input.SDL2 { lock (_lock) { - _gamepadsIds.Insert(joystickDeviceId, id); + if (joystickDeviceId <= _gamepadsIds.FindLastIndex(_ => true)) + _gamepadsIds.Insert(joystickDeviceId, id); + else + _gamepadsIds.Add(id); } OnGamepadConnected?.Invoke(id); -- 2.47.1 From 25d69079cbe40c79ad959879a62679e35728ab8f Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Sun, 17 Nov 2024 11:35:37 +0100 Subject: [PATCH 059/722] Fix a couple dead links and spotty wording in docs (#260) Made it clearer that building is for contributors only in `COMPILING.md` Fixed 2 dead links in `CONTRIBUTING.md`, that were caused by separating `COMPILING.md` and file structure changed to `pr-guide.md` --- COMPILING.md | 4 ++-- CONTRIBUTING.md | 4 ++-- docs/workflow/pr-guide.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/COMPILING.md b/COMPILING.md index 06cebab44..20a2eb7ff 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -1,6 +1,6 @@ ## Compilation -Building the project is for advanced users. +Building the project is for users that want to contribute code only. If you wish to build the emulator yourself, follow these steps: ### Step 1 @@ -20,4 +20,4 @@ Then type the following command: `dotnet build -c Release -o build` the built files will be found in the newly created build directory. Ryujinx system files are stored in the `Ryujinx` folder. -This folder is located in the user folder, which can be accessed by clicking `Open Ryujinx Folder` under the File menu in the GUI. \ No newline at end of file +This folder is located in the user folder, which can be accessed by clicking `Open Ryujinx Folder` under the File menu in the GUI. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index af47fc9d9..686ea3994 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -74,7 +74,7 @@ We use and recommend the following workflow: 3. In your fork, create a branch off of main (`git checkout -b mybranch`). - Branches are useful since they isolate your changes from incoming changes from upstream. They also enable you to create multiple PRs from the same fork. 4. Make and commit your changes to your branch. - - [Build Instructions](https://github.com/GreemDev/Ryujinx#building) explains how to build and test. + - [Build Instructions](https://github.com/GreemDev/Ryujinx/blob/master/COMPILING.md) explains how to build and test. - Commit messages should be clear statements of action and intent. 6. Build the repository with your changes. - Make sure that the builds are clean. @@ -83,7 +83,7 @@ We use and recommend the following workflow: - State in the description what issue or improvement your change is addressing. - Check if all the Continuous Integration checks are passing. Refer to [Actions](https://github.com/GreemDev/Ryujinx/actions) to check for outstanding errors. 8. Wait for feedback or approval of your changes from the core development team - - Details about the pull request [review procedure](docs/workflow/ci/pr-guide.md). + - Details about the pull request [review procedure](docs/workflow/pr-guide.md). 9. When the team members have signed off, and all checks are green, your PR will be merged. - The next official build will automatically include your change. - You can delete the branch you used for making the change. diff --git a/docs/workflow/pr-guide.md b/docs/workflow/pr-guide.md index c03db210b..50f44d87f 100644 --- a/docs/workflow/pr-guide.md +++ b/docs/workflow/pr-guide.md @@ -9,7 +9,7 @@ To merge pull requests, you must have write permissions in the repository. ## Quick Code Review Rules * Do not mix unrelated changes in one pull request. For example, a code style change should never be mixed with a bug fix. -* All changes should follow the existing code style. You can read more about our code style at [docs/coding-guidelines](../coding-guidelines/coding-style.md). +* All changes should follow the existing code style. You can read more about our code style at [docs/coding-style](../coding-guidelines/coding-style.md). * Adding external dependencies is to be avoided unless not doing so would introduce _significant_ complexity. Any dependency addition should be justified and discussed before merge. * Use Draft pull requests for changes you are still working on but want early CI loop feedback. When you think your changes are ready for review, [change the status](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/changing-the-stage-of-a-pull-request) of your pull request. * Rebase your changes when required or directly requested. Changes should always be commited on top of the upstream branch, not the other way around. -- 2.47.1 From f4b757c584aabdb43e2f564cf02a1e1ca540f38a Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Mon, 18 Nov 2024 22:05:00 +0100 Subject: [PATCH 060/722] Add `XCITrimmerTrim` and `XCITrimmerUntrim` Locales (#273) --- src/Ryujinx/Assets/Locales/ar_SA.json | 2 ++ src/Ryujinx/Assets/Locales/de_DE.json | 2 ++ src/Ryujinx/Assets/Locales/el_GR.json | 2 ++ src/Ryujinx/Assets/Locales/en_US.json | 2 ++ src/Ryujinx/Assets/Locales/es_ES.json | 2 ++ src/Ryujinx/Assets/Locales/he_IL.json | 2 ++ src/Ryujinx/Assets/Locales/it_IT.json | 2 ++ src/Ryujinx/Assets/Locales/ja_JP.json | 2 ++ src/Ryujinx/Assets/Locales/ko_KR.json | 2 ++ src/Ryujinx/Assets/Locales/pl_PL.json | 2 ++ src/Ryujinx/Assets/Locales/pt_BR.json | 2 ++ src/Ryujinx/Assets/Locales/ru_RU.json | 2 ++ src/Ryujinx/Assets/Locales/th_TH.json | 2 ++ src/Ryujinx/Assets/Locales/tr_TR.json | 2 ++ src/Ryujinx/Assets/Locales/uk_UA.json | 2 ++ src/Ryujinx/Assets/Locales/zh_CN.json | 2 ++ src/Ryujinx/Assets/Locales/zh_TW.json | 2 ++ src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml | 4 ++-- 18 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index 723a7f133..781568fee 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "إدارة المحتوى القابل للتنزيل لـ {0} ({1})", "ModWindowTitle": "إدارة التعديلات لـ {0} ({1})", "UpdateWindowTitle": "مدير تحديث العنوان", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "الغش متوفر لـ {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index 856f87198..c6f9768c6 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "Spiel-DLC verwalten", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Spiel-Updates verwalten", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Cheats verfügbar für {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index 9bba65ae2..76049fc3f 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "Downloadable Content Manager", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Διαχειριστής Ενημερώσεων Τίτλου", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Διαθέσιμα Cheats για {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index 85691481f..9354c8a41 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -767,6 +767,8 @@ "XCITrimmerDeselectDisplayed": "Deselect Shown", "XCITrimmerSortName": "Title", "XCITrimmerSortSaved": "Space Savings", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Cheats Available for {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index 41af0c900..cf5c586d0 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "Administrar contenido descargable", "ModWindowTitle": "Administrar Mods para {0} ({1})", "UpdateWindowTitle": "Administrar actualizaciones", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} nueva(s) actualización(es) agregada(s)", "UpdateWindowBundledContentNotice": "Las actualizaciones agrupadas no pueden ser eliminadas, solamente deshabilitadas.", "CheatWindowHeading": "Cheats disponibles para {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index dd86e10f4..91e3e24e4 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "נהל הרחבות משחק עבור {0} ({1})", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "נהל עדכוני משחקים", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "צ'יטים זמינים עבור {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index fff0f99e9..2a92e70dc 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -767,6 +767,8 @@ "XCITrimmerDeselectDisplayed": "Deselziona Visualizzati", "XCITrimmerSortName": "Titolo", "XCITrimmerSortSaved": "Salvataggio Spazio", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} aggiornamento/i aggiunto/i", "UpdateWindowBundledContentNotice": "Gli aggiornamenti inclusi non possono essere eliminati, ma solo disattivati", "CheatWindowHeading": "Trucchi disponibili per {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index ed7809d03..b8e5870a6 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "DLC 管理", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "アップデート管理", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "利用可能なチート {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 275fd3802..5bda1565b 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -767,6 +767,8 @@ "XCITrimmerDeselectDisplayed": "표시됨 선택 취소", "XCITrimmerSortName": "타이틀", "XCITrimmerSortSaved": "공간 절약s", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0}개의 새 업데이트가 추가됨", "UpdateWindowBundledContentNotice": "번들 업데이트는 제거할 수 없으며, 비활성화만 가능합니다.", "CheatWindowHeading": "{0} [{1}]에 사용 가능한 치트", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index 37b0df9e8..fa88bab5e 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "Menedżer Zawartości do Pobrania", "ModWindowTitle": "Zarządzaj modami dla {0} ({1})", "UpdateWindowTitle": "Menedżer Aktualizacji Tytułu", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Kody Dostępne dla {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index e27c3d9a4..5b7a21494 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "Gerenciador de DLC", "ModWindowTitle": "Gerenciar Mods para {0} ({1})", "UpdateWindowTitle": "Gerenciador de atualizações", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} nova(s) atualização(ões) adicionada(s)", "UpdateWindowBundledContentNotice": "Atualizações incorporadas não podem ser removidas, apenas desativadas.", "CheatWindowHeading": "Cheats disponíveis para {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index 910e8a443..cd17eb301 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "Управление DLC для {0} ({1})", "ModWindowTitle": "Управление модами для {0} ({1})", "UpdateWindowTitle": "Менеджер обновлений игр", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Доступные читы для {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index ab7a26690..d32cfb737 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "จัดการ DLC ที่ดาวน์โหลดได้สำหรับ {0} ({1})", "ModWindowTitle": "จัดการม็อดที่ดาวน์โหลดได้สำหรับ {0} ({1})", "UpdateWindowTitle": "จัดการอัปเดตหัวข้อ", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} อัพเดตที่เพิ่มมาใหม่", "UpdateWindowBundledContentNotice": "แพ็คที่อัพเดตมาไม่สามารถลบทิ้งได้ สามารถปิดใช้งานได้เท่านั้น", "CheatWindowHeading": "สูตรโกงมีให้สำหรับ {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index 2b08c4590..1ac9a0b6e 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "Oyun DLC'lerini Yönet", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Oyun Güncellemelerini Yönet", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "{0} için Hile mevcut [{1}]", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 3d6c131b8..0e22263b6 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "Менеджер вмісту для завантаження", "ModWindowTitle": "Керувати модами для {0} ({1})", "UpdateWindowTitle": "Менеджер оновлення назв", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "Коди доступні для {0} [{1}]", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index dd43dc741..67b2cc9d1 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "管理 {0} ({1}) 的 DLC", "ModWindowTitle": "管理 {0} ({1}) 的 MOD", "UpdateWindowTitle": "游戏更新管理器", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} 个更新被添加", "UpdateWindowBundledContentNotice": "捆绑的更新无法被移除,只可被禁用。", "CheatWindowHeading": "适用于 {0} [{1}] 的金手指", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index 35a7cffdc..9bfc243ae 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -728,6 +728,8 @@ "DlcWindowTitle": "管理 {0} 的可下載內容 ({1})", "ModWindowTitle": "管理 {0} 的模組 ({1})", "UpdateWindowTitle": "遊戲更新管理員", + "XCITrimmerTrim": "Trim", + "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "已加入 {0} 個遊戲更新", "UpdateWindowBundledContentNotice": "附帶的遊戲更新只能被停用而無法被刪除。", "CheatWindowHeading": "可用於 {0} [{1}] 的密技", diff --git a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml index e3640cd7e..d726f8099 100644 --- a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml +++ b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml @@ -296,7 +296,7 @@ Margin="5" Click="Trim" IsEnabled="{Binding CanTrim}"> - + Date: Tue, 19 Nov 2024 08:52:51 +0100 Subject: [PATCH 061/722] Created bool to store if the "Avilable Update" should be hidden on startup (--hide-updates) (#272) fixes #263 --- src/Ryujinx.UI.Common/Helper/CommandLineState.cs | 4 ++++ src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx.UI.Common/Helper/CommandLineState.cs b/src/Ryujinx.UI.Common/Helper/CommandLineState.cs index ae0e4d904..3a96a55c8 100644 --- a/src/Ryujinx.UI.Common/Helper/CommandLineState.cs +++ b/src/Ryujinx.UI.Common/Helper/CommandLineState.cs @@ -16,6 +16,7 @@ namespace Ryujinx.UI.Common.Helper public static string LaunchPathArg { get; private set; } public static string LaunchApplicationId { get; private set; } public static bool StartFullscreenArg { get; private set; } + public static bool HideAvailableUpdates { get; private set; } public static void ParseArguments(string[] args) { @@ -93,6 +94,9 @@ namespace Ryujinx.UI.Common.Helper OverrideHideCursor = args[++i]; break; + case "--hide-updates": + HideAvailableUpdates = true; + break; case "--software-gui": OverrideHardwareAcceleration = false; break; diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 4ddcee07f..829db4bc9 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -383,7 +383,7 @@ namespace Ryujinx.Ava.UI.Windows await Dispatcher.UIThread.InvokeAsync(async () => await UserErrorDialog.ShowUserErrorDialog(UserError.NoKeys)); } - if (ConfigurationState.Instance.CheckUpdatesOnStart && Updater.CanUpdate()) + if (ConfigurationState.Instance.CheckUpdatesOnStart && !CommandLineState.HideAvailableUpdates && Updater.CanUpdate()) { await this.BeginUpdateAsync() .ContinueWith( -- 2.47.1 From 722953211d88aa160469f1677f52b6f10f22582b Mon Sep 17 00:00:00 2001 From: Pitchoune Date: Tue, 19 Nov 2024 08:59:00 +0100 Subject: [PATCH 062/722] Add Zelda Echoes of Wisdom Amiibos informations (#262) This adds missing informations about Zelda Echoes of Wisdom Amiibos. --- assets/amiibo/Amiibo.json | 452 +++++++++++++++++++++++++++++++++++++- 1 file changed, 450 insertions(+), 2 deletions(-) diff --git a/assets/amiibo/Amiibo.json b/assets/amiibo/Amiibo.json index b877ea142..03c2c020e 100644 --- a/assets/amiibo/Amiibo.json +++ b/assets/amiibo/Amiibo.json @@ -707,6 +707,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Blue Attire", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01010300", @@ -3526,6 +3542,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Black Cat Clothes", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01400000", @@ -4160,6 +4192,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -5848,6 +5896,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -6126,6 +6190,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -8341,6 +8421,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -9020,6 +9116,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000100", @@ -9496,6 +9608,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Blue Attire", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01010000", @@ -9833,6 +9961,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -14667,6 +14811,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01030000", @@ -16119,6 +16279,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Black Cat Clothes", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01050000", @@ -16717,6 +16893,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Black Cat Clothes", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01070000", @@ -19745,6 +19937,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Black Cat Clothes", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01080000", @@ -20503,6 +20711,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Blue Attire", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01010000", @@ -21805,6 +22029,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -22340,6 +22580,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Black Cat Clothes", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01020100", @@ -22990,6 +23246,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -23440,6 +23712,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -24660,6 +24948,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Black Cat Clothes", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01410000", @@ -24954,6 +25258,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Black Cat Clothes", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01060000", @@ -25286,6 +25606,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -29114,6 +29450,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Blue Attire", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01010000", @@ -32512,6 +32864,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -32928,6 +33296,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000100", @@ -34800,6 +35184,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Red Tunic", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01000000", @@ -37569,6 +37969,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Blue Attire", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01010100", @@ -41293,6 +41709,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Black Cat Clothes", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01020100", @@ -45153,6 +45585,22 @@ "0100F2C0115B6000" ], "gameName": "The Legend of Zelda: Tears of the Kingdom" + }, + { + "amiiboUsage": [ + { + "Usage": "Receive the Blue Attire", + "write": false + }, + { + "Usage": "Receive random materials", + "write": false + } + ], + "gameID": [ + "01008CF01BAAC000" + ], + "gameName": "The Legend of Zelda: Echoes of Wisdom" } ], "head": "01010000", @@ -47896,5 +48344,5 @@ "type": "Figure" } ], - "lastUpdated": "2024-10-01T00:00:25.035619" -} \ No newline at end of file + "lastUpdated": "2024-11-17T15:28:47.035619" +} -- 2.47.1 From 008d908c5a2a4bdbdd42a75e2ede70242aef7fb7 Mon Sep 17 00:00:00 2001 From: Narugakuruga <31060534+Narugakuruga@users.noreply.github.com> Date: Tue, 19 Nov 2024 15:59:56 +0800 Subject: [PATCH 063/722] Update Chinese locale missing line (#259) --- src/Ryujinx/Assets/Locales/zh_CN.json | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index 67b2cc9d1..004d5007b 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -6,7 +6,7 @@ "SettingsTabSystemMemoryManagerMode": "内存管理模式:", "SettingsTabSystemMemoryManagerModeSoftware": "软件管理", "SettingsTabSystemMemoryManagerModeHost": "本机映射 (较快)", - "SettingsTabSystemMemoryManagerModeHostUnchecked": "跳过检查的本机映射 (最快,但不安全)", + "SettingsTabSystemMemoryManagerModeHostUnchecked": "跳过检查的本机映射 (最快,不安全)", "SettingsTabSystemUseHypervisor": "使用 Hypervisor 虚拟化", "MenuBarFile": "文件(_F)", "MenuBarFileOpenFromFile": "加载游戏文件(_L)", @@ -100,14 +100,14 @@ "SettingsTabGeneralCheckUpdatesOnLaunch": "启动时检查更新", "SettingsTabGeneralShowConfirmExitDialog": "退出游戏时需要确认", "SettingsTabGeneralRememberWindowState": "记住窗口大小和位置", - "SettingsTabGeneralShowTitleBar": "Show Title Bar (Requires restart)", + "SettingsTabGeneralShowTitleBar": "显示标题栏 (需要重启)", "SettingsTabGeneralHideCursor": "隐藏鼠标指针:", "SettingsTabGeneralHideCursorNever": "从不隐藏", "SettingsTabGeneralHideCursorOnIdle": "自动隐藏", "SettingsTabGeneralHideCursorAlways": "始终隐藏", "SettingsTabGeneralGameDirectories": "游戏目录", "SettingsTabGeneralAutoloadDirectories": "自动加载DLC/游戏更新目录", - "SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically", + "SettingsTabGeneralAutoloadNote": "DLC/游戏更新可自动加载和卸载", "SettingsTabGeneralAdd": "添加", "SettingsTabGeneralRemove": "删除", "SettingsTabSystem": "系统", @@ -142,7 +142,7 @@ "SettingsTabSystemSystemTime": "系统时钟:", "SettingsTabSystemEnableVsync": "启用垂直同步", "SettingsTabSystemEnablePptc": "开启 PPTC 缓存", - "SettingsTabSystemEnableLowPowerPptc": "Low-power PPTC", + "SettingsTabSystemEnableLowPowerPptc": "低功耗 PPTC 加载", "SettingsTabSystemEnableFsIntegrityChecks": "启用文件系统完整性检查", "SettingsTabSystemAudioBackend": "音频处理引擎:", "SettingsTabSystemAudioBackendDummy": "无", @@ -407,7 +407,7 @@ "AvatarSetBackgroundColor": "设置背景色", "AvatarClose": "关闭", "ControllerSettingsLoadProfileToolTip": "加载配置文件", - "ControllerSettingsViewProfileToolTip": "View Profile", + "ControllerSettingsViewProfileToolTip": "预览配置文件", "ControllerSettingsAddProfileToolTip": "新增配置文件", "ControllerSettingsRemoveProfileToolTip": "删除配置文件", "ControllerSettingsSaveProfileToolTip": "保存配置文件", @@ -667,7 +667,7 @@ "UserErrorUnknownDescription": "出现未知错误!", "UserErrorUndefinedDescription": "出现未定义错误!此类错误不应出现,请联系开发者!", "OpenSetupGuideMessage": "打开安装指南", - "NoUpdate": "无更新(或不加载游戏更新)", + "NoUpdate": "无更新(默认版本)", "TitleUpdateVersionLabel": "游戏更新的版本 {0}", "TitleBundledUpdateVersionLabel": "捆绑:版本 {0}", "TitleBundledDlcLabel": "捆绑:", @@ -731,17 +731,17 @@ "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} 个更新被添加", - "UpdateWindowBundledContentNotice": "捆绑的更新无法被移除,只可被禁用。", + "UpdateWindowBundledContentNotice": "游戏整合的更新无法移除,可尝试禁用。", "CheatWindowHeading": "适用于 {0} [{1}] 的金手指", "BuildId": "游戏版本 ID:", - "DlcWindowBundledContentNotice": "捆绑的DLC无法被移除,只可被禁用。", + "DlcWindowBundledContentNotice": "游戏整合的DLC无法移除,可尝试禁用。", "DlcWindowHeading": "{0} 个 DLC", "DlcWindowDlcAddedMessage": "{0} 个DLC被添加", "AutoloadDlcAddedMessage": "{0} 个DLC被添加", - "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", + "AutoloadDlcRemovedMessage": "{0} 个失效的DLC已移除", "AutoloadUpdateAddedMessage": "{0} 个游戏更新被添加", - "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", - "ModWindowHeading": "{0} Mod(s)", + "AutoloadUpdateRemovedMessage": "{0} 个失效的游戏更新已移除", + "ModWindowHeading": "{0} Mod", "UserProfilesEditProfile": "编辑所选", "Cancel": "取消", "Save": "保存", @@ -770,7 +770,7 @@ "SettingsEnableMacroHLE": "启用 HLE 宏加速", "SettingsEnableMacroHLETooltip": "GPU 宏指令的高级模拟。\n\n提高性能表现,但一些游戏可能会出现图形错误。\n\n如果不确定,请保持开启状态。", "SettingsEnableColorSpacePassthrough": "色彩空间直通", - "SettingsEnableColorSpacePassthroughTooltip": "使 Vulkan 图形引擎直接传输原始色彩信息。对于宽色域 (例如 DCI-P3) 显示器的用户来说,可以产生更鲜艳的颜色,代价是会损失部分色彩准确度。", + "SettingsEnableColorSpacePassthroughTooltip": "使 Vulkan 图形引擎直接传输原始色彩信息。对于广色域 (例如 DCI-P3) 显示器的用户来说,可以产生更鲜艳的颜色,代价是损失部分色彩准确度。", "VolumeShort": "音量", "UserProfilesManageSaves": "管理存档", "DeleteUserSave": "确定删除此游戏的用户存档吗?", @@ -789,9 +789,9 @@ "GraphicsScalingFilterLabel": "缩放过滤:", "GraphicsScalingFilterTooltip": "选择在分辨率缩放时将使用的缩放过滤器。\n\nBilinear(双线性过滤)对于3D游戏效果较好,是一个安全的默认选项。\n\nNearest(最近邻过滤)推荐用于像素艺术游戏。\n\nFSR(超级分辨率锐画)只是一个锐化过滤器,不推荐与 FXAA 或 SMAA 抗锯齿一起使用。\n\nArea(局部过滤),当渲染分辨率大于窗口实际分辨率,推荐该选项。该选项在渲染比例大于2.0的情况下,可以实现超采样的效果。\n\n在游戏运行时,通过点击下面的“应用”按钮可以使设置生效;你可以将设置窗口移开,并试验找到您喜欢的游戏画面效果。\n\n如果不确定,请保持为“Bilinear(双线性过滤)”。", "GraphicsScalingFilterBilinear": "Bilinear(双线性过滤)", - "GraphicsScalingFilterNearest": "Nearest(最近邻过滤)", + "GraphicsScalingFilterNearest": "Nearest(邻近过滤)", "GraphicsScalingFilterFsr": "FSR(超级分辨率锐画技术)", - "GraphicsScalingFilterArea": "Area(局部过滤)", + "GraphicsScalingFilterArea": "Area(区域过滤)", "GraphicsScalingFilterLevelLabel": "等级", "GraphicsScalingFilterLevelTooltip": "设置 FSR 1.0 的锐化等级,数值越高,图像越锐利。", "SmaaLow": "SMAA 低质量", @@ -808,7 +808,7 @@ "AboutChangelogButtonTooltipMessage": "点击这里在浏览器中打开此版本的更新日志。", "SettingsTabNetworkMultiplayer": "多人联机游玩", "MultiplayerMode": "联机模式:", - "MultiplayerModeTooltip": "修改 LDN 多人联机游玩模式。\n\nldn_mitm 联机插件将修改游戏中的本地无线和本地游玩功能,使其表现得像局域网一样,允许和其他安装了 ldn_mitm 插件的 Ryujinx 模拟器和破解的任天堂 Switch 主机在同一网络下进行本地连接,实现多人联机游玩。\n\n多人联机游玩要求所有玩家必须运行相同的游戏版本(例如,任天堂明星大乱斗特别版 v13.0.1 无法与 v13.0.0 版本联机)。\n\n如果不确定,请保持为“禁用”。", + "MultiplayerModeTooltip": "修改 LDN 多人联机游玩模式。\n\nldn_mitm 联机插件将修改游戏中的本地无线和本地游玩功能,使其表现得像局域网一样,允许和其他安装了 ldn_mitm 插件的 Ryujinx 模拟器和破解的任天堂 Switch 主机在同一网络下进行本地连接,实现多人联机游玩。\n\n多人联机游玩要求所有玩家必须运行相同的游戏版本(例如,游戏版本 v13.0.1 无法与 v13.0.0 联机)。\n\n如果不确定,请保持为“禁用”。", "MultiplayerModeDisabled": "禁用", "MultiplayerModeLdnMitm": "ldn_mitm" } -- 2.47.1 From 8444e4dca01a4d3831655c909ef1647c8a6e68b0 Mon Sep 17 00:00:00 2001 From: Nicola <61830443+nicola02nb@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:16:15 +0100 Subject: [PATCH 064/722] Fixed mime types button not updating after install/uninstall (#241) --- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 10 ++++++++-- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs | 6 ++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 53263847b..f1587a0ff 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -102,6 +102,7 @@ namespace Ryujinx.Ava.UI.ViewModels private float _volumeBeforeMute; private string _backendText; + private bool _areMimeTypesRegistered = FileAssociationHelper.AreMimeTypesRegistered; private bool _canUpdate = true; private Cursor _cursor; private string _title; @@ -804,10 +805,15 @@ namespace Ryujinx.Ava.UI.ViewModels { get => FileAssociationHelper.IsTypeAssociationSupported; } - + public bool AreMimeTypesRegistered { - get => FileAssociationHelper.AreMimeTypesRegistered; + get => _areMimeTypesRegistered; + set { + _areMimeTypesRegistered = value; + + OnPropertyChanged(); + } } public ObservableCollectionExtended Applications diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 144ab408f..41b27e9c1 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -165,7 +165,8 @@ namespace Ryujinx.Ava.UI.Views.Main private async void InstallFileTypes_Click(object sender, RoutedEventArgs e) { - if (FileAssociationHelper.Install()) + ViewModel.AreMimeTypesRegistered = FileAssociationHelper.Install(); + if (ViewModel.AreMimeTypesRegistered) await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty); else await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesErrorMessage]); @@ -173,7 +174,8 @@ namespace Ryujinx.Ava.UI.Views.Main private async void UninstallFileTypes_Click(object sender, RoutedEventArgs e) { - if (FileAssociationHelper.Uninstall()) + ViewModel.AreMimeTypesRegistered = !FileAssociationHelper.Uninstall(); + if (!ViewModel.AreMimeTypesRegistered) await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogUninstallFileTypesSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty); else await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogUninstallFileTypesErrorMessage]); -- 2.47.1 From fda79efed4bfd00582fb749fc575c8a43752087b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 19 Nov 2024 09:30:41 -0600 Subject: [PATCH 065/722] Fix Windows builds not being uploaded --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 183d4c618..d1ea8e449 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -174,7 +174,7 @@ jobs: uses: ncipollo/release-action@v1 with: name: ${{ steps.version_info.outputs.build_version }} - artifacts: "release_output/*.tar.gz,release_output/*.zip/*AppImage*" + artifacts: "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*" tag: ${{ steps.version_info.outputs.build_version }} body: "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}" omitBodyDuringUpdate: true -- 2.47.1 From c3831428e08e9299ab7104a4e4c5354533c2efbf Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 19 Nov 2024 10:22:11 -0600 Subject: [PATCH 066/722] Try and fix weird nullref --- src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs b/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs index be10deca0..9333a1b76 100644 --- a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs +++ b/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs @@ -101,13 +101,13 @@ namespace Ryujinx.UI.Common.Helper { RegistryKey key = Registry.CurrentUser.OpenSubKey(@$"Software\Classes\{ext}"); - if (key is null) + var openCmd = key?.OpenSubKey(@"shell\open\command"); + + if (openCmd is null) { return false; } - - var openCmd = key.OpenSubKey(@"shell\open\command"); - + string keyValue = (string)openCmd.GetValue(string.Empty); return keyValue is not null && (keyValue.Contains("Ryujinx") || keyValue.Contains(AppDomain.CurrentDomain.FriendlyName)); -- 2.47.1 From c0a4d95c5d984df4a862a62d21f5090fb88a32de Mon Sep 17 00:00:00 2001 From: Luke Warner <65521430+LukeWarnut@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:02:24 -0500 Subject: [PATCH 067/722] ARMeilleure: Implement TPIDR2_EL0 (#280) This is an implementation of the TPIDR2_EL0 register. There may be more potential use-cases for this register not included in this PR, but this implements the use-case seen in SuperTuxKart. --- src/ARMeilleure/Instructions/InstEmitSystem.cs | 17 +++++++++++++++++ src/ARMeilleure/State/NativeContext.cs | 9 +++++++++ 2 files changed, 26 insertions(+) diff --git a/src/ARMeilleure/Instructions/InstEmitSystem.cs b/src/ARMeilleure/Instructions/InstEmitSystem.cs index 8c430fc23..fbf3b4a70 100644 --- a/src/ARMeilleure/Instructions/InstEmitSystem.cs +++ b/src/ARMeilleure/Instructions/InstEmitSystem.cs @@ -49,6 +49,9 @@ namespace ARMeilleure.Instructions case 0b11_011_1101_0000_011: EmitGetTpidrroEl0(context); return; + case 0b11_011_1101_0000_101: + EmitGetTpidr2El0(context); + return; case 0b11_011_1110_0000_000: info = typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntfrqEl0)); break; @@ -84,6 +87,9 @@ namespace ARMeilleure.Instructions case 0b11_011_1101_0000_010: EmitSetTpidrEl0(context); return; + case 0b11_011_1101_0000_101: + EmitGetTpidr2El0(context); + return; default: throw new NotImplementedException($"Unknown MSR 0x{op.RawOpCode:X8} at 0x{op.Address:X16}."); @@ -213,6 +219,17 @@ namespace ARMeilleure.Instructions SetIntOrZR(context, op.Rt, result); } + private static void EmitGetTpidr2El0(ArmEmitterContext context) + { + OpCodeSystem op = (OpCodeSystem)context.CurrOp; + + Operand nativeContext = context.LoadArgument(OperandType.I64, 0); + + Operand result = context.Load(OperandType.I64, context.Add(nativeContext, Const((ulong)NativeContext.GetTpidr2El0Offset()))); + + SetIntOrZR(context, op.Rt, result); + } + private static void EmitSetNzcv(ArmEmitterContext context) { OpCodeSystem op = (OpCodeSystem)context.CurrOp; diff --git a/src/ARMeilleure/State/NativeContext.cs b/src/ARMeilleure/State/NativeContext.cs index 628efde41..140b6f7a7 100644 --- a/src/ARMeilleure/State/NativeContext.cs +++ b/src/ARMeilleure/State/NativeContext.cs @@ -21,6 +21,7 @@ namespace ARMeilleure.State public ulong ExclusiveValueLow; public ulong ExclusiveValueHigh; public int Running; + public long Tpidr2El0; } private static NativeCtxStorage _dummyStorage = new(); @@ -176,6 +177,9 @@ namespace ARMeilleure.State public long GetTpidrroEl0() => GetStorage().TpidrroEl0; public void SetTpidrroEl0(long value) => GetStorage().TpidrroEl0 = value; + public long GetTpidr2El0() => GetStorage().Tpidr2El0; + public void SetTpidr2El0(long value) => GetStorage().Tpidr2El0 = value; + public int GetCounter() => GetStorage().Counter; public void SetCounter(int value) => GetStorage().Counter = value; @@ -232,6 +236,11 @@ namespace ARMeilleure.State return StorageOffset(ref _dummyStorage, ref _dummyStorage.TpidrroEl0); } + public static int GetTpidr2El0Offset() + { + return StorageOffset(ref _dummyStorage, ref _dummyStorage.Tpidr2El0); + } + public static int GetCounterOffset() { return StorageOffset(ref _dummyStorage, ref _dummyStorage.Counter); -- 2.47.1 From 150e06e0de20305b521b838fbe5b63379878cc85 Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Wed, 20 Nov 2024 18:52:16 +0100 Subject: [PATCH 068/722] Add `documentation` and `ldn` labels to `labeler.yml` (#282) This should make it so that any changes made to ldn and documentation related files should be auto-labeled --- .github/labeler.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/labeler.yml b/.github/labeler.yml index 54f2757b0..871f9945f 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -33,3 +33,11 @@ kernel: infra: - changed-files: - any-glob-to-any-file: ['.github/**', 'distribution/**', 'Directory.Packages.props'] + +documentation: +- changed-files: + - any-glob-to-any-file: 'docs/**' + +ldn: +- changed-files: + - any-glob-to-any-file: 'src/Ryujinx.HLE/HOS/Services/Ldn/**' -- 2.47.1 From aaaf60b7a4e7793c137019459ab7ef7c8f20c91e Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Wed, 20 Nov 2024 19:20:38 +0100 Subject: [PATCH 069/722] Change headless to nogui in the release artifacts (#285) This makes it so that instead of the files you download being `sdl2-ryujinx-headless` they are now `nogui-ryujinx`in the release (and canary) artifacts --- .github/workflows/build.yml | 4 ++-- .github/workflows/canary.yml | 4 ++-- .github/workflows/nightly_pr_comment.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- distribution/macos/create_macos_build_headless.sh | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b678e5f8e..21dc3eb0b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -122,7 +122,7 @@ jobs: - name: Upload Ryujinx.Headless.SDL2 artifact uses: actions/upload-artifact@v4 with: - name: sdl2-ryujinx-headless-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }} + name: nogui-ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }} path: publish_sdl2_headless if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13' @@ -185,6 +185,6 @@ jobs: - name: Upload Ryujinx.Headless.SDL2 artifact uses: actions/upload-artifact@v4 with: - name: sdl2-ryujinx-headless-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-macos_universal + name: nogui-ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-macos_universal path: "publish_headless/*.tar.gz" if: github.event_name == 'pull_request' diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index d102beaa3..72e1b9515 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -116,7 +116,7 @@ jobs: pushd publish_sdl2_headless rm publish/libarmeilleure-jitsupport.dylib - 7z a ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish + 7z a ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish popd shell: bash @@ -132,7 +132,7 @@ jobs: pushd publish_sdl2_headless rm publish/libarmeilleure-jitsupport.dylib chmod +x publish/Ryujinx.sh publish/Ryujinx.Headless.SDL2 - tar -czvf ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish + tar -czvf ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish popd shell: bash diff --git a/.github/workflows/nightly_pr_comment.yml b/.github/workflows/nightly_pr_comment.yml index 64705b6ee..85a6e2de4 100644 --- a/.github/workflows/nightly_pr_comment.yml +++ b/.github/workflows/nightly_pr_comment.yml @@ -38,12 +38,12 @@ jobs: return core.error(`No artifacts found`); } let body = `Download the artifacts for this pull request:\n`; - let hidden_headless_artifacts = `\n\n
GUI-less (SDL2)\n`; + let hidden_headless_artifacts = `\n\n
GUI-less\n`; let hidden_debug_artifacts = `\n\n
Only for Developers\n`; for (const art of artifacts) { if(art.name.includes('Debug')) { hidden_debug_artifacts += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`; - } else if(art.name.includes('sdl2-ryujinx-headless')) { + } else if(art.name.includes('nogui-ryujinx')) { hidden_headless_artifacts += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`; } else { body += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`; diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d1ea8e449..44b1de09b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -115,7 +115,7 @@ jobs: pushd publish_sdl2_headless rm libarmeilleure-jitsupport.dylib - 7z a ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish + 7z a ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish popd shell: bash @@ -166,7 +166,7 @@ jobs: pushd publish_sdl2_headless chmod +x Ryujinx.sh Ryujinx.Headless.SDL2 - tar -czvf ../release_output/sdl2-ryujinx-headless-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish + tar -czvf ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish popd shell: bash diff --git a/distribution/macos/create_macos_build_headless.sh b/distribution/macos/create_macos_build_headless.sh index 2715699d0..24836418d 100755 --- a/distribution/macos/create_macos_build_headless.sh +++ b/distribution/macos/create_macos_build_headless.sh @@ -22,9 +22,9 @@ EXTRA_ARGS=$8 if [ "$VERSION" == "1.1.0" ]; then - RELEASE_TAR_FILE_NAME=sdl2-ryujinx-headless-$CONFIGURATION-$VERSION+$SOURCE_REVISION_ID-macos_universal.tar + RELEASE_TAR_FILE_NAME=nogui-ryujinx-$CONFIGURATION-$VERSION+$SOURCE_REVISION_ID-macos_universal.tar else - RELEASE_TAR_FILE_NAME=sdl2-ryujinx-headless-$VERSION-macos_universal.tar + RELEASE_TAR_FILE_NAME=nogui-ryujinx-$VERSION-macos_universal.tar fi ARM64_OUTPUT="$TEMP_DIRECTORY/publish_arm64" -- 2.47.1 From c2de5cc700e1ae6beefe3d8866b7cdadb0c7c5ba Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 21 Nov 2024 10:16:13 -0600 Subject: [PATCH 070/722] Fix really obvious typo, lol --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3bc223f3a..f6783b412 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Guides and documentation can be found on the Wiki tab.

- If you would like a version more preservative fork of Ryujinx, check out ryujinx-mirror. + If you would like a more preservative fork of Ryujinx, check out ryujinx-mirror.

-- 2.47.1 From 1d42c29335a87bd5ac2c53a5aa1edf948f211f4b Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Thu, 21 Nov 2024 19:34:53 +0100 Subject: [PATCH 071/722] Add more mentions of canary (#258) This should hopefully make it clearer whether or not you're using canary. Changelog: - Changed github workflows to have "canary" in the zip files - Added `App.FullAppName` in the about section, so that it's clear in there too - Changed log name for canary builds to `Ryujinx_Canary_{version}_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log` (normal builds should still be "Ryujinx_{version}_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log) --- .github/workflows/canary.yml | 12 ++++++------ .github/workflows/release.yml | 4 ++-- distribution/macos/create_macos_build_ava.sh | 13 +++++++------ distribution/macos/create_macos_build_headless.sh | 13 +++++++------ src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs | 3 ++- src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs | 2 +- 6 files changed, 25 insertions(+), 22 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 72e1b9515..a24436de3 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -111,12 +111,12 @@ jobs: run: | pushd publish_ava rm publish/libarmeilleure-jitsupport.dylib - 7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish + 7z a ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish popd pushd publish_sdl2_headless rm publish/libarmeilleure-jitsupport.dylib - 7z a ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish + 7z a ../release_output/nogui-ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish popd shell: bash @@ -126,13 +126,13 @@ jobs: pushd publish_ava rm publish/libarmeilleure-jitsupport.dylib chmod +x publish/Ryujinx.sh publish/Ryujinx - tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish + tar -czvf ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish popd pushd publish_sdl2_headless rm publish/libarmeilleure-jitsupport.dylib chmod +x publish/Ryujinx.sh publish/Ryujinx.Headless.SDL2 - tar -czvf ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish + tar -czvf ../release_output/nogui-ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish popd shell: bash @@ -236,11 +236,11 @@ jobs: - name: Publish macOS Ryujinx run: | - ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish_ava ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release + ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish_ava ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 1 - name: Publish macOS Ryujinx.Headless.SDL2 run: | - ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release + ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 1 - name: Pushing new release uses: ncipollo/release-action@v1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 44b1de09b..ec02976a1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -231,11 +231,11 @@ jobs: - name: Publish macOS Ryujinx run: | - ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release + ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 0 - name: Publish macOS Ryujinx.Headless.SDL2 run: | - ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release + ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 0 - name: Pushing new release uses: ncipollo/release-action@v1 diff --git a/distribution/macos/create_macos_build_ava.sh b/distribution/macos/create_macos_build_ava.sh index 80bd6662c..b19fa4863 100755 --- a/distribution/macos/create_macos_build_ava.sh +++ b/distribution/macos/create_macos_build_ava.sh @@ -2,8 +2,8 @@ set -e -if [ "$#" -lt 7 ]; then - echo "usage " +if [ "$#" -lt 8 ]; then + echo "usage " exit 1 fi @@ -18,10 +18,11 @@ ENTITLEMENTS_FILE_PATH=$(readlink -f "$4") VERSION=$5 SOURCE_REVISION_ID=$6 CONFIGURATION=$7 -EXTRA_ARGS=$8 +CANARY=$8 -if [ "$VERSION" == "1.1.0" ]; -then +if [ "$CANARY" == "1" ]; then + RELEASE_TAR_FILE_NAME=ryujinx-canary-$VERSION-macos_universal.app.tar +elif [ "$VERSION" == "1.1.0" ]; then RELEASE_TAR_FILE_NAME=ryujinx-$CONFIGURATION-$VERSION+$SOURCE_REVISION_ID-macos_universal.app.tar else RELEASE_TAR_FILE_NAME=ryujinx-$VERSION-macos_universal.app.tar @@ -61,7 +62,7 @@ mkdir -p "$OUTPUT_DIRECTORY" cp -R "$ARM64_APP_BUNDLE" "$UNIVERSAL_APP_BUNDLE" rm "$UNIVERSAL_APP_BUNDLE/$EXECUTABLE_SUB_PATH" -# Make it libraries universal +# Make its libraries universal python3 "$BASE_DIR/distribution/macos/construct_universal_dylib.py" "$ARM64_APP_BUNDLE" "$X64_APP_BUNDLE" "$UNIVERSAL_APP_BUNDLE" "**/*.dylib" if ! [ -x "$(command -v lipo)" ]; diff --git a/distribution/macos/create_macos_build_headless.sh b/distribution/macos/create_macos_build_headless.sh index 24836418d..01951d878 100755 --- a/distribution/macos/create_macos_build_headless.sh +++ b/distribution/macos/create_macos_build_headless.sh @@ -2,8 +2,8 @@ set -e -if [ "$#" -lt 7 ]; then - echo "usage " +if [ "$#" -lt 8 ]; then + echo "usage " exit 1 fi @@ -18,10 +18,11 @@ ENTITLEMENTS_FILE_PATH=$(readlink -f "$4") VERSION=$5 SOURCE_REVISION_ID=$6 CONFIGURATION=$7 -EXTRA_ARGS=$8 +CANARY=$8 -if [ "$VERSION" == "1.1.0" ]; -then +if [ "$CANARY" == "1" ]; then + RELEASE_TAR_FILE_NAME=nogui-ryujinx-canary-$VERSION-macos_universal.tar +elif [ "$VERSION" == "1.1.0" ]; then RELEASE_TAR_FILE_NAME=nogui-ryujinx-$CONFIGURATION-$VERSION+$SOURCE_REVISION_ID-macos_universal.tar else RELEASE_TAR_FILE_NAME=nogui-ryujinx-$VERSION-macos_universal.tar @@ -56,7 +57,7 @@ mkdir -p "$OUTPUT_DIRECTORY" cp -R "$ARM64_OUTPUT/" "$UNIVERSAL_OUTPUT" rm "$UNIVERSAL_OUTPUT/$EXECUTABLE_SUB_PATH" -# Make it libraries universal +# Make its libraries universal python3 "$BASE_DIR/distribution/macos/construct_universal_dylib.py" "$ARM64_OUTPUT" "$X64_OUTPUT" "$UNIVERSAL_OUTPUT" "**/*.dylib" if ! [ -x "$(command -v lipo)" ]; diff --git a/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs b/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs index 631df3056..94e9359c8 100644 --- a/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs +++ b/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs @@ -69,9 +69,10 @@ namespace Ryujinx.Common.Logging.Targets } string version = ReleaseInformation.Version; + string appName = ReleaseInformation.IsCanaryBuild ? "Ryujinx_Canary" : "Ryujinx"; // Get path for the current time - path = Path.Combine(logDir.FullName, $"Ryujinx_{version}_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log"); + path = Path.Combine(logDir.FullName, $"{appName}_{version}_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log"); try { diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index 236711c31..c48ad378f 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -49,7 +49,7 @@ namespace Ryujinx.Ava.UI.ViewModels public AboutWindowViewModel() { - Version = Program.Version; + Version = App.FullAppName + "\n" + Program.Version; UpdateLogoTheme(ConfigurationState.Instance.UI.BaseStyle.Value); ThemeManager.ThemeChanged += ThemeManager_ThemeChanged; -- 2.47.1 From e2b7738465cc3b753ff255d0e10ed63fb6895058 Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Fri, 22 Nov 2024 18:07:47 +0100 Subject: [PATCH 072/722] Add all the missing locales from XCI Trimmer and LDN merge (#281) Hello any fellow developers that may be reading this. Whenever you add any new locales to `en_US.json`, please make sure to add them to the rest of the locale files. I will not always be there to add them myself. --- src/Ryujinx/Assets/Locales/ar_SA.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/de_DE.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/el_GR.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/es_ES.json | 40 +++++++++++++++++++ src/Ryujinx/Assets/Locales/fr_FR.json | 56 ++++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/he_IL.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/it_IT.json | 14 ++++++- src/Ryujinx/Assets/Locales/ja_JP.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/pl_PL.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/pt_BR.json | 55 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/ru_RU.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/th_TH.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/tr_TR.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/uk_UA.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/zh_CN.json | 54 +++++++++++++++++++++++++- src/Ryujinx/Assets/Locales/zh_TW.json | 54 +++++++++++++++++++++++++- 16 files changed, 797 insertions(+), 16 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index 781568fee..6dbc96135 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "إدارة أنواع الملفات", "MenuBarToolsInstallFileTypes": "تثبيت أنواع الملفات", "MenuBarToolsUninstallFileTypes": "إزالة أنواع الملفات", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_عرض", "MenuBarViewWindow": "حجم النافذة", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "يفتح المجلد الذي يحتوي على تعديلات‫(mods) التطبيق", "GameListContextMenuOpenSdModsDirectory": "فتح مجلد تعديلات‫(mods) أتموسفير", "GameListContextMenuOpenSdModsDirectoryToolTip": "يفتح مجلد أتموسفير لبطاقة SD البديلة الذي يحتوي على تعديلات التطبيق. مفيد للتعديلات التي تم تعبئتها للأجهزة الحقيقية.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} لعبة تم تحميلها", "StatusBarSystemVersion": "إصدار النظام: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "الحد الأدنى لتعيينات الذاكرة المكتشفة", "LinuxVmMaxMapCountDialogTextPrimary": "هل ترغب في زيادة قيمة vm.max_map_count إلى {0}", "LinuxVmMaxMapCountDialogTextSecondary": "قد تحاول بعض الألعاب إنشاء المزيد من تعيينات الذاكرة أكثر مما هو مسموح به حاليا. سيغلق ريوجينكس بمجرد تجاوز هذا الحد.", @@ -400,6 +404,8 @@ "InputDialogTitle": "حوار الإدخال", "InputDialogOk": "موافق", "InputDialogCancel": "إلغاء", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "اختر اسم الملف الشخصي", "InputDialogAddNewProfileHeader": "الرجاء إدخال اسم الملف الشخصي", "InputDialogAddNewProfileSubtext": "(الطول الأقصى: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "تم إلغاء تثبيت أنواع الملفات بنجاح!", "DialogUninstallFileTypesErrorMessage": "فشل إلغاء تثبيت أنواع الملفات.", "DialogOpenSettingsWindowLabel": "فتح نافذة الإعدادات", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "تطبيق وحدة التحكم المصغر", "DialogMessageDialogErrorExceptionMessage": "خطأ في عرض مربع حوار الرسالة: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "خطأ في عرض لوحة مفاتيح البرامج: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "الإصدار: {0}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "ريوجينكس - معلومات", "RyujinxConfirm": "ريوجينكس - تأكيد", "FileDialogAllTypes": "كل الأنواع", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "حدد ملفات المحتوي الإضافي", "SelectUpdateDialogTitle": "حدد ملفات التحديث", "SelectModDialogTitle": "حدد مجلد التعديل", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "مدير الملفات الشخصية للمستخدمين", "CheatWindowTitle": "مدير الغش", "DlcWindowTitle": "إدارة المحتوى القابل للتنزيل لـ {0} ({1})", "ModWindowTitle": "إدارة التعديلات لـ {0} ({1})", "UpdateWindowTitle": "مدير تحديث العنوان", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} تعديل", "UserProfilesEditProfile": "تعديل المحدد", + "Continue": "Continue", "Cancel": "إلغاء", "Save": "حفظ", "Discard": "تجاهل", @@ -810,5 +850,17 @@ "MultiplayerMode": "الوضع:", "MultiplayerModeTooltip": "تغيير وضع LDN متعدد اللاعبين.\n\nسوف يقوم LdnMitm بتعديل وظيفة اللعب المحلية/اللاسلكية المحلية في الألعاب لتعمل كما لو كانت شبكة LAN، مما يسمح باتصالات الشبكة المحلية نفسها مع محاكيات ريوجينكس الأخرى وأجهزة نينتندو سويتش المخترقة التي تم تثبيت وحدة ldn_mitm عليها.\n\nيتطلب وضع اللاعبين المتعددين أن يكون جميع اللاعبين على نفس إصدار اللعبة (على سبيل المثال، يتعذر على الإصدار 13.0.1 من سوبر سماش برذرز ألتميت الاتصال بالإصدار 13.0.0).\n\nاتركه معطلا إذا لم تكن متأكدا.", "MultiplayerModeDisabled": "معطل", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index c6f9768c6..be95f3bc0 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "Dateitypen verwalten", "MenuBarToolsInstallFileTypes": "Dateitypen installieren", "MenuBarToolsUninstallFileTypes": "Dateitypen deinstallieren", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_Ansicht", "MenuBarViewWindow": "Fenstergröße", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Öffnet das Verzeichnis, welches Mods für die Spiele beinhaltet", "GameListContextMenuOpenSdModsDirectory": "Atmosphere-Mod-Verzeichnis öffnen", "GameListContextMenuOpenSdModsDirectoryToolTip": "Öffnet das alternative SD-Karten-Atmosphere-Verzeichnis, das die Mods der Anwendung enthält. Dieser Ordner ist nützlich für Mods, die für echte Hardware erstellt worden sind.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} Spiele geladen", "StatusBarSystemVersion": "Systemversion: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "Niedriges Limit für Speicherzuordnungen erkannt", "LinuxVmMaxMapCountDialogTextPrimary": "Möchtest Du den Wert von vm.max_map_count auf {0} erhöhen", "LinuxVmMaxMapCountDialogTextSecondary": "Einige Spiele könnten versuchen, mehr Speicherzuordnungen zu erstellen, als derzeit erlaubt. Ryujinx wird abstürzen, sobald dieses Limit überschritten wird.", @@ -400,6 +404,8 @@ "InputDialogTitle": "Eingabe-Dialog", "InputDialogOk": "OK", "InputDialogCancel": "Abbrechen", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "Wähle den Profilnamen", "InputDialogAddNewProfileHeader": "Bitte gebe einen Profilnamen ein", "InputDialogAddNewProfileSubtext": "(Maximale Länge: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "Dateitypen erfolgreich deinstalliert!", "DialogUninstallFileTypesErrorMessage": "Deinstallation der Dateitypen fehlgeschlagen.", "DialogOpenSettingsWindowLabel": "Fenster-Einstellungen öffnen", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "Controller-Applet", "DialogMessageDialogErrorExceptionMessage": "Fehler bei der Anzeige des Meldungs-Dialogs: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Fehler bei der Anzeige der Software-Tastatur: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "Version {0} - {1}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - Info", "RyujinxConfirm": "Ryujinx - Bestätigung", "FileDialogAllTypes": "Alle Typen", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "DLC-Dateien auswählen", "SelectUpdateDialogTitle": "Update-Datei auswählen", "SelectModDialogTitle": "Mod-Ordner auswählen", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "Benutzerprofile verwalten", "CheatWindowTitle": "Spiel-Cheats verwalten", "DlcWindowTitle": "Spiel-DLC verwalten", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Spiel-Updates verwalten", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Profil bearbeiten", + "Continue": "Continue", "Cancel": "Abbrechen", "Save": "Speichern", "Discard": "Verwerfen", @@ -810,5 +850,17 @@ "MultiplayerMode": "Modus:", "MultiplayerModeTooltip": "Ändert den LDN-Mehrspielermodus.\n\nLdnMitm ändert die lokale drahtlose/lokale Spielfunktionalität in Spielen so, dass sie wie ein LAN funktioniert und lokale, netzwerkgleiche Verbindungen mit anderen Ryujinx-Instanzen und gehackten Nintendo Switch-Konsolen ermöglicht, auf denen das ldn_mitm-Modul installiert ist.\n\nMultiplayer erfordert, dass alle Spieler die gleiche Spielversion verwenden (d.h. Super Smash Bros. Ultimate v13.0.1 kann sich nicht mit v13.0.0 verbinden).\n\nIm Zweifelsfall auf DISABLED lassen.", "MultiplayerModeDisabled": "Deaktiviert", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index 76049fc3f..c6cfb9d62 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "Διαχείριση τύπων αρχείων", "MenuBarToolsInstallFileTypes": "Εγκαταστήσετε τύπους αρχείων.", "MenuBarToolsUninstallFileTypes": "Απεγκαταστήσετε τύπους αρχείων", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_View", "MenuBarViewWindow": "Window Size", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Opens the directory which contains Application's Mods", "GameListContextMenuOpenSdModsDirectory": "Open Atmosphere Mods Directory", "GameListContextMenuOpenSdModsDirectoryToolTip": "Opens the alternative SD card Atmosphere directory which contains Application's Mods. Useful for mods that are packaged for real hardware.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} Φορτωμένα Παιχνίδια", "StatusBarSystemVersion": "Έκδοση Συστήματος: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "Εντοπίστηκε χαμηλό όριο για αντιστοιχίσεις μνήμης", "LinuxVmMaxMapCountDialogTextPrimary": "Θα θέλατε να αυξήσετε την τιμή του vm.max_map_count σε {0}", "LinuxVmMaxMapCountDialogTextSecondary": "Μερικά παιχνίδια μπορεί να προσπαθήσουν να δημιουργήσουν περισσότερες αντιστοιχίσεις μνήμης από αυτές που επιτρέπονται τώρα. Ο Ryujinx θα καταρρεύσει μόλις ξεπεραστεί αυτό το όριο.", @@ -400,6 +404,8 @@ "InputDialogTitle": "Διάλογος Εισαγωγής", "InputDialogOk": "ΟΚ", "InputDialogCancel": "Ακύρωση", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "Επιλογή Ονόματος Προφίλ", "InputDialogAddNewProfileHeader": "Εισαγωγή Ονόματος Προφίλ", "InputDialogAddNewProfileSubtext": "(Σύνολο Χαρακτήρων: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "Επιτυχής απεγκατάσταση τύπων αρχείων!", "DialogUninstallFileTypesErrorMessage": "Αποτυχία απεγκατάστασης τύπων αρχείων.", "DialogOpenSettingsWindowLabel": "Άνοιγμα Παραθύρου Ρυθμίσεων", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "Applet Χειρισμού", "DialogMessageDialogErrorExceptionMessage": "Σφάλμα εμφάνισης του διαλόγου Μηνυμάτων: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Σφάλμα εμφάνισης Λογισμικού Πληκτρολογίου: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "Version {0} - {1}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - Πληροφορίες", "RyujinxConfirm": "Ryujinx - Επιβεβαίωση", "FileDialogAllTypes": "Όλοι οι τύποι", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "Επιλογή αρχείων DLC", "SelectUpdateDialogTitle": "Επιλογή αρχείων ενημέρωσης", "SelectModDialogTitle": "Select mod directory", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "Διαχειριστής Προφίλ Χρήστη", "CheatWindowTitle": "Διαχειριστής των Cheats", "DlcWindowTitle": "Downloadable Content Manager", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Διαχειριστής Ενημερώσεων Τίτλου", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Επεξεργασία Επιλεγμένων", + "Continue": "Continue", "Cancel": "Ακύρωση", "Save": "Αποθήκευση", "Discard": "Απόρριψη", @@ -810,5 +850,17 @@ "MultiplayerMode": "Λειτουργία:", "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Disabled", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index cf5c586d0..6a194960b 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "Administrar tipos de archivo", "MenuBarToolsInstallFileTypes": "Instalar tipos de archivo", "MenuBarToolsUninstallFileTypes": "Desinstalar tipos de archivo", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_View", "MenuBarViewWindow": "Tamaño Ventana", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Abre el directorio que contiene los Mods de la Aplicación.", "GameListContextMenuOpenSdModsDirectory": "Abrir Directorio de Mods de Atmosphere\n\n\n\n\n\n", "GameListContextMenuOpenSdModsDirectoryToolTip": "Abre el directorio alternativo de la tarjeta SD de Atmosphere que contiene los Mods de la Aplicación. Útil para los mods que están empaquetados para el hardware real.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} juegos cargados", "StatusBarSystemVersion": "Versión del sistema: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "Límite inferior para mapeos de memoria detectado", "LinuxVmMaxMapCountDialogTextPrimary": "¿Quieres aumentar el valor de vm.max_map_count a {0}?", "LinuxVmMaxMapCountDialogTextSecondary": "Algunos juegos podrían intentar crear más mapeos de memoria de los permitidos. Ryujinx se bloqueará tan pronto como se supere este límite.", @@ -400,6 +404,8 @@ "InputDialogTitle": "Cuadro de diálogo de entrada", "InputDialogOk": "Aceptar", "InputDialogCancel": "Cancelar", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "Introducir nombre de perfil", "InputDialogAddNewProfileHeader": "Por favor elige un nombre de usuario", "InputDialogAddNewProfileSubtext": "(Máximo de caracteres: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "¡Tipos de archivos desinstalados con éxito!", "DialogUninstallFileTypesErrorMessage": "No se pudo desinstalar los tipos de archivo.", "DialogOpenSettingsWindowLabel": "Abrir ventana de opciones", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "Applet de mandos", "DialogMessageDialogErrorExceptionMessage": "Error al mostrar cuadro de diálogo: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Error al mostrar teclado de software: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "Versión {0} - {1}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - Info", "RyujinxConfirm": "Ryujinx - Confirmación", "FileDialogAllTypes": "Todos los tipos", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "Selecciona archivo(s) de DLC", "SelectUpdateDialogTitle": "Selecciona archivo(s) de actualización", "SelectModDialogTitle": "Seleccionar un directorio de Mods", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "Administrar perfiles de usuario", "CheatWindowTitle": "Administrar cheats", "DlcWindowTitle": "Administrar contenido descargable", "ModWindowTitle": "Administrar Mods para {0} ({1})", "UpdateWindowTitle": "Administrar actualizaciones", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} nueva(s) actualización(es) agregada(s)", @@ -742,6 +781,7 @@ "AutoloadUpdateRemovedMessage": "Se eliminaron {0} actualización(es) faltantes", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Editar selección", + "Continue": "Continue", "Cancel": "Cancelar", "Save": "Guardar", "Discard": "Descartar", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index 0073a2cf5..dd23bef76 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "Gérer les types de fichiers", "MenuBarToolsInstallFileTypes": "Installer les types de fichiers", "MenuBarToolsUninstallFileTypes": "Désinstaller les types de fichiers", + "MenuBarToolsXCITrimmer": "Réduire les fichiers XCI", "MenuBarView": "_Fenêtre", "MenuBarViewWindow": "Taille de la fenêtre", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Ouvre le dossier contenant les mods du jeu", "GameListContextMenuOpenSdModsDirectory": "Ouvrir le dossier des mods Atmosphère", "GameListContextMenuOpenSdModsDirectoryToolTip": "Ouvre le dossier alternatif de la carte SD Atmosphère qui contient les mods de l'application. Utile pour les mods conçus pour console.", + "GameListContextMenuTrimXCI": "Vérifier et réduire les fichiers XCI", + "GameListContextMenuTrimXCIToolTip": "Vérifier et réduire les fichiers XCI pour économiser de l'espace", "StatusBarGamesLoaded": "{0}/{1} Jeux chargés", "StatusBarSystemVersion": "Version du Firmware: {0}", + "StatusBarXCIFileTrimming": "Réduction du fichier XCI '{0}'", "LinuxVmMaxMapCountDialogTitle": "Limite basse pour les mappings mémoire détectée", "LinuxVmMaxMapCountDialogTextPrimary": "Voulez-vous augmenter la valeur de vm.max_map_count à {0}", "LinuxVmMaxMapCountDialogTextSecondary": "Certains jeux peuvent essayer de créer plus de mappings mémoire que ce qui est actuellement autorisé. Ryujinx plantera dès que cette limite sera dépassée.", @@ -400,6 +404,8 @@ "InputDialogTitle": "Fenêtre d'entrée de texte", "InputDialogOk": "OK", "InputDialogCancel": "Annuler", + "InputDialogCancelling": "Annulation en cours", + "InputDialogClose": "Fermer", "InputDialogAddNewProfileTitle": "Choisir un nom de profil", "InputDialogAddNewProfileHeader": "Merci d'entrer un nom de profil", "InputDialogAddNewProfileSubtext": "(Longueur max.: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "Types de fichiers désinstallés avec succès!", "DialogUninstallFileTypesErrorMessage": "Échec de la désinstallation des types de fichiers.", "DialogOpenSettingsWindowLabel": "Ouvrir la fenêtre de configuration", + "DialogOpenXCITrimmerWindowLabel": "Fenêtre de réduction de fichiers XCI", "DialogControllerAppletTitle": "Programme Manette", "DialogMessageDialogErrorExceptionMessage": "Erreur lors de l'affichage de la boîte de dialogue : {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Erreur lors de l'affichage du clavier logiciel: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "Version {0}", "TitleBundledUpdateVersionLabel": "Inclus avec le jeu: Version {0}", "TitleBundledDlcLabel": "Inclus avec le jeu :", + "TitleXCIStatusPartialLabel": "Partiel", + "TitleXCIStatusTrimmableLabel": "Non réduit", + "TitleXCIStatusUntrimmableLabel": "Réduit", + "TitleXCIStatusFailedLabel": "(Échoué)", + "TitleXCICanSaveLabel": "Sauvegarde de {0:n0} Mo", + "TitleXCISavingLabel": "Sauvegardé {0:n0} Mo", "RyujinxInfo": "Ryujinx - Info", "RyujinxConfirm": "Ryujinx - Confirmation", "FileDialogAllTypes": "Tous les types", @@ -723,11 +736,39 @@ "SelectDlcDialogTitle": "Sélectionner les fichiers DLC", "SelectUpdateDialogTitle": "Sélectionner les fichiers de mise à jour", "SelectModDialogTitle": "Sélectionner le répertoire du mod", + "TrimXCIFileDialogTitle": "Vérifier et Réduire le fichier XCI", + "TrimXCIFileDialogPrimaryText": "Cette fonction va vérifier l'espace vide, puis réduire le fichier XCI pour économiser de l'espace de disque dur.", + "TrimXCIFileDialogSecondaryText": "Taille actuelle du fichier: {0:n} MB\nTaille des données de jeux: {1:n} MB\nÉconomie d'espaces sur le disque: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "Fichier XCI n'a pas besoin d'être réduit. Regarder les journaux pour plus de détails", + "TrimXCIFileNoUntrimPossible": "Fichier XCI ne peut pas être dé-réduit. Regarder les journaux pour plus de détails", + "TrimXCIFileReadOnlyFileCannotFix": "Fichier XCI est en Lecture Seule et n'a pas pu être rendu accessible en écriture. Regarder les journaux pour plus de détails", + "TrimXCIFileFileSizeChanged": "Fichier XCI a changé en taille depuis qu'il a été scanné. Vérifier que le fichier n'est pas en cours d'écriture et réessayer.", + "TrimXCIFileFreeSpaceCheckFailed": "Fichier XCI a des données dans la zone d'espace libre, ce n'est pas sûr de réduire", + "TrimXCIFileInvalidXCIFile": "Fichier XCI contient des données invalides. Regarder les journaux pour plus de détails", + "TrimXCIFileFileIOWriteError": "Fichier XCI n'a pas pu été ouvert pour écriture. Regarder les journaux pour plus de détails", + "TrimXCIFileFailedPrimaryText": "Réduction du fichier XCI a échoué", + "TrimXCIFileCancelled": "L'opération a été annulée", + "TrimXCIFileFileUndertermined": "Aucune opération a été faite", "UserProfileWindowTitle": "Gestionnaire de profils utilisateur", "CheatWindowTitle": "Gestionnaire de cheats", "DlcWindowTitle": "Gérer le contenu téléchargeable pour {0} ({1})", "ModWindowTitle": "Gérer les mods pour {0} ({1})", "UpdateWindowTitle": "Gestionnaire de mises à jour", + "XCITrimmerWindowTitle": "Rogneur de fichier XCI", + "XCITrimmerTitleStatusCount": "{0} sur {1} Fichier(s) Sélectionnés", + "XCITrimmerTitleStatusCountWithFilter": "{0} sur {1} Fichier(s) Sélectionnés ({2} affiché(s)", + "XCITrimmerTitleStatusTrimming": "Réduction de {0} Fichier(s)...", + "XCITrimmerTitleStatusUntrimming": "Dé-Réduction de {0} Fichier(s)...", + "XCITrimmerTitleStatusFailed": "Échoué", + "XCITrimmerPotentialSavings": "Économies potentielles d'espace de disque dur", + "XCITrimmerActualSavings": "Économies actualles d'espace de disque dur", + "XCITrimmerSavingsMb": "{0:n0} Mo", + "XCITrimmerSelectDisplayed": "Sélectionner Affiché", + "XCITrimmerDeselectDisplayed": "Désélectionner Affiché", + "XCITrimmerSortName": "Titre", + "XCITrimmerSortSaved": "Économies de disque dur", + "XCITrimmerTrim": "Réduire", + "XCITrimmerUntrim": "Dé-Réduire", "UpdateWindowUpdateAddedMessage": "{0} nouvelle(s) mise(s) à jour ajoutée(s)", "UpdateWindowBundledContentNotice": "Les mises à jour incluses avec le jeu ne peuvent pas être supprimées mais peuvent être désactivées.", "CheatWindowHeading": "Cheats disponibles pour {0} [{1}]", @@ -741,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} mises à jour manquantes supprimées", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Éditer la sélection", + "Continue": "Continuer", "Cancel": "Annuler", "Save": "Enregistrer", "Discard": "Abandonner", @@ -808,5 +850,17 @@ "MultiplayerMode": "Mode :", "MultiplayerModeTooltip": "Changer le mode multijoueur LDN.\n\nLdnMitm modifiera la fonctionnalité de jeu sans fil local/jeu local dans les jeux pour fonctionner comme s'il s'agissait d'un LAN, permettant des connexions locales sur le même réseau avec d'autres instances de Ryujinx et des consoles Nintendo Switch piratées ayant le module ldn_mitm installé.\n\nLe multijoueur nécessite que tous les joueurs soient sur la même version du jeu (par exemple, Super Smash Bros. Ultimate v13.0.1 ne peut pas se connecter à v13.0.0).\n\nLaissez DÉSACTIVÉ si vous n'êtes pas sûr.", "MultiplayerModeDisabled": "Désactivé", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Désactiver PàP Hébergement de Réseau (pourrait augmenter la latence)", + "MultiplayerDisableP2PTooltip": "Désactiver PàP hébergement de réseau, les postes vont proxy avec le serveur principal au lieu de se connecter directement à vous.", + "LdnPassphrase": "Mot de passe Réseau :", + "LdnPassphraseTooltip": "Vous pourez seulement voir les jeux hébergé avec le même mot de passe que vous.", + "LdnPassphraseInputTooltip": "Entrer un mot de passe dans le format Ryujinx-<8 hex chars>. Vous pourez seulement voir les jeux hébergé avec le même mot de passe que vous.", + "LdnPassphraseInputPublic": "(publique)", + "GenLdnPass": "Générer Aléatoire", + "GenLdnPassTooltip": "Génére un nouveau mot de passe, qui peut être partagé avec les autres.", + "ClearLdnPass": "Supprimer", + "ClearLdnPassTooltip": "Supprime le mot de passe actuel, ce qui vous remet sur le réseau public.", + "InvalidLdnPassphrase": "Mot de passe invalide! Il doit être dans le format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index 91e3e24e4..b9f89eb37 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "ניהול סוגי קבצים", "MenuBarToolsInstallFileTypes": "סוגי קבצי התקנה", "MenuBarToolsUninstallFileTypes": "סוגי קבצי הסרה", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_View", "MenuBarViewWindow": "Window Size", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "פותח את התיקייה שמכילה מודים של האפליקציה", "GameListContextMenuOpenSdModsDirectory": "פתח תיקיית מודים של Atmosphere", "GameListContextMenuOpenSdModsDirectoryToolTip": "פותח את תיקיית כרטיס ה-SD החלופית של Atmosphere המכילה את המודים של האפליקציה. שימושי עבור מודים שארוזים עבור חומרה אמיתית.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{1}/{0} משחקים נטענו", "StatusBarSystemVersion": "גרסת מערכת: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "זוהתה מגבלה נמוכה עבור מיפויי זיכרון", "LinuxVmMaxMapCountDialogTextPrimary": "האם תרצה להגביר את הערך של vm.max_map_count ל{0}", "LinuxVmMaxMapCountDialogTextSecondary": "משחקים מסוימים עלולים לייצר עוד מיפויי זיכרון ממה שמתאפשר. Ryujinx יקרוס ברגע שהמגבלה תחרוג.", @@ -400,6 +404,8 @@ "InputDialogTitle": "דיאלוג קלט", "InputDialogOk": "בסדר", "InputDialogCancel": "ביטול", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "בחרו את שם הפרופיל", "InputDialogAddNewProfileHeader": "אנא הזינו שם לפרופיל", "InputDialogAddNewProfileSubtext": "(אורך מרבי: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "סוגי קבצים הוסרו בהצלחה!", "DialogUninstallFileTypesErrorMessage": "נכשל בהסרת סוגי קבצים.", "DialogOpenSettingsWindowLabel": "פתח את חלון ההגדרות", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "יישומון בקר", "DialogMessageDialogErrorExceptionMessage": "שגיאה בהצגת דיאלוג ההודעה: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "שגיאה בהצגת תוכנת המקלדת: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "גרסה {0}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "ריוג'ינקס - מידע", "RyujinxConfirm": "ריוג'ינקס - אישור", "FileDialogAllTypes": "כל הסוגים", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "בחרו קבצי הרחבות משחק", "SelectUpdateDialogTitle": "בחרו קבצי עדכון", "SelectModDialogTitle": "בחר תיקיית מודים", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "ניהול פרופילי משתמש", "CheatWindowTitle": "נהל צ'יטים למשחק", "DlcWindowTitle": "נהל הרחבות משחק עבור {0} ({1})", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "נהל עדכוני משחקים", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} מוד(ים)", "UserProfilesEditProfile": "ערוך נבחר/ים", + "Continue": "Continue", "Cancel": "בטל", "Save": "שמור", "Discard": "השלך", @@ -810,5 +850,17 @@ "MultiplayerMode": "מצב:", "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Disabled", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index 2a92e70dc..f10dd9d35 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -850,5 +850,17 @@ "MultiplayerMode": "Modalità:", "MultiplayerModeTooltip": "Cambia la modalità multigiocatore LDN.\n\nLdnMitm modificherà la funzionalità locale wireless/local play nei giochi per funzionare come se fosse in modalità LAN, consentendo connessioni locali sulla stessa rete con altre istanze di Ryujinx e console Nintendo Switch modificate che hanno il modulo ldn_mitm installato.\n\nLa modalità multigiocatore richiede che tutti i giocatori usino la stessa versione del gioco (es. Super Smash Bros. Ultimate v13.0.1 non può connettersi con la v13.0.0).\n\nNel dubbio, lascia l'opzione su Disabilitato.", "MultiplayerModeDisabled": "Disabilitato", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index b8e5870a6..34253acbf 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "ファイル形式を管理", "MenuBarToolsInstallFileTypes": "ファイル形式をインストール", "MenuBarToolsUninstallFileTypes": "ファイル形式をアンインストール", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_View", "MenuBarViewWindow": "Window Size", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "アプリケーションの Mod データを格納するディレクトリを開きます", "GameListContextMenuOpenSdModsDirectory": "Atmosphere Mods ディレクトリを開く", "GameListContextMenuOpenSdModsDirectoryToolTip": "アプリケーションの Mod データを格納する SD カードの Atmosphere ディレクトリを開きます. 実際のハードウェア用に作成された Mod データに有用です.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} ゲーム", "StatusBarSystemVersion": "システムバージョン: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "メモリマッピング上限値が小さすぎます", "LinuxVmMaxMapCountDialogTextPrimary": "vm.max_map_count の値を {0}に増やしますか?", "LinuxVmMaxMapCountDialogTextSecondary": "ゲームによっては, 現在許可されているサイズより大きなメモリマッピングを作成しようとすることがあります. この制限を超えると, Ryjinx はすぐにクラッシュします.", @@ -400,6 +404,8 @@ "InputDialogTitle": "入力ダイアログ", "InputDialogOk": "OK", "InputDialogCancel": "キャンセル", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "プロファイル名を選択", "InputDialogAddNewProfileHeader": "プロファイル名を入力してください", "InputDialogAddNewProfileSubtext": "(最大長: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "ファイル形式のアンインストールに成功しました!", "DialogUninstallFileTypesErrorMessage": "ファイル形式のアンインストールに失敗しました.", "DialogOpenSettingsWindowLabel": "設定ウインドウを開く", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "コントローラアプレット", "DialogMessageDialogErrorExceptionMessage": "メッセージダイアログ表示エラー: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "ソフトウェアキーボード表示エラー: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "バージョン {0} - {1}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - 情報", "RyujinxConfirm": "Ryujinx - 確認", "FileDialogAllTypes": "すべての種別", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "DLC ファイルを選択", "SelectUpdateDialogTitle": "アップデートファイルを選択", "SelectModDialogTitle": "modディレクトリを選択", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "ユーザプロファイルを管理", "CheatWindowTitle": "チート管理", "DlcWindowTitle": "DLC 管理", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "アップデート管理", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", @@ -742,6 +781,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "編集", + "Continue": "Continue", "Cancel": "キャンセル", "Save": "セーブ", "Discard": "破棄", @@ -809,5 +849,17 @@ "MultiplayerMode": "モード:", "MultiplayerModeTooltip": "LDNマルチプレイヤーモードを変更します.\n\nldn_mitmモジュールがインストールされた, 他のRyujinxインスタンスや,ハックされたNintendo Switchコンソールとのローカル/同一ネットワーク接続を可能にします.\n\nマルチプレイでは, すべてのプレイヤーが同じゲームバージョンである必要があります(例:Super Smash Bros. Ultimate v13.0.1はv13.0.0に接続できません).\n\n不明な場合は「無効」のままにしてください.", "MultiplayerModeDisabled": "無効", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index fa88bab5e..015530833 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "Zarządzaj rodzajami plików", "MenuBarToolsInstallFileTypes": "Typy plików instalacyjnych", "MenuBarToolsUninstallFileTypes": "Typy plików dezinstalacyjnych", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_View", "MenuBarViewWindow": "Window Size", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Otwiera katalog zawierający mody dla danej aplikacji", "GameListContextMenuOpenSdModsDirectory": "Otwórz katalog modów Atmosphere", "GameListContextMenuOpenSdModsDirectoryToolTip": "Otwiera alternatywny katalog Atmosphere na karcie SD, który zawiera mody danej aplikacji. Przydatne dla modów przygotowanych pod prawdziwy sprzęt.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} Załadowane gry", "StatusBarSystemVersion": "Wersja systemu: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "Wykryto niski limit dla przypisań pamięci", "LinuxVmMaxMapCountDialogTextPrimary": "Czy chcesz zwiększyć wartość vm.max_map_count do {0}", "LinuxVmMaxMapCountDialogTextSecondary": "Niektóre gry mogą próbować przypisać sobie więcej pamięci niż obecnie, jest to dozwolone. Ryujinx ulegnie awarii, gdy limit zostanie przekroczony.", @@ -400,6 +404,8 @@ "InputDialogTitle": "Okno Dialogowe Wprowadzania", "InputDialogOk": "OK", "InputDialogCancel": "Anuluj", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "Wybierz nazwę profilu", "InputDialogAddNewProfileHeader": "Wprowadź nazwę profilu", "InputDialogAddNewProfileSubtext": "(Maksymalna długość: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "Pomyślnie odinstalowano typy plików!", "DialogUninstallFileTypesErrorMessage": "Nie udało się odinstalować typów plików.", "DialogOpenSettingsWindowLabel": "Otwórz Okno Ustawień", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "Aplet Kontrolera", "DialogMessageDialogErrorExceptionMessage": "Błąd wyświetlania okna Dialogowego Wiadomości: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Błąd wyświetlania Klawiatury Oprogramowania: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "Wersja {0} - {1}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - Info", "RyujinxConfirm": "Ryujinx - Potwierdzenie", "FileDialogAllTypes": "Wszystkie typy", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "Wybierz pliki DLC", "SelectUpdateDialogTitle": "Wybierz pliki aktualizacji", "SelectModDialogTitle": "Wybierz katalog modów", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "Menedżer Profili Użytkowników", "CheatWindowTitle": "Menedżer Kodów", "DlcWindowTitle": "Menedżer Zawartości do Pobrania", "ModWindowTitle": "Zarządzaj modami dla {0} ({1})", "UpdateWindowTitle": "Menedżer Aktualizacji Tytułu", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(y/ów)", "UserProfilesEditProfile": "Edytuj Zaznaczone", + "Continue": "Continue", "Cancel": "Anuluj", "Save": "Zapisz", "Discard": "Odrzuć", @@ -810,5 +850,17 @@ "MultiplayerMode": "Tryb:", "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Wyłączone", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index 5b7a21494..512581c0e 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "Gerenciar tipos de arquivo", "MenuBarToolsInstallFileTypes": "Instalar tipos de arquivo", "MenuBarToolsUninstallFileTypes": "Desinstalar tipos de arquivos", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_View", "MenuBarViewWindow": "Window Size", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Abre a pasta que contém os mods da aplicação ", "GameListContextMenuOpenSdModsDirectory": "Abrir diretório de mods Atmosphere", "GameListContextMenuOpenSdModsDirectoryToolTip": "Opens the alternative SD card Atmosphere directory which contains Application's Mods. Useful for mods that are packaged for real hardware.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} jogos carregados", "StatusBarSystemVersion": "Versão do firmware: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "Limite baixo para mapeamentos de memória detectado", "LinuxVmMaxMapCountDialogTextPrimary": "Você gostaria de aumentar o valor de vm.max_map_count para {0}", "LinuxVmMaxMapCountDialogTextSecondary": "Alguns jogos podem tentar criar mais mapeamentos de memória do que o atualmente permitido. Ryujinx irá falhar assim que este limite for excedido.", @@ -400,6 +404,8 @@ "InputDialogTitle": "Diálogo de texto", "InputDialogOk": "OK", "InputDialogCancel": "Cancelar", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "Escolha o nome de perfil", "InputDialogAddNewProfileHeader": "Escreva o nome do perfil", "InputDialogAddNewProfileSubtext": "(Máximo de caracteres: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "Tipos de arquivo desinstalados com sucesso!", "DialogUninstallFileTypesErrorMessage": "Falha ao desinstalar tipos de arquivo.", "DialogOpenSettingsWindowLabel": "Abrir janela de configurações", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "Applet de controle", "DialogMessageDialogErrorExceptionMessage": "Erro ao exibir diálogo de mensagem: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Erro ao exibir teclado virtual: {0}", @@ -618,7 +625,6 @@ "LoadApplicationFolderTooltip": "Abre o navegador de pastas para seleção de pasta extraída do Switch compatível a ser carregada", "OpenRyujinxFolderTooltip": "Abre o diretório do sistema de arquivos do Ryujinx", "LoadTitleUpdatesFromFolderTooltip": "Abra o explorador de arquivos para selecionar uma ou mais pastas e carregar atualizações de jogo em massa.", - "OpenRyujinxFolderTooltip": "Abrir diretório do sistema de arquivos do Ryujinx", "OpenRyujinxLogsTooltip": "Abre o diretório onde os logs são salvos", "ExitTooltip": "Sair do Ryujinx", "OpenSettingsTooltip": "Abrir janela de configurações", @@ -671,6 +677,12 @@ "TitleUpdateVersionLabel": "Versão {0}", "TitleBundledUpdateVersionLabel": "Empacotado: Versão {0}", "TitleBundledDlcLabel": "Empacotado:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - Informação", "RyujinxConfirm": "Ryujinx - Confirmação", "FileDialogAllTypes": "Todos os tipos", @@ -724,10 +736,36 @@ "SelectUpdateDialogTitle": "Selecionar arquivos de atualização", "SelectModDialogTitle": "Select mod directory", "UserProfileWindowTitle": "Gerenciador de perfis de usuário", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "CheatWindowTitle": "Gerenciador de Cheats", "DlcWindowTitle": "Gerenciador de DLC", "ModWindowTitle": "Gerenciar Mods para {0} ({1})", "UpdateWindowTitle": "Gerenciador de atualizações", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} nova(s) atualização(ões) adicionada(s)", @@ -743,6 +781,7 @@ "AutoloadUpdateRemovedMessage": "{0} atualização(ões) ausente(s) removida(s)", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Editar selecionado", + "Continue": "Continue", "Cancel": "Cancelar", "Save": "Salvar", "Discard": "Descartar", @@ -810,5 +849,17 @@ "MultiplayerMode": "Modo:", "MultiplayerModeTooltip": "Alterar o modo multiplayer LDN.\n\nLdnMitm modificará a funcionalidade de jogo sem fio/local nos jogos para funcionar como se fosse LAN, permitindo conexões locais, na mesma rede, com outras instâncias do Ryujinx e consoles Nintendo Switch hackeados que possuem o módulo ldn_mitm instalado.\n\nO multiplayer exige que todos os jogadores estejam na mesma versão do jogo (ex.: Super Smash Bros. Ultimate v13.0.1 não consegue se conectar à v13.0.0).\n\nDeixe DESATIVADO se estiver em dúvida.", "MultiplayerModeDisabled": "Desativado", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index cd17eb301..9d81116ef 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "Управление типами файлов", "MenuBarToolsInstallFileTypes": "Установить типы файлов", "MenuBarToolsUninstallFileTypes": "Удалить типы файлов", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_Вид", "MenuBarViewWindow": "Размер окна", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Открывает папку, содержащую моды для приложений и игр", "GameListContextMenuOpenSdModsDirectory": "Открыть папку с модами Atmosphere", "GameListContextMenuOpenSdModsDirectoryToolTip": "Открывает папку Atmosphere на альтернативной SD-карте, которая содержит моды для приложений и игр. Полезно для модов, сделанных для реальной консоли.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} игр загружено", "StatusBarSystemVersion": "Версия прошивки: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "Обнаружен низкий лимит разметки памяти", "LinuxVmMaxMapCountDialogTextPrimary": "Хотите увеличить значение vm.max_map_count до {0}", "LinuxVmMaxMapCountDialogTextSecondary": "Некоторые игры могут создавать большую разметку памяти, чем разрешено на данный момент по умолчанию. Ryujinx вылетит при превышении этого лимита.", @@ -400,6 +404,8 @@ "InputDialogTitle": "Диалоговое окно ввода", "InputDialogOk": "ОК", "InputDialogCancel": "Отмена", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "Выберите никнейм", "InputDialogAddNewProfileHeader": "Пожалуйста, введите никнейм", "InputDialogAddNewProfileSubtext": "(Максимальная длина: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "Типы файлов успешно удалены", "DialogUninstallFileTypesErrorMessage": "Не удалось удалить типы файлов.", "DialogOpenSettingsWindowLabel": "Открывает окно параметров", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "Апплет контроллера", "DialogMessageDialogErrorExceptionMessage": "Ошибка отображения сообщения: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Ошибка отображения программной клавиатуры: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "Version {0} - {1}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - Информация", "RyujinxConfirm": "Ryujinx - Подтверждение", "FileDialogAllTypes": "Все типы", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "Выберите файлы DLC", "SelectUpdateDialogTitle": "Выберите файлы обновлений", "SelectModDialogTitle": "Выбрать папку с модами", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "Менеджер учетных записей", "CheatWindowTitle": "Менеджер читов", "DlcWindowTitle": "Управление DLC для {0} ({1})", "ModWindowTitle": "Управление модами для {0} ({1})", "UpdateWindowTitle": "Менеджер обновлений игр", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "Моды для {0} ", "UserProfilesEditProfile": "Изменить выбранные", + "Continue": "Continue", "Cancel": "Отмена", "Save": "Сохранить", "Discard": "Отменить", @@ -810,5 +850,17 @@ "MultiplayerMode": "Режим:", "MultiplayerModeTooltip": "Меняет многопользовательский режим LDN.\n\nLdnMitm модифицирует функциональность локальной беспроводной/игры на одном устройстве в играх, позволяя играть с другими пользователями Ryujinx или взломанными консолями Nintendo Switch с установленным модулем ldn_mitm, находящимися в одной локальной сети друг с другом.\n\nМногопользовательская игра требует наличия у всех игроков одной и той же версии игры (т.е. Super Smash Bros. Ultimate v13.0.1 не может подключиться к v13.0.0).\n\nРекомендуется оставить отключенным.", "MultiplayerModeDisabled": "Отключено", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index d32cfb737..fa59ba682 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "จัดการประเภทไฟล์", "MenuBarToolsInstallFileTypes": "ติดตั้งประเภทไฟล์", "MenuBarToolsUninstallFileTypes": "ถอนการติดตั้งประเภทไฟล์", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_มุมมอง", "MenuBarViewWindow": "ขนาดหน้าต่าง", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "เปิดไดเร็กทอรี่ Mods ของแอปพลิเคชัน", "GameListContextMenuOpenSdModsDirectory": "เปิดไดเร็กทอรี่ Mods Atmosphere", "GameListContextMenuOpenSdModsDirectoryToolTip": "เปิดไดเร็กทอรี่ Atmosphere ของการ์ด SD สำรองซึ่งมี Mods ของแอปพลิเคชัน ซึ่งมีประโยชน์สำหรับ Mods ที่บรรจุมากับฮาร์ดแวร์จริง", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "เกมส์โหลดแล้ว {0}/{1}", "StatusBarSystemVersion": "เวอร์ชั่นของระบบ: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "การตั้งค่าหน่วยความถึงขีดจำกัดต่ำสุดแล้ว", "LinuxVmMaxMapCountDialogTextPrimary": "คุณต้องเพิ่มค่า vm.max_map_count ไปยัง {0}", "LinuxVmMaxMapCountDialogTextSecondary": "บางเกมอาจพยายามใช้งานหน่วยความจำมากกว่าที่ได้รับอนุญาตในปัจจุบัน Ryujinx จะปิดตัวลงเมื่อเกินขีดจำกัดนี้", @@ -400,6 +404,8 @@ "InputDialogTitle": "กล่องโต้ตอบการป้อนข้อมูล", "InputDialogOk": "ตกลง", "InputDialogCancel": "ยกเลิก", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "เลือก ชื่อโปรไฟล์", "InputDialogAddNewProfileHeader": "กรุณาใส่ชื่อโปรไฟล์", "InputDialogAddNewProfileSubtext": "(ความยาวสูงสุด: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "ถอนการติดตั้งตามประเภทของไฟล์สำเร็จแล้ว!", "DialogUninstallFileTypesErrorMessage": "ไม่สามารถถอนการติดตั้งตามประเภทของไฟล์ได้", "DialogOpenSettingsWindowLabel": "เปิดหน้าต่างการตั้งค่า", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "คอนโทรลเลอร์ Applet", "DialogMessageDialogErrorExceptionMessage": "เกิดข้อผิดพลาดในการแสดงกล่องโต้ตอบข้อความ: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "เกิดข้อผิดพลาดในการแสดงซอฟต์แวร์แป้นพิมพ์: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "เวอร์ชั่น {0}", "TitleBundledUpdateVersionLabel": "Bundled: เวอร์ชั่น {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx – ข้อมูล", "RyujinxConfirm": "Ryujinx - ยืนยัน", "FileDialogAllTypes": "ทุกประเภท", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "เลือกไฟล์ DLC", "SelectUpdateDialogTitle": "เลือกไฟล์อัพเดต", "SelectModDialogTitle": "เลือกไดเรกทอรี Mods", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "จัดการโปรไฟล์ผู้ใช้", "CheatWindowTitle": "จัดการสูตรโกง", "DlcWindowTitle": "จัดการ DLC ที่ดาวน์โหลดได้สำหรับ {0} ({1})", "ModWindowTitle": "จัดการม็อดที่ดาวน์โหลดได้สำหรับ {0} ({1})", "UpdateWindowTitle": "จัดการอัปเดตหัวข้อ", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} อัพเดตที่เพิ่มมาใหม่", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} ม็อด", "UserProfilesEditProfile": "แก้ไขที่เลือกแล้ว", + "Continue": "Continue", "Cancel": "ยกเลิก", "Save": "บันทึก", "Discard": "ละทิ้ง", @@ -810,5 +850,17 @@ "MultiplayerMode": "โหมด:", "MultiplayerModeTooltip": "เปลี่ยนโหมดผู้เล่นหลายคนของ LDN\n\nLdnMitm จะปรับเปลี่ยนฟังก์ชันการเล่นแบบไร้สาย/ภายใน จะให้เกมทำงานเหมือนกับว่าเป็น LAN ช่วยให้สามารถเชื่อมต่อภายในเครือข่ายเดียวกันกับอินสแตนซ์ Ryujinx อื่น ๆ และคอนโซล Nintendo Switch ที่ถูกแฮ็กซึ่งมีโมดูล ldn_mitm ติดตั้งอยู่\n\nผู้เล่นหลายคนต้องการให้ผู้เล่นทุกคนอยู่ในเกมเวอร์ชันเดียวกัน (เช่น Super Smash Bros. Ultimate v13.0.1 ไม่สามารถเชื่อมต่อกับ v13.0.0)\n\nปล่อยให้ปิดการใช้งานหากไม่แน่ใจ", "MultiplayerModeDisabled": "ปิดใช้งาน", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index 1ac9a0b6e..9b321c423 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "Dosya uzantılarını yönet", "MenuBarToolsInstallFileTypes": "Dosya uzantılarını yükle", "MenuBarToolsUninstallFileTypes": "Dosya uzantılarını kaldır", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_Görüntüle", "MenuBarViewWindow": "Pencere Boyutu", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Opens the directory which contains Application's Mods", "GameListContextMenuOpenSdModsDirectory": "Open Atmosphere Mods Directory", "GameListContextMenuOpenSdModsDirectoryToolTip": "Opens the alternative SD card Atmosphere directory which contains Application's Mods. Useful for mods that are packaged for real hardware.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} Oyun Yüklendi", "StatusBarSystemVersion": "Sistem Sürümü: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "Bellek Haritaları İçin Düşük Limit Tespit Edildi ", "LinuxVmMaxMapCountDialogTextPrimary": "vm.max_map_count değerini {0} sayısına yükseltmek ister misiniz", "LinuxVmMaxMapCountDialogTextSecondary": "Bazı oyunlar şu an izin verilen bellek haritası limitinden daha fazlasını yaratmaya çalışabilir. Ryujinx bu limitin geçildiği takdirde kendini kapatıcaktır.", @@ -400,6 +404,8 @@ "InputDialogTitle": "Giriş Yöntemi Diyaloğu", "InputDialogOk": "Tamam", "InputDialogCancel": "İptal", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "Profil İsmini Seç", "InputDialogAddNewProfileHeader": "Lütfen Bir Profil İsmi Girin", "InputDialogAddNewProfileSubtext": "(Maksimum Uzunluk: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "Dosya uzantıları başarıyla kaldırıldı!", "DialogUninstallFileTypesErrorMessage": "Dosya uzantıları kaldırma işlemi başarısız oldu.", "DialogOpenSettingsWindowLabel": "Seçenekler Penceresini Aç", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "Kumanda Applet'i", "DialogMessageDialogErrorExceptionMessage": "Mesaj diyaloğu gösterilirken hata: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Mesaj diyaloğu gösterilirken hata: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "Sürüm {0} - {1}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - Bilgi", "RyujinxConfirm": "Ryujinx - Doğrulama", "FileDialogAllTypes": "Tüm türler", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "DLC dosyalarını seç", "SelectUpdateDialogTitle": "Güncelleme dosyalarını seç", "SelectModDialogTitle": "Mod Dizinini Seç", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "Kullanıcı Profillerini Yönet", "CheatWindowTitle": "Oyun Hilelerini Yönet", "DlcWindowTitle": "Oyun DLC'lerini Yönet", "ModWindowTitle": "Manage Mods for {0} ({1})", "UpdateWindowTitle": "Oyun Güncellemelerini Yönet", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} Mod(lar)", "UserProfilesEditProfile": "Seçiliyi Düzenle", + "Continue": "Continue", "Cancel": "İptal", "Save": "Kaydet", "Discard": "Iskarta", @@ -810,5 +850,17 @@ "MultiplayerMode": "Mod:", "MultiplayerModeTooltip": "Change LDN multiplayer mode.\n\nLdnMitm will modify local wireless/local play functionality in games to function as if it were LAN, allowing for local, same-network connections with other Ryujinx instances and hacked Nintendo Switch consoles that have the ldn_mitm module installed.\n\nMultiplayer requires all players to be on the same game version (i.e. Super Smash Bros. Ultimate v13.0.1 can't connect to v13.0.0).\n\nLeave DISABLED if unsure.", "MultiplayerModeDisabled": "Devre Dışı", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 0e22263b6..09a7e8cb4 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "Керувати типами файлів", "MenuBarToolsInstallFileTypes": "Установити типи файлів", "MenuBarToolsUninstallFileTypes": "Видалити типи файлів", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "_View", "MenuBarViewWindow": "Window Size", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Відкриває каталог, який містить модифікації Додатків", "GameListContextMenuOpenSdModsDirectory": "Відкрити каталог модифікацій Atmosphere", "GameListContextMenuOpenSdModsDirectoryToolTip": "Відкриває альтернативний каталог SD-карти Atmosphere, що містить модифікації Додатків. Корисно для модифікацій, зроблених для реального обладнання.", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} ігор завантажено", "StatusBarSystemVersion": "Версія системи: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "Виявлено низьку межу для відображення памʼяті", "LinuxVmMaxMapCountDialogTextPrimary": "Бажаєте збільшити значення vm.max_map_count на {0}", "LinuxVmMaxMapCountDialogTextSecondary": "Деякі ігри можуть спробувати створити більше відображень памʼяті, ніж дозволено наразі. Ryujinx завершить роботу, щойно цей ліміт буде перевищено.", @@ -400,6 +404,8 @@ "InputDialogTitle": "Діалог введення", "InputDialogOk": "Гаразд", "InputDialogCancel": "Скасувати", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "Виберіть ім'я профілю", "InputDialogAddNewProfileHeader": "Будь ласка, введіть ім'я профілю", "InputDialogAddNewProfileSubtext": "(Макс. довжина: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "Успішно видалено типи файлів!", "DialogUninstallFileTypesErrorMessage": "Не вдалося видалити типи файлів.", "DialogOpenSettingsWindowLabel": "Відкрити вікно налаштувань", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "Аплет контролера", "DialogMessageDialogErrorExceptionMessage": "Помилка показу діалогового вікна повідомлення: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Помилка показу програмної клавіатури: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "Версія {0} - {1}", "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", "TitleBundledDlcLabel": "Bundled:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujin x - Інформація", "RyujinxConfirm": "Ryujinx - Підтвердження", "FileDialogAllTypes": "Всі типи", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "Виберіть файли DLC", "SelectUpdateDialogTitle": "Виберіть файли оновлення", "SelectModDialogTitle": "Виберіть теку з модами", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "Менеджер профілів користувачів", "CheatWindowTitle": "Менеджер читів", "DlcWindowTitle": "Менеджер вмісту для завантаження", "ModWindowTitle": "Керувати модами для {0} ({1})", "UpdateWindowTitle": "Менеджер оновлення назв", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} new update(s) added", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} missing update(s) removed", "ModWindowHeading": "{0} мод(ів)", "UserProfilesEditProfile": "Редагувати вибране", + "Continue": "Continue", "Cancel": "Скасувати", "Save": "Зберегти", "Discard": "Скасувати", @@ -810,5 +850,17 @@ "MultiplayerMode": "Режим:", "MultiplayerModeTooltip": "Змінити LDN мультиплеєру.\n\nLdnMitm змінить функціонал бездротової/локальної гри в іграх, щоб вони працювали так, ніби це LAN, що дозволяє локальні підключення в тій самій мережі з іншими екземплярами Ryujinx та хакнутими консолями Nintendo Switch, які мають встановлений модуль ldn_mitm.\n\nМультиплеєр вимагає, щоб усі гравці були на одній і тій же версії гри (наприклад Super Smash Bros. Ultimate v13.0.1 не зможе під'єднатися до v13.0.0).\n\nЗалиште на \"Вимкнено\", якщо не впевнені, ", "MultiplayerModeDisabled": "Вимкнено", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index 004d5007b..11840e864 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "管理文件扩展名", "MenuBarToolsInstallFileTypes": "关联文件扩展名", "MenuBarToolsUninstallFileTypes": "取消关联扩展名", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "视图(_V)", "MenuBarViewWindow": "窗口大小", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "打开存放游戏 MOD 的目录", "GameListContextMenuOpenSdModsDirectory": "打开大气层系统 MOD 目录", "GameListContextMenuOpenSdModsDirectoryToolTip": "打开存放适用于大气层系统的游戏 MOD 的目录,对于为真实硬件打包的 MOD 非常有用", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} 游戏加载完成", "StatusBarSystemVersion": "系统固件版本:{0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "检测到操作系统内存映射最大数量被设置的过低", "LinuxVmMaxMapCountDialogTextPrimary": "你想要将操作系统 vm.max_map_count 的值增加到 {0} 吗", "LinuxVmMaxMapCountDialogTextSecondary": "有些游戏可能会尝试创建超过当前系统允许的内存映射最大数量,若超过当前最大数量,Ryujinx 模拟器将会闪退。", @@ -400,6 +404,8 @@ "InputDialogTitle": "输入对话框", "InputDialogOk": "完成", "InputDialogCancel": "取消", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "选择用户名称", "InputDialogAddNewProfileHeader": "请输入账户名称", "InputDialogAddNewProfileSubtext": "(最大长度:{0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "成功解除文件类型关联!", "DialogUninstallFileTypesErrorMessage": "解除文件类型关联失败!", "DialogOpenSettingsWindowLabel": "打开设置窗口", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "控制器小窗口", "DialogMessageDialogErrorExceptionMessage": "显示消息对话框时出错:{0}", "DialogSoftwareKeyboardErrorExceptionMessage": "显示软件键盘时出错:{0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "游戏更新的版本 {0}", "TitleBundledUpdateVersionLabel": "捆绑:版本 {0}", "TitleBundledDlcLabel": "捆绑:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - 信息", "RyujinxConfirm": "Ryujinx - 确认", "FileDialogAllTypes": "全部类型", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "选择 DLC 文件", "SelectUpdateDialogTitle": "选择更新文件", "SelectModDialogTitle": "选择 MOD 目录", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "管理用户账户", "CheatWindowTitle": "金手指管理器", "DlcWindowTitle": "管理 {0} ({1}) 的 DLC", "ModWindowTitle": "管理 {0} ({1}) 的 MOD", "UpdateWindowTitle": "游戏更新管理器", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "{0} 个更新被添加", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "{0} 个失效的游戏更新已移除", "ModWindowHeading": "{0} Mod", "UserProfilesEditProfile": "编辑所选", + "Continue": "Continue", "Cancel": "取消", "Save": "保存", "Discard": "放弃", @@ -810,5 +850,17 @@ "MultiplayerMode": "联机模式:", "MultiplayerModeTooltip": "修改 LDN 多人联机游玩模式。\n\nldn_mitm 联机插件将修改游戏中的本地无线和本地游玩功能,使其表现得像局域网一样,允许和其他安装了 ldn_mitm 插件的 Ryujinx 模拟器和破解的任天堂 Switch 主机在同一网络下进行本地连接,实现多人联机游玩。\n\n多人联机游玩要求所有玩家必须运行相同的游戏版本(例如,游戏版本 v13.0.1 无法与 v13.0.0 联机)。\n\n如果不确定,请保持为“禁用”。", "MultiplayerModeDisabled": "禁用", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index 9bfc243ae..d59df0e5b 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -33,6 +33,7 @@ "MenuBarToolsManageFileTypes": "管理檔案類型", "MenuBarToolsInstallFileTypes": "安裝檔案類型", "MenuBarToolsUninstallFileTypes": "移除檔案類型", + "MenuBarToolsXCITrimmer": "Trim XCI Files", "MenuBarView": "檢視(_V)", "MenuBarViewWindow": "視窗大小", "MenuBarViewWindow720": "720p", @@ -84,8 +85,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "開啟此應用程式模組的資料夾", "GameListContextMenuOpenSdModsDirectory": "開啟 Atmosphere 模組資料夾", "GameListContextMenuOpenSdModsDirectoryToolTip": "開啟此應用程式模組的另一個 SD 卡 Atmosphere 資料夾。適用於為真實硬體封裝的模組。", + "GameListContextMenuTrimXCI": "Check and Trim XCI File", + "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", "StatusBarGamesLoaded": "{0}/{1} 遊戲已載入", "StatusBarSystemVersion": "系統版本: {0}", + "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", "LinuxVmMaxMapCountDialogTitle": "檢測到記憶體映射的低限值", "LinuxVmMaxMapCountDialogTextPrimary": "您是否要將 vm.max_map_count 的數值增至 {0}?", "LinuxVmMaxMapCountDialogTextSecondary": "某些遊戲可能會嘗試建立超過目前允許的記憶體映射。一旦超過此限制,Ryujinx 就會崩潰。", @@ -400,6 +404,8 @@ "InputDialogTitle": "輸入對話方塊", "InputDialogOk": "確定", "InputDialogCancel": "取消", + "InputDialogCancelling": "Cancelling", + "InputDialogClose": "Close", "InputDialogAddNewProfileTitle": "選擇設定檔名稱", "InputDialogAddNewProfileHeader": "請輸入設定檔名稱", "InputDialogAddNewProfileSubtext": "(最大長度: {0})", @@ -469,6 +475,7 @@ "DialogUninstallFileTypesSuccessMessage": "成功移除檔案類型!", "DialogUninstallFileTypesErrorMessage": "無法移除檔案類型。", "DialogOpenSettingsWindowLabel": "開啟設定視窗", + "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", "DialogControllerAppletTitle": "控制器小程式", "DialogMessageDialogErrorExceptionMessage": "顯示訊息對話方塊時出現錯誤: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "顯示軟體鍵盤時出現錯誤: {0}", @@ -671,6 +678,12 @@ "TitleUpdateVersionLabel": "版本 {0}", "TitleBundledUpdateVersionLabel": "附帶: 版本 {0}", "TitleBundledDlcLabel": "附帶:", + "TitleXCIStatusPartialLabel": "Partial", + "TitleXCIStatusTrimmableLabel": "Untrimmed", + "TitleXCIStatusUntrimmableLabel": "Trimmed", + "TitleXCIStatusFailedLabel": "(Failed)", + "TitleXCICanSaveLabel": "Save {0:n0} Mb", + "TitleXCISavingLabel": "Saved {0:n0} Mb", "RyujinxInfo": "Ryujinx - 資訊", "RyujinxConfirm": "Ryujinx - 確認", "FileDialogAllTypes": "全部類型", @@ -723,11 +736,37 @@ "SelectDlcDialogTitle": "選取 DLC 檔案", "SelectUpdateDialogTitle": "選取更新檔", "SelectModDialogTitle": "選取模組資料夾", + "TrimXCIFileDialogTitle": "Check and Trim XCI File", + "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", + "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", + "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", + "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", + "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", + "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", + "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", + "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", + "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", + "TrimXCIFileCancelled": "The operation was cancelled", + "TrimXCIFileFileUndertermined": "No operation was performed", "UserProfileWindowTitle": "使用者設定檔管理員", "CheatWindowTitle": "密技管理員", "DlcWindowTitle": "管理 {0} 的可下載內容 ({1})", "ModWindowTitle": "管理 {0} 的模組 ({1})", "UpdateWindowTitle": "遊戲更新管理員", + "XCITrimmerWindowTitle": "XCI File Trimmer", + "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", + "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", + "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", + "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", + "XCITrimmerTitleStatusFailed": "Failed", + "XCITrimmerPotentialSavings": "Potential Savings", + "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerSavingsMb": "{0:n0} Mb", + "XCITrimmerSelectDisplayed": "Select Shown", + "XCITrimmerDeselectDisplayed": "Deselect Shown", + "XCITrimmerSortName": "Title", + "XCITrimmerSortSaved": "Space Savings", "XCITrimmerTrim": "Trim", "XCITrimmerUntrim": "Untrim", "UpdateWindowUpdateAddedMessage": "已加入 {0} 個遊戲更新", @@ -743,6 +782,7 @@ "AutoloadUpdateRemovedMessage": "已刪除 {0} 個遺失的遊戲更新", "ModWindowHeading": "{0} 模組", "UserProfilesEditProfile": "編輯所選", + "Continue": "Continue", "Cancel": "取消", "Save": "儲存", "Discard": "放棄變更", @@ -810,5 +850,17 @@ "MultiplayerMode": "模式:", "MultiplayerModeTooltip": "變更 LDN 多人遊戲模式。\n\nLdnMitm 將修改遊戲中的本機無線/本機遊戲功能,使其如同區域網路一樣執行,允許與其他安裝了 ldn_mitm 模組的 Ryujinx 實例和已破解的 Nintendo Switch 遊戲機進行本機同網路連線。\n\n多人遊戲要求所有玩家使用相同的遊戲版本 (例如,Super Smash Bros. Ultimate v13.0.1 無法連接 v13.0.0)。\n\n如果不確定,請保持 Disabled (停用) 狀態。", "MultiplayerModeDisabled": "已停用", - "MultiplayerModeLdnMitm": "ldn_mitm" + "MultiplayerModeLdnMitm": "ldn_mitm", + "MultiplayerModeLdnRyu": "RyuLDN", + "MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)", + "MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.", + "LdnPassphrase": "Network Passphrase:", + "LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.", + "LdnPassphraseInputPublic": "(public)", + "GenLdnPass": "Generate Random", + "GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.", + "ClearLdnPass": "Clear", + "ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.", + "InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\"" } -- 2.47.1 From f8d63f9a2fe6a094f147b414201c882e34f27e29 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 22 Nov 2024 14:38:58 -0600 Subject: [PATCH 073/722] UI: Add a show changelog button in the Updater, for new updates & when you're on the latest version. --- Directory.Packages.props | 4 +-- src/Ryujinx.Common/ReleaseInformation.cs | 9 +++++ src/Ryujinx/Assets/Locales/ar_SA.json | 1 + src/Ryujinx/Assets/Locales/de_DE.json | 1 + src/Ryujinx/Assets/Locales/el_GR.json | 1 + src/Ryujinx/Assets/Locales/en_US.json | 1 + src/Ryujinx/Assets/Locales/es_ES.json | 1 + src/Ryujinx/Assets/Locales/fr_FR.json | 1 + src/Ryujinx/Assets/Locales/he_IL.json | 1 + src/Ryujinx/Assets/Locales/it_IT.json | 1 + src/Ryujinx/Assets/Locales/ja_JP.json | 1 + src/Ryujinx/Assets/Locales/ko_KR.json | 1 + src/Ryujinx/Assets/Locales/pl_PL.json | 1 + src/Ryujinx/Assets/Locales/pt_BR.json | 1 + src/Ryujinx/Assets/Locales/ru_RU.json | 1 + src/Ryujinx/Assets/Locales/th_TH.json | 1 + src/Ryujinx/Assets/Locales/tr_TR.json | 1 + src/Ryujinx/Assets/Locales/uk_UA.json | 1 + src/Ryujinx/Assets/Locales/zh_CN.json | 1 + src/Ryujinx/Assets/Locales/zh_TW.json | 1 + src/Ryujinx/UI/Helpers/ContentDialogHelper.cs | 34 +++++++++++++++++++ src/Ryujinx/Updater.cs | 33 +++++++++++++----- 22 files changed, 87 insertions(+), 11 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index c0ace079d..ffb5f2ead 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -38,7 +38,7 @@ - + @@ -52,4 +52,4 @@ - \ No newline at end of file + diff --git a/src/Ryujinx.Common/ReleaseInformation.cs b/src/Ryujinx.Common/ReleaseInformation.cs index f4c62155a..011d9848a 100644 --- a/src/Ryujinx.Common/ReleaseInformation.cs +++ b/src/Ryujinx.Common/ReleaseInformation.cs @@ -1,3 +1,4 @@ +using System; using System.Reflection; namespace Ryujinx.Common @@ -35,5 +36,13 @@ namespace Ryujinx.Common public static bool IsReleaseBuild => IsValid && ReleaseChannelName.Equals(ReleaseChannel); public static string Version => IsValid ? BuildVersion : Assembly.GetEntryAssembly()!.GetCustomAttribute()?.InformationalVersion; + + public static string GetChangelogUrl(Version currentVersion, Version newVersion) => + IsCanaryBuild + ? $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelSourceRepo}/compare/Canary-{currentVersion}...Canary-{newVersion}" + : $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelSourceRepo}/releases/tag/{newVersion}"; + + public static string GetChangelogForVersion(Version version) => + $"https://github.com/{ReleaseChannelOwner}/{ReleaseChannelRepo}/releases/tag/{version}"; } } diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index 6dbc96135..c937a2eed 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "جاري استخراج التحديث...", "DialogUpdaterRenamingMessage": "إعادة تسمية التحديث...", "DialogUpdaterAddingFilesMessage": "إضافة تحديث جديد...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "اكتمل التحديث", "DialogUpdaterRestartMessage": "هل تريد إعادة تشغيل ريوجينكس الآن؟", "DialogUpdaterNoInternetMessage": "أنت غير متصل بالإنترنت.", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index be95f3bc0..c27de5608 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Update wird entpackt...", "DialogUpdaterRenamingMessage": "Update wird umbenannt...", "DialogUpdaterAddingFilesMessage": "Update wird hinzugefügt...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "Update abgeschlossen!", "DialogUpdaterRestartMessage": "Ryujinx jetzt neu starten?", "DialogUpdaterNoInternetMessage": "Es besteht keine Verbindung mit dem Internet!", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index c6cfb9d62..d47c8b9fe 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Εξαγωγή Ενημέρωσης...", "DialogUpdaterRenamingMessage": "Μετονομασία Ενημέρωσης...", "DialogUpdaterAddingFilesMessage": "Προσθήκη Νέας Ενημέρωσης...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "Η Ενημέρωση Ολοκληρώθηκε!", "DialogUpdaterRestartMessage": "Θέλετε να επανεκκινήσετε το Ryujinx τώρα;", "DialogUpdaterNoInternetMessage": "Δεν είστε συνδεδεμένοι στο Διαδίκτυο!", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index 9354c8a41..23135866d 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Extracting Update...", "DialogUpdaterRenamingMessage": "Renaming Update...", "DialogUpdaterAddingFilesMessage": "Adding New Update...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "Update Complete!", "DialogUpdaterRestartMessage": "Do you want to restart Ryujinx now?", "DialogUpdaterNoInternetMessage": "You are not connected to the Internet!", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index 6a194960b..8456040ce 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Extrayendo actualización...", "DialogUpdaterRenamingMessage": "Renombrando actualización...", "DialogUpdaterAddingFilesMessage": "Aplicando actualización...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "¡Actualización completa!", "DialogUpdaterRestartMessage": "¿Quieres reiniciar Ryujinx?", "DialogUpdaterNoInternetMessage": "¡No estás conectado a internet!", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index dd23bef76..f17a7ba95 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Extraction de la mise à jour…", "DialogUpdaterRenamingMessage": "Renommage de la mise à jour...", "DialogUpdaterAddingFilesMessage": "Ajout d'une nouvelle mise à jour...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "Mise à jour terminée !", "DialogUpdaterRestartMessage": "Voulez-vous redémarrer Ryujinx maintenant ?", "DialogUpdaterNoInternetMessage": "Vous n'êtes pas connecté à Internet !", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index b9f89eb37..f0cf4eb68 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "מחלץ עדכון...", "DialogUpdaterRenamingMessage": "משנה את שם העדכון...", "DialogUpdaterAddingFilesMessage": "מוסיף עדכון חדש...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "העדכון הושלם!", "DialogUpdaterRestartMessage": "האם אתם רוצים להפעיל מחדש את ריוג'ינקס עכשיו?", "DialogUpdaterNoInternetMessage": "אתם לא מחוברים לאינטרנט!", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index f10dd9d35..dd408bf5b 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Estrazione dell'aggiornamento...", "DialogUpdaterRenamingMessage": "Rinominazione dell'aggiornamento...", "DialogUpdaterAddingFilesMessage": "Aggiunta del nuovo aggiornamento...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "Aggiornamento completato!", "DialogUpdaterRestartMessage": "Vuoi riavviare Ryujinx adesso?", "DialogUpdaterNoInternetMessage": "Non sei connesso ad Internet!", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index 34253acbf..244730494 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "アップデートを展開中...", "DialogUpdaterRenamingMessage": "アップデートをリネーム中...", "DialogUpdaterAddingFilesMessage": "新規アップデートを追加中...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "アップデート完了!", "DialogUpdaterRestartMessage": "すぐに Ryujinx を再起動しますか?", "DialogUpdaterNoInternetMessage": "インターネットに接続されていません!", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 5bda1565b..47a619054 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "업데이트 추출 중...", "DialogUpdaterRenamingMessage": "이름 변경 업데이트...", "DialogUpdaterAddingFilesMessage": "새 업데이트 추가 중...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "업데이트가 완료되었습니다!", "DialogUpdaterRestartMessage": "지금 Ryujinx를 다시 시작하시겠습니까?", "DialogUpdaterNoInternetMessage": "인터넷에 연결되어 있지 않습니다!", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index 015530833..cfa9d7a76 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Wypakowywanie Aktualizacji...", "DialogUpdaterRenamingMessage": "Zmiana Nazwy Aktualizacji...", "DialogUpdaterAddingFilesMessage": "Dodawanie Nowej Aktualizacji...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "Aktualizacja Zakończona!", "DialogUpdaterRestartMessage": "Czy chcesz teraz zrestartować Ryujinx?", "DialogUpdaterNoInternetMessage": "Nie masz połączenia z Internetem!", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index 512581c0e..352fae46b 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Extraindo atualização...", "DialogUpdaterRenamingMessage": "Renomeando atualização...", "DialogUpdaterAddingFilesMessage": "Adicionando nova atualização...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "Atualização concluída!", "DialogUpdaterRestartMessage": "Deseja reiniciar o Ryujinx agora?", "DialogUpdaterNoInternetMessage": "Você não está conectado à Internet!", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index 9d81116ef..112735e2d 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Извлечение обновления...", "DialogUpdaterRenamingMessage": "Переименование обновления...", "DialogUpdaterAddingFilesMessage": "Добавление нового обновления...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "Обновление завершено", "DialogUpdaterRestartMessage": "Перезапустить Ryujinx?", "DialogUpdaterNoInternetMessage": "Вы не подключены к интернету", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index fa59ba682..35959ddbd 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "กำลังแตกไฟล์อัปเดต...", "DialogUpdaterRenamingMessage": "กำลังลบไฟล์เก่า...", "DialogUpdaterAddingFilesMessage": "กำลังเพิ่มไฟล์อัปเดตใหม่...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "อัปเดตเสร็จสมบูรณ์แล้ว!", "DialogUpdaterRestartMessage": "คุณต้องการรีสตาร์ท Ryujinx ตอนนี้หรือไม่?", "DialogUpdaterNoInternetMessage": "คุณไม่ได้เชื่อมต่อกับอินเทอร์เน็ต!", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index 9b321c423..5d50b67db 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Güncelleme Ayıklanıyor...", "DialogUpdaterRenamingMessage": "Güncelleme Yeniden Adlandırılıyor...", "DialogUpdaterAddingFilesMessage": "Yeni Güncelleme Ekleniyor...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "Güncelleme Tamamlandı!", "DialogUpdaterRestartMessage": "Ryujinx'i şimdi yeniden başlatmak istiyor musunuz?", "DialogUpdaterNoInternetMessage": "İnternete bağlı değilsiniz!", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 09a7e8cb4..a45208486 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "Видобування оновлення...", "DialogUpdaterRenamingMessage": "Перейменування оновлення...", "DialogUpdaterAddingFilesMessage": "Додавання нового оновлення...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "Оновлення завершено!", "DialogUpdaterRestartMessage": "Перезапустити Ryujinx зараз?", "DialogUpdaterNoInternetMessage": "Ви не підключені до Інтернету!", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index 11840e864..8a4995ea7 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "正在提取更新...", "DialogUpdaterRenamingMessage": "正在重命名更新...", "DialogUpdaterAddingFilesMessage": "安装更新中...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "更新成功!", "DialogUpdaterRestartMessage": "是否立即重启 Ryujinx 模拟器?", "DialogUpdaterNoInternetMessage": "没有连接到网络", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index d59df0e5b..5649ba00a 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -457,6 +457,7 @@ "DialogUpdaterExtractionMessage": "正在提取更新...", "DialogUpdaterRenamingMessage": "重新命名更新...", "DialogUpdaterAddingFilesMessage": "加入新更新...", + "DialogUpdaterShowChangelogMessage": "Show Changelog", "DialogUpdaterCompleteMessage": "更新成功!", "DialogUpdaterRestartMessage": "您現在要重新啟動 Ryujinx 嗎?", "DialogUpdaterNoInternetMessage": "您沒有連線到網際網路!", diff --git a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs b/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs index a7fe3f0ce..3f0f0f033 100644 --- a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs +++ b/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs @@ -261,6 +261,16 @@ namespace Ryujinx.Ava.UI.Helpers string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], (int)Symbol.Important); + + internal static async Task CreateUpdaterUpToDateInfoDialog(string primary, string secondaryText) + => await ShowTextDialog( + LocaleManager.Instance[LocaleKeys.DialogUpdaterTitle], + primary, + secondaryText, + LocaleManager.Instance[LocaleKeys.DialogUpdaterShowChangelogMessage], + string.Empty, + LocaleManager.Instance[LocaleKeys.InputDialogOk], + (int)Symbol.Important); internal static async Task CreateWarningDialog(string primary, string secondaryText) => await ShowTextDialog( @@ -309,6 +319,30 @@ namespace Ryujinx.Ava.UI.Helpers return response == UserResult.Yes; } + + internal static async Task CreateUpdaterChoiceDialog(string title, string primary, string secondaryText) + { + if (_isChoiceDialogOpen) + { + return UserResult.Cancel; + } + + _isChoiceDialogOpen = true; + + UserResult response = await ShowTextDialog( + title, + primary, + secondaryText, + LocaleManager.Instance[LocaleKeys.InputDialogYes], + LocaleManager.Instance[LocaleKeys.DialogUpdaterShowChangelogMessage], + LocaleManager.Instance[LocaleKeys.InputDialogNo], + (int)Symbol.Help, + UserResult.Yes); + + _isChoiceDialogOpen = false; + + return response; + } internal static async Task CreateExitDialog() { diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 9deff5e86..5f3ddb119 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -176,9 +176,14 @@ namespace Ryujinx.Ava { if (showVersionUpToDate) { - await ContentDialogHelper.CreateUpdaterInfoDialog( + UserResult userResult = await ContentDialogHelper.CreateUpdaterUpToDateInfoDialog( LocaleManager.Instance[LocaleKeys.DialogUpdaterAlreadyOnLatestVersionMessage], string.Empty); + + if (userResult is UserResult.Yes) + { + OpenHelper.OpenUrl(ReleaseInformation.GetChangelogForVersion(currentVersion)); + } } _running = false; @@ -206,19 +211,29 @@ namespace Ryujinx.Ava await Dispatcher.UIThread.InvokeAsync(async () => { + string newVersionString = ReleaseInformation.IsCanaryBuild + ? $"Canary {currentVersion} -> Canary {newVersion}" + : $"{currentVersion} -> {newVersion}"; + + RequestUserToUpdate: // Show a message asking the user if they want to update - var shouldUpdate = await ContentDialogHelper.CreateChoiceDialog( + UserResult shouldUpdate = await ContentDialogHelper.CreateUpdaterChoiceDialog( LocaleManager.Instance[LocaleKeys.RyujinxUpdater], LocaleManager.Instance[LocaleKeys.RyujinxUpdaterMessage], - $"{Program.Version} -> {newVersion}"); + newVersionString); - if (shouldUpdate) + switch (shouldUpdate) { - await UpdateRyujinx(mainWindow, _buildUrl); - } - else - { - _running = false; + case UserResult.Yes: + await UpdateRyujinx(mainWindow, _buildUrl); + break; + // Secondary button maps to no, which in this case is the show changelog button. + case UserResult.No: + OpenHelper.OpenUrl(ReleaseInformation.GetChangelogUrl(currentVersion, newVersion)); + goto RequestUserToUpdate; + default: + _running = false; + break; } }); } -- 2.47.1 From 49eeb26b6f4fd9ab94a1168d1a77bdcee4617ef9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 22 Nov 2024 14:46:10 -0600 Subject: [PATCH 074/722] UI: I may be stupid. Primary button result is Ok, not Yes. --- src/Ryujinx/Updater.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 5f3ddb119..47acbc343 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -180,7 +180,7 @@ namespace Ryujinx.Ava LocaleManager.Instance[LocaleKeys.DialogUpdaterAlreadyOnLatestVersionMessage], string.Empty); - if (userResult is UserResult.Yes) + if (userResult is UserResult.Ok) { OpenHelper.OpenUrl(ReleaseInformation.GetChangelogForVersion(currentVersion)); } -- 2.47.1 From e05875a079e1a31a8e5401932949c6cdb0196856 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 22 Nov 2024 14:52:56 -0600 Subject: [PATCH 075/722] UI: It's called "live testing." --- src/Ryujinx/Updater.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 47acbc343..bdb44d668 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -114,9 +114,14 @@ namespace Ryujinx.Ava { if (showVersionUpToDate) { - await ContentDialogHelper.CreateUpdaterInfoDialog( + UserResult userResult = await ContentDialogHelper.CreateUpdaterUpToDateInfoDialog( LocaleManager.Instance[LocaleKeys.DialogUpdaterAlreadyOnLatestVersionMessage], string.Empty); + + if (userResult is UserResult.Ok) + { + OpenHelper.OpenUrl(ReleaseInformation.GetChangelogForVersion(currentVersion)); + } } _running = false; @@ -133,9 +138,14 @@ namespace Ryujinx.Ava { if (showVersionUpToDate) { - await ContentDialogHelper.CreateUpdaterInfoDialog( + UserResult userResult = await ContentDialogHelper.CreateUpdaterUpToDateInfoDialog( LocaleManager.Instance[LocaleKeys.DialogUpdaterAlreadyOnLatestVersionMessage], string.Empty); + + if (userResult is UserResult.Ok) + { + OpenHelper.OpenUrl(ReleaseInformation.GetChangelogForVersion(currentVersion)); + } } _running = false; -- 2.47.1 From 55340011528aa8c05a826397ea41178cfc8de226 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 22 Nov 2024 15:08:24 -0600 Subject: [PATCH 076/722] UI: Always save screenshots to the Ryujinx data directory. --- src/Ryujinx/AppHost.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 7246be4b9..d1398f194 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -352,11 +352,7 @@ namespace Ryujinx.Ava string filename = $"{sanitizedApplicationName}_{currentTime.Year}-{currentTime.Month:D2}-{currentTime.Day:D2}_{currentTime.Hour:D2}-{currentTime.Minute:D2}-{currentTime.Second:D2}.png"; - string directory = AppDataManager.Mode switch - { - AppDataManager.LaunchMode.Portable or AppDataManager.LaunchMode.Custom => Path.Combine(AppDataManager.BaseDirPath, "screenshots"), - _ => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Ryujinx"), - }; + string directory = Path.Combine(AppDataManager.BaseDirPath, "screenshots"); string path = Path.Combine(directory, filename); -- 2.47.1 From e653848a2cdbd6571a325bededd3535a5dc09de2 Mon Sep 17 00:00:00 2001 From: LotP1 <68976644+LotP1@users.noreply.github.com> Date: Fri, 22 Nov 2024 22:33:44 +0100 Subject: [PATCH 077/722] JIT Sparse Function Table (#250) More up to date build of the JIT Sparse PR for continued development. JIT Sparse Function Table was originally developed by riperiperi for the original Ryujinx project, and decreased the amount of layers in the Function Table structure, to decrease lookup times at the cost of slightly higher RAM usage. This PR rebalances the JIT Sparse Function Table to be a bit more RAM intensive, but faster in workloads where the JIT Function Table is a bottleneck. Faster RAM will see a bigger impact and slower RAM (DDR3 and potentially slow DDR4) will see a slight performance decrease. This PR also implements a base for a PPTC profile system that could allow for PPTC with ExeFS mods enabled in the future. This PR also potentially fixes a strange issue where Avalonia would time out in some rare instances, e.g. when running ExeFS mods with TotK and a strange controller configuration. --------- Co-authored-by: Evan Husted --- src/ARMeilleure/Common/AddressTable.cs | 252 --------- src/ARMeilleure/Common/AddressTableLevel.cs | 44 ++ src/ARMeilleure/Common/AddressTablePresets.cs | 75 +++ src/ARMeilleure/Common/Allocator.cs | 2 +- src/ARMeilleure/Common/IAddressTable.cs | 51 ++ src/ARMeilleure/Common/NativeAllocator.cs | 2 +- .../Instructions/InstEmitFlowHelper.cs | 26 + .../Signal/NativeSignalHandlerGenerator.cs | 2 +- .../Translation/ArmEmitterContext.cs | 4 +- src/ARMeilleure/Translation/PTC/Ptc.cs | 15 +- src/ARMeilleure/Translation/Translator.cs | 30 +- .../Translation/TranslatorStubs.cs | 4 +- src/Ryujinx.Cpu/AddressTable.cs | 482 ++++++++++++++++++ src/Ryujinx.Cpu/AppleHv/HvCpuContext.cs | 2 +- src/Ryujinx.Cpu/ICpuContext.cs | 2 +- src/Ryujinx.Cpu/Jit/JitCpuContext.cs | 10 +- .../Arm32/Target/Arm64/InstEmitFlow.cs | 62 ++- .../Arm64/Target/Arm64/InstEmitSystem.cs | 62 ++- .../LightningJit/LightningJitCpuContext.cs | 11 +- src/Ryujinx.Cpu/LightningJit/Translator.cs | 23 +- .../LightningJit/TranslatorStubs.cs | 4 +- src/Ryujinx.HLE/HOS/ArmProcessContext.cs | 8 +- .../HOS/ArmProcessContextFactory.cs | 2 +- src/Ryujinx.Memory/SparseMemoryBlock.cs | 125 +++++ src/Ryujinx.Tests/Cpu/CpuContext.cs | 3 +- src/Ryujinx.Tests/Cpu/EnvironmentTests.cs | 7 +- src/Ryujinx.Tests/Memory/PartialUnmaps.cs | 7 +- 27 files changed, 990 insertions(+), 327 deletions(-) delete mode 100644 src/ARMeilleure/Common/AddressTable.cs create mode 100644 src/ARMeilleure/Common/AddressTableLevel.cs create mode 100644 src/ARMeilleure/Common/AddressTablePresets.cs create mode 100644 src/ARMeilleure/Common/IAddressTable.cs create mode 100644 src/Ryujinx.Cpu/AddressTable.cs create mode 100644 src/Ryujinx.Memory/SparseMemoryBlock.cs diff --git a/src/ARMeilleure/Common/AddressTable.cs b/src/ARMeilleure/Common/AddressTable.cs deleted file mode 100644 index a3ffaf470..000000000 --- a/src/ARMeilleure/Common/AddressTable.cs +++ /dev/null @@ -1,252 +0,0 @@ -using ARMeilleure.Diagnostics; -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace ARMeilleure.Common -{ - ///

- /// Represents a table of guest address to a value. - /// - /// Type of the value - public unsafe class AddressTable : IDisposable where TEntry : unmanaged - { - /// - /// Represents a level in an . - /// - public readonly struct Level - { - /// - /// Gets the index of the in the guest address. - /// - public int Index { get; } - - /// - /// Gets the length of the in the guest address. - /// - public int Length { get; } - - /// - /// Gets the mask which masks the bits used by the . - /// - public ulong Mask => ((1ul << Length) - 1) << Index; - - /// - /// Initializes a new instance of the structure with the specified - /// and . - /// - /// Index of the - /// Length of the - public Level(int index, int length) - { - (Index, Length) = (index, length); - } - - /// - /// Gets the value of the from the specified guest . - /// - /// Guest address - /// Value of the from the specified guest - public int GetValue(ulong address) - { - return (int)((address & Mask) >> Index); - } - } - - private bool _disposed; - private TEntry** _table; - private readonly List _pages; - - /// - /// Gets the bits used by the of the instance. - /// - public ulong Mask { get; } - - /// - /// Gets the s used by the instance. - /// - public Level[] Levels { get; } - - /// - /// Gets or sets the default fill value of newly created leaf pages. - /// - public TEntry Fill { get; set; } - - /// - /// Gets the base address of the . - /// - /// instance was disposed - public nint Base - { - get - { - ObjectDisposedException.ThrowIf(_disposed, this); - - lock (_pages) - { - return (nint)GetRootPage(); - } - } - } - - /// - /// Constructs a new instance of the class with the specified list of - /// . - /// - /// is null - /// Length of is less than 2 - public AddressTable(Level[] levels) - { - ArgumentNullException.ThrowIfNull(levels); - - if (levels.Length < 2) - { - throw new ArgumentException("Table must be at least 2 levels deep.", nameof(levels)); - } - - _pages = new List(capacity: 16); - - Levels = levels; - Mask = 0; - - foreach (var level in Levels) - { - Mask |= level.Mask; - } - } - - /// - /// Determines if the specified is in the range of the - /// . - /// - /// Guest address - /// if is valid; otherwise - public bool IsValid(ulong address) - { - return (address & ~Mask) == 0; - } - - /// - /// Gets a reference to the value at the specified guest . - /// - /// Guest address - /// Reference to the value at the specified guest - /// instance was disposed - /// is not mapped - public ref TEntry GetValue(ulong address) - { - ObjectDisposedException.ThrowIf(_disposed, this); - - if (!IsValid(address)) - { - throw new ArgumentException($"Address 0x{address:X} is not mapped onto the table.", nameof(address)); - } - - lock (_pages) - { - return ref GetPage(address)[Levels[^1].GetValue(address)]; - } - } - - /// - /// Gets the leaf page for the specified guest . - /// - /// Guest address - /// Leaf page for the specified guest - private TEntry* GetPage(ulong address) - { - TEntry** page = GetRootPage(); - - for (int i = 0; i < Levels.Length - 1; i++) - { - ref Level level = ref Levels[i]; - ref TEntry* nextPage = ref page[level.GetValue(address)]; - - if (nextPage == null) - { - ref Level nextLevel = ref Levels[i + 1]; - - nextPage = i == Levels.Length - 2 ? - (TEntry*)Allocate(1 << nextLevel.Length, Fill, leaf: true) : - (TEntry*)Allocate(1 << nextLevel.Length, nint.Zero, leaf: false); - } - - page = (TEntry**)nextPage; - } - - return (TEntry*)page; - } - - /// - /// Lazily initialize and get the root page of the . - /// - /// Root page of the - private TEntry** GetRootPage() - { - if (_table == null) - { - _table = (TEntry**)Allocate(1 << Levels[0].Length, fill: nint.Zero, leaf: false); - } - - return _table; - } - - /// - /// Allocates a block of memory of the specified type and length. - /// - /// Type of elements - /// Number of elements - /// Fill value - /// if leaf; otherwise - /// Allocated block - private nint Allocate(int length, T fill, bool leaf) where T : unmanaged - { - var size = sizeof(T) * length; - var page = (nint)NativeAllocator.Instance.Allocate((uint)size); - var span = new Span((void*)page, length); - - span.Fill(fill); - - _pages.Add(page); - - TranslatorEventSource.Log.AddressTableAllocated(size, leaf); - - return page; - } - - /// - /// Releases all resources used by the instance. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Releases all unmanaged and optionally managed resources used by the - /// instance. - /// - /// to dispose managed resources also; otherwise just unmanaged resouces - protected virtual void Dispose(bool disposing) - { - if (!_disposed) - { - foreach (var page in _pages) - { - Marshal.FreeHGlobal(page); - } - - _disposed = true; - } - } - - /// - /// Frees resources used by the instance. - /// - ~AddressTable() - { - Dispose(false); - } - } -} diff --git a/src/ARMeilleure/Common/AddressTableLevel.cs b/src/ARMeilleure/Common/AddressTableLevel.cs new file mode 100644 index 000000000..6107726ee --- /dev/null +++ b/src/ARMeilleure/Common/AddressTableLevel.cs @@ -0,0 +1,44 @@ +namespace ARMeilleure.Common +{ + /// + /// Represents a level in an . + /// + public readonly struct AddressTableLevel + { + /// + /// Gets the index of the in the guest address. + /// + public int Index { get; } + + /// + /// Gets the length of the in the guest address. + /// + public int Length { get; } + + /// + /// Gets the mask which masks the bits used by the . + /// + public ulong Mask => ((1ul << Length) - 1) << Index; + + /// + /// Initializes a new instance of the structure with the specified + /// and . + /// + /// Index of the + /// Length of the + public AddressTableLevel(int index, int length) + { + (Index, Length) = (index, length); + } + + /// + /// Gets the value of the from the specified guest . + /// + /// Guest address + /// Value of the from the specified guest + public int GetValue(ulong address) + { + return (int)((address & Mask) >> Index); + } + } +} diff --git a/src/ARMeilleure/Common/AddressTablePresets.cs b/src/ARMeilleure/Common/AddressTablePresets.cs new file mode 100644 index 000000000..977e84a36 --- /dev/null +++ b/src/ARMeilleure/Common/AddressTablePresets.cs @@ -0,0 +1,75 @@ +namespace ARMeilleure.Common +{ + public static class AddressTablePresets + { + private static readonly AddressTableLevel[] _levels64Bit = + new AddressTableLevel[] + { + new(31, 17), + new(23, 8), + new(15, 8), + new( 7, 8), + new( 2, 5), + }; + + private static readonly AddressTableLevel[] _levels32Bit = + new AddressTableLevel[] + { + new(31, 17), + new(23, 8), + new(15, 8), + new( 7, 8), + new( 1, 6), + }; + + private static readonly AddressTableLevel[] _levels64BitSparseTiny = + new AddressTableLevel[] + { + new( 11, 28), + new( 2, 9), + }; + + private static readonly AddressTableLevel[] _levels32BitSparseTiny = + new AddressTableLevel[] + { + new( 10, 22), + new( 1, 9), + }; + + private static readonly AddressTableLevel[] _levels64BitSparseGiant = + new AddressTableLevel[] + { + new( 38, 1), + new( 2, 36), + }; + + private static readonly AddressTableLevel[] _levels32BitSparseGiant = + new AddressTableLevel[] + { + new( 31, 1), + new( 1, 30), + }; + + //high power will run worse on DDR3 systems and some DDR4 systems due to the higher ram utilization + //low power will never run worse than non-sparse, but for most systems it won't be necessary + //high power is always used, but I've left low power in here for future reference + public static AddressTableLevel[] GetArmPreset(bool for64Bits, bool sparse, bool lowPower = false) + { + if (sparse) + { + if (lowPower) + { + return for64Bits ? _levels64BitSparseTiny : _levels32BitSparseTiny; + } + else + { + return for64Bits ? _levels64BitSparseGiant : _levels32BitSparseGiant; + } + } + else + { + return for64Bits ? _levels64Bit : _levels32Bit; + } + } + } +} diff --git a/src/ARMeilleure/Common/Allocator.cs b/src/ARMeilleure/Common/Allocator.cs index 6905a614f..de6a77ebe 100644 --- a/src/ARMeilleure/Common/Allocator.cs +++ b/src/ARMeilleure/Common/Allocator.cs @@ -2,7 +2,7 @@ using System; namespace ARMeilleure.Common { - unsafe abstract class Allocator : IDisposable + public unsafe abstract class Allocator : IDisposable { public T* Allocate(ulong count = 1) where T : unmanaged { diff --git a/src/ARMeilleure/Common/IAddressTable.cs b/src/ARMeilleure/Common/IAddressTable.cs new file mode 100644 index 000000000..65077ec43 --- /dev/null +++ b/src/ARMeilleure/Common/IAddressTable.cs @@ -0,0 +1,51 @@ +using System; + +namespace ARMeilleure.Common +{ + public interface IAddressTable : IDisposable where TEntry : unmanaged + { + /// + /// True if the address table's bottom level is sparsely mapped. + /// This also ensures the second bottom level is filled with a dummy page rather than 0. + /// + bool Sparse { get; } + + /// + /// Gets the bits used by the of the instance. + /// + ulong Mask { get; } + + /// + /// Gets the s used by the instance. + /// + AddressTableLevel[] Levels { get; } + + /// + /// Gets or sets the default fill value of newly created leaf pages. + /// + TEntry Fill { get; set; } + + /// + /// Gets the base address of the . + /// + /// instance was disposed + nint Base { get; } + + /// + /// Determines if the specified is in the range of the + /// . + /// + /// Guest address + /// if is valid; otherwise + bool IsValid(ulong address); + + /// + /// Gets a reference to the value at the specified guest . + /// + /// Guest address + /// Reference to the value at the specified guest + /// instance was disposed + /// is not mapped + ref TEntry GetValue(ulong address); + } +} diff --git a/src/ARMeilleure/Common/NativeAllocator.cs b/src/ARMeilleure/Common/NativeAllocator.cs index ca5d3a850..ffcffa4bc 100644 --- a/src/ARMeilleure/Common/NativeAllocator.cs +++ b/src/ARMeilleure/Common/NativeAllocator.cs @@ -3,7 +3,7 @@ using System.Runtime.InteropServices; namespace ARMeilleure.Common { - unsafe sealed class NativeAllocator : Allocator + public unsafe sealed class NativeAllocator : Allocator { public static NativeAllocator Instance { get; } = new(); diff --git a/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs b/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs index 2009bafda..a602ea49e 100644 --- a/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs +++ b/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs @@ -193,6 +193,8 @@ namespace ARMeilleure.Instructions Operand hostAddress; + var table = context.FunctionTable; + // If address is mapped onto the function table, we can skip the table walk. Otherwise we fallback // onto the dispatch stub. if (guestAddress.Kind == OperandKind.Constant && context.FunctionTable.IsValid(guestAddress.Value)) @@ -203,6 +205,30 @@ namespace ARMeilleure.Instructions hostAddress = context.Load(OperandType.I64, hostAddressAddr); } + else if (table.Sparse) + { + // Inline table lookup. Only enabled when the sparse function table is enabled with 2 levels. + // Deliberately attempts to avoid branches. + + Operand tableBase = !context.HasPtc ? + Const(table.Base) : + Const(table.Base, Ptc.FunctionTableSymbol); + + hostAddress = tableBase; + + for (int i = 0; i < table.Levels.Length; i++) + { + var level = table.Levels[i]; + int clearBits = 64 - (level.Index + level.Length); + + Operand index = context.ShiftLeft( + context.ShiftRightUI(context.ShiftLeft(guestAddress, Const(clearBits)), Const(clearBits + level.Index)), + Const(3) + ); + + hostAddress = context.Load(OperandType.I64, context.Add(hostAddress, index)); + } + } else { hostAddress = !context.HasPtc ? diff --git a/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs b/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs index 1b3689e3f..35747d7a4 100644 --- a/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs +++ b/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs @@ -8,7 +8,7 @@ namespace ARMeilleure.Signal { public static class NativeSignalHandlerGenerator { - public const int MaxTrackedRanges = 8; + public const int MaxTrackedRanges = 16; private const int StructAddressOffset = 0; private const int StructWriteOffset = 4; diff --git a/src/ARMeilleure/Translation/ArmEmitterContext.cs b/src/ARMeilleure/Translation/ArmEmitterContext.cs index 5d79171a2..82f12bb02 100644 --- a/src/ARMeilleure/Translation/ArmEmitterContext.cs +++ b/src/ARMeilleure/Translation/ArmEmitterContext.cs @@ -46,7 +46,7 @@ namespace ARMeilleure.Translation public IMemoryManager Memory { get; } public EntryTable CountTable { get; } - public AddressTable FunctionTable { get; } + public IAddressTable FunctionTable { get; } public TranslatorStubs Stubs { get; } public ulong EntryAddress { get; } @@ -62,7 +62,7 @@ namespace ARMeilleure.Translation public ArmEmitterContext( IMemoryManager memory, EntryTable countTable, - AddressTable funcTable, + IAddressTable funcTable, TranslatorStubs stubs, ulong entryAddress, bool highCq, diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index 8236150fe..c722ce6be 100644 --- a/src/ARMeilleure/Translation/PTC/Ptc.cs +++ b/src/ARMeilleure/Translation/PTC/Ptc.cs @@ -30,7 +30,7 @@ namespace ARMeilleure.Translation.PTC private const string OuterHeaderMagicString = "PTCohd\0\0"; private const string InnerHeaderMagicString = "PTCihd\0\0"; - private const uint InternalVersion = 6950; //! To be incremented manually for each change to the ARMeilleure project. + private const uint InternalVersion = 6992; //! To be incremented manually for each change to the ARMeilleure project. private const string ActualDir = "0"; private const string BackupDir = "1"; @@ -41,6 +41,7 @@ namespace ARMeilleure.Translation.PTC public static readonly Symbol PageTableSymbol = new(SymbolType.Special, 1); public static readonly Symbol CountTableSymbol = new(SymbolType.Special, 2); public static readonly Symbol DispatchStubSymbol = new(SymbolType.Special, 3); + public static readonly Symbol FunctionTableSymbol = new(SymbolType.Special, 4); private const byte FillingByte = 0x00; private const CompressionLevel SaveCompressionLevel = CompressionLevel.Fastest; @@ -101,7 +102,7 @@ namespace ARMeilleure.Translation.PTC Disable(); } - public void Initialize(string titleIdText, string displayVersion, bool enabled, MemoryManagerType memoryMode) + public void Initialize(string titleIdText, string displayVersion, bool enabled, MemoryManagerType memoryMode, string cacheSelector) { Wait(); @@ -127,6 +128,8 @@ namespace ARMeilleure.Translation.PTC DisplayVersion = !string.IsNullOrEmpty(displayVersion) ? displayVersion : DisplayVersionDefault; _memoryMode = memoryMode; + Logger.Info?.Print(LogClass.Ptc, $"PPTC (v{InternalVersion}) Profile: {DisplayVersion}-{cacheSelector}"); + string workPathActual = Path.Combine(AppDataManager.GamesDirPath, TitleIdText, "cache", "cpu", ActualDir); string workPathBackup = Path.Combine(AppDataManager.GamesDirPath, TitleIdText, "cache", "cpu", BackupDir); @@ -140,8 +143,8 @@ namespace ARMeilleure.Translation.PTC Directory.CreateDirectory(workPathBackup); } - CachePathActual = Path.Combine(workPathActual, DisplayVersion); - CachePathBackup = Path.Combine(workPathBackup, DisplayVersion); + CachePathActual = Path.Combine(workPathActual, DisplayVersion) + "-" + cacheSelector; + CachePathBackup = Path.Combine(workPathBackup, DisplayVersion) + "-" + cacheSelector; PreLoad(); Profiler.PreLoad(); @@ -706,6 +709,10 @@ namespace ARMeilleure.Translation.PTC { imm = translator.Stubs.DispatchStub; } + else if (symbol == FunctionTableSymbol) + { + imm = translator.FunctionTable.Base; + } if (imm == null) { diff --git a/src/ARMeilleure/Translation/Translator.cs b/src/ARMeilleure/Translation/Translator.cs index 24fbd7621..162368782 100644 --- a/src/ARMeilleure/Translation/Translator.cs +++ b/src/ARMeilleure/Translation/Translator.cs @@ -22,33 +22,13 @@ namespace ARMeilleure.Translation { public class Translator { - private static readonly AddressTable.Level[] _levels64Bit = - new AddressTable.Level[] - { - new(31, 17), - new(23, 8), - new(15, 8), - new( 7, 8), - new( 2, 5), - }; - - private static readonly AddressTable.Level[] _levels32Bit = - new AddressTable.Level[] - { - new(31, 17), - new(23, 8), - new(15, 8), - new( 7, 8), - new( 1, 6), - }; - private readonly IJitMemoryAllocator _allocator; private readonly ConcurrentQueue> _oldFuncs; private readonly Ptc _ptc; internal TranslatorCache Functions { get; } - internal AddressTable FunctionTable { get; } + internal IAddressTable FunctionTable { get; } internal EntryTable CountTable { get; } internal TranslatorStubs Stubs { get; } internal TranslatorQueue Queue { get; } @@ -57,7 +37,7 @@ namespace ARMeilleure.Translation private Thread[] _backgroundTranslationThreads; private volatile int _threadCount; - public Translator(IJitMemoryAllocator allocator, IMemoryManager memory, bool for64Bits) + public Translator(IJitMemoryAllocator allocator, IMemoryManager memory, IAddressTable functionTable) { _allocator = allocator; Memory = memory; @@ -72,15 +52,15 @@ namespace ARMeilleure.Translation CountTable = new EntryTable(); Functions = new TranslatorCache(); - FunctionTable = new AddressTable(for64Bits ? _levels64Bit : _levels32Bit); + FunctionTable = functionTable; Stubs = new TranslatorStubs(FunctionTable); FunctionTable.Fill = (ulong)Stubs.SlowDispatchStub; } - public IPtcLoadState LoadDiskCache(string titleIdText, string displayVersion, bool enabled) + public IPtcLoadState LoadDiskCache(string titleIdText, string displayVersion, bool enabled, string cacheSelector) { - _ptc.Initialize(titleIdText, displayVersion, enabled, Memory.Type); + _ptc.Initialize(titleIdText, displayVersion, enabled, Memory.Type, cacheSelector); return _ptc; } diff --git a/src/ARMeilleure/Translation/TranslatorStubs.cs b/src/ARMeilleure/Translation/TranslatorStubs.cs index 364cca13c..bd9aed8d4 100644 --- a/src/ARMeilleure/Translation/TranslatorStubs.cs +++ b/src/ARMeilleure/Translation/TranslatorStubs.cs @@ -19,7 +19,7 @@ namespace ARMeilleure.Translation private bool _disposed; - private readonly AddressTable _functionTable; + private readonly IAddressTable _functionTable; private readonly Lazy _dispatchStub; private readonly Lazy _dispatchLoop; private readonly Lazy _contextWrapper; @@ -86,7 +86,7 @@ namespace ARMeilleure.Translation ///
/// Function table used to store pointers to the functions that the guest code will call /// is null - public TranslatorStubs(AddressTable functionTable) + public TranslatorStubs(IAddressTable functionTable) { ArgumentNullException.ThrowIfNull(functionTable); diff --git a/src/Ryujinx.Cpu/AddressTable.cs b/src/Ryujinx.Cpu/AddressTable.cs new file mode 100644 index 000000000..d87b12ab0 --- /dev/null +++ b/src/Ryujinx.Cpu/AddressTable.cs @@ -0,0 +1,482 @@ +using ARMeilleure.Memory; +using Ryujinx.Common; +using Ryujinx.Cpu.Signal; +using Ryujinx.Memory; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Threading; +using static Ryujinx.Cpu.MemoryEhMeilleure; + +namespace ARMeilleure.Common +{ + /// + /// Represents a table of guest address to a value. + /// + /// Type of the value + public unsafe class AddressTable : IAddressTable where TEntry : unmanaged + { + /// + /// Represents a page of the address table. + /// + private readonly struct AddressTablePage + { + /// + /// True if the allocation belongs to a sparse block, false otherwise. + /// + public readonly bool IsSparse; + + /// + /// Base address for the page. + /// + public readonly IntPtr Address; + + public AddressTablePage(bool isSparse, IntPtr address) + { + IsSparse = isSparse; + Address = address; + } + } + + /// + /// A sparsely mapped block of memory with a signal handler to map pages as they're accessed. + /// + private readonly struct TableSparseBlock : IDisposable + { + public readonly SparseMemoryBlock Block; + private readonly TrackingEventDelegate _trackingEvent; + + public TableSparseBlock(ulong size, Action ensureMapped, PageInitDelegate pageInit) + { + var block = new SparseMemoryBlock(size, pageInit, null); + + _trackingEvent = (ulong address, ulong size, bool write) => + { + ulong pointer = (ulong)block.Block.Pointer + address; + ensureMapped((IntPtr)pointer); + return pointer; + }; + + bool added = NativeSignalHandler.AddTrackedRegion( + (nuint)block.Block.Pointer, + (nuint)(block.Block.Pointer + (IntPtr)block.Block.Size), + Marshal.GetFunctionPointerForDelegate(_trackingEvent)); + + if (!added) + { + throw new InvalidOperationException("Number of allowed tracked regions exceeded."); + } + + Block = block; + } + + public void Dispose() + { + NativeSignalHandler.RemoveTrackedRegion((nuint)Block.Block.Pointer); + + Block.Dispose(); + } + } + + private bool _disposed; + private TEntry** _table; + private readonly List _pages; + private TEntry _fill; + + private readonly MemoryBlock _sparseFill; + private readonly SparseMemoryBlock _fillBottomLevel; + private readonly TEntry* _fillBottomLevelPtr; + + private readonly List _sparseReserved; + private readonly ReaderWriterLockSlim _sparseLock; + + private ulong _sparseBlockSize; + private ulong _sparseReservedOffset; + + public bool Sparse { get; } + + /// + public ulong Mask { get; } + + /// + public AddressTableLevel[] Levels { get; } + + /// + public TEntry Fill + { + get + { + return _fill; + } + set + { + UpdateFill(value); + } + } + + /// + public IntPtr Base + { + get + { + ObjectDisposedException.ThrowIf(_disposed, this); + + lock (_pages) + { + return (IntPtr)GetRootPage(); + } + } + } + + /// + /// Constructs a new instance of the class with the specified list of + /// . + /// + /// Levels for the address table + /// True if the bottom page should be sparsely mapped + /// is null + /// Length of is less than 2 + public AddressTable(AddressTableLevel[] levels, bool sparse) + { + ArgumentNullException.ThrowIfNull(levels); + + _pages = new List(capacity: 16); + + Levels = levels; + Mask = 0; + + foreach (var level in Levels) + { + Mask |= level.Mask; + } + + Sparse = sparse; + + if (sparse) + { + // If the address table is sparse, allocate a fill block + + _sparseFill = new MemoryBlock(268435456ul, MemoryAllocationFlags.Mirrorable); //low Power TC uses size: 65536ul + + ulong bottomLevelSize = (1ul << levels.Last().Length) * (ulong)sizeof(TEntry); + + _fillBottomLevel = new SparseMemoryBlock(bottomLevelSize, null, _sparseFill); + _fillBottomLevelPtr = (TEntry*)_fillBottomLevel.Block.Pointer; + + _sparseReserved = new List(); + _sparseLock = new ReaderWriterLockSlim(); + + _sparseBlockSize = bottomLevelSize; + } + } + + /// + /// Create an instance for an ARM function table. + /// Selects the best table structure for A32/A64, taking into account the selected memory manager type. + /// + /// True if the guest is A64, false otherwise + /// Memory manager type + /// An for ARM function lookup + public static AddressTable CreateForArm(bool for64Bits, MemoryManagerType type) + { + // Assume software memory means that we don't want to use any signal handlers. + bool sparse = type != MemoryManagerType.SoftwareMmu && type != MemoryManagerType.SoftwarePageTable; + + return new AddressTable(AddressTablePresets.GetArmPreset(for64Bits, sparse), sparse); + } + + /// + /// Update the fill value for the bottom level of the table. + /// + /// New fill value + private void UpdateFill(TEntry fillValue) + { + if (_sparseFill != null) + { + Span span = _sparseFill.GetSpan(0, (int)_sparseFill.Size); + MemoryMarshal.Cast(span).Fill(fillValue); + } + + _fill = fillValue; + } + + /// + /// Signal that the given code range exists. + /// + /// + /// + public void SignalCodeRange(ulong address, ulong size) + { + AddressTableLevel bottom = Levels.Last(); + ulong bottomLevelEntries = 1ul << bottom.Length; + + ulong entryIndex = address >> bottom.Index; + ulong entries = size >> bottom.Index; + entries += entryIndex - BitUtils.AlignDown(entryIndex, bottomLevelEntries); + + _sparseBlockSize = Math.Max(_sparseBlockSize, BitUtils.AlignUp(entries, bottomLevelEntries) * (ulong)sizeof(TEntry)); + } + + /// + public bool IsValid(ulong address) + { + return (address & ~Mask) == 0; + } + + /// + public ref TEntry GetValue(ulong address) + { + ObjectDisposedException.ThrowIf(_disposed, this); + + if (!IsValid(address)) + { + throw new ArgumentException($"Address 0x{address:X} is not mapped onto the table.", nameof(address)); + } + + lock (_pages) + { + TEntry* page = GetPage(address); + + int index = Levels[^1].GetValue(address); + + EnsureMapped((IntPtr)(page + index)); + + return ref page[index]; + } + } + + /// + /// Gets the leaf page for the specified guest . + /// + /// Guest address + /// Leaf page for the specified guest + private TEntry* GetPage(ulong address) + { + TEntry** page = GetRootPage(); + + for (int i = 0; i < Levels.Length - 1; i++) + { + ref AddressTableLevel level = ref Levels[i]; + ref TEntry* nextPage = ref page[level.GetValue(address)]; + + if (nextPage == null || nextPage == _fillBottomLevelPtr) + { + ref AddressTableLevel nextLevel = ref Levels[i + 1]; + + if (i == Levels.Length - 2) + { + nextPage = (TEntry*)Allocate(1 << nextLevel.Length, Fill, leaf: true); + } + else + { + nextPage = (TEntry*)Allocate(1 << nextLevel.Length, GetFillValue(i), leaf: false); + } + } + + page = (TEntry**)nextPage; + } + + return (TEntry*)page; + } + + /// + /// Ensure the given pointer is mapped in any overlapping sparse reservations. + /// + /// Pointer to be mapped + private void EnsureMapped(IntPtr ptr) + { + if (Sparse) + { + // Check sparse allocations to see if the pointer is in any of them. + // Ensure the page is committed if there's a match. + + _sparseLock.EnterReadLock(); + + try + { + foreach (TableSparseBlock reserved in _sparseReserved) + { + SparseMemoryBlock sparse = reserved.Block; + + if (ptr >= sparse.Block.Pointer && ptr < sparse.Block.Pointer + (IntPtr)sparse.Block.Size) + { + sparse.EnsureMapped((ulong)(ptr - sparse.Block.Pointer)); + + break; + } + } + } + finally + { + _sparseLock.ExitReadLock(); + } + } + } + + /// + /// Get the fill value for a non-leaf level of the table. + /// + /// Level to get the fill value for + /// The fill value + private IntPtr GetFillValue(int level) + { + if (_fillBottomLevel != null && level == Levels.Length - 2) + { + return (IntPtr)_fillBottomLevelPtr; + } + else + { + return IntPtr.Zero; + } + } + + /// + /// Lazily initialize and get the root page of the . + /// + /// Root page of the + private TEntry** GetRootPage() + { + if (_table == null) + { + if (Levels.Length == 1) + _table = (TEntry**)Allocate(1 << Levels[0].Length, Fill, leaf: true); + else + _table = (TEntry**)Allocate(1 << Levels[0].Length, GetFillValue(0), leaf: false); + } + + return _table; + } + + /// + /// Initialize a leaf page with the fill value. + /// + /// Page to initialize + private void InitLeafPage(Span page) + { + MemoryMarshal.Cast(page).Fill(_fill); + } + + /// + /// Reserve a new sparse block, and add it to the list. + /// + /// The new sparse block that was added + private TableSparseBlock ReserveNewSparseBlock() + { + var block = new TableSparseBlock(_sparseBlockSize, EnsureMapped, InitLeafPage); + + _sparseReserved.Add(block); + _sparseReservedOffset = 0; + + return block; + } + + /// + /// Allocates a block of memory of the specified type and length. + /// + /// Type of elements + /// Number of elements + /// Fill value + /// if leaf; otherwise + /// Allocated block + private IntPtr Allocate(int length, T fill, bool leaf) where T : unmanaged + { + var size = sizeof(T) * length; + + AddressTablePage page; + + if (Sparse && leaf) + { + _sparseLock.EnterWriteLock(); + + SparseMemoryBlock block; + + if (_sparseReserved.Count == 0) + { + block = ReserveNewSparseBlock().Block; + } + else + { + block = _sparseReserved.Last().Block; + + if (_sparseReservedOffset == block.Block.Size) + { + block = ReserveNewSparseBlock().Block; + } + } + + page = new AddressTablePage(true, block.Block.Pointer + (IntPtr)_sparseReservedOffset); + + _sparseReservedOffset += (ulong)size; + + _sparseLock.ExitWriteLock(); + } + else + { + var address = (IntPtr)NativeAllocator.Instance.Allocate((uint)size); + page = new AddressTablePage(false, address); + + var span = new Span((void*)page.Address, length); + span.Fill(fill); + } + + _pages.Add(page); + + //TranslatorEventSource.Log.AddressTableAllocated(size, leaf); + + return page.Address; + } + + /// + /// Releases all resources used by the instance. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Releases all unmanaged and optionally managed resources used by the + /// instance. + /// + /// to dispose managed resources also; otherwise just unmanaged resouces + protected virtual void Dispose(bool disposing) + { + if (!_disposed) + { + foreach (var page in _pages) + { + if (!page.IsSparse) + { + Marshal.FreeHGlobal(page.Address); + } + } + + if (Sparse) + { + foreach (TableSparseBlock block in _sparseReserved) + { + block.Dispose(); + } + + _sparseReserved.Clear(); + + _fillBottomLevel.Dispose(); + _sparseFill.Dispose(); + _sparseLock.Dispose(); + } + + _disposed = true; + } + } + + /// + /// Frees resources used by the instance. + /// + ~AddressTable() + { + Dispose(false); + } + } +} diff --git a/src/Ryujinx.Cpu/AppleHv/HvCpuContext.cs b/src/Ryujinx.Cpu/AppleHv/HvCpuContext.cs index 99e4c0479..784949441 100644 --- a/src/Ryujinx.Cpu/AppleHv/HvCpuContext.cs +++ b/src/Ryujinx.Cpu/AppleHv/HvCpuContext.cs @@ -32,7 +32,7 @@ namespace Ryujinx.Cpu.AppleHv { } - public IDiskCacheLoadState LoadDiskCache(string titleIdText, string displayVersion, bool enabled) + public IDiskCacheLoadState LoadDiskCache(string titleIdText, string displayVersion, bool enabled, string cacheSelector) { return new DummyDiskCacheLoadState(); } diff --git a/src/Ryujinx.Cpu/ICpuContext.cs b/src/Ryujinx.Cpu/ICpuContext.cs index edcebdfc4..1fb3b674d 100644 --- a/src/Ryujinx.Cpu/ICpuContext.cs +++ b/src/Ryujinx.Cpu/ICpuContext.cs @@ -48,7 +48,7 @@ namespace Ryujinx.Cpu /// Version of the application /// True if the cache should be loaded from disk if it exists, false otherwise /// Disk cache load progress reporter and manager - IDiskCacheLoadState LoadDiskCache(string titleIdText, string displayVersion, bool enabled); + IDiskCacheLoadState LoadDiskCache(string titleIdText, string displayVersion, bool enabled, string cacheSelector); /// /// Indicates that code has been loaded into guest memory, and that it might be executed in the future. diff --git a/src/Ryujinx.Cpu/Jit/JitCpuContext.cs b/src/Ryujinx.Cpu/Jit/JitCpuContext.cs index 9893c59b2..0793f382d 100644 --- a/src/Ryujinx.Cpu/Jit/JitCpuContext.cs +++ b/src/Ryujinx.Cpu/Jit/JitCpuContext.cs @@ -1,3 +1,4 @@ +using ARMeilleure.Common; using ARMeilleure.Memory; using ARMeilleure.Translation; using Ryujinx.Cpu.Signal; @@ -9,11 +10,13 @@ namespace Ryujinx.Cpu.Jit { private readonly ITickSource _tickSource; private readonly Translator _translator; + private readonly AddressTable _functionTable; public JitCpuContext(ITickSource tickSource, IMemoryManager memory, bool for64Bit) { _tickSource = tickSource; - _translator = new Translator(new JitMemoryAllocator(forJit: true), memory, for64Bit); + _functionTable = AddressTable.CreateForArm(for64Bit, memory.Type); + _translator = new Translator(new JitMemoryAllocator(forJit: true), memory, _functionTable); if (memory.Type.IsHostMappedOrTracked()) { @@ -47,14 +50,15 @@ namespace Ryujinx.Cpu.Jit } /// - public IDiskCacheLoadState LoadDiskCache(string titleIdText, string displayVersion, bool enabled) + public IDiskCacheLoadState LoadDiskCache(string titleIdText, string displayVersion, bool enabled, string cacheSelector) { - return new JitDiskCacheLoadState(_translator.LoadDiskCache(titleIdText, displayVersion, enabled)); + return new JitDiskCacheLoadState(_translator.LoadDiskCache(titleIdText, displayVersion, enabled, cacheSelector)); } /// public void PrepareCodeRange(ulong address, ulong size) { + _functionTable.SignalCodeRange(address, size); _translator.PrepareCodeRange(address, size); } diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs index 7f5e4835c..48bdbb573 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs @@ -140,6 +140,10 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 bool isTail = false) { int tempRegister; + int tempGuestAddress = -1; + + bool inlineLookup = guestAddress.Kind != OperandKind.Constant && + funcTable is { Sparse: true }; if (guestAddress.Kind == OperandKind.Constant) { @@ -153,9 +157,16 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 else { asm.StrRiUn(guestAddress, Register(regAlloc.FixedContextRegister), NativeContextOffsets.DispatchAddressOffset); + + if (inlineLookup && guestAddress.Value == 0) + { + // X0 will be overwritten. Move the address to a temp register. + tempGuestAddress = regAlloc.AllocateTempGprRegister(); + asm.Mov(Register(tempGuestAddress), guestAddress); + } } - tempRegister = regAlloc.FixedContextRegister == 1 ? 2 : 1; + tempRegister = NextFreeRegister(1, tempGuestAddress); if (!isTail) { @@ -176,6 +187,40 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 asm.Mov(rn, funcPtrLoc & ~0xfffUL); asm.LdrRiUn(rn, rn, (int)(funcPtrLoc & 0xfffUL)); } + else if (inlineLookup) + { + // Inline table lookup. Only enabled when the sparse function table is enabled with 2 levels. + + Operand indexReg = Register(NextFreeRegister(tempRegister + 1, tempGuestAddress)); + + if (tempGuestAddress != -1) + { + guestAddress = Register(tempGuestAddress); + } + + ulong tableBase = (ulong)funcTable.Base; + + // Index into the table. + asm.Mov(rn, tableBase); + + for (int i = 0; i < funcTable.Levels.Length; i++) + { + var level = funcTable.Levels[i]; + asm.Ubfx(indexReg, guestAddress, level.Index, level.Length); + asm.Lsl(indexReg, indexReg, Const(3)); + + // Index into the page. + asm.Add(rn, rn, indexReg); + + // Load the page address. + asm.LdrRiUn(rn, rn, 0); + } + + if (tempGuestAddress != -1) + { + regAlloc.FreeTempGprRegister(tempGuestAddress); + } + } else { asm.Mov(rn, (ulong)funcPtr); @@ -252,5 +297,20 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 { return new Operand(register, RegisterType.Integer, type); } + + private static Operand Const(long value, OperandType type = OperandType.I64) + { + return new Operand(type, (ulong)value); + } + + private static int NextFreeRegister(int start, int avoid) + { + if (start == avoid) + { + start++; + } + + return start; + } } } diff --git a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs index 1eeeb746e..f534e8b6e 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs @@ -305,6 +305,10 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 bool isTail = false) { int tempRegister; + int tempGuestAddress = -1; + + bool inlineLookup = guestAddress.Kind != OperandKind.Constant && + funcTable is { Sparse: true }; if (guestAddress.Kind == OperandKind.Constant) { @@ -318,9 +322,16 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 else { asm.StrRiUn(guestAddress, Register(regAlloc.FixedContextRegister), NativeContextOffsets.DispatchAddressOffset); + + if (inlineLookup && guestAddress.Value == 0) + { + // X0 will be overwritten. Move the address to a temp register. + tempGuestAddress = regAlloc.AllocateTempGprRegister(); + asm.Mov(Register(tempGuestAddress), guestAddress); + } } - tempRegister = regAlloc.FixedContextRegister == 1 ? 2 : 1; + tempRegister = NextFreeRegister(1, tempGuestAddress); if (!isTail) { @@ -341,6 +352,40 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 asm.Mov(rn, funcPtrLoc & ~0xfffUL); asm.LdrRiUn(rn, rn, (int)(funcPtrLoc & 0xfffUL)); } + else if (inlineLookup) + { + // Inline table lookup. Only enabled when the sparse function table is enabled with 2 levels. + + Operand indexReg = Register(NextFreeRegister(tempRegister + 1, tempGuestAddress)); + + if (tempGuestAddress != -1) + { + guestAddress = Register(tempGuestAddress); + } + + ulong tableBase = (ulong)funcTable.Base; + + // Index into the table. + asm.Mov(rn, tableBase); + + for (int i = 0; i < funcTable.Levels.Length; i++) + { + var level = funcTable.Levels[i]; + asm.Ubfx(indexReg, guestAddress, level.Index, level.Length); + asm.Lsl(indexReg, indexReg, Const(3)); + + // Index into the page. + asm.Add(rn, rn, indexReg); + + // Load the page address. + asm.LdrRiUn(rn, rn, 0); + } + + if (tempGuestAddress != -1) + { + regAlloc.FreeTempGprRegister(tempGuestAddress); + } + } else { asm.Mov(rn, (ulong)funcPtr); @@ -613,5 +658,20 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 { return new Operand(register, RegisterType.Integer, type); } + + private static Operand Const(long value, OperandType type = OperandType.I64) + { + return new Operand(type, (ulong)value); + } + + private static int NextFreeRegister(int start, int avoid) + { + if (start == avoid) + { + start++; + } + + return start; + } } } diff --git a/src/Ryujinx.Cpu/LightningJit/LightningJitCpuContext.cs b/src/Ryujinx.Cpu/LightningJit/LightningJitCpuContext.cs index b63636e39..0f47ffb15 100644 --- a/src/Ryujinx.Cpu/LightningJit/LightningJitCpuContext.cs +++ b/src/Ryujinx.Cpu/LightningJit/LightningJitCpuContext.cs @@ -1,3 +1,4 @@ +using ARMeilleure.Common; using ARMeilleure.Memory; using Ryujinx.Cpu.Jit; using Ryujinx.Cpu.LightningJit.State; @@ -8,11 +9,16 @@ namespace Ryujinx.Cpu.LightningJit { private readonly ITickSource _tickSource; private readonly Translator _translator; + private readonly AddressTable _functionTable; public LightningJitCpuContext(ITickSource tickSource, IMemoryManager memory, bool for64Bit) { _tickSource = tickSource; - _translator = new Translator(memory, for64Bit); + + _functionTable = AddressTable.CreateForArm(for64Bit, memory.Type); + + _translator = new Translator(memory, _functionTable); + memory.UnmapEvent += UnmapHandler; } @@ -40,7 +46,7 @@ namespace Ryujinx.Cpu.LightningJit } /// - public IDiskCacheLoadState LoadDiskCache(string titleIdText, string displayVersion, bool enabled) + public IDiskCacheLoadState LoadDiskCache(string titleIdText, string displayVersion, bool enabled, string cacheSelector) { return new DummyDiskCacheLoadState(); } @@ -48,6 +54,7 @@ namespace Ryujinx.Cpu.LightningJit /// public void PrepareCodeRange(ulong address, ulong size) { + _functionTable.SignalCodeRange(address, size); } public void Dispose() diff --git a/src/Ryujinx.Cpu/LightningJit/Translator.cs b/src/Ryujinx.Cpu/LightningJit/Translator.cs index b4710e34e..4c4011f11 100644 --- a/src/Ryujinx.Cpu/LightningJit/Translator.cs +++ b/src/Ryujinx.Cpu/LightningJit/Translator.cs @@ -19,25 +19,6 @@ namespace Ryujinx.Cpu.LightningJit // Should be enabled on platforms that enforce W^X. private static bool IsNoWxPlatform => false; - private static readonly AddressTable.Level[] _levels64Bit = - new AddressTable.Level[] - { - new(31, 17), - new(23, 8), - new(15, 8), - new( 7, 8), - new( 2, 5), - }; - - private static readonly AddressTable.Level[] _levels32Bit = - new AddressTable.Level[] - { - new(23, 9), - new(15, 8), - new( 7, 8), - new( 1, 6), - }; - private readonly ConcurrentQueue> _oldFuncs; private readonly NoWxCache _noWxCache; private bool _disposed; @@ -47,7 +28,7 @@ namespace Ryujinx.Cpu.LightningJit internal TranslatorStubs Stubs { get; } internal IMemoryManager Memory { get; } - public Translator(IMemoryManager memory, bool for64Bits) + public Translator(IMemoryManager memory, AddressTable functionTable) { Memory = memory; @@ -63,7 +44,7 @@ namespace Ryujinx.Cpu.LightningJit } Functions = new TranslatorCache(); - FunctionTable = new AddressTable(for64Bits ? _levels64Bit : _levels32Bit); + FunctionTable = functionTable; Stubs = new TranslatorStubs(FunctionTable, _noWxCache); FunctionTable.Fill = (ulong)Stubs.SlowDispatchStub; diff --git a/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs b/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs index e88414d5e..c5231e506 100644 --- a/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs +++ b/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs @@ -23,7 +23,7 @@ namespace Ryujinx.Cpu.LightningJit private bool _disposed; - private readonly AddressTable _functionTable; + private readonly IAddressTable _functionTable; private readonly NoWxCache _noWxCache; private readonly GetFunctionAddressDelegate _getFunctionAddressRef; private readonly nint _getFunctionAddress; @@ -79,7 +79,7 @@ namespace Ryujinx.Cpu.LightningJit /// Function table used to store pointers to the functions that the guest code will call /// Cache used on platforms that enforce W^X, otherwise should be null /// is null - public TranslatorStubs(AddressTable functionTable, NoWxCache noWxCache) + public TranslatorStubs(IAddressTable functionTable, NoWxCache noWxCache) { ArgumentNullException.ThrowIfNull(functionTable); diff --git a/src/Ryujinx.HLE/HOS/ArmProcessContext.cs b/src/Ryujinx.HLE/HOS/ArmProcessContext.cs index fde489ab7..09a721644 100644 --- a/src/Ryujinx.HLE/HOS/ArmProcessContext.cs +++ b/src/Ryujinx.HLE/HOS/ArmProcessContext.cs @@ -13,7 +13,8 @@ namespace Ryujinx.HLE.HOS string displayVersion, bool diskCacheEnabled, ulong codeAddress, - ulong codeSize); + ulong codeSize, + string cacheSelector); } class ArmProcessContext : IArmProcessContext where T : class, IVirtualMemoryManagerTracked, IMemoryManager @@ -67,10 +68,11 @@ namespace Ryujinx.HLE.HOS string displayVersion, bool diskCacheEnabled, ulong codeAddress, - ulong codeSize) + ulong codeSize, + string cacheSelector) { _cpuContext.PrepareCodeRange(codeAddress, codeSize); - return _cpuContext.LoadDiskCache(titleIdText, displayVersion, diskCacheEnabled); + return _cpuContext.LoadDiskCache(titleIdText, displayVersion, diskCacheEnabled, cacheSelector); } public void InvalidateCacheRegion(ulong address, ulong size) diff --git a/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs b/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs index 6646826cb..14775fb1d 100644 --- a/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs +++ b/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs @@ -114,7 +114,7 @@ namespace Ryujinx.HLE.HOS } } - DiskCacheLoadState = processContext.Initialize(_titleIdText, _displayVersion, _diskCacheEnabled, _codeAddress, _codeSize); + DiskCacheLoadState = processContext.Initialize(_titleIdText, _displayVersion, _diskCacheEnabled, _codeAddress, _codeSize, "default"); //Ready for exefs profiles return processContext; } diff --git a/src/Ryujinx.Memory/SparseMemoryBlock.cs b/src/Ryujinx.Memory/SparseMemoryBlock.cs new file mode 100644 index 000000000..523685de1 --- /dev/null +++ b/src/Ryujinx.Memory/SparseMemoryBlock.cs @@ -0,0 +1,125 @@ +using Ryujinx.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; + +namespace Ryujinx.Memory +{ + public delegate void PageInitDelegate(Span page); + + public class SparseMemoryBlock : IDisposable + { + private const ulong MapGranularity = 1UL << 17; + + private readonly PageInitDelegate _pageInit; + + private readonly object _lock = new object(); + private readonly ulong _pageSize; + private readonly MemoryBlock _reservedBlock; + private readonly List _mappedBlocks; + private ulong _mappedBlockUsage; + + private readonly ulong[] _mappedPageBitmap; + + public MemoryBlock Block => _reservedBlock; + + public SparseMemoryBlock(ulong size, PageInitDelegate pageInit, MemoryBlock fill) + { + _pageSize = MemoryBlock.GetPageSize(); + _reservedBlock = new MemoryBlock(size, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible); + _mappedBlocks = new List(); + _pageInit = pageInit; + + int pages = (int)BitUtils.DivRoundUp(size, _pageSize); + int bitmapEntries = BitUtils.DivRoundUp(pages, 64); + _mappedPageBitmap = new ulong[bitmapEntries]; + + if (fill != null) + { + // Fill the block with mappings from the fill block. + + if (fill.Size % _pageSize != 0) + { + throw new ArgumentException("Fill memory block should be page aligned.", nameof(fill)); + } + + int repeats = (int)BitUtils.DivRoundUp(size, fill.Size); + + ulong offset = 0; + for (int i = 0; i < repeats; i++) + { + _reservedBlock.MapView(fill, 0, offset, Math.Min(fill.Size, size - offset)); + offset += fill.Size; + } + } + + // If a fill block isn't provided, the pages that aren't EnsureMapped are unmapped. + // The caller can rely on signal handler to fill empty pages instead. + } + + private void MapPage(ulong pageOffset) + { + // Take a page from the latest mapped block. + MemoryBlock block = _mappedBlocks.LastOrDefault(); + + if (block == null || _mappedBlockUsage == MapGranularity) + { + // Need to map some more memory. + + block = new MemoryBlock(MapGranularity, MemoryAllocationFlags.Mirrorable); + + _mappedBlocks.Add(block); + + _mappedBlockUsage = 0; + } + + _pageInit(block.GetSpan(_mappedBlockUsage, (int)_pageSize)); + _reservedBlock.MapView(block, _mappedBlockUsage, pageOffset, _pageSize); + + _mappedBlockUsage += _pageSize; + } + + public void EnsureMapped(ulong offset) + { + int pageIndex = (int)(offset / _pageSize); + int bitmapIndex = pageIndex >> 6; + + ref ulong entry = ref _mappedPageBitmap[bitmapIndex]; + ulong bit = 1UL << (pageIndex & 63); + + if ((Volatile.Read(ref entry) & bit) == 0) + { + // Not mapped. + + lock (_lock) + { + // Check the bit while locked to make sure that this only happens once. + + ulong lockedEntry = Volatile.Read(ref entry); + + if ((lockedEntry & bit) == 0) + { + MapPage(offset & ~(_pageSize - 1)); + + lockedEntry |= bit; + + Interlocked.Exchange(ref entry, lockedEntry); + } + } + } + } + + public void Dispose() + { + _reservedBlock.Dispose(); + + foreach (MemoryBlock block in _mappedBlocks) + { + block.Dispose(); + } + + GC.SuppressFinalize(this); + } + } +} diff --git a/src/Ryujinx.Tests/Cpu/CpuContext.cs b/src/Ryujinx.Tests/Cpu/CpuContext.cs index 96b4965a2..81e8ba8c9 100644 --- a/src/Ryujinx.Tests/Cpu/CpuContext.cs +++ b/src/Ryujinx.Tests/Cpu/CpuContext.cs @@ -1,3 +1,4 @@ +using ARMeilleure.Common; using ARMeilleure.Memory; using ARMeilleure.State; using ARMeilleure.Translation; @@ -12,7 +13,7 @@ namespace Ryujinx.Tests.Cpu public CpuContext(IMemoryManager memory, bool for64Bit) { - _translator = new Translator(new JitMemoryAllocator(), memory, for64Bit); + _translator = new Translator(new JitMemoryAllocator(), memory, AddressTable.CreateForArm(for64Bit, memory.Type)); memory.UnmapEvent += UnmapHandler; } diff --git a/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs b/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs index 2a4775a31..43c84c193 100644 --- a/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs +++ b/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs @@ -1,3 +1,5 @@ +using ARMeilleure.Common; +using ARMeilleure.Memory; using ARMeilleure.Translation; using NUnit.Framework; using Ryujinx.Cpu.Jit; @@ -17,7 +19,10 @@ namespace Ryujinx.Tests.Cpu private static void EnsureTranslator() { // Create a translator, as one is needed to register the signal handler or emit methods. - _translator ??= new Translator(new JitMemoryAllocator(), new MockMemoryManager(), true); + _translator ??= new Translator( + new JitMemoryAllocator(), + new MockMemoryManager(), + AddressTable.CreateForArm(true, MemoryManagerType.SoftwarePageTable)); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] diff --git a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs index 6d2ad8fb0..3e5b47423 100644 --- a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs +++ b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs @@ -1,3 +1,5 @@ +using ARMeilleure.Common; +using ARMeilleure.Memory; using ARMeilleure.Signal; using ARMeilleure.Translation; using NUnit.Framework; @@ -53,7 +55,10 @@ namespace Ryujinx.Tests.Memory private static void EnsureTranslator() { // Create a translator, as one is needed to register the signal handler or emit methods. - _translator ??= new Translator(new JitMemoryAllocator(), new MockMemoryManager(), true); + _translator ??= new Translator( + new JitMemoryAllocator(), + new MockMemoryManager(), + AddressTable.CreateForArm(true, MemoryManagerType.SoftwarePageTable)); } [Test] -- 2.47.1 From 3b6731a3519f408a361b7355f368583fbcc76107 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 22 Nov 2024 17:51:42 -0600 Subject: [PATCH 078/722] infra: Undo packing native libraries into executable. --- .github/workflows/canary.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index a24436de3..df28e4784 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -103,8 +103,8 @@ jobs: - name: Publish run: | - dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_ava/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained -p:IncludeNativeLibrariesForSelfExtract=true - dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained -p:IncludeNativeLibrariesForSelfExtract=true + dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_ava/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained + dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained - name: Packing Windows builds if: matrix.platform.os == 'windows-latest' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ec02976a1..fbf715756 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -102,8 +102,8 @@ jobs: - name: Publish run: | - dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained -p:IncludeNativeLibrariesForSelfExtract=true - dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained -p:IncludeNativeLibrariesForSelfExtract=true + dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained + dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained - name: Packing Windows builds if: matrix.platform.os == 'windows-latest' -- 2.47.1 From e8d3ad4d8b0d8ad195db32a04c97b7a253f98c1c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 23 Nov 2024 13:10:53 -0600 Subject: [PATCH 079/722] UI: RPC: TSUKIHIME -A piece of blue glass moon- asset image --- src/Ryujinx.UI.Common/DiscordIntegrationModule.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs index a26f6a7b2..295a663b2 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs @@ -264,6 +264,7 @@ namespace Ryujinx.UI.Common "0100800015926000", // Suika Game "0100e46006708000", // Terraria "01000a10041ea000", // The Elder Scrolls V: Skyrim + "010057a01e4d4000", // TSUKIHIME -A piece of blue glass moon- "010080b00ad66000", // Undertale ]; } -- 2.47.1 From a81212bbf12418c0862384104f191b396732b2c7 Mon Sep 17 00:00:00 2001 From: Daniel Zauner Date: Sun, 24 Nov 2024 16:49:44 +0100 Subject: [PATCH 080/722] Fix window decorations being too wide (#309) --- src/Ryujinx/Assets/Styles/Styles.xaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Assets/Styles/Styles.xaml b/src/Ryujinx/Assets/Styles/Styles.xaml index 05212a7dd..878b5e7f1 100644 --- a/src/Ryujinx/Assets/Styles/Styles.xaml +++ b/src/Ryujinx/Assets/Styles/Styles.xaml @@ -1,7 +1,8 @@  + xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" + xmlns:windowing="clr-namespace:FluentAvalonia.UI.Windowing;assembly=FluentAvalonia"> @@ -231,7 +232,7 @@ - -- 2.47.1 From 7e16fccfc108c92aef1015fb6b37d956f9526947 Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Sun, 24 Nov 2024 18:33:53 +0100 Subject: [PATCH 081/722] UI: Fix icons getting cutoff in the About window (#310) Before: ![image](https://github.com/user-attachments/assets/c8d6b7d5-487b-4ab9-83e3-9489eaa0a076) After: ![image](https://github.com/user-attachments/assets/18ea6360-f6ee-48e6-9a0a-cd8d88a0cf51) --- src/Ryujinx/UI/Windows/AboutWindow.axaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/Windows/AboutWindow.axaml b/src/Ryujinx/UI/Windows/AboutWindow.axaml index 6d4a7b7e3..1d0e36ae9 100644 --- a/src/Ryujinx/UI/Windows/AboutWindow.axaml +++ b/src/Ryujinx/UI/Windows/AboutWindow.axaml @@ -6,8 +6,10 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewModel="clr-namespace:Ryujinx.Ava.UI.ViewModels" - Width="550" - Height="260" + MinWidth="550" + MinHeight="260" + MaxWidth="600" + MaxHeight="500" Margin="0,-12,0,0" d:DesignHeight="260" d:DesignWidth="550" -- 2.47.1 From 2e6794e69b33405990aff15e7dbe5a0f589666bf Mon Sep 17 00:00:00 2001 From: Keaton Date: Mon, 25 Nov 2024 13:39:09 -0600 Subject: [PATCH 082/722] Add custom refresh rate mode to VSync option (#238) Rebased @jcm93's refreshinterval branch: https://github.com/jcm93/Ryujinx/tree/refreshinterval The option is placed under System/Hacks. Disabled, it's the default Ryujinx behavior. Enabled, the behavior is shown in the attached screenshots. If a framerate is too high or low, you can adjust the value where you normally toggle VSync on and off. It will also cycle through the default on/off toggles. Also, in order to reduce clutter, I made an adjustment to remove the target FPS and only show the percentage. --------- Co-authored-by: jcm <6864788+jcm93@users.noreply.github.com> --- .../Configuration/Hid/KeyboardHotkeys.cs | 4 +- src/Ryujinx.Common/Configuration/VSyncMode.cs | 9 ++ src/Ryujinx.Graphics.GAL/IWindow.cs | 2 +- .../Multithreading/ThreadedWindow.cs | 2 +- src/Ryujinx.Graphics.GAL/VSyncMode.cs | 9 ++ src/Ryujinx.Graphics.OpenGL/Window.cs | 2 +- src/Ryujinx.Graphics.Vulkan/Window.cs | 13 +- src/Ryujinx.Graphics.Vulkan/WindowBase.cs | 2 +- src/Ryujinx.HLE/HLEConfiguration.cs | 18 ++- .../Services/SurfaceFlinger/SurfaceFlinger.cs | 20 ++- src/Ryujinx.HLE/Switch.cs | 38 +++++- src/Ryujinx.Headless.SDL2/Options.cs | 7 +- src/Ryujinx.Headless.SDL2/Program.cs | 5 +- .../StatusUpdatedEventArgs.cs | 4 +- src/Ryujinx.Headless.SDL2/WindowBase.cs | 2 +- .../Configuration/ConfigurationFileFormat.cs | 20 ++- .../ConfigurationState.Migration.cs | 45 +++++-- .../Configuration/ConfigurationState.Model.cs | 24 +++- .../Configuration/ConfigurationState.cs | 10 +- src/Ryujinx/AppHost.cs | 105 +++++++++++++-- src/Ryujinx/Assets/Locales/en_US.json | 20 ++- src/Ryujinx/Assets/Styles/Themes.xaml | 5 +- src/Ryujinx/Common/KeyboardHotkeyState.cs | 4 +- src/Ryujinx/UI/Models/Input/HotkeyConfig.cs | 38 +++++- src/Ryujinx/UI/Models/SaveModel.cs | 2 +- .../UI/Models/StatusUpdatedEventArgs.cs | 7 +- .../UI/ViewModels/MainWindowViewModel.cs | 123 ++++++++++++++++-- .../UI/ViewModels/SettingsViewModel.cs | 82 +++++++++++- .../UI/Views/Main/MainStatusBarView.axaml | 54 +++++++- .../UI/Views/Main/MainStatusBarView.axaml.cs | 7 +- .../Views/Settings/SettingsHotkeysView.axaml | 20 ++- .../Settings/SettingsHotkeysView.axaml.cs | 10 +- .../Views/Settings/SettingsSystemView.axaml | 71 +++++++++- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 4 +- 34 files changed, 678 insertions(+), 110 deletions(-) create mode 100644 src/Ryujinx.Common/Configuration/VSyncMode.cs create mode 100644 src/Ryujinx.Graphics.GAL/VSyncMode.cs diff --git a/src/Ryujinx.Common/Configuration/Hid/KeyboardHotkeys.cs b/src/Ryujinx.Common/Configuration/Hid/KeyboardHotkeys.cs index 0cb49ca8c..6b8152b9d 100644 --- a/src/Ryujinx.Common/Configuration/Hid/KeyboardHotkeys.cs +++ b/src/Ryujinx.Common/Configuration/Hid/KeyboardHotkeys.cs @@ -2,7 +2,7 @@ namespace Ryujinx.Common.Configuration.Hid { public class KeyboardHotkeys { - public Key ToggleVsync { get; set; } + public Key ToggleVSyncMode { get; set; } public Key Screenshot { get; set; } public Key ShowUI { get; set; } public Key Pause { get; set; } @@ -11,5 +11,7 @@ namespace Ryujinx.Common.Configuration.Hid public Key ResScaleDown { get; set; } public Key VolumeUp { get; set; } public Key VolumeDown { get; set; } + public Key CustomVSyncIntervalIncrement { get; set; } + public Key CustomVSyncIntervalDecrement { get; set; } } } diff --git a/src/Ryujinx.Common/Configuration/VSyncMode.cs b/src/Ryujinx.Common/Configuration/VSyncMode.cs new file mode 100644 index 000000000..ca93b5e1c --- /dev/null +++ b/src/Ryujinx.Common/Configuration/VSyncMode.cs @@ -0,0 +1,9 @@ +namespace Ryujinx.Common.Configuration +{ + public enum VSyncMode + { + Switch, + Unbounded, + Custom + } +} diff --git a/src/Ryujinx.Graphics.GAL/IWindow.cs b/src/Ryujinx.Graphics.GAL/IWindow.cs index 83418e709..12686cb28 100644 --- a/src/Ryujinx.Graphics.GAL/IWindow.cs +++ b/src/Ryujinx.Graphics.GAL/IWindow.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Graphics.GAL void SetSize(int width, int height); - void ChangeVSyncMode(bool vsyncEnabled); + void ChangeVSyncMode(VSyncMode vSyncMode); void SetAntiAliasing(AntiAliasing antialiasing); void SetScalingFilter(ScalingFilter type); diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs index acda37ef3..102fdb1bb 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs @@ -31,7 +31,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading _impl.Window.SetSize(width, height); } - public void ChangeVSyncMode(bool vsyncEnabled) { } + public void ChangeVSyncMode(VSyncMode vSyncMode) { } public void SetAntiAliasing(AntiAliasing effect) { } diff --git a/src/Ryujinx.Graphics.GAL/VSyncMode.cs b/src/Ryujinx.Graphics.GAL/VSyncMode.cs new file mode 100644 index 000000000..c5794b8f7 --- /dev/null +++ b/src/Ryujinx.Graphics.GAL/VSyncMode.cs @@ -0,0 +1,9 @@ +namespace Ryujinx.Graphics.GAL +{ + public enum VSyncMode + { + Switch, + Unbounded, + Custom + } +} diff --git a/src/Ryujinx.Graphics.OpenGL/Window.cs b/src/Ryujinx.Graphics.OpenGL/Window.cs index 285ab725e..1dc8a51f6 100644 --- a/src/Ryujinx.Graphics.OpenGL/Window.cs +++ b/src/Ryujinx.Graphics.OpenGL/Window.cs @@ -54,7 +54,7 @@ namespace Ryujinx.Graphics.OpenGL GL.PixelStore(PixelStoreParameter.UnpackAlignment, 4); } - public void ChangeVSyncMode(bool vsyncEnabled) { } + public void ChangeVSyncMode(VSyncMode vSyncMode) { } public void SetSize(int width, int height) { diff --git a/src/Ryujinx.Graphics.Vulkan/Window.cs b/src/Ryujinx.Graphics.Vulkan/Window.cs index 3dc6d4e19..3e8d3b375 100644 --- a/src/Ryujinx.Graphics.Vulkan/Window.cs +++ b/src/Ryujinx.Graphics.Vulkan/Window.cs @@ -29,7 +29,7 @@ namespace Ryujinx.Graphics.Vulkan private int _width; private int _height; - private bool _vsyncEnabled; + private VSyncMode _vSyncMode; private bool _swapchainIsDirty; private VkFormat _format; private AntiAliasing _currentAntiAliasing; @@ -139,7 +139,7 @@ namespace Ryujinx.Graphics.Vulkan ImageArrayLayers = 1, PreTransform = capabilities.CurrentTransform, CompositeAlpha = ChooseCompositeAlpha(capabilities.SupportedCompositeAlpha), - PresentMode = ChooseSwapPresentMode(presentModes, _vsyncEnabled), + PresentMode = ChooseSwapPresentMode(presentModes, _vSyncMode), Clipped = true, }; @@ -279,9 +279,9 @@ namespace Ryujinx.Graphics.Vulkan } } - private static PresentModeKHR ChooseSwapPresentMode(PresentModeKHR[] availablePresentModes, bool vsyncEnabled) + private static PresentModeKHR ChooseSwapPresentMode(PresentModeKHR[] availablePresentModes, VSyncMode vSyncMode) { - if (!vsyncEnabled && availablePresentModes.Contains(PresentModeKHR.ImmediateKhr)) + if (vSyncMode == VSyncMode.Unbounded && availablePresentModes.Contains(PresentModeKHR.ImmediateKhr)) { return PresentModeKHR.ImmediateKhr; } @@ -634,9 +634,10 @@ namespace Ryujinx.Graphics.Vulkan _swapchainIsDirty = true; } - public override void ChangeVSyncMode(bool vsyncEnabled) + public override void ChangeVSyncMode(VSyncMode vSyncMode) { - _vsyncEnabled = vsyncEnabled; + _vSyncMode = vSyncMode; + //present mode may change, so mark the swapchain for recreation _swapchainIsDirty = true; } diff --git a/src/Ryujinx.Graphics.Vulkan/WindowBase.cs b/src/Ryujinx.Graphics.Vulkan/WindowBase.cs index edb9c688c..ca06ec0b8 100644 --- a/src/Ryujinx.Graphics.Vulkan/WindowBase.cs +++ b/src/Ryujinx.Graphics.Vulkan/WindowBase.cs @@ -10,7 +10,7 @@ namespace Ryujinx.Graphics.Vulkan public abstract void Dispose(); public abstract void Present(ITexture texture, ImageCrop crop, Action swapBuffersCallback); public abstract void SetSize(int width, int height); - public abstract void ChangeVSyncMode(bool vsyncEnabled); + public abstract void ChangeVSyncMode(VSyncMode vSyncMode); public abstract void SetAntiAliasing(AntiAliasing effect); public abstract void SetScalingFilter(ScalingFilter scalerType); public abstract void SetScalingFilterLevel(float scale); diff --git a/src/Ryujinx.HLE/HLEConfiguration.cs b/src/Ryujinx.HLE/HLEConfiguration.cs index 70fcf278d..f75ead588 100644 --- a/src/Ryujinx.HLE/HLEConfiguration.cs +++ b/src/Ryujinx.HLE/HLEConfiguration.cs @@ -9,6 +9,7 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.UI; using System; +using VSyncMode = Ryujinx.Common.Configuration.VSyncMode; namespace Ryujinx.HLE { @@ -84,9 +85,14 @@ namespace Ryujinx.HLE internal readonly RegionCode Region; /// - /// Control the initial state of the vertical sync in the SurfaceFlinger service. + /// Control the initial state of the present interval in the SurfaceFlinger service (previously Vsync). /// - internal readonly bool EnableVsync; + internal readonly VSyncMode VSyncMode; + + /// + /// Control the custom VSync interval, if enabled and active. + /// + internal readonly int CustomVSyncInterval; /// /// Control the initial state of the docked mode. @@ -195,7 +201,7 @@ namespace Ryujinx.HLE IHostUIHandler hostUIHandler, SystemLanguage systemLanguage, RegionCode region, - bool enableVsync, + VSyncMode vSyncMode, bool enableDockedMode, bool enablePtc, bool enableInternetAccess, @@ -212,7 +218,8 @@ namespace Ryujinx.HLE MultiplayerMode multiplayerMode, bool multiplayerDisableP2p, string multiplayerLdnPassphrase, - string multiplayerLdnServer) + string multiplayerLdnServer, + int customVSyncInterval) { VirtualFileSystem = virtualFileSystem; LibHacHorizonManager = libHacHorizonManager; @@ -225,7 +232,8 @@ namespace Ryujinx.HLE HostUIHandler = hostUIHandler; SystemLanguage = systemLanguage; Region = region; - EnableVsync = enableVsync; + VSyncMode = vSyncMode; + CustomVSyncInterval = customVSyncInterval; EnableDockedMode = enableDockedMode; EnablePtc = enablePtc; EnableInternetAccess = enableInternetAccess; diff --git a/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs b/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs index 4c17e7aed..601e85867 100644 --- a/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs +++ b/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs @@ -10,13 +10,12 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading; +using VSyncMode = Ryujinx.Common.Configuration.VSyncMode; namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger { class SurfaceFlinger : IConsumerListener, IDisposable { - private const int TargetFps = 60; - private readonly Switch _device; private readonly Dictionary _layers; @@ -32,6 +31,9 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger private readonly long _spinTicks; private readonly long _1msTicks; + private VSyncMode _vSyncMode; + private long _targetVSyncInterval; + private int _swapInterval; private int _swapIntervalDelay; @@ -88,7 +90,8 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger } else { - _ticksPerFrame = Stopwatch.Frequency / TargetFps; + _ticksPerFrame = Stopwatch.Frequency / _device.TargetVSyncInterval; + _targetVSyncInterval = _device.TargetVSyncInterval; } } @@ -370,15 +373,20 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger if (acquireStatus == Status.Success) { - // If device vsync is disabled, reflect the change. - if (!_device.EnableDeviceVsync) + if (_device.VSyncMode == VSyncMode.Unbounded) { if (_swapInterval != 0) { UpdateSwapInterval(0); + _vSyncMode = _device.VSyncMode; } } - else if (item.SwapInterval != _swapInterval) + else if (_device.VSyncMode != _vSyncMode) + { + UpdateSwapInterval(_device.VSyncMode == VSyncMode.Unbounded ? 0 : item.SwapInterval); + _vSyncMode = _device.VSyncMode; + } + else if (item.SwapInterval != _swapInterval || _device.TargetVSyncInterval != _targetVSyncInterval) { UpdateSwapInterval(item.SwapInterval); } diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index d12cb8f77..466352152 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -27,7 +27,11 @@ namespace Ryujinx.HLE public TamperMachine TamperMachine { get; } public IHostUIHandler UIHandler { get; } - public bool EnableDeviceVsync { get; set; } + public VSyncMode VSyncMode { get; set; } = VSyncMode.Switch; + public bool CustomVSyncIntervalEnabled { get; set; } = false; + public int CustomVSyncInterval { get; set; } + + public long TargetVSyncInterval { get; set; } = 60; public bool IsFrameAvailable => Gpu.Window.IsFrameAvailable; @@ -59,12 +63,14 @@ namespace Ryujinx.HLE System.State.SetLanguage(Configuration.SystemLanguage); System.State.SetRegion(Configuration.Region); - EnableDeviceVsync = Configuration.EnableVsync; + VSyncMode = Configuration.VSyncMode; + CustomVSyncInterval = Configuration.CustomVSyncInterval; System.State.DockedMode = Configuration.EnableDockedMode; System.PerformanceState.PerformanceMode = System.State.DockedMode ? PerformanceMode.Boost : PerformanceMode.Default; System.EnablePtc = Configuration.EnablePtc; System.FsIntegrityCheckLevel = Configuration.FsIntegrityCheckLevel; System.GlobalAccessLogMode = Configuration.FsGlobalAccessLogMode; + UpdateVSyncInterval(); #pragma warning restore IDE0055 } @@ -75,6 +81,34 @@ namespace Ryujinx.HLE Gpu.GPFifo.DispatchCalls(); } + public void IncrementCustomVSyncInterval() + { + CustomVSyncInterval += 1; + UpdateVSyncInterval(); + } + + public void DecrementCustomVSyncInterval() + { + CustomVSyncInterval -= 1; + UpdateVSyncInterval(); + } + + public void UpdateVSyncInterval() + { + switch (VSyncMode) + { + case VSyncMode.Custom: + TargetVSyncInterval = CustomVSyncInterval; + break; + case VSyncMode.Switch: + TargetVSyncInterval = 60; + break; + case VSyncMode.Unbounded: + TargetVSyncInterval = 1; + break; + } + } + public bool LoadCart(string exeFsDir, string romFsFile = null) => Processes.LoadUnpackedNca(exeFsDir, romFsFile); public bool LoadXci(string xciFile, ulong applicationId = 0) => Processes.LoadXci(xciFile, applicationId); public bool LoadNca(string ncaFile) => Processes.LoadNca(ncaFile); diff --git a/src/Ryujinx.Headless.SDL2/Options.cs b/src/Ryujinx.Headless.SDL2/Options.cs index 8078ca5e4..4e2ad5b58 100644 --- a/src/Ryujinx.Headless.SDL2/Options.cs +++ b/src/Ryujinx.Headless.SDL2/Options.cs @@ -115,8 +115,11 @@ namespace Ryujinx.Headless.SDL2 [Option("fs-global-access-log-mode", Required = false, Default = 0, HelpText = "Enables FS access log output to the console.")] public int FsGlobalAccessLogMode { get; set; } - [Option("disable-vsync", Required = false, HelpText = "Disables Vertical Sync.")] - public bool DisableVSync { get; set; } + [Option("vsync-mode", Required = false, Default = VSyncMode.Switch, HelpText = "Sets the emulated VSync mode (Switch, Unbounded, or Custom).")] + public VSyncMode VSyncMode { get; set; } + + [Option("custom-refresh-rate", Required = false, Default = 90, HelpText = "Sets the custom refresh rate target value (integer).")] + public int CustomVSyncInterval { get; set; } [Option("disable-shader-cache", Required = false, HelpText = "Disables Shader cache.")] public bool DisableShaderCache { get; set; } diff --git a/src/Ryujinx.Headless.SDL2/Program.cs b/src/Ryujinx.Headless.SDL2/Program.cs index e3bbd1e51..ff87a3845 100644 --- a/src/Ryujinx.Headless.SDL2/Program.cs +++ b/src/Ryujinx.Headless.SDL2/Program.cs @@ -563,7 +563,7 @@ namespace Ryujinx.Headless.SDL2 window, options.SystemLanguage, options.SystemRegion, - !options.DisableVSync, + options.VSyncMode, !options.DisableDockedMode, !options.DisablePTC, options.EnableInternetAccess, @@ -580,7 +580,8 @@ namespace Ryujinx.Headless.SDL2 Common.Configuration.Multiplayer.MultiplayerMode.Disabled, false, "", - ""); + "", + options.CustomVSyncInterval); return new Switch(configuration); } diff --git a/src/Ryujinx.Headless.SDL2/StatusUpdatedEventArgs.cs b/src/Ryujinx.Headless.SDL2/StatusUpdatedEventArgs.cs index cd7715712..c1dd3805f 100644 --- a/src/Ryujinx.Headless.SDL2/StatusUpdatedEventArgs.cs +++ b/src/Ryujinx.Headless.SDL2/StatusUpdatedEventArgs.cs @@ -3,7 +3,7 @@ using System; namespace Ryujinx.Headless.SDL2 { class StatusUpdatedEventArgs( - bool vSyncEnabled, + string vSyncMode, string dockedMode, string aspectRatio, string gameStatus, @@ -11,7 +11,7 @@ namespace Ryujinx.Headless.SDL2 string gpuName) : EventArgs { - public bool VSyncEnabled = vSyncEnabled; + public string VSyncMode = vSyncMode; public string DockedMode = dockedMode; public string AspectRatio = aspectRatio; public string GameStatus = gameStatus; diff --git a/src/Ryujinx.Headless.SDL2/WindowBase.cs b/src/Ryujinx.Headless.SDL2/WindowBase.cs index 6d681e100..2479ec127 100644 --- a/src/Ryujinx.Headless.SDL2/WindowBase.cs +++ b/src/Ryujinx.Headless.SDL2/WindowBase.cs @@ -314,7 +314,7 @@ namespace Ryujinx.Headless.SDL2 } StatusUpdatedEvent?.Invoke(this, new StatusUpdatedEventArgs( - Device.EnableDeviceVsync, + Device.VSyncMode.ToString(), dockedMode, Device.Configuration.AspectRatio.ToText(), $"Game: {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)", diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs index 80ba1b186..027e1052b 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Multiplayer; @@ -16,7 +17,7 @@ namespace Ryujinx.UI.Common.Configuration /// /// The current version of the file format /// - public const int CurrentVersion = 56; + public const int CurrentVersion = 57; /// /// Version of the configuration file format @@ -191,8 +192,25 @@ namespace Ryujinx.UI.Common.Configuration /// /// Enables or disables Vertical Sync /// + /// Kept for file format compatibility (to avoid possible failure when parsing configuration on old versions) + /// TODO: Remove this when those older versions aren't in use anymore. public bool EnableVsync { get; set; } + /// + /// Current VSync mode; 60 (Switch), unbounded ("Vsync off"), or custom + /// + public VSyncMode VSyncMode { get; set; } + + /// + /// Enables or disables the custom present interval + /// + public bool EnableCustomVSyncInterval { get; set; } + + /// + /// The custom present interval value + /// + public int CustomVSyncInterval { get; set; } + /// /// Enables or disables Shader cache /// diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs index 65dd88106..a41ea2cd7 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs @@ -82,7 +82,7 @@ namespace Ryujinx.UI.Common.Configuration configurationFileFormat.Hotkeys = new KeyboardHotkeys { - ToggleVsync = Key.F1, + ToggleVSyncMode = Key.F1, }; configurationFileUpdated = true; @@ -276,7 +276,7 @@ namespace Ryujinx.UI.Common.Configuration configurationFileFormat.Hotkeys = new KeyboardHotkeys { - ToggleVsync = Key.F1, + ToggleVSyncMode = Key.F1, Screenshot = Key.F8, }; @@ -289,7 +289,7 @@ namespace Ryujinx.UI.Common.Configuration configurationFileFormat.Hotkeys = new KeyboardHotkeys { - ToggleVsync = Key.F1, + ToggleVSyncMode = Key.F1, Screenshot = Key.F8, ShowUI = Key.F4, }; @@ -332,7 +332,7 @@ namespace Ryujinx.UI.Common.Configuration configurationFileFormat.Hotkeys = new KeyboardHotkeys { - ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, + ToggleVSyncMode = configurationFileFormat.Hotkeys.ToggleVSyncMode, Screenshot = configurationFileFormat.Hotkeys.Screenshot, ShowUI = configurationFileFormat.Hotkeys.ShowUI, Pause = Key.F5, @@ -347,7 +347,7 @@ namespace Ryujinx.UI.Common.Configuration configurationFileFormat.Hotkeys = new KeyboardHotkeys { - ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, + ToggleVSyncMode = configurationFileFormat.Hotkeys.ToggleVSyncMode, Screenshot = configurationFileFormat.Hotkeys.Screenshot, ShowUI = configurationFileFormat.Hotkeys.ShowUI, Pause = configurationFileFormat.Hotkeys.Pause, @@ -421,7 +421,7 @@ namespace Ryujinx.UI.Common.Configuration configurationFileFormat.Hotkeys = new KeyboardHotkeys { - ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, + ToggleVSyncMode = configurationFileFormat.Hotkeys.ToggleVSyncMode, Screenshot = configurationFileFormat.Hotkeys.Screenshot, ShowUI = configurationFileFormat.Hotkeys.ShowUI, Pause = configurationFileFormat.Hotkeys.Pause, @@ -448,7 +448,7 @@ namespace Ryujinx.UI.Common.Configuration configurationFileFormat.Hotkeys = new KeyboardHotkeys { - ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync, + ToggleVSyncMode = configurationFileFormat.Hotkeys.ToggleVSyncMode, Screenshot = configurationFileFormat.Hotkeys.Screenshot, ShowUI = configurationFileFormat.Hotkeys.ShowUI, Pause = configurationFileFormat.Hotkeys.Pause, @@ -611,6 +611,33 @@ namespace Ryujinx.UI.Common.Configuration configurationFileUpdated = true; } + if (configurationFileFormat.Version < 57) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 57."); + + configurationFileFormat.VSyncMode = VSyncMode.Switch; + configurationFileFormat.EnableCustomVSyncInterval = false; + + configurationFileFormat.Hotkeys = new KeyboardHotkeys + { + ToggleVSyncMode = Key.F1, + Screenshot = configurationFileFormat.Hotkeys.Screenshot, + ShowUI = configurationFileFormat.Hotkeys.ShowUI, + Pause = configurationFileFormat.Hotkeys.Pause, + ToggleMute = configurationFileFormat.Hotkeys.ToggleMute, + ResScaleUp = configurationFileFormat.Hotkeys.ResScaleUp, + ResScaleDown = configurationFileFormat.Hotkeys.ResScaleDown, + VolumeUp = configurationFileFormat.Hotkeys.VolumeUp, + VolumeDown = configurationFileFormat.Hotkeys.VolumeDown, + CustomVSyncIntervalIncrement = Key.Unbound, + CustomVSyncIntervalDecrement = Key.Unbound, + }; + + configurationFileFormat.CustomVSyncInterval = 120; + + configurationFileUpdated = true; + } + Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; Graphics.ResScale.Value = configurationFileFormat.ResScale; Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom; @@ -646,7 +673,9 @@ namespace Ryujinx.UI.Common.Configuration ShowTitleBar.Value = configurationFileFormat.ShowTitleBar; EnableHardwareAcceleration.Value = configurationFileFormat.EnableHardwareAcceleration; HideCursor.Value = configurationFileFormat.HideCursor; - Graphics.EnableVsync.Value = configurationFileFormat.EnableVsync; + Graphics.VSyncMode.Value = configurationFileFormat.VSyncMode; + Graphics.EnableCustomVSyncInterval.Value = configurationFileFormat.EnableCustomVSyncInterval; + Graphics.CustomVSyncInterval.Value = configurationFileFormat.CustomVSyncInterval; Graphics.EnableShaderCache.Value = configurationFileFormat.EnableShaderCache; Graphics.EnableTextureRecompression.Value = configurationFileFormat.EnableTextureRecompression; Graphics.EnableMacroHLE.Value = configurationFileFormat.EnableMacroHLE; diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs index 9be8f4df7..f28ce0348 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs @@ -1,4 +1,4 @@ -using ARMeilleure; +using ARMeilleure; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; @@ -474,9 +474,19 @@ namespace Ryujinx.UI.Common.Configuration public ReactiveObject ShadersDumpPath { get; private set; } /// - /// Enables or disables Vertical Sync + /// Toggles the present interval mode. Options are Switch (60Hz), Unbounded (previously Vsync off), and Custom, if enabled. /// - public ReactiveObject EnableVsync { get; private set; } + public ReactiveObject VSyncMode { get; private set; } + + /// + /// Enables or disables the custom present interval mode. + /// + public ReactiveObject EnableCustomVSyncInterval { get; private set; } + + /// + /// Changes the custom present interval. + /// + public ReactiveObject CustomVSyncInterval { get; private set; } /// /// Enables or disables Shader cache @@ -536,8 +546,12 @@ namespace Ryujinx.UI.Common.Configuration AspectRatio = new ReactiveObject(); AspectRatio.LogChangesToValue(nameof(AspectRatio)); ShadersDumpPath = new ReactiveObject(); - EnableVsync = new ReactiveObject(); - EnableVsync.LogChangesToValue(nameof(EnableVsync)); + VSyncMode = new ReactiveObject(); + VSyncMode.LogChangesToValue(nameof(VSyncMode)); + EnableCustomVSyncInterval = new ReactiveObject(); + EnableCustomVSyncInterval.LogChangesToValue(nameof(EnableCustomVSyncInterval)); + CustomVSyncInterval = new ReactiveObject(); + CustomVSyncInterval.LogChangesToValue(nameof(CustomVSyncInterval)); EnableShaderCache = new ReactiveObject(); EnableShaderCache.LogChangesToValue(nameof(EnableShaderCache)); EnableTextureRecompression = new ReactiveObject(); diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs index b3012568e..badb047df 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs @@ -64,7 +64,9 @@ namespace Ryujinx.UI.Common.Configuration ShowTitleBar = ShowTitleBar, EnableHardwareAcceleration = EnableHardwareAcceleration, HideCursor = HideCursor, - EnableVsync = Graphics.EnableVsync, + VSyncMode = Graphics.VSyncMode, + EnableCustomVSyncInterval = Graphics.EnableCustomVSyncInterval, + CustomVSyncInterval = Graphics.CustomVSyncInterval, EnableShaderCache = Graphics.EnableShaderCache, EnableTextureRecompression = Graphics.EnableTextureRecompression, EnableMacroHLE = Graphics.EnableMacroHLE, @@ -179,7 +181,9 @@ namespace Ryujinx.UI.Common.Configuration ShowTitleBar.Value = !OperatingSystem.IsWindows(); EnableHardwareAcceleration.Value = true; HideCursor.Value = HideCursorMode.OnIdle; - Graphics.EnableVsync.Value = true; + Graphics.VSyncMode.Value = VSyncMode.Switch; + Graphics.CustomVSyncInterval.Value = 120; + Graphics.EnableCustomVSyncInterval.Value = false; Graphics.EnableShaderCache.Value = true; Graphics.EnableTextureRecompression.Value = false; Graphics.EnableMacroHLE.Value = true; @@ -240,7 +244,7 @@ namespace Ryujinx.UI.Common.Configuration Hid.EnableMouse.Value = false; Hid.Hotkeys.Value = new KeyboardHotkeys { - ToggleVsync = Key.F1, + ToggleVSyncMode = Key.F1, ToggleMute = Key.F2, Screenshot = Key.F8, ShowUI = Key.F4, diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index d1398f194..5789737d6 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -57,6 +57,8 @@ using Key = Ryujinx.Input.Key; using MouseButton = Ryujinx.Input.MouseButton; using ScalingFilter = Ryujinx.Common.Configuration.ScalingFilter; using Size = Avalonia.Size; +using Switch = Ryujinx.HLE.Switch; +using VSyncMode = Ryujinx.Common.Configuration.VSyncMode; namespace Ryujinx.Ava { @@ -203,6 +205,9 @@ namespace Ryujinx.Ava ConfigurationState.Instance.Graphics.ScalingFilter.Event += UpdateScalingFilter; ConfigurationState.Instance.Graphics.ScalingFilterLevel.Event += UpdateScalingFilterLevel; ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Event += UpdateColorSpacePassthrough; + ConfigurationState.Instance.Graphics.VSyncMode.Event += UpdateVSyncMode; + ConfigurationState.Instance.Graphics.CustomVSyncInterval.Event += UpdateCustomVSyncIntervalValue; + ConfigurationState.Instance.Graphics.EnableCustomVSyncInterval.Event += UpdateCustomVSyncIntervalEnabled; ConfigurationState.Instance.System.EnableInternetAccess.Event += UpdateEnableInternetAccessState; ConfigurationState.Instance.Multiplayer.LanInterfaceId.Event += UpdateLanInterfaceIdState; @@ -295,6 +300,66 @@ namespace Ryujinx.Ava _renderer.Window?.SetColorSpacePassthrough((bool)ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Value); } + public void UpdateVSyncMode(object sender, ReactiveEventArgs e) + { + if (Device != null) + { + Device.VSyncMode = e.NewValue; + Device.UpdateVSyncInterval(); + } + _renderer.Window?.ChangeVSyncMode((Ryujinx.Graphics.GAL.VSyncMode)e.NewValue); + + _viewModel.ShowCustomVSyncIntervalPicker = (e.NewValue == VSyncMode.Custom); + } + + public void VSyncModeToggle() + { + VSyncMode oldVSyncMode = Device.VSyncMode; + VSyncMode newVSyncMode = VSyncMode.Switch; + bool customVSyncIntervalEnabled = ConfigurationState.Instance.Graphics.EnableCustomVSyncInterval.Value; + + switch (oldVSyncMode) + { + case VSyncMode.Switch: + newVSyncMode = VSyncMode.Unbounded; + break; + case VSyncMode.Unbounded: + if (customVSyncIntervalEnabled) + { + newVSyncMode = VSyncMode.Custom; + } + else + { + newVSyncMode = VSyncMode.Switch; + } + + break; + case VSyncMode.Custom: + newVSyncMode = VSyncMode.Switch; + break; + } + + UpdateVSyncMode(this, new ReactiveEventArgs(oldVSyncMode, newVSyncMode)); + } + + private void UpdateCustomVSyncIntervalValue(object sender, ReactiveEventArgs e) + { + if (Device != null) + { + Device.TargetVSyncInterval = e.NewValue; + Device.UpdateVSyncInterval(); + } + } + + private void UpdateCustomVSyncIntervalEnabled(object sender, ReactiveEventArgs e) + { + if (Device != null) + { + Device.CustomVSyncIntervalEnabled = e.NewValue; + Device.UpdateVSyncInterval(); + } + } + private void ShowCursor() { Dispatcher.UIThread.Post(() => @@ -505,12 +570,6 @@ namespace Ryujinx.Ava Device.Configuration.MultiplayerDisableP2p = e.NewValue; } - public void ToggleVSync() - { - Device.EnableDeviceVsync = !Device.EnableDeviceVsync; - _renderer.Window.ChangeVSyncMode(Device.EnableDeviceVsync); - } - public void Stop() { _isActive = false; @@ -864,7 +923,7 @@ namespace Ryujinx.Ava _viewModel.UiHandler, (SystemLanguage)ConfigurationState.Instance.System.Language.Value, (RegionCode)ConfigurationState.Instance.System.Region.Value, - ConfigurationState.Instance.Graphics.EnableVsync, + ConfigurationState.Instance.Graphics.VSyncMode, ConfigurationState.Instance.System.EnableDockedMode, ConfigurationState.Instance.System.EnablePtc, ConfigurationState.Instance.System.EnableInternetAccess, @@ -881,7 +940,8 @@ namespace Ryujinx.Ava ConfigurationState.Instance.Multiplayer.Mode, ConfigurationState.Instance.Multiplayer.DisableP2p, ConfigurationState.Instance.Multiplayer.LdnPassphrase, - ConfigurationState.Instance.Multiplayer.LdnServer)); + ConfigurationState.Instance.Multiplayer.LdnServer, + ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value)); } private static IHardwareDeviceDriver InitializeAudio() @@ -1002,7 +1062,7 @@ namespace Ryujinx.Ava Device.Gpu.SetGpuThread(); Device.Gpu.InitializeShaderCache(_gpuCancellationTokenSource.Token); - _renderer.Window.ChangeVSyncMode(Device.EnableDeviceVsync); + _renderer.Window.ChangeVSyncMode((Ryujinx.Graphics.GAL.VSyncMode)Device.VSyncMode); while (_isActive) { @@ -1063,6 +1123,7 @@ namespace Ryujinx.Ava { // Run a status update only when a frame is to be drawn. This prevents from updating the ui and wasting a render when no frame is queued. string dockedMode = ConfigurationState.Instance.System.EnableDockedMode ? LocaleManager.Instance[LocaleKeys.Docked] : LocaleManager.Instance[LocaleKeys.Handheld]; + string vSyncMode = Device.VSyncMode.ToString(); UpdateShaderCount(); @@ -1072,7 +1133,7 @@ namespace Ryujinx.Ava } StatusUpdatedEvent?.Invoke(this, new StatusUpdatedEventArgs( - Device.EnableDeviceVsync, + vSyncMode, LocaleManager.Instance[LocaleKeys.VolumeShort] + $": {(int)(Device.GetVolume() * 100)}%", dockedMode, ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(), @@ -1175,8 +1236,16 @@ namespace Ryujinx.Ava { switch (currentHotkeyState) { - case KeyboardHotkeyState.ToggleVSync: - ToggleVSync(); + case KeyboardHotkeyState.ToggleVSyncMode: + VSyncModeToggle(); + break; + case KeyboardHotkeyState.CustomVSyncIntervalDecrement: + Device.DecrementCustomVSyncInterval(); + _viewModel.CustomVSyncInterval -= 1; + break; + case KeyboardHotkeyState.CustomVSyncIntervalIncrement: + Device.IncrementCustomVSyncInterval(); + _viewModel.CustomVSyncInterval += 1; break; case KeyboardHotkeyState.Screenshot: ScreenshotRequested = true; @@ -1263,9 +1332,9 @@ namespace Ryujinx.Ava { KeyboardHotkeyState state = KeyboardHotkeyState.None; - if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.ToggleVsync)) + if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.ToggleVSyncMode)) { - state = KeyboardHotkeyState.ToggleVSync; + state = KeyboardHotkeyState.ToggleVSyncMode; } else if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Screenshot)) { @@ -1299,6 +1368,14 @@ namespace Ryujinx.Ava { state = KeyboardHotkeyState.VolumeDown; } + else if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.CustomVSyncIntervalIncrement)) + { + state = KeyboardHotkeyState.CustomVSyncIntervalIncrement; + } + else if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.CustomVSyncIntervalDecrement)) + { + state = KeyboardHotkeyState.CustomVSyncIntervalDecrement; + } return state; } diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index 23135866d..13ffeb759 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -142,9 +142,20 @@ "SettingsTabSystemSystemLanguageLatinAmericanSpanish": "Latin American Spanish", "SettingsTabSystemSystemLanguageSimplifiedChinese": "Simplified Chinese", "SettingsTabSystemSystemLanguageTraditionalChinese": "Traditional Chinese", - "SettingsTabSystemSystemTimeZone": "System TimeZone:", + "SettingsTabSystemSystemTimeZone": "System Time Zone:", "SettingsTabSystemSystemTime": "System Time:", - "SettingsTabSystemEnableVsync": "VSync", + "SettingsTabSystemVSyncMode": "VSync:", + "SettingsTabSystemEnableCustomVSyncInterval": "Enable custom refresh rate (Experimental)", + "SettingsTabSystemVSyncModeSwitch": "Switch", + "SettingsTabSystemVSyncModeUnbounded": "Unbounded", + "SettingsTabSystemVSyncModeCustom": "Custom Refresh Rate", + "SettingsTabSystemVSyncModeTooltip": "Emulated Vertical Sync. 'Switch' emulates the Switch's refresh rate of 60Hz. 'Unbounded' is an unbounded refresh rate.", + "SettingsTabSystemVSyncModeTooltipCustom": "Emulated Vertical Sync. 'Switch' emulates the Switch's refresh rate of 60Hz. 'Unbounded' is an unbounded refresh rate. 'Custom' emulates the specified custom refresh rate.", + "SettingsTabSystemEnableCustomVSyncIntervalTooltip": "Allows the user to specify an emulated refresh rate. In some titles, this may speed up or slow down the rate of gameplay logic. In other titles, it may allow for capping FPS at some multiple of the refresh rate, or lead to unpredictable behavior. This is an experimental feature, with no guarantees for how gameplay will be affected. \n\nLeave OFF if unsure.", + "SettingsTabSystemCustomVSyncIntervalValueTooltip": "The custom refresh rate target value.", + "SettingsTabSystemCustomVSyncIntervalSliderTooltip": "The custom refresh rate, as a percentage of the normal Switch refresh rate.", + "SettingsTabSystemCustomVSyncIntervalPercentage": "Custom Refresh Rate %:", + "SettingsTabSystemCustomVSyncIntervalValue": "Custom Refresh Rate Value:", "SettingsTabSystemEnablePptc": "PPTC (Profiled Persistent Translation Cache)", "SettingsTabSystemEnableLowPowerPptc": "Low-power PPTC cache", "SettingsTabSystemEnableFsIntegrityChecks": "FS Integrity Checks", @@ -153,6 +164,7 @@ "SettingsTabSystemAudioBackendOpenAL": "OpenAL", "SettingsTabSystemAudioBackendSoundIO": "SoundIO", "SettingsTabSystemAudioBackendSDL2": "SDL2", + "SettingsTabSystemCustomVSyncInterval": "Interval", "SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacksNote": "May cause instability", "SettingsTabSystemDramSize": "DRAM size:", @@ -720,11 +732,13 @@ "RyujinxUpdater": "Ryujinx Updater", "SettingsTabHotkeys": "Keyboard Hotkeys", "SettingsTabHotkeysHotkeys": "Keyboard Hotkeys", - "SettingsTabHotkeysToggleVsyncHotkey": "Toggle VSync:", + "SettingsTabHotkeysToggleVSyncModeHotkey": "Toggle VSync mode:", "SettingsTabHotkeysScreenshotHotkey": "Screenshot:", "SettingsTabHotkeysShowUiHotkey": "Show UI:", "SettingsTabHotkeysPauseHotkey": "Pause:", "SettingsTabHotkeysToggleMuteHotkey": "Mute:", + "SettingsTabHotkeysIncrementCustomVSyncIntervalHotkey": "Raise custom refresh rate", + "SettingsTabHotkeysDecrementCustomVSyncIntervalHotkey": "Lower custom refresh rate", "ControllerMotionTitle": "Motion Control Settings", "ControllerRumbleTitle": "Rumble Settings", "SettingsSelectThemeFileDialogTitle": "Select Theme File", diff --git a/src/Ryujinx/Assets/Styles/Themes.xaml b/src/Ryujinx/Assets/Styles/Themes.xaml index 0f323f84b..056eba228 100644 --- a/src/Ryujinx/Assets/Styles/Themes.xaml +++ b/src/Ryujinx/Assets/Styles/Themes.xaml @@ -26,8 +26,9 @@ #b3ffffff #80cccccc #A0000000 - #FF2EEAC9 - #FFFF4554 + #FF2EEAC9 + #FFFF4554 + #6483F5 _toggleVsync; + get => _toggleVSyncMode; set { - _toggleVsync = value; + _toggleVSyncMode = value; OnPropertyChanged(); } } @@ -104,11 +104,33 @@ namespace Ryujinx.Ava.UI.Models.Input } } + private Key _customVSyncIntervalIncrement; + public Key CustomVSyncIntervalIncrement + { + get => _customVSyncIntervalIncrement; + set + { + _customVSyncIntervalIncrement = value; + OnPropertyChanged(); + } + } + + private Key _customVSyncIntervalDecrement; + public Key CustomVSyncIntervalDecrement + { + get => _customVSyncIntervalDecrement; + set + { + _customVSyncIntervalDecrement = value; + OnPropertyChanged(); + } + } + public HotkeyConfig(KeyboardHotkeys config) { if (config != null) { - ToggleVsync = config.ToggleVsync; + ToggleVSyncMode = config.ToggleVSyncMode; Screenshot = config.Screenshot; ShowUI = config.ShowUI; Pause = config.Pause; @@ -117,6 +139,8 @@ namespace Ryujinx.Ava.UI.Models.Input ResScaleDown = config.ResScaleDown; VolumeUp = config.VolumeUp; VolumeDown = config.VolumeDown; + CustomVSyncIntervalIncrement = config.CustomVSyncIntervalIncrement; + CustomVSyncIntervalDecrement = config.CustomVSyncIntervalDecrement; } } @@ -124,7 +148,7 @@ namespace Ryujinx.Ava.UI.Models.Input { var config = new KeyboardHotkeys { - ToggleVsync = ToggleVsync, + ToggleVSyncMode = ToggleVSyncMode, Screenshot = Screenshot, ShowUI = ShowUI, Pause = Pause, @@ -133,6 +157,8 @@ namespace Ryujinx.Ava.UI.Models.Input ResScaleDown = ResScaleDown, VolumeUp = VolumeUp, VolumeDown = VolumeDown, + CustomVSyncIntervalIncrement = CustomVSyncIntervalIncrement, + CustomVSyncIntervalDecrement = CustomVSyncIntervalDecrement, }; return config; diff --git a/src/Ryujinx/UI/Models/SaveModel.cs b/src/Ryujinx/UI/Models/SaveModel.cs index 55408ac3a..cfc397c6e 100644 --- a/src/Ryujinx/UI/Models/SaveModel.cs +++ b/src/Ryujinx/UI/Models/SaveModel.cs @@ -47,7 +47,7 @@ namespace Ryujinx.Ava.UI.Models TitleId = info.ProgramId; UserId = info.UserId; - var appData = App.MainWindow.ViewModel.Applications.FirstOrDefault(x => x.IdString.Equals(TitleIdString, StringComparison.OrdinalIgnoreCase)); + var appData = MainWindow.MainWindowViewModel.Applications.FirstOrDefault(x => x.IdString.Equals(TitleIdString, StringComparison.OrdinalIgnoreCase)); InGameList = appData != null; diff --git a/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs b/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs index 40f783c44..6f0f5ab5d 100644 --- a/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs +++ b/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs @@ -4,18 +4,17 @@ namespace Ryujinx.Ava.UI.Models { internal class StatusUpdatedEventArgs : EventArgs { - public bool VSyncEnabled { get; } + public string VSyncMode { get; } public string VolumeStatus { get; } public string AspectRatio { get; } public string DockedMode { get; } public string FifoStatus { get; } public string GameStatus { get; } - public uint ShaderCount { get; } - public StatusUpdatedEventArgs(bool vSyncEnabled, string volumeStatus, string dockedMode, string aspectRatio, string gameStatus, string fifoStatus, uint shaderCount) + public StatusUpdatedEventArgs(string vSyncMode, string volumeStatus, string dockedMode, string aspectRatio, string gameStatus, string fifoStatus, uint shaderCount) { - VSyncEnabled = vSyncEnabled; + VSyncMode = vSyncMode; VolumeStatus = volumeStatus; DockedMode = dockedMode; AspectRatio = aspectRatio; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index f1587a0ff..824fdd717 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -63,6 +63,7 @@ namespace Ryujinx.Ava.UI.ViewModels private string _searchText; private Timer _searchTimer; private string _dockedStatusText; + private string _vSyncModeText; private string _fifoStatusText; private string _gameStatusText; private string _volumeStatusText; @@ -80,7 +81,7 @@ namespace Ryujinx.Ava.UI.ViewModels private bool _showStatusSeparator; private Brush _progressBarForegroundColor; private Brush _progressBarBackgroundColor; - private Brush _vsyncColor; + private Brush _vSyncModeColor; private byte[] _selectedIcon; private bool _isAppletMenuActive; private int _statusBarProgressMaximum; @@ -111,6 +112,8 @@ namespace Ryujinx.Ava.UI.ViewModels private WindowState _windowState; private double _windowWidth; private double _windowHeight; + private int _customVSyncInterval; + private int _customVSyncIntervalPercentageProxy; private bool _isActive; private bool _isSubMenuOpen; @@ -145,6 +148,7 @@ namespace Ryujinx.Ava.UI.ViewModels Volume = ConfigurationState.Instance.System.AudioVolume; } + CustomVSyncInterval = ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value; } public void Initialize( @@ -447,17 +451,87 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public Brush VsyncColor + public Brush VSyncModeColor { - get => _vsyncColor; + get => _vSyncModeColor; set { - _vsyncColor = value; + _vSyncModeColor = value; OnPropertyChanged(); } } + public bool ShowCustomVSyncIntervalPicker + { + get + { + if (_isGameRunning) + { + return AppHost.Device.VSyncMode == + VSyncMode.Custom; + } + else + { + return false; + } + } + set + { + OnPropertyChanged(); + } + } + + public int CustomVSyncIntervalPercentageProxy + { + get => _customVSyncIntervalPercentageProxy; + set + { + int newInterval = (int)((value / 100f) * 60); + _customVSyncInterval = newInterval; + _customVSyncIntervalPercentageProxy = value; + if (_isGameRunning) + { + AppHost.Device.CustomVSyncInterval = newInterval; + AppHost.Device.UpdateVSyncInterval(); + } + OnPropertyChanged((nameof(CustomVSyncInterval))); + OnPropertyChanged((nameof(CustomVSyncIntervalPercentageText))); + } + } + + public string CustomVSyncIntervalPercentageText + { + get + { + string text = CustomVSyncIntervalPercentageProxy.ToString() + "%"; + return text; + } + set + { + + } + } + + public int CustomVSyncInterval + { + get => _customVSyncInterval; + set + { + _customVSyncInterval = value; + int newPercent = (int)((value / 60f) * 100); + _customVSyncIntervalPercentageProxy = newPercent; + if (_isGameRunning) + { + AppHost.Device.CustomVSyncInterval = value; + AppHost.Device.UpdateVSyncInterval(); + } + OnPropertyChanged(nameof(CustomVSyncIntervalPercentageProxy)); + OnPropertyChanged(nameof(CustomVSyncIntervalPercentageText)); + OnPropertyChanged(); + } + } + public byte[] SelectedIcon { get => _selectedIcon; @@ -578,6 +652,17 @@ namespace Ryujinx.Ava.UI.ViewModels } } + public string VSyncModeText + { + get => _vSyncModeText; + set + { + _vSyncModeText = value; + + OnPropertyChanged(); + } + } + public string DockedStatusText { get => _dockedStatusText; @@ -1292,17 +1377,18 @@ namespace Ryujinx.Ava.UI.ViewModels { Dispatcher.UIThread.InvokeAsync(() => { - Application.Current!.Styles.TryGetResource(args.VSyncEnabled - ? "VsyncEnabled" - : "VsyncDisabled", + Application.Current!.Styles.TryGetResource(args.VSyncMode, Application.Current.ActualThemeVariant, out object color); if (color is Color clr) { - VsyncColor = new SolidColorBrush(clr); + VSyncModeColor = new SolidColorBrush(clr); } + VSyncModeText = args.VSyncMode == "Custom" ? "Custom" : "VSync"; + ShowCustomVSyncIntervalPicker = + args.VSyncMode == VSyncMode.Custom.ToString(); DockedStatusText = args.DockedMode; AspectRatioStatusText = args.AspectRatio; GameStatusText = args.GameStatus; @@ -1495,6 +1581,27 @@ namespace Ryujinx.Ava.UI.ViewModels } } + public void ToggleVSyncMode() + { + AppHost.VSyncModeToggle(); + OnPropertyChanged(nameof(ShowCustomVSyncIntervalPicker)); + } + + public void VSyncModeSettingChanged() + { + if (_isGameRunning) + { + AppHost.Device.CustomVSyncInterval = ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value; + AppHost.Device.UpdateVSyncInterval(); + } + + CustomVSyncInterval = ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value; + OnPropertyChanged(nameof(ShowCustomVSyncIntervalPicker)); + OnPropertyChanged(nameof(CustomVSyncIntervalPercentageProxy)); + OnPropertyChanged(nameof(CustomVSyncIntervalPercentageText)); + OnPropertyChanged(nameof(CustomVSyncInterval)); + } + public async Task ExitCurrentState() { if (WindowState is WindowState.FullScreen) diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 2da252d00..a5abeb36b 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -52,6 +52,10 @@ namespace Ryujinx.Ava.UI.ViewModels private int _graphicsBackendIndex; private int _scalingFilter; private int _scalingFilterLevel; + private int _customVSyncInterval; + private bool _enableCustomVSyncInterval; + private int _customVSyncIntervalPercentageProxy; + private VSyncMode _vSyncMode; public event Action CloseWindow; public event Action SaveSettingsEvent; @@ -154,7 +158,74 @@ namespace Ryujinx.Ava.UI.ViewModels public bool EnableDockedMode { get; set; } public bool EnableKeyboard { get; set; } public bool EnableMouse { get; set; } - public bool EnableVsync { get; set; } + public VSyncMode VSyncMode + { + get => _vSyncMode; + set + { + if (value == VSyncMode.Custom || + value == VSyncMode.Switch || + value == VSyncMode.Unbounded) + { + _vSyncMode = value; + OnPropertyChanged(); + } + } + } + + public int CustomVSyncIntervalPercentageProxy + { + get => _customVSyncIntervalPercentageProxy; + set + { + int newInterval = (int)((value / 100f) * 60); + _customVSyncInterval = newInterval; + _customVSyncIntervalPercentageProxy = value; + OnPropertyChanged((nameof(CustomVSyncInterval))); + OnPropertyChanged((nameof(CustomVSyncIntervalPercentageText))); + } + } + + public string CustomVSyncIntervalPercentageText + { + get + { + string text = CustomVSyncIntervalPercentageProxy.ToString() + "%"; + return text; + } + } + + public bool EnableCustomVSyncInterval + { + get => _enableCustomVSyncInterval; + set + { + _enableCustomVSyncInterval = value; + if (_vSyncMode == VSyncMode.Custom && !value) + { + VSyncMode = VSyncMode.Switch; + } + else if (value) + { + VSyncMode = VSyncMode.Custom; + } + OnPropertyChanged(); + } + } + + public int CustomVSyncInterval + { + get => _customVSyncInterval; + set + { + _customVSyncInterval = value; + int newPercent = (int)((value / 60f) * 100); + _customVSyncIntervalPercentageProxy = newPercent; + OnPropertyChanged(nameof(CustomVSyncIntervalPercentageProxy)); + OnPropertyChanged(nameof(CustomVSyncIntervalPercentageText)); + OnPropertyChanged(); + } + } public bool EnablePptc { get; set; } public bool EnableLowPowerPptc { get; set; } public bool EnableInternetAccess { get; set; } @@ -484,7 +555,9 @@ namespace Ryujinx.Ava.UI.ViewModels CurrentDate = currentDateTime.Date; CurrentTime = currentDateTime.TimeOfDay; - EnableVsync = config.Graphics.EnableVsync; + EnableCustomVSyncInterval = config.Graphics.EnableCustomVSyncInterval.Value; + CustomVSyncInterval = config.Graphics.CustomVSyncInterval; + VSyncMode = config.Graphics.VSyncMode; EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks; DramSize = config.System.DramSize; IgnoreMissingServices = config.System.IgnoreMissingServices; @@ -590,7 +663,9 @@ namespace Ryujinx.Ava.UI.ViewModels } config.System.SystemTimeOffset.Value = Convert.ToInt64((CurrentDate.ToUnixTimeSeconds() + CurrentTime.TotalSeconds) - DateTimeOffset.Now.ToUnixTimeSeconds()); - config.Graphics.EnableVsync.Value = EnableVsync; + config.Graphics.VSyncMode.Value = VSyncMode; + config.Graphics.EnableCustomVSyncInterval.Value = EnableCustomVSyncInterval; + config.Graphics.CustomVSyncInterval.Value = CustomVSyncInterval; config.System.EnableFsIntegrityChecks.Value = EnableFsIntegrityChecks; config.System.DramSize.Value = DramSize; config.System.IgnoreMissingServices.Value = IgnoreMissingServices; @@ -660,6 +735,7 @@ namespace Ryujinx.Ava.UI.ViewModels config.ToFileFormat().SaveConfig(Program.ConfigurationPath); MainWindow.UpdateGraphicsConfig(); + MainWindow.MainWindowViewModel.VSyncModeSettingChanged(); SaveSettingsEvent?.Invoke(); diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml index 0e0526f49..597cf10e1 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml @@ -79,15 +79,59 @@ MaxHeight="18" Orientation="Horizontal"> + PointerReleased="VSyncMode_PointerReleased" + Text="{Binding VSyncModeText}" + TextAlignment="Start"/> + - - - + + + @@ -103,6 +103,18 @@ + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs index fb0fe2bb1..609f61633 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs @@ -82,8 +82,8 @@ namespace Ryujinx.Ava.UI.Views.Settings switch (button.Name) { - case "ToggleVsync": - viewModel.KeyboardHotkey.ToggleVsync = buttonValue.AsHidType(); + case "ToggleVSyncMode": + viewModel.KeyboardHotkey.ToggleVSyncMode = buttonValue.AsHidType(); break; case "Screenshot": viewModel.KeyboardHotkey.Screenshot = buttonValue.AsHidType(); @@ -109,6 +109,12 @@ namespace Ryujinx.Ava.UI.Views.Settings case "VolumeDown": viewModel.KeyboardHotkey.VolumeDown = buttonValue.AsHidType(); break; + case "CustomVSyncIntervalIncrement": + viewModel.KeyboardHotkey.CustomVSyncIntervalIncrement = buttonValue.AsHidType(); + break; + case "CustomVSyncIntervalDecrement": + viewModel.KeyboardHotkey.CustomVSyncIntervalDecrement = buttonValue.AsHidType(); + break; } } }; diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml index 4fe57b425..e04e541c3 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml @@ -4,6 +4,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" @@ -181,11 +182,68 @@ Width="350" ToolTip.Tip="{ext:Locale TimeTooltip}" /> - + - + VerticalAlignment="Center" + Text="{ext:Locale SettingsTabSystemVSyncMode}" + ToolTip.Tip="{ext:Locale SettingsTabSystemVSyncModeTooltip}" + Width="250" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 829db4bc9..059f99a60 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -38,6 +38,8 @@ namespace Ryujinx.Ava.UI.Windows { public partial class MainWindow : StyleableAppWindow { + internal static MainWindowViewModel MainWindowViewModel { get; private set; } + public MainWindowViewModel ViewModel { get; } internal readonly AvaHostUIHandler UiHandler; @@ -73,7 +75,7 @@ namespace Ryujinx.Ava.UI.Windows public MainWindow() { - DataContext = ViewModel = new MainWindowViewModel + DataContext = ViewModel = MainWindowViewModel = new MainWindowViewModel { Window = this }; -- 2.47.1 From a18cecbc30168e347757ced631e652a40b001133 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hack=E8=8C=B6=E3=82=93?= <120134269+Hackjjang@users.noreply.github.com> Date: Tue, 26 Nov 2024 04:40:39 +0900 Subject: [PATCH 083/722] Korean "Show Changelog" translation (#313) --- src/Ryujinx/Assets/Locales/ko_KR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 47a619054..8baf559be 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -457,7 +457,7 @@ "DialogUpdaterExtractionMessage": "업데이트 추출 중...", "DialogUpdaterRenamingMessage": "이름 변경 업데이트...", "DialogUpdaterAddingFilesMessage": "새 업데이트 추가 중...", - "DialogUpdaterShowChangelogMessage": "Show Changelog", + "DialogUpdaterShowChangelogMessage": "변경 로그 보기", "DialogUpdaterCompleteMessage": "업데이트가 완료되었습니다!", "DialogUpdaterRestartMessage": "지금 Ryujinx를 다시 시작하시겠습니까?", "DialogUpdaterNoInternetMessage": "인터넷에 연결되어 있지 않습니다!", -- 2.47.1 From f72d2c1b2bd17aa25df146d31a39b98a47b524aa Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Mon, 25 Nov 2024 20:43:01 +0100 Subject: [PATCH 084/722] UI: Add Mii Edit Applet Locale (#311) This allows the "Mii Edit Applet" dropdown to be localized ( I already went ahead and localized French ) --- src/Ryujinx/Assets/Locales/ar_SA.json | 1 + src/Ryujinx/Assets/Locales/de_DE.json | 1 + src/Ryujinx/Assets/Locales/el_GR.json | 1 + src/Ryujinx/Assets/Locales/en_US.json | 1 + src/Ryujinx/Assets/Locales/es_ES.json | 1 + src/Ryujinx/Assets/Locales/fr_FR.json | 1 + src/Ryujinx/Assets/Locales/he_IL.json | 1 + src/Ryujinx/Assets/Locales/it_IT.json | 1 + src/Ryujinx/Assets/Locales/ja_JP.json | 1 + src/Ryujinx/Assets/Locales/ko_KR.json | 1 + src/Ryujinx/Assets/Locales/pl_PL.json | 1 + src/Ryujinx/Assets/Locales/pt_BR.json | 1 + src/Ryujinx/Assets/Locales/ru_RU.json | 1 + src/Ryujinx/Assets/Locales/th_TH.json | 1 + src/Ryujinx/Assets/Locales/tr_TR.json | 1 + src/Ryujinx/Assets/Locales/uk_UA.json | 1 + src/Ryujinx/Assets/Locales/zh_CN.json | 1 + src/Ryujinx/Assets/Locales/zh_TW.json | 1 + src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml | 2 +- 19 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index c937a2eed..62992ff34 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -1,6 +1,7 @@ { "Language": "اَلْعَرَبِيَّةُ", "MenuBarFileOpenApplet": "فتح التطبيق المصغر", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "‫افتح تطبيق تحرير Mii في الوضع المستقل", "SettingsTabInputDirectMouseAccess": "الوصول المباشر للفأرة", "SettingsTabSystemMemoryManagerMode": "وضع إدارة الذاكرة:", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index c27de5608..91141b7af 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -1,6 +1,7 @@ { "Language": "Deutsch", "MenuBarFileOpenApplet": "Öffne Anwendung", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Öffnet das Mii-Editor-Applet im Standalone-Modus", "SettingsTabInputDirectMouseAccess": "Direkter Mauszugriff", "SettingsTabSystemMemoryManagerMode": "Speichermanagermodus:", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index d47c8b9fe..a589d31ad 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -1,6 +1,7 @@ { "Language": "Ελληνικά", "MenuBarFileOpenApplet": "Άνοιγμα Applet", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Άνοιγμα του Mii Editor Applet σε Αυτόνομη λειτουργία", "SettingsTabInputDirectMouseAccess": "Άμεση Πρόσβαση Ποντικιού", "SettingsTabSystemMemoryManagerMode": "Λειτουργία Διαχείρισης Μνήμης:", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index 13ffeb759..90290b760 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -1,6 +1,7 @@ { "Language": "English (US)", "MenuBarFileOpenApplet": "Open Applet", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Open Mii Editor Applet in Standalone mode", "SettingsTabInputDirectMouseAccess": "Direct Mouse Access", "SettingsTabSystemMemoryManagerMode": "Memory Manager Mode:", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index 8456040ce..8a426b3a4 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -1,6 +1,7 @@ { "Language": "Español (ES)", "MenuBarFileOpenApplet": "Abrir applet", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Abre el editor de Mii en modo autónomo", "SettingsTabInputDirectMouseAccess": "Acceso directo al ratón", "SettingsTabSystemMemoryManagerMode": "Modo del administrador de memoria:", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index f17a7ba95..355c2814d 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -1,6 +1,7 @@ { "Language": "Français", "MenuBarFileOpenApplet": "Ouvrir un programme", + "MenuBarFileOpenAppletOpenMiiApplet": "Éditeur de Mii", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Ouvrir l'éditeur Mii en mode Standalone", "SettingsTabInputDirectMouseAccess": "Accès direct à la souris", "SettingsTabSystemMemoryManagerMode": "Mode de gestion de la mémoire :", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index f0cf4eb68..51c3c8835 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -1,6 +1,7 @@ { "Language": "עִברִית", "MenuBarFileOpenApplet": "פתח יישומון", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "פתח את יישומון עורך ה- Mii במצב עצמאי", "SettingsTabInputDirectMouseAccess": "גישה ישירה לעכבר", "SettingsTabSystemMemoryManagerMode": "מצב מנהל זיכרון:", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index dd408bf5b..52ea833d3 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -1,6 +1,7 @@ { "Language": "Italiano", "MenuBarFileOpenApplet": "Apri applet", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Apri l'applet Mii Editor in modalità Standalone", "SettingsTabInputDirectMouseAccess": "Accesso diretto al mouse", "SettingsTabSystemMemoryManagerMode": "Modalità di gestione della memoria:", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index 244730494..59b7aa3b3 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -1,6 +1,7 @@ { "Language": "日本語", "MenuBarFileOpenApplet": "アプレットを開く", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "スタンドアロンモードで Mii エディタアプレットを開きます", "SettingsTabInputDirectMouseAccess": "マウス直接アクセス", "SettingsTabSystemMemoryManagerMode": "メモリ管理モード:", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 8baf559be..aeeb84c62 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -1,6 +1,7 @@ { "Language": "한국어", "MenuBarFileOpenApplet": "애플릿 열기", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "독립 실행형 모드로 Mii 편집기 애플릿 열기", "SettingsTabInputDirectMouseAccess": "마우스 직접 접근", "SettingsTabSystemMemoryManagerMode": "메모리 관리자 모드 :", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index cfa9d7a76..1d8cf4f03 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -1,6 +1,7 @@ { "Language": "Polski", "MenuBarFileOpenApplet": "Otwórz Aplet", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Otwórz aplet Mii Editor w trybie indywidualnym", "SettingsTabInputDirectMouseAccess": "Bezpośredni dostęp do myszy", "SettingsTabSystemMemoryManagerMode": "Tryb menedżera pamięci:", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index 352fae46b..7574c1d20 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -1,6 +1,7 @@ { "Language": "Português (BR)", "MenuBarFileOpenApplet": "Abrir Applet", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Abrir editor Mii em modo avulso", "SettingsTabInputDirectMouseAccess": "Acesso direto ao mouse", "SettingsTabSystemMemoryManagerMode": "Modo de gerenciamento de memória:", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index 112735e2d..86e51f09f 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -1,6 +1,7 @@ { "Language": "Русский (RU)", "MenuBarFileOpenApplet": "Открыть апплет", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Открывает апплет Mii Editor в автономном режиме", "SettingsTabInputDirectMouseAccess": "Прямой ввод мыши", "SettingsTabSystemMemoryManagerMode": "Режим менеджера памяти:", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index 35959ddbd..259828583 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -1,6 +1,7 @@ { "Language": "ภาษาไทย", "MenuBarFileOpenApplet": "เปิด Applet", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "เปิดโปรแกรม Mii Editor Applet", "SettingsTabInputDirectMouseAccess": "เข้าถึงเมาส์ได้โดยตรง", "SettingsTabSystemMemoryManagerMode": "โหมดจัดการหน่วยความจำ:", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index 5d50b67db..18dbb12b0 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -1,6 +1,7 @@ { "Language": "Türkçe", "MenuBarFileOpenApplet": "Applet'i Aç", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Mii Editör Applet'ini Bağımsız Mod'da Aç", "SettingsTabInputDirectMouseAccess": "Doğrudan Mouse Erişimi", "SettingsTabSystemMemoryManagerMode": "Hafıza Yönetim Modu:", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index a45208486..e123afa6b 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -1,6 +1,7 @@ { "Language": "Українська", "MenuBarFileOpenApplet": "Відкрити аплет", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Відкрити аплет Mii Editor в автономному режимі", "SettingsTabInputDirectMouseAccess": "Прямий доступ мишею", "SettingsTabSystemMemoryManagerMode": "Режим диспетчера пам’яті:", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index 8a4995ea7..8fcd41cd2 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -1,6 +1,7 @@ { "Language": "简体中文", "MenuBarFileOpenApplet": "打开小程序", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "打开独立的 Mii 小程序", "SettingsTabInputDirectMouseAccess": "直通鼠标操作", "SettingsTabSystemMemoryManagerMode": "内存管理模式:", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index 5649ba00a..d219bc708 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -1,6 +1,7 @@ { "Language": "繁體中文 (台灣)", "MenuBarFileOpenApplet": "開啟小程式", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "在獨立模式下開啟 Mii 編輯器小程式", "SettingsTabInputDirectMouseAccess": "滑鼠直接存取", "SettingsTabSystemMemoryManagerMode": "記憶體管理員模式:", diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 883bf8971..6cf76cf49 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -58,7 +58,7 @@ -- 2.47.1 From 0caeab22707b336d66427d91b35c437f44d9c6d2 Mon Sep 17 00:00:00 2001 From: Luke Warner <65521430+LukeWarnut@users.noreply.github.com> Date: Mon, 25 Nov 2024 14:46:41 -0500 Subject: [PATCH 085/722] Remove 'Enter' hotkey in settings menu (#95) This allows the Enter key to be bound to a button when using the Avalonia UI. --- src/Ryujinx/UI/Windows/SettingsWindow.axaml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml b/src/Ryujinx/UI/Windows/SettingsWindow.axaml index f9d10fe4f..2bf5b55e7 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml +++ b/src/Ryujinx/UI/Windows/SettingsWindow.axaml @@ -109,7 +109,6 @@ HorizontalAlignment="Right" ReverseOrder="{Binding IsMacOS}"> /// Guest address /// Value of the from the specified guest - public int GetValue(ulong address) + public long GetValue(ulong address) { - return (int)((address & Mask) >> Index); + return (long)((address & Mask) >> Index); } } } diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index c722ce6be..841e5fefa 100644 --- a/src/ARMeilleure/Translation/PTC/Ptc.cs +++ b/src/ARMeilleure/Translation/PTC/Ptc.cs @@ -30,7 +30,7 @@ namespace ARMeilleure.Translation.PTC private const string OuterHeaderMagicString = "PTCohd\0\0"; private const string InnerHeaderMagicString = "PTCihd\0\0"; - private const uint InternalVersion = 6992; //! To be incremented manually for each change to the ARMeilleure project. + private const uint InternalVersion = 6997; //! To be incremented manually for each change to the ARMeilleure project. private const string ActualDir = "0"; private const string BackupDir = "1"; diff --git a/src/Ryujinx.Cpu/AddressTable.cs b/src/Ryujinx.Cpu/AddressTable.cs index d87b12ab0..038a2009c 100644 --- a/src/Ryujinx.Cpu/AddressTable.cs +++ b/src/Ryujinx.Cpu/AddressTable.cs @@ -238,7 +238,7 @@ namespace ARMeilleure.Common { TEntry* page = GetPage(address); - int index = Levels[^1].GetValue(address); + long index = Levels[^1].GetValue(address); EnsureMapped((IntPtr)(page + index)); -- 2.47.1 From 3680df6092394493f165f963cee4b202b63beb96 Mon Sep 17 00:00:00 2001 From: Piplup <100526773+piplup55@users.noreply.github.com> Date: Sat, 30 Nov 2024 23:17:30 +0000 Subject: [PATCH 092/722] Fix for missing text with specific system locale encoding (#330) --- distribution/linux/Ryujinx.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/linux/Ryujinx.sh b/distribution/linux/Ryujinx.sh index 30eb14399..daeea9bfd 100755 --- a/distribution/linux/Ryujinx.sh +++ b/distribution/linux/Ryujinx.sh @@ -14,7 +14,7 @@ if [ -z "$RYUJINX_BIN" ]; then exit 1 fi -COMMAND="env DOTNET_EnableAlternateStackCheck=1" +COMMAND="env LANG=C.UTF-8 DOTNET_EnableAlternateStackCheck=1" if command -v gamemoderun > /dev/null 2>&1; then COMMAND="$COMMAND gamemoderun" -- 2.47.1 From 6b5cb151c3574d6b08f421071968121bbed6ab7f Mon Sep 17 00:00:00 2001 From: Luke Warner <65521430+LukeWarnut@users.noreply.github.com> Date: Sat, 30 Nov 2024 18:20:48 -0500 Subject: [PATCH 093/722] Implement and stub services required for Mario Kart Live: Home Circuit (#331) These changes allow Mario Kart Live: Home Circuit (v2.0.0) to boot into menus. Kart functionality has not been implemented and will not work. Version 1.0.0 is currently unsupported due to unimplemented ARM registers. I plan on addressing this issue at a later date. ### Here is a list of the implemented and stubbed services in this PR: #### Implemented: Ldn.Lp2p.IServiceCreator: 0 (CreateNetworkService) Ldn.Lp2p.IServiceCreator: 8 (CreateNetworkServiceMonitor) Ldn.Lp2p.ISfService: 0 (Initialize) Ldn.Lp2p.ISfServiceMonitor: 0 (Initialize) Ldn.Lp2p.ISfServiceMonitor: 256 (AttachNetworkInterfaceStateChangeEvent) Ldn.Lp2p.ISfServiceMonitor: 328 (AttachJoinEvent) #### Stubbed: Ldn.Lp2p.ISfService: 768 (CreateGroup) Ldn.Lp2p.ISfService: 1536 (SendToOtherGroup) Ldn.Lp2p.ISfService: 1544 (RecvFromOtherGroup) Ldn.Lp2p.ISfServiceMonitor: 288 (GetGroupInfo) Ldn.Lp2p.ISfServiceMonitor: 296 (GetGroupInfo2) Ldn.Lp2p.ISfServiceMonitor: 312 (GetIpConfig) --- .../HOS/Services/Ldn/Lp2p/IServiceCreator.cs | 18 ++++ .../HOS/Services/Ldn/Lp2p/ISfService.cs | 45 ++++++++++ .../Services/Ldn/Lp2p/ISfServiceMonitor.cs | 86 +++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfService.cs create mode 100644 src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfServiceMonitor.cs diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/IServiceCreator.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/IServiceCreator.cs index 797a7a9bd..705e5f258 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/IServiceCreator.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/IServiceCreator.cs @@ -5,5 +5,23 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.Lp2p class IServiceCreator : IpcService { public IServiceCreator(ServiceCtx context) { } + + [CommandCmif(0)] + // CreateNetworkService(pid, u64, u32) -> object + public ResultCode CreateNetworkService(ServiceCtx context) + { + MakeObject(context, new ISfService(context)); + + return ResultCode.Success; + } + + [CommandCmif(8)] + // CreateNetworkServiceMonitor(pid, u64) -> object + public ResultCode CreateNetworkServiceMonitor(ServiceCtx context) + { + MakeObject(context, new ISfServiceMonitor(context)); + + return ResultCode.Success; + } } } diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfService.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfService.cs new file mode 100644 index 000000000..d48a88978 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfService.cs @@ -0,0 +1,45 @@ +using Ryujinx.Common.Logging; + +namespace Ryujinx.HLE.HOS.Services.Ldn.Lp2p +{ + class ISfService : IpcService + { + public ISfService(ServiceCtx context) { } + + [CommandCmif(0)] + // Initialize() + public ResultCode Initialize(ServiceCtx context) + { + context.ResponseData.Write(0); + + return ResultCode.Success; + } + + [CommandCmif(768)] + // CreateGroup(buffer) + public ResultCode SendToOtherGroup(ServiceCtx context) + { + Logger.Stub?.PrintStub(LogClass.ServiceLdn); + + return ResultCode.Success; + } + + [CommandCmif(1544)] + // RecvFromOtherGroup(u32, buffer) -> (nn::lp2p::MacAddress, u16, s16, u32, s32) + public ResultCode RecvFromOtherGroup(ServiceCtx context) + { + Logger.Stub?.PrintStub(LogClass.ServiceLdn); + + return ResultCode.Success; + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfServiceMonitor.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfServiceMonitor.cs new file mode 100644 index 000000000..d3a8bead2 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfServiceMonitor.cs @@ -0,0 +1,86 @@ +using Ryujinx.Common.Logging; +using Ryujinx.HLE.HOS.Ipc; +using Ryujinx.HLE.HOS.Kernel.Threading; +using Ryujinx.Horizon.Common; +using System; + +namespace Ryujinx.HLE.HOS.Services.Ldn.Lp2p +{ + class ISfServiceMonitor : IpcService + { + private readonly KEvent _stateChangeEvent; + private readonly KEvent _jointEvent; + private int _stateChangeEventHandle = 0; + private int _jointEventHandle = 0; + + public ISfServiceMonitor(ServiceCtx context) + { + _stateChangeEvent = new KEvent(context.Device.System.KernelContext); + _jointEvent = new KEvent(context.Device.System.KernelContext); + } + + [CommandCmif(0)] + // Initialize() + public ResultCode Initialize(ServiceCtx context) + { + context.ResponseData.Write(0); + + return ResultCode.Success; + } + + [CommandCmif(256)] + // AttachNetworkInterfaceStateChangeEvent() -> handle + public ResultCode AttachNetworkInterfaceStateChangeEvent(ServiceCtx context) + { + if (context.Process.HandleTable.GenerateHandle(_stateChangeEvent.ReadableEvent, out _stateChangeEventHandle) != Result.Success) + { + throw new InvalidOperationException("Out of handles!"); + } + + context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_stateChangeEventHandle); + + return ResultCode.Success; + } + + [CommandCmif(288)] + // GetGroupInfo(buffer) + public ResultCode GetGroupInfo(ServiceCtx context) + { + Logger.Stub?.PrintStub(LogClass.ServiceLdn); + + return ResultCode.Success; + } + + [CommandCmif(296)] + // GetGroupInfo2(buffer, buffer) + public ResultCode GetGroupInfo2(ServiceCtx context) + { + Logger.Stub?.PrintStub(LogClass.ServiceLdn); + + return ResultCode.Success; + } + + [CommandCmif(312)] + // GetIpConfig(buffer, 0x1a>) + public ResultCode GetIpConfig(ServiceCtx context) + { + Logger.Stub?.PrintStub(LogClass.ServiceLdn); + + return ResultCode.Success; + } + + [CommandCmif(328)] + // AttachNetworkInterfaceStateChangeEvent() -> handle + public ResultCode AttachJoinEvent(ServiceCtx context) + { + if (context.Process.HandleTable.GenerateHandle(_jointEvent.ReadableEvent, out _jointEventHandle) != Result.Success) + { + throw new InvalidOperationException("Out of handles!"); + } + + context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_jointEventHandle); + + return ResultCode.Success; + } + } +} -- 2.47.1 From 17483aad247c6c7ee97337e1a11140de70aebda9 Mon Sep 17 00:00:00 2001 From: Luke Warner <65521430+LukeWarnut@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:42:07 -0500 Subject: [PATCH 094/722] ARMeilleure: Allow TPIDR2_EL0 to be set properly (#339) --- src/ARMeilleure/Instructions/InstEmitSystem.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ARMeilleure/Instructions/InstEmitSystem.cs b/src/ARMeilleure/Instructions/InstEmitSystem.cs index fbf3b4a70..11c1d0328 100644 --- a/src/ARMeilleure/Instructions/InstEmitSystem.cs +++ b/src/ARMeilleure/Instructions/InstEmitSystem.cs @@ -88,7 +88,7 @@ namespace ARMeilleure.Instructions EmitSetTpidrEl0(context); return; case 0b11_011_1101_0000_101: - EmitGetTpidr2El0(context); + EmitSetTpidr2El0(context); return; default: @@ -291,5 +291,16 @@ namespace ARMeilleure.Instructions context.Store(context.Add(nativeContext, Const((ulong)NativeContext.GetTpidrEl0Offset())), value); } + + private static void EmitSetTpidr2El0(ArmEmitterContext context) + { + OpCodeSystem op = (OpCodeSystem)context.CurrOp; + + Operand value = GetIntOrZR(context, op.Rt); + + Operand nativeContext = context.LoadArgument(OperandType.I64, 0); + + context.Store(context.Add(nativeContext, Const((ulong)NativeContext.GetTpidr2El0Offset())), value); + } } } -- 2.47.1 From 08b7257be5ca27b0f4fdd0269d325dd58f68a4c5 Mon Sep 17 00:00:00 2001 From: Jacobwasbeast <38381609+Jacobwasbeast@users.noreply.github.com> Date: Mon, 2 Dec 2024 23:40:02 -0600 Subject: [PATCH 095/722] Add the Cabinet Applet (#340) This adds the missing Cabinet Applet, which allows for formatting Amiibos and changing their names. --- src/Ryujinx.HLE/HOS/Applets/AppletManager.cs | 3 + .../HOS/Applets/Cabinet/CabinetApplet.cs | 195 ++++++++++++++++++ .../HOS/Services/Nfc/Nfp/VirtualAmiibo.cs | 7 + src/Ryujinx.HLE/UI/IHostUIHandler.cs | 12 ++ src/Ryujinx.Headless.SDL2/WindowBase.cs | 14 ++ src/Ryujinx/Assets/Locales/ar_SA.json | 3 + src/Ryujinx/Assets/Locales/de_DE.json | 3 + src/Ryujinx/Assets/Locales/el_GR.json | 3 + src/Ryujinx/Assets/Locales/en_US.json | 3 + src/Ryujinx/Assets/Locales/es_ES.json | 3 + src/Ryujinx/Assets/Locales/fr_FR.json | 3 + src/Ryujinx/Assets/Locales/he_IL.json | 3 + src/Ryujinx/Assets/Locales/it_IT.json | 3 + src/Ryujinx/Assets/Locales/ja_JP.json | 3 + src/Ryujinx/Assets/Locales/ko_KR.json | 3 + src/Ryujinx/Assets/Locales/pl_PL.json | 3 + src/Ryujinx/Assets/Locales/pt_BR.json | 3 + src/Ryujinx/Assets/Locales/ru_RU.json | 3 + src/Ryujinx/Assets/Locales/th_TH.json | 3 + src/Ryujinx/Assets/Locales/tr_TR.json | 3 + src/Ryujinx/Assets/Locales/uk_UA.json | 3 + src/Ryujinx/Assets/Locales/zh_CN.json | 3 + src/Ryujinx/Assets/Locales/zh_TW.json | 3 + src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 50 +++++ 24 files changed, 335 insertions(+) create mode 100644 src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs diff --git a/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs b/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs index da4d2e51b..a2ddd573d 100644 --- a/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs +++ b/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs @@ -1,5 +1,6 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Applets.Browser; +using Ryujinx.HLE.HOS.Applets.Cabinet; using Ryujinx.HLE.HOS.Applets.Dummy; using Ryujinx.HLE.HOS.Applets.Error; using Ryujinx.HLE.HOS.Services.Am.AppletAE; @@ -31,6 +32,8 @@ namespace Ryujinx.HLE.HOS.Applets case AppletId.MiiEdit: Logger.Warning?.Print(LogClass.Application, $"Please use the MiiEdit inside File/Open Applet"); return new DummyApplet(system); + case AppletId.Cabinet: + return new CabinetApplet(system); } Logger.Warning?.Print(LogClass.Application, $"Applet {applet} not implemented!"); diff --git a/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs new file mode 100644 index 000000000..f4f935d34 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs @@ -0,0 +1,195 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Common.Memory; +using Ryujinx.HLE.HOS.Services.Am.AppletAE; +using Ryujinx.HLE.HOS.Services.Hid.HidServer; +using Ryujinx.HLE.HOS.Services.Hid; +using Ryujinx.HLE.HOS.Services.Nfc.Nfp; +using Ryujinx.HLE.HOS.Services.Nfc.Nfp.NfpManager; +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; + +namespace Ryujinx.HLE.HOS.Applets.Cabinet +{ + internal unsafe class CabinetApplet : IApplet + { + private readonly Horizon _system; + private AppletSession _normalSession; + + public event EventHandler AppletStateChanged; + + public CabinetApplet(Horizon system) + { + _system = system; + } + + public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession) + { + _normalSession = normalSession; + + byte[] launchParams = _normalSession.Pop(); + byte[] startParamBytes = _normalSession.Pop(); + + StartParamForAmiiboSettings startParam = IApplet.ReadStruct(startParamBytes); + + Logger.Stub?.PrintStub(LogClass.ServiceAm, $"CabinetApplet Start Type: {startParam.Type}"); + + switch (startParam.Type) + { + case 0: + StartNicknameAndOwnerSettings(ref startParam); + break; + case 1: + case 3: + StartFormatter(ref startParam); + break; + default: + Logger.Error?.Print(LogClass.ServiceAm, $"Unknown AmiiboSettings type: {startParam.Type}"); + break; + } + + // Prepare the response + ReturnValueForAmiiboSettings returnValue = new() + { + AmiiboSettingsReturnFlag = (byte)AmiiboSettingsReturnFlag.HasRegisterInfo, + DeviceHandle = new DeviceHandle + { + Handle = 0 // Dummy device handle + }, + RegisterInfo = startParam.RegisterInfo + }; + + // Push the response + _normalSession.Push(BuildResponse(returnValue)); + AppletStateChanged?.Invoke(this, null); + + _system.ReturnFocus(); + + return ResultCode.Success; + } + + public ResultCode GetResult() + { + _system.Device.System.NfpDevices.RemoveAt(0); + return ResultCode.Success; + } + + private void StartFormatter(ref StartParamForAmiiboSettings startParam) + { + // Initialize RegisterInfo + startParam.RegisterInfo = new RegisterInfo(); + } + + private void StartNicknameAndOwnerSettings(ref StartParamForAmiiboSettings startParam) + { + _system.Device.UIHandler.DisplayCabinetDialog(out string newName); + byte[] nameBytes = Encoding.UTF8.GetBytes(newName); + Array41 nickName = new Array41(); + nameBytes.CopyTo(nickName.AsSpan()); + startParam.RegisterInfo.Nickname = nickName; + NfpDevice devicePlayer1 = new() + { + NpadIdType = NpadIdType.Player1, + Handle = HidUtils.GetIndexFromNpadIdType(NpadIdType.Player1), + State = NfpDeviceState.SearchingForTag, + }; + _system.Device.System.NfpDevices.Add(devicePlayer1); + _system.Device.UIHandler.DisplayCabinetMessageDialog(); + string amiiboId = string.Empty; + bool scanned = false; + while (!scanned) + { + for (int i = 0; i < _system.Device.System.NfpDevices.Count; i++) + { + if (_system.Device.System.NfpDevices[i].State == NfpDeviceState.TagFound) + { + amiiboId = _system.Device.System.NfpDevices[i].AmiiboId; + scanned = true; + } + } + } + VirtualAmiibo.UpdateNickName(amiiboId, newName); + } + + private static byte[] BuildResponse(ReturnValueForAmiiboSettings returnValue) + { + int size = Unsafe.SizeOf(); + byte[] bytes = new byte[size]; + + fixed (byte* bytesPtr = bytes) + { + Unsafe.Write(bytesPtr, returnValue); + } + + return bytes; + } + + public static T ReadStruct(byte[] data) where T : unmanaged + { + if (data.Length < Unsafe.SizeOf()) + { + throw new ArgumentException("Not enough data to read the struct"); + } + + fixed (byte* dataPtr = data) + { + return Unsafe.Read(dataPtr); + } + } + + #region Structs + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public unsafe struct TagInfo + { + public fixed byte Data[0x58]; + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public unsafe struct StartParamForAmiiboSettings + { + public byte ZeroValue; // Left at zero by sdknso + public byte Type; + public byte Flags; + public byte AmiiboSettingsStartParamOffset28; + public ulong AmiiboSettingsStartParam0; + + public TagInfo TagInfo; // Only enabled when flags bit 1 is set + public RegisterInfo RegisterInfo; // Only enabled when flags bit 2 is set + + public fixed byte StartParamExtraData[0x20]; + + public fixed byte Reserved[0x24]; + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public unsafe struct ReturnValueForAmiiboSettings + { + public byte AmiiboSettingsReturnFlag; + private byte Padding1; + private byte Padding2; + private byte Padding3; + public DeviceHandle DeviceHandle; + public TagInfo TagInfo; + public RegisterInfo RegisterInfo; + public fixed byte IgnoredBySdknso[0x24]; + } + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct DeviceHandle + { + public ulong Handle; + } + + public enum AmiiboSettingsReturnFlag : byte + { + Cancel = 0, + HasTagInfo = 2, + HasRegisterInfo = 4, + HasTagInfoAndRegisterInfo = 6 + } + + #endregion + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs index 7ce749d1a..0c685471c 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs @@ -93,6 +93,13 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp return registerInfo; } + public static void UpdateNickName(string amiiboId, string newNickName) + { + VirtualAmiiboFile virtualAmiiboFile = LoadAmiiboFile(amiiboId); + virtualAmiiboFile.NickName = newNickName; + SaveAmiiboFile(virtualAmiiboFile); + } + public static bool OpenApplicationArea(string amiiboId, uint applicationAreaId) { VirtualAmiiboFile virtualAmiiboFile = LoadAmiiboFile(amiiboId); diff --git a/src/Ryujinx.HLE/UI/IHostUIHandler.cs b/src/Ryujinx.HLE/UI/IHostUIHandler.cs index 8debfcca0..88af83735 100644 --- a/src/Ryujinx.HLE/UI/IHostUIHandler.cs +++ b/src/Ryujinx.HLE/UI/IHostUIHandler.cs @@ -24,6 +24,18 @@ namespace Ryujinx.HLE.UI /// True when OK is pressed, False otherwise. bool DisplayMessageDialog(ControllerAppletUIArgs args); + /// + /// Displays an Input Dialog box to the user so they can enter the Amiibo's new name + /// + /// Text that the user entered. Set to `null` on internal errors + /// True when OK is pressed, False otherwise. Also returns True on internal errors + bool DisplayCabinetDialog(out string userText); + + /// + /// Displays a Message Dialog box to the user to notify them to scan the Amiibo. + /// + void DisplayCabinetMessageDialog(); + /// /// Tell the UI that we need to transition to another program. /// diff --git a/src/Ryujinx.Headless.SDL2/WindowBase.cs b/src/Ryujinx.Headless.SDL2/WindowBase.cs index 2479ec127..fbe7cb49c 100644 --- a/src/Ryujinx.Headless.SDL2/WindowBase.cs +++ b/src/Ryujinx.Headless.SDL2/WindowBase.cs @@ -1,4 +1,5 @@ using Humanizer; +using LibHac.Tools.Fs; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Logging; @@ -485,6 +486,19 @@ namespace Ryujinx.Headless.SDL2 return true; } + public bool DisplayCabinetDialog(out string userText) + { + // SDL2 doesn't support input dialogs + userText = "Ryujinx"; + + return true; + } + + public void DisplayCabinetMessageDialog() + { + SDL_ShowSimpleMessageBox(SDL_MessageBoxFlags.SDL_MESSAGEBOX_INFORMATION, "Cabinet Dialog", "Please scan your Amiibo now.", WindowHandle); + } + public bool DisplayMessageDialog(ControllerAppletUIArgs args) { if (_ignoreControllerApplet) return false; diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index 34b4f7212..c1ee30f19 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -702,6 +702,9 @@ "Never": "مطلقا", "SwkbdMinCharacters": "يجب أن يبلغ طوله {0} حرفا على الأقل", "SwkbdMinRangeCharacters": "يجب أن يتكون من {0}-{1} حرفا", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "لوحة المفاتيح البرمجية", "SoftwareKeyboardModeNumeric": "يجب أن يكون 0-9 أو '.' فقط", "SoftwareKeyboardModeAlphabet": "يجب أن تكون الأحرف غير CJK فقط", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index 013120738..e3f6b1be1 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -702,6 +702,9 @@ "Never": "Niemals", "SwkbdMinCharacters": "Muss mindestens {0} Zeichen lang sein", "SwkbdMinRangeCharacters": "Muss {0}-{1} Zeichen lang sein", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Software-Tastatur", "SoftwareKeyboardModeNumeric": "Darf nur 0-9 oder \".\" sein", "SoftwareKeyboardModeAlphabet": "Keine CJK-Zeichen", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index c5d6a60e6..e93e9310a 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -702,6 +702,9 @@ "Never": "Ποτέ", "SwkbdMinCharacters": "Πρέπει να έχει μήκος τουλάχιστον {0} χαρακτήρες", "SwkbdMinRangeCharacters": "Πρέπει να έχει μήκος {0}-{1} χαρακτήρες", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Εικονικό Πληκτρολόγιο", "SoftwareKeyboardModeNumeric": "Πρέπει να είναι 0-9 ή '.' μόνο", "SoftwareKeyboardModeAlphabet": "Πρέπει να μην είναι μόνο χαρακτήρες CJK", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index b7ab8969b..ee0d03171 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -714,6 +714,9 @@ "Never": "Never", "SwkbdMinCharacters": "Must be at least {0} characters long", "SwkbdMinRangeCharacters": "Must be {0}-{1} characters long", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Software Keyboard", "SoftwareKeyboardModeNumeric": "Must be 0-9 or '.' only", "SoftwareKeyboardModeAlphabet": "Must be non CJK-characters only", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index 730bd7961..0a68d44c6 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -702,6 +702,9 @@ "Never": "Nunca", "SwkbdMinCharacters": "Debe tener al menos {0} caracteres", "SwkbdMinRangeCharacters": "Debe tener {0}-{1} caracteres", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Teclado de software", "SoftwareKeyboardModeNumeric": "Debe ser sólo 0-9 o '.'", "SoftwareKeyboardModeAlphabet": "Solo deben ser caracteres no CJK", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index 947c48eab..471dfbe5e 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -702,6 +702,9 @@ "Never": "Jamais", "SwkbdMinCharacters": "Doit comporter au moins {0} caractères", "SwkbdMinRangeCharacters": "Doit comporter entre {0} et {1} caractères", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Clavier logiciel", "SoftwareKeyboardModeNumeric": "Doit être 0-9 ou '.' uniquement", "SoftwareKeyboardModeAlphabet": "Doit être uniquement des caractères non CJK", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index 88b6a059a..dbacf5ea1 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -702,6 +702,9 @@ "Never": "אף פעם", "SwkbdMinCharacters": "לפחות {0} תווים", "SwkbdMinRangeCharacters": "באורך {0}-{1} תווים", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "מקלדת וירטואלית", "SoftwareKeyboardModeNumeric": "חייב להיות בין 0-9 או '.' בלבד", "SoftwareKeyboardModeAlphabet": "מחויב להיות ללא אותיות CJK", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index e689a2cd9..61ea2a355 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -702,6 +702,9 @@ "Never": "Mai", "SwkbdMinCharacters": "Non può avere meno di {0} caratteri", "SwkbdMinRangeCharacters": "Può avere da {0} a {1} caratteri", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Tastiera software", "SoftwareKeyboardModeNumeric": "Deve essere solo 0-9 o '.'", "SoftwareKeyboardModeAlphabet": "Deve essere solo caratteri non CJK", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index d55d1449d..9acd1c486 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -702,6 +702,9 @@ "Never": "決して", "SwkbdMinCharacters": "最低 {0} 文字必要です", "SwkbdMinRangeCharacters": "{0}-{1} 文字にしてください", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "ソフトウェアキーボード", "SoftwareKeyboardModeNumeric": "0-9 または '.' のみでなければなりません", "SoftwareKeyboardModeAlphabet": "CJK文字以外のみ", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 8a3799e15..86592aa69 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -702,6 +702,9 @@ "Never": "절대 안 함", "SwkbdMinCharacters": "{0}자 이상이어야 함", "SwkbdMinRangeCharacters": "{0}-{1}자 길이여야 함", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "소프트웨어 키보드", "SoftwareKeyboardModeNumeric": "0-9 또는 '.'만 가능", "SoftwareKeyboardModeAlphabet": "CJK 문자가 아닌 문자만 가능", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index c3202020f..1ed0988f9 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -702,6 +702,9 @@ "Never": "Nigdy", "SwkbdMinCharacters": "Musi mieć co najmniej {0} znaków", "SwkbdMinRangeCharacters": "Musi mieć długość od {0}-{1} znaków", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Klawiatura Oprogramowania", "SoftwareKeyboardModeNumeric": "Może składać się jedynie z 0-9 lub '.'", "SoftwareKeyboardModeAlphabet": "Nie może zawierać znaków CJK", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index 71992434b..676d89d96 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -701,6 +701,9 @@ "Never": "Nunca", "SwkbdMinCharacters": "Deve ter pelo menos {0} caracteres", "SwkbdMinRangeCharacters": "Deve ter entre {0}-{1} caracteres", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Teclado por Software", "SoftwareKeyboardModeNumeric": "Deve ser somente 0-9 ou '.'", "SoftwareKeyboardModeAlphabet": "Apenas devem ser caracteres não CJK.", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index f0218ffcc..ea4dcc8c8 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -702,6 +702,9 @@ "Never": "Никогда", "SwkbdMinCharacters": "Должно быть не менее {0} символов.", "SwkbdMinRangeCharacters": "Должно быть {0}-{1} символов", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Программная клавиатура", "SoftwareKeyboardModeNumeric": "Должно быть в диапазоне 0-9 или '.'", "SoftwareKeyboardModeAlphabet": "Не должно быть CJK-символов", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index 02ddda899..fa4c1d334 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -702,6 +702,9 @@ "Never": "ไม่ต้อง", "SwkbdMinCharacters": "ต้องมีความยาวของตัวอักษรอย่างน้อย {0} ตัว", "SwkbdMinRangeCharacters": "ต้องมีความยาวของตัวอักษร {0}-{1} ตัว", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "ซอฟต์แวร์คีย์บอร์ด", "SoftwareKeyboardModeNumeric": "ต้องเป็น 0-9 หรือ '.' เท่านั้น", "SoftwareKeyboardModeAlphabet": "ต้องเป็นตัวอักษรที่ไม่ใช่ประเภท CJK เท่านั้น", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index a65064a38..475086e44 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -702,6 +702,9 @@ "Never": "Hiçbir Zaman", "SwkbdMinCharacters": "En az {0} karakter uzunluğunda olmalı", "SwkbdMinRangeCharacters": "{0}-{1} karakter uzunluğunda olmalı", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Yazılım Klavyesi", "SoftwareKeyboardModeNumeric": "Sadece 0-9 veya '.' olabilir", "SoftwareKeyboardModeAlphabet": "Sadece CJK-characters olmayan karakterler olabilir", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index ef26ace65..68679a9b2 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -702,6 +702,9 @@ "Never": "Ніколи", "SwkbdMinCharacters": "Мінімальна кількість символів: {0}", "SwkbdMinRangeCharacters": "Має бути {0}-{1} символів", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "Програмна клавіатура", "SoftwareKeyboardModeNumeric": "Повинно бути лише 0-9 або “.”", "SoftwareKeyboardModeAlphabet": "Повинно бути лише не CJK-символи", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index dc3f27b5a..741b5b370 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -702,6 +702,9 @@ "Never": "从不", "SwkbdMinCharacters": "不少于 {0} 个字符", "SwkbdMinRangeCharacters": "必须为 {0}-{1} 个字符", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "软键盘", "SoftwareKeyboardModeNumeric": "只能输入 0-9 或 \".\"", "SoftwareKeyboardModeAlphabet": "仅支持非中文字符", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index c33885784..aaf8170c0 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -702,6 +702,9 @@ "Never": "從不", "SwkbdMinCharacters": "長度必須至少為 {0} 個字元", "SwkbdMinRangeCharacters": "長度必須為 {0} 到 {1} 個字元", + "CabinetTitle": "Cabinet Dialog", + "CabinetDialog": "Enter your Amiibo's new name", + "CabinetScanDialog": "Please scan your Amiibo now.", "SoftwareKeyboard": "軟體鍵盤", "SoftwareKeyboardModeNumeric": "必須是 0 到 9 或「.」", "SoftwareKeyboardModeAlphabet": "必須是「非中日韓字元」 (non CJK)", diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index 2ebba7ac0..893ea95ac 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -7,6 +7,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; using Ryujinx.HLE; using Ryujinx.HLE.HOS.Applets; +using Ryujinx.HLE.HOS.Applets.SoftwareKeyboard; using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types; using Ryujinx.HLE.UI; using Ryujinx.UI.Common.Configuration; @@ -155,6 +156,55 @@ namespace Ryujinx.Ava.UI.Applet return error || okPressed; } + public bool DisplayCabinetDialog(out string userText) + { + ManualResetEvent dialogCloseEvent = new(false); + bool okPressed = false; + string inputText = "My Amiibo"; + Dispatcher.UIThread.InvokeAsync(async () => + { + try + { + _parent.ViewModel.AppHost.NpadManager.BlockInputUpdates(); + SoftwareKeyboardUIArgs args = new SoftwareKeyboardUIArgs(); + args.KeyboardMode = KeyboardMode.Default; + args.InitialText = "Ryujinx"; + args.StringLengthMin = 1; + args.StringLengthMax = 25; + (UserResult result, string userInput) = await SwkbdAppletDialog.ShowInputDialog(LocaleManager.Instance[LocaleKeys.CabinetDialog], args); + if (result == UserResult.Ok) + { + inputText = userInput; + okPressed = true; + } + } + finally + { + dialogCloseEvent.Set(); + } + }); + dialogCloseEvent.WaitOne(); + _parent.ViewModel.AppHost.NpadManager.UnblockInputUpdates(); + userText = inputText; + return okPressed; + } + + public void DisplayCabinetMessageDialog() + { + ManualResetEvent dialogCloseEvent = new(false); + Dispatcher.UIThread.InvokeAsync(async () => + { + dialogCloseEvent.Set(); + await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.CabinetScanDialog], + string.Empty, + LocaleManager.Instance[LocaleKeys.InputDialogOk], + string.Empty, + LocaleManager.Instance[LocaleKeys.CabinetTitle]); + }); + dialogCloseEvent.WaitOne(); + } + + public void ExecuteProgram(Switch device, ProgramSpecifyKind kind, ulong value) { device.Configuration.UserChannelPersistence.ExecuteProgram(kind, value); -- 2.47.1 From 07690e452726d64054dca239fd3e0b0a6e333287 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 4 Dec 2024 02:24:40 -0600 Subject: [PATCH 096/722] chore: applets: Cleanup redundant ReadStruct implementations & provide a default implementation for IApplet#GetResult. --- src/Ryujinx.HLE/HOS/Applets/AppletManager.cs | 4 +--- .../HOS/Applets/Browser/BrowserApplet.cs | 7 ------- .../HOS/Applets/Cabinet/CabinetApplet.cs | 13 ------------- .../HOS/Applets/Controller/ControllerApplet.cs | 5 ----- src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs | 12 ++++-------- src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs | 5 ----- src/Ryujinx.HLE/HOS/Applets/IApplet.cs | 2 +- .../HOS/Applets/PlayerSelect/PlayerSelectApplet.cs | 5 ----- .../SoftwareKeyboard/SoftwareKeyboardApplet.cs | 5 ----- .../HOS/Applets/SoftwareKeyboard/TRef.cs | 2 +- 10 files changed, 7 insertions(+), 53 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs b/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs index a2ddd573d..5895c67bb 100644 --- a/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs +++ b/src/Ryujinx.HLE/HOS/Applets/AppletManager.cs @@ -24,11 +24,9 @@ namespace Ryujinx.HLE.HOS.Applets case AppletId.SoftwareKeyboard: return new SoftwareKeyboardApplet(system); case AppletId.LibAppletWeb: - return new BrowserApplet(system); case AppletId.LibAppletShop: - return new BrowserApplet(system); case AppletId.LibAppletOff: - return new BrowserApplet(system); + return new BrowserApplet(); case AppletId.MiiEdit: Logger.Warning?.Print(LogClass.Application, $"Please use the MiiEdit inside File/Open Applet"); return new DummyApplet(system); diff --git a/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserApplet.cs index 6afbe4a72..c5f13dab3 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserApplet.cs @@ -18,13 +18,6 @@ namespace Ryujinx.HLE.HOS.Applets.Browser private List _arguments; private ShimKind _shimKind; - public BrowserApplet(Horizon system) { } - - public ResultCode GetResult() - { - return ResultCode.Success; - } - public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession) { _normalSession = normalSession; diff --git a/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs index f4f935d34..294b8d1f6 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs @@ -125,19 +125,6 @@ namespace Ryujinx.HLE.HOS.Applets.Cabinet return bytes; } - public static T ReadStruct(byte[] data) where T : unmanaged - { - if (data.Length < Unsafe.SizeOf()) - { - throw new ArgumentException("Not enough data to read the struct"); - } - - fixed (byte* dataPtr = data) - { - return Unsafe.Read(dataPtr); - } - } - #region Structs [StructLayout(LayoutKind.Sequential, Pack = 1)] diff --git a/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs index 5ec9d4b08..3a7b29ab5 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs @@ -117,11 +117,6 @@ namespace Ryujinx.HLE.HOS.Applets return ResultCode.Success; } - public ResultCode GetResult() - { - return ResultCode.Success; - } - private static byte[] BuildResponse(ControllerSupportResultInfo result) { using MemoryStream stream = MemoryStreamManager.Shared.GetStream(); diff --git a/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs index 75df7a373..6b16aee7b 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Dummy/DummyApplet.cs @@ -11,11 +11,14 @@ namespace Ryujinx.HLE.HOS.Applets.Dummy { private readonly Horizon _system; private AppletSession _normalSession; + public event EventHandler AppletStateChanged; + public DummyApplet(Horizon system) { _system = system; } + public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession) { _normalSession = normalSession; @@ -24,10 +27,7 @@ namespace Ryujinx.HLE.HOS.Applets.Dummy _system.ReturnFocus(); return ResultCode.Success; } - private static T ReadStruct(byte[] data) where T : struct - { - return MemoryMarshal.Read(data.AsSpan()); - } + private static byte[] BuildResponse() { using MemoryStream stream = MemoryStreamManager.Shared.GetStream(); @@ -35,9 +35,5 @@ namespace Ryujinx.HLE.HOS.Applets.Dummy writer.Write((ulong)ResultCode.Success); return stream.ToArray(); } - public ResultCode GetResult() - { - return ResultCode.Success; - } } } diff --git a/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs index 87d88fc65..0e043cc45 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs @@ -203,10 +203,5 @@ namespace Ryujinx.HLE.HOS.Applets.Error _horizon.Device.UIHandler.DisplayErrorAppletDialog($"Error Number: {applicationErrorArg.ErrorNumber} (Details)", "\n" + detailsText, buttons.ToArray()); } } - - public ResultCode GetResult() - { - return ResultCode.Success; - } } } diff --git a/src/Ryujinx.HLE/HOS/Applets/IApplet.cs b/src/Ryujinx.HLE/HOS/Applets/IApplet.cs index bc5353841..4500b2f63 100644 --- a/src/Ryujinx.HLE/HOS/Applets/IApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/IApplet.cs @@ -13,7 +13,7 @@ namespace Ryujinx.HLE.HOS.Applets ResultCode Start(AppletSession normalSession, AppletSession interactiveSession); - ResultCode GetResult(); + ResultCode GetResult() => ResultCode.Success; bool DrawTo(RenderingSurfaceInfo surfaceInfo, IVirtualMemoryManager destination, ulong position) => false; diff --git a/src/Ryujinx.HLE/HOS/Applets/PlayerSelect/PlayerSelectApplet.cs b/src/Ryujinx.HLE/HOS/Applets/PlayerSelect/PlayerSelectApplet.cs index ccc761ba1..05bddc76f 100644 --- a/src/Ryujinx.HLE/HOS/Applets/PlayerSelect/PlayerSelectApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/PlayerSelect/PlayerSelectApplet.cs @@ -37,11 +37,6 @@ namespace Ryujinx.HLE.HOS.Applets return ResultCode.Success; } - public ResultCode GetResult() - { - return ResultCode.Success; - } - private byte[] BuildResponse() { UserProfile currentUser = _system.AccountManager.LastOpenedUser; diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs index e04fc64fe..9ec202357 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs @@ -144,11 +144,6 @@ namespace Ryujinx.HLE.HOS.Applets } } - public ResultCode GetResult() - { - return ResultCode.Success; - } - private bool IsKeyboardActive() { return _backgroundState >= InlineKeyboardState.Appearing && _backgroundState < InlineKeyboardState.Disappearing; diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TRef.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TRef.cs index 32d9e68da..51571401f 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TRef.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TRef.cs @@ -2,7 +2,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard { /// /// Wraps a type in a class so it gets stored in the GC managed heap. This is used as communication mechanism - /// between classed that need to be disposed and, thus, can't share their references. + /// between classes that need to be disposed and, thus, can't share their references. /// /// The internal type. class TRef -- 2.47.1 From 1d0152b9617a8918c7db3d01873bbf46c546c969 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 4 Dec 2024 03:37:21 -0600 Subject: [PATCH 097/722] UI: Move Shader Compilation hint, graphics backend, and GPU manufacturer to the right side of the status bar, next to firmware version. Removed the "Game:" prefix in front of FPS. --- Directory.Packages.props | 2 +- .../LdnRyu/Proxy/P2pProxyServer.cs | 12 ++++- src/Ryujinx/AppHost.cs | 2 +- src/Ryujinx/Assets/Locales/ar_SA.json | 1 - src/Ryujinx/Assets/Locales/de_DE.json | 1 - src/Ryujinx/Assets/Locales/el_GR.json | 1 - src/Ryujinx/Assets/Locales/en_US.json | 1 - src/Ryujinx/Assets/Locales/es_ES.json | 1 - src/Ryujinx/Assets/Locales/fr_FR.json | 1 - src/Ryujinx/Assets/Locales/he_IL.json | 1 - src/Ryujinx/Assets/Locales/it_IT.json | 1 - src/Ryujinx/Assets/Locales/ja_JP.json | 1 - src/Ryujinx/Assets/Locales/ko_KR.json | 1 - src/Ryujinx/Assets/Locales/pl_PL.json | 1 - src/Ryujinx/Assets/Locales/pt_BR.json | 1 - src/Ryujinx/Assets/Locales/ru_RU.json | 1 - src/Ryujinx/Assets/Locales/th_TH.json | 1 - src/Ryujinx/Assets/Locales/tr_TR.json | 1 - src/Ryujinx/Assets/Locales/uk_UA.json | 1 - src/Ryujinx/Assets/Locales/zh_CN.json | 1 - src/Ryujinx/Assets/Locales/zh_TW.json | 1 - .../UI/ViewModels/MainWindowViewModel.cs | 10 ++--- .../UI/Views/Main/MainMenuBarView.axaml.cs | 3 +- .../UI/Views/Main/MainStatusBarView.axaml | 45 +++++++++++-------- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 7 ++- src/Ryujinx/Updater.cs | 11 +++-- 26 files changed, 52 insertions(+), 58 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index ffb5f2ead..7059af0e0 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -38,7 +38,7 @@ - + diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs index 598fb654f..fbce5c10c 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs @@ -1,3 +1,5 @@ +using Gommon; +using Humanizer; using NetCoreServer; using Open.Nat; using Ryujinx.Common.Logging; @@ -153,7 +155,10 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy if (_publicPort != 0) { - _ = Task.Delay(PortLeaseRenew * 1000, _disposedCancellation.Token).ContinueWith((task) => Task.Run(RefreshLease)); + _ = Executor.ExecuteAfterDelayAsync( + PortLeaseRenew.Seconds(), + _disposedCancellation.Token, + RefreshLease); } _natDevice = device; @@ -257,7 +262,10 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy } - _ = Task.Delay(PortLeaseRenew, _disposedCancellation.Token).ContinueWith((task) => Task.Run(RefreshLease)); + _ = Executor.ExecuteAfterDelayAsync( + PortLeaseRenew.Milliseconds(), + _disposedCancellation.Token, + RefreshLease); } public bool TryRegisterUser(P2pProxySession session, ExternalProxyConfig config) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 5789737d6..9a7f82661 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -1137,7 +1137,7 @@ namespace Ryujinx.Ava LocaleManager.Instance[LocaleKeys.VolumeShort] + $": {(int)(Device.GetVolume() * 100)}%", dockedMode, ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(), - LocaleManager.Instance[LocaleKeys.Game] + $": {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)", + $"{Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)", $"FIFO: {Device.Statistics.GetFifoPercent():00.00} %", _displayCount)); } diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index c1ee30f19..412695af6 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "إضافة ملفات جديدة...", "UpdaterExtracting": "استخراج التحديث...", "UpdaterDownloading": "تحميل التحديث...", - "Game": "لعبة", "Docked": "تركيب بالمنصة", "Handheld": "محمول", "ConnectionError": "خطأ في الاتصال", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index e3f6b1be1..76e8dfadd 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "Neue Dateien hinzufügen...", "UpdaterExtracting": "Update extrahieren...", "UpdaterDownloading": "Update herunterladen...", - "Game": "Spiel", "Docked": "Docked", "Handheld": "Handheld", "ConnectionError": "Verbindungsfehler.", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index e93e9310a..0409297ac 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "Προσθήκη Νέων Αρχείων...", "UpdaterExtracting": "Εξαγωγή Ενημέρωσης...", "UpdaterDownloading": "Λήψη Ενημέρωσης...", - "Game": "Παιχνίδι", "Docked": "Προσκολλημένο", "Handheld": "Χειροκίνητο", "ConnectionError": "Σφάλμα Σύνδεσης.", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index ee0d03171..ba183c8bd 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -730,7 +730,6 @@ "UpdaterAddingFiles": "Adding New Files...", "UpdaterExtracting": "Extracting Update...", "UpdaterDownloading": "Downloading Update...", - "Game": "Game", "Docked": "Docked", "Handheld": "Handheld", "ConnectionError": "Connection Error.", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index 0a68d44c6..b473b1197 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "Añadiendo nuevos archivos...", "UpdaterExtracting": "Extrayendo actualización...", "UpdaterDownloading": "Descargando actualización...", - "Game": "Juego", "Docked": "Dock/TV", "Handheld": "Portátil", "ConnectionError": "Error de conexión.", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index 471dfbe5e..0223e322e 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "Ajout des nouveaux fichiers...", "UpdaterExtracting": "Extraction de la mise à jour…", "UpdaterDownloading": "Téléchargement de la mise à jour...", - "Game": "Jeu", "Docked": "Mode station d'accueil", "Handheld": "Mode Portable", "ConnectionError": "Erreur de connexion.", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index dbacf5ea1..318068bf3 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "מוסיף קבצים חדשים...", "UpdaterExtracting": "מחלץ עדכון...", "UpdaterDownloading": "מוריד עדכון...", - "Game": "משחק", "Docked": "בתחנת עגינה", "Handheld": "נייד", "ConnectionError": "שגיאת חיבור", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index 61ea2a355..5ca17bc2e 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "Aggiunta dei nuovi file...", "UpdaterExtracting": "Estrazione dell'aggiornamento...", "UpdaterDownloading": "Download dell'aggiornamento...", - "Game": "Gioco", "Docked": "TV", "Handheld": "Portatile", "ConnectionError": "Errore di connessione.", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index 9acd1c486..ffa768c13 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "新規ファイルを追加中...", "UpdaterExtracting": "アップデートを展開中...", "UpdaterDownloading": "アップデートをダウンロード中...", - "Game": "ゲーム", "Docked": "ドッキング", "Handheld": "携帯", "ConnectionError": "接続エラー.", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 86592aa69..6b7140b3c 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "새 파일 추가...", "UpdaterExtracting": "업데이트 추출...", "UpdaterDownloading": "업데이트 내려받기 중...", - "Game": "게임", "Docked": "도킹", "Handheld": "휴대", "ConnectionError": "연결 오류가 발생했습니다.", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index 1ed0988f9..d87453ef2 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "Dodawanie Nowych Plików...", "UpdaterExtracting": "Wypakowywanie Aktualizacji...", "UpdaterDownloading": "Pobieranie Aktualizacji...", - "Game": "Gra", "Docked": "Zadokowany", "Handheld": "Przenośny", "ConnectionError": "Błąd Połączenia.", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index 676d89d96..c240bd804 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -717,7 +717,6 @@ "UpdaterAddingFiles": "Adicionando novos arquivos...", "UpdaterExtracting": "Extraíndo atualização...", "UpdaterDownloading": "Baixando atualização...", - "Game": "Jogo", "Docked": "TV", "Handheld": "Portátil", "ConnectionError": "Erro de conexão.", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index ea4dcc8c8..1046208fb 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "Добавление новых файлов...", "UpdaterExtracting": "Извлечение обновления...", "UpdaterDownloading": "Загрузка обновления...", - "Game": "Игра", "Docked": "Стационарный режим", "Handheld": "Портативный режим", "ConnectionError": "Ошибка соединения", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index fa4c1d334..e29004e10 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "กำลังเพิ่มไฟล์ใหม่...", "UpdaterExtracting": "กำลังแยกการอัปเดต...", "UpdaterDownloading": "กำลังดาวน์โหลดอัปเดต...", - "Game": "เกมส์", "Docked": "ด็อก", "Handheld": "แฮนด์เฮลด์", "ConnectionError": "การเชื่อมต่อล้มเหลว", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index 475086e44..101206210 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "Yeni Dosyalar Ekleniyor...", "UpdaterExtracting": "Güncelleme Ayrıştırılıyor...", "UpdaterDownloading": "Güncelleme İndiriliyor...", - "Game": "Oyun", "Docked": "Docked", "Handheld": "El tipi", "ConnectionError": "Bağlantı Hatası.", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 68679a9b2..89e565bf3 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "Додавання нових файлів...", "UpdaterExtracting": "Видобування оновлення...", "UpdaterDownloading": "Завантаження оновлення...", - "Game": "Гра", "Docked": "Док-станція", "Handheld": "Портативний", "ConnectionError": "Помилка з'єднання.", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index 741b5b370..66ac309de 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "安装更新中...", "UpdaterExtracting": "正在提取更新...", "UpdaterDownloading": "下载更新中...", - "Game": "游戏", "Docked": "主机模式", "Handheld": "掌机模式", "ConnectionError": "连接错误。", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index aaf8170c0..792ced42b 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -718,7 +718,6 @@ "UpdaterAddingFiles": "正在加入新檔案...", "UpdaterExtracting": "正在提取更新...", "UpdaterDownloading": "正在下載更新...", - "Game": "遊戲", "Docked": "底座模式", "Handheld": "手提模式", "ConnectionError": "連線錯誤。", diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 3672f8c71..1bfcd439b 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -70,7 +70,7 @@ namespace Ryujinx.Ava.UI.ViewModels private string _gpuStatusText; private string _shaderCountText; private bool _isAmiiboRequested; - private bool _showRightmostSeparator; + private bool _showShaderCompilationHint; private bool _isGameRunning; private bool _isFullScreen; private int _progressMaximum; @@ -275,12 +275,12 @@ namespace Ryujinx.Ava.UI.ViewModels public bool ShowFirmwareStatus => !ShowLoadProgress; - public bool ShowRightmostSeparator + public bool ShowShaderCompilationHint { - get => _showRightmostSeparator; + get => _showShaderCompilationHint; set { - _showRightmostSeparator = value; + _showShaderCompilationHint = value; OnPropertyChanged(); } @@ -1497,7 +1497,7 @@ namespace Ryujinx.Ava.UI.ViewModels VolumeStatusText = args.VolumeStatus; FifoStatusText = args.FifoStatus; - ShaderCountText = (ShowRightmostSeparator = args.ShaderCount > 0) + ShaderCountText = (ShowShaderCompilationHint = args.ShaderCount > 0) ? $"{LocaleManager.Instance[LocaleKeys.CompilingShaders]}: {args.ShaderCount}" : string.Empty; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 41b27e9c1..a3aa58f2c 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -200,7 +200,6 @@ namespace Ryujinx.Ava.UI.Views.Main await Dispatcher.UIThread.InvokeAsync(() => { - ViewModel.WindowState = WindowState.Normal; Window.Arrange(new Rect(Window.Position.X, Window.Position.Y, windowWidthScaled, windowHeightScaled)); @@ -210,7 +209,7 @@ namespace Ryujinx.Ava.UI.Views.Main public async void CheckForUpdates(object sender, RoutedEventArgs e) { if (Updater.CanUpdate(true)) - await Window.BeginUpdateAsync(true); + await Updater.BeginUpdateAsync(true); } public async void OpenXCITrimmerWindow(object sender, RoutedEventArgs e) => await XCITrimmerWindow.Show(ViewModel); diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml index 597cf10e1..6e72a8b4b 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml @@ -23,7 +23,7 @@ Background="{DynamicResource ThemeContentBackgroundColor}" DockPanel.Dock="Bottom" IsVisible="{Binding ShowMenuAndStatusBar}" - ColumnDefinitions="Auto,Auto,*,Auto"> + ColumnDefinitions="Auto,Auto,*,Auto,Auto"> + + + + IsVisible="{Binding ShowShaderCompilationHint}" /> + + - - - + IsVisible="{Binding IsGameRunning}" /> diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 059f99a60..09c8b9448 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -7,6 +7,7 @@ using Avalonia.Threading; using DynamicData; using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Windowing; +using Gommon; using LibHac.Tools.FsSystem; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; @@ -387,10 +388,8 @@ namespace Ryujinx.Ava.UI.Windows if (ConfigurationState.Instance.CheckUpdatesOnStart && !CommandLineState.HideAvailableUpdates && Updater.CanUpdate()) { - await this.BeginUpdateAsync() - .ContinueWith( - task => Logger.Error?.Print(LogClass.Application, $"Updater Error: {task.Exception}"), - TaskContinuationOptions.OnlyOnFaulted); + await Updater.BeginUpdateAsync() + .Catch(task => Logger.Error?.Print(LogClass.Application, $"Updater Error: {task.Exception}")); } } diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index bdb44d668..6a1701208 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -1,4 +1,3 @@ -using Avalonia.Controls; using Avalonia.Threading; using FluentAvalonia.UI.Controls; using Gommon; @@ -51,7 +50,7 @@ namespace Ryujinx.Ava private static readonly string[] _windowsDependencyDirs = []; - public static async Task BeginUpdateAsync(this Window mainWindow, bool showVersionUpToDate = false) + public static async Task BeginUpdateAsync(bool showVersionUpToDate = false) { if (_running) { @@ -225,7 +224,7 @@ namespace Ryujinx.Ava ? $"Canary {currentVersion} -> Canary {newVersion}" : $"{currentVersion} -> {newVersion}"; - RequestUserToUpdate: + RequestUserToUpdate: // Show a message asking the user if they want to update UserResult shouldUpdate = await ContentDialogHelper.CreateUpdaterChoiceDialog( LocaleManager.Instance[LocaleKeys.RyujinxUpdater], @@ -235,7 +234,7 @@ namespace Ryujinx.Ava switch (shouldUpdate) { case UserResult.Yes: - await UpdateRyujinx(mainWindow, _buildUrl); + await UpdateRyujinx(_buildUrl); break; // Secondary button maps to no, which in this case is the show changelog button. case UserResult.No: @@ -258,7 +257,7 @@ namespace Ryujinx.Ava return result; } - private static async Task UpdateRyujinx(Window parent, string downloadUrl) + private static async Task UpdateRyujinx(string downloadUrl) { _updateSuccessful = false; @@ -278,7 +277,7 @@ namespace Ryujinx.Ava SubHeader = LocaleManager.Instance[LocaleKeys.UpdaterDownloading], IconSource = new SymbolIconSource { Symbol = Symbol.Download }, ShowProgressBar = true, - XamlRoot = parent, + XamlRoot = App.MainWindow, }; taskDialog.Opened += (s, e) => -- 2.47.1 From 000c1756de0851a2d4bd2f458e5e987c3cba66dd Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 6 Dec 2024 08:17:04 -0600 Subject: [PATCH 098/722] version 1.2 in Info.plist --- distribution/macos/Info.plist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/macos/Info.plist b/distribution/macos/Info.plist index 53929f95e..2602f9905 100644 --- a/distribution/macos/Info.plist +++ b/distribution/macos/Info.plist @@ -40,11 +40,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1 + 1.2 CFBundleSignature ???? CFBundleVersion - 1.1.0 + 1.2.0 NSHighResolutionCapable CSResourcesFileMapped -- 2.47.1 From 3d168a8bfa7bd5a418b50ce7a82a7780d4c3b5f5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 6 Dec 2024 08:18:24 -0600 Subject: [PATCH 099/722] direct errored updates to ryujinx.app --- distribution/macos/updater.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/macos/updater.sh b/distribution/macos/updater.sh index 12e4c3aa1..0465d7c91 100755 --- a/distribution/macos/updater.sh +++ b/distribution/macos/updater.sh @@ -17,7 +17,7 @@ error_handler() { set the button_pressed to the button returned of the result if the button_pressed is \"Open Download Page\" then - open location \"https://ryujinx.org/download\" + open location \"https://ryujinx.app/download\" end if """ @@ -54,4 +54,4 @@ if [ "$#" -le 3 ]; then open -a "$INSTALL_DIRECTORY" else open -a "$INSTALL_DIRECTORY" --args "${APP_ARGUMENTS[@]}" -fi \ No newline at end of file +fi -- 2.47.1 From a1e6d11dcb0b125b1a953b5ba81d3b39aeecbff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hack=E8=8C=B6=E3=82=93?= <120134269+Hackjjang@users.noreply.github.com> Date: Sat, 7 Dec 2024 00:18:09 +0900 Subject: [PATCH 100/722] Update Korean translation (#352) --- src/Ryujinx/Assets/Locales/ko_KR.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 6b7140b3c..8731c8662 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -1,7 +1,7 @@ { "Language": "한국어", "MenuBarFileOpenApplet": "애플릿 열기", - "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", + "MenuBarFileOpenAppletOpenMiiApplet": "Mii 편집 애플릿", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "독립 실행형 모드로 Mii 편집기 애플릿 열기", "SettingsTabInputDirectMouseAccess": "마우스 직접 접근", "SettingsTabSystemMemoryManagerMode": "메모리 관리자 모드 :", @@ -484,7 +484,7 @@ "DialogControllerAppletTitle": "컨트롤러 애플릿", "DialogMessageDialogErrorExceptionMessage": "메시지 대화 상자 표시 오류 : {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "소프트웨어 키보드 표시 오류 : {0}", - "DialogErrorAppletErrorExceptionMessage": "ErrorApplet 대화 상자 표시 오류 : {0}", + "DialogErrorAppletErrorExceptionMessage": "애플릿 오류류 대화 상자 표시 오류 : {0}", "DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogInfoMessage": "\n이 오류를 해결하는 방법에 대한 자세한 내용은 설정 가이드를 참조하세요.", "DialogUserErrorDialogTitle": "Ryujinx 오류 ({0})", @@ -702,9 +702,9 @@ "Never": "절대 안 함", "SwkbdMinCharacters": "{0}자 이상이어야 함", "SwkbdMinRangeCharacters": "{0}-{1}자 길이여야 함", - "CabinetTitle": "Cabinet Dialog", - "CabinetDialog": "Enter your Amiibo's new name", - "CabinetScanDialog": "Please scan your Amiibo now.", + "CabinetTitle": "캐비닛 대화 상자", + "CabinetDialog": "Amiibo의 새 이름 입력하기", + "CabinetScanDialog": "지금 Amiibo를 스캔하세요.", "SoftwareKeyboard": "소프트웨어 키보드", "SoftwareKeyboardModeNumeric": "0-9 또는 '.'만 가능", "SoftwareKeyboardModeAlphabet": "CJK 문자가 아닌 문자만 가능", @@ -781,8 +781,8 @@ "XCITrimmerDeselectDisplayed": "표시됨 선택 취소", "XCITrimmerSortName": "타이틀", "XCITrimmerSortSaved": "공간 절약s", - "XCITrimmerTrim": "Trim", - "XCITrimmerUntrim": "Untrim", + "XCITrimmerTrim": "트림", + "XCITrimmerUntrim": "언트림", "UpdateWindowUpdateAddedMessage": "{0}개의 새 업데이트가 추가됨", "UpdateWindowBundledContentNotice": "번들 업데이트는 제거할 수 없으며, 비활성화만 가능합니다.", "CheatWindowHeading": "{0} [{1}]에 사용 가능한 치트", -- 2.47.1 From baad1e313f80bf53a20fc1ee04fdc716b1728bf1 Mon Sep 17 00:00:00 2001 From: Luke Warner <65521430+LukeWarnut@users.noreply.github.com> Date: Fri, 6 Dec 2024 15:43:31 -0500 Subject: [PATCH 101/722] Stub Ldn.Lp2p.ISfService: 776 (DestroyGroup) (#353) This prevents a crash in Mario Kart Live: Home Circuit that would occur after exiting the kart pairing screen. --- src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfService.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfService.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfService.cs index d48a88978..8f9f0e3e4 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfService.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/Lp2p/ISfService.cs @@ -24,6 +24,15 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.Lp2p return ResultCode.Success; } + [CommandCmif(776)] + // DestroyGroup() + public ResultCode DestroyGroup(ServiceCtx context) + { + Logger.Stub?.PrintStub(LogClass.ServiceLdn); + + return ResultCode.Success; + } + [CommandCmif(1536)] // SendToOtherGroup(nn::lp2p::MacAddress, nn::lp2p::GroupId, s16, s16, u32, buffer) public ResultCode SendToOtherGroup(ServiceCtx context) -- 2.47.1 From 0bc1eddaebc03d790fa0c16729382967f7f229dc Mon Sep 17 00:00:00 2001 From: maxdlpee <77379259+maxdlpee@users.noreply.github.com> Date: Sat, 7 Dec 2024 00:57:35 -0300 Subject: [PATCH 102/722] Update Spanish translation (#332) - Added translations for XCI trimmer - Added translations for Cabinet applet - Added translations for Keys installer - Other miscellaneous translations added --- src/Ryujinx/Assets/Locales/es_ES.json | 108 +++++++++++++------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index b473b1197..934031c72 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -1,7 +1,7 @@ { "Language": "Español (ES)", "MenuBarFileOpenApplet": "Abrir applet", - "MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet", + "MenuBarFileOpenAppletOpenMiiApplet": "Applet Editor Mii", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Abre el editor de Mii en modo autónomo", "SettingsTabInputDirectMouseAccess": "Acceso directo al ratón", "SettingsTabSystemMemoryManagerMode": "Modo del administrador de memoria:", @@ -32,12 +32,12 @@ "MenuBarFileToolsInstallFirmwareFromFile": "Instalar firmware desde un archivo XCI o ZIP", "MenuBarFileToolsInstallFirmwareFromDirectory": "Instalar firmware desde una carpeta", "MenuBarToolsInstallKeys": "Install Keys", - "MenuBarFileToolsInstallKeysFromFile": "Install keys from KEYS or ZIP", - "MenuBarFileToolsInstallKeysFromFolder": "Install keys from a directory", + "MenuBarFileToolsInstallKeysFromFile": "Instalar keys de KEYS o ZIP", + "MenuBarFileToolsInstallKeysFromFolder": "Instalar keys de un directorio", "MenuBarToolsManageFileTypes": "Administrar tipos de archivo", "MenuBarToolsInstallFileTypes": "Instalar tipos de archivo", "MenuBarToolsUninstallFileTypes": "Desinstalar tipos de archivo", - "MenuBarToolsXCITrimmer": "Trim XCI Files", + "MenuBarToolsXCITrimmer": "Recortar archivos XCI", "MenuBarView": "_View", "MenuBarViewWindow": "Tamaño Ventana", "MenuBarViewWindow720": "720p", @@ -89,11 +89,11 @@ "GameListContextMenuOpenModsDirectoryToolTip": "Abre el directorio que contiene los Mods de la Aplicación.", "GameListContextMenuOpenSdModsDirectory": "Abrir Directorio de Mods de Atmosphere\n\n\n\n\n\n", "GameListContextMenuOpenSdModsDirectoryToolTip": "Abre el directorio alternativo de la tarjeta SD de Atmosphere que contiene los Mods de la Aplicación. Útil para los mods que están empaquetados para el hardware real.", - "GameListContextMenuTrimXCI": "Check and Trim XCI File", - "GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space", + "GameListContextMenuTrimXCI": "Verificar y recortar archivo XCI", + "GameListContextMenuTrimXCIToolTip": "Verificar y recortar archivo XCI para ahorrar espacio en disco", "StatusBarGamesLoaded": "{0}/{1} juegos cargados", "StatusBarSystemVersion": "Versión del sistema: {0}", - "StatusBarXCIFileTrimming": "Trimming XCI File '{0}'", + "StatusBarXCIFileTrimming": "Recortando el siguiente archivo XCI: '{0}'", "LinuxVmMaxMapCountDialogTitle": "Límite inferior para mapeos de memoria detectado", "LinuxVmMaxMapCountDialogTextPrimary": "¿Quieres aumentar el valor de vm.max_map_count a {0}?", "LinuxVmMaxMapCountDialogTextSecondary": "Algunos juegos podrían intentar crear más mapeos de memoria de los permitidos. Ryujinx se bloqueará tan pronto como se supere este límite.", @@ -480,7 +480,7 @@ "DialogUninstallFileTypesSuccessMessage": "¡Tipos de archivos desinstalados con éxito!", "DialogUninstallFileTypesErrorMessage": "No se pudo desinstalar los tipos de archivo.", "DialogOpenSettingsWindowLabel": "Abrir ventana de opciones", - "DialogOpenXCITrimmerWindowLabel": "XCI Trimmer Window", + "DialogOpenXCITrimmerWindowLabel": "Ventana recortador XCI", "DialogControllerAppletTitle": "Applet de mandos", "DialogMessageDialogErrorExceptionMessage": "Error al mostrar cuadro de diálogo: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Error al mostrar teclado de software: {0}", @@ -509,13 +509,13 @@ "DialogFirmwareInstallerFirmwareInstallConfirmMessage": "\n\n¿Continuar?", "DialogFirmwareInstallerFirmwareInstallWaitMessage": "Instalando firmware...", "DialogFirmwareInstallerFirmwareInstallSuccessMessage": "Versión de sistema {0} instalada con éxito.", - "DialogKeysInstallerKeysNotFoundErrorMessage": "An invalid Keys file was found in {0}", - "DialogKeysInstallerKeysInstallTitle": "Install Keys", - "DialogKeysInstallerKeysInstallMessage": "New Keys file will be installed.", - "DialogKeysInstallerKeysInstallSubMessage": "\n\nThis may replace some of the current installed Keys.", - "DialogKeysInstallerKeysInstallConfirmMessage": "\n\nDo you want to continue?", - "DialogKeysInstallerKeysInstallWaitMessage": "Installing Keys...", - "DialogKeysInstallerKeysInstallSuccessMessage": "New Keys file successfully installed.", + "DialogKeysInstallerKeysNotFoundErrorMessage": "Se halló un archivo Keys inválido en {0}", + "DialogKeysInstallerKeysInstallTitle": "Instalar Keys", + "DialogKeysInstallerKeysInstallMessage": "Un nuevo archivo Keys será instalado.", + "DialogKeysInstallerKeysInstallSubMessage": "\n\nEsto puede reemplazar algunas de las Keys actualmente instaladas.", + "DialogKeysInstallerKeysInstallConfirmMessage": "\n\nDeseas continuar?", + "DialogKeysInstallerKeysInstallWaitMessage": "Instalando Keys...", + "DialogKeysInstallerKeysInstallSuccessMessage": "Nuevo archivo Keys instalado con éxito.", "DialogUserProfileDeletionWarningMessage": "Si eliminas el perfil seleccionado no quedará ningún otro perfil", "DialogUserProfileDeletionConfirmMessage": "¿Quieres eliminar el perfil seleccionado?", "DialogUserProfileUnsavedChangesTitle": "Advertencia - Cambios sin guardar", @@ -688,23 +688,23 @@ "OpenSetupGuideMessage": "Abrir la guía de instalación", "NoUpdate": "No actualizado", "TitleUpdateVersionLabel": "Versión {0} - {1}", - "TitleBundledUpdateVersionLabel": "Bundled: Version {0}", - "TitleBundledDlcLabel": "Bundled:", - "TitleXCIStatusPartialLabel": "Partial", - "TitleXCIStatusTrimmableLabel": "Untrimmed", - "TitleXCIStatusUntrimmableLabel": "Trimmed", - "TitleXCIStatusFailedLabel": "(Failed)", - "TitleXCICanSaveLabel": "Save {0:n0} Mb", - "TitleXCISavingLabel": "Saved {0:n0} Mb", + "TitleBundledUpdateVersionLabel": "Incorporado: Versión {0}", + "TitleBundledDlcLabel": "Incorporado:", + "TitleXCIStatusPartialLabel": "Parcial", + "TitleXCIStatusTrimmableLabel": "Sin recortar", + "TitleXCIStatusUntrimmableLabel": "Recortado", + "TitleXCIStatusFailedLabel": "(Fallido)", + "TitleXCICanSaveLabel": "Ahorra {0:n0} Mb", + "TitleXCISavingLabel": "{0:n0} Mb ahorrado(s)", "RyujinxInfo": "Ryujinx - Info", "RyujinxConfirm": "Ryujinx - Confirmación", "FileDialogAllTypes": "Todos los tipos", "Never": "Nunca", "SwkbdMinCharacters": "Debe tener al menos {0} caracteres", "SwkbdMinRangeCharacters": "Debe tener {0}-{1} caracteres", - "CabinetTitle": "Cabinet Dialog", - "CabinetDialog": "Enter your Amiibo's new name", - "CabinetScanDialog": "Please scan your Amiibo now.", + "CabinetTitle": "Diálogo Gabinete", + "CabinetDialog": "Ingresa el nuevo nombre de tu Amiibo", + "CabinetScanDialog": "Escanea tu Amiibo ahora.", "SoftwareKeyboard": "Teclado de software", "SoftwareKeyboardModeNumeric": "Debe ser sólo 0-9 o '.'", "SoftwareKeyboardModeAlphabet": "Solo deben ser caracteres no CJK", @@ -750,39 +750,39 @@ "SelectDlcDialogTitle": "Selecciona archivo(s) de DLC", "SelectUpdateDialogTitle": "Selecciona archivo(s) de actualización", "SelectModDialogTitle": "Seleccionar un directorio de Mods", - "TrimXCIFileDialogTitle": "Check and Trim XCI File", - "TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.", - "TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB", - "TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details", - "TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details", - "TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details", - "TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.", - "TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim", - "TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details", - "TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details", - "TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed", - "TrimXCIFileCancelled": "The operation was cancelled", - "TrimXCIFileFileUndertermined": "No operation was performed", + "TrimXCIFileDialogTitle": "Verificar y recortar archivo XCI", + "TrimXCIFileDialogPrimaryText": "Esta función verificará el espacio vacío y después recortará el archivo XCI para ahorrar espacio en disco", + "TrimXCIFileDialogSecondaryText": "Tamaño de archivo actual: {0:n} MB\nTamaño de datos de juego: {1:n} MB\nAhorro de espacio en disco: {2:n} MB", + "TrimXCIFileNoTrimNecessary": "El archivo XCI no necesita ser recortado. Verifica los logs para más detalles.", + "TrimXCIFileNoUntrimPossible": "El recorte del archivo XCI no puede ser deshecho. Verifica los registros para más detalles.", + "TrimXCIFileReadOnlyFileCannotFix": "El archivo XCI es de solo Lectura y no se le puede escribir. Lee el registro para más información.", + "TrimXCIFileFileSizeChanged": "El archivo XCI ha cambiado de tamaño desde que fue escaneado. Verifica que no se esté escribiendo al archivo y vuelve a intentarlo.", + "TrimXCIFileFreeSpaceCheckFailed": "El archivo XCI tiene datos en el área de espacio libre, no es seguro recortar.", + "TrimXCIFileInvalidXCIFile": "El archivo XCI contiene datos inválidos. Lee el registro para más información.", + "TrimXCIFileFileIOWriteError": "El archivo XCI no se puede abrir para escribirlo. Lee el registro para más información.", + "TrimXCIFileFailedPrimaryText": "El recorte del archivo XCI falló", + "TrimXCIFileCancelled": "La operación fue cancelada", + "TrimXCIFileFileUndertermined": "No se realizó ninguna operación", "UserProfileWindowTitle": "Administrar perfiles de usuario", "CheatWindowTitle": "Administrar cheats", "DlcWindowTitle": "Administrar contenido descargable", "ModWindowTitle": "Administrar Mods para {0} ({1})", "UpdateWindowTitle": "Administrar actualizaciones", - "XCITrimmerWindowTitle": "XCI File Trimmer", - "XCITrimmerTitleStatusCount": "{0} of {1} Title(s) Selected", - "XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)", - "XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...", - "XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...", - "XCITrimmerTitleStatusFailed": "Failed", - "XCITrimmerPotentialSavings": "Potential Savings", - "XCITrimmerActualSavings": "Actual Savings", + "XCITrimmerWindowTitle": "Recortador de archivos XCI", + "XCITrimmerTitleStatusCount": "{0} de {1} Título(s) seleccionado(s)", + "XCITrimmerTitleStatusCountWithFilter": "{0} de {1} Título(s) seleccionado(s) ({2} mostrado(s))", + "XCITrimmerTitleStatusTrimming": "Recortando {0} Título(s)...", + "XCITrimmerTitleStatusUntrimming": "Deshaciendo recorte de {0} Título(s)...", + "XCITrimmerTitleStatusFailed": "Fallido", + "XCITrimmerPotentialSavings": "Ahorro potencial", + "XCITrimmerActualSavings": "Ahorro real", "XCITrimmerSavingsMb": "{0:n0} Mb", - "XCITrimmerSelectDisplayed": "Select Shown", - "XCITrimmerDeselectDisplayed": "Deselect Shown", - "XCITrimmerSortName": "Title", - "XCITrimmerSortSaved": "Space Savings", - "XCITrimmerTrim": "Trim", - "XCITrimmerUntrim": "Untrim", + "XCITrimmerSelectDisplayed": "Seleccionar mostrado(s)", + "XCITrimmerDeselectDisplayed": "Deseleccionar mostrado(s)", + "XCITrimmerSortName": "Título", + "XCITrimmerSortSaved": "Ahorro de espacio", + "XCITrimmerTrim": "Recortar", + "XCITrimmerUntrim": "Deshacer recorte", "UpdateWindowUpdateAddedMessage": "{0} nueva(s) actualización(es) agregada(s)", "UpdateWindowBundledContentNotice": "Las actualizaciones agrupadas no pueden ser eliminadas, solamente deshabilitadas.", "CheatWindowHeading": "Cheats disponibles para {0} [{1}]", @@ -795,7 +795,7 @@ "AutoloadUpdateRemovedMessage": "Se eliminaron {0} actualización(es) faltantes", "ModWindowHeading": "{0} Mod(s)", "UserProfilesEditProfile": "Editar selección", - "Continue": "Continue", + "Continue": "Continuar", "Cancel": "Cancelar", "Save": "Guardar", "Discard": "Descartar", -- 2.47.1 From d00754477eab8ec47ed3824d96b3a766dfe93bc2 Mon Sep 17 00:00:00 2001 From: WilliamWsyHK Date: Sat, 7 Dec 2024 18:03:01 +0800 Subject: [PATCH 103/722] Add Firmware keyword in log if it is indeed firmware (#343) Co-authored-by: LotP1 --- .../Processes/Extensions/NcaExtensions.cs | 6 ++++- .../Loaders/Processes/ProcessLoader.cs | 4 +-- .../Loaders/Processes/ProcessResult.cs | 13 ++++++--- src/Ryujinx.HLE/Switch.cs | 4 ++- src/Ryujinx/AppHost.cs | 6 +++-- .../UI/ViewModels/MainWindowViewModel.cs | 5 ++-- .../UI/Views/Main/MainMenuBarView.axaml.cs | 27 ++++++++++++++++--- 7 files changed, 50 insertions(+), 15 deletions(-) diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs index 2928ac7fe..361a9159e 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs @@ -26,7 +26,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions { private static readonly TitleUpdateMetadataJsonSerializerContext _applicationSerializerContext = new(JsonHelper.GetDefaultSerializerOptions()); - public static ProcessResult Load(this Nca nca, Switch device, Nca patchNca, Nca controlNca) + public static ProcessResult Load(this Nca nca, Switch device, Nca patchNca, Nca controlNca, BlitStruct? customNacpData = null) { // Extract RomFs and ExeFs from NCA. IStorage romFs = nca.GetRomFs(device, patchNca); @@ -55,6 +55,10 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions { nacpData = controlNca.GetNacp(device); } + else if (customNacpData != null) // if the Application doesn't provide a nacp file but the Application provides an override, use the provided nacp override + { + nacpData = (BlitStruct)customNacpData; + } /* TODO: Rework this since it's wrong and doesn't work as it takes the DisplayVersion from a "potential" non-existent update. diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs index a0e7e0fa1..fe8360f04 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs @@ -98,12 +98,12 @@ namespace Ryujinx.HLE.Loaders.Processes return false; } - public bool LoadNca(string path) + public bool LoadNca(string path, BlitStruct? customNacpData = null) { FileStream file = new(path, FileMode.Open, FileAccess.Read); Nca nca = new(_device.Configuration.VirtualFileSystem.KeySet, file.AsStorage(false)); - ProcessResult processResult = nca.Load(_device, null, null); + ProcessResult processResult = nca.Load(_device, null, null, customNacpData); if (processResult.ProcessId != 0 && _processesByPid.TryAdd(processResult.ProcessId, processResult)) { diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs index e187b2360..3a7042670 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessResult.cs @@ -84,12 +84,19 @@ namespace Ryujinx.HLE.Loaders.Processes return false; } + bool isFirmware = ProgramId is >= 0x0100000000000819 and <= 0x010000000000081C; + bool isFirmwareApplication = ProgramId <= 0x0100000000007FFF; + + string name = !isFirmware + ? (isFirmwareApplication ? "Firmware Application " : "") + (!string.IsNullOrWhiteSpace(Name) ? Name : "") + : "Firmware"; + // TODO: LibHac npdm currently doesn't support version field. - string version = ProgramId > 0x0100000000007FFF - ? DisplayVersion + string version = !isFirmware + ? (!string.IsNullOrWhiteSpace(DisplayVersion) ? DisplayVersion : "") : device.System.ContentManager.GetCurrentFirmwareVersion()?.VersionString ?? "?"; - Logger.Info?.Print(LogClass.Loader, $"Application Loaded: {Name} v{version} [{ProgramIdText}] [{(Is64Bit ? "64-bit" : "32-bit")}]"); + Logger.Info?.Print(LogClass.Loader, $"Application Loaded: {name} v{version} [{ProgramIdText}] [{(Is64Bit ? "64-bit" : "32-bit")}]"); return true; } diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index 466352152..d0afdf173 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -1,3 +1,5 @@ +using LibHac.Common; +using LibHac.Ns; using Ryujinx.Audio.Backends.CompatLayer; using Ryujinx.Audio.Integration; using Ryujinx.Common.Configuration; @@ -111,7 +113,7 @@ namespace Ryujinx.HLE public bool LoadCart(string exeFsDir, string romFsFile = null) => Processes.LoadUnpackedNca(exeFsDir, romFsFile); public bool LoadXci(string xciFile, ulong applicationId = 0) => Processes.LoadXci(xciFile, applicationId); - public bool LoadNca(string ncaFile) => Processes.LoadNca(ncaFile); + public bool LoadNca(string ncaFile, BlitStruct? customNacpData = null) => Processes.LoadNca(ncaFile, customNacpData); public bool LoadNsp(string nspFile, ulong applicationId = 0) => Processes.LoadNsp(nspFile, applicationId); public bool LoadProgram(string fileName) => Processes.LoadNxo(fileName); diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 9a7f82661..65c798ac2 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -3,6 +3,8 @@ using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input; using Avalonia.Threading; +using LibHac.Common; +using LibHac.Ns; using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.Dummy; using Ryujinx.Audio.Backends.OpenAL; @@ -670,7 +672,7 @@ namespace Ryujinx.Ava _cursorState = CursorStates.ForceChangeCursor; } - public async Task LoadGuestApplication() + public async Task LoadGuestApplication(BlitStruct? customNacpData = null) { InitializeSwitchInstance(); MainWindow.UpdateGraphicsConfig(); @@ -740,7 +742,7 @@ namespace Ryujinx.Ava { Logger.Info?.Print(LogClass.Application, "Loading as Firmware Title (NCA)."); - if (!Device.LoadNca(ApplicationPath)) + if (!Device.LoadNca(ApplicationPath, customNacpData)) { Device.Dispose(); diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 1bfcd439b..04db947b9 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -10,6 +10,7 @@ using DynamicData; using DynamicData.Binding; using FluentAvalonia.UI.Controls; using LibHac.Common; +using LibHac.Ns; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Input; @@ -1897,7 +1898,7 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public async Task LoadApplication(ApplicationData application, bool startFullscreen = false) + public async Task LoadApplication(ApplicationData application, bool startFullscreen = false, BlitStruct? customNacpData = null) { if (AppHost != null) { @@ -1935,7 +1936,7 @@ namespace Ryujinx.Ava.UI.ViewModels this, TopLevel); - if (!await AppHost.LoadGuestApplication()) + if (!await AppHost.LoadGuestApplication(customNacpData)) { AppHost.DisposeContext(); AppHost = null; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index a3aa58f2c..94f5cf9d3 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -3,7 +3,9 @@ using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Threading; using Gommon; +using LibHac.Common; using LibHac.Ncm; +using LibHac.Ns; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; @@ -19,6 +21,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text; namespace Ryujinx.Ava.UI.Views.Main { @@ -123,18 +126,34 @@ namespace Ryujinx.Ava.UI.Views.Main public async void OpenMiiApplet(object sender, RoutedEventArgs e) { - string contentPath = ViewModel.ContentManager.GetInstalledContentPath(0x0100000000001009, StorageId.BuiltInSystem, NcaContentType.Program); + const string name = "miiEdit"; + const ulong programId = 0x0100000000001009; + string contentPath = ViewModel.ContentManager.GetInstalledContentPath(programId, StorageId.BuiltInSystem, NcaContentType.Program); if (!string.IsNullOrEmpty(contentPath)) { ApplicationData applicationData = new() { - Name = "miiEdit", - Id = 0x0100000000001009, + Name = name, + Id = programId, Path = contentPath, }; - await ViewModel.LoadApplication(applicationData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen); + string version = "1.0.0"; + var nacpData = new BlitStruct(1); + + //version buffer + Encoding.ASCII.GetBytes(version).AsSpan().CopyTo(nacpData.ByteSpan.Slice(0x3060)); + + //name and distributor buffer + //repeat once for each locale (the ApplicationControlProperty has 16 locales) + for (int i = 0; i < 0x10; i++) + { + Encoding.ASCII.GetBytes(name).AsSpan().CopyTo(nacpData.ByteSpan.Slice(i * 0x300)); + "Ryujinx"u8.ToArray().AsSpan().CopyTo(nacpData.ByteSpan.Slice(i * 0x300 + 0x200)); + } + + await ViewModel.LoadApplication(applicationData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen, nacpData); } } -- 2.47.1 From 5fbcb1f3a7b7f18a120db350f6b1fb3bd6cb305d Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 7 Dec 2024 04:05:39 -0600 Subject: [PATCH 104/722] misc: chore: Cleanups & unused parameter removal --- .../Controller/JoyconConfigControllerStick.cs | 4 +- .../App/ApplicationLibrary.cs | 39 +++++++------------ .../Configuration/ConfigurationState.cs | 8 +--- .../Helper/DownloadableContentsHelper.cs | 2 +- .../Helper/TitleUpdatesHelper.cs | 2 +- 5 files changed, 22 insertions(+), 33 deletions(-) diff --git a/src/Ryujinx.Common/Configuration/Hid/Controller/JoyconConfigControllerStick.cs b/src/Ryujinx.Common/Configuration/Hid/Controller/JoyconConfigControllerStick.cs index 608681551..076530744 100644 --- a/src/Ryujinx.Common/Configuration/Hid/Controller/JoyconConfigControllerStick.cs +++ b/src/Ryujinx.Common/Configuration/Hid/Controller/JoyconConfigControllerStick.cs @@ -1,6 +1,8 @@ namespace Ryujinx.Common.Configuration.Hid.Controller { - public class JoyconConfigControllerStick where TButton : unmanaged where TStick : unmanaged + public class JoyconConfigControllerStick + where TButton : unmanaged + where TStick : unmanaged { public TStick Joystick { get; set; } public bool InvertStickX { get; set; } diff --git a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs index 174db51ad..cc5a63ab8 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs @@ -1,5 +1,4 @@ using DynamicData; -using DynamicData.Kernel; using Gommon; using LibHac; using LibHac.Common; @@ -37,14 +36,13 @@ using System.Threading.Tasks; using ContentType = LibHac.Ncm.ContentType; using MissingKeyException = LibHac.Common.Keys.MissingKeyException; using Path = System.IO.Path; -using SpanHelpers = LibHac.Common.SpanHelpers; using TimeSpan = System.TimeSpan; namespace Ryujinx.UI.App.Common { public class ApplicationLibrary { - public static string DefaultLanPlayWebHost = "ryuldnweb.vudjun.com"; + public const string DefaultLanPlayWebHost = "ryuldnweb.vudjun.com"; public Language DesiredLanguage { get; set; } public event EventHandler ApplicationCountUpdated; public event EventHandler LdnGameDataReceived; @@ -191,12 +189,9 @@ namespace Ryujinx.UI.App.Common } } - if (isExeFs) - { - return GetApplicationFromExeFs(pfs, filePath); - } - - return null; + return isExeFs + ? GetApplicationFromExeFs(pfs, filePath) + : null; } /// The configured key set is missing a key. @@ -512,10 +507,6 @@ namespace Ryujinx.UI.App.Common case ".xci": case ".nsp": { - IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks - ? IntegrityCheckLevel.ErrorOnInvalid - : IntegrityCheckLevel.None; - using IFileSystem pfs = PartitionFileSystemUtils.OpenApplicationFileSystem(filePath, _virtualFileSystem); foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) @@ -604,7 +595,7 @@ namespace Ryujinx.UI.App.Common controlNca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.None) .OpenFile(ref nacpFile.Ref, "/control.nacp".ToU8Span(), OpenMode.Read) .ThrowIfFailure(); - nacpFile.Get.Read(out _, 0, SpanHelpers.AsByteSpan(ref controlData), + nacpFile.Get.Read(out _, 0, LibHac.Common.SpanHelpers.AsByteSpan(ref controlData), ReadOption.None).ThrowIfFailure(); var displayVersion = controlData.DisplayVersionString.ToString(); @@ -827,7 +818,7 @@ namespace Ryujinx.UI.App.Common { _downloadableContents.Edit(it => { - DownloadableContentsHelper.SaveDownloadableContentsJson(_virtualFileSystem, application.IdBase, dlcs); + DownloadableContentsHelper.SaveDownloadableContentsJson(application.IdBase, dlcs); it.Remove(it.Items.Where(item => item.Dlc.TitleIdBase == application.IdBase)); it.AddOrUpdate(dlcs); @@ -839,7 +830,7 @@ namespace Ryujinx.UI.App.Common { _titleUpdates.Edit(it => { - TitleUpdatesHelper.SaveTitleUpdatesJson(_virtualFileSystem, application.IdBase, updates); + TitleUpdatesHelper.SaveTitleUpdatesJson(application.IdBase, updates); it.Remove(it.Items.Where(item => item.TitleUpdate.TitleIdBase == application.IdBase)); it.AddOrUpdate(updates); @@ -1088,7 +1079,7 @@ namespace Ryujinx.UI.App.Common private bool AddAndAutoSelectUpdate(TitleUpdateModel update) { - var currentlySelected = TitleUpdates.Items.FirstOrOptional(it => + var currentlySelected = TitleUpdates.Items.FindFirst(it => it.TitleUpdate.TitleIdBase == update.TitleIdBase && it.IsSelected); var shouldSelect = !currentlySelected.HasValue || @@ -1464,7 +1455,7 @@ namespace Ryujinx.UI.App.Common if (addedNewDlc) { var gameDlcs = it.Items.Where(dlc => dlc.Dlc.TitleIdBase == application.IdBase).ToList(); - DownloadableContentsHelper.SaveDownloadableContentsJson(_virtualFileSystem, application.IdBase, + DownloadableContentsHelper.SaveDownloadableContentsJson(application.IdBase, gameDlcs); } } @@ -1483,7 +1474,7 @@ namespace Ryujinx.UI.App.Common TitleUpdatesHelper.LoadTitleUpdatesJson(_virtualFileSystem, application.IdBase); it.AddOrUpdate(savedUpdates); - var selectedUpdate = savedUpdates.FirstOrOptional(update => update.IsSelected); + var selectedUpdate = savedUpdates.FindFirst(update => update.IsSelected); if (TryGetTitleUpdatesFromFile(application.Path, out var bundledUpdates)) { @@ -1498,9 +1489,9 @@ namespace Ryujinx.UI.App.Common if (!selectedUpdate.HasValue || selectedUpdate.Value.Item1.Version < update.Version) { shouldSelect = true; - if (selectedUpdate.HasValue) + if (selectedUpdate) _titleUpdates.AddOrUpdate((selectedUpdate.Value.Item1, false)); - selectedUpdate = DynamicData.Kernel.Optional<(TitleUpdateModel, bool IsSelected)>.Create((update, true)); + selectedUpdate = (update, true); } modifiedVersion = modifiedVersion || shouldSelect; @@ -1513,7 +1504,7 @@ namespace Ryujinx.UI.App.Common if (updatesChanged) { var gameUpdates = it.Items.Where(update => update.TitleUpdate.TitleIdBase == application.IdBase).ToList(); - TitleUpdatesHelper.SaveTitleUpdatesJson(_virtualFileSystem, application.IdBase, gameUpdates); + TitleUpdatesHelper.SaveTitleUpdatesJson(application.IdBase, gameUpdates); } } }); @@ -1525,14 +1516,14 @@ namespace Ryujinx.UI.App.Common private void SaveDownloadableContentsForGame(ulong titleIdBase) { var dlcs = DownloadableContents.Items.Where(dlc => dlc.Dlc.TitleIdBase == titleIdBase).ToList(); - DownloadableContentsHelper.SaveDownloadableContentsJson(_virtualFileSystem, titleIdBase, dlcs); + DownloadableContentsHelper.SaveDownloadableContentsJson(titleIdBase, dlcs); } // Save the _currently tracked_ update state for the game private void SaveTitleUpdatesForGame(ulong titleIdBase) { var updates = TitleUpdates.Items.Where(update => update.TitleUpdate.TitleIdBase == titleIdBase).ToList(); - TitleUpdatesHelper.SaveTitleUpdatesJson(_virtualFileSystem, titleIdBase, updates); + TitleUpdatesHelper.SaveTitleUpdatesJson(titleIdBase, updates); } // ApplicationData isnt live-updating (e.g. when an update gets applied) and so this is meant to trigger a refresh diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs index badb047df..04ddd442f 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs @@ -1,16 +1,12 @@ -using ARMeilleure; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; -using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.Common.Configuration.Multiplayer; -using Ryujinx.Common.Logging; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.UI.Common.Configuration.System; using Ryujinx.UI.Common.Configuration.UI; using System; -using System.Collections.Generic; namespace Ryujinx.UI.Common.Configuration { @@ -21,10 +17,10 @@ namespace Ryujinx.UI.Common.Configuration if (Instance != null) { throw new InvalidOperationException("Configuration is already initialized"); - } + } Instance = new ConfigurationState(); - } + } public ConfigurationFileFormat ToFileFormat() { diff --git a/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs b/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs index 3695c5c5c..020529b55 100644 --- a/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs +++ b/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs @@ -42,7 +42,7 @@ namespace Ryujinx.UI.Common.Helper } } - public static void SaveDownloadableContentsJson(VirtualFileSystem vfs, ulong applicationIdBase, List<(DownloadableContentModel, bool IsEnabled)> dlcs) + public static void SaveDownloadableContentsJson(ulong applicationIdBase, List<(DownloadableContentModel, bool IsEnabled)> dlcs) { DownloadableContentContainer container = default; List downloadableContentContainerList = new(); diff --git a/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs b/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs index 18fbabd6d..c6bacfd91 100644 --- a/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs +++ b/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs @@ -49,7 +49,7 @@ namespace Ryujinx.UI.Common.Helper } } - public static void SaveTitleUpdatesJson(VirtualFileSystem vfs, ulong applicationIdBase, List<(TitleUpdateModel, bool IsSelected)> updates) + public static void SaveTitleUpdatesJson(ulong applicationIdBase, List<(TitleUpdateModel, bool IsSelected)> updates) { var titleUpdateWindowData = new TitleUpdateMetadata { -- 2.47.1 From eda4f4349bdde7809ccbea44364634901c3c8c7b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 7 Dec 2024 04:06:07 -0600 Subject: [PATCH 105/722] headless: Actually log the command line errors --- src/Ryujinx.Headless.SDL2/Program.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.Headless.SDL2/Program.cs b/src/Ryujinx.Headless.SDL2/Program.cs index ff87a3845..12158176a 100644 --- a/src/Ryujinx.Headless.SDL2/Program.cs +++ b/src/Ryujinx.Headless.SDL2/Program.cs @@ -1,4 +1,5 @@ using CommandLine; +using Gommon; using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.SDL2; using Ryujinx.Common; @@ -96,8 +97,13 @@ namespace Ryujinx.Headless.SDL2 } Parser.Default.ParseArguments(args) - .WithParsed(Load) - .WithNotParsed(errors => errors.Output()); + .WithParsed(Load) + .WithNotParsed(errors => + { + Logger.Error?.PrintMsg(LogClass.Application, "Error parsing command-line arguments:"); + + errors.ForEach(err => Logger.Error?.PrintMsg(LogClass.Application, $" - {err.Tag}")); + }); } private static InputConfig HandlePlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index) @@ -579,8 +585,8 @@ namespace Ryujinx.Headless.SDL2 options.MultiplayerLanInterfaceId, Common.Configuration.Multiplayer.MultiplayerMode.Disabled, false, - "", - "", + string.Empty, + string.Empty, options.CustomVSyncInterval); return new Switch(configuration); -- 2.47.1 From 290a6ad5de02251604c9a85bb8a5b162fa01e0b7 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 7 Dec 2024 04:30:04 -0600 Subject: [PATCH 106/722] HLE: extract custom NACP data functionality into a static helper for generic reuse elsewhere, and clarify magic numbers. --- src/Ryujinx.HLE/StructHelpers.cs | 37 +++++++++++++++++++ .../UI/Views/Main/MainMenuBarView.axaml.cs | 31 ++++++---------- 2 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 src/Ryujinx.HLE/StructHelpers.cs diff --git a/src/Ryujinx.HLE/StructHelpers.cs b/src/Ryujinx.HLE/StructHelpers.cs new file mode 100644 index 000000000..6e6af8cea --- /dev/null +++ b/src/Ryujinx.HLE/StructHelpers.cs @@ -0,0 +1,37 @@ +using LibHac.Common; +using LibHac.Ns; +using System; +using System.Text; + +namespace Ryujinx.HLE +{ + public static class StructHelpers + { + public static BlitStruct CreateCustomNacpData(string name, string version) + { + // https://switchbrew.org/wiki/NACP + const int OffsetOfDisplayVersion = 0x3060; + + // https://switchbrew.org/wiki/NACP#ApplicationTitle + const int TotalApplicationTitles = 0x10; + const int SizeOfApplicationTitle = 0x300; + const int OffsetOfApplicationPublisherStrings = 0x200; + + + var nacpData = new BlitStruct(1); + + // name and publisher buffer + // repeat once for each locale (the ApplicationControlProperty has 16 locales) + for (int i = 0; i < TotalApplicationTitles; i++) + { + Encoding.ASCII.GetBytes(name).AsSpan().CopyTo(nacpData.ByteSpan[(i * SizeOfApplicationTitle)..]); + "Ryujinx"u8.CopyTo(nacpData.ByteSpan[(i * SizeOfApplicationTitle + OffsetOfApplicationPublisherStrings)..]); + } + + // version buffer + Encoding.ASCII.GetBytes(version).AsSpan().CopyTo(nacpData.ByteSpan[OffsetOfDisplayVersion..]); + + return nacpData; + } + } +} diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 94f5cf9d3..ffe9b066c 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -13,6 +13,7 @@ using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; using Ryujinx.Common; using Ryujinx.Common.Utilities; +using Ryujinx.HLE; using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; @@ -126,32 +127,22 @@ namespace Ryujinx.Ava.UI.Views.Main public async void OpenMiiApplet(object sender, RoutedEventArgs e) { - const string name = "miiEdit"; - const ulong programId = 0x0100000000001009; - string contentPath = ViewModel.ContentManager.GetInstalledContentPath(programId, StorageId.BuiltInSystem, NcaContentType.Program); + const string AppletName = "miiEdit"; + const ulong AppletProgramId = 0x0100000000001009; + const string AppletVersion = "1.0.0"; + + string contentPath = ViewModel.ContentManager.GetInstalledContentPath(AppletProgramId, StorageId.BuiltInSystem, NcaContentType.Program); if (!string.IsNullOrEmpty(contentPath)) { ApplicationData applicationData = new() { - Name = name, - Id = programId, - Path = contentPath, + Name = AppletName, + Id = AppletProgramId, + Path = contentPath }; - - string version = "1.0.0"; - var nacpData = new BlitStruct(1); - - //version buffer - Encoding.ASCII.GetBytes(version).AsSpan().CopyTo(nacpData.ByteSpan.Slice(0x3060)); - - //name and distributor buffer - //repeat once for each locale (the ApplicationControlProperty has 16 locales) - for (int i = 0; i < 0x10; i++) - { - Encoding.ASCII.GetBytes(name).AsSpan().CopyTo(nacpData.ByteSpan.Slice(i * 0x300)); - "Ryujinx"u8.ToArray().AsSpan().CopyTo(nacpData.ByteSpan.Slice(i * 0x300 + 0x200)); - } + + var nacpData = StructHelpers.CreateCustomNacpData(AppletName, AppletVersion); await ViewModel.LoadApplication(applicationData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen, nacpData); } -- 2.47.1 From 4ffb8aef129ac4b0469c862cc595aa97816d4808 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 7 Dec 2024 05:21:16 -0600 Subject: [PATCH 107/722] Try and fix nullref --- src/Ryujinx.UI.Common/App/ApplicationLibrary.cs | 12 +++++------- src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs | 4 ++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs index cc5a63ab8..a750db997 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs @@ -1082,11 +1082,10 @@ namespace Ryujinx.UI.App.Common var currentlySelected = TitleUpdates.Items.FindFirst(it => it.TitleUpdate.TitleIdBase == update.TitleIdBase && it.IsSelected); - var shouldSelect = !currentlySelected.HasValue || - currentlySelected.Value.TitleUpdate.Version < update.Version; + var shouldSelect = currentlySelected.Check(curr => curr.TitleUpdate.Version < update.Version); _titleUpdates.AddOrUpdate((update, shouldSelect)); - + if (currentlySelected.HasValue && shouldSelect) { _titleUpdates.AddOrUpdate((currentlySelected.Value.TitleUpdate, false)); @@ -1478,7 +1477,7 @@ namespace Ryujinx.UI.App.Common if (TryGetTitleUpdatesFromFile(application.Path, out var bundledUpdates)) { - var savedUpdateLookup = savedUpdates.Select(update => update.Item1).ToHashSet(); + var savedUpdateLookup = savedUpdates.Select(update => update.Update).ToHashSet(); bool updatesChanged = false; foreach (var update in bundledUpdates.OrderByDescending(bundled => bundled.Version)) @@ -1486,11 +1485,10 @@ namespace Ryujinx.UI.App.Common if (!savedUpdateLookup.Contains(update)) { bool shouldSelect = false; - if (!selectedUpdate.HasValue || selectedUpdate.Value.Item1.Version < update.Version) + if (selectedUpdate.Check(su => su.Update.Version < update.Version)) { shouldSelect = true; - if (selectedUpdate) - _titleUpdates.AddOrUpdate((selectedUpdate.Value.Item1, false)); + _titleUpdates.AddOrUpdate((selectedUpdate.Value.Update, false)); selectedUpdate = (update, true); } diff --git a/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs b/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs index c6bacfd91..36de8b31a 100644 --- a/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs +++ b/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs @@ -28,7 +28,7 @@ namespace Ryujinx.UI.Common.Helper { private static readonly TitleUpdateMetadataJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); - public static List<(TitleUpdateModel, bool IsSelected)> LoadTitleUpdatesJson(VirtualFileSystem vfs, ulong applicationIdBase) + public static List<(TitleUpdateModel Update, bool IsSelected)> LoadTitleUpdatesJson(VirtualFileSystem vfs, ulong applicationIdBase) { var titleUpdatesJsonPath = PathToGameUpdatesJson(applicationIdBase); @@ -77,7 +77,7 @@ namespace Ryujinx.UI.Common.Helper JsonHelper.SerializeToFile(titleUpdatesJsonPath, titleUpdateWindowData, _serializerContext.TitleUpdateMetadata); } - private static List<(TitleUpdateModel, bool IsSelected)> LoadTitleUpdates(VirtualFileSystem vfs, TitleUpdateMetadata titleUpdateMetadata, ulong applicationIdBase) + private static List<(TitleUpdateModel Update, bool IsSelected)> LoadTitleUpdates(VirtualFileSystem vfs, TitleUpdateMetadata titleUpdateMetadata, ulong applicationIdBase) { var result = new List<(TitleUpdateModel, bool IsSelected)>(); -- 2.47.1 From 315a1819c0f85b6dea7ae971af59b6de64598d75 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 7 Dec 2024 05:31:37 -0600 Subject: [PATCH 108/722] Attempt #2 --- src/Ryujinx.UI.Common/App/ApplicationLibrary.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs index a750db997..cb6467f5e 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs @@ -1079,10 +1079,12 @@ namespace Ryujinx.UI.App.Common private bool AddAndAutoSelectUpdate(TitleUpdateModel update) { + if (update == null) return false; + var currentlySelected = TitleUpdates.Items.FindFirst(it => it.TitleUpdate.TitleIdBase == update.TitleIdBase && it.IsSelected); - var shouldSelect = currentlySelected.Check(curr => curr.TitleUpdate.Version < update.Version); + var shouldSelect = currentlySelected.Check(curr => curr.TitleUpdate?.Version < update.Version); _titleUpdates.AddOrUpdate((update, shouldSelect)); @@ -1485,7 +1487,7 @@ namespace Ryujinx.UI.App.Common if (!savedUpdateLookup.Contains(update)) { bool shouldSelect = false; - if (selectedUpdate.Check(su => su.Update.Version < update.Version)) + if (selectedUpdate.Check(su => su.Update?.Version < update.Version)) { shouldSelect = true; _titleUpdates.AddOrUpdate((selectedUpdate.Value.Update, false)); -- 2.47.1 From de00a71690d482f14e54d1b1fd21a8d04de84929 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 7 Dec 2024 05:48:11 -0600 Subject: [PATCH 109/722] UI: Fix missing total DLC count. Fixes #347. --- src/Ryujinx/Assets/Locales/ar_SA.json | 2 +- src/Ryujinx/Assets/Locales/de_DE.json | 2 +- src/Ryujinx/Assets/Locales/el_GR.json | 2 +- src/Ryujinx/Assets/Locales/en_US.json | 2 +- src/Ryujinx/Assets/Locales/es_ES.json | 2 +- src/Ryujinx/Assets/Locales/fr_FR.json | 2 +- src/Ryujinx/Assets/Locales/it_IT.json | 2 +- src/Ryujinx/Assets/Locales/ja_JP.json | 2 +- src/Ryujinx/Assets/Locales/ko_KR.json | 2 +- src/Ryujinx/Assets/Locales/pl_PL.json | 2 +- src/Ryujinx/Assets/Locales/pt_BR.json | 2 +- src/Ryujinx/Assets/Locales/ru_RU.json | 2 +- src/Ryujinx/Assets/Locales/th_TH.json | 2 +- src/Ryujinx/Assets/Locales/tr_TR.json | 2 +- src/Ryujinx/Assets/Locales/uk_UA.json | 2 +- src/Ryujinx/Assets/Locales/zh_TW.json | 2 +- .../DownloadableContentManagerWindow.axaml.cs | 14 ++++---------- 17 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index 412695af6..bdb6a92ec 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "الغش متوفر لـ {0} [{1}]", "BuildId": "معرف البناء:", "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", - "DlcWindowHeading": "المحتويات القابلة للتنزيل {0}", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index 76e8dfadd..9f4b63a95 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "Cheats verfügbar für {0} [{1}]", "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", "BuildId": "BuildId:", - "DlcWindowHeading": "DLC verfügbar für {0} [{1}]", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index 0409297ac..7979b9228 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "Διαθέσιμα Cheats για {0} [{1}]", "BuildId": "BuildId:", "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", - "DlcWindowHeading": "{0} Downloadable Content(s) available for {1} ({2})", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index ba183c8bd..0598665fd 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -802,7 +802,7 @@ "CheatWindowHeading": "Cheats Available for {0} [{1}]", "BuildId": "BuildId:", "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", - "DlcWindowHeading": "{0} Downloadable Content(s) available for {1} ({2})", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index 934031c72..3774605f6 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -787,7 +787,7 @@ "UpdateWindowBundledContentNotice": "Las actualizaciones agrupadas no pueden ser eliminadas, solamente deshabilitadas.", "CheatWindowHeading": "Cheats disponibles para {0} [{1}]", "BuildId": "Id de compilación:", - "DlcWindowHeading": "Contenido descargable disponible para {0} [{1}]", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "Se agregaron {0} nuevo(s) contenido(s) descargable(s)", "AutoloadDlcAddedMessage": "Se agregaron {0} nuevo(s) contenido(s) descargable(s)", "AutoloadDlcRemovedMessage": "Se eliminaron {0} contenido(s) descargable(s) faltantes", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index 0223e322e..c5a4bbeec 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "Cheats disponibles pour {0} [{1}]", "BuildId": "BuildId :", "DlcWindowBundledContentNotice": "Les DLC inclus avec le jeu ne peuvent pas être supprimés mais peuvent être désactivés.", - "DlcWindowHeading": "{0} Contenu(s) téléchargeable(s)", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} nouveau(x) contenu(s) téléchargeable(s) ajouté(s)", "AutoloadDlcAddedMessage": "{0} nouveau(x) contenu(s) téléchargeable(s) ajouté(s)", "AutoloadDlcRemovedMessage": "{0} contenu(s) téléchargeable(s) manquant(s) supprimé(s)", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index 5ca17bc2e..18e4ee04f 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "Trucchi disponibili per {0} [{1}]", "BuildId": "ID Build", "DlcWindowBundledContentNotice": "i DLC \"impacchettati\" non possono essere rimossi, ma solo disabilitati.", - "DlcWindowHeading": "DLC disponibili per {0} [{1}]", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} nuovo/i contenuto/i scaricabile/i aggiunto/i", "AutoloadDlcAddedMessage": "{0} contenuto/i scaricabile/i aggiunto/i", "AutoloadDlcRemovedMessage": "{0} contenuto/i scaricabile/i mancante/i rimosso/i", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index ffa768c13..6ecc74009 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -787,7 +787,7 @@ "UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.", "CheatWindowHeading": "利用可能なチート {0} [{1}]", "BuildId": "ビルドID:", - "DlcWindowHeading": "利用可能な DLC {0} [{1}]", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 8731c8662..71aaa41e8 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "{0} [{1}]에 사용 가능한 치트", "BuildId": "빌드ID:", "DlcWindowBundledContentNotice": "번들 DLC는 제거할 수 없으며 비활성화만 가능합니다.", - "DlcWindowHeading": "{1} ({2})에 내려받기 가능한 콘텐츠 {0}개 사용 가능", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨", "AutoloadDlcAddedMessage": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨", "AutoloadDlcRemovedMessage": "{0}개의 내려받기 가능한 콘텐츠가 제거됨", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index d87453ef2..6a2fa08b1 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "Kody Dostępne dla {0} [{1}]", "BuildId": "Identyfikator wersji:", "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", - "DlcWindowHeading": "{0} Zawartości do Pobrania dostępna dla {1} ({2})", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index c240bd804..90b78b732 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -787,7 +787,7 @@ "CheatWindowHeading": "Cheats disponíveis para {0} [{1}]", "BuildId": "ID da Build:", "DlcWindowBundledContentNotice": "DLCs incorporadas não podem ser removidas, apenas desativadas.", - "DlcWindowHeading": "{0} DLCs disponíveis para {1} ({2})", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} novo(s) conteúdo(s) para download adicionado(s)", "AutoloadDlcAddedMessage": "{0} novo(s) conteúdo(s) para download adicionado(s)", "AutoloadDlcRemovedMessage": "{0} conteúdo(s) para download ausente(s) removido(s)", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index 1046208fb..f058154e9 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "Доступные читы для {0} [{1}]", "BuildId": "ID версии:", "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", - "DlcWindowHeading": "{0} DLC", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index e29004e10..33b2c4f30 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "สูตรโกงมีให้สำหรับ {0} [{1}]", "BuildId": "รหัสการสร้าง:", "DlcWindowBundledContentNotice": "แพ็ค DLC ไม่สามารถลบทิ้งได้ สามารถปิดใช้งานได้เท่านั้น", - "DlcWindowHeading": "{0} DLC ที่สามารถดาวน์โหลดได้", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} DLC ใหม่ที่เพิ่มเข้ามา", "AutoloadDlcAddedMessage": "{0} ใหม่ที่เพิ่มเข้ามา", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index 101206210..72da205cb 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "{0} için Hile mevcut [{1}]", "BuildId": "BuildId:", "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", - "DlcWindowHeading": "{0} Downloadable Content(s) available for {1} ({2})", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 89e565bf3..06f658640 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "Коди доступні для {0} [{1}]", "BuildId": "ID збірки:", "DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.", - "DlcWindowHeading": "Вміст для завантаження, доступний для {1} ({2}): {0}", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcAddedMessage": "{0} new downloadable content(s) added", "AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index 792ced42b..64f137885 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -788,7 +788,7 @@ "CheatWindowHeading": "可用於 {0} [{1}] 的密技", "BuildId": "組建識別碼:", "DlcWindowBundledContentNotice": "附帶的 DLC 只能被停用而無法被刪除。", - "DlcWindowHeading": "{0} 個可下載內容", + "DlcWindowHeading": "{0} DLC(s) available", "DlcWindowDlcAddedMessage": "已加入 {0} 個 DLC", "AutoloadDlcAddedMessage": "已加入 {0} 個 DLC", "AutoloadDlcRemovedMessage": "已刪除 {0} 個遺失的 DLC", diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs index 340515a5b..2afa8b529 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs @@ -61,23 +61,17 @@ namespace Ryujinx.Ava.UI.Windows private void RemoveDLC(object sender, RoutedEventArgs e) { - if (sender is Button button) + if (sender is Button { DataContext: DownloadableContentModel dlc }) { - if (button.DataContext is DownloadableContentModel model) - { - ViewModel.Remove(model); - } + ViewModel.Remove(dlc); } } private void OpenLocation(object sender, RoutedEventArgs e) { - if (sender is Button button) + if (sender is Button { DataContext: DownloadableContentModel dlc }) { - if (button.DataContext is DownloadableContentModel model) - { - OpenHelper.LocateFile(model.ContainerPath); - } + OpenHelper.LocateFile(dlc.ContainerPath); } } -- 2.47.1 From 06abba25c1f63737e5bccbbabbc71a6ade33c366 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 7 Dec 2024 06:22:46 -0600 Subject: [PATCH 110/722] UI: Adapt accent color to the user's system. https://amwx.github.io/FluentAvaloniaDocs/pages/FATheme/Accents#using-the-systems-accent-color --- src/Ryujinx/App.axaml | 2 +- src/Ryujinx/Assets/Styles/Themes.xaml | 36 +------------------ .../Common/Markup/BasicMarkupExtension.cs | 4 +-- src/Ryujinx/Common/Markup/MarkupExtensions.cs | 6 ++-- .../UI/Controls/ApplicationGridView.axaml | 2 +- .../UI/Controls/ApplicationListView.axaml | 2 +- 6 files changed, 9 insertions(+), 43 deletions(-) diff --git a/src/Ryujinx/App.axaml b/src/Ryujinx/App.axaml index 5a603509c..5c96f97f2 100644 --- a/src/Ryujinx/App.axaml +++ b/src/Ryujinx/App.axaml @@ -11,7 +11,7 @@ - + diff --git a/src/Ryujinx/Assets/Styles/Themes.xaml b/src/Ryujinx/Assets/Styles/Themes.xaml index 056eba228..46e298035 100644 --- a/src/Ryujinx/Assets/Styles/Themes.xaml +++ b/src/Ryujinx/Assets/Styles/Themes.xaml @@ -4,18 +4,6 @@ - - - #FF00C3E3 - #FF00C3E3 - #FF00C3E3 - #FF00C3E3 - #FF00C3E3 - #FF00C3E3 - #FF00C3E3 - #FFe8e8e8 #FF00FABB #FFF0F0F0 #FFd6d6d6 @@ -26,6 +14,7 @@ #b3ffffff #80cccccc #A0000000 + #fffcd12a #FF2EEAC9 #FFFF4554 #6483F5 @@ -33,18 +22,6 @@ - - - #FF00C3E3 - #FF00C3E3 - #FF00C3E3 - #FF00C3E3 - #FF00C3E3 - #FF00C3E3 - #FF00C3E3 - #FFe8e8e8 #FF00FABB #FFF0F0F0 #FFd6d6d6 @@ -59,18 +36,7 @@ - - #008AA8 - #FF00C3E3 - #FF99b000 - #FF006d7d - #FF00525E - #FF00dbff - #FF19dfff - #FF33e3ff #FF00FABB #FF2D2D2D #FF505050 diff --git a/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs b/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs index 67c016562..b1b7361a6 100644 --- a/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs +++ b/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs @@ -17,13 +17,13 @@ namespace Ryujinx.Ava.Common.Markup public virtual string Name => "Item"; public virtual Action? Setter => null; - protected abstract T? GetValue(); + protected abstract T? Value { get; } protected virtual void ConfigureBindingExtension(CompiledBindingExtension _) { } private ClrPropertyInfo PropertyInfo => new(Name, - _ => GetValue(), + _ => Value, Setter as Action, typeof(T)); diff --git a/src/Ryujinx/Common/Markup/MarkupExtensions.cs b/src/Ryujinx/Common/Markup/MarkupExtensions.cs index a804792c7..cae6d8c2c 100644 --- a/src/Ryujinx/Common/Markup/MarkupExtensions.cs +++ b/src/Ryujinx/Common/Markup/MarkupExtensions.cs @@ -6,17 +6,17 @@ namespace Ryujinx.Ava.Common.Markup { internal class IconExtension(string iconString) : BasicMarkupExtension { - protected override Icon GetValue() => new() { Value = iconString }; + protected override Icon Value => new() { Value = iconString }; } internal class SpinningIconExtension(string iconString) : BasicMarkupExtension { - protected override Icon GetValue() => new() { Value = iconString, Animation = IconAnimation.Spin }; + protected override Icon Value => new() { Value = iconString, Animation = IconAnimation.Spin }; } internal class LocaleExtension(LocaleKeys key) : BasicMarkupExtension { - protected override string GetValue() => LocaleManager.Instance[key]; + protected override string Value => LocaleManager.Instance[key]; protected override void ConfigureBindingExtension(CompiledBindingExtension bindingExtension) => bindingExtension.Source = LocaleManager.Instance; diff --git a/src/Ryujinx/UI/Controls/ApplicationGridView.axaml b/src/Ryujinx/UI/Controls/ApplicationGridView.axaml index 98a1c004b..3bcb468ae 100644 --- a/src/Ryujinx/UI/Controls/ApplicationGridView.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationGridView.axaml @@ -91,7 +91,7 @@ HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="16" - Foreground="{DynamicResource SystemAccentColor}" + Foreground="{DynamicResource FavoriteApplicationIconColor}" IsVisible="{Binding Favorite}" Symbol="StarFilled" /> diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml b/src/Ryujinx/UI/Controls/ApplicationListView.axaml index 0daa77ac4..8a72ebfbf 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml @@ -146,7 +146,7 @@ HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="16" - Foreground="{DynamicResource SystemAccentColor}" + Foreground="{DynamicResource FavoriteApplicationIconColor}" IsVisible="{Binding Favorite}" Symbol="StarFilled" /> -- 2.47.1 From 8ae72c1a0002a3c1bae7d92fad125333eb6e3edb Mon Sep 17 00:00:00 2001 From: bangfire <168100143+bangfire@users.noreply.github.com> Date: Sat, 7 Dec 2024 13:17:39 +0000 Subject: [PATCH 111/722] Fix Windows Terminal hide/show functions (#342) https://stackoverflow.com/a/78577080 --- src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs b/src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs index 623952b37..99b209c6e 100644 --- a/src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs +++ b/src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs @@ -7,6 +7,24 @@ namespace Ryujinx.UI.Common.Helper { public static partial class ConsoleHelper { + [SupportedOSPlatform("windows")] + [LibraryImport("kernel32")] + private static partial nint GetConsoleWindow(); + + [SupportedOSPlatform("windows")] + [LibraryImport("user32")] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool ShowWindow(nint hWnd, int nCmdShow); + + [SupportedOSPlatform("windows")] + [LibraryImport("user32")] + private static partial nint GetForegroundWindow(); + + [SupportedOSPlatform("windows")] + [LibraryImport("user32")] + [return: MarshalAs(UnmanagedType.Bool)] + private static partial bool SetForegroundWindow(nint hWnd); + public static bool SetConsoleWindowStateSupported => OperatingSystem.IsWindows(); public static void SetConsoleWindowState(bool show) @@ -35,16 +53,11 @@ namespace Ryujinx.UI.Common.Helper return; } + SetForegroundWindow(hWnd); + + hWnd = GetForegroundWindow(); + ShowWindow(hWnd, show ? SW_SHOW : SW_HIDE); } - - [SupportedOSPlatform("windows")] - [LibraryImport("kernel32")] - private static partial nint GetConsoleWindow(); - - [SupportedOSPlatform("windows")] - [LibraryImport("user32")] - [return: MarshalAs(UnmanagedType.Bool)] - private static partial bool ShowWindow(nint hWnd, int nCmdShow); } } -- 2.47.1 From ec11bf2af9087a9ec834252fb74bf8df5365efd0 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 7 Dec 2024 08:53:23 -0600 Subject: [PATCH 112/722] i18n: Clean out old translations and reset outdated ones --- src/Ryujinx/Assets/Locales/ar_SA.json | 6 ++---- src/Ryujinx/Assets/Locales/de_DE.json | 6 ++---- src/Ryujinx/Assets/Locales/el_GR.json | 6 ++---- src/Ryujinx/Assets/Locales/en_US.json | 6 ++---- src/Ryujinx/Assets/Locales/es_ES.json | 6 ++---- src/Ryujinx/Assets/Locales/fr_FR.json | 6 ++---- src/Ryujinx/Assets/Locales/he_IL.json | 6 ++---- src/Ryujinx/Assets/Locales/it_IT.json | 6 ++---- src/Ryujinx/Assets/Locales/ja_JP.json | 6 ++---- src/Ryujinx/Assets/Locales/ko_KR.json | 6 ++---- src/Ryujinx/Assets/Locales/pl_PL.json | 6 ++---- src/Ryujinx/Assets/Locales/pt_BR.json | 6 ++---- src/Ryujinx/Assets/Locales/ru_RU.json | 6 ++---- src/Ryujinx/Assets/Locales/th_TH.json | 6 ++---- src/Ryujinx/Assets/Locales/tr_TR.json | 6 ++---- src/Ryujinx/Assets/Locales/uk_UA.json | 6 ++---- src/Ryujinx/Assets/Locales/zh_CN.json | 6 ++---- src/Ryujinx/Assets/Locales/zh_TW.json | 6 ++---- 18 files changed, 36 insertions(+), 72 deletions(-) diff --git a/src/Ryujinx/Assets/Locales/ar_SA.json b/src/Ryujinx/Assets/Locales/ar_SA.json index bdb6a92ec..fee84779a 100644 --- a/src/Ryujinx/Assets/Locales/ar_SA.json +++ b/src/Ryujinx/Assets/Locales/ar_SA.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "انقر لفتح موقع ريوجينكس في متصفحك الافتراضي.", "AboutDisclaimerMessage": "ريوجينكس لا ينتمي إلى نينتندو™،\nأو أي من شركائها بأي شكل من الأشكال.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) يتم \nاستخدامه في محاكاة أمبيو لدينا.", - "AboutPatreonUrlTooltipMessage": "انقر لفتح صفحة ريوجينكس في باتريون في متصفحك الافتراضي.", "AboutGithubUrlTooltipMessage": "انقر لفتح صفحة ريوجينكس في غيت هاب في متصفحك الافتراضي.", "AboutDiscordUrlTooltipMessage": "انقر لفتح دعوة إلى خادم ريوجينكس في ديكسورد في متصفحك الافتراضي.", - "AboutTwitterUrlTooltipMessage": "انقر لفتح صفحة ريوجينكس في تويتر في متصفحك الافتراضي.", "AboutRyujinxAboutTitle": "حول:", - "AboutRyujinxAboutContent": "ريوجينكس هو محاكي لجهاز نينتندو سويتش™.\nمن فضلك ادعمنا على باتريون.\nاحصل على آخر الأخبار على تويتر أو ديسكورد.\nيمكن للمطورين المهتمين بالمساهمة معرفة المزيد على غيت هاب أو ديسكورد.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "تتم صيانته بواسطة:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "انقر لفتح صفحة المساهمين في متصفحك الافتراضي.", - "AboutRyujinxSupprtersTitle": "مدعوم على باتريون بواسطة:", "AmiiboSeriesLabel": "مجموعة أميبو", "AmiiboCharacterLabel": "شخصية", "AmiiboScanButtonLabel": "فحصه", diff --git a/src/Ryujinx/Assets/Locales/de_DE.json b/src/Ryujinx/Assets/Locales/de_DE.json index 9f4b63a95..5391df474 100644 --- a/src/Ryujinx/Assets/Locales/de_DE.json +++ b/src/Ryujinx/Assets/Locales/de_DE.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "Klicke hier, um die Ryujinx Website im Standardbrowser zu öffnen.", "AboutDisclaimerMessage": "Ryujinx ist in keinster Weise weder mit Nintendo™, \nnoch mit deren Partnern verbunden.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) wird in unserer Amiibo \nEmulation benutzt.", - "AboutPatreonUrlTooltipMessage": "Klicke hier, um die Ryujinx Patreon Seite im Standardbrowser zu öffnen.", "AboutGithubUrlTooltipMessage": "Klicke hier, um die Ryujinx GitHub Seite im Standardbrowser zu öffnen.", "AboutDiscordUrlTooltipMessage": "Klicke hier, um eine Einladung zum Ryujinx Discord Server im Standardbrowser zu öffnen.", - "AboutTwitterUrlTooltipMessage": "Klicke hier, um die Ryujinx Twitter Seite im Standardbrowser zu öffnen.", "AboutRyujinxAboutTitle": "Über:", - "AboutRyujinxAboutContent": "Ryujinx ist ein Nintendo Switch™ Emulator.\nBitte unterstütze uns auf Patreon.\nAuf Twitter oder Discord erfährst du alle Neuigkeiten.\nEntwickler, die an einer Mitarbeit interessiert sind, können auf GitHub oder Discord mehr erfahren.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Entwickelt von:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Klicke hier, um die Liste der Mitwirkenden im Standardbrowser zu öffnen.", - "AboutRyujinxSupprtersTitle": "Unterstützt auf Patreon von:", "AmiiboSeriesLabel": "Amiibo-Serie", "AmiiboCharacterLabel": "Charakter", "AmiiboScanButtonLabel": "Einscannen", diff --git a/src/Ryujinx/Assets/Locales/el_GR.json b/src/Ryujinx/Assets/Locales/el_GR.json index 7979b9228..3c308ac84 100644 --- a/src/Ryujinx/Assets/Locales/el_GR.json +++ b/src/Ryujinx/Assets/Locales/el_GR.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τον ιστότοπο Ryujinx στο προεπιλεγμένο πρόγραμμα περιήγησης.", "AboutDisclaimerMessage": "Το Ryujinx δεν είναι συνδεδεμένο με τη Nintendo™,\nούτε με κανέναν από τους συνεργάτες της, με οποιονδήποτε τρόπο.", "AboutAmiiboDisclaimerMessage": "Το AmiiboAPI (www.amiiboapi.com) χρησιμοποιείται\nστην προσομοίωση Amiibo.", - "AboutPatreonUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Ryujinx Patreon στο προεπιλεγμένο πρόγραμμα περιήγησης.", "AboutGithubUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Ryujinx GitHub στο προεπιλεγμένο πρόγραμμα περιήγησης.", "AboutDiscordUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε μία πρόσκληση στον διακομιστή Ryujinx Discord στο προεπιλεγμένο πρόγραμμα περιήγησης.", - "AboutTwitterUrlTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Ryujinx Twitter στο προεπιλεγμένο πρόγραμμα περιήγησης.", "AboutRyujinxAboutTitle": "Σχετικά με:", - "AboutRyujinxAboutContent": "Το Ryujinx είναι ένας εξομοιωτής για το Nintendo Switch™.\nΥποστηρίξτε μας στο Patreon.\nΛάβετε όλα τα τελευταία νέα στο Twitter ή στο Discord.\nΟι προγραμματιστές που ενδιαφέρονται να συνεισφέρουν μπορούν να μάθουν περισσότερα στο GitHub ή στο Discord μας.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Συντηρείται από:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Κάντε κλικ για να ανοίξετε τη σελίδα Συνεισφέροντες στο προεπιλεγμένο πρόγραμμα περιήγησης.", - "AboutRyujinxSupprtersTitle": "Υποστηρίζεται στο Patreon από:", "AmiiboSeriesLabel": "Σειρά Amiibo", "AmiiboCharacterLabel": "Χαρακτήρας", "AmiiboScanButtonLabel": "Σαρώστε το", diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json index 0598665fd..bad69a41c 100644 --- a/src/Ryujinx/Assets/Locales/en_US.json +++ b/src/Ryujinx/Assets/Locales/en_US.json @@ -564,15 +564,13 @@ "AboutUrlTooltipMessage": "Click to open the Ryujinx website in your default browser.", "AboutDisclaimerMessage": "Ryujinx is not affiliated with Nintendo™,\nor any of its partners, in any way.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) is used\nin our Amiibo emulation.", - "AboutPatreonUrlTooltipMessage": "Click to open the Ryujinx Patreon page in your default browser.", "AboutGithubUrlTooltipMessage": "Click to open the Ryujinx GitHub page in your default browser.", "AboutDiscordUrlTooltipMessage": "Click to open an invite to the Ryujinx Discord server in your default browser.", - "AboutTwitterUrlTooltipMessage": "Click to open the Ryujinx Twitter page in your default browser.", "AboutRyujinxAboutTitle": "About:", - "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nPlease support us on Patreon.\nGet all the latest news on our Twitter or Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Maintained By:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Click to open the Contributors page in your default browser.", - "AboutRyujinxSupprtersTitle": "Supported on Patreon By:", "AmiiboSeriesLabel": "Amiibo Series", "AmiiboCharacterLabel": "Character", "AmiiboScanButtonLabel": "Scan It", diff --git a/src/Ryujinx/Assets/Locales/es_ES.json b/src/Ryujinx/Assets/Locales/es_ES.json index 3774605f6..fe8b57f78 100644 --- a/src/Ryujinx/Assets/Locales/es_ES.json +++ b/src/Ryujinx/Assets/Locales/es_ES.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "Haz clic para abrir el sitio web de Ryujinx en tu navegador predeterminado.", "AboutDisclaimerMessage": "Ryujinx no tiene afiliación alguna con Nintendo™,\nni con ninguno de sus socios.", "AboutAmiiboDisclaimerMessage": "Utilizamos AmiiboAPI (www.amiiboapi.com)\nen nuestra emulación de Amiibo.", - "AboutPatreonUrlTooltipMessage": "Haz clic para abrir el Patreon de Ryujinx en tu navegador predeterminado.", "AboutGithubUrlTooltipMessage": "Haz clic para abrir el GitHub de Ryujinx en tu navegador predeterminado.", "AboutDiscordUrlTooltipMessage": "Haz clic para recibir una invitación al Discord de Ryujinx en tu navegador predeterminado.", - "AboutTwitterUrlTooltipMessage": "Haz clic para abrir el Twitter de Ryujinx en tu navegador predeterminado.", "AboutRyujinxAboutTitle": "Acerca de:", - "AboutRyujinxAboutContent": "Ryujinx es un emulador para Nintendo Switch™.\nPor favor, apóyanos en Patreon.\nEncuentra las noticias más recientes en nuestro Twitter o Discord.\nDesarrolladores interesados en contribuir pueden encontrar más información en GitHub o Discord.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Mantenido por:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Haz clic para abrir la página de contribuidores en tu navegador predeterminado.", - "AboutRyujinxSupprtersTitle": "Apoyado en Patreon Por:", "AmiiboSeriesLabel": "Serie de Amiibo", "AmiiboCharacterLabel": "Personaje", "AmiiboScanButtonLabel": "Escanear", diff --git a/src/Ryujinx/Assets/Locales/fr_FR.json b/src/Ryujinx/Assets/Locales/fr_FR.json index c5a4bbeec..cd4e74f04 100644 --- a/src/Ryujinx/Assets/Locales/fr_FR.json +++ b/src/Ryujinx/Assets/Locales/fr_FR.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "Cliquez pour ouvrir le site de Ryujinx dans votre navigateur par défaut.", "AboutDisclaimerMessage": "Ryujinx n'est pas affilié à Nintendo™,\nou à aucun de ses partenaires, de quelque manière que ce soit.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) est utilisé\ndans notre émulation Amiibo.", - "AboutPatreonUrlTooltipMessage": "Cliquez pour ouvrir la page Patreon de Ryujinx dans votre navigateur par défaut.", "AboutGithubUrlTooltipMessage": "Cliquez pour ouvrir la page GitHub de Ryujinx dans votre navigateur par défaut.", "AboutDiscordUrlTooltipMessage": "Cliquez pour ouvrir une invitation au serveur Discord de Ryujinx dans votre navigateur par défaut.", - "AboutTwitterUrlTooltipMessage": "Cliquez pour ouvrir la page Twitter de Ryujinx dans votre navigateur par défaut.", "AboutRyujinxAboutTitle": "À propos :", - "AboutRyujinxAboutContent": "Ryujinx est un émulateur pour la Nintendo Switch™.\nMerci de nous soutenir sur Patreon.\nObtenez toutes les dernières actualités sur notre Twitter ou notre Discord.\nLes développeurs intéressés à contribuer peuvent en savoir plus sur notre GitHub ou notre Discord.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Maintenu par :", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Cliquez pour ouvrir la page Contributeurs dans votre navigateur par défaut.", - "AboutRyujinxSupprtersTitle": "Supporté sur Patreon par :", "AmiiboSeriesLabel": "Séries Amiibo", "AmiiboCharacterLabel": "Personnage", "AmiiboScanButtonLabel": "Scanner", diff --git a/src/Ryujinx/Assets/Locales/he_IL.json b/src/Ryujinx/Assets/Locales/he_IL.json index 318068bf3..14cfc4977 100644 --- a/src/Ryujinx/Assets/Locales/he_IL.json +++ b/src/Ryujinx/Assets/Locales/he_IL.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "לחץ כדי לפתוח את אתר ריוג'ינקס בדפדפן ברירת המחדל שלך.", "AboutDisclaimerMessage": "ריוג'ינקס אינה מזוהת עם נינטנדו,\nאו שוטפייה בכל דרך שהיא.", "AboutAmiiboDisclaimerMessage": "ממשק אמיבו (www.amiiboapi.com) משומש בהדמיית האמיבו שלנו.", - "AboutPatreonUrlTooltipMessage": "לחץ כדי לפתוח את דף הפטראון של ריוג'ינקס בדפדפן ברירת המחדל שלך.", "AboutGithubUrlTooltipMessage": "לחץ כדי לפתוח את דף הגיטהב של ריוג'ינקס בדפדפן ברירת המחדל שלך.", "AboutDiscordUrlTooltipMessage": "לחץ כדי לפתוח הזמנה לשרת הדיסקורד של ריוג'ינקס בדפדפן ברירת המחדל שלך.", - "AboutTwitterUrlTooltipMessage": "לחץ כדי לפתוח את דף הטוויטר של Ryujinx בדפדפן ברירת המחדל שלך.", "AboutRyujinxAboutTitle": "אודות:", - "AboutRyujinxAboutContent": "ריוג'ינקס הוא אמולטור עבור הנינטנדו סוויץ' (כל הזכויות שמורות).\nבבקשה תתמכו בנו בפטראון.\nקבל את כל החדשות האחרונות בטוויטר או בדיסקורד שלנו.\nמפתחים המעוניינים לתרום יכולים לקבל מידע נוסף ב-גיטהאב או ב-דיסקורד שלנו.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "מתוחזק על ידי:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "לחץ כדי לפתוח את דף התורמים בדפדפן ברירת המחדל שלך.", - "AboutRyujinxSupprtersTitle": "תמוך באמצעות Patreon", "AmiiboSeriesLabel": "סדרת אמיבו", "AmiiboCharacterLabel": "דמות", "AmiiboScanButtonLabel": "סרוק את זה", diff --git a/src/Ryujinx/Assets/Locales/it_IT.json b/src/Ryujinx/Assets/Locales/it_IT.json index 18e4ee04f..854b831c1 100644 --- a/src/Ryujinx/Assets/Locales/it_IT.json +++ b/src/Ryujinx/Assets/Locales/it_IT.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "Clicca per aprire il sito web di Ryujinx nel tuo browser predefinito.", "AboutDisclaimerMessage": "Ryujinx non è affiliato con Nintendo™,\no i suoi partner, in alcun modo.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) è usata\nnella nostra emulazione Amiibo.", - "AboutPatreonUrlTooltipMessage": "Clicca per aprire la pagina Patreon di Ryujinx nel tuo browser predefinito.", "AboutGithubUrlTooltipMessage": "Clicca per aprire la pagina GitHub di Ryujinx nel tuo browser predefinito.", "AboutDiscordUrlTooltipMessage": "Clicca per aprire un invito al server Discord di Ryujinx nel tuo browser predefinito.", - "AboutTwitterUrlTooltipMessage": "Clicca per aprire la pagina Twitter di Ryujinx nel tuo browser predefinito.", "AboutRyujinxAboutTitle": "Informazioni:", - "AboutRyujinxAboutContent": "Ryujinx è un emulatore per la console Nintendo Switch™.\nSostienici su Patreon.\nRicevi tutte le ultime notizie sul nostro Twitter o su Discord.\nGli sviluppatori interessati a contribuire possono trovare più informazioni sul nostro GitHub o Discord.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Mantenuto da:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Clicca per aprire la pagina dei contributori nel tuo browser predefinito.", - "AboutRyujinxSupprtersTitle": "Supportato su Patreon da:", "AmiiboSeriesLabel": "Serie Amiibo", "AmiiboCharacterLabel": "Personaggio", "AmiiboScanButtonLabel": "Scansiona", diff --git a/src/Ryujinx/Assets/Locales/ja_JP.json b/src/Ryujinx/Assets/Locales/ja_JP.json index 6ecc74009..19236c21b 100644 --- a/src/Ryujinx/Assets/Locales/ja_JP.json +++ b/src/Ryujinx/Assets/Locales/ja_JP.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "クリックするとデフォルトのブラウザで Ryujinx のウェブサイトを開きます.", "AboutDisclaimerMessage": "Ryujinx は Nintendo™ および\nそのパートナー企業とは一切関係ありません.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) は\nAmiibo エミュレーションに使用されています.", - "AboutPatreonUrlTooltipMessage": "クリックするとデフォルトのブラウザで Ryujinx の Patreon ページを開きます.", "AboutGithubUrlTooltipMessage": "クリックするとデフォルトのブラウザで Ryujinx の Github ページを開きます.", "AboutDiscordUrlTooltipMessage": "クリックするとデフォルトのブラウザで Ryujinx の Discord サーバを開きます.", - "AboutTwitterUrlTooltipMessage": "クリックするとデフォルトのブラウザで Ryujinx の Twitter ページを開きます.", "AboutRyujinxAboutTitle": "Ryujinx について:", - "AboutRyujinxAboutContent": "Ryujinx は Nintendo Switch™ のエミュレータです.\nPatreon で私達の活動を支援してください.\n最新の情報は Twitter または Discord から取得できます.\n貢献したい開発者の方は GitHub または Discord で詳細をご確認ください.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "開発者:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "クリックするとデフォルトのブラウザで 貢献者のページを開きます.", - "AboutRyujinxSupprtersTitle": "Patreon での支援者:", "AmiiboSeriesLabel": "Amiibo シリーズ", "AmiiboCharacterLabel": "キャラクタ", "AmiiboScanButtonLabel": "スキャン", diff --git a/src/Ryujinx/Assets/Locales/ko_KR.json b/src/Ryujinx/Assets/Locales/ko_KR.json index 71aaa41e8..8ae7a022a 100644 --- a/src/Ryujinx/Assets/Locales/ko_KR.json +++ b/src/Ryujinx/Assets/Locales/ko_KR.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "클릭하면 기본 브라우저에서 Ryujinx 웹사이트가 열립니다.", "AboutDisclaimerMessage": "Ryujinx는 Nintendo™\n또는 그 파트너와 제휴한 바가 없습니다.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI(www.amiiboapi.com)는\nAmiibo 에뮬레이션에 사용됩니다.", - "AboutPatreonUrlTooltipMessage": "클릭하면 기본 브라우저에서 Ryujinx Patreon 페이지가 열립니다.", "AboutGithubUrlTooltipMessage": "클릭하면 기본 브라우저에서 Ryujinx GitHub 페이지가 열립니다.", "AboutDiscordUrlTooltipMessage": "클릭하면 기본 브라우저에서 Ryujinx 디스코드 서버 초대장이 열립니다.", - "AboutTwitterUrlTooltipMessage": "클릭하면 기본 브라우저에서 Ryujinx 트위터 페이지가 열립니다.", "AboutRyujinxAboutTitle": "정보 :", - "AboutRyujinxAboutContent": "Ryujinx는 Nintendo Switch™용 에뮬레이터입니다.\nPatreon에서 저희를 후원해 주세요.\nTwitter나 Discord에서 최신 뉴스를 모두 받아보세요.\n기여에 관심이 있는 개발자는 GitHub이나 Discord에서 자세한 내용을 알아볼 수 있습니다.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "유지 관리 :", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "클릭하면 기본 브라우저에서 기여자 페이지가 열립니다.", - "AboutRyujinxSupprtersTitle": "Patreon에서 후원 :", "AmiiboSeriesLabel": "Amiibo 시리즈", "AmiiboCharacterLabel": "캐릭터", "AmiiboScanButtonLabel": "스캔하기", diff --git a/src/Ryujinx/Assets/Locales/pl_PL.json b/src/Ryujinx/Assets/Locales/pl_PL.json index 6a2fa08b1..7a0b16f6f 100644 --- a/src/Ryujinx/Assets/Locales/pl_PL.json +++ b/src/Ryujinx/Assets/Locales/pl_PL.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "Kliknij, aby otworzyć stronę Ryujinx w domyślnej przeglądarce.", "AboutDisclaimerMessage": "Ryujinx nie jest w żaden sposób powiązany z Nintendo™,\nani z żadnym z jej partnerów.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) jest używane\nw naszej emulacji Amiibo.", - "AboutPatreonUrlTooltipMessage": "Kliknij, aby otworzyć stronę Patreon Ryujinx w domyślnej przeglądarce.", "AboutGithubUrlTooltipMessage": "Kliknij, aby otworzyć stronę GitHub Ryujinx w domyślnej przeglądarce.", "AboutDiscordUrlTooltipMessage": "Kliknij, aby otworzyć zaproszenie na serwer Discord Ryujinx w domyślnej przeglądarce.", - "AboutTwitterUrlTooltipMessage": "Kliknij, aby otworzyć stronę Twitter Ryujinx w domyślnej przeglądarce.", "AboutRyujinxAboutTitle": "O Aplikacji:", - "AboutRyujinxAboutContent": "Ryujinx to emulator Nintendo Switch™.\nWspieraj nas na Patreonie.\nOtrzymuj najnowsze wiadomości na naszym Twitterze lub Discordzie.\nDeweloperzy zainteresowani współpracą mogą dowiedzieć się więcej na naszym GitHubie lub Discordzie.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Utrzymywany Przez:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Kliknij, aby otworzyć stronę Współtwórcy w domyślnej przeglądarce.", - "AboutRyujinxSupprtersTitle": "Wspierani na Patreonie Przez:", "AmiiboSeriesLabel": "Seria Amiibo", "AmiiboCharacterLabel": "Postać", "AmiiboScanButtonLabel": "Zeskanuj", diff --git a/src/Ryujinx/Assets/Locales/pt_BR.json b/src/Ryujinx/Assets/Locales/pt_BR.json index 90b78b732..acb063aea 100644 --- a/src/Ryujinx/Assets/Locales/pt_BR.json +++ b/src/Ryujinx/Assets/Locales/pt_BR.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "Clique para abrir o site do Ryujinx no seu navegador padrão.", "AboutDisclaimerMessage": "Ryujinx não é afiliado com a Nintendo™,\nou qualquer um de seus parceiros, de nenhum modo.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) é usado\nem nossa emulação de Amiibo.", - "AboutPatreonUrlTooltipMessage": "Clique para abrir a página do Patreon do Ryujinx no seu navegador padrão.", "AboutGithubUrlTooltipMessage": "Clique para abrir a página do GitHub do Ryujinx no seu navegador padrão.", "AboutDiscordUrlTooltipMessage": "Clique para abrir um convite ao servidor do Discord do Ryujinx no seu navegador padrão.", - "AboutTwitterUrlTooltipMessage": "Clique para abrir a página do Twitter do Ryujinx no seu navegador padrão.", "AboutRyujinxAboutTitle": "Sobre:", - "AboutRyujinxAboutContent": "Ryujinx é um emulador de Nintendo Switch™.\nPor favor, nos dê apoio no Patreon.\nFique por dentro de todas as novidades no Twitter ou Discord.\nDesenvolvedores com interesse em contribuir podem conseguir mais informações no GitHub ou Discord.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Mantido por:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Clique para abrir a página de contribuidores no seu navegador padrão.", - "AboutRyujinxSupprtersTitle": "Apoiado no Patreon por:", "AmiiboSeriesLabel": "Franquia Amiibo", "AmiiboCharacterLabel": "Personagem", "AmiiboScanButtonLabel": "Escanear", diff --git a/src/Ryujinx/Assets/Locales/ru_RU.json b/src/Ryujinx/Assets/Locales/ru_RU.json index f058154e9..eb93de21d 100644 --- a/src/Ryujinx/Assets/Locales/ru_RU.json +++ b/src/Ryujinx/Assets/Locales/ru_RU.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "Нажмите, чтобы открыть веб-сайт Ryujinx", "AboutDisclaimerMessage": "Ryujinx никоим образом не связан ни с Nintendo™, ни с кем-либо из ее партнеров.", "AboutAmiiboDisclaimerMessage": "Amiibo API (www.amiiboapi.com) используется для эмуляции Amiibo.", - "AboutPatreonUrlTooltipMessage": "Нажмите, чтобы открыть страницу Ryujinx на Patreon", "AboutGithubUrlTooltipMessage": "Нажмите, чтобы открыть страницу Ryujinx на GitHub", "AboutDiscordUrlTooltipMessage": "Нажмите, чтобы открыть приглашение на сервер Ryujinx в Discord", - "AboutTwitterUrlTooltipMessage": "Нажмите, чтобы открыть страницу Ryujinx в X (бывший Twitter)", "AboutRyujinxAboutTitle": "О программе:", - "AboutRyujinxAboutContent": "Ryujinx — это эмулятор Nintendo Switch™.\nПожалуйста, поддержите нас на Patreon.\nЧитайте последние новости в наших X (Twitter) или Discord.\nРазработчики, заинтересованные в участии, могут ознакомиться с проектом на GitHub или в Discord.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Разработка:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Нажмите, чтобы открыть страницу с участниками", - "AboutRyujinxSupprtersTitle": "Поддержка на Patreon:", "AmiiboSeriesLabel": "Серия Amiibo", "AmiiboCharacterLabel": "Персонаж", "AmiiboScanButtonLabel": "Сканировать", diff --git a/src/Ryujinx/Assets/Locales/th_TH.json b/src/Ryujinx/Assets/Locales/th_TH.json index 33b2c4f30..6364084c7 100644 --- a/src/Ryujinx/Assets/Locales/th_TH.json +++ b/src/Ryujinx/Assets/Locales/th_TH.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "คลิกเพื่อเปิดเว็บไซต์ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", "AboutDisclaimerMessage": "ทางผู้พัฒนาโปรแกรม Ryujinx ไม่มีส่วนเกี่ยวข้องกับทางบริษัท Nintendo™\nหรือพันธมิตรใดๆ ทั้งสิ้น!", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) ถูกใช้\nในการจำลอง อะมิโบ ของเรา", - "AboutPatreonUrlTooltipMessage": "คลิกเพื่อเปิดหน้า Patreon ของ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", "AboutGithubUrlTooltipMessage": "คลิกเพื่อเปิดหน้า Github ของ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", "AboutDiscordUrlTooltipMessage": "คลิกเพื่อเปิดคำเชิญเข้าสู่เซิร์ฟเวอร์ Discord ของ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", - "AboutTwitterUrlTooltipMessage": "คลิกเพื่อเปิดหน้าเพจ Twitter ของ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", "AboutRyujinxAboutTitle": "เกี่ยวกับ:", - "AboutRyujinxAboutContent": "Ryujinx เป็นอีมูเลเตอร์สำหรับ Nintendo Switch™\nโปรดสนับสนุนเราบน Patreon\nรับข่าวสารล่าสุดทั้งหมดบน Twitter หรือ Discord ของเรา\nนักพัฒนาที่สนใจจะมีส่วนร่วมสามารถดูข้อมูลเพิ่มเติมได้ที่ GitHub หรือ Discord ของเรา", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "ได้รับการดูแลโดย:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "คลิกเพื่อเปิดหน้าผู้มีส่วนร่วมบนเบราว์เซอร์เริ่มต้นของคุณ", - "AboutRyujinxSupprtersTitle": "ผู้สนับสนุนบน Patreon:", "AmiiboSeriesLabel": "Amiibo Series", "AmiiboCharacterLabel": "ตัวละคร", "AmiiboScanButtonLabel": "สแกนเลย", diff --git a/src/Ryujinx/Assets/Locales/tr_TR.json b/src/Ryujinx/Assets/Locales/tr_TR.json index 72da205cb..1be779d67 100644 --- a/src/Ryujinx/Assets/Locales/tr_TR.json +++ b/src/Ryujinx/Assets/Locales/tr_TR.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "Ryujinx'in websitesini varsayılan tarayıcınızda açmak için tıklayın.", "AboutDisclaimerMessage": "Ryujinx, Nintendo™ veya ortaklarıyla herhangi bir şekilde bağlantılı değildir.", "AboutAmiiboDisclaimerMessage": "Amiibo emülasyonumuzda \nAmiiboAPI (www.amiiboapi.com) kullanılmaktadır.", - "AboutPatreonUrlTooltipMessage": "Ryujinx'in Patreon sayfasını varsayılan tarayıcınızda açmak için tıklayın.", "AboutGithubUrlTooltipMessage": "Ryujinx'in GitHub sayfasını varsayılan tarayıcınızda açmak için tıklayın.", "AboutDiscordUrlTooltipMessage": "Varsayılan tarayıcınızda Ryujinx'in Discord'una bir davet açmak için tıklayın.", - "AboutTwitterUrlTooltipMessage": "Ryujinx'in Twitter sayfasını varsayılan tarayıcınızda açmak için tıklayın.", "AboutRyujinxAboutTitle": "Hakkında:", - "AboutRyujinxAboutContent": "Ryujinx bir Nintendo Switch™ emülatörüdür.\nLütfen bizi Patreon'da destekleyin.\nEn son haberleri Twitter veya Discord'umuzdan alın.\nKatkıda bulunmak isteyen geliştiriciler GitHub veya Discord üzerinden daha fazla bilgi edinebilir.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Geliştiriciler:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Katkıda bulunanlar sayfasını varsayılan tarayıcınızda açmak için tıklayın.", - "AboutRyujinxSupprtersTitle": "Patreon Destekleyicileri:", "AmiiboSeriesLabel": "Amiibo Serisi", "AmiiboCharacterLabel": "Karakter", "AmiiboScanButtonLabel": "Tarat", diff --git a/src/Ryujinx/Assets/Locales/uk_UA.json b/src/Ryujinx/Assets/Locales/uk_UA.json index 06f658640..a5d519398 100644 --- a/src/Ryujinx/Assets/Locales/uk_UA.json +++ b/src/Ryujinx/Assets/Locales/uk_UA.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "Натисніть, щоб відкрити сайт Ryujinx у браузері за замовчування.", "AboutDisclaimerMessage": "Ryujinx жодним чином не пов’язано з Nintendo™,\nчи будь-яким із їхніх партнерів.", "AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) використовується в нашій емуляції Amiibo.", - "AboutPatreonUrlTooltipMessage": "Натисніть, щоб відкрити сторінку Patreon Ryujinx у вашому браузері за замовчування.", "AboutGithubUrlTooltipMessage": "Натисніть, щоб відкрити сторінку GitHub Ryujinx у браузері за замовчуванням.", "AboutDiscordUrlTooltipMessage": "Натисніть, щоб відкрити запрошення на сервер Discord Ryujinx у браузері за замовчуванням.", - "AboutTwitterUrlTooltipMessage": "Натисніть, щоб відкрити сторінку Twitter Ryujinx у браузері за замовчуванням.", "AboutRyujinxAboutTitle": "Про програму:", - "AboutRyujinxAboutContent": "Ryujinx — це емулятор для Nintendo Switch™.\nБудь ласка, підтримайте нас на Patreon.\nОтримуйте всі останні новини в нашому Twitter або Discord.\nРозробники, які хочуть зробити внесок, можуть дізнатися більше на нашому GitHub або в Discord.", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "Підтримується:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "Натисніть, щоб відкрити сторінку співавторів у вашому браузері за замовчування.", - "AboutRyujinxSupprtersTitle": "Підтримується на Patreon:", "AmiiboSeriesLabel": "Серія Amiibo", "AmiiboCharacterLabel": "Персонаж", "AmiiboScanButtonLabel": "Сканувати", diff --git a/src/Ryujinx/Assets/Locales/zh_CN.json b/src/Ryujinx/Assets/Locales/zh_CN.json index 66ac309de..8b8e5d37c 100644 --- a/src/Ryujinx/Assets/Locales/zh_CN.json +++ b/src/Ryujinx/Assets/Locales/zh_CN.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "在浏览器中打开 Ryujinx 模拟器官网。", "AboutDisclaimerMessage": "Ryujinx 与 Nintendo™ 以及其合作伙伴没有任何关联。", "AboutAmiiboDisclaimerMessage": "我们的 Amiibo 模拟使用了\nAmiiboAPI (www.amiiboapi.com)。", - "AboutPatreonUrlTooltipMessage": "在浏览器中打开 Ryujinx 的 Patreon 赞助页。", "AboutGithubUrlTooltipMessage": "在浏览器中打开 Ryujinx 的 GitHub 代码库。", "AboutDiscordUrlTooltipMessage": "在浏览器中打开 Ryujinx 的 Discord 邀请链接。", - "AboutTwitterUrlTooltipMessage": "在浏览器中打开 Ryujinx 的 Twitter 主页。", "AboutRyujinxAboutTitle": "关于:", - "AboutRyujinxAboutContent": "Ryujinx 是一款 Nintendo Switch™ 模拟器。\n您可以在 Patreon 上赞助 Ryujinx。\n关注 Twitter 或 Discord 可以获取模拟器最新动态。\n如果您对开发感兴趣,欢迎来 GitHub 或 Discord 加入我们!", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "开发维护人员名单:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "在浏览器中打开贡献者页面", - "AboutRyujinxSupprtersTitle": "感谢 Patreon 上的赞助者:", "AmiiboSeriesLabel": "Amiibo 系列", "AmiiboCharacterLabel": "角色", "AmiiboScanButtonLabel": "扫描", diff --git a/src/Ryujinx/Assets/Locales/zh_TW.json b/src/Ryujinx/Assets/Locales/zh_TW.json index 64f137885..46761ff02 100644 --- a/src/Ryujinx/Assets/Locales/zh_TW.json +++ b/src/Ryujinx/Assets/Locales/zh_TW.json @@ -552,15 +552,13 @@ "AboutUrlTooltipMessage": "在預設瀏覽器中開啟 Ryujinx 網站。", "AboutDisclaimerMessage": "Ryujinx 和 Nintendo™\n或其任何合作夥伴完全沒有關聯。", "AboutAmiiboDisclaimerMessage": "我們在 Amiibo 模擬中\n使用了 AmiiboAPI (www.amiiboapi.com)。", - "AboutPatreonUrlTooltipMessage": "在預設瀏覽器中開啟 Ryujinx 的 Patreon 網頁。", "AboutGithubUrlTooltipMessage": "在預設瀏覽器中開啟 Ryujinx 的 GitHub 網頁。", "AboutDiscordUrlTooltipMessage": "在預設瀏覽器中開啟 Ryujinx 的 Discord 邀請連結。", - "AboutTwitterUrlTooltipMessage": "在預設瀏覽器中開啟 Ryujinx 的 Twitter 網頁。", "AboutRyujinxAboutTitle": "關於:", - "AboutRyujinxAboutContent": "Ryujinx 是一款 Nintendo Switch™ 模擬器。\n請在 Patreon 上支持我們。\n關注我們的 Twitter 或 Discord 取得所有最新消息。\n對於有興趣貢獻的開發者,可以在我們的 GitHub 或 Discord 上了解更多資訊。", + "AboutRyujinxAboutContent": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "AboutRyujinxMaintainersTitle": "維護者:", + "AboutRyujinxFormerMaintainersTitle": "Formerly Maintained By:", "AboutRyujinxMaintainersContentTooltipMessage": "在預設瀏覽器中開啟貢獻者的網頁", - "AboutRyujinxSupprtersTitle": "Patreon 支持者:", "AmiiboSeriesLabel": "Amiibo 系列", "AmiiboCharacterLabel": "角色", "AmiiboScanButtonLabel": "掃描", -- 2.47.1 From 39252b7267a38288f18449356ba20d793883fe04 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 8 Dec 2024 13:04:01 -0600 Subject: [PATCH 113/722] UI: Update About window with the current status of the project. --- src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs | 4 +++- src/Ryujinx/UI/Windows/AboutWindow.axaml | 11 ++++++++++- src/Ryujinx/UI/Windows/AboutWindow.axaml.cs | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index c48ad378f..23d0f963c 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -45,7 +45,9 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public string Developers => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.AboutPageDeveloperListMore, "gdkchan, Ac_K, marysaka, rip in peri peri, LDj3SNuD, emmaus, Thealexbarney, GoffyDude, TSRBerry, IsaacMarovitz, GreemDev"); + public string Developers => "GreemDev"; + + public string FormerDevelopers => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.AboutPageDeveloperListMore, "gdkchan, Ac_K, marysaka, rip in peri peri, LDj3SNuD, emmaus, Thealexbarney, GoffyDude, TSRBerry, IsaacMarovitz"); public AboutWindowViewModel() { diff --git a/src/Ryujinx/UI/Windows/AboutWindow.axaml b/src/Ryujinx/UI/Windows/AboutWindow.axaml index 1d0e36ae9..bce0fde57 100644 --- a/src/Ryujinx/UI/Windows/AboutWindow.axaml +++ b/src/Ryujinx/UI/Windows/AboutWindow.axaml @@ -165,7 +165,16 @@ Text="{ext:Locale AboutRyujinxMaintainersTitle}" /> + + + + + ViewModel.MatchSystemTime(); } } -- 2.47.1 From 0f18df982f44d8edec9b9f55400c6ca95b691fae Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 21 Dec 2024 19:59:16 -0600 Subject: [PATCH 144/722] UI: localize the button & make it smaller --- src/Ryujinx/Assets/locales.json | 48 +++++++++++++++++++ .../UI/ViewModels/SettingsViewModel.cs | 3 -- .../Views/Settings/SettingsSystemView.axaml | 8 ++-- 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 9fa113593..1b4624c95 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -3765,6 +3765,30 @@ "zh_TW": "系統時鐘:" } }, + { + "ID": "SettingsTabSystemSystemTimeMatch", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Match PC Time", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "SettingsTabSystemEnablePptc", "Translations": { @@ -14541,6 +14565,30 @@ "zh_TW": "變更系統時鐘" } }, + { + "ID": "MatchTimeTooltip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Change System Time to match your PC's time.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "VSyncToggleTooltip", "Translations": { diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 8edf71a39..0824e3f86 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -329,9 +329,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - //private DateTimeOffset _currentDate; - //private TimeSpan _currentTime; - public DateTimeOffset CurrentDate { get; set; } public TimeSpan CurrentTime { get; set; } diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml index abb1a2e49..73cc70a23 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml @@ -183,15 +183,15 @@ ToolTip.Tip="{ext:Locale TimeTooltip}" /> -- 2.47.1 From 2fac0f4db11b934320dfc26edb984ca5972ca3dc Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 21 Dec 2024 20:00:16 -0600 Subject: [PATCH 145/722] Specify it's date & time --- src/Ryujinx/Assets/locales.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 1b4624c95..4c426f062 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -14571,7 +14571,7 @@ "ar_SA": "", "de_DE": "", "el_GR": "", - "en_US": "Change System Time to match your PC's time.", + "en_US": "Change System Time to match your PC's date & time.", "es_ES": "", "fr_FR": "", "he_IL": "", -- 2.47.1 From f898a5ecf4370c1d286e6187c8f00981f44244de Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 21 Dec 2024 20:06:59 -0600 Subject: [PATCH 146/722] Remove code references to having a flatpak version --- src/Ryujinx.Common/ReleaseInformation.cs | 3 --- .../Helper/FileAssociationHelper.cs | 2 +- src/Ryujinx/Assets/locales.json | 24 ------------------- .../UI/Controls/ApplicationContextMenu.axaml | 1 - .../UI/ViewModels/MainWindowViewModel.cs | 2 -- src/Ryujinx/Updater.cs | 19 ++++----------- 6 files changed, 5 insertions(+), 46 deletions(-) diff --git a/src/Ryujinx.Common/ReleaseInformation.cs b/src/Ryujinx.Common/ReleaseInformation.cs index 011d9848a..cbf93013f 100644 --- a/src/Ryujinx.Common/ReleaseInformation.cs +++ b/src/Ryujinx.Common/ReleaseInformation.cs @@ -6,7 +6,6 @@ namespace Ryujinx.Common // DO NOT EDIT, filled by CI public static class ReleaseInformation { - private const string FlatHubChannel = "flathub"; private const string CanaryChannel = "canary"; private const string ReleaseChannel = "release"; @@ -29,8 +28,6 @@ namespace Ryujinx.Common !ReleaseChannelRepo.StartsWith("%%") && !ConfigFileName.StartsWith("%%"); - public static bool IsFlatHubBuild => IsValid && ReleaseChannelOwner.Equals(FlatHubChannel); - public static bool IsCanaryBuild => IsValid && ReleaseChannelName.Equals(CanaryChannel); public static bool IsReleaseBuild => IsValid && ReleaseChannelName.Equals(ReleaseChannel); diff --git a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs b/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs index 9333a1b76..44860d080 100644 --- a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs +++ b/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs @@ -23,7 +23,7 @@ namespace Ryujinx.UI.Common.Helper [LibraryImport("shell32.dll", SetLastError = true)] public static partial void SHChangeNotify(uint wEventId, uint uFlags, nint dwItem1, nint dwItem2); - public static bool IsTypeAssociationSupported => (OperatingSystem.IsLinux() || OperatingSystem.IsWindows()) && !ReleaseInformation.IsFlatHubBuild; + public static bool IsTypeAssociationSupported => (OperatingSystem.IsLinux() || OperatingSystem.IsWindows()); public static bool AreMimeTypesRegistered { diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 4c426f062..007f1d1e6 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -16173,30 +16173,6 @@ "zh_TW": "CPU 模式" } }, - { - "ID": "DialogUpdaterFlatpakNotSupportedMessage", - "Translations": { - "ar_SA": "الرجاء تحديث ريوجينكس عبر فلات هاب.", - "de_DE": "Bitte aktualisiere Ryujinx über FlatHub", - "el_GR": "Παρακαλούμε ενημερώστε το Ryujinx μέσω FlatHub.", - "en_US": "Please update Ryujinx via FlatHub.", - "es_ES": "Por favor, actualiza Ryujinx a través de FlatHub.", - "fr_FR": "Merci de mettre à jour Ryujinx via FlatHub.", - "he_IL": "בבקשה עדכן את ריוג'ינקס דרך פלאטהב.", - "it_IT": "Aggiorna Ryujinx tramite FlatHub.", - "ja_JP": "FlatHub を使用して Ryujinx をアップデートしてください.", - "ko_KR": "FlatHub를 통해 Ryujinx를 업데이트하세요.", - "no_NO": "Vennligst oppdater Ryujinx via FlatHub.", - "pl_PL": "Zaktualizuj Ryujinx przez FlatHub.", - "pt_BR": "Por favor, atualize o Ryujinx pelo FlatHub.", - "ru_RU": "Пожалуйста, обновите Ryujinx через FlatHub.", - "th_TH": "โปรดอัปเดต Ryujinx ผ่านช่องทาง FlatHub", - "tr_TR": "Lütfen Ryujinx'i FlatHub aracılığıyla güncelleyin.", - "uk_UA": "", - "zh_CN": "请通过 FlatHub 更新 Ryujinx 模拟器。", - "zh_TW": "請透過 Flathub 更新 Ryujinx。" - } - }, { "ID": "UpdaterDisabledWarningTitle", "Translations": { diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml index 951f7f616..7708936ca 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml @@ -17,7 +17,6 @@ diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index cebd65701..ae373c267 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -424,8 +424,6 @@ namespace Ryujinx.Ava.UI.ViewModels public bool OpenBcatSaveDirectoryEnabled => !SelectedApplication.ControlHolder.ByteSpan.IsZeros() && SelectedApplication.ControlHolder.Value.BcatDeliveryCacheStorageSize > 0; - public bool CreateShortcutEnabled => !ReleaseInformation.IsFlatHubBuild; - public string LoadHeading { get => _loadHeading; diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index e240ad141..21d991d97 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -686,22 +686,11 @@ namespace Ryujinx.Ava #else if (showWarnings) { - if (ReleaseInformation.IsFlatHubBuild) - { - Dispatcher.UIThread.InvokeAsync(() => - ContentDialogHelper.CreateWarningDialog( - LocaleManager.Instance[LocaleKeys.UpdaterDisabledWarningTitle], - LocaleManager.Instance[LocaleKeys.DialogUpdaterFlatpakNotSupportedMessage]) + Dispatcher.UIThread.InvokeAsync(() => + ContentDialogHelper.CreateWarningDialog( + LocaleManager.Instance[LocaleKeys.UpdaterDisabledWarningTitle], + LocaleManager.Instance[LocaleKeys.DialogUpdaterDirtyBuildSubMessage]) ); - } - else - { - Dispatcher.UIThread.InvokeAsync(() => - ContentDialogHelper.CreateWarningDialog( - LocaleManager.Instance[LocaleKeys.UpdaterDisabledWarningTitle], - LocaleManager.Instance[LocaleKeys.DialogUpdaterDirtyBuildSubMessage]) - ); - } } return false; -- 2.47.1 From 4c7cb54ec63f907523a9c56b4cbcf899a6b893ef Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 21 Dec 2024 21:52:04 -0600 Subject: [PATCH 147/722] misc: I may be stupid --- src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs index ce2b7185a..1763edce2 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs @@ -15,7 +15,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Common private readonly long[] _current2; private readonly long[] _peak; - private readonly Lock _lock = new(); + // type is not Lock due to Monitor class usage + private readonly object _lock = new(); private readonly LinkedList _waitingThreads; -- 2.47.1 From 67ec10feea0db14a9647db4deebb11523c6f05da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hack=E8=8C=B6=E3=82=93?= <120134269+Hackjjang@users.noreply.github.com> Date: Sun, 22 Dec 2024 13:46:57 +0900 Subject: [PATCH 148/722] Korean translation update (#422) --- src/Ryujinx/Assets/locales.json | 54 ++++++++++++++++----------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 007f1d1e6..5df389381 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -705,7 +705,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "Amiibo 스캔(빈에서)", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -1137,7 +1137,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "자주 묻는 질문(FAQ) 및 문제해결 페이지", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -1161,7 +1161,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "공식 Ryujinx 위키에서 자주 묻는 질문(FAQ) 및 문제 해결 페이지 열기", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -1185,7 +1185,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "설치 및 구성 안내", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -1209,7 +1209,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "공식 Ryujinx 위키에서 설정 및 구성 안내 열기", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -1233,7 +1233,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "멀티플레이어(LDN/LAN) 안내", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -1257,7 +1257,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "공식 Ryujinx 위키에서 멀티플레이어 안내 열기", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -8073,7 +8073,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "지우기", + "ko_KR": "", "no_NO": "Tøm", "pl_PL": "", "pt_BR": "", @@ -11865,7 +11865,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "{0} : {1}", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -18777,7 +18777,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "{0:n0}MB", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -19065,7 +19065,7 @@ "he_IL": "{0} הרחבות משחק", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "{0} DLC 사용 가능", "no_NO": "{0} Nedlastbare innhold(er)", "pl_PL": "", "pt_BR": "", @@ -21201,7 +21201,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "수직 동기화 :", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21225,7 +21225,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자 정의 주사율 활성화(실험적)", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21249,7 +21249,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "스위치", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21273,7 +21273,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "무제한", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21297,7 +21297,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자 정의 주사율", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21321,7 +21321,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "에뮬레이트된 수직 동기화. '스위치'는 스위치의 60Hz 주사율을 에뮬레이트합니다. '무한'은 무제한 주사율입니다.", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21345,7 +21345,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "에뮬레이트된 수직 동기화. '스위치'는 스위치의 60Hz 주사율을 에뮬레이트합니다. '무한'은 무제한 주사율입니다. '사용자 지정'은 지정된 사용자 지정 주사율을 에뮬레이트합니다.", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21369,7 +21369,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자가 에뮬레이트된 화면 주사율을 지정할 수 있습니다. 일부 타이틀에서는 게임플레이 로직 속도가 빨라지거나 느려질 수 있습니다. 다른 타이틀에서는 주사율의 배수로 FPS를 제한하거나 예측할 수 없는 동작으로 이어질 수 있습니다. 이는 실험적 기능으로 게임 플레이에 어떤 영향을 미칠지 보장할 수 없습니다. \n\n모르면 끔으로 두세요.", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21393,7 +21393,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자 정의 주사율 목표 값입니다.", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21417,7 +21417,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "일반 스위치 주사율의 백분율로 나타낸 사용자 지정 주사율입니다.", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21441,7 +21441,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자 정의 주사율 % :", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21465,7 +21465,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자 정의 주사율 값 :", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21489,7 +21489,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "간격", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21513,7 +21513,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "수직 동기화 모드 전환 :", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21537,7 +21537,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자 정의 주사율 증가", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -21561,7 +21561,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "사용자 정의 주사율 감소", "no_NO": "", "pl_PL": "", "pt_BR": "", -- 2.47.1 From decd37ce6d670d6a1136409292d253dabd69475d Mon Sep 17 00:00:00 2001 From: Marco Carvalho Date: Sun, 22 Dec 2024 02:28:31 -0300 Subject: [PATCH 149/722] Add missing "yield return" (#424) --- src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs | 34 +++++++-------- src/Ryujinx.Cpu/Jit/MemoryManager.cs | 34 +++++++-------- .../Jit/MemoryManagerHostTracked.cs | 14 +++---- .../LightningJit/CodeGen/Arm64/StackWalker.cs | 6 +-- .../BufferMirrorRangeList.cs | 10 ++--- src/Ryujinx.HLE/HOS/ModLoader.cs | 9 ++-- src/Ryujinx.Memory/AddressSpaceManager.cs | 42 +++++++------------ 7 files changed, 54 insertions(+), 95 deletions(-) diff --git a/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs b/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs index bb56a4344..74c39d6a8 100644 --- a/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs +++ b/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs @@ -230,25 +230,20 @@ namespace Ryujinx.Cpu.AppleHv { if (size == 0) { - return Enumerable.Empty(); + yield break; } var guestRegions = GetPhysicalRegionsImpl(va, size); if (guestRegions == null) { - return null; + yield break; } - var regions = new HostMemoryRange[guestRegions.Count]; - - for (int i = 0; i < regions.Length; i++) + foreach (var guestRegion in guestRegions) { - var guestRegion = guestRegions[i]; nint pointer = _backingMemory.GetPointer(guestRegion.Address, guestRegion.Size); - regions[i] = new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size); + yield return new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size); } - - return regions; } /// @@ -256,23 +251,24 @@ namespace Ryujinx.Cpu.AppleHv { if (size == 0) { - return Enumerable.Empty(); + yield break; } - return GetPhysicalRegionsImpl(va, size); + foreach (var physicalRegion in GetPhysicalRegionsImpl(va, size)) + { + yield return physicalRegion; + } } - private List GetPhysicalRegionsImpl(ulong va, ulong size) + private IEnumerable GetPhysicalRegionsImpl(ulong va, ulong size) { if (!ValidateAddress(va) || !ValidateAddressAndSize(va, size)) { - return null; + yield break; } int pages = GetPagesCount(va, (uint)size, out va); - var regions = new List(); - ulong regionStart = GetPhysicalAddressInternal(va); ulong regionSize = PageSize; @@ -280,14 +276,14 @@ namespace Ryujinx.Cpu.AppleHv { if (!ValidateAddress(va + PageSize)) { - return null; + yield break; } ulong newPa = GetPhysicalAddressInternal(va + PageSize); if (GetPhysicalAddressInternal(va) + PageSize != newPa) { - regions.Add(new MemoryRange(regionStart, regionSize)); + yield return new MemoryRange(regionStart, regionSize); regionStart = newPa; regionSize = 0; } @@ -296,9 +292,7 @@ namespace Ryujinx.Cpu.AppleHv regionSize += PageSize; } - regions.Add(new MemoryRange(regionStart, regionSize)); - - return regions; + yield return new MemoryRange(regionStart, regionSize); } /// diff --git a/src/Ryujinx.Cpu/Jit/MemoryManager.cs b/src/Ryujinx.Cpu/Jit/MemoryManager.cs index 049e508d0..076fb6ad8 100644 --- a/src/Ryujinx.Cpu/Jit/MemoryManager.cs +++ b/src/Ryujinx.Cpu/Jit/MemoryManager.cs @@ -250,25 +250,20 @@ namespace Ryujinx.Cpu.Jit { if (size == 0) { - return Enumerable.Empty(); + yield break; } var guestRegions = GetPhysicalRegionsImpl(va, size); if (guestRegions == null) { - return null; + yield break; } - var regions = new HostMemoryRange[guestRegions.Count]; - - for (int i = 0; i < regions.Length; i++) + foreach (var guestRegion in guestRegions) { - var guestRegion = guestRegions[i]; nint pointer = _backingMemory.GetPointer(guestRegion.Address, guestRegion.Size); - regions[i] = new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size); + yield return new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size); } - - return regions; } /// @@ -276,23 +271,24 @@ namespace Ryujinx.Cpu.Jit { if (size == 0) { - return Enumerable.Empty(); + yield break; } - return GetPhysicalRegionsImpl(va, size); + foreach (var physicalRegion in GetPhysicalRegionsImpl(va, size)) + { + yield return physicalRegion; + } } - private List GetPhysicalRegionsImpl(ulong va, ulong size) + private IEnumerable GetPhysicalRegionsImpl(ulong va, ulong size) { if (!ValidateAddress(va) || !ValidateAddressAndSize(va, size)) { - return null; + yield break; } int pages = GetPagesCount(va, (uint)size, out va); - var regions = new List(); - ulong regionStart = GetPhysicalAddressInternal(va); ulong regionSize = PageSize; @@ -300,14 +296,14 @@ namespace Ryujinx.Cpu.Jit { if (!ValidateAddress(va + PageSize)) { - return null; + yield break; } ulong newPa = GetPhysicalAddressInternal(va + PageSize); if (GetPhysicalAddressInternal(va) + PageSize != newPa) { - regions.Add(new MemoryRange(regionStart, regionSize)); + yield return new MemoryRange(regionStart, regionSize); regionStart = newPa; regionSize = 0; } @@ -316,9 +312,7 @@ namespace Ryujinx.Cpu.Jit regionSize += PageSize; } - regions.Add(new MemoryRange(regionStart, regionSize)); - - return regions; + yield return new MemoryRange(regionStart, regionSize); } /// diff --git a/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs b/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs index 4dab212a7..499f991f2 100644 --- a/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs +++ b/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs @@ -475,17 +475,15 @@ namespace Ryujinx.Cpu.Jit return GetPhysicalRegionsImpl(va, size); } - private List GetPhysicalRegionsImpl(ulong va, ulong size) + private IEnumerable GetPhysicalRegionsImpl(ulong va, ulong size) { if (!ValidateAddress(va) || !ValidateAddressAndSize(va, size)) { - return null; + yield break; } int pages = GetPagesCount(va, (uint)size, out va); - var regions = new List(); - ulong regionStart = GetPhysicalAddressInternal(va); ulong regionSize = PageSize; @@ -493,14 +491,14 @@ namespace Ryujinx.Cpu.Jit { if (!ValidateAddress(va + PageSize)) { - return null; + yield break; } ulong newPa = GetPhysicalAddressInternal(va + PageSize); if (GetPhysicalAddressInternal(va) + PageSize != newPa) { - regions.Add(new MemoryRange(regionStart, regionSize)); + yield return new MemoryRange(regionStart, regionSize); regionStart = newPa; regionSize = 0; } @@ -509,9 +507,7 @@ namespace Ryujinx.Cpu.Jit regionSize += PageSize; } - regions.Add(new MemoryRange(regionStart, regionSize)); - - return regions; + yield return new MemoryRange(regionStart, regionSize); } /// diff --git a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/StackWalker.cs b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/StackWalker.cs index 3ce7c4f9c..1432c4598 100644 --- a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/StackWalker.cs +++ b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/StackWalker.cs @@ -8,8 +8,6 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 { public IEnumerable GetCallStack(nint framePointer, nint codeRegionStart, int codeRegionSize, nint codeRegion2Start, int codeRegion2Size) { - List functionPointers = new(); - while (true) { nint functionPointer = Marshal.ReadIntPtr(framePointer, nint.Size); @@ -20,11 +18,9 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 break; } - functionPointers.Add((ulong)functionPointer - 4); + yield return (ulong)functionPointer - 4; framePointer = Marshal.ReadIntPtr(framePointer); } - - return functionPointers; } } } diff --git a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs index 5722ca1ac..e79248a47 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs @@ -168,16 +168,14 @@ namespace Ryujinx.Graphics.Vulkan return BinarySearch(list, offset, size) >= 0; } - public readonly List FindOverlaps(int offset, int size) + public readonly IEnumerable FindOverlaps(int offset, int size) { var list = _ranges; if (list == null) { - return null; + yield break; } - List result = null; - int index = BinarySearch(list, offset, size); if (index >= 0) @@ -189,12 +187,10 @@ namespace Ryujinx.Graphics.Vulkan do { - (result ??= new List()).Add(list[index++]); + yield return list[index++]; } while (index < list.Count && list[index].OverlapsWith(offset, size)); } - - return result; } private static int BinarySearch(List list, int offset, int size) diff --git a/src/Ryujinx.HLE/HOS/ModLoader.cs b/src/Ryujinx.HLE/HOS/ModLoader.cs index d8c62fc66..4bd695ae5 100644 --- a/src/Ryujinx.HLE/HOS/ModLoader.cs +++ b/src/Ryujinx.HLE/HOS/ModLoader.cs @@ -357,7 +357,6 @@ namespace Ryujinx.HLE.HOS { string cheatName = DefaultCheatName; List instructions = new(); - List cheats = new(); using StreamReader cheatData = cheatFile.OpenText(); while (cheatData.ReadLine() is { } line) @@ -373,13 +372,13 @@ namespace Ryujinx.HLE.HOS Logger.Warning?.Print(LogClass.ModLoader, $"Ignoring cheat '{cheatFile.FullName}' because it is malformed"); - return Array.Empty(); + yield break; } // Add the previous section to the list. if (instructions.Count > 0) { - cheats.Add(new Cheat($"<{cheatName} Cheat>", cheatFile, instructions)); + yield return new Cheat($"<{cheatName} Cheat>", cheatFile, instructions); } // Start a new cheat section. @@ -396,10 +395,8 @@ namespace Ryujinx.HLE.HOS // Add the last section being processed. if (instructions.Count > 0) { - cheats.Add(new Cheat($"<{cheatName} Cheat>", cheatFile, instructions)); + yield return new Cheat($"<{cheatName} Cheat>", cheatFile, instructions); } - - return cheats; } // Assumes searchDirPaths don't overlap diff --git a/src/Ryujinx.Memory/AddressSpaceManager.cs b/src/Ryujinx.Memory/AddressSpaceManager.cs index 807c5c0f4..7bd572d7a 100644 --- a/src/Ryujinx.Memory/AddressSpaceManager.cs +++ b/src/Ryujinx.Memory/AddressSpaceManager.cs @@ -106,10 +106,13 @@ namespace Ryujinx.Memory { if (size == 0) { - return Enumerable.Empty(); + yield break; } - return GetHostRegionsImpl(va, size); + foreach (var hostRegion in GetHostRegionsImpl(va, size)) + { + yield return hostRegion; + } } /// @@ -117,51 +120,36 @@ namespace Ryujinx.Memory { if (size == 0) { - return Enumerable.Empty(); + yield break; } var hostRegions = GetHostRegionsImpl(va, size); if (hostRegions == null) { - return null; + yield break; } - var regions = new MemoryRange[hostRegions.Count]; - ulong backingStart = (ulong)_backingMemory.Pointer; ulong backingEnd = backingStart + _backingMemory.Size; - int count = 0; - - for (int i = 0; i < regions.Length; i++) + foreach (var hostRegion in hostRegions) { - var hostRegion = hostRegions[i]; - if (hostRegion.Address >= backingStart && hostRegion.Address < backingEnd) { - regions[count++] = new MemoryRange(hostRegion.Address - backingStart, hostRegion.Size); + yield return new MemoryRange(hostRegion.Address - backingStart, hostRegion.Size); } } - - if (count != regions.Length) - { - return new ArraySegment(regions, 0, count); - } - - return regions; } - private List GetHostRegionsImpl(ulong va, ulong size) + private IEnumerable GetHostRegionsImpl(ulong va, ulong size) { if (!ValidateAddress(va) || !ValidateAddressAndSize(va, size)) { - return null; + yield break; } int pages = GetPagesCount(va, size, out va); - var regions = new List(); - nuint regionStart = GetHostAddress(va); ulong regionSize = PageSize; @@ -169,14 +157,14 @@ namespace Ryujinx.Memory { if (!ValidateAddress(va + PageSize)) { - return null; + yield break; } nuint newHostAddress = GetHostAddress(va + PageSize); if (GetHostAddress(va) + PageSize != newHostAddress) { - regions.Add(new HostMemoryRange(regionStart, regionSize)); + yield return new HostMemoryRange(regionStart, regionSize); regionStart = newHostAddress; regionSize = 0; } @@ -185,9 +173,7 @@ namespace Ryujinx.Memory regionSize += PageSize; } - regions.Add(new HostMemoryRange(regionStart, regionSize)); - - return regions; + yield return new HostMemoryRange(regionStart, regionSize); } [MethodImpl(MethodImplOptions.AggressiveInlining)] -- 2.47.1 From 5913ceda4061028327521ed14b1c521ce6e87cf2 Mon Sep 17 00:00:00 2001 From: Marco Carvalho Date: Sun, 22 Dec 2024 14:36:05 -0300 Subject: [PATCH 150/722] Avoid zero-length array allocations (#427) --- src/Ryujinx.HLE/HOS/Horizon.cs | 4 ++-- src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Horizon.cs b/src/Ryujinx.HLE/HOS/Horizon.cs index c585aed54..f9c5ddecf 100644 --- a/src/Ryujinx.HLE/HOS/Horizon.cs +++ b/src/Ryujinx.HLE/HOS/Horizon.cs @@ -341,7 +341,7 @@ namespace Ryujinx.HLE.HOS { if (VirtualAmiibo.ApplicationBytes.Length > 0) { - VirtualAmiibo.ApplicationBytes = new byte[0]; + VirtualAmiibo.ApplicationBytes = Array.Empty(); VirtualAmiibo.InputBin = string.Empty; } if (NfpDevices[nfpDeviceId].State == NfpDeviceState.SearchingForTag) @@ -356,7 +356,7 @@ namespace Ryujinx.HLE.HOS VirtualAmiibo.InputBin = path; if (VirtualAmiibo.ApplicationBytes.Length > 0) { - VirtualAmiibo.ApplicationBytes = new byte[0]; + VirtualAmiibo.ApplicationBytes = Array.Empty(); } byte[] encryptedData = File.ReadAllBytes(path); VirtualAmiiboFile newFile = AmiiboBinReader.ReadBinFile(encryptedData); diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs index ee43fc307..2cb35472f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs @@ -16,7 +16,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp static class VirtualAmiibo { public static uint OpenedApplicationAreaId; - public static byte[] ApplicationBytes = new byte[0]; + public static byte[] ApplicationBytes = Array.Empty(); public static string InputBin = string.Empty; public static string NickName = string.Empty; private static readonly AmiiboJsonSerializerContext _serializerContext = AmiiboJsonSerializerContext.Default; @@ -137,7 +137,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp if (ApplicationBytes.Length > 0) { byte[] bytes = ApplicationBytes; - ApplicationBytes = new byte[0]; + ApplicationBytes = Array.Empty(); return bytes; } VirtualAmiiboFile virtualAmiiboFile = LoadAmiiboFile(amiiboId); -- 2.47.1 From 1ea345faa7a908125ecdb278873451b5920cfed1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 22 Dec 2024 12:53:48 -0600 Subject: [PATCH 151/722] UI: Move Match PC Time to next to the time selector & change label & tooltip to clarify behavior further. --- src/Ryujinx/Assets/locales.json | 4 ++-- src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml | 6 +----- src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 5df389381..167accd34 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -3771,7 +3771,7 @@ "ar_SA": "", "de_DE": "", "el_GR": "", - "en_US": "Match PC Time", + "en_US": "Resync to PC Date & Time", "es_ES": "", "fr_FR": "", "he_IL": "", @@ -14571,7 +14571,7 @@ "ar_SA": "", "de_DE": "", "el_GR": "", - "en_US": "Change System Time to match your PC's date & time.", + "en_US": "Resync System Time to match your PC's current date & time.\n\nThis is not an active setting, it can still fall out of sync; in which case just click this button again.", "es_ES": "", "fr_FR": "", "he_IL": "", diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml index 73cc70a23..9295413ba 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml @@ -181,15 +181,11 @@ SelectedTime="{Binding CurrentTime}" Width="350" ToolTip.Tip="{ext:Locale TimeTooltip}" /> - - diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs index 5cecd7221..5103ce383 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml.cs @@ -1,7 +1,7 @@ +using Avalonia; using Avalonia.Controls; using Avalonia.Interactivity; using Ryujinx.Ava.UI.ViewModels; -using System; using TimeZone = Ryujinx.Ava.UI.Models.TimeZone; namespace Ryujinx.Ava.UI.Views.Settings -- 2.47.1 From 8259f790d75ca5c18ef8e3d56824b8f86dde1eff Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 22 Dec 2024 13:19:10 -0600 Subject: [PATCH 152/722] misc: Cleanup locale validator --- .../LocaleValidationTask.cs | 21 ++++++++----------- src/Ryujinx/Assets/locales.json | 2 +- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs index 183228fdd..6dc3d8aa8 100644 --- a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs +++ b/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs @@ -14,20 +14,20 @@ namespace Ryujinx.BuildValidationTasks { string path = System.Reflection.Assembly.GetExecutingAssembly().Location; - if (path.Split(new string[] { "src" }, StringSplitOptions.None).Length == 1 ) + if (path.Split(["src"], StringSplitOptions.None).Length == 1) { //i assume that we are in a build directory in the solution dir - path = new FileInfo(path).Directory.Parent.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; + path = new FileInfo(path).Directory!.Parent!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; } else { - path = path.Split(new string[] { "src" }, StringSplitOptions.None)[0]; - path = new FileInfo(path).Directory.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; + path = path.Split(["src"], StringSplitOptions.None)[0]; + path = new FileInfo(path).Directory!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; } string data; - using (StreamReader sr = new StreamReader(path)) + using (StreamReader sr = new(path)) { data = sr.ReadToEnd(); } @@ -38,13 +38,10 @@ namespace Ryujinx.BuildValidationTasks { LocalesEntry locale = json.Locales[i]; - foreach (string language in json.Languages) + foreach (string langCode in json.Languages.Where(it => !locale.Translations.ContainsKey(it))) { - if (!locale.Translations.ContainsKey(language)) - { - locale.Translations.Add(language, ""); - Log.LogMessage(MessageImportance.High, $"Added {{{language}}} to Locale {{{locale.ID}}}"); - } + locale.Translations.Add(langCode, string.Empty); + Log.LogMessage(MessageImportance.High, $"Added '{langCode}' to Locale '{locale.ID}'"); } locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); @@ -53,7 +50,7 @@ namespace Ryujinx.BuildValidationTasks string jsonString = JsonConvert.SerializeObject(json, Formatting.Indented); - using (StreamWriter sw = new StreamWriter(path)) + using (StreamWriter sw = new(path)) { sw.Write(jsonString); } diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 167accd34..33dd61d42 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -21574,4 +21574,4 @@ } } ] -} +} \ No newline at end of file -- 2.47.1 From b5483d8fe028e18fe0ac4a69e40eb3780eaf76e1 Mon Sep 17 00:00:00 2001 From: Marco Carvalho Date: Sun, 22 Dec 2024 16:23:35 -0300 Subject: [PATCH 153/722] Prefer generic overload when type is known (#430) --- src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs | 2 +- src/Ryujinx.Graphics.Vulkan/FormatTable.cs | 2 +- src/Ryujinx.Graphics.Vulkan/Queries/Counters.cs | 2 +- src/Ryujinx.HLE/HOS/Services/IpcService.cs | 12 ++++++------ .../IUserLocalCommunicationService.cs | 2 +- src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs | 2 +- src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs | 4 ++-- src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs | 2 +- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs b/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs index 4971a63b6..09f22889c 100644 --- a/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs +++ b/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs @@ -62,7 +62,7 @@ namespace Ryujinx.Graphics.Vulkan _api = api; _physicalDevice = physicalDevice; - int totalFormats = Enum.GetNames(typeof(Format)).Length; + int totalFormats = Enum.GetNames().Length; _bufferTable = new FormatFeatureFlags[totalFormats]; _optimalTable = new FormatFeatureFlags[totalFormats]; diff --git a/src/Ryujinx.Graphics.Vulkan/FormatTable.cs b/src/Ryujinx.Graphics.Vulkan/FormatTable.cs index 98796d9bf..305224cad 100644 --- a/src/Ryujinx.Graphics.Vulkan/FormatTable.cs +++ b/src/Ryujinx.Graphics.Vulkan/FormatTable.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Graphics.Vulkan static FormatTable() { - _table = new VkFormat[Enum.GetNames(typeof(Format)).Length]; + _table = new VkFormat[Enum.GetNames().Length]; _reverseMap = new Dictionary(); #pragma warning disable IDE0055 // Disable formatting diff --git a/src/Ryujinx.Graphics.Vulkan/Queries/Counters.cs b/src/Ryujinx.Graphics.Vulkan/Queries/Counters.cs index 518ede5f3..c07e1c09c 100644 --- a/src/Ryujinx.Graphics.Vulkan/Queries/Counters.cs +++ b/src/Ryujinx.Graphics.Vulkan/Queries/Counters.cs @@ -13,7 +13,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries { _pipeline = pipeline; - int count = Enum.GetNames(typeof(CounterType)).Length; + int count = Enum.GetNames().Length; _counterQueues = new CounterQueue[count]; diff --git a/src/Ryujinx.HLE/HOS/Services/IpcService.cs b/src/Ryujinx.HLE/HOS/Services/IpcService.cs index 808f21c0e..cd3df4edf 100644 --- a/src/Ryujinx.HLE/HOS/Services/IpcService.cs +++ b/src/Ryujinx.HLE/HOS/Services/IpcService.cs @@ -23,18 +23,18 @@ namespace Ryujinx.HLE.HOS.Services public IpcService(ServerBase server = null) { - CmifCommands = typeof(IpcService).Assembly.GetTypes() + CmifCommands = GetType().Assembly.GetTypes() .Where(type => type == GetType()) .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)) - .SelectMany(methodInfo => methodInfo.GetCustomAttributes(typeof(CommandCmifAttribute)) - .Select(command => (((CommandCmifAttribute)command).Id, methodInfo))) + .SelectMany(methodInfo => methodInfo.GetCustomAttributes() + .Select(command => (command.Id, methodInfo))) .ToDictionary(command => command.Id, command => command.methodInfo); - TipcCommands = typeof(IpcService).Assembly.GetTypes() + TipcCommands = GetType().Assembly.GetTypes() .Where(type => type == GetType()) .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)) - .SelectMany(methodInfo => methodInfo.GetCustomAttributes(typeof(CommandTipcAttribute)) - .Select(command => (((CommandTipcAttribute)command).Id, methodInfo))) + .SelectMany(methodInfo => methodInfo.GetCustomAttributes() + .Select(command => (command.Id, methodInfo))) .ToDictionary(command => command.Id, command => command.methodInfo); Server = server; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs index 9f65aed4b..b8b3014f1 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs @@ -444,7 +444,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator private ResultCode ScanInternal(IVirtualMemoryManager memory, ushort channel, ScanFilter scanFilter, ulong bufferPosition, ulong bufferSize, out ulong counter) { - ulong networkInfoSize = (ulong)Marshal.SizeOf(typeof(NetworkInfo)); + ulong networkInfoSize = (ulong)Marshal.SizeOf(); ulong maxGames = bufferSize / networkInfoSize; MemoryHelper.FillWithZeros(memory, bufferPosition, (int)bufferSize); diff --git a/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs b/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs index 7a90c664e..271b8fc84 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sm/IUserInterface.cs @@ -94,7 +94,7 @@ namespace Ryujinx.HLE.HOS.Services.Sm { if (_services.TryGetValue(name, out Type type)) { - ServiceAttribute serviceAttribute = (ServiceAttribute)type.GetCustomAttributes(typeof(ServiceAttribute)).First(service => ((ServiceAttribute)service).Name == name); + ServiceAttribute serviceAttribute = type.GetCustomAttributes().First(service => service.Name == name); IpcService service = GetServiceInstance(type, context, serviceAttribute.Parameter); diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index f11d6e404..493e6659d 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -97,7 +97,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input { if (IsModified) { - + _playerIdChoose = value; return; } @@ -105,7 +105,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input IsModified = false; _playerId = value; - if (!Enum.IsDefined(typeof(PlayerIndex), _playerId)) + if (!Enum.IsDefined(_playerId)) { _playerId = PlayerIndex.Player1; diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs index dd4ed8297..1b017dbeb 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs @@ -52,7 +52,7 @@ namespace Ryujinx.Ava.UI.Views.Main private void AspectRatioStatus_OnClick(object sender, RoutedEventArgs e) { AspectRatio aspectRatio = ConfigurationState.Instance.Graphics.AspectRatio.Value; - ConfigurationState.Instance.Graphics.AspectRatio.Value = (int)aspectRatio + 1 > Enum.GetNames(typeof(AspectRatio)).Length - 1 ? AspectRatio.Fixed4x3 : aspectRatio + 1; + ConfigurationState.Instance.Graphics.AspectRatio.Value = (int)aspectRatio + 1 > Enum.GetNames().Length - 1 ? AspectRatio.Fixed4x3 : aspectRatio + 1; } private void Refresh_OnClick(object sender, RoutedEventArgs e) => Window.LoadApplications(); -- 2.47.1 From cb355f504d8875defa5f9047dd63b7548e225212 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 22 Dec 2024 16:01:09 -0600 Subject: [PATCH 154/722] UI: Rearrange help menu item & merge wiki page link buttons into a "category" button. --- .../SyscallGenerator.cs | 6 +-- src/Ryujinx/Assets/locales.json | 26 +++++++++- .../UI/Views/Main/MainMenuBarView.axaml | 49 ++++++++++--------- 3 files changed, 53 insertions(+), 28 deletions(-) diff --git a/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs b/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs index 7419a839a..06b98e09d 100644 --- a/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs +++ b/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs @@ -34,14 +34,14 @@ namespace Ryujinx.Horizon.Kernel.Generators private const string TypeResult = NamespaceHorizonCommon + "." + TypeResultName; private const string TypeExecutionContext = "IExecutionContext"; - private static readonly string[] _expectedResults = new string[] - { + private static readonly string[] _expectedResults = + [ $"{TypeResultName}.Success", $"{TypeKernelResultName}.TimedOut", $"{TypeKernelResultName}.Cancelled", $"{TypeKernelResultName}.PortRemoteClosed", $"{TypeKernelResultName}.InvalidState", - }; + ]; private readonly struct OutParameter { diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 33dd61d42..ee6bf3792 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1125,6 +1125,30 @@ "zh_TW": "檢查更新" } }, + { + "ID": "MenuBarHelpFaqAndGuides", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "FAQ & Guides", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "MenuBarHelpFaq", "Translations": { @@ -21574,4 +21598,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index be805566e..65f048bee 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -290,6 +290,11 @@ + - - - - - + + + + +
-- 2.47.1 From 23b0b2240069b3a9b683d6270f39e30ba729cf0c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 22 Dec 2024 16:08:12 -0600 Subject: [PATCH 155/722] UI: Ensure last played date & time are always on 2 separate lines, for consistency. --- src/Ryujinx.UI.Common/App/ApplicationData.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.UI.Common/App/ApplicationData.cs b/src/Ryujinx.UI.Common/App/ApplicationData.cs index 151220f39..657b9a022 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationData.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationData.cs @@ -38,7 +38,7 @@ namespace Ryujinx.UI.App.Common public string TimePlayedString => ValueFormatUtils.FormatTimeSpan(TimePlayed); - public string LastPlayedString => ValueFormatUtils.FormatDateTime(LastPlayed) ?? LocalizedNever(); + public string LastPlayedString => ValueFormatUtils.FormatDateTime(LastPlayed)?.Replace(" ", "\n") ?? LocalizedNever(); public string FileSizeString => ValueFormatUtils.FormatFileSize(FileSize); -- 2.47.1 From a270dc721ccd12873c36d8b766cf8f3483c08a78 Mon Sep 17 00:00:00 2001 From: asfasagag Date: Sun, 22 Dec 2024 20:49:40 -0800 Subject: [PATCH 156/722] UI: Option to resize window to 1440p, 2160p (#432) Minor but useful quality of life addition --- src/Ryujinx/Assets/locales.json | 48 +++++++++++++++++++ .../UI/Views/Main/MainMenuBarView.axaml | 2 + 2 files changed, 50 insertions(+) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index ee6bf3792..a6d0ece6a 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1077,6 +1077,54 @@ "zh_TW": "" } }, + { + "ID": "MenuBarViewWindow1440", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "1440p", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "MenuBarViewWindow2160", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "2160p", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "MenuBarHelp", "Translations": { diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 65f048bee..7d8135dcf 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -287,6 +287,8 @@ + + -- 2.47.1 From a560d2efdb759bea4c7300985295200980b008ae Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Mon, 23 Dec 2024 22:43:06 +0100 Subject: [PATCH 157/722] UI: Added missing french locales/Translated french locales (#415) Custom refresh rate locales and fixed a couple others too --- src/Ryujinx/Assets/locales.json | 114 ++++++++++++++++---------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index a6d0ece6a..c4038eeef 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -701,7 +701,7 @@ "el_GR": "", "en_US": "Scan An Amiibo (From Bin)", "es_ES": "", - "fr_FR": "", + "fr_FR": "Scanner un Amiibo (à partir d'un .bin)", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -749,7 +749,7 @@ "el_GR": "Εγκατάσταση Firmware", "en_US": "Install Firmware", "es_ES": "Instalar firmware", - "fr_FR": "Installer un firmware", + "fr_FR": "Installer le firmware", "he_IL": "התקן קושחה", "it_IT": "Installa firmware", "ja_JP": "ファームウェアをインストール", @@ -821,7 +821,7 @@ "el_GR": "", "en_US": "Install Keys", "es_ES": "", - "fr_FR": "", + "fr_FR": "Installer des clés", "he_IL": "", "it_IT": "Installa Chiavi", "ja_JP": "", @@ -845,7 +845,7 @@ "el_GR": "", "en_US": "Install keys from KEYS or ZIP", "es_ES": "Instalar keys de KEYS o ZIP", - "fr_FR": "", + "fr_FR": "Installer des clés à partir de .KEYS or .ZIP", "he_IL": "", "it_IT": "Installa Chiavi da file KEYS o ZIP", "ja_JP": "", @@ -869,7 +869,7 @@ "el_GR": "", "en_US": "Install keys from a directory", "es_ES": "Instalar keys de un directorio", - "fr_FR": "", + "fr_FR": "Installer des clés à partir d'un dossier", "he_IL": "", "it_IT": "Installa Chiavi da una Cartella", "ja_JP": "", @@ -3221,7 +3221,7 @@ "el_GR": "ΗΠΑ", "en_US": "USA", "es_ES": "EEUU", - "fr_FR": "", + "fr_FR": "États-Unis", "he_IL": "ארה\"ב", "it_IT": "Stati Uniti d'America", "ja_JP": "アメリカ", @@ -3845,7 +3845,7 @@ "el_GR": "", "en_US": "Resync to PC Date & Time", "es_ES": "", - "fr_FR": "", + "fr_FR": "Resynchronier la Date à celle du PC", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -4061,7 +4061,7 @@ "el_GR": "Μικροδιορθώσεις", "en_US": "Hacks", "es_ES": "", - "fr_FR": "", + "fr_FR": "Hacks", "he_IL": "האצות", "it_IT": "Espedienti", "ja_JP": "ハック", @@ -4613,7 +4613,7 @@ "el_GR": "", "en_US": "4x (2880p/4320p) (Not recommended)", "es_ES": "4x (2880p/4320p) (no recomendado)", - "fr_FR": "4x (2880p/4320p) (Non recommandé)", + "fr_FR": "x4 (2880p/4320p) (Non recommandé)", "he_IL": "4x (2880p/4320p) (לא מומלץ)", "it_IT": "4x (2880p/4320p) (Non consigliato)", "ja_JP": "4x (2880p/4320p) (非推奨)", @@ -4637,7 +4637,7 @@ "el_GR": "Αναλογία Απεικόνισης:", "en_US": "Aspect Ratio:", "es_ES": "Relación de aspecto:", - "fr_FR": "Format d'affichage :", + "fr_FR": "Format d'affichage :", "he_IL": "יחס גובה-רוחב:", "it_IT": "Rapporto d'aspetto:", "ja_JP": "アスペクト比:", @@ -10301,7 +10301,7 @@ "el_GR": "", "en_US": "View Profile", "es_ES": "Ver perfil", - "fr_FR": "", + "fr_FR": "Voir Profil", "he_IL": "", "it_IT": "Visualizza profilo", "ja_JP": "", @@ -11237,20 +11237,20 @@ "el_GR": "Αποτυχία μετατροπής της ληφθείσας έκδοσης Ryujinx από την έκδοση GitHub.", "en_US": "Failed to convert the Ryujinx version received from GitHub.", "es_ES": "No se pudo convertir la versión de Ryujinx recibida de GitHub Release.", - "fr_FR": "Impossible de convertir la version reçue de Ryujinx depuis Github Release.", + "fr_FR": "Impossible de convertir la version reçue de Ryujinx depuis GitHub Release.", "he_IL": "המרת גרסת ריוג'ינקס שהתקבלה מ-עדכון הגרסאות של גיטהב נכשלה.", - "it_IT": "La conversione della versione di Ryujinx ricevuta da Github Release è fallita.", + "it_IT": "La conversione della versione di Ryujinx ricevuta da GitHub Release è fallita.", "ja_JP": "Github から取得した Ryujinx バージョンの変換に失敗しました.", "ko_KR": "GitHub에서 받은 Ryujinx 버전을 변환하지 못했습니다.", - "no_NO": "Kan ikke konvertere mottatt Ryujinx-versjon fra Github Utgivelse.", + "no_NO": "Kan ikke konvertere mottatt Ryujinx-versjon fra GitHub Utgivelse.", "pl_PL": "Nie udało się przekonwertować otrzymanej wersji Ryujinx z Github Release.", "pt_BR": "Falha ao converter a versão do Ryujinx recebida do AppVeyor.", - "ru_RU": "Не удалось преобразовать полученную версию Ryujinx из Github Release.", - "th_TH": "ไม่สามารถแปลงเวอร์ชั่น Ryujinx ที่ได้รับจาก Github Release", + "ru_RU": "Не удалось преобразовать полученную версию Ryujinx из GitHub Release.", + "th_TH": "ไม่สามารถแปลงเวอร์ชั่น Ryujinx ที่ได้รับจาก GitHub Release", "tr_TR": "Github Release'den alınan Ryujinx sürümü dönüştürülemedi.", - "uk_UA": "Не вдалося конвертувати отриману версію Ryujinx із випуску Github.", - "zh_CN": "无法切换至从 Github 接收到的新版 Ryujinx 模拟器。", - "zh_TW": "無法轉換從 Github Release 接收到的 Ryujinx 版本。" + "uk_UA": "Не вдалося конвертувати отриману версію Ryujinx із випуску GitHub.", + "zh_CN": "无法切换至从 GitHub 接收到的新版 Ryujinx 模拟器。", + "zh_TW": "無法轉換從 GitHub Release 接收到的 Ryujinx 版本。" } }, { @@ -11357,7 +11357,7 @@ "el_GR": "", "en_US": "Show Changelog", "es_ES": "", - "fr_FR": "", + "fr_FR": "Afficher Changelog", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -12317,7 +12317,7 @@ "el_GR": "Σφάλμα UI: Το επιλεγμένο παιχνίδι δεν έχει έγκυρο αναγνωριστικό τίτλου", "en_US": "UI error: The selected game did not have a valid title ID", "es_ES": "Error de interfaz: El juego seleccionado no tiene una ID válida", - "fr_FR": "Erreur d'UI : le jeu sélectionné n'a pas d'ID de titre valide", + "fr_FR": "Erreur d'UI : Le jeu sélectionné n'a pas d'ID de titre valide", "he_IL": "שגיאת ממשק משתמש: למשחק שנבחר לא קיים מזהה משחק", "it_IT": "Errore UI: Il gioco selezionato non ha un ID titolo valido", "ja_JP": "UI エラー: 選択されたゲームは有効なタイトル ID を保持していません", @@ -12509,7 +12509,7 @@ "el_GR": "", "en_US": "An invalid Keys file was found in {0}", "es_ES": "Se halló un archivo Keys inválido en {0}", - "fr_FR": "", + "fr_FR": "Un fichier de clés invalide a été trouvé dans {0}", "he_IL": "", "it_IT": "E' stato trovato un file di chiavi invalido ' {0}", "ja_JP": "", @@ -12533,7 +12533,7 @@ "el_GR": "", "en_US": "Install Keys", "es_ES": "Instalar Keys", - "fr_FR": "", + "fr_FR": "Installer des clés", "he_IL": "", "it_IT": "Installa Chavi", "ja_JP": "", @@ -12557,7 +12557,7 @@ "el_GR": "", "en_US": "New Keys file will be installed.", "es_ES": "Un nuevo archivo Keys será instalado.", - "fr_FR": "", + "fr_FR": "Nouveau fichier de clés sera installé.", "he_IL": "", "it_IT": "Un nuovo file di Chiavi sarà intallato.", "ja_JP": "", @@ -12581,7 +12581,7 @@ "el_GR": "", "en_US": "\n\nThis may replace some of the current installed Keys.", "es_ES": "\n\nEsto puede reemplazar algunas de las Keys actualmente instaladas.", - "fr_FR": "", + "fr_FR": "\n\nCela pourrait remplacer les clés qui sont installés.", "he_IL": "", "it_IT": "\n\nQuesto potrebbe sovrascrivere alcune delle Chiavi già installate.", "ja_JP": "", @@ -12605,7 +12605,7 @@ "el_GR": "", "en_US": "\n\nDo you want to continue?", "es_ES": "\n\nDeseas continuar?", - "fr_FR": "", + "fr_FR": "\n\nVoulez-vous continuez ?", "he_IL": "", "it_IT": "\n\nVuoi continuare?", "ja_JP": "", @@ -12629,7 +12629,7 @@ "el_GR": "", "en_US": "Installing Keys...", "es_ES": "Instalando Keys...", - "fr_FR": "", + "fr_FR": "Installation des clés...", "he_IL": "", "it_IT": "Installando le chiavi...", "ja_JP": "", @@ -12653,7 +12653,7 @@ "el_GR": "", "en_US": "New Keys file successfully installed.", "es_ES": "Nuevo archivo Keys instalado con éxito.", - "fr_FR": "", + "fr_FR": "Nouveau fichier de clés a été installé.", "he_IL": "", "it_IT": "Nuovo file di chiavi installato con successo.", "ja_JP": "", @@ -13613,7 +13613,7 @@ "el_GR": "", "en_US": "Ryujinx is an emulator for the Nintendo Switch™.\nGet all the latest news in our Discord.\nDevelopers interested in contributing can find out more on our GitHub or Discord.", "es_ES": "", - "fr_FR": "", + "fr_FR": "Ryujinx est un émulateur pour la Nintendo Switch™.\nObtenez le dernières nouvelles sur le Discord.\nLes développeurs qui veulent contribuer peuvent en savoir plus sur notre GitHub ou Discord.", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -13661,7 +13661,7 @@ "el_GR": "", "en_US": "Formerly Maintained By:", "es_ES": "", - "fr_FR": "", + "fr_FR": "Anciennement Maintenu par :", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -14501,7 +14501,7 @@ "el_GR": "", "en_US": "Direct keyboard access (HID) support. Provides games access to your keyboard as a text entry device.\n\nOnly works with games that natively support keyboard usage on Switch hardware.\n\nLeave OFF if unsure.", "es_ES": "Soporte de acceso directo al teclado (HID). Proporciona a los juegos acceso a su teclado como dispositivo de entrada de texto.\n\nSolo funciona con juegos que permiten de forma nativa el uso del teclado en el hardware de Switch.\n\nDesactívalo si no sabes qué hacer.", - "fr_FR": "Prise en charge de l'accès direct au clavier (HID). Permet aux jeux d'accéder à votre clavier comme périphérique de saisie de texte.\n\nFonctionne uniquement avec les jeux prenant en charge nativement l'utilisation du clavier sur le matériel Switch.\n\nLaissez OFF si vous n'êtes pas sûr.", + "fr_FR": "Prise en charge de l'accès direct au clavier (HID). Permet aux jeux d'accéder à votre clavier comme périphérique de saisie de texte.\n\nFonctionne uniquement avec les jeux prenant en charge nativement l'utilisation du clavier sur le matériel Switch.\n\nLaissez désactiver si vous n'êtes pas sûr.", "he_IL": "", "it_IT": "Supporto per l'accesso diretto alla tastiera (HID). Fornisce ai giochi l'accesso alla tastiera come dispositivo di inserimento del testo.\n\nFunziona solo con i giochi che supportano nativamente l'utilizzo della tastiera su hardware Switch.\n\nNel dubbio, lascia l'opzione disattivata.", "ja_JP": "直接キーボード アクセス (HID) のサポートです. テキスト入力デバイスとしてキーボードへのゲームアクセスを提供します.\n\nSwitchハードウェアでキーボードの使用をネイティブにサポートしているゲームでのみ動作します.\n\nわからない場合はオフのままにしてください.", @@ -14525,7 +14525,7 @@ "el_GR": "", "en_US": "Direct mouse access (HID) support. Provides games access to your mouse as a pointing device.\n\nOnly works with games that natively support mouse controls on Switch hardware, which are few and far between.\n\nWhen enabled, touch screen functionality may not work.\n\nLeave OFF if unsure.", "es_ES": "Soporte de acceso directo al mouse (HID). Proporciona a los juegos acceso a su mouse como puntero.\n\nSolo funciona con juegos que permiten de forma nativa el uso de controles con mouse en el hardware de switch, lo cual son pocos.\n\nCuando esté activado, la funcionalidad de pantalla táctil puede no funcionar.\n\nDesactívalo si no sabes qué hacer.", - "fr_FR": "Prise en charge de l'accès direct à la souris (HID). Permet aux jeux d'accéder à votre souris en tant que dispositif de pointage.\n\nFonctionne uniquement avec les jeux qui prennent en charge nativement les contrôles de souris sur le matériel Switch, ce qui est rare.\n\nLorsqu'il est activé, la fonctionnalité de l'écran tactile peut ne pas fonctionner.\n\nLaissez sur OFF si vous n'êtes pas sûr.", + "fr_FR": "Prise en charge de l'accès direct à la souris (HID). Permet aux jeux d'accéder à votre souris en tant que dispositif de pointage.\n\nFonctionne uniquement avec les jeux qui prennent en charge nativement les contrôles de souris sur le matériel Switch, ce qui est rare.\n\nLorsqu'il est activé, la fonctionnalité de l'écran tactile peut ne pas fonctionner.\n\nLaissez désactiver si vous n'êtes pas sûr.", "he_IL": "", "it_IT": "Supporto per l'accesso diretto al mouse (HID). Fornisce ai giochi l'accesso al mouse come dispositivo di puntamento.\n\nFunziona solo con i rari giochi che supportano nativamente l'utilizzo del mouse su hardware Switch.\n\nQuando questa opzione è attivata, il touchscreen potrebbe non funzionare.\n\nNel dubbio, lascia l'opzione disattivata.", "ja_JP": "直接マウスアクセス (HID) のサポートです. ポインティングデバイスとしてマウスへのゲームアクセスを提供します.\n\nSwitchハードウェアでマウスの使用をネイティブにサポートしているゲームでのみ動作します.\n\n有効にしている場合, タッチスクリーン機能は動作しない場合があります.\n\nわからない場合はオフのままにしてください.", @@ -14645,7 +14645,7 @@ "el_GR": "", "en_US": "Resync System Time to match your PC's current date & time.\n\nThis is not an active setting, it can still fall out of sync; in which case just click this button again.", "es_ES": "", - "fr_FR": "", + "fr_FR": "Resynchronise la Date du Système pour qu'elle soit la même que celle du PC.\n\nCeci n'est pas un paramètrage automatique, la date peut se désynchroniser; dans ce cas là, rappuyer sur le boutton.", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -16037,7 +16037,7 @@ "el_GR": "Εύρος:", "en_US": "Range:", "es_ES": "Alcance:", - "fr_FR": "Intervalle :", + "fr_FR": "Intervalle :", "he_IL": "טווח:", "it_IT": "Raggio:", "ja_JP": "範囲:", @@ -17093,7 +17093,7 @@ "el_GR": "", "en_US": "Cabinet Dialog", "es_ES": "Diálogo Gabinete", - "fr_FR": "", + "fr_FR": "Dialogue de Cabinet", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -17117,7 +17117,7 @@ "el_GR": "", "en_US": "Enter your Amiibo's new name", "es_ES": "Ingresa el nuevo nombre de tu Amiibo", - "fr_FR": "", + "fr_FR": "Entrer le nouveau nom de votre Amiibo", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -17141,7 +17141,7 @@ "el_GR": "", "en_US": "Please scan your Amiibo now.", "es_ES": "Escanea tu Amiibo ahora.", - "fr_FR": "", + "fr_FR": "Veuillez scannez votre Amiibo.", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -19133,7 +19133,7 @@ "el_GR": "", "en_US": "{0} DLC(s) available", "es_ES": "", - "fr_FR": "", + "fr_FR": "{0} DLC(s) disponibles", "he_IL": "{0} הרחבות משחק", "it_IT": "", "ja_JP": "", @@ -19589,7 +19589,7 @@ "el_GR": "Όνομα:", "en_US": "Name:", "es_ES": "Nombre:", - "fr_FR": "Nom :", + "fr_FR": "Nom :", "he_IL": "שם:", "it_IT": "Nome:", "ja_JP": "名称:", @@ -21269,7 +21269,7 @@ "el_GR": "", "en_US": "VSync:", "es_ES": "", - "fr_FR": "", + "fr_FR": "VSync :", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21293,7 +21293,7 @@ "el_GR": "", "en_US": "Enable custom refresh rate (Experimental)", "es_ES": "", - "fr_FR": "", + "fr_FR": "Activer le taux de rafraîchissement customisé (Expérimental)", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21317,7 +21317,7 @@ "el_GR": "", "en_US": "Switch", "es_ES": "", - "fr_FR": "", + "fr_FR": "Switch", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21341,7 +21341,7 @@ "el_GR": "", "en_US": "Unbounded", "es_ES": "", - "fr_FR": "", + "fr_FR": "Sans Limite", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21365,7 +21365,7 @@ "el_GR": "", "en_US": "Custom Refresh Rate", "es_ES": "", - "fr_FR": "", + "fr_FR": "Taux de Rafraîchissement Customisé", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21389,7 +21389,7 @@ "el_GR": "", "en_US": "Emulated Vertical Sync. 'Switch' emulates the Switch's refresh rate of 60Hz. 'Unbounded' is an unbounded refresh rate.", "es_ES": "", - "fr_FR": "", + "fr_FR": "VSync émulé. 'Switch' émule le taux de rafraîchissement de la Switch (60Hz). 'Sans Limite' est un taux de rafraîchissement qui n'est pas limité.", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21411,9 +21411,9 @@ "ar_SA": "", "de_DE": "", "el_GR": "", - "en_US": "Emulated Vertical Sync. 'Switch' emulates the Switch's refresh rate of 60Hz. 'Unbounded' is an unbounded refresh rate. 'Custom' emulates the specified custom refresh rate.", + "en_US": "Emulated Vertical Sync. 'Switch' emulates the Switch's refresh rate of 60Hz. 'Unbounded' is an unbounded refresh rate. 'Custom Refresh Rate' emulates the specified custom refresh rate.", "es_ES": "", - "fr_FR": "", + "fr_FR": "VSync émulé. 'Switch' émule le taux de rafraîchissement de la Switch (60Hz). 'Sans Limite' est un taux de rafraîchissement qui n'est pas limité. 'Taux de Rafraîchissement Customisé' émule le taux de rafraîchissement spécifié.", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21437,7 +21437,7 @@ "el_GR": "", "en_US": "Allows the user to specify an emulated refresh rate. In some titles, this may speed up or slow down the rate of gameplay logic. In other titles, it may allow for capping FPS at some multiple of the refresh rate, or lead to unpredictable behavior. This is an experimental feature, with no guarantees for how gameplay will be affected. \n\nLeave OFF if unsure.", "es_ES": "", - "fr_FR": "", + "fr_FR": "Permet à l'utilisateur de spécifier un taux de rafraîchissement émulé. Dans certains jeux, ceci pourrait accélérer ou ralentir le taux de logique du gameplay. Dans d'autre titres, cela permettrait limiter le FPS à un multiple du taux de rafraîchissement, ou conduire à un comportement imprévisible. Ceci est une fonctionnalité expérimentale, avec aucune garanties pour comment le gameplay sera affecté. \n\nLaisser désactiver en cas de doute.", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21461,7 +21461,7 @@ "el_GR": "", "en_US": "The custom refresh rate target value.", "es_ES": "", - "fr_FR": "", + "fr_FR": "La valeur cible du taux de rafraîchissement customisé.", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21485,7 +21485,7 @@ "el_GR": "", "en_US": "The custom refresh rate, as a percentage of the normal Switch refresh rate.", "es_ES": "", - "fr_FR": "", + "fr_FR": "Le taux de rafraîchissement customisé, comme un pourcentage du taux de rafraîchissement normal de la Switch.", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21509,7 +21509,7 @@ "el_GR": "", "en_US": "Custom Refresh Rate %:", "es_ES": "", - "fr_FR": "", + "fr_FR": "Pourcentage du Taux de Rafraîchissement Customisé :", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21533,7 +21533,7 @@ "el_GR": "", "en_US": "Custom Refresh Rate Value:", "es_ES": "", - "fr_FR": "", + "fr_FR": "Valeur du Taux de Rafraîchissement Customisé :", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21557,7 +21557,7 @@ "el_GR": "", "en_US": "Interval", "es_ES": "", - "fr_FR": "", + "fr_FR": "Intervalle", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21581,7 +21581,7 @@ "el_GR": "", "en_US": "Toggle VSync mode:", "es_ES": "", - "fr_FR": "", + "fr_FR": "Activer/Désactiver mode VSync :", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21605,7 +21605,7 @@ "el_GR": "", "en_US": "Raise custom refresh rate", "es_ES": "", - "fr_FR": "", + "fr_FR": "Augmenter le taux de rafraîchissement customisé :", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -21627,9 +21627,9 @@ "ar_SA": "", "de_DE": "", "el_GR": "", - "en_US": "Lower custom refresh rate", + "en_US": "Lower custom refresh rate:", "es_ES": "", - "fr_FR": "", + "fr_FR": "Baisser le taux de rafraîchissement customisé :", "he_IL": "", "it_IT": "", "ja_JP": "", -- 2.47.1 From 278fe9d4f040585f0683f0f360f95c22510be302 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 23 Dec 2024 16:16:48 -0600 Subject: [PATCH 158/722] Add buildvalidationtasks project to infra label --- .github/labeler.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 871f9945f..ac3c77288 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -32,7 +32,7 @@ kernel: infra: - changed-files: - - any-glob-to-any-file: ['.github/**', 'distribution/**', 'Directory.Packages.props'] + - any-glob-to-any-file: ['.github/**', 'distribution/**', 'Directory.Packages.props', 'src/Ryujinx.BuildValidationTasks/**'] documentation: - changed-files: -- 2.47.1 From 3094df54dd9ad8335dbf04804f01c1eec5d72b20 Mon Sep 17 00:00:00 2001 From: Daenorth Date: Tue, 24 Dec 2024 00:03:33 +0100 Subject: [PATCH 159/722] Update Norwegian Translation (#418) swiggybobo --- src/Ryujinx/Assets/locales.json | 300 ++++++++++++++++---------------- 1 file changed, 150 insertions(+), 150 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index c4038eeef..2e86df0aa 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -82,7 +82,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "Mii 편집 애플릿", - "no_NO": "", + "no_NO": "Mii-redigeringsapplet", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -370,7 +370,7 @@ "it_IT": "Carica DLC Da una Cartella", "ja_JP": "", "ko_KR": "폴더에서 DLC 불러오기", - "no_NO": "", + "no_NO": "Last inn DLC fra mappe", "pl_PL": "", "pt_BR": "Carregar DLC da Pasta", "ru_RU": "", @@ -394,7 +394,7 @@ "it_IT": "Carica Aggiornamenti Da una Cartella", "ja_JP": "", "ko_KR": "폴더에서 타이틀 업데이트 불러오기", - "no_NO": "", + "no_NO": "Last inn titteloppdateringer fra mappe", "pl_PL": "", "pt_BR": "Carregar Atualizações de Jogo da Pasta", "ru_RU": "", @@ -706,7 +706,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "Amiibo 스캔(빈에서)", - "no_NO": "", + "no_NO": "Skann en Amiibo (fra bin fil)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -826,7 +826,7 @@ "it_IT": "Installa Chiavi", "ja_JP": "", "ko_KR": "설치 키", - "no_NO": "", + "no_NO": "Installere nøkler", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -850,7 +850,7 @@ "it_IT": "Installa Chiavi da file KEYS o ZIP", "ja_JP": "", "ko_KR": "키나 ZIP에서 키 설치", - "no_NO": "", + "no_NO": "Installer nøkler fra KEYS eller ZIP", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -874,7 +874,7 @@ "it_IT": "Installa Chiavi da una Cartella", "ja_JP": "", "ko_KR": "디렉터리에서 키 설치", - "no_NO": "", + "no_NO": "Installer nøkler fra en mappe", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -970,7 +970,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "XCI 파일 트리머", - "no_NO": "", + "no_NO": "Trim XCI-filer", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -1042,7 +1042,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "720p", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -1066,7 +1066,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "1080p", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -1210,7 +1210,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "자주 묻는 질문(FAQ) 및 문제해결 페이지", - "no_NO": "", + "no_NO": "FAQ- og feilsøkingsside", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -1234,7 +1234,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "공식 Ryujinx 위키에서 자주 묻는 질문(FAQ) 및 문제 해결 페이지 열기", - "no_NO": "", + "no_NO": "Åpner FAQ- og feilsøkingssiden på den offisielle Ryujinx-wikien", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -1258,7 +1258,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "설치 및 구성 안내", - "no_NO": "", + "no_NO": "Oppsett- og konfigurasjonsveiledning", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -1282,7 +1282,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "공식 Ryujinx 위키에서 설정 및 구성 안내 열기", - "no_NO": "", + "no_NO": "Åpner oppsett- og konfigurasjonsveiledningen på den offisielle Ryujinx-wikien", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -1306,7 +1306,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "멀티플레이어(LDN/LAN) 안내", - "no_NO": "", + "no_NO": "Flerspillerveiledning (LDN/LAN)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -1330,7 +1330,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "공식 Ryujinx 위키에서 멀티플레이어 안내 열기", - "no_NO": "", + "no_NO": "Åpner flerspillerveiledningen på den offisielle Ryujinx-wikien", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -2122,7 +2122,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "ExeFS", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -2170,7 +2170,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "RomFS", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -2218,7 +2218,7 @@ "it_IT": "", "ja_JP": "ロゴ", "ko_KR": "로고", - "no_NO": "", + "no_NO": "Logo", "pl_PL": "", "pt_BR": "", "ru_RU": "Логотип", @@ -2434,7 +2434,7 @@ "it_IT": "Controlla e Trimma i file XCI", "ja_JP": "", "ko_KR": "XCI 파일 확인 및 트림", - "no_NO": "", + "no_NO": "Kontroller og trim XCI-filen", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -2458,7 +2458,7 @@ "it_IT": "Controlla e Trimma i file XCI da Salvare Sullo Spazio del Disco", "ja_JP": "", "ko_KR": "디스크 공간을 절약하기 위해 XCI 파일 확인 및 트림", - "no_NO": "", + "no_NO": "Kontroller og trimm XCI-filen for å spare diskplass", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -2530,7 +2530,7 @@ "it_IT": "Trimmando i file XCI '{0}'", "ja_JP": "", "ko_KR": "XCI 파일 '{0}' 트리밍", - "no_NO": "", + "no_NO": "Trimming av XCI-filen '{0}'", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -2890,7 +2890,7 @@ "it_IT": "Mostra barra del titolo (Richiede il riavvio)", "ja_JP": "", "ko_KR": "제목 표시줄 표시(다시 시작해야 함)", - "no_NO": "", + "no_NO": "Vis tittellinje (krever omstart)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -3034,7 +3034,7 @@ "it_IT": "Directory di Caricamento Automatico per DLC/Aggiornamenti", "ja_JP": "", "ko_KR": "DLC/업데이트 디렉터리 자동 불러오기", - "no_NO": "", + "no_NO": "Autoload DLC/Updates-mapper", "pl_PL": "", "pt_BR": "Carregar Automaticamente Diretórios de DLC/Atualizações", "ru_RU": "", @@ -3058,7 +3058,7 @@ "it_IT": "Aggiornamenti e DLC che collegano a file mancanti verranno disabilitati automaticamente", "ja_JP": "", "ko_KR": "누락된 파일을 참조하는 DLC 및 업데이트가 자동으로 언로드", - "no_NO": "", + "no_NO": "DLC og oppdateringer som henviser til manglende filer, vil bli lastet ned automatisk", "pl_PL": "", "pt_BR": "DLCs e Atualizações que se referem a arquivos ausentes serão descarregadas automaticamente", "ru_RU": "", @@ -3130,7 +3130,7 @@ "it_IT": "Sistema", "ja_JP": "システム", "ko_KR": "시스템", - "no_NO": "", + "no_NO": "System", "pl_PL": "", "pt_BR": "Sistema", "ru_RU": "Система", @@ -3202,7 +3202,7 @@ "it_IT": "Giappone", "ja_JP": "日本", "ko_KR": "일본", - "no_NO": "", + "no_NO": "Japan", "pl_PL": "Japonia", "pt_BR": "Japão", "ru_RU": "Япония", @@ -3226,7 +3226,7 @@ "it_IT": "Stati Uniti d'America", "ja_JP": "アメリカ", "ko_KR": "미국", - "no_NO": "", + "no_NO": "USA", "pl_PL": "Stany Zjednoczone", "pt_BR": "EUA", "ru_RU": "США", @@ -3274,7 +3274,7 @@ "it_IT": "", "ja_JP": "オーストラリア", "ko_KR": "호주", - "no_NO": "", + "no_NO": "Australia", "pl_PL": "", "pt_BR": "Austrália", "ru_RU": "Австралия", @@ -3322,7 +3322,7 @@ "it_IT": "Corea", "ja_JP": "韓国", "ko_KR": "한국", - "no_NO": "", + "no_NO": "Korea", "pl_PL": "", "pt_BR": "Coreia", "ru_RU": "Корея", @@ -3346,7 +3346,7 @@ "it_IT": "", "ja_JP": "台湾", "ko_KR": "대만", - "no_NO": "", + "no_NO": "Taiwan", "pl_PL": "Tajwan", "pt_BR": "", "ru_RU": "Тайвань", @@ -3898,7 +3898,7 @@ "it_IT": "Low-power PPTC", "ja_JP": "Low-power PPTC", "ko_KR": "저전력 PPTC 캐시", - "no_NO": "", + "no_NO": "PPTC med lavt strømforbruk", "pl_PL": "Low-power PPTC", "pt_BR": "Low-power PPTC", "ru_RU": "Low-power PPTC", @@ -3970,7 +3970,7 @@ "it_IT": "", "ja_JP": "ダミー", "ko_KR": "더미", - "no_NO": "", + "no_NO": "Dummy", "pl_PL": "Atrapa", "pt_BR": "Nenhuma", "ru_RU": "Без звука", @@ -3994,7 +3994,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "OpenAL", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4042,7 +4042,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "SDL2", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4066,7 +4066,7 @@ "it_IT": "Espedienti", "ja_JP": "ハック", "ko_KR": "핵", - "no_NO": "", + "no_NO": "Hacks", "pl_PL": "Hacki", "pt_BR": "", "ru_RU": "Хаки", @@ -4114,7 +4114,7 @@ "it_IT": "Usa layout di memoria alternativo (per sviluppatori)", "ja_JP": "DRAMサイズ:", "ko_KR": "DRAM 크기 :", - "no_NO": "", + "no_NO": "DRAM Mengde", "pl_PL": "Użyj alternatywnego układu pamięci (Deweloperzy)", "pt_BR": "Tamanho da DRAM:", "ru_RU": "Использовать альтернативный макет памяти (для разработчиков)", @@ -4138,7 +4138,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "4GB", - "no_NO": "", + "no_NO": "4GB", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4162,7 +4162,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "6GB", - "no_NO": "", + "no_NO": "6GB", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4186,7 +4186,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "8GB", - "no_NO": "", + "no_NO": "8GB", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4210,7 +4210,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "12GB", - "no_NO": "", + "no_NO": "12GB", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4258,7 +4258,7 @@ "it_IT": "Ignora l'applet", "ja_JP": "アプレットを無視する", "ko_KR": "애플릿 무시", - "no_NO": "", + "no_NO": "Ignorer appleten", "pl_PL": "Ignoruj ​​aplet", "pt_BR": "Ignorar applet", "ru_RU": "Игнорировать Апплет", @@ -4402,7 +4402,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배", - "no_NO": "", + "no_NO": "2x", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4426,7 +4426,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "4배", - "no_NO": "", + "no_NO": "4x", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4450,7 +4450,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "8배", - "no_NO": "", + "no_NO": "8x", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4474,7 +4474,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "16배", - "no_NO": "", + "no_NO": "16x", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4570,7 +4570,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배(1440p/2160p)", - "no_NO": "2 x (1440p/2160p)", + "no_NO": "2x (1440p/2160p)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4594,7 +4594,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "3배(2160p/3240p)", - "no_NO": "", + "no_NO": "3x (2160p/3240p)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4666,7 +4666,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "4:3", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4690,7 +4690,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "16:9", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4714,7 +4714,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "16:10", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4738,7 +4738,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "21:9", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4762,7 +4762,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "32:9", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -4858,7 +4858,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "", + "no_NO": "Logging", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -4882,7 +4882,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "", + "no_NO": "Logging", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -5434,7 +5434,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "확인", - "no_NO": "", + "no_NO": "OK", "pl_PL": "", "pt_BR": "", "ru_RU": "Ок", @@ -6106,7 +6106,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "A", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -6130,7 +6130,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "B", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -6154,7 +6154,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "X", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -6178,7 +6178,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "Y", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -9130,7 +9130,7 @@ "it_IT": "Pulsante levetta destra", "ja_JP": "", "ko_KR": "우측 스틱 버튼", - "no_NO": "R Styrespak Trykk", + "no_NO": "Høyre Styrespak Trykk", "pl_PL": "", "pt_BR": "", "ru_RU": "Кнопка пр. стика", @@ -10090,7 +10090,7 @@ "it_IT": "Cancellando", "ja_JP": "", "ko_KR": "취소하기", - "no_NO": "", + "no_NO": "Kansellerer", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -10114,7 +10114,7 @@ "it_IT": "Chiudi", "ja_JP": "", "ko_KR": "닫기", - "no_NO": "", + "no_NO": "Lukk", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -10306,7 +10306,7 @@ "it_IT": "Visualizza profilo", "ja_JP": "", "ko_KR": "프로필 보기", - "no_NO": "", + "no_NO": "Se Profil", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -11362,7 +11362,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "변경 로그 보기", - "no_NO": "", + "no_NO": "Vis endringslogg", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -11818,7 +11818,7 @@ "it_IT": "Finestra XCI Trimmer", "ja_JP": "", "ko_KR": "XCI 트리머 창", - "no_NO": "", + "no_NO": "XCI Trimmervindu", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -12514,7 +12514,7 @@ "it_IT": "E' stato trovato un file di chiavi invalido ' {0}", "ja_JP": "", "ko_KR": "{0}에서 잘못된 키 파일이 발견", - "no_NO": "", + "no_NO": "En ugyldig Keys-fil ble funnet i {0}.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -12538,7 +12538,7 @@ "it_IT": "Installa Chavi", "ja_JP": "", "ko_KR": "설치 키", - "no_NO": "", + "no_NO": "Installere nøkler", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -12562,7 +12562,7 @@ "it_IT": "Un nuovo file di Chiavi sarà intallato.", "ja_JP": "", "ko_KR": "새로운 키 파일이 설치됩니다.", - "no_NO": "", + "no_NO": "Ny Keys-fil vil bli installert.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -12586,7 +12586,7 @@ "it_IT": "\n\nQuesto potrebbe sovrascrivere alcune delle Chiavi già installate.", "ja_JP": "", "ko_KR": "\n\n이로 인해 현재 설치된 키 중 일부가 대체될 수 있습니다.", - "no_NO": "", + "no_NO": "\n\nDette kan erstatte noen av de nåværende installerte nøklene.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -12610,7 +12610,7 @@ "it_IT": "\n\nVuoi continuare?", "ja_JP": "", "ko_KR": "\n\n계속하시겠습니까?", - "no_NO": "", + "no_NO": "\n\nVil du fortsette?", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -12634,7 +12634,7 @@ "it_IT": "Installando le chiavi...", "ja_JP": "", "ko_KR": "키 설치 중...", - "no_NO": "", + "no_NO": "Installere nøkler...", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -12658,7 +12658,7 @@ "it_IT": "Nuovo file di chiavi installato con successo.", "ja_JP": "", "ko_KR": "새로운 키 파일이 성공적으로 설치되었습니다.", - "no_NO": "", + "no_NO": "Ny Keys -fil installert.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -13666,7 +13666,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "이전 관리자 :", - "no_NO": "", + "no_NO": "Tidligere vedlikeholdt av:", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -14338,7 +14338,7 @@ "it_IT": "Inserisci una directory di \"autoload\" da aggiungere alla lista", "ja_JP": "", "ko_KR": "목록에 추가할 자동 불러오기 디렉터리를 입력", - "no_NO": "", + "no_NO": "Angi en autoload-mappe som skal legges til i listen", "pl_PL": "", "pt_BR": "Insira um diretório de carregamento automático para adicionar à lista", "ru_RU": "", @@ -14362,7 +14362,7 @@ "it_IT": "Aggiungi una directory di \"autoload\" alla lista", "ja_JP": "", "ko_KR": "목록에 자동 불러오기 디렉터리 추가", - "no_NO": "", + "no_NO": "Legg til en autoload-mappe i listen", "pl_PL": "", "pt_BR": "Adicionar um diretório de carregamento automático à lista", "ru_RU": "", @@ -14386,7 +14386,7 @@ "it_IT": "Rimuovi la directory di autoload selezionata", "ja_JP": "", "ko_KR": "선택한 자동 불러오기 디렉터리 제거", - "no_NO": "", + "no_NO": "Fjern valgt autoload-mappe", "pl_PL": "", "pt_BR": "Remover o diretório de carregamento automático selecionado", "ru_RU": "", @@ -14722,7 +14722,7 @@ "it_IT": "Carica il PPTC usando un terzo dei core.", "ja_JP": "", "ko_KR": "코어의 3분의 1을 사용하여 PPTC를 불러옵니다.", - "no_NO": "", + "no_NO": "Last inn PPTC med en tredjedel av antall kjerner.", "pl_PL": "", "pt_BR": "Carregar o PPTC usando um terço da quantidade de núcleos.", "ru_RU": "", @@ -14962,7 +14962,7 @@ "it_IT": "La finestra di dialogo esterna \"Controller Applet\" non apparirà se il gamepad viene disconnesso durante il gioco. Non ci sarà alcun prompt per chiudere la finestra di dialogo o impostare un nuovo controller. Una volta che il controller disconnesso in precedenza viene ricollegato, il gioco riprenderà automaticamente.", "ja_JP": "ゲームプレイ中にゲームパッドが切断された場合、外部ダイアログ「コントローラーアプレット」は表示されません。このダイアログを閉じるか、新しいコントローラーを設定するように求めるプロンプトは表示されません。以前に切断されたコントローラーが再接続されると、ゲームは自動的に再開されます。", "ko_KR": "게임 플레이 중에 게임패드 연결이 끊어지면 외부 대화 상자 \"컨트롤러 애플릿\"이 나타나지 않습니다. 대화 상자를 닫거나 새 컨트롤러를 설정하라는 메시지가 표시되지 않습니다. 이전에 연결이 끊어진 컨트롤러가 다시 연결되면 게임이 자동으로 다시 시작됩니다.", - "no_NO": "", + "no_NO": "Den eksterne dialogboksen «Controller Applet» vises ikke hvis gamepaden kobles fra under spilling. Du blir ikke bedt om å lukke dialogboksen eller konfigurere en ny kontroller. Når den tidligere frakoblede kontrolleren er koblet til igjen, fortsetter spillet automatisk.", "pl_PL": "Zewnętrzny dialog \"Controller Applet\" nie pojawi się, jeśli gamepad zostanie odłączony podczas rozgrywki. Nie pojawi się monit o zamknięcie dialogu lub skonfigurowanie nowego kontrolera. Po ponownym podłączeniu poprzednio odłączonego kontrolera gra zostanie automatycznie wznowiona.", "pt_BR": "O diálogo externo \"Controller Applet\" não aparecerá se o gamepad for desconectado durante o jogo. Não haverá prompt para fechar o diálogo ou configurar um novo controle. Assim que o controle desconectado anteriormente for reconectado, o jogo será retomado automaticamente.", "ru_RU": "Внешний диалог \"Апплет контроллера\" не появится, если геймпад будет отключен во время игры. Не будет предложено закрыть диалог или настроить новый контроллер. После повторного подключения ранее отключенного контроллера игра автоматически возобновится.", @@ -15514,7 +15514,7 @@ "it_IT": "Apri un esploratore file per scegliere una o più cartelle dalle quali caricare DLC in massa", "ja_JP": "", "ko_KR": "파일 탐색기를 열어 DLC를 일괄 불러오기할 폴더를 하나 이상 선택", - "no_NO": "", + "no_NO": "Åpne en filutforsker for å velge en eller flere mapper å laste inn DLC fra", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -15538,7 +15538,7 @@ "it_IT": "Apri un esploratore file per scegliere una o più cartelle dalle quali caricare aggiornamenti in massa", "ja_JP": "", "ko_KR": "파일 탐색기를 열어 하나 이상의 폴더를 선택하여 대량으로 타이틀 업데이트 불러오기", - "no_NO": "", + "no_NO": "Åpne en filutforsker for å velge en eller flere mapper som du vil laste inn titteloppdateringer fra", "pl_PL": "", "pt_BR": "Abra o explorador de arquivos para selecionar uma ou mais pastas e carregar atualizações de jogo em massa.", "ru_RU": "", @@ -16810,7 +16810,7 @@ "it_IT": "Parziale", "ja_JP": "", "ko_KR": "일부", - "no_NO": "", + "no_NO": "Delvis", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -16834,7 +16834,7 @@ "it_IT": "Non Trimmato", "ja_JP": "", "ko_KR": "트리밍되지 않음", - "no_NO": "", + "no_NO": "Ikke trimmet", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -16858,7 +16858,7 @@ "it_IT": "Trimmato", "ja_JP": "", "ko_KR": "트리밍됨", - "no_NO": "", + "no_NO": "Trimmet", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -16882,7 +16882,7 @@ "it_IT": "(Fallito)", "ja_JP": "", "ko_KR": "(실패)", - "no_NO": "", + "no_NO": "(Mislyktes)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -16906,7 +16906,7 @@ "it_IT": "Salva {0:n0} Mb", "ja_JP": "", "ko_KR": "{0:n0} Mb 저장", - "no_NO": "", + "no_NO": "Spare {0:n0} Mb", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -16930,7 +16930,7 @@ "it_IT": "Salva {0:n0} Mb", "ja_JP": "", "ko_KR": "{0:n0}Mb 저장됨", - "no_NO": "", + "no_NO": "Spart {0:n0} Mb", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -17098,7 +17098,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "캐비닛 대화 상자", - "no_NO": "", + "no_NO": "Dialogboks for kabinett", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -17122,7 +17122,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "Amiibo의 새 이름 입력하기", - "no_NO": "", + "no_NO": "Skriv inn Amiiboens nye navn", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -17146,7 +17146,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "지금 Amiibo를 스캔하세요.", - "no_NO": "", + "no_NO": "Vennligst skann Amiiboene dine nå.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18226,7 +18226,7 @@ "it_IT": "Controlla e Trimma i file XCI ", "ja_JP": "", "ko_KR": "XCI 파일 확인 및 정리", - "no_NO": "", + "no_NO": "Kontroller og trim XCI-filen", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18250,7 +18250,7 @@ "it_IT": "Questa funzionalita controllerà prima lo spazio libero e poi trimmerà il file XCI per liberare dello spazio.", "ja_JP": "", "ko_KR": "이 기능은 먼저 충분한 공간을 확보한 다음 XCI 파일을 트리밍하여 디스크 공간을 절약합니다.", - "no_NO": "", + "no_NO": "Denne funksjonen kontrollerer først hvor mye plass som er ledig, og trimmer deretter XCI-filen for å spare diskplass.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18274,7 +18274,7 @@ "it_IT": "Dimensioni Attuali File: {0:n} MB\nDimensioni Dati Gioco: {1:n} MB\nRisparimio Spazio Disco: {2:n} MB", "ja_JP": "", "ko_KR": "현재 파일 크기 : {0:n}MB\n게임 데이터 크기 : {1:n}MB\n디스크 공간 절약 : {2:n}MB", - "no_NO": "", + "no_NO": "Nåværende filstørrelse: 0:n MB\nSpilldatastørrelse: {1:n} MB\nDiskplassbesparelse: {2:n} MB", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18298,7 +18298,7 @@ "it_IT": "Il file XCI non deve essere trimmato. Controlla i log per ulteriori dettagli", "ja_JP": "", "ko_KR": "XCI 파일은 트리밍할 필요가 없습니다. 자세한 내용은 로그를 확인", - "no_NO": "", + "no_NO": "XCI-filen trenger ikke å trimmes. Sjekk loggene for mer informasjon", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18322,7 +18322,7 @@ "it_IT": "Il file XCI non può essere untrimmato. Controlla i log per ulteriori dettagli", "ja_JP": "", "ko_KR": "XCI 파일은 트리밍을 해제할 수 없습니다. 자세한 내용은 로그를 확인", - "no_NO": "", + "no_NO": "XCI-filen kan ikke trimmes. Sjekk loggene for mer informasjon", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18346,7 +18346,7 @@ "it_IT": "Il file XCI è in sola lettura e non può essere reso Scrivibile. Controlla i log per ulteriori dettagli", "ja_JP": "", "ko_KR": "XCI 파일은 읽기 전용이므로 쓰기 가능하게 만들 수 없습니다. 자세한 내용은 로그를 확인", - "no_NO": "", + "no_NO": "XCI-filen er skrivebeskyttet og kunne ikke gjøres skrivbar. Sjekk loggene for mer informasjon", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18370,7 +18370,7 @@ "it_IT": "Il file XCI ha cambiato dimensioni da quando è stato scansionato. Controlla che il file non stia venendo scritto da qualche altro programma e poi riprova.", "ja_JP": "", "ko_KR": "XCI 파일이 스캔된 후 크기가 변경되었습니다. 파일이 쓰여지고 있지 않은지 확인하고 다시 시도하세요.", - "no_NO": "", + "no_NO": "XCI File har endret størrelse siden den ble skannet. Kontroller at det ikke skrives til filen, og prøv på nytt.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18394,7 +18394,7 @@ "it_IT": "Il file XCI ha dati nello spazio libero, non è sicuro effettuare il trimming", "ja_JP": "", "ko_KR": "XCI 파일에 여유 공간 영역에 데이터가 있으므로 트리밍하는 것이 안전하지 않음", - "no_NO": "", + "no_NO": "XCI-filen har data i ledig plass, og det er ikke trygt å trimme den", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18418,7 +18418,7 @@ "it_IT": "Il file XCI contiene dati invlidi. Controlla i log per ulteriori dettagli", "ja_JP": "", "ko_KR": "XCI 파일에 유효하지 않은 데이터가 포함되어 있습니다. 자세한 내용은 로그를 확인", - "no_NO": "", + "no_NO": "XCI-filen inneholder ugyldige data. Sjekk loggene for ytterligere detaljer", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18442,7 +18442,7 @@ "it_IT": "Il file XCI non può essere aperto per essere scritto. Controlla i log per ulteriori dettagli", "ja_JP": "", "ko_KR": "XCI 파일을 쓰기 위해 열 수 없습니다. 자세한 내용은 로그를 확인", - "no_NO": "", + "no_NO": "XCI-filen kunne ikke åpnes for skriving. Sjekk loggene for ytterligere detaljer", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18466,7 +18466,7 @@ "it_IT": "Trimming del file XCI fallito", "ja_JP": "", "ko_KR": "XCI 파일 트리밍에 실패", - "no_NO": "", + "no_NO": "Trimming av XCI-filen mislyktes", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18490,7 +18490,7 @@ "it_IT": "Operazione Cancellata", "ja_JP": "", "ko_KR": "작업이 취소됨", - "no_NO": "", + "no_NO": "Operasjonen ble avlyst", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18514,7 +18514,7 @@ "it_IT": "Nessuna operazione è stata effettuata", "ja_JP": "", "ko_KR": "작업이 수행되지 않음", - "no_NO": "", + "no_NO": "Ingen operasjon ble utført", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18658,7 +18658,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "XCI 파일 트리머", - "no_NO": "", + "no_NO": "XCI File Trimmer", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18682,7 +18682,7 @@ "it_IT": "{0} di {1} Titolo(i) Selezionati", "ja_JP": "", "ko_KR": "{1}개 타이틀 중 {0}개 선택됨", - "no_NO": "", + "no_NO": "{0} av {1} Valgte tittel(er)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18706,7 +18706,7 @@ "it_IT": "{0} of {1} Titolo(i) Selezionati ({2} visualizzato)", "ja_JP": "", "ko_KR": "{1}개 타이틀 중 {0}개 선택됨({2}개 표시됨)", - "no_NO": "", + "no_NO": "{0} av {1} Tittel(er) valgt ({2} vises)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18730,7 +18730,7 @@ "it_IT": "Trimming {0} Titolo(i)...", "ja_JP": "", "ko_KR": "{0}개의 타이틀을 트리밍 중...", - "no_NO": "", + "no_NO": "Trimming av {0} tittel(er)...", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18754,7 +18754,7 @@ "it_IT": "Untrimming {0} Titolo(i)...", "ja_JP": "", "ko_KR": "{0}개의 타이틀을 트리밍 해제 중...", - "no_NO": "", + "no_NO": "Untrimming {0} Tittel(er)...", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18778,7 +18778,7 @@ "it_IT": "Fallito", "ja_JP": "", "ko_KR": "실패", - "no_NO": "", + "no_NO": "Mislyktes", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18802,7 +18802,7 @@ "it_IT": "Potenziali Salvataggi", "ja_JP": "", "ko_KR": "잠재적 비용 절감", - "no_NO": "", + "no_NO": "Potensielle besparelser", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18826,7 +18826,7 @@ "it_IT": "Effettivi Salvataggi", "ja_JP": "", "ko_KR": "실제 비용 절감", - "no_NO": "", + "no_NO": "Faktiske besparelser", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18874,7 +18874,7 @@ "it_IT": "Seleziona Visualizzati", "ja_JP": "", "ko_KR": "표시됨 선택", - "no_NO": "", + "no_NO": "Velg vist", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18898,7 +18898,7 @@ "it_IT": "Deselziona Visualizzati", "ja_JP": "", "ko_KR": "표시됨 선택 취소", - "no_NO": "", + "no_NO": "Opphev valg av Vist", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18922,7 +18922,7 @@ "it_IT": "Titolo", "ja_JP": "", "ko_KR": "타이틀", - "no_NO": "", + "no_NO": "Tittel", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18946,7 +18946,7 @@ "it_IT": "Salvataggio Spazio", "ja_JP": "", "ko_KR": "공간 절약s", - "no_NO": "", + "no_NO": "Plassbesparelser", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -18994,7 +18994,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "언트림", - "no_NO": "", + "no_NO": "Utrim", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -19018,7 +19018,7 @@ "it_IT": "{0} aggiornamento/i aggiunto/i", "ja_JP": "", "ko_KR": "{0}개의 새 업데이트가 추가됨", - "no_NO": "", + "no_NO": "{0} ny(e) oppdatering(er) lagt til", "pl_PL": "", "pt_BR": "{0} nova(s) atualização(ões) adicionada(s)", "ru_RU": "", @@ -19042,7 +19042,7 @@ "it_IT": "Gli aggiornamenti inclusi non possono essere eliminati, ma solo disattivati", "ja_JP": "", "ko_KR": "번들 업데이트는 제거할 수 없으며, 비활성화만 가능합니다.", - "no_NO": "", + "no_NO": "Medfølgende oppdateringer kan ikke fjernes, bare deaktiveres.", "pl_PL": "", "pt_BR": "Atualizações incorporadas não podem ser removidas, apenas desativadas.", "ru_RU": "", @@ -19114,7 +19114,7 @@ "it_IT": "i DLC \"impacchettati\" non possono essere rimossi, ma solo disabilitati.", "ja_JP": "", "ko_KR": "번들 DLC는 제거할 수 없으며 비활성화만 가능합니다.", - "no_NO": "", + "no_NO": "Medfølgende DLC kan ikke fjernes, bare deaktiveres.", "pl_PL": "", "pt_BR": "DLCs incorporadas não podem ser removidas, apenas desativadas.", "ru_RU": "", @@ -19162,7 +19162,7 @@ "it_IT": "{0} nuovo/i contenuto/i scaricabile/i aggiunto/i", "ja_JP": "", "ko_KR": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨", - "no_NO": "", + "no_NO": "{0} nytt nedlastbart innhold lagt til", "pl_PL": "", "pt_BR": "{0} novo(s) conteúdo(s) para download adicionado(s)", "ru_RU": "", @@ -19186,7 +19186,7 @@ "it_IT": "{0} contenuto/i scaricabile/i aggiunto/i", "ja_JP": "", "ko_KR": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨", - "no_NO": "", + "no_NO": "{0} nytt nedlastbart innhold lagt til", "pl_PL": "", "pt_BR": "{0} novo(s) conteúdo(s) para download adicionado(s)", "ru_RU": "", @@ -19210,7 +19210,7 @@ "it_IT": "{0} contenuto/i scaricabile/i mancante/i rimosso/i", "ja_JP": "", "ko_KR": "{0}개의 내려받기 가능한 콘텐츠가 제거됨", - "no_NO": "", + "no_NO": "{0} manglende nedlastbart innhold fjernet", "pl_PL": "", "pt_BR": "{0} conteúdo(s) para download ausente(s) removido(s)", "ru_RU": "", @@ -19234,7 +19234,7 @@ "it_IT": "{0} aggiornamento/i aggiunto/i", "ja_JP": "", "ko_KR": "{0}개의 새 업데이트가 추가됨", - "no_NO": "", + "no_NO": "{0} ny(e) oppdatering(er) lagt til", "pl_PL": "", "pt_BR": "{0} nova(s) atualização(ões) adicionada(s)", "ru_RU": "", @@ -19258,7 +19258,7 @@ "it_IT": "{0} aggiornamento/i mancante/i rimosso/i", "ja_JP": "", "ko_KR": "누락된 업데이트 {0}개 삭제", - "no_NO": "", + "no_NO": "{0} manglende oppdatering(er) fjernet", "pl_PL": "", "pt_BR": "{0} atualização(ões) ausente(s) removida(s)", "ru_RU": "", @@ -19330,7 +19330,7 @@ "it_IT": "Continua", "ja_JP": "", "ko_KR": "계속", - "no_NO": "", + "no_NO": "Fortsett", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21010,7 +21010,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "P2P 네트워크 호스팅 비활성화(대기 시간이 늘어날 수 있음)", - "no_NO": "", + "no_NO": "Deaktiver P2P-nettverkshosting (kan øke ventetiden)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21034,7 +21034,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "P2P 네트워크 호스팅을 비활성화하면 피어가 직접 연결하지 않고 마스터 서버를 통해 프록시합니다.", - "no_NO": "", + "no_NO": "Deaktiver P2P-nettverkshosting, så vil andre brukere gå via hovedserveren i stedet for å koble seg direkte til deg.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21058,7 +21058,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "네트워크 암호 문구 :", - "no_NO": "", + "no_NO": "Nettverkspassord:", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21082,7 +21082,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "귀하는 귀하와 동일한 암호를 사용하는 호스팅 게임만 볼 수 있습니다.", - "no_NO": "", + "no_NO": "Du vil bare kunne se spill som er arrangert med samme passordfrase som deg.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21106,7 +21106,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "Ryujinx-<8 hex chars> 형식으로 암호를 입력하세요. 귀하는 귀하와 동일한 암호를 사용하는 호스팅 게임만 볼 수 있습니다.", - "no_NO": "", + "no_NO": "Skriv inn en passordfrase i formatet Ryujinx-<8 heks tegn>. Du vil bare kunne se spill som er arrangert med samme passordfrase som deg.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21130,7 +21130,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "(일반)", - "no_NO": "", + "no_NO": "(offentlig)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21154,7 +21154,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "무작위 생성", - "no_NO": "", + "no_NO": "Generer tilfeldig", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21178,7 +21178,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "다른 플레이어와 공유할 수 있는 새로운 암호 문구를 생성합니다.", - "no_NO": "", + "no_NO": "Genererer en ny passordfrase, som kan deles med andre spillere.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21202,7 +21202,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "지우기", - "no_NO": "", + "no_NO": "Slett", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21226,7 +21226,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "현재 암호를 지우고 공용 네트워크로 돌아갑니다.", - "no_NO": "", + "no_NO": "Sletter den gjeldende passordfrasen og går tilbake til det offentlige nettverket.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21250,7 +21250,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "유효하지 않은 암호입니다! \"Ryujinx-<8 hex chars>\" 형식이어야 합니다.", - "no_NO": "", + "no_NO": "Ugyldig passordfrase! Må være i formatet \"Ryujinx-<8 hex tegn>\"", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21298,7 +21298,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "사용자 정의 주사율 활성화(실험적)", - "no_NO": "", + "no_NO": "Aktiver egendefinert oppdateringsfrekvens (eksperimentell)", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21346,7 +21346,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "무제한", - "no_NO": "", + "no_NO": "Ubegrenset", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21370,7 +21370,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "사용자 정의 주사율", - "no_NO": "", + "no_NO": "Egendefinert oppdateringsfrekvens", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21394,7 +21394,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "에뮬레이트된 수직 동기화. '스위치'는 스위치의 60Hz 주사율을 에뮬레이트합니다. '무한'은 무제한 주사율입니다.", - "no_NO": "", + "no_NO": "Emulert vertikal synkronisering. «Switch» emulerer Switchs oppdateringsfrekvens på 60 Hz. «Ubegrenset» er en ubegrenset oppdateringsfrekvens.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21418,7 +21418,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "에뮬레이트된 수직 동기화. '스위치'는 스위치의 60Hz 주사율을 에뮬레이트합니다. '무한'은 무제한 주사율입니다. '사용자 지정'은 지정된 사용자 지정 주사율을 에뮬레이트합니다.", - "no_NO": "", + "no_NO": "Emulert vertikal synkronisering. «Switch» emulerer Switchs oppdateringsfrekvens på 60 Hz. «Ubegrenset» er en ubegrenset oppdateringsfrekvens. «Egendefinert» emulerer den angitte egendefinerte oppdateringsfrekvensen.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21442,7 +21442,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "사용자가 에뮬레이트된 화면 주사율을 지정할 수 있습니다. 일부 타이틀에서는 게임플레이 로직 속도가 빨라지거나 느려질 수 있습니다. 다른 타이틀에서는 주사율의 배수로 FPS를 제한하거나 예측할 수 없는 동작으로 이어질 수 있습니다. 이는 실험적 기능으로 게임 플레이에 어떤 영향을 미칠지 보장할 수 없습니다. \n\n모르면 끔으로 두세요.", - "no_NO": "", + "no_NO": "Gjør det mulig for brukeren å angi en emulert oppdateringsfrekvens. I noen titler kan dette øke eller senke hastigheten på spillogikken. I andre titler kan det gjøre det mulig å begrense FPS til et multiplum av oppdateringsfrekvensen, eller føre til uforutsigbar oppførsel. Dette er en eksperimentell funksjon, og det gis ingen garantier for hvordan spillingen påvirkes. \n\nLa AV stå hvis du er usikker.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21466,7 +21466,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "사용자 정의 주사율 목표 값입니다.", - "no_NO": "", + "no_NO": "Den egendefinerte målverdien for oppdateringsfrekvens.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21490,7 +21490,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "일반 스위치 주사율의 백분율로 나타낸 사용자 지정 주사율입니다.", - "no_NO": "", + "no_NO": "Den egendefinerte oppdateringsfrekvensen, i prosent av den normale oppdateringsfrekvensen for Switch-konsollen.", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21514,7 +21514,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "사용자 정의 주사율 % :", - "no_NO": "", + "no_NO": "Egendefinert oppdateringsfrekvens %:", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21538,7 +21538,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "사용자 정의 주사율 값 :", - "no_NO": "", + "no_NO": "Egendefinert verdi for oppdateringsfrekvens:", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21562,7 +21562,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "간격", - "no_NO": "", + "no_NO": "Intervall", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21586,7 +21586,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "수직 동기화 모드 전환 :", - "no_NO": "", + "no_NO": "Veksle mellom VSync-modus:", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21610,7 +21610,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "사용자 정의 주사율 증가", - "no_NO": "", + "no_NO": "Øk den egendefinerte oppdateringsfrekvensen", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -21634,7 +21634,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "사용자 정의 주사율 감소", - "no_NO": "", + "no_NO": "Lavere tilpasset oppdateringsfrekvens", "pl_PL": "", "pt_BR": "", "ru_RU": "", -- 2.47.1 From 852823104f3af3d67484377b5d8d8ba370687ccb Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 00:55:16 -0600 Subject: [PATCH 160/722] EXPERIMENTAL: Metal backend (#441) This is not a continuation of the Metal backend; this is simply bringing the branch up to date and merging it as-is behind an experiment. --------- Co-authored-by: Isaac Marovitz Co-authored-by: Samuliak Co-authored-by: SamoZ256 <96914946+SamoZ256@users.noreply.github.com> Co-authored-by: Isaac Marovitz <42140194+IsaacMarovitz@users.noreply.github.com> Co-authored-by: riperiperi Co-authored-by: Gabriel A --- Directory.Packages.props | 1 + Ryujinx.sln | 8 + .../Configuration/GraphicsBackend.cs | 2 + src/Ryujinx.Graphics.GAL/ComputeSize.cs | 18 + src/Ryujinx.Graphics.GAL/Format.cs | 78 + src/Ryujinx.Graphics.GAL/ShaderInfo.cs | 17 +- .../Threed/ComputeDraw/VtgAsComputeContext.cs | 19 +- .../Threed/ComputeDraw/VtgAsComputeState.cs | 18 - .../Shader/DiskCache/DiskCacheHostStorage.cs | 13 +- .../DiskCache/ParallelDiskCacheLoader.cs | 7 +- .../Shader/GpuAccessor.cs | 8 +- .../Shader/GpuAccessorBase.cs | 8 +- .../Shader/GpuChannelComputeState.cs | 11 + .../Shader/ShaderCache.cs | 21 +- .../Shader/ShaderInfoBuilder.cs | 51 +- src/Ryujinx.Graphics.Metal/Auto.cs | 146 ++ .../BackgroundResources.cs | 107 + src/Ryujinx.Graphics.Metal/BitMap.cs | 157 ++ src/Ryujinx.Graphics.Metal/BufferHolder.cs | 385 ++++ src/Ryujinx.Graphics.Metal/BufferManager.cs | 237 +++ .../BufferUsageBitmap.cs | 85 + src/Ryujinx.Graphics.Metal/CacheByRange.cs | 294 +++ .../CommandBufferEncoder.cs | 170 ++ .../CommandBufferPool.cs | 289 +++ .../CommandBufferScoped.cs | 43 + src/Ryujinx.Graphics.Metal/Constants.cs | 41 + src/Ryujinx.Graphics.Metal/CounterEvent.cs | 22 + .../DepthStencilCache.cs | 68 + .../DisposableBuffer.cs | 26 + .../DisposableSampler.cs | 22 + .../Effects/IPostProcessingEffect.cs | 10 + .../Effects/IScalingFilter.cs | 18 + .../EncoderResources.cs | 63 + src/Ryujinx.Graphics.Metal/EncoderState.cs | 206 ++ .../EncoderStateManager.cs | 1788 +++++++++++++++++ src/Ryujinx.Graphics.Metal/EnumConversion.cs | 293 +++ src/Ryujinx.Graphics.Metal/FenceHolder.cs | 77 + src/Ryujinx.Graphics.Metal/FormatConverter.cs | 49 + src/Ryujinx.Graphics.Metal/FormatTable.cs | 196 ++ src/Ryujinx.Graphics.Metal/HardwareInfo.cs | 82 + src/Ryujinx.Graphics.Metal/HashTableSlim.cs | 143 ++ src/Ryujinx.Graphics.Metal/HelperShader.cs | 868 ++++++++ src/Ryujinx.Graphics.Metal/IdList.cs | 121 ++ src/Ryujinx.Graphics.Metal/ImageArray.cs | 74 + .../IndexBufferPattern.cs | 118 ++ .../IndexBufferState.cs | 103 + src/Ryujinx.Graphics.Metal/MetalRenderer.cs | 309 +++ .../MultiFenceHolder.cs | 262 +++ .../PersistentFlushBuffer.cs | 99 + src/Ryujinx.Graphics.Metal/Pipeline.cs | 877 ++++++++ src/Ryujinx.Graphics.Metal/Program.cs | 286 +++ .../ResourceBindingSegment.cs | 22 + .../ResourceLayoutBuilder.cs | 59 + .../Ryujinx.Graphics.Metal.csproj | 30 + src/Ryujinx.Graphics.Metal/SamplerHolder.cs | 90 + src/Ryujinx.Graphics.Metal/Shaders/Blit.metal | 43 + .../Shaders/BlitMs.metal | 45 + .../Shaders/ChangeBufferStride.metal | 72 + .../Shaders/ColorClear.metal | 38 + .../Shaders/ConvertD32S8ToD24S8.metal | 66 + .../Shaders/ConvertIndexBuffer.metal | 59 + .../Shaders/DepthBlit.metal | 27 + .../Shaders/DepthBlitMs.metal | 29 + .../Shaders/DepthStencilClear.metal | 42 + .../Shaders/StencilBlit.metal | 27 + .../Shaders/StencilBlitMs.metal | 29 + src/Ryujinx.Graphics.Metal/StagingBuffer.cs | 288 +++ .../State/DepthStencilUid.cs | 110 + .../State/PipelineState.cs | 341 ++++ .../State/PipelineUid.cs | 208 ++ src/Ryujinx.Graphics.Metal/StateCache.cs | 42 + src/Ryujinx.Graphics.Metal/StringHelper.cs | 30 + src/Ryujinx.Graphics.Metal/SyncManager.cs | 214 ++ src/Ryujinx.Graphics.Metal/Texture.cs | 654 ++++++ src/Ryujinx.Graphics.Metal/TextureArray.cs | 93 + src/Ryujinx.Graphics.Metal/TextureBase.cs | 67 + src/Ryujinx.Graphics.Metal/TextureBuffer.cs | 132 ++ src/Ryujinx.Graphics.Metal/TextureCopy.cs | 265 +++ .../VertexBufferState.cs | 60 + src/Ryujinx.Graphics.Metal/Window.cs | 231 +++ .../CodeGen/Msl/CodeGenContext.cs | 108 + .../CodeGen/Msl/Declarations.cs | 578 ++++++ .../CodeGen/Msl/Defaults.cs | 34 + .../CodeGen/Msl/HelperFunctions/FindLSB.metal | 5 + .../Msl/HelperFunctions/FindMSBS32.metal | 5 + .../Msl/HelperFunctions/FindMSBU32.metal | 6 + .../HelperFunctions/HelperFunctionNames.cs | 10 + .../CodeGen/Msl/HelperFunctions/Precise.metal | 14 + .../Msl/HelperFunctions/SwizzleAdd.metal | 7 + .../CodeGen/Msl/Instructions/InstGen.cs | 185 ++ .../CodeGen/Msl/Instructions/InstGenBallot.cs | 30 + .../Msl/Instructions/InstGenBarrier.cs | 15 + .../CodeGen/Msl/Instructions/InstGenCall.cs | 60 + .../CodeGen/Msl/Instructions/InstGenHelper.cs | 222 ++ .../CodeGen/Msl/Instructions/InstGenMemory.cs | 672 +++++++ .../CodeGen/Msl/Instructions/InstGenVector.cs | 32 + .../CodeGen/Msl/Instructions/InstInfo.cs | 18 + .../CodeGen/Msl/Instructions/InstType.cs | 35 + .../CodeGen/Msl/Instructions/IoMap.cs | 83 + .../CodeGen/Msl/MslGenerator.cs | 286 +++ .../CodeGen/Msl/NumberFormatter.cs | 94 + .../CodeGen/Msl/OperandManager.cs | 176 ++ .../CodeGen/Msl/TypeConversion.cs | 93 + .../Ryujinx.Graphics.Shader.csproj | 7 + src/Ryujinx.Graphics.Shader/SamplerType.cs | 46 + .../StructuredIr/HelperFunctionsMask.cs | 7 + .../StructuredIr/StructuredProgram.cs | 17 +- .../StructuredIr/StructuredProgramContext.cs | 3 +- .../StructuredIr/StructuredProgramInfo.cs | 7 +- .../Translation/FeatureFlags.cs | 1 + .../Translation/ResourceManager.cs | 103 + .../Translation/TargetApi.cs | 1 + .../Translation/TargetLanguage.cs | 2 +- .../Transforms/ForcePreciseEnable.cs | 2 + .../Translation/TranslatorContext.cs | 34 +- .../Metal/MetalWindow.cs | 47 + src/Ryujinx.Headless.SDL2/Program.cs | 18 +- .../Ryujinx.Headless.SDL2.csproj | 1 + src/Ryujinx.ShaderTools/Program.cs | 2 +- .../Configuration/ConfigurationState.cs | 19 +- src/Ryujinx/AppHost.cs | 43 +- src/Ryujinx/Assets/locales.json | 48 + src/Ryujinx/Program.cs | 1 + src/Ryujinx/Ryujinx.csproj | 1 + .../UI/Renderer/EmbeddedWindowMetal.cs | 20 + src/Ryujinx/UI/Renderer/RendererHost.axaml.cs | 62 +- .../UI/ViewModels/MainWindowViewModel.cs | 2 +- .../UI/ViewModels/SettingsViewModel.cs | 7 +- .../UI/Views/Settings/SettingsCPUView.axaml | 2 +- .../Views/Settings/SettingsGraphicsView.axaml | 16 +- .../UI/Windows/SettingsWindow.axaml.cs | 18 +- 131 files changed, 14992 insertions(+), 140 deletions(-) create mode 100644 src/Ryujinx.Graphics.GAL/ComputeSize.cs create mode 100644 src/Ryujinx.Graphics.Metal/Auto.cs create mode 100644 src/Ryujinx.Graphics.Metal/BackgroundResources.cs create mode 100644 src/Ryujinx.Graphics.Metal/BitMap.cs create mode 100644 src/Ryujinx.Graphics.Metal/BufferHolder.cs create mode 100644 src/Ryujinx.Graphics.Metal/BufferManager.cs create mode 100644 src/Ryujinx.Graphics.Metal/BufferUsageBitmap.cs create mode 100644 src/Ryujinx.Graphics.Metal/CacheByRange.cs create mode 100644 src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs create mode 100644 src/Ryujinx.Graphics.Metal/CommandBufferPool.cs create mode 100644 src/Ryujinx.Graphics.Metal/CommandBufferScoped.cs create mode 100644 src/Ryujinx.Graphics.Metal/Constants.cs create mode 100644 src/Ryujinx.Graphics.Metal/CounterEvent.cs create mode 100644 src/Ryujinx.Graphics.Metal/DepthStencilCache.cs create mode 100644 src/Ryujinx.Graphics.Metal/DisposableBuffer.cs create mode 100644 src/Ryujinx.Graphics.Metal/DisposableSampler.cs create mode 100644 src/Ryujinx.Graphics.Metal/Effects/IPostProcessingEffect.cs create mode 100644 src/Ryujinx.Graphics.Metal/Effects/IScalingFilter.cs create mode 100644 src/Ryujinx.Graphics.Metal/EncoderResources.cs create mode 100644 src/Ryujinx.Graphics.Metal/EncoderState.cs create mode 100644 src/Ryujinx.Graphics.Metal/EncoderStateManager.cs create mode 100644 src/Ryujinx.Graphics.Metal/EnumConversion.cs create mode 100644 src/Ryujinx.Graphics.Metal/FenceHolder.cs create mode 100644 src/Ryujinx.Graphics.Metal/FormatConverter.cs create mode 100644 src/Ryujinx.Graphics.Metal/FormatTable.cs create mode 100644 src/Ryujinx.Graphics.Metal/HardwareInfo.cs create mode 100644 src/Ryujinx.Graphics.Metal/HashTableSlim.cs create mode 100644 src/Ryujinx.Graphics.Metal/HelperShader.cs create mode 100644 src/Ryujinx.Graphics.Metal/IdList.cs create mode 100644 src/Ryujinx.Graphics.Metal/ImageArray.cs create mode 100644 src/Ryujinx.Graphics.Metal/IndexBufferPattern.cs create mode 100644 src/Ryujinx.Graphics.Metal/IndexBufferState.cs create mode 100644 src/Ryujinx.Graphics.Metal/MetalRenderer.cs create mode 100644 src/Ryujinx.Graphics.Metal/MultiFenceHolder.cs create mode 100644 src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs create mode 100644 src/Ryujinx.Graphics.Metal/Pipeline.cs create mode 100644 src/Ryujinx.Graphics.Metal/Program.cs create mode 100644 src/Ryujinx.Graphics.Metal/ResourceBindingSegment.cs create mode 100644 src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs create mode 100644 src/Ryujinx.Graphics.Metal/Ryujinx.Graphics.Metal.csproj create mode 100644 src/Ryujinx.Graphics.Metal/SamplerHolder.cs create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/Blit.metal create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/BlitMs.metal create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/ChangeBufferStride.metal create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/ColorClear.metal create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/ConvertD32S8ToD24S8.metal create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/ConvertIndexBuffer.metal create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/DepthBlit.metal create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/DepthBlitMs.metal create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/DepthStencilClear.metal create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/StencilBlit.metal create mode 100644 src/Ryujinx.Graphics.Metal/Shaders/StencilBlitMs.metal create mode 100644 src/Ryujinx.Graphics.Metal/StagingBuffer.cs create mode 100644 src/Ryujinx.Graphics.Metal/State/DepthStencilUid.cs create mode 100644 src/Ryujinx.Graphics.Metal/State/PipelineState.cs create mode 100644 src/Ryujinx.Graphics.Metal/State/PipelineUid.cs create mode 100644 src/Ryujinx.Graphics.Metal/StateCache.cs create mode 100644 src/Ryujinx.Graphics.Metal/StringHelper.cs create mode 100644 src/Ryujinx.Graphics.Metal/SyncManager.cs create mode 100644 src/Ryujinx.Graphics.Metal/Texture.cs create mode 100644 src/Ryujinx.Graphics.Metal/TextureArray.cs create mode 100644 src/Ryujinx.Graphics.Metal/TextureBase.cs create mode 100644 src/Ryujinx.Graphics.Metal/TextureBuffer.cs create mode 100644 src/Ryujinx.Graphics.Metal/TextureCopy.cs create mode 100644 src/Ryujinx.Graphics.Metal/VertexBufferState.cs create mode 100644 src/Ryujinx.Graphics.Metal/Window.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/CodeGenContext.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Declarations.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Defaults.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindLSB.metal create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindMSBS32.metal create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindMSBU32.metal create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/HelperFunctionNames.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/Precise.metal create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/SwizzleAdd.metal create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBallot.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBarrier.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenCall.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenHelper.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenVector.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstInfo.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstType.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/IoMap.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/NumberFormatter.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/OperandManager.cs create mode 100644 src/Ryujinx.Graphics.Shader/CodeGen/Msl/TypeConversion.cs create mode 100644 src/Ryujinx.Headless.SDL2/Metal/MetalWindow.cs create mode 100644 src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index 34655164e..07fc8cc28 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -44,6 +44,7 @@ + diff --git a/Ryujinx.sln b/Ryujinx.sln index c3cb5a2b0..71d5f6dd9 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -80,6 +80,10 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Generators", "src\Ryujinx.Horizon.Kernel.Generators\Ryujinx.Horizon.Kernel.Generators.csproj", "{7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal", "src\Ryujinx.Graphics.Metal\Ryujinx.Graphics.Metal.csproj", "{C08931FA-1191-417A-864F-3882D93E683B}" + ProjectSection(ProjectDependencies) = postProject + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} = {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}" ProjectSection(SolutionItems) = preProject @@ -257,6 +261,10 @@ Global {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.Build.0 = Debug|Any CPU {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Ryujinx.Common/Configuration/GraphicsBackend.cs b/src/Ryujinx.Common/Configuration/GraphicsBackend.cs index e3b4f91b0..9d399d560 100644 --- a/src/Ryujinx.Common/Configuration/GraphicsBackend.cs +++ b/src/Ryujinx.Common/Configuration/GraphicsBackend.cs @@ -6,7 +6,9 @@ namespace Ryujinx.Common.Configuration [JsonConverter(typeof(TypedStringEnumConverter))] public enum GraphicsBackend { + Auto, Vulkan, OpenGl, + Metal } } diff --git a/src/Ryujinx.Graphics.GAL/ComputeSize.cs b/src/Ryujinx.Graphics.GAL/ComputeSize.cs new file mode 100644 index 000000000..ce9c2531c --- /dev/null +++ b/src/Ryujinx.Graphics.GAL/ComputeSize.cs @@ -0,0 +1,18 @@ +namespace Ryujinx.Graphics.GAL +{ + public readonly struct ComputeSize + { + public readonly static ComputeSize VtgAsCompute = new ComputeSize(32, 32, 1); + + public readonly int X; + public readonly int Y; + public readonly int Z; + + public ComputeSize(int x, int y, int z) + { + X = x; + Y = y; + Z = z; + } + } +} diff --git a/src/Ryujinx.Graphics.GAL/Format.cs b/src/Ryujinx.Graphics.GAL/Format.cs index 17c42d2d4..b1eb68f72 100644 --- a/src/Ryujinx.Graphics.GAL/Format.cs +++ b/src/Ryujinx.Graphics.GAL/Format.cs @@ -339,6 +339,84 @@ namespace Ryujinx.Graphics.GAL return 1; } + /// + /// Get bytes per element for this format. + /// + /// Texture format + /// Byte size for an element of this format (pixel, vertex attribute, etc) + public static int GetBytesPerElement(this Format format) + { + int scalarSize = format.GetScalarSize(); + + switch (format) + { + case Format.R8G8Unorm: + case Format.R8G8Snorm: + case Format.R8G8Uint: + case Format.R8G8Sint: + case Format.R8G8Uscaled: + case Format.R8G8Sscaled: + case Format.R16G16Float: + case Format.R16G16Unorm: + case Format.R16G16Snorm: + case Format.R16G16Uint: + case Format.R16G16Sint: + case Format.R16G16Uscaled: + case Format.R16G16Sscaled: + case Format.R32G32Float: + case Format.R32G32Uint: + case Format.R32G32Sint: + case Format.R32G32Uscaled: + case Format.R32G32Sscaled: + return 2 * scalarSize; + + case Format.R8G8B8Unorm: + case Format.R8G8B8Snorm: + case Format.R8G8B8Uint: + case Format.R8G8B8Sint: + case Format.R8G8B8Uscaled: + case Format.R8G8B8Sscaled: + case Format.R16G16B16Float: + case Format.R16G16B16Unorm: + case Format.R16G16B16Snorm: + case Format.R16G16B16Uint: + case Format.R16G16B16Sint: + case Format.R16G16B16Uscaled: + case Format.R16G16B16Sscaled: + case Format.R32G32B32Float: + case Format.R32G32B32Uint: + case Format.R32G32B32Sint: + case Format.R32G32B32Uscaled: + case Format.R32G32B32Sscaled: + return 3 * scalarSize; + + case Format.R8G8B8A8Unorm: + case Format.R8G8B8A8Snorm: + case Format.R8G8B8A8Uint: + case Format.R8G8B8A8Sint: + case Format.R8G8B8A8Srgb: + case Format.R8G8B8A8Uscaled: + case Format.R8G8B8A8Sscaled: + case Format.B8G8R8A8Unorm: + case Format.B8G8R8A8Srgb: + case Format.R16G16B16A16Float: + case Format.R16G16B16A16Unorm: + case Format.R16G16B16A16Snorm: + case Format.R16G16B16A16Uint: + case Format.R16G16B16A16Sint: + case Format.R16G16B16A16Uscaled: + case Format.R16G16B16A16Sscaled: + case Format.R32G32B32A32Float: + case Format.R32G32B32A32Uint: + case Format.R32G32B32A32Sint: + case Format.R32G32B32A32Uscaled: + case Format.R32G32B32A32Sscaled: + return 4 * scalarSize; + } + + return scalarSize; + } + /// /// Checks if the texture format is a depth or depth-stencil format. /// diff --git a/src/Ryujinx.Graphics.GAL/ShaderInfo.cs b/src/Ryujinx.Graphics.GAL/ShaderInfo.cs index 2fd3227dc..c7965a03d 100644 --- a/src/Ryujinx.Graphics.GAL/ShaderInfo.cs +++ b/src/Ryujinx.Graphics.GAL/ShaderInfo.cs @@ -4,23 +4,22 @@ namespace Ryujinx.Graphics.GAL { public int FragmentOutputMap { get; } public ResourceLayout ResourceLayout { get; } + public ComputeSize ComputeLocalSize { get; } public ProgramPipelineState? State { get; } public bool FromCache { get; set; } - public ShaderInfo(int fragmentOutputMap, ResourceLayout resourceLayout, ProgramPipelineState state, bool fromCache = false) + public ShaderInfo( + int fragmentOutputMap, + ResourceLayout resourceLayout, + ComputeSize computeLocalSize, + ProgramPipelineState? state, + bool fromCache = false) { FragmentOutputMap = fragmentOutputMap; ResourceLayout = resourceLayout; + ComputeLocalSize = computeLocalSize; State = state; FromCache = fromCache; } - - public ShaderInfo(int fragmentOutputMap, ResourceLayout resourceLayout, bool fromCache = false) - { - FragmentOutputMap = fragmentOutputMap; - ResourceLayout = resourceLayout; - State = null; - FromCache = fromCache; - } } } diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeContext.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeContext.cs index 6de50fb2e..34f2cfcad 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeContext.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeContext.cs @@ -11,8 +11,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw /// class VtgAsComputeContext : IDisposable { - private const int DummyBufferSize = 16; - private readonly GpuContext _context; /// public Action RefreshInputConfig { internal get; set; } + + /** + * The desired hacky workarounds. + */ + public DirtyHacks Hacks { internal get; set; } public HLEConfiguration(VirtualFileSystem virtualFileSystem, LibHacHorizonManager libHacHorizonManager, @@ -218,7 +223,8 @@ namespace Ryujinx.HLE bool multiplayerDisableP2p, string multiplayerLdnPassphrase, string multiplayerLdnServer, - int customVSyncInterval) + int customVSyncInterval, + DirtyHacks dirtyHacks = DirtyHacks.None) { VirtualFileSystem = virtualFileSystem; LibHacHorizonManager = libHacHorizonManager; @@ -250,6 +256,7 @@ namespace Ryujinx.HLE MultiplayerDisableP2p = multiplayerDisableP2p; MultiplayerLdnPassphrase = multiplayerLdnPassphrase; MultiplayerLdnServer = multiplayerLdnServer; + Hacks = dirtyHacks; } } } diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs index 4299a6c74..6b542c16a 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs @@ -1,6 +1,9 @@ using LibHac; using LibHac.Common; using LibHac.Sf; +using Ryujinx.Common; +using Ryujinx.Common.Configuration; +using System.Threading; namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy { @@ -13,6 +16,8 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy _baseStorage = SharedRef.CreateMove(ref baseStorage); } + private const string Xc2TitleId = "0100e95004038000"; + [CommandCmif(0)] // Read(u64 offset, u64 length) -> buffer buffer public ResultCode Read(ServiceCtx context) @@ -33,6 +38,13 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseStorage.Get.Read((long)offset, new OutBuffer(region.Memory.Span), (long)size); + + if (context.Device.DirtyHacks.HasFlag(DirtyHacks.Xc2MenuSoftlockFix) && TitleIDs.CurrentApplication == Xc2TitleId) + { + // Add a load-bearing sleep to avoid XC2 softlock + // https://web.archive.org/web/20240728045136/https://github.com/Ryujinx/Ryujinx/issues/2357 + Thread.Sleep(2); + } return (ResultCode)result.Value; } diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs index 97284f3bb..e4a5a547d 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs @@ -4,6 +4,7 @@ using LibHac.Fs.Fsa; using LibHac.Loader; using LibHac.Ns; using LibHac.Tools.FsSystem; +using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.HLE.Loaders.Executables; @@ -102,7 +103,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions } // Initialize GPU. - Graphics.Gpu.GraphicsConfig.TitleId = programId.ToString("X16"); + TitleIDs.CurrentApplication = programId.ToString("X16"); device.Gpu.HostInitalized.Set(); if (!MemoryBlock.SupportsFlags(MemoryAllocationFlags.ViewCompatible)) diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs index fe8360f04..3e1929204 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs @@ -6,6 +6,7 @@ using LibHac.Ns; using LibHac.Tools.Fs; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; +using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.HLE.Loaders.Executables; using Ryujinx.HLE.Loaders.Processes.Extensions; @@ -204,7 +205,7 @@ namespace Ryujinx.HLE.Loaders.Processes } // Explicitly null TitleId to disable the shader cache. - Graphics.Gpu.GraphicsConfig.TitleId = null; + TitleIDs.CurrentApplication = default; _device.Gpu.HostInitalized.Set(); ProcessResult processResult = ProcessLoaderHelper.LoadNsos(_device, diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index d0afdf173..e0f94274c 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -37,6 +37,8 @@ namespace Ryujinx.HLE public bool IsFrameAvailable => Gpu.Window.IsFrameAvailable; + public DirtyHacks DirtyHacks { get; } + public Switch(HLEConfiguration configuration) { ArgumentNullException.ThrowIfNull(configuration.GpuRenderer); @@ -72,6 +74,7 @@ namespace Ryujinx.HLE System.EnablePtc = Configuration.EnablePtc; System.FsIntegrityCheckLevel = Configuration.FsIntegrityCheckLevel; System.GlobalAccessLogMode = Configuration.FsGlobalAccessLogMode; + DirtyHacks = Configuration.Hacks; UpdateVSyncInterval(); #pragma warning restore IDE0055 } diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs index 027e1052b..f5ce265ee 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs @@ -17,7 +17,7 @@ namespace Ryujinx.UI.Common.Configuration /// /// The current version of the file format /// - public const int CurrentVersion = 57; + public const int CurrentVersion = 58; /// /// Version of the configuration file format @@ -429,7 +429,17 @@ namespace Ryujinx.UI.Common.Configuration /// Uses Hypervisor over JIT if available /// public bool UseHypervisor { get; set; } - + + /** + * Show toggles for dirty hacks in the UI. + */ + public bool ShowDirtyHacks { get; set; } + + /** + * The packed value of the enabled dirty hacks. + */ + public int EnabledDirtyHacks { get; set; } + /// /// Loads a configuration file from disk /// diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs index a41ea2cd7..8652b4331 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs @@ -735,6 +735,9 @@ namespace Ryujinx.UI.Common.Configuration Multiplayer.DisableP2p.Value = configurationFileFormat.MultiplayerDisableP2p; Multiplayer.LdnPassphrase.Value = configurationFileFormat.MultiplayerLdnPassphrase; Multiplayer.LdnServer.Value = configurationFileFormat.LdnServer; + + Hacks.ShowDirtyHacks.Value = configurationFileFormat.ShowDirtyHacks; + Hacks.Xc2MenuSoftlockFix.Value = ((DirtyHacks)configurationFileFormat.EnabledDirtyHacks).HasFlag(DirtyHacks.Xc2MenuSoftlockFix); if (configurationFileUpdated) { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs index f28ce0348..c07ff3d71 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs @@ -1,4 +1,5 @@ using ARMeilleure; +using Gommon; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; @@ -617,6 +618,49 @@ namespace Ryujinx.UI.Common.Configuration } } + public class HacksSection + { + /// + /// Show toggles for dirty hacks in the UI. + /// + public ReactiveObject ShowDirtyHacks { get; private set; } + + public ReactiveObject Xc2MenuSoftlockFix { get; private set; } + + public HacksSection() + { + ShowDirtyHacks = new ReactiveObject(); + Xc2MenuSoftlockFix = new ReactiveObject(); + Xc2MenuSoftlockFix.Event += HackChanged; + } + + private void HackChanged(object sender, ReactiveEventArgs rxe) + { + Ryujinx.Common.Logging.Logger.Info?.Print(LogClass.Configuration, $"EnabledDirtyHacks set to: {EnabledHacks}", "LogValueChange"); + } + + public DirtyHacks EnabledHacks + { + get + { + DirtyHacks dirtyHacks = DirtyHacks.None; + + if (Xc2MenuSoftlockFix) + Apply(DirtyHacks.Xc2MenuSoftlockFix); + + return dirtyHacks; + + void Apply(DirtyHacks hack) + { + if (dirtyHacks is not DirtyHacks.None) + dirtyHacks |= hack; + else + dirtyHacks = hack; + } + } + } + } + /// /// The default configuration instance /// @@ -651,6 +695,11 @@ namespace Ryujinx.UI.Common.Configuration /// The Multiplayer section /// public MultiplayerSection Multiplayer { get; private set; } + + /** + * The Dirty Hacks section + */ + public HacksSection Hacks { get; private set; } /// /// Enables or disables Discord Rich Presence @@ -700,6 +749,7 @@ namespace Ryujinx.UI.Common.Configuration Graphics = new GraphicsSection(); Hid = new HidSection(); Multiplayer = new MultiplayerSection(); + Hacks = new HacksSection(); EnableDiscordIntegration = new ReactiveObject(); CheckUpdatesOnStart = new ReactiveObject(); ShowConfirmExit = new ReactiveObject(); diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs index 90bdc3409..8ae76ecc5 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs @@ -138,6 +138,8 @@ namespace Ryujinx.UI.Common.Configuration MultiplayerDisableP2p = Multiplayer.DisableP2p, MultiplayerLdnPassphrase = Multiplayer.LdnPassphrase, LdnServer = Multiplayer.LdnServer, + ShowDirtyHacks = Hacks.ShowDirtyHacks, + EnabledDirtyHacks = (int)Hacks.EnabledHacks, }; return configurationFile; diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 909eb05d5..0f8b8030c 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -311,6 +311,7 @@ namespace Ryujinx.Ava Device.VSyncMode = e.NewValue; Device.UpdateVSyncInterval(); } + _renderer.Window?.ChangeVSyncMode(e.NewValue); _viewModel.ShowCustomVSyncIntervalPicker = (e.NewValue == VSyncMode.Custom); @@ -923,7 +924,7 @@ namespace Ryujinx.Ava // Initialize Configuration. var memoryConfiguration = ConfigurationState.Instance.System.DramSize.Value; - Device = new HLE.Switch(new HLEConfiguration( + Device = new Switch(new HLEConfiguration( VirtualFileSystem, _viewModel.LibHacHorizonManager, ContentManager, @@ -953,7 +954,8 @@ namespace Ryujinx.Ava ConfigurationState.Instance.Multiplayer.DisableP2p, ConfigurationState.Instance.Multiplayer.LdnPassphrase, ConfigurationState.Instance.Multiplayer.LdnServer, - ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value)); + ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value, + ConfigurationState.Instance.Hacks.ShowDirtyHacks ? ConfigurationState.Instance.Hacks.EnabledHacks : DirtyHacks.None)); } private static IHardwareDeviceDriver InitializeAudio() diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index d98e499c2..5e5adf2a0 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -139,4 +139,10 @@ + + + SettingsHacksView.axaml + Code + + \ No newline at end of file diff --git a/src/Ryujinx/UI/ViewModels/BaseModel.cs b/src/Ryujinx/UI/ViewModels/BaseModel.cs index d8f2e9096..e27c52867 100644 --- a/src/Ryujinx/UI/ViewModels/BaseModel.cs +++ b/src/Ryujinx/UI/ViewModels/BaseModel.cs @@ -13,8 +13,9 @@ namespace Ryujinx.Ava.UI.ViewModels PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } - protected void OnPropertiesChanged(params ReadOnlySpan propertyNames) + protected void OnPropertiesChanged(string firstPropertyName, params ReadOnlySpan propertyNames) { + OnPropertyChanged(firstPropertyName); foreach (var propertyName in propertyNames) { OnPropertyChanged(propertyName); diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 9feaaba9b..aa4b994ef 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -62,7 +62,9 @@ namespace Ryujinx.Ava.UI.ViewModels private int _networkInterfaceIndex; private int _multiplayerModeIndex; private string _ldnPassphrase; - private string _LdnServer; + private string _ldnServer; + + private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; public int ResolutionScale { @@ -162,9 +164,7 @@ namespace Ryujinx.Ava.UI.ViewModels get => _vSyncMode; set { - if (value == VSyncMode.Custom || - value == VSyncMode.Switch || - value == VSyncMode.Unbounded) + if (value is VSyncMode.Custom or VSyncMode.Switch or VSyncMode.Unbounded) { _vSyncMode = value; OnPropertyChanged(); @@ -258,6 +258,8 @@ namespace Ryujinx.Ava.UI.ViewModels public bool UseHypervisor { get; set; } public bool DisableP2P { get; set; } + public bool ShowDirtyHacks => ConfigurationState.Instance.Hacks.ShowDirtyHacks; + public string TimeZone { get; set; } public string ShaderDumpPath { get; set; } @@ -274,6 +276,17 @@ namespace Ryujinx.Ava.UI.ViewModels } } + public bool Xc2MenuSoftlockFixEnabled + { + get => _xc2MenuSoftlockFix; + set + { + _xc2MenuSoftlockFix = value; + + OnPropertyChanged(); + } + } + public int Language { get; set; } public int Region { get; set; } public int FsGlobalAccessLogMode { get; set; } @@ -374,10 +387,10 @@ namespace Ryujinx.Ava.UI.ViewModels public string LdnServer { - get => _LdnServer; + get => _ldnServer; set { - _LdnServer = value; + _ldnServer = value; OnPropertyChanged(); } } @@ -746,6 +759,9 @@ namespace Ryujinx.Ava.UI.ViewModels config.Multiplayer.DisableP2p.Value = DisableP2P; config.Multiplayer.LdnPassphrase.Value = LdnPassphrase; config.Multiplayer.LdnServer.Value = LdnServer; + + // Dirty Hacks + config.Hacks.Xc2MenuSoftlockFix.Value = Xc2MenuSoftlockFixEnabled; config.ToFileFormat().SaveConfig(Program.ConfigurationPath); @@ -779,5 +795,8 @@ namespace Ryujinx.Ava.UI.ViewModels RevertIfNotSaved(); CloseWindow?.Invoke(); } + + public static string Xc2MenuFixTooltip => + "From the issue on GitHub:\n\nWhen clicking very fast from game main menu to 2nd submenu, there is a low chance that the game will softlock, the submenu won't show up, while background music is still there."; } } diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml new file mode 100644 index 000000000..b7817f064 --- /dev/null +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs new file mode 100644 index 000000000..f9e0958ca --- /dev/null +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs @@ -0,0 +1,17 @@ +using Avalonia.Controls; +using Avalonia.Interactivity; +using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.UI.Common.Configuration; + +namespace Ryujinx.Ava.UI.Views.Settings +{ + public partial class SettingsHacksView : UserControl + { + public SettingsViewModel ViewModel; + + public SettingsHacksView() + { + InitializeComponent(); + } + } +} diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml b/src/Ryujinx/UI/Windows/SettingsWindow.axaml index 2bf5b55e7..59302b6fc 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml +++ b/src/Ryujinx/UI/Windows/SettingsWindow.axaml @@ -37,6 +37,7 @@ + + \ No newline at end of file diff --git a/src/Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg b/src/Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg deleted file mode 100644 index c073c9c0c..000000000 --- a/src/Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/Ryujinx.UI.Common/Resources/Controller_JoyConRight.svg b/src/Ryujinx.UI.Common/Resources/Controller_JoyConRight.svg deleted file mode 100644 index f4f125148..000000000 --- a/src/Ryujinx.UI.Common/Resources/Controller_JoyConRight.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/Ryujinx.UI.Common/Resources/Controller_ProCon.svg b/src/Ryujinx.UI.Common/Resources/Controller_ProCon.svg deleted file mode 100644 index f5380f3ad..000000000 --- a/src/Ryujinx.UI.Common/Resources/Controller_ProCon.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A - - - - X - - - - Y - - - - B - - - - - - - - - - ZL - - - - - ZR - - - - R - - - - - L - - - diff --git a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj index 1ee9a4aa0..9a487b55a 100644 --- a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj +++ b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj @@ -21,25 +21,6 @@ - - - - - - - - - - - - - - - - - - - @@ -61,4 +42,8 @@ + + + + diff --git a/src/Ryujinx.UI.Common/Resources/Icon_Blank.png b/src/Ryujinx/Assets/UIImages/Icon_Blank.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_Blank.png rename to src/Ryujinx/Assets/UIImages/Icon_Blank.png diff --git a/src/Ryujinx.UI.Common/Resources/Icon_NCA.png b/src/Ryujinx/Assets/UIImages/Icon_NCA.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_NCA.png rename to src/Ryujinx/Assets/UIImages/Icon_NCA.png diff --git a/src/Ryujinx.UI.Common/Resources/Icon_NRO.png b/src/Ryujinx/Assets/UIImages/Icon_NRO.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_NRO.png rename to src/Ryujinx/Assets/UIImages/Icon_NRO.png diff --git a/src/Ryujinx.UI.Common/Resources/Icon_NSO.png b/src/Ryujinx/Assets/UIImages/Icon_NSO.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_NSO.png rename to src/Ryujinx/Assets/UIImages/Icon_NSO.png diff --git a/src/Ryujinx.UI.Common/Resources/Icon_NSP.png b/src/Ryujinx/Assets/UIImages/Icon_NSP.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_NSP.png rename to src/Ryujinx/Assets/UIImages/Icon_NSP.png diff --git a/src/Ryujinx.UI.Common/Resources/Icon_XCI.png b/src/Ryujinx/Assets/UIImages/Icon_XCI.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_XCI.png rename to src/Ryujinx/Assets/UIImages/Icon_XCI.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Amiibo.png b/src/Ryujinx/Assets/UIImages/Logo_Amiibo.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_Amiibo.png rename to src/Ryujinx/Assets/UIImages/Logo_Amiibo.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Discord_Dark.png b/src/Ryujinx/Assets/UIImages/Logo_Discord_Dark.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_Discord_Dark.png rename to src/Ryujinx/Assets/UIImages/Logo_Discord_Dark.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Discord_Light.png b/src/Ryujinx/Assets/UIImages/Logo_Discord_Light.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_Discord_Light.png rename to src/Ryujinx/Assets/UIImages/Logo_Discord_Light.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_GitHub_Dark.png b/src/Ryujinx/Assets/UIImages/Logo_GitHub_Dark.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_GitHub_Dark.png rename to src/Ryujinx/Assets/UIImages/Logo_GitHub_Dark.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_GitHub_Light.png b/src/Ryujinx/Assets/UIImages/Logo_GitHub_Light.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_GitHub_Light.png rename to src/Ryujinx/Assets/UIImages/Logo_GitHub_Light.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Ryujinx.png b/src/Ryujinx/Assets/UIImages/Logo_Ryujinx.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_Ryujinx.png rename to src/Ryujinx/Assets/UIImages/Logo_Ryujinx.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Ryujinx_AntiAlias.png b/src/Ryujinx/Assets/UIImages/Logo_Ryujinx_AntiAlias.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_Ryujinx_AntiAlias.png rename to src/Ryujinx/Assets/UIImages/Logo_Ryujinx_AntiAlias.png diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs similarity index 99% rename from src/Ryujinx.UI.Common/DiscordIntegrationModule.cs rename to src/Ryujinx/DiscordIntegrationModule.cs index efeeb2586..92c8e2aa6 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -8,7 +8,7 @@ using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Configuration; using System.Text; -namespace Ryujinx.UI.Common +namespace Ryujinx.Ava { public static class DiscordIntegrationModule { diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 5e5adf2a0..998257dff 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -134,15 +134,21 @@ + + + + + + + + + + + + - - - SettingsHacksView.axaml - Code - - \ No newline at end of file diff --git a/src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml b/src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml index c7aa56fb8..22c2851e1 100644 --- a/src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml +++ b/src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml @@ -25,7 +25,7 @@ Height="80" MinWidth="50" Margin="5,10,20,10" - Source="resm:Ryujinx.UI.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.UI.Common" /> + Source="resm:Ryujinx.Assets.UIImages.Logo_Ryujinx.png?assembly=Ryujinx" /> + Source="resm:Ryujinx.Assets.UIImages.Logo_Ryujinx.png?assembly=Ryujinx" /> + Source="resm:Ryujinx.Assets.UIImages.Logo_Ryujinx.png?assembly=Ryujinx" /> new(Avalonia.Platform.AssetLoader.Open(new Uri(uri))); diff --git a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs index ab08ce385..468a7c269 100644 --- a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs @@ -68,7 +68,7 @@ namespace Ryujinx.Ava.UI.ViewModels _amiiboSeries = new ObservableCollection(); _amiibos = new AvaloniaList(); - _amiiboLogoBytes = EmbeddedResources.Read("Ryujinx.UI.Common/Resources/Logo_Amiibo.png"); + _amiiboLogoBytes = EmbeddedResources.Read("Ryujinx/Assets/UIImages/Logo_Amiibo.png"); _ = LoadContentAsync(); } diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 493e6659d..79daab701 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -35,10 +35,10 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public class InputViewModel : BaseModel, IDisposable { private const string Disabled = "disabled"; - private const string ProControllerResource = "Ryujinx.UI.Common/Resources/Controller_ProCon.svg"; - private const string JoyConPairResource = "Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg"; - private const string JoyConLeftResource = "Ryujinx.UI.Common/Resources/Controller_JoyConLeft.svg"; - private const string JoyConRightResource = "Ryujinx.UI.Common/Resources/Controller_JoyConRight.svg"; + private const string ProControllerResource = "Ryujinx/Assets/Icons/Controller_ProCon.svg"; + private const string JoyConPairResource = "Ryujinx/Assets/Icons/Controller_JoyConPair.svg"; + private const string JoyConLeftResource = "Ryujinx/Assets/Icons/Controller_JoyConLeft.svg"; + private const string JoyConRightResource = "Ryujinx/Assets/Icons/Controller_JoyConRight.svg"; private const string KeyboardString = "keyboard"; private const string ControllerString = "controller"; private readonly MainWindow _mainWindow; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 6e014fedc..c5f9f57ec 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -134,7 +134,7 @@ namespace Ryujinx.Ava.UI.ViewModels // For an example of this, download canary 1.2.95, then open the settings menu, and look at the icon in the top-left. // The border gets reduced to colored pixels in the 4 corners. public static readonly Bitmap IconBitmap = - new(Assembly.GetAssembly(typeof(ConfigurationState))!.GetManifestResourceStream("Ryujinx.UI.Common.Resources.Logo_Ryujinx_AntiAlias.png")!); + new(Assembly.GetAssembly(typeof(MainWindowViewModel))!.GetManifestResourceStream("Ryujinx.Assets.UIImages.Logo_Ryujinx_AntiAlias.png")!); public MainWindow Window { get; init; } diff --git a/src/Ryujinx/UI/Windows/AboutWindow.axaml b/src/Ryujinx/UI/Windows/AboutWindow.axaml index c5abb0241..1b00ad23c 100644 --- a/src/Ryujinx/UI/Windows/AboutWindow.axaml +++ b/src/Ryujinx/UI/Windows/AboutWindow.axaml @@ -38,7 +38,7 @@ Date: Sun, 29 Dec 2024 19:09:28 -0600 Subject: [PATCH 220/722] misc: move Models & Helpers into Common & Avalonia projects --- .../Helpers}/CommandLineState.cs | 0 .../Helpers}/ConsoleHelper.cs | 0 .../Helpers}/FileAssociationHelper.cs | 0 .../Helpers}/LinuxHelper.cs | 0 .../Helpers}/ObjectiveC.cs | 0 .../Helpers}/OpenHelper.cs | 0 .../Helpers}/ValueFormatUtils.cs | 0 .../Helper/AppletMetadata.cs | 64 ------------------- .../Ryujinx.UI.Common.csproj | 4 -- src/Ryujinx/AppHost.cs | 3 +- .../Common}/Models/Amiibo/AmiiboApi.cs | 2 +- .../Models/Amiibo/AmiiboApiGamesSwitch.cs | 2 +- .../Common}/Models/Amiibo/AmiiboApiUsage.cs | 2 +- .../Common}/Models/Amiibo/AmiiboJson.cs | 2 +- .../Amiibo/AmiiboJsonSerializerContext.cs | 6 +- .../Models/DownloadableContentModel.cs | 2 +- .../Github/GithubReleaseAssetJsonResponse.cs | 2 +- .../Github/GithubReleasesJsonResponse.cs | 2 +- .../GithubReleasesJsonSerializerContext.cs | 6 +- .../Common}/Models/TitleUpdateModel.cs | 2 +- .../Common}/Models/XCITrimmerFileModel.cs | 4 +- src/Ryujinx/DiscordIntegrationModule.cs | 2 +- src/Ryujinx/Program.cs | 2 +- .../Controls/ApplicationContextMenu.axaml.cs | 3 +- .../UI/Controls/ApplicationGridView.axaml.cs | 2 +- .../UI/Controls/ApplicationListView.axaml.cs | 2 +- .../UI/Helpers/ApplicationOpenedEventArgs.cs | 2 +- .../UI/Helpers/MultiplayerInfoConverter.cs | 2 +- .../XCITrimmerFileSpaceSavingsConverter.cs | 2 +- .../Helpers/XCITrimmerFileStatusConverter.cs | 2 +- .../XCITrimmerFileStatusDetailConverter.cs | 2 +- .../Models/Generic/LastPlayedSortComparer.cs | 2 +- .../Models/Generic/TimePlayedSortComparer.cs | 2 +- src/Ryujinx/UI/Models/SaveModel.cs | 2 +- .../UI/ViewModels/AmiiboWindowViewModel.cs | 2 +- .../ViewModels/AppListFavoriteComparable.cs | 2 +- .../DownloadableContentManagerViewModel.cs | 4 +- .../UI/ViewModels/MainWindowViewModel.cs | 2 +- .../UI/ViewModels/TitleUpdateViewModel.cs | 4 +- .../UI/ViewModels/XCITrimmerViewModel.cs | 14 +++- .../UI/Views/Main/MainMenuBarView.axaml.cs | 1 + src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 2 +- .../DownloadableContentManagerWindow.axaml | 2 +- .../DownloadableContentManagerWindow.axaml.cs | 4 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 2 +- .../UI/Windows/TitleUpdateWindow.axaml | 2 +- .../UI/Windows/TitleUpdateWindow.axaml.cs | 4 +- src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml | 5 +- .../UI/Windows/XCITrimmerWindow.axaml.cs | 2 +- src/Ryujinx/Updater.cs | 2 +- .../ApplicationCountUpdatedEventArgs.cs | 2 +- .../Utilities/AppLibrary}/ApplicationData.cs | 2 +- .../ApplicationJsonSerializerContext.cs | 2 +- .../AppLibrary}/ApplicationLibrary.cs | 6 +- .../AppLibrary}/ApplicationMetadata.cs | 2 +- .../Utilities/AppLibrary}/LdnGameData.cs | 2 +- .../LdnGameDataReceivedEventArgs.cs | 2 +- .../LdnGameDataSerializerContext.cs | 7 +- src/Ryujinx/Utilities/AppletMetadata.cs | 60 +++++++++++++++++ .../Utilities}/DownloadableContentsHelper.cs | 4 +- .../Utilities}/SetupValidator.cs | 2 +- .../Utilities}/ShortcutHelper.cs | 3 +- .../Utilities}/TitleHelper.cs | 3 +- .../Utilities}/TitleUpdatesHelper.cs | 4 +- 65 files changed, 141 insertions(+), 146 deletions(-) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/CommandLineState.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/ConsoleHelper.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/FileAssociationHelper.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/LinuxHelper.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/ObjectiveC.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/OpenHelper.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/ValueFormatUtils.cs (100%) delete mode 100644 src/Ryujinx.UI.Common/Helper/AppletMetadata.cs rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Amiibo/AmiiboApi.cs (97%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Amiibo/AmiiboApiGamesSwitch.cs (90%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Amiibo/AmiiboApiUsage.cs (84%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Amiibo/AmiiboJson.cs (87%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Amiibo/AmiiboJsonSerializerContext.cs (69%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/DownloadableContentModel.cs (93%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Github/GithubReleaseAssetJsonResponse.cs (82%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Github/GithubReleasesJsonResponse.cs (85%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Github/GithubReleasesJsonSerializerContext.cs (74%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/TitleUpdateModel.cs (91%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/XCITrimmerFileModel.cs (95%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/ApplicationCountUpdatedEventArgs.cs (81%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/ApplicationData.cs (99%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/ApplicationJsonSerializerContext.cs (85%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/ApplicationLibrary.cs (99%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/ApplicationMetadata.cs (97%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/LdnGameData.cs (96%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/LdnGameDataReceivedEventArgs.cs (81%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/LdnGameDataSerializerContext.cs (76%) create mode 100644 src/Ryujinx/Utilities/AppletMetadata.cs rename src/{Ryujinx.UI.Common/Helper => Ryujinx/Utilities}/DownloadableContentsHelper.cs (98%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx/Utilities}/SetupValidator.cs (99%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx/Utilities}/ShortcutHelper.cs (99%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx/Utilities}/TitleHelper.cs (95%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx/Utilities}/TitleUpdatesHelper.cs (98%) diff --git a/src/Ryujinx.UI.Common/Helper/CommandLineState.cs b/src/Ryujinx.Common/Helpers/CommandLineState.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/CommandLineState.cs rename to src/Ryujinx.Common/Helpers/CommandLineState.cs diff --git a/src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs b/src/Ryujinx.Common/Helpers/ConsoleHelper.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs rename to src/Ryujinx.Common/Helpers/ConsoleHelper.cs diff --git a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs b/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs rename to src/Ryujinx.Common/Helpers/FileAssociationHelper.cs diff --git a/src/Ryujinx.UI.Common/Helper/LinuxHelper.cs b/src/Ryujinx.Common/Helpers/LinuxHelper.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/LinuxHelper.cs rename to src/Ryujinx.Common/Helpers/LinuxHelper.cs diff --git a/src/Ryujinx.UI.Common/Helper/ObjectiveC.cs b/src/Ryujinx.Common/Helpers/ObjectiveC.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/ObjectiveC.cs rename to src/Ryujinx.Common/Helpers/ObjectiveC.cs diff --git a/src/Ryujinx.UI.Common/Helper/OpenHelper.cs b/src/Ryujinx.Common/Helpers/OpenHelper.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/OpenHelper.cs rename to src/Ryujinx.Common/Helpers/OpenHelper.cs diff --git a/src/Ryujinx.UI.Common/Helper/ValueFormatUtils.cs b/src/Ryujinx.Common/Helpers/ValueFormatUtils.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/ValueFormatUtils.cs rename to src/Ryujinx.Common/Helpers/ValueFormatUtils.cs diff --git a/src/Ryujinx.UI.Common/Helper/AppletMetadata.cs b/src/Ryujinx.UI.Common/Helper/AppletMetadata.cs deleted file mode 100644 index 644b7fe74..000000000 --- a/src/Ryujinx.UI.Common/Helper/AppletMetadata.cs +++ /dev/null @@ -1,64 +0,0 @@ -using LibHac.Common; -using LibHac.Ncm; -using LibHac.Ns; -using LibHac.Tools.FsSystem.NcaUtils; -using Ryujinx.HLE; -using Ryujinx.HLE.FileSystem; -using Ryujinx.UI.App.Common; - -namespace Ryujinx.UI.Common.Helper -{ - public readonly struct AppletMetadata - { - private readonly ContentManager _contentManager; - - public string Name { get; } - public ulong ProgramId { get; } - - public string Version { get; } - - public AppletMetadata(ContentManager contentManager, string name, ulong programId, string version = "1.0.0") - : this(name, programId, version) - { - _contentManager = contentManager; - } - - public AppletMetadata(string name, ulong programId, string version = "1.0.0") - { - Name = name; - ProgramId = programId; - Version = version; - } - - public string GetContentPath(ContentManager contentManager) - => (contentManager ?? _contentManager) - .GetInstalledContentPath(ProgramId, StorageId.BuiltInSystem, NcaContentType.Program); - - public bool CanStart(ContentManager contentManager, out ApplicationData appData, out BlitStruct appControl) - { - contentManager ??= _contentManager; - if (contentManager == null) - { - appData = null; - appControl = new BlitStruct(0); - return false; - } - - appData = new() - { - Name = Name, - Id = ProgramId, - Path = GetContentPath(contentManager) - }; - - if (string.IsNullOrEmpty(appData.Path)) - { - appControl = new BlitStruct(0); - return false; - } - - appControl = StructHelpers.CreateCustomNacpData(Name, Version); - return true; - } - } -} diff --git a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj index 9a487b55a..0a28fddf3 100644 --- a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj +++ b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj @@ -42,8 +42,4 @@ - - - - diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 03860da43..f3fcbf5aa 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -20,6 +20,8 @@ using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.Renderer; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; @@ -40,7 +42,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.Input; using Ryujinx.Input.HLE; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; diff --git a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApi.cs b/src/Ryujinx/Common/Models/Amiibo/AmiiboApi.cs similarity index 97% rename from src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApi.cs rename to src/Ryujinx/Common/Models/Amiibo/AmiiboApi.cs index 7989f0f1a..826e98d4f 100644 --- a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApi.cs +++ b/src/Ryujinx/Common/Models/Amiibo/AmiiboApi.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Amiibo +namespace Ryujinx.Ava.Common.Models.Amiibo { public struct AmiiboApi : IEquatable { diff --git a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiGamesSwitch.cs b/src/Ryujinx/Common/Models/Amiibo/AmiiboApiGamesSwitch.cs similarity index 90% rename from src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiGamesSwitch.cs rename to src/Ryujinx/Common/Models/Amiibo/AmiiboApiGamesSwitch.cs index 40e635bf0..7d43506e4 100644 --- a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiGamesSwitch.cs +++ b/src/Ryujinx/Common/Models/Amiibo/AmiiboApiGamesSwitch.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Amiibo +namespace Ryujinx.Ava.Common.Models.Amiibo { public class AmiiboApiGamesSwitch { diff --git a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiUsage.cs b/src/Ryujinx/Common/Models/Amiibo/AmiiboApiUsage.cs similarity index 84% rename from src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiUsage.cs rename to src/Ryujinx/Common/Models/Amiibo/AmiiboApiUsage.cs index 4f8d292b1..911323182 100644 --- a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiUsage.cs +++ b/src/Ryujinx/Common/Models/Amiibo/AmiiboApiUsage.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Amiibo +namespace Ryujinx.Ava.Common.Models.Amiibo { public class AmiiboApiUsage { diff --git a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJson.cs b/src/Ryujinx/Common/Models/Amiibo/AmiiboJson.cs similarity index 87% rename from src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJson.cs rename to src/Ryujinx/Common/Models/Amiibo/AmiiboJson.cs index 15083f505..39ca94bb6 100644 --- a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJson.cs +++ b/src/Ryujinx/Common/Models/Amiibo/AmiiboJson.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Amiibo +namespace Ryujinx.Ava.Common.Models.Amiibo { public struct AmiiboJson { diff --git a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJsonSerializerContext.cs b/src/Ryujinx/Common/Models/Amiibo/AmiiboJsonSerializerContext.cs similarity index 69% rename from src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJsonSerializerContext.cs rename to src/Ryujinx/Common/Models/Amiibo/AmiiboJsonSerializerContext.cs index bc3f1303c..e0fe11bc5 100644 --- a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJsonSerializerContext.cs +++ b/src/Ryujinx/Common/Models/Amiibo/AmiiboJsonSerializerContext.cs @@ -1,9 +1,7 @@ using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Amiibo +namespace Ryujinx.Ava.Common.Models.Amiibo { [JsonSerializable(typeof(AmiiboJson))] - public partial class AmiiboJsonSerializerContext : JsonSerializerContext - { - } + public partial class AmiiboJsonSerializerContext : JsonSerializerContext; } diff --git a/src/Ryujinx.UI.Common/Models/DownloadableContentModel.cs b/src/Ryujinx/Common/Models/DownloadableContentModel.cs similarity index 93% rename from src/Ryujinx.UI.Common/Models/DownloadableContentModel.cs rename to src/Ryujinx/Common/Models/DownloadableContentModel.cs index 95c64f078..ad9934bd2 100644 --- a/src/Ryujinx.UI.Common/Models/DownloadableContentModel.cs +++ b/src/Ryujinx/Common/Models/DownloadableContentModel.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Models +namespace Ryujinx.Ava.Common.Models { // NOTE: most consuming code relies on this model being value-comparable public record DownloadableContentModel(ulong TitleId, string ContainerPath, string FullPath) diff --git a/src/Ryujinx.UI.Common/Models/Github/GithubReleaseAssetJsonResponse.cs b/src/Ryujinx/Common/Models/Github/GithubReleaseAssetJsonResponse.cs similarity index 82% rename from src/Ryujinx.UI.Common/Models/Github/GithubReleaseAssetJsonResponse.cs rename to src/Ryujinx/Common/Models/Github/GithubReleaseAssetJsonResponse.cs index 8f528dc0b..633e16596 100644 --- a/src/Ryujinx.UI.Common/Models/Github/GithubReleaseAssetJsonResponse.cs +++ b/src/Ryujinx/Common/Models/Github/GithubReleaseAssetJsonResponse.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Models.Github +namespace Ryujinx.Ava.Common.Models.Github { public class GithubReleaseAssetJsonResponse { diff --git a/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs b/src/Ryujinx/Common/Models/Github/GithubReleasesJsonResponse.cs similarity index 85% rename from src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs rename to src/Ryujinx/Common/Models/Github/GithubReleasesJsonResponse.cs index 7bec1bcdc..dee912e1c 100644 --- a/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs +++ b/src/Ryujinx/Common/Models/Github/GithubReleasesJsonResponse.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace Ryujinx.UI.Common.Models.Github +namespace Ryujinx.Ava.Common.Models.Github { public class GithubReleasesJsonResponse { diff --git a/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonSerializerContext.cs b/src/Ryujinx/Common/Models/Github/GithubReleasesJsonSerializerContext.cs similarity index 74% rename from src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonSerializerContext.cs rename to src/Ryujinx/Common/Models/Github/GithubReleasesJsonSerializerContext.cs index 71864257c..a450ab22d 100644 --- a/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonSerializerContext.cs +++ b/src/Ryujinx/Common/Models/Github/GithubReleasesJsonSerializerContext.cs @@ -1,9 +1,7 @@ using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Github +namespace Ryujinx.Ava.Common.Models.Github { [JsonSerializable(typeof(GithubReleasesJsonResponse), GenerationMode = JsonSourceGenerationMode.Metadata)] - public partial class GithubReleasesJsonSerializerContext : JsonSerializerContext - { - } + public partial class GithubReleasesJsonSerializerContext : JsonSerializerContext; } diff --git a/src/Ryujinx.UI.Common/Models/TitleUpdateModel.cs b/src/Ryujinx/Common/Models/TitleUpdateModel.cs similarity index 91% rename from src/Ryujinx.UI.Common/Models/TitleUpdateModel.cs rename to src/Ryujinx/Common/Models/TitleUpdateModel.cs index 5422e1303..fedecddbe 100644 --- a/src/Ryujinx.UI.Common/Models/TitleUpdateModel.cs +++ b/src/Ryujinx/Common/Models/TitleUpdateModel.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Models +namespace Ryujinx.Ava.Common.Models { // NOTE: most consuming code relies on this model being value-comparable public record TitleUpdateModel(ulong TitleId, ulong Version, string DisplayVersion, string Path) diff --git a/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs b/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs similarity index 95% rename from src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs rename to src/Ryujinx/Common/Models/XCITrimmerFileModel.cs index 95fb3985b..526bf230c 100644 --- a/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs +++ b/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs @@ -1,8 +1,8 @@ +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; -using Ryujinx.UI.App.Common; -namespace Ryujinx.UI.Common.Models +namespace Ryujinx.Ava.Common.Models { public record XCITrimmerFileModel( string Name, diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs index 92c8e2aa6..f13b34ec8 100644 --- a/src/Ryujinx/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -1,10 +1,10 @@ using DiscordRPC; using Humanizer; using Humanizer.Localisation; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common; using Ryujinx.HLE; using Ryujinx.HLE.Loaders.Processes; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Configuration; using System.Text; diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 98bbfa2bb..76ed0b076 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -8,6 +8,7 @@ using Projektanker.Icons.Avalonia.MaterialDesign; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Ava.Utilities.SystemInfo; using Ryujinx.Common; using Ryujinx.Common.Configuration; @@ -17,7 +18,6 @@ using Ryujinx.Common.SystemInterop; using Ryujinx.Graphics.Vulkan.MoltenVK; using Ryujinx.Headless; using Ryujinx.SDL2.Common; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index 74fb41efa..4f998b040 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -10,9 +10,10 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common.Configuration; using Ryujinx.HLE.HOS; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Helper; using SkiaSharp; using System; diff --git a/src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs index 25a34b423..ee0a324eb 100644 --- a/src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs @@ -3,7 +3,7 @@ using Avalonia.Input; using Avalonia.Interactivity; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using System; namespace Ryujinx.Ava.UI.Controls diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs index 5b0730d5a..a7654785f 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs @@ -5,7 +5,7 @@ using Avalonia.Interactivity; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using System; using System.Linq; diff --git a/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs b/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs index bc5622b54..0ceaa6c4c 100644 --- a/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs +++ b/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs @@ -1,5 +1,5 @@ using Avalonia.Interactivity; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; namespace Ryujinx.Ava.UI.Helpers { diff --git a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs index 8bd8b5f0d..4135fd4c7 100644 --- a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs +++ b/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs @@ -1,7 +1,7 @@ using Avalonia.Data.Converters; using Avalonia.Markup.Xaml; using Ryujinx.Ava.Common.Locale; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.UI.Common.Helper; using System; using System.Globalization; diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs b/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs index 14e8e178a..ab6199c3f 100644 --- a/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs +++ b/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs @@ -3,7 +3,7 @@ using Avalonia.Data; using Avalonia.Data.Converters; using Gommon; using Ryujinx.Ava.Common.Locale; -using Ryujinx.UI.Common.Models; +using Ryujinx.Ava.Common.Models; using System; using System.Globalization; diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs b/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs index 56a102415..c3fb1fe95 100644 --- a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs +++ b/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs @@ -2,7 +2,7 @@ using Avalonia; using Avalonia.Data; using Avalonia.Data.Converters; using Ryujinx.Ava.Common.Locale; -using Ryujinx.UI.Common.Models; +using Ryujinx.Ava.Common.Models; using System; using System.Globalization; using static Ryujinx.Common.Utilities.XCIFileTrimmer; diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs b/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs index cd4e27f01..e12d4efd9 100644 --- a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs +++ b/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs @@ -1,7 +1,7 @@ using Avalonia; using Avalonia.Data; using Avalonia.Data.Converters; -using Ryujinx.UI.Common.Models; +using Ryujinx.Ava.Common.Models; using System; using System.Globalization; using static Ryujinx.Common.Utilities.XCIFileTrimmer; diff --git a/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs b/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs index 224f78f45..f2d27f2df 100644 --- a/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs +++ b/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs @@ -1,4 +1,4 @@ -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using System; using System.Collections.Generic; diff --git a/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs b/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs index f0fb035d1..d7ae51e96 100644 --- a/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs +++ b/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs @@ -1,4 +1,4 @@ -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using System; using System.Collections.Generic; diff --git a/src/Ryujinx/UI/Models/SaveModel.cs b/src/Ryujinx/UI/Models/SaveModel.cs index 578538d21..8364e1966 100644 --- a/src/Ryujinx/UI/Models/SaveModel.cs +++ b/src/Ryujinx/UI/Models/SaveModel.cs @@ -3,8 +3,8 @@ using LibHac.Fs; using LibHac.Ncm; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Helper; using System; using System.IO; diff --git a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs index 468a7c269..01a5dadd3 100644 --- a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs @@ -3,13 +3,13 @@ using Avalonia.Collections; using Avalonia.Media.Imaging; using Avalonia.Threading; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models.Amiibo; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; -using Ryujinx.UI.Common.Models.Amiibo; using System; using System.Collections.Generic; using System.Collections.ObjectModel; diff --git a/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs b/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs index e80984508..9c37368de 100644 --- a/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs +++ b/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs @@ -1,4 +1,4 @@ -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using System; namespace Ryujinx.Ava.UI.ViewModels diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index 3abaae3ae..4e9660a65 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -5,10 +5,10 @@ using Avalonia.Threading; using DynamicData; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; -using Ryujinx.UI.App.Common; -using Ryujinx.UI.Common.Models; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index c5f9f57ec..3bc100ba3 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -21,6 +21,7 @@ using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.Models.Generic; using Ryujinx.Ava.UI.Renderer; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; @@ -34,7 +35,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; using Ryujinx.HLE.UI; using Ryujinx.Input.HLE; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index dacdc3056..a179218af 100644 --- a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -4,10 +4,10 @@ using Avalonia.Platform.Storage; using Avalonia.Threading; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; -using Ryujinx.UI.App.Common; -using Ryujinx.UI.Common.Models; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs index 402b182af..64965cd96 100644 --- a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs @@ -4,10 +4,10 @@ using Gommon; using Avalonia.Threading; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common.Utilities; -using Ryujinx.UI.App.Common; -using Ryujinx.UI.Common.Models; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -371,6 +371,16 @@ namespace Ryujinx.Ava.UI.ViewModels } } + public XCITrimmerFileModel NullableProcessingApplication + { + get => _processingApplication.OrDefault(); + set + { + _processingApplication = value; + OnPropertyChanged(); + } + } + public bool Processing { get => _cancellationTokenSource != null; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 181773b2e..1f8617ad7 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -7,6 +7,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; using Ryujinx.Common; using Ryujinx.Common.Utilities; using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; diff --git a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs index 9a940c938..8c76b8e2f 100644 --- a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs @@ -1,7 +1,7 @@ using Avalonia.Interactivity; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models.Amiibo; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.Common.Models.Amiibo; namespace Ryujinx.Ava.UI.Windows { diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index 2fc9617fb..f5795d42c 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -2,9 +2,9 @@ using Avalonia.Collections; using LibHac.Tools.FsSystem; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Models; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Configuration; using System.Globalization; using System.IO; diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml index df70f02eb..8efcfcadc 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml +++ b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml @@ -6,9 +6,9 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" - xmlns:models="clr-namespace:Ryujinx.UI.Common.Models;assembly=Ryujinx.UI.Common" xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" + xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models" Width="500" Height="380" mc:Ignorable="d" diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs index 2afa8b529..02f420752 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs @@ -3,10 +3,10 @@ using Avalonia.Interactivity; using Avalonia.Styling; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.UI.Common.Helper; -using Ryujinx.UI.Common.Models; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 0e1e88b9c..f0aaf4cac 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -15,6 +15,7 @@ using Ryujinx.Ava.Input; using Ryujinx.Ava.UI.Applet; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.Common.UI; @@ -24,7 +25,6 @@ using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.Input.HLE; using Ryujinx.Input.SDL2; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml index 6e22cfed7..0ba9bc7d8 100644 --- a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml +++ b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml @@ -6,9 +6,9 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" - xmlns:models="clr-namespace:Ryujinx.UI.Common.Models;assembly=Ryujinx.UI.Common" xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" + xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models" Width="500" Height="300" mc:Ignorable="d" diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs index a13ad4012..421990bcd 100644 --- a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs @@ -3,10 +3,10 @@ using Avalonia.Interactivity; using Avalonia.Styling; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.UI.Common.Helper; -using Ryujinx.UI.Common.Models; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows diff --git a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml index d726f8099..2d56931b5 100644 --- a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml +++ b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml @@ -6,9 +6,8 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" - xmlns:models="clr-namespace:Ryujinx.UI.Common.Models;assembly=Ryujinx.UI.Common" - xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" + xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models" Width="700" Height="600" x:DataType="viewModels:XCITrimmerViewModel" @@ -140,7 +139,7 @@ Padding="2.5"> ))] - internal partial class LdnGameDataSerializerContext : JsonSerializerContext - { - - } + internal partial class LdnGameDataSerializerContext : JsonSerializerContext; } diff --git a/src/Ryujinx/Utilities/AppletMetadata.cs b/src/Ryujinx/Utilities/AppletMetadata.cs new file mode 100644 index 000000000..82baed7d3 --- /dev/null +++ b/src/Ryujinx/Utilities/AppletMetadata.cs @@ -0,0 +1,60 @@ +using LibHac.Common; +using LibHac.Ncm; +using LibHac.Ns; +using LibHac.Tools.FsSystem.NcaUtils; +using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.HLE; +using Ryujinx.HLE.FileSystem; + +namespace Ryujinx.Ava.Utilities +{ + public readonly struct AppletMetadata + { + private readonly ContentManager _contentManager; + + public string Name { get; } + public ulong ProgramId { get; } + + public string Version { get; } + + public AppletMetadata(ContentManager contentManager, string name, ulong programId, string version = "1.0.0") + : this(name, programId, version) + { + _contentManager = contentManager; + } + + public AppletMetadata(string name, ulong programId, string version = "1.0.0") + { + Name = name; + ProgramId = programId; + Version = version; + } + + public string GetContentPath(ContentManager contentManager) + => (contentManager ?? _contentManager) + .GetInstalledContentPath(ProgramId, StorageId.BuiltInSystem, NcaContentType.Program); + + public bool CanStart(ContentManager contentManager, out ApplicationData appData, + out BlitStruct appControl) + { + contentManager ??= _contentManager; + if (contentManager == null) + { + appData = null; + appControl = new BlitStruct(0); + return false; + } + + appData = new() { Name = Name, Id = ProgramId, Path = GetContentPath(contentManager) }; + + if (string.IsNullOrEmpty(appData.Path)) + { + appControl = new BlitStruct(0); + return false; + } + + appControl = StructHelpers.CreateCustomNacpData(Name, Version); + return true; + } + } +} diff --git a/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs b/src/Ryujinx/Utilities/DownloadableContentsHelper.cs similarity index 98% rename from src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs rename to src/Ryujinx/Utilities/DownloadableContentsHelper.cs index 020529b55..b6d2420a3 100644 --- a/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs +++ b/src/Ryujinx/Utilities/DownloadableContentsHelper.cs @@ -3,18 +3,18 @@ using LibHac.Fs; using LibHac.Fs.Fsa; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; +using Ryujinx.Ava.Common.Models; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Utilities; -using Ryujinx.UI.Common.Models; using System; using System.Collections.Generic; using System.IO; using Path = System.IO.Path; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class DownloadableContentsHelper { diff --git a/src/Ryujinx.UI.Common/Helper/SetupValidator.cs b/src/Ryujinx/Utilities/SetupValidator.cs similarity index 99% rename from src/Ryujinx.UI.Common/Helper/SetupValidator.cs rename to src/Ryujinx/Utilities/SetupValidator.cs index ddd9c9e30..0bd3a348d 100644 --- a/src/Ryujinx.UI.Common/Helper/SetupValidator.cs +++ b/src/Ryujinx/Utilities/SetupValidator.cs @@ -4,7 +4,7 @@ using Ryujinx.HLE.FileSystem; using System; using System.IO; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { /// /// Ensure installation validity diff --git a/src/Ryujinx.UI.Common/Helper/ShortcutHelper.cs b/src/Ryujinx/Utilities/ShortcutHelper.cs similarity index 99% rename from src/Ryujinx.UI.Common/Helper/ShortcutHelper.cs rename to src/Ryujinx/Utilities/ShortcutHelper.cs index 8c006a227..a0fb5599a 100644 --- a/src/Ryujinx.UI.Common/Helper/ShortcutHelper.cs +++ b/src/Ryujinx/Utilities/ShortcutHelper.cs @@ -1,5 +1,6 @@ using Ryujinx.Common; using Ryujinx.Common.Configuration; +using Ryujinx.UI.Common.Helper; using ShellLink; using SkiaSharp; using System; @@ -7,7 +8,7 @@ using System.Collections.Generic; using System.IO; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class ShortcutHelper { diff --git a/src/Ryujinx.UI.Common/Helper/TitleHelper.cs b/src/Ryujinx/Utilities/TitleHelper.cs similarity index 95% rename from src/Ryujinx.UI.Common/Helper/TitleHelper.cs rename to src/Ryujinx/Utilities/TitleHelper.cs index 9d73aea75..be7a87f82 100644 --- a/src/Ryujinx.UI.Common/Helper/TitleHelper.cs +++ b/src/Ryujinx/Utilities/TitleHelper.cs @@ -1,7 +1,6 @@ using Ryujinx.HLE.Loaders.Processes; -using System; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class TitleHelper { diff --git a/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs similarity index 98% rename from src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs rename to src/Ryujinx/Utilities/TitleUpdatesHelper.cs index 36de8b31a..8cffb9b25 100644 --- a/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs +++ b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs @@ -6,6 +6,7 @@ using LibHac.Ncm; using LibHac.Ns; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; +using Ryujinx.Ava.Common.Models; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; @@ -13,7 +14,6 @@ using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Loaders.Processes.Extensions; using Ryujinx.HLE.Utilities; using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Models; using System; using System.Collections.Generic; using System.IO; @@ -22,7 +22,7 @@ using Path = System.IO.Path; using SpanHelpers = LibHac.Common.SpanHelpers; using TitleUpdateMetadata = Ryujinx.Common.Configuration.TitleUpdateMetadata; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class TitleUpdatesHelper { -- 2.47.1 From 4f699afe7a481828cf0ff54217117020cf262a11 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 19:13:06 -0600 Subject: [PATCH 221/722] misc: Move shortcut files into Avalonia project --- src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj | 9 --------- src/Ryujinx/Ryujinx.csproj | 9 +++++++++ src/Ryujinx/Utilities/ShortcutHelper.cs | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj index 0a28fddf3..01efe04ba 100644 --- a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj +++ b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj @@ -21,15 +21,6 @@ - - - - - - - - - diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 998257dff..3ddd807e6 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -128,6 +128,15 @@ + + Assets\ShortcutFiles\shortcut-template.desktop + + + Assets\ShortcutFiles\shortcut-launch-script.sh + + + Assets\ShortcutFiles\shortcut-template.plist + diff --git a/src/Ryujinx/Utilities/ShortcutHelper.cs b/src/Ryujinx/Utilities/ShortcutHelper.cs index a0fb5599a..4923d2598 100644 --- a/src/Ryujinx/Utilities/ShortcutHelper.cs +++ b/src/Ryujinx/Utilities/ShortcutHelper.cs @@ -32,7 +32,7 @@ namespace Ryujinx.Ava.Utilities private static void CreateShortcutLinux(string applicationFilePath, string applicationId, byte[] iconData, string iconPath, string desktopPath, string cleanedAppName) { string basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx.sh"); - var desktopFile = EmbeddedResources.ReadAllText("Ryujinx.UI.Common/shortcut-template.desktop"); + var desktopFile = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-template.desktop"); iconPath += ".png"; var image = SKBitmap.Decode(iconData); @@ -48,8 +48,8 @@ namespace Ryujinx.Ava.Utilities private static void CreateShortcutMacos(string appFilePath, string applicationId, byte[] iconData, string desktopPath, string cleanedAppName) { string basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx"); - var plistFile = EmbeddedResources.ReadAllText("Ryujinx.UI.Common/shortcut-template.plist"); - var shortcutScript = EmbeddedResources.ReadAllText("Ryujinx.UI.Common/shortcut-launch-script.sh"); + var plistFile = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-template.plist"); + var shortcutScript = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-launch-script.sh"); // Macos .App folder string contentFolderPath = Path.Combine("/Applications", cleanedAppName + ".app", "Contents"); string scriptFolderPath = Path.Combine(contentFolderPath, "MacOS"); -- 2.47.1 From f5ce539de9e1f7a6f0a93767ecd4f7bd7ee0a6b5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 19:28:27 -0600 Subject: [PATCH 222/722] misc: Move the rest of Ryujinx.UI.Common into other parts of the project. --- Ryujinx.sln | 6 ------ src/Ryujinx.Common/Helpers/ConsoleHelper.cs | 2 +- .../Helpers/FileAssociationHelper.cs | 2 +- src/Ryujinx.Common/Helpers/LinuxHelper.cs | 2 +- src/Ryujinx.Common/Helpers/ObjectiveC.cs | 2 +- src/Ryujinx.Common/Helpers/OpenHelper.cs | 2 +- .../Configuration/FileTypes.cs | 12 ------------ src/Ryujinx/AppHost.cs | 4 +--- src/Ryujinx/Common/ApplicationHelper.cs | 4 ++-- src/Ryujinx/Common/LocaleManager.cs | 2 +- src/Ryujinx/DiscordIntegrationModule.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 3 +-- src/Ryujinx/Headless/HeadlessRyujinx.cs | 2 +- src/Ryujinx/Headless/Options.cs | 2 +- src/Ryujinx/Program.cs | 8 ++------ src/Ryujinx/Ryujinx.csproj | 3 ++- src/Ryujinx/RyujinxApp.axaml.cs | 4 ++-- src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 2 +- .../UI/Controls/ApplicationContextMenu.axaml.cs | 2 +- .../UI/Helpers/MultiplayerInfoConverter.cs | 1 - src/Ryujinx/UI/Helpers/UserErrorDialog.cs | 1 - src/Ryujinx/UI/Models/SaveModel.cs | 2 +- src/Ryujinx/UI/Renderer/EmbeddedWindow.cs | 4 ++-- src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs | 2 +- src/Ryujinx/UI/Renderer/RendererHost.axaml.cs | 2 +- .../UI/ViewModels/AboutWindowViewModel.cs | 2 +- .../UI/ViewModels/Input/InputViewModel.cs | 2 +- .../UI/ViewModels/MainWindowViewModel.cs | 5 ++--- src/Ryujinx/UI/ViewModels/SettingsViewModel.cs | 4 ++-- .../UI/Views/Main/MainMenuBarView.axaml.cs | 5 ++--- .../UI/Views/Main/MainStatusBarView.axaml.cs | 2 +- .../Views/Settings/SettingsHacksView.axaml.cs | 1 - src/Ryujinx/UI/Windows/AboutWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 2 +- .../DownloadableContentManagerWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 6 +++--- .../UI/Windows/ModManagerWindow.axaml.cs | 2 +- .../UI/Windows/TitleUpdateWindow.axaml.cs | 2 +- src/Ryujinx/Updater.cs | 3 ++- .../Utilities/AppLibrary/ApplicationData.cs | 5 +---- .../Utilities/AppLibrary/ApplicationLibrary.cs | 4 ++-- .../Utilities}/CommandLineState.cs | 2 +- .../Utilities}/Configuration/AudioBackend.cs | 2 +- .../Configuration/ConfigurationFileFormat.cs | 6 +++--- .../ConfigurationFileFormatSettings.cs | 2 +- .../ConfigurationJsonSerializerContext.cs | 6 ++---- .../ConfigurationState.Migration.cs | 6 +++--- .../Configuration/ConfigurationState.Model.cs | 6 +++--- .../Configuration/ConfigurationState.cs | 6 +++--- .../Utilities/Configuration/FileTypes.cs} | 17 ++++++++++++++--- .../Utilities}/Configuration/LoggerModule.cs | 2 +- .../Utilities}/Configuration/System/Language.cs | 3 +-- .../Utilities}/Configuration/System/Region.cs | 2 +- .../Utilities}/Configuration/UI/ColumnSort.cs | 2 +- .../Utilities}/Configuration/UI/GuiColumns.cs | 2 +- .../Configuration/UI/ShownFileTypes.cs | 2 +- .../Configuration/UI/WindowStartup.cs | 2 +- src/Ryujinx/Utilities/ShortcutHelper.cs | 1 - src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs | 1 - src/Ryujinx/Utilities/TitleUpdatesHelper.cs | 2 +- .../Utilities}/ValueFormatUtils.cs | 5 +++-- 61 files changed, 90 insertions(+), 114 deletions(-) delete mode 100644 src/Ryujinx.UI.Common/Configuration/FileTypes.cs rename src/{Ryujinx.Common/Helpers => Ryujinx/Utilities}/CommandLineState.cs (99%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/AudioBackend.cs (84%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationFileFormat.cs (99%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationFileFormatSettings.cs (83%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationJsonSerializerContext.cs (74%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationState.Migration.cs (99%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationState.Model.cs (99%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationState.cs (99%) rename src/{Ryujinx.UI.Common/Extensions/FileTypeExtensions.cs => Ryujinx/Utilities/Configuration/FileTypes.cs} (73%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/LoggerModule.cs (98%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/System/Language.cs (86%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/System/Region.cs (84%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/UI/ColumnSort.cs (73%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/UI/GuiColumns.cs (91%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/UI/ShownFileTypes.cs (85%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/UI/WindowStartup.cs (85%) rename src/{Ryujinx.Common/Helpers => Ryujinx/Utilities}/ValueFormatUtils.cs (97%) diff --git a/Ryujinx.sln b/Ryujinx.sln index 87c1021c1..373572178 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -61,8 +61,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmp EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.Common", "src\Ryujinx.UI.Common\Ryujinx.UI.Common.csproj", "{BA161CA0-CD65-4E6E-B644-51C8D1E542DC}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vulkan", "src\Ryujinx.Graphics.Vulkan\Ryujinx.Graphics.Vulkan.csproj", "{D4D09B08-D580-4D69-B886-C35D2853F6C8}" @@ -219,10 +217,6 @@ Global {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.Build.0 = Release|Any CPU - {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Release|Any CPU.Build.0 = Release|Any CPU {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.Build.0 = Debug|Any CPU {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/Ryujinx.Common/Helpers/ConsoleHelper.cs b/src/Ryujinx.Common/Helpers/ConsoleHelper.cs index 99b209c6e..105c9881e 100644 --- a/src/Ryujinx.Common/Helpers/ConsoleHelper.cs +++ b/src/Ryujinx.Common/Helpers/ConsoleHelper.cs @@ -3,7 +3,7 @@ using System; using System.Runtime.InteropServices; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Common.Helper { public static partial class ConsoleHelper { diff --git a/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs b/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs index b1463989d..476aee228 100644 --- a/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs +++ b/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs @@ -8,7 +8,7 @@ using System.Linq; using System.Runtime.InteropServices; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Common.Helper { public static partial class FileAssociationHelper { diff --git a/src/Ryujinx.Common/Helpers/LinuxHelper.cs b/src/Ryujinx.Common/Helpers/LinuxHelper.cs index b57793791..2adfd20f8 100644 --- a/src/Ryujinx.Common/Helpers/LinuxHelper.cs +++ b/src/Ryujinx.Common/Helpers/LinuxHelper.cs @@ -3,7 +3,7 @@ using System.Diagnostics; using System.IO; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Common.Helper { [SupportedOSPlatform("linux")] public static class LinuxHelper diff --git a/src/Ryujinx.Common/Helpers/ObjectiveC.cs b/src/Ryujinx.Common/Helpers/ObjectiveC.cs index f8f972098..d8e02f54d 100644 --- a/src/Ryujinx.Common/Helpers/ObjectiveC.cs +++ b/src/Ryujinx.Common/Helpers/ObjectiveC.cs @@ -2,7 +2,7 @@ using System; using System.Runtime.InteropServices; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Common.Helper { [SupportedOSPlatform("macos")] public static partial class ObjectiveC diff --git a/src/Ryujinx.Common/Helpers/OpenHelper.cs b/src/Ryujinx.Common/Helpers/OpenHelper.cs index bf398a355..6a54b69f3 100644 --- a/src/Ryujinx.Common/Helpers/OpenHelper.cs +++ b/src/Ryujinx.Common/Helpers/OpenHelper.cs @@ -5,7 +5,7 @@ using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Common.Helper { public static partial class OpenHelper { diff --git a/src/Ryujinx.UI.Common/Configuration/FileTypes.cs b/src/Ryujinx.UI.Common/Configuration/FileTypes.cs deleted file mode 100644 index 1974207b6..000000000 --- a/src/Ryujinx.UI.Common/Configuration/FileTypes.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Ryujinx.UI.Common -{ - public enum FileTypes - { - NSP, - PFS0, - XCI, - NCA, - NRO, - NSO - } -} diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index f3fcbf5aa..cff6a44a5 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -22,6 +22,7 @@ using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; @@ -42,9 +43,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.Input; using Ryujinx.Input.HLE; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using Silk.NET.Vulkan; using SkiaSharp; using SPB.Graphics.Vulkan; diff --git a/src/Ryujinx/Common/ApplicationHelper.cs b/src/Ryujinx/Common/ApplicationHelper.cs index 1c6b53dee..7db933ed6 100644 --- a/src/Ryujinx/Common/ApplicationHelper.cs +++ b/src/Ryujinx/Common/ApplicationHelper.cs @@ -15,12 +15,12 @@ using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.Loaders.Processes.Extensions; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using System; using System.Buffers; using System.IO; diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index 70b04ec95..9422cf7fb 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -1,8 +1,8 @@ using Gommon; using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Utilities; -using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Concurrent; using System.Collections.Generic; diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs index f13b34ec8..ee00f2c0d 100644 --- a/src/Ryujinx/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -2,10 +2,10 @@ using DiscordRPC; using Humanizer; using Humanizer.Localisation; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.HLE; using Ryujinx.HLE.Loaders.Processes; -using Ryujinx.UI.Common.Configuration; using System.Text; namespace Ryujinx.Ava diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index ba84e53a5..19d2fb94e 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -2,6 +2,7 @@ using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.SDL2; using Ryujinx.Ava; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; @@ -16,8 +17,6 @@ using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.Input; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; using Silk.NET.Vulkan; using System; using System.IO; diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index eabe72cbe..3d99fb902 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -1,6 +1,7 @@ using CommandLine; using Gommon; using Ryujinx.Ava; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; @@ -25,7 +26,6 @@ using Ryujinx.Input; using Ryujinx.Input.HLE; using Ryujinx.Input.SDL2; using Ryujinx.SDL2.Common; -using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Generic; using System.IO; diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index b0a349a2b..c0def95c1 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -1,11 +1,11 @@ using CommandLine; using Gommon; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.HLE; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; -using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 76ed0b076..6f0f3e12e 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -8,7 +8,9 @@ using Projektanker.Icons.Avalonia.MaterialDesign; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Ava.Utilities.SystemInfo; using Ryujinx.Common; using Ryujinx.Common.Configuration; @@ -18,9 +20,6 @@ using Ryujinx.Common.SystemInterop; using Ryujinx.Graphics.Vulkan.MoltenVK; using Ryujinx.Headless; using Ryujinx.SDL2.Common; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using System; using System.IO; using System.Linq; @@ -117,9 +116,6 @@ namespace Ryujinx.Ava // Setup base data directory. AppDataManager.Initialize(CommandLineState.BaseDirPathArg); - // Set the delegate for localizing the word "never" in the UI - ApplicationData.LocalizedNever = () => LocaleManager.Instance[LocaleKeys.Never]; - // Initialize the configuration. ConfigurationState.Initialize(); diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 3ddd807e6..9d23b0909 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -48,6 +48,7 @@ + @@ -57,6 +58,7 @@ + @@ -77,7 +79,6 @@ - diff --git a/src/Ryujinx/RyujinxApp.axaml.cs b/src/Ryujinx/RyujinxApp.axaml.cs index bbef20aa0..d950af3a9 100644 --- a/src/Ryujinx/RyujinxApp.axaml.cs +++ b/src/Ryujinx/RyujinxApp.axaml.cs @@ -11,10 +11,10 @@ using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Logging; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using System; using System.Diagnostics; diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index 893ea95ac..65f4c7795 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -5,12 +5,12 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.HLE; using Ryujinx.HLE.HOS.Applets; using Ryujinx.HLE.HOS.Applets.SoftwareKeyboard; using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types; using Ryujinx.HLE.UI; -using Ryujinx.UI.Common.Configuration; using System; using System.Threading; diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index 4f998b040..354e1c7e6 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -13,8 +13,8 @@ using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common.Configuration; +using Ryujinx.Common.Helper; using Ryujinx.HLE.HOS; -using Ryujinx.UI.Common.Helper; using SkiaSharp; using System; using System.Collections.Generic; diff --git a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs index 4135fd4c7..09a2ad367 100644 --- a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs +++ b/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs @@ -2,7 +2,6 @@ using Avalonia.Data.Converters; using Avalonia.Markup.Xaml; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.UI.Common.Helper; using System; using System.Globalization; diff --git a/src/Ryujinx/UI/Helpers/UserErrorDialog.cs b/src/Ryujinx/UI/Helpers/UserErrorDialog.cs index 3864be0fa..c30fb4348 100644 --- a/src/Ryujinx/UI/Helpers/UserErrorDialog.cs +++ b/src/Ryujinx/UI/Helpers/UserErrorDialog.cs @@ -1,6 +1,5 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Common.UI; -using Ryujinx.UI.Common; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Helpers diff --git a/src/Ryujinx/UI/Models/SaveModel.cs b/src/Ryujinx/UI/Models/SaveModel.cs index 8364e1966..3dc009b2a 100644 --- a/src/Ryujinx/UI/Models/SaveModel.cs +++ b/src/Ryujinx/UI/Models/SaveModel.cs @@ -3,9 +3,9 @@ using LibHac.Fs; using LibHac.Ncm; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; -using Ryujinx.UI.Common.Helper; using System; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs index ea5a8dbdd..eea9be283 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs @@ -2,9 +2,9 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Platform; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; +using Ryujinx.Common.Helper; using SPB.Graphics; using SPB.Platform; using SPB.Platform.GLX; diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs index 3842301de..4f59e2400 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs @@ -1,9 +1,9 @@ using OpenTK.Graphics.OpenGL; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.OpenGL; -using Ryujinx.UI.Common.Configuration; using SPB.Graphics; using SPB.Graphics.Exceptions; using SPB.Graphics.OpenGL; diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs index 71c0e1432..fa9aec0c5 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs @@ -1,10 +1,10 @@ using Avalonia; using Avalonia.Controls; using Gommon; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; -using Ryujinx.UI.Common.Configuration; using System; using System.Runtime.InteropServices; diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index 0f8a5a7d7..6bc1e1f03 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -3,7 +3,7 @@ using Avalonia.Styling; using Avalonia.Threading; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; -using Ryujinx.UI.Common.Configuration; +using Ryujinx.Ava.Utilities.Configuration; using System; namespace Ryujinx.Ava.UI.ViewModels diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 79daab701..74b8681d5 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -10,6 +10,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; @@ -19,7 +20,6 @@ using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.Input; -using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Generic; using System.Collections.ObjectModel; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 3bc100ba3..332009149 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -22,8 +22,10 @@ using Ryujinx.Ava.UI.Models.Generic; using Ryujinx.Ava.UI.Renderer; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; +using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.Common.UI; using Ryujinx.Common.Utilities; @@ -35,9 +37,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; using Ryujinx.HLE.UI; using Ryujinx.Input.HLE; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using Silk.NET.Vulkan; using SkiaSharp; using System; diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index ecd2d40dd..1f239d3ce 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -10,6 +10,8 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Utilities.Configuration.System; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.GraphicsDriver; @@ -18,8 +20,6 @@ using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS.Services.Time.TimeZone; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Configuration.System; using System; using System.Collections.Generic; using System.Collections.ObjectModel; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 1f8617ad7..be444faa4 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -8,12 +8,11 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; +using Ryujinx.Common.Helper; using Ryujinx.Common.Utilities; using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs index 297e86c67..b234f7859 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs @@ -5,10 +5,10 @@ using Avalonia.Interactivity; using Avalonia.Threading; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; -using Ryujinx.UI.Common.Configuration; using System; namespace Ryujinx.Ava.UI.Views.Main diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs index f9e0958ca..915acedeb 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs @@ -1,7 +1,6 @@ using Avalonia.Controls; using Avalonia.Interactivity; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.Common.Configuration; namespace Ryujinx.Ava.UI.Views.Settings { diff --git a/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs b/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs index a901295cf..b9736b81d 100644 --- a/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs @@ -8,7 +8,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Common; -using Ryujinx.UI.Common.Helper; +using Ryujinx.Common.Helper; using System.Threading.Tasks; using Button = Avalonia.Controls.Button; diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index f5795d42c..c770a6f45 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -3,9 +3,9 @@ using LibHac.Tools.FsSystem; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; -using Ryujinx.UI.Common.Configuration; using System.Globalization; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs index 02f420752..335676aef 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs @@ -6,7 +6,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.UI.Common.Helper; +using Ryujinx.Common.Helper; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index f0aaf4cac..0b1c356d4 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -15,8 +15,11 @@ using Ryujinx.Ava.Input; using Ryujinx.Ava.UI.Applet; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; +using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.Common.UI; using Ryujinx.Graphics.Gpu; @@ -25,9 +28,6 @@ using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.Input.HLE; using Ryujinx.Input.SDL2; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs index 774446cf1..449aab554 100644 --- a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs @@ -6,7 +6,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.Common.Helper; +using Ryujinx.Common.Helper; using System.Threading.Tasks; using Button = Avalonia.Controls.Button; diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs index 421990bcd..b7c421c96 100644 --- a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs @@ -6,7 +6,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.UI.Common.Helper; +using Ryujinx.Common.Helper; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 377acbbdf..3e3989c66 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -7,10 +7,11 @@ using ICSharpCode.SharpZipLib.Zip; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models.Github; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.Utilities; using Ryujinx.Common; +using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; -using Ryujinx.UI.Common.Helper; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs index de91c98a5..c87486232 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs @@ -10,7 +10,6 @@ using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Common.Logging; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Loaders.Processes.Extensions; -using Ryujinx.UI.Common.Helper; using System; using System.IO; using System.Text.Json.Serialization; @@ -19,8 +18,6 @@ namespace Ryujinx.Ava.Utilities.AppLibrary { public class ApplicationData { - public static Func LocalizedNever { get; set; } = () => "Never"; - public bool Favorite { get; set; } public byte[] Icon { get; set; } public string Name { get; set; } = "Unknown"; @@ -40,7 +37,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary public string TimePlayedString => ValueFormatUtils.FormatTimeSpan(TimePlayed); - public string LastPlayedString => ValueFormatUtils.FormatDateTime(LastPlayed)?.Replace(" ", "\n") ?? LocalizedNever(); + public string LastPlayedString => ValueFormatUtils.FormatDateTime(LastPlayed)?.Replace(" ", "\n"); public string FileSizeString => ValueFormatUtils.FormatFileSize(FileSize); diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index 94f2e7fc7..ef2e835ae 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -11,6 +11,8 @@ using LibHac.Tools.Fs; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Models; +using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Utilities.Configuration.System; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; @@ -21,8 +23,6 @@ using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.Loaders.Npdm; using Ryujinx.HLE.Loaders.Processes.Extensions; using Ryujinx.HLE.Utilities; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Configuration.System; using System; using System.Collections.Generic; using System.IO; diff --git a/src/Ryujinx.Common/Helpers/CommandLineState.cs b/src/Ryujinx/Utilities/CommandLineState.cs similarity index 99% rename from src/Ryujinx.Common/Helpers/CommandLineState.cs rename to src/Ryujinx/Utilities/CommandLineState.cs index 3a96a55c8..6fb8e92d6 100644 --- a/src/Ryujinx.Common/Helpers/CommandLineState.cs +++ b/src/Ryujinx/Utilities/CommandLineState.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Logging; using System.Collections.Generic; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class CommandLineState { diff --git a/src/Ryujinx.UI.Common/Configuration/AudioBackend.cs b/src/Ryujinx/Utilities/Configuration/AudioBackend.cs similarity index 84% rename from src/Ryujinx.UI.Common/Configuration/AudioBackend.cs rename to src/Ryujinx/Utilities/Configuration/AudioBackend.cs index a952e7ac0..8394bb282 100644 --- a/src/Ryujinx.UI.Common/Configuration/AudioBackend.cs +++ b/src/Ryujinx/Utilities/Configuration/AudioBackend.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Utilities; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { [JsonConverter(typeof(TypedStringEnumConverter))] public enum AudioBackend diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs similarity index 99% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs index 8b123be01..c964ed76d 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs @@ -1,3 +1,5 @@ +using Ryujinx.Ava.Utilities.Configuration.System; +using Ryujinx.Ava.Utilities.Configuration.UI; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; @@ -5,12 +7,10 @@ using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE; -using Ryujinx.UI.Common.Configuration.System; -using Ryujinx.UI.Common.Configuration.UI; using System.Collections.Generic; using System.Text.Json.Nodes; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { public class ConfigurationFileFormat { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormatSettings.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormatSettings.cs similarity index 83% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormatSettings.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationFileFormatSettings.cs index 9861ebf1f..175d4dee8 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormatSettings.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormatSettings.cs @@ -1,6 +1,6 @@ using Ryujinx.Common.Utilities; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { internal static class ConfigurationFileFormatSettings { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationJsonSerializerContext.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationJsonSerializerContext.cs similarity index 74% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationJsonSerializerContext.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationJsonSerializerContext.cs index 3c3e3f20d..a81e00f4a 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationJsonSerializerContext.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationJsonSerializerContext.cs @@ -1,10 +1,8 @@ using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(ConfigurationFileFormat))] - internal partial class ConfigurationJsonSerializerContext : JsonSerializerContext - { - } + internal partial class ConfigurationJsonSerializerContext : JsonSerializerContext; } diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs similarity index 99% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 8652b4331..8cfb9d53a 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -1,3 +1,5 @@ +using Ryujinx.Ava.Utilities.Configuration.System; +using Ryujinx.Ava.Utilities.Configuration.UI; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; @@ -5,12 +7,10 @@ using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; using Ryujinx.HLE; -using Ryujinx.UI.Common.Configuration.System; -using Ryujinx.UI.Common.Configuration.UI; using System; using System.Collections.Generic; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { public partial class ConfigurationState { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs similarity index 99% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index 2ae56d50a..c27b3f0e3 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -1,16 +1,16 @@ using ARMeilleure; using Gommon; +using Ryujinx.Ava.Utilities.Configuration.System; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Multiplayer; +using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.HLE; -using Ryujinx.UI.Common.Configuration.System; -using Ryujinx.UI.Common.Helper; using System.Collections.Generic; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { public partial class ConfigurationState { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs similarity index 99% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationState.cs index 8ae76ecc5..01534bec8 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs @@ -1,14 +1,14 @@ +using Ryujinx.Ava.Utilities.Configuration.System; +using Ryujinx.Ava.Utilities.Configuration.UI; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; -using Ryujinx.UI.Common.Configuration.System; -using Ryujinx.UI.Common.Configuration.UI; using System; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { public partial class ConfigurationState { diff --git a/src/Ryujinx.UI.Common/Extensions/FileTypeExtensions.cs b/src/Ryujinx/Utilities/Configuration/FileTypes.cs similarity index 73% rename from src/Ryujinx.UI.Common/Extensions/FileTypeExtensions.cs rename to src/Ryujinx/Utilities/Configuration/FileTypes.cs index 7e71ba7a4..c4550b5a6 100644 --- a/src/Ryujinx.UI.Common/Extensions/FileTypeExtensions.cs +++ b/src/Ryujinx/Utilities/Configuration/FileTypes.cs @@ -1,8 +1,19 @@ using System; -using static Ryujinx.UI.Common.Configuration.ConfigurationState.UISection; -namespace Ryujinx.UI.Common +using static Ryujinx.Ava.Utilities.Configuration.ConfigurationState.UISection; + +namespace Ryujinx.Ava.Utilities.Configuration { + public enum FileTypes + { + NSP, + PFS0, + XCI, + NCA, + NRO, + NSO + } + public static class FileTypesExtensions { /// @@ -10,7 +21,7 @@ namespace Ryujinx.UI.Common /// /// The name of the parameter to get the value of. /// The config instance to get the value from. - /// The current value of the setting. Value is if the file type is the be shown on the games list, otherwise. + /// The current value of the setting. Value is if the file type is to be shown on the games list, otherwise. public static bool GetConfigValue(this FileTypes type, ShownFileTypeSettings config) => type switch { FileTypes.NSP => config.NSP.Value, diff --git a/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs b/src/Ryujinx/Utilities/Configuration/LoggerModule.cs similarity index 98% rename from src/Ryujinx.UI.Common/Configuration/LoggerModule.cs rename to src/Ryujinx/Utilities/Configuration/LoggerModule.cs index a7913f142..663ad607f 100644 --- a/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs +++ b/src/Ryujinx/Utilities/Configuration/LoggerModule.cs @@ -4,7 +4,7 @@ using Ryujinx.Common.Logging.Targets; using System; using System.IO; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { public static class LoggerModule { diff --git a/src/Ryujinx.UI.Common/Configuration/System/Language.cs b/src/Ryujinx/Utilities/Configuration/System/Language.cs similarity index 86% rename from src/Ryujinx.UI.Common/Configuration/System/Language.cs rename to src/Ryujinx/Utilities/Configuration/System/Language.cs index 8ca4e542b..81a9bd192 100644 --- a/src/Ryujinx.UI.Common/Configuration/System/Language.cs +++ b/src/Ryujinx/Utilities/Configuration/System/Language.cs @@ -1,8 +1,7 @@ using Ryujinx.Common.Utilities; -using Ryujinx.HLE.HOS.SystemState; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Configuration.System +namespace Ryujinx.Ava.Utilities.Configuration.System { [JsonConverter(typeof(TypedStringEnumConverter))] public enum Language diff --git a/src/Ryujinx.UI.Common/Configuration/System/Region.cs b/src/Ryujinx/Utilities/Configuration/System/Region.cs similarity index 84% rename from src/Ryujinx.UI.Common/Configuration/System/Region.cs rename to src/Ryujinx/Utilities/Configuration/System/Region.cs index 6087c70e5..ff3352e6a 100644 --- a/src/Ryujinx.UI.Common/Configuration/System/Region.cs +++ b/src/Ryujinx/Utilities/Configuration/System/Region.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Utilities; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Configuration.System +namespace Ryujinx.Ava.Utilities.Configuration.System { [JsonConverter(typeof(TypedStringEnumConverter))] public enum Region diff --git a/src/Ryujinx.UI.Common/Configuration/UI/ColumnSort.cs b/src/Ryujinx/Utilities/Configuration/UI/ColumnSort.cs similarity index 73% rename from src/Ryujinx.UI.Common/Configuration/UI/ColumnSort.cs rename to src/Ryujinx/Utilities/Configuration/UI/ColumnSort.cs index 44e98c407..e74ca0ec5 100644 --- a/src/Ryujinx.UI.Common/Configuration/UI/ColumnSort.cs +++ b/src/Ryujinx/Utilities/Configuration/UI/ColumnSort.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Configuration.UI +namespace Ryujinx.Ava.Utilities.Configuration.UI { public struct ColumnSort { diff --git a/src/Ryujinx.UI.Common/Configuration/UI/GuiColumns.cs b/src/Ryujinx/Utilities/Configuration/UI/GuiColumns.cs similarity index 91% rename from src/Ryujinx.UI.Common/Configuration/UI/GuiColumns.cs rename to src/Ryujinx/Utilities/Configuration/UI/GuiColumns.cs index c486492e0..0ab9885fe 100644 --- a/src/Ryujinx.UI.Common/Configuration/UI/GuiColumns.cs +++ b/src/Ryujinx/Utilities/Configuration/UI/GuiColumns.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Configuration.UI +namespace Ryujinx.Ava.Utilities.Configuration.UI { public struct GuiColumns { diff --git a/src/Ryujinx.UI.Common/Configuration/UI/ShownFileTypes.cs b/src/Ryujinx/Utilities/Configuration/UI/ShownFileTypes.cs similarity index 85% rename from src/Ryujinx.UI.Common/Configuration/UI/ShownFileTypes.cs rename to src/Ryujinx/Utilities/Configuration/UI/ShownFileTypes.cs index 6c72a6930..9541b4885 100644 --- a/src/Ryujinx.UI.Common/Configuration/UI/ShownFileTypes.cs +++ b/src/Ryujinx/Utilities/Configuration/UI/ShownFileTypes.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Configuration.UI +namespace Ryujinx.Ava.Utilities.Configuration.UI { public struct ShownFileTypes { diff --git a/src/Ryujinx.UI.Common/Configuration/UI/WindowStartup.cs b/src/Ryujinx/Utilities/Configuration/UI/WindowStartup.cs similarity index 85% rename from src/Ryujinx.UI.Common/Configuration/UI/WindowStartup.cs rename to src/Ryujinx/Utilities/Configuration/UI/WindowStartup.cs index 0df459134..6c5e36879 100644 --- a/src/Ryujinx.UI.Common/Configuration/UI/WindowStartup.cs +++ b/src/Ryujinx/Utilities/Configuration/UI/WindowStartup.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Configuration.UI +namespace Ryujinx.Ava.Utilities.Configuration.UI { public struct WindowStartup { diff --git a/src/Ryujinx/Utilities/ShortcutHelper.cs b/src/Ryujinx/Utilities/ShortcutHelper.cs index 4923d2598..fed6a5c46 100644 --- a/src/Ryujinx/Utilities/ShortcutHelper.cs +++ b/src/Ryujinx/Utilities/ShortcutHelper.cs @@ -1,6 +1,5 @@ using Ryujinx.Common; using Ryujinx.Common.Configuration; -using Ryujinx.UI.Common.Helper; using ShellLink; using SkiaSharp; using System; diff --git a/src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs b/src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs index b7e33d3b4..0d45c52f2 100644 --- a/src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs +++ b/src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs @@ -1,5 +1,4 @@ using Ryujinx.Common.Logging; -using Ryujinx.UI.Common.Helper; using System; using System.Runtime.InteropServices; using System.Runtime.Intrinsics.X86; diff --git a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs index 8cffb9b25..9fc9bbf6b 100644 --- a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs +++ b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs @@ -7,13 +7,13 @@ using LibHac.Ns; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Models; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Loaders.Processes.Extensions; using Ryujinx.HLE.Utilities; -using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Generic; using System.IO; diff --git a/src/Ryujinx.Common/Helpers/ValueFormatUtils.cs b/src/Ryujinx/Utilities/ValueFormatUtils.cs similarity index 97% rename from src/Ryujinx.Common/Helpers/ValueFormatUtils.cs rename to src/Ryujinx/Utilities/ValueFormatUtils.cs index c203834f5..944cfbf8a 100644 --- a/src/Ryujinx.Common/Helpers/ValueFormatUtils.cs +++ b/src/Ryujinx/Utilities/ValueFormatUtils.cs @@ -1,8 +1,9 @@ +using Ryujinx.Ava.Common.Locale; using System; using System.Globalization; using System.Linq; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class ValueFormatUtils { @@ -75,7 +76,7 @@ namespace Ryujinx.UI.Common.Helper { culture ??= CultureInfo.CurrentCulture; - return utcDateTime?.ToLocalTime().ToString(culture); + return utcDateTime?.ToLocalTime().ToString(culture) ?? LocaleManager.Instance[LocaleKeys.Never]; } /// -- 2.47.1 From f362bef43d3460fdd8eaf2fbd023588bee969cd6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 21:17:01 -0600 Subject: [PATCH 223/722] misc: Overhaul DirtyHacks saving to support storing a value alongside an off/off flag. --- src/Ryujinx.Common/BitTricks.cs | 35 ++++++++++++++ .../Configuration/DirtyHacks.cs | 47 +++++++++++++++++-- src/Ryujinx.HLE/HLEConfiguration.cs | 6 +-- .../Services/Fs/FileSystemProxy/IStorage.cs | 2 +- src/Ryujinx.HLE/Switch.cs | 4 +- src/Ryujinx/AppHost.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.cs | 3 -- .../UI/ViewModels/SettingsViewModel.cs | 32 +++++++++++++ .../UI/Views/Settings/SettingsHacksView.axaml | 27 +++++++++++ .../Configuration/ConfigurationFileFormat.cs | 6 +-- .../ConfigurationState.Migration.cs | 24 +++++++++- .../Configuration/ConfigurationState.Model.cs | 26 ++++++---- .../Configuration/ConfigurationState.cs | 3 +- 13 files changed, 190 insertions(+), 27 deletions(-) create mode 100644 src/Ryujinx.Common/BitTricks.cs diff --git a/src/Ryujinx.Common/BitTricks.cs b/src/Ryujinx.Common/BitTricks.cs new file mode 100644 index 000000000..d0c689291 --- /dev/null +++ b/src/Ryujinx.Common/BitTricks.cs @@ -0,0 +1,35 @@ +namespace Ryujinx.Common +{ + public class BitTricks + { + // Never actually written bit packing logic before, so I looked it up. + // This code is from https://gist.github.com/Alan-FGR/04938e93e2bffdf5802ceb218a37c195 + + public static ulong PackBitFields(uint[] values, byte[] bitFields) + { + ulong retVal = values[0]; //we set the first value right away + for (int f = 1; f < values.Length; f++) + { + retVal <<= bitFields[f]; // we shift the previous value + retVal += values[f];// and add our current value + } + return retVal; + } + + public static uint[] UnpackBitFields(ulong packed, byte[] bitFields) + { + int fields = bitFields.Length - 1; // number of fields to unpack + uint[] retArr = new uint[fields + 1]; // init return array + int curPos = 0; // current field bit position (start) + int lastEnd; // position where last field ended + for (int f = fields; f >= 0; f--) // loop from last + { + lastEnd = curPos; // we store where the last value ended + curPos += bitFields[f]; // we get where the current value starts + int leftShift = 64 - curPos; // we figure how much left shift we gotta apply for the other numbers to overflow into oblivion + retArr[f] = (uint)((packed << leftShift) >> leftShift + lastEnd); // we do magic + } + return retArr; + } + } +} diff --git a/src/Ryujinx.Common/Configuration/DirtyHacks.cs b/src/Ryujinx.Common/Configuration/DirtyHacks.cs index 6a6d4949c..12f6b019b 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHacks.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHacks.cs @@ -1,11 +1,52 @@ using System; +using System.Collections.Generic; +using System.Linq; namespace Ryujinx.Common.Configuration { [Flags] - public enum DirtyHacks + public enum DirtyHacks : byte { - None = 0, - Xc2MenuSoftlockFix = 1 << 10 + Xc2MenuSoftlockFix = 1, + ShaderCompilationThreadSleep = 2 + } + + public record EnabledDirtyHack(DirtyHacks Hack, int Value) + { + private static readonly byte[] _packedFormat = [8, 32]; + + public ulong Pack() => BitTricks.PackBitFields([(uint)Hack, (uint)Value], _packedFormat); + + public static EnabledDirtyHack FromPacked(ulong packedHack) + { + var unpackedFields = BitTricks.UnpackBitFields(packedHack, _packedFormat); + if (unpackedFields is not [var hack, var value]) + throw new ArgumentException(nameof(packedHack)); + + return new EnabledDirtyHack((DirtyHacks)hack, (int)value); + } + } + + public class DirtyHackCollection : Dictionary + { + public DirtyHackCollection(EnabledDirtyHack[] hacks) + { + foreach ((DirtyHacks dirtyHacks, int value) in hacks) + { + Add(dirtyHacks, value); + } + } + + public DirtyHackCollection(ulong[] packedHacks) + { + foreach ((DirtyHacks dirtyHacks, int value) in packedHacks.Select(EnabledDirtyHack.FromPacked)) + { + Add(dirtyHacks, value); + } + } + + public new int this[DirtyHacks hack] => TryGetValue(hack, out var value) ? value : -1; + + public bool IsEnabled(DirtyHacks hack) => ContainsKey(hack); } } diff --git a/src/Ryujinx.HLE/HLEConfiguration.cs b/src/Ryujinx.HLE/HLEConfiguration.cs index b44a09b22..8ac76508f 100644 --- a/src/Ryujinx.HLE/HLEConfiguration.cs +++ b/src/Ryujinx.HLE/HLEConfiguration.cs @@ -192,7 +192,7 @@ namespace Ryujinx.HLE /// /// The desired hacky workarounds. /// - public DirtyHacks Hacks { internal get; set; } + public EnabledDirtyHack[] Hacks { internal get; set; } public HLEConfiguration(VirtualFileSystem virtualFileSystem, LibHacHorizonManager libHacHorizonManager, @@ -224,7 +224,7 @@ namespace Ryujinx.HLE string multiplayerLdnPassphrase, string multiplayerLdnServer, int customVSyncInterval, - DirtyHacks dirtyHacks = DirtyHacks.None) + EnabledDirtyHack[] dirtyHacks = null) { VirtualFileSystem = virtualFileSystem; LibHacHorizonManager = libHacHorizonManager; @@ -256,7 +256,7 @@ namespace Ryujinx.HLE MultiplayerDisableP2p = multiplayerDisableP2p; MultiplayerLdnPassphrase = multiplayerLdnPassphrase; MultiplayerLdnServer = multiplayerLdnServer; - Hacks = dirtyHacks; + Hacks = dirtyHacks ?? []; } } } diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs index 07ab8b386..ac5dc04e9 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs @@ -39,7 +39,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseStorage.Get.Read((long)offset, new OutBuffer(region.Memory.Span), (long)size); - if (context.Device.DirtyHacks.HasFlag(DirtyHacks.Xc2MenuSoftlockFix) && TitleIDs.CurrentApplication.Value == Xc2TitleId) + if (context.Device.DirtyHacks.IsEnabled(DirtyHacks.Xc2MenuSoftlockFix) && TitleIDs.CurrentApplication.Value == Xc2TitleId) { // Add a load-bearing sleep to avoid XC2 softlock // https://web.archive.org/web/20240728045136/https://github.com/Ryujinx/Ryujinx/issues/2357 diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index c630c71c7..ed1cc02d3 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -40,7 +40,7 @@ namespace Ryujinx.HLE public bool IsFrameAvailable => Gpu.Window.IsFrameAvailable; - public DirtyHacks DirtyHacks { get; } + public DirtyHackCollection DirtyHacks { get; } public Switch(HLEConfiguration configuration) { @@ -77,7 +77,7 @@ namespace Ryujinx.HLE System.EnablePtc = Configuration.EnablePtc; System.FsIntegrityCheckLevel = Configuration.FsIntegrityCheckLevel; System.GlobalAccessLogMode = Configuration.FsGlobalAccessLogMode; - DirtyHacks = Configuration.Hacks; + DirtyHacks = new DirtyHackCollection(Configuration.Hacks); UpdateVSyncInterval(); #pragma warning restore IDE0055 diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index cff6a44a5..b90f8b801 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -952,7 +952,7 @@ namespace Ryujinx.Ava ConfigurationState.Instance.Multiplayer.LdnPassphrase, ConfigurationState.Instance.Multiplayer.LdnServer, ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value, - ConfigurationState.Instance.Hacks.ShowDirtyHacks ? ConfigurationState.Instance.Hacks.EnabledHacks : DirtyHacks.None)); + ConfigurationState.Instance.Hacks.ShowDirtyHacks ? ConfigurationState.Instance.Hacks.EnabledHacks : null)); } private static IHardwareDeviceDriver InitializeAudio() diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index 3d99fb902..3cb0afca3 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -14,9 +14,6 @@ using Ryujinx.Cpu; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Gpu; using Ryujinx.Graphics.Gpu.Shader; -using Ryujinx.Graphics.Metal; -using Ryujinx.Graphics.OpenGL; -using Ryujinx.Graphics.Vulkan; using Ryujinx.Graphics.Vulkan.MoltenVK; using Ryujinx.HLE; using Ryujinx.HLE.FileSystem; diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 1f239d3ce..0afa01fc2 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -66,6 +66,8 @@ namespace Ryujinx.Ava.UI.ViewModels private string _ldnServer; private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; + private bool _shaderTranslationThreadSleep = ConfigurationState.Instance.Hacks.EnableShaderCompilationThreadSleep; + private int _shaderTranslationSleepDelay = ConfigurationState.Instance.Hacks.ShaderCompilationThreadSleepDelay; public int ResolutionScale { @@ -287,6 +289,28 @@ namespace Ryujinx.Ava.UI.ViewModels OnPropertyChanged(); } } + + public bool ShaderTranslationDelayEnabled + { + get => _shaderTranslationThreadSleep; + set + { + _shaderTranslationThreadSleep = value; + + OnPropertyChanged(); + } + } + + public int ShaderTranslationDelay + { + get => _shaderTranslationSleepDelay; + set + { + _shaderTranslationSleepDelay = value; + + OnPropertyChanged(); + } + } public int Language { get; set; } public int Region { get; set; } @@ -763,6 +787,8 @@ namespace Ryujinx.Ava.UI.ViewModels // Dirty Hacks config.Hacks.Xc2MenuSoftlockFix.Value = Xc2MenuSoftlockFixEnabled; + config.Hacks.EnableShaderCompilationThreadSleep.Value = ShaderTranslationDelayEnabled; + config.Hacks.ShaderCompilationThreadSleepDelay.Value = ShaderTranslationDelay; config.ToFileFormat().SaveConfig(Program.ConfigurationPath); @@ -809,5 +835,11 @@ namespace Ryujinx.Ava.UI.ViewModels "there is a low chance that the game will softlock, " + "the submenu won't show up, while background music is still there."); }); + + public static string ShaderTranslationDelayTooltip { get; } = Lambda.String(sb => + { + sb.Append( + "This hack applies the delay you specify every time shaders are attempted to be translated."); + }); } } diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index b7817f064..b4e3437ff 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -42,6 +42,33 @@ VerticalAlignment="Center" Text="Xenoblade Chronicles 2 Menu Softlock Fix" /> + + + + + + + diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs index c964ed76d..540024cbd 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Ava.Utilities.Configuration /// /// The current version of the file format /// - public const int CurrentVersion = 58; + public const int CurrentVersion = 59; /// /// Version of the configuration file format @@ -436,9 +436,9 @@ namespace Ryujinx.Ava.Utilities.Configuration public bool ShowDirtyHacks { get; set; } /// - /// The packed value of the enabled dirty hacks. + /// The packed values of the enabled dirty hacks. /// - public int EnabledDirtyHacks { get; set; } + public ulong[] DirtyHacks { get; set; } /// /// Loads a configuration file from disk diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 8cfb9d53a..b0664e1b6 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -9,6 +9,7 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE; using System; using System.Collections.Generic; +using System.Linq; namespace Ryujinx.Ava.Utilities.Configuration { @@ -637,6 +638,18 @@ namespace Ryujinx.Ava.Utilities.Configuration configurationFileUpdated = true; } + + // 58 migration accidentally got skipped but it worked with no issues somehow lol + + if (configurationFileFormat.Version < 59) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 59."); + + configurationFileFormat.ShowDirtyHacks = false; + configurationFileFormat.DirtyHacks = []; + + configurationFileUpdated = true; + } Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; Graphics.ResScale.Value = configurationFileFormat.ResScale; @@ -737,7 +750,16 @@ namespace Ryujinx.Ava.Utilities.Configuration Multiplayer.LdnServer.Value = configurationFileFormat.LdnServer; Hacks.ShowDirtyHacks.Value = configurationFileFormat.ShowDirtyHacks; - Hacks.Xc2MenuSoftlockFix.Value = ((DirtyHacks)configurationFileFormat.EnabledDirtyHacks).HasFlag(DirtyHacks.Xc2MenuSoftlockFix); + + { + EnabledDirtyHack[] hacks = configurationFileFormat.DirtyHacks.Select(EnabledDirtyHack.FromPacked).ToArray(); + + Hacks.Xc2MenuSoftlockFix.Value = hacks.Any(it => it.Hack == DirtyHacks.Xc2MenuSoftlockFix); + + var shaderCompilationThreadSleep = hacks.FirstOrDefault(it => it.Hack == DirtyHacks.ShaderCompilationThreadSleep); + Hacks.EnableShaderCompilationThreadSleep.Value = shaderCompilationThreadSleep != null; + Hacks.ShaderCompilationThreadSleepDelay.Value = shaderCompilationThreadSleep?.Value ?? 0; + } if (configurationFileUpdated) { diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index c27b3f0e3..53192618e 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -9,6 +9,7 @@ using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.HLE; using System.Collections.Generic; +using System.Linq; namespace Ryujinx.Ava.Utilities.Configuration { @@ -626,36 +627,43 @@ namespace Ryujinx.Ava.Utilities.Configuration public ReactiveObject ShowDirtyHacks { get; private set; } public ReactiveObject Xc2MenuSoftlockFix { get; private set; } + + public ReactiveObject EnableShaderCompilationThreadSleep { get; private set; } + + public ReactiveObject ShaderCompilationThreadSleepDelay { get; private set; } public HacksSection() { ShowDirtyHacks = new ReactiveObject(); Xc2MenuSoftlockFix = new ReactiveObject(); Xc2MenuSoftlockFix.Event += HackChanged; + EnableShaderCompilationThreadSleep = new ReactiveObject(); + EnableShaderCompilationThreadSleep.Event += HackChanged; + ShaderCompilationThreadSleepDelay = new ReactiveObject(); } private void HackChanged(object sender, ReactiveEventArgs rxe) { - Ryujinx.Common.Logging.Logger.Info?.Print(LogClass.Configuration, $"EnabledDirtyHacks set to: {EnabledHacks}", "LogValueChange"); + Ryujinx.Common.Logging.Logger.Info?.Print(LogClass.Configuration, $"EnabledDirtyHacks set to: [{EnabledHacks.Select(x => x.Hack).JoinToString(", ")}]", "LogValueChange"); } - public DirtyHacks EnabledHacks + public EnabledDirtyHack[] EnabledHacks { get { - DirtyHacks dirtyHacks = DirtyHacks.None; + List enabledHacks = []; if (Xc2MenuSoftlockFix) Apply(DirtyHacks.Xc2MenuSoftlockFix); - return dirtyHacks; + if (EnableShaderCompilationThreadSleep) + Apply(DirtyHacks.ShaderCompilationThreadSleep, ShaderCompilationThreadSleepDelay); + + return enabledHacks.ToArray(); - void Apply(DirtyHacks hack) + void Apply(DirtyHacks hack, int value = 0) { - if (dirtyHacks is not DirtyHacks.None) - dirtyHacks |= hack; - else - dirtyHacks = hack; + enabledHacks.Add(new EnabledDirtyHack(hack, value)); } } } diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs index 01534bec8..95ec62e83 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs @@ -7,6 +7,7 @@ using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using System; +using System.Linq; namespace Ryujinx.Ava.Utilities.Configuration { @@ -139,7 +140,7 @@ namespace Ryujinx.Ava.Utilities.Configuration MultiplayerLdnPassphrase = Multiplayer.LdnPassphrase, LdnServer = Multiplayer.LdnServer, ShowDirtyHacks = Hacks.ShowDirtyHacks, - EnabledDirtyHacks = (int)Hacks.EnabledHacks, + DirtyHacks = Hacks.EnabledHacks.Select(it => it.Pack()).ToArray(), }; return configurationFile; -- 2.47.1 From 42a739d34cefdd220e95d0046efc514fd4911c5b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 22:21:09 -0600 Subject: [PATCH 224/722] misc: Expose DirtyHacks on GpuContext --- src/Ryujinx.Graphics.Gpu/GpuContext.cs | 8 +++++++- src/Ryujinx.HLE/Switch.cs | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx.Graphics.Gpu/GpuContext.cs b/src/Ryujinx.Graphics.Gpu/GpuContext.cs index fb529e914..84bc0b9a9 100644 --- a/src/Ryujinx.Graphics.Gpu/GpuContext.cs +++ b/src/Ryujinx.Graphics.Gpu/GpuContext.cs @@ -1,4 +1,5 @@ using Ryujinx.Common; +using Ryujinx.Common.Configuration; using Ryujinx.Graphics.Device; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Gpu.Engine.GPFifo; @@ -90,6 +91,9 @@ namespace Ryujinx.Graphics.Gpu /// Support buffer updater. /// internal SupportBufferUpdater SupportBufferUpdater { get; } + + internal DirtyHackCollection DirtyHacks { get; } + /// /// Host hardware capabilities. @@ -113,7 +117,7 @@ namespace Ryujinx.Graphics.Gpu /// Creates a new instance of the GPU emulation context. /// /// Host renderer - public GpuContext(IRenderer renderer) + public GpuContext(IRenderer renderer, DirtyHackCollection hackCollection) { Renderer = renderer; @@ -136,6 +140,8 @@ namespace Ryujinx.Graphics.Gpu SupportBufferUpdater = new SupportBufferUpdater(renderer); + DirtyHacks = hackCollection; + _firstTimestamp = ConvertNanosecondsToTicks((ulong)PerformanceCounter.ElapsedNanoseconds); } diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index ed1cc02d3..127e532e2 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -57,9 +57,10 @@ namespace Ryujinx.HLE : MemoryAllocationFlags.Reserve | MemoryAllocationFlags.Mirrorable; #pragma warning disable IDE0055 // Disable formatting + DirtyHacks = new DirtyHackCollection(Configuration.Hacks); AudioDeviceDriver = new CompatLayerHardwareDeviceDriver(Configuration.AudioDeviceDriver); Memory = new MemoryBlock(Configuration.MemoryConfiguration.ToDramSize(), memoryAllocationFlags); - Gpu = new GpuContext(Configuration.GpuRenderer); + Gpu = new GpuContext(Configuration.GpuRenderer, DirtyHacks); System = new HOS.Horizon(this); Statistics = new PerformanceStatistics(); Hid = new Hid(this, System.HidStorage); @@ -77,7 +78,7 @@ namespace Ryujinx.HLE System.EnablePtc = Configuration.EnablePtc; System.FsIntegrityCheckLevel = Configuration.FsIntegrityCheckLevel; System.GlobalAccessLogMode = Configuration.FsGlobalAccessLogMode; - DirtyHacks = new DirtyHackCollection(Configuration.Hacks); + UpdateVSyncInterval(); #pragma warning restore IDE0055 -- 2.47.1 From eec92c242cb0826de401515e540123475099fc09 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 22:55:33 -0600 Subject: [PATCH 225/722] misc: Remove shader translation delay dirty hack from UI it doesn't do anything --- src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index b4e3437ff..a32fecfcb 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -42,7 +42,7 @@ VerticalAlignment="Center" Text="Xenoblade Chronicles 2 Menu Softlock Fix" /> - + -- 2.47.1 From 8fd8a776c9631e81cae6c4d528fe46dc63a8add9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 23:39:40 -0600 Subject: [PATCH 226/722] misc: prevent crashes --- src/Ryujinx.Common/Configuration/DirtyHacks.cs | 15 ++++++++++++--- .../UI/Views/Settings/SettingsHacksView.axaml | 4 ++-- .../Configuration/ConfigurationState.Migration.cs | 2 +- .../Configuration/ConfigurationState.Model.cs | 14 +++++++++++++- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx.Common/Configuration/DirtyHacks.cs b/src/Ryujinx.Common/Configuration/DirtyHacks.cs index 12f6b019b..d874b226c 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHacks.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHacks.cs @@ -13,13 +13,13 @@ namespace Ryujinx.Common.Configuration public record EnabledDirtyHack(DirtyHacks Hack, int Value) { - private static readonly byte[] _packedFormat = [8, 32]; + public static readonly byte[] PackedFormat = [8, 32]; - public ulong Pack() => BitTricks.PackBitFields([(uint)Hack, (uint)Value], _packedFormat); + public ulong Pack() => BitTricks.PackBitFields([(uint)Hack, (uint)Value], PackedFormat); public static EnabledDirtyHack FromPacked(ulong packedHack) { - var unpackedFields = BitTricks.UnpackBitFields(packedHack, _packedFormat); + var unpackedFields = BitTricks.UnpackBitFields(packedHack, PackedFormat); if (unpackedFields is not [var hack, var value]) throw new ArgumentException(nameof(packedHack)); @@ -45,6 +45,15 @@ namespace Ryujinx.Common.Configuration } } + public ulong[] PackEntries() => + this + .Select(it => + BitTricks.PackBitFields([(uint)it.Key, (uint)it.Value], EnabledDirtyHack.PackedFormat)) + .ToArray(); + + public static implicit operator DirtyHackCollection(EnabledDirtyHack[] hacks) => new(hacks); + public static implicit operator DirtyHackCollection(ulong[] packedHacks) => new(packedHacks); + public new int this[DirtyHacks hack] => TryGetValue(hack, out var value) ? value : -1; public bool IsEnabled(DirtyHacks hack) => ContainsKey(hack); diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index a32fecfcb..b4e3437ff 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -42,7 +42,7 @@ VerticalAlignment="Center" Text="Xenoblade Chronicles 2 Menu Softlock Fix" /> - + diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index b0664e1b6..812092688 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -752,7 +752,7 @@ namespace Ryujinx.Ava.Utilities.Configuration Hacks.ShowDirtyHacks.Value = configurationFileFormat.ShowDirtyHacks; { - EnabledDirtyHack[] hacks = configurationFileFormat.DirtyHacks.Select(EnabledDirtyHack.FromPacked).ToArray(); + EnabledDirtyHack[] hacks = (configurationFileFormat.DirtyHacks ?? []).Select(EnabledDirtyHack.FromPacked).ToArray(); Hacks.Xc2MenuSoftlockFix.Value = hacks.Any(it => it.Hack == DirtyHacks.Xc2MenuSoftlockFix); diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index 53192618e..ef3d565da 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -10,6 +10,7 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE; using System.Collections.Generic; using System.Linq; +using RyuLogger = Ryujinx.Common.Logging.Logger; namespace Ryujinx.Ava.Utilities.Configuration { @@ -644,9 +645,20 @@ namespace Ryujinx.Ava.Utilities.Configuration private void HackChanged(object sender, ReactiveEventArgs rxe) { - Ryujinx.Common.Logging.Logger.Info?.Print(LogClass.Configuration, $"EnabledDirtyHacks set to: [{EnabledHacks.Select(x => x.Hack).JoinToString(", ")}]", "LogValueChange"); + var newHacks = EnabledHacks.Select(x => x.Hack) + .JoinToString(", "); + + if (newHacks != _lastHackCollection) + { + RyuLogger.Info?.Print(LogClass.Configuration, + $"EnabledDirtyHacks set to: [{_lastHackCollection}]", "LogValueChange"); + + _lastHackCollection = newHacks; + } } + private static string _lastHackCollection; + public EnabledDirtyHack[] EnabledHacks { get -- 2.47.1 From 8e4a77aba09652b0579fe5da5f1e7b3caaae7556 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 00:09:19 -0600 Subject: [PATCH 227/722] UI: Text in the shader translation slider tooltip --- src/Ryujinx/UI/ViewModels/SettingsViewModel.cs | 4 +++- src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 0afa01fc2..8126b3c7d 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -300,6 +300,8 @@ namespace Ryujinx.Ava.UI.ViewModels OnPropertyChanged(); } } + + public string ShaderTranslationDelayTooltipText => $"Current value: {ShaderTranslationDelay}"; public int ShaderTranslationDelay { @@ -308,7 +310,7 @@ namespace Ryujinx.Ava.UI.ViewModels { _shaderTranslationSleepDelay = value; - OnPropertyChanged(); + OnPropertiesChanged(nameof(ShaderTranslationDelay), nameof(ShaderTranslationDelayTooltipText)); } } diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index b4e3437ff..c6a61dfad 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -56,7 +56,7 @@ Date: Mon, 30 Dec 2024 00:09:31 -0600 Subject: [PATCH 228/722] misc: chore: Cleanup DummyHardwareDeviceDriver.cs --- .../Backends/Dummy/DummyHardwareDeviceDriver.cs | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs b/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs index 3a3c1d1b1..5991b816f 100644 --- a/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs +++ b/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs @@ -9,20 +9,12 @@ namespace Ryujinx.Audio.Backends.Dummy { public class DummyHardwareDeviceDriver : IHardwareDeviceDriver { - private readonly ManualResetEvent _updateRequiredEvent; - private readonly ManualResetEvent _pauseEvent; + private readonly ManualResetEvent _updateRequiredEvent = new(false); + private readonly ManualResetEvent _pauseEvent = new(true); public static bool IsSupported => true; - public float Volume { get; set; } - - public DummyHardwareDeviceDriver() - { - _updateRequiredEvent = new ManualResetEvent(false); - _pauseEvent = new ManualResetEvent(true); - - Volume = 1f; - } + public float Volume { get; set; } = 1f; public IHardwareDeviceSession OpenDeviceSession(Direction direction, IVirtualMemoryManager memoryManager, SampleFormat sampleFormat, uint sampleRate, uint channelCount) { @@ -60,7 +52,7 @@ namespace Ryujinx.Audio.Backends.Dummy Dispose(true); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { if (disposing) { -- 2.47.1 From da8ea060742fce81d1767c595478c3700fe39f84 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 00:14:55 -0600 Subject: [PATCH 229/722] misc: Small cleanups --- src/Ryujinx.Common/Configuration/DirtyHacks.cs | 4 ++-- .../Configuration/ConfigurationState.Migration.cs | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx.Common/Configuration/DirtyHacks.cs b/src/Ryujinx.Common/Configuration/DirtyHacks.cs index d874b226c..1015e95d1 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHacks.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHacks.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Common.Configuration public ulong Pack() => BitTricks.PackBitFields([(uint)Hack, (uint)Value], PackedFormat); - public static EnabledDirtyHack FromPacked(ulong packedHack) + public static EnabledDirtyHack Unpack(ulong packedHack) { var unpackedFields = BitTricks.UnpackBitFields(packedHack, PackedFormat); if (unpackedFields is not [var hack, var value]) @@ -39,7 +39,7 @@ namespace Ryujinx.Common.Configuration public DirtyHackCollection(ulong[] packedHacks) { - foreach ((DirtyHacks dirtyHacks, int value) in packedHacks.Select(EnabledDirtyHack.FromPacked)) + foreach ((DirtyHacks dirtyHacks, int value) in packedHacks.Select(EnabledDirtyHack.Unpack)) { Add(dirtyHacks, value); } diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 812092688..c16872a61 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -752,11 +752,12 @@ namespace Ryujinx.Ava.Utilities.Configuration Hacks.ShowDirtyHacks.Value = configurationFileFormat.ShowDirtyHacks; { - EnabledDirtyHack[] hacks = (configurationFileFormat.DirtyHacks ?? []).Select(EnabledDirtyHack.FromPacked).ToArray(); + EnabledDirtyHack[] hacks = (configurationFileFormat.DirtyHacks ?? []).Select(EnabledDirtyHack.Unpack).ToArray(); Hacks.Xc2MenuSoftlockFix.Value = hacks.Any(it => it.Hack == DirtyHacks.Xc2MenuSoftlockFix); - - var shaderCompilationThreadSleep = hacks.FirstOrDefault(it => it.Hack == DirtyHacks.ShaderCompilationThreadSleep); + + var shaderCompilationThreadSleep = hacks.FirstOrDefault(it => + it.Hack == DirtyHacks.ShaderCompilationThreadSleep); Hacks.EnableShaderCompilationThreadSleep.Value = shaderCompilationThreadSleep != null; Hacks.ShaderCompilationThreadSleepDelay.Value = shaderCompilationThreadSleep?.Value ?? 0; } -- 2.47.1 From 4082ebad1a82de3a9f8a201a744d85578aead994 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 00:35:43 -0600 Subject: [PATCH 230/722] Fix PR builds --- distribution/linux/appimage/build-appimage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/linux/appimage/build-appimage.sh b/distribution/linux/appimage/build-appimage.sh index 5c32d78a8..9b52928f8 100755 --- a/distribution/linux/appimage/build-appimage.sh +++ b/distribution/linux/appimage/build-appimage.sh @@ -13,7 +13,7 @@ mkdir -p AppDir/usr/bin cp distribution/linux/Ryujinx.desktop AppDir/Ryujinx.desktop cp distribution/linux/appimage/AppRun AppDir/AppRun -cp src/Ryujinx.UI.Common/Resources/Logo_Ryujinx.png AppDir/Ryujinx.svg +cp distribution/misc/Logo.svg AppDir/Ryujinx.svg cp -r "$BUILDDIR"/* AppDir/usr/bin/ -- 2.47.1 From ec1020b165502145afca2089a44b21ec305d2108 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 01:10:40 -0600 Subject: [PATCH 231/722] UI: Dirty hacks clarification [ci skip] --- src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index c6a61dfad..b597706df 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -29,7 +29,7 @@ + Text="Game-specific hacks & tricks to alleviate performance issues or crashing. Will cause issues." /> Date: Mon, 30 Dec 2024 08:12:51 +0100 Subject: [PATCH 232/722] Shader translation delay hack (#469) A workaround to avoid a freeze when translating shaders with the Metal backend, that would happen after changing version or going from Vulkan to Metal. Adds a delay in milliseconds, configurable in the UI behind the Dirty Hacks mechanism. --------- Co-authored-by: Evan Husted --- .../Shader/DiskCache/ParallelDiskCacheLoader.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 74922d1e3..9aa96a76f 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Shader; @@ -366,6 +367,9 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { try { + if (_context.DirtyHacks.IsEnabled(DirtyHacks.ShaderCompilationThreadSleep)) + Thread.Sleep(_context.DirtyHacks[DirtyHacks.ShaderCompilationThreadSleep]); + AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute); _asyncTranslationQueue.Add(asyncTranslation, _cancellationToken); } -- 2.47.1 From 0ab5b41c4b2a3dc01ec04a5a72d8ba4374ad2581 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 01:33:07 -0600 Subject: [PATCH 233/722] misc: Move dirty hack related stuff into a separate viewmodel, only show slider when translation delay is enabled. --- .../UI/ViewModels/SettingsHacksViewModel.cs | 77 +++++++++++++++++++ .../UI/ViewModels/SettingsViewModel.cs | 75 +++--------------- .../UI/Views/Settings/SettingsHacksView.axaml | 15 ++-- .../Views/Settings/SettingsHacksView.axaml.cs | 4 - .../UI/Windows/SettingsWindow.axaml.cs | 2 +- .../ConfigurationState.Migration.cs | 4 +- .../Configuration/ConfigurationState.Model.cs | 16 ++-- 7 files changed, 108 insertions(+), 85 deletions(-) create mode 100644 src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs new file mode 100644 index 000000000..b93cdd6dc --- /dev/null +++ b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs @@ -0,0 +1,77 @@ +using Gommon; +using Ryujinx.Ava.Utilities.Configuration; + +namespace Ryujinx.Ava.UI.ViewModels +{ + public class SettingsHacksViewModel : BaseModel + { + private readonly SettingsViewModel _baseViewModel; + + public SettingsHacksViewModel() {} + + public SettingsHacksViewModel(SettingsViewModel settingsVm) + { + _baseViewModel = settingsVm; + } + + private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; + private bool _shaderTranslationThreadSleep = ConfigurationState.Instance.Hacks.EnableShaderTranslationDelay; + private int _shaderTranslationSleepDelay = ConfigurationState.Instance.Hacks.ShaderTranslationDelay; + + public bool Xc2MenuSoftlockFixEnabled + { + get => _xc2MenuSoftlockFix; + set + { + _xc2MenuSoftlockFix = value; + + OnPropertyChanged(); + } + } + + public bool ShaderTranslationDelayEnabled + { + get => _shaderTranslationThreadSleep; + set + { + _shaderTranslationThreadSleep = value; + + OnPropertyChanged(); + } + } + + public string ShaderTranslationDelayTooltipText => $"Current value: {ShaderTranslationDelay}"; + + public int ShaderTranslationDelay + { + get => _shaderTranslationSleepDelay; + set + { + _shaderTranslationSleepDelay = value; + + OnPropertiesChanged(nameof(ShaderTranslationDelay), nameof(ShaderTranslationDelayTooltipText)); + } + } + + public static string Xc2MenuFixTooltip { get; } = Lambda.String(sb => + { + sb.AppendLine( + "This fix applies a 2ms delay (via 'Thread.Sleep(2)') every time the game tries to read data from the emulated Switch filesystem.") + .AppendLine(); + + sb.AppendLine("From the issue on GitHub:").AppendLine(); + sb.Append( + "When clicking very fast from game main menu to 2nd submenu, " + + "there is a low chance that the game will softlock, " + + "the submenu won't show up, while background music is still there."); + }); + + public static string ShaderTranslationDelayTooltip { get; } = Lambda.String(sb => + { + sb.AppendLine("This hack applies the delay you specify every time shaders are attempted to be translated.") + .AppendLine(); + + sb.Append("Configurable via slider, only when this option is enabled."); + }); + } +} diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 8126b3c7d..a5bdd2f88 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -65,9 +65,7 @@ namespace Ryujinx.Ava.UI.ViewModels private string _ldnPassphrase; private string _ldnServer; - private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; - private bool _shaderTranslationThreadSleep = ConfigurationState.Instance.Hacks.EnableShaderCompilationThreadSleep; - private int _shaderTranslationSleepDelay = ConfigurationState.Instance.Hacks.ShaderCompilationThreadSleepDelay; + public SettingsHacksViewModel DirtyHacks { get; } public int ResolutionScale { @@ -279,41 +277,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public bool Xc2MenuSoftlockFixEnabled - { - get => _xc2MenuSoftlockFix; - set - { - _xc2MenuSoftlockFix = value; - - OnPropertyChanged(); - } - } - - public bool ShaderTranslationDelayEnabled - { - get => _shaderTranslationThreadSleep; - set - { - _shaderTranslationThreadSleep = value; - - OnPropertyChanged(); - } - } - - public string ShaderTranslationDelayTooltipText => $"Current value: {ShaderTranslationDelay}"; - - public int ShaderTranslationDelay - { - get => _shaderTranslationSleepDelay; - set - { - _shaderTranslationSleepDelay = value; - - OnPropertiesChanged(nameof(ShaderTranslationDelay), nameof(ShaderTranslationDelayTooltipText)); - } - } - public int Language { get; set; } public int Region { get; set; } public int FsGlobalAccessLogMode { get; set; } @@ -426,9 +389,12 @@ namespace Ryujinx.Ava.UI.ViewModels { _virtualFileSystem = virtualFileSystem; _contentManager = contentManager; + if (Program.PreviewerDetached) { Task.Run(LoadTimeZones); + + DirtyHacks = new SettingsHacksViewModel(this); } } @@ -448,6 +414,8 @@ namespace Ryujinx.Ava.UI.ViewModels { Task.Run(LoadAvailableGpus); LoadCurrentConfiguration(); + + DirtyHacks = new SettingsHacksViewModel(this); } } @@ -662,9 +630,9 @@ namespace Ryujinx.Ava.UI.ViewModels OpenglDebugLevel = (int)config.Logger.GraphicsDebugLevel.Value; MultiplayerModeIndex = (int)config.Multiplayer.Mode.Value; - DisableP2P = config.Multiplayer.DisableP2p.Value; - LdnPassphrase = config.Multiplayer.LdnPassphrase.Value; - LdnServer = config.Multiplayer.LdnServer.Value; + DisableP2P = config.Multiplayer.DisableP2p; + LdnPassphrase = config.Multiplayer.LdnPassphrase; + LdnServer = config.Multiplayer.LdnServer; } public void SaveSettings() @@ -788,9 +756,9 @@ namespace Ryujinx.Ava.UI.ViewModels config.Multiplayer.LdnServer.Value = LdnServer; // Dirty Hacks - config.Hacks.Xc2MenuSoftlockFix.Value = Xc2MenuSoftlockFixEnabled; - config.Hacks.EnableShaderCompilationThreadSleep.Value = ShaderTranslationDelayEnabled; - config.Hacks.ShaderCompilationThreadSleepDelay.Value = ShaderTranslationDelay; + config.Hacks.Xc2MenuSoftlockFix.Value = DirtyHacks.Xc2MenuSoftlockFixEnabled; + config.Hacks.EnableShaderTranslationDelay.Value = DirtyHacks.ShaderTranslationDelayEnabled; + config.Hacks.ShaderTranslationDelay.Value = DirtyHacks.ShaderTranslationDelay; config.ToFileFormat().SaveConfig(Program.ConfigurationPath); @@ -824,24 +792,5 @@ namespace Ryujinx.Ava.UI.ViewModels RevertIfNotSaved(); CloseWindow?.Invoke(); } - - public static string Xc2MenuFixTooltip { get; } = Lambda.String(sb => - { - sb.AppendLine( - "This fix applies a 2ms delay (via 'Thread.Sleep(2)') every time the game tries to read data from the emulated Switch filesystem.") - .AppendLine(); - - sb.AppendLine("From the issue on GitHub:").AppendLine(); - sb.Append( - "When clicking very fast from game main menu to 2nd submenu, " + - "there is a low chance that the game will softlock, " + - "the submenu won't show up, while background music is still there."); - }); - - public static string ShaderTranslationDelayTooltip { get; } = Lambda.String(sb => - { - sb.Append( - "This hack applies the delay you specify every time shaders are attempted to be translated."); - }); } } diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index b597706df..087112368 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -34,10 +34,10 @@ Margin="0,10,0,0" Orientation="Horizontal" HorizontalAlignment="Center" - ToolTip.Tip="{Binding Xc2MenuFixTooltip}"> + ToolTip.Tip="{Binding DirtyHacks.Xc2MenuFixTooltip}"> + IsChecked="{Binding DirtyHacks.Xc2MenuSoftlockFixEnabled}"/> @@ -47,16 +47,17 @@ Margin="0,10,0,0" Orientation="Horizontal" HorizontalAlignment="Center" - ToolTip.Tip="{Binding ShaderTranslationDelayTooltip}"> + ToolTip.Tip="{Binding DirtyHacks.ShaderTranslationDelayTooltip}"> + IsChecked="{Binding DirtyHacks.ShaderTranslationDelayEnabled}"/> - it.Hack == DirtyHacks.ShaderCompilationThreadSleep); - Hacks.EnableShaderCompilationThreadSleep.Value = shaderCompilationThreadSleep != null; - Hacks.ShaderCompilationThreadSleepDelay.Value = shaderCompilationThreadSleep?.Value ?? 0; + Hacks.EnableShaderTranslationDelay.Value = shaderCompilationThreadSleep != null; + Hacks.ShaderTranslationDelay.Value = shaderCompilationThreadSleep?.Value ?? 0; } if (configurationFileUpdated) diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index ef3d565da..2a91bf65b 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -629,18 +629,18 @@ namespace Ryujinx.Ava.Utilities.Configuration public ReactiveObject Xc2MenuSoftlockFix { get; private set; } - public ReactiveObject EnableShaderCompilationThreadSleep { get; private set; } + public ReactiveObject EnableShaderTranslationDelay { get; private set; } - public ReactiveObject ShaderCompilationThreadSleepDelay { get; private set; } + public ReactiveObject ShaderTranslationDelay { get; private set; } public HacksSection() { ShowDirtyHacks = new ReactiveObject(); Xc2MenuSoftlockFix = new ReactiveObject(); Xc2MenuSoftlockFix.Event += HackChanged; - EnableShaderCompilationThreadSleep = new ReactiveObject(); - EnableShaderCompilationThreadSleep.Event += HackChanged; - ShaderCompilationThreadSleepDelay = new ReactiveObject(); + EnableShaderTranslationDelay = new ReactiveObject(); + EnableShaderTranslationDelay.Event += HackChanged; + ShaderTranslationDelay = new ReactiveObject(); } private void HackChanged(object sender, ReactiveEventArgs rxe) @@ -651,7 +651,7 @@ namespace Ryujinx.Ava.Utilities.Configuration if (newHacks != _lastHackCollection) { RyuLogger.Info?.Print(LogClass.Configuration, - $"EnabledDirtyHacks set to: [{_lastHackCollection}]", "LogValueChange"); + $"EnabledDirtyHacks set to: [{newHacks}]", "LogValueChange"); _lastHackCollection = newHacks; } @@ -668,8 +668,8 @@ namespace Ryujinx.Ava.Utilities.Configuration if (Xc2MenuSoftlockFix) Apply(DirtyHacks.Xc2MenuSoftlockFix); - if (EnableShaderCompilationThreadSleep) - Apply(DirtyHacks.ShaderCompilationThreadSleep, ShaderCompilationThreadSleepDelay); + if (EnableShaderTranslationDelay) + Apply(DirtyHacks.ShaderCompilationThreadSleep, ShaderTranslationDelay); return enabledHacks.ToArray(); -- 2.47.1 From e486b902b1ce0fcad8d76701b24784072e343160 Mon Sep 17 00:00:00 2001 From: WilliamWsyHK Date: Mon, 30 Dec 2024 15:53:06 +0800 Subject: [PATCH 234/722] Skip processing application for LDN if it does not have control holder (#460) [ci-skip] --- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 0b1c356d4..e5a815b28 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -170,7 +170,7 @@ namespace Ryujinx.Ava.UI.Windows { var ldnGameDataArray = e.LdnData.ToList(); ViewModel.LdnData.Clear(); - foreach (var application in ViewModel.Applications) + foreach (var application in ViewModel.Applications.Where(it => it.HasControlHolder)) { ref var controlHolder = ref application.ControlHolder.Value; -- 2.47.1 From 699e1962b1427b296b2c408211ccf31ec00a141f Mon Sep 17 00:00:00 2001 From: Marco Carvalho Date: Mon, 30 Dec 2024 04:53:43 -0300 Subject: [PATCH 235/722] Prefer 'Convert.ToHexString' over call chains based on 'BitConverter.ToString' (#428) [ci-skip] Co-authored-by: Evan Husted --- .../Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs index 03063cb53..dffcf9c3f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs @@ -114,10 +114,10 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption } } - string usedCharacterStr = BitConverter.ToString(usedCharacter).Replace("-", ""); - string variationStr = BitConverter.ToString(variation).Replace("-", ""); - string amiiboIDStr = BitConverter.ToString(amiiboID).Replace("-", ""); - string setIDStr = BitConverter.ToString(setID).Replace("-", ""); + string usedCharacterStr = Convert.ToHexString(usedCharacter); + string variationStr = Convert.ToHexString(variation); + string amiiboIDStr = Convert.ToHexString(amiiboID); + string setIDStr = Convert.ToHexString(setID); string head = usedCharacterStr + variationStr; string tail = amiiboIDStr + setIDStr + "02"; string finalID = head + tail; @@ -289,8 +289,8 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption private static void LogFinalData(byte[] titleId, byte[] appId, string head, string tail, string finalID, string nickName, DateTime initDateTime, DateTime writeDateTime, ushort settingsValue, ushort writeCounterValue, byte[] applicationAreas) { - Logger.Debug?.Print(LogClass.ServiceNfp, $"Title ID: 0x{BitConverter.ToString(titleId).Replace("-", "")}"); - Logger.Debug?.Print(LogClass.ServiceNfp, $"Application Program ID: 0x{BitConverter.ToString(appId).Replace("-", "")}"); + Logger.Debug?.Print(LogClass.ServiceNfp, $"Title ID: 0x{Convert.ToHexString(titleId)}"); + Logger.Debug?.Print(LogClass.ServiceNfp, $"Application Program ID: 0x{Convert.ToHexString(appId)}"); Logger.Debug?.Print(LogClass.ServiceNfp, $"Head: {head}"); Logger.Debug?.Print(LogClass.ServiceNfp, $"Tail: {tail}"); Logger.Debug?.Print(LogClass.ServiceNfp, $"Final ID: {finalID}"); -- 2.47.1 From b2e1e553e419dc7bd2212e347a9acedaa2464595 Mon Sep 17 00:00:00 2001 From: LotP1 <68976644+LotP1@users.noreply.github.com> Date: Mon, 30 Dec 2024 08:54:25 +0100 Subject: [PATCH 236/722] Validation Project v2 (#444) Refactor of the Validation System for more ease of use in the future. The project now builds a standalone executable and executes it before the main project is built or published. Since it is now a standalone executable we are also able to use .NET Core features as we are no longer locked to netstandard. The project currently includes 1 task, LocalesValidationTask, that will check if the locales.json file has any of the following issues: The json is invalid. The json has locales with missing languages. The json has locales with langauges that are just duplicates of the en_US field. If the project is built or published locally it will also fix any missing languages or duplicate fields. --------- Co-authored-by: Evan Husted Co-authored-by: Evan Husted --- Ryujinx.sln | 5 +- .../LocaleValidationTask.cs | 73 ----- .../LocalesValidationTask.cs | 117 +++++++ src/Ryujinx.BuildValidationTasks/Program.cs | 37 +++ .../Ryujinx.BuildValidationTasks.csproj | 19 +- .../ValidationTask.cs | 7 + src/Ryujinx/Assets/locales.json | 298 +++++++++--------- src/Ryujinx/Ryujinx.csproj | 10 +- 8 files changed, 327 insertions(+), 239 deletions(-) delete mode 100644 src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs create mode 100644 src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs create mode 100644 src/Ryujinx.BuildValidationTasks/Program.cs create mode 100644 src/Ryujinx.BuildValidationTasks/ValidationTask.cs diff --git a/Ryujinx.sln b/Ryujinx.sln index 373572178..9e197e85f 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -249,13 +249,12 @@ Global {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs deleted file mode 100644 index 6dc3d8aa8..000000000 --- a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using Microsoft.Build.Utilities; -using System.Collections.Generic; -using System.Linq; -using System.IO; -using Newtonsoft.Json; -using Microsoft.Build.Framework; - -namespace Ryujinx.BuildValidationTasks -{ - public class LocaleValidationTask : Task - { - public override bool Execute() - { - string path = System.Reflection.Assembly.GetExecutingAssembly().Location; - - if (path.Split(["src"], StringSplitOptions.None).Length == 1) - { - //i assume that we are in a build directory in the solution dir - path = new FileInfo(path).Directory!.Parent!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; - } - else - { - path = path.Split(["src"], StringSplitOptions.None)[0]; - path = new FileInfo(path).Directory!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; - } - - string data; - - using (StreamReader sr = new(path)) - { - data = sr.ReadToEnd(); - } - - LocalesJson json = JsonConvert.DeserializeObject(data); - - for (int i = 0; i < json.Locales.Count; i++) - { - LocalesEntry locale = json.Locales[i]; - - foreach (string langCode in json.Languages.Where(it => !locale.Translations.ContainsKey(it))) - { - locale.Translations.Add(langCode, string.Empty); - Log.LogMessage(MessageImportance.High, $"Added '{langCode}' to Locale '{locale.ID}'"); - } - - locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); - json.Locales[i] = locale; - } - - string jsonString = JsonConvert.SerializeObject(json, Formatting.Indented); - - using (StreamWriter sw = new(path)) - { - sw.Write(jsonString); - } - - return true; - } - - struct LocalesJson - { - public List Languages { get; set; } - public List Locales { get; set; } - } - - struct LocalesEntry - { - public string ID { get; set; } - public Dictionary Translations { get; set; } - } - } -} diff --git a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs new file mode 100644 index 000000000..05eaee539 --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.IO; +using System.Text.Json; +using System.Text.Encodings.Web; + +namespace Ryujinx.BuildValidationTasks +{ + public class LocalesValidationTask : ValidationTask + { + public LocalesValidationTask() { } + + public bool Execute(string projectPath, bool isGitRunner) + { + Console.WriteLine("Running Locale Validation Task..."); + + string path = projectPath + "src/Ryujinx/Assets/locales.json"; + string data; + + using (StreamReader sr = new(path)) + { + data = sr.ReadToEnd(); + } + + LocalesJson json; + + if (isGitRunner && data.Contains("\r\n")) + throw new FormatException("locales.json is using CRLF line endings! It should be using LF line endings, build locally to fix..."); + + try + { + json = JsonSerializer.Deserialize(data); + + } + catch (JsonException e) + { + throw new JsonException(e.Message); //shorter and easier stacktrace + } + + + + bool encounteredIssue = false; + + for (int i = 0; i < json.Locales.Count; i++) + { + LocalesEntry locale = json.Locales[i]; + + foreach (string langCode in json.Languages.Where(lang => !locale.Translations.ContainsKey(lang))) + { + encounteredIssue = true; + + if (!isGitRunner) + { + locale.Translations.Add(langCode, string.Empty); + Console.WriteLine($"Added '{langCode}' to Locale '{locale.ID}'"); + } + else + { + Console.WriteLine($"Missing '{langCode}' in Locale '{locale.ID}'!"); + } + } + + foreach (string langCode in json.Languages.Where(lang => locale.Translations.ContainsKey(lang) && lang != "en_US" && locale.Translations[lang] == locale.Translations["en_US"])) + { + encounteredIssue = true; + + if (!isGitRunner) + { + locale.Translations[langCode] = string.Empty; + Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'! Resetting it..."); + } + else + { + Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'!"); + } + } + + locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); + json.Locales[i] = locale; + } + + if (isGitRunner && encounteredIssue) + throw new JsonException("1 or more locales are invalid!"); + + JsonSerializerOptions jsonOptions = new JsonSerializerOptions() + { + WriteIndented = true, + NewLine = "\n", + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping + }; + + string jsonString = JsonSerializer.Serialize(json, jsonOptions); + + using (StreamWriter sw = new(path)) + { + sw.Write(jsonString); + } + + Console.WriteLine("Finished Locale Validation Task!"); + + return true; + } + + struct LocalesJson + { + public List Languages { get; set; } + public List Locales { get; set; } + } + + struct LocalesEntry + { + public string ID { get; set; } + public Dictionary Translations { get; set; } + } + } +} diff --git a/src/Ryujinx.BuildValidationTasks/Program.cs b/src/Ryujinx.BuildValidationTasks/Program.cs new file mode 100644 index 000000000..ed1cee490 --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/Program.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using System.Linq; + +namespace Ryujinx.BuildValidationTasks +{ + public class Program + { + static void Main(string[] args) + { + // Display the number of command line arguments. + if (args.Length == 0) + throw new ArgumentException("Error: too few arguments!"); + + string path = args[0]; + + if (string.IsNullOrEmpty(path)) + throw new ArgumentException("Error: path is null or empty!"); + + if (!Path.Exists(path)) + throw new FileLoadException($"path {{{path}}} does not exist!"); + + path = Path.GetFullPath(path); + + if (!Directory.GetDirectories(path).Contains($"{path}src")) + throw new FileLoadException($"path {{{path}}} is not a valid ryujinx project!"); + + bool isGitRunner = path.Contains("runner") || path.Contains("D:\\a\\Ryujinx\\Ryujinx"); + if (isGitRunner) + Console.WriteLine("Is Git Runner!"); + + // Run tasks + // Pass extra info needed in the task constructors + new LocalesValidationTask().Execute(path, isGitRunner); + } + } +} diff --git a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj index dbd9492df..d77f3f204 100644 --- a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj +++ b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj @@ -1,19 +1,16 @@ - netstandard2.0 - true + Exe - - - - + + - - - - + - + \ No newline at end of file diff --git a/src/Ryujinx.BuildValidationTasks/ValidationTask.cs b/src/Ryujinx.BuildValidationTasks/ValidationTask.cs new file mode 100644 index 000000000..f11c87f3b --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/ValidationTask.cs @@ -0,0 +1,7 @@ +namespace Ryujinx.BuildValidationTasks +{ + public interface ValidationTask + { + public bool Execute(string projectPath, bool isGitRunner); + } +} diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 6bede7999..31cba38dd 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1564,7 +1564,7 @@ "pl_PL": "Wersja", "pt_BR": "Versão", "ru_RU": "Версия", - "sv_SE": "Version", + "sv_SE": "", "th_TH": "เวอร์ชั่น", "tr_TR": "Sürüm", "uk_UA": "Версія", @@ -2213,8 +2213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "ExeFS", - "sv_SE": "ExeFS", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2263,8 +2263,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "RomFS", - "sv_SE": "RomFS", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2310,7 +2310,7 @@ "it_IT": "", "ja_JP": "ロゴ", "ko_KR": "로고", - "no_NO": "Logo", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "Лого", @@ -3260,11 +3260,11 @@ "it_IT": "Sistema", "ja_JP": "システム", "ko_KR": "시스템", - "no_NO": "System", + "no_NO": "", "pl_PL": "", "pt_BR": "Sistema", "ru_RU": "Система", - "sv_SE": "System", + "sv_SE": "", "th_TH": "ระบบ", "tr_TR": "Sistem", "uk_UA": "Система", @@ -3335,11 +3335,11 @@ "it_IT": "Giappone", "ja_JP": "日本", "ko_KR": "일본", - "no_NO": "Japan", + "no_NO": "", "pl_PL": "Japonia", "pt_BR": "Japão", "ru_RU": "Япония", - "sv_SE": "Japan", + "sv_SE": "", "th_TH": "ญี่ปุ่น", "tr_TR": "Japonya", "uk_UA": "Японія", @@ -3360,11 +3360,11 @@ "it_IT": "Stati Uniti d'America", "ja_JP": "アメリカ", "ko_KR": "미국", - "no_NO": "USA", + "no_NO": "", "pl_PL": "Stany Zjednoczone", "pt_BR": "EUA", "ru_RU": "США", - "sv_SE": "USA", + "sv_SE": "", "th_TH": "สหรัฐอเมริกา", "tr_TR": "ABD", "uk_UA": "США", @@ -3410,7 +3410,7 @@ "it_IT": "", "ja_JP": "オーストラリア", "ko_KR": "호주", - "no_NO": "Australia", + "no_NO": "", "pl_PL": "", "pt_BR": "Austrália", "ru_RU": "Австралия", @@ -3460,11 +3460,11 @@ "it_IT": "Corea", "ja_JP": "韓国", "ko_KR": "한국", - "no_NO": "Korea", + "no_NO": "", "pl_PL": "", "pt_BR": "Coreia", "ru_RU": "Корея", - "sv_SE": "Korea", + "sv_SE": "", "th_TH": "เกาหลี", "tr_TR": "Kore", "uk_UA": "Корея", @@ -3485,11 +3485,11 @@ "it_IT": "", "ja_JP": "台湾", "ko_KR": "대만", - "no_NO": "Taiwan", + "no_NO": "", "pl_PL": "Tajwan", "pt_BR": "", "ru_RU": "Тайвань", - "sv_SE": "Taiwan", + "sv_SE": "", "th_TH": "ไต้หวัน", "tr_TR": "Tayvan", "uk_UA": "Тайвань", @@ -3955,7 +3955,7 @@ "el_GR": "Ζώνη Ώρας Συστήματος:", "en_US": "System Time Zone:", "es_ES": "Zona horaria del sistema:", - "fr_FR": "Fuseau horaire du système :", + "fr_FR": "Fuseau horaire du système\u00A0:", "he_IL": "אזור זמן מערכת:", "it_IT": "Fuso orario del sistema:", "ja_JP": "タイムゾーン:", @@ -4135,11 +4135,11 @@ "it_IT": "", "ja_JP": "ダミー", "ko_KR": "더미", - "no_NO": "Dummy", + "no_NO": "", "pl_PL": "Atrapa", "pt_BR": "Nenhuma", "ru_RU": "Без звука", - "sv_SE": "Dummy", + "sv_SE": "", "th_TH": "", "tr_TR": "Yapay", "uk_UA": "", @@ -4163,8 +4163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "OpenAL", - "sv_SE": "OpenAL", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4188,8 +4188,8 @@ "no_NO": "Lyd Inn/Ut", "pl_PL": "", "pt_BR": "", - "ru_RU": "SoundIO", - "sv_SE": "SoundIO", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4213,8 +4213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "SDL2", - "sv_SE": "SDL2", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4230,12 +4230,12 @@ "el_GR": "Μικροδιορθώσεις", "en_US": "Hacks", "es_ES": "", - "fr_FR": "Hacks", + "fr_FR": "", "he_IL": "האצות", "it_IT": "Espedienti", "ja_JP": "ハック", "ko_KR": "핵", - "no_NO": "Hacks", + "no_NO": "", "pl_PL": "Hacki", "pt_BR": "", "ru_RU": "Хаки", @@ -4314,7 +4314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "4ГиБ", - "sv_SE": "4GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "4Гб", @@ -4339,7 +4339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "6ГиБ", - "sv_SE": "6GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "6Гб", @@ -4364,7 +4364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "8ГиБ", - "sv_SE": "8GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "8Гб", @@ -4389,7 +4389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "12ГиБ", - "sv_SE": "12GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "12Гб", @@ -4585,11 +4585,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배", - "no_NO": "2x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2x", - "sv_SE": "2x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4610,11 +4610,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "4배", - "no_NO": "4x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4x", - "sv_SE": "4x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4635,11 +4635,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "8배", - "no_NO": "8x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "8x", - "sv_SE": "8x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4660,11 +4660,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "16배", - "no_NO": "16x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16x", - "sv_SE": "16x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4760,11 +4760,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배(1440p/2160p)", - "no_NO": "2x (1440p/2160p)", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2x (1440p/2160p)", - "sv_SE": "2x (1440p/2160p)", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4785,11 +4785,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "3배(2160p/3240p)", - "no_NO": "3x (2160p/3240p)", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "3x (2160p/3240p)", - "sv_SE": "3x (2160p/3240p)", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4863,8 +4863,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4:3", - "sv_SE": "4:3", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4888,8 +4888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16:9", - "sv_SE": "16:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4913,8 +4913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16:10", - "sv_SE": "16:10", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4938,8 +4938,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "21:9", - "sv_SE": "21:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4960,11 +4960,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "32:9", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "32:9", - "sv_SE": "32:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -5060,7 +5060,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "Logging", + "no_NO": "", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -5085,7 +5085,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "Logging", + "no_NO": "", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -6113,8 +6113,8 @@ "no_NO": "", "pl_PL": "Pro Kontroler", "pt_BR": "", - "ru_RU": "Pro Controller", - "sv_SE": "Pro Controller", + "ru_RU": "", + "sv_SE": "", "th_TH": "โปรคอนโทรลเลอร์", "tr_TR": "Profesyonel Kumanda", "uk_UA": "Контролер Pro", @@ -8088,8 +8088,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Enter", - "sv_SE": "Enter", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8114,7 +8114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Esc", - "sv_SE": "Escape", + "sv_SE": "", "th_TH": "", "tr_TR": "Esc", "uk_UA": "", @@ -8163,8 +8163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Tab", - "sv_SE": "Tab", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8188,8 +8188,8 @@ "no_NO": "Tilbaketast", "pl_PL": "", "pt_BR": "", - "ru_RU": "Backspace", - "sv_SE": "Backspace", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "Geri tuşu", "uk_UA": "", @@ -8213,8 +8213,8 @@ "no_NO": "Sett inn", "pl_PL": "", "pt_BR": "", - "ru_RU": "Insert", - "sv_SE": "Insert", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8238,8 +8238,8 @@ "no_NO": "Slett", "pl_PL": "", "pt_BR": "", - "ru_RU": "Delete", - "sv_SE": "Delete", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8263,8 +8263,8 @@ "no_NO": "Side opp", "pl_PL": "", "pt_BR": "", - "ru_RU": "Page Up", - "sv_SE": "Page Up", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8288,8 +8288,8 @@ "no_NO": "Side ned", "pl_PL": "", "pt_BR": "", - "ru_RU": "Page Down", - "sv_SE": "Page Down", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8313,8 +8313,8 @@ "no_NO": "Hjem", "pl_PL": "", "pt_BR": "", - "ru_RU": "Home", - "sv_SE": "Home", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8338,8 +8338,8 @@ "no_NO": "Avslutt", "pl_PL": "", "pt_BR": "", - "ru_RU": "End", - "sv_SE": "End", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8363,8 +8363,8 @@ "no_NO": "Skiftelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Caps Lock", - "sv_SE": "Caps Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8388,8 +8388,8 @@ "no_NO": "Rullelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Scroll Lock", - "sv_SE": "Scroll Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8413,8 +8413,8 @@ "no_NO": "Skjermbilde", "pl_PL": "", "pt_BR": "", - "ru_RU": "Print Screen", - "sv_SE": "Print Screen", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8438,8 +8438,8 @@ "no_NO": "Stans midlertidig", "pl_PL": "", "pt_BR": "", - "ru_RU": "Pause", - "sv_SE": "Pause", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8463,8 +8463,8 @@ "no_NO": "Numerisk Lås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Num Lock", - "sv_SE": "Num Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8514,7 +8514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 0", - "sv_SE": "Keypad 0", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8539,7 +8539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 1", - "sv_SE": "Keypad 1", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8564,7 +8564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 2", - "sv_SE": "Keypad 2", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8589,7 +8589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 3", - "sv_SE": "Keypad 3", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8614,7 +8614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 4", - "sv_SE": "Keypad 4", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8639,7 +8639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 5", - "sv_SE": "Keypad 5", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8664,7 +8664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 6", - "sv_SE": "Keypad 6", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8689,7 +8689,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 7", - "sv_SE": "Keypad 7", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8714,7 +8714,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 8", - "sv_SE": "Keypad 8", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8739,7 +8739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 9", - "sv_SE": "Keypad 9", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8889,7 +8889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Enter (блок цифр)", - "sv_SE": "Keypad Enter", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8913,7 +8913,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "0", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8938,7 +8938,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "1", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8963,7 +8963,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8988,7 +8988,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "3", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9013,7 +9013,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9038,7 +9038,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "5", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9063,7 +9063,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "6", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9088,7 +9088,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "7", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9113,7 +9113,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "8", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9138,7 +9138,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "9", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9163,7 +9163,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "~", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9188,7 +9188,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "`", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9213,7 +9213,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "-", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9238,7 +9238,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "+", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9263,7 +9263,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "[", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9288,7 +9288,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "]", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9313,7 +9313,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ";", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9363,7 +9363,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ",", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9388,7 +9388,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ".", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9413,7 +9413,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "/", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9738,7 +9738,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "-", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9763,7 +9763,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "+", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "4", @@ -9789,7 +9789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Кнопка меню", - "sv_SE": "Guide", + "sv_SE": "", "th_TH": "", "tr_TR": "Rehber", "uk_UA": "", @@ -12438,7 +12438,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "{0}: {1}", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -14289,7 +14289,7 @@ "pl_PL": "Seria Amiibo", "pt_BR": "Franquia Amiibo", "ru_RU": "Серия Amiibo", - "sv_SE": "Amiibo Series", + "sv_SE": "", "th_TH": "", "tr_TR": "Amiibo Serisi", "uk_UA": "Серія Amiibo", @@ -15755,7 +15755,7 @@ "el_GR": "", "en_US": "Aspect Ratio applied to the renderer window.\n\nOnly change this if you're using an aspect ratio mod for your game, otherwise the graphics will be stretched.\n\nLeave on 16:9 if unsure.", "es_ES": "Relación de aspecto aplicada a la ventana del renderizador.\n\nSolamente modificar esto si estás utilizando un mod de relación de aspecto para su juego, en cualquier otro caso los gráficos se estirarán.\n\nDejar en 16:9 si no sabe que hacer.", - "fr_FR": "Format d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", + "fr_FR": "Format\u00A0d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format\u00A0d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", "he_IL": "", "it_IT": "Proporzioni dello schermo applicate alla finestra di renderizzazione.\n\nCambialo solo se stai usando una mod di proporzioni per il tuo gioco, altrimenti la grafica verrà allungata.\n\nLasciare il 16:9 se incerto.", "ja_JP": "レンダリングウインドウに適用するアスペクト比です.\n\nゲームにアスペクト比を変更する mod を使用している場合のみ変更してください.\n\nわからない場合は16:9のままにしておいてください.\n", @@ -17439,7 +17439,7 @@ "pl_PL": "Wersja {0}", "pt_BR": "Versão {0}", "ru_RU": "Версия {0}", - "sv_SE": "Version {0}", + "sv_SE": "", "th_TH": "เวอร์ชั่น {0}", "tr_TR": "Sürüm {0}", "uk_UA": "Версія {0}", @@ -17664,7 +17664,7 @@ "pl_PL": "", "pt_BR": "Ryujinx - Informação", "ru_RU": "Ryujinx - Информация", - "sv_SE": "Ryujinx - Info", + "sv_SE": "", "th_TH": "Ryujinx – ข้อมูล", "tr_TR": "Ryujinx - Bilgi", "uk_UA": "Ryujin x - Інформація", @@ -18813,8 +18813,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Amiibo", - "sv_SE": "Amiibo", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -19435,7 +19435,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "XCI 파일 트리머", - "no_NO": "XCI File Trimmer", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "Уменьшение размера XCI файлов", @@ -19639,7 +19639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "{0:n0} Мб", - "sv_SE": "{0:n0} Mb", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "{0:n0} Мб", @@ -20914,7 +20914,7 @@ "pl_PL": "Głoś", "pt_BR": "", "ru_RU": "Громкость", - "sv_SE": "Vol", + "sv_SE": "", "th_TH": "ระดับเสียง", "tr_TR": "Ses", "uk_UA": "Гуч.", @@ -21055,7 +21055,7 @@ "el_GR": "Όνομα", "en_US": "Name", "es_ES": "Nombre", - "fr_FR": "Nom ", + "fr_FR": "Nom\u00A0", "he_IL": "שם", "it_IT": "Nome", "ja_JP": "名称", @@ -21388,8 +21388,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "FSR", - "sv_SE": "FSR", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21888,8 +21888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "ldn_mitm", - "sv_SE": "ldn_mitm", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21913,8 +21913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "RyuLDN", - "sv_SE": "RyuLDN", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22214,7 +22214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вертикальная синхронизация:", - "sv_SE": "VSync:", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "Вертикальна синхронізація (VSync):", @@ -22255,7 +22255,7 @@ "el_GR": "", "en_US": "Switch", "es_ES": "", - "fr_FR": "Switch", + "fr_FR": "", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -22264,7 +22264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Консоль", - "sv_SE": "Switch", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22598,4 +22598,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 9d23b0909..37f23dc41 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -13,9 +13,13 @@ $(DefaultItemExcludes);._* - - - + + + + + + + -- 2.47.1 From 7cbbd029737b056cc2738da32439f0aa763b2371 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 02:02:55 -0600 Subject: [PATCH 237/722] misc: New Solution Format (.SLNX) --- Ryujinx.sln | 269 --------------------------------------------------- Ryujinx.slnx | 52 ++++++++++ 2 files changed, 52 insertions(+), 269 deletions(-) delete mode 100644 Ryujinx.sln create mode 100644 Ryujinx.slnx diff --git a/Ryujinx.sln b/Ryujinx.sln deleted file mode 100644 index 9e197e85f..000000000 --- a/Ryujinx.sln +++ /dev/null @@ -1,269 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.1.32228.430 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "src\Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Unicorn", "src\Ryujinx.Tests.Unicorn\Ryujinx.Tests.Unicorn.csproj", "{D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE", "src\Ryujinx.HLE\Ryujinx.HLE.csproj", "{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.ShaderTools", "src\Ryujinx.ShaderTools\Ryujinx.ShaderTools.csproj", "{3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Common", "src\Ryujinx.Common\Ryujinx.Common.csproj", "{5FD4E4F6-8928-4B3C-BE07-28A675C17226}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARMeilleure", "src\ARMeilleure\ARMeilleure.csproj", "{ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Gpu", "src\Ryujinx.Graphics.Gpu\Ryujinx.Graphics.Gpu.csproj", "{ADA7EA87-0D63-4D97-9433-922A2124401F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.GAL", "src\Ryujinx.Graphics.GAL\Ryujinx.Graphics.GAL.csproj", "{A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.OpenGL", "src\Ryujinx.Graphics.OpenGL\Ryujinx.Graphics.OpenGL.csproj", "{9558FB96-075D-4219-8FFF-401979DC0B69}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Texture", "src\Ryujinx.Graphics.Texture\Ryujinx.Graphics.Texture.csproj", "{E1B1AD28-289D-47B7-A106-326972240207}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Shader", "src\Ryujinx.Graphics.Shader\Ryujinx.Graphics.Shader.csproj", "{03B955CD-AD84-4B93-AAA7-BF17923BBAA5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec", "src\Ryujinx.Graphics.Nvdec\Ryujinx.Graphics.Nvdec.csproj", "{85A0FA56-DC01-4A42-8808-70DAC76BD66D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio", "src\Ryujinx.Audio\Ryujinx.Audio.csproj", "{806ACF6D-90B0-45D0-A1AC-5F220F3B3985}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Memory", "src\Ryujinx.Memory\Ryujinx.Memory.csproj", "{A5E6C691-9E22-4263-8F40-42F002CE66BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Memory", "src\Ryujinx.Tests.Memory\Ryujinx.Tests.Memory.csproj", "{D1CC5322-7325-4F6B-9625-194B30BE1296}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Cpu", "src\Ryujinx.Cpu\Ryujinx.Cpu.csproj", "{3DF35E3D-D844-4399-A9A1-A9E923264C17}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Device", "src\Ryujinx.Graphics.Device\Ryujinx.Graphics.Device.csproj", "{C3002C3C-7B09-4FE7-894A-372EDA22FC6E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Host1x", "src\Ryujinx.Graphics.Host1x\Ryujinx.Graphics.Host1x.csproj", "{C35F1536-7DE5-4F9D-9604-B5B4E1561947}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.Vp9", "src\Ryujinx.Graphics.Nvdec.Vp9\Ryujinx.Graphics.Nvdec.Vp9.csproj", "{B9AECA11-E248-4886-A10B-81B631CAAF29}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vic", "src\Ryujinx.Graphics.Vic\Ryujinx.Graphics.Vic.csproj", "{81BB2C11-9408-4EA3-822E-42987AF54429}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Video", "src\Ryujinx.Graphics.Video\Ryujinx.Graphics.Video.csproj", "{FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.OpenAL", "src\Ryujinx.Audio.Backends.OpenAL\Ryujinx.Audio.Backends.OpenAL.csproj", "{0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SoundIo", "src\Ryujinx.Audio.Backends.SoundIo\Ryujinx.Audio.Backends.SoundIo.csproj", "{716364DE-B988-41A6-BAB4-327964266ECC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input", "src\Ryujinx.Input\Ryujinx.Input.csproj", "{C16F112F-38C3-40BC-9F5F-4791112063D6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input.SDL2", "src\Ryujinx.Input.SDL2\Ryujinx.Input.SDL2.csproj", "{DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.SDL2.Common", "src\Ryujinx.SDL2.Common\Ryujinx.SDL2.Common.csproj", "{2D5D3A1D-5730-4648-B0AB-06C53CB910C0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL2", "src\Ryujinx.Audio.Backends.SDL2\Ryujinx.Audio.Backends.SDL2.csproj", "{D99A395A-8569-4DB0-B336-900647890052}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmpeg", "src\Ryujinx.Graphics.Nvdec.FFmpeg\Ryujinx.Graphics.Nvdec.FFmpeg.csproj", "{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vulkan", "src\Ryujinx.Graphics.Vulkan\Ryujinx.Graphics.Vulkan.csproj", "{D4D09B08-D580-4D69-B886-C35D2853F6C8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spv.Generator", "src\Spv.Generator\Spv.Generator.csproj", "{2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.LocaleGenerator", "src\Ryujinx.UI.LocaleGenerator\Ryujinx.UI.LocaleGenerator.csproj", "{77D01AD9-2C98-478E-AE1D-8F7100738FB4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Common", "src\Ryujinx.Horizon.Common\Ryujinx.Horizon.Common.csproj", "{77F96ECE-4952-42DB-A528-DED25572A573}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon", "src\Ryujinx.Horizon\Ryujinx.Horizon.csproj", "{AF34127A-3A92-43E5-8496-14960A50B1F1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Generators", "src\Ryujinx.Horizon.Kernel.Generators\Ryujinx.Horizon.Kernel.Generators.csproj", "{7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal", "src\Ryujinx.Graphics.Metal\Ryujinx.Graphics.Metal.csproj", "{C08931FA-1191-417A-864F-3882D93E683B}" - ProjectSection(ProjectDependencies) = postProject - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} = {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal.SharpMetalExtensions", "src/Ryujinx.Graphics.Metal.SharpMetalExtensions\Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj", "{81EA598C-DBA1-40B0-8DA4-4796B78F2037}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - .github\workflows\build.yml = .github\workflows\build.yml - .github\workflows\canary.yml = .github\workflows\canary.yml - Directory.Packages.props = Directory.Packages.props - .github\workflows\release.yml = .github\workflows\release.yml - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.Build.0 = Release|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.Build.0 = Release|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.Build.0 = Release|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.Build.0 = Release|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.Build.0 = Release|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.Build.0 = Release|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.Build.0 = Release|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.Build.0 = Release|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.Build.0 = Release|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.Build.0 = Release|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.Build.0 = Release|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.Build.0 = Release|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.Build.0 = Debug|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.ActiveCfg = Release|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.Build.0 = Release|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.Build.0 = Release|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.Build.0 = Release|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.Build.0 = Release|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.Build.0 = Release|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.Build.0 = Release|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.Build.0 = Release|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.Build.0 = Release|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.Build.0 = Release|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.Build.0 = Release|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.Build.0 = Release|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.Build.0 = Release|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.Build.0 = Release|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.Build.0 = Release|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.Build.0 = Release|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.Build.0 = Release|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.Build.0 = Release|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.Build.0 = Release|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.Build.0 = Release|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.Build.0 = Release|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.Build.0 = Release|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.Build.0 = Release|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.Build.0 = Release|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.Build.0 = Release|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {110169B3-3328-4730-8AB0-BA05BEF75C1A} - EndGlobalSection -EndGlobal diff --git a/Ryujinx.slnx b/Ryujinx.slnx new file mode 100644 index 000000000..99d038e34 --- /dev/null +++ b/Ryujinx.slnx @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.47.1 From a3888ed7cf685522efa7790e727ea38540e00c69 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 02:05:40 -0600 Subject: [PATCH 238/722] Revert "misc: New Solution Format (.SLNX)" This reverts commit 7cbbd029737b056cc2738da32439f0aa763b2371. --- Ryujinx.sln | 269 +++++++++++++++++++++++++++++++++++++++++++++++++++ Ryujinx.slnx | 52 ---------- 2 files changed, 269 insertions(+), 52 deletions(-) create mode 100644 Ryujinx.sln delete mode 100644 Ryujinx.slnx diff --git a/Ryujinx.sln b/Ryujinx.sln new file mode 100644 index 000000000..9e197e85f --- /dev/null +++ b/Ryujinx.sln @@ -0,0 +1,269 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32228.430 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "src\Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Unicorn", "src\Ryujinx.Tests.Unicorn\Ryujinx.Tests.Unicorn.csproj", "{D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE", "src\Ryujinx.HLE\Ryujinx.HLE.csproj", "{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.ShaderTools", "src\Ryujinx.ShaderTools\Ryujinx.ShaderTools.csproj", "{3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Common", "src\Ryujinx.Common\Ryujinx.Common.csproj", "{5FD4E4F6-8928-4B3C-BE07-28A675C17226}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARMeilleure", "src\ARMeilleure\ARMeilleure.csproj", "{ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Gpu", "src\Ryujinx.Graphics.Gpu\Ryujinx.Graphics.Gpu.csproj", "{ADA7EA87-0D63-4D97-9433-922A2124401F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.GAL", "src\Ryujinx.Graphics.GAL\Ryujinx.Graphics.GAL.csproj", "{A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.OpenGL", "src\Ryujinx.Graphics.OpenGL\Ryujinx.Graphics.OpenGL.csproj", "{9558FB96-075D-4219-8FFF-401979DC0B69}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Texture", "src\Ryujinx.Graphics.Texture\Ryujinx.Graphics.Texture.csproj", "{E1B1AD28-289D-47B7-A106-326972240207}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Shader", "src\Ryujinx.Graphics.Shader\Ryujinx.Graphics.Shader.csproj", "{03B955CD-AD84-4B93-AAA7-BF17923BBAA5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec", "src\Ryujinx.Graphics.Nvdec\Ryujinx.Graphics.Nvdec.csproj", "{85A0FA56-DC01-4A42-8808-70DAC76BD66D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio", "src\Ryujinx.Audio\Ryujinx.Audio.csproj", "{806ACF6D-90B0-45D0-A1AC-5F220F3B3985}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Memory", "src\Ryujinx.Memory\Ryujinx.Memory.csproj", "{A5E6C691-9E22-4263-8F40-42F002CE66BE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Memory", "src\Ryujinx.Tests.Memory\Ryujinx.Tests.Memory.csproj", "{D1CC5322-7325-4F6B-9625-194B30BE1296}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Cpu", "src\Ryujinx.Cpu\Ryujinx.Cpu.csproj", "{3DF35E3D-D844-4399-A9A1-A9E923264C17}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Device", "src\Ryujinx.Graphics.Device\Ryujinx.Graphics.Device.csproj", "{C3002C3C-7B09-4FE7-894A-372EDA22FC6E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Host1x", "src\Ryujinx.Graphics.Host1x\Ryujinx.Graphics.Host1x.csproj", "{C35F1536-7DE5-4F9D-9604-B5B4E1561947}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.Vp9", "src\Ryujinx.Graphics.Nvdec.Vp9\Ryujinx.Graphics.Nvdec.Vp9.csproj", "{B9AECA11-E248-4886-A10B-81B631CAAF29}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vic", "src\Ryujinx.Graphics.Vic\Ryujinx.Graphics.Vic.csproj", "{81BB2C11-9408-4EA3-822E-42987AF54429}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Video", "src\Ryujinx.Graphics.Video\Ryujinx.Graphics.Video.csproj", "{FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.OpenAL", "src\Ryujinx.Audio.Backends.OpenAL\Ryujinx.Audio.Backends.OpenAL.csproj", "{0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SoundIo", "src\Ryujinx.Audio.Backends.SoundIo\Ryujinx.Audio.Backends.SoundIo.csproj", "{716364DE-B988-41A6-BAB4-327964266ECC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input", "src\Ryujinx.Input\Ryujinx.Input.csproj", "{C16F112F-38C3-40BC-9F5F-4791112063D6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input.SDL2", "src\Ryujinx.Input.SDL2\Ryujinx.Input.SDL2.csproj", "{DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.SDL2.Common", "src\Ryujinx.SDL2.Common\Ryujinx.SDL2.Common.csproj", "{2D5D3A1D-5730-4648-B0AB-06C53CB910C0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL2", "src\Ryujinx.Audio.Backends.SDL2\Ryujinx.Audio.Backends.SDL2.csproj", "{D99A395A-8569-4DB0-B336-900647890052}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmpeg", "src\Ryujinx.Graphics.Nvdec.FFmpeg\Ryujinx.Graphics.Nvdec.FFmpeg.csproj", "{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vulkan", "src\Ryujinx.Graphics.Vulkan\Ryujinx.Graphics.Vulkan.csproj", "{D4D09B08-D580-4D69-B886-C35D2853F6C8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spv.Generator", "src\Spv.Generator\Spv.Generator.csproj", "{2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.LocaleGenerator", "src\Ryujinx.UI.LocaleGenerator\Ryujinx.UI.LocaleGenerator.csproj", "{77D01AD9-2C98-478E-AE1D-8F7100738FB4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Common", "src\Ryujinx.Horizon.Common\Ryujinx.Horizon.Common.csproj", "{77F96ECE-4952-42DB-A528-DED25572A573}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon", "src\Ryujinx.Horizon\Ryujinx.Horizon.csproj", "{AF34127A-3A92-43E5-8496-14960A50B1F1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Generators", "src\Ryujinx.Horizon.Kernel.Generators\Ryujinx.Horizon.Kernel.Generators.csproj", "{7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal", "src\Ryujinx.Graphics.Metal\Ryujinx.Graphics.Metal.csproj", "{C08931FA-1191-417A-864F-3882D93E683B}" + ProjectSection(ProjectDependencies) = postProject + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} = {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal.SharpMetalExtensions", "src/Ryujinx.Graphics.Metal.SharpMetalExtensions\Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj", "{81EA598C-DBA1-40B0-8DA4-4796B78F2037}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + .github\workflows\build.yml = .github\workflows\build.yml + .github\workflows\canary.yml = .github\workflows\canary.yml + Directory.Packages.props = Directory.Packages.props + .github\workflows\release.yml = .github\workflows\release.yml + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.Build.0 = Release|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.Build.0 = Release|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.Build.0 = Release|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.Build.0 = Release|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.Build.0 = Release|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.Build.0 = Release|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.Build.0 = Release|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.Build.0 = Release|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.Build.0 = Release|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.Build.0 = Release|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.Build.0 = Release|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.Build.0 = Release|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.Build.0 = Debug|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.ActiveCfg = Release|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.Build.0 = Release|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.Build.0 = Release|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.Build.0 = Release|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.Build.0 = Release|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.Build.0 = Release|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.Build.0 = Release|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.Build.0 = Release|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.Build.0 = Release|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.Build.0 = Release|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.Build.0 = Release|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.Build.0 = Release|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.Build.0 = Release|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.Build.0 = Release|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.Build.0 = Release|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.Build.0 = Release|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.Build.0 = Release|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.Build.0 = Release|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.Build.0 = Release|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.Build.0 = Release|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.Build.0 = Release|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.Build.0 = Release|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.Build.0 = Release|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.Build.0 = Release|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.Build.0 = Release|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {110169B3-3328-4730-8AB0-BA05BEF75C1A} + EndGlobalSection +EndGlobal diff --git a/Ryujinx.slnx b/Ryujinx.slnx deleted file mode 100644 index 99d038e34..000000000 --- a/Ryujinx.slnx +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- 2.47.1 From c88518bce27a514b0f49142266b1c128a30a09bf Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 02:06:24 -0600 Subject: [PATCH 239/722] Revert "Validation Project v2" (#470) Reverts Ryubing/Ryujinx#444 --- Ryujinx.sln | 5 +- .../LocaleValidationTask.cs | 73 +++++ .../LocalesValidationTask.cs | 117 ------- src/Ryujinx.BuildValidationTasks/Program.cs | 37 --- .../Ryujinx.BuildValidationTasks.csproj | 19 +- .../ValidationTask.cs | 7 - src/Ryujinx/Assets/locales.json | 298 +++++++++--------- src/Ryujinx/Ryujinx.csproj | 10 +- 8 files changed, 239 insertions(+), 327 deletions(-) create mode 100644 src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs delete mode 100644 src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs delete mode 100644 src/Ryujinx.BuildValidationTasks/Program.cs delete mode 100644 src/Ryujinx.BuildValidationTasks/ValidationTask.cs diff --git a/Ryujinx.sln b/Ryujinx.sln index 9e197e85f..373572178 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -249,12 +249,13 @@ Global {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs new file mode 100644 index 000000000..6dc3d8aa8 --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs @@ -0,0 +1,73 @@ +using System; +using Microsoft.Build.Utilities; +using System.Collections.Generic; +using System.Linq; +using System.IO; +using Newtonsoft.Json; +using Microsoft.Build.Framework; + +namespace Ryujinx.BuildValidationTasks +{ + public class LocaleValidationTask : Task + { + public override bool Execute() + { + string path = System.Reflection.Assembly.GetExecutingAssembly().Location; + + if (path.Split(["src"], StringSplitOptions.None).Length == 1) + { + //i assume that we are in a build directory in the solution dir + path = new FileInfo(path).Directory!.Parent!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; + } + else + { + path = path.Split(["src"], StringSplitOptions.None)[0]; + path = new FileInfo(path).Directory!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; + } + + string data; + + using (StreamReader sr = new(path)) + { + data = sr.ReadToEnd(); + } + + LocalesJson json = JsonConvert.DeserializeObject(data); + + for (int i = 0; i < json.Locales.Count; i++) + { + LocalesEntry locale = json.Locales[i]; + + foreach (string langCode in json.Languages.Where(it => !locale.Translations.ContainsKey(it))) + { + locale.Translations.Add(langCode, string.Empty); + Log.LogMessage(MessageImportance.High, $"Added '{langCode}' to Locale '{locale.ID}'"); + } + + locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); + json.Locales[i] = locale; + } + + string jsonString = JsonConvert.SerializeObject(json, Formatting.Indented); + + using (StreamWriter sw = new(path)) + { + sw.Write(jsonString); + } + + return true; + } + + struct LocalesJson + { + public List Languages { get; set; } + public List Locales { get; set; } + } + + struct LocalesEntry + { + public string ID { get; set; } + public Dictionary Translations { get; set; } + } + } +} diff --git a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs deleted file mode 100644 index 05eaee539..000000000 --- a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.IO; -using System.Text.Json; -using System.Text.Encodings.Web; - -namespace Ryujinx.BuildValidationTasks -{ - public class LocalesValidationTask : ValidationTask - { - public LocalesValidationTask() { } - - public bool Execute(string projectPath, bool isGitRunner) - { - Console.WriteLine("Running Locale Validation Task..."); - - string path = projectPath + "src/Ryujinx/Assets/locales.json"; - string data; - - using (StreamReader sr = new(path)) - { - data = sr.ReadToEnd(); - } - - LocalesJson json; - - if (isGitRunner && data.Contains("\r\n")) - throw new FormatException("locales.json is using CRLF line endings! It should be using LF line endings, build locally to fix..."); - - try - { - json = JsonSerializer.Deserialize(data); - - } - catch (JsonException e) - { - throw new JsonException(e.Message); //shorter and easier stacktrace - } - - - - bool encounteredIssue = false; - - for (int i = 0; i < json.Locales.Count; i++) - { - LocalesEntry locale = json.Locales[i]; - - foreach (string langCode in json.Languages.Where(lang => !locale.Translations.ContainsKey(lang))) - { - encounteredIssue = true; - - if (!isGitRunner) - { - locale.Translations.Add(langCode, string.Empty); - Console.WriteLine($"Added '{langCode}' to Locale '{locale.ID}'"); - } - else - { - Console.WriteLine($"Missing '{langCode}' in Locale '{locale.ID}'!"); - } - } - - foreach (string langCode in json.Languages.Where(lang => locale.Translations.ContainsKey(lang) && lang != "en_US" && locale.Translations[lang] == locale.Translations["en_US"])) - { - encounteredIssue = true; - - if (!isGitRunner) - { - locale.Translations[langCode] = string.Empty; - Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'! Resetting it..."); - } - else - { - Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'!"); - } - } - - locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); - json.Locales[i] = locale; - } - - if (isGitRunner && encounteredIssue) - throw new JsonException("1 or more locales are invalid!"); - - JsonSerializerOptions jsonOptions = new JsonSerializerOptions() - { - WriteIndented = true, - NewLine = "\n", - Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping - }; - - string jsonString = JsonSerializer.Serialize(json, jsonOptions); - - using (StreamWriter sw = new(path)) - { - sw.Write(jsonString); - } - - Console.WriteLine("Finished Locale Validation Task!"); - - return true; - } - - struct LocalesJson - { - public List Languages { get; set; } - public List Locales { get; set; } - } - - struct LocalesEntry - { - public string ID { get; set; } - public Dictionary Translations { get; set; } - } - } -} diff --git a/src/Ryujinx.BuildValidationTasks/Program.cs b/src/Ryujinx.BuildValidationTasks/Program.cs deleted file mode 100644 index ed1cee490..000000000 --- a/src/Ryujinx.BuildValidationTasks/Program.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.IO; -using System.Linq; - -namespace Ryujinx.BuildValidationTasks -{ - public class Program - { - static void Main(string[] args) - { - // Display the number of command line arguments. - if (args.Length == 0) - throw new ArgumentException("Error: too few arguments!"); - - string path = args[0]; - - if (string.IsNullOrEmpty(path)) - throw new ArgumentException("Error: path is null or empty!"); - - if (!Path.Exists(path)) - throw new FileLoadException($"path {{{path}}} does not exist!"); - - path = Path.GetFullPath(path); - - if (!Directory.GetDirectories(path).Contains($"{path}src")) - throw new FileLoadException($"path {{{path}}} is not a valid ryujinx project!"); - - bool isGitRunner = path.Contains("runner") || path.Contains("D:\\a\\Ryujinx\\Ryujinx"); - if (isGitRunner) - Console.WriteLine("Is Git Runner!"); - - // Run tasks - // Pass extra info needed in the task constructors - new LocalesValidationTask().Execute(path, isGitRunner); - } - } -} diff --git a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj index d77f3f204..dbd9492df 100644 --- a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj +++ b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj @@ -1,16 +1,19 @@ - Exe + netstandard2.0 + true - - + + + + - + + + + - \ No newline at end of file + diff --git a/src/Ryujinx.BuildValidationTasks/ValidationTask.cs b/src/Ryujinx.BuildValidationTasks/ValidationTask.cs deleted file mode 100644 index f11c87f3b..000000000 --- a/src/Ryujinx.BuildValidationTasks/ValidationTask.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Ryujinx.BuildValidationTasks -{ - public interface ValidationTask - { - public bool Execute(string projectPath, bool isGitRunner); - } -} diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 31cba38dd..6bede7999 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1564,7 +1564,7 @@ "pl_PL": "Wersja", "pt_BR": "Versão", "ru_RU": "Версия", - "sv_SE": "", + "sv_SE": "Version", "th_TH": "เวอร์ชั่น", "tr_TR": "Sürüm", "uk_UA": "Версія", @@ -2213,8 +2213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "ExeFS", + "sv_SE": "ExeFS", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2263,8 +2263,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "RomFS", + "sv_SE": "RomFS", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2310,7 +2310,7 @@ "it_IT": "", "ja_JP": "ロゴ", "ko_KR": "로고", - "no_NO": "", + "no_NO": "Logo", "pl_PL": "", "pt_BR": "", "ru_RU": "Лого", @@ -3260,11 +3260,11 @@ "it_IT": "Sistema", "ja_JP": "システム", "ko_KR": "시스템", - "no_NO": "", + "no_NO": "System", "pl_PL": "", "pt_BR": "Sistema", "ru_RU": "Система", - "sv_SE": "", + "sv_SE": "System", "th_TH": "ระบบ", "tr_TR": "Sistem", "uk_UA": "Система", @@ -3335,11 +3335,11 @@ "it_IT": "Giappone", "ja_JP": "日本", "ko_KR": "일본", - "no_NO": "", + "no_NO": "Japan", "pl_PL": "Japonia", "pt_BR": "Japão", "ru_RU": "Япония", - "sv_SE": "", + "sv_SE": "Japan", "th_TH": "ญี่ปุ่น", "tr_TR": "Japonya", "uk_UA": "Японія", @@ -3360,11 +3360,11 @@ "it_IT": "Stati Uniti d'America", "ja_JP": "アメリカ", "ko_KR": "미국", - "no_NO": "", + "no_NO": "USA", "pl_PL": "Stany Zjednoczone", "pt_BR": "EUA", "ru_RU": "США", - "sv_SE": "", + "sv_SE": "USA", "th_TH": "สหรัฐอเมริกา", "tr_TR": "ABD", "uk_UA": "США", @@ -3410,7 +3410,7 @@ "it_IT": "", "ja_JP": "オーストラリア", "ko_KR": "호주", - "no_NO": "", + "no_NO": "Australia", "pl_PL": "", "pt_BR": "Austrália", "ru_RU": "Австралия", @@ -3460,11 +3460,11 @@ "it_IT": "Corea", "ja_JP": "韓国", "ko_KR": "한국", - "no_NO": "", + "no_NO": "Korea", "pl_PL": "", "pt_BR": "Coreia", "ru_RU": "Корея", - "sv_SE": "", + "sv_SE": "Korea", "th_TH": "เกาหลี", "tr_TR": "Kore", "uk_UA": "Корея", @@ -3485,11 +3485,11 @@ "it_IT": "", "ja_JP": "台湾", "ko_KR": "대만", - "no_NO": "", + "no_NO": "Taiwan", "pl_PL": "Tajwan", "pt_BR": "", "ru_RU": "Тайвань", - "sv_SE": "", + "sv_SE": "Taiwan", "th_TH": "ไต้หวัน", "tr_TR": "Tayvan", "uk_UA": "Тайвань", @@ -3955,7 +3955,7 @@ "el_GR": "Ζώνη Ώρας Συστήματος:", "en_US": "System Time Zone:", "es_ES": "Zona horaria del sistema:", - "fr_FR": "Fuseau horaire du système\u00A0:", + "fr_FR": "Fuseau horaire du système :", "he_IL": "אזור זמן מערכת:", "it_IT": "Fuso orario del sistema:", "ja_JP": "タイムゾーン:", @@ -4135,11 +4135,11 @@ "it_IT": "", "ja_JP": "ダミー", "ko_KR": "더미", - "no_NO": "", + "no_NO": "Dummy", "pl_PL": "Atrapa", "pt_BR": "Nenhuma", "ru_RU": "Без звука", - "sv_SE": "", + "sv_SE": "Dummy", "th_TH": "", "tr_TR": "Yapay", "uk_UA": "", @@ -4163,8 +4163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "OpenAL", + "sv_SE": "OpenAL", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4188,8 +4188,8 @@ "no_NO": "Lyd Inn/Ut", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "SoundIO", + "sv_SE": "SoundIO", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4213,8 +4213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "SDL2", + "sv_SE": "SDL2", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4230,12 +4230,12 @@ "el_GR": "Μικροδιορθώσεις", "en_US": "Hacks", "es_ES": "", - "fr_FR": "", + "fr_FR": "Hacks", "he_IL": "האצות", "it_IT": "Espedienti", "ja_JP": "ハック", "ko_KR": "핵", - "no_NO": "", + "no_NO": "Hacks", "pl_PL": "Hacki", "pt_BR": "", "ru_RU": "Хаки", @@ -4314,7 +4314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "4ГиБ", - "sv_SE": "", + "sv_SE": "4GiB", "th_TH": "", "tr_TR": "", "uk_UA": "4Гб", @@ -4339,7 +4339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "6ГиБ", - "sv_SE": "", + "sv_SE": "6GiB", "th_TH": "", "tr_TR": "", "uk_UA": "6Гб", @@ -4364,7 +4364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "8ГиБ", - "sv_SE": "", + "sv_SE": "8GiB", "th_TH": "", "tr_TR": "", "uk_UA": "8Гб", @@ -4389,7 +4389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "12ГиБ", - "sv_SE": "", + "sv_SE": "12GiB", "th_TH": "", "tr_TR": "", "uk_UA": "12Гб", @@ -4585,11 +4585,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배", - "no_NO": "", + "no_NO": "2x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "2x", + "sv_SE": "2x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4610,11 +4610,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "4배", - "no_NO": "", + "no_NO": "4x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "4x", + "sv_SE": "4x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4635,11 +4635,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "8배", - "no_NO": "", + "no_NO": "8x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "8x", + "sv_SE": "8x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4660,11 +4660,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "16배", - "no_NO": "", + "no_NO": "16x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "16x", + "sv_SE": "16x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4760,11 +4760,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배(1440p/2160p)", - "no_NO": "", + "no_NO": "2x (1440p/2160p)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "2x (1440p/2160p)", + "sv_SE": "2x (1440p/2160p)", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4785,11 +4785,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "3배(2160p/3240p)", - "no_NO": "", + "no_NO": "3x (2160p/3240p)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "3x (2160p/3240p)", + "sv_SE": "3x (2160p/3240p)", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4863,8 +4863,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "4:3", + "sv_SE": "4:3", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4888,8 +4888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "16:9", + "sv_SE": "16:9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4913,8 +4913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "16:10", + "sv_SE": "16:10", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4938,8 +4938,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "21:9", + "sv_SE": "21:9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4960,11 +4960,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "32:9", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "32:9", + "sv_SE": "32:9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -5060,7 +5060,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "", + "no_NO": "Logging", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -5085,7 +5085,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "", + "no_NO": "Logging", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -6113,8 +6113,8 @@ "no_NO": "", "pl_PL": "Pro Kontroler", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Pro Controller", + "sv_SE": "Pro Controller", "th_TH": "โปรคอนโทรลเลอร์", "tr_TR": "Profesyonel Kumanda", "uk_UA": "Контролер Pro", @@ -8088,8 +8088,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Enter", + "sv_SE": "Enter", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8114,7 +8114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Esc", - "sv_SE": "", + "sv_SE": "Escape", "th_TH": "", "tr_TR": "Esc", "uk_UA": "", @@ -8163,8 +8163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Tab", + "sv_SE": "Tab", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8188,8 +8188,8 @@ "no_NO": "Tilbaketast", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Backspace", + "sv_SE": "Backspace", "th_TH": "", "tr_TR": "Geri tuşu", "uk_UA": "", @@ -8213,8 +8213,8 @@ "no_NO": "Sett inn", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Insert", + "sv_SE": "Insert", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8238,8 +8238,8 @@ "no_NO": "Slett", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Delete", + "sv_SE": "Delete", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8263,8 +8263,8 @@ "no_NO": "Side opp", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Page Up", + "sv_SE": "Page Up", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8288,8 +8288,8 @@ "no_NO": "Side ned", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Page Down", + "sv_SE": "Page Down", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8313,8 +8313,8 @@ "no_NO": "Hjem", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Home", + "sv_SE": "Home", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8338,8 +8338,8 @@ "no_NO": "Avslutt", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "End", + "sv_SE": "End", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8363,8 +8363,8 @@ "no_NO": "Skiftelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Caps Lock", + "sv_SE": "Caps Lock", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8388,8 +8388,8 @@ "no_NO": "Rullelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Scroll Lock", + "sv_SE": "Scroll Lock", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8413,8 +8413,8 @@ "no_NO": "Skjermbilde", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Print Screen", + "sv_SE": "Print Screen", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8438,8 +8438,8 @@ "no_NO": "Stans midlertidig", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Pause", + "sv_SE": "Pause", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8463,8 +8463,8 @@ "no_NO": "Numerisk Lås", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Num Lock", + "sv_SE": "Num Lock", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8514,7 +8514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 0", - "sv_SE": "", + "sv_SE": "Keypad 0", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8539,7 +8539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 1", - "sv_SE": "", + "sv_SE": "Keypad 1", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8564,7 +8564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 2", - "sv_SE": "", + "sv_SE": "Keypad 2", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8589,7 +8589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 3", - "sv_SE": "", + "sv_SE": "Keypad 3", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8614,7 +8614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 4", - "sv_SE": "", + "sv_SE": "Keypad 4", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8639,7 +8639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 5", - "sv_SE": "", + "sv_SE": "Keypad 5", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8664,7 +8664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 6", - "sv_SE": "", + "sv_SE": "Keypad 6", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8689,7 +8689,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 7", - "sv_SE": "", + "sv_SE": "Keypad 7", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8714,7 +8714,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 8", - "sv_SE": "", + "sv_SE": "Keypad 8", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8739,7 +8739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 9", - "sv_SE": "", + "sv_SE": "Keypad 9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8889,7 +8889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Enter (блок цифр)", - "sv_SE": "", + "sv_SE": "Keypad Enter", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8913,7 +8913,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "0", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8938,7 +8938,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "1", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8963,7 +8963,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "2", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8988,7 +8988,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "3", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9013,7 +9013,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "4", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9038,7 +9038,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "5", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9063,7 +9063,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "6", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9088,7 +9088,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "7", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9113,7 +9113,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "8", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9138,7 +9138,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "9", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9163,7 +9163,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "~", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9188,7 +9188,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "`", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9213,7 +9213,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "-", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9238,7 +9238,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "+", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9263,7 +9263,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "[", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9288,7 +9288,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "]", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9313,7 +9313,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": ";", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9363,7 +9363,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": ",", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9388,7 +9388,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": ".", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9413,7 +9413,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "/", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9738,7 +9738,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "-", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9763,7 +9763,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "+", "sv_SE": "", "th_TH": "", "tr_TR": "4", @@ -9789,7 +9789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Кнопка меню", - "sv_SE": "", + "sv_SE": "Guide", "th_TH": "", "tr_TR": "Rehber", "uk_UA": "", @@ -12438,7 +12438,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "{0}: {1}", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -14289,7 +14289,7 @@ "pl_PL": "Seria Amiibo", "pt_BR": "Franquia Amiibo", "ru_RU": "Серия Amiibo", - "sv_SE": "", + "sv_SE": "Amiibo Series", "th_TH": "", "tr_TR": "Amiibo Serisi", "uk_UA": "Серія Amiibo", @@ -15755,7 +15755,7 @@ "el_GR": "", "en_US": "Aspect Ratio applied to the renderer window.\n\nOnly change this if you're using an aspect ratio mod for your game, otherwise the graphics will be stretched.\n\nLeave on 16:9 if unsure.", "es_ES": "Relación de aspecto aplicada a la ventana del renderizador.\n\nSolamente modificar esto si estás utilizando un mod de relación de aspecto para su juego, en cualquier otro caso los gráficos se estirarán.\n\nDejar en 16:9 si no sabe que hacer.", - "fr_FR": "Format\u00A0d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format\u00A0d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", + "fr_FR": "Format d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", "he_IL": "", "it_IT": "Proporzioni dello schermo applicate alla finestra di renderizzazione.\n\nCambialo solo se stai usando una mod di proporzioni per il tuo gioco, altrimenti la grafica verrà allungata.\n\nLasciare il 16:9 se incerto.", "ja_JP": "レンダリングウインドウに適用するアスペクト比です.\n\nゲームにアスペクト比を変更する mod を使用している場合のみ変更してください.\n\nわからない場合は16:9のままにしておいてください.\n", @@ -17439,7 +17439,7 @@ "pl_PL": "Wersja {0}", "pt_BR": "Versão {0}", "ru_RU": "Версия {0}", - "sv_SE": "", + "sv_SE": "Version {0}", "th_TH": "เวอร์ชั่น {0}", "tr_TR": "Sürüm {0}", "uk_UA": "Версія {0}", @@ -17664,7 +17664,7 @@ "pl_PL": "", "pt_BR": "Ryujinx - Informação", "ru_RU": "Ryujinx - Информация", - "sv_SE": "", + "sv_SE": "Ryujinx - Info", "th_TH": "Ryujinx – ข้อมูล", "tr_TR": "Ryujinx - Bilgi", "uk_UA": "Ryujin x - Інформація", @@ -18813,8 +18813,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Amiibo", + "sv_SE": "Amiibo", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -19435,7 +19435,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "XCI 파일 트리머", - "no_NO": "", + "no_NO": "XCI File Trimmer", "pl_PL": "", "pt_BR": "", "ru_RU": "Уменьшение размера XCI файлов", @@ -19639,7 +19639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "{0:n0} Мб", - "sv_SE": "", + "sv_SE": "{0:n0} Mb", "th_TH": "", "tr_TR": "", "uk_UA": "{0:n0} Мб", @@ -20914,7 +20914,7 @@ "pl_PL": "Głoś", "pt_BR": "", "ru_RU": "Громкость", - "sv_SE": "", + "sv_SE": "Vol", "th_TH": "ระดับเสียง", "tr_TR": "Ses", "uk_UA": "Гуч.", @@ -21055,7 +21055,7 @@ "el_GR": "Όνομα", "en_US": "Name", "es_ES": "Nombre", - "fr_FR": "Nom\u00A0", + "fr_FR": "Nom ", "he_IL": "שם", "it_IT": "Nome", "ja_JP": "名称", @@ -21388,8 +21388,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "FSR", + "sv_SE": "FSR", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21888,8 +21888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "ldn_mitm", + "sv_SE": "ldn_mitm", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21913,8 +21913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "RyuLDN", + "sv_SE": "RyuLDN", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22214,7 +22214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вертикальная синхронизация:", - "sv_SE": "", + "sv_SE": "VSync:", "th_TH": "", "tr_TR": "", "uk_UA": "Вертикальна синхронізація (VSync):", @@ -22255,7 +22255,7 @@ "el_GR": "", "en_US": "Switch", "es_ES": "", - "fr_FR": "", + "fr_FR": "Switch", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -22264,7 +22264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Консоль", - "sv_SE": "", + "sv_SE": "Switch", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22598,4 +22598,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 37f23dc41..9d23b0909 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -13,13 +13,9 @@ $(DefaultItemExcludes);._* - - - - - - - + + + -- 2.47.1 From 9ae1c4380d7c5b3961787392545ade2800ddd5f0 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 02:32:32 -0600 Subject: [PATCH 240/722] UI: Fix crashing when opening an Applet or application with no existing icon --- src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index ef2e835ae..28b4262f1 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -75,11 +75,11 @@ namespace Ryujinx.Ava.Utilities.AppLibrary TitleUpdates = _titleUpdates.AsObservableCache(); DownloadableContents = _downloadableContents.AsObservableCache(); - _nspIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NSP.png"); - _xciIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_XCI.png"); - _ncaIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NCA.png"); - _nroIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NRO.png"); - _nsoIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NSO.png"); + _nspIcon = EmbeddedResources.Read("Ryujinx/Assets.UIImages.Icon_NSP.png"); + _xciIcon = EmbeddedResources.Read("Ryujinx/Assets.UIImages.Icon_XCI.png"); + _ncaIcon = EmbeddedResources.Read("Ryujinx/Assets.UIImages.Icon_NCA.png"); + _nroIcon = EmbeddedResources.Read("Ryujinx/Assets.UIImages.Icon_NRO.png"); + _nsoIcon = EmbeddedResources.Read("Ryujinx/Assets.UIImages.Icon_NSO.png"); } /// The npdm file doesn't contain valid data. -- 2.47.1 From ca662988177b4c2dcc8f4c1253c2478a4b876725 Mon Sep 17 00:00:00 2001 From: Otozinclus <58051309+Otozinclus@users.noreply.github.com> Date: Tue, 31 Dec 2024 03:28:35 +0100 Subject: [PATCH 241/722] Update Metal Games list (#472) I tested let's go in most locations and did some battles and it runs perfectly Legends Arceus will freeze occasionally on Metal, so it was removed. --- src/Ryujinx.Common/TitleIDs.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx.Common/TitleIDs.cs b/src/Ryujinx.Common/TitleIDs.cs index 31d895051..ab6cfeb03 100644 --- a/src/Ryujinx.Common/TitleIDs.cs +++ b/src/Ryujinx.Common/TitleIDs.cs @@ -35,7 +35,8 @@ namespace Ryujinx.Common "010028600EBDA000", // Mario 3D World "0100152000022000", // Mario Kart 8 Deluxe "01005CA01580E000", // Persona 5 - "01001f5010dfa000", // Pokemon Legends Arceus + "0100187003A36000", // Pokémon: Let's Go, Evoli! + "010003f003a34000", // Pokémon: Let's Go, Pikachu! "01008C0016544000", // Sea of Stars "01006A800016E000", // Smash Ultimate "0100000000010000", // Super Mario Odyessy -- 2.47.1 From d0a344d632fd2ae401e7c251bf84b9292b694303 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 20:31:27 -0600 Subject: [PATCH 242/722] Validation Project v2 (#471) Original PR had issues in the CI when building. > Refactor of the Validation System for more ease of use in the future. The project now builds a standalone executable and executes it before the main project is built or published. Since it is now a standalone executable we are also able to use .NET Core features as we are no longer locked to netstandard. > The project currently includes 1 task, LocalesValidationTask, that will check if the locales.json file has any of the following issues: > - The json is invalid. > - The json has locales with missing languages. > - The json has locales with langauges that are just duplicates of the en_US field. > If the project is built or published locally it will also fix any missing languages or duplicate fields. --------- Co-authored-by: LotP1 <68976644+LotP1@users.noreply.github.com> --- Ryujinx.sln | 5 +- .../LocaleValidationTask.cs | 73 ----- .../LocalesValidationTask.cs | 117 +++++++ src/Ryujinx.BuildValidationTasks/Program.cs | 37 +++ .../Ryujinx.BuildValidationTasks.csproj | 20 +- .../ValidationTask.cs | 7 + src/Ryujinx/Assets/locales.json | 298 +++++++++--------- src/Ryujinx/Ryujinx.csproj | 7 +- 8 files changed, 325 insertions(+), 239 deletions(-) delete mode 100644 src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs create mode 100644 src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs create mode 100644 src/Ryujinx.BuildValidationTasks/Program.cs create mode 100644 src/Ryujinx.BuildValidationTasks/ValidationTask.cs diff --git a/Ryujinx.sln b/Ryujinx.sln index 373572178..9e197e85f 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -249,13 +249,12 @@ Global {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs deleted file mode 100644 index 6dc3d8aa8..000000000 --- a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using Microsoft.Build.Utilities; -using System.Collections.Generic; -using System.Linq; -using System.IO; -using Newtonsoft.Json; -using Microsoft.Build.Framework; - -namespace Ryujinx.BuildValidationTasks -{ - public class LocaleValidationTask : Task - { - public override bool Execute() - { - string path = System.Reflection.Assembly.GetExecutingAssembly().Location; - - if (path.Split(["src"], StringSplitOptions.None).Length == 1) - { - //i assume that we are in a build directory in the solution dir - path = new FileInfo(path).Directory!.Parent!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; - } - else - { - path = path.Split(["src"], StringSplitOptions.None)[0]; - path = new FileInfo(path).Directory!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; - } - - string data; - - using (StreamReader sr = new(path)) - { - data = sr.ReadToEnd(); - } - - LocalesJson json = JsonConvert.DeserializeObject(data); - - for (int i = 0; i < json.Locales.Count; i++) - { - LocalesEntry locale = json.Locales[i]; - - foreach (string langCode in json.Languages.Where(it => !locale.Translations.ContainsKey(it))) - { - locale.Translations.Add(langCode, string.Empty); - Log.LogMessage(MessageImportance.High, $"Added '{langCode}' to Locale '{locale.ID}'"); - } - - locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); - json.Locales[i] = locale; - } - - string jsonString = JsonConvert.SerializeObject(json, Formatting.Indented); - - using (StreamWriter sw = new(path)) - { - sw.Write(jsonString); - } - - return true; - } - - struct LocalesJson - { - public List Languages { get; set; } - public List Locales { get; set; } - } - - struct LocalesEntry - { - public string ID { get; set; } - public Dictionary Translations { get; set; } - } - } -} diff --git a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs new file mode 100644 index 000000000..05eaee539 --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.IO; +using System.Text.Json; +using System.Text.Encodings.Web; + +namespace Ryujinx.BuildValidationTasks +{ + public class LocalesValidationTask : ValidationTask + { + public LocalesValidationTask() { } + + public bool Execute(string projectPath, bool isGitRunner) + { + Console.WriteLine("Running Locale Validation Task..."); + + string path = projectPath + "src/Ryujinx/Assets/locales.json"; + string data; + + using (StreamReader sr = new(path)) + { + data = sr.ReadToEnd(); + } + + LocalesJson json; + + if (isGitRunner && data.Contains("\r\n")) + throw new FormatException("locales.json is using CRLF line endings! It should be using LF line endings, build locally to fix..."); + + try + { + json = JsonSerializer.Deserialize(data); + + } + catch (JsonException e) + { + throw new JsonException(e.Message); //shorter and easier stacktrace + } + + + + bool encounteredIssue = false; + + for (int i = 0; i < json.Locales.Count; i++) + { + LocalesEntry locale = json.Locales[i]; + + foreach (string langCode in json.Languages.Where(lang => !locale.Translations.ContainsKey(lang))) + { + encounteredIssue = true; + + if (!isGitRunner) + { + locale.Translations.Add(langCode, string.Empty); + Console.WriteLine($"Added '{langCode}' to Locale '{locale.ID}'"); + } + else + { + Console.WriteLine($"Missing '{langCode}' in Locale '{locale.ID}'!"); + } + } + + foreach (string langCode in json.Languages.Where(lang => locale.Translations.ContainsKey(lang) && lang != "en_US" && locale.Translations[lang] == locale.Translations["en_US"])) + { + encounteredIssue = true; + + if (!isGitRunner) + { + locale.Translations[langCode] = string.Empty; + Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'! Resetting it..."); + } + else + { + Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'!"); + } + } + + locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); + json.Locales[i] = locale; + } + + if (isGitRunner && encounteredIssue) + throw new JsonException("1 or more locales are invalid!"); + + JsonSerializerOptions jsonOptions = new JsonSerializerOptions() + { + WriteIndented = true, + NewLine = "\n", + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping + }; + + string jsonString = JsonSerializer.Serialize(json, jsonOptions); + + using (StreamWriter sw = new(path)) + { + sw.Write(jsonString); + } + + Console.WriteLine("Finished Locale Validation Task!"); + + return true; + } + + struct LocalesJson + { + public List Languages { get; set; } + public List Locales { get; set; } + } + + struct LocalesEntry + { + public string ID { get; set; } + public Dictionary Translations { get; set; } + } + } +} diff --git a/src/Ryujinx.BuildValidationTasks/Program.cs b/src/Ryujinx.BuildValidationTasks/Program.cs new file mode 100644 index 000000000..ed1cee490 --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/Program.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using System.Linq; + +namespace Ryujinx.BuildValidationTasks +{ + public class Program + { + static void Main(string[] args) + { + // Display the number of command line arguments. + if (args.Length == 0) + throw new ArgumentException("Error: too few arguments!"); + + string path = args[0]; + + if (string.IsNullOrEmpty(path)) + throw new ArgumentException("Error: path is null or empty!"); + + if (!Path.Exists(path)) + throw new FileLoadException($"path {{{path}}} does not exist!"); + + path = Path.GetFullPath(path); + + if (!Directory.GetDirectories(path).Contains($"{path}src")) + throw new FileLoadException($"path {{{path}}} is not a valid ryujinx project!"); + + bool isGitRunner = path.Contains("runner") || path.Contains("D:\\a\\Ryujinx\\Ryujinx"); + if (isGitRunner) + Console.WriteLine("Is Git Runner!"); + + // Run tasks + // Pass extra info needed in the task constructors + new LocalesValidationTask().Execute(path, isGitRunner); + } + } +} diff --git a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj index dbd9492df..c9fea9313 100644 --- a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj +++ b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj @@ -1,19 +1,17 @@ - netstandard2.0 - true + Exe - - - - + + - - - - + - + \ No newline at end of file diff --git a/src/Ryujinx.BuildValidationTasks/ValidationTask.cs b/src/Ryujinx.BuildValidationTasks/ValidationTask.cs new file mode 100644 index 000000000..f11c87f3b --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/ValidationTask.cs @@ -0,0 +1,7 @@ +namespace Ryujinx.BuildValidationTasks +{ + public interface ValidationTask + { + public bool Execute(string projectPath, bool isGitRunner); + } +} diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 6bede7999..31cba38dd 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1564,7 +1564,7 @@ "pl_PL": "Wersja", "pt_BR": "Versão", "ru_RU": "Версия", - "sv_SE": "Version", + "sv_SE": "", "th_TH": "เวอร์ชั่น", "tr_TR": "Sürüm", "uk_UA": "Версія", @@ -2213,8 +2213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "ExeFS", - "sv_SE": "ExeFS", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2263,8 +2263,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "RomFS", - "sv_SE": "RomFS", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2310,7 +2310,7 @@ "it_IT": "", "ja_JP": "ロゴ", "ko_KR": "로고", - "no_NO": "Logo", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "Лого", @@ -3260,11 +3260,11 @@ "it_IT": "Sistema", "ja_JP": "システム", "ko_KR": "시스템", - "no_NO": "System", + "no_NO": "", "pl_PL": "", "pt_BR": "Sistema", "ru_RU": "Система", - "sv_SE": "System", + "sv_SE": "", "th_TH": "ระบบ", "tr_TR": "Sistem", "uk_UA": "Система", @@ -3335,11 +3335,11 @@ "it_IT": "Giappone", "ja_JP": "日本", "ko_KR": "일본", - "no_NO": "Japan", + "no_NO": "", "pl_PL": "Japonia", "pt_BR": "Japão", "ru_RU": "Япония", - "sv_SE": "Japan", + "sv_SE": "", "th_TH": "ญี่ปุ่น", "tr_TR": "Japonya", "uk_UA": "Японія", @@ -3360,11 +3360,11 @@ "it_IT": "Stati Uniti d'America", "ja_JP": "アメリカ", "ko_KR": "미국", - "no_NO": "USA", + "no_NO": "", "pl_PL": "Stany Zjednoczone", "pt_BR": "EUA", "ru_RU": "США", - "sv_SE": "USA", + "sv_SE": "", "th_TH": "สหรัฐอเมริกา", "tr_TR": "ABD", "uk_UA": "США", @@ -3410,7 +3410,7 @@ "it_IT": "", "ja_JP": "オーストラリア", "ko_KR": "호주", - "no_NO": "Australia", + "no_NO": "", "pl_PL": "", "pt_BR": "Austrália", "ru_RU": "Австралия", @@ -3460,11 +3460,11 @@ "it_IT": "Corea", "ja_JP": "韓国", "ko_KR": "한국", - "no_NO": "Korea", + "no_NO": "", "pl_PL": "", "pt_BR": "Coreia", "ru_RU": "Корея", - "sv_SE": "Korea", + "sv_SE": "", "th_TH": "เกาหลี", "tr_TR": "Kore", "uk_UA": "Корея", @@ -3485,11 +3485,11 @@ "it_IT": "", "ja_JP": "台湾", "ko_KR": "대만", - "no_NO": "Taiwan", + "no_NO": "", "pl_PL": "Tajwan", "pt_BR": "", "ru_RU": "Тайвань", - "sv_SE": "Taiwan", + "sv_SE": "", "th_TH": "ไต้หวัน", "tr_TR": "Tayvan", "uk_UA": "Тайвань", @@ -3955,7 +3955,7 @@ "el_GR": "Ζώνη Ώρας Συστήματος:", "en_US": "System Time Zone:", "es_ES": "Zona horaria del sistema:", - "fr_FR": "Fuseau horaire du système :", + "fr_FR": "Fuseau horaire du système\u00A0:", "he_IL": "אזור זמן מערכת:", "it_IT": "Fuso orario del sistema:", "ja_JP": "タイムゾーン:", @@ -4135,11 +4135,11 @@ "it_IT": "", "ja_JP": "ダミー", "ko_KR": "더미", - "no_NO": "Dummy", + "no_NO": "", "pl_PL": "Atrapa", "pt_BR": "Nenhuma", "ru_RU": "Без звука", - "sv_SE": "Dummy", + "sv_SE": "", "th_TH": "", "tr_TR": "Yapay", "uk_UA": "", @@ -4163,8 +4163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "OpenAL", - "sv_SE": "OpenAL", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4188,8 +4188,8 @@ "no_NO": "Lyd Inn/Ut", "pl_PL": "", "pt_BR": "", - "ru_RU": "SoundIO", - "sv_SE": "SoundIO", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4213,8 +4213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "SDL2", - "sv_SE": "SDL2", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4230,12 +4230,12 @@ "el_GR": "Μικροδιορθώσεις", "en_US": "Hacks", "es_ES": "", - "fr_FR": "Hacks", + "fr_FR": "", "he_IL": "האצות", "it_IT": "Espedienti", "ja_JP": "ハック", "ko_KR": "핵", - "no_NO": "Hacks", + "no_NO": "", "pl_PL": "Hacki", "pt_BR": "", "ru_RU": "Хаки", @@ -4314,7 +4314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "4ГиБ", - "sv_SE": "4GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "4Гб", @@ -4339,7 +4339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "6ГиБ", - "sv_SE": "6GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "6Гб", @@ -4364,7 +4364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "8ГиБ", - "sv_SE": "8GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "8Гб", @@ -4389,7 +4389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "12ГиБ", - "sv_SE": "12GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "12Гб", @@ -4585,11 +4585,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배", - "no_NO": "2x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2x", - "sv_SE": "2x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4610,11 +4610,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "4배", - "no_NO": "4x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4x", - "sv_SE": "4x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4635,11 +4635,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "8배", - "no_NO": "8x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "8x", - "sv_SE": "8x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4660,11 +4660,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "16배", - "no_NO": "16x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16x", - "sv_SE": "16x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4760,11 +4760,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배(1440p/2160p)", - "no_NO": "2x (1440p/2160p)", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2x (1440p/2160p)", - "sv_SE": "2x (1440p/2160p)", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4785,11 +4785,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "3배(2160p/3240p)", - "no_NO": "3x (2160p/3240p)", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "3x (2160p/3240p)", - "sv_SE": "3x (2160p/3240p)", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4863,8 +4863,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4:3", - "sv_SE": "4:3", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4888,8 +4888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16:9", - "sv_SE": "16:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4913,8 +4913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16:10", - "sv_SE": "16:10", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4938,8 +4938,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "21:9", - "sv_SE": "21:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4960,11 +4960,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "32:9", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "32:9", - "sv_SE": "32:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -5060,7 +5060,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "Logging", + "no_NO": "", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -5085,7 +5085,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "Logging", + "no_NO": "", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -6113,8 +6113,8 @@ "no_NO": "", "pl_PL": "Pro Kontroler", "pt_BR": "", - "ru_RU": "Pro Controller", - "sv_SE": "Pro Controller", + "ru_RU": "", + "sv_SE": "", "th_TH": "โปรคอนโทรลเลอร์", "tr_TR": "Profesyonel Kumanda", "uk_UA": "Контролер Pro", @@ -8088,8 +8088,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Enter", - "sv_SE": "Enter", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8114,7 +8114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Esc", - "sv_SE": "Escape", + "sv_SE": "", "th_TH": "", "tr_TR": "Esc", "uk_UA": "", @@ -8163,8 +8163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Tab", - "sv_SE": "Tab", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8188,8 +8188,8 @@ "no_NO": "Tilbaketast", "pl_PL": "", "pt_BR": "", - "ru_RU": "Backspace", - "sv_SE": "Backspace", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "Geri tuşu", "uk_UA": "", @@ -8213,8 +8213,8 @@ "no_NO": "Sett inn", "pl_PL": "", "pt_BR": "", - "ru_RU": "Insert", - "sv_SE": "Insert", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8238,8 +8238,8 @@ "no_NO": "Slett", "pl_PL": "", "pt_BR": "", - "ru_RU": "Delete", - "sv_SE": "Delete", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8263,8 +8263,8 @@ "no_NO": "Side opp", "pl_PL": "", "pt_BR": "", - "ru_RU": "Page Up", - "sv_SE": "Page Up", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8288,8 +8288,8 @@ "no_NO": "Side ned", "pl_PL": "", "pt_BR": "", - "ru_RU": "Page Down", - "sv_SE": "Page Down", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8313,8 +8313,8 @@ "no_NO": "Hjem", "pl_PL": "", "pt_BR": "", - "ru_RU": "Home", - "sv_SE": "Home", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8338,8 +8338,8 @@ "no_NO": "Avslutt", "pl_PL": "", "pt_BR": "", - "ru_RU": "End", - "sv_SE": "End", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8363,8 +8363,8 @@ "no_NO": "Skiftelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Caps Lock", - "sv_SE": "Caps Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8388,8 +8388,8 @@ "no_NO": "Rullelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Scroll Lock", - "sv_SE": "Scroll Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8413,8 +8413,8 @@ "no_NO": "Skjermbilde", "pl_PL": "", "pt_BR": "", - "ru_RU": "Print Screen", - "sv_SE": "Print Screen", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8438,8 +8438,8 @@ "no_NO": "Stans midlertidig", "pl_PL": "", "pt_BR": "", - "ru_RU": "Pause", - "sv_SE": "Pause", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8463,8 +8463,8 @@ "no_NO": "Numerisk Lås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Num Lock", - "sv_SE": "Num Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8514,7 +8514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 0", - "sv_SE": "Keypad 0", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8539,7 +8539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 1", - "sv_SE": "Keypad 1", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8564,7 +8564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 2", - "sv_SE": "Keypad 2", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8589,7 +8589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 3", - "sv_SE": "Keypad 3", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8614,7 +8614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 4", - "sv_SE": "Keypad 4", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8639,7 +8639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 5", - "sv_SE": "Keypad 5", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8664,7 +8664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 6", - "sv_SE": "Keypad 6", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8689,7 +8689,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 7", - "sv_SE": "Keypad 7", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8714,7 +8714,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 8", - "sv_SE": "Keypad 8", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8739,7 +8739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 9", - "sv_SE": "Keypad 9", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8889,7 +8889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Enter (блок цифр)", - "sv_SE": "Keypad Enter", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8913,7 +8913,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "0", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8938,7 +8938,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "1", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8963,7 +8963,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8988,7 +8988,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "3", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9013,7 +9013,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9038,7 +9038,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "5", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9063,7 +9063,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "6", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9088,7 +9088,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "7", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9113,7 +9113,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "8", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9138,7 +9138,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "9", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9163,7 +9163,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "~", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9188,7 +9188,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "`", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9213,7 +9213,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "-", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9238,7 +9238,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "+", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9263,7 +9263,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "[", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9288,7 +9288,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "]", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9313,7 +9313,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ";", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9363,7 +9363,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ",", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9388,7 +9388,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ".", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9413,7 +9413,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "/", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9738,7 +9738,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "-", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9763,7 +9763,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "+", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "4", @@ -9789,7 +9789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Кнопка меню", - "sv_SE": "Guide", + "sv_SE": "", "th_TH": "", "tr_TR": "Rehber", "uk_UA": "", @@ -12438,7 +12438,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "{0}: {1}", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -14289,7 +14289,7 @@ "pl_PL": "Seria Amiibo", "pt_BR": "Franquia Amiibo", "ru_RU": "Серия Amiibo", - "sv_SE": "Amiibo Series", + "sv_SE": "", "th_TH": "", "tr_TR": "Amiibo Serisi", "uk_UA": "Серія Amiibo", @@ -15755,7 +15755,7 @@ "el_GR": "", "en_US": "Aspect Ratio applied to the renderer window.\n\nOnly change this if you're using an aspect ratio mod for your game, otherwise the graphics will be stretched.\n\nLeave on 16:9 if unsure.", "es_ES": "Relación de aspecto aplicada a la ventana del renderizador.\n\nSolamente modificar esto si estás utilizando un mod de relación de aspecto para su juego, en cualquier otro caso los gráficos se estirarán.\n\nDejar en 16:9 si no sabe que hacer.", - "fr_FR": "Format d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", + "fr_FR": "Format\u00A0d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format\u00A0d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", "he_IL": "", "it_IT": "Proporzioni dello schermo applicate alla finestra di renderizzazione.\n\nCambialo solo se stai usando una mod di proporzioni per il tuo gioco, altrimenti la grafica verrà allungata.\n\nLasciare il 16:9 se incerto.", "ja_JP": "レンダリングウインドウに適用するアスペクト比です.\n\nゲームにアスペクト比を変更する mod を使用している場合のみ変更してください.\n\nわからない場合は16:9のままにしておいてください.\n", @@ -17439,7 +17439,7 @@ "pl_PL": "Wersja {0}", "pt_BR": "Versão {0}", "ru_RU": "Версия {0}", - "sv_SE": "Version {0}", + "sv_SE": "", "th_TH": "เวอร์ชั่น {0}", "tr_TR": "Sürüm {0}", "uk_UA": "Версія {0}", @@ -17664,7 +17664,7 @@ "pl_PL": "", "pt_BR": "Ryujinx - Informação", "ru_RU": "Ryujinx - Информация", - "sv_SE": "Ryujinx - Info", + "sv_SE": "", "th_TH": "Ryujinx – ข้อมูล", "tr_TR": "Ryujinx - Bilgi", "uk_UA": "Ryujin x - Інформація", @@ -18813,8 +18813,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Amiibo", - "sv_SE": "Amiibo", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -19435,7 +19435,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "XCI 파일 트리머", - "no_NO": "XCI File Trimmer", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "Уменьшение размера XCI файлов", @@ -19639,7 +19639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "{0:n0} Мб", - "sv_SE": "{0:n0} Mb", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "{0:n0} Мб", @@ -20914,7 +20914,7 @@ "pl_PL": "Głoś", "pt_BR": "", "ru_RU": "Громкость", - "sv_SE": "Vol", + "sv_SE": "", "th_TH": "ระดับเสียง", "tr_TR": "Ses", "uk_UA": "Гуч.", @@ -21055,7 +21055,7 @@ "el_GR": "Όνομα", "en_US": "Name", "es_ES": "Nombre", - "fr_FR": "Nom ", + "fr_FR": "Nom\u00A0", "he_IL": "שם", "it_IT": "Nome", "ja_JP": "名称", @@ -21388,8 +21388,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "FSR", - "sv_SE": "FSR", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21888,8 +21888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "ldn_mitm", - "sv_SE": "ldn_mitm", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21913,8 +21913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "RyuLDN", - "sv_SE": "RyuLDN", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22214,7 +22214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вертикальная синхронизация:", - "sv_SE": "VSync:", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "Вертикальна синхронізація (VSync):", @@ -22255,7 +22255,7 @@ "el_GR": "", "en_US": "Switch", "es_ES": "", - "fr_FR": "Switch", + "fr_FR": "", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -22264,7 +22264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Консоль", - "sv_SE": "Switch", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22598,4 +22598,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 9d23b0909..461e556ea 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -13,9 +13,10 @@ $(DefaultItemExcludes);._* - - - + + + + -- 2.47.1 From a5cde8e006ad167c0d250e487e935a62dc1ecf8f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 03:01:34 -0600 Subject: [PATCH 243/722] misc: Update Gommon, apply new extension --- Directory.Packages.props | 2 +- src/Ryujinx/UI/Views/Main/MainViewControls.axaml.cs | 1 - src/Ryujinx/Utilities/AppLibrary/LdnGameData.cs | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 59abe363c..070c1330c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -41,7 +41,7 @@ - + diff --git a/src/Ryujinx/UI/Views/Main/MainViewControls.axaml.cs b/src/Ryujinx/UI/Views/Main/MainViewControls.axaml.cs index d5f7fbd1c..7a83a36de 100644 --- a/src/Ryujinx/UI/Views/Main/MainViewControls.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainViewControls.axaml.cs @@ -26,7 +26,6 @@ namespace Ryujinx.Ava.UI.Views.Main { DataContext = ViewModel = window.ViewModel; } - } public void Sort_Checked(object sender, RoutedEventArgs args) diff --git a/src/Ryujinx/Utilities/AppLibrary/LdnGameData.cs b/src/Ryujinx/Utilities/AppLibrary/LdnGameData.cs index c1653df97..4b9b8fe6c 100644 --- a/src/Ryujinx/Utilities/AppLibrary/LdnGameData.cs +++ b/src/Ryujinx/Utilities/AppLibrary/LdnGameData.cs @@ -1,3 +1,4 @@ +using Gommon; using LibHac.Ns; using System; using System.Collections.Generic; @@ -22,7 +23,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary LibHac.Common.FixedArrays.Array8 communicationId = acp.LocalCommunicationId; return new Array(receivedData.Where(game => - communicationId.Items.Contains(Convert.ToUInt64(game.TitleId, 16)) + communicationId.Items.Contains(game.TitleId.ToULong()) )); } -- 2.47.1 From 318498eab05f87546fb10a85bd376bdf8be33d3f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 20:57:18 -0600 Subject: [PATCH 244/722] misc: prefix ValidationTask with I, it's an interface Mention in PR comment script that you now need to be logged into GitHub to download artifacts. --- .github/workflows/nightly_pr_comment.yml | 2 +- .../{ValidationTask.cs => IValidationTask.cs} | 2 +- src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/Ryujinx.BuildValidationTasks/{ValidationTask.cs => IValidationTask.cs} (76%) diff --git a/.github/workflows/nightly_pr_comment.yml b/.github/workflows/nightly_pr_comment.yml index 6ca4710dc..fb7cdb359 100644 --- a/.github/workflows/nightly_pr_comment.yml +++ b/.github/workflows/nightly_pr_comment.yml @@ -37,7 +37,7 @@ jobs: if (!artifacts.length) { return core.error(`No artifacts found`); } - let body = `Download the artifacts for this pull request:\n`; + let body = `*You need to be logged into GitHub to download these files.*\n\nDownload the artifacts for this pull request:\n`; let hidden_debug_artifacts = `\n\n
Only for Developers\n`; for (const art of artifacts) { const url = `https://github.com/Ryubing/Ryujinx/actions/runs/${run_id}/artifacts/${art.id}`; diff --git a/src/Ryujinx.BuildValidationTasks/ValidationTask.cs b/src/Ryujinx.BuildValidationTasks/IValidationTask.cs similarity index 76% rename from src/Ryujinx.BuildValidationTasks/ValidationTask.cs rename to src/Ryujinx.BuildValidationTasks/IValidationTask.cs index f11c87f3b..682d79a0a 100644 --- a/src/Ryujinx.BuildValidationTasks/ValidationTask.cs +++ b/src/Ryujinx.BuildValidationTasks/IValidationTask.cs @@ -1,6 +1,6 @@ namespace Ryujinx.BuildValidationTasks { - public interface ValidationTask + public interface IValidationTask { public bool Execute(string projectPath, bool isGitRunner); } diff --git a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs index 05eaee539..1f2c39e95 100644 --- a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs +++ b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs @@ -7,7 +7,7 @@ using System.Text.Encodings.Web; namespace Ryujinx.BuildValidationTasks { - public class LocalesValidationTask : ValidationTask + public class LocalesValidationTask : IValidationTask { public LocalesValidationTask() { } -- 2.47.1 From e92f52e56cc2e671acb768b42b61a1e45148c743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hack=E8=8C=B6=E3=82=93?= <120134269+Hackjjang@users.noreply.github.com> Date: Tue, 31 Dec 2024 12:13:43 +0900 Subject: [PATCH 245/722] Korean translations for new locale keys (#465) --- src/Ryujinx/Assets/locales.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 31cba38dd..b3a7a51b8 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1234,7 +1234,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "자주 묻는 질문(FAQ) 및 안내", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -2609,7 +2609,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "펌웨어 버전 : {0}", "no_NO": "", "pl_PL": "", "pt_BR": "Versão do firmware: {0}", @@ -4009,7 +4009,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "PC 날짜와 시간에 동기화", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -15259,7 +15259,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "시스템 시간을 PC의 현재 날짜 및 시간과 일치하도록 다시 동기화합니다.\n\n이 설정은 활성 설정이 아니므로 여전히 동기화되지 않을 수 있으며, 이 경우 이 버튼을 다시 클릭하면 됩니다.", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -20509,7 +20509,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "자동", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -20534,7 +20534,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "Vulkan을 사용합니다.\nARM 맥에서 해당 플랫폼에서 잘 실행되는 게임을 플레이하는 경우 Metal 후단부를 사용합니다.", "no_NO": "", "pl_PL": "", "pt_BR": "", -- 2.47.1 From b6f88514f9937f17eddc4df9efafaebc96fd1b10 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 22:10:12 -0600 Subject: [PATCH 246/722] misc: Move BitTricks methods into BitUtils Cleanup DirtyHackCollection --- src/Ryujinx.Common/BitTricks.cs | 35 ---------------- .../Configuration/DirtyHacks.cs | 40 ++++++++----------- src/Ryujinx.Common/Utilities/BitUtils.cs | 30 ++++++++++++++ 3 files changed, 47 insertions(+), 58 deletions(-) delete mode 100644 src/Ryujinx.Common/BitTricks.cs diff --git a/src/Ryujinx.Common/BitTricks.cs b/src/Ryujinx.Common/BitTricks.cs deleted file mode 100644 index d0c689291..000000000 --- a/src/Ryujinx.Common/BitTricks.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace Ryujinx.Common -{ - public class BitTricks - { - // Never actually written bit packing logic before, so I looked it up. - // This code is from https://gist.github.com/Alan-FGR/04938e93e2bffdf5802ceb218a37c195 - - public static ulong PackBitFields(uint[] values, byte[] bitFields) - { - ulong retVal = values[0]; //we set the first value right away - for (int f = 1; f < values.Length; f++) - { - retVal <<= bitFields[f]; // we shift the previous value - retVal += values[f];// and add our current value - } - return retVal; - } - - public static uint[] UnpackBitFields(ulong packed, byte[] bitFields) - { - int fields = bitFields.Length - 1; // number of fields to unpack - uint[] retArr = new uint[fields + 1]; // init return array - int curPos = 0; // current field bit position (start) - int lastEnd; // position where last field ended - for (int f = fields; f >= 0; f--) // loop from last - { - lastEnd = curPos; // we store where the last value ended - curPos += bitFields[f]; // we get where the current value starts - int leftShift = 64 - curPos; // we figure how much left shift we gotta apply for the other numbers to overflow into oblivion - retArr[f] = (uint)((packed << leftShift) >> leftShift + lastEnd); // we do magic - } - return retArr; - } - } -} diff --git a/src/Ryujinx.Common/Configuration/DirtyHacks.cs b/src/Ryujinx.Common/Configuration/DirtyHacks.cs index 1015e95d1..e52c96cf1 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHacks.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHacks.cs @@ -1,4 +1,5 @@ -using System; +using Gommon; +using System; using System.Collections.Generic; using System.Linq; @@ -14,12 +15,14 @@ namespace Ryujinx.Common.Configuration public record EnabledDirtyHack(DirtyHacks Hack, int Value) { public static readonly byte[] PackedFormat = [8, 32]; - - public ulong Pack() => BitTricks.PackBitFields([(uint)Hack, (uint)Value], PackedFormat); + + private uint[] Raw => [(uint)Hack, (uint)Value.CoerceAtLeast(0)]; + + public ulong Pack() => Raw.PackBitFields(PackedFormat); public static EnabledDirtyHack Unpack(ulong packedHack) { - var unpackedFields = BitTricks.UnpackBitFields(packedHack, PackedFormat); + var unpackedFields = packedHack.UnpackBitFields(PackedFormat); if (unpackedFields is not [var hack, var value]) throw new ArgumentException(nameof(packedHack)); @@ -29,26 +32,17 @@ namespace Ryujinx.Common.Configuration public class DirtyHackCollection : Dictionary { - public DirtyHackCollection(EnabledDirtyHack[] hacks) - { - foreach ((DirtyHacks dirtyHacks, int value) in hacks) - { - Add(dirtyHacks, value); - } - } - - public DirtyHackCollection(ulong[] packedHacks) - { - foreach ((DirtyHacks dirtyHacks, int value) in packedHacks.Select(EnabledDirtyHack.Unpack)) - { - Add(dirtyHacks, value); - } - } + public DirtyHackCollection(IEnumerable hacks) + => hacks.ForEach(edh => Add(edh.Hack, edh.Value)); - public ulong[] PackEntries() => - this - .Select(it => - BitTricks.PackBitFields([(uint)it.Key, (uint)it.Value], EnabledDirtyHack.PackedFormat)) + public DirtyHackCollection(ulong[] packedHacks) : this(packedHacks.Select(EnabledDirtyHack.Unpack)) {} + + public ulong[] PackEntries() + => Entries.Select(it => it.Pack()).ToArray(); + + public EnabledDirtyHack[] Entries + => this + .Select(it => new EnabledDirtyHack(it.Key, it.Value)) .ToArray(); public static implicit operator DirtyHackCollection(EnabledDirtyHack[] hacks) => new(hacks); diff --git a/src/Ryujinx.Common/Utilities/BitUtils.cs b/src/Ryujinx.Common/Utilities/BitUtils.cs index b9dae2e53..acbdde1f6 100644 --- a/src/Ryujinx.Common/Utilities/BitUtils.cs +++ b/src/Ryujinx.Common/Utilities/BitUtils.cs @@ -40,5 +40,35 @@ namespace Ryujinx.Common return (value >> 32) | (value << 32); } + + // Never actually written bit packing logic before, so I looked it up. + // This code is from https://gist.github.com/Alan-FGR/04938e93e2bffdf5802ceb218a37c195 + + public static ulong PackBitFields(this uint[] values, byte[] bitFields) + { + ulong retVal = values[0]; //we set the first value right away + for (int f = 1; f < values.Length; f++) + { + retVal <<= bitFields[f]; // we shift the previous value + retVal += values[f];// and add our current value + } + return retVal; + } + + public static uint[] UnpackBitFields(this ulong packed, byte[] bitFields) + { + int fields = bitFields.Length - 1; // number of fields to unpack + uint[] retArr = new uint[fields + 1]; // init return array + int curPos = 0; // current field bit position (start) + int lastEnd; // position where last field ended + for (int f = fields; f >= 0; f--) // loop from last + { + lastEnd = curPos; // we store where the last value ended + curPos += bitFields[f]; // we get where the current value starts + int leftShift = 64 - curPos; // we figure how much left shift we gotta apply for the other numbers to overflow into oblivion + retArr[f] = (uint)((packed << leftShift) >> leftShift + lastEnd); // we do magic + } + return retArr; + } } } -- 2.47.1 From 172869bfba9322ddb4336ef1ec027f656a51d3bb Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 22:11:05 -0600 Subject: [PATCH 247/722] misc: cleanup applying the current dirty hacks to the config upon loading the json --- .../ConfigurationState.Migration.cs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 210132117..828ceba57 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -1,3 +1,4 @@ +using Gommon; using Ryujinx.Ava.Utilities.Configuration.System; using Ryujinx.Ava.Utilities.Configuration.UI; using Ryujinx.Common.Configuration; @@ -9,7 +10,6 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE; using System; using System.Collections.Generic; -using System.Linq; namespace Ryujinx.Ava.Utilities.Configuration { @@ -752,14 +752,12 @@ namespace Ryujinx.Ava.Utilities.Configuration Hacks.ShowDirtyHacks.Value = configurationFileFormat.ShowDirtyHacks; { - EnabledDirtyHack[] hacks = (configurationFileFormat.DirtyHacks ?? []).Select(EnabledDirtyHack.Unpack).ToArray(); - - Hacks.Xc2MenuSoftlockFix.Value = hacks.Any(it => it.Hack == DirtyHacks.Xc2MenuSoftlockFix); - - var shaderCompilationThreadSleep = hacks.FirstOrDefault(it => - it.Hack == DirtyHacks.ShaderCompilationThreadSleep); - Hacks.EnableShaderTranslationDelay.Value = shaderCompilationThreadSleep != null; - Hacks.ShaderTranslationDelay.Value = shaderCompilationThreadSleep?.Value ?? 0; + DirtyHackCollection hacks = new (configurationFileFormat.DirtyHacks ?? []); + + Hacks.Xc2MenuSoftlockFix.Value = hacks.IsEnabled(DirtyHacks.Xc2MenuSoftlockFix); + + Hacks.EnableShaderTranslationDelay.Value = hacks.IsEnabled(DirtyHacks.ShaderCompilationThreadSleep); + Hacks.ShaderTranslationDelay.Value = hacks[DirtyHacks.ShaderCompilationThreadSleep].CoerceAtLeast(0); } if (configurationFileUpdated) -- 2.47.1 From f426945fec7620ac93217677104de72ab40d76f2 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 22:18:35 -0600 Subject: [PATCH 248/722] misc: Rename DirtyHacks to DirtyHack Rename DirtyHack.ShaderCompilationThreadSleep to ShaderTranslationDelay Changed EnabledDirtyHack to a struct rename DirtyHackCollection to DirtyHacks --- .../{DirtyHacks.cs => DirtyHack.cs} | 35 +++++++++++-------- src/Ryujinx.Graphics.Gpu/GpuContext.cs | 10 ++++-- .../DiskCache/ParallelDiskCacheLoader.cs | 4 +-- .../Services/Fs/FileSystemProxy/IStorage.cs | 2 +- src/Ryujinx.HLE/Switch.cs | 4 +-- .../ConfigurationState.Migration.cs | 8 ++--- .../Configuration/ConfigurationState.Model.cs | 6 ++-- 7 files changed, 39 insertions(+), 30 deletions(-) rename src/Ryujinx.Common/Configuration/{DirtyHacks.cs => DirtyHack.cs} (53%) diff --git a/src/Ryujinx.Common/Configuration/DirtyHacks.cs b/src/Ryujinx.Common/Configuration/DirtyHack.cs similarity index 53% rename from src/Ryujinx.Common/Configuration/DirtyHacks.cs rename to src/Ryujinx.Common/Configuration/DirtyHack.cs index e52c96cf1..6e21fe44e 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHacks.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHack.cs @@ -6,18 +6,19 @@ using System.Linq; namespace Ryujinx.Common.Configuration { [Flags] - public enum DirtyHacks : byte + public enum DirtyHack : byte { Xc2MenuSoftlockFix = 1, - ShaderCompilationThreadSleep = 2 + ShaderTranslationDelay = 2 } - public record EnabledDirtyHack(DirtyHacks Hack, int Value) + public readonly struct EnabledDirtyHack(DirtyHack hack, int value) { - public static readonly byte[] PackedFormat = [8, 32]; - - private uint[] Raw => [(uint)Hack, (uint)Value.CoerceAtLeast(0)]; - + public DirtyHack Hack => hack; + public int Value => value; + + + public ulong Pack() => Raw.PackBitFields(PackedFormat); public static EnabledDirtyHack Unpack(ulong packedHack) @@ -26,16 +27,20 @@ namespace Ryujinx.Common.Configuration if (unpackedFields is not [var hack, var value]) throw new ArgumentException(nameof(packedHack)); - return new EnabledDirtyHack((DirtyHacks)hack, (int)value); + return new EnabledDirtyHack((DirtyHack)hack, (int)value); } + + private uint[] Raw => [(uint)Hack, (uint)Value.CoerceAtLeast(0)]; + + public static readonly byte[] PackedFormat = [8, 32]; } - public class DirtyHackCollection : Dictionary + public class DirtyHacks : Dictionary { - public DirtyHackCollection(IEnumerable hacks) + public DirtyHacks(IEnumerable hacks) => hacks.ForEach(edh => Add(edh.Hack, edh.Value)); - public DirtyHackCollection(ulong[] packedHacks) : this(packedHacks.Select(EnabledDirtyHack.Unpack)) {} + public DirtyHacks(ulong[] packedHacks) : this(packedHacks.Select(EnabledDirtyHack.Unpack)) {} public ulong[] PackEntries() => Entries.Select(it => it.Pack()).ToArray(); @@ -45,11 +50,11 @@ namespace Ryujinx.Common.Configuration .Select(it => new EnabledDirtyHack(it.Key, it.Value)) .ToArray(); - public static implicit operator DirtyHackCollection(EnabledDirtyHack[] hacks) => new(hacks); - public static implicit operator DirtyHackCollection(ulong[] packedHacks) => new(packedHacks); + public static implicit operator DirtyHacks(EnabledDirtyHack[] hacks) => new(hacks); + public static implicit operator DirtyHacks(ulong[] packedHacks) => new(packedHacks); - public new int this[DirtyHacks hack] => TryGetValue(hack, out var value) ? value : -1; + public new int this[DirtyHack hack] => TryGetValue(hack, out var value) ? value : -1; - public bool IsEnabled(DirtyHacks hack) => ContainsKey(hack); + public bool IsEnabled(DirtyHack hack) => ContainsKey(hack); } } diff --git a/src/Ryujinx.Graphics.Gpu/GpuContext.cs b/src/Ryujinx.Graphics.Gpu/GpuContext.cs index 84bc0b9a9..f7e8f1bf8 100644 --- a/src/Ryujinx.Graphics.Gpu/GpuContext.cs +++ b/src/Ryujinx.Graphics.Gpu/GpuContext.cs @@ -92,7 +92,11 @@ namespace Ryujinx.Graphics.Gpu ///
internal SupportBufferUpdater SupportBufferUpdater { get; } - internal DirtyHackCollection DirtyHacks { get; } + /// + /// Enabled dirty hacks. + /// Used for workarounds to emulator bugs we can't fix/don't know how to fix yet. + /// + internal DirtyHacks DirtyHacks { get; } /// @@ -117,7 +121,7 @@ namespace Ryujinx.Graphics.Gpu /// Creates a new instance of the GPU emulation context. /// /// Host renderer - public GpuContext(IRenderer renderer, DirtyHackCollection hackCollection) + public GpuContext(IRenderer renderer, DirtyHacks hacks) { Renderer = renderer; @@ -140,7 +144,7 @@ namespace Ryujinx.Graphics.Gpu SupportBufferUpdater = new SupportBufferUpdater(renderer); - DirtyHacks = hackCollection; + DirtyHacks = hacks; _firstTimestamp = ConvertNanosecondsToTicks((ulong)PerformanceCounter.ElapsedNanoseconds); } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 9aa96a76f..910e9aea0 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -367,8 +367,8 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { try { - if (_context.DirtyHacks.IsEnabled(DirtyHacks.ShaderCompilationThreadSleep)) - Thread.Sleep(_context.DirtyHacks[DirtyHacks.ShaderCompilationThreadSleep]); + if (_context.DirtyHacks.IsEnabled(DirtyHack.ShaderTranslationDelay)) + Thread.Sleep(_context.DirtyHacks[DirtyHack.ShaderTranslationDelay]); AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute); _asyncTranslationQueue.Add(asyncTranslation, _cancellationToken); diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs index ac5dc04e9..3d197ac19 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs @@ -39,7 +39,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseStorage.Get.Read((long)offset, new OutBuffer(region.Memory.Span), (long)size); - if (context.Device.DirtyHacks.IsEnabled(DirtyHacks.Xc2MenuSoftlockFix) && TitleIDs.CurrentApplication.Value == Xc2TitleId) + if (context.Device.DirtyHacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix) && TitleIDs.CurrentApplication.Value == Xc2TitleId) { // Add a load-bearing sleep to avoid XC2 softlock // https://web.archive.org/web/20240728045136/https://github.com/Ryujinx/Ryujinx/issues/2357 diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index 127e532e2..25e65354f 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -40,7 +40,7 @@ namespace Ryujinx.HLE public bool IsFrameAvailable => Gpu.Window.IsFrameAvailable; - public DirtyHackCollection DirtyHacks { get; } + public DirtyHacks DirtyHacks { get; } public Switch(HLEConfiguration configuration) { @@ -57,7 +57,7 @@ namespace Ryujinx.HLE : MemoryAllocationFlags.Reserve | MemoryAllocationFlags.Mirrorable; #pragma warning disable IDE0055 // Disable formatting - DirtyHacks = new DirtyHackCollection(Configuration.Hacks); + DirtyHacks = new DirtyHacks(Configuration.Hacks); AudioDeviceDriver = new CompatLayerHardwareDeviceDriver(Configuration.AudioDeviceDriver); Memory = new MemoryBlock(Configuration.MemoryConfiguration.ToDramSize(), memoryAllocationFlags); Gpu = new GpuContext(Configuration.GpuRenderer, DirtyHacks); diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 828ceba57..551e3ab8e 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -752,12 +752,12 @@ namespace Ryujinx.Ava.Utilities.Configuration Hacks.ShowDirtyHacks.Value = configurationFileFormat.ShowDirtyHacks; { - DirtyHackCollection hacks = new (configurationFileFormat.DirtyHacks ?? []); + DirtyHacks hacks = new (configurationFileFormat.DirtyHacks ?? []); - Hacks.Xc2MenuSoftlockFix.Value = hacks.IsEnabled(DirtyHacks.Xc2MenuSoftlockFix); + Hacks.Xc2MenuSoftlockFix.Value = hacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix); - Hacks.EnableShaderTranslationDelay.Value = hacks.IsEnabled(DirtyHacks.ShaderCompilationThreadSleep); - Hacks.ShaderTranslationDelay.Value = hacks[DirtyHacks.ShaderCompilationThreadSleep].CoerceAtLeast(0); + Hacks.EnableShaderTranslationDelay.Value = hacks.IsEnabled(DirtyHack.ShaderTranslationDelay); + Hacks.ShaderTranslationDelay.Value = hacks[DirtyHack.ShaderTranslationDelay].CoerceAtLeast(0); } if (configurationFileUpdated) diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index 2a91bf65b..4fc25addb 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -666,14 +666,14 @@ namespace Ryujinx.Ava.Utilities.Configuration List enabledHacks = []; if (Xc2MenuSoftlockFix) - Apply(DirtyHacks.Xc2MenuSoftlockFix); + Apply(DirtyHack.Xc2MenuSoftlockFix); if (EnableShaderTranslationDelay) - Apply(DirtyHacks.ShaderCompilationThreadSleep, ShaderTranslationDelay); + Apply(DirtyHack.ShaderTranslationDelay, ShaderTranslationDelay); return enabledHacks.ToArray(); - void Apply(DirtyHacks hack, int value = 0) + void Apply(DirtyHack hack, int value = 0) { enabledHacks.Add(new EnabledDirtyHack(hack, value)); } -- 2.47.1 From e50198b37d72d6a058bc92e4e258ded3848a7f3c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 23:11:59 -0600 Subject: [PATCH 249/722] Clarify DramSize XMLdoc --- src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs index 540024cbd..947dd5c8f 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs @@ -272,7 +272,7 @@ namespace Ryujinx.Ava.Utilities.Configuration public MemoryManagerMode MemoryManagerMode { get; set; } /// - /// Expands the RAM amount on the emulated system from 4GiB to 8GiB + /// Expands the RAM amount on the emulated system /// public MemoryConfiguration DramSize { get; set; } -- 2.47.1 From df150f0788ba53ca7b3c43428961d6bfe39aad56 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 23:14:05 -0600 Subject: [PATCH 250/722] misc: Significantly reduce duplicated code in ConfigurationState migration logic. 300 lines removed; functionally identical. --- .../ConfigurationState.Migration.cs | 694 +++++------------- 1 file changed, 169 insertions(+), 525 deletions(-) diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 551e3ab8e..8ff06bf26 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -9,7 +9,7 @@ using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; using Ryujinx.HLE; using System; -using System.Collections.Generic; +using System.Linq; namespace Ryujinx.Ava.Utilities.Configuration { @@ -17,6 +17,7 @@ namespace Ryujinx.Ava.Utilities.Configuration { public void Load(ConfigurationFileFormat configurationFileFormat, string configurationFilePath) { + // referenced by Migrate bool configurationFileUpdated = false; if (configurationFileFormat.Version is < 0 or > ConfigurationFileFormat.CurrentVersion) @@ -25,174 +26,48 @@ namespace Ryujinx.Ava.Utilities.Configuration LoadDefault(); } - - if (configurationFileFormat.Version < 2) + + Migrate(2, static cff => cff.SystemRegion = Region.USA); + Migrate(3, static cff => cff.SystemTimeZone = "UTC"); + Migrate(4, static cff => cff.MaxAnisotropy = -1); + Migrate(5, static cff => cff.SystemTimeOffset = 0); + Migrate(8, static cff => cff.EnablePtc = true); + Migrate(9, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 2."); - - configurationFileFormat.SystemRegion = Region.USA; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 3) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 3."); - - configurationFileFormat.SystemTimeZone = "UTC"; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 4) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 4."); - - configurationFileFormat.MaxAnisotropy = -1; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 5) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 5."); - - configurationFileFormat.SystemTimeOffset = 0; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 8) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 8."); - - configurationFileFormat.EnablePtc = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 9) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 9."); - - configurationFileFormat.ColumnSort = new ColumnSort + cff.ColumnSort = new ColumnSort { SortColumnId = 0, - SortAscending = false, + SortAscending = false }; - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = Key.F1, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 10) + cff.Hotkeys = new KeyboardHotkeys { ToggleVSyncMode = Key.F1 }; + }); + Migrate(10, static cff => cff.AudioBackend = AudioBackend.OpenAl); + Migrate(11, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 10."); - - configurationFileFormat.AudioBackend = AudioBackend.OpenAl; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 11) + cff.ResScale = 1; + cff.ResScaleCustom = 1.0f; + }); + Migrate(12, static cff => cff.LoggingGraphicsDebugLevel = GraphicsDebugLevel.None); + // 13 -> LDN1 + Migrate(14, static cff => cff.CheckUpdatesOnStart = true); + Migrate(16, static cff => cff.EnableShaderCache = true); + Migrate(17, static cff => cff.StartFullscreen = false); + Migrate(18, static cff => cff.AspectRatio = AspectRatio.Fixed16x9); + // 19 -> LDN2 + Migrate(20, static cff => cff.ShowConfirmExit = true); + Migrate(21, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 11."); - - configurationFileFormat.ResScale = 1; - configurationFileFormat.ResScaleCustom = 1.0f; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 12) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 12."); - - configurationFileFormat.LoggingGraphicsDebugLevel = GraphicsDebugLevel.None; - - configurationFileUpdated = true; - } - - // configurationFileFormat.Version == 13 -> LDN1 - - if (configurationFileFormat.Version < 14) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 14."); - - configurationFileFormat.CheckUpdatesOnStart = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 16) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 16."); - - configurationFileFormat.EnableShaderCache = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 17) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 17."); - - configurationFileFormat.StartFullscreen = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 18) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 18."); - - configurationFileFormat.AspectRatio = AspectRatio.Fixed16x9; - - configurationFileUpdated = true; - } - - // configurationFileFormat.Version == 19 -> LDN2 - - if (configurationFileFormat.Version < 20) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 20."); - - configurationFileFormat.ShowConfirmExit = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 21) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 21."); - // Initialize network config. - - configurationFileFormat.MultiplayerMode = MultiplayerMode.Disabled; - configurationFileFormat.MultiplayerLanInterfaceId = "0"; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 22) + + cff.MultiplayerMode = MultiplayerMode.Disabled; + cff.MultiplayerLanInterfaceId = "0"; + }); + Migrate(22, static cff => cff.HideCursor = HideCursorMode.Never); + Migrate(24, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 22."); - - configurationFileFormat.HideCursor = HideCursorMode.Never; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 24) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 24."); - - configurationFileFormat.InputConfig = new List - { + cff.InputConfig = + [ new StandardKeyboardInputConfig { Version = InputConfig.CurrentVersion, @@ -240,69 +115,21 @@ namespace Ryujinx.Ava.Utilities.Configuration StickRight = Key.L, StickButton = Key.H, }, - }, - }; + } - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 25) + ]; + }); + Migrate(26, static cff => cff.MemoryManagerMode = MemoryManagerMode.HostMappedUnsafe); + Migrate(27, static cff => cff.EnableMouse = false); + Migrate(29, static cff => cff.Hotkeys = new KeyboardHotkeys { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 25."); - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 26) + ToggleVSyncMode = Key.F1, + Screenshot = Key.F8, + ShowUI = Key.F4 + }); + Migrate(30, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 26."); - - configurationFileFormat.MemoryManagerMode = MemoryManagerMode.HostMappedUnsafe; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 27) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 27."); - - configurationFileFormat.EnableMouse = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 28) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 28."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = Key.F1, - Screenshot = Key.F8, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 29) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 29."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = Key.F1, - Screenshot = Key.F8, - ShowUI = Key.F4, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 30) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 30."); - - foreach (InputConfig config in configurationFileFormat.InputConfig) + foreach (InputConfig config in cff.InputConfig) { if (config is StandardControllerInputConfig controllerConfig) { @@ -314,342 +141,146 @@ namespace Ryujinx.Ava.Utilities.Configuration }; } } - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 31) + }); + Migrate(31, static cff => cff.BackendThreading = BackendThreading.Auto); + Migrate(32, static cff => cff.Hotkeys = new KeyboardHotkeys { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 31."); - - configurationFileFormat.BackendThreading = BackendThreading.Auto; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 32) + ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, + Screenshot = cff.Hotkeys.Screenshot, + ShowUI = cff.Hotkeys.ShowUI, + Pause = Key.F5, + }); + Migrate(33, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 32."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys + cff.Hotkeys = new KeyboardHotkeys { - ToggleVSyncMode = configurationFileFormat.Hotkeys.ToggleVSyncMode, - Screenshot = configurationFileFormat.Hotkeys.Screenshot, - ShowUI = configurationFileFormat.Hotkeys.ShowUI, - Pause = Key.F5, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 33) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 33."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = configurationFileFormat.Hotkeys.ToggleVSyncMode, - Screenshot = configurationFileFormat.Hotkeys.Screenshot, - ShowUI = configurationFileFormat.Hotkeys.ShowUI, - Pause = configurationFileFormat.Hotkeys.Pause, + ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, + Screenshot = cff.Hotkeys.Screenshot, + ShowUI = cff.Hotkeys.ShowUI, + Pause = cff.Hotkeys.Pause, ToggleMute = Key.F2, }; - configurationFileFormat.AudioVolume = 1; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 34) + cff.AudioVolume = 1; + }); + Migrate(34, static cff => cff.EnableInternetAccess = false); + Migrate(35, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 34."); - - configurationFileFormat.EnableInternetAccess = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 35) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 35."); - - foreach (InputConfig config in configurationFileFormat.InputConfig) + foreach (StandardControllerInputConfig config in cff.InputConfig + .Where(it => it is StandardControllerInputConfig) + .Cast()) { - if (config is StandardControllerInputConfig controllerConfig) - { - controllerConfig.RangeLeft = 1.0f; - controllerConfig.RangeRight = 1.0f; - } + config.RangeLeft = 1.0f; + config.RangeRight = 1.0f; } - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 36) + }); + + Migrate(36, static cff => cff.LoggingEnableTrace = false); + Migrate(37, static cff => cff.ShowConsole = true); + Migrate(38, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 36."); - - configurationFileFormat.LoggingEnableTrace = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 37) + cff.BaseStyle = "Dark"; + cff.GameListViewMode = 0; + cff.ShowNames = true; + cff.GridSize = 2; + cff.LanguageCode = "en_US"; + }); + Migrate(39, static cff => cff.Hotkeys = new KeyboardHotkeys { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 37."); - - configurationFileFormat.ShowConsole = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 38) + ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, + Screenshot = cff.Hotkeys.Screenshot, + ShowUI = cff.Hotkeys.ShowUI, + Pause = cff.Hotkeys.Pause, + ToggleMute = cff.Hotkeys.ToggleMute, + ResScaleUp = Key.Unbound, + ResScaleDown = Key.Unbound + }); + Migrate(40, static cff => cff.GraphicsBackend = GraphicsBackend.OpenGl); + Migrate(41, static cff => cff.Hotkeys = new KeyboardHotkeys { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 38."); - - configurationFileFormat.BaseStyle = "Dark"; - configurationFileFormat.GameListViewMode = 0; - configurationFileFormat.ShowNames = true; - configurationFileFormat.GridSize = 2; - configurationFileFormat.LanguageCode = "en_US"; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 39) + ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, + Screenshot = cff.Hotkeys.Screenshot, + ShowUI = cff.Hotkeys.ShowUI, + Pause = cff.Hotkeys.Pause, + ToggleMute = cff.Hotkeys.ToggleMute, + ResScaleUp = cff.Hotkeys.ResScaleUp, + ResScaleDown = cff.Hotkeys.ResScaleDown, + VolumeUp = Key.Unbound, + VolumeDown = Key.Unbound + }); + Migrate(42, static cff => cff.EnableMacroHLE = true); + Migrate(43, static cff => cff.UseHypervisor = true); + Migrate(44, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 39."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = configurationFileFormat.Hotkeys.ToggleVSyncMode, - Screenshot = configurationFileFormat.Hotkeys.Screenshot, - ShowUI = configurationFileFormat.Hotkeys.ShowUI, - Pause = configurationFileFormat.Hotkeys.Pause, - ToggleMute = configurationFileFormat.Hotkeys.ToggleMute, - ResScaleUp = Key.Unbound, - ResScaleDown = Key.Unbound, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 40) + cff.AntiAliasing = AntiAliasing.None; + cff.ScalingFilter = ScalingFilter.Bilinear; + cff.ScalingFilterLevel = 80; + }); + Migrate(45, static cff => cff.ShownFileTypes = new ShownFileTypes { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 40."); - - configurationFileFormat.GraphicsBackend = GraphicsBackend.OpenGl; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 41) + NSP = true, + PFS0 = true, + XCI = true, + NCA = true, + NRO = true, + NSO = true + }); + Migrate(46, static cff => cff.UseHypervisor = OperatingSystem.IsMacOS()); + Migrate(47, static cff => cff.WindowStartup = new WindowStartup { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 41."); - - configurationFileFormat.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = configurationFileFormat.Hotkeys.ToggleVSyncMode, - Screenshot = configurationFileFormat.Hotkeys.Screenshot, - ShowUI = configurationFileFormat.Hotkeys.ShowUI, - Pause = configurationFileFormat.Hotkeys.Pause, - ToggleMute = configurationFileFormat.Hotkeys.ToggleMute, - ResScaleUp = configurationFileFormat.Hotkeys.ResScaleUp, - ResScaleDown = configurationFileFormat.Hotkeys.ResScaleDown, - VolumeUp = Key.Unbound, - VolumeDown = Key.Unbound, - }; - } - - if (configurationFileFormat.Version < 42) + WindowPositionX = 0, + WindowPositionY = 0, + WindowSizeHeight = 760, + WindowSizeWidth = 1280, + WindowMaximized = false + }); + Migrate(48, static cff => cff.EnableColorSpacePassthrough = false); + Migrate(49, static _ => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 42."); - - configurationFileFormat.EnableMacroHLE = true; - } - - if (configurationFileFormat.Version < 43) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 43."); - - configurationFileFormat.UseHypervisor = true; - } - - if (configurationFileFormat.Version < 44) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 44."); - - configurationFileFormat.AntiAliasing = AntiAliasing.None; - configurationFileFormat.ScalingFilter = ScalingFilter.Bilinear; - configurationFileFormat.ScalingFilterLevel = 80; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 45) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 45."); - - configurationFileFormat.ShownFileTypes = new ShownFileTypes - { - NSP = true, - PFS0 = true, - XCI = true, - NCA = true, - NRO = true, - NSO = true, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 46) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 46."); - - configurationFileFormat.MultiplayerLanInterfaceId = "0"; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 47) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 47."); - - configurationFileFormat.WindowStartup = new WindowStartup - { - WindowPositionX = 0, - WindowPositionY = 0, - WindowSizeHeight = 760, - WindowSizeWidth = 1280, - WindowMaximized = false, - }; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 48) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 48."); - - configurationFileFormat.EnableColorSpacePassthrough = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 49) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 49."); - if (OperatingSystem.IsMacOS()) { AppDataManager.FixMacOSConfigurationFolders(); } - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 50) + }); + Migrate(50, static cff => cff.EnableHardwareAcceleration = true); + Migrate(51, static cff => cff.RememberWindowState = true); + Migrate(52, static cff => cff.AutoloadDirs = []); + Migrate(53, static cff => cff.EnableLowPowerPtc = false); + Migrate(54, static cff => cff.DramSize = MemoryConfiguration.MemoryConfiguration4GiB); + Migrate(55, static cff => cff.IgnoreApplet = false); + Migrate(56, static cff => cff.ShowTitleBar = !OperatingSystem.IsWindows()); + Migrate(57, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 50."); + cff.VSyncMode = VSyncMode.Switch; + cff.EnableCustomVSyncInterval = false; - configurationFileFormat.EnableHardwareAcceleration = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 51) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 51."); - - configurationFileFormat.RememberWindowState = true; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 52) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 52."); - - configurationFileFormat.AutoloadDirs = []; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 53) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 53."); - - configurationFileFormat.EnableLowPowerPtc = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 54) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 54."); - - configurationFileFormat.DramSize = MemoryConfiguration.MemoryConfiguration4GiB; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 55) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 55."); - - configurationFileFormat.IgnoreApplet = false; - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 56) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 56."); - - configurationFileFormat.ShowTitleBar = !OperatingSystem.IsWindows(); - - configurationFileUpdated = true; - } - - if (configurationFileFormat.Version < 57) - { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 57."); - - configurationFileFormat.VSyncMode = VSyncMode.Switch; - configurationFileFormat.EnableCustomVSyncInterval = false; - - configurationFileFormat.Hotkeys = new KeyboardHotkeys + cff.Hotkeys = new KeyboardHotkeys { ToggleVSyncMode = Key.F1, - Screenshot = configurationFileFormat.Hotkeys.Screenshot, - ShowUI = configurationFileFormat.Hotkeys.ShowUI, - Pause = configurationFileFormat.Hotkeys.Pause, - ToggleMute = configurationFileFormat.Hotkeys.ToggleMute, - ResScaleUp = configurationFileFormat.Hotkeys.ResScaleUp, - ResScaleDown = configurationFileFormat.Hotkeys.ResScaleDown, - VolumeUp = configurationFileFormat.Hotkeys.VolumeUp, - VolumeDown = configurationFileFormat.Hotkeys.VolumeDown, + Screenshot = cff.Hotkeys.Screenshot, + ShowUI = cff.Hotkeys.ShowUI, + Pause = cff.Hotkeys.Pause, + ToggleMute = cff.Hotkeys.ToggleMute, + ResScaleUp = cff.Hotkeys.ResScaleUp, + ResScaleDown = cff.Hotkeys.ResScaleDown, + VolumeUp = cff.Hotkeys.VolumeUp, + VolumeDown = cff.Hotkeys.VolumeDown, CustomVSyncIntervalIncrement = Key.Unbound, CustomVSyncIntervalDecrement = Key.Unbound, }; - configurationFileFormat.CustomVSyncInterval = 120; - - configurationFileUpdated = true; - } - + cff.CustomVSyncInterval = 120; + }); // 58 migration accidentally got skipped but it worked with no issues somehow lol - - if (configurationFileFormat.Version < 59) + Migrate(59, static cff => { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 59."); + cff.ShowDirtyHacks = false; + cff.DirtyHacks = []; - configurationFileFormat.ShowDirtyHacks = false; - configurationFileFormat.DirtyHacks = []; - - configurationFileUpdated = true; - } + // This was accidentally enabled by default when it was PRed. That is not what we want, + // so as a compromise users who want to use it will simply need to re-enable it once after updating. + cff.IgnoreApplet = false; + }); Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; Graphics.ResScale.Value = configurationFileFormat.ResScale; @@ -766,6 +397,19 @@ namespace Ryujinx.Ava.Utilities.Configuration Ryujinx.Common.Logging.Logger.Notice.Print(LogClass.Application, $"Configuration file updated to version {ConfigurationFileFormat.CurrentVersion}"); } + + return; + + void Migrate(int newVer, Action migrator) + { + if (configurationFileFormat.Version >= newVer) return; + + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version {newVer}."); + + migrator(configurationFileFormat); + + configurationFileUpdated = true; + } } } } -- 2.47.1 From bd29f658b19a34227ac684cd23fda7777289fea9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 23:28:32 -0600 Subject: [PATCH 251/722] misc: Forgot about OfType [ci skip] --- .../Utilities/Configuration/ConfigurationState.Migration.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 8ff06bf26..f520cdac2 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -166,9 +166,7 @@ namespace Ryujinx.Ava.Utilities.Configuration Migrate(34, static cff => cff.EnableInternetAccess = false); Migrate(35, static cff => { - foreach (StandardControllerInputConfig config in cff.InputConfig - .Where(it => it is StandardControllerInputConfig) - .Cast()) + foreach (StandardControllerInputConfig config in cff.InputConfig.OfType()) { config.RangeLeft = 1.0f; config.RangeRight = 1.0f; -- 2.47.1 From 4135d74e4d4f3bb46dba46fa967e98e9e5c7f589 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 23:50:55 -0600 Subject: [PATCH 252/722] UI: Only allow right click to create a context menu if a game is selected. --- .../UI/Controls/ApplicationGridView.axaml | 7 +-- .../UI/Controls/ApplicationGridView.axaml.cs | 6 -- .../UI/Controls/ApplicationListView.axaml | 8 +-- .../UI/Controls/ApplicationListView.axaml.cs | 6 -- .../UI/ViewModels/MainWindowViewModel.cs | 62 ++++++++++++++++++- 5 files changed, 65 insertions(+), 24 deletions(-) diff --git a/src/Ryujinx/UI/Controls/ApplicationGridView.axaml b/src/Ryujinx/UI/Controls/ApplicationGridView.axaml index 3bcb468ae..629bdebbf 100644 --- a/src/Ryujinx/UI/Controls/ApplicationGridView.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationGridView.axaml @@ -15,7 +15,6 @@ x:DataType="viewModels:MainWindowViewModel"> - @@ -26,10 +25,10 @@ Padding="8" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" - ContextFlyout="{StaticResource ApplicationContextMenu}" + SelectedItem="{Binding GridSelectedApplication}" + ContextFlyout="{Binding GridAppContextMenu}" DoubleTapped="GameList_DoubleTapped" - ItemsSource="{Binding AppsObservableList}" - SelectionChanged="GameList_SelectionChanged"> + ItemsSource="{Binding AppsObservableList}"> - @@ -28,10 +26,10 @@ Padding="8" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" - ContextFlyout="{StaticResource ApplicationContextMenu}" + SelectedItem="{Binding ListSelectedApplication}" + ContextFlyout="{Binding ListAppContextMenu}" DoubleTapped="GameList_DoubleTapped" - ItemsSource="{Binding AppsObservableList}" - SelectionChanged="GameList_SelectionChanged"> + ItemsSource="{Binding AppsObservableList}"> _listSelectedApplication; + set + { + _listSelectedApplication = value; + + if (_listSelectedApplication != null && _listAppContextMenu == null) + ListAppContextMenu = new ApplicationContextMenu(); + else if (_listSelectedApplication == null && _listAppContextMenu != null) + ListAppContextMenu = null; + + OnPropertyChanged(); + } + } + + public ApplicationData GridSelectedApplication + { + get => _gridSelectedApplication; + set + { + _gridSelectedApplication = value; + + if (_gridSelectedApplication != null && _gridAppContextMenu == null) + GridAppContextMenu = new ApplicationContextMenu(); + else if (_gridSelectedApplication == null && _gridAppContextMenu != null) + GridAppContextMenu = null; + + OnPropertyChanged(); + } + } // Key is Title ID public SafeDictionary LdnData = []; @@ -218,7 +252,7 @@ namespace Ryujinx.Ava.UI.ViewModels public bool CanUpdate { - get => _canUpdate && EnableNonGameRunningControls && Updater.CanUpdate(false); + get => _canUpdate && EnableNonGameRunningControls && Updater.CanUpdate(); set { _canUpdate = value; @@ -247,6 +281,28 @@ namespace Ryujinx.Ava.UI.ViewModels } } + public ApplicationContextMenu ListAppContextMenu + { + get => _listAppContextMenu; + set + { + _listAppContextMenu = value; + + OnPropertyChanged(); + } + } + + public ApplicationContextMenu GridAppContextMenu + { + get => _gridAppContextMenu; + set + { + _gridAppContextMenu = value; + + OnPropertyChanged(); + } + } + public bool IsPaused { get => _isPaused; -- 2.47.1 From 0cd09ea0c545085a5d1e649a6ed04fc6dc11f2f5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 00:04:23 -0600 Subject: [PATCH 253/722] misc: Simplify ControlHolder checks in MainWindowViewModel --- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 6 +++--- src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 74daacea5..23bd2d9e7 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -474,13 +474,13 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public bool OpenUserSaveDirectoryEnabled => !SelectedApplication.ControlHolder.ByteSpan.IsZeros() && SelectedApplication.ControlHolder.Value.UserAccountSaveDataSize > 0; + public bool OpenUserSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.UserAccountSaveDataSize > 0; - public bool OpenDeviceSaveDirectoryEnabled => !SelectedApplication.ControlHolder.ByteSpan.IsZeros() && SelectedApplication.ControlHolder.Value.DeviceSaveDataSize > 0; + public bool OpenDeviceSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.DeviceSaveDataSize > 0; public bool TrimXCIEnabled => XCIFileTrimmer.CanTrim(SelectedApplication.Path, new XCITrimmerLog.MainWindow(this)); - public bool OpenBcatSaveDirectoryEnabled => !SelectedApplication.ControlHolder.ByteSpan.IsZeros() && SelectedApplication.ControlHolder.Value.BcatDeliveryCacheStorageSize > 0; + public bool OpenBcatSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.BcatDeliveryCacheStorageSize > 0; public string LoadHeading { diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs index c87486232..a6336c257 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary public string Path { get; set; } public BlitStruct ControlHolder { get; set; } - public bool HasControlHolder => ControlHolder.ByteSpan.Length > 0; + public bool HasControlHolder => ControlHolder.ByteSpan.Length > 0 && !ControlHolder.ByteSpan.IsZeros(); public string TimePlayedString => ValueFormatUtils.FormatTimeSpan(TimePlayed); -- 2.47.1 From e43d899e1ddb9bc919fc107329c10db36d1712c2 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 00:19:23 -0600 Subject: [PATCH 254/722] misc: Use a few static helpers for Avalonia objects --- .../UI/ViewModels/DownloadableContentManagerViewModel.cs | 5 +---- src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs | 4 +--- src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs | 5 +---- src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs | 5 +---- 4 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index 4e9660a65..acc26decb 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -93,10 +93,7 @@ namespace Ryujinx.Ava.UI.ViewModels _applicationData = applicationData; - if (Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) - { - _storageProvider = desktop.MainWindow.StorageProvider; - } + _storageProvider = RyujinxApp.MainWindow.StorageProvider; LoadDownloadableContents(); } diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 74b8681d5..16f8e46fa 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -245,9 +245,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input { if (Program.PreviewerDetached) { - _mainWindow = - (MainWindow)((IClassicDesktopStyleApplicationLifetime)Application.Current - .ApplicationLifetime).MainWindow; + _mainWindow = RyujinxApp.MainWindow; AvaloniaKeyboardDriver = new AvaloniaKeyboardDriver(owner); diff --git a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs index df2ef266e..9c26376ce 100644 --- a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs @@ -86,10 +86,7 @@ namespace Ryujinx.Ava.UI.ViewModels _modJsonPath = Path.Combine(AppDataManager.GamesDirPath, applicationId.ToString("x16"), "mods.json"); - if (Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) - { - _storageProvider = desktop.MainWindow.StorageProvider; - } + _storageProvider = RyujinxApp.MainWindow.StorageProvider; LoadMods(applicationId); } diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index a179218af..0748efeb4 100644 --- a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -76,10 +76,7 @@ namespace Ryujinx.Ava.UI.ViewModels ApplicationData = applicationData; - if (Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) - { - StorageProvider = desktop.MainWindow.StorageProvider; - } + StorageProvider = RyujinxApp.MainWindow.StorageProvider; LoadUpdates(); } -- 2.47.1 From 617c03119fad86e55e52cbf830f1cf51d05abeda Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 00:52:39 -0600 Subject: [PATCH 255/722] misc: clean vsync toggle log --- src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs index b234f7859..78747013c 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs @@ -41,7 +41,7 @@ namespace Ryujinx.Ava.UI.Views.Main private void VSyncMode_PointerReleased(object sender, PointerReleasedEventArgs e) { Window.ViewModel.ToggleVSyncMode(); - Logger.Info?.Print(LogClass.Application, $"VSync Mode toggled to: {Window.ViewModel.AppHost.Device.VSyncMode}"); + Logger.Info?.PrintMsg(LogClass.Application, $"VSync Mode toggled to: {Window.ViewModel.AppHost.Device.VSyncMode}"); } private void DockedStatus_PointerReleased(object sender, PointerReleasedEventArgs e) -- 2.47.1 From 19d2883a35799c76dcf7f1dec8ebeb6428e5057f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 02:51:14 -0600 Subject: [PATCH 256/722] UI: Store config migrations in a dictionary and loop through it to do migrations. --- .../ConfigurationState.Migration.cs | 739 +++++++++--------- 1 file changed, 373 insertions(+), 366 deletions(-) diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index f520cdac2..ec66bcaac 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -9,379 +9,146 @@ using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; using Ryujinx.HLE; using System; +using System.Collections.Generic; using System.Linq; +using RyuLogger = Ryujinx.Common.Logging.Logger; namespace Ryujinx.Ava.Utilities.Configuration { public partial class ConfigurationState { - public void Load(ConfigurationFileFormat configurationFileFormat, string configurationFilePath) + public void Load(ConfigurationFileFormat cff, string configurationFilePath) { - // referenced by Migrate bool configurationFileUpdated = false; - if (configurationFileFormat.Version is < 0 or > ConfigurationFileFormat.CurrentVersion) + if (cff.Version is < 0 or > ConfigurationFileFormat.CurrentVersion) { - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Unsupported configuration version {configurationFileFormat.Version}, loading default."); + RyuLogger.Warning?.Print(LogClass.Application, $"Unsupported configuration version {cff.Version}, loading default."); LoadDefault(); } - - Migrate(2, static cff => cff.SystemRegion = Region.USA); - Migrate(3, static cff => cff.SystemTimeZone = "UTC"); - Migrate(4, static cff => cff.MaxAnisotropy = -1); - Migrate(5, static cff => cff.SystemTimeOffset = 0); - Migrate(8, static cff => cff.EnablePtc = true); - Migrate(9, static cff => - { - cff.ColumnSort = new ColumnSort - { - SortColumnId = 0, - SortAscending = false - }; - cff.Hotkeys = new KeyboardHotkeys { ToggleVSyncMode = Key.F1 }; - }); - Migrate(10, static cff => cff.AudioBackend = AudioBackend.OpenAl); - Migrate(11, static cff => + foreach ((int newVersion, Action migratorFunction) + in _migrations.OrderBy(x => x.Key)) { - cff.ResScale = 1; - cff.ResScaleCustom = 1.0f; - }); - Migrate(12, static cff => cff.LoggingGraphicsDebugLevel = GraphicsDebugLevel.None); - // 13 -> LDN1 - Migrate(14, static cff => cff.CheckUpdatesOnStart = true); - Migrate(16, static cff => cff.EnableShaderCache = true); - Migrate(17, static cff => cff.StartFullscreen = false); - Migrate(18, static cff => cff.AspectRatio = AspectRatio.Fixed16x9); - // 19 -> LDN2 - Migrate(20, static cff => cff.ShowConfirmExit = true); - Migrate(21, static cff => - { - // Initialize network config. + if (cff.Version >= newVersion) + continue; + + RyuLogger.Warning?.Print(LogClass.Application, + $"Outdated configuration version {cff.Version}, migrating to version {newVersion}."); - cff.MultiplayerMode = MultiplayerMode.Disabled; - cff.MultiplayerLanInterfaceId = "0"; - }); - Migrate(22, static cff => cff.HideCursor = HideCursorMode.Never); - Migrate(24, static cff => - { - cff.InputConfig = - [ - new StandardKeyboardInputConfig - { - Version = InputConfig.CurrentVersion, - Backend = InputBackendType.WindowKeyboard, - Id = "0", - PlayerIndex = PlayerIndex.Player1, - ControllerType = ControllerType.ProController, - LeftJoycon = new LeftJoyconCommonConfig - { - DpadUp = Key.Up, - DpadDown = Key.Down, - DpadLeft = Key.Left, - DpadRight = Key.Right, - ButtonMinus = Key.Minus, - ButtonL = Key.E, - ButtonZl = Key.Q, - ButtonSl = Key.Unbound, - ButtonSr = Key.Unbound, - }, - LeftJoyconStick = new JoyconConfigKeyboardStick - { - StickUp = Key.W, - StickDown = Key.S, - StickLeft = Key.A, - StickRight = Key.D, - StickButton = Key.F, - }, - RightJoycon = new RightJoyconCommonConfig - { - ButtonA = Key.Z, - ButtonB = Key.X, - ButtonX = Key.C, - ButtonY = Key.V, - ButtonPlus = Key.Plus, - ButtonR = Key.U, - ButtonZr = Key.O, - ButtonSl = Key.Unbound, - ButtonSr = Key.Unbound, - }, - RightJoyconStick = new JoyconConfigKeyboardStick - { - StickUp = Key.I, - StickDown = Key.K, - StickLeft = Key.J, - StickRight = Key.L, - StickButton = Key.H, - }, - } + migratorFunction(cff); - ]; - }); - Migrate(26, static cff => cff.MemoryManagerMode = MemoryManagerMode.HostMappedUnsafe); - Migrate(27, static cff => cff.EnableMouse = false); - Migrate(29, static cff => cff.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = Key.F1, - Screenshot = Key.F8, - ShowUI = Key.F4 - }); - Migrate(30, static cff => - { - foreach (InputConfig config in cff.InputConfig) - { - if (config is StandardControllerInputConfig controllerConfig) - { - controllerConfig.Rumble = new RumbleConfigController - { - EnableRumble = false, - StrongRumble = 1f, - WeakRumble = 1f, - }; - } - } - }); - Migrate(31, static cff => cff.BackendThreading = BackendThreading.Auto); - Migrate(32, static cff => cff.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, - Screenshot = cff.Hotkeys.Screenshot, - ShowUI = cff.Hotkeys.ShowUI, - Pause = Key.F5, - }); - Migrate(33, static cff => - { - cff.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, - Screenshot = cff.Hotkeys.Screenshot, - ShowUI = cff.Hotkeys.ShowUI, - Pause = cff.Hotkeys.Pause, - ToggleMute = Key.F2, - }; - - cff.AudioVolume = 1; - }); - Migrate(34, static cff => cff.EnableInternetAccess = false); - Migrate(35, static cff => - { - foreach (StandardControllerInputConfig config in cff.InputConfig.OfType()) - { - config.RangeLeft = 1.0f; - config.RangeRight = 1.0f; - } - }); + configurationFileUpdated = true; + } - Migrate(36, static cff => cff.LoggingEnableTrace = false); - Migrate(37, static cff => cff.ShowConsole = true); - Migrate(38, static cff => - { - cff.BaseStyle = "Dark"; - cff.GameListViewMode = 0; - cff.ShowNames = true; - cff.GridSize = 2; - cff.LanguageCode = "en_US"; - }); - Migrate(39, static cff => cff.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, - Screenshot = cff.Hotkeys.Screenshot, - ShowUI = cff.Hotkeys.ShowUI, - Pause = cff.Hotkeys.Pause, - ToggleMute = cff.Hotkeys.ToggleMute, - ResScaleUp = Key.Unbound, - ResScaleDown = Key.Unbound - }); - Migrate(40, static cff => cff.GraphicsBackend = GraphicsBackend.OpenGl); - Migrate(41, static cff => cff.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, - Screenshot = cff.Hotkeys.Screenshot, - ShowUI = cff.Hotkeys.ShowUI, - Pause = cff.Hotkeys.Pause, - ToggleMute = cff.Hotkeys.ToggleMute, - ResScaleUp = cff.Hotkeys.ResScaleUp, - ResScaleDown = cff.Hotkeys.ResScaleDown, - VolumeUp = Key.Unbound, - VolumeDown = Key.Unbound - }); - Migrate(42, static cff => cff.EnableMacroHLE = true); - Migrate(43, static cff => cff.UseHypervisor = true); - Migrate(44, static cff => - { - cff.AntiAliasing = AntiAliasing.None; - cff.ScalingFilter = ScalingFilter.Bilinear; - cff.ScalingFilterLevel = 80; - }); - Migrate(45, static cff => cff.ShownFileTypes = new ShownFileTypes - { - NSP = true, - PFS0 = true, - XCI = true, - NCA = true, - NRO = true, - NSO = true - }); - Migrate(46, static cff => cff.UseHypervisor = OperatingSystem.IsMacOS()); - Migrate(47, static cff => cff.WindowStartup = new WindowStartup - { - WindowPositionX = 0, - WindowPositionY = 0, - WindowSizeHeight = 760, - WindowSizeWidth = 1280, - WindowMaximized = false - }); - Migrate(48, static cff => cff.EnableColorSpacePassthrough = false); - Migrate(49, static _ => - { - if (OperatingSystem.IsMacOS()) - { - AppDataManager.FixMacOSConfigurationFolders(); - } - }); - Migrate(50, static cff => cff.EnableHardwareAcceleration = true); - Migrate(51, static cff => cff.RememberWindowState = true); - Migrate(52, static cff => cff.AutoloadDirs = []); - Migrate(53, static cff => cff.EnableLowPowerPtc = false); - Migrate(54, static cff => cff.DramSize = MemoryConfiguration.MemoryConfiguration4GiB); - Migrate(55, static cff => cff.IgnoreApplet = false); - Migrate(56, static cff => cff.ShowTitleBar = !OperatingSystem.IsWindows()); - Migrate(57, static cff => - { - cff.VSyncMode = VSyncMode.Switch; - cff.EnableCustomVSyncInterval = false; - - cff.Hotkeys = new KeyboardHotkeys - { - ToggleVSyncMode = Key.F1, - Screenshot = cff.Hotkeys.Screenshot, - ShowUI = cff.Hotkeys.ShowUI, - Pause = cff.Hotkeys.Pause, - ToggleMute = cff.Hotkeys.ToggleMute, - ResScaleUp = cff.Hotkeys.ResScaleUp, - ResScaleDown = cff.Hotkeys.ResScaleDown, - VolumeUp = cff.Hotkeys.VolumeUp, - VolumeDown = cff.Hotkeys.VolumeDown, - CustomVSyncIntervalIncrement = Key.Unbound, - CustomVSyncIntervalDecrement = Key.Unbound, - }; - - cff.CustomVSyncInterval = 120; - }); - // 58 migration accidentally got skipped but it worked with no issues somehow lol - Migrate(59, static cff => - { - cff.ShowDirtyHacks = false; - cff.DirtyHacks = []; - - // This was accidentally enabled by default when it was PRed. That is not what we want, - // so as a compromise users who want to use it will simply need to re-enable it once after updating. - cff.IgnoreApplet = false; - }); - - Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; - Graphics.ResScale.Value = configurationFileFormat.ResScale; - Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom; - Graphics.MaxAnisotropy.Value = configurationFileFormat.MaxAnisotropy; - Graphics.AspectRatio.Value = configurationFileFormat.AspectRatio; - Graphics.ShadersDumpPath.Value = configurationFileFormat.GraphicsShadersDumpPath; - Graphics.BackendThreading.Value = configurationFileFormat.BackendThreading; - Graphics.GraphicsBackend.Value = configurationFileFormat.GraphicsBackend; - Graphics.PreferredGpu.Value = configurationFileFormat.PreferredGpu; - Graphics.AntiAliasing.Value = configurationFileFormat.AntiAliasing; - Graphics.ScalingFilter.Value = configurationFileFormat.ScalingFilter; - Graphics.ScalingFilterLevel.Value = configurationFileFormat.ScalingFilterLevel; - Logger.EnableDebug.Value = configurationFileFormat.LoggingEnableDebug; - Logger.EnableStub.Value = configurationFileFormat.LoggingEnableStub; - Logger.EnableInfo.Value = configurationFileFormat.LoggingEnableInfo; - Logger.EnableWarn.Value = configurationFileFormat.LoggingEnableWarn; - Logger.EnableError.Value = configurationFileFormat.LoggingEnableError; - Logger.EnableTrace.Value = configurationFileFormat.LoggingEnableTrace; - Logger.EnableGuest.Value = configurationFileFormat.LoggingEnableGuest; - Logger.EnableFsAccessLog.Value = configurationFileFormat.LoggingEnableFsAccessLog; - Logger.FilteredClasses.Value = configurationFileFormat.LoggingFilteredClasses; - Logger.GraphicsDebugLevel.Value = configurationFileFormat.LoggingGraphicsDebugLevel; - System.Language.Value = configurationFileFormat.SystemLanguage; - System.Region.Value = configurationFileFormat.SystemRegion; - System.TimeZone.Value = configurationFileFormat.SystemTimeZone; - System.SystemTimeOffset.Value = configurationFileFormat.SystemTimeOffset; - System.EnableDockedMode.Value = configurationFileFormat.DockedMode; - EnableDiscordIntegration.Value = configurationFileFormat.EnableDiscordIntegration; - CheckUpdatesOnStart.Value = configurationFileFormat.CheckUpdatesOnStart; - ShowConfirmExit.Value = configurationFileFormat.ShowConfirmExit; - IgnoreApplet.Value = configurationFileFormat.IgnoreApplet; - RememberWindowState.Value = configurationFileFormat.RememberWindowState; - ShowTitleBar.Value = configurationFileFormat.ShowTitleBar; - EnableHardwareAcceleration.Value = configurationFileFormat.EnableHardwareAcceleration; - HideCursor.Value = configurationFileFormat.HideCursor; - Graphics.VSyncMode.Value = configurationFileFormat.VSyncMode; - Graphics.EnableCustomVSyncInterval.Value = configurationFileFormat.EnableCustomVSyncInterval; - Graphics.CustomVSyncInterval.Value = configurationFileFormat.CustomVSyncInterval; - Graphics.EnableShaderCache.Value = configurationFileFormat.EnableShaderCache; - Graphics.EnableTextureRecompression.Value = configurationFileFormat.EnableTextureRecompression; - Graphics.EnableMacroHLE.Value = configurationFileFormat.EnableMacroHLE; - Graphics.EnableColorSpacePassthrough.Value = configurationFileFormat.EnableColorSpacePassthrough; - System.EnablePtc.Value = configurationFileFormat.EnablePtc; - System.EnableLowPowerPtc.Value = configurationFileFormat.EnableLowPowerPtc; - System.EnableInternetAccess.Value = configurationFileFormat.EnableInternetAccess; - System.EnableFsIntegrityChecks.Value = configurationFileFormat.EnableFsIntegrityChecks; - System.FsGlobalAccessLogMode.Value = configurationFileFormat.FsGlobalAccessLogMode; - System.AudioBackend.Value = configurationFileFormat.AudioBackend; - System.AudioVolume.Value = configurationFileFormat.AudioVolume; - System.MemoryManagerMode.Value = configurationFileFormat.MemoryManagerMode; - System.DramSize.Value = configurationFileFormat.DramSize; - System.IgnoreMissingServices.Value = configurationFileFormat.IgnoreMissingServices; - System.UseHypervisor.Value = configurationFileFormat.UseHypervisor; - UI.GuiColumns.FavColumn.Value = configurationFileFormat.GuiColumns.FavColumn; - UI.GuiColumns.IconColumn.Value = configurationFileFormat.GuiColumns.IconColumn; - UI.GuiColumns.AppColumn.Value = configurationFileFormat.GuiColumns.AppColumn; - UI.GuiColumns.DevColumn.Value = configurationFileFormat.GuiColumns.DevColumn; - UI.GuiColumns.VersionColumn.Value = configurationFileFormat.GuiColumns.VersionColumn; - UI.GuiColumns.TimePlayedColumn.Value = configurationFileFormat.GuiColumns.TimePlayedColumn; - UI.GuiColumns.LastPlayedColumn.Value = configurationFileFormat.GuiColumns.LastPlayedColumn; - UI.GuiColumns.FileExtColumn.Value = configurationFileFormat.GuiColumns.FileExtColumn; - UI.GuiColumns.FileSizeColumn.Value = configurationFileFormat.GuiColumns.FileSizeColumn; - UI.GuiColumns.PathColumn.Value = configurationFileFormat.GuiColumns.PathColumn; - UI.ColumnSort.SortColumnId.Value = configurationFileFormat.ColumnSort.SortColumnId; - UI.ColumnSort.SortAscending.Value = configurationFileFormat.ColumnSort.SortAscending; - UI.GameDirs.Value = configurationFileFormat.GameDirs; - UI.AutoloadDirs.Value = configurationFileFormat.AutoloadDirs ?? []; - UI.ShownFileTypes.NSP.Value = configurationFileFormat.ShownFileTypes.NSP; - UI.ShownFileTypes.PFS0.Value = configurationFileFormat.ShownFileTypes.PFS0; - UI.ShownFileTypes.XCI.Value = configurationFileFormat.ShownFileTypes.XCI; - UI.ShownFileTypes.NCA.Value = configurationFileFormat.ShownFileTypes.NCA; - UI.ShownFileTypes.NRO.Value = configurationFileFormat.ShownFileTypes.NRO; - UI.ShownFileTypes.NSO.Value = configurationFileFormat.ShownFileTypes.NSO; - UI.LanguageCode.Value = configurationFileFormat.LanguageCode; - UI.BaseStyle.Value = configurationFileFormat.BaseStyle; - UI.GameListViewMode.Value = configurationFileFormat.GameListViewMode; - UI.ShowNames.Value = configurationFileFormat.ShowNames; - UI.IsAscendingOrder.Value = configurationFileFormat.IsAscendingOrder; - UI.GridSize.Value = configurationFileFormat.GridSize; - UI.ApplicationSort.Value = configurationFileFormat.ApplicationSort; - UI.StartFullscreen.Value = configurationFileFormat.StartFullscreen; - UI.ShowConsole.Value = configurationFileFormat.ShowConsole; - UI.WindowStartup.WindowSizeWidth.Value = configurationFileFormat.WindowStartup.WindowSizeWidth; - UI.WindowStartup.WindowSizeHeight.Value = configurationFileFormat.WindowStartup.WindowSizeHeight; - UI.WindowStartup.WindowPositionX.Value = configurationFileFormat.WindowStartup.WindowPositionX; - UI.WindowStartup.WindowPositionY.Value = configurationFileFormat.WindowStartup.WindowPositionY; - UI.WindowStartup.WindowMaximized.Value = configurationFileFormat.WindowStartup.WindowMaximized; - Hid.EnableKeyboard.Value = configurationFileFormat.EnableKeyboard; - Hid.EnableMouse.Value = configurationFileFormat.EnableMouse; - Hid.Hotkeys.Value = configurationFileFormat.Hotkeys; - Hid.InputConfig.Value = configurationFileFormat.InputConfig ?? []; - - Multiplayer.LanInterfaceId.Value = configurationFileFormat.MultiplayerLanInterfaceId; - Multiplayer.Mode.Value = configurationFileFormat.MultiplayerMode; - Multiplayer.DisableP2p.Value = configurationFileFormat.MultiplayerDisableP2p; - Multiplayer.LdnPassphrase.Value = configurationFileFormat.MultiplayerLdnPassphrase; - Multiplayer.LdnServer.Value = configurationFileFormat.LdnServer; + EnableDiscordIntegration.Value = cff.EnableDiscordIntegration; + CheckUpdatesOnStart.Value = cff.CheckUpdatesOnStart; + ShowConfirmExit.Value = cff.ShowConfirmExit; + IgnoreApplet.Value = cff.IgnoreApplet; + RememberWindowState.Value = cff.RememberWindowState; + ShowTitleBar.Value = cff.ShowTitleBar; + EnableHardwareAcceleration.Value = cff.EnableHardwareAcceleration; + HideCursor.Value = cff.HideCursor; - Hacks.ShowDirtyHacks.Value = configurationFileFormat.ShowDirtyHacks; + Logger.EnableFileLog.Value = cff.EnableFileLog; + Logger.EnableDebug.Value = cff.LoggingEnableDebug; + Logger.EnableStub.Value = cff.LoggingEnableStub; + Logger.EnableInfo.Value = cff.LoggingEnableInfo; + Logger.EnableWarn.Value = cff.LoggingEnableWarn; + Logger.EnableError.Value = cff.LoggingEnableError; + Logger.EnableTrace.Value = cff.LoggingEnableTrace; + Logger.EnableGuest.Value = cff.LoggingEnableGuest; + Logger.EnableFsAccessLog.Value = cff.LoggingEnableFsAccessLog; + Logger.FilteredClasses.Value = cff.LoggingFilteredClasses; + Logger.GraphicsDebugLevel.Value = cff.LoggingGraphicsDebugLevel; + + Graphics.ResScale.Value = cff.ResScale; + Graphics.ResScaleCustom.Value = cff.ResScaleCustom; + Graphics.MaxAnisotropy.Value = cff.MaxAnisotropy; + Graphics.AspectRatio.Value = cff.AspectRatio; + Graphics.ShadersDumpPath.Value = cff.GraphicsShadersDumpPath; + Graphics.BackendThreading.Value = cff.BackendThreading; + Graphics.GraphicsBackend.Value = cff.GraphicsBackend; + Graphics.PreferredGpu.Value = cff.PreferredGpu; + Graphics.AntiAliasing.Value = cff.AntiAliasing; + Graphics.ScalingFilter.Value = cff.ScalingFilter; + Graphics.ScalingFilterLevel.Value = cff.ScalingFilterLevel; + Graphics.VSyncMode.Value = cff.VSyncMode; + Graphics.EnableCustomVSyncInterval.Value = cff.EnableCustomVSyncInterval; + Graphics.CustomVSyncInterval.Value = cff.CustomVSyncInterval; + Graphics.EnableShaderCache.Value = cff.EnableShaderCache; + Graphics.EnableTextureRecompression.Value = cff.EnableTextureRecompression; + Graphics.EnableMacroHLE.Value = cff.EnableMacroHLE; + Graphics.EnableColorSpacePassthrough.Value = cff.EnableColorSpacePassthrough; + + System.Language.Value = cff.SystemLanguage; + System.Region.Value = cff.SystemRegion; + System.TimeZone.Value = cff.SystemTimeZone; + System.SystemTimeOffset.Value = cff.SystemTimeOffset; + System.EnableDockedMode.Value = cff.DockedMode; + System.EnablePtc.Value = cff.EnablePtc; + System.EnableLowPowerPtc.Value = cff.EnableLowPowerPtc; + System.EnableInternetAccess.Value = cff.EnableInternetAccess; + System.EnableFsIntegrityChecks.Value = cff.EnableFsIntegrityChecks; + System.FsGlobalAccessLogMode.Value = cff.FsGlobalAccessLogMode; + System.AudioBackend.Value = cff.AudioBackend; + System.AudioVolume.Value = cff.AudioVolume; + System.MemoryManagerMode.Value = cff.MemoryManagerMode; + System.DramSize.Value = cff.DramSize; + System.IgnoreMissingServices.Value = cff.IgnoreMissingServices; + System.UseHypervisor.Value = cff.UseHypervisor; + + UI.GuiColumns.FavColumn.Value = cff.GuiColumns.FavColumn; + UI.GuiColumns.IconColumn.Value = cff.GuiColumns.IconColumn; + UI.GuiColumns.AppColumn.Value = cff.GuiColumns.AppColumn; + UI.GuiColumns.DevColumn.Value = cff.GuiColumns.DevColumn; + UI.GuiColumns.VersionColumn.Value = cff.GuiColumns.VersionColumn; + UI.GuiColumns.TimePlayedColumn.Value = cff.GuiColumns.TimePlayedColumn; + UI.GuiColumns.LastPlayedColumn.Value = cff.GuiColumns.LastPlayedColumn; + UI.GuiColumns.FileExtColumn.Value = cff.GuiColumns.FileExtColumn; + UI.GuiColumns.FileSizeColumn.Value = cff.GuiColumns.FileSizeColumn; + UI.GuiColumns.PathColumn.Value = cff.GuiColumns.PathColumn; + UI.ColumnSort.SortColumnId.Value = cff.ColumnSort.SortColumnId; + UI.ColumnSort.SortAscending.Value = cff.ColumnSort.SortAscending; + UI.GameDirs.Value = cff.GameDirs; + UI.AutoloadDirs.Value = cff.AutoloadDirs ?? []; + UI.ShownFileTypes.NSP.Value = cff.ShownFileTypes.NSP; + UI.ShownFileTypes.PFS0.Value = cff.ShownFileTypes.PFS0; + UI.ShownFileTypes.XCI.Value = cff.ShownFileTypes.XCI; + UI.ShownFileTypes.NCA.Value = cff.ShownFileTypes.NCA; + UI.ShownFileTypes.NRO.Value = cff.ShownFileTypes.NRO; + UI.ShownFileTypes.NSO.Value = cff.ShownFileTypes.NSO; + UI.LanguageCode.Value = cff.LanguageCode; + UI.BaseStyle.Value = cff.BaseStyle; + UI.GameListViewMode.Value = cff.GameListViewMode; + UI.ShowNames.Value = cff.ShowNames; + UI.IsAscendingOrder.Value = cff.IsAscendingOrder; + UI.GridSize.Value = cff.GridSize; + UI.ApplicationSort.Value = cff.ApplicationSort; + UI.StartFullscreen.Value = cff.StartFullscreen; + UI.ShowConsole.Value = cff.ShowConsole; + UI.WindowStartup.WindowSizeWidth.Value = cff.WindowStartup.WindowSizeWidth; + UI.WindowStartup.WindowSizeHeight.Value = cff.WindowStartup.WindowSizeHeight; + UI.WindowStartup.WindowPositionX.Value = cff.WindowStartup.WindowPositionX; + UI.WindowStartup.WindowPositionY.Value = cff.WindowStartup.WindowPositionY; + UI.WindowStartup.WindowMaximized.Value = cff.WindowStartup.WindowMaximized; + + Hid.EnableKeyboard.Value = cff.EnableKeyboard; + Hid.EnableMouse.Value = cff.EnableMouse; + Hid.Hotkeys.Value = cff.Hotkeys; + Hid.InputConfig.Value = cff.InputConfig ?? []; + Multiplayer.LanInterfaceId.Value = cff.MultiplayerLanInterfaceId; + Multiplayer.Mode.Value = cff.MultiplayerMode; + Multiplayer.DisableP2p.Value = cff.MultiplayerDisableP2p; + Multiplayer.LdnPassphrase.Value = cff.MultiplayerLdnPassphrase; + Multiplayer.LdnServer.Value = cff.LdnServer; + { - DirtyHacks hacks = new (configurationFileFormat.DirtyHacks ?? []); + Hacks.ShowDirtyHacks.Value = cff.ShowDirtyHacks; + + DirtyHacks hacks = new (cff.DirtyHacks ?? []); Hacks.Xc2MenuSoftlockFix.Value = hacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix); @@ -393,21 +160,261 @@ namespace Ryujinx.Ava.Utilities.Configuration { ToFileFormat().SaveConfig(configurationFilePath); - Ryujinx.Common.Logging.Logger.Notice.Print(LogClass.Application, $"Configuration file updated to version {ConfigurationFileFormat.CurrentVersion}"); - } - - return; - - void Migrate(int newVer, Action migrator) - { - if (configurationFileFormat.Version >= newVer) return; - - Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version {newVer}."); - - migrator(configurationFileFormat); - - configurationFileUpdated = true; + RyuLogger.Notice.Print(LogClass.Application, $"Configuration file updated to version {ConfigurationFileFormat.CurrentVersion}"); } } + + private static readonly Dictionary> _migrations = + Collections.NewDictionary>( + (2, static cff => cff.SystemRegion = Region.USA), + (3, static cff => cff.SystemTimeZone = "UTC"), + (4, static cff => cff.MaxAnisotropy = -1), + (5, static cff => cff.SystemTimeOffset = 0), + (8, static cff => cff.EnablePtc = true), + (9, static cff => + { + cff.ColumnSort = new ColumnSort { SortColumnId = 0, SortAscending = false }; + cff.Hotkeys = new KeyboardHotkeys { ToggleVSyncMode = Key.F1 }; + }), + (10, static cff => cff.AudioBackend = AudioBackend.OpenAl), + (11, static cff => + { + cff.ResScale = 1; + cff.ResScaleCustom = 1.0f; + }), + (12, static cff => cff.LoggingGraphicsDebugLevel = GraphicsDebugLevel.None), + // 13 -> LDN1 + (14, static cff => cff.CheckUpdatesOnStart = true), + (16, static cff => cff.EnableShaderCache = true), + (17, static cff => cff.StartFullscreen = false), + (18, static cff => cff.AspectRatio = AspectRatio.Fixed16x9), + // 19 -> LDN2 + (20, static cff => cff.ShowConfirmExit = true), + (21, static cff => + { + // Initialize network config. + + cff.MultiplayerMode = MultiplayerMode.Disabled; + cff.MultiplayerLanInterfaceId = "0"; + }), + (22, static cff => cff.HideCursor = HideCursorMode.Never), + (24, static cff => + { + cff.InputConfig = + [ + new StandardKeyboardInputConfig + { + Version = InputConfig.CurrentVersion, + Backend = InputBackendType.WindowKeyboard, + Id = "0", + PlayerIndex = PlayerIndex.Player1, + ControllerType = ControllerType.ProController, + LeftJoycon = new LeftJoyconCommonConfig + { + DpadUp = Key.Up, + DpadDown = Key.Down, + DpadLeft = Key.Left, + DpadRight = Key.Right, + ButtonMinus = Key.Minus, + ButtonL = Key.E, + ButtonZl = Key.Q, + ButtonSl = Key.Unbound, + ButtonSr = Key.Unbound, + }, + LeftJoyconStick = new JoyconConfigKeyboardStick + { + StickUp = Key.W, + StickDown = Key.S, + StickLeft = Key.A, + StickRight = Key.D, + StickButton = Key.F, + }, + RightJoycon = new RightJoyconCommonConfig + { + ButtonA = Key.Z, + ButtonB = Key.X, + ButtonX = Key.C, + ButtonY = Key.V, + ButtonPlus = Key.Plus, + ButtonR = Key.U, + ButtonZr = Key.O, + ButtonSl = Key.Unbound, + ButtonSr = Key.Unbound, + }, + RightJoyconStick = new JoyconConfigKeyboardStick + { + StickUp = Key.I, + StickDown = Key.K, + StickLeft = Key.J, + StickRight = Key.L, + StickButton = Key.H, + }, + } + ]; + }), + (26, static cff => cff.MemoryManagerMode = MemoryManagerMode.HostMappedUnsafe), + (27, static cff => cff.EnableMouse = false), + (29, + static cff => + cff.Hotkeys = new KeyboardHotkeys + { + ToggleVSyncMode = Key.F1, Screenshot = Key.F8, ShowUI = Key.F4 + }), + (30, static cff => + { + foreach (InputConfig config in cff.InputConfig) + { + if (config is StandardControllerInputConfig controllerConfig) + { + controllerConfig.Rumble = new RumbleConfigController + { + EnableRumble = false, StrongRumble = 1f, WeakRumble = 1f, + }; + } + } + }), + (31, static cff => cff.BackendThreading = BackendThreading.Auto), + (32, static cff => cff.Hotkeys = new KeyboardHotkeys + { + ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, + Screenshot = cff.Hotkeys.Screenshot, + ShowUI = cff.Hotkeys.ShowUI, + Pause = Key.F5, + }), + (33, static cff => + { + cff.Hotkeys = new KeyboardHotkeys + { + ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, + Screenshot = cff.Hotkeys.Screenshot, + ShowUI = cff.Hotkeys.ShowUI, + Pause = cff.Hotkeys.Pause, + ToggleMute = Key.F2, + }; + + cff.AudioVolume = 1; + }), + (34, static cff => cff.EnableInternetAccess = false), + (35, static cff => + { + foreach (StandardControllerInputConfig config in cff.InputConfig + .OfType()) + { + config.RangeLeft = 1.0f; + config.RangeRight = 1.0f; + } + }), + + (36, static cff => cff.LoggingEnableTrace = false), + (37, static cff => cff.ShowConsole = true), + (38, static cff => + { + cff.BaseStyle = "Dark"; + cff.GameListViewMode = 0; + cff.ShowNames = true; + cff.GridSize = 2; + cff.LanguageCode = "en_US"; + }), + (39, + static cff => cff.Hotkeys = new KeyboardHotkeys + { + ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, + Screenshot = cff.Hotkeys.Screenshot, + ShowUI = cff.Hotkeys.ShowUI, + Pause = cff.Hotkeys.Pause, + ToggleMute = cff.Hotkeys.ToggleMute, + ResScaleUp = Key.Unbound, + ResScaleDown = Key.Unbound + }), + (40, static cff => cff.GraphicsBackend = GraphicsBackend.OpenGl), + (41, + static cff => cff.Hotkeys = new KeyboardHotkeys + { + ToggleVSyncMode = cff.Hotkeys.ToggleVSyncMode, + Screenshot = cff.Hotkeys.Screenshot, + ShowUI = cff.Hotkeys.ShowUI, + Pause = cff.Hotkeys.Pause, + ToggleMute = cff.Hotkeys.ToggleMute, + ResScaleUp = cff.Hotkeys.ResScaleUp, + ResScaleDown = cff.Hotkeys.ResScaleDown, + VolumeUp = Key.Unbound, + VolumeDown = Key.Unbound + }), + (42, static cff => cff.EnableMacroHLE = true), + (43, static cff => cff.UseHypervisor = true), + (44, static cff => + { + cff.AntiAliasing = AntiAliasing.None; + cff.ScalingFilter = ScalingFilter.Bilinear; + cff.ScalingFilterLevel = 80; + }), + (45, + static cff => cff.ShownFileTypes = new ShownFileTypes + { + NSP = true, + PFS0 = true, + XCI = true, + NCA = true, + NRO = true, + NSO = true + }), + (46, static cff => cff.UseHypervisor = OperatingSystem.IsMacOS()), + (47, + static cff => cff.WindowStartup = new WindowStartup + { + WindowPositionX = 0, + WindowPositionY = 0, + WindowSizeHeight = 760, + WindowSizeWidth = 1280, + WindowMaximized = false + }), + (48, static cff => cff.EnableColorSpacePassthrough = false), + (49, static _ => + { + if (OperatingSystem.IsMacOS()) + { + AppDataManager.FixMacOSConfigurationFolders(); + } + }), + (50, static cff => cff.EnableHardwareAcceleration = true), + (51, static cff => cff.RememberWindowState = true), + (52, static cff => cff.AutoloadDirs = []), + (53, static cff => cff.EnableLowPowerPtc = false), + (54, static cff => cff.DramSize = MemoryConfiguration.MemoryConfiguration4GiB), + (55, static cff => cff.IgnoreApplet = false), + (56, static cff => cff.ShowTitleBar = !OperatingSystem.IsWindows()), + (57, static cff => + { + cff.VSyncMode = VSyncMode.Switch; + cff.EnableCustomVSyncInterval = false; + + cff.Hotkeys = new KeyboardHotkeys + { + ToggleVSyncMode = Key.F1, + Screenshot = cff.Hotkeys.Screenshot, + ShowUI = cff.Hotkeys.ShowUI, + Pause = cff.Hotkeys.Pause, + ToggleMute = cff.Hotkeys.ToggleMute, + ResScaleUp = cff.Hotkeys.ResScaleUp, + ResScaleDown = cff.Hotkeys.ResScaleDown, + VolumeUp = cff.Hotkeys.VolumeUp, + VolumeDown = cff.Hotkeys.VolumeDown, + CustomVSyncIntervalIncrement = Key.Unbound, + CustomVSyncIntervalDecrement = Key.Unbound, + }; + + cff.CustomVSyncInterval = 120; + }), + // 58 migration accidentally got skipped, but it worked with no issues somehow lol + (59, static cff => + { + cff.ShowDirtyHacks = false; + cff.DirtyHacks = []; + + // This was accidentally enabled by default when it was PRed. That is not what we want, + // so as a compromise users who want to use it will simply need to re-enable it once after updating. + cff.IgnoreApplet = false; + }) + ); } } -- 2.47.1 From 61ae427a4d757b7c3502d407d74ce2a06db6d9e9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 03:29:08 -0600 Subject: [PATCH 257/722] misc: Add CommunityToolkit.Mvvm for observable property generation; apply it to MainWindowViewModel for now. --- Directory.Packages.props | 1 + src/Ryujinx/AppHost.cs | 2 +- src/Ryujinx/Ryujinx.csproj | 3 +- src/Ryujinx/UI/ViewModels/BaseModel.cs | 12 +- .../UI/ViewModels/MainWindowViewModel.cs | 621 ++---------------- 5 files changed, 76 insertions(+), 563 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 070c1330c..7054dcd7d 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -17,6 +17,7 @@ + diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index b90f8b801..c728ee9c9 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -314,7 +314,7 @@ namespace Ryujinx.Ava _renderer.Window?.ChangeVSyncMode(e.NewValue); - _viewModel.ShowCustomVSyncIntervalPicker = (e.NewValue == VSyncMode.Custom); + _viewModel.UpdateVSyncIntervalPicker(); } public void VSyncModeToggle() diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 461e556ea..0991cf9ce 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -49,6 +49,7 @@ + @@ -162,4 +163,4 @@ - \ No newline at end of file + diff --git a/src/Ryujinx/UI/ViewModels/BaseModel.cs b/src/Ryujinx/UI/ViewModels/BaseModel.cs index e27c52867..c0ccfcae1 100644 --- a/src/Ryujinx/UI/ViewModels/BaseModel.cs +++ b/src/Ryujinx/UI/ViewModels/BaseModel.cs @@ -1,18 +1,10 @@ +using CommunityToolkit.Mvvm.ComponentModel; using System; -using System.ComponentModel; -using System.Runtime.CompilerServices; namespace Ryujinx.Ava.UI.ViewModels { - public class BaseModel : INotifyPropertyChanged + public class BaseModel : ObservableObject { - public event PropertyChangedEventHandler PropertyChanged; - - protected void OnPropertyChanged([CallerMemberName] string propertyName = null) - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } - protected void OnPropertiesChanged(string firstPropertyName, params ReadOnlySpan propertyNames) { OnPropertyChanged(firstPropertyName); diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 23bd2d9e7..6df1f76ad 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -6,6 +6,7 @@ using Avalonia.Media; using Avalonia.Media.Imaging; using Avalonia.Platform.Storage; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using DynamicData; using DynamicData.Binding; using FluentAvalonia.UI.Controls; @@ -54,80 +55,76 @@ using ShaderCacheLoadingState = Ryujinx.Graphics.Gpu.Shader.ShaderCacheState; namespace Ryujinx.Ava.UI.ViewModels { - public class MainWindowViewModel : BaseModel + public partial class MainWindowViewModel : BaseModel { private const int HotKeyPressDelayMs = 500; private delegate int LoadContentFromFolderDelegate(List dirs, out int numRemoved); - private ObservableCollectionExtended _applications; - private string _aspectStatusText; - - private string _loadHeading; - private string _cacheLoadStatus; - private string _searchText; - private Timer _searchTimer; - private string _dockedStatusText; - private string _vSyncModeText; - private string _fifoStatusText; - private string _gameStatusText; - private string _volumeStatusText; - private string _gpuStatusText; - private string _shaderCountText; + [ObservableProperty] private ObservableCollectionExtended _applications; + [ObservableProperty] private string _aspectRatioStatusText; + [ObservableProperty] private string _loadHeading; + [ObservableProperty] private string _cacheLoadStatus; + [ObservableProperty] private string _dockedStatusText; + [ObservableProperty] private string _fifoStatusText; + [ObservableProperty] private string _gameStatusText; + [ObservableProperty] private string _volumeStatusText; + [ObservableProperty] private string _gpuNameText; + [ObservableProperty] private string _backendText; + [ObservableProperty] private string _shaderCountText; + [ObservableProperty] private bool _showShaderCompilationHint; + [ObservableProperty] private bool _isFullScreen; + [ObservableProperty] private int _progressMaximum; + [ObservableProperty] private int _progressValue; + [ObservableProperty] private bool _showMenuAndStatusBar = true; + [ObservableProperty] private bool _showStatusSeparator; + [ObservableProperty] private Brush _progressBarForegroundColor; + [ObservableProperty] private Brush _progressBarBackgroundColor; + [ObservableProperty] private Brush _vSyncModeColor; + [ObservableProperty] private byte[] _selectedIcon; + [ObservableProperty] private int _statusBarProgressMaximum; + [ObservableProperty] private int _statusBarProgressValue; + [ObservableProperty] private string _statusBarProgressStatusText; + [ObservableProperty] private bool _statusBarProgressStatusVisible; + [ObservableProperty] private bool _isPaused; + [ObservableProperty] private bool _isLoadingIndeterminate = true; + [ObservableProperty] private bool _showAll; + [ObservableProperty] private string _lastScannedAmiiboId; + [ObservableProperty] private ReadOnlyObservableCollection _appsObservableList; + [ObservableProperty] private long _lastFullscreenToggle = Environment.TickCount64; + [ObservableProperty] private bool _showContent = true; + [ObservableProperty] private float _volumeBeforeMute; + [ObservableProperty] private bool _areMimeTypesRegistered = FileAssociationHelper.AreMimeTypesRegistered; + [ObservableProperty] private Cursor _cursor; + [ObservableProperty] private string _title; + [ObservableProperty] private WindowState _windowState; + [ObservableProperty] private double _windowWidth; + [ObservableProperty] private double _windowHeight; + [ObservableProperty] private bool _isActive; + [ObservableProperty] private bool _isSubMenuOpen; + [ObservableProperty] private ApplicationContextMenu _listAppContextMenu; + [ObservableProperty] private ApplicationContextMenu _gridAppContextMenu; + + private bool _showLoadProgress; + private bool _isGameRunning; private bool _isAmiiboRequested; private bool _isAmiiboBinRequested; - private bool _showShaderCompilationHint; - private bool _isGameRunning; - private bool _isFullScreen; - private int _progressMaximum; - private int _progressValue; - private long _lastFullscreenToggle = Environment.TickCount64; - private bool _showLoadProgress; - private bool _showMenuAndStatusBar = true; - private bool _showStatusSeparator; - private Brush _progressBarForegroundColor; - private Brush _progressBarBackgroundColor; - private Brush _vSyncModeColor; - private byte[] _selectedIcon; - private bool _isAppletMenuActive; - private int _statusBarProgressMaximum; - private int _statusBarProgressValue; - private string _statusBarProgressStatusText; - private bool _statusBarProgressStatusVisible; - private bool _isPaused; - private bool _showContent = true; - private bool _isLoadingIndeterminate = true; - private bool _showAll; - private string _lastScannedAmiiboId; - private bool _statusBarVisible; - private ReadOnlyObservableCollection _appsObservableList; - + private string _searchText; + private Timer _searchTimer; + private string _vSyncModeText; private string _showUiKey = "F4"; private string _pauseKey = "F5"; private string _screenshotKey = "F8"; private float _volume; - private float _volumeBeforeMute; - private string _backendText; - - private bool _areMimeTypesRegistered = FileAssociationHelper.AreMimeTypesRegistered; + private bool _isAppletMenuActive; + private bool _statusBarVisible; private bool _canUpdate = true; - private Cursor _cursor; - private string _title; private ApplicationData _currentApplicationData; private readonly AutoResetEvent _rendererWaitEvent; - private WindowState _windowState; - private double _windowWidth; - private double _windowHeight; private int _customVSyncInterval; private int _customVSyncIntervalPercentageProxy; - - private bool _isActive; - private bool _isSubMenuOpen; - private ApplicationData _listSelectedApplication; private ApplicationData _gridSelectedApplication; - private ApplicationContextMenu _listAppContextMenu; - private ApplicationContextMenu _gridAppContextMenu; - + public ApplicationData ListSelectedApplication { get => _listSelectedApplication; @@ -135,10 +132,13 @@ namespace Ryujinx.Ava.UI.ViewModels { _listSelectedApplication = value; +#pragma warning disable MVVMTK0034 if (_listSelectedApplication != null && _listAppContextMenu == null) + ListAppContextMenu = new ApplicationContextMenu(); else if (_listSelectedApplication == null && _listAppContextMenu != null) - ListAppContextMenu = null; + ListAppContextMenu = null!; +#pragma warning restore MVVMTK0034 OnPropertyChanged(); } @@ -151,10 +151,12 @@ namespace Ryujinx.Ava.UI.ViewModels { _gridSelectedApplication = value; +#pragma warning disable MVVMTK0034 if (_gridSelectedApplication != null && _gridAppContextMenu == null) GridAppContextMenu = new ApplicationContextMenu(); else if (_gridSelectedApplication == null && _gridAppContextMenu != null) - GridAppContextMenu = null; + GridAppContextMenu = null!; +#pragma warning restore MVVMTK0034 OnPropertyChanged(); } @@ -260,71 +262,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public Cursor Cursor - { - get => _cursor; - set - { - _cursor = value; - OnPropertyChanged(); - } - } - - public ReadOnlyObservableCollection AppsObservableList - { - get => _appsObservableList; - set - { - _appsObservableList = value; - - OnPropertyChanged(); - } - } - - public ApplicationContextMenu ListAppContextMenu - { - get => _listAppContextMenu; - set - { - _listAppContextMenu = value; - - OnPropertyChanged(); - } - } - - public ApplicationContextMenu GridAppContextMenu - { - get => _gridAppContextMenu; - set - { - _gridAppContextMenu = value; - - OnPropertyChanged(); - } - } - - public bool IsPaused - { - get => _isPaused; - set - { - _isPaused = value; - - OnPropertyChanged(); - } - } - - public long LastFullscreenToggle - { - get => _lastFullscreenToggle; - set - { - _lastFullscreenToggle = value; - - OnPropertyChanged(); - } - } - public bool StatusBarVisible { get => _statusBarVisible && EnableNonGameRunningControls; @@ -340,17 +277,6 @@ namespace Ryujinx.Ava.UI.ViewModels public bool ShowFirmwareStatus => !ShowLoadProgress; - public bool ShowShaderCompilationHint - { - get => _showShaderCompilationHint; - set - { - _showShaderCompilationHint = value; - - OnPropertyChanged(); - } - } - public bool IsGameRunning { get => _isGameRunning; @@ -393,7 +319,7 @@ namespace Ryujinx.Ava.UI.ViewModels } public bool CanScanAmiiboBinaries => AmiiboBinReader.HasAmiiboKeyFile; - + public bool ShowLoadProgress { get => _showLoadProgress; @@ -406,61 +332,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public string GameStatusText - { - get => _gameStatusText; - set - { - _gameStatusText = value; - - OnPropertyChanged(); - } - } - - public bool IsFullScreen - { - get => _isFullScreen; - set - { - _isFullScreen = value; - - OnPropertyChanged(); - } - } - - public bool IsSubMenuOpen - { - get => _isSubMenuOpen; - set - { - _isSubMenuOpen = value; - - OnPropertyChanged(); - } - } - - public bool ShowAll - { - get => _showAll; - set - { - _showAll = value; - - OnPropertyChanged(); - } - } - - public string LastScannedAmiiboId - { - get => _lastScannedAmiiboId; - set - { - _lastScannedAmiiboId = value; - - OnPropertyChanged(); - } - } - public ApplicationData SelectedApplication { get @@ -482,79 +353,12 @@ namespace Ryujinx.Ava.UI.ViewModels public bool OpenBcatSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.BcatDeliveryCacheStorageSize > 0; - public string LoadHeading + public bool ShowCustomVSyncIntervalPicker + => _isGameRunning && AppHost.Device.VSyncMode == VSyncMode.Custom; + + public void UpdateVSyncIntervalPicker() { - get => _loadHeading; - set - { - _loadHeading = value; - - OnPropertyChanged(); - } - } - - public string CacheLoadStatus - { - get => _cacheLoadStatus; - set - { - _cacheLoadStatus = value; - - OnPropertyChanged(); - } - } - - public Brush ProgressBarBackgroundColor - { - get => _progressBarBackgroundColor; - set - { - _progressBarBackgroundColor = value; - - OnPropertyChanged(); - } - } - - public Brush ProgressBarForegroundColor - { - get => _progressBarForegroundColor; - set - { - _progressBarForegroundColor = value; - - OnPropertyChanged(); - } - } - - public Brush VSyncModeColor - { - get => _vSyncModeColor; - set - { - _vSyncModeColor = value; - - OnPropertyChanged(); - } - } - - public bool ShowCustomVSyncIntervalPicker - { - get - { - if (_isGameRunning) - { - return AppHost.Device.VSyncMode == - VSyncMode.Custom; - } - else - { - return false; - } - } - set - { - OnPropertyChanged(); - } + OnPropertyChanged(nameof(ShowCustomVSyncIntervalPicker)); } public int CustomVSyncIntervalPercentageProxy @@ -607,126 +411,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public byte[] SelectedIcon - { - get => _selectedIcon; - set - { - _selectedIcon = value; - - OnPropertyChanged(); - } - } - - public int ProgressMaximum - { - get => _progressMaximum; - set - { - _progressMaximum = value; - - OnPropertyChanged(); - } - } - - public int ProgressValue - { - get => _progressValue; - set - { - _progressValue = value; - - OnPropertyChanged(); - } - } - - public int StatusBarProgressMaximum - { - get => _statusBarProgressMaximum; - set - { - _statusBarProgressMaximum = value; - - OnPropertyChanged(); - } - } - - public int StatusBarProgressValue - { - get => _statusBarProgressValue; - set - { - _statusBarProgressValue = value; - - OnPropertyChanged(); - } - } - - public bool StatusBarProgressStatusVisible - { - get => _statusBarProgressStatusVisible; - set - { - _statusBarProgressStatusVisible = value; - - OnPropertyChanged(); - } - } - - public string StatusBarProgressStatusText - { - get => _statusBarProgressStatusText; - set - { - _statusBarProgressStatusText = value; - - OnPropertyChanged(); - } - } - - public string FifoStatusText - { - get => _fifoStatusText; - set - { - _fifoStatusText = value; - - OnPropertyChanged(); - } - } - - public string GpuNameText - { - get => _gpuStatusText; - set - { - _gpuStatusText = value; - - OnPropertyChanged(); - } - } - - public string ShaderCountText - { - get => _shaderCountText; - set - { - _shaderCountText = value; - OnPropertyChanged(); - } - } - - public string BackendText - { - get => _backendText; - set - { - _backendText = value; - - OnPropertyChanged(); - } - } - public string VSyncModeText { get => _vSyncModeText; @@ -735,39 +419,7 @@ namespace Ryujinx.Ava.UI.ViewModels _vSyncModeText = value; OnPropertyChanged(); - } - } - - public string DockedStatusText - { - get => _dockedStatusText; - set - { - _dockedStatusText = value; - - OnPropertyChanged(); - } - } - - public string AspectRatioStatusText - { - get => _aspectStatusText; - set - { - _aspectStatusText = value; - - OnPropertyChanged(); - } - } - - public string VolumeStatusText - { - get => _volumeStatusText; - set - { - _volumeStatusText = value; - - OnPropertyChanged(); + OnPropertyChanged(nameof(ShowCustomVSyncIntervalPicker)); } } @@ -791,73 +443,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public float VolumeBeforeMute - { - get => _volumeBeforeMute; - set - { - _volumeBeforeMute = value; - - OnPropertyChanged(); - } - } - - public bool ShowStatusSeparator - { - get => _showStatusSeparator; - set - { - _showStatusSeparator = value; - - OnPropertyChanged(); - } - } - - public bool ShowMenuAndStatusBar - { - get => _showMenuAndStatusBar; - set - { - _showMenuAndStatusBar = value; - - OnPropertyChanged(); - } - } - - public bool IsLoadingIndeterminate - { - get => _isLoadingIndeterminate; - set - { - _isLoadingIndeterminate = value; - - OnPropertyChanged(); - } - } - - public bool IsActive - { - get => _isActive; - set - { - _isActive = value; - - OnPropertyChanged(); - } - } - - - public bool ShowContent - { - get => _showContent; - set - { - _showContent = value; - - OnPropertyChanged(); - } - } - public bool IsAppletMenuActive { get => _isAppletMenuActive && EnableNonGameRunningControls; @@ -869,39 +454,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public WindowState WindowState - { - get => _windowState; - internal set - { - _windowState = value; - - OnPropertyChanged(); - } - } - - public double WindowWidth - { - get => _windowWidth; - set - { - _windowWidth = value; - - OnPropertyChanged(); - } - } - - public double WindowHeight - { - get => _windowHeight; - set - { - _windowHeight = value; - - OnPropertyChanged(); - } - } - public bool IsGrid => Glyph == Glyph.Grid; public bool IsList => Glyph == Glyph.List; @@ -945,17 +497,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public string Title - { - get => _title; - set - { - _title = value; - - OnPropertyChanged(); - } - } - public bool ShowConsoleVisible { get => ConsoleHelper.SetConsoleWindowStateSupported; @@ -966,27 +507,6 @@ namespace Ryujinx.Ava.UI.ViewModels get => FileAssociationHelper.IsTypeAssociationSupported; } - public bool AreMimeTypesRegistered - { - get => _areMimeTypesRegistered; - set { - _areMimeTypesRegistered = value; - - OnPropertyChanged(); - } - } - - public ObservableCollectionExtended Applications - { - get => _applications; - set - { - _applications = value; - - OnPropertyChanged(); - } - } - public Glyph Glyph { get => (Glyph)ConfigurationState.Instance.UI.GameListViewMode.Value; @@ -1004,7 +524,8 @@ namespace Ryujinx.Ava.UI.ViewModels public bool ShowNames { - get => ConfigurationState.Instance.UI.ShowNames && ConfigurationState.Instance.UI.GridSize > 1; set + get => ConfigurationState.Instance.UI.ShowNames && ConfigurationState.Instance.UI.GridSize > 1; + set { ConfigurationState.Instance.UI.ShowNames.Value = value; @@ -1564,8 +1085,6 @@ namespace Ryujinx.Ava.UI.ViewModels } VSyncModeText = args.VSyncMode == "Custom" ? "Custom" : "VSync"; - ShowCustomVSyncIntervalPicker = - args.VSyncMode == VSyncMode.Custom.ToString(); DockedStatusText = args.DockedMode; AspectRatioStatusText = args.AspectRatio; GameStatusText = args.GameStatus; -- 2.47.1 From 6286501550b97424ad1ab5a628d528b17da513ce Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 20:11:44 -0600 Subject: [PATCH 258/722] misc: do not log dirty hack changes if ShowDirtyHacks is disabled --- .../Utilities/Configuration/ConfigurationState.Model.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index 4fc25addb..fe5f2c3ad 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -645,6 +645,9 @@ namespace Ryujinx.Ava.Utilities.Configuration private void HackChanged(object sender, ReactiveEventArgs rxe) { + if (!ShowDirtyHacks) + return; + var newHacks = EnabledHacks.Select(x => x.Hack) .JoinToString(", "); -- 2.47.1 From 3525d5ecd4bbd7b14893d03cf8018570478a7dca Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 20:11:49 -0600 Subject: [PATCH 259/722] UI: clean up slider UI for shader translation delay --- .../UI/ViewModels/SettingsHacksViewModel.cs | 4 +-- .../UI/Views/Settings/SettingsHacksView.axaml | 36 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs index b93cdd6dc..4cfbc8957 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs @@ -40,7 +40,7 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public string ShaderTranslationDelayTooltipText => $"Current value: {ShaderTranslationDelay}"; + public string ShaderTranslationDelayValueText => $"{ShaderTranslationDelay}ms"; public int ShaderTranslationDelay { @@ -49,7 +49,7 @@ namespace Ryujinx.Ava.UI.ViewModels { _shaderTranslationSleepDelay = value; - OnPropertiesChanged(nameof(ShaderTranslationDelay), nameof(ShaderTranslationDelayTooltipText)); + OnPropertiesChanged(nameof(ShaderTranslationDelay), nameof(ShaderTranslationDelayValueText)); } } diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index 087112368..2ef0cc74f 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -54,21 +54,27 @@ - + + + + -- 2.47.1 From 27c5cba10b679e75f12bcae50b36a1cb3bc49acd Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 21:11:57 -0600 Subject: [PATCH 260/722] misc: More Mvvm usage instead of writing out the observable properties --- .../UI/ViewModels/AboutWindowViewModel.cs | 40 ++------- .../DownloadableContentManagerViewModel.cs | 39 ++------- .../UI/ViewModels/ModManagerViewModel.cs | 31 ++----- .../UI/ViewModels/SettingsHacksViewModel.cs | 31 ++----- .../UI/ViewModels/SettingsViewModel.cs | 2 +- .../UI/ViewModels/TitleUpdateViewModel.cs | 70 ++++------------ .../UserFirmwareAvatarSelectorViewModel.cs | 33 ++------ .../UserProfileImageSelectorViewModel.cs | 17 +--- .../UI/ViewModels/UserSaveManagerViewModel.cs | 82 +++++-------------- .../UI/Views/Settings/SettingsHacksView.axaml | 2 +- .../UI/Windows/TitleUpdateWindow.axaml | 2 +- 11 files changed, 72 insertions(+), 277 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index 6bc1e1f03..979ae8253 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -1,6 +1,7 @@ using Avalonia.Media.Imaging; using Avalonia.Styling; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Utilities.Configuration; @@ -8,42 +9,11 @@ using System; namespace Ryujinx.Ava.UI.ViewModels { - public class AboutWindowViewModel : BaseModel, IDisposable + public partial class AboutWindowViewModel : BaseModel, IDisposable { - private Bitmap _githubLogo; - private Bitmap _discordLogo; - - private string _version; - - public Bitmap GithubLogo - { - get => _githubLogo; - set - { - _githubLogo = value; - OnPropertyChanged(); - } - } - - public Bitmap DiscordLogo - { - get => _discordLogo; - set - { - _discordLogo = value; - OnPropertyChanged(); - } - } - - public string Version - { - get => _version; - set - { - _version = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Bitmap _githubLogo; + [ObservableProperty] private Bitmap _discordLogo; + [ObservableProperty] private string _version; public string Developers => "GreemDev"; diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index acc26decb..658568909 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -2,6 +2,7 @@ using Avalonia.Collections; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Platform.Storage; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using DynamicData; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; @@ -17,13 +18,13 @@ using Application = Avalonia.Application; namespace Ryujinx.Ava.UI.ViewModels { - public class DownloadableContentManagerViewModel : BaseModel + public partial class DownloadableContentManagerViewModel : BaseModel { private readonly ApplicationLibrary _applicationLibrary; private AvaloniaList _downloadableContents = new(); - private AvaloniaList _selectedDownloadableContents = new(); - private AvaloniaList _views = new(); - private bool _showBundledContentNotice = false; + [ObservableProperty] private AvaloniaList _selectedDownloadableContents = new(); + [ObservableProperty] private AvaloniaList _views = new(); + [ObservableProperty] private bool _showBundledContentNotice = false; private string _search; private readonly ApplicationData _applicationData; @@ -41,26 +42,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public AvaloniaList Views - { - get => _views; - set - { - _views = value; - OnPropertyChanged(); - } - } - - public AvaloniaList SelectedDownloadableContents - { - get => _selectedDownloadableContents; - set - { - _selectedDownloadableContents = value; - OnPropertyChanged(); - } - } - public string Search { get => _search; @@ -77,16 +58,6 @@ namespace Ryujinx.Ava.UI.ViewModels get => string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowHeading], DownloadableContents.Count); } - public bool ShowBundledContentNotice - { - get => _showBundledContentNotice; - set - { - _showBundledContentNotice = value; - OnPropertyChanged(); - } - } - public DownloadableContentManagerViewModel(ApplicationLibrary applicationLibrary, ApplicationData applicationData) { _applicationLibrary = applicationLibrary; diff --git a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs index 9c26376ce..ce40ce16c 100644 --- a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs @@ -1,8 +1,7 @@ -using Avalonia; using Avalonia.Collections; -using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Platform.Storage; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using DynamicData; using Gommon; using Ryujinx.Ava.Common.Locale; @@ -18,13 +17,13 @@ using System.Linq; namespace Ryujinx.Ava.UI.ViewModels { - public class ModManagerViewModel : BaseModel + public partial class ModManagerViewModel : BaseModel { private readonly string _modJsonPath; private AvaloniaList _mods = new(); - private AvaloniaList _views = new(); - private AvaloniaList _selectedMods = new(); + [ObservableProperty] private AvaloniaList _views = new(); + [ObservableProperty] private AvaloniaList _selectedMods = new(); private string _search; private readonly ulong _applicationId; @@ -44,26 +43,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public AvaloniaList Views - { - get => _views; - set - { - _views = value; - OnPropertyChanged(); - } - } - - public AvaloniaList SelectedMods - { - get => _selectedMods; - set - { - _selectedMods = value; - OnPropertyChanged(); - } - } - public string Search { get => _search; @@ -143,8 +122,10 @@ namespace Ryujinx.Ava.UI.ViewModels .Filter(Filter) .Bind(out var view).AsObservableList(); +#pragma warning disable MVVMTK0034 // Event to update is fired below _views.Clear(); _views.AddRange(view); +#pragma warning restore MVVMTK0034 SelectedMods = new(Views.Where(x => x.Enabled)); diff --git a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs index 4cfbc8957..5096a716d 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs @@ -1,9 +1,10 @@ -using Gommon; +using CommunityToolkit.Mvvm.ComponentModel; +using Gommon; using Ryujinx.Ava.Utilities.Configuration; namespace Ryujinx.Ava.UI.ViewModels { - public class SettingsHacksViewModel : BaseModel + public partial class SettingsHacksViewModel : BaseModel { private readonly SettingsViewModel _baseViewModel; @@ -14,31 +15,9 @@ namespace Ryujinx.Ava.UI.ViewModels _baseViewModel = settingsVm; } - private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; - private bool _shaderTranslationThreadSleep = ConfigurationState.Instance.Hacks.EnableShaderTranslationDelay; + [ObservableProperty] private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; + [ObservableProperty] private bool _shaderTranslationDelayEnabled = ConfigurationState.Instance.Hacks.EnableShaderTranslationDelay; private int _shaderTranslationSleepDelay = ConfigurationState.Instance.Hacks.ShaderTranslationDelay; - - public bool Xc2MenuSoftlockFixEnabled - { - get => _xc2MenuSoftlockFix; - set - { - _xc2MenuSoftlockFix = value; - - OnPropertyChanged(); - } - } - - public bool ShaderTranslationDelayEnabled - { - get => _shaderTranslationThreadSleep; - set - { - _shaderTranslationThreadSleep = value; - - OnPropertyChanged(); - } - } public string ShaderTranslationDelayValueText => $"{ShaderTranslationDelay}ms"; diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index a5bdd2f88..39df76aa4 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -756,7 +756,7 @@ namespace Ryujinx.Ava.UI.ViewModels config.Multiplayer.LdnServer.Value = LdnServer; // Dirty Hacks - config.Hacks.Xc2MenuSoftlockFix.Value = DirtyHacks.Xc2MenuSoftlockFixEnabled; + config.Hacks.Xc2MenuSoftlockFix.Value = DirtyHacks.Xc2MenuSoftlockFix; config.Hacks.EnableShaderTranslationDelay.Value = DirtyHacks.ShaderTranslationDelayEnabled; config.Hacks.ShaderTranslationDelay.Value = DirtyHacks.ShaderTranslationDelay; diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index 0748efeb4..86d59d6b4 100644 --- a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -1,74 +1,32 @@ using Avalonia.Collections; -using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Platform.Storage; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.HLE.FileSystem; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; -using Application = Avalonia.Application; namespace Ryujinx.Ava.UI.ViewModels { - public record TitleUpdateViewNoUpdateSentinal(); + public record TitleUpdateViewModelNoUpdate; - public class TitleUpdateViewModel : BaseModel + public partial class TitleUpdateViewModel : BaseModel { private ApplicationLibrary ApplicationLibrary { get; } private ApplicationData ApplicationData { get; } - private AvaloniaList _titleUpdates = new(); - private AvaloniaList _views = new(); - private object _selectedUpdate = new TitleUpdateViewNoUpdateSentinal(); - private bool _showBundledContentNotice = false; + [ObservableProperty] private AvaloniaList _titleUpdates = new(); + [ObservableProperty] private AvaloniaList _views = new(); + [ObservableProperty] private object _selectedUpdate = new TitleUpdateViewModelNoUpdate(); + [ObservableProperty] private bool _showBundledContentNotice; - public AvaloniaList TitleUpdates - { - get => _titleUpdates; - set - { - _titleUpdates = value; - OnPropertyChanged(); - } - } - - public AvaloniaList Views - { - get => _views; - set - { - _views = value; - OnPropertyChanged(); - } - } - - public object SelectedUpdate - { - get => _selectedUpdate; - set - { - _selectedUpdate = value; - OnPropertyChanged(); - } - } - - public bool ShowBundledContentNotice - { - get => _showBundledContentNotice; - set - { - _showBundledContentNotice = value; - OnPropertyChanged(); - } - } - - public IStorageProvider StorageProvider; + private readonly IStorageProvider _storageProvider; public TitleUpdateViewModel(ApplicationLibrary applicationLibrary, ApplicationData applicationData) { @@ -76,7 +34,7 @@ namespace Ryujinx.Ava.UI.ViewModels ApplicationData = applicationData; - StorageProvider = RyujinxApp.MainWindow.StorageProvider; + _storageProvider = RyujinxApp.MainWindow.StorageProvider; LoadUpdates(); } @@ -87,7 +45,7 @@ namespace Ryujinx.Ava.UI.ViewModels .Where(it => it.TitleUpdate.TitleIdBase == ApplicationData.IdBase); bool hasBundledContent = false; - SelectedUpdate = new TitleUpdateViewNoUpdateSentinal(); + SelectedUpdate = new TitleUpdateViewModelNoUpdate(); foreach ((TitleUpdateModel update, bool isSelected) in updates) { TitleUpdates.Add(update); @@ -113,12 +71,12 @@ namespace Ryujinx.Ava.UI.ViewModels var selected = SelectedUpdate; Views.Clear(); - Views.Add(new TitleUpdateViewNoUpdateSentinal()); + Views.Add(new TitleUpdateViewModelNoUpdate()); Views.AddRange(sortedUpdates); SelectedUpdate = selected; - if (SelectedUpdate is TitleUpdateViewNoUpdateSentinal) + if (SelectedUpdate is TitleUpdateViewModelNoUpdate) { SelectedUpdate = Views[0]; } @@ -176,7 +134,7 @@ namespace Ryujinx.Ava.UI.ViewModels } else if (update == SelectedUpdate as TitleUpdateModel) { - SelectedUpdate = new TitleUpdateViewNoUpdateSentinal(); + SelectedUpdate = new TitleUpdateViewModelNoUpdate(); } SortUpdates(); @@ -184,7 +142,7 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task Add() { - var result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + var result = await _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { AllowMultiple = true, FileTypeFilter = new List diff --git a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs index b07bf78b9..29c81308b 100644 --- a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs @@ -1,4 +1,5 @@ using Avalonia.Media; +using CommunityToolkit.Mvvm.ComponentModel; using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Fsa; @@ -20,12 +21,12 @@ using Image = SkiaSharp.SKImage; namespace Ryujinx.Ava.UI.ViewModels { - internal class UserFirmwareAvatarSelectorViewModel : BaseModel + internal partial class UserFirmwareAvatarSelectorViewModel : BaseModel { private static readonly Dictionary _avatarStore = new(); - private ObservableCollection _images; - private Color _backgroundColor = Colors.White; + [ObservableProperty] private ObservableCollection _images; + [ObservableProperty] private Color _backgroundColor = Colors.White; private int _selectedIndex; @@ -34,27 +35,11 @@ namespace Ryujinx.Ava.UI.ViewModels _images = new ObservableCollection(); LoadImagesFromStore(); - } - - public Color BackgroundColor - { - get => _backgroundColor; - set + PropertyChanged += (_, args) => { - _backgroundColor = value; - OnPropertyChanged(); - ChangeImageBackground(); - } - } - - public ObservableCollection Images - { - get => _images; - set - { - _images = value; - OnPropertyChanged(); - } + if (args.PropertyName == nameof(BackgroundColor)) + ChangeImageBackground(); + }; } public int SelectedIndex @@ -70,7 +55,7 @@ namespace Ryujinx.Ava.UI.ViewModels } else { - SelectedImage = _images[_selectedIndex].Data; + SelectedImage = Images[_selectedIndex].Data; } OnPropertyChanged(); diff --git a/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs index 8e7d41a55..36a9a62f9 100644 --- a/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs @@ -1,18 +1,9 @@ +using CommunityToolkit.Mvvm.ComponentModel; + namespace Ryujinx.Ava.UI.ViewModels { - internal class UserProfileImageSelectorViewModel : BaseModel + internal partial class UserProfileImageSelectorViewModel : BaseModel { - private bool _firmwareFound; - - public bool FirmwareFound - { - get => _firmwareFound; - - set - { - _firmwareFound = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private bool _firmwareFound; } } diff --git a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs index 85adef005..187df0449 100644 --- a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs @@ -1,3 +1,4 @@ +using CommunityToolkit.Mvvm.ComponentModel; using DynamicData; using DynamicData.Binding; using Ryujinx.Ava.Common.Locale; @@ -8,74 +9,31 @@ using System.Collections.ObjectModel; namespace Ryujinx.Ava.UI.ViewModels { - public class UserSaveManagerViewModel : BaseModel + public partial class UserSaveManagerViewModel : BaseModel { - private int _sortIndex; - private int _orderIndex; - private string _search; - private ObservableCollection _saves = new(); - private ObservableCollection _views = new(); + [ObservableProperty] private int _sortIndex; + [ObservableProperty] private int _orderIndex; + [ObservableProperty] private string _search; + [ObservableProperty] private ObservableCollection _saves = new(); + [ObservableProperty] private ObservableCollection _views = new(); private readonly AccountManager _accountManager; public string SaveManagerHeading => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.SaveManagerHeading, _accountManager.LastOpenedUser.Name, _accountManager.LastOpenedUser.UserId); - public int SortIndex - { - get => _sortIndex; - set - { - _sortIndex = value; - OnPropertyChanged(); - Sort(); - } - } - - public int OrderIndex - { - get => _orderIndex; - set - { - _orderIndex = value; - OnPropertyChanged(); - Sort(); - } - } - - public string Search - { - get => _search; - set - { - _search = value; - OnPropertyChanged(); - Sort(); - } - } - - public ObservableCollection Saves - { - get => _saves; - set - { - _saves = value; - OnPropertyChanged(); - Sort(); - } - } - - public ObservableCollection Views - { - get => _views; - set - { - _views = value; - OnPropertyChanged(); - } - } - public UserSaveManagerViewModel(AccountManager accountManager) { _accountManager = accountManager; + PropertyChanged += (_, evt) => + { + if (evt.PropertyName is + nameof(SortIndex) or + nameof(OrderIndex) or + nameof(Search) or + nameof(Saves)) + { + Sort(); + } + }; } public void Sort() @@ -85,8 +43,10 @@ namespace Ryujinx.Ava.UI.ViewModels .Sort(GetComparer()) .Bind(out var view).AsObservableList(); +#pragma warning disable MVVMTK0034 _views.Clear(); _views.AddRange(view); +#pragma warning restore MVVMTK0034 OnPropertyChanged(nameof(Views)); } @@ -94,7 +54,7 @@ namespace Ryujinx.Ava.UI.ViewModels { if (arg is SaveModel save) { - return string.IsNullOrWhiteSpace(_search) || save.Title.ToLower().Contains(_search.ToLower()); + return string.IsNullOrWhiteSpace(Search) || save.Title.ToLower().Contains(Search.ToLower()); } return false; diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index 2ef0cc74f..f1900a69a 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -37,7 +37,7 @@ ToolTip.Tip="{Binding DirtyHacks.Xc2MenuFixTooltip}"> + IsChecked="{Binding DirtyHacks.Xc2MenuSoftlockFix}"/> diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml index 0ba9bc7d8..a8ec5d29a 100644 --- a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml +++ b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml @@ -95,7 +95,7 @@ + DataType="viewModels:TitleUpdateViewModelNoUpdate"> -- 2.47.1 From 7c01633f13f952790ab92e3f1ad9b5a633f3e9e7 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 21:15:50 -0600 Subject: [PATCH 261/722] UI: Show the path of the mod on the folder button --- src/Ryujinx/UI/Windows/ModManagerWindow.axaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml index 3a1c4e6dd..a8fd3a2e7 100644 --- a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml +++ b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml @@ -93,6 +93,7 @@ Padding="10" MinWidth="0" MinHeight="0" + ToolTip.Tip="{Binding Path}" Click="OpenLocation"> Date: Tue, 31 Dec 2024 21:21:54 -0600 Subject: [PATCH 262/722] misc: DateTimeOffset Extract extension from Gommon --- Directory.Packages.props | 2 +- src/Ryujinx/UI/ViewModels/SettingsViewModel.cs | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 7054dcd7d..ab3bc39b8 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -42,7 +42,7 @@ - + diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 39df76aa4..03e3d44e9 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -466,11 +466,10 @@ namespace Ryujinx.Ava.UI.ViewModels public void MatchSystemTime() { - var dto = DateTimeOffset.Now; - - CurrentDate = new DateTimeOffset(dto.Year, dto.Month, dto.Day, 0, 0, 0, dto.Offset); + (DateTimeOffset dto, TimeSpan timeOfDay) = DateTimeOffset.Now.Extract(); - CurrentTime = dto.TimeOfDay; + CurrentDate = dto; + CurrentTime = timeOfDay; OnPropertyChanged(nameof(CurrentDate)); OnPropertyChanged(nameof(CurrentTime)); -- 2.47.1 From 732aafd3bb9a18b341aa9cbc8ce8cdc78e2616e6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 22:23:08 -0600 Subject: [PATCH 263/722] misc: Prevent value change logging when the value is changed to the same thing it was before the value change. --- src/Ryujinx.Common/ReactiveObject.cs | 11 +++ .../UI/ViewModels/SettingsViewModel.cs | 79 +++---------------- 2 files changed, 24 insertions(+), 66 deletions(-) diff --git a/src/Ryujinx.Common/ReactiveObject.cs b/src/Ryujinx.Common/ReactiveObject.cs index 8df1e20fe..7ff16f0cb 100644 --- a/src/Ryujinx.Common/ReactiveObject.cs +++ b/src/Ryujinx.Common/ReactiveObject.cs @@ -53,6 +53,17 @@ namespace Ryujinx.Common { public static void LogValueChange(LogClass logClass, ReactiveEventArgs eventArgs, string valueName) { + if ((eventArgs.NewValue == null || eventArgs.OldValue == null)) + { + if (!(eventArgs.NewValue == null && eventArgs.OldValue == null)) + goto Log; + } + else if (!eventArgs.NewValue!.Equals(eventArgs.OldValue)) + goto Log; + + return; + + Log: string message = string.Create(CultureInfo.InvariantCulture, $"{valueName} set to: {eventArgs.NewValue}"); Logger.Info?.Print(logClass, message); diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 03e3d44e9..2678bbf98 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -1,6 +1,7 @@ using Avalonia.Collections; using Avalonia.Controls; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using Gommon; using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.OpenAL; @@ -46,9 +47,9 @@ namespace Ryujinx.Ava.UI.ViewModels private int _resolutionScale; private int _graphicsBackendMultithreadingIndex; private float _volume; - private bool _isVulkanAvailable = true; - private bool _gameDirectoryChanged; - private bool _autoloadDirectoryChanged; + [ObservableProperty] private bool _isVulkanAvailable = true; + [ObservableProperty] private bool _gameDirectoryChanged; + [ObservableProperty] private bool _autoloadDirectoryChanged; private readonly List _gpuIds = new(); private int _graphicsBackendIndex; private int _scalingFilter; @@ -63,7 +64,7 @@ namespace Ryujinx.Ava.UI.ViewModels private int _networkInterfaceIndex; private int _multiplayerModeIndex; private string _ldnPassphrase; - private string _ldnServer; + [ObservableProperty] private string _ldnServer; public SettingsHacksViewModel DirtyHacks { get; } @@ -111,43 +112,10 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public bool IsVulkanAvailable - { - get => _isVulkanAvailable; - set - { - _isVulkanAvailable = value; - - OnPropertyChanged(); - } - } - public bool IsOpenGLAvailable => !OperatingSystem.IsMacOS(); public bool IsAppleSiliconMac => OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64; - public bool GameDirectoryChanged - { - get => _gameDirectoryChanged; - set - { - _gameDirectoryChanged = value; - - OnPropertyChanged(); - } - } - - public bool AutoloadDirectoryChanged - { - get => _autoloadDirectoryChanged; - set - { - _autoloadDirectoryChanged = value; - - OnPropertyChanged(); - } - } - public bool IsMacOS => OperatingSystem.IsMacOS(); public bool EnableDiscordIntegration { get; set; } @@ -182,19 +150,12 @@ namespace Ryujinx.Ava.UI.ViewModels _customVSyncInterval = newInterval; _customVSyncIntervalPercentageProxy = value; OnPropertiesChanged( - nameof(CustomVSyncInterval), + nameof(CustomVSyncInterval), nameof(CustomVSyncIntervalPercentageText)); } } - public string CustomVSyncIntervalPercentageText - { - get - { - string text = CustomVSyncIntervalPercentageProxy + "%"; - return text; - } - } + public string CustomVSyncIntervalPercentageText => CustomVSyncIntervalPercentageProxy + "%"; public bool EnableCustomVSyncInterval { @@ -356,7 +317,6 @@ namespace Ryujinx.Ava.UI.ViewModels set { _networkInterfaceIndex = value != -1 ? value : 0; - ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value = _networkInterfaces[NetworkInterfaceList[_networkInterfaceIndex]]; } } @@ -366,7 +326,6 @@ namespace Ryujinx.Ava.UI.ViewModels set { _multiplayerModeIndex = value; - ConfigurationState.Instance.Multiplayer.Mode.Value = (MultiplayerMode)_multiplayerModeIndex; } } @@ -375,16 +334,6 @@ namespace Ryujinx.Ava.UI.ViewModels public bool IsInvalidLdnPassphraseVisible { get; set; } - public string LdnServer - { - get => _ldnServer; - set - { - _ldnServer = value; - OnPropertyChanged(); - } - } - public SettingsViewModel(VirtualFileSystem virtualFileSystem, ContentManager contentManager) : this() { _virtualFileSystem = virtualFileSystem; @@ -647,16 +596,14 @@ namespace Ryujinx.Ava.UI.ViewModels config.ShowTitleBar.Value = ShowTitleBar; config.HideCursor.Value = (HideCursorMode)HideCursor; - if (_gameDirectoryChanged) + if (GameDirectoryChanged) { - List gameDirs = new(GameDirectories); - config.UI.GameDirs.Value = gameDirs; + config.UI.GameDirs.Value = [..GameDirectories]; } - if (_autoloadDirectoryChanged) + if (AutoloadDirectoryChanged) { - List autoloadDirs = new(AutoloadDirectories); - config.UI.AutoloadDirs.Value = autoloadDirs; + config.UI.AutoloadDirs.Value = [..AutoloadDirectories]; } config.UI.BaseStyle.Value = BaseStyleIndex switch @@ -766,8 +713,8 @@ namespace Ryujinx.Ava.UI.ViewModels SaveSettingsEvent?.Invoke(); - _gameDirectoryChanged = false; - _autoloadDirectoryChanged = false; + GameDirectoryChanged = false; + AutoloadDirectoryChanged = false; } private static void RevertIfNotSaved() -- 2.47.1 From 5d63706cea0306c6e40174c9d5490d2279dba48a Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 31 Dec 2024 22:34:14 -0600 Subject: [PATCH 264/722] misc: Bake in ValueEqual logic into ReactiveEventArgs [ci skip] --- src/Ryujinx.Common/ReactiveObject.cs | 29 ++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx.Common/ReactiveObject.cs b/src/Ryujinx.Common/ReactiveObject.cs index 7ff16f0cb..bb2ece81c 100644 --- a/src/Ryujinx.Common/ReactiveObject.cs +++ b/src/Ryujinx.Common/ReactiveObject.cs @@ -53,17 +53,9 @@ namespace Ryujinx.Common { public static void LogValueChange(LogClass logClass, ReactiveEventArgs eventArgs, string valueName) { - if ((eventArgs.NewValue == null || eventArgs.OldValue == null)) - { - if (!(eventArgs.NewValue == null && eventArgs.OldValue == null)) - goto Log; - } - else if (!eventArgs.NewValue!.Equals(eventArgs.OldValue)) - goto Log; + if (eventArgs.AreValuesEqual) + return; - return; - - Log: string message = string.Create(CultureInfo.InvariantCulture, $"{valueName} set to: {eventArgs.NewValue}"); Logger.Info?.Print(logClass, message); @@ -76,5 +68,22 @@ namespace Ryujinx.Common { public T OldValue { get; } = oldValue; public T NewValue { get; } = newValue; + + public bool AreValuesEqual + { + get + { + if (OldValue == null && NewValue == null) + return true; + + if (OldValue == null && NewValue != null) + return false; + + if (OldValue != null && NewValue == null) + return false; + + return OldValue!.Equals(NewValue); + } + } } } -- 2.47.1 From 978d2c132b27a401997215a716a68b1583c407d7 Mon Sep 17 00:00:00 2001 From: jozz024 <74272560+jozz024@users.noreply.github.com> Date: Tue, 31 Dec 2024 22:45:52 -0600 Subject: [PATCH 265/722] add a keyboard shortcut for opening amiibo .bin files (#461) --- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml | 1 + src/Ryujinx/UI/Windows/MainWindow.axaml | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 2c07bd8ef..78848e89b 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -247,6 +247,7 @@ Header="{ext:Locale MenuBarActionsScanAmiiboBin}" Icon="{ext:Icon mdi-cube-scan}" IsVisible="{Binding CanScanAmiiboBinaries}" + InputGesture="Ctrl + B" IsEnabled="{Binding IsAmiiboBinRequested}" /> + -- 2.47.1 From 003a6d322beed205e9d068a7bf73f90f68833136 Mon Sep 17 00:00:00 2001 From: Daenorth Date: Wed, 1 Jan 2025 07:15:21 +0100 Subject: [PATCH 266/722] Update to no_NO Norwegian Translation (#475) Updated for time resync & auto graphics backend --- src/Ryujinx/Assets/locales.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index b3a7a51b8..6f22e7d06 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1235,7 +1235,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "자주 묻는 질문(FAQ) 및 안내", - "no_NO": "", + "no_NO": "Vanlige spørsmål og veiledninger", "pl_PL": "", "pt_BR": "", "ru_RU": "FAQ и Руководства", @@ -1460,7 +1460,7 @@ "it_IT": "Preferito", "ja_JP": "お気に入り", "ko_KR": "즐겨찾기", - "no_NO": "", + "no_NO": "Favoritter", "pl_PL": "Ulubione", "pt_BR": "Favorito", "ru_RU": "Избранное", @@ -2610,7 +2610,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "펌웨어 버전 : {0}", - "no_NO": "", + "no_NO": "Fastvareversjon: {0}", "pl_PL": "", "pt_BR": "Versão do firmware: {0}", "ru_RU": "Версия прошивки: {0}", @@ -3460,7 +3460,7 @@ "it_IT": "Corea", "ja_JP": "韓国", "ko_KR": "한국", - "no_NO": "", + "no_NO": "Koreansk", "pl_PL": "", "pt_BR": "Coreia", "ru_RU": "Корея", @@ -4010,7 +4010,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "PC 날짜와 시간에 동기화", - "no_NO": "", + "no_NO": "Resynkroniser til PC-dato og -klokkeslett", "pl_PL": "", "pt_BR": "", "ru_RU": "Повторная синхронизация с датой и временем на компьютере", @@ -15260,7 +15260,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "시스템 시간을 PC의 현재 날짜 및 시간과 일치하도록 다시 동기화합니다.\n\n이 설정은 활성 설정이 아니므로 여전히 동기화되지 않을 수 있으며, 이 경우 이 버튼을 다시 클릭하면 됩니다.", - "no_NO": "", + "no_NO": "Resynkroniser systemtiden slik at den samsvarer med PC-ens gjeldende dato og klokkeslett. \\Dette er ikke en aktiv innstilling, men den kan likevel komme ut av synkronisering; i så fall er det bare å klikke på denne knappen igjen.", "pl_PL": "", "pt_BR": "", "ru_RU": "Повторно синхронизирует системное время, чтобы оно соответствовало текущей дате и времени вашего компьютера.\n\nЭто не активная настройка, она все еще может рассинхронизироваться; в этом случае просто нажмите эту кнопку еще раз.", @@ -20535,7 +20535,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "Vulkan을 사용합니다.\nARM 맥에서 해당 플랫폼에서 잘 실행되는 게임을 플레이하는 경우 Metal 후단부를 사용합니다.", - "no_NO": "", + "no_NO": "Bruker Vulkan \nPå en ARM Mac, og når du spiller et spill som kjører bra under den, bruker du Metal-backend.", "pl_PL": "", "pt_BR": "", "ru_RU": "Использует Vulkan.\nНа Mac с ARM процессорами используется Metal, если игра с ним совместима и хорошо работает.", @@ -22598,4 +22598,4 @@ } } ] -} \ No newline at end of file +} -- 2.47.1 From 37c165e9fc79ab442d868bec40580797a80421c8 Mon Sep 17 00:00:00 2001 From: Otozinclus <58051309+Otozinclus@users.noreply.github.com> Date: Wed, 1 Jan 2025 07:18:17 +0100 Subject: [PATCH 267/722] Only delay shader translation on Metal (#480) This way the Arbitrary Shader Translation Delay hack will no longer affect shader loading when using Vulkan. --- .../Shader/DiskCache/ParallelDiskCacheLoader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 910e9aea0..eb0f72af1 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -367,7 +367,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { try { - if (_context.DirtyHacks.IsEnabled(DirtyHack.ShaderTranslationDelay)) + if (_context.Capabilities.Api == TargetApi.Metal && _context.DirtyHacks.IsEnabled(DirtyHack.ShaderTranslationDelay)) Thread.Sleep(_context.DirtyHacks[DirtyHack.ShaderTranslationDelay]); AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute); -- 2.47.1 From fd2b5a7fc1e60d2355f3aba488fef9138b67e3b4 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 1 Jan 2025 01:12:00 -0600 Subject: [PATCH 268/722] misc: Remove RendererHost AXAML --- src/Ryujinx/UI/Renderer/RendererHost.axaml | 12 ------------ .../{RendererHost.axaml.cs => RendererHost.cs} | 13 ++++++------- 2 files changed, 6 insertions(+), 19 deletions(-) delete mode 100644 src/Ryujinx/UI/Renderer/RendererHost.axaml rename src/Ryujinx/UI/Renderer/{RendererHost.axaml.cs => RendererHost.cs} (94%) diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml b/src/Ryujinx/UI/Renderer/RendererHost.axaml deleted file mode 100644 index e0b586b45..000000000 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml +++ /dev/null @@ -1,12 +0,0 @@ - - diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Ryujinx/UI/Renderer/RendererHost.cs similarity index 94% rename from src/Ryujinx/UI/Renderer/RendererHost.axaml.cs rename to src/Ryujinx/UI/Renderer/RendererHost.cs index fa9aec0c5..7dfec8d62 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.cs @@ -1,16 +1,15 @@ -using Avalonia; +using Avalonia; using Avalonia.Controls; -using Gommon; +using Avalonia.Media; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using System; -using System.Runtime.InteropServices; namespace Ryujinx.Ava.UI.Renderer { - public partial class RendererHost : UserControl, IDisposable + public class RendererHost : UserControl, IDisposable { public readonly EmbeddedWindow EmbeddedWindow; @@ -19,7 +18,8 @@ namespace Ryujinx.Ava.UI.Renderer public RendererHost() { - InitializeComponent(); + Focusable = true; + FlowDirection = FlowDirection.LeftToRight; EmbeddedWindow = ConfigurationState.Instance.Graphics.GraphicsBackend.Value switch { @@ -43,8 +43,6 @@ namespace Ryujinx.Ava.UI.Renderer public RendererHost(string titleId) { - InitializeComponent(); - switch (TitleIDs.SelectGraphicsBackend(titleId, ConfigurationState.Instance.Graphics.GraphicsBackend)) { case GraphicsBackend.OpenGl: @@ -109,3 +107,4 @@ namespace Ryujinx.Ava.UI.Renderer } } } + -- 2.47.1 From 391f57bdd20f6e89f2e5fae14e052ef5595f1896 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 1 Jan 2025 01:54:59 -0600 Subject: [PATCH 269/722] misc: Headless: Inherit main input config --- src/Ryujinx/Headless/HeadlessRyujinx.cs | 32 +++++++++++++++------ src/Ryujinx/Headless/Options.cs | 37 +++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index 3cb0afca3..c99e5409c 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -162,6 +162,11 @@ namespace Ryujinx.Headless } ReloadConfig(); + + if (option.InheritConfig) + { + option.InheritMainConfigInput(originalArgs, ConfigurationState.Instance); + } _virtualFileSystem = VirtualFileSystem.CreateInstance(); _libHacHorizonManager = new LibHacHorizonManager(); @@ -224,15 +229,7 @@ namespace Ryujinx.Headless _enableKeyboard = option.EnableKeyboard; _enableMouse = option.EnableMouse; - static void LoadPlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index) - { - InputConfig inputConfig = HandlePlayerConfiguration(inputProfileName, inputId, index); - if (inputConfig != null) - { - _inputConfiguration.Add(inputConfig); - } - } LoadPlayerConfiguration(option.InputProfile1Name, option.InputId1, PlayerIndex.Player1); LoadPlayerConfiguration(option.InputProfile2Name, option.InputId2, PlayerIndex.Player2); @@ -244,7 +241,6 @@ namespace Ryujinx.Headless LoadPlayerConfiguration(option.InputProfile8Name, option.InputId8, PlayerIndex.Player8); LoadPlayerConfiguration(option.InputProfileHandheldName, option.InputIdHandheld, PlayerIndex.Handheld); - if (_inputConfiguration.Count == 0) { return; @@ -306,6 +302,24 @@ namespace Ryujinx.Headless } _inputManager.Dispose(); + + return; + + void LoadPlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index) + { + if (index == PlayerIndex.Handheld && _inputConfiguration.Count > 0) + { + Logger.Info?.Print(LogClass.Configuration, "Skipping handheld configuration as there are already other players configured."); + return; + } + + InputConfig inputConfig = option.InheritedInputConfigs[index] ?? HandlePlayerConfiguration(inputProfileName, inputId, index); + + if (inputConfig != null) + { + _inputConfiguration.Add(inputConfig); + } + } } private static void SetupProgressHandler() diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index c0def95c1..11deea3a5 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -154,10 +154,39 @@ namespace Ryujinx.Headless return; bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey))); - - string OptionName(string propertyName) => - typeof(Options)!.GetProperty(propertyName)!.GetCustomAttribute()!.LongName; } + + public void InheritMainConfigInput(string[] originalArgs, ConfigurationState configurationState) + { + Dictionary indicesToProperties = new() + { + { PlayerIndex.Handheld, (nameof(InputIdHandheld), nameof(InputProfileHandheldName)) }, + { PlayerIndex.Player1, (nameof(InputId1), nameof(InputProfile1Name)) }, + { PlayerIndex.Player2, (nameof(InputId2), nameof(InputProfile2Name)) }, + { PlayerIndex.Player3, (nameof(InputId3), nameof(InputProfile3Name)) }, + { PlayerIndex.Player4, (nameof(InputId4), nameof(InputProfile4Name)) }, + { PlayerIndex.Player5, (nameof(InputId5), nameof(InputProfile5Name)) }, + { PlayerIndex.Player6, (nameof(InputId6), nameof(InputProfile6Name)) }, + { PlayerIndex.Player7, (nameof(InputId7), nameof(InputProfile7Name)) }, + { PlayerIndex.Player8, (nameof(InputId8), nameof(InputProfile8Name)) } + }; + + foreach ((PlayerIndex playerIndex, (string id, string profile)) in indicesToProperties) + { + if (NeedsOverride(id) && NeedsOverride(profile)) + { + configurationState.Hid.InputConfig.Value.FindFirst(x => x.PlayerIndex == playerIndex) + .IfPresent(ic => InheritedInputConfigs[playerIndex] = ic); + } + } + + return; + + bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey))); + } + + private static string OptionName(string propertyName) => + typeof(Options)!.GetProperty(propertyName)!.GetCustomAttribute()!.LongName; // General @@ -391,5 +420,7 @@ namespace Ryujinx.Headless [Value(0, MetaName = "input", HelpText = "Input to load.", Required = true)] public string InputPath { get; set; } + + public SafeDictionary InheritedInputConfigs = new(); } } -- 2.47.1 From 88d11d3d8dd07c3026eabcb3a35a4e535f72ea50 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 1 Jan 2025 02:14:59 -0600 Subject: [PATCH 270/722] misc: some cleanups and fix compile warnings --- src/Ryujinx/Headless/HeadlessRyujinx.cs | 2 +- src/Ryujinx/Headless/Options.cs | 10 ++++------ .../ViewModels/DownloadableContentManagerViewModel.cs | 6 +++--- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 6 +++++- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index c99e5409c..5730254f7 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -52,7 +52,7 @@ namespace Ryujinx.Headless // Make process DPI aware for proper window sizing on high-res screens. ForceDpiAware.Windows(); - Console.Title = $"Ryujinx Console {Program.Version} (Headless)"; + Console.Title = $"HeadlessRyujinx Console {Program.Version}"; if (OperatingSystem.IsMacOS() || OperatingSystem.IsLinux()) { diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index 11deea3a5..0d7e46285 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -171,13 +171,11 @@ namespace Ryujinx.Headless { PlayerIndex.Player8, (nameof(InputId8), nameof(InputProfile8Name)) } }; - foreach ((PlayerIndex playerIndex, (string id, string profile)) in indicesToProperties) + foreach ((PlayerIndex playerIndex, _) in indicesToProperties + .Where(it => NeedsOverride(it.Value.InputId) && NeedsOverride(it.Value.InputProfileName))) { - if (NeedsOverride(id) && NeedsOverride(profile)) - { - configurationState.Hid.InputConfig.Value.FindFirst(x => x.PlayerIndex == playerIndex) - .IfPresent(ic => InheritedInputConfigs[playerIndex] = ic); - } + configurationState.Hid.InputConfig.Value.FindFirst(x => x.PlayerIndex == playerIndex) + .IfPresent(ic => InheritedInputConfigs[playerIndex] = ic); } return; diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index 658568909..52f97cf02 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -106,9 +106,9 @@ namespace Ryujinx.Ava.UI.ViewModels // NOTE(jpr): this works around a bug where calling _views.Clear also clears SelectedDownloadableContents for // some reason. so we save the items here and add them back after var items = SelectedDownloadableContents.ToArray(); - - _views.Clear(); - _views.AddRange(view); + + Views.Clear(); + Views.AddRange(view); foreach (DownloadableContentModel item in items) { diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 6df1f76ad..b7a43ccaf 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -182,7 +182,11 @@ namespace Ryujinx.Ava.UI.ViewModels Applications.ToObservableChangeSet() .Filter(Filter) .Sort(GetComparer()) + .OnItemAdded(_ => OnPropertyChanged(nameof(AppsObservableList))) + .OnItemRemoved(_ => OnPropertyChanged(nameof(AppsObservableList))) +#pragma warning disable MVVMTK0034 // Event to update is fired below .Bind(out _appsObservableList) +#pragma warning restore MVVMTK0034 .AsObservableList(); _rendererWaitEvent = new AutoResetEvent(false); @@ -192,8 +196,8 @@ namespace Ryujinx.Ava.UI.ViewModels LoadConfigurableHotKeys(); Volume = ConfigurationState.Instance.System.AudioVolume; + CustomVSyncInterval = ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value; } - CustomVSyncInterval = ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value; } public void Initialize( -- 2.47.1 From f43442f774a4af8d1b41cae6dd93793f8f3f2069 Mon Sep 17 00:00:00 2001 From: WilliamWsyHK Date: Wed, 1 Jan 2025 16:15:14 +0800 Subject: [PATCH 271/722] Include Hack for XC2 JP Edition (#481) XC2 has 2 editions, one JP and one global. I own the JP version and suffered from the soft-lock, meanwhile the current hack only works for global edition, so PR is simply include JP edition from the hack. --- .../HOS/Services/Fs/FileSystemProxy/IStorage.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs index 3d197ac19..ad4cccc44 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs @@ -15,8 +15,10 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy { _baseStorage = SharedRef.CreateMove(ref baseStorage); } - - private const string Xc2TitleId = "0100e95004038000"; + + private const string Xc2JpTitleId = "0100f3400332c000"; + private const string Xc2GlobalTitleId = "0100e95004038000"; + private static bool IsXc2 => TitleIDs.CurrentApplication.Value.OrDefault() is Xc2GlobalTitleId or Xc2JpTitleId; [CommandCmif(0)] // Read(u64 offset, u64 length) -> buffer buffer @@ -39,7 +41,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseStorage.Get.Read((long)offset, new OutBuffer(region.Memory.Span), (long)size); - if (context.Device.DirtyHacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix) && TitleIDs.CurrentApplication.Value == Xc2TitleId) + if (context.Device.DirtyHacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix) && IsXc2) { // Add a load-bearing sleep to avoid XC2 softlock // https://web.archive.org/web/20240728045136/https://github.com/Ryujinx/Ryujinx/issues/2357 -- 2.47.1 From e956864697f2fed9591bb34dcf80f55afcfd0beb Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 1 Jan 2025 02:26:01 -0600 Subject: [PATCH 272/722] misc: Remove needless AsObservableList --- .../UI/ViewModels/MainWindowViewModel.cs | 77 +++++++++---------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index b7a43ccaf..1e2a29d21 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -125,43 +125,6 @@ namespace Ryujinx.Ava.UI.ViewModels private ApplicationData _listSelectedApplication; private ApplicationData _gridSelectedApplication; - public ApplicationData ListSelectedApplication - { - get => _listSelectedApplication; - set - { - _listSelectedApplication = value; - -#pragma warning disable MVVMTK0034 - if (_listSelectedApplication != null && _listAppContextMenu == null) - - ListAppContextMenu = new ApplicationContextMenu(); - else if (_listSelectedApplication == null && _listAppContextMenu != null) - ListAppContextMenu = null!; -#pragma warning restore MVVMTK0034 - - OnPropertyChanged(); - } - } - - public ApplicationData GridSelectedApplication - { - get => _gridSelectedApplication; - set - { - _gridSelectedApplication = value; - -#pragma warning disable MVVMTK0034 - if (_gridSelectedApplication != null && _gridAppContextMenu == null) - GridAppContextMenu = new ApplicationContextMenu(); - else if (_gridSelectedApplication == null && _gridAppContextMenu != null) - GridAppContextMenu = null!; -#pragma warning restore MVVMTK0034 - - OnPropertyChanged(); - } - } - // Key is Title ID public SafeDictionary LdnData = []; @@ -185,9 +148,8 @@ namespace Ryujinx.Ava.UI.ViewModels .OnItemAdded(_ => OnPropertyChanged(nameof(AppsObservableList))) .OnItemRemoved(_ => OnPropertyChanged(nameof(AppsObservableList))) #pragma warning disable MVVMTK0034 // Event to update is fired below - .Bind(out _appsObservableList) + .Bind(out _appsObservableList); #pragma warning restore MVVMTK0034 - .AsObservableList(); _rendererWaitEvent = new AutoResetEvent(false); @@ -335,6 +297,43 @@ namespace Ryujinx.Ava.UI.ViewModels OnPropertyChanged(nameof(ShowFirmwareStatus)); } } + + public ApplicationData ListSelectedApplication + { + get => _listSelectedApplication; + set + { + _listSelectedApplication = value; + +#pragma warning disable MVVMTK0034 + if (_listSelectedApplication != null && _listAppContextMenu == null) + + ListAppContextMenu = new ApplicationContextMenu(); + else if (_listSelectedApplication == null && _listAppContextMenu != null) + ListAppContextMenu = null!; +#pragma warning restore MVVMTK0034 + + OnPropertyChanged(); + } + } + + public ApplicationData GridSelectedApplication + { + get => _gridSelectedApplication; + set + { + _gridSelectedApplication = value; + +#pragma warning disable MVVMTK0034 + if (_gridSelectedApplication != null && _gridAppContextMenu == null) + GridAppContextMenu = new ApplicationContextMenu(); + else if (_gridSelectedApplication == null && _gridAppContextMenu != null) + GridAppContextMenu = null!; +#pragma warning restore MVVMTK0034 + + OnPropertyChanged(); + } + } public ApplicationData SelectedApplication { -- 2.47.1 From 9bb50fc6dd8dba7a03f5f4c31b63f41943372ff6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 3 Jan 2025 02:36:31 -0600 Subject: [PATCH 273/722] misc: improve unpacking error & add nullability to SelectedIcon --- src/Ryujinx.Common/Configuration/DirtyHack.cs | 2 +- src/Ryujinx/AppHost.cs | 2 -- src/Ryujinx/Assets/locales.json | 2 +- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 14 ++++++-------- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx.Common/Configuration/DirtyHack.cs b/src/Ryujinx.Common/Configuration/DirtyHack.cs index 6e21fe44e..9ab9a26a5 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHack.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHack.cs @@ -25,7 +25,7 @@ namespace Ryujinx.Common.Configuration { var unpackedFields = packedHack.UnpackBitFields(PackedFormat); if (unpackedFields is not [var hack, var value]) - throw new ArgumentException(nameof(packedHack)); + throw new Exception("The unpack operation on the integer resulted in an invalid unpacked result."); return new EnabledDirtyHack((DirtyHack)hack, (int)value); } diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index c728ee9c9..a35a79e86 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -3,7 +3,6 @@ using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input; using Avalonia.Threading; -using Gommon; using LibHac.Common; using LibHac.Ns; using LibHac.Tools.FsSystem; @@ -43,7 +42,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.Input; using Ryujinx.Input.HLE; -using Silk.NET.Vulkan; using SkiaSharp; using SPB.Graphics.Vulkan; using System; diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 6f22e7d06..a04bd0538 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -22598,4 +22598,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 1e2a29d21..e11d855a6 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -80,7 +80,9 @@ namespace Ryujinx.Ava.UI.ViewModels [ObservableProperty] private Brush _progressBarForegroundColor; [ObservableProperty] private Brush _progressBarBackgroundColor; [ObservableProperty] private Brush _vSyncModeColor; - [ObservableProperty] private byte[] _selectedIcon; + #nullable enable + [ObservableProperty] private byte[]? _selectedIcon; + #nullable disable [ObservableProperty] private int _statusBarProgressMaximum; [ObservableProperty] private int _statusBarProgressValue; [ObservableProperty] private string _statusBarProgressStatusText; @@ -1754,7 +1756,7 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public async void ProcessTrimResult(String filename, Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome operationOutcome) + public async void ProcessTrimResult(String filename, XCIFileTrimmer.OperationOutcome operationOutcome) { string notifyUser = operationOutcome.ToLocalisedText(); @@ -1769,12 +1771,8 @@ namespace Ryujinx.Ava.UI.ViewModels { switch (operationOutcome) { - case Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome.Successful: - if (Avalonia.Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) - { - if (desktop.MainWindow is MainWindow mainWindow) - mainWindow.LoadApplications(); - } + case XCIFileTrimmer.OperationOutcome.Successful: + RyujinxApp.MainWindow.LoadApplications(); break; } } -- 2.47.1 From 3e5b2bda38678ecad8db2bcef203c5af02d7ab59 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 3 Jan 2025 22:25:21 -0600 Subject: [PATCH 274/722] UI: RPC: Goat Simulator 3 asset image --- src/Ryujinx.Common/TitleIDs.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Ryujinx.Common/TitleIDs.cs b/src/Ryujinx.Common/TitleIDs.cs index ab6cfeb03..43a1f2393 100644 --- a/src/Ryujinx.Common/TitleIDs.cs +++ b/src/Ryujinx.Common/TitleIDs.cs @@ -171,6 +171,7 @@ namespace Ryujinx.Common "0100b41013c82000", // Cruis'n Blast "01001b300b9be000", // Diablo III: Eternal Collection "01008c8012920000", // Dying Light Platinum Edition + "01001cc01b2d4000", // Goat Simulator 3 "010073c01af34000", // LEGO Horizon Adventures "0100770008dd8000", // Monster Hunter Generations Ultimate "0100b04011742000", // Monster Hunter Rise -- 2.47.1 From c8d598d5acb94886c56cadf23afc9d588c558864 Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Mon, 16 Sep 2024 13:07:31 +0000 Subject: [PATCH 275/722] use UnmanagedCallersOnly for delegates --- .../Instructions/InstEmitSimdArithmetic.cs | 20 +- .../Instructions/InstEmitSimdArithmetic32.cs | 4 +- .../Instructions/InstEmitSimdCmp.cs | 4 +- .../Instructions/InstEmitSimdCvt.cs | 10 +- .../Instructions/InstEmitSimdCvt32.cs | 14 +- .../Instructions/InstEmitSimdHelper.cs | 16 +- src/ARMeilleure/Instructions/MathHelper.cs | 75 ++ .../Instructions/NativeInterface.cs | 33 +- src/ARMeilleure/Instructions/SoftFallback.cs | 44 ++ src/ARMeilleure/Instructions/SoftFloat.cs | 381 +++++++--- src/ARMeilleure/Translation/DelegateInfo.cs | 10 +- src/ARMeilleure/Translation/Delegates.cs | 705 +++++------------- src/ARMeilleure/Translation/EmitterContext.cs | 2 +- src/ARMeilleure/Translation/PTC/Ptc.cs | 4 +- 14 files changed, 652 insertions(+), 670 deletions(-) create mode 100644 src/ARMeilleure/Instructions/MathHelper.cs diff --git a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs index 13d9fac68..694633f97 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs @@ -406,7 +406,7 @@ namespace ARMeilleure.Instructions { Operand res = EmitSoftFloatCall(context, nameof(SoftFloat32.FPSub), op1, op2); - return EmitUnaryMathCall(context, nameof(Math.Abs), res); + return EmitUnaryMathCall(context, nameof(MathHelper.Abs), res); }); } } @@ -451,7 +451,7 @@ namespace ARMeilleure.Instructions { Operand res = EmitSoftFloatCall(context, nameof(SoftFloat32.FPSub), op1, op2); - return EmitUnaryMathCall(context, nameof(Math.Abs), res); + return EmitUnaryMathCall(context, nameof(MathHelper.Abs), res); }); } } @@ -483,7 +483,7 @@ namespace ARMeilleure.Instructions { EmitScalarUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(Math.Abs), op1); + return EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1); }); } } @@ -522,7 +522,7 @@ namespace ARMeilleure.Instructions { EmitVectorUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(Math.Abs), op1); + return EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1); }); } } @@ -2246,7 +2246,7 @@ namespace ARMeilleure.Instructions { EmitScalarUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(Math.Floor), op1); + return EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1); }); } } @@ -2265,7 +2265,7 @@ namespace ARMeilleure.Instructions { EmitVectorUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(Math.Floor), op1); + return EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1); }); } } @@ -2322,7 +2322,7 @@ namespace ARMeilleure.Instructions { EmitScalarUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(Math.Ceiling), op1); + return EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1); }); } } @@ -2341,7 +2341,7 @@ namespace ARMeilleure.Instructions { EmitVectorUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(Math.Ceiling), op1); + return EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1); }); } } @@ -2390,7 +2390,7 @@ namespace ARMeilleure.Instructions { EmitScalarUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(Math.Truncate), op1); + return EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1); }); } } @@ -2409,7 +2409,7 @@ namespace ARMeilleure.Instructions { EmitVectorUnaryOpF(context, (op1) => { - return EmitUnaryMathCall(context, nameof(Math.Truncate), op1); + return EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1); }); } } diff --git a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs index c807fc858..284f3f576 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs @@ -43,7 +43,7 @@ namespace ARMeilleure.Instructions } else { - EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Abs), op1)); + EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1)); } } @@ -66,7 +66,7 @@ namespace ARMeilleure.Instructions } else { - EmitVectorUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Abs), op1)); + EmitVectorUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1)); } } else diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs b/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs index aab677869..8fcb06286 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs @@ -726,8 +726,8 @@ namespace ARMeilleure.Instructions if (absolute) { - ne = EmitUnaryMathCall(context, nameof(Math.Abs), ne); - me = EmitUnaryMathCall(context, nameof(Math.Abs), me); + ne = EmitUnaryMathCall(context, nameof(MathHelper.Abs), ne); + me = EmitUnaryMathCall(context, nameof(MathHelper.Abs), me); } Operand e = EmitSoftFloatCall(context, name, ne, me); diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs b/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs index 3363a7c77..a5d4744f7 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs @@ -333,7 +333,7 @@ namespace ARMeilleure.Instructions } else { - EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1)); + EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1)); } } @@ -349,7 +349,7 @@ namespace ARMeilleure.Instructions } else { - EmitFcvt(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1), signed: true, scalar: false); + EmitFcvt(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1), signed: true, scalar: false); } } @@ -365,7 +365,7 @@ namespace ARMeilleure.Instructions } else { - EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1)); + EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1)); } } @@ -538,7 +538,7 @@ namespace ARMeilleure.Instructions } else { - EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Ceiling), op1)); + EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1)); } } @@ -554,7 +554,7 @@ namespace ARMeilleure.Instructions } else { - EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Ceiling), op1)); + EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1)); } } diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs b/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs index 8eef6b14d..216726df9 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs @@ -357,10 +357,10 @@ namespace ARMeilleure.Instructions toConvert = EmitRoundMathCall(context, MidpointRounding.ToEven, toConvert); break; case 0b10: // Towards positive infinity - toConvert = EmitUnaryMathCall(context, nameof(Math.Ceiling), toConvert); + toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), toConvert); break; case 0b11: // Towards negative infinity - toConvert = EmitUnaryMathCall(context, nameof(Math.Floor), toConvert); + toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Floor), toConvert); break; } @@ -494,10 +494,10 @@ namespace ARMeilleure.Instructions toConvert = EmitRoundMathCall(context, MidpointRounding.ToEven, toConvert); break; case 0b10: // Towards positive infinity - toConvert = EmitUnaryMathCall(context, nameof(Math.Ceiling), toConvert); + toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), toConvert); break; case 0b11: // Towards negative infinity - toConvert = EmitUnaryMathCall(context, nameof(Math.Floor), toConvert); + toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Floor), toConvert); break; } @@ -534,7 +534,7 @@ namespace ARMeilleure.Instructions } else { - EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(Math.Floor), m)); + EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), m)); } } @@ -574,7 +574,7 @@ namespace ARMeilleure.Instructions } else { - EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(Math.Ceiling), m)); + EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), m)); } } @@ -613,7 +613,7 @@ namespace ARMeilleure.Instructions } else { - EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Truncate), op1)); + EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1)); } } diff --git a/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs b/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs index abd0d9acc..634e5c18b 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs @@ -460,8 +460,8 @@ namespace ARMeilleure.Instructions IOpCodeSimd op = (IOpCodeSimd)context.CurrOp; MethodInfo info = (op.Size & 1) == 0 - ? typeof(MathF).GetMethod(name, new Type[] { typeof(float) }) - : typeof(Math).GetMethod(name, new Type[] { typeof(double) }); + ? typeof(MathHelperF).GetMethod(name, new Type[] { typeof(float) }) + : typeof(MathHelper).GetMethod(name, new Type[] { typeof(double) }); return context.Call(info, n); } @@ -470,11 +470,11 @@ namespace ARMeilleure.Instructions { IOpCodeSimd op = (IOpCodeSimd)context.CurrOp; - string name = nameof(Math.Round); + string name = nameof(MathHelper.Round); MethodInfo info = (op.Size & 1) == 0 - ? typeof(MathF).GetMethod(name, new Type[] { typeof(float), typeof(MidpointRounding) }) - : typeof(Math).GetMethod(name, new Type[] { typeof(double), typeof(MidpointRounding) }); + ? typeof(MathHelperF).GetMethod(name, new Type[] { typeof(float), typeof(int) }) + : typeof(MathHelper).GetMethod(name, new Type[] { typeof(double), typeof(int) }); return context.Call(info, n, Const((int)roundMode)); } @@ -510,16 +510,16 @@ namespace ARMeilleure.Instructions context.MarkLabel(lbl1); context.BranchIf(lbl2, rMode, rP, Comparison.NotEqual); - context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Ceiling), op)); + context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op)); context.Branch(lblEnd); context.MarkLabel(lbl2); context.BranchIf(lbl3, rMode, rM, Comparison.NotEqual); - context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Floor), op)); + context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Floor), op)); context.Branch(lblEnd); context.MarkLabel(lbl3); - context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Truncate), op)); + context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op)); context.Branch(lblEnd); context.MarkLabel(lblEnd); diff --git a/src/ARMeilleure/Instructions/MathHelper.cs b/src/ARMeilleure/Instructions/MathHelper.cs new file mode 100644 index 000000000..acf9a5028 --- /dev/null +++ b/src/ARMeilleure/Instructions/MathHelper.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace ARMeilleure.Instructions +{ + static class MathHelper + { + [UnmanagedCallersOnly] + public static double Abs(double value) + { + return Math.Abs(value); + } + + [UnmanagedCallersOnly] + public static double Ceiling(double value) + { + return Math.Ceiling(value); + } + + [UnmanagedCallersOnly] + public static double Floor(double value) + { + return Math.Floor(value); + } + + [UnmanagedCallersOnly] + public static double Round(double value, int mode) + { + return Math.Round(value, (MidpointRounding)mode); + } + + [UnmanagedCallersOnly] + public static double Truncate(double value) + { + return Math.Truncate(value); + } + } + + static class MathHelperF + { + [UnmanagedCallersOnly] + public static float Abs(float value) + { + return MathF.Abs(value); + } + + [UnmanagedCallersOnly] + public static float Ceiling(float value) + { + return MathF.Ceiling(value); + } + + [UnmanagedCallersOnly] + public static float Floor(float value) + { + return MathF.Floor(value); + } + + [UnmanagedCallersOnly] + public static float Round(float value, int mode) + { + return MathF.Round(value, (MidpointRounding)mode); + } + + [UnmanagedCallersOnly] + public static float Truncate(float value) + { + return MathF.Truncate(value); + } + } +} diff --git a/src/ARMeilleure/Instructions/NativeInterface.cs b/src/ARMeilleure/Instructions/NativeInterface.cs index 0cd3754f7..9d6279613 100644 --- a/src/ARMeilleure/Instructions/NativeInterface.cs +++ b/src/ARMeilleure/Instructions/NativeInterface.cs @@ -2,6 +2,7 @@ using ARMeilleure.Memory; using ARMeilleure.State; using ARMeilleure.Translation; using System; +using System.Runtime.InteropServices; namespace ARMeilleure.Instructions { @@ -34,6 +35,7 @@ namespace ARMeilleure.Instructions Context = null; } + [UnmanagedCallersOnly] public static void Break(ulong address, int imm) { Statistics.PauseTimer(); @@ -43,6 +45,7 @@ namespace ARMeilleure.Instructions Statistics.ResumeTimer(); } + [UnmanagedCallersOnly] public static void SupervisorCall(ulong address, int imm) { Statistics.PauseTimer(); @@ -52,6 +55,7 @@ namespace ARMeilleure.Instructions Statistics.ResumeTimer(); } + [UnmanagedCallersOnly] public static void Undefined(ulong address, int opCode) { Statistics.PauseTimer(); @@ -62,26 +66,31 @@ namespace ARMeilleure.Instructions } #region "System registers" + [UnmanagedCallersOnly] public static ulong GetCtrEl0() { return GetContext().CtrEl0; } + [UnmanagedCallersOnly] public static ulong GetDczidEl0() { return GetContext().DczidEl0; } + [UnmanagedCallersOnly] public static ulong GetCntfrqEl0() { return GetContext().CntfrqEl0; } + [UnmanagedCallersOnly] public static ulong GetCntpctEl0() { return GetContext().CntpctEl0; } + [UnmanagedCallersOnly] public static ulong GetCntvctEl0() { return GetContext().CntvctEl0; @@ -89,26 +98,31 @@ namespace ARMeilleure.Instructions #endregion #region "Read" + [UnmanagedCallersOnly] public static byte ReadByte(ulong address) { return GetMemoryManager().ReadGuest(address); } + [UnmanagedCallersOnly] public static ushort ReadUInt16(ulong address) { return GetMemoryManager().ReadGuest(address); } + [UnmanagedCallersOnly] public static uint ReadUInt32(ulong address) { return GetMemoryManager().ReadGuest(address); } + [UnmanagedCallersOnly] public static ulong ReadUInt64(ulong address) { return GetMemoryManager().ReadGuest(address); } + [UnmanagedCallersOnly] public static V128 ReadVector128(ulong address) { return GetMemoryManager().ReadGuest(address); @@ -116,47 +130,56 @@ namespace ARMeilleure.Instructions #endregion #region "Write" + [UnmanagedCallersOnly] public static void WriteByte(ulong address, byte value) { GetMemoryManager().WriteGuest(address, value); } + [UnmanagedCallersOnly] public static void WriteUInt16(ulong address, ushort value) { GetMemoryManager().WriteGuest(address, value); } + [UnmanagedCallersOnly] public static void WriteUInt32(ulong address, uint value) { GetMemoryManager().WriteGuest(address, value); } + [UnmanagedCallersOnly] public static void WriteUInt64(ulong address, ulong value) { GetMemoryManager().WriteGuest(address, value); } + [UnmanagedCallersOnly] public static void WriteVector128(ulong address, V128 value) { GetMemoryManager().WriteGuest(address, value); } #endregion + [UnmanagedCallersOnly] public static void EnqueueForRejit(ulong address) { Context.Translator.EnqueueForRejit(address, GetContext().ExecutionMode); } - public static void SignalMemoryTracking(ulong address, ulong size, bool write) + [UnmanagedCallersOnly] + public static void SignalMemoryTracking(ulong address, ulong size, byte write) { - GetMemoryManager().SignalMemoryTracking(address, size, write); + GetMemoryManager().SignalMemoryTracking(address, size, write == 1); } + [UnmanagedCallersOnly] public static void ThrowInvalidMemoryAccess(ulong address) { throw new InvalidAccessException(address); } + [UnmanagedCallersOnly] public static ulong GetFunctionAddress(ulong address) { TranslatedFunction function = Context.Translator.GetOrTranslate(address, GetContext().ExecutionMode); @@ -164,12 +187,14 @@ namespace ARMeilleure.Instructions return (ulong)function.FuncPointer.ToInt64(); } + [UnmanagedCallersOnly] public static void InvalidateCacheLine(ulong address) { Context.Translator.InvalidateJitCacheRegion(address, InstEmit.DczSizeInBytes); } - public static bool CheckSynchronization() + [UnmanagedCallersOnly] + public static byte CheckSynchronization() { Statistics.PauseTimer(); @@ -179,7 +204,7 @@ namespace ARMeilleure.Instructions Statistics.ResumeTimer(); - return context.Running; + return (byte)(context.Running ? 1 : 0); } public static ExecutionContext GetContext() diff --git a/src/ARMeilleure/Instructions/SoftFallback.cs b/src/ARMeilleure/Instructions/SoftFallback.cs index 899326c4b..178be6f79 100644 --- a/src/ARMeilleure/Instructions/SoftFallback.cs +++ b/src/ARMeilleure/Instructions/SoftFallback.cs @@ -1,11 +1,13 @@ using ARMeilleure.State; using System; +using System.Runtime.InteropServices; namespace ARMeilleure.Instructions { static class SoftFallback { #region "ShrImm64" + [UnmanagedCallersOnly] public static long SignedShrImm64(long value, long roundConst, int shift) { if (roundConst == 0L) @@ -48,6 +50,7 @@ namespace ARMeilleure.Instructions } } + [UnmanagedCallersOnly] public static ulong UnsignedShrImm64(ulong value, long roundConst, int shift) { if (roundConst == 0L) @@ -92,6 +95,7 @@ namespace ARMeilleure.Instructions #endregion #region "Saturation" + [UnmanagedCallersOnly] public static int SatF32ToS32(float value) { if (float.IsNaN(value)) @@ -103,6 +107,7 @@ namespace ARMeilleure.Instructions value <= int.MinValue ? int.MinValue : (int)value; } + [UnmanagedCallersOnly] public static long SatF32ToS64(float value) { if (float.IsNaN(value)) @@ -114,6 +119,7 @@ namespace ARMeilleure.Instructions value <= long.MinValue ? long.MinValue : (long)value; } + [UnmanagedCallersOnly] public static uint SatF32ToU32(float value) { if (float.IsNaN(value)) @@ -125,6 +131,7 @@ namespace ARMeilleure.Instructions value <= uint.MinValue ? uint.MinValue : (uint)value; } + [UnmanagedCallersOnly] public static ulong SatF32ToU64(float value) { if (float.IsNaN(value)) @@ -136,6 +143,7 @@ namespace ARMeilleure.Instructions value <= ulong.MinValue ? ulong.MinValue : (ulong)value; } + [UnmanagedCallersOnly] public static int SatF64ToS32(double value) { if (double.IsNaN(value)) @@ -147,6 +155,7 @@ namespace ARMeilleure.Instructions value <= int.MinValue ? int.MinValue : (int)value; } + [UnmanagedCallersOnly] public static long SatF64ToS64(double value) { if (double.IsNaN(value)) @@ -158,6 +167,7 @@ namespace ARMeilleure.Instructions value <= long.MinValue ? long.MinValue : (long)value; } + [UnmanagedCallersOnly] public static uint SatF64ToU32(double value) { if (double.IsNaN(value)) @@ -169,6 +179,7 @@ namespace ARMeilleure.Instructions value <= uint.MinValue ? uint.MinValue : (uint)value; } + [UnmanagedCallersOnly] public static ulong SatF64ToU64(double value) { if (double.IsNaN(value)) @@ -182,6 +193,7 @@ namespace ARMeilleure.Instructions #endregion #region "Count" + [UnmanagedCallersOnly] public static ulong CountLeadingSigns(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.). { value ^= value >> 1; @@ -201,6 +213,7 @@ namespace ARMeilleure.Instructions private static ReadOnlySpan ClzNibbleTbl => new byte[] { 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; + [UnmanagedCallersOnly] public static ulong CountLeadingZeros(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.). { if (value == 0ul) @@ -224,41 +237,49 @@ namespace ARMeilleure.Instructions #endregion #region "Table" + [UnmanagedCallersOnly] public static V128 Tbl1(V128 vector, int bytes, V128 tb0) { return TblOrTbx(default, vector, bytes, tb0); } + [UnmanagedCallersOnly] public static V128 Tbl2(V128 vector, int bytes, V128 tb0, V128 tb1) { return TblOrTbx(default, vector, bytes, tb0, tb1); } + [UnmanagedCallersOnly] public static V128 Tbl3(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2) { return TblOrTbx(default, vector, bytes, tb0, tb1, tb2); } + [UnmanagedCallersOnly] public static V128 Tbl4(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3) { return TblOrTbx(default, vector, bytes, tb0, tb1, tb2, tb3); } + [UnmanagedCallersOnly] public static V128 Tbx1(V128 dest, V128 vector, int bytes, V128 tb0) { return TblOrTbx(dest, vector, bytes, tb0); } + [UnmanagedCallersOnly] public static V128 Tbx2(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1) { return TblOrTbx(dest, vector, bytes, tb0, tb1); } + [UnmanagedCallersOnly] public static V128 Tbx3(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2) { return TblOrTbx(dest, vector, bytes, tb0, tb1, tb2); } + [UnmanagedCallersOnly] public static V128 Tbx4(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3) { return TblOrTbx(dest, vector, bytes, tb0, tb1, tb2, tb3); @@ -300,14 +321,22 @@ namespace ARMeilleure.Instructions private const uint Crc32RevPoly = 0xedb88320; private const uint Crc32cRevPoly = 0x82f63b78; + [UnmanagedCallersOnly] public static uint Crc32b(uint crc, byte value) => Crc32(crc, Crc32RevPoly, value); + [UnmanagedCallersOnly] public static uint Crc32h(uint crc, ushort value) => Crc32h(crc, Crc32RevPoly, value); + [UnmanagedCallersOnly] public static uint Crc32w(uint crc, uint value) => Crc32w(crc, Crc32RevPoly, value); + [UnmanagedCallersOnly] public static uint Crc32x(uint crc, ulong value) => Crc32x(crc, Crc32RevPoly, value); + [UnmanagedCallersOnly] public static uint Crc32cb(uint crc, byte value) => Crc32(crc, Crc32cRevPoly, value); + [UnmanagedCallersOnly] public static uint Crc32ch(uint crc, ushort value) => Crc32h(crc, Crc32cRevPoly, value); + [UnmanagedCallersOnly] public static uint Crc32cw(uint crc, uint value) => Crc32w(crc, Crc32cRevPoly, value); + [UnmanagedCallersOnly] public static uint Crc32cx(uint crc, ulong value) => Crc32x(crc, Crc32cRevPoly, value); private static uint Crc32h(uint crc, uint poly, ushort val) @@ -358,21 +387,25 @@ namespace ARMeilleure.Instructions #endregion #region "Aes" + [UnmanagedCallersOnly] public static V128 Decrypt(V128 value, V128 roundKey) { return CryptoHelper.AesInvSubBytes(CryptoHelper.AesInvShiftRows(value ^ roundKey)); } + [UnmanagedCallersOnly] public static V128 Encrypt(V128 value, V128 roundKey) { return CryptoHelper.AesSubBytes(CryptoHelper.AesShiftRows(value ^ roundKey)); } + [UnmanagedCallersOnly] public static V128 InverseMixColumns(V128 value) { return CryptoHelper.AesInvMixColumns(value); } + [UnmanagedCallersOnly] public static V128 MixColumns(V128 value) { return CryptoHelper.AesMixColumns(value); @@ -380,6 +413,7 @@ namespace ARMeilleure.Instructions #endregion #region "Sha1" + [UnmanagedCallersOnly] public static V128 HashChoose(V128 hash_abcd, uint hash_e, V128 wk) { for (int e = 0; e <= 3; e++) @@ -400,11 +434,13 @@ namespace ARMeilleure.Instructions return hash_abcd; } + [UnmanagedCallersOnly] public static uint FixedRotate(uint hash_e) { return hash_e.Rol(30); } + [UnmanagedCallersOnly] public static V128 HashMajority(V128 hash_abcd, uint hash_e, V128 wk) { for (int e = 0; e <= 3; e++) @@ -425,6 +461,7 @@ namespace ARMeilleure.Instructions return hash_abcd; } + [UnmanagedCallersOnly] public static V128 HashParity(V128 hash_abcd, uint hash_e, V128 wk) { for (int e = 0; e <= 3; e++) @@ -445,6 +482,7 @@ namespace ARMeilleure.Instructions return hash_abcd; } + [UnmanagedCallersOnly] public static V128 Sha1SchedulePart1(V128 w0_3, V128 w4_7, V128 w8_11) { ulong t2 = w4_7.Extract(0); @@ -455,6 +493,7 @@ namespace ARMeilleure.Instructions return result ^ (w0_3 ^ w8_11); } + [UnmanagedCallersOnly] public static V128 Sha1SchedulePart2(V128 tw0_3, V128 w12_15) { V128 t = tw0_3 ^ (w12_15 >> 32); @@ -499,16 +538,19 @@ namespace ARMeilleure.Instructions #endregion #region "Sha256" + [UnmanagedCallersOnly] public static V128 HashLower(V128 hash_abcd, V128 hash_efgh, V128 wk) { return Sha256Hash(hash_abcd, hash_efgh, wk, part1: true); } + [UnmanagedCallersOnly] public static V128 HashUpper(V128 hash_abcd, V128 hash_efgh, V128 wk) { return Sha256Hash(hash_abcd, hash_efgh, wk, part1: false); } + [UnmanagedCallersOnly] public static V128 Sha256SchedulePart1(V128 w0_3, V128 w4_7) { V128 result = new(); @@ -527,6 +569,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static V128 Sha256SchedulePart2(V128 w0_3, V128 w8_11, V128 w12_15) { V128 result = new(); @@ -628,6 +671,7 @@ namespace ARMeilleure.Instructions } #endregion + [UnmanagedCallersOnly] public static V128 PolynomialMult64_128(ulong op1, ulong op2) { V128 result = V128.Zero; diff --git a/src/ARMeilleure/Instructions/SoftFloat.cs b/src/ARMeilleure/Instructions/SoftFloat.cs index a67349e6e..7895ca1dc 100644 --- a/src/ARMeilleure/Instructions/SoftFloat.cs +++ b/src/ARMeilleure/Instructions/SoftFloat.cs @@ -1,6 +1,7 @@ using ARMeilleure.State; using System; using System.Diagnostics; +using System.Runtime.InteropServices; namespace ARMeilleure.Instructions { @@ -312,6 +313,7 @@ namespace ARMeilleure.Instructions static class SoftFloat16_32 { + [UnmanagedCallersOnly] public static float FPConvert(ushort valueBits) { ExecutionContext context = NativeInterface.GetContext(); @@ -487,6 +489,7 @@ namespace ARMeilleure.Instructions static class SoftFloat16_64 { + [UnmanagedCallersOnly] public static double FPConvert(ushort valueBits) { ExecutionContext context = NativeInterface.GetContext(); @@ -662,6 +665,7 @@ namespace ARMeilleure.Instructions static class SoftFloat32_16 { + [UnmanagedCallersOnly] public static ushort FPConvert(float value) { ExecutionContext context = NativeInterface.GetContext(); @@ -781,12 +785,19 @@ namespace ARMeilleure.Instructions static class SoftFloat32 { + [UnmanagedCallersOnly] public static float FPAdd(float value1, float value2) { - return FPAddFpscr(value1, value2, false); + return FPAddFpscrImpl(value1, value2, false); } - public static float FPAddFpscr(float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPAddFpscr(float value1, float value2, byte standardFpscr) + { + return FPAddFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static float FPAddFpscrImpl(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -837,7 +848,8 @@ namespace ARMeilleure.Instructions return result; } - public static int FPCompare(float value1, float value2, bool signalNaNs) + [UnmanagedCallersOnly] + public static int FPCompare(float value1, float value2, byte signalNaNs) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = context.Fpcr; @@ -851,7 +863,7 @@ namespace ARMeilleure.Instructions { result = 0b0011; - if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs) + if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs == 1) { SoftFloat.FPProcessException(FPException.InvalidOp, context, fpcr); } @@ -875,12 +887,13 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPCompareEQ(float value1, float value2) { - return FPCompareEQFpscr(value1, value2, false); + return FPCompareEQFpscrImpl(value1, value2, false); } - public static float FPCompareEQFpscr(float value1, float value2, bool standardFpscr) + private static float FPCompareEQFpscrImpl(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -907,12 +920,25 @@ namespace ARMeilleure.Instructions return result; } - public static float FPCompareGE(float value1, float value2) + [UnmanagedCallersOnly] + public static float FPCompareEQFpscr(float value1, float value2, byte standardFpscr) { - return FPCompareGEFpscr(value1, value2, false); + return FPCompareEQFpscrImpl(value1, value2, standardFpscr == 1); } - public static float FPCompareGEFpscr(float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPCompareGE(float value1, float value2) + { + return FPCompareGEFpscrImpl(value1, value2, false); + } + + [UnmanagedCallersOnly] + public static float FPCompareGEFpscr(float value1, float value2, byte standardFpscr) + { + return FPCompareGEFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static float FPCompareGEFpscrImpl(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -936,12 +962,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPCompareGT(float value1, float value2) { - return FPCompareGTFpscr(value1, value2, false); + return FPCompareGTFpscrImpl(value1, value2, false); } - public static float FPCompareGTFpscr(float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPCompareGTFpscr(float value1, float value2, byte standardFpscr) + { + return FPCompareGTFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static float FPCompareGTFpscrImpl(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -965,26 +998,31 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPCompareLE(float value1, float value2) { - return FPCompareGE(value2, value1); + return FPCompareGEFpscrImpl(value2, value1, false); } + [UnmanagedCallersOnly] public static float FPCompareLT(float value1, float value2) { - return FPCompareGT(value2, value1); + return FPCompareGTFpscrImpl(value2, value1, false); } - public static float FPCompareLEFpscr(float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPCompareLEFpscr(float value1, float value2, byte standardFpscr) { - return FPCompareGEFpscr(value2, value1, standardFpscr); + return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1); } - public static float FPCompareLTFpscr(float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPCompareLTFpscr(float value1, float value2, byte standardFpscr) { - return FPCompareGTFpscr(value2, value1, standardFpscr); + return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1); } + [UnmanagedCallersOnly] public static float FPDiv(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1037,12 +1075,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPMax(float value1, float value2) { - return FPMaxFpscr(value1, value2, false); + return FPMaxFpscrImpl(value1, value2, false); } - public static float FPMaxFpscr(float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPMaxFpscr(float value1, float value2, byte standardFpscr) + { + return FPMaxFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static float FPMaxFpscrImpl(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1103,12 +1148,13 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPMaxNum(float value1, float value2) { - return FPMaxNumFpscr(value1, value2, false); + return FPMaxNumFpscrImpl(value1, value2, false); } - public static float FPMaxNumFpscr(float value1, float value2, bool standardFpscr) + private static float FPMaxNumFpscrImpl(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1125,15 +1171,28 @@ namespace ARMeilleure.Instructions value2 = FPInfinity(true); } - return FPMaxFpscr(value1, value2, standardFpscr); + return FPMaxFpscrImpl(value1, value2, standardFpscr); } + [UnmanagedCallersOnly] + public static float FPMaxNumFpscr(float value1, float value2, byte standardFpscr) + { + return FPMaxNumFpscrImpl(value1, value2, standardFpscr == 1); + } + + [UnmanagedCallersOnly] public static float FPMin(float value1, float value2) { - return FPMinFpscr(value1, value2, false); + return FPMinFpscrImpl(value1, value2, false); } - public static float FPMinFpscr(float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPMinFpscr(float value1, float value2, byte standardFpscr) + { + return FPMinFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static float FPMinFpscrImpl(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1194,12 +1253,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPMinNum(float value1, float value2) { - return FPMinNumFpscr(value1, value2, false); + return FPMinNumFpscrImpl(value1, value2, false); } - public static float FPMinNumFpscr(float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPMinNumFpscr(float value1, float value2, byte standardFpscr) + { + return FPMinNumFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static float FPMinNumFpscrImpl(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1216,15 +1282,22 @@ namespace ARMeilleure.Instructions value2 = FPInfinity(false); } - return FPMinFpscr(value1, value2, standardFpscr); + return FPMinFpscrImpl(value1, value2, standardFpscr); } + [UnmanagedCallersOnly] public static float FPMul(float value1, float value2) { - return FPMulFpscr(value1, value2, false); + return FPMulFpscrImpl(value1, value2, false); } - public static float FPMulFpscr(float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPMulFpscr(float value1, float value2, byte standardFpscr) + { + return FPMulFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static float FPMulFpscrImpl(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1271,12 +1344,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPMulAdd(float valueA, float value1, float value2) { - return FPMulAddFpscr(valueA, value1, value2, false); + return FPMulAddFpscrImpl(valueA, value1, value2, false); } - public static float FPMulAddFpscr(float valueA, float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPMulAddFpscr(float valueA, float value1, float value2, byte standardFpscr) + { + return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1); + } + + private static float FPMulAddFpscrImpl(float valueA, float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1342,20 +1422,23 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPMulSub(float valueA, float value1, float value2) { value1 = value1.FPNeg(); - return FPMulAdd(valueA, value1, value2); + return FPMulAddFpscrImpl(valueA, value1, value2, false); } - public static float FPMulSubFpscr(float valueA, float value1, float value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPMulSubFpscr(float valueA, float value1, float value2, byte standardFpscr) { value1 = value1.FPNeg(); - return FPMulAddFpscr(valueA, value1, value2, standardFpscr); + return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1); } + [UnmanagedCallersOnly] public static float FPMulX(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1401,27 +1484,36 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPNegMulAdd(float valueA, float value1, float value2) { valueA = valueA.FPNeg(); value1 = value1.FPNeg(); - return FPMulAdd(valueA, value1, value2); + return FPMulAddFpscrImpl(valueA, value1, value2, false); } + [UnmanagedCallersOnly] public static float FPNegMulSub(float valueA, float value1, float value2) { valueA = valueA.FPNeg(); - return FPMulAdd(valueA, value1, value2); + return FPMulAddFpscrImpl(valueA, value1, value2, false); } + [UnmanagedCallersOnly] public static float FPRecipEstimate(float value) { - return FPRecipEstimateFpscr(value, false); + return FPRecipEstimateFpscrImpl(value, false); } - public static float FPRecipEstimateFpscr(float value, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPRecipEstimateFpscr(float value, byte standardFpscr) + { + return FPRecipEstimateFpscrImpl(value, standardFpscr == 1); + } + + private static float FPRecipEstimateFpscrImpl(float value, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1508,6 +1600,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPRecipStep(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1533,15 +1626,16 @@ namespace ARMeilleure.Instructions } else { - product = FPMulFpscr(value1, value2, true); + product = FPMulFpscrImpl(value1, value2, true); } - result = FPSubFpscr(FPTwo(false), product, true); + result = FPSubFpscrImpl(FPTwo(false), product, true); } return result; } + [UnmanagedCallersOnly] public static float FPRecipStepFused(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1585,6 +1679,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPRecpX(float value) { ExecutionContext context = NativeInterface.GetContext(); @@ -1610,12 +1705,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPRSqrtEstimate(float value) { - return FPRSqrtEstimateFpscr(value, false); + return FPRSqrtEstimateFpscrImpl(value, false); } - public static float FPRSqrtEstimateFpscr(float value, bool standardFpscr) + [UnmanagedCallersOnly] + public static float FPRSqrtEstimateFpscr(float value, byte standardFpscr) + { + return FPRSqrtEstimateFpscrImpl(value, standardFpscr == 1); + } + + private static float FPRSqrtEstimateFpscrImpl(float value, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -1729,6 +1831,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPRSqrtStep(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1754,7 +1857,7 @@ namespace ARMeilleure.Instructions } else { - product = FPMulFpscr(value1, value2, true); + product = FPMulFpscrImpl(value1, value2, true); } result = FPHalvedSub(FPThree(false), product, context, fpcr); @@ -1763,6 +1866,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPRSqrtStepFused(float value1, float value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -1806,6 +1910,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPSqrt(float value) { ExecutionContext context = NativeInterface.GetContext(); @@ -1848,12 +1953,13 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static float FPSub(float value1, float value2) { - return FPSubFpscr(value1, value2, false); + return FPSubFpscrImpl(value1, value2, false); } - public static float FPSubFpscr(float value1, float value2, bool standardFpscr) + private static float FPSubFpscrImpl(float value1, float value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2094,6 +2200,7 @@ namespace ARMeilleure.Instructions static class SoftFloat64_16 { + [UnmanagedCallersOnly] public static ushort FPConvert(double value) { ExecutionContext context = NativeInterface.GetContext(); @@ -2213,12 +2320,19 @@ namespace ARMeilleure.Instructions static class SoftFloat64 { + [UnmanagedCallersOnly] public static double FPAdd(double value1, double value2) { - return FPAddFpscr(value1, value2, false); + return FPAddFpscrImpl(value1, value2, false); } - public static double FPAddFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPAddFpscr(double value1, double value2, byte standardFpscr) + { + return FPAddFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static double FPAddFpscrImpl(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2269,7 +2383,8 @@ namespace ARMeilleure.Instructions return result; } - public static int FPCompare(double value1, double value2, bool signalNaNs) + [UnmanagedCallersOnly] + public static int FPCompare(double value1, double value2, byte signalNaNs) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = context.Fpcr; @@ -2283,7 +2398,7 @@ namespace ARMeilleure.Instructions { result = 0b0011; - if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs) + if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs == 1) { SoftFloat.FPProcessException(FPException.InvalidOp, context, fpcr); } @@ -2307,12 +2422,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPCompareEQ(double value1, double value2) { - return FPCompareEQFpscr(value1, value2, false); + return FPCompareEQFpscrImpl(value1, value2, false); } - public static double FPCompareEQFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPCompareEQFpscr(double value1, double value2, byte standardFpscr) + { + return FPCompareEQFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static double FPCompareEQFpscrImpl(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2339,12 +2461,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPCompareGE(double value1, double value2) { - return FPCompareGEFpscr(value1, value2, false); + return FPCompareGEFpscrImpl(value1, value2, false); } - public static double FPCompareGEFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPCompareGEFpscr(double value1, double value2, byte standardFpscr) + { + return FPCompareGEFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static double FPCompareGEFpscrImpl(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2368,12 +2497,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPCompareGT(double value1, double value2) { - return FPCompareGTFpscr(value1, value2, false); + return FPCompareGTFpscrImpl(value1, value2, false); } - public static double FPCompareGTFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPCompareGTFpscr(double value1, double value2, byte standardFpscr) + { + return FPCompareGTFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static double FPCompareGTFpscrImpl(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2397,26 +2533,31 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPCompareLE(double value1, double value2) { - return FPCompareGE(value2, value1); + return FPCompareGEFpscrImpl(value2, value1, false); } + [UnmanagedCallersOnly] public static double FPCompareLT(double value1, double value2) { - return FPCompareGT(value2, value1); + return FPCompareGTFpscrImpl(value2, value1, false); } - public static double FPCompareLEFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPCompareLEFpscr(double value1, double value2, byte standardFpscr) { - return FPCompareGEFpscr(value2, value1, standardFpscr); + return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1); } - public static double FPCompareLTFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPCompareLTFpscr(double value1, double value2, byte standardFpscr) { - return FPCompareGTFpscr(value2, value1, standardFpscr); + return FPCompareGTFpscrImpl(value2, value1, standardFpscr == 1); } + [UnmanagedCallersOnly] public static double FPDiv(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -2469,12 +2610,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPMax(double value1, double value2) { - return FPMaxFpscr(value1, value2, false); + return FPMaxFpscrImpl(value1, value2, false); } - public static double FPMaxFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPMaxFpscr(double value1, double value2, byte standardFpscr) + { + return FPMaxFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static double FPMaxFpscrImpl(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2535,12 +2683,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPMaxNum(double value1, double value2) { - return FPMaxNumFpscr(value1, value2, false); + return FPMaxNumFpscrImpl(value1, value2, false); } - public static double FPMaxNumFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPMaxNumFpscr(double value1, double value2, byte standardFpscr) + { + return FPMaxNumFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static double FPMaxNumFpscrImpl(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2557,15 +2712,22 @@ namespace ARMeilleure.Instructions value2 = FPInfinity(true); } - return FPMaxFpscr(value1, value2, standardFpscr); + return FPMaxFpscrImpl(value1, value2, standardFpscr); } + [UnmanagedCallersOnly] public static double FPMin(double value1, double value2) { - return FPMinFpscr(value1, value2, false); + return FPMinFpscrImpl(value1, value2, false); } - public static double FPMinFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPMinFpscr(double value1, double value2, byte standardFpscr) + { + return FPMinFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static double FPMinFpscrImpl(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2626,12 +2788,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPMinNum(double value1, double value2) { - return FPMinNumFpscr(value1, value2, false); + return FPMinNumFpscrImpl(value1, value2, false); } - public static double FPMinNumFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPMinNumFpscr(double value1, double value2, byte standardFpscr) + { + return FPMinNumFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static double FPMinNumFpscrImpl(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2648,15 +2817,22 @@ namespace ARMeilleure.Instructions value2 = FPInfinity(false); } - return FPMinFpscr(value1, value2, standardFpscr); + return FPMinFpscrImpl(value1, value2, standardFpscr); } + [UnmanagedCallersOnly] public static double FPMul(double value1, double value2) { - return FPMulFpscr(value1, value2, false); + return FPMulFpscrImpl(value1, value2, false); } - public static double FPMulFpscr(double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPMulFpscr(double value1, double value2, byte standardFpscr) + { + return FPMulFpscrImpl(value1, value2, standardFpscr == 1); + } + + private static double FPMulFpscrImpl(double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2703,12 +2879,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPMulAdd(double valueA, double value1, double value2) { - return FPMulAddFpscr(valueA, value1, value2, false); + return FPMulAddFpscrImpl(valueA, value1, value2, false); } - public static double FPMulAddFpscr(double valueA, double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPMulAddFpscr(double valueA, double value1, double value2, byte standardFpscr) + { + return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1); + } + + private static double FPMulAddFpscrImpl(double valueA, double value1, double value2, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2774,20 +2957,23 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPMulSub(double valueA, double value1, double value2) { value1 = value1.FPNeg(); - return FPMulAdd(valueA, value1, value2); + return FPMulAddFpscrImpl(valueA, value1, value2, false); } - public static double FPMulSubFpscr(double valueA, double value1, double value2, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPMulSubFpscr(double valueA, double value1, double value2, byte standardFpscr) { value1 = value1.FPNeg(); - return FPMulAddFpscr(valueA, value1, value2, standardFpscr); + return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1); } + [UnmanagedCallersOnly] public static double FPMulX(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -2833,27 +3019,36 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPNegMulAdd(double valueA, double value1, double value2) { valueA = valueA.FPNeg(); value1 = value1.FPNeg(); - return FPMulAdd(valueA, value1, value2); + return FPMulAddFpscrImpl(valueA, value1, value2, false); } + [UnmanagedCallersOnly] public static double FPNegMulSub(double valueA, double value1, double value2) { valueA = valueA.FPNeg(); - return FPMulAdd(valueA, value1, value2); + return FPMulAddFpscrImpl(valueA, value1, value2, false); } + [UnmanagedCallersOnly] public static double FPRecipEstimate(double value) { - return FPRecipEstimateFpscr(value, false); + return FPRecipEstimateFpscrImpl(value, false); } - public static double FPRecipEstimateFpscr(double value, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPRecipEstimateFpscr(double value, byte standardFpscr) + { + return FPRecipEstimateFpscrImpl(value, standardFpscr == 1); + } + + private static double FPRecipEstimateFpscrImpl(double value, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -2940,6 +3135,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPRecipStep(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -2965,7 +3161,7 @@ namespace ARMeilleure.Instructions } else { - product = FPMulFpscr(value1, value2, true); + product = FPMulFpscrImpl(value1, value2, true); } result = FPSubFpscr(FPTwo(false), product, true); @@ -2974,6 +3170,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPRecipStepFused(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -3017,6 +3214,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPRecpX(double value) { ExecutionContext context = NativeInterface.GetContext(); @@ -3042,12 +3240,19 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPRSqrtEstimate(double value) { - return FPRSqrtEstimateFpscr(value, false); + return FPRSqrtEstimateFpscrImpl(value, false); } - public static double FPRSqrtEstimateFpscr(double value, bool standardFpscr) + [UnmanagedCallersOnly] + public static double FPRSqrtEstimateFpscr(double value, byte standardFpscr) + { + return FPRSqrtEstimateFpscrImpl(value, standardFpscr == 1); + } + + private static double FPRSqrtEstimateFpscrImpl(double value, bool standardFpscr) { ExecutionContext context = NativeInterface.GetContext(); FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr; @@ -3161,6 +3366,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPRSqrtStep(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -3186,7 +3392,7 @@ namespace ARMeilleure.Instructions } else { - product = FPMulFpscr(value1, value2, true); + product = FPMulFpscrImpl(value1, value2, true); } result = FPHalvedSub(FPThree(false), product, context, fpcr); @@ -3195,6 +3401,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPRSqrtStepFused(double value1, double value2) { ExecutionContext context = NativeInterface.GetContext(); @@ -3238,6 +3445,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPSqrt(double value) { ExecutionContext context = NativeInterface.GetContext(); @@ -3280,6 +3488,7 @@ namespace ARMeilleure.Instructions return result; } + [UnmanagedCallersOnly] public static double FPSub(double value1, double value2) { return FPSubFpscr(value1, value2, false); diff --git a/src/ARMeilleure/Translation/DelegateInfo.cs b/src/ARMeilleure/Translation/DelegateInfo.cs index d3b535de1..64ee7bc9c 100644 --- a/src/ARMeilleure/Translation/DelegateInfo.cs +++ b/src/ARMeilleure/Translation/DelegateInfo.cs @@ -4,15 +4,9 @@ namespace ARMeilleure.Translation { class DelegateInfo { -#pragma warning disable IDE0052 // Remove unread private member - private readonly Delegate _dlg; // Ensure that this delegate will not be garbage collected. -#pragma warning restore IDE0052 - - public nint FuncPtr { get; } - - public DelegateInfo(Delegate dlg, nint funcPtr) + public nint FuncPtr { get; private set; } + public DelegateInfo(nint funcPtr) { - _dlg = dlg; FuncPtr = funcPtr; } } diff --git a/src/ARMeilleure/Translation/Delegates.cs b/src/ARMeilleure/Translation/Delegates.cs index d8c1cfd58..d4f46108c 100644 --- a/src/ARMeilleure/Translation/Delegates.cs +++ b/src/ARMeilleure/Translation/Delegates.cs @@ -1,9 +1,7 @@ using ARMeilleure.Instructions; -using ARMeilleure.State; using System; using System.Collections.Generic; using System.Reflection; -using System.Runtime.InteropServices; namespace ARMeilleure.Translation { @@ -34,21 +32,7 @@ namespace ARMeilleure.Translation return _delegates.Values[index].FuncPtr; // O(1). } - - public static nint GetDelegateFuncPtr(MethodInfo info) - { - ArgumentNullException.ThrowIfNull(info); - - string key = GetKey(info); - - if (!_delegates.TryGetValue(key, out DelegateInfo dlgInfo)) // O(log(n)). - { - throw new KeyNotFoundException($"({nameof(key)} = {key})"); - } - - return dlgInfo.FuncPtr; - } - + public static int GetDelegateIndex(MethodInfo info) { ArgumentNullException.ThrowIfNull(info); @@ -64,12 +48,12 @@ namespace ARMeilleure.Translation return index; } - - private static void SetDelegateInfo(Delegate dlg, nint funcPtr) + + private static void SetDelegateInfo(MethodInfo method) { - string key = GetKey(dlg.Method); + string key = GetKey(method); - _delegates.Add(key, new DelegateInfo(dlg, funcPtr)); // ArgumentException (key). + _delegates.Add(key, new DelegateInfo(method.MethodHandle.GetFunctionPointer())); // ArgumentException (key). } private static string GetKey(MethodInfo info) @@ -83,528 +67,179 @@ namespace ARMeilleure.Translation { _delegates = new SortedList(); - var dlgMathAbs = new MathAbs(Math.Abs); - var dlgMathCeiling = new MathCeiling(Math.Ceiling); - var dlgMathFloor = new MathFloor(Math.Floor); - var dlgMathRound = new MathRound(Math.Round); - var dlgMathTruncate = new MathTruncate(Math.Truncate); + SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Abs))); + SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Ceiling))); + SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Floor))); + SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Round))); + SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Truncate))); - var dlgMathFAbs = new MathFAbs(MathF.Abs); - var dlgMathFCeiling = new MathFCeiling(MathF.Ceiling); - var dlgMathFFloor = new MathFFloor(MathF.Floor); - var dlgMathFRound = new MathFRound(MathF.Round); - var dlgMathFTruncate = new MathFTruncate(MathF.Truncate); + SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Abs))); + SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Ceiling))); + SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Floor))); + SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Round))); + SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Truncate))); - var dlgNativeInterfaceBreak = new NativeInterfaceBreak(NativeInterface.Break); - var dlgNativeInterfaceCheckSynchronization = new NativeInterfaceCheckSynchronization(NativeInterface.CheckSynchronization); - var dlgNativeInterfaceEnqueueForRejit = new NativeInterfaceEnqueueForRejit(NativeInterface.EnqueueForRejit); - var dlgNativeInterfaceGetCntfrqEl0 = new NativeInterfaceGetCntfrqEl0(NativeInterface.GetCntfrqEl0); - var dlgNativeInterfaceGetCntpctEl0 = new NativeInterfaceGetCntpctEl0(NativeInterface.GetCntpctEl0); - var dlgNativeInterfaceGetCntvctEl0 = new NativeInterfaceGetCntvctEl0(NativeInterface.GetCntvctEl0); - var dlgNativeInterfaceGetCtrEl0 = new NativeInterfaceGetCtrEl0(NativeInterface.GetCtrEl0); - var dlgNativeInterfaceGetDczidEl0 = new NativeInterfaceGetDczidEl0(NativeInterface.GetDczidEl0); - var dlgNativeInterfaceGetFunctionAddress = new NativeInterfaceGetFunctionAddress(NativeInterface.GetFunctionAddress); - var dlgNativeInterfaceInvalidateCacheLine = new NativeInterfaceInvalidateCacheLine(NativeInterface.InvalidateCacheLine); - var dlgNativeInterfaceReadByte = new NativeInterfaceReadByte(NativeInterface.ReadByte); - var dlgNativeInterfaceReadUInt16 = new NativeInterfaceReadUInt16(NativeInterface.ReadUInt16); - var dlgNativeInterfaceReadUInt32 = new NativeInterfaceReadUInt32(NativeInterface.ReadUInt32); - var dlgNativeInterfaceReadUInt64 = new NativeInterfaceReadUInt64(NativeInterface.ReadUInt64); - var dlgNativeInterfaceReadVector128 = new NativeInterfaceReadVector128(NativeInterface.ReadVector128); - var dlgNativeInterfaceSignalMemoryTracking = new NativeInterfaceSignalMemoryTracking(NativeInterface.SignalMemoryTracking); - var dlgNativeInterfaceSupervisorCall = new NativeInterfaceSupervisorCall(NativeInterface.SupervisorCall); - var dlgNativeInterfaceThrowInvalidMemoryAccess = new NativeInterfaceThrowInvalidMemoryAccess(NativeInterface.ThrowInvalidMemoryAccess); - var dlgNativeInterfaceUndefined = new NativeInterfaceUndefined(NativeInterface.Undefined); - var dlgNativeInterfaceWriteByte = new NativeInterfaceWriteByte(NativeInterface.WriteByte); - var dlgNativeInterfaceWriteUInt16 = new NativeInterfaceWriteUInt16(NativeInterface.WriteUInt16); - var dlgNativeInterfaceWriteUInt32 = new NativeInterfaceWriteUInt32(NativeInterface.WriteUInt32); - var dlgNativeInterfaceWriteUInt64 = new NativeInterfaceWriteUInt64(NativeInterface.WriteUInt64); - var dlgNativeInterfaceWriteVector128 = new NativeInterfaceWriteVector128(NativeInterface.WriteVector128); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.Break))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.CheckSynchronization))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.EnqueueForRejit))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntfrqEl0))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntpctEl0))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntvctEl0))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCtrEl0))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetDczidEl0))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetFunctionAddress))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.InvalidateCacheLine))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadByte))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt16))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt32))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt64))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadVector128))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SignalMemoryTracking))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SupervisorCall))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ThrowInvalidMemoryAccess))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.Undefined))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteByte))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteUInt16))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteUInt32))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteUInt64))); + SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteVector128))); - var dlgSoftFallbackCountLeadingSigns = new SoftFallbackCountLeadingSigns(SoftFallback.CountLeadingSigns); - var dlgSoftFallbackCountLeadingZeros = new SoftFallbackCountLeadingZeros(SoftFallback.CountLeadingZeros); - var dlgSoftFallbackCrc32b = new SoftFallbackCrc32b(SoftFallback.Crc32b); - var dlgSoftFallbackCrc32cb = new SoftFallbackCrc32cb(SoftFallback.Crc32cb); - var dlgSoftFallbackCrc32ch = new SoftFallbackCrc32ch(SoftFallback.Crc32ch); - var dlgSoftFallbackCrc32cw = new SoftFallbackCrc32cw(SoftFallback.Crc32cw); - var dlgSoftFallbackCrc32cx = new SoftFallbackCrc32cx(SoftFallback.Crc32cx); - var dlgSoftFallbackCrc32h = new SoftFallbackCrc32h(SoftFallback.Crc32h); - var dlgSoftFallbackCrc32w = new SoftFallbackCrc32w(SoftFallback.Crc32w); - var dlgSoftFallbackCrc32x = new SoftFallbackCrc32x(SoftFallback.Crc32x); - var dlgSoftFallbackDecrypt = new SoftFallbackDecrypt(SoftFallback.Decrypt); - var dlgSoftFallbackEncrypt = new SoftFallbackEncrypt(SoftFallback.Encrypt); - var dlgSoftFallbackFixedRotate = new SoftFallbackFixedRotate(SoftFallback.FixedRotate); - var dlgSoftFallbackHashChoose = new SoftFallbackHashChoose(SoftFallback.HashChoose); - var dlgSoftFallbackHashLower = new SoftFallbackHashLower(SoftFallback.HashLower); - var dlgSoftFallbackHashMajority = new SoftFallbackHashMajority(SoftFallback.HashMajority); - var dlgSoftFallbackHashParity = new SoftFallbackHashParity(SoftFallback.HashParity); - var dlgSoftFallbackHashUpper = new SoftFallbackHashUpper(SoftFallback.HashUpper); - var dlgSoftFallbackInverseMixColumns = new SoftFallbackInverseMixColumns(SoftFallback.InverseMixColumns); - var dlgSoftFallbackMixColumns = new SoftFallbackMixColumns(SoftFallback.MixColumns); - var dlgSoftFallbackPolynomialMult64_128 = new SoftFallbackPolynomialMult64_128(SoftFallback.PolynomialMult64_128); - var dlgSoftFallbackSatF32ToS32 = new SoftFallbackSatF32ToS32(SoftFallback.SatF32ToS32); - var dlgSoftFallbackSatF32ToS64 = new SoftFallbackSatF32ToS64(SoftFallback.SatF32ToS64); - var dlgSoftFallbackSatF32ToU32 = new SoftFallbackSatF32ToU32(SoftFallback.SatF32ToU32); - var dlgSoftFallbackSatF32ToU64 = new SoftFallbackSatF32ToU64(SoftFallback.SatF32ToU64); - var dlgSoftFallbackSatF64ToS32 = new SoftFallbackSatF64ToS32(SoftFallback.SatF64ToS32); - var dlgSoftFallbackSatF64ToS64 = new SoftFallbackSatF64ToS64(SoftFallback.SatF64ToS64); - var dlgSoftFallbackSatF64ToU32 = new SoftFallbackSatF64ToU32(SoftFallback.SatF64ToU32); - var dlgSoftFallbackSatF64ToU64 = new SoftFallbackSatF64ToU64(SoftFallback.SatF64ToU64); - var dlgSoftFallbackSha1SchedulePart1 = new SoftFallbackSha1SchedulePart1(SoftFallback.Sha1SchedulePart1); - var dlgSoftFallbackSha1SchedulePart2 = new SoftFallbackSha1SchedulePart2(SoftFallback.Sha1SchedulePart2); - var dlgSoftFallbackSha256SchedulePart1 = new SoftFallbackSha256SchedulePart1(SoftFallback.Sha256SchedulePart1); - var dlgSoftFallbackSha256SchedulePart2 = new SoftFallbackSha256SchedulePart2(SoftFallback.Sha256SchedulePart2); - var dlgSoftFallbackSignedShrImm64 = new SoftFallbackSignedShrImm64(SoftFallback.SignedShrImm64); - var dlgSoftFallbackTbl1 = new SoftFallbackTbl1(SoftFallback.Tbl1); - var dlgSoftFallbackTbl2 = new SoftFallbackTbl2(SoftFallback.Tbl2); - var dlgSoftFallbackTbl3 = new SoftFallbackTbl3(SoftFallback.Tbl3); - var dlgSoftFallbackTbl4 = new SoftFallbackTbl4(SoftFallback.Tbl4); - var dlgSoftFallbackTbx1 = new SoftFallbackTbx1(SoftFallback.Tbx1); - var dlgSoftFallbackTbx2 = new SoftFallbackTbx2(SoftFallback.Tbx2); - var dlgSoftFallbackTbx3 = new SoftFallbackTbx3(SoftFallback.Tbx3); - var dlgSoftFallbackTbx4 = new SoftFallbackTbx4(SoftFallback.Tbx4); - var dlgSoftFallbackUnsignedShrImm64 = new SoftFallbackUnsignedShrImm64(SoftFallback.UnsignedShrImm64); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.CountLeadingSigns))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.CountLeadingZeros))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32b))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cb))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32ch))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cw))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cx))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32h))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32w))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32x))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Decrypt))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Encrypt))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.FixedRotate))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashChoose))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashLower))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashMajority))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashParity))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashUpper))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.InverseMixColumns))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.MixColumns))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.PolynomialMult64_128))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToS32))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToS64))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToU32))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToU64))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToS32))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToS64))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToU32))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToU64))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha1SchedulePart1))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha1SchedulePart2))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha256SchedulePart1))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha256SchedulePart2))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SignedShrImm64))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl1))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl2))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl3))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl4))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx1))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx2))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx3))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx4))); + SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.UnsignedShrImm64))); - var dlgSoftFloat16_32FPConvert = new SoftFloat16_32FPConvert(SoftFloat16_32.FPConvert); - var dlgSoftFloat16_64FPConvert = new SoftFloat16_64FPConvert(SoftFloat16_64.FPConvert); + SetDelegateInfo(typeof(SoftFloat16_32).GetMethod(nameof(SoftFloat16_32.FPConvert))); + SetDelegateInfo(typeof(SoftFloat16_64).GetMethod(nameof(SoftFloat16_64.FPConvert))); - var dlgSoftFloat32FPAdd = new SoftFloat32FPAdd(SoftFloat32.FPAdd); - var dlgSoftFloat32FPAddFpscr = new SoftFloat32FPAddFpscr(SoftFloat32.FPAddFpscr); // A32 only. - var dlgSoftFloat32FPCompare = new SoftFloat32FPCompare(SoftFloat32.FPCompare); - var dlgSoftFloat32FPCompareEQ = new SoftFloat32FPCompareEQ(SoftFloat32.FPCompareEQ); - var dlgSoftFloat32FPCompareEQFpscr = new SoftFloat32FPCompareEQFpscr(SoftFloat32.FPCompareEQFpscr); // A32 only. - var dlgSoftFloat32FPCompareGE = new SoftFloat32FPCompareGE(SoftFloat32.FPCompareGE); - var dlgSoftFloat32FPCompareGEFpscr = new SoftFloat32FPCompareGEFpscr(SoftFloat32.FPCompareGEFpscr); // A32 only. - var dlgSoftFloat32FPCompareGT = new SoftFloat32FPCompareGT(SoftFloat32.FPCompareGT); - var dlgSoftFloat32FPCompareGTFpscr = new SoftFloat32FPCompareGTFpscr(SoftFloat32.FPCompareGTFpscr); // A32 only. - var dlgSoftFloat32FPCompareLE = new SoftFloat32FPCompareLE(SoftFloat32.FPCompareLE); - var dlgSoftFloat32FPCompareLEFpscr = new SoftFloat32FPCompareLEFpscr(SoftFloat32.FPCompareLEFpscr); // A32 only. - var dlgSoftFloat32FPCompareLT = new SoftFloat32FPCompareLT(SoftFloat32.FPCompareLT); - var dlgSoftFloat32FPCompareLTFpscr = new SoftFloat32FPCompareLTFpscr(SoftFloat32.FPCompareLTFpscr); // A32 only. - var dlgSoftFloat32FPDiv = new SoftFloat32FPDiv(SoftFloat32.FPDiv); - var dlgSoftFloat32FPMax = new SoftFloat32FPMax(SoftFloat32.FPMax); - var dlgSoftFloat32FPMaxFpscr = new SoftFloat32FPMaxFpscr(SoftFloat32.FPMaxFpscr); // A32 only. - var dlgSoftFloat32FPMaxNum = new SoftFloat32FPMaxNum(SoftFloat32.FPMaxNum); - var dlgSoftFloat32FPMaxNumFpscr = new SoftFloat32FPMaxNumFpscr(SoftFloat32.FPMaxNumFpscr); // A32 only. - var dlgSoftFloat32FPMin = new SoftFloat32FPMin(SoftFloat32.FPMin); - var dlgSoftFloat32FPMinFpscr = new SoftFloat32FPMinFpscr(SoftFloat32.FPMinFpscr); // A32 only. - var dlgSoftFloat32FPMinNum = new SoftFloat32FPMinNum(SoftFloat32.FPMinNum); - var dlgSoftFloat32FPMinNumFpscr = new SoftFloat32FPMinNumFpscr(SoftFloat32.FPMinNumFpscr); // A32 only. - var dlgSoftFloat32FPMul = new SoftFloat32FPMul(SoftFloat32.FPMul); - var dlgSoftFloat32FPMulFpscr = new SoftFloat32FPMulFpscr(SoftFloat32.FPMulFpscr); // A32 only. - var dlgSoftFloat32FPMulAdd = new SoftFloat32FPMulAdd(SoftFloat32.FPMulAdd); - var dlgSoftFloat32FPMulAddFpscr = new SoftFloat32FPMulAddFpscr(SoftFloat32.FPMulAddFpscr); // A32 only. - var dlgSoftFloat32FPMulSub = new SoftFloat32FPMulSub(SoftFloat32.FPMulSub); - var dlgSoftFloat32FPMulSubFpscr = new SoftFloat32FPMulSubFpscr(SoftFloat32.FPMulSubFpscr); // A32 only. - var dlgSoftFloat32FPMulX = new SoftFloat32FPMulX(SoftFloat32.FPMulX); - var dlgSoftFloat32FPNegMulAdd = new SoftFloat32FPNegMulAdd(SoftFloat32.FPNegMulAdd); - var dlgSoftFloat32FPNegMulSub = new SoftFloat32FPNegMulSub(SoftFloat32.FPNegMulSub); - var dlgSoftFloat32FPRecipEstimate = new SoftFloat32FPRecipEstimate(SoftFloat32.FPRecipEstimate); - var dlgSoftFloat32FPRecipEstimateFpscr = new SoftFloat32FPRecipEstimateFpscr(SoftFloat32.FPRecipEstimateFpscr); // A32 only. - var dlgSoftFloat32FPRecipStep = new SoftFloat32FPRecipStep(SoftFloat32.FPRecipStep); // A32 only. - var dlgSoftFloat32FPRecipStepFused = new SoftFloat32FPRecipStepFused(SoftFloat32.FPRecipStepFused); - var dlgSoftFloat32FPRecpX = new SoftFloat32FPRecpX(SoftFloat32.FPRecpX); - var dlgSoftFloat32FPRSqrtEstimate = new SoftFloat32FPRSqrtEstimate(SoftFloat32.FPRSqrtEstimate); - var dlgSoftFloat32FPRSqrtEstimateFpscr = new SoftFloat32FPRSqrtEstimateFpscr(SoftFloat32.FPRSqrtEstimateFpscr); // A32 only. - var dlgSoftFloat32FPRSqrtStep = new SoftFloat32FPRSqrtStep(SoftFloat32.FPRSqrtStep); // A32 only. - var dlgSoftFloat32FPRSqrtStepFused = new SoftFloat32FPRSqrtStepFused(SoftFloat32.FPRSqrtStepFused); - var dlgSoftFloat32FPSqrt = new SoftFloat32FPSqrt(SoftFloat32.FPSqrt); - var dlgSoftFloat32FPSub = new SoftFloat32FPSub(SoftFloat32.FPSub); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPAdd))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPAddFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompare))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareEQ))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareEQFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGE))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGEFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGT))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGTFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLE))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLEFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLT))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLTFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPDiv))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMax))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxNum))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxNumFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMin))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinNum))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinNumFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMul))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulAdd))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulAddFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulSub))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulSubFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulX))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPNegMulAdd))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPNegMulSub))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipEstimate))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipEstimateFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipStep))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipStepFused))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecpX))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtEstimate))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtEstimateFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtStep))); // A32 only. + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtStepFused))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPSqrt))); + SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPSub))); - var dlgSoftFloat32_16FPConvert = new SoftFloat32_16FPConvert(SoftFloat32_16.FPConvert); + SetDelegateInfo(typeof(SoftFloat32_16).GetMethod(nameof(SoftFloat32_16.FPConvert))); - var dlgSoftFloat64FPAdd = new SoftFloat64FPAdd(SoftFloat64.FPAdd); - var dlgSoftFloat64FPAddFpscr = new SoftFloat64FPAddFpscr(SoftFloat64.FPAddFpscr); // A32 only. - var dlgSoftFloat64FPCompare = new SoftFloat64FPCompare(SoftFloat64.FPCompare); - var dlgSoftFloat64FPCompareEQ = new SoftFloat64FPCompareEQ(SoftFloat64.FPCompareEQ); - var dlgSoftFloat64FPCompareEQFpscr = new SoftFloat64FPCompareEQFpscr(SoftFloat64.FPCompareEQFpscr); // A32 only. - var dlgSoftFloat64FPCompareGE = new SoftFloat64FPCompareGE(SoftFloat64.FPCompareGE); - var dlgSoftFloat64FPCompareGEFpscr = new SoftFloat64FPCompareGEFpscr(SoftFloat64.FPCompareGEFpscr); // A32 only. - var dlgSoftFloat64FPCompareGT = new SoftFloat64FPCompareGT(SoftFloat64.FPCompareGT); - var dlgSoftFloat64FPCompareGTFpscr = new SoftFloat64FPCompareGTFpscr(SoftFloat64.FPCompareGTFpscr); // A32 only. - var dlgSoftFloat64FPCompareLE = new SoftFloat64FPCompareLE(SoftFloat64.FPCompareLE); - var dlgSoftFloat64FPCompareLEFpscr = new SoftFloat64FPCompareLEFpscr(SoftFloat64.FPCompareLEFpscr); // A32 only. - var dlgSoftFloat64FPCompareLT = new SoftFloat64FPCompareLT(SoftFloat64.FPCompareLT); - var dlgSoftFloat64FPCompareLTFpscr = new SoftFloat64FPCompareLTFpscr(SoftFloat64.FPCompareLTFpscr); // A32 only. - var dlgSoftFloat64FPDiv = new SoftFloat64FPDiv(SoftFloat64.FPDiv); - var dlgSoftFloat64FPMax = new SoftFloat64FPMax(SoftFloat64.FPMax); - var dlgSoftFloat64FPMaxFpscr = new SoftFloat64FPMaxFpscr(SoftFloat64.FPMaxFpscr); // A32 only. - var dlgSoftFloat64FPMaxNum = new SoftFloat64FPMaxNum(SoftFloat64.FPMaxNum); - var dlgSoftFloat64FPMaxNumFpscr = new SoftFloat64FPMaxNumFpscr(SoftFloat64.FPMaxNumFpscr); // A32 only. - var dlgSoftFloat64FPMin = new SoftFloat64FPMin(SoftFloat64.FPMin); - var dlgSoftFloat64FPMinFpscr = new SoftFloat64FPMinFpscr(SoftFloat64.FPMinFpscr); // A32 only. - var dlgSoftFloat64FPMinNum = new SoftFloat64FPMinNum(SoftFloat64.FPMinNum); - var dlgSoftFloat64FPMinNumFpscr = new SoftFloat64FPMinNumFpscr(SoftFloat64.FPMinNumFpscr); // A32 only. - var dlgSoftFloat64FPMul = new SoftFloat64FPMul(SoftFloat64.FPMul); - var dlgSoftFloat64FPMulFpscr = new SoftFloat64FPMulFpscr(SoftFloat64.FPMulFpscr); // A32 only. - var dlgSoftFloat64FPMulAdd = new SoftFloat64FPMulAdd(SoftFloat64.FPMulAdd); - var dlgSoftFloat64FPMulAddFpscr = new SoftFloat64FPMulAddFpscr(SoftFloat64.FPMulAddFpscr); // A32 only. - var dlgSoftFloat64FPMulSub = new SoftFloat64FPMulSub(SoftFloat64.FPMulSub); - var dlgSoftFloat64FPMulSubFpscr = new SoftFloat64FPMulSubFpscr(SoftFloat64.FPMulSubFpscr); // A32 only. - var dlgSoftFloat64FPMulX = new SoftFloat64FPMulX(SoftFloat64.FPMulX); - var dlgSoftFloat64FPNegMulAdd = new SoftFloat64FPNegMulAdd(SoftFloat64.FPNegMulAdd); - var dlgSoftFloat64FPNegMulSub = new SoftFloat64FPNegMulSub(SoftFloat64.FPNegMulSub); - var dlgSoftFloat64FPRecipEstimate = new SoftFloat64FPRecipEstimate(SoftFloat64.FPRecipEstimate); - var dlgSoftFloat64FPRecipEstimateFpscr = new SoftFloat64FPRecipEstimateFpscr(SoftFloat64.FPRecipEstimateFpscr); // A32 only. - var dlgSoftFloat64FPRecipStep = new SoftFloat64FPRecipStep(SoftFloat64.FPRecipStep); // A32 only. - var dlgSoftFloat64FPRecipStepFused = new SoftFloat64FPRecipStepFused(SoftFloat64.FPRecipStepFused); - var dlgSoftFloat64FPRecpX = new SoftFloat64FPRecpX(SoftFloat64.FPRecpX); - var dlgSoftFloat64FPRSqrtEstimate = new SoftFloat64FPRSqrtEstimate(SoftFloat64.FPRSqrtEstimate); - var dlgSoftFloat64FPRSqrtEstimateFpscr = new SoftFloat64FPRSqrtEstimateFpscr(SoftFloat64.FPRSqrtEstimateFpscr); // A32 only. - var dlgSoftFloat64FPRSqrtStep = new SoftFloat64FPRSqrtStep(SoftFloat64.FPRSqrtStep); // A32 only. - var dlgSoftFloat64FPRSqrtStepFused = new SoftFloat64FPRSqrtStepFused(SoftFloat64.FPRSqrtStepFused); - var dlgSoftFloat64FPSqrt = new SoftFloat64FPSqrt(SoftFloat64.FPSqrt); - var dlgSoftFloat64FPSub = new SoftFloat64FPSub(SoftFloat64.FPSub); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPAdd))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPAddFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompare))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareEQ))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareEQFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGE))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGEFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGT))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGTFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLE))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLEFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLT))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLTFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPDiv))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMax))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxNum))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxNumFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMin))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinNum))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinNumFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMul))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulAdd))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulAddFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulSub))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulSubFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulX))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPNegMulAdd))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPNegMulSub))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipEstimate))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipEstimateFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipStep))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipStepFused))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecpX))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtEstimate))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtEstimateFpscr))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtStep))); // A32 only. + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtStepFused))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPSqrt))); + SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPSub))); - var dlgSoftFloat64_16FPConvert = new SoftFloat64_16FPConvert(SoftFloat64_16.FPConvert); - - SetDelegateInfo(dlgMathAbs, Marshal.GetFunctionPointerForDelegate(dlgMathAbs)); - SetDelegateInfo(dlgMathCeiling, Marshal.GetFunctionPointerForDelegate(dlgMathCeiling)); - SetDelegateInfo(dlgMathFloor, Marshal.GetFunctionPointerForDelegate(dlgMathFloor)); - SetDelegateInfo(dlgMathRound, Marshal.GetFunctionPointerForDelegate(dlgMathRound)); - SetDelegateInfo(dlgMathTruncate, Marshal.GetFunctionPointerForDelegate(dlgMathTruncate)); - - SetDelegateInfo(dlgMathFAbs, Marshal.GetFunctionPointerForDelegate(dlgMathFAbs)); - SetDelegateInfo(dlgMathFCeiling, Marshal.GetFunctionPointerForDelegate(dlgMathFCeiling)); - SetDelegateInfo(dlgMathFFloor, Marshal.GetFunctionPointerForDelegate(dlgMathFFloor)); - SetDelegateInfo(dlgMathFRound, Marshal.GetFunctionPointerForDelegate(dlgMathFRound)); - SetDelegateInfo(dlgMathFTruncate, Marshal.GetFunctionPointerForDelegate(dlgMathFTruncate)); - - SetDelegateInfo(dlgNativeInterfaceBreak, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceBreak)); - SetDelegateInfo(dlgNativeInterfaceCheckSynchronization, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceCheckSynchronization)); - SetDelegateInfo(dlgNativeInterfaceEnqueueForRejit, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceEnqueueForRejit)); - SetDelegateInfo(dlgNativeInterfaceGetCntfrqEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCntfrqEl0)); - SetDelegateInfo(dlgNativeInterfaceGetCntpctEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCntpctEl0)); - SetDelegateInfo(dlgNativeInterfaceGetCntvctEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCntvctEl0)); - SetDelegateInfo(dlgNativeInterfaceGetCtrEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCtrEl0)); - SetDelegateInfo(dlgNativeInterfaceGetDczidEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetDczidEl0)); - SetDelegateInfo(dlgNativeInterfaceGetFunctionAddress, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetFunctionAddress)); - SetDelegateInfo(dlgNativeInterfaceInvalidateCacheLine, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceInvalidateCacheLine)); - SetDelegateInfo(dlgNativeInterfaceReadByte, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadByte)); - SetDelegateInfo(dlgNativeInterfaceReadUInt16, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadUInt16)); - SetDelegateInfo(dlgNativeInterfaceReadUInt32, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadUInt32)); - SetDelegateInfo(dlgNativeInterfaceReadUInt64, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadUInt64)); - SetDelegateInfo(dlgNativeInterfaceReadVector128, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadVector128)); - SetDelegateInfo(dlgNativeInterfaceSignalMemoryTracking, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceSignalMemoryTracking)); - SetDelegateInfo(dlgNativeInterfaceSupervisorCall, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceSupervisorCall)); - SetDelegateInfo(dlgNativeInterfaceThrowInvalidMemoryAccess, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceThrowInvalidMemoryAccess)); - SetDelegateInfo(dlgNativeInterfaceUndefined, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceUndefined)); - SetDelegateInfo(dlgNativeInterfaceWriteByte, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteByte)); - SetDelegateInfo(dlgNativeInterfaceWriteUInt16, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteUInt16)); - SetDelegateInfo(dlgNativeInterfaceWriteUInt32, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteUInt32)); - SetDelegateInfo(dlgNativeInterfaceWriteUInt64, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteUInt64)); - SetDelegateInfo(dlgNativeInterfaceWriteVector128, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteVector128)); - - SetDelegateInfo(dlgSoftFallbackCountLeadingSigns, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCountLeadingSigns)); - SetDelegateInfo(dlgSoftFallbackCountLeadingZeros, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCountLeadingZeros)); - SetDelegateInfo(dlgSoftFallbackCrc32b, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32b)); - SetDelegateInfo(dlgSoftFallbackCrc32cb, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32cb)); - SetDelegateInfo(dlgSoftFallbackCrc32ch, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32ch)); - SetDelegateInfo(dlgSoftFallbackCrc32cw, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32cw)); - SetDelegateInfo(dlgSoftFallbackCrc32cx, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32cx)); - SetDelegateInfo(dlgSoftFallbackCrc32h, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32h)); - SetDelegateInfo(dlgSoftFallbackCrc32w, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32w)); - SetDelegateInfo(dlgSoftFallbackCrc32x, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32x)); - SetDelegateInfo(dlgSoftFallbackDecrypt, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackDecrypt)); - SetDelegateInfo(dlgSoftFallbackEncrypt, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackEncrypt)); - SetDelegateInfo(dlgSoftFallbackFixedRotate, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackFixedRotate)); - SetDelegateInfo(dlgSoftFallbackHashChoose, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashChoose)); - SetDelegateInfo(dlgSoftFallbackHashLower, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashLower)); - SetDelegateInfo(dlgSoftFallbackHashMajority, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashMajority)); - SetDelegateInfo(dlgSoftFallbackHashParity, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashParity)); - SetDelegateInfo(dlgSoftFallbackHashUpper, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashUpper)); - SetDelegateInfo(dlgSoftFallbackInverseMixColumns, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackInverseMixColumns)); - SetDelegateInfo(dlgSoftFallbackMixColumns, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackMixColumns)); - SetDelegateInfo(dlgSoftFallbackPolynomialMult64_128, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackPolynomialMult64_128)); - SetDelegateInfo(dlgSoftFallbackSatF32ToS32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToS32)); - SetDelegateInfo(dlgSoftFallbackSatF32ToS64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToS64)); - SetDelegateInfo(dlgSoftFallbackSatF32ToU32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToU32)); - SetDelegateInfo(dlgSoftFallbackSatF32ToU64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToU64)); - SetDelegateInfo(dlgSoftFallbackSatF64ToS32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToS32)); - SetDelegateInfo(dlgSoftFallbackSatF64ToS64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToS64)); - SetDelegateInfo(dlgSoftFallbackSatF64ToU32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToU32)); - SetDelegateInfo(dlgSoftFallbackSatF64ToU64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToU64)); - SetDelegateInfo(dlgSoftFallbackSha1SchedulePart1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha1SchedulePart1)); - SetDelegateInfo(dlgSoftFallbackSha1SchedulePart2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha1SchedulePart2)); - SetDelegateInfo(dlgSoftFallbackSha256SchedulePart1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha256SchedulePart1)); - SetDelegateInfo(dlgSoftFallbackSha256SchedulePart2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha256SchedulePart2)); - SetDelegateInfo(dlgSoftFallbackSignedShrImm64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSignedShrImm64)); - SetDelegateInfo(dlgSoftFallbackTbl1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl1)); - SetDelegateInfo(dlgSoftFallbackTbl2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl2)); - SetDelegateInfo(dlgSoftFallbackTbl3, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl3)); - SetDelegateInfo(dlgSoftFallbackTbl4, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl4)); - SetDelegateInfo(dlgSoftFallbackTbx1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx1)); - SetDelegateInfo(dlgSoftFallbackTbx2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx2)); - SetDelegateInfo(dlgSoftFallbackTbx3, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx3)); - SetDelegateInfo(dlgSoftFallbackTbx4, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx4)); - SetDelegateInfo(dlgSoftFallbackUnsignedShrImm64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackUnsignedShrImm64)); - - SetDelegateInfo(dlgSoftFloat16_32FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat16_32FPConvert)); - SetDelegateInfo(dlgSoftFloat16_64FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat16_64FPConvert)); - - SetDelegateInfo(dlgSoftFloat32FPAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPAdd)); - SetDelegateInfo(dlgSoftFloat32FPAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPAddFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPCompare, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompare)); - SetDelegateInfo(dlgSoftFloat32FPCompareEQ, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareEQ)); - SetDelegateInfo(dlgSoftFloat32FPCompareEQFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareEQFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPCompareGE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGE)); - SetDelegateInfo(dlgSoftFloat32FPCompareGEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGEFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPCompareGT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGT)); - SetDelegateInfo(dlgSoftFloat32FPCompareGTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGTFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPCompareLE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLE)); - SetDelegateInfo(dlgSoftFloat32FPCompareLEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLEFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPCompareLT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLT)); - SetDelegateInfo(dlgSoftFloat32FPCompareLTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLTFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPDiv, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPDiv)); - SetDelegateInfo(dlgSoftFloat32FPMax, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMax)); - SetDelegateInfo(dlgSoftFloat32FPMaxFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMaxFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPMaxNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMaxNum)); - SetDelegateInfo(dlgSoftFloat32FPMaxNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMaxNumFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPMin, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMin)); - SetDelegateInfo(dlgSoftFloat32FPMinFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMinFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPMinNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMinNum)); - SetDelegateInfo(dlgSoftFloat32FPMinNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMinNumFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPMul, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMul)); - SetDelegateInfo(dlgSoftFloat32FPMulFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulAdd)); - SetDelegateInfo(dlgSoftFloat32FPMulAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulAddFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulSub)); - SetDelegateInfo(dlgSoftFloat32FPMulSubFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulSubFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPMulX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulX)); - SetDelegateInfo(dlgSoftFloat32FPNegMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPNegMulAdd)); - SetDelegateInfo(dlgSoftFloat32FPNegMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPNegMulSub)); - SetDelegateInfo(dlgSoftFloat32FPRecipEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipEstimate)); - SetDelegateInfo(dlgSoftFloat32FPRecipEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipEstimateFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPRecipStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipStep)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPRecipStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipStepFused)); - SetDelegateInfo(dlgSoftFloat32FPRecpX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecpX)); - SetDelegateInfo(dlgSoftFloat32FPRSqrtEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtEstimate)); - SetDelegateInfo(dlgSoftFloat32FPRSqrtEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtEstimateFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPRSqrtStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtStep)); // A32 only. - SetDelegateInfo(dlgSoftFloat32FPRSqrtStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtStepFused)); - SetDelegateInfo(dlgSoftFloat32FPSqrt, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPSqrt)); - SetDelegateInfo(dlgSoftFloat32FPSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPSub)); - - SetDelegateInfo(dlgSoftFloat32_16FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32_16FPConvert)); - - SetDelegateInfo(dlgSoftFloat64FPAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPAdd)); - SetDelegateInfo(dlgSoftFloat64FPAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPAddFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPCompare, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompare)); - SetDelegateInfo(dlgSoftFloat64FPCompareEQ, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareEQ)); - SetDelegateInfo(dlgSoftFloat64FPCompareEQFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareEQFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPCompareGE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGE)); - SetDelegateInfo(dlgSoftFloat64FPCompareGEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGEFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPCompareGT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGT)); - SetDelegateInfo(dlgSoftFloat64FPCompareGTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGTFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPCompareLE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLE)); - SetDelegateInfo(dlgSoftFloat64FPCompareLEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLEFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPCompareLT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLT)); - SetDelegateInfo(dlgSoftFloat64FPCompareLTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLTFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPDiv, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPDiv)); - SetDelegateInfo(dlgSoftFloat64FPMax, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMax)); - SetDelegateInfo(dlgSoftFloat64FPMaxFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMaxFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPMaxNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMaxNum)); - SetDelegateInfo(dlgSoftFloat64FPMaxNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMaxNumFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPMin, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMin)); - SetDelegateInfo(dlgSoftFloat64FPMinFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMinFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPMinNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMinNum)); - SetDelegateInfo(dlgSoftFloat64FPMinNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMinNumFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPMul, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMul)); - SetDelegateInfo(dlgSoftFloat64FPMulFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulAdd)); - SetDelegateInfo(dlgSoftFloat64FPMulAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulAddFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulSub)); - SetDelegateInfo(dlgSoftFloat64FPMulSubFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulSubFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPMulX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulX)); - SetDelegateInfo(dlgSoftFloat64FPNegMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPNegMulAdd)); - SetDelegateInfo(dlgSoftFloat64FPNegMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPNegMulSub)); - SetDelegateInfo(dlgSoftFloat64FPRecipEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipEstimate)); - SetDelegateInfo(dlgSoftFloat64FPRecipEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipEstimateFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPRecipStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipStep)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPRecipStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipStepFused)); - SetDelegateInfo(dlgSoftFloat64FPRecpX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecpX)); - SetDelegateInfo(dlgSoftFloat64FPRSqrtEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtEstimate)); - SetDelegateInfo(dlgSoftFloat64FPRSqrtEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtEstimateFpscr)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPRSqrtStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtStep)); // A32 only. - SetDelegateInfo(dlgSoftFloat64FPRSqrtStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtStepFused)); - SetDelegateInfo(dlgSoftFloat64FPSqrt, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPSqrt)); - SetDelegateInfo(dlgSoftFloat64FPSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPSub)); - - SetDelegateInfo(dlgSoftFloat64_16FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64_16FPConvert)); + SetDelegateInfo(typeof(SoftFloat64_16).GetMethod(nameof(SoftFloat64_16.FPConvert))); } - - private delegate double MathAbs(double value); - private delegate double MathCeiling(double a); - private delegate double MathFloor(double d); - private delegate double MathRound(double value, MidpointRounding mode); - private delegate double MathTruncate(double d); - - private delegate float MathFAbs(float x); - private delegate float MathFCeiling(float x); - private delegate float MathFFloor(float x); - private delegate float MathFRound(float x, MidpointRounding mode); - private delegate float MathFTruncate(float x); - - private delegate void NativeInterfaceBreak(ulong address, int imm); - private delegate bool NativeInterfaceCheckSynchronization(); - private delegate void NativeInterfaceEnqueueForRejit(ulong address); - private delegate ulong NativeInterfaceGetCntfrqEl0(); - private delegate ulong NativeInterfaceGetCntpctEl0(); - private delegate ulong NativeInterfaceGetCntvctEl0(); - private delegate ulong NativeInterfaceGetCtrEl0(); - private delegate ulong NativeInterfaceGetDczidEl0(); - private delegate ulong NativeInterfaceGetFunctionAddress(ulong address); - private delegate void NativeInterfaceInvalidateCacheLine(ulong address); - private delegate byte NativeInterfaceReadByte(ulong address); - private delegate ushort NativeInterfaceReadUInt16(ulong address); - private delegate uint NativeInterfaceReadUInt32(ulong address); - private delegate ulong NativeInterfaceReadUInt64(ulong address); - private delegate V128 NativeInterfaceReadVector128(ulong address); - private delegate void NativeInterfaceSignalMemoryTracking(ulong address, ulong size, bool write); - private delegate void NativeInterfaceSupervisorCall(ulong address, int imm); - private delegate void NativeInterfaceThrowInvalidMemoryAccess(ulong address); - private delegate void NativeInterfaceUndefined(ulong address, int opCode); - private delegate void NativeInterfaceWriteByte(ulong address, byte value); - private delegate void NativeInterfaceWriteUInt16(ulong address, ushort value); - private delegate void NativeInterfaceWriteUInt32(ulong address, uint value); - private delegate void NativeInterfaceWriteUInt64(ulong address, ulong value); - private delegate void NativeInterfaceWriteVector128(ulong address, V128 value); - - private delegate ulong SoftFallbackCountLeadingSigns(ulong value, int size); - private delegate ulong SoftFallbackCountLeadingZeros(ulong value, int size); - private delegate uint SoftFallbackCrc32b(uint crc, byte value); - private delegate uint SoftFallbackCrc32cb(uint crc, byte value); - private delegate uint SoftFallbackCrc32ch(uint crc, ushort value); - private delegate uint SoftFallbackCrc32cw(uint crc, uint value); - private delegate uint SoftFallbackCrc32cx(uint crc, ulong value); - private delegate uint SoftFallbackCrc32h(uint crc, ushort value); - private delegate uint SoftFallbackCrc32w(uint crc, uint value); - private delegate uint SoftFallbackCrc32x(uint crc, ulong value); - private delegate V128 SoftFallbackDecrypt(V128 value, V128 roundKey); - private delegate V128 SoftFallbackEncrypt(V128 value, V128 roundKey); - private delegate uint SoftFallbackFixedRotate(uint hash_e); - private delegate V128 SoftFallbackHashChoose(V128 hash_abcd, uint hash_e, V128 wk); - private delegate V128 SoftFallbackHashLower(V128 hash_abcd, V128 hash_efgh, V128 wk); - private delegate V128 SoftFallbackHashMajority(V128 hash_abcd, uint hash_e, V128 wk); - private delegate V128 SoftFallbackHashParity(V128 hash_abcd, uint hash_e, V128 wk); - private delegate V128 SoftFallbackHashUpper(V128 hash_abcd, V128 hash_efgh, V128 wk); - private delegate V128 SoftFallbackInverseMixColumns(V128 value); - private delegate V128 SoftFallbackMixColumns(V128 value); - private delegate V128 SoftFallbackPolynomialMult64_128(ulong op1, ulong op2); - private delegate int SoftFallbackSatF32ToS32(float value); - private delegate long SoftFallbackSatF32ToS64(float value); - private delegate uint SoftFallbackSatF32ToU32(float value); - private delegate ulong SoftFallbackSatF32ToU64(float value); - private delegate int SoftFallbackSatF64ToS32(double value); - private delegate long SoftFallbackSatF64ToS64(double value); - private delegate uint SoftFallbackSatF64ToU32(double value); - private delegate ulong SoftFallbackSatF64ToU64(double value); - private delegate V128 SoftFallbackSha1SchedulePart1(V128 w0_3, V128 w4_7, V128 w8_11); - private delegate V128 SoftFallbackSha1SchedulePart2(V128 tw0_3, V128 w12_15); - private delegate V128 SoftFallbackSha256SchedulePart1(V128 w0_3, V128 w4_7); - private delegate V128 SoftFallbackSha256SchedulePart2(V128 w0_3, V128 w8_11, V128 w12_15); - private delegate long SoftFallbackSignedShrImm64(long value, long roundConst, int shift); - private delegate V128 SoftFallbackTbl1(V128 vector, int bytes, V128 tb0); - private delegate V128 SoftFallbackTbl2(V128 vector, int bytes, V128 tb0, V128 tb1); - private delegate V128 SoftFallbackTbl3(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2); - private delegate V128 SoftFallbackTbl4(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3); - private delegate V128 SoftFallbackTbx1(V128 dest, V128 vector, int bytes, V128 tb0); - private delegate V128 SoftFallbackTbx2(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1); - private delegate V128 SoftFallbackTbx3(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2); - private delegate V128 SoftFallbackTbx4(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3); - private delegate ulong SoftFallbackUnsignedShrImm64(ulong value, long roundConst, int shift); - - private delegate float SoftFloat16_32FPConvert(ushort valueBits); - - private delegate double SoftFloat16_64FPConvert(ushort valueBits); - - private delegate float SoftFloat32FPAdd(float value1, float value2); - private delegate float SoftFloat32FPAddFpscr(float value1, float value2, bool standardFpscr); - private delegate int SoftFloat32FPCompare(float value1, float value2, bool signalNaNs); - private delegate float SoftFloat32FPCompareEQ(float value1, float value2); - private delegate float SoftFloat32FPCompareEQFpscr(float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPCompareGE(float value1, float value2); - private delegate float SoftFloat32FPCompareGEFpscr(float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPCompareGT(float value1, float value2); - private delegate float SoftFloat32FPCompareGTFpscr(float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPCompareLE(float value1, float value2); - private delegate float SoftFloat32FPCompareLEFpscr(float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPCompareLT(float value1, float value2); - private delegate float SoftFloat32FPCompareLTFpscr(float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPDiv(float value1, float value2); - private delegate float SoftFloat32FPMax(float value1, float value2); - private delegate float SoftFloat32FPMaxFpscr(float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPMaxNum(float value1, float value2); - private delegate float SoftFloat32FPMaxNumFpscr(float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPMin(float value1, float value2); - private delegate float SoftFloat32FPMinFpscr(float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPMinNum(float value1, float value2); - private delegate float SoftFloat32FPMinNumFpscr(float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPMul(float value1, float value2); - private delegate float SoftFloat32FPMulFpscr(float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPMulAdd(float valueA, float value1, float value2); - private delegate float SoftFloat32FPMulAddFpscr(float valueA, float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPMulSub(float valueA, float value1, float value2); - private delegate float SoftFloat32FPMulSubFpscr(float valueA, float value1, float value2, bool standardFpscr); - private delegate float SoftFloat32FPMulX(float value1, float value2); - private delegate float SoftFloat32FPNegMulAdd(float valueA, float value1, float value2); - private delegate float SoftFloat32FPNegMulSub(float valueA, float value1, float value2); - private delegate float SoftFloat32FPRecipEstimate(float value); - private delegate float SoftFloat32FPRecipEstimateFpscr(float value, bool standardFpscr); - private delegate float SoftFloat32FPRecipStep(float value1, float value2); - private delegate float SoftFloat32FPRecipStepFused(float value1, float value2); - private delegate float SoftFloat32FPRecpX(float value); - private delegate float SoftFloat32FPRSqrtEstimate(float value); - private delegate float SoftFloat32FPRSqrtEstimateFpscr(float value, bool standardFpscr); - private delegate float SoftFloat32FPRSqrtStep(float value1, float value2); - private delegate float SoftFloat32FPRSqrtStepFused(float value1, float value2); - private delegate float SoftFloat32FPSqrt(float value); - private delegate float SoftFloat32FPSub(float value1, float value2); - - private delegate ushort SoftFloat32_16FPConvert(float value); - - private delegate double SoftFloat64FPAdd(double value1, double value2); - private delegate double SoftFloat64FPAddFpscr(double value1, double value2, bool standardFpscr); - private delegate int SoftFloat64FPCompare(double value1, double value2, bool signalNaNs); - private delegate double SoftFloat64FPCompareEQ(double value1, double value2); - private delegate double SoftFloat64FPCompareEQFpscr(double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPCompareGE(double value1, double value2); - private delegate double SoftFloat64FPCompareGEFpscr(double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPCompareGT(double value1, double value2); - private delegate double SoftFloat64FPCompareGTFpscr(double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPCompareLE(double value1, double value2); - private delegate double SoftFloat64FPCompareLEFpscr(double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPCompareLT(double value1, double value2); - private delegate double SoftFloat64FPCompareLTFpscr(double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPDiv(double value1, double value2); - private delegate double SoftFloat64FPMax(double value1, double value2); - private delegate double SoftFloat64FPMaxFpscr(double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPMaxNum(double value1, double value2); - private delegate double SoftFloat64FPMaxNumFpscr(double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPMin(double value1, double value2); - private delegate double SoftFloat64FPMinFpscr(double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPMinNum(double value1, double value2); - private delegate double SoftFloat64FPMinNumFpscr(double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPMul(double value1, double value2); - private delegate double SoftFloat64FPMulFpscr(double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPMulAdd(double valueA, double value1, double value2); - private delegate double SoftFloat64FPMulAddFpscr(double valueA, double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPMulSub(double valueA, double value1, double value2); - private delegate double SoftFloat64FPMulSubFpscr(double valueA, double value1, double value2, bool standardFpscr); - private delegate double SoftFloat64FPMulX(double value1, double value2); - private delegate double SoftFloat64FPNegMulAdd(double valueA, double value1, double value2); - private delegate double SoftFloat64FPNegMulSub(double valueA, double value1, double value2); - private delegate double SoftFloat64FPRecipEstimate(double value); - private delegate double SoftFloat64FPRecipEstimateFpscr(double value, bool standardFpscr); - private delegate double SoftFloat64FPRecipStep(double value1, double value2); - private delegate double SoftFloat64FPRecipStepFused(double value1, double value2); - private delegate double SoftFloat64FPRecpX(double value); - private delegate double SoftFloat64FPRSqrtEstimate(double value); - private delegate double SoftFloat64FPRSqrtEstimateFpscr(double value, bool standardFpscr); - private delegate double SoftFloat64FPRSqrtStep(double value1, double value2); - private delegate double SoftFloat64FPRSqrtStepFused(double value1, double value2); - private delegate double SoftFloat64FPSqrt(double value); - private delegate double SoftFloat64FPSub(double value1, double value2); - - private delegate ushort SoftFloat64_16FPConvert(double value); } } diff --git a/src/ARMeilleure/Translation/EmitterContext.cs b/src/ARMeilleure/Translation/EmitterContext.cs index 22b6b9842..3d800e16f 100644 --- a/src/ARMeilleure/Translation/EmitterContext.cs +++ b/src/ARMeilleure/Translation/EmitterContext.cs @@ -97,7 +97,7 @@ namespace ARMeilleure.Translation public virtual Operand Call(MethodInfo info, params Operand[] callArgs) { - nint funcPtr = Delegates.GetDelegateFuncPtr(info); + nint funcPtr = info.MethodHandle.GetFunctionPointer(); OperandType returnType = GetOperandType(info.ReturnType); diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index 4675abc49..894e825cf 100644 --- a/src/ARMeilleure/Translation/PTC/Ptc.cs +++ b/src/ARMeilleure/Translation/PTC/Ptc.cs @@ -29,8 +29,8 @@ namespace ARMeilleure.Translation.PTC { private const string OuterHeaderMagicString = "PTCohd\0\0"; private const string InnerHeaderMagicString = "PTCihd\0\0"; - - private const uint InternalVersion = 6997; //! To be incremented manually for each change to the ARMeilleure project. + + private const uint InternalVersion = 6998; //! To be incremented manually for each change to the ARMeilleure project. private const string ActualDir = "0"; private const string BackupDir = "1"; -- 2.47.1 From 850df38f1efe80fa8e4a8344882e7fbabafa0642 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 4 Jan 2025 06:54:46 -0600 Subject: [PATCH 276/722] cleaup imports --- src/ARMeilleure/Instructions/MathHelper.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/ARMeilleure/Instructions/MathHelper.cs b/src/ARMeilleure/Instructions/MathHelper.cs index acf9a5028..a11ce9d2e 100644 --- a/src/ARMeilleure/Instructions/MathHelper.cs +++ b/src/ARMeilleure/Instructions/MathHelper.cs @@ -1,9 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; namespace ARMeilleure.Instructions { -- 2.47.1 From 8a2bc3957a7826b712a2661553a184dd522e8a8d Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 5 Jan 2025 15:45:01 -0600 Subject: [PATCH 277/722] UI: fix: new updates not being autoloaded --- src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index 28b4262f1..bb98003cf 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -1,4 +1,5 @@ using DynamicData; +using DynamicData.Kernel; using Gommon; using LibHac; using LibHac.Common; @@ -1069,10 +1070,11 @@ namespace Ryujinx.Ava.Utilities.AppLibrary { if (update == null) return false; - var currentlySelected = TitleUpdates.Items.FindFirst(it => + var currentlySelected = TitleUpdates.Items.FirstOrOptional(it => it.TitleUpdate.TitleIdBase == update.TitleIdBase && it.IsSelected); - var shouldSelect = currentlySelected.Check(curr => curr.TitleUpdate?.Version < update.Version); + var shouldSelect = !currentlySelected.HasValue || + currentlySelected.Value.TitleUpdate.Version < update.Version; _titleUpdates.AddOrUpdate((update, shouldSelect)); @@ -1463,7 +1465,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary TitleUpdatesHelper.LoadTitleUpdatesJson(_virtualFileSystem, application.IdBase); it.AddOrUpdate(savedUpdates); - var selectedUpdate = savedUpdates.FindFirst(update => update.IsSelected); + var selectedUpdate = savedUpdates.FirstOrOptional(update => update.IsSelected); if (TryGetTitleUpdatesFromFile(application.Path, out var bundledUpdates)) { @@ -1475,7 +1477,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary if (!savedUpdateLookup.Contains(update)) { bool shouldSelect = false; - if (selectedUpdate.Check(su => su.Update?.Version < update.Version)) + if (!selectedUpdate.HasValue || selectedUpdate.Value.Item1.Version < update.Version) { shouldSelect = true; _titleUpdates.AddOrUpdate((selectedUpdate.Value.Update, false)); -- 2.47.1 From 987ab9be4140678d8d04d222f64b87d146e25c14 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 5 Jan 2025 16:03:34 -0600 Subject: [PATCH 278/722] Fix part 2 --- src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index bb98003cf..e79602eaf 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -1480,7 +1480,8 @@ namespace Ryujinx.Ava.Utilities.AppLibrary if (!selectedUpdate.HasValue || selectedUpdate.Value.Item1.Version < update.Version) { shouldSelect = true; - _titleUpdates.AddOrUpdate((selectedUpdate.Value.Update, false)); + if (selectedUpdate.HasValue) + _titleUpdates.AddOrUpdate((selectedUpdate.Value.Update, false)); selectedUpdate = (update, true); } -- 2.47.1 From cc8404127005d4ef371b645cc3ac428f3f48e65c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 5 Jan 2025 16:33:44 -0600 Subject: [PATCH 279/722] infra: feat: XML Solution --- Ryujinx.sln | 269 --------------------------------------------------- Ryujinx.slnx | 52 ++++++++++ 2 files changed, 52 insertions(+), 269 deletions(-) delete mode 100644 Ryujinx.sln create mode 100644 Ryujinx.slnx diff --git a/Ryujinx.sln b/Ryujinx.sln deleted file mode 100644 index 9e197e85f..000000000 --- a/Ryujinx.sln +++ /dev/null @@ -1,269 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.1.32228.430 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "src\Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Unicorn", "src\Ryujinx.Tests.Unicorn\Ryujinx.Tests.Unicorn.csproj", "{D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE", "src\Ryujinx.HLE\Ryujinx.HLE.csproj", "{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.ShaderTools", "src\Ryujinx.ShaderTools\Ryujinx.ShaderTools.csproj", "{3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Common", "src\Ryujinx.Common\Ryujinx.Common.csproj", "{5FD4E4F6-8928-4B3C-BE07-28A675C17226}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARMeilleure", "src\ARMeilleure\ARMeilleure.csproj", "{ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Gpu", "src\Ryujinx.Graphics.Gpu\Ryujinx.Graphics.Gpu.csproj", "{ADA7EA87-0D63-4D97-9433-922A2124401F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.GAL", "src\Ryujinx.Graphics.GAL\Ryujinx.Graphics.GAL.csproj", "{A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.OpenGL", "src\Ryujinx.Graphics.OpenGL\Ryujinx.Graphics.OpenGL.csproj", "{9558FB96-075D-4219-8FFF-401979DC0B69}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Texture", "src\Ryujinx.Graphics.Texture\Ryujinx.Graphics.Texture.csproj", "{E1B1AD28-289D-47B7-A106-326972240207}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Shader", "src\Ryujinx.Graphics.Shader\Ryujinx.Graphics.Shader.csproj", "{03B955CD-AD84-4B93-AAA7-BF17923BBAA5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec", "src\Ryujinx.Graphics.Nvdec\Ryujinx.Graphics.Nvdec.csproj", "{85A0FA56-DC01-4A42-8808-70DAC76BD66D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio", "src\Ryujinx.Audio\Ryujinx.Audio.csproj", "{806ACF6D-90B0-45D0-A1AC-5F220F3B3985}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Memory", "src\Ryujinx.Memory\Ryujinx.Memory.csproj", "{A5E6C691-9E22-4263-8F40-42F002CE66BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Memory", "src\Ryujinx.Tests.Memory\Ryujinx.Tests.Memory.csproj", "{D1CC5322-7325-4F6B-9625-194B30BE1296}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Cpu", "src\Ryujinx.Cpu\Ryujinx.Cpu.csproj", "{3DF35E3D-D844-4399-A9A1-A9E923264C17}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Device", "src\Ryujinx.Graphics.Device\Ryujinx.Graphics.Device.csproj", "{C3002C3C-7B09-4FE7-894A-372EDA22FC6E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Host1x", "src\Ryujinx.Graphics.Host1x\Ryujinx.Graphics.Host1x.csproj", "{C35F1536-7DE5-4F9D-9604-B5B4E1561947}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.Vp9", "src\Ryujinx.Graphics.Nvdec.Vp9\Ryujinx.Graphics.Nvdec.Vp9.csproj", "{B9AECA11-E248-4886-A10B-81B631CAAF29}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vic", "src\Ryujinx.Graphics.Vic\Ryujinx.Graphics.Vic.csproj", "{81BB2C11-9408-4EA3-822E-42987AF54429}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Video", "src\Ryujinx.Graphics.Video\Ryujinx.Graphics.Video.csproj", "{FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.OpenAL", "src\Ryujinx.Audio.Backends.OpenAL\Ryujinx.Audio.Backends.OpenAL.csproj", "{0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SoundIo", "src\Ryujinx.Audio.Backends.SoundIo\Ryujinx.Audio.Backends.SoundIo.csproj", "{716364DE-B988-41A6-BAB4-327964266ECC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input", "src\Ryujinx.Input\Ryujinx.Input.csproj", "{C16F112F-38C3-40BC-9F5F-4791112063D6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input.SDL2", "src\Ryujinx.Input.SDL2\Ryujinx.Input.SDL2.csproj", "{DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.SDL2.Common", "src\Ryujinx.SDL2.Common\Ryujinx.SDL2.Common.csproj", "{2D5D3A1D-5730-4648-B0AB-06C53CB910C0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL2", "src\Ryujinx.Audio.Backends.SDL2\Ryujinx.Audio.Backends.SDL2.csproj", "{D99A395A-8569-4DB0-B336-900647890052}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmpeg", "src\Ryujinx.Graphics.Nvdec.FFmpeg\Ryujinx.Graphics.Nvdec.FFmpeg.csproj", "{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vulkan", "src\Ryujinx.Graphics.Vulkan\Ryujinx.Graphics.Vulkan.csproj", "{D4D09B08-D580-4D69-B886-C35D2853F6C8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spv.Generator", "src\Spv.Generator\Spv.Generator.csproj", "{2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.LocaleGenerator", "src\Ryujinx.UI.LocaleGenerator\Ryujinx.UI.LocaleGenerator.csproj", "{77D01AD9-2C98-478E-AE1D-8F7100738FB4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Common", "src\Ryujinx.Horizon.Common\Ryujinx.Horizon.Common.csproj", "{77F96ECE-4952-42DB-A528-DED25572A573}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon", "src\Ryujinx.Horizon\Ryujinx.Horizon.csproj", "{AF34127A-3A92-43E5-8496-14960A50B1F1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Generators", "src\Ryujinx.Horizon.Kernel.Generators\Ryujinx.Horizon.Kernel.Generators.csproj", "{7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal", "src\Ryujinx.Graphics.Metal\Ryujinx.Graphics.Metal.csproj", "{C08931FA-1191-417A-864F-3882D93E683B}" - ProjectSection(ProjectDependencies) = postProject - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} = {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal.SharpMetalExtensions", "src/Ryujinx.Graphics.Metal.SharpMetalExtensions\Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj", "{81EA598C-DBA1-40B0-8DA4-4796B78F2037}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - .github\workflows\build.yml = .github\workflows\build.yml - .github\workflows\canary.yml = .github\workflows\canary.yml - Directory.Packages.props = Directory.Packages.props - .github\workflows\release.yml = .github\workflows\release.yml - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.Build.0 = Release|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.Build.0 = Release|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.Build.0 = Release|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.Build.0 = Release|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.Build.0 = Release|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.Build.0 = Release|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.Build.0 = Release|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.Build.0 = Release|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.Build.0 = Release|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.Build.0 = Release|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.Build.0 = Release|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.Build.0 = Release|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.Build.0 = Debug|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.ActiveCfg = Release|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.Build.0 = Release|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.Build.0 = Release|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.Build.0 = Release|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.Build.0 = Release|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.Build.0 = Release|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.Build.0 = Release|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.Build.0 = Release|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.Build.0 = Release|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.Build.0 = Release|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.Build.0 = Release|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.Build.0 = Release|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.Build.0 = Release|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.Build.0 = Release|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.Build.0 = Release|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.Build.0 = Release|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.Build.0 = Release|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.Build.0 = Release|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.Build.0 = Release|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.Build.0 = Release|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.Build.0 = Release|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.Build.0 = Release|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.Build.0 = Release|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.Build.0 = Release|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.Build.0 = Release|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {110169B3-3328-4730-8AB0-BA05BEF75C1A} - EndGlobalSection -EndGlobal diff --git a/Ryujinx.slnx b/Ryujinx.slnx new file mode 100644 index 000000000..b116ec0c2 --- /dev/null +++ b/Ryujinx.slnx @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.47.1 From b661bdd9978dd9470bfd9277360696d37c530e60 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 5 Jan 2025 16:41:08 -0600 Subject: [PATCH 280/722] Revert "infra: feat: XML Solution" This reverts commit cc8404127005d4ef371b645cc3ac428f3f48e65c. --- Ryujinx.sln | 269 +++++++++++++++++++++++++++++++++++++++++++++++++++ Ryujinx.slnx | 52 ---------- 2 files changed, 269 insertions(+), 52 deletions(-) create mode 100644 Ryujinx.sln delete mode 100644 Ryujinx.slnx diff --git a/Ryujinx.sln b/Ryujinx.sln new file mode 100644 index 000000000..9e197e85f --- /dev/null +++ b/Ryujinx.sln @@ -0,0 +1,269 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32228.430 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "src\Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Unicorn", "src\Ryujinx.Tests.Unicorn\Ryujinx.Tests.Unicorn.csproj", "{D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE", "src\Ryujinx.HLE\Ryujinx.HLE.csproj", "{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.ShaderTools", "src\Ryujinx.ShaderTools\Ryujinx.ShaderTools.csproj", "{3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Common", "src\Ryujinx.Common\Ryujinx.Common.csproj", "{5FD4E4F6-8928-4B3C-BE07-28A675C17226}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARMeilleure", "src\ARMeilleure\ARMeilleure.csproj", "{ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Gpu", "src\Ryujinx.Graphics.Gpu\Ryujinx.Graphics.Gpu.csproj", "{ADA7EA87-0D63-4D97-9433-922A2124401F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.GAL", "src\Ryujinx.Graphics.GAL\Ryujinx.Graphics.GAL.csproj", "{A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.OpenGL", "src\Ryujinx.Graphics.OpenGL\Ryujinx.Graphics.OpenGL.csproj", "{9558FB96-075D-4219-8FFF-401979DC0B69}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Texture", "src\Ryujinx.Graphics.Texture\Ryujinx.Graphics.Texture.csproj", "{E1B1AD28-289D-47B7-A106-326972240207}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Shader", "src\Ryujinx.Graphics.Shader\Ryujinx.Graphics.Shader.csproj", "{03B955CD-AD84-4B93-AAA7-BF17923BBAA5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec", "src\Ryujinx.Graphics.Nvdec\Ryujinx.Graphics.Nvdec.csproj", "{85A0FA56-DC01-4A42-8808-70DAC76BD66D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio", "src\Ryujinx.Audio\Ryujinx.Audio.csproj", "{806ACF6D-90B0-45D0-A1AC-5F220F3B3985}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Memory", "src\Ryujinx.Memory\Ryujinx.Memory.csproj", "{A5E6C691-9E22-4263-8F40-42F002CE66BE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Memory", "src\Ryujinx.Tests.Memory\Ryujinx.Tests.Memory.csproj", "{D1CC5322-7325-4F6B-9625-194B30BE1296}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Cpu", "src\Ryujinx.Cpu\Ryujinx.Cpu.csproj", "{3DF35E3D-D844-4399-A9A1-A9E923264C17}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Device", "src\Ryujinx.Graphics.Device\Ryujinx.Graphics.Device.csproj", "{C3002C3C-7B09-4FE7-894A-372EDA22FC6E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Host1x", "src\Ryujinx.Graphics.Host1x\Ryujinx.Graphics.Host1x.csproj", "{C35F1536-7DE5-4F9D-9604-B5B4E1561947}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.Vp9", "src\Ryujinx.Graphics.Nvdec.Vp9\Ryujinx.Graphics.Nvdec.Vp9.csproj", "{B9AECA11-E248-4886-A10B-81B631CAAF29}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vic", "src\Ryujinx.Graphics.Vic\Ryujinx.Graphics.Vic.csproj", "{81BB2C11-9408-4EA3-822E-42987AF54429}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Video", "src\Ryujinx.Graphics.Video\Ryujinx.Graphics.Video.csproj", "{FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.OpenAL", "src\Ryujinx.Audio.Backends.OpenAL\Ryujinx.Audio.Backends.OpenAL.csproj", "{0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SoundIo", "src\Ryujinx.Audio.Backends.SoundIo\Ryujinx.Audio.Backends.SoundIo.csproj", "{716364DE-B988-41A6-BAB4-327964266ECC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input", "src\Ryujinx.Input\Ryujinx.Input.csproj", "{C16F112F-38C3-40BC-9F5F-4791112063D6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input.SDL2", "src\Ryujinx.Input.SDL2\Ryujinx.Input.SDL2.csproj", "{DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.SDL2.Common", "src\Ryujinx.SDL2.Common\Ryujinx.SDL2.Common.csproj", "{2D5D3A1D-5730-4648-B0AB-06C53CB910C0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL2", "src\Ryujinx.Audio.Backends.SDL2\Ryujinx.Audio.Backends.SDL2.csproj", "{D99A395A-8569-4DB0-B336-900647890052}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmpeg", "src\Ryujinx.Graphics.Nvdec.FFmpeg\Ryujinx.Graphics.Nvdec.FFmpeg.csproj", "{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vulkan", "src\Ryujinx.Graphics.Vulkan\Ryujinx.Graphics.Vulkan.csproj", "{D4D09B08-D580-4D69-B886-C35D2853F6C8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spv.Generator", "src\Spv.Generator\Spv.Generator.csproj", "{2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.LocaleGenerator", "src\Ryujinx.UI.LocaleGenerator\Ryujinx.UI.LocaleGenerator.csproj", "{77D01AD9-2C98-478E-AE1D-8F7100738FB4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Common", "src\Ryujinx.Horizon.Common\Ryujinx.Horizon.Common.csproj", "{77F96ECE-4952-42DB-A528-DED25572A573}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon", "src\Ryujinx.Horizon\Ryujinx.Horizon.csproj", "{AF34127A-3A92-43E5-8496-14960A50B1F1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Generators", "src\Ryujinx.Horizon.Kernel.Generators\Ryujinx.Horizon.Kernel.Generators.csproj", "{7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal", "src\Ryujinx.Graphics.Metal\Ryujinx.Graphics.Metal.csproj", "{C08931FA-1191-417A-864F-3882D93E683B}" + ProjectSection(ProjectDependencies) = postProject + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} = {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal.SharpMetalExtensions", "src/Ryujinx.Graphics.Metal.SharpMetalExtensions\Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj", "{81EA598C-DBA1-40B0-8DA4-4796B78F2037}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + .github\workflows\build.yml = .github\workflows\build.yml + .github\workflows\canary.yml = .github\workflows\canary.yml + Directory.Packages.props = Directory.Packages.props + .github\workflows\release.yml = .github\workflows\release.yml + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.Build.0 = Release|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.Build.0 = Release|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.Build.0 = Release|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.Build.0 = Release|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.Build.0 = Release|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.Build.0 = Release|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.Build.0 = Release|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.Build.0 = Release|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.Build.0 = Release|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.Build.0 = Release|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.Build.0 = Release|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.Build.0 = Release|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.Build.0 = Debug|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.ActiveCfg = Release|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.Build.0 = Release|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.Build.0 = Release|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.Build.0 = Release|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.Build.0 = Release|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.Build.0 = Release|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.Build.0 = Release|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.Build.0 = Release|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.Build.0 = Release|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.Build.0 = Release|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.Build.0 = Release|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.Build.0 = Release|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.Build.0 = Release|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.Build.0 = Release|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.Build.0 = Release|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.Build.0 = Release|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.Build.0 = Release|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.Build.0 = Release|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.Build.0 = Release|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.Build.0 = Release|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.Build.0 = Release|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.Build.0 = Release|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.Build.0 = Release|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.Build.0 = Release|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.Build.0 = Release|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {110169B3-3328-4730-8AB0-BA05BEF75C1A} + EndGlobalSection +EndGlobal diff --git a/Ryujinx.slnx b/Ryujinx.slnx deleted file mode 100644 index b116ec0c2..000000000 --- a/Ryujinx.slnx +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- 2.47.1 From 845dd9a8db4d988f4b2c58dd905f25146c988b6d Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 5 Jan 2025 22:25:05 -0600 Subject: [PATCH 281/722] vk: regression: potentially fix various random graphical anomalies --- src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs index e79248a47..f7f78b613 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs @@ -168,13 +168,15 @@ namespace Ryujinx.Graphics.Vulkan return BinarySearch(list, offset, size) >= 0; } - public readonly IEnumerable FindOverlaps(int offset, int size) + public readonly List FindOverlaps(int offset, int size) { var list = _ranges; if (list == null) { - yield break; + return null; } + + List result = null; int index = BinarySearch(list, offset, size); @@ -187,10 +189,12 @@ namespace Ryujinx.Graphics.Vulkan do { - yield return list[index++]; + (result ??= []).Add(list[index++]); } while (index < list.Count && list[index].OverlapsWith(offset, size)); } + + return result; } private static int BinarySearch(List list, int offset, int size) -- 2.47.1 From 13efc3e544408c63289e3a0aec4d62b5d8c0ad73 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 6 Jan 2025 00:09:48 -0600 Subject: [PATCH 282/722] Switch back to nightly.link I'm pretty sure them not working was due to old links pointing to GreemDev/Ryujinx after the org change --- .github/workflows/nightly_pr_comment.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly_pr_comment.yml b/.github/workflows/nightly_pr_comment.yml index fb7cdb359..24d23d98b 100644 --- a/.github/workflows/nightly_pr_comment.yml +++ b/.github/workflows/nightly_pr_comment.yml @@ -37,11 +37,11 @@ jobs: if (!artifacts.length) { return core.error(`No artifacts found`); } - let body = `*You need to be logged into GitHub to download these files.*\n\nDownload the artifacts for this pull request:\n`; + let body = `Download the artifacts for this pull request:\n`; let hidden_debug_artifacts = `\n\n
Only for Developers\n`; for (const art of artifacts) { - const url = `https://github.com/Ryubing/Ryujinx/actions/runs/${run_id}/artifacts/${art.id}`; - if(art.name.includes('Debug')) { + const url = `https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip`; + if (art.name.includes('Debug')) { hidden_debug_artifacts += `\n* [${art.name}](${url})`; } else { body += `\n* [${art.name}](${url})`; -- 2.47.1 From 2c24df02475dc7efc473b2a707b350d1239e5301 Mon Sep 17 00:00:00 2001 From: Piplup <100526773+piplup55@users.noreply.github.com> Date: Mon, 6 Jan 2025 07:07:16 +0000 Subject: [PATCH 283/722] reworked workflows (#497) this makes `canary.yml` follow the same order of steps as `release.yml`, adding appimages to the canary versions and i fixed some bugs with the `build-appimage.sh` mainly fixing linking to the old repo --- .github/workflows/canary.yml | 71 +++++++++---------- .github/workflows/release.yml | 18 ++--- distribution/linux/appimage/build-appimage.sh | 2 +- 3 files changed, 45 insertions(+), 46 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index a0653f540..ae798a076 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -108,6 +108,7 @@ jobs: sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs + sed -r --in-place '/^Name=Ryujinx$/s/Name=Ryujinx/Name=Ryujinx-Canary/' distribution/linux/Ryujinx.desktop shell: bash - name: Create output dir @@ -115,71 +116,69 @@ jobs: - name: Publish run: | - dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_ava/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained + dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained - name: Packing Windows builds if: matrix.platform.os == 'windows-latest' run: | - pushd publish_ava + pushd publish rm publish/libarmeilleure-jitsupport.dylib - 7z a ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish + 7z a ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish popd shell: bash - name: Packing Linux builds if: matrix.platform.os == 'ubuntu-latest' run: | - pushd publish_ava + pushd publish rm publish/libarmeilleure-jitsupport.dylib chmod +x publish/Ryujinx.sh publish/Ryujinx - tar -czvf ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish + tar -czvf ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish popd shell: bash - #- name: Build AppImage (Linux) - # if: matrix.platform.os == 'ubuntu-latest' - # run: | - # BUILD_VERSION="${{ steps.version_info.outputs.build_version }}" - # PLATFORM_NAME="${{ matrix.platform.name }}" + - name: Build AppImage (Linux) + if: matrix.platform.os == 'ubuntu-latest' + run: | + BUILD_VERSION="${{ steps.version_info.outputs.build_version }}" + PLATFORM_NAME="${{ matrix.platform.name }}" - # sudo apt install -y zsync desktop-file-utils appstream + sudo apt install -y zsync desktop-file-utils appstream - # mkdir -p tools - # export PATH="$PATH:$(readlink -f tools)" + mkdir -p tools + export PATH="$PATH:$(readlink -f tools)" # Setup appimagetool - # wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" - # chmod +x tools/appimagetool - # chmod +x distribution/linux/appimage/build-appimage.sh + wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" + chmod +x tools/appimagetool + chmod +x distribution/linux/appimage/build-appimage.sh # Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name) - # if [ "$PLATFORM_NAME" = "linux-x64" ]; then - # ARCH_NAME=x64 - # export ARCH=x86_64 - # elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then - # ARCH_NAME=arm64 - # export ARCH=aarch64 - # else - # echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME"" - # exit 1 - # fi + if [ "$PLATFORM_NAME" = "linux-x64" ]; then + ARCH_NAME=x64 + export ARCH=x86_64 + elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then + ARCH_NAME=arm64 + export ARCH=aarch64 + else + echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME"" + exit 1 + fi - # export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync" - # BUILDDIR=publish_ava OUTDIR=publish_ava_appimage distribution/linux/appimage/build-appimage.sh + export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync" + BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh - # Add to release output - # pushd publish_ava_appimage - # mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage - # mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync - # popd - # shell: bash + pushd publish_appimage + mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage + mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync + popd + shell: bash - name: Pushing new release uses: ncipollo/release-action@v1 with: name: ${{ steps.version_info.outputs.build_version }} - artifacts: "release_output/*.tar.gz,release_output/*.zip" - #artifacts: "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*" + artifacts: "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*" tag: ${{ steps.version_info.outputs.build_version }} body: | # Canary builds: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 584507d75..d8bbdd175 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -121,6 +121,15 @@ jobs: 7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish popd shell: bash + + - name: Packing Linux builds + if: matrix.platform.os == 'ubuntu-latest' + run: | + pushd publish + chmod +x Ryujinx.sh Ryujinx + tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish + popd + shell: bash - name: Build AppImage (Linux) if: matrix.platform.os == 'ubuntu-latest' @@ -157,15 +166,6 @@ jobs: mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync popd - shell: bash - - - name: Packing Linux builds - if: matrix.platform.os == 'ubuntu-latest' - run: | - pushd publish - chmod +x Ryujinx.sh Ryujinx - tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish - popd shell: bash - name: Pushing new release diff --git a/distribution/linux/appimage/build-appimage.sh b/distribution/linux/appimage/build-appimage.sh index 9b52928f8..a9de4866b 100755 --- a/distribution/linux/appimage/build-appimage.sh +++ b/distribution/linux/appimage/build-appimage.sh @@ -6,7 +6,7 @@ cd "$ROOTDIR" BUILDDIR=${BUILDDIR:-publish} OUTDIR=${OUTDIR:-publish_appimage} -UFLAG=${UFLAG:-"gh-releases-zsync|GreemDev|ryujinx|latest|*-x64.AppImage.zsync"} +UFLAG=${UFLAG:-"gh-releases-zsync|Ryubing|ryujinx|latest|*-x64.AppImage.zsync"} rm -rf AppDir mkdir -p AppDir/usr/bin -- 2.47.1 From 6fa2bfc736f4b1f4d2da2d5055c1b303adacf6b1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 6 Jan 2025 01:15:39 -0600 Subject: [PATCH 284/722] fix canary ci --- .github/workflows/canary.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index ae798a076..6d00036ee 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -122,7 +122,7 @@ jobs: if: matrix.platform.os == 'windows-latest' run: | pushd publish - rm publish/libarmeilleure-jitsupport.dylib + rm libarmeilleure-jitsupport.dylib 7z a ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish popd shell: bash @@ -131,8 +131,8 @@ jobs: if: matrix.platform.os == 'ubuntu-latest' run: | pushd publish - rm publish/libarmeilleure-jitsupport.dylib - chmod +x publish/Ryujinx.sh publish/Ryujinx + rm libarmeilleure-jitsupport.dylib + chmod +x Ryujinx.sh Ryujinx tar -czvf ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish popd shell: bash -- 2.47.1 From 159ff828a17d7b691dcfc37bb284851fc7d61882 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 6 Jan 2025 01:22:05 -0600 Subject: [PATCH 285/722] give canary appimages the ryujinx-canary name --- .github/workflows/canary.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 6d00036ee..b599fdb26 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -169,8 +169,8 @@ jobs: BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh pushd publish_appimage - mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage - mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync + mv Ryujinx.AppImage ../release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage + mv Ryujinx.AppImage.zsync ../release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync popd shell: bash -- 2.47.1 From 9726b0feb00b65294f85271107d79e4bb56dedd7 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 6 Jan 2025 01:27:37 -0600 Subject: [PATCH 286/722] Use Canary-Releases for AppImage Canary updates --- .github/workflows/canary.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index b599fdb26..d93d4fbed 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -165,7 +165,7 @@ jobs: exit 1 fi - export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync" + export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|Canary-Releases|latest|*-$ARCH_NAME.AppImage.zsync" BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh pushd publish_appimage -- 2.47.1 From c4cc657b89a87101470b0f4412200076db1745aa Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 6 Jan 2025 07:31:57 -0600 Subject: [PATCH 287/722] UI: Compatibility List Viewer --- Directory.Packages.props | 1 + .../LocaleGenerator.cs | 2 +- src/Ryujinx/Assets/locales.json | 200 ++++++++++++++++++ src/Ryujinx/Ryujinx.csproj | 14 ++ src/Ryujinx/RyujinxApp.axaml | 3 + .../UI/Helpers/PlayabilityStatusConverter.cs | 28 +++ .../UI/Views/Main/MainMenuBarView.axaml | 4 + .../UI/Views/Main/MainMenuBarView.axaml.cs | 3 + .../Utilities/Compat/CompatibilityCsv.cs | 152 +++++++++++++ .../Utilities/Compat/CompatibilityHelper.cs | 32 +++ .../Utilities/Compat/CompatibilityList.axaml | 59 ++++++ .../Compat/CompatibilityList.axaml.cs | 56 +++++ .../Compat/CompatibilityViewModel.cs | 59 ++++++ 13 files changed, 612 insertions(+), 1 deletion(-) create mode 100644 src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs create mode 100644 src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs create mode 100644 src/Ryujinx/Utilities/Compat/CompatibilityHelper.cs create mode 100644 src/Ryujinx/Utilities/Compat/CompatibilityList.axaml create mode 100644 src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs create mode 100644 src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index ab3bc39b8..203f40588 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -44,6 +44,7 @@ + diff --git a/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs b/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs index c69eca7ee..2ba0b60a3 100644 --- a/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs +++ b/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs @@ -19,7 +19,7 @@ namespace Ryujinx.UI.LocaleGenerator StringBuilder enumSourceBuilder = new(); enumSourceBuilder.AppendLine("namespace Ryujinx.Ava.Common.Locale;"); - enumSourceBuilder.AppendLine("internal enum LocaleKeys"); + enumSourceBuilder.AppendLine("public enum LocaleKeys"); enumSourceBuilder.AppendLine("{"); foreach (var line in lines) { diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index a04bd0538..e7a55bf9d 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -22596,6 +22596,206 @@ "zh_CN": "降低自定义刷新率:", "zh_TW": "" } + }, + { + "ID": "CompatibilityListSearchBoxWatermark", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Search compatibility entries...", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListOpen", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Open Compatibility List", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListOnlyShowOwnedGames", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Only show owned games", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListPlayable", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Playable", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListIngame", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Ingame", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListMenus", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Menus", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListBoots", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Boots", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListNothing", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Nothing", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } } ] } \ No newline at end of file diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 0991cf9ce..55f683af9 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -61,6 +61,7 @@ + @@ -113,6 +114,10 @@ Designer + + + + MSBuild:Compile @@ -163,4 +168,13 @@ + + + CompatibilityList.axaml + Code + + + + + diff --git a/src/Ryujinx/RyujinxApp.axaml b/src/Ryujinx/RyujinxApp.axaml index e07d7ff26..aca69645a 100644 --- a/src/Ryujinx/RyujinxApp.axaml +++ b/src/Ryujinx/RyujinxApp.axaml @@ -6,6 +6,9 @@ + + avares://Ryujinx/Assets/Fonts/Mono/#JetBrains Mono + diff --git a/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs b/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs new file mode 100644 index 000000000..a894f0246 --- /dev/null +++ b/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs @@ -0,0 +1,28 @@ +using Avalonia.Data.Converters; +using Avalonia.Media; +using Gommon; +using Ryujinx.Ava.Common.Locale; +using System; +using System.Globalization; + +namespace Ryujinx.Ava.UI.Helpers +{ + public class PlayabilityStatusConverter : IValueConverter + { + private static readonly Lazy _shared = new(() => new()); + public static PlayabilityStatusConverter Shared => _shared.Value; + + public object Convert(object? value, Type _, object? __, CultureInfo ___) => + value.Cast() switch + { + LocaleKeys.CompatibilityListNothing or + LocaleKeys.CompatibilityListBoots or + LocaleKeys.CompatibilityListMenus => Brushes.Red, + LocaleKeys.CompatibilityListIngame => Brushes.Yellow, + _ => Brushes.ForestGreen + }; + + public object ConvertBack(object? value, Type _, object? __, CultureInfo ___) + => throw new NotSupportedException(); + } +} diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 78848e89b..d2f050c5a 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -304,6 +304,10 @@ Header="{ext:Locale MenuBarHelpCheckForUpdates}" Icon="{ext:Icon mdi-update}" ToolTip.Tip="{ext:Locale CheckUpdatesTooltip}" /> + await AboutWindow.Show(); public void CloseWindow(object sender, RoutedEventArgs e) => Window.Close(); + + private async void OpenCompatibilityList(object sender, RoutedEventArgs e) => await CompatibilityList.Show(); } } diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs new file mode 100644 index 000000000..4abe7465e --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -0,0 +1,152 @@ +using Gommon; +using nietras.SeparatedValues; +using Ryujinx.Ava.Common.Locale; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Ryujinx.Ava.Utilities.Compat +{ + public class CompatibilityCsv + { + public static CompatibilityCsv Shared { get; set; } + + public CompatibilityCsv(SepReader reader) + { + var entries = new List(); + + foreach (var row in reader) + { + entries.Add(new CompatibilityEntry(reader.Header, row)); + } + + Entries = entries.Where(x => x.Status != null) + .OrderBy(it => it.GameName).ToArray(); + } + + public CompatibilityEntry[] Entries { get; } + } + + public class CompatibilityEntry + { + public CompatibilityEntry(SepReaderHeader header, SepReader.Row row) + { + IssueNumber = row[header.IndexOf("issue_number")].Parse(); + + var titleIdRow = row[header.IndexOf("extracted_game_id")].ToString(); + if (!string.IsNullOrEmpty(titleIdRow)) + TitleId = titleIdRow; + + var issueTitleRow = row[header.IndexOf("issue_title")].ToString(); + if (TitleId.HasValue) + issueTitleRow = issueTitleRow.ReplaceIgnoreCase($" - {TitleId}", string.Empty); + + GameName = issueTitleRow.Trim().Trim('"'); + + IssueLabels = row[header.IndexOf("issue_labels")].ToString().Split(';'); + Status = row[header.IndexOf("extracted_status")].ToString().ToLower() switch + { + "playable" => LocaleKeys.CompatibilityListPlayable, + "ingame" => LocaleKeys.CompatibilityListIngame, + "menus" => LocaleKeys.CompatibilityListMenus, + "boots" => LocaleKeys.CompatibilityListBoots, + "nothing" => LocaleKeys.CompatibilityListNothing, + _ => null + }; + + if (row[header.IndexOf("last_event_date")].TryParse(out var dt)) + LastEvent = dt; + + if (row[header.IndexOf("events_count")].TryParse(out var eventsCount)) + EventCount = eventsCount; + } + + public int IssueNumber { get; } + public string GameName { get; } + public Optional TitleId { get; } + public string[] IssueLabels { get; } + public LocaleKeys? Status { get; } + public DateTime LastEvent { get; } + public int EventCount { get; } + + public string LocalizedStatus => LocaleManager.Instance[Status!.Value]; + public string FormattedTitleId => TitleId.OrElse(new string(' ', 16)); + + public string FormattedIssueLabels => IssueLabels + .Where(it => !it.StartsWithIgnoreCase("status")) + .Select(FormatLabelName) + .JoinToString(", "); + + public override string ToString() + { + var sb = new StringBuilder("CompatibilityEntry: {"); + sb.Append($"{nameof(IssueNumber)}={IssueNumber}, "); + sb.Append($"{nameof(GameName)}=\"{GameName}\", "); + sb.Append($"{nameof(TitleId)}={TitleId}, "); + sb.Append($"{nameof(IssueLabels)}=\"{IssueLabels}\", "); + sb.Append($"{nameof(Status)}=\"{Status}\", "); + sb.Append($"{nameof(LastEvent)}=\"{LastEvent}\", "); + sb.Append($"{nameof(EventCount)}={EventCount}"); + sb.Append('}'); + + return sb.ToString(); + } + + public static string FormatLabelName(string labelName) => labelName.ToLower() switch + { + "audio" => "Audio", + "bug" => "Bug", + "cpu" => "CPU", + "gpu" => "GPU", + "gui" => "GUI", + "help wanted" => "Help Wanted", + "horizon" => "Horizon", + "infra" => "Project Infra", + "invalid" => "Invalid", + "kernel" => "Kernel", + "ldn" => "LDN", + "linux" => "Linux", + "macos" => "macOS", + "question" => "Question", + "windows" => "Windows", + "graphics-backend:opengl" => "Graphics: OpenGL", + "graphics-backend:vulkan" => "Graphics: Vulkan", + "ldn-works" => "LDN Works", + "ldn-untested" => "LDN Untested", + "ldn-broken" => "LDN Broken", + "ldn-partial" => "Partial LDN", + "nvdec" => "NVDEC", + "services" => "NX Services", + "services-horizon" => "Horizon OS Services", + "slow" => "Runs Slow", + "crash" => "Crashes", + "deadlock" => "Deadlock", + "regression" => "Regression", + "opengl" => "OpenGL", + "opengl-backend-bug" => "OpenGL Backend Bug", + "vulkan-backend-bug" => "Vulkan Backend Bug", + "mac-bug" => "Mac-specific Bug(s)", + "amd-vendor-bug" => "AMD GPU Bug", + "intel-vendor-bug" => "Intel GPU Bug", + "loader-allocator" => "Loader Allocator", + "audout" => "AudOut", + "32-bit" => "32-bit Game", + "UE4" => "Unreal Engine 4", + "homebrew" => "Homebrew Content", + "online-broken" => "Online Broken", + _ => Capitalize(labelName) + }; + + public static string Capitalize(string value) + { + if (value == string.Empty) + return string.Empty; + + var firstChar = value[0]; + var rest = value[1..]; + + return $"{char.ToUpper(firstChar)}{rest}"; + } + } +} diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityHelper.cs b/src/Ryujinx/Utilities/Compat/CompatibilityHelper.cs new file mode 100644 index 000000000..6fee23883 --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityHelper.cs @@ -0,0 +1,32 @@ +using Gommon; +using nietras.SeparatedValues; +using Ryujinx.Common.Configuration; +using System.Net.Http; +using System.Threading.Tasks; + +namespace Ryujinx.Ava.Utilities.Compat +{ + public static class CompatibilityHelper + { + private static readonly string _downloadUrl = + "https://gist.githubusercontent.com/ezhevita/b41ed3bf64d0cc01269cab036e884f3d/raw/002b1a1c1a5f7a83276625e8c479c987a5f5b722/Ryujinx%2520Games%2520List%2520Compatibility.csv"; + + private static readonly FilePath _compatCsvPath = new FilePath(AppDataManager.BaseDirPath) / "system" / "compatibility.csv"; + + public static async Task DownloadAsync() + { + if (_compatCsvPath.ExistsAsFile) + return Sep.Reader().FromFile(_compatCsvPath.Path); + + using var httpClient = new HttpClient(); + var compatCsv = await httpClient.GetStringAsync(_downloadUrl); + _compatCsvPath.WriteAllText(compatCsv); + return Sep.Reader().FromText(compatCsv); + } + + public static async Task InitAsync() + { + CompatibilityCsv.Shared = new CompatibilityCsv(await DownloadAsync()); + } + } +} diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml new file mode 100644 index 000000000..fd912ad05 --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs new file mode 100644 index 000000000..68b645efd --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -0,0 +1,56 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using Avalonia.Styling; +using FluentAvalonia.UI.Controls; +using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.UI.Windows; +using System.Threading.Tasks; + +namespace Ryujinx.Ava.Utilities.Compat +{ + public partial class CompatibilityList : UserControl + { + public static async Task Show() + { + await CompatibilityHelper.InitAsync(); + + ContentDialog contentDialog = new() + { + PrimaryButtonText = string.Empty, + SecondaryButtonText = string.Empty, + CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose], + Content = new CompatibilityList { DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) } + }; + + Style closeButton = new(x => x.Name("CloseButton")); + closeButton.Setters.Add(new Setter(WidthProperty, 80d)); + + Style closeButtonParent = new(x => x.Name("CommandSpace")); + closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, Avalonia.Layout.HorizontalAlignment.Right)); + + contentDialog.Styles.Add(closeButton); + contentDialog.Styles.Add(closeButtonParent); + + await ContentDialogHelper.ShowAsync(contentDialog); + } + + public CompatibilityList() + { + InitializeComponent(); + } + + private void TextBox_OnTextChanged(object? sender, TextChangedEventArgs e) + { + if (DataContext is not CompatibilityViewModel cvm) + return; + + if (sender is not TextBox searchBox) + return; + + cvm.Search(searchBox.Text); + } + } +} + diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs b/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs new file mode 100644 index 000000000..2490f222a --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs @@ -0,0 +1,59 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using ExCSS; +using Gommon; +using Ryujinx.Ava.Utilities.AppLibrary; +using System.Collections.Generic; +using System.Linq; + +namespace Ryujinx.Ava.Utilities.Compat +{ + public partial class CompatibilityViewModel : ObservableObject + { + [ObservableProperty] private bool _onlyShowOwnedGames; + + private IEnumerable _currentEntries = CompatibilityCsv.Shared.Entries; + private readonly string[] _ownedGameTitleIds = []; + private readonly ApplicationLibrary _appLibrary; + + public IEnumerable CurrentEntries => OnlyShowOwnedGames + ? _currentEntries.Where(x => + x.TitleId.Check(tid => _ownedGameTitleIds.ContainsIgnoreCase(tid)) + || _appLibrary.Applications.Items.Any(a => a.Name.EqualsIgnoreCase(x.GameName))) + : _currentEntries; + + public CompatibilityViewModel() {} + + public CompatibilityViewModel(ApplicationLibrary appLibrary) + { + _appLibrary = appLibrary; + _ownedGameTitleIds = appLibrary.Applications.Keys.Select(x => x.ToString("X16")).ToArray(); + + PropertyChanged += (_, args) => + { + if (args.PropertyName is nameof(OnlyShowOwnedGames)) + OnPropertyChanged(nameof(CurrentEntries)); + }; + } + + public void Search(string searchTerm) + { + if (string.IsNullOrEmpty(searchTerm)) + { + SetEntries(CompatibilityCsv.Shared.Entries); + return; + } + + SetEntries(CompatibilityCsv.Shared.Entries.Where(x => + x.GameName.ContainsIgnoreCase(searchTerm) + || x.TitleId.Check(tid => tid.ContainsIgnoreCase(searchTerm)))); + } + + private void SetEntries(IEnumerable entries) + { +#pragma warning disable MVVMTK0034 + _currentEntries = entries.ToList(); +#pragma warning restore MVVMTK0034 + OnPropertyChanged(nameof(CurrentEntries)); + } + } +} -- 2.47.1 From 4193a37a911079e23c20aa41f916cc5e58b454db Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 6 Jan 2025 07:38:11 -0600 Subject: [PATCH 288/722] these files are a little bit needed --- src/Ryujinx/Assets/Fonts/Mono/AUTHORS.txt | 10 ++ .../Fonts/Mono/JetBrainsMonoNL-Bold.ttf | Bin 0 -> 210988 bytes .../Fonts/Mono/JetBrainsMonoNL-BoldItalic.ttf | Bin 0 -> 214132 bytes .../Fonts/Mono/JetBrainsMonoNL-Italic.ttf | Bin 0 -> 211624 bytes .../Fonts/Mono/JetBrainsMonoNL-Regular.ttf | Bin 0 -> 208576 bytes src/Ryujinx/Assets/Fonts/Mono/OFL.txt | 93 ++++++++++++++++++ 6 files changed, 103 insertions(+) create mode 100644 src/Ryujinx/Assets/Fonts/Mono/AUTHORS.txt create mode 100644 src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Bold.ttf create mode 100644 src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-BoldItalic.ttf create mode 100644 src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Italic.ttf create mode 100644 src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Regular.ttf create mode 100644 src/Ryujinx/Assets/Fonts/Mono/OFL.txt diff --git a/src/Ryujinx/Assets/Fonts/Mono/AUTHORS.txt b/src/Ryujinx/Assets/Fonts/Mono/AUTHORS.txt new file mode 100644 index 000000000..881494169 --- /dev/null +++ b/src/Ryujinx/Assets/Fonts/Mono/AUTHORS.txt @@ -0,0 +1,10 @@ +# This is the official list of project authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS.txt file. +# See the latter for an explanation. +# +# Names should be added to this file as: +# Name or Organization + +JetBrains <> +Philipp Nurullin +Konstantin Bulenkov diff --git a/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Bold.ttf b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f78f84fb433cb7179e11ebb85d92ebe9fca1dde5 GIT binary patch literal 210988 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

A*Gn0W7LJTJ^ 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 MKE+@1AmrQs0SBL!IsgCw literal 0 HcmV?d00001 diff --git a/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-BoldItalic.ttf b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9fb8c8325692c0a9f79c2fdbb25e3cb07419e881 GIT binary patch literal 214132 zcmcG%2YeO9+qXZnGn0hgiv$j*B%vhq-Z7yU>5w2oLa%~=h}f_TSg?0RY>23bq5?KV zMQqp`DoU|oFW4pj>ppW1Mt=Id|L1w1H+(L>b7p5}XYTu++1cHbjnYb~Dr%`RYF^)7 zz55(``0%63~Wu@j@OpYS<~k%T>L_n>rdzNJ4)4EHGA%)lC(=Y^;c>(_10Z8 zr)2TGD&d+{*mgOed`6D?@Uy8sye@e4_lbw+nRHu>ebQ8r*n`6< zW&Sw)20Iu2KCyI|NoT)XWRKKOS|cfw)7gqY# z58r05oM1Ow!zzus#!~Ok{}1_yx|F>y|%|G@e>J~psAEO}sOZ7LUVxtt2mr6HCmY;+k z4aZRbTg*xx=P28keoOv@{~x5<`(J6QuPvyr>Hj-Q4`X*o*ti{Ja-e+bB8Kzmc*-Ey{%chh(r{iX75HHVpHW{_ zr1UrP{>{&2^Tozx5&O%$^iPzXqmyYFhyRAEK|Lw{Vc*2uCpJH7Y$rZ9AwPw*rOr|O zlYPqO{ZpNiSGG(tUHTUJ9HaCQ`Xanen)6=5F5>IKe^L4-={!&A8>sXzHGe1P`qBgB z$-JJ5-BcWl4P>sAIZdeUZKwK^mNF81Vvm$RBu@EU`U0vU3#5)lkm{f8BXKJGNf}8? zIcZltNX?NwNXxinJpQfSatx`9HYD<;&4To)Y7&_@WL}hhr}`pg#4fpzjLXuuNlSjp z#xm}q^dO3T6Z^{XQhjYpdH}TXlzu~5iCY;%QcqcX$Z?JVvBzs@>bxcPkT^-rSJFrJ zEiFYWfE-KaAgM1CM!~Tlb`m=>KmM)V(mt6pr486H;qO!&ieigIY)F0dKam!@h|MKW z_7!^)3yEzK2VzS(cB=1EPWmzl#6Q(3%Q#Bdn10EArT3KKIntNHQxUi;tSa}1Z11EtsjUVWbSn!+obQ(9@$s&I)apyeoGzFckx9P5Z_51DU$w9l#@DS zyVR3v6E+uLCgMkI#i>;*0WRUu$zp3&mJvO;bK1-ca zx5PkA=mYIR>JX%?97*6 zgzJ*&8_+92%4~%da1Y3_${u$upI5`p@I2fITi`wr9}R+eFcV5Z%3TYWf|R)%Zh^jV z0xSnP_Heigq)m4~$~GzONuIRll%$SEE5LfV6;6c~AZ6kpHd_E<53y+*I0IxKDbtl$ zD@EmaGJiaz)ZrhLDwRG+Tcvz|kTEIt8c^o*iKMTA86f-1c0pq1C6KbYa52n*bCL`} zl}{(ejP$)SECPwEk6|}3uGK|Qi#C3NNGDD0;XJMg_xz=azR5Tce=Pv% zzqId75L?M{|At)Qkrx4pYZ*%tYto){j_l*$w7G9m@QK$~e3eJ_L#52Y_S9wuFB|e4YjMfwHCITl$}bj~ zC|{4X9HTRcuLpwoLdpoT-vE$01^S+t*TtsO;5d->S&%t)Wb!jUEPWUx9;6Llqf%Eh zkaC5P>T^nE8^}325ic^v9t3GKbtK|UV)JECl=%k4rt?7R5G6m69*zp~S@zik(&m~; zB)<%a>lUdGn{8TtHAoS4iPm1CyLa9l~J+Hyq2PEt;emn@&?r|c*GNbX2Hy0?k+tD)~AjeRN&YzQ5&*9g@dOw4JyTO(AiXNQ*xt=I~Q$n`pwvsrFvOXCd{u zj3&zR`EUD{`7HaCEt9AxRiDghskA7ck6dH%Ih7Vol}qKx=YL8k%I>5*q_(G2{q~>v ziM)Y6zwAC`(}_Bn2P7|1KKq}`C$^V4?$LFm+Htf>orz;4HMKplW{@_Q$uFBu>?7?; zmPuSYr_yEH@qefzb-aJlvUW~wKf0fP%m0_QmaV6(UCQ<+(GQ6&=El;`P>ErQ&41!* z^5y)KLe3GS6R|du^iYtxQj{Yt^JYKFe2UHii9hy}_RE}Dx(`j2|KHZ0)GhOa)Z2n% z$^5bwq#dn6=2Y2!bi1XzY)_8Y#QZHjmvgGjLCmR%I;9`K!jF6&1R2mQ$zW9Gp;Mr8 zGA*Cw*lmI9qJ#~^-crxIsGQ@(UVVL<(* z$HQ}Q51(ZYmGc_N8Y$7X0zQ{HUMl7i+YYfU4Wyk}l>fKO|&fH5NH+rP%I;zvHK5dRcUMR<$?Sw3B*dg8f=d^U7fXalK2wqF>W*=(qGcdbfUGf2zOGhjeL>8MFyH1VzEt;L+gO z;JM&~;D_L6V@*X<#Z)($CT1F&j^<=@rde(-HY?3-<{lF_&zYCa+qR;uXJfXrEwDrE zI6J{!X>YW*+x7Ng`-pwlerP|phsqxeogca-^lMm$D}<|tYldrwqv5P@PPk>bZMbu| zN4QUTUij4TlJM!_W#M(<`@@^UkA(MZG&kBQ+BMoeS`h6W?H?T& z9UL7Q9TS}rT@XDzx-5Eq^v>v}=;r8S(Wj$3qR&TnMPG^Ti+&e#u?n%ev4*jnSmRi3 zY)NcI?CRKkv0bslS&^))?5nbG&Au)B-s~5%U(S9r`;+W1vcJjxDQ8a3+?)$@ZfjJd zQLRRG8nth9QlqOH-O^}BqxTzq(dg$UwVMoRa#2&&G%dIAqtzd6JUsDmY3cE$CzSqK zT8cL-@dT=+>a14jw)(P!r&j3)^h-y1>JxoX|ET{6>ISV7p4x(^cHpUZ5}r~f?TDwc zO?$HtPo0OSE;W~%+s#_D-aK#KwAxm-nKsLIvAygtJKnCeH`vwoe*2K!YTvQ%+XMDT zJhc>0tx9^T2A-;$^i=C`r*PMBFFds{;i;wJdyn!|t;jKDJheQsGIBGXS{=DFa!=Az zui&XYcsdpM?5tlIy1T?dQSAx=#2?aJrdoHr*r+W zW#Fm$v8;rr+Q*jRsT=Xs?^!A}jmj`|IAP zE$?k3HDveh-NW8};@x}Sy?b|`>@%}Za_8H*=0mf`-6cNO-S?807Nn)|f3oLkX=xSH=yh7{wEBsy_0#U) z6Shp-nYJsvYI@Ql8ErGBr)vC9%@`_q8N)sQx&5ykGs`qI$D3R;-+b&QnsKJBX=k#{ zcFs2aOg+=w)He+{!|X6SO~jSp*Lo^bMO3!x$a$@&Do{hzFupBNq{gaZwM3n+&QNEo zW$IF%_ODiVa|T?`8LNfqWL`0Y-TUe>zQORe`atbfKdM7~gQ8Sd(p7a0T~BA~sP3kF z=$^Wl9;Aoq8G5FktLN!cO?x-XbTGTjY!f!~%wltrS>k59$!@osq8~G(Is5f@Q{4eK z-Mkq58vN!yFdw){Cgwg4e$kJcF{X~GZR(n+s?HY_%Bwnjx1+YI%h|lO%27=?KMzp7 zR3Ft>Mb!i~OO>ceYO$JOo>q(0Rq8Tzxw=B#qfXNU)Gqb7+M!-oFRItn8)~=uTJ2LG zt1onh*4k>P_UMRiu46h!chPy~8Qn>b)5G;BJzAfnyXyt2rh0`{!V{{NdR5g|@2H0A zJQ8l?uBZm-@~XEE)L>mf^<&Tt)m7ART}@Y4BXvzRTGvsdbZs?8*Hwl37+>`DJx7WSr_PI~o zez(Ux?VfQv-HYxeM$S`iJEP|Xx5GV`Rz9s_Fy2fHCIrPnNiZpx9Go9a38n@sf{TMo zf^&n5g7bn4gJr=5d{bpwa9OZ2xKux@ztT_XkM#l8U7zXC^*+6yv-(T=ZM{c7p||NL z^>+P?-l2Eu=k)XX1^ptcw0HG;iIv(1`Xjwpf2coU#r9=j0vos>Ehrb14=QqBrE*Xu zs2bD{8Uzi4P!J9xK~|6*#DbcnSi(PeW2~EOP^91>S?~m z^Q3B}zEW+}H>!jBUNu#ps66$VYNkF{&DBAbt3Fi&bve~vr>mK|nVPLzsL8sKnyQ(SL+khwR(cOUYDpF^h9-|o}{kR z#p*tNvRbDXs{8dK71xW+a5KUjXGWT#W|$dbM!7j|uE}yU+)OjpG%-z0Gt<)4GC8JE zu-eUY>)gGpokBLu+@E6`*=*a;Mp*eawoPp(+unAt9c^cKwY$nzH|Lu7&9%0QdCk0I zt}~aJ&1R)7Zyq*Rn0L+jX196D+{O9lZ1bL3W>%Ozwkqqjugn*$*sfu%_L6zXd}*FF zSD8m`x_N=M+ZuDXIm>J@kD0CJar20|!(4AZx8=-1n_(-OZRSbywfV+uFdNNUIoDZZ z9cQ;cZ3EWknf4f4-`2KuZ5^vjsnzDN`Gu8WC0o*%_>wyvJ5>jt@6u9s`$ zdb)0|g&W{{xB^$(<+z5fi|gRB-Dua_jdCH^$F+AOT_e}o^>bktb@)jW@7`uso1e`g^OL#N++uDv7nmQ+_vSlyle^j7>Q=cM-Q8}DJI|f(E_4&z zd{^u)cGtQ4IfE{8ce*>=>Fz9dHs{+j-Suv*yTG07&UN>=i`+7|!mW1qxx3sMZh^bO zzGok_pV{qpFIPJIIP>qZo4MZEVt3nnxB}Y5)z97bHoMV&>H_N;@D_6 z=j>1RI%n-6d#$VHGVD#Rs!Qi;ZJoW@Ug3=W(O%=KxHPT`Ubeefy}WAQu&>+KxH8yp zKeBIgo$wedob~ntt`r`&+qmBAYx~*$c7Ppd2id{)I6KCUwxjGwJHig<3Zu|Ywo~j> zJJgd)u3cd-W4&~dU24y>7jq4AwmsioVlTHB+GX}6JKrv_C)$N}x}9U^ z+G(bn>0!E>?k3;#Hj~U$Q(`8YiDnA(3O{Y+`j{VChcW9UFmuqb$IL<_9wV#bsK>Ad z=FFGC7s>1$69YbM3n+N05Y zC;&NbuOw2wcM@s8*s(8k1Zk_#6Z$8S{Rbo&f(}eF3>}nY1UeXwgCdY}LNUndP*?)8 z59>r$Zi;oB=WKLjl4a(Nnko=1!SPXgjpi_aH$wD@zOM~ff0UK6y~coCdJTH3N0 zP9-gMiw{8aS)JxF?a|XcPTF{e$8=g1JVx4n zr^m?g@A5dQM|=rRY`n(fcBA)roYY`70xQ0+_TaxPNlSu+}dy?|#Q%R)Gr;|vGJ(EQ0-;qS>e>O=7 z-I=5{`dpG6^!X%B&=-=lK*e6d0C*`$FI3_~{LlwpNh0lkHHnP5*OEw#y`H25eItq3 z_RS=V(YKP!K;QOoous&y@hn2$O>z|~aU)y??}3cz%R&4n+yi@(NbG;;;aZE^7D=QZ zdy|My_9YSf?N1_Ymv|Dy7UFwB`u9l^>C>l4q)neC`5OH^iPU{CiR}MH8NMV9Is^U6 zqctk~e?z`SzfB^2`p%;x==UDo9R0zgC02j*Xz}kMkM4s05=&33Oj+U5xB-qknmH8G{|~_EARy3TOIbux+Wl!&8aQRy3q|G7R(AnO3G+dN|9rXE=@ za2@9npAd72xa*BJOCqsA>?Y!OFxn!C_)Y8uvPR)L(8EXhZ5Tn;8C(;3#Bc3AvgY94 zgW?{5_gg0vWZl8N0FU@e>;h~N5pWKF}p5f6Ul-i499WR1W* z6pz?Id;_w^;U0@e{4BNuSzpK+B7xXXY$s#=RCGiVv5nXcWPKpxKY{dHYzJy7Ds~a1 z-(m|;XQ4$Q9+>Ks(;B8WYt&!Emn#V&%_K>7*lJaj@5u~V@}or{(v5nD<>L0yba zN+SK9>`^PwDM`dOQ$1=qIxUIVZ@NdVLT4nAyqO+#Gde4Y)HmCsR-$u~i2Y9Vs9Vvw zN#r>5JnAO&q$JYD`5yWGsl*&A{*g9{UqRMc+~e@bF&B9fYo=333sT2okF23&{g+q+ zZa|lm;WW}9>mcr?{lyuiLDorH{4GdX@ueVfcbSK~Z%Rv_f%|YuU*R#*#v7B=LRWcY z{i|XYET9jVApx8hG4Jlnus`|00^^anGaa9`_WQ;c?qh;zMx6h$-)JFQ64Xj{cd7 z9!LL76_0xvt?qHel)=t|dlij&9PuUB{H8JaucO4bTz9&+(S<;aJ8WsrOfnrk&yyx? zIp32e$G^Z6j7Kj_G7Y^5mSdX<=*6CZ`O91imytgSUFiv=zRQ8}6ZAoEhkHnmLD#~) zq^F?k;C|98P+~<0&PDNo5Xdpb2iPN+i9YWMr0rrm2&9cKdV*yr<538tA7X0=Xt!LC z34!#5ST~Hl;4)Nf1Off9_*u};qWD_SU!lgMpF;7upg%^PM;}1bAcOo*(Q;6p^ggtL zN5-hdzJkmdiD!6~Npoyl#iNNsTNP@MPyE}OP>b|4Xl-D;>76M4w=vT6&1OM1X~u!g z@n~Y*HuA_^VjDvf$`JRqDddv=2+i|o#*}U5kvYaThZdCi0&NLxu#ecFEwm#o{UgR~ zXVTKAE>J+4IJLc?H|hFlA5YK_?du6bXg}yrnJ_v429lP34Dtl@%?|bi(%$1>2xVxK z9p(wduERY+D|Cb>NJmF{0{U!6c>=M)Xegu}`fr(g>{!xbv*SI1^n08qsD?5I1ex0` zaW4c>bfrf>jb82vGSDkL`fKz`kIaSk29N#*z0o7{qFwFL-=epB0XGw+eZ&(mFIb5ckaL1%&J==9sKf{8pHSvTA;8C0 z;u7@FsKg2cUC;v_{R{fBC+Lbw41xX?mGJ;UH}o@){tf-y6Ld$VeV~6wrA-j@P^vs* zMli?l)uW{zxla>1+aqh1&^aEt#}hi&BkP^ec^z&Xo9(5tQ%A@dgh`CCT z`v)QXBJdPRg`{3kFQa#Oc(SBIQZJ}yQE3y%ec#aC9=UH3TI1mflnUMBQO~1mJv^0C zp?f{*1$3Q9F{VQIdE{P5hQ;!5DDnFOT(5^-^r)HWOCGuY3+?i#+33q2x&8~i z;!%^)S3Ppg8G6m5rlPNVw*GQqS zJ?chO;tb@PDfF#JU59?>(Z#659LW9G&<`HD76~!O2y%}$bjTyuDk0`OLGICpe)h=q zO6V7l+@lTs>d}jp3TuyFUOqcku`M~TZd0&ZvP!!;xWWX z_;imUuEI-U8D-u@?*)8i7NGb>Fzg@Rl0%9*x$rId!;upc4 zh|*ReSdHQ%!O`BxF@SG^J5c-}1b3m>R&b2p2(}dh+7xN-ag47>PmiqoBFjCFK15b{ z9DRzc^vK#Ra=FLim&g?!i*F;?La=hotKe$V*fVmCN7j51=^I$$B66L_5(|;*J+elO z-0YDxVB{8$tN|mdJhB#yNdIrA9^xc&C)`b1`g9MhB~6S(7)yezBO{M{WIY&p&Liu> z$SWS(34Ik_r+j<#4UeoBBky@+%^2C^ar7Gca{U(V?=cUd z13gx3HrQjXMn`(gIp`RV`4yeuF<+v^9`h_(;xWWnbfU*Rica!a@&9Cxc>$f`k?YRr zOpjTE&hnVM(b*nz7COgcwxB0^%wy(M11^ErB& zN3JiUr+dsnRQeBc{TV&iBiETxu`jV^wxJimg`~emF9PDiY(Ovdn6;?HI>>czRN@=t zS~q&RN3MgTS9s*wH+m&tOY;XR{s7Bd8I?F-%*pj?RK^n6V^HZ2*!t*=9=WcK-sF*Q zvqqV(1X~Ba#X}QR^j424MVY$xiv!h~Du$9m|J#uXw-Q+P3 zqMJSD9#s4Ra_t>`)MM^P#g|}YzwPi8=?BoKJ#vpEy2B&)1EM=UW-0od$4J{Hp1}Nw z?()dJmgp-Ua|yc7W1c|2_Q*Yz=r8u#C$X z{u3PbixD@1>4_3sf+;}Dd(5$D1&`^4;wQo3=NP^e9I+W|;BmxkECdb7UyNpXY!5Ws zpljSYwYPzGAr^NBqUwdt7z2gU2xk#5#IhSG1GIiFWol+1|zDq`y)QTwAo8 z#}S_~*#?gO#H4-T2BBgLaKu1N`VUU}p6_vOP_Yp>DJ$E+N!`6Yt_9l1;|8F8Jx-3( z&*P+y{vO9zh)FqcVw-^;*ASI9fs;N-|G|kpj`KLN>ky9{jSlrVY0EH=8-)({IPuR2 zkCQfz^f$7P}?c$~ClyvK=c zCV1R2XtBq&LrXkP+B?zXB-SQ*oY-Kp$K|0@JgyEp)#I|zX&%=co$hgBrx_mC1fA(| z^-<<|!9~#79w#=K<8fl|6Fp9RH5cYlo>+;U6l7I<7!bfL$I|4;U~mgpjn ztBIcCaWXy@dt5Ghs>iiLmv~$abeYFpf-d*CbI=tYC&#?n<65IPddyz*Cb*fg{~>yd z#~eU!g;nJ5LvQn#+tJm4%6;D09Uk*DdMDgP{vq^kkC8goc#PD2kH>Jl*jkU=dyd`f zF+ZT|Jm!1!K9Bhh-Q{uDqQAo**j(EFCmbftv2b?+NB^=k1mx3}ECZJGd8qTa3(+)> zn}DW!9Dd8n@HpZztDMJOjF$Jf>(B}wcRyOuOsM)8p#_bapUkzlu= z_(-t3QG6s=?2wI*1baJ*j|963#YckNC(Xu3g1sBXM}oZ##Xo}Gh~ghX?t5nABf&{u z@sVKvK=F}apG5JGAoonO@sB{4RW|++>~APO66_Nwz7p&gD83S$v>ks5_IDJ236>bk z#$SRH8$>*oILVHBoJR4TV4p#=JoX@(?QvqK9FP4KZRD}5(Z(Jp_HN>_YtW`1TZ-m- z?9*tTNA5vqH}lwM(dHie723jM??Raq1-lAu<+0zQtv&X6w2jAZK-+rk$7nl`-HEpM z*sswJ9(x$==&`?`ojmqCw6n*)fOhfN$I-4Hxrd$I&10WKyL;?6Xb+E*SnKJrKcmNb z?44-7$CX11JoY8Dm&g8q_V(BvXdjRL67B1;_oDqg_D{6G$9|6v@Yom8fgbx5I>=++ zL&hkG&cl=CRkK!#(zXbcDy=ijMTytI$y%dmlR5V{bvnc@knlRb7FI>lpeMyGn@IZyU9k2C0Wk37T3p5d|Apff$L3OdW<($Lu+c`lSa$75ec zPxRPb=vGmwK$k(b;ejeUX@5=CNbYC+aEmG+8F!Crtq;<4Bz z`%#Y-n~4v=o`*i}v0{%WJo4-@dz;6KU7z&W^U>`dD>i$|BhM$ZpZ3@b(PunX{ICOd za;%fk=R8(o@Oh7wn0mouCB|R$SczGQQLqxHFMF(vi8tU)@@Jx-ciM4M$ zR>sOt9?O`>pk z=$l}=q0}vy9w_Y-Oji_J2&Owq{0O!udK272`dAbj3ML=LhJxvhzV9(omc9#S5=!3% zGZp>JV@lA^J%(6qbkJiaqS#3=Q_w^3Gso@4uX)t=m~YVm9&;m#ZJH2ArjJrhmB-wR zI!Ggb9lr{K?F2_3KEj3{t>&>|2#o`=o)+Qju^d}4wDoYQ$6&8g>?@egC^i*L7xYh$ zyPdC|RZXCRtCW7TBXr{4_|<3^z?Q*vXiuOY!Odu&1S(+PHwVB_^6y56!z|Jd$XDa@ z!f`dKuy;{7JaDtBJZxY*ZN%8Zc-zc)%#1|hswl1s zV!bvftqO|so5girJX}1rSv<&#MPiX=ag!IGywTLGrSc2nH44JT#rf-lng#jmvrR!f zC>Xgo9IqH7QBX2DZig=35Cj3$#3NJcM7;!NxkD~y$d68lU+3Y_(BS2 zE-wtnhYlsHXHjN2-ceE=i;BYQeQ8?Mn5^WdaJ;2#Zz(0W4J`~~jpZfbc=@4)#pHx# zTX{*fmsI=W%;KV=qD-t6uUIfCu7(%J)j%m6;dAD|ct}#AfhC)(s!38}vr`j`iYAv7 z#dU5`QL+a`;mPzTmS5B??()LD!*QEkLZ8wLh8D)tWBKunSUw(Lm*Qsew1l~_M0oQ0 z^ojXl*(lx3^v#$5VgWe2nGC2$xuXNj#W1HLfSoka&92X7O@)VQFn;x@FZw ziqPJk#YIx2xL2aJuo=QoWU37iUfe-EUJz80NJ6AI{hak%&LScy0_VQiHt z4vB{|X=JLExHeYO%O9fBzw92*VlQ?+(zUWXRhIaVD4S=HIFWY!|^Hw1Egmp@KC&}d>YQDstJEpqoS$_qlB@+BpM#CR!|&XUL1~B z!)(ps)$<09EL?9V_bSSYSDF%A+$>%rZ{V=Pfg^loW`z72iTs**>s9rFQHATPS1*X` zlKgnJTp4nNR{r`b@?TZ{i|g9>!ekFETrcAgbLB6`!yLA1(@2cnQfcBrw#zPzWZ7Co zPx{jSzU2PhS^wg~^?XkwhLH>6s{015bz&6O%2VrA(0gQIym~A@+&f;G@T(Lftb)wWAfG;(Rz97 zt!QT6dM8>xZ+)6*gS_?WqM^L?8KMpI)|V5_&BGer{_(V8EFB9skLwd;v^0z7mDyPP z$i|cW#%5(U<{a5L-){`(sd$y#f9)rodeC=O`dPMr5&9RVT~Ycc8l!)rS@cgdoBoOB z&_B^e^iQ-g{S$3M|3sV8KhfrS;jW2+)FLlj9Ism(X42Ee5)&n8yt%||%e;7t+;|Jd zV=IP2Un2G&2V|_IV@xLY|FQ((*eu>U<>K{~(|Sw9#alI9?{ux+g-nX##WrQk^KWI^ z=7rlOTHcP@d_BGYbDCiG`N!5uzN)=R$xpBDv5xE8>RQs*_Sl0C{Np~w43?6P&Eg&M zn%C*tEZ*_|RFuG;MDb3zNY%~`HxKufDFM^=U%tF=tS?hgAtyd&UCu}ywXRhY3wLJj zsvWOGG0SwCohY`xqRNj~D9D|%ym>4f?z)^hyZpUaxVf({o)*hbl@7;?WlrfitZ<_Z zyKv@4o8#&g<;zT4o=KbI(}Gx^;&>X~{`+ucWa(UgR9Np!Vi+eJEG#4xO ziPtG89Gb~FHQcqR`TCZ+Cgb+lzil0!IrMK^^Z&LrwQt$_j^3jnFWxz~Y=P8HsRQ=P zi+9OgPWVZTEoY?vTibAG^LR^|*gMf>3F91Z`4Sdr`M&EC&M`(>b4H%;P@lZ@>XI7~pNU8+d6Eaw=*c)?)`*0FYS?jnw3F!D> z%seEIYu`R3hLX^d7?!s|Cvt|9NaT!=GJV-JQp!kTl$4RgXelF!F?n1|r~*=jq&T;e zD$3iaeco77KJR!br)BFnDVIo{AmtLN@lr04njpvQO|fD*rX)(_n39+%$CSh*DbtU{ zWGN$wDN;rfQ>Ba~rX||di`4W)yCgLu(Jo2NOtec$O4N6OPfGC%eNu{F#GXBTean1O3M}_YDX=1MLxsf3HlCKb z!3L%`7fqbYit=;g8B^jWYv|(C3B8%(0&wSWmXrEY&UOBhZ{B*9p3nW4V_QX>YAPRk zRy@x3vF$T*GU}$g^2w~>!GNH9TJyAqE|FC+|M42zs%@*Zt=zV>p4?}zK(T81kE@=vO#`& zRva4i3p%DXPOIl!<))i;>G^Sc2`BPi8{OnI)r)K4|Mt%u-Zi?L>*E}*y$1ycctdB) z(w|BPCF)6S+g)bsf&Y5Dsa|ILVBVqBrSvr2vvg6SK0cf7`b<-xxoea7nauyM0e35O z0QG>o0(v;igmd5qU_|QYfpP)m0?NrZ;e!D%5thIeu$DUs1A)6F<}~hdP}WjboZr=TRo5w1tqL@Pscy(OcXL5Q znHrR-!QH7EV_+Zrrc_OAQIqX8pMbaF8>MPdwiab;QMMLkYt4lV;Z}H9soE#QC2%J^ z25-VwO4V`D07%!}55FsQ47SbWPEh8xO4Y9lPb$@*9~8r4Sjo3whrl#AOR0vZ!Igl` z!hPX;zM)6oBdcJuQqevz9`I-M1K@5}tP*5HHy8zT;5(icmIIER#hs(9VZhzNth3>I z?htYZDe?4xyHRonGiNN!hvl#uwsM!O16&RF0c9F-Jh^+;nBz6(c#Sz;V~*GO9-v>1 z-vy4_gxGF!IgsCk{3hf#r4LQ}t3Vo`DbG5MNxcq*M$1(gMGTi{jrT&cF{&=BZTyK3+$zqAM) z-sXiUm%yFy7`zEz@v;^N+0YF}!5larZiWZpCHNRPUT5~{%syR+$F9flA{XMd8~yD@ zf4dQ{-Il_25a-1%je%|5v3Gau-JNmKopI5fnC?ML_h4M~U|jSV0SjOS+zyW@)pHXt z-g+|Lj_mTv0p$R3OIJJ5;(+}zY??rVz4(c*oU_Ep*?+` zgT3%8D-!I}w+T>RU-s*JD&Wt)__Obm@GgAE3ZWeQ#Fzdn1G8s;VygdWAg20X0Jrc0 ziFy38zzjGWuIEKE8+d`tWxPP9FE5S>0X83k{f1z_p^g{FG=O$6n3u-zc?6$F@Ofk! z%mn&5>J*@^(HFxV{8Bb{8-v}(V7D>YZOkk<7w!Z6Tc{xy3gCFau0?eLI}~AuBJ5DK z7*@g>*rwFjDR2f{4Ycj}v*22I0G@>pl^RzF#L&1>rB0{=Enqm%&J)go8-V_fr|skE z>-hF?9E=C*8Baaqsb~DpN=>K-jJ;y|Ta1rOu-8P&O>E~4XIjuZgsnqo8@U>DiXvd5YP~Qydn}L01JOkK&<|w6Rr9(sL z07Kw2CBLAdW@D?_*lISmnvJbyW2@QNY7T9gLtEz1mN~R#4sDt96EC@`3^_o*=2n45 z@C(00aXP;+!7=6&U-Ow`=3|=$)VrW3EQRZoT8PgVu7De1qf#g1(?!&==u{vE7u^P1 zlsbidP8kZc=ahM{8Fs=uK)V-XgT>h3)MbEePW_!1;*0^>dK$Jqjboi&2`*9U3~YYJ z5B!2VWzVGSS^a_XODjMO+5q*RO{|?md(U}WsdGC+oL^3_4|#AqzrbD>PE+avd~gBB zzkuUkumI@Kg>7LF;M)t|haZ)?XeyAti1f0r;jmK6@yUupeu@1UXa%<@b;&R&fm7jE z|KgL&h^@=8-^yyx1V~@r5$Mn5H^awpNU1BZ=M@8iwp>A5t{efAV7pRRh2Uh^%P*Qt zfL%&m(;Luh?^5czPJk`0Z=uu;HGzKK&~uVt%=WxV)e7a{u#6J z+Oa+Y_;CGeynKjbZVUr`+mrv=iO zIDW~G`ghU(UGFRPN)=ekOM&iTX}gh^0QH5qQg8gJ)SK-4)`h(2XSGuAJi&{77#q9K z<3&CpxQUnfR0jI`!36k9sXax!z^6W(1hng;r+INt7O-vKN?x);eD5d!!1cVGryK0% zTBBm&2*q&-#)-geAw?h z>iZrW{m=&{!BV&xsN)CbmmlcUkJ$0Yrofo|@eQR8VY{F3`%edXfe-WO&rx39Qwb>Z z3uS&O=H)#Dfx3R1&r5sg*J0{7ybhQPN-0zNtkSBO`vZ00eE3=E;1#6}cR0*0rELRv zRB65;tKB*966{wx?Xc46YhW|{s&qy(pq`93l`c0HP63`&mU~a>@)3Aj=?Z57`&Z0_ zT;R!N#nXWLD;`q1Qgc`U4=Y`H5>S8TFO{ycjhF9~gQ2htu7}rnp-XwF2OO{3i?C1W z>L&wFJgfiC%XsR-4EU3~HPlygr_!}5!7x|}cftEg*S?Y$@hnlgZWE=C$$%lSolCDM zOo!){&TI_5Vbs4bVLe^a^z zb+t6`0DP!)tB!ylTVJYlo7Qj*{GoK)CzWou7TBjfK5vh2I#73q>wtE2tPIrI@d~9o z-NEH&0Z_h66~Mk-IY!r2N_U$K_rUi`cV7g%mF|HJdS1&*aPCw(e=9eex&!U)g&zrR z&013TI|it`|7>1j!&B`6^mE`Gr3V!%J=nn}rH^X`$HJ*f4`~3@KjbG~RMQp~!d_lf zLp%(_ro+?WX{ATx0(~91oR`u}gu8*`j;5WXvFVuJfd9r|lR|7)NbD7LfWAN*il}2O zeH+^kXbWpSJ@yTy$JOVTE#KtjGvnZ6r6&-_#gr*&s`Nz4O=R07`ZB3hY1UtQN(;Cd z4k$gfF?0mlJeA{4B`&8uq4e}FfX%0055&w2;&cXWoH-H>Dm|++VDnk{X!cB4$IE1B z|C~p7k<4hozjKL=xwLOyCKU7Xm=Qqz3zh)wTu7f5zQqe-D8Fc<(x*&OdT}TCO6gN? zQF_UFN}opGPp<$cz_Uu9LEF!`92iSy4u%JmKC2>J2fr%4l;fREJf1U2>2o!Ze;(uJ zycJ5HkDplY=<~l-`hw+3Ul;=HeG&U#gg=(0!7$+X%dy3ZS%8f$#;zCBmW%&T`jW*; zUrK$K&Vz@QzN|a!PHt2u;!L<7_9%TNaeQSD zpsp)#gV&V4$^kyVYC7BqFDiX?IT#Dq0`|Iw&(}02qcsy@V(zO5Hf z|7!NR-70+t_1(#_?y3jZz@zYk(sy?Te0}#fO0PK<=EIXp-%}H&!b3{0Ef2*0THh{l9rk3sq1WM;buYmorSGc+h2l#gb_TNA|Hx2;GY~(nb*tQ8DY}%#tgVkUfJgxLYRREhm zv<4{mF#UP>7Ns}S{>}Jy^HwGI4D}XlvV~aKLY!>HCtLZv^>Wy$^dmLk5~Uxl2gBe& zr5|eyMX(wUDE)XNm;pDyAzspv50}BuN^cticPafO$9xk1Jh@Tn?bNw_3B028Q#o)t zys7llJz*(e|7R)z<)2vz?o z=i9&{xLfHL(qI(aq4bLtVKO|zOGl{prG-FWchRq1w0qa5O26C@mcb{yw5SD~2RoF0 z6`#DyxO;UgFEAo5UppSK>1#hK{W>xA`mKNs-WUk@^-XN^CiZ*tGhS@e4$gtSyx^oI zoTc>AmZDp-O9| z_ZPrjfE^CBg`apC3qJbzL8U+WO6gB&>!-BJVx_;sCf`x^`;qXu(mxR2KVY{XiQ_{}c|pc7UWQQ> z=p%psLjS@x)-w86eEu7D`t5mMW-$e@%OAwRAIuGZ(*8f+0OIrTeM*;(Qh}-uC&Ozh z&^uKSJfs3M7%qb?@SO^56DU!Eo2`QM;VQ`JtAcV*s(^c!L4_MtP|2yFazpq+1yz>7 zweSr5tb(c|fG-GCn+sp5phh)#Tm?0+Q9&&On^aJHwF>G8dsI+20+V4ae4~P6)~TRg ze-&h2po02cRM23a3PSx<(69mgq=N9%Du|3%L3Ef3VmGNE>ogVQ)P@ID(D+^zG&x-b zO?$x&D#&HOT>6+t`jvzwSX5?(7qPX zzxE%hfcsxTr>l7hNv;aIexicz^tmVH^P8)n7v*|yR6(EfRnWJB3i{oug8td?0nn!b zcd20D6Mj%ZF}5$JJ;m6) zq#w}!iRZ#&DwsrDC!GaY@C9<7So2s@2KF^O29ZcbtSy@7fZ&fV99)C)L15( z!#pD~DovGBt$H>u$D^e{4^ljDkbdw!FKxysWAp?|N)J&gBR$Pg-c)mGb#mKOi&V?j z{JE!UWAz<}FV%U6->AtSgxvjS&YYmjpUZjkO;F1H1peZ|Zk4X8s%AZ#Rw^G@R*1?n zjBUWhlj=CwaZLXH1y@hyGANf`ty;CTa>wMxbekHnMzQo7Z5rj|v`b4%FQ@Zv>wS8~ z?Y(ARUCG+C%<6Ka_3L$=r&|rFUVTW*($d7yx|xS~s-vko-F*>E=Gw^T_b!vqUkg2w zKfwHvDxX$6m0#L0_^W&)_lx9H-@olwC$%5FEn8pRGWo}qIgb1_y;Qr3%Czh2V9b&H zf-?DE{gsdL|7x%NRklPuwD+&_f3>&Fe!=x+_LIN5n>zmeW%BEn$uHa924(Vxm@O%L zxzAGV;`n&^NPfazNxPRT(~pDlTZ=X?8lN2L5UjSKI_tx=RIAo!Y9Fs#PnJU9DP1xlA8Y>1pX{wcE5w zk41AjwD0gA0oJ5a$23#BPJZPHUAktJAAeN1mCubyiBLk{$Yp{EHYCRrq#YkDg30%47s)8sE=Nvl(gA%JEcRajS&RC~Mt>^67!& zPd6|`YE-XQmA$GkNaUwNxd!wqk{(N^LlEg81ExkSOa*sWTNk>b`W4Z2)ee7F|D3MJ z&+pJC*gb3eiLcLo@In6S%Xs{dXhy<6bvamayfD7G!xi+Qc~#XhDylm5Y+p`e(?K-T z@kdOU7|dU-(-YD-SYrG}!}aSOQ-^aWO^l?MV}_{FrgiPw=?vcVgv3mn*6lmA&x!q& zh%Ef5cX3|1aw9tF?ma40y>xE#DXsD|(p$BjGJID1{uvqV+s_Jiw;0v2>*#Vp#^l}; zPt^CdYu>EgpFeeJ)20W*ycG|2dA!R4p-WFDOT%p9meNe)?3prkm2fkpyI4_`q%kS< z;4k4Q8dOVepHXH{ukZN=PP z#ku9r$Y{~Jb$&*h^cHPeADeMT)r-q7ny9-^JE=oS&(<9~wm!UF{-1VIX{m2n!nm19 z<8o6enLoZv{@1}cwrkafAeWvrSHpV_DW}t2BdybkaAVV~Nn5JYoK16QD$NwB)lz0l z&G)${(X)UPK|mj!OD|FB={?ek6KZKzy?S=EMx&aM^5sIgbvh(1-y!F}=xHoH6yUAc zndJx7i3Fy7yR5+jD*ao}SIn$jzjL;8!@9oHvreU2^^UDNcf>zfBGc5$X%K7o4+i;4 zI({U7GlRq%>hpv_0@W}Xg%udYje7D|6OTk)5F}1XKI&@Ks9aH1P~{`;uZT01gIFW! zaSaK!h6~>vFgdS6ZiT^%1`HV2p?^kRMu+y}g58~__CEYg?`fSDbZe)pwe2S1ojha} z)j)OV*_O!0)>f-&7&n-JnG*xjOvuoNKU0OB8`RGvnySl~tQ@IUtsEyVhF^zd;QzfD zGDaJ=J+8{&*8kL;hHTLN$LP*Swd&b1m`F_FPZSJI25RC&L3_*pzi)5<%KiVjy~8UH z|L67+%XzeGG!sY#)uLyf%xEMMsiN0RE5NBmd+gArbZ+^^)GLseyIB4 z9SwC|rm(2)QZ3j$=keKZ&A}jv10)7fcETWE1hW#cbaehVcuitV@{7xq|2i0dB!6_7 z{ICAXH|dEpW1{}FdZ~Ii)BROm&a^8M$1k&Au&T^{nW_Ca{)1)m>zBzNT_(T5-}2>5 z>-+cFU+wz;XnPa*wyr9F{N48?J+0PeOSa`rmMnSSBw5}qJB#fk&g#T*Hm^yX&508? zT~dd1NlRCt>@6@b%nTit9|h75!$4=c04=mIlx3j&hu;izHp(z8KMHiP^8229-;*Uf zX_?>W^Dj8IuI_vH-gD1A`#Bfm(^(Pi|Dm_jyf_CI?R;L>fYVRq9a-xp4lMfrI%izs zz@q(E)J_`;;zS!-O#C;qp(Y936sl^@zFN#WvqJA;;=S}A5uxn84dwFTHCx@{=rGB| zhbKF`&6fSz&g=ZQ7dogErdxMGFzcnQsm&@g8i+&T22|N_2}i_aR6#Ti60XbP982c} zCX+N});U2F(yE8g@I<*eD0eyK%%dGVRW^tbr7zJ|c7SELH5HwAGWSCY!aX}~{CIY1-! z2}&r~C(*nN1Fc{c<~L-ZNl-)Z6eb@(>1uV~KcCG+&CSF_9k;rFU*^6qn~^44(@(W_ zbhPd``6bRv>#@~C{FruNi5bBjXqnrt3Fy3C&`Z%@6Rg+t*92s=y9f?|y6FG9#+t9~pZ{~);za03;VcX9egj0r44VTL&w0BRpG8D)((tfFf%1zbT1c|%HYajEIqrlrND z)@LA+rN7Urmm{n{{kPawdhs22u~+hwKtsBb%>+8nq&X0KvuZUTH85gBc8jd49mMMW zzJh%8_tLKO{~VTb!Gr+#82zXrKCCyE3^PZ6%W9RYT z*z&JwBJ8vKfr@;Q9Ox+ybPg;mwh?nA>Ci@~2py3DMQKXllhSp`I#^;T2|-nfsg0g@ zZhy$l{*3>cXX*L*v^vA@Eb-TXFtK0umXc7E9+qsq^-a~hX6AuvmX){Ip zf9UO?omfw%{dY249GU*4O^W_MmEncUv=i+V?Z1}Cv)YMviuPYoJHZRIli*b>#ZxUf zTtqY1fb9*aW)|pHQOz7keoRozeuto#I$&2wW@hR{UBncBsZG&o*Vr{Wu%g&{pp0`_XnQQCoOUTOd@`>}9AWh^490y=+z(M~{86IK4umU)DGbU&! zD}stEG(qdHckJwv-R;3i5aNV5b~tq*r2^+}^b7a==eN%TsV!lTHSdp9BQt4tXmYjFQpqHdqRA=weDx9a&tO zW^H7hcrU2|{BgdbUHrALvj5`PLhXfoIMM!9ivOhkmpRu^`Q*FjMa}#mwc?cZgYA==gY$$v)TARLrYTKnN8RmWQlZaP>MpgYbe>J( zJg?}F*vzP=V+n;hz2Q)ewbgykDed?E)?Ra~xh@v#F~`jH*0!mBQV`pwQt79TF3cxm ztT&cS#?nv6l9()?6o>z04*aQI7~@2{PX4J~7`;Th&dbrR8OeA%M0Y{{TS4Ym`mZsP z@$rR`OgyI<$#}akl8JWBNXFZRkxaB}Ml#+mjAXoBHfoPdta5bZAs8xil{pS5ny zNT#(Dn-TrFkqjaNt^01J76L*Q*^aE77<%w8Y|Tu*41<8SnI2JeMkfp{4%g6P$bw|8Vu^+LUqUCN2w)xuI8!-hokAxD= zrq1i_^4)y3rzCO8fSP>w%V||ut!URwh}vq235)ih$|bxy4Pi z|1zunJy}rxSq3X`6u8MzKv^?6N)2GzLNacY+EWQhf%Qm{X2=d8%q?I-0?>VIYh{p0 zHPK*WWn+1%+i5XL6)RFP^avB#8gZPVN)T{W0y9@7l$_JU%3*ReG*=pw<8!W7+u;1* zv16`Q>$;YP(tx7)3j6cs`9Z3S$GR=8=KAkU-Gd~9Eyh5x;+wds-C|Ksb3rOIO|bL6M~>N{IN zO0eqc)>|9e(@){A%9I>W|Bh|1Os1=nv0taZR15x9vC z^>tkS{0hio9lLY$V}5|cYJ=;eh)E`S3km=bfY4%DX+cQ<-XdrEM6+7VcuN0T#RtlE z5$_F=Zfb&VYQZsOQ!rV>PH8jK1@BX;6|w*cTVlWly{lxg=sh{jzTQJLr@EYngcVd# zG*Nx+I5g?DH+n=`nb?Spnax?VOvT>hL3ILl$qwx?=rXi6p7&E;UdE(IxU812>q1QL%f0~UB;J%HR90UzgbAep^^-XR4RaAENdF8+EL zMo8P1^TX%sd(S7xwjDn&zubO!{rbc0>3?VU^ng!d)Jn)3JG4>Bdd8rQGvgdU4C4m8 zax^fJc5Z*v2Mz}z?vm{h>K>?!$rK_-fHrjH;*#(3+)=0VzPZaK^*6SySIx1+P4deR zoSB+B^9kl_Yi@=Q5_-xOc>|EYKnfAb%Ll=Oe7B07VE8`1?jCt7+$&O9i7(_2;hBPH zi;A@yqm`g`I=K_{&cBMzjc!&A8z*aRt=8d%jpC0@9eba_(QXyi^;UD^m5;Yg53tUG z={EdMe`Vcl(X*_uBgQ&oot?4tS7LCkN7WIyBv2wT-Pibb04wW8ca6Mzc8jet4#lhy}dIQ>jul=)8IsA3D8*~GSn^vN71eejzI{Hm^N6KXx9ZtvS;-H{x#f{ zVK9k?27SauPsQKoR_Vdf_ZE#t~4gU7{}Z&8f~sfN{Pu8fSz)fS1uc?wfjt`W=c z=iV5`hGDI`VD9KhY*LLCRfo20vb*j&zWz|X<$|fXxhZ8bRa8#F1K@hQH8C~N(%IP* zZnqZYpV~5YB6gswHXf^~Y_JsP-?;0@8GwOLpM&AH957J30E1}fU;tJJ!C`5+ozmvi z5d0lVO!zyDCK)!AOW0oqfd)Pk&Cy{pA-cn000b08U2$}DN*#epZ(U{nH5?t9=K028 z(48JPXPh28cRKzUsJv}H*8!4pogRHdAg#DU2qr=n6)@3d*Dz26Fac_ab{#cJfl4#L z^a`mh6@&AE@EpVd3J^@3IyC}juql8}Lw0nos0;_I!$J>+_z~l7I3i2BHz<@$a$i^J zPV3P8x?g&~uzA>F-Lx>+>5e5fT0kWlou9w4b-j6qZ0Mg%-1sH?{OnoWIl0otkLa7LG+$B+gG!1w+O;?Z2IV;#EkEIr;&wSDKz_DXTAtepYx3zUx z+%I@Mup@qbF_vtP&D?OqO#12mskZ5!j`{iXn9vNscotw(rC_Rz%yn!6jFBu?y2(z& z9|%2C*sGqJ{yQ&Xlm2!}KC-yDj99bGTb!ie85zT2gl&}D<&+5^XZwhmX|}m6SFHuE zTJ9QxK~&>o%2N%OU6-rG`>XD9-Br&5GylH0`0q36f5Cy`v*ics9)6(ogENDJL#rqv z&n$py0y037fPawe-7tX9WGzi)CR2xr%oIgZQGT!*b`i6sgwKSmahk&~gAmEga=j&8 zVS{N$*Q|9*VTEi+CZYlWRl=XgU49#AmOxp|1}H0LsiSNIP&}iylesI`j>M!q2j6u! zgW4{3oh(G$=}Lc?(kG6%cV66Osf)GrTJVSKKI;vKW$W^9H7#GX>ss6D_vl)iXeYfy^cPwit3{$?Ecwne39#3qQ4ftp{#2+vcgy3aXIWzxI!$X`|&dh*9zQn zlrC1*)n!(iD;2}BIoGa>qp(l3_L%X9wZEmYq(p(&so#;&tz`T1{~;p<{a#V8GKfbZ zA7b)a$Oi|)Uao+OcA;7@3I0iW38&Uhv?P#6;7D)9LVuo7>KeR};{ zLW)5RWA))MGaJ-=^&KY)5MpEUm@XcF_TC~{l~s@VK}v{(>P*D%}+b>?%!@63!>Z5$#WN5N&n4e)vQ?9X`=tKYXkEa|A?0C^B(m$gf~I zkyOa*fGWNM&Mc!KG*3^VhlqKIDKQ8=eylMWQxI1ci9|^ecQNDTxAvMGvN7Lr;r`bi zynE1WQ;a^x-Rx#I^;ZR9tFbbI8= zPC~{k^a%SZADFfh3c2!B?fq{VHe1wU&wKAq|L+>;k>6S_>vXv~%a+qk>E8l${Oufc zNCC?dCRexXpcCx`I?-PT-2~_sW|?W%&-Ci|=x18A6WtQ;(a*GKr!y+r`5Dd3lg_$m z*U_B(l;laUpqg(bR-kcMNC66>2z7LXlhWhnI}=N?Aow9-n8F@*CjBp7_NX`gc2@7X zk^R@=jcNBH#^UefF!@XlOsHK*mZDu3utk4z^oVxdYe(&G$J{s#E~K*pHv;iWZkbgk zV8GTV2xjRnT6v??5da~Q~J?8V~4lU7N-(%5EwlUEzj)%~TZp1o` z*adJKP)_m#h=m#bzvKm@HactPhU7nWT^@IBUzP;q^Q)B>cp_nAEBvcElkx08B|*P^5MWnnlHJ1_ZN{OEh*8pP&d$^021B9$ z7T2e9OwU(FHk5l#Z_ikt_s`q&ivovPVUCqdmTJNAqH;5Q0kzTxpD4D&BhFwJD}ZsN z7zPkweCZ!ClaCiJF%@KX#Y|I`)dPG={~ppH$-SA*CQ}R6x?nGywg}G-9)t#!(9IdJDfI+UxnwaQ)ci%*!H*qYz;PuV- z$1OdZPjw3lb~ zj~ZX1cF?=*=UTF!b7r1W_5fsb!;WwozY9?Oj5&T8L~HLvI8gPD0XX0<<;)&CF5 zZJGCYGVSH^O8=GlWo%}8dmep(Q{%1?tO=d{$X?I;cn?>1tE3WY2Hq~#4W@_8_EB;|E_nOj!DI|0Qy@J^3ZA)QIt z5Z7a5TM+)tHf!Dy5O0VJnmMi?z7g18rWs;%I46L2B=>t@X@}NHGun-({P|uc1&X{C z`4tWuGAaxRX7^}OR8bYKUlr0hnQ>vq&86k6xpRZbb<5&Xk>9_kd&f3sp>tuOxyS4` zH#9f*nhW4$?TpXLFF$;1y#4IdyQj~bjJG}57Vk{lndpS*n!w`XoV^|2{FnnwEexA7 zVvNqN3YZ2@qKGeT!hsaBcdi*&o!f6bg=Oin)$lQ{#8%@Ni3Mq~)hkHB)Qyw%HlOSM zGe=I^E*N4>u>rFWVPQ=J)(hTy$zy!)(S?)y>zb0W`(o`)brW--ZG0Jg?~qc@_wFR8 zdDK3f)&9IZh3`dVH7&bQdMIUGiL4eNh=~B}vu_e#jis){R|isY@stU{a&H)xo%7gu z%8mJGk=dSWMP^?QOt9vQ$ZQxX3xmv%jE6T3JFW+|<19}z-iXNT0r&jQ)nHt)MXrYC zbMj;cnsLsF1eBlQ(3E*xJH@_vVfa4rgxe<530ZYGH0sO`$CR@6aI8>o?QrP0hQm<+ z$3sbRey|`&t{~tM>W9XPwBmXN-e!a9QHCW{Hx?M(i z|F-y19ixz%EBH+0Tz7?@2q`%Q_Kt*Obn1F^oz+TFts_HR1XeSCdK`}+0m9qZw<^5Il` z8vB(m6-uxxKjF5@CRN|DFi0CB+co2gs%jf!h1F1+LQaZC)vB-E4KU~cr>4GINbPv4 zytt^K0M`BTqDXP1ps)abJD%yNuxD})yl;$6ArG?0p3uNS@_L08=w zF`mjpIB}TAU>1a|h{Dv@2?G)=tXLus#Y~1cGfWE3sG)Cnp6lGMo^?!dtM7NbKW`~- zt7GfN665eMzc1LhX9;#EgZ z^C@Pyxk5)zpzYO-6ScMi_kHv0CL7Jx@eNO#tSyOXxAj8N?eF=NH()fyn%dTxt;v~z z+mD@V+|@R)G1T4>DBiS_ZDYQYXiHxQXgZ%Yr``XItss6p%c;=n_OHo2MUMARW%Ykv zi|1I~|GBLGzvc2df4|9-X)l-SGVdX|o+5lzWA<}z&w9?AdG0m&V_dEm@5|3>@8@#8 zXfMcWPjG4~*7tN)dtFxhGnsW@UR>T6{dK$Z>h(PmIX%^@WvMdh*jMH+gUD;;ZdQzx?WGD; z>OLxsl#`Fjw+wH)i)}M`=XVudD86ei0(pGa!83`rK8x}_gQX5WDq6tcZm}FVs0uKD zuokLSN?wy9a%h9!AOi{1i9!w(;aVc(1hG}s9-ih^Bo(?n!4Q7Pzf=IfUXs#}h)t3? zK;;w%@io(qwI$~vY8&4IKAPEfBZL3SFLBWc=RS~RA3ythUa16&SE=>B#>R}4;xFJD^ z0QhaLN9sFFMyG#Qa&(8&?L0r)w$74w%bvVDW~!U|%uaJd6C?q*T6blxsX92?*s?Hn zV)AUPacud=V~1I)BQ_c9NVd$iP(UIF11AlrvcyT!6emfm+rK7{X4-qQ`adu4&a}5> zwLh2DzfCyIk`QrC!rZiWd`Lf59Sh~Rf*4U~EQF8-*8m977{=PX;dklu1u8z@1b)du>q ze4bB{2I5wlbf|5-yRK;sve9kU(~ia zCxL+g)k($=4InRQfHH$*mGO+a)M7CKtkgA2=Po|8mFzJ=qA81gy!Q+&t>rZ|aX zYNwJ4Ab(k@3izIT!Mn1vgw~`h2oF_AjVvzpjsE%DUcB|*se@to6c)dqel7jVE3W|0 zA~3;Y41fW}?{L7l(;e+q82g|c!BM4lMwtw9KIXzR0`vpNDTV}@UxKXIJ&Xdgk`z8<8KFXf9&gb>T3ec>-pDno4>s9Z$0OR{}wQv-hK|7 zreIc^z?{Bd5&-NQU{wDK) z9NAvo+7yX4ZtG1SWDf_*JJUzBUm1qg3_RHKI79*{(qbK6P#bBA0slamw4{+h%Fm~~ zmYI#G9QX!!f|+Od*;;lsc8fcQoAp}SE=P#2)P?n)qkSPhBlTDu+rQwai5jeRVYCLVXg2d6I|b*h*$Mb1!& zK}cXBLCFXsg3;Jxq|F2f@CC|SP`De!sMTGdXX1%csU+<7Rw0lvpi?c4vy%Z)Y%CA4 z{)C6JM`CJSV^fd0Z3%E9rERGBR$7;N9{RXccgZ%J8JE^?nv!ichuT--I3b4?kL)gy6#BhVGQE0=+RKuDuelQLI~UgZ0PASe20 z=CNycgI%u}0rJ8sE-BHCZb zYQK<$q+ih#biOHE#1osME9jJQPiCA77>tpe4MmU#eS(o@rJ)G_1K*dmX((o?Vr?3V zaCwnuf&U1NJjd`R;-hM7j0$P3l!`&WEvd%l(sB_THJ@`Zp_UiLN|1(fFV8}`uj@cb zl`ra|B$Td|V~P}%pI!a2d=k*`gAvtAizyGU231pC0>eWl0|j?2rb@v(7$q`EQ`jO} zBjukUj9W%gSM1sJ{G(Vw=x8bb8}pbL;V$atDXQ=9c>X?C<@R@%83m{P@^+3(Mvc!?f;_&a-VJ z_u-H7*w19sFYO(zzv*bb*JAmd6TT+CaK7~-i#(e?RdZAkTQ6)CNL~YKjbiJor8YQ~ z##4KcZ^6Ql*CEd6b{Y%pG#2Hk6`2@1D-*X#_ijd8CH19x9v@suyw4%)dmtKvru(&vEs5KP*=(NLtze7gr=tgGRI9e2T zxxz)G8$WQoEL2)NuvL5>uPkS#^2$(I`t`EV@3zrjAXEl$RN_43dN`G`xw&&r$#%|B zq=gVHh)T(1y6WTE5)kwWaY*FIrDVB%fH=se*ZdEZRUZi)8?G$2hc)llb`@_ta<(xwyI4q9TdmnT< zSg5>wagYj-*T>a{9KtG3XRoXfvQv4fKU^5b)4r-O{3WEyv|!RJoBWGGX6w(7q6_EcRl7!)*{-JxhGukCujMCXwr~; z5alAc29}buAJ^h6*?rdRhqtPV7H3Q*;WZ%LQuheO6z);ZSc2FFm?y`&x9xCpkI)7c zZqvtCoIyTw{gsE8;vMHE-#t6u6+evNEFX6UwL`K%RZA%W=_kdPwJ%3_Ev7UaNadHZ zg;-&_2&90d+Ls*BRtz(ugAiqbRj2}y5oLw&t%kH?r6fp_-Pbp|#c5tr&GpTQeon}d zlgYl5Q}M>uM0Ya%X|NeSJx)_nfEU@zZ{qBS+DEh6pBJjm)#o6jVmV+}qW^c;m+%}o z^3~sh%`|}^zi0DfUJzg8rBUVy3eQ4GJA<>LOkt&543(zAeYl%jq_Blox@PC7tm>Pp z65S{zASah4w;#ft;65&=3S#*dsvuA+@>%@YW6I+Y$xM1a3z-|pnM_36VbA{j-)^m1tFCb(7IhQhIT7pFQwh%lMXx%20V(snKH@ zUAJxLp7q7$!IGjv#bX)Y{4v0n!-d0fy#`<5kDzuTJBoHLJ90P@yKa)Ynf38HX68B@ zfwN@=Mg&f(aA-b@e=u!ICd~$}7Q2F^KZ-YNU3riL_m6v$G8U1Ir|;m(lj@~69uyvJ z{?y7Y@d4lDF}k}8VqI5fTRhg1wRhdDo7@3^{NAbXZx`evYb}9&PQ)Xj~KK|Fia4m-$Jl!+zqth<(}1>&&|x7Y@R- zFPjdZZyjsz8nemvBkLzl&-b>p_Dr`oHgxp0F8_Ad6pS^`V?mTn;^r1IoO#WvA>~-e zP}2|dCJR|+(%ip57WkxlZqz<*J3IOp?mz3Xj61kfL2eg|D#xWkVLl%ebv$|?`V+XSq}v}a1Dr@3bK_tmWX@o`3@Qqj z5H5nSF{@;qQDH|gpqLt&dAYX^X^>QfBS0Z@neNi1H|q~hi+;OZS zMvHdxVTkq@v~~iTun-8K=@tSGOl~0%?ZQGpXQP@n1!6a-D(nNWuObgHlPm>LLjIfv zJh{uhqAcG_sg{Ux2{Kp>HD|qEodUj8@*R^)b;U4{WePa#1RULmXWckM*6tNsKt}s# zd()4eI6?oe7yvRS3sI~ZCVX8pdk736Ac#c?-Iqy-UX~}Ys8wlF?{-2-93 zsKulI0o!<70km zlB7Hi=wIZwVEm9}B}qYH)RUyVtCOSy50O zsdwAUES56+-RWPa|Lwh{eoMLiy#O`&$72|{gdAXGr2$?dD-CAC;~K+orTJ zzenb57Fm9IbP{mp)8TMFlLP0~?K+&PU07R1e;v-T^ly>bL^KfXpwTZWhpv8KcnGe3 zUl8fluhhw*XeUY_Ua1G?@OFN(MLR#)nJLrZ5bgTmfSCwEEaX40N|DKk%W9k>zFBfr zrH5@x|J=C&uN zLvlWnMUxlc9GuvnSMyHyJByZz{y)zTYfPbVxY4BCtmNHfJ+eQ|rRGRoT_i7W|BCR$!hJh(wPoQ!7`}R85x>tQeqx!WoUhR+?2E4 zb;y&Mq327kFR59xJc#+L8F{)vpX-tR4X_Ln1ltt^ufZ>d^4UrUKWKqlt<}9It zCc`EkT_Y`10t5`k&@~Xc?#t)pXSn`hC^eRn^a1hTUq|7o3K^R+@^21kZyr5y=$+RE zuYB^6N0#rsCXB23wl_$-Q#&opqDC0AKo|hNU6#y9xJ9Z4?p{Lyj1}=6nZs~5BPyAE zgsN(pg3{8*m6isnK2!<268#J&%U?vg61HpO$w7lb zt9a2R#QF8^iJ@G~SqUp|!SMr5gHGJZkL!2j+wohu`irXrV8qR!JB=`wSRMyo;yHE{ zMpkQMsOOJb2FI|07PHa9_e-}R+NtW$1jV;d;^5}TsLE0NI#1xNlF3mK1&_K$RzKT< zXIs}i3xIMB9+s)=Jeg`*^AKK*Ihm!IYdoz`nWI#wr70X@QhTDQyQRCfI@B0$gqf?5 z*E+IGl`NjiDzGZ0g@< z-R{}ZxqHewZLFyu+SNBP+_Jfr{iMF8y0*5urapZ+QeIwFRbGzlPqBZTUx<1Snlocf zyQV6wY1jD3ns$x-YVC-MW8(dPF9b%do%oJu*ZGbY_%zBRf8N3I>=_tmi2qP~HF#yd zw0HAkwB2PAL=i}lm$0{5tP@uy^-NSK8+r$rDM3??WIAFSQ*I^^aj;o%0}3M9GsO^z zxQe0`$YX|>@(=y{tF5*rt6E=E(`On;|K80m?{Zy!GJYsEFn}=DdiIfp<)6!m3^ z&Os@r{+#?1K6Osaz<#_^YpMxRT1Y}d{C0->U|N~7eoS&XwfG&RNzkN>S@AnMab@wD zDd)O(cv#+UHCkKKZbE!{-d)x+6YS3xmS3%l$LmH%C#Z&xAfrzJ$nWI9d{u_ELTkT; z^U|-%vz(XWd*1GX3X;uZ={Z4;Q7#E95H(>8Mi|Jj2IQPkx(sdx(^)BB3>kmmOQy_^ zKv8~qL3#F~bhf4kCFzUuVxhuz4!c{{0;_9k+suX~gXi|?ntGGkU0YkHnz}QKjm7Hx z{)scJJYG|qNYvKgW-Q4{+ym1MNZ|JYGa_FgDTDaar6QMTOEQr@JSL;hur=gGsE-k$ z7k$V>0jqb)S*(`xGOPD;1wlOefcJqw7SyM)6|R51aRc%H8;3uk1OLp#VN3+duon7r zJU8^GlrppcMQ~s8@yW0O@%SE*u#Oys?C*7gnG*>ldj5|Bfi#~41p*yMAW(ZGTyL;- zMq&sATIe^p3mPotbLB>luiny+K%knI#zQgm-rya(9 zE$^Od`#E{{g@|WfQ>P+HwHt&Yri2uw(S5{;)u;vb{U^L&hbFIO|MZ9M^1lUY*XJrW z6&DYe{ruI6!IF}}3N`|zYkT@JpemmQKWqJe$HF5ER67Q*SFv?Qk|20Ur|Ix?(^S!@( zl#=Zcj%G-|p8h9HzXt4-UQg02%n^`g|Ae1FF)T&=4G^Mo>6QY>{bUrlRscDjHS+{& zYMDFCTk!~-<8A~$lH9;+^lL&IP8Jz>q5n}VCyB8SRlmdaklS{8`@7ulC<+^#&%2+m ze%`aNeCo*1j^m|;lc$zRl!Ye}S*S#I=eZvP{2hmVOMreOfI-U=E<#i!C;;j76r74m z1TX+=v8f?W9K=_!{9LmaDotbRhzausDc^=yG~%JBBJwFSbHC@#_$Bx21xmr5u08oT zCe~RhJ`a^*aQ<@7&@J7u7buF6&scE-vOIbiko_o!>`FWLp{=xICuoJV6I2_R_s7b~ ztdry`-<}ih<;^x*8gXuU)Qn$irL_MH8=}l*VlNjGMurB2A*{4xAz#x_3g73nKX;9G5Bfj7 zs=b^qoC2T(YOa3IvlIgZKxMc0;yqjs7VShQ06;PhmPl`Vyog+dFng1YundU94CIPr zz?h5)*pyp+p%lF!Heat(D!Ar*p1wuKWI7TAdSoA<;xXz_X38)jg;fht%7(udr4+(G zz*6z-mQ6f@K2k$A#*@OvINUjWi(7H+u%0-84f!)}kk~7%j7z)MF+su@4+5)0YYUtQ8Xv;F$xt$hKC%g z7?NP%i=kSR3VF%l`2%sCBI4R(hWQ$WzNn`RuKmVcMP_h0iZppEJz-??5GfX(Hd5O} zY>u8h4eCbbuv&NfE_=&6-S5h`4$SuKn{eE0LiS<8ln-xMi{s)1W%jfzTpz_~=hsr2W;Ca(SlK&2r0V(t;V<{ao$WMw)b8Hlqfk?FJoo7_17E;d*D zsC~oxJnuC)j_v%2`$I()2E(`A-`*(vlI*h!zD=X^0e}8NdNaTwOE0je+0U@Q0VxW? zQ^-VeY$GIDR4X)rc%vle8lMzq{VuXu{EuE@>rO zvme8m(H=uEJf0d)1xibp6bhC^OQU`y98+whYLo&jV6|m(EA)^ntr{ZaGSD5W4A7!g zP+-yeCX;D>Y^y;jD)Lnr*4c+zl3i+fzeRB-j1~0;!?yflMJZ%YH%FsQ0Z+a=FVfIb z^Gvd&qPe`-hq}8yK;ql%@7Pb}A0t~JK&D%)77J320VRMjuHVIP+kD%Fhcp z1BfO=;($q;t0s`Ity?hI(WP1~+d4YB%{Fy=bD+v#HIx+dUjg=asn*_DUtg@ZHPum3 z)LT?uj(;kkYyKAFTDVOS_=pKs;-4+R8V8KpG(r77I-EiZcrT{11qv+7iV{%3aeVo% zJoL5WVlGvsa<4(8BU0oDll@xAXR%kgSX{63O811AfVCuQ;jqgn;0sbm7ei#`K$1&<7#_Z$iy>4h2#k@Hkwx~nH~k!> zIMk5@2jI_hgXYudOz9IhW!`&P=|H^3ph)fUV=&wePGW*sCdH0pg@Ke0-yl+Q^%vtQ zoN+u)cWD~M%Auz68T2@Bs^oK+_%@1J%2&U8bx|J1BAfszQVyxIk)-S*QwHfg#Um!X z8wOhdHbB=EWZgel;I^m%B2rWki>LgMB82=O5U09mRbHsvJjm{uO-0W6(qHuL`TLz8 zj5%8G|E;HgcQbqM@;iQe|NXy}mGpOqslr!1K#A+609s_Q=%0BOEj|M@{Q4`9jqjk} zdobGqs)K6h>5;fv0nw3EYIF{%1cU^LEmn-i0QW5*4Gu7%+d$kNn_6BMf{z34oUBVh z=t7?Q&$SS&aXDBz>7}NnfEKz}yQaN~Ny& z)l(5sj}`F>uv}fr7!gp46M8%G29>JSmUA%=1Wl4EDC?%8EKpqNqgpCFt+XCjPpMjw zgG|}ll~51};vvojC=Xi;6#31jxn|3)YHxeT4)B|fQP1w?^{U$1)G}ngU>!a?v|dDs zboSU>k63X(VRJWKG zT$*|$m4AM(@$4P!r>JyzBz^CV7qJX0hQfU)nC>{AZV;bQ7z3YE{4+&%14;0C62mf1 zy>v-g^rlhm1D3I1-$;4@juRw_?Aq}+mq#oVVV_7xYxpkN`9s$_QU$=eQJxU1V}G!{7CcX#@&UzE$z zPnPs}y*(vtfR}>fMJ@SGevhUvF35#i>$&=G@}wd|Lo1QO(r1O-go^+nVVtotBS_-{ zjxG2nw7%nJcoXpOIQ^!YPhhfOry}G9cOmP~81H(sM^d%uEnlVq-n27>{o(>-vW7!t zr3EDgC8%W%b^XV!W`=4u-E$f3VNj5;VZ+$K?VKi)n~&(PEX|ReT?}1WBg7!sPIt)5@iyosi<9t{5^ZA> zH5X~>@Is8SY#bHuCkHJ@*MLL_ znYoz}ATcJXG9ag&DtoIheJAcY`uOzH^ycdO?+13iUp~70{;QZh%p39oe>Y~Ykz{(g zagtJ;1X<30uTG8Wx8dCB*@Lq)_?chCJ0FnG@t+7@t6<9eI8c!Nj0AXD9pyJigGEsa zS=OXiuE({grP8tExzVyb$x!FUrWB8eyT_54o*N1xG*BGnv>K&ZG*d!1b%19`} z)HS5VCeYcP1e)T!fy5NjcO2hVeKnrSTLnUY61iC%gdz1)`F{ccJ~Oqn_$T>GC=9#& zFphU*Nt1G7SgC&P06+>(LKR9dH2Eb+6642KtNw2bx=mclz`I*vDa#damYU9OI^1Bh zZaKec`fM8_1>4)OJ?Vc;P7e&sBeg=SmT5n6xtCaf&ZH-^Xe=2`M?8vp&`{9^jf zs_LX_QLC$~2o^`jJI0O@iJfh(Yp-j8T=aGDnB9PfPpXhmEQ`2I1;C_AvU&`l(4`|x zPMPB6Ah|pS0(8wTq+tb+hX5Rc1i(+hc*-L|2q^Mnhyr(25PFRerx1k$X-Zp##)?)J zl5lxDJo{N~Q|XSq4yXNw9e2!*ZE_vo#LkyiHkh2o@=&R9_L%HR|Kq{!_@8_sJu-b_ zwl=)Kispt1kemg(d?`tLIF^_Vf@Y3W>=mG_s)h-R327u;*hAGkakF3*w%Kh}scg7F z-|XpeCnGtgLTqua@lxZ_hLW8-94`C(t~-*KlCPD7F)dR?2>$f+PgrUCCkJ;-Z$HQm zrawAS8=i{PfMIDDAAtVdM)=0P5OfoA1@}Gc5%t%((i3u(?ic5B6>9wzQJT7T!E*(x zAi0WrMYy*>#Et8QO+n4CbIG&w+n$%a*SY9Y=To|il?<>*!CNKNwMc93t{xPe*eo|^NrG0(Yj z_qOeuH{~@iH93b0noFCT<)i1$J?Gqbd~f<2EIL_QSd;z-ATgy!-2`ycJtgP#JViM7 zO$L;4Ld?Y!dB=-Kgmx}d4J#lK>|=xCe*RpDZJK9#Y3wvZUD2&6^yBJLB_<^UXU8@{W#-j5vDoj;||=n)*z| zrDajIR}ENacYYxKd7O)v?$|v!vopQ4dupOC!XBj1hV^|51t*rAnYg>H!c={_C!V6i1+?y_9R1~QL zNMIBNIw+0<9Cb5-p5hKhUE*;`E{sEpD1ktyqe#$#EeB35ueh4>e{UPFKIQ8*9g^zry`z=2{6_e|5$RA04ZdQl3?f3N(x|sLM)=g2h2flHd*^ zHKo$6>kcB~cE*@WGN>@n;)92>I7jB&m}b`XBoAxZ#cw+juQ z`U?$T?@uc6n!6EkWXM^u5hR_+T!n;dO#mY(@hf*wm*dou}Sh3N%ei~Ud1ceC3OYW=5a1U`zI?7&&7$!?;W?3ibeK5M3vY5dLG z0n`#4DA)$zqjpHRjTq`4%@Ifs#d(%g8q~BzSThfYw!*++by$&(gYFi$2PJBYv>Ner zoOqr1TScAtQwKn{(sL`d;{W?9>4c=WxiC82dr=_aQd&FJPN7ot{5lxO&QPQD(CY#z zzc8Pt7$MJxHVhERT!I0C-sL%05V7T5yb}fqgU|8)x29hxIo7pMR8S(9XPG5F(!LJs z=cAHg0yJaAFo6%aLSwJ;2cTSqbiZ&fw&03*lgW4%bQ_{3@@jzJ5`=uX=M5%h4(T)? zcQD#hYLuBM-!?M!;~4tOHtAT|E8vr3rEvWPt(oHREV7lh?{ufb{SWm|3>b{k)w2DgbFx#eHN^5 z6ZT9u`wM$N9k@b2(=v>4gPM=|P@$*oi*Oer@!TS z>TaLeyRZMyZkN;Z)&nhl7N@zfr6px{f%dTTGk>`GZnNv=JnP-@c>Ch?p<`!JrS%Y9 z_J)4|rAnX?g>yM2qM6;P4%k_V;abdHLWC z+Vyf}1y(^Y3AG$82WhZqaU7)k%6d1a+&V8W!l6x7d6+8z70-dPql z7^eiXhsQSgZP0Mxm>|#mD#t_#zewvEj)}|{*L6&c zu}b$%q4ZBSpa#u9rniDp)d4>TfS+{DEu<_f$4{42z7B$}+;0nRfSbfPf|^#+!|4vV zB!v;J#n9uZJL$gpU}{*l*xCpF#`EHd1Gq%>UX-87LD3s$4;?wv)z&ev&6v07GT(jk zAC8_qxq_pB8|Ac6%}$f_&zuO;=QdPn%LGhNJM7p009?KaxcmlQjFLC?V)%JBq+Tlw zQlwh*(e)?W8pHd-kvmSmZ}>!4b7Ws6dM7Jo78DJ8g=&ZW0{?LY{k>c-HvmEJe!Pl1 zFN7A=fRmK*VNiD{E~?Id|HyX?)F%X^y0X_vhUcfN@FAujhPJ5>Wl81s~QZ}EzO~X?NP8r-vEBdQ#lH?(is3oyK4zz)a=trh-ziRd57 zQ<3b4R@g?wR}{8{Z`KCv=yC{hsYGBX)v5+v&jjqC5R(YlK`M)g*wF$+5V6B!LoyLN zGFcGmQVhg~V8(EUQF%9524Mq*KqT}IZXG0rqePUIIJsy@L-~WF4SLuI$g{sQ&*HcJ}4ED*-{Vd1VpTZWF;IwzOzXkBX zl&~n_3zTN=aKW(*`8-9TI$H;OaBOMAd!pWR@VF$q*+zu$ef9^Z zD7Xw}KWIP^_+N3YO@Rk;3Xjv&ZlEs_#l(a|qgX1&wd$~o7Srl+@WmBO*a5nVT+{CxTg)>T1+2H7tx+5)>Z@bt4(^W~`&9^5H zVHU)S2pl#knhN9dwc)?Y#LeMPr?hfxsq&fN5;o!KkR18$cb8xO$A1LuMHwK_4u;of z4U*$50v&xrXVDn@B0%@ddKtM-?6c{uc&}D61@9G+ym8Q^7{c#O(m!0KaW-KwJFyr( z4j~b@;baIl;X#%gnXBr`QyahJVXt|wLhIDO7b6N>%B?(^No*dxnH9a|^b}|nsC!L)gD7k0H}S zkFd{SM+vJj^-=zA-HlVi)!#qLjkD+U(7~aZ!2?6{V+hLaVb9PHpE9{|x;R8~-8i6K z|8qCa*c^r#8$38TH@Kk+Zk)_e>7M_hGXyt|IH=cf;|KzOO*c;NS8wXZ;YV(1jJt6n z>8@mVD>GwzCr?#}!_^qB2*aVg3ut71mILP~p&>bNFlJ6{3{1{+V>Mhy zT5JrCN!GAjp!8#-*XF4uF|Kw>V$5I#6;ycvfL z@i0DrPHsf-z>3GF(d7+Po4Z+cS<~=Vo5eo8^`W5y_0D6%>|A3YY%m*(0*%I_$tHH_ zulEeL4{u{%xhfr;pDizLF9~8_A%gRDUDIU)0RIs#8{$1V^ILJ*n8uEm-dZ|U+Bm$` zZnhp9etX@mbw6uFT$b5TT-+!}zWBv2?iq@&A7$3`YZDd4i9it4o!7=eZ4?u)jUxOt zt>7sY(j^hF)F8?rq0Wub1Vx$TLZgbS?t%7f3djh#Fw18{g5;Yxd2%1%f@HRzN8Gic z`+3%eOKOx~bMv4S`|z2;qsMJahUO+*Ixc_8^(lk7G1k;;Tk<>rJJ`LjeVsT!ch0zH zeRS*0ffG2rHQ=07K|X7hS>o^iPvSB{gkUYeVZnt<5SJ^2H_H!xrv(YEaSl;YyZ@d$ zZeKF;#Tl?TnJ><|Yy%6^G>MjTI9@Gqnn-Ru51Z2Qh0O7)7#y(35-DMBZnJ5j2EV#Ojyi_VhB6t<7 zxNtU>)p-&53cQ86I8)9vQ@uRoZE%bri|JvbhV%d8KH}Fr>F%R7Iw{+`d86IF zz3Rl+iK-oT+su}c?e;4B>7KG$W5ifiR$6PUGL>2nY#Dh~j{M8e<^%h;yt?JU!J5if zE32#VPYvh>NG-~;QRQpj8+eXD?lg(g301@6f(+ynZjlK098nky300)Qs2R_Z?IZCP zOWtjB|24K$w(G$==8H}>beT*IUvrOj@10zJ`N=0)`A6y^ky_4!QJ5QuP$j|6T}-w# zTnULf4T{+SJV2c+*^EmAjK&qmk!8xtP*s5Ev{p%Bjt*4lmcsXh>qxWek~eEDia_G~ zjJKh+Ppvldink3*dq*5wfhxFG1*qcUrEhCp_Z_*i*w*rU9WS!5<+rnon0Ex=8{y!C zoRV>MWV}cv*YzUt1Bq}?j<^ScW3Dk|5P8x+$^WqH!@+MI{>9?0hrfmQljugO+#9=) zN>Jtb`Yt4{Q~1diOL|=pipB0nA9!hGw0hpxJiS-wcE9-O)%#z01p@{!APD+(y+=7i zt??f5q4-F^gMd(BHgv-1yGc`HAT-|36`9=-@%NJmET1IVL+TfwA(c>86vL56#3sV1 zQ6^9_%#kISO9^E>T$6i_$aO?M9Bei>0sCPA!#&7E2tvtz#|`thCdu;Wc7E`#^uL^S zoOLa^Mj@%DuatLtz1?M$^EEm-iJ=o%at)SzJ?~NWCgysNR*B)XaJD;;C5qQBZRmja zC?k&3@-bo*SQFqtUgbIxva^Wt%XS?Jw#;k)k?ZIWtHgadqK%OL1Kuj`GNO{wnY(?+ zWDUCuyd@^#EfF{RaDK^IZ3SJFz2_;!T`b(j=+XUOI}k688Rr{ z@l*x4xF7~sUdw+J%=I4yaP4e)S#f2c(vM^xhz~C2()~w5e1QI##_R zHKWq`0B%1tT(F%ya^`;2U9O+hJvws}B&*#=lG^^03rFexBM31$xe)**NnDxi1bpV% z1>_NAPZLP>{x~dlvRfg_ivqmyRW+G2*(8}aYbXjCOCqO~!R*Ji=`n9rOuLN1!s=5kxR7E~0 zE-FJT8n{A6OK8NI#U#1Uw@KPsR_1oW{~as~R+Ja|T&3<(oLeVzTFj!*B%;s>z?$28 zB@_ptPwLgyNVM6AagGuOpq-Ii8!z0LEG7pIo>lIwdq{S? zl+wkWV%TGY!3g)I5tW#?n$47hY_^#Z**SzT}4|~v? z4tdzuJo1sn#q>+~d5!}lC%zr?gyE8+W`S`pWp+Fhrw-;w7K(Yy(?;_`~2k4(Y>CZj-D>mpk#azEQb>`RU z-&6g984LmUHb8R^pF&O;3%=Ll(lN#F)Aws4uWRxAO_*XKS!`fLgSh}%rpI}paW#T5 zRJDc&G$BnL)zsWxuiIiqG!IG1pf_Nd_!llY{7d%buLlktawbnD%?*v4riU8`%=p`i z%N+wBXXhu_zVu(j``C-=SYMp}?wf359|x3#zW)kH4SQ!!-#t8oOX zl%z~TG*lEo3U#e{7aZJ6*Xtwl{%fR~0?5*8e`<{wROXGx(cwCnEAeZQQ@3c7E6q5Q+KV zz2F8sEE4S;p?Eu<=j{lD!CERH<$@T%G&GRvQ<+Mh83k@}#dHbZstQvf>JqJm3JmKV z*~JV~IFk*ORE4Mfbc-8Bhgr>K+0kK|{Tgur@L5!dAh92f#hrO4_Qu=|p$1d%z`m7O zu^%7WJ$^hArg$;Tl{i8sCIn11h&kdjgrs~amFl5uxp`?eoI!=5(iB}>Y&L;d@v^lB zT!6{1ZgaaO$(`>;jv$_NdOVbXS&XoHa+Ze_7GrQOVVYGydgkSGiin_)n|o=R=^r90 z!w*N+ni)=KP3Qvg^a&Z1^Z zYT{g?K}K|xB-KPiLBv!y7B}J@h4mo|Xl;R)b6)N?*DCCyd^?N^Ud`LjS0dOlj_?`R z{d4^X>n!HsmY!a_>&~gZbxd{_{b_vIVoAiCofQpzs@mAl&~I)sC$7j(9=@S@PkY;T z6xcnvdG>r)5_R3n29n8v1Bv?jL{BXJgX91(K+}rA0djM2>Ua(gW{*W7U=ukwn6Y1k zzG!-n`WK}+8c*q!E4j+f73^&@yyX-dNJb6R5VHelJgkSJ4(Lu(9{O0FB?N<^X2rN7 z{Mf8Yh;KC$GbN$`nBlfAPIS53m7+S}L)T=N^!kZ9o71_p&se%O?qYxLO8?^0P5J)I zGp+r3s=?dWJRrh4+NS#tPA?R9g{BX0eC#dv+&(|FyLoF>SL=~D;x}+;eh-xtb*tcq zh7|~rt)i~@o0$(=R?LT3#vfrm%zXgnL)>>?6XiFW`SX$NZ-rW;s^T+lT}SQiFY5Fo^3 zzqN>)YsBQOLZ_AJL@J{uWHXLVl$(^1&8`uX2bruzyJm!bANwYP^61i^2!7n(bekJU zHj4|{?Cbc&J~>Hu|D>mq@e?QFNkDH1Q-`t$!xdu805p#6b>w9c*PPX?y5Fu8X%iDXv$90u?!}r`NcdDk(sLp6KeMWUuMqMLImTbvZv24kT z70YsyyDi&^<2W`>Z%%Luq?nKp7DyIIA%!e0u(VzJ3kk~x76OFOl1*4xLb0yC|8wpg z6_+IZ-tYUIjHcXn&U2pg^nx~Lni=_2Ntg@}WGM>@d;Bt42O z=6gBBVw4g)-_I;se%;**jm!d{g{(K3FHvP zkHPoh%FyX5s7P+HdWe3+aqVXCm8#rf#d`%}h-OhChh#u%nLe$r(J-osT;@^j+ zr5x^qEM@AI%}M49R77BhD?9a4b=3zPcQ+16ruBDJC-lb3rc0VlqNez&C-Y60cGlGy z^KP2%nyl0xhwJ-jeLP;hx3#*vFkx+qrJH+eS6D4RL%8<7u1TwCS<^JKxpKI^l=4!} z^~opUVj`{7C7_HAWds#)!H{Q1V`<2xfueojLPV5GmK+mBtPPzYVfHxAOO2dY>YOML z?G`cxDXw--cGzp{M)DH3^c?LOKyZd*BB6%{WJkXvU2ic)*c5 zj1Weer^*;xsrZW=FawKhh9YkGNGWsIj^Ee~i+&n^rp#Hcfij?*Cxog_ohyuyYXpJh zb$yc=>%U`Fuf=IUwSUKM^Kng0W$iM9Qx_~dQI*geDw}RzX@vzRSg@z>!1Rpb?wKjA zF~{?oW7W;QfF=>Z3BKGx(pbo+&Pj5L15yc30RLI&R}XcHcdM7Mj^v^tOA_U~kfBWt z#-7*yXLs(fxv9Yr44HQ^nA2@&fn1mFFu098D$)(IcVy}$bp72LV_);7_<(TilTB&- zNfRW=j?{tC*+^9(eZ z%GTefl+afS=wk~gwWn#1Q|h&d%!gHCx0pg&Z-k;oLH+uG*6O3FSSh;3)3dpx!G&8& zu*K=c-k{%MFiaXDh(jB zv5#jj(^9H&XFx6{#G`14f^0Sc6#{4lIbwkf=D*#wsH?np7}k>lyUHTaOm>UU9)I(T+`4v zgs9$xN+&!98u#S_C_i`KqH}{7@j{D8j4edmjk-BfFbVf)dMqN(eZwCO%FGf&PC+Y& zorePA^q}%^hw&66;J(A_@RkJ)hGJD|s#gjoQ2v-wK!NK|paYfA=PJv!Hisnt<^Hjm zl-A)iF!TK@D{R)?<4~bOjM<8oWxX=0J;{G4>gg_k`5+B_3TUoIRzXOCc?cWT4kSCm z(L6!@-96j|i$o}-)ap(e$mgeSS_zfCbwD^H7#9$Z;%K9xQh#w#exe|OKy{w|MiI5< zMaajQ6W_E7p2d`sSk%9-0pc?D^>xTC^BHQQdmLicvAfIevy8Q+8$?^bsn%RPQDUl1 zo5H4=FQ<)RvuR@WduvuW_wJ2ud++Lr_PVyi{7%_P( z6DmHjaD;2sbeKpp+V1kO(R>vAq5MJt)ti;tom{>rn;_&yWyC%gX&&s26Se}lO$|lX zJ8wk6SSc~&Tz`dUOdqRo>UKR<*iul?k}tn18nV%YGjdsE1_FE~;Fg4(N>)KP$z%>H zlR`OrqE^32yL;w^GNOJsVi=9LY2UOz_S!$|T3Cs;uUp;2jJb+#{5lJ7%M z63lAaba_0c6(tRdAH(9NrRFRoyaSaR!EK50A~iu7UMdj{7Z)N{9_3hZM=Q(`sG#V; z+MrCib+}w=X}u<(sXo+o!GhCR4t3 z`uRXvS>X9y1uj>?uIFRr0TE$ULQ7I9;Dy`C{%sf-Xb(a(-b;j*M=2C)PUjWV5B2s266$EL<>w=(2jH5 z0SnR!!>FQ2DZy5=39;-z4RA@43+o+qpEwa!_n>eXUy`bLjORhuh1_r;i<* z-gz{+d9)Ixy+=1EkN&E-wA6HD8*A8hDckHx+tkRmBZJ~les87xjmlm;jn*a) zYeTLUALK@aa0T*RPMD9`szr;SNIzsy<~V}VZ4{J(pf$mO!u`1ga9j}f4gkOZ$GeXo z-~A*Y-Ct1da+MeKf4d|QC=p*evQ7T!wj+S-?BzyD++{G#KIrSMU}Y7(K0tFFM(4!n zD60zc27cj&ZP?con=xTW&a&M^E@VoiCc`lWk)X{nVxJvBPf&eDfEMf6=j9ifLH-L% z$@^Mc#h2pp&*Jj)af|?Whee%ZDnSF>nVyG=NDGE^Y!+DVP^?nzRj>~OFp9m_<5fPyf zd{iuCFk_(0-2$?pUZGkp_k3i@IM7@RnV)V%e8eM_e5Dr<@RdSL22^y&pMo^T92a=<{w{{vOnlu{y7~b@nNfThI*Fb;d zn|Sexnf0_{%6}n8$U#tKc=ext`1I+Ax3{*kG=WlnhV?^po|f<9h{Km|2!k-FgFvVO zr)QkU0Y^|kMNr%y7eSJGJflA72{~##^vI$2y^lS2*Ij>YZN>fL@!88&^eDpSrfOME zDCn4`%LvLub~d=-k^Z2^w3O1)yymN-?D1vF_Yq#went?NlOdCi3v$@L*u}Ik^k}yp z`b@neG`I6ua@)G<@Q2tv+mCsaWx(bYuaC#&(rrhEe7%+IWfkhnF&GQC=pwwvC5cRO zBP{?3q=Fscfl6Z?n05*Dn~XF@Gz~|v53hBPtCc(f6W=RVbSx})&_i2u>uHvjchLII4sd{Lz$cVjx&iQF0durL@)Ep&H|-J) z!V6(xrwB4(5)^@I?UFWPpipA|sNy0NTK9qdp|lSi{d|YkBCrIgRR<{m{0x2P9Ii}^ zV_Eu>LxYc;#+u%gz7=iTwNqVqYzIkAZ2x z!W@xW7Mi^3uNpCV;w_BF-X*`X3}E?s=}-}S43(gogM-ELnwWSB6gCk>m@Jb{%|!_V!^^VxiA4L_xLc#d!Y9U;|$UlOZXOf!g@ zv+^BRUb%x_#A@&wP)SChWS(Zo-vC*+i6?Euc4Fd?Zw0ZO6+XPP2E41hhY*H>hrOt# z)0u5A@`3k|DHvij`MtE{eJ3FsZedW!F>cF-UsyvxgrSk|E8M^o4jS}?OhGOOpe>Xt z1E?&&zAo0!jGGP~nmh_L-hR~Y_4<$g$1(tQ-^9c|`7=Oc`EwF$kmMhhPi#zbu&&~a zoJ5u|lr>~4lt&PCTIlr{G+I>Ygy6~r58vq5~^3Hu66TjOMAAv=af7rkD zT?~@pjFd?jqAo^ul|^8dd~XBjFYR*W6JMV`*3~}q{qvyx^d~hr{w{x`f0yqw-_Joj zE)IZD5R>;2!DzrcAW4*(3O`w4?Jzz2h_&c$w(0T;*D}l9oX!j5l zcN!?sNDIb>1g@yjZtT+-ZjrMfC*KDq!by>CDAwR`>)WtEdI>W;i%RTb{ zczWb+v>yV+=>$FYLD-53orLxsFnFc0?T9pJu_o|`3JliA6SViHAdQ24GNz-zO|%zF zl{r&ocHTXV(_t&s-*sePTRZaB34NPSD~-iD4)pr)y#eotd(th6fg#lEps*>KiXQ#{?aX=dAK z_h3gupvhHJaB*$J(n`U={gk-Cf0=vFJd8!;siA@Xes~o_`UD3LN&Bm z-&6khv9|l$K|5c`EOR)z8pPt+D9smJ6?=gS9tNP1R1o@9BnoYM9mOhxixArcV37|G z?gD2!1Y(76M#7=8AS#*&0jgBbS<0fvBW2yk)k{r?kOTQ;l0+jyokT@%lE%mHTn>YQ zPOBYloTRG$q9&WX^!B*HDvD-9_0HDeRyNr_E*Z62Giu9X;6;(LvPcmIzVIpfV&%4A ze0%gouz=aa?Dw%AfANY~3*bl*+)8OT8)f+OIt0Xxfb;X9#BSI`oJir3Ig#1vbaFJI z(gUzfKnOr41`Cya^Sh5;|8ULcfAr|>PqK*~`Pt>Hi`^st9Z_Q6mB*M*{;h&OXdemF zASron5}n;h%|d~ow_8M{JCgxDXMmXF-T$3}Oiju^v__{{)i!_fZP;Ay(Zff3IA;AznUvCCMnW zmxEO_fDGArSSDdonhG9LI~zwS2xwJhDqpKNlv90}RYm9gCgC^u66oXvDT83wC&5h& zdS;j}0@Aq}o_cZ}=*UEatyh$-x%j!jT-_wrx@olu(JBIJQS)oYvn7!*)P;DsB2rO| z@<#KOh6`DtS(QdX_iCy4E?h85p(zh2hF%Y838W5E39O#b7|Kw7G*%D7`0F*38`s?5 z-O{vDlho{(K6Lc7edw0fzV2xG7ncv;@31*qT1}U%?jLLH?pxm6w`uYc`R0*SI?V># z2TbRi z@)+q0U}>b3gF%o8ORf^KIh5(~i#G#!k+ifgv&w$@w0%`(V8aIaUs_w=Fggter?I22 z?^G)!rs^cBJ<4a3)q5sBzF|)qNVNwt-!DXQwD039N4<$nAFt|l1HTDER-hS~79fqh zooPW8`8pMKku2MsW-n3|$*!PEe2W?0Id%n1f>rH2c5LVNE0R+qRgp;5$W-zQQV>lu zo9>yKnVA}x$dl7~8wNJbtY!~-yHfY0mSHi8F_T7k?qWv5r8W~5GniYaaHt#?{XQpX_os*4GuI#!An(nlh=g7nmIiPn$ygTt%Hz#jMSu!aNb zdfw35`VJ0ZH*#QW7ucEdZ1Uh3$;g z4L%{naO5li>au!*9^%Oqv7o7~$801Y?eZ8SyAiE#C0S;69+STkO^;dmGzTyzYRO0JKa5|!ke7sUwZZ*hE zLl$RJKw4JA&V%qnbn;Srka$u0g-S-DdJ|q|l)kU!`Z$IOisT7-@PcBF{e=;C-get< zZEfFp8vo>1TT23Q_QQClWm)`GTuy=@->j_)a{ODRZj}h2n-(5ah>5K{6%M&TBK1*t z?TMN=Luj*yUtM7Q68$(&kV9m|7vatlMIax901o~RGVp6*jpVUWMcEYAg^QM07tkF- zJxuVzXCv^W2;pwYL|JKJq$q-YobQT+YfR8eedw~B&H(R7HBd1TFd%bU4heySJ~9vF z)@|>s&ZM>XWdWXM20I9=rW(t*w0Fo{qC0B`P^iRwh=@esk6M_c=Cd zWxw_V{$bH7XV~Z5JyjpCLWe)D8rZRAom>^e5*ArBuve$8z!ZedWskV0(~u=%B6pio~G4A_Lyq#4pcn*`Y*kpsfQRTnvT zJR4L%kcj7p^FsuHq9xO}yv_6(5Skmd2#3K3fwx=E0f9XCV6pe}Z1whui3>vE>?h)S z@w)izE92X;(e><4DvqXsql(E3JdjLY;ss1z3c3=pdADXSI8o0rdu4vue&0tPnO;E{ z+R%LsTq*MK-yfH6W*T``!OmnAxN=S%Gr^pL%DH9+Wr>R8DGoNiX%vS%ygm%h71bec zVkXj>f@BJS{f`Wfq%W~uT`NDq+CKgB*50fbt(YCDs1}dUzO({pV8bq037$b5BMyVa zm-?S5gy5JLFEeVi5=49_ynFo+G2>;TNoUlEaP29-sUl_xVLM_}NUy=}K!-_5v&jsT zB-dJpUzRd zqO92hdvy_zRDBpF}RlDd_6N%JRN25bz z2rMSoPEJ6)XVXmF#=d2<$#u3U`=BBsdb!-to6r>5^gm0O4_dNx-5Bp_L^uf+cfK3>HmJ28s}dADGC#%DXv>&Y|gr&mPah_az9V z;V+Jhg2Z2tf@r9&lwu8vIVeUO))@&U-IB7ItMhl z-ASO~kyURG8m>Q)^m4(oF9;e}Bt)RmVc#y5Tp~HKh0D%90*ylvH;*rX=Cu6ldGYyk zB($`aKFzdT51QBwt!Os-{V|Bo>lE>s!-jo6(EPz08RlyGLBFiS&&@?bwY?X zB)i{9I6FXwxd;bF00t>YkUAx)i5OujcNWkir!VHH_PJ+|XJOqS_K&9(AV*!1Q<3?h z$f-HB2&vqkh&g6lF**5$En79PB3a+j(sIR5;Y|WtUlB{~nFxjYMj_>Vk#qP3&5rDt zE!oBn9$o-TChNb5Arq*4VM8X0XmKG#HBFL66H@fidE4dN8Z!Hnx(zGpTFXk_TibGE z+vt8%5?y=hTKxq#v~*v!d(-8qROEE3ro>lXS6^{`tTI?w+4SDJ){1Cx(wMTX$qY^O zcUIL`MDrttm}8=CV8aMomg+F4tgX>N+G1Q*RlU+0GiSmjbygFK{|FhbHGBy+Khhg| zvRxhqO#$XxBnN2>)5-!)O61RJQ79|*|K*$%x-8s>ieF9Tsjx(nEkot0SR7SzV6}+3 zA@1sBEgdbl+;aL$U;3Pk8c72A)T4ky-3CNKX9w}!H{vOaHW1aF_%c4UBkMt-4krHb4sJpIDfP(1t} zv4;NS@%t`!xJA)pzpVVRtK08J*r0rS{R*>rWgR;>`w|J6IcsQ?%h%PELR+1(gTgE^ zhAMn-u`x6jCHWW^1s#P2i;bbw6o~3~g0n}JNMo2oV@s`}+&H><^PMZ9-!f48Rdti# zw@|p4rn_?L-mumzGNZ2avbJ??Y^ZHWZw3}vbY_fx#vAnH*^$6-T0Y<{^|`MEcTRg`LWUBoI1kiNZD6ge628$w2mNn{mm{?vCq zb>i0gM_>HZb$7GsKKWZKUT00uKmSYl^Z)j51W?M=UWICa6rfo^a-qwPf_ES}ia{N8 z386}m5|nD?JYLD;#<_V;cTi8v2J$l^`?x6aV1;$W((&E@~ygZJHADgPmV zZNt+#yXk|=Za27HPseLg-KhNk5w>CWOhd*>J@{#7c?_dbY@

EsXoBZIsZL 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 literal 0 HcmV?d00001 diff --git a/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Italic.ttf b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4e9c3802dda3113b0c3a7cf994c7ad3eafc9db4d GIT binary patch literal 211624 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 z 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%0D}K91mT2<&~T8 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 O->Y!;IC@JP^Z5%-25>R} literal 0 HcmV?d00001 diff --git a/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Regular.ttf b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..70d2ec9e28d6e06e923629b78b8a12c12e841589 GIT binary patch literal 208576 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

M*a5~oB;oGMxw@F(#} zkSvKjLhDw@5wJB_R9I&q)KZEj!sto79q_pEWGNgfF3Rz{3q6JCuII8+F$a;FO|USk z4 z1*#@NS?6pZ;CI+1sUXi^5-7=Z+kFo7Rnt*Q8Ro`nnbjM`q~5@u$xC+}j?~pfDr##h z^jBk5wck{gl~vKVcB=7i3e0X4W(UlWl+a}W4QQZiSuJB&TAW*)o}kjmHk@0jW(|<9 z(5(S>KGe^0WdQM$X-1U6z)>FvwV-^Kg643B@@0SumFts_Y1T~7Ioivg@c4D=h{un7 zQ~qGQ4>I0$!J%d(60L6@OoP;cra?JUGO;WZHHgrN1NkVEl12(z3!t?CTJSrbNXsCT zz+lOtrF`QICuQ-gHcluhXrb}=yey@Hz%EMAk`{6vi=IPTNVexibTW47(2o1%Zvoan zjdwyPS(igP$uslQptYm-gqN5vo$DD+JEg53b0>M+I#9+=VyO1z^`R(_f}W6^QV(mc z!zk&K&E7kFSODVrke#i4NqY_Qxwe{ZKYSRbxyk)S^hia$Ug=HxppFBeOTMHT`9WorupH7&QtSZ><+CbGoRhlnQ{raiIt29av7 z6Dp10bd*BhyFz=xpwaP{*%f~=egUYHlPZ>a6Wx9v8c$i2Y@BIkV-=VLtkPy4xE`x7 zvm`n>73Jmfrj__RSOnz;>U)d2jHtXUQ9wnX8&p|C_asPO0_LA9veR0Sv;N7ahI5K6 zU`Ida@Pc8E|7%XI+g6mleCxgUZcSzvsqWewxigK8dT_v_44mKV$p9Ci^+zHAD&=8! zk(!ytQAuMajtX%X#&QlMRomu30w&r;;AMp8umZMqFeBSy^*LVxi+%6ad9QMy-YsnR zdgm0#i+ekc{6W5U9QAF|Xj0^K0euL!Pi<~uv)J66%R(}r!ewdwdF>0-pfIhw)3ojk zy9HpS3MA3mnzoAe0dr{Te$B?5Q-H|=cIG5z`+XinX(Kg??+^GErafv1kZdo3kcJu- zuzHnF1)U;q$WXapmAz2BvLJi{p5X9V2 z?rj;HB`_)H8p-Ko!yc-g#5sIHeqJswD}h>9M7EanjNmMtY!&np0>#EzQ=FGqC3b~g zAK3C=OzZ{qW+$}!zTf^HlivHj_7lwIzvuPL+bj4~#r+`X5AN4C?BCC6`oMuH7%qe; z{I$LZT(Cv8yO>=?v56ft4-f-U1P&*$-LRduN=`StDo%%4EXd$uK|x}UezU;B$=yAe zD2EUZxgt_lG^@DEUT80bK^%>#GH~+g(uKjgNfz``(nfkyJ2jvR{;gX<^fh+f6if8= zb?w~Qv$?Hd)$FIPs_t_3@A zs1A6?gwR12Pc9;P8DtKQ*IyS-O35!OvyOaIsXFq~6ojFANftcg)Lo1Yk)^Pw!Ox&@ zG}#o%wi%q0WJ|n2xa7wkP7^Sif?$r*p)Y#s*lVID)4T#-OB~(&s2m^l4c6Jr&n?Vp zDasjs>dEyv1y-l5{9KoOYUKnDJ+&x1Nr&F@>>?Wuz40GS(H~ z0V6o56)dfxNlXfpIQMj6GEFo~VabP`>I0WC%)>bQ{`#usdi7QI-pfuO1hb4^i=DX` z=iRmA=OWJM_w(icf;nDqd*L{>n3 zif=RY-O}ZUkS_{tRW&xqi>~zit+=u}aoE3zlM+h07sZ^#trQ1zbp5mo` z9FWUY++@urQGoI1a65$^5BV{YMDC;U$G^$-!PC*XQG+J#g$@GZ^gtA%(z7s2T!opD za~^ehi9iQAfo^~;fGzi-hi`svc8RY9_j%Dv7KL|$pp7QjK6RZt91O%sBNrY?sO6`h zvth&b;T7}xab#cEHg|4Y+uY8Ba_;ciXAgg6c>BDTo%{dZo!Fh|#*cYDQ21%lN4fnG zfgb4iCByoMo&bkz|z6et_i`xc)sizy+x25AY9>Lcu!I@>)=zl@|@1#^aWqO~$zFKsFQwVUn{` z0-B3deAwM|lOy2;E&UYI z)s26=S)1MXK_6y~r@6MfzF(kpqRY)ngOGBk4c^1oJ7`6~!D%MN4?5N;GWZI!}s4&{*o2`dr z%hZu44C*Gm0P0OsJc!o7Q8v|H=t%j1r?C`%-EjUgsS9SfAm$#Hu1mmx3P1|;WL2it z*It~#jQ|TV6JU_Cvct|)8SNi;;1ssfra&+rspPO$QR1OxBgAvdDFq1fHtxZ(4Obp+ z!Zl;Zyh}7p3`=2zThKphnCKJw4|z9uA!FhAA^8q@=DZ|wAkfv*5v=sa{E+oLD$mK+Z< z`MVQ$LvEecSMxe1jgHCKkao@~ili!Hh@_iZP=*ShTO}EWFA?7Xn+3&pQ28#)23Rr> z-%(Ob93v7gt}3a@3uYJjiimGuz8P@n(4j(%1G5v%!W%cOwK=LGdC{g#7sbd{d0>jg zm8~Qrr}hmt*njG&{o2>wI?DWt2@s%b6$iHomyq!lc2|qAyTS>j8}DFHqDop8FmV(^ z(A~$mCAlSZCg$gvNmTghCe>9eQA%~C07(i(K8ipi6KLKhf6lO88?WOR$@XM&{O<;s zDeu%Ni2)Zk4}%ARDJ+XHS4SiHW%*^r zg>ZD`>0YW#5Ewi(I#+_L20%`_tjKx8{Zw)KkYqdEGetlPZ`CmOQeDk|UQbvi4;6W; zuK%9!PVt{4g%Gyoaf#GNO6uV!ik^)R(lbHZlp?K#U0Raq6exx-WNl(q5w>xdL0}@MBy@36#2QB!#Bgv2t73z(ksIsr z0$V*|M_{WjEy=`*P+e6~UQ%CLpP%c`_7rCp!*>NI4N;91_&2B?KHXR`_wVXQCD|QY zT3~1t9$HF zhz$>&Y=DCI@^b@)IfX*gmOR3*)>MWTqP#4<4<@Z}q{)Xq9llsgGkFo`EcE>)D-_E5 zAOAw_Z;j6GP)$wE?EE@;UPZTc%J_}we5Ml|0Vy4`=TgV+<@}hlh2Ds@w7P3YBd`D`hk~f zYhF6=^_OaEQDJrQZ-29he*P9aDHGhH9nzkPsE{IQL*jH8N#tDg4<&1@MZPivXAP#y zxZDkW*mkMQ2_9&tp2UdKfP>WLaBxe%V_1R!jJ=Pb8FY;xrY&^)tW1nfh5Fn$bXYX3 zhGD)X9R?N&wF%X10thQrgW+g6z&Z*aDCoIy$&LH$*|MB%FWc#zKd^quxtH{xIl#Wq z)x`$12cPlHa=T~wP8t6P8@TGKuiSU-wE(4d;)q<2X^?fi1ijWq6QD7aIA1C`GgLI- z9g|dhhHB?ZgKj3*Eom-z|11c7!SUpDWWdL5v)KpXXwI2%NJ=F?C%u)xF`o zuL3NYba(CJO`Y*jG|_zRW&Zp;|K-;Ni;9BRut4Gz>wKlIJTFpRn76jEZAoX|+MGj&_UhuQ<{t)qzPwlSe7@lL8|{rb1-bsL9K~skMQU4` zYS6RUo9UOGw&sdPaOLL|Es!Ap`)K#`rwSegs1p`?gbm)k(sMEpOt(o7_>8HzBO}c)90ucxVP|_3@ zws6&@3$MF$$F9{&7O&|^RJA(fRmq`|vrgL{u9!8e0^bLFcdcbBuimq3hxR}H>(=(3 zzhrr7Vb7|e^S5Z<7&)(x)iqXMP*dMfbAB~Sut<3mAIO_AyK)3Q>`6E(L&XIa)lO}> z^C58}O%)BC6*h)VgeqAutXnMd2FRCUnj2u30|6|9$fDw)=f6n(1rSt^bsNRN+1m7* z5X2;PO8p2us)*3x6lthvC@m=}%z-V$n<*g{UQZJrE_ctJ2p zHhY;3#ZF~;uH2uI0mps&db>cVgAntyrz(LH1v#FHJ5x?Z^)0 zi$@UNB`upcQ_jFD%#jw8OCX0@|3arn$cY8ESj5@e7*st(qCvBlQLRjtHi68P4e(#i zv-UHoDHbg+3zZZ)Y|xG8uy(tkua+jFAbn%;Akm|vO-%bs72%^{Uk(Xb*oypb%(w2W z;o0@@IXA^lt?RCs)7(7!%r&urGu2^BEE=n8DKEXacX@YxAUb!?S7za`vi zbK4V56|>2@R4Z*qP~Pt$lZQbeTOYKIbSF-SJq>0*$Cw0Tf&&~&7ZbpQVGM-yV<(T0 z9l;84x}pRNUSw$_baYudB~tFoX42e_cIp9BS2L@;Gtya@pAC86X_vgr>jusqv`O8( zu?Kb{iT~ViK;it{W>5jr;tx7X{H;K^jnynYFOfKJ>9QS(#ExYhL$TOU z2mjeMd*Q;_v%9-O`P6$oKh)K|y<>FI?nR>=`b(^Sb=&T?RSlrT-EFJuS9LaD-rU*Q zOjn~#e5jzglbE>)Ee%qebOuMv+G_A)wlqT}W&|H6ZCLC7yEqsSC~?h*k_gqVNka=XL(b>=_tgMX1Dk~eIT0hV3U>C^0 zQdDIY_RIq4-4gq*yg=yPThTn`&+>~>RGBq#v)qltZ_;qxY~}#Zo1iK1*R7A|HfZ zCW$~u@#Kp(YCpm9$7?@DBe^*)r&P>}sWTVp7%gfvK53a$Rlz;tL658i;>2sfY1r~* zLp{YKYZonEGtjfVs=O?g(e0?6e{sv2o={}X;w1&kBh1pXYGv=L1*7>TqmimvzFC3# zki7U!UubC6;tCTU{;9MyM@e;%M^8>-2G|JzI~+g2(BUL9aj3@BZ<2?x^u<8HT42e| zMW#FF>TeJbM{k zCZsFlqQOK-RV7(Cg?QzOdZHv%lN*xjv)CH6Ep#Rg;Sq_OzG69uQxJ3$R_f#^awQN} zW3~pfe^kcfl~t{+<41-suw{9%ku5#LJJ5I)2Cn|ism*S}TY&VQga?JL@x zK=+cOqNRO#?7QO?>?gtQ#f61^eTCX0c1Cv2;q088?87Cn}Hq`@aWjYWS%mG$ElvM5Hx|mAVRHLsMKER0zPCt~0cbPKz>1`B9MDjJIF50pY@D22;pR;{!?aav`GZ0A`Z@F~ewvK7OXc`0RIK!~u9WgvOZPHYz1FBdRitbks?1qzF_ zys(f-g|&sXQKTADqzY++h^#_?EmlBr&j|k_8J)|IqmbY~6uk`F=7=}JBXQHNbs+us=LubmgmMb1HES8;A* zr}il<_y@%m4K-V}2brU=qOq1NV>HiBKF=y-T%48IQqJs7ux_}_OcQk@l!y{7QWJzD z067o{DuNbl%h)10?RM_1r-TcqeSjt$Yp9u3SXGFmvx*3aI&IRP<4>A96NHwZ5}jt8 z`%h+fH&<^?j;y>gucSEds+s0Lx4trF+jZGx4;KV-s9bEAy$Ffv_aHd*7lkQOS^{e% z`YnN$jpBYj#==oGjEG;y_FMO{7b)TRt6#;vPvBhtv-B7)6t&;dYDJL|6_$-G1;SID zj?T~%L(gk3JoZ`=cW%Xd7gfqTI zBcL+iO^_*4&!&2wM&Kb82{E3{!elvSHw~d3kDSe){siv*Gr!k(IvfMo?jqp}gHO{) zAn*j5oZ-G2Je{-<2_f*L_)$FM$^;dN)EOOuHb8v{&x2B8g=CHHbq>|O8PWe1i(?I5 z9F&{kunhS9lH@P(>&AKt>hO8pXjvyY5Gt+nJidP?%_EHGGIQ&2pmw*|1uIw9&YM@e zl6^;ek8FX=Rrkdj`>NaKHa5;3zqOqWw6CsTtwT+QD}p*tT8M~lq&35JFg6K2 z1wL}jnQ6==7w}2~&1{P`0Vqf>s7(_$A}K?Tfo;-#bb#$BJh;79s3?3d&;gSp1C0j5v*%nA~1;#N8qPV(Nt zL~#H+fzE}p(!%`Qpua9qmm;wlcLJn1GGlNnMi@&7F*G2oiBpimyz@_)UmJ1$i2QQd^tHrcS`db;Fh3G;jKl6bb-nl88Z4{`M{4FP z$wb$Zn(~$3oI11h^VWGvy~SaeHI~eu9d7s6c1Tu{{LWK#$?{tPZie*An(A;Fyxx<& zd?}}b!Gt-P;D`_l%K#-s7Z&(^SvlUEncEyIWi~ZbQK68Y9D>3eX^tWXpX>uc)V?q` zs2*H+PMAFqK4+n;!2Mb6bDwqRvn>CM3%1Q2|9i)l`M>m~xl!cyj;1EGybspry#01g z{g2}f+HPC#IXw%{=~3C{dI&Ae;LOD1GT?X^PMlg=l&v5=ZYhZ=4%pqvM1=p`BG082 znj^{6yg3ntY)DoxX)@N*0f_SdXt)(|MR25oL!0ti-3Zq(vt#VkDRu!E1xQ#y12e&x z&si6DW>_pPXUkB+;#|F8Ei%Q}k9F>>&0zzV

@zqGZ4MHtjs_g@rQqwZt&oyngXP?&+Qe%3Ts{%|IP(Myhqi(Gf84@$++u=``OqQ$ z9Vjr9)FSdL;mq+d#3Yd3o(7YPCcX_q7S)v*~uFJj&)NK;k0*ryJ=8A2gBj4)V- ziJ7_bT)D^rG7#;Vis<7xK@9jmGrfnyOgz(gF$muiKaqPlzU!s$BwSSm`HI6?$6%9( z(wz;KKM!K7!{OW^p`F}O3&AHX76Kxz3Om2UW^)Wm@Lp|%r^jJKBuOU?V0U6;eY6q4 z{$U!IYQY^VE6Pd(K3BcFenyNzc{j8KoZ~9e-gP!fM*)#-IBH9gDa#iU5`Knit=4(9 zBq%u@t$knYYbczghE|~{)b_{P>smAN-Hlycjg4J$&v)iII0iq|`AJkl`X_`rq=RH& zw(xv8$`m(ikcnztp5c@va`%ObeaQcJwq!Je;qqo^Zr%)y2XDYage5#-&)z&C(OOQ>lh?kw z{YvfJgkOsacfB&7&lFf-Z#!rB65|$fu5VNI`Zqu0z{QpHt^Wt_)+g zuC&=Awv&QZ@Ga(YRZ2$Zz+OPIc{|j8sgy6rZ@DLSQ(_~zbx?)~bmp?VGO#Lkhs*Au z)qwed$1jogO$Qg^AYd4BQb4&28&p;K236sTg--;o*mOs1xi`DKEIaI>*sbZbZ4#qk zGJxB$;$#-8l+^J-sN>CC9WQNlpYgStz6Ovc8##f+lVi}-=hpfQNmDP4wt1SC)ztQn ze|X%bBt6VHPhdI&ZWwwFBG?r&nxc-S&KEc6M#g_K3HINS+k_@J;%kg|~2lRB&GWS=@uj)!2- zjHb(2J?HjXFBUTEz-cl|YqGv`^y4_oJsbbeuqh&Au5?wfP!gOIUq?mlat z_SQSL#O6fe%!KVvpi^kNh&^l|2NKmm0F#5g$2M(OWgM3fD5H z26f84_p)`r`jvK9jCt?63s*q_K$uAm4p%pP9tBjN2z3ONCA5@SRFPGV7(iGKGnnc^ zCcR2WFyam3f*pZ`2VO8zx)7_bAdLfC6pI&PEJU$`ep?iQEh>7^s|Yud z>$Fp~U$7>&zXq`E+p}QLt&8@4dEqU4x>yZsZLQHZR>ybm-Me7Vp5DD*?*8%~JpU;? ze|*~KJC1rj4Bz_m$va8j1%MHuFc%$$S=Ftr)oed&(te@!F4}X;!Y}V#bSt3fidVCJ zHE7I?uF1W7@Z`O{d-g2YD>)|a#pCbC<1@iOgNT3$LDa4Sxi?B9i478Ss#Y|9W6EZD z7!^6oBfD&}YjdVM0|_G8UR(BN_--Zd8VOM^>wOHrB$?F6os8A9xTTCtz@;X$2*<9& z2Iro~4?L#kA#fRHh>;6YoE&y*pec-ZC^o}C;h!RR%U|EoS}k`2zcu5xkB;6lI?6sZ z`t2pZ8y$U%|Ar5=tJqswepg35yQzkdzM;C6?Hd~#(_UaT^b>FS3w8kbK5V!Y{*ys< zgAm=WBI_GeiZe3R@s4b|its0*2uaG5XooQ@q=3o#M3*kM^^rUN}T@llj9dA z@sq4$BNM-aL+MpeS7)Llo7opr(BPFQ_Q9LaQso&u4weL*zGzwoyBV+NCaDMrLzIgC zmBmYL0uwM7aL*M#g_=}~o811TFMVk>zQ1(aVDi%6|DGh85oEx> zC;uIf?@n~#VXz1iL4$o#04gLO_#h<9W~yg|R<3xla`_zT<2asjBmf~m$o6_&RQ3}9 zgySNnk;6a+xu%xwU%Ks?$8RGb014~i4+jhc2-tumErPdbFOcnlsj3_Sj>FRS#95il zO|y5itsXy^LY52cK~lDQGi2Fk4=6~hu_5?Ibvo5Syr|9%**UUPbuMpgASckN>(;J5 zB{{Hcac}p6#Ju*|@s@_+#^Jh}%8JtB{PKeGfG;yID-S1RD2PLx8NoV6yBvM!yxqEcLgU0w9Exp%ZjF4r&r`}uMGhTj=CiocxN-Q3)L zKKM#!>0G50lQdW5>d{gpb(1Qg*Yn!nmU}Z?`g0F&S z$jeYo(UlVQWDs9S`iI?gn3p; zrp?Ic+Ra0)zm8KgaAJMe_P(^B->!VFaOV=SN8Vp z&d$!x&d$!v78GPciHs>7lR8TZWUCrq>`Y2yP>*3E_k}SjR!Aj60d_5++{IbXFo_~? zhFT(r9wZDTz|c>bU7w4M54ABM($keWw$%TNbQ}W>cg}GmlvYoB?4h`Vf+CCwX-zP6 zM?;AlzD3{6lx>Xj8wYLq)aFH1FlF;Xf_$E~=YvIB66j*9slHwT?VkyRNm>F7EeAh0 z1!FqsgM!o?R&8K}XV{@&lq$y*;J&T5*07~=5L8m#D2?RaR}r+Nu}*7!(-4qgkq;3U zk&Ix@bZ&}9QCs0l8~pO|Wn+qqq$!SpD)SIfK}z*QX<*M*3a_aUk_jzGH^QhP*m$&5 zjU5E(_SFmSzki0~%((yl1*_#~0KlE}DM%p^%c-9Qx+4hd1SwnEZBw-qN29Q}Vsxdn znw~fzHuaL&w$C9TzGaGcql|z!^0?7+l}?N@WQ-wWPALBymnj z<=cUEJ&g@L(~Hsy@&mDF#uJ;mwfkLo1s6d)?;R+Rb%!(b==3bp{8SvQZLj|GsHX``o$hbM&>f zvShz(J}$}LGR><0BpVsogjC>VXMGy*p9ttNJ(_t;8lHY%#aMb8eJXR9~2f$Sp@Heh5Kx=cut1j17L_P_s%y zBuP=Yr{&T~?XzZ)Kw$FpaiY3<)>#+KE}9(ZKed1DEL;MUi)t@Ct9n+o7&m<~%zvcX zv=XztG@N1(>v8ZLSRE$)CDMjbIoE;h9TW|5Fvx^0cPiinkwLLf7$I*ZsM#x&@=W3< zX1`GGJ`7qMH_DAxtcIX)23vslGrrk-u;sCU7l!oRhc^R|c{qdP(Z!Y(c7uWH>E&?E zDsCLzV2q7(3W{KEtazE4e1~nOewHQf%;6iXM`~X@WXJWuv7fT0m4P(hQ=R}Lv4-?i zq*mVz7E>{{m82Dj&4hI8f+B*Z!>J<;A|RZYAP&Nb34-a$X|OO3!oql(H@T`}{J1hX z0b$r8I0k%E~9pN}sC4zo&9@%ATCC z(3|1T^XAVltEeceC>)VnP>?$!r=TEf8ex@{6DN?Y>C+SM6-+FstV|r3M#?=}Gt-&v zz)+>~7lk>wa7D~1L>sCwZ&lM55#27LG;C-id{_5M4Tv;sh0p<22O5k0cARntlSL^B zq^E6#HBeTT4gI!lXF>N0_2cpxGr*}LGhizfavim%z!XwaJW?6JPAAjMp8FB&pOomT z-Ht~6@Cfu6V^2Gc)Zy>^PwwQzp1P;&@ITsCg$=p+s_}EI1yT)#AJ6TAbOv2{>gr)`qX>WWn6&#jHj2+x3h?yQ;rOH^r1zLfHlmKsNb zqG|WnG&k3rcDgj#IO9`svxh97KdX9P|98iZDjH`-&U7X#myo2 z-FV92skIv6>$9W&L|5-~4IM-W)5xc7cS)2jUewamSYJ1LM(vE6;UnoYv)oVF6FU<0 zl^=S$>{F3OK>V&7Cn)msEJg1VpT+7x+u4a5Q0FCDyf@-PZ0c+Pk>`et@KHe z$~*+wk{&5#q%2Juy;Y)G-Ar3?!{90e8vn-B|N>9d$Q%!UDe6!6Wb z%kVhb8eKGD#AG`|YJ8Ylw@9%E(N(3U2Ftfdg-7YXLNiid5hG}&R7R_tx>y3K73m;ttV)2FC0(g3Ds6QG8obu@3^bC=aF7{&Wogpo2=&;#5 zW&NuyYNS(2uzCjEa!X;wG-7UH9ro1HAq~SN#ZbwxW$$O1*&j@R71{8T_q<@ z`DEb+D3A`4a#toBdVR#q1PTyZ0m~m~aiB^f@^Cq3!y6J^BBP%(gysbaA#!%k$Q&N@z_F2ve*w?p;0 zL;8O#zP%cI^`$_QALU!R0!!=K%?N3TMgaax74W|B6{}|ew1$iZjnTx^oK+A{IHB-8wP@{Y`C2> z?0RuFVLX&joWn;FB*6Gy*-k*HdR16`JglF5bT=@}ITiS#9lyvFI1dlszTv})tJ zEgP5B&pRqOE#9*H_@(Te8?!1C54AtN@e2q`fG|}gbJ~1oN^Ms8$di_?+L8U8+p;>> z&uv*yGqWjs{K&1X%eG~qm1(dRC#sduO=7c+!?A~P8UGFq^FZdZk;Xw1s7I?iKxbAI zEpA*2uRSqWNX8Sk!V^Z0t%gS+985fT7Co3y$8{?3tDyzk2_z_WbADpI-Mx#D!y->37X*nLXI3 z8*a*rEp+B5o4(@2yxT4E(SzvDm(kFAIegGiMiHiAVwQAnLAlVBGh1KglTDNAW0 z)~I|gmrbm<>fIokXlJNc=%3caq1`>azZ2g(xV1}{`>maih)AiOK50p%Y5TEj4{CdA zhu&~g<}eZ%S(HS?^6fwbJMb(x$!2g82d)5RVO;x?mhRSs9FE3WAfIBqNh? zhiaDQXXi1P2W+CbRPmI#bs?8n_4DeQ=QiUwjya(@SewqAI$3)EO223svdnUbQ{Z!% z2(;#h;WmoO;s2Y$eX4x!Q{g|55nK1vKmWYXi*C8ao7WH`zbT&>KYssy^}M3*h7VK0mFC1Zf+CTZhoc(kD5lVJ{Bdj7 zELn^Jvgx?k@v-$suQ_(@vCEe(UcF@XqJ;}u8s^Wdi+Dl!W@=RiSaOa+*iq!DlHmyZ z42U}-L>`RMPe$ud6o1&8isE6I{$zX~9`gqO?7&OFf4Z68CQCh0$^@4tC%CjMY+1nc zd~l}Iwt&*P8Z+I*iE^%+IC-LSP8dGpNhi<4&UiYgl48eIP>&?;_bE-!dTh~wy?WXs zx02@$KlP2kZYM_^nOkT&c?;8(j^2rl0!$nkuttJ&m@=4_;pEXc4kAj+gxQOLkzKk9 z+?t)24RVm@JY;611nKD8d*FNy0-kne8{qA4k{7*ym#`xG>~F#KlgX zmaj1DZoqUSC0s&RR!=OD4j9tE5&>Z4&KzcQxEVs#XSOrg-l{6M9ptt12q0 zGU;oHpG=;mT?l87%&(umwh}sh)Y|}(D@MJgFjIobFm^zQ+NX!nwz7c8kzr0T;gKRR zKDh&~O(F0VBtJ|a*hOJG3rh-%Irdj0UPRilV{TJ_qtZr2@Q2+({1qatp`)XtZeJa) z@>aKRMMLDLk%q`US1-ExeB6`IWWrAu{SR59p1 zDJmt4dR!g(196jF12?|MkO|Ss)yLzt%qxRF;(JJIRtk;UrW|>MPzC0(q~sw$tXs+QhIs9A|d3Q_Q4gz01!$zrBD zxwq$6k$4j3%->>`Uy+CN4cO z8dqP^#2kEiulh30a#TwuOYpHnf*S%rsP2Xf(c$_V#Z|~6|JHSEZ{mGiWVsTiffMMY zfd??Wd_#d22?~N&EMs8RG%W1pvmj3{s_e1Qz3xYUSpQB3s+C z;YWqQ6OwL8L|VzFCB|R0dSBbB6|(YW%MMi%q&k#@;xKseOyvMTNeEHwmjsl`hTJO4 ziCu(}mMxR04bi;=eSj&)3M%wWGHYP)1fy;9U7%q>EfoQXG$m5H+{p9@nvi&M;ra!E zDN}R4;l{?W{F9~$_@gJxcis8&&#Nda zn=qlQtU@*OLNqh`|9p+c4zoskuJ>3{fr}b*rZo##_aFmNC^#3e4d?d^;gj!M zaoSm|`|Yw$$w}S4El!eMY=7U)1Q+^~rIg|$MfhEvA z{O^WRYBewdNLorIhf<`hqI~R_ii!^-GiOHRpIcfqW;6o#mZDi(2J#202fjAg35tCk zYSI;w-)z~`(ech@m*Kh}{{M{OqD@_>e%0z!_QE9}ftQ|F`W>RDL;Ye{#!I({R*~p1wCInGs6je?| zujgCUs>({}J<+jA-gW|%jW{%lSb6fagM0!S^i?ZLKjCUa5Uk)5&qWY{V{z7mapOwr z9`>e;on4VpHWOaCbrv~rA(?>45ZgZ6C_Qi?y^>65ZN>Kw54<|?0`!}oF2@L%o*sCZ zeD9dV!f~`y9=Mw*8n_%`->y8uk8x7d-1&(Ix)}X90g37~dI5P3)BNE1QLiJVSEW2A zMHu9{fu2j`43Q=tHz{u-|%I{6eKDw7YqVha# zQufmm$c>mQ(!?{#JQpHQHd539Z-8f*kcE`r40z;PP*$3F)qHgyQqDxjr-?u66rXGn zSmzZv))Q4M21h`j#esw&8!-_S&NW&Itk%pBIxa>)YBdz}(afS>R zWoG7j(J;3Dlf)QukO-p&fNHf*dz0!b<>DK$ zF9rn-r~xc0!xQ9KITJ=qkf%}-Ef5%Waw4>TA*Af!)F}a0CBr~TDI3L}4A5%W$8r*= zFOyOc1Uoq;%QcCPTHG^W1_+N-XjT#2@rILZDC8Zx3;Zg~_hmwmn)aMKp zjdbsTr|O;8PZo<3AxMgSkQ9%Y&l)q!L-N^ol57^NV_+@{{@kaq4%j(Lb)sAiJ)n-v zJdFh*?A!sN;5{QIyv_m;c5X)sjwIE>4x0vH=N_c|+oZgSl)F^Q2PWkTHVwj#%<~_U zvI}`$Q7IoDl=6{D*~h9N$jGlgHYxjQ0>aL#NI8(qGYfengo$LzLZn=Q6vV5>a3t0f z5Uj3;(DVtyB6Md;>4lDZ;>32X3L(}jbT(9OpRBMb#3!%R9A8goUw=Jn(Bk1ac*=ts zahF~~W`d9>Drvo2hB=~O6??JSiEX6~@-SPv8Ar(=m0}@PiEI`u?>{NmhWatsLxj2w zp;b!@O0zO}p2)*ztRTa*Ly8l{DNCc&;Y--E73)`-^Rs=879(e$z1ttZ{#`QPq^{!# zCw>s*VJH3}I*w^5`E+(Nz%Hgn9oBjr{ot&#b}yVge)8n;vll{){jXIFS!r0s z_wGKScmAhTd;LT(}-@)4hiEYzFlC<4Q(O3HbM$K}%DnXj&?V%D)6V$Z&#`zH-<# zmhO@0QLLB|^9j;ABj@6nLu?Bub!jG7Cmku`O*7g~OoUQl`QzU9-H9_UTys%u#Y+0Y zzJ0w)c&7EIK6?#$xk|mZI{HAf{nzUfY7AT4LRy zt9z8)09kRA)qnR$87&E+6lC`Q+3S~ouO9Ss6Gc(GaNOicNGI5>{_1xUdlDa9CqeeTa z$htsLWVv@}7VR5uc!DiQ zWq6`ak{?q(1_XJ~N%EgSj;4(V(_!Le-PS`;p&^f1EPG&&5@QRGoQ>jqLdix8#Rx@- z!`Y~^50kp0t2$2T^6HngPAU&pOln=yz|Psddv|MH`J_qZb**5f|Fz0fSZT8Id)rUg zwEhSx&%DbccGe<>)K63>1|J+pZUu2Hg?QZW)9BYQ2r1_NU9z}ISnWLnXIjPl5h(fWFk4Ak8TTX{!Pr8Q99! z2g2+{U;-g9r9l$|+i~!8scFU{E2=}Wsz8?$%0OG=#tu@JG$1@YWf}fG20XIxv%*He*9+ z=ZKkwx7>2e{;I{JdkaHj6PEynj)6wRR6H5JN$U7o*_|-<#NjLe1IGYiQyc*~;K_xc zanj}!hnB;Ng4@fLzwS7D+?Wy>MIk3!p9Tjfq7;u^w-7dQt^N=YGf)Kz#cU0IH>Pt0-#Zl{yj zcA%>gHeK*?cP8n0gYsB(oV6mgC~$Wt@=$JUddfq&)!_}cwVYTpr&moxQ2kOIl#>l- zzA>c4KObF2SCAgi(#}FUe?v1M{h$$`K)cNp`Yu-5kg-cT`DF%Hy57p_Oy%(R;)7~? zWW$I_@?JG!1zZ8|EUEmHyL8%&CC;DV_PMO2l1_g^ZlN4F>H4%O6Q%@%xTHbt@(f}Q zuLt#Vsl0`V?8l*i(6h53U-}6aRu;G<({W%Z_oSF|pi_z_<|7qFQyxU*?;ZP_FMbTr z0)lMs zUj8d0xe^}|cQBk*H(Ut3c1N0Yiv4cr=2RXA1)B`1PB@O$vVLhHNQ8PO)&wFKyD}Z- zOC)HXnN?5Z+08PY!`ko+^DL}2u;wpo2vIfi^d{gqp5kP<`6QMmS5jmQ;6zAmd5X-n~C7yim&L9_(d75Fud zMOw^iQ>8Rm{kU&KT93*wHm{nloy8ehe&9Y{U6u0y5ywadDv z9^#wf@T~$|TLDogTF`^mRa-7v8G^y;QD~RE4sT&<4KopPA@%!%a}TeteApL9<9msR z4z#ih*h+<<99ZbHwg57Tu{iJ~aV&dc3bxsUfVBpHA^b%U#lW-L@wfSqt^S|G+@bm? ziaPrMXB2hB&>Iq0+mRLrbcd#bUO?4@zc~I5#>xuSmQJ*%8~;g4=|^ta3o@z4K)63B(GFJ@G+wuF(gJ@@$CI72d^wtM#3{s{~Ns@MTt6EhJ5}&K_v;{To zQZ18|t#e3d+Ei`5xV9s`A2mxH^x#=ivCO*~Ohi)paP2hhi0($J>>){a zow&=fxD{h;IZ9aaKm4jm!PTqEY(w30+)9oh>82lVeW**O$b506YkVFqm*gpN^s&Zg z%sL5WMDeBMFtS&+sy0fhi6Lzj-ux0b<5~937O5{${{~_hR%Tw%Df()Mai3`Y8uPbw zu7I^F%&^m~UqSrJ#4)tlB*)rJa;@7)9?2&KXu@}_OUVd01x~UKSOZo&DJ0U_{Lf?* zDZ-G9kzz91dXSWmF{G4~k+If8WE>f9Jxt0;1(`r9$wUm!X{5^ffJ`Ej$rLixf^#*Q z4sw5l%&>lAJ!*YOW?H``)dWEZFaymbUwvtBccch6llNQoS7LbKx5jl!1CQGc#$WrUO*6m<$e+AR<$TG5= ztgymlrS+Qi5m`l6lQm>5%rTE9>&SZOUTUl-$wuobYa2Pn`aL<897m2Po5%?yN;Z== z(oSMz3*sBrTC>SE(m_rn+rcjDthY(0^#ihlbdfmeCMQ{QNssjg=_P%npX?;N$ZoQS zoJ>xEKR^dLm7GRSCufkoYla zXM$K(oLo#Uf!Ft2t|wn3H&~0w*U60_^{1^qaufLm2G%ZeGx?^~PrgNNf%Wybt)=8P@*Qg# z`7XH~((4`MPI4F7PwuwuB=0^}6*j zd4l}Tx_~@sts_q%VEohM8Ed_DI{5>6*4k^GNuDFmlNZQ~bSj+&iERd*i7*AT5SJ)O9qQstLyv}O zgx28f!P#^Ut%C>CJopsWTVJ-mLK|o!ZKBPz1>sj0(1mb^JBlu*OXyOB4qHxF(3Nx* zeACv@we)DZ4w0@l(2evMdMrJT9#1#X6KIrfrfsyH#t`~rE8Rvr=!tYYLeuP^T{KR+ z=}EMQ_R>DuPj}K?bT{2YPo}5PQ|W2+bb1EeOV6Zd(X;6}u%S7Ro=-nVFQ6CFi|9Uj zF}(z#>n^32L4LmiGWb>WYWfBGMS2armR?7{M88bGLcdC{r(dHt(67@Q=}q(-^k(`^ z`Yn13y_J5O-bTNJ*l)MfJLsMCF1nxIP4A)KqxaJL==bRl=nv_S=#T0B^e6PE^k?(| z`g8gV`b+vN`XK!^eTY6xAECdYkJ8`L$LQnq3Hm$wBz=nho<2>Vp?{#y(&y;&^ac7N zeTlwIU!kwkKhoFe>+}u!C;BG+GkuG`P5(mwO8-XxPT!&bp#P-*qVLl8===2F^aJ`I z`XT*@er#Qbz<3Ed01dC)AcBJ-_6BewADjs?SSHJ2*(`_UvOEUMA~u2*vXN{QD`LfL zG%I0aSSc%GW7#-1o|Ur-1{s!3WL0buo6M%LscagX&StQgteVYY0TyHqb6JRaEX*Pd z7LjZ=o5Sj`{W_1$XZ5UsHL@nw%vxA0Tfi2wMeHcHSjqATJCSW? zoool|VsX~ZPGUW*m-VrJwv+8*yV)LgGCPHx%1&davoqLUb|yQEoz2c+=d$zI`RsG- z0(K$0i0xw+TR*hkwcfMdXP2~icn$$gk{)~#4Ad>tB*8>|Pc^Q|0q1-p`6 z#ja*wKoF8IvTI;aH=kY0u47+fU&e|g+dAGl0qc@__7(P3c0KzVyMcY3-NsP_Cx4fe#Cyv?q@%-&ar-kbG?4berA1xJ-~hrTjgI^SF>NT zU$F<-uh~QFVfG074SSURmOaKEXHT%-u_xJ6?Dy}~cJ_E+{d_ILIU`v?0c`xkqcy~o~X|7IVs|F93)N9<#E zfF;;~44#hDwGl2IQMPPY`s08#p2@R#HuPbCx8AYt#bo|@s{-oStE?-nE3BKX8!^Q< zSeNr0p3C!iJ}KZYO6kK@Pl zP5cBN<(qjMZ|5<-g>U8Ccn3d`Z|9wS2k+u>-pxQt)Sj zP68p6(?y2J6j>r$Li35JBMxSA>Ko!XhGS;DJ9|%n@~PK%FP%i+a%@8by<6 z7A>MxED#IDB5{;hES89+VwqSjR*02il~^s-h_&Kqu}-WP8^lI&j5t;tCyp1J#0erQ zHj6gVE@EPf*ebS(4soK`E;_{y(Iw)dTbv|%M6c)*{bHxsC3cHF;$(4(I8~e`P8Vm0 zz2Z!9mN;9SBhD4)iSxzh#0BC)ago?3E*6)F&x=dNW#V#i1$1;7*5|DAtc$D*t$o(n z;!1H9jF8^6&JtH!KNDXNUliAfYsGcqOXADoE8?r-dhs=JgZR3*QQRcHA#N7m6yFlJ zh+D zA$}=-B_0&N77vMs#UtW3;!*Ki@tAmAJRyE3o)k}s-;1ZkGvW{8S@E2BUc4Y)6fcRF z#Vg`f@kjBRcwM|9{v_TMe->|vx5Zz?U&Y_V-^DxPAL5_lU*cWyo_JsUTYMn?BR&)# ziI2qrkq`sWI9_5skLAV1)=Sni)+^R?)(h4jtY@tkt(R?r!^ar(roy%nQZ5}a*fZ@c zJKN5&bL~7k-!8C6*oF2;dz4*d7u%!l5_^nYYM0q#?Q!;ayWFm@C)kztM7zqKWKXuI z*i-Fk_H=uOJ=3nXXW0QeXgjuRhiuOd+Y!6QuC-^|bL={Mu07A5Z`a!mcB9>}xhJ+W zme$|Z5o~E_(f7u%xd+VMG53(X2ZBw_`n^HDwTYq0HtEsJ{r>%d-md@Dj%%=8uU$m_)*41Y>w?&Z~x1M;k&u&q$ z+AS(k7u{$;ZZcIjnW~x$$W5WlmSl0}69ZjiLt2Z0ro}*`T3740TD2+=Yz^59RE=2+ z27#1C1%i%~xgc3OUkD{t*22L&_M#NrHW^$r)ub&lwJy@N+Kc)+I@@DeM-6_dOLxQe z5``UmNwUR(pxelopiX<4{%KjtPa%)BbZxblr&QZ)8q;hV-E8pEY`U)5$D8TGrWUb$ zTfC=BqpH~e-Qs^`ay1*Qw*+#QZ|m>c8tv)d(HZUUOIvQ5rm)k}khQ!Qy1#82(pBb` z0SsHqfV5-DUJtf38d#f5olT~WCIf4e zml;czW573HH8!Tj3>dM&A&(+eGXjpM@?pq(_EuG6*49DjGzJ_ub8E76zD*AKZG(C2 zjwDh8!RA0lM|Eest#i$)#Tt$#gO;Y+v*|blwRg1HoeF#Ux7tR#Gl?K@h$h|%5bZ9F;I3$Q9D4V7_qLebm69zKW-$#Z$OO zk7|V7lLELGv3qsXdWT`j3D%0vc-K}4s*+dqrF;}tz<^gY+Wo05HdC7BkLWYS6>vAq z-{+4lrsXXW(LdPI7K5KwgRd69<)+0gtvUTeTH5co)bNyk#Z&q{&_`kSZC&NxkH!j473%+wG;a8_&raz0`Jl z$#x@4vfZA&LlzXacgb5MOLw4p&QIw@m5`h4N|QH*NpF`)K9g3!))b@;cJ;HpMc!&{ ziQr%$OOFfl>;oMPXrMh=NHAdUk+)#h9z_A_IX{JfR6_0^pTyLw{65&C`a*u_0~rjO zA5_8WMbcR6C$;Lu?w2YYqA z1XUjMfvVhOY7M6TA}KBCf8Lz>(yCrY3>l#2cRfnYiyo@#B~y)8^_Zmxt$J2n6O3f( z9;)u`bpl9|H^rYrLI1AUL?9H@a!V+vc~U4~?ppH1@0uxvf_l~s1^n-{zz_=RK_1dF z67uV5D-_hsD-_VoD-=}h2*3O9dYTIbwM-QXDux^g`EWX>9>>7v`0$zhj)BWDa5)AJ z$H3(%5ewxRcmjU;rhdo3=NPyGem);=zrB7v2Ht=vKVa$$n0f-H9LI;x)E6-D*ZOx; zKGq*{iV5j;P9W51`bDpI@NV*%$slAVfsht=10gL~;%?y4B4r@dsu@ivs0A!ZlR$a{ zXv2(Z^hnA}ZR#(If$8BD2nAXsJ?Y^UawHws8Wgz(RM&KomKg&f&F2Fl92%@@t@VF5 zD8%WKD&6zb4d|{xrE5^>`t=wTc&5u-gJRczH(lZyl)DDyAp>8?)DtqO4jH&SlRsqO z3K_UU29A({D`ema8F)Oud{ckOz!x%b8Hp|A`EdK~_3JV4dZv8O)aRLcJX21{htJgK z`K06H)#QU9t4YY@Yc%cEf-^|S;d5014^oCgjyfLNWAY z1a?hNZYtGyL+DA(rh5Jeg$9{2s3Mh~LYkgLLudE4C~u7QMa6>XjvY}2pj#VCYw7Oo zfb_&S;wRREpVw@|6JLbYxL6$R?v7$Px?^*DlrHV3%lhg14lMUN6CdvH+H6p5zu^H_YTO~3?d#tlBnieyt zI2k`M`D33#MTbPic7=*gg$iAMV-xM_r@K4S;u;^UXItFV?1)~4ls+J(-yo$M2x-F~ zUPWBCBSV&}8zY~5;0sb;^v|XU^^#{^{Olu#z3VRwNa`h1)uta+!*v$ZSoM;Q#;OMm zzZUcZt`_`p4`-_8E97M=jNuWIf<}jWw)=zOS_mKg!Di2`(Kj`k5yackuaLpzk4^g4 ztZ!-rB9DFz=>kGQ^EAw()9e(bFK_O-T(pm##FVD-D_7TJ&$N z>gFjX<^-LPe$|yCdZ>ifGl{xRXf9M@MBj8Xy;}XIEA(`Qp03c-6?(ctPgfY$jSTBX zhIM^mU0+z&7uNNKb$vJwKvo;p^@VkPVO?LiG2`S|PrO=Q())JBWoOi+_jc@74;ft@ zT`~2P8SB`(O$zM6+Keq7J7uC40GvRLMnIrOaW%XvE{MD0dbn%E2Wk`-!@I_Ophj^s zyeqDXd#whgy(_*W9eTcM^&nxA51D=2u#i=c8C&B0J?2S*qVh?QRlZ(mCcE^bhFPZS zhNvgi+^+r|J*p1%AnTA1rVjb2>(EcK4wX;Vq4McE)T6FLWmL$LPjVPIfry^n0*!iB z3N-53A<$^>5;1r|3@n}B;3Z=45;1s*)Jk3s{5Yy7%!`y7f{J}h%&C_gA6NR#$B25% zRlrFE3}%&}4rWch>8#0DHIV>#l~Y$9Nv%AhD>q=tnJ8GBH;DPvcfU;2poq?FzLes- z6UbG>W#IH*&3BGkr~t7#tNAXVXg61NtNKnp=~wlgd^KR}tcpoBXic7j=}u!`%Mwl? z7|w|8ZUbk+N>~5lHs^vGv4VvfB^GUuneNrXj1zEMGuz^r0kJCXjg@xCdOG6mQVk8Y zUb|A{G&QVIzZD(&H(3czb5bGz?rQ3HBAR%dNLVwtNJI~=NLYywj;p0v+?5F9M4EIn zTrC|VU6qG)O;ojJu+{3p76@n^9GV-*IjJ8_lluG~*i7msYZ)JH3l(W(Y*Gf6)zZEa zOO#-3S!(j|A5|F z(B0u^U{QkkLNAI?lI|u{slU^bwBu-vyW>D71VrpemTS7#Y0+fh1oS-+Y05&6bnJ|F z#=6>Kx~z~U9mlQBitX;`1-bThL_5>59L8kt0}5AA)g(i`wOTZGB6`*0xLOyByKcJM zpqY^a<)i%0)vF=gbvbT>rb{QHn49CY=q_>eDix^Ibm)W)Vj2xfYji^z0vd4*0gadj zy=rruM!yS8xmr&Pycu}Rq~X+j_$raNXYDrZ|#6S44SbF^BC{R?vTU3H>Ql11@MNw zD}{BlCJi+DWMD>Zt!}Mbt3h*XHP+l(Guj&rdFg$P))oV5AY!nZyc?|Pg_`5&g%Aik zoZSGx&8|{lHaJ>pym{=;S8?cpF>ZZ9@KkLcsDRN`1uVf8_IC>VhN;Plh)g@ zqXQ#Nx4qU-9@Y#B7e3{fHafa(j$_*D)EG+Ai&MwZdJf!uiqQ2tVK=)QdTO*JrH3Mo z>An4J+xoUeb(aN0fm}aVN~0aU8Hq{_aDh+;gm$1O-s6v|#teWfnPXJX2aetg!Z)T9 z_390P8AO>*bWEo@wT9$t!?{wAh2h=b+1JtCxyRt8Hd7~eclP(DMSFVUyZXD;Pr=$q zrh4y@vX@D!$xun{@m-pxg0;0er8Bn0&lA=uo8x`k^izL#yPsQASkUxx&|p1iupTtM z7&Hh8nnngqZwC!O2!-?4%KE1W-1e$rQvi&#NhUAL` zKlvgd*X8ML0Vk-JzPKB{6wp-U8b%s1R24BukC;w~nD#|lb!SCdHPu8~H6QVe(CQhX z)q~L5-nAL~FWXi9o)KC-BeZ%o5n+DqPRV6z_YBQ?hP!z+&1s!mQu5Vk67gy@wmfjJ zp1zddYc-T!t%lO8HBcH7^0Z|ct(=*w2BSC8+e1JKCN{{euF2i&2?}zm@Yr;!|&Ixxvyu04KHNMix|q* zsztzK;M3Y%lyB-YiyAMYCt1(PtDccpJu{PeMjr6A_7;PS7`TlP;Ta*qGs1#rX zypS0@T4jj#7+O?_I$i+X&#`T0zFdiMeOO}oP;pI%p?UIT}bM?E7!c}7C= zwCWjjV)7Z~hNo54NH^sM4L*%L>xB(nYgILNw=}%2p<~zdkE>PPj%)DahIM(a!J}*7 za19;024AkJ$2IV}TE&cVG<~}UpRQ?_Yxs$4=nfITRlmB1?p#C9a6{GUh7MiBms~@? zt{JDU8UL=qqigW$nsMYBI&;nVbj=Lr8hpBju3W>%;0J5q(Rg&tICBmCxQ1`KX1utD zK3qdjt{MNX;ZLp^m#)7qHsjDW^x_)6=Nc^?TsL+7et#LdaLqV#4ZXW&5#XBscMaXS zhA+Ej{JVy}T{GTY!`EFy7p`ae+3=w)UH?}GU2g|P1Z(PH3T{C7~Gv~Nwthm9Z zQSH&b=#q}E?Jd1+(QY5g9H`A>eg50%_Snvjwpf#HQY%z^rjp_zKP>O^KPVZJzDBAC z5BbHKUGX8{)-;TWb+s?wvNYD-(Z9p|l&_N3#CG?YgwZ;oC)(A!qXV9(alg%D5Bi}| zii_s6+*lXZ|qMd7^5V@k#AJ%-KDY~XsY>W5z>SYUztaPfG{}8akylei30K@7%sJED$px&)? zTr)qoO)Yty(EX;sHKt2$o?s=^a1j0FcExtd+yHC&)o z&#G>~E9yZhJ?+DrpVbrVhNX$pjO6xi>)6t_$Zvg~dR^Y{cU*SrKp55A7wzd=zGWd4 zcQC{=K#ee|DcxNlSC4%ieHb++Q&I1puC{I1r~*%E2nYc)q2OMl0d>L>P^qW}Kv0ZBnQUHQzJizBWK;EPvc0KUv8Oxu z9W?fXFWCAWe1ZCY@C7@>c*#v-AoaJ9dKobU7pcEvKQviT5Ie<#FR7JF!!7($kczC7 zypFC#w-#s^ECtc5QeIM#;$V+DS(&SA&hhs&)la#oP1}R3*Gyv-gpV?fm5~G~)y_`k z%S$yil9`Q_lzcQ6NqEeV7I?Z`g*Ww>>Z*QB0;iI)R8f*>+V&Va4WrwG zDbInF=h~EK*E~ZxpUf|x{rvLT&o7_dd`(iSd<9BMLST3T_HqDyN)8wX3?`^LhbIgv zL)AV!hb}{o!4_!m&0WdOcvoYxC7`Wpa5w3CvkdQUt}%8+e@bqb-{F&yN#M)YE?L4> zuV_M441(wydAK9$h4zakFXMSBQjWvlCV03K>ty^#tW)7lLaYnmSAiIo)<1E5*ZLUO z1pJ^0DT1#vAr_@590a|{9pw6!EIyDu$~~GjYwP*|@?t71u&K2G?(fc&lK0ibUCgo>1tfpQbbLX-le$0 zyA;<=h>AjJltyuFqwTnEp<8h6popUa&(eNe_s~7Ko&@b3T;YLZQTW-sVKMQpon Date: Mon, 6 Jan 2025 07:53:27 -0600 Subject: [PATCH 289/722] UI: default OnlyShowOwnedGames in compat list to true --- src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs b/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs index 2490f222a..8140c041f 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs @@ -9,7 +9,7 @@ namespace Ryujinx.Ava.Utilities.Compat { public partial class CompatibilityViewModel : ObservableObject { - [ObservableProperty] private bool _onlyShowOwnedGames; + [ObservableProperty] private bool _onlyShowOwnedGames = true; private IEnumerable _currentEntries = CompatibilityCsv.Shared.Entries; private readonly string[] _ownedGameTitleIds = []; -- 2.47.1 From 30b22ce6ba10c78ec5f3f9e44402ca07d4281d99 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 6 Jan 2025 08:02:37 -0600 Subject: [PATCH 290/722] UI: fix nullref --- src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index 4abe7465e..a3f9fc62d 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -35,8 +35,9 @@ namespace Ryujinx.Ava.Utilities.Compat IssueNumber = row[header.IndexOf("issue_number")].Parse(); var titleIdRow = row[header.IndexOf("extracted_game_id")].ToString(); - if (!string.IsNullOrEmpty(titleIdRow)) - TitleId = titleIdRow; + TitleId = !string.IsNullOrEmpty(titleIdRow) + ? titleIdRow + : default(Optional); var issueTitleRow = row[header.IndexOf("issue_title")].ToString(); if (TitleId.HasValue) -- 2.47.1 From 323c356d9cd17c79f97937204592d7b9e3928fe1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 6 Jan 2025 22:03:39 -0600 Subject: [PATCH 291/722] UI: Widen compatibility list, and make search box take up all space horizontally --- src/Ryujinx/Ryujinx.csproj | 4 +- .../UI/Views/Main/MainMenuBarView.axaml.cs | 2 +- .../Compat/CompatibilityContentDialog.axaml | 20 ++++++++++ .../CompatibilityContentDialog.axaml.cs | 37 +++++++++++++++++++ .../Utilities/Compat/CompatibilityList.axaml | 23 ++++++------ .../Compat/CompatibilityList.axaml.cs | 35 +----------------- 6 files changed, 72 insertions(+), 49 deletions(-) create mode 100644 src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml create mode 100644 src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 55f683af9..7a49a5a94 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -169,8 +169,8 @@ - - CompatibilityList.axaml + + CompatibilityContentDialog.axaml Code diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index b22b324c0..bf95667c9 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -227,6 +227,6 @@ namespace Ryujinx.Ava.UI.Views.Main public void CloseWindow(object sender, RoutedEventArgs e) => Window.Close(); - private async void OpenCompatibilityList(object sender, RoutedEventArgs e) => await CompatibilityList.Show(); + private async void OpenCompatibilityList(object sender, RoutedEventArgs e) => await CompatibilityContentDialog.Show(); } } diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml b/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml new file mode 100644 index 000000000..fbceefc33 --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml @@ -0,0 +1,20 @@ + + + + + + 900 + + + diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs new file mode 100644 index 000000000..27c560d90 --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs @@ -0,0 +1,37 @@ +using Avalonia.Styling; +using FluentAvalonia.UI.Controls; +using Ryujinx.Ava.UI.Helpers; +using System; +using System.Threading.Tasks; + +namespace Ryujinx.Ava.Utilities.Compat +{ + public partial class CompatibilityContentDialog : ContentDialog + { + protected override Type StyleKeyOverride => typeof(ContentDialog); + + public static async Task Show() + { + await CompatibilityHelper.InitAsync(); + + CompatibilityContentDialog contentDialog = new() + { + Content = new CompatibilityList { DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) } + }; + + Style closeButton = new(x => x.Name("CloseButton")); + closeButton.Setters.Add(new Setter(WidthProperty, 80d)); + + Style closeButtonParent = new(x => x.Name("CommandSpace")); + closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, Avalonia.Layout.HorizontalAlignment.Right)); + + contentDialog.Styles.Add(closeButton); + contentDialog.Styles.Add(closeButtonParent); + + await ContentDialogHelper.ShowAsync(contentDialog); + } + + public CompatibilityContentDialog() => InitializeComponent(); + } +} + diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml index fd912ad05..7d5b4f20f 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml @@ -11,25 +11,24 @@ - - - - - - - - + + + + + + + - - + diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs index 68b645efd..9860fbc27 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -1,41 +1,9 @@ -using Avalonia; -using Avalonia.Controls; -using Avalonia.Markup.Xaml; -using Avalonia.Styling; -using FluentAvalonia.UI.Controls; -using Ryujinx.Ava.Common.Locale; -using Ryujinx.Ava.UI.Helpers; -using Ryujinx.Ava.UI.Windows; -using System.Threading.Tasks; +using Avalonia.Controls; namespace Ryujinx.Ava.Utilities.Compat { public partial class CompatibilityList : UserControl { - public static async Task Show() - { - await CompatibilityHelper.InitAsync(); - - ContentDialog contentDialog = new() - { - PrimaryButtonText = string.Empty, - SecondaryButtonText = string.Empty, - CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose], - Content = new CompatibilityList { DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) } - }; - - Style closeButton = new(x => x.Name("CloseButton")); - closeButton.Setters.Add(new Setter(WidthProperty, 80d)); - - Style closeButtonParent = new(x => x.Name("CommandSpace")); - closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, Avalonia.Layout.HorizontalAlignment.Right)); - - contentDialog.Styles.Add(closeButton); - contentDialog.Styles.Add(closeButtonParent); - - await ContentDialogHelper.ShowAsync(contentDialog); - } - public CompatibilityList() { InitializeComponent(); @@ -53,4 +21,3 @@ namespace Ryujinx.Ava.Utilities.Compat } } } - -- 2.47.1 From b5fafb63943e92bdb98bd548badd387fafb103aa Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 6 Jan 2025 23:52:20 -0600 Subject: [PATCH 292/722] UI: stop using async voids in MainMenuBarView; use RelayCommands --- .../UI/Views/Main/MainMenuBarView.axaml | 51 +++++------ .../UI/Views/Main/MainMenuBarView.axaml.cs | 89 ++++++++----------- .../CompatibilityContentDialog.axaml.cs | 26 +----- .../Compat/CompatibilityList.axaml.cs | 24 +++++ 4 files changed, 88 insertions(+), 102 deletions(-) diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index d2f050c5a..6bce21851 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -56,7 +56,7 @@ ToolTip.Tip="{ext:Locale LoadTitleUpdatesFromFolderTooltip}" /> @@ -72,7 +72,7 @@ ToolTip.Tip="{ext:Locale OpenRyujinxLogsTooltip}" /> @@ -167,7 +167,7 @@ Header="{ext:Locale MenuBarShowFileTypes}" /> @@ -277,56 +275,55 @@ - - + + - + - - - - + + + + diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index bf95667c9..07d5fd03f 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -2,6 +2,7 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Threading; +using CommunityToolkit.Mvvm.Input; using Gommon; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; @@ -17,6 +18,7 @@ using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Views.Main { @@ -34,6 +36,34 @@ namespace Ryujinx.Ava.UI.Views.Main ToggleFileTypesMenuItem.ItemsSource = GenerateToggleFileTypeItems(); ChangeLanguageMenuItem.ItemsSource = GenerateLanguageMenuItems(); + + MiiAppletMenuItem.Command = new AsyncRelayCommand(OpenMiiApplet); + CloseRyujinxMenuItem.Command = new RelayCommand(CloseWindow); + OpenSettingsMenuItem.Command = new AsyncRelayCommand(OpenSettings); + PauseEmulationMenuItem.Command = new RelayCommand(() => ViewModel.AppHost?.Pause()); + ResumeEmulationMenuItem.Command = new RelayCommand(() => ViewModel.AppHost?.Resume()); + StopEmulationMenuItem.Command = new AsyncRelayCommand(() => ViewModel.AppHost?.ShowExitPrompt().OrCompleted()!); + CheatManagerMenuItem.Command = new AsyncRelayCommand(OpenCheatManagerForCurrentApp); + InstallFileTypesMenuItem.Command = new AsyncRelayCommand(InstallFileTypes); + UninstallFileTypesMenuItem.Command = new AsyncRelayCommand(UninstallFileTypes); + XciTrimmerMenuItem.Command = new AsyncRelayCommand(() => XCITrimmerWindow.Show(ViewModel)); + AboutWindowMenuItem.Command = new AsyncRelayCommand(AboutWindow.Show); + CompatibilityListMenuItem.Command = new AsyncRelayCommand(CompatibilityList.Show); + + UpdateMenuItem.Command = new AsyncRelayCommand(async () => + { + if (Updater.CanUpdate(true)) + await Updater.BeginUpdateAsync(true); + }); + + FaqMenuItem.Command = + SetupGuideMenuItem.Command = + LdnGuideMenuItem.Command = new RelayCommand(OpenHelper.OpenUrl); + + WindowSize720PMenuItem.Command = + WindowSize1080PMenuItem.Command = + WindowSize1440PMenuItem.Command = + WindowSize2160PMenuItem.Command = new RelayCommand(ChangeWindowSize); } private CheckBox[] GenerateToggleFileTypeItems() => @@ -96,22 +126,7 @@ namespace Ryujinx.Ava.UI.Views.Main } } - private async void StopEmulation_Click(object sender, RoutedEventArgs e) - { - await ViewModel.AppHost?.ShowExitPrompt().OrCompleted()!; - } - - private void PauseEmulation_Click(object sender, RoutedEventArgs e) - { - ViewModel.AppHost?.Pause(); - } - - private void ResumeEmulation_Click(object sender, RoutedEventArgs e) - { - ViewModel.AppHost?.Resume(); - } - - public async void OpenSettings(object sender, RoutedEventArgs e) + public async Task OpenSettings() { Window.SettingsWindow = new(Window.VirtualFileSystem, Window.ContentManager); @@ -124,7 +139,7 @@ namespace Ryujinx.Ava.UI.Views.Main public static readonly AppletMetadata MiiApplet = new("miiEdit", 0x0100000000001009); - public async void OpenMiiApplet(object sender, RoutedEventArgs e) + public async Task OpenMiiApplet() { if (MiiApplet.CanStart(ViewModel.ContentManager, out var appData, out var nacpData)) { @@ -132,13 +147,7 @@ namespace Ryujinx.Ava.UI.Views.Main } } - public async void OpenAmiiboWindow(object sender, RoutedEventArgs e) - => await ViewModel.OpenAmiiboWindow(); - - public async void OpenBinFile(object sender, RoutedEventArgs e) - => await ViewModel.OpenBinFile(); - - public async void OpenCheatManagerForCurrentApp(object sender, RoutedEventArgs e) + public async Task OpenCheatManagerForCurrentApp() { if (!ViewModel.IsGameRunning) return; @@ -166,7 +175,7 @@ namespace Ryujinx.Ava.UI.Views.Main ViewModel.IsAmiiboBinRequested = ViewModel.IsAmiiboRequested && AmiiboBinReader.HasAmiiboKeyFile; } - private async void InstallFileTypes_Click(object sender, RoutedEventArgs e) + private async Task InstallFileTypes() { ViewModel.AreMimeTypesRegistered = FileAssociationHelper.Install(); if (ViewModel.AreMimeTypesRegistered) @@ -175,7 +184,7 @@ namespace Ryujinx.Ava.UI.Views.Main await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesErrorMessage]); } - private async void UninstallFileTypes_Click(object sender, RoutedEventArgs e) + private async Task UninstallFileTypes() { ViewModel.AreMimeTypesRegistered = !FileAssociationHelper.Uninstall(); if (!ViewModel.AreMimeTypesRegistered) @@ -184,11 +193,8 @@ namespace Ryujinx.Ava.UI.Views.Main await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogUninstallFileTypesErrorMessage]); } - private async void ChangeWindowSize_Click(object sender, RoutedEventArgs e) + private void ChangeWindowSize(string resolution) { - if (sender is not MenuItem { Tag: string resolution }) - return; - (int resolutionWidth, int resolutionHeight) = resolution.Split(' ', 2) .Into(parts => (int.Parse(parts[0]), int.Parse(parts[1])) @@ -201,7 +207,7 @@ namespace Ryujinx.Ava.UI.Views.Main double windowWidthScaled = (resolutionWidth * Program.WindowScaleFactor); double windowHeightScaled = ((resolutionHeight + barsHeight) * Program.WindowScaleFactor); - await Dispatcher.UIThread.InvokeAsync(() => + Dispatcher.UIThread.Post(() => { ViewModel.WindowState = WindowState.Normal; @@ -209,24 +215,7 @@ namespace Ryujinx.Ava.UI.Views.Main }); } - public async void CheckForUpdates(object sender, RoutedEventArgs e) - { - if (Updater.CanUpdate(true)) - await Updater.BeginUpdateAsync(true); - } - - private void MenuItem_OnClick(object sender, RoutedEventArgs e) - { - if (sender is MenuItem { Tag: string url }) - OpenHelper.OpenUrl(url); - } - - public async void OpenXCITrimmerWindow(object sender, RoutedEventArgs e) => await XCITrimmerWindow.Show(ViewModel); - - public async void OpenAboutWindow(object sender, RoutedEventArgs e) => await AboutWindow.Show(); - - public void CloseWindow(object sender, RoutedEventArgs e) => Window.Close(); - - private async void OpenCompatibilityList(object sender, RoutedEventArgs e) => await CompatibilityContentDialog.Show(); + public void CloseWindow() => Window.Close(); + } } diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs index 27c560d90..513600bc0 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs @@ -1,35 +1,11 @@ -using Avalonia.Styling; -using FluentAvalonia.UI.Controls; -using Ryujinx.Ava.UI.Helpers; +using FluentAvalonia.UI.Controls; using System; -using System.Threading.Tasks; namespace Ryujinx.Ava.Utilities.Compat { public partial class CompatibilityContentDialog : ContentDialog { protected override Type StyleKeyOverride => typeof(ContentDialog); - - public static async Task Show() - { - await CompatibilityHelper.InitAsync(); - - CompatibilityContentDialog contentDialog = new() - { - Content = new CompatibilityList { DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) } - }; - - Style closeButton = new(x => x.Name("CloseButton")); - closeButton.Setters.Add(new Setter(WidthProperty, 80d)); - - Style closeButtonParent = new(x => x.Name("CommandSpace")); - closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, Avalonia.Layout.HorizontalAlignment.Right)); - - contentDialog.Styles.Add(closeButton); - contentDialog.Styles.Add(closeButtonParent); - - await ContentDialogHelper.ShowAsync(contentDialog); - } public CompatibilityContentDialog() => InitializeComponent(); } diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs index 9860fbc27..f78eb2098 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -1,9 +1,33 @@ using Avalonia.Controls; +using Avalonia.Styling; +using Ryujinx.Ava.UI.Helpers; +using System.Threading.Tasks; namespace Ryujinx.Ava.Utilities.Compat { public partial class CompatibilityList : UserControl { + public static async Task Show() + { + await CompatibilityHelper.InitAsync(); + + CompatibilityContentDialog contentDialog = new() + { + Content = new CompatibilityList { DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) } + }; + + Style closeButton = new(x => x.Name("CloseButton")); + closeButton.Setters.Add(new Setter(WidthProperty, 80d)); + + Style closeButtonParent = new(x => x.Name("CommandSpace")); + closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, Avalonia.Layout.HorizontalAlignment.Right)); + + contentDialog.Styles.Add(closeButton); + contentDialog.Styles.Add(closeButtonParent); + + await ContentDialogHelper.ShowAsync(contentDialog); + } + public CompatibilityList() { InitializeComponent(); -- 2.47.1 From 259526430c1c84cfc78d522a98d823d6a129d3f8 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 00:36:22 -0600 Subject: [PATCH 293/722] UI: Properly space language menu items instead of prepending a space to the language name --- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 07d5fd03f..c50b073dd 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -1,6 +1,6 @@ using Avalonia; using Avalonia.Controls; -using Avalonia.Interactivity; +using Avalonia.Layout; using Avalonia.Threading; using CommunityToolkit.Mvvm.Input; using Gommon; @@ -42,7 +42,7 @@ namespace Ryujinx.Ava.UI.Views.Main OpenSettingsMenuItem.Command = new AsyncRelayCommand(OpenSettings); PauseEmulationMenuItem.Command = new RelayCommand(() => ViewModel.AppHost?.Pause()); ResumeEmulationMenuItem.Command = new RelayCommand(() => ViewModel.AppHost?.Resume()); - StopEmulationMenuItem.Command = new AsyncRelayCommand(() => ViewModel.AppHost?.ShowExitPrompt().OrCompleted()!); + StopEmulationMenuItem.Command = new AsyncRelayCommand(() => ViewModel.AppHost?.ShowExitPrompt().OrCompleted()); CheatManagerMenuItem.Command = new AsyncRelayCommand(OpenCheatManagerForCurrentApp); InstallFileTypesMenuItem.Command = new AsyncRelayCommand(InstallFileTypes); UninstallFileTypesMenuItem.Command = new AsyncRelayCommand(UninstallFileTypes); @@ -104,8 +104,10 @@ namespace Ryujinx.Ava.UI.Views.Main MenuItem menuItem = new() { - Padding = new Thickness(10, 0, 0, 0), - Header = " " + languageName, + Padding = new Thickness(15, 0, 0, 0), + Margin = new Thickness(3, 0, 3, 0), + HorizontalAlignment = HorizontalAlignment.Stretch, + Header = languageName, Command = MiniCommand.Create(() => MainWindowViewModel.ChangeLanguage(language)) }; -- 2.47.1 From d8265f77726181b712b881afe8ab96a471db427f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 03:37:07 -0600 Subject: [PATCH 294/722] Embed compatibility list into executable instead of downloading Co-Authored-By: Vita Chumakova --- docs/compatibility.csv | 4303 +++++++++++++++++ src/Ryujinx/Ryujinx.csproj | 3 + src/Ryujinx/UI/Helpers/MiniCommand.cs | 1 + .../UI/Views/Main/MainMenuBarView.axaml.cs | 21 +- .../Utilities/Compat/CompatibilityHelper.cs | 32 - .../Compat/CompatibilityList.axaml.cs | 12 +- 6 files changed, 4328 insertions(+), 44 deletions(-) create mode 100644 docs/compatibility.csv delete mode 100644 src/Ryujinx/Utilities/Compat/CompatibilityHelper.cs diff --git a/docs/compatibility.csv b/docs/compatibility.csv new file mode 100644 index 000000000..3fa58aa80 --- /dev/null +++ b/docs/compatibility.csv @@ -0,0 +1,4303 @@ +issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_event_date,events_count +42,ARMS - 01009B500007C000,01009B500007C000,status-playable;ldn-works;LAN,playable,2024-08-28 7:49:24,9 +43,Pokemon Quest - 01005D100807A000,01005D100807A000,status-playable,playable,2022-02-22 16:12:32,10 +44,Retro City Rampage DX,,status-playable,playable,2021-01-05 17:04:17,8 +45,Kirby Star Allies - 01007E3006DDA000,01007E3006DDA000,status-playable;nvdec,playable,2023-11-15 17:06:19,23 +46,Bayonetta 2 - 01007960049A0000,01007960049A0000,status-playable;nvdec;ldn-works;LAN,playable,2022-11-26 3:46:09,10 +47,Bloons TD 5 - 0100B8400A1C6000,0100B8400A1C6000,Needs Update;audio;gpu;services;status-boots,boots,2021-04-18 23:02:46,5 +48,Urban Trial Playground - 01001B10068EC000,01001B10068EC000,UE4;nvdec;online;status-playable,playable,2021-03-25 20:56:51,8 +49,Ben 10 - 01006E1004404000,01006E1004404000,nvdec;status-playable,playable,2021-02-26 14:08:35,8 +50,Lanota,,status-playable,playable,2019-09-04 1:58:14,5 +51,Portal Knights - 0100437004170000,0100437004170000,ldn-untested;online;status-playable,playable,2021-05-27 19:29:04,5 +52,Thimbleweed Park - 01009BD003B36000,01009BD003B36000,status-playable,playable,2022-08-24 11:15:31,9 +53,Pokkén Tournament DX - 0100B3F000BE2000,0100B3F000BE2000,status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08,24 +55,Farming Simulator Nintendo Switch Edition,,nvdec;status-playable,playable,2021-01-19 14:46:44,6 +56,Sonic Forces - 01001270012B6000,01001270012B6000,status-playable,playable,2024-07-28 13:11:21,13 +57,One Piece Pirate Warriors 3,,nvdec;status-playable,playable,2020-05-10 6:23:52,6 +58,Dragon Quest Heroes I + II (JP) - 0100CD3000BDC000,0100CD3000BDC000,nvdec;status-playable,playable,2021-04-08 14:27:16,9 +59,Dragon Quest Builders - 010008900705C000,010008900705C000,gpu;status-ingame;nvdec,ingame,2023-08-14 9:54:36,19 +60,Don't Starve - 0100751007ADA000,0100751007ADA000,status-playable;nvdec,playable,2022-02-05 20:43:34,7 +61,Bud Spencer & Terence Hill - Slaps and Beans - 01000D200AC0C000,01000D200AC0C000,status-playable,playable,2022-07-17 12:37:00,6 +62,Fantasy Hero Unsigned Legacy - 0100767008502000,0100767008502000,status-playable,playable,2022-07-26 12:28:52,8 +64,MUSNYX,,status-playable,playable,2020-05-08 14:24:43,4 +65,Mario Tennis Aces - 0100BDE00862A000,0100BDE00862A000,gpu;status-ingame;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40,23 +66,Higurashi no Naku Koro ni Hō - 0100F6A00A684000,0100F6A00A684000,audio;status-ingame,ingame,2021-09-18 14:40:28,10 +67,Nintendo Entertainment System - Nintendo Switch Online - 0100D870045B6000,0100D870045B6000,status-playable;online,playable,2022-07-01 15:45:06,3 +68,SEGA Ages: Sonic The Hedgehog - 010051F00AC5E000,010051F00AC5E000,slow;status-playable,playable,2023-03-05 20:16:31,10 +69,10 Second Run Returns - 01004D1007926000,01004D1007926000,gpu;status-ingame,ingame,2022-07-17 13:06:18,8 +70,PriPara: All Idol Perfect Stage - 010007F00879E000,010007F00879E000,status-playable,playable,2022-11-22 16:35:52,4 +71,Shantae and the Pirate's Curse - 0100EFD00A4FA000,0100EFD00A4FA000,status-playable,playable,2024-04-29 17:21:57,11 +72,DARK SOULS™: REMASTERED - 01004AB00A260000,01004AB00A260000,gpu;status-ingame;nvdec;online-broken,ingame,2024-04-09 19:47:58,15 +73,The Liar Princess and the Blind Prince,,audio;slow;status-playable,playable,2020-06-08 21:23:28,3 +74,Dead Cells - 0100646009FBE000,0100646009FBE000,status-playable,playable,2021-09-22 22:18:49,7 +75,Sonic Mania,,status-playable,playable,2020-06-08 17:30:57,6 +76,The Mahjong,,Needs Update;crash;services;status-nothing,nothing,2021-04-01 22:06:22,6 +77,Angels of Death - 0100AE000AEBC000,0100AE000AEBC000,nvdec;status-playable,playable,2021-02-22 14:17:15,7 +78,Penny-Punching Princess - 0100C510049E0000,0100C510049E0000,status-playable,playable,2022-08-09 13:37:05,6 +79,Just Shapes & Beats,,ldn-untested;nvdec;status-playable,playable,2021-02-09 12:18:36,7 +80,Minecraft - Nintendo Switch Edition - 01006BD001E06000,01006BD001E06000,status-playable;ldn-broken,playable,2023-10-15 1:47:08,17 +81,FINAL FANTASY XV POCKET EDITION HD,,status-playable,playable,2021-01-05 17:52:08,5 +82,Dragon Ball Xenoverse 2 - 010078D000F88000,010078D000F88000,gpu;status-ingame;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01,12 +83,Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings - 010009900947A000,010009900947A000,nvdec;status-playable,playable,2021-06-03 18:37:01,11 +84,Nights of Azure 2: Bride of the New Moon - 0100628004BCE000,0100628004BCE000,status-menus;crash;nvdec;regression,menus,2022-11-24 16:00:39,9 +85,RXN -Raijin-,,nvdec;status-playable,playable,2021-01-10 16:05:43,6 +86,The Legend of Zelda: Breath of the Wild - 01007EF00011E000,01007EF00011E000,gpu;status-ingame;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46,66 +87,The Messenger,,status-playable,playable,2020-03-22 13:51:37,4 +88,Starlink: Battle for Atlas - 01002CC003FE6000,01002CC003FE6000,services-horizon;status-nothing;crash;Needs Update,nothing,2024-05-05 17:25:11,13 +89,Nintendo Labo - Toy-Con 01: Variety Kit - 0100C4B0034B2000,0100C4B0034B2000,gpu;status-ingame,ingame,2022-08-07 12:56:07,7 +90,Diablo III: Eternal Collection - 01001B300B9BE000,01001B300B9BE000,status-playable;online-broken;ldn-works,playable,2023-08-21 23:48:03,49 +91,Road Redemption - 010053000B986000,010053000B986000,status-playable;online-broken,playable,2022-08-12 11:26:20,4 +92,Brawlhalla - 0100C6800B934000,0100C6800B934000,online;opengl;status-playable,playable,2021-06-03 18:26:09,8 +93,Super Mario Odyssey - 0100000000010000,0100000000010000,status-playable;nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 1:32:34,69 +95,Sonic Mania Plus - 01009AA000FAA000,01009AA000FAA000,status-playable,playable,2022-01-16 4:09:11,6 +96,Pokken Tournament DX Demo - 010030D005AE6000,010030D005AE6000,status-playable;demo;opengl-backend-bug,playable,2022-08-10 12:03:19,4 +97,Fast RMX - 01009510001CA000,01009510001CA000,slow;status-ingame;crash;ldn-partial,ingame,2024-06-22 20:48:58,22 +98,Steins;Gate Elite,,status-playable,playable,2020-08-04 7:33:32,4 +99,Memories Off -Innocent Fille- for Dearest,,status-playable,playable,2020-08-04 7:31:22,4 +100,Enchanting Mahjong Match,,gpu;status-ingame,ingame,2020-04-17 22:01:31,3 +101,Code of Princess EX - 010034E005C9C000,010034E005C9C000,nvdec;online;status-playable,playable,2021-06-03 10:50:13,4 +102,20XX - 0100749009844000,0100749009844000,gpu;status-ingame,ingame,2023-08-14 9:41:44,11 +103,Cartoon Network Battle Crashers - 0100085003A2A000,0100085003A2A000,status-playable,playable,2022-07-21 21:55:40,7 +104,Danmaku Unlimited 3,,status-playable,playable,2020-11-15 0:48:35,8 +105,Mega Man Legacy Collection Vol.1 - 01002D4007AE0000,01002D4007AE0000,gpu;status-ingame,ingame,2021-06-03 18:17:17,8 +106,Sparkle ZERO,,gpu;slow;status-ingame,ingame,2020-03-23 18:19:18,3 +107,Sparkle 2,,status-playable,playable,2020-10-19 11:51:39,6 +108,Sparkle Unleashed - 01000DC007E90000,01000DC007E90000,status-playable,playable,2021-06-03 14:52:15,4 +109,I AM SETSUNA - 0100849000BDA000,0100849000BDA000,status-playable,playable,2021-11-28 11:06:11,11 +110,Lego City Undercover - 01003A30012C0000,01003A30012C0000,status-playable;nvdec,playable,2024-09-30 8:44:27,9 +111,Mega Man X Legacy Collection,,audio;crash;services;status-menus,menus,2020-12-04 4:30:17,6 +112,Super Bomberman R - 01007AD00013E000,01007AD00013E000,status-playable;nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14,9 +113,Mega Man 11 - 0100B0C0086B0000,0100B0C0086B0000,status-playable,playable,2021-04-26 12:07:53,6 +114,Undertale - 010080B00AD66000,010080B00AD66000,status-playable,playable,2022-08-31 17:31:46,11 +115,"Pokémon: Let's Go, Eevee! - 0100187003A36000",0100187003A36000,status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04,24 +116,Poly Bridge,,services;status-playable,playable,2020-06-08 23:32:41,6 +117,BlazBlue: Cross Tag Battle,,nvdec;online;status-playable,playable,2021-01-05 20:29:37,5 +118,Capcom Beat 'Em Up Bundle,,status-playable,playable,2020-03-23 18:31:24,3 +119,Owlboy,,status-playable,playable,2020-10-19 14:24:45,5 +120,Subarashiki Kono Sekai -Final Remix-,,services;slow;status-ingame,ingame,2020-02-10 16:21:51,4 +121,Ultra Street Fighter II: The Final Challengers - 01007330027EE000,01007330027EE000,status-playable;ldn-untested,playable,2021-11-25 7:54:58,5 +122,Mighty Gunvolt Burst,,status-playable,playable,2020-10-19 16:05:49,4 +123,Super Meat Boy,,services;status-playable,playable,2020-04-02 23:10:07,5 +124,UNO - 01005AA00372A000,01005AA00372A000,status-playable;nvdec;ldn-untested,playable,2022-07-28 14:49:47,9 +125,Tales of the Tiny Planet - 0100408007078000,0100408007078000,status-playable,playable,2021-01-25 15:47:41,6 +126,Octopath Traveler,,UE4;crash;gpu;status-ingame,ingame,2020-08-31 2:34:36,9 +127,A magical high school girl - 01008DD006C52000,01008DD006C52000,status-playable,playable,2022-07-19 14:40:50,4 +128,Superbeat: Xonic EX - 0100FF60051E2000,0100FF60051E2000,status-ingame;crash;nvdec,ingame,2022-08-19 18:54:40,2 +129,DRAGON BALL FighterZ - 0100A250097F0000,0100A250097F0000,UE4;ldn-broken;nvdec;online;status-playable,playable,2021-06-11 16:19:04,12 +130,Arcade Archives VS. SUPER MARIO BROS.,,online;status-playable,playable,2021-04-08 14:48:11,8 +131,Celeste,,status-playable,playable,2020-06-17 10:14:40,2 +132,Hollow Knight - 0100633007D48000,0100633007D48000,status-playable;nvdec,playable,2023-01-16 15:44:56,4 +133,Shining Resonance Refrain - 01009A5009A9E000,01009A5009A9E000,status-playable;nvdec,playable,2022-08-12 18:03:01,7 +134,Valkyria Chronicles 4 Demo - 0100FBD00B91E000,0100FBD00B91E000,slow;status-ingame;demo,ingame,2022-08-29 20:39:07,3 +136,Super Smash Bros. Ultimate - 01006A800016E000,01006A800016E000,gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21,56 +137,Cendrillon palikA - 01006B000A666000,01006B000A666000,gpu;status-ingame;nvdec,ingame,2022-07-21 22:52:24,12 +138,Atari Flashback Classics,,,,2018-12-15 6:55:27,1 +139,RPG Maker MV,,nvdec;status-playable,playable,2021-01-05 20:12:01,5 +140,SNK 40th Anniversary Collection - 01004AB00AEF8000,01004AB00AEF8000,status-playable,playable,2022-08-14 13:33:15,8 +141,Firewatch - 0100AC300919A000,0100AC300919A000,status-playable,playable,2021-06-03 10:56:38,9 +142,Taiko no Tatsujin: Drum 'n' Fun! - 01002C000B552000,01002C000B552000,status-playable;online-broken;ldn-broken,playable,2023-05-20 15:10:12,12 +143,Fairy Fencer F™: Advent Dark Force - 0100F6D00B8F2000,0100F6D00B8F2000,status-ingame;32-bit;crash;nvdec,ingame,2023-04-16 3:53:48,9 +144,Azure Striker Gunvolt: STRIKER PACK - 0100192003FA4000,0100192003FA4000,32-bit;status-playable,playable,2024-02-10 23:51:21,12 +145,LIMBO - 01009C8009026000,01009C8009026000,cpu;status-boots;32-bit,boots,2023-06-28 15:39:19,10 +147,Dragon Marked for Death: Frontline Fighters (Empress & Warrior) - 010089700150E000,010089700150E000,status-playable;ldn-untested;audout,playable,2022-03-10 6:44:34,5 +148,SENRAN KAGURA Reflexions,,status-playable,playable,2020-03-23 19:15:23,11 +149,Dies irae Amantes amentes For Nintendo Switch - 0100BB900B5B4000,0100BB900B5B4000,status-nothing;32-bit;crash,nothing,2022-02-16 7:09:05,9 +150,TETRIS 99 - 010040600C5CE000,010040600C5CE000,gpu;status-ingame;online-broken;ldn-untested,ingame,2024-05-02 16:36:41,28 +151,Yoshi's Crafted World Demo Version,,gpu;status-boots;status-ingame,boots,2020-12-16 14:57:40,3 +152,8-BIT ADVENTURE STEINS;GATE,,audio;status-ingame,ingame,2020-01-12 15:05:06,1 +153,Ao no Kanata no Four Rhythm - 0100FA100620C000,0100FA100620C000,status-playable,playable,2022-07-21 10:50:42,8 +154,DELTARUNE Chapter 1 - 010023800D64A000,010023800D64A000,status-playable,playable,2023-01-22 4:47:44,4 +155,My Girlfriend is a Mermaid!?,,nvdec;status-playable,playable,2020-05-08 13:32:55,6 +156,SEGA Mega Drive Classics,,online;status-playable,playable,2021-01-05 11:08:00,5 +157,Aragami: Shadow Edition - 010071800BA74000,010071800BA74000,nvdec;status-playable,playable,2021-02-21 20:33:23,5 +158,この世の果てで恋を唄う少女YU-NO,,audio;status-ingame,ingame,2021-01-22 7:00:16,2 +159,Xenoblade Chronicles 2 - 0100E95004038000,0100E95004038000,deadlock;status-ingame;amd-vendor-bug,ingame,2024-03-28 14:31:41,51 +160,Atelier Rorona Arland no Renkinjutsushi DX (JP) - 01002D700B906000,01002D700B906000,status-playable;nvdec,playable,2022-12-02 17:26:54,3 +161,DEAD OR ALIVE Xtreme 3 Scarlet - 01009CC00C97C000,01009CC00C97C000,status-playable,playable,2022-07-23 17:05:06,23 +162,Blaster Master Zero 2 - 01005AA00D676000,01005AA00D676000,status-playable,playable,2021-04-08 15:22:59,2 +163,Vroom in the Night Sky - 01004E90028A2000,01004E90028A2000,status-playable;Needs Update;vulkan-backend-bug,playable,2023-02-20 2:32:29,7 +164,Our World Is Ended.,,nvdec;status-playable,playable,2021-01-19 22:46:57,6 +165,Mortal Kombat 11 - 0100F2200C984000,0100F2200C984000,slow;status-ingame;nvdec;online-broken;ldn-broken,ingame,2024-06-19 2:22:17,10 +166,SEGA Ages: Virtua Racing - 010054400D2E6000,010054400D2E6000,status-playable;online-broken,playable,2023-01-29 17:08:39,6 +167,BOXBOY! + BOXGIRL!,,status-playable,playable,2020-11-08 1:11:54,6 +168,Hyrule Warriors: Definitive Edition - 0100AE00096EA000,0100AE00096EA000,services-horizon;status-ingame;nvdec,ingame,2024-06-16 10:34:05,36 +170,Cytus α - 010063100B2C2000,010063100B2C2000,nvdec;status-playable,playable,2021-02-20 13:40:46,5 +171,Resident Evil 4 - 010099A00BC1E000,010099A00BC1E000,status-playable;nvdec,playable,2022-11-16 21:16:04,12 +172,Team Sonic Racing - 010092B0091D0000,010092B0091D0000,status-playable;online-broken;ldn-works,playable,2024-02-05 15:05:27,9 +173,Pang Adventures - 010083700B730000,010083700B730000,status-playable,playable,2021-04-10 12:16:59,7 +174,Remi Lore - 010095900B436000,010095900B436000,status-playable,playable,2021-06-03 18:58:15,6 +175,SKYHILL - 0100A0A00D1AA000,0100A0A00D1AA000,status-playable,playable,2021-03-05 15:19:11,5 +176,Valkyria Chronicles 4 - 01005C600AC68000,01005C600AC68000,audout;nvdec;status-playable,playable,2021-06-03 18:12:25,6 +177,Crystal Crisis - 0100972008234000,0100972008234000,nvdec;status-playable,playable,2021-02-20 13:52:44,5 +178,Crash Team Racing Nitro-Fueled - 0100F9F00C696000,0100F9F00C696000,gpu;status-ingame;nvdec;online-broken,ingame,2023-06-25 2:40:17,19 +179,Collection of Mana,,status-playable,playable,2020-10-19 19:29:45,5 +180,Super Mario Maker 2 - 01009B90006DC000,01009B90006DC000,status-playable;online-broken;ldn-broken,playable,2024-08-25 11:05:19,22 +181,Nekopara Vol.3 - 010045000E418000,010045000E418000,status-playable,playable,2022-10-03 12:49:04,6 +182,Moero Chronicle Hyper - 0100B8500D570000,0100B8500D570000,32-bit;status-playable,playable,2022-08-11 7:21:56,12 +183,Monster Hunter XX Demo,,32-bit;cpu;status-nothing,nothing,2020-03-22 10:12:28,3 +184,Super Neptunia RPG - 01004D600AC14000,01004D600AC14000,status-playable;nvdec,playable,2022-08-17 16:38:52,8 +185,Terraria - 0100E46006708000,0100E46006708000,status-playable;online-broken,playable,2022-09-12 16:14:57,5 +186,Megaman Legacy Collection 2,,status-playable,playable,2021-01-06 8:47:59,2 +187,Blazing Chrome,,status-playable,playable,2020-11-16 4:56:54,6 +188,Dragon Quest Builders 2 - 010042000A986000,010042000A986000,status-playable,playable,2024-04-19 16:36:38,10 +189,CLANNAD - 0100A3A00CC7E000,0100A3A00CC7E000,status-playable,playable,2021-06-03 17:01:02,6 +190,Ys VIII: Lacrimosa of Dana - 01007F200B0C0000,01007F200B0C0000,status-playable;nvdec,playable,2023-08-05 9:26:41,20 +191,PC Building Simulator,,status-playable,playable,2020-06-12 0:31:58,4 +192,NO THING,,status-playable,playable,2021-01-04 19:06:01,2 +193,The Swords of Ditto,,slow;status-ingame,ingame,2020-12-06 0:13:12,2 +194,Kill la Kill - IF,,status-playable,playable,2020-06-09 14:47:08,6 +195,Spyro Reignited Trilogy,,Needs More Attention;UE4;crash;gpu;nvdec;status-menus,menus,2021-01-22 13:01:56,6 +196,FINAL FANTASY VIII REMASTERED - 01008B900DC0A000,01008B900DC0A000,status-playable;nvdec,playable,2023-02-15 10:57:48,8 +197,Super Nintendo Entertainment System - Nintendo Switch Online,,status-playable,playable,2021-01-05 0:29:48,5 +198,スーパーファミコン Nintendo Switch Online,,slow;status-ingame,ingame,2020-03-14 5:48:38,3 +199,Street Fighter 30th Anniversary Collection - 0100024008310000,0100024008310000,status-playable;online-broken;ldn-partial,playable,2022-08-20 16:50:47,7 +200,Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda - 01000B900D8B0000,01000B900D8B0000,slow;status-playable;nvdec,playable,2024-04-01 22:43:40,19 +201,Nekopara Vol.2,,status-playable,playable,2020-12-16 11:04:47,5 +202,Nekopara Vol.1 - 0100B4900AD3E000,0100B4900AD3E000,status-playable;nvdec,playable,2022-08-06 18:25:54,5 +203,Gunvolt Chronicles: Luminous Avenger iX,,status-playable,playable,2020-06-16 22:47:07,3 +204,Outlast - 01008D4007A1E000,01008D4007A1E000,status-playable;nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 4:44:26,7 +205,OKAMI HD - 0100276009872000,0100276009872000,status-playable;nvdec,playable,2024-04-05 6:24:58,6 +207,Luigi's Mansion 3 - 0100DCA0064A6000,0100DCA0064A6000,gpu;slow;status-ingame;Needs Update;ldn-works,ingame,2024-09-27 22:17:36,57 +208,The Legend of Zelda: Link's Awakening - 01006BB00C6F0000,01006BB00C6F0000,gpu;status-ingame;nvdec;mac-bug,ingame,2023-08-09 17:37:40,29 +209,Cat Quest,,status-playable,playable,2020-04-02 23:09:32,4 +216,Xenoblade Chronicles 2: Torna - The Golden Country - 0100C9F009F7A000,0100C9F009F7A000,slow;status-playable;nvdec,playable,2023-01-28 16:47:28,4 +217,Devil May Cry,,nvdec;status-playable,playable,2021-01-04 19:43:08,2 +218,Fire Emblem Warriors - 0100F15003E64000,0100F15003E64000,status-playable;nvdec,playable,2023-05-10 1:53:10,17 +219,Disgaea 4 Complete Plus,,gpu;slow;status-playable,playable,2020-02-18 10:54:28,2 +220,Donkey Kong Country Tropical Freeze - 0100C1F0051B6000,0100C1F0051B6000,status-playable,playable,2024-08-05 16:46:10,16 +221,Puzzle and Dragons GOLD,,slow;status-playable,playable,2020-05-13 15:09:34,2 +222,Fe,,,,2020-01-21 4:08:33,1 +223,MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020 - 010002C00C270000,010002C00C270000,status-ingame;crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55,23 +224,void* tRrLM(); //Void Terrarium - 0100FF7010E7E000,0100FF7010E7E000,gpu;status-ingame;Needs Update;regression,ingame,2023-02-10 1:13:25,8 +225,Cars 3 Driven to Win - 01008D1001512000,01008D1001512000,gpu;status-ingame,ingame,2022-07-21 21:21:05,11 +226,Yu-Gi-Oh! Legacy of the Duelist: Link Evolution! - 010022400BE5A000,010022400BE5A000,status-playable,playable,2024-09-27 21:48:43,23 +227,Baba Is You - 01002CD00A51C000,01002CD00A51C000,status-playable,playable,2022-07-17 5:36:54,8 +228,Thronebreaker: The Witcher Tales - 0100E910103B4000,0100E910103B4000,nvdec;status-playable,playable,2021-06-03 16:40:15,4 +229,Fitness Boxing,,services;status-ingame,ingame,2020-05-17 14:00:48,4 +230,Fire Emblem: Three Houses - 010055D009F78000,010055D009F78000,status-playable;online-broken,playable,2024-09-14 23:53:50,47 +231,Persona 5: Scramble,,deadlock;status-boots,boots,2020-10-04 3:22:29,7 +232,Pokémon Sword - 0100ABF008968000,0100ABF008968000,deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37,63 +233,Mario + Rabbids Kingdom Battle - 010067300059A000,010067300059A000,slow;status-playable;opengl-backend-bug,playable,2024-05-06 10:16:54,20 +234,Tokyo Mirage Sessions #FE Encore - 0100A9400C9C2000,0100A9400C9C2000,32-bit;status-playable;nvdec,playable,2022-07-07 9:41:07,8 +235,Disgaea 1 Complete - 01004B100AF18000,01004B100AF18000,status-playable,playable,2023-01-30 21:45:23,3 +237,初音ミク Project DIVA MEGA39's - 0100F3100DA46000,0100F3100DA46000,audio;status-playable;loader-allocator,playable,2022-07-29 11:45:52,25 +239,Minna de Wai Wai! Spelunker - 0100C3F000BD8000,0100C3F000BD8000,status-nothing;crash,nothing,2021-11-03 7:17:11,4 +242,Nickelodeon Paw Patrol: On a Roll - 0100CEC003A4A000,0100CEC003A4A000,nvdec;status-playable,playable,2021-01-28 21:14:49,5 +243,Rune Factory 4 Special - 010051D00E3A4000,010051D00E3A4000,status-ingame;32-bit;crash;nvdec,ingame,2023-05-06 8:49:17,47 +244,Mario Kart 8 Deluxe - 0100152000022000,0100152000022000,32-bit;status-playable;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17,57 +245,Pokémon Mystery Dungeon Rescue Team DX - 01003D200BAA2000,01003D200BAA2000,status-playable;mac-bug,playable,2024-01-21 0:16:32,9 +246,YGGDRA UNION We’ll Never Fight Alone,,status-playable,playable,2020-04-03 2:20:47,4 +247,メモリーズオフ - Innocent Fille - 010065500B218000,010065500B218000,status-playable,playable,2022-12-02 17:36:48,6 +248,Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town) - 01001D900D9AC000,01001D900D9AC000,slow;status-ingame;crash;Needs Update,ingame,2022-04-24 22:46:04,4 +249,Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition - 0100CE500D226000,0100CE500D226000,status-playable;nvdec;opengl,playable,2022-09-14 15:01:57,14 +250,Animal Crossing: New Horizons - 01006F8002326000,01006F8002326000,gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49,112 +251,Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!,,services;status-menus,menus,2020-03-20 14:00:57,2 +252,Super One More Jump - 0100284007D6C000,0100284007D6C000,status-playable,playable,2022-08-17 16:47:47,5 +253,Trine - 0100D9000A930000,0100D9000A930000,ldn-untested;nvdec;status-playable,playable,2021-06-03 11:28:15,3 +254,Sky Force Reloaded,,status-playable,playable,2021-01-04 20:06:57,3 +255,World of Goo - 010009E001D90000,010009E001D90000,gpu;status-boots;32-bit;crash;regression,boots,2024-04-12 5:52:14,4 +256,ZERO GUNNER 2,,status-playable,playable,2021-01-04 20:17:14,2 +257,Zaccaria Pinball - 010092400A678000,010092400A678000,status-playable;online-broken,playable,2022-09-03 15:44:28,5 +258,1917 - The Alien Invasion DX,,status-playable,playable,2021-01-08 22:11:16,4 +259,Astro Duel Deluxe - 0100F0400351C000,0100F0400351C000,32-bit;status-playable,playable,2021-06-03 11:21:48,4 +260,Another World - 01003C300AAAE000,01003C300AAAE000,slow;status-playable,playable,2022-07-21 10:42:38,4 +261,Ring Fit Adventure - 01002FF008C24000,01002FF008C24000,crash;services;status-nothing,nothing,2021-04-14 19:00:01,7 +262,Arcade Classics Anniversary Collection - 010050000D6C4000,010050000D6C4000,status-playable,playable,2021-06-03 13:55:10,3 +263,Assault Android Cactus+ - 0100DF200B24C000,0100DF200B24C000,status-playable,playable,2021-06-03 13:23:55,6 +264,American Fugitive,,nvdec;status-playable,playable,2021-01-04 20:45:11,2 +265,Nickelodeon Kart Racers,,status-playable,playable,2021-01-07 12:16:49,2 +266,Neonwall - 0100743008694000,0100743008694000,status-playable;nvdec,playable,2022-08-06 18:49:52,3 +267,Never Stop Sneakin',,,,2020-03-19 12:55:40,1 +268,Next Up Hero,,online;status-playable,playable,2021-01-04 22:39:36,2 +269,Ninja Striker,,status-playable,playable,2020-12-08 19:33:29,3 +270,Not Not a Brain Buster,,status-playable,playable,2020-05-10 2:05:26,5 +271,Oh...Sir! The Hollywood Roast,,status-ingame,ingame,2020-12-06 0:42:30,2 +272,Old School Musical,,status-playable,playable,2020-12-10 12:51:12,3 +273,Abyss,,,,2020-03-19 15:41:55,1 +274,Alteric,,status-playable,playable,2020-11-08 13:53:22,10 +277,AIRHEART - Tales of Broken Wings - 01003DD00BFEE000,01003DD00BFEE000,status-playable,playable,2021-02-26 15:20:27,4 +278,Necrosphere,,,,2020-03-19 17:25:03,1 +279,Neverout,,,,2020-03-19 17:33:39,1 +280,Old Man's Journey - 0100CE2007A86000,0100CE2007A86000,nvdec;status-playable,playable,2021-01-28 19:16:52,2 +281,Dr Kawashima's Brain Training - 0100ED000D390000,0100ED000D390000,services;status-ingame,ingame,2023-06-04 0:06:46,3 +282,Nine Parchments - 0100D03003F0E000,0100D03003F0E000,status-playable;ldn-untested,playable,2022-08-07 12:32:08,3 +283,All-Star Fruit Racing - 0100C1F00A9B8000,0100C1F00A9B8000,status-playable;nvdec;UE4,playable,2022-07-21 0:35:37,3 +284,Armello,,nvdec;status-playable,playable,2021-01-07 11:43:26,3 +285,DOOM 64,,nvdec;status-playable;vulkan,playable,2020-10-13 23:47:28,11 +286,Motto New Pazzmatsu-san Shimpin Sotsugyo Keikaku,,,,2020-03-20 14:53:55,1 +287,Refreshing Sideways Puzzle Ghost Hammer,,status-playable,playable,2020-10-18 12:08:54,4 +288,Astebreed - 010057A00C1F6000,010057A00C1F6000,status-playable,playable,2022-07-21 17:33:54,3 +289,ASCENDANCE,,status-playable,playable,2021-01-05 10:54:40,2 +290,Astral Chain - 01007300020FA000,01007300020FA000,status-playable,playable,2024-07-17 18:02:19,15 +291,Oceanhorn,,status-playable,playable,2021-01-05 13:55:22,2 +292,NORTH,,nvdec;status-playable,playable,2021-01-05 16:17:44,2 +293,No Heroes Here,,online;status-playable,playable,2020-05-10 2:41:57,4 +294,New Frontier Days -Founding Pioneers-,,status-playable,playable,2020-12-10 12:45:07,3 +295,Star Ghost,,,,2020-03-20 23:40:10,1 +296,Stern Pinball Arcade - 0100AE0006474000,0100AE0006474000,status-playable,playable,2022-08-16 14:24:41,6 +297,Nightmare Boy,,status-playable,playable,2021-01-05 15:52:29,2 +298,Pinball FX3 - 0100DB7003828000,0100DB7003828000,status-playable;online-broken,playable,2022-11-11 23:49:07,5 +299,Polygod - 010017600B180000,010017600B180000,slow;status-ingame;regression,ingame,2022-08-10 14:38:14,3 +300,Prison Architect - 010029200AB1C000,010029200AB1C000,status-playable,playable,2021-04-10 12:27:58,4 +301,Psikyo Collection Vol 1,,32-bit;status-playable,playable,2020-10-11 13:18:47,3 +302,Raging Justice - 01003D00099EC000,01003D00099EC000,status-playable,playable,2021-06-03 14:06:50,6 +303,Old School Racer 2,,status-playable,playable,2020-10-19 12:11:26,3 +304,Death Road to Canada - 0100423009358000,0100423009358000,gpu;audio;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:26,8 +305,Feather - 0100E4300CB3E000,0100E4300CB3E000,status-playable,playable,2021-06-03 14:11:27,3 +306,Laser Kitty Pow Pow,,,,2020-03-21 23:44:13,1 +307,Bad Dudes,,status-playable,playable,2020-12-10 12:30:56,3 +308,Bomber Crew - 01007900080B6000,01007900080B6000,status-playable,playable,2021-06-03 14:21:28,4 +309,Death Squared,,status-playable,playable,2020-12-04 13:00:15,3 +310,PAC-MAN CHAMPIONSHIP EDITION 2 PLUS,,status-playable,playable,2021-01-19 22:06:18,5 +311,RollerCoaster Tycoon Adventures,,nvdec;status-playable,playable,2021-01-05 18:14:18,2 +312,STAY - 0100616009082000,0100616009082000,crash;services;status-boots,boots,2021-04-23 14:24:52,3 +313,STRIKERS1945 for Nintendo Switch - 0100FF5005B76000,0100FF5005B76000,32-bit;status-playable,playable,2021-06-03 19:35:04,6 +314,STRIKERS1945II for Nintendo Switch - 0100720008ED2000,0100720008ED2000,32-bit;status-playable,playable,2021-06-03 19:43:00,5 +315,BLEED,,,,2020-03-22 9:15:11,1 +316,Earthworms Demo,,status-playable,playable,2021-01-05 16:57:11,2 +317,MEMBRANE,,,,2020-03-22 10:25:32,1 +318,Mercenary Kings,,online;status-playable,playable,2020-10-16 13:05:58,3 +319,Morphite,,status-playable,playable,2021-01-05 19:40:55,2 +320,Spiral Splatter,,status-playable,playable,2020-06-04 14:03:57,3 +321,Odium to the Core,,gpu;status-ingame,ingame,2021-01-08 14:03:52,3 +322,Brawl,,nvdec;slow;status-playable,playable,2020-06-04 14:23:18,3 +323,Defunct,,status-playable,playable,2021-01-08 21:33:46,2 +324,Dracula's Legacy,,nvdec;status-playable,playable,2020-12-10 13:24:25,3 +325,Submerged - 0100EDA00D866000,0100EDA00D866000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01,7 +326,Resident Evil Revelations - 0100643002136000,0100643002136000,status-playable;nvdec;ldn-untested,playable,2022-08-11 12:44:19,3 +327,"Pokémon: Let's Go, Pikachu! - 010003F003A34000",010003F003A34000,status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 7:55:41,23 +328,Syberia 1 & 2 - 01004BB00421E000,01004BB00421E000,status-playable,playable,2021-12-24 12:06:25,8 +329,Light Fall,,nvdec;status-playable,playable,2021-01-18 14:55:36,3 +330,PLANET ALPHA,,UE4;gpu;status-ingame,ingame,2020-12-16 14:42:20,2 +331,Game Doraemon Nobita no Shin Kyoryu - 01006BD00F8C0000,01006BD00F8C0000,gpu;status-ingame,ingame,2023-02-27 2:03:28,3 +332,Shift Happens,,status-playable,playable,2021-01-05 21:24:18,2 +333,SENRAN KAGURA Peach Ball - 0100D1800D902000,0100D1800D902000,status-playable,playable,2021-06-03 15:12:10,3 +334,Shadow Bug,,,,2020-03-23 20:26:08,1 +335,Dandy Dungeon: Legend of Brave Yamada,,status-playable,playable,2021-01-06 9:48:47,2 +336,Scribblenauts Mega Pack,,nvdec;status-playable,playable,2020-12-17 22:56:14,2 +337,Scribblenauts Showdown,,gpu;nvdec;status-ingame,ingame,2020-12-17 23:05:53,2 +338,Super Chariot - 010065F004E5E000,010065F004E5E000,status-playable,playable,2021-06-03 13:19:01,5 +339,Table Top Racing World Tour Nitro Edition,,status-playable,playable,2020-04-05 23:21:30,4 +340,The Pinball Arcade - 0100CD300880E000,0100CD300880E000,status-playable;online-broken,playable,2022-08-22 19:49:46,6 +341,The Room - 010079400BEE0000,010079400BEE0000,status-playable,playable,2021-04-14 18:57:05,4 +342,The Binding of Isaac: Afterbirth+ - 010021C000B6A000,010021C000B6A000,status-playable,playable,2021-04-26 14:11:56,6 +343,World Soccer Pinball,,status-playable,playable,2021-01-06 0:37:02,2 +344,ZOMBIE GOLD RUSH,,online;status-playable,playable,2020-09-24 12:56:08,2 +345,Wondershot - 0100F5D00C812000,0100F5D00C812000,status-playable,playable,2022-08-31 21:05:31,4 +346,Yet Another Zombie Defense HD,,status-playable,playable,2021-01-06 0:18:39,2 +347,Among the Sleep - Enhanced Edition - 010046500C8D2000,010046500C8D2000,nvdec;status-playable,playable,2021-06-03 15:06:25,4 +348,Silence - 0100F1400B0D6000,0100F1400B0D6000,nvdec;status-playable,playable,2021-06-03 14:46:17,2 +349,A Robot Named Fight,,,,2020-03-24 19:27:39,1 +350,60 Seconds! - 0100969005E98000,0100969005E98000,services;status-ingame,ingame,2021-11-30 1:04:14,3 +351,Xenon Racer - 010028600BA16000,010028600BA16000,status-playable;nvdec;UE4,playable,2022-08-31 22:05:30,5 +352,Awesome Pea,,status-playable,playable,2020-10-11 12:39:23,4 +354,Woodle Tree 2,,gpu;slow;status-ingame,ingame,2020-06-04 18:44:00,4 +355,Volgarr the Viking,,status-playable,playable,2020-12-18 15:25:50,4 +356,VVVVVV,,,,2020-03-24 21:53:29,1 +357,Vegas Party - 01009CD003A0A000,01009CD003A0A000,status-playable,playable,2021-04-14 19:21:41,5 +358,Worms W.M.D - 01001AE005166000,01001AE005166000,gpu;status-boots;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59,7 +359,Ambition of the Slimes,,,,2020-03-24 22:46:18,1 +360,WINDJAMMERS,,online;status-playable,playable,2020-10-13 11:24:25,4 +361,WarGroove - 01000F0002BB6000,01000F0002BB6000,status-playable;online-broken,playable,2022-08-31 10:30:45,4 +362,Car Mechanic Manager,,status-playable,playable,2020-07-23 18:50:17,2 +363,Cattails - 010004400B28A000,010004400B28A000,status-playable,playable,2021-06-03 14:36:57,5 +364,Chameleon Run Deluxe Edition,,,,2020-03-25 0:20:21,1 +365,ClusterPuck 99,,status-playable,playable,2021-01-06 0:28:12,2 +366,Coloring Book - 0100A7000BD28000,0100A7000BD28000,status-playable,playable,2022-07-22 11:17:05,5 +367,Crashlands - 010027100BD16000,010027100BD16000,status-playable,playable,2021-05-27 20:30:06,3 +368,Crimsonland - 01005640080B0000,01005640080B0000,status-playable,playable,2021-05-27 20:50:54,2 +369,Cubikolor,,,,2020-03-25 0:39:17,1 +370,My Friend Pedro: Blood Bullets Bananas - 010031200B94C000,010031200B94C000,nvdec;status-playable,playable,2021-05-28 11:19:17,3 +371,VA-11 HALL-A - 0100A6700D66E000,0100A6700D66E000,status-playable,playable,2021-02-26 15:05:34,6 +372,Octodad Dadliest Catch - 0100CAB006F54000,0100CAB006F54000,crash;status-boots,boots,2021-04-23 15:26:12,3 +373,Neko Navy: Daydream Edition,,,,2020-03-25 10:11:47,1 +374,Neon Chrome - 010075E0047F8000,010075E0047F8000,status-playable,playable,2022-08-06 18:38:34,4 +375,NeuroVoider,,status-playable,playable,2020-06-04 18:20:05,3 +376,Ninjin: Clash of Carrots - 010003C00B868000,010003C00B868000,status-playable;online-broken,playable,2024-07-10 5:12:26,10 +377,Nuclien,,status-playable,playable,2020-05-10 5:32:55,3 +378,Number Place 10000 - 010020500C8C8000,010020500C8C8000,gpu;status-menus,menus,2021-11-24 9:14:23,7 +379,Octocopter: Double or Squids,,status-playable,playable,2021-01-06 1:30:16,2 +380,Odallus - 010084300C816000,010084300C816000,status-playable,playable,2022-08-08 12:37:58,4 +381,One Eyed Kutkh,,,,2020-03-25 11:42:58,1 +382,One More Dungeon,,status-playable,playable,2021-01-06 9:10:58,2 +383,1-2-Switch - 01000320000CC000,01000320000CC000,services;status-playable,playable,2022-02-18 14:44:03,3 +384,ACA NEOGEO AERO FIGHTERS 2 - 0100AC40038F4000,0100AC40038F4000,online;status-playable,playable,2021-04-08 15:44:09,3 +385,Captain Toad: Treasure Tracker - 01009BF0072D4000,01009BF0072D4000,32-bit;status-playable,playable,2024-04-25 0:50:16,3 +386,Vaccine,,nvdec;status-playable,playable,2021-01-06 1:02:07,2 +387,Carnival Games - 010088C0092FE000,010088C0092FE000,status-playable;nvdec,playable,2022-07-21 21:01:22,5 +388,OLYMPIC GAMES TOKYO 2020,,ldn-untested;nvdec;online;status-playable,playable,2021-01-06 1:20:24,2 +389,Yodanji,,,,2020-03-25 16:28:53,1 +390,Axiom Verge,,status-playable,playable,2020-10-20 1:07:18,2 +391,Blaster Master Zero - 0100225000FEE000,0100225000FEE000,32-bit;status-playable,playable,2021-03-05 13:22:33,2 +392,SamuraiAces for Nintendo Switch,,32-bit;status-playable,playable,2020-11-24 20:26:55,4 +393,Rogue Aces - 0100EC7009348000,0100EC7009348000,gpu;services;status-ingame;nvdec,ingame,2021-11-30 2:18:30,7 +394,Pokémon HOME,,Needs Update;crash;services;status-menus,menus,2020-12-06 6:01:51,2 +395,Safety First!,,status-playable,playable,2021-01-06 9:05:23,2 +396,3D MiniGolf,,status-playable,playable,2021-01-06 9:22:11,2 +397,DOUBLE DRAGON4,,,,2020-03-25 23:46:46,1 +398,Don't Die Mr. Robot DX - 010007200AC0E000,010007200AC0E000,status-playable;nvdec,playable,2022-09-02 18:34:38,7 +399,DERU - The Art of Cooperation,,status-playable,playable,2021-01-07 16:59:59,4 +400,Darts Up - 0100BA500B660000,0100BA500B660000,status-playable,playable,2021-04-14 17:22:22,2 +401,Deponia - 010023600C704000,010023600C704000,nvdec;status-playable,playable,2021-01-26 17:17:19,2 +402,Devious Dungeon - 01009EA00A320000,01009EA00A320000,status-playable,playable,2021-03-04 13:03:06,2 +403,Turok - 010085500D5F6000,010085500D5F6000,gpu;status-ingame,ingame,2021-06-04 13:16:24,3 +404,Toast Time: Smash Up!,,crash;services;status-menus,menus,2020-04-03 12:26:59,3 +405,The VideoKid,,nvdec;status-playable,playable,2021-01-06 9:28:24,2 +406,Timberman VS,,,,2020-03-26 14:18:29,1 +407,Time Recoil - 0100F770045CA000,0100F770045CA000,status-playable,playable,2022-08-24 12:44:03,3 +408,Toby: The Secret Mine,,nvdec;status-playable,playable,2021-01-06 9:22:33,2 +409,Toki Tori,,,,2020-03-26 14:49:54,1 +410,Totes the Goat,,,,2020-03-26 14:55:00,1 +411,Twin Robots: Ultimate Edition - 0100047009742000,0100047009742000,status-playable;nvdec,playable,2022-08-25 14:24:03,2 +412,Ultimate Runner - 010045200A1C2000,010045200A1C2000,status-playable,playable,2022-08-29 12:52:40,3 +413,UnExplored - Unlocked Edition,,status-playable,playable,2021-01-06 10:02:16,2 +414,Unepic - 01008F80049C6000,01008F80049C6000,status-playable,playable,2024-01-15 17:03:00,6 +415,Uncanny Valley - 01002D900C5E4000,01002D900C5E4000,nvdec;status-playable,playable,2021-06-04 13:28:45,2 +416,Ultra Hyperball,,status-playable,playable,2021-01-06 10:09:55,2 +417,Timespinner - 0100DD300CF3A000,0100DD300CF3A000,gpu;status-ingame,ingame,2022-08-09 9:39:11,5 +418,Tiny Barbarian DX,,,,2020-03-26 18:46:29,1 +419,TorqueL -Physics Modified Edition-,,,,2020-03-26 18:55:23,1 +420,Unholy Heights,,,,2020-03-26 19:03:43,1 +421,Uurnog Uurnlimited,,,,2020-03-26 19:34:02,1 +422,de Blob 2,,nvdec;status-playable,playable,2021-01-06 13:00:16,2 +423,The Trail: Frontier Challenge - 0100B0E0086F6000,0100B0E0086F6000,slow;status-playable,playable,2022-08-23 15:10:51,3 +425,Toy Stunt Bike: Tiptop's Trials - 01009FF00A160000,01009FF00A160000,UE4;status-playable,playable,2021-04-10 13:56:34,3 +426,TumbleSeed,,,,2020-03-26 21:27:06,1 +427,Type:Rider,,status-playable,playable,2021-01-06 13:12:55,2 +428,Dawn of the Breakers - 0100F0B0081DA000,0100F0B0081DA000,status-menus;online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03,5 +429,Thumper - 01006F6002840000,01006F6002840000,gpu;status-ingame,ingame,2024-08-12 2:41:07,6 +430,Revenge of Justice - 010027400F708000 ,010027400F708000,status-playable;nvdec,playable,2022-11-20 15:43:23,3 +431,Dead Synchronicity: Tomorrow Comes Today,,,,2020-03-26 23:13:28,1 +435,Them Bombs,,,,2020-03-27 12:46:15,1 +436,Alwa's Awakening,,status-playable,playable,2020-10-13 11:52:01,5 +437,La Mulana 2 - 010038000F644000,010038000F644000,status-playable,playable,2022-09-03 13:45:57,7 +438,Tied Together - 0100B6D00C2DE000,0100B6D00C2DE000,nvdec;status-playable,playable,2021-04-10 14:03:46,4 +439,Magic Scroll Tactics,,,,2020-03-27 14:00:41,1 +440,SeaBed,,status-playable,playable,2020-05-17 13:25:37,4 +441,Wenjia,,status-playable,playable,2020-06-08 11:38:30,4 +442,DragonBlaze for Nintendo Switch,,32-bit;status-playable,playable,2020-10-14 11:11:28,3 +443,Debris Infinity - 010034F00BFC8000,010034F00BFC8000,nvdec;online;status-playable,playable,2021-05-28 12:14:39,4 +444,Die for Valhalla!,,status-playable,playable,2021-01-06 16:09:14,2 +445,Double Cross,,status-playable,playable,2021-01-07 15:34:22,4 +446,Deep Ones,,services;status-nothing,nothing,2020-04-03 2:54:19,3 +447,One Step to Eden,,,,2020-03-27 16:31:39,1 +448,Bravely Default II Demo - 0100B6801137E000,0100B6801137E000,gpu;status-ingame;crash;UE4;demo,ingame,2022-09-27 5:39:47,7 +449,Prison Princess - 0100F4800F872000,0100F4800F872000,status-playable,playable,2022-11-20 15:00:25,4 +450,NinNinDays - 0100746010E4C000,0100746010E4C000,status-playable,playable,2022-11-20 15:17:29,4 +451,Syrup and the Ultimate Sweet,,,,2020-03-27 21:10:42,1 +452,Touhou Gensou Mahjong,,,,2020-03-27 21:36:20,1 +453,Shikhondo Soul Eater,,,,2020-03-27 22:14:23,1 +454, de Shooting wa Machigatteiru Daroka,,,,2020-03-27 22:27:54,1 +456,MY HERO ONE'S JUSTICE,,UE4;crash;gpu;online;status-menus,menus,2020-12-10 13:11:04,7 +457,Heaven Dust,,status-playable,playable,2020-05-17 14:02:41,4 +458,Touhou Sky Arena matsuri climax,,,,2020-03-28 0:25:17,1 +459,Mercenaries Wings The False Phoenix,,crash;services;status-nothing,nothing,2020-05-08 22:42:12,4 +460,Don't Sink - 0100C4D00B608000,0100C4D00B608000,gpu;status-ingame,ingame,2021-02-26 15:41:11,4 +461,Disease -Hidden Object-,,,,2020-03-28 8:17:51,1 +462,Dexteritrip,,status-playable,playable,2021-01-06 12:51:12,2 +463,Devil Engine - 010031B00CF66000,010031B00CF66000,status-playable,playable,2021-06-04 11:54:30,5 +464,Detective Gallo - 01009C0009842000,01009C0009842000,status-playable;nvdec,playable,2022-07-24 11:51:04,2 +465,Zettai kaikyu gakuen,,gpu;nvdec;status-ingame,ingame,2020-08-25 15:15:54,2 +466,Demetrios - The BIG Cynical Adventure - 0100AB600ACB4000,0100AB600ACB4000,status-playable,playable,2021-06-04 12:01:01,3 +467,Degrees of Separation,,status-playable,playable,2021-01-10 13:40:04,6 +468,De Mambo - 01008E900471E000,01008E900471E000,status-playable,playable,2021-04-10 12:39:40,4 +469,Death Mark,,status-playable,playable,2020-12-13 10:56:25,3 +470,Deemo - 01002CC0062B8000,01002CC0062B8000,status-playable,playable,2022-07-24 11:34:33,4 +472,Disgaea 5 Complete - 01005700031AE000,01005700031AE000,nvdec;status-playable,playable,2021-03-04 15:32:54,2 +473,The World Ends With You -Final Remix- - 0100C1500B82E000,0100C1500B82E000,status-playable;ldn-untested,playable,2022-07-09 1:11:21,13 +474,Don't Knock Twice - 0100E470067A8000,0100E470067A8000,status-playable,playable,2024-05-08 22:37:58,3 +475,True Fear: Forsaken Souls - Part 1,,nvdec;status-playable,playable,2020-12-15 21:39:52,3 +476,Disco Dodgeball Remix,,online;status-playable,playable,2020-09-28 23:24:49,2 +477,Demon's Crystals - 0100A2B00BD88000,0100A2B00BD88000,status-nothing;crash;regression,nothing,2022-12-07 16:33:17,3 +478,Dimension Drive,,,,2020-03-29 10:40:38,1 +479,Tower of Babel,,status-playable,playable,2021-01-06 17:05:15,2 +480,Disc Jam - 0100510004D2C000,0100510004D2C000,UE4;ldn-untested;nvdec;online;status-playable,playable,2021-04-08 16:40:35,4 +481,DIABOLIK LOVERS CHAOS LINEAGE - 010027400BD24000,010027400BD24000,gpu;status-ingame;Needs Update,ingame,2023-06-08 2:20:44,21 +482,Detention,,,,2020-03-29 11:17:35,1 +483,Tumblestone,,status-playable,playable,2021-01-07 17:49:20,4 +484,De Blob,,nvdec;status-playable,playable,2021-01-06 17:34:46,2 +485,The Voice ,,services;status-menus,menus,2020-07-28 20:48:49,2 +486,DESTINY CONNECT,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 12:20:36,2 +487,The Sexy Brutale,,status-playable,playable,2021-01-06 17:48:28,2 +488,Unicornicopia,,,,2020-03-29 13:01:35,1 +489,Ultra Space Battle Brawl,,,,2020-03-29 13:13:02,1 +490,Unruly Heroes,,status-playable,playable,2021-01-07 18:09:31,4 +491,UglyDolls: An Imperfect Adventure - 010079000B56C000,010079000B56C000,status-playable;nvdec;UE4,playable,2022-08-25 14:42:16,5 +492,Use Your Words - 01007C0003AEC000,01007C0003AEC000,status-menus;nvdec;online-broken,menus,2022-08-29 17:22:10,6 +493,New Super Lucky's Tale - 010017700B6C2000,010017700B6C2000,status-playable,playable,2024-03-11 14:14:10,7 +494,Yooka-Laylee and the Impossible Lair - 010022F00DA66000,010022F00DA66000,status-playable,playable,2021-03-05 17:32:21,4 +495,GRIS - 0100E1700C31C000,0100E1700C31C000,nvdec;status-playable,playable,2021-06-03 13:33:44,3 +496,Monster Boy and the Cursed Kingdom - 01006F7001D10000,01006F7001D10000,status-playable;nvdec,playable,2022-08-04 20:06:32,3 +497,Guns Gore and Cannoli 2,,online;status-playable,playable,2021-01-06 18:43:59,2 +498,Mark of the Ninja Remastered - 01009A700A538000,01009A700A538000,status-playable,playable,2022-08-04 15:48:30,4 +499,DOOM - 0100416004C00000,0100416004C00000,gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-09-23 15:40:07,11 +500,TINY METAL - 010074800741A000,010074800741A000,UE4;gpu;nvdec;status-ingame,ingame,2021-03-05 17:11:57,3 +501,Shadowgate,,status-playable,playable,2021-04-24 7:32:57,2 +502,R-Type Dimensions EX,,status-playable,playable,2020-10-09 12:04:43,3 +503,Thea: The Awakening,,status-playable,playable,2021-01-18 15:08:47,3 +506,Toki,,nvdec;status-playable,playable,2021-01-06 19:59:23,2 +507,Superhot - 01001A500E8B4000,01001A500E8B4000,status-playable,playable,2021-05-05 19:51:30,2 +508,Tools Up!,,crash;status-ingame,ingame,2020-07-21 12:58:17,4 +509,The Stretchers - 0100AA400A238000,0100AA400A238000,status-playable;nvdec;UE4,playable,2022-09-16 15:40:58,7 +510,Shantae: Half-Genie Hero Ultimate Edition,,status-playable,playable,2020-06-04 20:14:20,4 +511,Monster Hunter Generation Ultimate - 0100770008DD8000,0100770008DD8000,32-bit;status-playable;online-broken;ldn-works,playable,2024-03-18 14:35:36,25 +512,ATV Drift & Tricks - 01000F600B01E000,01000F600B01E000,UE4;online;status-playable,playable,2021-04-08 17:29:17,4 +513,Metaloid: Origin,,status-playable,playable,2020-06-04 20:26:35,3 +514,The Walking Dead: The Final Season - 010060F00AA70000,010060F00AA70000,status-playable;online-broken,playable,2022-08-23 17:22:32,3 +515,Lyrica,,,,2020-03-31 10:09:40,1 +516,Beat Cop,,status-playable,playable,2021-01-06 19:26:48,2 +517,Broforce - 010060A00B53C000,010060A00B53C000,ldn-untested;online;status-playable,playable,2021-05-28 12:23:38,4 +518,Ludo Mania,,crash;services;status-nothing,nothing,2020-04-03 0:33:47,2 +519,The Way Remastered,,,,2020-03-31 10:34:26,1 +520,Little Inferno,,32-bit;gpu;nvdec;status-ingame,ingame,2020-12-17 21:43:56,3 +521,Toki Tori 2+,,,,2020-03-31 10:53:13,1 +522,Bastion - 010038600B27E000,010038600B27E000,status-playable,playable,2022-02-15 14:15:24,5 +523,Lovers in a Dangerous Spacetime,,,,2020-03-31 13:45:03,1 +524,Back in 1995,,,,2020-03-31 13:52:35,1 +525,Lost Phone Stories,,services;status-ingame,ingame,2020-04-05 23:17:33,4 +526,The Walking Dead - 010029200B6AA000,010029200B6AA000,status-playable,playable,2021-06-04 13:10:56,3 +527,Beyblade Burst Battle Zero - 010068600AD16000,010068600AD16000,services;status-menus;crash;Needs Update,menus,2022-11-20 15:48:32,8 +528,Tiny Hands Adventure - 010061A00AE64000,010061A00AE64000,status-playable,playable,2022-08-24 16:07:48,3 +529,My Time At Portia - 0100E25008E68000,0100E25008E68000,status-playable,playable,2021-05-28 12:42:55,3 +531,NBA 2K Playgrounds 2 - 01001AE00C1B2000,01001AE00C1B2000,status-playable;nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38,5 +532,Valfaris - 010089700F30C000,010089700F30C000,status-playable,playable,2022-09-16 21:37:24,5 +533,Wandersong - 0100F8A00853C000,0100F8A00853C000,nvdec;status-playable,playable,2021-06-04 15:33:34,6 +535,Untitled Goose Game,,status-playable,playable,2020-09-26 13:18:06,2 +536,Unbox: Newbie's Adventure - 0100592005164000,0100592005164000,status-playable;UE4,playable,2022-08-29 13:12:56,4 +537,Trine 4: The Nightmare Prince - 010055E00CA68000,010055E00CA68000,gpu;status-ingame;ldn-untested,ingame,2023-10-23 2:40:46,8 +538,Travis Strikes Again: No More Heroes - 010011600C946000,010011600C946000,status-playable;nvdec;UE4,playable,2022-08-25 12:36:38,6 +539,Bubble Bobble 4 Friends - 010010900F7B4000,010010900F7B4000,nvdec;status-playable,playable,2021-06-04 15:27:55,7 +540,Bloodstained: Curse of the Moon,,status-playable,playable,2020-09-04 10:42:17,2 +541,Unravel TWO - 0100E5D00CC0C000,0100E5D00CC0C000,status-playable;nvdec,playable,2024-05-23 15:45:05,14 +542,Blazing Beaks,,status-playable,playable,2020-06-04 20:37:06,5 +543,Moonlighter,,,,2020-04-01 12:52:32,1 +544,Rock N' Racing Grand Prix,,status-playable,playable,2021-01-06 20:23:57,2 +545,Blossom Tales - 0100C1000706C000,0100C1000706C000,status-playable,playable,2022-07-18 16:43:07,3 +546,Maria The Witch,,,,2020-04-01 13:22:05,1 +547,Runbow,,online;status-playable,playable,2021-01-08 22:47:44,5 +548,Salt And Sanctuary,,status-playable,playable,2020-10-22 11:52:19,3 +549,Bomb Chicken,,,,2020-04-01 13:52:21,1 +550,Typoman,,,,2020-04-01 14:01:55,1 +551,BOX Align,,crash;services;status-nothing,nothing,2020-04-03 17:26:56,3 +552,Bridge Constructor Portal,,,,2020-04-01 14:59:34,1 +553,METAGAL,,status-playable,playable,2020-06-05 0:05:48,3 +554,Severed,,status-playable,playable,2020-12-15 21:48:48,3 +555,Bombslinger - 010087300445A000,010087300445A000,services;status-menus,menus,2022-07-19 12:53:15,5 +556,ToeJam & Earl: Back in the Groove,,status-playable,playable,2021-01-06 22:56:58,2 +557,SHIFT QUANTUM,,UE4;crash;status-ingame,ingame,2020-11-06 21:54:08,2 +558,Mana Spark,,status-playable,playable,2020-12-10 13:41:01,3 +559,BOOST BEAST,,,,2020-04-01 22:07:28,1 +560,Bass Pro Shops: The Strike - Championship Edition - 0100E3100450E000,0100E3100450E000,gpu;status-boots;32-bit,boots,2022-12-09 15:58:16,6 +561,Semispheres,,status-playable,playable,2021-01-06 23:08:31,2 +562,Megaton Rainfall - 010005A00B312000,010005A00B312000,gpu;status-boots;opengl,boots,2022-08-04 18:29:43,5 +563,Romancing SaGa 2 - 01001F600829A000,01001F600829A000,status-playable,playable,2022-08-12 12:02:24,3 +564,Runner3,,,,2020-04-02 12:58:46,1 +565,Shakedown: Hawaii,,status-playable,playable,2021-01-07 9:44:36,2 +566,Minit,,,,2020-04-02 13:15:45,1 +567,Little Nightmares - 01002FC00412C000,01002FC00412C000,status-playable;nvdec;UE4,playable,2022-08-03 21:45:35,7 +568,Shephy,,,,2020-04-02 13:33:44,1 +569,Millie - 0100976008FBE000,0100976008FBE000,status-playable,playable,2021-01-26 20:47:19,3 +570,Bloodstained: Ritual of the Night - 010025A00DF2A000,010025A00DF2A000,status-playable;nvdec;UE4,playable,2022-07-18 14:27:35,4 +571,Shape Of The World - 0100B250009B96000,0100B250009B9600,UE4;status-playable,playable,2021-03-05 16:42:28,3 +572,Bendy and the Ink Machine - 010074500BBC4000,010074500BBC4000,status-playable,playable,2023-05-06 20:35:39,4 +573,Brothers: A Tale of Two Sons - 01000D500D08A000,01000D500D08A000,status-playable;nvdec;UE4,playable,2022-07-19 14:02:22,6 +574,Raging Loop,,,,2020-04-03 12:29:28,1 +575,A Hat In Time - 010056E00853A000,010056E00853A000,status-playable,playable,2024-06-25 19:52:44,4 +576,Cooking Mama: Cookstar - 010060700EFBA000,010060700EFBA000,status-menus;crash;loader-allocator,menus,2021-11-20 3:19:35,3 +578,Marble Power Blast - 01008E800D1FE000,01008E800D1FE000,status-playable,playable,2021-06-04 16:00:02,3 +579,NARUTO™: Ultimate Ninja® STORM - 0100715007354000,0100715007354000,status-playable;nvdec,playable,2022-08-06 14:10:31,3 +580,Oddmar,,,,2020-04-04 20:46:28,1 +581,BLEED 2,,,,2020-04-05 11:29:05,1 +582,Sea King - 0100E4A00D066000,0100E4A00D066000,UE4;nvdec;status-playable,playable,2021-06-04 15:49:22,2 +583,Sausage Sports Club,,gpu;status-ingame,ingame,2021-01-10 5:37:17,2 +584,Mini Metro,,,,2020-04-05 11:55:19,1 +585,Mega Mall Story - 0100BBC00CB9A000,0100BBC00CB9A000,slow;status-playable,playable,2022-08-04 17:10:58,3 +586,BILLIARD,,,,2020-04-05 13:41:11,1 +587,The Wardrobe,,,,2020-04-05 13:53:33,1 +588,LITTLE FRIENDS -DOGS & CATS-,,status-playable,playable,2020-11-12 12:45:51,3 +589,LOST SPHEAR,,status-playable,playable,2021-01-10 6:01:21,2 +590,Morphies Law,,UE4;crash;ldn-untested;nvdec;online;status-menus,menus,2020-11-22 17:05:29,4 +591,Mercenaries Saga Chronicles,,status-playable,playable,2021-01-10 12:48:19,2 +592,The Swindle - 010040D00B7CE000,010040D00B7CE000,status-playable;nvdec,playable,2022-08-22 20:53:52,2 +593,Monster Energy Supercross - The Official Videogame - 0100742007266000,0100742007266000,status-playable;nvdec;UE4,playable,2022-08-04 20:25:00,5 +594,Monster Energy Supercross - The Official Videogame 2 - 0100F8100B982000,0100F8100B982000,status-playable;nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24,5 +595,Lumo - 0100FF00042EE000,0100FF00042EE000,status-playable;nvdec,playable,2022-02-11 18:20:30,5 +596,Monopoly for Nintendo Switch - 01007430037F6000,01007430037F6000,status-playable;nvdec;online-broken,playable,2024-02-06 23:13:01,7 +597,Mantis Burn Racing - 0100E98002F6E000,0100E98002F6E000,status-playable;online-broken;ldn-broken,playable,2024-09-02 2:13:04,4 +598,Moorhuhn Remake,,,,2020-04-05 19:22:41,1 +599,Lovecraft's Untold Stories,,,,2020-04-05 19:31:15,1 +600,Moonfall Ultimate,,nvdec;status-playable,playable,2021-01-17 14:01:25,2 +602,Max: The Curse Of Brotherhood - 01001C9007614000,01001C9007614000,status-playable;nvdec,playable,2022-08-04 16:33:04,2 +603,Manticore - Galaxy on Fire - 0100C9A00952A000,0100C9A00952A000,status-boots;crash;nvdec,boots,2024-02-04 4:37:24,6 +604,The Shapeshifting Detective,,nvdec;status-playable,playable,2021-01-10 13:10:49,2 +605,Mom Hid My Game!,,,,2020-04-06 11:32:10,1 +606,Meow Motors,,UE4;gpu;status-ingame,ingame,2020-12-18 0:24:01,3 +607,Mahjong Solitaire Refresh - 01008C300B624000,01008C300B624000,status-boots;crash,boots,2022-12-09 12:02:55,5 +608,Lucah: Born of a Dream,,,,2020-04-06 12:11:01,1 +609,Moon Hunters,,,,2020-04-06 12:35:17,1 +610,Mad Carnage,,status-playable,playable,2021-01-10 13:00:07,2 +611,Monument Builders Rushmore,,,,2020-04-06 13:49:35,1 +612,Lost Sea,,,,2020-04-06 14:08:14,1 +613,Mahjong Deluxe 3,,,,2020-04-06 14:13:32,1 +614,MONSTER JAM CRUSH IT!™ - 010088400366E000,010088400366E000,UE4;nvdec;online;status-playable,playable,2021-04-08 19:29:27,5 +615,Midnight Deluxe,,,,2020-04-06 14:33:34,1 +616,Metropolis: Lux Obscura,,,,2020-04-06 14:47:15,1 +617,Lode Runner Legacy,,status-playable,playable,2021-01-10 14:10:28,2 +618,Masters of Anima - 0100CC7009196000,0100CC7009196000,status-playable;nvdec,playable,2022-08-04 16:00:09,4 +619,Monster Dynamite,,,,2020-04-06 17:55:14,1 +620,The Warlock of Firetop Mountain,,,,2020-04-06 21:44:13,1 +621,Mecho Tales - 0100C4F005EB4000,0100C4F005EB4000,status-playable,playable,2022-08-04 17:03:19,4 +622,Titan Quest - 0100605008268000,0100605008268000,status-playable;nvdec;online-broken,playable,2022-08-19 21:54:15,4 +623,This Is the Police - 0100066004D68000,0100066004D68000,status-playable,playable,2022-08-24 11:37:05,3 +625,Miles & Kilo,,status-playable,playable,2020-10-22 11:39:49,3 +626,This War of Mine: Complete Edition - 0100A8700BC2A000,0100A8700BC2A000,gpu;status-ingame;32-bit;nvdec,ingame,2022-08-24 12:00:44,5 +627,Transistor,,status-playable,playable,2020-10-22 11:28:02,3 +628,Momodora: Revere Under the Moonlight - 01004A400C320000,01004A400C320000,deadlock;status-nothing,nothing,2022-02-06 3:47:43,4 +629,Monster Puzzle,,status-playable,playable,2020-09-28 22:23:10,2 +630,Tiny Troopers Joint Ops XL,,,,2020-04-07 12:30:46,1 +631,This Is the Police 2 - 01004C100A04C000,01004C100A04C000,status-playable,playable,2022-08-24 11:49:17,3 +633,Trials Rising - 01003E800A102000,01003E800A102000,status-playable,playable,2024-02-11 1:36:39,11 +634,Mainlining,,status-playable,playable,2020-06-05 1:02:00,3 +635,Treadnauts,,status-playable,playable,2021-01-10 14:57:41,2 +636,Treasure Stack,,,,2020-04-07 13:27:32,1 +637,Monkey King: Master of the Clouds,,status-playable,playable,2020-09-28 22:35:48,2 +638,Trailblazers - 0100BCA00843A000,0100BCA00843A000,status-playable,playable,2021-03-02 20:40:49,2 +639,Stardew Valley - 0100E65002BB8000,0100E65002BB8000,status-playable;online-broken;ldn-untested,playable,2024-02-14 3:11:19,16 +640,TT Isle of Man,,nvdec;status-playable,playable,2020-06-22 12:25:13,3 +641,Truberbrook - 0100E6300D448000,0100E6300D448000,status-playable,playable,2021-06-04 17:08:00,3 +642,Troll and I - 0100F78002040000,0100F78002040000,gpu;nvdec;status-ingame,ingame,2021-06-04 16:58:50,3 +644,Rock 'N Racing Off Road DX,,status-playable,playable,2021-01-10 15:27:15,2 +645,Touhou Genso Wanderer RELOADED - 01004E900B082000,01004E900B082000,gpu;status-ingame;nvdec,ingame,2022-08-25 11:57:36,3 +646,Splasher,,,,2020-04-08 11:02:41,1 +647,Rogue Trooper Redux - 01001CC00416C000,01001CC00416C000,status-playable;nvdec;online-broken,playable,2022-08-12 11:53:01,4 +648,Semblance,,,,2020-04-08 11:22:11,1 +649,Saints Row: The Third - The Full Package - 0100DE600BEEE000,0100DE600BEEE000,slow;status-playable;LAN,playable,2023-08-24 2:40:58,4 +650,SEGA AGES PHANTASY STAR,,status-playable,playable,2021-01-11 12:49:48,2 +651,SEGA AGES SPACE HARRIER,,status-playable,playable,2021-01-11 12:57:40,2 +652,SEGA AGES OUTRUN,,status-playable,playable,2021-01-11 13:13:59,2 +653,Schlag den Star - 0100ACB004006000,0100ACB004006000,slow;status-playable;nvdec,playable,2022-08-12 14:28:22,4 +654,Serial Cleaner,,,,2020-04-08 15:26:22,1 +655,Rotating Brave,,,,2020-04-09 12:25:59,1 +656,SteamWorld Quest,,nvdec;status-playable,playable,2020-11-09 13:10:04,3 +657,Shaq Fu: A Legend Reborn,,,,2020-04-09 13:24:32,1 +658,Season Match Bundle - Part 1 and 2,,status-playable,playable,2021-01-11 13:28:23,2 +659,Bulb Boy,,,,2020-04-09 16:22:39,1 +660,SteamWorld Dig - 01009320084A4000,01009320084A4000,status-playable,playable,2024-08-19 12:12:23,3 +661,Shadows of Adam,,status-playable,playable,2021-01-11 13:35:58,2 +662,Battle Princess Madelyn,,status-playable,playable,2021-01-11 13:47:23,2 +663,Shiftlings - 01000750084B2000,01000750084B2000,nvdec;status-playable,playable,2021-03-04 13:49:54,2 +664,Save the Ninja Clan,,status-playable,playable,2021-01-11 13:56:37,2 +665,SteamWorld Heist: Ultimate Edition,,,,2020-04-10 11:21:15,1 +666,Battle Chef Brigade,,status-playable,playable,2021-01-11 14:16:28,2 +667,Shelter Generations - 01009EB004CB0000,01009EB004CB0000,status-playable,playable,2021-06-04 16:52:39,3 +668,Bow to Blood: Last Captain Standing,,slow;status-playable,playable,2020-10-23 10:51:21,3 +669,Samsara,,status-playable,playable,2021-01-11 15:14:12,2 +670,Touhou Kobuto V: Burst Battle,,status-playable,playable,2021-01-11 15:28:58,2 +671,Screencheat,,,,2020-04-10 13:16:02,1 +672,BlobCat - 0100F3500A20C000,0100F3500A20C000,status-playable,playable,2021-04-23 17:09:30,3 +673,SteamWorld Dig 2 - 0100CA9002322000,0100CA9002322000,status-playable,playable,2022-12-21 19:25:42,4 +674,She Remembered Caterpillars - 01004F50085F2000,01004F50085F2000,status-playable,playable,2022-08-12 17:45:14,3 +675,Broken Sword 5 - the Serpent's Curse - 01001E60085E6000,01001E60085E6000,status-playable,playable,2021-06-04 17:28:59,3 +676,Banner Saga 3,,slow;status-boots,boots,2021-01-11 16:53:57,2 +677,Stranger Things 3: The Game,,status-playable,playable,2021-01-11 17:44:09,2 +678,Blades of Time - 0100CFA00CC74000,0100CFA00CC74000,deadlock;status-boots;online,boots,2022-07-17 19:19:58,8 +679,BLAZBLUE CENTRALFICTION Special Edition,,nvdec;status-playable,playable,2020-12-15 23:50:04,3 +680,Brawlout - 010060200A4BE000,010060200A4BE000,ldn-untested;online;status-playable,playable,2021-06-04 17:35:35,4 +681,Bouncy Bob,,,,2020-04-10 16:45:27,1 +682,Broken Age - 0100EDD0068A6000,0100EDD0068A6000,status-playable,playable,2021-06-04 17:40:32,3 +683,Attack on Titan 2,,status-playable,playable,2021-01-04 11:40:01,3 +684,Battle Worlds: Kronos - 0100DEB00D5A8000,0100DEB00D5A8000,nvdec;status-playable,playable,2021-06-04 17:48:02,3 +685,BLADE ARCUS Rebellion From Shining - 0100C4400CB7C000,0100C4400CB7C000,status-playable,playable,2022-07-17 18:52:28,4 +686,Away: Journey to the Unexpected - 01002F1005F3C000,01002F1005F3C000,status-playable;nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04,5 +687,Batman: The Enemy Within,,crash;status-nothing,nothing,2020-10-16 5:49:27,2 +688,Batman - The Telltale Series,,nvdec;slow;status-playable,playable,2021-01-11 18:19:35,2 +689,Big Crown: Showdown - 010088100C35E000,010088100C35E000,status-menus;nvdec;online;ldn-untested,menus,2022-07-17 18:25:32,4 +690,Strike Suit Zero: Director's Cut - 010072500D52E000,010072500D52E000,crash;status-boots,boots,2021-04-23 17:15:14,3 +691,Black Paradox,,,,2020-04-11 12:13:22,1 +692,Spelunker Party! - 010021F004270000,010021F004270000,services;status-boots,boots,2022-08-16 11:25:49,4 +693,OK K.O.! Let's Play Heroes,,nvdec;status-playable,playable,2021-01-11 18:41:02,2 +694,Steredenn,,status-playable,playable,2021-01-13 9:19:42,2 +695,State of Mind,,UE4;crash;status-boots,boots,2020-06-22 22:17:50,2 +696,Bloody Zombies,,,,2020-04-11 18:23:57,1 +697,MudRunner - American Wilds - 01009D200952E000,01009D200952E000,gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52,6 +698,Big Buck Hunter Arcade,,nvdec;status-playable,playable,2021-01-12 20:31:39,2 +699,Sparkle 2 Evo,,,,2020-04-11 18:48:19,1 +700,Brave Dungeon + Dark Witch's Story: COMBAT,,status-playable,playable,2021-01-12 21:06:34,2 +701,BAFL,,status-playable,playable,2021-01-13 8:32:51,2 +702,Steamburg,,status-playable,playable,2021-01-13 8:42:01,2 +703,Splatoon 2 - 01003BC0000A0000,01003BC0000A0000,status-playable;ldn-works;LAN,playable,2024-07-12 19:11:15,25 +704,Blade Strangers - 01005950022EC000,01005950022EC000,status-playable;nvdec,playable,2022-07-17 19:02:43,5 +705,Sports Party - 0100DE9005170000,0100DE9005170000,nvdec;status-playable,playable,2021-03-05 13:40:42,4 +706,Banner Saga,,,,2020-04-12 14:06:23,1 +707,Banner Saga 2,,crash;status-boots,boots,2021-01-13 8:56:09,2 +708,Hand of Fate 2 - 01003620068EA000,01003620068EA000,status-playable,playable,2022-08-01 15:44:16,3 +709,State of Anarchy: Master of Mayhem,,nvdec;status-playable,playable,2021-01-12 19:00:05,2 +710,Sphinx and the Cursed Mummy™ - 0100BD500BA94000,0100BD500BA94000,gpu;status-ingame;32-bit;opengl,ingame,2024-05-20 6:00:51,15 +711,Risk - 0100E8300A67A000,0100E8300A67A000,status-playable;nvdec;online-broken,playable,2022-08-01 18:53:28,5 +712,Baseball Riot - 01004860080A0000,01004860080A0000,status-playable,playable,2021-06-04 18:07:27,4 +713,Spartan - 0100E6A009A26000,0100E6A009A26000,UE4;nvdec;status-playable,playable,2021-03-05 15:53:19,3 +714,Halloween Pinball,,status-playable,playable,2021-01-12 16:00:46,2 +715,Streets of Red : Devil's Dare Deluxe,,,,2020-04-12 18:08:29,1 +716,Spider Solitaire F,,,,2020-04-12 20:26:44,1 +717,Starship Avenger Operation: Take Back Earth,,status-playable,playable,2021-01-12 15:52:55,2 +718,Battle Chasers: Nightwar,,nvdec;slow;status-playable,playable,2021-01-12 12:27:34,2 +719,Infinite Minigolf,,online;status-playable,playable,2020-09-29 12:26:25,2 +720,Blood Waves - 01007E700D17E000,01007E700D17E000,gpu;status-ingame,ingame,2022-07-18 13:04:46,4 +722,Stick It to the Man,,,,2020-04-13 12:29:25,1 +723,Bad Dream: Fever - 0100B3B00D81C000,0100B3B00D81C000,status-playable,playable,2021-06-04 18:33:12,6 +724,Spectrum - 01008B000A5AE000,01008B000A5AE000,status-playable,playable,2022-08-16 11:15:59,3 +725,Battlezone Gold Edition - 01006D800A988000,01006D800A988000,gpu;ldn-untested;online;status-boots,boots,2021-06-04 18:36:05,3 +726,Squareboy vs Bullies: Arena Edition,,,,2020-04-13 12:51:57,1 +727,Beach Buggy Racing - 010095C00406C000,010095C00406C000,online;status-playable,playable,2021-04-13 23:16:50,2 +728,Avenger Bird,,,,2020-04-13 13:01:51,1 +729,Beholder,,status-playable,playable,2020-10-16 12:48:58,3 +730,Binaries,,,,2020-04-13 13:12:42,1 +731,Space Ribbon - 010010A009830000,010010A009830000,status-playable,playable,2022-08-15 17:17:10,3 +732,BINGO for Nintendo Switch,,status-playable,playable,2020-07-23 16:17:36,2 +733,Bibi Blocksberg - Big Broom Race 3,,status-playable,playable,2021-01-11 19:07:16,2 +734,Sparkle 3: Genesis,,,,2020-04-13 14:01:48,1 +735,"Bury me, my Love",,status-playable,playable,2020-11-07 12:47:37,3 +736,Bad North - 0100E98006F22000,0100E98006F22000,status-playable,playable,2022-07-17 13:44:25,4 +737,Stikbold! A Dodgeball Adventure DELUXE,,status-playable,playable,2021-01-11 20:12:54,2 +738,BUTCHER,,status-playable,playable,2021-01-11 18:50:17,2 +739,Bird Game + - 01001B700B278000,01001B700B278000,status-playable;online,playable,2022-07-17 18:41:57,3 +740,SpiritSphere DX - 01009D60080B4000,01009D60080B4000,status-playable,playable,2021-07-03 23:37:49,3 +741,Behind The Screen,,,,2020-04-13 15:41:34,1 +742,Bibi & Tina - Adventures with Horses,,nvdec;slow;status-playable,playable,2021-01-13 8:58:09,2 +743,Space Dave,,,,2020-04-13 15:57:37,1 +744,Hellblade: Senua's Sacrifice - 010044500CF8E000,010044500CF8E000,gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50,5 +745,Happy Birthdays,,,,2020-04-13 23:34:41,1 +746,GUILTY GEAR XX ACCENT CORE PLUS R,,nvdec;status-playable,playable,2021-01-13 9:28:33,2 +747,Hob: The Definitive Edition,,status-playable,playable,2021-01-13 9:39:19,2 +748,Jurassic Pinball - 0100CE100A826000,0100CE100A826000,status-playable,playable,2021-06-04 19:02:37,3 +749,Hyper Light Drifter - Special Edition - 01003B200B372000,01003B200B372000,status-playable;vulkan-backend-bug,playable,2023-01-13 15:44:48,13 +750,GUNBIRD for Nintendo Switch - 01003C6008940000,01003C6008940000,32-bit;status-playable,playable,2021-06-04 19:16:01,4 +751,GUNBIRD2 for Nintendo Switch,,status-playable,playable,2020-10-10 14:41:16,3 +752,Hammerwatch - 01003B9007E86000,01003B9007E86000,status-playable;online-broken;ldn-broken,playable,2022-08-01 16:28:46,2 +753,Into The Breach,,,,2020-04-14 14:05:04,1 +754,Horizon Chase Turbo - 01009EA00B714000,01009EA00B714000,status-playable,playable,2021-02-19 19:40:56,4 +755,Gunlord X,,,,2020-04-14 14:30:34,1 +756,Ittle Dew 2+,,status-playable,playable,2020-11-17 11:44:32,2 +757,Hue,,,,2020-04-14 14:52:35,1 +758,Iconoclasts - 0100BC60099FE000,0100BC60099FE000,status-playable,playable,2021-08-30 21:11:04,5 +759,James Pond Operation Robocod,,status-playable,playable,2021-01-13 9:48:45,2 +760,Hello Neighbor - 0100FAA00B168000,0100FAA00B168000,status-playable;UE4,playable,2022-08-01 21:32:23,5 +761,Gunman Clive HD Collection,,status-playable,playable,2020-10-09 12:17:35,3 +762,Human Resource Machine,,32-bit;status-playable,playable,2020-12-17 21:47:09,2 +763,INSIDE - 0100D2D009028000,0100D2D009028000,status-playable,playable,2021-12-25 20:24:56,3 +765,Hello Neighbor: Hide And Seek,,UE4;gpu;slow;status-ingame,ingame,2020-10-24 10:59:57,3 +766,Has-Been Heroes,,status-playable,playable,2021-01-13 13:31:48,2 +767,GUNBARICH for Nintendo Switch,,,,2020-04-14 21:58:40,1 +768,Hell is Other Demons,,status-playable,playable,2021-01-13 13:23:02,2 +769,"I, Zombie",,status-playable,playable,2021-01-13 14:53:44,2 +770,Hello Kitty Kruisers With Sanrio Friends - 010087D0084A8000,010087D0084A8000,nvdec;status-playable,playable,2021-06-04 19:08:46,3 +771,IMPLOSION - 0100737003190000,0100737003190000,status-playable;nvdec,playable,2021-12-12 3:52:13,4 +772,Ikaruga - 01009F20086A0000,01009F20086A0000,status-playable,playable,2023-04-06 15:00:02,4 +773,Ironcast,,status-playable,playable,2021-01-13 13:54:29,2 +774,Jettomero: Hero of the Universe - 0100A5A00AF26000,0100A5A00AF26000,status-playable,playable,2022-08-02 14:46:43,2 +775,Harvest Moon: Light of Hope Special Edition,,,,2020-04-15 13:00:41,1 +776,Heroine Anthem Zero episode 1 - 01001B70080F0000,01001B70080F0000,status-playable;vulkan-backend-bug,playable,2022-08-01 22:02:36,4 +777,Hunting Simulator - 0100C460040EA000,0100C460040EA000,status-playable;UE4,playable,2022-08-02 10:54:08,5 +778,Guts and Glory,,,,2020-04-15 14:06:57,1 +779,Island Flight Simulator - 010077900440A000,010077900440A000,status-playable,playable,2021-06-04 19:42:46,2 +780,Hollow - 0100F2100061E8000,0100F2100061E800,UE4;gpu;status-ingame,ingame,2021-03-03 23:42:56,2 +781,Heroes of the Monkey Tavern,,,,2020-04-15 15:24:33,1 +783,Jotun: Valhalla Edition,,,,2020-04-15 15:46:21,1 +784,OniNaki - 0100CF4011B2A000,0100CF4011B2A000,nvdec;status-playable,playable,2021-02-27 21:52:42,1 +785,Diary of consultation with me (female doctor),,,,2020-04-15 16:13:40,1 +786,JunkPlanet,,status-playable,playable,2020-11-09 12:38:33,3 +787,Hexologic,,,,2020-04-15 16:46:07,1 +788,JYDGE - 010035A0044E8000,010035A0044E8000,status-playable,playable,2022-08-02 21:20:13,4 +789,Mushroom Quest,,status-playable,playable,2020-05-17 13:07:08,4 +790,Infernium,,UE4;regression;status-nothing,nothing,2021-01-13 16:36:07,2 +791,Star-Crossed Myth - The Department of Wishes - 01005EB00EA10000,01005EB00EA10000,gpu;status-ingame,ingame,2021-06-04 19:34:36,3 +792,Joe Dever's Lone Wolf,,,,2020-04-15 18:27:04,1 +793,Final Fantasy VII - 0100A5B00BDC6000,0100A5B00BDC6000,status-playable,playable,2022-12-09 17:03:30,5 +794,Irony Curtain: From Matryoshka with Love - 0100E5700CD56000,0100E5700CD56000,status-playable,playable,2021-06-04 20:12:37,3 +795,Guns Gore and Cannoli,,,,2020-04-16 12:37:22,1 +796,ICEY,,status-playable,playable,2021-01-14 16:16:04,3 +797,Jumping Joe & Friends,,status-playable,playable,2021-01-13 17:09:42,2 +798,Johnny Turbo's Arcade Wizard Fire - 0100D230069CC000,0100D230069CC000,status-playable,playable,2022-08-02 20:39:15,2 +799,Johnny Turbo's Arcade Two Crude Dudes - 010080D002CC6000,010080D002CC6000,status-playable,playable,2022-08-02 20:29:50,3 +800,Johnny Turbo's Arcade Sly Spy,,,,2020-04-16 13:56:32,1 +801,Johnny Turbo's Arcade Caveman Ninja,,,,2020-04-16 14:11:07,1 +802,Heroki - 010057300B0DC000,010057300B0DC000,gpu;status-ingame,ingame,2023-07-30 19:30:01,6 +803,Immortal Redneck - 0100F400435A000,,nvdec;status-playable,playable,2021-01-27 18:36:28,2 +804,Hungry Shark World,,status-playable,playable,2021-01-13 18:26:08,2 +805,Homo Machina,,,,2020-04-16 15:10:24,1 +806,InnerSpace,,,,2020-04-16 16:38:45,1 +807,INK,,,,2020-04-16 16:48:26,1 +808,Human: Fall Flat,,status-playable,playable,2021-01-13 18:36:05,2 +809,Hotel Transylvania 3: Monsters Overboard - 0100017007980000,0100017007980000,nvdec;status-playable,playable,2021-01-27 18:55:31,2 +810,It's Spring Again,,,,2020-04-16 19:08:21,1 +811,FINAL FANTASY IX - 01006F000B056000,01006F000B056000,audout;nvdec;status-playable,playable,2021-06-05 11:35:00,6 +812,Harvest Life - 0100D0500AD30000,0100D0500AD30000,status-playable,playable,2022-08-01 16:51:45,2 +813,INVERSUS Deluxe - 01001D0003B96000,01001D0003B96000,status-playable;online-broken,playable,2022-08-02 14:35:36,3 +814,HoPiKo,,status-playable,playable,2021-01-13 20:12:38,2 +815,I Hate Running Backwards,,,,2020-04-16 20:53:45,1 +816,Hexagravity - 01007AC00E012000,01007AC00E012000,status-playable,playable,2021-05-28 13:47:48,3 +817,Holy Potatoes! A Weapon Shop?!,,,,2020-04-16 22:25:50,1 +818,In Between,,,,2020-04-17 11:08:14,1 +819,Hunter's Legacy: Purrfect Edition - 010068000CAC0000,010068000CAC0000,status-playable,playable,2022-08-02 10:33:31,3 +820,Job the Leprechaun,,status-playable,playable,2020-06-05 12:10:06,3 +821,Henry the Hamster Handler,,,,2020-04-17 11:30:02,1 +822,FINAL FANTASY XII THE ZODIAC AGE - 0100EB100AB42000,0100EB100AB42000,status-playable;opengl;vulkan-backend-bug,playable,2024-08-11 7:01:54,10 +823,Hiragana Pixel Party,,status-playable,playable,2021-01-14 8:36:50,2 +824,Heart and Slash,,status-playable,playable,2021-01-13 20:56:32,2 +825,InkSplosion,,,,2020-04-17 12:11:41,1 +826,I and Me,,,,2020-04-17 12:18:43,1 +827,Earthlock - 01006E50042EA000,01006E50042EA000,status-playable,playable,2021-06-05 11:51:02,3 +828,Figment - 0100118009C68000,0100118009C68000,nvdec;status-playable,playable,2021-01-27 19:36:05,2 +829,Dusty Raging Fist,,,,2020-04-18 14:02:20,1 +830,Eternum Ex,,status-playable,playable,2021-01-13 20:28:32,2 +831,Dragon's Lair Trilogy,,nvdec;status-playable,playable,2021-01-13 22:12:07,2 +832,FIFA 18 - 0100F7B002340000,0100F7B002340000,gpu;status-ingame;online-broken;ldn-untested,ingame,2022-07-26 12:43:59,4 +833,Dream Alone - 0100AA0093DC000,,nvdec;status-playable,playable,2021-01-27 19:41:50,2 +834,Fight of Gods,,,,2020-04-18 17:22:19,1 +835,Fallout Shelter,,,,2020-04-18 19:48:28,1 +836,Drift Legends,,,,2020-04-18 20:15:36,1 +837,Feudal Alloy,,status-playable,playable,2021-01-14 8:48:14,2 +838,EVERSPACE - 0100DCF0093EC000,0100DCF0093EC000,status-playable;UE4,playable,2022-08-14 1:16:24,14 +839,Epic Loon - 0100262009626000,0100262009626000,status-playable;nvdec,playable,2022-07-25 22:06:13,3 +840,EARTH WARS - 01009B7006C88000,01009B7006C88000,status-playable,playable,2021-06-05 11:18:33,3 +841,Finding Teddy 2 : Definitive Edition - 0100FF100FB68000,0100FF100FB68000,gpu;status-ingame,ingame,2024-04-19 16:51:33,5 +842,Rocket League - 01005EE0036EC000,01005EE0036EC000,gpu;status-ingame;online-broken;ldn-untested,ingame,2024-02-08 19:51:36,5 +845,Fimbul - 0100C3A00BB76000,0100C3A00BB76000,status-playable;nvdec,playable,2022-07-26 13:31:47,2 +846,Fairune Collection - 01008A6009758000,01008A6009758000,status-playable,playable,2021-06-06 15:29:56,3 +847,Enigmatis 2: The Mists of Ravenwood - 0100C6200A0AA000,0100C6200A0AA000,crash;regression;status-boots,boots,2021-06-06 15:15:30,3 +848,Energy Balance,,,,2020-04-22 11:13:18,1 +849,DragonFangZ,,status-playable,playable,2020-09-28 21:35:18,2 +850,Dragon's Dogma: Dark Arisen - 010032C00AC58000,010032C00AC58000,status-playable,playable,2022-07-24 12:58:33,5 +851,Everything,,,,2020-04-22 11:35:04,1 +852,Dust: An Elysian Tail - 0100B6E00A420000,0100B6E00A420000,status-playable,playable,2022-07-25 15:28:12,4 +853,EXTREME POKER,,,,2020-04-22 11:54:54,1 +854,Dyna Bomb,,status-playable,playable,2020-06-07 13:26:55,3 +855,Escape Doodland,,,,2020-04-22 12:10:08,1 +856,Drone Fight - 010058C00A916000,010058C00A916000,status-playable,playable,2022-07-24 14:31:56,4 +857,Resident Evil,,,,2020-04-22 12:31:10,1 +858,Dungeon Rushers,,,,2020-04-22 12:43:24,1 +859,Embers of Mirrim,,,,2020-04-22 12:56:52,1 +860,FIFA 19 - 0100FFA0093E8000,0100FFA0093E8000,gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07,4 +861,Energy Cycle,,,,2020-04-22 13:40:48,1 +862,Dragons Dawn of New Riders,,nvdec;status-playable,playable,2021-01-27 20:05:26,2 +863,Enter the Gungeon - 01009D60076F6000,01009D60076F6000,status-playable,playable,2022-07-25 20:28:33,3 +864,Drowning - 010052000A574000,010052000A574000,status-playable,playable,2022-07-25 14:28:26,3 +865,Earth Atlantis,,,,2020-04-22 14:42:46,1 +866,Evil Defenders,,nvdec;status-playable,playable,2020-09-28 17:11:00,2 +867,Dustoff Heli Rescue 2,,,,2020-04-22 15:31:34,1 +868,Energy Cycle Edge - 0100B8700BD14000,0100B8700BD14000,services;status-ingame,ingame,2021-11-30 5:02:31,3 +869,Element - 0100A6700AF10000,0100A6700AF10000,status-playable,playable,2022-07-25 17:17:16,3 +870,Duck Game,,,,2020-04-22 17:10:36,1 +871,Fill-a-Pix: Phil's Epic Adventure,,status-playable,playable,2020-12-22 13:48:22,3 +872,Elliot Quest - 0100128003A24000,0100128003A24000,status-playable,playable,2022-07-25 17:46:14,3 +873,Drawful 2 - 0100F7800A434000,0100F7800A434000,status-ingame,ingame,2022-07-24 13:50:21,5 +874,Energy Invasion,,status-playable,playable,2021-01-14 21:32:26,2 +875,Dungeon Stars,,status-playable,playable,2021-01-18 14:28:37,2 +876,FINAL FANTASY X/X-2 HD REMASTER - 0100BC300CB48000,0100BC300CB48000,gpu;status-ingame,ingame,2022-08-16 20:29:26,8 +878,Revenant Saga,,,,2020-04-22 23:52:09,1 +880,Resident Evil 0,,,,2020-04-23 1:04:42,1 +882,Fate/EXTELLA - 010053E002EA2000,010053E002EA2000,gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55,7 +883,RiME,,UE4;crash;gpu;status-boots,boots,2020-07-20 15:52:38,2 +884,DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition - 0100E9A00CB30000,0100E9A00CB30000,status-playable;nvdec,playable,2024-06-26 0:16:30,4 +886,Rival Megagun,,nvdec;online;status-playable,playable,2021-01-19 14:01:46,2 +887,Riddled Corpses EX - 01002C700C326000,01002C700C326000,status-playable,playable,2021-06-06 16:02:44,6 +888,Fear Effect Sedna,,nvdec;status-playable,playable,2021-01-19 13:10:33,1 +889,Redout: Lightspeed Edition,,,,2020-04-23 14:46:59,1 +890,RESIDENT EVIL REVELATIONS 2 - 010095300212A000,010095300212A000,status-playable;online-broken;ldn-untested,playable,2022-08-11 12:57:50,3 +891,Robonauts - 0100618004096000,0100618004096000,status-playable;nvdec,playable,2022-08-12 11:33:23,3 +892,Road to Ballhalla - 010002F009A7A000,010002F009A7A000,UE4;status-playable,playable,2021-06-07 2:22:36,3 +893,Fate/EXTELLA LINK - 010051400B17A000,010051400B17A000,ldn-untested;nvdec;status-playable,playable,2021-01-27 0:45:50,6 +894,Rocket Fist,,,,2020-04-23 16:56:33,1 +895,RICO - 01009D5009234000,01009D5009234000,status-playable;nvdec;online-broken,playable,2022-08-11 20:16:40,4 +896,R.B.I. Baseball 17 - 0100B5A004302000,0100B5A004302000,status-playable;online-working,playable,2022-08-11 11:55:47,2 +897,Red Faction Guerrilla Re-Mars-tered - 010075000C608000,010075000C608000,ldn-untested;nvdec;online;status-playable,playable,2021-06-07 3:02:13,3 +900,Riptide GP: Renegade - 01002A6006AA4000,01002A6006AA4000,online;status-playable,playable,2021-04-13 23:33:02,4 +901,Realpolitiks,,,,2020-04-24 12:33:00,1 +902,Fall Of Light - Darkest Edition - 01005A600BE60000,01005A600BE60000,slow;status-ingame;nvdec,ingame,2024-07-24 4:19:26,5 +903,Reverie: Sweet As Edition,,,,2020-04-24 13:24:37,1 +904,RIVE: Ultimate Edition,,status-playable,playable,2021-03-24 18:45:55,3 +905,R.B.I. Baseball 18 - 01005CC007616000,01005CC007616000,status-playable;nvdec;online-working,playable,2022-08-11 11:27:52,3 +906,Refunct,,UE4;status-playable,playable,2020-12-15 22:46:21,2 +907,Rento Fortune Monolit,,ldn-untested;online;status-playable,playable,2021-01-19 19:52:21,2 +908,Super Mario Party - 010036B0034E4000,010036B0034E4000,gpu;status-ingame;Needs Update;ldn-works,ingame,2024-06-21 5:10:16,25 +909,Farm Together,,status-playable,playable,2021-01-19 20:01:19,2 +910,Regalia: Of Men and Monarchs - Royal Edition - 0100FDF0083A6000,0100FDF0083A6000,status-playable,playable,2022-08-11 12:24:01,3 +911,Red Game Without a Great Name,,status-playable,playable,2021-01-19 21:42:35,2 +912,R.B.I. Baseball 19 - 0100FCB00BF40000,0100FCB00BF40000,status-playable;nvdec;online-working,playable,2022-08-11 11:43:52,3 +913,Eagle Island - 010037400C7DA000,010037400C7DA000,status-playable,playable,2021-04-10 13:15:42,3 +915,RIOT: Civil Unrest - 010088E00B816000,010088E00B816000,status-playable,playable,2022-08-11 20:27:56,3 +917,Revenant Dogma,,,,2020-04-25 17:51:48,1 +919,World of Final Fantasy Maxima,,status-playable,playable,2020-06-07 13:57:23,2 +920,ITTA - 010068700C70A000,010068700C70A000,status-playable,playable,2021-06-07 3:15:52,6 +921,Pirates: All Aboard!,,,,2020-04-27 12:18:29,1 +922,Wolfenstein II The New Colossus - 01009040091E0000,01009040091E0000,gpu;status-ingame,ingame,2024-04-05 5:39:46,9 +923,Onimusha: Warlords,,nvdec;status-playable,playable,2020-07-31 13:08:39,2 +924,Radiation Island - 01009E40095EE000,01009E40095EE000,status-ingame;opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04,3 +925,Pool Panic,,,,2020-04-27 13:49:19,1 +926,Quad Fighter K,,,,2020-04-27 14:00:50,1 +927,PSYVARIAR DELTA - 0100EC100A790000,0100EC100A790000,nvdec;status-playable,playable,2021-01-20 13:01:46,2 +928,Puzzle Box Maker - 0100476004A9E000,0100476004A9E000,status-playable;nvdec;online-broken,playable,2022-08-10 18:00:52,5 +929,Psikyo Collection Vol. 3 - 0100A2300DB78000,0100A2300DB78000,status-ingame,ingame,2021-06-07 2:46:23,2 +930,Pianista: The Legendary Virtuoso - 010077300A86C000,010077300A86C000,status-playable;online-broken,playable,2022-08-09 14:52:56,3 +931,Quarantine Circular - 0100F1400BA88000,0100F1400BA88000,status-playable,playable,2021-01-20 15:24:15,2 +932,Pizza Titan Ultra - 01004A900C352000,01004A900C352000,nvdec;status-playable,playable,2021-01-20 15:58:42,2 +933,Phantom Trigger - 0100C31005A50000,0100C31005A50000,status-playable,playable,2022-08-09 14:27:30,2 +934,Operación Triunfo 2017 - 0100D5400BD90000,0100D5400BD90000,services;status-ingame;nvdec,ingame,2022-08-08 15:06:42,3 +935,Rad Rodgers Radical Edition - 010000600CD54000,010000600CD54000,status-playable;nvdec;online-broken,playable,2022-08-10 19:57:23,3 +936,Ape Out - 01005B100C268000,01005B100C268000,status-playable,playable,2022-09-26 19:04:47,3 +937,Decay of Logos - 010027700FD2E000,010027700FD2E000,status-playable;nvdec,playable,2022-09-13 14:42:13,3 +938,Q.U.B.E. 2 - 010023600AA34000,010023600AA34000,UE4;status-playable,playable,2021-03-03 21:38:57,2 +939,Pikuniku,,,,2020-04-28 11:02:59,1 +940,Picross S,,,,2020-04-28 11:14:18,1 +941,PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE - 0100063005C86000,0100063005C86000,audio;status-playable;nvdec,playable,2024-02-29 14:20:35,6 +942,Pilot Sports - 01007A500B0B2000,01007A500B0B2000,status-playable,playable,2021-01-20 15:04:17,2 +943,Paper Wars,,,,2020-04-28 11:46:56,1 +944,Fushigi no Gensokyo Lotus Labyrinth,,Needs Update;audio;gpu;nvdec;status-ingame,ingame,2021-01-20 15:30:02,2 +945,OPUS: The Day We Found Earth - 010049C0075F0000,010049C0075F0000,nvdec;status-playable,playable,2021-01-21 18:29:31,2 +946,Psikyo Collection Vol.2 - 01009D400C4A8000,01009D400C4A8000,32-bit;status-playable,playable,2021-06-07 3:22:07,3 +947,PixARK,,,,2020-04-28 12:32:16,1 +948,Puyo Puyo Tetris,,,,2020-04-28 12:46:37,1 +949,Puzzle Puppers,,,,2020-04-28 12:54:05,1 +950,OVERWHELM - 01005F000CC18000,01005F000CC18000,status-playable,playable,2021-01-21 18:37:18,2 +951,Rapala Fishing: Pro Series,,nvdec;status-playable,playable,2020-12-16 13:26:53,2 +952,Power Rangers: Battle for the Grid,,status-playable,playable,2020-06-21 16:52:42,4 +953,Professional Farmer: Nintendo Switch Edition,,slow;status-playable,playable,2020-12-16 13:38:19,2 +954,Project Nimbus: Complete Edition - 0100ACE00DAB6000,0100ACE00DAB6000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43,6 +955,Perfect Angle - 010089F00A3B4000,010089F00A3B4000,status-playable,playable,2021-01-21 18:48:45,2 +956,Oniken: Unstoppable Edition - 010037900C814000,010037900C814000,status-playable,playable,2022-08-08 14:52:06,3 +957,Pixeljunk Monsters 2 - 0100E4D00A690000,0100E4D00A690000,status-playable,playable,2021-06-07 3:40:01,3 +958,Pocket Rumble,,,,2020-04-28 19:13:20,1 +959,Putty Pals,,,,2020-04-28 19:35:49,1 +960,Overcooked! Special Edition - 01009B900401E000,01009B900401E000,status-playable,playable,2022-08-08 20:48:52,3 +961,Panda Hero,,,,2020-04-28 20:33:24,1 +962,Piczle Lines DX,,UE4;crash;nvdec;status-menus,menus,2020-11-16 4:21:31,9 +963,Packet Queen #,,,,2020-04-28 21:43:26,1 +964,Punch Club,,,,2020-04-28 22:28:01,1 +965,Oxenfree,,,,2020-04-28 23:56:28,1 +966,Rayman Legends: Definitive Edition - 01005FF002E2A000,01005FF002E2A000,status-playable;nvdec;ldn-works,playable,2023-05-27 18:33:07,3 +968,Poi: Explorer Edition - 010086F0064CE000,010086F0064CE000,nvdec;status-playable,playable,2021-01-21 19:32:00,2 +969,Paladins - 011123900AEE0000,011123900AEE0000,online;status-menus,menus,2021-01-21 19:21:37,2 +970,Q-YO Blaster,,gpu;status-ingame,ingame,2020-06-07 22:36:53,3 +971,Please Don't Touch Anything,,,,2020-04-29 12:15:59,1 +972,Puzzle Adventure Blockle,,,,2020-04-29 13:05:19,1 +973,Plantera - 010087000428E000,010087000428E000,status-playable,playable,2022-08-09 15:36:28,4 +974,One Strike,,,,2020-04-29 13:43:11,1 +975,Party Arcade - 01007FC00A040000,01007FC00A040000,status-playable;online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53,4 +976,PAYDAY 2 - 0100274004052000,0100274004052000,status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39,3 +977,Quest of Dungeons - 01001DE005012000,01001DE005012000,status-playable,playable,2021-06-07 10:29:22,3 +978,Plague Road - 0100FF8005EB2000,0100FF8005EB2000,status-playable,playable,2022-08-09 15:27:14,5 +979,Picture Painting Puzzle 1000!,,,,2020-04-29 14:58:39,1 +980,Ni No Kuni Wrath of the White Witch - 0100E5600D446000,0100E5600D446000,status-boots;32-bit;nvdec,boots,2024-07-12 4:52:59,29 +981,Overcooked! 2 - 01006FD0080B2000,01006FD0080B2000,status-playable;ldn-untested,playable,2022-08-08 16:48:10,2 +982,Qbik,,,,2020-04-29 15:50:22,1 +983,Rain World - 010047600BF72000,010047600BF72000,status-playable,playable,2023-05-10 23:34:08,4 +984,Othello,,,,2020-04-29 17:06:10,1 +985,Pankapu,,,,2020-04-29 17:24:48,1 +986,Pode - 01009440095FE000,01009440095FE000,nvdec;status-playable,playable,2021-01-25 12:58:35,2 +987,PLANET RIX-13,,,,2020-04-29 22:00:16,1 +988,Picross S2,,status-playable,playable,2020-10-15 12:01:40,2 +989,Picross S3,,status-playable,playable,2020-10-15 11:55:27,3 +990,"POISOFT'S ""Thud""",,,,2020-04-29 22:26:06,1 +991,Paranautical Activity - 010063400B2EC000,010063400B2EC000,status-playable,playable,2021-01-25 13:49:19,2 +992,oOo: Ascension - 010074000BE8E000,010074000BE8E000,status-playable,playable,2021-01-25 14:13:34,2 +993,Pic-a-Pix Pieces,,,,2020-04-30 12:07:19,1 +994,Perception,,UE4;crash;nvdec;status-menus,menus,2020-12-18 11:49:23,3 +995,Pirate Pop Plus,,,,2020-04-30 12:19:57,1 +996,Outlast 2 - 0100DE70085E8000,0100DE70085E8000,status-ingame;crash;nvdec,ingame,2022-01-22 22:28:05,8 +997,Project Highrise: Architect's Edition - 0100BBD00976C000,0100BBD00976C000,status-playable,playable,2022-08-10 17:19:12,4 +998,Perchang - 010011700D1B2000,010011700D1B2000,status-playable,playable,2021-01-25 14:19:52,2 +999,Out Of The Box - 01005A700A166000,01005A700A166000,status-playable,playable,2021-01-28 1:34:27,3 +1000,Paperbound Brawlers - 01006AD00B82C000,01006AD00B82C000,status-playable,playable,2021-01-25 14:32:15,2 +1001,Party Golf - 0100B8E00359E000,0100B8E00359E000,status-playable;nvdec,playable,2022-08-09 12:38:30,8 +1002,PAN-PAN A tiny big adventure - 0100F0D004CAE000,0100F0D004CAE000,audout;status-playable,playable,2021-01-25 14:42:00,2 +1003,OVIVO,,,,2020-04-30 15:12:05,1 +1004,Penguin Wars,,,,2020-04-30 15:28:21,1 +1005,Physical Contact: Speed - 01008110036FE000,01008110036FE000,status-playable,playable,2022-08-09 14:40:46,3 +1006,Pic-a-Pix Deluxe,,,,2020-04-30 16:00:55,1 +1007,Puyo Puyo Esports,,,,2020-04-30 16:13:17,1 +1008,Qbics Paint - 0100A8D003BAE000,0100A8D003BAE000,gpu;services;status-ingame,ingame,2021-06-07 10:54:09,3 +1009,Piczle Lines DX 500 More Puzzles!,,UE4;status-playable,playable,2020-12-15 23:42:51,3 +1010,Pato Box - 010031F006E76000,010031F006E76000,status-playable,playable,2021-01-25 15:17:52,2 +1011,Phoenix Wright: Ace Attorney Trilogy - 0100CB000A142000,0100CB000A142000,status-playable,playable,2023-09-15 22:03:12,4 +1012,Physical Contact: 2048,,slow;status-playable,playable,2021-01-25 15:18:32,2 +1013,OPUS Collection - 01004A200BE82000,01004A200BE82000,status-playable,playable,2021-01-25 15:24:04,2 +1014,Party Planet,,,,2020-04-30 18:30:59,1 +1015,Physical Contact: Picture Place,,,,2020-04-30 18:43:20,1 +1017,Tanzia - 01004DF007564000,01004DF007564000,status-playable,playable,2021-06-07 11:10:25,4 +1018,Syberia 3 - 0100CBE004E6C000,0100CBE004E6C000,nvdec;status-playable,playable,2021-01-25 16:15:12,2 +1019,SUPER DRAGON BALL HEROES WORLD MISSION - 0100E5E00C464000,0100E5E00C464000,status-playable;nvdec;online-broken,playable,2022-08-17 12:56:30,4 +1020,Tales of Vesperia: Definitive Edition - 01002C0008E52000,01002C0008E52000,status-playable,playable,2024-09-28 3:20:47,10 +1021,Surgeon Simulator CPR,,,,2020-05-01 15:11:43,1 +1022,Super Inefficient Golf - 010056800B534000,010056800B534000,status-playable;UE4,playable,2022-08-17 15:53:45,4 +1023,Super Daryl Deluxe,,,,2020-05-01 18:23:22,1 +1024,Sushi Striker: The Way of Sushido,,nvdec;status-playable,playable,2020-06-26 20:49:11,5 +1025,Super Volley Blast - 010035B00B3F0000,010035B00B3F0000,status-playable,playable,2022-08-19 18:14:40,3 +1026,Stunt Kite Party - 0100AF000B4AE000,0100AF000B4AE000,nvdec;status-playable,playable,2021-01-25 17:16:56,2 +1027,Super Putty Squad - 0100331005E8E000,0100331005E8E000,gpu;status-ingame;32-bit,ingame,2024-04-29 15:51:54,6 +1028,SWORD ART ONLINE: Hollow Realization Deluxe Edition - 01001B600D1D6000,01001B600D1D6000,status-playable;nvdec,playable,2022-08-19 19:19:15,4 +1029,SUPER ROBOT WARS T,,online;status-playable,playable,2021-03-25 11:00:40,10 +1030,Tactical Mind - 01000F20083A8000,01000F20083A8000,status-playable,playable,2021-01-25 18:05:00,2 +1031,Super Beat Sports - 0100F7000464A000,0100F7000464A000,status-playable;ldn-untested,playable,2022-08-16 16:05:50,2 +1032,Suicide Guy - 01005CD00A2A2000,01005CD00A2A2000,status-playable,playable,2021-01-26 13:13:54,2 +1033,Sundered: Eldritch Edition - 01002D3007962000,01002D3007962000,gpu;status-ingame,ingame,2021-06-07 11:46:00,3 +1034,Super Blackjack Battle II Turbo - The Card Warriors,,,,2020-05-02 9:45:57,1 +1035,Super Skelemania,,status-playable,playable,2020-06-07 22:59:50,3 +1036,Super Ping Pong Trick Shot,,,,2020-05-02 10:02:55,1 +1037,Subsurface Circular,,,,2020-05-02 10:36:40,1 +1038,Super Hero Fight Club: Reloaded,,,,2020-05-02 10:49:51,1 +1039,Superola and the lost burgers,,,,2020-05-02 10:57:54,1 +1040,Super Tennis Blast - 01000500DB50000,,status-playable,playable,2022-08-19 16:20:48,3 +1041,Swap This!,,,,2020-05-02 11:37:51,1 +1042,Super Sportmatchen - 0100A9300A4AE000,0100A9300A4AE000,status-playable,playable,2022-08-19 12:34:40,3 +1043,Super Destronaut DX,,,,2020-05-02 12:13:53,1 +1044,Summer Sports Games,,,,2020-05-02 12:45:15,1 +1045,Super Kickers League - 0100196009998000,0100196009998000,status-playable,playable,2021-01-26 13:36:48,2 +1046,Switch 'N' Shoot,,,,2020-05-03 2:02:08,1 +1047,Super Mutant Alien Assault,,status-playable,playable,2020-06-07 23:32:45,3 +1048,Tallowmere,,,,2020-05-03 2:23:10,1 +1050,Wizard of Legend - 0100522007AAA000,0100522007AAA000,status-playable,playable,2021-06-07 12:20:46,3 +1051,WARRIORS OROCHI 4 ULTIMATE - 0100E8500AD58000,0100E8500AD58000,status-playable;nvdec;online-broken,playable,2024-08-07 1:50:37,10 +1052,What Remains of Edith Finch - 010038900DFE0000,010038900DFE0000,slow;status-playable;UE4,playable,2022-08-31 19:57:59,3 +1053,Wasteland 2: Director's Cut - 010039A00BC64000,010039A00BC64000,nvdec;status-playable,playable,2021-01-27 13:34:11,2 +1054,Victor Vran Overkill Edition - 0100E81007A06000,0100E81007A06000,gpu;deadlock;status-ingame;nvdec;opengl,ingame,2022-08-30 11:46:56,6 +1055,Witch Thief - 01002FC00C6D0000,01002FC00C6D0000,status-playable,playable,2021-01-27 18:16:07,2 +1056,VSR: Void Space Racing - 0100C7C00AE6C000,0100C7C00AE6C000,status-playable,playable,2021-01-27 14:08:59,2 +1057,Warparty,,nvdec;status-playable,playable,2021-01-27 18:26:32,2 +1058,Windstorm,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-22 13:17:48,4 +1059,WAKU WAKU SWEETS,,,,2020-05-03 19:46:53,1 +1060,Windstorm - Ari's Arrival - 0100D6800CEAC000,0100D6800CEAC000,UE4;status-playable,playable,2021-06-07 19:33:19,3 +1061,V-Rally 4 - 010064400B138000,010064400B138000,gpu;nvdec;status-ingame,ingame,2021-06-07 19:37:31,5 +1062,Valkyria Chronicles - 0100CAF00B744000,0100CAF00B744000,status-ingame;32-bit;crash;nvdec,ingame,2022-11-23 20:03:32,8 +1063,WILL: A Wonderful World,,,,2020-05-03 22:34:06,1 +1065,WILD GUNS Reloaded - 0100CFC00A1D8000,0100CFC00A1D8000,status-playable,playable,2021-01-28 12:29:05,2 +1066,Valthirian Arc: Hero School Story,,,,2020-05-04 12:06:06,1 +1067,War Theatre - 010084D00A134000,010084D00A134000,gpu;status-ingame,ingame,2021-06-07 19:42:45,3 +1068,"Vostok, Inc. - 01004D8007368000",01004D8007368000,status-playable,playable,2021-01-27 17:43:59,2 +1069,Way of the Passive Fist - 0100BA200C378000,0100BA200C378000,gpu;status-ingame,ingame,2021-02-26 21:07:06,4 +1070,Vesta - 010057B00712C000,010057B00712C000,status-playable;nvdec,playable,2022-08-29 21:03:39,3 +1071,West of Loathing - 010031B00A4E8000,010031B00A4E8000,status-playable,playable,2021-01-28 12:35:19,2 +1072,Vaporum - 010030F00CA1E000,010030F00CA1E000,nvdec;status-playable,playable,2021-05-28 14:25:33,3 +1073,Vandals - 01007C500D650000,01007C500D650000,status-playable,playable,2021-01-27 21:45:46,2 +1074,Active Neurons - 010039A010DA0000,010039A010DA0000,status-playable,playable,2021-01-27 21:31:21,2 +1075,Voxel Sword - 0100BFB00D1F4000,0100BFB00D1F4000,status-playable,playable,2022-08-30 14:57:27,2 +1076,Levelhead,,online;status-ingame,ingame,2020-10-18 11:44:51,9 +1077,Violett - 01005880063AA000,01005880063AA000,nvdec;status-playable,playable,2021-01-28 13:09:36,2 +1078,Wheels of Aurelia - 0100DFC00405E000,0100DFC00405E000,status-playable,playable,2021-01-27 21:59:25,2 +1079,Varion,,,,2020-05-04 15:50:27,1 +1080,Warlock's Tower,,,,2020-05-04 16:03:52,1 +1081,Vectronom,,,,2020-05-04 16:14:05,1 +1083,Yooka-Laylee - 0100F110029C8000,0100F110029C8000,status-playable,playable,2021-01-28 14:21:45,2 +1084,WWE 2K18 - 010009800203E000,010009800203E000,status-playable;nvdec,playable,2023-10-21 17:22:01,4 +1085,Wulverblade - 010033700418A000,010033700418A000,nvdec;status-playable,playable,2021-01-27 22:29:05,2 +1086,YIIK: A Postmodern RPG - 0100634008266000,0100634008266000,status-playable,playable,2021-01-28 13:38:37,2 +1087,Yesterday Origins,,,,2020-05-05 14:17:14,1 +1088,Zarvot - 0100E7900C40000,,status-playable,playable,2021-01-28 13:51:36,2 +1089,World to the West,,,,2020-05-05 14:47:07,1 +1090,Yonder: The Cloud Catcher Chronicles - 0100CC600ABB2000,0100CC600ABB2000,status-playable,playable,2021-01-28 14:06:25,2 +1092,Emma: Lost in Memories - 010017b0102a8000,010017b0102a8000,nvdec;status-playable,playable,2021-01-28 16:19:10,2 +1094,Zotrix: Solar Division - 01001EE00A6B0000,01001EE00A6B0000,status-playable,playable,2021-06-07 20:34:05,5 +1095,X-Morph: Defense,,status-playable,playable,2020-06-22 11:05:31,3 +1096,Wonder Boy: The Dragon's Trap - 0100A6300150C000,0100A6300150C000,status-playable,playable,2021-06-25 4:53:21,2 +1097,Yoku's Island Express - 010002D00632E000,010002D00632E000,status-playable;nvdec,playable,2022-09-03 13:59:02,4 +1098,Woodle Tree Adventures,,,,2020-05-06 12:48:20,1 +1099,World Neverland - 01008E9007064000,01008E9007064000,status-playable,playable,2021-01-28 17:44:23,2 +1100,Yomawari: The Long Night Collection - 010012F00B6F2000,010012F00B6F2000,status-playable,playable,2022-09-03 14:36:59,4 +1101,Xenon Valkyrie+ - 010064200C324000,010064200C324000,status-playable,playable,2021-06-07 20:25:53,2 +1102,Word Search by POWGI,,,,2020-05-06 18:16:35,1 +1103,Zombie Scrapper,,,,2020-05-06 18:27:12,1 +1104,Moving Out - 0100C4C00E73E000,0100C4C00E73E000,nvdec;status-playable,playable,2021-06-07 21:17:24,3 +1105,Wonderboy Returns Remix,,,,2020-05-06 22:21:59,1 +1106,Xenoraid - 0100928005BD2000,0100928005BD2000,status-playable,playable,2022-09-03 13:01:10,5 +1107,Zombillie,,status-playable,playable,2020-07-23 17:42:23,2 +1108,World Conqueror X,,status-playable,playable,2020-12-22 16:10:29,3 +1109,Xeodrifter - 01005B5009364000,01005B5009364000,status-playable,playable,2022-09-03 13:18:39,5 +1110,Yono and the Celestial Elephants - 0100BE50042F6000,0100BE50042F6000,status-playable,playable,2021-01-28 18:23:58,2 +1111,Moto Racer 4 - 01002ED00B01C000,01002ED00B01C000,UE4;nvdec;online;status-playable,playable,2021-04-08 19:09:11,3 +1112,NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst - 01006BB00800A000,01006BB00800A000,status-playable;nvdec,playable,2024-06-16 14:58:05,2 +1113,NAMCO MUSEUM - 010002F001220000,010002F001220000,status-playable;ldn-untested,playable,2024-08-13 7:52:21,3 +1114,Mother Russia Bleeds,,,,2020-05-07 17:29:22,1 +1115,MotoGP 18 - 0100361007268000,0100361007268000,status-playable;nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45,3 +1116,Mushroom Wars 2,,nvdec;status-playable,playable,2020-09-28 15:26:08,2 +1117,Mugsters - 010073E008E6E000,010073E008E6E000,status-playable,playable,2021-01-28 17:57:17,2 +1118,Mulaka - 0100211005E94000,0100211005E94000,status-playable,playable,2021-01-28 18:07:20,2 +1119,Mummy Pinball - 010038B00B9AE000,010038B00B9AE000,status-playable,playable,2022-08-05 16:08:11,2 +1120,Moto Rush GT - 01003F200D0F2000,01003F200D0F2000,status-playable,playable,2022-08-05 11:23:55,2 +1121,Mutant Football League Dynasty Edition - 0100C3E00ACAA000,0100C3E00ACAA000,status-playable;online-broken,playable,2022-08-05 17:01:51,3 +1122,Mr. Shifty,,slow;status-playable,playable,2020-05-08 15:28:16,1 +1123,MXGP3 - The Official Motocross Videogame,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 14:00:20,2 +1124,My Memory of Us - 0100E7700C284000,0100E7700C284000,status-playable,playable,2022-08-20 11:03:14,4 +1125,N++ - 01000D5005974000,01000D5005974000,status-playable,playable,2022-08-05 21:54:58,4 +1126,MUJO,,status-playable,playable,2020-05-08 16:31:04,1 +1127,MotoGP 19 - 01004B800D0E8000,01004B800D0E8000,status-playable;nvdec;online-broken;UE4,playable,2022-08-05 11:54:14,3 +1128,Muddledash,,services;status-ingame,ingame,2020-05-08 16:46:14,1 +1129,My Little Riding Champion,,slow;status-playable,playable,2020-05-08 17:00:53,1 +1130,Motorsport Manager for Nintendo Switch - 01002A900D6D6000,01002A900D6D6000,status-playable;nvdec,playable,2022-08-05 12:48:14,2 +1132,Muse Dash,,status-playable,playable,2020-06-06 14:41:29,3 +1133,NAMCO MUSEUM ARCADE PAC - 0100DAA00AEE6000,0100DAA00AEE6000,status-playable,playable,2021-06-07 21:44:50,2 +1134,MyFarm 2018,,,,2020-05-09 12:14:19,1 +1135,Mutant Mudds Collection - 01004BE004A86000,01004BE004A86000,status-playable,playable,2022-08-05 17:11:38,4 +1136,Ms. Splosion Man,,online;status-playable,playable,2020-05-09 20:45:43,1 +1137,New Super Mario Bros. U Deluxe - 0100EA80032EA000,0100EA80032EA000,32-bit;status-playable,playable,2023-10-08 2:06:37,9 +1138,Nelke & the Legendary Alchemists ~Ateliers of the New World~ - 01006ED00BC76000,01006ED00BC76000,status-playable,playable,2021-01-28 19:39:42,2 +1139,Nihilumbra,,status-playable,playable,2020-05-10 16:00:12,1 +1140,Observer - 01002A000C478000,01002A000C478000,UE4;gpu;nvdec;status-ingame,ingame,2021-03-03 20:19:45,2 +1141,NOT A HERO - 0100CB800B07E000,0100CB800B07E000,status-playable,playable,2021-01-28 19:31:24,2 +1142,Nightshade,,nvdec;status-playable,playable,2020-05-10 19:43:31,1 +1143,Night in the Woods - 0100921006A04000,0100921006A04000,status-playable,playable,2022-12-03 20:17:54,3 +1144,Nippon Marathon - 010037200C72A000,010037200C72A000,nvdec;status-playable,playable,2021-01-28 20:32:46,2 +1145,One Piece Unlimited World Red Deluxe Edition,,status-playable,playable,2020-05-10 22:26:32,1 +1146,Numbala,,status-playable,playable,2020-05-11 12:01:07,1 +1147,Night Trap - 25th Anniversary Edition - 0100D8500A692000,0100D8500A692000,status-playable;nvdec,playable,2022-08-08 13:16:14,10 +1148,Ninja Shodown,,status-playable,playable,2020-05-11 12:31:21,1 +1149,OkunoKA - 01006AB00BD82000,01006AB00BD82000,status-playable;online-broken,playable,2022-08-08 14:41:51,2 +1150,Mechstermination Force - 0100E4600D31A000,0100E4600D31A000,status-playable,playable,2024-07-04 5:39:15,2 +1151,Lines X,,status-playable,playable,2020-05-11 15:28:30,1 +1152,Katamari Damacy REROLL - 0100D7000C2C6000,0100D7000C2C6000,status-playable,playable,2022-08-02 21:35:05,3 +1153,Lifeless Planet - 01005B6008132000,01005B6008132000,status-playable,playable,2022-08-03 21:25:13,2 +1154,League of Evil - 01009C100390E000,01009C100390E000,online;status-playable,playable,2021-06-08 11:23:27,2 +1155,Life Goes On - 010006300AFFE000,010006300AFFE000,status-playable,playable,2021-01-29 19:01:20,2 +1156,Leisure Suit Larry: Wet Dreams Don't Dry - 0100A8E00CAA0000,0100A8E00CAA0000,status-playable,playable,2022-08-03 19:51:44,4 +1157,Legend of Kay Anniversary - 01002DB007A96000,01002DB007A96000,nvdec;status-playable,playable,2021-01-29 18:38:29,2 +1158,Kunio-Kun: The World Classics Collection - 010060400ADD2000,010060400ADD2000,online;status-playable,playable,2021-01-29 20:21:46,2 +1159,Letter Quest Remastered,,status-playable,playable,2020-05-11 21:30:34,1 +1160,Koi DX,,status-playable,playable,2020-05-11 21:37:51,1 +1161,Knights of Pen and Paper +1 Deluxier Edition,,status-playable,playable,2020-05-11 21:46:32,1 +1162,Late Shift - 0100055007B86000,0100055007B86000,nvdec;status-playable,playable,2021-02-01 18:43:58,2 +1163,Lethal League Blaze - 01003AB00983C000,01003AB00983C000,online;status-playable,playable,2021-01-29 20:13:31,2 +1164,Koloro - 01005D200C9AA000,01005D200C9AA000,status-playable,playable,2022-08-03 12:34:02,2 +1165,Little Dragons Cafe,,status-playable,playable,2020-05-12 0:00:52,1 +1166,Legendary Fishing - 0100A7700B46C000,0100A7700B46C000,online;status-playable,playable,2021-04-14 15:08:46,4 +1167,Knock-Knock - 010001A00A1F6000,010001A00A1F6000,nvdec;status-playable,playable,2021-02-01 20:03:19,2 +1168,KAMEN RIDER CLIMAX SCRAMBLE - 0100BDC00A664000,0100BDC00A664000,status-playable;nvdec;ldn-untested,playable,2024-07-03 8:51:11,6 +1169,Kingdom: New Lands - 0100BD9004AB6000,0100BD9004AB6000,status-playable,playable,2022-08-02 21:48:50,2 +1170,Lapis x Labyrinth - 01005E000D3D8000,01005E000D3D8000,status-playable,playable,2021-02-01 18:58:08,2 +1171,Last Day of June - 0100DA700879C000,0100DA700879C000,nvdec;status-playable,playable,2021-06-08 11:35:32,3 +1172,Levels+,,status-playable,playable,2020-05-12 13:51:39,1 +1173,Katana ZERO - 010029600D56A000,010029600D56A000,status-playable,playable,2022-08-26 8:09:09,11 +1174,Layers of Fear: Legacy,,nvdec;status-playable,playable,2021-02-15 16:30:41,2 +1175,Kotodama: The 7 Mysteries of Fujisawa - 010046600CCA4000,010046600CCA4000,audout;status-playable,playable,2021-02-01 20:28:37,2 +1176,Lichtspeer: Double Speer Edition,,status-playable,playable,2020-05-12 16:43:09,1 +1177,Koral,,UE4;crash;gpu;status-menus,menus,2020-11-16 12:41:26,3 +1178,KeroBlaster,,status-playable,playable,2020-05-12 20:42:52,1 +1179,Kentucky Robo Chicken,,status-playable,playable,2020-05-12 20:54:17,1 +1180,L.A. Noire - 0100830004FB6000,0100830004FB6000,status-playable,playable,2022-08-03 16:49:35,3 +1181,Kill The Bad Guy,,status-playable,playable,2020-05-12 22:16:10,1 +1182,Legendary Eleven - 0100A73006E74000,0100A73006E74000,status-playable,playable,2021-06-08 12:09:03,3 +1183,Kitten Squad - 01000C900A136000,01000C900A136000,status-playable;nvdec,playable,2022-08-03 12:01:59,5 +1184,Labyrinth of Refrain: Coven of Dusk - 010058500B3E0000,010058500B3E0000,status-playable,playable,2021-02-15 17:38:48,2 +1185,KAMIKO,,status-playable,playable,2020-05-13 12:48:57,1 +1186,Left-Right: The Mansion,,status-playable,playable,2020-05-13 13:02:12,1 +1187,Knight Terrors,,status-playable,playable,2020-05-13 13:09:22,1 +1188,Kingdom: Two Crowns,,status-playable,playable,2020-05-16 19:36:21,2 +1189,Kid Tripp,,crash;status-nothing,nothing,2020-10-15 7:41:23,2 +1190,King Oddball,,status-playable,playable,2020-05-13 13:47:57,1 +1191,KORG Gadget,,status-playable,playable,2020-05-13 13:57:24,1 +1192,Knights of Pen and Paper 2 Deluxiest Edition,,status-playable,playable,2020-05-13 14:07:00,1 +1193,Keep Talking and Nobody Explodes - 01008D400A584000,01008D400A584000,status-playable,playable,2021-02-15 18:05:21,2 +1194,Jet Lancer - 0100F3500C70C000,0100F3500C70C000,gpu;status-ingame,ingame,2021-02-15 18:15:47,2 +1195,Furi - 01000EC00AF98000,01000EC00AF98000,status-playable,playable,2022-07-27 12:21:20,2 +1196,Forgotton Anne - 010059E00B93C000,010059E00B93C000,nvdec;status-playable,playable,2021-02-15 18:28:07,2 +1197,GOD EATER 3 - 01001C700873E000,01001C700873E000,gpu;status-ingame;nvdec,ingame,2022-07-29 21:33:21,13 +1198,Guacamelee! Super Turbo Championship Edition,,status-playable,playable,2020-05-13 23:44:18,1 +1199,Frost - 0100B5300B49A000,0100B5300B49A000,status-playable,playable,2022-07-27 12:00:36,2 +1200,GO VACATION - 0100C1800A9B6000,0100C1800A9B6000,status-playable;nvdec;ldn-works,playable,2024-05-13 19:28:53,5 +1201,Grand Prix Story - 0100BE600D07A000,0100BE600D07A000,status-playable,playable,2022-08-01 12:42:23,2 +1202,Freedom Planet,,status-playable,playable,2020-05-14 12:23:06,1 +1203,Fossil Hunters - 0100CA500756C000,0100CA500756C000,status-playable;nvdec,playable,2022-07-27 11:37:20,2 +1204,For The King - 010069400B6BE000,010069400B6BE000,nvdec;status-playable,playable,2021-02-15 18:51:44,2 +1205,Flashback,,nvdec;status-playable,playable,2020-05-14 13:57:29,1 +1206,Golf Story,,status-playable,playable,2020-05-14 14:56:17,1 +1207,Firefighters: Airport Fire Department,,status-playable,playable,2021-02-15 19:17:00,2 +1208,Chocobo's Mystery Dungeon Every Buddy!,,slow;status-playable,playable,2020-05-26 13:53:13,2 +1209,CHOP,,,,2020-05-14 17:13:00,1 +1211,FunBox Party,,status-playable,playable,2020-05-15 12:07:02,1 +1212,Friday the 13th: Killer Puzzle - 010003F00BD48000,010003F00BD48000,status-playable,playable,2021-01-28 1:33:38,3 +1213,Johnny Turbo's Arcade Gate of Doom - 010069B002CDE000,010069B002CDE000,status-playable,playable,2022-07-29 12:17:50,3 +1214,Frederic: Resurrection of Music,,nvdec;status-playable,playable,2020-07-23 16:59:53,2 +1215,Frederic 2,,status-playable,playable,2020-07-23 16:44:37,2 +1216,Fort Boyard,,nvdec;slow;status-playable,playable,2020-05-15 13:22:53,1 +1217,Flipping Death - 01009FB002B2E000,01009FB002B2E000,status-playable,playable,2021-02-17 16:12:30,2 +1218,Flat Heroes - 0100C53004C52000,0100C53004C52000,gpu;status-ingame,ingame,2022-07-26 19:37:37,4 +1219,Flood of Light,,status-playable,playable,2020-05-15 14:15:25,1 +1220,FRAMED COLLECTION - 0100F1A00A5DC000,0100F1A00A5DC000,status-playable;nvdec,playable,2022-07-27 11:48:15,4 +1221,Guacamelee! 2,,status-playable,playable,2020-05-15 14:56:59,1 +1223,Flinthook,,online;status-playable,playable,2021-03-25 20:42:29,4 +1224,FORMA.8,,nvdec;status-playable,playable,2020-11-15 1:04:32,3 +1225,FOX n FORESTS - 01008A100A028000,01008A100A028000,status-playable,playable,2021-02-16 14:27:49,2 +1226,Gotcha Racing 2nd,,status-playable,playable,2020-07-23 17:14:04,2 +1227,Floor Kids - 0100DF9005E7A000,0100DF9005E7A000,status-playable;nvdec,playable,2024-08-18 19:38:49,4 +1228,Firefighters - The Simulation - 0100434003C58000,0100434003C58000,status-playable,playable,2021-02-19 13:32:05,2 +1229,Flip Wars - 010095A004040000,010095A004040000,services;status-ingame;ldn-untested,ingame,2022-05-02 15:39:18,4 +1230,TowerFall,,status-playable,playable,2020-05-16 18:58:07,6 +1231,Towertale,,status-playable,playable,2020-10-15 13:56:58,10 +1236,Football Manager Touch 2018 - 010097F0099B4000,010097F0099B4000,status-playable,playable,2022-07-26 20:17:56,4 +1237,Fruitfall Crush,,status-playable,playable,2020-10-20 11:33:33,2 +1238,Forest Home,,,,2020-05-17 13:33:08,1 +1239,Fly O'Clock VS,,status-playable,playable,2020-05-17 13:39:52,1 +1240,Gal Metal - 01B8000C2EA000,,status-playable,playable,2022-07-27 20:57:48,3 +1241,Gear.Club Unlimited - 010065E003FD8000,010065E003FD8000,status-playable,playable,2021-06-08 13:03:19,4 +1242,Gear.Club Unlimited 2 - 010072900AFF0000,010072900AFF0000,status-playable;nvdec;online-broken,playable,2022-07-29 12:52:16,3 +1243,GRIP - 0100459009A2A000,0100459009A2A000,status-playable;nvdec;online-broken;UE4,playable,2022-08-01 15:00:22,8 +1244,Ginger: Beyond the Crystal - 0100C50007070000,0100C50007070000,status-playable,playable,2021-02-17 16:27:00,2 +1245,Slayin 2 - 01004E900EDDA000,01004E900EDDA000,gpu;status-ingame,ingame,2024-04-19 16:15:26,5 +1246,Grim Fandango Remastered - 0100B7900B024000,0100B7900B024000,status-playable;nvdec,playable,2022-08-01 13:55:58,2 +1247,Gal*Gun 2 - 010024700901A000,010024700901A000,status-playable;nvdec;UE4,playable,2022-07-27 12:45:37,6 +1248,Golem Gates - 01003C000D84C000,01003C000D84C000,status-ingame;crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11,5 +1249,Full Metal Furies,,online,,2020-05-18 13:22:06,1 +1250,GIGA WRECKER Alt. - 010045F00BFC2000,010045F00BFC2000,status-playable,playable,2022-07-29 14:13:54,4 +1251,Gelly Break - 01009D000AF3A000,01009D000AF3A000,UE4;status-playable,playable,2021-03-03 16:04:02,2 +1252,The World Next Door - 0100E6200D56E000,0100E6200D56E000,status-playable,playable,2022-09-21 14:15:23,2 +1253,GREEN - 010068D00AE68000,010068D00AE68000,status-playable,playable,2022-08-01 12:54:15,2 +1254,Feathery Ears,,,,2020-05-18 14:48:31,1 +1255,Gorogoa - 0100F2A005C98000,0100F2A005C98000,status-playable,playable,2022-08-01 11:55:08,2 +1256,Girls und Panzer Dream Tank Match DX - 01006DD00CC96000,01006DD00CC96000,status-playable;ldn-untested,playable,2022-09-12 16:07:11,21 +1257,Super Crush KO,,,,2020-05-18 15:49:23,1 +1258,Gem Smashers - 01001A4008192000,01001A4008192000,nvdec;status-playable,playable,2021-06-08 13:40:51,4 +1259,Grave Danger,,status-playable,playable,2020-05-18 17:41:28,1 +1260,Fury Unleashed,,crash;services;status-ingame,ingame,2020-10-18 11:52:40,4 +1261,TaniNani - 01007DB010D2C000,01007DB010D2C000,crash;kernel;status-nothing,nothing,2021-04-08 3:06:44,4 +1262,Atelier Escha & Logy: Alchemists Of The Dusk Sky DX - 0100E5600EE8E000,0100E5600EE8E000,status-playable;nvdec,playable,2022-11-20 16:01:41,3 +1263,Battle of Elemental Burst,,,,2020-05-18 23:27:22,1 +1264,Gun Crazy,,,,2020-05-18 23:47:28,1 +1265,Ascendant Hearts,,,,2020-05-19 8:50:44,1 +1266,Infinite Beyond the Mind,,,,2020-05-19 9:17:17,1 +1268,FullBlast,,status-playable,playable,2020-05-19 10:34:13,1 +1269,The Legend of Heroes: Trails of Cold Steel III,,status-playable,playable,2020-12-16 10:59:18,4 +1270,Goosebumps: The Game,,status-playable,playable,2020-05-19 11:56:52,1 +1271,Gonner,,status-playable,playable,2020-05-19 12:05:02,1 +1272,Monster Viator,,,,2020-05-19 12:15:18,1 +1273,Umihara Kawase Fresh,,,,2020-05-19 12:29:18,1 +1274,Operencia The Stolen Sun - 01006CF00CFA4000,01006CF00CFA4000,UE4;nvdec;status-playable,playable,2021-06-08 13:51:07,2 +1275,Goetia,,status-playable,playable,2020-05-19 12:55:39,1 +1276,Grid Mania,,status-playable,playable,2020-05-19 14:11:05,1 +1277,Pantsu Hunter,,status-playable,playable,2021-02-19 15:12:27,2 +1278,GOD WARS THE COMPLETE LEGEND,,nvdec;status-playable,playable,2020-05-19 14:37:50,1 +1279,Dark Burial,,,,2020-05-19 14:38:34,1 +1280,Langrisser I and II - 0100BAB00E8C0000,0100BAB00E8C0000,status-playable,playable,2021-02-19 15:46:10,2 +1281,My Secret Pets,,,,2020-05-19 15:26:56,1 +1282,Grass Cutter,,slow;status-ingame,ingame,2020-05-19 18:27:42,1 +1283,Giana Sisters: Twisted Dreams - Owltimate Edition - 01003830092B8000,01003830092B8000,status-playable,playable,2022-07-29 14:06:12,6 +1284,FUN! FUN! Animal Park - 010002F00CC20000,010002F00CC20000,status-playable,playable,2021-04-14 17:08:52,2 +1285,Graceful Explosion Machine,,status-playable,playable,2020-05-19 20:36:55,1 +1286,Garage,,status-playable,playable,2020-05-19 20:59:53,1 +1287,Game Dev Story,,status-playable,playable,2020-05-20 0:00:38,1 +1289,Gone Home - 0100EEC00AA6E000,0100EEC00AA6E000,status-playable,playable,2022-08-01 11:14:20,2 +1290,Geki Yaba Runner Anniversary Edition - 01000F000D9F0000,01000F000D9F0000,status-playable,playable,2021-02-19 18:59:07,2 +1291,Gridd: Retroenhanced,,status-playable,playable,2020-05-20 11:32:40,1 +1292,Green Game - 0100CBB0070EE000,0100CBB0070EE000,nvdec;status-playable,playable,2021-02-19 18:51:55,2 +1293,Glaive: Brick Breaker,,status-playable,playable,2020-05-20 12:15:59,1 +1294,Furwind - 0100A6B00D4EC000,0100A6B00D4EC000,status-playable,playable,2021-02-19 19:44:08,2 +1295,Goat Simulator - 010032600C8CE000,010032600C8CE000,32-bit;status-playable,playable,2022-07-29 21:02:33,6 +1296,Gnomes Garden 2,,status-playable,playable,2021-02-19 20:08:13,2 +1297,Gensokyo Defenders - 010000300C79C000,010000300C79C000,status-playable;online-broken;UE4,playable,2022-07-29 13:48:12,4 +1298,Guess the Character,,status-playable,playable,2020-05-20 13:14:19,1 +1299,Gato Roboto - 010025500C098000,010025500C098000,status-playable,playable,2023-01-20 15:04:11,7 +1300,Gekido Kintaro's Revenge,,status-playable,playable,2020-10-27 12:44:05,3 +1301,Ghost 1.0 - 0100EEB005ACC000,0100EEB005ACC000,status-playable,playable,2021-02-19 20:48:47,2 +1302,GALAK-Z: Variant S - 0100C9800A454000,0100C9800A454000,status-boots;online-broken,boots,2022-07-29 11:59:12,2 +1303,Cuphead - 0100A5C00D162000,0100A5C00D162000,status-playable,playable,2022-02-01 22:45:55,3 +1304,Darkest Dungeon - 01008F1008DA6000,01008F1008DA6000,status-playable;nvdec,playable,2022-07-22 18:49:18,5 +1305,Cabela's: The Hunt - Championship Edition - 0100E24004510000,0100E24004510000,status-menus;32-bit,menus,2022-07-21 20:21:25,5 +1306,Darius Cozmic Collection,,status-playable,playable,2021-02-19 20:59:06,2 +1309,Ion Fury - 010041C00D086000,010041C00D086000,status-ingame;vulkan-backend-bug,ingame,2022-08-07 8:27:51,8 +1310,Void Bastards - 0100D010113A8000,0100D010113A8000,status-playable,playable,2022-10-15 0:04:19,3 +1311,Our two Bedroom Story - 010097F010FE6000,010097F010FE6000,gpu;status-ingame;nvdec,ingame,2023-10-10 17:41:20,4 +1312,Dark Witch Music Episode: Rudymical,,status-playable,playable,2020-05-22 9:44:44,1 +1313,Cave Story+,,status-playable,playable,2020-05-22 9:57:25,1 +1314,Crawl,,status-playable,playable,2020-05-22 10:16:05,1 +1315,Chasm,,status-playable,playable,2020-10-23 11:03:43,3 +1316,Princess Closet,,,,2020-05-22 10:34:06,1 +1317,Color Zen,,status-playable,playable,2020-05-22 10:56:17,1 +1318,Coffee Crisis - 0100CF800C810000,0100CF800C810000,status-playable,playable,2021-02-20 12:34:52,2 +1319,Croc's World,,status-playable,playable,2020-05-22 11:21:09,1 +1320,Chicken Rider,,status-playable,playable,2020-05-22 11:31:17,1 +1321,Caveman Warriors,,status-playable,playable,2020-05-22 11:44:20,1 +1322,Clustertruck - 010096900A4D2000,010096900A4D2000,slow;status-ingame,ingame,2021-02-19 21:07:09,2 +1323,Yumeutsutsu Re:After - 0100B56011502000,0100B56011502000,status-playable,playable,2022-11-20 16:09:06,2 +1324,Danger Mouse - 01003ED0099B0000,01003ED0099B0000,status-boots;crash;online,boots,2022-07-22 15:49:45,2 +1325,Circle of Sumo,,status-playable,playable,2020-05-22 12:45:21,1 +1326,Chicken Range - 0100F6C00A016000,0100F6C00A016000,status-playable,playable,2021-04-23 12:14:23,3 +1327,Conga Master Party!,,status-playable,playable,2020-05-22 13:22:24,1 +1328,SNK HEROINES Tag Team Frenzy - 010027F00AD6C000,010027F00AD6C000,status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25,5 +1329,Conduct TOGETHER! - 010043700C9B0000,010043700C9B0000,nvdec;status-playable,playable,2021-02-20 12:59:00,2 +1330,"Calculation Castle: Greco's Ghostly Challenge ""Addition""",,32-bit;status-playable,playable,2020-11-01 23:40:11,4 +1331,"Calculation Castle: Greco's Ghostly Challenge ""Subtraction""",,32-bit;status-playable,playable,2020-11-01 23:47:42,3 +1332,"Calculation Castle: Greco's Ghostly Challenge ""Multiplication""",,32-bit;status-playable,playable,2020-11-02 0:04:33,3 +1333,"Calculation Castle: Greco's Ghostly Challenge ""Division""",,32-bit;status-playable,playable,2020-11-01 23:54:55,3 +1334,Chicken Assassin: Reloaded - 0100E3C00A118000,0100E3C00A118000,status-playable,playable,2021-02-20 13:29:01,2 +1335,eSports Legend,,,,2020-05-22 18:58:46,1 +1336,Crypt of the Necrodancer - 0100CEA007D08000,0100CEA007D08000,status-playable;nvdec,playable,2022-11-01 9:52:06,2 +1337,Crash Bandicoot N. Sane Trilogy - 0100D1B006744000,0100D1B006744000,status-playable,playable,2024-02-11 11:38:14,3 +1338,Castle of Heart - 01003C100445C000,01003C100445C000,status-playable;nvdec,playable,2022-07-21 23:10:45,2 +1339,Darkwood,,status-playable,playable,2021-01-08 21:24:06,3 +1340,A Fold Apart,,,,2020-05-23 8:10:49,1 +1341,Blind Men - 010089D011310000,010089D011310000,audout;status-playable,playable,2021-02-20 14:15:38,2 +1343,Darksiders Warmastered Edition - 0100E1400BA96000,0100E1400BA96000,status-playable;nvdec,playable,2023-03-02 18:08:09,4 +1344,OBAKEIDORO!,,nvdec;online;status-playable,playable,2020-10-16 16:57:34,3 +1345,De:YABATANIEN,,,,2020-05-23 10:48:51,1 +1346,Crash Dummy,,nvdec;status-playable,playable,2020-05-23 11:12:43,1 +1347,Castlevania Anniversary Collection,,audio;status-playable,playable,2020-05-23 11:40:29,1 +1348,Flan - 010038200E088000,010038200E088000,status-ingame;crash;regression,ingame,2021-11-17 7:39:28,3 +1349,Sisters Royale: Five Sisters Under Fire,,,,2020-05-23 15:12:09,1 +1350,Game Tengoku CruisinMix Special,,,,2020-05-23 17:30:59,1 +1351,Cosmic Star Heroine - 010067C00A776000,010067C00A776000,status-playable,playable,2021-02-20 14:30:47,2 +1352,Croixleur Sigma - 01000F0007D92000,01000F0007D92000,status-playable;online,playable,2022-07-22 14:26:54,3 +1353,Cities: Skylines - Nintendo Switch Edition,,status-playable,playable,2020-12-16 10:34:57,3 +1354,Castlestorm - 010097C00AB66000,010097C00AB66000,status-playable;nvdec,playable,2022-07-21 22:49:14,5 +1355,Coffin Dodgers - 0100178009648000,0100178009648000,status-playable,playable,2021-02-20 14:57:41,2 +1356,Child of Light,,nvdec;status-playable,playable,2020-12-16 10:23:10,7 +1357,Wizards of Brandel,,status-nothing,nothing,2020-10-14 15:52:33,3 +1358,Contra Anniversary Collection - 0100DCA00DA7E000,0100DCA00DA7E000,status-playable,playable,2022-07-22 11:30:12,2 +1359,Cartoon Network Adventure Time: Pirates of the Enchiridion - 0100C4E004406000,0100C4E004406000,status-playable;nvdec,playable,2022-07-21 21:49:01,4 +1361,Claybook - 010009300AA6C000,010009300AA6C000,slow;status-playable;nvdec;online;UE4,playable,2022-07-22 11:11:34,4 +1363,Crashbots - 0100BF200CD74000,0100BF200CD74000,status-playable,playable,2022-07-22 13:50:52,2 +1364,Crossing Souls - 0100B1E00AA56000,0100B1E00AA56000,nvdec;status-playable,playable,2021-02-20 15:42:54,2 +1365,Groove Coaster: Wai Wai Party!!!! - 0100EB500D92E000,0100EB500D92E000,status-playable;nvdec;ldn-broken,playable,2021-11-06 14:54:27,5 +1367,Candle - The Power of the Flame,,nvdec;status-playable,playable,2020-05-26 12:10:20,1 +1368,Minecraft Dungeons - 01006C100EC08000,01006C100EC08000,status-playable;nvdec;online-broken;UE4,playable,2024-06-26 22:10:43,13 +1369,Constructor Plus,,status-playable,playable,2020-05-26 12:37:40,1 +1370,The Wonderful 101: Remastered - 0100B1300FF08000,0100B1300FF08000,slow;status-playable;nvdec,playable,2022-09-30 13:49:28,2 +1371,Dandara,,status-playable,playable,2020-05-26 12:42:33,1 +1372,ChromaGun,,status-playable,playable,2020-05-26 12:56:42,1 +1373,Crayola Scoot - 0100C66007E96000,0100C66007E96000,status-playable;nvdec,playable,2022-07-22 14:01:55,4 +1374,Chess Ultra - 0100A5900472E000,0100A5900472E000,status-playable;UE4,playable,2023-08-30 23:06:31,7 +1375,Clue,,crash;online;status-menus,menus,2020-11-10 9:23:48,2 +1376,ACA NEOGEO Metal Slug X,,crash;services;status-menus,menus,2020-05-26 14:07:20,1 +1377,ACA NEOGEO ZUPAPA!,,online;status-playable,playable,2021-03-25 20:07:33,3 +1378,ACA NEOGEO WORLD HEROES PERFECT,,crash;services;status-menus,menus,2020-05-26 14:14:36,1 +1379,ACA NEOGEO WAKU WAKU 7 - 0100CEF001DC0000,0100CEF001DC0000,online;status-playable,playable,2021-04-10 14:20:52,2 +1380,ACA NEOGEO THE SUPER SPY - 0100F7F00AFA2000,0100F7F00AFA2000,online;status-playable,playable,2021-04-10 14:26:33,3 +1381,ACA NEOGEO THE LAST BLADE 2 - 0100699008792000,0100699008792000,online;status-playable,playable,2021-04-10 14:31:54,3 +1382,ACA NEOGEO THE KING OF FIGHTERS '99 - 0100583001DCA000,0100583001DCA000,online;status-playable,playable,2021-04-10 14:36:56,3 +1383,ACA NEOGEO THE KING OF FIGHTERS '98,,crash;services;status-menus,menus,2020-05-26 14:54:20,1 +1384,ACA NEOGEO THE KING OF FIGHTERS '97 - 0100170008728000,0100170008728000,online;status-playable,playable,2021-04-10 14:43:27,3 +1385,ACA NEOGEO THE KING OF FIGHTERS '96 - 01006F0004FB4000,01006F0004FB4000,online;status-playable,playable,2021-04-10 14:49:10,3 +1386,ACA NEOGEO THE KING OF FIGHTERS '95 - 01009DC001DB6000,01009DC001DB6000,status-playable,playable,2021-03-29 20:27:35,5 +1387,ACA NEOGEO THE KING OF FIGHTERS '94,,crash;services;status-menus,menus,2020-05-26 15:03:44,1 +1388,ACA NEOGEO THE KING OF FIGHTERS 2003 - 0100EF100AFE6000,0100EF100AFE6000,online;status-playable,playable,2021-04-10 14:54:31,3 +1389,ACA NEOGEO THE KING OF FIGHTERS 2002 - 0100CFD00AFDE000,0100CFD00AFDE000,online;status-playable,playable,2021-04-10 15:01:55,2 +1390,ACA NEOGEO THE KING OF FIGHTERS 2001 - 010048200AFC2000,010048200AFC2000,online;status-playable,playable,2021-04-10 15:16:23,3 +1391,ACA NEOGEO THE KING OF FIGHTERS 2000 - 0100B97002B44000,0100B97002B44000,online;status-playable,playable,2021-04-10 15:24:35,3 +1392,ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY - 0100A4D00A308000,0100A4D00A308000,online;status-playable,playable,2021-04-10 15:39:22,3 +1393,ACA NEOGEO SUPER SIDEKICKS 2 - 010055A00A300000,010055A00A300000,online;status-playable,playable,2021-04-10 16:05:58,3 +1394,ACA NEOGEO SPIN MASTER - 01007D1004DBA000,01007D1004DBA000,online;status-playable,playable,2021-04-10 15:50:19,3 +1395,ACA NEOGEO SHOCK TROOPERS,,crash;services;status-menus,menus,2020-05-26 15:29:34,1 +1396,ACA NEOGEO SENGOKU 3 - 01008D000877C000,01008D000877C000,online;status-playable,playable,2021-04-10 16:11:53,3 +1397,ACA NEOGEO SENGOKU 2 - 01009B300872A000,01009B300872A000,online;status-playable,playable,2021-04-10 17:36:44,2 +1398,ACA NEOGEO SAMURAI SHODOWN SPECIAL V - 010049F00AFE8000,010049F00AFE8000,online;status-playable,playable,2021-04-10 18:07:13,2 +1399,ACA NEOGEO SAMURAI SHODOWN IV - 010047F001DBC000,010047F001DBC000,online;status-playable,playable,2021-04-12 12:58:54,2 +1400,ACA NEOGEO SAMURAI SHODOWN - 01005C9002B42000,01005C9002B42000,online;status-playable,playable,2021-04-01 17:11:35,2 +1401,ACA NEOGEO REAL BOUT FATAL FURY SPECIAL - 010088500878C000,010088500878C000,online;status-playable,playable,2021-04-01 17:18:27,2 +1402,ACA NEOGEO OVER TOP - 01003A5001DBA000,01003A5001DBA000,status-playable,playable,2021-02-21 13:16:25,2 +1403,ACA NEOGEO NINJA COMMANDO - 01007E800AFB6000,01007E800AFB6000,online;status-playable,playable,2021-04-01 17:28:18,2 +1404,ACA NEOGEO NINJA COMBAT - 010052A00A306000,010052A00A306000,status-playable,playable,2021-03-29 21:17:28,5 +1405,ACA NEOGEO NEO TURF MASTERS - 01002E70032E8000,01002E70032E8000,status-playable,playable,2021-02-21 15:12:01,2 +1406,ACA NEOGEO Money Puzzle Exchanger - 010038F00AFA0000,010038F00AFA0000,online;status-playable,playable,2021-04-01 17:59:56,2 +1407,ACA NEOGEO METAL SLUG 4 - 01009CE00AFAE000,01009CE00AFAE000,online;status-playable,playable,2021-04-01 18:12:18,2 +1408,ACA NEOGEO METAL SLUG 3,,crash;services;status-menus,menus,2020-05-26 16:32:45,1 +1409,ACA NEOGEO METAL SLUG 2 - 010086300486E000,010086300486E000,online;status-playable,playable,2021-04-01 19:25:52,2 +1410,ACA NEOGEO METAL SLUG - 0100EBE002B3E000,0100EBE002B3E000,status-playable,playable,2021-02-21 13:56:48,2 +1411,ACA NEOGEO MAGICIAN LORD - 01007920038F6000,01007920038F6000,online;status-playable,playable,2021-04-01 19:33:26,2 +1412,ACA NEOGEO MAGICAL DROP II,,crash;services;status-menus,menus,2020-05-26 16:48:24,1 +1413,SNK Gals Fighters,,,,2020-05-26 16:56:16,1 +1414,ESP Ra.De. Psi - 0100F9600E746000,0100F9600E746000,audio;slow;status-ingame,ingame,2024-03-07 15:05:08,4 +1415,ACA NEOGEO LEAGUE BOWLING,,crash;services;status-menus,menus,2020-05-26 17:11:04,1 +1416,ACA NEOGEO LAST RESORT - 01000D10038E6000,01000D10038E6000,online;status-playable,playable,2021-04-01 19:51:22,2 +1417,ACA NEOGEO GHOST PILOTS - 01005D700A2F8000,01005D700A2F8000,online;status-playable,playable,2021-04-01 20:26:45,2 +1418,ACA NEOGEO GAROU: MARK OF THE WOLVES - 0100CB2001DB8000,0100CB2001DB8000,online;status-playable,playable,2021-04-01 20:31:10,2 +1419,ACA NEOGEO FOOTBALL FRENZY,,status-playable,playable,2021-03-29 20:12:12,5 +1420,ACA NEOGEO FATAL FURY - 0100EE6002B48000,0100EE6002B48000,online;status-playable,playable,2021-04-01 20:36:23,2 +1421,ACA NEOGEO CROSSED SWORDS - 0100D2400AFB0000,0100D2400AFB0000,online;status-playable,playable,2021-04-01 20:42:59,2 +1422,ACA NEOGEO BLAZING STAR,,crash;services;status-menus,menus,2020-05-26 17:29:02,1 +1423,ACA NEOGEO BASEBALL STARS PROFESSIONAL - 01003FE00A2F6000,01003FE00A2F6000,online;status-playable,playable,2021-04-01 21:23:05,2 +1424,ACA NEOGEO AGGRESSORS OF DARK KOMBAT - 0100B4800AFBA000,0100B4800AFBA000,online;status-playable,playable,2021-04-01 22:48:01,2 +1425,ACA NEOGEO AERO FIGHTERS 3 - 0100B91008780000,0100B91008780000,online;status-playable,playable,2021-04-12 13:11:17,2 +1426,ACA NEOGEO 3 COUNT BOUT - 0100FC000AFC6000,0100FC000AFC6000,online;status-playable,playable,2021-04-12 13:16:42,2 +1427,ACA NEOGEO 2020 SUPER BASEBALL - 01003C400871E000,01003C400871E000,online;status-playable,playable,2021-04-12 13:23:51,2 +1428,Arcade Archives Traverse USA - 010029D006ED8000,010029D006ED8000,online;status-playable,playable,2021-04-15 8:11:06,4 +1429,Arcade Archives TERRA CRESTA,,crash;services;status-menus,menus,2020-08-18 20:20:55,3 +1430,Arcade Archives STAR FORCE - 010069F008A38000,010069F008A38000,online;status-playable,playable,2021-04-15 8:39:09,4 +1431,Arcade Archives Sky Skipper - 010008F00B054000,010008F00B054000,online;status-playable,playable,2021-04-15 8:58:09,4 +1432,Arcade Archives RYGAR - 0100C2D00981E000,0100C2D00981E000,online;status-playable,playable,2021-04-15 8:48:30,4 +1433,Arcade Archives Renegade - 010081E001DD2000,010081E001DD2000,status-playable;online,playable,2022-07-21 11:45:40,5 +1434,Arcade Archives PUNCH-OUT!! - 01001530097F8000,01001530097F8000,online;status-playable,playable,2021-03-25 22:10:55,4 +1435,Arcade Archives OMEGA FIGHTER,,crash;services;status-menus,menus,2020-08-18 20:50:54,3 +1436,Arcade Archives Ninja-Kid,,online;status-playable,playable,2021-03-26 20:55:07,4 +1437,Arcade Archives NINJA GAIDEN - 01003EF00D3B4000,01003EF00D3B4000,audio;online;status-ingame,ingame,2021-04-12 16:27:53,4 +1438,Arcade Archives MOON PATROL - 01003000097FE000,01003000097FE000,online;status-playable,playable,2021-03-26 11:42:04,4 +1439,Arcade Archives MARIO BROS. - 0100755004608000,0100755004608000,online;status-playable,playable,2021-03-26 11:31:32,4 +1440,Arcade Archives Kid's Horehore Daisakusen - 0100E7C001DE0000,0100E7C001DE0000,online;status-playable,playable,2021-04-12 16:21:29,4 +1441,Arcade Archives Kid Niki Radical Ninja - 010010B008A36000,010010B008A36000,audio;status-ingame;online,ingame,2022-07-21 11:02:04,5 +1442,Arcade Archives Ikki - 01000DB00980A000,01000DB00980A000,online;status-playable,playable,2021-03-25 23:11:28,4 +1443,Arcade Archives HEROIC EPISODE - 01009A4008A30000,01009A4008A30000,online;status-playable,playable,2021-03-25 23:01:26,4 +1444,Arcade Archives DOUBLE DRAGON II The Revenge - 01009E3001DDE000,01009E3001DDE000,online;status-playable,playable,2021-04-12 16:05:29,4 +1445,Arcade Archives DOUBLE DRAGON - 0100F25001DD0000,0100F25001DD0000,online;status-playable,playable,2021-03-25 22:44:34,4 +1446,Arcade Archives DONKEY KONG,,Needs Update;crash;services;status-menus,menus,2021-03-24 18:18:43,4 +1447,Arcade Archives CRAZY CLIMBER - 0100BB1001DD6000,0100BB1001DD6000,online;status-playable,playable,2021-03-25 22:24:15,4 +1448,Arcade Archives City CONNECTION - 010007A00980C000,010007A00980C000,online;status-playable,playable,2021-03-25 22:16:15,4 +1449,Arcade Archives 10-Yard Fight - 0100BE80097FA000,0100BE80097FA000,online;status-playable,playable,2021-03-25 21:26:41,4 +1450,Ark: Survival Evolved - 0100D4A00B284000,0100D4A00B284000,gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 0:53:56,4 +1451,Art of Balance - 01008EC006BE2000,01008EC006BE2000,gpu;status-ingame;ldn-works,ingame,2022-07-21 17:13:57,3 +1452,Aces of the Luftwaffe Squadron,,nvdec;slow;status-playable,playable,2020-05-27 12:29:42,1 +1453,Atelier Lulua ~ The Scion of Arland ~,,nvdec;status-playable,playable,2020-12-16 14:29:19,2 +1454,Apocalipsis,,deadlock;status-menus,menus,2020-05-27 12:56:37,1 +1456,Aqua Moto Racing Utopia - 0100D0D00516A000,0100D0D00516A000,status-playable,playable,2021-02-21 21:21:00,2 +1457,Arc of Alchemist - 0100C7D00E6A0000,0100C7D00E6A0000,status-playable;nvdec,playable,2022-10-07 19:15:54,3 +1458,1979 Revolution: Black Friday - 0100D1000B18C000,0100D1000B18C000,nvdec;status-playable,playable,2021-02-21 21:03:43,2 +1459,ABZU - 0100C1300BBC6000,0100C1300BBC6000,status-playable;UE4,playable,2022-07-19 15:02:52,3 +1460,Asterix & Obelix XXL 2 - 010050400BD38000,010050400BD38000,deadlock;status-ingame;nvdec,ingame,2022-07-21 17:54:14,3 +1461,Astro Bears Party,,status-playable,playable,2020-05-28 11:21:58,1 +1462,AQUA KITTY UDX - 0100AC10085CE000,0100AC10085CE000,online;status-playable,playable,2021-04-12 15:34:11,4 +1463,Assassin's Creed III Remastered - 01007F600B134000,01007F600B134000,status-boots;nvdec,boots,2024-06-25 20:12:11,4 +1464,Antiquia Lost,,status-playable,playable,2020-05-28 11:57:32,1 +1465,Animal Super Squad - 0100EFE009424000,0100EFE009424000,UE4;status-playable,playable,2021-04-23 20:50:50,4 +1466,Anima: Arcane Edition - 010033F00B3FA000,010033F00B3FA000,nvdec;status-playable,playable,2021-01-26 16:55:51,2 +1467,American Ninja Warrior: Challenge - 010089D00A3FA000,010089D00A3FA000,nvdec;status-playable,playable,2021-06-09 13:11:17,5 +1468,Air Conflicts: Pacific Carriers,,status-playable,playable,2021-01-04 10:52:50,2 +1469,Agatha Knife,,status-playable,playable,2020-05-28 12:37:58,1 +1470,ACORN Tactics - 0100DBC0081A4000,0100DBC0081A4000,status-playable,playable,2021-02-22 12:57:40,2 +1471,Anarcute - 010050900E1C6000,010050900E1C6000,status-playable,playable,2021-02-22 13:17:59,2 +1472,39 Days to Mars - 0100AF400C4CE000,0100AF400C4CE000,status-playable,playable,2021-02-21 22:12:46,2 +1473,Animal Rivals Switch - 010065B009B3A000,010065B009B3A000,status-playable,playable,2021-02-22 14:02:42,2 +1474,88 Heroes,,status-playable,playable,2020-05-28 14:13:02,1 +1475,Aegis Defenders - 01008E60065020000,01008E6006502000,status-playable,playable,2021-02-22 13:29:33,2 +1476,Jeopardy! - 01006E400AE2A000,01006E400AE2A000,audout;nvdec;online;status-playable,playable,2021-02-22 13:53:46,2 +1477,Akane - 01007F100DE52000,01007F100DE52000,status-playable;nvdec,playable,2022-07-21 0:12:18,2 +1478,Aaero - 010097A00CC0A000,010097A00CC0A000,status-playable;nvdec,playable,2022-07-19 14:49:55,4 +1479,99Vidas,,online;status-playable,playable,2020-10-29 13:00:40,3 +1480,AngerForce: Reloaded for Nintendo Switch - 010001E00A5F6000,010001E00A5F6000,status-playable,playable,2022-07-21 10:37:17,4 +1481,36 Fragments of Midnight,,status-playable,playable,2020-05-28 15:12:59,1 +1482,Akihabara - Feel the Rhythm Remixed - 010053100B0EA000,010053100B0EA000,status-playable,playable,2021-02-22 14:39:35,2 +1483,Bertram Fiddle Episode 2: A Bleaker Predicklement - 010021F00C1C0000,010021F00C1C0000,nvdec;status-playable,playable,2021-02-22 14:56:37,2 +1484,6180 the moon,,status-playable,playable,2020-05-28 15:39:24,1 +1485,Ace of Seafood - 0100FF1004D56000,0100FF1004D56000,status-playable,playable,2022-07-19 15:32:25,2 +1486,12 orbits,,status-playable,playable,2020-05-28 16:13:26,1 +1487,Access Denied - 0100A9900CB5C000,0100A9900CB5C000,status-playable,playable,2022-07-19 15:25:10,2 +1488,Air Hockey,,status-playable,playable,2020-05-28 16:44:37,1 +1489,2064: Read Only Memories,,deadlock;status-menus,menus,2020-05-28 16:53:58,1 +1490,12 is Better Than 6 - 01007F600D1B8000,01007F600D1B8000,status-playable,playable,2021-02-22 16:10:12,2 +1491,Sid Meier's Civilization VI - 010044500C182000,010044500C182000,status-playable;ldn-untested,playable,2024-04-08 16:03:40,7 +1492,Sniper Elite V2 Remastered - 0100BB000A3AA000,0100BB000A3AA000,slow;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13,5 +1493,South Park: The Fractured But Whole - 01008F2005154000,01008F2005154000,slow;status-playable;online-broken,playable,2024-07-08 17:47:28,5 +1494,SkyScrappers,,status-playable,playable,2020-05-28 22:11:25,1 +1495,Shio - 0100C2F00A568000,0100C2F00A568000,status-playable,playable,2021-02-22 16:25:09,2 +1496,NBA 2K18 - 0100760002048000,0100760002048000,gpu;status-ingame;ldn-untested,ingame,2022-08-06 14:17:51,3 +1497,Sky Force Anniversary - 010083100B5CA000,010083100B5CA000,status-playable;online-broken,playable,2022-08-12 20:50:07,2 +1498,Slay the Spire - 010026300BA4A000,010026300BA4A000,status-playable,playable,2023-01-20 15:09:26,4 +1499,Sky Gamblers: Storm Raiders - 010093D00AC38000,010093D00AC38000,gpu;audio;status-ingame;32-bit,ingame,2022-08-12 21:13:36,8 +1500,Shovel Knight: Treasure Trove,,status-playable,playable,2021-02-14 18:24:39,4 +1501,Sine Mora EX - 01002820036A8000,01002820036A8000,gpu;status-ingame;online-broken,ingame,2022-08-12 19:36:18,7 +1502,NBA Playgrounds - 0100F5A008126000,0100F5A008126000,status-playable;nvdec;online-broken;UE4,playable,2022-08-06 16:13:44,6 +1503,Shut Eye,,status-playable,playable,2020-07-23 18:08:35,2 +1504,SINNER: Sacrifice for Redemption - 0100B16009C10000,0100B16009C10000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33,5 +1505,SKYPEACE,,status-playable,playable,2020-05-29 14:14:30,1 +1506,Slain,,status-playable,playable,2020-05-29 14:26:16,1 +1507,Umihara Kawase BaZooka!,,,,2020-05-29 14:56:48,1 +1508,Sigi - A Fart for Melusina - 01007FC00B674000,01007FC00B674000,status-playable,playable,2021-02-22 16:46:58,2 +1509,Sky Ride - 0100DDB004F30000,0100DDB004F30000,status-playable,playable,2021-02-22 16:53:07,2 +1510,Soccer Slammers,,status-playable,playable,2020-05-30 7:48:14,1 +1511,Songbringer,,status-playable,playable,2020-06-22 10:42:02,3 +1512,Sky Rogue,,status-playable,playable,2020-05-30 8:26:28,1 +1513,Shovel Knight: Specter of Torment,,status-playable,playable,2020-05-30 8:34:17,1 +1514,Snow Moto Racing Freedom - 010045300516E000,010045300516E000,gpu;status-ingame;vulkan-backend-bug,ingame,2022-08-15 16:05:14,4 +1515,Snake Pass - 0100C0F0020E8000,0100C0F0020E8000,status-playable;nvdec;UE4,playable,2022-01-03 4:31:52,5 +1516,Shu,,nvdec;status-playable,playable,2020-05-30 9:08:59,1 +1517,"SOLDAM Drop, Connect, Erase",,status-playable,playable,2020-05-30 9:18:54,1 +1518,SkyTime,,slow;status-ingame,ingame,2020-05-30 9:24:51,1 +1519,NBA 2K19 - 01001FF00B544000,01001FF00B544000,crash;ldn-untested;services;status-nothing,nothing,2021-04-16 13:07:21,2 +1520,Shred!2 - Freeride MTB,,status-playable,playable,2020-05-30 14:34:09,1 +1521,Skelly Selest,,status-playable,playable,2020-05-30 15:38:18,1 +1522,Snipperclips Plus - 01008E20047DC000,01008E20047DC000,status-playable,playable,2023-02-14 20:20:13,4 +1523,SolDivide for Nintendo Switch - 0100590009C38000,0100590009C38000,32-bit;status-playable,playable,2021-06-09 14:13:03,6 +1524,Slime-san,,status-playable,playable,2020-05-30 16:15:12,1 +1525,Skies of Fury,,status-playable,playable,2020-05-30 16:40:54,1 +1526,SlabWell - 01003AD00DEAE000,01003AD00DEAE000,status-playable,playable,2021-02-22 17:02:51,2 +1527,Smoke and Sacrifice - 0100207007EB2000,0100207007EB2000,status-playable,playable,2022-08-14 12:38:27,2 +1528,Sky Gamblers - Afterburner - 010003F00CC98000,010003F00CC98000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55,5 +1529,Slice Dice & Rice - 0100F4500AA4E000,0100F4500AA4E000,online;status-playable,playable,2021-02-22 17:44:23,2 +1530,Slayaway Camp: Butcher's Cut - 0100501006494000,0100501006494000,status-playable;opengl-backend-bug,playable,2022-08-12 23:44:05,4 +1531,Snowboarding the Next Phase - 0100BE200C34A000,0100BE200C34A000,nvdec;status-playable,playable,2021-02-23 12:56:58,2 +1532,Skylanders Imaginators,,crash;services;status-boots,boots,2020-05-30 18:49:18,1 +1533,Slime-san Superslime Edition,,status-playable,playable,2020-05-30 19:08:08,1 +1534,Skee-Ball,,status-playable,playable,2020-11-16 4:44:07,3 +1535,Marvel Ultimate Alliance 3: The Black Order - 010060700AC50000,010060700AC50000,status-playable;nvdec;ldn-untested,playable,2024-02-14 19:51:51,33 +1536,The Elder Scrolls V: Skyrim - 01000A10041EA000,01000A10041EA000,gpu;status-ingame;crash,ingame,2024-07-14 3:21:31,7 +1537,Risk of Rain,,,,2020-05-31 22:32:45,1 +1538,Risk of Rain 2 - 010076D00E4BA000,010076D00E4BA000,status-playable;online-broken,playable,2024-03-04 17:01:05,6 +1539,The Mummy Demastered - 0100496004194000,0100496004194000,status-playable,playable,2021-02-23 13:11:27,2 +1540,Teslagrad - 01005C8005F34000,01005C8005F34000,status-playable,playable,2021-02-23 14:41:02,2 +1541,Pushy and Pully in Blockland,,status-playable,playable,2020-07-04 11:44:41,3 +1542,The Raven Remastered - 010058A00BF1C000,010058A00BF1C000,status-playable;nvdec,playable,2022-08-22 20:02:47,2 +1543,Reed Remastered,,,,2020-05-31 23:15:15,1 +1544,The Infectious Madness of Doctor Dekker - 01008940086E0000,01008940086E0000,status-playable;nvdec,playable,2022-08-22 16:45:01,3 +1545,The Fall,,gpu;status-ingame,ingame,2020-05-31 23:31:16,1 +1546,The Fall Part 2: Unbound,,status-playable,playable,2021-11-06 2:18:08,2 +1547,The Red Strings Club,,status-playable,playable,2020-06-01 10:51:18,1 +1548,Omega Labyrinth Life - 01001D600E51A000,01001D600E51A000,status-playable,playable,2021-02-23 21:03:03,2 +1549,The Mystery of the Hudson Case,,status-playable,playable,2020-06-01 11:03:36,1 +1550,Tennis World Tour - 0100092006814000,0100092006814000,status-playable;online-broken,playable,2022-08-22 14:27:10,7 +1551,The Lost Child - 01008A000A404000,01008A000A404000,nvdec;status-playable,playable,2021-02-23 15:44:20,2 +1552,Little Misfortune - 0100E7000E826000,0100E7000E826000,nvdec;status-playable,playable,2021-02-23 20:39:44,2 +1553,The End is Nigh,,status-playable,playable,2020-06-01 11:26:45,1 +1554,The Caligula Effect: Overdose,,UE4;gpu;status-ingame,ingame,2021-01-04 11:07:50,2 +1555,The Flame in the Flood: Complete Edition - 0100C38004DCC000,0100C38004DCC000,gpu;status-ingame;nvdec;UE4,ingame,2022-08-22 16:23:49,4 +1556,The Journey Down: Chapter One - 010052C00B184000,010052C00B184000,nvdec;status-playable,playable,2021-02-24 13:32:41,2 +1557,The Journey Down: Chapter Two,,nvdec;status-playable,playable,2021-02-24 13:32:13,2 +1558,The Journey Down: Chapter Three - 01006BC00B188000,01006BC00B188000,nvdec;status-playable,playable,2021-02-24 13:45:27,2 +1559,The Mooseman - 010033300AC1A000,010033300AC1A000,status-playable,playable,2021-02-24 12:58:57,2 +1560,The Long Reach - 010052B003A38000,010052B003A38000,nvdec;status-playable,playable,2021-02-24 14:09:48,2 +1561,Asdivine Kamura,,,,2020-06-01 15:04:50,1 +1562,THE LAST REMNANT Remastered - 0100AC800D022000,0100AC800D022000,status-playable;nvdec;UE4,playable,2023-02-09 17:24:44,7 +1563,The Princess Guide - 0100E6A00B960000,0100E6A00B960000,status-playable,playable,2021-02-24 14:23:34,2 +1564,The LEGO NINJAGO Movie Video Game - 01007FC00206E000,01007FC00206E000,status-nothing;crash,nothing,2022-08-22 19:12:53,3 +1565,The Next Penelope - 01000CF0084BC000,01000CF0084BC000,status-playable,playable,2021-01-29 16:26:11,2 +1566,Tennis,,status-playable,playable,2020-06-01 20:50:36,1 +1567,The King's Bird - 010020500BD98000,010020500BD98000,status-playable,playable,2022-08-22 19:07:46,2 +1568,The First Tree - 010098800A1E4000,010098800A1E4000,status-playable,playable,2021-02-24 15:51:05,2 +1569,The Jackbox Party Pack - 0100AE5003EE6000,0100AE5003EE6000,status-playable;online-working,playable,2023-05-28 9:28:40,4 +1570,The Jackbox Party Pack 2 - 010015D003EE4000,010015D003EE4000,status-playable;online-working,playable,2022-08-22 18:23:40,3 +1571,The Jackbox Party Pack 3 - 0100CC80013D6000,0100CC80013D6000,slow;status-playable;online-working,playable,2022-08-22 18:41:06,2 +1572,The Jackbox Party Pack 4 - 0100E1F003EE8000,0100E1F003EE8000,status-playable;online-working,playable,2022-08-22 18:56:34,2 +1573,The LEGO Movie 2 - Videogame - 0100A4400BE74000,0100A4400BE74000,status-playable,playable,2023-03-01 11:23:37,4 +1574,The Gardens Between - 0100B13007A6A000,0100B13007A6A000,status-playable,playable,2021-01-29 16:16:53,2 +1575,The Bug Butcher,,status-playable,playable,2020-06-03 12:02:04,1 +1576,Funghi Puzzle Funghi Explosion,,status-playable,playable,2020-11-23 14:17:41,3 +1577,The Escapists: Complete Edition - 01001B700BA7C000,01001B700BA7C000,status-playable,playable,2021-02-24 17:50:31,2 +1578,The Escapists 2,,nvdec;status-playable,playable,2020-09-24 12:31:31,2 +1579,TENGAI for Nintendo Switch,,32-bit;status-playable,playable,2020-11-25 19:52:26,4 +1580,The Book of Unwritten Tales 2 - 010062500BFC0000,010062500BFC0000,status-playable,playable,2021-06-09 14:42:53,3 +1581,The Bridge,,status-playable,playable,2020-06-03 13:53:26,1 +1582,Ai: the Somnium Files - 010089B00D09C000,010089B00D09C000,status-playable;nvdec,playable,2022-09-04 14:45:06,2 +1583,The Coma: Recut,,status-playable,playable,2020-06-03 15:11:23,1 +1584,Ara Fell: Enhanced Edition,,,,2020-06-03 15:11:30,1 +1585,The Final Station - 0100CDC00789E000,0100CDC00789E000,status-playable;nvdec,playable,2022-08-22 15:54:39,2 +1586,The Count Lucanor - 01000850037C0000,01000850037C0000,status-playable;nvdec,playable,2022-08-22 15:26:37,3 +1587,Testra's Escape,,status-playable,playable,2020-06-03 18:21:14,1 +1588,The Low Road - 0100BAB00A116000,0100BAB00A116000,status-playable,playable,2021-02-26 13:23:22,2 +1589,The Adventure Pals - 01008ED0087A4000,01008ED0087A4000,status-playable,playable,2022-08-22 14:48:52,2 +1591,The Longest Five Minutes - 0100CE1004E72000,0100CE1004E72000,gpu;status-boots,boots,2023-02-19 18:33:11,7 +1592,The Inner World,,nvdec;status-playable,playable,2020-06-03 21:22:29,1 +1593,The Inner World - The Last Wind Monk,,nvdec;status-playable,playable,2020-11-16 13:09:40,3 +1594,The MISSING: J.J. Macfield and the Island of Memories - 0100F1B00B456000,0100F1B00B456000,status-playable,playable,2022-08-22 19:36:18,2 +1595,Jim Is Moving Out!,,deadlock;status-ingame,ingame,2020-06-03 22:05:19,1 +1596,The Darkside Detective,,status-playable,playable,2020-06-03 22:16:18,1 +1597,Tesla vs Lovecraft - 0100FBC007EAE000,0100FBC007EAE000,status-playable,playable,2023-11-21 6:19:36,6 +1598,The Lion's Song - 0100735004898000,0100735004898000,status-playable,playable,2021-06-09 15:07:16,3 +1599,Tennis in the Face - 01002970080AA000,01002970080AA000,status-playable,playable,2022-08-22 14:10:54,4 +1600,The Adventures of Elena Temple,,status-playable,playable,2020-06-03 23:15:35,1 +1602,The friends of Ringo Ishikawa - 010030700CBBC000,010030700CBBC000,status-playable,playable,2022-08-22 16:33:17,4 +1603,Redeemer: Enhanced Edition - 01000D100DCF8000,01000D100DCF8000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24,3 +1604,Alien Escape,,status-playable,playable,2020-06-03 23:43:18,1 +1605,LEGO DC Super-Villains - 010070D009FEC000,010070D009FEC000,status-playable,playable,2021-05-27 18:10:37,3 +1606,LEGO Worlds,,crash;slow;status-ingame,ingame,2020-07-17 13:35:39,2 +1607,LEGO The Incredibles - 0100A01006E00000,0100A01006E00000,status-nothing;crash,nothing,2022-08-03 18:36:59,5 +1608,LEGO Harry Potter Collection - 010052A00B5D2000,010052A00B5D2000,status-ingame;crash,ingame,2024-01-31 10:28:07,8 +1609,Reed 2,,,,2020-06-04 16:43:29,1 +1610,The Men of Yoshiwara: Ohgiya,,,,2020-06-04 17:00:22,1 +1611,The Rainsdowne Players,,,,2020-06-04 17:16:02,1 +1612,Tonight we Riot - 0100D400100F8000,0100D400100F8000,status-playable,playable,2021-02-26 15:55:09,2 +1613,Skelattack - 01001A900F862000,01001A900F862000,status-playable,playable,2021-06-09 15:26:26,3 +1614,HyperParasite - 010061400ED90000,010061400ED90000,status-playable;nvdec;UE4,playable,2022-09-27 22:05:44,7 +1615,Climbros,,,,2020-06-04 21:02:21,1 +1616,Sweet Witches - 0100D6D00EC2C000,0100D6D00EC2C000,status-playable;nvdec,playable,2022-10-20 14:56:37,3 +1617,Whispering Willows - 010015A00AF1E000,010015A00AF1E000,status-playable;nvdec,playable,2022-09-30 22:33:05,4 +1618,The Outer Worlds - 0100626011656000,0100626011656000,gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32,3 +1619,RADIO HAMMER STATION - 01008FA00ACEC000,01008FA00ACEC000,audout;status-playable,playable,2021-02-26 20:20:06,2 +1620,Light Tracer - 010087700D07C000,010087700D07C000,nvdec;status-playable,playable,2021-05-05 19:15:43,2 +1621,Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE - 0100D4300EBF8000,0100D4300EBF8000,status-nothing;crash;Needs More Attention;Needs Update,nothing,2022-02-09 8:57:44,2 +1622,The Amazing Shinsengumi: Heroes in Love,,,,2020-06-06 9:27:49,1 +1623,Snow Battle Princess Sayuki,,,,2020-06-06 11:59:03,1 +1624,Good Job!,,status-playable,playable,2021-03-02 13:15:55,3 +1625,Ghost Blade HD - 010063200C588000,010063200C588000,status-playable;online-broken,playable,2022-09-13 21:51:21,5 +1626,HardCube - 01000C90117FA000,01000C90117FA000,status-playable,playable,2021-05-05 18:33:03,2 +1627,STAR OCEAN First Departure R - 0100EBF00E702000,0100EBF00E702000,nvdec;status-playable,playable,2021-07-05 19:29:16,1 +1629,Hair Mower 3D,,,,2020-06-08 2:29:17,1 +1630,Clubhouse Games: 51 Worldwide Classics - 010047700D540000,010047700D540000,status-playable;ldn-works,playable,2024-05-21 16:12:57,5 +1631,Torchlight 2,,status-playable,playable,2020-07-27 14:18:37,2 +1632,Creature in the Well,,UE4;gpu;status-ingame,ingame,2020-11-16 12:52:40,3 +1633,Panty Party,,,,2020-06-08 14:06:02,1 +1634,DEADLY PREMONITION Origins - 0100EBE00F22E000,0100EBE00F22E000,32-bit;status-playable;nvdec,playable,2024-03-25 12:47:46,8 +1635,Pillars of Eternity - 0100D6200E130000,0100D6200E130000,status-playable,playable,2021-02-27 0:24:21,2 +1636,Jump King,,status-playable,playable,2020-06-09 10:12:39,1 +1638,Bug Fables,,status-playable,playable,2020-06-09 11:27:00,1 +1639,DOOM 3 - 010029D00E740000,010029D00E740000,status-menus;crash,menus,2024-08-03 5:25:47,8 +1640,Raiden V: Director's Cut - 01002B000D97E000,01002B000D97E000,deadlock;status-boots;nvdec,boots,2024-07-12 7:31:46,6 +1641,Fantasy Strike - 0100944003820000,0100944003820000,online;status-playable,playable,2021-02-27 1:59:18,2 +1642,Hell Warders - 0100A4600E27A000,0100A4600E27A000,online;status-playable,playable,2021-02-27 2:31:03,2 +1643,THE NINJA SAVIORS Return of the Warriors - 01001FB00E386000,01001FB00E386000,online;status-playable,playable,2021-03-25 23:48:07,5 +1644,DOOM (1993) - 010018900DD00000,010018900DD00000,status-menus;nvdec;online-broken,menus,2022-09-06 13:32:19,4 +1645,DOOM 2 - 0100D4F00DD02000,0100D4F00DD02000,nvdec;online;status-playable,playable,2021-06-03 20:10:01,5 +1646,Songbird Symphony - 0100E5400BF94000,0100E5400BF94000,status-playable,playable,2021-02-27 2:44:04,2 +1647,Titans Pinball,,slow;status-playable,playable,2020-06-09 16:53:52,1 +1648,TERRORHYTHM (TRRT) - 010043700EB68000,010043700EB68000,status-playable,playable,2021-02-27 13:18:14,2 +1649,Pawarumi - 0100A56006CEE000,0100A56006CEE000,status-playable;online-broken,playable,2022-09-10 15:19:33,3 +1650,Rise: Race the Future - 01006BA00E652000,01006BA00E652000,status-playable,playable,2021-02-27 13:29:06,2 +1651,Run the Fan - 010074F00DE4A000,010074F00DE4A000,status-playable,playable,2021-02-27 13:36:28,2 +1652,Tetsumo Party,,status-playable,playable,2020-06-09 22:39:55,1 +1653,Snipperclips - 0100704000B3A000,0100704000B3A000,status-playable,playable,2022-12-05 12:44:55,2 +1654,The Tower of Beatrice - 010047300EBA6000,010047300EBA6000,status-playable,playable,2022-09-12 16:51:42,1 +1655,FIA European Truck Racing Championship - 01007510040E8000,01007510040E8000,status-playable;nvdec,playable,2022-09-06 17:51:59,5 +1656,Bear With Me - The Lost Robots - 010020700DE04000,010020700DE04000,nvdec;status-playable,playable,2021-02-27 14:20:10,1 +1658,Mutant Year Zero: Road to Eden - 0100E6B00DEA4000,0100E6B00DEA4000,status-playable;nvdec;UE4,playable,2022-09-10 13:31:10,4 +1659,Solo: Islands of the Heart - 010008600D1AC000,010008600D1AC000,gpu;status-ingame;nvdec,ingame,2022-09-11 17:54:43,3 +1660,1971 PROJECT HELIOS - 0100829010F4A000,0100829010F4A000,status-playable,playable,2021-04-14 13:50:19,1 +1661,Damsel - 0100BD2009A1C000,0100BD2009A1C000,status-playable,playable,2022-09-06 11:54:39,3 +1662,The Forbidden Arts - 01007700D4AC000,,status-playable,playable,2021-01-26 16:26:24,1 +1663,Turok 2: Seeds of Evil - 0100CDC00D8D6000,0100CDC00D8D6000,gpu;status-ingame;vulkan,ingame,2022-09-12 17:50:05,6 +1664,"Tactics V: ""Obsidian Brigade"" - 01007C7006AEE000",01007C7006AEE000,status-playable,playable,2021-02-28 15:09:42,1 +1665,SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION - 01005DF00DC26000,01005DF00DC26000,UE4;gpu;online;status-ingame,ingame,2021-06-09 16:58:50,4 +1666,Subdivision Infinity DX - 010001400E474000,010001400E474000,UE4;crash;status-boots,boots,2021-03-03 14:26:46,1 +1667,#RaceDieRun,,status-playable,playable,2020-07-04 20:23:16,2 +1668,Wreckin' Ball Adventure - 0100C5D00EDB8000,0100C5D00EDB8000,status-playable;UE4,playable,2022-09-12 18:56:28,3 +1669,PictoQuest - 010043B00E1CE000,010043B00E1CE000,status-playable,playable,2021-02-27 15:03:16,1 +1670,VASARA Collection - 0100FE200AF48000,0100FE200AF48000,nvdec;status-playable,playable,2021-02-28 15:26:10,1 +1671,The Vanishing of Ethan Carter - 0100BCF00E970000,0100BCF00E970000,UE4;status-playable,playable,2021-06-09 17:14:47,2 +1672,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo - 010068300E08E000",010068300E08E000,gpu;status-ingame;nvdec,ingame,2022-11-20 16:18:45,1 +1674,Demon's Tier+ - 0100161011458000,0100161011458000,status-playable,playable,2021-06-09 17:25:36,2 +1676,INSTANT SPORTS - 010099700D750000,010099700D750000,status-playable,playable,2022-09-09 12:59:40,2 +1677,Friday the 13th: The Game - 010092A00C4B6000,010092A00C4B6000,status-playable;nvdec;online-broken;UE4,playable,2022-09-06 17:33:27,4 +1678,Arcade Archives VS. GRADIUS - 01004EC00E634000,01004EC00E634000,online;status-playable,playable,2021-04-12 14:53:58,4 +1679,Desktop Rugby,,,,2020-06-10 23:21:11,1 +1680,Divinity Original Sin 2 - 010027400CDC6000,010027400CDC6000,services;status-menus;crash;online-broken;regression,menus,2023-08-13 17:20:03,6 +1681,Grandia HD Collection - 0100E0600BBC8000,0100E0600BBC8000,status-boots;crash,boots,2024-08-19 4:29:48,11 +1682,Bubsy: Paws on Fire! - 0100DBE00C554000,0100DBE00C554000,slow;status-ingame,ingame,2023-08-24 2:44:51,4 +1683,River City Girls,,nvdec;status-playable,playable,2020-06-10 23:44:09,1 +1684,Super Dodgeball Beats,,,,2020-06-10 23:45:22,1 +1685,RAD - 010024400C516000,010024400C516000,gpu;status-menus;crash;UE4,menus,2021-11-29 2:01:56,3 +1686,Super Jumpy Ball,,status-playable,playable,2020-07-04 18:40:36,3 +1687,Headliner: NoviNews - 0100EFE00E1DC000,0100EFE00E1DC000,online;status-playable,playable,2021-03-01 11:36:00,2 +1688,Atelier Ryza: Ever Darkness & the Secret Hideout - 0100D1900EC80000,0100D1900EC80000,status-playable,playable,2023-10-15 16:36:50,2 +1689,Ancestors Legacy - 01009EE0111CC000,01009EE0111CC000,status-playable;nvdec;UE4,playable,2022-10-01 12:25:36,5 +1690,Resolutiion - 0100E7F00FFB8000,0100E7F00FFB8000,crash;status-boots,boots,2021-04-25 21:57:56,3 +1691,Puzzle Quest: The Legend Returns,,,,2020-06-11 10:05:15,1 +1692,FAR: Lone Sails - 010022700E7D6000,010022700E7D6000,status-playable,playable,2022-09-06 16:33:05,2 +1693,Awesome Pea 2 - 0100B7D01147E000,0100B7D01147E000,status-playable,playable,2022-10-01 12:34:19,3 +1694,Arcade Archives PLUS ALPHA,,audio;status-ingame,ingame,2020-07-04 20:47:55,3 +1695,Caveblazers - 01001A100C0E8000,01001A100C0E8000,slow;status-ingame,ingame,2021-06-09 17:57:28,3 +1696,Piofiore no banshou - ricordo,,,,2020-06-11 19:14:52,1 +1697,Raining Blobs,,,,2020-06-11 19:32:04,1 +1698,Hyper Jam,,UE4;crash;status-boots,boots,2020-12-15 22:52:11,2 +1699,The Midnight Sanctuary - 0100DEC00B2BC000,0100DEC00B2BC000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32,4 +1700,Indiecalypse,,nvdec;status-playable,playable,2020-06-11 20:19:09,1 +1701,Liberated - 0100C8000F146000,0100C8000F146000,gpu;status-ingame;nvdec,ingame,2024-07-04 4:58:24,5 +1702,Nelly Cootalot,,status-playable,playable,2020-06-11 20:55:42,1 +1703,Corpse Party: Blood Drive - 010016400B1FE000,010016400B1FE000,nvdec;status-playable,playable,2021-03-01 12:44:23,2 +1704,Professor Lupo and his Horrible Pets,,status-playable,playable,2020-06-12 0:08:45,1 +1705,Atelier Meruru ~ The Apprentice of Arland ~ DX,,nvdec;status-playable,playable,2020-06-12 0:50:48,1 +1706,Atelier Totori ~ The Adventurer of Arland ~ DX,,nvdec;status-playable,playable,2020-06-12 1:04:56,1 +1707,Red Wings - Aces of the Sky,,status-playable,playable,2020-06-12 1:19:53,1 +1708,L.F.O. - Lost Future Omega - ,,UE4;deadlock;status-boots,boots,2020-10-16 12:16:44,2 +1709,One Night Stand,,,,2020-06-12 16:34:34,1 +1710,They Came From the Sky,,status-playable,playable,2020-06-12 16:38:19,1 +1711,Nurse Love Addiction,,,,2020-06-12 16:48:29,1 +1712,THE TAKEOVER,,nvdec,,2020-06-12 16:52:28,1 +1713,Totally Reliable Delivery Service - 0100512010728000,0100512010728000,status-playable;online-broken,playable,2024-09-27 19:32:22,7 +1714,Nurse Love Syndrome - 010003701002C000,010003701002C000,status-playable,playable,2022-10-13 10:05:22,2 +1715,Undead and Beyond - 010076F011F54000,010076F011F54000,status-playable;nvdec,playable,2022-10-04 9:11:18,2 +1716,Borderlands: Game of the Year Edition - 010064800F66A000,010064800F66A000,slow;status-ingame;online-broken;ldn-untested,ingame,2023-07-23 21:10:36,3 +1717,TurtlePop: Journey to Freedom,,status-playable,playable,2020-06-12 17:45:39,1 +1718,DAEMON X MACHINA - 0100B6400CA56000,0100B6400CA56000,UE4;audout;ldn-untested;nvdec;status-playable,playable,2021-06-09 19:22:29,7 +1719,Blasphemous - 0100698009C6E000,0100698009C6E000,nvdec;status-playable,playable,2021-03-01 12:15:31,2 +1720,The Sinking City - 010028D00BA1A000,010028D00BA1A000,status-playable;nvdec;UE4,playable,2022-09-12 16:41:55,4 +1721,Battle Supremacy - Evolution - 010099B00E898000,010099B00E898000,gpu;status-boots;nvdec,boots,2022-02-17 9:02:50,3 +1722,STEINS;GATE: My Darling's Embrace - 0100CB400E9BC000,0100CB400E9BC000,status-playable;nvdec,playable,2022-11-20 16:48:34,3 +1723,Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition - 01006C300E9F0000,01006C300E9F0000,status-playable;UE4,playable,2021-11-27 12:27:11,8 +1724,Star Wars™ Pinball - 01006DA00DEAC000,01006DA00DEAC000,status-playable;online-broken,playable,2022-09-11 18:53:31,7 +1725,Space Cows,,UE4;crash;status-menus,menus,2020-06-15 11:33:20,1 +1726,Ritual - 0100BD300F0EC000,0100BD300F0EC000,status-playable,playable,2021-03-02 13:51:19,2 +1727,Snooker 19 - 01008DA00CBBA000,01008DA00CBBA000,status-playable;nvdec;online-broken;UE4,playable,2022-09-11 17:43:22,4 +1728,Sydney Hunter and the Curse of the Mayan,,status-playable,playable,2020-06-15 12:15:57,1 +1729,CONTRA: ROGUE CORPS,,crash;nvdec;regression;status-menus,menus,2021-01-07 13:23:35,8 +1730,Tyd wag vir Niemand - 010073A00C4B2000,010073A00C4B2000,status-playable,playable,2021-03-02 13:39:53,2 +1731,Detective Dolittle - 010030600E65A000,010030600E65A000,status-playable,playable,2021-03-02 14:03:59,2 +1733,Rebel Cops - 0100D9B00E22C000,0100D9B00E22C000,status-playable,playable,2022-09-11 10:02:53,2 +1734,Sayonara Wild Hearts - 010010A00A95E000,010010A00A95E000,status-playable,playable,2023-10-23 3:20:01,2 +1735,Neon Drive - 010032000EAC6000,010032000EAC6000,status-playable,playable,2022-09-10 13:45:48,2 +1736,GRID Autosport - 0100DC800A602000,0100DC800A602000,status-playable;nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45,5 +1737,DISTRAINT: Deluxe Edition,,status-playable,playable,2020-06-15 23:42:24,1 +1738,Jet Kave Adventure - 0100E4900D266000,0100E4900D266000,status-playable;nvdec,playable,2022-09-09 14:50:39,2 +1739,LEGO Jurassic World - 01001C100E772000,01001C100E772000,status-playable,playable,2021-05-27 17:00:20,3 +1740,Neo Cab Demo,,crash;status-boots,boots,2020-06-16 0:14:00,1 +1741,Reel Fishing: Road Trip Adventure - 010007C00E558000,010007C00E558000,status-playable,playable,2021-03-02 16:06:43,2 +1742,Zombie Army Trilogy,,ldn-untested;online;status-playable,playable,2020-12-16 12:02:28,2 +1743,Project Warlock,,status-playable,playable,2020-06-16 10:50:41,1 +1744,Super Toy Cars 2 - 0100C6800D770000,0100C6800D770000,gpu;regression;status-ingame,ingame,2021-03-02 20:15:15,2 +1745,Call of Cthulhu - 010046000EE40000,010046000EE40000,status-playable;nvdec;UE4,playable,2022-12-18 3:08:30,5 +1746,Overpass - 01008EA00E816000,01008EA00E816000,status-playable;online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47,6 +1747,The Little Acre - 0100A5000D590000,0100A5000D590000,nvdec;status-playable,playable,2021-03-02 20:22:27,2 +1748,Lost Horizon 2,,nvdec;status-playable,playable,2020-06-16 12:02:12,1 +1749,Rogue Robots,,status-playable,playable,2020-06-16 12:16:11,1 +1750,Skelittle: A Giant Party!! - 01008E700F952000,01008E700F952000,status-playable,playable,2021-06-09 19:08:34,3 +1751,Magazine Mogul - 01004A200E722000,01004A200E722000,status-playable;loader-allocator,playable,2022-10-03 12:05:34,2 +1752,Dead by Daylight - 01004C400CF96000,01004C400CF96000,status-boots;nvdec;online-broken;UE4,boots,2022-09-13 14:32:13,4 +1753,Ori and the Blind Forest: Definitive Edition - 010061D00DB74000,010061D00DB74000,status-playable;nvdec;online-broken,playable,2022-09-14 19:58:13,4 +1754,Northgard - 0100A9E00D97A000,0100A9E00D97A000,status-menus;crash,menus,2022-02-06 2:05:35,4 +1755,Freedom Finger - 010082B00EE50000,010082B00EE50000,nvdec;status-playable,playable,2021-06-09 19:31:30,4 +1756,Atelier Shallie: Alchemists of the Dusk Sea DX,,nvdec;status-playable,playable,2020-11-25 20:54:12,2 +1757,Dragon Quest - 0100EFC00EFB2000,0100EFC00EFB2000,gpu;status-boots,boots,2021-11-09 3:31:32,6 +1758,Dragon Quest II: Luminaries of the Legendary Line - 010062200EFB4000,010062200EFB4000,status-playable,playable,2022-09-13 16:44:11,7 +1759,Atelier Ayesha: The Alchemist of Dusk DX - 0100D9D00EE8C000,0100D9D00EE8C000,status-menus;crash;nvdec;Needs Update,menus,2021-11-24 7:29:54,2 +1760,Dragon Quest III: The Seeds of Salvation - 010015600EFB6000,010015600EFB6000,gpu;status-boots,boots,2021-11-09 3:38:34,6 +1761,Habroxia,,status-playable,playable,2020-06-16 23:04:42,1 +1762,Petoons Party - 010044400EEAE000,010044400EEAE000,nvdec;status-playable,playable,2021-03-02 21:07:58,2 +1763,Fight'N Rage,,status-playable,playable,2020-06-16 23:35:19,1 +1764,Cyber Protocol,,nvdec;status-playable,playable,2020-09-28 14:47:40,2 +1765,Barry Bradford's Putt Panic Party,,nvdec;status-playable,playable,2020-06-17 1:08:34,1 +1766,Potata: Fairy Flower,,nvdec;status-playable,playable,2020-06-17 9:51:34,1 +1767,Kawaii Deathu Desu,,,,2020-06-17 9:59:15,1 +1768,The Spectrum Retreat - 010041C00A68C000,010041C00A68C000,status-playable,playable,2022-10-03 18:52:40,2 +1769,Moero Crystal H - 01004EB0119AC000,01004EB0119AC000,32-bit;status-playable;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22,15 +1770,Modern Combat Blackout - 0100D8700B712000,0100D8700B712000,crash;status-nothing,nothing,2021-03-29 19:47:15,2 +1771,Forager - 01001D200BCC4000,01001D200BCC4000,status-menus;crash,menus,2021-11-24 7:10:17,5 +1772,Ultimate Ski Jumping 2020 - 01006B601117E000,01006B601117E000,online;status-playable,playable,2021-03-02 20:54:11,2 +1773,Strangers of the Power 3,,,,2020-06-17 14:45:52,1 +1774,Little Triangle,,status-playable,playable,2020-06-17 14:46:26,1 +1775,Nice Slice,,nvdec;status-playable,playable,2020-06-17 15:13:27,1 +1776,Project Starship,,,,2020-06-17 15:33:18,1 +1777,Puyo Puyo Champions,,online;status-playable,playable,2020-06-19 11:35:08,1 +1778,Shantae and the Seven Sirens,,nvdec;status-playable,playable,2020-06-19 12:23:40,1 +1779,SYNAPTIC DRIVE,,online;status-playable,playable,2020-09-07 13:44:05,4 +1780,XCOM 2 Collection - 0100D0B00FB74000,0100D0B00FB74000,gpu;status-ingame;crash,ingame,2022-10-04 9:38:30,14 +1781,BioShock Remastered - 0100AD10102B2000,0100AD10102B2000,services-horizon;status-boots;crash;Needs Update,boots,2024-06-06 1:08:52,6 +1782,Burnout Paradise Remastered - 0100DBF01000A000,0100DBF01000A000,nvdec;online;status-playable,playable,2021-06-13 2:54:46,4 +1783,Adam's Venture: Origins - 0100C0C0040E4000,0100C0C0040E4000,status-playable,playable,2021-03-04 18:43:57,2 +1784,"Invisible, Inc.",,crash;status-nothing,nothing,2021-01-29 16:28:13,2 +1785,Vektor Wars - 010098400E39E000,010098400E39E000,status-playable;online-broken;vulkan-backend-bug,playable,2022-10-04 9:23:46,3 +1786,Flux8,,nvdec;status-playable,playable,2020-06-19 20:55:11,1 +1787,Beyond Enemy Lines: Covert Operations - 010056500CAD8000,010056500CAD8000,status-playable;UE4,playable,2022-10-01 13:11:50,4 +1788,Genetic Disaster,,status-playable,playable,2020-06-19 21:41:12,1 +1789,Castle Pals - 0100DA2011F18000,0100DA2011F18000,status-playable,playable,2021-03-04 21:00:33,2 +1790,BioShock 2 Remastered - 01002620102C6000,01002620102C6000,services;status-nothing,nothing,2022-10-29 14:39:22,3 +1791,BioShock Infinite: The Complete Edition - 0100D560102C8000,0100D560102C8000,services-horizon;status-nothing;crash,nothing,2024-08-11 21:35:01,3 +1792,Borderlands 2: Game of the Year Edition - 010096F00FF22000,010096F00FF22000,status-playable,playable,2022-04-22 18:35:07,4 +1793,Borderlands: The Pre-Sequel Ultimate Edition - 010007400FF24000,010007400FF24000,nvdec;status-playable,playable,2021-06-09 20:17:10,3 +1794,The Coma 2: Vicious Sisters,,gpu;status-ingame,ingame,2020-06-20 12:51:51,1 +1795,Roll'd,,status-playable,playable,2020-07-04 20:24:01,3 +1796,Big Drunk Satanic Massacre - 01002FA00DE72000,01002FA00DE72000,status-playable,playable,2021-03-04 21:28:22,2 +1797,LUXAR - 0100EC2011A80000,0100EC2011A80000,status-playable,playable,2021-03-04 21:11:57,2 +1798,OneWayTicket,,UE4;status-playable,playable,2020-06-20 17:20:49,1 +1799,Radiation City - 0100DA400E07E000,0100DA400E07E000,status-ingame;crash,ingame,2022-09-30 11:15:04,2 +1800,Arcade Spirits,,status-playable,playable,2020-06-21 11:45:03,1 +1801,Bring Them Home - 01000BF00BE40000,01000BF00BE40000,UE4;status-playable,playable,2021-04-12 14:14:43,3 +1802,Fly Punch Boom!,,online;status-playable,playable,2020-06-21 12:06:11,1 +1803,Xenoblade Chronicles Definitive Edition - 0100FF500E34A000,0100FF500E34A000,status-playable;nvdec,playable,2024-05-04 20:12:41,25 +1805,A Winter's Daydream,,,,2020-06-22 14:52:38,1 +1806,DEAD OR SCHOOL - 0100A5000F7AA000,0100A5000F7AA000,status-playable;nvdec,playable,2022-09-06 12:04:09,2 +1807,Biolab Wars,,,,2020-06-22 15:50:34,1 +1808,Worldend Syndrome,,status-playable,playable,2021-01-03 14:16:32,3 +1809,The Tiny Bang Story - 01009B300D76A000,01009B300D76A000,status-playable,playable,2021-03-05 15:39:05,2 +1810,Neo Cab - 0100EBB00D2F4000,0100EBB00D2F4000,status-playable,playable,2021-04-24 0:27:58,3 +1811,Sniper Elite 3 Ultimate Edition - 010075A00BA14000,010075A00BA14000,status-playable;ldn-untested,playable,2024-04-18 7:47:49,7 +1812,Boku to Nurse no Kenshuu Nisshi - 010093700ECEC000,010093700ECEC000,status-playable,playable,2022-11-21 20:38:34,2 +1813,80 Days,,status-playable,playable,2020-06-22 21:43:01,1 +1814,Mirror,,,,2020-06-22 21:46:55,1 +1815,SELFY COLLECTION Dream Stylist,,,,2020-06-22 22:15:25,1 +1817,G-MODE Archives 4 Beach Volleyball Girl Drop,,,,2020-06-22 22:36:36,1 +1818,Star Horizon,,,,2020-06-22 23:03:45,1 +1819,To the Moon,,status-playable,playable,2021-03-20 15:33:38,4 +1820,Darksiders II Deathinitive Edition - 010071800BA98000,010071800BA98000,gpu;status-ingame;nvdec;online-broken,ingame,2024-06-26 0:37:25,6 +1821,SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated - 010062800D39C000,010062800D39C000,status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34,9 +1822,Sleep Tight - 01004AC0081DC000,01004AC0081DC000,gpu;status-ingame;UE4,ingame,2022-08-13 0:17:32,5 +1823,SUPER ROBOT WARS V,,online;status-playable,playable,2020-06-23 12:56:37,1 +1824,Ghostbusters: The Video Game Remastered - 010008A00F632000,010008A00F632000,status-playable;nvdec,playable,2021-09-17 7:26:57,3 +1825,FIFA 20 Legacy Edition - 01005DE00D05C000,01005DE00D05C000,gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20,5 +1826,VARIABLE BARRICADE NS - 010045C0109F2000,010045C0109F2000,status-playable;nvdec,playable,2022-02-26 15:50:13,2 +1827,Super Cane Magic ZERO - 0100D9B00DB5E000,0100D9B00DB5E000,status-playable,playable,2022-09-12 15:33:46,2 +1829,Whipsey and the Lost Atlas,,status-playable,playable,2020-06-23 20:24:14,1 +1830,FUZE4 - 0100EAD007E98000,0100EAD007E98000,status-playable;vulkan-backend-bug,playable,2022-09-06 19:25:01,4 +1831,Legend of the Skyfish,,status-playable,playable,2020-06-24 13:04:22,1 +1832,Grand Brix Shooter,,slow;status-playable,playable,2020-06-24 13:23:54,1 +1833,Pokémon Café Mix - 010072400E04A000,010072400E04A000,status-playable,playable,2021-08-17 20:00:04,3 +1834,BULLETSTORM: DUKE OF SWITCH EDITION - 01003DD00D658000,01003DD00D658000,status-playable;nvdec,playable,2022-03-03 8:30:24,4 +1835,Brunch Club,,status-playable,playable,2020-06-24 13:54:07,1 +1836,Invisigun Reloaded - 01005F400E644000,01005F400E644000,gpu;online;status-ingame,ingame,2021-06-10 12:13:24,5 +1837,AER - Memories of Old - 0100A0400DDE0000,0100A0400DDE0000,nvdec;status-playable,playable,2021-03-05 18:43:43,2 +1838,Farm Mystery - 01000E400ED98000,01000E400ED98000,status-playable;nvdec,playable,2022-09-06 16:46:47,5 +1839,Ninjala - 0100CCD0073EA000,0100CCD0073EA000,status-boots;online-broken;UE4,boots,2024-07-03 20:04:49,10 +1840,Shojo Jigoku no Doku musume,,,,2020-06-25 11:25:12,1 +1841,Jump Rope Challenge - 0100B9C012706000,0100B9C012706000,services;status-boots;crash;Needs Update,boots,2023-02-27 1:24:28,3 +1842,Knight Squad,,status-playable,playable,2020-08-09 16:54:51,3 +1843,WARBORN,,status-playable,playable,2020-06-25 12:36:47,1 +1844,The Bard's Tale ARPG: Remastered and Resnarkled - 0100CD500DDAE000,0100CD500DDAE000,gpu;status-ingame;nvdec;online-working,ingame,2024-07-18 12:52:01,6 +1845,NAMCOT COLLECTION,,audio;status-playable,playable,2020-06-25 13:35:22,1 +1846,Code: Realize ~Future Blessings~ - 010002400F408000,010002400F408000,status-playable;nvdec,playable,2023-03-31 16:57:47,2 +1847,Code: Realize ~Guardian of Rebirth~,,,,2020-06-25 15:09:14,1 +1848,Polandball: Can Into Space!,,status-playable,playable,2020-06-25 15:13:26,1 +1849,Ruiner - 01006EC00F2CC000,01006EC00F2CC000,status-playable;UE4,playable,2022-10-03 14:11:33,3 +1850,Summer in Mara - 0100A130109B2000,0100A130109B2000,nvdec;status-playable,playable,2021-03-06 14:10:38,2 +1851,Brigandine: The Legend of Runersia - 010011000EA7A000,010011000EA7A000,status-playable,playable,2021-06-20 6:52:25,14 +1852,Duke Nukem 3D: 20th Anniversary World Tour - 01007EF00CB88000,01007EF00CB88000,32-bit;status-playable;ldn-untested,playable,2022-08-19 22:22:40,6 +1853,Outbuddies DX - 0100B8900EFA6000,0100B8900EFA6000,gpu;status-ingame,ingame,2022-08-04 22:39:24,4 +1854,Mr. DRILLER DrillLand,,nvdec;status-playable,playable,2020-07-24 13:56:48,2 +1855,Fable of Fairy Stones - 0100E3D0103CE000,0100E3D0103CE000,status-playable,playable,2021-05-05 21:04:54,2 +1856,Destrobots - 01008BB011ED6000,01008BB011ED6000,status-playable,playable,2021-03-06 14:37:05,2 +1857,Aery - 0100875011D0C000,0100875011D0C000,status-playable,playable,2021-03-07 15:25:51,2 +1858,TETRA for Nintendo Switch,,status-playable,playable,2020-06-26 20:49:55,1 +1859,Push the Crate 2 - 0100B60010432000,0100B60010432000,UE4;gpu;nvdec;status-ingame,ingame,2021-06-10 14:20:01,3 +1860,Railway Empire - 01002EE00DC02000,01002EE00DC02000,status-playable;nvdec,playable,2022-10-03 13:53:50,3 +1861,Endless Fables: Dark Moor - 01004F3011F92000,01004F3011F92000,gpu;nvdec;status-ingame,ingame,2021-03-07 15:31:03,2 +1862,Across the Grooves,,status-playable,playable,2020-06-27 12:29:51,1 +1863,Behold the Kickmen,,status-playable,playable,2020-06-27 12:49:45,1 +1864,Blood & Guts Bundle,,status-playable,playable,2020-06-27 12:57:35,1 +1865,Seek Hearts - 010075D0101FA000,010075D0101FA000,status-playable,playable,2022-11-22 15:06:26,2 +1866,Edna & Harvey: The Breakout - Anniversary Edition - 01004F000B716000,01004F000B716000,status-ingame;crash;nvdec,ingame,2022-08-01 16:59:56,5 +1867,-KLAUS-,,nvdec;status-playable,playable,2020-06-27 13:27:30,1 +1868,Gun Gun Pixies,,,,2020-06-27 13:31:06,1 +1869,Tcheco in the Castle of Lucio,,status-playable,playable,2020-06-27 13:35:43,1 +1870,My Butler,,status-playable,playable,2020-06-27 13:46:23,1 +1871,Caladrius Blaze - 01004FD00D66A000,01004FD00D66A000,deadlock;status-nothing;nvdec,nothing,2022-12-07 16:44:37,4 +1872,Shipped,,status-playable,playable,2020-11-21 14:22:32,3 +1873,The Alliance Alive HD Remastered - 010045A00E038000,010045A00E038000,nvdec;status-playable,playable,2021-03-07 15:43:45,2 +1874,Monochrome Order,,,,2020-06-27 14:38:40,1 +1875,My Lovely Daughter - 010086B00C784000,010086B00C784000,status-playable,playable,2022-11-24 17:25:32,2 +1876,Caged Garden Cock Robin,,,,2020-06-27 16:47:22,1 +1877,A Knight's Quest - 01005EF00CFDA000,01005EF00CFDA000,status-playable;UE4,playable,2022-09-12 20:44:20,6 +1878,The Witcher 3: Wild Hunt - 01003D100E9C6000,01003D100E9C6000,status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51,11 +1879,BATTLESTAR GALACTICA Deadlock,,nvdec;status-playable,playable,2020-06-27 17:35:44,1 +1880,STELLATUM - 0100BC800EDA2000,0100BC800EDA2000,gpu;status-playable,playable,2021-03-07 16:30:23,2 +1881,Reventure - 0100E2E00EA42000,0100E2E00EA42000,status-playable,playable,2022-09-15 20:07:06,2 +1882,Killer Queen Black - 0100F2900B3E2000,0100F2900B3E2000,ldn-untested;online;status-playable,playable,2021-04-08 12:46:18,3 +1883,Puchitto kurasutā,,Need-Update;crash;services;status-menus,menus,2020-07-04 16:44:28,2 +1884,Silk - 010045500DFE2000,010045500DFE2000,nvdec;status-playable,playable,2021-06-10 15:34:37,2 +1885,Aldred - Knight of Honor - 01000E000EEF8000,01000E000EEF8000,services;status-playable,playable,2021-11-30 1:49:17,2 +1886,Tamashii - 010012800EE3E000,010012800EE3E000,status-playable,playable,2021-06-10 15:26:20,2 +1887,Overlanders - 0100D7F00EC64000,0100D7F00EC64000,status-playable;nvdec;UE4,playable,2022-09-14 20:15:06,3 +1888,Romancing SaGa 3,,audio;gpu;status-ingame,ingame,2020-06-27 20:26:18,1 +1889,Hakoniwa Explorer Plus,,slow;status-ingame,ingame,2021-02-19 16:56:19,3 +1890,Fractured Minds - 01004200099F2000,01004200099F2000,status-playable,playable,2022-09-13 21:21:40,3 +1891,Strange Telephone,,,,2020-06-27 21:00:43,1 +1892,Strikey Sisters,,,,2020-06-27 22:20:14,1 +1893,IxSHE Tell - 0100DEB00F12A000,0100DEB00F12A000,status-playable;nvdec,playable,2022-12-02 18:00:42,3 +1894,Monster Farm - 0100E9900ED74000,0100E9900ED74000,32-bit;nvdec;status-playable,playable,2021-05-05 19:29:13,3 +1895,Pachi Pachi On A Roll,,,,2020-06-28 10:28:59,1 +1896,MISTOVER,,,,2020-06-28 11:23:53,1 +1897,Little Busters! Converted Edition - 0100943010310000,0100943010310000,status-playable;nvdec,playable,2022-09-29 15:34:56,3 +1898,Snack World The Dungeon Crawl Gold - 0100F2800D46E000,0100F2800D46E000,gpu;slow;status-ingame;nvdec;audout,ingame,2022-05-01 21:12:44,7 +1899,Super Kirby Clash - 01003FB00C5A8000,01003FB00C5A8000,status-playable;ldn-works,playable,2024-07-30 18:21:55,8 +1900,SEGA AGES Thunder Force IV,,,,2020-06-29 12:06:07,1 +1901,SEGA AGES Puyo Puyo - 01005F600CB0E000,01005F600CB0E000,online;status-playable,playable,2021-05-05 16:09:28,3 +1902,EAT BEAT DEADSPIKE-san - 0100A9B009678000,0100A9B009678000,audio;status-playable;Needs Update,playable,2022-12-02 19:25:29,2 +1903,AeternoBlade II - 01009D100EA28000,01009D100EA28000,status-playable;online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18,3 +1904,WRC 8 FIA World Rally Championship - 010087800DCEA000,010087800DCEA000,status-playable;nvdec,playable,2022-09-16 23:03:36,4 +1905,Yaga - 01006FB00DB02000,01006FB00DB02000,status-playable;nvdec,playable,2022-09-16 23:17:17,2 +1906,Woven - 01006F100EB16000,01006F100EB16000,nvdec;status-playable,playable,2021-06-02 13:41:08,3 +1907,Kissed by the Baddest Bidder - 0100F3A00F4CA000,0100F3A00F4CA000,gpu;status-ingame;nvdec,ingame,2022-12-04 20:57:11,3 +1910,Thief of Thieves - 0100CE700F62A000,0100CE700F62A000,status-nothing;crash;loader-allocator,nothing,2021-11-03 7:16:30,2 +1911,Squidgies Takeover,,status-playable,playable,2020-07-20 22:28:08,2 +1912,Balthazar's Dreams - 0100BC400FB64000,0100BC400FB64000,status-playable,playable,2022-09-13 0:13:22,2 +1913,ZenChess,,status-playable,playable,2020-07-01 22:28:27,1 +1914,Sparklite - 01007ED00C032000,01007ED00C032000,status-playable,playable,2022-08-06 11:35:41,4 +1915,Some Distant Memory - 01009EE00E91E000,01009EE00E91E000,status-playable,playable,2022-09-15 21:48:19,2 +1916,Skybolt Zack - 010041C01014E000,010041C01014E000,status-playable,playable,2021-04-12 18:28:00,3 +1917,Tactical Mind 2,,status-playable,playable,2020-07-01 23:11:07,1 +1918,Super Street: Racer - 0100FB400F54E000,0100FB400F54E000,status-playable;UE4,playable,2022-09-16 13:43:14,2 +1919,TOKYO DARK - REMEMBRANCE - - 01003E500F962000,01003E500F962000,nvdec;status-playable,playable,2021-06-10 20:09:49,2 +1920,Party Treats,,status-playable,playable,2020-07-02 0:05:00,1 +1921,Rocket Wars,,status-playable,playable,2020-07-24 14:27:39,2 +1922,Rawr-Off,,crash;nvdec;status-menus,menus,2020-07-02 0:14:44,1 +1923,Blair Witch - 01006CC01182C000,01006CC01182C000,status-playable;nvdec;UE4,playable,2022-10-01 14:06:16,6 +1924,Urban Trial Tricky - 0100A2500EB92000,0100A2500EB92000,status-playable;nvdec;UE4,playable,2022-12-06 13:07:56,6 +1925,Infliction - 01001CB00EFD6000,01001CB00EFD6000,status-playable;nvdec;UE4,playable,2022-10-02 13:15:55,4 +1926,Catherine Full Body for Nintendo Switch (JP) - 0100BAE0077E4000,0100BAE0077E4000,Needs Update;gpu;status-ingame,ingame,2021-02-21 18:06:11,14 +1927,Night Call - 0100F3A0095A6000,0100F3A0095A6000,status-playable;nvdec,playable,2022-10-03 12:57:00,2 +1928,Grimshade - 01001E200F2F8000,01001E200F2F8000,status-playable,playable,2022-10-02 12:44:20,2 +1930,A Summer with the Shiba Inu - 01007DD011C4A000,01007DD011C4A000,status-playable,playable,2021-06-10 20:51:16,2 +1931,Holy Potatoes! What the Hell?!,,status-playable,playable,2020-07-03 10:48:56,1 +1932,Tower of Time,,gpu;nvdec;status-ingame,ingame,2020-07-03 11:11:12,1 +1933,Iron Wings - 01005270118D6000,01005270118D6000,slow;status-ingame,ingame,2022-08-07 8:32:57,4 +1934,Death Come True - 010012B011AB2000,010012B011AB2000,nvdec;status-playable,playable,2021-06-10 22:30:49,2 +1935,CAN ANDROIDS PRAY:BLUE,,,,2020-07-05 8:14:53,1 +1936,The Almost Gone,,status-playable,playable,2020-07-05 12:33:07,1 +1937,Urban Flow,,services;status-playable,playable,2020-07-05 12:51:47,1 +1938,Digimon Story Cyber Sleuth: Complete Edition - 010014E00DB56000,010014E00DB56000,status-playable;nvdec;opengl,playable,2022-09-13 15:02:37,4 +1939,Return of the Obra Dinn - 010032E00E6E2000,010032E00E6E2000,status-playable,playable,2022-09-15 19:56:45,2 +1940,YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD. - 010037D00DBDC000,010037D00DBDC000,nvdec;status-playable,playable,2021-01-26 17:03:52,3 +1941,Summer Sweetheart - 01004E500DB9E000,01004E500DB9E000,status-playable;nvdec,playable,2022-09-16 12:51:46,5 +1942,ZikSquare - 010086700EF16000,010086700EF16000,gpu;status-ingame,ingame,2021-11-06 2:02:48,5 +1943,Planescape: Torment and Icewind Dale: Enhanced Editions - 010030B00C316000,010030B00C316000,cpu;status-boots;32-bit;crash;Needs Update,boots,2022-09-10 3:58:26,6 +1944,Megaquarium - 010082B00E8B8000,010082B00E8B8000,status-playable,playable,2022-09-14 16:50:00,2 +1945,Ice Age Scrat's Nutty Adventure - 01004E5007E92000,01004E5007E92000,status-playable;nvdec,playable,2022-09-13 22:22:29,2 +1946,Aggelos - 010004D00A9C0000,010004D00A9C0000,gpu;status-ingame,ingame,2023-02-19 13:24:23,5 +1947,Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000,010078D00E8F4000,slow;status-playable;nvdec;UE4,playable,2022-09-16 11:58:38,3 +1948,Sub Level Zero: Redux - 0100E6400BCE8000,0100E6400BCE8000,status-playable,playable,2022-09-16 12:30:03,2 +1949,BurgerTime Party!,,slow;status-playable,playable,2020-11-21 14:11:53,3 +1950,Another Sight,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-03 16:49:59,3 +1951,Baldur's Gate and Baldur's Gate II: Enhanced Editions - 010010A00DA48000,010010A00DA48000,32-bit;status-playable,playable,2022-09-12 23:52:15,6 +1952,Kine - 010089000F0E8000,010089000F0E8000,status-playable;UE4,playable,2022-09-14 14:28:37,3 +1953,Roof Rage - 010088100DD42000,010088100DD42000,status-boots;crash;regression,boots,2023-11-12 3:47:18,5 +1954,Pig Eat Ball - 01000FD00D5CC000,01000FD00D5CC000,services;status-ingame,ingame,2021-11-30 1:57:45,2 +1956,DORAEMON STORY OF SEASONS,,nvdec;status-playable,playable,2020-07-13 20:28:11,2 +1957,Root Letter: Last Answer - 010030A00DA3A000,010030A00DA3A000,status-playable;vulkan-backend-bug,playable,2022-09-17 10:25:57,2 +1959,Cat Quest II,,status-playable,playable,2020-07-06 23:52:09,1 +1960,Streets of Rage 4,,nvdec;online;status-playable,playable,2020-07-07 21:21:22,1 +1961,Deep Space Rush,,status-playable,playable,2020-07-07 23:30:33,1 +1962,Into the Dead 2 - 01000F700DECE000,01000F700DECE000,status-playable;nvdec,playable,2022-09-14 12:36:14,3 +1963,Dark Devotion - 010083A00BF6C000,010083A00BF6C000,status-playable;nvdec,playable,2022-08-09 9:41:18,5 +1964,Anthill - 010054C00D842000,010054C00D842000,services;status-menus;nvdec,menus,2021-11-18 9:25:25,3 +1965,Skullgirls: 2nd Encore - 010046B00DE62000,010046B00DE62000,status-playable,playable,2022-09-15 21:21:25,6 +1966,Tokyo School Life - 0100E2E00CB14000,0100E2E00CB14000,status-playable,playable,2022-09-16 20:25:54,2 +1967,Pixel Gladiator,,status-playable,playable,2020-07-08 2:41:26,1 +1968,Spirit Hunter: NG,,32-bit;status-playable,playable,2020-12-17 20:38:47,3 +1969,The Fox Awaits Me,,,,2020-07-08 11:58:56,1 +1970,Shalnor Legends: Sacred Lands - 0100B4900E008000,0100B4900E008000,status-playable,playable,2021-06-11 14:57:11,2 +1971,Hero must die. again,,,,2020-07-08 12:35:49,1 +1972,AeternoBlade I,,nvdec;status-playable,playable,2020-12-14 20:06:48,2 +1973,Sephirothic Stories - 010059700D4A0000,010059700D4A0000,services;status-menus,menus,2021-11-25 8:52:17,3 +1974,Ciel Fledge: A Daughter Raising Simulator,,,,2020-07-08 14:57:17,1 +1976,Olympia Soiree - 0100F9D00C186000,0100F9D00C186000,status-playable,playable,2022-12-04 21:07:12,2 +1977,Mighty Switch Force! Collection - 010060D00AE36000,010060D00AE36000,status-playable,playable,2022-10-28 20:40:32,3 +1978,Street Outlaws: The List - 010012400D202000,010012400D202000,nvdec;status-playable,playable,2021-06-11 12:15:32,4 +1979,TroubleDays,,,,2020-07-09 8:50:12,1 +1980,Legend of the Tetrarchs,,deadlock;status-ingame,ingame,2020-07-10 7:54:03,2 +1981,Soul Searching,,status-playable,playable,2020-07-09 18:39:07,1 +1982,Dusk Diver - 010011C00E636000,010011C00E636000,status-boots;crash;UE4,boots,2021-11-06 9:01:30,2 +1984,PBA Pro Bowling - 010085700ABC8000,010085700ABC8000,status-playable;nvdec;online-broken;UE4,playable,2022-09-14 23:00:49,2 +1985,Horror Pinball Bundle - 0100E4200FA82000,0100E4200FA82000,status-menus;crash,menus,2022-09-13 22:15:34,4 +1986,Farm Expert 2019 for Nintendo Switch,,status-playable,playable,2020-07-09 21:42:57,1 +1987,Super Monkey Ball: Banana Blitz HD - 0100B2A00E1E0000,0100B2A00E1E0000,status-playable;online-broken,playable,2022-09-16 13:16:25,2 +1988,Yuri - 0100FC900963E000,0100FC900963E000,status-playable,playable,2021-06-11 13:08:50,2 +1989,Vampyr - 01000BD00CE64000,01000BD00CE64000,status-playable;nvdec;UE4,playable,2022-09-16 22:15:51,4 +1990,Spirit Roots,,nvdec;status-playable,playable,2020-07-10 13:33:32,1 +1991,Resident Evil 5 - 010018100CD46000,010018100CD46000,status-playable;nvdec,playable,2024-02-18 17:15:29,6 +1992,RESIDENT EVIL 6 - 01002A000CD48000,01002A000CD48000,status-playable;nvdec,playable,2022-09-15 14:31:47,5 +1993,The Big Journey - 010089600E66A000,010089600E66A000,status-playable,playable,2022-09-16 14:03:08,2 +1994,Sky Gamblers: Storm Raiders 2 - 010068200E96E000,010068200E96E000,gpu;status-ingame,ingame,2022-09-13 12:24:04,2 +1995,Door Kickers: Action Squad - 01005ED00CD70000,01005ED00CD70000,status-playable;online-broken;ldn-broken,playable,2022-09-13 16:28:53,2 +1996,Agony,,UE4;crash;status-boots,boots,2020-07-10 16:21:18,1 +1997,Remothered: Tormented Fathers - 01001F100E8AE000,01001F100E8AE000,status-playable;nvdec;UE4,playable,2022-10-19 23:26:50,4 +1998,Biped - 010053B0117F8000,010053B0117F8000,status-playable;nvdec,playable,2022-10-01 13:32:58,2 +1999,Clash Force - 01005ED0107F4000,01005ED0107F4000,status-playable,playable,2022-10-01 23:45:48,2 +2000,Truck & Logistics Simulator - 0100F2100AA5C000,0100F2100AA5C000,status-playable,playable,2021-06-11 13:29:08,3 +2001,Collar X Malice - 010083E00F40E000,010083E00F40E000,status-playable;nvdec,playable,2022-10-02 11:51:56,3 +2002,TORICKY-S - 01007AF011732000,01007AF011732000,deadlock;status-menus,menus,2021-11-25 8:53:36,3 +2003,The Wanderer: Frankenstein's Creature,,status-playable,playable,2020-07-11 12:49:51,1 +2004,PRINCESS MAKER -FAERY TALES COME TRUE-,,,,2020-07-11 16:09:47,1 +2005,Princess Maker Go!Go! Princess,,,,2020-07-11 16:35:31,1 +2006,Paradox Soul,,,,2020-07-11 17:20:44,1 +2007,Diabolic - 0100F73011456000,0100F73011456000,status-playable,playable,2021-06-11 14:45:08,2 +2008,UBERMOSH:BLACK,,,,2020-07-11 17:42:34,1 +2009,Journey to the Savage Planet - 01008B60117EC000,01008B60117EC000,status-playable;nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12,2 +2010,Viviette - 010037900CB1C000,010037900CB1C000,status-playable,playable,2021-06-11 15:33:40,2 +2011,the StoryTale - 0100858010DC4000,0100858010DC4000,status-playable,playable,2022-09-03 13:00:25,5 +2012,Ghost Grab 3000,,status-playable,playable,2020-07-11 18:09:52,1 +2013,SEGA AGES Shinobi,,,,2020-07-11 18:17:27,1 +2014,eCrossminton,,status-playable,playable,2020-07-11 18:24:27,1 +2015,Dangerous Relationship,,,,2020-07-11 18:39:45,1 +2016,Indie Darling Bundle Vol. 3 - 01004DE011076000,01004DE011076000,status-playable,playable,2022-10-02 13:01:57,2 +2017,Murder by Numbers,,,,2020-07-11 19:12:19,1 +2018,BUSTAFELLOWS,,nvdec;status-playable,playable,2020-10-17 20:04:41,5 +2019,Love Letter from Thief X - 0100D36011AD4000,0100D36011AD4000,gpu;status-ingame;nvdec,ingame,2023-11-14 3:55:31,7 +2020,Escape Game Fort Boyard,,status-playable,playable,2020-07-12 12:45:43,1 +2021,SEGA AGES Gain Ground - 01001E600AF08000,01001E600AF08000,online;status-playable,playable,2021-05-05 16:16:27,3 +2022,The Wardrobe: Even Better Edition - 01008B200FC6C000,01008B200FC6C000,status-playable,playable,2022-09-16 19:14:55,2 +2023,SEGA AGES Wonder Boy: Monster Land - 01001E700AC60000,01001E700AC60000,online;status-playable,playable,2021-05-05 16:28:25,3 +2024,SEGA AGES Columns II: A Voyage Through Time,,,,2020-07-12 13:38:50,1 +2025,Zenith - 0100AAC00E692000,0100AAC00E692000,status-playable,playable,2022-09-17 9:57:02,3 +2026,Jumanji,,UE4;crash;status-boots,boots,2020-07-12 13:52:25,1 +2027,SEGA AGES Ichidant-R,,,,2020-07-12 13:54:29,1 +2028,STURMWIND EX - 0100C5500E7AE000,0100C5500E7AE000,audio;32-bit;status-playable,playable,2022-09-16 12:01:39,7 +2029,SEGA AGES Alex Kidd in Miracle World - 0100A8900AF04000,0100A8900AF04000,online;status-playable,playable,2021-05-05 16:35:47,3 +2030,The Lord of the Rings: Adventure Card Game - 010085A00C5E8000,010085A00C5E8000,status-menus;online-broken,menus,2022-09-16 15:19:32,2 +2031,Breeder Homegrown: Director's Cut,,,,2020-07-12 14:54:02,1 +2032,StarCrossed,,,,2020-07-12 15:15:22,1 +2033,The Legend of Dark Witch,,status-playable,playable,2020-07-12 15:18:33,1 +2034,One-Way Ticket,,,,2020-07-12 15:36:25,1 +2035,Ships - 01000E800FCB4000,01000E800FCB4000,status-playable,playable,2021-06-11 16:14:37,2 +2036,My Bewitching Perfume,,,,2020-07-12 15:55:15,1 +2037,Black and White Bushido,,,,2020-07-12 16:12:16,1 +2038,REKT,,online;status-playable,playable,2020-09-28 12:33:56,2 +2039,Nirvana Pilot Yume - 010020901088A000,010020901088A000,status-playable,playable,2022-10-29 11:49:49,1 +2040,Detective Jinguji Saburo Prism of Eyes,,status-playable,playable,2020-10-02 21:54:41,3 +2041,Harvest Moon: Mad Dash,,,,2020-07-12 20:37:50,1 +2042,Worse Than Death - 010037500C4DE000,010037500C4DE000,status-playable,playable,2021-06-11 16:05:40,2 +2043,Bad Dream: Coma - 01000CB00D094000,01000CB00D094000,deadlock;status-boots,boots,2023-08-03 0:54:18,2 +2044,Chou no Doku Hana no Kusari: Taishou Irokoi Ibun,,gpu;nvdec;status-ingame,ingame,2020-09-28 17:58:04,3 +2045,MODEL Debut #nicola,,,,2020-07-13 11:21:44,1 +2046,Chameleon,,,,2020-07-13 12:06:20,1 +2047,Gunka o haita neko,,gpu;nvdec;status-ingame,ingame,2020-08-25 12:37:56,2 +2048,Genso maneju,,,,2020-07-13 14:14:09,1 +2049,Coffee Talk,,status-playable,playable,2020-08-10 9:48:44,2 +2050,Labyrinth of the Witch,,status-playable,playable,2020-11-01 14:42:37,2 +2051,Ritual: Crown of Horns - 010042500FABA000,010042500FABA000,status-playable,playable,2021-01-26 16:01:47,2 +2052,THE GRISAIA TRILOGY - 01003b300e4aa000,01003b300e4aa000,status-playable,playable,2021-01-31 15:53:59,2 +2053,Perseverance,,status-playable,playable,2020-07-13 18:48:27,1 +2054,SEGA AGES Fantasy Zone,,,,2020-07-13 19:33:23,1 +2056,SEGA AGES Thunder Force AC,,,,2020-07-13 19:50:34,1 +2057,SEGA AGES Puyo Puyo 2,,,,2020-07-13 20:15:04,1 +2058,GRISAIA PHANTOM TRIGGER 01&02 - 01009D7011B02000,01009D7011B02000,status-playable;nvdec,playable,2022-12-04 21:16:06,3 +2059,Paper Dolls Original,,UE4;crash;status-boots,boots,2020-07-13 20:26:21,1 +2060,"STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY - 0100B61009C60000",0100B61009C60000,status-playable,playable,2021-01-26 17:37:28,2 +2061, SEGA AGES G-LOC AIR BATTLE,,,,2020-07-13 20:42:40,1 +2062,Think of the Children - 0100F2300A5DA000,0100F2300A5DA000,deadlock;status-menus,menus,2021-11-23 9:04:45,2 +2063,OTOKOMIZU,,status-playable,playable,2020-07-13 21:00:44,1 +2064,Puchikon 4 Smile BASIC,,,,2020-07-13 21:18:15,1 +2065,Neverlast,,slow;status-ingame,ingame,2020-07-13 23:55:19,1 +2066,MONKEY BARRELS - 0100FBD00ED24000,0100FBD00ED24000,status-playable,playable,2022-09-14 17:28:52,2 +2067,Ghost Parade,,status-playable,playable,2020-07-14 0:43:54,1 +2068,Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit - 010087800EE5A000,010087800EE5A000,status-boots;crash,boots,2023-02-19 0:51:21,2 +2069,OMG Zombies! - 01006DB00D970000,01006DB00D970000,32-bit;status-playable,playable,2021-04-12 18:04:45,5 +2070,Evan's Remains,,,,2020-07-14 5:56:25,1 +2071,Working Zombies,,,,2020-07-14 6:30:55,1 +2072,Saboteur II: Avenging Angel,,Needs Update;cpu;crash;status-nothing,nothing,2021-01-26 14:47:37,2 +2073,Quell Zen - 0100492012378000,0100492012378000,gpu;status-ingame,ingame,2021-06-11 15:59:53,2 +2074,The Touryst - 0100C3300D8C4000,0100C3300D8C4000,status-ingame;crash,ingame,2023-08-22 1:32:38,9 +2075,SMASHING THE BATTLE - 01002AA00C974000,01002AA00C974000,status-playable,playable,2021-06-11 15:53:57,2 +2076,Him & Her,,,,2020-07-14 8:09:57,1 +2077,Speed Brawl,,slow;status-playable,playable,2020-09-18 22:08:16,2 +2078,River City Melee Mach!! - 0100B2100767C000,0100B2100767C000,status-playable;online-broken,playable,2022-09-20 20:51:57,2 +2079,Please The Gods,,,,2020-07-14 10:10:27,1 +2080,One Person Story,,status-playable,playable,2020-07-14 11:51:02,1 +2081,Mary Skelter 2 - 01003DE00C95E000,01003DE00C95E000,status-ingame;crash;regression,ingame,2023-09-12 7:37:28,11 +2082,NecroWorm,,,,2020-07-14 12:15:16,1 +2083,Juicy Realm - 0100C7600F654000,0100C7600F654000,status-playable,playable,2023-02-21 19:16:20,5 +2084,Grizzland,,,,2020-07-14 12:28:03,1 +2085,Garfield Kart Furious Racing - 010061E00E8BE000,010061E00E8BE000,status-playable;ldn-works;loader-allocator,playable,2022-09-13 21:40:25,3 +2086,Close to the Sun - 0100B7200DAC6000,0100B7200DAC6000,status-boots;crash;nvdec;UE4,boots,2021-11-04 9:19:41,3 +2087,Xeno Crisis,,,,2020-07-14 12:46:55,1 +2088,Boreal Blade - 01008E500AFF6000,01008E500AFF6000,gpu;ldn-untested;online;status-ingame,ingame,2021-06-11 15:37:14,2 +2089,Animus: Harbinger - 0100E5A00FD38000,0100E5A00FD38000,status-playable,playable,2022-09-13 22:09:20,2 +2090,DEADBOLT,,,,2020-07-14 13:20:01,1 +2091,Headsnatchers,,UE4;crash;status-menus,menus,2020-07-14 13:29:14,1 +2092,DOUBLE DRAGON Ⅲ: The Sacred Stones - 01001AD00E49A000,01001AD00E49A000,online;status-playable,playable,2021-06-11 15:41:44,2 +2093,911 Operator Deluxe Edition,,status-playable,playable,2020-07-14 13:57:44,1 +2094,Disney Tsum Tsum Festival,,crash;status-menus,menus,2020-07-14 14:05:28,1 +2095,JUST DANCE 2020 - 0100DDB00DB38000,0100DDB00DB38000,status-playable,playable,2022-01-24 13:31:57,6 +2096,A Street Cat's Tale,,,,2020-07-14 14:10:13,1 +2097,Real Heroes: Firefighter - 010048600CC16000,010048600CC16000,status-playable,playable,2022-09-20 18:18:44,2 +2098,The Savior's Gang - 01002BA00C7CE000,01002BA00C7CE000,gpu;status-ingame;nvdec;UE4,ingame,2022-09-21 12:37:48,4 +2099,KATANA KAMI: A Way of the Samurai Story - 0100F9800EDFA000,0100F9800EDFA000,slow;status-playable,playable,2022-04-09 10:40:16,5 +2100,Toon War - 01009EA00E2B8000,01009EA00E2B8000,status-playable,playable,2021-06-11 16:41:53,2 +2101,2048 CAT,,,,2020-07-14 14:44:29,1 +2102,Tick Tock: A Tale for Two,,status-menus,menus,2020-07-14 14:49:38,1 +2103,HexON,,,,2020-07-14 14:54:27,1 +2104,Ancient Rush 2,,UE4;crash;status-menus,menus,2020-07-14 14:58:47,1 +2105,Under Night In-Birth Exe:Late[cl-r],,,,2020-07-14 15:06:07,1 +2106,Circuits - 01008FA00D686000,01008FA00D686000,status-playable,playable,2022-09-19 11:52:50,2 +2107,Breathing Fear,,status-playable,playable,2020-07-14 15:12:29,1 +2108,KAMINAZO Memories from the future,,,,2020-07-14 15:22:45,1 +2109,Big Pharma,,status-playable,playable,2020-07-14 15:27:30,1 +2110,Amoeba Battle - Microscopic RTS Action - 010041D00DEB2000,010041D00DEB2000,status-playable,playable,2021-05-06 13:33:41,2 +2111,Assassin's Creed The Rebel Collection - 010044700DEB0000,010044700DEB0000,gpu;status-ingame,ingame,2024-05-19 7:58:56,5 +2112,Defenders of Ekron - Definitive Edition - 01008BB00F824000,01008BB00F824000,status-playable,playable,2021-06-11 16:31:03,2 +2113,Hellmut: The Badass from Hell,,,,2020-07-14 15:56:49,1 +2114,Alien: Isolation - 010075D00E8BA000,010075D00E8BA000,status-playable;nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41,4 +2115,Immortal Planet - 01007BC00E55A000,01007BC00E55A000,status-playable,playable,2022-09-20 13:40:43,3 +2116,inbento,,,,2020-07-14 16:09:57,1 +2117,Ding Dong XL,,status-playable,playable,2020-07-14 16:13:19,1 +2118,KUUKIYOMI 2: Consider It More! - New Era - 010037500F282000,010037500F282000,status-nothing;crash;Needs Update,nothing,2021-11-02 9:34:40,4 +2119, KUUKIYOMI: Consider It!,,,,2020-07-14 16:21:36,1 +2120,MADORIS R,,,,2020-07-14 16:34:22,1 +2121,Kairobotica - 0100D5F00EC52000,0100D5F00EC52000,status-playable,playable,2021-05-06 12:17:56,3 +2122,Bouncy Bob 2,,status-playable,playable,2020-07-14 16:51:53,1 +2123,Grab the Bottle,,status-playable,playable,2020-07-14 17:06:41,1 +2124,Red Bow - 0100CF600FF7A000,0100CF600FF7A000,services;status-ingame,ingame,2021-11-29 3:51:34,2 +2125,Pocket Mini Golf,,,,2020-07-14 22:13:35,1 +2126,Must Dash Amigos - 0100F6000EAA8000,0100F6000EAA8000,status-playable,playable,2022-09-20 16:45:56,2 +2127,EarthNight - 0100A2E00BB0C000,0100A2E00BB0C000,status-playable,playable,2022-09-19 21:02:20,2 +2128,Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos,,status-playable,playable,2020-07-15 5:06:29,1 +2129,Bloo Kid 2 - 010055900FADA000,010055900FADA000,status-playable,playable,2024-05-01 17:16:57,7 +2130,Narcos: Rise of the Cartels - 010072B00BDDE000,010072B00BDDE000,UE4;crash;nvdec;status-boots,boots,2021-03-22 13:18:47,2 +2131,PUSH THE CRATE - 010016400F07E000,010016400F07E000,status-playable;nvdec;UE4,playable,2022-09-15 13:28:41,3 +2132,Bee Simulator,,UE4;crash;status-boots,boots,2020-07-15 12:13:13,1 +2133,Where the Bees Make Honey,,status-playable,playable,2020-07-15 12:40:49,1 +2134,The Eyes of Ara - 0100B5900DFB2000,0100B5900DFB2000,status-playable,playable,2022-09-16 14:44:06,2 +2135,The Unicorn Princess - 010064E00ECBC000,010064E00ECBC000,status-playable,playable,2022-09-16 16:20:56,2 +2136,Sword of the Guardian,,status-playable,playable,2020-07-16 12:24:39,1 +2137,Waifu Uncovered - 0100B130119D0000,0100B130119D0000,status-ingame;crash,ingame,2023-02-27 1:17:46,8 +2138,Paper Mario The Origami King - 0100A3900C3E2000,0100A3900C3E2000,audio;status-playable;Needs Update,playable,2024-08-09 18:27:40,31 +2139,Touhou Spell Bubble,,status-playable,playable,2020-10-18 11:43:43,4 +2140,Crysis Remastered - 0100E66010ADE000,0100E66010ADE000,status-menus;nvdec,menus,2024-08-13 5:23:24,13 +2141,Helltaker,,,,2020-07-23 21:16:43,1 +2142,Shadow Blade Reload - 0100D5500DA94000,0100D5500DA94000,nvdec;status-playable,playable,2021-06-11 18:40:43,2 +2143,The Bunker - 01001B40086E2000,01001B40086E2000,status-playable;nvdec,playable,2022-09-16 14:24:05,2 +2144,War Tech Fighters - 010049500DE56000,010049500DE56000,status-playable;nvdec,playable,2022-09-16 22:29:31,2 +2145,Real Drift Racing,,status-playable,playable,2020-07-25 14:31:31,1 +2146,Phantaruk - 0100DDD00C0EA000,0100DDD00C0EA000,status-playable,playable,2021-06-11 18:09:54,2 +2148,Omensight: Definitive Edition,,UE4;crash;nvdec;status-ingame,ingame,2020-07-26 1:45:14,1 +2149,Phantom Doctrine - 010096F00E5B0000,010096F00E5B0000,status-playable;UE4,playable,2022-09-15 10:51:50,3 +2150,Monster Bugs Eat People,,status-playable,playable,2020-07-26 2:05:34,1 +2151,Machi Knights Blood bagos - 0100F2400D434000,0100F2400D434000,status-playable;nvdec;UE4,playable,2022-09-14 15:08:04,3 +2152,Offroad Racing - 01003CD00E8BC000,01003CD00E8BC000,status-playable;online-broken;UE4,playable,2022-09-14 18:53:22,3 +2154,Puzzle Book,,status-playable,playable,2020-09-28 13:26:01,2 +2155,SUSHI REVERSI - 01005AB01119C000,01005AB01119C000,status-playable,playable,2021-06-11 19:26:58,2 +2156,Strike Force - War on Terror - 010039100DACC000,010039100DACC000,status-menus;crash;Needs Update,menus,2021-11-24 8:08:20,3 +2157,Mr Blaster - 0100D3300F110000,0100D3300F110000,status-playable,playable,2022-09-14 17:56:24,2 +2158,Lust for Darkness,,nvdec;status-playable,playable,2020-07-26 12:09:15,1 +2159,Legrand Legacy: Tale of the Fatebounds,,nvdec;status-playable,playable,2020-07-26 12:27:36,1 +2160,Hardway Party,,status-playable,playable,2020-07-26 12:35:07,1 +2161,Earthfall: Alien Horde - 0100DFC00E472000,0100DFC00E472000,status-playable;nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37,3 +2162,Collidalot - 010030800BC36000,010030800BC36000,status-playable;nvdec,playable,2022-09-13 14:09:27,4 +2163,Miniature - The Story Puzzle - 010039200EC66000,010039200EC66000,status-playable;UE4,playable,2022-09-14 17:18:50,3 +2164,MEANDERS - 0100EEF00CBC0000,0100EEF00CBC0000,UE4;gpu;status-ingame,ingame,2021-06-11 19:19:33,2 +2165,Isoland,,status-playable,playable,2020-07-26 13:48:16,1 +2166,Fishing Star World Tour - 0100DEB00ACE2000,0100DEB00ACE2000,status-playable,playable,2022-09-13 19:08:51,5 +2167,Isoland 2: Ashes of Time,,status-playable,playable,2020-07-26 14:29:05,1 +2168,Golazo - 010013800F0A4000,010013800F0A4000,status-playable,playable,2022-09-13 21:58:37,2 +2169,Castle of No Escape 2 - 0100F5500FA0E000,0100F5500FA0E000,status-playable,playable,2022-09-13 13:51:42,2 +2170,Guess The Word,,status-playable,playable,2020-07-26 21:34:25,1 +2171,Black Future '88 - 010049000B69E000,010049000B69E000,status-playable;nvdec,playable,2022-09-13 11:24:37,2 +2172,The Childs Sight - 010066800E9F8000,010066800E9F8000,status-playable,playable,2021-06-11 19:04:56,2 +2173,Asterix & Obelix XXL3: The Crystal Menhir - 010081500EA1E000,010081500EA1E000,gpu;status-ingame;nvdec;regression,ingame,2022-11-28 14:19:23,4 +2174,Go! Fish Go!,,status-playable,playable,2020-07-27 13:52:28,1 +2175,Amnesia: Collection - 01003CC00D0BE000,01003CC00D0BE000,status-playable,playable,2022-10-04 13:36:15,4 +2176,Ages of Mages: the Last Keeper - 0100E4700E040000,0100E4700E040000,status-playable;vulkan-backend-bug,playable,2022-10-04 11:44:05,3 +2177,Worlds of Magic: Planar Conquest - 010000301025A000,010000301025A000,status-playable,playable,2021-06-12 12:51:28,2 +2178,Hang the Kings,,status-playable,playable,2020-07-28 22:56:59,1 +2179,Super Dungeon Tactics - 010023100B19A000,010023100B19A000,status-playable,playable,2022-10-06 17:40:40,2 +2180,Five Nights at Freddy's: Sister Location - 01003B200E440000,01003B200E440000,status-playable,playable,2023-10-06 9:00:58,5 +2181,Ice Cream Surfer,,status-playable,playable,2020-07-29 12:04:07,1 +2182,Demon's Rise,,status-playable,playable,2020-07-29 12:26:27,1 +2183,A Ch'ti Bundle - 010096A00CC80000,010096A00CC80000,status-playable;nvdec,playable,2022-10-04 12:48:44,2 +2184,Overwatch®: Legendary Edition - 0100F8600E21E000,0100F8600E21E000,deadlock;status-boots,boots,2022-09-14 20:22:22,2 +2185,Zombieland: Double Tap - Road Trip - 01000E5800D32C000,01000E5800D32C00,status-playable,playable,2022-09-17 10:08:45,2 +2186,Children of Morta - 01002DE00C250000,01002DE00C250000,gpu;status-ingame;nvdec,ingame,2022-09-13 17:48:47,3 +2187,Story of a Gladiator,,status-playable,playable,2020-07-29 15:08:18,1 +2188,SD GUNDAM G GENERATION CROSS RAYS - 010055700CEA8000,010055700CEA8000,status-playable;nvdec,playable,2022-09-15 20:58:44,5 +2189,Neverwinter Nights: Enhanced Edition - 010013700DA4A000,010013700DA4A000,gpu;status-menus;nvdec,menus,2024-09-30 2:59:19,7 +2190,Race With Ryan,,UE4;gpu;nvdec;slow;status-ingame,ingame,2020-11-16 4:35:33,2 +2191,StrikeForce Kitty,,nvdec;status-playable,playable,2020-07-29 16:22:15,1 +2192,Later Daters,,status-playable,playable,2020-07-29 16:35:45,1 +2193,Pine,,slow;status-ingame,ingame,2020-07-29 16:57:39,1 +2194,Japanese Rail Sim: Journey to Kyoto,,nvdec;status-playable,playable,2020-07-29 17:14:21,1 +2195,FoxyLand,,status-playable,playable,2020-07-29 20:55:20,1 +2196,Five Nights at Freddy's - 0100B6200D8D2000,0100B6200D8D2000,status-playable,playable,2022-09-13 19:26:36,3 +2197,Five Nights at Freddy's 2 - 01004EB00E43A000,01004EB00E43A000,status-playable,playable,2023-02-08 15:48:24,8 +2198,Five Nights at Freddy's 3 - 010056100E43C000,010056100E43C000,status-playable,playable,2022-09-13 20:58:07,2 +2199,Five Nights at Freddy's 4 - 010083800E43E000,010083800E43E000,status-playable,playable,2023-08-19 7:28:03,4 +2200,Widget Satchel - 0100C7800CA06000,0100C7800CA06000,status-playable,playable,2022-09-16 22:41:07,3 +2201,Nyan Cat: Lost in Space - 010049F00EC30000,010049F00EC30000,online;status-playable,playable,2021-06-12 13:22:03,4 +2202,Blacksad: Under the Skin - 010032000EA2C000,010032000EA2C000,status-playable,playable,2022-09-13 11:38:04,2 +2203,Mini Trains,,status-playable,playable,2020-07-29 23:06:20,1 +2204,Call of Juarez: Gunslinger - 0100B4700BFC6000,0100B4700BFC6000,gpu;status-ingame;nvdec,ingame,2022-09-17 16:49:46,3 +2205,Locomotion,,,,2020-07-31 8:17:09,1 +2206,Headspun,,status-playable,playable,2020-07-31 19:46:47,1 +2207,Exception - 0100F2D00C7DE000,0100F2D00C7DE000,status-playable;online-broken,playable,2022-09-20 12:47:10,2 +2208,Dead End Job - 01004C500BD40000,01004C500BD40000,status-playable;nvdec,playable,2022-09-19 12:48:44,2 +2209,Event Horizon: Space Defense,,status-playable,playable,2020-07-31 20:31:24,1 +2210,SAMURAI SHODOWN,,UE4;crash;nvdec;status-menus,menus,2020-09-06 2:17:00,2 +2211,BQM BlockQuest Maker,,online;status-playable,playable,2020-07-31 20:56:50,1 +2212,Hard West - 0100ECE00D13E000,0100ECE00D13E000,status-nothing;regression,nothing,2022-02-09 7:45:56,2 +2213,Override: Mech City Brawl - Super Charged Mega Edition - 01008A700F7EE000,01008A700F7EE000,status-playable;nvdec;online-broken;UE4,playable,2022-09-20 17:33:32,2 +2214,Where Are My Friends? - 0100FDB0092B4000,0100FDB0092B4000,status-playable,playable,2022-09-21 14:39:26,2 +2215,"Final Light, The Prison",,status-playable,playable,2020-07-31 21:48:44,1 +2216,Citizens of Space - 0100E4200D84E000,0100E4200D84E000,gpu;status-boots,boots,2023-10-22 6:45:44,7 +2217,Adventures of Bertram Fiddle: Episode 1: A Dreadly Business - 01003B400A00A000,01003B400A00A000,status-playable;nvdec,playable,2022-09-17 11:07:56,4 +2218,Momonga Pinball Adventures - 01002CC00BC4C000,01002CC00BC4C000,status-playable,playable,2022-09-20 16:00:40,2 +2219,Suicide Guy: Sleepin' Deeply - 0100DE000C2E4000,0100DE000C2E4000,status-ingame;Needs More Attention,ingame,2022-09-20 23:45:25,2 +2220,"Warhammer 40,000: Mechanicus - 0100C6000EEA8000",0100C6000EEA8000,nvdec;status-playable,playable,2021-06-13 10:46:38,2 +2221,Caretaker - 0100DA70115E6000,0100DA70115E6000,status-playable,playable,2022-10-04 14:52:24,5 +2222,Once Upon A Coma,,nvdec;status-playable,playable,2020-08-01 12:09:39,1 +2223,Welcome to Hanwell,,UE4;crash;status-boots,boots,2020-08-03 11:54:57,1 +2224,Radical Rabbit Stew,,status-playable,playable,2020-08-03 12:02:56,1 +2225,We should talk.,,crash;status-nothing,nothing,2020-08-03 12:32:36,1 +2226,Get 10 Quest,,status-playable,playable,2020-08-03 12:48:39,1 +2227,Dongo Adventure - 010088B010DD2000,010088B010DD2000,status-playable,playable,2022-10-04 16:22:26,2 +2228,Singled Out,,online;status-playable,playable,2020-08-03 13:06:18,1 +2229,Never Breakup - 010039801093A000,010039801093A000,status-playable,playable,2022-10-05 16:12:12,2 +2230,Ashen - 010027B00E40E000,010027B00E40E000,status-playable;nvdec;online-broken;UE4,playable,2022-09-17 12:19:14,3 +2231,JDM Racing,,status-playable,playable,2020-08-03 17:02:37,1 +2232,Farabel,,status-playable,playable,2020-08-03 17:47:28,1 +2233,Hover - 0100F6800910A000,0100F6800910A000,status-playable;online-broken,playable,2022-09-20 12:54:46,2 +2234,DragoDino,,gpu;nvdec;status-ingame,ingame,2020-08-03 20:49:16,1 +2235,Rift Keeper - 0100AC600D898000,0100AC600D898000,status-playable,playable,2022-09-20 19:48:20,2 +2236,Melbits World - 01000FA010340000,01000FA010340000,status-menus;nvdec;online,menus,2021-11-26 13:51:22,2 +2237,60 Parsecs! - 010010100FF14000,010010100FF14000,status-playable,playable,2022-09-17 11:01:17,2 +2238,Warhammer Quest 2,,status-playable,playable,2020-08-04 15:28:03,1 +2239,Rescue Tale - 01003C400AD42000,01003C400AD42000,status-playable,playable,2022-09-20 18:40:18,2 +2240,Akuto,,status-playable,playable,2020-08-04 19:43:27,1 +2241,Demon Pit - 010084600F51C000,010084600F51C000,status-playable;nvdec,playable,2022-09-19 13:35:15,2 +2242,Regions of Ruin,,status-playable,playable,2020-08-05 11:38:58,1 +2243,Roombo: First Blood,,nvdec;status-playable,playable,2020-08-05 12:11:37,1 +2244,Mountain Rescue Simulator - 01009DB00D6E0000,01009DB00D6E0000,status-playable,playable,2022-09-20 16:36:48,2 +2245,Mad Games Tycoon - 010061E00EB1E000,010061E00EB1E000,status-playable,playable,2022-09-20 14:23:14,2 +2247,Down to Hell - 0100B6600FE06000,0100B6600FE06000,gpu;status-ingame;nvdec,ingame,2022-09-19 14:01:26,2 +2248,Funny Bunny Adventures,,status-playable,playable,2020-08-05 13:46:56,1 +2249,Crazy Zen Mini Golf,,status-playable,playable,2020-08-05 14:00:00,1 +2250,Drawngeon: Dungeons of Ink and Paper - 0100B7E0102E4000,0100B7E0102E4000,gpu;status-ingame,ingame,2022-09-19 15:41:25,4 +2251,Farming Simulator 20 - 0100EB600E914000,0100EB600E914000,nvdec;status-playable,playable,2021-06-13 10:52:44,2 +2252,DreamBall,,UE4;crash;gpu;status-ingame,ingame,2020-08-05 14:45:25,1 +2253,DEMON'S TILT - 0100BE800E6D8000,0100BE800E6D8000,status-playable,playable,2022-09-19 13:22:46,2 +2254,Heroland,,status-playable,playable,2020-08-05 15:35:39,1 +2255,Double Switch - 25th Anniversary Edition - 0100FC000EE10000,0100FC000EE10000,status-playable;nvdec,playable,2022-09-19 13:41:50,2 +2256,Ultimate Racing 2D,,status-playable,playable,2020-08-05 17:27:09,1 +2257,THOTH,,status-playable,playable,2020-08-05 18:35:28,1 +2258,SUPER ROBOT WARS X,,online;status-playable,playable,2020-08-05 19:18:51,1 +2259,Aborigenus,,status-playable,playable,2020-08-05 19:47:24,1 +2260,140,,status-playable,playable,2020-08-05 20:01:33,1 +2261,Goken,,status-playable,playable,2020-08-05 20:22:38,1 +2262,Maitetsu: Pure Station - 0100D9900F220000,0100D9900F220000,status-playable,playable,2022-09-20 15:12:49,2 +2263,Super Mega Space Blaster Special Turbo,,online;status-playable,playable,2020-08-06 12:13:25,1 +2264,Squidlit,,status-playable,playable,2020-08-06 12:38:32,1 +2265,Stories Untold - 010074400F6A8000,010074400F6A8000,status-playable;nvdec,playable,2022-12-22 1:08:46,2 +2266,Super Saurio Fly,,nvdec;status-playable,playable,2020-08-06 13:12:14,1 +2267,Hero Express,,nvdec;status-playable,playable,2020-08-06 13:23:43,1 +2268,Demolish & Build - 010099D00D1A4000,010099D00D1A4000,status-playable,playable,2021-06-13 15:27:26,2 +2269,Masquerada: Songs and Shadows - 0100113008262000,0100113008262000,status-playable,playable,2022-09-20 15:18:54,2 +2270,Dreaming Canvas - 010058B00F3C0000,010058B00F3C0000,UE4;gpu;status-ingame,ingame,2021-06-13 22:50:07,2 +2271,Time Tenshi,,,,2020-08-06 14:38:37,1 +2272,FoxyLand 2,,status-playable,playable,2020-08-06 14:41:30,1 +2273,Nicole - 0100A95012668000,0100A95012668000,status-playable;audout,playable,2022-10-05 16:41:44,3 +2274,Spiral Memoria -The Summer I Meet Myself-,,,,2020-08-06 15:19:11,1 +2275,"Warhammer 40,000: Space Wolf - 0100E5600D7B2000",0100E5600D7B2000,status-playable;online-broken,playable,2022-09-20 21:11:20,3 +2276,KukkoroDays - 010022801242C000,010022801242C000,status-menus;crash,menus,2021-11-25 8:52:56,4 +2277,Shadows 2: Perfidia,,status-playable,playable,2020-08-07 12:43:46,1 +2278,Murasame No Sword Breaker PV,,,,2020-08-07 12:54:21,1 +2279,Escape from Chernobyl - 0100FEF00F0AA000,0100FEF00F0AA000,status-boots;crash,boots,2022-09-19 21:36:58,2 +2280,198X,,status-playable,playable,2020-08-07 13:24:38,1 +2281,Orn: The Tiny Forest Sprite,,UE4;gpu;status-ingame,ingame,2020-08-07 14:25:30,1 +2282,Oddworld: Stranger's Wrath HD - 01002EA00ABBA000,01002EA00ABBA000,status-menus;crash;nvdec;loader-allocator,menus,2021-11-23 9:23:21,2 +2283,Just Glide,,status-playable,playable,2020-08-07 17:38:10,1 +2284,Ember - 010041A00FEC6000,010041A00FEC6000,status-playable;nvdec,playable,2022-09-19 21:16:11,3 +2285,Crazy Strike Bowling EX,,UE4;gpu;nvdec;status-ingame,ingame,2020-08-07 18:15:59,1 +2286,requesting accessibility in the main UI,,,,2020-08-08 0:09:05,1 +2287,Invisible Fist,,status-playable,playable,2020-08-08 13:25:52,1 +2288,Nicky: The Home Alone Golf Ball,,status-playable,playable,2020-08-08 13:45:39,1 +2289,KING OF FIGHTERS R-2,,,,2020-08-09 12:39:55,1 +2290,The Walking Dead: Season Two,,status-playable,playable,2020-08-09 12:57:06,1 +2291,"Yoru, tomosu",,,,2020-08-09 12:57:28,1 +2292,Zero Zero Zero Zero,,,,2020-08-09 13:14:58,1 +2293,Duke of Defense,,,,2020-08-09 13:34:52,1 +2294,Himno,,,,2020-08-09 13:51:57,1 +2295,The Walking Dead: A New Frontier - 010056E00B4F4000,010056E00B4F4000,status-playable,playable,2022-09-21 13:40:48,2 +2296,Cruel Bands Career,,,,2020-08-09 15:00:25,1 +2297,CARRION,,crash;status-nothing,nothing,2020-08-13 17:15:12,2 +2299,CODE SHIFTER,,status-playable,playable,2020-08-09 15:20:55,1 +2300,Ultra Hat Dimension - 01002D4012222000,01002D4012222000,services;audio;status-menus,menus,2021-11-18 9:05:20,2 +2301,Root Film,,,,2020-08-09 17:47:35,1 +2302,NAIRI: Tower of Shirin,,nvdec;status-playable,playable,2020-08-09 19:49:12,1 +2303,Panzer Paladin - 01004AE0108E0000,01004AE0108E0000,status-playable,playable,2021-05-05 18:26:00,2 +2304,Sinless,,nvdec;status-playable,playable,2020-08-09 20:18:55,1 +2305,Aviary Attorney: Definitive Edition,,status-playable,playable,2020-08-09 20:32:12,1 +2306,Lumini,,status-playable,playable,2020-08-09 20:45:09,1 +2308,Music Racer,,status-playable,playable,2020-08-10 8:51:23,1 +2309,Curious Cases,,status-playable,playable,2020-08-10 9:30:48,1 +2311,7th Sector,,nvdec;status-playable,playable,2020-08-10 14:22:14,1 +2312,Ash of Gods: Redemption,,deadlock;status-nothing,nothing,2020-08-10 18:08:32,1 +2313,The Turing Test - 0100EA100F516000,0100EA100F516000,status-playable;nvdec,playable,2022-09-21 13:24:07,2 +2314,The Town of Light - 010058000A576000,010058000A576000,gpu;status-playable,playable,2022-09-21 12:51:34,2 +2315,The Park,,UE4;crash;gpu;status-ingame,ingame,2020-12-18 12:50:07,2 +2316,Rogue Legacy,,status-playable,playable,2020-08-10 19:17:28,1 +2317,Nerved - 01008B0010160000,01008B0010160000,status-playable;UE4,playable,2022-09-20 17:14:03,3 +2318,Super Korotama - 010000D00F81A000,010000D00F81A000,status-playable,playable,2021-06-06 19:06:22,3 +2319,Mosaic,,status-playable,playable,2020-08-11 13:07:35,1 +2320,Pumped BMX Pro - 01009AE00B788000,01009AE00B788000,status-playable;nvdec;online-broken,playable,2022-09-20 17:40:50,2 +2321,The Dark Crystal,,status-playable,playable,2020-08-11 13:43:41,1 +2322,Ageless,,,,2020-08-11 13:52:24,1 +2323,EQQO - 0100E95010058000,0100E95010058000,UE4;nvdec;status-playable,playable,2021-06-13 23:10:51,3 +2324,LAST FIGHT - 01009E100BDD6000,01009E100BDD6000,status-playable,playable,2022-09-20 13:54:55,2 +2325,Neverending Nightmares - 0100F79012600000,0100F79012600000,crash;gpu;status-boots,boots,2021-04-24 1:43:35,2 +2326,Monster Jam Steel Titans - 010095C00F354000,010095C00F354000,status-menus;crash;nvdec;UE4,menus,2021-11-14 9:45:38,2 +2327,Star Story: The Horizon Escape,,status-playable,playable,2020-08-11 22:31:38,1 +2328,LOCO-SPORTS - 0100BA000FC9C000,0100BA000FC9C000,status-playable,playable,2022-09-20 14:09:30,2 +2329,Eclipse: Edge of Light,,status-playable,playable,2020-08-11 23:06:29,1 +2331,Psikyo Shooting Stars Alpha - 01007A200F2E2000,01007A200F2E2000,32-bit;status-playable,playable,2021-04-13 12:03:43,3 +2332,Monster Energy Supercross - The Official Videogame 3 - 010097800EA20000,010097800EA20000,UE4;audout;nvdec;online;status-playable,playable,2021-06-14 12:37:54,2 +2333,Musou Orochi 2 Ultimate,,crash;nvdec;status-boots,boots,2021-04-09 19:39:16,2 +2334,Alien Cruise,,status-playable,playable,2020-08-12 13:56:05,1 +2335,KUNAI - 010035A00DF62000,010035A00DF62000,status-playable;nvdec,playable,2022-09-20 13:48:34,2 +2336,Haunted Dungeons: Hyakki Castle,,status-playable,playable,2020-08-12 14:21:48,1 +2337,Tangledeep,,crash;status-boots,boots,2021-01-05 4:08:41,2 +2338,Azuran Tales: Trials,,status-playable,playable,2020-08-12 15:23:07,1 +2339,LOST ORBIT: Terminal Velocity - 010054600AC74000,010054600AC74000,status-playable,playable,2021-06-14 12:21:12,2 +2340,Monster Blast - 0100E2D0128E6000,0100E2D0128E6000,gpu;status-ingame,ingame,2023-09-02 20:02:32,3 +2341,Need a Packet?,,status-playable,playable,2020-08-12 16:09:01,1 +2342,Downwell - 010093D00C726000,010093D00C726000,status-playable,playable,2021-04-25 20:05:24,5 +2343,Dex,,nvdec;status-playable,playable,2020-08-12 16:48:12,1 +2345,Magicolors,,status-playable,playable,2020-08-12 18:39:11,1 +2346,Jisei: The First Case HD - 010038D011F08000,010038D011F08000,audio;status-playable,playable,2022-10-05 11:43:33,2 +2347,Mittelborg: City of Mages,,status-playable,playable,2020-08-12 19:58:06,1 +2348,Psikyo Shooting Stars Bravo - 0100D7400F2E4000,0100D7400F2E4000,32-bit;status-playable,playable,2021-06-14 12:09:07,4 +2349,STAB STAB STAB!,,,,2020-08-13 16:39:00,1 +2350,fault - milestone one,,nvdec;status-playable,playable,2021-03-24 10:41:49,2 +2351,Gerrrms,,status-playable,playable,2020-08-15 11:32:52,1 +2352,Aircraft Evolution - 0100E95011FDC000,0100E95011FDC000,nvdec;status-playable,playable,2021-06-14 13:30:18,2 +2353,Creaks,,status-playable,playable,2020-08-15 12:20:52,1 +2354,ARCADE FUZZ,,status-playable,playable,2020-08-15 12:37:36,1 +2355,Esports powerful pro yakyuu 2020 - 010073000FE18000,010073000FE18000,gpu;status-ingame;crash;Needs More Attention,ingame,2024-04-29 5:34:14,7 +2356,Arcade Archives ALPHA MISSION - 01005DD00BE08000,01005DD00BE08000,online;status-playable,playable,2021-04-15 9:20:43,2 +2357,Arcade Archives ALPINE SKI - 010083800DC70000,010083800DC70000,online;status-playable,playable,2021-04-15 9:28:46,2 +2358,Arcade Archives ARGUS - 010014F001DE2000,010014F001DE2000,online;status-playable,playable,2021-04-16 6:51:25,2 +2359,Arcade Archives Armed F - 010014F001DE2000,010014F001DE2000,online;status-playable,playable,2021-04-16 7:00:17,2 +2360,Arcade Archives ATHENA - 0100BEC00C7A2000,0100BEC00C7A2000,online;status-playable,playable,2021-04-16 7:10:12,2 +2361,Arcade Archives Atomic Robo-Kid - 0100426001DE4000,0100426001DE4000,online;status-playable,playable,2021-04-16 7:20:29,2 +2362,Arcade Archives BOMB JACK - 0100192009824000,0100192009824000,online;status-playable,playable,2021-04-16 9:48:26,2 +2363,Arcade Archives CLU CLU LAND - 0100EDC00E35A000,0100EDC00E35A000,online;status-playable,playable,2021-04-16 10:00:42,2 +2364,Arcade Archives EXCITEBIKE,,,,2020-08-19 12:08:03,1 +2365,Arcade Archives FRONT LINE - 0100496006EC8000,0100496006EC8000,online;status-playable,playable,2021-05-05 14:10:49,2 +2366,Arcade Archives ICE CLIMBER - 01007D200D3FC000,01007D200D3FC000,online;status-playable,playable,2021-05-05 14:18:34,2 +2367,Arcade Archives IKARI WARRIORS - 010049400C7A8000,010049400C7A8000,online;status-playable,playable,2021-05-05 14:24:46,2 +2368,Arcade Archives IMAGE FIGHT - 010008300C978000,010008300C978000,online;status-playable,playable,2021-05-05 14:31:21,2 +2369,Arcade Archives MOON CRESTA - 01000BE001DD8000,01000BE001DD8000,online;status-playable,playable,2021-05-05 14:39:29,2 +2370,Arcade Archives Ninja Spirit - 01002F300D2C6000,01002F300D2C6000,online;status-playable,playable,2021-05-05 14:45:31,2 +2371,Arcade Archives POOYAN - 0100A6E00D3F8000,0100A6E00D3F8000,online;status-playable,playable,2021-05-05 17:58:19,2 +2372,Arcade Archives PSYCHO SOLDIER - 01000D200C7A4000,01000D200C7A4000,online;status-playable,playable,2021-05-05 18:02:19,2 +2373,Arcade Archives ROAD FIGHTER - 0100FBA00E35C000,0100FBA00E35C000,online;status-playable,playable,2021-05-05 18:09:17,2 +2374,Arcade Archives ROUTE 16 - 010060000BF7C000,010060000BF7C000,online;status-playable,playable,2021-05-05 18:40:41,2 +2375,Arcade Archives Shusse Ozumo - 01007A4009834000,01007A4009834000,online;status-playable,playable,2021-05-05 17:52:25,2 +2376,Arcade Archives Solomon's Key - 01008C900982E000,01008C900982E000,online;status-playable,playable,2021-04-19 16:27:18,3 +2377,Arcade Archives TERRA FORCE - 0100348001DE6000,0100348001DE6000,online;status-playable,playable,2021-04-16 20:03:27,2 +2378,Arcade Archives THE NINJA WARRIORS - 0100DC000983A000,0100DC000983A000,online;slow;status-ingame,ingame,2021-04-16 19:54:56,2 +2379,Arcade Archives TIME PILOT - 0100AF300D2E8000,0100AF300D2E8000,online;status-playable,playable,2021-04-16 19:22:31,2 +2380,Arcade Archives URBAN CHAMPION - 010042200BE0C000,010042200BE0C000,online;status-playable,playable,2021-04-16 10:20:03,2 +2381,Arcade Archives WILD WESTERN - 01001B000D8B6000,01001B000D8B6000,online;status-playable,playable,2021-04-16 10:11:36,2 +2382,Arcade Archives GRADIUS,,,,2020-08-19 13:42:45,1 +2383,Evergate,,,,2020-08-19 22:28:07,1 +2384,Naught - 0100103011894000,0100103011894000,UE4;status-playable,playable,2021-04-26 13:31:45,2 +2385,Vitamin Connection ,,,,2020-08-19 23:18:42,1 +2386,Rock of Ages 3: Make & Break - 0100A1B00DB36000,0100A1B00DB36000,status-playable;UE4,playable,2022-10-06 12:18:29,2 +2387,Cubicity - 010040D011D04000,010040D011D04000,status-playable,playable,2021-06-14 14:19:51,1 +2389,Anima Gate of Memories: The Nameless Chronicles - 01007A400B3F8000,01007A400B3F8000,status-playable,playable,2021-06-14 14:33:06,1 +2392,Big Dipper - 0100A42011B28000,0100A42011B28000,status-playable,playable,2021-06-14 15:08:19,1 +2394,Dodo Peak - 01001770115C8000,01001770115C8000,status-playable;nvdec;UE4,playable,2022-10-04 16:13:05,1 +2395,Cube Creator X - 010001600D1E8000,010001600D1E8000,status-menus;crash,menus,2021-11-25 8:53:28,4 +2397,Raji An Ancient Epic,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 10:05:25,1 +2402,Red Siren : Space Defense - 010045400D73E000,010045400D73E000,UE4;status-playable,playable,2021-04-25 21:21:29,2 +2403,Shanky: The Vegan's Nightmare - 01000C00CC10000,,status-playable,playable,2021-01-26 15:03:55,1 +2407,Cricket 19 - 010022D00D4F0000,010022D00D4F0000,gpu;status-ingame,ingame,2021-06-14 14:56:07,4 +2408,Florence,,status-playable,playable,2020-09-05 1:22:30,4 +2409,Banner of the Maid - 010013C010C5C000,010013C010C5C000,status-playable,playable,2021-06-14 15:23:37,1 +2416,Super Loop Drive - 01003E300FCAE000,01003E300FCAE000,status-playable;nvdec;UE4,playable,2022-09-22 10:58:05,4 +2446,Buried Stars,,status-playable,playable,2020-09-07 14:11:58,2 +2447,FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition - 0100CE4010AAC000,0100CE4010AAC000,status-playable,playable,2023-04-02 23:39:12,7 +2448,Go All Out - 01000C800FADC000,01000C800FADC000,status-playable;online-broken,playable,2022-09-21 19:16:34,3 +2449,This Strange Realm of Mine,,status-playable,playable,2020-08-28 12:07:24,1 +2450,Silent World,,status-playable,playable,2020-08-28 13:45:13,1 +2451,Alder's Blood,,status-playable,playable,2020-08-28 15:15:23,1 +2452,Red Death,,status-playable,playable,2020-08-30 13:07:37,1 +2453,3000th Duel - 0100FB5010D2E000,0100FB5010D2E000,status-playable,playable,2022-09-21 17:12:08,3 +2454,Rise of Insanity,,status-playable,playable,2020-08-30 15:42:14,1 +2455,Darksiders Genesis - 0100F2300D4BA000,0100F2300D4BA000,status-playable;nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25,3 +2456,Space Blaze,,status-playable,playable,2020-08-30 16:18:05,1 +2457,Two Point Hospital - 010031200E044000,010031200E044000,status-ingame;crash;nvdec,ingame,2022-09-22 11:22:23,5 +2459,Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate,,status-playable,playable,2020-08-31 13:52:21,1 +2460,Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz,,status-playable,playable,2020-08-31 14:17:42,1 +2461,Cat Girl Without Salad: Amuse-Bouche - 010076000C86E000,010076000C86E000,status-playable,playable,2022-09-03 13:01:47,4 +2462,moon,,,,2020-08-31 15:46:23,1 +2463,Lines XL,,status-playable,playable,2020-08-31 17:48:23,1 +2464,Knightin'+,,status-playable,playable,2020-08-31 18:18:21,1 +2465,King Lucas - 0100E6B00FFBA000,0100E6B00FFBA000,status-playable,playable,2022-09-21 19:43:23,2 +2466,Skulls of the Shogun: Bone-a-fide Edition,,status-playable,playable,2020-08-31 18:58:12,1 +2467,SEGA AGES SONIC THE HEDGEHOG 2 - 01000D200C614000,01000D200C614000,status-playable,playable,2022-09-21 20:26:35,2 +2468,Devil May Cry 3 Special Edition - 01007B600D5BC000,01007B600D5BC000,status-playable;nvdec,playable,2024-07-08 12:33:23,8 +2469,Double Dragon & Kunio-Kun: Retro Brawler Bundle,,status-playable,playable,2020-09-01 12:48:46,1 +2470,Lost Horizon,,status-playable,playable,2020-09-01 13:41:22,1 +2471,Unlock the King,,status-playable,playable,2020-09-01 13:58:27,1 +2472,Vasilis,,status-playable,playable,2020-09-01 15:05:35,1 +2473,Mathland,,status-playable,playable,2020-09-01 15:40:06,1 +2474,MEGAMAN ZERO/ZX LEGACY COLLECTION - 010025C00D410000,010025C00D410000,status-playable,playable,2021-06-14 16:17:32,2 +2475,Afterparty - 0100DB100BBCE000,0100DB100BBCE000,status-playable,playable,2022-09-22 12:23:19,2 +2476,Tiny Racer - 01005D0011A40000,01005D0011A40000,status-playable,playable,2022-10-07 11:13:03,2 +2477,Skully - 0100D7B011654000,0100D7B011654000,status-playable;nvdec;UE4,playable,2022-10-06 13:52:59,3 +2478,Megadimension Neptunia VII,,32-bit;nvdec;status-playable,playable,2020-12-17 20:56:03,2 +2479,Kingdom Rush - 0100A280121F6000,0100A280121F6000,status-nothing;32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00,5 +2480,Cubers: Arena - 010082E00F1CE000,010082E00F1CE000,status-playable;nvdec;UE4,playable,2022-10-04 16:05:40,3 +2481,Air Missions: HIND,,status-playable,playable,2020-12-13 10:16:45,2 +2482,Fairy Tail - 0100CF900FA3E000,0100CF900FA3E000,status-playable;nvdec,playable,2022-10-04 23:00:32,2 +2484,Sentinels of Freedom - 01009E500D29C000,01009E500D29C000,status-playable,playable,2021-06-14 16:42:19,2 +2485,SAMURAI SHOWDOWN NEOGEO COLLECTION - 0100F6800F48E000,0100F6800F48E000,nvdec;status-playable,playable,2021-06-14 17:12:56,3 +2486,Rugby Challenge 4 - 010009B00D33C000,010009B00D33C000,slow;status-playable;online-broken;UE4,playable,2022-10-06 12:45:53,3 +2487,Neon Abyss - 0100BAB01113A000,0100BAB01113A000,status-playable,playable,2022-10-05 15:59:44,2 +2488,Max & The Book of Chaos,,status-playable,playable,2020-09-02 12:24:43,1 +2489,Family Mysteries: Poisonous Promises - 0100034012606000,0100034012606000,audio;status-menus;crash,menus,2021-11-26 12:35:06,2 +2490,Interrogation: You will be deceived - 010041501005E000,010041501005E000,status-playable,playable,2022-10-05 11:40:10,2 +2491,Instant Sports Summer Games,,gpu;status-menus,menus,2020-09-02 13:39:28,1 +2492,AvoCuddle,,status-playable,playable,2020-09-02 14:50:13,1 +2493,Be-A Walker,,slow;status-ingame,ingame,2020-09-02 15:00:31,1 +2494,"Soccer, Tactics & Glory - 010095C00F9DE000",010095C00F9DE000,gpu;status-ingame,ingame,2022-09-26 17:15:58,3 +2495,The Great Perhaps,,status-playable,playable,2020-09-02 15:57:04,1 +2496,Volta-X - 0100A7900E79C000,0100A7900E79C000,status-playable;online-broken,playable,2022-10-07 12:20:51,1 +2497,Hero Hours Contract,,,,2020-09-03 3:13:22,1 +2498,Starlit Adventures Golden Stars,,status-playable,playable,2020-11-21 12:14:43,3 +2499,Superliminal,,status-playable,playable,2020-09-03 13:20:50,1 +2500,Robozarro,,status-playable,playable,2020-09-03 13:33:40,1 +2501,QuietMansion2,,status-playable,playable,2020-09-03 14:59:35,1 +2502,DISTRAINT 2,,status-playable,playable,2020-09-03 16:08:12,1 +2503,Bloodstained: Curse of the Moon 2,,status-playable,playable,2020-09-04 10:56:27,1 +2504,Deadly Premonition 2 - 0100BAC011928000,0100BAC011928000,status-playable,playable,2021-06-15 14:12:36,2 +2505,CrossCode - 01003D90058FC000,01003D90058FC000,status-playable,playable,2024-02-17 10:23:19,6 +2506,Metro: Last Light Redux - 0100F0400E850000,0100F0400E850000,slow;status-ingame;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52,6 +2507,Soul Axiom Rebooted,,nvdec;slow;status-ingame,ingame,2020-09-04 12:41:01,1 +2508,Portal Dogs,,status-playable,playable,2020-09-04 12:55:46,1 +2509,Bucket Knight,,crash;status-ingame,ingame,2020-09-04 13:11:24,1 +2510,Arcade Archives LIFE FORCE,,status-playable,playable,2020-09-04 13:26:25,1 +2511,Stela - 01002DE01043E000,01002DE01043E000,UE4;status-playable,playable,2021-06-15 13:28:34,4 +2512,7 Billion Humans,,32-bit;status-playable,playable,2020-12-17 21:04:58,4 +2513,Rack N Ruin,,status-playable,playable,2020-09-04 15:20:26,1 +2515,Piffle,,,,2020-09-06 0:07:53,1 +2516,BATTOJUTSU,,,,2020-09-06 0:07:58,1 +2517,Super Battle Cards,,,,2020-09-06 0:08:01,1 +2518,Hayfever - 0100EA900FB2C000,0100EA900FB2C000,status-playable;loader-allocator,playable,2022-09-22 17:35:41,6 +2519,Save Koch - 0100C8300FA90000,0100C8300FA90000,status-playable,playable,2022-09-26 17:06:56,2 +2520,MY HERO ONE'S JUSTICE 2,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-18 14:08:47,2 +2521,Deep Diving Adventures - 010026800FA88000,010026800FA88000,status-playable,playable,2022-09-22 16:43:37,2 +2522,Trials of Mana Demo - 0100E1D00FBDE000,0100E1D00FBDE000,status-playable;nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02,2 +2523,Sky Racket,,status-playable,playable,2020-09-07 12:22:24,1 +2524,LA-MULANA 1 & 2 - 0100E5D00F4AE000,0100E5D00F4AE000,status-playable,playable,2022-09-22 17:56:36,4 +2525,Exit the Gungeon - 0100DD30110CC000,0100DD30110CC000,status-playable,playable,2022-09-22 17:04:43,2 +2529,Super Mario 3D All-Stars - 010049900F546000,010049900F546000,services-horizon;slow;status-ingame;vulkan;amd-vendor-bug,ingame,2024-05-07 2:38:16,16 +2530,Cupid Parasite - 0100F7E00DFC8000,0100F7E00DFC8000,gpu;status-ingame,ingame,2023-08-21 5:52:36,3 +2531,Toraware no Paruma Deluxe Edition,,,,2020-09-20 9:34:41,1 +2533,Uta no☆Prince-sama♪ Repeat Love - 010024200E00A000,010024200E00A000,status-playable;nvdec,playable,2022-12-09 9:21:51,2 +2534,Clock Zero ~Shuuen no Ichibyou~ Devote - 01008C100C572000,01008C100C572000,status-playable;nvdec,playable,2022-12-04 22:19:14,3 +2535,Dear Magi - Mahou Shounen Gakka -,,status-playable,playable,2020-11-22 16:45:16,4 +2536,Reine des Fleurs,,cpu;crash;status-boots,boots,2020-09-27 18:50:39,2 +2537,Kaeru Batake DE Tsukamaete,,,,2020-09-20 17:06:57,1 +2538,Koi no Hanasaku Hyakkaen,,32-bit;gpu;nvdec;status-ingame,ingame,2020-10-03 14:17:10,4 +2539,Brothers Conflict: Precious Baby,,,,2020-09-20 19:13:24,1 +2540,Dairoku: Ayakashimori - 010061300DF48000,010061300DF48000,status-nothing;Needs Update;loader-allocator,nothing,2021-11-30 5:09:38,4 +2542,Yunohana Spring! - Mellow Times -,,audio;crash;status-menus,menus,2020-09-27 19:27:40,2 +2543,Nil Admirari no Tenbin: Irodori Nadeshiko,,,,2020-09-21 15:59:26,1 +2544,Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~,,cpu;crash;status-boots,boots,2020-09-27 19:01:25,2 +2545,BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~,,crash;status-menus,menus,2020-10-04 6:12:08,3 +2546,Kin'iro no Corda Octave,,status-playable,playable,2020-09-22 13:23:12,3 +2547,Moujuutsukai to Ouji-sama ~Flower & Snow~,,,,2020-09-22 17:22:03,1 +2548,Spooky Ghosts Dot Com - 0100C6100D75E000,0100C6100D75E000,status-playable,playable,2021-06-15 15:16:11,3 +2549,NBA 2K21 - 0100E24011D1E000,0100E24011D1E000,gpu;status-boots,boots,2022-10-05 15:31:51,2 +2550,Commander Keen in Keen Dreams - 0100C4D00D16A000,0100C4D00D16A000,gpu;status-ingame,ingame,2022-08-04 20:34:20,8 +2551,Minecraft - 0100D71004694000,0100D71004694000,status-ingame;crash;ldn-broken,ingame,2024-09-29 12:08:59,21 +2552,PGA TOUR 2K21 - 010053401147C000,010053401147C000,deadlock;status-ingame;nvdec,ingame,2022-10-05 21:53:50,4 +2553,The Executioner - 0100C2E0129A6000,0100C2E0129A6000,nvdec;status-playable,playable,2021-01-23 0:31:28,2 +2554,Tamiku - 010008A0128C4000,010008A0128C4000,gpu;status-ingame,ingame,2021-06-15 20:06:55,2 +2555,"Shinobi, Koi Utsutsu",,,,2020-09-23 11:04:27,1 +2556,Hades - 0100535012974000,0100535012974000,status-playable;vulkan,playable,2022-10-05 10:45:21,11 +2557,Wolfenstein: Youngblood - 01003BD00CAAE000,01003BD00CAAE000,status-boots;online-broken,boots,2024-07-12 23:49:20,4 +2558,Taimumari: Complete Edition - 010040A00EA26000,010040A00EA26000,status-playable,playable,2022-12-06 13:34:49,4 +2559,Sangoku Rensenki ~Otome no Heihou!~,,gpu;nvdec;status-ingame,ingame,2020-10-17 19:13:14,3 +2560,Norn9 ~Norn + Nonette~ LOFN - 01001A500AD6A000,01001A500AD6A000,status-playable;nvdec;vulkan-backend-bug,playable,2022-12-09 9:29:16,4 +2561,Disaster Report 4: Summer Memories - 010020700E2A2000,010020700E2A2000,status-playable;nvdec;UE4,playable,2022-09-27 19:41:31,5 +2562,No Straight Roads - 01009F3011004000,01009F3011004000,status-playable;nvdec,playable,2022-10-05 17:01:38,4 +2563,Gnosia - 01008EF013A7C000,01008EF013A7C000,status-playable,playable,2021-04-05 17:20:30,5 +2564,Shin Hayarigami 1 and 2 Pack,,,,2020-09-25 15:56:19,1 +2566,Gothic Murder: Adventure That Changes Destiny,,deadlock;status-ingame;crash,ingame,2022-09-30 23:16:53,2 +2567,Grand Theft Auto 3 - 05B1D2ABD3D30000,05B1D2ABD3D30000,services;status-nothing;crash;homebrew,nothing,2023-05-01 22:01:58,3 +2568,Super Mario 64 - 054507E0B7552000,054507E0B7552000,status-ingame;homebrew,ingame,2024-03-20 16:57:27,2 +2569,Satsujin Tantei Jack the Ripper - 0100A4700BC98000,0100A4700BC98000,status-playable,playable,2021-06-21 16:32:54,3 +2570,Yoshiwara Higanbana Kuon no Chigiri,,nvdec;status-playable,playable,2020-10-17 19:14:46,3 +2571,Katakoi Contrast - collection of branch - - 01007FD00DB20000,01007FD00DB20000,status-playable;nvdec,playable,2022-12-09 9:41:26,2 +2572,Tlicolity Eyes - twinkle showtime - - 010019500DB1E000,010019500DB1E000,gpu;status-boots,boots,2021-05-29 19:43:44,2 +2573,Omega Vampire,,nvdec;status-playable,playable,2020-10-17 19:15:35,3 +2574,Iris School of Wizardry - Vinculum Hearts - - 0100AD300B786000,0100AD300B786000,status-playable,playable,2022-12-05 13:11:15,2 +2575,"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou - 0100EA100DF92000",0100EA100DF92000,32-bit;status-playable;nvdec,playable,2022-12-05 13:19:12,3 +2576,Undead Darlings ~no cure for love~,,,,2020-09-30 8:34:06,1 +2577,LEGO Marvel Super Heroes 2 - 0100D3A00409E000,0100D3A00409E000,status-nothing;crash,nothing,2023-03-02 17:12:33,5 +2578,RollerCoaster Tycoon 3: Complete Edition - 01004900113F8000,01004900113F8000,32-bit;status-playable,playable,2022-10-17 14:18:01,4 +2579,R.B.I. Baseball 20 - 010061400E7D4000,010061400E7D4000,status-playable,playable,2021-06-15 21:16:29,2 +2580,BATTLESLOTHS,,status-playable,playable,2020-10-03 8:32:22,1 +2581,Explosive Jake - 01009B7010B42000,01009B7010B42000,status-boots;crash,boots,2021-11-03 7:48:32,4 +2582,Dezatopia - 0100AFC00E06A000,0100AFC00E06A000,online;status-playable,playable,2021-06-15 21:06:11,2 +2583,Wordify,,status-playable,playable,2020-10-03 9:01:07,1 +2585,Wizards: Wand of Epicosity - 0100C7600E77E000,0100C7600E77E000,status-playable,playable,2022-10-07 12:32:06,2 +2586,Titan Glory - 0100FE801185E000,0100FE801185E000,status-boots,boots,2022-10-07 11:36:40,3 +2587,Soccer Pinball - 0100B5000E05C000,0100B5000E05C000,UE4;gpu;status-ingame,ingame,2021-06-15 20:56:51,2 +2588,Steam Tactics - 0100AE100DAFA000,0100AE100DAFA000,status-playable,playable,2022-10-06 16:53:45,2 +2589,Trover Saves the Universe,,UE4;crash;status-nothing,nothing,2020-10-03 10:25:27,1 +2590,112th Seed,,status-playable,playable,2020-10-03 10:32:38,1 +2591,Spitlings - 010042700E3FC000,010042700E3FC000,status-playable;online-broken,playable,2022-10-06 16:42:39,3 +2592,Unlock the King 2 - 0100A3E011CB0000,0100A3E011CB0000,status-playable,playable,2021-06-15 20:43:55,3 +2593,Preventive Strike - 010009300D278000,010009300D278000,status-playable;nvdec,playable,2022-10-06 10:55:51,2 +2594,Hidden - 01004E800F03C000,01004E800F03C000,slow;status-ingame,ingame,2022-10-05 10:56:53,2 +2595,Pulstario - 0100861012474000,0100861012474000,status-playable,playable,2022-10-06 11:02:01,2 +2596,Frontline Zed,,status-playable,playable,2020-10-03 12:55:59,1 +2597,bayala - the game - 0100194010422000,0100194010422000,status-playable,playable,2022-10-04 14:09:25,2 +2598,City Bus Driving Simulator - 01005E501284E000,01005E501284E000,status-playable,playable,2021-06-15 21:25:59,2 +2599,Memory Lane - 010062F011E7C000,010062F011E7C000,status-playable;UE4,playable,2022-10-05 14:31:03,3 +2600,Minefield - 0100B7500F756000,0100B7500F756000,status-playable,playable,2022-10-05 15:03:29,2 +2601,Double Kick Heroes,,gpu;status-ingame,ingame,2020-10-03 14:33:59,1 +2602,Little Shopping,,status-playable,playable,2020-10-03 16:34:35,1 +2603,Car Quest - 01007BD00AE70000,01007BD00AE70000,deadlock;status-menus,menus,2021-11-18 8:59:18,2 +2604,RogueCube - 0100C7300C0EC000,0100C7300C0EC000,status-playable,playable,2021-06-16 12:16:42,2 +2605,Timber Tennis Versus,,online;status-playable,playable,2020-10-03 17:07:15,1 +2606,Swimsanity! - 010049D00C8B0000,010049D00C8B0000,status-menus;online,menus,2021-11-26 14:27:16,2 +2607,Dininho Adventures,,status-playable,playable,2020-10-03 17:25:51,1 +2608,Rhythm of the Gods,,UE4;crash;status-nothing,nothing,2020-10-03 17:39:59,1 +2609,"Rainbows, toilets & unicorns",,nvdec;status-playable,playable,2020-10-03 18:08:18,1 +2610,Super Mario Bros. 35 - 0100277011F1A000,0100277011F1A000,status-menus;online-broken,menus,2022-08-07 16:27:25,2 +2611,Bohemian Killing - 0100AD1010CCE000,0100AD1010CCE000,status-playable;vulkan-backend-bug,playable,2022-09-26 22:41:37,2 +2612,Colorgrid,,status-playable,playable,2020-10-04 1:50:52,1 +2613,Dogurai,,status-playable,playable,2020-10-04 2:40:16,1 +2614,The Legend of Heroes: Trails of Cold Steel III Demo - 01009B101044C000,01009B101044C000,demo;nvdec;status-playable,playable,2021-04-23 1:07:32,2 +2615,Star Wars Jedi Knight: Jedi Academy - 01008CA00FAE8000,01008CA00FAE8000,gpu;status-boots,boots,2021-06-16 12:35:30,2 +2616,Panzer Dragoon: Remake,,status-playable,playable,2020-10-04 4:03:55,1 +2617,Blackmoor2 - 0100A0A00E660000,0100A0A00E660000,status-playable;online-broken,playable,2022-09-26 20:26:34,3 +2618,CHAOS CODE -NEW SIGN OF CATASTROPHE- - 01007600115CE000,01007600115CE000,status-boots;crash;nvdec,boots,2022-04-04 12:24:21,3 +2619,Saints Row IV - 01008D100D43E000,01008D100D43E000,status-playable;ldn-untested;LAN,playable,2023-12-04 18:33:37,5 +2620,Troubleshooter,,UE4;crash;status-nothing,nothing,2020-10-04 13:46:50,1 +2621,Children of Zodiarcs,,status-playable,playable,2020-10-04 14:23:33,1 +2622,VtM Coteries of New York,,status-playable,playable,2020-10-04 14:55:22,1 +2623,Grand Guilds - 010038100D436000,010038100D436000,UE4;nvdec;status-playable,playable,2021-04-26 12:49:05,2 +2624,Best Friend Forever,,,,2020-10-04 15:41:42,1 +2625,Copperbell,,status-playable,playable,2020-10-04 15:54:36,1 +2626,Deep Sky Derelicts Definitive Edition - 0100C3E00D68E000,0100C3E00D68E000,status-playable,playable,2022-09-27 11:21:08,3 +2627,Wanba Warriors,,status-playable,playable,2020-10-04 17:56:22,1 +2628,Mist Hunter - 010059200CC40000,010059200CC40000,status-playable,playable,2021-06-16 13:58:58,2 +2629,Shinsekai Into the Depths - 01004EE0104F6000,01004EE0104F6000,status-playable,playable,2022-09-28 14:07:51,2 +2630,ELEA: Paradigm Shift,,UE4;crash;status-nothing,nothing,2020-10-04 19:07:43,1 +2631,Harukanaru Toki no Naka De 7,,,,2020-10-05 10:12:41,1 +2632,Saiaku Naru Saiyaku Ningen ni Sasagu,,,,2020-10-05 10:26:45,1 +2633,planetarian HD ~the reverie of a little planet~,,status-playable,playable,2020-10-17 20:26:20,3 +2634,Hypnospace Outlaw - 0100959010466000,0100959010466000,status-ingame;nvdec,ingame,2023-08-02 22:46:49,2 +2635,Dei Gratia no Rashinban - 010071C00CBA4000,010071C00CBA4000,crash;status-nothing,nothing,2021-07-13 2:25:32,2 +2636,Rogue Company,,,,2020-10-05 17:52:10,1 +2637,MX Nitro - 0100161009E5C000,0100161009E5C000,status-playable,playable,2022-09-27 22:34:33,2 +2638,Wanderjahr TryAgainOrWalkAway,,status-playable,playable,2020-12-16 9:46:04,2 +2639,Pooplers,,status-playable,playable,2020-11-02 11:52:10,2 +2640,Beyond Enemy Lines: Essentials - 0100B8F00DACA000,0100B8F00DACA000,status-playable;nvdec;UE4,playable,2022-09-26 19:48:16,4 +2642,Lust for Darkness: Dawn Edition - 0100F0B00F68E000,0100F0B00F68E000,nvdec;status-playable,playable,2021-06-16 13:47:46,2 +2643,Nerdook Bundle Vol. 1,,gpu;slow;status-ingame,ingame,2020-10-07 14:27:10,1 +2644,Indie Puzzle Bundle Vol 1 - 0100A2101107C000,0100A2101107C000,status-playable,playable,2022-09-27 22:23:21,2 +2645,Wurroom,,status-playable,playable,2020-10-07 22:46:21,1 +2646,Valley - 0100E0E00B108000,0100E0E00B108000,status-playable;nvdec,playable,2022-09-28 19:27:58,2 +2647,FIFA 21 Legacy Edition - 01000A001171A000,01000A001171A000,gpu;status-ingame;online-broken,ingame,2023-12-11 22:10:19,7 +2648,Hotline Miami Collection - 0100D0E00E51E000,0100D0E00E51E000,status-playable;nvdec,playable,2022-09-09 16:41:19,4 +2649,QuakespasmNX,,status-nothing;crash;homebrew,nothing,2022-07-23 19:28:07,3 +2650,nxquake2,,services;status-nothing;crash;homebrew,nothing,2022-08-04 23:14:04,5 +2651,ONE PIECE: PIRATE WARRIORS 4 - 01008FE00E2F6000,01008FE00E2F6000,status-playable;online-broken;ldn-untested,playable,2022-09-27 22:55:46,2 +2652,The Complex - 01004170113D4000,01004170113D4000,status-playable;nvdec,playable,2022-09-28 14:35:41,3 +2653,Gigantosaurus The Game - 01002C400E526000,01002C400E526000,status-playable;UE4,playable,2022-09-27 21:20:00,4 +2654,TY the Tasmanian Tiger,,32-bit;crash;nvdec;status-menus,menus,2020-12-17 21:15:00,2 +2655,Speaking Simulator,,status-playable,playable,2020-10-08 13:00:39,1 +2656,Pikmin 3 Deluxe Demo - 01001CB0106F8000,01001CB0106F8000,32-bit;crash;demo;gpu;status-ingame,ingame,2021-06-16 18:38:07,2 +2657,Rascal Fight,,status-playable,playable,2020-10-08 13:23:30,1 +2658,Rain City,,status-playable,playable,2020-10-08 16:59:03,1 +2660,Fury Unleashed Demo,,status-playable,playable,2020-10-08 20:09:21,1 +2661,Bridge 3,,status-playable,playable,2020-10-08 20:47:24,1 +2662,RMX Real Motocross,,status-playable,playable,2020-10-08 21:06:15,1 +2663,Birthday of Midnight,,,,2020-10-09 9:43:24,1 +2664,WARSAW,,,,2020-10-09 10:31:40,1 +2665,Candy Raid: The Factory,,,,2020-10-09 10:43:39,1 +2666,World for Two,,,,2020-10-09 12:37:07,1 +2667,Voxel Pirates - 0100AFA011068000,0100AFA011068000,status-playable,playable,2022-09-28 22:55:02,2 +2668,Voxel Galaxy - 0100B1E0100A4000,0100B1E0100A4000,status-playable,playable,2022-09-28 22:45:02,2 +2669,Journey of the Broken Circle,,,,2020-10-09 13:24:52,1 +2670,Daggerhood,,,,2020-10-09 13:54:02,1 +2671,Flipon,,,,2020-10-09 14:23:40,1 +2672,Nevaeh - 0100C20012A54000,0100C20012A54000,gpu;nvdec;status-ingame,ingame,2021-06-16 17:29:03,2 +2673,Bookbound Brigade,,status-playable,playable,2020-10-09 14:30:29,1 +2674,Aery - Sky Castle - 010018E012914000,010018E012914000,status-playable,playable,2022-10-21 17:58:49,3 +2675,Nickelodeon Kart Racers 2 Grand Prix,,,,2020-10-09 14:54:17,1 +2676,Issho ni Asobo Koupen chan,,,,2020-10-09 14:57:27,1 +2677,Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o - 010016C011AAA000,010016C011AAA000,status-playable,playable,2023-04-26 9:51:08,4 +2678,Kono Subarashii Sekai ni Shukufuku wo! Kurenai Densetsu,,,,2020-10-09 15:06:00,1 +2679,Hide & Dance!,,,,2020-10-09 15:10:06,1 +2680,Pro Yakyuu Famista 2020,,,,2020-10-09 15:21:25,1 +2681,METAL MAX Xeno Reborn - 0100E8F00F6BE000,0100E8F00F6BE000,status-playable,playable,2022-12-05 15:33:53,2 +2682,Ikenfell - 010040900AF46000,010040900AF46000,status-playable,playable,2021-06-16 17:18:44,3 +2683,Depixtion,,status-playable,playable,2020-10-10 18:52:37,1 +2684,GREEN The Life Algorithm - 0100DFE00F002000,0100DFE00F002000,status-playable,playable,2022-09-27 21:37:13,2 +2685,Served! A gourmet race - 0100B2C00E4DA000,0100B2C00E4DA000,status-playable;nvdec,playable,2022-09-28 12:46:00,2 +2686,OTTTD,,slow;status-ingame,ingame,2020-10-10 19:31:07,1 +2687,Metamorphosis - 010055200E87E000,010055200E87E000,UE4;audout;gpu;nvdec;status-ingame,ingame,2021-06-16 16:18:11,3 +2688,Zero Strain - 01004B001058C000,01004B001058C000,services;status-menus;UE4,menus,2021-11-10 7:48:32,2 +2689,Time Carnage - 01004C500B698000,01004C500B698000,status-playable,playable,2021-06-16 17:57:28,2 +2690,Spiritfarer - 0100BD400DC52000,0100BD400DC52000,gpu;status-ingame,ingame,2022-10-06 16:31:38,2 +2691,Street Power Soccer,,UE4;crash;status-boots,boots,2020-11-21 12:28:57,2 +2692,OZMAFIA!! -vivace-,,,,2020-10-12 10:24:45,1 +2693,Road to Guangdong,,slow;status-playable,playable,2020-10-12 12:15:32,1 +2694,Prehistoric Dude,,gpu;status-ingame,ingame,2020-10-12 12:38:48,1 +2695,MIND Path to Thalamus - 0100F5700C9A8000,0100F5700C9A8000,UE4;status-playable,playable,2021-06-16 17:37:25,2 +2696,Manifold Garden,,status-playable,playable,2020-10-13 20:27:13,1 +2697,INMOST - 0100F1401161E000,0100F1401161E000,status-playable,playable,2022-10-05 11:27:40,3 +2698,G.I. Joe Operation Blackout,,UE4;crash;status-boots,boots,2020-11-21 12:37:44,2 +2699,Petal Crash,,,,2020-10-14 7:58:02,1 +2700,Helheim Hassle,,status-playable,playable,2020-10-14 11:38:36,1 +2701,FuzzBall - 010067600F1A0000,010067600F1A0000,crash;status-nothing,nothing,2021-03-29 20:13:21,2 +2702,Fight Crab - 01006980127F0000,01006980127F0000,status-playable;online-broken;ldn-untested,playable,2022-10-05 10:24:04,3 +2703,Faeria - 010069100DB08000,010069100DB08000,status-menus;nvdec;online-broken,menus,2022-10-04 16:44:41,2 +2704,Escape from Tethys,,status-playable,playable,2020-10-14 22:38:25,1 +2705,Chinese Parents - 010046F012A04000,010046F012A04000,status-playable,playable,2021-04-08 12:56:41,3 +2706,Boomerang Fu - 010081A00EE62000,010081A00EE62000,status-playable,playable,2024-07-28 1:12:41,4 +2707,Bite the Bullet,,status-playable,playable,2020-10-14 23:10:11,1 +2708,Pretty Princess Magical Coordinate,,status-playable,playable,2020-10-15 11:43:41,2 +2709,A Short Hike,,status-playable,playable,2020-10-15 0:19:58,1 +2710,HYPERCHARGE: Unboxed - 0100A8B00F0B4000,0100A8B00F0B4000,status-playable;nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39,3 +2711,Anima: Gate of Memories - 0100706005B6A000,0100706005B6A000,nvdec;status-playable,playable,2021-06-16 18:13:18,2 +2712,Perky Little Things - 01005CD012DC0000,01005CD012DC0000,status-boots;crash;vulkan,boots,2024-08-04 7:22:46,9 +2713,Save Your Nuts - 010091000F72C000,010091000F72C000,status-playable;nvdec;online-broken;UE4,playable,2022-09-27 23:12:02,4 +2714,Unknown Fate,,slow;status-ingame,ingame,2020-10-15 12:27:42,1 +2715,Picross S4,,status-playable,playable,2020-10-15 12:33:46,1 +2716,The Station - 010007F00AF56000,010007F00AF56000,status-playable,playable,2022-09-28 18:15:27,2 +2717,Liege Dragon - 010041F0128AE000,010041F0128AE000,status-playable,playable,2022-10-12 10:27:03,2 +2718,G-MODE Archives 06 The strongest ever Julia Miyamoto,,status-playable,playable,2020-10-15 13:06:26,1 +2719,Prinny: Can I Really Be the Hero? - 01007A0011878000,01007A0011878000,32-bit;status-playable;nvdec,playable,2023-10-22 9:25:25,5 +2720,"Prinny 2: Dawn of Operation Panties, Dood! - 01008FA01187A000",01008FA01187A000,32-bit;status-playable,playable,2022-10-13 12:42:58,4 +2721,Convoy,,status-playable,playable,2020-10-15 14:43:50,1 +2722,Fight of Animals,,online;status-playable,playable,2020-10-15 15:08:28,1 +2723,Strawberry Vinegar - 0100D7E011C64000,0100D7E011C64000,status-playable;nvdec,playable,2022-12-05 16:25:40,3 +2724,Inside Grass: A little adventure,,status-playable,playable,2020-10-15 15:26:27,1 +2725,Battle Princess Madelyn Royal Edition - 0100A7500DF64000,0100A7500DF64000,status-playable,playable,2022-09-26 19:14:49,2 +2726,A HERO AND A GARDEN - 01009E1011EC4000,01009E1011EC4000,status-playable,playable,2022-12-05 16:37:47,2 +2727,Trials of Mana - 0100D7800E9E0000,0100D7800E9E0000,status-playable;UE4,playable,2022-09-30 21:50:37,3 +2728,Ultimate Fishing Simulator - 010048901295C000,010048901295C000,status-playable,playable,2021-06-16 18:38:23,2 +2729,Struggling,,status-playable,playable,2020-10-15 20:37:03,1 +2730,Samurai Jack Battle Through Time - 01006C600E46E000,01006C600E46E000,status-playable;nvdec;UE4,playable,2022-10-06 13:33:59,2 +2731,House Flipper - 0100CAE00EB02000,0100CAE00EB02000,status-playable,playable,2021-06-16 18:28:32,2 +2732,Aokana - Four Rhythms Across the Blue - 0100990011866000,0100990011866000,status-playable,playable,2022-10-04 13:50:26,2 +2733,NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO - 010084D00CF5E000,010084D00CF5E000,status-playable,playable,2024-06-29 13:04:22,10 +2734,Where Angels Cry - 010027D011C9C000,010027D011C9C000,gpu;status-ingame;nvdec,ingame,2022-09-30 22:24:47,3 +2735,The Copper Canyon Dixie Dash - 01000F20102AC000,01000F20102AC000,status-playable;UE4,playable,2022-09-29 11:42:29,3 +2736,Cloudpunk,,,,2020-10-15 23:03:55,1 +2737,MotoGP 20 - 01001FA00FBBC000,01001FA00FBBC000,status-playable;ldn-untested,playable,2022-09-29 17:58:01,3 +2738,Little Town Hero,,status-playable,playable,2020-10-15 23:28:48,1 +2739,Broken Lines,,status-playable,playable,2020-10-16 0:01:37,1 +2740,Crown Trick - 0100059012BAE000,0100059012BAE000,status-playable,playable,2021-06-16 19:36:29,2 +2741,Archaica: Path of LightInd,,crash;status-nothing,nothing,2020-10-16 13:22:26,1 +2742,Indivisible - 01001D3003FDE000,01001D3003FDE000,status-playable;nvdec,playable,2022-09-29 15:20:57,2 +2743,Thy Sword - 01000AC011588000,01000AC011588000,status-ingame;crash,ingame,2022-09-30 16:43:14,3 +2744,Spirit of the North - 01005E101122E000,01005E101122E000,status-playable;UE4,playable,2022-09-30 11:40:47,3 +2745,Megabyte Punch,,status-playable,playable,2020-10-16 14:07:18,1 +2746,Book of Demons - 01007A200F452000,01007A200F452000,status-playable,playable,2022-09-29 12:03:43,5 +2747,80's OVERDRIVE,,status-playable,playable,2020-10-16 14:33:32,1 +2748,My Universe My Baby,,,,2020-10-17 14:04:01,1 +2749,Mario Kart Live: Home Circuit - 0100ED100BA3A000,0100ED100BA3A000,services;status-nothing;crash;Needs More Attention,nothing,2022-12-07 22:36:52,2 +2750,STONE - 010070D00F640000,010070D00F640000,status-playable;UE4,playable,2022-09-30 11:53:32,2 +2751,Newt One,,status-playable,playable,2020-10-17 21:21:48,1 +2752,Zoids Wild Blast Unleashed - 010069C0123D8000,010069C0123D8000,status-playable;nvdec,playable,2022-10-15 11:26:59,2 +2753,KINGDOM HEARTS Melody of Memory DEMO,,,,2020-10-18 14:57:30,1 +2754,Escape First,,status-playable,playable,2020-10-20 22:46:53,1 +2755,If My Heart Had Wings - 01001AC00ED72000,01001AC00ED72000,status-playable,playable,2022-09-29 14:54:57,2 +2756,Felix the Reaper,,nvdec;status-playable,playable,2020-10-20 23:43:03,1 +2757,War-Torn Dreams,,crash;status-nothing,nothing,2020-10-21 11:36:16,1 +2758,TT Isle of Man 2 - 010000400F582000,010000400F582000,gpu;status-ingame;nvdec;online-broken,ingame,2022-09-30 22:13:05,3 +2759,Kholat - 0100F680116A2000,0100F680116A2000,UE4;nvdec;status-playable,playable,2021-06-17 11:52:48,2 +2760,Dungeon of the Endless - 010034300F0E2000,010034300F0E2000,nvdec;status-playable,playable,2021-05-27 19:16:26,2 +2761,Gravity Rider Zero - 01002C2011828000,01002C2011828000,gpu;status-ingame;vulkan-backend-bug,ingame,2022-09-29 13:56:13,6 +2762,Oddworld: Munch's Oddysee - 0100BB500EE3C000,0100BB500EE3C000,gpu;nvdec;status-ingame,ingame,2021-06-17 12:11:50,2 +2763,Five Nights at Freddy's: Help Wanted - 0100F7901118C000,0100F7901118C000,status-playable;UE4,playable,2022-09-29 12:40:09,4 +2764,Gates of Hell,,slow;status-playable,playable,2020-10-22 12:44:26,1 +2765,Concept Destruction - 0100971011224000,0100971011224000,status-playable,playable,2022-09-29 12:28:56,2 +2766,Zenge,,status-playable,playable,2020-10-22 13:23:57,1 +2767,Water Balloon Mania,,status-playable,playable,2020-10-23 20:20:59,1 +2768,The Persistence - 010050101127C000,010050101127C000,nvdec;status-playable,playable,2021-06-06 19:15:40,2 +2769,The House of Da Vinci 2,,status-playable,playable,2020-10-23 20:47:17,1 +2770,The Experiment: Escape Room - 01006050114D4000,01006050114D4000,gpu;status-ingame,ingame,2022-09-30 13:20:35,3 +2771,Telling Lies,,status-playable,playable,2020-10-23 21:14:51,1 +2772,She Sees Red - 01000320110C2000,01000320110C2000,status-playable;nvdec,playable,2022-09-30 11:30:15,3 +2773,Golf With Your Friends - 01006FB00EBE0000,01006FB00EBE0000,status-playable;online-broken,playable,2022-09-29 12:55:11,2 +2774,Island Saver,,nvdec;status-playable,playable,2020-10-23 22:07:02,1 +2775,Devil May Cry 2 - 01007CF00D5BA000,01007CF00D5BA000,status-playable;nvdec,playable,2023-01-24 23:03:20,3 +2776,The Otterman Empire - 0100B0101265C000,0100B0101265C000,UE4;gpu;status-ingame,ingame,2021-06-17 12:27:15,2 +2777,SaGa SCARLET GRACE: AMBITIONS - 010003A00D0B4000,010003A00D0B4000,status-playable,playable,2022-10-06 13:20:31,3 +2778,REZ PLZ,,status-playable,playable,2020-10-24 13:26:12,1 +2779,Bossgard - 010076F00EBE4000,010076F00EBE4000,status-playable;online-broken,playable,2022-10-04 14:21:13,2 +2780,1993 Shenandoah,,status-playable,playable,2020-10-24 13:55:42,1 +2781,Ori and the Will of the Wisps - 01008DD013200000,01008DD013200000,status-playable,playable,2023-03-07 0:47:13,12 +2782,WWE 2K Battlegrounds - 010081700EDF4000,010081700EDF4000,status-playable;nvdec;online-broken;UE4,playable,2022-10-07 12:44:40,5 +2783,Shaolin vs Wutang : Eastern Heroes - 01003AB01062C000,01003AB01062C000,deadlock;status-nothing,nothing,2021-03-29 20:38:54,2 +2784,Mini Motor Racing X - 01003560119A6000,01003560119A6000,status-playable,playable,2021-04-13 17:54:49,4 +2785,Secret Files 3,,nvdec;status-playable,playable,2020-10-24 15:32:39,1 +2786,Othercide - 0100E5900F49A000,0100E5900F49A000,status-playable;nvdec,playable,2022-10-05 19:04:38,2 +2787,Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai,,status-playable,playable,2020-11-12 0:11:50,2 +2788,Party Hard 2 - 010022801217E000,010022801217E000,status-playable;nvdec,playable,2022-10-05 20:31:48,2 +2789,Paradise Killer - 01007FB010DC8000,01007FB010DC8000,status-playable;UE4,playable,2022-10-05 19:33:05,5 +2790,MX vs ATV All Out - 0100218011E7E000,0100218011E7E000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46,3 +2791,CastleStorm 2,,UE4;crash;nvdec;status-boots,boots,2020-10-25 11:22:44,1 +2792,Hotshot Racing - 0100BDE008218000,0100BDE008218000,gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17,4 +2793,Bounty Battle - 0100E1200DC1A000,0100E1200DC1A000,status-playable;nvdec,playable,2022-10-04 14:40:51,2 +2794,Avicii Invector,,status-playable,playable,2020-10-25 12:12:56,1 +2795,Ys Origin - 0100F90010882000,0100F90010882000,status-playable;nvdec,playable,2024-04-17 5:07:33,2 +2796,Kirby Fighters 2 - 0100227010460000,0100227010460000,ldn-works;online;status-playable,playable,2021-06-17 13:06:39,2 +2798,JUMP FORCE Deluxe Edition - 0100183010F12000,0100183010F12000,status-playable;nvdec;online-broken;UE4,playable,2023-10-01 15:56:05,10 +2799,The Survivalists,,status-playable,playable,2020-10-27 15:51:13,1 +2800,"Season Match Full Bundle - Parts 1, 2 and 3",,status-playable,playable,2020-10-27 16:15:22,1 +2801,Moai VI: Unexpected Guests,,slow;status-playable,playable,2020-10-27 16:40:20,1 +2802,Agatha Christie - The ABC Murders,,status-playable,playable,2020-10-27 17:08:23,1 +2803,Remothered: Broken Porcelain - 0100FBD00F5F6000,0100FBD00F5F6000,UE4;gpu;nvdec;status-ingame,ingame,2021-06-17 15:13:11,2 +2804,Need For Speed Hot Pursuit Remastered,,audio;online;slow;status-ingame,ingame,2020-10-27 17:46:58,1 +2805,WarriOrb - 010032700EAC4000,010032700EAC4000,UE4;status-playable,playable,2021-06-17 15:45:14,2 +2806,Townsmen - A Kingdom Rebuilt - 010049E00BA34000,010049E00BA34000,status-playable;nvdec,playable,2022-10-14 22:48:59,3 +2807,Oceanhorn 2 Knights of the Lost Realm - 01006CB010840000,01006CB010840000,status-playable,playable,2021-05-21 18:26:10,6 +2808,No More Heroes 2 Desperate Struggle - 010071400F204000,010071400F204000,32-bit;status-playable;nvdec,playable,2022-11-19 1:38:13,4 +2809,No More Heroes - 0100F0400F202000,0100F0400F202000,32-bit;status-playable,playable,2022-09-13 7:44:27,6 +2810,Rusty Spount Rescue Adventure,,,,2020-10-29 17:06:42,1 +2811,Pixel Puzzle Makeout League - 010000E00E612000,010000E00E612000,status-playable,playable,2022-10-13 12:34:00,3 +2812,Futari de! Nyanko Daisensou - 01003C300B274000,01003C300B274000,status-playable,playable,2024-01-05 22:26:52,2 +2814,MAD RAT DEAD,,,,2020-10-31 13:30:24,1 +2815,The Language of Love,,Needs Update;crash;status-nothing,nothing,2020-12-03 17:54:00,3 +2816,Torn Tales - Rebound Edition,,status-playable,playable,2020-11-01 14:11:59,1 +2817,Spaceland,,status-playable,playable,2020-11-01 14:31:56,1 +2818,HARDCORE MECHA,,slow;status-playable,playable,2020-11-01 15:06:33,1 +2819,Barbearian - 0100F7E01308C000,0100F7E01308C000,Needs Update;gpu;status-ingame,ingame,2021-06-28 16:27:50,2 +2821,INSTANT Chef Party,,,,2020-11-01 23:15:58,1 +2822,Pikmin 3 Deluxe - 0100F4C009322000,0100F4C009322000,gpu;status-ingame;32-bit;nvdec;Needs Update,ingame,2024-09-03 0:28:26,22 +2823,Cobra Kai The Karate Kid Saga Continues - 01005790110F0000,01005790110F0000,status-playable,playable,2021-06-17 15:59:13,2 +2824,Seven Knights -Time Wanderer- - 010018400C24E000,010018400C24E000,status-playable;vulkan-backend-bug,playable,2022-10-13 22:08:54,3 +2825,Kangokuto Mary Skelter Finale,,audio;crash;status-ingame,ingame,2021-01-09 22:39:28,2 +2826,Shadowverse Champions Battle - 01002A800C064000,01002A800C064000,status-playable,playable,2022-10-02 22:59:29,5 +2827,Bakugan Champions of Vestroia,,status-playable,playable,2020-11-06 19:07:39,2 +2828,Jurassic World Evolution Complete Edition - 010050A011344000,010050A011344000,cpu;status-menus;crash,menus,2023-08-04 18:06:54,6 +2829,KAMEN RIDER memory of heroez / Premium Sound Edition - 0100A9801180E000,0100A9801180E000,status-playable,playable,2022-12-06 3:14:26,4 +2830,Shin Megami Tensei III NOCTURNE HD REMASTER - 010045800ED1E000,010045800ED1E000,gpu;status-ingame;Needs Update,ingame,2022-11-03 19:57:01,6 +2832,FUSER - 0100E1F013674000,0100E1F013674000,status-playable;nvdec;UE4,playable,2022-10-17 20:58:32,4 +2833,Mad Father,,status-playable,playable,2020-11-12 13:22:10,1 +2834,Café Enchanté,,status-playable,playable,2020-11-13 14:54:25,1 +2835,JUST DANCE 2021,,,,2020-11-14 6:22:04,1 +2836,Medarot Classics Plus Kuwagata Ver,,status-playable,playable,2020-11-21 11:30:40,3 +2837,Medarot Classics Plus Kabuto Ver,,status-playable,playable,2020-11-21 11:31:18,3 +2838,Forest Guardian,,,,2020-11-14 17:00:13,1 +2840,Fantasy Tavern Sextet -Vol.1 New World Days- - 01000E2012F6E000,01000E2012F6E000,gpu;status-ingame;crash;Needs Update,ingame,2022-12-05 16:48:00,2 +2841,Ary and the Secret of Seasons - 0100C2500CAB6000,0100C2500CAB6000,status-playable,playable,2022-10-07 20:45:09,2 +2842,Dark Quest 2,,status-playable,playable,2020-11-16 21:34:52,1 +2843,Cooking Tycoons 2: 3 in 1 Bundle,,status-playable,playable,2020-11-16 22:19:33,1 +2844,Cooking Tycoons: 3 in 1 Bundle,,status-playable,playable,2020-11-16 22:44:26,1 +2845,Agent A: A puzzle in disguise,,status-playable,playable,2020-11-16 22:53:27,1 +2846,ROBOTICS;NOTES DaSH,,status-playable,playable,2020-11-16 23:09:54,1 +2847,Hunting Simulator 2 - 010061F010C3A000,010061F010C3A000,status-playable;UE4,playable,2022-10-10 14:25:51,3 +2848,9 Monkeys of Shaolin,,UE4;gpu;slow;status-ingame,ingame,2020-11-17 11:58:43,1 +2849,Tin & Kuna,,status-playable,playable,2020-11-17 12:16:12,1 +2850,Seers Isle,,status-playable,playable,2020-11-17 12:28:50,1 +2851,Royal Roads,,status-playable,playable,2020-11-17 12:54:38,1 +2852,Rimelands - 01006AC00EE6E000,01006AC00EE6E000,status-playable,playable,2022-10-13 13:32:56,2 +2853,Mekorama - 0100B360068B2000,0100B360068B2000,gpu;status-boots,boots,2021-06-17 16:37:21,2 +2854,Need for Speed Hot Pursuit Remastered - 010029B0118E8000,010029B0118E8000,status-playable;online-broken,playable,2024-03-20 21:58:02,14 +2855,Mech Rage,,status-playable,playable,2020-11-18 12:30:16,1 +2856,Modern Tales: Age of Invention - 010004900D772000,010004900D772000,slow;status-playable,playable,2022-10-12 11:20:19,2 +2857,Dead Z Meat - 0100A24011F52000,0100A24011F52000,UE4;services;status-ingame,ingame,2021-04-14 16:50:16,2 +2858,Along the Edge,,status-playable,playable,2020-11-18 15:00:07,1 +2859,Country Tales - 0100C1E012A42000,0100C1E012A42000,status-playable,playable,2021-06-17 16:45:39,2 +2860,Ghost Sweeper - 01004B301108C000,01004B301108C000,status-playable,playable,2022-10-10 12:45:36,3 +2862,Hyrule Warriors: Age of Calamity - 01002B00111A2000,01002B00111A2000,gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 0:47:00,39 +2864,Path of Sin: Greed - 01001E500EA16000,01001E500EA16000,status-menus;crash,menus,2021-11-24 8:00:00,3 +2865,Hoggy 2 - 0100F7300ED2C000,0100F7300ED2C000,status-playable,playable,2022-10-10 13:53:35,3 +2866,Queen's Quest 4: Sacred Truce - 0100DCF00F13A000,0100DCF00F13A000,status-playable;nvdec,playable,2022-10-13 12:59:21,3 +2867,ROBOTICS;NOTES ELITE,,status-playable,playable,2020-11-26 10:28:20,1 +2868,Taiko no Tatsujin Rhythmic Adventure Pack,,status-playable,playable,2020-12-03 7:28:26,2 +2869,Pinstripe,,status-playable,playable,2020-11-26 10:40:40,1 +2870,Torchlight III - 010075400DDB8000,010075400DDB8000,status-playable;nvdec;online-broken;UE4,playable,2022-10-14 22:20:17,2 +2871,Ben 10: Power Trip - 01009CD00E3AA000,01009CD00E3AA000,status-playable;nvdec,playable,2022-10-09 10:52:12,2 +2872,Zoids Wild Infinity Blast,,,,2020-11-26 16:15:37,1 +2873,Picross S5 - 0100AC30133EC000,0100AC30133EC000,status-playable,playable,2022-10-17 18:51:42,5 +2874,Worm Jazz - 01009CD012CC0000,01009CD012CC0000,gpu;services;status-ingame;UE4;regression,ingame,2021-11-10 10:33:04,4 +2875,TTV2,,status-playable,playable,2020-11-27 13:21:36,1 +2876,Deadly Days,,status-playable,playable,2020-11-27 13:38:55,1 +2877,Pumpkin Jack - 01006C10131F6000,01006C10131F6000,status-playable;nvdec;UE4,playable,2022-10-13 12:52:32,3 +2878,Active Neurons 2 - 01000D1011EF0000,01000D1011EF0000,status-playable,playable,2022-10-07 16:21:42,2 +2879,Niche - a genetics survival game,,nvdec;status-playable,playable,2020-11-27 14:01:11,1 +2880,Monstrum - 010039F00EF70000,010039F00EF70000,status-playable,playable,2021-01-31 11:07:26,3 +2881,TRANSFORMERS: BATTLEGROUNDS - 01005E500E528000,01005E500E528000,online;status-playable,playable,2021-06-17 18:08:19,2 +2882,UBERMOSH:SANTICIDE,,status-playable,playable,2020-11-27 15:05:01,1 +2884,SPACE ELITE FORCE,,status-playable,playable,2020-11-27 15:21:05,1 +2885,Oddworld: New 'n' Tasty - 01005E700ABB8000,01005E700ABB8000,nvdec;status-playable,playable,2021-06-17 17:51:32,2 +2886,Immortal Realms: Vampire Wars - 010079501025C000,010079501025C000,nvdec;status-playable,playable,2021-06-17 17:41:46,2 +2887,Horace - 010086D011EB8000,010086D011EB8000,status-playable,playable,2022-10-10 14:03:50,3 +2888,Maid of Sker : Upscale Resolution not working,,,,2020-11-29 15:36:42,3 +2889,Professor Rubik's Brain Fitness,,,,2020-11-30 11:22:45,1 +2890,QV ( キュビ ),,,,2020-11-30 11:22:49,1 +2892,Double Pug Switch - 0100A5D00C7C0000,0100A5D00C7C0000,status-playable;nvdec,playable,2022-10-10 10:59:35,2 +2893,Trollhunters: Defenders of Arcadia,,gpu;nvdec;status-ingame,ingame,2020-11-30 13:27:09,1 +2894,Outbreak: Epidemic - 0100C850130FE000,0100C850130FE000,status-playable,playable,2022-10-13 10:27:31,2 +2895,Blackjack Hands,,status-playable,playable,2020-11-30 14:04:51,1 +2896,Piofiore: Fated Memories,,nvdec;status-playable,playable,2020-11-30 14:27:50,1 +2897,Task Force Kampas,,status-playable,playable,2020-11-30 14:44:15,1 +2898,Nexomon: Extinction,,status-playable,playable,2020-11-30 15:02:22,1 +2899,realMyst: Masterpiece Edition,,nvdec;status-playable,playable,2020-11-30 15:25:42,1 +2900,Neighbours back From Hell - 010065F00F55A000,010065F00F55A000,status-playable;nvdec,playable,2022-10-12 15:36:48,2 +2901,Sakai and... - 01007F000EB36000,01007F000EB36000,status-playable;nvdec,playable,2022-12-15 13:53:19,18 +2902,Supraland - 0100A6E01201C000,0100A6E01201C000,status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 9:49:11,2 +2903,Ministry of Broadcast - 010069200EB80000,010069200EB80000,status-playable,playable,2022-08-10 0:31:16,3 +2904,Inertial Drift - 01002BD00F626000,01002BD00F626000,status-playable;online-broken,playable,2022-10-11 12:22:19,2 +2905,SuperEpic: The Entertainment War - 0100630010252000,0100630010252000,status-playable,playable,2022-10-13 23:02:48,2 +2906,HARDCORE Maze Cube,,status-playable,playable,2020-12-04 20:01:24,1 +2907,Firework,,status-playable,playable,2020-12-04 20:20:09,1 +2908,GORSD,,status-playable,playable,2020-12-04 22:15:21,1 +2909,Georifters,,UE4;crash;nvdec;status-menus,menus,2020-12-04 22:30:50,1 +2910,Giraffe and Annika,,UE4;crash;status-ingame,ingame,2020-12-04 22:41:57,1 +2911,Doodle Derby,,status-boots,boots,2020-12-04 22:51:48,1 +2912,"Good Pizza, Great Pizza",,status-playable,playable,2020-12-04 22:59:18,1 +2913,HyperBrawl Tournament,,crash;services;status-boots,boots,2020-12-04 23:03:27,1 +2914,Dustoff Z,,status-playable,playable,2020-12-04 23:22:29,1 +2915,Embracelet,,status-playable,playable,2020-12-04 23:45:00,1 +2916,"Cook, Serve, Delicious! 3?! - 0100B82010B6C000",0100B82010B6C000,status-playable,playable,2022-10-09 12:09:34,2 +2917,CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS - 0100EAE010560000,0100EAE010560000,status-playable;online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50,2 +2918,Yomi wo Saku Hana,,,,2020-12-05 7:14:40,1 +2921,Immortals Fenyx Rising - 01004A600EC0A000,01004A600EC0A000,gpu;status-menus;crash,menus,2023-02-24 16:19:55,11 +2923,Supermarket Shriek - 0100C01012654000,0100C01012654000,status-playable,playable,2022-10-13 23:19:20,2 +2924,Absolute Drift,,status-playable,playable,2020-12-10 14:02:44,1 +2925,CASE 2: Animatronics Survival - 0100C4C0132F8000,0100C4C0132F8000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03,2 +2926,BIG-Bobby-Car - The Big Race,,slow;status-playable,playable,2020-12-10 14:25:06,1 +2927,Asterix & Obelix XXL: Romastered - 0100F46011B50000,0100F46011B50000,gpu;status-ingame;nvdec;opengl,ingame,2023-08-16 21:22:06,3 +2928,Chicken Police - Paint it RED!,,nvdec;status-playable,playable,2020-12-10 15:10:11,1 +2929,Descenders,,gpu;status-ingame,ingame,2020-12-10 15:22:36,1 +2930,Outbreak: The Nightmare Chronicles - 01006EE013100000,01006EE013100000,status-playable,playable,2022-10-13 10:41:57,2 +2931,#Funtime,,status-playable,playable,2020-12-10 16:54:35,1 +2932,My Little Dog Adventure,,gpu;status-ingame,ingame,2020-12-10 17:47:37,1 +2933,n Verlore Verstand,,slow;status-ingame,ingame,2020-12-10 18:00:28,1 +2934,Oneiros - 0100463013246000,0100463013246000,status-playable,playable,2022-10-13 10:17:22,2 +2935,#KillAllZombies,,slow;status-playable,playable,2020-12-16 1:50:25,7 +2936,Connection Haunted,,slow;status-playable,playable,2020-12-10 18:57:14,1 +2938,Goosebumps Dead of Night,,gpu;nvdec;status-ingame,ingame,2020-12-10 20:02:16,1 +2939,"#Halloween, Super Puzzles Dream",,nvdec;status-playable,playable,2020-12-10 20:43:58,1 +2940,The Long Return,,slow;status-playable,playable,2020-12-10 21:05:10,1 +2941,The Bluecoats: North & South,,nvdec;status-playable,playable,2020-12-10 21:22:29,1 +2942,Puyo Puyo Tetris 2 - 010038E011940000,010038E011940000,status-playable;ldn-untested,playable,2023-09-26 11:35:25,8 +2943,Yuppie Psycho: Executive Edition,,crash;status-ingame,ingame,2020-12-11 10:37:06,1 +2945,Root Double -Before Crime * After Days- Xtend Edition - 0100936011556000,0100936011556000,status-nothing;crash,nothing,2022-02-05 2:03:49,2 +2946,Hidden Folks,,,,2020-12-11 11:48:16,1 +2947,KINGDOM HEARTS Melody of Memory,,crash;nvdec;status-ingame,ingame,2021-03-03 17:34:12,2 +2948,Unhatched,,status-playable,playable,2020-12-11 12:11:09,1 +2949,Tropico 6 - 0100FBE0113CC000,0100FBE0113CC000,status-playable;nvdec;UE4,playable,2022-10-14 23:21:03,2 +2950,Star Renegades,,nvdec;status-playable,playable,2020-12-11 12:19:23,1 +2951,Alpaca Ball: Allstars,,nvdec;status-playable,playable,2020-12-11 12:26:29,1 +2952,Nordlicht,,,,2020-12-11 12:37:12,1 +2953,Sakuna: Of Rice and Ruin - 0100B1400E8FE000,0100B1400E8FE000,status-playable,playable,2023-07-24 13:47:13,2 +2954,Re:Turn - One Way Trip - 0100F03011616000,0100F03011616000,status-playable,playable,2022-08-29 22:42:53,3 +2955,L.O.L. Surprise! Remix: We Rule the World - 0100F2B0123AE000,0100F2B0123AE000,status-playable,playable,2022-10-11 22:48:03,4 +2956,They Bleed Pixels - 01001C2010D08000,01001C2010D08000,gpu;status-ingame,ingame,2024-08-09 5:52:18,3 +2957,If Found...,,status-playable,playable,2020-12-11 13:43:14,1 +2958,Gibbous - A Cthulhu Adventure - 0100D95012C0A000,0100D95012C0A000,status-playable;nvdec,playable,2022-10-10 12:57:17,2 +2959,Duck Life Adventure - 01005BC012C66000,01005BC012C66000,status-playable,playable,2022-10-10 11:27:03,2 +2960,Sniper Elite 4 - 010007B010FCC000,010007B010FCC000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15,4 +2961,Serious Sam Collection - 010007D00D43A000,010007D00D43A000,status-boots;vulkan-backend-bug,boots,2022-10-13 13:53:34,3 +2962,Slide Stars - 010010D011E1C000,010010D011E1C000,status-menus;crash,menus,2021-11-25 8:53:43,3 +2963,Tank Mechanic Simulator,,status-playable,playable,2020-12-11 15:10:45,1 +2964,Five Dates,,nvdec;status-playable,playable,2020-12-11 15:17:11,1 +2965,MagiCat,,status-playable,playable,2020-12-11 15:22:07,1 +2966,Family Feud 2021 - 010060200FC44000,010060200FC44000,status-playable;online-broken,playable,2022-10-10 11:42:21,3 +2967,LUNA The Shadow Dust,,,,2020-12-11 15:26:55,1 +2968,Paw Patrol: Might Pups Save Adventure Bay! - 01001F201121E000,01001F201121E000,status-playable,playable,2022-10-13 12:17:55,2 +2969,30-in-1 Game Collection - 010056D00E234000,010056D00E234000,status-playable;online-broken,playable,2022-10-15 17:47:09,2 +2970,Truck Driver - 0100CB50107BA000,0100CB50107BA000,status-playable;online-broken,playable,2022-10-20 17:42:33,2 +2971,Bridge Constructor: The Walking Dead,,gpu;slow;status-ingame,ingame,2020-12-11 17:31:32,1 +2972,Speed 3: Grand Prix - 0100F18010BA0000,0100F18010BA0000,status-playable;UE4,playable,2022-10-20 12:32:31,2 +2973,Wonder Blade,,status-playable,playable,2020-12-11 17:55:31,1 +2974,Super Blood Hockey,,status-playable,playable,2020-12-11 20:01:41,1 +2975,Who Wants to Be a Millionaire?,,crash;status-nothing,nothing,2020-12-11 20:22:42,1 +2976,My Aunt is a Witch - 01002C6012334000,01002C6012334000,status-playable,playable,2022-10-19 9:21:17,2 +2977,Flatland: Prologue,,status-playable,playable,2020-12-11 20:41:12,1 +2978,Fantasy Friends - 010017C012726000,010017C012726000,status-playable,playable,2022-10-17 19:42:39,2 +2979,MO:Astray,,crash;status-ingame,ingame,2020-12-11 21:45:44,1 +2980,Wartile Complete Edition,,UE4;crash;gpu;status-menus,menus,2020-12-11 21:56:10,1 +2981,Super Punch Patrol - 01001F90122B2000,01001F90122B2000,status-playable,playable,2024-07-12 19:49:02,2 +2982,Chronos,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-11 22:16:35,1 +2983,Going Under,,deadlock;nvdec;status-ingame,ingame,2020-12-11 22:29:46,1 +2984,Castle Crashers Remastered - 010001300D14A000,010001300D14A000,gpu;status-boots,boots,2024-08-10 9:21:20,12 +2985,Morbid: The Seven Acolytes - 010040E00F642000,010040E00F642000,status-playable,playable,2022-08-09 17:21:58,3 +2986,Elrador Creatures,,slow;status-playable,playable,2020-12-12 12:35:35,1 +2987,Sam & Max Save the World,,status-playable,playable,2020-12-12 13:11:51,1 +2988,Quiplash 2 InterLASHional - 0100AF100EE76000,0100AF100EE76000,status-playable;online-working,playable,2022-10-19 17:43:45,4 +2989,Monster Truck Championship - 0100D30010C42000,0100D30010C42000,slow;status-playable;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51,2 +2990,Liberated: Enhanced Edition - 01003A90133A6000,01003A90133A6000,gpu;status-ingame;nvdec,ingame,2024-07-04 4:48:48,2 +2991,Empire of Sin,,nvdec,,2020-12-12 13:48:05,1 +2992,Girabox,,status-playable,playable,2020-12-12 13:55:05,1 +2993,Shiren the Wanderer: The Tower of Fortune and the Dice of Fate - 01007430122D0000,01007430122D0000,status-playable;nvdec,playable,2022-10-20 11:44:36,2 +2994,2048 Battles,,status-playable,playable,2020-12-12 14:21:25,1 +2995,Reaper: Tale of a Pale Swordsman,,status-playable,playable,2020-12-12 15:12:23,1 +2996,Demong Hunter,,status-playable,playable,2020-12-12 15:27:08,1 +2997,Rise and Shine,,status-playable,playable,2020-12-12 15:56:43,1 +2998,12 Labours of Hercules II: The Cretan Bull - 0100B1A010014000,0100B1A010014000,cpu;status-nothing;32-bit;crash,nothing,2022-12-07 13:43:10,3 +2999,"#womenUp, Super Puzzles Dream",,status-playable,playable,2020-12-12 16:57:25,1 +3000,"#NoLimitFantasy, Super Puzzles Dream",,nvdec;status-playable,playable,2020-12-12 17:21:32,1 +3001,2urvive - 01007550131EE000,01007550131EE000,status-playable,playable,2022-11-17 13:49:37,3 +3002,2weistein – The Curse of the Red Dragon - 0100E20012886000,0100E20012886000,status-playable;nvdec;UE4,playable,2022-11-18 14:47:07,4 +3003,64,,status-playable,playable,2020-12-12 21:31:58,1 +3004,4x4 Dirt Track,,status-playable,playable,2020-12-12 21:41:42,1 +3005,Aeolis Tournament,,online;status-playable,playable,2020-12-12 22:02:14,1 +3006,Adventures of Pip,,nvdec;status-playable,playable,2020-12-12 22:11:55,1 +3007,9th Dawn III,,status-playable,playable,2020-12-12 22:27:27,1 +3008,Ailment,,status-playable,playable,2020-12-12 22:30:41,1 +3009,Adrenaline Rush - Miami Drive,,status-playable,playable,2020-12-12 22:49:50,1 +3010,Adventures of Chris,,status-playable,playable,2020-12-12 23:00:02,1 +3011,Akuarium,,slow;status-playable,playable,2020-12-12 23:43:36,1 +3012,Alchemist's Castle,,status-playable,playable,2020-12-12 23:54:08,1 +3013,Angry Video Game Nerd I & II Deluxe,,crash;status-ingame,ingame,2020-12-12 23:59:54,1 +3015,SENTRY,,status-playable,playable,2020-12-13 12:00:24,1 +3016,Squeakers,,status-playable,playable,2020-12-13 12:13:05,1 +3017,ALPHA,,status-playable,playable,2020-12-13 12:17:45,1 +3018,Shoot 1UP DX,,status-playable,playable,2020-12-13 12:32:47,1 +3019,Animal Hunter Z,,status-playable,playable,2020-12-13 12:50:35,1 +3020,Star99 - 0100E6B0115FC000,0100E6B0115FC000,status-menus;online,menus,2021-11-26 14:18:51,2 +3021,Alwa's Legacy,,status-playable,playable,2020-12-13 13:00:57,1 +3022,TERROR SQUID - 010070C00FB56000,010070C00FB56000,status-playable;online-broken,playable,2023-10-30 22:29:29,2 +3023,Animal Fight Club,,gpu;status-ingame,ingame,2020-12-13 13:13:33,1 +3024,"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban! - 010093100DA04000",010093100DA04000,gpu;status-ingame,ingame,2023-09-22 10:21:46,3 +3025,Dokapon UP! Dreamy Roulette,,,,2020-12-13 14:53:27,1 +3026,ANIMUS,,status-playable,playable,2020-12-13 15:11:47,1 +3027,Pretty Princess Party - 01007F00128CC000,01007F00128CC000,status-playable,playable,2022-10-19 17:23:58,2 +3028,John Wick Hex - 01007090104EC000,01007090104EC000,status-playable,playable,2022-08-07 8:29:12,3 +3029,Animal Up,,status-playable,playable,2020-12-13 15:39:02,1 +3030,Derby Stallion,,,,2020-12-13 15:47:01,1 +3031,Ankh Guardian - Treasure of the Demon's Temple,,status-playable,playable,2020-12-13 15:55:49,1 +3032,Police X Heroine Lovepatrina! Love na Rhythm de Taihoshimasu!,,,,2020-12-13 16:12:56,1 +3033,Klondike Solitaire,,status-playable,playable,2020-12-13 16:17:27,1 +3034,Apocryph,,gpu;status-ingame,ingame,2020-12-13 23:24:10,1 +3035,Apparition,,nvdec;slow;status-ingame,ingame,2020-12-13 23:57:04,1 +3036,Tiny Gladiators,,status-playable,playable,2020-12-14 0:09:43,1 +3037,Aperion Cyberstorm,,status-playable,playable,2020-12-14 0:40:16,1 +3038,Cthulhu Saves Christmas,,status-playable,playable,2020-12-14 0:58:55,1 +3039,Kagamihara/Justice - 0100D58012FC2000,0100D58012FC2000,crash;status-nothing,nothing,2021-06-21 16:41:29,3 +3040,Greedroid,,status-playable,playable,2020-12-14 11:14:32,1 +3041,Aqua Lungers,,crash;status-ingame,ingame,2020-12-14 11:25:57,1 +3042,Atomic Heist - 01005FE00EC4E000,01005FE00EC4E000,status-playable,playable,2022-10-16 21:24:32,2 +3043,Nexoria: Dungeon Rogue Heroes - 0100B69012EC6000,0100B69012EC6000,gpu;status-ingame,ingame,2021-10-04 18:41:29,2 +3044,Armed 7 DX,,status-playable,playable,2020-12-14 11:49:56,1 +3045,Ord.,,status-playable,playable,2020-12-14 11:59:06,1 +3046,Commandos 2 HD Remaster - 010065A01158E000,010065A01158E000,gpu;status-ingame;nvdec,ingame,2022-08-10 21:52:27,2 +3047,Atomicrops - 0100AD30095A4000,0100AD30095A4000,status-playable,playable,2022-08-06 10:05:07,3 +3048,Rabi-Ribi - 01005BF00E4DE000,01005BF00E4DE000,status-playable,playable,2022-08-06 17:02:44,3 +3049,Assault Chainguns KM,,crash;gpu;status-ingame,ingame,2020-12-14 12:48:34,1 +3050,Attack of the Toy Tanks,,slow;status-ingame,ingame,2020-12-14 12:59:12,1 +3051,AstroWings SpaceWar,,status-playable,playable,2020-12-14 13:10:44,1 +3052,ATOMIK RunGunJumpGun,,status-playable,playable,2020-12-14 13:19:24,1 +3053,Arrest of a stone Buddha - 0100184011B32000,0100184011B32000,status-nothing;crash,nothing,2022-12-07 16:55:00,4 +3054,Midnight Evil - 0100A1200F20C000,0100A1200F20C000,status-playable,playable,2022-10-18 22:55:19,2 +3055,Awakening of Cthulhu - 0100085012D64000,0100085012D64000,UE4;status-playable,playable,2021-04-26 13:03:07,2 +3056,Axes - 0100DA3011174000,0100DA3011174000,status-playable,playable,2021-04-08 13:01:58,3 +3057,ASSAULT GUNNERS HD Edition,,,,2020-12-14 14:47:09,1 +3058,Shady Part of Me - 0100820013612000,0100820013612000,status-playable,playable,2022-10-20 11:31:55,3 +3059,A Frog Game,,status-playable,playable,2020-12-14 16:09:53,1 +3060,A Dark Room,,gpu;status-ingame,ingame,2020-12-14 16:14:28,1 +3061,A Sound Plan,,crash;status-boots,boots,2020-12-14 16:46:21,1 +3062,Actual Sunlight,,gpu;status-ingame,ingame,2020-12-14 17:18:41,1 +3063,Acthung! Cthulhu Tactics,,status-playable,playable,2020-12-14 18:40:27,1 +3064,ATOMINE,,gpu;nvdec;slow;status-playable,playable,2020-12-14 18:56:50,1 +3065,Adventure Llama,,status-playable,playable,2020-12-14 19:32:24,1 +3066,Minoria - 0100FAE010864000,0100FAE010864000,status-playable,playable,2022-08-06 18:50:50,3 +3067,Adventure Pinball Bundle,,slow;status-playable,playable,2020-12-14 20:31:53,1 +3068,Aery - Broken Memories - 0100087012810000,0100087012810000,status-playable,playable,2022-10-04 13:11:52,2 +3069,Fobia,,status-playable,playable,2020-12-14 21:05:23,1 +3070,Alchemic Jousts - 0100F5400AB6C000,0100F5400AB6C000,gpu;status-ingame,ingame,2022-12-08 15:06:28,2 +3071,Akash Path of the Five,,gpu;nvdec;status-ingame,ingame,2020-12-14 22:33:12,1 +3072,Witcheye,,status-playable,playable,2020-12-14 22:56:08,1 +3073,Zombie Driver,,nvdec;status-playable,playable,2020-12-14 23:15:10,1 +3074,Keen: One Girl Army,,status-playable,playable,2020-12-14 23:19:52,1 +3075,AFL Evolution 2 - 01001B400D334000,01001B400D334000,slow;status-playable;online-broken;UE4,playable,2022-12-07 12:45:56,2 +3076,Elden: Path of the Forgotten,,status-playable,playable,2020-12-15 0:33:19,1 +3077,Desire remaster ver.,,crash;status-boots,boots,2021-01-17 2:34:37,4 +3078,Alluris - 0100AC501122A000,0100AC501122A000,gpu;status-ingame;UE4,ingame,2023-08-02 23:13:50,2 +3079,Almightree the Last Dreamer,,slow;status-playable,playable,2020-12-15 13:59:03,1 +3080,Windscape - 010059900BA3C000,010059900BA3C000,status-playable,playable,2022-10-21 11:49:42,2 +3082,Warp Shift,,nvdec;status-playable,playable,2020-12-15 14:48:48,1 +3083,Alphaset by POWGI,,status-playable,playable,2020-12-15 15:15:15,1 +3084,Storm Boy - 010040D00BCF4000,010040D00BCF4000,status-playable,playable,2022-10-20 14:15:06,2 +3085,Fire & Water,,status-playable,playable,2020-12-15 15:43:20,1 +3086,Animated Jigsaws Collection,,nvdec;status-playable,playable,2020-12-15 15:58:34,1 +3087,More Dark,,status-playable,playable,2020-12-15 16:01:06,1 +3088,Clea,,crash;status-ingame,ingame,2020-12-15 16:22:56,1 +3089,Animal Fun for Toddlers and Kids,,services;status-boots,boots,2020-12-15 16:45:29,1 +3090,Brick Breaker,,crash;status-ingame,ingame,2020-12-15 17:03:59,1 +3091,Anode,,status-playable,playable,2020-12-15 17:18:58,1 +3092,Animal Pairs - Matching & Concentration Game for Toddlers & Kids - 010033C0121DC000,010033C0121DC000,services;status-boots,boots,2021-11-29 23:43:14,2 +3093,Animals for Toddlers,,services;status-boots,boots,2020-12-15 17:27:27,1 +3094,Stellar Interface - 01005A700C954000,01005A700C954000,status-playable,playable,2022-10-20 13:44:33,2 +3095,Anime Studio Story,,status-playable,playable,2020-12-15 18:14:05,1 +3096,Brick Breaker,,nvdec;online;status-playable,playable,2020-12-15 18:26:23,1 +3097,Anti-Hero Bundle - 0100596011E20000,0100596011E20000,status-playable;nvdec,playable,2022-10-21 20:10:30,2 +3098,Alt-Frequencies,,status-playable,playable,2020-12-15 19:01:33,1 +3099,Tanuki Justice - 01007A601318C000,01007A601318C000,status-playable;opengl,playable,2023-02-21 18:28:10,5 +3100,Norman's Great Illusion,,status-playable,playable,2020-12-15 19:28:24,1 +3101,Welcome to Primrose Lake - 0100D7F010B94000,0100D7F010B94000,status-playable,playable,2022-10-21 11:30:57,2 +3102,Dream,,status-playable,playable,2020-12-15 19:55:07,1 +3103,Lofi Ping Pong,,crash;status-ingame,ingame,2020-12-15 20:09:22,1 +3104,Antventor,,nvdec;status-playable,playable,2020-12-15 20:09:27,1 +3105,Space Pioneer - 010047B010260000,010047B010260000,status-playable,playable,2022-10-20 12:24:37,2 +3106,Death and Taxes,,status-playable,playable,2020-12-15 20:27:49,1 +3107,Deleveled,,slow;status-playable,playable,2020-12-15 21:02:29,1 +3108,Jenny LeClue - Detectivu,,crash;status-nothing,nothing,2020-12-15 21:07:07,1 +3109,Biz Builder Delux,,slow;status-playable,playable,2020-12-15 21:36:25,1 +3110,Creepy Tale,,status-playable,playable,2020-12-15 21:58:03,1 +3111,Among Us - 0100B0C013912000,0100B0C013912000,status-menus;online;ldn-broken,menus,2021-09-22 15:20:17,12 +3112,Spinch - 010076D0122A8000,010076D0122A8000,status-playable,playable,2024-07-12 19:02:10,2 +3113,Carto - 0100810012A1A000,0100810012A1A000,status-playable,playable,2022-09-04 15:37:06,2 +3114,Laraan,,status-playable,playable,2020-12-16 12:45:48,1 +3116,Spider Solitaire,,status-playable,playable,2020-12-16 16:19:30,1 +3117,Sin Slayers - 01006FE010438000,01006FE010438000,status-playable,playable,2022-10-20 11:53:52,2 +3118,AO Tennis 2 - 010047000E9AA000,010047000E9AA000,status-playable;online-broken,playable,2022-09-17 12:05:07,2 +3119,Area 86,,status-playable,playable,2020-12-16 16:45:52,1 +3120,Art Sqool - 01006AA013086000,01006AA013086000,status-playable;nvdec,playable,2022-10-16 20:42:37,2 +3121,Utopia 9 - A Volatile Vacation,,nvdec;status-playable,playable,2020-12-16 17:06:42,1 +3122,Arrog,,status-playable,playable,2020-12-16 17:20:50,1 +3123,Warlocks 2: God Slayers,,status-playable,playable,2020-12-16 17:36:50,1 +3124,Artifact Adventure Gaiden DX,,status-playable,playable,2020-12-16 17:49:25,1 +3125,Asemblance,,UE4;gpu;status-ingame,ingame,2020-12-16 18:01:23,1 +3126,Death Tales,,status-playable,playable,2020-12-17 10:55:52,2 +3127,Asphalt 9: Legends - 01007B000C834000,01007B000C834000,services;status-menus;crash;online-broken,menus,2022-12-07 13:28:29,4 +3128,Barbarous! Tavern of Emyr - 01003350102E2000,01003350102E2000,status-playable,playable,2022-10-16 21:50:24,2 +3129,Baila Latino - 010076B011EC8000,010076B011EC8000,status-playable,playable,2021-04-14 16:40:24,2 +3130,Unit 4,,status-playable,playable,2020-12-16 18:54:13,1 +3131,Ponpu,,status-playable,playable,2020-12-16 19:09:34,1 +3132,ATOM RPG - 0100B9400FA38000,0100B9400FA38000,status-playable;nvdec,playable,2022-10-22 10:11:48,2 +3133,Automachef,,status-playable,playable,2020-12-16 19:51:25,1 +3134,Croc's World 2,,status-playable,playable,2020-12-16 20:01:40,1 +3135,Ego Protocol,,nvdec;status-playable,playable,2020-12-16 20:16:35,1 +3136,Azure Reflections - 01006FB00990E000,01006FB00990E000,nvdec;online;status-playable,playable,2021-04-08 13:18:25,3 +3137,Back to Bed,,nvdec;status-playable,playable,2020-12-16 20:52:04,1 +3138,Azurebreak Heroes,,status-playable,playable,2020-12-16 21:26:17,1 +3139,Marooners - 010044600FDF0000,010044600FDF0000,status-playable;nvdec;online-broken,playable,2022-10-18 21:35:26,2 +3140,BaconMan - 0100EAF00E32E000,0100EAF00E32E000,status-menus;crash;nvdec,menus,2021-11-20 2:36:21,2 +3141,Peaky Blinders: Mastermind - 010002100CDCC000,010002100CDCC000,status-playable,playable,2022-10-19 16:56:35,2 +3142,Crash Drive 2,,online;status-playable,playable,2020-12-17 2:45:46,1 +3143,Blood will be Spilled,,nvdec;status-playable,playable,2020-12-17 3:02:03,1 +3144,Nefarious,,status-playable,playable,2020-12-17 3:20:33,1 +3145,Blacksea Odyssey - 01006B400C178000,01006B400C178000,status-playable;nvdec,playable,2022-10-16 22:14:34,2 +3146,Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive,,status-playable,playable,2020-12-17 11:22:50,1 +3147,Life of Boris: Super Slav,,status-ingame,ingame,2020-12-17 11:40:05,1 +3148,Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo,,nvdec;status-playable,playable,2020-12-17 11:43:10,1 +3149,Baron: Fur Is Gonna Fly - 010039C0106C6000,010039C0106C6000,status-boots;crash,boots,2022-02-06 2:05:43,3 +3150,Deployment - 01000BF00B6BC000,01000BF00B6BC000,slow;status-playable;online-broken,playable,2022-10-17 16:23:59,2 +3151,PixelJunk Eden 2,,crash;status-ingame,ingame,2020-12-17 11:55:52,1 +3152,Batbarian: Testament of the Primordials,,status-playable,playable,2020-12-17 12:00:59,1 +3153,Abyss of The Sacrifice - 010047F012BE2000,010047F012BE2000,status-playable;nvdec,playable,2022-10-21 13:56:28,2 +3154,Nightmares from the Deep 2: The Siren's Call - 01006E700B702000,01006E700B702000,status-playable;nvdec,playable,2022-10-19 10:58:53,2 +3155,Vera Blanc: Full Moon,,audio;status-playable,playable,2020-12-17 12:09:30,1 +3156,Linelight,,status-playable,playable,2020-12-17 12:18:07,1 +3157,Battle Hunters - 0100A3B011EDE000,0100A3B011EDE000,gpu;status-ingame,ingame,2022-11-12 9:19:17,2 +3159,Day and Night,,status-playable,playable,2020-12-17 12:30:51,1 +3160,Zombie's Cool,,status-playable,playable,2020-12-17 12:41:26,1 +3161,Battle of Kings,,slow;status-playable,playable,2020-12-17 12:45:23,1 +3162,Ghostrunner,,UE4;crash;gpu;nvdec;status-ingame,ingame,2020-12-17 13:01:59,1 +3163,Battleground - 0100650010DD4000,0100650010DD4000,status-ingame;crash,ingame,2021-09-06 11:53:23,2 +3164,Little Racer - 0100E6D00E81C000,0100E6D00E81C000,status-playable,playable,2022-10-18 16:41:13,2 +3165,Battle Planet - Judgement Day,,status-playable,playable,2020-12-17 14:06:20,1 +3166,Dokuro,,nvdec;status-playable,playable,2020-12-17 14:47:09,1 +3167,Reflection of Mine,,audio;status-playable,playable,2020-12-17 15:06:37,1 +3168,Foregone,,deadlock;status-ingame,ingame,2020-12-17 15:26:53,1 +3169,Choices That Matter: And The Sun Went Out,,status-playable,playable,2020-12-17 15:44:08,1 +3170,BATTLLOON,,status-playable,playable,2020-12-17 15:48:23,1 +3171,Grim Legends: The Forsaken Bride - 010009F011F90000,010009F011F90000,status-playable;nvdec,playable,2022-10-18 13:14:06,3 +3172,Glitch's Trip,,status-playable,playable,2020-12-17 16:00:57,1 +3173,Maze,,status-playable,playable,2020-12-17 16:13:58,1 +3174,Bayonetta - 010076F0049A2000,010076F0049A2000,status-playable;audout,playable,2022-11-20 15:51:59,6 +3176,Gnome More War,,status-playable,playable,2020-12-17 16:33:07,1 +3177,Fin and the Ancient Mystery,,nvdec;status-playable,playable,2020-12-17 16:40:39,1 +3178,Nubarron: The adventure of an unlucky gnome,,status-playable,playable,2020-12-17 16:45:17,1 +3179,Survive! Mr. Cube - 010029A00AEB0000,010029A00AEB0000,status-playable,playable,2022-10-20 14:44:47,2 +3180,Saboteur SiO,,slow;status-ingame,ingame,2020-12-17 16:59:49,1 +3181,Flowlines VS,,status-playable,playable,2020-12-17 17:01:53,1 +3182,Beat Me! - 01002D20129FC000,01002D20129FC000,status-playable;online-broken,playable,2022-10-16 21:59:26,2 +3183,YesterMorrow,,crash;status-ingame,ingame,2020-12-17 17:15:25,1 +3184,Drums,,status-playable,playable,2020-12-17 17:21:51,1 +3185,Gnomes Garden: Lost King - 010036C00D0D6000,010036C00D0D6000,deadlock;status-menus,menus,2021-11-18 11:14:03,2 +3186,Edna & Harvey: Harvey's New Eyes - 0100ABE00DB4E000,0100ABE00DB4E000,nvdec;status-playable,playable,2021-01-26 14:36:08,2 +3187,Roarr! - 010068200C5BE000,010068200C5BE000,status-playable,playable,2022-10-19 23:57:45,2 +3188,PHOGS!,,online;status-playable,playable,2021-01-18 15:18:37,2 +3189,Idle Champions of the Forgotten Realms,,online;status-boots,boots,2020-12-17 18:24:57,1 +3190,Polyroll - 010074B00ED32000,010074B00ED32000,gpu;status-boots,boots,2021-07-01 16:16:50,3 +3191,Control Ultimate Edition - Cloud Version - 0100041013360000,0100041013360000,Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:34:06,2 +3192,Wilmot's Warehouse - 010071F00D65A000,010071F00D65A000,audio;gpu;status-ingame,ingame,2021-06-02 17:24:32,3 +3193,Jack N' Jill DX,,,,2020-12-18 2:27:22,1 +3194,Izneo - 0100D8E00C874000,0100D8E00C874000,status-menus;online-broken,menus,2022-08-06 15:56:23,2 +3195,Dicey Dungeons - 0100BBF011394000,0100BBF011394000,gpu;audio;slow;status-ingame,ingame,2023-08-02 20:30:12,2 +3196,Rabbids Adventure Party Demo / 疯狂兔子:奇遇派对 - 试玩版,,,,2020-12-18 5:53:35,1 +3197,Venture Kid - 010095B00DBC8000,010095B00DBC8000,crash;gpu;status-ingame,ingame,2021-04-18 16:33:17,2 +3199,Death Coming - 0100F3B00CF32000,0100F3B00CF32000,status-nothing;crash,nothing,2022-02-06 7:43:03,2 +3200,OlliOlli: Switch Stance - 0100E0200B980000,0100E0200B980000,gpu;status-boots,boots,2024-04-25 8:36:37,3 +3201,Cybxus Heart - 01006B9013672000,01006B9013672000,gpu;slow;status-ingame,ingame,2022-01-15 5:00:49,2 +3202,Gensou Rougoku no Kaleidscope - 0100AC600EB4C000,0100AC600EB4C000,status-menus;crash,menus,2021-11-24 8:45:07,2 +3203,Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy- - 0100454012E32000,0100454012E32000,status-ingame;crash,ingame,2021-08-08 11:56:18,3 +3204,Hulu - 0100A66003384000,0100A66003384000,status-boots;online-broken,boots,2022-12-09 10:05:00,3 +3205,Strife: Veteran Edition - 0100BDE012928000,0100BDE012928000,gpu;status-ingame,ingame,2022-01-15 5:10:42,2 +3209,Peasant Knight,,status-playable,playable,2020-12-22 9:30:50,2 +3210,Double Dragon Neon - 01005B10132B2000,01005B10132B2000,gpu;audio;status-ingame;32-bit,ingame,2022-09-20 18:00:20,2 +3211,Nekopara Vol.4,,crash;status-ingame,ingame,2021-01-17 1:47:18,2 +3212,Super Meat Boy Forever - 01009C200D60E000,01009C200D60E000,gpu;status-boots,boots,2021-04-26 14:25:39,2 +3213,Gems of Magic: Lost Family,,,,2020-12-24 15:33:57,1 +3214,Wagamama High Spec,,,,2020-12-25 9:02:51,1 +3215,BIT.TRIP RUNNER - 0100E62012D3C000,0100E62012D3C000,status-playable,playable,2022-10-17 14:23:24,3 +3216,BIT.TRIP VOID - 01000AD012D3A000,01000AD012D3A000,status-playable,playable,2022-10-17 14:31:23,2 +3217,Dark Arcana: The Carnival - 01003D301357A000,01003D301357A000,gpu;slow;status-ingame,ingame,2022-02-19 8:52:28,2 +3218,Food Girls,,,,2020-12-27 14:48:48,1 +3219,Override 2 Super Mech League - 0100647012F62000,0100647012F62000,status-playable;online-broken;UE4,playable,2022-10-19 15:56:04,4 +3220,Unto The End - 0100E49013190000,0100E49013190000,gpu;status-ingame,ingame,2022-10-21 11:13:29,2 +3221,Outbreak: Lost Hope - 0100D9F013102000,0100D9F013102000,crash;status-boots,boots,2021-04-26 18:01:23,2 +3222,Croc's World 3,,status-playable,playable,2020-12-30 18:53:26,1 +3223,COLLECTION of SaGA FINAL FANTASY LEGEND,,status-playable,playable,2020-12-30 19:11:16,1 +3224,The Adventures of 00 Dilly,,status-playable,playable,2020-12-30 19:32:29,1 +3225,Funimation - 01008E10130F8000,01008E10130F8000,gpu;status-boots,boots,2021-04-08 13:08:17,3 +3227,Aleste Collection,,,,2021-01-01 11:30:59,1 +3228,Trail Boss BMX,,,,2021-01-01 16:51:27,1 +3229,DEEMO -Reborn- - 01008B10132A2000,01008B10132A2000,status-playable;nvdec;online-broken,playable,2022-10-17 15:18:11,2 +3232,Catherine Full Body - 0100BF00112C0000,0100BF00112C0000,status-playable;nvdec,playable,2023-04-02 11:00:37,14 +3233,Hell Sports,,,,2021-01-03 15:40:25,1 +3234,Traditional Tactics Ne+,,,,2021-01-03 15:40:29,1 +3235,Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 ) - 0100B9E012992000,0100B9E012992000,status-playable;UE4,playable,2022-12-07 12:59:16,3 +3236,The House of Da Vinci,,status-playable,playable,2021-01-05 14:17:19,2 +3237,Monster Sanctuary,,crash;status-ingame,ingame,2021-04-04 5:06:41,2 +3239,Monster Hunter Rise Demo - 010093A01305C000,010093A01305C000,status-playable;online-broken;ldn-works;demo,playable,2022-10-18 23:04:17,15 +3244,InnerSpace,,status-playable,playable,2021-01-13 19:36:14,1 +3245,Scott Pilgrim vs The World: The Game - 0100394011C30000,0100394011C30000,services-horizon;status-nothing;crash,nothing,2024-07-12 8:13:03,11 +3246,Fantasy Tavern Sextet -Vol.2 Adventurer's Days-,,gpu;slow;status-ingame;crash,ingame,2021-11-06 2:57:29,2 +3247,Monster Hunter XX Nintendo Switch Ver ( Double Cross ) - 0100C3800049C000,0100C3800049C000,status-playable,playable,2024-07-21 14:08:09,7 +3248,Football Manager 2021 Touch - 01007CF013152000,01007CF013152000,gpu;status-ingame,ingame,2022-10-17 20:08:23,3 +3249,Eyes: The Horror Game - 0100EFE00A3C2000,0100EFE00A3C2000,status-playable,playable,2021-01-20 21:59:46,1 +3250,Evolution Board Game - 01006A800FA22000,01006A800FA22000,online;status-playable,playable,2021-01-20 22:37:56,1 +3251,PBA Pro Bowling 2021 - 0100F95013772000,0100F95013772000,status-playable;online-broken;UE4,playable,2022-10-19 16:46:40,2 +3252,Body of Evidence - 0100721013510000,0100721013510000,status-playable,playable,2021-04-25 22:22:11,2 +3253,The Hong Kong Massacre,,crash;status-ingame,ingame,2021-01-21 12:06:56,1 +3254,Arkanoid vs Space Invaders,,services;status-ingame,ingame,2021-01-21 12:50:30,1 +3256,Professor Lupo: Ocean - 0100D1F0132F6000,0100D1F0132F6000,status-playable,playable,2021-04-14 16:33:33,2 +3257,My Universe - School Teacher - 01006C301199C000,01006C301199C000,nvdec;status-playable,playable,2021-01-21 16:02:52,1 +3258,FUZE Player - 010055801134E000,010055801134E000,status-ingame;online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53,2 +3259,Defentron - 0100CDE0136E6000,0100CDE0136E6000,status-playable,playable,2022-10-17 15:47:56,2 +3260,Thief Simulator - 0100CE400E34E000,0100CE400E34E000,status-playable,playable,2023-04-22 4:39:11,3 +3261,Stardash - 01002100137BA000,01002100137BA000,status-playable,playable,2021-01-21 16:31:19,1 +3262,The Last Dead End - 0100AAD011592000,0100AAD011592000,gpu;status-ingame;UE4,ingame,2022-10-20 16:59:44,3 +3263,Buddy Mission BOND Demo [ バディミッション BOND ],,Incomplete,,2021-01-23 18:07:40,3 +3264,Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ] - 01005EE013888000,01005EE013888000,gpu;status-ingame;demo,ingame,2022-12-06 15:27:59,4 +3265,Down in Bermuda,,,,2021-01-22 15:29:19,1 +3268,Blacksmith of the Sand Kingdom - 010068E013450000,010068E013450000,status-playable,playable,2022-10-16 22:37:44,3 +3269,Tennis World Tour 2 - 0100950012F66000,0100950012F66000,status-playable;online-broken,playable,2022-10-14 10:43:16,4 +3270,Shadow Gangs - 0100BE501382A000,0100BE501382A000,cpu;gpu;status-ingame;crash;regression,ingame,2024-04-29 0:07:26,15 +3271,Red Colony - 0100351013A06000,0100351013A06000,status-playable,playable,2021-01-25 20:44:41,1 +3272,Construction Simulator 3 - Console Edition - 0100A5600FAC0000,0100A5600FAC0000,status-playable,playable,2023-02-06 9:31:23,3 +3273,Speed Truck Racing - 010061F013A0E000,010061F013A0E000,status-playable,playable,2022-10-20 12:57:04,2 +3274,Arcanoid Breakout - 0100E53013E1C000,0100E53013E1C000,status-playable,playable,2021-01-25 23:28:02,1 +3275,Life of Fly - 0100B3A0135D6000,0100B3A0135D6000,status-playable,playable,2021-01-25 23:41:07,1 +3276,Little Nightmares II DEMO - 010093A0135D6000,010093A0135D6000,status-playable;UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20,2 +3277,Iris Fall - 0100945012168000,0100945012168000,status-playable;nvdec,playable,2022-10-18 13:40:22,2 +3278,Dirt Trackin Sprint Cars - 01004CB01378A000,01004CB01378A000,status-playable;nvdec;online-broken,playable,2022-10-17 16:34:56,2 +3279,Gal*Gun Returns [ ぎゃる☆がん りたーんず ] - 0100047013378000,0100047013378000,status-playable;nvdec,playable,2022-10-17 23:50:46,2 +3280,Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ] - 0100307011D80000,0100307011D80000,status-playable,playable,2021-06-08 13:20:33,3 +3281,Buddy Mission BOND [ FG ] [ バディミッション BOND ] - 0100DB300B996000,0100DB300B996000,,,2021-01-30 4:22:26,1 +3282,CONARIUM - 010015801308E000,010015801308E000,UE4;nvdec;status-playable,playable,2021-04-26 17:57:53,3 +3284,Balan Wonderworld Demo - 0100E48013A34000,0100E48013A34000,gpu;services;status-ingame;UE4;demo,ingame,2023-02-16 20:05:07,4 +3285,War Truck Simulator - 0100B6B013B8A000,0100B6B013B8A000,status-playable,playable,2021-01-31 11:22:54,1 +3286,The Last Campfire - 0100449011506000,0100449011506000,status-playable,playable,2022-10-20 16:44:19,3 +3287,Spinny's journey - 01001E40136FE000,01001E40136FE000,status-ingame;crash,ingame,2021-11-30 3:39:44,2 +3288,Sally Face - 0100BBF0122B4000,0100BBF0122B4000,status-playable,playable,2022-06-06 18:41:24,2 +3289,Otti house keeper - 01006AF013A9E000,01006AF013A9E000,status-playable,playable,2021-01-31 12:11:24,1 +3290,Neoverse Trinity Edition - 01001A20133E000,,status-playable,playable,2022-10-19 10:28:03,3 +3291,Missile Dancer - 0100CFA0138C8000,0100CFA0138C8000,status-playable,playable,2021-01-31 12:22:03,1 +3292,Grisaia Phantom Trigger 03 - 01005250123B8000,01005250123B8000,audout;status-playable,playable,2021-01-31 12:30:47,1 +3293,GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000,0100D970123BA000,audout;status-playable,playable,2021-01-31 12:40:37,1 +3294,GRISAIA PHANTOM TRIGGER 05 - 01002330123BC000,01002330123BC000,audout;nvdec;status-playable,playable,2021-01-31 12:49:59,1 +3295,GRISAIA PHANTOM TRIGGER 5.5 - 0100CAF013AE6000,0100CAF013AE6000,audout;nvdec;status-playable,playable,2021-01-31 12:59:44,1 +3296,Dreamo - 0100D24013466000,0100D24013466000,status-playable;UE4,playable,2022-10-17 18:25:28,2 +3297,Dirt Bike Insanity - 0100A8A013DA4000,0100A8A013DA4000,status-playable,playable,2021-01-31 13:27:38,1 +3298,Calico - 010013A00E750000,010013A00E750000,status-playable,playable,2022-10-17 14:44:28,2 +3299,ADVERSE - 01008C901266E000,01008C901266E000,UE4;status-playable,playable,2021-04-26 14:32:51,2 +3300,All Walls Must Fall - 0100CBD012FB6000,0100CBD012FB6000,status-playable;UE4,playable,2022-10-15 19:16:30,2 +3301,Bus Driver Simulator - 010030D012FF6000,010030D012FF6000,status-playable,playable,2022-10-17 13:55:27,2 +3302,Blade II The Return of Evil - 01009CC00E224000,01009CC00E224000,audio;status-ingame;crash;UE4,ingame,2021-11-14 2:49:59,5 +3303,Ziggy The Chaser - 0100D7B013DD0000,0100D7B013DD0000,status-playable,playable,2021-02-04 20:34:27,1 +3304,Colossus Down - 0100E2F0128B4000,0100E2F0128B4000,status-playable,playable,2021-02-04 20:49:50,1 +3305,Turrican Flashback - 01004B0130C8000,,status-playable;audout,playable,2021-08-30 10:07:56,2 +3306,Ubongo - Deluxe Edition,,status-playable,playable,2021-02-04 21:15:01,1 +3307,Märchen Forest - 0100B201D5E000,,status-playable,playable,2021-02-04 21:33:34,1 +3308,Re:ZERO -Starting Life in Another World- The Prophecy of the Throne,,gpu;status-boots;crash;nvdec;vulkan,boots,2023-03-07 21:27:24,8 +3309,Tracks - Toybox Edition - 0100192010F5A000,0100192010F5A000,UE4;crash;status-nothing,nothing,2021-02-08 15:19:18,1 +3310,TOHU - 0100B5E011920000,0100B5E011920000,slow;status-playable,playable,2021-02-08 15:40:44,1 +3311,Redout: Space Assault - 0100326010B98000,0100326010B98000,status-playable;UE4,playable,2022-10-19 23:04:35,2 +3312,Gods Will Fall - 0100CFA0111C8000,0100CFA0111C8000,status-playable,playable,2021-02-08 16:49:59,1 +3313,Cyber Shadow - 0100C1F0141AA000,0100C1F0141AA000,status-playable,playable,2022-07-17 5:37:41,4 +3314,Atelier Ryza 2: Lost Legends & the Secret Fairy - 01009A9012022000,01009A9012022000,status-playable,playable,2022-10-16 21:06:06,2 +3315,Heaven's Vault - 0100FD901000C000,0100FD901000C000,crash;status-ingame,ingame,2021-02-08 18:22:01,1 +3316,Contraptions - 01007D701298A000,01007D701298A000,status-playable,playable,2021-02-08 18:40:50,1 +3317,My Universe - Pet Clinic Cats & Dogs - 0100CD5011A02000,0100CD5011A02000,status-boots;crash;nvdec,boots,2022-02-06 2:05:53,3 +3318,Citizens Unite!: Earth x Space - 0100D9C012900000,0100D9C012900000,gpu;status-ingame,ingame,2023-10-22 6:44:19,4 +3319,Blue Fire - 010073B010F6E000,010073B010F6E000,status-playable;UE4,playable,2022-10-22 14:46:11,2 +3320,Shakes on a Plane - 01008DA012EC0000,01008DA012EC0000,status-menus;crash,menus,2021-11-25 8:52:25,3 +3321,Glyph - 0100EB501130E000,0100EB501130E000,status-playable,playable,2021-02-08 19:56:51,1 +3322,Flying Hero X - 0100419013A8A000,0100419013A8A000,status-menus;crash,menus,2021-11-17 7:46:58,2 +3323,Disjunction - 01000B70122A2000,01000B70122A2000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24,8 +3324,Grey Skies: A War of the Worlds Story - 0100DA7013792000,0100DA7013792000,status-playable;UE4,playable,2022-10-24 11:13:59,2 +3325,"#womenUp, Super Puzzles Dream Demo - 0100D87012A14000",0100D87012A14000,nvdec;status-playable,playable,2021-02-09 0:03:31,1 +3326,n Verlore Verstand - Demo - 01009A500E3DA000,01009A500E3DA000,status-playable,playable,2021-02-09 0:13:32,1 +3327,10 Second Run RETURNS Demo - 0100DC000A472000,0100DC000A472000,gpu;status-ingame,ingame,2021-02-09 0:17:18,1 +3328,16-Bit Soccer Demo - 0100B94013D28000,0100B94013D28000,status-playable,playable,2021-02-09 0:23:07,1 +3329,1993 Shenandoah Demo - 0100148012550000,0100148012550000,status-playable,playable,2021-02-09 0:43:43,1 +3330,9 Monkeys of Shaolin Demo - 0100C5F012E3E000,0100C5F012E3E000,UE4;gpu;nvdec;status-ingame,ingame,2021-02-09 1:03:30,1 +3331,99Vidas Demo - 010023500C2F0000,010023500C2F0000,status-playable,playable,2021-02-09 12:51:31,1 +3332,A Duel Hand Disaster Trackher: DEMO - 0100582012B90000,0100582012B90000,crash;demo;nvdec;status-ingame,ingame,2021-03-24 18:45:27,2 +3333,Aces of the Luftwaffe Squadron Demo - 010054300D822000,010054300D822000,nvdec;status-playable,playable,2021-02-09 13:12:28,1 +3334,Active Neurons 2 Demo - 010031C0122B0000,010031C0122B0000,status-playable,playable,2021-02-09 13:40:21,1 +3335,Adventures of Chris Demo - 0100A0A0136E8000,0100A0A0136E8000,status-playable,playable,2021-02-09 13:49:21,1 +3336,Aegis Defenders Demo - 010064500AF72000,010064500AF72000,status-playable,playable,2021-02-09 14:04:17,1 +3337,Aeolis Tournament Demo - 01006710122CE000,01006710122CE000,nvdec;status-playable,playable,2021-02-09 14:22:30,1 +3338,AeternoBlade Demo Version - 0100B1C00949A000,0100B1C00949A000,nvdec;status-playable,playable,2021-02-09 14:39:26,1 +3339,AeternoBlade II Demo Version,,gpu;nvdec;status-ingame,ingame,2021-02-09 15:10:19,1 +3340,Agent A: A puzzle in disguise (Demo) - 01008E8012C02000,01008E8012C02000,status-playable,playable,2021-02-09 18:30:41,1 +3341,Airfield Mania Demo - 010010A00DB72000,010010A00DB72000,services;status-boots;demo,boots,2022-04-10 3:43:02,2 +3342,Alder's Blood Prologue - 01004510110C4000,01004510110C4000,crash;status-ingame,ingame,2021-02-09 19:03:03,1 +3343,AI: The Somnium Files Demo - 0100C1700FB34000,0100C1700FB34000,nvdec;status-playable,playable,2021-02-10 12:52:33,1 +3344,Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version - 0100A8A00D27E000,0100A8A00D27E000,status-playable,playable,2021-02-10 13:33:59,1 +3345,Animated Jigsaws: Beautiful Japanese Scenery DEMO - 0100A1900B5B8000,0100A1900B5B8000,nvdec;status-playable,playable,2021-02-10 13:49:56,1 +3346,APE OUT DEMO - 010054500E6D4000,010054500E6D4000,status-playable,playable,2021-02-10 14:33:06,1 +3347,Anime Studio Story Demo - 01002B300EB86000,01002B300EB86000,status-playable,playable,2021-02-10 14:50:39,1 +3348,Aperion Cyberstorm Demo - 01008CA00D71C000,01008CA00D71C000,status-playable,playable,2021-02-10 15:53:21,1 +3350,ARMS Demo,,status-playable,playable,2021-02-10 16:30:13,1 +3351,Art of Balance DEMO - 010062F00CAE2000,010062F00CAE2000,gpu;slow;status-ingame,ingame,2021-02-10 17:17:12,1 +3352,Assault on Metaltron Demo - 0100C5E00E540000,0100C5E00E540000,status-playable,playable,2021-02-10 19:48:06,1 +3353,Automachef Demo - 01006B700EA6A000,01006B700EA6A000,status-playable,playable,2021-02-10 20:35:37,1 +3354,AVICII Invector Demo - 0100E100128BA000,0100E100128BA000,status-playable,playable,2021-02-10 21:04:58,1 +3355,Awesome Pea (Demo) - 010023800D3F2000,010023800D3F2000,status-playable,playable,2021-02-10 21:48:21,1 +3356,Awesome Pea 2 (Demo) - 0100D2011E28000,,crash;status-nothing,nothing,2021-02-10 22:08:27,1 +3357,Ayakashi koi gikyoku Free Trial - 010075400DEC6000,010075400DEC6000,status-playable,playable,2021-02-10 22:22:11,1 +3358,Bad North Demo,,status-playable,playable,2021-02-10 22:48:38,1 +3359,Baobabs Mausoleum: DEMO - 0100D3000AEC2000,0100D3000AEC2000,status-playable,playable,2021-02-10 22:59:25,1 +3360,Battle Chef Brigade Demo - 0100DBB00CAEE000,0100DBB00CAEE000,status-playable,playable,2021-02-10 23:15:07,1 +3361,Mercenaries Blaze Dawn of the Twin Dragons - 0100a790133fc000,0100a790133fc000,,,2021-02-11 18:43:00,1 +3362,Fallen Legion Revenants Demo - 0100cac013776000,0100cac013776000,,,2021-02-11 18:43:06,1 +3363,Bear With Me - The Lost Robots Demo - 010024200E97E800,010024200E97E800,nvdec;status-playable,playable,2021-02-12 22:38:12,1 +3364,Birds and Blocks Demo - 0100B6B012FF4000,0100B6B012FF4000,services;status-boots;demo,boots,2022-04-10 4:53:03,2 +3365,Black Hole Demo - 01004BE00A682000,01004BE00A682000,status-playable,playable,2021-02-12 23:02:17,1 +3366,Blasphemous Demo - 0100302010338000,0100302010338000,status-playable,playable,2021-02-12 23:49:56,1 +3367,Blaster Master Zero DEMO - 010025B002E92000,010025B002E92000,status-playable,playable,2021-02-12 23:59:06,1 +3368,Bleep Bloop DEMO - 010091700EA2A000,010091700EA2A000,nvdec;status-playable,playable,2021-02-13 0:20:53,1 +3369,Block-a-Pix Deluxe Demo - 0100E1C00DB6C000,0100E1C00DB6C000,status-playable,playable,2021-02-13 0:37:39,1 +3370,Get Over Here - 0100B5B00E77C000,0100B5B00E77C000,status-playable,playable,2022-10-28 11:53:52,3 +3371,Unspottable - 0100B410138C0000,0100B410138C0000,status-playable,playable,2022-10-25 19:28:49,2 +3373,Blossom Tales Demo - 01000EB01023E000,01000EB01023E000,status-playable,playable,2021-02-13 14:22:53,1 +3374,Boomerang Fu Demo Version - 010069F0135C4000,010069F0135C4000,demo;status-playable,playable,2021-02-13 14:38:13,1 +3375,Bot Vice Demo - 010069B00EAC8000,010069B00EAC8000,crash;demo;status-ingame,ingame,2021-02-13 14:52:42,1 +3376,BOXBOY! + BOXGIRL! Demo - 0100B7200E02E000,0100B7200E02E000,demo;status-playable,playable,2021-02-13 14:59:08,1 +3377,Super Mario 3D World + Bowser's Fury - 010028600EBDA000,010028600EBDA000,status-playable;ldn-works,playable,2024-07-31 10:45:37,38 +3378,Brawlout Demo - 0100C1B00E1CA000,0100C1B00E1CA000,demo;status-playable,playable,2021-02-13 22:46:53,1 +3379,Brigandine: The Legend of Runersia Demo - 0100703011258000,0100703011258000,status-playable,playable,2021-02-14 14:44:10,1 +3380,Brotherhood United Demo - 0100F19011226000,0100F19011226000,demo;status-playable,playable,2021-02-14 21:10:57,1 +3381,Bucket Knight demo - 0100F1B010A90000,0100F1B010A90000,demo;status-playable,playable,2021-02-14 21:23:09,1 +3382,BurgerTime Party! Demo - 01005780106E8000,01005780106E8000,demo;status-playable,playable,2021-02-14 21:34:16,1 +3383,Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600,,demo;gpu;nvdec;status-ingame,ingame,2021-02-14 21:48:15,1 +3384,Cafeteria Nipponica Demo - 010060400D21C000,010060400D21C000,demo;status-playable,playable,2021-02-14 22:11:35,1 +3385,Cake Bash Demo - 0100699012F82000,0100699012F82000,crash;demo;status-ingame,ingame,2021-02-14 22:21:15,1 +3386,Captain Toad: Treasure Tracker Demo - 01002C400B6B6000,01002C400B6B6000,32-bit;demo;status-playable,playable,2021-02-14 22:36:09,1 +3387,CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION - 01002320137CC000,01002320137CC000,slow;status-playable,playable,2021-02-14 22:45:35,1 +3388,Castle Crashers Remastered Demo - 0100F6D01060E000,0100F6D01060E000,gpu;status-boots;demo,boots,2022-04-10 10:57:10,2 +3389,Cat Quest II Demo - 0100E86010220000,0100E86010220000,demo;status-playable,playable,2021-02-15 14:11:57,1 +3390,Caveman Warriors Demo,,demo;status-playable,playable,2021-02-15 14:44:08,1 +3391,Chickens Madness DEMO - 0100CAC011C3A000,0100CAC011C3A000,UE4;demo;gpu;nvdec;status-ingame,ingame,2021-02-15 15:02:10,1 +3392,Little Nightmares II - 010097100EDD6000,010097100EDD6000,status-playable;UE4,playable,2023-02-10 18:24:44,4 +3393,Rhythm Fighter - 0100729012D18000,0100729012D18000,crash;status-nothing,nothing,2021-02-16 18:51:30,2 +3394,大図書館の羊飼い -Library Party-01006de00a686000,01006de00a686000,,,2021-02-16 7:20:19,2 +3395,Timothy and the Mysterious Forest - 0100393013A10000,0100393013A10000,gpu;slow;status-ingame,ingame,2021-06-02 0:42:11,2 +3396,Pixel Game Maker Series Werewolf Princess Kaguya - 0100859013CE6000,0100859013CE6000,crash;services;status-nothing,nothing,2021-03-26 0:23:07,2 +3397,D.C.4 ~ダ・カーポ4~-0100D8500EE14000,0100D8500EE14000,,,2021-02-17 8:46:35,1 +3398,Yo kai watch 1 for Nintendo Switch - 0100C0000CEEA000,0100C0000CEEA000,gpu;status-ingame;opengl,ingame,2024-05-28 11:11:49,21 +3399,Project TRIANGLE STRATEGY Debut Demo - 01002980140F6000,01002980140F6000,status-playable;UE4;demo,playable,2022-10-24 21:40:27,4 +3400,SNK VS. CAPCOM: THE MATCH OF THE MILLENNIUM - 010027D0137E0000,010027D0137E0000,,,2021-02-19 12:35:20,2 +3401,Super Soccer Blast - 0100D61012270000,0100D61012270000,gpu;status-ingame,ingame,2022-02-16 8:39:12,2 +3404,VOEZ (Japan Version) - 0100A7F002830000,0100A7F002830000,,,2021-02-19 15:07:49,1 +3405,Dungreed - 010045B00C496000,010045B00C496000,,,2021-02-19 16:18:07,1 +3406,Capcom Arcade Stadium - 01001E0013208000,01001E0013208000,status-playable,playable,2021-03-17 5:45:14,2 +3408,Urban Street Fighting - 010054F014016000,010054F014016000,status-playable,playable,2021-02-20 19:16:36,1 +3409,The Long Dark - 01007A700A87C000,01007A700A87C000,status-playable,playable,2021-02-21 14:19:52,1 +3410,Rebel Galaxy: Outlaw - 0100CAA01084A000,0100CAA01084A000,status-playable;nvdec,playable,2022-12-01 7:44:56,3 +3411,Persona 5: Strikers (US) - 0100801011C3E000,0100801011C3E000,status-playable;nvdec;mac-bug,playable,2023-09-26 9:36:01,16 +3412,Steven Universe Unleash the Light,,,,2021-02-25 2:33:05,1 +3413,Ghosts 'n Goblins Resurrection - 0100D6200F2BA000,0100D6200F2BA000,status-playable,playable,2023-05-09 12:40:41,5 +3414,Taxi Chaos - 0100B76011DAA000,0100B76011DAA000,slow;status-playable;online-broken;UE4,playable,2022-10-25 19:13:00,4 +3415,COTTOn Reboot! [ コットン リブート! ] - 01003DD00F94A000,01003DD00F94A000,status-playable,playable,2022-05-24 16:29:24,6 +3416,STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ] - 010017301007E000,010017301007E000,status-playable,playable,2021-03-18 11:42:19,3 +3417,Bravely Default II - 01006DC010326000,01006DC010326000,gpu;status-ingame;crash;Needs Update;UE4,ingame,2024-04-26 6:11:26,23 +3418,Forward To The Sky - 0100DBA011136000,0100DBA011136000,,,2021-02-27 12:11:42,1 +3419,Just Dance 2019,,gpu;online;status-ingame,ingame,2021-02-27 17:21:27,2 +3423,Harvest Moon One World - 010016B010FDE00,,status-playable,playable,2023-05-26 9:17:19,2 +3424,Just Dance 2017 - 0100BCE000598000,0100BCE000598000,online;status-playable,playable,2021-03-05 9:46:01,2 +3425,コープスパーティー ブラッドカバー リピーティッドフィアー (Corpse Party Blood Covered: Repeated Fear) - 0100965012E22000,0100965012E22000,,,2021-03-05 9:47:52,1 +3426,Sea of Solitude The Director's Cut - 0100AFE012BA2000,0100AFE012BA2000,gpu;status-ingame,ingame,2024-07-12 18:29:29,14 +3431,Just Dance 2018 - 0100A0500348A000,0100A0500348A000,,,2021-03-13 8:09:14,1 +3434,Crash Bandicoot 4: It's About Time - 010073401175E000,010073401175E000,status-playable;nvdec;UE4,playable,2024-03-17 7:13:45,5 +3435,Bloody Bunny : The Game - 0100E510143EC000,0100E510143EC000,status-playable;nvdec;UE4,playable,2022-10-22 13:18:55,2 +3437,Plants vs. Zombies: Battle for Neighborville Complete Edition - 0100C56010FD8000,0100C56010FD8000,gpu;audio;status-boots;crash,boots,2024-09-02 12:58:14,11 +3438,Cathedral - 0100BEB01327A000,0100BEB01327A000,,,2021-03-19 22:12:46,1 +3439,Night Vision - 0100C3801458A000,0100C3801458A000,,,2021-03-19 22:20:53,1 +3440,Stubbs the Zombie in Rebel Without a Pulse - 0100964012528000,0100964012528000,,,2021-03-19 22:56:50,1 +3443,Hitman 3 - Cloud Version - 01004990132AC000,01004990132AC000,Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:35:07,2 +3444,Speed Limit - 01000540139F6000,01000540139F6000,gpu;status-ingame,ingame,2022-09-02 18:37:40,2 +3445,Dig Dog - 0100A5A00DBB0000,0100A5A00DBB0000,gpu;status-ingame,ingame,2021-06-02 17:17:51,2 +3446,Renzo Racer - 01007CC0130C6000,01007CC0130C6000,status-playable,playable,2021-03-23 22:28:05,1 +3447,Persephone,,status-playable,playable,2021-03-23 22:39:19,1 +3448,Cresteaju,,gpu;status-ingame,ingame,2021-03-24 10:46:06,1 +3449,Boom Blaster,,status-playable,playable,2021-03-24 10:55:56,1 +3450,Soccer Club Life: Playing Manager - 010017B012AFC000,010017B012AFC000,gpu;status-ingame,ingame,2022-10-25 11:59:22,2 +3451,Radio Commander - 0100BAD013B6E000,0100BAD013B6E000,nvdec;status-playable,playable,2021-03-24 11:20:46,1 +3452,Negative - 01008390136FC000,01008390136FC000,nvdec;status-playable,playable,2021-03-24 11:29:41,1 +3453,Hero-U: Rogue to Redemption - 010077D01094C000,010077D01094C000,nvdec;status-playable,playable,2021-03-24 11:40:01,1 +3454,Haven - 0100E2600DBAA000,0100E2600DBAA000,status-playable,playable,2021-03-24 11:52:41,1 +3455,Escape First 2 - 010021201296A000,010021201296A000,status-playable,playable,2021-03-24 11:59:41,1 +3456,Active Neurons 3 - 0100EE1013E12000,0100EE1013E12000,status-playable,playable,2021-03-24 12:20:20,1 +3457,Blizzard Arcade Collection - 0100743013D56000,0100743013D56000,status-playable;nvdec,playable,2022-08-03 19:37:26,2 +3458,Hellpoint - 010024600C794000,010024600C794000,status-menus,menus,2021-11-26 13:24:20,2 +3460,Death's Hangover - 0100492011A8A000,0100492011A8A000,gpu;status-boots,boots,2023-08-01 22:38:06,3 +3461,Storm in a Teacup - 0100B2300B932000,0100B2300B932000,gpu;status-ingame,ingame,2021-11-06 2:03:19,3 +3462,Charge Kid - 0100F52013A66000,0100F52013A66000,gpu;status-boots;audout,boots,2024-02-11 1:17:47,2 +3465,Monster Hunter Rise - 0100B04011742000,0100B04011742000,gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59,25 +3466,Gotobun no Hanayome Natsu no Omoide mo Gotobun [ 五等分の花嫁∬ ~夏の思い出も五等分~ ] - 0100FB5013670000,0100FB5013670000,,,2021-03-27 16:51:27,1 +3469,Steam Prison - 01008010118CC000,01008010118CC000,nvdec;status-playable,playable,2021-04-01 15:34:11,1 +3470,Rogue Heroes: Ruins of Tasos - 01009FA010848000,01009FA010848000,online;status-playable,playable,2021-04-01 15:41:25,1 +3471,Fallen Legion Revenants - 0100AA801258C000,0100AA801258C000,status-menus;crash,menus,2021-11-25 8:53:20,3 +3472, R-TYPE FINAL 2 Demo - 01007B0014300000,01007B0014300000,slow;status-ingame;nvdec;UE4;demo,ingame,2022-10-24 21:57:42,3 +3473,Fire Emblem: Shadow Dragon and the Blade of Light - 0100A12011CC8000,0100A12011CC8000,status-playable,playable,2022-10-17 19:49:14,6 +3475,Dariusburst - Another Chronicle EX+ - 010015800F93C000,010015800F93C000,online;status-playable,playable,2021-04-05 14:21:43,1 +3476,Curse of the Dead Gods - 0100D4A0118EA000,0100D4A0118EA000,status-playable,playable,2022-08-30 12:25:38,4 +3477,Clocker - 0100DF9013AD4000,0100DF9013AD4000,status-playable,playable,2021-04-05 15:05:13,1 +3478,Azur Lane: Crosswave - 01006AF012FC8000,01006AF012FC8000,UE4;nvdec;status-playable,playable,2021-04-05 15:15:25,1 +3479,AnShi - 01000FD00DF78000,01000FD00DF78000,status-playable;nvdec;UE4,playable,2022-10-21 19:37:01,2 +3480,Aery - A Journey Beyond Time - 0100DF8014056000,0100DF8014056000,status-playable,playable,2021-04-05 15:52:25,1 +3481,Sir Lovelot - 0100E9201410E000,0100E9201410E000,status-playable,playable,2021-04-05 16:21:46,1 +3482,Pixel Game Maker Series Puzzle Pedestrians - 0100EA2013BCC000,0100EA2013BCC000,status-playable,playable,2022-10-24 20:15:50,3 +3483,Monster Jam Steel Titans 2 - 010051B0131F0000,010051B0131F0000,status-playable;nvdec;UE4,playable,2022-10-24 17:17:59,2 +3484,Huntdown - 0100EBA004726000,0100EBA004726000,status-playable,playable,2021-04-05 16:59:54,1 +3485,GraviFire - 010054A013E0C000,010054A013E0C000,status-playable,playable,2021-04-05 17:13:32,1 +3486,Dungeons & Bombs,,status-playable,playable,2021-04-06 12:46:22,1 +3487,Estranged: The Departure - 01004F9012FD8000,01004F9012FD8000,status-playable;nvdec;UE4,playable,2022-10-24 10:37:58,2 +3488,Demon's Rise - Lords of Chaos - 0100E29013818000,0100E29013818000,status-playable,playable,2021-04-06 16:20:06,1 +3489,Bibi & Tina at the horse farm - 010062400E69C000,010062400E69C000,status-playable,playable,2021-04-06 16:31:39,1 +3490,WRC 9 The Official Game - 01001A0011798000,01001A0011798000,gpu;slow;status-ingame;nvdec,ingame,2022-10-25 19:47:39,2 +3491,Woodsalt - 0100288012966000,0100288012966000,status-playable,playable,2021-04-06 17:01:48,1 +3492,Kingdoms of Amalur: Re-Reckoning - 0100EF50132BE000,0100EF50132BE000,status-playable,playable,2023-08-10 13:05:08,2 +3493,Jiffy - 01008330134DA000,01008330134DA000,gpu;status-ingame;opengl,ingame,2024-02-03 23:11:24,4 +3494,A-Train: All Aboard! Tourism - 0100A3E010E56000,0100A3E010E56000,nvdec;status-playable,playable,2021-04-06 17:48:19,1 +3495,Synergia - 01009E700F448000,01009E700F448000,status-playable,playable,2021-04-06 17:58:04,1 +3496,R.B.I. Baseball 21 - 0100B4A0115CA000,0100B4A0115CA000,status-playable;online-working,playable,2022-10-24 22:31:45,2 +3497,NEOGEO POCKET COLOR SELECTION Vol.1 - 010006D0128B4000,010006D0128B4000,status-playable,playable,2023-07-08 20:55:36,2 +3498,Mighty Fight Federation - 0100C1E0135E0000,0100C1E0135E0000,online;status-playable,playable,2021-04-06 18:39:56,1 +3499,Lost Lands: The Four Horsemen - 0100133014510000,0100133014510000,status-playable;nvdec,playable,2022-10-24 16:41:00,2 +3500,In rays of the Light - 0100A760129A0000,0100A760129A0000,status-playable,playable,2021-04-07 15:18:07,1 +3501,DARQ Complete Edition - 0100440012FFA000,0100440012FFA000,audout;status-playable,playable,2021-04-07 15:26:21,1 +3502,Can't Drive This - 0100593008BDC000,0100593008BDC000,status-playable,playable,2022-10-22 14:55:17,1 +3503,Wanderlust Travel Stories - 0100B27010436000,0100B27010436000,status-playable,playable,2021-04-07 16:09:12,1 +3504,Tales from the Borderlands - 0100F0C011A68000,0100F0C011A68000,status-playable;nvdec,playable,2022-10-25 18:44:14,4 +3506,Star Wars: Republic Commando - 0100FA10115F8000,0100FA10115F8000,gpu;status-ingame;32-bit,ingame,2023-10-31 15:57:17,9 +3507,Barrage Fantasia - 0100F2A013752000,0100F2A013752000,,,2021-04-08 1:02:06,1 +3509,Atelier Rorona - The Alchemist of Arland - DX - 010088600C66E000,010088600C66E000,nvdec;status-playable,playable,2021-04-08 15:33:15,1 +3510,PAC-MAN 99 - 0100AD9012510000,0100AD9012510000,gpu;status-ingame;online-broken,ingame,2024-04-23 0:48:25,5 +3511,MAGLAM LORD - 0100C2C0125FC000,0100C2C0125FC000,,,2021-04-09 9:10:45,2 +3513,Part Time UFO - 01006B5012B32000 ,01006B5012B32000,status-ingame;crash,ingame,2023-03-03 3:13:05,2 +3515,Fitness Boxing - 0100E7300AAD4000,0100E7300AAD4000,status-playable,playable,2021-04-14 20:33:33,1 +3516,Fitness Boxing 2: Rhythm & Exercise - 0100073011382000,0100073011382000,crash;status-ingame,ingame,2021-04-14 20:40:48,1 +3517,Overcooked! All You Can Eat - 0100F28011892000,0100F28011892000,ldn-untested;online;status-playable,playable,2021-04-15 10:33:52,1 +3518,SpyHack - 01005D701264A000,01005D701264A000,status-playable,playable,2021-04-15 10:53:51,1 +3519,Oh My Godheads: Party Edition - 01003B900AE12000,01003B900AE12000,status-playable,playable,2021-04-15 11:04:11,1 +3520,My Hidden Things - 0100E4701373E000,0100E4701373E000,status-playable,playable,2021-04-15 11:26:06,1 +3521,Merchants of Kaidan - 0100E5000D3CA000,0100E5000D3CA000,status-playable,playable,2021-04-15 11:44:28,1 +3522,Mahluk dark demon - 010099A0145E8000,010099A0145E8000,status-playable,playable,2021-04-15 13:14:24,1 +3523,Fred3ric - 0100AC40108D8000,0100AC40108D8000,status-playable,playable,2021-04-15 13:30:31,1 +3524,Fishing Universe Simulator - 010069800D292000,010069800D292000,status-playable,playable,2021-04-15 14:00:43,1 +3525,Exorder - 0100FA800A1F4000,0100FA800A1F4000,nvdec;status-playable,playable,2021-04-15 14:17:20,1 +3526,FEZ - 01008D900B984000,01008D900B984000,gpu;status-ingame,ingame,2021-04-18 17:10:16,6 +3527,Danger Scavenger - ,,nvdec;status-playable,playable,2021-04-17 15:53:04,1 +3528,Hellbreachers - 01002BF013F0C000,01002BF013F0C000,,,2021-04-17 17:19:20,1 +3531,Cooking Simulator - 01001E400FD58000,01001E400FD58000,status-playable,playable,2021-04-18 13:25:23,1 +3532,Digerati Presents: The Dungeon Crawl Vol. 1 - 010035D0121EC000,010035D0121EC000,slow;status-ingame,ingame,2021-04-18 14:04:55,1 +3533,Clea 2 - 010045E0142A4000,010045E0142A4000,status-playable,playable,2021-04-18 14:25:18,1 +3534,Livestream Escape from Hotel Izanami - 0100E45014338000,0100E45014338000,,,2021-04-19 2:20:34,1 +3535,Ai Kiss 2 [ アイキス2 ] - 01000E9013CD4000,01000E9013CD4000,,,2021-04-19 2:49:12,1 +3536,Pikachin-Kit – Game de Pirameki Daisakusen [ ピカちんキット ゲームでピラメキ大作戦!] - 01009C100A8AA000,01009C100A8AA000,,,2021-04-19 3:11:07,1 +3537,Ougon musou kyoku CROSS [ 黄金夢想曲†CROSS] - 010011900E720000,010011900E720000,,,2021-04-19 3:22:41,1 +3538,Cargo Crew Driver - 0100DD6014870000,0100DD6014870000,status-playable,playable,2021-04-19 12:54:22,1 +3539,Black Legend - 0100C3200E7E6000,0100C3200E7E6000,gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48,2 +3540,Balan Wonderworld - 0100438012EC8000,0100438012EC8000,status-playable;nvdec;UE4,playable,2022-10-22 13:08:43,2 +3541,Arkham Horror: Mother's Embrace - 010069A010606000,010069A010606000,nvdec;status-playable,playable,2021-04-19 15:40:55,1 +3542,S.N.I.P.E.R. Hunter Scope - 0100B8B012ECA000,0100B8B012ECA000,status-playable,playable,2021-04-19 15:58:09,1 +3543,Ploid Saga - 0100E5B011F48000 ,0100E5B011F48000,status-playable,playable,2021-04-19 16:58:45,1 +3544,Kaze and the Wild Masks - 010038B00F142000,010038B00F142000,status-playable,playable,2021-04-19 17:11:03,1 +3545,I Saw Black Clouds - 01001860140B0000,01001860140B0000,nvdec;status-playable,playable,2021-04-19 17:22:16,1 +3546,Escape from Life Inc - 010023E013244000,010023E013244000,status-playable,playable,2021-04-19 17:34:09,1 +3547,El Hijo - A Wild West Tale - 010020A01209C000,010020A01209C000,nvdec;status-playable,playable,2021-04-19 17:44:08,1 +3548,Bomber Fox - 0100A1F012948000,0100A1F012948000,nvdec;status-playable,playable,2021-04-19 17:58:13,1 +3549,Stitchy in Tooki Trouble - 010077B014518000,010077B014518000,status-playable,playable,2021-05-06 16:25:53,2 +3550,SaGa Frontier Remastered - 0100A51013530000,0100A51013530000,status-playable;nvdec,playable,2022-11-03 13:54:56,2 +3552,Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ] - 0100EB2012E36000,0100EB2012E36000,status-nothing;crash,nothing,2021-11-03 8:45:06,2 +3553,Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ] - 01005CD013116000,01005CD013116000,status-playable,playable,2022-07-29 15:50:13,3 +3554,Uno no Tatsujin Machigai Sagashi Museum for Nintendo Switch [ -右脳の達人- まちがいさがしミュージアム for Nintendo Switch ] - 01001030136C6000,01001030136C6000,,,2021-04-22 21:59:27,1 +3555,Shantae - 0100430013120000,0100430013120000,status-playable,playable,2021-05-21 4:53:26,8 +3556,The Legend of Heroes: Trails of Cold Steel IV - 0100D3C010DE8000,0100D3C010DE8000,nvdec;status-playable,playable,2021-04-23 14:01:05,1 +3558,Effie - 01002550129F0000,01002550129F0000,status-playable,playable,2022-10-27 14:36:39,4 +3559,Death end re;Quest - 0100AEC013DDA000,0100AEC013DDA000,status-playable,playable,2023-07-09 12:19:54,2 +3560,THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改] - 01005E5013862000,01005E5013862000,status-nothing;crash,nothing,2021-09-30 14:41:07,2 +3561,Yoshi's Crafted World - 01006000040C2000,01006000040C2000,gpu;status-ingame;audout,ingame,2021-08-30 13:25:51,5 +3563,TY the Tasmanian Tiger 2: Bush Rescue HD - 0100BC701417A000,0100BC701417A000,,,2021-05-04 23:11:57,1 +3564,Nintendo Labo Toy-Con 03: Vehicle Kit - 01001E9003502000,01001E9003502000,services;status-menus;crash,menus,2022-08-03 17:20:11,3 +3566,Say No! More - 01001C3012912000,01001C3012912000,status-playable,playable,2021-05-06 13:43:34,1 +3567,Potion Party - 01000A4014596000,01000A4014596000,status-playable,playable,2021-05-06 14:26:54,1 +3568,Saviors of Sapphire Wings & Stranger of Sword City Revisited - 0100AA00128BA000,0100AA00128BA000,status-menus;crash,menus,2022-10-24 23:00:46,4 +3569,Lost Words: Beyond the Page - 0100018013124000,0100018013124000,status-playable,playable,2022-10-24 17:03:21,2 +3570,Lost Lands 3: The Golden Curse - 0100156014C6A000,0100156014C6A000,status-playable;nvdec,playable,2022-10-24 16:30:00,2 +3571,ISLAND - 0100F06013710000,0100F06013710000,status-playable,playable,2021-05-06 15:11:47,1 +3572,SilverStarChess - 010016D00A964000,010016D00A964000,status-playable,playable,2021-05-06 15:25:57,1 +3573,Breathedge - 01000AA013A5E000,01000AA013A5E000,UE4;nvdec;status-playable,playable,2021-05-06 15:44:28,1 +3574,Isolomus - 010001F0145A8000,010001F0145A8000,services;status-boots,boots,2021-11-03 7:48:21,2 +3575,Relicta - 01002AD013C52000,01002AD013C52000,status-playable;nvdec;UE4,playable,2022-10-31 12:48:33,2 +3576,Rain on Your Parade - 0100BDD014232000,0100BDD014232000,status-playable,playable,2021-05-06 19:32:04,1 +3579,World's End Club Demo - 0100BE101453E000,0100BE101453E000,,,2021-05-08 16:22:55,1 +3580,Very Very Valet Demo - 01006C8014DDA000,01006C8014DDA000,status-boots;crash;Needs Update;demo,boots,2022-11-12 15:26:13,2 +3581,Miitopia Demo - 01007DA0140E8000,01007DA0140E8000,services;status-menus;crash;demo,menus,2023-02-24 11:50:58,3 +3582,Knight Squad 2 - 010024B00E1D6000,010024B00E1D6000,status-playable;nvdec;online-broken,playable,2022-10-28 18:38:09,1 +3584,Tonarini kanojo noiru shiawase ~ Curious Queen ~ [ となりに彼女のいる幸せ~Curious Queen~] - 0100A18011BE4000,0100A18011BE4000,,,2021-05-11 13:40:34,1 +3585,Mainichi mamoru miya sanchino kyou nogohan [ 毎日♪ 衛宮さんちの今日のごはん ] - 01005E6010114000,01005E6010114000,,,2021-05-11 13:45:30,1 +3588,Commander Keen in Keen Dreams: Definitive Edition - 0100E400129EC000,0100E400129EC000,status-playable,playable,2021-05-11 19:33:54,1 +3589,SD Gundam G Generation Genesis (0100CEE0140CE000),0100CEE0140CE000,,,2021-05-13 12:29:50,1 +3590,Poison Control - 0100EB6012FD2000,0100EB6012FD2000,status-playable,playable,2021-05-16 14:01:54,1 +3591,My Riding Stables 2: A New Adventure - 010042A00FBF0000,010042A00FBF0000,status-playable,playable,2021-05-16 14:14:59,1 +3592,Dragon Audit - 0100DBC00BD5A000,0100DBC00BD5A000,crash;status-ingame,ingame,2021-05-16 14:24:46,1 +3595,Arcaea - 0100E680149DC000,0100E680149DC000,status-playable,playable,2023-03-16 19:31:21,11 +3596,Calculator - 010004701504A000,010004701504A000,status-playable,playable,2021-06-11 13:27:20,2 +3597,Rune Factory 5 (JP) - 010014D01216E000,010014D01216E000,gpu;status-ingame,ingame,2021-06-01 12:00:36,5 +3599,SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00,,status-playable;nvdec,playable,2022-09-15 20:45:57,3 +3601,War Of Stealth - assassin - 01004FA01391A000,01004FA01391A000,status-playable,playable,2021-05-22 17:34:38,1 +3602,Under Leaves - 01008F3013E4E000,01008F3013E4E000,status-playable,playable,2021-05-22 18:13:58,1 +3603,Travel Mosaics 7: Fantastic Berlin - ,,status-playable,playable,2021-05-22 18:37:34,1 +3604,Travel Mosaics 6: Christmas Around the World - 0100D520119D6000,0100D520119D6000,status-playable,playable,2021-05-26 0:52:47,1 +3605,Travel Mosaics 5: Waltzing Vienna - 01004C4010C00000,01004C4010C00000,status-playable,playable,2021-05-26 11:49:35,1 +3606,Travel Mosaics 4: Adventures in Rio - 010096D010BFE000,010096D010BFE000,status-playable,playable,2021-05-26 11:54:58,1 +3607,Travel Mosaics 3: Tokyo Animated - 0100102010BFC000,0100102010BFC000,status-playable,playable,2021-05-26 12:06:27,1 +3608,Travel Mosaics 2: Roman Holiday - 0100A8D010BFA000,0100A8D010BFA000,status-playable,playable,2021-05-26 12:33:16,1 +3609,Travel Mosaics: A Paris Tour - 01007DB00A226000,01007DB00A226000,status-playable,playable,2021-05-26 12:42:26,1 +3610,Rolling Gunner - 010076200CA16000,010076200CA16000,status-playable,playable,2021-05-26 12:54:18,1 +3611,MotoGP 21 - 01000F5013820000,01000F5013820000,gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08,2 +3612,Little Mouse's Encyclopedia - 0100FE0014200000,0100FE0014200000,status-playable,playable,2022-10-28 19:38:58,2 +3615,Himehibi 1 gakki - Princess Days - 0100F8D0129F4000,0100F8D0129F4000,status-nothing;crash,nothing,2021-11-03 8:34:19,6 +3616,Dokapon Up! Mugen no Roulette - 010048100D51A000,010048100D51A000,gpu;status-menus;Needs Update,menus,2022-12-08 19:39:10,6 +3617,Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~ - 01006A300BA2C000,01006A300BA2C000,status-playable;audout,playable,2023-05-04 17:25:23,4 +3618,Paint (0100946012446000),0100946012446000,,,2021-05-31 12:57:19,1 +3622,Knockout City - 01009EF00DDB4000,01009EF00DDB4000,services;status-boots;online-broken,boots,2022-12-09 9:48:58,4 +3623,Trine 2 - 010064E00A932000,010064E00A932000,nvdec;status-playable,playable,2021-06-03 11:45:20,1 +3624,Trine 3: The Artifacts of Power - 0100DEC00A934000,0100DEC00A934000,ldn-untested;online;status-playable,playable,2021-06-03 12:01:24,1 +3625,Jamestown+ - 010000100C4B8000,010000100C4B8000,,,2021-06-05 9:09:39,1 +3626,Lonely Mountains Downhill - 0100A0C00E0DE000,0100A0C00E0DE000,status-playable;online-broken,playable,2024-07-04 5:08:11,4 +3627,Densha de go!! Hashirou Yamanote Sen - 0100BC501355A000,0100BC501355A000,status-playable;nvdec;UE4,playable,2023-11-09 7:47:58,14 +3631,Warui Ohsama to Rippana Yuusha - 0100556011C10000,0100556011C10000,,,2021-06-24 14:22:15,1 +3632,TONY HAWK'S™ PRO SKATER™ 1 + 2 - 0100CC00102B4000,0100CC00102B4000,gpu;status-ingame;Needs Update,ingame,2024-09-24 8:18:14,11 +3633,Mario Golf: Super Rush - 0100C9C00E25C000,0100C9C00E25C000,gpu;status-ingame,ingame,2024-08-18 21:31:48,17 +3634,Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版) - 01001AB0141A8000,01001AB0141A8000,crash;status-ingame,ingame,2021-07-18 7:29:18,7 +3635,LEGO Builder’s Journey - 01005EE0140AE000 ,01005EE0140AE000,,,2021-06-26 21:31:59,1 +3638,Disgaea 6: Defiance of Destiny - 0100ABC013136000,0100ABC013136000,deadlock;status-ingame,ingame,2023-04-15 0:50:32,9 +3641,Game Builder Garage - 0100FA5010788000,0100FA5010788000,status-ingame,ingame,2024-04-20 21:46:22,4 +3644,Miitopia - 01003DA010E8A000,01003DA010E8A000,gpu;services-horizon;status-ingame,ingame,2024-09-06 10:39:13,26 +3645,DOOM Eternal - 0100B1A00D8CE000,0100B1A00D8CE000,gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-08-28 15:57:17,7 +3646,Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+ - 0100FDB00AA800000,0100FDB00AA80000,gpu;status-ingame;nvdec;opengl,ingame,2022-09-14 15:15:55,3 +3647,Sky: Children of the Light - 0100C52011460000,0100C52011460000,cpu;status-nothing;online-broken,nothing,2023-02-23 10:57:10,7 +3649,Tantei bokumetsu 探偵撲滅 - 0100CBA014014000,0100CBA014014000,,,2021-07-11 15:58:42,1 +3650,"The Legend of Heroes: Sen no Kiseki I - 0100AD0014AB4000 (Japan, Asia)",0100AD0014AB4000,,,2021-07-12 11:15:02,1 +3651,SmileBASIC 4 - 0100C9100B06A000,0100C9100B06A000,gpu;status-menus,menus,2021-07-29 17:35:59,2 +3652,The Legend of Zelda: Breath of the Wild Demo - 0100509005AF2000,0100509005AF2000,status-ingame;demo,ingame,2022-12-24 5:02:58,4 +3653,Kanda Alice mo Suiri Suru 神田アリス も 推理スル - 01003BD013E30000,01003BD013E30000,,,2021-07-15 0:30:16,1 +3655,Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi - 01005BA00F486000,01005BA00F486000,status-playable,playable,2021-07-21 10:41:33,2 +3657,The Legend of Zelda: Skyward Sword HD - 01002DA013484000,01002DA013484000,gpu;status-ingame,ingame,2024-06-14 16:48:29,29 +3659,Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。 - 01004E10142FE000,01004E10142FE000,crash;status-ingame,ingame,2021-07-23 10:56:44,3 +3660,Suguru Nature - 0100BF9012AC6000,0100BF9012AC6000,crash;status-ingame,ingame,2021-07-29 11:36:27,3 +3662,Cris Tales - 0100B0400EBC4000,0100B0400EBC4000,crash;status-ingame,ingame,2021-07-29 15:10:53,3 +3666,"Ren'ai, Karichaimashita 恋愛、借りちゃいました - 0100142013cea000",0100142013cea000,,,2021-07-28 0:37:48,1 +3668,Dai Gyakuten Saiban 1 & 2 -Naruhodou Ryuunosuke no Bouken to Kakugo- - 大逆転裁判1&2 -成歩堂龍ノ介の冒險と覺悟- - 0100D7F00FB1A000,0100D7F00FB1A000,,,2021-07-29 6:38:53,1 +3669,New Pokémon Snap - 0100F4300BF2C000,0100F4300BF2C000,status-playable,playable,2023-01-15 23:26:57,4 +3671,Astro Port Shmup Collection - 01000A601139E000,01000A601139E000,,,2021-08-03 13:14:37,1 +3672,Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600,,services;status-ingame,ingame,2022-07-10 19:27:30,5 +3674,Picross S GENESIS and Master System edition - ピクロスS MEGA DRIVE & MARKⅢ edition - 010089701567A000,010089701567A000,,,2021-08-10 4:18:06,2 +3676,ooKing simulator pizza -010033c014666000,010033c014666000,,,2021-08-15 20:49:24,2 +3677,Everyday♪ Today's MENU for EMIYA Family - 010031B012254000,010031B012254000,,,2021-08-15 19:27:36,1 +3679,Hatsune Miku Logic Paint S - 0100B4101459A000,0100B4101459A000,,,2021-08-19 0:23:50,2 +3680,シークレットゲーム KILLER QUEEN for Nintendo Switch,,,,2021-08-21 8:12:41,1 +3681,リベリオンズ: Secret Game 2nd Stage for Nintendo Switch - 010096000B658000,010096000B658000,,,2021-08-21 8:28:40,1 +3682,Susanoh -Nihon Shinwa RPG- - スサノオ ~日本神話RPG~ - 0100F3001472A000,0100F3001472A000,,,2021-08-22 4:20:18,1 +3683,Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H - 0100D7E0110B2000,0100D7E0110B2000,32-bit;status-playable,playable,2022-06-06 0:42:09,8 +3688,World's End Club - 01005A2014362000,01005A2014362000,,,2021-08-28 13:20:14,1 +3689,Axiom Verge 2,,,,2021-09-02 8:01:30,1 +3690,Slot - 01007DD011608000,01007DD011608000,,,2021-09-04 1:40:29,1 +3691,Golf - 01007D8010018000,01007D8010018000,,,2021-09-04 1:55:37,1 +3692,World Soccer - 010083B00B97A000,010083B00B97A000,,,2021-09-04 2:07:29,1 +3693,DogFight - 0100E80013BB0000,0100E80013BB0000,,,2021-09-04 14:12:30,1 +3694,Demon Gaze Extra - デモンゲイズ エクストラ - 01005110142A8000,01005110142A8000,,,2021-09-04 15:06:19,1 +3695,Spy Alarm - 01000E6015350000,01000E6015350000,services;status-ingame,ingame,2022-12-09 10:12:51,2 +3696,Rainbocorns - 01005EE0142F6000,01005EE0142F6000,,,2021-09-04 15:53:49,1 +3697,ZOMB - 0100E2B00E064000,0100E2B00E064000,,,2021-09-04 16:07:19,1 +3698,Bubble - 01004A4011CB4000,01004A4011CB4000,,,2021-09-04 16:16:24,1 +3699,Guitar - 0100A2D00EFBE000,0100A2D00EFBE000,,,2021-09-04 18:54:14,1 +3700,Hunt - 01000DE0125B8000,01000DE0125B8000,,,2021-09-06 11:29:19,1 +3701,Fight - 0100995013404000,0100995013404000,,,2021-09-06 11:31:42,1 +3702,Table Tennis - 0100CB00125B6000,0100CB00125B6000,,,2021-09-06 11:55:38,1 +3703,No More Heroes 3 - 01007C600EB42000,01007C600EB42000,gpu;status-ingame;UE4,ingame,2024-03-11 17:06:19,4 +3704,Idol Days - 愛怒流でいす - 01002EC014BCA000,01002EC014BCA000,gpu;status-ingame;crash,ingame,2021-12-19 15:31:28,3 +3705,Checkers - 01001B80124E4000,01001B80124E4000,,,2021-09-06 16:07:24,1 +3707,King's Bounty II,,,,2021-09-07 21:12:57,1 +3708,KeyWe - 0100E2B012056000,0100E2B012056000,,,2021-09-07 22:30:10,1 +3712,Sonic Colors Ultimate [010040E0116B8000],010040E0116B8000,status-playable,playable,2022-11-12 21:24:26,4 +3713,SpongeBob: Krusty Cook-Off - 01000D3013E8C000,01000D3013E8C000,,,2021-09-08 13:26:06,1 +3714,Snakes & Ladders - 010052C00ABFA000,010052C00ABFA000,,,2021-09-08 13:45:26,1 +3715,Darts - 01005A6010A04000,01005A6010A04000,,,2021-09-08 14:18:00,1 +3716,Luna's Fishing Garden - 0100374015A2C000,0100374015A2C000,,,2021-09-11 11:38:34,1 +3718,WarioWare: Get It Together! - 0100563010E0C000,0100563010E0C000,gpu;status-ingame;opengl-backend-bug,ingame,2024-04-23 1:04:56,5 +3719,SINce Memories Off the starry sky - 0100E94014792000,0100E94014792000,,,2021-09-17 2:03:06,1 +3720,Bang Dream Girls Band Party for Nintendo Switch,,status-playable,playable,2021-09-19 3:06:58,6 +3721,ENDER LILIES: Quietus of the Knights - 0100CCF012E9A000,0100CCF012E9A000,,,2021-09-19 1:10:44,1 +3724,Lost in Random - 01005FE01291A000,01005FE01291A000,gpu;status-ingame,ingame,2022-12-18 7:09:28,9 +3725,Miyamoto Sansuu Kyoushitsu Kashikoku Naru Puzzle Daizen - 宮本算数教室 賢くなるパズル 大全 - 01004ED014160000,01004ED014160000,,,2021-09-30 12:09:06,1 +3726,Hot Wheels Unleashed,,,,2021-10-01 1:14:17,1 +3727,Memories Off - 0100978013276000,0100978013276000,,,2021-10-05 18:50:06,1 +3729,Blue Reflections Second Light [Demo] [JP] - 01002FA01610A000,01002FA01610A000,,,2021-10-08 9:19:34,1 +3730,Metroid Dread - 010093801237C000,010093801237C000,status-playable,playable,2023-11-13 4:02:36,25 +3731,Kentucky Route Zero [0100327005C94000],0100327005C94000,status-playable,playable,2024-04-09 23:22:46,2 +3732,Cotton/Guardian Saturn Tribute Games,,gpu;status-boots,boots,2022-11-27 21:00:51,2 +3733,The Great Ace Attorney Chronicles - 010036E00FB20000,010036E00FB20000,status-playable,playable,2023-06-22 21:26:29,3 +3736,第六妖守-Dairoku-Di Liu Yao Shou -Dairoku -0100ad80135f4000,0100ad80135f4000,,,2021-10-17 4:42:47,1 +3737,Touhou Genso Wanderer -Lotus Labyrinth R- - 0100a7a015e4c000,0100a7a015e4c000,,,2021-10-17 20:10:40,1 +3740,Crysis 2 Remastered - 0100582010AE0000,0100582010AE0000,deadlock;status-menus,menus,2023-09-21 10:46:17,4 +3741,Crysis 3 Remastered - 0100CD3010AE2000 ,0100CD3010AE2000,deadlock;status-menus,menus,2023-09-10 16:03:50,3 +3743,Dying Light: Platinum Edition - 01008c8012920000,01008c8012920000,services-horizon;status-boots,boots,2024-03-11 10:43:32,3 +3745,Steel Assault - 01001C6014772000,01001C6014772000,status-playable,playable,2022-12-06 14:48:30,4 +3746,Foreclosed - 0100AE001256E000,0100AE001256E000,status-ingame;crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12,1 +3751,Nintendo 64 - Nintendo Switch Online - 0100C9A00ECE6000,0100C9A00ECE6000,gpu;status-ingame;vulkan,ingame,2024-04-23 20:21:07,15 +3752,Mario Party Superstars - 01006FE013472000,01006FE013472000,gpu;status-ingame;ldn-works;mac-bug,ingame,2024-05-16 11:23:34,23 +3756,Wheel of Fortune [010033600ADE6000],010033600ADE6000,status-boots;crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24,6 +3757,Abarenbo Tengu & Zombie Nation - 010040E012A5A000,010040E012A5A000,,,2021-10-31 18:24:00,1 +3758,Eight Dragons - 01003AD013BD2000,01003AD013BD2000,status-playable;nvdec,playable,2022-10-27 14:47:28,2 +3760,Restless Night [0100FF201568E000],0100FF201568E000,status-nothing;crash,nothing,2022-02-09 10:54:49,2 +3762,rRootage Reloaded [01005CD015986000],01005CD015986000,status-playable,playable,2022-08-05 23:20:18,10 +3763,Just Dance 2022 - 0100EA6014BB8000,0100EA6014BB8000,gpu;services;status-ingame;crash;Needs Update,ingame,2022-10-28 11:01:53,5 +3764,LEGO Marvel Super Heroes - 01006F600FFC8000,01006F600FFC8000,status-playable,playable,2024-09-10 19:02:19,7 +3765,Destructivator SE [0100D74012E0A000],0100D74012E0A000,,,2021-11-06 14:12:07,1 +3766,Diablo 2 Resurrected - 0100726014352000,0100726014352000,gpu;status-ingame;nvdec,ingame,2023-08-18 18:42:47,16 +3767,World War Z [010099F013898000],010099F013898000,,,2021-11-09 12:00:01,1 +3768,STAR WARS Jedi Knight II Jedi Outcast - 0100BB500EACA000,0100BB500EACA000,gpu;status-ingame,ingame,2022-09-15 22:51:00,3 +3770,Shin Megami Tensei V - 010063B012DC6000,010063B012DC6000,status-playable;UE4,playable,2024-02-21 6:30:07,38 +3771,Mercenaries Rebirth Call of the Wild Lynx - [010031e01627e000],010031e01627e000,,,2021-11-13 17:14:02,1 +3772,Summer Pockets REFLECTION BLUE - 0100273013ECA000,0100273013ECA000,,,2021-11-15 14:25:26,1 +3773,Spelunky - 0100710013ABA000,0100710013ABA000,status-playable,playable,2021-11-20 17:45:03,2 +3774,Spelunky 2 - 01007EC013ABC000,01007EC013ABC000,,,2021-11-17 19:31:16,1 +3775,MARSUPILAMI-HOOBADVENTURE - 010074F014628000,010074F014628000,,,2021-11-19 7:43:14,1 +3776,Pokémon Brilliant Diamond - 0100000011D90000,0100000011D90000,gpu;status-ingame;ldn-works,ingame,2024-08-28 13:26:35,54 +3778,Ice Station Z - 0100954014718000,0100954014718000,status-menus;crash,menus,2021-11-21 20:02:15,4 +3784,Shiro - 01000244016BAE000,01000244016BAE00,gpu;status-ingame,ingame,2024-01-13 8:54:39,2 +3785,Yuru Camp △ Have a nice day! - 0100D12014FC2000,0100D12014FC2000,,,2021-11-29 10:46:03,1 +3786,Iridium - 010095C016C14000,010095C016C14000,status-playable,playable,2022-08-05 23:19:53,7 +3787,Black The Fall - 0100502007f54000,0100502007f54000,,,2021-12-05 3:08:22,1 +3788,Loop Hero - 010004E01523C000,010004E01523C000,,,2021-12-12 18:11:42,2 +3790,The Battle Cats Unite! - 01001E50141BC000,01001E50141BC000,deadlock;status-ingame,ingame,2021-12-14 21:38:34,2 +3792,Life is Strange: True Colors [0100500012AB4000],0100500012AB4000,gpu;status-ingame;UE4,ingame,2024-04-08 16:11:52,8 +3796,Deathsmiles I・II - 01009120119B4000,01009120119B4000,status-playable,playable,2024-04-08 19:29:00,7 +3797,Deedlit in Wonder Labyrinth - 0100EF0015A9A000,0100EF0015A9A000,deadlock;status-ingame;Needs Update;Incomplete,ingame,2022-01-19 10:00:59,3 +3798,Hamidashi Creative - 01006FF014152000,01006FF014152000,gpu;status-ingame,ingame,2021-12-19 15:30:51,2 +3799,Ys IX: Monstrum Nox - 0100E390124D8000,0100E390124D8000,status-playable,playable,2022-06-12 4:14:42,11 +3801,Animal Crossing New Horizons Island Transfer Tool - 0100F38011CFE000,0100F38011CFE000,services;status-ingame;Needs Update;Incomplete,ingame,2022-12-07 13:51:19,2 +3802,Pokémon Mystery Dungeon Rescue Team DX (DEMO) - 010040800FB54000,010040800FB54000,,,2022-01-09 2:15:04,1 +3804,Monopoly Madness - 01005FF013DC2000,01005FF013DC2000,status-playable,playable,2022-01-29 21:13:52,2 +3805,DoDonPachi Resurrection - 怒首領蜂大復活 - 01005A001489A000,01005A001489A000,status-ingame;32-bit;crash,ingame,2024-01-25 14:37:32,5 +3808,Shadow Man Remastered - 0100C3A013840000,0100C3A013840000,gpu;status-ingame,ingame,2024-05-20 6:01:39,5 +3814,Star Wars - Knights Of The Old Republic - 0100854015868000,0100854015868000,gpu;deadlock;status-boots,boots,2024-02-12 10:13:51,4 +3815,Gunvolt Chronicles: Luminous Avenger iX 2 - 0100763015C2E000,0100763015C2E000,status-nothing;crash;Needs Update,nothing,2022-04-29 15:34:34,4 +3816,Furaiki 4 - 風雨来記4 - 010046601125A000,010046601125A000,,,2022-01-27 17:37:47,1 +3817,Pokémon Legends: Arceus - 01001F5010DFA000,01001F5010DFA000,gpu;status-ingame;Needs Update;ldn-works,ingame,2024-09-19 10:02:02,83 +3826,Demon Gaze EXTRA - 0100FCC0168FC000,0100FCC0168FC000,,,2022-02-05 16:25:26,1 +3828,Fatal Frame: Maiden of Black Water - 0100BEB015604000,0100BEB015604000,status-playable,playable,2023-07-05 16:01:40,5 +3830,OlliOlli World - 0100C5D01128E000,0100C5D01128E000,,,2022-02-08 13:01:22,1 +3831,Horse Club Adventures - 0100A6B012932000,0100A6B012932000,,,2022-02-10 1:59:25,4 +3832,Toree 3D (0100E9701479E000),0100E9701479E000,,,2022-02-15 18:41:33,1 +3833,Picross S7,,status-playable,playable,2022-02-16 12:51:25,2 +3834,Nintendo Switch Sports Online Play Test - 01000EE017182000,01000EE017182000,gpu;status-ingame,ingame,2022-03-16 7:44:12,3 +3836,MLB The Show 22 Tech Test - 0100A9F01776A000,0100A9F01776A000,services;status-nothing;crash;Needs Update;demo,nothing,2022-12-09 10:28:34,2 +3837,Cruis'n Blast - 0100B41013C82000,0100B41013C82000,gpu;status-ingame,ingame,2023-07-30 10:33:47,10 +3839,Crunchyroll - 0100C090153B4000,0100C090153B4000,,,2022-02-20 13:56:29,2 +3840,PUZZLE & DRAGONS Nintendo Switch Edition - 01001D701375A000,01001D701375A000,,,2022-02-20 11:01:34,1 +3842,Hatsune Miku Connecting Puzzle TAMAGOTORI - 0100118016036000,0100118016036000,,,2022-02-23 2:07:05,1 +3844,Mononoke Slashdown - 0100F3A00FB78000,0100F3A00FB78000,status-menus;crash,menus,2022-05-04 20:55:47,4 +3846,Tsukihime - A piece of blue glass moon- - 01001DC01486A800,01001DC01486A800,,,2022-02-28 14:35:38,1 +3849,Kirby and the Forgotten Land (Demo version) - 010091201605A000,010091201605A000,status-playable;demo,playable,2022-08-21 21:03:01,3 +3850,Super Zangyura - 01001DA016942000,01001DA016942000,,,2022-03-05 4:54:47,1 +3851,Atelier Sophie 2: The Alchemist of the Mysterious Dream - 010082A01538E000,010082A01538E000,status-ingame;crash,ingame,2022-12-01 4:34:03,10 +3852,SEGA Genesis - Nintendo Switch Online - 0100B3C014BDA000,0100B3C014BDA000,status-nothing;crash;regression,nothing,2022-04-11 7:27:21,3 +3853,TRIANGLE STRATEGY - 0100CC80140F8000,0100CC80140F8000,gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37,23 +3854,Pretty Girls Breakers! - 0100DD2017994000,0100DD2017994000,,,2022-03-10 3:43:51,1 +3855,Chocobo GP - 01006A30124CA000,01006A30124CA000,gpu;status-ingame;crash,ingame,2022-06-04 14:52:18,11 +3856,.hack//G.U. Last Recode - 0100BA9014A02000,0100BA9014A02000,deadlock;status-boots,boots,2022-03-12 19:15:47,6 +3857,Monster World IV - 01008CF014560000,01008CF014560000,,,2022-03-12 4:25:01,1 +3858,Cosmos Bit - 01004810171EA000,01004810171EA000,,,2022-03-12 4:25:58,1 +3859,The Cruel King and the Great Hero - 0100EBA01548E000,0100EBA01548E000,gpu;services;status-ingame,ingame,2022-12-02 7:02:08,2 +3860,Lateral Freeze ,,,,2022-03-15 16:00:18,1 +3862,Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath Demo - 0100FA7017CA6000,0100FA7017CA6000,,,2022-03-19 7:26:02,1 +3863,Neptunia X SENRAN KAGURA Ninja Wars - 01006D90165A2000,01006D90165A2000,,,2022-03-21 6:58:28,1 +3864,13 Sentinels Aegis Rim Demo - 0100C54015002000,0100C54015002000,status-playable;demo,playable,2022-04-13 14:15:48,2 +3866,Kirby and the Forgotten Land - 01004D300C5AE000,01004D300C5AE000,gpu;status-ingame,ingame,2024-03-11 17:11:21,35 +3867,Love of Love Emperor of LOVE! - 010015C017776000,010015C017776000,,,2022-03-25 8:46:23,1 +3868,Hatsune Miku JIGSAW PUZZLE - 010092E016B26000,010092E016B26000,,,2022-03-25 8:49:39,1 +3870,The Ryuo's Work is Never Done! - 010033100EE12000,010033100EE12000,status-playable,playable,2022-03-29 0:35:37,1 +3871,Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath - 01005AB015994000,01005AB015994000,gpu;status-playable,playable,2022-03-28 2:22:24,1 +3875,MLB® The Show™ 22 - 0100876015D74000,0100876015D74000,gpu;slow;status-ingame,ingame,2023-04-25 6:28:43,8 +3878,13 Sentinels Aegis Rim - 01003FC01670C000,01003FC01670C000,slow;status-ingame,ingame,2024-06-10 20:33:38,9 +3879,Metal Dogs ,,,,2022-04-15 14:32:19,1 +3881,STAR WARS: The Force Unleashed - 0100153014544000,0100153014544000,status-playable,playable,2024-05-01 17:41:28,3 +3882,JKSV - 00000000000000000,0000000000000000,,,2022-04-21 23:34:59,1 +3886,Jigsaw Masterpieces - 0100BB800E0D2000,0100BB800E0D2000,,,2022-05-04 21:14:45,1 +3887,QuickSpot - 0100E4501677E000,0100E4501677E000,,,2022-05-04 21:14:48,1 +3888,Yomawari 3 - 0100F47016F26000,0100F47016F26000,status-playable,playable,2022-05-10 8:26:51,6 +3889,Marco & The Galaxy Dragon Demo - 0100DA7017C9E000,0100DA7017C9E000,gpu;status-ingame;demo,ingame,2023-06-03 13:05:33,2 +3890,Demon Turf: Neon Splash - 010010C017B28000,010010C017B28000,,,2022-05-04 21:35:59,1 +3896,Taiko Risshiden V DX - 0100346017304000,0100346017304000,status-nothing;crash,nothing,2022-06-06 16:25:31,3 +3901,The Stanley Parable: Ultra Deluxe - 010029300E5C4000,010029300E5C4000,gpu;status-ingame,ingame,2024-07-12 23:18:26,6 +3902,CHAOS;HEAD NOAH - 0100957016B90000,0100957016B90000,status-playable,playable,2022-06-02 22:57:19,1 +3904,LOOPERS - 010062A0178A8000,010062A0178A8000,gpu;slow;status-ingame;crash,ingame,2022-06-17 19:21:45,3 +3905,二ノ国 白き聖灰の女王 - 010032400E700000,010032400E700000,services;status-menus;32-bit,menus,2023-04-16 17:11:06,8 +3907,even if TEMPEST - 010095E01581C000,010095E01581C000,gpu;status-ingame,ingame,2023-06-22 23:50:25,8 +3908,Mario Strikers Battle League Football First Kick [01008A30182F2000],01008A30182F2000,,,2022-06-09 20:58:06,2 +3910,Mario Strikers: Battle League Football - 010019401051C000,010019401051C000,status-boots;crash;nvdec,boots,2024-05-07 6:23:56,13 +3911,鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles - 0100309016E7A000,0100309016E7A000,status-playable;UE4,playable,2024-08-08 4:51:49,12 +3912,Teenage Mutant Ninja Turtles: Shredder's Revenge - 0100FE701475A000,0100FE701475A000,deadlock;status-boots;crash,boots,2024-09-28 9:31:39,14 +3913,MOFUMOFU Sensen - 0100B46017500000,0100B46017500000,gpu;status-menus,menus,2024-09-21 21:51:08,2 +3914,OMORI - 010014E017B14000,010014E017B14000,status-playable,playable,2023-01-07 20:21:02,2 +3916,30 in 1 game collection vol. 2 - 0100DAC013D0A000,0100DAC013D0A000,status-playable;online-broken,playable,2022-10-15 17:22:27,6 +3917,索尼克:起源 / Sonic Origins - 01009FB016286000,01009FB016286000,status-ingame;crash,ingame,2024-06-02 7:20:15,10 +3919,Fire Emblem Warriors: Three Hopes - 010071F0143EA000,010071F0143EA000,gpu;status-ingame;nvdec,ingame,2024-05-01 7:07:42,6 +3920,LEGO Star Wars: The Skywalker Saga - 010042D00D900000,010042D00D900000,gpu;slow;status-ingame,ingame,2024-04-13 20:08:46,4 +3922,Pocky & Rocky Reshrined - 01000AF015596000,01000AF015596000,,,2022-06-26 21:34:16,1 +3923,Horgihugh And Friends - 010085301797E000,010085301797E000,,,2022-06-26 21:34:22,1 +3924,The movie The Quintessential Bride -Five Memories Spent with You- - 01005E9016BDE000,01005E9016BDE000,status-playable,playable,2023-12-14 14:43:43,2 +3925,nx-hbmenu - 0000000000000000,0000000000000000,status-boots;Needs Update;homebrew,boots,2024-04-06 22:05:32,12 +3926,Portal 2 - 0100ABD01785C000,0100ABD01785C000,gpu;status-ingame,ingame,2023-02-20 22:44:15,3 +3927,Portal - 01007BB017812000,01007BB017812000,status-playable,playable,2024-06-12 3:48:29,5 +3928,EVE ghost enemies - 01007BE0160D6000,01007BE0160D6000,gpu;status-ingame,ingame,2023-01-14 3:13:30,4 +3929,PowerSlave Exhumed - 01008E100E416000,01008E100E416000,gpu;status-ingame,ingame,2023-07-31 23:19:10,2 +3930,Quake - 0100BA5012E54000,0100BA5012E54000,gpu;status-menus;crash,menus,2022-08-08 12:40:34,3 +3932,Rustler - 010071E0145F8000,010071E0145F8000,,,2022-07-06 2:09:18,1 +3933,Colors Live - 010020500BD86000,010020500BD86000,gpu;services;status-boots;crash,boots,2023-02-26 2:51:07,3 +3934,WAIFU IMPACT - 0100393016D7E000,0100393016D7E000,,,2022-07-08 22:16:51,1 +3935,Sherlock Holmes: The Devil's Daughter - 010020F014DBE000,010020F014DBE000,gpu;status-ingame,ingame,2022-07-11 0:07:26,3 +3936,0100EE40143B6000 - Fire Emblem Warriors: Three Hopes (Japan) ,0100EE40143B6000,,,2022-07-11 18:41:30,4 +3938,Wunderling - 01001C400482C000,01001C400482C000,audio;status-ingame;crash,ingame,2022-09-10 13:20:12,2 +3939,SYNTHETIK: Ultimate - 01009BF00E7D2000,01009BF00E7D2000,gpu;status-ingame;crash,ingame,2022-08-30 3:19:25,2 +3940,Breakout: Recharged - 010022C016DC8000,010022C016DC8000,slow;status-ingame,ingame,2022-11-06 15:32:57,3 +3942,Banner Saga Trilogy - 0100CE800B94A000,0100CE800B94A000,slow;status-playable,playable,2024-03-06 11:25:20,2 +3943,CAPCOM BELT ACTION COLLECTION - 0100F6400A77E000,0100F6400A77E000,status-playable;online;ldn-untested,playable,2022-07-21 20:51:23,1 +3944,死神と少女/Shinigami to Shoujo - 0100AFA01750C000,0100AFA01750C000,gpu;status-ingame;Incomplete,ingame,2024-03-22 1:06:45,8 +3946,Darius Cozmic Collection Special Edition - 010059C00BED4000,010059C00BED4000,status-playable,playable,2022-07-22 16:26:50,1 +3950,Earthworms - 0100DCE00B756000,0100DCE00B756000,status-playable,playable,2022-07-25 16:28:55,1 +3951,LIVE A LIVE - 0100CF801776C000,0100CF801776C000,status-playable;UE4;amd-vendor-bug,playable,2023-02-05 15:12:07,15 +3952,Fit Boxing - 0100807008868000 ,0100807008868000,status-playable,playable,2022-07-26 19:24:55,1 +3953,Gurimugurimoa OnceMore Demo - 01002C8018554000,01002C8018554000,status-playable,playable,2022-07-29 22:07:31,2 +3954,Trinity Trigger Demo - 010048201891A000,010048201891A000,,,2022-07-26 23:32:10,1 +3955,SD GUNDAM BATTLE ALLIANCE Demo - 0100829018568000,0100829018568000,audio;status-ingame;crash;demo,ingame,2022-08-01 23:01:20,4 +3956,Fortnite - 010025400AECE000,010025400AECE000,services-horizon;status-nothing,nothing,2024-04-06 18:23:25,5 +3957,Furi Definitive Edition - 01000EC00AF98000,01000EC00AF98000,status-playable,playable,2022-07-27 12:35:08,1 +3958,Jackbox Party Starter - 0100814017CB6000,0100814017CB6000,Incomplete,,2022-07-29 22:18:07,3 +3959,Digimon Survive - 010047500B7B2000,010047500B7B2000,,,2022-07-29 12:33:28,1 +3960,Xenoblade Chronicles 3 - 010074F013262000,010074F013262000,gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44,73 +3961,Slime Rancher: Plortable Edition - 0100B9C0148D0000,0100B9C0148D0000,,,2022-07-30 6:02:55,1 +3962,Lost Ruins - 01008AD013A86800,01008AD013A86800,gpu;status-ingame,ingame,2023-02-19 14:09:00,3 +3963,Heroes of Hammerwatch - 0100D2B00BC54000,0100D2B00BC54000,status-playable,playable,2022-08-01 18:30:21,1 +3965,Zombie Army 4: Dead War - ,,,,2022-08-01 20:03:53,1 +3966,Plague Inc: Evolved - 01000CE00CBB8000,01000CE00CBB8000,,,2022-08-02 2:32:33,1 +3968,Kona - 0100464009294000,0100464009294000,status-playable,playable,2022-08-03 12:48:19,1 +3969,Minecraft: Story Mode - The Complete Adventure - 010059C002AC2000,010059C002AC2000,status-boots;crash;online-broken,boots,2022-08-04 18:56:58,1 +3970,LA-MULANA - 010026000F662800,010026000F662800,gpu;status-ingame,ingame,2022-08-12 1:06:21,3 +3971,Minecraft: Story Mode - Season Two - 01003EF007ABA000,01003EF007ABA000,status-playable;online-broken,playable,2023-03-04 0:30:50,3 +3972,My Riding Stables - Life with Horses - 010028F00ABAE000,010028F00ABAE000,status-playable,playable,2022-08-05 21:39:07,1 +3973,NBA Playgrounds - 010002900294A000,010002900294A000,status-playable;nvdec;online-broken;UE4,playable,2022-08-06 17:06:59,1 +3975,Nintendo Labo Toy-Con 02: Robot Kit - 01009AB0034E0000,01009AB0034E0000,gpu;status-ingame,ingame,2022-08-07 13:03:19,1 +3976,Nintendo Labo Toy-Con 04: VR Kit - 0100165003504000,0100165003504000,services;status-boots;crash,boots,2023-01-17 22:30:24,4 +3977,Azure Striker GUNVOLT 3 - 01004E90149AA000,01004E90149AA000,status-playable,playable,2022-08-10 13:46:49,2 +3978,Clumsy Rush Ultimate Guys - 0100A8A0174A4000,0100A8A0174A4000,,,2022-08-10 2:12:29,1 +3979,The DioField Chronicle Demo - 01009D901624A000,01009D901624A000,,,2022-08-10 2:18:16,1 +3980,Professional Construction - The Simulation - 0100A9800A1B6000,0100A9800A1B6000,slow;status-playable,playable,2022-08-10 15:15:45,1 +3981,"Pokémon: Let's Go, Pikachu! demo - 01009AD008C4C000",01009AD008C4C000,slow;status-playable;demo,playable,2023-11-26 11:23:20,3 +3984,Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000,0100069000078000,services;status-nothing;crash,nothing,2022-08-11 13:19:41,1 +3985,Retimed - 010086E00BCB2000,010086E00BCB2000,status-playable,playable,2022-08-11 13:32:39,1 +3986,DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET - 010051C0134F8000,010051C0134F8000,status-playable;vulkan-backend-bug,playable,2024-08-28 0:03:50,5 +3987,Runbow Deluxe Edition - 0100D37009B8A000,0100D37009B8A000,status-playable;online-broken,playable,2022-08-12 12:20:25,1 +3988,Saturday Morning RPG - 0100F0000869C000,0100F0000869C000,status-playable;nvdec,playable,2022-08-12 12:41:50,1 +3989,Slain Back from Hell - 0100BB100AF4C000,0100BB100AF4C000,status-playable,playable,2022-08-12 23:36:19,1 +3990,Spidersaurs - 010040B017830000,010040B017830000,,,2022-08-14 3:12:30,1 +3993,月姫 -A piece of blue glass moon- - 01001DC01486A000,01001DC01486A000,,,2022-08-15 15:41:29,1 +3994,Spacecats with Lasers - 0100D9B0041CE000,0100D9B0041CE000,status-playable,playable,2022-08-15 17:22:44,1 +3995,Spellspire - 0100E74007EAC000,0100E74007EAC000,status-playable,playable,2022-08-16 11:21:21,1 +3996,Spot The Difference - 0100E04009BD4000,0100E04009BD4000,status-playable,playable,2022-08-16 11:49:52,1 +3997,Spot the Differences: Party! - 010052100D1B4000,010052100D1B4000,status-playable,playable,2022-08-16 11:55:26,1 +3998,Demon Throttle - 01001DA015650000,01001DA015650000,,,2022-08-17 0:54:49,1 +3999,Kirby’s Dream Buffet - 0100A8E016236000,0100A8E016236000,status-ingame;crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44,5 +4000,DOTORI - 0100DBD013C92000,0100DBD013C92000,,,2022-08-17 15:10:52,1 +4002,Syberia 2 - 010028C003FD6000,010028C003FD6000,gpu;status-ingame,ingame,2022-08-24 12:43:03,2 +4003,Drive Buy - 010093A0108DC000,010093A0108DC000,,,2022-08-21 3:30:18,1 +4004,Taiko no Tatsujin Rhythm Festival Demo - 0100AA2018846000,0100AA2018846000,,,2022-08-22 23:31:57,1 +4005,Splatoon 3: Splatfest World Premiere - 0100BA0018500000,0100BA0018500000,gpu;status-ingame;online-broken;demo,ingame,2022-09-19 3:17:12,5 +4006,Transcripted - 010009F004E66000,010009F004E66000,status-playable,playable,2022-08-25 12:13:11,1 +4010,eBaseball Powerful Pro Yakyuu 2022 - 0100BCA016636000,0100BCA016636000,gpu;services-horizon;status-nothing;crash,nothing,2024-05-26 23:07:19,32 +4011,Firegirl: Hack 'n Splash Rescue DX - 0100DAF016D48000,0100DAF016D48000,,,2022-08-30 15:32:22,1 +4012,Little Noah: Scion of Paradise - 0100535014D76000,0100535014D76000,status-playable;opengl-backend-bug,playable,2022-09-14 4:17:13,2 +4013,Tinykin - 0100A73016576000,0100A73016576000,gpu;status-ingame,ingame,2023-06-18 12:12:24,3 +4014,Youtubers Life - 00100A7700CCAA4000,00100A7700CCAA40,status-playable;nvdec,playable,2022-09-03 14:56:19,1 +4015,Cozy Grove - 01003370136EA000,01003370136EA000,gpu;status-ingame,ingame,2023-07-30 22:22:19,2 +4016,A Duel Hand Disaster: Trackher - 010026B006802000,010026B006802000,status-playable;nvdec;online-working,playable,2022-09-04 14:24:55,1 +4017,Angry Bunnies: Colossal Carrot Crusade - 0100F3500D05E000,0100F3500D05E000,status-playable;online-broken,playable,2022-09-04 14:53:26,1 +4018,CONTRA: ROGUE CORPS Demo - 0100B8200ECA6000,0100B8200ECA6000,gpu;status-ingame,ingame,2022-09-04 16:46:52,1 +4021,The Gardener and the Wild Vines - 01006350148DA000,01006350148DA000,gpu;status-ingame,ingame,2024-04-29 16:32:10,2 +4025,HAAK - 0100822012D76000,0100822012D76000,gpu;status-ingame,ingame,2023-02-19 14:31:05,2 +4026,Temtem - 0100C8B012DEA000,0100C8B012DEA000,status-menus;online-broken,menus,2022-12-17 17:36:11,4 +4027,Oniken - 010057C00D374000,010057C00D374000,status-playable,playable,2022-09-10 14:22:38,1 +4028,Ori and the Blind Forest: Definitive Edition Demo - 010005800F46E000,010005800F46E000,status-playable,playable,2022-09-10 14:40:12,1 +4029,Spyro Reignited Trilogy - 010077B00E046000,010077B00E046000,status-playable;nvdec;UE4,playable,2022-09-11 18:38:33,1 +4031,Disgaea 4 Complete+ Demo - 010068C00F324000,010068C00F324000,status-playable;nvdec,playable,2022-09-13 15:21:59,1 +4032,Disney Classic Games: Aladdin and The Lion King - 0100A2F00EEFC000 ,0100A2F00EEFC000,status-playable;online-broken,playable,2022-09-13 15:44:17,1 +4035,Pokémon Shield - 01008DB008C2C000,01008DB008C2C000,deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 7:20:22,7 +4036,Shadowrun Returns - 0100371013B3E000,0100371013B3E000,gpu;status-ingame;Needs Update,ingame,2022-10-04 21:32:31,4 +4037,Shadowrun: Dragonfall - Director's Cut - 01008310154C4000,01008310154C4000,gpu;status-ingame;Needs Update,ingame,2022-10-04 20:52:18,3 +4038,Shadowrun: Hong Kong - Extended Edition - 0100C610154CA000,0100C610154CA000,gpu;status-ingame;Needs Update,ingame,2022-10-04 20:53:09,3 +4039,Animal Drifters - 010057F0195DE000,010057F0195DE000,,,2022-09-20 21:43:54,1 +4040,Paddles - 0100F5E019300000,0100F5E019300000,,,2022-09-20 21:46:00,1 +4041,River City Girls Zero - 0100E2D015DEA000,0100E2D015DEA000,,,2022-09-20 22:18:30,1 +4042,JoJos Bizarre Adventure All-Star Battle R - 01008120128C2000,01008120128C2000,status-playable,playable,2022-12-03 10:45:10,2 +4044,OneShot: World Machine EE,,,,2022-09-22 8:11:47,1 +4045,Taiko no Tatsujin: Rhythm Festival - 0100BCA0135A0000,0100BCA0135A0000,status-playable,playable,2023-11-13 13:16:34,17 +4046,Trinity Trigger - 01002D7010A54000,01002D7010A54000,status-ingame;crash,ingame,2023-03-03 3:09:09,4 +4048,太鼓之達人 咚咚雷音祭 - 01002460135a4000,01002460135a4000,,,2022-09-27 7:17:54,1 +4049,Life is Strange Remastered - 0100DC301186A000,0100DC301186A000,status-playable;UE4,playable,2022-10-03 16:54:44,12 +4050,Life is Strange: Before the Storm Remastered - 010008501186E000,010008501186E000,status-playable,playable,2023-09-28 17:15:44,4 +4051,Hatsune Miku: Project DIVA Mega Mix - 01001CC00FA1A000,01001CC00FA1A000,audio;status-playable;online-broken,playable,2024-01-07 23:12:57,10 +4053,Shovel Knight Dig - 0100B62017E68000,0100B62017E68000,,,2022-09-30 20:51:35,1 +4054,Couch Co-Op Bundle Vol. 2 - 01000E301107A000,01000E301107A000,status-playable;nvdec,playable,2022-10-02 12:04:21,1 +4056,Shadowverse: Champion’s Battle - 01003B90136DA000,01003B90136DA000,status-nothing;crash,nothing,2023-03-06 0:31:50,7 +4057,Jinrui no Ninasama he - 0100F4D00D8BE000,0100F4D00D8BE000,status-ingame;crash,ingame,2023-03-07 2:04:17,1 +4058,XEL - 0100CC9015360000,0100CC9015360000,gpu;status-ingame,ingame,2022-10-03 10:19:39,2 +4059,Catmaze - 01000A1018DF4000,01000A1018DF4000,,,2022-10-03 11:10:48,1 +4060,Lost Lands: Dark Overlord - 0100BDD010AC8000 ,0100BDD010AC8000,status-playable,playable,2022-10-03 11:52:58,1 +4061,STAR WARS Episode I: Racer - 0100BD100FFBE000 ,0100BD100FFBE000,slow;status-playable;nvdec,playable,2022-10-03 16:08:36,1 +4062,Story of Seasons: Friends of Mineral Town - 0100ED400EEC2000,0100ED400EEC2000,status-playable,playable,2022-10-03 16:40:31,1 +4063,Collar X Malice -Unlimited- - 0100E3B00F412000 ,0100E3B00F412000,status-playable;nvdec,playable,2022-10-04 15:30:40,1 +4064,Bullet Soul - 0100DA4017FC2000,0100DA4017FC2000,,,2022-10-05 9:41:49,1 +4065,Kwaidan ~Azuma manor story~ - 0100894011F62000 ,0100894011F62000,status-playable,playable,2022-10-05 12:50:44,1 +4066,Shantae: Risky's Revenge - Director's Cut - 0100ADA012370000,0100ADA012370000,status-playable,playable,2022-10-06 20:47:39,2 +4067,NieR:Automata The End of YoRHa Edition - 0100B8E016F76000,0100B8E016F76000,slow;status-ingame;crash,ingame,2024-05-17 1:06:34,23 +4069,Star Seeker: The secret of the sourcerous Standoff - 0100DFC018D86000,0100DFC018D86000,,,2022-10-09 15:46:05,1 +4072,Hyrule Warriors: Age of Calamity - Demo Version - 0100A2C01320E000,0100A2C01320E000,slow;status-playable,playable,2022-10-10 17:37:41,1 +4073,My Universe - Fashion Boutique - 0100F71011A0A000,0100F71011A0A000,status-playable;nvdec,playable,2022-10-12 14:54:19,1 +4075,Star Trek Prodigy: Supernova - 01009DF015776000,01009DF015776000,status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50,2 +4076,Dungeon Nightmares 1 + 2 Collection - 0100926013600000,0100926013600000,status-playable,playable,2022-10-17 18:54:22,1 +4077,Food Truck Tycoon - 0100F3900D0F0000 ,0100F3900D0F0000,status-playable,playable,2022-10-17 20:15:55,1 +4078,Persona 5 Royal - 01005CA01580EOO,,,,2022-10-17 21:00:21,1 +4079,Nintendo Switch Sports - 0100D2F00D5C0000,0100D2F00D5C0000,deadlock;status-boots,boots,2024-09-10 14:20:24,24 +4080,Grim Legends 2: Song Of The Dark Swan - 010078E012D80000,010078E012D80000,status-playable;nvdec,playable,2022-10-18 12:58:45,1 +4082,My Universe - Cooking Star Restaurant - 0100CD5011A02000,0100CD5011A02000,status-playable,playable,2022-10-19 10:00:44,1 +4083,Not Tonight - 0100DAF00D0E2000 ,0100DAF00D0E2000,status-playable;nvdec,playable,2022-10-19 11:48:47,1 +4084,Outbreak: The New Nightmare - 0100B450130FC000,0100B450130FC000,status-playable,playable,2022-10-19 15:42:07,1 +4085,Alan Wake Remaster - 01000623017A58000,01000623017A5800,,,2022-10-21 6:13:39,2 +4086,Persona 5 Royal - 01005CA01580E000,01005CA01580E000,gpu;status-ingame,ingame,2024-08-17 21:45:15,15 +4087,Shing! (サムライフォース:斬!) - 01009050133B4000,01009050133B4000,status-playable;nvdec,playable,2022-10-22 0:48:54,2 +4089,Mario + Rabbids® Sparks of Hope - 0100317013770000,0100317013770000,gpu;status-ingame;Needs Update,ingame,2024-06-20 19:56:19,35 +4090,3D Arcade Fishing - 010010C013F2A000,010010C013F2A000,status-playable,playable,2022-10-25 21:50:51,1 +4091,Aerial Knight's Never Yield - 0100E9B013D4A000,0100E9B013D4A000,status-playable,playable,2022-10-25 22:05:00,1 +4092,Aluna: Sentinel of the Shards - 010045201487C000,010045201487C000,status-playable;nvdec,playable,2022-10-25 22:17:03,1 +4093,Atelier Firis: The Alchemist and the Mysterious Journey DX - 010023201421E000,010023201421E000,gpu;status-ingame;nvdec,ingame,2022-10-25 22:46:19,1 +4094,Atelier Sophie: The Alchemist of the Mysterious Book DX - 01001A5014220000,01001A5014220000,status-playable,playable,2022-10-25 23:06:20,1 +4095,Backworlds - 0100FEA014316000,0100FEA014316000,status-playable,playable,2022-10-25 23:20:34,1 +4097,Bakumatsu Renka SHINSENGUMI - 01008260138C4000,01008260138C4000,status-playable,playable,2022-10-25 23:37:31,1 +4098,Bamerang - 01008D30128E0000,01008D30128E0000,status-playable,playable,2022-10-26 0:29:39,1 +4099,Battle Axe - 0100747011890000,0100747011890000,status-playable,playable,2022-10-26 0:38:01,1 +4100,Beautiful Desolation - 01006B0014590000,01006B0014590000,gpu;status-ingame;nvdec,ingame,2022-10-26 10:34:38,1 +4101,Bladed Fury - 0100DF0011A6A000,0100DF0011A6A000,status-playable,playable,2022-10-26 11:36:26,1 +4102,Boris The Rocket - 010092C013FB8000,010092C013FB8000,status-playable,playable,2022-10-26 13:23:09,1 +4103,BraveMatch - 010081501371E000,010081501371E000,status-playable;UE4,playable,2022-10-26 13:32:15,1 +4104,Brawl Chess - 010068F00F444000,010068F00F444000,status-playable;nvdec,playable,2022-10-26 13:59:17,1 +4108,CLANNAD Side Stories - 01007B01372C000,,status-playable,playable,2022-10-26 15:03:04,1 +4109,DC Super Hero Girls™: Teen Power - 0100F8F00C4F2000,0100F8F00C4F2000,nvdec,,2022-10-26 15:16:47,1 +4110,Devil Slayer - Raksasi - 01003C900EFF6000,01003C900EFF6000,status-playable,playable,2022-10-26 19:42:32,1 +4111,Disagaea 6: Defiance of Destiny Demo - 0100918014B02000,0100918014B02000,status-playable;demo,playable,2022-10-26 20:02:04,1 +4113,DreamWorks Spirit Lucky's Big Adventure - 0100236011B4C000,0100236011B4C000,status-playable,playable,2022-10-27 13:30:52,1 +4114,Dull Grey - 010068D0141F2000,010068D0141F2000,status-playable,playable,2022-10-27 13:40:38,1 +4115,Dunk Lords - 0100EC30140B6000,0100EC30140B6000,status-playable,playable,2024-06-26 0:07:26,3 +4116,Earth Defense Force: World Brothers - 0100298014030000,0100298014030000,status-playable;UE4,playable,2022-10-27 14:13:31,1 +4117,EQI - 01000FA0149B6000,01000FA0149B6000,status-playable;nvdec;UE4,playable,2022-10-27 16:42:32,1 +4118,Exodemon - 0100A82013976000,0100A82013976000,status-playable,playable,2022-10-27 20:17:52,1 +4119,Famicom Detective Club: The Girl Who Stands Behind - 0100D670126F6000,0100D670126F6000,status-playable;nvdec,playable,2022-10-27 20:41:40,1 +4120,Famicom Detective Club: The Missing Heir - 010033F0126F4000,010033F0126F4000,status-playable;nvdec,playable,2022-10-27 20:56:23,1 +4121,Fighting EX Layer Another Dash - 0100D02014048000,0100D02014048000,status-playable;online-broken;UE4,playable,2024-04-07 10:22:33,2 +4122,Fire: Ungh's Quest - 010025C014798000,010025C014798000,status-playable;nvdec,playable,2022-10-27 21:41:26,1 +4125,Haunted Dawn: The Zombie Apocalypse - 01009E6014F18000,01009E6014F18000,status-playable,playable,2022-10-28 12:31:51,1 +4126,Yomawari: The Long Night Collection - 010043D00BA3200,,Incomplete,,2022-10-29 10:23:17,6 +4128,Splatoon 3 - 0100C2500FC20000,0100C2500FC20000,status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11,38 +4129,Bayonetta 3 - 01004A4010FEA000,01004A4010FEA000,gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33,45 +4130,Instant Sports Tennis - 010031B0145B8000,010031B0145B8000,status-playable,playable,2022-10-28 16:42:17,1 +4131,Just Die Already - 0100AC600CF0A000,0100AC600CF0A000,status-playable;UE4,playable,2022-12-13 13:37:50,2 +4132,King of Seas Demo - 0100515014A94000,0100515014A94000,status-playable;nvdec;UE4,playable,2022-10-28 18:09:31,1 +4133,King of Seas - 01008D80148C8000,01008D80148C8000,status-playable;nvdec;UE4,playable,2022-10-28 18:29:41,1 +4134,Layers of Fear 2 - 01001730144DA000,01001730144DA000,status-playable;nvdec;UE4,playable,2022-10-28 18:49:52,1 +4135,Leisure Suit Larry - Wet Dreams Dry Twice - 010031A0135CA000,010031A0135CA000,status-playable,playable,2022-10-28 19:00:57,1 +4136,Life of Fly 2 - 010069A01506E000,010069A01506E000,slow;status-playable,playable,2022-10-28 19:26:52,1 +4137,Maneater - 010093D00CB22000,010093D00CB22000,status-playable;nvdec;UE4,playable,2024-05-21 16:11:57,3 +4138,Mighty Goose - 0100AD701344C000,0100AD701344C000,status-playable;nvdec,playable,2022-10-28 20:25:38,1 +4139,Missing Features 2D - 0100E3601495C000,0100E3601495C000,status-playable,playable,2022-10-28 20:52:54,1 +4140,Moorkuhn Kart 2 - 010045C00F274000,010045C00F274000,status-playable;online-broken,playable,2022-10-28 21:10:35,1 +4141,NINJA GAIDEN 3: Razor's Edge - 01002AF014F4C000,01002AF014F4C000,status-playable;nvdec,playable,2023-08-11 8:25:31,3 +4142,Nongunz: Doppelganger Edition - 0100542012884000,0100542012884000,status-playable,playable,2022-10-29 12:00:39,1 +4143,O---O - 01002E6014FC4000,01002E6014FC4000,status-playable,playable,2022-10-29 12:12:14,1 +4144,Off And On Again - 01006F5013202000,01006F5013202000,status-playable,playable,2022-10-29 19:46:26,3 +4145,Outbreak: Endless Nightmares - 0100A0D013464000,0100A0D013464000,status-playable,playable,2022-10-29 12:35:49,1 +4146,Picross S6 - 010025901432A000,010025901432A000,status-playable,playable,2022-10-29 17:52:19,1 +4147,Alfred Hitchcock - Vertigo - 0100DC7013F14000,0100DC7013F14000,,,2022-10-30 7:55:43,1 +4148,Port Royale 4 - 01007EF013CA0000,01007EF013CA0000,status-menus;crash;nvdec,menus,2022-10-30 14:34:06,1 +4149,Quantum Replica - 010045101288A000,010045101288A000,status-playable;nvdec;UE4,playable,2022-10-30 21:17:22,1 +4150,R-TYPE FINAL 2 - 0100F930136B6000,0100F930136B6000,slow;status-ingame;nvdec;UE4,ingame,2022-10-30 21:46:29,1 +4152,Retrograde Arena - 01000ED014A2C000,01000ED014A2C000,status-playable;online-broken,playable,2022-10-31 13:38:58,1 +4153,Rising Hell - 010020C012F48000,010020C012F48000,status-playable,playable,2022-10-31 13:54:02,1 +4154,Grand Theft Auto III - The Definitive Edition [0100C3C012718000],0100C3C012718000,,,2022-10-31 20:13:51,1 +4156,Grand Theft Auto: San Andreas - The Definitive Edition [010065A014024000],010065A014024000,,,2022-10-31 20:13:56,1 +4157,Hell Pie - 01000938017E5C000,01000938017E5C00,status-playable;nvdec;UE4,playable,2022-11-03 16:48:46,5 +4158,Zengeon - 0100057011E50000,0100057011E50000,services-horizon;status-boots;crash,boots,2024-04-29 15:43:07,2 +4159,Teenage Mutant Ninja Turtles: The Cowabunga Collection - 0100FDB0154E4000,0100FDB0154E4000,status-playable,playable,2024-01-22 19:39:04,2 +4160,Rolling Sky 2 - 0100579011B40000 ,0100579011B40000,status-playable,playable,2022-11-03 10:21:12,1 +4161,RWBY: Grimm Eclipse - 0100E21013908000,0100E21013908000,status-playable;online-broken,playable,2022-11-03 10:44:01,1 +4164,Shin Megami Tensei III Nocturne HD Remaster - 01003B0012DC2000,01003B0012DC2000,status-playable,playable,2022-11-03 22:53:27,1 +4165,BALDO THE GUARDIAN OWLS - 0100a75005e92000,0100a75005e92000,,,2022-11-04 6:36:18,1 +4166,Skate City - 0100134011E32000,0100134011E32000,status-playable,playable,2022-11-04 11:37:39,1 +4167,SnowRunner - 0100FBD13AB6000,,services;status-boots;crash,boots,2023-10-07 0:01:16,5 +4168,Spooky Chase - 010097C01336A000,010097C01336A000,status-playable,playable,2022-11-04 12:17:44,1 +4169,Strange Field Football - 01000A6013F86000,01000A6013F86000,status-playable,playable,2022-11-04 12:25:57,1 +4170,Subnautica Below Zero - 010014C011146000,010014C011146000,status-playable,playable,2022-12-23 14:15:13,1 +4171,Subnautica - 0100429011144000,0100429011144000,status-playable;vulkan-backend-bug,playable,2022-11-04 13:07:29,1 +4173,Pyramid Quest - 0100A4E017372000,0100A4E017372000,gpu;status-ingame,ingame,2023-08-16 21:14:52,3 +4174,Sonic Frontiers - 01004AD014BF0000,01004AD014BF0000,gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 9:18:53,52 +4177,Metro 2033 Redux - 0100D4900E82C000,0100D4900E82C000,gpu;status-ingame,ingame,2022-11-09 10:53:13,3 +4180,Tactics Ogre Reborn - 0100E12013C1A000,0100E12013C1A000,status-playable;vulkan-backend-bug,playable,2024-04-09 6:21:35,3 +4182,"Good Night, Knight - 01003AD0123A2000",01003AD0123A2000,status-nothing;crash,nothing,2023-07-30 23:38:13,2 +4183,Sumire - 01003D50126A4000,01003D50126A4000,status-playable,playable,2022-11-12 13:40:43,1 +4184,Sunblaze - 0100BFE014476000,0100BFE014476000,status-playable,playable,2022-11-12 13:59:23,1 +4185,Taiwan Monster Fruit : Prologue - 010028E013E0A000,010028E013E0A000,Incomplete,,2022-11-12 14:10:20,1 +4187,Tested on Humans: Escape Room - 01006F701507A000,01006F701507A000,status-playable,playable,2022-11-12 14:42:52,1 +4188,The Longing - 0100F3D0122C2000,0100F3D0122C2000,gpu;status-ingame,ingame,2022-11-12 15:00:58,1 +4189,Total Arcade Racing - 0100A64010D48000,0100A64010D48000,status-playable,playable,2022-11-12 15:12:48,1 +4190,Very Very Valet - 0100379013A62000,0100379013A62000,status-playable;nvdec,playable,2022-11-12 15:25:51,1 +4191,Persona 4 Arena ULTIMAX [010075A016A3A000),010075A016A3A000,,,2022-11-12 17:27:51,1 +4192,Piofiore: Episodio 1926 - 01002B20174EE000,01002B20174EE000,status-playable,playable,2022-11-23 18:36:05,2 +4193,Seven Pirates H - 0100D6F016676000,0100D6F016676000,status-playable,playable,2024-06-03 14:54:12,3 +4194,Paradigm Paradox - 0100DC70174E0000,0100DC70174E0000,status-playable;vulkan-backend-bug,playable,2022-12-03 22:28:13,3 +4195,Wanna Survive - 0100D67013910000,0100D67013910000,status-playable,playable,2022-11-12 21:15:43,1 +4196,Wardogs: Red's Return - 010056901285A000,010056901285A000,status-playable,playable,2022-11-13 15:29:01,1 +4197,Warhammer Age of Sigmar: Storm Ground - 010031201307A000,010031201307A000,status-playable;nvdec;online-broken;UE4,playable,2022-11-13 15:46:14,1 +4198,Wing of Darkness - 010035B012F2000,,status-playable;UE4,playable,2022-11-13 16:03:51,1 +4199,Ninja Gaiden Sigma - 0100E2F014F46000,0100E2F014F46000,status-playable;nvdec,playable,2022-11-13 16:27:02,1 +4200,Ninja Gaiden Sigma 2 - 0100696014FA000,,status-playable;nvdec,playable,2024-07-31 21:53:48,12 +4201,MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version - 010042501329E000,010042501329E000,status-playable;demo,playable,2022-11-13 22:20:26,1 +4202,112 Operator - 0100D82015774000,0100D82015774000,status-playable;nvdec,playable,2022-11-13 22:42:50,1 +4204,Aery - Calm Mind - 0100A801539000,,status-playable,playable,2022-11-14 14:26:58,1 +4205,Alex Kidd in Miracle World DX - 010025D01221A000,010025D01221A000,status-playable,playable,2022-11-14 15:01:34,1 +4209,Atari 50 The Anniversary Celebration - 010099801870E000,010099801870E000,slow;status-playable,playable,2022-11-14 19:42:10,4 +4210,FOOTBALL MANAGER 2023 TOUCH - 0100EDC01990E000,0100EDC01990E000,gpu;status-ingame,ingame,2023-08-01 3:40:53,15 +4212,ARIA CHRONICLE - 0100691013C46000,0100691013C46000,status-playable,playable,2022-11-16 13:50:55,1 +4216,B.ARK - 01009B901145C000,01009B901145C000,status-playable;nvdec,playable,2022-11-17 13:35:02,1 +4217,Pokémon Violet - 01008F6008C5E000,01008F6008C5E000,gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 2:51:48,39 +4218,Pokémon Scarlet - 0100A3D008C5C000,0100A3D008C5C000,gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29,36 +4219,Bear's Restaurant - 0100CE014A4E000,,status-playable,playable,2024-08-11 21:26:59,2 +4220,BeeFense BeeMastered - 010018F007786000,010018F007786000,status-playable,playable,2022-11-17 15:38:12,1 +4222,Oddworld: Soulstorm - 0100D210177C6000,0100D210177C6000,services-horizon;status-boots;crash,boots,2024-08-18 13:13:26,6 +4224,Aquarium Hololive All CG,,,,2022-11-19 5:12:23,1 +4225,Billion Road - 010057700FF7C000,010057700FF7C000,status-playable,playable,2022-11-19 15:57:43,1 +4226,No Man’s Sky - 0100853015E86000,0100853015E86000,gpu;status-ingame,ingame,2024-07-25 5:18:17,13 +4228,Lunistice - 0100C2E01254C000,0100C2E01254C000,,,2022-11-23 18:44:18,1 +4229,The Oregon Trail - 0100B080184BC000,0100B080184BC000,gpu;status-ingame,ingame,2022-11-25 16:11:49,12 +4232,Smurfs Kart - 01009790186FE000,01009790186FE000,status-playable,playable,2023-10-18 0:55:00,6 +4233,DYSMANTLE - 010008900BC5A000,010008900BC5A000,gpu;status-ingame,ingame,2024-07-15 16:24:12,2 +4234,Happy Animals Mini Golf - 010066C018E50000,010066C018E50000,gpu;status-ingame,ingame,2022-12-04 19:24:28,2 +4237,Pocket Pool - 010019F019168000,010019F019168000,,,2022-11-27 3:36:39,1 +4238,7 Days of Rose - 01002D3019654000,01002D3019654000,,,2022-11-27 20:46:16,1 +4239,Garfield Lasagna Party - 01003C401895E000,01003C401895E000,,,2022-11-27 21:21:09,1 +4240,Paper Bad - 01002A0019914000,01002A0019914000,,,2022-11-27 22:01:45,1 +4242,Ultra Kaiju Monster Rancher - 01008E0019388000,01008E0019388000,,,2022-11-28 2:37:06,1 +4244,The Legend of Heroes: Trails from Zero - 01001920156C2000,01001920156C2000,gpu;status-ingame;mac-bug,ingame,2024-09-14 21:41:41,5 +4249,Harvestella - 0100A280187BC000,0100A280187BC000,status-playable;UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 7:04:11,4 +4251,Ace Angler: Fishing Spirits - 01007C50132C8000,01007C50132C8000,status-menus;crash,menus,2023-03-03 3:21:39,2 +4255,WHITE DAY : A labyrinth named school - 010076601839C000,010076601839C000,,,2022-12-03 7:17:03,1 +4257,Bravery and Greed - 0100F60017D4E000,0100F60017D4E000,gpu;deadlock;status-boots,boots,2022-12-04 2:23:47,2 +4260,River City Girls 2 - 01002E80168F4000,01002E80168F4000,status-playable,playable,2022-12-07 0:46:27,1 +4262,SAMURAI MAIDEN - 01003CE018AF6000,01003CE018AF6000,,,2022-12-05 2:56:48,1 +4263,Front Mission 1st Remake - 0100F200178F4000,0100F200178F4000,status-playable,playable,2023-06-09 7:44:24,9 +4267,Cardfight!! Vanguard Dear Days - 0100097016B04000,0100097016B04000,,,2022-12-06 0:37:12,1 +4268,MOL SOCCER ONLINE Lite - 010034501756C000,010034501756C000,,,2022-12-06 0:41:58,1 +4269,Goonya Monster - 010026301785A000,010026301785A000,,,2022-12-06 0:46:24,1 +4273,Battle Spirits Connected Battlers - 01009120155CC000,01009120155CC000,,,2022-12-07 0:21:33,1 +4274,TABE-O-JA - 0100E330127FC000,0100E330127FC000,,,2022-12-07 0:26:47,1 +4276,Solomon Program - 01008A801370C000,01008A801370C000,,,2022-12-07 0:33:02,1 +4278,Dragon Quest Treasures - 0100217014266000,0100217014266000,gpu;status-ingame;UE4,ingame,2023-05-09 11:16:52,11 +4279,Sword of the Necromancer - 0100E4701355C000,0100E4701355C000,status-ingame;crash,ingame,2022-12-10 1:28:39,2 +4280,Dragon Prana - 01001C5019074000,01001C5019074000,,,2022-12-10 2:10:53,1 +4281,Burger Patrol - 010013D018E8A000,010013D018E8A000,,,2022-12-10 2:12:02,1 +4284,Witch On The Holy Night - 010012A017F18800,010012A017F18800,status-playable,playable,2023-03-06 23:28:11,3 +4285,Hakoniwa Ranch Sheep Village - 010059C017346000 ,010059C017346000,,,2022-12-13 3:04:03,1 +4286,KASIORI - 0100E75014D7A000,0100E75014D7A000,,,2022-12-13 3:05:00,1 +4287,CRISIS CORE –FINAL FANTASY VII– REUNION - 01004BC0166CC000,01004BC0166CC000,status-playable,playable,2022-12-19 15:53:59,3 +4288,Bitmaster - 010026E0141C8000,010026E0141C8000,status-playable,playable,2022-12-13 14:05:51,1 +4289,Black Book - 0100DD1014AB8000,0100DD1014AB8000,status-playable;nvdec,playable,2022-12-13 16:38:53,1 +4290,Carnivores: Dinosaur Hunt,,status-playable,playable,2022-12-14 18:46:06,1 +4297,Trivial Pursuit Live! 2 - 0100868013FFC000,0100868013FFC000,status-boots,boots,2022-12-19 0:04:33,6 +4300,Astrologaster - 0100B80010C48000,0100B80010C48000,cpu;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:31,3 +4303,Factorio - 01004200189F4000,01004200189F4000,deadlock;status-boots,boots,2024-06-11 19:26:16,8 +4305,The Punchuin - 01004F501962C000,01004F501962C000,,,2022-12-28 0:51:46,2 +4306,Adventure Academia The Fractured Continent - 01006E6018570000,01006E6018570000,,,2022-12-29 3:35:04,1 +4307,Illusion Garden Story ~Daiichi Sangyo Yuukarin~ - 01003FE0168EA000,01003FE0168EA000,,,2022-12-29 3:39:06,1 +4308,Popplings - 010063D019A70000,010063D019A70000,,,2022-12-29 3:42:21,1 +4309,Sports Story - 010025B0100D0000,010025B0100D0000,,,2022-12-29 3:45:54,1 +4310,Death Bite Shibito Magire - 01002EB01802A000,01002EB01802A000,,,2022-12-29 3:51:54,1 +4311,Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!! - 01002D60188DE000,01002D60188DE000,status-ingame;crash,ingame,2023-03-17 1:54:01,2 +4312,Asphalt 9 Legends - 01007B000C834800,01007B000C834800,,,2022-12-30 5:19:35,1 +4313,Arcade Archives TETRIS THE GRAND MASTER - 0100DFD016B7A000,0100DFD016B7A000,status-playable,playable,2024-06-23 1:50:29,3 +4314,Funny action Great adventure for good adults - 0100BB1018082000,0100BB1018082000,,,2023-01-01 3:13:21,1 +4315,Fairy Fencer F Refrain Chord - 010048C01774E000,010048C01774E000,,,2023-01-01 3:15:45,1 +4320,Needy Streamer Overload,,,,2023-01-01 23:24:14,1 +4321,Absolute Hero Remodeling Plan - 0100D7D015CC2000,0100D7D015CC2000,,,2023-01-02 3:42:59,1 +4322,Fourth God -Reunion- - 0100BF50131E6000,0100BF50131E6000,,,2023-01-02 3:45:28,1 +4323,Doll Princess of Marl Kingdom - 010078E0181D0000,010078E0181D0000,,,2023-01-02 3:49:45,1 +4324,Oshiritantei Pupupu Mirai no Meitantei Tojo! - 01000F7014504000,01000F7014504000,,,2023-01-02 3:51:59,1 +4325,Moshikashite Obake no Shatekiya for Nintendo Switch - 0100B580144F6000,0100B580144F6000,,,2023-01-02 3:55:10,1 +4326,Platinum Train-A trip through Japan - 0100B9400654E000,0100B9400654E000,,,2023-01-02 3:58:00,1 +4327,Deadly Eating Adventure Meshi - 01007B70146F6000,01007B70146F6000,,,2023-01-02 4:00:31,1 +4328,Gurimugurimoa OnceMore - 01003F5017760000,01003F5017760000,,,2023-01-02 4:03:49,1 +4329,Neko-Tomo - 0100FA00082BE000,0100FA00082BE000,,,2023-01-03 4:43:05,1 +4330,Wreckfest - 0100DC0012E48000,0100DC0012E48000,status-playable,playable,2023-02-12 16:13:00,2 +4331,VARIOUS DAYLIFE - 0100538017BAC000,0100538017BAC000,,,2023-01-03 13:41:46,1 +4332,WORTH LIFE - 0100D46014648000,0100D46014648000,,,2023-01-04 2:58:27,1 +4333,void* tRrLM2(); //Void Terrarium 2 - 010078D0175EE000,010078D0175EE000,status-playable,playable,2023-12-21 11:00:41,3 +4334,Witch's Garden - 010061501904E000,010061501904E000,gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 2:11:24,1 +4337,PUI PUI MOLCAR Let’s! MOLCAR PARTY! - 01004F6015612000,01004F6015612000,,,2023-01-05 23:05:00,1 +4339,Galleria Underground Labyrinth and the Witch’s Brigade - 01007010157B4000,01007010157B4000,,,2023-01-07 1:05:40,1 +4340,Simona's Requiem - 0100E8C019B36000,0100E8C019B36000,gpu;status-ingame,ingame,2023-02-21 18:29:19,2 +4342,Sonic Frontiers: Demo - 0100D0201A062000,0100D0201A062000,,,2023-01-07 14:50:19,1 +4345,Alphadia Neo - 010043101944A000,010043101944A000,,,2023-01-09 1:47:53,1 +4346,It’s Kunio-kun’s Three Kingdoms! - 0100056014DE0000,0100056014DE0000,,,2023-01-09 1:50:08,1 +4347,Neon White - 0100B9201406A000,0100B9201406A000,status-ingame;crash,ingame,2023-02-02 22:25:06,9 +4349,Typing Quest - 0100B7101475E000,0100B7101475E000,,,2023-01-10 3:23:00,1 +4350,Moorhuhn Jump and Run Traps and Treasures - 0100E3D014ABC000,0100E3D014ABC000,status-playable,playable,2024-03-08 15:10:02,2 +4351,Bandit Detective Buzzard - 01005DB0180B4000,01005DB0180B4000,,,2023-01-10 3:27:34,1 +4355,Curved Space - 0100CE5014026000,0100CE5014026000,status-playable,playable,2023-01-14 22:03:50,1 +4356,Destroy All Humans! - 01009E701356A000,01009E701356A000,gpu;status-ingame;nvdec;UE4,ingame,2023-01-14 22:23:53,1 +4357,Dininho Space Adventure - 010027E0158A6000,010027E0158A6000,status-playable,playable,2023-01-14 22:43:04,1 +4358,Vengeful Guardian: Moonrider - 01003A8018E60000,01003A8018E60000,deadlock;status-boots,boots,2024-03-17 23:35:37,11 +4359,Sumikko Gurashi Atsumare! Sumikko Town - 0100508013B26000,0100508013B26000,,,2023-01-16 4:42:55,1 +4360,Lone Ruin - 0100B6D016EE6000,0100B6D016EE6000,status-ingame;crash;nvdec,ingame,2023-01-17 6:41:19,3 +4363,Falcon Age - 0100C3F011B58000,0100C3F011B58000,,,2023-01-17 2:43:00,1 +4367,Persona 4 Golden - 010062B01525C000,010062B01525C000,status-playable,playable,2024-08-07 17:48:07,15 +4369,Persona 3 Portable - 0100DCD01525A000,0100DCD01525A000,,,2023-01-19 20:20:27,1 +4370,Fire Emblem: Engage - 0100A6301214E000,0100A6301214E000,status-playable;amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26,49 +4373,Sifu - 01007B5017A12000,01007B5017A12000,,,2023-01-20 19:58:54,5 +4374,Silver Nornir - 0100D1E018F26000,0100D1E018F26000,,,2023-01-21 4:25:06,1 +4375,Together - 010041C013C94000,010041C013C94000,,,2023-01-21 4:26:20,1 +4376,Party Party Time - 0100C6A019C84000,0100C6A019C84000,,,2023-01-21 4:27:40,1 +4379,Sumikko Gurashi Gakkou Seikatsu Hajimerun desu - 010070800D3E2000,010070800D3E2000,,,2023-01-22 2:47:34,1 +4380,Sumikko Gurashi Sugoroku every time in the corner - 0100713012BEC000,0100713012BEC000,,,2023-01-22 2:49:00,1 +4381,EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition - 01001C8016B4E000,01001C8016B4E000,gpu;status-ingame;crash,ingame,2024-06-10 23:33:05,26 +4382,Gesshizu Mori no Chiisana Nakama-tachi - 0100A0D011014000,0100A0D011014000,,,2023-01-23 3:56:43,1 +4383,Chickip Dancers Norinori Dance de Kokoro mo Odoru - 0100D85017B26000,0100D85017B26000,,,2023-01-23 3:56:47,1 +4384,Go Rally - 010055A0161F4000,010055A0161F4000,gpu;status-ingame,ingame,2023-08-16 21:18:23,5 +4385,Devil Kingdom - 01002F000E8F2000,01002F000E8F2000,status-playable,playable,2023-01-31 8:58:44,2 +4388,Cricket 22 - 0100387017100000,0100387017100000,status-boots;crash,boots,2023-10-18 8:01:57,2 +4389,サマータイムレンダ Another Horizon - 01005940182ec000,01005940182ec000,,,2023-01-28 2:15:25,1 +4390,Letters - a written adventure - 0100CE301678E800,0100CE301678E800,gpu;status-ingame,ingame,2023-02-21 20:12:38,2 +4391,Prinny Presents NIS Classics Volume 1 - 0100A6E01681C000,0100A6E01681C000,status-boots;crash;Needs Update,boots,2023-02-02 7:23:09,5 +4392,SpongeBob SquarePants The Cosmic Shake - 01009FB0172F4000,01009FB0172F4000,gpu;status-ingame;UE4,ingame,2023-08-01 19:29:53,3 +4393,THEATRHYTHM FINAL BAR LINE DEMO Version - 01004C5018BC4000,01004C5018BC4000,,,2023-02-01 16:59:55,1 +4395,"Blue Reflection: Second Light [USA, Europe] - 010071C013390000",010071C013390000,,,2023-02-02 2:44:04,1 +4396,牧場物語 Welcome!ワンダフルライフ - 0100936018EB4000,0100936018EB4000,status-ingame;crash,ingame,2023-04-25 19:43:52,6 +4397,Coromon - 010048D014322000,010048D014322000,,,2023-02-03 0:47:51,1 +4399,Exitman Deluxe - 0100648016520000,0100648016520000,,,2023-02-04 2:02:03,1 +4400,Life is Strange 2 - 0100FD101186C000,0100FD101186C000,status-playable;UE4,playable,2024-07-04 5:05:58,5 +4401,Fashion Police Squad,,Incomplete,,2023-02-05 12:36:50,2 +4402,Grindstone - 0100538012496000,0100538012496000,status-playable,playable,2023-02-08 15:54:06,2 +4403,Kemono Friends Picross - 01004B100BDA2000,01004B100BDA2000,status-playable,playable,2023-02-08 15:54:34,2 +4404,Picross Lord Of The Nazarick - 010012100E8DC000,010012100E8DC000,status-playable,playable,2023-02-08 15:54:56,2 +4406,Shovel Knight Pocket Dungeon - 01006B00126EC000,01006B00126EC000,,,2023-02-08 20:12:10,1 +4407,Game Boy - Nintendo Switch Online - 0100C62011050000,0100C62011050000,status-playable,playable,2023-03-21 12:43:48,2 +4408,ゲームボーイ Nintendo Switch Online - 0100395011044000,0100395011044000,,,2023-02-08 23:53:21,1 +4409,Game Boy Advance - Nintendo Switch Online - 010012F017576000,010012F017576000,status-playable,playable,2023-02-16 20:38:15,4 +4410,Kirby’s Return to Dream Land Deluxe - Demo - 010091D01A57E000,010091D01A57E000,status-playable;demo,playable,2023-02-18 17:21:55,3 +4411,Metroid Prime Remastered - 010012101468C000,010012101468C000,gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15,53 +4413,WBSC eBASEBALL: POWER PROS - 01007D9019626000,01007D9019626000,,,2023-02-09 2:56:56,1 +4414,Tricky Towers - 010015F005C8E000,010015F005C8E000,,,2023-02-09 14:58:15,1 +4415,Clunky Hero - [0100879019212000],0100879019212000,,,2023-02-10 7:41:34,1 +4416,Mercenaries Lament Requiem of the Silver Wolf - 0100E44019E4C000,0100E44019E4C000,,,2023-02-11 4:36:39,1 +4417,Pixel Cup Soccer Ultimate Edition - 0100E17019782000,0100E17019782000,,,2023-02-11 14:28:11,1 +4418,Sea of Stars Demo - 010036F0182C4000,010036F0182C4000,status-playable;demo,playable,2023-02-12 15:33:56,2 +4419,MistWorld the after - 010003801579A000,010003801579A000,,,2023-02-13 3:40:17,1 +4420,MistWorld the after 2 - 0100C50016CD6000,0100C50016CD6000,,,2023-02-13 3:40:23,1 +4421,Wonder Boy Anniversary Collection - 0100B49016FF0000,0100B49016FF0000,deadlock;status-nothing,nothing,2023-04-20 16:01:48,2 +4422,OddBallers - 010079A015976000,010079A015976000,,,2023-02-13 3:40:35,1 +4423,Game Doraemon Nobita’s Space War 2021 - 01000200128A4000,01000200128A4000,,,2023-02-14 2:52:57,1 +4424,Doraemon Nobita’s Brain Exercise Adventure - 0100E6F018D10000,0100E6F018D10000,,,2023-02-14 2:54:51,1 +4425,Makai Senki Disgaea 7 - 0100A78017BD6000,0100A78017BD6000,status-playable,playable,2023-10-05 0:22:18,3 +4427,Blanc - 010039501405E000,010039501405E000,gpu;slow;status-ingame,ingame,2023-02-22 14:00:13,3 +4428,Arcade Machine Gopher’s Revenge - 0100DCB019CAE000,0100DCB019CAE000,,,2023-02-15 21:48:46,1 +4429,Santa Claus Goblins Attack - 0100A0901A3E4000,0100A0901A3E4000,,,2023-02-15 21:48:50,1 +4430,Garden of Pets - 010075A01A312000,010075A01A312000,,,2023-02-15 21:48:52,1 +4431,THEATRHYTHM FINAL BAR LINE - 010024201834A000,010024201834A000,status-playable,playable,2023-02-19 19:58:57,5 +4432,Rob Riches - 010061501A2B6000,010061501A2B6000,,,2023-02-16 4:44:01,1 +4433,Cuddly Forest Friends - 01005980198D4000,01005980198D4000,,,2023-02-16 4:44:04,1 +4434,Dragon Quest X Awakening Five Races Offline - 0100E2E0152E4000,0100E2E0152E4000,status-playable;nvdec;UE4,playable,2024-08-20 10:04:24,4 +4435,Persona 5 Strikers Bonus Content - (01002F101340C000),01002F101340C000,,,2023-02-16 20:29:01,1 +4436,Let’s play duema! - 0100EFC0152E0000,0100EFC0152E0000,,,2023-02-18 3:09:55,1 +4437,Let’s play duema Duel Masters! 2022 - 010006C017354000,010006C017354000,,,2023-02-18 3:09:58,1 +4438,Heterogeneous Strongest King Encyclopedia Battle Coliseum - 0100BD00198AA000,0100BD00198AA000,,,2023-02-18 3:10:01,1 +4439,Hopping Girl Kohane EX - 0100D2B018F5C000,0100D2B018F5C000,,,2023-02-19 0:57:25,1 +4440,Earth Defense Force 2 for Nintendo Switch - 010082B013C8C000,010082B013C8C000,,,2023-02-19 1:13:14,1 +4441,Earth Defense Force 3 for Nintendo Switch - 0100E87013C98000,0100E87013C98000,,,2023-02-19 1:13:21,1 +4442,PAC-MAN WORLD Re-PAC - 0100D4401565E000,0100D4401565E000,,,2023-02-19 18:49:11,1 +4443,Eastward - 010071B00F63A000,010071B00F63A000,,,2023-02-19 19:50:36,1 +4444,Arcade Archives THE NEWZEALAND STORY - 010045D019FF0000,010045D019FF0000,,,2023-02-20 1:59:58,1 +4445,Foxy’s Coin Hunt - 0100EE401A378000,0100EE401A378000,,,2023-02-20 2:00:00,1 +4446,Samurai Warrior - 0100B6501A360000,0100B6501A360000,status-playable,playable,2023-02-27 18:42:38,2 +4447,NCL USA Bowl - 010004801A450000,010004801A450000,,,2023-02-20 2:00:05,1 +4448,Hentai RPG Isekai Journey - 010025A019C02000,010025A019C02000,,,2023-02-20 2:00:08,1 +4449,Dadish - 0100B8B013310000,0100B8B013310000,,,2023-02-20 23:19:02,1 +4450,Dadish 2 - 0100BB70140BA000,0100BB70140BA000,,,2023-02-20 23:28:43,1 +4451,Dadish 3 - 01001010181AA000,01001010181AA000,,,2023-02-20 23:38:55,1 +4453,Digimon World: Next Order - 0100F00014254000,0100F00014254000,status-playable,playable,2023-05-09 20:41:06,9 +4454,PAW Patrol The Movie: Adventure City Calls - 0100FFE013628000,0100FFE013628000,,,2023-02-22 14:09:11,1 +4455,PAW Patrol: Grand Prix - 0100360016800000,0100360016800000,gpu;status-ingame,ingame,2024-05-03 16:16:11,2 +4456,Gigantosaurus Dino Kart - 01001890167FE000,01001890167FE000,,,2023-02-23 3:15:01,1 +4457,Rise Of Fox Hero - 0100A27018ED0000,0100A27018ED0000,,,2023-02-23 3:15:04,1 +4458,MEGALAN 11 - 0100C7501360C000,0100C7501360C000,,,2023-02-23 3:15:06,1 +4459,Rooftop Renegade - 0100644012F0C000,0100644012F0C000,,,2023-02-23 3:15:10,1 +4460,Kirby’s Return to Dream Land Deluxe - 01006B601380E000,01006B601380E000,status-playable,playable,2024-05-16 19:58:04,14 +4461,Snow Bros. Special - 0100bfa01787c000,0100bfa01787c000,,,2023-02-24 2:25:54,1 +4462,Toree 2 - 0100C7301658C000,0100C7301658C000,,,2023-02-24 3:15:04,1 +4463,Red Hands - 2 Player Games - 01003B2019424000,01003B2019424000,,,2023-02-24 3:53:12,1 +4464,nPaint - 0100917019FD6000,0100917019FD6000,,,2023-02-24 3:53:18,1 +4465,Octopath Traveler II - 0100A3501946E000,0100A3501946E000,gpu;status-ingame;amd-vendor-bug,ingame,2024-09-22 11:39:20,29 +4466,Planet Cube Edge - 01007EA019CFC000,01007EA019CFC000,status-playable,playable,2023-03-22 17:10:12,2 +4467,Rumble Sus - 0100CE201946A000,0100CE201946A000,,,2023-02-25 2:19:01,1 +4468,Easy Come Easy Golf - 0100ECF01800C000,0100ECF01800C000,status-playable;online-broken;regression,playable,2024-04-04 16:15:00,5 +4470,Piano Learn and Play - 010038501A6B8000,010038501A6B8000,,,2023-02-26 2:57:12,1 +4471,nOS new Operating System - 01008AE019614000,01008AE019614000,status-playable,playable,2023-03-22 16:49:08,2 +4472,XanChuchamel - 0100D970191B8000,0100D970191B8000,,,2023-02-26 2:57:19,1 +4477,Rune Factory 3 Special - 01001EF017BE6000,01001EF017BE6000,,,2023-03-02 5:34:40,1 +4478,Light Fingers - 0100A0E005E42000,0100A0E005E42000,,,2023-03-03 3:04:09,1 +4479,Disaster Detective Saiga An Indescribable Mystery - 01005BF01A3EC000,01005BF01A3EC000,,,2023-03-04 0:34:26,1 +4480,Touhou Gouyoku Ibun ~ Sunken Fossil World. - 0100031018CFE000,0100031018CFE000,,,2023-03-04 0:34:29,1 +4485,Ninja Box - 0100272009E32000,0100272009E32000,,,2023-03-06 0:31:44,1 +4487,Rubber Bandits - 010060801843A000,010060801843A000,,,2023-03-07 22:26:57,1 +4489,Arcade Archives DON DOKO DON - 0100B6201A2AA000,0100B6201A2AA000,,,2023-03-14 0:13:52,1 +4490,Knights and Guns - 010060A011ECC000,010060A011ECC000,,,2023-03-14 0:13:54,1 +4491,Process of Elimination Demo - 01007F6019E2A000,01007F6019E2A000,,,2023-03-14 0:13:57,1 +4492,DREDGE [ CHAPTER ONE ] - 01000AB0191DA000,01000AB0191DA000,,,2023-03-14 1:49:12,1 +4493,Bayonetta Origins Cereza and the Lost Demon Demo - 010002801A3FA000,010002801A3FA000,gpu;status-ingame;demo,ingame,2024-02-17 6:06:28,4 +4494,Yo-Kai Watch 4++ - 010086C00AF7C000,010086C00AF7C000,status-playable,playable,2024-06-18 20:21:44,13 +4495,Tama Cannon - 0100D8601A848000,0100D8601A848000,,,2023-03-15 1:08:05,1 +4496,The Smile Alchemist - 0100D1C01944E000,0100D1C01944E000,,,2023-03-15 1:08:08,1 +4497,Caverns of Mars Recharged - 01009B201A10E000,01009B201A10E000,,,2023-03-15 1:08:12,1 +4498,Roniu's Tale - 010007E0193A2000,010007E0193A2000,,,2023-03-15 1:08:18,1 +4499,Mythology Waifus Mahjong - 0100C7101A5BE000,0100C7101A5BE000,,,2023-03-15 1:08:23,1 +4500,emoji Kart Racer - 0100AC601A26A000,0100AC601A26A000,,,2023-03-17 1:53:50,1 +4501,Self gunsbase - 01006BB015486000,01006BB015486000,,,2023-03-17 1:53:53,1 +4502,Melon Journey - 0100F68019636000,0100F68019636000,status-playable,playable,2023-04-23 21:20:01,3 +4503,Bayonetta Origins: Cereza and the Lost Demon - 0100CF5010FEC000,0100CF5010FEC000,gpu;status-ingame,ingame,2024-02-27 1:39:49,20 +4504,Uta no prince-sama All star After Secret - 01008030149FE000,01008030149FE000,,,2023-03-18 16:08:20,1 +4505,Hampuzz - 0100D85016326000,0100D85016326000,,,2023-03-19 0:39:40,1 +4506,Gotta Protectors Cart of Darkness - 01007570160E2000,01007570160E2000,,,2023-03-19 0:39:43,1 +4507,Game Type DX - 0100433017DAC000,0100433017DAC000,,,2023-03-20 0:29:23,1 +4508,Ray'z Arcade Chronology - 010088D018302000,010088D018302000,,,2023-03-20 0:29:26,1 +4509,Ruku's HeartBalloon - 01004570192D8000,01004570192D8000,,,2023-03-20 0:29:30,1 +4510,Megaton Musashi - 01001AD00E41E000,01001AD00E41E000,,,2023-03-21 1:11:33,1 +4511,Megaton Musashi X - 0100571018A70000,0100571018A70000,,,2023-03-21 1:11:39,1 +4513,In the Mood - 0100281017990000,0100281017990000,,,2023-03-22 0:53:54,1 +4514,Sixtar Gate STARTRAIL - 0100D29019BE4000,0100D29019BE4000,,,2023-03-22 0:53:57,1 +4515,Spelunker HD Deluxe - 010095701381A000,010095701381A000,,,2023-03-22 0:54:02,1 +4518,Pizza Tycoon - 0100A6301788E000,0100A6301788E000,,,2023-03-23 2:00:04,1 +4520,Cubic - 010081F00EAB8000,010081F00EAB8000,,,2023-03-23 2:00:12,1 +4523,Sherlock Purr - 010019F01AD78000,010019F01AD78000,,,2023-03-24 2:21:34,1 +4524,Blocky Farm - 0100E21016A68000,0100E21016A68000,,,2023-03-24 2:21:40,1 +4525,SD Shin Kamen Rider Ranbu [ SD シン・仮面ライダー 乱舞 ] - 0100CD40192AC000,0100CD40192AC000,,,2023-03-24 23:07:40,3 +4526,Peppa Pig: World Adventures - 0100FF1018E00000,0100FF1018E00000,Incomplete,,2023-03-25 7:46:56,3 +4528,Remnant: From the Ashes - 010010F01418E000,010010F01418E000,,,2023-03-26 20:30:16,2 +4529,Titanium Hound - 010010B0195EE000,010010B0195EE000,,,2023-03-26 19:06:35,1 +4530,MLB® The Show™ 23 - 0100913019170000,0100913019170000,gpu;status-ingame,ingame,2024-07-26 0:56:50,9 +4531,Grim Guardians Demon Purge - 0100B5301A180000,0100B5301A180000,,,2023-03-29 2:03:41,1 +4535,Blade Assault - 0100EA1018A2E000,0100EA1018A2E000,audio;status-nothing,nothing,2024-04-29 14:32:50,2 +4537,Bubble Puzzler - 0100FB201A21E000,0100FB201A21E000,,,2023-04-03 1:55:12,1 +4538,Tricky Thief - 0100F490198B8000,0100F490198B8000,,,2023-04-03 1:56:44,1 +4539,Scramballed - 0100106016602000,0100106016602000,,,2023-04-03 1:58:08,1 +4540,SWORD ART ONLINE Alicization Lycoris - 0100C6C01225A000,0100C6C01225A000,,,2023-04-03 2:03:00,1 +4542,Alice Gear Aegis CS Concerto of Simulatrix - 0100EEA0184C6000,0100EEA0184C6000,,,2023-04-05 1:40:02,1 +4543,Curse of the Sea Rats - 0100B970138FA000,0100B970138FA000,,,2023-04-08 15:56:01,1 +4544,THEATRHYTHM FINAL BAR LINE - 010081B01777C000,010081B01777C000,status-ingame;Incomplete,ingame,2024-08-05 14:24:55,6 +4545,Assault Suits Valken DECLASSIFIED - 0100FBC019042000,0100FBC019042000,,,2023-04-11 1:05:19,1 +4546,Xiaomei and the Flame Dragons Fist - 010072601922C000,010072601922C000,,,2023-04-11 1:06:46,1 +4547,Loop - 0100C88019092000,0100C88019092000,,,2023-04-11 1:08:03,1 +4548,Volley Pals - 01003A301A29E000,01003A301A29E000,,,2023-04-12 1:37:14,1 +4549,Catgotchi Virtual Pet - 0100CCF01A884000,0100CCF01A884000,,,2023-04-12 1:37:24,1 +4551,Pizza Tower - 05000FD261232000,05000FD261232000,status-ingame;crash,ingame,2024-09-16 0:21:56,6 +4552,Megaman Battle Network Legacy Collection Vol 1 - 010038E016264000,010038E016264000,status-playable,playable,2023-04-25 3:55:57,2 +4554,Process of Elimination - 01005CC018A32000,01005CC018A32000,,,2023-04-17 0:46:22,1 +4555,Detective Boys and the Strange Karakuri Mansion on the Hill [ 少年探偵団と丘の上の奇妙なカラクリ屋敷 ] - 0100F0801A5E8000,0100F0801A5E8000,,,2023-04-17 0:49:26,1 +4556,Dokapon Kingdom Connect [ ドカポンキングダムコネクト ] - 0100AC4018552000,0100AC4018552000,,,2023-04-17 0:53:37,1 +4557,Pixel Game Maker Series Tentacled Terrors Tyrannize Terra - 010040A01AABE000,010040A01AABE000,,,2023-04-18 2:29:14,1 +4558,Ultra Pixel Survive - 0100472019812000,0100472019812000,,,2023-04-18 2:29:20,1 +4559,PIANOFORTE - 0100D6D016F06000,0100D6D016F06000,,,2023-04-18 2:29:25,1 +4560,NASCAR Rivals - 0100545016D5E000,0100545016D5E000,status-ingame;crash;Incomplete,ingame,2023-04-21 1:17:47,4 +4561,Minecraft Legends - 01007C6012CC8000,01007C6012CC8000,gpu;status-ingame;crash,ingame,2024-03-04 0:32:24,9 +4564,Touhou Fan-made Virtual Autography - 0100196016944000,0100196016944000,,,2023-04-21 3:59:47,1 +4565,FINAL FANTASY I - 01000EA014150000,01000EA014150000,status-nothing;crash,nothing,2024-09-05 20:55:30,23 +4566,FINAL FANTASY II - 01006B7014156000,01006B7014156000,status-nothing;crash,nothing,2024-04-13 19:18:04,9 +4567,FINAL FANTASY III - 01002E2014158000,01002E2014158000,,,2023-04-21 11:50:01,1 +4569,FINAL FANTASY V - 0100AA201415C000,0100AA201415C000,status-playable,playable,2023-04-26 1:11:55,2 +4570,FINAL FANTASY VI - 0100AA001415E000,0100AA001415E000,,,2023-04-21 13:08:30,1 +4571,Advance Wars 1+2: Re-Boot Camp - 0100300012F2A000,0100300012F2A000,status-playable,playable,2024-01-30 18:19:44,4 +4572,Five Nights At Freddy’s Security Breach - 01009060193C4000,01009060193C4000,gpu;status-ingame;crash;mac-bug,ingame,2023-04-23 22:33:28,3 +4573,BUCCANYAR - 0100942019418000,0100942019418000,,,2023-04-23 0:59:51,1 +4574,BraveDungeon - The Meaning of Justice - 010068A00DAFC000,010068A00DAFC000,,,2023-04-23 13:34:05,2 +4575,Gemini - 010045300BE9A000,010045300BE9A000,,,2023-04-24 1:31:41,1 +4576,LOST EPIC - 010098F019A64000,010098F019A64000,,,2023-04-24 1:31:46,1 +4577,AKIBA'S TRIP2 Director's Cut - 0100FBD01884C000,0100FBD01884C000,,,2023-04-24 1:31:48,1 +4579,Afterimage - 010095E01A12A000,010095E01A12A000,,,2023-04-27 21:39:08,1 +4580,Fortress S - 010053C017D40000,010053C017D40000,,,2023-04-28 1:57:34,1 +4581,The Mageseeker: A League of Legends Story™ 0100375019B2E000,0100375019B2E000,,,2023-04-29 14:01:15,2 +4582,Cult of the Lamb - 01002E7016C46000,01002E7016C46000,,,2023-04-29 6:22:56,1 +4583,Disney SpeedStorm - 0100F0401435E000,0100F0401435E000,services;status-boots,boots,2023-11-27 2:15:32,4 +4584,The Outbound Ghost - 01000BC01801A000,01000BC01801A000,status-nothing,nothing,2024-03-02 17:10:58,2 +4586,Blaze Union Story to Reach the Future Remaster [ ブレイズ・ユニオン ] - 01003B001A81E000,01003B001A81E000,,,2023-05-02 2:03:16,1 +4587,Sakura Neko Calculator - 010029701AAD2000,010029701AAD2000,,,2023-05-02 6:16:04,1 +4593,Bramble The Mountain King - 0100E87017D0E000,0100E87017D0E000,services-horizon;status-playable,playable,2024-03-06 9:32:17,4 +4598,The Legend of Zelda: Tears of the Kingdom - 0100F2C0115B6000,0100F2C0115B6000,gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30,155 +4603,Magical Drop VI - 0100B4D01A3A4000,0100B4D01A3A4000,,,2023-05-13 2:27:38,1 +4604,Yahari ge-mu demo ore no seishun rabukome hamachigatteiru. kan [ やはりゲームでも俺の青春ラブコメはまちがっている。完 ] - 010066801A138000,010066801A138000,,,2023-05-13 2:27:49,1 +4608,Mega Man Battle Network Legacy Collection Vol. 2 - 0100734016266000,0100734016266000,status-playable,playable,2023-08-03 18:04:32,4 +4615,Numolition - 010043C019088000,010043C019088000,,,2023-05-17 2:29:23,1 +4616,Vibitter for Nintendo Switch [ ビビッター ] - 0100D2A01855C000,0100D2A01855C000,,,2023-05-17 2:29:31,1 +4620,LEGO 2K Drive - 0100739018020000,0100739018020000,gpu;status-ingame;ldn-works,ingame,2024-04-09 2:05:12,15 +4622,Ys Memoire : The Oath in Felghana [ イース・メモワール -フェルガナの誓い- ] - 010070D01A192000,010070D01A192000,,,2023-05-22 1:12:30,1 +4623,Love on Leave - 0100E3701A870000,0100E3701A870000,,,2023-05-22 1:37:22,1 +4625,Puzzle Bobble Everybubble! - 010079E01A1E0000,010079E01A1E0000,audio;status-playable;ldn-works,playable,2023-06-10 3:53:40,4 +4627,Chasm: The Rift - 010034301A556000,010034301A556000,gpu;status-ingame,ingame,2024-04-29 19:02:48,2 +4631,Speed Crew Demo - 01005C001B696000,01005C001B696000,,,2023-06-04 0:18:22,1 +4632,Dr Fetus Mean Meat Machine Demo - 01001DA01B7C4000,01001DA01B7C4000,,,2023-06-04 0:18:30,1 +4634,Bubble Monsters - 0100FF801B87C000,0100FF801B87C000,,,2023-06-05 2:15:43,1 +4635,Puzzle Bobble / Bust-a-Move ( 16-Bit Console Version ) - 0100AFF019F3C000,0100AFF019F3C000,,,2023-06-05 2:15:53,1 +4636,Just Dance 2023 - 0100BEE017FC0000,0100BEE017FC0000,status-nothing,nothing,2023-06-05 16:44:54,1 +4638,We Love Katamari REROLL+ Royal Reverie - 010089D018D18000,010089D018D18000,,,2023-06-07 7:33:49,1 +4640,Loop8: Summer of Gods - 0100051018E4C000,0100051018E4C000,,,2023-06-10 17:09:56,1 +4641,Hatsune Miku - The Planet Of Wonder And Fragments Of Wishes - 010030301ABC2000,010030301ABC2000,,,2023-06-12 2:15:31,1 +4642,Speed Crew - 0100C1201A558000,0100C1201A558000,,,2023-06-12 2:15:35,1 +4644,Nocturnal - 01009C2019510000,01009C2019510000,,,2023-06-12 16:24:50,2 +4645,Harmony: The Fall of Reverie - 0100A65017D68000,0100A65017D68000,,,2023-06-13 22:37:51,1 +4647,Cave of Past Sorrows - 0100336019D36000,0100336019D36000,,,2023-06-18 1:42:19,1 +4648,BIRDIE WING -Golf Girls Story- - 01005B2017D92000,01005B2017D92000,,,2023-06-18 1:42:25,1 +4649,Dogotchi Virtual Pet - 0100BBD01A886000,0100BBD01A886000,,,2023-06-18 1:42:31,1 +4650,010036F018AC8000,010036F018AC8000,,,2023-06-18 13:11:56,1 +4653,Pikmin 1 - 0100AA80194B0000,0100AA80194B0000,audio;status-ingame,ingame,2024-05-28 18:56:11,17 +4654,Pikmin 2 - 0100D680194B2000,0100D680194B2000,gpu;status-ingame,ingame,2023-07-31 8:53:41,3 +4655,Ghost Trick Phantom Detective Demo - 010026C0184D4000,010026C0184D4000,,,2023-06-23 1:29:44,1 +4656,Dr Fetus' Mean Meat Machine - 01006C301B7C2000,01006C301B7C2000,,,2023-06-23 1:29:52,1 +4657,FIFA 22 Legacy Edition - 0100216014472000,0100216014472000,gpu;status-ingame,ingame,2024-03-02 14:13:48,2 +4658,Pretty Princess Magical Garden Island - 01001CA019DA2000,01001CA019DA2000,,,2023-06-26 2:43:04,1 +4659,Pool Together - 01009DB01BA16000,01009DB01BA16000,,,2023-06-26 2:43:13,1 +4660,Kizuna AI - Touch the Beat! - 0100BF2019B98000,0100BF2019B98000,,,2023-06-26 2:43:18,1 +4661,Convenience Stories - 0100DF801A092000,0100DF801A092000,,,2023-06-26 10:58:37,1 +4662,Pikmin 4 Demo - 0100E0B019974000,0100E0B019974000,gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08,10 +4663,超探偵事件簿 レインコード (Master Detective Archives: Rain Code) - 0100F4401940A000,0100F4401940A000,status-ingame;crash,ingame,2024-02-12 20:58:31,9 +4665,Everybody 1-2-Switch! - 01006F900BF8E000,01006F900BF8E000,services;deadlock;status-nothing,nothing,2023-07-01 5:52:55,2 +4666,AEW Fight Forever - 0100BD10190C0000,0100BD10190C0000,,,2023-06-30 22:09:10,1 +4668,Master Detective Archives: Rain Code - 01004800197F0000,01004800197F0000,gpu;status-ingame,ingame,2024-04-19 20:11:09,22 +4673,The Lara Croft Collection - 010079C017F5E000,010079C017F5E000,services-horizon;deadlock;status-nothing,nothing,2024-07-12 22:45:51,12 +4675,Ghost Trick Phantom Detective - 010029B018432000,010029B018432000,status-playable,playable,2023-08-23 14:50:12,4 +4680,Sentimental Death Loop - 0100FFA01ACA8000,0100FFA01ACA8000,,,2023-07-10 3:23:08,1 +4681,The Settlers: New Allies - 0100F3200E7CA000,0100F3200E7CA000,deadlock;status-nothing,nothing,2023-10-25 0:18:05,4 +4683,Manic Mechanics - 010095A01550E000,010095A01550E000,,,2023-07-17 2:07:32,1 +4684,Crymachina Trial Edition ( Demo ) [ クライマキナ ] - 01000CC01C108000,01000CC01C108000,status-playable;demo,playable,2023-08-06 5:33:21,2 +4686,Xicatrice [ シカトリス ] - 0100EB601A932000,0100EB601A932000,,,2023-07-18 2:18:35,1 +4687,Trouble Witches Final! Episode 01: Daughters of Amalgam - 0100D06018DCA000,0100D06018DCA000,status-playable,playable,2024-04-08 15:08:11,2 +4688,The Quintessential Quintuplets: Gotopazu Story [ 五等分の花嫁 ごとぱずストーリー ] - 0100137019E9C000,0100137019E9C000,,,2023-07-18 2:18:50,1 +4689,Pinball FX - 0100DA70186D4000,0100DA70186D4000,status-playable,playable,2024-05-03 17:09:11,1 +4690,Moving Out 2 Training Day ( Demo ) - 010049E01B034000,010049E01B034000,,,2023-07-19 0:37:57,1 +4691,Cold Silence - 010035B01706E000,010035B01706E000,cpu;status-nothing;crash,nothing,2024-07-11 17:06:14,2 +4692,Demons of Asteborg - 0100B92015538000,0100B92015538000,,,2023-07-20 17:03:06,1 +4693,Pikmin 4 - 0100B7C00933A000,0100B7C00933A000,gpu;status-ingame;crash;UE4,ingame,2024-08-26 3:39:08,18 +4694,Grizzland - 010091300FFA0000,010091300FFA0000,gpu;status-ingame,ingame,2024-07-11 16:28:34,2 +4698,Disney Illusion Island,,,,2023-07-29 9:20:56,2 +4700,Double Dragon Gaiden: Rise of The Dragons - 010010401BC1A000,010010401BC1A000,,,2023-08-01 5:17:28,1 +4701,CRYSTAR -クライスタ- 0100E7B016778800,0100E7B016778800,,,2023-08-02 11:54:22,1 +4702,Orebody: Binders Tale - 010055A0189B8000,010055A0189B8000,,,2023-08-03 18:50:10,1 +4703,Ginnung - 01004B1019C7E000,01004B1019C7E000,,,2023-08-03 19:19:00,1 +4704,Legends of Amberland: The Forgotten Crown - 01007170100AA000,01007170100AA000,,,2023-08-03 22:18:17,1 +4705,Egglien - 0100E29019F56000,0100E29019F56000,,,2023-08-03 22:48:04,1 +4707,Dolmenjord - Viking Islands - 010012201B998000,010012201B998000,,,2023-08-05 20:55:28,1 +4708,The Knight & the Dragon - 010031B00DB34000,010031B00DB34000,gpu;status-ingame,ingame,2023-08-14 10:31:43,3 +4709,Cookies! Theory of Super Evolution - ,,,,2023-08-06 0:21:28,1 +4711,Jetboy - 010039C018168000,010039C018168000,,,2023-08-07 17:25:10,1 +4712,Townscaper - 01001260143FC000,01001260143FC000,,,2023-08-07 18:24:29,1 +4713,The Deer God - 01000B6007A3C000,01000B6007A3C000,,,2023-08-07 19:48:55,1 +4714,6 Souls - 0100421016BF2000,0100421016BF2000,,,2023-08-07 21:17:43,1 +4715,Brotato - 01002EF01A316000,01002EF01A316000,,,2023-08-10 14:57:25,1 +4716,超次元ゲイム ネプテューヌ GameMaker R:Evolution - 010064801a01c000,010064801a01c000,status-nothing;crash,nothing,2023-10-30 22:37:40,2 +4718,Quake II - 010048F0195E8000,010048F0195E8000,status-playable,playable,2023-08-15 3:42:14,2 +4721,Red Dead Redemption - 01007820196A6000,01007820196A6000,status-playable;amd-vendor-bug,playable,2024-09-13 13:26:13,42 +4722,Samba de Amigo : Party Central Demo - 01007EF01C0D2000,01007EF01C0D2000,,,2023-08-18 4:00:43,1 +4723,Bomb Rush Cyberfunk - 0100317014B7C000,0100317014B7C000,status-playable,playable,2023-09-28 19:51:57,3 +4724,Jack Jeanne - 010036D01937E000,010036D01937E000,,,2023-08-21 5:58:21,1 +4725,Bright Memory: Infinite Gold Edition - 01001A9018560000,01001A9018560000,,,2023-08-22 22:46:26,1 +4726,NBA 2K23 - 0100ACA017E4E800,0100ACA017E4E800,status-boots,boots,2023-10-10 23:07:14,3 +4727,Marble It Up! Ultra - 0100C18016896000,0100C18016896000,,,2023-08-30 20:14:21,2 +4728,Words of Wisdom - 0100B7F01BC9A000,0100B7F01BC9A000,,,2023-09-02 19:05:19,1 +4729,Koa and the Five Pirates of Mara - 0100C57019BA2000,0100C57019BA2000,gpu;status-ingame,ingame,2024-07-11 16:14:44,2 +4731,Little Orpheus stuck at 2 level,,,,2023-09-05 12:09:08,1 +4732,Tiny Thor - 010002401AE94000,010002401AE94000,gpu;status-ingame,ingame,2024-07-26 8:37:35,6 +4733,Radirgy Swag - 01000B900EEF4000,01000B900EEF4000,,,2023-09-06 23:00:39,1 +4735,Sea of Stars - 01008C0016544000,01008C0016544000,status-playable,playable,2024-03-15 20:27:12,9 +4736,NBA 2K24 - 010006501A8D8000,010006501A8D8000,cpu;gpu;status-boots,boots,2024-08-11 18:23:08,6 +4737,Rune Factory 3 Special - 010081C0191D8000,010081C0191D8000,status-playable,playable,2023-10-15 8:32:49,2 +4739,Baten Kaitos I & II HD Remaster (Japan) - 0100F28018CA4000,0100F28018CA4000,services;status-boots;Needs Update,boots,2023-10-24 23:11:54,7 +4740,F-ZERO 99 - 0100CCF019C8C000,0100CCF019C8C000,,,2023-09-14 16:43:01,1 +4743,Horizon Chase 2 - 0100001019F6E000,0100001019F6E000,deadlock;slow;status-ingame;crash;UE4,ingame,2024-08-19 4:24:06,11 +4744,Mortal Kombat 1 - 01006560184E6000,01006560184E6000,gpu;status-ingame,ingame,2024-09-04 15:45:47,18 +4745,Baten Kaitos I & II HD Remaster (Europe/USA) - 0100C07018CA6000,0100C07018CA6000,services;status-boots;Needs Update,boots,2023-10-01 0:44:32,9 +4746,Legend of Mana 01003570130E2000,01003570130E2000,,,2023-09-17 4:07:26,1 +4747,TUNIC 0100DA801624E000,0100DA801624E000,,,2023-09-17 4:28:22,1 +4748,SUPER BOMBERMAN R 2 - 0100B87017D94000,0100B87017D94000,deadlock;status-boots,boots,2023-09-29 13:19:51,2 +4749,Fae Farm - 010073F0189B6000 ,010073F0189B6000,status-playable,playable,2024-08-25 15:12:12,3 +4750,demon skin - 01006fe0146ec000,01006fe0146ec000,,,2023-09-18 8:36:18,1 +4751,Fatal Frame: Mask of the Lunar Eclipse - 0100DAE019110000,0100DAE019110000,status-playable;Incomplete,playable,2024-04-11 6:01:30,3 +4752,Winter Games 2023 - 0100A4A015FF0000,0100A4A015FF0000,deadlock;status-menus,menus,2023-11-07 20:47:36,2 +4753,EA Sports FC 24 - 0100BDB01A0E6000,0100BDB01A0E6000,status-boots,boots,2023-10-04 18:32:59,20 +4755,Cassette Beasts - 010066F01A0E0000,010066F01A0E0000,status-playable,playable,2024-07-22 20:38:43,8 +4756,COCOON - 01002E700C366000,01002E700C366000,gpu;status-ingame,ingame,2024-03-06 11:33:08,11 +4758,Detective Pikachu Returns - 010007500F27C000,010007500F27C000,status-playable,playable,2023-10-07 10:24:59,2 +4761,DeepOne - 0100961011BE6000,0100961011BE6000,services-horizon;status-nothing;Needs Update,nothing,2024-01-18 15:01:05,6 +4763,Sonic Superstars,,,,2023-10-13 18:33:19,1 +4765,Disco Elysium - 01006C5015E84000,01006C5015E84000,Incomplete,,2023-10-14 13:53:12,3 +4773,Sonic Superstars - 01008F701C074000,01008F701C074000,gpu;status-ingame;nvdec,ingame,2023-10-28 17:48:07,16 +4774,Sonic Superstars Digital Art Book with Mini Digital Soundtrack - 010088801C150000,010088801C150000,status-playable,playable,2024-08-20 13:26:56,2 +4776,Super Mario Bros. Wonder - 010015100B514000,010015100B514000,status-playable;amd-vendor-bug,playable,2024-09-06 13:21:21,36 +4781,Game Incompatibility - Super Marios Bros Wonder,,,,2023-10-21 19:09:02,2 +4786,Project Blue - 0100FCD0193A0000,0100FCD0193A0000,,,2023-10-24 15:55:09,2 +4787,Rear Sekai [ リアセカイ ] - 0100C3B01A5DD002,0100C3B01A5DD002,,,2023-10-24 1:55:18,1 +4788,Dementium: The Ward (Dementium Remastered) - 010038B01D2CA000,010038B01D2CA000,status-boots;crash,boots,2024-09-02 8:28:14,8 +4789,A Tiny Sticker Tale - 0100f6001b738000,0100f6001b738000,,,2023-10-26 23:15:46,1 +4790,Clive 'n' Wrench - 0100C6C010AE4000,0100C6C010AE4000,,,2023-10-28 14:56:46,1 +4793,STAR OCEAN The Second Story R - 010065301A2E0000,010065301A2E0000,status-ingame;crash,ingame,2024-06-01 2:39:59,13 +4794,Song of Nunu: A League of Legends Story - 01004F401BEBE000,01004F401BEBE000,status-ingame,ingame,2024-07-12 18:53:44,5 +4795,MythForce,,,,2023-11-03 12:58:52,1 +4797,Here Comes Niko! - 01001600121D4000,01001600121D4000,,,2023-11-04 22:26:44,1 +4798,Warioware: Move IT! - 010045B018EC2000,010045B018EC2000,status-playable,playable,2023-11-14 0:23:51,2 +4799,Game of Life [ 人生ゲーム for Nintendo Switch ] - 0100FF1017F76000,0100FF1017F76000,,,2023-11-07 19:59:08,3 +4800,Osyaberi! Horijyo! Gekihori - 01005D6013A54000,01005D6013A54000,,,2023-11-07 1:46:43,1 +4801,Fashion Dreamer - 0100E99019B3A000,0100E99019B3A000,status-playable,playable,2023-11-12 6:42:52,2 +4802,THE 密室逃脱 ~牵动命运的三十五道谜团~ (ESCAPE TRICK: 35 Fateful Enigmas) - 010087F005DFE000,010087F005DFE000,,,2023-11-08 2:20:17,1 +4804,Hentai Party - 010071D01CF34000,010071D01CF34000,,,2023-11-11 23:22:36,1 +4809,Hogwarts Legacy 0100F7E00C70E000,0100F7E00C70E000,,,2024-09-03 19:53:58,24 +4811,Super Mario RPG - 0100BC0018138000,0100BC0018138000,gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42,39 +4812,Venatrix - 010063601B386000,010063601B386000,,,2023-11-18 6:55:12,1 +4813,Dreamwork's All-Star Kart Racing - 010037401A374000,010037401A374000,Incomplete,,2024-02-27 8:58:57,2 +4817,Watermelon Game [ スイカゲーム ] - 0100800015926000,0100800015926000,,,2023-11-27 2:49:45,1 +4818,屁屁侦探 噗噗 未来的名侦探登场! (Oshiri Tantei Mirai no Meitantei Tojo!) - 0100FDE017E56000,0100FDE017E56000,,,2023-12-01 11:15:46,3 +4820,Batman: Arkham Knight - 0100ACD0163D0000,0100ACD0163D0000,gpu;status-ingame;mac-bug,ingame,2024-06-25 20:24:42,2 +4821,DRAGON QUEST MONSTERS: The Dark Prince - 0100A77018EA0000,0100A77018EA0000,status-playable,playable,2023-12-29 16:10:05,2 +4823,ftpd classic - 0000000000000000,0000000000000000,homebrew,,2023-12-03 23:42:19,1 +4824,ftpd pro - 0000000000000000,0000000000000000,homebrew,,2023-12-03 23:47:46,1 +4826,Batman: Arkham City - 01003f00163ce000,01003f00163ce000,status-playable,playable,2024-09-11 0:30:19,5 +4827,DoDonPachi DAI-OU-JOU Re:incarnation (怒首領蜂大往生 臨廻転生) - 0100526017B00000,0100526017B00000,,,2023-12-08 15:16:22,1 +4830,Squid Commando - 0100044018E82000,0100044018E82000,,,2023-12-08 17:17:27,1 +4834,御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!) - 0100BF401AF9C000,0100BF401AF9C000,slow;status-playable,playable,2023-12-31 14:37:17,2 +4835,Another Code: Recollection DEMO - 01003E301A4D6000,01003E301A4D6000,,,2023-12-15 6:48:09,1 +4836,Hentai Golf - 01009D801D6E4000,01009D801D6E4000,,,2023-12-17 3:39:06,1 +4837,Alien Hominid HD - 010056B019874000,010056B019874000,,,2023-12-17 13:10:46,1 +4838,Piyokoro - 010098801D706000,010098801D706000,,,2023-12-18 2:17:53,1 +4839,Uzzuzuu My Pet - Golf Dash - 010015B01CAF0000,010015B01CAF0000,,,2023-12-18 2:17:57,1 +4842,Alien Hominid Invasion - 0100A3E00CDD4000,0100A3E00CDD4000,Incomplete,,2024-07-17 1:56:28,3 +4846,void* tRrLM2(); //Void Terrarium 2 (USA/EU) - 0100B510183BC000,0100B510183BC000,,,2023-12-21 11:08:18,1 +4847,Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3 - 010047F01AA10000,010047F01AA10000,services-horizon;status-menus,menus,2024-07-24 6:34:06,4 +4848,Party Friends - 0100C0A01D478000,0100C0A01D478000,,,2023-12-23 2:43:33,1 +4849,Yohane the Parhelion Numazu in the Mirage Demo - 0100D7201DAAE000,0100D7201DAAE000,,,2023-12-23 2:49:28,1 +4850,SPY×FAMILY OPERATION DIARY - 010041601AB40000,010041601AB40000,,,2023-12-23 2:52:29,1 +4851,Golf Guys - 010040901CC42000,010040901CC42000,,,2023-12-28 1:20:16,1 +4852,Persona 5 Tactica - 010087701B092000,010087701B092000,status-playable,playable,2024-04-01 22:21:03,6 +4856,Batman: Arkham Asylum - 0100E870163CA000,0100E870163CA000,,,2024-01-11 23:03:37,2 +4857,Persona 5 Royal (KR/HK) - 01004B10157F2000,01004B10157F2000,Incomplete,,2024-08-17 21:42:28,8 +4859,Prince of Persia: The Lost Crown - 0100210019428000,0100210019428000,status-ingame;crash,ingame,2024-06-08 21:31:58,34 +4860,Another Code: Recollection - 0100CB9018F5A000,0100CB9018F5A000,gpu;status-ingame;crash,ingame,2024-09-06 5:58:52,7 +4861,It Takes Two - 010092A0172E4000,010092A0172E4000,,,2024-01-23 5:15:26,1 +4862,逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy) - 010020D01B890000,010020D01B890000,status-playable,playable,2024-06-21 21:54:27,18 +4863,Hitman: Blood Money - Reprisal - 010083A018262000,010083A018262000,deadlock;status-ingame,ingame,2024-09-28 16:28:50,8 +4866,Mario vs. Donkey Kong™ Demo - 0100D9E01DBB0000,0100D9E01DBB0000,status-playable,playable,2024-02-18 10:40:06,4 +4868,LEGO The Incredibles - 0100F19006E04000,0100F19006E04000,crash,,2024-02-11 0:46:53,1 +4869,Tomb Raider I-III Remastered - 010024601BB16000,010024601BB16000,gpu;status-ingame;opengl,ingame,2024-09-27 12:32:04,27 +4870,Arzette: The Jewel of Faramore - 0100B7501C46A000,0100B7501C46A000,,,2024-02-17 17:22:34,1 +4871,Mario vs. Donkey Kong - 0100B99019412000,0100B99019412000,status-playable,playable,2024-05-04 21:22:39,9 +4872,Penny's Big Breakaway - 0100CA901AA9C000,0100CA901AA9C000,status-playable;amd-vendor-bug,playable,2024-05-27 7:58:51,12 +4873,CEIBA - 0100E8801D97E000,0100E8801D97E000,,,2024-02-25 22:33:36,4 +4874,Lil' Guardsman v1.1 - 010060B017F6E000,010060B017F6E000,,,2024-02-25 19:21:03,1 +4875,Fearmonium - 0100F5501CE12000,0100F5501CE12000,status-boots;crash,boots,2024-03-06 11:26:11,2 +4876,NeverAwake - 0100DA30189CA000,0100DA30189CA000,,,2024-02-26 2:27:39,1 +4877,Zombies Rising XXX,,,,2024-02-26 7:53:03,1 +4878,Balatro - 0100CD801CE5E000,0100CD801CE5E000,status-ingame,ingame,2024-04-21 2:01:53,8 +4879,Prison City - 0100C1801B914000,0100C1801B914000,gpu;status-ingame,ingame,2024-03-01 8:19:33,2 +4880,Yo-kai Watch Jam: Y School Heroes: Bustlin' School Life - 010051D010FC2000,010051D010FC2000,,,2024-03-03 2:57:22,1 +4884,Princess Peach: Showtime! Demo - 010024701DC2E000,010024701DC2E000,status-playable;UE4;demo,playable,2024-03-10 17:46:45,4 +4886,Unicorn Overlord - 010069401ADB8000,010069401ADB8000,status-playable,playable,2024-09-27 14:04:32,15 +4888,Dodgeball Academia - 010001F014D9A000,010001F014D9A000,,,2024-03-09 3:49:28,1 +4893,魂斗罗:加鲁加行动 (Contra: Operation Galuga) - 0100CF401A98E000,0100CF401A98E000,,,2024-03-13 1:13:42,1 +4894,STAR WARS Battlefront Classic Collection - 010040701B948000,010040701B948000,gpu;status-ingame;vulkan,ingame,2024-07-12 19:24:21,6 +4896,MLB The Show 24 - 0100E2E01C32E000,0100E2E01C32E000,services-horizon;status-nothing,nothing,2024-03-31 4:54:11,8 +4897,Orion Haste - 01009B401DD02000,01009B401DD02000,,,2024-03-16 17:22:59,1 +4901,Gylt - 0100AC601DCA8000,0100AC601DCA8000,status-ingame;crash,ingame,2024-03-18 20:16:51,5 +4903,マクロス(Macross) -Shooting Insight- - 01001C601B8D8000,01001C601B8D8000,,,2024-03-20 17:10:26,1 +4904,Geometry Survivor - 01006D401D4F4000,01006D401D4F4000,,,2024-03-20 17:35:34,1 +4905,Gley Lancer and Gynoug - Classic Shooting Pack - 010037201E3DA000,010037201E3DA000,,,2024-03-20 18:19:37,1 +4907,Princess Peach: Showtime! - 01007A3009184000,01007A3009184000,status-playable;UE4,playable,2024-09-21 13:39:45,16 +4910,Cosmic Fantasy Collection - 0100CCB01B1A0000,0100CCB01B1A0000,status-ingame,ingame,2024-05-21 17:56:37,8 +4911,Fit Boxing feat. 初音ミク - 010045D01AFC8000,010045D01AFC8000,,,2024-03-28 4:07:57,2 +4915,Sonic 2 (2013) - 0000000000000000,0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-01 16:25:30,1 +4916,Sonic CD - 0000000000000000,0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-01 16:25:31,1 +4917,Sonic A.I.R - 0000000000000000,0000000000000000,status-ingame;homebrew,ingame,2024-04-01 16:25:32,1 +4918,RSDKv5u - 0000000000000000,0000000000000000,status-ingame;homebrew,ingame,2024-04-01 16:25:34,1 +4919,Sonic 1 (2013) - 0000000000000000,0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-06 18:31:20,2 +4920,The Dark Pictures Anthology : Man of Medan - 0100711017B30000,0100711017B30000,,,2024-04-01 16:38:04,1 +4922,SpaceCadetPinball - 0000000000000000,0000000000000000,status-ingame;homebrew,ingame,2024-04-18 19:30:04,1 +4924,Pepper Grinder - 0100B98019068000,0100B98019068000,,,2024-04-04 16:31:57,1 +4927,RetroArch - 010000000000100D,010000000000100D,,,2024-04-07 18:23:18,1 +4929,YouTube - 01003A400C3DA800,01003A400C3DA800,status-playable,playable,2024-06-08 5:24:10,2 +4930,Pawapoke R - 01000c4015030000,01000c4015030000,services-horizon;status-nothing,nothing,2024-05-14 14:28:32,3 +4933,MegaZeux - 0000000000000000,0000000000000000,,,2024-04-16 23:46:53,1 +4934,ANTONBLAST (Demo) - 0100B5F01EB24000,0100B5F01EB24000,,,2024-04-18 22:45:13,1 +4935,Europa (Demo) - 010092501EB2C000,010092501EB2C000,gpu;status-ingame;crash;UE4,ingame,2024-04-23 10:47:12,2 +4936,BioShock 1 & 2 Remastered [0100AD10102B2000 - 01002620102C6800] v1.0.2,0100AD10102B2000,,,2024-04-19 19:08:30,2 +4939,Turrican Anthology Vol. 2 - 010061D0130CA000 - game freezes at the beginning,010061D0130CA000,Incomplete,,2024-04-25 17:57:06,5 +4945,Nickelodeon All-Star Brawl 2 - 010010701AFB2000,010010701AFB2000,status-playable,playable,2024-06-03 14:15:01,3 +4946,Bloo Kid - 0100C6A01AD56000,0100C6A01AD56000,status-playable,playable,2024-05-01 17:18:04,3 +4947,Tales of Kenzera: ZAU - 01005C7015D30000,01005C7015D30000,,,2024-04-30 10:11:26,1 +4952,Demon Slayer – Kimetsu no Yaiba – Sweep the Board! - 0100A7101B806000,0100A7101B806000,,,2024-05-02 10:19:47,1 +4953,Endless Ocean Luminous - 010067B017588000,010067B017588000,services-horizon;status-ingame;crash,ingame,2024-05-30 2:05:57,6 +4954,Moto GP 24 - 010040401D564000,010040401D564000,gpu;status-ingame,ingame,2024-05-10 23:41:00,2 +4956,The game of life 2 - 0100B620139D8000,0100B620139D8000,,,2024-05-03 12:08:33,1 +4958,ANIMAL WELL - 010020D01AD24000,010020D01AD24000,status-playable,playable,2024-05-22 18:01:49,13 +4959,Super Mario World - 0000000000000000,0000000000000000,status-boots;homebrew,boots,2024-06-13 1:40:31,2 +4960,1000xRESIST - 0100B02019866000,0100B02019866000,,,2024-05-11 17:18:57,1 +4961,Dave The Diver - 010097F018538000,010097F018538000,Incomplete,,2024-09-03 21:38:55,2 +4963,Zombiewood,,Incomplete,,2024-05-15 11:37:19,2 +4965,Pawapoke Dash - 010066A015F94000,010066A015F94000,,,2024-05-16 8:45:51,1 +4967,Biomutant - 01004BA017CD6000,01004BA017CD6000,status-ingame;crash,ingame,2024-05-16 15:46:36,2 +4968,Vampire Survivors - 010089A0197E4000,010089A0197E4000,status-ingame,ingame,2024-06-17 9:57:38,2 +4969,Koumajou Remilia II Stranger’s Requiem,,Incomplete,,2024-05-22 20:59:04,3 +4972,Paper Mario: The Thousand-Year Door - 0100ECD018EBE000,0100ECD018EBE000,gpu;status-ingame;intel-vendor-bug,ingame,2024-08-06 1:02:25,79 +4973,Stories From Sol: The Gun-dog Demo - 010092A01EC94000,010092A01EC94000,,,2024-05-22 19:55:35,1 +4977,Earth Defense Force: World Brothers 2 - 010083a01d456000,010083a01d456000,,,2024-06-01 18:34:34,1 +4985,锈色湖畔:内在昔日(Rusty Lake: The Past Within) - 01007010157EC000,01007010157EC000,,,2024-06-10 13:47:40,1 +4988,Garden Life A Cozy Simulator - 0100E3801ACC0000,0100E3801ACC0000,,,2024-06-12 0:12:01,1 +4991,Shin Megami Tensei V: Vengeance - 010069C01AB82000,010069C01AB82000,gpu;status-ingame;vulkan-backend-bug,ingame,2024-07-14 11:28:24,17 +4992,Valiant Hearts - The great war - 01006C70146A2000,01006C70146A2000,,,2024-06-18 21:31:15,1 +4994,Monster Hunter Stories - 010069301B1D4000,010069301B1D4000,Incomplete,,2024-09-11 7:58:24,5 +4995,Rocket Knight Adventures: Re-Sparked,,,,2024-06-20 20:13:10,3 +4996,Metal Slug Attack Reloaded,,,,2024-06-20 19:55:22,3 +4997,#BLUD - 010060201E0A4000,010060201E0A4000,,,2024-06-23 13:57:22,1 +4998,NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS - 0100D2D0190A4000,0100D2D0190A4000,services-horizon;status-nothing,nothing,2024-07-25 5:16:48,3 +4999,Bang-On Balls: Chronicles - 010081E01A45C000,010081E01A45C000,Incomplete,,2024-08-01 16:40:12,2 +5000,Downward: Enhanced Edition 0100C5501BF24000,0100C5501BF24000,,,2024-06-26 0:22:34,1 +5001,DNF Duel: Who's Next - 0100380017D3E000,0100380017D3E000,Incomplete,,2024-07-23 2:25:50,2 +5002,Borderlands 3 - 01009970122E4000,01009970122E4000,gpu;status-ingame,ingame,2024-07-15 4:38:14,7 +5003,Luigi's Mansion 2 HD - 010048701995E000,010048701995E000,status-ingame;ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27,8 +5004,Super Monkey Ball Banana Rumble - 010031F019294000,010031F019294000,status-playable,playable,2024-06-28 10:39:18,2 +5005,City of Beats 0100E94016B9E000,0100E94016B9E000,,,2024-07-01 7:02:20,1 +5008,Maquette 0100861018480000,0100861018480000,,,2024-07-04 5:20:21,1 +5009,Monomals - 01003030161DC000,01003030161DC000,gpu;status-ingame,ingame,2024-08-06 22:02:51,3 +5014,Ace Combat 7 - Skies Unknown Deluxe Edition - 010039301B7E0000,010039301B7E0000,gpu;status-ingame;UE4,ingame,2024-09-27 14:31:43,10 +5015,Teenage Mutant Ninja Turtles: Splintered Fate - 01005CF01E784000,01005CF01E784000,status-playable,playable,2024-08-03 13:50:42,6 +5016,Powerful Pro Baseball 2024-2025 - 0100D1C01C194000,0100D1C01C194000,gpu;status-ingame,ingame,2024-08-25 6:40:48,11 +5021,World of Goo 2 - 010061F01DB7C800,010061F01DB7C800,status-boots,boots,2024-08-08 22:52:49,6 +5025,Tomba! Special Edition - 0100D7F01E49C000,0100D7F01E49C000,services-horizon;status-nothing,nothing,2024-09-15 21:59:54,2 +5026,Machi Koro With Everyone-0100C32018824000,0100C32018824000,,,2024-08-07 19:19:30,1 +5027,STAR WARS: Bounty Hunter - 0100d7a01b7a2000,0100d7a01b7a2000,,,2024-08-08 11:12:56,1 +5028,Outer Wilds - 01003DC0144B6000,01003DC0144B6000,,,2024-08-08 17:36:16,1 +5029,Grounded 01006F301AE9C000,01006F301AE9C000,,,2024-08-09 16:35:52,1 +5030,DOOM + DOOM II - 01008CB01E52E000,01008CB01E52E000,status-playable;opengl;ldn-untested;LAN,playable,2024-09-12 7:06:01,2 +5032,Fishing Paradiso - 0100890016A74000,0100890016A74000,,,2024-08-11 21:39:54,2 +5035,Revue Starlight El Dorado - 010099c01d642000,010099c01d642000,,,2024-09-02 18:58:18,2 +5040,PowerWash Simulator - 0100926016012000,0100926016012000,,,2024-08-22 0:47:34,1 +5041,Thank Goodness You’re Here! - 010053101ACB8000,010053101ACB8000,,,2024-09-25 16:15:40,2 +5042,Freedom Planet 2 V1.2.3r (01009A301B68000),,,,2024-08-23 18:16:54,1 +5043,Ace Attorney Investigations Collection DEMO - 010033401E68E000,010033401E68E000,status-playable,playable,2024-09-07 6:16:42,2 +5047,Castlevania Dominus Collection - 0100FA501AF90000,0100FA501AF90000,,,2024-09-19 1:39:04,8 +5055,Chants of Sennaar - 0100543019CB0000,0100543019CB0000,,,2024-09-19 16:30:27,2 +5056,Taisho x Alice ALL IN ONE - 大正×対称アリス ALL IN ONE - 010096000ca38000,010096000ca38000,,,2024-09-11 21:20:04,2 +5057,NBA 2K25 - 0100DFF01ED44000,0100DFF01ED44000,,,2024-09-10 17:34:54,1 +5059,逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection) - 010005501E68C000,010005501E68C000,status-playable,playable,2024-09-19 16:38:05,4 +5062,Fabledom,,,,2024-09-28 12:12:55,2 +5064,BZZZT - 010091201A3F2000,010091201A3F2000,,,2024-09-22 21:29:58,1 +5065,EA SPORTS FC 25 - 010054E01D878000,010054E01D878000,status-ingame;crash,ingame,2024-09-25 21:07:50,13 +5067,Selfloss - 010036C01E244000,010036C01E244000,,,2024-09-23 23:12:13,1 +5068,Disney Epic Mickey: Rebrushed - 0100DA201EBF8000,0100DA201EBF8000,status-ingame;crash,ingame,2024-09-26 22:11:51,4 +5069,The Plucky Squire - 01006BD018B54000,01006BD018B54000,status-ingame;crash,ingame,2024-09-27 22:32:33,4 +5070,The Legend of Zelda Echoes of Wisdom - 01008CF01BAAC000,01008CF01BAAC000,status-playable;nvdec;ASTC,playable,2024-10-01 14:11:01,34 +5071,Bakeru ,,,,2024-09-25 18:05:22,1 +5072,トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~) - 01000BB01CB8A000,01000BB01CB8A000,status-nothing,nothing,2024-09-28 7:03:14,3 +5073,I am an Airtraffic Controller AIRPORT HERO HANEDA ALLSTARS - 01002EE01BAE0000,01002EE01BAE0000,,,2024-09-27 2:04:17,1 +5074,燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari) - 01001BA01EBFC000,01001BA01EBFC000,services-horizon;status-nothing,nothing,2024-09-28 12:22:55,5 +5075,I am an Air Traffic Controller AIRPORT HERO HANEDA - 0100BE700EDA4000,0100BE700EDA4000,,,2024-09-27 23:52:19,1 +5077,Angel at Dusk Demo - 0100D96020ADC000,0100D96020ADC000,,,2024-09-29 17:21:13,1 +5078,Monster Jam™ Showdown - 0100CE101B698000,0100CE101B698000,,,2024-09-30 4:03:13,1 +5079,Legend of Heroes: Trails Through Daybreak - 010040C01D248000,010040C01D248000,,,2024-10-01 7:36:25,1 \ No newline at end of file diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 7a49a5a94..0cad28957 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -145,6 +145,9 @@ Assets\ShortcutFiles\shortcut-template.plist + + Assets\RyujinxGameCompatibility.csv + diff --git a/src/Ryujinx/UI/Helpers/MiniCommand.cs b/src/Ryujinx/UI/Helpers/MiniCommand.cs index 7e1bb9a68..9782aa69d 100644 --- a/src/Ryujinx/UI/Helpers/MiniCommand.cs +++ b/src/Ryujinx/UI/Helpers/MiniCommand.cs @@ -63,6 +63,7 @@ namespace Ryujinx.Ava.UI.Helpers public static MiniCommand Create(Action callback) => new MiniCommand(_ => callback()); public static MiniCommand Create(Action callback) => new MiniCommand(callback); public static MiniCommand CreateFromTask(Func callback) => new MiniCommand(_ => callback()); + public static MiniCommand CreateFromTask(Func callback) => new MiniCommand(callback); public abstract bool CanExecute(object parameter); public abstract void Execute(object parameter); diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index c50b073dd..0885349f8 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -66,7 +66,7 @@ namespace Ryujinx.Ava.UI.Views.Main WindowSize2160PMenuItem.Command = new RelayCommand(ChangeWindowSize); } - private CheckBox[] GenerateToggleFileTypeItems() => + private IEnumerable GenerateToggleFileTypeItems() => Enum.GetValues() .Select(it => (FileName: Enum.GetName(it)!, FileType: it)) .Select(it => @@ -76,15 +76,13 @@ namespace Ryujinx.Ava.UI.Views.Main IsChecked = it.FileType.GetConfigValue(ConfigurationState.Instance.UI.ShownFileTypes), Command = MiniCommand.Create(() => Window.ToggleFileType(it.FileName)) } - ).ToArray(); + ); - private static MenuItem[] GenerateLanguageMenuItems() + private static IEnumerable GenerateLanguageMenuItems() { - List menuItems = new(); + const string LocalePath = "Ryujinx/Assets/locales.json"; - string localePath = "Ryujinx/Assets/locales.json"; - - string languageJson = EmbeddedResources.ReadAllText(localePath); + string languageJson = EmbeddedResources.ReadAllText(LocalePath); LocalesJson locales = JsonHelper.Deserialize(languageJson, LocalesJsonContext.Default.LocalesJson); @@ -99,7 +97,10 @@ namespace Ryujinx.Ava.UI.Views.Main } else { - languageName = locales.Locales[index].Translations[language] == "" ? language : locales.Locales[index].Translations[language]; + string tr = locales.Locales[index].Translations[language]; + languageName = string.IsNullOrEmpty(tr) + ? language + : tr; } MenuItem menuItem = new() @@ -111,10 +112,8 @@ namespace Ryujinx.Ava.UI.Views.Main Command = MiniCommand.Create(() => MainWindowViewModel.ChangeLanguage(language)) }; - menuItems.Add(menuItem); + yield return menuItem; } - - return menuItems.ToArray(); } protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityHelper.cs b/src/Ryujinx/Utilities/Compat/CompatibilityHelper.cs deleted file mode 100644 index 6fee23883..000000000 --- a/src/Ryujinx/Utilities/Compat/CompatibilityHelper.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Gommon; -using nietras.SeparatedValues; -using Ryujinx.Common.Configuration; -using System.Net.Http; -using System.Threading.Tasks; - -namespace Ryujinx.Ava.Utilities.Compat -{ - public static class CompatibilityHelper - { - private static readonly string _downloadUrl = - "https://gist.githubusercontent.com/ezhevita/b41ed3bf64d0cc01269cab036e884f3d/raw/002b1a1c1a5f7a83276625e8c479c987a5f5b722/Ryujinx%2520Games%2520List%2520Compatibility.csv"; - - private static readonly FilePath _compatCsvPath = new FilePath(AppDataManager.BaseDirPath) / "system" / "compatibility.csv"; - - public static async Task DownloadAsync() - { - if (_compatCsvPath.ExistsAsFile) - return Sep.Reader().FromFile(_compatCsvPath.Path); - - using var httpClient = new HttpClient(); - var compatCsv = await httpClient.GetStringAsync(_downloadUrl); - _compatCsvPath.WriteAllText(compatCsv); - return Sep.Reader().FromText(compatCsv); - } - - public static async Task InitAsync() - { - CompatibilityCsv.Shared = new CompatibilityCsv(await DownloadAsync()); - } - } -} diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs index f78eb2098..b475bae36 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -1,6 +1,9 @@ using Avalonia.Controls; using Avalonia.Styling; +using nietras.SeparatedValues; using Ryujinx.Ava.UI.Helpers; +using System.IO; +using System.Reflection; using System.Threading.Tasks; namespace Ryujinx.Ava.Utilities.Compat @@ -9,8 +12,15 @@ namespace Ryujinx.Ava.Utilities.Compat { public static async Task Show() { - await CompatibilityHelper.InitAsync(); + if (CompatibilityCsv.Shared is null) + { + await using Stream csvStream = Assembly.GetExecutingAssembly() + .GetManifestResourceStream("RyujinxGameCompatibilityList")!; + csvStream.Position = 0; + CompatibilityCsv.Shared = new CompatibilityCsv(Sep.Reader().From(csvStream)); + } + CompatibilityContentDialog contentDialog = new() { Content = new CompatibilityList { DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) } -- 2.47.1 From f4272b05fadde70091d9f2d458ab8b406c3f66ab Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 03:53:10 -0600 Subject: [PATCH 295/722] UI: Compat list disclaimer --- src/Ryujinx/Assets/locales.json | 25 +++++++++++++++++ .../Utilities/Compat/CompatibilityList.axaml | 27 ++++++++++++++++--- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index e7a55bf9d..0951ad632 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -22597,6 +22597,31 @@ "zh_TW": "" } }, + { + "ID": "CompatibilityListWarning", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "CompatibilityListSearchBoxWatermark", "Translations": { diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml index 7d5b4f20f..a1b167df8 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml @@ -4,6 +4,7 @@ xmlns:local="using:Ryujinx.Ava.Utilities.Compat" xmlns:helpers="using:Ryujinx.Ava.UI.Helpers" xmlns:ext="using:Ryujinx.Ava.Common.Markup" + xmlns:ui="using:FluentAvalonia.UI.Controls" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Ryujinx.Ava.Utilities.Compat.CompatibilityList" @@ -11,13 +12,33 @@ - - + + + + + + + - + -- 2.47.1 From 8a29428de25bb2c605ecfa57cf37f8110958d59f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 03:57:13 -0600 Subject: [PATCH 296/722] docs: compat: update hogwarts legacy compat --- docs/compatibility.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 3fa58aa80..fa52e3b02 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -4150,7 +4150,7 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 4801,Fashion Dreamer - 0100E99019B3A000,0100E99019B3A000,status-playable,playable,2023-11-12 6:42:52,2 4802,THE 密室逃脱 ~牵动命运的三十五道谜团~ (ESCAPE TRICK: 35 Fateful Enigmas) - 010087F005DFE000,010087F005DFE000,,,2023-11-08 2:20:17,1 4804,Hentai Party - 010071D01CF34000,010071D01CF34000,,,2023-11-11 23:22:36,1 -4809,Hogwarts Legacy 0100F7E00C70E000,0100F7E00C70E000,,,2024-09-03 19:53:58,24 +4809,Hogwarts Legacy 0100F7E00C70E000,0100F7E00C70E000,status-ingame;slow,ingame,2024-09-03 19:53:58,24 4811,Super Mario RPG - 0100BC0018138000,0100BC0018138000,gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42,39 4812,Venatrix - 010063601B386000,010063601B386000,,,2023-11-18 6:55:12,1 4813,Dreamwork's All-Star Kart Racing - 010037401A374000,010037401A374000,Incomplete,,2024-02-27 8:58:57,2 @@ -4300,4 +4300,4 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 5075,I am an Air Traffic Controller AIRPORT HERO HANEDA - 0100BE700EDA4000,0100BE700EDA4000,,,2024-09-27 23:52:19,1 5077,Angel at Dusk Demo - 0100D96020ADC000,0100D96020ADC000,,,2024-09-29 17:21:13,1 5078,Monster Jam™ Showdown - 0100CE101B698000,0100CE101B698000,,,2024-09-30 4:03:13,1 -5079,Legend of Heroes: Trails Through Daybreak - 010040C01D248000,010040C01D248000,,,2024-10-01 7:36:25,1 \ No newline at end of file +5079,Legend of Heroes: Trails Through Daybreak - 010040C01D248000,010040C01D248000,,,2024-10-01 7:36:25,1 -- 2.47.1 From 574aa9ff9cd4fd816762ea6950fd86b17ca0bd64 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 04:21:08 -0600 Subject: [PATCH 297/722] add a couple missing title IDs --- docs/compatibility.csv | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index fa52e3b02..1b4f1a3ce 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -28,9 +28,9 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 70,PriPara: All Idol Perfect Stage - 010007F00879E000,010007F00879E000,status-playable,playable,2022-11-22 16:35:52,4 71,Shantae and the Pirate's Curse - 0100EFD00A4FA000,0100EFD00A4FA000,status-playable,playable,2024-04-29 17:21:57,11 72,DARK SOULS™: REMASTERED - 01004AB00A260000,01004AB00A260000,gpu;status-ingame;nvdec;online-broken,ingame,2024-04-09 19:47:58,15 -73,The Liar Princess and the Blind Prince,,audio;slow;status-playable,playable,2020-06-08 21:23:28,3 +73,The Liar Princess and the Blind Prince - 010064B00B95C000,010064B00B95C000,audio;slow;status-playable,playable,2020-06-08 21:23:28,3 74,Dead Cells - 0100646009FBE000,0100646009FBE000,status-playable,playable,2021-09-22 22:18:49,7 -75,Sonic Mania,,status-playable,playable,2020-06-08 17:30:57,6 +75,Sonic Mania - 01009AA000FAA000,01009AA000FAA000,status-playable,playable,2020-06-08 17:30:57,6 76,The Mahjong,,Needs Update;crash;services;status-nothing,nothing,2021-04-01 22:06:22,6 77,Angels of Death - 0100AE000AEBC000,0100AE000AEBC000,nvdec;status-playable,playable,2021-02-22 14:17:15,7 78,Penny-Punching Princess - 0100C510049E0000,0100C510049E0000,status-playable,playable,2022-08-09 13:37:05,6 @@ -4286,14 +4286,14 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 5056,Taisho x Alice ALL IN ONE - 大正×対称アリス ALL IN ONE - 010096000ca38000,010096000ca38000,,,2024-09-11 21:20:04,2 5057,NBA 2K25 - 0100DFF01ED44000,0100DFF01ED44000,,,2024-09-10 17:34:54,1 5059,逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection) - 010005501E68C000,010005501E68C000,status-playable,playable,2024-09-19 16:38:05,4 -5062,Fabledom,,,,2024-09-28 12:12:55,2 +5062,Fabledom - 0100B6001E6D6000,0100B6001E6D6000,,,2024-09-28 12:12:55,2 5064,BZZZT - 010091201A3F2000,010091201A3F2000,,,2024-09-22 21:29:58,1 5065,EA SPORTS FC 25 - 010054E01D878000,010054E01D878000,status-ingame;crash,ingame,2024-09-25 21:07:50,13 5067,Selfloss - 010036C01E244000,010036C01E244000,,,2024-09-23 23:12:13,1 5068,Disney Epic Mickey: Rebrushed - 0100DA201EBF8000,0100DA201EBF8000,status-ingame;crash,ingame,2024-09-26 22:11:51,4 5069,The Plucky Squire - 01006BD018B54000,01006BD018B54000,status-ingame;crash,ingame,2024-09-27 22:32:33,4 -5070,The Legend of Zelda Echoes of Wisdom - 01008CF01BAAC000,01008CF01BAAC000,status-playable;nvdec;ASTC,playable,2024-10-01 14:11:01,34 -5071,Bakeru ,,,,2024-09-25 18:05:22,1 +5070,The Legend of Zelda Echoes of Wisdom - 01008CF01BAAC000,01008CF01BAAC000,status-playable;nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01,34 +5071,Bakeru - 01007CD01FAE0000,01007CD01FAE0000,,,2024-09-25 18:05:22,1 5072,トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~) - 01000BB01CB8A000,01000BB01CB8A000,status-nothing,nothing,2024-09-28 7:03:14,3 5073,I am an Airtraffic Controller AIRPORT HERO HANEDA ALLSTARS - 01002EE01BAE0000,01002EE01BAE0000,,,2024-09-27 2:04:17,1 5074,燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari) - 01001BA01EBFC000,01001BA01EBFC000,services-horizon;status-nothing,nothing,2024-09-28 12:22:55,5 -- 2.47.1 From ed5832ca732dd4c885c49706355705893913f0b9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 04:21:33 -0600 Subject: [PATCH 298/722] docs: compat: Add new releases to the end of the file --- docs/compatibility.csv | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 1b4f1a3ce..8e7da4f4f 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -4301,3 +4301,7 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 5077,Angel at Dusk Demo - 0100D96020ADC000,0100D96020ADC000,,,2024-09-29 17:21:13,1 5078,Monster Jam™ Showdown - 0100CE101B698000,0100CE101B698000,,,2024-09-30 4:03:13,1 5079,Legend of Heroes: Trails Through Daybreak - 010040C01D248000,010040C01D248000,,,2024-10-01 7:36:25,1 +100001,Mario & Luigi: Brothership - 01006D0017F7A000,01006D0017F7A000,status-ingame;crash;slow;UE4;mac-bug,ingame,2024-01-07 4:00:00,1 +100002,Stray - 010075101EF84000,010075101EF84000,status-ingame;crash,ingame,2024-01-07 4:03:00,1 +100003,Dragon Quest III HD-2D Remake - 01003E601E324000,01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug;ingame,2024-01-07 4:10:27,1 +100004,SONIC X SHADOW GENERATIONS - 01005EA01C0fC000,01005EA01C0fC000,status-ingame;crash;2024-01-07 4:20:45,1 -- 2.47.1 From a82569d6155d0c51865e4c07ae6f958fa1344fab Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 04:28:10 -0600 Subject: [PATCH 299/722] docs: compat: LEGO Horizon Adventures --- docs/compatibility.csv | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 8e7da4f4f..c8de6d04e 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -4244,7 +4244,7 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 4967,Biomutant - 01004BA017CD6000,01004BA017CD6000,status-ingame;crash,ingame,2024-05-16 15:46:36,2 4968,Vampire Survivors - 010089A0197E4000,010089A0197E4000,status-ingame,ingame,2024-06-17 9:57:38,2 4969,Koumajou Remilia II Stranger’s Requiem,,Incomplete,,2024-05-22 20:59:04,3 -4972,Paper Mario: The Thousand-Year Door - 0100ECD018EBE000,0100ECD018EBE000,gpu;status-ingame;intel-vendor-bug,ingame,2024-08-06 1:02:25,79 +4972,Paper Mario: The Thousand-Year Door - 0100ECD018EBE000,0100ECD018EBE000,gpu;status-ingame;intel-vendor-bug;slow,ingame,2025-01-07 4:27:35,80 4973,Stories From Sol: The Gun-dog Demo - 010092A01EC94000,010092A01EC94000,,,2024-05-22 19:55:35,1 4977,Earth Defense Force: World Brothers 2 - 010083a01d456000,010083a01d456000,,,2024-06-01 18:34:34,1 4985,锈色湖畔:内在昔日(Rusty Lake: The Past Within) - 01007010157EC000,01007010157EC000,,,2024-06-10 13:47:40,1 @@ -4301,7 +4301,8 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 5077,Angel at Dusk Demo - 0100D96020ADC000,0100D96020ADC000,,,2024-09-29 17:21:13,1 5078,Monster Jam™ Showdown - 0100CE101B698000,0100CE101B698000,,,2024-09-30 4:03:13,1 5079,Legend of Heroes: Trails Through Daybreak - 010040C01D248000,010040C01D248000,,,2024-10-01 7:36:25,1 -100001,Mario & Luigi: Brothership - 01006D0017F7A000,01006D0017F7A000,status-ingame;crash;slow;UE4;mac-bug,ingame,2024-01-07 4:00:00,1 -100002,Stray - 010075101EF84000,010075101EF84000,status-ingame;crash,ingame,2024-01-07 4:03:00,1 -100003,Dragon Quest III HD-2D Remake - 01003E601E324000,01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug;ingame,2024-01-07 4:10:27,1 -100004,SONIC X SHADOW GENERATIONS - 01005EA01C0fC000,01005EA01C0fC000,status-ingame;crash;2024-01-07 4:20:45,1 +100001,Mario & Luigi: Brothership - 01006D0017F7A000,01006D0017F7A000,status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 4:00:00,1 +100002,Stray - 010075101EF84000,010075101EF84000,status-ingame;crash,ingame,2025-01-07 4:03:00,1 +100003,Dragon Quest III HD-2D Remake - 01003E601E324000,01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug;ingame,2025-01-07 4:10:27,1 +100004,SONIC X SHADOW GENERATIONS - 01005EA01C0fC000,01005EA01C0fC000,status-ingame;crash;2025-01-07 4:20:45,1 +100005,LEGO Horizon Adventures - 010073C01AF34000,010073C01AF34000,status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4;2025-01-07 4:24:56,1 -- 2.47.1 From 5efa7d5dfae57c6ee9cb3b31e25efd03e3c69601 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 04:37:36 -0600 Subject: [PATCH 300/722] UI: compat: remove custom ContentDialog derived type --- docs/compatibility.csv | 6 +++--- src/Ryujinx/Assets/Styles/Styles.xaml | 2 +- src/Ryujinx/Ryujinx.csproj | 6 ------ .../Compat/CompatibilityContentDialog.axaml | 20 ------------------- .../CompatibilityContentDialog.axaml.cs | 13 ------------ .../Compat/CompatibilityList.axaml.cs | 14 ++++++++++--- 6 files changed, 15 insertions(+), 46 deletions(-) delete mode 100644 src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml delete mode 100644 src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs diff --git a/docs/compatibility.csv b/docs/compatibility.csv index c8de6d04e..59d647994 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -4303,6 +4303,6 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 5079,Legend of Heroes: Trails Through Daybreak - 010040C01D248000,010040C01D248000,,,2024-10-01 7:36:25,1 100001,Mario & Luigi: Brothership - 01006D0017F7A000,01006D0017F7A000,status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 4:00:00,1 100002,Stray - 010075101EF84000,010075101EF84000,status-ingame;crash,ingame,2025-01-07 4:03:00,1 -100003,Dragon Quest III HD-2D Remake - 01003E601E324000,01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug;ingame,2025-01-07 4:10:27,1 -100004,SONIC X SHADOW GENERATIONS - 01005EA01C0fC000,01005EA01C0fC000,status-ingame;crash;2025-01-07 4:20:45,1 -100005,LEGO Horizon Adventures - 010073C01AF34000,010073C01AF34000,status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4;2025-01-07 4:24:56,1 +100003,Dragon Quest III HD-2D Remake - 01003E601E324000,01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 4:10:27,1 +100004,SONIC X SHADOW GENERATIONS - 01005EA01C0fC000,01005EA01C0fC000,status-ingame;crash,ingame,2025-01-07 4:20:45,1 +100005,LEGO Horizon Adventures - 010073C01AF34000,010073C01AF34000,status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 4:24:56,1 diff --git a/src/Ryujinx/Assets/Styles/Styles.xaml b/src/Ryujinx/Assets/Styles/Styles.xaml index 878b5e7f1..3d0c91840 100644 --- a/src/Ryujinx/Assets/Styles/Styles.xaml +++ b/src/Ryujinx/Assets/Styles/Styles.xaml @@ -402,7 +402,7 @@ 13 26 28 - 700 + 900 756 diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 0cad28957..ab9a3696d 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -171,12 +171,6 @@ - - - CompatibilityContentDialog.axaml - Code - - diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml b/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml deleted file mode 100644 index fbceefc33..000000000 --- a/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - 900 - - - diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs deleted file mode 100644 index 513600bc0..000000000 --- a/src/Ryujinx/Utilities/Compat/CompatibilityContentDialog.axaml.cs +++ /dev/null @@ -1,13 +0,0 @@ -using FluentAvalonia.UI.Controls; -using System; - -namespace Ryujinx.Ava.Utilities.Compat -{ - public partial class CompatibilityContentDialog : ContentDialog - { - protected override Type StyleKeyOverride => typeof(ContentDialog); - - public CompatibilityContentDialog() => InitializeComponent(); - } -} - diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs index b475bae36..80f124121 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -1,6 +1,8 @@ using Avalonia.Controls; using Avalonia.Styling; +using FluentAvalonia.UI.Controls; using nietras.SeparatedValues; +using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using System.IO; using System.Reflection; @@ -19,11 +21,17 @@ namespace Ryujinx.Ava.Utilities.Compat csvStream.Position = 0; CompatibilityCsv.Shared = new CompatibilityCsv(Sep.Reader().From(csvStream)); - } + } - CompatibilityContentDialog contentDialog = new() + ContentDialog contentDialog = new() { - Content = new CompatibilityList { DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) } + PrimaryButtonText = string.Empty, + SecondaryButtonText = string.Empty, + CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose], + Content = new CompatibilityList + { + DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) + } }; Style closeButton = new(x => x.Name("CloseButton")); -- 2.47.1 From ef9c1416eccc1e6901749b6242370504e766795e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 04:49:20 -0600 Subject: [PATCH 301/722] UI: compat: Only use monospaced font for title ID --- docs/compatibility.csv | 2 +- src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs | 3 ++- src/Ryujinx/Utilities/Compat/CompatibilityList.axaml | 5 +---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 59d647994..1f5cfc218 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -4304,5 +4304,5 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 100001,Mario & Luigi: Brothership - 01006D0017F7A000,01006D0017F7A000,status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 4:00:00,1 100002,Stray - 010075101EF84000,010075101EF84000,status-ingame;crash,ingame,2025-01-07 4:03:00,1 100003,Dragon Quest III HD-2D Remake - 01003E601E324000,01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 4:10:27,1 -100004,SONIC X SHADOW GENERATIONS - 01005EA01C0fC000,01005EA01C0fC000,status-ingame;crash,ingame,2025-01-07 4:20:45,1 +100004,SONIC X SHADOW GENERATIONS - 01005EA01C0FC000,01005EA01C0FC000,status-ingame;crash,ingame,2025-01-07 4:20:45,1 100005,LEGO Horizon Adventures - 010073C01AF34000,010073C01AF34000,status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 4:24:56,1 diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index a3f9fc62d..d6390cc7d 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -72,7 +72,8 @@ namespace Ryujinx.Ava.Utilities.Compat public int EventCount { get; } public string LocalizedStatus => LocaleManager.Instance[Status!.Value]; - public string FormattedTitleId => TitleId.OrElse(new string(' ', 16)); + public string FormattedTitleId => TitleId + .OrElse(new string(' ', 16)); public string FormattedIssueLabels => IssueLabels .Where(it => !it.StartsWithIgnoreCase("status")) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml index a1b167df8..8e14c3904 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml @@ -47,9 +47,8 @@ -- 2.47.1 From 5a6d01db3cab24292730060e435325f7bd416c30 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 05:50:30 -0600 Subject: [PATCH 302/722] docs: compat: trine 4 -> nothing added Soul Reaver 1 & 2 --- docs/compatibility.csv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 1f5cfc218..595a8015a 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -464,7 +464,7 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 533,Wandersong - 0100F8A00853C000,0100F8A00853C000,nvdec;status-playable,playable,2021-06-04 15:33:34,6 535,Untitled Goose Game,,status-playable,playable,2020-09-26 13:18:06,2 536,Unbox: Newbie's Adventure - 0100592005164000,0100592005164000,status-playable;UE4,playable,2022-08-29 13:12:56,4 -537,Trine 4: The Nightmare Prince - 010055E00CA68000,010055E00CA68000,gpu;status-ingame;ldn-untested,ingame,2023-10-23 2:40:46,8 +537,Trine 4: The Nightmare Prince - 010055E00CA68000,010055E00CA68000,gpu;status-nothing,nothing,2025-01-07 5:47:46,9 538,Travis Strikes Again: No More Heroes - 010011600C946000,010011600C946000,status-playable;nvdec;UE4,playable,2022-08-25 12:36:38,6 539,Bubble Bobble 4 Friends - 010010900F7B4000,010010900F7B4000,nvdec;status-playable,playable,2021-06-04 15:27:55,7 540,Bloodstained: Curse of the Moon,,status-playable,playable,2020-09-04 10:42:17,2 @@ -4306,3 +4306,4 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 100003,Dragon Quest III HD-2D Remake - 01003E601E324000,01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 4:10:27,1 100004,SONIC X SHADOW GENERATIONS - 01005EA01C0FC000,01005EA01C0FC000,status-ingame;crash,ingame,2025-01-07 4:20:45,1 100005,LEGO Horizon Adventures - 010073C01AF34000,010073C01AF34000,status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 4:24:56,1 +100006,Legacy of Kain™ Soul Reaver 1&2 Remastered - 010079901C898000,010079901C898000,status-playable,playable,2025-01-07 5:50:01,1 -- 2.47.1 From 9270b35648dcdbec75c1083767775bf847aecc68 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 05:53:31 -0600 Subject: [PATCH 303/722] no. --- docs/compatibility.csv | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 595a8015a..ef2d8b095 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -3915,7 +3915,6 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 4445,Foxy’s Coin Hunt - 0100EE401A378000,0100EE401A378000,,,2023-02-20 2:00:00,1 4446,Samurai Warrior - 0100B6501A360000,0100B6501A360000,status-playable,playable,2023-02-27 18:42:38,2 4447,NCL USA Bowl - 010004801A450000,010004801A450000,,,2023-02-20 2:00:05,1 -4448,Hentai RPG Isekai Journey - 010025A019C02000,010025A019C02000,,,2023-02-20 2:00:08,1 4449,Dadish - 0100B8B013310000,0100B8B013310000,,,2023-02-20 23:19:02,1 4450,Dadish 2 - 0100BB70140BA000,0100BB70140BA000,,,2023-02-20 23:28:43,1 4451,Dadish 3 - 01001010181AA000,01001010181AA000,,,2023-02-20 23:38:55,1 @@ -4149,7 +4148,6 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 4800,Osyaberi! Horijyo! Gekihori - 01005D6013A54000,01005D6013A54000,,,2023-11-07 1:46:43,1 4801,Fashion Dreamer - 0100E99019B3A000,0100E99019B3A000,status-playable,playable,2023-11-12 6:42:52,2 4802,THE 密室逃脱 ~牵动命运的三十五道谜团~ (ESCAPE TRICK: 35 Fateful Enigmas) - 010087F005DFE000,010087F005DFE000,,,2023-11-08 2:20:17,1 -4804,Hentai Party - 010071D01CF34000,010071D01CF34000,,,2023-11-11 23:22:36,1 4809,Hogwarts Legacy 0100F7E00C70E000,0100F7E00C70E000,status-ingame;slow,ingame,2024-09-03 19:53:58,24 4811,Super Mario RPG - 0100BC0018138000,0100BC0018138000,gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42,39 4812,Venatrix - 010063601B386000,010063601B386000,,,2023-11-18 6:55:12,1 @@ -4165,7 +4163,6 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 4830,Squid Commando - 0100044018E82000,0100044018E82000,,,2023-12-08 17:17:27,1 4834,御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!) - 0100BF401AF9C000,0100BF401AF9C000,slow;status-playable,playable,2023-12-31 14:37:17,2 4835,Another Code: Recollection DEMO - 01003E301A4D6000,01003E301A4D6000,,,2023-12-15 6:48:09,1 -4836,Hentai Golf - 01009D801D6E4000,01009D801D6E4000,,,2023-12-17 3:39:06,1 4837,Alien Hominid HD - 010056B019874000,010056B019874000,,,2023-12-17 13:10:46,1 4838,Piyokoro - 010098801D706000,010098801D706000,,,2023-12-18 2:17:53,1 4839,Uzzuzuu My Pet - Golf Dash - 010015B01CAF0000,010015B01CAF0000,,,2023-12-18 2:17:57,1 -- 2.47.1 From 804d9c1efeda7f350662ca6edb5a93b75727ad1b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 06:03:35 -0600 Subject: [PATCH 304/722] docs: compat: remove invalid dupe --- docs/compatibility.csv | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index ef2d8b095..4df07bea9 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -4133,7 +4133,6 @@ issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_ev 4773,Sonic Superstars - 01008F701C074000,01008F701C074000,gpu;status-ingame;nvdec,ingame,2023-10-28 17:48:07,16 4774,Sonic Superstars Digital Art Book with Mini Digital Soundtrack - 010088801C150000,010088801C150000,status-playable,playable,2024-08-20 13:26:56,2 4776,Super Mario Bros. Wonder - 010015100B514000,010015100B514000,status-playable;amd-vendor-bug,playable,2024-09-06 13:21:21,36 -4781,Game Incompatibility - Super Marios Bros Wonder,,,,2023-10-21 19:09:02,2 4786,Project Blue - 0100FCD0193A0000,0100FCD0193A0000,,,2023-10-24 15:55:09,2 4787,Rear Sekai [ リアセカイ ] - 0100C3B01A5DD002,0100C3B01A5DD002,,,2023-10-24 1:55:18,1 4788,Dementium: The Ward (Dementium Remastered) - 010038B01D2CA000,010038B01D2CA000,status-boots;crash,boots,2024-09-02 8:28:14,8 -- 2.47.1 From 672f5df0f92d892399cfce7350a0a705fee97c0c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 18:49:04 -0600 Subject: [PATCH 305/722] docs: compat: Remove issue_number & events_count columns That's mostly for archival purposes; we don't need it. --- docs/compatibility.csv | 8610 ++++++++--------- .../Utilities/Compat/CompatibilityCsv.cs | 29 +- 2 files changed, 4319 insertions(+), 4320 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 4df07bea9..66de18297 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -1,4305 +1,4305 @@ -issue_number,issue_title,extracted_game_id,issue_labels,extracted_status,last_event_date,events_count -42,ARMS - 01009B500007C000,01009B500007C000,status-playable;ldn-works;LAN,playable,2024-08-28 7:49:24,9 -43,Pokemon Quest - 01005D100807A000,01005D100807A000,status-playable,playable,2022-02-22 16:12:32,10 -44,Retro City Rampage DX,,status-playable,playable,2021-01-05 17:04:17,8 -45,Kirby Star Allies - 01007E3006DDA000,01007E3006DDA000,status-playable;nvdec,playable,2023-11-15 17:06:19,23 -46,Bayonetta 2 - 01007960049A0000,01007960049A0000,status-playable;nvdec;ldn-works;LAN,playable,2022-11-26 3:46:09,10 -47,Bloons TD 5 - 0100B8400A1C6000,0100B8400A1C6000,Needs Update;audio;gpu;services;status-boots,boots,2021-04-18 23:02:46,5 -48,Urban Trial Playground - 01001B10068EC000,01001B10068EC000,UE4;nvdec;online;status-playable,playable,2021-03-25 20:56:51,8 -49,Ben 10 - 01006E1004404000,01006E1004404000,nvdec;status-playable,playable,2021-02-26 14:08:35,8 -50,Lanota,,status-playable,playable,2019-09-04 1:58:14,5 -51,Portal Knights - 0100437004170000,0100437004170000,ldn-untested;online;status-playable,playable,2021-05-27 19:29:04,5 -52,Thimbleweed Park - 01009BD003B36000,01009BD003B36000,status-playable,playable,2022-08-24 11:15:31,9 -53,Pokkén Tournament DX - 0100B3F000BE2000,0100B3F000BE2000,status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08,24 -55,Farming Simulator Nintendo Switch Edition,,nvdec;status-playable,playable,2021-01-19 14:46:44,6 -56,Sonic Forces - 01001270012B6000,01001270012B6000,status-playable,playable,2024-07-28 13:11:21,13 -57,One Piece Pirate Warriors 3,,nvdec;status-playable,playable,2020-05-10 6:23:52,6 -58,Dragon Quest Heroes I + II (JP) - 0100CD3000BDC000,0100CD3000BDC000,nvdec;status-playable,playable,2021-04-08 14:27:16,9 -59,Dragon Quest Builders - 010008900705C000,010008900705C000,gpu;status-ingame;nvdec,ingame,2023-08-14 9:54:36,19 -60,Don't Starve - 0100751007ADA000,0100751007ADA000,status-playable;nvdec,playable,2022-02-05 20:43:34,7 -61,Bud Spencer & Terence Hill - Slaps and Beans - 01000D200AC0C000,01000D200AC0C000,status-playable,playable,2022-07-17 12:37:00,6 -62,Fantasy Hero Unsigned Legacy - 0100767008502000,0100767008502000,status-playable,playable,2022-07-26 12:28:52,8 -64,MUSNYX,,status-playable,playable,2020-05-08 14:24:43,4 -65,Mario Tennis Aces - 0100BDE00862A000,0100BDE00862A000,gpu;status-ingame;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40,23 -66,Higurashi no Naku Koro ni Hō - 0100F6A00A684000,0100F6A00A684000,audio;status-ingame,ingame,2021-09-18 14:40:28,10 -67,Nintendo Entertainment System - Nintendo Switch Online - 0100D870045B6000,0100D870045B6000,status-playable;online,playable,2022-07-01 15:45:06,3 -68,SEGA Ages: Sonic The Hedgehog - 010051F00AC5E000,010051F00AC5E000,slow;status-playable,playable,2023-03-05 20:16:31,10 -69,10 Second Run Returns - 01004D1007926000,01004D1007926000,gpu;status-ingame,ingame,2022-07-17 13:06:18,8 -70,PriPara: All Idol Perfect Stage - 010007F00879E000,010007F00879E000,status-playable,playable,2022-11-22 16:35:52,4 -71,Shantae and the Pirate's Curse - 0100EFD00A4FA000,0100EFD00A4FA000,status-playable,playable,2024-04-29 17:21:57,11 -72,DARK SOULS™: REMASTERED - 01004AB00A260000,01004AB00A260000,gpu;status-ingame;nvdec;online-broken,ingame,2024-04-09 19:47:58,15 -73,The Liar Princess and the Blind Prince - 010064B00B95C000,010064B00B95C000,audio;slow;status-playable,playable,2020-06-08 21:23:28,3 -74,Dead Cells - 0100646009FBE000,0100646009FBE000,status-playable,playable,2021-09-22 22:18:49,7 -75,Sonic Mania - 01009AA000FAA000,01009AA000FAA000,status-playable,playable,2020-06-08 17:30:57,6 -76,The Mahjong,,Needs Update;crash;services;status-nothing,nothing,2021-04-01 22:06:22,6 -77,Angels of Death - 0100AE000AEBC000,0100AE000AEBC000,nvdec;status-playable,playable,2021-02-22 14:17:15,7 -78,Penny-Punching Princess - 0100C510049E0000,0100C510049E0000,status-playable,playable,2022-08-09 13:37:05,6 -79,Just Shapes & Beats,,ldn-untested;nvdec;status-playable,playable,2021-02-09 12:18:36,7 -80,Minecraft - Nintendo Switch Edition - 01006BD001E06000,01006BD001E06000,status-playable;ldn-broken,playable,2023-10-15 1:47:08,17 -81,FINAL FANTASY XV POCKET EDITION HD,,status-playable,playable,2021-01-05 17:52:08,5 -82,Dragon Ball Xenoverse 2 - 010078D000F88000,010078D000F88000,gpu;status-ingame;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01,12 -83,Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings - 010009900947A000,010009900947A000,nvdec;status-playable,playable,2021-06-03 18:37:01,11 -84,Nights of Azure 2: Bride of the New Moon - 0100628004BCE000,0100628004BCE000,status-menus;crash;nvdec;regression,menus,2022-11-24 16:00:39,9 -85,RXN -Raijin-,,nvdec;status-playable,playable,2021-01-10 16:05:43,6 -86,The Legend of Zelda: Breath of the Wild - 01007EF00011E000,01007EF00011E000,gpu;status-ingame;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46,66 -87,The Messenger,,status-playable,playable,2020-03-22 13:51:37,4 -88,Starlink: Battle for Atlas - 01002CC003FE6000,01002CC003FE6000,services-horizon;status-nothing;crash;Needs Update,nothing,2024-05-05 17:25:11,13 -89,Nintendo Labo - Toy-Con 01: Variety Kit - 0100C4B0034B2000,0100C4B0034B2000,gpu;status-ingame,ingame,2022-08-07 12:56:07,7 -90,Diablo III: Eternal Collection - 01001B300B9BE000,01001B300B9BE000,status-playable;online-broken;ldn-works,playable,2023-08-21 23:48:03,49 -91,Road Redemption - 010053000B986000,010053000B986000,status-playable;online-broken,playable,2022-08-12 11:26:20,4 -92,Brawlhalla - 0100C6800B934000,0100C6800B934000,online;opengl;status-playable,playable,2021-06-03 18:26:09,8 -93,Super Mario Odyssey - 0100000000010000,0100000000010000,status-playable;nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 1:32:34,69 -95,Sonic Mania Plus - 01009AA000FAA000,01009AA000FAA000,status-playable,playable,2022-01-16 4:09:11,6 -96,Pokken Tournament DX Demo - 010030D005AE6000,010030D005AE6000,status-playable;demo;opengl-backend-bug,playable,2022-08-10 12:03:19,4 -97,Fast RMX - 01009510001CA000,01009510001CA000,slow;status-ingame;crash;ldn-partial,ingame,2024-06-22 20:48:58,22 -98,Steins;Gate Elite,,status-playable,playable,2020-08-04 7:33:32,4 -99,Memories Off -Innocent Fille- for Dearest,,status-playable,playable,2020-08-04 7:31:22,4 -100,Enchanting Mahjong Match,,gpu;status-ingame,ingame,2020-04-17 22:01:31,3 -101,Code of Princess EX - 010034E005C9C000,010034E005C9C000,nvdec;online;status-playable,playable,2021-06-03 10:50:13,4 -102,20XX - 0100749009844000,0100749009844000,gpu;status-ingame,ingame,2023-08-14 9:41:44,11 -103,Cartoon Network Battle Crashers - 0100085003A2A000,0100085003A2A000,status-playable,playable,2022-07-21 21:55:40,7 -104,Danmaku Unlimited 3,,status-playable,playable,2020-11-15 0:48:35,8 -105,Mega Man Legacy Collection Vol.1 - 01002D4007AE0000,01002D4007AE0000,gpu;status-ingame,ingame,2021-06-03 18:17:17,8 -106,Sparkle ZERO,,gpu;slow;status-ingame,ingame,2020-03-23 18:19:18,3 -107,Sparkle 2,,status-playable,playable,2020-10-19 11:51:39,6 -108,Sparkle Unleashed - 01000DC007E90000,01000DC007E90000,status-playable,playable,2021-06-03 14:52:15,4 -109,I AM SETSUNA - 0100849000BDA000,0100849000BDA000,status-playable,playable,2021-11-28 11:06:11,11 -110,Lego City Undercover - 01003A30012C0000,01003A30012C0000,status-playable;nvdec,playable,2024-09-30 8:44:27,9 -111,Mega Man X Legacy Collection,,audio;crash;services;status-menus,menus,2020-12-04 4:30:17,6 -112,Super Bomberman R - 01007AD00013E000,01007AD00013E000,status-playable;nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14,9 -113,Mega Man 11 - 0100B0C0086B0000,0100B0C0086B0000,status-playable,playable,2021-04-26 12:07:53,6 -114,Undertale - 010080B00AD66000,010080B00AD66000,status-playable,playable,2022-08-31 17:31:46,11 -115,"Pokémon: Let's Go, Eevee! - 0100187003A36000",0100187003A36000,status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04,24 -116,Poly Bridge,,services;status-playable,playable,2020-06-08 23:32:41,6 -117,BlazBlue: Cross Tag Battle,,nvdec;online;status-playable,playable,2021-01-05 20:29:37,5 -118,Capcom Beat 'Em Up Bundle,,status-playable,playable,2020-03-23 18:31:24,3 -119,Owlboy,,status-playable,playable,2020-10-19 14:24:45,5 -120,Subarashiki Kono Sekai -Final Remix-,,services;slow;status-ingame,ingame,2020-02-10 16:21:51,4 -121,Ultra Street Fighter II: The Final Challengers - 01007330027EE000,01007330027EE000,status-playable;ldn-untested,playable,2021-11-25 7:54:58,5 -122,Mighty Gunvolt Burst,,status-playable,playable,2020-10-19 16:05:49,4 -123,Super Meat Boy,,services;status-playable,playable,2020-04-02 23:10:07,5 -124,UNO - 01005AA00372A000,01005AA00372A000,status-playable;nvdec;ldn-untested,playable,2022-07-28 14:49:47,9 -125,Tales of the Tiny Planet - 0100408007078000,0100408007078000,status-playable,playable,2021-01-25 15:47:41,6 -126,Octopath Traveler,,UE4;crash;gpu;status-ingame,ingame,2020-08-31 2:34:36,9 -127,A magical high school girl - 01008DD006C52000,01008DD006C52000,status-playable,playable,2022-07-19 14:40:50,4 -128,Superbeat: Xonic EX - 0100FF60051E2000,0100FF60051E2000,status-ingame;crash;nvdec,ingame,2022-08-19 18:54:40,2 -129,DRAGON BALL FighterZ - 0100A250097F0000,0100A250097F0000,UE4;ldn-broken;nvdec;online;status-playable,playable,2021-06-11 16:19:04,12 -130,Arcade Archives VS. SUPER MARIO BROS.,,online;status-playable,playable,2021-04-08 14:48:11,8 -131,Celeste,,status-playable,playable,2020-06-17 10:14:40,2 -132,Hollow Knight - 0100633007D48000,0100633007D48000,status-playable;nvdec,playable,2023-01-16 15:44:56,4 -133,Shining Resonance Refrain - 01009A5009A9E000,01009A5009A9E000,status-playable;nvdec,playable,2022-08-12 18:03:01,7 -134,Valkyria Chronicles 4 Demo - 0100FBD00B91E000,0100FBD00B91E000,slow;status-ingame;demo,ingame,2022-08-29 20:39:07,3 -136,Super Smash Bros. Ultimate - 01006A800016E000,01006A800016E000,gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21,56 -137,Cendrillon palikA - 01006B000A666000,01006B000A666000,gpu;status-ingame;nvdec,ingame,2022-07-21 22:52:24,12 -138,Atari Flashback Classics,,,,2018-12-15 6:55:27,1 -139,RPG Maker MV,,nvdec;status-playable,playable,2021-01-05 20:12:01,5 -140,SNK 40th Anniversary Collection - 01004AB00AEF8000,01004AB00AEF8000,status-playable,playable,2022-08-14 13:33:15,8 -141,Firewatch - 0100AC300919A000,0100AC300919A000,status-playable,playable,2021-06-03 10:56:38,9 -142,Taiko no Tatsujin: Drum 'n' Fun! - 01002C000B552000,01002C000B552000,status-playable;online-broken;ldn-broken,playable,2023-05-20 15:10:12,12 -143,Fairy Fencer F™: Advent Dark Force - 0100F6D00B8F2000,0100F6D00B8F2000,status-ingame;32-bit;crash;nvdec,ingame,2023-04-16 3:53:48,9 -144,Azure Striker Gunvolt: STRIKER PACK - 0100192003FA4000,0100192003FA4000,32-bit;status-playable,playable,2024-02-10 23:51:21,12 -145,LIMBO - 01009C8009026000,01009C8009026000,cpu;status-boots;32-bit,boots,2023-06-28 15:39:19,10 -147,Dragon Marked for Death: Frontline Fighters (Empress & Warrior) - 010089700150E000,010089700150E000,status-playable;ldn-untested;audout,playable,2022-03-10 6:44:34,5 -148,SENRAN KAGURA Reflexions,,status-playable,playable,2020-03-23 19:15:23,11 -149,Dies irae Amantes amentes For Nintendo Switch - 0100BB900B5B4000,0100BB900B5B4000,status-nothing;32-bit;crash,nothing,2022-02-16 7:09:05,9 -150,TETRIS 99 - 010040600C5CE000,010040600C5CE000,gpu;status-ingame;online-broken;ldn-untested,ingame,2024-05-02 16:36:41,28 -151,Yoshi's Crafted World Demo Version,,gpu;status-boots;status-ingame,boots,2020-12-16 14:57:40,3 -152,8-BIT ADVENTURE STEINS;GATE,,audio;status-ingame,ingame,2020-01-12 15:05:06,1 -153,Ao no Kanata no Four Rhythm - 0100FA100620C000,0100FA100620C000,status-playable,playable,2022-07-21 10:50:42,8 -154,DELTARUNE Chapter 1 - 010023800D64A000,010023800D64A000,status-playable,playable,2023-01-22 4:47:44,4 -155,My Girlfriend is a Mermaid!?,,nvdec;status-playable,playable,2020-05-08 13:32:55,6 -156,SEGA Mega Drive Classics,,online;status-playable,playable,2021-01-05 11:08:00,5 -157,Aragami: Shadow Edition - 010071800BA74000,010071800BA74000,nvdec;status-playable,playable,2021-02-21 20:33:23,5 -158,この世の果てで恋を唄う少女YU-NO,,audio;status-ingame,ingame,2021-01-22 7:00:16,2 -159,Xenoblade Chronicles 2 - 0100E95004038000,0100E95004038000,deadlock;status-ingame;amd-vendor-bug,ingame,2024-03-28 14:31:41,51 -160,Atelier Rorona Arland no Renkinjutsushi DX (JP) - 01002D700B906000,01002D700B906000,status-playable;nvdec,playable,2022-12-02 17:26:54,3 -161,DEAD OR ALIVE Xtreme 3 Scarlet - 01009CC00C97C000,01009CC00C97C000,status-playable,playable,2022-07-23 17:05:06,23 -162,Blaster Master Zero 2 - 01005AA00D676000,01005AA00D676000,status-playable,playable,2021-04-08 15:22:59,2 -163,Vroom in the Night Sky - 01004E90028A2000,01004E90028A2000,status-playable;Needs Update;vulkan-backend-bug,playable,2023-02-20 2:32:29,7 -164,Our World Is Ended.,,nvdec;status-playable,playable,2021-01-19 22:46:57,6 -165,Mortal Kombat 11 - 0100F2200C984000,0100F2200C984000,slow;status-ingame;nvdec;online-broken;ldn-broken,ingame,2024-06-19 2:22:17,10 -166,SEGA Ages: Virtua Racing - 010054400D2E6000,010054400D2E6000,status-playable;online-broken,playable,2023-01-29 17:08:39,6 -167,BOXBOY! + BOXGIRL!,,status-playable,playable,2020-11-08 1:11:54,6 -168,Hyrule Warriors: Definitive Edition - 0100AE00096EA000,0100AE00096EA000,services-horizon;status-ingame;nvdec,ingame,2024-06-16 10:34:05,36 -170,Cytus α - 010063100B2C2000,010063100B2C2000,nvdec;status-playable,playable,2021-02-20 13:40:46,5 -171,Resident Evil 4 - 010099A00BC1E000,010099A00BC1E000,status-playable;nvdec,playable,2022-11-16 21:16:04,12 -172,Team Sonic Racing - 010092B0091D0000,010092B0091D0000,status-playable;online-broken;ldn-works,playable,2024-02-05 15:05:27,9 -173,Pang Adventures - 010083700B730000,010083700B730000,status-playable,playable,2021-04-10 12:16:59,7 -174,Remi Lore - 010095900B436000,010095900B436000,status-playable,playable,2021-06-03 18:58:15,6 -175,SKYHILL - 0100A0A00D1AA000,0100A0A00D1AA000,status-playable,playable,2021-03-05 15:19:11,5 -176,Valkyria Chronicles 4 - 01005C600AC68000,01005C600AC68000,audout;nvdec;status-playable,playable,2021-06-03 18:12:25,6 -177,Crystal Crisis - 0100972008234000,0100972008234000,nvdec;status-playable,playable,2021-02-20 13:52:44,5 -178,Crash Team Racing Nitro-Fueled - 0100F9F00C696000,0100F9F00C696000,gpu;status-ingame;nvdec;online-broken,ingame,2023-06-25 2:40:17,19 -179,Collection of Mana,,status-playable,playable,2020-10-19 19:29:45,5 -180,Super Mario Maker 2 - 01009B90006DC000,01009B90006DC000,status-playable;online-broken;ldn-broken,playable,2024-08-25 11:05:19,22 -181,Nekopara Vol.3 - 010045000E418000,010045000E418000,status-playable,playable,2022-10-03 12:49:04,6 -182,Moero Chronicle Hyper - 0100B8500D570000,0100B8500D570000,32-bit;status-playable,playable,2022-08-11 7:21:56,12 -183,Monster Hunter XX Demo,,32-bit;cpu;status-nothing,nothing,2020-03-22 10:12:28,3 -184,Super Neptunia RPG - 01004D600AC14000,01004D600AC14000,status-playable;nvdec,playable,2022-08-17 16:38:52,8 -185,Terraria - 0100E46006708000,0100E46006708000,status-playable;online-broken,playable,2022-09-12 16:14:57,5 -186,Megaman Legacy Collection 2,,status-playable,playable,2021-01-06 8:47:59,2 -187,Blazing Chrome,,status-playable,playable,2020-11-16 4:56:54,6 -188,Dragon Quest Builders 2 - 010042000A986000,010042000A986000,status-playable,playable,2024-04-19 16:36:38,10 -189,CLANNAD - 0100A3A00CC7E000,0100A3A00CC7E000,status-playable,playable,2021-06-03 17:01:02,6 -190,Ys VIII: Lacrimosa of Dana - 01007F200B0C0000,01007F200B0C0000,status-playable;nvdec,playable,2023-08-05 9:26:41,20 -191,PC Building Simulator,,status-playable,playable,2020-06-12 0:31:58,4 -192,NO THING,,status-playable,playable,2021-01-04 19:06:01,2 -193,The Swords of Ditto,,slow;status-ingame,ingame,2020-12-06 0:13:12,2 -194,Kill la Kill - IF,,status-playable,playable,2020-06-09 14:47:08,6 -195,Spyro Reignited Trilogy,,Needs More Attention;UE4;crash;gpu;nvdec;status-menus,menus,2021-01-22 13:01:56,6 -196,FINAL FANTASY VIII REMASTERED - 01008B900DC0A000,01008B900DC0A000,status-playable;nvdec,playable,2023-02-15 10:57:48,8 -197,Super Nintendo Entertainment System - Nintendo Switch Online,,status-playable,playable,2021-01-05 0:29:48,5 -198,スーパーファミコン Nintendo Switch Online,,slow;status-ingame,ingame,2020-03-14 5:48:38,3 -199,Street Fighter 30th Anniversary Collection - 0100024008310000,0100024008310000,status-playable;online-broken;ldn-partial,playable,2022-08-20 16:50:47,7 -200,Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda - 01000B900D8B0000,01000B900D8B0000,slow;status-playable;nvdec,playable,2024-04-01 22:43:40,19 -201,Nekopara Vol.2,,status-playable,playable,2020-12-16 11:04:47,5 -202,Nekopara Vol.1 - 0100B4900AD3E000,0100B4900AD3E000,status-playable;nvdec,playable,2022-08-06 18:25:54,5 -203,Gunvolt Chronicles: Luminous Avenger iX,,status-playable,playable,2020-06-16 22:47:07,3 -204,Outlast - 01008D4007A1E000,01008D4007A1E000,status-playable;nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 4:44:26,7 -205,OKAMI HD - 0100276009872000,0100276009872000,status-playable;nvdec,playable,2024-04-05 6:24:58,6 -207,Luigi's Mansion 3 - 0100DCA0064A6000,0100DCA0064A6000,gpu;slow;status-ingame;Needs Update;ldn-works,ingame,2024-09-27 22:17:36,57 -208,The Legend of Zelda: Link's Awakening - 01006BB00C6F0000,01006BB00C6F0000,gpu;status-ingame;nvdec;mac-bug,ingame,2023-08-09 17:37:40,29 -209,Cat Quest,,status-playable,playable,2020-04-02 23:09:32,4 -216,Xenoblade Chronicles 2: Torna - The Golden Country - 0100C9F009F7A000,0100C9F009F7A000,slow;status-playable;nvdec,playable,2023-01-28 16:47:28,4 -217,Devil May Cry,,nvdec;status-playable,playable,2021-01-04 19:43:08,2 -218,Fire Emblem Warriors - 0100F15003E64000,0100F15003E64000,status-playable;nvdec,playable,2023-05-10 1:53:10,17 -219,Disgaea 4 Complete Plus,,gpu;slow;status-playable,playable,2020-02-18 10:54:28,2 -220,Donkey Kong Country Tropical Freeze - 0100C1F0051B6000,0100C1F0051B6000,status-playable,playable,2024-08-05 16:46:10,16 -221,Puzzle and Dragons GOLD,,slow;status-playable,playable,2020-05-13 15:09:34,2 -222,Fe,,,,2020-01-21 4:08:33,1 -223,MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020 - 010002C00C270000,010002C00C270000,status-ingame;crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55,23 -224,void* tRrLM(); //Void Terrarium - 0100FF7010E7E000,0100FF7010E7E000,gpu;status-ingame;Needs Update;regression,ingame,2023-02-10 1:13:25,8 -225,Cars 3 Driven to Win - 01008D1001512000,01008D1001512000,gpu;status-ingame,ingame,2022-07-21 21:21:05,11 -226,Yu-Gi-Oh! Legacy of the Duelist: Link Evolution! - 010022400BE5A000,010022400BE5A000,status-playable,playable,2024-09-27 21:48:43,23 -227,Baba Is You - 01002CD00A51C000,01002CD00A51C000,status-playable,playable,2022-07-17 5:36:54,8 -228,Thronebreaker: The Witcher Tales - 0100E910103B4000,0100E910103B4000,nvdec;status-playable,playable,2021-06-03 16:40:15,4 -229,Fitness Boxing,,services;status-ingame,ingame,2020-05-17 14:00:48,4 -230,Fire Emblem: Three Houses - 010055D009F78000,010055D009F78000,status-playable;online-broken,playable,2024-09-14 23:53:50,47 -231,Persona 5: Scramble,,deadlock;status-boots,boots,2020-10-04 3:22:29,7 -232,Pokémon Sword - 0100ABF008968000,0100ABF008968000,deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37,63 -233,Mario + Rabbids Kingdom Battle - 010067300059A000,010067300059A000,slow;status-playable;opengl-backend-bug,playable,2024-05-06 10:16:54,20 -234,Tokyo Mirage Sessions #FE Encore - 0100A9400C9C2000,0100A9400C9C2000,32-bit;status-playable;nvdec,playable,2022-07-07 9:41:07,8 -235,Disgaea 1 Complete - 01004B100AF18000,01004B100AF18000,status-playable,playable,2023-01-30 21:45:23,3 -237,初音ミク Project DIVA MEGA39's - 0100F3100DA46000,0100F3100DA46000,audio;status-playable;loader-allocator,playable,2022-07-29 11:45:52,25 -239,Minna de Wai Wai! Spelunker - 0100C3F000BD8000,0100C3F000BD8000,status-nothing;crash,nothing,2021-11-03 7:17:11,4 -242,Nickelodeon Paw Patrol: On a Roll - 0100CEC003A4A000,0100CEC003A4A000,nvdec;status-playable,playable,2021-01-28 21:14:49,5 -243,Rune Factory 4 Special - 010051D00E3A4000,010051D00E3A4000,status-ingame;32-bit;crash;nvdec,ingame,2023-05-06 8:49:17,47 -244,Mario Kart 8 Deluxe - 0100152000022000,0100152000022000,32-bit;status-playable;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17,57 -245,Pokémon Mystery Dungeon Rescue Team DX - 01003D200BAA2000,01003D200BAA2000,status-playable;mac-bug,playable,2024-01-21 0:16:32,9 -246,YGGDRA UNION We’ll Never Fight Alone,,status-playable,playable,2020-04-03 2:20:47,4 -247,メモリーズオフ - Innocent Fille - 010065500B218000,010065500B218000,status-playable,playable,2022-12-02 17:36:48,6 -248,Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town) - 01001D900D9AC000,01001D900D9AC000,slow;status-ingame;crash;Needs Update,ingame,2022-04-24 22:46:04,4 -249,Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition - 0100CE500D226000,0100CE500D226000,status-playable;nvdec;opengl,playable,2022-09-14 15:01:57,14 -250,Animal Crossing: New Horizons - 01006F8002326000,01006F8002326000,gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49,112 -251,Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!,,services;status-menus,menus,2020-03-20 14:00:57,2 -252,Super One More Jump - 0100284007D6C000,0100284007D6C000,status-playable,playable,2022-08-17 16:47:47,5 -253,Trine - 0100D9000A930000,0100D9000A930000,ldn-untested;nvdec;status-playable,playable,2021-06-03 11:28:15,3 -254,Sky Force Reloaded,,status-playable,playable,2021-01-04 20:06:57,3 -255,World of Goo - 010009E001D90000,010009E001D90000,gpu;status-boots;32-bit;crash;regression,boots,2024-04-12 5:52:14,4 -256,ZERO GUNNER 2,,status-playable,playable,2021-01-04 20:17:14,2 -257,Zaccaria Pinball - 010092400A678000,010092400A678000,status-playable;online-broken,playable,2022-09-03 15:44:28,5 -258,1917 - The Alien Invasion DX,,status-playable,playable,2021-01-08 22:11:16,4 -259,Astro Duel Deluxe - 0100F0400351C000,0100F0400351C000,32-bit;status-playable,playable,2021-06-03 11:21:48,4 -260,Another World - 01003C300AAAE000,01003C300AAAE000,slow;status-playable,playable,2022-07-21 10:42:38,4 -261,Ring Fit Adventure - 01002FF008C24000,01002FF008C24000,crash;services;status-nothing,nothing,2021-04-14 19:00:01,7 -262,Arcade Classics Anniversary Collection - 010050000D6C4000,010050000D6C4000,status-playable,playable,2021-06-03 13:55:10,3 -263,Assault Android Cactus+ - 0100DF200B24C000,0100DF200B24C000,status-playable,playable,2021-06-03 13:23:55,6 -264,American Fugitive,,nvdec;status-playable,playable,2021-01-04 20:45:11,2 -265,Nickelodeon Kart Racers,,status-playable,playable,2021-01-07 12:16:49,2 -266,Neonwall - 0100743008694000,0100743008694000,status-playable;nvdec,playable,2022-08-06 18:49:52,3 -267,Never Stop Sneakin',,,,2020-03-19 12:55:40,1 -268,Next Up Hero,,online;status-playable,playable,2021-01-04 22:39:36,2 -269,Ninja Striker,,status-playable,playable,2020-12-08 19:33:29,3 -270,Not Not a Brain Buster,,status-playable,playable,2020-05-10 2:05:26,5 -271,Oh...Sir! The Hollywood Roast,,status-ingame,ingame,2020-12-06 0:42:30,2 -272,Old School Musical,,status-playable,playable,2020-12-10 12:51:12,3 -273,Abyss,,,,2020-03-19 15:41:55,1 -274,Alteric,,status-playable,playable,2020-11-08 13:53:22,10 -277,AIRHEART - Tales of Broken Wings - 01003DD00BFEE000,01003DD00BFEE000,status-playable,playable,2021-02-26 15:20:27,4 -278,Necrosphere,,,,2020-03-19 17:25:03,1 -279,Neverout,,,,2020-03-19 17:33:39,1 -280,Old Man's Journey - 0100CE2007A86000,0100CE2007A86000,nvdec;status-playable,playable,2021-01-28 19:16:52,2 -281,Dr Kawashima's Brain Training - 0100ED000D390000,0100ED000D390000,services;status-ingame,ingame,2023-06-04 0:06:46,3 -282,Nine Parchments - 0100D03003F0E000,0100D03003F0E000,status-playable;ldn-untested,playable,2022-08-07 12:32:08,3 -283,All-Star Fruit Racing - 0100C1F00A9B8000,0100C1F00A9B8000,status-playable;nvdec;UE4,playable,2022-07-21 0:35:37,3 -284,Armello,,nvdec;status-playable,playable,2021-01-07 11:43:26,3 -285,DOOM 64,,nvdec;status-playable;vulkan,playable,2020-10-13 23:47:28,11 -286,Motto New Pazzmatsu-san Shimpin Sotsugyo Keikaku,,,,2020-03-20 14:53:55,1 -287,Refreshing Sideways Puzzle Ghost Hammer,,status-playable,playable,2020-10-18 12:08:54,4 -288,Astebreed - 010057A00C1F6000,010057A00C1F6000,status-playable,playable,2022-07-21 17:33:54,3 -289,ASCENDANCE,,status-playable,playable,2021-01-05 10:54:40,2 -290,Astral Chain - 01007300020FA000,01007300020FA000,status-playable,playable,2024-07-17 18:02:19,15 -291,Oceanhorn,,status-playable,playable,2021-01-05 13:55:22,2 -292,NORTH,,nvdec;status-playable,playable,2021-01-05 16:17:44,2 -293,No Heroes Here,,online;status-playable,playable,2020-05-10 2:41:57,4 -294,New Frontier Days -Founding Pioneers-,,status-playable,playable,2020-12-10 12:45:07,3 -295,Star Ghost,,,,2020-03-20 23:40:10,1 -296,Stern Pinball Arcade - 0100AE0006474000,0100AE0006474000,status-playable,playable,2022-08-16 14:24:41,6 -297,Nightmare Boy,,status-playable,playable,2021-01-05 15:52:29,2 -298,Pinball FX3 - 0100DB7003828000,0100DB7003828000,status-playable;online-broken,playable,2022-11-11 23:49:07,5 -299,Polygod - 010017600B180000,010017600B180000,slow;status-ingame;regression,ingame,2022-08-10 14:38:14,3 -300,Prison Architect - 010029200AB1C000,010029200AB1C000,status-playable,playable,2021-04-10 12:27:58,4 -301,Psikyo Collection Vol 1,,32-bit;status-playable,playable,2020-10-11 13:18:47,3 -302,Raging Justice - 01003D00099EC000,01003D00099EC000,status-playable,playable,2021-06-03 14:06:50,6 -303,Old School Racer 2,,status-playable,playable,2020-10-19 12:11:26,3 -304,Death Road to Canada - 0100423009358000,0100423009358000,gpu;audio;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:26,8 -305,Feather - 0100E4300CB3E000,0100E4300CB3E000,status-playable,playable,2021-06-03 14:11:27,3 -306,Laser Kitty Pow Pow,,,,2020-03-21 23:44:13,1 -307,Bad Dudes,,status-playable,playable,2020-12-10 12:30:56,3 -308,Bomber Crew - 01007900080B6000,01007900080B6000,status-playable,playable,2021-06-03 14:21:28,4 -309,Death Squared,,status-playable,playable,2020-12-04 13:00:15,3 -310,PAC-MAN CHAMPIONSHIP EDITION 2 PLUS,,status-playable,playable,2021-01-19 22:06:18,5 -311,RollerCoaster Tycoon Adventures,,nvdec;status-playable,playable,2021-01-05 18:14:18,2 -312,STAY - 0100616009082000,0100616009082000,crash;services;status-boots,boots,2021-04-23 14:24:52,3 -313,STRIKERS1945 for Nintendo Switch - 0100FF5005B76000,0100FF5005B76000,32-bit;status-playable,playable,2021-06-03 19:35:04,6 -314,STRIKERS1945II for Nintendo Switch - 0100720008ED2000,0100720008ED2000,32-bit;status-playable,playable,2021-06-03 19:43:00,5 -315,BLEED,,,,2020-03-22 9:15:11,1 -316,Earthworms Demo,,status-playable,playable,2021-01-05 16:57:11,2 -317,MEMBRANE,,,,2020-03-22 10:25:32,1 -318,Mercenary Kings,,online;status-playable,playable,2020-10-16 13:05:58,3 -319,Morphite,,status-playable,playable,2021-01-05 19:40:55,2 -320,Spiral Splatter,,status-playable,playable,2020-06-04 14:03:57,3 -321,Odium to the Core,,gpu;status-ingame,ingame,2021-01-08 14:03:52,3 -322,Brawl,,nvdec;slow;status-playable,playable,2020-06-04 14:23:18,3 -323,Defunct,,status-playable,playable,2021-01-08 21:33:46,2 -324,Dracula's Legacy,,nvdec;status-playable,playable,2020-12-10 13:24:25,3 -325,Submerged - 0100EDA00D866000,0100EDA00D866000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01,7 -326,Resident Evil Revelations - 0100643002136000,0100643002136000,status-playable;nvdec;ldn-untested,playable,2022-08-11 12:44:19,3 -327,"Pokémon: Let's Go, Pikachu! - 010003F003A34000",010003F003A34000,status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 7:55:41,23 -328,Syberia 1 & 2 - 01004BB00421E000,01004BB00421E000,status-playable,playable,2021-12-24 12:06:25,8 -329,Light Fall,,nvdec;status-playable,playable,2021-01-18 14:55:36,3 -330,PLANET ALPHA,,UE4;gpu;status-ingame,ingame,2020-12-16 14:42:20,2 -331,Game Doraemon Nobita no Shin Kyoryu - 01006BD00F8C0000,01006BD00F8C0000,gpu;status-ingame,ingame,2023-02-27 2:03:28,3 -332,Shift Happens,,status-playable,playable,2021-01-05 21:24:18,2 -333,SENRAN KAGURA Peach Ball - 0100D1800D902000,0100D1800D902000,status-playable,playable,2021-06-03 15:12:10,3 -334,Shadow Bug,,,,2020-03-23 20:26:08,1 -335,Dandy Dungeon: Legend of Brave Yamada,,status-playable,playable,2021-01-06 9:48:47,2 -336,Scribblenauts Mega Pack,,nvdec;status-playable,playable,2020-12-17 22:56:14,2 -337,Scribblenauts Showdown,,gpu;nvdec;status-ingame,ingame,2020-12-17 23:05:53,2 -338,Super Chariot - 010065F004E5E000,010065F004E5E000,status-playable,playable,2021-06-03 13:19:01,5 -339,Table Top Racing World Tour Nitro Edition,,status-playable,playable,2020-04-05 23:21:30,4 -340,The Pinball Arcade - 0100CD300880E000,0100CD300880E000,status-playable;online-broken,playable,2022-08-22 19:49:46,6 -341,The Room - 010079400BEE0000,010079400BEE0000,status-playable,playable,2021-04-14 18:57:05,4 -342,The Binding of Isaac: Afterbirth+ - 010021C000B6A000,010021C000B6A000,status-playable,playable,2021-04-26 14:11:56,6 -343,World Soccer Pinball,,status-playable,playable,2021-01-06 0:37:02,2 -344,ZOMBIE GOLD RUSH,,online;status-playable,playable,2020-09-24 12:56:08,2 -345,Wondershot - 0100F5D00C812000,0100F5D00C812000,status-playable,playable,2022-08-31 21:05:31,4 -346,Yet Another Zombie Defense HD,,status-playable,playable,2021-01-06 0:18:39,2 -347,Among the Sleep - Enhanced Edition - 010046500C8D2000,010046500C8D2000,nvdec;status-playable,playable,2021-06-03 15:06:25,4 -348,Silence - 0100F1400B0D6000,0100F1400B0D6000,nvdec;status-playable,playable,2021-06-03 14:46:17,2 -349,A Robot Named Fight,,,,2020-03-24 19:27:39,1 -350,60 Seconds! - 0100969005E98000,0100969005E98000,services;status-ingame,ingame,2021-11-30 1:04:14,3 -351,Xenon Racer - 010028600BA16000,010028600BA16000,status-playable;nvdec;UE4,playable,2022-08-31 22:05:30,5 -352,Awesome Pea,,status-playable,playable,2020-10-11 12:39:23,4 -354,Woodle Tree 2,,gpu;slow;status-ingame,ingame,2020-06-04 18:44:00,4 -355,Volgarr the Viking,,status-playable,playable,2020-12-18 15:25:50,4 -356,VVVVVV,,,,2020-03-24 21:53:29,1 -357,Vegas Party - 01009CD003A0A000,01009CD003A0A000,status-playable,playable,2021-04-14 19:21:41,5 -358,Worms W.M.D - 01001AE005166000,01001AE005166000,gpu;status-boots;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59,7 -359,Ambition of the Slimes,,,,2020-03-24 22:46:18,1 -360,WINDJAMMERS,,online;status-playable,playable,2020-10-13 11:24:25,4 -361,WarGroove - 01000F0002BB6000,01000F0002BB6000,status-playable;online-broken,playable,2022-08-31 10:30:45,4 -362,Car Mechanic Manager,,status-playable,playable,2020-07-23 18:50:17,2 -363,Cattails - 010004400B28A000,010004400B28A000,status-playable,playable,2021-06-03 14:36:57,5 -364,Chameleon Run Deluxe Edition,,,,2020-03-25 0:20:21,1 -365,ClusterPuck 99,,status-playable,playable,2021-01-06 0:28:12,2 -366,Coloring Book - 0100A7000BD28000,0100A7000BD28000,status-playable,playable,2022-07-22 11:17:05,5 -367,Crashlands - 010027100BD16000,010027100BD16000,status-playable,playable,2021-05-27 20:30:06,3 -368,Crimsonland - 01005640080B0000,01005640080B0000,status-playable,playable,2021-05-27 20:50:54,2 -369,Cubikolor,,,,2020-03-25 0:39:17,1 -370,My Friend Pedro: Blood Bullets Bananas - 010031200B94C000,010031200B94C000,nvdec;status-playable,playable,2021-05-28 11:19:17,3 -371,VA-11 HALL-A - 0100A6700D66E000,0100A6700D66E000,status-playable,playable,2021-02-26 15:05:34,6 -372,Octodad Dadliest Catch - 0100CAB006F54000,0100CAB006F54000,crash;status-boots,boots,2021-04-23 15:26:12,3 -373,Neko Navy: Daydream Edition,,,,2020-03-25 10:11:47,1 -374,Neon Chrome - 010075E0047F8000,010075E0047F8000,status-playable,playable,2022-08-06 18:38:34,4 -375,NeuroVoider,,status-playable,playable,2020-06-04 18:20:05,3 -376,Ninjin: Clash of Carrots - 010003C00B868000,010003C00B868000,status-playable;online-broken,playable,2024-07-10 5:12:26,10 -377,Nuclien,,status-playable,playable,2020-05-10 5:32:55,3 -378,Number Place 10000 - 010020500C8C8000,010020500C8C8000,gpu;status-menus,menus,2021-11-24 9:14:23,7 -379,Octocopter: Double or Squids,,status-playable,playable,2021-01-06 1:30:16,2 -380,Odallus - 010084300C816000,010084300C816000,status-playable,playable,2022-08-08 12:37:58,4 -381,One Eyed Kutkh,,,,2020-03-25 11:42:58,1 -382,One More Dungeon,,status-playable,playable,2021-01-06 9:10:58,2 -383,1-2-Switch - 01000320000CC000,01000320000CC000,services;status-playable,playable,2022-02-18 14:44:03,3 -384,ACA NEOGEO AERO FIGHTERS 2 - 0100AC40038F4000,0100AC40038F4000,online;status-playable,playable,2021-04-08 15:44:09,3 -385,Captain Toad: Treasure Tracker - 01009BF0072D4000,01009BF0072D4000,32-bit;status-playable,playable,2024-04-25 0:50:16,3 -386,Vaccine,,nvdec;status-playable,playable,2021-01-06 1:02:07,2 -387,Carnival Games - 010088C0092FE000,010088C0092FE000,status-playable;nvdec,playable,2022-07-21 21:01:22,5 -388,OLYMPIC GAMES TOKYO 2020,,ldn-untested;nvdec;online;status-playable,playable,2021-01-06 1:20:24,2 -389,Yodanji,,,,2020-03-25 16:28:53,1 -390,Axiom Verge,,status-playable,playable,2020-10-20 1:07:18,2 -391,Blaster Master Zero - 0100225000FEE000,0100225000FEE000,32-bit;status-playable,playable,2021-03-05 13:22:33,2 -392,SamuraiAces for Nintendo Switch,,32-bit;status-playable,playable,2020-11-24 20:26:55,4 -393,Rogue Aces - 0100EC7009348000,0100EC7009348000,gpu;services;status-ingame;nvdec,ingame,2021-11-30 2:18:30,7 -394,Pokémon HOME,,Needs Update;crash;services;status-menus,menus,2020-12-06 6:01:51,2 -395,Safety First!,,status-playable,playable,2021-01-06 9:05:23,2 -396,3D MiniGolf,,status-playable,playable,2021-01-06 9:22:11,2 -397,DOUBLE DRAGON4,,,,2020-03-25 23:46:46,1 -398,Don't Die Mr. Robot DX - 010007200AC0E000,010007200AC0E000,status-playable;nvdec,playable,2022-09-02 18:34:38,7 -399,DERU - The Art of Cooperation,,status-playable,playable,2021-01-07 16:59:59,4 -400,Darts Up - 0100BA500B660000,0100BA500B660000,status-playable,playable,2021-04-14 17:22:22,2 -401,Deponia - 010023600C704000,010023600C704000,nvdec;status-playable,playable,2021-01-26 17:17:19,2 -402,Devious Dungeon - 01009EA00A320000,01009EA00A320000,status-playable,playable,2021-03-04 13:03:06,2 -403,Turok - 010085500D5F6000,010085500D5F6000,gpu;status-ingame,ingame,2021-06-04 13:16:24,3 -404,Toast Time: Smash Up!,,crash;services;status-menus,menus,2020-04-03 12:26:59,3 -405,The VideoKid,,nvdec;status-playable,playable,2021-01-06 9:28:24,2 -406,Timberman VS,,,,2020-03-26 14:18:29,1 -407,Time Recoil - 0100F770045CA000,0100F770045CA000,status-playable,playable,2022-08-24 12:44:03,3 -408,Toby: The Secret Mine,,nvdec;status-playable,playable,2021-01-06 9:22:33,2 -409,Toki Tori,,,,2020-03-26 14:49:54,1 -410,Totes the Goat,,,,2020-03-26 14:55:00,1 -411,Twin Robots: Ultimate Edition - 0100047009742000,0100047009742000,status-playable;nvdec,playable,2022-08-25 14:24:03,2 -412,Ultimate Runner - 010045200A1C2000,010045200A1C2000,status-playable,playable,2022-08-29 12:52:40,3 -413,UnExplored - Unlocked Edition,,status-playable,playable,2021-01-06 10:02:16,2 -414,Unepic - 01008F80049C6000,01008F80049C6000,status-playable,playable,2024-01-15 17:03:00,6 -415,Uncanny Valley - 01002D900C5E4000,01002D900C5E4000,nvdec;status-playable,playable,2021-06-04 13:28:45,2 -416,Ultra Hyperball,,status-playable,playable,2021-01-06 10:09:55,2 -417,Timespinner - 0100DD300CF3A000,0100DD300CF3A000,gpu;status-ingame,ingame,2022-08-09 9:39:11,5 -418,Tiny Barbarian DX,,,,2020-03-26 18:46:29,1 -419,TorqueL -Physics Modified Edition-,,,,2020-03-26 18:55:23,1 -420,Unholy Heights,,,,2020-03-26 19:03:43,1 -421,Uurnog Uurnlimited,,,,2020-03-26 19:34:02,1 -422,de Blob 2,,nvdec;status-playable,playable,2021-01-06 13:00:16,2 -423,The Trail: Frontier Challenge - 0100B0E0086F6000,0100B0E0086F6000,slow;status-playable,playable,2022-08-23 15:10:51,3 -425,Toy Stunt Bike: Tiptop's Trials - 01009FF00A160000,01009FF00A160000,UE4;status-playable,playable,2021-04-10 13:56:34,3 -426,TumbleSeed,,,,2020-03-26 21:27:06,1 -427,Type:Rider,,status-playable,playable,2021-01-06 13:12:55,2 -428,Dawn of the Breakers - 0100F0B0081DA000,0100F0B0081DA000,status-menus;online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03,5 -429,Thumper - 01006F6002840000,01006F6002840000,gpu;status-ingame,ingame,2024-08-12 2:41:07,6 -430,Revenge of Justice - 010027400F708000 ,010027400F708000,status-playable;nvdec,playable,2022-11-20 15:43:23,3 -431,Dead Synchronicity: Tomorrow Comes Today,,,,2020-03-26 23:13:28,1 -435,Them Bombs,,,,2020-03-27 12:46:15,1 -436,Alwa's Awakening,,status-playable,playable,2020-10-13 11:52:01,5 -437,La Mulana 2 - 010038000F644000,010038000F644000,status-playable,playable,2022-09-03 13:45:57,7 -438,Tied Together - 0100B6D00C2DE000,0100B6D00C2DE000,nvdec;status-playable,playable,2021-04-10 14:03:46,4 -439,Magic Scroll Tactics,,,,2020-03-27 14:00:41,1 -440,SeaBed,,status-playable,playable,2020-05-17 13:25:37,4 -441,Wenjia,,status-playable,playable,2020-06-08 11:38:30,4 -442,DragonBlaze for Nintendo Switch,,32-bit;status-playable,playable,2020-10-14 11:11:28,3 -443,Debris Infinity - 010034F00BFC8000,010034F00BFC8000,nvdec;online;status-playable,playable,2021-05-28 12:14:39,4 -444,Die for Valhalla!,,status-playable,playable,2021-01-06 16:09:14,2 -445,Double Cross,,status-playable,playable,2021-01-07 15:34:22,4 -446,Deep Ones,,services;status-nothing,nothing,2020-04-03 2:54:19,3 -447,One Step to Eden,,,,2020-03-27 16:31:39,1 -448,Bravely Default II Demo - 0100B6801137E000,0100B6801137E000,gpu;status-ingame;crash;UE4;demo,ingame,2022-09-27 5:39:47,7 -449,Prison Princess - 0100F4800F872000,0100F4800F872000,status-playable,playable,2022-11-20 15:00:25,4 -450,NinNinDays - 0100746010E4C000,0100746010E4C000,status-playable,playable,2022-11-20 15:17:29,4 -451,Syrup and the Ultimate Sweet,,,,2020-03-27 21:10:42,1 -452,Touhou Gensou Mahjong,,,,2020-03-27 21:36:20,1 -453,Shikhondo Soul Eater,,,,2020-03-27 22:14:23,1 -454, de Shooting wa Machigatteiru Daroka,,,,2020-03-27 22:27:54,1 -456,MY HERO ONE'S JUSTICE,,UE4;crash;gpu;online;status-menus,menus,2020-12-10 13:11:04,7 -457,Heaven Dust,,status-playable,playable,2020-05-17 14:02:41,4 -458,Touhou Sky Arena matsuri climax,,,,2020-03-28 0:25:17,1 -459,Mercenaries Wings The False Phoenix,,crash;services;status-nothing,nothing,2020-05-08 22:42:12,4 -460,Don't Sink - 0100C4D00B608000,0100C4D00B608000,gpu;status-ingame,ingame,2021-02-26 15:41:11,4 -461,Disease -Hidden Object-,,,,2020-03-28 8:17:51,1 -462,Dexteritrip,,status-playable,playable,2021-01-06 12:51:12,2 -463,Devil Engine - 010031B00CF66000,010031B00CF66000,status-playable,playable,2021-06-04 11:54:30,5 -464,Detective Gallo - 01009C0009842000,01009C0009842000,status-playable;nvdec,playable,2022-07-24 11:51:04,2 -465,Zettai kaikyu gakuen,,gpu;nvdec;status-ingame,ingame,2020-08-25 15:15:54,2 -466,Demetrios - The BIG Cynical Adventure - 0100AB600ACB4000,0100AB600ACB4000,status-playable,playable,2021-06-04 12:01:01,3 -467,Degrees of Separation,,status-playable,playable,2021-01-10 13:40:04,6 -468,De Mambo - 01008E900471E000,01008E900471E000,status-playable,playable,2021-04-10 12:39:40,4 -469,Death Mark,,status-playable,playable,2020-12-13 10:56:25,3 -470,Deemo - 01002CC0062B8000,01002CC0062B8000,status-playable,playable,2022-07-24 11:34:33,4 -472,Disgaea 5 Complete - 01005700031AE000,01005700031AE000,nvdec;status-playable,playable,2021-03-04 15:32:54,2 -473,The World Ends With You -Final Remix- - 0100C1500B82E000,0100C1500B82E000,status-playable;ldn-untested,playable,2022-07-09 1:11:21,13 -474,Don't Knock Twice - 0100E470067A8000,0100E470067A8000,status-playable,playable,2024-05-08 22:37:58,3 -475,True Fear: Forsaken Souls - Part 1,,nvdec;status-playable,playable,2020-12-15 21:39:52,3 -476,Disco Dodgeball Remix,,online;status-playable,playable,2020-09-28 23:24:49,2 -477,Demon's Crystals - 0100A2B00BD88000,0100A2B00BD88000,status-nothing;crash;regression,nothing,2022-12-07 16:33:17,3 -478,Dimension Drive,,,,2020-03-29 10:40:38,1 -479,Tower of Babel,,status-playable,playable,2021-01-06 17:05:15,2 -480,Disc Jam - 0100510004D2C000,0100510004D2C000,UE4;ldn-untested;nvdec;online;status-playable,playable,2021-04-08 16:40:35,4 -481,DIABOLIK LOVERS CHAOS LINEAGE - 010027400BD24000,010027400BD24000,gpu;status-ingame;Needs Update,ingame,2023-06-08 2:20:44,21 -482,Detention,,,,2020-03-29 11:17:35,1 -483,Tumblestone,,status-playable,playable,2021-01-07 17:49:20,4 -484,De Blob,,nvdec;status-playable,playable,2021-01-06 17:34:46,2 -485,The Voice ,,services;status-menus,menus,2020-07-28 20:48:49,2 -486,DESTINY CONNECT,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 12:20:36,2 -487,The Sexy Brutale,,status-playable,playable,2021-01-06 17:48:28,2 -488,Unicornicopia,,,,2020-03-29 13:01:35,1 -489,Ultra Space Battle Brawl,,,,2020-03-29 13:13:02,1 -490,Unruly Heroes,,status-playable,playable,2021-01-07 18:09:31,4 -491,UglyDolls: An Imperfect Adventure - 010079000B56C000,010079000B56C000,status-playable;nvdec;UE4,playable,2022-08-25 14:42:16,5 -492,Use Your Words - 01007C0003AEC000,01007C0003AEC000,status-menus;nvdec;online-broken,menus,2022-08-29 17:22:10,6 -493,New Super Lucky's Tale - 010017700B6C2000,010017700B6C2000,status-playable,playable,2024-03-11 14:14:10,7 -494,Yooka-Laylee and the Impossible Lair - 010022F00DA66000,010022F00DA66000,status-playable,playable,2021-03-05 17:32:21,4 -495,GRIS - 0100E1700C31C000,0100E1700C31C000,nvdec;status-playable,playable,2021-06-03 13:33:44,3 -496,Monster Boy and the Cursed Kingdom - 01006F7001D10000,01006F7001D10000,status-playable;nvdec,playable,2022-08-04 20:06:32,3 -497,Guns Gore and Cannoli 2,,online;status-playable,playable,2021-01-06 18:43:59,2 -498,Mark of the Ninja Remastered - 01009A700A538000,01009A700A538000,status-playable,playable,2022-08-04 15:48:30,4 -499,DOOM - 0100416004C00000,0100416004C00000,gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-09-23 15:40:07,11 -500,TINY METAL - 010074800741A000,010074800741A000,UE4;gpu;nvdec;status-ingame,ingame,2021-03-05 17:11:57,3 -501,Shadowgate,,status-playable,playable,2021-04-24 7:32:57,2 -502,R-Type Dimensions EX,,status-playable,playable,2020-10-09 12:04:43,3 -503,Thea: The Awakening,,status-playable,playable,2021-01-18 15:08:47,3 -506,Toki,,nvdec;status-playable,playable,2021-01-06 19:59:23,2 -507,Superhot - 01001A500E8B4000,01001A500E8B4000,status-playable,playable,2021-05-05 19:51:30,2 -508,Tools Up!,,crash;status-ingame,ingame,2020-07-21 12:58:17,4 -509,The Stretchers - 0100AA400A238000,0100AA400A238000,status-playable;nvdec;UE4,playable,2022-09-16 15:40:58,7 -510,Shantae: Half-Genie Hero Ultimate Edition,,status-playable,playable,2020-06-04 20:14:20,4 -511,Monster Hunter Generation Ultimate - 0100770008DD8000,0100770008DD8000,32-bit;status-playable;online-broken;ldn-works,playable,2024-03-18 14:35:36,25 -512,ATV Drift & Tricks - 01000F600B01E000,01000F600B01E000,UE4;online;status-playable,playable,2021-04-08 17:29:17,4 -513,Metaloid: Origin,,status-playable,playable,2020-06-04 20:26:35,3 -514,The Walking Dead: The Final Season - 010060F00AA70000,010060F00AA70000,status-playable;online-broken,playable,2022-08-23 17:22:32,3 -515,Lyrica,,,,2020-03-31 10:09:40,1 -516,Beat Cop,,status-playable,playable,2021-01-06 19:26:48,2 -517,Broforce - 010060A00B53C000,010060A00B53C000,ldn-untested;online;status-playable,playable,2021-05-28 12:23:38,4 -518,Ludo Mania,,crash;services;status-nothing,nothing,2020-04-03 0:33:47,2 -519,The Way Remastered,,,,2020-03-31 10:34:26,1 -520,Little Inferno,,32-bit;gpu;nvdec;status-ingame,ingame,2020-12-17 21:43:56,3 -521,Toki Tori 2+,,,,2020-03-31 10:53:13,1 -522,Bastion - 010038600B27E000,010038600B27E000,status-playable,playable,2022-02-15 14:15:24,5 -523,Lovers in a Dangerous Spacetime,,,,2020-03-31 13:45:03,1 -524,Back in 1995,,,,2020-03-31 13:52:35,1 -525,Lost Phone Stories,,services;status-ingame,ingame,2020-04-05 23:17:33,4 -526,The Walking Dead - 010029200B6AA000,010029200B6AA000,status-playable,playable,2021-06-04 13:10:56,3 -527,Beyblade Burst Battle Zero - 010068600AD16000,010068600AD16000,services;status-menus;crash;Needs Update,menus,2022-11-20 15:48:32,8 -528,Tiny Hands Adventure - 010061A00AE64000,010061A00AE64000,status-playable,playable,2022-08-24 16:07:48,3 -529,My Time At Portia - 0100E25008E68000,0100E25008E68000,status-playable,playable,2021-05-28 12:42:55,3 -531,NBA 2K Playgrounds 2 - 01001AE00C1B2000,01001AE00C1B2000,status-playable;nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38,5 -532,Valfaris - 010089700F30C000,010089700F30C000,status-playable,playable,2022-09-16 21:37:24,5 -533,Wandersong - 0100F8A00853C000,0100F8A00853C000,nvdec;status-playable,playable,2021-06-04 15:33:34,6 -535,Untitled Goose Game,,status-playable,playable,2020-09-26 13:18:06,2 -536,Unbox: Newbie's Adventure - 0100592005164000,0100592005164000,status-playable;UE4,playable,2022-08-29 13:12:56,4 -537,Trine 4: The Nightmare Prince - 010055E00CA68000,010055E00CA68000,gpu;status-nothing,nothing,2025-01-07 5:47:46,9 -538,Travis Strikes Again: No More Heroes - 010011600C946000,010011600C946000,status-playable;nvdec;UE4,playable,2022-08-25 12:36:38,6 -539,Bubble Bobble 4 Friends - 010010900F7B4000,010010900F7B4000,nvdec;status-playable,playable,2021-06-04 15:27:55,7 -540,Bloodstained: Curse of the Moon,,status-playable,playable,2020-09-04 10:42:17,2 -541,Unravel TWO - 0100E5D00CC0C000,0100E5D00CC0C000,status-playable;nvdec,playable,2024-05-23 15:45:05,14 -542,Blazing Beaks,,status-playable,playable,2020-06-04 20:37:06,5 -543,Moonlighter,,,,2020-04-01 12:52:32,1 -544,Rock N' Racing Grand Prix,,status-playable,playable,2021-01-06 20:23:57,2 -545,Blossom Tales - 0100C1000706C000,0100C1000706C000,status-playable,playable,2022-07-18 16:43:07,3 -546,Maria The Witch,,,,2020-04-01 13:22:05,1 -547,Runbow,,online;status-playable,playable,2021-01-08 22:47:44,5 -548,Salt And Sanctuary,,status-playable,playable,2020-10-22 11:52:19,3 -549,Bomb Chicken,,,,2020-04-01 13:52:21,1 -550,Typoman,,,,2020-04-01 14:01:55,1 -551,BOX Align,,crash;services;status-nothing,nothing,2020-04-03 17:26:56,3 -552,Bridge Constructor Portal,,,,2020-04-01 14:59:34,1 -553,METAGAL,,status-playable,playable,2020-06-05 0:05:48,3 -554,Severed,,status-playable,playable,2020-12-15 21:48:48,3 -555,Bombslinger - 010087300445A000,010087300445A000,services;status-menus,menus,2022-07-19 12:53:15,5 -556,ToeJam & Earl: Back in the Groove,,status-playable,playable,2021-01-06 22:56:58,2 -557,SHIFT QUANTUM,,UE4;crash;status-ingame,ingame,2020-11-06 21:54:08,2 -558,Mana Spark,,status-playable,playable,2020-12-10 13:41:01,3 -559,BOOST BEAST,,,,2020-04-01 22:07:28,1 -560,Bass Pro Shops: The Strike - Championship Edition - 0100E3100450E000,0100E3100450E000,gpu;status-boots;32-bit,boots,2022-12-09 15:58:16,6 -561,Semispheres,,status-playable,playable,2021-01-06 23:08:31,2 -562,Megaton Rainfall - 010005A00B312000,010005A00B312000,gpu;status-boots;opengl,boots,2022-08-04 18:29:43,5 -563,Romancing SaGa 2 - 01001F600829A000,01001F600829A000,status-playable,playable,2022-08-12 12:02:24,3 -564,Runner3,,,,2020-04-02 12:58:46,1 -565,Shakedown: Hawaii,,status-playable,playable,2021-01-07 9:44:36,2 -566,Minit,,,,2020-04-02 13:15:45,1 -567,Little Nightmares - 01002FC00412C000,01002FC00412C000,status-playable;nvdec;UE4,playable,2022-08-03 21:45:35,7 -568,Shephy,,,,2020-04-02 13:33:44,1 -569,Millie - 0100976008FBE000,0100976008FBE000,status-playable,playable,2021-01-26 20:47:19,3 -570,Bloodstained: Ritual of the Night - 010025A00DF2A000,010025A00DF2A000,status-playable;nvdec;UE4,playable,2022-07-18 14:27:35,4 -571,Shape Of The World - 0100B250009B96000,0100B250009B9600,UE4;status-playable,playable,2021-03-05 16:42:28,3 -572,Bendy and the Ink Machine - 010074500BBC4000,010074500BBC4000,status-playable,playable,2023-05-06 20:35:39,4 -573,Brothers: A Tale of Two Sons - 01000D500D08A000,01000D500D08A000,status-playable;nvdec;UE4,playable,2022-07-19 14:02:22,6 -574,Raging Loop,,,,2020-04-03 12:29:28,1 -575,A Hat In Time - 010056E00853A000,010056E00853A000,status-playable,playable,2024-06-25 19:52:44,4 -576,Cooking Mama: Cookstar - 010060700EFBA000,010060700EFBA000,status-menus;crash;loader-allocator,menus,2021-11-20 3:19:35,3 -578,Marble Power Blast - 01008E800D1FE000,01008E800D1FE000,status-playable,playable,2021-06-04 16:00:02,3 -579,NARUTO™: Ultimate Ninja® STORM - 0100715007354000,0100715007354000,status-playable;nvdec,playable,2022-08-06 14:10:31,3 -580,Oddmar,,,,2020-04-04 20:46:28,1 -581,BLEED 2,,,,2020-04-05 11:29:05,1 -582,Sea King - 0100E4A00D066000,0100E4A00D066000,UE4;nvdec;status-playable,playable,2021-06-04 15:49:22,2 -583,Sausage Sports Club,,gpu;status-ingame,ingame,2021-01-10 5:37:17,2 -584,Mini Metro,,,,2020-04-05 11:55:19,1 -585,Mega Mall Story - 0100BBC00CB9A000,0100BBC00CB9A000,slow;status-playable,playable,2022-08-04 17:10:58,3 -586,BILLIARD,,,,2020-04-05 13:41:11,1 -587,The Wardrobe,,,,2020-04-05 13:53:33,1 -588,LITTLE FRIENDS -DOGS & CATS-,,status-playable,playable,2020-11-12 12:45:51,3 -589,LOST SPHEAR,,status-playable,playable,2021-01-10 6:01:21,2 -590,Morphies Law,,UE4;crash;ldn-untested;nvdec;online;status-menus,menus,2020-11-22 17:05:29,4 -591,Mercenaries Saga Chronicles,,status-playable,playable,2021-01-10 12:48:19,2 -592,The Swindle - 010040D00B7CE000,010040D00B7CE000,status-playable;nvdec,playable,2022-08-22 20:53:52,2 -593,Monster Energy Supercross - The Official Videogame - 0100742007266000,0100742007266000,status-playable;nvdec;UE4,playable,2022-08-04 20:25:00,5 -594,Monster Energy Supercross - The Official Videogame 2 - 0100F8100B982000,0100F8100B982000,status-playable;nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24,5 -595,Lumo - 0100FF00042EE000,0100FF00042EE000,status-playable;nvdec,playable,2022-02-11 18:20:30,5 -596,Monopoly for Nintendo Switch - 01007430037F6000,01007430037F6000,status-playable;nvdec;online-broken,playable,2024-02-06 23:13:01,7 -597,Mantis Burn Racing - 0100E98002F6E000,0100E98002F6E000,status-playable;online-broken;ldn-broken,playable,2024-09-02 2:13:04,4 -598,Moorhuhn Remake,,,,2020-04-05 19:22:41,1 -599,Lovecraft's Untold Stories,,,,2020-04-05 19:31:15,1 -600,Moonfall Ultimate,,nvdec;status-playable,playable,2021-01-17 14:01:25,2 -602,Max: The Curse Of Brotherhood - 01001C9007614000,01001C9007614000,status-playable;nvdec,playable,2022-08-04 16:33:04,2 -603,Manticore - Galaxy on Fire - 0100C9A00952A000,0100C9A00952A000,status-boots;crash;nvdec,boots,2024-02-04 4:37:24,6 -604,The Shapeshifting Detective,,nvdec;status-playable,playable,2021-01-10 13:10:49,2 -605,Mom Hid My Game!,,,,2020-04-06 11:32:10,1 -606,Meow Motors,,UE4;gpu;status-ingame,ingame,2020-12-18 0:24:01,3 -607,Mahjong Solitaire Refresh - 01008C300B624000,01008C300B624000,status-boots;crash,boots,2022-12-09 12:02:55,5 -608,Lucah: Born of a Dream,,,,2020-04-06 12:11:01,1 -609,Moon Hunters,,,,2020-04-06 12:35:17,1 -610,Mad Carnage,,status-playable,playable,2021-01-10 13:00:07,2 -611,Monument Builders Rushmore,,,,2020-04-06 13:49:35,1 -612,Lost Sea,,,,2020-04-06 14:08:14,1 -613,Mahjong Deluxe 3,,,,2020-04-06 14:13:32,1 -614,MONSTER JAM CRUSH IT!™ - 010088400366E000,010088400366E000,UE4;nvdec;online;status-playable,playable,2021-04-08 19:29:27,5 -615,Midnight Deluxe,,,,2020-04-06 14:33:34,1 -616,Metropolis: Lux Obscura,,,,2020-04-06 14:47:15,1 -617,Lode Runner Legacy,,status-playable,playable,2021-01-10 14:10:28,2 -618,Masters of Anima - 0100CC7009196000,0100CC7009196000,status-playable;nvdec,playable,2022-08-04 16:00:09,4 -619,Monster Dynamite,,,,2020-04-06 17:55:14,1 -620,The Warlock of Firetop Mountain,,,,2020-04-06 21:44:13,1 -621,Mecho Tales - 0100C4F005EB4000,0100C4F005EB4000,status-playable,playable,2022-08-04 17:03:19,4 -622,Titan Quest - 0100605008268000,0100605008268000,status-playable;nvdec;online-broken,playable,2022-08-19 21:54:15,4 -623,This Is the Police - 0100066004D68000,0100066004D68000,status-playable,playable,2022-08-24 11:37:05,3 -625,Miles & Kilo,,status-playable,playable,2020-10-22 11:39:49,3 -626,This War of Mine: Complete Edition - 0100A8700BC2A000,0100A8700BC2A000,gpu;status-ingame;32-bit;nvdec,ingame,2022-08-24 12:00:44,5 -627,Transistor,,status-playable,playable,2020-10-22 11:28:02,3 -628,Momodora: Revere Under the Moonlight - 01004A400C320000,01004A400C320000,deadlock;status-nothing,nothing,2022-02-06 3:47:43,4 -629,Monster Puzzle,,status-playable,playable,2020-09-28 22:23:10,2 -630,Tiny Troopers Joint Ops XL,,,,2020-04-07 12:30:46,1 -631,This Is the Police 2 - 01004C100A04C000,01004C100A04C000,status-playable,playable,2022-08-24 11:49:17,3 -633,Trials Rising - 01003E800A102000,01003E800A102000,status-playable,playable,2024-02-11 1:36:39,11 -634,Mainlining,,status-playable,playable,2020-06-05 1:02:00,3 -635,Treadnauts,,status-playable,playable,2021-01-10 14:57:41,2 -636,Treasure Stack,,,,2020-04-07 13:27:32,1 -637,Monkey King: Master of the Clouds,,status-playable,playable,2020-09-28 22:35:48,2 -638,Trailblazers - 0100BCA00843A000,0100BCA00843A000,status-playable,playable,2021-03-02 20:40:49,2 -639,Stardew Valley - 0100E65002BB8000,0100E65002BB8000,status-playable;online-broken;ldn-untested,playable,2024-02-14 3:11:19,16 -640,TT Isle of Man,,nvdec;status-playable,playable,2020-06-22 12:25:13,3 -641,Truberbrook - 0100E6300D448000,0100E6300D448000,status-playable,playable,2021-06-04 17:08:00,3 -642,Troll and I - 0100F78002040000,0100F78002040000,gpu;nvdec;status-ingame,ingame,2021-06-04 16:58:50,3 -644,Rock 'N Racing Off Road DX,,status-playable,playable,2021-01-10 15:27:15,2 -645,Touhou Genso Wanderer RELOADED - 01004E900B082000,01004E900B082000,gpu;status-ingame;nvdec,ingame,2022-08-25 11:57:36,3 -646,Splasher,,,,2020-04-08 11:02:41,1 -647,Rogue Trooper Redux - 01001CC00416C000,01001CC00416C000,status-playable;nvdec;online-broken,playable,2022-08-12 11:53:01,4 -648,Semblance,,,,2020-04-08 11:22:11,1 -649,Saints Row: The Third - The Full Package - 0100DE600BEEE000,0100DE600BEEE000,slow;status-playable;LAN,playable,2023-08-24 2:40:58,4 -650,SEGA AGES PHANTASY STAR,,status-playable,playable,2021-01-11 12:49:48,2 -651,SEGA AGES SPACE HARRIER,,status-playable,playable,2021-01-11 12:57:40,2 -652,SEGA AGES OUTRUN,,status-playable,playable,2021-01-11 13:13:59,2 -653,Schlag den Star - 0100ACB004006000,0100ACB004006000,slow;status-playable;nvdec,playable,2022-08-12 14:28:22,4 -654,Serial Cleaner,,,,2020-04-08 15:26:22,1 -655,Rotating Brave,,,,2020-04-09 12:25:59,1 -656,SteamWorld Quest,,nvdec;status-playable,playable,2020-11-09 13:10:04,3 -657,Shaq Fu: A Legend Reborn,,,,2020-04-09 13:24:32,1 -658,Season Match Bundle - Part 1 and 2,,status-playable,playable,2021-01-11 13:28:23,2 -659,Bulb Boy,,,,2020-04-09 16:22:39,1 -660,SteamWorld Dig - 01009320084A4000,01009320084A4000,status-playable,playable,2024-08-19 12:12:23,3 -661,Shadows of Adam,,status-playable,playable,2021-01-11 13:35:58,2 -662,Battle Princess Madelyn,,status-playable,playable,2021-01-11 13:47:23,2 -663,Shiftlings - 01000750084B2000,01000750084B2000,nvdec;status-playable,playable,2021-03-04 13:49:54,2 -664,Save the Ninja Clan,,status-playable,playable,2021-01-11 13:56:37,2 -665,SteamWorld Heist: Ultimate Edition,,,,2020-04-10 11:21:15,1 -666,Battle Chef Brigade,,status-playable,playable,2021-01-11 14:16:28,2 -667,Shelter Generations - 01009EB004CB0000,01009EB004CB0000,status-playable,playable,2021-06-04 16:52:39,3 -668,Bow to Blood: Last Captain Standing,,slow;status-playable,playable,2020-10-23 10:51:21,3 -669,Samsara,,status-playable,playable,2021-01-11 15:14:12,2 -670,Touhou Kobuto V: Burst Battle,,status-playable,playable,2021-01-11 15:28:58,2 -671,Screencheat,,,,2020-04-10 13:16:02,1 -672,BlobCat - 0100F3500A20C000,0100F3500A20C000,status-playable,playable,2021-04-23 17:09:30,3 -673,SteamWorld Dig 2 - 0100CA9002322000,0100CA9002322000,status-playable,playable,2022-12-21 19:25:42,4 -674,She Remembered Caterpillars - 01004F50085F2000,01004F50085F2000,status-playable,playable,2022-08-12 17:45:14,3 -675,Broken Sword 5 - the Serpent's Curse - 01001E60085E6000,01001E60085E6000,status-playable,playable,2021-06-04 17:28:59,3 -676,Banner Saga 3,,slow;status-boots,boots,2021-01-11 16:53:57,2 -677,Stranger Things 3: The Game,,status-playable,playable,2021-01-11 17:44:09,2 -678,Blades of Time - 0100CFA00CC74000,0100CFA00CC74000,deadlock;status-boots;online,boots,2022-07-17 19:19:58,8 -679,BLAZBLUE CENTRALFICTION Special Edition,,nvdec;status-playable,playable,2020-12-15 23:50:04,3 -680,Brawlout - 010060200A4BE000,010060200A4BE000,ldn-untested;online;status-playable,playable,2021-06-04 17:35:35,4 -681,Bouncy Bob,,,,2020-04-10 16:45:27,1 -682,Broken Age - 0100EDD0068A6000,0100EDD0068A6000,status-playable,playable,2021-06-04 17:40:32,3 -683,Attack on Titan 2,,status-playable,playable,2021-01-04 11:40:01,3 -684,Battle Worlds: Kronos - 0100DEB00D5A8000,0100DEB00D5A8000,nvdec;status-playable,playable,2021-06-04 17:48:02,3 -685,BLADE ARCUS Rebellion From Shining - 0100C4400CB7C000,0100C4400CB7C000,status-playable,playable,2022-07-17 18:52:28,4 -686,Away: Journey to the Unexpected - 01002F1005F3C000,01002F1005F3C000,status-playable;nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04,5 -687,Batman: The Enemy Within,,crash;status-nothing,nothing,2020-10-16 5:49:27,2 -688,Batman - The Telltale Series,,nvdec;slow;status-playable,playable,2021-01-11 18:19:35,2 -689,Big Crown: Showdown - 010088100C35E000,010088100C35E000,status-menus;nvdec;online;ldn-untested,menus,2022-07-17 18:25:32,4 -690,Strike Suit Zero: Director's Cut - 010072500D52E000,010072500D52E000,crash;status-boots,boots,2021-04-23 17:15:14,3 -691,Black Paradox,,,,2020-04-11 12:13:22,1 -692,Spelunker Party! - 010021F004270000,010021F004270000,services;status-boots,boots,2022-08-16 11:25:49,4 -693,OK K.O.! Let's Play Heroes,,nvdec;status-playable,playable,2021-01-11 18:41:02,2 -694,Steredenn,,status-playable,playable,2021-01-13 9:19:42,2 -695,State of Mind,,UE4;crash;status-boots,boots,2020-06-22 22:17:50,2 -696,Bloody Zombies,,,,2020-04-11 18:23:57,1 -697,MudRunner - American Wilds - 01009D200952E000,01009D200952E000,gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52,6 -698,Big Buck Hunter Arcade,,nvdec;status-playable,playable,2021-01-12 20:31:39,2 -699,Sparkle 2 Evo,,,,2020-04-11 18:48:19,1 -700,Brave Dungeon + Dark Witch's Story: COMBAT,,status-playable,playable,2021-01-12 21:06:34,2 -701,BAFL,,status-playable,playable,2021-01-13 8:32:51,2 -702,Steamburg,,status-playable,playable,2021-01-13 8:42:01,2 -703,Splatoon 2 - 01003BC0000A0000,01003BC0000A0000,status-playable;ldn-works;LAN,playable,2024-07-12 19:11:15,25 -704,Blade Strangers - 01005950022EC000,01005950022EC000,status-playable;nvdec,playable,2022-07-17 19:02:43,5 -705,Sports Party - 0100DE9005170000,0100DE9005170000,nvdec;status-playable,playable,2021-03-05 13:40:42,4 -706,Banner Saga,,,,2020-04-12 14:06:23,1 -707,Banner Saga 2,,crash;status-boots,boots,2021-01-13 8:56:09,2 -708,Hand of Fate 2 - 01003620068EA000,01003620068EA000,status-playable,playable,2022-08-01 15:44:16,3 -709,State of Anarchy: Master of Mayhem,,nvdec;status-playable,playable,2021-01-12 19:00:05,2 -710,Sphinx and the Cursed Mummy™ - 0100BD500BA94000,0100BD500BA94000,gpu;status-ingame;32-bit;opengl,ingame,2024-05-20 6:00:51,15 -711,Risk - 0100E8300A67A000,0100E8300A67A000,status-playable;nvdec;online-broken,playable,2022-08-01 18:53:28,5 -712,Baseball Riot - 01004860080A0000,01004860080A0000,status-playable,playable,2021-06-04 18:07:27,4 -713,Spartan - 0100E6A009A26000,0100E6A009A26000,UE4;nvdec;status-playable,playable,2021-03-05 15:53:19,3 -714,Halloween Pinball,,status-playable,playable,2021-01-12 16:00:46,2 -715,Streets of Red : Devil's Dare Deluxe,,,,2020-04-12 18:08:29,1 -716,Spider Solitaire F,,,,2020-04-12 20:26:44,1 -717,Starship Avenger Operation: Take Back Earth,,status-playable,playable,2021-01-12 15:52:55,2 -718,Battle Chasers: Nightwar,,nvdec;slow;status-playable,playable,2021-01-12 12:27:34,2 -719,Infinite Minigolf,,online;status-playable,playable,2020-09-29 12:26:25,2 -720,Blood Waves - 01007E700D17E000,01007E700D17E000,gpu;status-ingame,ingame,2022-07-18 13:04:46,4 -722,Stick It to the Man,,,,2020-04-13 12:29:25,1 -723,Bad Dream: Fever - 0100B3B00D81C000,0100B3B00D81C000,status-playable,playable,2021-06-04 18:33:12,6 -724,Spectrum - 01008B000A5AE000,01008B000A5AE000,status-playable,playable,2022-08-16 11:15:59,3 -725,Battlezone Gold Edition - 01006D800A988000,01006D800A988000,gpu;ldn-untested;online;status-boots,boots,2021-06-04 18:36:05,3 -726,Squareboy vs Bullies: Arena Edition,,,,2020-04-13 12:51:57,1 -727,Beach Buggy Racing - 010095C00406C000,010095C00406C000,online;status-playable,playable,2021-04-13 23:16:50,2 -728,Avenger Bird,,,,2020-04-13 13:01:51,1 -729,Beholder,,status-playable,playable,2020-10-16 12:48:58,3 -730,Binaries,,,,2020-04-13 13:12:42,1 -731,Space Ribbon - 010010A009830000,010010A009830000,status-playable,playable,2022-08-15 17:17:10,3 -732,BINGO for Nintendo Switch,,status-playable,playable,2020-07-23 16:17:36,2 -733,Bibi Blocksberg - Big Broom Race 3,,status-playable,playable,2021-01-11 19:07:16,2 -734,Sparkle 3: Genesis,,,,2020-04-13 14:01:48,1 -735,"Bury me, my Love",,status-playable,playable,2020-11-07 12:47:37,3 -736,Bad North - 0100E98006F22000,0100E98006F22000,status-playable,playable,2022-07-17 13:44:25,4 -737,Stikbold! A Dodgeball Adventure DELUXE,,status-playable,playable,2021-01-11 20:12:54,2 -738,BUTCHER,,status-playable,playable,2021-01-11 18:50:17,2 -739,Bird Game + - 01001B700B278000,01001B700B278000,status-playable;online,playable,2022-07-17 18:41:57,3 -740,SpiritSphere DX - 01009D60080B4000,01009D60080B4000,status-playable,playable,2021-07-03 23:37:49,3 -741,Behind The Screen,,,,2020-04-13 15:41:34,1 -742,Bibi & Tina - Adventures with Horses,,nvdec;slow;status-playable,playable,2021-01-13 8:58:09,2 -743,Space Dave,,,,2020-04-13 15:57:37,1 -744,Hellblade: Senua's Sacrifice - 010044500CF8E000,010044500CF8E000,gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50,5 -745,Happy Birthdays,,,,2020-04-13 23:34:41,1 -746,GUILTY GEAR XX ACCENT CORE PLUS R,,nvdec;status-playable,playable,2021-01-13 9:28:33,2 -747,Hob: The Definitive Edition,,status-playable,playable,2021-01-13 9:39:19,2 -748,Jurassic Pinball - 0100CE100A826000,0100CE100A826000,status-playable,playable,2021-06-04 19:02:37,3 -749,Hyper Light Drifter - Special Edition - 01003B200B372000,01003B200B372000,status-playable;vulkan-backend-bug,playable,2023-01-13 15:44:48,13 -750,GUNBIRD for Nintendo Switch - 01003C6008940000,01003C6008940000,32-bit;status-playable,playable,2021-06-04 19:16:01,4 -751,GUNBIRD2 for Nintendo Switch,,status-playable,playable,2020-10-10 14:41:16,3 -752,Hammerwatch - 01003B9007E86000,01003B9007E86000,status-playable;online-broken;ldn-broken,playable,2022-08-01 16:28:46,2 -753,Into The Breach,,,,2020-04-14 14:05:04,1 -754,Horizon Chase Turbo - 01009EA00B714000,01009EA00B714000,status-playable,playable,2021-02-19 19:40:56,4 -755,Gunlord X,,,,2020-04-14 14:30:34,1 -756,Ittle Dew 2+,,status-playable,playable,2020-11-17 11:44:32,2 -757,Hue,,,,2020-04-14 14:52:35,1 -758,Iconoclasts - 0100BC60099FE000,0100BC60099FE000,status-playable,playable,2021-08-30 21:11:04,5 -759,James Pond Operation Robocod,,status-playable,playable,2021-01-13 9:48:45,2 -760,Hello Neighbor - 0100FAA00B168000,0100FAA00B168000,status-playable;UE4,playable,2022-08-01 21:32:23,5 -761,Gunman Clive HD Collection,,status-playable,playable,2020-10-09 12:17:35,3 -762,Human Resource Machine,,32-bit;status-playable,playable,2020-12-17 21:47:09,2 -763,INSIDE - 0100D2D009028000,0100D2D009028000,status-playable,playable,2021-12-25 20:24:56,3 -765,Hello Neighbor: Hide And Seek,,UE4;gpu;slow;status-ingame,ingame,2020-10-24 10:59:57,3 -766,Has-Been Heroes,,status-playable,playable,2021-01-13 13:31:48,2 -767,GUNBARICH for Nintendo Switch,,,,2020-04-14 21:58:40,1 -768,Hell is Other Demons,,status-playable,playable,2021-01-13 13:23:02,2 -769,"I, Zombie",,status-playable,playable,2021-01-13 14:53:44,2 -770,Hello Kitty Kruisers With Sanrio Friends - 010087D0084A8000,010087D0084A8000,nvdec;status-playable,playable,2021-06-04 19:08:46,3 -771,IMPLOSION - 0100737003190000,0100737003190000,status-playable;nvdec,playable,2021-12-12 3:52:13,4 -772,Ikaruga - 01009F20086A0000,01009F20086A0000,status-playable,playable,2023-04-06 15:00:02,4 -773,Ironcast,,status-playable,playable,2021-01-13 13:54:29,2 -774,Jettomero: Hero of the Universe - 0100A5A00AF26000,0100A5A00AF26000,status-playable,playable,2022-08-02 14:46:43,2 -775,Harvest Moon: Light of Hope Special Edition,,,,2020-04-15 13:00:41,1 -776,Heroine Anthem Zero episode 1 - 01001B70080F0000,01001B70080F0000,status-playable;vulkan-backend-bug,playable,2022-08-01 22:02:36,4 -777,Hunting Simulator - 0100C460040EA000,0100C460040EA000,status-playable;UE4,playable,2022-08-02 10:54:08,5 -778,Guts and Glory,,,,2020-04-15 14:06:57,1 -779,Island Flight Simulator - 010077900440A000,010077900440A000,status-playable,playable,2021-06-04 19:42:46,2 -780,Hollow - 0100F2100061E8000,0100F2100061E800,UE4;gpu;status-ingame,ingame,2021-03-03 23:42:56,2 -781,Heroes of the Monkey Tavern,,,,2020-04-15 15:24:33,1 -783,Jotun: Valhalla Edition,,,,2020-04-15 15:46:21,1 -784,OniNaki - 0100CF4011B2A000,0100CF4011B2A000,nvdec;status-playable,playable,2021-02-27 21:52:42,1 -785,Diary of consultation with me (female doctor),,,,2020-04-15 16:13:40,1 -786,JunkPlanet,,status-playable,playable,2020-11-09 12:38:33,3 -787,Hexologic,,,,2020-04-15 16:46:07,1 -788,JYDGE - 010035A0044E8000,010035A0044E8000,status-playable,playable,2022-08-02 21:20:13,4 -789,Mushroom Quest,,status-playable,playable,2020-05-17 13:07:08,4 -790,Infernium,,UE4;regression;status-nothing,nothing,2021-01-13 16:36:07,2 -791,Star-Crossed Myth - The Department of Wishes - 01005EB00EA10000,01005EB00EA10000,gpu;status-ingame,ingame,2021-06-04 19:34:36,3 -792,Joe Dever's Lone Wolf,,,,2020-04-15 18:27:04,1 -793,Final Fantasy VII - 0100A5B00BDC6000,0100A5B00BDC6000,status-playable,playable,2022-12-09 17:03:30,5 -794,Irony Curtain: From Matryoshka with Love - 0100E5700CD56000,0100E5700CD56000,status-playable,playable,2021-06-04 20:12:37,3 -795,Guns Gore and Cannoli,,,,2020-04-16 12:37:22,1 -796,ICEY,,status-playable,playable,2021-01-14 16:16:04,3 -797,Jumping Joe & Friends,,status-playable,playable,2021-01-13 17:09:42,2 -798,Johnny Turbo's Arcade Wizard Fire - 0100D230069CC000,0100D230069CC000,status-playable,playable,2022-08-02 20:39:15,2 -799,Johnny Turbo's Arcade Two Crude Dudes - 010080D002CC6000,010080D002CC6000,status-playable,playable,2022-08-02 20:29:50,3 -800,Johnny Turbo's Arcade Sly Spy,,,,2020-04-16 13:56:32,1 -801,Johnny Turbo's Arcade Caveman Ninja,,,,2020-04-16 14:11:07,1 -802,Heroki - 010057300B0DC000,010057300B0DC000,gpu;status-ingame,ingame,2023-07-30 19:30:01,6 -803,Immortal Redneck - 0100F400435A000,,nvdec;status-playable,playable,2021-01-27 18:36:28,2 -804,Hungry Shark World,,status-playable,playable,2021-01-13 18:26:08,2 -805,Homo Machina,,,,2020-04-16 15:10:24,1 -806,InnerSpace,,,,2020-04-16 16:38:45,1 -807,INK,,,,2020-04-16 16:48:26,1 -808,Human: Fall Flat,,status-playable,playable,2021-01-13 18:36:05,2 -809,Hotel Transylvania 3: Monsters Overboard - 0100017007980000,0100017007980000,nvdec;status-playable,playable,2021-01-27 18:55:31,2 -810,It's Spring Again,,,,2020-04-16 19:08:21,1 -811,FINAL FANTASY IX - 01006F000B056000,01006F000B056000,audout;nvdec;status-playable,playable,2021-06-05 11:35:00,6 -812,Harvest Life - 0100D0500AD30000,0100D0500AD30000,status-playable,playable,2022-08-01 16:51:45,2 -813,INVERSUS Deluxe - 01001D0003B96000,01001D0003B96000,status-playable;online-broken,playable,2022-08-02 14:35:36,3 -814,HoPiKo,,status-playable,playable,2021-01-13 20:12:38,2 -815,I Hate Running Backwards,,,,2020-04-16 20:53:45,1 -816,Hexagravity - 01007AC00E012000,01007AC00E012000,status-playable,playable,2021-05-28 13:47:48,3 -817,Holy Potatoes! A Weapon Shop?!,,,,2020-04-16 22:25:50,1 -818,In Between,,,,2020-04-17 11:08:14,1 -819,Hunter's Legacy: Purrfect Edition - 010068000CAC0000,010068000CAC0000,status-playable,playable,2022-08-02 10:33:31,3 -820,Job the Leprechaun,,status-playable,playable,2020-06-05 12:10:06,3 -821,Henry the Hamster Handler,,,,2020-04-17 11:30:02,1 -822,FINAL FANTASY XII THE ZODIAC AGE - 0100EB100AB42000,0100EB100AB42000,status-playable;opengl;vulkan-backend-bug,playable,2024-08-11 7:01:54,10 -823,Hiragana Pixel Party,,status-playable,playable,2021-01-14 8:36:50,2 -824,Heart and Slash,,status-playable,playable,2021-01-13 20:56:32,2 -825,InkSplosion,,,,2020-04-17 12:11:41,1 -826,I and Me,,,,2020-04-17 12:18:43,1 -827,Earthlock - 01006E50042EA000,01006E50042EA000,status-playable,playable,2021-06-05 11:51:02,3 -828,Figment - 0100118009C68000,0100118009C68000,nvdec;status-playable,playable,2021-01-27 19:36:05,2 -829,Dusty Raging Fist,,,,2020-04-18 14:02:20,1 -830,Eternum Ex,,status-playable,playable,2021-01-13 20:28:32,2 -831,Dragon's Lair Trilogy,,nvdec;status-playable,playable,2021-01-13 22:12:07,2 -832,FIFA 18 - 0100F7B002340000,0100F7B002340000,gpu;status-ingame;online-broken;ldn-untested,ingame,2022-07-26 12:43:59,4 -833,Dream Alone - 0100AA0093DC000,,nvdec;status-playable,playable,2021-01-27 19:41:50,2 -834,Fight of Gods,,,,2020-04-18 17:22:19,1 -835,Fallout Shelter,,,,2020-04-18 19:48:28,1 -836,Drift Legends,,,,2020-04-18 20:15:36,1 -837,Feudal Alloy,,status-playable,playable,2021-01-14 8:48:14,2 -838,EVERSPACE - 0100DCF0093EC000,0100DCF0093EC000,status-playable;UE4,playable,2022-08-14 1:16:24,14 -839,Epic Loon - 0100262009626000,0100262009626000,status-playable;nvdec,playable,2022-07-25 22:06:13,3 -840,EARTH WARS - 01009B7006C88000,01009B7006C88000,status-playable,playable,2021-06-05 11:18:33,3 -841,Finding Teddy 2 : Definitive Edition - 0100FF100FB68000,0100FF100FB68000,gpu;status-ingame,ingame,2024-04-19 16:51:33,5 -842,Rocket League - 01005EE0036EC000,01005EE0036EC000,gpu;status-ingame;online-broken;ldn-untested,ingame,2024-02-08 19:51:36,5 -845,Fimbul - 0100C3A00BB76000,0100C3A00BB76000,status-playable;nvdec,playable,2022-07-26 13:31:47,2 -846,Fairune Collection - 01008A6009758000,01008A6009758000,status-playable,playable,2021-06-06 15:29:56,3 -847,Enigmatis 2: The Mists of Ravenwood - 0100C6200A0AA000,0100C6200A0AA000,crash;regression;status-boots,boots,2021-06-06 15:15:30,3 -848,Energy Balance,,,,2020-04-22 11:13:18,1 -849,DragonFangZ,,status-playable,playable,2020-09-28 21:35:18,2 -850,Dragon's Dogma: Dark Arisen - 010032C00AC58000,010032C00AC58000,status-playable,playable,2022-07-24 12:58:33,5 -851,Everything,,,,2020-04-22 11:35:04,1 -852,Dust: An Elysian Tail - 0100B6E00A420000,0100B6E00A420000,status-playable,playable,2022-07-25 15:28:12,4 -853,EXTREME POKER,,,,2020-04-22 11:54:54,1 -854,Dyna Bomb,,status-playable,playable,2020-06-07 13:26:55,3 -855,Escape Doodland,,,,2020-04-22 12:10:08,1 -856,Drone Fight - 010058C00A916000,010058C00A916000,status-playable,playable,2022-07-24 14:31:56,4 -857,Resident Evil,,,,2020-04-22 12:31:10,1 -858,Dungeon Rushers,,,,2020-04-22 12:43:24,1 -859,Embers of Mirrim,,,,2020-04-22 12:56:52,1 -860,FIFA 19 - 0100FFA0093E8000,0100FFA0093E8000,gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07,4 -861,Energy Cycle,,,,2020-04-22 13:40:48,1 -862,Dragons Dawn of New Riders,,nvdec;status-playable,playable,2021-01-27 20:05:26,2 -863,Enter the Gungeon - 01009D60076F6000,01009D60076F6000,status-playable,playable,2022-07-25 20:28:33,3 -864,Drowning - 010052000A574000,010052000A574000,status-playable,playable,2022-07-25 14:28:26,3 -865,Earth Atlantis,,,,2020-04-22 14:42:46,1 -866,Evil Defenders,,nvdec;status-playable,playable,2020-09-28 17:11:00,2 -867,Dustoff Heli Rescue 2,,,,2020-04-22 15:31:34,1 -868,Energy Cycle Edge - 0100B8700BD14000,0100B8700BD14000,services;status-ingame,ingame,2021-11-30 5:02:31,3 -869,Element - 0100A6700AF10000,0100A6700AF10000,status-playable,playable,2022-07-25 17:17:16,3 -870,Duck Game,,,,2020-04-22 17:10:36,1 -871,Fill-a-Pix: Phil's Epic Adventure,,status-playable,playable,2020-12-22 13:48:22,3 -872,Elliot Quest - 0100128003A24000,0100128003A24000,status-playable,playable,2022-07-25 17:46:14,3 -873,Drawful 2 - 0100F7800A434000,0100F7800A434000,status-ingame,ingame,2022-07-24 13:50:21,5 -874,Energy Invasion,,status-playable,playable,2021-01-14 21:32:26,2 -875,Dungeon Stars,,status-playable,playable,2021-01-18 14:28:37,2 -876,FINAL FANTASY X/X-2 HD REMASTER - 0100BC300CB48000,0100BC300CB48000,gpu;status-ingame,ingame,2022-08-16 20:29:26,8 -878,Revenant Saga,,,,2020-04-22 23:52:09,1 -880,Resident Evil 0,,,,2020-04-23 1:04:42,1 -882,Fate/EXTELLA - 010053E002EA2000,010053E002EA2000,gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55,7 -883,RiME,,UE4;crash;gpu;status-boots,boots,2020-07-20 15:52:38,2 -884,DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition - 0100E9A00CB30000,0100E9A00CB30000,status-playable;nvdec,playable,2024-06-26 0:16:30,4 -886,Rival Megagun,,nvdec;online;status-playable,playable,2021-01-19 14:01:46,2 -887,Riddled Corpses EX - 01002C700C326000,01002C700C326000,status-playable,playable,2021-06-06 16:02:44,6 -888,Fear Effect Sedna,,nvdec;status-playable,playable,2021-01-19 13:10:33,1 -889,Redout: Lightspeed Edition,,,,2020-04-23 14:46:59,1 -890,RESIDENT EVIL REVELATIONS 2 - 010095300212A000,010095300212A000,status-playable;online-broken;ldn-untested,playable,2022-08-11 12:57:50,3 -891,Robonauts - 0100618004096000,0100618004096000,status-playable;nvdec,playable,2022-08-12 11:33:23,3 -892,Road to Ballhalla - 010002F009A7A000,010002F009A7A000,UE4;status-playable,playable,2021-06-07 2:22:36,3 -893,Fate/EXTELLA LINK - 010051400B17A000,010051400B17A000,ldn-untested;nvdec;status-playable,playable,2021-01-27 0:45:50,6 -894,Rocket Fist,,,,2020-04-23 16:56:33,1 -895,RICO - 01009D5009234000,01009D5009234000,status-playable;nvdec;online-broken,playable,2022-08-11 20:16:40,4 -896,R.B.I. Baseball 17 - 0100B5A004302000,0100B5A004302000,status-playable;online-working,playable,2022-08-11 11:55:47,2 -897,Red Faction Guerrilla Re-Mars-tered - 010075000C608000,010075000C608000,ldn-untested;nvdec;online;status-playable,playable,2021-06-07 3:02:13,3 -900,Riptide GP: Renegade - 01002A6006AA4000,01002A6006AA4000,online;status-playable,playable,2021-04-13 23:33:02,4 -901,Realpolitiks,,,,2020-04-24 12:33:00,1 -902,Fall Of Light - Darkest Edition - 01005A600BE60000,01005A600BE60000,slow;status-ingame;nvdec,ingame,2024-07-24 4:19:26,5 -903,Reverie: Sweet As Edition,,,,2020-04-24 13:24:37,1 -904,RIVE: Ultimate Edition,,status-playable,playable,2021-03-24 18:45:55,3 -905,R.B.I. Baseball 18 - 01005CC007616000,01005CC007616000,status-playable;nvdec;online-working,playable,2022-08-11 11:27:52,3 -906,Refunct,,UE4;status-playable,playable,2020-12-15 22:46:21,2 -907,Rento Fortune Monolit,,ldn-untested;online;status-playable,playable,2021-01-19 19:52:21,2 -908,Super Mario Party - 010036B0034E4000,010036B0034E4000,gpu;status-ingame;Needs Update;ldn-works,ingame,2024-06-21 5:10:16,25 -909,Farm Together,,status-playable,playable,2021-01-19 20:01:19,2 -910,Regalia: Of Men and Monarchs - Royal Edition - 0100FDF0083A6000,0100FDF0083A6000,status-playable,playable,2022-08-11 12:24:01,3 -911,Red Game Without a Great Name,,status-playable,playable,2021-01-19 21:42:35,2 -912,R.B.I. Baseball 19 - 0100FCB00BF40000,0100FCB00BF40000,status-playable;nvdec;online-working,playable,2022-08-11 11:43:52,3 -913,Eagle Island - 010037400C7DA000,010037400C7DA000,status-playable,playable,2021-04-10 13:15:42,3 -915,RIOT: Civil Unrest - 010088E00B816000,010088E00B816000,status-playable,playable,2022-08-11 20:27:56,3 -917,Revenant Dogma,,,,2020-04-25 17:51:48,1 -919,World of Final Fantasy Maxima,,status-playable,playable,2020-06-07 13:57:23,2 -920,ITTA - 010068700C70A000,010068700C70A000,status-playable,playable,2021-06-07 3:15:52,6 -921,Pirates: All Aboard!,,,,2020-04-27 12:18:29,1 -922,Wolfenstein II The New Colossus - 01009040091E0000,01009040091E0000,gpu;status-ingame,ingame,2024-04-05 5:39:46,9 -923,Onimusha: Warlords,,nvdec;status-playable,playable,2020-07-31 13:08:39,2 -924,Radiation Island - 01009E40095EE000,01009E40095EE000,status-ingame;opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04,3 -925,Pool Panic,,,,2020-04-27 13:49:19,1 -926,Quad Fighter K,,,,2020-04-27 14:00:50,1 -927,PSYVARIAR DELTA - 0100EC100A790000,0100EC100A790000,nvdec;status-playable,playable,2021-01-20 13:01:46,2 -928,Puzzle Box Maker - 0100476004A9E000,0100476004A9E000,status-playable;nvdec;online-broken,playable,2022-08-10 18:00:52,5 -929,Psikyo Collection Vol. 3 - 0100A2300DB78000,0100A2300DB78000,status-ingame,ingame,2021-06-07 2:46:23,2 -930,Pianista: The Legendary Virtuoso - 010077300A86C000,010077300A86C000,status-playable;online-broken,playable,2022-08-09 14:52:56,3 -931,Quarantine Circular - 0100F1400BA88000,0100F1400BA88000,status-playable,playable,2021-01-20 15:24:15,2 -932,Pizza Titan Ultra - 01004A900C352000,01004A900C352000,nvdec;status-playable,playable,2021-01-20 15:58:42,2 -933,Phantom Trigger - 0100C31005A50000,0100C31005A50000,status-playable,playable,2022-08-09 14:27:30,2 -934,Operación Triunfo 2017 - 0100D5400BD90000,0100D5400BD90000,services;status-ingame;nvdec,ingame,2022-08-08 15:06:42,3 -935,Rad Rodgers Radical Edition - 010000600CD54000,010000600CD54000,status-playable;nvdec;online-broken,playable,2022-08-10 19:57:23,3 -936,Ape Out - 01005B100C268000,01005B100C268000,status-playable,playable,2022-09-26 19:04:47,3 -937,Decay of Logos - 010027700FD2E000,010027700FD2E000,status-playable;nvdec,playable,2022-09-13 14:42:13,3 -938,Q.U.B.E. 2 - 010023600AA34000,010023600AA34000,UE4;status-playable,playable,2021-03-03 21:38:57,2 -939,Pikuniku,,,,2020-04-28 11:02:59,1 -940,Picross S,,,,2020-04-28 11:14:18,1 -941,PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE - 0100063005C86000,0100063005C86000,audio;status-playable;nvdec,playable,2024-02-29 14:20:35,6 -942,Pilot Sports - 01007A500B0B2000,01007A500B0B2000,status-playable,playable,2021-01-20 15:04:17,2 -943,Paper Wars,,,,2020-04-28 11:46:56,1 -944,Fushigi no Gensokyo Lotus Labyrinth,,Needs Update;audio;gpu;nvdec;status-ingame,ingame,2021-01-20 15:30:02,2 -945,OPUS: The Day We Found Earth - 010049C0075F0000,010049C0075F0000,nvdec;status-playable,playable,2021-01-21 18:29:31,2 -946,Psikyo Collection Vol.2 - 01009D400C4A8000,01009D400C4A8000,32-bit;status-playable,playable,2021-06-07 3:22:07,3 -947,PixARK,,,,2020-04-28 12:32:16,1 -948,Puyo Puyo Tetris,,,,2020-04-28 12:46:37,1 -949,Puzzle Puppers,,,,2020-04-28 12:54:05,1 -950,OVERWHELM - 01005F000CC18000,01005F000CC18000,status-playable,playable,2021-01-21 18:37:18,2 -951,Rapala Fishing: Pro Series,,nvdec;status-playable,playable,2020-12-16 13:26:53,2 -952,Power Rangers: Battle for the Grid,,status-playable,playable,2020-06-21 16:52:42,4 -953,Professional Farmer: Nintendo Switch Edition,,slow;status-playable,playable,2020-12-16 13:38:19,2 -954,Project Nimbus: Complete Edition - 0100ACE00DAB6000,0100ACE00DAB6000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43,6 -955,Perfect Angle - 010089F00A3B4000,010089F00A3B4000,status-playable,playable,2021-01-21 18:48:45,2 -956,Oniken: Unstoppable Edition - 010037900C814000,010037900C814000,status-playable,playable,2022-08-08 14:52:06,3 -957,Pixeljunk Monsters 2 - 0100E4D00A690000,0100E4D00A690000,status-playable,playable,2021-06-07 3:40:01,3 -958,Pocket Rumble,,,,2020-04-28 19:13:20,1 -959,Putty Pals,,,,2020-04-28 19:35:49,1 -960,Overcooked! Special Edition - 01009B900401E000,01009B900401E000,status-playable,playable,2022-08-08 20:48:52,3 -961,Panda Hero,,,,2020-04-28 20:33:24,1 -962,Piczle Lines DX,,UE4;crash;nvdec;status-menus,menus,2020-11-16 4:21:31,9 -963,Packet Queen #,,,,2020-04-28 21:43:26,1 -964,Punch Club,,,,2020-04-28 22:28:01,1 -965,Oxenfree,,,,2020-04-28 23:56:28,1 -966,Rayman Legends: Definitive Edition - 01005FF002E2A000,01005FF002E2A000,status-playable;nvdec;ldn-works,playable,2023-05-27 18:33:07,3 -968,Poi: Explorer Edition - 010086F0064CE000,010086F0064CE000,nvdec;status-playable,playable,2021-01-21 19:32:00,2 -969,Paladins - 011123900AEE0000,011123900AEE0000,online;status-menus,menus,2021-01-21 19:21:37,2 -970,Q-YO Blaster,,gpu;status-ingame,ingame,2020-06-07 22:36:53,3 -971,Please Don't Touch Anything,,,,2020-04-29 12:15:59,1 -972,Puzzle Adventure Blockle,,,,2020-04-29 13:05:19,1 -973,Plantera - 010087000428E000,010087000428E000,status-playable,playable,2022-08-09 15:36:28,4 -974,One Strike,,,,2020-04-29 13:43:11,1 -975,Party Arcade - 01007FC00A040000,01007FC00A040000,status-playable;online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53,4 -976,PAYDAY 2 - 0100274004052000,0100274004052000,status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39,3 -977,Quest of Dungeons - 01001DE005012000,01001DE005012000,status-playable,playable,2021-06-07 10:29:22,3 -978,Plague Road - 0100FF8005EB2000,0100FF8005EB2000,status-playable,playable,2022-08-09 15:27:14,5 -979,Picture Painting Puzzle 1000!,,,,2020-04-29 14:58:39,1 -980,Ni No Kuni Wrath of the White Witch - 0100E5600D446000,0100E5600D446000,status-boots;32-bit;nvdec,boots,2024-07-12 4:52:59,29 -981,Overcooked! 2 - 01006FD0080B2000,01006FD0080B2000,status-playable;ldn-untested,playable,2022-08-08 16:48:10,2 -982,Qbik,,,,2020-04-29 15:50:22,1 -983,Rain World - 010047600BF72000,010047600BF72000,status-playable,playable,2023-05-10 23:34:08,4 -984,Othello,,,,2020-04-29 17:06:10,1 -985,Pankapu,,,,2020-04-29 17:24:48,1 -986,Pode - 01009440095FE000,01009440095FE000,nvdec;status-playable,playable,2021-01-25 12:58:35,2 -987,PLANET RIX-13,,,,2020-04-29 22:00:16,1 -988,Picross S2,,status-playable,playable,2020-10-15 12:01:40,2 -989,Picross S3,,status-playable,playable,2020-10-15 11:55:27,3 -990,"POISOFT'S ""Thud""",,,,2020-04-29 22:26:06,1 -991,Paranautical Activity - 010063400B2EC000,010063400B2EC000,status-playable,playable,2021-01-25 13:49:19,2 -992,oOo: Ascension - 010074000BE8E000,010074000BE8E000,status-playable,playable,2021-01-25 14:13:34,2 -993,Pic-a-Pix Pieces,,,,2020-04-30 12:07:19,1 -994,Perception,,UE4;crash;nvdec;status-menus,menus,2020-12-18 11:49:23,3 -995,Pirate Pop Plus,,,,2020-04-30 12:19:57,1 -996,Outlast 2 - 0100DE70085E8000,0100DE70085E8000,status-ingame;crash;nvdec,ingame,2022-01-22 22:28:05,8 -997,Project Highrise: Architect's Edition - 0100BBD00976C000,0100BBD00976C000,status-playable,playable,2022-08-10 17:19:12,4 -998,Perchang - 010011700D1B2000,010011700D1B2000,status-playable,playable,2021-01-25 14:19:52,2 -999,Out Of The Box - 01005A700A166000,01005A700A166000,status-playable,playable,2021-01-28 1:34:27,3 -1000,Paperbound Brawlers - 01006AD00B82C000,01006AD00B82C000,status-playable,playable,2021-01-25 14:32:15,2 -1001,Party Golf - 0100B8E00359E000,0100B8E00359E000,status-playable;nvdec,playable,2022-08-09 12:38:30,8 -1002,PAN-PAN A tiny big adventure - 0100F0D004CAE000,0100F0D004CAE000,audout;status-playable,playable,2021-01-25 14:42:00,2 -1003,OVIVO,,,,2020-04-30 15:12:05,1 -1004,Penguin Wars,,,,2020-04-30 15:28:21,1 -1005,Physical Contact: Speed - 01008110036FE000,01008110036FE000,status-playable,playable,2022-08-09 14:40:46,3 -1006,Pic-a-Pix Deluxe,,,,2020-04-30 16:00:55,1 -1007,Puyo Puyo Esports,,,,2020-04-30 16:13:17,1 -1008,Qbics Paint - 0100A8D003BAE000,0100A8D003BAE000,gpu;services;status-ingame,ingame,2021-06-07 10:54:09,3 -1009,Piczle Lines DX 500 More Puzzles!,,UE4;status-playable,playable,2020-12-15 23:42:51,3 -1010,Pato Box - 010031F006E76000,010031F006E76000,status-playable,playable,2021-01-25 15:17:52,2 -1011,Phoenix Wright: Ace Attorney Trilogy - 0100CB000A142000,0100CB000A142000,status-playable,playable,2023-09-15 22:03:12,4 -1012,Physical Contact: 2048,,slow;status-playable,playable,2021-01-25 15:18:32,2 -1013,OPUS Collection - 01004A200BE82000,01004A200BE82000,status-playable,playable,2021-01-25 15:24:04,2 -1014,Party Planet,,,,2020-04-30 18:30:59,1 -1015,Physical Contact: Picture Place,,,,2020-04-30 18:43:20,1 -1017,Tanzia - 01004DF007564000,01004DF007564000,status-playable,playable,2021-06-07 11:10:25,4 -1018,Syberia 3 - 0100CBE004E6C000,0100CBE004E6C000,nvdec;status-playable,playable,2021-01-25 16:15:12,2 -1019,SUPER DRAGON BALL HEROES WORLD MISSION - 0100E5E00C464000,0100E5E00C464000,status-playable;nvdec;online-broken,playable,2022-08-17 12:56:30,4 -1020,Tales of Vesperia: Definitive Edition - 01002C0008E52000,01002C0008E52000,status-playable,playable,2024-09-28 3:20:47,10 -1021,Surgeon Simulator CPR,,,,2020-05-01 15:11:43,1 -1022,Super Inefficient Golf - 010056800B534000,010056800B534000,status-playable;UE4,playable,2022-08-17 15:53:45,4 -1023,Super Daryl Deluxe,,,,2020-05-01 18:23:22,1 -1024,Sushi Striker: The Way of Sushido,,nvdec;status-playable,playable,2020-06-26 20:49:11,5 -1025,Super Volley Blast - 010035B00B3F0000,010035B00B3F0000,status-playable,playable,2022-08-19 18:14:40,3 -1026,Stunt Kite Party - 0100AF000B4AE000,0100AF000B4AE000,nvdec;status-playable,playable,2021-01-25 17:16:56,2 -1027,Super Putty Squad - 0100331005E8E000,0100331005E8E000,gpu;status-ingame;32-bit,ingame,2024-04-29 15:51:54,6 -1028,SWORD ART ONLINE: Hollow Realization Deluxe Edition - 01001B600D1D6000,01001B600D1D6000,status-playable;nvdec,playable,2022-08-19 19:19:15,4 -1029,SUPER ROBOT WARS T,,online;status-playable,playable,2021-03-25 11:00:40,10 -1030,Tactical Mind - 01000F20083A8000,01000F20083A8000,status-playable,playable,2021-01-25 18:05:00,2 -1031,Super Beat Sports - 0100F7000464A000,0100F7000464A000,status-playable;ldn-untested,playable,2022-08-16 16:05:50,2 -1032,Suicide Guy - 01005CD00A2A2000,01005CD00A2A2000,status-playable,playable,2021-01-26 13:13:54,2 -1033,Sundered: Eldritch Edition - 01002D3007962000,01002D3007962000,gpu;status-ingame,ingame,2021-06-07 11:46:00,3 -1034,Super Blackjack Battle II Turbo - The Card Warriors,,,,2020-05-02 9:45:57,1 -1035,Super Skelemania,,status-playable,playable,2020-06-07 22:59:50,3 -1036,Super Ping Pong Trick Shot,,,,2020-05-02 10:02:55,1 -1037,Subsurface Circular,,,,2020-05-02 10:36:40,1 -1038,Super Hero Fight Club: Reloaded,,,,2020-05-02 10:49:51,1 -1039,Superola and the lost burgers,,,,2020-05-02 10:57:54,1 -1040,Super Tennis Blast - 01000500DB50000,,status-playable,playable,2022-08-19 16:20:48,3 -1041,Swap This!,,,,2020-05-02 11:37:51,1 -1042,Super Sportmatchen - 0100A9300A4AE000,0100A9300A4AE000,status-playable,playable,2022-08-19 12:34:40,3 -1043,Super Destronaut DX,,,,2020-05-02 12:13:53,1 -1044,Summer Sports Games,,,,2020-05-02 12:45:15,1 -1045,Super Kickers League - 0100196009998000,0100196009998000,status-playable,playable,2021-01-26 13:36:48,2 -1046,Switch 'N' Shoot,,,,2020-05-03 2:02:08,1 -1047,Super Mutant Alien Assault,,status-playable,playable,2020-06-07 23:32:45,3 -1048,Tallowmere,,,,2020-05-03 2:23:10,1 -1050,Wizard of Legend - 0100522007AAA000,0100522007AAA000,status-playable,playable,2021-06-07 12:20:46,3 -1051,WARRIORS OROCHI 4 ULTIMATE - 0100E8500AD58000,0100E8500AD58000,status-playable;nvdec;online-broken,playable,2024-08-07 1:50:37,10 -1052,What Remains of Edith Finch - 010038900DFE0000,010038900DFE0000,slow;status-playable;UE4,playable,2022-08-31 19:57:59,3 -1053,Wasteland 2: Director's Cut - 010039A00BC64000,010039A00BC64000,nvdec;status-playable,playable,2021-01-27 13:34:11,2 -1054,Victor Vran Overkill Edition - 0100E81007A06000,0100E81007A06000,gpu;deadlock;status-ingame;nvdec;opengl,ingame,2022-08-30 11:46:56,6 -1055,Witch Thief - 01002FC00C6D0000,01002FC00C6D0000,status-playable,playable,2021-01-27 18:16:07,2 -1056,VSR: Void Space Racing - 0100C7C00AE6C000,0100C7C00AE6C000,status-playable,playable,2021-01-27 14:08:59,2 -1057,Warparty,,nvdec;status-playable,playable,2021-01-27 18:26:32,2 -1058,Windstorm,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-22 13:17:48,4 -1059,WAKU WAKU SWEETS,,,,2020-05-03 19:46:53,1 -1060,Windstorm - Ari's Arrival - 0100D6800CEAC000,0100D6800CEAC000,UE4;status-playable,playable,2021-06-07 19:33:19,3 -1061,V-Rally 4 - 010064400B138000,010064400B138000,gpu;nvdec;status-ingame,ingame,2021-06-07 19:37:31,5 -1062,Valkyria Chronicles - 0100CAF00B744000,0100CAF00B744000,status-ingame;32-bit;crash;nvdec,ingame,2022-11-23 20:03:32,8 -1063,WILL: A Wonderful World,,,,2020-05-03 22:34:06,1 -1065,WILD GUNS Reloaded - 0100CFC00A1D8000,0100CFC00A1D8000,status-playable,playable,2021-01-28 12:29:05,2 -1066,Valthirian Arc: Hero School Story,,,,2020-05-04 12:06:06,1 -1067,War Theatre - 010084D00A134000,010084D00A134000,gpu;status-ingame,ingame,2021-06-07 19:42:45,3 -1068,"Vostok, Inc. - 01004D8007368000",01004D8007368000,status-playable,playable,2021-01-27 17:43:59,2 -1069,Way of the Passive Fist - 0100BA200C378000,0100BA200C378000,gpu;status-ingame,ingame,2021-02-26 21:07:06,4 -1070,Vesta - 010057B00712C000,010057B00712C000,status-playable;nvdec,playable,2022-08-29 21:03:39,3 -1071,West of Loathing - 010031B00A4E8000,010031B00A4E8000,status-playable,playable,2021-01-28 12:35:19,2 -1072,Vaporum - 010030F00CA1E000,010030F00CA1E000,nvdec;status-playable,playable,2021-05-28 14:25:33,3 -1073,Vandals - 01007C500D650000,01007C500D650000,status-playable,playable,2021-01-27 21:45:46,2 -1074,Active Neurons - 010039A010DA0000,010039A010DA0000,status-playable,playable,2021-01-27 21:31:21,2 -1075,Voxel Sword - 0100BFB00D1F4000,0100BFB00D1F4000,status-playable,playable,2022-08-30 14:57:27,2 -1076,Levelhead,,online;status-ingame,ingame,2020-10-18 11:44:51,9 -1077,Violett - 01005880063AA000,01005880063AA000,nvdec;status-playable,playable,2021-01-28 13:09:36,2 -1078,Wheels of Aurelia - 0100DFC00405E000,0100DFC00405E000,status-playable,playable,2021-01-27 21:59:25,2 -1079,Varion,,,,2020-05-04 15:50:27,1 -1080,Warlock's Tower,,,,2020-05-04 16:03:52,1 -1081,Vectronom,,,,2020-05-04 16:14:05,1 -1083,Yooka-Laylee - 0100F110029C8000,0100F110029C8000,status-playable,playable,2021-01-28 14:21:45,2 -1084,WWE 2K18 - 010009800203E000,010009800203E000,status-playable;nvdec,playable,2023-10-21 17:22:01,4 -1085,Wulverblade - 010033700418A000,010033700418A000,nvdec;status-playable,playable,2021-01-27 22:29:05,2 -1086,YIIK: A Postmodern RPG - 0100634008266000,0100634008266000,status-playable,playable,2021-01-28 13:38:37,2 -1087,Yesterday Origins,,,,2020-05-05 14:17:14,1 -1088,Zarvot - 0100E7900C40000,,status-playable,playable,2021-01-28 13:51:36,2 -1089,World to the West,,,,2020-05-05 14:47:07,1 -1090,Yonder: The Cloud Catcher Chronicles - 0100CC600ABB2000,0100CC600ABB2000,status-playable,playable,2021-01-28 14:06:25,2 -1092,Emma: Lost in Memories - 010017b0102a8000,010017b0102a8000,nvdec;status-playable,playable,2021-01-28 16:19:10,2 -1094,Zotrix: Solar Division - 01001EE00A6B0000,01001EE00A6B0000,status-playable,playable,2021-06-07 20:34:05,5 -1095,X-Morph: Defense,,status-playable,playable,2020-06-22 11:05:31,3 -1096,Wonder Boy: The Dragon's Trap - 0100A6300150C000,0100A6300150C000,status-playable,playable,2021-06-25 4:53:21,2 -1097,Yoku's Island Express - 010002D00632E000,010002D00632E000,status-playable;nvdec,playable,2022-09-03 13:59:02,4 -1098,Woodle Tree Adventures,,,,2020-05-06 12:48:20,1 -1099,World Neverland - 01008E9007064000,01008E9007064000,status-playable,playable,2021-01-28 17:44:23,2 -1100,Yomawari: The Long Night Collection - 010012F00B6F2000,010012F00B6F2000,status-playable,playable,2022-09-03 14:36:59,4 -1101,Xenon Valkyrie+ - 010064200C324000,010064200C324000,status-playable,playable,2021-06-07 20:25:53,2 -1102,Word Search by POWGI,,,,2020-05-06 18:16:35,1 -1103,Zombie Scrapper,,,,2020-05-06 18:27:12,1 -1104,Moving Out - 0100C4C00E73E000,0100C4C00E73E000,nvdec;status-playable,playable,2021-06-07 21:17:24,3 -1105,Wonderboy Returns Remix,,,,2020-05-06 22:21:59,1 -1106,Xenoraid - 0100928005BD2000,0100928005BD2000,status-playable,playable,2022-09-03 13:01:10,5 -1107,Zombillie,,status-playable,playable,2020-07-23 17:42:23,2 -1108,World Conqueror X,,status-playable,playable,2020-12-22 16:10:29,3 -1109,Xeodrifter - 01005B5009364000,01005B5009364000,status-playable,playable,2022-09-03 13:18:39,5 -1110,Yono and the Celestial Elephants - 0100BE50042F6000,0100BE50042F6000,status-playable,playable,2021-01-28 18:23:58,2 -1111,Moto Racer 4 - 01002ED00B01C000,01002ED00B01C000,UE4;nvdec;online;status-playable,playable,2021-04-08 19:09:11,3 -1112,NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst - 01006BB00800A000,01006BB00800A000,status-playable;nvdec,playable,2024-06-16 14:58:05,2 -1113,NAMCO MUSEUM - 010002F001220000,010002F001220000,status-playable;ldn-untested,playable,2024-08-13 7:52:21,3 -1114,Mother Russia Bleeds,,,,2020-05-07 17:29:22,1 -1115,MotoGP 18 - 0100361007268000,0100361007268000,status-playable;nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45,3 -1116,Mushroom Wars 2,,nvdec;status-playable,playable,2020-09-28 15:26:08,2 -1117,Mugsters - 010073E008E6E000,010073E008E6E000,status-playable,playable,2021-01-28 17:57:17,2 -1118,Mulaka - 0100211005E94000,0100211005E94000,status-playable,playable,2021-01-28 18:07:20,2 -1119,Mummy Pinball - 010038B00B9AE000,010038B00B9AE000,status-playable,playable,2022-08-05 16:08:11,2 -1120,Moto Rush GT - 01003F200D0F2000,01003F200D0F2000,status-playable,playable,2022-08-05 11:23:55,2 -1121,Mutant Football League Dynasty Edition - 0100C3E00ACAA000,0100C3E00ACAA000,status-playable;online-broken,playable,2022-08-05 17:01:51,3 -1122,Mr. Shifty,,slow;status-playable,playable,2020-05-08 15:28:16,1 -1123,MXGP3 - The Official Motocross Videogame,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 14:00:20,2 -1124,My Memory of Us - 0100E7700C284000,0100E7700C284000,status-playable,playable,2022-08-20 11:03:14,4 -1125,N++ - 01000D5005974000,01000D5005974000,status-playable,playable,2022-08-05 21:54:58,4 -1126,MUJO,,status-playable,playable,2020-05-08 16:31:04,1 -1127,MotoGP 19 - 01004B800D0E8000,01004B800D0E8000,status-playable;nvdec;online-broken;UE4,playable,2022-08-05 11:54:14,3 -1128,Muddledash,,services;status-ingame,ingame,2020-05-08 16:46:14,1 -1129,My Little Riding Champion,,slow;status-playable,playable,2020-05-08 17:00:53,1 -1130,Motorsport Manager for Nintendo Switch - 01002A900D6D6000,01002A900D6D6000,status-playable;nvdec,playable,2022-08-05 12:48:14,2 -1132,Muse Dash,,status-playable,playable,2020-06-06 14:41:29,3 -1133,NAMCO MUSEUM ARCADE PAC - 0100DAA00AEE6000,0100DAA00AEE6000,status-playable,playable,2021-06-07 21:44:50,2 -1134,MyFarm 2018,,,,2020-05-09 12:14:19,1 -1135,Mutant Mudds Collection - 01004BE004A86000,01004BE004A86000,status-playable,playable,2022-08-05 17:11:38,4 -1136,Ms. Splosion Man,,online;status-playable,playable,2020-05-09 20:45:43,1 -1137,New Super Mario Bros. U Deluxe - 0100EA80032EA000,0100EA80032EA000,32-bit;status-playable,playable,2023-10-08 2:06:37,9 -1138,Nelke & the Legendary Alchemists ~Ateliers of the New World~ - 01006ED00BC76000,01006ED00BC76000,status-playable,playable,2021-01-28 19:39:42,2 -1139,Nihilumbra,,status-playable,playable,2020-05-10 16:00:12,1 -1140,Observer - 01002A000C478000,01002A000C478000,UE4;gpu;nvdec;status-ingame,ingame,2021-03-03 20:19:45,2 -1141,NOT A HERO - 0100CB800B07E000,0100CB800B07E000,status-playable,playable,2021-01-28 19:31:24,2 -1142,Nightshade,,nvdec;status-playable,playable,2020-05-10 19:43:31,1 -1143,Night in the Woods - 0100921006A04000,0100921006A04000,status-playable,playable,2022-12-03 20:17:54,3 -1144,Nippon Marathon - 010037200C72A000,010037200C72A000,nvdec;status-playable,playable,2021-01-28 20:32:46,2 -1145,One Piece Unlimited World Red Deluxe Edition,,status-playable,playable,2020-05-10 22:26:32,1 -1146,Numbala,,status-playable,playable,2020-05-11 12:01:07,1 -1147,Night Trap - 25th Anniversary Edition - 0100D8500A692000,0100D8500A692000,status-playable;nvdec,playable,2022-08-08 13:16:14,10 -1148,Ninja Shodown,,status-playable,playable,2020-05-11 12:31:21,1 -1149,OkunoKA - 01006AB00BD82000,01006AB00BD82000,status-playable;online-broken,playable,2022-08-08 14:41:51,2 -1150,Mechstermination Force - 0100E4600D31A000,0100E4600D31A000,status-playable,playable,2024-07-04 5:39:15,2 -1151,Lines X,,status-playable,playable,2020-05-11 15:28:30,1 -1152,Katamari Damacy REROLL - 0100D7000C2C6000,0100D7000C2C6000,status-playable,playable,2022-08-02 21:35:05,3 -1153,Lifeless Planet - 01005B6008132000,01005B6008132000,status-playable,playable,2022-08-03 21:25:13,2 -1154,League of Evil - 01009C100390E000,01009C100390E000,online;status-playable,playable,2021-06-08 11:23:27,2 -1155,Life Goes On - 010006300AFFE000,010006300AFFE000,status-playable,playable,2021-01-29 19:01:20,2 -1156,Leisure Suit Larry: Wet Dreams Don't Dry - 0100A8E00CAA0000,0100A8E00CAA0000,status-playable,playable,2022-08-03 19:51:44,4 -1157,Legend of Kay Anniversary - 01002DB007A96000,01002DB007A96000,nvdec;status-playable,playable,2021-01-29 18:38:29,2 -1158,Kunio-Kun: The World Classics Collection - 010060400ADD2000,010060400ADD2000,online;status-playable,playable,2021-01-29 20:21:46,2 -1159,Letter Quest Remastered,,status-playable,playable,2020-05-11 21:30:34,1 -1160,Koi DX,,status-playable,playable,2020-05-11 21:37:51,1 -1161,Knights of Pen and Paper +1 Deluxier Edition,,status-playable,playable,2020-05-11 21:46:32,1 -1162,Late Shift - 0100055007B86000,0100055007B86000,nvdec;status-playable,playable,2021-02-01 18:43:58,2 -1163,Lethal League Blaze - 01003AB00983C000,01003AB00983C000,online;status-playable,playable,2021-01-29 20:13:31,2 -1164,Koloro - 01005D200C9AA000,01005D200C9AA000,status-playable,playable,2022-08-03 12:34:02,2 -1165,Little Dragons Cafe,,status-playable,playable,2020-05-12 0:00:52,1 -1166,Legendary Fishing - 0100A7700B46C000,0100A7700B46C000,online;status-playable,playable,2021-04-14 15:08:46,4 -1167,Knock-Knock - 010001A00A1F6000,010001A00A1F6000,nvdec;status-playable,playable,2021-02-01 20:03:19,2 -1168,KAMEN RIDER CLIMAX SCRAMBLE - 0100BDC00A664000,0100BDC00A664000,status-playable;nvdec;ldn-untested,playable,2024-07-03 8:51:11,6 -1169,Kingdom: New Lands - 0100BD9004AB6000,0100BD9004AB6000,status-playable,playable,2022-08-02 21:48:50,2 -1170,Lapis x Labyrinth - 01005E000D3D8000,01005E000D3D8000,status-playable,playable,2021-02-01 18:58:08,2 -1171,Last Day of June - 0100DA700879C000,0100DA700879C000,nvdec;status-playable,playable,2021-06-08 11:35:32,3 -1172,Levels+,,status-playable,playable,2020-05-12 13:51:39,1 -1173,Katana ZERO - 010029600D56A000,010029600D56A000,status-playable,playable,2022-08-26 8:09:09,11 -1174,Layers of Fear: Legacy,,nvdec;status-playable,playable,2021-02-15 16:30:41,2 -1175,Kotodama: The 7 Mysteries of Fujisawa - 010046600CCA4000,010046600CCA4000,audout;status-playable,playable,2021-02-01 20:28:37,2 -1176,Lichtspeer: Double Speer Edition,,status-playable,playable,2020-05-12 16:43:09,1 -1177,Koral,,UE4;crash;gpu;status-menus,menus,2020-11-16 12:41:26,3 -1178,KeroBlaster,,status-playable,playable,2020-05-12 20:42:52,1 -1179,Kentucky Robo Chicken,,status-playable,playable,2020-05-12 20:54:17,1 -1180,L.A. Noire - 0100830004FB6000,0100830004FB6000,status-playable,playable,2022-08-03 16:49:35,3 -1181,Kill The Bad Guy,,status-playable,playable,2020-05-12 22:16:10,1 -1182,Legendary Eleven - 0100A73006E74000,0100A73006E74000,status-playable,playable,2021-06-08 12:09:03,3 -1183,Kitten Squad - 01000C900A136000,01000C900A136000,status-playable;nvdec,playable,2022-08-03 12:01:59,5 -1184,Labyrinth of Refrain: Coven of Dusk - 010058500B3E0000,010058500B3E0000,status-playable,playable,2021-02-15 17:38:48,2 -1185,KAMIKO,,status-playable,playable,2020-05-13 12:48:57,1 -1186,Left-Right: The Mansion,,status-playable,playable,2020-05-13 13:02:12,1 -1187,Knight Terrors,,status-playable,playable,2020-05-13 13:09:22,1 -1188,Kingdom: Two Crowns,,status-playable,playable,2020-05-16 19:36:21,2 -1189,Kid Tripp,,crash;status-nothing,nothing,2020-10-15 7:41:23,2 -1190,King Oddball,,status-playable,playable,2020-05-13 13:47:57,1 -1191,KORG Gadget,,status-playable,playable,2020-05-13 13:57:24,1 -1192,Knights of Pen and Paper 2 Deluxiest Edition,,status-playable,playable,2020-05-13 14:07:00,1 -1193,Keep Talking and Nobody Explodes - 01008D400A584000,01008D400A584000,status-playable,playable,2021-02-15 18:05:21,2 -1194,Jet Lancer - 0100F3500C70C000,0100F3500C70C000,gpu;status-ingame,ingame,2021-02-15 18:15:47,2 -1195,Furi - 01000EC00AF98000,01000EC00AF98000,status-playable,playable,2022-07-27 12:21:20,2 -1196,Forgotton Anne - 010059E00B93C000,010059E00B93C000,nvdec;status-playable,playable,2021-02-15 18:28:07,2 -1197,GOD EATER 3 - 01001C700873E000,01001C700873E000,gpu;status-ingame;nvdec,ingame,2022-07-29 21:33:21,13 -1198,Guacamelee! Super Turbo Championship Edition,,status-playable,playable,2020-05-13 23:44:18,1 -1199,Frost - 0100B5300B49A000,0100B5300B49A000,status-playable,playable,2022-07-27 12:00:36,2 -1200,GO VACATION - 0100C1800A9B6000,0100C1800A9B6000,status-playable;nvdec;ldn-works,playable,2024-05-13 19:28:53,5 -1201,Grand Prix Story - 0100BE600D07A000,0100BE600D07A000,status-playable,playable,2022-08-01 12:42:23,2 -1202,Freedom Planet,,status-playable,playable,2020-05-14 12:23:06,1 -1203,Fossil Hunters - 0100CA500756C000,0100CA500756C000,status-playable;nvdec,playable,2022-07-27 11:37:20,2 -1204,For The King - 010069400B6BE000,010069400B6BE000,nvdec;status-playable,playable,2021-02-15 18:51:44,2 -1205,Flashback,,nvdec;status-playable,playable,2020-05-14 13:57:29,1 -1206,Golf Story,,status-playable,playable,2020-05-14 14:56:17,1 -1207,Firefighters: Airport Fire Department,,status-playable,playable,2021-02-15 19:17:00,2 -1208,Chocobo's Mystery Dungeon Every Buddy!,,slow;status-playable,playable,2020-05-26 13:53:13,2 -1209,CHOP,,,,2020-05-14 17:13:00,1 -1211,FunBox Party,,status-playable,playable,2020-05-15 12:07:02,1 -1212,Friday the 13th: Killer Puzzle - 010003F00BD48000,010003F00BD48000,status-playable,playable,2021-01-28 1:33:38,3 -1213,Johnny Turbo's Arcade Gate of Doom - 010069B002CDE000,010069B002CDE000,status-playable,playable,2022-07-29 12:17:50,3 -1214,Frederic: Resurrection of Music,,nvdec;status-playable,playable,2020-07-23 16:59:53,2 -1215,Frederic 2,,status-playable,playable,2020-07-23 16:44:37,2 -1216,Fort Boyard,,nvdec;slow;status-playable,playable,2020-05-15 13:22:53,1 -1217,Flipping Death - 01009FB002B2E000,01009FB002B2E000,status-playable,playable,2021-02-17 16:12:30,2 -1218,Flat Heroes - 0100C53004C52000,0100C53004C52000,gpu;status-ingame,ingame,2022-07-26 19:37:37,4 -1219,Flood of Light,,status-playable,playable,2020-05-15 14:15:25,1 -1220,FRAMED COLLECTION - 0100F1A00A5DC000,0100F1A00A5DC000,status-playable;nvdec,playable,2022-07-27 11:48:15,4 -1221,Guacamelee! 2,,status-playable,playable,2020-05-15 14:56:59,1 -1223,Flinthook,,online;status-playable,playable,2021-03-25 20:42:29,4 -1224,FORMA.8,,nvdec;status-playable,playable,2020-11-15 1:04:32,3 -1225,FOX n FORESTS - 01008A100A028000,01008A100A028000,status-playable,playable,2021-02-16 14:27:49,2 -1226,Gotcha Racing 2nd,,status-playable,playable,2020-07-23 17:14:04,2 -1227,Floor Kids - 0100DF9005E7A000,0100DF9005E7A000,status-playable;nvdec,playable,2024-08-18 19:38:49,4 -1228,Firefighters - The Simulation - 0100434003C58000,0100434003C58000,status-playable,playable,2021-02-19 13:32:05,2 -1229,Flip Wars - 010095A004040000,010095A004040000,services;status-ingame;ldn-untested,ingame,2022-05-02 15:39:18,4 -1230,TowerFall,,status-playable,playable,2020-05-16 18:58:07,6 -1231,Towertale,,status-playable,playable,2020-10-15 13:56:58,10 -1236,Football Manager Touch 2018 - 010097F0099B4000,010097F0099B4000,status-playable,playable,2022-07-26 20:17:56,4 -1237,Fruitfall Crush,,status-playable,playable,2020-10-20 11:33:33,2 -1238,Forest Home,,,,2020-05-17 13:33:08,1 -1239,Fly O'Clock VS,,status-playable,playable,2020-05-17 13:39:52,1 -1240,Gal Metal - 01B8000C2EA000,,status-playable,playable,2022-07-27 20:57:48,3 -1241,Gear.Club Unlimited - 010065E003FD8000,010065E003FD8000,status-playable,playable,2021-06-08 13:03:19,4 -1242,Gear.Club Unlimited 2 - 010072900AFF0000,010072900AFF0000,status-playable;nvdec;online-broken,playable,2022-07-29 12:52:16,3 -1243,GRIP - 0100459009A2A000,0100459009A2A000,status-playable;nvdec;online-broken;UE4,playable,2022-08-01 15:00:22,8 -1244,Ginger: Beyond the Crystal - 0100C50007070000,0100C50007070000,status-playable,playable,2021-02-17 16:27:00,2 -1245,Slayin 2 - 01004E900EDDA000,01004E900EDDA000,gpu;status-ingame,ingame,2024-04-19 16:15:26,5 -1246,Grim Fandango Remastered - 0100B7900B024000,0100B7900B024000,status-playable;nvdec,playable,2022-08-01 13:55:58,2 -1247,Gal*Gun 2 - 010024700901A000,010024700901A000,status-playable;nvdec;UE4,playable,2022-07-27 12:45:37,6 -1248,Golem Gates - 01003C000D84C000,01003C000D84C000,status-ingame;crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11,5 -1249,Full Metal Furies,,online,,2020-05-18 13:22:06,1 -1250,GIGA WRECKER Alt. - 010045F00BFC2000,010045F00BFC2000,status-playable,playable,2022-07-29 14:13:54,4 -1251,Gelly Break - 01009D000AF3A000,01009D000AF3A000,UE4;status-playable,playable,2021-03-03 16:04:02,2 -1252,The World Next Door - 0100E6200D56E000,0100E6200D56E000,status-playable,playable,2022-09-21 14:15:23,2 -1253,GREEN - 010068D00AE68000,010068D00AE68000,status-playable,playable,2022-08-01 12:54:15,2 -1254,Feathery Ears,,,,2020-05-18 14:48:31,1 -1255,Gorogoa - 0100F2A005C98000,0100F2A005C98000,status-playable,playable,2022-08-01 11:55:08,2 -1256,Girls und Panzer Dream Tank Match DX - 01006DD00CC96000,01006DD00CC96000,status-playable;ldn-untested,playable,2022-09-12 16:07:11,21 -1257,Super Crush KO,,,,2020-05-18 15:49:23,1 -1258,Gem Smashers - 01001A4008192000,01001A4008192000,nvdec;status-playable,playable,2021-06-08 13:40:51,4 -1259,Grave Danger,,status-playable,playable,2020-05-18 17:41:28,1 -1260,Fury Unleashed,,crash;services;status-ingame,ingame,2020-10-18 11:52:40,4 -1261,TaniNani - 01007DB010D2C000,01007DB010D2C000,crash;kernel;status-nothing,nothing,2021-04-08 3:06:44,4 -1262,Atelier Escha & Logy: Alchemists Of The Dusk Sky DX - 0100E5600EE8E000,0100E5600EE8E000,status-playable;nvdec,playable,2022-11-20 16:01:41,3 -1263,Battle of Elemental Burst,,,,2020-05-18 23:27:22,1 -1264,Gun Crazy,,,,2020-05-18 23:47:28,1 -1265,Ascendant Hearts,,,,2020-05-19 8:50:44,1 -1266,Infinite Beyond the Mind,,,,2020-05-19 9:17:17,1 -1268,FullBlast,,status-playable,playable,2020-05-19 10:34:13,1 -1269,The Legend of Heroes: Trails of Cold Steel III,,status-playable,playable,2020-12-16 10:59:18,4 -1270,Goosebumps: The Game,,status-playable,playable,2020-05-19 11:56:52,1 -1271,Gonner,,status-playable,playable,2020-05-19 12:05:02,1 -1272,Monster Viator,,,,2020-05-19 12:15:18,1 -1273,Umihara Kawase Fresh,,,,2020-05-19 12:29:18,1 -1274,Operencia The Stolen Sun - 01006CF00CFA4000,01006CF00CFA4000,UE4;nvdec;status-playable,playable,2021-06-08 13:51:07,2 -1275,Goetia,,status-playable,playable,2020-05-19 12:55:39,1 -1276,Grid Mania,,status-playable,playable,2020-05-19 14:11:05,1 -1277,Pantsu Hunter,,status-playable,playable,2021-02-19 15:12:27,2 -1278,GOD WARS THE COMPLETE LEGEND,,nvdec;status-playable,playable,2020-05-19 14:37:50,1 -1279,Dark Burial,,,,2020-05-19 14:38:34,1 -1280,Langrisser I and II - 0100BAB00E8C0000,0100BAB00E8C0000,status-playable,playable,2021-02-19 15:46:10,2 -1281,My Secret Pets,,,,2020-05-19 15:26:56,1 -1282,Grass Cutter,,slow;status-ingame,ingame,2020-05-19 18:27:42,1 -1283,Giana Sisters: Twisted Dreams - Owltimate Edition - 01003830092B8000,01003830092B8000,status-playable,playable,2022-07-29 14:06:12,6 -1284,FUN! FUN! Animal Park - 010002F00CC20000,010002F00CC20000,status-playable,playable,2021-04-14 17:08:52,2 -1285,Graceful Explosion Machine,,status-playable,playable,2020-05-19 20:36:55,1 -1286,Garage,,status-playable,playable,2020-05-19 20:59:53,1 -1287,Game Dev Story,,status-playable,playable,2020-05-20 0:00:38,1 -1289,Gone Home - 0100EEC00AA6E000,0100EEC00AA6E000,status-playable,playable,2022-08-01 11:14:20,2 -1290,Geki Yaba Runner Anniversary Edition - 01000F000D9F0000,01000F000D9F0000,status-playable,playable,2021-02-19 18:59:07,2 -1291,Gridd: Retroenhanced,,status-playable,playable,2020-05-20 11:32:40,1 -1292,Green Game - 0100CBB0070EE000,0100CBB0070EE000,nvdec;status-playable,playable,2021-02-19 18:51:55,2 -1293,Glaive: Brick Breaker,,status-playable,playable,2020-05-20 12:15:59,1 -1294,Furwind - 0100A6B00D4EC000,0100A6B00D4EC000,status-playable,playable,2021-02-19 19:44:08,2 -1295,Goat Simulator - 010032600C8CE000,010032600C8CE000,32-bit;status-playable,playable,2022-07-29 21:02:33,6 -1296,Gnomes Garden 2,,status-playable,playable,2021-02-19 20:08:13,2 -1297,Gensokyo Defenders - 010000300C79C000,010000300C79C000,status-playable;online-broken;UE4,playable,2022-07-29 13:48:12,4 -1298,Guess the Character,,status-playable,playable,2020-05-20 13:14:19,1 -1299,Gato Roboto - 010025500C098000,010025500C098000,status-playable,playable,2023-01-20 15:04:11,7 -1300,Gekido Kintaro's Revenge,,status-playable,playable,2020-10-27 12:44:05,3 -1301,Ghost 1.0 - 0100EEB005ACC000,0100EEB005ACC000,status-playable,playable,2021-02-19 20:48:47,2 -1302,GALAK-Z: Variant S - 0100C9800A454000,0100C9800A454000,status-boots;online-broken,boots,2022-07-29 11:59:12,2 -1303,Cuphead - 0100A5C00D162000,0100A5C00D162000,status-playable,playable,2022-02-01 22:45:55,3 -1304,Darkest Dungeon - 01008F1008DA6000,01008F1008DA6000,status-playable;nvdec,playable,2022-07-22 18:49:18,5 -1305,Cabela's: The Hunt - Championship Edition - 0100E24004510000,0100E24004510000,status-menus;32-bit,menus,2022-07-21 20:21:25,5 -1306,Darius Cozmic Collection,,status-playable,playable,2021-02-19 20:59:06,2 -1309,Ion Fury - 010041C00D086000,010041C00D086000,status-ingame;vulkan-backend-bug,ingame,2022-08-07 8:27:51,8 -1310,Void Bastards - 0100D010113A8000,0100D010113A8000,status-playable,playable,2022-10-15 0:04:19,3 -1311,Our two Bedroom Story - 010097F010FE6000,010097F010FE6000,gpu;status-ingame;nvdec,ingame,2023-10-10 17:41:20,4 -1312,Dark Witch Music Episode: Rudymical,,status-playable,playable,2020-05-22 9:44:44,1 -1313,Cave Story+,,status-playable,playable,2020-05-22 9:57:25,1 -1314,Crawl,,status-playable,playable,2020-05-22 10:16:05,1 -1315,Chasm,,status-playable,playable,2020-10-23 11:03:43,3 -1316,Princess Closet,,,,2020-05-22 10:34:06,1 -1317,Color Zen,,status-playable,playable,2020-05-22 10:56:17,1 -1318,Coffee Crisis - 0100CF800C810000,0100CF800C810000,status-playable,playable,2021-02-20 12:34:52,2 -1319,Croc's World,,status-playable,playable,2020-05-22 11:21:09,1 -1320,Chicken Rider,,status-playable,playable,2020-05-22 11:31:17,1 -1321,Caveman Warriors,,status-playable,playable,2020-05-22 11:44:20,1 -1322,Clustertruck - 010096900A4D2000,010096900A4D2000,slow;status-ingame,ingame,2021-02-19 21:07:09,2 -1323,Yumeutsutsu Re:After - 0100B56011502000,0100B56011502000,status-playable,playable,2022-11-20 16:09:06,2 -1324,Danger Mouse - 01003ED0099B0000,01003ED0099B0000,status-boots;crash;online,boots,2022-07-22 15:49:45,2 -1325,Circle of Sumo,,status-playable,playable,2020-05-22 12:45:21,1 -1326,Chicken Range - 0100F6C00A016000,0100F6C00A016000,status-playable,playable,2021-04-23 12:14:23,3 -1327,Conga Master Party!,,status-playable,playable,2020-05-22 13:22:24,1 -1328,SNK HEROINES Tag Team Frenzy - 010027F00AD6C000,010027F00AD6C000,status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25,5 -1329,Conduct TOGETHER! - 010043700C9B0000,010043700C9B0000,nvdec;status-playable,playable,2021-02-20 12:59:00,2 -1330,"Calculation Castle: Greco's Ghostly Challenge ""Addition""",,32-bit;status-playable,playable,2020-11-01 23:40:11,4 -1331,"Calculation Castle: Greco's Ghostly Challenge ""Subtraction""",,32-bit;status-playable,playable,2020-11-01 23:47:42,3 -1332,"Calculation Castle: Greco's Ghostly Challenge ""Multiplication""",,32-bit;status-playable,playable,2020-11-02 0:04:33,3 -1333,"Calculation Castle: Greco's Ghostly Challenge ""Division""",,32-bit;status-playable,playable,2020-11-01 23:54:55,3 -1334,Chicken Assassin: Reloaded - 0100E3C00A118000,0100E3C00A118000,status-playable,playable,2021-02-20 13:29:01,2 -1335,eSports Legend,,,,2020-05-22 18:58:46,1 -1336,Crypt of the Necrodancer - 0100CEA007D08000,0100CEA007D08000,status-playable;nvdec,playable,2022-11-01 9:52:06,2 -1337,Crash Bandicoot N. Sane Trilogy - 0100D1B006744000,0100D1B006744000,status-playable,playable,2024-02-11 11:38:14,3 -1338,Castle of Heart - 01003C100445C000,01003C100445C000,status-playable;nvdec,playable,2022-07-21 23:10:45,2 -1339,Darkwood,,status-playable,playable,2021-01-08 21:24:06,3 -1340,A Fold Apart,,,,2020-05-23 8:10:49,1 -1341,Blind Men - 010089D011310000,010089D011310000,audout;status-playable,playable,2021-02-20 14:15:38,2 -1343,Darksiders Warmastered Edition - 0100E1400BA96000,0100E1400BA96000,status-playable;nvdec,playable,2023-03-02 18:08:09,4 -1344,OBAKEIDORO!,,nvdec;online;status-playable,playable,2020-10-16 16:57:34,3 -1345,De:YABATANIEN,,,,2020-05-23 10:48:51,1 -1346,Crash Dummy,,nvdec;status-playable,playable,2020-05-23 11:12:43,1 -1347,Castlevania Anniversary Collection,,audio;status-playable,playable,2020-05-23 11:40:29,1 -1348,Flan - 010038200E088000,010038200E088000,status-ingame;crash;regression,ingame,2021-11-17 7:39:28,3 -1349,Sisters Royale: Five Sisters Under Fire,,,,2020-05-23 15:12:09,1 -1350,Game Tengoku CruisinMix Special,,,,2020-05-23 17:30:59,1 -1351,Cosmic Star Heroine - 010067C00A776000,010067C00A776000,status-playable,playable,2021-02-20 14:30:47,2 -1352,Croixleur Sigma - 01000F0007D92000,01000F0007D92000,status-playable;online,playable,2022-07-22 14:26:54,3 -1353,Cities: Skylines - Nintendo Switch Edition,,status-playable,playable,2020-12-16 10:34:57,3 -1354,Castlestorm - 010097C00AB66000,010097C00AB66000,status-playable;nvdec,playable,2022-07-21 22:49:14,5 -1355,Coffin Dodgers - 0100178009648000,0100178009648000,status-playable,playable,2021-02-20 14:57:41,2 -1356,Child of Light,,nvdec;status-playable,playable,2020-12-16 10:23:10,7 -1357,Wizards of Brandel,,status-nothing,nothing,2020-10-14 15:52:33,3 -1358,Contra Anniversary Collection - 0100DCA00DA7E000,0100DCA00DA7E000,status-playable,playable,2022-07-22 11:30:12,2 -1359,Cartoon Network Adventure Time: Pirates of the Enchiridion - 0100C4E004406000,0100C4E004406000,status-playable;nvdec,playable,2022-07-21 21:49:01,4 -1361,Claybook - 010009300AA6C000,010009300AA6C000,slow;status-playable;nvdec;online;UE4,playable,2022-07-22 11:11:34,4 -1363,Crashbots - 0100BF200CD74000,0100BF200CD74000,status-playable,playable,2022-07-22 13:50:52,2 -1364,Crossing Souls - 0100B1E00AA56000,0100B1E00AA56000,nvdec;status-playable,playable,2021-02-20 15:42:54,2 -1365,Groove Coaster: Wai Wai Party!!!! - 0100EB500D92E000,0100EB500D92E000,status-playable;nvdec;ldn-broken,playable,2021-11-06 14:54:27,5 -1367,Candle - The Power of the Flame,,nvdec;status-playable,playable,2020-05-26 12:10:20,1 -1368,Minecraft Dungeons - 01006C100EC08000,01006C100EC08000,status-playable;nvdec;online-broken;UE4,playable,2024-06-26 22:10:43,13 -1369,Constructor Plus,,status-playable,playable,2020-05-26 12:37:40,1 -1370,The Wonderful 101: Remastered - 0100B1300FF08000,0100B1300FF08000,slow;status-playable;nvdec,playable,2022-09-30 13:49:28,2 -1371,Dandara,,status-playable,playable,2020-05-26 12:42:33,1 -1372,ChromaGun,,status-playable,playable,2020-05-26 12:56:42,1 -1373,Crayola Scoot - 0100C66007E96000,0100C66007E96000,status-playable;nvdec,playable,2022-07-22 14:01:55,4 -1374,Chess Ultra - 0100A5900472E000,0100A5900472E000,status-playable;UE4,playable,2023-08-30 23:06:31,7 -1375,Clue,,crash;online;status-menus,menus,2020-11-10 9:23:48,2 -1376,ACA NEOGEO Metal Slug X,,crash;services;status-menus,menus,2020-05-26 14:07:20,1 -1377,ACA NEOGEO ZUPAPA!,,online;status-playable,playable,2021-03-25 20:07:33,3 -1378,ACA NEOGEO WORLD HEROES PERFECT,,crash;services;status-menus,menus,2020-05-26 14:14:36,1 -1379,ACA NEOGEO WAKU WAKU 7 - 0100CEF001DC0000,0100CEF001DC0000,online;status-playable,playable,2021-04-10 14:20:52,2 -1380,ACA NEOGEO THE SUPER SPY - 0100F7F00AFA2000,0100F7F00AFA2000,online;status-playable,playable,2021-04-10 14:26:33,3 -1381,ACA NEOGEO THE LAST BLADE 2 - 0100699008792000,0100699008792000,online;status-playable,playable,2021-04-10 14:31:54,3 -1382,ACA NEOGEO THE KING OF FIGHTERS '99 - 0100583001DCA000,0100583001DCA000,online;status-playable,playable,2021-04-10 14:36:56,3 -1383,ACA NEOGEO THE KING OF FIGHTERS '98,,crash;services;status-menus,menus,2020-05-26 14:54:20,1 -1384,ACA NEOGEO THE KING OF FIGHTERS '97 - 0100170008728000,0100170008728000,online;status-playable,playable,2021-04-10 14:43:27,3 -1385,ACA NEOGEO THE KING OF FIGHTERS '96 - 01006F0004FB4000,01006F0004FB4000,online;status-playable,playable,2021-04-10 14:49:10,3 -1386,ACA NEOGEO THE KING OF FIGHTERS '95 - 01009DC001DB6000,01009DC001DB6000,status-playable,playable,2021-03-29 20:27:35,5 -1387,ACA NEOGEO THE KING OF FIGHTERS '94,,crash;services;status-menus,menus,2020-05-26 15:03:44,1 -1388,ACA NEOGEO THE KING OF FIGHTERS 2003 - 0100EF100AFE6000,0100EF100AFE6000,online;status-playable,playable,2021-04-10 14:54:31,3 -1389,ACA NEOGEO THE KING OF FIGHTERS 2002 - 0100CFD00AFDE000,0100CFD00AFDE000,online;status-playable,playable,2021-04-10 15:01:55,2 -1390,ACA NEOGEO THE KING OF FIGHTERS 2001 - 010048200AFC2000,010048200AFC2000,online;status-playable,playable,2021-04-10 15:16:23,3 -1391,ACA NEOGEO THE KING OF FIGHTERS 2000 - 0100B97002B44000,0100B97002B44000,online;status-playable,playable,2021-04-10 15:24:35,3 -1392,ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY - 0100A4D00A308000,0100A4D00A308000,online;status-playable,playable,2021-04-10 15:39:22,3 -1393,ACA NEOGEO SUPER SIDEKICKS 2 - 010055A00A300000,010055A00A300000,online;status-playable,playable,2021-04-10 16:05:58,3 -1394,ACA NEOGEO SPIN MASTER - 01007D1004DBA000,01007D1004DBA000,online;status-playable,playable,2021-04-10 15:50:19,3 -1395,ACA NEOGEO SHOCK TROOPERS,,crash;services;status-menus,menus,2020-05-26 15:29:34,1 -1396,ACA NEOGEO SENGOKU 3 - 01008D000877C000,01008D000877C000,online;status-playable,playable,2021-04-10 16:11:53,3 -1397,ACA NEOGEO SENGOKU 2 - 01009B300872A000,01009B300872A000,online;status-playable,playable,2021-04-10 17:36:44,2 -1398,ACA NEOGEO SAMURAI SHODOWN SPECIAL V - 010049F00AFE8000,010049F00AFE8000,online;status-playable,playable,2021-04-10 18:07:13,2 -1399,ACA NEOGEO SAMURAI SHODOWN IV - 010047F001DBC000,010047F001DBC000,online;status-playable,playable,2021-04-12 12:58:54,2 -1400,ACA NEOGEO SAMURAI SHODOWN - 01005C9002B42000,01005C9002B42000,online;status-playable,playable,2021-04-01 17:11:35,2 -1401,ACA NEOGEO REAL BOUT FATAL FURY SPECIAL - 010088500878C000,010088500878C000,online;status-playable,playable,2021-04-01 17:18:27,2 -1402,ACA NEOGEO OVER TOP - 01003A5001DBA000,01003A5001DBA000,status-playable,playable,2021-02-21 13:16:25,2 -1403,ACA NEOGEO NINJA COMMANDO - 01007E800AFB6000,01007E800AFB6000,online;status-playable,playable,2021-04-01 17:28:18,2 -1404,ACA NEOGEO NINJA COMBAT - 010052A00A306000,010052A00A306000,status-playable,playable,2021-03-29 21:17:28,5 -1405,ACA NEOGEO NEO TURF MASTERS - 01002E70032E8000,01002E70032E8000,status-playable,playable,2021-02-21 15:12:01,2 -1406,ACA NEOGEO Money Puzzle Exchanger - 010038F00AFA0000,010038F00AFA0000,online;status-playable,playable,2021-04-01 17:59:56,2 -1407,ACA NEOGEO METAL SLUG 4 - 01009CE00AFAE000,01009CE00AFAE000,online;status-playable,playable,2021-04-01 18:12:18,2 -1408,ACA NEOGEO METAL SLUG 3,,crash;services;status-menus,menus,2020-05-26 16:32:45,1 -1409,ACA NEOGEO METAL SLUG 2 - 010086300486E000,010086300486E000,online;status-playable,playable,2021-04-01 19:25:52,2 -1410,ACA NEOGEO METAL SLUG - 0100EBE002B3E000,0100EBE002B3E000,status-playable,playable,2021-02-21 13:56:48,2 -1411,ACA NEOGEO MAGICIAN LORD - 01007920038F6000,01007920038F6000,online;status-playable,playable,2021-04-01 19:33:26,2 -1412,ACA NEOGEO MAGICAL DROP II,,crash;services;status-menus,menus,2020-05-26 16:48:24,1 -1413,SNK Gals Fighters,,,,2020-05-26 16:56:16,1 -1414,ESP Ra.De. Psi - 0100F9600E746000,0100F9600E746000,audio;slow;status-ingame,ingame,2024-03-07 15:05:08,4 -1415,ACA NEOGEO LEAGUE BOWLING,,crash;services;status-menus,menus,2020-05-26 17:11:04,1 -1416,ACA NEOGEO LAST RESORT - 01000D10038E6000,01000D10038E6000,online;status-playable,playable,2021-04-01 19:51:22,2 -1417,ACA NEOGEO GHOST PILOTS - 01005D700A2F8000,01005D700A2F8000,online;status-playable,playable,2021-04-01 20:26:45,2 -1418,ACA NEOGEO GAROU: MARK OF THE WOLVES - 0100CB2001DB8000,0100CB2001DB8000,online;status-playable,playable,2021-04-01 20:31:10,2 -1419,ACA NEOGEO FOOTBALL FRENZY,,status-playable,playable,2021-03-29 20:12:12,5 -1420,ACA NEOGEO FATAL FURY - 0100EE6002B48000,0100EE6002B48000,online;status-playable,playable,2021-04-01 20:36:23,2 -1421,ACA NEOGEO CROSSED SWORDS - 0100D2400AFB0000,0100D2400AFB0000,online;status-playable,playable,2021-04-01 20:42:59,2 -1422,ACA NEOGEO BLAZING STAR,,crash;services;status-menus,menus,2020-05-26 17:29:02,1 -1423,ACA NEOGEO BASEBALL STARS PROFESSIONAL - 01003FE00A2F6000,01003FE00A2F6000,online;status-playable,playable,2021-04-01 21:23:05,2 -1424,ACA NEOGEO AGGRESSORS OF DARK KOMBAT - 0100B4800AFBA000,0100B4800AFBA000,online;status-playable,playable,2021-04-01 22:48:01,2 -1425,ACA NEOGEO AERO FIGHTERS 3 - 0100B91008780000,0100B91008780000,online;status-playable,playable,2021-04-12 13:11:17,2 -1426,ACA NEOGEO 3 COUNT BOUT - 0100FC000AFC6000,0100FC000AFC6000,online;status-playable,playable,2021-04-12 13:16:42,2 -1427,ACA NEOGEO 2020 SUPER BASEBALL - 01003C400871E000,01003C400871E000,online;status-playable,playable,2021-04-12 13:23:51,2 -1428,Arcade Archives Traverse USA - 010029D006ED8000,010029D006ED8000,online;status-playable,playable,2021-04-15 8:11:06,4 -1429,Arcade Archives TERRA CRESTA,,crash;services;status-menus,menus,2020-08-18 20:20:55,3 -1430,Arcade Archives STAR FORCE - 010069F008A38000,010069F008A38000,online;status-playable,playable,2021-04-15 8:39:09,4 -1431,Arcade Archives Sky Skipper - 010008F00B054000,010008F00B054000,online;status-playable,playable,2021-04-15 8:58:09,4 -1432,Arcade Archives RYGAR - 0100C2D00981E000,0100C2D00981E000,online;status-playable,playable,2021-04-15 8:48:30,4 -1433,Arcade Archives Renegade - 010081E001DD2000,010081E001DD2000,status-playable;online,playable,2022-07-21 11:45:40,5 -1434,Arcade Archives PUNCH-OUT!! - 01001530097F8000,01001530097F8000,online;status-playable,playable,2021-03-25 22:10:55,4 -1435,Arcade Archives OMEGA FIGHTER,,crash;services;status-menus,menus,2020-08-18 20:50:54,3 -1436,Arcade Archives Ninja-Kid,,online;status-playable,playable,2021-03-26 20:55:07,4 -1437,Arcade Archives NINJA GAIDEN - 01003EF00D3B4000,01003EF00D3B4000,audio;online;status-ingame,ingame,2021-04-12 16:27:53,4 -1438,Arcade Archives MOON PATROL - 01003000097FE000,01003000097FE000,online;status-playable,playable,2021-03-26 11:42:04,4 -1439,Arcade Archives MARIO BROS. - 0100755004608000,0100755004608000,online;status-playable,playable,2021-03-26 11:31:32,4 -1440,Arcade Archives Kid's Horehore Daisakusen - 0100E7C001DE0000,0100E7C001DE0000,online;status-playable,playable,2021-04-12 16:21:29,4 -1441,Arcade Archives Kid Niki Radical Ninja - 010010B008A36000,010010B008A36000,audio;status-ingame;online,ingame,2022-07-21 11:02:04,5 -1442,Arcade Archives Ikki - 01000DB00980A000,01000DB00980A000,online;status-playable,playable,2021-03-25 23:11:28,4 -1443,Arcade Archives HEROIC EPISODE - 01009A4008A30000,01009A4008A30000,online;status-playable,playable,2021-03-25 23:01:26,4 -1444,Arcade Archives DOUBLE DRAGON II The Revenge - 01009E3001DDE000,01009E3001DDE000,online;status-playable,playable,2021-04-12 16:05:29,4 -1445,Arcade Archives DOUBLE DRAGON - 0100F25001DD0000,0100F25001DD0000,online;status-playable,playable,2021-03-25 22:44:34,4 -1446,Arcade Archives DONKEY KONG,,Needs Update;crash;services;status-menus,menus,2021-03-24 18:18:43,4 -1447,Arcade Archives CRAZY CLIMBER - 0100BB1001DD6000,0100BB1001DD6000,online;status-playable,playable,2021-03-25 22:24:15,4 -1448,Arcade Archives City CONNECTION - 010007A00980C000,010007A00980C000,online;status-playable,playable,2021-03-25 22:16:15,4 -1449,Arcade Archives 10-Yard Fight - 0100BE80097FA000,0100BE80097FA000,online;status-playable,playable,2021-03-25 21:26:41,4 -1450,Ark: Survival Evolved - 0100D4A00B284000,0100D4A00B284000,gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 0:53:56,4 -1451,Art of Balance - 01008EC006BE2000,01008EC006BE2000,gpu;status-ingame;ldn-works,ingame,2022-07-21 17:13:57,3 -1452,Aces of the Luftwaffe Squadron,,nvdec;slow;status-playable,playable,2020-05-27 12:29:42,1 -1453,Atelier Lulua ~ The Scion of Arland ~,,nvdec;status-playable,playable,2020-12-16 14:29:19,2 -1454,Apocalipsis,,deadlock;status-menus,menus,2020-05-27 12:56:37,1 -1456,Aqua Moto Racing Utopia - 0100D0D00516A000,0100D0D00516A000,status-playable,playable,2021-02-21 21:21:00,2 -1457,Arc of Alchemist - 0100C7D00E6A0000,0100C7D00E6A0000,status-playable;nvdec,playable,2022-10-07 19:15:54,3 -1458,1979 Revolution: Black Friday - 0100D1000B18C000,0100D1000B18C000,nvdec;status-playable,playable,2021-02-21 21:03:43,2 -1459,ABZU - 0100C1300BBC6000,0100C1300BBC6000,status-playable;UE4,playable,2022-07-19 15:02:52,3 -1460,Asterix & Obelix XXL 2 - 010050400BD38000,010050400BD38000,deadlock;status-ingame;nvdec,ingame,2022-07-21 17:54:14,3 -1461,Astro Bears Party,,status-playable,playable,2020-05-28 11:21:58,1 -1462,AQUA KITTY UDX - 0100AC10085CE000,0100AC10085CE000,online;status-playable,playable,2021-04-12 15:34:11,4 -1463,Assassin's Creed III Remastered - 01007F600B134000,01007F600B134000,status-boots;nvdec,boots,2024-06-25 20:12:11,4 -1464,Antiquia Lost,,status-playable,playable,2020-05-28 11:57:32,1 -1465,Animal Super Squad - 0100EFE009424000,0100EFE009424000,UE4;status-playable,playable,2021-04-23 20:50:50,4 -1466,Anima: Arcane Edition - 010033F00B3FA000,010033F00B3FA000,nvdec;status-playable,playable,2021-01-26 16:55:51,2 -1467,American Ninja Warrior: Challenge - 010089D00A3FA000,010089D00A3FA000,nvdec;status-playable,playable,2021-06-09 13:11:17,5 -1468,Air Conflicts: Pacific Carriers,,status-playable,playable,2021-01-04 10:52:50,2 -1469,Agatha Knife,,status-playable,playable,2020-05-28 12:37:58,1 -1470,ACORN Tactics - 0100DBC0081A4000,0100DBC0081A4000,status-playable,playable,2021-02-22 12:57:40,2 -1471,Anarcute - 010050900E1C6000,010050900E1C6000,status-playable,playable,2021-02-22 13:17:59,2 -1472,39 Days to Mars - 0100AF400C4CE000,0100AF400C4CE000,status-playable,playable,2021-02-21 22:12:46,2 -1473,Animal Rivals Switch - 010065B009B3A000,010065B009B3A000,status-playable,playable,2021-02-22 14:02:42,2 -1474,88 Heroes,,status-playable,playable,2020-05-28 14:13:02,1 -1475,Aegis Defenders - 01008E60065020000,01008E6006502000,status-playable,playable,2021-02-22 13:29:33,2 -1476,Jeopardy! - 01006E400AE2A000,01006E400AE2A000,audout;nvdec;online;status-playable,playable,2021-02-22 13:53:46,2 -1477,Akane - 01007F100DE52000,01007F100DE52000,status-playable;nvdec,playable,2022-07-21 0:12:18,2 -1478,Aaero - 010097A00CC0A000,010097A00CC0A000,status-playable;nvdec,playable,2022-07-19 14:49:55,4 -1479,99Vidas,,online;status-playable,playable,2020-10-29 13:00:40,3 -1480,AngerForce: Reloaded for Nintendo Switch - 010001E00A5F6000,010001E00A5F6000,status-playable,playable,2022-07-21 10:37:17,4 -1481,36 Fragments of Midnight,,status-playable,playable,2020-05-28 15:12:59,1 -1482,Akihabara - Feel the Rhythm Remixed - 010053100B0EA000,010053100B0EA000,status-playable,playable,2021-02-22 14:39:35,2 -1483,Bertram Fiddle Episode 2: A Bleaker Predicklement - 010021F00C1C0000,010021F00C1C0000,nvdec;status-playable,playable,2021-02-22 14:56:37,2 -1484,6180 the moon,,status-playable,playable,2020-05-28 15:39:24,1 -1485,Ace of Seafood - 0100FF1004D56000,0100FF1004D56000,status-playable,playable,2022-07-19 15:32:25,2 -1486,12 orbits,,status-playable,playable,2020-05-28 16:13:26,1 -1487,Access Denied - 0100A9900CB5C000,0100A9900CB5C000,status-playable,playable,2022-07-19 15:25:10,2 -1488,Air Hockey,,status-playable,playable,2020-05-28 16:44:37,1 -1489,2064: Read Only Memories,,deadlock;status-menus,menus,2020-05-28 16:53:58,1 -1490,12 is Better Than 6 - 01007F600D1B8000,01007F600D1B8000,status-playable,playable,2021-02-22 16:10:12,2 -1491,Sid Meier's Civilization VI - 010044500C182000,010044500C182000,status-playable;ldn-untested,playable,2024-04-08 16:03:40,7 -1492,Sniper Elite V2 Remastered - 0100BB000A3AA000,0100BB000A3AA000,slow;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13,5 -1493,South Park: The Fractured But Whole - 01008F2005154000,01008F2005154000,slow;status-playable;online-broken,playable,2024-07-08 17:47:28,5 -1494,SkyScrappers,,status-playable,playable,2020-05-28 22:11:25,1 -1495,Shio - 0100C2F00A568000,0100C2F00A568000,status-playable,playable,2021-02-22 16:25:09,2 -1496,NBA 2K18 - 0100760002048000,0100760002048000,gpu;status-ingame;ldn-untested,ingame,2022-08-06 14:17:51,3 -1497,Sky Force Anniversary - 010083100B5CA000,010083100B5CA000,status-playable;online-broken,playable,2022-08-12 20:50:07,2 -1498,Slay the Spire - 010026300BA4A000,010026300BA4A000,status-playable,playable,2023-01-20 15:09:26,4 -1499,Sky Gamblers: Storm Raiders - 010093D00AC38000,010093D00AC38000,gpu;audio;status-ingame;32-bit,ingame,2022-08-12 21:13:36,8 -1500,Shovel Knight: Treasure Trove,,status-playable,playable,2021-02-14 18:24:39,4 -1501,Sine Mora EX - 01002820036A8000,01002820036A8000,gpu;status-ingame;online-broken,ingame,2022-08-12 19:36:18,7 -1502,NBA Playgrounds - 0100F5A008126000,0100F5A008126000,status-playable;nvdec;online-broken;UE4,playable,2022-08-06 16:13:44,6 -1503,Shut Eye,,status-playable,playable,2020-07-23 18:08:35,2 -1504,SINNER: Sacrifice for Redemption - 0100B16009C10000,0100B16009C10000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33,5 -1505,SKYPEACE,,status-playable,playable,2020-05-29 14:14:30,1 -1506,Slain,,status-playable,playable,2020-05-29 14:26:16,1 -1507,Umihara Kawase BaZooka!,,,,2020-05-29 14:56:48,1 -1508,Sigi - A Fart for Melusina - 01007FC00B674000,01007FC00B674000,status-playable,playable,2021-02-22 16:46:58,2 -1509,Sky Ride - 0100DDB004F30000,0100DDB004F30000,status-playable,playable,2021-02-22 16:53:07,2 -1510,Soccer Slammers,,status-playable,playable,2020-05-30 7:48:14,1 -1511,Songbringer,,status-playable,playable,2020-06-22 10:42:02,3 -1512,Sky Rogue,,status-playable,playable,2020-05-30 8:26:28,1 -1513,Shovel Knight: Specter of Torment,,status-playable,playable,2020-05-30 8:34:17,1 -1514,Snow Moto Racing Freedom - 010045300516E000,010045300516E000,gpu;status-ingame;vulkan-backend-bug,ingame,2022-08-15 16:05:14,4 -1515,Snake Pass - 0100C0F0020E8000,0100C0F0020E8000,status-playable;nvdec;UE4,playable,2022-01-03 4:31:52,5 -1516,Shu,,nvdec;status-playable,playable,2020-05-30 9:08:59,1 -1517,"SOLDAM Drop, Connect, Erase",,status-playable,playable,2020-05-30 9:18:54,1 -1518,SkyTime,,slow;status-ingame,ingame,2020-05-30 9:24:51,1 -1519,NBA 2K19 - 01001FF00B544000,01001FF00B544000,crash;ldn-untested;services;status-nothing,nothing,2021-04-16 13:07:21,2 -1520,Shred!2 - Freeride MTB,,status-playable,playable,2020-05-30 14:34:09,1 -1521,Skelly Selest,,status-playable,playable,2020-05-30 15:38:18,1 -1522,Snipperclips Plus - 01008E20047DC000,01008E20047DC000,status-playable,playable,2023-02-14 20:20:13,4 -1523,SolDivide for Nintendo Switch - 0100590009C38000,0100590009C38000,32-bit;status-playable,playable,2021-06-09 14:13:03,6 -1524,Slime-san,,status-playable,playable,2020-05-30 16:15:12,1 -1525,Skies of Fury,,status-playable,playable,2020-05-30 16:40:54,1 -1526,SlabWell - 01003AD00DEAE000,01003AD00DEAE000,status-playable,playable,2021-02-22 17:02:51,2 -1527,Smoke and Sacrifice - 0100207007EB2000,0100207007EB2000,status-playable,playable,2022-08-14 12:38:27,2 -1528,Sky Gamblers - Afterburner - 010003F00CC98000,010003F00CC98000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55,5 -1529,Slice Dice & Rice - 0100F4500AA4E000,0100F4500AA4E000,online;status-playable,playable,2021-02-22 17:44:23,2 -1530,Slayaway Camp: Butcher's Cut - 0100501006494000,0100501006494000,status-playable;opengl-backend-bug,playable,2022-08-12 23:44:05,4 -1531,Snowboarding the Next Phase - 0100BE200C34A000,0100BE200C34A000,nvdec;status-playable,playable,2021-02-23 12:56:58,2 -1532,Skylanders Imaginators,,crash;services;status-boots,boots,2020-05-30 18:49:18,1 -1533,Slime-san Superslime Edition,,status-playable,playable,2020-05-30 19:08:08,1 -1534,Skee-Ball,,status-playable,playable,2020-11-16 4:44:07,3 -1535,Marvel Ultimate Alliance 3: The Black Order - 010060700AC50000,010060700AC50000,status-playable;nvdec;ldn-untested,playable,2024-02-14 19:51:51,33 -1536,The Elder Scrolls V: Skyrim - 01000A10041EA000,01000A10041EA000,gpu;status-ingame;crash,ingame,2024-07-14 3:21:31,7 -1537,Risk of Rain,,,,2020-05-31 22:32:45,1 -1538,Risk of Rain 2 - 010076D00E4BA000,010076D00E4BA000,status-playable;online-broken,playable,2024-03-04 17:01:05,6 -1539,The Mummy Demastered - 0100496004194000,0100496004194000,status-playable,playable,2021-02-23 13:11:27,2 -1540,Teslagrad - 01005C8005F34000,01005C8005F34000,status-playable,playable,2021-02-23 14:41:02,2 -1541,Pushy and Pully in Blockland,,status-playable,playable,2020-07-04 11:44:41,3 -1542,The Raven Remastered - 010058A00BF1C000,010058A00BF1C000,status-playable;nvdec,playable,2022-08-22 20:02:47,2 -1543,Reed Remastered,,,,2020-05-31 23:15:15,1 -1544,The Infectious Madness of Doctor Dekker - 01008940086E0000,01008940086E0000,status-playable;nvdec,playable,2022-08-22 16:45:01,3 -1545,The Fall,,gpu;status-ingame,ingame,2020-05-31 23:31:16,1 -1546,The Fall Part 2: Unbound,,status-playable,playable,2021-11-06 2:18:08,2 -1547,The Red Strings Club,,status-playable,playable,2020-06-01 10:51:18,1 -1548,Omega Labyrinth Life - 01001D600E51A000,01001D600E51A000,status-playable,playable,2021-02-23 21:03:03,2 -1549,The Mystery of the Hudson Case,,status-playable,playable,2020-06-01 11:03:36,1 -1550,Tennis World Tour - 0100092006814000,0100092006814000,status-playable;online-broken,playable,2022-08-22 14:27:10,7 -1551,The Lost Child - 01008A000A404000,01008A000A404000,nvdec;status-playable,playable,2021-02-23 15:44:20,2 -1552,Little Misfortune - 0100E7000E826000,0100E7000E826000,nvdec;status-playable,playable,2021-02-23 20:39:44,2 -1553,The End is Nigh,,status-playable,playable,2020-06-01 11:26:45,1 -1554,The Caligula Effect: Overdose,,UE4;gpu;status-ingame,ingame,2021-01-04 11:07:50,2 -1555,The Flame in the Flood: Complete Edition - 0100C38004DCC000,0100C38004DCC000,gpu;status-ingame;nvdec;UE4,ingame,2022-08-22 16:23:49,4 -1556,The Journey Down: Chapter One - 010052C00B184000,010052C00B184000,nvdec;status-playable,playable,2021-02-24 13:32:41,2 -1557,The Journey Down: Chapter Two,,nvdec;status-playable,playable,2021-02-24 13:32:13,2 -1558,The Journey Down: Chapter Three - 01006BC00B188000,01006BC00B188000,nvdec;status-playable,playable,2021-02-24 13:45:27,2 -1559,The Mooseman - 010033300AC1A000,010033300AC1A000,status-playable,playable,2021-02-24 12:58:57,2 -1560,The Long Reach - 010052B003A38000,010052B003A38000,nvdec;status-playable,playable,2021-02-24 14:09:48,2 -1561,Asdivine Kamura,,,,2020-06-01 15:04:50,1 -1562,THE LAST REMNANT Remastered - 0100AC800D022000,0100AC800D022000,status-playable;nvdec;UE4,playable,2023-02-09 17:24:44,7 -1563,The Princess Guide - 0100E6A00B960000,0100E6A00B960000,status-playable,playable,2021-02-24 14:23:34,2 -1564,The LEGO NINJAGO Movie Video Game - 01007FC00206E000,01007FC00206E000,status-nothing;crash,nothing,2022-08-22 19:12:53,3 -1565,The Next Penelope - 01000CF0084BC000,01000CF0084BC000,status-playable,playable,2021-01-29 16:26:11,2 -1566,Tennis,,status-playable,playable,2020-06-01 20:50:36,1 -1567,The King's Bird - 010020500BD98000,010020500BD98000,status-playable,playable,2022-08-22 19:07:46,2 -1568,The First Tree - 010098800A1E4000,010098800A1E4000,status-playable,playable,2021-02-24 15:51:05,2 -1569,The Jackbox Party Pack - 0100AE5003EE6000,0100AE5003EE6000,status-playable;online-working,playable,2023-05-28 9:28:40,4 -1570,The Jackbox Party Pack 2 - 010015D003EE4000,010015D003EE4000,status-playable;online-working,playable,2022-08-22 18:23:40,3 -1571,The Jackbox Party Pack 3 - 0100CC80013D6000,0100CC80013D6000,slow;status-playable;online-working,playable,2022-08-22 18:41:06,2 -1572,The Jackbox Party Pack 4 - 0100E1F003EE8000,0100E1F003EE8000,status-playable;online-working,playable,2022-08-22 18:56:34,2 -1573,The LEGO Movie 2 - Videogame - 0100A4400BE74000,0100A4400BE74000,status-playable,playable,2023-03-01 11:23:37,4 -1574,The Gardens Between - 0100B13007A6A000,0100B13007A6A000,status-playable,playable,2021-01-29 16:16:53,2 -1575,The Bug Butcher,,status-playable,playable,2020-06-03 12:02:04,1 -1576,Funghi Puzzle Funghi Explosion,,status-playable,playable,2020-11-23 14:17:41,3 -1577,The Escapists: Complete Edition - 01001B700BA7C000,01001B700BA7C000,status-playable,playable,2021-02-24 17:50:31,2 -1578,The Escapists 2,,nvdec;status-playable,playable,2020-09-24 12:31:31,2 -1579,TENGAI for Nintendo Switch,,32-bit;status-playable,playable,2020-11-25 19:52:26,4 -1580,The Book of Unwritten Tales 2 - 010062500BFC0000,010062500BFC0000,status-playable,playable,2021-06-09 14:42:53,3 -1581,The Bridge,,status-playable,playable,2020-06-03 13:53:26,1 -1582,Ai: the Somnium Files - 010089B00D09C000,010089B00D09C000,status-playable;nvdec,playable,2022-09-04 14:45:06,2 -1583,The Coma: Recut,,status-playable,playable,2020-06-03 15:11:23,1 -1584,Ara Fell: Enhanced Edition,,,,2020-06-03 15:11:30,1 -1585,The Final Station - 0100CDC00789E000,0100CDC00789E000,status-playable;nvdec,playable,2022-08-22 15:54:39,2 -1586,The Count Lucanor - 01000850037C0000,01000850037C0000,status-playable;nvdec,playable,2022-08-22 15:26:37,3 -1587,Testra's Escape,,status-playable,playable,2020-06-03 18:21:14,1 -1588,The Low Road - 0100BAB00A116000,0100BAB00A116000,status-playable,playable,2021-02-26 13:23:22,2 -1589,The Adventure Pals - 01008ED0087A4000,01008ED0087A4000,status-playable,playable,2022-08-22 14:48:52,2 -1591,The Longest Five Minutes - 0100CE1004E72000,0100CE1004E72000,gpu;status-boots,boots,2023-02-19 18:33:11,7 -1592,The Inner World,,nvdec;status-playable,playable,2020-06-03 21:22:29,1 -1593,The Inner World - The Last Wind Monk,,nvdec;status-playable,playable,2020-11-16 13:09:40,3 -1594,The MISSING: J.J. Macfield and the Island of Memories - 0100F1B00B456000,0100F1B00B456000,status-playable,playable,2022-08-22 19:36:18,2 -1595,Jim Is Moving Out!,,deadlock;status-ingame,ingame,2020-06-03 22:05:19,1 -1596,The Darkside Detective,,status-playable,playable,2020-06-03 22:16:18,1 -1597,Tesla vs Lovecraft - 0100FBC007EAE000,0100FBC007EAE000,status-playable,playable,2023-11-21 6:19:36,6 -1598,The Lion's Song - 0100735004898000,0100735004898000,status-playable,playable,2021-06-09 15:07:16,3 -1599,Tennis in the Face - 01002970080AA000,01002970080AA000,status-playable,playable,2022-08-22 14:10:54,4 -1600,The Adventures of Elena Temple,,status-playable,playable,2020-06-03 23:15:35,1 -1602,The friends of Ringo Ishikawa - 010030700CBBC000,010030700CBBC000,status-playable,playable,2022-08-22 16:33:17,4 -1603,Redeemer: Enhanced Edition - 01000D100DCF8000,01000D100DCF8000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24,3 -1604,Alien Escape,,status-playable,playable,2020-06-03 23:43:18,1 -1605,LEGO DC Super-Villains - 010070D009FEC000,010070D009FEC000,status-playable,playable,2021-05-27 18:10:37,3 -1606,LEGO Worlds,,crash;slow;status-ingame,ingame,2020-07-17 13:35:39,2 -1607,LEGO The Incredibles - 0100A01006E00000,0100A01006E00000,status-nothing;crash,nothing,2022-08-03 18:36:59,5 -1608,LEGO Harry Potter Collection - 010052A00B5D2000,010052A00B5D2000,status-ingame;crash,ingame,2024-01-31 10:28:07,8 -1609,Reed 2,,,,2020-06-04 16:43:29,1 -1610,The Men of Yoshiwara: Ohgiya,,,,2020-06-04 17:00:22,1 -1611,The Rainsdowne Players,,,,2020-06-04 17:16:02,1 -1612,Tonight we Riot - 0100D400100F8000,0100D400100F8000,status-playable,playable,2021-02-26 15:55:09,2 -1613,Skelattack - 01001A900F862000,01001A900F862000,status-playable,playable,2021-06-09 15:26:26,3 -1614,HyperParasite - 010061400ED90000,010061400ED90000,status-playable;nvdec;UE4,playable,2022-09-27 22:05:44,7 -1615,Climbros,,,,2020-06-04 21:02:21,1 -1616,Sweet Witches - 0100D6D00EC2C000,0100D6D00EC2C000,status-playable;nvdec,playable,2022-10-20 14:56:37,3 -1617,Whispering Willows - 010015A00AF1E000,010015A00AF1E000,status-playable;nvdec,playable,2022-09-30 22:33:05,4 -1618,The Outer Worlds - 0100626011656000,0100626011656000,gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32,3 -1619,RADIO HAMMER STATION - 01008FA00ACEC000,01008FA00ACEC000,audout;status-playable,playable,2021-02-26 20:20:06,2 -1620,Light Tracer - 010087700D07C000,010087700D07C000,nvdec;status-playable,playable,2021-05-05 19:15:43,2 -1621,Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE - 0100D4300EBF8000,0100D4300EBF8000,status-nothing;crash;Needs More Attention;Needs Update,nothing,2022-02-09 8:57:44,2 -1622,The Amazing Shinsengumi: Heroes in Love,,,,2020-06-06 9:27:49,1 -1623,Snow Battle Princess Sayuki,,,,2020-06-06 11:59:03,1 -1624,Good Job!,,status-playable,playable,2021-03-02 13:15:55,3 -1625,Ghost Blade HD - 010063200C588000,010063200C588000,status-playable;online-broken,playable,2022-09-13 21:51:21,5 -1626,HardCube - 01000C90117FA000,01000C90117FA000,status-playable,playable,2021-05-05 18:33:03,2 -1627,STAR OCEAN First Departure R - 0100EBF00E702000,0100EBF00E702000,nvdec;status-playable,playable,2021-07-05 19:29:16,1 -1629,Hair Mower 3D,,,,2020-06-08 2:29:17,1 -1630,Clubhouse Games: 51 Worldwide Classics - 010047700D540000,010047700D540000,status-playable;ldn-works,playable,2024-05-21 16:12:57,5 -1631,Torchlight 2,,status-playable,playable,2020-07-27 14:18:37,2 -1632,Creature in the Well,,UE4;gpu;status-ingame,ingame,2020-11-16 12:52:40,3 -1633,Panty Party,,,,2020-06-08 14:06:02,1 -1634,DEADLY PREMONITION Origins - 0100EBE00F22E000,0100EBE00F22E000,32-bit;status-playable;nvdec,playable,2024-03-25 12:47:46,8 -1635,Pillars of Eternity - 0100D6200E130000,0100D6200E130000,status-playable,playable,2021-02-27 0:24:21,2 -1636,Jump King,,status-playable,playable,2020-06-09 10:12:39,1 -1638,Bug Fables,,status-playable,playable,2020-06-09 11:27:00,1 -1639,DOOM 3 - 010029D00E740000,010029D00E740000,status-menus;crash,menus,2024-08-03 5:25:47,8 -1640,Raiden V: Director's Cut - 01002B000D97E000,01002B000D97E000,deadlock;status-boots;nvdec,boots,2024-07-12 7:31:46,6 -1641,Fantasy Strike - 0100944003820000,0100944003820000,online;status-playable,playable,2021-02-27 1:59:18,2 -1642,Hell Warders - 0100A4600E27A000,0100A4600E27A000,online;status-playable,playable,2021-02-27 2:31:03,2 -1643,THE NINJA SAVIORS Return of the Warriors - 01001FB00E386000,01001FB00E386000,online;status-playable,playable,2021-03-25 23:48:07,5 -1644,DOOM (1993) - 010018900DD00000,010018900DD00000,status-menus;nvdec;online-broken,menus,2022-09-06 13:32:19,4 -1645,DOOM 2 - 0100D4F00DD02000,0100D4F00DD02000,nvdec;online;status-playable,playable,2021-06-03 20:10:01,5 -1646,Songbird Symphony - 0100E5400BF94000,0100E5400BF94000,status-playable,playable,2021-02-27 2:44:04,2 -1647,Titans Pinball,,slow;status-playable,playable,2020-06-09 16:53:52,1 -1648,TERRORHYTHM (TRRT) - 010043700EB68000,010043700EB68000,status-playable,playable,2021-02-27 13:18:14,2 -1649,Pawarumi - 0100A56006CEE000,0100A56006CEE000,status-playable;online-broken,playable,2022-09-10 15:19:33,3 -1650,Rise: Race the Future - 01006BA00E652000,01006BA00E652000,status-playable,playable,2021-02-27 13:29:06,2 -1651,Run the Fan - 010074F00DE4A000,010074F00DE4A000,status-playable,playable,2021-02-27 13:36:28,2 -1652,Tetsumo Party,,status-playable,playable,2020-06-09 22:39:55,1 -1653,Snipperclips - 0100704000B3A000,0100704000B3A000,status-playable,playable,2022-12-05 12:44:55,2 -1654,The Tower of Beatrice - 010047300EBA6000,010047300EBA6000,status-playable,playable,2022-09-12 16:51:42,1 -1655,FIA European Truck Racing Championship - 01007510040E8000,01007510040E8000,status-playable;nvdec,playable,2022-09-06 17:51:59,5 -1656,Bear With Me - The Lost Robots - 010020700DE04000,010020700DE04000,nvdec;status-playable,playable,2021-02-27 14:20:10,1 -1658,Mutant Year Zero: Road to Eden - 0100E6B00DEA4000,0100E6B00DEA4000,status-playable;nvdec;UE4,playable,2022-09-10 13:31:10,4 -1659,Solo: Islands of the Heart - 010008600D1AC000,010008600D1AC000,gpu;status-ingame;nvdec,ingame,2022-09-11 17:54:43,3 -1660,1971 PROJECT HELIOS - 0100829010F4A000,0100829010F4A000,status-playable,playable,2021-04-14 13:50:19,1 -1661,Damsel - 0100BD2009A1C000,0100BD2009A1C000,status-playable,playable,2022-09-06 11:54:39,3 -1662,The Forbidden Arts - 01007700D4AC000,,status-playable,playable,2021-01-26 16:26:24,1 -1663,Turok 2: Seeds of Evil - 0100CDC00D8D6000,0100CDC00D8D6000,gpu;status-ingame;vulkan,ingame,2022-09-12 17:50:05,6 -1664,"Tactics V: ""Obsidian Brigade"" - 01007C7006AEE000",01007C7006AEE000,status-playable,playable,2021-02-28 15:09:42,1 -1665,SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION - 01005DF00DC26000,01005DF00DC26000,UE4;gpu;online;status-ingame,ingame,2021-06-09 16:58:50,4 -1666,Subdivision Infinity DX - 010001400E474000,010001400E474000,UE4;crash;status-boots,boots,2021-03-03 14:26:46,1 -1667,#RaceDieRun,,status-playable,playable,2020-07-04 20:23:16,2 -1668,Wreckin' Ball Adventure - 0100C5D00EDB8000,0100C5D00EDB8000,status-playable;UE4,playable,2022-09-12 18:56:28,3 -1669,PictoQuest - 010043B00E1CE000,010043B00E1CE000,status-playable,playable,2021-02-27 15:03:16,1 -1670,VASARA Collection - 0100FE200AF48000,0100FE200AF48000,nvdec;status-playable,playable,2021-02-28 15:26:10,1 -1671,The Vanishing of Ethan Carter - 0100BCF00E970000,0100BCF00E970000,UE4;status-playable,playable,2021-06-09 17:14:47,2 -1672,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo - 010068300E08E000",010068300E08E000,gpu;status-ingame;nvdec,ingame,2022-11-20 16:18:45,1 -1674,Demon's Tier+ - 0100161011458000,0100161011458000,status-playable,playable,2021-06-09 17:25:36,2 -1676,INSTANT SPORTS - 010099700D750000,010099700D750000,status-playable,playable,2022-09-09 12:59:40,2 -1677,Friday the 13th: The Game - 010092A00C4B6000,010092A00C4B6000,status-playable;nvdec;online-broken;UE4,playable,2022-09-06 17:33:27,4 -1678,Arcade Archives VS. GRADIUS - 01004EC00E634000,01004EC00E634000,online;status-playable,playable,2021-04-12 14:53:58,4 -1679,Desktop Rugby,,,,2020-06-10 23:21:11,1 -1680,Divinity Original Sin 2 - 010027400CDC6000,010027400CDC6000,services;status-menus;crash;online-broken;regression,menus,2023-08-13 17:20:03,6 -1681,Grandia HD Collection - 0100E0600BBC8000,0100E0600BBC8000,status-boots;crash,boots,2024-08-19 4:29:48,11 -1682,Bubsy: Paws on Fire! - 0100DBE00C554000,0100DBE00C554000,slow;status-ingame,ingame,2023-08-24 2:44:51,4 -1683,River City Girls,,nvdec;status-playable,playable,2020-06-10 23:44:09,1 -1684,Super Dodgeball Beats,,,,2020-06-10 23:45:22,1 -1685,RAD - 010024400C516000,010024400C516000,gpu;status-menus;crash;UE4,menus,2021-11-29 2:01:56,3 -1686,Super Jumpy Ball,,status-playable,playable,2020-07-04 18:40:36,3 -1687,Headliner: NoviNews - 0100EFE00E1DC000,0100EFE00E1DC000,online;status-playable,playable,2021-03-01 11:36:00,2 -1688,Atelier Ryza: Ever Darkness & the Secret Hideout - 0100D1900EC80000,0100D1900EC80000,status-playable,playable,2023-10-15 16:36:50,2 -1689,Ancestors Legacy - 01009EE0111CC000,01009EE0111CC000,status-playable;nvdec;UE4,playable,2022-10-01 12:25:36,5 -1690,Resolutiion - 0100E7F00FFB8000,0100E7F00FFB8000,crash;status-boots,boots,2021-04-25 21:57:56,3 -1691,Puzzle Quest: The Legend Returns,,,,2020-06-11 10:05:15,1 -1692,FAR: Lone Sails - 010022700E7D6000,010022700E7D6000,status-playable,playable,2022-09-06 16:33:05,2 -1693,Awesome Pea 2 - 0100B7D01147E000,0100B7D01147E000,status-playable,playable,2022-10-01 12:34:19,3 -1694,Arcade Archives PLUS ALPHA,,audio;status-ingame,ingame,2020-07-04 20:47:55,3 -1695,Caveblazers - 01001A100C0E8000,01001A100C0E8000,slow;status-ingame,ingame,2021-06-09 17:57:28,3 -1696,Piofiore no banshou - ricordo,,,,2020-06-11 19:14:52,1 -1697,Raining Blobs,,,,2020-06-11 19:32:04,1 -1698,Hyper Jam,,UE4;crash;status-boots,boots,2020-12-15 22:52:11,2 -1699,The Midnight Sanctuary - 0100DEC00B2BC000,0100DEC00B2BC000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32,4 -1700,Indiecalypse,,nvdec;status-playable,playable,2020-06-11 20:19:09,1 -1701,Liberated - 0100C8000F146000,0100C8000F146000,gpu;status-ingame;nvdec,ingame,2024-07-04 4:58:24,5 -1702,Nelly Cootalot,,status-playable,playable,2020-06-11 20:55:42,1 -1703,Corpse Party: Blood Drive - 010016400B1FE000,010016400B1FE000,nvdec;status-playable,playable,2021-03-01 12:44:23,2 -1704,Professor Lupo and his Horrible Pets,,status-playable,playable,2020-06-12 0:08:45,1 -1705,Atelier Meruru ~ The Apprentice of Arland ~ DX,,nvdec;status-playable,playable,2020-06-12 0:50:48,1 -1706,Atelier Totori ~ The Adventurer of Arland ~ DX,,nvdec;status-playable,playable,2020-06-12 1:04:56,1 -1707,Red Wings - Aces of the Sky,,status-playable,playable,2020-06-12 1:19:53,1 -1708,L.F.O. - Lost Future Omega - ,,UE4;deadlock;status-boots,boots,2020-10-16 12:16:44,2 -1709,One Night Stand,,,,2020-06-12 16:34:34,1 -1710,They Came From the Sky,,status-playable,playable,2020-06-12 16:38:19,1 -1711,Nurse Love Addiction,,,,2020-06-12 16:48:29,1 -1712,THE TAKEOVER,,nvdec,,2020-06-12 16:52:28,1 -1713,Totally Reliable Delivery Service - 0100512010728000,0100512010728000,status-playable;online-broken,playable,2024-09-27 19:32:22,7 -1714,Nurse Love Syndrome - 010003701002C000,010003701002C000,status-playable,playable,2022-10-13 10:05:22,2 -1715,Undead and Beyond - 010076F011F54000,010076F011F54000,status-playable;nvdec,playable,2022-10-04 9:11:18,2 -1716,Borderlands: Game of the Year Edition - 010064800F66A000,010064800F66A000,slow;status-ingame;online-broken;ldn-untested,ingame,2023-07-23 21:10:36,3 -1717,TurtlePop: Journey to Freedom,,status-playable,playable,2020-06-12 17:45:39,1 -1718,DAEMON X MACHINA - 0100B6400CA56000,0100B6400CA56000,UE4;audout;ldn-untested;nvdec;status-playable,playable,2021-06-09 19:22:29,7 -1719,Blasphemous - 0100698009C6E000,0100698009C6E000,nvdec;status-playable,playable,2021-03-01 12:15:31,2 -1720,The Sinking City - 010028D00BA1A000,010028D00BA1A000,status-playable;nvdec;UE4,playable,2022-09-12 16:41:55,4 -1721,Battle Supremacy - Evolution - 010099B00E898000,010099B00E898000,gpu;status-boots;nvdec,boots,2022-02-17 9:02:50,3 -1722,STEINS;GATE: My Darling's Embrace - 0100CB400E9BC000,0100CB400E9BC000,status-playable;nvdec,playable,2022-11-20 16:48:34,3 -1723,Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition - 01006C300E9F0000,01006C300E9F0000,status-playable;UE4,playable,2021-11-27 12:27:11,8 -1724,Star Wars™ Pinball - 01006DA00DEAC000,01006DA00DEAC000,status-playable;online-broken,playable,2022-09-11 18:53:31,7 -1725,Space Cows,,UE4;crash;status-menus,menus,2020-06-15 11:33:20,1 -1726,Ritual - 0100BD300F0EC000,0100BD300F0EC000,status-playable,playable,2021-03-02 13:51:19,2 -1727,Snooker 19 - 01008DA00CBBA000,01008DA00CBBA000,status-playable;nvdec;online-broken;UE4,playable,2022-09-11 17:43:22,4 -1728,Sydney Hunter and the Curse of the Mayan,,status-playable,playable,2020-06-15 12:15:57,1 -1729,CONTRA: ROGUE CORPS,,crash;nvdec;regression;status-menus,menus,2021-01-07 13:23:35,8 -1730,Tyd wag vir Niemand - 010073A00C4B2000,010073A00C4B2000,status-playable,playable,2021-03-02 13:39:53,2 -1731,Detective Dolittle - 010030600E65A000,010030600E65A000,status-playable,playable,2021-03-02 14:03:59,2 -1733,Rebel Cops - 0100D9B00E22C000,0100D9B00E22C000,status-playable,playable,2022-09-11 10:02:53,2 -1734,Sayonara Wild Hearts - 010010A00A95E000,010010A00A95E000,status-playable,playable,2023-10-23 3:20:01,2 -1735,Neon Drive - 010032000EAC6000,010032000EAC6000,status-playable,playable,2022-09-10 13:45:48,2 -1736,GRID Autosport - 0100DC800A602000,0100DC800A602000,status-playable;nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45,5 -1737,DISTRAINT: Deluxe Edition,,status-playable,playable,2020-06-15 23:42:24,1 -1738,Jet Kave Adventure - 0100E4900D266000,0100E4900D266000,status-playable;nvdec,playable,2022-09-09 14:50:39,2 -1739,LEGO Jurassic World - 01001C100E772000,01001C100E772000,status-playable,playable,2021-05-27 17:00:20,3 -1740,Neo Cab Demo,,crash;status-boots,boots,2020-06-16 0:14:00,1 -1741,Reel Fishing: Road Trip Adventure - 010007C00E558000,010007C00E558000,status-playable,playable,2021-03-02 16:06:43,2 -1742,Zombie Army Trilogy,,ldn-untested;online;status-playable,playable,2020-12-16 12:02:28,2 -1743,Project Warlock,,status-playable,playable,2020-06-16 10:50:41,1 -1744,Super Toy Cars 2 - 0100C6800D770000,0100C6800D770000,gpu;regression;status-ingame,ingame,2021-03-02 20:15:15,2 -1745,Call of Cthulhu - 010046000EE40000,010046000EE40000,status-playable;nvdec;UE4,playable,2022-12-18 3:08:30,5 -1746,Overpass - 01008EA00E816000,01008EA00E816000,status-playable;online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47,6 -1747,The Little Acre - 0100A5000D590000,0100A5000D590000,nvdec;status-playable,playable,2021-03-02 20:22:27,2 -1748,Lost Horizon 2,,nvdec;status-playable,playable,2020-06-16 12:02:12,1 -1749,Rogue Robots,,status-playable,playable,2020-06-16 12:16:11,1 -1750,Skelittle: A Giant Party!! - 01008E700F952000,01008E700F952000,status-playable,playable,2021-06-09 19:08:34,3 -1751,Magazine Mogul - 01004A200E722000,01004A200E722000,status-playable;loader-allocator,playable,2022-10-03 12:05:34,2 -1752,Dead by Daylight - 01004C400CF96000,01004C400CF96000,status-boots;nvdec;online-broken;UE4,boots,2022-09-13 14:32:13,4 -1753,Ori and the Blind Forest: Definitive Edition - 010061D00DB74000,010061D00DB74000,status-playable;nvdec;online-broken,playable,2022-09-14 19:58:13,4 -1754,Northgard - 0100A9E00D97A000,0100A9E00D97A000,status-menus;crash,menus,2022-02-06 2:05:35,4 -1755,Freedom Finger - 010082B00EE50000,010082B00EE50000,nvdec;status-playable,playable,2021-06-09 19:31:30,4 -1756,Atelier Shallie: Alchemists of the Dusk Sea DX,,nvdec;status-playable,playable,2020-11-25 20:54:12,2 -1757,Dragon Quest - 0100EFC00EFB2000,0100EFC00EFB2000,gpu;status-boots,boots,2021-11-09 3:31:32,6 -1758,Dragon Quest II: Luminaries of the Legendary Line - 010062200EFB4000,010062200EFB4000,status-playable,playable,2022-09-13 16:44:11,7 -1759,Atelier Ayesha: The Alchemist of Dusk DX - 0100D9D00EE8C000,0100D9D00EE8C000,status-menus;crash;nvdec;Needs Update,menus,2021-11-24 7:29:54,2 -1760,Dragon Quest III: The Seeds of Salvation - 010015600EFB6000,010015600EFB6000,gpu;status-boots,boots,2021-11-09 3:38:34,6 -1761,Habroxia,,status-playable,playable,2020-06-16 23:04:42,1 -1762,Petoons Party - 010044400EEAE000,010044400EEAE000,nvdec;status-playable,playable,2021-03-02 21:07:58,2 -1763,Fight'N Rage,,status-playable,playable,2020-06-16 23:35:19,1 -1764,Cyber Protocol,,nvdec;status-playable,playable,2020-09-28 14:47:40,2 -1765,Barry Bradford's Putt Panic Party,,nvdec;status-playable,playable,2020-06-17 1:08:34,1 -1766,Potata: Fairy Flower,,nvdec;status-playable,playable,2020-06-17 9:51:34,1 -1767,Kawaii Deathu Desu,,,,2020-06-17 9:59:15,1 -1768,The Spectrum Retreat - 010041C00A68C000,010041C00A68C000,status-playable,playable,2022-10-03 18:52:40,2 -1769,Moero Crystal H - 01004EB0119AC000,01004EB0119AC000,32-bit;status-playable;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22,15 -1770,Modern Combat Blackout - 0100D8700B712000,0100D8700B712000,crash;status-nothing,nothing,2021-03-29 19:47:15,2 -1771,Forager - 01001D200BCC4000,01001D200BCC4000,status-menus;crash,menus,2021-11-24 7:10:17,5 -1772,Ultimate Ski Jumping 2020 - 01006B601117E000,01006B601117E000,online;status-playable,playable,2021-03-02 20:54:11,2 -1773,Strangers of the Power 3,,,,2020-06-17 14:45:52,1 -1774,Little Triangle,,status-playable,playable,2020-06-17 14:46:26,1 -1775,Nice Slice,,nvdec;status-playable,playable,2020-06-17 15:13:27,1 -1776,Project Starship,,,,2020-06-17 15:33:18,1 -1777,Puyo Puyo Champions,,online;status-playable,playable,2020-06-19 11:35:08,1 -1778,Shantae and the Seven Sirens,,nvdec;status-playable,playable,2020-06-19 12:23:40,1 -1779,SYNAPTIC DRIVE,,online;status-playable,playable,2020-09-07 13:44:05,4 -1780,XCOM 2 Collection - 0100D0B00FB74000,0100D0B00FB74000,gpu;status-ingame;crash,ingame,2022-10-04 9:38:30,14 -1781,BioShock Remastered - 0100AD10102B2000,0100AD10102B2000,services-horizon;status-boots;crash;Needs Update,boots,2024-06-06 1:08:52,6 -1782,Burnout Paradise Remastered - 0100DBF01000A000,0100DBF01000A000,nvdec;online;status-playable,playable,2021-06-13 2:54:46,4 -1783,Adam's Venture: Origins - 0100C0C0040E4000,0100C0C0040E4000,status-playable,playable,2021-03-04 18:43:57,2 -1784,"Invisible, Inc.",,crash;status-nothing,nothing,2021-01-29 16:28:13,2 -1785,Vektor Wars - 010098400E39E000,010098400E39E000,status-playable;online-broken;vulkan-backend-bug,playable,2022-10-04 9:23:46,3 -1786,Flux8,,nvdec;status-playable,playable,2020-06-19 20:55:11,1 -1787,Beyond Enemy Lines: Covert Operations - 010056500CAD8000,010056500CAD8000,status-playable;UE4,playable,2022-10-01 13:11:50,4 -1788,Genetic Disaster,,status-playable,playable,2020-06-19 21:41:12,1 -1789,Castle Pals - 0100DA2011F18000,0100DA2011F18000,status-playable,playable,2021-03-04 21:00:33,2 -1790,BioShock 2 Remastered - 01002620102C6000,01002620102C6000,services;status-nothing,nothing,2022-10-29 14:39:22,3 -1791,BioShock Infinite: The Complete Edition - 0100D560102C8000,0100D560102C8000,services-horizon;status-nothing;crash,nothing,2024-08-11 21:35:01,3 -1792,Borderlands 2: Game of the Year Edition - 010096F00FF22000,010096F00FF22000,status-playable,playable,2022-04-22 18:35:07,4 -1793,Borderlands: The Pre-Sequel Ultimate Edition - 010007400FF24000,010007400FF24000,nvdec;status-playable,playable,2021-06-09 20:17:10,3 -1794,The Coma 2: Vicious Sisters,,gpu;status-ingame,ingame,2020-06-20 12:51:51,1 -1795,Roll'd,,status-playable,playable,2020-07-04 20:24:01,3 -1796,Big Drunk Satanic Massacre - 01002FA00DE72000,01002FA00DE72000,status-playable,playable,2021-03-04 21:28:22,2 -1797,LUXAR - 0100EC2011A80000,0100EC2011A80000,status-playable,playable,2021-03-04 21:11:57,2 -1798,OneWayTicket,,UE4;status-playable,playable,2020-06-20 17:20:49,1 -1799,Radiation City - 0100DA400E07E000,0100DA400E07E000,status-ingame;crash,ingame,2022-09-30 11:15:04,2 -1800,Arcade Spirits,,status-playable,playable,2020-06-21 11:45:03,1 -1801,Bring Them Home - 01000BF00BE40000,01000BF00BE40000,UE4;status-playable,playable,2021-04-12 14:14:43,3 -1802,Fly Punch Boom!,,online;status-playable,playable,2020-06-21 12:06:11,1 -1803,Xenoblade Chronicles Definitive Edition - 0100FF500E34A000,0100FF500E34A000,status-playable;nvdec,playable,2024-05-04 20:12:41,25 -1805,A Winter's Daydream,,,,2020-06-22 14:52:38,1 -1806,DEAD OR SCHOOL - 0100A5000F7AA000,0100A5000F7AA000,status-playable;nvdec,playable,2022-09-06 12:04:09,2 -1807,Biolab Wars,,,,2020-06-22 15:50:34,1 -1808,Worldend Syndrome,,status-playable,playable,2021-01-03 14:16:32,3 -1809,The Tiny Bang Story - 01009B300D76A000,01009B300D76A000,status-playable,playable,2021-03-05 15:39:05,2 -1810,Neo Cab - 0100EBB00D2F4000,0100EBB00D2F4000,status-playable,playable,2021-04-24 0:27:58,3 -1811,Sniper Elite 3 Ultimate Edition - 010075A00BA14000,010075A00BA14000,status-playable;ldn-untested,playable,2024-04-18 7:47:49,7 -1812,Boku to Nurse no Kenshuu Nisshi - 010093700ECEC000,010093700ECEC000,status-playable,playable,2022-11-21 20:38:34,2 -1813,80 Days,,status-playable,playable,2020-06-22 21:43:01,1 -1814,Mirror,,,,2020-06-22 21:46:55,1 -1815,SELFY COLLECTION Dream Stylist,,,,2020-06-22 22:15:25,1 -1817,G-MODE Archives 4 Beach Volleyball Girl Drop,,,,2020-06-22 22:36:36,1 -1818,Star Horizon,,,,2020-06-22 23:03:45,1 -1819,To the Moon,,status-playable,playable,2021-03-20 15:33:38,4 -1820,Darksiders II Deathinitive Edition - 010071800BA98000,010071800BA98000,gpu;status-ingame;nvdec;online-broken,ingame,2024-06-26 0:37:25,6 -1821,SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated - 010062800D39C000,010062800D39C000,status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34,9 -1822,Sleep Tight - 01004AC0081DC000,01004AC0081DC000,gpu;status-ingame;UE4,ingame,2022-08-13 0:17:32,5 -1823,SUPER ROBOT WARS V,,online;status-playable,playable,2020-06-23 12:56:37,1 -1824,Ghostbusters: The Video Game Remastered - 010008A00F632000,010008A00F632000,status-playable;nvdec,playable,2021-09-17 7:26:57,3 -1825,FIFA 20 Legacy Edition - 01005DE00D05C000,01005DE00D05C000,gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20,5 -1826,VARIABLE BARRICADE NS - 010045C0109F2000,010045C0109F2000,status-playable;nvdec,playable,2022-02-26 15:50:13,2 -1827,Super Cane Magic ZERO - 0100D9B00DB5E000,0100D9B00DB5E000,status-playable,playable,2022-09-12 15:33:46,2 -1829,Whipsey and the Lost Atlas,,status-playable,playable,2020-06-23 20:24:14,1 -1830,FUZE4 - 0100EAD007E98000,0100EAD007E98000,status-playable;vulkan-backend-bug,playable,2022-09-06 19:25:01,4 -1831,Legend of the Skyfish,,status-playable,playable,2020-06-24 13:04:22,1 -1832,Grand Brix Shooter,,slow;status-playable,playable,2020-06-24 13:23:54,1 -1833,Pokémon Café Mix - 010072400E04A000,010072400E04A000,status-playable,playable,2021-08-17 20:00:04,3 -1834,BULLETSTORM: DUKE OF SWITCH EDITION - 01003DD00D658000,01003DD00D658000,status-playable;nvdec,playable,2022-03-03 8:30:24,4 -1835,Brunch Club,,status-playable,playable,2020-06-24 13:54:07,1 -1836,Invisigun Reloaded - 01005F400E644000,01005F400E644000,gpu;online;status-ingame,ingame,2021-06-10 12:13:24,5 -1837,AER - Memories of Old - 0100A0400DDE0000,0100A0400DDE0000,nvdec;status-playable,playable,2021-03-05 18:43:43,2 -1838,Farm Mystery - 01000E400ED98000,01000E400ED98000,status-playable;nvdec,playable,2022-09-06 16:46:47,5 -1839,Ninjala - 0100CCD0073EA000,0100CCD0073EA000,status-boots;online-broken;UE4,boots,2024-07-03 20:04:49,10 -1840,Shojo Jigoku no Doku musume,,,,2020-06-25 11:25:12,1 -1841,Jump Rope Challenge - 0100B9C012706000,0100B9C012706000,services;status-boots;crash;Needs Update,boots,2023-02-27 1:24:28,3 -1842,Knight Squad,,status-playable,playable,2020-08-09 16:54:51,3 -1843,WARBORN,,status-playable,playable,2020-06-25 12:36:47,1 -1844,The Bard's Tale ARPG: Remastered and Resnarkled - 0100CD500DDAE000,0100CD500DDAE000,gpu;status-ingame;nvdec;online-working,ingame,2024-07-18 12:52:01,6 -1845,NAMCOT COLLECTION,,audio;status-playable,playable,2020-06-25 13:35:22,1 -1846,Code: Realize ~Future Blessings~ - 010002400F408000,010002400F408000,status-playable;nvdec,playable,2023-03-31 16:57:47,2 -1847,Code: Realize ~Guardian of Rebirth~,,,,2020-06-25 15:09:14,1 -1848,Polandball: Can Into Space!,,status-playable,playable,2020-06-25 15:13:26,1 -1849,Ruiner - 01006EC00F2CC000,01006EC00F2CC000,status-playable;UE4,playable,2022-10-03 14:11:33,3 -1850,Summer in Mara - 0100A130109B2000,0100A130109B2000,nvdec;status-playable,playable,2021-03-06 14:10:38,2 -1851,Brigandine: The Legend of Runersia - 010011000EA7A000,010011000EA7A000,status-playable,playable,2021-06-20 6:52:25,14 -1852,Duke Nukem 3D: 20th Anniversary World Tour - 01007EF00CB88000,01007EF00CB88000,32-bit;status-playable;ldn-untested,playable,2022-08-19 22:22:40,6 -1853,Outbuddies DX - 0100B8900EFA6000,0100B8900EFA6000,gpu;status-ingame,ingame,2022-08-04 22:39:24,4 -1854,Mr. DRILLER DrillLand,,nvdec;status-playable,playable,2020-07-24 13:56:48,2 -1855,Fable of Fairy Stones - 0100E3D0103CE000,0100E3D0103CE000,status-playable,playable,2021-05-05 21:04:54,2 -1856,Destrobots - 01008BB011ED6000,01008BB011ED6000,status-playable,playable,2021-03-06 14:37:05,2 -1857,Aery - 0100875011D0C000,0100875011D0C000,status-playable,playable,2021-03-07 15:25:51,2 -1858,TETRA for Nintendo Switch,,status-playable,playable,2020-06-26 20:49:55,1 -1859,Push the Crate 2 - 0100B60010432000,0100B60010432000,UE4;gpu;nvdec;status-ingame,ingame,2021-06-10 14:20:01,3 -1860,Railway Empire - 01002EE00DC02000,01002EE00DC02000,status-playable;nvdec,playable,2022-10-03 13:53:50,3 -1861,Endless Fables: Dark Moor - 01004F3011F92000,01004F3011F92000,gpu;nvdec;status-ingame,ingame,2021-03-07 15:31:03,2 -1862,Across the Grooves,,status-playable,playable,2020-06-27 12:29:51,1 -1863,Behold the Kickmen,,status-playable,playable,2020-06-27 12:49:45,1 -1864,Blood & Guts Bundle,,status-playable,playable,2020-06-27 12:57:35,1 -1865,Seek Hearts - 010075D0101FA000,010075D0101FA000,status-playable,playable,2022-11-22 15:06:26,2 -1866,Edna & Harvey: The Breakout - Anniversary Edition - 01004F000B716000,01004F000B716000,status-ingame;crash;nvdec,ingame,2022-08-01 16:59:56,5 -1867,-KLAUS-,,nvdec;status-playable,playable,2020-06-27 13:27:30,1 -1868,Gun Gun Pixies,,,,2020-06-27 13:31:06,1 -1869,Tcheco in the Castle of Lucio,,status-playable,playable,2020-06-27 13:35:43,1 -1870,My Butler,,status-playable,playable,2020-06-27 13:46:23,1 -1871,Caladrius Blaze - 01004FD00D66A000,01004FD00D66A000,deadlock;status-nothing;nvdec,nothing,2022-12-07 16:44:37,4 -1872,Shipped,,status-playable,playable,2020-11-21 14:22:32,3 -1873,The Alliance Alive HD Remastered - 010045A00E038000,010045A00E038000,nvdec;status-playable,playable,2021-03-07 15:43:45,2 -1874,Monochrome Order,,,,2020-06-27 14:38:40,1 -1875,My Lovely Daughter - 010086B00C784000,010086B00C784000,status-playable,playable,2022-11-24 17:25:32,2 -1876,Caged Garden Cock Robin,,,,2020-06-27 16:47:22,1 -1877,A Knight's Quest - 01005EF00CFDA000,01005EF00CFDA000,status-playable;UE4,playable,2022-09-12 20:44:20,6 -1878,The Witcher 3: Wild Hunt - 01003D100E9C6000,01003D100E9C6000,status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51,11 -1879,BATTLESTAR GALACTICA Deadlock,,nvdec;status-playable,playable,2020-06-27 17:35:44,1 -1880,STELLATUM - 0100BC800EDA2000,0100BC800EDA2000,gpu;status-playable,playable,2021-03-07 16:30:23,2 -1881,Reventure - 0100E2E00EA42000,0100E2E00EA42000,status-playable,playable,2022-09-15 20:07:06,2 -1882,Killer Queen Black - 0100F2900B3E2000,0100F2900B3E2000,ldn-untested;online;status-playable,playable,2021-04-08 12:46:18,3 -1883,Puchitto kurasutā,,Need-Update;crash;services;status-menus,menus,2020-07-04 16:44:28,2 -1884,Silk - 010045500DFE2000,010045500DFE2000,nvdec;status-playable,playable,2021-06-10 15:34:37,2 -1885,Aldred - Knight of Honor - 01000E000EEF8000,01000E000EEF8000,services;status-playable,playable,2021-11-30 1:49:17,2 -1886,Tamashii - 010012800EE3E000,010012800EE3E000,status-playable,playable,2021-06-10 15:26:20,2 -1887,Overlanders - 0100D7F00EC64000,0100D7F00EC64000,status-playable;nvdec;UE4,playable,2022-09-14 20:15:06,3 -1888,Romancing SaGa 3,,audio;gpu;status-ingame,ingame,2020-06-27 20:26:18,1 -1889,Hakoniwa Explorer Plus,,slow;status-ingame,ingame,2021-02-19 16:56:19,3 -1890,Fractured Minds - 01004200099F2000,01004200099F2000,status-playable,playable,2022-09-13 21:21:40,3 -1891,Strange Telephone,,,,2020-06-27 21:00:43,1 -1892,Strikey Sisters,,,,2020-06-27 22:20:14,1 -1893,IxSHE Tell - 0100DEB00F12A000,0100DEB00F12A000,status-playable;nvdec,playable,2022-12-02 18:00:42,3 -1894,Monster Farm - 0100E9900ED74000,0100E9900ED74000,32-bit;nvdec;status-playable,playable,2021-05-05 19:29:13,3 -1895,Pachi Pachi On A Roll,,,,2020-06-28 10:28:59,1 -1896,MISTOVER,,,,2020-06-28 11:23:53,1 -1897,Little Busters! Converted Edition - 0100943010310000,0100943010310000,status-playable;nvdec,playable,2022-09-29 15:34:56,3 -1898,Snack World The Dungeon Crawl Gold - 0100F2800D46E000,0100F2800D46E000,gpu;slow;status-ingame;nvdec;audout,ingame,2022-05-01 21:12:44,7 -1899,Super Kirby Clash - 01003FB00C5A8000,01003FB00C5A8000,status-playable;ldn-works,playable,2024-07-30 18:21:55,8 -1900,SEGA AGES Thunder Force IV,,,,2020-06-29 12:06:07,1 -1901,SEGA AGES Puyo Puyo - 01005F600CB0E000,01005F600CB0E000,online;status-playable,playable,2021-05-05 16:09:28,3 -1902,EAT BEAT DEADSPIKE-san - 0100A9B009678000,0100A9B009678000,audio;status-playable;Needs Update,playable,2022-12-02 19:25:29,2 -1903,AeternoBlade II - 01009D100EA28000,01009D100EA28000,status-playable;online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18,3 -1904,WRC 8 FIA World Rally Championship - 010087800DCEA000,010087800DCEA000,status-playable;nvdec,playable,2022-09-16 23:03:36,4 -1905,Yaga - 01006FB00DB02000,01006FB00DB02000,status-playable;nvdec,playable,2022-09-16 23:17:17,2 -1906,Woven - 01006F100EB16000,01006F100EB16000,nvdec;status-playable,playable,2021-06-02 13:41:08,3 -1907,Kissed by the Baddest Bidder - 0100F3A00F4CA000,0100F3A00F4CA000,gpu;status-ingame;nvdec,ingame,2022-12-04 20:57:11,3 -1910,Thief of Thieves - 0100CE700F62A000,0100CE700F62A000,status-nothing;crash;loader-allocator,nothing,2021-11-03 7:16:30,2 -1911,Squidgies Takeover,,status-playable,playable,2020-07-20 22:28:08,2 -1912,Balthazar's Dreams - 0100BC400FB64000,0100BC400FB64000,status-playable,playable,2022-09-13 0:13:22,2 -1913,ZenChess,,status-playable,playable,2020-07-01 22:28:27,1 -1914,Sparklite - 01007ED00C032000,01007ED00C032000,status-playable,playable,2022-08-06 11:35:41,4 -1915,Some Distant Memory - 01009EE00E91E000,01009EE00E91E000,status-playable,playable,2022-09-15 21:48:19,2 -1916,Skybolt Zack - 010041C01014E000,010041C01014E000,status-playable,playable,2021-04-12 18:28:00,3 -1917,Tactical Mind 2,,status-playable,playable,2020-07-01 23:11:07,1 -1918,Super Street: Racer - 0100FB400F54E000,0100FB400F54E000,status-playable;UE4,playable,2022-09-16 13:43:14,2 -1919,TOKYO DARK - REMEMBRANCE - - 01003E500F962000,01003E500F962000,nvdec;status-playable,playable,2021-06-10 20:09:49,2 -1920,Party Treats,,status-playable,playable,2020-07-02 0:05:00,1 -1921,Rocket Wars,,status-playable,playable,2020-07-24 14:27:39,2 -1922,Rawr-Off,,crash;nvdec;status-menus,menus,2020-07-02 0:14:44,1 -1923,Blair Witch - 01006CC01182C000,01006CC01182C000,status-playable;nvdec;UE4,playable,2022-10-01 14:06:16,6 -1924,Urban Trial Tricky - 0100A2500EB92000,0100A2500EB92000,status-playable;nvdec;UE4,playable,2022-12-06 13:07:56,6 -1925,Infliction - 01001CB00EFD6000,01001CB00EFD6000,status-playable;nvdec;UE4,playable,2022-10-02 13:15:55,4 -1926,Catherine Full Body for Nintendo Switch (JP) - 0100BAE0077E4000,0100BAE0077E4000,Needs Update;gpu;status-ingame,ingame,2021-02-21 18:06:11,14 -1927,Night Call - 0100F3A0095A6000,0100F3A0095A6000,status-playable;nvdec,playable,2022-10-03 12:57:00,2 -1928,Grimshade - 01001E200F2F8000,01001E200F2F8000,status-playable,playable,2022-10-02 12:44:20,2 -1930,A Summer with the Shiba Inu - 01007DD011C4A000,01007DD011C4A000,status-playable,playable,2021-06-10 20:51:16,2 -1931,Holy Potatoes! What the Hell?!,,status-playable,playable,2020-07-03 10:48:56,1 -1932,Tower of Time,,gpu;nvdec;status-ingame,ingame,2020-07-03 11:11:12,1 -1933,Iron Wings - 01005270118D6000,01005270118D6000,slow;status-ingame,ingame,2022-08-07 8:32:57,4 -1934,Death Come True - 010012B011AB2000,010012B011AB2000,nvdec;status-playable,playable,2021-06-10 22:30:49,2 -1935,CAN ANDROIDS PRAY:BLUE,,,,2020-07-05 8:14:53,1 -1936,The Almost Gone,,status-playable,playable,2020-07-05 12:33:07,1 -1937,Urban Flow,,services;status-playable,playable,2020-07-05 12:51:47,1 -1938,Digimon Story Cyber Sleuth: Complete Edition - 010014E00DB56000,010014E00DB56000,status-playable;nvdec;opengl,playable,2022-09-13 15:02:37,4 -1939,Return of the Obra Dinn - 010032E00E6E2000,010032E00E6E2000,status-playable,playable,2022-09-15 19:56:45,2 -1940,YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD. - 010037D00DBDC000,010037D00DBDC000,nvdec;status-playable,playable,2021-01-26 17:03:52,3 -1941,Summer Sweetheart - 01004E500DB9E000,01004E500DB9E000,status-playable;nvdec,playable,2022-09-16 12:51:46,5 -1942,ZikSquare - 010086700EF16000,010086700EF16000,gpu;status-ingame,ingame,2021-11-06 2:02:48,5 -1943,Planescape: Torment and Icewind Dale: Enhanced Editions - 010030B00C316000,010030B00C316000,cpu;status-boots;32-bit;crash;Needs Update,boots,2022-09-10 3:58:26,6 -1944,Megaquarium - 010082B00E8B8000,010082B00E8B8000,status-playable,playable,2022-09-14 16:50:00,2 -1945,Ice Age Scrat's Nutty Adventure - 01004E5007E92000,01004E5007E92000,status-playable;nvdec,playable,2022-09-13 22:22:29,2 -1946,Aggelos - 010004D00A9C0000,010004D00A9C0000,gpu;status-ingame,ingame,2023-02-19 13:24:23,5 -1947,Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000,010078D00E8F4000,slow;status-playable;nvdec;UE4,playable,2022-09-16 11:58:38,3 -1948,Sub Level Zero: Redux - 0100E6400BCE8000,0100E6400BCE8000,status-playable,playable,2022-09-16 12:30:03,2 -1949,BurgerTime Party!,,slow;status-playable,playable,2020-11-21 14:11:53,3 -1950,Another Sight,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-03 16:49:59,3 -1951,Baldur's Gate and Baldur's Gate II: Enhanced Editions - 010010A00DA48000,010010A00DA48000,32-bit;status-playable,playable,2022-09-12 23:52:15,6 -1952,Kine - 010089000F0E8000,010089000F0E8000,status-playable;UE4,playable,2022-09-14 14:28:37,3 -1953,Roof Rage - 010088100DD42000,010088100DD42000,status-boots;crash;regression,boots,2023-11-12 3:47:18,5 -1954,Pig Eat Ball - 01000FD00D5CC000,01000FD00D5CC000,services;status-ingame,ingame,2021-11-30 1:57:45,2 -1956,DORAEMON STORY OF SEASONS,,nvdec;status-playable,playable,2020-07-13 20:28:11,2 -1957,Root Letter: Last Answer - 010030A00DA3A000,010030A00DA3A000,status-playable;vulkan-backend-bug,playable,2022-09-17 10:25:57,2 -1959,Cat Quest II,,status-playable,playable,2020-07-06 23:52:09,1 -1960,Streets of Rage 4,,nvdec;online;status-playable,playable,2020-07-07 21:21:22,1 -1961,Deep Space Rush,,status-playable,playable,2020-07-07 23:30:33,1 -1962,Into the Dead 2 - 01000F700DECE000,01000F700DECE000,status-playable;nvdec,playable,2022-09-14 12:36:14,3 -1963,Dark Devotion - 010083A00BF6C000,010083A00BF6C000,status-playable;nvdec,playable,2022-08-09 9:41:18,5 -1964,Anthill - 010054C00D842000,010054C00D842000,services;status-menus;nvdec,menus,2021-11-18 9:25:25,3 -1965,Skullgirls: 2nd Encore - 010046B00DE62000,010046B00DE62000,status-playable,playable,2022-09-15 21:21:25,6 -1966,Tokyo School Life - 0100E2E00CB14000,0100E2E00CB14000,status-playable,playable,2022-09-16 20:25:54,2 -1967,Pixel Gladiator,,status-playable,playable,2020-07-08 2:41:26,1 -1968,Spirit Hunter: NG,,32-bit;status-playable,playable,2020-12-17 20:38:47,3 -1969,The Fox Awaits Me,,,,2020-07-08 11:58:56,1 -1970,Shalnor Legends: Sacred Lands - 0100B4900E008000,0100B4900E008000,status-playable,playable,2021-06-11 14:57:11,2 -1971,Hero must die. again,,,,2020-07-08 12:35:49,1 -1972,AeternoBlade I,,nvdec;status-playable,playable,2020-12-14 20:06:48,2 -1973,Sephirothic Stories - 010059700D4A0000,010059700D4A0000,services;status-menus,menus,2021-11-25 8:52:17,3 -1974,Ciel Fledge: A Daughter Raising Simulator,,,,2020-07-08 14:57:17,1 -1976,Olympia Soiree - 0100F9D00C186000,0100F9D00C186000,status-playable,playable,2022-12-04 21:07:12,2 -1977,Mighty Switch Force! Collection - 010060D00AE36000,010060D00AE36000,status-playable,playable,2022-10-28 20:40:32,3 -1978,Street Outlaws: The List - 010012400D202000,010012400D202000,nvdec;status-playable,playable,2021-06-11 12:15:32,4 -1979,TroubleDays,,,,2020-07-09 8:50:12,1 -1980,Legend of the Tetrarchs,,deadlock;status-ingame,ingame,2020-07-10 7:54:03,2 -1981,Soul Searching,,status-playable,playable,2020-07-09 18:39:07,1 -1982,Dusk Diver - 010011C00E636000,010011C00E636000,status-boots;crash;UE4,boots,2021-11-06 9:01:30,2 -1984,PBA Pro Bowling - 010085700ABC8000,010085700ABC8000,status-playable;nvdec;online-broken;UE4,playable,2022-09-14 23:00:49,2 -1985,Horror Pinball Bundle - 0100E4200FA82000,0100E4200FA82000,status-menus;crash,menus,2022-09-13 22:15:34,4 -1986,Farm Expert 2019 for Nintendo Switch,,status-playable,playable,2020-07-09 21:42:57,1 -1987,Super Monkey Ball: Banana Blitz HD - 0100B2A00E1E0000,0100B2A00E1E0000,status-playable;online-broken,playable,2022-09-16 13:16:25,2 -1988,Yuri - 0100FC900963E000,0100FC900963E000,status-playable,playable,2021-06-11 13:08:50,2 -1989,Vampyr - 01000BD00CE64000,01000BD00CE64000,status-playable;nvdec;UE4,playable,2022-09-16 22:15:51,4 -1990,Spirit Roots,,nvdec;status-playable,playable,2020-07-10 13:33:32,1 -1991,Resident Evil 5 - 010018100CD46000,010018100CD46000,status-playable;nvdec,playable,2024-02-18 17:15:29,6 -1992,RESIDENT EVIL 6 - 01002A000CD48000,01002A000CD48000,status-playable;nvdec,playable,2022-09-15 14:31:47,5 -1993,The Big Journey - 010089600E66A000,010089600E66A000,status-playable,playable,2022-09-16 14:03:08,2 -1994,Sky Gamblers: Storm Raiders 2 - 010068200E96E000,010068200E96E000,gpu;status-ingame,ingame,2022-09-13 12:24:04,2 -1995,Door Kickers: Action Squad - 01005ED00CD70000,01005ED00CD70000,status-playable;online-broken;ldn-broken,playable,2022-09-13 16:28:53,2 -1996,Agony,,UE4;crash;status-boots,boots,2020-07-10 16:21:18,1 -1997,Remothered: Tormented Fathers - 01001F100E8AE000,01001F100E8AE000,status-playable;nvdec;UE4,playable,2022-10-19 23:26:50,4 -1998,Biped - 010053B0117F8000,010053B0117F8000,status-playable;nvdec,playable,2022-10-01 13:32:58,2 -1999,Clash Force - 01005ED0107F4000,01005ED0107F4000,status-playable,playable,2022-10-01 23:45:48,2 -2000,Truck & Logistics Simulator - 0100F2100AA5C000,0100F2100AA5C000,status-playable,playable,2021-06-11 13:29:08,3 -2001,Collar X Malice - 010083E00F40E000,010083E00F40E000,status-playable;nvdec,playable,2022-10-02 11:51:56,3 -2002,TORICKY-S - 01007AF011732000,01007AF011732000,deadlock;status-menus,menus,2021-11-25 8:53:36,3 -2003,The Wanderer: Frankenstein's Creature,,status-playable,playable,2020-07-11 12:49:51,1 -2004,PRINCESS MAKER -FAERY TALES COME TRUE-,,,,2020-07-11 16:09:47,1 -2005,Princess Maker Go!Go! Princess,,,,2020-07-11 16:35:31,1 -2006,Paradox Soul,,,,2020-07-11 17:20:44,1 -2007,Diabolic - 0100F73011456000,0100F73011456000,status-playable,playable,2021-06-11 14:45:08,2 -2008,UBERMOSH:BLACK,,,,2020-07-11 17:42:34,1 -2009,Journey to the Savage Planet - 01008B60117EC000,01008B60117EC000,status-playable;nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12,2 -2010,Viviette - 010037900CB1C000,010037900CB1C000,status-playable,playable,2021-06-11 15:33:40,2 -2011,the StoryTale - 0100858010DC4000,0100858010DC4000,status-playable,playable,2022-09-03 13:00:25,5 -2012,Ghost Grab 3000,,status-playable,playable,2020-07-11 18:09:52,1 -2013,SEGA AGES Shinobi,,,,2020-07-11 18:17:27,1 -2014,eCrossminton,,status-playable,playable,2020-07-11 18:24:27,1 -2015,Dangerous Relationship,,,,2020-07-11 18:39:45,1 -2016,Indie Darling Bundle Vol. 3 - 01004DE011076000,01004DE011076000,status-playable,playable,2022-10-02 13:01:57,2 -2017,Murder by Numbers,,,,2020-07-11 19:12:19,1 -2018,BUSTAFELLOWS,,nvdec;status-playable,playable,2020-10-17 20:04:41,5 -2019,Love Letter from Thief X - 0100D36011AD4000,0100D36011AD4000,gpu;status-ingame;nvdec,ingame,2023-11-14 3:55:31,7 -2020,Escape Game Fort Boyard,,status-playable,playable,2020-07-12 12:45:43,1 -2021,SEGA AGES Gain Ground - 01001E600AF08000,01001E600AF08000,online;status-playable,playable,2021-05-05 16:16:27,3 -2022,The Wardrobe: Even Better Edition - 01008B200FC6C000,01008B200FC6C000,status-playable,playable,2022-09-16 19:14:55,2 -2023,SEGA AGES Wonder Boy: Monster Land - 01001E700AC60000,01001E700AC60000,online;status-playable,playable,2021-05-05 16:28:25,3 -2024,SEGA AGES Columns II: A Voyage Through Time,,,,2020-07-12 13:38:50,1 -2025,Zenith - 0100AAC00E692000,0100AAC00E692000,status-playable,playable,2022-09-17 9:57:02,3 -2026,Jumanji,,UE4;crash;status-boots,boots,2020-07-12 13:52:25,1 -2027,SEGA AGES Ichidant-R,,,,2020-07-12 13:54:29,1 -2028,STURMWIND EX - 0100C5500E7AE000,0100C5500E7AE000,audio;32-bit;status-playable,playable,2022-09-16 12:01:39,7 -2029,SEGA AGES Alex Kidd in Miracle World - 0100A8900AF04000,0100A8900AF04000,online;status-playable,playable,2021-05-05 16:35:47,3 -2030,The Lord of the Rings: Adventure Card Game - 010085A00C5E8000,010085A00C5E8000,status-menus;online-broken,menus,2022-09-16 15:19:32,2 -2031,Breeder Homegrown: Director's Cut,,,,2020-07-12 14:54:02,1 -2032,StarCrossed,,,,2020-07-12 15:15:22,1 -2033,The Legend of Dark Witch,,status-playable,playable,2020-07-12 15:18:33,1 -2034,One-Way Ticket,,,,2020-07-12 15:36:25,1 -2035,Ships - 01000E800FCB4000,01000E800FCB4000,status-playable,playable,2021-06-11 16:14:37,2 -2036,My Bewitching Perfume,,,,2020-07-12 15:55:15,1 -2037,Black and White Bushido,,,,2020-07-12 16:12:16,1 -2038,REKT,,online;status-playable,playable,2020-09-28 12:33:56,2 -2039,Nirvana Pilot Yume - 010020901088A000,010020901088A000,status-playable,playable,2022-10-29 11:49:49,1 -2040,Detective Jinguji Saburo Prism of Eyes,,status-playable,playable,2020-10-02 21:54:41,3 -2041,Harvest Moon: Mad Dash,,,,2020-07-12 20:37:50,1 -2042,Worse Than Death - 010037500C4DE000,010037500C4DE000,status-playable,playable,2021-06-11 16:05:40,2 -2043,Bad Dream: Coma - 01000CB00D094000,01000CB00D094000,deadlock;status-boots,boots,2023-08-03 0:54:18,2 -2044,Chou no Doku Hana no Kusari: Taishou Irokoi Ibun,,gpu;nvdec;status-ingame,ingame,2020-09-28 17:58:04,3 -2045,MODEL Debut #nicola,,,,2020-07-13 11:21:44,1 -2046,Chameleon,,,,2020-07-13 12:06:20,1 -2047,Gunka o haita neko,,gpu;nvdec;status-ingame,ingame,2020-08-25 12:37:56,2 -2048,Genso maneju,,,,2020-07-13 14:14:09,1 -2049,Coffee Talk,,status-playable,playable,2020-08-10 9:48:44,2 -2050,Labyrinth of the Witch,,status-playable,playable,2020-11-01 14:42:37,2 -2051,Ritual: Crown of Horns - 010042500FABA000,010042500FABA000,status-playable,playable,2021-01-26 16:01:47,2 -2052,THE GRISAIA TRILOGY - 01003b300e4aa000,01003b300e4aa000,status-playable,playable,2021-01-31 15:53:59,2 -2053,Perseverance,,status-playable,playable,2020-07-13 18:48:27,1 -2054,SEGA AGES Fantasy Zone,,,,2020-07-13 19:33:23,1 -2056,SEGA AGES Thunder Force AC,,,,2020-07-13 19:50:34,1 -2057,SEGA AGES Puyo Puyo 2,,,,2020-07-13 20:15:04,1 -2058,GRISAIA PHANTOM TRIGGER 01&02 - 01009D7011B02000,01009D7011B02000,status-playable;nvdec,playable,2022-12-04 21:16:06,3 -2059,Paper Dolls Original,,UE4;crash;status-boots,boots,2020-07-13 20:26:21,1 -2060,"STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY - 0100B61009C60000",0100B61009C60000,status-playable,playable,2021-01-26 17:37:28,2 -2061, SEGA AGES G-LOC AIR BATTLE,,,,2020-07-13 20:42:40,1 -2062,Think of the Children - 0100F2300A5DA000,0100F2300A5DA000,deadlock;status-menus,menus,2021-11-23 9:04:45,2 -2063,OTOKOMIZU,,status-playable,playable,2020-07-13 21:00:44,1 -2064,Puchikon 4 Smile BASIC,,,,2020-07-13 21:18:15,1 -2065,Neverlast,,slow;status-ingame,ingame,2020-07-13 23:55:19,1 -2066,MONKEY BARRELS - 0100FBD00ED24000,0100FBD00ED24000,status-playable,playable,2022-09-14 17:28:52,2 -2067,Ghost Parade,,status-playable,playable,2020-07-14 0:43:54,1 -2068,Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit - 010087800EE5A000,010087800EE5A000,status-boots;crash,boots,2023-02-19 0:51:21,2 -2069,OMG Zombies! - 01006DB00D970000,01006DB00D970000,32-bit;status-playable,playable,2021-04-12 18:04:45,5 -2070,Evan's Remains,,,,2020-07-14 5:56:25,1 -2071,Working Zombies,,,,2020-07-14 6:30:55,1 -2072,Saboteur II: Avenging Angel,,Needs Update;cpu;crash;status-nothing,nothing,2021-01-26 14:47:37,2 -2073,Quell Zen - 0100492012378000,0100492012378000,gpu;status-ingame,ingame,2021-06-11 15:59:53,2 -2074,The Touryst - 0100C3300D8C4000,0100C3300D8C4000,status-ingame;crash,ingame,2023-08-22 1:32:38,9 -2075,SMASHING THE BATTLE - 01002AA00C974000,01002AA00C974000,status-playable,playable,2021-06-11 15:53:57,2 -2076,Him & Her,,,,2020-07-14 8:09:57,1 -2077,Speed Brawl,,slow;status-playable,playable,2020-09-18 22:08:16,2 -2078,River City Melee Mach!! - 0100B2100767C000,0100B2100767C000,status-playable;online-broken,playable,2022-09-20 20:51:57,2 -2079,Please The Gods,,,,2020-07-14 10:10:27,1 -2080,One Person Story,,status-playable,playable,2020-07-14 11:51:02,1 -2081,Mary Skelter 2 - 01003DE00C95E000,01003DE00C95E000,status-ingame;crash;regression,ingame,2023-09-12 7:37:28,11 -2082,NecroWorm,,,,2020-07-14 12:15:16,1 -2083,Juicy Realm - 0100C7600F654000,0100C7600F654000,status-playable,playable,2023-02-21 19:16:20,5 -2084,Grizzland,,,,2020-07-14 12:28:03,1 -2085,Garfield Kart Furious Racing - 010061E00E8BE000,010061E00E8BE000,status-playable;ldn-works;loader-allocator,playable,2022-09-13 21:40:25,3 -2086,Close to the Sun - 0100B7200DAC6000,0100B7200DAC6000,status-boots;crash;nvdec;UE4,boots,2021-11-04 9:19:41,3 -2087,Xeno Crisis,,,,2020-07-14 12:46:55,1 -2088,Boreal Blade - 01008E500AFF6000,01008E500AFF6000,gpu;ldn-untested;online;status-ingame,ingame,2021-06-11 15:37:14,2 -2089,Animus: Harbinger - 0100E5A00FD38000,0100E5A00FD38000,status-playable,playable,2022-09-13 22:09:20,2 -2090,DEADBOLT,,,,2020-07-14 13:20:01,1 -2091,Headsnatchers,,UE4;crash;status-menus,menus,2020-07-14 13:29:14,1 -2092,DOUBLE DRAGON Ⅲ: The Sacred Stones - 01001AD00E49A000,01001AD00E49A000,online;status-playable,playable,2021-06-11 15:41:44,2 -2093,911 Operator Deluxe Edition,,status-playable,playable,2020-07-14 13:57:44,1 -2094,Disney Tsum Tsum Festival,,crash;status-menus,menus,2020-07-14 14:05:28,1 -2095,JUST DANCE 2020 - 0100DDB00DB38000,0100DDB00DB38000,status-playable,playable,2022-01-24 13:31:57,6 -2096,A Street Cat's Tale,,,,2020-07-14 14:10:13,1 -2097,Real Heroes: Firefighter - 010048600CC16000,010048600CC16000,status-playable,playable,2022-09-20 18:18:44,2 -2098,The Savior's Gang - 01002BA00C7CE000,01002BA00C7CE000,gpu;status-ingame;nvdec;UE4,ingame,2022-09-21 12:37:48,4 -2099,KATANA KAMI: A Way of the Samurai Story - 0100F9800EDFA000,0100F9800EDFA000,slow;status-playable,playable,2022-04-09 10:40:16,5 -2100,Toon War - 01009EA00E2B8000,01009EA00E2B8000,status-playable,playable,2021-06-11 16:41:53,2 -2101,2048 CAT,,,,2020-07-14 14:44:29,1 -2102,Tick Tock: A Tale for Two,,status-menus,menus,2020-07-14 14:49:38,1 -2103,HexON,,,,2020-07-14 14:54:27,1 -2104,Ancient Rush 2,,UE4;crash;status-menus,menus,2020-07-14 14:58:47,1 -2105,Under Night In-Birth Exe:Late[cl-r],,,,2020-07-14 15:06:07,1 -2106,Circuits - 01008FA00D686000,01008FA00D686000,status-playable,playable,2022-09-19 11:52:50,2 -2107,Breathing Fear,,status-playable,playable,2020-07-14 15:12:29,1 -2108,KAMINAZO Memories from the future,,,,2020-07-14 15:22:45,1 -2109,Big Pharma,,status-playable,playable,2020-07-14 15:27:30,1 -2110,Amoeba Battle - Microscopic RTS Action - 010041D00DEB2000,010041D00DEB2000,status-playable,playable,2021-05-06 13:33:41,2 -2111,Assassin's Creed The Rebel Collection - 010044700DEB0000,010044700DEB0000,gpu;status-ingame,ingame,2024-05-19 7:58:56,5 -2112,Defenders of Ekron - Definitive Edition - 01008BB00F824000,01008BB00F824000,status-playable,playable,2021-06-11 16:31:03,2 -2113,Hellmut: The Badass from Hell,,,,2020-07-14 15:56:49,1 -2114,Alien: Isolation - 010075D00E8BA000,010075D00E8BA000,status-playable;nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41,4 -2115,Immortal Planet - 01007BC00E55A000,01007BC00E55A000,status-playable,playable,2022-09-20 13:40:43,3 -2116,inbento,,,,2020-07-14 16:09:57,1 -2117,Ding Dong XL,,status-playable,playable,2020-07-14 16:13:19,1 -2118,KUUKIYOMI 2: Consider It More! - New Era - 010037500F282000,010037500F282000,status-nothing;crash;Needs Update,nothing,2021-11-02 9:34:40,4 -2119, KUUKIYOMI: Consider It!,,,,2020-07-14 16:21:36,1 -2120,MADORIS R,,,,2020-07-14 16:34:22,1 -2121,Kairobotica - 0100D5F00EC52000,0100D5F00EC52000,status-playable,playable,2021-05-06 12:17:56,3 -2122,Bouncy Bob 2,,status-playable,playable,2020-07-14 16:51:53,1 -2123,Grab the Bottle,,status-playable,playable,2020-07-14 17:06:41,1 -2124,Red Bow - 0100CF600FF7A000,0100CF600FF7A000,services;status-ingame,ingame,2021-11-29 3:51:34,2 -2125,Pocket Mini Golf,,,,2020-07-14 22:13:35,1 -2126,Must Dash Amigos - 0100F6000EAA8000,0100F6000EAA8000,status-playable,playable,2022-09-20 16:45:56,2 -2127,EarthNight - 0100A2E00BB0C000,0100A2E00BB0C000,status-playable,playable,2022-09-19 21:02:20,2 -2128,Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos,,status-playable,playable,2020-07-15 5:06:29,1 -2129,Bloo Kid 2 - 010055900FADA000,010055900FADA000,status-playable,playable,2024-05-01 17:16:57,7 -2130,Narcos: Rise of the Cartels - 010072B00BDDE000,010072B00BDDE000,UE4;crash;nvdec;status-boots,boots,2021-03-22 13:18:47,2 -2131,PUSH THE CRATE - 010016400F07E000,010016400F07E000,status-playable;nvdec;UE4,playable,2022-09-15 13:28:41,3 -2132,Bee Simulator,,UE4;crash;status-boots,boots,2020-07-15 12:13:13,1 -2133,Where the Bees Make Honey,,status-playable,playable,2020-07-15 12:40:49,1 -2134,The Eyes of Ara - 0100B5900DFB2000,0100B5900DFB2000,status-playable,playable,2022-09-16 14:44:06,2 -2135,The Unicorn Princess - 010064E00ECBC000,010064E00ECBC000,status-playable,playable,2022-09-16 16:20:56,2 -2136,Sword of the Guardian,,status-playable,playable,2020-07-16 12:24:39,1 -2137,Waifu Uncovered - 0100B130119D0000,0100B130119D0000,status-ingame;crash,ingame,2023-02-27 1:17:46,8 -2138,Paper Mario The Origami King - 0100A3900C3E2000,0100A3900C3E2000,audio;status-playable;Needs Update,playable,2024-08-09 18:27:40,31 -2139,Touhou Spell Bubble,,status-playable,playable,2020-10-18 11:43:43,4 -2140,Crysis Remastered - 0100E66010ADE000,0100E66010ADE000,status-menus;nvdec,menus,2024-08-13 5:23:24,13 -2141,Helltaker,,,,2020-07-23 21:16:43,1 -2142,Shadow Blade Reload - 0100D5500DA94000,0100D5500DA94000,nvdec;status-playable,playable,2021-06-11 18:40:43,2 -2143,The Bunker - 01001B40086E2000,01001B40086E2000,status-playable;nvdec,playable,2022-09-16 14:24:05,2 -2144,War Tech Fighters - 010049500DE56000,010049500DE56000,status-playable;nvdec,playable,2022-09-16 22:29:31,2 -2145,Real Drift Racing,,status-playable,playable,2020-07-25 14:31:31,1 -2146,Phantaruk - 0100DDD00C0EA000,0100DDD00C0EA000,status-playable,playable,2021-06-11 18:09:54,2 -2148,Omensight: Definitive Edition,,UE4;crash;nvdec;status-ingame,ingame,2020-07-26 1:45:14,1 -2149,Phantom Doctrine - 010096F00E5B0000,010096F00E5B0000,status-playable;UE4,playable,2022-09-15 10:51:50,3 -2150,Monster Bugs Eat People,,status-playable,playable,2020-07-26 2:05:34,1 -2151,Machi Knights Blood bagos - 0100F2400D434000,0100F2400D434000,status-playable;nvdec;UE4,playable,2022-09-14 15:08:04,3 -2152,Offroad Racing - 01003CD00E8BC000,01003CD00E8BC000,status-playable;online-broken;UE4,playable,2022-09-14 18:53:22,3 -2154,Puzzle Book,,status-playable,playable,2020-09-28 13:26:01,2 -2155,SUSHI REVERSI - 01005AB01119C000,01005AB01119C000,status-playable,playable,2021-06-11 19:26:58,2 -2156,Strike Force - War on Terror - 010039100DACC000,010039100DACC000,status-menus;crash;Needs Update,menus,2021-11-24 8:08:20,3 -2157,Mr Blaster - 0100D3300F110000,0100D3300F110000,status-playable,playable,2022-09-14 17:56:24,2 -2158,Lust for Darkness,,nvdec;status-playable,playable,2020-07-26 12:09:15,1 -2159,Legrand Legacy: Tale of the Fatebounds,,nvdec;status-playable,playable,2020-07-26 12:27:36,1 -2160,Hardway Party,,status-playable,playable,2020-07-26 12:35:07,1 -2161,Earthfall: Alien Horde - 0100DFC00E472000,0100DFC00E472000,status-playable;nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37,3 -2162,Collidalot - 010030800BC36000,010030800BC36000,status-playable;nvdec,playable,2022-09-13 14:09:27,4 -2163,Miniature - The Story Puzzle - 010039200EC66000,010039200EC66000,status-playable;UE4,playable,2022-09-14 17:18:50,3 -2164,MEANDERS - 0100EEF00CBC0000,0100EEF00CBC0000,UE4;gpu;status-ingame,ingame,2021-06-11 19:19:33,2 -2165,Isoland,,status-playable,playable,2020-07-26 13:48:16,1 -2166,Fishing Star World Tour - 0100DEB00ACE2000,0100DEB00ACE2000,status-playable,playable,2022-09-13 19:08:51,5 -2167,Isoland 2: Ashes of Time,,status-playable,playable,2020-07-26 14:29:05,1 -2168,Golazo - 010013800F0A4000,010013800F0A4000,status-playable,playable,2022-09-13 21:58:37,2 -2169,Castle of No Escape 2 - 0100F5500FA0E000,0100F5500FA0E000,status-playable,playable,2022-09-13 13:51:42,2 -2170,Guess The Word,,status-playable,playable,2020-07-26 21:34:25,1 -2171,Black Future '88 - 010049000B69E000,010049000B69E000,status-playable;nvdec,playable,2022-09-13 11:24:37,2 -2172,The Childs Sight - 010066800E9F8000,010066800E9F8000,status-playable,playable,2021-06-11 19:04:56,2 -2173,Asterix & Obelix XXL3: The Crystal Menhir - 010081500EA1E000,010081500EA1E000,gpu;status-ingame;nvdec;regression,ingame,2022-11-28 14:19:23,4 -2174,Go! Fish Go!,,status-playable,playable,2020-07-27 13:52:28,1 -2175,Amnesia: Collection - 01003CC00D0BE000,01003CC00D0BE000,status-playable,playable,2022-10-04 13:36:15,4 -2176,Ages of Mages: the Last Keeper - 0100E4700E040000,0100E4700E040000,status-playable;vulkan-backend-bug,playable,2022-10-04 11:44:05,3 -2177,Worlds of Magic: Planar Conquest - 010000301025A000,010000301025A000,status-playable,playable,2021-06-12 12:51:28,2 -2178,Hang the Kings,,status-playable,playable,2020-07-28 22:56:59,1 -2179,Super Dungeon Tactics - 010023100B19A000,010023100B19A000,status-playable,playable,2022-10-06 17:40:40,2 -2180,Five Nights at Freddy's: Sister Location - 01003B200E440000,01003B200E440000,status-playable,playable,2023-10-06 9:00:58,5 -2181,Ice Cream Surfer,,status-playable,playable,2020-07-29 12:04:07,1 -2182,Demon's Rise,,status-playable,playable,2020-07-29 12:26:27,1 -2183,A Ch'ti Bundle - 010096A00CC80000,010096A00CC80000,status-playable;nvdec,playable,2022-10-04 12:48:44,2 -2184,Overwatch®: Legendary Edition - 0100F8600E21E000,0100F8600E21E000,deadlock;status-boots,boots,2022-09-14 20:22:22,2 -2185,Zombieland: Double Tap - Road Trip - 01000E5800D32C000,01000E5800D32C00,status-playable,playable,2022-09-17 10:08:45,2 -2186,Children of Morta - 01002DE00C250000,01002DE00C250000,gpu;status-ingame;nvdec,ingame,2022-09-13 17:48:47,3 -2187,Story of a Gladiator,,status-playable,playable,2020-07-29 15:08:18,1 -2188,SD GUNDAM G GENERATION CROSS RAYS - 010055700CEA8000,010055700CEA8000,status-playable;nvdec,playable,2022-09-15 20:58:44,5 -2189,Neverwinter Nights: Enhanced Edition - 010013700DA4A000,010013700DA4A000,gpu;status-menus;nvdec,menus,2024-09-30 2:59:19,7 -2190,Race With Ryan,,UE4;gpu;nvdec;slow;status-ingame,ingame,2020-11-16 4:35:33,2 -2191,StrikeForce Kitty,,nvdec;status-playable,playable,2020-07-29 16:22:15,1 -2192,Later Daters,,status-playable,playable,2020-07-29 16:35:45,1 -2193,Pine,,slow;status-ingame,ingame,2020-07-29 16:57:39,1 -2194,Japanese Rail Sim: Journey to Kyoto,,nvdec;status-playable,playable,2020-07-29 17:14:21,1 -2195,FoxyLand,,status-playable,playable,2020-07-29 20:55:20,1 -2196,Five Nights at Freddy's - 0100B6200D8D2000,0100B6200D8D2000,status-playable,playable,2022-09-13 19:26:36,3 -2197,Five Nights at Freddy's 2 - 01004EB00E43A000,01004EB00E43A000,status-playable,playable,2023-02-08 15:48:24,8 -2198,Five Nights at Freddy's 3 - 010056100E43C000,010056100E43C000,status-playable,playable,2022-09-13 20:58:07,2 -2199,Five Nights at Freddy's 4 - 010083800E43E000,010083800E43E000,status-playable,playable,2023-08-19 7:28:03,4 -2200,Widget Satchel - 0100C7800CA06000,0100C7800CA06000,status-playable,playable,2022-09-16 22:41:07,3 -2201,Nyan Cat: Lost in Space - 010049F00EC30000,010049F00EC30000,online;status-playable,playable,2021-06-12 13:22:03,4 -2202,Blacksad: Under the Skin - 010032000EA2C000,010032000EA2C000,status-playable,playable,2022-09-13 11:38:04,2 -2203,Mini Trains,,status-playable,playable,2020-07-29 23:06:20,1 -2204,Call of Juarez: Gunslinger - 0100B4700BFC6000,0100B4700BFC6000,gpu;status-ingame;nvdec,ingame,2022-09-17 16:49:46,3 -2205,Locomotion,,,,2020-07-31 8:17:09,1 -2206,Headspun,,status-playable,playable,2020-07-31 19:46:47,1 -2207,Exception - 0100F2D00C7DE000,0100F2D00C7DE000,status-playable;online-broken,playable,2022-09-20 12:47:10,2 -2208,Dead End Job - 01004C500BD40000,01004C500BD40000,status-playable;nvdec,playable,2022-09-19 12:48:44,2 -2209,Event Horizon: Space Defense,,status-playable,playable,2020-07-31 20:31:24,1 -2210,SAMURAI SHODOWN,,UE4;crash;nvdec;status-menus,menus,2020-09-06 2:17:00,2 -2211,BQM BlockQuest Maker,,online;status-playable,playable,2020-07-31 20:56:50,1 -2212,Hard West - 0100ECE00D13E000,0100ECE00D13E000,status-nothing;regression,nothing,2022-02-09 7:45:56,2 -2213,Override: Mech City Brawl - Super Charged Mega Edition - 01008A700F7EE000,01008A700F7EE000,status-playable;nvdec;online-broken;UE4,playable,2022-09-20 17:33:32,2 -2214,Where Are My Friends? - 0100FDB0092B4000,0100FDB0092B4000,status-playable,playable,2022-09-21 14:39:26,2 -2215,"Final Light, The Prison",,status-playable,playable,2020-07-31 21:48:44,1 -2216,Citizens of Space - 0100E4200D84E000,0100E4200D84E000,gpu;status-boots,boots,2023-10-22 6:45:44,7 -2217,Adventures of Bertram Fiddle: Episode 1: A Dreadly Business - 01003B400A00A000,01003B400A00A000,status-playable;nvdec,playable,2022-09-17 11:07:56,4 -2218,Momonga Pinball Adventures - 01002CC00BC4C000,01002CC00BC4C000,status-playable,playable,2022-09-20 16:00:40,2 -2219,Suicide Guy: Sleepin' Deeply - 0100DE000C2E4000,0100DE000C2E4000,status-ingame;Needs More Attention,ingame,2022-09-20 23:45:25,2 -2220,"Warhammer 40,000: Mechanicus - 0100C6000EEA8000",0100C6000EEA8000,nvdec;status-playable,playable,2021-06-13 10:46:38,2 -2221,Caretaker - 0100DA70115E6000,0100DA70115E6000,status-playable,playable,2022-10-04 14:52:24,5 -2222,Once Upon A Coma,,nvdec;status-playable,playable,2020-08-01 12:09:39,1 -2223,Welcome to Hanwell,,UE4;crash;status-boots,boots,2020-08-03 11:54:57,1 -2224,Radical Rabbit Stew,,status-playable,playable,2020-08-03 12:02:56,1 -2225,We should talk.,,crash;status-nothing,nothing,2020-08-03 12:32:36,1 -2226,Get 10 Quest,,status-playable,playable,2020-08-03 12:48:39,1 -2227,Dongo Adventure - 010088B010DD2000,010088B010DD2000,status-playable,playable,2022-10-04 16:22:26,2 -2228,Singled Out,,online;status-playable,playable,2020-08-03 13:06:18,1 -2229,Never Breakup - 010039801093A000,010039801093A000,status-playable,playable,2022-10-05 16:12:12,2 -2230,Ashen - 010027B00E40E000,010027B00E40E000,status-playable;nvdec;online-broken;UE4,playable,2022-09-17 12:19:14,3 -2231,JDM Racing,,status-playable,playable,2020-08-03 17:02:37,1 -2232,Farabel,,status-playable,playable,2020-08-03 17:47:28,1 -2233,Hover - 0100F6800910A000,0100F6800910A000,status-playable;online-broken,playable,2022-09-20 12:54:46,2 -2234,DragoDino,,gpu;nvdec;status-ingame,ingame,2020-08-03 20:49:16,1 -2235,Rift Keeper - 0100AC600D898000,0100AC600D898000,status-playable,playable,2022-09-20 19:48:20,2 -2236,Melbits World - 01000FA010340000,01000FA010340000,status-menus;nvdec;online,menus,2021-11-26 13:51:22,2 -2237,60 Parsecs! - 010010100FF14000,010010100FF14000,status-playable,playable,2022-09-17 11:01:17,2 -2238,Warhammer Quest 2,,status-playable,playable,2020-08-04 15:28:03,1 -2239,Rescue Tale - 01003C400AD42000,01003C400AD42000,status-playable,playable,2022-09-20 18:40:18,2 -2240,Akuto,,status-playable,playable,2020-08-04 19:43:27,1 -2241,Demon Pit - 010084600F51C000,010084600F51C000,status-playable;nvdec,playable,2022-09-19 13:35:15,2 -2242,Regions of Ruin,,status-playable,playable,2020-08-05 11:38:58,1 -2243,Roombo: First Blood,,nvdec;status-playable,playable,2020-08-05 12:11:37,1 -2244,Mountain Rescue Simulator - 01009DB00D6E0000,01009DB00D6E0000,status-playable,playable,2022-09-20 16:36:48,2 -2245,Mad Games Tycoon - 010061E00EB1E000,010061E00EB1E000,status-playable,playable,2022-09-20 14:23:14,2 -2247,Down to Hell - 0100B6600FE06000,0100B6600FE06000,gpu;status-ingame;nvdec,ingame,2022-09-19 14:01:26,2 -2248,Funny Bunny Adventures,,status-playable,playable,2020-08-05 13:46:56,1 -2249,Crazy Zen Mini Golf,,status-playable,playable,2020-08-05 14:00:00,1 -2250,Drawngeon: Dungeons of Ink and Paper - 0100B7E0102E4000,0100B7E0102E4000,gpu;status-ingame,ingame,2022-09-19 15:41:25,4 -2251,Farming Simulator 20 - 0100EB600E914000,0100EB600E914000,nvdec;status-playable,playable,2021-06-13 10:52:44,2 -2252,DreamBall,,UE4;crash;gpu;status-ingame,ingame,2020-08-05 14:45:25,1 -2253,DEMON'S TILT - 0100BE800E6D8000,0100BE800E6D8000,status-playable,playable,2022-09-19 13:22:46,2 -2254,Heroland,,status-playable,playable,2020-08-05 15:35:39,1 -2255,Double Switch - 25th Anniversary Edition - 0100FC000EE10000,0100FC000EE10000,status-playable;nvdec,playable,2022-09-19 13:41:50,2 -2256,Ultimate Racing 2D,,status-playable,playable,2020-08-05 17:27:09,1 -2257,THOTH,,status-playable,playable,2020-08-05 18:35:28,1 -2258,SUPER ROBOT WARS X,,online;status-playable,playable,2020-08-05 19:18:51,1 -2259,Aborigenus,,status-playable,playable,2020-08-05 19:47:24,1 -2260,140,,status-playable,playable,2020-08-05 20:01:33,1 -2261,Goken,,status-playable,playable,2020-08-05 20:22:38,1 -2262,Maitetsu: Pure Station - 0100D9900F220000,0100D9900F220000,status-playable,playable,2022-09-20 15:12:49,2 -2263,Super Mega Space Blaster Special Turbo,,online;status-playable,playable,2020-08-06 12:13:25,1 -2264,Squidlit,,status-playable,playable,2020-08-06 12:38:32,1 -2265,Stories Untold - 010074400F6A8000,010074400F6A8000,status-playable;nvdec,playable,2022-12-22 1:08:46,2 -2266,Super Saurio Fly,,nvdec;status-playable,playable,2020-08-06 13:12:14,1 -2267,Hero Express,,nvdec;status-playable,playable,2020-08-06 13:23:43,1 -2268,Demolish & Build - 010099D00D1A4000,010099D00D1A4000,status-playable,playable,2021-06-13 15:27:26,2 -2269,Masquerada: Songs and Shadows - 0100113008262000,0100113008262000,status-playable,playable,2022-09-20 15:18:54,2 -2270,Dreaming Canvas - 010058B00F3C0000,010058B00F3C0000,UE4;gpu;status-ingame,ingame,2021-06-13 22:50:07,2 -2271,Time Tenshi,,,,2020-08-06 14:38:37,1 -2272,FoxyLand 2,,status-playable,playable,2020-08-06 14:41:30,1 -2273,Nicole - 0100A95012668000,0100A95012668000,status-playable;audout,playable,2022-10-05 16:41:44,3 -2274,Spiral Memoria -The Summer I Meet Myself-,,,,2020-08-06 15:19:11,1 -2275,"Warhammer 40,000: Space Wolf - 0100E5600D7B2000",0100E5600D7B2000,status-playable;online-broken,playable,2022-09-20 21:11:20,3 -2276,KukkoroDays - 010022801242C000,010022801242C000,status-menus;crash,menus,2021-11-25 8:52:56,4 -2277,Shadows 2: Perfidia,,status-playable,playable,2020-08-07 12:43:46,1 -2278,Murasame No Sword Breaker PV,,,,2020-08-07 12:54:21,1 -2279,Escape from Chernobyl - 0100FEF00F0AA000,0100FEF00F0AA000,status-boots;crash,boots,2022-09-19 21:36:58,2 -2280,198X,,status-playable,playable,2020-08-07 13:24:38,1 -2281,Orn: The Tiny Forest Sprite,,UE4;gpu;status-ingame,ingame,2020-08-07 14:25:30,1 -2282,Oddworld: Stranger's Wrath HD - 01002EA00ABBA000,01002EA00ABBA000,status-menus;crash;nvdec;loader-allocator,menus,2021-11-23 9:23:21,2 -2283,Just Glide,,status-playable,playable,2020-08-07 17:38:10,1 -2284,Ember - 010041A00FEC6000,010041A00FEC6000,status-playable;nvdec,playable,2022-09-19 21:16:11,3 -2285,Crazy Strike Bowling EX,,UE4;gpu;nvdec;status-ingame,ingame,2020-08-07 18:15:59,1 -2286,requesting accessibility in the main UI,,,,2020-08-08 0:09:05,1 -2287,Invisible Fist,,status-playable,playable,2020-08-08 13:25:52,1 -2288,Nicky: The Home Alone Golf Ball,,status-playable,playable,2020-08-08 13:45:39,1 -2289,KING OF FIGHTERS R-2,,,,2020-08-09 12:39:55,1 -2290,The Walking Dead: Season Two,,status-playable,playable,2020-08-09 12:57:06,1 -2291,"Yoru, tomosu",,,,2020-08-09 12:57:28,1 -2292,Zero Zero Zero Zero,,,,2020-08-09 13:14:58,1 -2293,Duke of Defense,,,,2020-08-09 13:34:52,1 -2294,Himno,,,,2020-08-09 13:51:57,1 -2295,The Walking Dead: A New Frontier - 010056E00B4F4000,010056E00B4F4000,status-playable,playable,2022-09-21 13:40:48,2 -2296,Cruel Bands Career,,,,2020-08-09 15:00:25,1 -2297,CARRION,,crash;status-nothing,nothing,2020-08-13 17:15:12,2 -2299,CODE SHIFTER,,status-playable,playable,2020-08-09 15:20:55,1 -2300,Ultra Hat Dimension - 01002D4012222000,01002D4012222000,services;audio;status-menus,menus,2021-11-18 9:05:20,2 -2301,Root Film,,,,2020-08-09 17:47:35,1 -2302,NAIRI: Tower of Shirin,,nvdec;status-playable,playable,2020-08-09 19:49:12,1 -2303,Panzer Paladin - 01004AE0108E0000,01004AE0108E0000,status-playable,playable,2021-05-05 18:26:00,2 -2304,Sinless,,nvdec;status-playable,playable,2020-08-09 20:18:55,1 -2305,Aviary Attorney: Definitive Edition,,status-playable,playable,2020-08-09 20:32:12,1 -2306,Lumini,,status-playable,playable,2020-08-09 20:45:09,1 -2308,Music Racer,,status-playable,playable,2020-08-10 8:51:23,1 -2309,Curious Cases,,status-playable,playable,2020-08-10 9:30:48,1 -2311,7th Sector,,nvdec;status-playable,playable,2020-08-10 14:22:14,1 -2312,Ash of Gods: Redemption,,deadlock;status-nothing,nothing,2020-08-10 18:08:32,1 -2313,The Turing Test - 0100EA100F516000,0100EA100F516000,status-playable;nvdec,playable,2022-09-21 13:24:07,2 -2314,The Town of Light - 010058000A576000,010058000A576000,gpu;status-playable,playable,2022-09-21 12:51:34,2 -2315,The Park,,UE4;crash;gpu;status-ingame,ingame,2020-12-18 12:50:07,2 -2316,Rogue Legacy,,status-playable,playable,2020-08-10 19:17:28,1 -2317,Nerved - 01008B0010160000,01008B0010160000,status-playable;UE4,playable,2022-09-20 17:14:03,3 -2318,Super Korotama - 010000D00F81A000,010000D00F81A000,status-playable,playable,2021-06-06 19:06:22,3 -2319,Mosaic,,status-playable,playable,2020-08-11 13:07:35,1 -2320,Pumped BMX Pro - 01009AE00B788000,01009AE00B788000,status-playable;nvdec;online-broken,playable,2022-09-20 17:40:50,2 -2321,The Dark Crystal,,status-playable,playable,2020-08-11 13:43:41,1 -2322,Ageless,,,,2020-08-11 13:52:24,1 -2323,EQQO - 0100E95010058000,0100E95010058000,UE4;nvdec;status-playable,playable,2021-06-13 23:10:51,3 -2324,LAST FIGHT - 01009E100BDD6000,01009E100BDD6000,status-playable,playable,2022-09-20 13:54:55,2 -2325,Neverending Nightmares - 0100F79012600000,0100F79012600000,crash;gpu;status-boots,boots,2021-04-24 1:43:35,2 -2326,Monster Jam Steel Titans - 010095C00F354000,010095C00F354000,status-menus;crash;nvdec;UE4,menus,2021-11-14 9:45:38,2 -2327,Star Story: The Horizon Escape,,status-playable,playable,2020-08-11 22:31:38,1 -2328,LOCO-SPORTS - 0100BA000FC9C000,0100BA000FC9C000,status-playable,playable,2022-09-20 14:09:30,2 -2329,Eclipse: Edge of Light,,status-playable,playable,2020-08-11 23:06:29,1 -2331,Psikyo Shooting Stars Alpha - 01007A200F2E2000,01007A200F2E2000,32-bit;status-playable,playable,2021-04-13 12:03:43,3 -2332,Monster Energy Supercross - The Official Videogame 3 - 010097800EA20000,010097800EA20000,UE4;audout;nvdec;online;status-playable,playable,2021-06-14 12:37:54,2 -2333,Musou Orochi 2 Ultimate,,crash;nvdec;status-boots,boots,2021-04-09 19:39:16,2 -2334,Alien Cruise,,status-playable,playable,2020-08-12 13:56:05,1 -2335,KUNAI - 010035A00DF62000,010035A00DF62000,status-playable;nvdec,playable,2022-09-20 13:48:34,2 -2336,Haunted Dungeons: Hyakki Castle,,status-playable,playable,2020-08-12 14:21:48,1 -2337,Tangledeep,,crash;status-boots,boots,2021-01-05 4:08:41,2 -2338,Azuran Tales: Trials,,status-playable,playable,2020-08-12 15:23:07,1 -2339,LOST ORBIT: Terminal Velocity - 010054600AC74000,010054600AC74000,status-playable,playable,2021-06-14 12:21:12,2 -2340,Monster Blast - 0100E2D0128E6000,0100E2D0128E6000,gpu;status-ingame,ingame,2023-09-02 20:02:32,3 -2341,Need a Packet?,,status-playable,playable,2020-08-12 16:09:01,1 -2342,Downwell - 010093D00C726000,010093D00C726000,status-playable,playable,2021-04-25 20:05:24,5 -2343,Dex,,nvdec;status-playable,playable,2020-08-12 16:48:12,1 -2345,Magicolors,,status-playable,playable,2020-08-12 18:39:11,1 -2346,Jisei: The First Case HD - 010038D011F08000,010038D011F08000,audio;status-playable,playable,2022-10-05 11:43:33,2 -2347,Mittelborg: City of Mages,,status-playable,playable,2020-08-12 19:58:06,1 -2348,Psikyo Shooting Stars Bravo - 0100D7400F2E4000,0100D7400F2E4000,32-bit;status-playable,playable,2021-06-14 12:09:07,4 -2349,STAB STAB STAB!,,,,2020-08-13 16:39:00,1 -2350,fault - milestone one,,nvdec;status-playable,playable,2021-03-24 10:41:49,2 -2351,Gerrrms,,status-playable,playable,2020-08-15 11:32:52,1 -2352,Aircraft Evolution - 0100E95011FDC000,0100E95011FDC000,nvdec;status-playable,playable,2021-06-14 13:30:18,2 -2353,Creaks,,status-playable,playable,2020-08-15 12:20:52,1 -2354,ARCADE FUZZ,,status-playable,playable,2020-08-15 12:37:36,1 -2355,Esports powerful pro yakyuu 2020 - 010073000FE18000,010073000FE18000,gpu;status-ingame;crash;Needs More Attention,ingame,2024-04-29 5:34:14,7 -2356,Arcade Archives ALPHA MISSION - 01005DD00BE08000,01005DD00BE08000,online;status-playable,playable,2021-04-15 9:20:43,2 -2357,Arcade Archives ALPINE SKI - 010083800DC70000,010083800DC70000,online;status-playable,playable,2021-04-15 9:28:46,2 -2358,Arcade Archives ARGUS - 010014F001DE2000,010014F001DE2000,online;status-playable,playable,2021-04-16 6:51:25,2 -2359,Arcade Archives Armed F - 010014F001DE2000,010014F001DE2000,online;status-playable,playable,2021-04-16 7:00:17,2 -2360,Arcade Archives ATHENA - 0100BEC00C7A2000,0100BEC00C7A2000,online;status-playable,playable,2021-04-16 7:10:12,2 -2361,Arcade Archives Atomic Robo-Kid - 0100426001DE4000,0100426001DE4000,online;status-playable,playable,2021-04-16 7:20:29,2 -2362,Arcade Archives BOMB JACK - 0100192009824000,0100192009824000,online;status-playable,playable,2021-04-16 9:48:26,2 -2363,Arcade Archives CLU CLU LAND - 0100EDC00E35A000,0100EDC00E35A000,online;status-playable,playable,2021-04-16 10:00:42,2 -2364,Arcade Archives EXCITEBIKE,,,,2020-08-19 12:08:03,1 -2365,Arcade Archives FRONT LINE - 0100496006EC8000,0100496006EC8000,online;status-playable,playable,2021-05-05 14:10:49,2 -2366,Arcade Archives ICE CLIMBER - 01007D200D3FC000,01007D200D3FC000,online;status-playable,playable,2021-05-05 14:18:34,2 -2367,Arcade Archives IKARI WARRIORS - 010049400C7A8000,010049400C7A8000,online;status-playable,playable,2021-05-05 14:24:46,2 -2368,Arcade Archives IMAGE FIGHT - 010008300C978000,010008300C978000,online;status-playable,playable,2021-05-05 14:31:21,2 -2369,Arcade Archives MOON CRESTA - 01000BE001DD8000,01000BE001DD8000,online;status-playable,playable,2021-05-05 14:39:29,2 -2370,Arcade Archives Ninja Spirit - 01002F300D2C6000,01002F300D2C6000,online;status-playable,playable,2021-05-05 14:45:31,2 -2371,Arcade Archives POOYAN - 0100A6E00D3F8000,0100A6E00D3F8000,online;status-playable,playable,2021-05-05 17:58:19,2 -2372,Arcade Archives PSYCHO SOLDIER - 01000D200C7A4000,01000D200C7A4000,online;status-playable,playable,2021-05-05 18:02:19,2 -2373,Arcade Archives ROAD FIGHTER - 0100FBA00E35C000,0100FBA00E35C000,online;status-playable,playable,2021-05-05 18:09:17,2 -2374,Arcade Archives ROUTE 16 - 010060000BF7C000,010060000BF7C000,online;status-playable,playable,2021-05-05 18:40:41,2 -2375,Arcade Archives Shusse Ozumo - 01007A4009834000,01007A4009834000,online;status-playable,playable,2021-05-05 17:52:25,2 -2376,Arcade Archives Solomon's Key - 01008C900982E000,01008C900982E000,online;status-playable,playable,2021-04-19 16:27:18,3 -2377,Arcade Archives TERRA FORCE - 0100348001DE6000,0100348001DE6000,online;status-playable,playable,2021-04-16 20:03:27,2 -2378,Arcade Archives THE NINJA WARRIORS - 0100DC000983A000,0100DC000983A000,online;slow;status-ingame,ingame,2021-04-16 19:54:56,2 -2379,Arcade Archives TIME PILOT - 0100AF300D2E8000,0100AF300D2E8000,online;status-playable,playable,2021-04-16 19:22:31,2 -2380,Arcade Archives URBAN CHAMPION - 010042200BE0C000,010042200BE0C000,online;status-playable,playable,2021-04-16 10:20:03,2 -2381,Arcade Archives WILD WESTERN - 01001B000D8B6000,01001B000D8B6000,online;status-playable,playable,2021-04-16 10:11:36,2 -2382,Arcade Archives GRADIUS,,,,2020-08-19 13:42:45,1 -2383,Evergate,,,,2020-08-19 22:28:07,1 -2384,Naught - 0100103011894000,0100103011894000,UE4;status-playable,playable,2021-04-26 13:31:45,2 -2385,Vitamin Connection ,,,,2020-08-19 23:18:42,1 -2386,Rock of Ages 3: Make & Break - 0100A1B00DB36000,0100A1B00DB36000,status-playable;UE4,playable,2022-10-06 12:18:29,2 -2387,Cubicity - 010040D011D04000,010040D011D04000,status-playable,playable,2021-06-14 14:19:51,1 -2389,Anima Gate of Memories: The Nameless Chronicles - 01007A400B3F8000,01007A400B3F8000,status-playable,playable,2021-06-14 14:33:06,1 -2392,Big Dipper - 0100A42011B28000,0100A42011B28000,status-playable,playable,2021-06-14 15:08:19,1 -2394,Dodo Peak - 01001770115C8000,01001770115C8000,status-playable;nvdec;UE4,playable,2022-10-04 16:13:05,1 -2395,Cube Creator X - 010001600D1E8000,010001600D1E8000,status-menus;crash,menus,2021-11-25 8:53:28,4 -2397,Raji An Ancient Epic,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 10:05:25,1 -2402,Red Siren : Space Defense - 010045400D73E000,010045400D73E000,UE4;status-playable,playable,2021-04-25 21:21:29,2 -2403,Shanky: The Vegan's Nightmare - 01000C00CC10000,,status-playable,playable,2021-01-26 15:03:55,1 -2407,Cricket 19 - 010022D00D4F0000,010022D00D4F0000,gpu;status-ingame,ingame,2021-06-14 14:56:07,4 -2408,Florence,,status-playable,playable,2020-09-05 1:22:30,4 -2409,Banner of the Maid - 010013C010C5C000,010013C010C5C000,status-playable,playable,2021-06-14 15:23:37,1 -2416,Super Loop Drive - 01003E300FCAE000,01003E300FCAE000,status-playable;nvdec;UE4,playable,2022-09-22 10:58:05,4 -2446,Buried Stars,,status-playable,playable,2020-09-07 14:11:58,2 -2447,FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition - 0100CE4010AAC000,0100CE4010AAC000,status-playable,playable,2023-04-02 23:39:12,7 -2448,Go All Out - 01000C800FADC000,01000C800FADC000,status-playable;online-broken,playable,2022-09-21 19:16:34,3 -2449,This Strange Realm of Mine,,status-playable,playable,2020-08-28 12:07:24,1 -2450,Silent World,,status-playable,playable,2020-08-28 13:45:13,1 -2451,Alder's Blood,,status-playable,playable,2020-08-28 15:15:23,1 -2452,Red Death,,status-playable,playable,2020-08-30 13:07:37,1 -2453,3000th Duel - 0100FB5010D2E000,0100FB5010D2E000,status-playable,playable,2022-09-21 17:12:08,3 -2454,Rise of Insanity,,status-playable,playable,2020-08-30 15:42:14,1 -2455,Darksiders Genesis - 0100F2300D4BA000,0100F2300D4BA000,status-playable;nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25,3 -2456,Space Blaze,,status-playable,playable,2020-08-30 16:18:05,1 -2457,Two Point Hospital - 010031200E044000,010031200E044000,status-ingame;crash;nvdec,ingame,2022-09-22 11:22:23,5 -2459,Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate,,status-playable,playable,2020-08-31 13:52:21,1 -2460,Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz,,status-playable,playable,2020-08-31 14:17:42,1 -2461,Cat Girl Without Salad: Amuse-Bouche - 010076000C86E000,010076000C86E000,status-playable,playable,2022-09-03 13:01:47,4 -2462,moon,,,,2020-08-31 15:46:23,1 -2463,Lines XL,,status-playable,playable,2020-08-31 17:48:23,1 -2464,Knightin'+,,status-playable,playable,2020-08-31 18:18:21,1 -2465,King Lucas - 0100E6B00FFBA000,0100E6B00FFBA000,status-playable,playable,2022-09-21 19:43:23,2 -2466,Skulls of the Shogun: Bone-a-fide Edition,,status-playable,playable,2020-08-31 18:58:12,1 -2467,SEGA AGES SONIC THE HEDGEHOG 2 - 01000D200C614000,01000D200C614000,status-playable,playable,2022-09-21 20:26:35,2 -2468,Devil May Cry 3 Special Edition - 01007B600D5BC000,01007B600D5BC000,status-playable;nvdec,playable,2024-07-08 12:33:23,8 -2469,Double Dragon & Kunio-Kun: Retro Brawler Bundle,,status-playable,playable,2020-09-01 12:48:46,1 -2470,Lost Horizon,,status-playable,playable,2020-09-01 13:41:22,1 -2471,Unlock the King,,status-playable,playable,2020-09-01 13:58:27,1 -2472,Vasilis,,status-playable,playable,2020-09-01 15:05:35,1 -2473,Mathland,,status-playable,playable,2020-09-01 15:40:06,1 -2474,MEGAMAN ZERO/ZX LEGACY COLLECTION - 010025C00D410000,010025C00D410000,status-playable,playable,2021-06-14 16:17:32,2 -2475,Afterparty - 0100DB100BBCE000,0100DB100BBCE000,status-playable,playable,2022-09-22 12:23:19,2 -2476,Tiny Racer - 01005D0011A40000,01005D0011A40000,status-playable,playable,2022-10-07 11:13:03,2 -2477,Skully - 0100D7B011654000,0100D7B011654000,status-playable;nvdec;UE4,playable,2022-10-06 13:52:59,3 -2478,Megadimension Neptunia VII,,32-bit;nvdec;status-playable,playable,2020-12-17 20:56:03,2 -2479,Kingdom Rush - 0100A280121F6000,0100A280121F6000,status-nothing;32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00,5 -2480,Cubers: Arena - 010082E00F1CE000,010082E00F1CE000,status-playable;nvdec;UE4,playable,2022-10-04 16:05:40,3 -2481,Air Missions: HIND,,status-playable,playable,2020-12-13 10:16:45,2 -2482,Fairy Tail - 0100CF900FA3E000,0100CF900FA3E000,status-playable;nvdec,playable,2022-10-04 23:00:32,2 -2484,Sentinels of Freedom - 01009E500D29C000,01009E500D29C000,status-playable,playable,2021-06-14 16:42:19,2 -2485,SAMURAI SHOWDOWN NEOGEO COLLECTION - 0100F6800F48E000,0100F6800F48E000,nvdec;status-playable,playable,2021-06-14 17:12:56,3 -2486,Rugby Challenge 4 - 010009B00D33C000,010009B00D33C000,slow;status-playable;online-broken;UE4,playable,2022-10-06 12:45:53,3 -2487,Neon Abyss - 0100BAB01113A000,0100BAB01113A000,status-playable,playable,2022-10-05 15:59:44,2 -2488,Max & The Book of Chaos,,status-playable,playable,2020-09-02 12:24:43,1 -2489,Family Mysteries: Poisonous Promises - 0100034012606000,0100034012606000,audio;status-menus;crash,menus,2021-11-26 12:35:06,2 -2490,Interrogation: You will be deceived - 010041501005E000,010041501005E000,status-playable,playable,2022-10-05 11:40:10,2 -2491,Instant Sports Summer Games,,gpu;status-menus,menus,2020-09-02 13:39:28,1 -2492,AvoCuddle,,status-playable,playable,2020-09-02 14:50:13,1 -2493,Be-A Walker,,slow;status-ingame,ingame,2020-09-02 15:00:31,1 -2494,"Soccer, Tactics & Glory - 010095C00F9DE000",010095C00F9DE000,gpu;status-ingame,ingame,2022-09-26 17:15:58,3 -2495,The Great Perhaps,,status-playable,playable,2020-09-02 15:57:04,1 -2496,Volta-X - 0100A7900E79C000,0100A7900E79C000,status-playable;online-broken,playable,2022-10-07 12:20:51,1 -2497,Hero Hours Contract,,,,2020-09-03 3:13:22,1 -2498,Starlit Adventures Golden Stars,,status-playable,playable,2020-11-21 12:14:43,3 -2499,Superliminal,,status-playable,playable,2020-09-03 13:20:50,1 -2500,Robozarro,,status-playable,playable,2020-09-03 13:33:40,1 -2501,QuietMansion2,,status-playable,playable,2020-09-03 14:59:35,1 -2502,DISTRAINT 2,,status-playable,playable,2020-09-03 16:08:12,1 -2503,Bloodstained: Curse of the Moon 2,,status-playable,playable,2020-09-04 10:56:27,1 -2504,Deadly Premonition 2 - 0100BAC011928000,0100BAC011928000,status-playable,playable,2021-06-15 14:12:36,2 -2505,CrossCode - 01003D90058FC000,01003D90058FC000,status-playable,playable,2024-02-17 10:23:19,6 -2506,Metro: Last Light Redux - 0100F0400E850000,0100F0400E850000,slow;status-ingame;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52,6 -2507,Soul Axiom Rebooted,,nvdec;slow;status-ingame,ingame,2020-09-04 12:41:01,1 -2508,Portal Dogs,,status-playable,playable,2020-09-04 12:55:46,1 -2509,Bucket Knight,,crash;status-ingame,ingame,2020-09-04 13:11:24,1 -2510,Arcade Archives LIFE FORCE,,status-playable,playable,2020-09-04 13:26:25,1 -2511,Stela - 01002DE01043E000,01002DE01043E000,UE4;status-playable,playable,2021-06-15 13:28:34,4 -2512,7 Billion Humans,,32-bit;status-playable,playable,2020-12-17 21:04:58,4 -2513,Rack N Ruin,,status-playable,playable,2020-09-04 15:20:26,1 -2515,Piffle,,,,2020-09-06 0:07:53,1 -2516,BATTOJUTSU,,,,2020-09-06 0:07:58,1 -2517,Super Battle Cards,,,,2020-09-06 0:08:01,1 -2518,Hayfever - 0100EA900FB2C000,0100EA900FB2C000,status-playable;loader-allocator,playable,2022-09-22 17:35:41,6 -2519,Save Koch - 0100C8300FA90000,0100C8300FA90000,status-playable,playable,2022-09-26 17:06:56,2 -2520,MY HERO ONE'S JUSTICE 2,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-18 14:08:47,2 -2521,Deep Diving Adventures - 010026800FA88000,010026800FA88000,status-playable,playable,2022-09-22 16:43:37,2 -2522,Trials of Mana Demo - 0100E1D00FBDE000,0100E1D00FBDE000,status-playable;nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02,2 -2523,Sky Racket,,status-playable,playable,2020-09-07 12:22:24,1 -2524,LA-MULANA 1 & 2 - 0100E5D00F4AE000,0100E5D00F4AE000,status-playable,playable,2022-09-22 17:56:36,4 -2525,Exit the Gungeon - 0100DD30110CC000,0100DD30110CC000,status-playable,playable,2022-09-22 17:04:43,2 -2529,Super Mario 3D All-Stars - 010049900F546000,010049900F546000,services-horizon;slow;status-ingame;vulkan;amd-vendor-bug,ingame,2024-05-07 2:38:16,16 -2530,Cupid Parasite - 0100F7E00DFC8000,0100F7E00DFC8000,gpu;status-ingame,ingame,2023-08-21 5:52:36,3 -2531,Toraware no Paruma Deluxe Edition,,,,2020-09-20 9:34:41,1 -2533,Uta no☆Prince-sama♪ Repeat Love - 010024200E00A000,010024200E00A000,status-playable;nvdec,playable,2022-12-09 9:21:51,2 -2534,Clock Zero ~Shuuen no Ichibyou~ Devote - 01008C100C572000,01008C100C572000,status-playable;nvdec,playable,2022-12-04 22:19:14,3 -2535,Dear Magi - Mahou Shounen Gakka -,,status-playable,playable,2020-11-22 16:45:16,4 -2536,Reine des Fleurs,,cpu;crash;status-boots,boots,2020-09-27 18:50:39,2 -2537,Kaeru Batake DE Tsukamaete,,,,2020-09-20 17:06:57,1 -2538,Koi no Hanasaku Hyakkaen,,32-bit;gpu;nvdec;status-ingame,ingame,2020-10-03 14:17:10,4 -2539,Brothers Conflict: Precious Baby,,,,2020-09-20 19:13:24,1 -2540,Dairoku: Ayakashimori - 010061300DF48000,010061300DF48000,status-nothing;Needs Update;loader-allocator,nothing,2021-11-30 5:09:38,4 -2542,Yunohana Spring! - Mellow Times -,,audio;crash;status-menus,menus,2020-09-27 19:27:40,2 -2543,Nil Admirari no Tenbin: Irodori Nadeshiko,,,,2020-09-21 15:59:26,1 -2544,Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~,,cpu;crash;status-boots,boots,2020-09-27 19:01:25,2 -2545,BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~,,crash;status-menus,menus,2020-10-04 6:12:08,3 -2546,Kin'iro no Corda Octave,,status-playable,playable,2020-09-22 13:23:12,3 -2547,Moujuutsukai to Ouji-sama ~Flower & Snow~,,,,2020-09-22 17:22:03,1 -2548,Spooky Ghosts Dot Com - 0100C6100D75E000,0100C6100D75E000,status-playable,playable,2021-06-15 15:16:11,3 -2549,NBA 2K21 - 0100E24011D1E000,0100E24011D1E000,gpu;status-boots,boots,2022-10-05 15:31:51,2 -2550,Commander Keen in Keen Dreams - 0100C4D00D16A000,0100C4D00D16A000,gpu;status-ingame,ingame,2022-08-04 20:34:20,8 -2551,Minecraft - 0100D71004694000,0100D71004694000,status-ingame;crash;ldn-broken,ingame,2024-09-29 12:08:59,21 -2552,PGA TOUR 2K21 - 010053401147C000,010053401147C000,deadlock;status-ingame;nvdec,ingame,2022-10-05 21:53:50,4 -2553,The Executioner - 0100C2E0129A6000,0100C2E0129A6000,nvdec;status-playable,playable,2021-01-23 0:31:28,2 -2554,Tamiku - 010008A0128C4000,010008A0128C4000,gpu;status-ingame,ingame,2021-06-15 20:06:55,2 -2555,"Shinobi, Koi Utsutsu",,,,2020-09-23 11:04:27,1 -2556,Hades - 0100535012974000,0100535012974000,status-playable;vulkan,playable,2022-10-05 10:45:21,11 -2557,Wolfenstein: Youngblood - 01003BD00CAAE000,01003BD00CAAE000,status-boots;online-broken,boots,2024-07-12 23:49:20,4 -2558,Taimumari: Complete Edition - 010040A00EA26000,010040A00EA26000,status-playable,playable,2022-12-06 13:34:49,4 -2559,Sangoku Rensenki ~Otome no Heihou!~,,gpu;nvdec;status-ingame,ingame,2020-10-17 19:13:14,3 -2560,Norn9 ~Norn + Nonette~ LOFN - 01001A500AD6A000,01001A500AD6A000,status-playable;nvdec;vulkan-backend-bug,playable,2022-12-09 9:29:16,4 -2561,Disaster Report 4: Summer Memories - 010020700E2A2000,010020700E2A2000,status-playable;nvdec;UE4,playable,2022-09-27 19:41:31,5 -2562,No Straight Roads - 01009F3011004000,01009F3011004000,status-playable;nvdec,playable,2022-10-05 17:01:38,4 -2563,Gnosia - 01008EF013A7C000,01008EF013A7C000,status-playable,playable,2021-04-05 17:20:30,5 -2564,Shin Hayarigami 1 and 2 Pack,,,,2020-09-25 15:56:19,1 -2566,Gothic Murder: Adventure That Changes Destiny,,deadlock;status-ingame;crash,ingame,2022-09-30 23:16:53,2 -2567,Grand Theft Auto 3 - 05B1D2ABD3D30000,05B1D2ABD3D30000,services;status-nothing;crash;homebrew,nothing,2023-05-01 22:01:58,3 -2568,Super Mario 64 - 054507E0B7552000,054507E0B7552000,status-ingame;homebrew,ingame,2024-03-20 16:57:27,2 -2569,Satsujin Tantei Jack the Ripper - 0100A4700BC98000,0100A4700BC98000,status-playable,playable,2021-06-21 16:32:54,3 -2570,Yoshiwara Higanbana Kuon no Chigiri,,nvdec;status-playable,playable,2020-10-17 19:14:46,3 -2571,Katakoi Contrast - collection of branch - - 01007FD00DB20000,01007FD00DB20000,status-playable;nvdec,playable,2022-12-09 9:41:26,2 -2572,Tlicolity Eyes - twinkle showtime - - 010019500DB1E000,010019500DB1E000,gpu;status-boots,boots,2021-05-29 19:43:44,2 -2573,Omega Vampire,,nvdec;status-playable,playable,2020-10-17 19:15:35,3 -2574,Iris School of Wizardry - Vinculum Hearts - - 0100AD300B786000,0100AD300B786000,status-playable,playable,2022-12-05 13:11:15,2 -2575,"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou - 0100EA100DF92000",0100EA100DF92000,32-bit;status-playable;nvdec,playable,2022-12-05 13:19:12,3 -2576,Undead Darlings ~no cure for love~,,,,2020-09-30 8:34:06,1 -2577,LEGO Marvel Super Heroes 2 - 0100D3A00409E000,0100D3A00409E000,status-nothing;crash,nothing,2023-03-02 17:12:33,5 -2578,RollerCoaster Tycoon 3: Complete Edition - 01004900113F8000,01004900113F8000,32-bit;status-playable,playable,2022-10-17 14:18:01,4 -2579,R.B.I. Baseball 20 - 010061400E7D4000,010061400E7D4000,status-playable,playable,2021-06-15 21:16:29,2 -2580,BATTLESLOTHS,,status-playable,playable,2020-10-03 8:32:22,1 -2581,Explosive Jake - 01009B7010B42000,01009B7010B42000,status-boots;crash,boots,2021-11-03 7:48:32,4 -2582,Dezatopia - 0100AFC00E06A000,0100AFC00E06A000,online;status-playable,playable,2021-06-15 21:06:11,2 -2583,Wordify,,status-playable,playable,2020-10-03 9:01:07,1 -2585,Wizards: Wand of Epicosity - 0100C7600E77E000,0100C7600E77E000,status-playable,playable,2022-10-07 12:32:06,2 -2586,Titan Glory - 0100FE801185E000,0100FE801185E000,status-boots,boots,2022-10-07 11:36:40,3 -2587,Soccer Pinball - 0100B5000E05C000,0100B5000E05C000,UE4;gpu;status-ingame,ingame,2021-06-15 20:56:51,2 -2588,Steam Tactics - 0100AE100DAFA000,0100AE100DAFA000,status-playable,playable,2022-10-06 16:53:45,2 -2589,Trover Saves the Universe,,UE4;crash;status-nothing,nothing,2020-10-03 10:25:27,1 -2590,112th Seed,,status-playable,playable,2020-10-03 10:32:38,1 -2591,Spitlings - 010042700E3FC000,010042700E3FC000,status-playable;online-broken,playable,2022-10-06 16:42:39,3 -2592,Unlock the King 2 - 0100A3E011CB0000,0100A3E011CB0000,status-playable,playable,2021-06-15 20:43:55,3 -2593,Preventive Strike - 010009300D278000,010009300D278000,status-playable;nvdec,playable,2022-10-06 10:55:51,2 -2594,Hidden - 01004E800F03C000,01004E800F03C000,slow;status-ingame,ingame,2022-10-05 10:56:53,2 -2595,Pulstario - 0100861012474000,0100861012474000,status-playable,playable,2022-10-06 11:02:01,2 -2596,Frontline Zed,,status-playable,playable,2020-10-03 12:55:59,1 -2597,bayala - the game - 0100194010422000,0100194010422000,status-playable,playable,2022-10-04 14:09:25,2 -2598,City Bus Driving Simulator - 01005E501284E000,01005E501284E000,status-playable,playable,2021-06-15 21:25:59,2 -2599,Memory Lane - 010062F011E7C000,010062F011E7C000,status-playable;UE4,playable,2022-10-05 14:31:03,3 -2600,Minefield - 0100B7500F756000,0100B7500F756000,status-playable,playable,2022-10-05 15:03:29,2 -2601,Double Kick Heroes,,gpu;status-ingame,ingame,2020-10-03 14:33:59,1 -2602,Little Shopping,,status-playable,playable,2020-10-03 16:34:35,1 -2603,Car Quest - 01007BD00AE70000,01007BD00AE70000,deadlock;status-menus,menus,2021-11-18 8:59:18,2 -2604,RogueCube - 0100C7300C0EC000,0100C7300C0EC000,status-playable,playable,2021-06-16 12:16:42,2 -2605,Timber Tennis Versus,,online;status-playable,playable,2020-10-03 17:07:15,1 -2606,Swimsanity! - 010049D00C8B0000,010049D00C8B0000,status-menus;online,menus,2021-11-26 14:27:16,2 -2607,Dininho Adventures,,status-playable,playable,2020-10-03 17:25:51,1 -2608,Rhythm of the Gods,,UE4;crash;status-nothing,nothing,2020-10-03 17:39:59,1 -2609,"Rainbows, toilets & unicorns",,nvdec;status-playable,playable,2020-10-03 18:08:18,1 -2610,Super Mario Bros. 35 - 0100277011F1A000,0100277011F1A000,status-menus;online-broken,menus,2022-08-07 16:27:25,2 -2611,Bohemian Killing - 0100AD1010CCE000,0100AD1010CCE000,status-playable;vulkan-backend-bug,playable,2022-09-26 22:41:37,2 -2612,Colorgrid,,status-playable,playable,2020-10-04 1:50:52,1 -2613,Dogurai,,status-playable,playable,2020-10-04 2:40:16,1 -2614,The Legend of Heroes: Trails of Cold Steel III Demo - 01009B101044C000,01009B101044C000,demo;nvdec;status-playable,playable,2021-04-23 1:07:32,2 -2615,Star Wars Jedi Knight: Jedi Academy - 01008CA00FAE8000,01008CA00FAE8000,gpu;status-boots,boots,2021-06-16 12:35:30,2 -2616,Panzer Dragoon: Remake,,status-playable,playable,2020-10-04 4:03:55,1 -2617,Blackmoor2 - 0100A0A00E660000,0100A0A00E660000,status-playable;online-broken,playable,2022-09-26 20:26:34,3 -2618,CHAOS CODE -NEW SIGN OF CATASTROPHE- - 01007600115CE000,01007600115CE000,status-boots;crash;nvdec,boots,2022-04-04 12:24:21,3 -2619,Saints Row IV - 01008D100D43E000,01008D100D43E000,status-playable;ldn-untested;LAN,playable,2023-12-04 18:33:37,5 -2620,Troubleshooter,,UE4;crash;status-nothing,nothing,2020-10-04 13:46:50,1 -2621,Children of Zodiarcs,,status-playable,playable,2020-10-04 14:23:33,1 -2622,VtM Coteries of New York,,status-playable,playable,2020-10-04 14:55:22,1 -2623,Grand Guilds - 010038100D436000,010038100D436000,UE4;nvdec;status-playable,playable,2021-04-26 12:49:05,2 -2624,Best Friend Forever,,,,2020-10-04 15:41:42,1 -2625,Copperbell,,status-playable,playable,2020-10-04 15:54:36,1 -2626,Deep Sky Derelicts Definitive Edition - 0100C3E00D68E000,0100C3E00D68E000,status-playable,playable,2022-09-27 11:21:08,3 -2627,Wanba Warriors,,status-playable,playable,2020-10-04 17:56:22,1 -2628,Mist Hunter - 010059200CC40000,010059200CC40000,status-playable,playable,2021-06-16 13:58:58,2 -2629,Shinsekai Into the Depths - 01004EE0104F6000,01004EE0104F6000,status-playable,playable,2022-09-28 14:07:51,2 -2630,ELEA: Paradigm Shift,,UE4;crash;status-nothing,nothing,2020-10-04 19:07:43,1 -2631,Harukanaru Toki no Naka De 7,,,,2020-10-05 10:12:41,1 -2632,Saiaku Naru Saiyaku Ningen ni Sasagu,,,,2020-10-05 10:26:45,1 -2633,planetarian HD ~the reverie of a little planet~,,status-playable,playable,2020-10-17 20:26:20,3 -2634,Hypnospace Outlaw - 0100959010466000,0100959010466000,status-ingame;nvdec,ingame,2023-08-02 22:46:49,2 -2635,Dei Gratia no Rashinban - 010071C00CBA4000,010071C00CBA4000,crash;status-nothing,nothing,2021-07-13 2:25:32,2 -2636,Rogue Company,,,,2020-10-05 17:52:10,1 -2637,MX Nitro - 0100161009E5C000,0100161009E5C000,status-playable,playable,2022-09-27 22:34:33,2 -2638,Wanderjahr TryAgainOrWalkAway,,status-playable,playable,2020-12-16 9:46:04,2 -2639,Pooplers,,status-playable,playable,2020-11-02 11:52:10,2 -2640,Beyond Enemy Lines: Essentials - 0100B8F00DACA000,0100B8F00DACA000,status-playable;nvdec;UE4,playable,2022-09-26 19:48:16,4 -2642,Lust for Darkness: Dawn Edition - 0100F0B00F68E000,0100F0B00F68E000,nvdec;status-playable,playable,2021-06-16 13:47:46,2 -2643,Nerdook Bundle Vol. 1,,gpu;slow;status-ingame,ingame,2020-10-07 14:27:10,1 -2644,Indie Puzzle Bundle Vol 1 - 0100A2101107C000,0100A2101107C000,status-playable,playable,2022-09-27 22:23:21,2 -2645,Wurroom,,status-playable,playable,2020-10-07 22:46:21,1 -2646,Valley - 0100E0E00B108000,0100E0E00B108000,status-playable;nvdec,playable,2022-09-28 19:27:58,2 -2647,FIFA 21 Legacy Edition - 01000A001171A000,01000A001171A000,gpu;status-ingame;online-broken,ingame,2023-12-11 22:10:19,7 -2648,Hotline Miami Collection - 0100D0E00E51E000,0100D0E00E51E000,status-playable;nvdec,playable,2022-09-09 16:41:19,4 -2649,QuakespasmNX,,status-nothing;crash;homebrew,nothing,2022-07-23 19:28:07,3 -2650,nxquake2,,services;status-nothing;crash;homebrew,nothing,2022-08-04 23:14:04,5 -2651,ONE PIECE: PIRATE WARRIORS 4 - 01008FE00E2F6000,01008FE00E2F6000,status-playable;online-broken;ldn-untested,playable,2022-09-27 22:55:46,2 -2652,The Complex - 01004170113D4000,01004170113D4000,status-playable;nvdec,playable,2022-09-28 14:35:41,3 -2653,Gigantosaurus The Game - 01002C400E526000,01002C400E526000,status-playable;UE4,playable,2022-09-27 21:20:00,4 -2654,TY the Tasmanian Tiger,,32-bit;crash;nvdec;status-menus,menus,2020-12-17 21:15:00,2 -2655,Speaking Simulator,,status-playable,playable,2020-10-08 13:00:39,1 -2656,Pikmin 3 Deluxe Demo - 01001CB0106F8000,01001CB0106F8000,32-bit;crash;demo;gpu;status-ingame,ingame,2021-06-16 18:38:07,2 -2657,Rascal Fight,,status-playable,playable,2020-10-08 13:23:30,1 -2658,Rain City,,status-playable,playable,2020-10-08 16:59:03,1 -2660,Fury Unleashed Demo,,status-playable,playable,2020-10-08 20:09:21,1 -2661,Bridge 3,,status-playable,playable,2020-10-08 20:47:24,1 -2662,RMX Real Motocross,,status-playable,playable,2020-10-08 21:06:15,1 -2663,Birthday of Midnight,,,,2020-10-09 9:43:24,1 -2664,WARSAW,,,,2020-10-09 10:31:40,1 -2665,Candy Raid: The Factory,,,,2020-10-09 10:43:39,1 -2666,World for Two,,,,2020-10-09 12:37:07,1 -2667,Voxel Pirates - 0100AFA011068000,0100AFA011068000,status-playable,playable,2022-09-28 22:55:02,2 -2668,Voxel Galaxy - 0100B1E0100A4000,0100B1E0100A4000,status-playable,playable,2022-09-28 22:45:02,2 -2669,Journey of the Broken Circle,,,,2020-10-09 13:24:52,1 -2670,Daggerhood,,,,2020-10-09 13:54:02,1 -2671,Flipon,,,,2020-10-09 14:23:40,1 -2672,Nevaeh - 0100C20012A54000,0100C20012A54000,gpu;nvdec;status-ingame,ingame,2021-06-16 17:29:03,2 -2673,Bookbound Brigade,,status-playable,playable,2020-10-09 14:30:29,1 -2674,Aery - Sky Castle - 010018E012914000,010018E012914000,status-playable,playable,2022-10-21 17:58:49,3 -2675,Nickelodeon Kart Racers 2 Grand Prix,,,,2020-10-09 14:54:17,1 -2676,Issho ni Asobo Koupen chan,,,,2020-10-09 14:57:27,1 -2677,Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o - 010016C011AAA000,010016C011AAA000,status-playable,playable,2023-04-26 9:51:08,4 -2678,Kono Subarashii Sekai ni Shukufuku wo! Kurenai Densetsu,,,,2020-10-09 15:06:00,1 -2679,Hide & Dance!,,,,2020-10-09 15:10:06,1 -2680,Pro Yakyuu Famista 2020,,,,2020-10-09 15:21:25,1 -2681,METAL MAX Xeno Reborn - 0100E8F00F6BE000,0100E8F00F6BE000,status-playable,playable,2022-12-05 15:33:53,2 -2682,Ikenfell - 010040900AF46000,010040900AF46000,status-playable,playable,2021-06-16 17:18:44,3 -2683,Depixtion,,status-playable,playable,2020-10-10 18:52:37,1 -2684,GREEN The Life Algorithm - 0100DFE00F002000,0100DFE00F002000,status-playable,playable,2022-09-27 21:37:13,2 -2685,Served! A gourmet race - 0100B2C00E4DA000,0100B2C00E4DA000,status-playable;nvdec,playable,2022-09-28 12:46:00,2 -2686,OTTTD,,slow;status-ingame,ingame,2020-10-10 19:31:07,1 -2687,Metamorphosis - 010055200E87E000,010055200E87E000,UE4;audout;gpu;nvdec;status-ingame,ingame,2021-06-16 16:18:11,3 -2688,Zero Strain - 01004B001058C000,01004B001058C000,services;status-menus;UE4,menus,2021-11-10 7:48:32,2 -2689,Time Carnage - 01004C500B698000,01004C500B698000,status-playable,playable,2021-06-16 17:57:28,2 -2690,Spiritfarer - 0100BD400DC52000,0100BD400DC52000,gpu;status-ingame,ingame,2022-10-06 16:31:38,2 -2691,Street Power Soccer,,UE4;crash;status-boots,boots,2020-11-21 12:28:57,2 -2692,OZMAFIA!! -vivace-,,,,2020-10-12 10:24:45,1 -2693,Road to Guangdong,,slow;status-playable,playable,2020-10-12 12:15:32,1 -2694,Prehistoric Dude,,gpu;status-ingame,ingame,2020-10-12 12:38:48,1 -2695,MIND Path to Thalamus - 0100F5700C9A8000,0100F5700C9A8000,UE4;status-playable,playable,2021-06-16 17:37:25,2 -2696,Manifold Garden,,status-playable,playable,2020-10-13 20:27:13,1 -2697,INMOST - 0100F1401161E000,0100F1401161E000,status-playable,playable,2022-10-05 11:27:40,3 -2698,G.I. Joe Operation Blackout,,UE4;crash;status-boots,boots,2020-11-21 12:37:44,2 -2699,Petal Crash,,,,2020-10-14 7:58:02,1 -2700,Helheim Hassle,,status-playable,playable,2020-10-14 11:38:36,1 -2701,FuzzBall - 010067600F1A0000,010067600F1A0000,crash;status-nothing,nothing,2021-03-29 20:13:21,2 -2702,Fight Crab - 01006980127F0000,01006980127F0000,status-playable;online-broken;ldn-untested,playable,2022-10-05 10:24:04,3 -2703,Faeria - 010069100DB08000,010069100DB08000,status-menus;nvdec;online-broken,menus,2022-10-04 16:44:41,2 -2704,Escape from Tethys,,status-playable,playable,2020-10-14 22:38:25,1 -2705,Chinese Parents - 010046F012A04000,010046F012A04000,status-playable,playable,2021-04-08 12:56:41,3 -2706,Boomerang Fu - 010081A00EE62000,010081A00EE62000,status-playable,playable,2024-07-28 1:12:41,4 -2707,Bite the Bullet,,status-playable,playable,2020-10-14 23:10:11,1 -2708,Pretty Princess Magical Coordinate,,status-playable,playable,2020-10-15 11:43:41,2 -2709,A Short Hike,,status-playable,playable,2020-10-15 0:19:58,1 -2710,HYPERCHARGE: Unboxed - 0100A8B00F0B4000,0100A8B00F0B4000,status-playable;nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39,3 -2711,Anima: Gate of Memories - 0100706005B6A000,0100706005B6A000,nvdec;status-playable,playable,2021-06-16 18:13:18,2 -2712,Perky Little Things - 01005CD012DC0000,01005CD012DC0000,status-boots;crash;vulkan,boots,2024-08-04 7:22:46,9 -2713,Save Your Nuts - 010091000F72C000,010091000F72C000,status-playable;nvdec;online-broken;UE4,playable,2022-09-27 23:12:02,4 -2714,Unknown Fate,,slow;status-ingame,ingame,2020-10-15 12:27:42,1 -2715,Picross S4,,status-playable,playable,2020-10-15 12:33:46,1 -2716,The Station - 010007F00AF56000,010007F00AF56000,status-playable,playable,2022-09-28 18:15:27,2 -2717,Liege Dragon - 010041F0128AE000,010041F0128AE000,status-playable,playable,2022-10-12 10:27:03,2 -2718,G-MODE Archives 06 The strongest ever Julia Miyamoto,,status-playable,playable,2020-10-15 13:06:26,1 -2719,Prinny: Can I Really Be the Hero? - 01007A0011878000,01007A0011878000,32-bit;status-playable;nvdec,playable,2023-10-22 9:25:25,5 -2720,"Prinny 2: Dawn of Operation Panties, Dood! - 01008FA01187A000",01008FA01187A000,32-bit;status-playable,playable,2022-10-13 12:42:58,4 -2721,Convoy,,status-playable,playable,2020-10-15 14:43:50,1 -2722,Fight of Animals,,online;status-playable,playable,2020-10-15 15:08:28,1 -2723,Strawberry Vinegar - 0100D7E011C64000,0100D7E011C64000,status-playable;nvdec,playable,2022-12-05 16:25:40,3 -2724,Inside Grass: A little adventure,,status-playable,playable,2020-10-15 15:26:27,1 -2725,Battle Princess Madelyn Royal Edition - 0100A7500DF64000,0100A7500DF64000,status-playable,playable,2022-09-26 19:14:49,2 -2726,A HERO AND A GARDEN - 01009E1011EC4000,01009E1011EC4000,status-playable,playable,2022-12-05 16:37:47,2 -2727,Trials of Mana - 0100D7800E9E0000,0100D7800E9E0000,status-playable;UE4,playable,2022-09-30 21:50:37,3 -2728,Ultimate Fishing Simulator - 010048901295C000,010048901295C000,status-playable,playable,2021-06-16 18:38:23,2 -2729,Struggling,,status-playable,playable,2020-10-15 20:37:03,1 -2730,Samurai Jack Battle Through Time - 01006C600E46E000,01006C600E46E000,status-playable;nvdec;UE4,playable,2022-10-06 13:33:59,2 -2731,House Flipper - 0100CAE00EB02000,0100CAE00EB02000,status-playable,playable,2021-06-16 18:28:32,2 -2732,Aokana - Four Rhythms Across the Blue - 0100990011866000,0100990011866000,status-playable,playable,2022-10-04 13:50:26,2 -2733,NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO - 010084D00CF5E000,010084D00CF5E000,status-playable,playable,2024-06-29 13:04:22,10 -2734,Where Angels Cry - 010027D011C9C000,010027D011C9C000,gpu;status-ingame;nvdec,ingame,2022-09-30 22:24:47,3 -2735,The Copper Canyon Dixie Dash - 01000F20102AC000,01000F20102AC000,status-playable;UE4,playable,2022-09-29 11:42:29,3 -2736,Cloudpunk,,,,2020-10-15 23:03:55,1 -2737,MotoGP 20 - 01001FA00FBBC000,01001FA00FBBC000,status-playable;ldn-untested,playable,2022-09-29 17:58:01,3 -2738,Little Town Hero,,status-playable,playable,2020-10-15 23:28:48,1 -2739,Broken Lines,,status-playable,playable,2020-10-16 0:01:37,1 -2740,Crown Trick - 0100059012BAE000,0100059012BAE000,status-playable,playable,2021-06-16 19:36:29,2 -2741,Archaica: Path of LightInd,,crash;status-nothing,nothing,2020-10-16 13:22:26,1 -2742,Indivisible - 01001D3003FDE000,01001D3003FDE000,status-playable;nvdec,playable,2022-09-29 15:20:57,2 -2743,Thy Sword - 01000AC011588000,01000AC011588000,status-ingame;crash,ingame,2022-09-30 16:43:14,3 -2744,Spirit of the North - 01005E101122E000,01005E101122E000,status-playable;UE4,playable,2022-09-30 11:40:47,3 -2745,Megabyte Punch,,status-playable,playable,2020-10-16 14:07:18,1 -2746,Book of Demons - 01007A200F452000,01007A200F452000,status-playable,playable,2022-09-29 12:03:43,5 -2747,80's OVERDRIVE,,status-playable,playable,2020-10-16 14:33:32,1 -2748,My Universe My Baby,,,,2020-10-17 14:04:01,1 -2749,Mario Kart Live: Home Circuit - 0100ED100BA3A000,0100ED100BA3A000,services;status-nothing;crash;Needs More Attention,nothing,2022-12-07 22:36:52,2 -2750,STONE - 010070D00F640000,010070D00F640000,status-playable;UE4,playable,2022-09-30 11:53:32,2 -2751,Newt One,,status-playable,playable,2020-10-17 21:21:48,1 -2752,Zoids Wild Blast Unleashed - 010069C0123D8000,010069C0123D8000,status-playable;nvdec,playable,2022-10-15 11:26:59,2 -2753,KINGDOM HEARTS Melody of Memory DEMO,,,,2020-10-18 14:57:30,1 -2754,Escape First,,status-playable,playable,2020-10-20 22:46:53,1 -2755,If My Heart Had Wings - 01001AC00ED72000,01001AC00ED72000,status-playable,playable,2022-09-29 14:54:57,2 -2756,Felix the Reaper,,nvdec;status-playable,playable,2020-10-20 23:43:03,1 -2757,War-Torn Dreams,,crash;status-nothing,nothing,2020-10-21 11:36:16,1 -2758,TT Isle of Man 2 - 010000400F582000,010000400F582000,gpu;status-ingame;nvdec;online-broken,ingame,2022-09-30 22:13:05,3 -2759,Kholat - 0100F680116A2000,0100F680116A2000,UE4;nvdec;status-playable,playable,2021-06-17 11:52:48,2 -2760,Dungeon of the Endless - 010034300F0E2000,010034300F0E2000,nvdec;status-playable,playable,2021-05-27 19:16:26,2 -2761,Gravity Rider Zero - 01002C2011828000,01002C2011828000,gpu;status-ingame;vulkan-backend-bug,ingame,2022-09-29 13:56:13,6 -2762,Oddworld: Munch's Oddysee - 0100BB500EE3C000,0100BB500EE3C000,gpu;nvdec;status-ingame,ingame,2021-06-17 12:11:50,2 -2763,Five Nights at Freddy's: Help Wanted - 0100F7901118C000,0100F7901118C000,status-playable;UE4,playable,2022-09-29 12:40:09,4 -2764,Gates of Hell,,slow;status-playable,playable,2020-10-22 12:44:26,1 -2765,Concept Destruction - 0100971011224000,0100971011224000,status-playable,playable,2022-09-29 12:28:56,2 -2766,Zenge,,status-playable,playable,2020-10-22 13:23:57,1 -2767,Water Balloon Mania,,status-playable,playable,2020-10-23 20:20:59,1 -2768,The Persistence - 010050101127C000,010050101127C000,nvdec;status-playable,playable,2021-06-06 19:15:40,2 -2769,The House of Da Vinci 2,,status-playable,playable,2020-10-23 20:47:17,1 -2770,The Experiment: Escape Room - 01006050114D4000,01006050114D4000,gpu;status-ingame,ingame,2022-09-30 13:20:35,3 -2771,Telling Lies,,status-playable,playable,2020-10-23 21:14:51,1 -2772,She Sees Red - 01000320110C2000,01000320110C2000,status-playable;nvdec,playable,2022-09-30 11:30:15,3 -2773,Golf With Your Friends - 01006FB00EBE0000,01006FB00EBE0000,status-playable;online-broken,playable,2022-09-29 12:55:11,2 -2774,Island Saver,,nvdec;status-playable,playable,2020-10-23 22:07:02,1 -2775,Devil May Cry 2 - 01007CF00D5BA000,01007CF00D5BA000,status-playable;nvdec,playable,2023-01-24 23:03:20,3 -2776,The Otterman Empire - 0100B0101265C000,0100B0101265C000,UE4;gpu;status-ingame,ingame,2021-06-17 12:27:15,2 -2777,SaGa SCARLET GRACE: AMBITIONS - 010003A00D0B4000,010003A00D0B4000,status-playable,playable,2022-10-06 13:20:31,3 -2778,REZ PLZ,,status-playable,playable,2020-10-24 13:26:12,1 -2779,Bossgard - 010076F00EBE4000,010076F00EBE4000,status-playable;online-broken,playable,2022-10-04 14:21:13,2 -2780,1993 Shenandoah,,status-playable,playable,2020-10-24 13:55:42,1 -2781,Ori and the Will of the Wisps - 01008DD013200000,01008DD013200000,status-playable,playable,2023-03-07 0:47:13,12 -2782,WWE 2K Battlegrounds - 010081700EDF4000,010081700EDF4000,status-playable;nvdec;online-broken;UE4,playable,2022-10-07 12:44:40,5 -2783,Shaolin vs Wutang : Eastern Heroes - 01003AB01062C000,01003AB01062C000,deadlock;status-nothing,nothing,2021-03-29 20:38:54,2 -2784,Mini Motor Racing X - 01003560119A6000,01003560119A6000,status-playable,playable,2021-04-13 17:54:49,4 -2785,Secret Files 3,,nvdec;status-playable,playable,2020-10-24 15:32:39,1 -2786,Othercide - 0100E5900F49A000,0100E5900F49A000,status-playable;nvdec,playable,2022-10-05 19:04:38,2 -2787,Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai,,status-playable,playable,2020-11-12 0:11:50,2 -2788,Party Hard 2 - 010022801217E000,010022801217E000,status-playable;nvdec,playable,2022-10-05 20:31:48,2 -2789,Paradise Killer - 01007FB010DC8000,01007FB010DC8000,status-playable;UE4,playable,2022-10-05 19:33:05,5 -2790,MX vs ATV All Out - 0100218011E7E000,0100218011E7E000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46,3 -2791,CastleStorm 2,,UE4;crash;nvdec;status-boots,boots,2020-10-25 11:22:44,1 -2792,Hotshot Racing - 0100BDE008218000,0100BDE008218000,gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17,4 -2793,Bounty Battle - 0100E1200DC1A000,0100E1200DC1A000,status-playable;nvdec,playable,2022-10-04 14:40:51,2 -2794,Avicii Invector,,status-playable,playable,2020-10-25 12:12:56,1 -2795,Ys Origin - 0100F90010882000,0100F90010882000,status-playable;nvdec,playable,2024-04-17 5:07:33,2 -2796,Kirby Fighters 2 - 0100227010460000,0100227010460000,ldn-works;online;status-playable,playable,2021-06-17 13:06:39,2 -2798,JUMP FORCE Deluxe Edition - 0100183010F12000,0100183010F12000,status-playable;nvdec;online-broken;UE4,playable,2023-10-01 15:56:05,10 -2799,The Survivalists,,status-playable,playable,2020-10-27 15:51:13,1 -2800,"Season Match Full Bundle - Parts 1, 2 and 3",,status-playable,playable,2020-10-27 16:15:22,1 -2801,Moai VI: Unexpected Guests,,slow;status-playable,playable,2020-10-27 16:40:20,1 -2802,Agatha Christie - The ABC Murders,,status-playable,playable,2020-10-27 17:08:23,1 -2803,Remothered: Broken Porcelain - 0100FBD00F5F6000,0100FBD00F5F6000,UE4;gpu;nvdec;status-ingame,ingame,2021-06-17 15:13:11,2 -2804,Need For Speed Hot Pursuit Remastered,,audio;online;slow;status-ingame,ingame,2020-10-27 17:46:58,1 -2805,WarriOrb - 010032700EAC4000,010032700EAC4000,UE4;status-playable,playable,2021-06-17 15:45:14,2 -2806,Townsmen - A Kingdom Rebuilt - 010049E00BA34000,010049E00BA34000,status-playable;nvdec,playable,2022-10-14 22:48:59,3 -2807,Oceanhorn 2 Knights of the Lost Realm - 01006CB010840000,01006CB010840000,status-playable,playable,2021-05-21 18:26:10,6 -2808,No More Heroes 2 Desperate Struggle - 010071400F204000,010071400F204000,32-bit;status-playable;nvdec,playable,2022-11-19 1:38:13,4 -2809,No More Heroes - 0100F0400F202000,0100F0400F202000,32-bit;status-playable,playable,2022-09-13 7:44:27,6 -2810,Rusty Spount Rescue Adventure,,,,2020-10-29 17:06:42,1 -2811,Pixel Puzzle Makeout League - 010000E00E612000,010000E00E612000,status-playable,playable,2022-10-13 12:34:00,3 -2812,Futari de! Nyanko Daisensou - 01003C300B274000,01003C300B274000,status-playable,playable,2024-01-05 22:26:52,2 -2814,MAD RAT DEAD,,,,2020-10-31 13:30:24,1 -2815,The Language of Love,,Needs Update;crash;status-nothing,nothing,2020-12-03 17:54:00,3 -2816,Torn Tales - Rebound Edition,,status-playable,playable,2020-11-01 14:11:59,1 -2817,Spaceland,,status-playable,playable,2020-11-01 14:31:56,1 -2818,HARDCORE MECHA,,slow;status-playable,playable,2020-11-01 15:06:33,1 -2819,Barbearian - 0100F7E01308C000,0100F7E01308C000,Needs Update;gpu;status-ingame,ingame,2021-06-28 16:27:50,2 -2821,INSTANT Chef Party,,,,2020-11-01 23:15:58,1 -2822,Pikmin 3 Deluxe - 0100F4C009322000,0100F4C009322000,gpu;status-ingame;32-bit;nvdec;Needs Update,ingame,2024-09-03 0:28:26,22 -2823,Cobra Kai The Karate Kid Saga Continues - 01005790110F0000,01005790110F0000,status-playable,playable,2021-06-17 15:59:13,2 -2824,Seven Knights -Time Wanderer- - 010018400C24E000,010018400C24E000,status-playable;vulkan-backend-bug,playable,2022-10-13 22:08:54,3 -2825,Kangokuto Mary Skelter Finale,,audio;crash;status-ingame,ingame,2021-01-09 22:39:28,2 -2826,Shadowverse Champions Battle - 01002A800C064000,01002A800C064000,status-playable,playable,2022-10-02 22:59:29,5 -2827,Bakugan Champions of Vestroia,,status-playable,playable,2020-11-06 19:07:39,2 -2828,Jurassic World Evolution Complete Edition - 010050A011344000,010050A011344000,cpu;status-menus;crash,menus,2023-08-04 18:06:54,6 -2829,KAMEN RIDER memory of heroez / Premium Sound Edition - 0100A9801180E000,0100A9801180E000,status-playable,playable,2022-12-06 3:14:26,4 -2830,Shin Megami Tensei III NOCTURNE HD REMASTER - 010045800ED1E000,010045800ED1E000,gpu;status-ingame;Needs Update,ingame,2022-11-03 19:57:01,6 -2832,FUSER - 0100E1F013674000,0100E1F013674000,status-playable;nvdec;UE4,playable,2022-10-17 20:58:32,4 -2833,Mad Father,,status-playable,playable,2020-11-12 13:22:10,1 -2834,Café Enchanté,,status-playable,playable,2020-11-13 14:54:25,1 -2835,JUST DANCE 2021,,,,2020-11-14 6:22:04,1 -2836,Medarot Classics Plus Kuwagata Ver,,status-playable,playable,2020-11-21 11:30:40,3 -2837,Medarot Classics Plus Kabuto Ver,,status-playable,playable,2020-11-21 11:31:18,3 -2838,Forest Guardian,,,,2020-11-14 17:00:13,1 -2840,Fantasy Tavern Sextet -Vol.1 New World Days- - 01000E2012F6E000,01000E2012F6E000,gpu;status-ingame;crash;Needs Update,ingame,2022-12-05 16:48:00,2 -2841,Ary and the Secret of Seasons - 0100C2500CAB6000,0100C2500CAB6000,status-playable,playable,2022-10-07 20:45:09,2 -2842,Dark Quest 2,,status-playable,playable,2020-11-16 21:34:52,1 -2843,Cooking Tycoons 2: 3 in 1 Bundle,,status-playable,playable,2020-11-16 22:19:33,1 -2844,Cooking Tycoons: 3 in 1 Bundle,,status-playable,playable,2020-11-16 22:44:26,1 -2845,Agent A: A puzzle in disguise,,status-playable,playable,2020-11-16 22:53:27,1 -2846,ROBOTICS;NOTES DaSH,,status-playable,playable,2020-11-16 23:09:54,1 -2847,Hunting Simulator 2 - 010061F010C3A000,010061F010C3A000,status-playable;UE4,playable,2022-10-10 14:25:51,3 -2848,9 Monkeys of Shaolin,,UE4;gpu;slow;status-ingame,ingame,2020-11-17 11:58:43,1 -2849,Tin & Kuna,,status-playable,playable,2020-11-17 12:16:12,1 -2850,Seers Isle,,status-playable,playable,2020-11-17 12:28:50,1 -2851,Royal Roads,,status-playable,playable,2020-11-17 12:54:38,1 -2852,Rimelands - 01006AC00EE6E000,01006AC00EE6E000,status-playable,playable,2022-10-13 13:32:56,2 -2853,Mekorama - 0100B360068B2000,0100B360068B2000,gpu;status-boots,boots,2021-06-17 16:37:21,2 -2854,Need for Speed Hot Pursuit Remastered - 010029B0118E8000,010029B0118E8000,status-playable;online-broken,playable,2024-03-20 21:58:02,14 -2855,Mech Rage,,status-playable,playable,2020-11-18 12:30:16,1 -2856,Modern Tales: Age of Invention - 010004900D772000,010004900D772000,slow;status-playable,playable,2022-10-12 11:20:19,2 -2857,Dead Z Meat - 0100A24011F52000,0100A24011F52000,UE4;services;status-ingame,ingame,2021-04-14 16:50:16,2 -2858,Along the Edge,,status-playable,playable,2020-11-18 15:00:07,1 -2859,Country Tales - 0100C1E012A42000,0100C1E012A42000,status-playable,playable,2021-06-17 16:45:39,2 -2860,Ghost Sweeper - 01004B301108C000,01004B301108C000,status-playable,playable,2022-10-10 12:45:36,3 -2862,Hyrule Warriors: Age of Calamity - 01002B00111A2000,01002B00111A2000,gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 0:47:00,39 -2864,Path of Sin: Greed - 01001E500EA16000,01001E500EA16000,status-menus;crash,menus,2021-11-24 8:00:00,3 -2865,Hoggy 2 - 0100F7300ED2C000,0100F7300ED2C000,status-playable,playable,2022-10-10 13:53:35,3 -2866,Queen's Quest 4: Sacred Truce - 0100DCF00F13A000,0100DCF00F13A000,status-playable;nvdec,playable,2022-10-13 12:59:21,3 -2867,ROBOTICS;NOTES ELITE,,status-playable,playable,2020-11-26 10:28:20,1 -2868,Taiko no Tatsujin Rhythmic Adventure Pack,,status-playable,playable,2020-12-03 7:28:26,2 -2869,Pinstripe,,status-playable,playable,2020-11-26 10:40:40,1 -2870,Torchlight III - 010075400DDB8000,010075400DDB8000,status-playable;nvdec;online-broken;UE4,playable,2022-10-14 22:20:17,2 -2871,Ben 10: Power Trip - 01009CD00E3AA000,01009CD00E3AA000,status-playable;nvdec,playable,2022-10-09 10:52:12,2 -2872,Zoids Wild Infinity Blast,,,,2020-11-26 16:15:37,1 -2873,Picross S5 - 0100AC30133EC000,0100AC30133EC000,status-playable,playable,2022-10-17 18:51:42,5 -2874,Worm Jazz - 01009CD012CC0000,01009CD012CC0000,gpu;services;status-ingame;UE4;regression,ingame,2021-11-10 10:33:04,4 -2875,TTV2,,status-playable,playable,2020-11-27 13:21:36,1 -2876,Deadly Days,,status-playable,playable,2020-11-27 13:38:55,1 -2877,Pumpkin Jack - 01006C10131F6000,01006C10131F6000,status-playable;nvdec;UE4,playable,2022-10-13 12:52:32,3 -2878,Active Neurons 2 - 01000D1011EF0000,01000D1011EF0000,status-playable,playable,2022-10-07 16:21:42,2 -2879,Niche - a genetics survival game,,nvdec;status-playable,playable,2020-11-27 14:01:11,1 -2880,Monstrum - 010039F00EF70000,010039F00EF70000,status-playable,playable,2021-01-31 11:07:26,3 -2881,TRANSFORMERS: BATTLEGROUNDS - 01005E500E528000,01005E500E528000,online;status-playable,playable,2021-06-17 18:08:19,2 -2882,UBERMOSH:SANTICIDE,,status-playable,playable,2020-11-27 15:05:01,1 -2884,SPACE ELITE FORCE,,status-playable,playable,2020-11-27 15:21:05,1 -2885,Oddworld: New 'n' Tasty - 01005E700ABB8000,01005E700ABB8000,nvdec;status-playable,playable,2021-06-17 17:51:32,2 -2886,Immortal Realms: Vampire Wars - 010079501025C000,010079501025C000,nvdec;status-playable,playable,2021-06-17 17:41:46,2 -2887,Horace - 010086D011EB8000,010086D011EB8000,status-playable,playable,2022-10-10 14:03:50,3 -2888,Maid of Sker : Upscale Resolution not working,,,,2020-11-29 15:36:42,3 -2889,Professor Rubik's Brain Fitness,,,,2020-11-30 11:22:45,1 -2890,QV ( キュビ ),,,,2020-11-30 11:22:49,1 -2892,Double Pug Switch - 0100A5D00C7C0000,0100A5D00C7C0000,status-playable;nvdec,playable,2022-10-10 10:59:35,2 -2893,Trollhunters: Defenders of Arcadia,,gpu;nvdec;status-ingame,ingame,2020-11-30 13:27:09,1 -2894,Outbreak: Epidemic - 0100C850130FE000,0100C850130FE000,status-playable,playable,2022-10-13 10:27:31,2 -2895,Blackjack Hands,,status-playable,playable,2020-11-30 14:04:51,1 -2896,Piofiore: Fated Memories,,nvdec;status-playable,playable,2020-11-30 14:27:50,1 -2897,Task Force Kampas,,status-playable,playable,2020-11-30 14:44:15,1 -2898,Nexomon: Extinction,,status-playable,playable,2020-11-30 15:02:22,1 -2899,realMyst: Masterpiece Edition,,nvdec;status-playable,playable,2020-11-30 15:25:42,1 -2900,Neighbours back From Hell - 010065F00F55A000,010065F00F55A000,status-playable;nvdec,playable,2022-10-12 15:36:48,2 -2901,Sakai and... - 01007F000EB36000,01007F000EB36000,status-playable;nvdec,playable,2022-12-15 13:53:19,18 -2902,Supraland - 0100A6E01201C000,0100A6E01201C000,status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 9:49:11,2 -2903,Ministry of Broadcast - 010069200EB80000,010069200EB80000,status-playable,playable,2022-08-10 0:31:16,3 -2904,Inertial Drift - 01002BD00F626000,01002BD00F626000,status-playable;online-broken,playable,2022-10-11 12:22:19,2 -2905,SuperEpic: The Entertainment War - 0100630010252000,0100630010252000,status-playable,playable,2022-10-13 23:02:48,2 -2906,HARDCORE Maze Cube,,status-playable,playable,2020-12-04 20:01:24,1 -2907,Firework,,status-playable,playable,2020-12-04 20:20:09,1 -2908,GORSD,,status-playable,playable,2020-12-04 22:15:21,1 -2909,Georifters,,UE4;crash;nvdec;status-menus,menus,2020-12-04 22:30:50,1 -2910,Giraffe and Annika,,UE4;crash;status-ingame,ingame,2020-12-04 22:41:57,1 -2911,Doodle Derby,,status-boots,boots,2020-12-04 22:51:48,1 -2912,"Good Pizza, Great Pizza",,status-playable,playable,2020-12-04 22:59:18,1 -2913,HyperBrawl Tournament,,crash;services;status-boots,boots,2020-12-04 23:03:27,1 -2914,Dustoff Z,,status-playable,playable,2020-12-04 23:22:29,1 -2915,Embracelet,,status-playable,playable,2020-12-04 23:45:00,1 -2916,"Cook, Serve, Delicious! 3?! - 0100B82010B6C000",0100B82010B6C000,status-playable,playable,2022-10-09 12:09:34,2 -2917,CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS - 0100EAE010560000,0100EAE010560000,status-playable;online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50,2 -2918,Yomi wo Saku Hana,,,,2020-12-05 7:14:40,1 -2921,Immortals Fenyx Rising - 01004A600EC0A000,01004A600EC0A000,gpu;status-menus;crash,menus,2023-02-24 16:19:55,11 -2923,Supermarket Shriek - 0100C01012654000,0100C01012654000,status-playable,playable,2022-10-13 23:19:20,2 -2924,Absolute Drift,,status-playable,playable,2020-12-10 14:02:44,1 -2925,CASE 2: Animatronics Survival - 0100C4C0132F8000,0100C4C0132F8000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03,2 -2926,BIG-Bobby-Car - The Big Race,,slow;status-playable,playable,2020-12-10 14:25:06,1 -2927,Asterix & Obelix XXL: Romastered - 0100F46011B50000,0100F46011B50000,gpu;status-ingame;nvdec;opengl,ingame,2023-08-16 21:22:06,3 -2928,Chicken Police - Paint it RED!,,nvdec;status-playable,playable,2020-12-10 15:10:11,1 -2929,Descenders,,gpu;status-ingame,ingame,2020-12-10 15:22:36,1 -2930,Outbreak: The Nightmare Chronicles - 01006EE013100000,01006EE013100000,status-playable,playable,2022-10-13 10:41:57,2 -2931,#Funtime,,status-playable,playable,2020-12-10 16:54:35,1 -2932,My Little Dog Adventure,,gpu;status-ingame,ingame,2020-12-10 17:47:37,1 -2933,n Verlore Verstand,,slow;status-ingame,ingame,2020-12-10 18:00:28,1 -2934,Oneiros - 0100463013246000,0100463013246000,status-playable,playable,2022-10-13 10:17:22,2 -2935,#KillAllZombies,,slow;status-playable,playable,2020-12-16 1:50:25,7 -2936,Connection Haunted,,slow;status-playable,playable,2020-12-10 18:57:14,1 -2938,Goosebumps Dead of Night,,gpu;nvdec;status-ingame,ingame,2020-12-10 20:02:16,1 -2939,"#Halloween, Super Puzzles Dream",,nvdec;status-playable,playable,2020-12-10 20:43:58,1 -2940,The Long Return,,slow;status-playable,playable,2020-12-10 21:05:10,1 -2941,The Bluecoats: North & South,,nvdec;status-playable,playable,2020-12-10 21:22:29,1 -2942,Puyo Puyo Tetris 2 - 010038E011940000,010038E011940000,status-playable;ldn-untested,playable,2023-09-26 11:35:25,8 -2943,Yuppie Psycho: Executive Edition,,crash;status-ingame,ingame,2020-12-11 10:37:06,1 -2945,Root Double -Before Crime * After Days- Xtend Edition - 0100936011556000,0100936011556000,status-nothing;crash,nothing,2022-02-05 2:03:49,2 -2946,Hidden Folks,,,,2020-12-11 11:48:16,1 -2947,KINGDOM HEARTS Melody of Memory,,crash;nvdec;status-ingame,ingame,2021-03-03 17:34:12,2 -2948,Unhatched,,status-playable,playable,2020-12-11 12:11:09,1 -2949,Tropico 6 - 0100FBE0113CC000,0100FBE0113CC000,status-playable;nvdec;UE4,playable,2022-10-14 23:21:03,2 -2950,Star Renegades,,nvdec;status-playable,playable,2020-12-11 12:19:23,1 -2951,Alpaca Ball: Allstars,,nvdec;status-playable,playable,2020-12-11 12:26:29,1 -2952,Nordlicht,,,,2020-12-11 12:37:12,1 -2953,Sakuna: Of Rice and Ruin - 0100B1400E8FE000,0100B1400E8FE000,status-playable,playable,2023-07-24 13:47:13,2 -2954,Re:Turn - One Way Trip - 0100F03011616000,0100F03011616000,status-playable,playable,2022-08-29 22:42:53,3 -2955,L.O.L. Surprise! Remix: We Rule the World - 0100F2B0123AE000,0100F2B0123AE000,status-playable,playable,2022-10-11 22:48:03,4 -2956,They Bleed Pixels - 01001C2010D08000,01001C2010D08000,gpu;status-ingame,ingame,2024-08-09 5:52:18,3 -2957,If Found...,,status-playable,playable,2020-12-11 13:43:14,1 -2958,Gibbous - A Cthulhu Adventure - 0100D95012C0A000,0100D95012C0A000,status-playable;nvdec,playable,2022-10-10 12:57:17,2 -2959,Duck Life Adventure - 01005BC012C66000,01005BC012C66000,status-playable,playable,2022-10-10 11:27:03,2 -2960,Sniper Elite 4 - 010007B010FCC000,010007B010FCC000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15,4 -2961,Serious Sam Collection - 010007D00D43A000,010007D00D43A000,status-boots;vulkan-backend-bug,boots,2022-10-13 13:53:34,3 -2962,Slide Stars - 010010D011E1C000,010010D011E1C000,status-menus;crash,menus,2021-11-25 8:53:43,3 -2963,Tank Mechanic Simulator,,status-playable,playable,2020-12-11 15:10:45,1 -2964,Five Dates,,nvdec;status-playable,playable,2020-12-11 15:17:11,1 -2965,MagiCat,,status-playable,playable,2020-12-11 15:22:07,1 -2966,Family Feud 2021 - 010060200FC44000,010060200FC44000,status-playable;online-broken,playable,2022-10-10 11:42:21,3 -2967,LUNA The Shadow Dust,,,,2020-12-11 15:26:55,1 -2968,Paw Patrol: Might Pups Save Adventure Bay! - 01001F201121E000,01001F201121E000,status-playable,playable,2022-10-13 12:17:55,2 -2969,30-in-1 Game Collection - 010056D00E234000,010056D00E234000,status-playable;online-broken,playable,2022-10-15 17:47:09,2 -2970,Truck Driver - 0100CB50107BA000,0100CB50107BA000,status-playable;online-broken,playable,2022-10-20 17:42:33,2 -2971,Bridge Constructor: The Walking Dead,,gpu;slow;status-ingame,ingame,2020-12-11 17:31:32,1 -2972,Speed 3: Grand Prix - 0100F18010BA0000,0100F18010BA0000,status-playable;UE4,playable,2022-10-20 12:32:31,2 -2973,Wonder Blade,,status-playable,playable,2020-12-11 17:55:31,1 -2974,Super Blood Hockey,,status-playable,playable,2020-12-11 20:01:41,1 -2975,Who Wants to Be a Millionaire?,,crash;status-nothing,nothing,2020-12-11 20:22:42,1 -2976,My Aunt is a Witch - 01002C6012334000,01002C6012334000,status-playable,playable,2022-10-19 9:21:17,2 -2977,Flatland: Prologue,,status-playable,playable,2020-12-11 20:41:12,1 -2978,Fantasy Friends - 010017C012726000,010017C012726000,status-playable,playable,2022-10-17 19:42:39,2 -2979,MO:Astray,,crash;status-ingame,ingame,2020-12-11 21:45:44,1 -2980,Wartile Complete Edition,,UE4;crash;gpu;status-menus,menus,2020-12-11 21:56:10,1 -2981,Super Punch Patrol - 01001F90122B2000,01001F90122B2000,status-playable,playable,2024-07-12 19:49:02,2 -2982,Chronos,,UE4;gpu;nvdec;status-ingame,ingame,2020-12-11 22:16:35,1 -2983,Going Under,,deadlock;nvdec;status-ingame,ingame,2020-12-11 22:29:46,1 -2984,Castle Crashers Remastered - 010001300D14A000,010001300D14A000,gpu;status-boots,boots,2024-08-10 9:21:20,12 -2985,Morbid: The Seven Acolytes - 010040E00F642000,010040E00F642000,status-playable,playable,2022-08-09 17:21:58,3 -2986,Elrador Creatures,,slow;status-playable,playable,2020-12-12 12:35:35,1 -2987,Sam & Max Save the World,,status-playable,playable,2020-12-12 13:11:51,1 -2988,Quiplash 2 InterLASHional - 0100AF100EE76000,0100AF100EE76000,status-playable;online-working,playable,2022-10-19 17:43:45,4 -2989,Monster Truck Championship - 0100D30010C42000,0100D30010C42000,slow;status-playable;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51,2 -2990,Liberated: Enhanced Edition - 01003A90133A6000,01003A90133A6000,gpu;status-ingame;nvdec,ingame,2024-07-04 4:48:48,2 -2991,Empire of Sin,,nvdec,,2020-12-12 13:48:05,1 -2992,Girabox,,status-playable,playable,2020-12-12 13:55:05,1 -2993,Shiren the Wanderer: The Tower of Fortune and the Dice of Fate - 01007430122D0000,01007430122D0000,status-playable;nvdec,playable,2022-10-20 11:44:36,2 -2994,2048 Battles,,status-playable,playable,2020-12-12 14:21:25,1 -2995,Reaper: Tale of a Pale Swordsman,,status-playable,playable,2020-12-12 15:12:23,1 -2996,Demong Hunter,,status-playable,playable,2020-12-12 15:27:08,1 -2997,Rise and Shine,,status-playable,playable,2020-12-12 15:56:43,1 -2998,12 Labours of Hercules II: The Cretan Bull - 0100B1A010014000,0100B1A010014000,cpu;status-nothing;32-bit;crash,nothing,2022-12-07 13:43:10,3 -2999,"#womenUp, Super Puzzles Dream",,status-playable,playable,2020-12-12 16:57:25,1 -3000,"#NoLimitFantasy, Super Puzzles Dream",,nvdec;status-playable,playable,2020-12-12 17:21:32,1 -3001,2urvive - 01007550131EE000,01007550131EE000,status-playable,playable,2022-11-17 13:49:37,3 -3002,2weistein – The Curse of the Red Dragon - 0100E20012886000,0100E20012886000,status-playable;nvdec;UE4,playable,2022-11-18 14:47:07,4 -3003,64,,status-playable,playable,2020-12-12 21:31:58,1 -3004,4x4 Dirt Track,,status-playable,playable,2020-12-12 21:41:42,1 -3005,Aeolis Tournament,,online;status-playable,playable,2020-12-12 22:02:14,1 -3006,Adventures of Pip,,nvdec;status-playable,playable,2020-12-12 22:11:55,1 -3007,9th Dawn III,,status-playable,playable,2020-12-12 22:27:27,1 -3008,Ailment,,status-playable,playable,2020-12-12 22:30:41,1 -3009,Adrenaline Rush - Miami Drive,,status-playable,playable,2020-12-12 22:49:50,1 -3010,Adventures of Chris,,status-playable,playable,2020-12-12 23:00:02,1 -3011,Akuarium,,slow;status-playable,playable,2020-12-12 23:43:36,1 -3012,Alchemist's Castle,,status-playable,playable,2020-12-12 23:54:08,1 -3013,Angry Video Game Nerd I & II Deluxe,,crash;status-ingame,ingame,2020-12-12 23:59:54,1 -3015,SENTRY,,status-playable,playable,2020-12-13 12:00:24,1 -3016,Squeakers,,status-playable,playable,2020-12-13 12:13:05,1 -3017,ALPHA,,status-playable,playable,2020-12-13 12:17:45,1 -3018,Shoot 1UP DX,,status-playable,playable,2020-12-13 12:32:47,1 -3019,Animal Hunter Z,,status-playable,playable,2020-12-13 12:50:35,1 -3020,Star99 - 0100E6B0115FC000,0100E6B0115FC000,status-menus;online,menus,2021-11-26 14:18:51,2 -3021,Alwa's Legacy,,status-playable,playable,2020-12-13 13:00:57,1 -3022,TERROR SQUID - 010070C00FB56000,010070C00FB56000,status-playable;online-broken,playable,2023-10-30 22:29:29,2 -3023,Animal Fight Club,,gpu;status-ingame,ingame,2020-12-13 13:13:33,1 -3024,"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban! - 010093100DA04000",010093100DA04000,gpu;status-ingame,ingame,2023-09-22 10:21:46,3 -3025,Dokapon UP! Dreamy Roulette,,,,2020-12-13 14:53:27,1 -3026,ANIMUS,,status-playable,playable,2020-12-13 15:11:47,1 -3027,Pretty Princess Party - 01007F00128CC000,01007F00128CC000,status-playable,playable,2022-10-19 17:23:58,2 -3028,John Wick Hex - 01007090104EC000,01007090104EC000,status-playable,playable,2022-08-07 8:29:12,3 -3029,Animal Up,,status-playable,playable,2020-12-13 15:39:02,1 -3030,Derby Stallion,,,,2020-12-13 15:47:01,1 -3031,Ankh Guardian - Treasure of the Demon's Temple,,status-playable,playable,2020-12-13 15:55:49,1 -3032,Police X Heroine Lovepatrina! Love na Rhythm de Taihoshimasu!,,,,2020-12-13 16:12:56,1 -3033,Klondike Solitaire,,status-playable,playable,2020-12-13 16:17:27,1 -3034,Apocryph,,gpu;status-ingame,ingame,2020-12-13 23:24:10,1 -3035,Apparition,,nvdec;slow;status-ingame,ingame,2020-12-13 23:57:04,1 -3036,Tiny Gladiators,,status-playable,playable,2020-12-14 0:09:43,1 -3037,Aperion Cyberstorm,,status-playable,playable,2020-12-14 0:40:16,1 -3038,Cthulhu Saves Christmas,,status-playable,playable,2020-12-14 0:58:55,1 -3039,Kagamihara/Justice - 0100D58012FC2000,0100D58012FC2000,crash;status-nothing,nothing,2021-06-21 16:41:29,3 -3040,Greedroid,,status-playable,playable,2020-12-14 11:14:32,1 -3041,Aqua Lungers,,crash;status-ingame,ingame,2020-12-14 11:25:57,1 -3042,Atomic Heist - 01005FE00EC4E000,01005FE00EC4E000,status-playable,playable,2022-10-16 21:24:32,2 -3043,Nexoria: Dungeon Rogue Heroes - 0100B69012EC6000,0100B69012EC6000,gpu;status-ingame,ingame,2021-10-04 18:41:29,2 -3044,Armed 7 DX,,status-playable,playable,2020-12-14 11:49:56,1 -3045,Ord.,,status-playable,playable,2020-12-14 11:59:06,1 -3046,Commandos 2 HD Remaster - 010065A01158E000,010065A01158E000,gpu;status-ingame;nvdec,ingame,2022-08-10 21:52:27,2 -3047,Atomicrops - 0100AD30095A4000,0100AD30095A4000,status-playable,playable,2022-08-06 10:05:07,3 -3048,Rabi-Ribi - 01005BF00E4DE000,01005BF00E4DE000,status-playable,playable,2022-08-06 17:02:44,3 -3049,Assault Chainguns KM,,crash;gpu;status-ingame,ingame,2020-12-14 12:48:34,1 -3050,Attack of the Toy Tanks,,slow;status-ingame,ingame,2020-12-14 12:59:12,1 -3051,AstroWings SpaceWar,,status-playable,playable,2020-12-14 13:10:44,1 -3052,ATOMIK RunGunJumpGun,,status-playable,playable,2020-12-14 13:19:24,1 -3053,Arrest of a stone Buddha - 0100184011B32000,0100184011B32000,status-nothing;crash,nothing,2022-12-07 16:55:00,4 -3054,Midnight Evil - 0100A1200F20C000,0100A1200F20C000,status-playable,playable,2022-10-18 22:55:19,2 -3055,Awakening of Cthulhu - 0100085012D64000,0100085012D64000,UE4;status-playable,playable,2021-04-26 13:03:07,2 -3056,Axes - 0100DA3011174000,0100DA3011174000,status-playable,playable,2021-04-08 13:01:58,3 -3057,ASSAULT GUNNERS HD Edition,,,,2020-12-14 14:47:09,1 -3058,Shady Part of Me - 0100820013612000,0100820013612000,status-playable,playable,2022-10-20 11:31:55,3 -3059,A Frog Game,,status-playable,playable,2020-12-14 16:09:53,1 -3060,A Dark Room,,gpu;status-ingame,ingame,2020-12-14 16:14:28,1 -3061,A Sound Plan,,crash;status-boots,boots,2020-12-14 16:46:21,1 -3062,Actual Sunlight,,gpu;status-ingame,ingame,2020-12-14 17:18:41,1 -3063,Acthung! Cthulhu Tactics,,status-playable,playable,2020-12-14 18:40:27,1 -3064,ATOMINE,,gpu;nvdec;slow;status-playable,playable,2020-12-14 18:56:50,1 -3065,Adventure Llama,,status-playable,playable,2020-12-14 19:32:24,1 -3066,Minoria - 0100FAE010864000,0100FAE010864000,status-playable,playable,2022-08-06 18:50:50,3 -3067,Adventure Pinball Bundle,,slow;status-playable,playable,2020-12-14 20:31:53,1 -3068,Aery - Broken Memories - 0100087012810000,0100087012810000,status-playable,playable,2022-10-04 13:11:52,2 -3069,Fobia,,status-playable,playable,2020-12-14 21:05:23,1 -3070,Alchemic Jousts - 0100F5400AB6C000,0100F5400AB6C000,gpu;status-ingame,ingame,2022-12-08 15:06:28,2 -3071,Akash Path of the Five,,gpu;nvdec;status-ingame,ingame,2020-12-14 22:33:12,1 -3072,Witcheye,,status-playable,playable,2020-12-14 22:56:08,1 -3073,Zombie Driver,,nvdec;status-playable,playable,2020-12-14 23:15:10,1 -3074,Keen: One Girl Army,,status-playable,playable,2020-12-14 23:19:52,1 -3075,AFL Evolution 2 - 01001B400D334000,01001B400D334000,slow;status-playable;online-broken;UE4,playable,2022-12-07 12:45:56,2 -3076,Elden: Path of the Forgotten,,status-playable,playable,2020-12-15 0:33:19,1 -3077,Desire remaster ver.,,crash;status-boots,boots,2021-01-17 2:34:37,4 -3078,Alluris - 0100AC501122A000,0100AC501122A000,gpu;status-ingame;UE4,ingame,2023-08-02 23:13:50,2 -3079,Almightree the Last Dreamer,,slow;status-playable,playable,2020-12-15 13:59:03,1 -3080,Windscape - 010059900BA3C000,010059900BA3C000,status-playable,playable,2022-10-21 11:49:42,2 -3082,Warp Shift,,nvdec;status-playable,playable,2020-12-15 14:48:48,1 -3083,Alphaset by POWGI,,status-playable,playable,2020-12-15 15:15:15,1 -3084,Storm Boy - 010040D00BCF4000,010040D00BCF4000,status-playable,playable,2022-10-20 14:15:06,2 -3085,Fire & Water,,status-playable,playable,2020-12-15 15:43:20,1 -3086,Animated Jigsaws Collection,,nvdec;status-playable,playable,2020-12-15 15:58:34,1 -3087,More Dark,,status-playable,playable,2020-12-15 16:01:06,1 -3088,Clea,,crash;status-ingame,ingame,2020-12-15 16:22:56,1 -3089,Animal Fun for Toddlers and Kids,,services;status-boots,boots,2020-12-15 16:45:29,1 -3090,Brick Breaker,,crash;status-ingame,ingame,2020-12-15 17:03:59,1 -3091,Anode,,status-playable,playable,2020-12-15 17:18:58,1 -3092,Animal Pairs - Matching & Concentration Game for Toddlers & Kids - 010033C0121DC000,010033C0121DC000,services;status-boots,boots,2021-11-29 23:43:14,2 -3093,Animals for Toddlers,,services;status-boots,boots,2020-12-15 17:27:27,1 -3094,Stellar Interface - 01005A700C954000,01005A700C954000,status-playable,playable,2022-10-20 13:44:33,2 -3095,Anime Studio Story,,status-playable,playable,2020-12-15 18:14:05,1 -3096,Brick Breaker,,nvdec;online;status-playable,playable,2020-12-15 18:26:23,1 -3097,Anti-Hero Bundle - 0100596011E20000,0100596011E20000,status-playable;nvdec,playable,2022-10-21 20:10:30,2 -3098,Alt-Frequencies,,status-playable,playable,2020-12-15 19:01:33,1 -3099,Tanuki Justice - 01007A601318C000,01007A601318C000,status-playable;opengl,playable,2023-02-21 18:28:10,5 -3100,Norman's Great Illusion,,status-playable,playable,2020-12-15 19:28:24,1 -3101,Welcome to Primrose Lake - 0100D7F010B94000,0100D7F010B94000,status-playable,playable,2022-10-21 11:30:57,2 -3102,Dream,,status-playable,playable,2020-12-15 19:55:07,1 -3103,Lofi Ping Pong,,crash;status-ingame,ingame,2020-12-15 20:09:22,1 -3104,Antventor,,nvdec;status-playable,playable,2020-12-15 20:09:27,1 -3105,Space Pioneer - 010047B010260000,010047B010260000,status-playable,playable,2022-10-20 12:24:37,2 -3106,Death and Taxes,,status-playable,playable,2020-12-15 20:27:49,1 -3107,Deleveled,,slow;status-playable,playable,2020-12-15 21:02:29,1 -3108,Jenny LeClue - Detectivu,,crash;status-nothing,nothing,2020-12-15 21:07:07,1 -3109,Biz Builder Delux,,slow;status-playable,playable,2020-12-15 21:36:25,1 -3110,Creepy Tale,,status-playable,playable,2020-12-15 21:58:03,1 -3111,Among Us - 0100B0C013912000,0100B0C013912000,status-menus;online;ldn-broken,menus,2021-09-22 15:20:17,12 -3112,Spinch - 010076D0122A8000,010076D0122A8000,status-playable,playable,2024-07-12 19:02:10,2 -3113,Carto - 0100810012A1A000,0100810012A1A000,status-playable,playable,2022-09-04 15:37:06,2 -3114,Laraan,,status-playable,playable,2020-12-16 12:45:48,1 -3116,Spider Solitaire,,status-playable,playable,2020-12-16 16:19:30,1 -3117,Sin Slayers - 01006FE010438000,01006FE010438000,status-playable,playable,2022-10-20 11:53:52,2 -3118,AO Tennis 2 - 010047000E9AA000,010047000E9AA000,status-playable;online-broken,playable,2022-09-17 12:05:07,2 -3119,Area 86,,status-playable,playable,2020-12-16 16:45:52,1 -3120,Art Sqool - 01006AA013086000,01006AA013086000,status-playable;nvdec,playable,2022-10-16 20:42:37,2 -3121,Utopia 9 - A Volatile Vacation,,nvdec;status-playable,playable,2020-12-16 17:06:42,1 -3122,Arrog,,status-playable,playable,2020-12-16 17:20:50,1 -3123,Warlocks 2: God Slayers,,status-playable,playable,2020-12-16 17:36:50,1 -3124,Artifact Adventure Gaiden DX,,status-playable,playable,2020-12-16 17:49:25,1 -3125,Asemblance,,UE4;gpu;status-ingame,ingame,2020-12-16 18:01:23,1 -3126,Death Tales,,status-playable,playable,2020-12-17 10:55:52,2 -3127,Asphalt 9: Legends - 01007B000C834000,01007B000C834000,services;status-menus;crash;online-broken,menus,2022-12-07 13:28:29,4 -3128,Barbarous! Tavern of Emyr - 01003350102E2000,01003350102E2000,status-playable,playable,2022-10-16 21:50:24,2 -3129,Baila Latino - 010076B011EC8000,010076B011EC8000,status-playable,playable,2021-04-14 16:40:24,2 -3130,Unit 4,,status-playable,playable,2020-12-16 18:54:13,1 -3131,Ponpu,,status-playable,playable,2020-12-16 19:09:34,1 -3132,ATOM RPG - 0100B9400FA38000,0100B9400FA38000,status-playable;nvdec,playable,2022-10-22 10:11:48,2 -3133,Automachef,,status-playable,playable,2020-12-16 19:51:25,1 -3134,Croc's World 2,,status-playable,playable,2020-12-16 20:01:40,1 -3135,Ego Protocol,,nvdec;status-playable,playable,2020-12-16 20:16:35,1 -3136,Azure Reflections - 01006FB00990E000,01006FB00990E000,nvdec;online;status-playable,playable,2021-04-08 13:18:25,3 -3137,Back to Bed,,nvdec;status-playable,playable,2020-12-16 20:52:04,1 -3138,Azurebreak Heroes,,status-playable,playable,2020-12-16 21:26:17,1 -3139,Marooners - 010044600FDF0000,010044600FDF0000,status-playable;nvdec;online-broken,playable,2022-10-18 21:35:26,2 -3140,BaconMan - 0100EAF00E32E000,0100EAF00E32E000,status-menus;crash;nvdec,menus,2021-11-20 2:36:21,2 -3141,Peaky Blinders: Mastermind - 010002100CDCC000,010002100CDCC000,status-playable,playable,2022-10-19 16:56:35,2 -3142,Crash Drive 2,,online;status-playable,playable,2020-12-17 2:45:46,1 -3143,Blood will be Spilled,,nvdec;status-playable,playable,2020-12-17 3:02:03,1 -3144,Nefarious,,status-playable,playable,2020-12-17 3:20:33,1 -3145,Blacksea Odyssey - 01006B400C178000,01006B400C178000,status-playable;nvdec,playable,2022-10-16 22:14:34,2 -3146,Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive,,status-playable,playable,2020-12-17 11:22:50,1 -3147,Life of Boris: Super Slav,,status-ingame,ingame,2020-12-17 11:40:05,1 -3148,Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo,,nvdec;status-playable,playable,2020-12-17 11:43:10,1 -3149,Baron: Fur Is Gonna Fly - 010039C0106C6000,010039C0106C6000,status-boots;crash,boots,2022-02-06 2:05:43,3 -3150,Deployment - 01000BF00B6BC000,01000BF00B6BC000,slow;status-playable;online-broken,playable,2022-10-17 16:23:59,2 -3151,PixelJunk Eden 2,,crash;status-ingame,ingame,2020-12-17 11:55:52,1 -3152,Batbarian: Testament of the Primordials,,status-playable,playable,2020-12-17 12:00:59,1 -3153,Abyss of The Sacrifice - 010047F012BE2000,010047F012BE2000,status-playable;nvdec,playable,2022-10-21 13:56:28,2 -3154,Nightmares from the Deep 2: The Siren's Call - 01006E700B702000,01006E700B702000,status-playable;nvdec,playable,2022-10-19 10:58:53,2 -3155,Vera Blanc: Full Moon,,audio;status-playable,playable,2020-12-17 12:09:30,1 -3156,Linelight,,status-playable,playable,2020-12-17 12:18:07,1 -3157,Battle Hunters - 0100A3B011EDE000,0100A3B011EDE000,gpu;status-ingame,ingame,2022-11-12 9:19:17,2 -3159,Day and Night,,status-playable,playable,2020-12-17 12:30:51,1 -3160,Zombie's Cool,,status-playable,playable,2020-12-17 12:41:26,1 -3161,Battle of Kings,,slow;status-playable,playable,2020-12-17 12:45:23,1 -3162,Ghostrunner,,UE4;crash;gpu;nvdec;status-ingame,ingame,2020-12-17 13:01:59,1 -3163,Battleground - 0100650010DD4000,0100650010DD4000,status-ingame;crash,ingame,2021-09-06 11:53:23,2 -3164,Little Racer - 0100E6D00E81C000,0100E6D00E81C000,status-playable,playable,2022-10-18 16:41:13,2 -3165,Battle Planet - Judgement Day,,status-playable,playable,2020-12-17 14:06:20,1 -3166,Dokuro,,nvdec;status-playable,playable,2020-12-17 14:47:09,1 -3167,Reflection of Mine,,audio;status-playable,playable,2020-12-17 15:06:37,1 -3168,Foregone,,deadlock;status-ingame,ingame,2020-12-17 15:26:53,1 -3169,Choices That Matter: And The Sun Went Out,,status-playable,playable,2020-12-17 15:44:08,1 -3170,BATTLLOON,,status-playable,playable,2020-12-17 15:48:23,1 -3171,Grim Legends: The Forsaken Bride - 010009F011F90000,010009F011F90000,status-playable;nvdec,playable,2022-10-18 13:14:06,3 -3172,Glitch's Trip,,status-playable,playable,2020-12-17 16:00:57,1 -3173,Maze,,status-playable,playable,2020-12-17 16:13:58,1 -3174,Bayonetta - 010076F0049A2000,010076F0049A2000,status-playable;audout,playable,2022-11-20 15:51:59,6 -3176,Gnome More War,,status-playable,playable,2020-12-17 16:33:07,1 -3177,Fin and the Ancient Mystery,,nvdec;status-playable,playable,2020-12-17 16:40:39,1 -3178,Nubarron: The adventure of an unlucky gnome,,status-playable,playable,2020-12-17 16:45:17,1 -3179,Survive! Mr. Cube - 010029A00AEB0000,010029A00AEB0000,status-playable,playable,2022-10-20 14:44:47,2 -3180,Saboteur SiO,,slow;status-ingame,ingame,2020-12-17 16:59:49,1 -3181,Flowlines VS,,status-playable,playable,2020-12-17 17:01:53,1 -3182,Beat Me! - 01002D20129FC000,01002D20129FC000,status-playable;online-broken,playable,2022-10-16 21:59:26,2 -3183,YesterMorrow,,crash;status-ingame,ingame,2020-12-17 17:15:25,1 -3184,Drums,,status-playable,playable,2020-12-17 17:21:51,1 -3185,Gnomes Garden: Lost King - 010036C00D0D6000,010036C00D0D6000,deadlock;status-menus,menus,2021-11-18 11:14:03,2 -3186,Edna & Harvey: Harvey's New Eyes - 0100ABE00DB4E000,0100ABE00DB4E000,nvdec;status-playable,playable,2021-01-26 14:36:08,2 -3187,Roarr! - 010068200C5BE000,010068200C5BE000,status-playable,playable,2022-10-19 23:57:45,2 -3188,PHOGS!,,online;status-playable,playable,2021-01-18 15:18:37,2 -3189,Idle Champions of the Forgotten Realms,,online;status-boots,boots,2020-12-17 18:24:57,1 -3190,Polyroll - 010074B00ED32000,010074B00ED32000,gpu;status-boots,boots,2021-07-01 16:16:50,3 -3191,Control Ultimate Edition - Cloud Version - 0100041013360000,0100041013360000,Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:34:06,2 -3192,Wilmot's Warehouse - 010071F00D65A000,010071F00D65A000,audio;gpu;status-ingame,ingame,2021-06-02 17:24:32,3 -3193,Jack N' Jill DX,,,,2020-12-18 2:27:22,1 -3194,Izneo - 0100D8E00C874000,0100D8E00C874000,status-menus;online-broken,menus,2022-08-06 15:56:23,2 -3195,Dicey Dungeons - 0100BBF011394000,0100BBF011394000,gpu;audio;slow;status-ingame,ingame,2023-08-02 20:30:12,2 -3196,Rabbids Adventure Party Demo / 疯狂兔子:奇遇派对 - 试玩版,,,,2020-12-18 5:53:35,1 -3197,Venture Kid - 010095B00DBC8000,010095B00DBC8000,crash;gpu;status-ingame,ingame,2021-04-18 16:33:17,2 -3199,Death Coming - 0100F3B00CF32000,0100F3B00CF32000,status-nothing;crash,nothing,2022-02-06 7:43:03,2 -3200,OlliOlli: Switch Stance - 0100E0200B980000,0100E0200B980000,gpu;status-boots,boots,2024-04-25 8:36:37,3 -3201,Cybxus Heart - 01006B9013672000,01006B9013672000,gpu;slow;status-ingame,ingame,2022-01-15 5:00:49,2 -3202,Gensou Rougoku no Kaleidscope - 0100AC600EB4C000,0100AC600EB4C000,status-menus;crash,menus,2021-11-24 8:45:07,2 -3203,Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy- - 0100454012E32000,0100454012E32000,status-ingame;crash,ingame,2021-08-08 11:56:18,3 -3204,Hulu - 0100A66003384000,0100A66003384000,status-boots;online-broken,boots,2022-12-09 10:05:00,3 -3205,Strife: Veteran Edition - 0100BDE012928000,0100BDE012928000,gpu;status-ingame,ingame,2022-01-15 5:10:42,2 -3209,Peasant Knight,,status-playable,playable,2020-12-22 9:30:50,2 -3210,Double Dragon Neon - 01005B10132B2000,01005B10132B2000,gpu;audio;status-ingame;32-bit,ingame,2022-09-20 18:00:20,2 -3211,Nekopara Vol.4,,crash;status-ingame,ingame,2021-01-17 1:47:18,2 -3212,Super Meat Boy Forever - 01009C200D60E000,01009C200D60E000,gpu;status-boots,boots,2021-04-26 14:25:39,2 -3213,Gems of Magic: Lost Family,,,,2020-12-24 15:33:57,1 -3214,Wagamama High Spec,,,,2020-12-25 9:02:51,1 -3215,BIT.TRIP RUNNER - 0100E62012D3C000,0100E62012D3C000,status-playable,playable,2022-10-17 14:23:24,3 -3216,BIT.TRIP VOID - 01000AD012D3A000,01000AD012D3A000,status-playable,playable,2022-10-17 14:31:23,2 -3217,Dark Arcana: The Carnival - 01003D301357A000,01003D301357A000,gpu;slow;status-ingame,ingame,2022-02-19 8:52:28,2 -3218,Food Girls,,,,2020-12-27 14:48:48,1 -3219,Override 2 Super Mech League - 0100647012F62000,0100647012F62000,status-playable;online-broken;UE4,playable,2022-10-19 15:56:04,4 -3220,Unto The End - 0100E49013190000,0100E49013190000,gpu;status-ingame,ingame,2022-10-21 11:13:29,2 -3221,Outbreak: Lost Hope - 0100D9F013102000,0100D9F013102000,crash;status-boots,boots,2021-04-26 18:01:23,2 -3222,Croc's World 3,,status-playable,playable,2020-12-30 18:53:26,1 -3223,COLLECTION of SaGA FINAL FANTASY LEGEND,,status-playable,playable,2020-12-30 19:11:16,1 -3224,The Adventures of 00 Dilly,,status-playable,playable,2020-12-30 19:32:29,1 -3225,Funimation - 01008E10130F8000,01008E10130F8000,gpu;status-boots,boots,2021-04-08 13:08:17,3 -3227,Aleste Collection,,,,2021-01-01 11:30:59,1 -3228,Trail Boss BMX,,,,2021-01-01 16:51:27,1 -3229,DEEMO -Reborn- - 01008B10132A2000,01008B10132A2000,status-playable;nvdec;online-broken,playable,2022-10-17 15:18:11,2 -3232,Catherine Full Body - 0100BF00112C0000,0100BF00112C0000,status-playable;nvdec,playable,2023-04-02 11:00:37,14 -3233,Hell Sports,,,,2021-01-03 15:40:25,1 -3234,Traditional Tactics Ne+,,,,2021-01-03 15:40:29,1 -3235,Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 ) - 0100B9E012992000,0100B9E012992000,status-playable;UE4,playable,2022-12-07 12:59:16,3 -3236,The House of Da Vinci,,status-playable,playable,2021-01-05 14:17:19,2 -3237,Monster Sanctuary,,crash;status-ingame,ingame,2021-04-04 5:06:41,2 -3239,Monster Hunter Rise Demo - 010093A01305C000,010093A01305C000,status-playable;online-broken;ldn-works;demo,playable,2022-10-18 23:04:17,15 -3244,InnerSpace,,status-playable,playable,2021-01-13 19:36:14,1 -3245,Scott Pilgrim vs The World: The Game - 0100394011C30000,0100394011C30000,services-horizon;status-nothing;crash,nothing,2024-07-12 8:13:03,11 -3246,Fantasy Tavern Sextet -Vol.2 Adventurer's Days-,,gpu;slow;status-ingame;crash,ingame,2021-11-06 2:57:29,2 -3247,Monster Hunter XX Nintendo Switch Ver ( Double Cross ) - 0100C3800049C000,0100C3800049C000,status-playable,playable,2024-07-21 14:08:09,7 -3248,Football Manager 2021 Touch - 01007CF013152000,01007CF013152000,gpu;status-ingame,ingame,2022-10-17 20:08:23,3 -3249,Eyes: The Horror Game - 0100EFE00A3C2000,0100EFE00A3C2000,status-playable,playable,2021-01-20 21:59:46,1 -3250,Evolution Board Game - 01006A800FA22000,01006A800FA22000,online;status-playable,playable,2021-01-20 22:37:56,1 -3251,PBA Pro Bowling 2021 - 0100F95013772000,0100F95013772000,status-playable;online-broken;UE4,playable,2022-10-19 16:46:40,2 -3252,Body of Evidence - 0100721013510000,0100721013510000,status-playable,playable,2021-04-25 22:22:11,2 -3253,The Hong Kong Massacre,,crash;status-ingame,ingame,2021-01-21 12:06:56,1 -3254,Arkanoid vs Space Invaders,,services;status-ingame,ingame,2021-01-21 12:50:30,1 -3256,Professor Lupo: Ocean - 0100D1F0132F6000,0100D1F0132F6000,status-playable,playable,2021-04-14 16:33:33,2 -3257,My Universe - School Teacher - 01006C301199C000,01006C301199C000,nvdec;status-playable,playable,2021-01-21 16:02:52,1 -3258,FUZE Player - 010055801134E000,010055801134E000,status-ingame;online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53,2 -3259,Defentron - 0100CDE0136E6000,0100CDE0136E6000,status-playable,playable,2022-10-17 15:47:56,2 -3260,Thief Simulator - 0100CE400E34E000,0100CE400E34E000,status-playable,playable,2023-04-22 4:39:11,3 -3261,Stardash - 01002100137BA000,01002100137BA000,status-playable,playable,2021-01-21 16:31:19,1 -3262,The Last Dead End - 0100AAD011592000,0100AAD011592000,gpu;status-ingame;UE4,ingame,2022-10-20 16:59:44,3 -3263,Buddy Mission BOND Demo [ バディミッション BOND ],,Incomplete,,2021-01-23 18:07:40,3 -3264,Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ] - 01005EE013888000,01005EE013888000,gpu;status-ingame;demo,ingame,2022-12-06 15:27:59,4 -3265,Down in Bermuda,,,,2021-01-22 15:29:19,1 -3268,Blacksmith of the Sand Kingdom - 010068E013450000,010068E013450000,status-playable,playable,2022-10-16 22:37:44,3 -3269,Tennis World Tour 2 - 0100950012F66000,0100950012F66000,status-playable;online-broken,playable,2022-10-14 10:43:16,4 -3270,Shadow Gangs - 0100BE501382A000,0100BE501382A000,cpu;gpu;status-ingame;crash;regression,ingame,2024-04-29 0:07:26,15 -3271,Red Colony - 0100351013A06000,0100351013A06000,status-playable,playable,2021-01-25 20:44:41,1 -3272,Construction Simulator 3 - Console Edition - 0100A5600FAC0000,0100A5600FAC0000,status-playable,playable,2023-02-06 9:31:23,3 -3273,Speed Truck Racing - 010061F013A0E000,010061F013A0E000,status-playable,playable,2022-10-20 12:57:04,2 -3274,Arcanoid Breakout - 0100E53013E1C000,0100E53013E1C000,status-playable,playable,2021-01-25 23:28:02,1 -3275,Life of Fly - 0100B3A0135D6000,0100B3A0135D6000,status-playable,playable,2021-01-25 23:41:07,1 -3276,Little Nightmares II DEMO - 010093A0135D6000,010093A0135D6000,status-playable;UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20,2 -3277,Iris Fall - 0100945012168000,0100945012168000,status-playable;nvdec,playable,2022-10-18 13:40:22,2 -3278,Dirt Trackin Sprint Cars - 01004CB01378A000,01004CB01378A000,status-playable;nvdec;online-broken,playable,2022-10-17 16:34:56,2 -3279,Gal*Gun Returns [ ぎゃる☆がん りたーんず ] - 0100047013378000,0100047013378000,status-playable;nvdec,playable,2022-10-17 23:50:46,2 -3280,Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ] - 0100307011D80000,0100307011D80000,status-playable,playable,2021-06-08 13:20:33,3 -3281,Buddy Mission BOND [ FG ] [ バディミッション BOND ] - 0100DB300B996000,0100DB300B996000,,,2021-01-30 4:22:26,1 -3282,CONARIUM - 010015801308E000,010015801308E000,UE4;nvdec;status-playable,playable,2021-04-26 17:57:53,3 -3284,Balan Wonderworld Demo - 0100E48013A34000,0100E48013A34000,gpu;services;status-ingame;UE4;demo,ingame,2023-02-16 20:05:07,4 -3285,War Truck Simulator - 0100B6B013B8A000,0100B6B013B8A000,status-playable,playable,2021-01-31 11:22:54,1 -3286,The Last Campfire - 0100449011506000,0100449011506000,status-playable,playable,2022-10-20 16:44:19,3 -3287,Spinny's journey - 01001E40136FE000,01001E40136FE000,status-ingame;crash,ingame,2021-11-30 3:39:44,2 -3288,Sally Face - 0100BBF0122B4000,0100BBF0122B4000,status-playable,playable,2022-06-06 18:41:24,2 -3289,Otti house keeper - 01006AF013A9E000,01006AF013A9E000,status-playable,playable,2021-01-31 12:11:24,1 -3290,Neoverse Trinity Edition - 01001A20133E000,,status-playable,playable,2022-10-19 10:28:03,3 -3291,Missile Dancer - 0100CFA0138C8000,0100CFA0138C8000,status-playable,playable,2021-01-31 12:22:03,1 -3292,Grisaia Phantom Trigger 03 - 01005250123B8000,01005250123B8000,audout;status-playable,playable,2021-01-31 12:30:47,1 -3293,GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000,0100D970123BA000,audout;status-playable,playable,2021-01-31 12:40:37,1 -3294,GRISAIA PHANTOM TRIGGER 05 - 01002330123BC000,01002330123BC000,audout;nvdec;status-playable,playable,2021-01-31 12:49:59,1 -3295,GRISAIA PHANTOM TRIGGER 5.5 - 0100CAF013AE6000,0100CAF013AE6000,audout;nvdec;status-playable,playable,2021-01-31 12:59:44,1 -3296,Dreamo - 0100D24013466000,0100D24013466000,status-playable;UE4,playable,2022-10-17 18:25:28,2 -3297,Dirt Bike Insanity - 0100A8A013DA4000,0100A8A013DA4000,status-playable,playable,2021-01-31 13:27:38,1 -3298,Calico - 010013A00E750000,010013A00E750000,status-playable,playable,2022-10-17 14:44:28,2 -3299,ADVERSE - 01008C901266E000,01008C901266E000,UE4;status-playable,playable,2021-04-26 14:32:51,2 -3300,All Walls Must Fall - 0100CBD012FB6000,0100CBD012FB6000,status-playable;UE4,playable,2022-10-15 19:16:30,2 -3301,Bus Driver Simulator - 010030D012FF6000,010030D012FF6000,status-playable,playable,2022-10-17 13:55:27,2 -3302,Blade II The Return of Evil - 01009CC00E224000,01009CC00E224000,audio;status-ingame;crash;UE4,ingame,2021-11-14 2:49:59,5 -3303,Ziggy The Chaser - 0100D7B013DD0000,0100D7B013DD0000,status-playable,playable,2021-02-04 20:34:27,1 -3304,Colossus Down - 0100E2F0128B4000,0100E2F0128B4000,status-playable,playable,2021-02-04 20:49:50,1 -3305,Turrican Flashback - 01004B0130C8000,,status-playable;audout,playable,2021-08-30 10:07:56,2 -3306,Ubongo - Deluxe Edition,,status-playable,playable,2021-02-04 21:15:01,1 -3307,Märchen Forest - 0100B201D5E000,,status-playable,playable,2021-02-04 21:33:34,1 -3308,Re:ZERO -Starting Life in Another World- The Prophecy of the Throne,,gpu;status-boots;crash;nvdec;vulkan,boots,2023-03-07 21:27:24,8 -3309,Tracks - Toybox Edition - 0100192010F5A000,0100192010F5A000,UE4;crash;status-nothing,nothing,2021-02-08 15:19:18,1 -3310,TOHU - 0100B5E011920000,0100B5E011920000,slow;status-playable,playable,2021-02-08 15:40:44,1 -3311,Redout: Space Assault - 0100326010B98000,0100326010B98000,status-playable;UE4,playable,2022-10-19 23:04:35,2 -3312,Gods Will Fall - 0100CFA0111C8000,0100CFA0111C8000,status-playable,playable,2021-02-08 16:49:59,1 -3313,Cyber Shadow - 0100C1F0141AA000,0100C1F0141AA000,status-playable,playable,2022-07-17 5:37:41,4 -3314,Atelier Ryza 2: Lost Legends & the Secret Fairy - 01009A9012022000,01009A9012022000,status-playable,playable,2022-10-16 21:06:06,2 -3315,Heaven's Vault - 0100FD901000C000,0100FD901000C000,crash;status-ingame,ingame,2021-02-08 18:22:01,1 -3316,Contraptions - 01007D701298A000,01007D701298A000,status-playable,playable,2021-02-08 18:40:50,1 -3317,My Universe - Pet Clinic Cats & Dogs - 0100CD5011A02000,0100CD5011A02000,status-boots;crash;nvdec,boots,2022-02-06 2:05:53,3 -3318,Citizens Unite!: Earth x Space - 0100D9C012900000,0100D9C012900000,gpu;status-ingame,ingame,2023-10-22 6:44:19,4 -3319,Blue Fire - 010073B010F6E000,010073B010F6E000,status-playable;UE4,playable,2022-10-22 14:46:11,2 -3320,Shakes on a Plane - 01008DA012EC0000,01008DA012EC0000,status-menus;crash,menus,2021-11-25 8:52:25,3 -3321,Glyph - 0100EB501130E000,0100EB501130E000,status-playable,playable,2021-02-08 19:56:51,1 -3322,Flying Hero X - 0100419013A8A000,0100419013A8A000,status-menus;crash,menus,2021-11-17 7:46:58,2 -3323,Disjunction - 01000B70122A2000,01000B70122A2000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24,8 -3324,Grey Skies: A War of the Worlds Story - 0100DA7013792000,0100DA7013792000,status-playable;UE4,playable,2022-10-24 11:13:59,2 -3325,"#womenUp, Super Puzzles Dream Demo - 0100D87012A14000",0100D87012A14000,nvdec;status-playable,playable,2021-02-09 0:03:31,1 -3326,n Verlore Verstand - Demo - 01009A500E3DA000,01009A500E3DA000,status-playable,playable,2021-02-09 0:13:32,1 -3327,10 Second Run RETURNS Demo - 0100DC000A472000,0100DC000A472000,gpu;status-ingame,ingame,2021-02-09 0:17:18,1 -3328,16-Bit Soccer Demo - 0100B94013D28000,0100B94013D28000,status-playable,playable,2021-02-09 0:23:07,1 -3329,1993 Shenandoah Demo - 0100148012550000,0100148012550000,status-playable,playable,2021-02-09 0:43:43,1 -3330,9 Monkeys of Shaolin Demo - 0100C5F012E3E000,0100C5F012E3E000,UE4;gpu;nvdec;status-ingame,ingame,2021-02-09 1:03:30,1 -3331,99Vidas Demo - 010023500C2F0000,010023500C2F0000,status-playable,playable,2021-02-09 12:51:31,1 -3332,A Duel Hand Disaster Trackher: DEMO - 0100582012B90000,0100582012B90000,crash;demo;nvdec;status-ingame,ingame,2021-03-24 18:45:27,2 -3333,Aces of the Luftwaffe Squadron Demo - 010054300D822000,010054300D822000,nvdec;status-playable,playable,2021-02-09 13:12:28,1 -3334,Active Neurons 2 Demo - 010031C0122B0000,010031C0122B0000,status-playable,playable,2021-02-09 13:40:21,1 -3335,Adventures of Chris Demo - 0100A0A0136E8000,0100A0A0136E8000,status-playable,playable,2021-02-09 13:49:21,1 -3336,Aegis Defenders Demo - 010064500AF72000,010064500AF72000,status-playable,playable,2021-02-09 14:04:17,1 -3337,Aeolis Tournament Demo - 01006710122CE000,01006710122CE000,nvdec;status-playable,playable,2021-02-09 14:22:30,1 -3338,AeternoBlade Demo Version - 0100B1C00949A000,0100B1C00949A000,nvdec;status-playable,playable,2021-02-09 14:39:26,1 -3339,AeternoBlade II Demo Version,,gpu;nvdec;status-ingame,ingame,2021-02-09 15:10:19,1 -3340,Agent A: A puzzle in disguise (Demo) - 01008E8012C02000,01008E8012C02000,status-playable,playable,2021-02-09 18:30:41,1 -3341,Airfield Mania Demo - 010010A00DB72000,010010A00DB72000,services;status-boots;demo,boots,2022-04-10 3:43:02,2 -3342,Alder's Blood Prologue - 01004510110C4000,01004510110C4000,crash;status-ingame,ingame,2021-02-09 19:03:03,1 -3343,AI: The Somnium Files Demo - 0100C1700FB34000,0100C1700FB34000,nvdec;status-playable,playable,2021-02-10 12:52:33,1 -3344,Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version - 0100A8A00D27E000,0100A8A00D27E000,status-playable,playable,2021-02-10 13:33:59,1 -3345,Animated Jigsaws: Beautiful Japanese Scenery DEMO - 0100A1900B5B8000,0100A1900B5B8000,nvdec;status-playable,playable,2021-02-10 13:49:56,1 -3346,APE OUT DEMO - 010054500E6D4000,010054500E6D4000,status-playable,playable,2021-02-10 14:33:06,1 -3347,Anime Studio Story Demo - 01002B300EB86000,01002B300EB86000,status-playable,playable,2021-02-10 14:50:39,1 -3348,Aperion Cyberstorm Demo - 01008CA00D71C000,01008CA00D71C000,status-playable,playable,2021-02-10 15:53:21,1 -3350,ARMS Demo,,status-playable,playable,2021-02-10 16:30:13,1 -3351,Art of Balance DEMO - 010062F00CAE2000,010062F00CAE2000,gpu;slow;status-ingame,ingame,2021-02-10 17:17:12,1 -3352,Assault on Metaltron Demo - 0100C5E00E540000,0100C5E00E540000,status-playable,playable,2021-02-10 19:48:06,1 -3353,Automachef Demo - 01006B700EA6A000,01006B700EA6A000,status-playable,playable,2021-02-10 20:35:37,1 -3354,AVICII Invector Demo - 0100E100128BA000,0100E100128BA000,status-playable,playable,2021-02-10 21:04:58,1 -3355,Awesome Pea (Demo) - 010023800D3F2000,010023800D3F2000,status-playable,playable,2021-02-10 21:48:21,1 -3356,Awesome Pea 2 (Demo) - 0100D2011E28000,,crash;status-nothing,nothing,2021-02-10 22:08:27,1 -3357,Ayakashi koi gikyoku Free Trial - 010075400DEC6000,010075400DEC6000,status-playable,playable,2021-02-10 22:22:11,1 -3358,Bad North Demo,,status-playable,playable,2021-02-10 22:48:38,1 -3359,Baobabs Mausoleum: DEMO - 0100D3000AEC2000,0100D3000AEC2000,status-playable,playable,2021-02-10 22:59:25,1 -3360,Battle Chef Brigade Demo - 0100DBB00CAEE000,0100DBB00CAEE000,status-playable,playable,2021-02-10 23:15:07,1 -3361,Mercenaries Blaze Dawn of the Twin Dragons - 0100a790133fc000,0100a790133fc000,,,2021-02-11 18:43:00,1 -3362,Fallen Legion Revenants Demo - 0100cac013776000,0100cac013776000,,,2021-02-11 18:43:06,1 -3363,Bear With Me - The Lost Robots Demo - 010024200E97E800,010024200E97E800,nvdec;status-playable,playable,2021-02-12 22:38:12,1 -3364,Birds and Blocks Demo - 0100B6B012FF4000,0100B6B012FF4000,services;status-boots;demo,boots,2022-04-10 4:53:03,2 -3365,Black Hole Demo - 01004BE00A682000,01004BE00A682000,status-playable,playable,2021-02-12 23:02:17,1 -3366,Blasphemous Demo - 0100302010338000,0100302010338000,status-playable,playable,2021-02-12 23:49:56,1 -3367,Blaster Master Zero DEMO - 010025B002E92000,010025B002E92000,status-playable,playable,2021-02-12 23:59:06,1 -3368,Bleep Bloop DEMO - 010091700EA2A000,010091700EA2A000,nvdec;status-playable,playable,2021-02-13 0:20:53,1 -3369,Block-a-Pix Deluxe Demo - 0100E1C00DB6C000,0100E1C00DB6C000,status-playable,playable,2021-02-13 0:37:39,1 -3370,Get Over Here - 0100B5B00E77C000,0100B5B00E77C000,status-playable,playable,2022-10-28 11:53:52,3 -3371,Unspottable - 0100B410138C0000,0100B410138C0000,status-playable,playable,2022-10-25 19:28:49,2 -3373,Blossom Tales Demo - 01000EB01023E000,01000EB01023E000,status-playable,playable,2021-02-13 14:22:53,1 -3374,Boomerang Fu Demo Version - 010069F0135C4000,010069F0135C4000,demo;status-playable,playable,2021-02-13 14:38:13,1 -3375,Bot Vice Demo - 010069B00EAC8000,010069B00EAC8000,crash;demo;status-ingame,ingame,2021-02-13 14:52:42,1 -3376,BOXBOY! + BOXGIRL! Demo - 0100B7200E02E000,0100B7200E02E000,demo;status-playable,playable,2021-02-13 14:59:08,1 -3377,Super Mario 3D World + Bowser's Fury - 010028600EBDA000,010028600EBDA000,status-playable;ldn-works,playable,2024-07-31 10:45:37,38 -3378,Brawlout Demo - 0100C1B00E1CA000,0100C1B00E1CA000,demo;status-playable,playable,2021-02-13 22:46:53,1 -3379,Brigandine: The Legend of Runersia Demo - 0100703011258000,0100703011258000,status-playable,playable,2021-02-14 14:44:10,1 -3380,Brotherhood United Demo - 0100F19011226000,0100F19011226000,demo;status-playable,playable,2021-02-14 21:10:57,1 -3381,Bucket Knight demo - 0100F1B010A90000,0100F1B010A90000,demo;status-playable,playable,2021-02-14 21:23:09,1 -3382,BurgerTime Party! Demo - 01005780106E8000,01005780106E8000,demo;status-playable,playable,2021-02-14 21:34:16,1 -3383,Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600,,demo;gpu;nvdec;status-ingame,ingame,2021-02-14 21:48:15,1 -3384,Cafeteria Nipponica Demo - 010060400D21C000,010060400D21C000,demo;status-playable,playable,2021-02-14 22:11:35,1 -3385,Cake Bash Demo - 0100699012F82000,0100699012F82000,crash;demo;status-ingame,ingame,2021-02-14 22:21:15,1 -3386,Captain Toad: Treasure Tracker Demo - 01002C400B6B6000,01002C400B6B6000,32-bit;demo;status-playable,playable,2021-02-14 22:36:09,1 -3387,CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION - 01002320137CC000,01002320137CC000,slow;status-playable,playable,2021-02-14 22:45:35,1 -3388,Castle Crashers Remastered Demo - 0100F6D01060E000,0100F6D01060E000,gpu;status-boots;demo,boots,2022-04-10 10:57:10,2 -3389,Cat Quest II Demo - 0100E86010220000,0100E86010220000,demo;status-playable,playable,2021-02-15 14:11:57,1 -3390,Caveman Warriors Demo,,demo;status-playable,playable,2021-02-15 14:44:08,1 -3391,Chickens Madness DEMO - 0100CAC011C3A000,0100CAC011C3A000,UE4;demo;gpu;nvdec;status-ingame,ingame,2021-02-15 15:02:10,1 -3392,Little Nightmares II - 010097100EDD6000,010097100EDD6000,status-playable;UE4,playable,2023-02-10 18:24:44,4 -3393,Rhythm Fighter - 0100729012D18000,0100729012D18000,crash;status-nothing,nothing,2021-02-16 18:51:30,2 -3394,大図書館の羊飼い -Library Party-01006de00a686000,01006de00a686000,,,2021-02-16 7:20:19,2 -3395,Timothy and the Mysterious Forest - 0100393013A10000,0100393013A10000,gpu;slow;status-ingame,ingame,2021-06-02 0:42:11,2 -3396,Pixel Game Maker Series Werewolf Princess Kaguya - 0100859013CE6000,0100859013CE6000,crash;services;status-nothing,nothing,2021-03-26 0:23:07,2 -3397,D.C.4 ~ダ・カーポ4~-0100D8500EE14000,0100D8500EE14000,,,2021-02-17 8:46:35,1 -3398,Yo kai watch 1 for Nintendo Switch - 0100C0000CEEA000,0100C0000CEEA000,gpu;status-ingame;opengl,ingame,2024-05-28 11:11:49,21 -3399,Project TRIANGLE STRATEGY Debut Demo - 01002980140F6000,01002980140F6000,status-playable;UE4;demo,playable,2022-10-24 21:40:27,4 -3400,SNK VS. CAPCOM: THE MATCH OF THE MILLENNIUM - 010027D0137E0000,010027D0137E0000,,,2021-02-19 12:35:20,2 -3401,Super Soccer Blast - 0100D61012270000,0100D61012270000,gpu;status-ingame,ingame,2022-02-16 8:39:12,2 -3404,VOEZ (Japan Version) - 0100A7F002830000,0100A7F002830000,,,2021-02-19 15:07:49,1 -3405,Dungreed - 010045B00C496000,010045B00C496000,,,2021-02-19 16:18:07,1 -3406,Capcom Arcade Stadium - 01001E0013208000,01001E0013208000,status-playable,playable,2021-03-17 5:45:14,2 -3408,Urban Street Fighting - 010054F014016000,010054F014016000,status-playable,playable,2021-02-20 19:16:36,1 -3409,The Long Dark - 01007A700A87C000,01007A700A87C000,status-playable,playable,2021-02-21 14:19:52,1 -3410,Rebel Galaxy: Outlaw - 0100CAA01084A000,0100CAA01084A000,status-playable;nvdec,playable,2022-12-01 7:44:56,3 -3411,Persona 5: Strikers (US) - 0100801011C3E000,0100801011C3E000,status-playable;nvdec;mac-bug,playable,2023-09-26 9:36:01,16 -3412,Steven Universe Unleash the Light,,,,2021-02-25 2:33:05,1 -3413,Ghosts 'n Goblins Resurrection - 0100D6200F2BA000,0100D6200F2BA000,status-playable,playable,2023-05-09 12:40:41,5 -3414,Taxi Chaos - 0100B76011DAA000,0100B76011DAA000,slow;status-playable;online-broken;UE4,playable,2022-10-25 19:13:00,4 -3415,COTTOn Reboot! [ コットン リブート! ] - 01003DD00F94A000,01003DD00F94A000,status-playable,playable,2022-05-24 16:29:24,6 -3416,STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ] - 010017301007E000,010017301007E000,status-playable,playable,2021-03-18 11:42:19,3 -3417,Bravely Default II - 01006DC010326000,01006DC010326000,gpu;status-ingame;crash;Needs Update;UE4,ingame,2024-04-26 6:11:26,23 -3418,Forward To The Sky - 0100DBA011136000,0100DBA011136000,,,2021-02-27 12:11:42,1 -3419,Just Dance 2019,,gpu;online;status-ingame,ingame,2021-02-27 17:21:27,2 -3423,Harvest Moon One World - 010016B010FDE00,,status-playable,playable,2023-05-26 9:17:19,2 -3424,Just Dance 2017 - 0100BCE000598000,0100BCE000598000,online;status-playable,playable,2021-03-05 9:46:01,2 -3425,コープスパーティー ブラッドカバー リピーティッドフィアー (Corpse Party Blood Covered: Repeated Fear) - 0100965012E22000,0100965012E22000,,,2021-03-05 9:47:52,1 -3426,Sea of Solitude The Director's Cut - 0100AFE012BA2000,0100AFE012BA2000,gpu;status-ingame,ingame,2024-07-12 18:29:29,14 -3431,Just Dance 2018 - 0100A0500348A000,0100A0500348A000,,,2021-03-13 8:09:14,1 -3434,Crash Bandicoot 4: It's About Time - 010073401175E000,010073401175E000,status-playable;nvdec;UE4,playable,2024-03-17 7:13:45,5 -3435,Bloody Bunny : The Game - 0100E510143EC000,0100E510143EC000,status-playable;nvdec;UE4,playable,2022-10-22 13:18:55,2 -3437,Plants vs. Zombies: Battle for Neighborville Complete Edition - 0100C56010FD8000,0100C56010FD8000,gpu;audio;status-boots;crash,boots,2024-09-02 12:58:14,11 -3438,Cathedral - 0100BEB01327A000,0100BEB01327A000,,,2021-03-19 22:12:46,1 -3439,Night Vision - 0100C3801458A000,0100C3801458A000,,,2021-03-19 22:20:53,1 -3440,Stubbs the Zombie in Rebel Without a Pulse - 0100964012528000,0100964012528000,,,2021-03-19 22:56:50,1 -3443,Hitman 3 - Cloud Version - 01004990132AC000,01004990132AC000,Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:35:07,2 -3444,Speed Limit - 01000540139F6000,01000540139F6000,gpu;status-ingame,ingame,2022-09-02 18:37:40,2 -3445,Dig Dog - 0100A5A00DBB0000,0100A5A00DBB0000,gpu;status-ingame,ingame,2021-06-02 17:17:51,2 -3446,Renzo Racer - 01007CC0130C6000,01007CC0130C6000,status-playable,playable,2021-03-23 22:28:05,1 -3447,Persephone,,status-playable,playable,2021-03-23 22:39:19,1 -3448,Cresteaju,,gpu;status-ingame,ingame,2021-03-24 10:46:06,1 -3449,Boom Blaster,,status-playable,playable,2021-03-24 10:55:56,1 -3450,Soccer Club Life: Playing Manager - 010017B012AFC000,010017B012AFC000,gpu;status-ingame,ingame,2022-10-25 11:59:22,2 -3451,Radio Commander - 0100BAD013B6E000,0100BAD013B6E000,nvdec;status-playable,playable,2021-03-24 11:20:46,1 -3452,Negative - 01008390136FC000,01008390136FC000,nvdec;status-playable,playable,2021-03-24 11:29:41,1 -3453,Hero-U: Rogue to Redemption - 010077D01094C000,010077D01094C000,nvdec;status-playable,playable,2021-03-24 11:40:01,1 -3454,Haven - 0100E2600DBAA000,0100E2600DBAA000,status-playable,playable,2021-03-24 11:52:41,1 -3455,Escape First 2 - 010021201296A000,010021201296A000,status-playable,playable,2021-03-24 11:59:41,1 -3456,Active Neurons 3 - 0100EE1013E12000,0100EE1013E12000,status-playable,playable,2021-03-24 12:20:20,1 -3457,Blizzard Arcade Collection - 0100743013D56000,0100743013D56000,status-playable;nvdec,playable,2022-08-03 19:37:26,2 -3458,Hellpoint - 010024600C794000,010024600C794000,status-menus,menus,2021-11-26 13:24:20,2 -3460,Death's Hangover - 0100492011A8A000,0100492011A8A000,gpu;status-boots,boots,2023-08-01 22:38:06,3 -3461,Storm in a Teacup - 0100B2300B932000,0100B2300B932000,gpu;status-ingame,ingame,2021-11-06 2:03:19,3 -3462,Charge Kid - 0100F52013A66000,0100F52013A66000,gpu;status-boots;audout,boots,2024-02-11 1:17:47,2 -3465,Monster Hunter Rise - 0100B04011742000,0100B04011742000,gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59,25 -3466,Gotobun no Hanayome Natsu no Omoide mo Gotobun [ 五等分の花嫁∬ ~夏の思い出も五等分~ ] - 0100FB5013670000,0100FB5013670000,,,2021-03-27 16:51:27,1 -3469,Steam Prison - 01008010118CC000,01008010118CC000,nvdec;status-playable,playable,2021-04-01 15:34:11,1 -3470,Rogue Heroes: Ruins of Tasos - 01009FA010848000,01009FA010848000,online;status-playable,playable,2021-04-01 15:41:25,1 -3471,Fallen Legion Revenants - 0100AA801258C000,0100AA801258C000,status-menus;crash,menus,2021-11-25 8:53:20,3 -3472, R-TYPE FINAL 2 Demo - 01007B0014300000,01007B0014300000,slow;status-ingame;nvdec;UE4;demo,ingame,2022-10-24 21:57:42,3 -3473,Fire Emblem: Shadow Dragon and the Blade of Light - 0100A12011CC8000,0100A12011CC8000,status-playable,playable,2022-10-17 19:49:14,6 -3475,Dariusburst - Another Chronicle EX+ - 010015800F93C000,010015800F93C000,online;status-playable,playable,2021-04-05 14:21:43,1 -3476,Curse of the Dead Gods - 0100D4A0118EA000,0100D4A0118EA000,status-playable,playable,2022-08-30 12:25:38,4 -3477,Clocker - 0100DF9013AD4000,0100DF9013AD4000,status-playable,playable,2021-04-05 15:05:13,1 -3478,Azur Lane: Crosswave - 01006AF012FC8000,01006AF012FC8000,UE4;nvdec;status-playable,playable,2021-04-05 15:15:25,1 -3479,AnShi - 01000FD00DF78000,01000FD00DF78000,status-playable;nvdec;UE4,playable,2022-10-21 19:37:01,2 -3480,Aery - A Journey Beyond Time - 0100DF8014056000,0100DF8014056000,status-playable,playable,2021-04-05 15:52:25,1 -3481,Sir Lovelot - 0100E9201410E000,0100E9201410E000,status-playable,playable,2021-04-05 16:21:46,1 -3482,Pixel Game Maker Series Puzzle Pedestrians - 0100EA2013BCC000,0100EA2013BCC000,status-playable,playable,2022-10-24 20:15:50,3 -3483,Monster Jam Steel Titans 2 - 010051B0131F0000,010051B0131F0000,status-playable;nvdec;UE4,playable,2022-10-24 17:17:59,2 -3484,Huntdown - 0100EBA004726000,0100EBA004726000,status-playable,playable,2021-04-05 16:59:54,1 -3485,GraviFire - 010054A013E0C000,010054A013E0C000,status-playable,playable,2021-04-05 17:13:32,1 -3486,Dungeons & Bombs,,status-playable,playable,2021-04-06 12:46:22,1 -3487,Estranged: The Departure - 01004F9012FD8000,01004F9012FD8000,status-playable;nvdec;UE4,playable,2022-10-24 10:37:58,2 -3488,Demon's Rise - Lords of Chaos - 0100E29013818000,0100E29013818000,status-playable,playable,2021-04-06 16:20:06,1 -3489,Bibi & Tina at the horse farm - 010062400E69C000,010062400E69C000,status-playable,playable,2021-04-06 16:31:39,1 -3490,WRC 9 The Official Game - 01001A0011798000,01001A0011798000,gpu;slow;status-ingame;nvdec,ingame,2022-10-25 19:47:39,2 -3491,Woodsalt - 0100288012966000,0100288012966000,status-playable,playable,2021-04-06 17:01:48,1 -3492,Kingdoms of Amalur: Re-Reckoning - 0100EF50132BE000,0100EF50132BE000,status-playable,playable,2023-08-10 13:05:08,2 -3493,Jiffy - 01008330134DA000,01008330134DA000,gpu;status-ingame;opengl,ingame,2024-02-03 23:11:24,4 -3494,A-Train: All Aboard! Tourism - 0100A3E010E56000,0100A3E010E56000,nvdec;status-playable,playable,2021-04-06 17:48:19,1 -3495,Synergia - 01009E700F448000,01009E700F448000,status-playable,playable,2021-04-06 17:58:04,1 -3496,R.B.I. Baseball 21 - 0100B4A0115CA000,0100B4A0115CA000,status-playable;online-working,playable,2022-10-24 22:31:45,2 -3497,NEOGEO POCKET COLOR SELECTION Vol.1 - 010006D0128B4000,010006D0128B4000,status-playable,playable,2023-07-08 20:55:36,2 -3498,Mighty Fight Federation - 0100C1E0135E0000,0100C1E0135E0000,online;status-playable,playable,2021-04-06 18:39:56,1 -3499,Lost Lands: The Four Horsemen - 0100133014510000,0100133014510000,status-playable;nvdec,playable,2022-10-24 16:41:00,2 -3500,In rays of the Light - 0100A760129A0000,0100A760129A0000,status-playable,playable,2021-04-07 15:18:07,1 -3501,DARQ Complete Edition - 0100440012FFA000,0100440012FFA000,audout;status-playable,playable,2021-04-07 15:26:21,1 -3502,Can't Drive This - 0100593008BDC000,0100593008BDC000,status-playable,playable,2022-10-22 14:55:17,1 -3503,Wanderlust Travel Stories - 0100B27010436000,0100B27010436000,status-playable,playable,2021-04-07 16:09:12,1 -3504,Tales from the Borderlands - 0100F0C011A68000,0100F0C011A68000,status-playable;nvdec,playable,2022-10-25 18:44:14,4 -3506,Star Wars: Republic Commando - 0100FA10115F8000,0100FA10115F8000,gpu;status-ingame;32-bit,ingame,2023-10-31 15:57:17,9 -3507,Barrage Fantasia - 0100F2A013752000,0100F2A013752000,,,2021-04-08 1:02:06,1 -3509,Atelier Rorona - The Alchemist of Arland - DX - 010088600C66E000,010088600C66E000,nvdec;status-playable,playable,2021-04-08 15:33:15,1 -3510,PAC-MAN 99 - 0100AD9012510000,0100AD9012510000,gpu;status-ingame;online-broken,ingame,2024-04-23 0:48:25,5 -3511,MAGLAM LORD - 0100C2C0125FC000,0100C2C0125FC000,,,2021-04-09 9:10:45,2 -3513,Part Time UFO - 01006B5012B32000 ,01006B5012B32000,status-ingame;crash,ingame,2023-03-03 3:13:05,2 -3515,Fitness Boxing - 0100E7300AAD4000,0100E7300AAD4000,status-playable,playable,2021-04-14 20:33:33,1 -3516,Fitness Boxing 2: Rhythm & Exercise - 0100073011382000,0100073011382000,crash;status-ingame,ingame,2021-04-14 20:40:48,1 -3517,Overcooked! All You Can Eat - 0100F28011892000,0100F28011892000,ldn-untested;online;status-playable,playable,2021-04-15 10:33:52,1 -3518,SpyHack - 01005D701264A000,01005D701264A000,status-playable,playable,2021-04-15 10:53:51,1 -3519,Oh My Godheads: Party Edition - 01003B900AE12000,01003B900AE12000,status-playable,playable,2021-04-15 11:04:11,1 -3520,My Hidden Things - 0100E4701373E000,0100E4701373E000,status-playable,playable,2021-04-15 11:26:06,1 -3521,Merchants of Kaidan - 0100E5000D3CA000,0100E5000D3CA000,status-playable,playable,2021-04-15 11:44:28,1 -3522,Mahluk dark demon - 010099A0145E8000,010099A0145E8000,status-playable,playable,2021-04-15 13:14:24,1 -3523,Fred3ric - 0100AC40108D8000,0100AC40108D8000,status-playable,playable,2021-04-15 13:30:31,1 -3524,Fishing Universe Simulator - 010069800D292000,010069800D292000,status-playable,playable,2021-04-15 14:00:43,1 -3525,Exorder - 0100FA800A1F4000,0100FA800A1F4000,nvdec;status-playable,playable,2021-04-15 14:17:20,1 -3526,FEZ - 01008D900B984000,01008D900B984000,gpu;status-ingame,ingame,2021-04-18 17:10:16,6 -3527,Danger Scavenger - ,,nvdec;status-playable,playable,2021-04-17 15:53:04,1 -3528,Hellbreachers - 01002BF013F0C000,01002BF013F0C000,,,2021-04-17 17:19:20,1 -3531,Cooking Simulator - 01001E400FD58000,01001E400FD58000,status-playable,playable,2021-04-18 13:25:23,1 -3532,Digerati Presents: The Dungeon Crawl Vol. 1 - 010035D0121EC000,010035D0121EC000,slow;status-ingame,ingame,2021-04-18 14:04:55,1 -3533,Clea 2 - 010045E0142A4000,010045E0142A4000,status-playable,playable,2021-04-18 14:25:18,1 -3534,Livestream Escape from Hotel Izanami - 0100E45014338000,0100E45014338000,,,2021-04-19 2:20:34,1 -3535,Ai Kiss 2 [ アイキス2 ] - 01000E9013CD4000,01000E9013CD4000,,,2021-04-19 2:49:12,1 -3536,Pikachin-Kit – Game de Pirameki Daisakusen [ ピカちんキット ゲームでピラメキ大作戦!] - 01009C100A8AA000,01009C100A8AA000,,,2021-04-19 3:11:07,1 -3537,Ougon musou kyoku CROSS [ 黄金夢想曲†CROSS] - 010011900E720000,010011900E720000,,,2021-04-19 3:22:41,1 -3538,Cargo Crew Driver - 0100DD6014870000,0100DD6014870000,status-playable,playable,2021-04-19 12:54:22,1 -3539,Black Legend - 0100C3200E7E6000,0100C3200E7E6000,gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48,2 -3540,Balan Wonderworld - 0100438012EC8000,0100438012EC8000,status-playable;nvdec;UE4,playable,2022-10-22 13:08:43,2 -3541,Arkham Horror: Mother's Embrace - 010069A010606000,010069A010606000,nvdec;status-playable,playable,2021-04-19 15:40:55,1 -3542,S.N.I.P.E.R. Hunter Scope - 0100B8B012ECA000,0100B8B012ECA000,status-playable,playable,2021-04-19 15:58:09,1 -3543,Ploid Saga - 0100E5B011F48000 ,0100E5B011F48000,status-playable,playable,2021-04-19 16:58:45,1 -3544,Kaze and the Wild Masks - 010038B00F142000,010038B00F142000,status-playable,playable,2021-04-19 17:11:03,1 -3545,I Saw Black Clouds - 01001860140B0000,01001860140B0000,nvdec;status-playable,playable,2021-04-19 17:22:16,1 -3546,Escape from Life Inc - 010023E013244000,010023E013244000,status-playable,playable,2021-04-19 17:34:09,1 -3547,El Hijo - A Wild West Tale - 010020A01209C000,010020A01209C000,nvdec;status-playable,playable,2021-04-19 17:44:08,1 -3548,Bomber Fox - 0100A1F012948000,0100A1F012948000,nvdec;status-playable,playable,2021-04-19 17:58:13,1 -3549,Stitchy in Tooki Trouble - 010077B014518000,010077B014518000,status-playable,playable,2021-05-06 16:25:53,2 -3550,SaGa Frontier Remastered - 0100A51013530000,0100A51013530000,status-playable;nvdec,playable,2022-11-03 13:54:56,2 -3552,Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ] - 0100EB2012E36000,0100EB2012E36000,status-nothing;crash,nothing,2021-11-03 8:45:06,2 -3553,Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ] - 01005CD013116000,01005CD013116000,status-playable,playable,2022-07-29 15:50:13,3 -3554,Uno no Tatsujin Machigai Sagashi Museum for Nintendo Switch [ -右脳の達人- まちがいさがしミュージアム for Nintendo Switch ] - 01001030136C6000,01001030136C6000,,,2021-04-22 21:59:27,1 -3555,Shantae - 0100430013120000,0100430013120000,status-playable,playable,2021-05-21 4:53:26,8 -3556,The Legend of Heroes: Trails of Cold Steel IV - 0100D3C010DE8000,0100D3C010DE8000,nvdec;status-playable,playable,2021-04-23 14:01:05,1 -3558,Effie - 01002550129F0000,01002550129F0000,status-playable,playable,2022-10-27 14:36:39,4 -3559,Death end re;Quest - 0100AEC013DDA000,0100AEC013DDA000,status-playable,playable,2023-07-09 12:19:54,2 -3560,THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改] - 01005E5013862000,01005E5013862000,status-nothing;crash,nothing,2021-09-30 14:41:07,2 -3561,Yoshi's Crafted World - 01006000040C2000,01006000040C2000,gpu;status-ingame;audout,ingame,2021-08-30 13:25:51,5 -3563,TY the Tasmanian Tiger 2: Bush Rescue HD - 0100BC701417A000,0100BC701417A000,,,2021-05-04 23:11:57,1 -3564,Nintendo Labo Toy-Con 03: Vehicle Kit - 01001E9003502000,01001E9003502000,services;status-menus;crash,menus,2022-08-03 17:20:11,3 -3566,Say No! More - 01001C3012912000,01001C3012912000,status-playable,playable,2021-05-06 13:43:34,1 -3567,Potion Party - 01000A4014596000,01000A4014596000,status-playable,playable,2021-05-06 14:26:54,1 -3568,Saviors of Sapphire Wings & Stranger of Sword City Revisited - 0100AA00128BA000,0100AA00128BA000,status-menus;crash,menus,2022-10-24 23:00:46,4 -3569,Lost Words: Beyond the Page - 0100018013124000,0100018013124000,status-playable,playable,2022-10-24 17:03:21,2 -3570,Lost Lands 3: The Golden Curse - 0100156014C6A000,0100156014C6A000,status-playable;nvdec,playable,2022-10-24 16:30:00,2 -3571,ISLAND - 0100F06013710000,0100F06013710000,status-playable,playable,2021-05-06 15:11:47,1 -3572,SilverStarChess - 010016D00A964000,010016D00A964000,status-playable,playable,2021-05-06 15:25:57,1 -3573,Breathedge - 01000AA013A5E000,01000AA013A5E000,UE4;nvdec;status-playable,playable,2021-05-06 15:44:28,1 -3574,Isolomus - 010001F0145A8000,010001F0145A8000,services;status-boots,boots,2021-11-03 7:48:21,2 -3575,Relicta - 01002AD013C52000,01002AD013C52000,status-playable;nvdec;UE4,playable,2022-10-31 12:48:33,2 -3576,Rain on Your Parade - 0100BDD014232000,0100BDD014232000,status-playable,playable,2021-05-06 19:32:04,1 -3579,World's End Club Demo - 0100BE101453E000,0100BE101453E000,,,2021-05-08 16:22:55,1 -3580,Very Very Valet Demo - 01006C8014DDA000,01006C8014DDA000,status-boots;crash;Needs Update;demo,boots,2022-11-12 15:26:13,2 -3581,Miitopia Demo - 01007DA0140E8000,01007DA0140E8000,services;status-menus;crash;demo,menus,2023-02-24 11:50:58,3 -3582,Knight Squad 2 - 010024B00E1D6000,010024B00E1D6000,status-playable;nvdec;online-broken,playable,2022-10-28 18:38:09,1 -3584,Tonarini kanojo noiru shiawase ~ Curious Queen ~ [ となりに彼女のいる幸せ~Curious Queen~] - 0100A18011BE4000,0100A18011BE4000,,,2021-05-11 13:40:34,1 -3585,Mainichi mamoru miya sanchino kyou nogohan [ 毎日♪ 衛宮さんちの今日のごはん ] - 01005E6010114000,01005E6010114000,,,2021-05-11 13:45:30,1 -3588,Commander Keen in Keen Dreams: Definitive Edition - 0100E400129EC000,0100E400129EC000,status-playable,playable,2021-05-11 19:33:54,1 -3589,SD Gundam G Generation Genesis (0100CEE0140CE000),0100CEE0140CE000,,,2021-05-13 12:29:50,1 -3590,Poison Control - 0100EB6012FD2000,0100EB6012FD2000,status-playable,playable,2021-05-16 14:01:54,1 -3591,My Riding Stables 2: A New Adventure - 010042A00FBF0000,010042A00FBF0000,status-playable,playable,2021-05-16 14:14:59,1 -3592,Dragon Audit - 0100DBC00BD5A000,0100DBC00BD5A000,crash;status-ingame,ingame,2021-05-16 14:24:46,1 -3595,Arcaea - 0100E680149DC000,0100E680149DC000,status-playable,playable,2023-03-16 19:31:21,11 -3596,Calculator - 010004701504A000,010004701504A000,status-playable,playable,2021-06-11 13:27:20,2 -3597,Rune Factory 5 (JP) - 010014D01216E000,010014D01216E000,gpu;status-ingame,ingame,2021-06-01 12:00:36,5 -3599,SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00,,status-playable;nvdec,playable,2022-09-15 20:45:57,3 -3601,War Of Stealth - assassin - 01004FA01391A000,01004FA01391A000,status-playable,playable,2021-05-22 17:34:38,1 -3602,Under Leaves - 01008F3013E4E000,01008F3013E4E000,status-playable,playable,2021-05-22 18:13:58,1 -3603,Travel Mosaics 7: Fantastic Berlin - ,,status-playable,playable,2021-05-22 18:37:34,1 -3604,Travel Mosaics 6: Christmas Around the World - 0100D520119D6000,0100D520119D6000,status-playable,playable,2021-05-26 0:52:47,1 -3605,Travel Mosaics 5: Waltzing Vienna - 01004C4010C00000,01004C4010C00000,status-playable,playable,2021-05-26 11:49:35,1 -3606,Travel Mosaics 4: Adventures in Rio - 010096D010BFE000,010096D010BFE000,status-playable,playable,2021-05-26 11:54:58,1 -3607,Travel Mosaics 3: Tokyo Animated - 0100102010BFC000,0100102010BFC000,status-playable,playable,2021-05-26 12:06:27,1 -3608,Travel Mosaics 2: Roman Holiday - 0100A8D010BFA000,0100A8D010BFA000,status-playable,playable,2021-05-26 12:33:16,1 -3609,Travel Mosaics: A Paris Tour - 01007DB00A226000,01007DB00A226000,status-playable,playable,2021-05-26 12:42:26,1 -3610,Rolling Gunner - 010076200CA16000,010076200CA16000,status-playable,playable,2021-05-26 12:54:18,1 -3611,MotoGP 21 - 01000F5013820000,01000F5013820000,gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08,2 -3612,Little Mouse's Encyclopedia - 0100FE0014200000,0100FE0014200000,status-playable,playable,2022-10-28 19:38:58,2 -3615,Himehibi 1 gakki - Princess Days - 0100F8D0129F4000,0100F8D0129F4000,status-nothing;crash,nothing,2021-11-03 8:34:19,6 -3616,Dokapon Up! Mugen no Roulette - 010048100D51A000,010048100D51A000,gpu;status-menus;Needs Update,menus,2022-12-08 19:39:10,6 -3617,Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~ - 01006A300BA2C000,01006A300BA2C000,status-playable;audout,playable,2023-05-04 17:25:23,4 -3618,Paint (0100946012446000),0100946012446000,,,2021-05-31 12:57:19,1 -3622,Knockout City - 01009EF00DDB4000,01009EF00DDB4000,services;status-boots;online-broken,boots,2022-12-09 9:48:58,4 -3623,Trine 2 - 010064E00A932000,010064E00A932000,nvdec;status-playable,playable,2021-06-03 11:45:20,1 -3624,Trine 3: The Artifacts of Power - 0100DEC00A934000,0100DEC00A934000,ldn-untested;online;status-playable,playable,2021-06-03 12:01:24,1 -3625,Jamestown+ - 010000100C4B8000,010000100C4B8000,,,2021-06-05 9:09:39,1 -3626,Lonely Mountains Downhill - 0100A0C00E0DE000,0100A0C00E0DE000,status-playable;online-broken,playable,2024-07-04 5:08:11,4 -3627,Densha de go!! Hashirou Yamanote Sen - 0100BC501355A000,0100BC501355A000,status-playable;nvdec;UE4,playable,2023-11-09 7:47:58,14 -3631,Warui Ohsama to Rippana Yuusha - 0100556011C10000,0100556011C10000,,,2021-06-24 14:22:15,1 -3632,TONY HAWK'S™ PRO SKATER™ 1 + 2 - 0100CC00102B4000,0100CC00102B4000,gpu;status-ingame;Needs Update,ingame,2024-09-24 8:18:14,11 -3633,Mario Golf: Super Rush - 0100C9C00E25C000,0100C9C00E25C000,gpu;status-ingame,ingame,2024-08-18 21:31:48,17 -3634,Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版) - 01001AB0141A8000,01001AB0141A8000,crash;status-ingame,ingame,2021-07-18 7:29:18,7 -3635,LEGO Builder’s Journey - 01005EE0140AE000 ,01005EE0140AE000,,,2021-06-26 21:31:59,1 -3638,Disgaea 6: Defiance of Destiny - 0100ABC013136000,0100ABC013136000,deadlock;status-ingame,ingame,2023-04-15 0:50:32,9 -3641,Game Builder Garage - 0100FA5010788000,0100FA5010788000,status-ingame,ingame,2024-04-20 21:46:22,4 -3644,Miitopia - 01003DA010E8A000,01003DA010E8A000,gpu;services-horizon;status-ingame,ingame,2024-09-06 10:39:13,26 -3645,DOOM Eternal - 0100B1A00D8CE000,0100B1A00D8CE000,gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-08-28 15:57:17,7 -3646,Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+ - 0100FDB00AA800000,0100FDB00AA80000,gpu;status-ingame;nvdec;opengl,ingame,2022-09-14 15:15:55,3 -3647,Sky: Children of the Light - 0100C52011460000,0100C52011460000,cpu;status-nothing;online-broken,nothing,2023-02-23 10:57:10,7 -3649,Tantei bokumetsu 探偵撲滅 - 0100CBA014014000,0100CBA014014000,,,2021-07-11 15:58:42,1 -3650,"The Legend of Heroes: Sen no Kiseki I - 0100AD0014AB4000 (Japan, Asia)",0100AD0014AB4000,,,2021-07-12 11:15:02,1 -3651,SmileBASIC 4 - 0100C9100B06A000,0100C9100B06A000,gpu;status-menus,menus,2021-07-29 17:35:59,2 -3652,The Legend of Zelda: Breath of the Wild Demo - 0100509005AF2000,0100509005AF2000,status-ingame;demo,ingame,2022-12-24 5:02:58,4 -3653,Kanda Alice mo Suiri Suru 神田アリス も 推理スル - 01003BD013E30000,01003BD013E30000,,,2021-07-15 0:30:16,1 -3655,Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi - 01005BA00F486000,01005BA00F486000,status-playable,playable,2021-07-21 10:41:33,2 -3657,The Legend of Zelda: Skyward Sword HD - 01002DA013484000,01002DA013484000,gpu;status-ingame,ingame,2024-06-14 16:48:29,29 -3659,Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。 - 01004E10142FE000,01004E10142FE000,crash;status-ingame,ingame,2021-07-23 10:56:44,3 -3660,Suguru Nature - 0100BF9012AC6000,0100BF9012AC6000,crash;status-ingame,ingame,2021-07-29 11:36:27,3 -3662,Cris Tales - 0100B0400EBC4000,0100B0400EBC4000,crash;status-ingame,ingame,2021-07-29 15:10:53,3 -3666,"Ren'ai, Karichaimashita 恋愛、借りちゃいました - 0100142013cea000",0100142013cea000,,,2021-07-28 0:37:48,1 -3668,Dai Gyakuten Saiban 1 & 2 -Naruhodou Ryuunosuke no Bouken to Kakugo- - 大逆転裁判1&2 -成歩堂龍ノ介の冒險と覺悟- - 0100D7F00FB1A000,0100D7F00FB1A000,,,2021-07-29 6:38:53,1 -3669,New Pokémon Snap - 0100F4300BF2C000,0100F4300BF2C000,status-playable,playable,2023-01-15 23:26:57,4 -3671,Astro Port Shmup Collection - 01000A601139E000,01000A601139E000,,,2021-08-03 13:14:37,1 -3672,Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600,,services;status-ingame,ingame,2022-07-10 19:27:30,5 -3674,Picross S GENESIS and Master System edition - ピクロスS MEGA DRIVE & MARKⅢ edition - 010089701567A000,010089701567A000,,,2021-08-10 4:18:06,2 -3676,ooKing simulator pizza -010033c014666000,010033c014666000,,,2021-08-15 20:49:24,2 -3677,Everyday♪ Today's MENU for EMIYA Family - 010031B012254000,010031B012254000,,,2021-08-15 19:27:36,1 -3679,Hatsune Miku Logic Paint S - 0100B4101459A000,0100B4101459A000,,,2021-08-19 0:23:50,2 -3680,シークレットゲーム KILLER QUEEN for Nintendo Switch,,,,2021-08-21 8:12:41,1 -3681,リベリオンズ: Secret Game 2nd Stage for Nintendo Switch - 010096000B658000,010096000B658000,,,2021-08-21 8:28:40,1 -3682,Susanoh -Nihon Shinwa RPG- - スサノオ ~日本神話RPG~ - 0100F3001472A000,0100F3001472A000,,,2021-08-22 4:20:18,1 -3683,Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H - 0100D7E0110B2000,0100D7E0110B2000,32-bit;status-playable,playable,2022-06-06 0:42:09,8 -3688,World's End Club - 01005A2014362000,01005A2014362000,,,2021-08-28 13:20:14,1 -3689,Axiom Verge 2,,,,2021-09-02 8:01:30,1 -3690,Slot - 01007DD011608000,01007DD011608000,,,2021-09-04 1:40:29,1 -3691,Golf - 01007D8010018000,01007D8010018000,,,2021-09-04 1:55:37,1 -3692,World Soccer - 010083B00B97A000,010083B00B97A000,,,2021-09-04 2:07:29,1 -3693,DogFight - 0100E80013BB0000,0100E80013BB0000,,,2021-09-04 14:12:30,1 -3694,Demon Gaze Extra - デモンゲイズ エクストラ - 01005110142A8000,01005110142A8000,,,2021-09-04 15:06:19,1 -3695,Spy Alarm - 01000E6015350000,01000E6015350000,services;status-ingame,ingame,2022-12-09 10:12:51,2 -3696,Rainbocorns - 01005EE0142F6000,01005EE0142F6000,,,2021-09-04 15:53:49,1 -3697,ZOMB - 0100E2B00E064000,0100E2B00E064000,,,2021-09-04 16:07:19,1 -3698,Bubble - 01004A4011CB4000,01004A4011CB4000,,,2021-09-04 16:16:24,1 -3699,Guitar - 0100A2D00EFBE000,0100A2D00EFBE000,,,2021-09-04 18:54:14,1 -3700,Hunt - 01000DE0125B8000,01000DE0125B8000,,,2021-09-06 11:29:19,1 -3701,Fight - 0100995013404000,0100995013404000,,,2021-09-06 11:31:42,1 -3702,Table Tennis - 0100CB00125B6000,0100CB00125B6000,,,2021-09-06 11:55:38,1 -3703,No More Heroes 3 - 01007C600EB42000,01007C600EB42000,gpu;status-ingame;UE4,ingame,2024-03-11 17:06:19,4 -3704,Idol Days - 愛怒流でいす - 01002EC014BCA000,01002EC014BCA000,gpu;status-ingame;crash,ingame,2021-12-19 15:31:28,3 -3705,Checkers - 01001B80124E4000,01001B80124E4000,,,2021-09-06 16:07:24,1 -3707,King's Bounty II,,,,2021-09-07 21:12:57,1 -3708,KeyWe - 0100E2B012056000,0100E2B012056000,,,2021-09-07 22:30:10,1 -3712,Sonic Colors Ultimate [010040E0116B8000],010040E0116B8000,status-playable,playable,2022-11-12 21:24:26,4 -3713,SpongeBob: Krusty Cook-Off - 01000D3013E8C000,01000D3013E8C000,,,2021-09-08 13:26:06,1 -3714,Snakes & Ladders - 010052C00ABFA000,010052C00ABFA000,,,2021-09-08 13:45:26,1 -3715,Darts - 01005A6010A04000,01005A6010A04000,,,2021-09-08 14:18:00,1 -3716,Luna's Fishing Garden - 0100374015A2C000,0100374015A2C000,,,2021-09-11 11:38:34,1 -3718,WarioWare: Get It Together! - 0100563010E0C000,0100563010E0C000,gpu;status-ingame;opengl-backend-bug,ingame,2024-04-23 1:04:56,5 -3719,SINce Memories Off the starry sky - 0100E94014792000,0100E94014792000,,,2021-09-17 2:03:06,1 -3720,Bang Dream Girls Band Party for Nintendo Switch,,status-playable,playable,2021-09-19 3:06:58,6 -3721,ENDER LILIES: Quietus of the Knights - 0100CCF012E9A000,0100CCF012E9A000,,,2021-09-19 1:10:44,1 -3724,Lost in Random - 01005FE01291A000,01005FE01291A000,gpu;status-ingame,ingame,2022-12-18 7:09:28,9 -3725,Miyamoto Sansuu Kyoushitsu Kashikoku Naru Puzzle Daizen - 宮本算数教室 賢くなるパズル 大全 - 01004ED014160000,01004ED014160000,,,2021-09-30 12:09:06,1 -3726,Hot Wheels Unleashed,,,,2021-10-01 1:14:17,1 -3727,Memories Off - 0100978013276000,0100978013276000,,,2021-10-05 18:50:06,1 -3729,Blue Reflections Second Light [Demo] [JP] - 01002FA01610A000,01002FA01610A000,,,2021-10-08 9:19:34,1 -3730,Metroid Dread - 010093801237C000,010093801237C000,status-playable,playable,2023-11-13 4:02:36,25 -3731,Kentucky Route Zero [0100327005C94000],0100327005C94000,status-playable,playable,2024-04-09 23:22:46,2 -3732,Cotton/Guardian Saturn Tribute Games,,gpu;status-boots,boots,2022-11-27 21:00:51,2 -3733,The Great Ace Attorney Chronicles - 010036E00FB20000,010036E00FB20000,status-playable,playable,2023-06-22 21:26:29,3 -3736,第六妖守-Dairoku-Di Liu Yao Shou -Dairoku -0100ad80135f4000,0100ad80135f4000,,,2021-10-17 4:42:47,1 -3737,Touhou Genso Wanderer -Lotus Labyrinth R- - 0100a7a015e4c000,0100a7a015e4c000,,,2021-10-17 20:10:40,1 -3740,Crysis 2 Remastered - 0100582010AE0000,0100582010AE0000,deadlock;status-menus,menus,2023-09-21 10:46:17,4 -3741,Crysis 3 Remastered - 0100CD3010AE2000 ,0100CD3010AE2000,deadlock;status-menus,menus,2023-09-10 16:03:50,3 -3743,Dying Light: Platinum Edition - 01008c8012920000,01008c8012920000,services-horizon;status-boots,boots,2024-03-11 10:43:32,3 -3745,Steel Assault - 01001C6014772000,01001C6014772000,status-playable,playable,2022-12-06 14:48:30,4 -3746,Foreclosed - 0100AE001256E000,0100AE001256E000,status-ingame;crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12,1 -3751,Nintendo 64 - Nintendo Switch Online - 0100C9A00ECE6000,0100C9A00ECE6000,gpu;status-ingame;vulkan,ingame,2024-04-23 20:21:07,15 -3752,Mario Party Superstars - 01006FE013472000,01006FE013472000,gpu;status-ingame;ldn-works;mac-bug,ingame,2024-05-16 11:23:34,23 -3756,Wheel of Fortune [010033600ADE6000],010033600ADE6000,status-boots;crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24,6 -3757,Abarenbo Tengu & Zombie Nation - 010040E012A5A000,010040E012A5A000,,,2021-10-31 18:24:00,1 -3758,Eight Dragons - 01003AD013BD2000,01003AD013BD2000,status-playable;nvdec,playable,2022-10-27 14:47:28,2 -3760,Restless Night [0100FF201568E000],0100FF201568E000,status-nothing;crash,nothing,2022-02-09 10:54:49,2 -3762,rRootage Reloaded [01005CD015986000],01005CD015986000,status-playable,playable,2022-08-05 23:20:18,10 -3763,Just Dance 2022 - 0100EA6014BB8000,0100EA6014BB8000,gpu;services;status-ingame;crash;Needs Update,ingame,2022-10-28 11:01:53,5 -3764,LEGO Marvel Super Heroes - 01006F600FFC8000,01006F600FFC8000,status-playable,playable,2024-09-10 19:02:19,7 -3765,Destructivator SE [0100D74012E0A000],0100D74012E0A000,,,2021-11-06 14:12:07,1 -3766,Diablo 2 Resurrected - 0100726014352000,0100726014352000,gpu;status-ingame;nvdec,ingame,2023-08-18 18:42:47,16 -3767,World War Z [010099F013898000],010099F013898000,,,2021-11-09 12:00:01,1 -3768,STAR WARS Jedi Knight II Jedi Outcast - 0100BB500EACA000,0100BB500EACA000,gpu;status-ingame,ingame,2022-09-15 22:51:00,3 -3770,Shin Megami Tensei V - 010063B012DC6000,010063B012DC6000,status-playable;UE4,playable,2024-02-21 6:30:07,38 -3771,Mercenaries Rebirth Call of the Wild Lynx - [010031e01627e000],010031e01627e000,,,2021-11-13 17:14:02,1 -3772,Summer Pockets REFLECTION BLUE - 0100273013ECA000,0100273013ECA000,,,2021-11-15 14:25:26,1 -3773,Spelunky - 0100710013ABA000,0100710013ABA000,status-playable,playable,2021-11-20 17:45:03,2 -3774,Spelunky 2 - 01007EC013ABC000,01007EC013ABC000,,,2021-11-17 19:31:16,1 -3775,MARSUPILAMI-HOOBADVENTURE - 010074F014628000,010074F014628000,,,2021-11-19 7:43:14,1 -3776,Pokémon Brilliant Diamond - 0100000011D90000,0100000011D90000,gpu;status-ingame;ldn-works,ingame,2024-08-28 13:26:35,54 -3778,Ice Station Z - 0100954014718000,0100954014718000,status-menus;crash,menus,2021-11-21 20:02:15,4 -3784,Shiro - 01000244016BAE000,01000244016BAE00,gpu;status-ingame,ingame,2024-01-13 8:54:39,2 -3785,Yuru Camp △ Have a nice day! - 0100D12014FC2000,0100D12014FC2000,,,2021-11-29 10:46:03,1 -3786,Iridium - 010095C016C14000,010095C016C14000,status-playable,playable,2022-08-05 23:19:53,7 -3787,Black The Fall - 0100502007f54000,0100502007f54000,,,2021-12-05 3:08:22,1 -3788,Loop Hero - 010004E01523C000,010004E01523C000,,,2021-12-12 18:11:42,2 -3790,The Battle Cats Unite! - 01001E50141BC000,01001E50141BC000,deadlock;status-ingame,ingame,2021-12-14 21:38:34,2 -3792,Life is Strange: True Colors [0100500012AB4000],0100500012AB4000,gpu;status-ingame;UE4,ingame,2024-04-08 16:11:52,8 -3796,Deathsmiles I・II - 01009120119B4000,01009120119B4000,status-playable,playable,2024-04-08 19:29:00,7 -3797,Deedlit in Wonder Labyrinth - 0100EF0015A9A000,0100EF0015A9A000,deadlock;status-ingame;Needs Update;Incomplete,ingame,2022-01-19 10:00:59,3 -3798,Hamidashi Creative - 01006FF014152000,01006FF014152000,gpu;status-ingame,ingame,2021-12-19 15:30:51,2 -3799,Ys IX: Monstrum Nox - 0100E390124D8000,0100E390124D8000,status-playable,playable,2022-06-12 4:14:42,11 -3801,Animal Crossing New Horizons Island Transfer Tool - 0100F38011CFE000,0100F38011CFE000,services;status-ingame;Needs Update;Incomplete,ingame,2022-12-07 13:51:19,2 -3802,Pokémon Mystery Dungeon Rescue Team DX (DEMO) - 010040800FB54000,010040800FB54000,,,2022-01-09 2:15:04,1 -3804,Monopoly Madness - 01005FF013DC2000,01005FF013DC2000,status-playable,playable,2022-01-29 21:13:52,2 -3805,DoDonPachi Resurrection - 怒首領蜂大復活 - 01005A001489A000,01005A001489A000,status-ingame;32-bit;crash,ingame,2024-01-25 14:37:32,5 -3808,Shadow Man Remastered - 0100C3A013840000,0100C3A013840000,gpu;status-ingame,ingame,2024-05-20 6:01:39,5 -3814,Star Wars - Knights Of The Old Republic - 0100854015868000,0100854015868000,gpu;deadlock;status-boots,boots,2024-02-12 10:13:51,4 -3815,Gunvolt Chronicles: Luminous Avenger iX 2 - 0100763015C2E000,0100763015C2E000,status-nothing;crash;Needs Update,nothing,2022-04-29 15:34:34,4 -3816,Furaiki 4 - 風雨来記4 - 010046601125A000,010046601125A000,,,2022-01-27 17:37:47,1 -3817,Pokémon Legends: Arceus - 01001F5010DFA000,01001F5010DFA000,gpu;status-ingame;Needs Update;ldn-works,ingame,2024-09-19 10:02:02,83 -3826,Demon Gaze EXTRA - 0100FCC0168FC000,0100FCC0168FC000,,,2022-02-05 16:25:26,1 -3828,Fatal Frame: Maiden of Black Water - 0100BEB015604000,0100BEB015604000,status-playable,playable,2023-07-05 16:01:40,5 -3830,OlliOlli World - 0100C5D01128E000,0100C5D01128E000,,,2022-02-08 13:01:22,1 -3831,Horse Club Adventures - 0100A6B012932000,0100A6B012932000,,,2022-02-10 1:59:25,4 -3832,Toree 3D (0100E9701479E000),0100E9701479E000,,,2022-02-15 18:41:33,1 -3833,Picross S7,,status-playable,playable,2022-02-16 12:51:25,2 -3834,Nintendo Switch Sports Online Play Test - 01000EE017182000,01000EE017182000,gpu;status-ingame,ingame,2022-03-16 7:44:12,3 -3836,MLB The Show 22 Tech Test - 0100A9F01776A000,0100A9F01776A000,services;status-nothing;crash;Needs Update;demo,nothing,2022-12-09 10:28:34,2 -3837,Cruis'n Blast - 0100B41013C82000,0100B41013C82000,gpu;status-ingame,ingame,2023-07-30 10:33:47,10 -3839,Crunchyroll - 0100C090153B4000,0100C090153B4000,,,2022-02-20 13:56:29,2 -3840,PUZZLE & DRAGONS Nintendo Switch Edition - 01001D701375A000,01001D701375A000,,,2022-02-20 11:01:34,1 -3842,Hatsune Miku Connecting Puzzle TAMAGOTORI - 0100118016036000,0100118016036000,,,2022-02-23 2:07:05,1 -3844,Mononoke Slashdown - 0100F3A00FB78000,0100F3A00FB78000,status-menus;crash,menus,2022-05-04 20:55:47,4 -3846,Tsukihime - A piece of blue glass moon- - 01001DC01486A800,01001DC01486A800,,,2022-02-28 14:35:38,1 -3849,Kirby and the Forgotten Land (Demo version) - 010091201605A000,010091201605A000,status-playable;demo,playable,2022-08-21 21:03:01,3 -3850,Super Zangyura - 01001DA016942000,01001DA016942000,,,2022-03-05 4:54:47,1 -3851,Atelier Sophie 2: The Alchemist of the Mysterious Dream - 010082A01538E000,010082A01538E000,status-ingame;crash,ingame,2022-12-01 4:34:03,10 -3852,SEGA Genesis - Nintendo Switch Online - 0100B3C014BDA000,0100B3C014BDA000,status-nothing;crash;regression,nothing,2022-04-11 7:27:21,3 -3853,TRIANGLE STRATEGY - 0100CC80140F8000,0100CC80140F8000,gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37,23 -3854,Pretty Girls Breakers! - 0100DD2017994000,0100DD2017994000,,,2022-03-10 3:43:51,1 -3855,Chocobo GP - 01006A30124CA000,01006A30124CA000,gpu;status-ingame;crash,ingame,2022-06-04 14:52:18,11 -3856,.hack//G.U. Last Recode - 0100BA9014A02000,0100BA9014A02000,deadlock;status-boots,boots,2022-03-12 19:15:47,6 -3857,Monster World IV - 01008CF014560000,01008CF014560000,,,2022-03-12 4:25:01,1 -3858,Cosmos Bit - 01004810171EA000,01004810171EA000,,,2022-03-12 4:25:58,1 -3859,The Cruel King and the Great Hero - 0100EBA01548E000,0100EBA01548E000,gpu;services;status-ingame,ingame,2022-12-02 7:02:08,2 -3860,Lateral Freeze ,,,,2022-03-15 16:00:18,1 -3862,Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath Demo - 0100FA7017CA6000,0100FA7017CA6000,,,2022-03-19 7:26:02,1 -3863,Neptunia X SENRAN KAGURA Ninja Wars - 01006D90165A2000,01006D90165A2000,,,2022-03-21 6:58:28,1 -3864,13 Sentinels Aegis Rim Demo - 0100C54015002000,0100C54015002000,status-playable;demo,playable,2022-04-13 14:15:48,2 -3866,Kirby and the Forgotten Land - 01004D300C5AE000,01004D300C5AE000,gpu;status-ingame,ingame,2024-03-11 17:11:21,35 -3867,Love of Love Emperor of LOVE! - 010015C017776000,010015C017776000,,,2022-03-25 8:46:23,1 -3868,Hatsune Miku JIGSAW PUZZLE - 010092E016B26000,010092E016B26000,,,2022-03-25 8:49:39,1 -3870,The Ryuo's Work is Never Done! - 010033100EE12000,010033100EE12000,status-playable,playable,2022-03-29 0:35:37,1 -3871,Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath - 01005AB015994000,01005AB015994000,gpu;status-playable,playable,2022-03-28 2:22:24,1 -3875,MLB® The Show™ 22 - 0100876015D74000,0100876015D74000,gpu;slow;status-ingame,ingame,2023-04-25 6:28:43,8 -3878,13 Sentinels Aegis Rim - 01003FC01670C000,01003FC01670C000,slow;status-ingame,ingame,2024-06-10 20:33:38,9 -3879,Metal Dogs ,,,,2022-04-15 14:32:19,1 -3881,STAR WARS: The Force Unleashed - 0100153014544000,0100153014544000,status-playable,playable,2024-05-01 17:41:28,3 -3882,JKSV - 00000000000000000,0000000000000000,,,2022-04-21 23:34:59,1 -3886,Jigsaw Masterpieces - 0100BB800E0D2000,0100BB800E0D2000,,,2022-05-04 21:14:45,1 -3887,QuickSpot - 0100E4501677E000,0100E4501677E000,,,2022-05-04 21:14:48,1 -3888,Yomawari 3 - 0100F47016F26000,0100F47016F26000,status-playable,playable,2022-05-10 8:26:51,6 -3889,Marco & The Galaxy Dragon Demo - 0100DA7017C9E000,0100DA7017C9E000,gpu;status-ingame;demo,ingame,2023-06-03 13:05:33,2 -3890,Demon Turf: Neon Splash - 010010C017B28000,010010C017B28000,,,2022-05-04 21:35:59,1 -3896,Taiko Risshiden V DX - 0100346017304000,0100346017304000,status-nothing;crash,nothing,2022-06-06 16:25:31,3 -3901,The Stanley Parable: Ultra Deluxe - 010029300E5C4000,010029300E5C4000,gpu;status-ingame,ingame,2024-07-12 23:18:26,6 -3902,CHAOS;HEAD NOAH - 0100957016B90000,0100957016B90000,status-playable,playable,2022-06-02 22:57:19,1 -3904,LOOPERS - 010062A0178A8000,010062A0178A8000,gpu;slow;status-ingame;crash,ingame,2022-06-17 19:21:45,3 -3905,二ノ国 白き聖灰の女王 - 010032400E700000,010032400E700000,services;status-menus;32-bit,menus,2023-04-16 17:11:06,8 -3907,even if TEMPEST - 010095E01581C000,010095E01581C000,gpu;status-ingame,ingame,2023-06-22 23:50:25,8 -3908,Mario Strikers Battle League Football First Kick [01008A30182F2000],01008A30182F2000,,,2022-06-09 20:58:06,2 -3910,Mario Strikers: Battle League Football - 010019401051C000,010019401051C000,status-boots;crash;nvdec,boots,2024-05-07 6:23:56,13 -3911,鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles - 0100309016E7A000,0100309016E7A000,status-playable;UE4,playable,2024-08-08 4:51:49,12 -3912,Teenage Mutant Ninja Turtles: Shredder's Revenge - 0100FE701475A000,0100FE701475A000,deadlock;status-boots;crash,boots,2024-09-28 9:31:39,14 -3913,MOFUMOFU Sensen - 0100B46017500000,0100B46017500000,gpu;status-menus,menus,2024-09-21 21:51:08,2 -3914,OMORI - 010014E017B14000,010014E017B14000,status-playable,playable,2023-01-07 20:21:02,2 -3916,30 in 1 game collection vol. 2 - 0100DAC013D0A000,0100DAC013D0A000,status-playable;online-broken,playable,2022-10-15 17:22:27,6 -3917,索尼克:起源 / Sonic Origins - 01009FB016286000,01009FB016286000,status-ingame;crash,ingame,2024-06-02 7:20:15,10 -3919,Fire Emblem Warriors: Three Hopes - 010071F0143EA000,010071F0143EA000,gpu;status-ingame;nvdec,ingame,2024-05-01 7:07:42,6 -3920,LEGO Star Wars: The Skywalker Saga - 010042D00D900000,010042D00D900000,gpu;slow;status-ingame,ingame,2024-04-13 20:08:46,4 -3922,Pocky & Rocky Reshrined - 01000AF015596000,01000AF015596000,,,2022-06-26 21:34:16,1 -3923,Horgihugh And Friends - 010085301797E000,010085301797E000,,,2022-06-26 21:34:22,1 -3924,The movie The Quintessential Bride -Five Memories Spent with You- - 01005E9016BDE000,01005E9016BDE000,status-playable,playable,2023-12-14 14:43:43,2 -3925,nx-hbmenu - 0000000000000000,0000000000000000,status-boots;Needs Update;homebrew,boots,2024-04-06 22:05:32,12 -3926,Portal 2 - 0100ABD01785C000,0100ABD01785C000,gpu;status-ingame,ingame,2023-02-20 22:44:15,3 -3927,Portal - 01007BB017812000,01007BB017812000,status-playable,playable,2024-06-12 3:48:29,5 -3928,EVE ghost enemies - 01007BE0160D6000,01007BE0160D6000,gpu;status-ingame,ingame,2023-01-14 3:13:30,4 -3929,PowerSlave Exhumed - 01008E100E416000,01008E100E416000,gpu;status-ingame,ingame,2023-07-31 23:19:10,2 -3930,Quake - 0100BA5012E54000,0100BA5012E54000,gpu;status-menus;crash,menus,2022-08-08 12:40:34,3 -3932,Rustler - 010071E0145F8000,010071E0145F8000,,,2022-07-06 2:09:18,1 -3933,Colors Live - 010020500BD86000,010020500BD86000,gpu;services;status-boots;crash,boots,2023-02-26 2:51:07,3 -3934,WAIFU IMPACT - 0100393016D7E000,0100393016D7E000,,,2022-07-08 22:16:51,1 -3935,Sherlock Holmes: The Devil's Daughter - 010020F014DBE000,010020F014DBE000,gpu;status-ingame,ingame,2022-07-11 0:07:26,3 -3936,0100EE40143B6000 - Fire Emblem Warriors: Three Hopes (Japan) ,0100EE40143B6000,,,2022-07-11 18:41:30,4 -3938,Wunderling - 01001C400482C000,01001C400482C000,audio;status-ingame;crash,ingame,2022-09-10 13:20:12,2 -3939,SYNTHETIK: Ultimate - 01009BF00E7D2000,01009BF00E7D2000,gpu;status-ingame;crash,ingame,2022-08-30 3:19:25,2 -3940,Breakout: Recharged - 010022C016DC8000,010022C016DC8000,slow;status-ingame,ingame,2022-11-06 15:32:57,3 -3942,Banner Saga Trilogy - 0100CE800B94A000,0100CE800B94A000,slow;status-playable,playable,2024-03-06 11:25:20,2 -3943,CAPCOM BELT ACTION COLLECTION - 0100F6400A77E000,0100F6400A77E000,status-playable;online;ldn-untested,playable,2022-07-21 20:51:23,1 -3944,死神と少女/Shinigami to Shoujo - 0100AFA01750C000,0100AFA01750C000,gpu;status-ingame;Incomplete,ingame,2024-03-22 1:06:45,8 -3946,Darius Cozmic Collection Special Edition - 010059C00BED4000,010059C00BED4000,status-playable,playable,2022-07-22 16:26:50,1 -3950,Earthworms - 0100DCE00B756000,0100DCE00B756000,status-playable,playable,2022-07-25 16:28:55,1 -3951,LIVE A LIVE - 0100CF801776C000,0100CF801776C000,status-playable;UE4;amd-vendor-bug,playable,2023-02-05 15:12:07,15 -3952,Fit Boxing - 0100807008868000 ,0100807008868000,status-playable,playable,2022-07-26 19:24:55,1 -3953,Gurimugurimoa OnceMore Demo - 01002C8018554000,01002C8018554000,status-playable,playable,2022-07-29 22:07:31,2 -3954,Trinity Trigger Demo - 010048201891A000,010048201891A000,,,2022-07-26 23:32:10,1 -3955,SD GUNDAM BATTLE ALLIANCE Demo - 0100829018568000,0100829018568000,audio;status-ingame;crash;demo,ingame,2022-08-01 23:01:20,4 -3956,Fortnite - 010025400AECE000,010025400AECE000,services-horizon;status-nothing,nothing,2024-04-06 18:23:25,5 -3957,Furi Definitive Edition - 01000EC00AF98000,01000EC00AF98000,status-playable,playable,2022-07-27 12:35:08,1 -3958,Jackbox Party Starter - 0100814017CB6000,0100814017CB6000,Incomplete,,2022-07-29 22:18:07,3 -3959,Digimon Survive - 010047500B7B2000,010047500B7B2000,,,2022-07-29 12:33:28,1 -3960,Xenoblade Chronicles 3 - 010074F013262000,010074F013262000,gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44,73 -3961,Slime Rancher: Plortable Edition - 0100B9C0148D0000,0100B9C0148D0000,,,2022-07-30 6:02:55,1 -3962,Lost Ruins - 01008AD013A86800,01008AD013A86800,gpu;status-ingame,ingame,2023-02-19 14:09:00,3 -3963,Heroes of Hammerwatch - 0100D2B00BC54000,0100D2B00BC54000,status-playable,playable,2022-08-01 18:30:21,1 -3965,Zombie Army 4: Dead War - ,,,,2022-08-01 20:03:53,1 -3966,Plague Inc: Evolved - 01000CE00CBB8000,01000CE00CBB8000,,,2022-08-02 2:32:33,1 -3968,Kona - 0100464009294000,0100464009294000,status-playable,playable,2022-08-03 12:48:19,1 -3969,Minecraft: Story Mode - The Complete Adventure - 010059C002AC2000,010059C002AC2000,status-boots;crash;online-broken,boots,2022-08-04 18:56:58,1 -3970,LA-MULANA - 010026000F662800,010026000F662800,gpu;status-ingame,ingame,2022-08-12 1:06:21,3 -3971,Minecraft: Story Mode - Season Two - 01003EF007ABA000,01003EF007ABA000,status-playable;online-broken,playable,2023-03-04 0:30:50,3 -3972,My Riding Stables - Life with Horses - 010028F00ABAE000,010028F00ABAE000,status-playable,playable,2022-08-05 21:39:07,1 -3973,NBA Playgrounds - 010002900294A000,010002900294A000,status-playable;nvdec;online-broken;UE4,playable,2022-08-06 17:06:59,1 -3975,Nintendo Labo Toy-Con 02: Robot Kit - 01009AB0034E0000,01009AB0034E0000,gpu;status-ingame,ingame,2022-08-07 13:03:19,1 -3976,Nintendo Labo Toy-Con 04: VR Kit - 0100165003504000,0100165003504000,services;status-boots;crash,boots,2023-01-17 22:30:24,4 -3977,Azure Striker GUNVOLT 3 - 01004E90149AA000,01004E90149AA000,status-playable,playable,2022-08-10 13:46:49,2 -3978,Clumsy Rush Ultimate Guys - 0100A8A0174A4000,0100A8A0174A4000,,,2022-08-10 2:12:29,1 -3979,The DioField Chronicle Demo - 01009D901624A000,01009D901624A000,,,2022-08-10 2:18:16,1 -3980,Professional Construction - The Simulation - 0100A9800A1B6000,0100A9800A1B6000,slow;status-playable,playable,2022-08-10 15:15:45,1 -3981,"Pokémon: Let's Go, Pikachu! demo - 01009AD008C4C000",01009AD008C4C000,slow;status-playable;demo,playable,2023-11-26 11:23:20,3 -3984,Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000,0100069000078000,services;status-nothing;crash,nothing,2022-08-11 13:19:41,1 -3985,Retimed - 010086E00BCB2000,010086E00BCB2000,status-playable,playable,2022-08-11 13:32:39,1 -3986,DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET - 010051C0134F8000,010051C0134F8000,status-playable;vulkan-backend-bug,playable,2024-08-28 0:03:50,5 -3987,Runbow Deluxe Edition - 0100D37009B8A000,0100D37009B8A000,status-playable;online-broken,playable,2022-08-12 12:20:25,1 -3988,Saturday Morning RPG - 0100F0000869C000,0100F0000869C000,status-playable;nvdec,playable,2022-08-12 12:41:50,1 -3989,Slain Back from Hell - 0100BB100AF4C000,0100BB100AF4C000,status-playable,playable,2022-08-12 23:36:19,1 -3990,Spidersaurs - 010040B017830000,010040B017830000,,,2022-08-14 3:12:30,1 -3993,月姫 -A piece of blue glass moon- - 01001DC01486A000,01001DC01486A000,,,2022-08-15 15:41:29,1 -3994,Spacecats with Lasers - 0100D9B0041CE000,0100D9B0041CE000,status-playable,playable,2022-08-15 17:22:44,1 -3995,Spellspire - 0100E74007EAC000,0100E74007EAC000,status-playable,playable,2022-08-16 11:21:21,1 -3996,Spot The Difference - 0100E04009BD4000,0100E04009BD4000,status-playable,playable,2022-08-16 11:49:52,1 -3997,Spot the Differences: Party! - 010052100D1B4000,010052100D1B4000,status-playable,playable,2022-08-16 11:55:26,1 -3998,Demon Throttle - 01001DA015650000,01001DA015650000,,,2022-08-17 0:54:49,1 -3999,Kirby’s Dream Buffet - 0100A8E016236000,0100A8E016236000,status-ingame;crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44,5 -4000,DOTORI - 0100DBD013C92000,0100DBD013C92000,,,2022-08-17 15:10:52,1 -4002,Syberia 2 - 010028C003FD6000,010028C003FD6000,gpu;status-ingame,ingame,2022-08-24 12:43:03,2 -4003,Drive Buy - 010093A0108DC000,010093A0108DC000,,,2022-08-21 3:30:18,1 -4004,Taiko no Tatsujin Rhythm Festival Demo - 0100AA2018846000,0100AA2018846000,,,2022-08-22 23:31:57,1 -4005,Splatoon 3: Splatfest World Premiere - 0100BA0018500000,0100BA0018500000,gpu;status-ingame;online-broken;demo,ingame,2022-09-19 3:17:12,5 -4006,Transcripted - 010009F004E66000,010009F004E66000,status-playable,playable,2022-08-25 12:13:11,1 -4010,eBaseball Powerful Pro Yakyuu 2022 - 0100BCA016636000,0100BCA016636000,gpu;services-horizon;status-nothing;crash,nothing,2024-05-26 23:07:19,32 -4011,Firegirl: Hack 'n Splash Rescue DX - 0100DAF016D48000,0100DAF016D48000,,,2022-08-30 15:32:22,1 -4012,Little Noah: Scion of Paradise - 0100535014D76000,0100535014D76000,status-playable;opengl-backend-bug,playable,2022-09-14 4:17:13,2 -4013,Tinykin - 0100A73016576000,0100A73016576000,gpu;status-ingame,ingame,2023-06-18 12:12:24,3 -4014,Youtubers Life - 00100A7700CCAA4000,00100A7700CCAA40,status-playable;nvdec,playable,2022-09-03 14:56:19,1 -4015,Cozy Grove - 01003370136EA000,01003370136EA000,gpu;status-ingame,ingame,2023-07-30 22:22:19,2 -4016,A Duel Hand Disaster: Trackher - 010026B006802000,010026B006802000,status-playable;nvdec;online-working,playable,2022-09-04 14:24:55,1 -4017,Angry Bunnies: Colossal Carrot Crusade - 0100F3500D05E000,0100F3500D05E000,status-playable;online-broken,playable,2022-09-04 14:53:26,1 -4018,CONTRA: ROGUE CORPS Demo - 0100B8200ECA6000,0100B8200ECA6000,gpu;status-ingame,ingame,2022-09-04 16:46:52,1 -4021,The Gardener and the Wild Vines - 01006350148DA000,01006350148DA000,gpu;status-ingame,ingame,2024-04-29 16:32:10,2 -4025,HAAK - 0100822012D76000,0100822012D76000,gpu;status-ingame,ingame,2023-02-19 14:31:05,2 -4026,Temtem - 0100C8B012DEA000,0100C8B012DEA000,status-menus;online-broken,menus,2022-12-17 17:36:11,4 -4027,Oniken - 010057C00D374000,010057C00D374000,status-playable,playable,2022-09-10 14:22:38,1 -4028,Ori and the Blind Forest: Definitive Edition Demo - 010005800F46E000,010005800F46E000,status-playable,playable,2022-09-10 14:40:12,1 -4029,Spyro Reignited Trilogy - 010077B00E046000,010077B00E046000,status-playable;nvdec;UE4,playable,2022-09-11 18:38:33,1 -4031,Disgaea 4 Complete+ Demo - 010068C00F324000,010068C00F324000,status-playable;nvdec,playable,2022-09-13 15:21:59,1 -4032,Disney Classic Games: Aladdin and The Lion King - 0100A2F00EEFC000 ,0100A2F00EEFC000,status-playable;online-broken,playable,2022-09-13 15:44:17,1 -4035,Pokémon Shield - 01008DB008C2C000,01008DB008C2C000,deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 7:20:22,7 -4036,Shadowrun Returns - 0100371013B3E000,0100371013B3E000,gpu;status-ingame;Needs Update,ingame,2022-10-04 21:32:31,4 -4037,Shadowrun: Dragonfall - Director's Cut - 01008310154C4000,01008310154C4000,gpu;status-ingame;Needs Update,ingame,2022-10-04 20:52:18,3 -4038,Shadowrun: Hong Kong - Extended Edition - 0100C610154CA000,0100C610154CA000,gpu;status-ingame;Needs Update,ingame,2022-10-04 20:53:09,3 -4039,Animal Drifters - 010057F0195DE000,010057F0195DE000,,,2022-09-20 21:43:54,1 -4040,Paddles - 0100F5E019300000,0100F5E019300000,,,2022-09-20 21:46:00,1 -4041,River City Girls Zero - 0100E2D015DEA000,0100E2D015DEA000,,,2022-09-20 22:18:30,1 -4042,JoJos Bizarre Adventure All-Star Battle R - 01008120128C2000,01008120128C2000,status-playable,playable,2022-12-03 10:45:10,2 -4044,OneShot: World Machine EE,,,,2022-09-22 8:11:47,1 -4045,Taiko no Tatsujin: Rhythm Festival - 0100BCA0135A0000,0100BCA0135A0000,status-playable,playable,2023-11-13 13:16:34,17 -4046,Trinity Trigger - 01002D7010A54000,01002D7010A54000,status-ingame;crash,ingame,2023-03-03 3:09:09,4 -4048,太鼓之達人 咚咚雷音祭 - 01002460135a4000,01002460135a4000,,,2022-09-27 7:17:54,1 -4049,Life is Strange Remastered - 0100DC301186A000,0100DC301186A000,status-playable;UE4,playable,2022-10-03 16:54:44,12 -4050,Life is Strange: Before the Storm Remastered - 010008501186E000,010008501186E000,status-playable,playable,2023-09-28 17:15:44,4 -4051,Hatsune Miku: Project DIVA Mega Mix - 01001CC00FA1A000,01001CC00FA1A000,audio;status-playable;online-broken,playable,2024-01-07 23:12:57,10 -4053,Shovel Knight Dig - 0100B62017E68000,0100B62017E68000,,,2022-09-30 20:51:35,1 -4054,Couch Co-Op Bundle Vol. 2 - 01000E301107A000,01000E301107A000,status-playable;nvdec,playable,2022-10-02 12:04:21,1 -4056,Shadowverse: Champion’s Battle - 01003B90136DA000,01003B90136DA000,status-nothing;crash,nothing,2023-03-06 0:31:50,7 -4057,Jinrui no Ninasama he - 0100F4D00D8BE000,0100F4D00D8BE000,status-ingame;crash,ingame,2023-03-07 2:04:17,1 -4058,XEL - 0100CC9015360000,0100CC9015360000,gpu;status-ingame,ingame,2022-10-03 10:19:39,2 -4059,Catmaze - 01000A1018DF4000,01000A1018DF4000,,,2022-10-03 11:10:48,1 -4060,Lost Lands: Dark Overlord - 0100BDD010AC8000 ,0100BDD010AC8000,status-playable,playable,2022-10-03 11:52:58,1 -4061,STAR WARS Episode I: Racer - 0100BD100FFBE000 ,0100BD100FFBE000,slow;status-playable;nvdec,playable,2022-10-03 16:08:36,1 -4062,Story of Seasons: Friends of Mineral Town - 0100ED400EEC2000,0100ED400EEC2000,status-playable,playable,2022-10-03 16:40:31,1 -4063,Collar X Malice -Unlimited- - 0100E3B00F412000 ,0100E3B00F412000,status-playable;nvdec,playable,2022-10-04 15:30:40,1 -4064,Bullet Soul - 0100DA4017FC2000,0100DA4017FC2000,,,2022-10-05 9:41:49,1 -4065,Kwaidan ~Azuma manor story~ - 0100894011F62000 ,0100894011F62000,status-playable,playable,2022-10-05 12:50:44,1 -4066,Shantae: Risky's Revenge - Director's Cut - 0100ADA012370000,0100ADA012370000,status-playable,playable,2022-10-06 20:47:39,2 -4067,NieR:Automata The End of YoRHa Edition - 0100B8E016F76000,0100B8E016F76000,slow;status-ingame;crash,ingame,2024-05-17 1:06:34,23 -4069,Star Seeker: The secret of the sourcerous Standoff - 0100DFC018D86000,0100DFC018D86000,,,2022-10-09 15:46:05,1 -4072,Hyrule Warriors: Age of Calamity - Demo Version - 0100A2C01320E000,0100A2C01320E000,slow;status-playable,playable,2022-10-10 17:37:41,1 -4073,My Universe - Fashion Boutique - 0100F71011A0A000,0100F71011A0A000,status-playable;nvdec,playable,2022-10-12 14:54:19,1 -4075,Star Trek Prodigy: Supernova - 01009DF015776000,01009DF015776000,status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50,2 -4076,Dungeon Nightmares 1 + 2 Collection - 0100926013600000,0100926013600000,status-playable,playable,2022-10-17 18:54:22,1 -4077,Food Truck Tycoon - 0100F3900D0F0000 ,0100F3900D0F0000,status-playable,playable,2022-10-17 20:15:55,1 -4078,Persona 5 Royal - 01005CA01580EOO,,,,2022-10-17 21:00:21,1 -4079,Nintendo Switch Sports - 0100D2F00D5C0000,0100D2F00D5C0000,deadlock;status-boots,boots,2024-09-10 14:20:24,24 -4080,Grim Legends 2: Song Of The Dark Swan - 010078E012D80000,010078E012D80000,status-playable;nvdec,playable,2022-10-18 12:58:45,1 -4082,My Universe - Cooking Star Restaurant - 0100CD5011A02000,0100CD5011A02000,status-playable,playable,2022-10-19 10:00:44,1 -4083,Not Tonight - 0100DAF00D0E2000 ,0100DAF00D0E2000,status-playable;nvdec,playable,2022-10-19 11:48:47,1 -4084,Outbreak: The New Nightmare - 0100B450130FC000,0100B450130FC000,status-playable,playable,2022-10-19 15:42:07,1 -4085,Alan Wake Remaster - 01000623017A58000,01000623017A5800,,,2022-10-21 6:13:39,2 -4086,Persona 5 Royal - 01005CA01580E000,01005CA01580E000,gpu;status-ingame,ingame,2024-08-17 21:45:15,15 -4087,Shing! (サムライフォース:斬!) - 01009050133B4000,01009050133B4000,status-playable;nvdec,playable,2022-10-22 0:48:54,2 -4089,Mario + Rabbids® Sparks of Hope - 0100317013770000,0100317013770000,gpu;status-ingame;Needs Update,ingame,2024-06-20 19:56:19,35 -4090,3D Arcade Fishing - 010010C013F2A000,010010C013F2A000,status-playable,playable,2022-10-25 21:50:51,1 -4091,Aerial Knight's Never Yield - 0100E9B013D4A000,0100E9B013D4A000,status-playable,playable,2022-10-25 22:05:00,1 -4092,Aluna: Sentinel of the Shards - 010045201487C000,010045201487C000,status-playable;nvdec,playable,2022-10-25 22:17:03,1 -4093,Atelier Firis: The Alchemist and the Mysterious Journey DX - 010023201421E000,010023201421E000,gpu;status-ingame;nvdec,ingame,2022-10-25 22:46:19,1 -4094,Atelier Sophie: The Alchemist of the Mysterious Book DX - 01001A5014220000,01001A5014220000,status-playable,playable,2022-10-25 23:06:20,1 -4095,Backworlds - 0100FEA014316000,0100FEA014316000,status-playable,playable,2022-10-25 23:20:34,1 -4097,Bakumatsu Renka SHINSENGUMI - 01008260138C4000,01008260138C4000,status-playable,playable,2022-10-25 23:37:31,1 -4098,Bamerang - 01008D30128E0000,01008D30128E0000,status-playable,playable,2022-10-26 0:29:39,1 -4099,Battle Axe - 0100747011890000,0100747011890000,status-playable,playable,2022-10-26 0:38:01,1 -4100,Beautiful Desolation - 01006B0014590000,01006B0014590000,gpu;status-ingame;nvdec,ingame,2022-10-26 10:34:38,1 -4101,Bladed Fury - 0100DF0011A6A000,0100DF0011A6A000,status-playable,playable,2022-10-26 11:36:26,1 -4102,Boris The Rocket - 010092C013FB8000,010092C013FB8000,status-playable,playable,2022-10-26 13:23:09,1 -4103,BraveMatch - 010081501371E000,010081501371E000,status-playable;UE4,playable,2022-10-26 13:32:15,1 -4104,Brawl Chess - 010068F00F444000,010068F00F444000,status-playable;nvdec,playable,2022-10-26 13:59:17,1 -4108,CLANNAD Side Stories - 01007B01372C000,,status-playable,playable,2022-10-26 15:03:04,1 -4109,DC Super Hero Girls™: Teen Power - 0100F8F00C4F2000,0100F8F00C4F2000,nvdec,,2022-10-26 15:16:47,1 -4110,Devil Slayer - Raksasi - 01003C900EFF6000,01003C900EFF6000,status-playable,playable,2022-10-26 19:42:32,1 -4111,Disagaea 6: Defiance of Destiny Demo - 0100918014B02000,0100918014B02000,status-playable;demo,playable,2022-10-26 20:02:04,1 -4113,DreamWorks Spirit Lucky's Big Adventure - 0100236011B4C000,0100236011B4C000,status-playable,playable,2022-10-27 13:30:52,1 -4114,Dull Grey - 010068D0141F2000,010068D0141F2000,status-playable,playable,2022-10-27 13:40:38,1 -4115,Dunk Lords - 0100EC30140B6000,0100EC30140B6000,status-playable,playable,2024-06-26 0:07:26,3 -4116,Earth Defense Force: World Brothers - 0100298014030000,0100298014030000,status-playable;UE4,playable,2022-10-27 14:13:31,1 -4117,EQI - 01000FA0149B6000,01000FA0149B6000,status-playable;nvdec;UE4,playable,2022-10-27 16:42:32,1 -4118,Exodemon - 0100A82013976000,0100A82013976000,status-playable,playable,2022-10-27 20:17:52,1 -4119,Famicom Detective Club: The Girl Who Stands Behind - 0100D670126F6000,0100D670126F6000,status-playable;nvdec,playable,2022-10-27 20:41:40,1 -4120,Famicom Detective Club: The Missing Heir - 010033F0126F4000,010033F0126F4000,status-playable;nvdec,playable,2022-10-27 20:56:23,1 -4121,Fighting EX Layer Another Dash - 0100D02014048000,0100D02014048000,status-playable;online-broken;UE4,playable,2024-04-07 10:22:33,2 -4122,Fire: Ungh's Quest - 010025C014798000,010025C014798000,status-playable;nvdec,playable,2022-10-27 21:41:26,1 -4125,Haunted Dawn: The Zombie Apocalypse - 01009E6014F18000,01009E6014F18000,status-playable,playable,2022-10-28 12:31:51,1 -4126,Yomawari: The Long Night Collection - 010043D00BA3200,,Incomplete,,2022-10-29 10:23:17,6 -4128,Splatoon 3 - 0100C2500FC20000,0100C2500FC20000,status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11,38 -4129,Bayonetta 3 - 01004A4010FEA000,01004A4010FEA000,gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33,45 -4130,Instant Sports Tennis - 010031B0145B8000,010031B0145B8000,status-playable,playable,2022-10-28 16:42:17,1 -4131,Just Die Already - 0100AC600CF0A000,0100AC600CF0A000,status-playable;UE4,playable,2022-12-13 13:37:50,2 -4132,King of Seas Demo - 0100515014A94000,0100515014A94000,status-playable;nvdec;UE4,playable,2022-10-28 18:09:31,1 -4133,King of Seas - 01008D80148C8000,01008D80148C8000,status-playable;nvdec;UE4,playable,2022-10-28 18:29:41,1 -4134,Layers of Fear 2 - 01001730144DA000,01001730144DA000,status-playable;nvdec;UE4,playable,2022-10-28 18:49:52,1 -4135,Leisure Suit Larry - Wet Dreams Dry Twice - 010031A0135CA000,010031A0135CA000,status-playable,playable,2022-10-28 19:00:57,1 -4136,Life of Fly 2 - 010069A01506E000,010069A01506E000,slow;status-playable,playable,2022-10-28 19:26:52,1 -4137,Maneater - 010093D00CB22000,010093D00CB22000,status-playable;nvdec;UE4,playable,2024-05-21 16:11:57,3 -4138,Mighty Goose - 0100AD701344C000,0100AD701344C000,status-playable;nvdec,playable,2022-10-28 20:25:38,1 -4139,Missing Features 2D - 0100E3601495C000,0100E3601495C000,status-playable,playable,2022-10-28 20:52:54,1 -4140,Moorkuhn Kart 2 - 010045C00F274000,010045C00F274000,status-playable;online-broken,playable,2022-10-28 21:10:35,1 -4141,NINJA GAIDEN 3: Razor's Edge - 01002AF014F4C000,01002AF014F4C000,status-playable;nvdec,playable,2023-08-11 8:25:31,3 -4142,Nongunz: Doppelganger Edition - 0100542012884000,0100542012884000,status-playable,playable,2022-10-29 12:00:39,1 -4143,O---O - 01002E6014FC4000,01002E6014FC4000,status-playable,playable,2022-10-29 12:12:14,1 -4144,Off And On Again - 01006F5013202000,01006F5013202000,status-playable,playable,2022-10-29 19:46:26,3 -4145,Outbreak: Endless Nightmares - 0100A0D013464000,0100A0D013464000,status-playable,playable,2022-10-29 12:35:49,1 -4146,Picross S6 - 010025901432A000,010025901432A000,status-playable,playable,2022-10-29 17:52:19,1 -4147,Alfred Hitchcock - Vertigo - 0100DC7013F14000,0100DC7013F14000,,,2022-10-30 7:55:43,1 -4148,Port Royale 4 - 01007EF013CA0000,01007EF013CA0000,status-menus;crash;nvdec,menus,2022-10-30 14:34:06,1 -4149,Quantum Replica - 010045101288A000,010045101288A000,status-playable;nvdec;UE4,playable,2022-10-30 21:17:22,1 -4150,R-TYPE FINAL 2 - 0100F930136B6000,0100F930136B6000,slow;status-ingame;nvdec;UE4,ingame,2022-10-30 21:46:29,1 -4152,Retrograde Arena - 01000ED014A2C000,01000ED014A2C000,status-playable;online-broken,playable,2022-10-31 13:38:58,1 -4153,Rising Hell - 010020C012F48000,010020C012F48000,status-playable,playable,2022-10-31 13:54:02,1 -4154,Grand Theft Auto III - The Definitive Edition [0100C3C012718000],0100C3C012718000,,,2022-10-31 20:13:51,1 -4156,Grand Theft Auto: San Andreas - The Definitive Edition [010065A014024000],010065A014024000,,,2022-10-31 20:13:56,1 -4157,Hell Pie - 01000938017E5C000,01000938017E5C00,status-playable;nvdec;UE4,playable,2022-11-03 16:48:46,5 -4158,Zengeon - 0100057011E50000,0100057011E50000,services-horizon;status-boots;crash,boots,2024-04-29 15:43:07,2 -4159,Teenage Mutant Ninja Turtles: The Cowabunga Collection - 0100FDB0154E4000,0100FDB0154E4000,status-playable,playable,2024-01-22 19:39:04,2 -4160,Rolling Sky 2 - 0100579011B40000 ,0100579011B40000,status-playable,playable,2022-11-03 10:21:12,1 -4161,RWBY: Grimm Eclipse - 0100E21013908000,0100E21013908000,status-playable;online-broken,playable,2022-11-03 10:44:01,1 -4164,Shin Megami Tensei III Nocturne HD Remaster - 01003B0012DC2000,01003B0012DC2000,status-playable,playable,2022-11-03 22:53:27,1 -4165,BALDO THE GUARDIAN OWLS - 0100a75005e92000,0100a75005e92000,,,2022-11-04 6:36:18,1 -4166,Skate City - 0100134011E32000,0100134011E32000,status-playable,playable,2022-11-04 11:37:39,1 -4167,SnowRunner - 0100FBD13AB6000,,services;status-boots;crash,boots,2023-10-07 0:01:16,5 -4168,Spooky Chase - 010097C01336A000,010097C01336A000,status-playable,playable,2022-11-04 12:17:44,1 -4169,Strange Field Football - 01000A6013F86000,01000A6013F86000,status-playable,playable,2022-11-04 12:25:57,1 -4170,Subnautica Below Zero - 010014C011146000,010014C011146000,status-playable,playable,2022-12-23 14:15:13,1 -4171,Subnautica - 0100429011144000,0100429011144000,status-playable;vulkan-backend-bug,playable,2022-11-04 13:07:29,1 -4173,Pyramid Quest - 0100A4E017372000,0100A4E017372000,gpu;status-ingame,ingame,2023-08-16 21:14:52,3 -4174,Sonic Frontiers - 01004AD014BF0000,01004AD014BF0000,gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 9:18:53,52 -4177,Metro 2033 Redux - 0100D4900E82C000,0100D4900E82C000,gpu;status-ingame,ingame,2022-11-09 10:53:13,3 -4180,Tactics Ogre Reborn - 0100E12013C1A000,0100E12013C1A000,status-playable;vulkan-backend-bug,playable,2024-04-09 6:21:35,3 -4182,"Good Night, Knight - 01003AD0123A2000",01003AD0123A2000,status-nothing;crash,nothing,2023-07-30 23:38:13,2 -4183,Sumire - 01003D50126A4000,01003D50126A4000,status-playable,playable,2022-11-12 13:40:43,1 -4184,Sunblaze - 0100BFE014476000,0100BFE014476000,status-playable,playable,2022-11-12 13:59:23,1 -4185,Taiwan Monster Fruit : Prologue - 010028E013E0A000,010028E013E0A000,Incomplete,,2022-11-12 14:10:20,1 -4187,Tested on Humans: Escape Room - 01006F701507A000,01006F701507A000,status-playable,playable,2022-11-12 14:42:52,1 -4188,The Longing - 0100F3D0122C2000,0100F3D0122C2000,gpu;status-ingame,ingame,2022-11-12 15:00:58,1 -4189,Total Arcade Racing - 0100A64010D48000,0100A64010D48000,status-playable,playable,2022-11-12 15:12:48,1 -4190,Very Very Valet - 0100379013A62000,0100379013A62000,status-playable;nvdec,playable,2022-11-12 15:25:51,1 -4191,Persona 4 Arena ULTIMAX [010075A016A3A000),010075A016A3A000,,,2022-11-12 17:27:51,1 -4192,Piofiore: Episodio 1926 - 01002B20174EE000,01002B20174EE000,status-playable,playable,2022-11-23 18:36:05,2 -4193,Seven Pirates H - 0100D6F016676000,0100D6F016676000,status-playable,playable,2024-06-03 14:54:12,3 -4194,Paradigm Paradox - 0100DC70174E0000,0100DC70174E0000,status-playable;vulkan-backend-bug,playable,2022-12-03 22:28:13,3 -4195,Wanna Survive - 0100D67013910000,0100D67013910000,status-playable,playable,2022-11-12 21:15:43,1 -4196,Wardogs: Red's Return - 010056901285A000,010056901285A000,status-playable,playable,2022-11-13 15:29:01,1 -4197,Warhammer Age of Sigmar: Storm Ground - 010031201307A000,010031201307A000,status-playable;nvdec;online-broken;UE4,playable,2022-11-13 15:46:14,1 -4198,Wing of Darkness - 010035B012F2000,,status-playable;UE4,playable,2022-11-13 16:03:51,1 -4199,Ninja Gaiden Sigma - 0100E2F014F46000,0100E2F014F46000,status-playable;nvdec,playable,2022-11-13 16:27:02,1 -4200,Ninja Gaiden Sigma 2 - 0100696014FA000,,status-playable;nvdec,playable,2024-07-31 21:53:48,12 -4201,MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version - 010042501329E000,010042501329E000,status-playable;demo,playable,2022-11-13 22:20:26,1 -4202,112 Operator - 0100D82015774000,0100D82015774000,status-playable;nvdec,playable,2022-11-13 22:42:50,1 -4204,Aery - Calm Mind - 0100A801539000,,status-playable,playable,2022-11-14 14:26:58,1 -4205,Alex Kidd in Miracle World DX - 010025D01221A000,010025D01221A000,status-playable,playable,2022-11-14 15:01:34,1 -4209,Atari 50 The Anniversary Celebration - 010099801870E000,010099801870E000,slow;status-playable,playable,2022-11-14 19:42:10,4 -4210,FOOTBALL MANAGER 2023 TOUCH - 0100EDC01990E000,0100EDC01990E000,gpu;status-ingame,ingame,2023-08-01 3:40:53,15 -4212,ARIA CHRONICLE - 0100691013C46000,0100691013C46000,status-playable,playable,2022-11-16 13:50:55,1 -4216,B.ARK - 01009B901145C000,01009B901145C000,status-playable;nvdec,playable,2022-11-17 13:35:02,1 -4217,Pokémon Violet - 01008F6008C5E000,01008F6008C5E000,gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 2:51:48,39 -4218,Pokémon Scarlet - 0100A3D008C5C000,0100A3D008C5C000,gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29,36 -4219,Bear's Restaurant - 0100CE014A4E000,,status-playable,playable,2024-08-11 21:26:59,2 -4220,BeeFense BeeMastered - 010018F007786000,010018F007786000,status-playable,playable,2022-11-17 15:38:12,1 -4222,Oddworld: Soulstorm - 0100D210177C6000,0100D210177C6000,services-horizon;status-boots;crash,boots,2024-08-18 13:13:26,6 -4224,Aquarium Hololive All CG,,,,2022-11-19 5:12:23,1 -4225,Billion Road - 010057700FF7C000,010057700FF7C000,status-playable,playable,2022-11-19 15:57:43,1 -4226,No Man’s Sky - 0100853015E86000,0100853015E86000,gpu;status-ingame,ingame,2024-07-25 5:18:17,13 -4228,Lunistice - 0100C2E01254C000,0100C2E01254C000,,,2022-11-23 18:44:18,1 -4229,The Oregon Trail - 0100B080184BC000,0100B080184BC000,gpu;status-ingame,ingame,2022-11-25 16:11:49,12 -4232,Smurfs Kart - 01009790186FE000,01009790186FE000,status-playable,playable,2023-10-18 0:55:00,6 -4233,DYSMANTLE - 010008900BC5A000,010008900BC5A000,gpu;status-ingame,ingame,2024-07-15 16:24:12,2 -4234,Happy Animals Mini Golf - 010066C018E50000,010066C018E50000,gpu;status-ingame,ingame,2022-12-04 19:24:28,2 -4237,Pocket Pool - 010019F019168000,010019F019168000,,,2022-11-27 3:36:39,1 -4238,7 Days of Rose - 01002D3019654000,01002D3019654000,,,2022-11-27 20:46:16,1 -4239,Garfield Lasagna Party - 01003C401895E000,01003C401895E000,,,2022-11-27 21:21:09,1 -4240,Paper Bad - 01002A0019914000,01002A0019914000,,,2022-11-27 22:01:45,1 -4242,Ultra Kaiju Monster Rancher - 01008E0019388000,01008E0019388000,,,2022-11-28 2:37:06,1 -4244,The Legend of Heroes: Trails from Zero - 01001920156C2000,01001920156C2000,gpu;status-ingame;mac-bug,ingame,2024-09-14 21:41:41,5 -4249,Harvestella - 0100A280187BC000,0100A280187BC000,status-playable;UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 7:04:11,4 -4251,Ace Angler: Fishing Spirits - 01007C50132C8000,01007C50132C8000,status-menus;crash,menus,2023-03-03 3:21:39,2 -4255,WHITE DAY : A labyrinth named school - 010076601839C000,010076601839C000,,,2022-12-03 7:17:03,1 -4257,Bravery and Greed - 0100F60017D4E000,0100F60017D4E000,gpu;deadlock;status-boots,boots,2022-12-04 2:23:47,2 -4260,River City Girls 2 - 01002E80168F4000,01002E80168F4000,status-playable,playable,2022-12-07 0:46:27,1 -4262,SAMURAI MAIDEN - 01003CE018AF6000,01003CE018AF6000,,,2022-12-05 2:56:48,1 -4263,Front Mission 1st Remake - 0100F200178F4000,0100F200178F4000,status-playable,playable,2023-06-09 7:44:24,9 -4267,Cardfight!! Vanguard Dear Days - 0100097016B04000,0100097016B04000,,,2022-12-06 0:37:12,1 -4268,MOL SOCCER ONLINE Lite - 010034501756C000,010034501756C000,,,2022-12-06 0:41:58,1 -4269,Goonya Monster - 010026301785A000,010026301785A000,,,2022-12-06 0:46:24,1 -4273,Battle Spirits Connected Battlers - 01009120155CC000,01009120155CC000,,,2022-12-07 0:21:33,1 -4274,TABE-O-JA - 0100E330127FC000,0100E330127FC000,,,2022-12-07 0:26:47,1 -4276,Solomon Program - 01008A801370C000,01008A801370C000,,,2022-12-07 0:33:02,1 -4278,Dragon Quest Treasures - 0100217014266000,0100217014266000,gpu;status-ingame;UE4,ingame,2023-05-09 11:16:52,11 -4279,Sword of the Necromancer - 0100E4701355C000,0100E4701355C000,status-ingame;crash,ingame,2022-12-10 1:28:39,2 -4280,Dragon Prana - 01001C5019074000,01001C5019074000,,,2022-12-10 2:10:53,1 -4281,Burger Patrol - 010013D018E8A000,010013D018E8A000,,,2022-12-10 2:12:02,1 -4284,Witch On The Holy Night - 010012A017F18800,010012A017F18800,status-playable,playable,2023-03-06 23:28:11,3 -4285,Hakoniwa Ranch Sheep Village - 010059C017346000 ,010059C017346000,,,2022-12-13 3:04:03,1 -4286,KASIORI - 0100E75014D7A000,0100E75014D7A000,,,2022-12-13 3:05:00,1 -4287,CRISIS CORE –FINAL FANTASY VII– REUNION - 01004BC0166CC000,01004BC0166CC000,status-playable,playable,2022-12-19 15:53:59,3 -4288,Bitmaster - 010026E0141C8000,010026E0141C8000,status-playable,playable,2022-12-13 14:05:51,1 -4289,Black Book - 0100DD1014AB8000,0100DD1014AB8000,status-playable;nvdec,playable,2022-12-13 16:38:53,1 -4290,Carnivores: Dinosaur Hunt,,status-playable,playable,2022-12-14 18:46:06,1 -4297,Trivial Pursuit Live! 2 - 0100868013FFC000,0100868013FFC000,status-boots,boots,2022-12-19 0:04:33,6 -4300,Astrologaster - 0100B80010C48000,0100B80010C48000,cpu;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:31,3 -4303,Factorio - 01004200189F4000,01004200189F4000,deadlock;status-boots,boots,2024-06-11 19:26:16,8 -4305,The Punchuin - 01004F501962C000,01004F501962C000,,,2022-12-28 0:51:46,2 -4306,Adventure Academia The Fractured Continent - 01006E6018570000,01006E6018570000,,,2022-12-29 3:35:04,1 -4307,Illusion Garden Story ~Daiichi Sangyo Yuukarin~ - 01003FE0168EA000,01003FE0168EA000,,,2022-12-29 3:39:06,1 -4308,Popplings - 010063D019A70000,010063D019A70000,,,2022-12-29 3:42:21,1 -4309,Sports Story - 010025B0100D0000,010025B0100D0000,,,2022-12-29 3:45:54,1 -4310,Death Bite Shibito Magire - 01002EB01802A000,01002EB01802A000,,,2022-12-29 3:51:54,1 -4311,Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!! - 01002D60188DE000,01002D60188DE000,status-ingame;crash,ingame,2023-03-17 1:54:01,2 -4312,Asphalt 9 Legends - 01007B000C834800,01007B000C834800,,,2022-12-30 5:19:35,1 -4313,Arcade Archives TETRIS THE GRAND MASTER - 0100DFD016B7A000,0100DFD016B7A000,status-playable,playable,2024-06-23 1:50:29,3 -4314,Funny action Great adventure for good adults - 0100BB1018082000,0100BB1018082000,,,2023-01-01 3:13:21,1 -4315,Fairy Fencer F Refrain Chord - 010048C01774E000,010048C01774E000,,,2023-01-01 3:15:45,1 -4320,Needy Streamer Overload,,,,2023-01-01 23:24:14,1 -4321,Absolute Hero Remodeling Plan - 0100D7D015CC2000,0100D7D015CC2000,,,2023-01-02 3:42:59,1 -4322,Fourth God -Reunion- - 0100BF50131E6000,0100BF50131E6000,,,2023-01-02 3:45:28,1 -4323,Doll Princess of Marl Kingdom - 010078E0181D0000,010078E0181D0000,,,2023-01-02 3:49:45,1 -4324,Oshiritantei Pupupu Mirai no Meitantei Tojo! - 01000F7014504000,01000F7014504000,,,2023-01-02 3:51:59,1 -4325,Moshikashite Obake no Shatekiya for Nintendo Switch - 0100B580144F6000,0100B580144F6000,,,2023-01-02 3:55:10,1 -4326,Platinum Train-A trip through Japan - 0100B9400654E000,0100B9400654E000,,,2023-01-02 3:58:00,1 -4327,Deadly Eating Adventure Meshi - 01007B70146F6000,01007B70146F6000,,,2023-01-02 4:00:31,1 -4328,Gurimugurimoa OnceMore - 01003F5017760000,01003F5017760000,,,2023-01-02 4:03:49,1 -4329,Neko-Tomo - 0100FA00082BE000,0100FA00082BE000,,,2023-01-03 4:43:05,1 -4330,Wreckfest - 0100DC0012E48000,0100DC0012E48000,status-playable,playable,2023-02-12 16:13:00,2 -4331,VARIOUS DAYLIFE - 0100538017BAC000,0100538017BAC000,,,2023-01-03 13:41:46,1 -4332,WORTH LIFE - 0100D46014648000,0100D46014648000,,,2023-01-04 2:58:27,1 -4333,void* tRrLM2(); //Void Terrarium 2 - 010078D0175EE000,010078D0175EE000,status-playable,playable,2023-12-21 11:00:41,3 -4334,Witch's Garden - 010061501904E000,010061501904E000,gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 2:11:24,1 -4337,PUI PUI MOLCAR Let’s! MOLCAR PARTY! - 01004F6015612000,01004F6015612000,,,2023-01-05 23:05:00,1 -4339,Galleria Underground Labyrinth and the Witch’s Brigade - 01007010157B4000,01007010157B4000,,,2023-01-07 1:05:40,1 -4340,Simona's Requiem - 0100E8C019B36000,0100E8C019B36000,gpu;status-ingame,ingame,2023-02-21 18:29:19,2 -4342,Sonic Frontiers: Demo - 0100D0201A062000,0100D0201A062000,,,2023-01-07 14:50:19,1 -4345,Alphadia Neo - 010043101944A000,010043101944A000,,,2023-01-09 1:47:53,1 -4346,It’s Kunio-kun’s Three Kingdoms! - 0100056014DE0000,0100056014DE0000,,,2023-01-09 1:50:08,1 -4347,Neon White - 0100B9201406A000,0100B9201406A000,status-ingame;crash,ingame,2023-02-02 22:25:06,9 -4349,Typing Quest - 0100B7101475E000,0100B7101475E000,,,2023-01-10 3:23:00,1 -4350,Moorhuhn Jump and Run Traps and Treasures - 0100E3D014ABC000,0100E3D014ABC000,status-playable,playable,2024-03-08 15:10:02,2 -4351,Bandit Detective Buzzard - 01005DB0180B4000,01005DB0180B4000,,,2023-01-10 3:27:34,1 -4355,Curved Space - 0100CE5014026000,0100CE5014026000,status-playable,playable,2023-01-14 22:03:50,1 -4356,Destroy All Humans! - 01009E701356A000,01009E701356A000,gpu;status-ingame;nvdec;UE4,ingame,2023-01-14 22:23:53,1 -4357,Dininho Space Adventure - 010027E0158A6000,010027E0158A6000,status-playable,playable,2023-01-14 22:43:04,1 -4358,Vengeful Guardian: Moonrider - 01003A8018E60000,01003A8018E60000,deadlock;status-boots,boots,2024-03-17 23:35:37,11 -4359,Sumikko Gurashi Atsumare! Sumikko Town - 0100508013B26000,0100508013B26000,,,2023-01-16 4:42:55,1 -4360,Lone Ruin - 0100B6D016EE6000,0100B6D016EE6000,status-ingame;crash;nvdec,ingame,2023-01-17 6:41:19,3 -4363,Falcon Age - 0100C3F011B58000,0100C3F011B58000,,,2023-01-17 2:43:00,1 -4367,Persona 4 Golden - 010062B01525C000,010062B01525C000,status-playable,playable,2024-08-07 17:48:07,15 -4369,Persona 3 Portable - 0100DCD01525A000,0100DCD01525A000,,,2023-01-19 20:20:27,1 -4370,Fire Emblem: Engage - 0100A6301214E000,0100A6301214E000,status-playable;amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26,49 -4373,Sifu - 01007B5017A12000,01007B5017A12000,,,2023-01-20 19:58:54,5 -4374,Silver Nornir - 0100D1E018F26000,0100D1E018F26000,,,2023-01-21 4:25:06,1 -4375,Together - 010041C013C94000,010041C013C94000,,,2023-01-21 4:26:20,1 -4376,Party Party Time - 0100C6A019C84000,0100C6A019C84000,,,2023-01-21 4:27:40,1 -4379,Sumikko Gurashi Gakkou Seikatsu Hajimerun desu - 010070800D3E2000,010070800D3E2000,,,2023-01-22 2:47:34,1 -4380,Sumikko Gurashi Sugoroku every time in the corner - 0100713012BEC000,0100713012BEC000,,,2023-01-22 2:49:00,1 -4381,EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition - 01001C8016B4E000,01001C8016B4E000,gpu;status-ingame;crash,ingame,2024-06-10 23:33:05,26 -4382,Gesshizu Mori no Chiisana Nakama-tachi - 0100A0D011014000,0100A0D011014000,,,2023-01-23 3:56:43,1 -4383,Chickip Dancers Norinori Dance de Kokoro mo Odoru - 0100D85017B26000,0100D85017B26000,,,2023-01-23 3:56:47,1 -4384,Go Rally - 010055A0161F4000,010055A0161F4000,gpu;status-ingame,ingame,2023-08-16 21:18:23,5 -4385,Devil Kingdom - 01002F000E8F2000,01002F000E8F2000,status-playable,playable,2023-01-31 8:58:44,2 -4388,Cricket 22 - 0100387017100000,0100387017100000,status-boots;crash,boots,2023-10-18 8:01:57,2 -4389,サマータイムレンダ Another Horizon - 01005940182ec000,01005940182ec000,,,2023-01-28 2:15:25,1 -4390,Letters - a written adventure - 0100CE301678E800,0100CE301678E800,gpu;status-ingame,ingame,2023-02-21 20:12:38,2 -4391,Prinny Presents NIS Classics Volume 1 - 0100A6E01681C000,0100A6E01681C000,status-boots;crash;Needs Update,boots,2023-02-02 7:23:09,5 -4392,SpongeBob SquarePants The Cosmic Shake - 01009FB0172F4000,01009FB0172F4000,gpu;status-ingame;UE4,ingame,2023-08-01 19:29:53,3 -4393,THEATRHYTHM FINAL BAR LINE DEMO Version - 01004C5018BC4000,01004C5018BC4000,,,2023-02-01 16:59:55,1 -4395,"Blue Reflection: Second Light [USA, Europe] - 010071C013390000",010071C013390000,,,2023-02-02 2:44:04,1 -4396,牧場物語 Welcome!ワンダフルライフ - 0100936018EB4000,0100936018EB4000,status-ingame;crash,ingame,2023-04-25 19:43:52,6 -4397,Coromon - 010048D014322000,010048D014322000,,,2023-02-03 0:47:51,1 -4399,Exitman Deluxe - 0100648016520000,0100648016520000,,,2023-02-04 2:02:03,1 -4400,Life is Strange 2 - 0100FD101186C000,0100FD101186C000,status-playable;UE4,playable,2024-07-04 5:05:58,5 -4401,Fashion Police Squad,,Incomplete,,2023-02-05 12:36:50,2 -4402,Grindstone - 0100538012496000,0100538012496000,status-playable,playable,2023-02-08 15:54:06,2 -4403,Kemono Friends Picross - 01004B100BDA2000,01004B100BDA2000,status-playable,playable,2023-02-08 15:54:34,2 -4404,Picross Lord Of The Nazarick - 010012100E8DC000,010012100E8DC000,status-playable,playable,2023-02-08 15:54:56,2 -4406,Shovel Knight Pocket Dungeon - 01006B00126EC000,01006B00126EC000,,,2023-02-08 20:12:10,1 -4407,Game Boy - Nintendo Switch Online - 0100C62011050000,0100C62011050000,status-playable,playable,2023-03-21 12:43:48,2 -4408,ゲームボーイ Nintendo Switch Online - 0100395011044000,0100395011044000,,,2023-02-08 23:53:21,1 -4409,Game Boy Advance - Nintendo Switch Online - 010012F017576000,010012F017576000,status-playable,playable,2023-02-16 20:38:15,4 -4410,Kirby’s Return to Dream Land Deluxe - Demo - 010091D01A57E000,010091D01A57E000,status-playable;demo,playable,2023-02-18 17:21:55,3 -4411,Metroid Prime Remastered - 010012101468C000,010012101468C000,gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15,53 -4413,WBSC eBASEBALL: POWER PROS - 01007D9019626000,01007D9019626000,,,2023-02-09 2:56:56,1 -4414,Tricky Towers - 010015F005C8E000,010015F005C8E000,,,2023-02-09 14:58:15,1 -4415,Clunky Hero - [0100879019212000],0100879019212000,,,2023-02-10 7:41:34,1 -4416,Mercenaries Lament Requiem of the Silver Wolf - 0100E44019E4C000,0100E44019E4C000,,,2023-02-11 4:36:39,1 -4417,Pixel Cup Soccer Ultimate Edition - 0100E17019782000,0100E17019782000,,,2023-02-11 14:28:11,1 -4418,Sea of Stars Demo - 010036F0182C4000,010036F0182C4000,status-playable;demo,playable,2023-02-12 15:33:56,2 -4419,MistWorld the after - 010003801579A000,010003801579A000,,,2023-02-13 3:40:17,1 -4420,MistWorld the after 2 - 0100C50016CD6000,0100C50016CD6000,,,2023-02-13 3:40:23,1 -4421,Wonder Boy Anniversary Collection - 0100B49016FF0000,0100B49016FF0000,deadlock;status-nothing,nothing,2023-04-20 16:01:48,2 -4422,OddBallers - 010079A015976000,010079A015976000,,,2023-02-13 3:40:35,1 -4423,Game Doraemon Nobita’s Space War 2021 - 01000200128A4000,01000200128A4000,,,2023-02-14 2:52:57,1 -4424,Doraemon Nobita’s Brain Exercise Adventure - 0100E6F018D10000,0100E6F018D10000,,,2023-02-14 2:54:51,1 -4425,Makai Senki Disgaea 7 - 0100A78017BD6000,0100A78017BD6000,status-playable,playable,2023-10-05 0:22:18,3 -4427,Blanc - 010039501405E000,010039501405E000,gpu;slow;status-ingame,ingame,2023-02-22 14:00:13,3 -4428,Arcade Machine Gopher’s Revenge - 0100DCB019CAE000,0100DCB019CAE000,,,2023-02-15 21:48:46,1 -4429,Santa Claus Goblins Attack - 0100A0901A3E4000,0100A0901A3E4000,,,2023-02-15 21:48:50,1 -4430,Garden of Pets - 010075A01A312000,010075A01A312000,,,2023-02-15 21:48:52,1 -4431,THEATRHYTHM FINAL BAR LINE - 010024201834A000,010024201834A000,status-playable,playable,2023-02-19 19:58:57,5 -4432,Rob Riches - 010061501A2B6000,010061501A2B6000,,,2023-02-16 4:44:01,1 -4433,Cuddly Forest Friends - 01005980198D4000,01005980198D4000,,,2023-02-16 4:44:04,1 -4434,Dragon Quest X Awakening Five Races Offline - 0100E2E0152E4000,0100E2E0152E4000,status-playable;nvdec;UE4,playable,2024-08-20 10:04:24,4 -4435,Persona 5 Strikers Bonus Content - (01002F101340C000),01002F101340C000,,,2023-02-16 20:29:01,1 -4436,Let’s play duema! - 0100EFC0152E0000,0100EFC0152E0000,,,2023-02-18 3:09:55,1 -4437,Let’s play duema Duel Masters! 2022 - 010006C017354000,010006C017354000,,,2023-02-18 3:09:58,1 -4438,Heterogeneous Strongest King Encyclopedia Battle Coliseum - 0100BD00198AA000,0100BD00198AA000,,,2023-02-18 3:10:01,1 -4439,Hopping Girl Kohane EX - 0100D2B018F5C000,0100D2B018F5C000,,,2023-02-19 0:57:25,1 -4440,Earth Defense Force 2 for Nintendo Switch - 010082B013C8C000,010082B013C8C000,,,2023-02-19 1:13:14,1 -4441,Earth Defense Force 3 for Nintendo Switch - 0100E87013C98000,0100E87013C98000,,,2023-02-19 1:13:21,1 -4442,PAC-MAN WORLD Re-PAC - 0100D4401565E000,0100D4401565E000,,,2023-02-19 18:49:11,1 -4443,Eastward - 010071B00F63A000,010071B00F63A000,,,2023-02-19 19:50:36,1 -4444,Arcade Archives THE NEWZEALAND STORY - 010045D019FF0000,010045D019FF0000,,,2023-02-20 1:59:58,1 -4445,Foxy’s Coin Hunt - 0100EE401A378000,0100EE401A378000,,,2023-02-20 2:00:00,1 -4446,Samurai Warrior - 0100B6501A360000,0100B6501A360000,status-playable,playable,2023-02-27 18:42:38,2 -4447,NCL USA Bowl - 010004801A450000,010004801A450000,,,2023-02-20 2:00:05,1 -4449,Dadish - 0100B8B013310000,0100B8B013310000,,,2023-02-20 23:19:02,1 -4450,Dadish 2 - 0100BB70140BA000,0100BB70140BA000,,,2023-02-20 23:28:43,1 -4451,Dadish 3 - 01001010181AA000,01001010181AA000,,,2023-02-20 23:38:55,1 -4453,Digimon World: Next Order - 0100F00014254000,0100F00014254000,status-playable,playable,2023-05-09 20:41:06,9 -4454,PAW Patrol The Movie: Adventure City Calls - 0100FFE013628000,0100FFE013628000,,,2023-02-22 14:09:11,1 -4455,PAW Patrol: Grand Prix - 0100360016800000,0100360016800000,gpu;status-ingame,ingame,2024-05-03 16:16:11,2 -4456,Gigantosaurus Dino Kart - 01001890167FE000,01001890167FE000,,,2023-02-23 3:15:01,1 -4457,Rise Of Fox Hero - 0100A27018ED0000,0100A27018ED0000,,,2023-02-23 3:15:04,1 -4458,MEGALAN 11 - 0100C7501360C000,0100C7501360C000,,,2023-02-23 3:15:06,1 -4459,Rooftop Renegade - 0100644012F0C000,0100644012F0C000,,,2023-02-23 3:15:10,1 -4460,Kirby’s Return to Dream Land Deluxe - 01006B601380E000,01006B601380E000,status-playable,playable,2024-05-16 19:58:04,14 -4461,Snow Bros. Special - 0100bfa01787c000,0100bfa01787c000,,,2023-02-24 2:25:54,1 -4462,Toree 2 - 0100C7301658C000,0100C7301658C000,,,2023-02-24 3:15:04,1 -4463,Red Hands - 2 Player Games - 01003B2019424000,01003B2019424000,,,2023-02-24 3:53:12,1 -4464,nPaint - 0100917019FD6000,0100917019FD6000,,,2023-02-24 3:53:18,1 -4465,Octopath Traveler II - 0100A3501946E000,0100A3501946E000,gpu;status-ingame;amd-vendor-bug,ingame,2024-09-22 11:39:20,29 -4466,Planet Cube Edge - 01007EA019CFC000,01007EA019CFC000,status-playable,playable,2023-03-22 17:10:12,2 -4467,Rumble Sus - 0100CE201946A000,0100CE201946A000,,,2023-02-25 2:19:01,1 -4468,Easy Come Easy Golf - 0100ECF01800C000,0100ECF01800C000,status-playable;online-broken;regression,playable,2024-04-04 16:15:00,5 -4470,Piano Learn and Play - 010038501A6B8000,010038501A6B8000,,,2023-02-26 2:57:12,1 -4471,nOS new Operating System - 01008AE019614000,01008AE019614000,status-playable,playable,2023-03-22 16:49:08,2 -4472,XanChuchamel - 0100D970191B8000,0100D970191B8000,,,2023-02-26 2:57:19,1 -4477,Rune Factory 3 Special - 01001EF017BE6000,01001EF017BE6000,,,2023-03-02 5:34:40,1 -4478,Light Fingers - 0100A0E005E42000,0100A0E005E42000,,,2023-03-03 3:04:09,1 -4479,Disaster Detective Saiga An Indescribable Mystery - 01005BF01A3EC000,01005BF01A3EC000,,,2023-03-04 0:34:26,1 -4480,Touhou Gouyoku Ibun ~ Sunken Fossil World. - 0100031018CFE000,0100031018CFE000,,,2023-03-04 0:34:29,1 -4485,Ninja Box - 0100272009E32000,0100272009E32000,,,2023-03-06 0:31:44,1 -4487,Rubber Bandits - 010060801843A000,010060801843A000,,,2023-03-07 22:26:57,1 -4489,Arcade Archives DON DOKO DON - 0100B6201A2AA000,0100B6201A2AA000,,,2023-03-14 0:13:52,1 -4490,Knights and Guns - 010060A011ECC000,010060A011ECC000,,,2023-03-14 0:13:54,1 -4491,Process of Elimination Demo - 01007F6019E2A000,01007F6019E2A000,,,2023-03-14 0:13:57,1 -4492,DREDGE [ CHAPTER ONE ] - 01000AB0191DA000,01000AB0191DA000,,,2023-03-14 1:49:12,1 -4493,Bayonetta Origins Cereza and the Lost Demon Demo - 010002801A3FA000,010002801A3FA000,gpu;status-ingame;demo,ingame,2024-02-17 6:06:28,4 -4494,Yo-Kai Watch 4++ - 010086C00AF7C000,010086C00AF7C000,status-playable,playable,2024-06-18 20:21:44,13 -4495,Tama Cannon - 0100D8601A848000,0100D8601A848000,,,2023-03-15 1:08:05,1 -4496,The Smile Alchemist - 0100D1C01944E000,0100D1C01944E000,,,2023-03-15 1:08:08,1 -4497,Caverns of Mars Recharged - 01009B201A10E000,01009B201A10E000,,,2023-03-15 1:08:12,1 -4498,Roniu's Tale - 010007E0193A2000,010007E0193A2000,,,2023-03-15 1:08:18,1 -4499,Mythology Waifus Mahjong - 0100C7101A5BE000,0100C7101A5BE000,,,2023-03-15 1:08:23,1 -4500,emoji Kart Racer - 0100AC601A26A000,0100AC601A26A000,,,2023-03-17 1:53:50,1 -4501,Self gunsbase - 01006BB015486000,01006BB015486000,,,2023-03-17 1:53:53,1 -4502,Melon Journey - 0100F68019636000,0100F68019636000,status-playable,playable,2023-04-23 21:20:01,3 -4503,Bayonetta Origins: Cereza and the Lost Demon - 0100CF5010FEC000,0100CF5010FEC000,gpu;status-ingame,ingame,2024-02-27 1:39:49,20 -4504,Uta no prince-sama All star After Secret - 01008030149FE000,01008030149FE000,,,2023-03-18 16:08:20,1 -4505,Hampuzz - 0100D85016326000,0100D85016326000,,,2023-03-19 0:39:40,1 -4506,Gotta Protectors Cart of Darkness - 01007570160E2000,01007570160E2000,,,2023-03-19 0:39:43,1 -4507,Game Type DX - 0100433017DAC000,0100433017DAC000,,,2023-03-20 0:29:23,1 -4508,Ray'z Arcade Chronology - 010088D018302000,010088D018302000,,,2023-03-20 0:29:26,1 -4509,Ruku's HeartBalloon - 01004570192D8000,01004570192D8000,,,2023-03-20 0:29:30,1 -4510,Megaton Musashi - 01001AD00E41E000,01001AD00E41E000,,,2023-03-21 1:11:33,1 -4511,Megaton Musashi X - 0100571018A70000,0100571018A70000,,,2023-03-21 1:11:39,1 -4513,In the Mood - 0100281017990000,0100281017990000,,,2023-03-22 0:53:54,1 -4514,Sixtar Gate STARTRAIL - 0100D29019BE4000,0100D29019BE4000,,,2023-03-22 0:53:57,1 -4515,Spelunker HD Deluxe - 010095701381A000,010095701381A000,,,2023-03-22 0:54:02,1 -4518,Pizza Tycoon - 0100A6301788E000,0100A6301788E000,,,2023-03-23 2:00:04,1 -4520,Cubic - 010081F00EAB8000,010081F00EAB8000,,,2023-03-23 2:00:12,1 -4523,Sherlock Purr - 010019F01AD78000,010019F01AD78000,,,2023-03-24 2:21:34,1 -4524,Blocky Farm - 0100E21016A68000,0100E21016A68000,,,2023-03-24 2:21:40,1 -4525,SD Shin Kamen Rider Ranbu [ SD シン・仮面ライダー 乱舞 ] - 0100CD40192AC000,0100CD40192AC000,,,2023-03-24 23:07:40,3 -4526,Peppa Pig: World Adventures - 0100FF1018E00000,0100FF1018E00000,Incomplete,,2023-03-25 7:46:56,3 -4528,Remnant: From the Ashes - 010010F01418E000,010010F01418E000,,,2023-03-26 20:30:16,2 -4529,Titanium Hound - 010010B0195EE000,010010B0195EE000,,,2023-03-26 19:06:35,1 -4530,MLB® The Show™ 23 - 0100913019170000,0100913019170000,gpu;status-ingame,ingame,2024-07-26 0:56:50,9 -4531,Grim Guardians Demon Purge - 0100B5301A180000,0100B5301A180000,,,2023-03-29 2:03:41,1 -4535,Blade Assault - 0100EA1018A2E000,0100EA1018A2E000,audio;status-nothing,nothing,2024-04-29 14:32:50,2 -4537,Bubble Puzzler - 0100FB201A21E000,0100FB201A21E000,,,2023-04-03 1:55:12,1 -4538,Tricky Thief - 0100F490198B8000,0100F490198B8000,,,2023-04-03 1:56:44,1 -4539,Scramballed - 0100106016602000,0100106016602000,,,2023-04-03 1:58:08,1 -4540,SWORD ART ONLINE Alicization Lycoris - 0100C6C01225A000,0100C6C01225A000,,,2023-04-03 2:03:00,1 -4542,Alice Gear Aegis CS Concerto of Simulatrix - 0100EEA0184C6000,0100EEA0184C6000,,,2023-04-05 1:40:02,1 -4543,Curse of the Sea Rats - 0100B970138FA000,0100B970138FA000,,,2023-04-08 15:56:01,1 -4544,THEATRHYTHM FINAL BAR LINE - 010081B01777C000,010081B01777C000,status-ingame;Incomplete,ingame,2024-08-05 14:24:55,6 -4545,Assault Suits Valken DECLASSIFIED - 0100FBC019042000,0100FBC019042000,,,2023-04-11 1:05:19,1 -4546,Xiaomei and the Flame Dragons Fist - 010072601922C000,010072601922C000,,,2023-04-11 1:06:46,1 -4547,Loop - 0100C88019092000,0100C88019092000,,,2023-04-11 1:08:03,1 -4548,Volley Pals - 01003A301A29E000,01003A301A29E000,,,2023-04-12 1:37:14,1 -4549,Catgotchi Virtual Pet - 0100CCF01A884000,0100CCF01A884000,,,2023-04-12 1:37:24,1 -4551,Pizza Tower - 05000FD261232000,05000FD261232000,status-ingame;crash,ingame,2024-09-16 0:21:56,6 -4552,Megaman Battle Network Legacy Collection Vol 1 - 010038E016264000,010038E016264000,status-playable,playable,2023-04-25 3:55:57,2 -4554,Process of Elimination - 01005CC018A32000,01005CC018A32000,,,2023-04-17 0:46:22,1 -4555,Detective Boys and the Strange Karakuri Mansion on the Hill [ 少年探偵団と丘の上の奇妙なカラクリ屋敷 ] - 0100F0801A5E8000,0100F0801A5E8000,,,2023-04-17 0:49:26,1 -4556,Dokapon Kingdom Connect [ ドカポンキングダムコネクト ] - 0100AC4018552000,0100AC4018552000,,,2023-04-17 0:53:37,1 -4557,Pixel Game Maker Series Tentacled Terrors Tyrannize Terra - 010040A01AABE000,010040A01AABE000,,,2023-04-18 2:29:14,1 -4558,Ultra Pixel Survive - 0100472019812000,0100472019812000,,,2023-04-18 2:29:20,1 -4559,PIANOFORTE - 0100D6D016F06000,0100D6D016F06000,,,2023-04-18 2:29:25,1 -4560,NASCAR Rivals - 0100545016D5E000,0100545016D5E000,status-ingame;crash;Incomplete,ingame,2023-04-21 1:17:47,4 -4561,Minecraft Legends - 01007C6012CC8000,01007C6012CC8000,gpu;status-ingame;crash,ingame,2024-03-04 0:32:24,9 -4564,Touhou Fan-made Virtual Autography - 0100196016944000,0100196016944000,,,2023-04-21 3:59:47,1 -4565,FINAL FANTASY I - 01000EA014150000,01000EA014150000,status-nothing;crash,nothing,2024-09-05 20:55:30,23 -4566,FINAL FANTASY II - 01006B7014156000,01006B7014156000,status-nothing;crash,nothing,2024-04-13 19:18:04,9 -4567,FINAL FANTASY III - 01002E2014158000,01002E2014158000,,,2023-04-21 11:50:01,1 -4569,FINAL FANTASY V - 0100AA201415C000,0100AA201415C000,status-playable,playable,2023-04-26 1:11:55,2 -4570,FINAL FANTASY VI - 0100AA001415E000,0100AA001415E000,,,2023-04-21 13:08:30,1 -4571,Advance Wars 1+2: Re-Boot Camp - 0100300012F2A000,0100300012F2A000,status-playable,playable,2024-01-30 18:19:44,4 -4572,Five Nights At Freddy’s Security Breach - 01009060193C4000,01009060193C4000,gpu;status-ingame;crash;mac-bug,ingame,2023-04-23 22:33:28,3 -4573,BUCCANYAR - 0100942019418000,0100942019418000,,,2023-04-23 0:59:51,1 -4574,BraveDungeon - The Meaning of Justice - 010068A00DAFC000,010068A00DAFC000,,,2023-04-23 13:34:05,2 -4575,Gemini - 010045300BE9A000,010045300BE9A000,,,2023-04-24 1:31:41,1 -4576,LOST EPIC - 010098F019A64000,010098F019A64000,,,2023-04-24 1:31:46,1 -4577,AKIBA'S TRIP2 Director's Cut - 0100FBD01884C000,0100FBD01884C000,,,2023-04-24 1:31:48,1 -4579,Afterimage - 010095E01A12A000,010095E01A12A000,,,2023-04-27 21:39:08,1 -4580,Fortress S - 010053C017D40000,010053C017D40000,,,2023-04-28 1:57:34,1 -4581,The Mageseeker: A League of Legends Story™ 0100375019B2E000,0100375019B2E000,,,2023-04-29 14:01:15,2 -4582,Cult of the Lamb - 01002E7016C46000,01002E7016C46000,,,2023-04-29 6:22:56,1 -4583,Disney SpeedStorm - 0100F0401435E000,0100F0401435E000,services;status-boots,boots,2023-11-27 2:15:32,4 -4584,The Outbound Ghost - 01000BC01801A000,01000BC01801A000,status-nothing,nothing,2024-03-02 17:10:58,2 -4586,Blaze Union Story to Reach the Future Remaster [ ブレイズ・ユニオン ] - 01003B001A81E000,01003B001A81E000,,,2023-05-02 2:03:16,1 -4587,Sakura Neko Calculator - 010029701AAD2000,010029701AAD2000,,,2023-05-02 6:16:04,1 -4593,Bramble The Mountain King - 0100E87017D0E000,0100E87017D0E000,services-horizon;status-playable,playable,2024-03-06 9:32:17,4 -4598,The Legend of Zelda: Tears of the Kingdom - 0100F2C0115B6000,0100F2C0115B6000,gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30,155 -4603,Magical Drop VI - 0100B4D01A3A4000,0100B4D01A3A4000,,,2023-05-13 2:27:38,1 -4604,Yahari ge-mu demo ore no seishun rabukome hamachigatteiru. kan [ やはりゲームでも俺の青春ラブコメはまちがっている。完 ] - 010066801A138000,010066801A138000,,,2023-05-13 2:27:49,1 -4608,Mega Man Battle Network Legacy Collection Vol. 2 - 0100734016266000,0100734016266000,status-playable,playable,2023-08-03 18:04:32,4 -4615,Numolition - 010043C019088000,010043C019088000,,,2023-05-17 2:29:23,1 -4616,Vibitter for Nintendo Switch [ ビビッター ] - 0100D2A01855C000,0100D2A01855C000,,,2023-05-17 2:29:31,1 -4620,LEGO 2K Drive - 0100739018020000,0100739018020000,gpu;status-ingame;ldn-works,ingame,2024-04-09 2:05:12,15 -4622,Ys Memoire : The Oath in Felghana [ イース・メモワール -フェルガナの誓い- ] - 010070D01A192000,010070D01A192000,,,2023-05-22 1:12:30,1 -4623,Love on Leave - 0100E3701A870000,0100E3701A870000,,,2023-05-22 1:37:22,1 -4625,Puzzle Bobble Everybubble! - 010079E01A1E0000,010079E01A1E0000,audio;status-playable;ldn-works,playable,2023-06-10 3:53:40,4 -4627,Chasm: The Rift - 010034301A556000,010034301A556000,gpu;status-ingame,ingame,2024-04-29 19:02:48,2 -4631,Speed Crew Demo - 01005C001B696000,01005C001B696000,,,2023-06-04 0:18:22,1 -4632,Dr Fetus Mean Meat Machine Demo - 01001DA01B7C4000,01001DA01B7C4000,,,2023-06-04 0:18:30,1 -4634,Bubble Monsters - 0100FF801B87C000,0100FF801B87C000,,,2023-06-05 2:15:43,1 -4635,Puzzle Bobble / Bust-a-Move ( 16-Bit Console Version ) - 0100AFF019F3C000,0100AFF019F3C000,,,2023-06-05 2:15:53,1 -4636,Just Dance 2023 - 0100BEE017FC0000,0100BEE017FC0000,status-nothing,nothing,2023-06-05 16:44:54,1 -4638,We Love Katamari REROLL+ Royal Reverie - 010089D018D18000,010089D018D18000,,,2023-06-07 7:33:49,1 -4640,Loop8: Summer of Gods - 0100051018E4C000,0100051018E4C000,,,2023-06-10 17:09:56,1 -4641,Hatsune Miku - The Planet Of Wonder And Fragments Of Wishes - 010030301ABC2000,010030301ABC2000,,,2023-06-12 2:15:31,1 -4642,Speed Crew - 0100C1201A558000,0100C1201A558000,,,2023-06-12 2:15:35,1 -4644,Nocturnal - 01009C2019510000,01009C2019510000,,,2023-06-12 16:24:50,2 -4645,Harmony: The Fall of Reverie - 0100A65017D68000,0100A65017D68000,,,2023-06-13 22:37:51,1 -4647,Cave of Past Sorrows - 0100336019D36000,0100336019D36000,,,2023-06-18 1:42:19,1 -4648,BIRDIE WING -Golf Girls Story- - 01005B2017D92000,01005B2017D92000,,,2023-06-18 1:42:25,1 -4649,Dogotchi Virtual Pet - 0100BBD01A886000,0100BBD01A886000,,,2023-06-18 1:42:31,1 -4650,010036F018AC8000,010036F018AC8000,,,2023-06-18 13:11:56,1 -4653,Pikmin 1 - 0100AA80194B0000,0100AA80194B0000,audio;status-ingame,ingame,2024-05-28 18:56:11,17 -4654,Pikmin 2 - 0100D680194B2000,0100D680194B2000,gpu;status-ingame,ingame,2023-07-31 8:53:41,3 -4655,Ghost Trick Phantom Detective Demo - 010026C0184D4000,010026C0184D4000,,,2023-06-23 1:29:44,1 -4656,Dr Fetus' Mean Meat Machine - 01006C301B7C2000,01006C301B7C2000,,,2023-06-23 1:29:52,1 -4657,FIFA 22 Legacy Edition - 0100216014472000,0100216014472000,gpu;status-ingame,ingame,2024-03-02 14:13:48,2 -4658,Pretty Princess Magical Garden Island - 01001CA019DA2000,01001CA019DA2000,,,2023-06-26 2:43:04,1 -4659,Pool Together - 01009DB01BA16000,01009DB01BA16000,,,2023-06-26 2:43:13,1 -4660,Kizuna AI - Touch the Beat! - 0100BF2019B98000,0100BF2019B98000,,,2023-06-26 2:43:18,1 -4661,Convenience Stories - 0100DF801A092000,0100DF801A092000,,,2023-06-26 10:58:37,1 -4662,Pikmin 4 Demo - 0100E0B019974000,0100E0B019974000,gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08,10 -4663,超探偵事件簿 レインコード (Master Detective Archives: Rain Code) - 0100F4401940A000,0100F4401940A000,status-ingame;crash,ingame,2024-02-12 20:58:31,9 -4665,Everybody 1-2-Switch! - 01006F900BF8E000,01006F900BF8E000,services;deadlock;status-nothing,nothing,2023-07-01 5:52:55,2 -4666,AEW Fight Forever - 0100BD10190C0000,0100BD10190C0000,,,2023-06-30 22:09:10,1 -4668,Master Detective Archives: Rain Code - 01004800197F0000,01004800197F0000,gpu;status-ingame,ingame,2024-04-19 20:11:09,22 -4673,The Lara Croft Collection - 010079C017F5E000,010079C017F5E000,services-horizon;deadlock;status-nothing,nothing,2024-07-12 22:45:51,12 -4675,Ghost Trick Phantom Detective - 010029B018432000,010029B018432000,status-playable,playable,2023-08-23 14:50:12,4 -4680,Sentimental Death Loop - 0100FFA01ACA8000,0100FFA01ACA8000,,,2023-07-10 3:23:08,1 -4681,The Settlers: New Allies - 0100F3200E7CA000,0100F3200E7CA000,deadlock;status-nothing,nothing,2023-10-25 0:18:05,4 -4683,Manic Mechanics - 010095A01550E000,010095A01550E000,,,2023-07-17 2:07:32,1 -4684,Crymachina Trial Edition ( Demo ) [ クライマキナ ] - 01000CC01C108000,01000CC01C108000,status-playable;demo,playable,2023-08-06 5:33:21,2 -4686,Xicatrice [ シカトリス ] - 0100EB601A932000,0100EB601A932000,,,2023-07-18 2:18:35,1 -4687,Trouble Witches Final! Episode 01: Daughters of Amalgam - 0100D06018DCA000,0100D06018DCA000,status-playable,playable,2024-04-08 15:08:11,2 -4688,The Quintessential Quintuplets: Gotopazu Story [ 五等分の花嫁 ごとぱずストーリー ] - 0100137019E9C000,0100137019E9C000,,,2023-07-18 2:18:50,1 -4689,Pinball FX - 0100DA70186D4000,0100DA70186D4000,status-playable,playable,2024-05-03 17:09:11,1 -4690,Moving Out 2 Training Day ( Demo ) - 010049E01B034000,010049E01B034000,,,2023-07-19 0:37:57,1 -4691,Cold Silence - 010035B01706E000,010035B01706E000,cpu;status-nothing;crash,nothing,2024-07-11 17:06:14,2 -4692,Demons of Asteborg - 0100B92015538000,0100B92015538000,,,2023-07-20 17:03:06,1 -4693,Pikmin 4 - 0100B7C00933A000,0100B7C00933A000,gpu;status-ingame;crash;UE4,ingame,2024-08-26 3:39:08,18 -4694,Grizzland - 010091300FFA0000,010091300FFA0000,gpu;status-ingame,ingame,2024-07-11 16:28:34,2 -4698,Disney Illusion Island,,,,2023-07-29 9:20:56,2 -4700,Double Dragon Gaiden: Rise of The Dragons - 010010401BC1A000,010010401BC1A000,,,2023-08-01 5:17:28,1 -4701,CRYSTAR -クライスタ- 0100E7B016778800,0100E7B016778800,,,2023-08-02 11:54:22,1 -4702,Orebody: Binders Tale - 010055A0189B8000,010055A0189B8000,,,2023-08-03 18:50:10,1 -4703,Ginnung - 01004B1019C7E000,01004B1019C7E000,,,2023-08-03 19:19:00,1 -4704,Legends of Amberland: The Forgotten Crown - 01007170100AA000,01007170100AA000,,,2023-08-03 22:18:17,1 -4705,Egglien - 0100E29019F56000,0100E29019F56000,,,2023-08-03 22:48:04,1 -4707,Dolmenjord - Viking Islands - 010012201B998000,010012201B998000,,,2023-08-05 20:55:28,1 -4708,The Knight & the Dragon - 010031B00DB34000,010031B00DB34000,gpu;status-ingame,ingame,2023-08-14 10:31:43,3 -4709,Cookies! Theory of Super Evolution - ,,,,2023-08-06 0:21:28,1 -4711,Jetboy - 010039C018168000,010039C018168000,,,2023-08-07 17:25:10,1 -4712,Townscaper - 01001260143FC000,01001260143FC000,,,2023-08-07 18:24:29,1 -4713,The Deer God - 01000B6007A3C000,01000B6007A3C000,,,2023-08-07 19:48:55,1 -4714,6 Souls - 0100421016BF2000,0100421016BF2000,,,2023-08-07 21:17:43,1 -4715,Brotato - 01002EF01A316000,01002EF01A316000,,,2023-08-10 14:57:25,1 -4716,超次元ゲイム ネプテューヌ GameMaker R:Evolution - 010064801a01c000,010064801a01c000,status-nothing;crash,nothing,2023-10-30 22:37:40,2 -4718,Quake II - 010048F0195E8000,010048F0195E8000,status-playable,playable,2023-08-15 3:42:14,2 -4721,Red Dead Redemption - 01007820196A6000,01007820196A6000,status-playable;amd-vendor-bug,playable,2024-09-13 13:26:13,42 -4722,Samba de Amigo : Party Central Demo - 01007EF01C0D2000,01007EF01C0D2000,,,2023-08-18 4:00:43,1 -4723,Bomb Rush Cyberfunk - 0100317014B7C000,0100317014B7C000,status-playable,playable,2023-09-28 19:51:57,3 -4724,Jack Jeanne - 010036D01937E000,010036D01937E000,,,2023-08-21 5:58:21,1 -4725,Bright Memory: Infinite Gold Edition - 01001A9018560000,01001A9018560000,,,2023-08-22 22:46:26,1 -4726,NBA 2K23 - 0100ACA017E4E800,0100ACA017E4E800,status-boots,boots,2023-10-10 23:07:14,3 -4727,Marble It Up! Ultra - 0100C18016896000,0100C18016896000,,,2023-08-30 20:14:21,2 -4728,Words of Wisdom - 0100B7F01BC9A000,0100B7F01BC9A000,,,2023-09-02 19:05:19,1 -4729,Koa and the Five Pirates of Mara - 0100C57019BA2000,0100C57019BA2000,gpu;status-ingame,ingame,2024-07-11 16:14:44,2 -4731,Little Orpheus stuck at 2 level,,,,2023-09-05 12:09:08,1 -4732,Tiny Thor - 010002401AE94000,010002401AE94000,gpu;status-ingame,ingame,2024-07-26 8:37:35,6 -4733,Radirgy Swag - 01000B900EEF4000,01000B900EEF4000,,,2023-09-06 23:00:39,1 -4735,Sea of Stars - 01008C0016544000,01008C0016544000,status-playable,playable,2024-03-15 20:27:12,9 -4736,NBA 2K24 - 010006501A8D8000,010006501A8D8000,cpu;gpu;status-boots,boots,2024-08-11 18:23:08,6 -4737,Rune Factory 3 Special - 010081C0191D8000,010081C0191D8000,status-playable,playable,2023-10-15 8:32:49,2 -4739,Baten Kaitos I & II HD Remaster (Japan) - 0100F28018CA4000,0100F28018CA4000,services;status-boots;Needs Update,boots,2023-10-24 23:11:54,7 -4740,F-ZERO 99 - 0100CCF019C8C000,0100CCF019C8C000,,,2023-09-14 16:43:01,1 -4743,Horizon Chase 2 - 0100001019F6E000,0100001019F6E000,deadlock;slow;status-ingame;crash;UE4,ingame,2024-08-19 4:24:06,11 -4744,Mortal Kombat 1 - 01006560184E6000,01006560184E6000,gpu;status-ingame,ingame,2024-09-04 15:45:47,18 -4745,Baten Kaitos I & II HD Remaster (Europe/USA) - 0100C07018CA6000,0100C07018CA6000,services;status-boots;Needs Update,boots,2023-10-01 0:44:32,9 -4746,Legend of Mana 01003570130E2000,01003570130E2000,,,2023-09-17 4:07:26,1 -4747,TUNIC 0100DA801624E000,0100DA801624E000,,,2023-09-17 4:28:22,1 -4748,SUPER BOMBERMAN R 2 - 0100B87017D94000,0100B87017D94000,deadlock;status-boots,boots,2023-09-29 13:19:51,2 -4749,Fae Farm - 010073F0189B6000 ,010073F0189B6000,status-playable,playable,2024-08-25 15:12:12,3 -4750,demon skin - 01006fe0146ec000,01006fe0146ec000,,,2023-09-18 8:36:18,1 -4751,Fatal Frame: Mask of the Lunar Eclipse - 0100DAE019110000,0100DAE019110000,status-playable;Incomplete,playable,2024-04-11 6:01:30,3 -4752,Winter Games 2023 - 0100A4A015FF0000,0100A4A015FF0000,deadlock;status-menus,menus,2023-11-07 20:47:36,2 -4753,EA Sports FC 24 - 0100BDB01A0E6000,0100BDB01A0E6000,status-boots,boots,2023-10-04 18:32:59,20 -4755,Cassette Beasts - 010066F01A0E0000,010066F01A0E0000,status-playable,playable,2024-07-22 20:38:43,8 -4756,COCOON - 01002E700C366000,01002E700C366000,gpu;status-ingame,ingame,2024-03-06 11:33:08,11 -4758,Detective Pikachu Returns - 010007500F27C000,010007500F27C000,status-playable,playable,2023-10-07 10:24:59,2 -4761,DeepOne - 0100961011BE6000,0100961011BE6000,services-horizon;status-nothing;Needs Update,nothing,2024-01-18 15:01:05,6 -4763,Sonic Superstars,,,,2023-10-13 18:33:19,1 -4765,Disco Elysium - 01006C5015E84000,01006C5015E84000,Incomplete,,2023-10-14 13:53:12,3 -4773,Sonic Superstars - 01008F701C074000,01008F701C074000,gpu;status-ingame;nvdec,ingame,2023-10-28 17:48:07,16 -4774,Sonic Superstars Digital Art Book with Mini Digital Soundtrack - 010088801C150000,010088801C150000,status-playable,playable,2024-08-20 13:26:56,2 -4776,Super Mario Bros. Wonder - 010015100B514000,010015100B514000,status-playable;amd-vendor-bug,playable,2024-09-06 13:21:21,36 -4786,Project Blue - 0100FCD0193A0000,0100FCD0193A0000,,,2023-10-24 15:55:09,2 -4787,Rear Sekai [ リアセカイ ] - 0100C3B01A5DD002,0100C3B01A5DD002,,,2023-10-24 1:55:18,1 -4788,Dementium: The Ward (Dementium Remastered) - 010038B01D2CA000,010038B01D2CA000,status-boots;crash,boots,2024-09-02 8:28:14,8 -4789,A Tiny Sticker Tale - 0100f6001b738000,0100f6001b738000,,,2023-10-26 23:15:46,1 -4790,Clive 'n' Wrench - 0100C6C010AE4000,0100C6C010AE4000,,,2023-10-28 14:56:46,1 -4793,STAR OCEAN The Second Story R - 010065301A2E0000,010065301A2E0000,status-ingame;crash,ingame,2024-06-01 2:39:59,13 -4794,Song of Nunu: A League of Legends Story - 01004F401BEBE000,01004F401BEBE000,status-ingame,ingame,2024-07-12 18:53:44,5 -4795,MythForce,,,,2023-11-03 12:58:52,1 -4797,Here Comes Niko! - 01001600121D4000,01001600121D4000,,,2023-11-04 22:26:44,1 -4798,Warioware: Move IT! - 010045B018EC2000,010045B018EC2000,status-playable,playable,2023-11-14 0:23:51,2 -4799,Game of Life [ 人生ゲーム for Nintendo Switch ] - 0100FF1017F76000,0100FF1017F76000,,,2023-11-07 19:59:08,3 -4800,Osyaberi! Horijyo! Gekihori - 01005D6013A54000,01005D6013A54000,,,2023-11-07 1:46:43,1 -4801,Fashion Dreamer - 0100E99019B3A000,0100E99019B3A000,status-playable,playable,2023-11-12 6:42:52,2 -4802,THE 密室逃脱 ~牵动命运的三十五道谜团~ (ESCAPE TRICK: 35 Fateful Enigmas) - 010087F005DFE000,010087F005DFE000,,,2023-11-08 2:20:17,1 -4809,Hogwarts Legacy 0100F7E00C70E000,0100F7E00C70E000,status-ingame;slow,ingame,2024-09-03 19:53:58,24 -4811,Super Mario RPG - 0100BC0018138000,0100BC0018138000,gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42,39 -4812,Venatrix - 010063601B386000,010063601B386000,,,2023-11-18 6:55:12,1 -4813,Dreamwork's All-Star Kart Racing - 010037401A374000,010037401A374000,Incomplete,,2024-02-27 8:58:57,2 -4817,Watermelon Game [ スイカゲーム ] - 0100800015926000,0100800015926000,,,2023-11-27 2:49:45,1 -4818,屁屁侦探 噗噗 未来的名侦探登场! (Oshiri Tantei Mirai no Meitantei Tojo!) - 0100FDE017E56000,0100FDE017E56000,,,2023-12-01 11:15:46,3 -4820,Batman: Arkham Knight - 0100ACD0163D0000,0100ACD0163D0000,gpu;status-ingame;mac-bug,ingame,2024-06-25 20:24:42,2 -4821,DRAGON QUEST MONSTERS: The Dark Prince - 0100A77018EA0000,0100A77018EA0000,status-playable,playable,2023-12-29 16:10:05,2 -4823,ftpd classic - 0000000000000000,0000000000000000,homebrew,,2023-12-03 23:42:19,1 -4824,ftpd pro - 0000000000000000,0000000000000000,homebrew,,2023-12-03 23:47:46,1 -4826,Batman: Arkham City - 01003f00163ce000,01003f00163ce000,status-playable,playable,2024-09-11 0:30:19,5 -4827,DoDonPachi DAI-OU-JOU Re:incarnation (怒首領蜂大往生 臨廻転生) - 0100526017B00000,0100526017B00000,,,2023-12-08 15:16:22,1 -4830,Squid Commando - 0100044018E82000,0100044018E82000,,,2023-12-08 17:17:27,1 -4834,御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!) - 0100BF401AF9C000,0100BF401AF9C000,slow;status-playable,playable,2023-12-31 14:37:17,2 -4835,Another Code: Recollection DEMO - 01003E301A4D6000,01003E301A4D6000,,,2023-12-15 6:48:09,1 -4837,Alien Hominid HD - 010056B019874000,010056B019874000,,,2023-12-17 13:10:46,1 -4838,Piyokoro - 010098801D706000,010098801D706000,,,2023-12-18 2:17:53,1 -4839,Uzzuzuu My Pet - Golf Dash - 010015B01CAF0000,010015B01CAF0000,,,2023-12-18 2:17:57,1 -4842,Alien Hominid Invasion - 0100A3E00CDD4000,0100A3E00CDD4000,Incomplete,,2024-07-17 1:56:28,3 -4846,void* tRrLM2(); //Void Terrarium 2 (USA/EU) - 0100B510183BC000,0100B510183BC000,,,2023-12-21 11:08:18,1 -4847,Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3 - 010047F01AA10000,010047F01AA10000,services-horizon;status-menus,menus,2024-07-24 6:34:06,4 -4848,Party Friends - 0100C0A01D478000,0100C0A01D478000,,,2023-12-23 2:43:33,1 -4849,Yohane the Parhelion Numazu in the Mirage Demo - 0100D7201DAAE000,0100D7201DAAE000,,,2023-12-23 2:49:28,1 -4850,SPY×FAMILY OPERATION DIARY - 010041601AB40000,010041601AB40000,,,2023-12-23 2:52:29,1 -4851,Golf Guys - 010040901CC42000,010040901CC42000,,,2023-12-28 1:20:16,1 -4852,Persona 5 Tactica - 010087701B092000,010087701B092000,status-playable,playable,2024-04-01 22:21:03,6 -4856,Batman: Arkham Asylum - 0100E870163CA000,0100E870163CA000,,,2024-01-11 23:03:37,2 -4857,Persona 5 Royal (KR/HK) - 01004B10157F2000,01004B10157F2000,Incomplete,,2024-08-17 21:42:28,8 -4859,Prince of Persia: The Lost Crown - 0100210019428000,0100210019428000,status-ingame;crash,ingame,2024-06-08 21:31:58,34 -4860,Another Code: Recollection - 0100CB9018F5A000,0100CB9018F5A000,gpu;status-ingame;crash,ingame,2024-09-06 5:58:52,7 -4861,It Takes Two - 010092A0172E4000,010092A0172E4000,,,2024-01-23 5:15:26,1 -4862,逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy) - 010020D01B890000,010020D01B890000,status-playable,playable,2024-06-21 21:54:27,18 -4863,Hitman: Blood Money - Reprisal - 010083A018262000,010083A018262000,deadlock;status-ingame,ingame,2024-09-28 16:28:50,8 -4866,Mario vs. Donkey Kong™ Demo - 0100D9E01DBB0000,0100D9E01DBB0000,status-playable,playable,2024-02-18 10:40:06,4 -4868,LEGO The Incredibles - 0100F19006E04000,0100F19006E04000,crash,,2024-02-11 0:46:53,1 -4869,Tomb Raider I-III Remastered - 010024601BB16000,010024601BB16000,gpu;status-ingame;opengl,ingame,2024-09-27 12:32:04,27 -4870,Arzette: The Jewel of Faramore - 0100B7501C46A000,0100B7501C46A000,,,2024-02-17 17:22:34,1 -4871,Mario vs. Donkey Kong - 0100B99019412000,0100B99019412000,status-playable,playable,2024-05-04 21:22:39,9 -4872,Penny's Big Breakaway - 0100CA901AA9C000,0100CA901AA9C000,status-playable;amd-vendor-bug,playable,2024-05-27 7:58:51,12 -4873,CEIBA - 0100E8801D97E000,0100E8801D97E000,,,2024-02-25 22:33:36,4 -4874,Lil' Guardsman v1.1 - 010060B017F6E000,010060B017F6E000,,,2024-02-25 19:21:03,1 -4875,Fearmonium - 0100F5501CE12000,0100F5501CE12000,status-boots;crash,boots,2024-03-06 11:26:11,2 -4876,NeverAwake - 0100DA30189CA000,0100DA30189CA000,,,2024-02-26 2:27:39,1 -4877,Zombies Rising XXX,,,,2024-02-26 7:53:03,1 -4878,Balatro - 0100CD801CE5E000,0100CD801CE5E000,status-ingame,ingame,2024-04-21 2:01:53,8 -4879,Prison City - 0100C1801B914000,0100C1801B914000,gpu;status-ingame,ingame,2024-03-01 8:19:33,2 -4880,Yo-kai Watch Jam: Y School Heroes: Bustlin' School Life - 010051D010FC2000,010051D010FC2000,,,2024-03-03 2:57:22,1 -4884,Princess Peach: Showtime! Demo - 010024701DC2E000,010024701DC2E000,status-playable;UE4;demo,playable,2024-03-10 17:46:45,4 -4886,Unicorn Overlord - 010069401ADB8000,010069401ADB8000,status-playable,playable,2024-09-27 14:04:32,15 -4888,Dodgeball Academia - 010001F014D9A000,010001F014D9A000,,,2024-03-09 3:49:28,1 -4893,魂斗罗:加鲁加行动 (Contra: Operation Galuga) - 0100CF401A98E000,0100CF401A98E000,,,2024-03-13 1:13:42,1 -4894,STAR WARS Battlefront Classic Collection - 010040701B948000,010040701B948000,gpu;status-ingame;vulkan,ingame,2024-07-12 19:24:21,6 -4896,MLB The Show 24 - 0100E2E01C32E000,0100E2E01C32E000,services-horizon;status-nothing,nothing,2024-03-31 4:54:11,8 -4897,Orion Haste - 01009B401DD02000,01009B401DD02000,,,2024-03-16 17:22:59,1 -4901,Gylt - 0100AC601DCA8000,0100AC601DCA8000,status-ingame;crash,ingame,2024-03-18 20:16:51,5 -4903,マクロス(Macross) -Shooting Insight- - 01001C601B8D8000,01001C601B8D8000,,,2024-03-20 17:10:26,1 -4904,Geometry Survivor - 01006D401D4F4000,01006D401D4F4000,,,2024-03-20 17:35:34,1 -4905,Gley Lancer and Gynoug - Classic Shooting Pack - 010037201E3DA000,010037201E3DA000,,,2024-03-20 18:19:37,1 -4907,Princess Peach: Showtime! - 01007A3009184000,01007A3009184000,status-playable;UE4,playable,2024-09-21 13:39:45,16 -4910,Cosmic Fantasy Collection - 0100CCB01B1A0000,0100CCB01B1A0000,status-ingame,ingame,2024-05-21 17:56:37,8 -4911,Fit Boxing feat. 初音ミク - 010045D01AFC8000,010045D01AFC8000,,,2024-03-28 4:07:57,2 -4915,Sonic 2 (2013) - 0000000000000000,0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-01 16:25:30,1 -4916,Sonic CD - 0000000000000000,0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-01 16:25:31,1 -4917,Sonic A.I.R - 0000000000000000,0000000000000000,status-ingame;homebrew,ingame,2024-04-01 16:25:32,1 -4918,RSDKv5u - 0000000000000000,0000000000000000,status-ingame;homebrew,ingame,2024-04-01 16:25:34,1 -4919,Sonic 1 (2013) - 0000000000000000,0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-06 18:31:20,2 -4920,The Dark Pictures Anthology : Man of Medan - 0100711017B30000,0100711017B30000,,,2024-04-01 16:38:04,1 -4922,SpaceCadetPinball - 0000000000000000,0000000000000000,status-ingame;homebrew,ingame,2024-04-18 19:30:04,1 -4924,Pepper Grinder - 0100B98019068000,0100B98019068000,,,2024-04-04 16:31:57,1 -4927,RetroArch - 010000000000100D,010000000000100D,,,2024-04-07 18:23:18,1 -4929,YouTube - 01003A400C3DA800,01003A400C3DA800,status-playable,playable,2024-06-08 5:24:10,2 -4930,Pawapoke R - 01000c4015030000,01000c4015030000,services-horizon;status-nothing,nothing,2024-05-14 14:28:32,3 -4933,MegaZeux - 0000000000000000,0000000000000000,,,2024-04-16 23:46:53,1 -4934,ANTONBLAST (Demo) - 0100B5F01EB24000,0100B5F01EB24000,,,2024-04-18 22:45:13,1 -4935,Europa (Demo) - 010092501EB2C000,010092501EB2C000,gpu;status-ingame;crash;UE4,ingame,2024-04-23 10:47:12,2 -4936,BioShock 1 & 2 Remastered [0100AD10102B2000 - 01002620102C6800] v1.0.2,0100AD10102B2000,,,2024-04-19 19:08:30,2 -4939,Turrican Anthology Vol. 2 - 010061D0130CA000 - game freezes at the beginning,010061D0130CA000,Incomplete,,2024-04-25 17:57:06,5 -4945,Nickelodeon All-Star Brawl 2 - 010010701AFB2000,010010701AFB2000,status-playable,playable,2024-06-03 14:15:01,3 -4946,Bloo Kid - 0100C6A01AD56000,0100C6A01AD56000,status-playable,playable,2024-05-01 17:18:04,3 -4947,Tales of Kenzera: ZAU - 01005C7015D30000,01005C7015D30000,,,2024-04-30 10:11:26,1 -4952,Demon Slayer – Kimetsu no Yaiba – Sweep the Board! - 0100A7101B806000,0100A7101B806000,,,2024-05-02 10:19:47,1 -4953,Endless Ocean Luminous - 010067B017588000,010067B017588000,services-horizon;status-ingame;crash,ingame,2024-05-30 2:05:57,6 -4954,Moto GP 24 - 010040401D564000,010040401D564000,gpu;status-ingame,ingame,2024-05-10 23:41:00,2 -4956,The game of life 2 - 0100B620139D8000,0100B620139D8000,,,2024-05-03 12:08:33,1 -4958,ANIMAL WELL - 010020D01AD24000,010020D01AD24000,status-playable,playable,2024-05-22 18:01:49,13 -4959,Super Mario World - 0000000000000000,0000000000000000,status-boots;homebrew,boots,2024-06-13 1:40:31,2 -4960,1000xRESIST - 0100B02019866000,0100B02019866000,,,2024-05-11 17:18:57,1 -4961,Dave The Diver - 010097F018538000,010097F018538000,Incomplete,,2024-09-03 21:38:55,2 -4963,Zombiewood,,Incomplete,,2024-05-15 11:37:19,2 -4965,Pawapoke Dash - 010066A015F94000,010066A015F94000,,,2024-05-16 8:45:51,1 -4967,Biomutant - 01004BA017CD6000,01004BA017CD6000,status-ingame;crash,ingame,2024-05-16 15:46:36,2 -4968,Vampire Survivors - 010089A0197E4000,010089A0197E4000,status-ingame,ingame,2024-06-17 9:57:38,2 -4969,Koumajou Remilia II Stranger’s Requiem,,Incomplete,,2024-05-22 20:59:04,3 -4972,Paper Mario: The Thousand-Year Door - 0100ECD018EBE000,0100ECD018EBE000,gpu;status-ingame;intel-vendor-bug;slow,ingame,2025-01-07 4:27:35,80 -4973,Stories From Sol: The Gun-dog Demo - 010092A01EC94000,010092A01EC94000,,,2024-05-22 19:55:35,1 -4977,Earth Defense Force: World Brothers 2 - 010083a01d456000,010083a01d456000,,,2024-06-01 18:34:34,1 -4985,锈色湖畔:内在昔日(Rusty Lake: The Past Within) - 01007010157EC000,01007010157EC000,,,2024-06-10 13:47:40,1 -4988,Garden Life A Cozy Simulator - 0100E3801ACC0000,0100E3801ACC0000,,,2024-06-12 0:12:01,1 -4991,Shin Megami Tensei V: Vengeance - 010069C01AB82000,010069C01AB82000,gpu;status-ingame;vulkan-backend-bug,ingame,2024-07-14 11:28:24,17 -4992,Valiant Hearts - The great war - 01006C70146A2000,01006C70146A2000,,,2024-06-18 21:31:15,1 -4994,Monster Hunter Stories - 010069301B1D4000,010069301B1D4000,Incomplete,,2024-09-11 7:58:24,5 -4995,Rocket Knight Adventures: Re-Sparked,,,,2024-06-20 20:13:10,3 -4996,Metal Slug Attack Reloaded,,,,2024-06-20 19:55:22,3 -4997,#BLUD - 010060201E0A4000,010060201E0A4000,,,2024-06-23 13:57:22,1 -4998,NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS - 0100D2D0190A4000,0100D2D0190A4000,services-horizon;status-nothing,nothing,2024-07-25 5:16:48,3 -4999,Bang-On Balls: Chronicles - 010081E01A45C000,010081E01A45C000,Incomplete,,2024-08-01 16:40:12,2 -5000,Downward: Enhanced Edition 0100C5501BF24000,0100C5501BF24000,,,2024-06-26 0:22:34,1 -5001,DNF Duel: Who's Next - 0100380017D3E000,0100380017D3E000,Incomplete,,2024-07-23 2:25:50,2 -5002,Borderlands 3 - 01009970122E4000,01009970122E4000,gpu;status-ingame,ingame,2024-07-15 4:38:14,7 -5003,Luigi's Mansion 2 HD - 010048701995E000,010048701995E000,status-ingame;ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27,8 -5004,Super Monkey Ball Banana Rumble - 010031F019294000,010031F019294000,status-playable,playable,2024-06-28 10:39:18,2 -5005,City of Beats 0100E94016B9E000,0100E94016B9E000,,,2024-07-01 7:02:20,1 -5008,Maquette 0100861018480000,0100861018480000,,,2024-07-04 5:20:21,1 -5009,Monomals - 01003030161DC000,01003030161DC000,gpu;status-ingame,ingame,2024-08-06 22:02:51,3 -5014,Ace Combat 7 - Skies Unknown Deluxe Edition - 010039301B7E0000,010039301B7E0000,gpu;status-ingame;UE4,ingame,2024-09-27 14:31:43,10 -5015,Teenage Mutant Ninja Turtles: Splintered Fate - 01005CF01E784000,01005CF01E784000,status-playable,playable,2024-08-03 13:50:42,6 -5016,Powerful Pro Baseball 2024-2025 - 0100D1C01C194000,0100D1C01C194000,gpu;status-ingame,ingame,2024-08-25 6:40:48,11 -5021,World of Goo 2 - 010061F01DB7C800,010061F01DB7C800,status-boots,boots,2024-08-08 22:52:49,6 -5025,Tomba! Special Edition - 0100D7F01E49C000,0100D7F01E49C000,services-horizon;status-nothing,nothing,2024-09-15 21:59:54,2 -5026,Machi Koro With Everyone-0100C32018824000,0100C32018824000,,,2024-08-07 19:19:30,1 -5027,STAR WARS: Bounty Hunter - 0100d7a01b7a2000,0100d7a01b7a2000,,,2024-08-08 11:12:56,1 -5028,Outer Wilds - 01003DC0144B6000,01003DC0144B6000,,,2024-08-08 17:36:16,1 -5029,Grounded 01006F301AE9C000,01006F301AE9C000,,,2024-08-09 16:35:52,1 -5030,DOOM + DOOM II - 01008CB01E52E000,01008CB01E52E000,status-playable;opengl;ldn-untested;LAN,playable,2024-09-12 7:06:01,2 -5032,Fishing Paradiso - 0100890016A74000,0100890016A74000,,,2024-08-11 21:39:54,2 -5035,Revue Starlight El Dorado - 010099c01d642000,010099c01d642000,,,2024-09-02 18:58:18,2 -5040,PowerWash Simulator - 0100926016012000,0100926016012000,,,2024-08-22 0:47:34,1 -5041,Thank Goodness You’re Here! - 010053101ACB8000,010053101ACB8000,,,2024-09-25 16:15:40,2 -5042,Freedom Planet 2 V1.2.3r (01009A301B68000),,,,2024-08-23 18:16:54,1 -5043,Ace Attorney Investigations Collection DEMO - 010033401E68E000,010033401E68E000,status-playable,playable,2024-09-07 6:16:42,2 -5047,Castlevania Dominus Collection - 0100FA501AF90000,0100FA501AF90000,,,2024-09-19 1:39:04,8 -5055,Chants of Sennaar - 0100543019CB0000,0100543019CB0000,,,2024-09-19 16:30:27,2 -5056,Taisho x Alice ALL IN ONE - 大正×対称アリス ALL IN ONE - 010096000ca38000,010096000ca38000,,,2024-09-11 21:20:04,2 -5057,NBA 2K25 - 0100DFF01ED44000,0100DFF01ED44000,,,2024-09-10 17:34:54,1 -5059,逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection) - 010005501E68C000,010005501E68C000,status-playable,playable,2024-09-19 16:38:05,4 -5062,Fabledom - 0100B6001E6D6000,0100B6001E6D6000,,,2024-09-28 12:12:55,2 -5064,BZZZT - 010091201A3F2000,010091201A3F2000,,,2024-09-22 21:29:58,1 -5065,EA SPORTS FC 25 - 010054E01D878000,010054E01D878000,status-ingame;crash,ingame,2024-09-25 21:07:50,13 -5067,Selfloss - 010036C01E244000,010036C01E244000,,,2024-09-23 23:12:13,1 -5068,Disney Epic Mickey: Rebrushed - 0100DA201EBF8000,0100DA201EBF8000,status-ingame;crash,ingame,2024-09-26 22:11:51,4 -5069,The Plucky Squire - 01006BD018B54000,01006BD018B54000,status-ingame;crash,ingame,2024-09-27 22:32:33,4 -5070,The Legend of Zelda Echoes of Wisdom - 01008CF01BAAC000,01008CF01BAAC000,status-playable;nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01,34 -5071,Bakeru - 01007CD01FAE0000,01007CD01FAE0000,,,2024-09-25 18:05:22,1 -5072,トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~) - 01000BB01CB8A000,01000BB01CB8A000,status-nothing,nothing,2024-09-28 7:03:14,3 -5073,I am an Airtraffic Controller AIRPORT HERO HANEDA ALLSTARS - 01002EE01BAE0000,01002EE01BAE0000,,,2024-09-27 2:04:17,1 -5074,燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari) - 01001BA01EBFC000,01001BA01EBFC000,services-horizon;status-nothing,nothing,2024-09-28 12:22:55,5 -5075,I am an Air Traffic Controller AIRPORT HERO HANEDA - 0100BE700EDA4000,0100BE700EDA4000,,,2024-09-27 23:52:19,1 -5077,Angel at Dusk Demo - 0100D96020ADC000,0100D96020ADC000,,,2024-09-29 17:21:13,1 -5078,Monster Jam™ Showdown - 0100CE101B698000,0100CE101B698000,,,2024-09-30 4:03:13,1 -5079,Legend of Heroes: Trails Through Daybreak - 010040C01D248000,010040C01D248000,,,2024-10-01 7:36:25,1 -100001,Mario & Luigi: Brothership - 01006D0017F7A000,01006D0017F7A000,status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 4:00:00,1 -100002,Stray - 010075101EF84000,010075101EF84000,status-ingame;crash,ingame,2025-01-07 4:03:00,1 -100003,Dragon Quest III HD-2D Remake - 01003E601E324000,01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 4:10:27,1 -100004,SONIC X SHADOW GENERATIONS - 01005EA01C0FC000,01005EA01C0FC000,status-ingame;crash,ingame,2025-01-07 4:20:45,1 -100005,LEGO Horizon Adventures - 010073C01AF34000,010073C01AF34000,status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 4:24:56,1 -100006,Legacy of Kain™ Soul Reaver 1&2 Remastered - 010079901C898000,010079901C898000,status-playable,playable,2025-01-07 5:50:01,1 +"issue_title","extracted_game_id","issue_labels","extracted_status","last_event_date" +"ARMS - 01009B500007C000","01009B500007C000","status-playable;ldn-works;LAN","playable","2024-08-28 07:49:24.000" +"Pokemon Quest - 01005D100807A000","01005D100807A000","status-playable","playable","2022-02-22 16:12:32.000" +"Retro City Rampage DX","","status-playable","playable","2021-01-05 17:04:17.000" +"Kirby Star Allies - 01007E3006DDA000","01007E3006DDA000","status-playable;nvdec","playable","2023-11-15 17:06:19.000" +"Bayonetta 2 - 01007960049A0000","01007960049A0000","status-playable;nvdec;ldn-works;LAN","playable","2022-11-26 03:46:09.000" +"Bloons TD 5 - 0100B8400A1C6000","0100B8400A1C6000","Needs Update;audio;gpu;services;status-boots","boots","2021-04-18 23:02:46.000" +"Urban Trial Playground - 01001B10068EC000","01001B10068EC000","UE4;nvdec;online;status-playable","playable","2021-03-25 20:56:51.000" +"Ben 10 - 01006E1004404000","01006E1004404000","nvdec;status-playable","playable","2021-02-26 14:08:35.000" +"Lanota","","status-playable","playable","2019-09-04 01:58:14.000" +"Portal Knights - 0100437004170000","0100437004170000","ldn-untested;online;status-playable","playable","2021-05-27 19:29:04.000" +"Thimbleweed Park - 01009BD003B36000","01009BD003B36000","status-playable","playable","2022-08-24 11:15:31.000" +"Pokkén Tournament DX - 0100B3F000BE2000","0100B3F000BE2000","status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug","playable","2024-07-18 23:11:08.000" +"Farming Simulator Nintendo Switch Edition","","nvdec;status-playable","playable","2021-01-19 14:46:44.000" +"Sonic Forces - 01001270012B6000","01001270012B6000","status-playable","playable","2024-07-28 13:11:21.000" +"One Piece Pirate Warriors 3","","nvdec;status-playable","playable","2020-05-10 06:23:52.000" +"Dragon Quest Heroes I + II (JP) - 0100CD3000BDC000","0100CD3000BDC000","nvdec;status-playable","playable","2021-04-08 14:27:16.000" +"Dragon Quest Builders - 010008900705C000","010008900705C000","gpu;status-ingame;nvdec","ingame","2023-08-14 09:54:36.000" +"Don't Starve - 0100751007ADA000","0100751007ADA000","status-playable;nvdec","playable","2022-02-05 20:43:34.000" +"Bud Spencer & Terence Hill - Slaps and Beans - 01000D200AC0C000","01000D200AC0C000","status-playable","playable","2022-07-17 12:37:00.000" +"Fantasy Hero Unsigned Legacy - 0100767008502000","0100767008502000","status-playable","playable","2022-07-26 12:28:52.000" +"MUSNYX","","status-playable","playable","2020-05-08 14:24:43.000" +"Mario Tennis Aces - 0100BDE00862A000","0100BDE00862A000","gpu;status-ingame;nvdec;ldn-works;LAN","ingame","2024-09-28 15:54:40.000" +"Higurashi no Naku Koro ni Hō - 0100F6A00A684000","0100F6A00A684000","audio;status-ingame","ingame","2021-09-18 14:40:28.000" +"Nintendo Entertainment System - Nintendo Switch Online - 0100D870045B6000","0100D870045B6000","status-playable;online","playable","2022-07-01 15:45:06.000" +"SEGA Ages: Sonic The Hedgehog - 010051F00AC5E000","010051F00AC5E000","slow;status-playable","playable","2023-03-05 20:16:31.000" +"10 Second Run Returns - 01004D1007926000","01004D1007926000","gpu;status-ingame","ingame","2022-07-17 13:06:18.000" +"PriPara: All Idol Perfect Stage - 010007F00879E000","010007F00879E000","status-playable","playable","2022-11-22 16:35:52.000" +"Shantae and the Pirate's Curse - 0100EFD00A4FA000","0100EFD00A4FA000","status-playable","playable","2024-04-29 17:21:57.000" +"DARK SOULS™: REMASTERED - 01004AB00A260000","01004AB00A260000","gpu;status-ingame;nvdec;online-broken","ingame","2024-04-09 19:47:58.000" +"The Liar Princess and the Blind Prince - 010064B00B95C000","010064B00B95C000","audio;slow;status-playable","playable","2020-06-08 21:23:28.000" +"Dead Cells - 0100646009FBE000","0100646009FBE000","status-playable","playable","2021-09-22 22:18:49.000" +"Sonic Mania - 01009AA000FAA000","01009AA000FAA000","status-playable","playable","2020-06-08 17:30:57.000" +"The Mahjong","","Needs Update;crash;services;status-nothing","nothing","2021-04-01 22:06:22.000" +"Angels of Death - 0100AE000AEBC000","0100AE000AEBC000","nvdec;status-playable","playable","2021-02-22 14:17:15.000" +"Penny-Punching Princess - 0100C510049E0000","0100C510049E0000","status-playable","playable","2022-08-09 13:37:05.000" +"Just Shapes & Beats","","ldn-untested;nvdec;status-playable","playable","2021-02-09 12:18:36.000" +"Minecraft - Nintendo Switch Edition - 01006BD001E06000","01006BD001E06000","status-playable;ldn-broken","playable","2023-10-15 01:47:08.000" +"FINAL FANTASY XV POCKET EDITION HD","","status-playable","playable","2021-01-05 17:52:08.000" +"Dragon Ball Xenoverse 2 - 010078D000F88000","010078D000F88000","gpu;status-ingame;nvdec;online;ldn-untested","ingame","2022-07-24 12:31:01.000" +"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings - 010009900947A000","010009900947A000","nvdec;status-playable","playable","2021-06-03 18:37:01.000" +"Nights of Azure 2: Bride of the New Moon - 0100628004BCE000","0100628004BCE000","status-menus;crash;nvdec;regression","menus","2022-11-24 16:00:39.000" +"RXN -Raijin-","","nvdec;status-playable","playable","2021-01-10 16:05:43.000" +"The Legend of Zelda: Breath of the Wild - 01007EF00011E000","01007EF00011E000","gpu;status-ingame;amd-vendor-bug;mac-bug","ingame","2024-09-23 19:35:46.000" +"The Messenger","","status-playable","playable","2020-03-22 13:51:37.000" +"Starlink: Battle for Atlas - 01002CC003FE6000","01002CC003FE6000","services-horizon;status-nothing;crash;Needs Update","nothing","2024-05-05 17:25:11.000" +"Nintendo Labo - Toy-Con 01: Variety Kit - 0100C4B0034B2000","0100C4B0034B2000","gpu;status-ingame","ingame","2022-08-07 12:56:07.000" +"Diablo III: Eternal Collection - 01001B300B9BE000","01001B300B9BE000","status-playable;online-broken;ldn-works","playable","2023-08-21 23:48:03.000" +"Road Redemption - 010053000B986000","010053000B986000","status-playable;online-broken","playable","2022-08-12 11:26:20.000" +"Brawlhalla - 0100C6800B934000","0100C6800B934000","online;opengl;status-playable","playable","2021-06-03 18:26:09.000" +"Super Mario Odyssey - 0100000000010000","0100000000010000","status-playable;nvdec;intel-vendor-bug;mac-bug","playable","2024-08-25 01:32:34.000" +"Sonic Mania Plus - 01009AA000FAA000","01009AA000FAA000","status-playable","playable","2022-01-16 04:09:11.000" +"Pokken Tournament DX Demo - 010030D005AE6000","010030D005AE6000","status-playable;demo;opengl-backend-bug","playable","2022-08-10 12:03:19.000" +"Fast RMX - 01009510001CA000","01009510001CA000","slow;status-ingame;crash;ldn-partial","ingame","2024-06-22 20:48:58.000" +"Steins;Gate Elite","","status-playable","playable","2020-08-04 07:33:32.000" +"Memories Off -Innocent Fille- for Dearest","","status-playable","playable","2020-08-04 07:31:22.000" +"Enchanting Mahjong Match","","gpu;status-ingame","ingame","2020-04-17 22:01:31.000" +"Code of Princess EX - 010034E005C9C000","010034E005C9C000","nvdec;online;status-playable","playable","2021-06-03 10:50:13.000" +"20XX - 0100749009844000","0100749009844000","gpu;status-ingame","ingame","2023-08-14 09:41:44.000" +"Cartoon Network Battle Crashers - 0100085003A2A000","0100085003A2A000","status-playable","playable","2022-07-21 21:55:40.000" +"Danmaku Unlimited 3","","status-playable","playable","2020-11-15 00:48:35.000" +"Mega Man Legacy Collection Vol.1 - 01002D4007AE0000","01002D4007AE0000","gpu;status-ingame","ingame","2021-06-03 18:17:17.000" +"Sparkle ZERO","","gpu;slow;status-ingame","ingame","2020-03-23 18:19:18.000" +"Sparkle 2","","status-playable","playable","2020-10-19 11:51:39.000" +"Sparkle Unleashed - 01000DC007E90000","01000DC007E90000","status-playable","playable","2021-06-03 14:52:15.000" +"I AM SETSUNA - 0100849000BDA000","0100849000BDA000","status-playable","playable","2021-11-28 11:06:11.000" +"Lego City Undercover - 01003A30012C0000","01003A30012C0000","status-playable;nvdec","playable","2024-09-30 08:44:27.000" +"Mega Man X Legacy Collection","","audio;crash;services;status-menus","menus","2020-12-04 04:30:17.000" +"Super Bomberman R - 01007AD00013E000","01007AD00013E000","status-playable;nvdec;online-broken;ldn-works","playable","2022-08-16 19:19:14.000" +"Mega Man 11 - 0100B0C0086B0000","0100B0C0086B0000","status-playable","playable","2021-04-26 12:07:53.000" +"Undertale - 010080B00AD66000","010080B00AD66000","status-playable","playable","2022-08-31 17:31:46.000" +"Pokémon: Let's Go, Eevee! - 0100187003A36000","0100187003A36000","status-ingame;crash;nvdec;online-broken;ldn-broken","ingame","2024-06-01 15:03:04.000" +"Poly Bridge","","services;status-playable","playable","2020-06-08 23:32:41.000" +"BlazBlue: Cross Tag Battle","","nvdec;online;status-playable","playable","2021-01-05 20:29:37.000" +"Capcom Beat 'Em Up Bundle","","status-playable","playable","2020-03-23 18:31:24.000" +"Owlboy","","status-playable","playable","2020-10-19 14:24:45.000" +"Subarashiki Kono Sekai -Final Remix-","","services;slow;status-ingame","ingame","2020-02-10 16:21:51.000" +"Ultra Street Fighter II: The Final Challengers - 01007330027EE000","01007330027EE000","status-playable;ldn-untested","playable","2021-11-25 07:54:58.000" +"Mighty Gunvolt Burst","","status-playable","playable","2020-10-19 16:05:49.000" +"Super Meat Boy","","services;status-playable","playable","2020-04-02 23:10:07.000" +"UNO - 01005AA00372A000","01005AA00372A000","status-playable;nvdec;ldn-untested","playable","2022-07-28 14:49:47.000" +"Tales of the Tiny Planet - 0100408007078000","0100408007078000","status-playable","playable","2021-01-25 15:47:41.000" +"Octopath Traveler","","UE4;crash;gpu;status-ingame","ingame","2020-08-31 02:34:36.000" +"A magical high school girl - 01008DD006C52000","01008DD006C52000","status-playable","playable","2022-07-19 14:40:50.000" +"Superbeat: Xonic EX - 0100FF60051E2000","0100FF60051E2000","status-ingame;crash;nvdec","ingame","2022-08-19 18:54:40.000" +"DRAGON BALL FighterZ - 0100A250097F0000","0100A250097F0000","UE4;ldn-broken;nvdec;online;status-playable","playable","2021-06-11 16:19:04.000" +"Arcade Archives VS. SUPER MARIO BROS.","","online;status-playable","playable","2021-04-08 14:48:11.000" +"Celeste","","status-playable","playable","2020-06-17 10:14:40.000" +"Hollow Knight - 0100633007D48000","0100633007D48000","status-playable;nvdec","playable","2023-01-16 15:44:56.000" +"Shining Resonance Refrain - 01009A5009A9E000","01009A5009A9E000","status-playable;nvdec","playable","2022-08-12 18:03:01.000" +"Valkyria Chronicles 4 Demo - 0100FBD00B91E000","0100FBD00B91E000","slow;status-ingame;demo","ingame","2022-08-29 20:39:07.000" +"Super Smash Bros. Ultimate - 01006A800016E000","01006A800016E000","gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug","ingame","2024-09-14 23:05:21.000" +"Cendrillon palikA - 01006B000A666000","01006B000A666000","gpu;status-ingame;nvdec","ingame","2022-07-21 22:52:24.000" +"Atari Flashback Classics","","","","2018-12-15 06:55:27.000" +"RPG Maker MV","","nvdec;status-playable","playable","2021-01-05 20:12:01.000" +"SNK 40th Anniversary Collection - 01004AB00AEF8000","01004AB00AEF8000","status-playable","playable","2022-08-14 13:33:15.000" +"Firewatch - 0100AC300919A000","0100AC300919A000","status-playable","playable","2021-06-03 10:56:38.000" +"Taiko no Tatsujin: Drum 'n' Fun! - 01002C000B552000","01002C000B552000","status-playable;online-broken;ldn-broken","playable","2023-05-20 15:10:12.000" +"Fairy Fencer F™: Advent Dark Force - 0100F6D00B8F2000","0100F6D00B8F2000","status-ingame;32-bit;crash;nvdec","ingame","2023-04-16 03:53:48.000" +"Azure Striker Gunvolt: STRIKER PACK - 0100192003FA4000","0100192003FA4000","32-bit;status-playable","playable","2024-02-10 23:51:21.000" +"LIMBO - 01009C8009026000","01009C8009026000","cpu;status-boots;32-bit","boots","2023-06-28 15:39:19.000" +"Dragon Marked for Death: Frontline Fighters (Empress & Warrior) - 010089700150E000","010089700150E000","status-playable;ldn-untested;audout","playable","2022-03-10 06:44:34.000" +"SENRAN KAGURA Reflexions","","status-playable","playable","2020-03-23 19:15:23.000" +"Dies irae Amantes amentes For Nintendo Switch - 0100BB900B5B4000","0100BB900B5B4000","status-nothing;32-bit;crash","nothing","2022-02-16 07:09:05.000" +"TETRIS 99 - 010040600C5CE000","010040600C5CE000","gpu;status-ingame;online-broken;ldn-untested","ingame","2024-05-02 16:36:41.000" +"Yoshi's Crafted World Demo Version","","gpu;status-boots;status-ingame","boots","2020-12-16 14:57:40.000" +"8-BIT ADVENTURE STEINS;GATE","","audio;status-ingame","ingame","2020-01-12 15:05:06.000" +"Ao no Kanata no Four Rhythm - 0100FA100620C000","0100FA100620C000","status-playable","playable","2022-07-21 10:50:42.000" +"DELTARUNE Chapter 1 - 010023800D64A000","010023800D64A000","status-playable","playable","2023-01-22 04:47:44.000" +"My Girlfriend is a Mermaid!?","","nvdec;status-playable","playable","2020-05-08 13:32:55.000" +"SEGA Mega Drive Classics","","online;status-playable","playable","2021-01-05 11:08:00.000" +"Aragami: Shadow Edition - 010071800BA74000","010071800BA74000","nvdec;status-playable","playable","2021-02-21 20:33:23.000" +"この世の果てで恋を唄う少女YU-NO","","audio;status-ingame","ingame","2021-01-22 07:00:16.000" +"Xenoblade Chronicles 2 - 0100E95004038000","0100E95004038000","deadlock;status-ingame;amd-vendor-bug","ingame","2024-03-28 14:31:41.000" +"Atelier Rorona Arland no Renkinjutsushi DX (JP) - 01002D700B906000","01002D700B906000","status-playable;nvdec","playable","2022-12-02 17:26:54.000" +"DEAD OR ALIVE Xtreme 3 Scarlet - 01009CC00C97C000","01009CC00C97C000","status-playable","playable","2022-07-23 17:05:06.000" +"Blaster Master Zero 2 - 01005AA00D676000","01005AA00D676000","status-playable","playable","2021-04-08 15:22:59.000" +"Vroom in the Night Sky - 01004E90028A2000","01004E90028A2000","status-playable;Needs Update;vulkan-backend-bug","playable","2023-02-20 02:32:29.000" +"Our World Is Ended.","","nvdec;status-playable","playable","2021-01-19 22:46:57.000" +"Mortal Kombat 11 - 0100F2200C984000","0100F2200C984000","slow;status-ingame;nvdec;online-broken;ldn-broken","ingame","2024-06-19 02:22:17.000" +"SEGA Ages: Virtua Racing - 010054400D2E6000","010054400D2E6000","status-playable;online-broken","playable","2023-01-29 17:08:39.000" +"BOXBOY! + BOXGIRL!","","status-playable","playable","2020-11-08 01:11:54.000" +"Hyrule Warriors: Definitive Edition - 0100AE00096EA000","0100AE00096EA000","services-horizon;status-ingame;nvdec","ingame","2024-06-16 10:34:05.000" +"Cytus α - 010063100B2C2000","010063100B2C2000","nvdec;status-playable","playable","2021-02-20 13:40:46.000" +"Resident Evil 4 - 010099A00BC1E000","010099A00BC1E000","status-playable;nvdec","playable","2022-11-16 21:16:04.000" +"Team Sonic Racing - 010092B0091D0000","010092B0091D0000","status-playable;online-broken;ldn-works","playable","2024-02-05 15:05:27.000" +"Pang Adventures - 010083700B730000","010083700B730000","status-playable","playable","2021-04-10 12:16:59.000" +"Remi Lore - 010095900B436000","010095900B436000","status-playable","playable","2021-06-03 18:58:15.000" +"SKYHILL - 0100A0A00D1AA000","0100A0A00D1AA000","status-playable","playable","2021-03-05 15:19:11.000" +"Valkyria Chronicles 4 - 01005C600AC68000","01005C600AC68000","audout;nvdec;status-playable","playable","2021-06-03 18:12:25.000" +"Crystal Crisis - 0100972008234000","0100972008234000","nvdec;status-playable","playable","2021-02-20 13:52:44.000" +"Crash Team Racing Nitro-Fueled - 0100F9F00C696000","0100F9F00C696000","gpu;status-ingame;nvdec;online-broken","ingame","2023-06-25 02:40:17.000" +"Collection of Mana","","status-playable","playable","2020-10-19 19:29:45.000" +"Super Mario Maker 2 - 01009B90006DC000","01009B90006DC000","status-playable;online-broken;ldn-broken","playable","2024-08-25 11:05:19.000" +"Nekopara Vol.3 - 010045000E418000","010045000E418000","status-playable","playable","2022-10-03 12:49:04.000" +"Moero Chronicle Hyper - 0100B8500D570000","0100B8500D570000","32-bit;status-playable","playable","2022-08-11 07:21:56.000" +"Monster Hunter XX Demo","","32-bit;cpu;status-nothing","nothing","2020-03-22 10:12:28.000" +"Super Neptunia RPG - 01004D600AC14000","01004D600AC14000","status-playable;nvdec","playable","2022-08-17 16:38:52.000" +"Terraria - 0100E46006708000","0100E46006708000","status-playable;online-broken","playable","2022-09-12 16:14:57.000" +"Megaman Legacy Collection 2","","status-playable","playable","2021-01-06 08:47:59.000" +"Blazing Chrome","","status-playable","playable","2020-11-16 04:56:54.000" +"Dragon Quest Builders 2 - 010042000A986000","010042000A986000","status-playable","playable","2024-04-19 16:36:38.000" +"CLANNAD - 0100A3A00CC7E000","0100A3A00CC7E000","status-playable","playable","2021-06-03 17:01:02.000" +"Ys VIII: Lacrimosa of Dana - 01007F200B0C0000","01007F200B0C0000","status-playable;nvdec","playable","2023-08-05 09:26:41.000" +"PC Building Simulator","","status-playable","playable","2020-06-12 00:31:58.000" +"NO THING","","status-playable","playable","2021-01-04 19:06:01.000" +"The Swords of Ditto","","slow;status-ingame","ingame","2020-12-06 00:13:12.000" +"Kill la Kill - IF","","status-playable","playable","2020-06-09 14:47:08.000" +"Spyro Reignited Trilogy","","Needs More Attention;UE4;crash;gpu;nvdec;status-menus","menus","2021-01-22 13:01:56.000" +"FINAL FANTASY VIII REMASTERED - 01008B900DC0A000","01008B900DC0A000","status-playable;nvdec","playable","2023-02-15 10:57:48.000" +"Super Nintendo Entertainment System - Nintendo Switch Online","","status-playable","playable","2021-01-05 00:29:48.000" +"スーパーファミコン Nintendo Switch Online","","slow;status-ingame","ingame","2020-03-14 05:48:38.000" +"Street Fighter 30th Anniversary Collection - 0100024008310000","0100024008310000","status-playable;online-broken;ldn-partial","playable","2022-08-20 16:50:47.000" +"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda - 01000B900D8B0000","01000B900D8B0000","slow;status-playable;nvdec","playable","2024-04-01 22:43:40.000" +"Nekopara Vol.2","","status-playable","playable","2020-12-16 11:04:47.000" +"Nekopara Vol.1 - 0100B4900AD3E000","0100B4900AD3E000","status-playable;nvdec","playable","2022-08-06 18:25:54.000" +"Gunvolt Chronicles: Luminous Avenger iX","","status-playable","playable","2020-06-16 22:47:07.000" +"Outlast - 01008D4007A1E000","01008D4007A1E000","status-playable;nvdec;loader-allocator;vulkan-backend-bug","playable","2024-01-27 04:44:26.000" +"OKAMI HD - 0100276009872000","0100276009872000","status-playable;nvdec","playable","2024-04-05 06:24:58.000" +"Luigi's Mansion 3 - 0100DCA0064A6000","0100DCA0064A6000","gpu;slow;status-ingame;Needs Update;ldn-works","ingame","2024-09-27 22:17:36.000" +"The Legend of Zelda: Link's Awakening - 01006BB00C6F0000","01006BB00C6F0000","gpu;status-ingame;nvdec;mac-bug","ingame","2023-08-09 17:37:40.000" +"Cat Quest","","status-playable","playable","2020-04-02 23:09:32.000" +"Xenoblade Chronicles 2: Torna - The Golden Country - 0100C9F009F7A000","0100C9F009F7A000","slow;status-playable;nvdec","playable","2023-01-28 16:47:28.000" +"Devil May Cry","","nvdec;status-playable","playable","2021-01-04 19:43:08.000" +"Fire Emblem Warriors - 0100F15003E64000","0100F15003E64000","status-playable;nvdec","playable","2023-05-10 01:53:10.000" +"Disgaea 4 Complete Plus","","gpu;slow;status-playable","playable","2020-02-18 10:54:28.000" +"Donkey Kong Country Tropical Freeze - 0100C1F0051B6000","0100C1F0051B6000","status-playable","playable","2024-08-05 16:46:10.000" +"Puzzle and Dragons GOLD","","slow;status-playable","playable","2020-05-13 15:09:34.000" +"Fe","","","","2020-01-21 04:08:33.000" +"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020 - 010002C00C270000","010002C00C270000","status-ingame;crash;online-broken;ldn-works","ingame","2024-08-23 16:12:55.000" +"void* tRrLM(); //Void Terrarium - 0100FF7010E7E000","0100FF7010E7E000","gpu;status-ingame;Needs Update;regression","ingame","2023-02-10 01:13:25.000" +"Cars 3 Driven to Win - 01008D1001512000","01008D1001512000","gpu;status-ingame","ingame","2022-07-21 21:21:05.000" +"Yu-Gi-Oh! Legacy of the Duelist: Link Evolution! - 010022400BE5A000","010022400BE5A000","status-playable","playable","2024-09-27 21:48:43.000" +"Baba Is You - 01002CD00A51C000","01002CD00A51C000","status-playable","playable","2022-07-17 05:36:54.000" +"Thronebreaker: The Witcher Tales - 0100E910103B4000","0100E910103B4000","nvdec;status-playable","playable","2021-06-03 16:40:15.000" +"Fitness Boxing","","services;status-ingame","ingame","2020-05-17 14:00:48.000" +"Fire Emblem: Three Houses - 010055D009F78000","010055D009F78000","status-playable;online-broken","playable","2024-09-14 23:53:50.000" +"Persona 5: Scramble","","deadlock;status-boots","boots","2020-10-04 03:22:29.000" +"Pokémon Sword - 0100ABF008968000","0100ABF008968000","deadlock;status-ingame;crash;online-broken;ldn-works;LAN","ingame","2024-08-26 15:40:37.000" +"Mario + Rabbids Kingdom Battle - 010067300059A000","010067300059A000","slow;status-playable;opengl-backend-bug","playable","2024-05-06 10:16:54.000" +"Tokyo Mirage Sessions #FE Encore - 0100A9400C9C2000","0100A9400C9C2000","32-bit;status-playable;nvdec","playable","2022-07-07 09:41:07.000" +"Disgaea 1 Complete - 01004B100AF18000","01004B100AF18000","status-playable","playable","2023-01-30 21:45:23.000" +"初音ミク Project DIVA MEGA39's - 0100F3100DA46000","0100F3100DA46000","audio;status-playable;loader-allocator","playable","2022-07-29 11:45:52.000" +"Minna de Wai Wai! Spelunker - 0100C3F000BD8000","0100C3F000BD8000","status-nothing;crash","nothing","2021-11-03 07:17:11.000" +"Nickelodeon Paw Patrol: On a Roll - 0100CEC003A4A000","0100CEC003A4A000","nvdec;status-playable","playable","2021-01-28 21:14:49.000" +"Rune Factory 4 Special - 010051D00E3A4000","010051D00E3A4000","status-ingame;32-bit;crash;nvdec","ingame","2023-05-06 08:49:17.000" +"Mario Kart 8 Deluxe - 0100152000022000","0100152000022000","32-bit;status-playable;ldn-works;LAN;amd-vendor-bug","playable","2024-09-19 11:55:17.000" +"Pokémon Mystery Dungeon Rescue Team DX - 01003D200BAA2000","01003D200BAA2000","status-playable;mac-bug","playable","2024-01-21 00:16:32.000" +"YGGDRA UNION We’ll Never Fight Alone","","status-playable","playable","2020-04-03 02:20:47.000" +"メモリーズオフ - Innocent Fille - 010065500B218000","010065500B218000","status-playable","playable","2022-12-02 17:36:48.000" +"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town) - 01001D900D9AC000","01001D900D9AC000","slow;status-ingame;crash;Needs Update","ingame","2022-04-24 22:46:04.000" +"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition - 0100CE500D226000","0100CE500D226000","status-playable;nvdec;opengl","playable","2022-09-14 15:01:57.000" +"Animal Crossing: New Horizons - 01006F8002326000","01006F8002326000","gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug","ingame","2024-09-23 13:31:49.000" +"Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!","","services;status-menus","menus","2020-03-20 14:00:57.000" +"Super One More Jump - 0100284007D6C000","0100284007D6C000","status-playable","playable","2022-08-17 16:47:47.000" +"Trine - 0100D9000A930000","0100D9000A930000","ldn-untested;nvdec;status-playable","playable","2021-06-03 11:28:15.000" +"Sky Force Reloaded","","status-playable","playable","2021-01-04 20:06:57.000" +"World of Goo - 010009E001D90000","010009E001D90000","gpu;status-boots;32-bit;crash;regression","boots","2024-04-12 05:52:14.000" +"ZERO GUNNER 2","","status-playable","playable","2021-01-04 20:17:14.000" +"Zaccaria Pinball - 010092400A678000","010092400A678000","status-playable;online-broken","playable","2022-09-03 15:44:28.000" +"1917 - The Alien Invasion DX","","status-playable","playable","2021-01-08 22:11:16.000" +"Astro Duel Deluxe - 0100F0400351C000","0100F0400351C000","32-bit;status-playable","playable","2021-06-03 11:21:48.000" +"Another World - 01003C300AAAE000","01003C300AAAE000","slow;status-playable","playable","2022-07-21 10:42:38.000" +"Ring Fit Adventure - 01002FF008C24000","01002FF008C24000","crash;services;status-nothing","nothing","2021-04-14 19:00:01.000" +"Arcade Classics Anniversary Collection - 010050000D6C4000","010050000D6C4000","status-playable","playable","2021-06-03 13:55:10.000" +"Assault Android Cactus+ - 0100DF200B24C000","0100DF200B24C000","status-playable","playable","2021-06-03 13:23:55.000" +"American Fugitive","","nvdec;status-playable","playable","2021-01-04 20:45:11.000" +"Nickelodeon Kart Racers","","status-playable","playable","2021-01-07 12:16:49.000" +"Neonwall - 0100743008694000","0100743008694000","status-playable;nvdec","playable","2022-08-06 18:49:52.000" +"Never Stop Sneakin'","","","","2020-03-19 12:55:40.000" +"Next Up Hero","","online;status-playable","playable","2021-01-04 22:39:36.000" +"Ninja Striker","","status-playable","playable","2020-12-08 19:33:29.000" +"Not Not a Brain Buster","","status-playable","playable","2020-05-10 02:05:26.000" +"Oh...Sir! The Hollywood Roast","","status-ingame","ingame","2020-12-06 00:42:30.000" +"Old School Musical","","status-playable","playable","2020-12-10 12:51:12.000" +"Abyss","","","","2020-03-19 15:41:55.000" +"Alteric","","status-playable","playable","2020-11-08 13:53:22.000" +"AIRHEART - Tales of Broken Wings - 01003DD00BFEE000","01003DD00BFEE000","status-playable","playable","2021-02-26 15:20:27.000" +"Necrosphere","","","","2020-03-19 17:25:03.000" +"Neverout","","","","2020-03-19 17:33:39.000" +"Old Man's Journey - 0100CE2007A86000","0100CE2007A86000","nvdec;status-playable","playable","2021-01-28 19:16:52.000" +"Dr Kawashima's Brain Training - 0100ED000D390000","0100ED000D390000","services;status-ingame","ingame","2023-06-04 00:06:46.000" +"Nine Parchments - 0100D03003F0E000","0100D03003F0E000","status-playable;ldn-untested","playable","2022-08-07 12:32:08.000" +"All-Star Fruit Racing - 0100C1F00A9B8000","0100C1F00A9B8000","status-playable;nvdec;UE4","playable","2022-07-21 00:35:37.000" +"Armello","","nvdec;status-playable","playable","2021-01-07 11:43:26.000" +"DOOM 64","","nvdec;status-playable;vulkan","playable","2020-10-13 23:47:28.000" +"Motto New Pazzmatsu-san Shimpin Sotsugyo Keikaku","","","","2020-03-20 14:53:55.000" +"Refreshing Sideways Puzzle Ghost Hammer","","status-playable","playable","2020-10-18 12:08:54.000" +"Astebreed - 010057A00C1F6000","010057A00C1F6000","status-playable","playable","2022-07-21 17:33:54.000" +"ASCENDANCE","","status-playable","playable","2021-01-05 10:54:40.000" +"Astral Chain - 01007300020FA000","01007300020FA000","status-playable","playable","2024-07-17 18:02:19.000" +"Oceanhorn","","status-playable","playable","2021-01-05 13:55:22.000" +"NORTH","","nvdec;status-playable","playable","2021-01-05 16:17:44.000" +"No Heroes Here","","online;status-playable","playable","2020-05-10 02:41:57.000" +"New Frontier Days -Founding Pioneers-","","status-playable","playable","2020-12-10 12:45:07.000" +"Star Ghost","","","","2020-03-20 23:40:10.000" +"Stern Pinball Arcade - 0100AE0006474000","0100AE0006474000","status-playable","playable","2022-08-16 14:24:41.000" +"Nightmare Boy","","status-playable","playable","2021-01-05 15:52:29.000" +"Pinball FX3 - 0100DB7003828000","0100DB7003828000","status-playable;online-broken","playable","2022-11-11 23:49:07.000" +"Polygod - 010017600B180000","010017600B180000","slow;status-ingame;regression","ingame","2022-08-10 14:38:14.000" +"Prison Architect - 010029200AB1C000","010029200AB1C000","status-playable","playable","2021-04-10 12:27:58.000" +"Psikyo Collection Vol 1","","32-bit;status-playable","playable","2020-10-11 13:18:47.000" +"Raging Justice - 01003D00099EC000","01003D00099EC000","status-playable","playable","2021-06-03 14:06:50.000" +"Old School Racer 2","","status-playable","playable","2020-10-19 12:11:26.000" +"Death Road to Canada - 0100423009358000","0100423009358000","gpu;audio;status-nothing;32-bit;crash","nothing","2023-06-28 15:39:26.000" +"Feather - 0100E4300CB3E000","0100E4300CB3E000","status-playable","playable","2021-06-03 14:11:27.000" +"Laser Kitty Pow Pow","","","","2020-03-21 23:44:13.000" +"Bad Dudes","","status-playable","playable","2020-12-10 12:30:56.000" +"Bomber Crew - 01007900080B6000","01007900080B6000","status-playable","playable","2021-06-03 14:21:28.000" +"Death Squared","","status-playable","playable","2020-12-04 13:00:15.000" +"PAC-MAN CHAMPIONSHIP EDITION 2 PLUS","","status-playable","playable","2021-01-19 22:06:18.000" +"RollerCoaster Tycoon Adventures","","nvdec;status-playable","playable","2021-01-05 18:14:18.000" +"STAY - 0100616009082000","0100616009082000","crash;services;status-boots","boots","2021-04-23 14:24:52.000" +"STRIKERS1945 for Nintendo Switch - 0100FF5005B76000","0100FF5005B76000","32-bit;status-playable","playable","2021-06-03 19:35:04.000" +"STRIKERS1945II for Nintendo Switch - 0100720008ED2000","0100720008ED2000","32-bit;status-playable","playable","2021-06-03 19:43:00.000" +"BLEED","","","","2020-03-22 09:15:11.000" +"Earthworms Demo","","status-playable","playable","2021-01-05 16:57:11.000" +"MEMBRANE","","","","2020-03-22 10:25:32.000" +"Mercenary Kings","","online;status-playable","playable","2020-10-16 13:05:58.000" +"Morphite","","status-playable","playable","2021-01-05 19:40:55.000" +"Spiral Splatter","","status-playable","playable","2020-06-04 14:03:57.000" +"Odium to the Core","","gpu;status-ingame","ingame","2021-01-08 14:03:52.000" +"Brawl","","nvdec;slow;status-playable","playable","2020-06-04 14:23:18.000" +"Defunct","","status-playable","playable","2021-01-08 21:33:46.000" +"Dracula's Legacy","","nvdec;status-playable","playable","2020-12-10 13:24:25.000" +"Submerged - 0100EDA00D866000","0100EDA00D866000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-16 15:17:01.000" +"Resident Evil Revelations - 0100643002136000","0100643002136000","status-playable;nvdec;ldn-untested","playable","2022-08-11 12:44:19.000" +"Pokémon: Let's Go, Pikachu! - 010003F003A34000","010003F003A34000","status-ingame;crash;nvdec;online-broken;ldn-broken","ingame","2024-03-15 07:55:41.000" +"Syberia 1 & 2 - 01004BB00421E000","01004BB00421E000","status-playable","playable","2021-12-24 12:06:25.000" +"Light Fall","","nvdec;status-playable","playable","2021-01-18 14:55:36.000" +"PLANET ALPHA","","UE4;gpu;status-ingame","ingame","2020-12-16 14:42:20.000" +"Game Doraemon Nobita no Shin Kyoryu - 01006BD00F8C0000","01006BD00F8C0000","gpu;status-ingame","ingame","2023-02-27 02:03:28.000" +"Shift Happens","","status-playable","playable","2021-01-05 21:24:18.000" +"SENRAN KAGURA Peach Ball - 0100D1800D902000","0100D1800D902000","status-playable","playable","2021-06-03 15:12:10.000" +"Shadow Bug","","","","2020-03-23 20:26:08.000" +"Dandy Dungeon: Legend of Brave Yamada","","status-playable","playable","2021-01-06 09:48:47.000" +"Scribblenauts Mega Pack","","nvdec;status-playable","playable","2020-12-17 22:56:14.000" +"Scribblenauts Showdown","","gpu;nvdec;status-ingame","ingame","2020-12-17 23:05:53.000" +"Super Chariot - 010065F004E5E000","010065F004E5E000","status-playable","playable","2021-06-03 13:19:01.000" +"Table Top Racing World Tour Nitro Edition","","status-playable","playable","2020-04-05 23:21:30.000" +"The Pinball Arcade - 0100CD300880E000","0100CD300880E000","status-playable;online-broken","playable","2022-08-22 19:49:46.000" +"The Room - 010079400BEE0000","010079400BEE0000","status-playable","playable","2021-04-14 18:57:05.000" +"The Binding of Isaac: Afterbirth+ - 010021C000B6A000","010021C000B6A000","status-playable","playable","2021-04-26 14:11:56.000" +"World Soccer Pinball","","status-playable","playable","2021-01-06 00:37:02.000" +"ZOMBIE GOLD RUSH","","online;status-playable","playable","2020-09-24 12:56:08.000" +"Wondershot - 0100F5D00C812000","0100F5D00C812000","status-playable","playable","2022-08-31 21:05:31.000" +"Yet Another Zombie Defense HD","","status-playable","playable","2021-01-06 00:18:39.000" +"Among the Sleep - Enhanced Edition - 010046500C8D2000","010046500C8D2000","nvdec;status-playable","playable","2021-06-03 15:06:25.000" +"Silence - 0100F1400B0D6000","0100F1400B0D6000","nvdec;status-playable","playable","2021-06-03 14:46:17.000" +"A Robot Named Fight","","","","2020-03-24 19:27:39.000" +"60 Seconds! - 0100969005E98000","0100969005E98000","services;status-ingame","ingame","2021-11-30 01:04:14.000" +"Xenon Racer - 010028600BA16000","010028600BA16000","status-playable;nvdec;UE4","playable","2022-08-31 22:05:30.000" +"Awesome Pea","","status-playable","playable","2020-10-11 12:39:23.000" +"Woodle Tree 2","","gpu;slow;status-ingame","ingame","2020-06-04 18:44:00.000" +"Volgarr the Viking","","status-playable","playable","2020-12-18 15:25:50.000" +"VVVVVV","","","","2020-03-24 21:53:29.000" +"Vegas Party - 01009CD003A0A000","01009CD003A0A000","status-playable","playable","2021-04-14 19:21:41.000" +"Worms W.M.D - 01001AE005166000","01001AE005166000","gpu;status-boots;crash;nvdec;ldn-untested","boots","2023-09-16 21:42:59.000" +"Ambition of the Slimes","","","","2020-03-24 22:46:18.000" +"WINDJAMMERS","","online;status-playable","playable","2020-10-13 11:24:25.000" +"WarGroove - 01000F0002BB6000","01000F0002BB6000","status-playable;online-broken","playable","2022-08-31 10:30:45.000" +"Car Mechanic Manager","","status-playable","playable","2020-07-23 18:50:17.000" +"Cattails - 010004400B28A000","010004400B28A000","status-playable","playable","2021-06-03 14:36:57.000" +"Chameleon Run Deluxe Edition","","","","2020-03-25 00:20:21.000" +"ClusterPuck 99","","status-playable","playable","2021-01-06 00:28:12.000" +"Coloring Book - 0100A7000BD28000","0100A7000BD28000","status-playable","playable","2022-07-22 11:17:05.000" +"Crashlands - 010027100BD16000","010027100BD16000","status-playable","playable","2021-05-27 20:30:06.000" +"Crimsonland - 01005640080B0000","01005640080B0000","status-playable","playable","2021-05-27 20:50:54.000" +"Cubikolor","","","","2020-03-25 00:39:17.000" +"My Friend Pedro: Blood Bullets Bananas - 010031200B94C000","010031200B94C000","nvdec;status-playable","playable","2021-05-28 11:19:17.000" +"VA-11 HALL-A - 0100A6700D66E000","0100A6700D66E000","status-playable","playable","2021-02-26 15:05:34.000" +"Octodad Dadliest Catch - 0100CAB006F54000","0100CAB006F54000","crash;status-boots","boots","2021-04-23 15:26:12.000" +"Neko Navy: Daydream Edition","","","","2020-03-25 10:11:47.000" +"Neon Chrome - 010075E0047F8000","010075E0047F8000","status-playable","playable","2022-08-06 18:38:34.000" +"NeuroVoider","","status-playable","playable","2020-06-04 18:20:05.000" +"Ninjin: Clash of Carrots - 010003C00B868000","010003C00B868000","status-playable;online-broken","playable","2024-07-10 05:12:26.000" +"Nuclien","","status-playable","playable","2020-05-10 05:32:55.000" +"Number Place 10000 - 010020500C8C8000","010020500C8C8000","gpu;status-menus","menus","2021-11-24 09:14:23.000" +"Octocopter: Double or Squids","","status-playable","playable","2021-01-06 01:30:16.000" +"Odallus - 010084300C816000","010084300C816000","status-playable","playable","2022-08-08 12:37:58.000" +"One Eyed Kutkh","","","","2020-03-25 11:42:58.000" +"One More Dungeon","","status-playable","playable","2021-01-06 09:10:58.000" +"1-2-Switch - 01000320000CC000","01000320000CC000","services;status-playable","playable","2022-02-18 14:44:03.000" +"ACA NEOGEO AERO FIGHTERS 2 - 0100AC40038F4000","0100AC40038F4000","online;status-playable","playable","2021-04-08 15:44:09.000" +"Captain Toad: Treasure Tracker - 01009BF0072D4000","01009BF0072D4000","32-bit;status-playable","playable","2024-04-25 00:50:16.000" +"Vaccine","","nvdec;status-playable","playable","2021-01-06 01:02:07.000" +"Carnival Games - 010088C0092FE000","010088C0092FE000","status-playable;nvdec","playable","2022-07-21 21:01:22.000" +"OLYMPIC GAMES TOKYO 2020","","ldn-untested;nvdec;online;status-playable","playable","2021-01-06 01:20:24.000" +"Yodanji","","","","2020-03-25 16:28:53.000" +"Axiom Verge","","status-playable","playable","2020-10-20 01:07:18.000" +"Blaster Master Zero - 0100225000FEE000","0100225000FEE000","32-bit;status-playable","playable","2021-03-05 13:22:33.000" +"SamuraiAces for Nintendo Switch","","32-bit;status-playable","playable","2020-11-24 20:26:55.000" +"Rogue Aces - 0100EC7009348000","0100EC7009348000","gpu;services;status-ingame;nvdec","ingame","2021-11-30 02:18:30.000" +"Pokémon HOME","","Needs Update;crash;services;status-menus","menus","2020-12-06 06:01:51.000" +"Safety First!","","status-playable","playable","2021-01-06 09:05:23.000" +"3D MiniGolf","","status-playable","playable","2021-01-06 09:22:11.000" +"DOUBLE DRAGON4","","","","2020-03-25 23:46:46.000" +"Don't Die Mr. Robot DX - 010007200AC0E000","010007200AC0E000","status-playable;nvdec","playable","2022-09-02 18:34:38.000" +"DERU - The Art of Cooperation","","status-playable","playable","2021-01-07 16:59:59.000" +"Darts Up - 0100BA500B660000","0100BA500B660000","status-playable","playable","2021-04-14 17:22:22.000" +"Deponia - 010023600C704000","010023600C704000","nvdec;status-playable","playable","2021-01-26 17:17:19.000" +"Devious Dungeon - 01009EA00A320000","01009EA00A320000","status-playable","playable","2021-03-04 13:03:06.000" +"Turok - 010085500D5F6000","010085500D5F6000","gpu;status-ingame","ingame","2021-06-04 13:16:24.000" +"Toast Time: Smash Up!","","crash;services;status-menus","menus","2020-04-03 12:26:59.000" +"The VideoKid","","nvdec;status-playable","playable","2021-01-06 09:28:24.000" +"Timberman VS","","","","2020-03-26 14:18:29.000" +"Time Recoil - 0100F770045CA000","0100F770045CA000","status-playable","playable","2022-08-24 12:44:03.000" +"Toby: The Secret Mine","","nvdec;status-playable","playable","2021-01-06 09:22:33.000" +"Toki Tori","","","","2020-03-26 14:49:54.000" +"Totes the Goat","","","","2020-03-26 14:55:00.000" +"Twin Robots: Ultimate Edition - 0100047009742000","0100047009742000","status-playable;nvdec","playable","2022-08-25 14:24:03.000" +"Ultimate Runner - 010045200A1C2000","010045200A1C2000","status-playable","playable","2022-08-29 12:52:40.000" +"UnExplored - Unlocked Edition","","status-playable","playable","2021-01-06 10:02:16.000" +"Unepic - 01008F80049C6000","01008F80049C6000","status-playable","playable","2024-01-15 17:03:00.000" +"Uncanny Valley - 01002D900C5E4000","01002D900C5E4000","nvdec;status-playable","playable","2021-06-04 13:28:45.000" +"Ultra Hyperball","","status-playable","playable","2021-01-06 10:09:55.000" +"Timespinner - 0100DD300CF3A000","0100DD300CF3A000","gpu;status-ingame","ingame","2022-08-09 09:39:11.000" +"Tiny Barbarian DX","","","","2020-03-26 18:46:29.000" +"TorqueL -Physics Modified Edition-","","","","2020-03-26 18:55:23.000" +"Unholy Heights","","","","2020-03-26 19:03:43.000" +"Uurnog Uurnlimited","","","","2020-03-26 19:34:02.000" +"de Blob 2","","nvdec;status-playable","playable","2021-01-06 13:00:16.000" +"The Trail: Frontier Challenge - 0100B0E0086F6000","0100B0E0086F6000","slow;status-playable","playable","2022-08-23 15:10:51.000" +"Toy Stunt Bike: Tiptop's Trials - 01009FF00A160000","01009FF00A160000","UE4;status-playable","playable","2021-04-10 13:56:34.000" +"TumbleSeed","","","","2020-03-26 21:27:06.000" +"Type:Rider","","status-playable","playable","2021-01-06 13:12:55.000" +"Dawn of the Breakers - 0100F0B0081DA000","0100F0B0081DA000","status-menus;online-broken;vulkan-backend-bug","menus","2022-12-08 14:40:03.000" +"Thumper - 01006F6002840000","01006F6002840000","gpu;status-ingame","ingame","2024-08-12 02:41:07.000" +"Revenge of Justice - 010027400F708000 ","010027400F708000","status-playable;nvdec","playable","2022-11-20 15:43:23.000" +"Dead Synchronicity: Tomorrow Comes Today","","","","2020-03-26 23:13:28.000" +"Them Bombs","","","","2020-03-27 12:46:15.000" +"Alwa's Awakening","","status-playable","playable","2020-10-13 11:52:01.000" +"La Mulana 2 - 010038000F644000","010038000F644000","status-playable","playable","2022-09-03 13:45:57.000" +"Tied Together - 0100B6D00C2DE000","0100B6D00C2DE000","nvdec;status-playable","playable","2021-04-10 14:03:46.000" +"Magic Scroll Tactics","","","","2020-03-27 14:00:41.000" +"SeaBed","","status-playable","playable","2020-05-17 13:25:37.000" +"Wenjia","","status-playable","playable","2020-06-08 11:38:30.000" +"DragonBlaze for Nintendo Switch","","32-bit;status-playable","playable","2020-10-14 11:11:28.000" +"Debris Infinity - 010034F00BFC8000","010034F00BFC8000","nvdec;online;status-playable","playable","2021-05-28 12:14:39.000" +"Die for Valhalla!","","status-playable","playable","2021-01-06 16:09:14.000" +"Double Cross","","status-playable","playable","2021-01-07 15:34:22.000" +"Deep Ones","","services;status-nothing","nothing","2020-04-03 02:54:19.000" +"One Step to Eden","","","","2020-03-27 16:31:39.000" +"Bravely Default II Demo - 0100B6801137E000","0100B6801137E000","gpu;status-ingame;crash;UE4;demo","ingame","2022-09-27 05:39:47.000" +"Prison Princess - 0100F4800F872000","0100F4800F872000","status-playable","playable","2022-11-20 15:00:25.000" +"NinNinDays - 0100746010E4C000","0100746010E4C000","status-playable","playable","2022-11-20 15:17:29.000" +"Syrup and the Ultimate Sweet","","","","2020-03-27 21:10:42.000" +"Touhou Gensou Mahjong","","","","2020-03-27 21:36:20.000" +"Shikhondo Soul Eater","","","","2020-03-27 22:14:23.000" +" de Shooting wa Machigatteiru Daroka","","","","2020-03-27 22:27:54.000" +"MY HERO ONE'S JUSTICE","","UE4;crash;gpu;online;status-menus","menus","2020-12-10 13:11:04.000" +"Heaven Dust","","status-playable","playable","2020-05-17 14:02:41.000" +"Touhou Sky Arena matsuri climax","","","","2020-03-28 00:25:17.000" +"Mercenaries Wings The False Phoenix","","crash;services;status-nothing","nothing","2020-05-08 22:42:12.000" +"Don't Sink - 0100C4D00B608000","0100C4D00B608000","gpu;status-ingame","ingame","2021-02-26 15:41:11.000" +"Disease -Hidden Object-","","","","2020-03-28 08:17:51.000" +"Dexteritrip","","status-playable","playable","2021-01-06 12:51:12.000" +"Devil Engine - 010031B00CF66000","010031B00CF66000","status-playable","playable","2021-06-04 11:54:30.000" +"Detective Gallo - 01009C0009842000","01009C0009842000","status-playable;nvdec","playable","2022-07-24 11:51:04.000" +"Zettai kaikyu gakuen","","gpu;nvdec;status-ingame","ingame","2020-08-25 15:15:54.000" +"Demetrios - The BIG Cynical Adventure - 0100AB600ACB4000","0100AB600ACB4000","status-playable","playable","2021-06-04 12:01:01.000" +"Degrees of Separation","","status-playable","playable","2021-01-10 13:40:04.000" +"De Mambo - 01008E900471E000","01008E900471E000","status-playable","playable","2021-04-10 12:39:40.000" +"Death Mark","","status-playable","playable","2020-12-13 10:56:25.000" +"Deemo - 01002CC0062B8000","01002CC0062B8000","status-playable","playable","2022-07-24 11:34:33.000" +"Disgaea 5 Complete - 01005700031AE000","01005700031AE000","nvdec;status-playable","playable","2021-03-04 15:32:54.000" +"The World Ends With You -Final Remix- - 0100C1500B82E000","0100C1500B82E000","status-playable;ldn-untested","playable","2022-07-09 01:11:21.000" +"Don't Knock Twice - 0100E470067A8000","0100E470067A8000","status-playable","playable","2024-05-08 22:37:58.000" +"True Fear: Forsaken Souls - Part 1","","nvdec;status-playable","playable","2020-12-15 21:39:52.000" +"Disco Dodgeball Remix","","online;status-playable","playable","2020-09-28 23:24:49.000" +"Demon's Crystals - 0100A2B00BD88000","0100A2B00BD88000","status-nothing;crash;regression","nothing","2022-12-07 16:33:17.000" +"Dimension Drive","","","","2020-03-29 10:40:38.000" +"Tower of Babel","","status-playable","playable","2021-01-06 17:05:15.000" +"Disc Jam - 0100510004D2C000","0100510004D2C000","UE4;ldn-untested;nvdec;online;status-playable","playable","2021-04-08 16:40:35.000" +"DIABOLIK LOVERS CHAOS LINEAGE - 010027400BD24000","010027400BD24000","gpu;status-ingame;Needs Update","ingame","2023-06-08 02:20:44.000" +"Detention","","","","2020-03-29 11:17:35.000" +"Tumblestone","","status-playable","playable","2021-01-07 17:49:20.000" +"De Blob","","nvdec;status-playable","playable","2021-01-06 17:34:46.000" +"The Voice ","","services;status-menus","menus","2020-07-28 20:48:49.000" +"DESTINY CONNECT","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 12:20:36.000" +"The Sexy Brutale","","status-playable","playable","2021-01-06 17:48:28.000" +"Unicornicopia","","","","2020-03-29 13:01:35.000" +"Ultra Space Battle Brawl","","","","2020-03-29 13:13:02.000" +"Unruly Heroes","","status-playable","playable","2021-01-07 18:09:31.000" +"UglyDolls: An Imperfect Adventure - 010079000B56C000","010079000B56C000","status-playable;nvdec;UE4","playable","2022-08-25 14:42:16.000" +"Use Your Words - 01007C0003AEC000","01007C0003AEC000","status-menus;nvdec;online-broken","menus","2022-08-29 17:22:10.000" +"New Super Lucky's Tale - 010017700B6C2000","010017700B6C2000","status-playable","playable","2024-03-11 14:14:10.000" +"Yooka-Laylee and the Impossible Lair - 010022F00DA66000","010022F00DA66000","status-playable","playable","2021-03-05 17:32:21.000" +"GRIS - 0100E1700C31C000","0100E1700C31C000","nvdec;status-playable","playable","2021-06-03 13:33:44.000" +"Monster Boy and the Cursed Kingdom - 01006F7001D10000","01006F7001D10000","status-playable;nvdec","playable","2022-08-04 20:06:32.000" +"Guns Gore and Cannoli 2","","online;status-playable","playable","2021-01-06 18:43:59.000" +"Mark of the Ninja Remastered - 01009A700A538000","01009A700A538000","status-playable","playable","2022-08-04 15:48:30.000" +"DOOM - 0100416004C00000","0100416004C00000","gpu;slow;status-ingame;nvdec;online-broken","ingame","2024-09-23 15:40:07.000" +"TINY METAL - 010074800741A000","010074800741A000","UE4;gpu;nvdec;status-ingame","ingame","2021-03-05 17:11:57.000" +"Shadowgate","","status-playable","playable","2021-04-24 07:32:57.000" +"R-Type Dimensions EX","","status-playable","playable","2020-10-09 12:04:43.000" +"Thea: The Awakening","","status-playable","playable","2021-01-18 15:08:47.000" +"Toki","","nvdec;status-playable","playable","2021-01-06 19:59:23.000" +"Superhot - 01001A500E8B4000","01001A500E8B4000","status-playable","playable","2021-05-05 19:51:30.000" +"Tools Up!","","crash;status-ingame","ingame","2020-07-21 12:58:17.000" +"The Stretchers - 0100AA400A238000","0100AA400A238000","status-playable;nvdec;UE4","playable","2022-09-16 15:40:58.000" +"Shantae: Half-Genie Hero Ultimate Edition","","status-playable","playable","2020-06-04 20:14:20.000" +"Monster Hunter Generation Ultimate - 0100770008DD8000","0100770008DD8000","32-bit;status-playable;online-broken;ldn-works","playable","2024-03-18 14:35:36.000" +"ATV Drift & Tricks - 01000F600B01E000","01000F600B01E000","UE4;online;status-playable","playable","2021-04-08 17:29:17.000" +"Metaloid: Origin","","status-playable","playable","2020-06-04 20:26:35.000" +"The Walking Dead: The Final Season - 010060F00AA70000","010060F00AA70000","status-playable;online-broken","playable","2022-08-23 17:22:32.000" +"Lyrica","","","","2020-03-31 10:09:40.000" +"Beat Cop","","status-playable","playable","2021-01-06 19:26:48.000" +"Broforce - 010060A00B53C000","010060A00B53C000","ldn-untested;online;status-playable","playable","2021-05-28 12:23:38.000" +"Ludo Mania","","crash;services;status-nothing","nothing","2020-04-03 00:33:47.000" +"The Way Remastered","","","","2020-03-31 10:34:26.000" +"Little Inferno","","32-bit;gpu;nvdec;status-ingame","ingame","2020-12-17 21:43:56.000" +"Toki Tori 2+","","","","2020-03-31 10:53:13.000" +"Bastion - 010038600B27E000","010038600B27E000","status-playable","playable","2022-02-15 14:15:24.000" +"Lovers in a Dangerous Spacetime","","","","2020-03-31 13:45:03.000" +"Back in 1995","","","","2020-03-31 13:52:35.000" +"Lost Phone Stories","","services;status-ingame","ingame","2020-04-05 23:17:33.000" +"The Walking Dead - 010029200B6AA000","010029200B6AA000","status-playable","playable","2021-06-04 13:10:56.000" +"Beyblade Burst Battle Zero - 010068600AD16000","010068600AD16000","services;status-menus;crash;Needs Update","menus","2022-11-20 15:48:32.000" +"Tiny Hands Adventure - 010061A00AE64000","010061A00AE64000","status-playable","playable","2022-08-24 16:07:48.000" +"My Time At Portia - 0100E25008E68000","0100E25008E68000","status-playable","playable","2021-05-28 12:42:55.000" +"NBA 2K Playgrounds 2 - 01001AE00C1B2000","01001AE00C1B2000","status-playable;nvdec;online-broken;UE4;vulkan-backend-bug","playable","2022-08-06 14:40:38.000" +"Valfaris - 010089700F30C000","010089700F30C000","status-playable","playable","2022-09-16 21:37:24.000" +"Wandersong - 0100F8A00853C000","0100F8A00853C000","nvdec;status-playable","playable","2021-06-04 15:33:34.000" +"Untitled Goose Game","","status-playable","playable","2020-09-26 13:18:06.000" +"Unbox: Newbie's Adventure - 0100592005164000","0100592005164000","status-playable;UE4","playable","2022-08-29 13:12:56.000" +"Trine 4: The Nightmare Prince - 010055E00CA68000","010055E00CA68000","gpu;status-nothing","nothing","2025-01-07 05:47:46.000" +"Travis Strikes Again: No More Heroes - 010011600C946000","010011600C946000","status-playable;nvdec;UE4","playable","2022-08-25 12:36:38.000" +"Bubble Bobble 4 Friends - 010010900F7B4000","010010900F7B4000","nvdec;status-playable","playable","2021-06-04 15:27:55.000" +"Bloodstained: Curse of the Moon","","status-playable","playable","2020-09-04 10:42:17.000" +"Unravel TWO - 0100E5D00CC0C000","0100E5D00CC0C000","status-playable;nvdec","playable","2024-05-23 15:45:05.000" +"Blazing Beaks","","status-playable","playable","2020-06-04 20:37:06.000" +"Moonlighter","","","","2020-04-01 12:52:32.000" +"Rock N' Racing Grand Prix","","status-playable","playable","2021-01-06 20:23:57.000" +"Blossom Tales - 0100C1000706C000","0100C1000706C000","status-playable","playable","2022-07-18 16:43:07.000" +"Maria The Witch","","","","2020-04-01 13:22:05.000" +"Runbow","","online;status-playable","playable","2021-01-08 22:47:44.000" +"Salt And Sanctuary","","status-playable","playable","2020-10-22 11:52:19.000" +"Bomb Chicken","","","","2020-04-01 13:52:21.000" +"Typoman","","","","2020-04-01 14:01:55.000" +"BOX Align","","crash;services;status-nothing","nothing","2020-04-03 17:26:56.000" +"Bridge Constructor Portal","","","","2020-04-01 14:59:34.000" +"METAGAL","","status-playable","playable","2020-06-05 00:05:48.000" +"Severed","","status-playable","playable","2020-12-15 21:48:48.000" +"Bombslinger - 010087300445A000","010087300445A000","services;status-menus","menus","2022-07-19 12:53:15.000" +"ToeJam & Earl: Back in the Groove","","status-playable","playable","2021-01-06 22:56:58.000" +"SHIFT QUANTUM","","UE4;crash;status-ingame","ingame","2020-11-06 21:54:08.000" +"Mana Spark","","status-playable","playable","2020-12-10 13:41:01.000" +"BOOST BEAST","","","","2020-04-01 22:07:28.000" +"Bass Pro Shops: The Strike - Championship Edition - 0100E3100450E000","0100E3100450E000","gpu;status-boots;32-bit","boots","2022-12-09 15:58:16.000" +"Semispheres","","status-playable","playable","2021-01-06 23:08:31.000" +"Megaton Rainfall - 010005A00B312000","010005A00B312000","gpu;status-boots;opengl","boots","2022-08-04 18:29:43.000" +"Romancing SaGa 2 - 01001F600829A000","01001F600829A000","status-playable","playable","2022-08-12 12:02:24.000" +"Runner3","","","","2020-04-02 12:58:46.000" +"Shakedown: Hawaii","","status-playable","playable","2021-01-07 09:44:36.000" +"Minit","","","","2020-04-02 13:15:45.000" +"Little Nightmares - 01002FC00412C000","01002FC00412C000","status-playable;nvdec;UE4","playable","2022-08-03 21:45:35.000" +"Shephy","","","","2020-04-02 13:33:44.000" +"Millie - 0100976008FBE000","0100976008FBE000","status-playable","playable","2021-01-26 20:47:19.000" +"Bloodstained: Ritual of the Night - 010025A00DF2A000","010025A00DF2A000","status-playable;nvdec;UE4","playable","2022-07-18 14:27:35.000" +"Shape Of The World - 0100B250009B96000","0100B250009B9600","UE4;status-playable","playable","2021-03-05 16:42:28.000" +"Bendy and the Ink Machine - 010074500BBC4000","010074500BBC4000","status-playable","playable","2023-05-06 20:35:39.000" +"Brothers: A Tale of Two Sons - 01000D500D08A000","01000D500D08A000","status-playable;nvdec;UE4","playable","2022-07-19 14:02:22.000" +"Raging Loop","","","","2020-04-03 12:29:28.000" +"A Hat In Time - 010056E00853A000","010056E00853A000","status-playable","playable","2024-06-25 19:52:44.000" +"Cooking Mama: Cookstar - 010060700EFBA000","010060700EFBA000","status-menus;crash;loader-allocator","menus","2021-11-20 03:19:35.000" +"Marble Power Blast - 01008E800D1FE000","01008E800D1FE000","status-playable","playable","2021-06-04 16:00:02.000" +"NARUTO™: Ultimate Ninja® STORM - 0100715007354000","0100715007354000","status-playable;nvdec","playable","2022-08-06 14:10:31.000" +"Oddmar","","","","2020-04-04 20:46:28.000" +"BLEED 2","","","","2020-04-05 11:29:05.000" +"Sea King - 0100E4A00D066000","0100E4A00D066000","UE4;nvdec;status-playable","playable","2021-06-04 15:49:22.000" +"Sausage Sports Club","","gpu;status-ingame","ingame","2021-01-10 05:37:17.000" +"Mini Metro","","","","2020-04-05 11:55:19.000" +"Mega Mall Story - 0100BBC00CB9A000","0100BBC00CB9A000","slow;status-playable","playable","2022-08-04 17:10:58.000" +"BILLIARD","","","","2020-04-05 13:41:11.000" +"The Wardrobe","","","","2020-04-05 13:53:33.000" +"LITTLE FRIENDS -DOGS & CATS-","","status-playable","playable","2020-11-12 12:45:51.000" +"LOST SPHEAR","","status-playable","playable","2021-01-10 06:01:21.000" +"Morphies Law","","UE4;crash;ldn-untested;nvdec;online;status-menus","menus","2020-11-22 17:05:29.000" +"Mercenaries Saga Chronicles","","status-playable","playable","2021-01-10 12:48:19.000" +"The Swindle - 010040D00B7CE000","010040D00B7CE000","status-playable;nvdec","playable","2022-08-22 20:53:52.000" +"Monster Energy Supercross - The Official Videogame - 0100742007266000","0100742007266000","status-playable;nvdec;UE4","playable","2022-08-04 20:25:00.000" +"Monster Energy Supercross - The Official Videogame 2 - 0100F8100B982000","0100F8100B982000","status-playable;nvdec;UE4;ldn-untested","playable","2022-08-04 21:21:24.000" +"Lumo - 0100FF00042EE000","0100FF00042EE000","status-playable;nvdec","playable","2022-02-11 18:20:30.000" +"Monopoly for Nintendo Switch - 01007430037F6000","01007430037F6000","status-playable;nvdec;online-broken","playable","2024-02-06 23:13:01.000" +"Mantis Burn Racing - 0100E98002F6E000","0100E98002F6E000","status-playable;online-broken;ldn-broken","playable","2024-09-02 02:13:04.000" +"Moorhuhn Remake","","","","2020-04-05 19:22:41.000" +"Lovecraft's Untold Stories","","","","2020-04-05 19:31:15.000" +"Moonfall Ultimate","","nvdec;status-playable","playable","2021-01-17 14:01:25.000" +"Max: The Curse Of Brotherhood - 01001C9007614000","01001C9007614000","status-playable;nvdec","playable","2022-08-04 16:33:04.000" +"Manticore - Galaxy on Fire - 0100C9A00952A000","0100C9A00952A000","status-boots;crash;nvdec","boots","2024-02-04 04:37:24.000" +"The Shapeshifting Detective","","nvdec;status-playable","playable","2021-01-10 13:10:49.000" +"Mom Hid My Game!","","","","2020-04-06 11:32:10.000" +"Meow Motors","","UE4;gpu;status-ingame","ingame","2020-12-18 00:24:01.000" +"Mahjong Solitaire Refresh - 01008C300B624000","01008C300B624000","status-boots;crash","boots","2022-12-09 12:02:55.000" +"Lucah: Born of a Dream","","","","2020-04-06 12:11:01.000" +"Moon Hunters","","","","2020-04-06 12:35:17.000" +"Mad Carnage","","status-playable","playable","2021-01-10 13:00:07.000" +"Monument Builders Rushmore","","","","2020-04-06 13:49:35.000" +"Lost Sea","","","","2020-04-06 14:08:14.000" +"Mahjong Deluxe 3","","","","2020-04-06 14:13:32.000" +"MONSTER JAM CRUSH IT!™ - 010088400366E000","010088400366E000","UE4;nvdec;online;status-playable","playable","2021-04-08 19:29:27.000" +"Midnight Deluxe","","","","2020-04-06 14:33:34.000" +"Metropolis: Lux Obscura","","","","2020-04-06 14:47:15.000" +"Lode Runner Legacy","","status-playable","playable","2021-01-10 14:10:28.000" +"Masters of Anima - 0100CC7009196000","0100CC7009196000","status-playable;nvdec","playable","2022-08-04 16:00:09.000" +"Monster Dynamite","","","","2020-04-06 17:55:14.000" +"The Warlock of Firetop Mountain","","","","2020-04-06 21:44:13.000" +"Mecho Tales - 0100C4F005EB4000","0100C4F005EB4000","status-playable","playable","2022-08-04 17:03:19.000" +"Titan Quest - 0100605008268000","0100605008268000","status-playable;nvdec;online-broken","playable","2022-08-19 21:54:15.000" +"This Is the Police - 0100066004D68000","0100066004D68000","status-playable","playable","2022-08-24 11:37:05.000" +"Miles & Kilo","","status-playable","playable","2020-10-22 11:39:49.000" +"This War of Mine: Complete Edition - 0100A8700BC2A000","0100A8700BC2A000","gpu;status-ingame;32-bit;nvdec","ingame","2022-08-24 12:00:44.000" +"Transistor","","status-playable","playable","2020-10-22 11:28:02.000" +"Momodora: Revere Under the Moonlight - 01004A400C320000","01004A400C320000","deadlock;status-nothing","nothing","2022-02-06 03:47:43.000" +"Monster Puzzle","","status-playable","playable","2020-09-28 22:23:10.000" +"Tiny Troopers Joint Ops XL","","","","2020-04-07 12:30:46.000" +"This Is the Police 2 - 01004C100A04C000","01004C100A04C000","status-playable","playable","2022-08-24 11:49:17.000" +"Trials Rising - 01003E800A102000","01003E800A102000","status-playable","playable","2024-02-11 01:36:39.000" +"Mainlining","","status-playable","playable","2020-06-05 01:02:00.000" +"Treadnauts","","status-playable","playable","2021-01-10 14:57:41.000" +"Treasure Stack","","","","2020-04-07 13:27:32.000" +"Monkey King: Master of the Clouds","","status-playable","playable","2020-09-28 22:35:48.000" +"Trailblazers - 0100BCA00843A000","0100BCA00843A000","status-playable","playable","2021-03-02 20:40:49.000" +"Stardew Valley - 0100E65002BB8000","0100E65002BB8000","status-playable;online-broken;ldn-untested","playable","2024-02-14 03:11:19.000" +"TT Isle of Man","","nvdec;status-playable","playable","2020-06-22 12:25:13.000" +"Truberbrook - 0100E6300D448000","0100E6300D448000","status-playable","playable","2021-06-04 17:08:00.000" +"Troll and I - 0100F78002040000","0100F78002040000","gpu;nvdec;status-ingame","ingame","2021-06-04 16:58:50.000" +"Rock 'N Racing Off Road DX","","status-playable","playable","2021-01-10 15:27:15.000" +"Touhou Genso Wanderer RELOADED - 01004E900B082000","01004E900B082000","gpu;status-ingame;nvdec","ingame","2022-08-25 11:57:36.000" +"Splasher","","","","2020-04-08 11:02:41.000" +"Rogue Trooper Redux - 01001CC00416C000","01001CC00416C000","status-playable;nvdec;online-broken","playable","2022-08-12 11:53:01.000" +"Semblance","","","","2020-04-08 11:22:11.000" +"Saints Row: The Third - The Full Package - 0100DE600BEEE000","0100DE600BEEE000","slow;status-playable;LAN","playable","2023-08-24 02:40:58.000" +"SEGA AGES PHANTASY STAR","","status-playable","playable","2021-01-11 12:49:48.000" +"SEGA AGES SPACE HARRIER","","status-playable","playable","2021-01-11 12:57:40.000" +"SEGA AGES OUTRUN","","status-playable","playable","2021-01-11 13:13:59.000" +"Schlag den Star - 0100ACB004006000","0100ACB004006000","slow;status-playable;nvdec","playable","2022-08-12 14:28:22.000" +"Serial Cleaner","","","","2020-04-08 15:26:22.000" +"Rotating Brave","","","","2020-04-09 12:25:59.000" +"SteamWorld Quest","","nvdec;status-playable","playable","2020-11-09 13:10:04.000" +"Shaq Fu: A Legend Reborn","","","","2020-04-09 13:24:32.000" +"Season Match Bundle - Part 1 and 2","","status-playable","playable","2021-01-11 13:28:23.000" +"Bulb Boy","","","","2020-04-09 16:22:39.000" +"SteamWorld Dig - 01009320084A4000","01009320084A4000","status-playable","playable","2024-08-19 12:12:23.000" +"Shadows of Adam","","status-playable","playable","2021-01-11 13:35:58.000" +"Battle Princess Madelyn","","status-playable","playable","2021-01-11 13:47:23.000" +"Shiftlings - 01000750084B2000","01000750084B2000","nvdec;status-playable","playable","2021-03-04 13:49:54.000" +"Save the Ninja Clan","","status-playable","playable","2021-01-11 13:56:37.000" +"SteamWorld Heist: Ultimate Edition","","","","2020-04-10 11:21:15.000" +"Battle Chef Brigade","","status-playable","playable","2021-01-11 14:16:28.000" +"Shelter Generations - 01009EB004CB0000","01009EB004CB0000","status-playable","playable","2021-06-04 16:52:39.000" +"Bow to Blood: Last Captain Standing","","slow;status-playable","playable","2020-10-23 10:51:21.000" +"Samsara","","status-playable","playable","2021-01-11 15:14:12.000" +"Touhou Kobuto V: Burst Battle","","status-playable","playable","2021-01-11 15:28:58.000" +"Screencheat","","","","2020-04-10 13:16:02.000" +"BlobCat - 0100F3500A20C000","0100F3500A20C000","status-playable","playable","2021-04-23 17:09:30.000" +"SteamWorld Dig 2 - 0100CA9002322000","0100CA9002322000","status-playable","playable","2022-12-21 19:25:42.000" +"She Remembered Caterpillars - 01004F50085F2000","01004F50085F2000","status-playable","playable","2022-08-12 17:45:14.000" +"Broken Sword 5 - the Serpent's Curse - 01001E60085E6000","01001E60085E6000","status-playable","playable","2021-06-04 17:28:59.000" +"Banner Saga 3","","slow;status-boots","boots","2021-01-11 16:53:57.000" +"Stranger Things 3: The Game","","status-playable","playable","2021-01-11 17:44:09.000" +"Blades of Time - 0100CFA00CC74000","0100CFA00CC74000","deadlock;status-boots;online","boots","2022-07-17 19:19:58.000" +"BLAZBLUE CENTRALFICTION Special Edition","","nvdec;status-playable","playable","2020-12-15 23:50:04.000" +"Brawlout - 010060200A4BE000","010060200A4BE000","ldn-untested;online;status-playable","playable","2021-06-04 17:35:35.000" +"Bouncy Bob","","","","2020-04-10 16:45:27.000" +"Broken Age - 0100EDD0068A6000","0100EDD0068A6000","status-playable","playable","2021-06-04 17:40:32.000" +"Attack on Titan 2","","status-playable","playable","2021-01-04 11:40:01.000" +"Battle Worlds: Kronos - 0100DEB00D5A8000","0100DEB00D5A8000","nvdec;status-playable","playable","2021-06-04 17:48:02.000" +"BLADE ARCUS Rebellion From Shining - 0100C4400CB7C000","0100C4400CB7C000","status-playable","playable","2022-07-17 18:52:28.000" +"Away: Journey to the Unexpected - 01002F1005F3C000","01002F1005F3C000","status-playable;nvdec;vulkan-backend-bug","playable","2022-11-06 15:31:04.000" +"Batman: The Enemy Within","","crash;status-nothing","nothing","2020-10-16 05:49:27.000" +"Batman - The Telltale Series","","nvdec;slow;status-playable","playable","2021-01-11 18:19:35.000" +"Big Crown: Showdown - 010088100C35E000","010088100C35E000","status-menus;nvdec;online;ldn-untested","menus","2022-07-17 18:25:32.000" +"Strike Suit Zero: Director's Cut - 010072500D52E000","010072500D52E000","crash;status-boots","boots","2021-04-23 17:15:14.000" +"Black Paradox","","","","2020-04-11 12:13:22.000" +"Spelunker Party! - 010021F004270000","010021F004270000","services;status-boots","boots","2022-08-16 11:25:49.000" +"OK K.O.! Let's Play Heroes","","nvdec;status-playable","playable","2021-01-11 18:41:02.000" +"Steredenn","","status-playable","playable","2021-01-13 09:19:42.000" +"State of Mind","","UE4;crash;status-boots","boots","2020-06-22 22:17:50.000" +"Bloody Zombies","","","","2020-04-11 18:23:57.000" +"MudRunner - American Wilds - 01009D200952E000","01009D200952E000","gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-16 11:40:52.000" +"Big Buck Hunter Arcade","","nvdec;status-playable","playable","2021-01-12 20:31:39.000" +"Sparkle 2 Evo","","","","2020-04-11 18:48:19.000" +"Brave Dungeon + Dark Witch's Story: COMBAT","","status-playable","playable","2021-01-12 21:06:34.000" +"BAFL","","status-playable","playable","2021-01-13 08:32:51.000" +"Steamburg","","status-playable","playable","2021-01-13 08:42:01.000" +"Splatoon 2 - 01003BC0000A0000","01003BC0000A0000","status-playable;ldn-works;LAN","playable","2024-07-12 19:11:15.000" +"Blade Strangers - 01005950022EC000","01005950022EC000","status-playable;nvdec","playable","2022-07-17 19:02:43.000" +"Sports Party - 0100DE9005170000","0100DE9005170000","nvdec;status-playable","playable","2021-03-05 13:40:42.000" +"Banner Saga","","","","2020-04-12 14:06:23.000" +"Banner Saga 2","","crash;status-boots","boots","2021-01-13 08:56:09.000" +"Hand of Fate 2 - 01003620068EA000","01003620068EA000","status-playable","playable","2022-08-01 15:44:16.000" +"State of Anarchy: Master of Mayhem","","nvdec;status-playable","playable","2021-01-12 19:00:05.000" +"Sphinx and the Cursed Mummy™ - 0100BD500BA94000","0100BD500BA94000","gpu;status-ingame;32-bit;opengl","ingame","2024-05-20 06:00:51.000" +"Risk - 0100E8300A67A000","0100E8300A67A000","status-playable;nvdec;online-broken","playable","2022-08-01 18:53:28.000" +"Baseball Riot - 01004860080A0000","01004860080A0000","status-playable","playable","2021-06-04 18:07:27.000" +"Spartan - 0100E6A009A26000","0100E6A009A26000","UE4;nvdec;status-playable","playable","2021-03-05 15:53:19.000" +"Halloween Pinball","","status-playable","playable","2021-01-12 16:00:46.000" +"Streets of Red : Devil's Dare Deluxe","","","","2020-04-12 18:08:29.000" +"Spider Solitaire F","","","","2020-04-12 20:26:44.000" +"Starship Avenger Operation: Take Back Earth","","status-playable","playable","2021-01-12 15:52:55.000" +"Battle Chasers: Nightwar","","nvdec;slow;status-playable","playable","2021-01-12 12:27:34.000" +"Infinite Minigolf","","online;status-playable","playable","2020-09-29 12:26:25.000" +"Blood Waves - 01007E700D17E000","01007E700D17E000","gpu;status-ingame","ingame","2022-07-18 13:04:46.000" +"Stick It to the Man","","","","2020-04-13 12:29:25.000" +"Bad Dream: Fever - 0100B3B00D81C000","0100B3B00D81C000","status-playable","playable","2021-06-04 18:33:12.000" +"Spectrum - 01008B000A5AE000","01008B000A5AE000","status-playable","playable","2022-08-16 11:15:59.000" +"Battlezone Gold Edition - 01006D800A988000","01006D800A988000","gpu;ldn-untested;online;status-boots","boots","2021-06-04 18:36:05.000" +"Squareboy vs Bullies: Arena Edition","","","","2020-04-13 12:51:57.000" +"Beach Buggy Racing - 010095C00406C000","010095C00406C000","online;status-playable","playable","2021-04-13 23:16:50.000" +"Avenger Bird","","","","2020-04-13 13:01:51.000" +"Beholder","","status-playable","playable","2020-10-16 12:48:58.000" +"Binaries","","","","2020-04-13 13:12:42.000" +"Space Ribbon - 010010A009830000","010010A009830000","status-playable","playable","2022-08-15 17:17:10.000" +"BINGO for Nintendo Switch","","status-playable","playable","2020-07-23 16:17:36.000" +"Bibi Blocksberg - Big Broom Race 3","","status-playable","playable","2021-01-11 19:07:16.000" +"Sparkle 3: Genesis","","","","2020-04-13 14:01:48.000" +"Bury me, my Love","","status-playable","playable","2020-11-07 12:47:37.000" +"Bad North - 0100E98006F22000","0100E98006F22000","status-playable","playable","2022-07-17 13:44:25.000" +"Stikbold! A Dodgeball Adventure DELUXE","","status-playable","playable","2021-01-11 20:12:54.000" +"BUTCHER","","status-playable","playable","2021-01-11 18:50:17.000" +"Bird Game + - 01001B700B278000","01001B700B278000","status-playable;online","playable","2022-07-17 18:41:57.000" +"SpiritSphere DX - 01009D60080B4000","01009D60080B4000","status-playable","playable","2021-07-03 23:37:49.000" +"Behind The Screen","","","","2020-04-13 15:41:34.000" +"Bibi & Tina - Adventures with Horses","","nvdec;slow;status-playable","playable","2021-01-13 08:58:09.000" +"Space Dave","","","","2020-04-13 15:57:37.000" +"Hellblade: Senua's Sacrifice - 010044500CF8E000","010044500CF8E000","gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-01 19:36:50.000" +"Happy Birthdays","","","","2020-04-13 23:34:41.000" +"GUILTY GEAR XX ACCENT CORE PLUS R","","nvdec;status-playable","playable","2021-01-13 09:28:33.000" +"Hob: The Definitive Edition","","status-playable","playable","2021-01-13 09:39:19.000" +"Jurassic Pinball - 0100CE100A826000","0100CE100A826000","status-playable","playable","2021-06-04 19:02:37.000" +"Hyper Light Drifter - Special Edition - 01003B200B372000","01003B200B372000","status-playable;vulkan-backend-bug","playable","2023-01-13 15:44:48.000" +"GUNBIRD for Nintendo Switch - 01003C6008940000","01003C6008940000","32-bit;status-playable","playable","2021-06-04 19:16:01.000" +"GUNBIRD2 for Nintendo Switch","","status-playable","playable","2020-10-10 14:41:16.000" +"Hammerwatch - 01003B9007E86000","01003B9007E86000","status-playable;online-broken;ldn-broken","playable","2022-08-01 16:28:46.000" +"Into The Breach","","","","2020-04-14 14:05:04.000" +"Horizon Chase Turbo - 01009EA00B714000","01009EA00B714000","status-playable","playable","2021-02-19 19:40:56.000" +"Gunlord X","","","","2020-04-14 14:30:34.000" +"Ittle Dew 2+","","status-playable","playable","2020-11-17 11:44:32.000" +"Hue","","","","2020-04-14 14:52:35.000" +"Iconoclasts - 0100BC60099FE000","0100BC60099FE000","status-playable","playable","2021-08-30 21:11:04.000" +"James Pond Operation Robocod","","status-playable","playable","2021-01-13 09:48:45.000" +"Hello Neighbor - 0100FAA00B168000","0100FAA00B168000","status-playable;UE4","playable","2022-08-01 21:32:23.000" +"Gunman Clive HD Collection","","status-playable","playable","2020-10-09 12:17:35.000" +"Human Resource Machine","","32-bit;status-playable","playable","2020-12-17 21:47:09.000" +"INSIDE - 0100D2D009028000","0100D2D009028000","status-playable","playable","2021-12-25 20:24:56.000" +"Hello Neighbor: Hide And Seek","","UE4;gpu;slow;status-ingame","ingame","2020-10-24 10:59:57.000" +"Has-Been Heroes","","status-playable","playable","2021-01-13 13:31:48.000" +"GUNBARICH for Nintendo Switch","","","","2020-04-14 21:58:40.000" +"Hell is Other Demons","","status-playable","playable","2021-01-13 13:23:02.000" +"I, Zombie","","status-playable","playable","2021-01-13 14:53:44.000" +"Hello Kitty Kruisers With Sanrio Friends - 010087D0084A8000","010087D0084A8000","nvdec;status-playable","playable","2021-06-04 19:08:46.000" +"IMPLOSION - 0100737003190000","0100737003190000","status-playable;nvdec","playable","2021-12-12 03:52:13.000" +"Ikaruga - 01009F20086A0000","01009F20086A0000","status-playable","playable","2023-04-06 15:00:02.000" +"Ironcast","","status-playable","playable","2021-01-13 13:54:29.000" +"Jettomero: Hero of the Universe - 0100A5A00AF26000","0100A5A00AF26000","status-playable","playable","2022-08-02 14:46:43.000" +"Harvest Moon: Light of Hope Special Edition","","","","2020-04-15 13:00:41.000" +"Heroine Anthem Zero episode 1 - 01001B70080F0000","01001B70080F0000","status-playable;vulkan-backend-bug","playable","2022-08-01 22:02:36.000" +"Hunting Simulator - 0100C460040EA000","0100C460040EA000","status-playable;UE4","playable","2022-08-02 10:54:08.000" +"Guts and Glory","","","","2020-04-15 14:06:57.000" +"Island Flight Simulator - 010077900440A000","010077900440A000","status-playable","playable","2021-06-04 19:42:46.000" +"Hollow - 0100F2100061E8000","0100F2100061E800","UE4;gpu;status-ingame","ingame","2021-03-03 23:42:56.000" +"Heroes of the Monkey Tavern","","","","2020-04-15 15:24:33.000" +"Jotun: Valhalla Edition","","","","2020-04-15 15:46:21.000" +"OniNaki - 0100CF4011B2A000","0100CF4011B2A000","nvdec;status-playable","playable","2021-02-27 21:52:42.000" +"Diary of consultation with me (female doctor)","","","","2020-04-15 16:13:40.000" +"JunkPlanet","","status-playable","playable","2020-11-09 12:38:33.000" +"Hexologic","","","","2020-04-15 16:46:07.000" +"JYDGE - 010035A0044E8000","010035A0044E8000","status-playable","playable","2022-08-02 21:20:13.000" +"Mushroom Quest","","status-playable","playable","2020-05-17 13:07:08.000" +"Infernium","","UE4;regression;status-nothing","nothing","2021-01-13 16:36:07.000" +"Star-Crossed Myth - The Department of Wishes - 01005EB00EA10000","01005EB00EA10000","gpu;status-ingame","ingame","2021-06-04 19:34:36.000" +"Joe Dever's Lone Wolf","","","","2020-04-15 18:27:04.000" +"Final Fantasy VII - 0100A5B00BDC6000","0100A5B00BDC6000","status-playable","playable","2022-12-09 17:03:30.000" +"Irony Curtain: From Matryoshka with Love - 0100E5700CD56000","0100E5700CD56000","status-playable","playable","2021-06-04 20:12:37.000" +"Guns Gore and Cannoli","","","","2020-04-16 12:37:22.000" +"ICEY","","status-playable","playable","2021-01-14 16:16:04.000" +"Jumping Joe & Friends","","status-playable","playable","2021-01-13 17:09:42.000" +"Johnny Turbo's Arcade Wizard Fire - 0100D230069CC000","0100D230069CC000","status-playable","playable","2022-08-02 20:39:15.000" +"Johnny Turbo's Arcade Two Crude Dudes - 010080D002CC6000","010080D002CC6000","status-playable","playable","2022-08-02 20:29:50.000" +"Johnny Turbo's Arcade Sly Spy","","","","2020-04-16 13:56:32.000" +"Johnny Turbo's Arcade Caveman Ninja","","","","2020-04-16 14:11:07.000" +"Heroki - 010057300B0DC000","010057300B0DC000","gpu;status-ingame","ingame","2023-07-30 19:30:01.000" +"Immortal Redneck - 0100F400435A000","","nvdec;status-playable","playable","2021-01-27 18:36:28.000" +"Hungry Shark World","","status-playable","playable","2021-01-13 18:26:08.000" +"Homo Machina","","","","2020-04-16 15:10:24.000" +"InnerSpace","","","","2020-04-16 16:38:45.000" +"INK","","","","2020-04-16 16:48:26.000" +"Human: Fall Flat","","status-playable","playable","2021-01-13 18:36:05.000" +"Hotel Transylvania 3: Monsters Overboard - 0100017007980000","0100017007980000","nvdec;status-playable","playable","2021-01-27 18:55:31.000" +"It's Spring Again","","","","2020-04-16 19:08:21.000" +"FINAL FANTASY IX - 01006F000B056000","01006F000B056000","audout;nvdec;status-playable","playable","2021-06-05 11:35:00.000" +"Harvest Life - 0100D0500AD30000","0100D0500AD30000","status-playable","playable","2022-08-01 16:51:45.000" +"INVERSUS Deluxe - 01001D0003B96000","01001D0003B96000","status-playable;online-broken","playable","2022-08-02 14:35:36.000" +"HoPiKo","","status-playable","playable","2021-01-13 20:12:38.000" +"I Hate Running Backwards","","","","2020-04-16 20:53:45.000" +"Hexagravity - 01007AC00E012000","01007AC00E012000","status-playable","playable","2021-05-28 13:47:48.000" +"Holy Potatoes! A Weapon Shop?!","","","","2020-04-16 22:25:50.000" +"In Between","","","","2020-04-17 11:08:14.000" +"Hunter's Legacy: Purrfect Edition - 010068000CAC0000","010068000CAC0000","status-playable","playable","2022-08-02 10:33:31.000" +"Job the Leprechaun","","status-playable","playable","2020-06-05 12:10:06.000" +"Henry the Hamster Handler","","","","2020-04-17 11:30:02.000" +"FINAL FANTASY XII THE ZODIAC AGE - 0100EB100AB42000","0100EB100AB42000","status-playable;opengl;vulkan-backend-bug","playable","2024-08-11 07:01:54.000" +"Hiragana Pixel Party","","status-playable","playable","2021-01-14 08:36:50.000" +"Heart and Slash","","status-playable","playable","2021-01-13 20:56:32.000" +"InkSplosion","","","","2020-04-17 12:11:41.000" +"I and Me","","","","2020-04-17 12:18:43.000" +"Earthlock - 01006E50042EA000","01006E50042EA000","status-playable","playable","2021-06-05 11:51:02.000" +"Figment - 0100118009C68000","0100118009C68000","nvdec;status-playable","playable","2021-01-27 19:36:05.000" +"Dusty Raging Fist","","","","2020-04-18 14:02:20.000" +"Eternum Ex","","status-playable","playable","2021-01-13 20:28:32.000" +"Dragon's Lair Trilogy","","nvdec;status-playable","playable","2021-01-13 22:12:07.000" +"FIFA 18 - 0100F7B002340000","0100F7B002340000","gpu;status-ingame;online-broken;ldn-untested","ingame","2022-07-26 12:43:59.000" +"Dream Alone - 0100AA0093DC000","","nvdec;status-playable","playable","2021-01-27 19:41:50.000" +"Fight of Gods","","","","2020-04-18 17:22:19.000" +"Fallout Shelter","","","","2020-04-18 19:48:28.000" +"Drift Legends","","","","2020-04-18 20:15:36.000" +"Feudal Alloy","","status-playable","playable","2021-01-14 08:48:14.000" +"EVERSPACE - 0100DCF0093EC000","0100DCF0093EC000","status-playable;UE4","playable","2022-08-14 01:16:24.000" +"Epic Loon - 0100262009626000","0100262009626000","status-playable;nvdec","playable","2022-07-25 22:06:13.000" +"EARTH WARS - 01009B7006C88000","01009B7006C88000","status-playable","playable","2021-06-05 11:18:33.000" +"Finding Teddy 2 : Definitive Edition - 0100FF100FB68000","0100FF100FB68000","gpu;status-ingame","ingame","2024-04-19 16:51:33.000" +"Rocket League - 01005EE0036EC000","01005EE0036EC000","gpu;status-ingame;online-broken;ldn-untested","ingame","2024-02-08 19:51:36.000" +"Fimbul - 0100C3A00BB76000","0100C3A00BB76000","status-playable;nvdec","playable","2022-07-26 13:31:47.000" +"Fairune Collection - 01008A6009758000","01008A6009758000","status-playable","playable","2021-06-06 15:29:56.000" +"Enigmatis 2: The Mists of Ravenwood - 0100C6200A0AA000","0100C6200A0AA000","crash;regression;status-boots","boots","2021-06-06 15:15:30.000" +"Energy Balance","","","","2020-04-22 11:13:18.000" +"DragonFangZ","","status-playable","playable","2020-09-28 21:35:18.000" +"Dragon's Dogma: Dark Arisen - 010032C00AC58000","010032C00AC58000","status-playable","playable","2022-07-24 12:58:33.000" +"Everything","","","","2020-04-22 11:35:04.000" +"Dust: An Elysian Tail - 0100B6E00A420000","0100B6E00A420000","status-playable","playable","2022-07-25 15:28:12.000" +"EXTREME POKER","","","","2020-04-22 11:54:54.000" +"Dyna Bomb","","status-playable","playable","2020-06-07 13:26:55.000" +"Escape Doodland","","","","2020-04-22 12:10:08.000" +"Drone Fight - 010058C00A916000","010058C00A916000","status-playable","playable","2022-07-24 14:31:56.000" +"Resident Evil","","","","2020-04-22 12:31:10.000" +"Dungeon Rushers","","","","2020-04-22 12:43:24.000" +"Embers of Mirrim","","","","2020-04-22 12:56:52.000" +"FIFA 19 - 0100FFA0093E8000","0100FFA0093E8000","gpu;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-07-26 13:07:07.000" +"Energy Cycle","","","","2020-04-22 13:40:48.000" +"Dragons Dawn of New Riders","","nvdec;status-playable","playable","2021-01-27 20:05:26.000" +"Enter the Gungeon - 01009D60076F6000","01009D60076F6000","status-playable","playable","2022-07-25 20:28:33.000" +"Drowning - 010052000A574000","010052000A574000","status-playable","playable","2022-07-25 14:28:26.000" +"Earth Atlantis","","","","2020-04-22 14:42:46.000" +"Evil Defenders","","nvdec;status-playable","playable","2020-09-28 17:11:00.000" +"Dustoff Heli Rescue 2","","","","2020-04-22 15:31:34.000" +"Energy Cycle Edge - 0100B8700BD14000","0100B8700BD14000","services;status-ingame","ingame","2021-11-30 05:02:31.000" +"Element - 0100A6700AF10000","0100A6700AF10000","status-playable","playable","2022-07-25 17:17:16.000" +"Duck Game","","","","2020-04-22 17:10:36.000" +"Fill-a-Pix: Phil's Epic Adventure","","status-playable","playable","2020-12-22 13:48:22.000" +"Elliot Quest - 0100128003A24000","0100128003A24000","status-playable","playable","2022-07-25 17:46:14.000" +"Drawful 2 - 0100F7800A434000","0100F7800A434000","status-ingame","ingame","2022-07-24 13:50:21.000" +"Energy Invasion","","status-playable","playable","2021-01-14 21:32:26.000" +"Dungeon Stars","","status-playable","playable","2021-01-18 14:28:37.000" +"FINAL FANTASY X/X-2 HD REMASTER - 0100BC300CB48000","0100BC300CB48000","gpu;status-ingame","ingame","2022-08-16 20:29:26.000" +"Revenant Saga","","","","2020-04-22 23:52:09.000" +"Resident Evil 0","","","","2020-04-23 01:04:42.000" +"Fate/EXTELLA - 010053E002EA2000","010053E002EA2000","gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug","ingame","2023-04-24 23:37:55.000" +"RiME","","UE4;crash;gpu;status-boots","boots","2020-07-20 15:52:38.000" +"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition - 0100E9A00CB30000","0100E9A00CB30000","status-playable;nvdec","playable","2024-06-26 00:16:30.000" +"Rival Megagun","","nvdec;online;status-playable","playable","2021-01-19 14:01:46.000" +"Riddled Corpses EX - 01002C700C326000","01002C700C326000","status-playable","playable","2021-06-06 16:02:44.000" +"Fear Effect Sedna","","nvdec;status-playable","playable","2021-01-19 13:10:33.000" +"Redout: Lightspeed Edition","","","","2020-04-23 14:46:59.000" +"RESIDENT EVIL REVELATIONS 2 - 010095300212A000","010095300212A000","status-playable;online-broken;ldn-untested","playable","2022-08-11 12:57:50.000" +"Robonauts - 0100618004096000","0100618004096000","status-playable;nvdec","playable","2022-08-12 11:33:23.000" +"Road to Ballhalla - 010002F009A7A000","010002F009A7A000","UE4;status-playable","playable","2021-06-07 02:22:36.000" +"Fate/EXTELLA LINK - 010051400B17A000","010051400B17A000","ldn-untested;nvdec;status-playable","playable","2021-01-27 00:45:50.000" +"Rocket Fist","","","","2020-04-23 16:56:33.000" +"RICO - 01009D5009234000","01009D5009234000","status-playable;nvdec;online-broken","playable","2022-08-11 20:16:40.000" +"R.B.I. Baseball 17 - 0100B5A004302000","0100B5A004302000","status-playable;online-working","playable","2022-08-11 11:55:47.000" +"Red Faction Guerrilla Re-Mars-tered - 010075000C608000","010075000C608000","ldn-untested;nvdec;online;status-playable","playable","2021-06-07 03:02:13.000" +"Riptide GP: Renegade - 01002A6006AA4000","01002A6006AA4000","online;status-playable","playable","2021-04-13 23:33:02.000" +"Realpolitiks","","","","2020-04-24 12:33:00.000" +"Fall Of Light - Darkest Edition - 01005A600BE60000","01005A600BE60000","slow;status-ingame;nvdec","ingame","2024-07-24 04:19:26.000" +"Reverie: Sweet As Edition","","","","2020-04-24 13:24:37.000" +"RIVE: Ultimate Edition","","status-playable","playable","2021-03-24 18:45:55.000" +"R.B.I. Baseball 18 - 01005CC007616000","01005CC007616000","status-playable;nvdec;online-working","playable","2022-08-11 11:27:52.000" +"Refunct","","UE4;status-playable","playable","2020-12-15 22:46:21.000" +"Rento Fortune Monolit","","ldn-untested;online;status-playable","playable","2021-01-19 19:52:21.000" +"Super Mario Party - 010036B0034E4000","010036B0034E4000","gpu;status-ingame;Needs Update;ldn-works","ingame","2024-06-21 05:10:16.000" +"Farm Together","","status-playable","playable","2021-01-19 20:01:19.000" +"Regalia: Of Men and Monarchs - Royal Edition - 0100FDF0083A6000","0100FDF0083A6000","status-playable","playable","2022-08-11 12:24:01.000" +"Red Game Without a Great Name","","status-playable","playable","2021-01-19 21:42:35.000" +"R.B.I. Baseball 19 - 0100FCB00BF40000","0100FCB00BF40000","status-playable;nvdec;online-working","playable","2022-08-11 11:43:52.000" +"Eagle Island - 010037400C7DA000","010037400C7DA000","status-playable","playable","2021-04-10 13:15:42.000" +"RIOT: Civil Unrest - 010088E00B816000","010088E00B816000","status-playable","playable","2022-08-11 20:27:56.000" +"Revenant Dogma","","","","2020-04-25 17:51:48.000" +"World of Final Fantasy Maxima","","status-playable","playable","2020-06-07 13:57:23.000" +"ITTA - 010068700C70A000","010068700C70A000","status-playable","playable","2021-06-07 03:15:52.000" +"Pirates: All Aboard!","","","","2020-04-27 12:18:29.000" +"Wolfenstein II The New Colossus - 01009040091E0000","01009040091E0000","gpu;status-ingame","ingame","2024-04-05 05:39:46.000" +"Onimusha: Warlords","","nvdec;status-playable","playable","2020-07-31 13:08:39.000" +"Radiation Island - 01009E40095EE000","01009E40095EE000","status-ingame;opengl;vulkan-backend-bug","ingame","2022-08-11 10:51:04.000" +"Pool Panic","","","","2020-04-27 13:49:19.000" +"Quad Fighter K","","","","2020-04-27 14:00:50.000" +"PSYVARIAR DELTA - 0100EC100A790000","0100EC100A790000","nvdec;status-playable","playable","2021-01-20 13:01:46.000" +"Puzzle Box Maker - 0100476004A9E000","0100476004A9E000","status-playable;nvdec;online-broken","playable","2022-08-10 18:00:52.000" +"Psikyo Collection Vol. 3 - 0100A2300DB78000","0100A2300DB78000","status-ingame","ingame","2021-06-07 02:46:23.000" +"Pianista: The Legendary Virtuoso - 010077300A86C000","010077300A86C000","status-playable;online-broken","playable","2022-08-09 14:52:56.000" +"Quarantine Circular - 0100F1400BA88000","0100F1400BA88000","status-playable","playable","2021-01-20 15:24:15.000" +"Pizza Titan Ultra - 01004A900C352000","01004A900C352000","nvdec;status-playable","playable","2021-01-20 15:58:42.000" +"Phantom Trigger - 0100C31005A50000","0100C31005A50000","status-playable","playable","2022-08-09 14:27:30.000" +"Operación Triunfo 2017 - 0100D5400BD90000","0100D5400BD90000","services;status-ingame;nvdec","ingame","2022-08-08 15:06:42.000" +"Rad Rodgers Radical Edition - 010000600CD54000","010000600CD54000","status-playable;nvdec;online-broken","playable","2022-08-10 19:57:23.000" +"Ape Out - 01005B100C268000","01005B100C268000","status-playable","playable","2022-09-26 19:04:47.000" +"Decay of Logos - 010027700FD2E000","010027700FD2E000","status-playable;nvdec","playable","2022-09-13 14:42:13.000" +"Q.U.B.E. 2 - 010023600AA34000","010023600AA34000","UE4;status-playable","playable","2021-03-03 21:38:57.000" +"Pikuniku","","","","2020-04-28 11:02:59.000" +"Picross S","","","","2020-04-28 11:14:18.000" +"PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE - 0100063005C86000","0100063005C86000","audio;status-playable;nvdec","playable","2024-02-29 14:20:35.000" +"Pilot Sports - 01007A500B0B2000","01007A500B0B2000","status-playable","playable","2021-01-20 15:04:17.000" +"Paper Wars","","","","2020-04-28 11:46:56.000" +"Fushigi no Gensokyo Lotus Labyrinth","","Needs Update;audio;gpu;nvdec;status-ingame","ingame","2021-01-20 15:30:02.000" +"OPUS: The Day We Found Earth - 010049C0075F0000","010049C0075F0000","nvdec;status-playable","playable","2021-01-21 18:29:31.000" +"Psikyo Collection Vol.2 - 01009D400C4A8000","01009D400C4A8000","32-bit;status-playable","playable","2021-06-07 03:22:07.000" +"PixARK","","","","2020-04-28 12:32:16.000" +"Puyo Puyo Tetris","","","","2020-04-28 12:46:37.000" +"Puzzle Puppers","","","","2020-04-28 12:54:05.000" +"OVERWHELM - 01005F000CC18000","01005F000CC18000","status-playable","playable","2021-01-21 18:37:18.000" +"Rapala Fishing: Pro Series","","nvdec;status-playable","playable","2020-12-16 13:26:53.000" +"Power Rangers: Battle for the Grid","","status-playable","playable","2020-06-21 16:52:42.000" +"Professional Farmer: Nintendo Switch Edition","","slow;status-playable","playable","2020-12-16 13:38:19.000" +"Project Nimbus: Complete Edition - 0100ACE00DAB6000","0100ACE00DAB6000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-10 17:35:43.000" +"Perfect Angle - 010089F00A3B4000","010089F00A3B4000","status-playable","playable","2021-01-21 18:48:45.000" +"Oniken: Unstoppable Edition - 010037900C814000","010037900C814000","status-playable","playable","2022-08-08 14:52:06.000" +"Pixeljunk Monsters 2 - 0100E4D00A690000","0100E4D00A690000","status-playable","playable","2021-06-07 03:40:01.000" +"Pocket Rumble","","","","2020-04-28 19:13:20.000" +"Putty Pals","","","","2020-04-28 19:35:49.000" +"Overcooked! Special Edition - 01009B900401E000","01009B900401E000","status-playable","playable","2022-08-08 20:48:52.000" +"Panda Hero","","","","2020-04-28 20:33:24.000" +"Piczle Lines DX","","UE4;crash;nvdec;status-menus","menus","2020-11-16 04:21:31.000" +"Packet Queen #","","","","2020-04-28 21:43:26.000" +"Punch Club","","","","2020-04-28 22:28:01.000" +"Oxenfree","","","","2020-04-28 23:56:28.000" +"Rayman Legends: Definitive Edition - 01005FF002E2A000","01005FF002E2A000","status-playable;nvdec;ldn-works","playable","2023-05-27 18:33:07.000" +"Poi: Explorer Edition - 010086F0064CE000","010086F0064CE000","nvdec;status-playable","playable","2021-01-21 19:32:00.000" +"Paladins - 011123900AEE0000","011123900AEE0000","online;status-menus","menus","2021-01-21 19:21:37.000" +"Q-YO Blaster","","gpu;status-ingame","ingame","2020-06-07 22:36:53.000" +"Please Don't Touch Anything","","","","2020-04-29 12:15:59.000" +"Puzzle Adventure Blockle","","","","2020-04-29 13:05:19.000" +"Plantera - 010087000428E000","010087000428E000","status-playable","playable","2022-08-09 15:36:28.000" +"One Strike","","","","2020-04-29 13:43:11.000" +"Party Arcade - 01007FC00A040000","01007FC00A040000","status-playable;online-broken;UE4;ldn-untested","playable","2022-08-09 12:32:53.000" +"PAYDAY 2 - 0100274004052000","0100274004052000","status-playable;nvdec;online-broken;ldn-untested","playable","2022-08-09 12:56:39.000" +"Quest of Dungeons - 01001DE005012000","01001DE005012000","status-playable","playable","2021-06-07 10:29:22.000" +"Plague Road - 0100FF8005EB2000","0100FF8005EB2000","status-playable","playable","2022-08-09 15:27:14.000" +"Picture Painting Puzzle 1000!","","","","2020-04-29 14:58:39.000" +"Ni No Kuni Wrath of the White Witch - 0100E5600D446000","0100E5600D446000","status-boots;32-bit;nvdec","boots","2024-07-12 04:52:59.000" +"Overcooked! 2 - 01006FD0080B2000","01006FD0080B2000","status-playable;ldn-untested","playable","2022-08-08 16:48:10.000" +"Qbik","","","","2020-04-29 15:50:22.000" +"Rain World - 010047600BF72000","010047600BF72000","status-playable","playable","2023-05-10 23:34:08.000" +"Othello","","","","2020-04-29 17:06:10.000" +"Pankapu","","","","2020-04-29 17:24:48.000" +"Pode - 01009440095FE000","01009440095FE000","nvdec;status-playable","playable","2021-01-25 12:58:35.000" +"PLANET RIX-13","","","","2020-04-29 22:00:16.000" +"Picross S2","","status-playable","playable","2020-10-15 12:01:40.000" +"Picross S3","","status-playable","playable","2020-10-15 11:55:27.000" +"POISOFT'S ""Thud""","","","","2020-04-29 22:26:06.000" +"Paranautical Activity - 010063400B2EC000","010063400B2EC000","status-playable","playable","2021-01-25 13:49:19.000" +"oOo: Ascension - 010074000BE8E000","010074000BE8E000","status-playable","playable","2021-01-25 14:13:34.000" +"Pic-a-Pix Pieces","","","","2020-04-30 12:07:19.000" +"Perception","","UE4;crash;nvdec;status-menus","menus","2020-12-18 11:49:23.000" +"Pirate Pop Plus","","","","2020-04-30 12:19:57.000" +"Outlast 2 - 0100DE70085E8000","0100DE70085E8000","status-ingame;crash;nvdec","ingame","2022-01-22 22:28:05.000" +"Project Highrise: Architect's Edition - 0100BBD00976C000","0100BBD00976C000","status-playable","playable","2022-08-10 17:19:12.000" +"Perchang - 010011700D1B2000","010011700D1B2000","status-playable","playable","2021-01-25 14:19:52.000" +"Out Of The Box - 01005A700A166000","01005A700A166000","status-playable","playable","2021-01-28 01:34:27.000" +"Paperbound Brawlers - 01006AD00B82C000","01006AD00B82C000","status-playable","playable","2021-01-25 14:32:15.000" +"Party Golf - 0100B8E00359E000","0100B8E00359E000","status-playable;nvdec","playable","2022-08-09 12:38:30.000" +"PAN-PAN A tiny big adventure - 0100F0D004CAE000","0100F0D004CAE000","audout;status-playable","playable","2021-01-25 14:42:00.000" +"OVIVO","","","","2020-04-30 15:12:05.000" +"Penguin Wars","","","","2020-04-30 15:28:21.000" +"Physical Contact: Speed - 01008110036FE000","01008110036FE000","status-playable","playable","2022-08-09 14:40:46.000" +"Pic-a-Pix Deluxe","","","","2020-04-30 16:00:55.000" +"Puyo Puyo Esports","","","","2020-04-30 16:13:17.000" +"Qbics Paint - 0100A8D003BAE000","0100A8D003BAE000","gpu;services;status-ingame","ingame","2021-06-07 10:54:09.000" +"Piczle Lines DX 500 More Puzzles!","","UE4;status-playable","playable","2020-12-15 23:42:51.000" +"Pato Box - 010031F006E76000","010031F006E76000","status-playable","playable","2021-01-25 15:17:52.000" +"Phoenix Wright: Ace Attorney Trilogy - 0100CB000A142000","0100CB000A142000","status-playable","playable","2023-09-15 22:03:12.000" +"Physical Contact: 2048","","slow;status-playable","playable","2021-01-25 15:18:32.000" +"OPUS Collection - 01004A200BE82000","01004A200BE82000","status-playable","playable","2021-01-25 15:24:04.000" +"Party Planet","","","","2020-04-30 18:30:59.000" +"Physical Contact: Picture Place","","","","2020-04-30 18:43:20.000" +"Tanzia - 01004DF007564000","01004DF007564000","status-playable","playable","2021-06-07 11:10:25.000" +"Syberia 3 - 0100CBE004E6C000","0100CBE004E6C000","nvdec;status-playable","playable","2021-01-25 16:15:12.000" +"SUPER DRAGON BALL HEROES WORLD MISSION - 0100E5E00C464000","0100E5E00C464000","status-playable;nvdec;online-broken","playable","2022-08-17 12:56:30.000" +"Tales of Vesperia: Definitive Edition - 01002C0008E52000","01002C0008E52000","status-playable","playable","2024-09-28 03:20:47.000" +"Surgeon Simulator CPR","","","","2020-05-01 15:11:43.000" +"Super Inefficient Golf - 010056800B534000","010056800B534000","status-playable;UE4","playable","2022-08-17 15:53:45.000" +"Super Daryl Deluxe","","","","2020-05-01 18:23:22.000" +"Sushi Striker: The Way of Sushido","","nvdec;status-playable","playable","2020-06-26 20:49:11.000" +"Super Volley Blast - 010035B00B3F0000","010035B00B3F0000","status-playable","playable","2022-08-19 18:14:40.000" +"Stunt Kite Party - 0100AF000B4AE000","0100AF000B4AE000","nvdec;status-playable","playable","2021-01-25 17:16:56.000" +"Super Putty Squad - 0100331005E8E000","0100331005E8E000","gpu;status-ingame;32-bit","ingame","2024-04-29 15:51:54.000" +"SWORD ART ONLINE: Hollow Realization Deluxe Edition - 01001B600D1D6000","01001B600D1D6000","status-playable;nvdec","playable","2022-08-19 19:19:15.000" +"SUPER ROBOT WARS T","","online;status-playable","playable","2021-03-25 11:00:40.000" +"Tactical Mind - 01000F20083A8000","01000F20083A8000","status-playable","playable","2021-01-25 18:05:00.000" +"Super Beat Sports - 0100F7000464A000","0100F7000464A000","status-playable;ldn-untested","playable","2022-08-16 16:05:50.000" +"Suicide Guy - 01005CD00A2A2000","01005CD00A2A2000","status-playable","playable","2021-01-26 13:13:54.000" +"Sundered: Eldritch Edition - 01002D3007962000","01002D3007962000","gpu;status-ingame","ingame","2021-06-07 11:46:00.000" +"Super Blackjack Battle II Turbo - The Card Warriors","","","","2020-05-02 09:45:57.000" +"Super Skelemania","","status-playable","playable","2020-06-07 22:59:50.000" +"Super Ping Pong Trick Shot","","","","2020-05-02 10:02:55.000" +"Subsurface Circular","","","","2020-05-02 10:36:40.000" +"Super Hero Fight Club: Reloaded","","","","2020-05-02 10:49:51.000" +"Superola and the lost burgers","","","","2020-05-02 10:57:54.000" +"Super Tennis Blast - 01000500DB50000","","status-playable","playable","2022-08-19 16:20:48.000" +"Swap This!","","","","2020-05-02 11:37:51.000" +"Super Sportmatchen - 0100A9300A4AE000","0100A9300A4AE000","status-playable","playable","2022-08-19 12:34:40.000" +"Super Destronaut DX","","","","2020-05-02 12:13:53.000" +"Summer Sports Games","","","","2020-05-02 12:45:15.000" +"Super Kickers League - 0100196009998000","0100196009998000","status-playable","playable","2021-01-26 13:36:48.000" +"Switch 'N' Shoot","","","","2020-05-03 02:02:08.000" +"Super Mutant Alien Assault","","status-playable","playable","2020-06-07 23:32:45.000" +"Tallowmere","","","","2020-05-03 02:23:10.000" +"Wizard of Legend - 0100522007AAA000","0100522007AAA000","status-playable","playable","2021-06-07 12:20:46.000" +"WARRIORS OROCHI 4 ULTIMATE - 0100E8500AD58000","0100E8500AD58000","status-playable;nvdec;online-broken","playable","2024-08-07 01:50:37.000" +"What Remains of Edith Finch - 010038900DFE0000","010038900DFE0000","slow;status-playable;UE4","playable","2022-08-31 19:57:59.000" +"Wasteland 2: Director's Cut - 010039A00BC64000","010039A00BC64000","nvdec;status-playable","playable","2021-01-27 13:34:11.000" +"Victor Vran Overkill Edition - 0100E81007A06000","0100E81007A06000","gpu;deadlock;status-ingame;nvdec;opengl","ingame","2022-08-30 11:46:56.000" +"Witch Thief - 01002FC00C6D0000","01002FC00C6D0000","status-playable","playable","2021-01-27 18:16:07.000" +"VSR: Void Space Racing - 0100C7C00AE6C000","0100C7C00AE6C000","status-playable","playable","2021-01-27 14:08:59.000" +"Warparty","","nvdec;status-playable","playable","2021-01-27 18:26:32.000" +"Windstorm","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-22 13:17:48.000" +"WAKU WAKU SWEETS","","","","2020-05-03 19:46:53.000" +"Windstorm - Ari's Arrival - 0100D6800CEAC000","0100D6800CEAC000","UE4;status-playable","playable","2021-06-07 19:33:19.000" +"V-Rally 4 - 010064400B138000","010064400B138000","gpu;nvdec;status-ingame","ingame","2021-06-07 19:37:31.000" +"Valkyria Chronicles - 0100CAF00B744000","0100CAF00B744000","status-ingame;32-bit;crash;nvdec","ingame","2022-11-23 20:03:32.000" +"WILL: A Wonderful World","","","","2020-05-03 22:34:06.000" +"WILD GUNS Reloaded - 0100CFC00A1D8000","0100CFC00A1D8000","status-playable","playable","2021-01-28 12:29:05.000" +"Valthirian Arc: Hero School Story","","","","2020-05-04 12:06:06.000" +"War Theatre - 010084D00A134000","010084D00A134000","gpu;status-ingame","ingame","2021-06-07 19:42:45.000" +"Vostok, Inc. - 01004D8007368000","01004D8007368000","status-playable","playable","2021-01-27 17:43:59.000" +"Way of the Passive Fist - 0100BA200C378000","0100BA200C378000","gpu;status-ingame","ingame","2021-02-26 21:07:06.000" +"Vesta - 010057B00712C000","010057B00712C000","status-playable;nvdec","playable","2022-08-29 21:03:39.000" +"West of Loathing - 010031B00A4E8000","010031B00A4E8000","status-playable","playable","2021-01-28 12:35:19.000" +"Vaporum - 010030F00CA1E000","010030F00CA1E000","nvdec;status-playable","playable","2021-05-28 14:25:33.000" +"Vandals - 01007C500D650000","01007C500D650000","status-playable","playable","2021-01-27 21:45:46.000" +"Active Neurons - 010039A010DA0000","010039A010DA0000","status-playable","playable","2021-01-27 21:31:21.000" +"Voxel Sword - 0100BFB00D1F4000","0100BFB00D1F4000","status-playable","playable","2022-08-30 14:57:27.000" +"Levelhead","","online;status-ingame","ingame","2020-10-18 11:44:51.000" +"Violett - 01005880063AA000","01005880063AA000","nvdec;status-playable","playable","2021-01-28 13:09:36.000" +"Wheels of Aurelia - 0100DFC00405E000","0100DFC00405E000","status-playable","playable","2021-01-27 21:59:25.000" +"Varion","","","","2020-05-04 15:50:27.000" +"Warlock's Tower","","","","2020-05-04 16:03:52.000" +"Vectronom","","","","2020-05-04 16:14:05.000" +"Yooka-Laylee - 0100F110029C8000","0100F110029C8000","status-playable","playable","2021-01-28 14:21:45.000" +"WWE 2K18 - 010009800203E000","010009800203E000","status-playable;nvdec","playable","2023-10-21 17:22:01.000" +"Wulverblade - 010033700418A000","010033700418A000","nvdec;status-playable","playable","2021-01-27 22:29:05.000" +"YIIK: A Postmodern RPG - 0100634008266000","0100634008266000","status-playable","playable","2021-01-28 13:38:37.000" +"Yesterday Origins","","","","2020-05-05 14:17:14.000" +"Zarvot - 0100E7900C40000","","status-playable","playable","2021-01-28 13:51:36.000" +"World to the West","","","","2020-05-05 14:47:07.000" +"Yonder: The Cloud Catcher Chronicles - 0100CC600ABB2000","0100CC600ABB2000","status-playable","playable","2021-01-28 14:06:25.000" +"Emma: Lost in Memories - 010017b0102a8000","010017b0102a8000","nvdec;status-playable","playable","2021-01-28 16:19:10.000" +"Zotrix: Solar Division - 01001EE00A6B0000","01001EE00A6B0000","status-playable","playable","2021-06-07 20:34:05.000" +"X-Morph: Defense","","status-playable","playable","2020-06-22 11:05:31.000" +"Wonder Boy: The Dragon's Trap - 0100A6300150C000","0100A6300150C000","status-playable","playable","2021-06-25 04:53:21.000" +"Yoku's Island Express - 010002D00632E000","010002D00632E000","status-playable;nvdec","playable","2022-09-03 13:59:02.000" +"Woodle Tree Adventures","","","","2020-05-06 12:48:20.000" +"World Neverland - 01008E9007064000","01008E9007064000","status-playable","playable","2021-01-28 17:44:23.000" +"Yomawari: The Long Night Collection - 010012F00B6F2000","010012F00B6F2000","status-playable","playable","2022-09-03 14:36:59.000" +"Xenon Valkyrie+ - 010064200C324000","010064200C324000","status-playable","playable","2021-06-07 20:25:53.000" +"Word Search by POWGI","","","","2020-05-06 18:16:35.000" +"Zombie Scrapper","","","","2020-05-06 18:27:12.000" +"Moving Out - 0100C4C00E73E000","0100C4C00E73E000","nvdec;status-playable","playable","2021-06-07 21:17:24.000" +"Wonderboy Returns Remix","","","","2020-05-06 22:21:59.000" +"Xenoraid - 0100928005BD2000","0100928005BD2000","status-playable","playable","2022-09-03 13:01:10.000" +"Zombillie","","status-playable","playable","2020-07-23 17:42:23.000" +"World Conqueror X","","status-playable","playable","2020-12-22 16:10:29.000" +"Xeodrifter - 01005B5009364000","01005B5009364000","status-playable","playable","2022-09-03 13:18:39.000" +"Yono and the Celestial Elephants - 0100BE50042F6000","0100BE50042F6000","status-playable","playable","2021-01-28 18:23:58.000" +"Moto Racer 4 - 01002ED00B01C000","01002ED00B01C000","UE4;nvdec;online;status-playable","playable","2021-04-08 19:09:11.000" +"NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst - 01006BB00800A000","01006BB00800A000","status-playable;nvdec","playable","2024-06-16 14:58:05.000" +"NAMCO MUSEUM - 010002F001220000","010002F001220000","status-playable;ldn-untested","playable","2024-08-13 07:52:21.000" +"Mother Russia Bleeds","","","","2020-05-07 17:29:22.000" +"MotoGP 18 - 0100361007268000","0100361007268000","status-playable;nvdec;UE4;ldn-untested","playable","2022-08-05 11:41:45.000" +"Mushroom Wars 2","","nvdec;status-playable","playable","2020-09-28 15:26:08.000" +"Mugsters - 010073E008E6E000","010073E008E6E000","status-playable","playable","2021-01-28 17:57:17.000" +"Mulaka - 0100211005E94000","0100211005E94000","status-playable","playable","2021-01-28 18:07:20.000" +"Mummy Pinball - 010038B00B9AE000","010038B00B9AE000","status-playable","playable","2022-08-05 16:08:11.000" +"Moto Rush GT - 01003F200D0F2000","01003F200D0F2000","status-playable","playable","2022-08-05 11:23:55.000" +"Mutant Football League Dynasty Edition - 0100C3E00ACAA000","0100C3E00ACAA000","status-playable;online-broken","playable","2022-08-05 17:01:51.000" +"Mr. Shifty","","slow;status-playable","playable","2020-05-08 15:28:16.000" +"MXGP3 - The Official Motocross Videogame","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 14:00:20.000" +"My Memory of Us - 0100E7700C284000","0100E7700C284000","status-playable","playable","2022-08-20 11:03:14.000" +"N++ - 01000D5005974000","01000D5005974000","status-playable","playable","2022-08-05 21:54:58.000" +"MUJO","","status-playable","playable","2020-05-08 16:31:04.000" +"MotoGP 19 - 01004B800D0E8000","01004B800D0E8000","status-playable;nvdec;online-broken;UE4","playable","2022-08-05 11:54:14.000" +"Muddledash","","services;status-ingame","ingame","2020-05-08 16:46:14.000" +"My Little Riding Champion","","slow;status-playable","playable","2020-05-08 17:00:53.000" +"Motorsport Manager for Nintendo Switch - 01002A900D6D6000","01002A900D6D6000","status-playable;nvdec","playable","2022-08-05 12:48:14.000" +"Muse Dash","","status-playable","playable","2020-06-06 14:41:29.000" +"NAMCO MUSEUM ARCADE PAC - 0100DAA00AEE6000","0100DAA00AEE6000","status-playable","playable","2021-06-07 21:44:50.000" +"MyFarm 2018","","","","2020-05-09 12:14:19.000" +"Mutant Mudds Collection - 01004BE004A86000","01004BE004A86000","status-playable","playable","2022-08-05 17:11:38.000" +"Ms. Splosion Man","","online;status-playable","playable","2020-05-09 20:45:43.000" +"New Super Mario Bros. U Deluxe - 0100EA80032EA000","0100EA80032EA000","32-bit;status-playable","playable","2023-10-08 02:06:37.000" +"Nelke & the Legendary Alchemists ~Ateliers of the New World~ - 01006ED00BC76000","01006ED00BC76000","status-playable","playable","2021-01-28 19:39:42.000" +"Nihilumbra","","status-playable","playable","2020-05-10 16:00:12.000" +"Observer - 01002A000C478000","01002A000C478000","UE4;gpu;nvdec;status-ingame","ingame","2021-03-03 20:19:45.000" +"NOT A HERO - 0100CB800B07E000","0100CB800B07E000","status-playable","playable","2021-01-28 19:31:24.000" +"Nightshade","","nvdec;status-playable","playable","2020-05-10 19:43:31.000" +"Night in the Woods - 0100921006A04000","0100921006A04000","status-playable","playable","2022-12-03 20:17:54.000" +"Nippon Marathon - 010037200C72A000","010037200C72A000","nvdec;status-playable","playable","2021-01-28 20:32:46.000" +"One Piece Unlimited World Red Deluxe Edition","","status-playable","playable","2020-05-10 22:26:32.000" +"Numbala","","status-playable","playable","2020-05-11 12:01:07.000" +"Night Trap - 25th Anniversary Edition - 0100D8500A692000","0100D8500A692000","status-playable;nvdec","playable","2022-08-08 13:16:14.000" +"Ninja Shodown","","status-playable","playable","2020-05-11 12:31:21.000" +"OkunoKA - 01006AB00BD82000","01006AB00BD82000","status-playable;online-broken","playable","2022-08-08 14:41:51.000" +"Mechstermination Force - 0100E4600D31A000","0100E4600D31A000","status-playable","playable","2024-07-04 05:39:15.000" +"Lines X","","status-playable","playable","2020-05-11 15:28:30.000" +"Katamari Damacy REROLL - 0100D7000C2C6000","0100D7000C2C6000","status-playable","playable","2022-08-02 21:35:05.000" +"Lifeless Planet - 01005B6008132000","01005B6008132000","status-playable","playable","2022-08-03 21:25:13.000" +"League of Evil - 01009C100390E000","01009C100390E000","online;status-playable","playable","2021-06-08 11:23:27.000" +"Life Goes On - 010006300AFFE000","010006300AFFE000","status-playable","playable","2021-01-29 19:01:20.000" +"Leisure Suit Larry: Wet Dreams Don't Dry - 0100A8E00CAA0000","0100A8E00CAA0000","status-playable","playable","2022-08-03 19:51:44.000" +"Legend of Kay Anniversary - 01002DB007A96000","01002DB007A96000","nvdec;status-playable","playable","2021-01-29 18:38:29.000" +"Kunio-Kun: The World Classics Collection - 010060400ADD2000","010060400ADD2000","online;status-playable","playable","2021-01-29 20:21:46.000" +"Letter Quest Remastered","","status-playable","playable","2020-05-11 21:30:34.000" +"Koi DX","","status-playable","playable","2020-05-11 21:37:51.000" +"Knights of Pen and Paper +1 Deluxier Edition","","status-playable","playable","2020-05-11 21:46:32.000" +"Late Shift - 0100055007B86000","0100055007B86000","nvdec;status-playable","playable","2021-02-01 18:43:58.000" +"Lethal League Blaze - 01003AB00983C000","01003AB00983C000","online;status-playable","playable","2021-01-29 20:13:31.000" +"Koloro - 01005D200C9AA000","01005D200C9AA000","status-playable","playable","2022-08-03 12:34:02.000" +"Little Dragons Cafe","","status-playable","playable","2020-05-12 00:00:52.000" +"Legendary Fishing - 0100A7700B46C000","0100A7700B46C000","online;status-playable","playable","2021-04-14 15:08:46.000" +"Knock-Knock - 010001A00A1F6000","010001A00A1F6000","nvdec;status-playable","playable","2021-02-01 20:03:19.000" +"KAMEN RIDER CLIMAX SCRAMBLE - 0100BDC00A664000","0100BDC00A664000","status-playable;nvdec;ldn-untested","playable","2024-07-03 08:51:11.000" +"Kingdom: New Lands - 0100BD9004AB6000","0100BD9004AB6000","status-playable","playable","2022-08-02 21:48:50.000" +"Lapis x Labyrinth - 01005E000D3D8000","01005E000D3D8000","status-playable","playable","2021-02-01 18:58:08.000" +"Last Day of June - 0100DA700879C000","0100DA700879C000","nvdec;status-playable","playable","2021-06-08 11:35:32.000" +"Levels+","","status-playable","playable","2020-05-12 13:51:39.000" +"Katana ZERO - 010029600D56A000","010029600D56A000","status-playable","playable","2022-08-26 08:09:09.000" +"Layers of Fear: Legacy","","nvdec;status-playable","playable","2021-02-15 16:30:41.000" +"Kotodama: The 7 Mysteries of Fujisawa - 010046600CCA4000","010046600CCA4000","audout;status-playable","playable","2021-02-01 20:28:37.000" +"Lichtspeer: Double Speer Edition","","status-playable","playable","2020-05-12 16:43:09.000" +"Koral","","UE4;crash;gpu;status-menus","menus","2020-11-16 12:41:26.000" +"KeroBlaster","","status-playable","playable","2020-05-12 20:42:52.000" +"Kentucky Robo Chicken","","status-playable","playable","2020-05-12 20:54:17.000" +"L.A. Noire - 0100830004FB6000","0100830004FB6000","status-playable","playable","2022-08-03 16:49:35.000" +"Kill The Bad Guy","","status-playable","playable","2020-05-12 22:16:10.000" +"Legendary Eleven - 0100A73006E74000","0100A73006E74000","status-playable","playable","2021-06-08 12:09:03.000" +"Kitten Squad - 01000C900A136000","01000C900A136000","status-playable;nvdec","playable","2022-08-03 12:01:59.000" +"Labyrinth of Refrain: Coven of Dusk - 010058500B3E0000","010058500B3E0000","status-playable","playable","2021-02-15 17:38:48.000" +"KAMIKO","","status-playable","playable","2020-05-13 12:48:57.000" +"Left-Right: The Mansion","","status-playable","playable","2020-05-13 13:02:12.000" +"Knight Terrors","","status-playable","playable","2020-05-13 13:09:22.000" +"Kingdom: Two Crowns","","status-playable","playable","2020-05-16 19:36:21.000" +"Kid Tripp","","crash;status-nothing","nothing","2020-10-15 07:41:23.000" +"King Oddball","","status-playable","playable","2020-05-13 13:47:57.000" +"KORG Gadget","","status-playable","playable","2020-05-13 13:57:24.000" +"Knights of Pen and Paper 2 Deluxiest Edition","","status-playable","playable","2020-05-13 14:07:00.000" +"Keep Talking and Nobody Explodes - 01008D400A584000","01008D400A584000","status-playable","playable","2021-02-15 18:05:21.000" +"Jet Lancer - 0100F3500C70C000","0100F3500C70C000","gpu;status-ingame","ingame","2021-02-15 18:15:47.000" +"Furi - 01000EC00AF98000","01000EC00AF98000","status-playable","playable","2022-07-27 12:21:20.000" +"Forgotton Anne - 010059E00B93C000","010059E00B93C000","nvdec;status-playable","playable","2021-02-15 18:28:07.000" +"GOD EATER 3 - 01001C700873E000","01001C700873E000","gpu;status-ingame;nvdec","ingame","2022-07-29 21:33:21.000" +"Guacamelee! Super Turbo Championship Edition","","status-playable","playable","2020-05-13 23:44:18.000" +"Frost - 0100B5300B49A000","0100B5300B49A000","status-playable","playable","2022-07-27 12:00:36.000" +"GO VACATION - 0100C1800A9B6000","0100C1800A9B6000","status-playable;nvdec;ldn-works","playable","2024-05-13 19:28:53.000" +"Grand Prix Story - 0100BE600D07A000","0100BE600D07A000","status-playable","playable","2022-08-01 12:42:23.000" +"Freedom Planet","","status-playable","playable","2020-05-14 12:23:06.000" +"Fossil Hunters - 0100CA500756C000","0100CA500756C000","status-playable;nvdec","playable","2022-07-27 11:37:20.000" +"For The King - 010069400B6BE000","010069400B6BE000","nvdec;status-playable","playable","2021-02-15 18:51:44.000" +"Flashback","","nvdec;status-playable","playable","2020-05-14 13:57:29.000" +"Golf Story","","status-playable","playable","2020-05-14 14:56:17.000" +"Firefighters: Airport Fire Department","","status-playable","playable","2021-02-15 19:17:00.000" +"Chocobo's Mystery Dungeon Every Buddy!","","slow;status-playable","playable","2020-05-26 13:53:13.000" +"CHOP","","","","2020-05-14 17:13:00.000" +"FunBox Party","","status-playable","playable","2020-05-15 12:07:02.000" +"Friday the 13th: Killer Puzzle - 010003F00BD48000","010003F00BD48000","status-playable","playable","2021-01-28 01:33:38.000" +"Johnny Turbo's Arcade Gate of Doom - 010069B002CDE000","010069B002CDE000","status-playable","playable","2022-07-29 12:17:50.000" +"Frederic: Resurrection of Music","","nvdec;status-playable","playable","2020-07-23 16:59:53.000" +"Frederic 2","","status-playable","playable","2020-07-23 16:44:37.000" +"Fort Boyard","","nvdec;slow;status-playable","playable","2020-05-15 13:22:53.000" +"Flipping Death - 01009FB002B2E000","01009FB002B2E000","status-playable","playable","2021-02-17 16:12:30.000" +"Flat Heroes - 0100C53004C52000","0100C53004C52000","gpu;status-ingame","ingame","2022-07-26 19:37:37.000" +"Flood of Light","","status-playable","playable","2020-05-15 14:15:25.000" +"FRAMED COLLECTION - 0100F1A00A5DC000","0100F1A00A5DC000","status-playable;nvdec","playable","2022-07-27 11:48:15.000" +"Guacamelee! 2","","status-playable","playable","2020-05-15 14:56:59.000" +"Flinthook","","online;status-playable","playable","2021-03-25 20:42:29.000" +"FORMA.8","","nvdec;status-playable","playable","2020-11-15 01:04:32.000" +"FOX n FORESTS - 01008A100A028000","01008A100A028000","status-playable","playable","2021-02-16 14:27:49.000" +"Gotcha Racing 2nd","","status-playable","playable","2020-07-23 17:14:04.000" +"Floor Kids - 0100DF9005E7A000","0100DF9005E7A000","status-playable;nvdec","playable","2024-08-18 19:38:49.000" +"Firefighters - The Simulation - 0100434003C58000","0100434003C58000","status-playable","playable","2021-02-19 13:32:05.000" +"Flip Wars - 010095A004040000","010095A004040000","services;status-ingame;ldn-untested","ingame","2022-05-02 15:39:18.000" +"TowerFall","","status-playable","playable","2020-05-16 18:58:07.000" +"Towertale","","status-playable","playable","2020-10-15 13:56:58.000" +"Football Manager Touch 2018 - 010097F0099B4000","010097F0099B4000","status-playable","playable","2022-07-26 20:17:56.000" +"Fruitfall Crush","","status-playable","playable","2020-10-20 11:33:33.000" +"Forest Home","","","","2020-05-17 13:33:08.000" +"Fly O'Clock VS","","status-playable","playable","2020-05-17 13:39:52.000" +"Gal Metal - 01B8000C2EA000","","status-playable","playable","2022-07-27 20:57:48.000" +"Gear.Club Unlimited - 010065E003FD8000","010065E003FD8000","status-playable","playable","2021-06-08 13:03:19.000" +"Gear.Club Unlimited 2 - 010072900AFF0000","010072900AFF0000","status-playable;nvdec;online-broken","playable","2022-07-29 12:52:16.000" +"GRIP - 0100459009A2A000","0100459009A2A000","status-playable;nvdec;online-broken;UE4","playable","2022-08-01 15:00:22.000" +"Ginger: Beyond the Crystal - 0100C50007070000","0100C50007070000","status-playable","playable","2021-02-17 16:27:00.000" +"Slayin 2 - 01004E900EDDA000","01004E900EDDA000","gpu;status-ingame","ingame","2024-04-19 16:15:26.000" +"Grim Fandango Remastered - 0100B7900B024000","0100B7900B024000","status-playable;nvdec","playable","2022-08-01 13:55:58.000" +"Gal*Gun 2 - 010024700901A000","010024700901A000","status-playable;nvdec;UE4","playable","2022-07-27 12:45:37.000" +"Golem Gates - 01003C000D84C000","01003C000D84C000","status-ingame;crash;nvdec;online-broken;UE4","ingame","2022-07-30 11:35:11.000" +"Full Metal Furies","","online","","2020-05-18 13:22:06.000" +"GIGA WRECKER Alt. - 010045F00BFC2000","010045F00BFC2000","status-playable","playable","2022-07-29 14:13:54.000" +"Gelly Break - 01009D000AF3A000","01009D000AF3A000","UE4;status-playable","playable","2021-03-03 16:04:02.000" +"The World Next Door - 0100E6200D56E000","0100E6200D56E000","status-playable","playable","2022-09-21 14:15:23.000" +"GREEN - 010068D00AE68000","010068D00AE68000","status-playable","playable","2022-08-01 12:54:15.000" +"Feathery Ears","","","","2020-05-18 14:48:31.000" +"Gorogoa - 0100F2A005C98000","0100F2A005C98000","status-playable","playable","2022-08-01 11:55:08.000" +"Girls und Panzer Dream Tank Match DX - 01006DD00CC96000","01006DD00CC96000","status-playable;ldn-untested","playable","2022-09-12 16:07:11.000" +"Super Crush KO","","","","2020-05-18 15:49:23.000" +"Gem Smashers - 01001A4008192000","01001A4008192000","nvdec;status-playable","playable","2021-06-08 13:40:51.000" +"Grave Danger","","status-playable","playable","2020-05-18 17:41:28.000" +"Fury Unleashed","","crash;services;status-ingame","ingame","2020-10-18 11:52:40.000" +"TaniNani - 01007DB010D2C000","01007DB010D2C000","crash;kernel;status-nothing","nothing","2021-04-08 03:06:44.000" +"Atelier Escha & Logy: Alchemists Of The Dusk Sky DX - 0100E5600EE8E000","0100E5600EE8E000","status-playable;nvdec","playable","2022-11-20 16:01:41.000" +"Battle of Elemental Burst","","","","2020-05-18 23:27:22.000" +"Gun Crazy","","","","2020-05-18 23:47:28.000" +"Ascendant Hearts","","","","2020-05-19 08:50:44.000" +"Infinite Beyond the Mind","","","","2020-05-19 09:17:17.000" +"FullBlast","","status-playable","playable","2020-05-19 10:34:13.000" +"The Legend of Heroes: Trails of Cold Steel III","","status-playable","playable","2020-12-16 10:59:18.000" +"Goosebumps: The Game","","status-playable","playable","2020-05-19 11:56:52.000" +"Gonner","","status-playable","playable","2020-05-19 12:05:02.000" +"Monster Viator","","","","2020-05-19 12:15:18.000" +"Umihara Kawase Fresh","","","","2020-05-19 12:29:18.000" +"Operencia The Stolen Sun - 01006CF00CFA4000","01006CF00CFA4000","UE4;nvdec;status-playable","playable","2021-06-08 13:51:07.000" +"Goetia","","status-playable","playable","2020-05-19 12:55:39.000" +"Grid Mania","","status-playable","playable","2020-05-19 14:11:05.000" +"Pantsu Hunter","","status-playable","playable","2021-02-19 15:12:27.000" +"GOD WARS THE COMPLETE LEGEND","","nvdec;status-playable","playable","2020-05-19 14:37:50.000" +"Dark Burial","","","","2020-05-19 14:38:34.000" +"Langrisser I and II - 0100BAB00E8C0000","0100BAB00E8C0000","status-playable","playable","2021-02-19 15:46:10.000" +"My Secret Pets","","","","2020-05-19 15:26:56.000" +"Grass Cutter","","slow;status-ingame","ingame","2020-05-19 18:27:42.000" +"Giana Sisters: Twisted Dreams - Owltimate Edition - 01003830092B8000","01003830092B8000","status-playable","playable","2022-07-29 14:06:12.000" +"FUN! FUN! Animal Park - 010002F00CC20000","010002F00CC20000","status-playable","playable","2021-04-14 17:08:52.000" +"Graceful Explosion Machine","","status-playable","playable","2020-05-19 20:36:55.000" +"Garage","","status-playable","playable","2020-05-19 20:59:53.000" +"Game Dev Story","","status-playable","playable","2020-05-20 00:00:38.000" +"Gone Home - 0100EEC00AA6E000","0100EEC00AA6E000","status-playable","playable","2022-08-01 11:14:20.000" +"Geki Yaba Runner Anniversary Edition - 01000F000D9F0000","01000F000D9F0000","status-playable","playable","2021-02-19 18:59:07.000" +"Gridd: Retroenhanced","","status-playable","playable","2020-05-20 11:32:40.000" +"Green Game - 0100CBB0070EE000","0100CBB0070EE000","nvdec;status-playable","playable","2021-02-19 18:51:55.000" +"Glaive: Brick Breaker","","status-playable","playable","2020-05-20 12:15:59.000" +"Furwind - 0100A6B00D4EC000","0100A6B00D4EC000","status-playable","playable","2021-02-19 19:44:08.000" +"Goat Simulator - 010032600C8CE000","010032600C8CE000","32-bit;status-playable","playable","2022-07-29 21:02:33.000" +"Gnomes Garden 2","","status-playable","playable","2021-02-19 20:08:13.000" +"Gensokyo Defenders - 010000300C79C000","010000300C79C000","status-playable;online-broken;UE4","playable","2022-07-29 13:48:12.000" +"Guess the Character","","status-playable","playable","2020-05-20 13:14:19.000" +"Gato Roboto - 010025500C098000","010025500C098000","status-playable","playable","2023-01-20 15:04:11.000" +"Gekido Kintaro's Revenge","","status-playable","playable","2020-10-27 12:44:05.000" +"Ghost 1.0 - 0100EEB005ACC000","0100EEB005ACC000","status-playable","playable","2021-02-19 20:48:47.000" +"GALAK-Z: Variant S - 0100C9800A454000","0100C9800A454000","status-boots;online-broken","boots","2022-07-29 11:59:12.000" +"Cuphead - 0100A5C00D162000","0100A5C00D162000","status-playable","playable","2022-02-01 22:45:55.000" +"Darkest Dungeon - 01008F1008DA6000","01008F1008DA6000","status-playable;nvdec","playable","2022-07-22 18:49:18.000" +"Cabela's: The Hunt - Championship Edition - 0100E24004510000","0100E24004510000","status-menus;32-bit","menus","2022-07-21 20:21:25.000" +"Darius Cozmic Collection","","status-playable","playable","2021-02-19 20:59:06.000" +"Ion Fury - 010041C00D086000","010041C00D086000","status-ingame;vulkan-backend-bug","ingame","2022-08-07 08:27:51.000" +"Void Bastards - 0100D010113A8000","0100D010113A8000","status-playable","playable","2022-10-15 00:04:19.000" +"Our two Bedroom Story - 010097F010FE6000","010097F010FE6000","gpu;status-ingame;nvdec","ingame","2023-10-10 17:41:20.000" +"Dark Witch Music Episode: Rudymical","","status-playable","playable","2020-05-22 09:44:44.000" +"Cave Story+","","status-playable","playable","2020-05-22 09:57:25.000" +"Crawl","","status-playable","playable","2020-05-22 10:16:05.000" +"Chasm","","status-playable","playable","2020-10-23 11:03:43.000" +"Princess Closet","","","","2020-05-22 10:34:06.000" +"Color Zen","","status-playable","playable","2020-05-22 10:56:17.000" +"Coffee Crisis - 0100CF800C810000","0100CF800C810000","status-playable","playable","2021-02-20 12:34:52.000" +"Croc's World","","status-playable","playable","2020-05-22 11:21:09.000" +"Chicken Rider","","status-playable","playable","2020-05-22 11:31:17.000" +"Caveman Warriors","","status-playable","playable","2020-05-22 11:44:20.000" +"Clustertruck - 010096900A4D2000","010096900A4D2000","slow;status-ingame","ingame","2021-02-19 21:07:09.000" +"Yumeutsutsu Re:After - 0100B56011502000","0100B56011502000","status-playable","playable","2022-11-20 16:09:06.000" +"Danger Mouse - 01003ED0099B0000","01003ED0099B0000","status-boots;crash;online","boots","2022-07-22 15:49:45.000" +"Circle of Sumo","","status-playable","playable","2020-05-22 12:45:21.000" +"Chicken Range - 0100F6C00A016000","0100F6C00A016000","status-playable","playable","2021-04-23 12:14:23.000" +"Conga Master Party!","","status-playable","playable","2020-05-22 13:22:24.000" +"SNK HEROINES Tag Team Frenzy - 010027F00AD6C000","010027F00AD6C000","status-playable;nvdec;online-broken;ldn-untested","playable","2022-08-14 14:19:25.000" +"Conduct TOGETHER! - 010043700C9B0000","010043700C9B0000","nvdec;status-playable","playable","2021-02-20 12:59:00.000" +"Calculation Castle: Greco's Ghostly Challenge ""Addition""","","32-bit;status-playable","playable","2020-11-01 23:40:11.000" +"Calculation Castle: Greco's Ghostly Challenge ""Subtraction""","","32-bit;status-playable","playable","2020-11-01 23:47:42.000" +"Calculation Castle: Greco's Ghostly Challenge ""Multiplication""","","32-bit;status-playable","playable","2020-11-02 00:04:33.000" +"Calculation Castle: Greco's Ghostly Challenge ""Division""","","32-bit;status-playable","playable","2020-11-01 23:54:55.000" +"Chicken Assassin: Reloaded - 0100E3C00A118000","0100E3C00A118000","status-playable","playable","2021-02-20 13:29:01.000" +"eSports Legend","","","","2020-05-22 18:58:46.000" +"Crypt of the Necrodancer - 0100CEA007D08000","0100CEA007D08000","status-playable;nvdec","playable","2022-11-01 09:52:06.000" +"Crash Bandicoot N. Sane Trilogy - 0100D1B006744000","0100D1B006744000","status-playable","playable","2024-02-11 11:38:14.000" +"Castle of Heart - 01003C100445C000","01003C100445C000","status-playable;nvdec","playable","2022-07-21 23:10:45.000" +"Darkwood","","status-playable","playable","2021-01-08 21:24:06.000" +"A Fold Apart","","","","2020-05-23 08:10:49.000" +"Blind Men - 010089D011310000","010089D011310000","audout;status-playable","playable","2021-02-20 14:15:38.000" +"Darksiders Warmastered Edition - 0100E1400BA96000","0100E1400BA96000","status-playable;nvdec","playable","2023-03-02 18:08:09.000" +"OBAKEIDORO!","","nvdec;online;status-playable","playable","2020-10-16 16:57:34.000" +"De:YABATANIEN","","","","2020-05-23 10:48:51.000" +"Crash Dummy","","nvdec;status-playable","playable","2020-05-23 11:12:43.000" +"Castlevania Anniversary Collection","","audio;status-playable","playable","2020-05-23 11:40:29.000" +"Flan - 010038200E088000","010038200E088000","status-ingame;crash;regression","ingame","2021-11-17 07:39:28.000" +"Sisters Royale: Five Sisters Under Fire","","","","2020-05-23 15:12:09.000" +"Game Tengoku CruisinMix Special","","","","2020-05-23 17:30:59.000" +"Cosmic Star Heroine - 010067C00A776000","010067C00A776000","status-playable","playable","2021-02-20 14:30:47.000" +"Croixleur Sigma - 01000F0007D92000","01000F0007D92000","status-playable;online","playable","2022-07-22 14:26:54.000" +"Cities: Skylines - Nintendo Switch Edition","","status-playable","playable","2020-12-16 10:34:57.000" +"Castlestorm - 010097C00AB66000","010097C00AB66000","status-playable;nvdec","playable","2022-07-21 22:49:14.000" +"Coffin Dodgers - 0100178009648000","0100178009648000","status-playable","playable","2021-02-20 14:57:41.000" +"Child of Light","","nvdec;status-playable","playable","2020-12-16 10:23:10.000" +"Wizards of Brandel","","status-nothing","nothing","2020-10-14 15:52:33.000" +"Contra Anniversary Collection - 0100DCA00DA7E000","0100DCA00DA7E000","status-playable","playable","2022-07-22 11:30:12.000" +"Cartoon Network Adventure Time: Pirates of the Enchiridion - 0100C4E004406000","0100C4E004406000","status-playable;nvdec","playable","2022-07-21 21:49:01.000" +"Claybook - 010009300AA6C000","010009300AA6C000","slow;status-playable;nvdec;online;UE4","playable","2022-07-22 11:11:34.000" +"Crashbots - 0100BF200CD74000","0100BF200CD74000","status-playable","playable","2022-07-22 13:50:52.000" +"Crossing Souls - 0100B1E00AA56000","0100B1E00AA56000","nvdec;status-playable","playable","2021-02-20 15:42:54.000" +"Groove Coaster: Wai Wai Party!!!! - 0100EB500D92E000","0100EB500D92E000","status-playable;nvdec;ldn-broken","playable","2021-11-06 14:54:27.000" +"Candle - The Power of the Flame","","nvdec;status-playable","playable","2020-05-26 12:10:20.000" +"Minecraft Dungeons - 01006C100EC08000","01006C100EC08000","status-playable;nvdec;online-broken;UE4","playable","2024-06-26 22:10:43.000" +"Constructor Plus","","status-playable","playable","2020-05-26 12:37:40.000" +"The Wonderful 101: Remastered - 0100B1300FF08000","0100B1300FF08000","slow;status-playable;nvdec","playable","2022-09-30 13:49:28.000" +"Dandara","","status-playable","playable","2020-05-26 12:42:33.000" +"ChromaGun","","status-playable","playable","2020-05-26 12:56:42.000" +"Crayola Scoot - 0100C66007E96000","0100C66007E96000","status-playable;nvdec","playable","2022-07-22 14:01:55.000" +"Chess Ultra - 0100A5900472E000","0100A5900472E000","status-playable;UE4","playable","2023-08-30 23:06:31.000" +"Clue","","crash;online;status-menus","menus","2020-11-10 09:23:48.000" +"ACA NEOGEO Metal Slug X","","crash;services;status-menus","menus","2020-05-26 14:07:20.000" +"ACA NEOGEO ZUPAPA!","","online;status-playable","playable","2021-03-25 20:07:33.000" +"ACA NEOGEO WORLD HEROES PERFECT","","crash;services;status-menus","menus","2020-05-26 14:14:36.000" +"ACA NEOGEO WAKU WAKU 7 - 0100CEF001DC0000","0100CEF001DC0000","online;status-playable","playable","2021-04-10 14:20:52.000" +"ACA NEOGEO THE SUPER SPY - 0100F7F00AFA2000","0100F7F00AFA2000","online;status-playable","playable","2021-04-10 14:26:33.000" +"ACA NEOGEO THE LAST BLADE 2 - 0100699008792000","0100699008792000","online;status-playable","playable","2021-04-10 14:31:54.000" +"ACA NEOGEO THE KING OF FIGHTERS '99 - 0100583001DCA000","0100583001DCA000","online;status-playable","playable","2021-04-10 14:36:56.000" +"ACA NEOGEO THE KING OF FIGHTERS '98","","crash;services;status-menus","menus","2020-05-26 14:54:20.000" +"ACA NEOGEO THE KING OF FIGHTERS '97 - 0100170008728000","0100170008728000","online;status-playable","playable","2021-04-10 14:43:27.000" +"ACA NEOGEO THE KING OF FIGHTERS '96 - 01006F0004FB4000","01006F0004FB4000","online;status-playable","playable","2021-04-10 14:49:10.000" +"ACA NEOGEO THE KING OF FIGHTERS '95 - 01009DC001DB6000","01009DC001DB6000","status-playable","playable","2021-03-29 20:27:35.000" +"ACA NEOGEO THE KING OF FIGHTERS '94","","crash;services;status-menus","menus","2020-05-26 15:03:44.000" +"ACA NEOGEO THE KING OF FIGHTERS 2003 - 0100EF100AFE6000","0100EF100AFE6000","online;status-playable","playable","2021-04-10 14:54:31.000" +"ACA NEOGEO THE KING OF FIGHTERS 2002 - 0100CFD00AFDE000","0100CFD00AFDE000","online;status-playable","playable","2021-04-10 15:01:55.000" +"ACA NEOGEO THE KING OF FIGHTERS 2001 - 010048200AFC2000","010048200AFC2000","online;status-playable","playable","2021-04-10 15:16:23.000" +"ACA NEOGEO THE KING OF FIGHTERS 2000 - 0100B97002B44000","0100B97002B44000","online;status-playable","playable","2021-04-10 15:24:35.000" +"ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY - 0100A4D00A308000","0100A4D00A308000","online;status-playable","playable","2021-04-10 15:39:22.000" +"ACA NEOGEO SUPER SIDEKICKS 2 - 010055A00A300000","010055A00A300000","online;status-playable","playable","2021-04-10 16:05:58.000" +"ACA NEOGEO SPIN MASTER - 01007D1004DBA000","01007D1004DBA000","online;status-playable","playable","2021-04-10 15:50:19.000" +"ACA NEOGEO SHOCK TROOPERS","","crash;services;status-menus","menus","2020-05-26 15:29:34.000" +"ACA NEOGEO SENGOKU 3 - 01008D000877C000","01008D000877C000","online;status-playable","playable","2021-04-10 16:11:53.000" +"ACA NEOGEO SENGOKU 2 - 01009B300872A000","01009B300872A000","online;status-playable","playable","2021-04-10 17:36:44.000" +"ACA NEOGEO SAMURAI SHODOWN SPECIAL V - 010049F00AFE8000","010049F00AFE8000","online;status-playable","playable","2021-04-10 18:07:13.000" +"ACA NEOGEO SAMURAI SHODOWN IV - 010047F001DBC000","010047F001DBC000","online;status-playable","playable","2021-04-12 12:58:54.000" +"ACA NEOGEO SAMURAI SHODOWN - 01005C9002B42000","01005C9002B42000","online;status-playable","playable","2021-04-01 17:11:35.000" +"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL - 010088500878C000","010088500878C000","online;status-playable","playable","2021-04-01 17:18:27.000" +"ACA NEOGEO OVER TOP - 01003A5001DBA000","01003A5001DBA000","status-playable","playable","2021-02-21 13:16:25.000" +"ACA NEOGEO NINJA COMMANDO - 01007E800AFB6000","01007E800AFB6000","online;status-playable","playable","2021-04-01 17:28:18.000" +"ACA NEOGEO NINJA COMBAT - 010052A00A306000","010052A00A306000","status-playable","playable","2021-03-29 21:17:28.000" +"ACA NEOGEO NEO TURF MASTERS - 01002E70032E8000","01002E70032E8000","status-playable","playable","2021-02-21 15:12:01.000" +"ACA NEOGEO Money Puzzle Exchanger - 010038F00AFA0000","010038F00AFA0000","online;status-playable","playable","2021-04-01 17:59:56.000" +"ACA NEOGEO METAL SLUG 4 - 01009CE00AFAE000","01009CE00AFAE000","online;status-playable","playable","2021-04-01 18:12:18.000" +"ACA NEOGEO METAL SLUG 3","","crash;services;status-menus","menus","2020-05-26 16:32:45.000" +"ACA NEOGEO METAL SLUG 2 - 010086300486E000","010086300486E000","online;status-playable","playable","2021-04-01 19:25:52.000" +"ACA NEOGEO METAL SLUG - 0100EBE002B3E000","0100EBE002B3E000","status-playable","playable","2021-02-21 13:56:48.000" +"ACA NEOGEO MAGICIAN LORD - 01007920038F6000","01007920038F6000","online;status-playable","playable","2021-04-01 19:33:26.000" +"ACA NEOGEO MAGICAL DROP II","","crash;services;status-menus","menus","2020-05-26 16:48:24.000" +"SNK Gals Fighters","","","","2020-05-26 16:56:16.000" +"ESP Ra.De. Psi - 0100F9600E746000","0100F9600E746000","audio;slow;status-ingame","ingame","2024-03-07 15:05:08.000" +"ACA NEOGEO LEAGUE BOWLING","","crash;services;status-menus","menus","2020-05-26 17:11:04.000" +"ACA NEOGEO LAST RESORT - 01000D10038E6000","01000D10038E6000","online;status-playable","playable","2021-04-01 19:51:22.000" +"ACA NEOGEO GHOST PILOTS - 01005D700A2F8000","01005D700A2F8000","online;status-playable","playable","2021-04-01 20:26:45.000" +"ACA NEOGEO GAROU: MARK OF THE WOLVES - 0100CB2001DB8000","0100CB2001DB8000","online;status-playable","playable","2021-04-01 20:31:10.000" +"ACA NEOGEO FOOTBALL FRENZY","","status-playable","playable","2021-03-29 20:12:12.000" +"ACA NEOGEO FATAL FURY - 0100EE6002B48000","0100EE6002B48000","online;status-playable","playable","2021-04-01 20:36:23.000" +"ACA NEOGEO CROSSED SWORDS - 0100D2400AFB0000","0100D2400AFB0000","online;status-playable","playable","2021-04-01 20:42:59.000" +"ACA NEOGEO BLAZING STAR","","crash;services;status-menus","menus","2020-05-26 17:29:02.000" +"ACA NEOGEO BASEBALL STARS PROFESSIONAL - 01003FE00A2F6000","01003FE00A2F6000","online;status-playable","playable","2021-04-01 21:23:05.000" +"ACA NEOGEO AGGRESSORS OF DARK KOMBAT - 0100B4800AFBA000","0100B4800AFBA000","online;status-playable","playable","2021-04-01 22:48:01.000" +"ACA NEOGEO AERO FIGHTERS 3 - 0100B91008780000","0100B91008780000","online;status-playable","playable","2021-04-12 13:11:17.000" +"ACA NEOGEO 3 COUNT BOUT - 0100FC000AFC6000","0100FC000AFC6000","online;status-playable","playable","2021-04-12 13:16:42.000" +"ACA NEOGEO 2020 SUPER BASEBALL - 01003C400871E000","01003C400871E000","online;status-playable","playable","2021-04-12 13:23:51.000" +"Arcade Archives Traverse USA - 010029D006ED8000","010029D006ED8000","online;status-playable","playable","2021-04-15 08:11:06.000" +"Arcade Archives TERRA CRESTA","","crash;services;status-menus","menus","2020-08-18 20:20:55.000" +"Arcade Archives STAR FORCE - 010069F008A38000","010069F008A38000","online;status-playable","playable","2021-04-15 08:39:09.000" +"Arcade Archives Sky Skipper - 010008F00B054000","010008F00B054000","online;status-playable","playable","2021-04-15 08:58:09.000" +"Arcade Archives RYGAR - 0100C2D00981E000","0100C2D00981E000","online;status-playable","playable","2021-04-15 08:48:30.000" +"Arcade Archives Renegade - 010081E001DD2000","010081E001DD2000","status-playable;online","playable","2022-07-21 11:45:40.000" +"Arcade Archives PUNCH-OUT!! - 01001530097F8000","01001530097F8000","online;status-playable","playable","2021-03-25 22:10:55.000" +"Arcade Archives OMEGA FIGHTER","","crash;services;status-menus","menus","2020-08-18 20:50:54.000" +"Arcade Archives Ninja-Kid","","online;status-playable","playable","2021-03-26 20:55:07.000" +"Arcade Archives NINJA GAIDEN - 01003EF00D3B4000","01003EF00D3B4000","audio;online;status-ingame","ingame","2021-04-12 16:27:53.000" +"Arcade Archives MOON PATROL - 01003000097FE000","01003000097FE000","online;status-playable","playable","2021-03-26 11:42:04.000" +"Arcade Archives MARIO BROS. - 0100755004608000","0100755004608000","online;status-playable","playable","2021-03-26 11:31:32.000" +"Arcade Archives Kid's Horehore Daisakusen - 0100E7C001DE0000","0100E7C001DE0000","online;status-playable","playable","2021-04-12 16:21:29.000" +"Arcade Archives Kid Niki Radical Ninja - 010010B008A36000","010010B008A36000","audio;status-ingame;online","ingame","2022-07-21 11:02:04.000" +"Arcade Archives Ikki - 01000DB00980A000","01000DB00980A000","online;status-playable","playable","2021-03-25 23:11:28.000" +"Arcade Archives HEROIC EPISODE - 01009A4008A30000","01009A4008A30000","online;status-playable","playable","2021-03-25 23:01:26.000" +"Arcade Archives DOUBLE DRAGON II The Revenge - 01009E3001DDE000","01009E3001DDE000","online;status-playable","playable","2021-04-12 16:05:29.000" +"Arcade Archives DOUBLE DRAGON - 0100F25001DD0000","0100F25001DD0000","online;status-playable","playable","2021-03-25 22:44:34.000" +"Arcade Archives DONKEY KONG","","Needs Update;crash;services;status-menus","menus","2021-03-24 18:18:43.000" +"Arcade Archives CRAZY CLIMBER - 0100BB1001DD6000","0100BB1001DD6000","online;status-playable","playable","2021-03-25 22:24:15.000" +"Arcade Archives City CONNECTION - 010007A00980C000","010007A00980C000","online;status-playable","playable","2021-03-25 22:16:15.000" +"Arcade Archives 10-Yard Fight - 0100BE80097FA000","0100BE80097FA000","online;status-playable","playable","2021-03-25 21:26:41.000" +"Ark: Survival Evolved - 0100D4A00B284000","0100D4A00B284000","gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested","ingame","2024-04-16 00:53:56.000" +"Art of Balance - 01008EC006BE2000","01008EC006BE2000","gpu;status-ingame;ldn-works","ingame","2022-07-21 17:13:57.000" +"Aces of the Luftwaffe Squadron","","nvdec;slow;status-playable","playable","2020-05-27 12:29:42.000" +"Atelier Lulua ~ The Scion of Arland ~","","nvdec;status-playable","playable","2020-12-16 14:29:19.000" +"Apocalipsis","","deadlock;status-menus","menus","2020-05-27 12:56:37.000" +"Aqua Moto Racing Utopia - 0100D0D00516A000","0100D0D00516A000","status-playable","playable","2021-02-21 21:21:00.000" +"Arc of Alchemist - 0100C7D00E6A0000","0100C7D00E6A0000","status-playable;nvdec","playable","2022-10-07 19:15:54.000" +"1979 Revolution: Black Friday - 0100D1000B18C000","0100D1000B18C000","nvdec;status-playable","playable","2021-02-21 21:03:43.000" +"ABZU - 0100C1300BBC6000","0100C1300BBC6000","status-playable;UE4","playable","2022-07-19 15:02:52.000" +"Asterix & Obelix XXL 2 - 010050400BD38000","010050400BD38000","deadlock;status-ingame;nvdec","ingame","2022-07-21 17:54:14.000" +"Astro Bears Party","","status-playable","playable","2020-05-28 11:21:58.000" +"AQUA KITTY UDX - 0100AC10085CE000","0100AC10085CE000","online;status-playable","playable","2021-04-12 15:34:11.000" +"Assassin's Creed III Remastered - 01007F600B134000","01007F600B134000","status-boots;nvdec","boots","2024-06-25 20:12:11.000" +"Antiquia Lost","","status-playable","playable","2020-05-28 11:57:32.000" +"Animal Super Squad - 0100EFE009424000","0100EFE009424000","UE4;status-playable","playable","2021-04-23 20:50:50.000" +"Anima: Arcane Edition - 010033F00B3FA000","010033F00B3FA000","nvdec;status-playable","playable","2021-01-26 16:55:51.000" +"American Ninja Warrior: Challenge - 010089D00A3FA000","010089D00A3FA000","nvdec;status-playable","playable","2021-06-09 13:11:17.000" +"Air Conflicts: Pacific Carriers","","status-playable","playable","2021-01-04 10:52:50.000" +"Agatha Knife","","status-playable","playable","2020-05-28 12:37:58.000" +"ACORN Tactics - 0100DBC0081A4000","0100DBC0081A4000","status-playable","playable","2021-02-22 12:57:40.000" +"Anarcute - 010050900E1C6000","010050900E1C6000","status-playable","playable","2021-02-22 13:17:59.000" +"39 Days to Mars - 0100AF400C4CE000","0100AF400C4CE000","status-playable","playable","2021-02-21 22:12:46.000" +"Animal Rivals Switch - 010065B009B3A000","010065B009B3A000","status-playable","playable","2021-02-22 14:02:42.000" +"88 Heroes","","status-playable","playable","2020-05-28 14:13:02.000" +"Aegis Defenders - 01008E60065020000","01008E6006502000","status-playable","playable","2021-02-22 13:29:33.000" +"Jeopardy! - 01006E400AE2A000","01006E400AE2A000","audout;nvdec;online;status-playable","playable","2021-02-22 13:53:46.000" +"Akane - 01007F100DE52000","01007F100DE52000","status-playable;nvdec","playable","2022-07-21 00:12:18.000" +"Aaero - 010097A00CC0A000","010097A00CC0A000","status-playable;nvdec","playable","2022-07-19 14:49:55.000" +"99Vidas","","online;status-playable","playable","2020-10-29 13:00:40.000" +"AngerForce: Reloaded for Nintendo Switch - 010001E00A5F6000","010001E00A5F6000","status-playable","playable","2022-07-21 10:37:17.000" +"36 Fragments of Midnight","","status-playable","playable","2020-05-28 15:12:59.000" +"Akihabara - Feel the Rhythm Remixed - 010053100B0EA000","010053100B0EA000","status-playable","playable","2021-02-22 14:39:35.000" +"Bertram Fiddle Episode 2: A Bleaker Predicklement - 010021F00C1C0000","010021F00C1C0000","nvdec;status-playable","playable","2021-02-22 14:56:37.000" +"6180 the moon","","status-playable","playable","2020-05-28 15:39:24.000" +"Ace of Seafood - 0100FF1004D56000","0100FF1004D56000","status-playable","playable","2022-07-19 15:32:25.000" +"12 orbits","","status-playable","playable","2020-05-28 16:13:26.000" +"Access Denied - 0100A9900CB5C000","0100A9900CB5C000","status-playable","playable","2022-07-19 15:25:10.000" +"Air Hockey","","status-playable","playable","2020-05-28 16:44:37.000" +"2064: Read Only Memories","","deadlock;status-menus","menus","2020-05-28 16:53:58.000" +"12 is Better Than 6 - 01007F600D1B8000","01007F600D1B8000","status-playable","playable","2021-02-22 16:10:12.000" +"Sid Meier's Civilization VI - 010044500C182000","010044500C182000","status-playable;ldn-untested","playable","2024-04-08 16:03:40.000" +"Sniper Elite V2 Remastered - 0100BB000A3AA000","0100BB000A3AA000","slow;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-08-14 13:23:13.000" +"South Park: The Fractured But Whole - 01008F2005154000","01008F2005154000","slow;status-playable;online-broken","playable","2024-07-08 17:47:28.000" +"SkyScrappers","","status-playable","playable","2020-05-28 22:11:25.000" +"Shio - 0100C2F00A568000","0100C2F00A568000","status-playable","playable","2021-02-22 16:25:09.000" +"NBA 2K18 - 0100760002048000","0100760002048000","gpu;status-ingame;ldn-untested","ingame","2022-08-06 14:17:51.000" +"Sky Force Anniversary - 010083100B5CA000","010083100B5CA000","status-playable;online-broken","playable","2022-08-12 20:50:07.000" +"Slay the Spire - 010026300BA4A000","010026300BA4A000","status-playable","playable","2023-01-20 15:09:26.000" +"Sky Gamblers: Storm Raiders - 010093D00AC38000","010093D00AC38000","gpu;audio;status-ingame;32-bit","ingame","2022-08-12 21:13:36.000" +"Shovel Knight: Treasure Trove","","status-playable","playable","2021-02-14 18:24:39.000" +"Sine Mora EX - 01002820036A8000","01002820036A8000","gpu;status-ingame;online-broken","ingame","2022-08-12 19:36:18.000" +"NBA Playgrounds - 0100F5A008126000","0100F5A008126000","status-playable;nvdec;online-broken;UE4","playable","2022-08-06 16:13:44.000" +"Shut Eye","","status-playable","playable","2020-07-23 18:08:35.000" +"SINNER: Sacrifice for Redemption - 0100B16009C10000","0100B16009C10000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-12 20:37:33.000" +"SKYPEACE","","status-playable","playable","2020-05-29 14:14:30.000" +"Slain","","status-playable","playable","2020-05-29 14:26:16.000" +"Umihara Kawase BaZooka!","","","","2020-05-29 14:56:48.000" +"Sigi - A Fart for Melusina - 01007FC00B674000","01007FC00B674000","status-playable","playable","2021-02-22 16:46:58.000" +"Sky Ride - 0100DDB004F30000","0100DDB004F30000","status-playable","playable","2021-02-22 16:53:07.000" +"Soccer Slammers","","status-playable","playable","2020-05-30 07:48:14.000" +"Songbringer","","status-playable","playable","2020-06-22 10:42:02.000" +"Sky Rogue","","status-playable","playable","2020-05-30 08:26:28.000" +"Shovel Knight: Specter of Torment","","status-playable","playable","2020-05-30 08:34:17.000" +"Snow Moto Racing Freedom - 010045300516E000","010045300516E000","gpu;status-ingame;vulkan-backend-bug","ingame","2022-08-15 16:05:14.000" +"Snake Pass - 0100C0F0020E8000","0100C0F0020E8000","status-playable;nvdec;UE4","playable","2022-01-03 04:31:52.000" +"Shu","","nvdec;status-playable","playable","2020-05-30 09:08:59.000" +"SOLDAM Drop, Connect, Erase","","status-playable","playable","2020-05-30 09:18:54.000" +"SkyTime","","slow;status-ingame","ingame","2020-05-30 09:24:51.000" +"NBA 2K19 - 01001FF00B544000","01001FF00B544000","crash;ldn-untested;services;status-nothing","nothing","2021-04-16 13:07:21.000" +"Shred!2 - Freeride MTB","","status-playable","playable","2020-05-30 14:34:09.000" +"Skelly Selest","","status-playable","playable","2020-05-30 15:38:18.000" +"Snipperclips Plus - 01008E20047DC000","01008E20047DC000","status-playable","playable","2023-02-14 20:20:13.000" +"SolDivide for Nintendo Switch - 0100590009C38000","0100590009C38000","32-bit;status-playable","playable","2021-06-09 14:13:03.000" +"Slime-san","","status-playable","playable","2020-05-30 16:15:12.000" +"Skies of Fury","","status-playable","playable","2020-05-30 16:40:54.000" +"SlabWell - 01003AD00DEAE000","01003AD00DEAE000","status-playable","playable","2021-02-22 17:02:51.000" +"Smoke and Sacrifice - 0100207007EB2000","0100207007EB2000","status-playable","playable","2022-08-14 12:38:27.000" +"Sky Gamblers - Afterburner - 010003F00CC98000","010003F00CC98000","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-12 21:04:55.000" +"Slice Dice & Rice - 0100F4500AA4E000","0100F4500AA4E000","online;status-playable","playable","2021-02-22 17:44:23.000" +"Slayaway Camp: Butcher's Cut - 0100501006494000","0100501006494000","status-playable;opengl-backend-bug","playable","2022-08-12 23:44:05.000" +"Snowboarding the Next Phase - 0100BE200C34A000","0100BE200C34A000","nvdec;status-playable","playable","2021-02-23 12:56:58.000" +"Skylanders Imaginators","","crash;services;status-boots","boots","2020-05-30 18:49:18.000" +"Slime-san Superslime Edition","","status-playable","playable","2020-05-30 19:08:08.000" +"Skee-Ball","","status-playable","playable","2020-11-16 04:44:07.000" +"Marvel Ultimate Alliance 3: The Black Order - 010060700AC50000","010060700AC50000","status-playable;nvdec;ldn-untested","playable","2024-02-14 19:51:51.000" +"The Elder Scrolls V: Skyrim - 01000A10041EA000","01000A10041EA000","gpu;status-ingame;crash","ingame","2024-07-14 03:21:31.000" +"Risk of Rain","","","","2020-05-31 22:32:45.000" +"Risk of Rain 2 - 010076D00E4BA000","010076D00E4BA000","status-playable;online-broken","playable","2024-03-04 17:01:05.000" +"The Mummy Demastered - 0100496004194000","0100496004194000","status-playable","playable","2021-02-23 13:11:27.000" +"Teslagrad - 01005C8005F34000","01005C8005F34000","status-playable","playable","2021-02-23 14:41:02.000" +"Pushy and Pully in Blockland","","status-playable","playable","2020-07-04 11:44:41.000" +"The Raven Remastered - 010058A00BF1C000","010058A00BF1C000","status-playable;nvdec","playable","2022-08-22 20:02:47.000" +"Reed Remastered","","","","2020-05-31 23:15:15.000" +"The Infectious Madness of Doctor Dekker - 01008940086E0000","01008940086E0000","status-playable;nvdec","playable","2022-08-22 16:45:01.000" +"The Fall","","gpu;status-ingame","ingame","2020-05-31 23:31:16.000" +"The Fall Part 2: Unbound","","status-playable","playable","2021-11-06 02:18:08.000" +"The Red Strings Club","","status-playable","playable","2020-06-01 10:51:18.000" +"Omega Labyrinth Life - 01001D600E51A000","01001D600E51A000","status-playable","playable","2021-02-23 21:03:03.000" +"The Mystery of the Hudson Case","","status-playable","playable","2020-06-01 11:03:36.000" +"Tennis World Tour - 0100092006814000","0100092006814000","status-playable;online-broken","playable","2022-08-22 14:27:10.000" +"The Lost Child - 01008A000A404000","01008A000A404000","nvdec;status-playable","playable","2021-02-23 15:44:20.000" +"Little Misfortune - 0100E7000E826000","0100E7000E826000","nvdec;status-playable","playable","2021-02-23 20:39:44.000" +"The End is Nigh","","status-playable","playable","2020-06-01 11:26:45.000" +"The Caligula Effect: Overdose","","UE4;gpu;status-ingame","ingame","2021-01-04 11:07:50.000" +"The Flame in the Flood: Complete Edition - 0100C38004DCC000","0100C38004DCC000","gpu;status-ingame;nvdec;UE4","ingame","2022-08-22 16:23:49.000" +"The Journey Down: Chapter One - 010052C00B184000","010052C00B184000","nvdec;status-playable","playable","2021-02-24 13:32:41.000" +"The Journey Down: Chapter Two","","nvdec;status-playable","playable","2021-02-24 13:32:13.000" +"The Journey Down: Chapter Three - 01006BC00B188000","01006BC00B188000","nvdec;status-playable","playable","2021-02-24 13:45:27.000" +"The Mooseman - 010033300AC1A000","010033300AC1A000","status-playable","playable","2021-02-24 12:58:57.000" +"The Long Reach - 010052B003A38000","010052B003A38000","nvdec;status-playable","playable","2021-02-24 14:09:48.000" +"Asdivine Kamura","","","","2020-06-01 15:04:50.000" +"THE LAST REMNANT Remastered - 0100AC800D022000","0100AC800D022000","status-playable;nvdec;UE4","playable","2023-02-09 17:24:44.000" +"The Princess Guide - 0100E6A00B960000","0100E6A00B960000","status-playable","playable","2021-02-24 14:23:34.000" +"The LEGO NINJAGO Movie Video Game - 01007FC00206E000","01007FC00206E000","status-nothing;crash","nothing","2022-08-22 19:12:53.000" +"The Next Penelope - 01000CF0084BC000","01000CF0084BC000","status-playable","playable","2021-01-29 16:26:11.000" +"Tennis","","status-playable","playable","2020-06-01 20:50:36.000" +"The King's Bird - 010020500BD98000","010020500BD98000","status-playable","playable","2022-08-22 19:07:46.000" +"The First Tree - 010098800A1E4000","010098800A1E4000","status-playable","playable","2021-02-24 15:51:05.000" +"The Jackbox Party Pack - 0100AE5003EE6000","0100AE5003EE6000","status-playable;online-working","playable","2023-05-28 09:28:40.000" +"The Jackbox Party Pack 2 - 010015D003EE4000","010015D003EE4000","status-playable;online-working","playable","2022-08-22 18:23:40.000" +"The Jackbox Party Pack 3 - 0100CC80013D6000","0100CC80013D6000","slow;status-playable;online-working","playable","2022-08-22 18:41:06.000" +"The Jackbox Party Pack 4 - 0100E1F003EE8000","0100E1F003EE8000","status-playable;online-working","playable","2022-08-22 18:56:34.000" +"The LEGO Movie 2 - Videogame - 0100A4400BE74000","0100A4400BE74000","status-playable","playable","2023-03-01 11:23:37.000" +"The Gardens Between - 0100B13007A6A000","0100B13007A6A000","status-playable","playable","2021-01-29 16:16:53.000" +"The Bug Butcher","","status-playable","playable","2020-06-03 12:02:04.000" +"Funghi Puzzle Funghi Explosion","","status-playable","playable","2020-11-23 14:17:41.000" +"The Escapists: Complete Edition - 01001B700BA7C000","01001B700BA7C000","status-playable","playable","2021-02-24 17:50:31.000" +"The Escapists 2","","nvdec;status-playable","playable","2020-09-24 12:31:31.000" +"TENGAI for Nintendo Switch","","32-bit;status-playable","playable","2020-11-25 19:52:26.000" +"The Book of Unwritten Tales 2 - 010062500BFC0000","010062500BFC0000","status-playable","playable","2021-06-09 14:42:53.000" +"The Bridge","","status-playable","playable","2020-06-03 13:53:26.000" +"Ai: the Somnium Files - 010089B00D09C000","010089B00D09C000","status-playable;nvdec","playable","2022-09-04 14:45:06.000" +"The Coma: Recut","","status-playable","playable","2020-06-03 15:11:23.000" +"Ara Fell: Enhanced Edition","","","","2020-06-03 15:11:30.000" +"The Final Station - 0100CDC00789E000","0100CDC00789E000","status-playable;nvdec","playable","2022-08-22 15:54:39.000" +"The Count Lucanor - 01000850037C0000","01000850037C0000","status-playable;nvdec","playable","2022-08-22 15:26:37.000" +"Testra's Escape","","status-playable","playable","2020-06-03 18:21:14.000" +"The Low Road - 0100BAB00A116000","0100BAB00A116000","status-playable","playable","2021-02-26 13:23:22.000" +"The Adventure Pals - 01008ED0087A4000","01008ED0087A4000","status-playable","playable","2022-08-22 14:48:52.000" +"The Longest Five Minutes - 0100CE1004E72000","0100CE1004E72000","gpu;status-boots","boots","2023-02-19 18:33:11.000" +"The Inner World","","nvdec;status-playable","playable","2020-06-03 21:22:29.000" +"The Inner World - The Last Wind Monk","","nvdec;status-playable","playable","2020-11-16 13:09:40.000" +"The MISSING: J.J. Macfield and the Island of Memories - 0100F1B00B456000","0100F1B00B456000","status-playable","playable","2022-08-22 19:36:18.000" +"Jim Is Moving Out!","","deadlock;status-ingame","ingame","2020-06-03 22:05:19.000" +"The Darkside Detective","","status-playable","playable","2020-06-03 22:16:18.000" +"Tesla vs Lovecraft - 0100FBC007EAE000","0100FBC007EAE000","status-playable","playable","2023-11-21 06:19:36.000" +"The Lion's Song - 0100735004898000","0100735004898000","status-playable","playable","2021-06-09 15:07:16.000" +"Tennis in the Face - 01002970080AA000","01002970080AA000","status-playable","playable","2022-08-22 14:10:54.000" +"The Adventures of Elena Temple","","status-playable","playable","2020-06-03 23:15:35.000" +"The friends of Ringo Ishikawa - 010030700CBBC000","010030700CBBC000","status-playable","playable","2022-08-22 16:33:17.000" +"Redeemer: Enhanced Edition - 01000D100DCF8000","01000D100DCF8000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-09-11 10:20:24.000" +"Alien Escape","","status-playable","playable","2020-06-03 23:43:18.000" +"LEGO DC Super-Villains - 010070D009FEC000","010070D009FEC000","status-playable","playable","2021-05-27 18:10:37.000" +"LEGO Worlds","","crash;slow;status-ingame","ingame","2020-07-17 13:35:39.000" +"LEGO The Incredibles - 0100A01006E00000","0100A01006E00000","status-nothing;crash","nothing","2022-08-03 18:36:59.000" +"LEGO Harry Potter Collection - 010052A00B5D2000","010052A00B5D2000","status-ingame;crash","ingame","2024-01-31 10:28:07.000" +"Reed 2","","","","2020-06-04 16:43:29.000" +"The Men of Yoshiwara: Ohgiya","","","","2020-06-04 17:00:22.000" +"The Rainsdowne Players","","","","2020-06-04 17:16:02.000" +"Tonight we Riot - 0100D400100F8000","0100D400100F8000","status-playable","playable","2021-02-26 15:55:09.000" +"Skelattack - 01001A900F862000","01001A900F862000","status-playable","playable","2021-06-09 15:26:26.000" +"HyperParasite - 010061400ED90000","010061400ED90000","status-playable;nvdec;UE4","playable","2022-09-27 22:05:44.000" +"Climbros","","","","2020-06-04 21:02:21.000" +"Sweet Witches - 0100D6D00EC2C000","0100D6D00EC2C000","status-playable;nvdec","playable","2022-10-20 14:56:37.000" +"Whispering Willows - 010015A00AF1E000","010015A00AF1E000","status-playable;nvdec","playable","2022-09-30 22:33:05.000" +"The Outer Worlds - 0100626011656000","0100626011656000","gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-10-03 17:55:32.000" +"RADIO HAMMER STATION - 01008FA00ACEC000","01008FA00ACEC000","audout;status-playable","playable","2021-02-26 20:20:06.000" +"Light Tracer - 010087700D07C000","010087700D07C000","nvdec;status-playable","playable","2021-05-05 19:15:43.000" +"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE - 0100D4300EBF8000","0100D4300EBF8000","status-nothing;crash;Needs More Attention;Needs Update","nothing","2022-02-09 08:57:44.000" +"The Amazing Shinsengumi: Heroes in Love","","","","2020-06-06 09:27:49.000" +"Snow Battle Princess Sayuki","","","","2020-06-06 11:59:03.000" +"Good Job!","","status-playable","playable","2021-03-02 13:15:55.000" +"Ghost Blade HD - 010063200C588000","010063200C588000","status-playable;online-broken","playable","2022-09-13 21:51:21.000" +"HardCube - 01000C90117FA000","01000C90117FA000","status-playable","playable","2021-05-05 18:33:03.000" +"STAR OCEAN First Departure R - 0100EBF00E702000","0100EBF00E702000","nvdec;status-playable","playable","2021-07-05 19:29:16.000" +"Hair Mower 3D","","","","2020-06-08 02:29:17.000" +"Clubhouse Games: 51 Worldwide Classics - 010047700D540000","010047700D540000","status-playable;ldn-works","playable","2024-05-21 16:12:57.000" +"Torchlight 2","","status-playable","playable","2020-07-27 14:18:37.000" +"Creature in the Well","","UE4;gpu;status-ingame","ingame","2020-11-16 12:52:40.000" +"Panty Party","","","","2020-06-08 14:06:02.000" +"DEADLY PREMONITION Origins - 0100EBE00F22E000","0100EBE00F22E000","32-bit;status-playable;nvdec","playable","2024-03-25 12:47:46.000" +"Pillars of Eternity - 0100D6200E130000","0100D6200E130000","status-playable","playable","2021-02-27 00:24:21.000" +"Jump King","","status-playable","playable","2020-06-09 10:12:39.000" +"Bug Fables","","status-playable","playable","2020-06-09 11:27:00.000" +"DOOM 3 - 010029D00E740000","010029D00E740000","status-menus;crash","menus","2024-08-03 05:25:47.000" +"Raiden V: Director's Cut - 01002B000D97E000","01002B000D97E000","deadlock;status-boots;nvdec","boots","2024-07-12 07:31:46.000" +"Fantasy Strike - 0100944003820000","0100944003820000","online;status-playable","playable","2021-02-27 01:59:18.000" +"Hell Warders - 0100A4600E27A000","0100A4600E27A000","online;status-playable","playable","2021-02-27 02:31:03.000" +"THE NINJA SAVIORS Return of the Warriors - 01001FB00E386000","01001FB00E386000","online;status-playable","playable","2021-03-25 23:48:07.000" +"DOOM (1993) - 010018900DD00000","010018900DD00000","status-menus;nvdec;online-broken","menus","2022-09-06 13:32:19.000" +"DOOM 2 - 0100D4F00DD02000","0100D4F00DD02000","nvdec;online;status-playable","playable","2021-06-03 20:10:01.000" +"Songbird Symphony - 0100E5400BF94000","0100E5400BF94000","status-playable","playable","2021-02-27 02:44:04.000" +"Titans Pinball","","slow;status-playable","playable","2020-06-09 16:53:52.000" +"TERRORHYTHM (TRRT) - 010043700EB68000","010043700EB68000","status-playable","playable","2021-02-27 13:18:14.000" +"Pawarumi - 0100A56006CEE000","0100A56006CEE000","status-playable;online-broken","playable","2022-09-10 15:19:33.000" +"Rise: Race the Future - 01006BA00E652000","01006BA00E652000","status-playable","playable","2021-02-27 13:29:06.000" +"Run the Fan - 010074F00DE4A000","010074F00DE4A000","status-playable","playable","2021-02-27 13:36:28.000" +"Tetsumo Party","","status-playable","playable","2020-06-09 22:39:55.000" +"Snipperclips - 0100704000B3A000","0100704000B3A000","status-playable","playable","2022-12-05 12:44:55.000" +"The Tower of Beatrice - 010047300EBA6000","010047300EBA6000","status-playable","playable","2022-09-12 16:51:42.000" +"FIA European Truck Racing Championship - 01007510040E8000","01007510040E8000","status-playable;nvdec","playable","2022-09-06 17:51:59.000" +"Bear With Me - The Lost Robots - 010020700DE04000","010020700DE04000","nvdec;status-playable","playable","2021-02-27 14:20:10.000" +"Mutant Year Zero: Road to Eden - 0100E6B00DEA4000","0100E6B00DEA4000","status-playable;nvdec;UE4","playable","2022-09-10 13:31:10.000" +"Solo: Islands of the Heart - 010008600D1AC000","010008600D1AC000","gpu;status-ingame;nvdec","ingame","2022-09-11 17:54:43.000" +"1971 PROJECT HELIOS - 0100829010F4A000","0100829010F4A000","status-playable","playable","2021-04-14 13:50:19.000" +"Damsel - 0100BD2009A1C000","0100BD2009A1C000","status-playable","playable","2022-09-06 11:54:39.000" +"The Forbidden Arts - 01007700D4AC000","","status-playable","playable","2021-01-26 16:26:24.000" +"Turok 2: Seeds of Evil - 0100CDC00D8D6000","0100CDC00D8D6000","gpu;status-ingame;vulkan","ingame","2022-09-12 17:50:05.000" +"Tactics V: ""Obsidian Brigade"" - 01007C7006AEE000","01007C7006AEE000","status-playable","playable","2021-02-28 15:09:42.000" +"SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION - 01005DF00DC26000","01005DF00DC26000","UE4;gpu;online;status-ingame","ingame","2021-06-09 16:58:50.000" +"Subdivision Infinity DX - 010001400E474000","010001400E474000","UE4;crash;status-boots","boots","2021-03-03 14:26:46.000" +"#RaceDieRun","","status-playable","playable","2020-07-04 20:23:16.000" +"Wreckin' Ball Adventure - 0100C5D00EDB8000","0100C5D00EDB8000","status-playable;UE4","playable","2022-09-12 18:56:28.000" +"PictoQuest - 010043B00E1CE000","010043B00E1CE000","status-playable","playable","2021-02-27 15:03:16.000" +"VASARA Collection - 0100FE200AF48000","0100FE200AF48000","nvdec;status-playable","playable","2021-02-28 15:26:10.000" +"The Vanishing of Ethan Carter - 0100BCF00E970000","0100BCF00E970000","UE4;status-playable","playable","2021-06-09 17:14:47.000" +"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo - 010068300E08E000","010068300E08E000","gpu;status-ingame;nvdec","ingame","2022-11-20 16:18:45.000" +"Demon's Tier+ - 0100161011458000","0100161011458000","status-playable","playable","2021-06-09 17:25:36.000" +"INSTANT SPORTS - 010099700D750000","010099700D750000","status-playable","playable","2022-09-09 12:59:40.000" +"Friday the 13th: The Game - 010092A00C4B6000","010092A00C4B6000","status-playable;nvdec;online-broken;UE4","playable","2022-09-06 17:33:27.000" +"Arcade Archives VS. GRADIUS - 01004EC00E634000","01004EC00E634000","online;status-playable","playable","2021-04-12 14:53:58.000" +"Desktop Rugby","","","","2020-06-10 23:21:11.000" +"Divinity Original Sin 2 - 010027400CDC6000","010027400CDC6000","services;status-menus;crash;online-broken;regression","menus","2023-08-13 17:20:03.000" +"Grandia HD Collection - 0100E0600BBC8000","0100E0600BBC8000","status-boots;crash","boots","2024-08-19 04:29:48.000" +"Bubsy: Paws on Fire! - 0100DBE00C554000","0100DBE00C554000","slow;status-ingame","ingame","2023-08-24 02:44:51.000" +"River City Girls","","nvdec;status-playable","playable","2020-06-10 23:44:09.000" +"Super Dodgeball Beats","","","","2020-06-10 23:45:22.000" +"RAD - 010024400C516000","010024400C516000","gpu;status-menus;crash;UE4","menus","2021-11-29 02:01:56.000" +"Super Jumpy Ball","","status-playable","playable","2020-07-04 18:40:36.000" +"Headliner: NoviNews - 0100EFE00E1DC000","0100EFE00E1DC000","online;status-playable","playable","2021-03-01 11:36:00.000" +"Atelier Ryza: Ever Darkness & the Secret Hideout - 0100D1900EC80000","0100D1900EC80000","status-playable","playable","2023-10-15 16:36:50.000" +"Ancestors Legacy - 01009EE0111CC000","01009EE0111CC000","status-playable;nvdec;UE4","playable","2022-10-01 12:25:36.000" +"Resolutiion - 0100E7F00FFB8000","0100E7F00FFB8000","crash;status-boots","boots","2021-04-25 21:57:56.000" +"Puzzle Quest: The Legend Returns","","","","2020-06-11 10:05:15.000" +"FAR: Lone Sails - 010022700E7D6000","010022700E7D6000","status-playable","playable","2022-09-06 16:33:05.000" +"Awesome Pea 2 - 0100B7D01147E000","0100B7D01147E000","status-playable","playable","2022-10-01 12:34:19.000" +"Arcade Archives PLUS ALPHA","","audio;status-ingame","ingame","2020-07-04 20:47:55.000" +"Caveblazers - 01001A100C0E8000","01001A100C0E8000","slow;status-ingame","ingame","2021-06-09 17:57:28.000" +"Piofiore no banshou - ricordo","","","","2020-06-11 19:14:52.000" +"Raining Blobs","","","","2020-06-11 19:32:04.000" +"Hyper Jam","","UE4;crash;status-boots","boots","2020-12-15 22:52:11.000" +"The Midnight Sanctuary - 0100DEC00B2BC000","0100DEC00B2BC000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-03 17:17:32.000" +"Indiecalypse","","nvdec;status-playable","playable","2020-06-11 20:19:09.000" +"Liberated - 0100C8000F146000","0100C8000F146000","gpu;status-ingame;nvdec","ingame","2024-07-04 04:58:24.000" +"Nelly Cootalot","","status-playable","playable","2020-06-11 20:55:42.000" +"Corpse Party: Blood Drive - 010016400B1FE000","010016400B1FE000","nvdec;status-playable","playable","2021-03-01 12:44:23.000" +"Professor Lupo and his Horrible Pets","","status-playable","playable","2020-06-12 00:08:45.000" +"Atelier Meruru ~ The Apprentice of Arland ~ DX","","nvdec;status-playable","playable","2020-06-12 00:50:48.000" +"Atelier Totori ~ The Adventurer of Arland ~ DX","","nvdec;status-playable","playable","2020-06-12 01:04:56.000" +"Red Wings - Aces of the Sky","","status-playable","playable","2020-06-12 01:19:53.000" +"L.F.O. - Lost Future Omega - ","","UE4;deadlock;status-boots","boots","2020-10-16 12:16:44.000" +"One Night Stand","","","","2020-06-12 16:34:34.000" +"They Came From the Sky","","status-playable","playable","2020-06-12 16:38:19.000" +"Nurse Love Addiction","","","","2020-06-12 16:48:29.000" +"THE TAKEOVER","","nvdec","","2020-06-12 16:52:28.000" +"Totally Reliable Delivery Service - 0100512010728000","0100512010728000","status-playable;online-broken","playable","2024-09-27 19:32:22.000" +"Nurse Love Syndrome - 010003701002C000","010003701002C000","status-playable","playable","2022-10-13 10:05:22.000" +"Undead and Beyond - 010076F011F54000","010076F011F54000","status-playable;nvdec","playable","2022-10-04 09:11:18.000" +"Borderlands: Game of the Year Edition - 010064800F66A000","010064800F66A000","slow;status-ingame;online-broken;ldn-untested","ingame","2023-07-23 21:10:36.000" +"TurtlePop: Journey to Freedom","","status-playable","playable","2020-06-12 17:45:39.000" +"DAEMON X MACHINA - 0100B6400CA56000","0100B6400CA56000","UE4;audout;ldn-untested;nvdec;status-playable","playable","2021-06-09 19:22:29.000" +"Blasphemous - 0100698009C6E000","0100698009C6E000","nvdec;status-playable","playable","2021-03-01 12:15:31.000" +"The Sinking City - 010028D00BA1A000","010028D00BA1A000","status-playable;nvdec;UE4","playable","2022-09-12 16:41:55.000" +"Battle Supremacy - Evolution - 010099B00E898000","010099B00E898000","gpu;status-boots;nvdec","boots","2022-02-17 09:02:50.000" +"STEINS;GATE: My Darling's Embrace - 0100CB400E9BC000","0100CB400E9BC000","status-playable;nvdec","playable","2022-11-20 16:48:34.000" +"Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition - 01006C300E9F0000","01006C300E9F0000","status-playable;UE4","playable","2021-11-27 12:27:11.000" +"Star Wars™ Pinball - 01006DA00DEAC000","01006DA00DEAC000","status-playable;online-broken","playable","2022-09-11 18:53:31.000" +"Space Cows","","UE4;crash;status-menus","menus","2020-06-15 11:33:20.000" +"Ritual - 0100BD300F0EC000","0100BD300F0EC000","status-playable","playable","2021-03-02 13:51:19.000" +"Snooker 19 - 01008DA00CBBA000","01008DA00CBBA000","status-playable;nvdec;online-broken;UE4","playable","2022-09-11 17:43:22.000" +"Sydney Hunter and the Curse of the Mayan","","status-playable","playable","2020-06-15 12:15:57.000" +"CONTRA: ROGUE CORPS","","crash;nvdec;regression;status-menus","menus","2021-01-07 13:23:35.000" +"Tyd wag vir Niemand - 010073A00C4B2000","010073A00C4B2000","status-playable","playable","2021-03-02 13:39:53.000" +"Detective Dolittle - 010030600E65A000","010030600E65A000","status-playable","playable","2021-03-02 14:03:59.000" +"Rebel Cops - 0100D9B00E22C000","0100D9B00E22C000","status-playable","playable","2022-09-11 10:02:53.000" +"Sayonara Wild Hearts - 010010A00A95E000","010010A00A95E000","status-playable","playable","2023-10-23 03:20:01.000" +"Neon Drive - 010032000EAC6000","010032000EAC6000","status-playable","playable","2022-09-10 13:45:48.000" +"GRID Autosport - 0100DC800A602000","0100DC800A602000","status-playable;nvdec;online-broken;ldn-untested","playable","2023-03-02 20:14:45.000" +"DISTRAINT: Deluxe Edition","","status-playable","playable","2020-06-15 23:42:24.000" +"Jet Kave Adventure - 0100E4900D266000","0100E4900D266000","status-playable;nvdec","playable","2022-09-09 14:50:39.000" +"LEGO Jurassic World - 01001C100E772000","01001C100E772000","status-playable","playable","2021-05-27 17:00:20.000" +"Neo Cab Demo","","crash;status-boots","boots","2020-06-16 00:14:00.000" +"Reel Fishing: Road Trip Adventure - 010007C00E558000","010007C00E558000","status-playable","playable","2021-03-02 16:06:43.000" +"Zombie Army Trilogy","","ldn-untested;online;status-playable","playable","2020-12-16 12:02:28.000" +"Project Warlock","","status-playable","playable","2020-06-16 10:50:41.000" +"Super Toy Cars 2 - 0100C6800D770000","0100C6800D770000","gpu;regression;status-ingame","ingame","2021-03-02 20:15:15.000" +"Call of Cthulhu - 010046000EE40000","010046000EE40000","status-playable;nvdec;UE4","playable","2022-12-18 03:08:30.000" +"Overpass - 01008EA00E816000","01008EA00E816000","status-playable;online-broken;UE4;ldn-untested","playable","2022-10-17 15:29:47.000" +"The Little Acre - 0100A5000D590000","0100A5000D590000","nvdec;status-playable","playable","2021-03-02 20:22:27.000" +"Lost Horizon 2","","nvdec;status-playable","playable","2020-06-16 12:02:12.000" +"Rogue Robots","","status-playable","playable","2020-06-16 12:16:11.000" +"Skelittle: A Giant Party!! - 01008E700F952000","01008E700F952000","status-playable","playable","2021-06-09 19:08:34.000" +"Magazine Mogul - 01004A200E722000","01004A200E722000","status-playable;loader-allocator","playable","2022-10-03 12:05:34.000" +"Dead by Daylight - 01004C400CF96000","01004C400CF96000","status-boots;nvdec;online-broken;UE4","boots","2022-09-13 14:32:13.000" +"Ori and the Blind Forest: Definitive Edition - 010061D00DB74000","010061D00DB74000","status-playable;nvdec;online-broken","playable","2022-09-14 19:58:13.000" +"Northgard - 0100A9E00D97A000","0100A9E00D97A000","status-menus;crash","menus","2022-02-06 02:05:35.000" +"Freedom Finger - 010082B00EE50000","010082B00EE50000","nvdec;status-playable","playable","2021-06-09 19:31:30.000" +"Atelier Shallie: Alchemists of the Dusk Sea DX","","nvdec;status-playable","playable","2020-11-25 20:54:12.000" +"Dragon Quest - 0100EFC00EFB2000","0100EFC00EFB2000","gpu;status-boots","boots","2021-11-09 03:31:32.000" +"Dragon Quest II: Luminaries of the Legendary Line - 010062200EFB4000","010062200EFB4000","status-playable","playable","2022-09-13 16:44:11.000" +"Atelier Ayesha: The Alchemist of Dusk DX - 0100D9D00EE8C000","0100D9D00EE8C000","status-menus;crash;nvdec;Needs Update","menus","2021-11-24 07:29:54.000" +"Dragon Quest III: The Seeds of Salvation - 010015600EFB6000","010015600EFB6000","gpu;status-boots","boots","2021-11-09 03:38:34.000" +"Habroxia","","status-playable","playable","2020-06-16 23:04:42.000" +"Petoons Party - 010044400EEAE000","010044400EEAE000","nvdec;status-playable","playable","2021-03-02 21:07:58.000" +"Fight'N Rage","","status-playable","playable","2020-06-16 23:35:19.000" +"Cyber Protocol","","nvdec;status-playable","playable","2020-09-28 14:47:40.000" +"Barry Bradford's Putt Panic Party","","nvdec;status-playable","playable","2020-06-17 01:08:34.000" +"Potata: Fairy Flower","","nvdec;status-playable","playable","2020-06-17 09:51:34.000" +"Kawaii Deathu Desu","","","","2020-06-17 09:59:15.000" +"The Spectrum Retreat - 010041C00A68C000","010041C00A68C000","status-playable","playable","2022-10-03 18:52:40.000" +"Moero Crystal H - 01004EB0119AC000","01004EB0119AC000","32-bit;status-playable;nvdec;vulkan-backend-bug","playable","2023-07-05 12:04:22.000" +"Modern Combat Blackout - 0100D8700B712000","0100D8700B712000","crash;status-nothing","nothing","2021-03-29 19:47:15.000" +"Forager - 01001D200BCC4000","01001D200BCC4000","status-menus;crash","menus","2021-11-24 07:10:17.000" +"Ultimate Ski Jumping 2020 - 01006B601117E000","01006B601117E000","online;status-playable","playable","2021-03-02 20:54:11.000" +"Strangers of the Power 3","","","","2020-06-17 14:45:52.000" +"Little Triangle","","status-playable","playable","2020-06-17 14:46:26.000" +"Nice Slice","","nvdec;status-playable","playable","2020-06-17 15:13:27.000" +"Project Starship","","","","2020-06-17 15:33:18.000" +"Puyo Puyo Champions","","online;status-playable","playable","2020-06-19 11:35:08.000" +"Shantae and the Seven Sirens","","nvdec;status-playable","playable","2020-06-19 12:23:40.000" +"SYNAPTIC DRIVE","","online;status-playable","playable","2020-09-07 13:44:05.000" +"XCOM 2 Collection - 0100D0B00FB74000","0100D0B00FB74000","gpu;status-ingame;crash","ingame","2022-10-04 09:38:30.000" +"BioShock Remastered - 0100AD10102B2000","0100AD10102B2000","services-horizon;status-boots;crash;Needs Update","boots","2024-06-06 01:08:52.000" +"Burnout Paradise Remastered - 0100DBF01000A000","0100DBF01000A000","nvdec;online;status-playable","playable","2021-06-13 02:54:46.000" +"Adam's Venture: Origins - 0100C0C0040E4000","0100C0C0040E4000","status-playable","playable","2021-03-04 18:43:57.000" +"Invisible, Inc.","","crash;status-nothing","nothing","2021-01-29 16:28:13.000" +"Vektor Wars - 010098400E39E000","010098400E39E000","status-playable;online-broken;vulkan-backend-bug","playable","2022-10-04 09:23:46.000" +"Flux8","","nvdec;status-playable","playable","2020-06-19 20:55:11.000" +"Beyond Enemy Lines: Covert Operations - 010056500CAD8000","010056500CAD8000","status-playable;UE4","playable","2022-10-01 13:11:50.000" +"Genetic Disaster","","status-playable","playable","2020-06-19 21:41:12.000" +"Castle Pals - 0100DA2011F18000","0100DA2011F18000","status-playable","playable","2021-03-04 21:00:33.000" +"BioShock 2 Remastered - 01002620102C6000","01002620102C6000","services;status-nothing","nothing","2022-10-29 14:39:22.000" +"BioShock Infinite: The Complete Edition - 0100D560102C8000","0100D560102C8000","services-horizon;status-nothing;crash","nothing","2024-08-11 21:35:01.000" +"Borderlands 2: Game of the Year Edition - 010096F00FF22000","010096F00FF22000","status-playable","playable","2022-04-22 18:35:07.000" +"Borderlands: The Pre-Sequel Ultimate Edition - 010007400FF24000","010007400FF24000","nvdec;status-playable","playable","2021-06-09 20:17:10.000" +"The Coma 2: Vicious Sisters","","gpu;status-ingame","ingame","2020-06-20 12:51:51.000" +"Roll'd","","status-playable","playable","2020-07-04 20:24:01.000" +"Big Drunk Satanic Massacre - 01002FA00DE72000","01002FA00DE72000","status-playable","playable","2021-03-04 21:28:22.000" +"LUXAR - 0100EC2011A80000","0100EC2011A80000","status-playable","playable","2021-03-04 21:11:57.000" +"OneWayTicket","","UE4;status-playable","playable","2020-06-20 17:20:49.000" +"Radiation City - 0100DA400E07E000","0100DA400E07E000","status-ingame;crash","ingame","2022-09-30 11:15:04.000" +"Arcade Spirits","","status-playable","playable","2020-06-21 11:45:03.000" +"Bring Them Home - 01000BF00BE40000","01000BF00BE40000","UE4;status-playable","playable","2021-04-12 14:14:43.000" +"Fly Punch Boom!","","online;status-playable","playable","2020-06-21 12:06:11.000" +"Xenoblade Chronicles Definitive Edition - 0100FF500E34A000","0100FF500E34A000","status-playable;nvdec","playable","2024-05-04 20:12:41.000" +"A Winter's Daydream","","","","2020-06-22 14:52:38.000" +"DEAD OR SCHOOL - 0100A5000F7AA000","0100A5000F7AA000","status-playable;nvdec","playable","2022-09-06 12:04:09.000" +"Biolab Wars","","","","2020-06-22 15:50:34.000" +"Worldend Syndrome","","status-playable","playable","2021-01-03 14:16:32.000" +"The Tiny Bang Story - 01009B300D76A000","01009B300D76A000","status-playable","playable","2021-03-05 15:39:05.000" +"Neo Cab - 0100EBB00D2F4000","0100EBB00D2F4000","status-playable","playable","2021-04-24 00:27:58.000" +"Sniper Elite 3 Ultimate Edition - 010075A00BA14000","010075A00BA14000","status-playable;ldn-untested","playable","2024-04-18 07:47:49.000" +"Boku to Nurse no Kenshuu Nisshi - 010093700ECEC000","010093700ECEC000","status-playable","playable","2022-11-21 20:38:34.000" +"80 Days","","status-playable","playable","2020-06-22 21:43:01.000" +"Mirror","","","","2020-06-22 21:46:55.000" +"SELFY COLLECTION Dream Stylist","","","","2020-06-22 22:15:25.000" +"G-MODE Archives 4 Beach Volleyball Girl Drop","","","","2020-06-22 22:36:36.000" +"Star Horizon","","","","2020-06-22 23:03:45.000" +"To the Moon","","status-playable","playable","2021-03-20 15:33:38.000" +"Darksiders II Deathinitive Edition - 010071800BA98000","010071800BA98000","gpu;status-ingame;nvdec;online-broken","ingame","2024-06-26 00:37:25.000" +"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated - 010062800D39C000","010062800D39C000","status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug","playable","2023-08-01 19:29:34.000" +"Sleep Tight - 01004AC0081DC000","01004AC0081DC000","gpu;status-ingame;UE4","ingame","2022-08-13 00:17:32.000" +"SUPER ROBOT WARS V","","online;status-playable","playable","2020-06-23 12:56:37.000" +"Ghostbusters: The Video Game Remastered - 010008A00F632000","010008A00F632000","status-playable;nvdec","playable","2021-09-17 07:26:57.000" +"FIFA 20 Legacy Edition - 01005DE00D05C000","01005DE00D05C000","gpu;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-09-13 17:57:20.000" +"VARIABLE BARRICADE NS - 010045C0109F2000","010045C0109F2000","status-playable;nvdec","playable","2022-02-26 15:50:13.000" +"Super Cane Magic ZERO - 0100D9B00DB5E000","0100D9B00DB5E000","status-playable","playable","2022-09-12 15:33:46.000" +"Whipsey and the Lost Atlas","","status-playable","playable","2020-06-23 20:24:14.000" +"FUZE4 - 0100EAD007E98000","0100EAD007E98000","status-playable;vulkan-backend-bug","playable","2022-09-06 19:25:01.000" +"Legend of the Skyfish","","status-playable","playable","2020-06-24 13:04:22.000" +"Grand Brix Shooter","","slow;status-playable","playable","2020-06-24 13:23:54.000" +"Pokémon Café Mix - 010072400E04A000","010072400E04A000","status-playable","playable","2021-08-17 20:00:04.000" +"BULLETSTORM: DUKE OF SWITCH EDITION - 01003DD00D658000","01003DD00D658000","status-playable;nvdec","playable","2022-03-03 08:30:24.000" +"Brunch Club","","status-playable","playable","2020-06-24 13:54:07.000" +"Invisigun Reloaded - 01005F400E644000","01005F400E644000","gpu;online;status-ingame","ingame","2021-06-10 12:13:24.000" +"AER - Memories of Old - 0100A0400DDE0000","0100A0400DDE0000","nvdec;status-playable","playable","2021-03-05 18:43:43.000" +"Farm Mystery - 01000E400ED98000","01000E400ED98000","status-playable;nvdec","playable","2022-09-06 16:46:47.000" +"Ninjala - 0100CCD0073EA000","0100CCD0073EA000","status-boots;online-broken;UE4","boots","2024-07-03 20:04:49.000" +"Shojo Jigoku no Doku musume","","","","2020-06-25 11:25:12.000" +"Jump Rope Challenge - 0100B9C012706000","0100B9C012706000","services;status-boots;crash;Needs Update","boots","2023-02-27 01:24:28.000" +"Knight Squad","","status-playable","playable","2020-08-09 16:54:51.000" +"WARBORN","","status-playable","playable","2020-06-25 12:36:47.000" +"The Bard's Tale ARPG: Remastered and Resnarkled - 0100CD500DDAE000","0100CD500DDAE000","gpu;status-ingame;nvdec;online-working","ingame","2024-07-18 12:52:01.000" +"NAMCOT COLLECTION","","audio;status-playable","playable","2020-06-25 13:35:22.000" +"Code: Realize ~Future Blessings~ - 010002400F408000","010002400F408000","status-playable;nvdec","playable","2023-03-31 16:57:47.000" +"Code: Realize ~Guardian of Rebirth~","","","","2020-06-25 15:09:14.000" +"Polandball: Can Into Space!","","status-playable","playable","2020-06-25 15:13:26.000" +"Ruiner - 01006EC00F2CC000","01006EC00F2CC000","status-playable;UE4","playable","2022-10-03 14:11:33.000" +"Summer in Mara - 0100A130109B2000","0100A130109B2000","nvdec;status-playable","playable","2021-03-06 14:10:38.000" +"Brigandine: The Legend of Runersia - 010011000EA7A000","010011000EA7A000","status-playable","playable","2021-06-20 06:52:25.000" +"Duke Nukem 3D: 20th Anniversary World Tour - 01007EF00CB88000","01007EF00CB88000","32-bit;status-playable;ldn-untested","playable","2022-08-19 22:22:40.000" +"Outbuddies DX - 0100B8900EFA6000","0100B8900EFA6000","gpu;status-ingame","ingame","2022-08-04 22:39:24.000" +"Mr. DRILLER DrillLand","","nvdec;status-playable","playable","2020-07-24 13:56:48.000" +"Fable of Fairy Stones - 0100E3D0103CE000","0100E3D0103CE000","status-playable","playable","2021-05-05 21:04:54.000" +"Destrobots - 01008BB011ED6000","01008BB011ED6000","status-playable","playable","2021-03-06 14:37:05.000" +"Aery - 0100875011D0C000","0100875011D0C000","status-playable","playable","2021-03-07 15:25:51.000" +"TETRA for Nintendo Switch","","status-playable","playable","2020-06-26 20:49:55.000" +"Push the Crate 2 - 0100B60010432000","0100B60010432000","UE4;gpu;nvdec;status-ingame","ingame","2021-06-10 14:20:01.000" +"Railway Empire - 01002EE00DC02000","01002EE00DC02000","status-playable;nvdec","playable","2022-10-03 13:53:50.000" +"Endless Fables: Dark Moor - 01004F3011F92000","01004F3011F92000","gpu;nvdec;status-ingame","ingame","2021-03-07 15:31:03.000" +"Across the Grooves","","status-playable","playable","2020-06-27 12:29:51.000" +"Behold the Kickmen","","status-playable","playable","2020-06-27 12:49:45.000" +"Blood & Guts Bundle","","status-playable","playable","2020-06-27 12:57:35.000" +"Seek Hearts - 010075D0101FA000","010075D0101FA000","status-playable","playable","2022-11-22 15:06:26.000" +"Edna & Harvey: The Breakout - Anniversary Edition - 01004F000B716000","01004F000B716000","status-ingame;crash;nvdec","ingame","2022-08-01 16:59:56.000" +"-KLAUS-","","nvdec;status-playable","playable","2020-06-27 13:27:30.000" +"Gun Gun Pixies","","","","2020-06-27 13:31:06.000" +"Tcheco in the Castle of Lucio","","status-playable","playable","2020-06-27 13:35:43.000" +"My Butler","","status-playable","playable","2020-06-27 13:46:23.000" +"Caladrius Blaze - 01004FD00D66A000","01004FD00D66A000","deadlock;status-nothing;nvdec","nothing","2022-12-07 16:44:37.000" +"Shipped","","status-playable","playable","2020-11-21 14:22:32.000" +"The Alliance Alive HD Remastered - 010045A00E038000","010045A00E038000","nvdec;status-playable","playable","2021-03-07 15:43:45.000" +"Monochrome Order","","","","2020-06-27 14:38:40.000" +"My Lovely Daughter - 010086B00C784000","010086B00C784000","status-playable","playable","2022-11-24 17:25:32.000" +"Caged Garden Cock Robin","","","","2020-06-27 16:47:22.000" +"A Knight's Quest - 01005EF00CFDA000","01005EF00CFDA000","status-playable;UE4","playable","2022-09-12 20:44:20.000" +"The Witcher 3: Wild Hunt - 01003D100E9C6000","01003D100E9C6000","status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug","playable","2024-02-22 12:21:51.000" +"BATTLESTAR GALACTICA Deadlock","","nvdec;status-playable","playable","2020-06-27 17:35:44.000" +"STELLATUM - 0100BC800EDA2000","0100BC800EDA2000","gpu;status-playable","playable","2021-03-07 16:30:23.000" +"Reventure - 0100E2E00EA42000","0100E2E00EA42000","status-playable","playable","2022-09-15 20:07:06.000" +"Killer Queen Black - 0100F2900B3E2000","0100F2900B3E2000","ldn-untested;online;status-playable","playable","2021-04-08 12:46:18.000" +"Puchitto kurasutā","","Need-Update;crash;services;status-menus","menus","2020-07-04 16:44:28.000" +"Silk - 010045500DFE2000","010045500DFE2000","nvdec;status-playable","playable","2021-06-10 15:34:37.000" +"Aldred - Knight of Honor - 01000E000EEF8000","01000E000EEF8000","services;status-playable","playable","2021-11-30 01:49:17.000" +"Tamashii - 010012800EE3E000","010012800EE3E000","status-playable","playable","2021-06-10 15:26:20.000" +"Overlanders - 0100D7F00EC64000","0100D7F00EC64000","status-playable;nvdec;UE4","playable","2022-09-14 20:15:06.000" +"Romancing SaGa 3","","audio;gpu;status-ingame","ingame","2020-06-27 20:26:18.000" +"Hakoniwa Explorer Plus","","slow;status-ingame","ingame","2021-02-19 16:56:19.000" +"Fractured Minds - 01004200099F2000","01004200099F2000","status-playable","playable","2022-09-13 21:21:40.000" +"Strange Telephone","","","","2020-06-27 21:00:43.000" +"Strikey Sisters","","","","2020-06-27 22:20:14.000" +"IxSHE Tell - 0100DEB00F12A000","0100DEB00F12A000","status-playable;nvdec","playable","2022-12-02 18:00:42.000" +"Monster Farm - 0100E9900ED74000","0100E9900ED74000","32-bit;nvdec;status-playable","playable","2021-05-05 19:29:13.000" +"Pachi Pachi On A Roll","","","","2020-06-28 10:28:59.000" +"MISTOVER","","","","2020-06-28 11:23:53.000" +"Little Busters! Converted Edition - 0100943010310000","0100943010310000","status-playable;nvdec","playable","2022-09-29 15:34:56.000" +"Snack World The Dungeon Crawl Gold - 0100F2800D46E000","0100F2800D46E000","gpu;slow;status-ingame;nvdec;audout","ingame","2022-05-01 21:12:44.000" +"Super Kirby Clash - 01003FB00C5A8000","01003FB00C5A8000","status-playable;ldn-works","playable","2024-07-30 18:21:55.000" +"SEGA AGES Thunder Force IV","","","","2020-06-29 12:06:07.000" +"SEGA AGES Puyo Puyo - 01005F600CB0E000","01005F600CB0E000","online;status-playable","playable","2021-05-05 16:09:28.000" +"EAT BEAT DEADSPIKE-san - 0100A9B009678000","0100A9B009678000","audio;status-playable;Needs Update","playable","2022-12-02 19:25:29.000" +"AeternoBlade II - 01009D100EA28000","01009D100EA28000","status-playable;online-broken;UE4;vulkan-backend-bug","playable","2022-09-12 21:11:18.000" +"WRC 8 FIA World Rally Championship - 010087800DCEA000","010087800DCEA000","status-playable;nvdec","playable","2022-09-16 23:03:36.000" +"Yaga - 01006FB00DB02000","01006FB00DB02000","status-playable;nvdec","playable","2022-09-16 23:17:17.000" +"Woven - 01006F100EB16000","01006F100EB16000","nvdec;status-playable","playable","2021-06-02 13:41:08.000" +"Kissed by the Baddest Bidder - 0100F3A00F4CA000","0100F3A00F4CA000","gpu;status-ingame;nvdec","ingame","2022-12-04 20:57:11.000" +"Thief of Thieves - 0100CE700F62A000","0100CE700F62A000","status-nothing;crash;loader-allocator","nothing","2021-11-03 07:16:30.000" +"Squidgies Takeover","","status-playable","playable","2020-07-20 22:28:08.000" +"Balthazar's Dreams - 0100BC400FB64000","0100BC400FB64000","status-playable","playable","2022-09-13 00:13:22.000" +"ZenChess","","status-playable","playable","2020-07-01 22:28:27.000" +"Sparklite - 01007ED00C032000","01007ED00C032000","status-playable","playable","2022-08-06 11:35:41.000" +"Some Distant Memory - 01009EE00E91E000","01009EE00E91E000","status-playable","playable","2022-09-15 21:48:19.000" +"Skybolt Zack - 010041C01014E000","010041C01014E000","status-playable","playable","2021-04-12 18:28:00.000" +"Tactical Mind 2","","status-playable","playable","2020-07-01 23:11:07.000" +"Super Street: Racer - 0100FB400F54E000","0100FB400F54E000","status-playable;UE4","playable","2022-09-16 13:43:14.000" +"TOKYO DARK - REMEMBRANCE - - 01003E500F962000","01003E500F962000","nvdec;status-playable","playable","2021-06-10 20:09:49.000" +"Party Treats","","status-playable","playable","2020-07-02 00:05:00.000" +"Rocket Wars","","status-playable","playable","2020-07-24 14:27:39.000" +"Rawr-Off","","crash;nvdec;status-menus","menus","2020-07-02 00:14:44.000" +"Blair Witch - 01006CC01182C000","01006CC01182C000","status-playable;nvdec;UE4","playable","2022-10-01 14:06:16.000" +"Urban Trial Tricky - 0100A2500EB92000","0100A2500EB92000","status-playable;nvdec;UE4","playable","2022-12-06 13:07:56.000" +"Infliction - 01001CB00EFD6000","01001CB00EFD6000","status-playable;nvdec;UE4","playable","2022-10-02 13:15:55.000" +"Catherine Full Body for Nintendo Switch (JP) - 0100BAE0077E4000","0100BAE0077E4000","Needs Update;gpu;status-ingame","ingame","2021-02-21 18:06:11.000" +"Night Call - 0100F3A0095A6000","0100F3A0095A6000","status-playable;nvdec","playable","2022-10-03 12:57:00.000" +"Grimshade - 01001E200F2F8000","01001E200F2F8000","status-playable","playable","2022-10-02 12:44:20.000" +"A Summer with the Shiba Inu - 01007DD011C4A000","01007DD011C4A000","status-playable","playable","2021-06-10 20:51:16.000" +"Holy Potatoes! What the Hell?!","","status-playable","playable","2020-07-03 10:48:56.000" +"Tower of Time","","gpu;nvdec;status-ingame","ingame","2020-07-03 11:11:12.000" +"Iron Wings - 01005270118D6000","01005270118D6000","slow;status-ingame","ingame","2022-08-07 08:32:57.000" +"Death Come True - 010012B011AB2000","010012B011AB2000","nvdec;status-playable","playable","2021-06-10 22:30:49.000" +"CAN ANDROIDS PRAY:BLUE","","","","2020-07-05 08:14:53.000" +"The Almost Gone","","status-playable","playable","2020-07-05 12:33:07.000" +"Urban Flow","","services;status-playable","playable","2020-07-05 12:51:47.000" +"Digimon Story Cyber Sleuth: Complete Edition - 010014E00DB56000","010014E00DB56000","status-playable;nvdec;opengl","playable","2022-09-13 15:02:37.000" +"Return of the Obra Dinn - 010032E00E6E2000","010032E00E6E2000","status-playable","playable","2022-09-15 19:56:45.000" +"YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD. - 010037D00DBDC000","010037D00DBDC000","nvdec;status-playable","playable","2021-01-26 17:03:52.000" +"Summer Sweetheart - 01004E500DB9E000","01004E500DB9E000","status-playable;nvdec","playable","2022-09-16 12:51:46.000" +"ZikSquare - 010086700EF16000","010086700EF16000","gpu;status-ingame","ingame","2021-11-06 02:02:48.000" +"Planescape: Torment and Icewind Dale: Enhanced Editions - 010030B00C316000","010030B00C316000","cpu;status-boots;32-bit;crash;Needs Update","boots","2022-09-10 03:58:26.000" +"Megaquarium - 010082B00E8B8000","010082B00E8B8000","status-playable","playable","2022-09-14 16:50:00.000" +"Ice Age Scrat's Nutty Adventure - 01004E5007E92000","01004E5007E92000","status-playable;nvdec","playable","2022-09-13 22:22:29.000" +"Aggelos - 010004D00A9C0000","010004D00A9C0000","gpu;status-ingame","ingame","2023-02-19 13:24:23.000" +"Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000","010078D00E8F4000","slow;status-playable;nvdec;UE4","playable","2022-09-16 11:58:38.000" +"Sub Level Zero: Redux - 0100E6400BCE8000","0100E6400BCE8000","status-playable","playable","2022-09-16 12:30:03.000" +"BurgerTime Party!","","slow;status-playable","playable","2020-11-21 14:11:53.000" +"Another Sight","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-03 16:49:59.000" +"Baldur's Gate and Baldur's Gate II: Enhanced Editions - 010010A00DA48000","010010A00DA48000","32-bit;status-playable","playable","2022-09-12 23:52:15.000" +"Kine - 010089000F0E8000","010089000F0E8000","status-playable;UE4","playable","2022-09-14 14:28:37.000" +"Roof Rage - 010088100DD42000","010088100DD42000","status-boots;crash;regression","boots","2023-11-12 03:47:18.000" +"Pig Eat Ball - 01000FD00D5CC000","01000FD00D5CC000","services;status-ingame","ingame","2021-11-30 01:57:45.000" +"DORAEMON STORY OF SEASONS","","nvdec;status-playable","playable","2020-07-13 20:28:11.000" +"Root Letter: Last Answer - 010030A00DA3A000","010030A00DA3A000","status-playable;vulkan-backend-bug","playable","2022-09-17 10:25:57.000" +"Cat Quest II","","status-playable","playable","2020-07-06 23:52:09.000" +"Streets of Rage 4","","nvdec;online;status-playable","playable","2020-07-07 21:21:22.000" +"Deep Space Rush","","status-playable","playable","2020-07-07 23:30:33.000" +"Into the Dead 2 - 01000F700DECE000","01000F700DECE000","status-playable;nvdec","playable","2022-09-14 12:36:14.000" +"Dark Devotion - 010083A00BF6C000","010083A00BF6C000","status-playable;nvdec","playable","2022-08-09 09:41:18.000" +"Anthill - 010054C00D842000","010054C00D842000","services;status-menus;nvdec","menus","2021-11-18 09:25:25.000" +"Skullgirls: 2nd Encore - 010046B00DE62000","010046B00DE62000","status-playable","playable","2022-09-15 21:21:25.000" +"Tokyo School Life - 0100E2E00CB14000","0100E2E00CB14000","status-playable","playable","2022-09-16 20:25:54.000" +"Pixel Gladiator","","status-playable","playable","2020-07-08 02:41:26.000" +"Spirit Hunter: NG","","32-bit;status-playable","playable","2020-12-17 20:38:47.000" +"The Fox Awaits Me","","","","2020-07-08 11:58:56.000" +"Shalnor Legends: Sacred Lands - 0100B4900E008000","0100B4900E008000","status-playable","playable","2021-06-11 14:57:11.000" +"Hero must die. again","","","","2020-07-08 12:35:49.000" +"AeternoBlade I","","nvdec;status-playable","playable","2020-12-14 20:06:48.000" +"Sephirothic Stories - 010059700D4A0000","010059700D4A0000","services;status-menus","menus","2021-11-25 08:52:17.000" +"Ciel Fledge: A Daughter Raising Simulator","","","","2020-07-08 14:57:17.000" +"Olympia Soiree - 0100F9D00C186000","0100F9D00C186000","status-playable","playable","2022-12-04 21:07:12.000" +"Mighty Switch Force! Collection - 010060D00AE36000","010060D00AE36000","status-playable","playable","2022-10-28 20:40:32.000" +"Street Outlaws: The List - 010012400D202000","010012400D202000","nvdec;status-playable","playable","2021-06-11 12:15:32.000" +"TroubleDays","","","","2020-07-09 08:50:12.000" +"Legend of the Tetrarchs","","deadlock;status-ingame","ingame","2020-07-10 07:54:03.000" +"Soul Searching","","status-playable","playable","2020-07-09 18:39:07.000" +"Dusk Diver - 010011C00E636000","010011C00E636000","status-boots;crash;UE4","boots","2021-11-06 09:01:30.000" +"PBA Pro Bowling - 010085700ABC8000","010085700ABC8000","status-playable;nvdec;online-broken;UE4","playable","2022-09-14 23:00:49.000" +"Horror Pinball Bundle - 0100E4200FA82000","0100E4200FA82000","status-menus;crash","menus","2022-09-13 22:15:34.000" +"Farm Expert 2019 for Nintendo Switch","","status-playable","playable","2020-07-09 21:42:57.000" +"Super Monkey Ball: Banana Blitz HD - 0100B2A00E1E0000","0100B2A00E1E0000","status-playable;online-broken","playable","2022-09-16 13:16:25.000" +"Yuri - 0100FC900963E000","0100FC900963E000","status-playable","playable","2021-06-11 13:08:50.000" +"Vampyr - 01000BD00CE64000","01000BD00CE64000","status-playable;nvdec;UE4","playable","2022-09-16 22:15:51.000" +"Spirit Roots","","nvdec;status-playable","playable","2020-07-10 13:33:32.000" +"Resident Evil 5 - 010018100CD46000","010018100CD46000","status-playable;nvdec","playable","2024-02-18 17:15:29.000" +"RESIDENT EVIL 6 - 01002A000CD48000","01002A000CD48000","status-playable;nvdec","playable","2022-09-15 14:31:47.000" +"The Big Journey - 010089600E66A000","010089600E66A000","status-playable","playable","2022-09-16 14:03:08.000" +"Sky Gamblers: Storm Raiders 2 - 010068200E96E000","010068200E96E000","gpu;status-ingame","ingame","2022-09-13 12:24:04.000" +"Door Kickers: Action Squad - 01005ED00CD70000","01005ED00CD70000","status-playable;online-broken;ldn-broken","playable","2022-09-13 16:28:53.000" +"Agony","","UE4;crash;status-boots","boots","2020-07-10 16:21:18.000" +"Remothered: Tormented Fathers - 01001F100E8AE000","01001F100E8AE000","status-playable;nvdec;UE4","playable","2022-10-19 23:26:50.000" +"Biped - 010053B0117F8000","010053B0117F8000","status-playable;nvdec","playable","2022-10-01 13:32:58.000" +"Clash Force - 01005ED0107F4000","01005ED0107F4000","status-playable","playable","2022-10-01 23:45:48.000" +"Truck & Logistics Simulator - 0100F2100AA5C000","0100F2100AA5C000","status-playable","playable","2021-06-11 13:29:08.000" +"Collar X Malice - 010083E00F40E000","010083E00F40E000","status-playable;nvdec","playable","2022-10-02 11:51:56.000" +"TORICKY-S - 01007AF011732000","01007AF011732000","deadlock;status-menus","menus","2021-11-25 08:53:36.000" +"The Wanderer: Frankenstein's Creature","","status-playable","playable","2020-07-11 12:49:51.000" +"PRINCESS MAKER -FAERY TALES COME TRUE-","","","","2020-07-11 16:09:47.000" +"Princess Maker Go!Go! Princess","","","","2020-07-11 16:35:31.000" +"Paradox Soul","","","","2020-07-11 17:20:44.000" +"Diabolic - 0100F73011456000","0100F73011456000","status-playable","playable","2021-06-11 14:45:08.000" +"UBERMOSH:BLACK","","","","2020-07-11 17:42:34.000" +"Journey to the Savage Planet - 01008B60117EC000","01008B60117EC000","status-playable;nvdec;UE4;ldn-untested","playable","2022-10-02 18:48:12.000" +"Viviette - 010037900CB1C000","010037900CB1C000","status-playable","playable","2021-06-11 15:33:40.000" +"the StoryTale - 0100858010DC4000","0100858010DC4000","status-playable","playable","2022-09-03 13:00:25.000" +"Ghost Grab 3000","","status-playable","playable","2020-07-11 18:09:52.000" +"SEGA AGES Shinobi","","","","2020-07-11 18:17:27.000" +"eCrossminton","","status-playable","playable","2020-07-11 18:24:27.000" +"Dangerous Relationship","","","","2020-07-11 18:39:45.000" +"Indie Darling Bundle Vol. 3 - 01004DE011076000","01004DE011076000","status-playable","playable","2022-10-02 13:01:57.000" +"Murder by Numbers","","","","2020-07-11 19:12:19.000" +"BUSTAFELLOWS","","nvdec;status-playable","playable","2020-10-17 20:04:41.000" +"Love Letter from Thief X - 0100D36011AD4000","0100D36011AD4000","gpu;status-ingame;nvdec","ingame","2023-11-14 03:55:31.000" +"Escape Game Fort Boyard","","status-playable","playable","2020-07-12 12:45:43.000" +"SEGA AGES Gain Ground - 01001E600AF08000","01001E600AF08000","online;status-playable","playable","2021-05-05 16:16:27.000" +"The Wardrobe: Even Better Edition - 01008B200FC6C000","01008B200FC6C000","status-playable","playable","2022-09-16 19:14:55.000" +"SEGA AGES Wonder Boy: Monster Land - 01001E700AC60000","01001E700AC60000","online;status-playable","playable","2021-05-05 16:28:25.000" +"SEGA AGES Columns II: A Voyage Through Time","","","","2020-07-12 13:38:50.000" +"Zenith - 0100AAC00E692000","0100AAC00E692000","status-playable","playable","2022-09-17 09:57:02.000" +"Jumanji","","UE4;crash;status-boots","boots","2020-07-12 13:52:25.000" +"SEGA AGES Ichidant-R","","","","2020-07-12 13:54:29.000" +"STURMWIND EX - 0100C5500E7AE000","0100C5500E7AE000","audio;32-bit;status-playable","playable","2022-09-16 12:01:39.000" +"SEGA AGES Alex Kidd in Miracle World - 0100A8900AF04000","0100A8900AF04000","online;status-playable","playable","2021-05-05 16:35:47.000" +"The Lord of the Rings: Adventure Card Game - 010085A00C5E8000","010085A00C5E8000","status-menus;online-broken","menus","2022-09-16 15:19:32.000" +"Breeder Homegrown: Director's Cut","","","","2020-07-12 14:54:02.000" +"StarCrossed","","","","2020-07-12 15:15:22.000" +"The Legend of Dark Witch","","status-playable","playable","2020-07-12 15:18:33.000" +"One-Way Ticket","","","","2020-07-12 15:36:25.000" +"Ships - 01000E800FCB4000","01000E800FCB4000","status-playable","playable","2021-06-11 16:14:37.000" +"My Bewitching Perfume","","","","2020-07-12 15:55:15.000" +"Black and White Bushido","","","","2020-07-12 16:12:16.000" +"REKT","","online;status-playable","playable","2020-09-28 12:33:56.000" +"Nirvana Pilot Yume - 010020901088A000","010020901088A000","status-playable","playable","2022-10-29 11:49:49.000" +"Detective Jinguji Saburo Prism of Eyes","","status-playable","playable","2020-10-02 21:54:41.000" +"Harvest Moon: Mad Dash","","","","2020-07-12 20:37:50.000" +"Worse Than Death - 010037500C4DE000","010037500C4DE000","status-playable","playable","2021-06-11 16:05:40.000" +"Bad Dream: Coma - 01000CB00D094000","01000CB00D094000","deadlock;status-boots","boots","2023-08-03 00:54:18.000" +"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun","","gpu;nvdec;status-ingame","ingame","2020-09-28 17:58:04.000" +"MODEL Debut #nicola","","","","2020-07-13 11:21:44.000" +"Chameleon","","","","2020-07-13 12:06:20.000" +"Gunka o haita neko","","gpu;nvdec;status-ingame","ingame","2020-08-25 12:37:56.000" +"Genso maneju","","","","2020-07-13 14:14:09.000" +"Coffee Talk","","status-playable","playable","2020-08-10 09:48:44.000" +"Labyrinth of the Witch","","status-playable","playable","2020-11-01 14:42:37.000" +"Ritual: Crown of Horns - 010042500FABA000","010042500FABA000","status-playable","playable","2021-01-26 16:01:47.000" +"THE GRISAIA TRILOGY - 01003b300e4aa000","01003b300e4aa000","status-playable","playable","2021-01-31 15:53:59.000" +"Perseverance","","status-playable","playable","2020-07-13 18:48:27.000" +"SEGA AGES Fantasy Zone","","","","2020-07-13 19:33:23.000" +"SEGA AGES Thunder Force AC","","","","2020-07-13 19:50:34.000" +"SEGA AGES Puyo Puyo 2","","","","2020-07-13 20:15:04.000" +"GRISAIA PHANTOM TRIGGER 01&02 - 01009D7011B02000","01009D7011B02000","status-playable;nvdec","playable","2022-12-04 21:16:06.000" +"Paper Dolls Original","","UE4;crash;status-boots","boots","2020-07-13 20:26:21.000" +"STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY - 0100B61009C60000","0100B61009C60000","status-playable","playable","2021-01-26 17:37:28.000" +" SEGA AGES G-LOC AIR BATTLE","","","","2020-07-13 20:42:40.000" +"Think of the Children - 0100F2300A5DA000","0100F2300A5DA000","deadlock;status-menus","menus","2021-11-23 09:04:45.000" +"OTOKOMIZU","","status-playable","playable","2020-07-13 21:00:44.000" +"Puchikon 4 Smile BASIC","","","","2020-07-13 21:18:15.000" +"Neverlast","","slow;status-ingame","ingame","2020-07-13 23:55:19.000" +"MONKEY BARRELS - 0100FBD00ED24000","0100FBD00ED24000","status-playable","playable","2022-09-14 17:28:52.000" +"Ghost Parade","","status-playable","playable","2020-07-14 00:43:54.000" +"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit - 010087800EE5A000","010087800EE5A000","status-boots;crash","boots","2023-02-19 00:51:21.000" +"OMG Zombies! - 01006DB00D970000","01006DB00D970000","32-bit;status-playable","playable","2021-04-12 18:04:45.000" +"Evan's Remains","","","","2020-07-14 05:56:25.000" +"Working Zombies","","","","2020-07-14 06:30:55.000" +"Saboteur II: Avenging Angel","","Needs Update;cpu;crash;status-nothing","nothing","2021-01-26 14:47:37.000" +"Quell Zen - 0100492012378000","0100492012378000","gpu;status-ingame","ingame","2021-06-11 15:59:53.000" +"The Touryst - 0100C3300D8C4000","0100C3300D8C4000","status-ingame;crash","ingame","2023-08-22 01:32:38.000" +"SMASHING THE BATTLE - 01002AA00C974000","01002AA00C974000","status-playable","playable","2021-06-11 15:53:57.000" +"Him & Her","","","","2020-07-14 08:09:57.000" +"Speed Brawl","","slow;status-playable","playable","2020-09-18 22:08:16.000" +"River City Melee Mach!! - 0100B2100767C000","0100B2100767C000","status-playable;online-broken","playable","2022-09-20 20:51:57.000" +"Please The Gods","","","","2020-07-14 10:10:27.000" +"One Person Story","","status-playable","playable","2020-07-14 11:51:02.000" +"Mary Skelter 2 - 01003DE00C95E000","01003DE00C95E000","status-ingame;crash;regression","ingame","2023-09-12 07:37:28.000" +"NecroWorm","","","","2020-07-14 12:15:16.000" +"Juicy Realm - 0100C7600F654000","0100C7600F654000","status-playable","playable","2023-02-21 19:16:20.000" +"Grizzland","","","","2020-07-14 12:28:03.000" +"Garfield Kart Furious Racing - 010061E00E8BE000","010061E00E8BE000","status-playable;ldn-works;loader-allocator","playable","2022-09-13 21:40:25.000" +"Close to the Sun - 0100B7200DAC6000","0100B7200DAC6000","status-boots;crash;nvdec;UE4","boots","2021-11-04 09:19:41.000" +"Xeno Crisis","","","","2020-07-14 12:46:55.000" +"Boreal Blade - 01008E500AFF6000","01008E500AFF6000","gpu;ldn-untested;online;status-ingame","ingame","2021-06-11 15:37:14.000" +"Animus: Harbinger - 0100E5A00FD38000","0100E5A00FD38000","status-playable","playable","2022-09-13 22:09:20.000" +"DEADBOLT","","","","2020-07-14 13:20:01.000" +"Headsnatchers","","UE4;crash;status-menus","menus","2020-07-14 13:29:14.000" +"DOUBLE DRAGON Ⅲ: The Sacred Stones - 01001AD00E49A000","01001AD00E49A000","online;status-playable","playable","2021-06-11 15:41:44.000" +"911 Operator Deluxe Edition","","status-playable","playable","2020-07-14 13:57:44.000" +"Disney Tsum Tsum Festival","","crash;status-menus","menus","2020-07-14 14:05:28.000" +"JUST DANCE 2020 - 0100DDB00DB38000","0100DDB00DB38000","status-playable","playable","2022-01-24 13:31:57.000" +"A Street Cat's Tale","","","","2020-07-14 14:10:13.000" +"Real Heroes: Firefighter - 010048600CC16000","010048600CC16000","status-playable","playable","2022-09-20 18:18:44.000" +"The Savior's Gang - 01002BA00C7CE000","01002BA00C7CE000","gpu;status-ingame;nvdec;UE4","ingame","2022-09-21 12:37:48.000" +"KATANA KAMI: A Way of the Samurai Story - 0100F9800EDFA000","0100F9800EDFA000","slow;status-playable","playable","2022-04-09 10:40:16.000" +"Toon War - 01009EA00E2B8000","01009EA00E2B8000","status-playable","playable","2021-06-11 16:41:53.000" +"2048 CAT","","","","2020-07-14 14:44:29.000" +"Tick Tock: A Tale for Two","","status-menus","menus","2020-07-14 14:49:38.000" +"HexON","","","","2020-07-14 14:54:27.000" +"Ancient Rush 2","","UE4;crash;status-menus","menus","2020-07-14 14:58:47.000" +"Under Night In-Birth Exe:Late[cl-r]","","","","2020-07-14 15:06:07.000" +"Circuits - 01008FA00D686000","01008FA00D686000","status-playable","playable","2022-09-19 11:52:50.000" +"Breathing Fear","","status-playable","playable","2020-07-14 15:12:29.000" +"KAMINAZO Memories from the future","","","","2020-07-14 15:22:45.000" +"Big Pharma","","status-playable","playable","2020-07-14 15:27:30.000" +"Amoeba Battle - Microscopic RTS Action - 010041D00DEB2000","010041D00DEB2000","status-playable","playable","2021-05-06 13:33:41.000" +"Assassin's Creed The Rebel Collection - 010044700DEB0000","010044700DEB0000","gpu;status-ingame","ingame","2024-05-19 07:58:56.000" +"Defenders of Ekron - Definitive Edition - 01008BB00F824000","01008BB00F824000","status-playable","playable","2021-06-11 16:31:03.000" +"Hellmut: The Badass from Hell","","","","2020-07-14 15:56:49.000" +"Alien: Isolation - 010075D00E8BA000","010075D00E8BA000","status-playable;nvdec;vulkan-backend-bug","playable","2022-09-17 11:48:41.000" +"Immortal Planet - 01007BC00E55A000","01007BC00E55A000","status-playable","playable","2022-09-20 13:40:43.000" +"inbento","","","","2020-07-14 16:09:57.000" +"Ding Dong XL","","status-playable","playable","2020-07-14 16:13:19.000" +"KUUKIYOMI 2: Consider It More! - New Era - 010037500F282000","010037500F282000","status-nothing;crash;Needs Update","nothing","2021-11-02 09:34:40.000" +" KUUKIYOMI: Consider It!","","","","2020-07-14 16:21:36.000" +"MADORIS R","","","","2020-07-14 16:34:22.000" +"Kairobotica - 0100D5F00EC52000","0100D5F00EC52000","status-playable","playable","2021-05-06 12:17:56.000" +"Bouncy Bob 2","","status-playable","playable","2020-07-14 16:51:53.000" +"Grab the Bottle","","status-playable","playable","2020-07-14 17:06:41.000" +"Red Bow - 0100CF600FF7A000","0100CF600FF7A000","services;status-ingame","ingame","2021-11-29 03:51:34.000" +"Pocket Mini Golf","","","","2020-07-14 22:13:35.000" +"Must Dash Amigos - 0100F6000EAA8000","0100F6000EAA8000","status-playable","playable","2022-09-20 16:45:56.000" +"EarthNight - 0100A2E00BB0C000","0100A2E00BB0C000","status-playable","playable","2022-09-19 21:02:20.000" +"Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos","","status-playable","playable","2020-07-15 05:06:29.000" +"Bloo Kid 2 - 010055900FADA000","010055900FADA000","status-playable","playable","2024-05-01 17:16:57.000" +"Narcos: Rise of the Cartels - 010072B00BDDE000","010072B00BDDE000","UE4;crash;nvdec;status-boots","boots","2021-03-22 13:18:47.000" +"PUSH THE CRATE - 010016400F07E000","010016400F07E000","status-playable;nvdec;UE4","playable","2022-09-15 13:28:41.000" +"Bee Simulator","","UE4;crash;status-boots","boots","2020-07-15 12:13:13.000" +"Where the Bees Make Honey","","status-playable","playable","2020-07-15 12:40:49.000" +"The Eyes of Ara - 0100B5900DFB2000","0100B5900DFB2000","status-playable","playable","2022-09-16 14:44:06.000" +"The Unicorn Princess - 010064E00ECBC000","010064E00ECBC000","status-playable","playable","2022-09-16 16:20:56.000" +"Sword of the Guardian","","status-playable","playable","2020-07-16 12:24:39.000" +"Waifu Uncovered - 0100B130119D0000","0100B130119D0000","status-ingame;crash","ingame","2023-02-27 01:17:46.000" +"Paper Mario The Origami King - 0100A3900C3E2000","0100A3900C3E2000","audio;status-playable;Needs Update","playable","2024-08-09 18:27:40.000" +"Touhou Spell Bubble","","status-playable","playable","2020-10-18 11:43:43.000" +"Crysis Remastered - 0100E66010ADE000","0100E66010ADE000","status-menus;nvdec","menus","2024-08-13 05:23:24.000" +"Helltaker","","","","2020-07-23 21:16:43.000" +"Shadow Blade Reload - 0100D5500DA94000","0100D5500DA94000","nvdec;status-playable","playable","2021-06-11 18:40:43.000" +"The Bunker - 01001B40086E2000","01001B40086E2000","status-playable;nvdec","playable","2022-09-16 14:24:05.000" +"War Tech Fighters - 010049500DE56000","010049500DE56000","status-playable;nvdec","playable","2022-09-16 22:29:31.000" +"Real Drift Racing","","status-playable","playable","2020-07-25 14:31:31.000" +"Phantaruk - 0100DDD00C0EA000","0100DDD00C0EA000","status-playable","playable","2021-06-11 18:09:54.000" +"Omensight: Definitive Edition","","UE4;crash;nvdec;status-ingame","ingame","2020-07-26 01:45:14.000" +"Phantom Doctrine - 010096F00E5B0000","010096F00E5B0000","status-playable;UE4","playable","2022-09-15 10:51:50.000" +"Monster Bugs Eat People","","status-playable","playable","2020-07-26 02:05:34.000" +"Machi Knights Blood bagos - 0100F2400D434000","0100F2400D434000","status-playable;nvdec;UE4","playable","2022-09-14 15:08:04.000" +"Offroad Racing - 01003CD00E8BC000","01003CD00E8BC000","status-playable;online-broken;UE4","playable","2022-09-14 18:53:22.000" +"Puzzle Book","","status-playable","playable","2020-09-28 13:26:01.000" +"SUSHI REVERSI - 01005AB01119C000","01005AB01119C000","status-playable","playable","2021-06-11 19:26:58.000" +"Strike Force - War on Terror - 010039100DACC000","010039100DACC000","status-menus;crash;Needs Update","menus","2021-11-24 08:08:20.000" +"Mr Blaster - 0100D3300F110000","0100D3300F110000","status-playable","playable","2022-09-14 17:56:24.000" +"Lust for Darkness","","nvdec;status-playable","playable","2020-07-26 12:09:15.000" +"Legrand Legacy: Tale of the Fatebounds","","nvdec;status-playable","playable","2020-07-26 12:27:36.000" +"Hardway Party","","status-playable","playable","2020-07-26 12:35:07.000" +"Earthfall: Alien Horde - 0100DFC00E472000","0100DFC00E472000","status-playable;nvdec;UE4;ldn-untested","playable","2022-09-13 17:32:37.000" +"Collidalot - 010030800BC36000","010030800BC36000","status-playable;nvdec","playable","2022-09-13 14:09:27.000" +"Miniature - The Story Puzzle - 010039200EC66000","010039200EC66000","status-playable;UE4","playable","2022-09-14 17:18:50.000" +"MEANDERS - 0100EEF00CBC0000","0100EEF00CBC0000","UE4;gpu;status-ingame","ingame","2021-06-11 19:19:33.000" +"Isoland","","status-playable","playable","2020-07-26 13:48:16.000" +"Fishing Star World Tour - 0100DEB00ACE2000","0100DEB00ACE2000","status-playable","playable","2022-09-13 19:08:51.000" +"Isoland 2: Ashes of Time","","status-playable","playable","2020-07-26 14:29:05.000" +"Golazo - 010013800F0A4000","010013800F0A4000","status-playable","playable","2022-09-13 21:58:37.000" +"Castle of No Escape 2 - 0100F5500FA0E000","0100F5500FA0E000","status-playable","playable","2022-09-13 13:51:42.000" +"Guess The Word","","status-playable","playable","2020-07-26 21:34:25.000" +"Black Future '88 - 010049000B69E000","010049000B69E000","status-playable;nvdec","playable","2022-09-13 11:24:37.000" +"The Childs Sight - 010066800E9F8000","010066800E9F8000","status-playable","playable","2021-06-11 19:04:56.000" +"Asterix & Obelix XXL3: The Crystal Menhir - 010081500EA1E000","010081500EA1E000","gpu;status-ingame;nvdec;regression","ingame","2022-11-28 14:19:23.000" +"Go! Fish Go!","","status-playable","playable","2020-07-27 13:52:28.000" +"Amnesia: Collection - 01003CC00D0BE000","01003CC00D0BE000","status-playable","playable","2022-10-04 13:36:15.000" +"Ages of Mages: the Last Keeper - 0100E4700E040000","0100E4700E040000","status-playable;vulkan-backend-bug","playable","2022-10-04 11:44:05.000" +"Worlds of Magic: Planar Conquest - 010000301025A000","010000301025A000","status-playable","playable","2021-06-12 12:51:28.000" +"Hang the Kings","","status-playable","playable","2020-07-28 22:56:59.000" +"Super Dungeon Tactics - 010023100B19A000","010023100B19A000","status-playable","playable","2022-10-06 17:40:40.000" +"Five Nights at Freddy's: Sister Location - 01003B200E440000","01003B200E440000","status-playable","playable","2023-10-06 09:00:58.000" +"Ice Cream Surfer","","status-playable","playable","2020-07-29 12:04:07.000" +"Demon's Rise","","status-playable","playable","2020-07-29 12:26:27.000" +"A Ch'ti Bundle - 010096A00CC80000","010096A00CC80000","status-playable;nvdec","playable","2022-10-04 12:48:44.000" +"Overwatch®: Legendary Edition - 0100F8600E21E000","0100F8600E21E000","deadlock;status-boots","boots","2022-09-14 20:22:22.000" +"Zombieland: Double Tap - Road Trip - 01000E5800D32C000","01000E5800D32C00","status-playable","playable","2022-09-17 10:08:45.000" +"Children of Morta - 01002DE00C250000","01002DE00C250000","gpu;status-ingame;nvdec","ingame","2022-09-13 17:48:47.000" +"Story of a Gladiator","","status-playable","playable","2020-07-29 15:08:18.000" +"SD GUNDAM G GENERATION CROSS RAYS - 010055700CEA8000","010055700CEA8000","status-playable;nvdec","playable","2022-09-15 20:58:44.000" +"Neverwinter Nights: Enhanced Edition - 010013700DA4A000","010013700DA4A000","gpu;status-menus;nvdec","menus","2024-09-30 02:59:19.000" +"Race With Ryan","","UE4;gpu;nvdec;slow;status-ingame","ingame","2020-11-16 04:35:33.000" +"StrikeForce Kitty","","nvdec;status-playable","playable","2020-07-29 16:22:15.000" +"Later Daters","","status-playable","playable","2020-07-29 16:35:45.000" +"Pine","","slow;status-ingame","ingame","2020-07-29 16:57:39.000" +"Japanese Rail Sim: Journey to Kyoto","","nvdec;status-playable","playable","2020-07-29 17:14:21.000" +"FoxyLand","","status-playable","playable","2020-07-29 20:55:20.000" +"Five Nights at Freddy's - 0100B6200D8D2000","0100B6200D8D2000","status-playable","playable","2022-09-13 19:26:36.000" +"Five Nights at Freddy's 2 - 01004EB00E43A000","01004EB00E43A000","status-playable","playable","2023-02-08 15:48:24.000" +"Five Nights at Freddy's 3 - 010056100E43C000","010056100E43C000","status-playable","playable","2022-09-13 20:58:07.000" +"Five Nights at Freddy's 4 - 010083800E43E000","010083800E43E000","status-playable","playable","2023-08-19 07:28:03.000" +"Widget Satchel - 0100C7800CA06000","0100C7800CA06000","status-playable","playable","2022-09-16 22:41:07.000" +"Nyan Cat: Lost in Space - 010049F00EC30000","010049F00EC30000","online;status-playable","playable","2021-06-12 13:22:03.000" +"Blacksad: Under the Skin - 010032000EA2C000","010032000EA2C000","status-playable","playable","2022-09-13 11:38:04.000" +"Mini Trains","","status-playable","playable","2020-07-29 23:06:20.000" +"Call of Juarez: Gunslinger - 0100B4700BFC6000","0100B4700BFC6000","gpu;status-ingame;nvdec","ingame","2022-09-17 16:49:46.000" +"Locomotion","","","","2020-07-31 08:17:09.000" +"Headspun","","status-playable","playable","2020-07-31 19:46:47.000" +"Exception - 0100F2D00C7DE000","0100F2D00C7DE000","status-playable;online-broken","playable","2022-09-20 12:47:10.000" +"Dead End Job - 01004C500BD40000","01004C500BD40000","status-playable;nvdec","playable","2022-09-19 12:48:44.000" +"Event Horizon: Space Defense","","status-playable","playable","2020-07-31 20:31:24.000" +"SAMURAI SHODOWN","","UE4;crash;nvdec;status-menus","menus","2020-09-06 02:17:00.000" +"BQM BlockQuest Maker","","online;status-playable","playable","2020-07-31 20:56:50.000" +"Hard West - 0100ECE00D13E000","0100ECE00D13E000","status-nothing;regression","nothing","2022-02-09 07:45:56.000" +"Override: Mech City Brawl - Super Charged Mega Edition - 01008A700F7EE000","01008A700F7EE000","status-playable;nvdec;online-broken;UE4","playable","2022-09-20 17:33:32.000" +"Where Are My Friends? - 0100FDB0092B4000","0100FDB0092B4000","status-playable","playable","2022-09-21 14:39:26.000" +"Final Light, The Prison","","status-playable","playable","2020-07-31 21:48:44.000" +"Citizens of Space - 0100E4200D84E000","0100E4200D84E000","gpu;status-boots","boots","2023-10-22 06:45:44.000" +"Adventures of Bertram Fiddle: Episode 1: A Dreadly Business - 01003B400A00A000","01003B400A00A000","status-playable;nvdec","playable","2022-09-17 11:07:56.000" +"Momonga Pinball Adventures - 01002CC00BC4C000","01002CC00BC4C000","status-playable","playable","2022-09-20 16:00:40.000" +"Suicide Guy: Sleepin' Deeply - 0100DE000C2E4000","0100DE000C2E4000","status-ingame;Needs More Attention","ingame","2022-09-20 23:45:25.000" +"Warhammer 40,000: Mechanicus - 0100C6000EEA8000","0100C6000EEA8000","nvdec;status-playable","playable","2021-06-13 10:46:38.000" +"Caretaker - 0100DA70115E6000","0100DA70115E6000","status-playable","playable","2022-10-04 14:52:24.000" +"Once Upon A Coma","","nvdec;status-playable","playable","2020-08-01 12:09:39.000" +"Welcome to Hanwell","","UE4;crash;status-boots","boots","2020-08-03 11:54:57.000" +"Radical Rabbit Stew","","status-playable","playable","2020-08-03 12:02:56.000" +"We should talk.","","crash;status-nothing","nothing","2020-08-03 12:32:36.000" +"Get 10 Quest","","status-playable","playable","2020-08-03 12:48:39.000" +"Dongo Adventure - 010088B010DD2000","010088B010DD2000","status-playable","playable","2022-10-04 16:22:26.000" +"Singled Out","","online;status-playable","playable","2020-08-03 13:06:18.000" +"Never Breakup - 010039801093A000","010039801093A000","status-playable","playable","2022-10-05 16:12:12.000" +"Ashen - 010027B00E40E000","010027B00E40E000","status-playable;nvdec;online-broken;UE4","playable","2022-09-17 12:19:14.000" +"JDM Racing","","status-playable","playable","2020-08-03 17:02:37.000" +"Farabel","","status-playable","playable","2020-08-03 17:47:28.000" +"Hover - 0100F6800910A000","0100F6800910A000","status-playable;online-broken","playable","2022-09-20 12:54:46.000" +"DragoDino","","gpu;nvdec;status-ingame","ingame","2020-08-03 20:49:16.000" +"Rift Keeper - 0100AC600D898000","0100AC600D898000","status-playable","playable","2022-09-20 19:48:20.000" +"Melbits World - 01000FA010340000","01000FA010340000","status-menus;nvdec;online","menus","2021-11-26 13:51:22.000" +"60 Parsecs! - 010010100FF14000","010010100FF14000","status-playable","playable","2022-09-17 11:01:17.000" +"Warhammer Quest 2","","status-playable","playable","2020-08-04 15:28:03.000" +"Rescue Tale - 01003C400AD42000","01003C400AD42000","status-playable","playable","2022-09-20 18:40:18.000" +"Akuto","","status-playable","playable","2020-08-04 19:43:27.000" +"Demon Pit - 010084600F51C000","010084600F51C000","status-playable;nvdec","playable","2022-09-19 13:35:15.000" +"Regions of Ruin","","status-playable","playable","2020-08-05 11:38:58.000" +"Roombo: First Blood","","nvdec;status-playable","playable","2020-08-05 12:11:37.000" +"Mountain Rescue Simulator - 01009DB00D6E0000","01009DB00D6E0000","status-playable","playable","2022-09-20 16:36:48.000" +"Mad Games Tycoon - 010061E00EB1E000","010061E00EB1E000","status-playable","playable","2022-09-20 14:23:14.000" +"Down to Hell - 0100B6600FE06000","0100B6600FE06000","gpu;status-ingame;nvdec","ingame","2022-09-19 14:01:26.000" +"Funny Bunny Adventures","","status-playable","playable","2020-08-05 13:46:56.000" +"Crazy Zen Mini Golf","","status-playable","playable","2020-08-05 14:00:00.000" +"Drawngeon: Dungeons of Ink and Paper - 0100B7E0102E4000","0100B7E0102E4000","gpu;status-ingame","ingame","2022-09-19 15:41:25.000" +"Farming Simulator 20 - 0100EB600E914000","0100EB600E914000","nvdec;status-playable","playable","2021-06-13 10:52:44.000" +"DreamBall","","UE4;crash;gpu;status-ingame","ingame","2020-08-05 14:45:25.000" +"DEMON'S TILT - 0100BE800E6D8000","0100BE800E6D8000","status-playable","playable","2022-09-19 13:22:46.000" +"Heroland","","status-playable","playable","2020-08-05 15:35:39.000" +"Double Switch - 25th Anniversary Edition - 0100FC000EE10000","0100FC000EE10000","status-playable;nvdec","playable","2022-09-19 13:41:50.000" +"Ultimate Racing 2D","","status-playable","playable","2020-08-05 17:27:09.000" +"THOTH","","status-playable","playable","2020-08-05 18:35:28.000" +"SUPER ROBOT WARS X","","online;status-playable","playable","2020-08-05 19:18:51.000" +"Aborigenus","","status-playable","playable","2020-08-05 19:47:24.000" +"140","","status-playable","playable","2020-08-05 20:01:33.000" +"Goken","","status-playable","playable","2020-08-05 20:22:38.000" +"Maitetsu: Pure Station - 0100D9900F220000","0100D9900F220000","status-playable","playable","2022-09-20 15:12:49.000" +"Super Mega Space Blaster Special Turbo","","online;status-playable","playable","2020-08-06 12:13:25.000" +"Squidlit","","status-playable","playable","2020-08-06 12:38:32.000" +"Stories Untold - 010074400F6A8000","010074400F6A8000","status-playable;nvdec","playable","2022-12-22 01:08:46.000" +"Super Saurio Fly","","nvdec;status-playable","playable","2020-08-06 13:12:14.000" +"Hero Express","","nvdec;status-playable","playable","2020-08-06 13:23:43.000" +"Demolish & Build - 010099D00D1A4000","010099D00D1A4000","status-playable","playable","2021-06-13 15:27:26.000" +"Masquerada: Songs and Shadows - 0100113008262000","0100113008262000","status-playable","playable","2022-09-20 15:18:54.000" +"Dreaming Canvas - 010058B00F3C0000","010058B00F3C0000","UE4;gpu;status-ingame","ingame","2021-06-13 22:50:07.000" +"Time Tenshi","","","","2020-08-06 14:38:37.000" +"FoxyLand 2","","status-playable","playable","2020-08-06 14:41:30.000" +"Nicole - 0100A95012668000","0100A95012668000","status-playable;audout","playable","2022-10-05 16:41:44.000" +"Spiral Memoria -The Summer I Meet Myself-","","","","2020-08-06 15:19:11.000" +"Warhammer 40,000: Space Wolf - 0100E5600D7B2000","0100E5600D7B2000","status-playable;online-broken","playable","2022-09-20 21:11:20.000" +"KukkoroDays - 010022801242C000","010022801242C000","status-menus;crash","menus","2021-11-25 08:52:56.000" +"Shadows 2: Perfidia","","status-playable","playable","2020-08-07 12:43:46.000" +"Murasame No Sword Breaker PV","","","","2020-08-07 12:54:21.000" +"Escape from Chernobyl - 0100FEF00F0AA000","0100FEF00F0AA000","status-boots;crash","boots","2022-09-19 21:36:58.000" +"198X","","status-playable","playable","2020-08-07 13:24:38.000" +"Orn: The Tiny Forest Sprite","","UE4;gpu;status-ingame","ingame","2020-08-07 14:25:30.000" +"Oddworld: Stranger's Wrath HD - 01002EA00ABBA000","01002EA00ABBA000","status-menus;crash;nvdec;loader-allocator","menus","2021-11-23 09:23:21.000" +"Just Glide","","status-playable","playable","2020-08-07 17:38:10.000" +"Ember - 010041A00FEC6000","010041A00FEC6000","status-playable;nvdec","playable","2022-09-19 21:16:11.000" +"Crazy Strike Bowling EX","","UE4;gpu;nvdec;status-ingame","ingame","2020-08-07 18:15:59.000" +"requesting accessibility in the main UI","","","","2020-08-08 00:09:05.000" +"Invisible Fist","","status-playable","playable","2020-08-08 13:25:52.000" +"Nicky: The Home Alone Golf Ball","","status-playable","playable","2020-08-08 13:45:39.000" +"KING OF FIGHTERS R-2","","","","2020-08-09 12:39:55.000" +"The Walking Dead: Season Two","","status-playable","playable","2020-08-09 12:57:06.000" +"Yoru, tomosu","","","","2020-08-09 12:57:28.000" +"Zero Zero Zero Zero","","","","2020-08-09 13:14:58.000" +"Duke of Defense","","","","2020-08-09 13:34:52.000" +"Himno","","","","2020-08-09 13:51:57.000" +"The Walking Dead: A New Frontier - 010056E00B4F4000","010056E00B4F4000","status-playable","playable","2022-09-21 13:40:48.000" +"Cruel Bands Career","","","","2020-08-09 15:00:25.000" +"CARRION","","crash;status-nothing","nothing","2020-08-13 17:15:12.000" +"CODE SHIFTER","","status-playable","playable","2020-08-09 15:20:55.000" +"Ultra Hat Dimension - 01002D4012222000","01002D4012222000","services;audio;status-menus","menus","2021-11-18 09:05:20.000" +"Root Film","","","","2020-08-09 17:47:35.000" +"NAIRI: Tower of Shirin","","nvdec;status-playable","playable","2020-08-09 19:49:12.000" +"Panzer Paladin - 01004AE0108E0000","01004AE0108E0000","status-playable","playable","2021-05-05 18:26:00.000" +"Sinless","","nvdec;status-playable","playable","2020-08-09 20:18:55.000" +"Aviary Attorney: Definitive Edition","","status-playable","playable","2020-08-09 20:32:12.000" +"Lumini","","status-playable","playable","2020-08-09 20:45:09.000" +"Music Racer","","status-playable","playable","2020-08-10 08:51:23.000" +"Curious Cases","","status-playable","playable","2020-08-10 09:30:48.000" +"7th Sector","","nvdec;status-playable","playable","2020-08-10 14:22:14.000" +"Ash of Gods: Redemption","","deadlock;status-nothing","nothing","2020-08-10 18:08:32.000" +"The Turing Test - 0100EA100F516000","0100EA100F516000","status-playable;nvdec","playable","2022-09-21 13:24:07.000" +"The Town of Light - 010058000A576000","010058000A576000","gpu;status-playable","playable","2022-09-21 12:51:34.000" +"The Park","","UE4;crash;gpu;status-ingame","ingame","2020-12-18 12:50:07.000" +"Rogue Legacy","","status-playable","playable","2020-08-10 19:17:28.000" +"Nerved - 01008B0010160000","01008B0010160000","status-playable;UE4","playable","2022-09-20 17:14:03.000" +"Super Korotama - 010000D00F81A000","010000D00F81A000","status-playable","playable","2021-06-06 19:06:22.000" +"Mosaic","","status-playable","playable","2020-08-11 13:07:35.000" +"Pumped BMX Pro - 01009AE00B788000","01009AE00B788000","status-playable;nvdec;online-broken","playable","2022-09-20 17:40:50.000" +"The Dark Crystal","","status-playable","playable","2020-08-11 13:43:41.000" +"Ageless","","","","2020-08-11 13:52:24.000" +"EQQO - 0100E95010058000","0100E95010058000","UE4;nvdec;status-playable","playable","2021-06-13 23:10:51.000" +"LAST FIGHT - 01009E100BDD6000","01009E100BDD6000","status-playable","playable","2022-09-20 13:54:55.000" +"Neverending Nightmares - 0100F79012600000","0100F79012600000","crash;gpu;status-boots","boots","2021-04-24 01:43:35.000" +"Monster Jam Steel Titans - 010095C00F354000","010095C00F354000","status-menus;crash;nvdec;UE4","menus","2021-11-14 09:45:38.000" +"Star Story: The Horizon Escape","","status-playable","playable","2020-08-11 22:31:38.000" +"LOCO-SPORTS - 0100BA000FC9C000","0100BA000FC9C000","status-playable","playable","2022-09-20 14:09:30.000" +"Eclipse: Edge of Light","","status-playable","playable","2020-08-11 23:06:29.000" +"Psikyo Shooting Stars Alpha - 01007A200F2E2000","01007A200F2E2000","32-bit;status-playable","playable","2021-04-13 12:03:43.000" +"Monster Energy Supercross - The Official Videogame 3 - 010097800EA20000","010097800EA20000","UE4;audout;nvdec;online;status-playable","playable","2021-06-14 12:37:54.000" +"Musou Orochi 2 Ultimate","","crash;nvdec;status-boots","boots","2021-04-09 19:39:16.000" +"Alien Cruise","","status-playable","playable","2020-08-12 13:56:05.000" +"KUNAI - 010035A00DF62000","010035A00DF62000","status-playable;nvdec","playable","2022-09-20 13:48:34.000" +"Haunted Dungeons: Hyakki Castle","","status-playable","playable","2020-08-12 14:21:48.000" +"Tangledeep","","crash;status-boots","boots","2021-01-05 04:08:41.000" +"Azuran Tales: Trials","","status-playable","playable","2020-08-12 15:23:07.000" +"LOST ORBIT: Terminal Velocity - 010054600AC74000","010054600AC74000","status-playable","playable","2021-06-14 12:21:12.000" +"Monster Blast - 0100E2D0128E6000","0100E2D0128E6000","gpu;status-ingame","ingame","2023-09-02 20:02:32.000" +"Need a Packet?","","status-playable","playable","2020-08-12 16:09:01.000" +"Downwell - 010093D00C726000","010093D00C726000","status-playable","playable","2021-04-25 20:05:24.000" +"Dex","","nvdec;status-playable","playable","2020-08-12 16:48:12.000" +"Magicolors","","status-playable","playable","2020-08-12 18:39:11.000" +"Jisei: The First Case HD - 010038D011F08000","010038D011F08000","audio;status-playable","playable","2022-10-05 11:43:33.000" +"Mittelborg: City of Mages","","status-playable","playable","2020-08-12 19:58:06.000" +"Psikyo Shooting Stars Bravo - 0100D7400F2E4000","0100D7400F2E4000","32-bit;status-playable","playable","2021-06-14 12:09:07.000" +"STAB STAB STAB!","","","","2020-08-13 16:39:00.000" +"fault - milestone one","","nvdec;status-playable","playable","2021-03-24 10:41:49.000" +"Gerrrms","","status-playable","playable","2020-08-15 11:32:52.000" +"Aircraft Evolution - 0100E95011FDC000","0100E95011FDC000","nvdec;status-playable","playable","2021-06-14 13:30:18.000" +"Creaks","","status-playable","playable","2020-08-15 12:20:52.000" +"ARCADE FUZZ","","status-playable","playable","2020-08-15 12:37:36.000" +"Esports powerful pro yakyuu 2020 - 010073000FE18000","010073000FE18000","gpu;status-ingame;crash;Needs More Attention","ingame","2024-04-29 05:34:14.000" +"Arcade Archives ALPHA MISSION - 01005DD00BE08000","01005DD00BE08000","online;status-playable","playable","2021-04-15 09:20:43.000" +"Arcade Archives ALPINE SKI - 010083800DC70000","010083800DC70000","online;status-playable","playable","2021-04-15 09:28:46.000" +"Arcade Archives ARGUS - 010014F001DE2000","010014F001DE2000","online;status-playable","playable","2021-04-16 06:51:25.000" +"Arcade Archives Armed F - 010014F001DE2000","010014F001DE2000","online;status-playable","playable","2021-04-16 07:00:17.000" +"Arcade Archives ATHENA - 0100BEC00C7A2000","0100BEC00C7A2000","online;status-playable","playable","2021-04-16 07:10:12.000" +"Arcade Archives Atomic Robo-Kid - 0100426001DE4000","0100426001DE4000","online;status-playable","playable","2021-04-16 07:20:29.000" +"Arcade Archives BOMB JACK - 0100192009824000","0100192009824000","online;status-playable","playable","2021-04-16 09:48:26.000" +"Arcade Archives CLU CLU LAND - 0100EDC00E35A000","0100EDC00E35A000","online;status-playable","playable","2021-04-16 10:00:42.000" +"Arcade Archives EXCITEBIKE","","","","2020-08-19 12:08:03.000" +"Arcade Archives FRONT LINE - 0100496006EC8000","0100496006EC8000","online;status-playable","playable","2021-05-05 14:10:49.000" +"Arcade Archives ICE CLIMBER - 01007D200D3FC000","01007D200D3FC000","online;status-playable","playable","2021-05-05 14:18:34.000" +"Arcade Archives IKARI WARRIORS - 010049400C7A8000","010049400C7A8000","online;status-playable","playable","2021-05-05 14:24:46.000" +"Arcade Archives IMAGE FIGHT - 010008300C978000","010008300C978000","online;status-playable","playable","2021-05-05 14:31:21.000" +"Arcade Archives MOON CRESTA - 01000BE001DD8000","01000BE001DD8000","online;status-playable","playable","2021-05-05 14:39:29.000" +"Arcade Archives Ninja Spirit - 01002F300D2C6000","01002F300D2C6000","online;status-playable","playable","2021-05-05 14:45:31.000" +"Arcade Archives POOYAN - 0100A6E00D3F8000","0100A6E00D3F8000","online;status-playable","playable","2021-05-05 17:58:19.000" +"Arcade Archives PSYCHO SOLDIER - 01000D200C7A4000","01000D200C7A4000","online;status-playable","playable","2021-05-05 18:02:19.000" +"Arcade Archives ROAD FIGHTER - 0100FBA00E35C000","0100FBA00E35C000","online;status-playable","playable","2021-05-05 18:09:17.000" +"Arcade Archives ROUTE 16 - 010060000BF7C000","010060000BF7C000","online;status-playable","playable","2021-05-05 18:40:41.000" +"Arcade Archives Shusse Ozumo - 01007A4009834000","01007A4009834000","online;status-playable","playable","2021-05-05 17:52:25.000" +"Arcade Archives Solomon's Key - 01008C900982E000","01008C900982E000","online;status-playable","playable","2021-04-19 16:27:18.000" +"Arcade Archives TERRA FORCE - 0100348001DE6000","0100348001DE6000","online;status-playable","playable","2021-04-16 20:03:27.000" +"Arcade Archives THE NINJA WARRIORS - 0100DC000983A000","0100DC000983A000","online;slow;status-ingame","ingame","2021-04-16 19:54:56.000" +"Arcade Archives TIME PILOT - 0100AF300D2E8000","0100AF300D2E8000","online;status-playable","playable","2021-04-16 19:22:31.000" +"Arcade Archives URBAN CHAMPION - 010042200BE0C000","010042200BE0C000","online;status-playable","playable","2021-04-16 10:20:03.000" +"Arcade Archives WILD WESTERN - 01001B000D8B6000","01001B000D8B6000","online;status-playable","playable","2021-04-16 10:11:36.000" +"Arcade Archives GRADIUS","","","","2020-08-19 13:42:45.000" +"Evergate","","","","2020-08-19 22:28:07.000" +"Naught - 0100103011894000","0100103011894000","UE4;status-playable","playable","2021-04-26 13:31:45.000" +"Vitamin Connection ","","","","2020-08-19 23:18:42.000" +"Rock of Ages 3: Make & Break - 0100A1B00DB36000","0100A1B00DB36000","status-playable;UE4","playable","2022-10-06 12:18:29.000" +"Cubicity - 010040D011D04000","010040D011D04000","status-playable","playable","2021-06-14 14:19:51.000" +"Anima Gate of Memories: The Nameless Chronicles - 01007A400B3F8000","01007A400B3F8000","status-playable","playable","2021-06-14 14:33:06.000" +"Big Dipper - 0100A42011B28000","0100A42011B28000","status-playable","playable","2021-06-14 15:08:19.000" +"Dodo Peak - 01001770115C8000","01001770115C8000","status-playable;nvdec;UE4","playable","2022-10-04 16:13:05.000" +"Cube Creator X - 010001600D1E8000","010001600D1E8000","status-menus;crash","menus","2021-11-25 08:53:28.000" +"Raji An Ancient Epic","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 10:05:25.000" +"Red Siren : Space Defense - 010045400D73E000","010045400D73E000","UE4;status-playable","playable","2021-04-25 21:21:29.000" +"Shanky: The Vegan's Nightmare - 01000C00CC10000","","status-playable","playable","2021-01-26 15:03:55.000" +"Cricket 19 - 010022D00D4F0000","010022D00D4F0000","gpu;status-ingame","ingame","2021-06-14 14:56:07.000" +"Florence","","status-playable","playable","2020-09-05 01:22:30.000" +"Banner of the Maid - 010013C010C5C000","010013C010C5C000","status-playable","playable","2021-06-14 15:23:37.000" +"Super Loop Drive - 01003E300FCAE000","01003E300FCAE000","status-playable;nvdec;UE4","playable","2022-09-22 10:58:05.000" +"Buried Stars","","status-playable","playable","2020-09-07 14:11:58.000" +"FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition - 0100CE4010AAC000","0100CE4010AAC000","status-playable","playable","2023-04-02 23:39:12.000" +"Go All Out - 01000C800FADC000","01000C800FADC000","status-playable;online-broken","playable","2022-09-21 19:16:34.000" +"This Strange Realm of Mine","","status-playable","playable","2020-08-28 12:07:24.000" +"Silent World","","status-playable","playable","2020-08-28 13:45:13.000" +"Alder's Blood","","status-playable","playable","2020-08-28 15:15:23.000" +"Red Death","","status-playable","playable","2020-08-30 13:07:37.000" +"3000th Duel - 0100FB5010D2E000","0100FB5010D2E000","status-playable","playable","2022-09-21 17:12:08.000" +"Rise of Insanity","","status-playable","playable","2020-08-30 15:42:14.000" +"Darksiders Genesis - 0100F2300D4BA000","0100F2300D4BA000","status-playable;nvdec;online-broken;UE4;ldn-broken","playable","2022-09-21 18:06:25.000" +"Space Blaze","","status-playable","playable","2020-08-30 16:18:05.000" +"Two Point Hospital - 010031200E044000","010031200E044000","status-ingame;crash;nvdec","ingame","2022-09-22 11:22:23.000" +"Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate","","status-playable","playable","2020-08-31 13:52:21.000" +"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz","","status-playable","playable","2020-08-31 14:17:42.000" +"Cat Girl Without Salad: Amuse-Bouche - 010076000C86E000","010076000C86E000","status-playable","playable","2022-09-03 13:01:47.000" +"moon","","","","2020-08-31 15:46:23.000" +"Lines XL","","status-playable","playable","2020-08-31 17:48:23.000" +"Knightin'+","","status-playable","playable","2020-08-31 18:18:21.000" +"King Lucas - 0100E6B00FFBA000","0100E6B00FFBA000","status-playable","playable","2022-09-21 19:43:23.000" +"Skulls of the Shogun: Bone-a-fide Edition","","status-playable","playable","2020-08-31 18:58:12.000" +"SEGA AGES SONIC THE HEDGEHOG 2 - 01000D200C614000","01000D200C614000","status-playable","playable","2022-09-21 20:26:35.000" +"Devil May Cry 3 Special Edition - 01007B600D5BC000","01007B600D5BC000","status-playable;nvdec","playable","2024-07-08 12:33:23.000" +"Double Dragon & Kunio-Kun: Retro Brawler Bundle","","status-playable","playable","2020-09-01 12:48:46.000" +"Lost Horizon","","status-playable","playable","2020-09-01 13:41:22.000" +"Unlock the King","","status-playable","playable","2020-09-01 13:58:27.000" +"Vasilis","","status-playable","playable","2020-09-01 15:05:35.000" +"Mathland","","status-playable","playable","2020-09-01 15:40:06.000" +"MEGAMAN ZERO/ZX LEGACY COLLECTION - 010025C00D410000","010025C00D410000","status-playable","playable","2021-06-14 16:17:32.000" +"Afterparty - 0100DB100BBCE000","0100DB100BBCE000","status-playable","playable","2022-09-22 12:23:19.000" +"Tiny Racer - 01005D0011A40000","01005D0011A40000","status-playable","playable","2022-10-07 11:13:03.000" +"Skully - 0100D7B011654000","0100D7B011654000","status-playable;nvdec;UE4","playable","2022-10-06 13:52:59.000" +"Megadimension Neptunia VII","","32-bit;nvdec;status-playable","playable","2020-12-17 20:56:03.000" +"Kingdom Rush - 0100A280121F6000","0100A280121F6000","status-nothing;32-bit;crash;Needs More Attention","nothing","2022-10-05 12:34:00.000" +"Cubers: Arena - 010082E00F1CE000","010082E00F1CE000","status-playable;nvdec;UE4","playable","2022-10-04 16:05:40.000" +"Air Missions: HIND","","status-playable","playable","2020-12-13 10:16:45.000" +"Fairy Tail - 0100CF900FA3E000","0100CF900FA3E000","status-playable;nvdec","playable","2022-10-04 23:00:32.000" +"Sentinels of Freedom - 01009E500D29C000","01009E500D29C000","status-playable","playable","2021-06-14 16:42:19.000" +"SAMURAI SHOWDOWN NEOGEO COLLECTION - 0100F6800F48E000","0100F6800F48E000","nvdec;status-playable","playable","2021-06-14 17:12:56.000" +"Rugby Challenge 4 - 010009B00D33C000","010009B00D33C000","slow;status-playable;online-broken;UE4","playable","2022-10-06 12:45:53.000" +"Neon Abyss - 0100BAB01113A000","0100BAB01113A000","status-playable","playable","2022-10-05 15:59:44.000" +"Max & The Book of Chaos","","status-playable","playable","2020-09-02 12:24:43.000" +"Family Mysteries: Poisonous Promises - 0100034012606000","0100034012606000","audio;status-menus;crash","menus","2021-11-26 12:35:06.000" +"Interrogation: You will be deceived - 010041501005E000","010041501005E000","status-playable","playable","2022-10-05 11:40:10.000" +"Instant Sports Summer Games","","gpu;status-menus","menus","2020-09-02 13:39:28.000" +"AvoCuddle","","status-playable","playable","2020-09-02 14:50:13.000" +"Be-A Walker","","slow;status-ingame","ingame","2020-09-02 15:00:31.000" +"Soccer, Tactics & Glory - 010095C00F9DE000","010095C00F9DE000","gpu;status-ingame","ingame","2022-09-26 17:15:58.000" +"The Great Perhaps","","status-playable","playable","2020-09-02 15:57:04.000" +"Volta-X - 0100A7900E79C000","0100A7900E79C000","status-playable;online-broken","playable","2022-10-07 12:20:51.000" +"Hero Hours Contract","","","","2020-09-03 03:13:22.000" +"Starlit Adventures Golden Stars","","status-playable","playable","2020-11-21 12:14:43.000" +"Superliminal","","status-playable","playable","2020-09-03 13:20:50.000" +"Robozarro","","status-playable","playable","2020-09-03 13:33:40.000" +"QuietMansion2","","status-playable","playable","2020-09-03 14:59:35.000" +"DISTRAINT 2","","status-playable","playable","2020-09-03 16:08:12.000" +"Bloodstained: Curse of the Moon 2","","status-playable","playable","2020-09-04 10:56:27.000" +"Deadly Premonition 2 - 0100BAC011928000","0100BAC011928000","status-playable","playable","2021-06-15 14:12:36.000" +"CrossCode - 01003D90058FC000","01003D90058FC000","status-playable","playable","2024-02-17 10:23:19.000" +"Metro: Last Light Redux - 0100F0400E850000","0100F0400E850000","slow;status-ingame;nvdec;vulkan-backend-bug","ingame","2023-11-01 11:53:52.000" +"Soul Axiom Rebooted","","nvdec;slow;status-ingame","ingame","2020-09-04 12:41:01.000" +"Portal Dogs","","status-playable","playable","2020-09-04 12:55:46.000" +"Bucket Knight","","crash;status-ingame","ingame","2020-09-04 13:11:24.000" +"Arcade Archives LIFE FORCE","","status-playable","playable","2020-09-04 13:26:25.000" +"Stela - 01002DE01043E000","01002DE01043E000","UE4;status-playable","playable","2021-06-15 13:28:34.000" +"7 Billion Humans","","32-bit;status-playable","playable","2020-12-17 21:04:58.000" +"Rack N Ruin","","status-playable","playable","2020-09-04 15:20:26.000" +"Piffle","","","","2020-09-06 00:07:53.000" +"BATTOJUTSU","","","","2020-09-06 00:07:58.000" +"Super Battle Cards","","","","2020-09-06 00:08:01.000" +"Hayfever - 0100EA900FB2C000","0100EA900FB2C000","status-playable;loader-allocator","playable","2022-09-22 17:35:41.000" +"Save Koch - 0100C8300FA90000","0100C8300FA90000","status-playable","playable","2022-09-26 17:06:56.000" +"MY HERO ONE'S JUSTICE 2","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-18 14:08:47.000" +"Deep Diving Adventures - 010026800FA88000","010026800FA88000","status-playable","playable","2022-09-22 16:43:37.000" +"Trials of Mana Demo - 0100E1D00FBDE000","0100E1D00FBDE000","status-playable;nvdec;UE4;demo;vulkan-backend-bug","playable","2022-09-26 18:00:02.000" +"Sky Racket","","status-playable","playable","2020-09-07 12:22:24.000" +"LA-MULANA 1 & 2 - 0100E5D00F4AE000","0100E5D00F4AE000","status-playable","playable","2022-09-22 17:56:36.000" +"Exit the Gungeon - 0100DD30110CC000","0100DD30110CC000","status-playable","playable","2022-09-22 17:04:43.000" +"Super Mario 3D All-Stars - 010049900F546000","010049900F546000","services-horizon;slow;status-ingame;vulkan;amd-vendor-bug","ingame","2024-05-07 02:38:16.000" +"Cupid Parasite - 0100F7E00DFC8000","0100F7E00DFC8000","gpu;status-ingame","ingame","2023-08-21 05:52:36.000" +"Toraware no Paruma Deluxe Edition","","","","2020-09-20 09:34:41.000" +"Uta no☆Prince-sama♪ Repeat Love - 010024200E00A000","010024200E00A000","status-playable;nvdec","playable","2022-12-09 09:21:51.000" +"Clock Zero ~Shuuen no Ichibyou~ Devote - 01008C100C572000","01008C100C572000","status-playable;nvdec","playable","2022-12-04 22:19:14.000" +"Dear Magi - Mahou Shounen Gakka -","","status-playable","playable","2020-11-22 16:45:16.000" +"Reine des Fleurs","","cpu;crash;status-boots","boots","2020-09-27 18:50:39.000" +"Kaeru Batake DE Tsukamaete","","","","2020-09-20 17:06:57.000" +"Koi no Hanasaku Hyakkaen","","32-bit;gpu;nvdec;status-ingame","ingame","2020-10-03 14:17:10.000" +"Brothers Conflict: Precious Baby","","","","2020-09-20 19:13:24.000" +"Dairoku: Ayakashimori - 010061300DF48000","010061300DF48000","status-nothing;Needs Update;loader-allocator","nothing","2021-11-30 05:09:38.000" +"Yunohana Spring! - Mellow Times -","","audio;crash;status-menus","menus","2020-09-27 19:27:40.000" +"Nil Admirari no Tenbin: Irodori Nadeshiko","","","","2020-09-21 15:59:26.000" +"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~","","cpu;crash;status-boots","boots","2020-09-27 19:01:25.000" +"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~","","crash;status-menus","menus","2020-10-04 06:12:08.000" +"Kin'iro no Corda Octave","","status-playable","playable","2020-09-22 13:23:12.000" +"Moujuutsukai to Ouji-sama ~Flower & Snow~","","","","2020-09-22 17:22:03.000" +"Spooky Ghosts Dot Com - 0100C6100D75E000","0100C6100D75E000","status-playable","playable","2021-06-15 15:16:11.000" +"NBA 2K21 - 0100E24011D1E000","0100E24011D1E000","gpu;status-boots","boots","2022-10-05 15:31:51.000" +"Commander Keen in Keen Dreams - 0100C4D00D16A000","0100C4D00D16A000","gpu;status-ingame","ingame","2022-08-04 20:34:20.000" +"Minecraft - 0100D71004694000","0100D71004694000","status-ingame;crash;ldn-broken","ingame","2024-09-29 12:08:59.000" +"PGA TOUR 2K21 - 010053401147C000","010053401147C000","deadlock;status-ingame;nvdec","ingame","2022-10-05 21:53:50.000" +"The Executioner - 0100C2E0129A6000","0100C2E0129A6000","nvdec;status-playable","playable","2021-01-23 00:31:28.000" +"Tamiku - 010008A0128C4000","010008A0128C4000","gpu;status-ingame","ingame","2021-06-15 20:06:55.000" +"Shinobi, Koi Utsutsu","","","","2020-09-23 11:04:27.000" +"Hades - 0100535012974000","0100535012974000","status-playable;vulkan","playable","2022-10-05 10:45:21.000" +"Wolfenstein: Youngblood - 01003BD00CAAE000","01003BD00CAAE000","status-boots;online-broken","boots","2024-07-12 23:49:20.000" +"Taimumari: Complete Edition - 010040A00EA26000","010040A00EA26000","status-playable","playable","2022-12-06 13:34:49.000" +"Sangoku Rensenki ~Otome no Heihou!~","","gpu;nvdec;status-ingame","ingame","2020-10-17 19:13:14.000" +"Norn9 ~Norn + Nonette~ LOFN - 01001A500AD6A000","01001A500AD6A000","status-playable;nvdec;vulkan-backend-bug","playable","2022-12-09 09:29:16.000" +"Disaster Report 4: Summer Memories - 010020700E2A2000","010020700E2A2000","status-playable;nvdec;UE4","playable","2022-09-27 19:41:31.000" +"No Straight Roads - 01009F3011004000","01009F3011004000","status-playable;nvdec","playable","2022-10-05 17:01:38.000" +"Gnosia - 01008EF013A7C000","01008EF013A7C000","status-playable","playable","2021-04-05 17:20:30.000" +"Shin Hayarigami 1 and 2 Pack","","","","2020-09-25 15:56:19.000" +"Gothic Murder: Adventure That Changes Destiny","","deadlock;status-ingame;crash","ingame","2022-09-30 23:16:53.000" +"Grand Theft Auto 3 - 05B1D2ABD3D30000","05B1D2ABD3D30000","services;status-nothing;crash;homebrew","nothing","2023-05-01 22:01:58.000" +"Super Mario 64 - 054507E0B7552000","054507E0B7552000","status-ingame;homebrew","ingame","2024-03-20 16:57:27.000" +"Satsujin Tantei Jack the Ripper - 0100A4700BC98000","0100A4700BC98000","status-playable","playable","2021-06-21 16:32:54.000" +"Yoshiwara Higanbana Kuon no Chigiri","","nvdec;status-playable","playable","2020-10-17 19:14:46.000" +"Katakoi Contrast - collection of branch - - 01007FD00DB20000","01007FD00DB20000","status-playable;nvdec","playable","2022-12-09 09:41:26.000" +"Tlicolity Eyes - twinkle showtime - - 010019500DB1E000","010019500DB1E000","gpu;status-boots","boots","2021-05-29 19:43:44.000" +"Omega Vampire","","nvdec;status-playable","playable","2020-10-17 19:15:35.000" +"Iris School of Wizardry - Vinculum Hearts - - 0100AD300B786000","0100AD300B786000","status-playable","playable","2022-12-05 13:11:15.000" +"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou - 0100EA100DF92000","0100EA100DF92000","32-bit;status-playable;nvdec","playable","2022-12-05 13:19:12.000" +"Undead Darlings ~no cure for love~","","","","2020-09-30 08:34:06.000" +"LEGO Marvel Super Heroes 2 - 0100D3A00409E000","0100D3A00409E000","status-nothing;crash","nothing","2023-03-02 17:12:33.000" +"RollerCoaster Tycoon 3: Complete Edition - 01004900113F8000","01004900113F8000","32-bit;status-playable","playable","2022-10-17 14:18:01.000" +"R.B.I. Baseball 20 - 010061400E7D4000","010061400E7D4000","status-playable","playable","2021-06-15 21:16:29.000" +"BATTLESLOTHS","","status-playable","playable","2020-10-03 08:32:22.000" +"Explosive Jake - 01009B7010B42000","01009B7010B42000","status-boots;crash","boots","2021-11-03 07:48:32.000" +"Dezatopia - 0100AFC00E06A000","0100AFC00E06A000","online;status-playable","playable","2021-06-15 21:06:11.000" +"Wordify","","status-playable","playable","2020-10-03 09:01:07.000" +"Wizards: Wand of Epicosity - 0100C7600E77E000","0100C7600E77E000","status-playable","playable","2022-10-07 12:32:06.000" +"Titan Glory - 0100FE801185E000","0100FE801185E000","status-boots","boots","2022-10-07 11:36:40.000" +"Soccer Pinball - 0100B5000E05C000","0100B5000E05C000","UE4;gpu;status-ingame","ingame","2021-06-15 20:56:51.000" +"Steam Tactics - 0100AE100DAFA000","0100AE100DAFA000","status-playable","playable","2022-10-06 16:53:45.000" +"Trover Saves the Universe","","UE4;crash;status-nothing","nothing","2020-10-03 10:25:27.000" +"112th Seed","","status-playable","playable","2020-10-03 10:32:38.000" +"Spitlings - 010042700E3FC000","010042700E3FC000","status-playable;online-broken","playable","2022-10-06 16:42:39.000" +"Unlock the King 2 - 0100A3E011CB0000","0100A3E011CB0000","status-playable","playable","2021-06-15 20:43:55.000" +"Preventive Strike - 010009300D278000","010009300D278000","status-playable;nvdec","playable","2022-10-06 10:55:51.000" +"Hidden - 01004E800F03C000","01004E800F03C000","slow;status-ingame","ingame","2022-10-05 10:56:53.000" +"Pulstario - 0100861012474000","0100861012474000","status-playable","playable","2022-10-06 11:02:01.000" +"Frontline Zed","","status-playable","playable","2020-10-03 12:55:59.000" +"bayala - the game - 0100194010422000","0100194010422000","status-playable","playable","2022-10-04 14:09:25.000" +"City Bus Driving Simulator - 01005E501284E000","01005E501284E000","status-playable","playable","2021-06-15 21:25:59.000" +"Memory Lane - 010062F011E7C000","010062F011E7C000","status-playable;UE4","playable","2022-10-05 14:31:03.000" +"Minefield - 0100B7500F756000","0100B7500F756000","status-playable","playable","2022-10-05 15:03:29.000" +"Double Kick Heroes","","gpu;status-ingame","ingame","2020-10-03 14:33:59.000" +"Little Shopping","","status-playable","playable","2020-10-03 16:34:35.000" +"Car Quest - 01007BD00AE70000","01007BD00AE70000","deadlock;status-menus","menus","2021-11-18 08:59:18.000" +"RogueCube - 0100C7300C0EC000","0100C7300C0EC000","status-playable","playable","2021-06-16 12:16:42.000" +"Timber Tennis Versus","","online;status-playable","playable","2020-10-03 17:07:15.000" +"Swimsanity! - 010049D00C8B0000","010049D00C8B0000","status-menus;online","menus","2021-11-26 14:27:16.000" +"Dininho Adventures","","status-playable","playable","2020-10-03 17:25:51.000" +"Rhythm of the Gods","","UE4;crash;status-nothing","nothing","2020-10-03 17:39:59.000" +"Rainbows, toilets & unicorns","","nvdec;status-playable","playable","2020-10-03 18:08:18.000" +"Super Mario Bros. 35 - 0100277011F1A000","0100277011F1A000","status-menus;online-broken","menus","2022-08-07 16:27:25.000" +"Bohemian Killing - 0100AD1010CCE000","0100AD1010CCE000","status-playable;vulkan-backend-bug","playable","2022-09-26 22:41:37.000" +"Colorgrid","","status-playable","playable","2020-10-04 01:50:52.000" +"Dogurai","","status-playable","playable","2020-10-04 02:40:16.000" +"The Legend of Heroes: Trails of Cold Steel III Demo - 01009B101044C000","01009B101044C000","demo;nvdec;status-playable","playable","2021-04-23 01:07:32.000" +"Star Wars Jedi Knight: Jedi Academy - 01008CA00FAE8000","01008CA00FAE8000","gpu;status-boots","boots","2021-06-16 12:35:30.000" +"Panzer Dragoon: Remake","","status-playable","playable","2020-10-04 04:03:55.000" +"Blackmoor2 - 0100A0A00E660000","0100A0A00E660000","status-playable;online-broken","playable","2022-09-26 20:26:34.000" +"CHAOS CODE -NEW SIGN OF CATASTROPHE- - 01007600115CE000","01007600115CE000","status-boots;crash;nvdec","boots","2022-04-04 12:24:21.000" +"Saints Row IV - 01008D100D43E000","01008D100D43E000","status-playable;ldn-untested;LAN","playable","2023-12-04 18:33:37.000" +"Troubleshooter","","UE4;crash;status-nothing","nothing","2020-10-04 13:46:50.000" +"Children of Zodiarcs","","status-playable","playable","2020-10-04 14:23:33.000" +"VtM Coteries of New York","","status-playable","playable","2020-10-04 14:55:22.000" +"Grand Guilds - 010038100D436000","010038100D436000","UE4;nvdec;status-playable","playable","2021-04-26 12:49:05.000" +"Best Friend Forever","","","","2020-10-04 15:41:42.000" +"Copperbell","","status-playable","playable","2020-10-04 15:54:36.000" +"Deep Sky Derelicts Definitive Edition - 0100C3E00D68E000","0100C3E00D68E000","status-playable","playable","2022-09-27 11:21:08.000" +"Wanba Warriors","","status-playable","playable","2020-10-04 17:56:22.000" +"Mist Hunter - 010059200CC40000","010059200CC40000","status-playable","playable","2021-06-16 13:58:58.000" +"Shinsekai Into the Depths - 01004EE0104F6000","01004EE0104F6000","status-playable","playable","2022-09-28 14:07:51.000" +"ELEA: Paradigm Shift","","UE4;crash;status-nothing","nothing","2020-10-04 19:07:43.000" +"Harukanaru Toki no Naka De 7","","","","2020-10-05 10:12:41.000" +"Saiaku Naru Saiyaku Ningen ni Sasagu","","","","2020-10-05 10:26:45.000" +"planetarian HD ~the reverie of a little planet~","","status-playable","playable","2020-10-17 20:26:20.000" +"Hypnospace Outlaw - 0100959010466000","0100959010466000","status-ingame;nvdec","ingame","2023-08-02 22:46:49.000" +"Dei Gratia no Rashinban - 010071C00CBA4000","010071C00CBA4000","crash;status-nothing","nothing","2021-07-13 02:25:32.000" +"Rogue Company","","","","2020-10-05 17:52:10.000" +"MX Nitro - 0100161009E5C000","0100161009E5C000","status-playable","playable","2022-09-27 22:34:33.000" +"Wanderjahr TryAgainOrWalkAway","","status-playable","playable","2020-12-16 09:46:04.000" +"Pooplers","","status-playable","playable","2020-11-02 11:52:10.000" +"Beyond Enemy Lines: Essentials - 0100B8F00DACA000","0100B8F00DACA000","status-playable;nvdec;UE4","playable","2022-09-26 19:48:16.000" +"Lust for Darkness: Dawn Edition - 0100F0B00F68E000","0100F0B00F68E000","nvdec;status-playable","playable","2021-06-16 13:47:46.000" +"Nerdook Bundle Vol. 1","","gpu;slow;status-ingame","ingame","2020-10-07 14:27:10.000" +"Indie Puzzle Bundle Vol 1 - 0100A2101107C000","0100A2101107C000","status-playable","playable","2022-09-27 22:23:21.000" +"Wurroom","","status-playable","playable","2020-10-07 22:46:21.000" +"Valley - 0100E0E00B108000","0100E0E00B108000","status-playable;nvdec","playable","2022-09-28 19:27:58.000" +"FIFA 21 Legacy Edition - 01000A001171A000","01000A001171A000","gpu;status-ingame;online-broken","ingame","2023-12-11 22:10:19.000" +"Hotline Miami Collection - 0100D0E00E51E000","0100D0E00E51E000","status-playable;nvdec","playable","2022-09-09 16:41:19.000" +"QuakespasmNX","","status-nothing;crash;homebrew","nothing","2022-07-23 19:28:07.000" +"nxquake2","","services;status-nothing;crash;homebrew","nothing","2022-08-04 23:14:04.000" +"ONE PIECE: PIRATE WARRIORS 4 - 01008FE00E2F6000","01008FE00E2F6000","status-playable;online-broken;ldn-untested","playable","2022-09-27 22:55:46.000" +"The Complex - 01004170113D4000","01004170113D4000","status-playable;nvdec","playable","2022-09-28 14:35:41.000" +"Gigantosaurus The Game - 01002C400E526000","01002C400E526000","status-playable;UE4","playable","2022-09-27 21:20:00.000" +"TY the Tasmanian Tiger","","32-bit;crash;nvdec;status-menus","menus","2020-12-17 21:15:00.000" +"Speaking Simulator","","status-playable","playable","2020-10-08 13:00:39.000" +"Pikmin 3 Deluxe Demo - 01001CB0106F8000","01001CB0106F8000","32-bit;crash;demo;gpu;status-ingame","ingame","2021-06-16 18:38:07.000" +"Rascal Fight","","status-playable","playable","2020-10-08 13:23:30.000" +"Rain City","","status-playable","playable","2020-10-08 16:59:03.000" +"Fury Unleashed Demo","","status-playable","playable","2020-10-08 20:09:21.000" +"Bridge 3","","status-playable","playable","2020-10-08 20:47:24.000" +"RMX Real Motocross","","status-playable","playable","2020-10-08 21:06:15.000" +"Birthday of Midnight","","","","2020-10-09 09:43:24.000" +"WARSAW","","","","2020-10-09 10:31:40.000" +"Candy Raid: The Factory","","","","2020-10-09 10:43:39.000" +"World for Two","","","","2020-10-09 12:37:07.000" +"Voxel Pirates - 0100AFA011068000","0100AFA011068000","status-playable","playable","2022-09-28 22:55:02.000" +"Voxel Galaxy - 0100B1E0100A4000","0100B1E0100A4000","status-playable","playable","2022-09-28 22:45:02.000" +"Journey of the Broken Circle","","","","2020-10-09 13:24:52.000" +"Daggerhood","","","","2020-10-09 13:54:02.000" +"Flipon","","","","2020-10-09 14:23:40.000" +"Nevaeh - 0100C20012A54000","0100C20012A54000","gpu;nvdec;status-ingame","ingame","2021-06-16 17:29:03.000" +"Bookbound Brigade","","status-playable","playable","2020-10-09 14:30:29.000" +"Aery - Sky Castle - 010018E012914000","010018E012914000","status-playable","playable","2022-10-21 17:58:49.000" +"Nickelodeon Kart Racers 2 Grand Prix","","","","2020-10-09 14:54:17.000" +"Issho ni Asobo Koupen chan","","","","2020-10-09 14:57:27.000" +"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o - 010016C011AAA000","010016C011AAA000","status-playable","playable","2023-04-26 09:51:08.000" +"Kono Subarashii Sekai ni Shukufuku wo! Kurenai Densetsu","","","","2020-10-09 15:06:00.000" +"Hide & Dance!","","","","2020-10-09 15:10:06.000" +"Pro Yakyuu Famista 2020","","","","2020-10-09 15:21:25.000" +"METAL MAX Xeno Reborn - 0100E8F00F6BE000","0100E8F00F6BE000","status-playable","playable","2022-12-05 15:33:53.000" +"Ikenfell - 010040900AF46000","010040900AF46000","status-playable","playable","2021-06-16 17:18:44.000" +"Depixtion","","status-playable","playable","2020-10-10 18:52:37.000" +"GREEN The Life Algorithm - 0100DFE00F002000","0100DFE00F002000","status-playable","playable","2022-09-27 21:37:13.000" +"Served! A gourmet race - 0100B2C00E4DA000","0100B2C00E4DA000","status-playable;nvdec","playable","2022-09-28 12:46:00.000" +"OTTTD","","slow;status-ingame","ingame","2020-10-10 19:31:07.000" +"Metamorphosis - 010055200E87E000","010055200E87E000","UE4;audout;gpu;nvdec;status-ingame","ingame","2021-06-16 16:18:11.000" +"Zero Strain - 01004B001058C000","01004B001058C000","services;status-menus;UE4","menus","2021-11-10 07:48:32.000" +"Time Carnage - 01004C500B698000","01004C500B698000","status-playable","playable","2021-06-16 17:57:28.000" +"Spiritfarer - 0100BD400DC52000","0100BD400DC52000","gpu;status-ingame","ingame","2022-10-06 16:31:38.000" +"Street Power Soccer","","UE4;crash;status-boots","boots","2020-11-21 12:28:57.000" +"OZMAFIA!! -vivace-","","","","2020-10-12 10:24:45.000" +"Road to Guangdong","","slow;status-playable","playable","2020-10-12 12:15:32.000" +"Prehistoric Dude","","gpu;status-ingame","ingame","2020-10-12 12:38:48.000" +"MIND Path to Thalamus - 0100F5700C9A8000","0100F5700C9A8000","UE4;status-playable","playable","2021-06-16 17:37:25.000" +"Manifold Garden","","status-playable","playable","2020-10-13 20:27:13.000" +"INMOST - 0100F1401161E000","0100F1401161E000","status-playable","playable","2022-10-05 11:27:40.000" +"G.I. Joe Operation Blackout","","UE4;crash;status-boots","boots","2020-11-21 12:37:44.000" +"Petal Crash","","","","2020-10-14 07:58:02.000" +"Helheim Hassle","","status-playable","playable","2020-10-14 11:38:36.000" +"FuzzBall - 010067600F1A0000","010067600F1A0000","crash;status-nothing","nothing","2021-03-29 20:13:21.000" +"Fight Crab - 01006980127F0000","01006980127F0000","status-playable;online-broken;ldn-untested","playable","2022-10-05 10:24:04.000" +"Faeria - 010069100DB08000","010069100DB08000","status-menus;nvdec;online-broken","menus","2022-10-04 16:44:41.000" +"Escape from Tethys","","status-playable","playable","2020-10-14 22:38:25.000" +"Chinese Parents - 010046F012A04000","010046F012A04000","status-playable","playable","2021-04-08 12:56:41.000" +"Boomerang Fu - 010081A00EE62000","010081A00EE62000","status-playable","playable","2024-07-28 01:12:41.000" +"Bite the Bullet","","status-playable","playable","2020-10-14 23:10:11.000" +"Pretty Princess Magical Coordinate","","status-playable","playable","2020-10-15 11:43:41.000" +"A Short Hike","","status-playable","playable","2020-10-15 00:19:58.000" +"HYPERCHARGE: Unboxed - 0100A8B00F0B4000","0100A8B00F0B4000","status-playable;nvdec;online-broken;UE4;ldn-untested","playable","2022-09-27 21:52:39.000" +"Anima: Gate of Memories - 0100706005B6A000","0100706005B6A000","nvdec;status-playable","playable","2021-06-16 18:13:18.000" +"Perky Little Things - 01005CD012DC0000","01005CD012DC0000","status-boots;crash;vulkan","boots","2024-08-04 07:22:46.000" +"Save Your Nuts - 010091000F72C000","010091000F72C000","status-playable;nvdec;online-broken;UE4","playable","2022-09-27 23:12:02.000" +"Unknown Fate","","slow;status-ingame","ingame","2020-10-15 12:27:42.000" +"Picross S4","","status-playable","playable","2020-10-15 12:33:46.000" +"The Station - 010007F00AF56000","010007F00AF56000","status-playable","playable","2022-09-28 18:15:27.000" +"Liege Dragon - 010041F0128AE000","010041F0128AE000","status-playable","playable","2022-10-12 10:27:03.000" +"G-MODE Archives 06 The strongest ever Julia Miyamoto","","status-playable","playable","2020-10-15 13:06:26.000" +"Prinny: Can I Really Be the Hero? - 01007A0011878000","01007A0011878000","32-bit;status-playable;nvdec","playable","2023-10-22 09:25:25.000" +"Prinny 2: Dawn of Operation Panties, Dood! - 01008FA01187A000","01008FA01187A000","32-bit;status-playable","playable","2022-10-13 12:42:58.000" +"Convoy","","status-playable","playable","2020-10-15 14:43:50.000" +"Fight of Animals","","online;status-playable","playable","2020-10-15 15:08:28.000" +"Strawberry Vinegar - 0100D7E011C64000","0100D7E011C64000","status-playable;nvdec","playable","2022-12-05 16:25:40.000" +"Inside Grass: A little adventure","","status-playable","playable","2020-10-15 15:26:27.000" +"Battle Princess Madelyn Royal Edition - 0100A7500DF64000","0100A7500DF64000","status-playable","playable","2022-09-26 19:14:49.000" +"A HERO AND A GARDEN - 01009E1011EC4000","01009E1011EC4000","status-playable","playable","2022-12-05 16:37:47.000" +"Trials of Mana - 0100D7800E9E0000","0100D7800E9E0000","status-playable;UE4","playable","2022-09-30 21:50:37.000" +"Ultimate Fishing Simulator - 010048901295C000","010048901295C000","status-playable","playable","2021-06-16 18:38:23.000" +"Struggling","","status-playable","playable","2020-10-15 20:37:03.000" +"Samurai Jack Battle Through Time - 01006C600E46E000","01006C600E46E000","status-playable;nvdec;UE4","playable","2022-10-06 13:33:59.000" +"House Flipper - 0100CAE00EB02000","0100CAE00EB02000","status-playable","playable","2021-06-16 18:28:32.000" +"Aokana - Four Rhythms Across the Blue - 0100990011866000","0100990011866000","status-playable","playable","2022-10-04 13:50:26.000" +"NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO - 010084D00CF5E000","010084D00CF5E000","status-playable","playable","2024-06-29 13:04:22.000" +"Where Angels Cry - 010027D011C9C000","010027D011C9C000","gpu;status-ingame;nvdec","ingame","2022-09-30 22:24:47.000" +"The Copper Canyon Dixie Dash - 01000F20102AC000","01000F20102AC000","status-playable;UE4","playable","2022-09-29 11:42:29.000" +"Cloudpunk","","","","2020-10-15 23:03:55.000" +"MotoGP 20 - 01001FA00FBBC000","01001FA00FBBC000","status-playable;ldn-untested","playable","2022-09-29 17:58:01.000" +"Little Town Hero","","status-playable","playable","2020-10-15 23:28:48.000" +"Broken Lines","","status-playable","playable","2020-10-16 00:01:37.000" +"Crown Trick - 0100059012BAE000","0100059012BAE000","status-playable","playable","2021-06-16 19:36:29.000" +"Archaica: Path of LightInd","","crash;status-nothing","nothing","2020-10-16 13:22:26.000" +"Indivisible - 01001D3003FDE000","01001D3003FDE000","status-playable;nvdec","playable","2022-09-29 15:20:57.000" +"Thy Sword - 01000AC011588000","01000AC011588000","status-ingame;crash","ingame","2022-09-30 16:43:14.000" +"Spirit of the North - 01005E101122E000","01005E101122E000","status-playable;UE4","playable","2022-09-30 11:40:47.000" +"Megabyte Punch","","status-playable","playable","2020-10-16 14:07:18.000" +"Book of Demons - 01007A200F452000","01007A200F452000","status-playable","playable","2022-09-29 12:03:43.000" +"80's OVERDRIVE","","status-playable","playable","2020-10-16 14:33:32.000" +"My Universe My Baby","","","","2020-10-17 14:04:01.000" +"Mario Kart Live: Home Circuit - 0100ED100BA3A000","0100ED100BA3A000","services;status-nothing;crash;Needs More Attention","nothing","2022-12-07 22:36:52.000" +"STONE - 010070D00F640000","010070D00F640000","status-playable;UE4","playable","2022-09-30 11:53:32.000" +"Newt One","","status-playable","playable","2020-10-17 21:21:48.000" +"Zoids Wild Blast Unleashed - 010069C0123D8000","010069C0123D8000","status-playable;nvdec","playable","2022-10-15 11:26:59.000" +"KINGDOM HEARTS Melody of Memory DEMO","","","","2020-10-18 14:57:30.000" +"Escape First","","status-playable","playable","2020-10-20 22:46:53.000" +"If My Heart Had Wings - 01001AC00ED72000","01001AC00ED72000","status-playable","playable","2022-09-29 14:54:57.000" +"Felix the Reaper","","nvdec;status-playable","playable","2020-10-20 23:43:03.000" +"War-Torn Dreams","","crash;status-nothing","nothing","2020-10-21 11:36:16.000" +"TT Isle of Man 2 - 010000400F582000","010000400F582000","gpu;status-ingame;nvdec;online-broken","ingame","2022-09-30 22:13:05.000" +"Kholat - 0100F680116A2000","0100F680116A2000","UE4;nvdec;status-playable","playable","2021-06-17 11:52:48.000" +"Dungeon of the Endless - 010034300F0E2000","010034300F0E2000","nvdec;status-playable","playable","2021-05-27 19:16:26.000" +"Gravity Rider Zero - 01002C2011828000","01002C2011828000","gpu;status-ingame;vulkan-backend-bug","ingame","2022-09-29 13:56:13.000" +"Oddworld: Munch's Oddysee - 0100BB500EE3C000","0100BB500EE3C000","gpu;nvdec;status-ingame","ingame","2021-06-17 12:11:50.000" +"Five Nights at Freddy's: Help Wanted - 0100F7901118C000","0100F7901118C000","status-playable;UE4","playable","2022-09-29 12:40:09.000" +"Gates of Hell","","slow;status-playable","playable","2020-10-22 12:44:26.000" +"Concept Destruction - 0100971011224000","0100971011224000","status-playable","playable","2022-09-29 12:28:56.000" +"Zenge","","status-playable","playable","2020-10-22 13:23:57.000" +"Water Balloon Mania","","status-playable","playable","2020-10-23 20:20:59.000" +"The Persistence - 010050101127C000","010050101127C000","nvdec;status-playable","playable","2021-06-06 19:15:40.000" +"The House of Da Vinci 2","","status-playable","playable","2020-10-23 20:47:17.000" +"The Experiment: Escape Room - 01006050114D4000","01006050114D4000","gpu;status-ingame","ingame","2022-09-30 13:20:35.000" +"Telling Lies","","status-playable","playable","2020-10-23 21:14:51.000" +"She Sees Red - 01000320110C2000","01000320110C2000","status-playable;nvdec","playable","2022-09-30 11:30:15.000" +"Golf With Your Friends - 01006FB00EBE0000","01006FB00EBE0000","status-playable;online-broken","playable","2022-09-29 12:55:11.000" +"Island Saver","","nvdec;status-playable","playable","2020-10-23 22:07:02.000" +"Devil May Cry 2 - 01007CF00D5BA000","01007CF00D5BA000","status-playable;nvdec","playable","2023-01-24 23:03:20.000" +"The Otterman Empire - 0100B0101265C000","0100B0101265C000","UE4;gpu;status-ingame","ingame","2021-06-17 12:27:15.000" +"SaGa SCARLET GRACE: AMBITIONS - 010003A00D0B4000","010003A00D0B4000","status-playable","playable","2022-10-06 13:20:31.000" +"REZ PLZ","","status-playable","playable","2020-10-24 13:26:12.000" +"Bossgard - 010076F00EBE4000","010076F00EBE4000","status-playable;online-broken","playable","2022-10-04 14:21:13.000" +"1993 Shenandoah","","status-playable","playable","2020-10-24 13:55:42.000" +"Ori and the Will of the Wisps - 01008DD013200000","01008DD013200000","status-playable","playable","2023-03-07 00:47:13.000" +"WWE 2K Battlegrounds - 010081700EDF4000","010081700EDF4000","status-playable;nvdec;online-broken;UE4","playable","2022-10-07 12:44:40.000" +"Shaolin vs Wutang : Eastern Heroes - 01003AB01062C000","01003AB01062C000","deadlock;status-nothing","nothing","2021-03-29 20:38:54.000" +"Mini Motor Racing X - 01003560119A6000","01003560119A6000","status-playable","playable","2021-04-13 17:54:49.000" +"Secret Files 3","","nvdec;status-playable","playable","2020-10-24 15:32:39.000" +"Othercide - 0100E5900F49A000","0100E5900F49A000","status-playable;nvdec","playable","2022-10-05 19:04:38.000" +"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai","","status-playable","playable","2020-11-12 00:11:50.000" +"Party Hard 2 - 010022801217E000","010022801217E000","status-playable;nvdec","playable","2022-10-05 20:31:48.000" +"Paradise Killer - 01007FB010DC8000","01007FB010DC8000","status-playable;UE4","playable","2022-10-05 19:33:05.000" +"MX vs ATV All Out - 0100218011E7E000","0100218011E7E000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-25 19:51:46.000" +"CastleStorm 2","","UE4;crash;nvdec;status-boots","boots","2020-10-25 11:22:44.000" +"Hotshot Racing - 0100BDE008218000","0100BDE008218000","gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug","ingame","2024-02-04 21:31:17.000" +"Bounty Battle - 0100E1200DC1A000","0100E1200DC1A000","status-playable;nvdec","playable","2022-10-04 14:40:51.000" +"Avicii Invector","","status-playable","playable","2020-10-25 12:12:56.000" +"Ys Origin - 0100F90010882000","0100F90010882000","status-playable;nvdec","playable","2024-04-17 05:07:33.000" +"Kirby Fighters 2 - 0100227010460000","0100227010460000","ldn-works;online;status-playable","playable","2021-06-17 13:06:39.000" +"JUMP FORCE Deluxe Edition - 0100183010F12000","0100183010F12000","status-playable;nvdec;online-broken;UE4","playable","2023-10-01 15:56:05.000" +"The Survivalists","","status-playable","playable","2020-10-27 15:51:13.000" +"Season Match Full Bundle - Parts 1, 2 and 3","","status-playable","playable","2020-10-27 16:15:22.000" +"Moai VI: Unexpected Guests","","slow;status-playable","playable","2020-10-27 16:40:20.000" +"Agatha Christie - The ABC Murders","","status-playable","playable","2020-10-27 17:08:23.000" +"Remothered: Broken Porcelain - 0100FBD00F5F6000","0100FBD00F5F6000","UE4;gpu;nvdec;status-ingame","ingame","2021-06-17 15:13:11.000" +"Need For Speed Hot Pursuit Remastered","","audio;online;slow;status-ingame","ingame","2020-10-27 17:46:58.000" +"WarriOrb - 010032700EAC4000","010032700EAC4000","UE4;status-playable","playable","2021-06-17 15:45:14.000" +"Townsmen - A Kingdom Rebuilt - 010049E00BA34000","010049E00BA34000","status-playable;nvdec","playable","2022-10-14 22:48:59.000" +"Oceanhorn 2 Knights of the Lost Realm - 01006CB010840000","01006CB010840000","status-playable","playable","2021-05-21 18:26:10.000" +"No More Heroes 2 Desperate Struggle - 010071400F204000","010071400F204000","32-bit;status-playable;nvdec","playable","2022-11-19 01:38:13.000" +"No More Heroes - 0100F0400F202000","0100F0400F202000","32-bit;status-playable","playable","2022-09-13 07:44:27.000" +"Rusty Spount Rescue Adventure","","","","2020-10-29 17:06:42.000" +"Pixel Puzzle Makeout League - 010000E00E612000","010000E00E612000","status-playable","playable","2022-10-13 12:34:00.000" +"Futari de! Nyanko Daisensou - 01003C300B274000","01003C300B274000","status-playable","playable","2024-01-05 22:26:52.000" +"MAD RAT DEAD","","","","2020-10-31 13:30:24.000" +"The Language of Love","","Needs Update;crash;status-nothing","nothing","2020-12-03 17:54:00.000" +"Torn Tales - Rebound Edition","","status-playable","playable","2020-11-01 14:11:59.000" +"Spaceland","","status-playable","playable","2020-11-01 14:31:56.000" +"HARDCORE MECHA","","slow;status-playable","playable","2020-11-01 15:06:33.000" +"Barbearian - 0100F7E01308C000","0100F7E01308C000","Needs Update;gpu;status-ingame","ingame","2021-06-28 16:27:50.000" +"INSTANT Chef Party","","","","2020-11-01 23:15:58.000" +"Pikmin 3 Deluxe - 0100F4C009322000","0100F4C009322000","gpu;status-ingame;32-bit;nvdec;Needs Update","ingame","2024-09-03 00:28:26.000" +"Cobra Kai The Karate Kid Saga Continues - 01005790110F0000","01005790110F0000","status-playable","playable","2021-06-17 15:59:13.000" +"Seven Knights -Time Wanderer- - 010018400C24E000","010018400C24E000","status-playable;vulkan-backend-bug","playable","2022-10-13 22:08:54.000" +"Kangokuto Mary Skelter Finale","","audio;crash;status-ingame","ingame","2021-01-09 22:39:28.000" +"Shadowverse Champions Battle - 01002A800C064000","01002A800C064000","status-playable","playable","2022-10-02 22:59:29.000" +"Bakugan Champions of Vestroia","","status-playable","playable","2020-11-06 19:07:39.000" +"Jurassic World Evolution Complete Edition - 010050A011344000","010050A011344000","cpu;status-menus;crash","menus","2023-08-04 18:06:54.000" +"KAMEN RIDER memory of heroez / Premium Sound Edition - 0100A9801180E000","0100A9801180E000","status-playable","playable","2022-12-06 03:14:26.000" +"Shin Megami Tensei III NOCTURNE HD REMASTER - 010045800ED1E000","010045800ED1E000","gpu;status-ingame;Needs Update","ingame","2022-11-03 19:57:01.000" +"FUSER - 0100E1F013674000","0100E1F013674000","status-playable;nvdec;UE4","playable","2022-10-17 20:58:32.000" +"Mad Father","","status-playable","playable","2020-11-12 13:22:10.000" +"Café Enchanté","","status-playable","playable","2020-11-13 14:54:25.000" +"JUST DANCE 2021","","","","2020-11-14 06:22:04.000" +"Medarot Classics Plus Kuwagata Ver","","status-playable","playable","2020-11-21 11:30:40.000" +"Medarot Classics Plus Kabuto Ver","","status-playable","playable","2020-11-21 11:31:18.000" +"Forest Guardian","","","","2020-11-14 17:00:13.000" +"Fantasy Tavern Sextet -Vol.1 New World Days- - 01000E2012F6E000","01000E2012F6E000","gpu;status-ingame;crash;Needs Update","ingame","2022-12-05 16:48:00.000" +"Ary and the Secret of Seasons - 0100C2500CAB6000","0100C2500CAB6000","status-playable","playable","2022-10-07 20:45:09.000" +"Dark Quest 2","","status-playable","playable","2020-11-16 21:34:52.000" +"Cooking Tycoons 2: 3 in 1 Bundle","","status-playable","playable","2020-11-16 22:19:33.000" +"Cooking Tycoons: 3 in 1 Bundle","","status-playable","playable","2020-11-16 22:44:26.000" +"Agent A: A puzzle in disguise","","status-playable","playable","2020-11-16 22:53:27.000" +"ROBOTICS;NOTES DaSH","","status-playable","playable","2020-11-16 23:09:54.000" +"Hunting Simulator 2 - 010061F010C3A000","010061F010C3A000","status-playable;UE4","playable","2022-10-10 14:25:51.000" +"9 Monkeys of Shaolin","","UE4;gpu;slow;status-ingame","ingame","2020-11-17 11:58:43.000" +"Tin & Kuna","","status-playable","playable","2020-11-17 12:16:12.000" +"Seers Isle","","status-playable","playable","2020-11-17 12:28:50.000" +"Royal Roads","","status-playable","playable","2020-11-17 12:54:38.000" +"Rimelands - 01006AC00EE6E000","01006AC00EE6E000","status-playable","playable","2022-10-13 13:32:56.000" +"Mekorama - 0100B360068B2000","0100B360068B2000","gpu;status-boots","boots","2021-06-17 16:37:21.000" +"Need for Speed Hot Pursuit Remastered - 010029B0118E8000","010029B0118E8000","status-playable;online-broken","playable","2024-03-20 21:58:02.000" +"Mech Rage","","status-playable","playable","2020-11-18 12:30:16.000" +"Modern Tales: Age of Invention - 010004900D772000","010004900D772000","slow;status-playable","playable","2022-10-12 11:20:19.000" +"Dead Z Meat - 0100A24011F52000","0100A24011F52000","UE4;services;status-ingame","ingame","2021-04-14 16:50:16.000" +"Along the Edge","","status-playable","playable","2020-11-18 15:00:07.000" +"Country Tales - 0100C1E012A42000","0100C1E012A42000","status-playable","playable","2021-06-17 16:45:39.000" +"Ghost Sweeper - 01004B301108C000","01004B301108C000","status-playable","playable","2022-10-10 12:45:36.000" +"Hyrule Warriors: Age of Calamity - 01002B00111A2000","01002B00111A2000","gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug","ingame","2024-02-28 00:47:00.000" +"Path of Sin: Greed - 01001E500EA16000","01001E500EA16000","status-menus;crash","menus","2021-11-24 08:00:00.000" +"Hoggy 2 - 0100F7300ED2C000","0100F7300ED2C000","status-playable","playable","2022-10-10 13:53:35.000" +"Queen's Quest 4: Sacred Truce - 0100DCF00F13A000","0100DCF00F13A000","status-playable;nvdec","playable","2022-10-13 12:59:21.000" +"ROBOTICS;NOTES ELITE","","status-playable","playable","2020-11-26 10:28:20.000" +"Taiko no Tatsujin Rhythmic Adventure Pack","","status-playable","playable","2020-12-03 07:28:26.000" +"Pinstripe","","status-playable","playable","2020-11-26 10:40:40.000" +"Torchlight III - 010075400DDB8000","010075400DDB8000","status-playable;nvdec;online-broken;UE4","playable","2022-10-14 22:20:17.000" +"Ben 10: Power Trip - 01009CD00E3AA000","01009CD00E3AA000","status-playable;nvdec","playable","2022-10-09 10:52:12.000" +"Zoids Wild Infinity Blast","","","","2020-11-26 16:15:37.000" +"Picross S5 - 0100AC30133EC000","0100AC30133EC000","status-playable","playable","2022-10-17 18:51:42.000" +"Worm Jazz - 01009CD012CC0000","01009CD012CC0000","gpu;services;status-ingame;UE4;regression","ingame","2021-11-10 10:33:04.000" +"TTV2","","status-playable","playable","2020-11-27 13:21:36.000" +"Deadly Days","","status-playable","playable","2020-11-27 13:38:55.000" +"Pumpkin Jack - 01006C10131F6000","01006C10131F6000","status-playable;nvdec;UE4","playable","2022-10-13 12:52:32.000" +"Active Neurons 2 - 01000D1011EF0000","01000D1011EF0000","status-playable","playable","2022-10-07 16:21:42.000" +"Niche - a genetics survival game","","nvdec;status-playable","playable","2020-11-27 14:01:11.000" +"Monstrum - 010039F00EF70000","010039F00EF70000","status-playable","playable","2021-01-31 11:07:26.000" +"TRANSFORMERS: BATTLEGROUNDS - 01005E500E528000","01005E500E528000","online;status-playable","playable","2021-06-17 18:08:19.000" +"UBERMOSH:SANTICIDE","","status-playable","playable","2020-11-27 15:05:01.000" +"SPACE ELITE FORCE","","status-playable","playable","2020-11-27 15:21:05.000" +"Oddworld: New 'n' Tasty - 01005E700ABB8000","01005E700ABB8000","nvdec;status-playable","playable","2021-06-17 17:51:32.000" +"Immortal Realms: Vampire Wars - 010079501025C000","010079501025C000","nvdec;status-playable","playable","2021-06-17 17:41:46.000" +"Horace - 010086D011EB8000","010086D011EB8000","status-playable","playable","2022-10-10 14:03:50.000" +"Maid of Sker : Upscale Resolution not working","","","","2020-11-29 15:36:42.000" +"Professor Rubik's Brain Fitness","","","","2020-11-30 11:22:45.000" +"QV ( キュビ )","","","","2020-11-30 11:22:49.000" +"Double Pug Switch - 0100A5D00C7C0000","0100A5D00C7C0000","status-playable;nvdec","playable","2022-10-10 10:59:35.000" +"Trollhunters: Defenders of Arcadia","","gpu;nvdec;status-ingame","ingame","2020-11-30 13:27:09.000" +"Outbreak: Epidemic - 0100C850130FE000","0100C850130FE000","status-playable","playable","2022-10-13 10:27:31.000" +"Blackjack Hands","","status-playable","playable","2020-11-30 14:04:51.000" +"Piofiore: Fated Memories","","nvdec;status-playable","playable","2020-11-30 14:27:50.000" +"Task Force Kampas","","status-playable","playable","2020-11-30 14:44:15.000" +"Nexomon: Extinction","","status-playable","playable","2020-11-30 15:02:22.000" +"realMyst: Masterpiece Edition","","nvdec;status-playable","playable","2020-11-30 15:25:42.000" +"Neighbours back From Hell - 010065F00F55A000","010065F00F55A000","status-playable;nvdec","playable","2022-10-12 15:36:48.000" +"Sakai and... - 01007F000EB36000","01007F000EB36000","status-playable;nvdec","playable","2022-12-15 13:53:19.000" +"Supraland - 0100A6E01201C000","0100A6E01201C000","status-playable;nvdec;UE4;opengl-backend-bug","playable","2022-10-14 09:49:11.000" +"Ministry of Broadcast - 010069200EB80000","010069200EB80000","status-playable","playable","2022-08-10 00:31:16.000" +"Inertial Drift - 01002BD00F626000","01002BD00F626000","status-playable;online-broken","playable","2022-10-11 12:22:19.000" +"SuperEpic: The Entertainment War - 0100630010252000","0100630010252000","status-playable","playable","2022-10-13 23:02:48.000" +"HARDCORE Maze Cube","","status-playable","playable","2020-12-04 20:01:24.000" +"Firework","","status-playable","playable","2020-12-04 20:20:09.000" +"GORSD","","status-playable","playable","2020-12-04 22:15:21.000" +"Georifters","","UE4;crash;nvdec;status-menus","menus","2020-12-04 22:30:50.000" +"Giraffe and Annika","","UE4;crash;status-ingame","ingame","2020-12-04 22:41:57.000" +"Doodle Derby","","status-boots","boots","2020-12-04 22:51:48.000" +"Good Pizza, Great Pizza","","status-playable","playable","2020-12-04 22:59:18.000" +"HyperBrawl Tournament","","crash;services;status-boots","boots","2020-12-04 23:03:27.000" +"Dustoff Z","","status-playable","playable","2020-12-04 23:22:29.000" +"Embracelet","","status-playable","playable","2020-12-04 23:45:00.000" +"Cook, Serve, Delicious! 3?! - 0100B82010B6C000","0100B82010B6C000","status-playable","playable","2022-10-09 12:09:34.000" +"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS - 0100EAE010560000","0100EAE010560000","status-playable;online-broken;vulkan-backend-bug","playable","2022-10-09 11:20:50.000" +"Yomi wo Saku Hana","","","","2020-12-05 07:14:40.000" +"Immortals Fenyx Rising - 01004A600EC0A000","01004A600EC0A000","gpu;status-menus;crash","menus","2023-02-24 16:19:55.000" +"Supermarket Shriek - 0100C01012654000","0100C01012654000","status-playable","playable","2022-10-13 23:19:20.000" +"Absolute Drift","","status-playable","playable","2020-12-10 14:02:44.000" +"CASE 2: Animatronics Survival - 0100C4C0132F8000","0100C4C0132F8000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-09 11:45:03.000" +"BIG-Bobby-Car - The Big Race","","slow;status-playable","playable","2020-12-10 14:25:06.000" +"Asterix & Obelix XXL: Romastered - 0100F46011B50000","0100F46011B50000","gpu;status-ingame;nvdec;opengl","ingame","2023-08-16 21:22:06.000" +"Chicken Police - Paint it RED!","","nvdec;status-playable","playable","2020-12-10 15:10:11.000" +"Descenders","","gpu;status-ingame","ingame","2020-12-10 15:22:36.000" +"Outbreak: The Nightmare Chronicles - 01006EE013100000","01006EE013100000","status-playable","playable","2022-10-13 10:41:57.000" +"#Funtime","","status-playable","playable","2020-12-10 16:54:35.000" +"My Little Dog Adventure","","gpu;status-ingame","ingame","2020-12-10 17:47:37.000" +"n Verlore Verstand","","slow;status-ingame","ingame","2020-12-10 18:00:28.000" +"Oneiros - 0100463013246000","0100463013246000","status-playable","playable","2022-10-13 10:17:22.000" +"#KillAllZombies","","slow;status-playable","playable","2020-12-16 01:50:25.000" +"Connection Haunted","","slow;status-playable","playable","2020-12-10 18:57:14.000" +"Goosebumps Dead of Night","","gpu;nvdec;status-ingame","ingame","2020-12-10 20:02:16.000" +"#Halloween, Super Puzzles Dream","","nvdec;status-playable","playable","2020-12-10 20:43:58.000" +"The Long Return","","slow;status-playable","playable","2020-12-10 21:05:10.000" +"The Bluecoats: North & South","","nvdec;status-playable","playable","2020-12-10 21:22:29.000" +"Puyo Puyo Tetris 2 - 010038E011940000","010038E011940000","status-playable;ldn-untested","playable","2023-09-26 11:35:25.000" +"Yuppie Psycho: Executive Edition","","crash;status-ingame","ingame","2020-12-11 10:37:06.000" +"Root Double -Before Crime * After Days- Xtend Edition - 0100936011556000","0100936011556000","status-nothing;crash","nothing","2022-02-05 02:03:49.000" +"Hidden Folks","","","","2020-12-11 11:48:16.000" +"KINGDOM HEARTS Melody of Memory","","crash;nvdec;status-ingame","ingame","2021-03-03 17:34:12.000" +"Unhatched","","status-playable","playable","2020-12-11 12:11:09.000" +"Tropico 6 - 0100FBE0113CC000","0100FBE0113CC000","status-playable;nvdec;UE4","playable","2022-10-14 23:21:03.000" +"Star Renegades","","nvdec;status-playable","playable","2020-12-11 12:19:23.000" +"Alpaca Ball: Allstars","","nvdec;status-playable","playable","2020-12-11 12:26:29.000" +"Nordlicht","","","","2020-12-11 12:37:12.000" +"Sakuna: Of Rice and Ruin - 0100B1400E8FE000","0100B1400E8FE000","status-playable","playable","2023-07-24 13:47:13.000" +"Re:Turn - One Way Trip - 0100F03011616000","0100F03011616000","status-playable","playable","2022-08-29 22:42:53.000" +"L.O.L. Surprise! Remix: We Rule the World - 0100F2B0123AE000","0100F2B0123AE000","status-playable","playable","2022-10-11 22:48:03.000" +"They Bleed Pixels - 01001C2010D08000","01001C2010D08000","gpu;status-ingame","ingame","2024-08-09 05:52:18.000" +"If Found...","","status-playable","playable","2020-12-11 13:43:14.000" +"Gibbous - A Cthulhu Adventure - 0100D95012C0A000","0100D95012C0A000","status-playable;nvdec","playable","2022-10-10 12:57:17.000" +"Duck Life Adventure - 01005BC012C66000","01005BC012C66000","status-playable","playable","2022-10-10 11:27:03.000" +"Sniper Elite 4 - 010007B010FCC000","010007B010FCC000","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2024-06-18 17:53:15.000" +"Serious Sam Collection - 010007D00D43A000","010007D00D43A000","status-boots;vulkan-backend-bug","boots","2022-10-13 13:53:34.000" +"Slide Stars - 010010D011E1C000","010010D011E1C000","status-menus;crash","menus","2021-11-25 08:53:43.000" +"Tank Mechanic Simulator","","status-playable","playable","2020-12-11 15:10:45.000" +"Five Dates","","nvdec;status-playable","playable","2020-12-11 15:17:11.000" +"MagiCat","","status-playable","playable","2020-12-11 15:22:07.000" +"Family Feud 2021 - 010060200FC44000","010060200FC44000","status-playable;online-broken","playable","2022-10-10 11:42:21.000" +"LUNA The Shadow Dust","","","","2020-12-11 15:26:55.000" +"Paw Patrol: Might Pups Save Adventure Bay! - 01001F201121E000","01001F201121E000","status-playable","playable","2022-10-13 12:17:55.000" +"30-in-1 Game Collection - 010056D00E234000","010056D00E234000","status-playable;online-broken","playable","2022-10-15 17:47:09.000" +"Truck Driver - 0100CB50107BA000","0100CB50107BA000","status-playable;online-broken","playable","2022-10-20 17:42:33.000" +"Bridge Constructor: The Walking Dead","","gpu;slow;status-ingame","ingame","2020-12-11 17:31:32.000" +"Speed 3: Grand Prix - 0100F18010BA0000","0100F18010BA0000","status-playable;UE4","playable","2022-10-20 12:32:31.000" +"Wonder Blade","","status-playable","playable","2020-12-11 17:55:31.000" +"Super Blood Hockey","","status-playable","playable","2020-12-11 20:01:41.000" +"Who Wants to Be a Millionaire?","","crash;status-nothing","nothing","2020-12-11 20:22:42.000" +"My Aunt is a Witch - 01002C6012334000","01002C6012334000","status-playable","playable","2022-10-19 09:21:17.000" +"Flatland: Prologue","","status-playable","playable","2020-12-11 20:41:12.000" +"Fantasy Friends - 010017C012726000","010017C012726000","status-playable","playable","2022-10-17 19:42:39.000" +"MO:Astray","","crash;status-ingame","ingame","2020-12-11 21:45:44.000" +"Wartile Complete Edition","","UE4;crash;gpu;status-menus","menus","2020-12-11 21:56:10.000" +"Super Punch Patrol - 01001F90122B2000","01001F90122B2000","status-playable","playable","2024-07-12 19:49:02.000" +"Chronos","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-11 22:16:35.000" +"Going Under","","deadlock;nvdec;status-ingame","ingame","2020-12-11 22:29:46.000" +"Castle Crashers Remastered - 010001300D14A000","010001300D14A000","gpu;status-boots","boots","2024-08-10 09:21:20.000" +"Morbid: The Seven Acolytes - 010040E00F642000","010040E00F642000","status-playable","playable","2022-08-09 17:21:58.000" +"Elrador Creatures","","slow;status-playable","playable","2020-12-12 12:35:35.000" +"Sam & Max Save the World","","status-playable","playable","2020-12-12 13:11:51.000" +"Quiplash 2 InterLASHional - 0100AF100EE76000","0100AF100EE76000","status-playable;online-working","playable","2022-10-19 17:43:45.000" +"Monster Truck Championship - 0100D30010C42000","0100D30010C42000","slow;status-playable;nvdec;online-broken;UE4","playable","2022-10-18 23:16:51.000" +"Liberated: Enhanced Edition - 01003A90133A6000","01003A90133A6000","gpu;status-ingame;nvdec","ingame","2024-07-04 04:48:48.000" +"Empire of Sin","","nvdec","","2020-12-12 13:48:05.000" +"Girabox","","status-playable","playable","2020-12-12 13:55:05.000" +"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate - 01007430122D0000","01007430122D0000","status-playable;nvdec","playable","2022-10-20 11:44:36.000" +"2048 Battles","","status-playable","playable","2020-12-12 14:21:25.000" +"Reaper: Tale of a Pale Swordsman","","status-playable","playable","2020-12-12 15:12:23.000" +"Demong Hunter","","status-playable","playable","2020-12-12 15:27:08.000" +"Rise and Shine","","status-playable","playable","2020-12-12 15:56:43.000" +"12 Labours of Hercules II: The Cretan Bull - 0100B1A010014000","0100B1A010014000","cpu;status-nothing;32-bit;crash","nothing","2022-12-07 13:43:10.000" +"#womenUp, Super Puzzles Dream","","status-playable","playable","2020-12-12 16:57:25.000" +"#NoLimitFantasy, Super Puzzles Dream","","nvdec;status-playable","playable","2020-12-12 17:21:32.000" +"2urvive - 01007550131EE000","01007550131EE000","status-playable","playable","2022-11-17 13:49:37.000" +"2weistein – The Curse of the Red Dragon - 0100E20012886000","0100E20012886000","status-playable;nvdec;UE4","playable","2022-11-18 14:47:07.000" +"64","","status-playable","playable","2020-12-12 21:31:58.000" +"4x4 Dirt Track","","status-playable","playable","2020-12-12 21:41:42.000" +"Aeolis Tournament","","online;status-playable","playable","2020-12-12 22:02:14.000" +"Adventures of Pip","","nvdec;status-playable","playable","2020-12-12 22:11:55.000" +"9th Dawn III","","status-playable","playable","2020-12-12 22:27:27.000" +"Ailment","","status-playable","playable","2020-12-12 22:30:41.000" +"Adrenaline Rush - Miami Drive","","status-playable","playable","2020-12-12 22:49:50.000" +"Adventures of Chris","","status-playable","playable","2020-12-12 23:00:02.000" +"Akuarium","","slow;status-playable","playable","2020-12-12 23:43:36.000" +"Alchemist's Castle","","status-playable","playable","2020-12-12 23:54:08.000" +"Angry Video Game Nerd I & II Deluxe","","crash;status-ingame","ingame","2020-12-12 23:59:54.000" +"SENTRY","","status-playable","playable","2020-12-13 12:00:24.000" +"Squeakers","","status-playable","playable","2020-12-13 12:13:05.000" +"ALPHA","","status-playable","playable","2020-12-13 12:17:45.000" +"Shoot 1UP DX","","status-playable","playable","2020-12-13 12:32:47.000" +"Animal Hunter Z","","status-playable","playable","2020-12-13 12:50:35.000" +"Star99 - 0100E6B0115FC000","0100E6B0115FC000","status-menus;online","menus","2021-11-26 14:18:51.000" +"Alwa's Legacy","","status-playable","playable","2020-12-13 13:00:57.000" +"TERROR SQUID - 010070C00FB56000","010070C00FB56000","status-playable;online-broken","playable","2023-10-30 22:29:29.000" +"Animal Fight Club","","gpu;status-ingame","ingame","2020-12-13 13:13:33.000" +"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban! - 010093100DA04000","010093100DA04000","gpu;status-ingame","ingame","2023-09-22 10:21:46.000" +"Dokapon UP! Dreamy Roulette","","","","2020-12-13 14:53:27.000" +"ANIMUS","","status-playable","playable","2020-12-13 15:11:47.000" +"Pretty Princess Party - 01007F00128CC000","01007F00128CC000","status-playable","playable","2022-10-19 17:23:58.000" +"John Wick Hex - 01007090104EC000","01007090104EC000","status-playable","playable","2022-08-07 08:29:12.000" +"Animal Up","","status-playable","playable","2020-12-13 15:39:02.000" +"Derby Stallion","","","","2020-12-13 15:47:01.000" +"Ankh Guardian - Treasure of the Demon's Temple","","status-playable","playable","2020-12-13 15:55:49.000" +"Police X Heroine Lovepatrina! Love na Rhythm de Taihoshimasu!","","","","2020-12-13 16:12:56.000" +"Klondike Solitaire","","status-playable","playable","2020-12-13 16:17:27.000" +"Apocryph","","gpu;status-ingame","ingame","2020-12-13 23:24:10.000" +"Apparition","","nvdec;slow;status-ingame","ingame","2020-12-13 23:57:04.000" +"Tiny Gladiators","","status-playable","playable","2020-12-14 00:09:43.000" +"Aperion Cyberstorm","","status-playable","playable","2020-12-14 00:40:16.000" +"Cthulhu Saves Christmas","","status-playable","playable","2020-12-14 00:58:55.000" +"Kagamihara/Justice - 0100D58012FC2000","0100D58012FC2000","crash;status-nothing","nothing","2021-06-21 16:41:29.000" +"Greedroid","","status-playable","playable","2020-12-14 11:14:32.000" +"Aqua Lungers","","crash;status-ingame","ingame","2020-12-14 11:25:57.000" +"Atomic Heist - 01005FE00EC4E000","01005FE00EC4E000","status-playable","playable","2022-10-16 21:24:32.000" +"Nexoria: Dungeon Rogue Heroes - 0100B69012EC6000","0100B69012EC6000","gpu;status-ingame","ingame","2021-10-04 18:41:29.000" +"Armed 7 DX","","status-playable","playable","2020-12-14 11:49:56.000" +"Ord.","","status-playable","playable","2020-12-14 11:59:06.000" +"Commandos 2 HD Remaster - 010065A01158E000","010065A01158E000","gpu;status-ingame;nvdec","ingame","2022-08-10 21:52:27.000" +"Atomicrops - 0100AD30095A4000","0100AD30095A4000","status-playable","playable","2022-08-06 10:05:07.000" +"Rabi-Ribi - 01005BF00E4DE000","01005BF00E4DE000","status-playable","playable","2022-08-06 17:02:44.000" +"Assault Chainguns KM","","crash;gpu;status-ingame","ingame","2020-12-14 12:48:34.000" +"Attack of the Toy Tanks","","slow;status-ingame","ingame","2020-12-14 12:59:12.000" +"AstroWings SpaceWar","","status-playable","playable","2020-12-14 13:10:44.000" +"ATOMIK RunGunJumpGun","","status-playable","playable","2020-12-14 13:19:24.000" +"Arrest of a stone Buddha - 0100184011B32000","0100184011B32000","status-nothing;crash","nothing","2022-12-07 16:55:00.000" +"Midnight Evil - 0100A1200F20C000","0100A1200F20C000","status-playable","playable","2022-10-18 22:55:19.000" +"Awakening of Cthulhu - 0100085012D64000","0100085012D64000","UE4;status-playable","playable","2021-04-26 13:03:07.000" +"Axes - 0100DA3011174000","0100DA3011174000","status-playable","playable","2021-04-08 13:01:58.000" +"ASSAULT GUNNERS HD Edition","","","","2020-12-14 14:47:09.000" +"Shady Part of Me - 0100820013612000","0100820013612000","status-playable","playable","2022-10-20 11:31:55.000" +"A Frog Game","","status-playable","playable","2020-12-14 16:09:53.000" +"A Dark Room","","gpu;status-ingame","ingame","2020-12-14 16:14:28.000" +"A Sound Plan","","crash;status-boots","boots","2020-12-14 16:46:21.000" +"Actual Sunlight","","gpu;status-ingame","ingame","2020-12-14 17:18:41.000" +"Acthung! Cthulhu Tactics","","status-playable","playable","2020-12-14 18:40:27.000" +"ATOMINE","","gpu;nvdec;slow;status-playable","playable","2020-12-14 18:56:50.000" +"Adventure Llama","","status-playable","playable","2020-12-14 19:32:24.000" +"Minoria - 0100FAE010864000","0100FAE010864000","status-playable","playable","2022-08-06 18:50:50.000" +"Adventure Pinball Bundle","","slow;status-playable","playable","2020-12-14 20:31:53.000" +"Aery - Broken Memories - 0100087012810000","0100087012810000","status-playable","playable","2022-10-04 13:11:52.000" +"Fobia","","status-playable","playable","2020-12-14 21:05:23.000" +"Alchemic Jousts - 0100F5400AB6C000","0100F5400AB6C000","gpu;status-ingame","ingame","2022-12-08 15:06:28.000" +"Akash Path of the Five","","gpu;nvdec;status-ingame","ingame","2020-12-14 22:33:12.000" +"Witcheye","","status-playable","playable","2020-12-14 22:56:08.000" +"Zombie Driver","","nvdec;status-playable","playable","2020-12-14 23:15:10.000" +"Keen: One Girl Army","","status-playable","playable","2020-12-14 23:19:52.000" +"AFL Evolution 2 - 01001B400D334000","01001B400D334000","slow;status-playable;online-broken;UE4","playable","2022-12-07 12:45:56.000" +"Elden: Path of the Forgotten","","status-playable","playable","2020-12-15 00:33:19.000" +"Desire remaster ver.","","crash;status-boots","boots","2021-01-17 02:34:37.000" +"Alluris - 0100AC501122A000","0100AC501122A000","gpu;status-ingame;UE4","ingame","2023-08-02 23:13:50.000" +"Almightree the Last Dreamer","","slow;status-playable","playable","2020-12-15 13:59:03.000" +"Windscape - 010059900BA3C000","010059900BA3C000","status-playable","playable","2022-10-21 11:49:42.000" +"Warp Shift","","nvdec;status-playable","playable","2020-12-15 14:48:48.000" +"Alphaset by POWGI","","status-playable","playable","2020-12-15 15:15:15.000" +"Storm Boy - 010040D00BCF4000","010040D00BCF4000","status-playable","playable","2022-10-20 14:15:06.000" +"Fire & Water","","status-playable","playable","2020-12-15 15:43:20.000" +"Animated Jigsaws Collection","","nvdec;status-playable","playable","2020-12-15 15:58:34.000" +"More Dark","","status-playable","playable","2020-12-15 16:01:06.000" +"Clea","","crash;status-ingame","ingame","2020-12-15 16:22:56.000" +"Animal Fun for Toddlers and Kids","","services;status-boots","boots","2020-12-15 16:45:29.000" +"Brick Breaker","","crash;status-ingame","ingame","2020-12-15 17:03:59.000" +"Anode","","status-playable","playable","2020-12-15 17:18:58.000" +"Animal Pairs - Matching & Concentration Game for Toddlers & Kids - 010033C0121DC000","010033C0121DC000","services;status-boots","boots","2021-11-29 23:43:14.000" +"Animals for Toddlers","","services;status-boots","boots","2020-12-15 17:27:27.000" +"Stellar Interface - 01005A700C954000","01005A700C954000","status-playable","playable","2022-10-20 13:44:33.000" +"Anime Studio Story","","status-playable","playable","2020-12-15 18:14:05.000" +"Brick Breaker","","nvdec;online;status-playable","playable","2020-12-15 18:26:23.000" +"Anti-Hero Bundle - 0100596011E20000","0100596011E20000","status-playable;nvdec","playable","2022-10-21 20:10:30.000" +"Alt-Frequencies","","status-playable","playable","2020-12-15 19:01:33.000" +"Tanuki Justice - 01007A601318C000","01007A601318C000","status-playable;opengl","playable","2023-02-21 18:28:10.000" +"Norman's Great Illusion","","status-playable","playable","2020-12-15 19:28:24.000" +"Welcome to Primrose Lake - 0100D7F010B94000","0100D7F010B94000","status-playable","playable","2022-10-21 11:30:57.000" +"Dream","","status-playable","playable","2020-12-15 19:55:07.000" +"Lofi Ping Pong","","crash;status-ingame","ingame","2020-12-15 20:09:22.000" +"Antventor","","nvdec;status-playable","playable","2020-12-15 20:09:27.000" +"Space Pioneer - 010047B010260000","010047B010260000","status-playable","playable","2022-10-20 12:24:37.000" +"Death and Taxes","","status-playable","playable","2020-12-15 20:27:49.000" +"Deleveled","","slow;status-playable","playable","2020-12-15 21:02:29.000" +"Jenny LeClue - Detectivu","","crash;status-nothing","nothing","2020-12-15 21:07:07.000" +"Biz Builder Delux","","slow;status-playable","playable","2020-12-15 21:36:25.000" +"Creepy Tale","","status-playable","playable","2020-12-15 21:58:03.000" +"Among Us - 0100B0C013912000","0100B0C013912000","status-menus;online;ldn-broken","menus","2021-09-22 15:20:17.000" +"Spinch - 010076D0122A8000","010076D0122A8000","status-playable","playable","2024-07-12 19:02:10.000" +"Carto - 0100810012A1A000","0100810012A1A000","status-playable","playable","2022-09-04 15:37:06.000" +"Laraan","","status-playable","playable","2020-12-16 12:45:48.000" +"Spider Solitaire","","status-playable","playable","2020-12-16 16:19:30.000" +"Sin Slayers - 01006FE010438000","01006FE010438000","status-playable","playable","2022-10-20 11:53:52.000" +"AO Tennis 2 - 010047000E9AA000","010047000E9AA000","status-playable;online-broken","playable","2022-09-17 12:05:07.000" +"Area 86","","status-playable","playable","2020-12-16 16:45:52.000" +"Art Sqool - 01006AA013086000","01006AA013086000","status-playable;nvdec","playable","2022-10-16 20:42:37.000" +"Utopia 9 - A Volatile Vacation","","nvdec;status-playable","playable","2020-12-16 17:06:42.000" +"Arrog","","status-playable","playable","2020-12-16 17:20:50.000" +"Warlocks 2: God Slayers","","status-playable","playable","2020-12-16 17:36:50.000" +"Artifact Adventure Gaiden DX","","status-playable","playable","2020-12-16 17:49:25.000" +"Asemblance","","UE4;gpu;status-ingame","ingame","2020-12-16 18:01:23.000" +"Death Tales","","status-playable","playable","2020-12-17 10:55:52.000" +"Asphalt 9: Legends - 01007B000C834000","01007B000C834000","services;status-menus;crash;online-broken","menus","2022-12-07 13:28:29.000" +"Barbarous! Tavern of Emyr - 01003350102E2000","01003350102E2000","status-playable","playable","2022-10-16 21:50:24.000" +"Baila Latino - 010076B011EC8000","010076B011EC8000","status-playable","playable","2021-04-14 16:40:24.000" +"Unit 4","","status-playable","playable","2020-12-16 18:54:13.000" +"Ponpu","","status-playable","playable","2020-12-16 19:09:34.000" +"ATOM RPG - 0100B9400FA38000","0100B9400FA38000","status-playable;nvdec","playable","2022-10-22 10:11:48.000" +"Automachef","","status-playable","playable","2020-12-16 19:51:25.000" +"Croc's World 2","","status-playable","playable","2020-12-16 20:01:40.000" +"Ego Protocol","","nvdec;status-playable","playable","2020-12-16 20:16:35.000" +"Azure Reflections - 01006FB00990E000","01006FB00990E000","nvdec;online;status-playable","playable","2021-04-08 13:18:25.000" +"Back to Bed","","nvdec;status-playable","playable","2020-12-16 20:52:04.000" +"Azurebreak Heroes","","status-playable","playable","2020-12-16 21:26:17.000" +"Marooners - 010044600FDF0000","010044600FDF0000","status-playable;nvdec;online-broken","playable","2022-10-18 21:35:26.000" +"BaconMan - 0100EAF00E32E000","0100EAF00E32E000","status-menus;crash;nvdec","menus","2021-11-20 02:36:21.000" +"Peaky Blinders: Mastermind - 010002100CDCC000","010002100CDCC000","status-playable","playable","2022-10-19 16:56:35.000" +"Crash Drive 2","","online;status-playable","playable","2020-12-17 02:45:46.000" +"Blood will be Spilled","","nvdec;status-playable","playable","2020-12-17 03:02:03.000" +"Nefarious","","status-playable","playable","2020-12-17 03:20:33.000" +"Blacksea Odyssey - 01006B400C178000","01006B400C178000","status-playable;nvdec","playable","2022-10-16 22:14:34.000" +"Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive","","status-playable","playable","2020-12-17 11:22:50.000" +"Life of Boris: Super Slav","","status-ingame","ingame","2020-12-17 11:40:05.000" +"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo","","nvdec;status-playable","playable","2020-12-17 11:43:10.000" +"Baron: Fur Is Gonna Fly - 010039C0106C6000","010039C0106C6000","status-boots;crash","boots","2022-02-06 02:05:43.000" +"Deployment - 01000BF00B6BC000","01000BF00B6BC000","slow;status-playable;online-broken","playable","2022-10-17 16:23:59.000" +"PixelJunk Eden 2","","crash;status-ingame","ingame","2020-12-17 11:55:52.000" +"Batbarian: Testament of the Primordials","","status-playable","playable","2020-12-17 12:00:59.000" +"Abyss of The Sacrifice - 010047F012BE2000","010047F012BE2000","status-playable;nvdec","playable","2022-10-21 13:56:28.000" +"Nightmares from the Deep 2: The Siren's Call - 01006E700B702000","01006E700B702000","status-playable;nvdec","playable","2022-10-19 10:58:53.000" +"Vera Blanc: Full Moon","","audio;status-playable","playable","2020-12-17 12:09:30.000" +"Linelight","","status-playable","playable","2020-12-17 12:18:07.000" +"Battle Hunters - 0100A3B011EDE000","0100A3B011EDE000","gpu;status-ingame","ingame","2022-11-12 09:19:17.000" +"Day and Night","","status-playable","playable","2020-12-17 12:30:51.000" +"Zombie's Cool","","status-playable","playable","2020-12-17 12:41:26.000" +"Battle of Kings","","slow;status-playable","playable","2020-12-17 12:45:23.000" +"Ghostrunner","","UE4;crash;gpu;nvdec;status-ingame","ingame","2020-12-17 13:01:59.000" +"Battleground - 0100650010DD4000","0100650010DD4000","status-ingame;crash","ingame","2021-09-06 11:53:23.000" +"Little Racer - 0100E6D00E81C000","0100E6D00E81C000","status-playable","playable","2022-10-18 16:41:13.000" +"Battle Planet - Judgement Day","","status-playable","playable","2020-12-17 14:06:20.000" +"Dokuro","","nvdec;status-playable","playable","2020-12-17 14:47:09.000" +"Reflection of Mine","","audio;status-playable","playable","2020-12-17 15:06:37.000" +"Foregone","","deadlock;status-ingame","ingame","2020-12-17 15:26:53.000" +"Choices That Matter: And The Sun Went Out","","status-playable","playable","2020-12-17 15:44:08.000" +"BATTLLOON","","status-playable","playable","2020-12-17 15:48:23.000" +"Grim Legends: The Forsaken Bride - 010009F011F90000","010009F011F90000","status-playable;nvdec","playable","2022-10-18 13:14:06.000" +"Glitch's Trip","","status-playable","playable","2020-12-17 16:00:57.000" +"Maze","","status-playable","playable","2020-12-17 16:13:58.000" +"Bayonetta - 010076F0049A2000","010076F0049A2000","status-playable;audout","playable","2022-11-20 15:51:59.000" +"Gnome More War","","status-playable","playable","2020-12-17 16:33:07.000" +"Fin and the Ancient Mystery","","nvdec;status-playable","playable","2020-12-17 16:40:39.000" +"Nubarron: The adventure of an unlucky gnome","","status-playable","playable","2020-12-17 16:45:17.000" +"Survive! Mr. Cube - 010029A00AEB0000","010029A00AEB0000","status-playable","playable","2022-10-20 14:44:47.000" +"Saboteur SiO","","slow;status-ingame","ingame","2020-12-17 16:59:49.000" +"Flowlines VS","","status-playable","playable","2020-12-17 17:01:53.000" +"Beat Me! - 01002D20129FC000","01002D20129FC000","status-playable;online-broken","playable","2022-10-16 21:59:26.000" +"YesterMorrow","","crash;status-ingame","ingame","2020-12-17 17:15:25.000" +"Drums","","status-playable","playable","2020-12-17 17:21:51.000" +"Gnomes Garden: Lost King - 010036C00D0D6000","010036C00D0D6000","deadlock;status-menus","menus","2021-11-18 11:14:03.000" +"Edna & Harvey: Harvey's New Eyes - 0100ABE00DB4E000","0100ABE00DB4E000","nvdec;status-playable","playable","2021-01-26 14:36:08.000" +"Roarr! - 010068200C5BE000","010068200C5BE000","status-playable","playable","2022-10-19 23:57:45.000" +"PHOGS!","","online;status-playable","playable","2021-01-18 15:18:37.000" +"Idle Champions of the Forgotten Realms","","online;status-boots","boots","2020-12-17 18:24:57.000" +"Polyroll - 010074B00ED32000","010074B00ED32000","gpu;status-boots","boots","2021-07-01 16:16:50.000" +"Control Ultimate Edition - Cloud Version - 0100041013360000","0100041013360000","Needs Update;crash;services;status-nothing","nothing","2021-04-18 22:34:06.000" +"Wilmot's Warehouse - 010071F00D65A000","010071F00D65A000","audio;gpu;status-ingame","ingame","2021-06-02 17:24:32.000" +"Jack N' Jill DX","","","","2020-12-18 02:27:22.000" +"Izneo - 0100D8E00C874000","0100D8E00C874000","status-menus;online-broken","menus","2022-08-06 15:56:23.000" +"Dicey Dungeons - 0100BBF011394000","0100BBF011394000","gpu;audio;slow;status-ingame","ingame","2023-08-02 20:30:12.000" +"Rabbids Adventure Party Demo / 疯狂兔子:奇遇派对 - 试玩版","","","","2020-12-18 05:53:35.000" +"Venture Kid - 010095B00DBC8000","010095B00DBC8000","crash;gpu;status-ingame","ingame","2021-04-18 16:33:17.000" +"Death Coming - 0100F3B00CF32000","0100F3B00CF32000","status-nothing;crash","nothing","2022-02-06 07:43:03.000" +"OlliOlli: Switch Stance - 0100E0200B980000","0100E0200B980000","gpu;status-boots","boots","2024-04-25 08:36:37.000" +"Cybxus Heart - 01006B9013672000","01006B9013672000","gpu;slow;status-ingame","ingame","2022-01-15 05:00:49.000" +"Gensou Rougoku no Kaleidscope - 0100AC600EB4C000","0100AC600EB4C000","status-menus;crash","menus","2021-11-24 08:45:07.000" +"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy- - 0100454012E32000","0100454012E32000","status-ingame;crash","ingame","2021-08-08 11:56:18.000" +"Hulu - 0100A66003384000","0100A66003384000","status-boots;online-broken","boots","2022-12-09 10:05:00.000" +"Strife: Veteran Edition - 0100BDE012928000","0100BDE012928000","gpu;status-ingame","ingame","2022-01-15 05:10:42.000" +"Peasant Knight","","status-playable","playable","2020-12-22 09:30:50.000" +"Double Dragon Neon - 01005B10132B2000","01005B10132B2000","gpu;audio;status-ingame;32-bit","ingame","2022-09-20 18:00:20.000" +"Nekopara Vol.4","","crash;status-ingame","ingame","2021-01-17 01:47:18.000" +"Super Meat Boy Forever - 01009C200D60E000","01009C200D60E000","gpu;status-boots","boots","2021-04-26 14:25:39.000" +"Gems of Magic: Lost Family","","","","2020-12-24 15:33:57.000" +"Wagamama High Spec","","","","2020-12-25 09:02:51.000" +"BIT.TRIP RUNNER - 0100E62012D3C000","0100E62012D3C000","status-playable","playable","2022-10-17 14:23:24.000" +"BIT.TRIP VOID - 01000AD012D3A000","01000AD012D3A000","status-playable","playable","2022-10-17 14:31:23.000" +"Dark Arcana: The Carnival - 01003D301357A000","01003D301357A000","gpu;slow;status-ingame","ingame","2022-02-19 08:52:28.000" +"Food Girls","","","","2020-12-27 14:48:48.000" +"Override 2 Super Mech League - 0100647012F62000","0100647012F62000","status-playable;online-broken;UE4","playable","2022-10-19 15:56:04.000" +"Unto The End - 0100E49013190000","0100E49013190000","gpu;status-ingame","ingame","2022-10-21 11:13:29.000" +"Outbreak: Lost Hope - 0100D9F013102000","0100D9F013102000","crash;status-boots","boots","2021-04-26 18:01:23.000" +"Croc's World 3","","status-playable","playable","2020-12-30 18:53:26.000" +"COLLECTION of SaGA FINAL FANTASY LEGEND","","status-playable","playable","2020-12-30 19:11:16.000" +"The Adventures of 00 Dilly","","status-playable","playable","2020-12-30 19:32:29.000" +"Funimation - 01008E10130F8000","01008E10130F8000","gpu;status-boots","boots","2021-04-08 13:08:17.000" +"Aleste Collection","","","","2021-01-01 11:30:59.000" +"Trail Boss BMX","","","","2021-01-01 16:51:27.000" +"DEEMO -Reborn- - 01008B10132A2000","01008B10132A2000","status-playable;nvdec;online-broken","playable","2022-10-17 15:18:11.000" +"Catherine Full Body - 0100BF00112C0000","0100BF00112C0000","status-playable;nvdec","playable","2023-04-02 11:00:37.000" +"Hell Sports","","","","2021-01-03 15:40:25.000" +"Traditional Tactics Ne+","","","","2021-01-03 15:40:29.000" +"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 ) - 0100B9E012992000","0100B9E012992000","status-playable;UE4","playable","2022-12-07 12:59:16.000" +"The House of Da Vinci","","status-playable","playable","2021-01-05 14:17:19.000" +"Monster Sanctuary","","crash;status-ingame","ingame","2021-04-04 05:06:41.000" +"Monster Hunter Rise Demo - 010093A01305C000","010093A01305C000","status-playable;online-broken;ldn-works;demo","playable","2022-10-18 23:04:17.000" +"InnerSpace","","status-playable","playable","2021-01-13 19:36:14.000" +"Scott Pilgrim vs The World: The Game - 0100394011C30000","0100394011C30000","services-horizon;status-nothing;crash","nothing","2024-07-12 08:13:03.000" +"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-","","gpu;slow;status-ingame;crash","ingame","2021-11-06 02:57:29.000" +"Monster Hunter XX Nintendo Switch Ver ( Double Cross ) - 0100C3800049C000","0100C3800049C000","status-playable","playable","2024-07-21 14:08:09.000" +"Football Manager 2021 Touch - 01007CF013152000","01007CF013152000","gpu;status-ingame","ingame","2022-10-17 20:08:23.000" +"Eyes: The Horror Game - 0100EFE00A3C2000","0100EFE00A3C2000","status-playable","playable","2021-01-20 21:59:46.000" +"Evolution Board Game - 01006A800FA22000","01006A800FA22000","online;status-playable","playable","2021-01-20 22:37:56.000" +"PBA Pro Bowling 2021 - 0100F95013772000","0100F95013772000","status-playable;online-broken;UE4","playable","2022-10-19 16:46:40.000" +"Body of Evidence - 0100721013510000","0100721013510000","status-playable","playable","2021-04-25 22:22:11.000" +"The Hong Kong Massacre","","crash;status-ingame","ingame","2021-01-21 12:06:56.000" +"Arkanoid vs Space Invaders","","services;status-ingame","ingame","2021-01-21 12:50:30.000" +"Professor Lupo: Ocean - 0100D1F0132F6000","0100D1F0132F6000","status-playable","playable","2021-04-14 16:33:33.000" +"My Universe - School Teacher - 01006C301199C000","01006C301199C000","nvdec;status-playable","playable","2021-01-21 16:02:52.000" +"FUZE Player - 010055801134E000","010055801134E000","status-ingame;online-broken;vulkan-backend-bug","ingame","2022-10-18 12:23:53.000" +"Defentron - 0100CDE0136E6000","0100CDE0136E6000","status-playable","playable","2022-10-17 15:47:56.000" +"Thief Simulator - 0100CE400E34E000","0100CE400E34E000","status-playable","playable","2023-04-22 04:39:11.000" +"Stardash - 01002100137BA000","01002100137BA000","status-playable","playable","2021-01-21 16:31:19.000" +"The Last Dead End - 0100AAD011592000","0100AAD011592000","gpu;status-ingame;UE4","ingame","2022-10-20 16:59:44.000" +"Buddy Mission BOND Demo [ バディミッション BOND ]","","Incomplete","","2021-01-23 18:07:40.000" +"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ] - 01005EE013888000","01005EE013888000","gpu;status-ingame;demo","ingame","2022-12-06 15:27:59.000" +"Down in Bermuda","","","","2021-01-22 15:29:19.000" +"Blacksmith of the Sand Kingdom - 010068E013450000","010068E013450000","status-playable","playable","2022-10-16 22:37:44.000" +"Tennis World Tour 2 - 0100950012F66000","0100950012F66000","status-playable;online-broken","playable","2022-10-14 10:43:16.000" +"Shadow Gangs - 0100BE501382A000","0100BE501382A000","cpu;gpu;status-ingame;crash;regression","ingame","2024-04-29 00:07:26.000" +"Red Colony - 0100351013A06000","0100351013A06000","status-playable","playable","2021-01-25 20:44:41.000" +"Construction Simulator 3 - Console Edition - 0100A5600FAC0000","0100A5600FAC0000","status-playable","playable","2023-02-06 09:31:23.000" +"Speed Truck Racing - 010061F013A0E000","010061F013A0E000","status-playable","playable","2022-10-20 12:57:04.000" +"Arcanoid Breakout - 0100E53013E1C000","0100E53013E1C000","status-playable","playable","2021-01-25 23:28:02.000" +"Life of Fly - 0100B3A0135D6000","0100B3A0135D6000","status-playable","playable","2021-01-25 23:41:07.000" +"Little Nightmares II DEMO - 010093A0135D6000","010093A0135D6000","status-playable;UE4;demo;vulkan-backend-bug","playable","2024-05-16 18:47:20.000" +"Iris Fall - 0100945012168000","0100945012168000","status-playable;nvdec","playable","2022-10-18 13:40:22.000" +"Dirt Trackin Sprint Cars - 01004CB01378A000","01004CB01378A000","status-playable;nvdec;online-broken","playable","2022-10-17 16:34:56.000" +"Gal*Gun Returns [ ぎゃる☆がん りたーんず ] - 0100047013378000","0100047013378000","status-playable;nvdec","playable","2022-10-17 23:50:46.000" +"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ] - 0100307011D80000","0100307011D80000","status-playable","playable","2021-06-08 13:20:33.000" +"Buddy Mission BOND [ FG ] [ バディミッション BOND ] - 0100DB300B996000","0100DB300B996000","","","2021-01-30 04:22:26.000" +"CONARIUM - 010015801308E000","010015801308E000","UE4;nvdec;status-playable","playable","2021-04-26 17:57:53.000" +"Balan Wonderworld Demo - 0100E48013A34000","0100E48013A34000","gpu;services;status-ingame;UE4;demo","ingame","2023-02-16 20:05:07.000" +"War Truck Simulator - 0100B6B013B8A000","0100B6B013B8A000","status-playable","playable","2021-01-31 11:22:54.000" +"The Last Campfire - 0100449011506000","0100449011506000","status-playable","playable","2022-10-20 16:44:19.000" +"Spinny's journey - 01001E40136FE000","01001E40136FE000","status-ingame;crash","ingame","2021-11-30 03:39:44.000" +"Sally Face - 0100BBF0122B4000","0100BBF0122B4000","status-playable","playable","2022-06-06 18:41:24.000" +"Otti house keeper - 01006AF013A9E000","01006AF013A9E000","status-playable","playable","2021-01-31 12:11:24.000" +"Neoverse Trinity Edition - 01001A20133E000","","status-playable","playable","2022-10-19 10:28:03.000" +"Missile Dancer - 0100CFA0138C8000","0100CFA0138C8000","status-playable","playable","2021-01-31 12:22:03.000" +"Grisaia Phantom Trigger 03 - 01005250123B8000","01005250123B8000","audout;status-playable","playable","2021-01-31 12:30:47.000" +"GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000","0100D970123BA000","audout;status-playable","playable","2021-01-31 12:40:37.000" +"GRISAIA PHANTOM TRIGGER 05 - 01002330123BC000","01002330123BC000","audout;nvdec;status-playable","playable","2021-01-31 12:49:59.000" +"GRISAIA PHANTOM TRIGGER 5.5 - 0100CAF013AE6000","0100CAF013AE6000","audout;nvdec;status-playable","playable","2021-01-31 12:59:44.000" +"Dreamo - 0100D24013466000","0100D24013466000","status-playable;UE4","playable","2022-10-17 18:25:28.000" +"Dirt Bike Insanity - 0100A8A013DA4000","0100A8A013DA4000","status-playable","playable","2021-01-31 13:27:38.000" +"Calico - 010013A00E750000","010013A00E750000","status-playable","playable","2022-10-17 14:44:28.000" +"ADVERSE - 01008C901266E000","01008C901266E000","UE4;status-playable","playable","2021-04-26 14:32:51.000" +"All Walls Must Fall - 0100CBD012FB6000","0100CBD012FB6000","status-playable;UE4","playable","2022-10-15 19:16:30.000" +"Bus Driver Simulator - 010030D012FF6000","010030D012FF6000","status-playable","playable","2022-10-17 13:55:27.000" +"Blade II The Return of Evil - 01009CC00E224000","01009CC00E224000","audio;status-ingame;crash;UE4","ingame","2021-11-14 02:49:59.000" +"Ziggy The Chaser - 0100D7B013DD0000","0100D7B013DD0000","status-playable","playable","2021-02-04 20:34:27.000" +"Colossus Down - 0100E2F0128B4000","0100E2F0128B4000","status-playable","playable","2021-02-04 20:49:50.000" +"Turrican Flashback - 01004B0130C8000","","status-playable;audout","playable","2021-08-30 10:07:56.000" +"Ubongo - Deluxe Edition","","status-playable","playable","2021-02-04 21:15:01.000" +"Märchen Forest - 0100B201D5E000","","status-playable","playable","2021-02-04 21:33:34.000" +"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne","","gpu;status-boots;crash;nvdec;vulkan","boots","2023-03-07 21:27:24.000" +"Tracks - Toybox Edition - 0100192010F5A000","0100192010F5A000","UE4;crash;status-nothing","nothing","2021-02-08 15:19:18.000" +"TOHU - 0100B5E011920000","0100B5E011920000","slow;status-playable","playable","2021-02-08 15:40:44.000" +"Redout: Space Assault - 0100326010B98000","0100326010B98000","status-playable;UE4","playable","2022-10-19 23:04:35.000" +"Gods Will Fall - 0100CFA0111C8000","0100CFA0111C8000","status-playable","playable","2021-02-08 16:49:59.000" +"Cyber Shadow - 0100C1F0141AA000","0100C1F0141AA000","status-playable","playable","2022-07-17 05:37:41.000" +"Atelier Ryza 2: Lost Legends & the Secret Fairy - 01009A9012022000","01009A9012022000","status-playable","playable","2022-10-16 21:06:06.000" +"Heaven's Vault - 0100FD901000C000","0100FD901000C000","crash;status-ingame","ingame","2021-02-08 18:22:01.000" +"Contraptions - 01007D701298A000","01007D701298A000","status-playable","playable","2021-02-08 18:40:50.000" +"My Universe - Pet Clinic Cats & Dogs - 0100CD5011A02000","0100CD5011A02000","status-boots;crash;nvdec","boots","2022-02-06 02:05:53.000" +"Citizens Unite!: Earth x Space - 0100D9C012900000","0100D9C012900000","gpu;status-ingame","ingame","2023-10-22 06:44:19.000" +"Blue Fire - 010073B010F6E000","010073B010F6E000","status-playable;UE4","playable","2022-10-22 14:46:11.000" +"Shakes on a Plane - 01008DA012EC0000","01008DA012EC0000","status-menus;crash","menus","2021-11-25 08:52:25.000" +"Glyph - 0100EB501130E000","0100EB501130E000","status-playable","playable","2021-02-08 19:56:51.000" +"Flying Hero X - 0100419013A8A000","0100419013A8A000","status-menus;crash","menus","2021-11-17 07:46:58.000" +"Disjunction - 01000B70122A2000","01000B70122A2000","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2024-04-28 23:55:24.000" +"Grey Skies: A War of the Worlds Story - 0100DA7013792000","0100DA7013792000","status-playable;UE4","playable","2022-10-24 11:13:59.000" +"#womenUp, Super Puzzles Dream Demo - 0100D87012A14000","0100D87012A14000","nvdec;status-playable","playable","2021-02-09 00:03:31.000" +"n Verlore Verstand - Demo - 01009A500E3DA000","01009A500E3DA000","status-playable","playable","2021-02-09 00:13:32.000" +"10 Second Run RETURNS Demo - 0100DC000A472000","0100DC000A472000","gpu;status-ingame","ingame","2021-02-09 00:17:18.000" +"16-Bit Soccer Demo - 0100B94013D28000","0100B94013D28000","status-playable","playable","2021-02-09 00:23:07.000" +"1993 Shenandoah Demo - 0100148012550000","0100148012550000","status-playable","playable","2021-02-09 00:43:43.000" +"9 Monkeys of Shaolin Demo - 0100C5F012E3E000","0100C5F012E3E000","UE4;gpu;nvdec;status-ingame","ingame","2021-02-09 01:03:30.000" +"99Vidas Demo - 010023500C2F0000","010023500C2F0000","status-playable","playable","2021-02-09 12:51:31.000" +"A Duel Hand Disaster Trackher: DEMO - 0100582012B90000","0100582012B90000","crash;demo;nvdec;status-ingame","ingame","2021-03-24 18:45:27.000" +"Aces of the Luftwaffe Squadron Demo - 010054300D822000","010054300D822000","nvdec;status-playable","playable","2021-02-09 13:12:28.000" +"Active Neurons 2 Demo - 010031C0122B0000","010031C0122B0000","status-playable","playable","2021-02-09 13:40:21.000" +"Adventures of Chris Demo - 0100A0A0136E8000","0100A0A0136E8000","status-playable","playable","2021-02-09 13:49:21.000" +"Aegis Defenders Demo - 010064500AF72000","010064500AF72000","status-playable","playable","2021-02-09 14:04:17.000" +"Aeolis Tournament Demo - 01006710122CE000","01006710122CE000","nvdec;status-playable","playable","2021-02-09 14:22:30.000" +"AeternoBlade Demo Version - 0100B1C00949A000","0100B1C00949A000","nvdec;status-playable","playable","2021-02-09 14:39:26.000" +"AeternoBlade II Demo Version","","gpu;nvdec;status-ingame","ingame","2021-02-09 15:10:19.000" +"Agent A: A puzzle in disguise (Demo) - 01008E8012C02000","01008E8012C02000","status-playable","playable","2021-02-09 18:30:41.000" +"Airfield Mania Demo - 010010A00DB72000","010010A00DB72000","services;status-boots;demo","boots","2022-04-10 03:43:02.000" +"Alder's Blood Prologue - 01004510110C4000","01004510110C4000","crash;status-ingame","ingame","2021-02-09 19:03:03.000" +"AI: The Somnium Files Demo - 0100C1700FB34000","0100C1700FB34000","nvdec;status-playable","playable","2021-02-10 12:52:33.000" +"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version - 0100A8A00D27E000","0100A8A00D27E000","status-playable","playable","2021-02-10 13:33:59.000" +"Animated Jigsaws: Beautiful Japanese Scenery DEMO - 0100A1900B5B8000","0100A1900B5B8000","nvdec;status-playable","playable","2021-02-10 13:49:56.000" +"APE OUT DEMO - 010054500E6D4000","010054500E6D4000","status-playable","playable","2021-02-10 14:33:06.000" +"Anime Studio Story Demo - 01002B300EB86000","01002B300EB86000","status-playable","playable","2021-02-10 14:50:39.000" +"Aperion Cyberstorm Demo - 01008CA00D71C000","01008CA00D71C000","status-playable","playable","2021-02-10 15:53:21.000" +"ARMS Demo","","status-playable","playable","2021-02-10 16:30:13.000" +"Art of Balance DEMO - 010062F00CAE2000","010062F00CAE2000","gpu;slow;status-ingame","ingame","2021-02-10 17:17:12.000" +"Assault on Metaltron Demo - 0100C5E00E540000","0100C5E00E540000","status-playable","playable","2021-02-10 19:48:06.000" +"Automachef Demo - 01006B700EA6A000","01006B700EA6A000","status-playable","playable","2021-02-10 20:35:37.000" +"AVICII Invector Demo - 0100E100128BA000","0100E100128BA000","status-playable","playable","2021-02-10 21:04:58.000" +"Awesome Pea (Demo) - 010023800D3F2000","010023800D3F2000","status-playable","playable","2021-02-10 21:48:21.000" +"Awesome Pea 2 (Demo) - 0100D2011E28000","","crash;status-nothing","nothing","2021-02-10 22:08:27.000" +"Ayakashi koi gikyoku Free Trial - 010075400DEC6000","010075400DEC6000","status-playable","playable","2021-02-10 22:22:11.000" +"Bad North Demo","","status-playable","playable","2021-02-10 22:48:38.000" +"Baobabs Mausoleum: DEMO - 0100D3000AEC2000","0100D3000AEC2000","status-playable","playable","2021-02-10 22:59:25.000" +"Battle Chef Brigade Demo - 0100DBB00CAEE000","0100DBB00CAEE000","status-playable","playable","2021-02-10 23:15:07.000" +"Mercenaries Blaze Dawn of the Twin Dragons - 0100a790133fc000","0100a790133fc000","","","2021-02-11 18:43:00.000" +"Fallen Legion Revenants Demo - 0100cac013776000","0100cac013776000","","","2021-02-11 18:43:06.000" +"Bear With Me - The Lost Robots Demo - 010024200E97E800","010024200E97E800","nvdec;status-playable","playable","2021-02-12 22:38:12.000" +"Birds and Blocks Demo - 0100B6B012FF4000","0100B6B012FF4000","services;status-boots;demo","boots","2022-04-10 04:53:03.000" +"Black Hole Demo - 01004BE00A682000","01004BE00A682000","status-playable","playable","2021-02-12 23:02:17.000" +"Blasphemous Demo - 0100302010338000","0100302010338000","status-playable","playable","2021-02-12 23:49:56.000" +"Blaster Master Zero DEMO - 010025B002E92000","010025B002E92000","status-playable","playable","2021-02-12 23:59:06.000" +"Bleep Bloop DEMO - 010091700EA2A000","010091700EA2A000","nvdec;status-playable","playable","2021-02-13 00:20:53.000" +"Block-a-Pix Deluxe Demo - 0100E1C00DB6C000","0100E1C00DB6C000","status-playable","playable","2021-02-13 00:37:39.000" +"Get Over Here - 0100B5B00E77C000","0100B5B00E77C000","status-playable","playable","2022-10-28 11:53:52.000" +"Unspottable - 0100B410138C0000","0100B410138C0000","status-playable","playable","2022-10-25 19:28:49.000" +"Blossom Tales Demo - 01000EB01023E000","01000EB01023E000","status-playable","playable","2021-02-13 14:22:53.000" +"Boomerang Fu Demo Version - 010069F0135C4000","010069F0135C4000","demo;status-playable","playable","2021-02-13 14:38:13.000" +"Bot Vice Demo - 010069B00EAC8000","010069B00EAC8000","crash;demo;status-ingame","ingame","2021-02-13 14:52:42.000" +"BOXBOY! + BOXGIRL! Demo - 0100B7200E02E000","0100B7200E02E000","demo;status-playable","playable","2021-02-13 14:59:08.000" +"Super Mario 3D World + Bowser's Fury - 010028600EBDA000","010028600EBDA000","status-playable;ldn-works","playable","2024-07-31 10:45:37.000" +"Brawlout Demo - 0100C1B00E1CA000","0100C1B00E1CA000","demo;status-playable","playable","2021-02-13 22:46:53.000" +"Brigandine: The Legend of Runersia Demo - 0100703011258000","0100703011258000","status-playable","playable","2021-02-14 14:44:10.000" +"Brotherhood United Demo - 0100F19011226000","0100F19011226000","demo;status-playable","playable","2021-02-14 21:10:57.000" +"Bucket Knight demo - 0100F1B010A90000","0100F1B010A90000","demo;status-playable","playable","2021-02-14 21:23:09.000" +"BurgerTime Party! Demo - 01005780106E8000","01005780106E8000","demo;status-playable","playable","2021-02-14 21:34:16.000" +"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600","","demo;gpu;nvdec;status-ingame","ingame","2021-02-14 21:48:15.000" +"Cafeteria Nipponica Demo - 010060400D21C000","010060400D21C000","demo;status-playable","playable","2021-02-14 22:11:35.000" +"Cake Bash Demo - 0100699012F82000","0100699012F82000","crash;demo;status-ingame","ingame","2021-02-14 22:21:15.000" +"Captain Toad: Treasure Tracker Demo - 01002C400B6B6000","01002C400B6B6000","32-bit;demo;status-playable","playable","2021-02-14 22:36:09.000" +"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION - 01002320137CC000","01002320137CC000","slow;status-playable","playable","2021-02-14 22:45:35.000" +"Castle Crashers Remastered Demo - 0100F6D01060E000","0100F6D01060E000","gpu;status-boots;demo","boots","2022-04-10 10:57:10.000" +"Cat Quest II Demo - 0100E86010220000","0100E86010220000","demo;status-playable","playable","2021-02-15 14:11:57.000" +"Caveman Warriors Demo","","demo;status-playable","playable","2021-02-15 14:44:08.000" +"Chickens Madness DEMO - 0100CAC011C3A000","0100CAC011C3A000","UE4;demo;gpu;nvdec;status-ingame","ingame","2021-02-15 15:02:10.000" +"Little Nightmares II - 010097100EDD6000","010097100EDD6000","status-playable;UE4","playable","2023-02-10 18:24:44.000" +"Rhythm Fighter - 0100729012D18000","0100729012D18000","crash;status-nothing","nothing","2021-02-16 18:51:30.000" +"大図書館の羊飼い -Library Party-01006de00a686000","01006de00a686000","","","2021-02-16 07:20:19.000" +"Timothy and the Mysterious Forest - 0100393013A10000","0100393013A10000","gpu;slow;status-ingame","ingame","2021-06-02 00:42:11.000" +"Pixel Game Maker Series Werewolf Princess Kaguya - 0100859013CE6000","0100859013CE6000","crash;services;status-nothing","nothing","2021-03-26 00:23:07.000" +"D.C.4 ~ダ・カーポ4~-0100D8500EE14000","0100D8500EE14000","","","2021-02-17 08:46:35.000" +"Yo kai watch 1 for Nintendo Switch - 0100C0000CEEA000","0100C0000CEEA000","gpu;status-ingame;opengl","ingame","2024-05-28 11:11:49.000" +"Project TRIANGLE STRATEGY Debut Demo - 01002980140F6000","01002980140F6000","status-playable;UE4;demo","playable","2022-10-24 21:40:27.000" +"SNK VS. CAPCOM: THE MATCH OF THE MILLENNIUM - 010027D0137E0000","010027D0137E0000","","","2021-02-19 12:35:20.000" +"Super Soccer Blast - 0100D61012270000","0100D61012270000","gpu;status-ingame","ingame","2022-02-16 08:39:12.000" +"VOEZ (Japan Version) - 0100A7F002830000","0100A7F002830000","","","2021-02-19 15:07:49.000" +"Dungreed - 010045B00C496000","010045B00C496000","","","2021-02-19 16:18:07.000" +"Capcom Arcade Stadium - 01001E0013208000","01001E0013208000","status-playable","playable","2021-03-17 05:45:14.000" +"Urban Street Fighting - 010054F014016000","010054F014016000","status-playable","playable","2021-02-20 19:16:36.000" +"The Long Dark - 01007A700A87C000","01007A700A87C000","status-playable","playable","2021-02-21 14:19:52.000" +"Rebel Galaxy: Outlaw - 0100CAA01084A000","0100CAA01084A000","status-playable;nvdec","playable","2022-12-01 07:44:56.000" +"Persona 5: Strikers (US) - 0100801011C3E000","0100801011C3E000","status-playable;nvdec;mac-bug","playable","2023-09-26 09:36:01.000" +"Steven Universe Unleash the Light","","","","2021-02-25 02:33:05.000" +"Ghosts 'n Goblins Resurrection - 0100D6200F2BA000","0100D6200F2BA000","status-playable","playable","2023-05-09 12:40:41.000" +"Taxi Chaos - 0100B76011DAA000","0100B76011DAA000","slow;status-playable;online-broken;UE4","playable","2022-10-25 19:13:00.000" +"COTTOn Reboot! [ コットン リブート! ] - 01003DD00F94A000","01003DD00F94A000","status-playable","playable","2022-05-24 16:29:24.000" +"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ] - 010017301007E000","010017301007E000","status-playable","playable","2021-03-18 11:42:19.000" +"Bravely Default II - 01006DC010326000","01006DC010326000","gpu;status-ingame;crash;Needs Update;UE4","ingame","2024-04-26 06:11:26.000" +"Forward To The Sky - 0100DBA011136000","0100DBA011136000","","","2021-02-27 12:11:42.000" +"Just Dance 2019","","gpu;online;status-ingame","ingame","2021-02-27 17:21:27.000" +"Harvest Moon One World - 010016B010FDE00","","status-playable","playable","2023-05-26 09:17:19.000" +"Just Dance 2017 - 0100BCE000598000","0100BCE000598000","online;status-playable","playable","2021-03-05 09:46:01.000" +"コープスパーティー ブラッドカバー リピーティッドフィアー (Corpse Party Blood Covered: Repeated Fear) - 0100965012E22000","0100965012E22000","","","2021-03-05 09:47:52.000" +"Sea of Solitude The Director's Cut - 0100AFE012BA2000","0100AFE012BA2000","gpu;status-ingame","ingame","2024-07-12 18:29:29.000" +"Just Dance 2018 - 0100A0500348A000","0100A0500348A000","","","2021-03-13 08:09:14.000" +"Crash Bandicoot 4: It's About Time - 010073401175E000","010073401175E000","status-playable;nvdec;UE4","playable","2024-03-17 07:13:45.000" +"Bloody Bunny : The Game - 0100E510143EC000","0100E510143EC000","status-playable;nvdec;UE4","playable","2022-10-22 13:18:55.000" +"Plants vs. Zombies: Battle for Neighborville Complete Edition - 0100C56010FD8000","0100C56010FD8000","gpu;audio;status-boots;crash","boots","2024-09-02 12:58:14.000" +"Cathedral - 0100BEB01327A000","0100BEB01327A000","","","2021-03-19 22:12:46.000" +"Night Vision - 0100C3801458A000","0100C3801458A000","","","2021-03-19 22:20:53.000" +"Stubbs the Zombie in Rebel Without a Pulse - 0100964012528000","0100964012528000","","","2021-03-19 22:56:50.000" +"Hitman 3 - Cloud Version - 01004990132AC000","01004990132AC000","Needs Update;crash;services;status-nothing","nothing","2021-04-18 22:35:07.000" +"Speed Limit - 01000540139F6000","01000540139F6000","gpu;status-ingame","ingame","2022-09-02 18:37:40.000" +"Dig Dog - 0100A5A00DBB0000","0100A5A00DBB0000","gpu;status-ingame","ingame","2021-06-02 17:17:51.000" +"Renzo Racer - 01007CC0130C6000","01007CC0130C6000","status-playable","playable","2021-03-23 22:28:05.000" +"Persephone","","status-playable","playable","2021-03-23 22:39:19.000" +"Cresteaju","","gpu;status-ingame","ingame","2021-03-24 10:46:06.000" +"Boom Blaster","","status-playable","playable","2021-03-24 10:55:56.000" +"Soccer Club Life: Playing Manager - 010017B012AFC000","010017B012AFC000","gpu;status-ingame","ingame","2022-10-25 11:59:22.000" +"Radio Commander - 0100BAD013B6E000","0100BAD013B6E000","nvdec;status-playable","playable","2021-03-24 11:20:46.000" +"Negative - 01008390136FC000","01008390136FC000","nvdec;status-playable","playable","2021-03-24 11:29:41.000" +"Hero-U: Rogue to Redemption - 010077D01094C000","010077D01094C000","nvdec;status-playable","playable","2021-03-24 11:40:01.000" +"Haven - 0100E2600DBAA000","0100E2600DBAA000","status-playable","playable","2021-03-24 11:52:41.000" +"Escape First 2 - 010021201296A000","010021201296A000","status-playable","playable","2021-03-24 11:59:41.000" +"Active Neurons 3 - 0100EE1013E12000","0100EE1013E12000","status-playable","playable","2021-03-24 12:20:20.000" +"Blizzard Arcade Collection - 0100743013D56000","0100743013D56000","status-playable;nvdec","playable","2022-08-03 19:37:26.000" +"Hellpoint - 010024600C794000","010024600C794000","status-menus","menus","2021-11-26 13:24:20.000" +"Death's Hangover - 0100492011A8A000","0100492011A8A000","gpu;status-boots","boots","2023-08-01 22:38:06.000" +"Storm in a Teacup - 0100B2300B932000","0100B2300B932000","gpu;status-ingame","ingame","2021-11-06 02:03:19.000" +"Charge Kid - 0100F52013A66000","0100F52013A66000","gpu;status-boots;audout","boots","2024-02-11 01:17:47.000" +"Monster Hunter Rise - 0100B04011742000","0100B04011742000","gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works","ingame","2024-08-24 11:04:59.000" +"Gotobun no Hanayome Natsu no Omoide mo Gotobun [ 五等分の花嫁∬ ~夏の思い出も五等分~ ] - 0100FB5013670000","0100FB5013670000","","","2021-03-27 16:51:27.000" +"Steam Prison - 01008010118CC000","01008010118CC000","nvdec;status-playable","playable","2021-04-01 15:34:11.000" +"Rogue Heroes: Ruins of Tasos - 01009FA010848000","01009FA010848000","online;status-playable","playable","2021-04-01 15:41:25.000" +"Fallen Legion Revenants - 0100AA801258C000","0100AA801258C000","status-menus;crash","menus","2021-11-25 08:53:20.000" +" R-TYPE FINAL 2 Demo - 01007B0014300000","01007B0014300000","slow;status-ingame;nvdec;UE4;demo","ingame","2022-10-24 21:57:42.000" +"Fire Emblem: Shadow Dragon and the Blade of Light - 0100A12011CC8000","0100A12011CC8000","status-playable","playable","2022-10-17 19:49:14.000" +"Dariusburst - Another Chronicle EX+ - 010015800F93C000","010015800F93C000","online;status-playable","playable","2021-04-05 14:21:43.000" +"Curse of the Dead Gods - 0100D4A0118EA000","0100D4A0118EA000","status-playable","playable","2022-08-30 12:25:38.000" +"Clocker - 0100DF9013AD4000","0100DF9013AD4000","status-playable","playable","2021-04-05 15:05:13.000" +"Azur Lane: Crosswave - 01006AF012FC8000","01006AF012FC8000","UE4;nvdec;status-playable","playable","2021-04-05 15:15:25.000" +"AnShi - 01000FD00DF78000","01000FD00DF78000","status-playable;nvdec;UE4","playable","2022-10-21 19:37:01.000" +"Aery - A Journey Beyond Time - 0100DF8014056000","0100DF8014056000","status-playable","playable","2021-04-05 15:52:25.000" +"Sir Lovelot - 0100E9201410E000","0100E9201410E000","status-playable","playable","2021-04-05 16:21:46.000" +"Pixel Game Maker Series Puzzle Pedestrians - 0100EA2013BCC000","0100EA2013BCC000","status-playable","playable","2022-10-24 20:15:50.000" +"Monster Jam Steel Titans 2 - 010051B0131F0000","010051B0131F0000","status-playable;nvdec;UE4","playable","2022-10-24 17:17:59.000" +"Huntdown - 0100EBA004726000","0100EBA004726000","status-playable","playable","2021-04-05 16:59:54.000" +"GraviFire - 010054A013E0C000","010054A013E0C000","status-playable","playable","2021-04-05 17:13:32.000" +"Dungeons & Bombs","","status-playable","playable","2021-04-06 12:46:22.000" +"Estranged: The Departure - 01004F9012FD8000","01004F9012FD8000","status-playable;nvdec;UE4","playable","2022-10-24 10:37:58.000" +"Demon's Rise - Lords of Chaos - 0100E29013818000","0100E29013818000","status-playable","playable","2021-04-06 16:20:06.000" +"Bibi & Tina at the horse farm - 010062400E69C000","010062400E69C000","status-playable","playable","2021-04-06 16:31:39.000" +"WRC 9 The Official Game - 01001A0011798000","01001A0011798000","gpu;slow;status-ingame;nvdec","ingame","2022-10-25 19:47:39.000" +"Woodsalt - 0100288012966000","0100288012966000","status-playable","playable","2021-04-06 17:01:48.000" +"Kingdoms of Amalur: Re-Reckoning - 0100EF50132BE000","0100EF50132BE000","status-playable","playable","2023-08-10 13:05:08.000" +"Jiffy - 01008330134DA000","01008330134DA000","gpu;status-ingame;opengl","ingame","2024-02-03 23:11:24.000" +"A-Train: All Aboard! Tourism - 0100A3E010E56000","0100A3E010E56000","nvdec;status-playable","playable","2021-04-06 17:48:19.000" +"Synergia - 01009E700F448000","01009E700F448000","status-playable","playable","2021-04-06 17:58:04.000" +"R.B.I. Baseball 21 - 0100B4A0115CA000","0100B4A0115CA000","status-playable;online-working","playable","2022-10-24 22:31:45.000" +"NEOGEO POCKET COLOR SELECTION Vol.1 - 010006D0128B4000","010006D0128B4000","status-playable","playable","2023-07-08 20:55:36.000" +"Mighty Fight Federation - 0100C1E0135E0000","0100C1E0135E0000","online;status-playable","playable","2021-04-06 18:39:56.000" +"Lost Lands: The Four Horsemen - 0100133014510000","0100133014510000","status-playable;nvdec","playable","2022-10-24 16:41:00.000" +"In rays of the Light - 0100A760129A0000","0100A760129A0000","status-playable","playable","2021-04-07 15:18:07.000" +"DARQ Complete Edition - 0100440012FFA000","0100440012FFA000","audout;status-playable","playable","2021-04-07 15:26:21.000" +"Can't Drive This - 0100593008BDC000","0100593008BDC000","status-playable","playable","2022-10-22 14:55:17.000" +"Wanderlust Travel Stories - 0100B27010436000","0100B27010436000","status-playable","playable","2021-04-07 16:09:12.000" +"Tales from the Borderlands - 0100F0C011A68000","0100F0C011A68000","status-playable;nvdec","playable","2022-10-25 18:44:14.000" +"Star Wars: Republic Commando - 0100FA10115F8000","0100FA10115F8000","gpu;status-ingame;32-bit","ingame","2023-10-31 15:57:17.000" +"Barrage Fantasia - 0100F2A013752000","0100F2A013752000","","","2021-04-08 01:02:06.000" +"Atelier Rorona - The Alchemist of Arland - DX - 010088600C66E000","010088600C66E000","nvdec;status-playable","playable","2021-04-08 15:33:15.000" +"PAC-MAN 99 - 0100AD9012510000","0100AD9012510000","gpu;status-ingame;online-broken","ingame","2024-04-23 00:48:25.000" +"MAGLAM LORD - 0100C2C0125FC000","0100C2C0125FC000","","","2021-04-09 09:10:45.000" +"Part Time UFO - 01006B5012B32000 ","01006B5012B32000","status-ingame;crash","ingame","2023-03-03 03:13:05.000" +"Fitness Boxing - 0100E7300AAD4000","0100E7300AAD4000","status-playable","playable","2021-04-14 20:33:33.000" +"Fitness Boxing 2: Rhythm & Exercise - 0100073011382000","0100073011382000","crash;status-ingame","ingame","2021-04-14 20:40:48.000" +"Overcooked! All You Can Eat - 0100F28011892000","0100F28011892000","ldn-untested;online;status-playable","playable","2021-04-15 10:33:52.000" +"SpyHack - 01005D701264A000","01005D701264A000","status-playable","playable","2021-04-15 10:53:51.000" +"Oh My Godheads: Party Edition - 01003B900AE12000","01003B900AE12000","status-playable","playable","2021-04-15 11:04:11.000" +"My Hidden Things - 0100E4701373E000","0100E4701373E000","status-playable","playable","2021-04-15 11:26:06.000" +"Merchants of Kaidan - 0100E5000D3CA000","0100E5000D3CA000","status-playable","playable","2021-04-15 11:44:28.000" +"Mahluk dark demon - 010099A0145E8000","010099A0145E8000","status-playable","playable","2021-04-15 13:14:24.000" +"Fred3ric - 0100AC40108D8000","0100AC40108D8000","status-playable","playable","2021-04-15 13:30:31.000" +"Fishing Universe Simulator - 010069800D292000","010069800D292000","status-playable","playable","2021-04-15 14:00:43.000" +"Exorder - 0100FA800A1F4000","0100FA800A1F4000","nvdec;status-playable","playable","2021-04-15 14:17:20.000" +"FEZ - 01008D900B984000","01008D900B984000","gpu;status-ingame","ingame","2021-04-18 17:10:16.000" +"Danger Scavenger - ","","nvdec;status-playable","playable","2021-04-17 15:53:04.000" +"Hellbreachers - 01002BF013F0C000","01002BF013F0C000","","","2021-04-17 17:19:20.000" +"Cooking Simulator - 01001E400FD58000","01001E400FD58000","status-playable","playable","2021-04-18 13:25:23.000" +"Digerati Presents: The Dungeon Crawl Vol. 1 - 010035D0121EC000","010035D0121EC000","slow;status-ingame","ingame","2021-04-18 14:04:55.000" +"Clea 2 - 010045E0142A4000","010045E0142A4000","status-playable","playable","2021-04-18 14:25:18.000" +"Livestream Escape from Hotel Izanami - 0100E45014338000","0100E45014338000","","","2021-04-19 02:20:34.000" +"Ai Kiss 2 [ アイキス2 ] - 01000E9013CD4000","01000E9013CD4000","","","2021-04-19 02:49:12.000" +"Pikachin-Kit – Game de Pirameki Daisakusen [ ピカちんキット ゲームでピラメキ大作戦!] - 01009C100A8AA000","01009C100A8AA000","","","2021-04-19 03:11:07.000" +"Ougon musou kyoku CROSS [ 黄金夢想曲†CROSS] - 010011900E720000","010011900E720000","","","2021-04-19 03:22:41.000" +"Cargo Crew Driver - 0100DD6014870000","0100DD6014870000","status-playable","playable","2021-04-19 12:54:22.000" +"Black Legend - 0100C3200E7E6000","0100C3200E7E6000","gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-10-22 12:54:48.000" +"Balan Wonderworld - 0100438012EC8000","0100438012EC8000","status-playable;nvdec;UE4","playable","2022-10-22 13:08:43.000" +"Arkham Horror: Mother's Embrace - 010069A010606000","010069A010606000","nvdec;status-playable","playable","2021-04-19 15:40:55.000" +"S.N.I.P.E.R. Hunter Scope - 0100B8B012ECA000","0100B8B012ECA000","status-playable","playable","2021-04-19 15:58:09.000" +"Ploid Saga - 0100E5B011F48000 ","0100E5B011F48000","status-playable","playable","2021-04-19 16:58:45.000" +"Kaze and the Wild Masks - 010038B00F142000","010038B00F142000","status-playable","playable","2021-04-19 17:11:03.000" +"I Saw Black Clouds - 01001860140B0000","01001860140B0000","nvdec;status-playable","playable","2021-04-19 17:22:16.000" +"Escape from Life Inc - 010023E013244000","010023E013244000","status-playable","playable","2021-04-19 17:34:09.000" +"El Hijo - A Wild West Tale - 010020A01209C000","010020A01209C000","nvdec;status-playable","playable","2021-04-19 17:44:08.000" +"Bomber Fox - 0100A1F012948000","0100A1F012948000","nvdec;status-playable","playable","2021-04-19 17:58:13.000" +"Stitchy in Tooki Trouble - 010077B014518000","010077B014518000","status-playable","playable","2021-05-06 16:25:53.000" +"SaGa Frontier Remastered - 0100A51013530000","0100A51013530000","status-playable;nvdec","playable","2022-11-03 13:54:56.000" +"Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ] - 0100EB2012E36000","0100EB2012E36000","status-nothing;crash","nothing","2021-11-03 08:45:06.000" +"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ] - 01005CD013116000","01005CD013116000","status-playable","playable","2022-07-29 15:50:13.000" +"Uno no Tatsujin Machigai Sagashi Museum for Nintendo Switch [ -右脳の達人- まちがいさがしミュージアム for Nintendo Switch ] - 01001030136C6000","01001030136C6000","","","2021-04-22 21:59:27.000" +"Shantae - 0100430013120000","0100430013120000","status-playable","playable","2021-05-21 04:53:26.000" +"The Legend of Heroes: Trails of Cold Steel IV - 0100D3C010DE8000","0100D3C010DE8000","nvdec;status-playable","playable","2021-04-23 14:01:05.000" +"Effie - 01002550129F0000","01002550129F0000","status-playable","playable","2022-10-27 14:36:39.000" +"Death end re;Quest - 0100AEC013DDA000","0100AEC013DDA000","status-playable","playable","2023-07-09 12:19:54.000" +"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改] - 01005E5013862000","01005E5013862000","status-nothing;crash","nothing","2021-09-30 14:41:07.000" +"Yoshi's Crafted World - 01006000040C2000","01006000040C2000","gpu;status-ingame;audout","ingame","2021-08-30 13:25:51.000" +"TY the Tasmanian Tiger 2: Bush Rescue HD - 0100BC701417A000","0100BC701417A000","","","2021-05-04 23:11:57.000" +"Nintendo Labo Toy-Con 03: Vehicle Kit - 01001E9003502000","01001E9003502000","services;status-menus;crash","menus","2022-08-03 17:20:11.000" +"Say No! More - 01001C3012912000","01001C3012912000","status-playable","playable","2021-05-06 13:43:34.000" +"Potion Party - 01000A4014596000","01000A4014596000","status-playable","playable","2021-05-06 14:26:54.000" +"Saviors of Sapphire Wings & Stranger of Sword City Revisited - 0100AA00128BA000","0100AA00128BA000","status-menus;crash","menus","2022-10-24 23:00:46.000" +"Lost Words: Beyond the Page - 0100018013124000","0100018013124000","status-playable","playable","2022-10-24 17:03:21.000" +"Lost Lands 3: The Golden Curse - 0100156014C6A000","0100156014C6A000","status-playable;nvdec","playable","2022-10-24 16:30:00.000" +"ISLAND - 0100F06013710000","0100F06013710000","status-playable","playable","2021-05-06 15:11:47.000" +"SilverStarChess - 010016D00A964000","010016D00A964000","status-playable","playable","2021-05-06 15:25:57.000" +"Breathedge - 01000AA013A5E000","01000AA013A5E000","UE4;nvdec;status-playable","playable","2021-05-06 15:44:28.000" +"Isolomus - 010001F0145A8000","010001F0145A8000","services;status-boots","boots","2021-11-03 07:48:21.000" +"Relicta - 01002AD013C52000","01002AD013C52000","status-playable;nvdec;UE4","playable","2022-10-31 12:48:33.000" +"Rain on Your Parade - 0100BDD014232000","0100BDD014232000","status-playable","playable","2021-05-06 19:32:04.000" +"World's End Club Demo - 0100BE101453E000","0100BE101453E000","","","2021-05-08 16:22:55.000" +"Very Very Valet Demo - 01006C8014DDA000","01006C8014DDA000","status-boots;crash;Needs Update;demo","boots","2022-11-12 15:26:13.000" +"Miitopia Demo - 01007DA0140E8000","01007DA0140E8000","services;status-menus;crash;demo","menus","2023-02-24 11:50:58.000" +"Knight Squad 2 - 010024B00E1D6000","010024B00E1D6000","status-playable;nvdec;online-broken","playable","2022-10-28 18:38:09.000" +"Tonarini kanojo noiru shiawase ~ Curious Queen ~ [ となりに彼女のいる幸せ~Curious Queen~] - 0100A18011BE4000","0100A18011BE4000","","","2021-05-11 13:40:34.000" +"Mainichi mamoru miya sanchino kyou nogohan [ 毎日♪ 衛宮さんちの今日のごはん ] - 01005E6010114000","01005E6010114000","","","2021-05-11 13:45:30.000" +"Commander Keen in Keen Dreams: Definitive Edition - 0100E400129EC000","0100E400129EC000","status-playable","playable","2021-05-11 19:33:54.000" +"SD Gundam G Generation Genesis (0100CEE0140CE000)","0100CEE0140CE000","","","2021-05-13 12:29:50.000" +"Poison Control - 0100EB6012FD2000","0100EB6012FD2000","status-playable","playable","2021-05-16 14:01:54.000" +"My Riding Stables 2: A New Adventure - 010042A00FBF0000","010042A00FBF0000","status-playable","playable","2021-05-16 14:14:59.000" +"Dragon Audit - 0100DBC00BD5A000","0100DBC00BD5A000","crash;status-ingame","ingame","2021-05-16 14:24:46.000" +"Arcaea - 0100E680149DC000","0100E680149DC000","status-playable","playable","2023-03-16 19:31:21.000" +"Calculator - 010004701504A000","010004701504A000","status-playable","playable","2021-06-11 13:27:20.000" +"Rune Factory 5 (JP) - 010014D01216E000","010014D01216E000","gpu;status-ingame","ingame","2021-06-01 12:00:36.000" +"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00","","status-playable;nvdec","playable","2022-09-15 20:45:57.000" +"War Of Stealth - assassin - 01004FA01391A000","01004FA01391A000","status-playable","playable","2021-05-22 17:34:38.000" +"Under Leaves - 01008F3013E4E000","01008F3013E4E000","status-playable","playable","2021-05-22 18:13:58.000" +"Travel Mosaics 7: Fantastic Berlin - ","","status-playable","playable","2021-05-22 18:37:34.000" +"Travel Mosaics 6: Christmas Around the World - 0100D520119D6000","0100D520119D6000","status-playable","playable","2021-05-26 00:52:47.000" +"Travel Mosaics 5: Waltzing Vienna - 01004C4010C00000","01004C4010C00000","status-playable","playable","2021-05-26 11:49:35.000" +"Travel Mosaics 4: Adventures in Rio - 010096D010BFE000","010096D010BFE000","status-playable","playable","2021-05-26 11:54:58.000" +"Travel Mosaics 3: Tokyo Animated - 0100102010BFC000","0100102010BFC000","status-playable","playable","2021-05-26 12:06:27.000" +"Travel Mosaics 2: Roman Holiday - 0100A8D010BFA000","0100A8D010BFA000","status-playable","playable","2021-05-26 12:33:16.000" +"Travel Mosaics: A Paris Tour - 01007DB00A226000","01007DB00A226000","status-playable","playable","2021-05-26 12:42:26.000" +"Rolling Gunner - 010076200CA16000","010076200CA16000","status-playable","playable","2021-05-26 12:54:18.000" +"MotoGP 21 - 01000F5013820000","01000F5013820000","gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested","ingame","2022-10-28 21:35:08.000" +"Little Mouse's Encyclopedia - 0100FE0014200000","0100FE0014200000","status-playable","playable","2022-10-28 19:38:58.000" +"Himehibi 1 gakki - Princess Days - 0100F8D0129F4000","0100F8D0129F4000","status-nothing;crash","nothing","2021-11-03 08:34:19.000" +"Dokapon Up! Mugen no Roulette - 010048100D51A000","010048100D51A000","gpu;status-menus;Needs Update","menus","2022-12-08 19:39:10.000" +"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~ - 01006A300BA2C000","01006A300BA2C000","status-playable;audout","playable","2023-05-04 17:25:23.000" +"Paint (0100946012446000)","0100946012446000","","","2021-05-31 12:57:19.000" +"Knockout City - 01009EF00DDB4000","01009EF00DDB4000","services;status-boots;online-broken","boots","2022-12-09 09:48:58.000" +"Trine 2 - 010064E00A932000","010064E00A932000","nvdec;status-playable","playable","2021-06-03 11:45:20.000" +"Trine 3: The Artifacts of Power - 0100DEC00A934000","0100DEC00A934000","ldn-untested;online;status-playable","playable","2021-06-03 12:01:24.000" +"Jamestown+ - 010000100C4B8000","010000100C4B8000","","","2021-06-05 09:09:39.000" +"Lonely Mountains Downhill - 0100A0C00E0DE000","0100A0C00E0DE000","status-playable;online-broken","playable","2024-07-04 05:08:11.000" +"Densha de go!! Hashirou Yamanote Sen - 0100BC501355A000","0100BC501355A000","status-playable;nvdec;UE4","playable","2023-11-09 07:47:58.000" +"Warui Ohsama to Rippana Yuusha - 0100556011C10000","0100556011C10000","","","2021-06-24 14:22:15.000" +"TONY HAWK'S™ PRO SKATER™ 1 + 2 - 0100CC00102B4000","0100CC00102B4000","gpu;status-ingame;Needs Update","ingame","2024-09-24 08:18:14.000" +"Mario Golf: Super Rush - 0100C9C00E25C000","0100C9C00E25C000","gpu;status-ingame","ingame","2024-08-18 21:31:48.000" +"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版) - 01001AB0141A8000","01001AB0141A8000","crash;status-ingame","ingame","2021-07-18 07:29:18.000" +"LEGO Builder’s Journey - 01005EE0140AE000 ","01005EE0140AE000","","","2021-06-26 21:31:59.000" +"Disgaea 6: Defiance of Destiny - 0100ABC013136000","0100ABC013136000","deadlock;status-ingame","ingame","2023-04-15 00:50:32.000" +"Game Builder Garage - 0100FA5010788000","0100FA5010788000","status-ingame","ingame","2024-04-20 21:46:22.000" +"Miitopia - 01003DA010E8A000","01003DA010E8A000","gpu;services-horizon;status-ingame","ingame","2024-09-06 10:39:13.000" +"DOOM Eternal - 0100B1A00D8CE000","0100B1A00D8CE000","gpu;slow;status-ingame;nvdec;online-broken","ingame","2024-08-28 15:57:17.000" +"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+ - 0100FDB00AA800000","0100FDB00AA80000","gpu;status-ingame;nvdec;opengl","ingame","2022-09-14 15:15:55.000" +"Sky: Children of the Light - 0100C52011460000","0100C52011460000","cpu;status-nothing;online-broken","nothing","2023-02-23 10:57:10.000" +"Tantei bokumetsu 探偵撲滅 - 0100CBA014014000","0100CBA014014000","","","2021-07-11 15:58:42.000" +"The Legend of Heroes: Sen no Kiseki I - 0100AD0014AB4000 (Japan, Asia)","0100AD0014AB4000","","","2021-07-12 11:15:02.000" +"SmileBASIC 4 - 0100C9100B06A000","0100C9100B06A000","gpu;status-menus","menus","2021-07-29 17:35:59.000" +"The Legend of Zelda: Breath of the Wild Demo - 0100509005AF2000","0100509005AF2000","status-ingame;demo","ingame","2022-12-24 05:02:58.000" +"Kanda Alice mo Suiri Suru 神田アリス も 推理スル - 01003BD013E30000","01003BD013E30000","","","2021-07-15 00:30:16.000" +"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi - 01005BA00F486000","01005BA00F486000","status-playable","playable","2021-07-21 10:41:33.000" +"The Legend of Zelda: Skyward Sword HD - 01002DA013484000","01002DA013484000","gpu;status-ingame","ingame","2024-06-14 16:48:29.000" +"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。 - 01004E10142FE000","01004E10142FE000","crash;status-ingame","ingame","2021-07-23 10:56:44.000" +"Suguru Nature - 0100BF9012AC6000","0100BF9012AC6000","crash;status-ingame","ingame","2021-07-29 11:36:27.000" +"Cris Tales - 0100B0400EBC4000","0100B0400EBC4000","crash;status-ingame","ingame","2021-07-29 15:10:53.000" +"Ren'ai, Karichaimashita 恋愛、借りちゃいました - 0100142013cea000","0100142013cea000","","","2021-07-28 00:37:48.000" +"Dai Gyakuten Saiban 1 & 2 -Naruhodou Ryuunosuke no Bouken to Kakugo- - 大逆転裁判1&2 -成歩堂龍ノ介の冒險と覺悟- - 0100D7F00FB1A000","0100D7F00FB1A000","","","2021-07-29 06:38:53.000" +"New Pokémon Snap - 0100F4300BF2C000","0100F4300BF2C000","status-playable","playable","2023-01-15 23:26:57.000" +"Astro Port Shmup Collection - 01000A601139E000","01000A601139E000","","","2021-08-03 13:14:37.000" +"Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600","","services;status-ingame","ingame","2022-07-10 19:27:30.000" +"Picross S GENESIS and Master System edition - ピクロスS MEGA DRIVE & MARKⅢ edition - 010089701567A000","010089701567A000","","","2021-08-10 04:18:06.000" +"ooKing simulator pizza -010033c014666000","010033c014666000","","","2021-08-15 20:49:24.000" +"Everyday♪ Today's MENU for EMIYA Family - 010031B012254000","010031B012254000","","","2021-08-15 19:27:36.000" +"Hatsune Miku Logic Paint S - 0100B4101459A000","0100B4101459A000","","","2021-08-19 00:23:50.000" +"シークレットゲーム KILLER QUEEN for Nintendo Switch","","","","2021-08-21 08:12:41.000" +"リベリオンズ: Secret Game 2nd Stage for Nintendo Switch - 010096000B658000","010096000B658000","","","2021-08-21 08:28:40.000" +"Susanoh -Nihon Shinwa RPG- - スサノオ ~日本神話RPG~ - 0100F3001472A000","0100F3001472A000","","","2021-08-22 04:20:18.000" +"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H - 0100D7E0110B2000","0100D7E0110B2000","32-bit;status-playable","playable","2022-06-06 00:42:09.000" +"World's End Club - 01005A2014362000","01005A2014362000","","","2021-08-28 13:20:14.000" +"Axiom Verge 2","","","","2021-09-02 08:01:30.000" +"Slot - 01007DD011608000","01007DD011608000","","","2021-09-04 01:40:29.000" +"Golf - 01007D8010018000","01007D8010018000","","","2021-09-04 01:55:37.000" +"World Soccer - 010083B00B97A000","010083B00B97A000","","","2021-09-04 02:07:29.000" +"DogFight - 0100E80013BB0000","0100E80013BB0000","","","2021-09-04 14:12:30.000" +"Demon Gaze Extra - デモンゲイズ エクストラ - 01005110142A8000","01005110142A8000","","","2021-09-04 15:06:19.000" +"Spy Alarm - 01000E6015350000","01000E6015350000","services;status-ingame","ingame","2022-12-09 10:12:51.000" +"Rainbocorns - 01005EE0142F6000","01005EE0142F6000","","","2021-09-04 15:53:49.000" +"ZOMB - 0100E2B00E064000","0100E2B00E064000","","","2021-09-04 16:07:19.000" +"Bubble - 01004A4011CB4000","01004A4011CB4000","","","2021-09-04 16:16:24.000" +"Guitar - 0100A2D00EFBE000","0100A2D00EFBE000","","","2021-09-04 18:54:14.000" +"Hunt - 01000DE0125B8000","01000DE0125B8000","","","2021-09-06 11:29:19.000" +"Fight - 0100995013404000","0100995013404000","","","2021-09-06 11:31:42.000" +"Table Tennis - 0100CB00125B6000","0100CB00125B6000","","","2021-09-06 11:55:38.000" +"No More Heroes 3 - 01007C600EB42000","01007C600EB42000","gpu;status-ingame;UE4","ingame","2024-03-11 17:06:19.000" +"Idol Days - 愛怒流でいす - 01002EC014BCA000","01002EC014BCA000","gpu;status-ingame;crash","ingame","2021-12-19 15:31:28.000" +"Checkers - 01001B80124E4000","01001B80124E4000","","","2021-09-06 16:07:24.000" +"King's Bounty II","","","","2021-09-07 21:12:57.000" +"KeyWe - 0100E2B012056000","0100E2B012056000","","","2021-09-07 22:30:10.000" +"Sonic Colors Ultimate [010040E0116B8000]","010040E0116B8000","status-playable","playable","2022-11-12 21:24:26.000" +"SpongeBob: Krusty Cook-Off - 01000D3013E8C000","01000D3013E8C000","","","2021-09-08 13:26:06.000" +"Snakes & Ladders - 010052C00ABFA000","010052C00ABFA000","","","2021-09-08 13:45:26.000" +"Darts - 01005A6010A04000","01005A6010A04000","","","2021-09-08 14:18:00.000" +"Luna's Fishing Garden - 0100374015A2C000","0100374015A2C000","","","2021-09-11 11:38:34.000" +"WarioWare: Get It Together! - 0100563010E0C000","0100563010E0C000","gpu;status-ingame;opengl-backend-bug","ingame","2024-04-23 01:04:56.000" +"SINce Memories Off the starry sky - 0100E94014792000","0100E94014792000","","","2021-09-17 02:03:06.000" +"Bang Dream Girls Band Party for Nintendo Switch","","status-playable","playable","2021-09-19 03:06:58.000" +"ENDER LILIES: Quietus of the Knights - 0100CCF012E9A000","0100CCF012E9A000","","","2021-09-19 01:10:44.000" +"Lost in Random - 01005FE01291A000","01005FE01291A000","gpu;status-ingame","ingame","2022-12-18 07:09:28.000" +"Miyamoto Sansuu Kyoushitsu Kashikoku Naru Puzzle Daizen - 宮本算数教室 賢くなるパズル 大全 - 01004ED014160000","01004ED014160000","","","2021-09-30 12:09:06.000" +"Hot Wheels Unleashed","","","","2021-10-01 01:14:17.000" +"Memories Off - 0100978013276000","0100978013276000","","","2021-10-05 18:50:06.000" +"Blue Reflections Second Light [Demo] [JP] - 01002FA01610A000","01002FA01610A000","","","2021-10-08 09:19:34.000" +"Metroid Dread - 010093801237C000","010093801237C000","status-playable","playable","2023-11-13 04:02:36.000" +"Kentucky Route Zero [0100327005C94000]","0100327005C94000","status-playable","playable","2024-04-09 23:22:46.000" +"Cotton/Guardian Saturn Tribute Games","","gpu;status-boots","boots","2022-11-27 21:00:51.000" +"The Great Ace Attorney Chronicles - 010036E00FB20000","010036E00FB20000","status-playable","playable","2023-06-22 21:26:29.000" +"第六妖守-Dairoku-Di Liu Yao Shou -Dairoku -0100ad80135f4000","0100ad80135f4000","","","2021-10-17 04:42:47.000" +"Touhou Genso Wanderer -Lotus Labyrinth R- - 0100a7a015e4c000","0100a7a015e4c000","","","2021-10-17 20:10:40.000" +"Crysis 2 Remastered - 0100582010AE0000","0100582010AE0000","deadlock;status-menus","menus","2023-09-21 10:46:17.000" +"Crysis 3 Remastered - 0100CD3010AE2000 ","0100CD3010AE2000","deadlock;status-menus","menus","2023-09-10 16:03:50.000" +"Dying Light: Platinum Edition - 01008c8012920000","01008c8012920000","services-horizon;status-boots","boots","2024-03-11 10:43:32.000" +"Steel Assault - 01001C6014772000","01001C6014772000","status-playable","playable","2022-12-06 14:48:30.000" +"Foreclosed - 0100AE001256E000","0100AE001256E000","status-ingame;crash;Needs More Attention;nvdec","ingame","2022-12-06 14:41:12.000" +"Nintendo 64 - Nintendo Switch Online - 0100C9A00ECE6000","0100C9A00ECE6000","gpu;status-ingame;vulkan","ingame","2024-04-23 20:21:07.000" +"Mario Party Superstars - 01006FE013472000","01006FE013472000","gpu;status-ingame;ldn-works;mac-bug","ingame","2024-05-16 11:23:34.000" +"Wheel of Fortune [010033600ADE6000]","010033600ADE6000","status-boots;crash;Needs More Attention;nvdec","boots","2023-11-12 20:29:24.000" +"Abarenbo Tengu & Zombie Nation - 010040E012A5A000","010040E012A5A000","","","2021-10-31 18:24:00.000" +"Eight Dragons - 01003AD013BD2000","01003AD013BD2000","status-playable;nvdec","playable","2022-10-27 14:47:28.000" +"Restless Night [0100FF201568E000]","0100FF201568E000","status-nothing;crash","nothing","2022-02-09 10:54:49.000" +"rRootage Reloaded [01005CD015986000]","01005CD015986000","status-playable","playable","2022-08-05 23:20:18.000" +"Just Dance 2022 - 0100EA6014BB8000","0100EA6014BB8000","gpu;services;status-ingame;crash;Needs Update","ingame","2022-10-28 11:01:53.000" +"LEGO Marvel Super Heroes - 01006F600FFC8000","01006F600FFC8000","status-playable","playable","2024-09-10 19:02:19.000" +"Destructivator SE [0100D74012E0A000]","0100D74012E0A000","","","2021-11-06 14:12:07.000" +"Diablo 2 Resurrected - 0100726014352000","0100726014352000","gpu;status-ingame;nvdec","ingame","2023-08-18 18:42:47.000" +"World War Z [010099F013898000]","010099F013898000","","","2021-11-09 12:00:01.000" +"STAR WARS Jedi Knight II Jedi Outcast - 0100BB500EACA000","0100BB500EACA000","gpu;status-ingame","ingame","2022-09-15 22:51:00.000" +"Shin Megami Tensei V - 010063B012DC6000","010063B012DC6000","status-playable;UE4","playable","2024-02-21 06:30:07.000" +"Mercenaries Rebirth Call of the Wild Lynx - [010031e01627e000]","010031e01627e000","","","2021-11-13 17:14:02.000" +"Summer Pockets REFLECTION BLUE - 0100273013ECA000","0100273013ECA000","","","2021-11-15 14:25:26.000" +"Spelunky - 0100710013ABA000","0100710013ABA000","status-playable","playable","2021-11-20 17:45:03.000" +"Spelunky 2 - 01007EC013ABC000","01007EC013ABC000","","","2021-11-17 19:31:16.000" +"MARSUPILAMI-HOOBADVENTURE - 010074F014628000","010074F014628000","","","2021-11-19 07:43:14.000" +"Pokémon Brilliant Diamond - 0100000011D90000","0100000011D90000","gpu;status-ingame;ldn-works","ingame","2024-08-28 13:26:35.000" +"Ice Station Z - 0100954014718000","0100954014718000","status-menus;crash","menus","2021-11-21 20:02:15.000" +"Shiro - 01000244016BAE000","01000244016BAE00","gpu;status-ingame","ingame","2024-01-13 08:54:39.000" +"Yuru Camp △ Have a nice day! - 0100D12014FC2000","0100D12014FC2000","","","2021-11-29 10:46:03.000" +"Iridium - 010095C016C14000","010095C016C14000","status-playable","playable","2022-08-05 23:19:53.000" +"Black The Fall - 0100502007f54000","0100502007f54000","","","2021-12-05 03:08:22.000" +"Loop Hero - 010004E01523C000","010004E01523C000","","","2021-12-12 18:11:42.000" +"The Battle Cats Unite! - 01001E50141BC000","01001E50141BC000","deadlock;status-ingame","ingame","2021-12-14 21:38:34.000" +"Life is Strange: True Colors [0100500012AB4000]","0100500012AB4000","gpu;status-ingame;UE4","ingame","2024-04-08 16:11:52.000" +"Deathsmiles I・II - 01009120119B4000","01009120119B4000","status-playable","playable","2024-04-08 19:29:00.000" +"Deedlit in Wonder Labyrinth - 0100EF0015A9A000","0100EF0015A9A000","deadlock;status-ingame;Needs Update;Incomplete","ingame","2022-01-19 10:00:59.000" +"Hamidashi Creative - 01006FF014152000","01006FF014152000","gpu;status-ingame","ingame","2021-12-19 15:30:51.000" +"Ys IX: Monstrum Nox - 0100E390124D8000","0100E390124D8000","status-playable","playable","2022-06-12 04:14:42.000" +"Animal Crossing New Horizons Island Transfer Tool - 0100F38011CFE000","0100F38011CFE000","services;status-ingame;Needs Update;Incomplete","ingame","2022-12-07 13:51:19.000" +"Pokémon Mystery Dungeon Rescue Team DX (DEMO) - 010040800FB54000","010040800FB54000","","","2022-01-09 02:15:04.000" +"Monopoly Madness - 01005FF013DC2000","01005FF013DC2000","status-playable","playable","2022-01-29 21:13:52.000" +"DoDonPachi Resurrection - 怒首領蜂大復活 - 01005A001489A000","01005A001489A000","status-ingame;32-bit;crash","ingame","2024-01-25 14:37:32.000" +"Shadow Man Remastered - 0100C3A013840000","0100C3A013840000","gpu;status-ingame","ingame","2024-05-20 06:01:39.000" +"Star Wars - Knights Of The Old Republic - 0100854015868000","0100854015868000","gpu;deadlock;status-boots","boots","2024-02-12 10:13:51.000" +"Gunvolt Chronicles: Luminous Avenger iX 2 - 0100763015C2E000","0100763015C2E000","status-nothing;crash;Needs Update","nothing","2022-04-29 15:34:34.000" +"Furaiki 4 - 風雨来記4 - 010046601125A000","010046601125A000","","","2022-01-27 17:37:47.000" +"Pokémon Legends: Arceus - 01001F5010DFA000","01001F5010DFA000","gpu;status-ingame;Needs Update;ldn-works","ingame","2024-09-19 10:02:02.000" +"Demon Gaze EXTRA - 0100FCC0168FC000","0100FCC0168FC000","","","2022-02-05 16:25:26.000" +"Fatal Frame: Maiden of Black Water - 0100BEB015604000","0100BEB015604000","status-playable","playable","2023-07-05 16:01:40.000" +"OlliOlli World - 0100C5D01128E000","0100C5D01128E000","","","2022-02-08 13:01:22.000" +"Horse Club Adventures - 0100A6B012932000","0100A6B012932000","","","2022-02-10 01:59:25.000" +"Toree 3D (0100E9701479E000)","0100E9701479E000","","","2022-02-15 18:41:33.000" +"Picross S7","","status-playable","playable","2022-02-16 12:51:25.000" +"Nintendo Switch Sports Online Play Test - 01000EE017182000","01000EE017182000","gpu;status-ingame","ingame","2022-03-16 07:44:12.000" +"MLB The Show 22 Tech Test - 0100A9F01776A000","0100A9F01776A000","services;status-nothing;crash;Needs Update;demo","nothing","2022-12-09 10:28:34.000" +"Cruis'n Blast - 0100B41013C82000","0100B41013C82000","gpu;status-ingame","ingame","2023-07-30 10:33:47.000" +"Crunchyroll - 0100C090153B4000","0100C090153B4000","","","2022-02-20 13:56:29.000" +"PUZZLE & DRAGONS Nintendo Switch Edition - 01001D701375A000","01001D701375A000","","","2022-02-20 11:01:34.000" +"Hatsune Miku Connecting Puzzle TAMAGOTORI - 0100118016036000","0100118016036000","","","2022-02-23 02:07:05.000" +"Mononoke Slashdown - 0100F3A00FB78000","0100F3A00FB78000","status-menus;crash","menus","2022-05-04 20:55:47.000" +"Tsukihime - A piece of blue glass moon- - 01001DC01486A800","01001DC01486A800","","","2022-02-28 14:35:38.000" +"Kirby and the Forgotten Land (Demo version) - 010091201605A000","010091201605A000","status-playable;demo","playable","2022-08-21 21:03:01.000" +"Super Zangyura - 01001DA016942000","01001DA016942000","","","2022-03-05 04:54:47.000" +"Atelier Sophie 2: The Alchemist of the Mysterious Dream - 010082A01538E000","010082A01538E000","status-ingame;crash","ingame","2022-12-01 04:34:03.000" +"SEGA Genesis - Nintendo Switch Online - 0100B3C014BDA000","0100B3C014BDA000","status-nothing;crash;regression","nothing","2022-04-11 07:27:21.000" +"TRIANGLE STRATEGY - 0100CC80140F8000","0100CC80140F8000","gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug","ingame","2024-09-25 20:48:37.000" +"Pretty Girls Breakers! - 0100DD2017994000","0100DD2017994000","","","2022-03-10 03:43:51.000" +"Chocobo GP - 01006A30124CA000","01006A30124CA000","gpu;status-ingame;crash","ingame","2022-06-04 14:52:18.000" +".hack//G.U. Last Recode - 0100BA9014A02000","0100BA9014A02000","deadlock;status-boots","boots","2022-03-12 19:15:47.000" +"Monster World IV - 01008CF014560000","01008CF014560000","","","2022-03-12 04:25:01.000" +"Cosmos Bit - 01004810171EA000","01004810171EA000","","","2022-03-12 04:25:58.000" +"The Cruel King and the Great Hero - 0100EBA01548E000","0100EBA01548E000","gpu;services;status-ingame","ingame","2022-12-02 07:02:08.000" +"Lateral Freeze ","","","","2022-03-15 16:00:18.000" +"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath Demo - 0100FA7017CA6000","0100FA7017CA6000","","","2022-03-19 07:26:02.000" +"Neptunia X SENRAN KAGURA Ninja Wars - 01006D90165A2000","01006D90165A2000","","","2022-03-21 06:58:28.000" +"13 Sentinels Aegis Rim Demo - 0100C54015002000","0100C54015002000","status-playable;demo","playable","2022-04-13 14:15:48.000" +"Kirby and the Forgotten Land - 01004D300C5AE000","01004D300C5AE000","gpu;status-ingame","ingame","2024-03-11 17:11:21.000" +"Love of Love Emperor of LOVE! - 010015C017776000","010015C017776000","","","2022-03-25 08:46:23.000" +"Hatsune Miku JIGSAW PUZZLE - 010092E016B26000","010092E016B26000","","","2022-03-25 08:49:39.000" +"The Ryuo's Work is Never Done! - 010033100EE12000","010033100EE12000","status-playable","playable","2022-03-29 00:35:37.000" +"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath - 01005AB015994000","01005AB015994000","gpu;status-playable","playable","2022-03-28 02:22:24.000" +"MLB® The Show™ 22 - 0100876015D74000","0100876015D74000","gpu;slow;status-ingame","ingame","2023-04-25 06:28:43.000" +"13 Sentinels Aegis Rim - 01003FC01670C000","01003FC01670C000","slow;status-ingame","ingame","2024-06-10 20:33:38.000" +"Metal Dogs ","","","","2022-04-15 14:32:19.000" +"STAR WARS: The Force Unleashed - 0100153014544000","0100153014544000","status-playable","playable","2024-05-01 17:41:28.000" +"JKSV - 00000000000000000","0000000000000000","","","2022-04-21 23:34:59.000" +"Jigsaw Masterpieces - 0100BB800E0D2000","0100BB800E0D2000","","","2022-05-04 21:14:45.000" +"QuickSpot - 0100E4501677E000","0100E4501677E000","","","2022-05-04 21:14:48.000" +"Yomawari 3 - 0100F47016F26000","0100F47016F26000","status-playable","playable","2022-05-10 08:26:51.000" +"Marco & The Galaxy Dragon Demo - 0100DA7017C9E000","0100DA7017C9E000","gpu;status-ingame;demo","ingame","2023-06-03 13:05:33.000" +"Demon Turf: Neon Splash - 010010C017B28000","010010C017B28000","","","2022-05-04 21:35:59.000" +"Taiko Risshiden V DX - 0100346017304000","0100346017304000","status-nothing;crash","nothing","2022-06-06 16:25:31.000" +"The Stanley Parable: Ultra Deluxe - 010029300E5C4000","010029300E5C4000","gpu;status-ingame","ingame","2024-07-12 23:18:26.000" +"CHAOS;HEAD NOAH - 0100957016B90000","0100957016B90000","status-playable","playable","2022-06-02 22:57:19.000" +"LOOPERS - 010062A0178A8000","010062A0178A8000","gpu;slow;status-ingame;crash","ingame","2022-06-17 19:21:45.000" +"二ノ国 白き聖灰の女王 - 010032400E700000","010032400E700000","services;status-menus;32-bit","menus","2023-04-16 17:11:06.000" +"even if TEMPEST - 010095E01581C000","010095E01581C000","gpu;status-ingame","ingame","2023-06-22 23:50:25.000" +"Mario Strikers Battle League Football First Kick [01008A30182F2000]","01008A30182F2000","","","2022-06-09 20:58:06.000" +"Mario Strikers: Battle League Football - 010019401051C000","010019401051C000","status-boots;crash;nvdec","boots","2024-05-07 06:23:56.000" +"鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles - 0100309016E7A000","0100309016E7A000","status-playable;UE4","playable","2024-08-08 04:51:49.000" +"Teenage Mutant Ninja Turtles: Shredder's Revenge - 0100FE701475A000","0100FE701475A000","deadlock;status-boots;crash","boots","2024-09-28 09:31:39.000" +"MOFUMOFU Sensen - 0100B46017500000","0100B46017500000","gpu;status-menus","menus","2024-09-21 21:51:08.000" +"OMORI - 010014E017B14000","010014E017B14000","status-playable","playable","2023-01-07 20:21:02.000" +"30 in 1 game collection vol. 2 - 0100DAC013D0A000","0100DAC013D0A000","status-playable;online-broken","playable","2022-10-15 17:22:27.000" +"索尼克:起源 / Sonic Origins - 01009FB016286000","01009FB016286000","status-ingame;crash","ingame","2024-06-02 07:20:15.000" +"Fire Emblem Warriors: Three Hopes - 010071F0143EA000","010071F0143EA000","gpu;status-ingame;nvdec","ingame","2024-05-01 07:07:42.000" +"LEGO Star Wars: The Skywalker Saga - 010042D00D900000","010042D00D900000","gpu;slow;status-ingame","ingame","2024-04-13 20:08:46.000" +"Pocky & Rocky Reshrined - 01000AF015596000","01000AF015596000","","","2022-06-26 21:34:16.000" +"Horgihugh And Friends - 010085301797E000","010085301797E000","","","2022-06-26 21:34:22.000" +"The movie The Quintessential Bride -Five Memories Spent with You- - 01005E9016BDE000","01005E9016BDE000","status-playable","playable","2023-12-14 14:43:43.000" +"nx-hbmenu - 0000000000000000","0000000000000000","status-boots;Needs Update;homebrew","boots","2024-04-06 22:05:32.000" +"Portal 2 - 0100ABD01785C000","0100ABD01785C000","gpu;status-ingame","ingame","2023-02-20 22:44:15.000" +"Portal - 01007BB017812000","01007BB017812000","status-playable","playable","2024-06-12 03:48:29.000" +"EVE ghost enemies - 01007BE0160D6000","01007BE0160D6000","gpu;status-ingame","ingame","2023-01-14 03:13:30.000" +"PowerSlave Exhumed - 01008E100E416000","01008E100E416000","gpu;status-ingame","ingame","2023-07-31 23:19:10.000" +"Quake - 0100BA5012E54000","0100BA5012E54000","gpu;status-menus;crash","menus","2022-08-08 12:40:34.000" +"Rustler - 010071E0145F8000","010071E0145F8000","","","2022-07-06 02:09:18.000" +"Colors Live - 010020500BD86000","010020500BD86000","gpu;services;status-boots;crash","boots","2023-02-26 02:51:07.000" +"WAIFU IMPACT - 0100393016D7E000","0100393016D7E000","","","2022-07-08 22:16:51.000" +"Sherlock Holmes: The Devil's Daughter - 010020F014DBE000","010020F014DBE000","gpu;status-ingame","ingame","2022-07-11 00:07:26.000" +"0100EE40143B6000 - Fire Emblem Warriors: Three Hopes (Japan) ","0100EE40143B6000","","","2022-07-11 18:41:30.000" +"Wunderling - 01001C400482C000","01001C400482C000","audio;status-ingame;crash","ingame","2022-09-10 13:20:12.000" +"SYNTHETIK: Ultimate - 01009BF00E7D2000","01009BF00E7D2000","gpu;status-ingame;crash","ingame","2022-08-30 03:19:25.000" +"Breakout: Recharged - 010022C016DC8000","010022C016DC8000","slow;status-ingame","ingame","2022-11-06 15:32:57.000" +"Banner Saga Trilogy - 0100CE800B94A000","0100CE800B94A000","slow;status-playable","playable","2024-03-06 11:25:20.000" +"CAPCOM BELT ACTION COLLECTION - 0100F6400A77E000","0100F6400A77E000","status-playable;online;ldn-untested","playable","2022-07-21 20:51:23.000" +"死神と少女/Shinigami to Shoujo - 0100AFA01750C000","0100AFA01750C000","gpu;status-ingame;Incomplete","ingame","2024-03-22 01:06:45.000" +"Darius Cozmic Collection Special Edition - 010059C00BED4000","010059C00BED4000","status-playable","playable","2022-07-22 16:26:50.000" +"Earthworms - 0100DCE00B756000","0100DCE00B756000","status-playable","playable","2022-07-25 16:28:55.000" +"LIVE A LIVE - 0100CF801776C000","0100CF801776C000","status-playable;UE4;amd-vendor-bug","playable","2023-02-05 15:12:07.000" +"Fit Boxing - 0100807008868000 ","0100807008868000","status-playable","playable","2022-07-26 19:24:55.000" +"Gurimugurimoa OnceMore Demo - 01002C8018554000","01002C8018554000","status-playable","playable","2022-07-29 22:07:31.000" +"Trinity Trigger Demo - 010048201891A000","010048201891A000","","","2022-07-26 23:32:10.000" +"SD GUNDAM BATTLE ALLIANCE Demo - 0100829018568000","0100829018568000","audio;status-ingame;crash;demo","ingame","2022-08-01 23:01:20.000" +"Fortnite - 010025400AECE000","010025400AECE000","services-horizon;status-nothing","nothing","2024-04-06 18:23:25.000" +"Furi Definitive Edition - 01000EC00AF98000","01000EC00AF98000","status-playable","playable","2022-07-27 12:35:08.000" +"Jackbox Party Starter - 0100814017CB6000","0100814017CB6000","Incomplete","","2022-07-29 22:18:07.000" +"Digimon Survive - 010047500B7B2000","010047500B7B2000","","","2022-07-29 12:33:28.000" +"Xenoblade Chronicles 3 - 010074F013262000","010074F013262000","gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug","ingame","2024-08-06 19:56:44.000" +"Slime Rancher: Plortable Edition - 0100B9C0148D0000","0100B9C0148D0000","","","2022-07-30 06:02:55.000" +"Lost Ruins - 01008AD013A86800","01008AD013A86800","gpu;status-ingame","ingame","2023-02-19 14:09:00.000" +"Heroes of Hammerwatch - 0100D2B00BC54000","0100D2B00BC54000","status-playable","playable","2022-08-01 18:30:21.000" +"Zombie Army 4: Dead War - ","","","","2022-08-01 20:03:53.000" +"Plague Inc: Evolved - 01000CE00CBB8000","01000CE00CBB8000","","","2022-08-02 02:32:33.000" +"Kona - 0100464009294000","0100464009294000","status-playable","playable","2022-08-03 12:48:19.000" +"Minecraft: Story Mode - The Complete Adventure - 010059C002AC2000","010059C002AC2000","status-boots;crash;online-broken","boots","2022-08-04 18:56:58.000" +"LA-MULANA - 010026000F662800","010026000F662800","gpu;status-ingame","ingame","2022-08-12 01:06:21.000" +"Minecraft: Story Mode - Season Two - 01003EF007ABA000","01003EF007ABA000","status-playable;online-broken","playable","2023-03-04 00:30:50.000" +"My Riding Stables - Life with Horses - 010028F00ABAE000","010028F00ABAE000","status-playable","playable","2022-08-05 21:39:07.000" +"NBA Playgrounds - 010002900294A000","010002900294A000","status-playable;nvdec;online-broken;UE4","playable","2022-08-06 17:06:59.000" +"Nintendo Labo Toy-Con 02: Robot Kit - 01009AB0034E0000","01009AB0034E0000","gpu;status-ingame","ingame","2022-08-07 13:03:19.000" +"Nintendo Labo Toy-Con 04: VR Kit - 0100165003504000","0100165003504000","services;status-boots;crash","boots","2023-01-17 22:30:24.000" +"Azure Striker GUNVOLT 3 - 01004E90149AA000","01004E90149AA000","status-playable","playable","2022-08-10 13:46:49.000" +"Clumsy Rush Ultimate Guys - 0100A8A0174A4000","0100A8A0174A4000","","","2022-08-10 02:12:29.000" +"The DioField Chronicle Demo - 01009D901624A000","01009D901624A000","","","2022-08-10 02:18:16.000" +"Professional Construction - The Simulation - 0100A9800A1B6000","0100A9800A1B6000","slow;status-playable","playable","2022-08-10 15:15:45.000" +"Pokémon: Let's Go, Pikachu! demo - 01009AD008C4C000","01009AD008C4C000","slow;status-playable;demo","playable","2023-11-26 11:23:20.000" +"Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000","0100069000078000","services;status-nothing;crash","nothing","2022-08-11 13:19:41.000" +"Retimed - 010086E00BCB2000","010086E00BCB2000","status-playable","playable","2022-08-11 13:32:39.000" +"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET - 010051C0134F8000","010051C0134F8000","status-playable;vulkan-backend-bug","playable","2024-08-28 00:03:50.000" +"Runbow Deluxe Edition - 0100D37009B8A000","0100D37009B8A000","status-playable;online-broken","playable","2022-08-12 12:20:25.000" +"Saturday Morning RPG - 0100F0000869C000","0100F0000869C000","status-playable;nvdec","playable","2022-08-12 12:41:50.000" +"Slain Back from Hell - 0100BB100AF4C000","0100BB100AF4C000","status-playable","playable","2022-08-12 23:36:19.000" +"Spidersaurs - 010040B017830000","010040B017830000","","","2022-08-14 03:12:30.000" +"月姫 -A piece of blue glass moon- - 01001DC01486A000","01001DC01486A000","","","2022-08-15 15:41:29.000" +"Spacecats with Lasers - 0100D9B0041CE000","0100D9B0041CE000","status-playable","playable","2022-08-15 17:22:44.000" +"Spellspire - 0100E74007EAC000","0100E74007EAC000","status-playable","playable","2022-08-16 11:21:21.000" +"Spot The Difference - 0100E04009BD4000","0100E04009BD4000","status-playable","playable","2022-08-16 11:49:52.000" +"Spot the Differences: Party! - 010052100D1B4000","010052100D1B4000","status-playable","playable","2022-08-16 11:55:26.000" +"Demon Throttle - 01001DA015650000","01001DA015650000","","","2022-08-17 00:54:49.000" +"Kirby’s Dream Buffet - 0100A8E016236000","0100A8E016236000","status-ingame;crash;online-broken;Needs Update;ldn-works","ingame","2024-03-03 17:04:44.000" +"DOTORI - 0100DBD013C92000","0100DBD013C92000","","","2022-08-17 15:10:52.000" +"Syberia 2 - 010028C003FD6000","010028C003FD6000","gpu;status-ingame","ingame","2022-08-24 12:43:03.000" +"Drive Buy - 010093A0108DC000","010093A0108DC000","","","2022-08-21 03:30:18.000" +"Taiko no Tatsujin Rhythm Festival Demo - 0100AA2018846000","0100AA2018846000","","","2022-08-22 23:31:57.000" +"Splatoon 3: Splatfest World Premiere - 0100BA0018500000","0100BA0018500000","gpu;status-ingame;online-broken;demo","ingame","2022-09-19 03:17:12.000" +"Transcripted - 010009F004E66000","010009F004E66000","status-playable","playable","2022-08-25 12:13:11.000" +"eBaseball Powerful Pro Yakyuu 2022 - 0100BCA016636000","0100BCA016636000","gpu;services-horizon;status-nothing;crash","nothing","2024-05-26 23:07:19.000" +"Firegirl: Hack 'n Splash Rescue DX - 0100DAF016D48000","0100DAF016D48000","","","2022-08-30 15:32:22.000" +"Little Noah: Scion of Paradise - 0100535014D76000","0100535014D76000","status-playable;opengl-backend-bug","playable","2022-09-14 04:17:13.000" +"Tinykin - 0100A73016576000","0100A73016576000","gpu;status-ingame","ingame","2023-06-18 12:12:24.000" +"Youtubers Life - 00100A7700CCAA4000","00100A7700CCAA40","status-playable;nvdec","playable","2022-09-03 14:56:19.000" +"Cozy Grove - 01003370136EA000","01003370136EA000","gpu;status-ingame","ingame","2023-07-30 22:22:19.000" +"A Duel Hand Disaster: Trackher - 010026B006802000","010026B006802000","status-playable;nvdec;online-working","playable","2022-09-04 14:24:55.000" +"Angry Bunnies: Colossal Carrot Crusade - 0100F3500D05E000","0100F3500D05E000","status-playable;online-broken","playable","2022-09-04 14:53:26.000" +"CONTRA: ROGUE CORPS Demo - 0100B8200ECA6000","0100B8200ECA6000","gpu;status-ingame","ingame","2022-09-04 16:46:52.000" +"The Gardener and the Wild Vines - 01006350148DA000","01006350148DA000","gpu;status-ingame","ingame","2024-04-29 16:32:10.000" +"HAAK - 0100822012D76000","0100822012D76000","gpu;status-ingame","ingame","2023-02-19 14:31:05.000" +"Temtem - 0100C8B012DEA000","0100C8B012DEA000","status-menus;online-broken","menus","2022-12-17 17:36:11.000" +"Oniken - 010057C00D374000","010057C00D374000","status-playable","playable","2022-09-10 14:22:38.000" +"Ori and the Blind Forest: Definitive Edition Demo - 010005800F46E000","010005800F46E000","status-playable","playable","2022-09-10 14:40:12.000" +"Spyro Reignited Trilogy - 010077B00E046000","010077B00E046000","status-playable;nvdec;UE4","playable","2022-09-11 18:38:33.000" +"Disgaea 4 Complete+ Demo - 010068C00F324000","010068C00F324000","status-playable;nvdec","playable","2022-09-13 15:21:59.000" +"Disney Classic Games: Aladdin and The Lion King - 0100A2F00EEFC000 ","0100A2F00EEFC000","status-playable;online-broken","playable","2022-09-13 15:44:17.000" +"Pokémon Shield - 01008DB008C2C000","01008DB008C2C000","deadlock;status-ingame;crash;online-broken;ldn-works;LAN","ingame","2024-08-12 07:20:22.000" +"Shadowrun Returns - 0100371013B3E000","0100371013B3E000","gpu;status-ingame;Needs Update","ingame","2022-10-04 21:32:31.000" +"Shadowrun: Dragonfall - Director's Cut - 01008310154C4000","01008310154C4000","gpu;status-ingame;Needs Update","ingame","2022-10-04 20:52:18.000" +"Shadowrun: Hong Kong - Extended Edition - 0100C610154CA000","0100C610154CA000","gpu;status-ingame;Needs Update","ingame","2022-10-04 20:53:09.000" +"Animal Drifters - 010057F0195DE000","010057F0195DE000","","","2022-09-20 21:43:54.000" +"Paddles - 0100F5E019300000","0100F5E019300000","","","2022-09-20 21:46:00.000" +"River City Girls Zero - 0100E2D015DEA000","0100E2D015DEA000","","","2022-09-20 22:18:30.000" +"JoJos Bizarre Adventure All-Star Battle R - 01008120128C2000","01008120128C2000","status-playable","playable","2022-12-03 10:45:10.000" +"OneShot: World Machine EE","","","","2022-09-22 08:11:47.000" +"Taiko no Tatsujin: Rhythm Festival - 0100BCA0135A0000","0100BCA0135A0000","status-playable","playable","2023-11-13 13:16:34.000" +"Trinity Trigger - 01002D7010A54000","01002D7010A54000","status-ingame;crash","ingame","2023-03-03 03:09:09.000" +"太鼓之達人 咚咚雷音祭 - 01002460135a4000","01002460135a4000","","","2022-09-27 07:17:54.000" +"Life is Strange Remastered - 0100DC301186A000","0100DC301186A000","status-playable;UE4","playable","2022-10-03 16:54:44.000" +"Life is Strange: Before the Storm Remastered - 010008501186E000","010008501186E000","status-playable","playable","2023-09-28 17:15:44.000" +"Hatsune Miku: Project DIVA Mega Mix - 01001CC00FA1A000","01001CC00FA1A000","audio;status-playable;online-broken","playable","2024-01-07 23:12:57.000" +"Shovel Knight Dig - 0100B62017E68000","0100B62017E68000","","","2022-09-30 20:51:35.000" +"Couch Co-Op Bundle Vol. 2 - 01000E301107A000","01000E301107A000","status-playable;nvdec","playable","2022-10-02 12:04:21.000" +"Shadowverse: Champion’s Battle - 01003B90136DA000","01003B90136DA000","status-nothing;crash","nothing","2023-03-06 00:31:50.000" +"Jinrui no Ninasama he - 0100F4D00D8BE000","0100F4D00D8BE000","status-ingame;crash","ingame","2023-03-07 02:04:17.000" +"XEL - 0100CC9015360000","0100CC9015360000","gpu;status-ingame","ingame","2022-10-03 10:19:39.000" +"Catmaze - 01000A1018DF4000","01000A1018DF4000","","","2022-10-03 11:10:48.000" +"Lost Lands: Dark Overlord - 0100BDD010AC8000 ","0100BDD010AC8000","status-playable","playable","2022-10-03 11:52:58.000" +"STAR WARS Episode I: Racer - 0100BD100FFBE000 ","0100BD100FFBE000","slow;status-playable;nvdec","playable","2022-10-03 16:08:36.000" +"Story of Seasons: Friends of Mineral Town - 0100ED400EEC2000","0100ED400EEC2000","status-playable","playable","2022-10-03 16:40:31.000" +"Collar X Malice -Unlimited- - 0100E3B00F412000 ","0100E3B00F412000","status-playable;nvdec","playable","2022-10-04 15:30:40.000" +"Bullet Soul - 0100DA4017FC2000","0100DA4017FC2000","","","2022-10-05 09:41:49.000" +"Kwaidan ~Azuma manor story~ - 0100894011F62000 ","0100894011F62000","status-playable","playable","2022-10-05 12:50:44.000" +"Shantae: Risky's Revenge - Director's Cut - 0100ADA012370000","0100ADA012370000","status-playable","playable","2022-10-06 20:47:39.000" +"NieR:Automata The End of YoRHa Edition - 0100B8E016F76000","0100B8E016F76000","slow;status-ingame;crash","ingame","2024-05-17 01:06:34.000" +"Star Seeker: The secret of the sourcerous Standoff - 0100DFC018D86000","0100DFC018D86000","","","2022-10-09 15:46:05.000" +"Hyrule Warriors: Age of Calamity - Demo Version - 0100A2C01320E000","0100A2C01320E000","slow;status-playable","playable","2022-10-10 17:37:41.000" +"My Universe - Fashion Boutique - 0100F71011A0A000","0100F71011A0A000","status-playable;nvdec","playable","2022-10-12 14:54:19.000" +"Star Trek Prodigy: Supernova - 01009DF015776000","01009DF015776000","status-playable;nvdec;UE4;opengl-backend-bug","playable","2022-10-14 10:18:50.000" +"Dungeon Nightmares 1 + 2 Collection - 0100926013600000","0100926013600000","status-playable","playable","2022-10-17 18:54:22.000" +"Food Truck Tycoon - 0100F3900D0F0000 ","0100F3900D0F0000","status-playable","playable","2022-10-17 20:15:55.000" +"Persona 5 Royal - 01005CA01580EOO","","","","2022-10-17 21:00:21.000" +"Nintendo Switch Sports - 0100D2F00D5C0000","0100D2F00D5C0000","deadlock;status-boots","boots","2024-09-10 14:20:24.000" +"Grim Legends 2: Song Of The Dark Swan - 010078E012D80000","010078E012D80000","status-playable;nvdec","playable","2022-10-18 12:58:45.000" +"My Universe - Cooking Star Restaurant - 0100CD5011A02000","0100CD5011A02000","status-playable","playable","2022-10-19 10:00:44.000" +"Not Tonight - 0100DAF00D0E2000 ","0100DAF00D0E2000","status-playable;nvdec","playable","2022-10-19 11:48:47.000" +"Outbreak: The New Nightmare - 0100B450130FC000","0100B450130FC000","status-playable","playable","2022-10-19 15:42:07.000" +"Alan Wake Remaster - 01000623017A58000","01000623017A5800","","","2022-10-21 06:13:39.000" +"Persona 5 Royal - 01005CA01580E000","01005CA01580E000","gpu;status-ingame","ingame","2024-08-17 21:45:15.000" +"Shing! (サムライフォース:斬!) - 01009050133B4000","01009050133B4000","status-playable;nvdec","playable","2022-10-22 00:48:54.000" +"Mario + Rabbids® Sparks of Hope - 0100317013770000","0100317013770000","gpu;status-ingame;Needs Update","ingame","2024-06-20 19:56:19.000" +"3D Arcade Fishing - 010010C013F2A000","010010C013F2A000","status-playable","playable","2022-10-25 21:50:51.000" +"Aerial Knight's Never Yield - 0100E9B013D4A000","0100E9B013D4A000","status-playable","playable","2022-10-25 22:05:00.000" +"Aluna: Sentinel of the Shards - 010045201487C000","010045201487C000","status-playable;nvdec","playable","2022-10-25 22:17:03.000" +"Atelier Firis: The Alchemist and the Mysterious Journey DX - 010023201421E000","010023201421E000","gpu;status-ingame;nvdec","ingame","2022-10-25 22:46:19.000" +"Atelier Sophie: The Alchemist of the Mysterious Book DX - 01001A5014220000","01001A5014220000","status-playable","playable","2022-10-25 23:06:20.000" +"Backworlds - 0100FEA014316000","0100FEA014316000","status-playable","playable","2022-10-25 23:20:34.000" +"Bakumatsu Renka SHINSENGUMI - 01008260138C4000","01008260138C4000","status-playable","playable","2022-10-25 23:37:31.000" +"Bamerang - 01008D30128E0000","01008D30128E0000","status-playable","playable","2022-10-26 00:29:39.000" +"Battle Axe - 0100747011890000","0100747011890000","status-playable","playable","2022-10-26 00:38:01.000" +"Beautiful Desolation - 01006B0014590000","01006B0014590000","gpu;status-ingame;nvdec","ingame","2022-10-26 10:34:38.000" +"Bladed Fury - 0100DF0011A6A000","0100DF0011A6A000","status-playable","playable","2022-10-26 11:36:26.000" +"Boris The Rocket - 010092C013FB8000","010092C013FB8000","status-playable","playable","2022-10-26 13:23:09.000" +"BraveMatch - 010081501371E000","010081501371E000","status-playable;UE4","playable","2022-10-26 13:32:15.000" +"Brawl Chess - 010068F00F444000","010068F00F444000","status-playable;nvdec","playable","2022-10-26 13:59:17.000" +"CLANNAD Side Stories - 01007B01372C000","","status-playable","playable","2022-10-26 15:03:04.000" +"DC Super Hero Girls™: Teen Power - 0100F8F00C4F2000","0100F8F00C4F2000","nvdec","","2022-10-26 15:16:47.000" +"Devil Slayer - Raksasi - 01003C900EFF6000","01003C900EFF6000","status-playable","playable","2022-10-26 19:42:32.000" +"Disagaea 6: Defiance of Destiny Demo - 0100918014B02000","0100918014B02000","status-playable;demo","playable","2022-10-26 20:02:04.000" +"DreamWorks Spirit Lucky's Big Adventure - 0100236011B4C000","0100236011B4C000","status-playable","playable","2022-10-27 13:30:52.000" +"Dull Grey - 010068D0141F2000","010068D0141F2000","status-playable","playable","2022-10-27 13:40:38.000" +"Dunk Lords - 0100EC30140B6000","0100EC30140B6000","status-playable","playable","2024-06-26 00:07:26.000" +"Earth Defense Force: World Brothers - 0100298014030000","0100298014030000","status-playable;UE4","playable","2022-10-27 14:13:31.000" +"EQI - 01000FA0149B6000","01000FA0149B6000","status-playable;nvdec;UE4","playable","2022-10-27 16:42:32.000" +"Exodemon - 0100A82013976000","0100A82013976000","status-playable","playable","2022-10-27 20:17:52.000" +"Famicom Detective Club: The Girl Who Stands Behind - 0100D670126F6000","0100D670126F6000","status-playable;nvdec","playable","2022-10-27 20:41:40.000" +"Famicom Detective Club: The Missing Heir - 010033F0126F4000","010033F0126F4000","status-playable;nvdec","playable","2022-10-27 20:56:23.000" +"Fighting EX Layer Another Dash - 0100D02014048000","0100D02014048000","status-playable;online-broken;UE4","playable","2024-04-07 10:22:33.000" +"Fire: Ungh's Quest - 010025C014798000","010025C014798000","status-playable;nvdec","playable","2022-10-27 21:41:26.000" +"Haunted Dawn: The Zombie Apocalypse - 01009E6014F18000","01009E6014F18000","status-playable","playable","2022-10-28 12:31:51.000" +"Yomawari: The Long Night Collection - 010043D00BA3200","","Incomplete","","2022-10-29 10:23:17.000" +"Splatoon 3 - 0100C2500FC20000","0100C2500FC20000","status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug","playable","2024-08-04 23:49:11.000" +"Bayonetta 3 - 01004A4010FEA000","01004A4010FEA000","gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC","ingame","2024-09-28 14:34:33.000" +"Instant Sports Tennis - 010031B0145B8000","010031B0145B8000","status-playable","playable","2022-10-28 16:42:17.000" +"Just Die Already - 0100AC600CF0A000","0100AC600CF0A000","status-playable;UE4","playable","2022-12-13 13:37:50.000" +"King of Seas Demo - 0100515014A94000","0100515014A94000","status-playable;nvdec;UE4","playable","2022-10-28 18:09:31.000" +"King of Seas - 01008D80148C8000","01008D80148C8000","status-playable;nvdec;UE4","playable","2022-10-28 18:29:41.000" +"Layers of Fear 2 - 01001730144DA000","01001730144DA000","status-playable;nvdec;UE4","playable","2022-10-28 18:49:52.000" +"Leisure Suit Larry - Wet Dreams Dry Twice - 010031A0135CA000","010031A0135CA000","status-playable","playable","2022-10-28 19:00:57.000" +"Life of Fly 2 - 010069A01506E000","010069A01506E000","slow;status-playable","playable","2022-10-28 19:26:52.000" +"Maneater - 010093D00CB22000","010093D00CB22000","status-playable;nvdec;UE4","playable","2024-05-21 16:11:57.000" +"Mighty Goose - 0100AD701344C000","0100AD701344C000","status-playable;nvdec","playable","2022-10-28 20:25:38.000" +"Missing Features 2D - 0100E3601495C000","0100E3601495C000","status-playable","playable","2022-10-28 20:52:54.000" +"Moorkuhn Kart 2 - 010045C00F274000","010045C00F274000","status-playable;online-broken","playable","2022-10-28 21:10:35.000" +"NINJA GAIDEN 3: Razor's Edge - 01002AF014F4C000","01002AF014F4C000","status-playable;nvdec","playable","2023-08-11 08:25:31.000" +"Nongunz: Doppelganger Edition - 0100542012884000","0100542012884000","status-playable","playable","2022-10-29 12:00:39.000" +"O---O - 01002E6014FC4000","01002E6014FC4000","status-playable","playable","2022-10-29 12:12:14.000" +"Off And On Again - 01006F5013202000","01006F5013202000","status-playable","playable","2022-10-29 19:46:26.000" +"Outbreak: Endless Nightmares - 0100A0D013464000","0100A0D013464000","status-playable","playable","2022-10-29 12:35:49.000" +"Picross S6 - 010025901432A000","010025901432A000","status-playable","playable","2022-10-29 17:52:19.000" +"Alfred Hitchcock - Vertigo - 0100DC7013F14000","0100DC7013F14000","","","2022-10-30 07:55:43.000" +"Port Royale 4 - 01007EF013CA0000","01007EF013CA0000","status-menus;crash;nvdec","menus","2022-10-30 14:34:06.000" +"Quantum Replica - 010045101288A000","010045101288A000","status-playable;nvdec;UE4","playable","2022-10-30 21:17:22.000" +"R-TYPE FINAL 2 - 0100F930136B6000","0100F930136B6000","slow;status-ingame;nvdec;UE4","ingame","2022-10-30 21:46:29.000" +"Retrograde Arena - 01000ED014A2C000","01000ED014A2C000","status-playable;online-broken","playable","2022-10-31 13:38:58.000" +"Rising Hell - 010020C012F48000","010020C012F48000","status-playable","playable","2022-10-31 13:54:02.000" +"Grand Theft Auto III - The Definitive Edition [0100C3C012718000]","0100C3C012718000","","","2022-10-31 20:13:51.000" +"Grand Theft Auto: San Andreas - The Definitive Edition [010065A014024000]","010065A014024000","","","2022-10-31 20:13:56.000" +"Hell Pie - 01000938017E5C000","01000938017E5C00","status-playable;nvdec;UE4","playable","2022-11-03 16:48:46.000" +"Zengeon - 0100057011E50000","0100057011E50000","services-horizon;status-boots;crash","boots","2024-04-29 15:43:07.000" +"Teenage Mutant Ninja Turtles: The Cowabunga Collection - 0100FDB0154E4000","0100FDB0154E4000","status-playable","playable","2024-01-22 19:39:04.000" +"Rolling Sky 2 - 0100579011B40000 ","0100579011B40000","status-playable","playable","2022-11-03 10:21:12.000" +"RWBY: Grimm Eclipse - 0100E21013908000","0100E21013908000","status-playable;online-broken","playable","2022-11-03 10:44:01.000" +"Shin Megami Tensei III Nocturne HD Remaster - 01003B0012DC2000","01003B0012DC2000","status-playable","playable","2022-11-03 22:53:27.000" +"BALDO THE GUARDIAN OWLS - 0100a75005e92000","0100a75005e92000","","","2022-11-04 06:36:18.000" +"Skate City - 0100134011E32000","0100134011E32000","status-playable","playable","2022-11-04 11:37:39.000" +"SnowRunner - 0100FBD13AB6000","","services;status-boots;crash","boots","2023-10-07 00:01:16.000" +"Spooky Chase - 010097C01336A000","010097C01336A000","status-playable","playable","2022-11-04 12:17:44.000" +"Strange Field Football - 01000A6013F86000","01000A6013F86000","status-playable","playable","2022-11-04 12:25:57.000" +"Subnautica Below Zero - 010014C011146000","010014C011146000","status-playable","playable","2022-12-23 14:15:13.000" +"Subnautica - 0100429011144000","0100429011144000","status-playable;vulkan-backend-bug","playable","2022-11-04 13:07:29.000" +"Pyramid Quest - 0100A4E017372000","0100A4E017372000","gpu;status-ingame","ingame","2023-08-16 21:14:52.000" +"Sonic Frontiers - 01004AD014BF0000","01004AD014BF0000","gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug","ingame","2024-09-05 09:18:53.000" +"Metro 2033 Redux - 0100D4900E82C000","0100D4900E82C000","gpu;status-ingame","ingame","2022-11-09 10:53:13.000" +"Tactics Ogre Reborn - 0100E12013C1A000","0100E12013C1A000","status-playable;vulkan-backend-bug","playable","2024-04-09 06:21:35.000" +"Good Night, Knight - 01003AD0123A2000","01003AD0123A2000","status-nothing;crash","nothing","2023-07-30 23:38:13.000" +"Sumire - 01003D50126A4000","01003D50126A4000","status-playable","playable","2022-11-12 13:40:43.000" +"Sunblaze - 0100BFE014476000","0100BFE014476000","status-playable","playable","2022-11-12 13:59:23.000" +"Taiwan Monster Fruit : Prologue - 010028E013E0A000","010028E013E0A000","Incomplete","","2022-11-12 14:10:20.000" +"Tested on Humans: Escape Room - 01006F701507A000","01006F701507A000","status-playable","playable","2022-11-12 14:42:52.000" +"The Longing - 0100F3D0122C2000","0100F3D0122C2000","gpu;status-ingame","ingame","2022-11-12 15:00:58.000" +"Total Arcade Racing - 0100A64010D48000","0100A64010D48000","status-playable","playable","2022-11-12 15:12:48.000" +"Very Very Valet - 0100379013A62000","0100379013A62000","status-playable;nvdec","playable","2022-11-12 15:25:51.000" +"Persona 4 Arena ULTIMAX [010075A016A3A000)","010075A016A3A000","","","2022-11-12 17:27:51.000" +"Piofiore: Episodio 1926 - 01002B20174EE000","01002B20174EE000","status-playable","playable","2022-11-23 18:36:05.000" +"Seven Pirates H - 0100D6F016676000","0100D6F016676000","status-playable","playable","2024-06-03 14:54:12.000" +"Paradigm Paradox - 0100DC70174E0000","0100DC70174E0000","status-playable;vulkan-backend-bug","playable","2022-12-03 22:28:13.000" +"Wanna Survive - 0100D67013910000","0100D67013910000","status-playable","playable","2022-11-12 21:15:43.000" +"Wardogs: Red's Return - 010056901285A000","010056901285A000","status-playable","playable","2022-11-13 15:29:01.000" +"Warhammer Age of Sigmar: Storm Ground - 010031201307A000","010031201307A000","status-playable;nvdec;online-broken;UE4","playable","2022-11-13 15:46:14.000" +"Wing of Darkness - 010035B012F2000","","status-playable;UE4","playable","2022-11-13 16:03:51.000" +"Ninja Gaiden Sigma - 0100E2F014F46000","0100E2F014F46000","status-playable;nvdec","playable","2022-11-13 16:27:02.000" +"Ninja Gaiden Sigma 2 - 0100696014FA000","","status-playable;nvdec","playable","2024-07-31 21:53:48.000" +"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version - 010042501329E000","010042501329E000","status-playable;demo","playable","2022-11-13 22:20:26.000" +"112 Operator - 0100D82015774000","0100D82015774000","status-playable;nvdec","playable","2022-11-13 22:42:50.000" +"Aery - Calm Mind - 0100A801539000","","status-playable","playable","2022-11-14 14:26:58.000" +"Alex Kidd in Miracle World DX - 010025D01221A000","010025D01221A000","status-playable","playable","2022-11-14 15:01:34.000" +"Atari 50 The Anniversary Celebration - 010099801870E000","010099801870E000","slow;status-playable","playable","2022-11-14 19:42:10.000" +"FOOTBALL MANAGER 2023 TOUCH - 0100EDC01990E000","0100EDC01990E000","gpu;status-ingame","ingame","2023-08-01 03:40:53.000" +"ARIA CHRONICLE - 0100691013C46000","0100691013C46000","status-playable","playable","2022-11-16 13:50:55.000" +"B.ARK - 01009B901145C000","01009B901145C000","status-playable;nvdec","playable","2022-11-17 13:35:02.000" +"Pokémon Violet - 01008F6008C5E000","01008F6008C5E000","gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug","ingame","2024-07-30 02:51:48.000" +"Pokémon Scarlet - 0100A3D008C5C000","0100A3D008C5C000","gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug","ingame","2023-12-14 13:18:29.000" +"Bear's Restaurant - 0100CE014A4E000","","status-playable","playable","2024-08-11 21:26:59.000" +"BeeFense BeeMastered - 010018F007786000","010018F007786000","status-playable","playable","2022-11-17 15:38:12.000" +"Oddworld: Soulstorm - 0100D210177C6000","0100D210177C6000","services-horizon;status-boots;crash","boots","2024-08-18 13:13:26.000" +"Aquarium Hololive All CG","","","","2022-11-19 05:12:23.000" +"Billion Road - 010057700FF7C000","010057700FF7C000","status-playable","playable","2022-11-19 15:57:43.000" +"No Man’s Sky - 0100853015E86000","0100853015E86000","gpu;status-ingame","ingame","2024-07-25 05:18:17.000" +"Lunistice - 0100C2E01254C000","0100C2E01254C000","","","2022-11-23 18:44:18.000" +"The Oregon Trail - 0100B080184BC000","0100B080184BC000","gpu;status-ingame","ingame","2022-11-25 16:11:49.000" +"Smurfs Kart - 01009790186FE000","01009790186FE000","status-playable","playable","2023-10-18 00:55:00.000" +"DYSMANTLE - 010008900BC5A000","010008900BC5A000","gpu;status-ingame","ingame","2024-07-15 16:24:12.000" +"Happy Animals Mini Golf - 010066C018E50000","010066C018E50000","gpu;status-ingame","ingame","2022-12-04 19:24:28.000" +"Pocket Pool - 010019F019168000","010019F019168000","","","2022-11-27 03:36:39.000" +"7 Days of Rose - 01002D3019654000","01002D3019654000","","","2022-11-27 20:46:16.000" +"Garfield Lasagna Party - 01003C401895E000","01003C401895E000","","","2022-11-27 21:21:09.000" +"Paper Bad - 01002A0019914000","01002A0019914000","","","2022-11-27 22:01:45.000" +"Ultra Kaiju Monster Rancher - 01008E0019388000","01008E0019388000","","","2022-11-28 02:37:06.000" +"The Legend of Heroes: Trails from Zero - 01001920156C2000","01001920156C2000","gpu;status-ingame;mac-bug","ingame","2024-09-14 21:41:41.000" +"Harvestella - 0100A280187BC000","0100A280187BC000","status-playable;UE4;vulkan-backend-bug;mac-bug","playable","2024-02-13 07:04:11.000" +"Ace Angler: Fishing Spirits - 01007C50132C8000","01007C50132C8000","status-menus;crash","menus","2023-03-03 03:21:39.000" +"WHITE DAY : A labyrinth named school - 010076601839C000","010076601839C000","","","2022-12-03 07:17:03.000" +"Bravery and Greed - 0100F60017D4E000","0100F60017D4E000","gpu;deadlock;status-boots","boots","2022-12-04 02:23:47.000" +"River City Girls 2 - 01002E80168F4000","01002E80168F4000","status-playable","playable","2022-12-07 00:46:27.000" +"SAMURAI MAIDEN - 01003CE018AF6000","01003CE018AF6000","","","2022-12-05 02:56:48.000" +"Front Mission 1st Remake - 0100F200178F4000","0100F200178F4000","status-playable","playable","2023-06-09 07:44:24.000" +"Cardfight!! Vanguard Dear Days - 0100097016B04000","0100097016B04000","","","2022-12-06 00:37:12.000" +"MOL SOCCER ONLINE Lite - 010034501756C000","010034501756C000","","","2022-12-06 00:41:58.000" +"Goonya Monster - 010026301785A000","010026301785A000","","","2022-12-06 00:46:24.000" +"Battle Spirits Connected Battlers - 01009120155CC000","01009120155CC000","","","2022-12-07 00:21:33.000" +"TABE-O-JA - 0100E330127FC000","0100E330127FC000","","","2022-12-07 00:26:47.000" +"Solomon Program - 01008A801370C000","01008A801370C000","","","2022-12-07 00:33:02.000" +"Dragon Quest Treasures - 0100217014266000","0100217014266000","gpu;status-ingame;UE4","ingame","2023-05-09 11:16:52.000" +"Sword of the Necromancer - 0100E4701355C000","0100E4701355C000","status-ingame;crash","ingame","2022-12-10 01:28:39.000" +"Dragon Prana - 01001C5019074000","01001C5019074000","","","2022-12-10 02:10:53.000" +"Burger Patrol - 010013D018E8A000","010013D018E8A000","","","2022-12-10 02:12:02.000" +"Witch On The Holy Night - 010012A017F18800","010012A017F18800","status-playable","playable","2023-03-06 23:28:11.000" +"Hakoniwa Ranch Sheep Village - 010059C017346000 ","010059C017346000","","","2022-12-13 03:04:03.000" +"KASIORI - 0100E75014D7A000","0100E75014D7A000","","","2022-12-13 03:05:00.000" +"CRISIS CORE –FINAL FANTASY VII– REUNION - 01004BC0166CC000","01004BC0166CC000","status-playable","playable","2022-12-19 15:53:59.000" +"Bitmaster - 010026E0141C8000","010026E0141C8000","status-playable","playable","2022-12-13 14:05:51.000" +"Black Book - 0100DD1014AB8000","0100DD1014AB8000","status-playable;nvdec","playable","2022-12-13 16:38:53.000" +"Carnivores: Dinosaur Hunt","","status-playable","playable","2022-12-14 18:46:06.000" +"Trivial Pursuit Live! 2 - 0100868013FFC000","0100868013FFC000","status-boots","boots","2022-12-19 00:04:33.000" +"Astrologaster - 0100B80010C48000","0100B80010C48000","cpu;status-nothing;32-bit;crash","nothing","2023-06-28 15:39:31.000" +"Factorio - 01004200189F4000","01004200189F4000","deadlock;status-boots","boots","2024-06-11 19:26:16.000" +"The Punchuin - 01004F501962C000","01004F501962C000","","","2022-12-28 00:51:46.000" +"Adventure Academia The Fractured Continent - 01006E6018570000","01006E6018570000","","","2022-12-29 03:35:04.000" +"Illusion Garden Story ~Daiichi Sangyo Yuukarin~ - 01003FE0168EA000","01003FE0168EA000","","","2022-12-29 03:39:06.000" +"Popplings - 010063D019A70000","010063D019A70000","","","2022-12-29 03:42:21.000" +"Sports Story - 010025B0100D0000","010025B0100D0000","","","2022-12-29 03:45:54.000" +"Death Bite Shibito Magire - 01002EB01802A000","01002EB01802A000","","","2022-12-29 03:51:54.000" +"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!! - 01002D60188DE000","01002D60188DE000","status-ingame;crash","ingame","2023-03-17 01:54:01.000" +"Asphalt 9 Legends - 01007B000C834800","01007B000C834800","","","2022-12-30 05:19:35.000" +"Arcade Archives TETRIS THE GRAND MASTER - 0100DFD016B7A000","0100DFD016B7A000","status-playable","playable","2024-06-23 01:50:29.000" +"Funny action Great adventure for good adults - 0100BB1018082000","0100BB1018082000","","","2023-01-01 03:13:21.000" +"Fairy Fencer F Refrain Chord - 010048C01774E000","010048C01774E000","","","2023-01-01 03:15:45.000" +"Needy Streamer Overload","","","","2023-01-01 23:24:14.000" +"Absolute Hero Remodeling Plan - 0100D7D015CC2000","0100D7D015CC2000","","","2023-01-02 03:42:59.000" +"Fourth God -Reunion- - 0100BF50131E6000","0100BF50131E6000","","","2023-01-02 03:45:28.000" +"Doll Princess of Marl Kingdom - 010078E0181D0000","010078E0181D0000","","","2023-01-02 03:49:45.000" +"Oshiritantei Pupupu Mirai no Meitantei Tojo! - 01000F7014504000","01000F7014504000","","","2023-01-02 03:51:59.000" +"Moshikashite Obake no Shatekiya for Nintendo Switch - 0100B580144F6000","0100B580144F6000","","","2023-01-02 03:55:10.000" +"Platinum Train-A trip through Japan - 0100B9400654E000","0100B9400654E000","","","2023-01-02 03:58:00.000" +"Deadly Eating Adventure Meshi - 01007B70146F6000","01007B70146F6000","","","2023-01-02 04:00:31.000" +"Gurimugurimoa OnceMore - 01003F5017760000","01003F5017760000","","","2023-01-02 04:03:49.000" +"Neko-Tomo - 0100FA00082BE000","0100FA00082BE000","","","2023-01-03 04:43:05.000" +"Wreckfest - 0100DC0012E48000","0100DC0012E48000","status-playable","playable","2023-02-12 16:13:00.000" +"VARIOUS DAYLIFE - 0100538017BAC000","0100538017BAC000","","","2023-01-03 13:41:46.000" +"WORTH LIFE - 0100D46014648000","0100D46014648000","","","2023-01-04 02:58:27.000" +"void* tRrLM2(); //Void Terrarium 2 - 010078D0175EE000","010078D0175EE000","status-playable","playable","2023-12-21 11:00:41.000" +"Witch's Garden - 010061501904E000","010061501904E000","gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug","ingame","2023-01-11 02:11:24.000" +"PUI PUI MOLCAR Let’s! MOLCAR PARTY! - 01004F6015612000","01004F6015612000","","","2023-01-05 23:05:00.000" +"Galleria Underground Labyrinth and the Witch’s Brigade - 01007010157B4000","01007010157B4000","","","2023-01-07 01:05:40.000" +"Simona's Requiem - 0100E8C019B36000","0100E8C019B36000","gpu;status-ingame","ingame","2023-02-21 18:29:19.000" +"Sonic Frontiers: Demo - 0100D0201A062000","0100D0201A062000","","","2023-01-07 14:50:19.000" +"Alphadia Neo - 010043101944A000","010043101944A000","","","2023-01-09 01:47:53.000" +"It’s Kunio-kun’s Three Kingdoms! - 0100056014DE0000","0100056014DE0000","","","2023-01-09 01:50:08.000" +"Neon White - 0100B9201406A000","0100B9201406A000","status-ingame;crash","ingame","2023-02-02 22:25:06.000" +"Typing Quest - 0100B7101475E000","0100B7101475E000","","","2023-01-10 03:23:00.000" +"Moorhuhn Jump and Run Traps and Treasures - 0100E3D014ABC000","0100E3D014ABC000","status-playable","playable","2024-03-08 15:10:02.000" +"Bandit Detective Buzzard - 01005DB0180B4000","01005DB0180B4000","","","2023-01-10 03:27:34.000" +"Curved Space - 0100CE5014026000","0100CE5014026000","status-playable","playable","2023-01-14 22:03:50.000" +"Destroy All Humans! - 01009E701356A000","01009E701356A000","gpu;status-ingame;nvdec;UE4","ingame","2023-01-14 22:23:53.000" +"Dininho Space Adventure - 010027E0158A6000","010027E0158A6000","status-playable","playable","2023-01-14 22:43:04.000" +"Vengeful Guardian: Moonrider - 01003A8018E60000","01003A8018E60000","deadlock;status-boots","boots","2024-03-17 23:35:37.000" +"Sumikko Gurashi Atsumare! Sumikko Town - 0100508013B26000","0100508013B26000","","","2023-01-16 04:42:55.000" +"Lone Ruin - 0100B6D016EE6000","0100B6D016EE6000","status-ingame;crash;nvdec","ingame","2023-01-17 06:41:19.000" +"Falcon Age - 0100C3F011B58000","0100C3F011B58000","","","2023-01-17 02:43:00.000" +"Persona 4 Golden - 010062B01525C000","010062B01525C000","status-playable","playable","2024-08-07 17:48:07.000" +"Persona 3 Portable - 0100DCD01525A000","0100DCD01525A000","","","2023-01-19 20:20:27.000" +"Fire Emblem: Engage - 0100A6301214E000","0100A6301214E000","status-playable;amd-vendor-bug;mac-bug","playable","2024-09-01 23:37:26.000" +"Sifu - 01007B5017A12000","01007B5017A12000","","","2023-01-20 19:58:54.000" +"Silver Nornir - 0100D1E018F26000","0100D1E018F26000","","","2023-01-21 04:25:06.000" +"Together - 010041C013C94000","010041C013C94000","","","2023-01-21 04:26:20.000" +"Party Party Time - 0100C6A019C84000","0100C6A019C84000","","","2023-01-21 04:27:40.000" +"Sumikko Gurashi Gakkou Seikatsu Hajimerun desu - 010070800D3E2000","010070800D3E2000","","","2023-01-22 02:47:34.000" +"Sumikko Gurashi Sugoroku every time in the corner - 0100713012BEC000","0100713012BEC000","","","2023-01-22 02:49:00.000" +"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition - 01001C8016B4E000","01001C8016B4E000","gpu;status-ingame;crash","ingame","2024-06-10 23:33:05.000" +"Gesshizu Mori no Chiisana Nakama-tachi - 0100A0D011014000","0100A0D011014000","","","2023-01-23 03:56:43.000" +"Chickip Dancers Norinori Dance de Kokoro mo Odoru - 0100D85017B26000","0100D85017B26000","","","2023-01-23 03:56:47.000" +"Go Rally - 010055A0161F4000","010055A0161F4000","gpu;status-ingame","ingame","2023-08-16 21:18:23.000" +"Devil Kingdom - 01002F000E8F2000","01002F000E8F2000","status-playable","playable","2023-01-31 08:58:44.000" +"Cricket 22 - 0100387017100000","0100387017100000","status-boots;crash","boots","2023-10-18 08:01:57.000" +"サマータイムレンダ Another Horizon - 01005940182ec000","01005940182ec000","","","2023-01-28 02:15:25.000" +"Letters - a written adventure - 0100CE301678E800","0100CE301678E800","gpu;status-ingame","ingame","2023-02-21 20:12:38.000" +"Prinny Presents NIS Classics Volume 1 - 0100A6E01681C000","0100A6E01681C000","status-boots;crash;Needs Update","boots","2023-02-02 07:23:09.000" +"SpongeBob SquarePants The Cosmic Shake - 01009FB0172F4000","01009FB0172F4000","gpu;status-ingame;UE4","ingame","2023-08-01 19:29:53.000" +"THEATRHYTHM FINAL BAR LINE DEMO Version - 01004C5018BC4000","01004C5018BC4000","","","2023-02-01 16:59:55.000" +"Blue Reflection: Second Light [USA, Europe] - 010071C013390000","010071C013390000","","","2023-02-02 02:44:04.000" +"牧場物語 Welcome!ワンダフルライフ - 0100936018EB4000","0100936018EB4000","status-ingame;crash","ingame","2023-04-25 19:43:52.000" +"Coromon - 010048D014322000","010048D014322000","","","2023-02-03 00:47:51.000" +"Exitman Deluxe - 0100648016520000","0100648016520000","","","2023-02-04 02:02:03.000" +"Life is Strange 2 - 0100FD101186C000","0100FD101186C000","status-playable;UE4","playable","2024-07-04 05:05:58.000" +"Fashion Police Squad","","Incomplete","","2023-02-05 12:36:50.000" +"Grindstone - 0100538012496000","0100538012496000","status-playable","playable","2023-02-08 15:54:06.000" +"Kemono Friends Picross - 01004B100BDA2000","01004B100BDA2000","status-playable","playable","2023-02-08 15:54:34.000" +"Picross Lord Of The Nazarick - 010012100E8DC000","010012100E8DC000","status-playable","playable","2023-02-08 15:54:56.000" +"Shovel Knight Pocket Dungeon - 01006B00126EC000","01006B00126EC000","","","2023-02-08 20:12:10.000" +"Game Boy - Nintendo Switch Online - 0100C62011050000","0100C62011050000","status-playable","playable","2023-03-21 12:43:48.000" +"ゲームボーイ Nintendo Switch Online - 0100395011044000","0100395011044000","","","2023-02-08 23:53:21.000" +"Game Boy Advance - Nintendo Switch Online - 010012F017576000","010012F017576000","status-playable","playable","2023-02-16 20:38:15.000" +"Kirby’s Return to Dream Land Deluxe - Demo - 010091D01A57E000","010091D01A57E000","status-playable;demo","playable","2023-02-18 17:21:55.000" +"Metroid Prime Remastered - 010012101468C000","010012101468C000","gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug","ingame","2024-05-07 22:48:15.000" +"WBSC eBASEBALL: POWER PROS - 01007D9019626000","01007D9019626000","","","2023-02-09 02:56:56.000" +"Tricky Towers - 010015F005C8E000","010015F005C8E000","","","2023-02-09 14:58:15.000" +"Clunky Hero - [0100879019212000]","0100879019212000","","","2023-02-10 07:41:34.000" +"Mercenaries Lament Requiem of the Silver Wolf - 0100E44019E4C000","0100E44019E4C000","","","2023-02-11 04:36:39.000" +"Pixel Cup Soccer Ultimate Edition - 0100E17019782000","0100E17019782000","","","2023-02-11 14:28:11.000" +"Sea of Stars Demo - 010036F0182C4000","010036F0182C4000","status-playable;demo","playable","2023-02-12 15:33:56.000" +"MistWorld the after - 010003801579A000","010003801579A000","","","2023-02-13 03:40:17.000" +"MistWorld the after 2 - 0100C50016CD6000","0100C50016CD6000","","","2023-02-13 03:40:23.000" +"Wonder Boy Anniversary Collection - 0100B49016FF0000","0100B49016FF0000","deadlock;status-nothing","nothing","2023-04-20 16:01:48.000" +"OddBallers - 010079A015976000","010079A015976000","","","2023-02-13 03:40:35.000" +"Game Doraemon Nobita’s Space War 2021 - 01000200128A4000","01000200128A4000","","","2023-02-14 02:52:57.000" +"Doraemon Nobita’s Brain Exercise Adventure - 0100E6F018D10000","0100E6F018D10000","","","2023-02-14 02:54:51.000" +"Makai Senki Disgaea 7 - 0100A78017BD6000","0100A78017BD6000","status-playable","playable","2023-10-05 00:22:18.000" +"Blanc - 010039501405E000","010039501405E000","gpu;slow;status-ingame","ingame","2023-02-22 14:00:13.000" +"Arcade Machine Gopher’s Revenge - 0100DCB019CAE000","0100DCB019CAE000","","","2023-02-15 21:48:46.000" +"Santa Claus Goblins Attack - 0100A0901A3E4000","0100A0901A3E4000","","","2023-02-15 21:48:50.000" +"Garden of Pets - 010075A01A312000","010075A01A312000","","","2023-02-15 21:48:52.000" +"THEATRHYTHM FINAL BAR LINE - 010024201834A000","010024201834A000","status-playable","playable","2023-02-19 19:58:57.000" +"Rob Riches - 010061501A2B6000","010061501A2B6000","","","2023-02-16 04:44:01.000" +"Cuddly Forest Friends - 01005980198D4000","01005980198D4000","","","2023-02-16 04:44:04.000" +"Dragon Quest X Awakening Five Races Offline - 0100E2E0152E4000","0100E2E0152E4000","status-playable;nvdec;UE4","playable","2024-08-20 10:04:24.000" +"Persona 5 Strikers Bonus Content - (01002F101340C000)","01002F101340C000","","","2023-02-16 20:29:01.000" +"Let’s play duema! - 0100EFC0152E0000","0100EFC0152E0000","","","2023-02-18 03:09:55.000" +"Let’s play duema Duel Masters! 2022 - 010006C017354000","010006C017354000","","","2023-02-18 03:09:58.000" +"Heterogeneous Strongest King Encyclopedia Battle Coliseum - 0100BD00198AA000","0100BD00198AA000","","","2023-02-18 03:10:01.000" +"Hopping Girl Kohane EX - 0100D2B018F5C000","0100D2B018F5C000","","","2023-02-19 00:57:25.000" +"Earth Defense Force 2 for Nintendo Switch - 010082B013C8C000","010082B013C8C000","","","2023-02-19 01:13:14.000" +"Earth Defense Force 3 for Nintendo Switch - 0100E87013C98000","0100E87013C98000","","","2023-02-19 01:13:21.000" +"PAC-MAN WORLD Re-PAC - 0100D4401565E000","0100D4401565E000","","","2023-02-19 18:49:11.000" +"Eastward - 010071B00F63A000","010071B00F63A000","","","2023-02-19 19:50:36.000" +"Arcade Archives THE NEWZEALAND STORY - 010045D019FF0000","010045D019FF0000","","","2023-02-20 01:59:58.000" +"Foxy’s Coin Hunt - 0100EE401A378000","0100EE401A378000","","","2023-02-20 02:00:00.000" +"Samurai Warrior - 0100B6501A360000","0100B6501A360000","status-playable","playable","2023-02-27 18:42:38.000" +"NCL USA Bowl - 010004801A450000","010004801A450000","","","2023-02-20 02:00:05.000" +"Dadish - 0100B8B013310000","0100B8B013310000","","","2023-02-20 23:19:02.000" +"Dadish 2 - 0100BB70140BA000","0100BB70140BA000","","","2023-02-20 23:28:43.000" +"Dadish 3 - 01001010181AA000","01001010181AA000","","","2023-02-20 23:38:55.000" +"Digimon World: Next Order - 0100F00014254000","0100F00014254000","status-playable","playable","2023-05-09 20:41:06.000" +"PAW Patrol The Movie: Adventure City Calls - 0100FFE013628000","0100FFE013628000","","","2023-02-22 14:09:11.000" +"PAW Patrol: Grand Prix - 0100360016800000","0100360016800000","gpu;status-ingame","ingame","2024-05-03 16:16:11.000" +"Gigantosaurus Dino Kart - 01001890167FE000","01001890167FE000","","","2023-02-23 03:15:01.000" +"Rise Of Fox Hero - 0100A27018ED0000","0100A27018ED0000","","","2023-02-23 03:15:04.000" +"MEGALAN 11 - 0100C7501360C000","0100C7501360C000","","","2023-02-23 03:15:06.000" +"Rooftop Renegade - 0100644012F0C000","0100644012F0C000","","","2023-02-23 03:15:10.000" +"Kirby’s Return to Dream Land Deluxe - 01006B601380E000","01006B601380E000","status-playable","playable","2024-05-16 19:58:04.000" +"Snow Bros. Special - 0100bfa01787c000","0100bfa01787c000","","","2023-02-24 02:25:54.000" +"Toree 2 - 0100C7301658C000","0100C7301658C000","","","2023-02-24 03:15:04.000" +"Red Hands - 2 Player Games - 01003B2019424000","01003B2019424000","","","2023-02-24 03:53:12.000" +"nPaint - 0100917019FD6000","0100917019FD6000","","","2023-02-24 03:53:18.000" +"Octopath Traveler II - 0100A3501946E000","0100A3501946E000","gpu;status-ingame;amd-vendor-bug","ingame","2024-09-22 11:39:20.000" +"Planet Cube Edge - 01007EA019CFC000","01007EA019CFC000","status-playable","playable","2023-03-22 17:10:12.000" +"Rumble Sus - 0100CE201946A000","0100CE201946A000","","","2023-02-25 02:19:01.000" +"Easy Come Easy Golf - 0100ECF01800C000","0100ECF01800C000","status-playable;online-broken;regression","playable","2024-04-04 16:15:00.000" +"Piano Learn and Play - 010038501A6B8000","010038501A6B8000","","","2023-02-26 02:57:12.000" +"nOS new Operating System - 01008AE019614000","01008AE019614000","status-playable","playable","2023-03-22 16:49:08.000" +"XanChuchamel - 0100D970191B8000","0100D970191B8000","","","2023-02-26 02:57:19.000" +"Rune Factory 3 Special - 01001EF017BE6000","01001EF017BE6000","","","2023-03-02 05:34:40.000" +"Light Fingers - 0100A0E005E42000","0100A0E005E42000","","","2023-03-03 03:04:09.000" +"Disaster Detective Saiga An Indescribable Mystery - 01005BF01A3EC000","01005BF01A3EC000","","","2023-03-04 00:34:26.000" +"Touhou Gouyoku Ibun ~ Sunken Fossil World. - 0100031018CFE000","0100031018CFE000","","","2023-03-04 00:34:29.000" +"Ninja Box - 0100272009E32000","0100272009E32000","","","2023-03-06 00:31:44.000" +"Rubber Bandits - 010060801843A000","010060801843A000","","","2023-03-07 22:26:57.000" +"Arcade Archives DON DOKO DON - 0100B6201A2AA000","0100B6201A2AA000","","","2023-03-14 00:13:52.000" +"Knights and Guns - 010060A011ECC000","010060A011ECC000","","","2023-03-14 00:13:54.000" +"Process of Elimination Demo - 01007F6019E2A000","01007F6019E2A000","","","2023-03-14 00:13:57.000" +"DREDGE [ CHAPTER ONE ] - 01000AB0191DA000","01000AB0191DA000","","","2023-03-14 01:49:12.000" +"Bayonetta Origins Cereza and the Lost Demon Demo - 010002801A3FA000","010002801A3FA000","gpu;status-ingame;demo","ingame","2024-02-17 06:06:28.000" +"Yo-Kai Watch 4++ - 010086C00AF7C000","010086C00AF7C000","status-playable","playable","2024-06-18 20:21:44.000" +"Tama Cannon - 0100D8601A848000","0100D8601A848000","","","2023-03-15 01:08:05.000" +"The Smile Alchemist - 0100D1C01944E000","0100D1C01944E000","","","2023-03-15 01:08:08.000" +"Caverns of Mars Recharged - 01009B201A10E000","01009B201A10E000","","","2023-03-15 01:08:12.000" +"Roniu's Tale - 010007E0193A2000","010007E0193A2000","","","2023-03-15 01:08:18.000" +"Mythology Waifus Mahjong - 0100C7101A5BE000","0100C7101A5BE000","","","2023-03-15 01:08:23.000" +"emoji Kart Racer - 0100AC601A26A000","0100AC601A26A000","","","2023-03-17 01:53:50.000" +"Self gunsbase - 01006BB015486000","01006BB015486000","","","2023-03-17 01:53:53.000" +"Melon Journey - 0100F68019636000","0100F68019636000","status-playable","playable","2023-04-23 21:20:01.000" +"Bayonetta Origins: Cereza and the Lost Demon - 0100CF5010FEC000","0100CF5010FEC000","gpu;status-ingame","ingame","2024-02-27 01:39:49.000" +"Uta no prince-sama All star After Secret - 01008030149FE000","01008030149FE000","","","2023-03-18 16:08:20.000" +"Hampuzz - 0100D85016326000","0100D85016326000","","","2023-03-19 00:39:40.000" +"Gotta Protectors Cart of Darkness - 01007570160E2000","01007570160E2000","","","2023-03-19 00:39:43.000" +"Game Type DX - 0100433017DAC000","0100433017DAC000","","","2023-03-20 00:29:23.000" +"Ray'z Arcade Chronology - 010088D018302000","010088D018302000","","","2023-03-20 00:29:26.000" +"Ruku's HeartBalloon - 01004570192D8000","01004570192D8000","","","2023-03-20 00:29:30.000" +"Megaton Musashi - 01001AD00E41E000","01001AD00E41E000","","","2023-03-21 01:11:33.000" +"Megaton Musashi X - 0100571018A70000","0100571018A70000","","","2023-03-21 01:11:39.000" +"In the Mood - 0100281017990000","0100281017990000","","","2023-03-22 00:53:54.000" +"Sixtar Gate STARTRAIL - 0100D29019BE4000","0100D29019BE4000","","","2023-03-22 00:53:57.000" +"Spelunker HD Deluxe - 010095701381A000","010095701381A000","","","2023-03-22 00:54:02.000" +"Pizza Tycoon - 0100A6301788E000","0100A6301788E000","","","2023-03-23 02:00:04.000" +"Cubic - 010081F00EAB8000","010081F00EAB8000","","","2023-03-23 02:00:12.000" +"Sherlock Purr - 010019F01AD78000","010019F01AD78000","","","2023-03-24 02:21:34.000" +"Blocky Farm - 0100E21016A68000","0100E21016A68000","","","2023-03-24 02:21:40.000" +"SD Shin Kamen Rider Ranbu [ SD シン・仮面ライダー 乱舞 ] - 0100CD40192AC000","0100CD40192AC000","","","2023-03-24 23:07:40.000" +"Peppa Pig: World Adventures - 0100FF1018E00000","0100FF1018E00000","Incomplete","","2023-03-25 07:46:56.000" +"Remnant: From the Ashes - 010010F01418E000","010010F01418E000","","","2023-03-26 20:30:16.000" +"Titanium Hound - 010010B0195EE000","010010B0195EE000","","","2023-03-26 19:06:35.000" +"MLB® The Show™ 23 - 0100913019170000","0100913019170000","gpu;status-ingame","ingame","2024-07-26 00:56:50.000" +"Grim Guardians Demon Purge - 0100B5301A180000","0100B5301A180000","","","2023-03-29 02:03:41.000" +"Blade Assault - 0100EA1018A2E000","0100EA1018A2E000","audio;status-nothing","nothing","2024-04-29 14:32:50.000" +"Bubble Puzzler - 0100FB201A21E000","0100FB201A21E000","","","2023-04-03 01:55:12.000" +"Tricky Thief - 0100F490198B8000","0100F490198B8000","","","2023-04-03 01:56:44.000" +"Scramballed - 0100106016602000","0100106016602000","","","2023-04-03 01:58:08.000" +"SWORD ART ONLINE Alicization Lycoris - 0100C6C01225A000","0100C6C01225A000","","","2023-04-03 02:03:00.000" +"Alice Gear Aegis CS Concerto of Simulatrix - 0100EEA0184C6000","0100EEA0184C6000","","","2023-04-05 01:40:02.000" +"Curse of the Sea Rats - 0100B970138FA000","0100B970138FA000","","","2023-04-08 15:56:01.000" +"THEATRHYTHM FINAL BAR LINE - 010081B01777C000","010081B01777C000","status-ingame;Incomplete","ingame","2024-08-05 14:24:55.000" +"Assault Suits Valken DECLASSIFIED - 0100FBC019042000","0100FBC019042000","","","2023-04-11 01:05:19.000" +"Xiaomei and the Flame Dragons Fist - 010072601922C000","010072601922C000","","","2023-04-11 01:06:46.000" +"Loop - 0100C88019092000","0100C88019092000","","","2023-04-11 01:08:03.000" +"Volley Pals - 01003A301A29E000","01003A301A29E000","","","2023-04-12 01:37:14.000" +"Catgotchi Virtual Pet - 0100CCF01A884000","0100CCF01A884000","","","2023-04-12 01:37:24.000" +"Pizza Tower - 05000FD261232000","05000FD261232000","status-ingame;crash","ingame","2024-09-16 00:21:56.000" +"Megaman Battle Network Legacy Collection Vol 1 - 010038E016264000","010038E016264000","status-playable","playable","2023-04-25 03:55:57.000" +"Process of Elimination - 01005CC018A32000","01005CC018A32000","","","2023-04-17 00:46:22.000" +"Detective Boys and the Strange Karakuri Mansion on the Hill [ 少年探偵団と丘の上の奇妙なカラクリ屋敷 ] - 0100F0801A5E8000","0100F0801A5E8000","","","2023-04-17 00:49:26.000" +"Dokapon Kingdom Connect [ ドカポンキングダムコネクト ] - 0100AC4018552000","0100AC4018552000","","","2023-04-17 00:53:37.000" +"Pixel Game Maker Series Tentacled Terrors Tyrannize Terra - 010040A01AABE000","010040A01AABE000","","","2023-04-18 02:29:14.000" +"Ultra Pixel Survive - 0100472019812000","0100472019812000","","","2023-04-18 02:29:20.000" +"PIANOFORTE - 0100D6D016F06000","0100D6D016F06000","","","2023-04-18 02:29:25.000" +"NASCAR Rivals - 0100545016D5E000","0100545016D5E000","status-ingame;crash;Incomplete","ingame","2023-04-21 01:17:47.000" +"Minecraft Legends - 01007C6012CC8000","01007C6012CC8000","gpu;status-ingame;crash","ingame","2024-03-04 00:32:24.000" +"Touhou Fan-made Virtual Autography - 0100196016944000","0100196016944000","","","2023-04-21 03:59:47.000" +"FINAL FANTASY I - 01000EA014150000","01000EA014150000","status-nothing;crash","nothing","2024-09-05 20:55:30.000" +"FINAL FANTASY II - 01006B7014156000","01006B7014156000","status-nothing;crash","nothing","2024-04-13 19:18:04.000" +"FINAL FANTASY III - 01002E2014158000","01002E2014158000","","","2023-04-21 11:50:01.000" +"FINAL FANTASY V - 0100AA201415C000","0100AA201415C000","status-playable","playable","2023-04-26 01:11:55.000" +"FINAL FANTASY VI - 0100AA001415E000","0100AA001415E000","","","2023-04-21 13:08:30.000" +"Advance Wars 1+2: Re-Boot Camp - 0100300012F2A000","0100300012F2A000","status-playable","playable","2024-01-30 18:19:44.000" +"Five Nights At Freddy’s Security Breach - 01009060193C4000","01009060193C4000","gpu;status-ingame;crash;mac-bug","ingame","2023-04-23 22:33:28.000" +"BUCCANYAR - 0100942019418000","0100942019418000","","","2023-04-23 00:59:51.000" +"BraveDungeon - The Meaning of Justice - 010068A00DAFC000","010068A00DAFC000","","","2023-04-23 13:34:05.000" +"Gemini - 010045300BE9A000","010045300BE9A000","","","2023-04-24 01:31:41.000" +"LOST EPIC - 010098F019A64000","010098F019A64000","","","2023-04-24 01:31:46.000" +"AKIBA'S TRIP2 Director's Cut - 0100FBD01884C000","0100FBD01884C000","","","2023-04-24 01:31:48.000" +"Afterimage - 010095E01A12A000","010095E01A12A000","","","2023-04-27 21:39:08.000" +"Fortress S - 010053C017D40000","010053C017D40000","","","2023-04-28 01:57:34.000" +"The Mageseeker: A League of Legends Story™ 0100375019B2E000","0100375019B2E000","","","2023-04-29 14:01:15.000" +"Cult of the Lamb - 01002E7016C46000","01002E7016C46000","","","2023-04-29 06:22:56.000" +"Disney SpeedStorm - 0100F0401435E000","0100F0401435E000","services;status-boots","boots","2023-11-27 02:15:32.000" +"The Outbound Ghost - 01000BC01801A000","01000BC01801A000","status-nothing","nothing","2024-03-02 17:10:58.000" +"Blaze Union Story to Reach the Future Remaster [ ブレイズ・ユニオン ] - 01003B001A81E000","01003B001A81E000","","","2023-05-02 02:03:16.000" +"Sakura Neko Calculator - 010029701AAD2000","010029701AAD2000","","","2023-05-02 06:16:04.000" +"Bramble The Mountain King - 0100E87017D0E000","0100E87017D0E000","services-horizon;status-playable","playable","2024-03-06 09:32:17.000" +"The Legend of Zelda: Tears of the Kingdom - 0100F2C0115B6000","0100F2C0115B6000","gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug","ingame","2024-08-24 12:38:30.000" +"Magical Drop VI - 0100B4D01A3A4000","0100B4D01A3A4000","","","2023-05-13 02:27:38.000" +"Yahari ge-mu demo ore no seishun rabukome hamachigatteiru. kan [ やはりゲームでも俺の青春ラブコメはまちがっている。完 ] - 010066801A138000","010066801A138000","","","2023-05-13 02:27:49.000" +"Mega Man Battle Network Legacy Collection Vol. 2 - 0100734016266000","0100734016266000","status-playable","playable","2023-08-03 18:04:32.000" +"Numolition - 010043C019088000","010043C019088000","","","2023-05-17 02:29:23.000" +"Vibitter for Nintendo Switch [ ビビッター ] - 0100D2A01855C000","0100D2A01855C000","","","2023-05-17 02:29:31.000" +"LEGO 2K Drive - 0100739018020000","0100739018020000","gpu;status-ingame;ldn-works","ingame","2024-04-09 02:05:12.000" +"Ys Memoire : The Oath in Felghana [ イース・メモワール -フェルガナの誓い- ] - 010070D01A192000","010070D01A192000","","","2023-05-22 01:12:30.000" +"Love on Leave - 0100E3701A870000","0100E3701A870000","","","2023-05-22 01:37:22.000" +"Puzzle Bobble Everybubble! - 010079E01A1E0000","010079E01A1E0000","audio;status-playable;ldn-works","playable","2023-06-10 03:53:40.000" +"Chasm: The Rift - 010034301A556000","010034301A556000","gpu;status-ingame","ingame","2024-04-29 19:02:48.000" +"Speed Crew Demo - 01005C001B696000","01005C001B696000","","","2023-06-04 00:18:22.000" +"Dr Fetus Mean Meat Machine Demo - 01001DA01B7C4000","01001DA01B7C4000","","","2023-06-04 00:18:30.000" +"Bubble Monsters - 0100FF801B87C000","0100FF801B87C000","","","2023-06-05 02:15:43.000" +"Puzzle Bobble / Bust-a-Move ( 16-Bit Console Version ) - 0100AFF019F3C000","0100AFF019F3C000","","","2023-06-05 02:15:53.000" +"Just Dance 2023 - 0100BEE017FC0000","0100BEE017FC0000","status-nothing","nothing","2023-06-05 16:44:54.000" +"We Love Katamari REROLL+ Royal Reverie - 010089D018D18000","010089D018D18000","","","2023-06-07 07:33:49.000" +"Loop8: Summer of Gods - 0100051018E4C000","0100051018E4C000","","","2023-06-10 17:09:56.000" +"Hatsune Miku - The Planet Of Wonder And Fragments Of Wishes - 010030301ABC2000","010030301ABC2000","","","2023-06-12 02:15:31.000" +"Speed Crew - 0100C1201A558000","0100C1201A558000","","","2023-06-12 02:15:35.000" +"Nocturnal - 01009C2019510000","01009C2019510000","","","2023-06-12 16:24:50.000" +"Harmony: The Fall of Reverie - 0100A65017D68000","0100A65017D68000","","","2023-06-13 22:37:51.000" +"Cave of Past Sorrows - 0100336019D36000","0100336019D36000","","","2023-06-18 01:42:19.000" +"BIRDIE WING -Golf Girls Story- - 01005B2017D92000","01005B2017D92000","","","2023-06-18 01:42:25.000" +"Dogotchi Virtual Pet - 0100BBD01A886000","0100BBD01A886000","","","2023-06-18 01:42:31.000" +"010036F018AC8000","010036F018AC8000","","","2023-06-18 13:11:56.000" +"Pikmin 1 - 0100AA80194B0000","0100AA80194B0000","audio;status-ingame","ingame","2024-05-28 18:56:11.000" +"Pikmin 2 - 0100D680194B2000","0100D680194B2000","gpu;status-ingame","ingame","2023-07-31 08:53:41.000" +"Ghost Trick Phantom Detective Demo - 010026C0184D4000","010026C0184D4000","","","2023-06-23 01:29:44.000" +"Dr Fetus' Mean Meat Machine - 01006C301B7C2000","01006C301B7C2000","","","2023-06-23 01:29:52.000" +"FIFA 22 Legacy Edition - 0100216014472000","0100216014472000","gpu;status-ingame","ingame","2024-03-02 14:13:48.000" +"Pretty Princess Magical Garden Island - 01001CA019DA2000","01001CA019DA2000","","","2023-06-26 02:43:04.000" +"Pool Together - 01009DB01BA16000","01009DB01BA16000","","","2023-06-26 02:43:13.000" +"Kizuna AI - Touch the Beat! - 0100BF2019B98000","0100BF2019B98000","","","2023-06-26 02:43:18.000" +"Convenience Stories - 0100DF801A092000","0100DF801A092000","","","2023-06-26 10:58:37.000" +"Pikmin 4 Demo - 0100E0B019974000","0100E0B019974000","gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug","ingame","2023-09-22 21:41:08.000" +"超探偵事件簿 レインコード (Master Detective Archives: Rain Code) - 0100F4401940A000","0100F4401940A000","status-ingame;crash","ingame","2024-02-12 20:58:31.000" +"Everybody 1-2-Switch! - 01006F900BF8E000","01006F900BF8E000","services;deadlock;status-nothing","nothing","2023-07-01 05:52:55.000" +"AEW Fight Forever - 0100BD10190C0000","0100BD10190C0000","","","2023-06-30 22:09:10.000" +"Master Detective Archives: Rain Code - 01004800197F0000","01004800197F0000","gpu;status-ingame","ingame","2024-04-19 20:11:09.000" +"The Lara Croft Collection - 010079C017F5E000","010079C017F5E000","services-horizon;deadlock;status-nothing","nothing","2024-07-12 22:45:51.000" +"Ghost Trick Phantom Detective - 010029B018432000","010029B018432000","status-playable","playable","2023-08-23 14:50:12.000" +"Sentimental Death Loop - 0100FFA01ACA8000","0100FFA01ACA8000","","","2023-07-10 03:23:08.000" +"The Settlers: New Allies - 0100F3200E7CA000","0100F3200E7CA000","deadlock;status-nothing","nothing","2023-10-25 00:18:05.000" +"Manic Mechanics - 010095A01550E000","010095A01550E000","","","2023-07-17 02:07:32.000" +"Crymachina Trial Edition ( Demo ) [ クライマキナ ] - 01000CC01C108000","01000CC01C108000","status-playable;demo","playable","2023-08-06 05:33:21.000" +"Xicatrice [ シカトリス ] - 0100EB601A932000","0100EB601A932000","","","2023-07-18 02:18:35.000" +"Trouble Witches Final! Episode 01: Daughters of Amalgam - 0100D06018DCA000","0100D06018DCA000","status-playable","playable","2024-04-08 15:08:11.000" +"The Quintessential Quintuplets: Gotopazu Story [ 五等分の花嫁 ごとぱずストーリー ] - 0100137019E9C000","0100137019E9C000","","","2023-07-18 02:18:50.000" +"Pinball FX - 0100DA70186D4000","0100DA70186D4000","status-playable","playable","2024-05-03 17:09:11.000" +"Moving Out 2 Training Day ( Demo ) - 010049E01B034000","010049E01B034000","","","2023-07-19 00:37:57.000" +"Cold Silence - 010035B01706E000","010035B01706E000","cpu;status-nothing;crash","nothing","2024-07-11 17:06:14.000" +"Demons of Asteborg - 0100B92015538000","0100B92015538000","","","2023-07-20 17:03:06.000" +"Pikmin 4 - 0100B7C00933A000","0100B7C00933A000","gpu;status-ingame;crash;UE4","ingame","2024-08-26 03:39:08.000" +"Grizzland - 010091300FFA0000","010091300FFA0000","gpu;status-ingame","ingame","2024-07-11 16:28:34.000" +"Disney Illusion Island","","","","2023-07-29 09:20:56.000" +"Double Dragon Gaiden: Rise of The Dragons - 010010401BC1A000","010010401BC1A000","","","2023-08-01 05:17:28.000" +"CRYSTAR -クライスタ- 0100E7B016778800","0100E7B016778800","","","2023-08-02 11:54:22.000" +"Orebody: Binders Tale - 010055A0189B8000","010055A0189B8000","","","2023-08-03 18:50:10.000" +"Ginnung - 01004B1019C7E000","01004B1019C7E000","","","2023-08-03 19:19:00.000" +"Legends of Amberland: The Forgotten Crown - 01007170100AA000","01007170100AA000","","","2023-08-03 22:18:17.000" +"Egglien - 0100E29019F56000","0100E29019F56000","","","2023-08-03 22:48:04.000" +"Dolmenjord - Viking Islands - 010012201B998000","010012201B998000","","","2023-08-05 20:55:28.000" +"The Knight & the Dragon - 010031B00DB34000","010031B00DB34000","gpu;status-ingame","ingame","2023-08-14 10:31:43.000" +"Cookies! Theory of Super Evolution - ","","","","2023-08-06 00:21:28.000" +"Jetboy - 010039C018168000","010039C018168000","","","2023-08-07 17:25:10.000" +"Townscaper - 01001260143FC000","01001260143FC000","","","2023-08-07 18:24:29.000" +"The Deer God - 01000B6007A3C000","01000B6007A3C000","","","2023-08-07 19:48:55.000" +"6 Souls - 0100421016BF2000","0100421016BF2000","","","2023-08-07 21:17:43.000" +"Brotato - 01002EF01A316000","01002EF01A316000","","","2023-08-10 14:57:25.000" +"超次元ゲイム ネプテューヌ GameMaker R:Evolution - 010064801a01c000","010064801a01c000","status-nothing;crash","nothing","2023-10-30 22:37:40.000" +"Quake II - 010048F0195E8000","010048F0195E8000","status-playable","playable","2023-08-15 03:42:14.000" +"Red Dead Redemption - 01007820196A6000","01007820196A6000","status-playable;amd-vendor-bug","playable","2024-09-13 13:26:13.000" +"Samba de Amigo : Party Central Demo - 01007EF01C0D2000","01007EF01C0D2000","","","2023-08-18 04:00:43.000" +"Bomb Rush Cyberfunk - 0100317014B7C000","0100317014B7C000","status-playable","playable","2023-09-28 19:51:57.000" +"Jack Jeanne - 010036D01937E000","010036D01937E000","","","2023-08-21 05:58:21.000" +"Bright Memory: Infinite Gold Edition - 01001A9018560000","01001A9018560000","","","2023-08-22 22:46:26.000" +"NBA 2K23 - 0100ACA017E4E800","0100ACA017E4E800","status-boots","boots","2023-10-10 23:07:14.000" +"Marble It Up! Ultra - 0100C18016896000","0100C18016896000","","","2023-08-30 20:14:21.000" +"Words of Wisdom - 0100B7F01BC9A000","0100B7F01BC9A000","","","2023-09-02 19:05:19.000" +"Koa and the Five Pirates of Mara - 0100C57019BA2000","0100C57019BA2000","gpu;status-ingame","ingame","2024-07-11 16:14:44.000" +"Little Orpheus stuck at 2 level","","","","2023-09-05 12:09:08.000" +"Tiny Thor - 010002401AE94000","010002401AE94000","gpu;status-ingame","ingame","2024-07-26 08:37:35.000" +"Radirgy Swag - 01000B900EEF4000","01000B900EEF4000","","","2023-09-06 23:00:39.000" +"Sea of Stars - 01008C0016544000","01008C0016544000","status-playable","playable","2024-03-15 20:27:12.000" +"NBA 2K24 - 010006501A8D8000","010006501A8D8000","cpu;gpu;status-boots","boots","2024-08-11 18:23:08.000" +"Rune Factory 3 Special - 010081C0191D8000","010081C0191D8000","status-playable","playable","2023-10-15 08:32:49.000" +"Baten Kaitos I & II HD Remaster (Japan) - 0100F28018CA4000","0100F28018CA4000","services;status-boots;Needs Update","boots","2023-10-24 23:11:54.000" +"F-ZERO 99 - 0100CCF019C8C000","0100CCF019C8C000","","","2023-09-14 16:43:01.000" +"Horizon Chase 2 - 0100001019F6E000","0100001019F6E000","deadlock;slow;status-ingame;crash;UE4","ingame","2024-08-19 04:24:06.000" +"Mortal Kombat 1 - 01006560184E6000","01006560184E6000","gpu;status-ingame","ingame","2024-09-04 15:45:47.000" +"Baten Kaitos I & II HD Remaster (Europe/USA) - 0100C07018CA6000","0100C07018CA6000","services;status-boots;Needs Update","boots","2023-10-01 00:44:32.000" +"Legend of Mana 01003570130E2000","01003570130E2000","","","2023-09-17 04:07:26.000" +"TUNIC 0100DA801624E000","0100DA801624E000","","","2023-09-17 04:28:22.000" +"SUPER BOMBERMAN R 2 - 0100B87017D94000","0100B87017D94000","deadlock;status-boots","boots","2023-09-29 13:19:51.000" +"Fae Farm - 010073F0189B6000 ","010073F0189B6000","status-playable","playable","2024-08-25 15:12:12.000" +"demon skin - 01006fe0146ec000","01006fe0146ec000","","","2023-09-18 08:36:18.000" +"Fatal Frame: Mask of the Lunar Eclipse - 0100DAE019110000","0100DAE019110000","status-playable;Incomplete","playable","2024-04-11 06:01:30.000" +"Winter Games 2023 - 0100A4A015FF0000","0100A4A015FF0000","deadlock;status-menus","menus","2023-11-07 20:47:36.000" +"EA Sports FC 24 - 0100BDB01A0E6000","0100BDB01A0E6000","status-boots","boots","2023-10-04 18:32:59.000" +"Cassette Beasts - 010066F01A0E0000","010066F01A0E0000","status-playable","playable","2024-07-22 20:38:43.000" +"COCOON - 01002E700C366000","01002E700C366000","gpu;status-ingame","ingame","2024-03-06 11:33:08.000" +"Detective Pikachu Returns - 010007500F27C000","010007500F27C000","status-playable","playable","2023-10-07 10:24:59.000" +"DeepOne - 0100961011BE6000","0100961011BE6000","services-horizon;status-nothing;Needs Update","nothing","2024-01-18 15:01:05.000" +"Sonic Superstars","","","","2023-10-13 18:33:19.000" +"Disco Elysium - 01006C5015E84000","01006C5015E84000","Incomplete","","2023-10-14 13:53:12.000" +"Sonic Superstars - 01008F701C074000","01008F701C074000","gpu;status-ingame;nvdec","ingame","2023-10-28 17:48:07.000" +"Sonic Superstars Digital Art Book with Mini Digital Soundtrack - 010088801C150000","010088801C150000","status-playable","playable","2024-08-20 13:26:56.000" +"Super Mario Bros. Wonder - 010015100B514000","010015100B514000","status-playable;amd-vendor-bug","playable","2024-09-06 13:21:21.000" +"Project Blue - 0100FCD0193A0000","0100FCD0193A0000","","","2023-10-24 15:55:09.000" +"Rear Sekai [ リアセカイ ] - 0100C3B01A5DD002","0100C3B01A5DD002","","","2023-10-24 01:55:18.000" +"Dementium: The Ward (Dementium Remastered) - 010038B01D2CA000","010038B01D2CA000","status-boots;crash","boots","2024-09-02 08:28:14.000" +"A Tiny Sticker Tale - 0100f6001b738000","0100f6001b738000","","","2023-10-26 23:15:46.000" +"Clive 'n' Wrench - 0100C6C010AE4000","0100C6C010AE4000","","","2023-10-28 14:56:46.000" +"STAR OCEAN The Second Story R - 010065301A2E0000","010065301A2E0000","status-ingame;crash","ingame","2024-06-01 02:39:59.000" +"Song of Nunu: A League of Legends Story - 01004F401BEBE000","01004F401BEBE000","status-ingame","ingame","2024-07-12 18:53:44.000" +"MythForce","","","","2023-11-03 12:58:52.000" +"Here Comes Niko! - 01001600121D4000","01001600121D4000","","","2023-11-04 22:26:44.000" +"Warioware: Move IT! - 010045B018EC2000","010045B018EC2000","status-playable","playable","2023-11-14 00:23:51.000" +"Game of Life [ 人生ゲーム for Nintendo Switch ] - 0100FF1017F76000","0100FF1017F76000","","","2023-11-07 19:59:08.000" +"Osyaberi! Horijyo! Gekihori - 01005D6013A54000","01005D6013A54000","","","2023-11-07 01:46:43.000" +"Fashion Dreamer - 0100E99019B3A000","0100E99019B3A000","status-playable","playable","2023-11-12 06:42:52.000" +"THE 密室逃脱 ~牵动命运的三十五道谜团~ (ESCAPE TRICK: 35 Fateful Enigmas) - 010087F005DFE000","010087F005DFE000","","","2023-11-08 02:20:17.000" +"Hogwarts Legacy 0100F7E00C70E000","0100F7E00C70E000","status-ingame;slow","ingame","2024-09-03 19:53:58.000" +"Super Mario RPG - 0100BC0018138000","0100BC0018138000","gpu;audio;status-ingame;nvdec","ingame","2024-06-19 17:43:42.000" +"Venatrix - 010063601B386000","010063601B386000","","","2023-11-18 06:55:12.000" +"Dreamwork's All-Star Kart Racing - 010037401A374000","010037401A374000","Incomplete","","2024-02-27 08:58:57.000" +"Watermelon Game [ スイカゲーム ] - 0100800015926000","0100800015926000","","","2023-11-27 02:49:45.000" +"屁屁侦探 噗噗 未来的名侦探登场! (Oshiri Tantei Mirai no Meitantei Tojo!) - 0100FDE017E56000","0100FDE017E56000","","","2023-12-01 11:15:46.000" +"Batman: Arkham Knight - 0100ACD0163D0000","0100ACD0163D0000","gpu;status-ingame;mac-bug","ingame","2024-06-25 20:24:42.000" +"DRAGON QUEST MONSTERS: The Dark Prince - 0100A77018EA0000","0100A77018EA0000","status-playable","playable","2023-12-29 16:10:05.000" +"ftpd classic - 0000000000000000","0000000000000000","homebrew","","2023-12-03 23:42:19.000" +"ftpd pro - 0000000000000000","0000000000000000","homebrew","","2023-12-03 23:47:46.000" +"Batman: Arkham City - 01003f00163ce000","01003f00163ce000","status-playable","playable","2024-09-11 00:30:19.000" +"DoDonPachi DAI-OU-JOU Re:incarnation (怒首領蜂大往生 臨廻転生) - 0100526017B00000","0100526017B00000","","","2023-12-08 15:16:22.000" +"Squid Commando - 0100044018E82000","0100044018E82000","","","2023-12-08 17:17:27.000" +"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!) - 0100BF401AF9C000","0100BF401AF9C000","slow;status-playable","playable","2023-12-31 14:37:17.000" +"Another Code: Recollection DEMO - 01003E301A4D6000","01003E301A4D6000","","","2023-12-15 06:48:09.000" +"Alien Hominid HD - 010056B019874000","010056B019874000","","","2023-12-17 13:10:46.000" +"Piyokoro - 010098801D706000","010098801D706000","","","2023-12-18 02:17:53.000" +"Uzzuzuu My Pet - Golf Dash - 010015B01CAF0000","010015B01CAF0000","","","2023-12-18 02:17:57.000" +"Alien Hominid Invasion - 0100A3E00CDD4000","0100A3E00CDD4000","Incomplete","","2024-07-17 01:56:28.000" +"void* tRrLM2(); //Void Terrarium 2 (USA/EU) - 0100B510183BC000","0100B510183BC000","","","2023-12-21 11:08:18.000" +"Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3 - 010047F01AA10000","010047F01AA10000","services-horizon;status-menus","menus","2024-07-24 06:34:06.000" +"Party Friends - 0100C0A01D478000","0100C0A01D478000","","","2023-12-23 02:43:33.000" +"Yohane the Parhelion Numazu in the Mirage Demo - 0100D7201DAAE000","0100D7201DAAE000","","","2023-12-23 02:49:28.000" +"SPY×FAMILY OPERATION DIARY - 010041601AB40000","010041601AB40000","","","2023-12-23 02:52:29.000" +"Golf Guys - 010040901CC42000","010040901CC42000","","","2023-12-28 01:20:16.000" +"Persona 5 Tactica - 010087701B092000","010087701B092000","status-playable","playable","2024-04-01 22:21:03.000" +"Batman: Arkham Asylum - 0100E870163CA000","0100E870163CA000","","","2024-01-11 23:03:37.000" +"Persona 5 Royal (KR/HK) - 01004B10157F2000","01004B10157F2000","Incomplete","","2024-08-17 21:42:28.000" +"Prince of Persia: The Lost Crown - 0100210019428000","0100210019428000","status-ingame;crash","ingame","2024-06-08 21:31:58.000" +"Another Code: Recollection - 0100CB9018F5A000","0100CB9018F5A000","gpu;status-ingame;crash","ingame","2024-09-06 05:58:52.000" +"It Takes Two - 010092A0172E4000","010092A0172E4000","","","2024-01-23 05:15:26.000" +"逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy) - 010020D01B890000","010020D01B890000","status-playable","playable","2024-06-21 21:54:27.000" +"Hitman: Blood Money - Reprisal - 010083A018262000","010083A018262000","deadlock;status-ingame","ingame","2024-09-28 16:28:50.000" +"Mario vs. Donkey Kong™ Demo - 0100D9E01DBB0000","0100D9E01DBB0000","status-playable","playable","2024-02-18 10:40:06.000" +"LEGO The Incredibles - 0100F19006E04000","0100F19006E04000","crash","","2024-02-11 00:46:53.000" +"Tomb Raider I-III Remastered - 010024601BB16000","010024601BB16000","gpu;status-ingame;opengl","ingame","2024-09-27 12:32:04.000" +"Arzette: The Jewel of Faramore - 0100B7501C46A000","0100B7501C46A000","","","2024-02-17 17:22:34.000" +"Mario vs. Donkey Kong - 0100B99019412000","0100B99019412000","status-playable","playable","2024-05-04 21:22:39.000" +"Penny's Big Breakaway - 0100CA901AA9C000","0100CA901AA9C000","status-playable;amd-vendor-bug","playable","2024-05-27 07:58:51.000" +"CEIBA - 0100E8801D97E000","0100E8801D97E000","","","2024-02-25 22:33:36.000" +"Lil' Guardsman v1.1 - 010060B017F6E000","010060B017F6E000","","","2024-02-25 19:21:03.000" +"Fearmonium - 0100F5501CE12000","0100F5501CE12000","status-boots;crash","boots","2024-03-06 11:26:11.000" +"NeverAwake - 0100DA30189CA000","0100DA30189CA000","","","2024-02-26 02:27:39.000" +"Zombies Rising XXX","","","","2024-02-26 07:53:03.000" +"Balatro - 0100CD801CE5E000","0100CD801CE5E000","status-ingame","ingame","2024-04-21 02:01:53.000" +"Prison City - 0100C1801B914000","0100C1801B914000","gpu;status-ingame","ingame","2024-03-01 08:19:33.000" +"Yo-kai Watch Jam: Y School Heroes: Bustlin' School Life - 010051D010FC2000","010051D010FC2000","","","2024-03-03 02:57:22.000" +"Princess Peach: Showtime! Demo - 010024701DC2E000","010024701DC2E000","status-playable;UE4;demo","playable","2024-03-10 17:46:45.000" +"Unicorn Overlord - 010069401ADB8000","010069401ADB8000","status-playable","playable","2024-09-27 14:04:32.000" +"Dodgeball Academia - 010001F014D9A000","010001F014D9A000","","","2024-03-09 03:49:28.000" +"魂斗罗:加鲁加行动 (Contra: Operation Galuga) - 0100CF401A98E000","0100CF401A98E000","","","2024-03-13 01:13:42.000" +"STAR WARS Battlefront Classic Collection - 010040701B948000","010040701B948000","gpu;status-ingame;vulkan","ingame","2024-07-12 19:24:21.000" +"MLB The Show 24 - 0100E2E01C32E000","0100E2E01C32E000","services-horizon;status-nothing","nothing","2024-03-31 04:54:11.000" +"Orion Haste - 01009B401DD02000","01009B401DD02000","","","2024-03-16 17:22:59.000" +"Gylt - 0100AC601DCA8000","0100AC601DCA8000","status-ingame;crash","ingame","2024-03-18 20:16:51.000" +"マクロス(Macross) -Shooting Insight- - 01001C601B8D8000","01001C601B8D8000","","","2024-03-20 17:10:26.000" +"Geometry Survivor - 01006D401D4F4000","01006D401D4F4000","","","2024-03-20 17:35:34.000" +"Gley Lancer and Gynoug - Classic Shooting Pack - 010037201E3DA000","010037201E3DA000","","","2024-03-20 18:19:37.000" +"Princess Peach: Showtime! - 01007A3009184000","01007A3009184000","status-playable;UE4","playable","2024-09-21 13:39:45.000" +"Cosmic Fantasy Collection - 0100CCB01B1A0000","0100CCB01B1A0000","status-ingame","ingame","2024-05-21 17:56:37.000" +"Fit Boxing feat. 初音ミク - 010045D01AFC8000","010045D01AFC8000","","","2024-03-28 04:07:57.000" +"Sonic 2 (2013) - 0000000000000000","0000000000000000","status-ingame;crash;homebrew","ingame","2024-04-01 16:25:30.000" +"Sonic CD - 0000000000000000","0000000000000000","status-ingame;crash;homebrew","ingame","2024-04-01 16:25:31.000" +"Sonic A.I.R - 0000000000000000","0000000000000000","status-ingame;homebrew","ingame","2024-04-01 16:25:32.000" +"RSDKv5u - 0000000000000000","0000000000000000","status-ingame;homebrew","ingame","2024-04-01 16:25:34.000" +"Sonic 1 (2013) - 0000000000000000","0000000000000000","status-ingame;crash;homebrew","ingame","2024-04-06 18:31:20.000" +"The Dark Pictures Anthology : Man of Medan - 0100711017B30000","0100711017B30000","","","2024-04-01 16:38:04.000" +"SpaceCadetPinball - 0000000000000000","0000000000000000","status-ingame;homebrew","ingame","2024-04-18 19:30:04.000" +"Pepper Grinder - 0100B98019068000","0100B98019068000","","","2024-04-04 16:31:57.000" +"RetroArch - 010000000000100D","010000000000100D","","","2024-04-07 18:23:18.000" +"YouTube - 01003A400C3DA800","01003A400C3DA800","status-playable","playable","2024-06-08 05:24:10.000" +"Pawapoke R - 01000c4015030000","01000c4015030000","services-horizon;status-nothing","nothing","2024-05-14 14:28:32.000" +"MegaZeux - 0000000000000000","0000000000000000","","","2024-04-16 23:46:53.000" +"ANTONBLAST (Demo) - 0100B5F01EB24000","0100B5F01EB24000","","","2024-04-18 22:45:13.000" +"Europa (Demo) - 010092501EB2C000","010092501EB2C000","gpu;status-ingame;crash;UE4","ingame","2024-04-23 10:47:12.000" +"BioShock 1 & 2 Remastered [0100AD10102B2000 - 01002620102C6800] v1.0.2","0100AD10102B2000","","","2024-04-19 19:08:30.000" +"Turrican Anthology Vol. 2 - 010061D0130CA000 - game freezes at the beginning","010061D0130CA000","Incomplete","","2024-04-25 17:57:06.000" +"Nickelodeon All-Star Brawl 2 - 010010701AFB2000","010010701AFB2000","status-playable","playable","2024-06-03 14:15:01.000" +"Bloo Kid - 0100C6A01AD56000","0100C6A01AD56000","status-playable","playable","2024-05-01 17:18:04.000" +"Tales of Kenzera: ZAU - 01005C7015D30000","01005C7015D30000","","","2024-04-30 10:11:26.000" +"Demon Slayer – Kimetsu no Yaiba – Sweep the Board! - 0100A7101B806000","0100A7101B806000","","","2024-05-02 10:19:47.000" +"Endless Ocean Luminous - 010067B017588000","010067B017588000","services-horizon;status-ingame;crash","ingame","2024-05-30 02:05:57.000" +"Moto GP 24 - 010040401D564000","010040401D564000","gpu;status-ingame","ingame","2024-05-10 23:41:00.000" +"The game of life 2 - 0100B620139D8000","0100B620139D8000","","","2024-05-03 12:08:33.000" +"ANIMAL WELL - 010020D01AD24000","010020D01AD24000","status-playable","playable","2024-05-22 18:01:49.000" +"Super Mario World - 0000000000000000","0000000000000000","status-boots;homebrew","boots","2024-06-13 01:40:31.000" +"1000xRESIST - 0100B02019866000","0100B02019866000","","","2024-05-11 17:18:57.000" +"Dave The Diver - 010097F018538000","010097F018538000","Incomplete","","2024-09-03 21:38:55.000" +"Zombiewood","","Incomplete","","2024-05-15 11:37:19.000" +"Pawapoke Dash - 010066A015F94000","010066A015F94000","","","2024-05-16 08:45:51.000" +"Biomutant - 01004BA017CD6000","01004BA017CD6000","status-ingame;crash","ingame","2024-05-16 15:46:36.000" +"Vampire Survivors - 010089A0197E4000","010089A0197E4000","status-ingame","ingame","2024-06-17 09:57:38.000" +"Koumajou Remilia II Stranger’s Requiem","","Incomplete","","2024-05-22 20:59:04.000" +"Paper Mario: The Thousand-Year Door - 0100ECD018EBE000","0100ECD018EBE000","gpu;status-ingame;intel-vendor-bug;slow","ingame","2025-01-07 04:27:35.000" +"Stories From Sol: The Gun-dog Demo - 010092A01EC94000","010092A01EC94000","","","2024-05-22 19:55:35.000" +"Earth Defense Force: World Brothers 2 - 010083a01d456000","010083a01d456000","","","2024-06-01 18:34:34.000" +"锈色湖畔:内在昔日(Rusty Lake: The Past Within) - 01007010157EC000","01007010157EC000","","","2024-06-10 13:47:40.000" +"Garden Life A Cozy Simulator - 0100E3801ACC0000","0100E3801ACC0000","","","2024-06-12 00:12:01.000" +"Shin Megami Tensei V: Vengeance - 010069C01AB82000","010069C01AB82000","gpu;status-ingame;vulkan-backend-bug","ingame","2024-07-14 11:28:24.000" +"Valiant Hearts - The great war - 01006C70146A2000","01006C70146A2000","","","2024-06-18 21:31:15.000" +"Monster Hunter Stories - 010069301B1D4000","010069301B1D4000","Incomplete","","2024-09-11 07:58:24.000" +"Rocket Knight Adventures: Re-Sparked","","","","2024-06-20 20:13:10.000" +"Metal Slug Attack Reloaded","","","","2024-06-20 19:55:22.000" +"#BLUD - 010060201E0A4000","010060201E0A4000","","","2024-06-23 13:57:22.000" +"NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS - 0100D2D0190A4000","0100D2D0190A4000","services-horizon;status-nothing","nothing","2024-07-25 05:16:48.000" +"Bang-On Balls: Chronicles - 010081E01A45C000","010081E01A45C000","Incomplete","","2024-08-01 16:40:12.000" +"Downward: Enhanced Edition 0100C5501BF24000","0100C5501BF24000","","","2024-06-26 00:22:34.000" +"DNF Duel: Who's Next - 0100380017D3E000","0100380017D3E000","Incomplete","","2024-07-23 02:25:50.000" +"Borderlands 3 - 01009970122E4000","01009970122E4000","gpu;status-ingame","ingame","2024-07-15 04:38:14.000" +"Luigi's Mansion 2 HD - 010048701995E000","010048701995E000","status-ingame;ldn-broken;amd-vendor-bug","ingame","2024-09-05 23:47:27.000" +"Super Monkey Ball Banana Rumble - 010031F019294000","010031F019294000","status-playable","playable","2024-06-28 10:39:18.000" +"City of Beats 0100E94016B9E000","0100E94016B9E000","","","2024-07-01 07:02:20.000" +"Maquette 0100861018480000","0100861018480000","","","2024-07-04 05:20:21.000" +"Monomals - 01003030161DC000","01003030161DC000","gpu;status-ingame","ingame","2024-08-06 22:02:51.000" +"Ace Combat 7 - Skies Unknown Deluxe Edition - 010039301B7E0000","010039301B7E0000","gpu;status-ingame;UE4","ingame","2024-09-27 14:31:43.000" +"Teenage Mutant Ninja Turtles: Splintered Fate - 01005CF01E784000","01005CF01E784000","status-playable","playable","2024-08-03 13:50:42.000" +"Powerful Pro Baseball 2024-2025 - 0100D1C01C194000","0100D1C01C194000","gpu;status-ingame","ingame","2024-08-25 06:40:48.000" +"World of Goo 2 - 010061F01DB7C800","010061F01DB7C800","status-boots","boots","2024-08-08 22:52:49.000" +"Tomba! Special Edition - 0100D7F01E49C000","0100D7F01E49C000","services-horizon;status-nothing","nothing","2024-09-15 21:59:54.000" +"Machi Koro With Everyone-0100C32018824000","0100C32018824000","","","2024-08-07 19:19:30.000" +"STAR WARS: Bounty Hunter - 0100d7a01b7a2000","0100d7a01b7a2000","","","2024-08-08 11:12:56.000" +"Outer Wilds - 01003DC0144B6000","01003DC0144B6000","","","2024-08-08 17:36:16.000" +"Grounded 01006F301AE9C000","01006F301AE9C000","","","2024-08-09 16:35:52.000" +"DOOM + DOOM II - 01008CB01E52E000","01008CB01E52E000","status-playable;opengl;ldn-untested;LAN","playable","2024-09-12 07:06:01.000" +"Fishing Paradiso - 0100890016A74000","0100890016A74000","","","2024-08-11 21:39:54.000" +"Revue Starlight El Dorado - 010099c01d642000","010099c01d642000","","","2024-09-02 18:58:18.000" +"PowerWash Simulator - 0100926016012000","0100926016012000","","","2024-08-22 00:47:34.000" +"Thank Goodness You’re Here! - 010053101ACB8000","010053101ACB8000","","","2024-09-25 16:15:40.000" +"Freedom Planet 2 V1.2.3r (01009A301B68000)","","","","2024-08-23 18:16:54.000" +"Ace Attorney Investigations Collection DEMO - 010033401E68E000","010033401E68E000","status-playable","playable","2024-09-07 06:16:42.000" +"Castlevania Dominus Collection - 0100FA501AF90000","0100FA501AF90000","","","2024-09-19 01:39:04.000" +"Chants of Sennaar - 0100543019CB0000","0100543019CB0000","","","2024-09-19 16:30:27.000" +"Taisho x Alice ALL IN ONE - 大正×対称アリス ALL IN ONE - 010096000ca38000","010096000ca38000","","","2024-09-11 21:20:04.000" +"NBA 2K25 - 0100DFF01ED44000","0100DFF01ED44000","","","2024-09-10 17:34:54.000" +"逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection) - 010005501E68C000","010005501E68C000","status-playable","playable","2024-09-19 16:38:05.000" +"Fabledom - 0100B6001E6D6000","0100B6001E6D6000","","","2024-09-28 12:12:55.000" +"BZZZT - 010091201A3F2000","010091201A3F2000","","","2024-09-22 21:29:58.000" +"EA SPORTS FC 25 - 010054E01D878000","010054E01D878000","status-ingame;crash","ingame","2024-09-25 21:07:50.000" +"Selfloss - 010036C01E244000","010036C01E244000","","","2024-09-23 23:12:13.000" +"Disney Epic Mickey: Rebrushed - 0100DA201EBF8000","0100DA201EBF8000","status-ingame;crash","ingame","2024-09-26 22:11:51.000" +"The Plucky Squire - 01006BD018B54000","01006BD018B54000","status-ingame;crash","ingame","2024-09-27 22:32:33.000" +"The Legend of Zelda Echoes of Wisdom - 01008CF01BAAC000","01008CF01BAAC000","status-playable;nvdec;ASTC;intel-vendor-bug","playable","2024-10-01 14:11:01.000" +"Bakeru - 01007CD01FAE0000","01007CD01FAE0000","","","2024-09-25 18:05:22.000" +"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~) - 01000BB01CB8A000","01000BB01CB8A000","status-nothing","nothing","2024-09-28 07:03:14.000" +"I am an Airtraffic Controller AIRPORT HERO HANEDA ALLSTARS - 01002EE01BAE0000","01002EE01BAE0000","","","2024-09-27 02:04:17.000" +"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari) - 01001BA01EBFC000","01001BA01EBFC000","services-horizon;status-nothing","nothing","2024-09-28 12:22:55.000" +"I am an Air Traffic Controller AIRPORT HERO HANEDA - 0100BE700EDA4000","0100BE700EDA4000","","","2024-09-27 23:52:19.000" +"Angel at Dusk Demo - 0100D96020ADC000","0100D96020ADC000","","","2024-09-29 17:21:13.000" +"Monster Jam™ Showdown - 0100CE101B698000","0100CE101B698000","","","2024-09-30 04:03:13.000" +"Legend of Heroes: Trails Through Daybreak - 010040C01D248000","010040C01D248000","","","2024-10-01 07:36:25.000" +"Mario & Luigi: Brothership - 01006D0017F7A000","01006D0017F7A000","status-ingame;crash;slow;UE4;mac-bug","ingame","2025-01-07 04:00:00.000" +"Stray - 010075101EF84000","010075101EF84000","status-ingame;crash","ingame","2025-01-07 04:03:00.000" +"Dragon Quest III HD-2D Remake - 01003E601E324000","01003E601E324000","status-ingame;vulkan-backend-bug;UE4;audout;mac-bug","ingame","2025-01-07 04:10:27.000" +"SONIC X SHADOW GENERATIONS - 01005EA01C0FC000","01005EA01C0FC000","status-ingame;crash","ingame","2025-01-07 04:20:45.000" +"LEGO Horizon Adventures - 010073C01AF34000","010073C01AF34000","status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4","ingame","2025-01-07 04:24:56.000" +"Legacy of Kain™ Soul Reaver 1&2 Remastered - 010079901C898000","010079901C898000","status-playable","playable","2025-01-07 05:50:01.000" diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index d6390cc7d..8a3482c01 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -3,6 +3,7 @@ using nietras.SeparatedValues; using Ryujinx.Ava.Common.Locale; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; @@ -32,21 +33,22 @@ namespace Ryujinx.Ava.Utilities.Compat { public CompatibilityEntry(SepReaderHeader header, SepReader.Row row) { - IssueNumber = row[header.IndexOf("issue_number")].Parse(); - - var titleIdRow = row[header.IndexOf("extracted_game_id")].ToString(); + if (row.ColCount != header.ColNames.Count) + throw new InvalidDataException($"CSV row {row.RowIndex} ({row.ToString()}) has mismatched column count"); + + var titleIdRow = ColStr(row[header.IndexOf("\"extracted_game_id\"")]); TitleId = !string.IsNullOrEmpty(titleIdRow) ? titleIdRow : default(Optional); - var issueTitleRow = row[header.IndexOf("issue_title")].ToString(); + var issueTitleRow = ColStr(row[header.IndexOf("\"issue_title\"")]); if (TitleId.HasValue) issueTitleRow = issueTitleRow.ReplaceIgnoreCase($" - {TitleId}", string.Empty); GameName = issueTitleRow.Trim().Trim('"'); - IssueLabels = row[header.IndexOf("issue_labels")].ToString().Split(';'); - Status = row[header.IndexOf("extracted_status")].ToString().ToLower() switch + IssueLabels = ColStr(row[header.IndexOf("\"issue_labels\"")]).Split(';'); + Status = ColStr(row[header.IndexOf("\"extracted_status\"")]).ToLower() switch { "playable" => LocaleKeys.CompatibilityListPlayable, "ingame" => LocaleKeys.CompatibilityListIngame, @@ -56,20 +58,19 @@ namespace Ryujinx.Ava.Utilities.Compat _ => null }; - if (row[header.IndexOf("last_event_date")].TryParse(out var dt)) + if (DateTime.TryParse(ColStr(row[header.IndexOf("\"last_event_date\"")]), out var dt)) LastEvent = dt; - if (row[header.IndexOf("events_count")].TryParse(out var eventsCount)) - EventCount = eventsCount; + return; + + string ColStr(SepReader.Col col) => col.ToString().Trim('"'); } - - public int IssueNumber { get; } + public string GameName { get; } public Optional TitleId { get; } public string[] IssueLabels { get; } public LocaleKeys? Status { get; } public DateTime LastEvent { get; } - public int EventCount { get; } public string LocalizedStatus => LocaleManager.Instance[Status!.Value]; public string FormattedTitleId => TitleId @@ -83,13 +84,11 @@ namespace Ryujinx.Ava.Utilities.Compat public override string ToString() { var sb = new StringBuilder("CompatibilityEntry: {"); - sb.Append($"{nameof(IssueNumber)}={IssueNumber}, "); sb.Append($"{nameof(GameName)}=\"{GameName}\", "); sb.Append($"{nameof(TitleId)}={TitleId}, "); sb.Append($"{nameof(IssueLabels)}=\"{IssueLabels}\", "); sb.Append($"{nameof(Status)}=\"{Status}\", "); - sb.Append($"{nameof(LastEvent)}=\"{LastEvent}\", "); - sb.Append($"{nameof(EventCount)}={EventCount}"); + sb.Append($"{nameof(LastEvent)}=\"{LastEvent}\""); sb.Append('}'); return sb.ToString(); -- 2.47.1 From 1e52af5e29c2ffe26225cafcad2208ccd572a094 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 7 Jan 2025 20:17:09 -0600 Subject: [PATCH 306/722] docs: compat: Multiple big changes: Sort alphabetically, Remove title IDs in "issue_title" column, and remove all entries without a playability status. --- docs/compatibility.csv | 7736 ++++++++++++++++++---------------------- 1 file changed, 3432 insertions(+), 4304 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 66de18297..9976c3bd5 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -1,4305 +1,3433 @@ "issue_title","extracted_game_id","issue_labels","extracted_status","last_event_date" -"ARMS - 01009B500007C000","01009B500007C000","status-playable;ldn-works;LAN","playable","2024-08-28 07:49:24.000" -"Pokemon Quest - 01005D100807A000","01005D100807A000","status-playable","playable","2022-02-22 16:12:32.000" -"Retro City Rampage DX","","status-playable","playable","2021-01-05 17:04:17.000" -"Kirby Star Allies - 01007E3006DDA000","01007E3006DDA000","status-playable;nvdec","playable","2023-11-15 17:06:19.000" -"Bayonetta 2 - 01007960049A0000","01007960049A0000","status-playable;nvdec;ldn-works;LAN","playable","2022-11-26 03:46:09.000" -"Bloons TD 5 - 0100B8400A1C6000","0100B8400A1C6000","Needs Update;audio;gpu;services;status-boots","boots","2021-04-18 23:02:46.000" -"Urban Trial Playground - 01001B10068EC000","01001B10068EC000","UE4;nvdec;online;status-playable","playable","2021-03-25 20:56:51.000" -"Ben 10 - 01006E1004404000","01006E1004404000","nvdec;status-playable","playable","2021-02-26 14:08:35.000" -"Lanota","","status-playable","playable","2019-09-04 01:58:14.000" -"Portal Knights - 0100437004170000","0100437004170000","ldn-untested;online;status-playable","playable","2021-05-27 19:29:04.000" -"Thimbleweed Park - 01009BD003B36000","01009BD003B36000","status-playable","playable","2022-08-24 11:15:31.000" -"Pokkén Tournament DX - 0100B3F000BE2000","0100B3F000BE2000","status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug","playable","2024-07-18 23:11:08.000" -"Farming Simulator Nintendo Switch Edition","","nvdec;status-playable","playable","2021-01-19 14:46:44.000" -"Sonic Forces - 01001270012B6000","01001270012B6000","status-playable","playable","2024-07-28 13:11:21.000" -"One Piece Pirate Warriors 3","","nvdec;status-playable","playable","2020-05-10 06:23:52.000" -"Dragon Quest Heroes I + II (JP) - 0100CD3000BDC000","0100CD3000BDC000","nvdec;status-playable","playable","2021-04-08 14:27:16.000" -"Dragon Quest Builders - 010008900705C000","010008900705C000","gpu;status-ingame;nvdec","ingame","2023-08-14 09:54:36.000" -"Don't Starve - 0100751007ADA000","0100751007ADA000","status-playable;nvdec","playable","2022-02-05 20:43:34.000" -"Bud Spencer & Terence Hill - Slaps and Beans - 01000D200AC0C000","01000D200AC0C000","status-playable","playable","2022-07-17 12:37:00.000" -"Fantasy Hero Unsigned Legacy - 0100767008502000","0100767008502000","status-playable","playable","2022-07-26 12:28:52.000" -"MUSNYX","","status-playable","playable","2020-05-08 14:24:43.000" -"Mario Tennis Aces - 0100BDE00862A000","0100BDE00862A000","gpu;status-ingame;nvdec;ldn-works;LAN","ingame","2024-09-28 15:54:40.000" -"Higurashi no Naku Koro ni Hō - 0100F6A00A684000","0100F6A00A684000","audio;status-ingame","ingame","2021-09-18 14:40:28.000" -"Nintendo Entertainment System - Nintendo Switch Online - 0100D870045B6000","0100D870045B6000","status-playable;online","playable","2022-07-01 15:45:06.000" -"SEGA Ages: Sonic The Hedgehog - 010051F00AC5E000","010051F00AC5E000","slow;status-playable","playable","2023-03-05 20:16:31.000" -"10 Second Run Returns - 01004D1007926000","01004D1007926000","gpu;status-ingame","ingame","2022-07-17 13:06:18.000" -"PriPara: All Idol Perfect Stage - 010007F00879E000","010007F00879E000","status-playable","playable","2022-11-22 16:35:52.000" -"Shantae and the Pirate's Curse - 0100EFD00A4FA000","0100EFD00A4FA000","status-playable","playable","2024-04-29 17:21:57.000" -"DARK SOULS™: REMASTERED - 01004AB00A260000","01004AB00A260000","gpu;status-ingame;nvdec;online-broken","ingame","2024-04-09 19:47:58.000" -"The Liar Princess and the Blind Prince - 010064B00B95C000","010064B00B95C000","audio;slow;status-playable","playable","2020-06-08 21:23:28.000" -"Dead Cells - 0100646009FBE000","0100646009FBE000","status-playable","playable","2021-09-22 22:18:49.000" -"Sonic Mania - 01009AA000FAA000","01009AA000FAA000","status-playable","playable","2020-06-08 17:30:57.000" -"The Mahjong","","Needs Update;crash;services;status-nothing","nothing","2021-04-01 22:06:22.000" -"Angels of Death - 0100AE000AEBC000","0100AE000AEBC000","nvdec;status-playable","playable","2021-02-22 14:17:15.000" -"Penny-Punching Princess - 0100C510049E0000","0100C510049E0000","status-playable","playable","2022-08-09 13:37:05.000" -"Just Shapes & Beats","","ldn-untested;nvdec;status-playable","playable","2021-02-09 12:18:36.000" -"Minecraft - Nintendo Switch Edition - 01006BD001E06000","01006BD001E06000","status-playable;ldn-broken","playable","2023-10-15 01:47:08.000" -"FINAL FANTASY XV POCKET EDITION HD","","status-playable","playable","2021-01-05 17:52:08.000" -"Dragon Ball Xenoverse 2 - 010078D000F88000","010078D000F88000","gpu;status-ingame;nvdec;online;ldn-untested","ingame","2022-07-24 12:31:01.000" -"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings - 010009900947A000","010009900947A000","nvdec;status-playable","playable","2021-06-03 18:37:01.000" -"Nights of Azure 2: Bride of the New Moon - 0100628004BCE000","0100628004BCE000","status-menus;crash;nvdec;regression","menus","2022-11-24 16:00:39.000" -"RXN -Raijin-","","nvdec;status-playable","playable","2021-01-10 16:05:43.000" -"The Legend of Zelda: Breath of the Wild - 01007EF00011E000","01007EF00011E000","gpu;status-ingame;amd-vendor-bug;mac-bug","ingame","2024-09-23 19:35:46.000" -"The Messenger","","status-playable","playable","2020-03-22 13:51:37.000" -"Starlink: Battle for Atlas - 01002CC003FE6000","01002CC003FE6000","services-horizon;status-nothing;crash;Needs Update","nothing","2024-05-05 17:25:11.000" -"Nintendo Labo - Toy-Con 01: Variety Kit - 0100C4B0034B2000","0100C4B0034B2000","gpu;status-ingame","ingame","2022-08-07 12:56:07.000" -"Diablo III: Eternal Collection - 01001B300B9BE000","01001B300B9BE000","status-playable;online-broken;ldn-works","playable","2023-08-21 23:48:03.000" -"Road Redemption - 010053000B986000","010053000B986000","status-playable;online-broken","playable","2022-08-12 11:26:20.000" -"Brawlhalla - 0100C6800B934000","0100C6800B934000","online;opengl;status-playable","playable","2021-06-03 18:26:09.000" -"Super Mario Odyssey - 0100000000010000","0100000000010000","status-playable;nvdec;intel-vendor-bug;mac-bug","playable","2024-08-25 01:32:34.000" -"Sonic Mania Plus - 01009AA000FAA000","01009AA000FAA000","status-playable","playable","2022-01-16 04:09:11.000" -"Pokken Tournament DX Demo - 010030D005AE6000","010030D005AE6000","status-playable;demo;opengl-backend-bug","playable","2022-08-10 12:03:19.000" -"Fast RMX - 01009510001CA000","01009510001CA000","slow;status-ingame;crash;ldn-partial","ingame","2024-06-22 20:48:58.000" -"Steins;Gate Elite","","status-playable","playable","2020-08-04 07:33:32.000" -"Memories Off -Innocent Fille- for Dearest","","status-playable","playable","2020-08-04 07:31:22.000" -"Enchanting Mahjong Match","","gpu;status-ingame","ingame","2020-04-17 22:01:31.000" -"Code of Princess EX - 010034E005C9C000","010034E005C9C000","nvdec;online;status-playable","playable","2021-06-03 10:50:13.000" -"20XX - 0100749009844000","0100749009844000","gpu;status-ingame","ingame","2023-08-14 09:41:44.000" -"Cartoon Network Battle Crashers - 0100085003A2A000","0100085003A2A000","status-playable","playable","2022-07-21 21:55:40.000" -"Danmaku Unlimited 3","","status-playable","playable","2020-11-15 00:48:35.000" -"Mega Man Legacy Collection Vol.1 - 01002D4007AE0000","01002D4007AE0000","gpu;status-ingame","ingame","2021-06-03 18:17:17.000" -"Sparkle ZERO","","gpu;slow;status-ingame","ingame","2020-03-23 18:19:18.000" -"Sparkle 2","","status-playable","playable","2020-10-19 11:51:39.000" -"Sparkle Unleashed - 01000DC007E90000","01000DC007E90000","status-playable","playable","2021-06-03 14:52:15.000" -"I AM SETSUNA - 0100849000BDA000","0100849000BDA000","status-playable","playable","2021-11-28 11:06:11.000" -"Lego City Undercover - 01003A30012C0000","01003A30012C0000","status-playable;nvdec","playable","2024-09-30 08:44:27.000" -"Mega Man X Legacy Collection","","audio;crash;services;status-menus","menus","2020-12-04 04:30:17.000" -"Super Bomberman R - 01007AD00013E000","01007AD00013E000","status-playable;nvdec;online-broken;ldn-works","playable","2022-08-16 19:19:14.000" -"Mega Man 11 - 0100B0C0086B0000","0100B0C0086B0000","status-playable","playable","2021-04-26 12:07:53.000" -"Undertale - 010080B00AD66000","010080B00AD66000","status-playable","playable","2022-08-31 17:31:46.000" -"Pokémon: Let's Go, Eevee! - 0100187003A36000","0100187003A36000","status-ingame;crash;nvdec;online-broken;ldn-broken","ingame","2024-06-01 15:03:04.000" -"Poly Bridge","","services;status-playable","playable","2020-06-08 23:32:41.000" -"BlazBlue: Cross Tag Battle","","nvdec;online;status-playable","playable","2021-01-05 20:29:37.000" -"Capcom Beat 'Em Up Bundle","","status-playable","playable","2020-03-23 18:31:24.000" -"Owlboy","","status-playable","playable","2020-10-19 14:24:45.000" -"Subarashiki Kono Sekai -Final Remix-","","services;slow;status-ingame","ingame","2020-02-10 16:21:51.000" -"Ultra Street Fighter II: The Final Challengers - 01007330027EE000","01007330027EE000","status-playable;ldn-untested","playable","2021-11-25 07:54:58.000" -"Mighty Gunvolt Burst","","status-playable","playable","2020-10-19 16:05:49.000" -"Super Meat Boy","","services;status-playable","playable","2020-04-02 23:10:07.000" -"UNO - 01005AA00372A000","01005AA00372A000","status-playable;nvdec;ldn-untested","playable","2022-07-28 14:49:47.000" -"Tales of the Tiny Planet - 0100408007078000","0100408007078000","status-playable","playable","2021-01-25 15:47:41.000" -"Octopath Traveler","","UE4;crash;gpu;status-ingame","ingame","2020-08-31 02:34:36.000" -"A magical high school girl - 01008DD006C52000","01008DD006C52000","status-playable","playable","2022-07-19 14:40:50.000" -"Superbeat: Xonic EX - 0100FF60051E2000","0100FF60051E2000","status-ingame;crash;nvdec","ingame","2022-08-19 18:54:40.000" -"DRAGON BALL FighterZ - 0100A250097F0000","0100A250097F0000","UE4;ldn-broken;nvdec;online;status-playable","playable","2021-06-11 16:19:04.000" -"Arcade Archives VS. SUPER MARIO BROS.","","online;status-playable","playable","2021-04-08 14:48:11.000" -"Celeste","","status-playable","playable","2020-06-17 10:14:40.000" -"Hollow Knight - 0100633007D48000","0100633007D48000","status-playable;nvdec","playable","2023-01-16 15:44:56.000" -"Shining Resonance Refrain - 01009A5009A9E000","01009A5009A9E000","status-playable;nvdec","playable","2022-08-12 18:03:01.000" -"Valkyria Chronicles 4 Demo - 0100FBD00B91E000","0100FBD00B91E000","slow;status-ingame;demo","ingame","2022-08-29 20:39:07.000" -"Super Smash Bros. Ultimate - 01006A800016E000","01006A800016E000","gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug","ingame","2024-09-14 23:05:21.000" -"Cendrillon palikA - 01006B000A666000","01006B000A666000","gpu;status-ingame;nvdec","ingame","2022-07-21 22:52:24.000" -"Atari Flashback Classics","","","","2018-12-15 06:55:27.000" -"RPG Maker MV","","nvdec;status-playable","playable","2021-01-05 20:12:01.000" -"SNK 40th Anniversary Collection - 01004AB00AEF8000","01004AB00AEF8000","status-playable","playable","2022-08-14 13:33:15.000" -"Firewatch - 0100AC300919A000","0100AC300919A000","status-playable","playable","2021-06-03 10:56:38.000" -"Taiko no Tatsujin: Drum 'n' Fun! - 01002C000B552000","01002C000B552000","status-playable;online-broken;ldn-broken","playable","2023-05-20 15:10:12.000" -"Fairy Fencer F™: Advent Dark Force - 0100F6D00B8F2000","0100F6D00B8F2000","status-ingame;32-bit;crash;nvdec","ingame","2023-04-16 03:53:48.000" -"Azure Striker Gunvolt: STRIKER PACK - 0100192003FA4000","0100192003FA4000","32-bit;status-playable","playable","2024-02-10 23:51:21.000" -"LIMBO - 01009C8009026000","01009C8009026000","cpu;status-boots;32-bit","boots","2023-06-28 15:39:19.000" -"Dragon Marked for Death: Frontline Fighters (Empress & Warrior) - 010089700150E000","010089700150E000","status-playable;ldn-untested;audout","playable","2022-03-10 06:44:34.000" -"SENRAN KAGURA Reflexions","","status-playable","playable","2020-03-23 19:15:23.000" -"Dies irae Amantes amentes For Nintendo Switch - 0100BB900B5B4000","0100BB900B5B4000","status-nothing;32-bit;crash","nothing","2022-02-16 07:09:05.000" -"TETRIS 99 - 010040600C5CE000","010040600C5CE000","gpu;status-ingame;online-broken;ldn-untested","ingame","2024-05-02 16:36:41.000" -"Yoshi's Crafted World Demo Version","","gpu;status-boots;status-ingame","boots","2020-12-16 14:57:40.000" -"8-BIT ADVENTURE STEINS;GATE","","audio;status-ingame","ingame","2020-01-12 15:05:06.000" -"Ao no Kanata no Four Rhythm - 0100FA100620C000","0100FA100620C000","status-playable","playable","2022-07-21 10:50:42.000" -"DELTARUNE Chapter 1 - 010023800D64A000","010023800D64A000","status-playable","playable","2023-01-22 04:47:44.000" -"My Girlfriend is a Mermaid!?","","nvdec;status-playable","playable","2020-05-08 13:32:55.000" -"SEGA Mega Drive Classics","","online;status-playable","playable","2021-01-05 11:08:00.000" -"Aragami: Shadow Edition - 010071800BA74000","010071800BA74000","nvdec;status-playable","playable","2021-02-21 20:33:23.000" -"この世の果てで恋を唄う少女YU-NO","","audio;status-ingame","ingame","2021-01-22 07:00:16.000" -"Xenoblade Chronicles 2 - 0100E95004038000","0100E95004038000","deadlock;status-ingame;amd-vendor-bug","ingame","2024-03-28 14:31:41.000" -"Atelier Rorona Arland no Renkinjutsushi DX (JP) - 01002D700B906000","01002D700B906000","status-playable;nvdec","playable","2022-12-02 17:26:54.000" -"DEAD OR ALIVE Xtreme 3 Scarlet - 01009CC00C97C000","01009CC00C97C000","status-playable","playable","2022-07-23 17:05:06.000" -"Blaster Master Zero 2 - 01005AA00D676000","01005AA00D676000","status-playable","playable","2021-04-08 15:22:59.000" -"Vroom in the Night Sky - 01004E90028A2000","01004E90028A2000","status-playable;Needs Update;vulkan-backend-bug","playable","2023-02-20 02:32:29.000" -"Our World Is Ended.","","nvdec;status-playable","playable","2021-01-19 22:46:57.000" -"Mortal Kombat 11 - 0100F2200C984000","0100F2200C984000","slow;status-ingame;nvdec;online-broken;ldn-broken","ingame","2024-06-19 02:22:17.000" -"SEGA Ages: Virtua Racing - 010054400D2E6000","010054400D2E6000","status-playable;online-broken","playable","2023-01-29 17:08:39.000" -"BOXBOY! + BOXGIRL!","","status-playable","playable","2020-11-08 01:11:54.000" -"Hyrule Warriors: Definitive Edition - 0100AE00096EA000","0100AE00096EA000","services-horizon;status-ingame;nvdec","ingame","2024-06-16 10:34:05.000" -"Cytus α - 010063100B2C2000","010063100B2C2000","nvdec;status-playable","playable","2021-02-20 13:40:46.000" -"Resident Evil 4 - 010099A00BC1E000","010099A00BC1E000","status-playable;nvdec","playable","2022-11-16 21:16:04.000" -"Team Sonic Racing - 010092B0091D0000","010092B0091D0000","status-playable;online-broken;ldn-works","playable","2024-02-05 15:05:27.000" -"Pang Adventures - 010083700B730000","010083700B730000","status-playable","playable","2021-04-10 12:16:59.000" -"Remi Lore - 010095900B436000","010095900B436000","status-playable","playable","2021-06-03 18:58:15.000" -"SKYHILL - 0100A0A00D1AA000","0100A0A00D1AA000","status-playable","playable","2021-03-05 15:19:11.000" -"Valkyria Chronicles 4 - 01005C600AC68000","01005C600AC68000","audout;nvdec;status-playable","playable","2021-06-03 18:12:25.000" -"Crystal Crisis - 0100972008234000","0100972008234000","nvdec;status-playable","playable","2021-02-20 13:52:44.000" -"Crash Team Racing Nitro-Fueled - 0100F9F00C696000","0100F9F00C696000","gpu;status-ingame;nvdec;online-broken","ingame","2023-06-25 02:40:17.000" -"Collection of Mana","","status-playable","playable","2020-10-19 19:29:45.000" -"Super Mario Maker 2 - 01009B90006DC000","01009B90006DC000","status-playable;online-broken;ldn-broken","playable","2024-08-25 11:05:19.000" -"Nekopara Vol.3 - 010045000E418000","010045000E418000","status-playable","playable","2022-10-03 12:49:04.000" -"Moero Chronicle Hyper - 0100B8500D570000","0100B8500D570000","32-bit;status-playable","playable","2022-08-11 07:21:56.000" -"Monster Hunter XX Demo","","32-bit;cpu;status-nothing","nothing","2020-03-22 10:12:28.000" -"Super Neptunia RPG - 01004D600AC14000","01004D600AC14000","status-playable;nvdec","playable","2022-08-17 16:38:52.000" -"Terraria - 0100E46006708000","0100E46006708000","status-playable;online-broken","playable","2022-09-12 16:14:57.000" -"Megaman Legacy Collection 2","","status-playable","playable","2021-01-06 08:47:59.000" -"Blazing Chrome","","status-playable","playable","2020-11-16 04:56:54.000" -"Dragon Quest Builders 2 - 010042000A986000","010042000A986000","status-playable","playable","2024-04-19 16:36:38.000" -"CLANNAD - 0100A3A00CC7E000","0100A3A00CC7E000","status-playable","playable","2021-06-03 17:01:02.000" -"Ys VIII: Lacrimosa of Dana - 01007F200B0C0000","01007F200B0C0000","status-playable;nvdec","playable","2023-08-05 09:26:41.000" -"PC Building Simulator","","status-playable","playable","2020-06-12 00:31:58.000" -"NO THING","","status-playable","playable","2021-01-04 19:06:01.000" -"The Swords of Ditto","","slow;status-ingame","ingame","2020-12-06 00:13:12.000" -"Kill la Kill - IF","","status-playable","playable","2020-06-09 14:47:08.000" -"Spyro Reignited Trilogy","","Needs More Attention;UE4;crash;gpu;nvdec;status-menus","menus","2021-01-22 13:01:56.000" -"FINAL FANTASY VIII REMASTERED - 01008B900DC0A000","01008B900DC0A000","status-playable;nvdec","playable","2023-02-15 10:57:48.000" -"Super Nintendo Entertainment System - Nintendo Switch Online","","status-playable","playable","2021-01-05 00:29:48.000" -"スーパーファミコン Nintendo Switch Online","","slow;status-ingame","ingame","2020-03-14 05:48:38.000" -"Street Fighter 30th Anniversary Collection - 0100024008310000","0100024008310000","status-playable;online-broken;ldn-partial","playable","2022-08-20 16:50:47.000" -"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda - 01000B900D8B0000","01000B900D8B0000","slow;status-playable;nvdec","playable","2024-04-01 22:43:40.000" -"Nekopara Vol.2","","status-playable","playable","2020-12-16 11:04:47.000" -"Nekopara Vol.1 - 0100B4900AD3E000","0100B4900AD3E000","status-playable;nvdec","playable","2022-08-06 18:25:54.000" -"Gunvolt Chronicles: Luminous Avenger iX","","status-playable","playable","2020-06-16 22:47:07.000" -"Outlast - 01008D4007A1E000","01008D4007A1E000","status-playable;nvdec;loader-allocator;vulkan-backend-bug","playable","2024-01-27 04:44:26.000" -"OKAMI HD - 0100276009872000","0100276009872000","status-playable;nvdec","playable","2024-04-05 06:24:58.000" -"Luigi's Mansion 3 - 0100DCA0064A6000","0100DCA0064A6000","gpu;slow;status-ingame;Needs Update;ldn-works","ingame","2024-09-27 22:17:36.000" -"The Legend of Zelda: Link's Awakening - 01006BB00C6F0000","01006BB00C6F0000","gpu;status-ingame;nvdec;mac-bug","ingame","2023-08-09 17:37:40.000" -"Cat Quest","","status-playable","playable","2020-04-02 23:09:32.000" -"Xenoblade Chronicles 2: Torna - The Golden Country - 0100C9F009F7A000","0100C9F009F7A000","slow;status-playable;nvdec","playable","2023-01-28 16:47:28.000" -"Devil May Cry","","nvdec;status-playable","playable","2021-01-04 19:43:08.000" -"Fire Emblem Warriors - 0100F15003E64000","0100F15003E64000","status-playable;nvdec","playable","2023-05-10 01:53:10.000" -"Disgaea 4 Complete Plus","","gpu;slow;status-playable","playable","2020-02-18 10:54:28.000" -"Donkey Kong Country Tropical Freeze - 0100C1F0051B6000","0100C1F0051B6000","status-playable","playable","2024-08-05 16:46:10.000" -"Puzzle and Dragons GOLD","","slow;status-playable","playable","2020-05-13 15:09:34.000" -"Fe","","","","2020-01-21 04:08:33.000" -"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020 - 010002C00C270000","010002C00C270000","status-ingame;crash;online-broken;ldn-works","ingame","2024-08-23 16:12:55.000" -"void* tRrLM(); //Void Terrarium - 0100FF7010E7E000","0100FF7010E7E000","gpu;status-ingame;Needs Update;regression","ingame","2023-02-10 01:13:25.000" -"Cars 3 Driven to Win - 01008D1001512000","01008D1001512000","gpu;status-ingame","ingame","2022-07-21 21:21:05.000" -"Yu-Gi-Oh! Legacy of the Duelist: Link Evolution! - 010022400BE5A000","010022400BE5A000","status-playable","playable","2024-09-27 21:48:43.000" -"Baba Is You - 01002CD00A51C000","01002CD00A51C000","status-playable","playable","2022-07-17 05:36:54.000" -"Thronebreaker: The Witcher Tales - 0100E910103B4000","0100E910103B4000","nvdec;status-playable","playable","2021-06-03 16:40:15.000" -"Fitness Boxing","","services;status-ingame","ingame","2020-05-17 14:00:48.000" -"Fire Emblem: Three Houses - 010055D009F78000","010055D009F78000","status-playable;online-broken","playable","2024-09-14 23:53:50.000" -"Persona 5: Scramble","","deadlock;status-boots","boots","2020-10-04 03:22:29.000" -"Pokémon Sword - 0100ABF008968000","0100ABF008968000","deadlock;status-ingame;crash;online-broken;ldn-works;LAN","ingame","2024-08-26 15:40:37.000" -"Mario + Rabbids Kingdom Battle - 010067300059A000","010067300059A000","slow;status-playable;opengl-backend-bug","playable","2024-05-06 10:16:54.000" -"Tokyo Mirage Sessions #FE Encore - 0100A9400C9C2000","0100A9400C9C2000","32-bit;status-playable;nvdec","playable","2022-07-07 09:41:07.000" -"Disgaea 1 Complete - 01004B100AF18000","01004B100AF18000","status-playable","playable","2023-01-30 21:45:23.000" -"初音ミク Project DIVA MEGA39's - 0100F3100DA46000","0100F3100DA46000","audio;status-playable;loader-allocator","playable","2022-07-29 11:45:52.000" -"Minna de Wai Wai! Spelunker - 0100C3F000BD8000","0100C3F000BD8000","status-nothing;crash","nothing","2021-11-03 07:17:11.000" -"Nickelodeon Paw Patrol: On a Roll - 0100CEC003A4A000","0100CEC003A4A000","nvdec;status-playable","playable","2021-01-28 21:14:49.000" -"Rune Factory 4 Special - 010051D00E3A4000","010051D00E3A4000","status-ingame;32-bit;crash;nvdec","ingame","2023-05-06 08:49:17.000" -"Mario Kart 8 Deluxe - 0100152000022000","0100152000022000","32-bit;status-playable;ldn-works;LAN;amd-vendor-bug","playable","2024-09-19 11:55:17.000" -"Pokémon Mystery Dungeon Rescue Team DX - 01003D200BAA2000","01003D200BAA2000","status-playable;mac-bug","playable","2024-01-21 00:16:32.000" -"YGGDRA UNION We’ll Never Fight Alone","","status-playable","playable","2020-04-03 02:20:47.000" -"メモリーズオフ - Innocent Fille - 010065500B218000","010065500B218000","status-playable","playable","2022-12-02 17:36:48.000" -"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town) - 01001D900D9AC000","01001D900D9AC000","slow;status-ingame;crash;Needs Update","ingame","2022-04-24 22:46:04.000" -"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition - 0100CE500D226000","0100CE500D226000","status-playable;nvdec;opengl","playable","2022-09-14 15:01:57.000" -"Animal Crossing: New Horizons - 01006F8002326000","01006F8002326000","gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug","ingame","2024-09-23 13:31:49.000" -"Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!","","services;status-menus","menus","2020-03-20 14:00:57.000" -"Super One More Jump - 0100284007D6C000","0100284007D6C000","status-playable","playable","2022-08-17 16:47:47.000" -"Trine - 0100D9000A930000","0100D9000A930000","ldn-untested;nvdec;status-playable","playable","2021-06-03 11:28:15.000" -"Sky Force Reloaded","","status-playable","playable","2021-01-04 20:06:57.000" -"World of Goo - 010009E001D90000","010009E001D90000","gpu;status-boots;32-bit;crash;regression","boots","2024-04-12 05:52:14.000" -"ZERO GUNNER 2","","status-playable","playable","2021-01-04 20:17:14.000" -"Zaccaria Pinball - 010092400A678000","010092400A678000","status-playable;online-broken","playable","2022-09-03 15:44:28.000" -"1917 - The Alien Invasion DX","","status-playable","playable","2021-01-08 22:11:16.000" -"Astro Duel Deluxe - 0100F0400351C000","0100F0400351C000","32-bit;status-playable","playable","2021-06-03 11:21:48.000" -"Another World - 01003C300AAAE000","01003C300AAAE000","slow;status-playable","playable","2022-07-21 10:42:38.000" -"Ring Fit Adventure - 01002FF008C24000","01002FF008C24000","crash;services;status-nothing","nothing","2021-04-14 19:00:01.000" -"Arcade Classics Anniversary Collection - 010050000D6C4000","010050000D6C4000","status-playable","playable","2021-06-03 13:55:10.000" -"Assault Android Cactus+ - 0100DF200B24C000","0100DF200B24C000","status-playable","playable","2021-06-03 13:23:55.000" -"American Fugitive","","nvdec;status-playable","playable","2021-01-04 20:45:11.000" -"Nickelodeon Kart Racers","","status-playable","playable","2021-01-07 12:16:49.000" -"Neonwall - 0100743008694000","0100743008694000","status-playable;nvdec","playable","2022-08-06 18:49:52.000" -"Never Stop Sneakin'","","","","2020-03-19 12:55:40.000" -"Next Up Hero","","online;status-playable","playable","2021-01-04 22:39:36.000" -"Ninja Striker","","status-playable","playable","2020-12-08 19:33:29.000" -"Not Not a Brain Buster","","status-playable","playable","2020-05-10 02:05:26.000" -"Oh...Sir! The Hollywood Roast","","status-ingame","ingame","2020-12-06 00:42:30.000" -"Old School Musical","","status-playable","playable","2020-12-10 12:51:12.000" -"Abyss","","","","2020-03-19 15:41:55.000" -"Alteric","","status-playable","playable","2020-11-08 13:53:22.000" -"AIRHEART - Tales of Broken Wings - 01003DD00BFEE000","01003DD00BFEE000","status-playable","playable","2021-02-26 15:20:27.000" -"Necrosphere","","","","2020-03-19 17:25:03.000" -"Neverout","","","","2020-03-19 17:33:39.000" -"Old Man's Journey - 0100CE2007A86000","0100CE2007A86000","nvdec;status-playable","playable","2021-01-28 19:16:52.000" -"Dr Kawashima's Brain Training - 0100ED000D390000","0100ED000D390000","services;status-ingame","ingame","2023-06-04 00:06:46.000" -"Nine Parchments - 0100D03003F0E000","0100D03003F0E000","status-playable;ldn-untested","playable","2022-08-07 12:32:08.000" -"All-Star Fruit Racing - 0100C1F00A9B8000","0100C1F00A9B8000","status-playable;nvdec;UE4","playable","2022-07-21 00:35:37.000" -"Armello","","nvdec;status-playable","playable","2021-01-07 11:43:26.000" -"DOOM 64","","nvdec;status-playable;vulkan","playable","2020-10-13 23:47:28.000" -"Motto New Pazzmatsu-san Shimpin Sotsugyo Keikaku","","","","2020-03-20 14:53:55.000" -"Refreshing Sideways Puzzle Ghost Hammer","","status-playable","playable","2020-10-18 12:08:54.000" -"Astebreed - 010057A00C1F6000","010057A00C1F6000","status-playable","playable","2022-07-21 17:33:54.000" -"ASCENDANCE","","status-playable","playable","2021-01-05 10:54:40.000" -"Astral Chain - 01007300020FA000","01007300020FA000","status-playable","playable","2024-07-17 18:02:19.000" -"Oceanhorn","","status-playable","playable","2021-01-05 13:55:22.000" -"NORTH","","nvdec;status-playable","playable","2021-01-05 16:17:44.000" -"No Heroes Here","","online;status-playable","playable","2020-05-10 02:41:57.000" -"New Frontier Days -Founding Pioneers-","","status-playable","playable","2020-12-10 12:45:07.000" -"Star Ghost","","","","2020-03-20 23:40:10.000" -"Stern Pinball Arcade - 0100AE0006474000","0100AE0006474000","status-playable","playable","2022-08-16 14:24:41.000" -"Nightmare Boy","","status-playable","playable","2021-01-05 15:52:29.000" -"Pinball FX3 - 0100DB7003828000","0100DB7003828000","status-playable;online-broken","playable","2022-11-11 23:49:07.000" -"Polygod - 010017600B180000","010017600B180000","slow;status-ingame;regression","ingame","2022-08-10 14:38:14.000" -"Prison Architect - 010029200AB1C000","010029200AB1C000","status-playable","playable","2021-04-10 12:27:58.000" -"Psikyo Collection Vol 1","","32-bit;status-playable","playable","2020-10-11 13:18:47.000" -"Raging Justice - 01003D00099EC000","01003D00099EC000","status-playable","playable","2021-06-03 14:06:50.000" -"Old School Racer 2","","status-playable","playable","2020-10-19 12:11:26.000" -"Death Road to Canada - 0100423009358000","0100423009358000","gpu;audio;status-nothing;32-bit;crash","nothing","2023-06-28 15:39:26.000" -"Feather - 0100E4300CB3E000","0100E4300CB3E000","status-playable","playable","2021-06-03 14:11:27.000" -"Laser Kitty Pow Pow","","","","2020-03-21 23:44:13.000" -"Bad Dudes","","status-playable","playable","2020-12-10 12:30:56.000" -"Bomber Crew - 01007900080B6000","01007900080B6000","status-playable","playable","2021-06-03 14:21:28.000" -"Death Squared","","status-playable","playable","2020-12-04 13:00:15.000" -"PAC-MAN CHAMPIONSHIP EDITION 2 PLUS","","status-playable","playable","2021-01-19 22:06:18.000" -"RollerCoaster Tycoon Adventures","","nvdec;status-playable","playable","2021-01-05 18:14:18.000" -"STAY - 0100616009082000","0100616009082000","crash;services;status-boots","boots","2021-04-23 14:24:52.000" -"STRIKERS1945 for Nintendo Switch - 0100FF5005B76000","0100FF5005B76000","32-bit;status-playable","playable","2021-06-03 19:35:04.000" -"STRIKERS1945II for Nintendo Switch - 0100720008ED2000","0100720008ED2000","32-bit;status-playable","playable","2021-06-03 19:43:00.000" -"BLEED","","","","2020-03-22 09:15:11.000" -"Earthworms Demo","","status-playable","playable","2021-01-05 16:57:11.000" -"MEMBRANE","","","","2020-03-22 10:25:32.000" -"Mercenary Kings","","online;status-playable","playable","2020-10-16 13:05:58.000" -"Morphite","","status-playable","playable","2021-01-05 19:40:55.000" -"Spiral Splatter","","status-playable","playable","2020-06-04 14:03:57.000" -"Odium to the Core","","gpu;status-ingame","ingame","2021-01-08 14:03:52.000" -"Brawl","","nvdec;slow;status-playable","playable","2020-06-04 14:23:18.000" -"Defunct","","status-playable","playable","2021-01-08 21:33:46.000" -"Dracula's Legacy","","nvdec;status-playable","playable","2020-12-10 13:24:25.000" -"Submerged - 0100EDA00D866000","0100EDA00D866000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-16 15:17:01.000" -"Resident Evil Revelations - 0100643002136000","0100643002136000","status-playable;nvdec;ldn-untested","playable","2022-08-11 12:44:19.000" -"Pokémon: Let's Go, Pikachu! - 010003F003A34000","010003F003A34000","status-ingame;crash;nvdec;online-broken;ldn-broken","ingame","2024-03-15 07:55:41.000" -"Syberia 1 & 2 - 01004BB00421E000","01004BB00421E000","status-playable","playable","2021-12-24 12:06:25.000" -"Light Fall","","nvdec;status-playable","playable","2021-01-18 14:55:36.000" -"PLANET ALPHA","","UE4;gpu;status-ingame","ingame","2020-12-16 14:42:20.000" -"Game Doraemon Nobita no Shin Kyoryu - 01006BD00F8C0000","01006BD00F8C0000","gpu;status-ingame","ingame","2023-02-27 02:03:28.000" -"Shift Happens","","status-playable","playable","2021-01-05 21:24:18.000" -"SENRAN KAGURA Peach Ball - 0100D1800D902000","0100D1800D902000","status-playable","playable","2021-06-03 15:12:10.000" -"Shadow Bug","","","","2020-03-23 20:26:08.000" -"Dandy Dungeon: Legend of Brave Yamada","","status-playable","playable","2021-01-06 09:48:47.000" -"Scribblenauts Mega Pack","","nvdec;status-playable","playable","2020-12-17 22:56:14.000" -"Scribblenauts Showdown","","gpu;nvdec;status-ingame","ingame","2020-12-17 23:05:53.000" -"Super Chariot - 010065F004E5E000","010065F004E5E000","status-playable","playable","2021-06-03 13:19:01.000" -"Table Top Racing World Tour Nitro Edition","","status-playable","playable","2020-04-05 23:21:30.000" -"The Pinball Arcade - 0100CD300880E000","0100CD300880E000","status-playable;online-broken","playable","2022-08-22 19:49:46.000" -"The Room - 010079400BEE0000","010079400BEE0000","status-playable","playable","2021-04-14 18:57:05.000" -"The Binding of Isaac: Afterbirth+ - 010021C000B6A000","010021C000B6A000","status-playable","playable","2021-04-26 14:11:56.000" -"World Soccer Pinball","","status-playable","playable","2021-01-06 00:37:02.000" -"ZOMBIE GOLD RUSH","","online;status-playable","playable","2020-09-24 12:56:08.000" -"Wondershot - 0100F5D00C812000","0100F5D00C812000","status-playable","playable","2022-08-31 21:05:31.000" -"Yet Another Zombie Defense HD","","status-playable","playable","2021-01-06 00:18:39.000" -"Among the Sleep - Enhanced Edition - 010046500C8D2000","010046500C8D2000","nvdec;status-playable","playable","2021-06-03 15:06:25.000" -"Silence - 0100F1400B0D6000","0100F1400B0D6000","nvdec;status-playable","playable","2021-06-03 14:46:17.000" -"A Robot Named Fight","","","","2020-03-24 19:27:39.000" -"60 Seconds! - 0100969005E98000","0100969005E98000","services;status-ingame","ingame","2021-11-30 01:04:14.000" -"Xenon Racer - 010028600BA16000","010028600BA16000","status-playable;nvdec;UE4","playable","2022-08-31 22:05:30.000" -"Awesome Pea","","status-playable","playable","2020-10-11 12:39:23.000" -"Woodle Tree 2","","gpu;slow;status-ingame","ingame","2020-06-04 18:44:00.000" -"Volgarr the Viking","","status-playable","playable","2020-12-18 15:25:50.000" -"VVVVVV","","","","2020-03-24 21:53:29.000" -"Vegas Party - 01009CD003A0A000","01009CD003A0A000","status-playable","playable","2021-04-14 19:21:41.000" -"Worms W.M.D - 01001AE005166000","01001AE005166000","gpu;status-boots;crash;nvdec;ldn-untested","boots","2023-09-16 21:42:59.000" -"Ambition of the Slimes","","","","2020-03-24 22:46:18.000" -"WINDJAMMERS","","online;status-playable","playable","2020-10-13 11:24:25.000" -"WarGroove - 01000F0002BB6000","01000F0002BB6000","status-playable;online-broken","playable","2022-08-31 10:30:45.000" -"Car Mechanic Manager","","status-playable","playable","2020-07-23 18:50:17.000" -"Cattails - 010004400B28A000","010004400B28A000","status-playable","playable","2021-06-03 14:36:57.000" -"Chameleon Run Deluxe Edition","","","","2020-03-25 00:20:21.000" -"ClusterPuck 99","","status-playable","playable","2021-01-06 00:28:12.000" -"Coloring Book - 0100A7000BD28000","0100A7000BD28000","status-playable","playable","2022-07-22 11:17:05.000" -"Crashlands - 010027100BD16000","010027100BD16000","status-playable","playable","2021-05-27 20:30:06.000" -"Crimsonland - 01005640080B0000","01005640080B0000","status-playable","playable","2021-05-27 20:50:54.000" -"Cubikolor","","","","2020-03-25 00:39:17.000" -"My Friend Pedro: Blood Bullets Bananas - 010031200B94C000","010031200B94C000","nvdec;status-playable","playable","2021-05-28 11:19:17.000" -"VA-11 HALL-A - 0100A6700D66E000","0100A6700D66E000","status-playable","playable","2021-02-26 15:05:34.000" -"Octodad Dadliest Catch - 0100CAB006F54000","0100CAB006F54000","crash;status-boots","boots","2021-04-23 15:26:12.000" -"Neko Navy: Daydream Edition","","","","2020-03-25 10:11:47.000" -"Neon Chrome - 010075E0047F8000","010075E0047F8000","status-playable","playable","2022-08-06 18:38:34.000" -"NeuroVoider","","status-playable","playable","2020-06-04 18:20:05.000" -"Ninjin: Clash of Carrots - 010003C00B868000","010003C00B868000","status-playable;online-broken","playable","2024-07-10 05:12:26.000" -"Nuclien","","status-playable","playable","2020-05-10 05:32:55.000" -"Number Place 10000 - 010020500C8C8000","010020500C8C8000","gpu;status-menus","menus","2021-11-24 09:14:23.000" -"Octocopter: Double or Squids","","status-playable","playable","2021-01-06 01:30:16.000" -"Odallus - 010084300C816000","010084300C816000","status-playable","playable","2022-08-08 12:37:58.000" -"One Eyed Kutkh","","","","2020-03-25 11:42:58.000" -"One More Dungeon","","status-playable","playable","2021-01-06 09:10:58.000" -"1-2-Switch - 01000320000CC000","01000320000CC000","services;status-playable","playable","2022-02-18 14:44:03.000" -"ACA NEOGEO AERO FIGHTERS 2 - 0100AC40038F4000","0100AC40038F4000","online;status-playable","playable","2021-04-08 15:44:09.000" -"Captain Toad: Treasure Tracker - 01009BF0072D4000","01009BF0072D4000","32-bit;status-playable","playable","2024-04-25 00:50:16.000" -"Vaccine","","nvdec;status-playable","playable","2021-01-06 01:02:07.000" -"Carnival Games - 010088C0092FE000","010088C0092FE000","status-playable;nvdec","playable","2022-07-21 21:01:22.000" -"OLYMPIC GAMES TOKYO 2020","","ldn-untested;nvdec;online;status-playable","playable","2021-01-06 01:20:24.000" -"Yodanji","","","","2020-03-25 16:28:53.000" -"Axiom Verge","","status-playable","playable","2020-10-20 01:07:18.000" -"Blaster Master Zero - 0100225000FEE000","0100225000FEE000","32-bit;status-playable","playable","2021-03-05 13:22:33.000" -"SamuraiAces for Nintendo Switch","","32-bit;status-playable","playable","2020-11-24 20:26:55.000" -"Rogue Aces - 0100EC7009348000","0100EC7009348000","gpu;services;status-ingame;nvdec","ingame","2021-11-30 02:18:30.000" -"Pokémon HOME","","Needs Update;crash;services;status-menus","menus","2020-12-06 06:01:51.000" -"Safety First!","","status-playable","playable","2021-01-06 09:05:23.000" -"3D MiniGolf","","status-playable","playable","2021-01-06 09:22:11.000" -"DOUBLE DRAGON4","","","","2020-03-25 23:46:46.000" -"Don't Die Mr. Robot DX - 010007200AC0E000","010007200AC0E000","status-playable;nvdec","playable","2022-09-02 18:34:38.000" -"DERU - The Art of Cooperation","","status-playable","playable","2021-01-07 16:59:59.000" -"Darts Up - 0100BA500B660000","0100BA500B660000","status-playable","playable","2021-04-14 17:22:22.000" -"Deponia - 010023600C704000","010023600C704000","nvdec;status-playable","playable","2021-01-26 17:17:19.000" -"Devious Dungeon - 01009EA00A320000","01009EA00A320000","status-playable","playable","2021-03-04 13:03:06.000" -"Turok - 010085500D5F6000","010085500D5F6000","gpu;status-ingame","ingame","2021-06-04 13:16:24.000" -"Toast Time: Smash Up!","","crash;services;status-menus","menus","2020-04-03 12:26:59.000" -"The VideoKid","","nvdec;status-playable","playable","2021-01-06 09:28:24.000" -"Timberman VS","","","","2020-03-26 14:18:29.000" -"Time Recoil - 0100F770045CA000","0100F770045CA000","status-playable","playable","2022-08-24 12:44:03.000" -"Toby: The Secret Mine","","nvdec;status-playable","playable","2021-01-06 09:22:33.000" -"Toki Tori","","","","2020-03-26 14:49:54.000" -"Totes the Goat","","","","2020-03-26 14:55:00.000" -"Twin Robots: Ultimate Edition - 0100047009742000","0100047009742000","status-playable;nvdec","playable","2022-08-25 14:24:03.000" -"Ultimate Runner - 010045200A1C2000","010045200A1C2000","status-playable","playable","2022-08-29 12:52:40.000" -"UnExplored - Unlocked Edition","","status-playable","playable","2021-01-06 10:02:16.000" -"Unepic - 01008F80049C6000","01008F80049C6000","status-playable","playable","2024-01-15 17:03:00.000" -"Uncanny Valley - 01002D900C5E4000","01002D900C5E4000","nvdec;status-playable","playable","2021-06-04 13:28:45.000" -"Ultra Hyperball","","status-playable","playable","2021-01-06 10:09:55.000" -"Timespinner - 0100DD300CF3A000","0100DD300CF3A000","gpu;status-ingame","ingame","2022-08-09 09:39:11.000" -"Tiny Barbarian DX","","","","2020-03-26 18:46:29.000" -"TorqueL -Physics Modified Edition-","","","","2020-03-26 18:55:23.000" -"Unholy Heights","","","","2020-03-26 19:03:43.000" -"Uurnog Uurnlimited","","","","2020-03-26 19:34:02.000" -"de Blob 2","","nvdec;status-playable","playable","2021-01-06 13:00:16.000" -"The Trail: Frontier Challenge - 0100B0E0086F6000","0100B0E0086F6000","slow;status-playable","playable","2022-08-23 15:10:51.000" -"Toy Stunt Bike: Tiptop's Trials - 01009FF00A160000","01009FF00A160000","UE4;status-playable","playable","2021-04-10 13:56:34.000" -"TumbleSeed","","","","2020-03-26 21:27:06.000" -"Type:Rider","","status-playable","playable","2021-01-06 13:12:55.000" -"Dawn of the Breakers - 0100F0B0081DA000","0100F0B0081DA000","status-menus;online-broken;vulkan-backend-bug","menus","2022-12-08 14:40:03.000" -"Thumper - 01006F6002840000","01006F6002840000","gpu;status-ingame","ingame","2024-08-12 02:41:07.000" -"Revenge of Justice - 010027400F708000 ","010027400F708000","status-playable;nvdec","playable","2022-11-20 15:43:23.000" -"Dead Synchronicity: Tomorrow Comes Today","","","","2020-03-26 23:13:28.000" -"Them Bombs","","","","2020-03-27 12:46:15.000" -"Alwa's Awakening","","status-playable","playable","2020-10-13 11:52:01.000" -"La Mulana 2 - 010038000F644000","010038000F644000","status-playable","playable","2022-09-03 13:45:57.000" -"Tied Together - 0100B6D00C2DE000","0100B6D00C2DE000","nvdec;status-playable","playable","2021-04-10 14:03:46.000" -"Magic Scroll Tactics","","","","2020-03-27 14:00:41.000" -"SeaBed","","status-playable","playable","2020-05-17 13:25:37.000" -"Wenjia","","status-playable","playable","2020-06-08 11:38:30.000" -"DragonBlaze for Nintendo Switch","","32-bit;status-playable","playable","2020-10-14 11:11:28.000" -"Debris Infinity - 010034F00BFC8000","010034F00BFC8000","nvdec;online;status-playable","playable","2021-05-28 12:14:39.000" -"Die for Valhalla!","","status-playable","playable","2021-01-06 16:09:14.000" -"Double Cross","","status-playable","playable","2021-01-07 15:34:22.000" -"Deep Ones","","services;status-nothing","nothing","2020-04-03 02:54:19.000" -"One Step to Eden","","","","2020-03-27 16:31:39.000" -"Bravely Default II Demo - 0100B6801137E000","0100B6801137E000","gpu;status-ingame;crash;UE4;demo","ingame","2022-09-27 05:39:47.000" -"Prison Princess - 0100F4800F872000","0100F4800F872000","status-playable","playable","2022-11-20 15:00:25.000" -"NinNinDays - 0100746010E4C000","0100746010E4C000","status-playable","playable","2022-11-20 15:17:29.000" -"Syrup and the Ultimate Sweet","","","","2020-03-27 21:10:42.000" -"Touhou Gensou Mahjong","","","","2020-03-27 21:36:20.000" -"Shikhondo Soul Eater","","","","2020-03-27 22:14:23.000" -" de Shooting wa Machigatteiru Daroka","","","","2020-03-27 22:27:54.000" -"MY HERO ONE'S JUSTICE","","UE4;crash;gpu;online;status-menus","menus","2020-12-10 13:11:04.000" -"Heaven Dust","","status-playable","playable","2020-05-17 14:02:41.000" -"Touhou Sky Arena matsuri climax","","","","2020-03-28 00:25:17.000" -"Mercenaries Wings The False Phoenix","","crash;services;status-nothing","nothing","2020-05-08 22:42:12.000" -"Don't Sink - 0100C4D00B608000","0100C4D00B608000","gpu;status-ingame","ingame","2021-02-26 15:41:11.000" -"Disease -Hidden Object-","","","","2020-03-28 08:17:51.000" -"Dexteritrip","","status-playable","playable","2021-01-06 12:51:12.000" -"Devil Engine - 010031B00CF66000","010031B00CF66000","status-playable","playable","2021-06-04 11:54:30.000" -"Detective Gallo - 01009C0009842000","01009C0009842000","status-playable;nvdec","playable","2022-07-24 11:51:04.000" -"Zettai kaikyu gakuen","","gpu;nvdec;status-ingame","ingame","2020-08-25 15:15:54.000" -"Demetrios - The BIG Cynical Adventure - 0100AB600ACB4000","0100AB600ACB4000","status-playable","playable","2021-06-04 12:01:01.000" -"Degrees of Separation","","status-playable","playable","2021-01-10 13:40:04.000" -"De Mambo - 01008E900471E000","01008E900471E000","status-playable","playable","2021-04-10 12:39:40.000" -"Death Mark","","status-playable","playable","2020-12-13 10:56:25.000" -"Deemo - 01002CC0062B8000","01002CC0062B8000","status-playable","playable","2022-07-24 11:34:33.000" -"Disgaea 5 Complete - 01005700031AE000","01005700031AE000","nvdec;status-playable","playable","2021-03-04 15:32:54.000" -"The World Ends With You -Final Remix- - 0100C1500B82E000","0100C1500B82E000","status-playable;ldn-untested","playable","2022-07-09 01:11:21.000" -"Don't Knock Twice - 0100E470067A8000","0100E470067A8000","status-playable","playable","2024-05-08 22:37:58.000" -"True Fear: Forsaken Souls - Part 1","","nvdec;status-playable","playable","2020-12-15 21:39:52.000" -"Disco Dodgeball Remix","","online;status-playable","playable","2020-09-28 23:24:49.000" -"Demon's Crystals - 0100A2B00BD88000","0100A2B00BD88000","status-nothing;crash;regression","nothing","2022-12-07 16:33:17.000" -"Dimension Drive","","","","2020-03-29 10:40:38.000" -"Tower of Babel","","status-playable","playable","2021-01-06 17:05:15.000" -"Disc Jam - 0100510004D2C000","0100510004D2C000","UE4;ldn-untested;nvdec;online;status-playable","playable","2021-04-08 16:40:35.000" -"DIABOLIK LOVERS CHAOS LINEAGE - 010027400BD24000","010027400BD24000","gpu;status-ingame;Needs Update","ingame","2023-06-08 02:20:44.000" -"Detention","","","","2020-03-29 11:17:35.000" -"Tumblestone","","status-playable","playable","2021-01-07 17:49:20.000" -"De Blob","","nvdec;status-playable","playable","2021-01-06 17:34:46.000" -"The Voice ","","services;status-menus","menus","2020-07-28 20:48:49.000" -"DESTINY CONNECT","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 12:20:36.000" -"The Sexy Brutale","","status-playable","playable","2021-01-06 17:48:28.000" -"Unicornicopia","","","","2020-03-29 13:01:35.000" -"Ultra Space Battle Brawl","","","","2020-03-29 13:13:02.000" -"Unruly Heroes","","status-playable","playable","2021-01-07 18:09:31.000" -"UglyDolls: An Imperfect Adventure - 010079000B56C000","010079000B56C000","status-playable;nvdec;UE4","playable","2022-08-25 14:42:16.000" -"Use Your Words - 01007C0003AEC000","01007C0003AEC000","status-menus;nvdec;online-broken","menus","2022-08-29 17:22:10.000" -"New Super Lucky's Tale - 010017700B6C2000","010017700B6C2000","status-playable","playable","2024-03-11 14:14:10.000" -"Yooka-Laylee and the Impossible Lair - 010022F00DA66000","010022F00DA66000","status-playable","playable","2021-03-05 17:32:21.000" -"GRIS - 0100E1700C31C000","0100E1700C31C000","nvdec;status-playable","playable","2021-06-03 13:33:44.000" -"Monster Boy and the Cursed Kingdom - 01006F7001D10000","01006F7001D10000","status-playable;nvdec","playable","2022-08-04 20:06:32.000" -"Guns Gore and Cannoli 2","","online;status-playable","playable","2021-01-06 18:43:59.000" -"Mark of the Ninja Remastered - 01009A700A538000","01009A700A538000","status-playable","playable","2022-08-04 15:48:30.000" -"DOOM - 0100416004C00000","0100416004C00000","gpu;slow;status-ingame;nvdec;online-broken","ingame","2024-09-23 15:40:07.000" -"TINY METAL - 010074800741A000","010074800741A000","UE4;gpu;nvdec;status-ingame","ingame","2021-03-05 17:11:57.000" -"Shadowgate","","status-playable","playable","2021-04-24 07:32:57.000" -"R-Type Dimensions EX","","status-playable","playable","2020-10-09 12:04:43.000" -"Thea: The Awakening","","status-playable","playable","2021-01-18 15:08:47.000" -"Toki","","nvdec;status-playable","playable","2021-01-06 19:59:23.000" -"Superhot - 01001A500E8B4000","01001A500E8B4000","status-playable","playable","2021-05-05 19:51:30.000" -"Tools Up!","","crash;status-ingame","ingame","2020-07-21 12:58:17.000" -"The Stretchers - 0100AA400A238000","0100AA400A238000","status-playable;nvdec;UE4","playable","2022-09-16 15:40:58.000" -"Shantae: Half-Genie Hero Ultimate Edition","","status-playable","playable","2020-06-04 20:14:20.000" -"Monster Hunter Generation Ultimate - 0100770008DD8000","0100770008DD8000","32-bit;status-playable;online-broken;ldn-works","playable","2024-03-18 14:35:36.000" -"ATV Drift & Tricks - 01000F600B01E000","01000F600B01E000","UE4;online;status-playable","playable","2021-04-08 17:29:17.000" -"Metaloid: Origin","","status-playable","playable","2020-06-04 20:26:35.000" -"The Walking Dead: The Final Season - 010060F00AA70000","010060F00AA70000","status-playable;online-broken","playable","2022-08-23 17:22:32.000" -"Lyrica","","","","2020-03-31 10:09:40.000" -"Beat Cop","","status-playable","playable","2021-01-06 19:26:48.000" -"Broforce - 010060A00B53C000","010060A00B53C000","ldn-untested;online;status-playable","playable","2021-05-28 12:23:38.000" -"Ludo Mania","","crash;services;status-nothing","nothing","2020-04-03 00:33:47.000" -"The Way Remastered","","","","2020-03-31 10:34:26.000" -"Little Inferno","","32-bit;gpu;nvdec;status-ingame","ingame","2020-12-17 21:43:56.000" -"Toki Tori 2+","","","","2020-03-31 10:53:13.000" -"Bastion - 010038600B27E000","010038600B27E000","status-playable","playable","2022-02-15 14:15:24.000" -"Lovers in a Dangerous Spacetime","","","","2020-03-31 13:45:03.000" -"Back in 1995","","","","2020-03-31 13:52:35.000" -"Lost Phone Stories","","services;status-ingame","ingame","2020-04-05 23:17:33.000" -"The Walking Dead - 010029200B6AA000","010029200B6AA000","status-playable","playable","2021-06-04 13:10:56.000" -"Beyblade Burst Battle Zero - 010068600AD16000","010068600AD16000","services;status-menus;crash;Needs Update","menus","2022-11-20 15:48:32.000" -"Tiny Hands Adventure - 010061A00AE64000","010061A00AE64000","status-playable","playable","2022-08-24 16:07:48.000" -"My Time At Portia - 0100E25008E68000","0100E25008E68000","status-playable","playable","2021-05-28 12:42:55.000" -"NBA 2K Playgrounds 2 - 01001AE00C1B2000","01001AE00C1B2000","status-playable;nvdec;online-broken;UE4;vulkan-backend-bug","playable","2022-08-06 14:40:38.000" -"Valfaris - 010089700F30C000","010089700F30C000","status-playable","playable","2022-09-16 21:37:24.000" -"Wandersong - 0100F8A00853C000","0100F8A00853C000","nvdec;status-playable","playable","2021-06-04 15:33:34.000" -"Untitled Goose Game","","status-playable","playable","2020-09-26 13:18:06.000" -"Unbox: Newbie's Adventure - 0100592005164000","0100592005164000","status-playable;UE4","playable","2022-08-29 13:12:56.000" -"Trine 4: The Nightmare Prince - 010055E00CA68000","010055E00CA68000","gpu;status-nothing","nothing","2025-01-07 05:47:46.000" -"Travis Strikes Again: No More Heroes - 010011600C946000","010011600C946000","status-playable;nvdec;UE4","playable","2022-08-25 12:36:38.000" -"Bubble Bobble 4 Friends - 010010900F7B4000","010010900F7B4000","nvdec;status-playable","playable","2021-06-04 15:27:55.000" -"Bloodstained: Curse of the Moon","","status-playable","playable","2020-09-04 10:42:17.000" -"Unravel TWO - 0100E5D00CC0C000","0100E5D00CC0C000","status-playable;nvdec","playable","2024-05-23 15:45:05.000" -"Blazing Beaks","","status-playable","playable","2020-06-04 20:37:06.000" -"Moonlighter","","","","2020-04-01 12:52:32.000" -"Rock N' Racing Grand Prix","","status-playable","playable","2021-01-06 20:23:57.000" -"Blossom Tales - 0100C1000706C000","0100C1000706C000","status-playable","playable","2022-07-18 16:43:07.000" -"Maria The Witch","","","","2020-04-01 13:22:05.000" -"Runbow","","online;status-playable","playable","2021-01-08 22:47:44.000" -"Salt And Sanctuary","","status-playable","playable","2020-10-22 11:52:19.000" -"Bomb Chicken","","","","2020-04-01 13:52:21.000" -"Typoman","","","","2020-04-01 14:01:55.000" -"BOX Align","","crash;services;status-nothing","nothing","2020-04-03 17:26:56.000" -"Bridge Constructor Portal","","","","2020-04-01 14:59:34.000" -"METAGAL","","status-playable","playable","2020-06-05 00:05:48.000" -"Severed","","status-playable","playable","2020-12-15 21:48:48.000" -"Bombslinger - 010087300445A000","010087300445A000","services;status-menus","menus","2022-07-19 12:53:15.000" -"ToeJam & Earl: Back in the Groove","","status-playable","playable","2021-01-06 22:56:58.000" -"SHIFT QUANTUM","","UE4;crash;status-ingame","ingame","2020-11-06 21:54:08.000" -"Mana Spark","","status-playable","playable","2020-12-10 13:41:01.000" -"BOOST BEAST","","","","2020-04-01 22:07:28.000" -"Bass Pro Shops: The Strike - Championship Edition - 0100E3100450E000","0100E3100450E000","gpu;status-boots;32-bit","boots","2022-12-09 15:58:16.000" -"Semispheres","","status-playable","playable","2021-01-06 23:08:31.000" -"Megaton Rainfall - 010005A00B312000","010005A00B312000","gpu;status-boots;opengl","boots","2022-08-04 18:29:43.000" -"Romancing SaGa 2 - 01001F600829A000","01001F600829A000","status-playable","playable","2022-08-12 12:02:24.000" -"Runner3","","","","2020-04-02 12:58:46.000" -"Shakedown: Hawaii","","status-playable","playable","2021-01-07 09:44:36.000" -"Minit","","","","2020-04-02 13:15:45.000" -"Little Nightmares - 01002FC00412C000","01002FC00412C000","status-playable;nvdec;UE4","playable","2022-08-03 21:45:35.000" -"Shephy","","","","2020-04-02 13:33:44.000" -"Millie - 0100976008FBE000","0100976008FBE000","status-playable","playable","2021-01-26 20:47:19.000" -"Bloodstained: Ritual of the Night - 010025A00DF2A000","010025A00DF2A000","status-playable;nvdec;UE4","playable","2022-07-18 14:27:35.000" -"Shape Of The World - 0100B250009B96000","0100B250009B9600","UE4;status-playable","playable","2021-03-05 16:42:28.000" -"Bendy and the Ink Machine - 010074500BBC4000","010074500BBC4000","status-playable","playable","2023-05-06 20:35:39.000" -"Brothers: A Tale of Two Sons - 01000D500D08A000","01000D500D08A000","status-playable;nvdec;UE4","playable","2022-07-19 14:02:22.000" -"Raging Loop","","","","2020-04-03 12:29:28.000" -"A Hat In Time - 010056E00853A000","010056E00853A000","status-playable","playable","2024-06-25 19:52:44.000" -"Cooking Mama: Cookstar - 010060700EFBA000","010060700EFBA000","status-menus;crash;loader-allocator","menus","2021-11-20 03:19:35.000" -"Marble Power Blast - 01008E800D1FE000","01008E800D1FE000","status-playable","playable","2021-06-04 16:00:02.000" -"NARUTO™: Ultimate Ninja® STORM - 0100715007354000","0100715007354000","status-playable;nvdec","playable","2022-08-06 14:10:31.000" -"Oddmar","","","","2020-04-04 20:46:28.000" -"BLEED 2","","","","2020-04-05 11:29:05.000" -"Sea King - 0100E4A00D066000","0100E4A00D066000","UE4;nvdec;status-playable","playable","2021-06-04 15:49:22.000" -"Sausage Sports Club","","gpu;status-ingame","ingame","2021-01-10 05:37:17.000" -"Mini Metro","","","","2020-04-05 11:55:19.000" -"Mega Mall Story - 0100BBC00CB9A000","0100BBC00CB9A000","slow;status-playable","playable","2022-08-04 17:10:58.000" -"BILLIARD","","","","2020-04-05 13:41:11.000" -"The Wardrobe","","","","2020-04-05 13:53:33.000" -"LITTLE FRIENDS -DOGS & CATS-","","status-playable","playable","2020-11-12 12:45:51.000" -"LOST SPHEAR","","status-playable","playable","2021-01-10 06:01:21.000" -"Morphies Law","","UE4;crash;ldn-untested;nvdec;online;status-menus","menus","2020-11-22 17:05:29.000" -"Mercenaries Saga Chronicles","","status-playable","playable","2021-01-10 12:48:19.000" -"The Swindle - 010040D00B7CE000","010040D00B7CE000","status-playable;nvdec","playable","2022-08-22 20:53:52.000" -"Monster Energy Supercross - The Official Videogame - 0100742007266000","0100742007266000","status-playable;nvdec;UE4","playable","2022-08-04 20:25:00.000" -"Monster Energy Supercross - The Official Videogame 2 - 0100F8100B982000","0100F8100B982000","status-playable;nvdec;UE4;ldn-untested","playable","2022-08-04 21:21:24.000" -"Lumo - 0100FF00042EE000","0100FF00042EE000","status-playable;nvdec","playable","2022-02-11 18:20:30.000" -"Monopoly for Nintendo Switch - 01007430037F6000","01007430037F6000","status-playable;nvdec;online-broken","playable","2024-02-06 23:13:01.000" -"Mantis Burn Racing - 0100E98002F6E000","0100E98002F6E000","status-playable;online-broken;ldn-broken","playable","2024-09-02 02:13:04.000" -"Moorhuhn Remake","","","","2020-04-05 19:22:41.000" -"Lovecraft's Untold Stories","","","","2020-04-05 19:31:15.000" -"Moonfall Ultimate","","nvdec;status-playable","playable","2021-01-17 14:01:25.000" -"Max: The Curse Of Brotherhood - 01001C9007614000","01001C9007614000","status-playable;nvdec","playable","2022-08-04 16:33:04.000" -"Manticore - Galaxy on Fire - 0100C9A00952A000","0100C9A00952A000","status-boots;crash;nvdec","boots","2024-02-04 04:37:24.000" -"The Shapeshifting Detective","","nvdec;status-playable","playable","2021-01-10 13:10:49.000" -"Mom Hid My Game!","","","","2020-04-06 11:32:10.000" -"Meow Motors","","UE4;gpu;status-ingame","ingame","2020-12-18 00:24:01.000" -"Mahjong Solitaire Refresh - 01008C300B624000","01008C300B624000","status-boots;crash","boots","2022-12-09 12:02:55.000" -"Lucah: Born of a Dream","","","","2020-04-06 12:11:01.000" -"Moon Hunters","","","","2020-04-06 12:35:17.000" -"Mad Carnage","","status-playable","playable","2021-01-10 13:00:07.000" -"Monument Builders Rushmore","","","","2020-04-06 13:49:35.000" -"Lost Sea","","","","2020-04-06 14:08:14.000" -"Mahjong Deluxe 3","","","","2020-04-06 14:13:32.000" -"MONSTER JAM CRUSH IT!™ - 010088400366E000","010088400366E000","UE4;nvdec;online;status-playable","playable","2021-04-08 19:29:27.000" -"Midnight Deluxe","","","","2020-04-06 14:33:34.000" -"Metropolis: Lux Obscura","","","","2020-04-06 14:47:15.000" -"Lode Runner Legacy","","status-playable","playable","2021-01-10 14:10:28.000" -"Masters of Anima - 0100CC7009196000","0100CC7009196000","status-playable;nvdec","playable","2022-08-04 16:00:09.000" -"Monster Dynamite","","","","2020-04-06 17:55:14.000" -"The Warlock of Firetop Mountain","","","","2020-04-06 21:44:13.000" -"Mecho Tales - 0100C4F005EB4000","0100C4F005EB4000","status-playable","playable","2022-08-04 17:03:19.000" -"Titan Quest - 0100605008268000","0100605008268000","status-playable;nvdec;online-broken","playable","2022-08-19 21:54:15.000" -"This Is the Police - 0100066004D68000","0100066004D68000","status-playable","playable","2022-08-24 11:37:05.000" -"Miles & Kilo","","status-playable","playable","2020-10-22 11:39:49.000" -"This War of Mine: Complete Edition - 0100A8700BC2A000","0100A8700BC2A000","gpu;status-ingame;32-bit;nvdec","ingame","2022-08-24 12:00:44.000" -"Transistor","","status-playable","playable","2020-10-22 11:28:02.000" -"Momodora: Revere Under the Moonlight - 01004A400C320000","01004A400C320000","deadlock;status-nothing","nothing","2022-02-06 03:47:43.000" -"Monster Puzzle","","status-playable","playable","2020-09-28 22:23:10.000" -"Tiny Troopers Joint Ops XL","","","","2020-04-07 12:30:46.000" -"This Is the Police 2 - 01004C100A04C000","01004C100A04C000","status-playable","playable","2022-08-24 11:49:17.000" -"Trials Rising - 01003E800A102000","01003E800A102000","status-playable","playable","2024-02-11 01:36:39.000" -"Mainlining","","status-playable","playable","2020-06-05 01:02:00.000" -"Treadnauts","","status-playable","playable","2021-01-10 14:57:41.000" -"Treasure Stack","","","","2020-04-07 13:27:32.000" -"Monkey King: Master of the Clouds","","status-playable","playable","2020-09-28 22:35:48.000" -"Trailblazers - 0100BCA00843A000","0100BCA00843A000","status-playable","playable","2021-03-02 20:40:49.000" -"Stardew Valley - 0100E65002BB8000","0100E65002BB8000","status-playable;online-broken;ldn-untested","playable","2024-02-14 03:11:19.000" -"TT Isle of Man","","nvdec;status-playable","playable","2020-06-22 12:25:13.000" -"Truberbrook - 0100E6300D448000","0100E6300D448000","status-playable","playable","2021-06-04 17:08:00.000" -"Troll and I - 0100F78002040000","0100F78002040000","gpu;nvdec;status-ingame","ingame","2021-06-04 16:58:50.000" -"Rock 'N Racing Off Road DX","","status-playable","playable","2021-01-10 15:27:15.000" -"Touhou Genso Wanderer RELOADED - 01004E900B082000","01004E900B082000","gpu;status-ingame;nvdec","ingame","2022-08-25 11:57:36.000" -"Splasher","","","","2020-04-08 11:02:41.000" -"Rogue Trooper Redux - 01001CC00416C000","01001CC00416C000","status-playable;nvdec;online-broken","playable","2022-08-12 11:53:01.000" -"Semblance","","","","2020-04-08 11:22:11.000" -"Saints Row: The Third - The Full Package - 0100DE600BEEE000","0100DE600BEEE000","slow;status-playable;LAN","playable","2023-08-24 02:40:58.000" -"SEGA AGES PHANTASY STAR","","status-playable","playable","2021-01-11 12:49:48.000" -"SEGA AGES SPACE HARRIER","","status-playable","playable","2021-01-11 12:57:40.000" -"SEGA AGES OUTRUN","","status-playable","playable","2021-01-11 13:13:59.000" -"Schlag den Star - 0100ACB004006000","0100ACB004006000","slow;status-playable;nvdec","playable","2022-08-12 14:28:22.000" -"Serial Cleaner","","","","2020-04-08 15:26:22.000" -"Rotating Brave","","","","2020-04-09 12:25:59.000" -"SteamWorld Quest","","nvdec;status-playable","playable","2020-11-09 13:10:04.000" -"Shaq Fu: A Legend Reborn","","","","2020-04-09 13:24:32.000" -"Season Match Bundle - Part 1 and 2","","status-playable","playable","2021-01-11 13:28:23.000" -"Bulb Boy","","","","2020-04-09 16:22:39.000" -"SteamWorld Dig - 01009320084A4000","01009320084A4000","status-playable","playable","2024-08-19 12:12:23.000" -"Shadows of Adam","","status-playable","playable","2021-01-11 13:35:58.000" -"Battle Princess Madelyn","","status-playable","playable","2021-01-11 13:47:23.000" -"Shiftlings - 01000750084B2000","01000750084B2000","nvdec;status-playable","playable","2021-03-04 13:49:54.000" -"Save the Ninja Clan","","status-playable","playable","2021-01-11 13:56:37.000" -"SteamWorld Heist: Ultimate Edition","","","","2020-04-10 11:21:15.000" -"Battle Chef Brigade","","status-playable","playable","2021-01-11 14:16:28.000" -"Shelter Generations - 01009EB004CB0000","01009EB004CB0000","status-playable","playable","2021-06-04 16:52:39.000" -"Bow to Blood: Last Captain Standing","","slow;status-playable","playable","2020-10-23 10:51:21.000" -"Samsara","","status-playable","playable","2021-01-11 15:14:12.000" -"Touhou Kobuto V: Burst Battle","","status-playable","playable","2021-01-11 15:28:58.000" -"Screencheat","","","","2020-04-10 13:16:02.000" -"BlobCat - 0100F3500A20C000","0100F3500A20C000","status-playable","playable","2021-04-23 17:09:30.000" -"SteamWorld Dig 2 - 0100CA9002322000","0100CA9002322000","status-playable","playable","2022-12-21 19:25:42.000" -"She Remembered Caterpillars - 01004F50085F2000","01004F50085F2000","status-playable","playable","2022-08-12 17:45:14.000" -"Broken Sword 5 - the Serpent's Curse - 01001E60085E6000","01001E60085E6000","status-playable","playable","2021-06-04 17:28:59.000" -"Banner Saga 3","","slow;status-boots","boots","2021-01-11 16:53:57.000" -"Stranger Things 3: The Game","","status-playable","playable","2021-01-11 17:44:09.000" -"Blades of Time - 0100CFA00CC74000","0100CFA00CC74000","deadlock;status-boots;online","boots","2022-07-17 19:19:58.000" -"BLAZBLUE CENTRALFICTION Special Edition","","nvdec;status-playable","playable","2020-12-15 23:50:04.000" -"Brawlout - 010060200A4BE000","010060200A4BE000","ldn-untested;online;status-playable","playable","2021-06-04 17:35:35.000" -"Bouncy Bob","","","","2020-04-10 16:45:27.000" -"Broken Age - 0100EDD0068A6000","0100EDD0068A6000","status-playable","playable","2021-06-04 17:40:32.000" -"Attack on Titan 2","","status-playable","playable","2021-01-04 11:40:01.000" -"Battle Worlds: Kronos - 0100DEB00D5A8000","0100DEB00D5A8000","nvdec;status-playable","playable","2021-06-04 17:48:02.000" -"BLADE ARCUS Rebellion From Shining - 0100C4400CB7C000","0100C4400CB7C000","status-playable","playable","2022-07-17 18:52:28.000" -"Away: Journey to the Unexpected - 01002F1005F3C000","01002F1005F3C000","status-playable;nvdec;vulkan-backend-bug","playable","2022-11-06 15:31:04.000" -"Batman: The Enemy Within","","crash;status-nothing","nothing","2020-10-16 05:49:27.000" -"Batman - The Telltale Series","","nvdec;slow;status-playable","playable","2021-01-11 18:19:35.000" -"Big Crown: Showdown - 010088100C35E000","010088100C35E000","status-menus;nvdec;online;ldn-untested","menus","2022-07-17 18:25:32.000" -"Strike Suit Zero: Director's Cut - 010072500D52E000","010072500D52E000","crash;status-boots","boots","2021-04-23 17:15:14.000" -"Black Paradox","","","","2020-04-11 12:13:22.000" -"Spelunker Party! - 010021F004270000","010021F004270000","services;status-boots","boots","2022-08-16 11:25:49.000" -"OK K.O.! Let's Play Heroes","","nvdec;status-playable","playable","2021-01-11 18:41:02.000" -"Steredenn","","status-playable","playable","2021-01-13 09:19:42.000" -"State of Mind","","UE4;crash;status-boots","boots","2020-06-22 22:17:50.000" -"Bloody Zombies","","","","2020-04-11 18:23:57.000" -"MudRunner - American Wilds - 01009D200952E000","01009D200952E000","gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-16 11:40:52.000" -"Big Buck Hunter Arcade","","nvdec;status-playable","playable","2021-01-12 20:31:39.000" -"Sparkle 2 Evo","","","","2020-04-11 18:48:19.000" -"Brave Dungeon + Dark Witch's Story: COMBAT","","status-playable","playable","2021-01-12 21:06:34.000" -"BAFL","","status-playable","playable","2021-01-13 08:32:51.000" -"Steamburg","","status-playable","playable","2021-01-13 08:42:01.000" -"Splatoon 2 - 01003BC0000A0000","01003BC0000A0000","status-playable;ldn-works;LAN","playable","2024-07-12 19:11:15.000" -"Blade Strangers - 01005950022EC000","01005950022EC000","status-playable;nvdec","playable","2022-07-17 19:02:43.000" -"Sports Party - 0100DE9005170000","0100DE9005170000","nvdec;status-playable","playable","2021-03-05 13:40:42.000" -"Banner Saga","","","","2020-04-12 14:06:23.000" -"Banner Saga 2","","crash;status-boots","boots","2021-01-13 08:56:09.000" -"Hand of Fate 2 - 01003620068EA000","01003620068EA000","status-playable","playable","2022-08-01 15:44:16.000" -"State of Anarchy: Master of Mayhem","","nvdec;status-playable","playable","2021-01-12 19:00:05.000" -"Sphinx and the Cursed Mummy™ - 0100BD500BA94000","0100BD500BA94000","gpu;status-ingame;32-bit;opengl","ingame","2024-05-20 06:00:51.000" -"Risk - 0100E8300A67A000","0100E8300A67A000","status-playable;nvdec;online-broken","playable","2022-08-01 18:53:28.000" -"Baseball Riot - 01004860080A0000","01004860080A0000","status-playable","playable","2021-06-04 18:07:27.000" -"Spartan - 0100E6A009A26000","0100E6A009A26000","UE4;nvdec;status-playable","playable","2021-03-05 15:53:19.000" -"Halloween Pinball","","status-playable","playable","2021-01-12 16:00:46.000" -"Streets of Red : Devil's Dare Deluxe","","","","2020-04-12 18:08:29.000" -"Spider Solitaire F","","","","2020-04-12 20:26:44.000" -"Starship Avenger Operation: Take Back Earth","","status-playable","playable","2021-01-12 15:52:55.000" -"Battle Chasers: Nightwar","","nvdec;slow;status-playable","playable","2021-01-12 12:27:34.000" -"Infinite Minigolf","","online;status-playable","playable","2020-09-29 12:26:25.000" -"Blood Waves - 01007E700D17E000","01007E700D17E000","gpu;status-ingame","ingame","2022-07-18 13:04:46.000" -"Stick It to the Man","","","","2020-04-13 12:29:25.000" -"Bad Dream: Fever - 0100B3B00D81C000","0100B3B00D81C000","status-playable","playable","2021-06-04 18:33:12.000" -"Spectrum - 01008B000A5AE000","01008B000A5AE000","status-playable","playable","2022-08-16 11:15:59.000" -"Battlezone Gold Edition - 01006D800A988000","01006D800A988000","gpu;ldn-untested;online;status-boots","boots","2021-06-04 18:36:05.000" -"Squareboy vs Bullies: Arena Edition","","","","2020-04-13 12:51:57.000" -"Beach Buggy Racing - 010095C00406C000","010095C00406C000","online;status-playable","playable","2021-04-13 23:16:50.000" -"Avenger Bird","","","","2020-04-13 13:01:51.000" -"Beholder","","status-playable","playable","2020-10-16 12:48:58.000" -"Binaries","","","","2020-04-13 13:12:42.000" -"Space Ribbon - 010010A009830000","010010A009830000","status-playable","playable","2022-08-15 17:17:10.000" -"BINGO for Nintendo Switch","","status-playable","playable","2020-07-23 16:17:36.000" -"Bibi Blocksberg - Big Broom Race 3","","status-playable","playable","2021-01-11 19:07:16.000" -"Sparkle 3: Genesis","","","","2020-04-13 14:01:48.000" -"Bury me, my Love","","status-playable","playable","2020-11-07 12:47:37.000" -"Bad North - 0100E98006F22000","0100E98006F22000","status-playable","playable","2022-07-17 13:44:25.000" -"Stikbold! A Dodgeball Adventure DELUXE","","status-playable","playable","2021-01-11 20:12:54.000" -"BUTCHER","","status-playable","playable","2021-01-11 18:50:17.000" -"Bird Game + - 01001B700B278000","01001B700B278000","status-playable;online","playable","2022-07-17 18:41:57.000" -"SpiritSphere DX - 01009D60080B4000","01009D60080B4000","status-playable","playable","2021-07-03 23:37:49.000" -"Behind The Screen","","","","2020-04-13 15:41:34.000" -"Bibi & Tina - Adventures with Horses","","nvdec;slow;status-playable","playable","2021-01-13 08:58:09.000" -"Space Dave","","","","2020-04-13 15:57:37.000" -"Hellblade: Senua's Sacrifice - 010044500CF8E000","010044500CF8E000","gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-01 19:36:50.000" -"Happy Birthdays","","","","2020-04-13 23:34:41.000" -"GUILTY GEAR XX ACCENT CORE PLUS R","","nvdec;status-playable","playable","2021-01-13 09:28:33.000" -"Hob: The Definitive Edition","","status-playable","playable","2021-01-13 09:39:19.000" -"Jurassic Pinball - 0100CE100A826000","0100CE100A826000","status-playable","playable","2021-06-04 19:02:37.000" -"Hyper Light Drifter - Special Edition - 01003B200B372000","01003B200B372000","status-playable;vulkan-backend-bug","playable","2023-01-13 15:44:48.000" -"GUNBIRD for Nintendo Switch - 01003C6008940000","01003C6008940000","32-bit;status-playable","playable","2021-06-04 19:16:01.000" -"GUNBIRD2 for Nintendo Switch","","status-playable","playable","2020-10-10 14:41:16.000" -"Hammerwatch - 01003B9007E86000","01003B9007E86000","status-playable;online-broken;ldn-broken","playable","2022-08-01 16:28:46.000" -"Into The Breach","","","","2020-04-14 14:05:04.000" -"Horizon Chase Turbo - 01009EA00B714000","01009EA00B714000","status-playable","playable","2021-02-19 19:40:56.000" -"Gunlord X","","","","2020-04-14 14:30:34.000" -"Ittle Dew 2+","","status-playable","playable","2020-11-17 11:44:32.000" -"Hue","","","","2020-04-14 14:52:35.000" -"Iconoclasts - 0100BC60099FE000","0100BC60099FE000","status-playable","playable","2021-08-30 21:11:04.000" -"James Pond Operation Robocod","","status-playable","playable","2021-01-13 09:48:45.000" -"Hello Neighbor - 0100FAA00B168000","0100FAA00B168000","status-playable;UE4","playable","2022-08-01 21:32:23.000" -"Gunman Clive HD Collection","","status-playable","playable","2020-10-09 12:17:35.000" -"Human Resource Machine","","32-bit;status-playable","playable","2020-12-17 21:47:09.000" -"INSIDE - 0100D2D009028000","0100D2D009028000","status-playable","playable","2021-12-25 20:24:56.000" -"Hello Neighbor: Hide And Seek","","UE4;gpu;slow;status-ingame","ingame","2020-10-24 10:59:57.000" -"Has-Been Heroes","","status-playable","playable","2021-01-13 13:31:48.000" -"GUNBARICH for Nintendo Switch","","","","2020-04-14 21:58:40.000" -"Hell is Other Demons","","status-playable","playable","2021-01-13 13:23:02.000" -"I, Zombie","","status-playable","playable","2021-01-13 14:53:44.000" -"Hello Kitty Kruisers With Sanrio Friends - 010087D0084A8000","010087D0084A8000","nvdec;status-playable","playable","2021-06-04 19:08:46.000" -"IMPLOSION - 0100737003190000","0100737003190000","status-playable;nvdec","playable","2021-12-12 03:52:13.000" -"Ikaruga - 01009F20086A0000","01009F20086A0000","status-playable","playable","2023-04-06 15:00:02.000" -"Ironcast","","status-playable","playable","2021-01-13 13:54:29.000" -"Jettomero: Hero of the Universe - 0100A5A00AF26000","0100A5A00AF26000","status-playable","playable","2022-08-02 14:46:43.000" -"Harvest Moon: Light of Hope Special Edition","","","","2020-04-15 13:00:41.000" -"Heroine Anthem Zero episode 1 - 01001B70080F0000","01001B70080F0000","status-playable;vulkan-backend-bug","playable","2022-08-01 22:02:36.000" -"Hunting Simulator - 0100C460040EA000","0100C460040EA000","status-playable;UE4","playable","2022-08-02 10:54:08.000" -"Guts and Glory","","","","2020-04-15 14:06:57.000" -"Island Flight Simulator - 010077900440A000","010077900440A000","status-playable","playable","2021-06-04 19:42:46.000" -"Hollow - 0100F2100061E8000","0100F2100061E800","UE4;gpu;status-ingame","ingame","2021-03-03 23:42:56.000" -"Heroes of the Monkey Tavern","","","","2020-04-15 15:24:33.000" -"Jotun: Valhalla Edition","","","","2020-04-15 15:46:21.000" -"OniNaki - 0100CF4011B2A000","0100CF4011B2A000","nvdec;status-playable","playable","2021-02-27 21:52:42.000" -"Diary of consultation with me (female doctor)","","","","2020-04-15 16:13:40.000" -"JunkPlanet","","status-playable","playable","2020-11-09 12:38:33.000" -"Hexologic","","","","2020-04-15 16:46:07.000" -"JYDGE - 010035A0044E8000","010035A0044E8000","status-playable","playable","2022-08-02 21:20:13.000" -"Mushroom Quest","","status-playable","playable","2020-05-17 13:07:08.000" -"Infernium","","UE4;regression;status-nothing","nothing","2021-01-13 16:36:07.000" -"Star-Crossed Myth - The Department of Wishes - 01005EB00EA10000","01005EB00EA10000","gpu;status-ingame","ingame","2021-06-04 19:34:36.000" -"Joe Dever's Lone Wolf","","","","2020-04-15 18:27:04.000" -"Final Fantasy VII - 0100A5B00BDC6000","0100A5B00BDC6000","status-playable","playable","2022-12-09 17:03:30.000" -"Irony Curtain: From Matryoshka with Love - 0100E5700CD56000","0100E5700CD56000","status-playable","playable","2021-06-04 20:12:37.000" -"Guns Gore and Cannoli","","","","2020-04-16 12:37:22.000" -"ICEY","","status-playable","playable","2021-01-14 16:16:04.000" -"Jumping Joe & Friends","","status-playable","playable","2021-01-13 17:09:42.000" -"Johnny Turbo's Arcade Wizard Fire - 0100D230069CC000","0100D230069CC000","status-playable","playable","2022-08-02 20:39:15.000" -"Johnny Turbo's Arcade Two Crude Dudes - 010080D002CC6000","010080D002CC6000","status-playable","playable","2022-08-02 20:29:50.000" -"Johnny Turbo's Arcade Sly Spy","","","","2020-04-16 13:56:32.000" -"Johnny Turbo's Arcade Caveman Ninja","","","","2020-04-16 14:11:07.000" -"Heroki - 010057300B0DC000","010057300B0DC000","gpu;status-ingame","ingame","2023-07-30 19:30:01.000" -"Immortal Redneck - 0100F400435A000","","nvdec;status-playable","playable","2021-01-27 18:36:28.000" -"Hungry Shark World","","status-playable","playable","2021-01-13 18:26:08.000" -"Homo Machina","","","","2020-04-16 15:10:24.000" -"InnerSpace","","","","2020-04-16 16:38:45.000" -"INK","","","","2020-04-16 16:48:26.000" -"Human: Fall Flat","","status-playable","playable","2021-01-13 18:36:05.000" -"Hotel Transylvania 3: Monsters Overboard - 0100017007980000","0100017007980000","nvdec;status-playable","playable","2021-01-27 18:55:31.000" -"It's Spring Again","","","","2020-04-16 19:08:21.000" -"FINAL FANTASY IX - 01006F000B056000","01006F000B056000","audout;nvdec;status-playable","playable","2021-06-05 11:35:00.000" -"Harvest Life - 0100D0500AD30000","0100D0500AD30000","status-playable","playable","2022-08-01 16:51:45.000" -"INVERSUS Deluxe - 01001D0003B96000","01001D0003B96000","status-playable;online-broken","playable","2022-08-02 14:35:36.000" -"HoPiKo","","status-playable","playable","2021-01-13 20:12:38.000" -"I Hate Running Backwards","","","","2020-04-16 20:53:45.000" -"Hexagravity - 01007AC00E012000","01007AC00E012000","status-playable","playable","2021-05-28 13:47:48.000" -"Holy Potatoes! A Weapon Shop?!","","","","2020-04-16 22:25:50.000" -"In Between","","","","2020-04-17 11:08:14.000" -"Hunter's Legacy: Purrfect Edition - 010068000CAC0000","010068000CAC0000","status-playable","playable","2022-08-02 10:33:31.000" -"Job the Leprechaun","","status-playable","playable","2020-06-05 12:10:06.000" -"Henry the Hamster Handler","","","","2020-04-17 11:30:02.000" -"FINAL FANTASY XII THE ZODIAC AGE - 0100EB100AB42000","0100EB100AB42000","status-playable;opengl;vulkan-backend-bug","playable","2024-08-11 07:01:54.000" -"Hiragana Pixel Party","","status-playable","playable","2021-01-14 08:36:50.000" -"Heart and Slash","","status-playable","playable","2021-01-13 20:56:32.000" -"InkSplosion","","","","2020-04-17 12:11:41.000" -"I and Me","","","","2020-04-17 12:18:43.000" -"Earthlock - 01006E50042EA000","01006E50042EA000","status-playable","playable","2021-06-05 11:51:02.000" -"Figment - 0100118009C68000","0100118009C68000","nvdec;status-playable","playable","2021-01-27 19:36:05.000" -"Dusty Raging Fist","","","","2020-04-18 14:02:20.000" -"Eternum Ex","","status-playable","playable","2021-01-13 20:28:32.000" -"Dragon's Lair Trilogy","","nvdec;status-playable","playable","2021-01-13 22:12:07.000" -"FIFA 18 - 0100F7B002340000","0100F7B002340000","gpu;status-ingame;online-broken;ldn-untested","ingame","2022-07-26 12:43:59.000" -"Dream Alone - 0100AA0093DC000","","nvdec;status-playable","playable","2021-01-27 19:41:50.000" -"Fight of Gods","","","","2020-04-18 17:22:19.000" -"Fallout Shelter","","","","2020-04-18 19:48:28.000" -"Drift Legends","","","","2020-04-18 20:15:36.000" -"Feudal Alloy","","status-playable","playable","2021-01-14 08:48:14.000" -"EVERSPACE - 0100DCF0093EC000","0100DCF0093EC000","status-playable;UE4","playable","2022-08-14 01:16:24.000" -"Epic Loon - 0100262009626000","0100262009626000","status-playable;nvdec","playable","2022-07-25 22:06:13.000" -"EARTH WARS - 01009B7006C88000","01009B7006C88000","status-playable","playable","2021-06-05 11:18:33.000" -"Finding Teddy 2 : Definitive Edition - 0100FF100FB68000","0100FF100FB68000","gpu;status-ingame","ingame","2024-04-19 16:51:33.000" -"Rocket League - 01005EE0036EC000","01005EE0036EC000","gpu;status-ingame;online-broken;ldn-untested","ingame","2024-02-08 19:51:36.000" -"Fimbul - 0100C3A00BB76000","0100C3A00BB76000","status-playable;nvdec","playable","2022-07-26 13:31:47.000" -"Fairune Collection - 01008A6009758000","01008A6009758000","status-playable","playable","2021-06-06 15:29:56.000" -"Enigmatis 2: The Mists of Ravenwood - 0100C6200A0AA000","0100C6200A0AA000","crash;regression;status-boots","boots","2021-06-06 15:15:30.000" -"Energy Balance","","","","2020-04-22 11:13:18.000" -"DragonFangZ","","status-playable","playable","2020-09-28 21:35:18.000" -"Dragon's Dogma: Dark Arisen - 010032C00AC58000","010032C00AC58000","status-playable","playable","2022-07-24 12:58:33.000" -"Everything","","","","2020-04-22 11:35:04.000" -"Dust: An Elysian Tail - 0100B6E00A420000","0100B6E00A420000","status-playable","playable","2022-07-25 15:28:12.000" -"EXTREME POKER","","","","2020-04-22 11:54:54.000" -"Dyna Bomb","","status-playable","playable","2020-06-07 13:26:55.000" -"Escape Doodland","","","","2020-04-22 12:10:08.000" -"Drone Fight - 010058C00A916000","010058C00A916000","status-playable","playable","2022-07-24 14:31:56.000" -"Resident Evil","","","","2020-04-22 12:31:10.000" -"Dungeon Rushers","","","","2020-04-22 12:43:24.000" -"Embers of Mirrim","","","","2020-04-22 12:56:52.000" -"FIFA 19 - 0100FFA0093E8000","0100FFA0093E8000","gpu;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-07-26 13:07:07.000" -"Energy Cycle","","","","2020-04-22 13:40:48.000" -"Dragons Dawn of New Riders","","nvdec;status-playable","playable","2021-01-27 20:05:26.000" -"Enter the Gungeon - 01009D60076F6000","01009D60076F6000","status-playable","playable","2022-07-25 20:28:33.000" -"Drowning - 010052000A574000","010052000A574000","status-playable","playable","2022-07-25 14:28:26.000" -"Earth Atlantis","","","","2020-04-22 14:42:46.000" -"Evil Defenders","","nvdec;status-playable","playable","2020-09-28 17:11:00.000" -"Dustoff Heli Rescue 2","","","","2020-04-22 15:31:34.000" -"Energy Cycle Edge - 0100B8700BD14000","0100B8700BD14000","services;status-ingame","ingame","2021-11-30 05:02:31.000" -"Element - 0100A6700AF10000","0100A6700AF10000","status-playable","playable","2022-07-25 17:17:16.000" -"Duck Game","","","","2020-04-22 17:10:36.000" -"Fill-a-Pix: Phil's Epic Adventure","","status-playable","playable","2020-12-22 13:48:22.000" -"Elliot Quest - 0100128003A24000","0100128003A24000","status-playable","playable","2022-07-25 17:46:14.000" -"Drawful 2 - 0100F7800A434000","0100F7800A434000","status-ingame","ingame","2022-07-24 13:50:21.000" -"Energy Invasion","","status-playable","playable","2021-01-14 21:32:26.000" -"Dungeon Stars","","status-playable","playable","2021-01-18 14:28:37.000" -"FINAL FANTASY X/X-2 HD REMASTER - 0100BC300CB48000","0100BC300CB48000","gpu;status-ingame","ingame","2022-08-16 20:29:26.000" -"Revenant Saga","","","","2020-04-22 23:52:09.000" -"Resident Evil 0","","","","2020-04-23 01:04:42.000" -"Fate/EXTELLA - 010053E002EA2000","010053E002EA2000","gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug","ingame","2023-04-24 23:37:55.000" -"RiME","","UE4;crash;gpu;status-boots","boots","2020-07-20 15:52:38.000" -"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition - 0100E9A00CB30000","0100E9A00CB30000","status-playable;nvdec","playable","2024-06-26 00:16:30.000" -"Rival Megagun","","nvdec;online;status-playable","playable","2021-01-19 14:01:46.000" -"Riddled Corpses EX - 01002C700C326000","01002C700C326000","status-playable","playable","2021-06-06 16:02:44.000" -"Fear Effect Sedna","","nvdec;status-playable","playable","2021-01-19 13:10:33.000" -"Redout: Lightspeed Edition","","","","2020-04-23 14:46:59.000" -"RESIDENT EVIL REVELATIONS 2 - 010095300212A000","010095300212A000","status-playable;online-broken;ldn-untested","playable","2022-08-11 12:57:50.000" -"Robonauts - 0100618004096000","0100618004096000","status-playable;nvdec","playable","2022-08-12 11:33:23.000" -"Road to Ballhalla - 010002F009A7A000","010002F009A7A000","UE4;status-playable","playable","2021-06-07 02:22:36.000" -"Fate/EXTELLA LINK - 010051400B17A000","010051400B17A000","ldn-untested;nvdec;status-playable","playable","2021-01-27 00:45:50.000" -"Rocket Fist","","","","2020-04-23 16:56:33.000" -"RICO - 01009D5009234000","01009D5009234000","status-playable;nvdec;online-broken","playable","2022-08-11 20:16:40.000" -"R.B.I. Baseball 17 - 0100B5A004302000","0100B5A004302000","status-playable;online-working","playable","2022-08-11 11:55:47.000" -"Red Faction Guerrilla Re-Mars-tered - 010075000C608000","010075000C608000","ldn-untested;nvdec;online;status-playable","playable","2021-06-07 03:02:13.000" -"Riptide GP: Renegade - 01002A6006AA4000","01002A6006AA4000","online;status-playable","playable","2021-04-13 23:33:02.000" -"Realpolitiks","","","","2020-04-24 12:33:00.000" -"Fall Of Light - Darkest Edition - 01005A600BE60000","01005A600BE60000","slow;status-ingame;nvdec","ingame","2024-07-24 04:19:26.000" -"Reverie: Sweet As Edition","","","","2020-04-24 13:24:37.000" -"RIVE: Ultimate Edition","","status-playable","playable","2021-03-24 18:45:55.000" -"R.B.I. Baseball 18 - 01005CC007616000","01005CC007616000","status-playable;nvdec;online-working","playable","2022-08-11 11:27:52.000" -"Refunct","","UE4;status-playable","playable","2020-12-15 22:46:21.000" -"Rento Fortune Monolit","","ldn-untested;online;status-playable","playable","2021-01-19 19:52:21.000" -"Super Mario Party - 010036B0034E4000","010036B0034E4000","gpu;status-ingame;Needs Update;ldn-works","ingame","2024-06-21 05:10:16.000" -"Farm Together","","status-playable","playable","2021-01-19 20:01:19.000" -"Regalia: Of Men and Monarchs - Royal Edition - 0100FDF0083A6000","0100FDF0083A6000","status-playable","playable","2022-08-11 12:24:01.000" -"Red Game Without a Great Name","","status-playable","playable","2021-01-19 21:42:35.000" -"R.B.I. Baseball 19 - 0100FCB00BF40000","0100FCB00BF40000","status-playable;nvdec;online-working","playable","2022-08-11 11:43:52.000" -"Eagle Island - 010037400C7DA000","010037400C7DA000","status-playable","playable","2021-04-10 13:15:42.000" -"RIOT: Civil Unrest - 010088E00B816000","010088E00B816000","status-playable","playable","2022-08-11 20:27:56.000" -"Revenant Dogma","","","","2020-04-25 17:51:48.000" -"World of Final Fantasy Maxima","","status-playable","playable","2020-06-07 13:57:23.000" -"ITTA - 010068700C70A000","010068700C70A000","status-playable","playable","2021-06-07 03:15:52.000" -"Pirates: All Aboard!","","","","2020-04-27 12:18:29.000" -"Wolfenstein II The New Colossus - 01009040091E0000","01009040091E0000","gpu;status-ingame","ingame","2024-04-05 05:39:46.000" -"Onimusha: Warlords","","nvdec;status-playable","playable","2020-07-31 13:08:39.000" -"Radiation Island - 01009E40095EE000","01009E40095EE000","status-ingame;opengl;vulkan-backend-bug","ingame","2022-08-11 10:51:04.000" -"Pool Panic","","","","2020-04-27 13:49:19.000" -"Quad Fighter K","","","","2020-04-27 14:00:50.000" -"PSYVARIAR DELTA - 0100EC100A790000","0100EC100A790000","nvdec;status-playable","playable","2021-01-20 13:01:46.000" -"Puzzle Box Maker - 0100476004A9E000","0100476004A9E000","status-playable;nvdec;online-broken","playable","2022-08-10 18:00:52.000" -"Psikyo Collection Vol. 3 - 0100A2300DB78000","0100A2300DB78000","status-ingame","ingame","2021-06-07 02:46:23.000" -"Pianista: The Legendary Virtuoso - 010077300A86C000","010077300A86C000","status-playable;online-broken","playable","2022-08-09 14:52:56.000" -"Quarantine Circular - 0100F1400BA88000","0100F1400BA88000","status-playable","playable","2021-01-20 15:24:15.000" -"Pizza Titan Ultra - 01004A900C352000","01004A900C352000","nvdec;status-playable","playable","2021-01-20 15:58:42.000" -"Phantom Trigger - 0100C31005A50000","0100C31005A50000","status-playable","playable","2022-08-09 14:27:30.000" -"Operación Triunfo 2017 - 0100D5400BD90000","0100D5400BD90000","services;status-ingame;nvdec","ingame","2022-08-08 15:06:42.000" -"Rad Rodgers Radical Edition - 010000600CD54000","010000600CD54000","status-playable;nvdec;online-broken","playable","2022-08-10 19:57:23.000" -"Ape Out - 01005B100C268000","01005B100C268000","status-playable","playable","2022-09-26 19:04:47.000" -"Decay of Logos - 010027700FD2E000","010027700FD2E000","status-playable;nvdec","playable","2022-09-13 14:42:13.000" -"Q.U.B.E. 2 - 010023600AA34000","010023600AA34000","UE4;status-playable","playable","2021-03-03 21:38:57.000" -"Pikuniku","","","","2020-04-28 11:02:59.000" -"Picross S","","","","2020-04-28 11:14:18.000" -"PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE - 0100063005C86000","0100063005C86000","audio;status-playable;nvdec","playable","2024-02-29 14:20:35.000" -"Pilot Sports - 01007A500B0B2000","01007A500B0B2000","status-playable","playable","2021-01-20 15:04:17.000" -"Paper Wars","","","","2020-04-28 11:46:56.000" -"Fushigi no Gensokyo Lotus Labyrinth","","Needs Update;audio;gpu;nvdec;status-ingame","ingame","2021-01-20 15:30:02.000" -"OPUS: The Day We Found Earth - 010049C0075F0000","010049C0075F0000","nvdec;status-playable","playable","2021-01-21 18:29:31.000" -"Psikyo Collection Vol.2 - 01009D400C4A8000","01009D400C4A8000","32-bit;status-playable","playable","2021-06-07 03:22:07.000" -"PixARK","","","","2020-04-28 12:32:16.000" -"Puyo Puyo Tetris","","","","2020-04-28 12:46:37.000" -"Puzzle Puppers","","","","2020-04-28 12:54:05.000" -"OVERWHELM - 01005F000CC18000","01005F000CC18000","status-playable","playable","2021-01-21 18:37:18.000" -"Rapala Fishing: Pro Series","","nvdec;status-playable","playable","2020-12-16 13:26:53.000" -"Power Rangers: Battle for the Grid","","status-playable","playable","2020-06-21 16:52:42.000" -"Professional Farmer: Nintendo Switch Edition","","slow;status-playable","playable","2020-12-16 13:38:19.000" -"Project Nimbus: Complete Edition - 0100ACE00DAB6000","0100ACE00DAB6000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-10 17:35:43.000" -"Perfect Angle - 010089F00A3B4000","010089F00A3B4000","status-playable","playable","2021-01-21 18:48:45.000" -"Oniken: Unstoppable Edition - 010037900C814000","010037900C814000","status-playable","playable","2022-08-08 14:52:06.000" -"Pixeljunk Monsters 2 - 0100E4D00A690000","0100E4D00A690000","status-playable","playable","2021-06-07 03:40:01.000" -"Pocket Rumble","","","","2020-04-28 19:13:20.000" -"Putty Pals","","","","2020-04-28 19:35:49.000" -"Overcooked! Special Edition - 01009B900401E000","01009B900401E000","status-playable","playable","2022-08-08 20:48:52.000" -"Panda Hero","","","","2020-04-28 20:33:24.000" -"Piczle Lines DX","","UE4;crash;nvdec;status-menus","menus","2020-11-16 04:21:31.000" -"Packet Queen #","","","","2020-04-28 21:43:26.000" -"Punch Club","","","","2020-04-28 22:28:01.000" -"Oxenfree","","","","2020-04-28 23:56:28.000" -"Rayman Legends: Definitive Edition - 01005FF002E2A000","01005FF002E2A000","status-playable;nvdec;ldn-works","playable","2023-05-27 18:33:07.000" -"Poi: Explorer Edition - 010086F0064CE000","010086F0064CE000","nvdec;status-playable","playable","2021-01-21 19:32:00.000" -"Paladins - 011123900AEE0000","011123900AEE0000","online;status-menus","menus","2021-01-21 19:21:37.000" -"Q-YO Blaster","","gpu;status-ingame","ingame","2020-06-07 22:36:53.000" -"Please Don't Touch Anything","","","","2020-04-29 12:15:59.000" -"Puzzle Adventure Blockle","","","","2020-04-29 13:05:19.000" -"Plantera - 010087000428E000","010087000428E000","status-playable","playable","2022-08-09 15:36:28.000" -"One Strike","","","","2020-04-29 13:43:11.000" -"Party Arcade - 01007FC00A040000","01007FC00A040000","status-playable;online-broken;UE4;ldn-untested","playable","2022-08-09 12:32:53.000" -"PAYDAY 2 - 0100274004052000","0100274004052000","status-playable;nvdec;online-broken;ldn-untested","playable","2022-08-09 12:56:39.000" -"Quest of Dungeons - 01001DE005012000","01001DE005012000","status-playable","playable","2021-06-07 10:29:22.000" -"Plague Road - 0100FF8005EB2000","0100FF8005EB2000","status-playable","playable","2022-08-09 15:27:14.000" -"Picture Painting Puzzle 1000!","","","","2020-04-29 14:58:39.000" -"Ni No Kuni Wrath of the White Witch - 0100E5600D446000","0100E5600D446000","status-boots;32-bit;nvdec","boots","2024-07-12 04:52:59.000" -"Overcooked! 2 - 01006FD0080B2000","01006FD0080B2000","status-playable;ldn-untested","playable","2022-08-08 16:48:10.000" -"Qbik","","","","2020-04-29 15:50:22.000" -"Rain World - 010047600BF72000","010047600BF72000","status-playable","playable","2023-05-10 23:34:08.000" -"Othello","","","","2020-04-29 17:06:10.000" -"Pankapu","","","","2020-04-29 17:24:48.000" -"Pode - 01009440095FE000","01009440095FE000","nvdec;status-playable","playable","2021-01-25 12:58:35.000" -"PLANET RIX-13","","","","2020-04-29 22:00:16.000" -"Picross S2","","status-playable","playable","2020-10-15 12:01:40.000" -"Picross S3","","status-playable","playable","2020-10-15 11:55:27.000" -"POISOFT'S ""Thud""","","","","2020-04-29 22:26:06.000" -"Paranautical Activity - 010063400B2EC000","010063400B2EC000","status-playable","playable","2021-01-25 13:49:19.000" -"oOo: Ascension - 010074000BE8E000","010074000BE8E000","status-playable","playable","2021-01-25 14:13:34.000" -"Pic-a-Pix Pieces","","","","2020-04-30 12:07:19.000" -"Perception","","UE4;crash;nvdec;status-menus","menus","2020-12-18 11:49:23.000" -"Pirate Pop Plus","","","","2020-04-30 12:19:57.000" -"Outlast 2 - 0100DE70085E8000","0100DE70085E8000","status-ingame;crash;nvdec","ingame","2022-01-22 22:28:05.000" -"Project Highrise: Architect's Edition - 0100BBD00976C000","0100BBD00976C000","status-playable","playable","2022-08-10 17:19:12.000" -"Perchang - 010011700D1B2000","010011700D1B2000","status-playable","playable","2021-01-25 14:19:52.000" -"Out Of The Box - 01005A700A166000","01005A700A166000","status-playable","playable","2021-01-28 01:34:27.000" -"Paperbound Brawlers - 01006AD00B82C000","01006AD00B82C000","status-playable","playable","2021-01-25 14:32:15.000" -"Party Golf - 0100B8E00359E000","0100B8E00359E000","status-playable;nvdec","playable","2022-08-09 12:38:30.000" -"PAN-PAN A tiny big adventure - 0100F0D004CAE000","0100F0D004CAE000","audout;status-playable","playable","2021-01-25 14:42:00.000" -"OVIVO","","","","2020-04-30 15:12:05.000" -"Penguin Wars","","","","2020-04-30 15:28:21.000" -"Physical Contact: Speed - 01008110036FE000","01008110036FE000","status-playable","playable","2022-08-09 14:40:46.000" -"Pic-a-Pix Deluxe","","","","2020-04-30 16:00:55.000" -"Puyo Puyo Esports","","","","2020-04-30 16:13:17.000" -"Qbics Paint - 0100A8D003BAE000","0100A8D003BAE000","gpu;services;status-ingame","ingame","2021-06-07 10:54:09.000" -"Piczle Lines DX 500 More Puzzles!","","UE4;status-playable","playable","2020-12-15 23:42:51.000" -"Pato Box - 010031F006E76000","010031F006E76000","status-playable","playable","2021-01-25 15:17:52.000" -"Phoenix Wright: Ace Attorney Trilogy - 0100CB000A142000","0100CB000A142000","status-playable","playable","2023-09-15 22:03:12.000" -"Physical Contact: 2048","","slow;status-playable","playable","2021-01-25 15:18:32.000" -"OPUS Collection - 01004A200BE82000","01004A200BE82000","status-playable","playable","2021-01-25 15:24:04.000" -"Party Planet","","","","2020-04-30 18:30:59.000" -"Physical Contact: Picture Place","","","","2020-04-30 18:43:20.000" -"Tanzia - 01004DF007564000","01004DF007564000","status-playable","playable","2021-06-07 11:10:25.000" -"Syberia 3 - 0100CBE004E6C000","0100CBE004E6C000","nvdec;status-playable","playable","2021-01-25 16:15:12.000" -"SUPER DRAGON BALL HEROES WORLD MISSION - 0100E5E00C464000","0100E5E00C464000","status-playable;nvdec;online-broken","playable","2022-08-17 12:56:30.000" -"Tales of Vesperia: Definitive Edition - 01002C0008E52000","01002C0008E52000","status-playable","playable","2024-09-28 03:20:47.000" -"Surgeon Simulator CPR","","","","2020-05-01 15:11:43.000" -"Super Inefficient Golf - 010056800B534000","010056800B534000","status-playable;UE4","playable","2022-08-17 15:53:45.000" -"Super Daryl Deluxe","","","","2020-05-01 18:23:22.000" -"Sushi Striker: The Way of Sushido","","nvdec;status-playable","playable","2020-06-26 20:49:11.000" -"Super Volley Blast - 010035B00B3F0000","010035B00B3F0000","status-playable","playable","2022-08-19 18:14:40.000" -"Stunt Kite Party - 0100AF000B4AE000","0100AF000B4AE000","nvdec;status-playable","playable","2021-01-25 17:16:56.000" -"Super Putty Squad - 0100331005E8E000","0100331005E8E000","gpu;status-ingame;32-bit","ingame","2024-04-29 15:51:54.000" -"SWORD ART ONLINE: Hollow Realization Deluxe Edition - 01001B600D1D6000","01001B600D1D6000","status-playable;nvdec","playable","2022-08-19 19:19:15.000" -"SUPER ROBOT WARS T","","online;status-playable","playable","2021-03-25 11:00:40.000" -"Tactical Mind - 01000F20083A8000","01000F20083A8000","status-playable","playable","2021-01-25 18:05:00.000" -"Super Beat Sports - 0100F7000464A000","0100F7000464A000","status-playable;ldn-untested","playable","2022-08-16 16:05:50.000" -"Suicide Guy - 01005CD00A2A2000","01005CD00A2A2000","status-playable","playable","2021-01-26 13:13:54.000" -"Sundered: Eldritch Edition - 01002D3007962000","01002D3007962000","gpu;status-ingame","ingame","2021-06-07 11:46:00.000" -"Super Blackjack Battle II Turbo - The Card Warriors","","","","2020-05-02 09:45:57.000" -"Super Skelemania","","status-playable","playable","2020-06-07 22:59:50.000" -"Super Ping Pong Trick Shot","","","","2020-05-02 10:02:55.000" -"Subsurface Circular","","","","2020-05-02 10:36:40.000" -"Super Hero Fight Club: Reloaded","","","","2020-05-02 10:49:51.000" -"Superola and the lost burgers","","","","2020-05-02 10:57:54.000" -"Super Tennis Blast - 01000500DB50000","","status-playable","playable","2022-08-19 16:20:48.000" -"Swap This!","","","","2020-05-02 11:37:51.000" -"Super Sportmatchen - 0100A9300A4AE000","0100A9300A4AE000","status-playable","playable","2022-08-19 12:34:40.000" -"Super Destronaut DX","","","","2020-05-02 12:13:53.000" -"Summer Sports Games","","","","2020-05-02 12:45:15.000" -"Super Kickers League - 0100196009998000","0100196009998000","status-playable","playable","2021-01-26 13:36:48.000" -"Switch 'N' Shoot","","","","2020-05-03 02:02:08.000" -"Super Mutant Alien Assault","","status-playable","playable","2020-06-07 23:32:45.000" -"Tallowmere","","","","2020-05-03 02:23:10.000" -"Wizard of Legend - 0100522007AAA000","0100522007AAA000","status-playable","playable","2021-06-07 12:20:46.000" -"WARRIORS OROCHI 4 ULTIMATE - 0100E8500AD58000","0100E8500AD58000","status-playable;nvdec;online-broken","playable","2024-08-07 01:50:37.000" -"What Remains of Edith Finch - 010038900DFE0000","010038900DFE0000","slow;status-playable;UE4","playable","2022-08-31 19:57:59.000" -"Wasteland 2: Director's Cut - 010039A00BC64000","010039A00BC64000","nvdec;status-playable","playable","2021-01-27 13:34:11.000" -"Victor Vran Overkill Edition - 0100E81007A06000","0100E81007A06000","gpu;deadlock;status-ingame;nvdec;opengl","ingame","2022-08-30 11:46:56.000" -"Witch Thief - 01002FC00C6D0000","01002FC00C6D0000","status-playable","playable","2021-01-27 18:16:07.000" -"VSR: Void Space Racing - 0100C7C00AE6C000","0100C7C00AE6C000","status-playable","playable","2021-01-27 14:08:59.000" -"Warparty","","nvdec;status-playable","playable","2021-01-27 18:26:32.000" -"Windstorm","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-22 13:17:48.000" -"WAKU WAKU SWEETS","","","","2020-05-03 19:46:53.000" -"Windstorm - Ari's Arrival - 0100D6800CEAC000","0100D6800CEAC000","UE4;status-playable","playable","2021-06-07 19:33:19.000" -"V-Rally 4 - 010064400B138000","010064400B138000","gpu;nvdec;status-ingame","ingame","2021-06-07 19:37:31.000" -"Valkyria Chronicles - 0100CAF00B744000","0100CAF00B744000","status-ingame;32-bit;crash;nvdec","ingame","2022-11-23 20:03:32.000" -"WILL: A Wonderful World","","","","2020-05-03 22:34:06.000" -"WILD GUNS Reloaded - 0100CFC00A1D8000","0100CFC00A1D8000","status-playable","playable","2021-01-28 12:29:05.000" -"Valthirian Arc: Hero School Story","","","","2020-05-04 12:06:06.000" -"War Theatre - 010084D00A134000","010084D00A134000","gpu;status-ingame","ingame","2021-06-07 19:42:45.000" -"Vostok, Inc. - 01004D8007368000","01004D8007368000","status-playable","playable","2021-01-27 17:43:59.000" -"Way of the Passive Fist - 0100BA200C378000","0100BA200C378000","gpu;status-ingame","ingame","2021-02-26 21:07:06.000" -"Vesta - 010057B00712C000","010057B00712C000","status-playable;nvdec","playable","2022-08-29 21:03:39.000" -"West of Loathing - 010031B00A4E8000","010031B00A4E8000","status-playable","playable","2021-01-28 12:35:19.000" -"Vaporum - 010030F00CA1E000","010030F00CA1E000","nvdec;status-playable","playable","2021-05-28 14:25:33.000" -"Vandals - 01007C500D650000","01007C500D650000","status-playable","playable","2021-01-27 21:45:46.000" -"Active Neurons - 010039A010DA0000","010039A010DA0000","status-playable","playable","2021-01-27 21:31:21.000" -"Voxel Sword - 0100BFB00D1F4000","0100BFB00D1F4000","status-playable","playable","2022-08-30 14:57:27.000" -"Levelhead","","online;status-ingame","ingame","2020-10-18 11:44:51.000" -"Violett - 01005880063AA000","01005880063AA000","nvdec;status-playable","playable","2021-01-28 13:09:36.000" -"Wheels of Aurelia - 0100DFC00405E000","0100DFC00405E000","status-playable","playable","2021-01-27 21:59:25.000" -"Varion","","","","2020-05-04 15:50:27.000" -"Warlock's Tower","","","","2020-05-04 16:03:52.000" -"Vectronom","","","","2020-05-04 16:14:05.000" -"Yooka-Laylee - 0100F110029C8000","0100F110029C8000","status-playable","playable","2021-01-28 14:21:45.000" -"WWE 2K18 - 010009800203E000","010009800203E000","status-playable;nvdec","playable","2023-10-21 17:22:01.000" -"Wulverblade - 010033700418A000","010033700418A000","nvdec;status-playable","playable","2021-01-27 22:29:05.000" -"YIIK: A Postmodern RPG - 0100634008266000","0100634008266000","status-playable","playable","2021-01-28 13:38:37.000" -"Yesterday Origins","","","","2020-05-05 14:17:14.000" -"Zarvot - 0100E7900C40000","","status-playable","playable","2021-01-28 13:51:36.000" -"World to the West","","","","2020-05-05 14:47:07.000" -"Yonder: The Cloud Catcher Chronicles - 0100CC600ABB2000","0100CC600ABB2000","status-playable","playable","2021-01-28 14:06:25.000" -"Emma: Lost in Memories - 010017b0102a8000","010017b0102a8000","nvdec;status-playable","playable","2021-01-28 16:19:10.000" -"Zotrix: Solar Division - 01001EE00A6B0000","01001EE00A6B0000","status-playable","playable","2021-06-07 20:34:05.000" -"X-Morph: Defense","","status-playable","playable","2020-06-22 11:05:31.000" -"Wonder Boy: The Dragon's Trap - 0100A6300150C000","0100A6300150C000","status-playable","playable","2021-06-25 04:53:21.000" -"Yoku's Island Express - 010002D00632E000","010002D00632E000","status-playable;nvdec","playable","2022-09-03 13:59:02.000" -"Woodle Tree Adventures","","","","2020-05-06 12:48:20.000" -"World Neverland - 01008E9007064000","01008E9007064000","status-playable","playable","2021-01-28 17:44:23.000" -"Yomawari: The Long Night Collection - 010012F00B6F2000","010012F00B6F2000","status-playable","playable","2022-09-03 14:36:59.000" -"Xenon Valkyrie+ - 010064200C324000","010064200C324000","status-playable","playable","2021-06-07 20:25:53.000" -"Word Search by POWGI","","","","2020-05-06 18:16:35.000" -"Zombie Scrapper","","","","2020-05-06 18:27:12.000" -"Moving Out - 0100C4C00E73E000","0100C4C00E73E000","nvdec;status-playable","playable","2021-06-07 21:17:24.000" -"Wonderboy Returns Remix","","","","2020-05-06 22:21:59.000" -"Xenoraid - 0100928005BD2000","0100928005BD2000","status-playable","playable","2022-09-03 13:01:10.000" -"Zombillie","","status-playable","playable","2020-07-23 17:42:23.000" -"World Conqueror X","","status-playable","playable","2020-12-22 16:10:29.000" -"Xeodrifter - 01005B5009364000","01005B5009364000","status-playable","playable","2022-09-03 13:18:39.000" -"Yono and the Celestial Elephants - 0100BE50042F6000","0100BE50042F6000","status-playable","playable","2021-01-28 18:23:58.000" -"Moto Racer 4 - 01002ED00B01C000","01002ED00B01C000","UE4;nvdec;online;status-playable","playable","2021-04-08 19:09:11.000" -"NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst - 01006BB00800A000","01006BB00800A000","status-playable;nvdec","playable","2024-06-16 14:58:05.000" -"NAMCO MUSEUM - 010002F001220000","010002F001220000","status-playable;ldn-untested","playable","2024-08-13 07:52:21.000" -"Mother Russia Bleeds","","","","2020-05-07 17:29:22.000" -"MotoGP 18 - 0100361007268000","0100361007268000","status-playable;nvdec;UE4;ldn-untested","playable","2022-08-05 11:41:45.000" -"Mushroom Wars 2","","nvdec;status-playable","playable","2020-09-28 15:26:08.000" -"Mugsters - 010073E008E6E000","010073E008E6E000","status-playable","playable","2021-01-28 17:57:17.000" -"Mulaka - 0100211005E94000","0100211005E94000","status-playable","playable","2021-01-28 18:07:20.000" -"Mummy Pinball - 010038B00B9AE000","010038B00B9AE000","status-playable","playable","2022-08-05 16:08:11.000" -"Moto Rush GT - 01003F200D0F2000","01003F200D0F2000","status-playable","playable","2022-08-05 11:23:55.000" -"Mutant Football League Dynasty Edition - 0100C3E00ACAA000","0100C3E00ACAA000","status-playable;online-broken","playable","2022-08-05 17:01:51.000" -"Mr. Shifty","","slow;status-playable","playable","2020-05-08 15:28:16.000" -"MXGP3 - The Official Motocross Videogame","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 14:00:20.000" -"My Memory of Us - 0100E7700C284000","0100E7700C284000","status-playable","playable","2022-08-20 11:03:14.000" -"N++ - 01000D5005974000","01000D5005974000","status-playable","playable","2022-08-05 21:54:58.000" -"MUJO","","status-playable","playable","2020-05-08 16:31:04.000" -"MotoGP 19 - 01004B800D0E8000","01004B800D0E8000","status-playable;nvdec;online-broken;UE4","playable","2022-08-05 11:54:14.000" -"Muddledash","","services;status-ingame","ingame","2020-05-08 16:46:14.000" -"My Little Riding Champion","","slow;status-playable","playable","2020-05-08 17:00:53.000" -"Motorsport Manager for Nintendo Switch - 01002A900D6D6000","01002A900D6D6000","status-playable;nvdec","playable","2022-08-05 12:48:14.000" -"Muse Dash","","status-playable","playable","2020-06-06 14:41:29.000" -"NAMCO MUSEUM ARCADE PAC - 0100DAA00AEE6000","0100DAA00AEE6000","status-playable","playable","2021-06-07 21:44:50.000" -"MyFarm 2018","","","","2020-05-09 12:14:19.000" -"Mutant Mudds Collection - 01004BE004A86000","01004BE004A86000","status-playable","playable","2022-08-05 17:11:38.000" -"Ms. Splosion Man","","online;status-playable","playable","2020-05-09 20:45:43.000" -"New Super Mario Bros. U Deluxe - 0100EA80032EA000","0100EA80032EA000","32-bit;status-playable","playable","2023-10-08 02:06:37.000" -"Nelke & the Legendary Alchemists ~Ateliers of the New World~ - 01006ED00BC76000","01006ED00BC76000","status-playable","playable","2021-01-28 19:39:42.000" -"Nihilumbra","","status-playable","playable","2020-05-10 16:00:12.000" -"Observer - 01002A000C478000","01002A000C478000","UE4;gpu;nvdec;status-ingame","ingame","2021-03-03 20:19:45.000" -"NOT A HERO - 0100CB800B07E000","0100CB800B07E000","status-playable","playable","2021-01-28 19:31:24.000" -"Nightshade","","nvdec;status-playable","playable","2020-05-10 19:43:31.000" -"Night in the Woods - 0100921006A04000","0100921006A04000","status-playable","playable","2022-12-03 20:17:54.000" -"Nippon Marathon - 010037200C72A000","010037200C72A000","nvdec;status-playable","playable","2021-01-28 20:32:46.000" -"One Piece Unlimited World Red Deluxe Edition","","status-playable","playable","2020-05-10 22:26:32.000" -"Numbala","","status-playable","playable","2020-05-11 12:01:07.000" -"Night Trap - 25th Anniversary Edition - 0100D8500A692000","0100D8500A692000","status-playable;nvdec","playable","2022-08-08 13:16:14.000" -"Ninja Shodown","","status-playable","playable","2020-05-11 12:31:21.000" -"OkunoKA - 01006AB00BD82000","01006AB00BD82000","status-playable;online-broken","playable","2022-08-08 14:41:51.000" -"Mechstermination Force - 0100E4600D31A000","0100E4600D31A000","status-playable","playable","2024-07-04 05:39:15.000" -"Lines X","","status-playable","playable","2020-05-11 15:28:30.000" -"Katamari Damacy REROLL - 0100D7000C2C6000","0100D7000C2C6000","status-playable","playable","2022-08-02 21:35:05.000" -"Lifeless Planet - 01005B6008132000","01005B6008132000","status-playable","playable","2022-08-03 21:25:13.000" -"League of Evil - 01009C100390E000","01009C100390E000","online;status-playable","playable","2021-06-08 11:23:27.000" -"Life Goes On - 010006300AFFE000","010006300AFFE000","status-playable","playable","2021-01-29 19:01:20.000" -"Leisure Suit Larry: Wet Dreams Don't Dry - 0100A8E00CAA0000","0100A8E00CAA0000","status-playable","playable","2022-08-03 19:51:44.000" -"Legend of Kay Anniversary - 01002DB007A96000","01002DB007A96000","nvdec;status-playable","playable","2021-01-29 18:38:29.000" -"Kunio-Kun: The World Classics Collection - 010060400ADD2000","010060400ADD2000","online;status-playable","playable","2021-01-29 20:21:46.000" -"Letter Quest Remastered","","status-playable","playable","2020-05-11 21:30:34.000" -"Koi DX","","status-playable","playable","2020-05-11 21:37:51.000" -"Knights of Pen and Paper +1 Deluxier Edition","","status-playable","playable","2020-05-11 21:46:32.000" -"Late Shift - 0100055007B86000","0100055007B86000","nvdec;status-playable","playable","2021-02-01 18:43:58.000" -"Lethal League Blaze - 01003AB00983C000","01003AB00983C000","online;status-playable","playable","2021-01-29 20:13:31.000" -"Koloro - 01005D200C9AA000","01005D200C9AA000","status-playable","playable","2022-08-03 12:34:02.000" -"Little Dragons Cafe","","status-playable","playable","2020-05-12 00:00:52.000" -"Legendary Fishing - 0100A7700B46C000","0100A7700B46C000","online;status-playable","playable","2021-04-14 15:08:46.000" -"Knock-Knock - 010001A00A1F6000","010001A00A1F6000","nvdec;status-playable","playable","2021-02-01 20:03:19.000" -"KAMEN RIDER CLIMAX SCRAMBLE - 0100BDC00A664000","0100BDC00A664000","status-playable;nvdec;ldn-untested","playable","2024-07-03 08:51:11.000" -"Kingdom: New Lands - 0100BD9004AB6000","0100BD9004AB6000","status-playable","playable","2022-08-02 21:48:50.000" -"Lapis x Labyrinth - 01005E000D3D8000","01005E000D3D8000","status-playable","playable","2021-02-01 18:58:08.000" -"Last Day of June - 0100DA700879C000","0100DA700879C000","nvdec;status-playable","playable","2021-06-08 11:35:32.000" -"Levels+","","status-playable","playable","2020-05-12 13:51:39.000" -"Katana ZERO - 010029600D56A000","010029600D56A000","status-playable","playable","2022-08-26 08:09:09.000" -"Layers of Fear: Legacy","","nvdec;status-playable","playable","2021-02-15 16:30:41.000" -"Kotodama: The 7 Mysteries of Fujisawa - 010046600CCA4000","010046600CCA4000","audout;status-playable","playable","2021-02-01 20:28:37.000" -"Lichtspeer: Double Speer Edition","","status-playable","playable","2020-05-12 16:43:09.000" -"Koral","","UE4;crash;gpu;status-menus","menus","2020-11-16 12:41:26.000" -"KeroBlaster","","status-playable","playable","2020-05-12 20:42:52.000" -"Kentucky Robo Chicken","","status-playable","playable","2020-05-12 20:54:17.000" -"L.A. Noire - 0100830004FB6000","0100830004FB6000","status-playable","playable","2022-08-03 16:49:35.000" -"Kill The Bad Guy","","status-playable","playable","2020-05-12 22:16:10.000" -"Legendary Eleven - 0100A73006E74000","0100A73006E74000","status-playable","playable","2021-06-08 12:09:03.000" -"Kitten Squad - 01000C900A136000","01000C900A136000","status-playable;nvdec","playable","2022-08-03 12:01:59.000" -"Labyrinth of Refrain: Coven of Dusk - 010058500B3E0000","010058500B3E0000","status-playable","playable","2021-02-15 17:38:48.000" -"KAMIKO","","status-playable","playable","2020-05-13 12:48:57.000" -"Left-Right: The Mansion","","status-playable","playable","2020-05-13 13:02:12.000" -"Knight Terrors","","status-playable","playable","2020-05-13 13:09:22.000" -"Kingdom: Two Crowns","","status-playable","playable","2020-05-16 19:36:21.000" -"Kid Tripp","","crash;status-nothing","nothing","2020-10-15 07:41:23.000" -"King Oddball","","status-playable","playable","2020-05-13 13:47:57.000" -"KORG Gadget","","status-playable","playable","2020-05-13 13:57:24.000" -"Knights of Pen and Paper 2 Deluxiest Edition","","status-playable","playable","2020-05-13 14:07:00.000" -"Keep Talking and Nobody Explodes - 01008D400A584000","01008D400A584000","status-playable","playable","2021-02-15 18:05:21.000" -"Jet Lancer - 0100F3500C70C000","0100F3500C70C000","gpu;status-ingame","ingame","2021-02-15 18:15:47.000" -"Furi - 01000EC00AF98000","01000EC00AF98000","status-playable","playable","2022-07-27 12:21:20.000" -"Forgotton Anne - 010059E00B93C000","010059E00B93C000","nvdec;status-playable","playable","2021-02-15 18:28:07.000" -"GOD EATER 3 - 01001C700873E000","01001C700873E000","gpu;status-ingame;nvdec","ingame","2022-07-29 21:33:21.000" -"Guacamelee! Super Turbo Championship Edition","","status-playable","playable","2020-05-13 23:44:18.000" -"Frost - 0100B5300B49A000","0100B5300B49A000","status-playable","playable","2022-07-27 12:00:36.000" -"GO VACATION - 0100C1800A9B6000","0100C1800A9B6000","status-playable;nvdec;ldn-works","playable","2024-05-13 19:28:53.000" -"Grand Prix Story - 0100BE600D07A000","0100BE600D07A000","status-playable","playable","2022-08-01 12:42:23.000" -"Freedom Planet","","status-playable","playable","2020-05-14 12:23:06.000" -"Fossil Hunters - 0100CA500756C000","0100CA500756C000","status-playable;nvdec","playable","2022-07-27 11:37:20.000" -"For The King - 010069400B6BE000","010069400B6BE000","nvdec;status-playable","playable","2021-02-15 18:51:44.000" -"Flashback","","nvdec;status-playable","playable","2020-05-14 13:57:29.000" -"Golf Story","","status-playable","playable","2020-05-14 14:56:17.000" -"Firefighters: Airport Fire Department","","status-playable","playable","2021-02-15 19:17:00.000" -"Chocobo's Mystery Dungeon Every Buddy!","","slow;status-playable","playable","2020-05-26 13:53:13.000" -"CHOP","","","","2020-05-14 17:13:00.000" -"FunBox Party","","status-playable","playable","2020-05-15 12:07:02.000" -"Friday the 13th: Killer Puzzle - 010003F00BD48000","010003F00BD48000","status-playable","playable","2021-01-28 01:33:38.000" -"Johnny Turbo's Arcade Gate of Doom - 010069B002CDE000","010069B002CDE000","status-playable","playable","2022-07-29 12:17:50.000" -"Frederic: Resurrection of Music","","nvdec;status-playable","playable","2020-07-23 16:59:53.000" -"Frederic 2","","status-playable","playable","2020-07-23 16:44:37.000" -"Fort Boyard","","nvdec;slow;status-playable","playable","2020-05-15 13:22:53.000" -"Flipping Death - 01009FB002B2E000","01009FB002B2E000","status-playable","playable","2021-02-17 16:12:30.000" -"Flat Heroes - 0100C53004C52000","0100C53004C52000","gpu;status-ingame","ingame","2022-07-26 19:37:37.000" -"Flood of Light","","status-playable","playable","2020-05-15 14:15:25.000" -"FRAMED COLLECTION - 0100F1A00A5DC000","0100F1A00A5DC000","status-playable;nvdec","playable","2022-07-27 11:48:15.000" -"Guacamelee! 2","","status-playable","playable","2020-05-15 14:56:59.000" -"Flinthook","","online;status-playable","playable","2021-03-25 20:42:29.000" -"FORMA.8","","nvdec;status-playable","playable","2020-11-15 01:04:32.000" -"FOX n FORESTS - 01008A100A028000","01008A100A028000","status-playable","playable","2021-02-16 14:27:49.000" -"Gotcha Racing 2nd","","status-playable","playable","2020-07-23 17:14:04.000" -"Floor Kids - 0100DF9005E7A000","0100DF9005E7A000","status-playable;nvdec","playable","2024-08-18 19:38:49.000" -"Firefighters - The Simulation - 0100434003C58000","0100434003C58000","status-playable","playable","2021-02-19 13:32:05.000" -"Flip Wars - 010095A004040000","010095A004040000","services;status-ingame;ldn-untested","ingame","2022-05-02 15:39:18.000" -"TowerFall","","status-playable","playable","2020-05-16 18:58:07.000" -"Towertale","","status-playable","playable","2020-10-15 13:56:58.000" -"Football Manager Touch 2018 - 010097F0099B4000","010097F0099B4000","status-playable","playable","2022-07-26 20:17:56.000" -"Fruitfall Crush","","status-playable","playable","2020-10-20 11:33:33.000" -"Forest Home","","","","2020-05-17 13:33:08.000" -"Fly O'Clock VS","","status-playable","playable","2020-05-17 13:39:52.000" -"Gal Metal - 01B8000C2EA000","","status-playable","playable","2022-07-27 20:57:48.000" -"Gear.Club Unlimited - 010065E003FD8000","010065E003FD8000","status-playable","playable","2021-06-08 13:03:19.000" -"Gear.Club Unlimited 2 - 010072900AFF0000","010072900AFF0000","status-playable;nvdec;online-broken","playable","2022-07-29 12:52:16.000" -"GRIP - 0100459009A2A000","0100459009A2A000","status-playable;nvdec;online-broken;UE4","playable","2022-08-01 15:00:22.000" -"Ginger: Beyond the Crystal - 0100C50007070000","0100C50007070000","status-playable","playable","2021-02-17 16:27:00.000" -"Slayin 2 - 01004E900EDDA000","01004E900EDDA000","gpu;status-ingame","ingame","2024-04-19 16:15:26.000" -"Grim Fandango Remastered - 0100B7900B024000","0100B7900B024000","status-playable;nvdec","playable","2022-08-01 13:55:58.000" -"Gal*Gun 2 - 010024700901A000","010024700901A000","status-playable;nvdec;UE4","playable","2022-07-27 12:45:37.000" -"Golem Gates - 01003C000D84C000","01003C000D84C000","status-ingame;crash;nvdec;online-broken;UE4","ingame","2022-07-30 11:35:11.000" -"Full Metal Furies","","online","","2020-05-18 13:22:06.000" -"GIGA WRECKER Alt. - 010045F00BFC2000","010045F00BFC2000","status-playable","playable","2022-07-29 14:13:54.000" -"Gelly Break - 01009D000AF3A000","01009D000AF3A000","UE4;status-playable","playable","2021-03-03 16:04:02.000" -"The World Next Door - 0100E6200D56E000","0100E6200D56E000","status-playable","playable","2022-09-21 14:15:23.000" -"GREEN - 010068D00AE68000","010068D00AE68000","status-playable","playable","2022-08-01 12:54:15.000" -"Feathery Ears","","","","2020-05-18 14:48:31.000" -"Gorogoa - 0100F2A005C98000","0100F2A005C98000","status-playable","playable","2022-08-01 11:55:08.000" -"Girls und Panzer Dream Tank Match DX - 01006DD00CC96000","01006DD00CC96000","status-playable;ldn-untested","playable","2022-09-12 16:07:11.000" -"Super Crush KO","","","","2020-05-18 15:49:23.000" -"Gem Smashers - 01001A4008192000","01001A4008192000","nvdec;status-playable","playable","2021-06-08 13:40:51.000" -"Grave Danger","","status-playable","playable","2020-05-18 17:41:28.000" -"Fury Unleashed","","crash;services;status-ingame","ingame","2020-10-18 11:52:40.000" -"TaniNani - 01007DB010D2C000","01007DB010D2C000","crash;kernel;status-nothing","nothing","2021-04-08 03:06:44.000" -"Atelier Escha & Logy: Alchemists Of The Dusk Sky DX - 0100E5600EE8E000","0100E5600EE8E000","status-playable;nvdec","playable","2022-11-20 16:01:41.000" -"Battle of Elemental Burst","","","","2020-05-18 23:27:22.000" -"Gun Crazy","","","","2020-05-18 23:47:28.000" -"Ascendant Hearts","","","","2020-05-19 08:50:44.000" -"Infinite Beyond the Mind","","","","2020-05-19 09:17:17.000" -"FullBlast","","status-playable","playable","2020-05-19 10:34:13.000" -"The Legend of Heroes: Trails of Cold Steel III","","status-playable","playable","2020-12-16 10:59:18.000" -"Goosebumps: The Game","","status-playable","playable","2020-05-19 11:56:52.000" -"Gonner","","status-playable","playable","2020-05-19 12:05:02.000" -"Monster Viator","","","","2020-05-19 12:15:18.000" -"Umihara Kawase Fresh","","","","2020-05-19 12:29:18.000" -"Operencia The Stolen Sun - 01006CF00CFA4000","01006CF00CFA4000","UE4;nvdec;status-playable","playable","2021-06-08 13:51:07.000" -"Goetia","","status-playable","playable","2020-05-19 12:55:39.000" -"Grid Mania","","status-playable","playable","2020-05-19 14:11:05.000" -"Pantsu Hunter","","status-playable","playable","2021-02-19 15:12:27.000" -"GOD WARS THE COMPLETE LEGEND","","nvdec;status-playable","playable","2020-05-19 14:37:50.000" -"Dark Burial","","","","2020-05-19 14:38:34.000" -"Langrisser I and II - 0100BAB00E8C0000","0100BAB00E8C0000","status-playable","playable","2021-02-19 15:46:10.000" -"My Secret Pets","","","","2020-05-19 15:26:56.000" -"Grass Cutter","","slow;status-ingame","ingame","2020-05-19 18:27:42.000" -"Giana Sisters: Twisted Dreams - Owltimate Edition - 01003830092B8000","01003830092B8000","status-playable","playable","2022-07-29 14:06:12.000" -"FUN! FUN! Animal Park - 010002F00CC20000","010002F00CC20000","status-playable","playable","2021-04-14 17:08:52.000" -"Graceful Explosion Machine","","status-playable","playable","2020-05-19 20:36:55.000" -"Garage","","status-playable","playable","2020-05-19 20:59:53.000" -"Game Dev Story","","status-playable","playable","2020-05-20 00:00:38.000" -"Gone Home - 0100EEC00AA6E000","0100EEC00AA6E000","status-playable","playable","2022-08-01 11:14:20.000" -"Geki Yaba Runner Anniversary Edition - 01000F000D9F0000","01000F000D9F0000","status-playable","playable","2021-02-19 18:59:07.000" -"Gridd: Retroenhanced","","status-playable","playable","2020-05-20 11:32:40.000" -"Green Game - 0100CBB0070EE000","0100CBB0070EE000","nvdec;status-playable","playable","2021-02-19 18:51:55.000" -"Glaive: Brick Breaker","","status-playable","playable","2020-05-20 12:15:59.000" -"Furwind - 0100A6B00D4EC000","0100A6B00D4EC000","status-playable","playable","2021-02-19 19:44:08.000" -"Goat Simulator - 010032600C8CE000","010032600C8CE000","32-bit;status-playable","playable","2022-07-29 21:02:33.000" -"Gnomes Garden 2","","status-playable","playable","2021-02-19 20:08:13.000" -"Gensokyo Defenders - 010000300C79C000","010000300C79C000","status-playable;online-broken;UE4","playable","2022-07-29 13:48:12.000" -"Guess the Character","","status-playable","playable","2020-05-20 13:14:19.000" -"Gato Roboto - 010025500C098000","010025500C098000","status-playable","playable","2023-01-20 15:04:11.000" -"Gekido Kintaro's Revenge","","status-playable","playable","2020-10-27 12:44:05.000" -"Ghost 1.0 - 0100EEB005ACC000","0100EEB005ACC000","status-playable","playable","2021-02-19 20:48:47.000" -"GALAK-Z: Variant S - 0100C9800A454000","0100C9800A454000","status-boots;online-broken","boots","2022-07-29 11:59:12.000" -"Cuphead - 0100A5C00D162000","0100A5C00D162000","status-playable","playable","2022-02-01 22:45:55.000" -"Darkest Dungeon - 01008F1008DA6000","01008F1008DA6000","status-playable;nvdec","playable","2022-07-22 18:49:18.000" -"Cabela's: The Hunt - Championship Edition - 0100E24004510000","0100E24004510000","status-menus;32-bit","menus","2022-07-21 20:21:25.000" -"Darius Cozmic Collection","","status-playable","playable","2021-02-19 20:59:06.000" -"Ion Fury - 010041C00D086000","010041C00D086000","status-ingame;vulkan-backend-bug","ingame","2022-08-07 08:27:51.000" -"Void Bastards - 0100D010113A8000","0100D010113A8000","status-playable","playable","2022-10-15 00:04:19.000" -"Our two Bedroom Story - 010097F010FE6000","010097F010FE6000","gpu;status-ingame;nvdec","ingame","2023-10-10 17:41:20.000" -"Dark Witch Music Episode: Rudymical","","status-playable","playable","2020-05-22 09:44:44.000" -"Cave Story+","","status-playable","playable","2020-05-22 09:57:25.000" -"Crawl","","status-playable","playable","2020-05-22 10:16:05.000" -"Chasm","","status-playable","playable","2020-10-23 11:03:43.000" -"Princess Closet","","","","2020-05-22 10:34:06.000" -"Color Zen","","status-playable","playable","2020-05-22 10:56:17.000" -"Coffee Crisis - 0100CF800C810000","0100CF800C810000","status-playable","playable","2021-02-20 12:34:52.000" -"Croc's World","","status-playable","playable","2020-05-22 11:21:09.000" -"Chicken Rider","","status-playable","playable","2020-05-22 11:31:17.000" -"Caveman Warriors","","status-playable","playable","2020-05-22 11:44:20.000" -"Clustertruck - 010096900A4D2000","010096900A4D2000","slow;status-ingame","ingame","2021-02-19 21:07:09.000" -"Yumeutsutsu Re:After - 0100B56011502000","0100B56011502000","status-playable","playable","2022-11-20 16:09:06.000" -"Danger Mouse - 01003ED0099B0000","01003ED0099B0000","status-boots;crash;online","boots","2022-07-22 15:49:45.000" -"Circle of Sumo","","status-playable","playable","2020-05-22 12:45:21.000" -"Chicken Range - 0100F6C00A016000","0100F6C00A016000","status-playable","playable","2021-04-23 12:14:23.000" -"Conga Master Party!","","status-playable","playable","2020-05-22 13:22:24.000" -"SNK HEROINES Tag Team Frenzy - 010027F00AD6C000","010027F00AD6C000","status-playable;nvdec;online-broken;ldn-untested","playable","2022-08-14 14:19:25.000" -"Conduct TOGETHER! - 010043700C9B0000","010043700C9B0000","nvdec;status-playable","playable","2021-02-20 12:59:00.000" -"Calculation Castle: Greco's Ghostly Challenge ""Addition""","","32-bit;status-playable","playable","2020-11-01 23:40:11.000" -"Calculation Castle: Greco's Ghostly Challenge ""Subtraction""","","32-bit;status-playable","playable","2020-11-01 23:47:42.000" -"Calculation Castle: Greco's Ghostly Challenge ""Multiplication""","","32-bit;status-playable","playable","2020-11-02 00:04:33.000" -"Calculation Castle: Greco's Ghostly Challenge ""Division""","","32-bit;status-playable","playable","2020-11-01 23:54:55.000" -"Chicken Assassin: Reloaded - 0100E3C00A118000","0100E3C00A118000","status-playable","playable","2021-02-20 13:29:01.000" -"eSports Legend","","","","2020-05-22 18:58:46.000" -"Crypt of the Necrodancer - 0100CEA007D08000","0100CEA007D08000","status-playable;nvdec","playable","2022-11-01 09:52:06.000" -"Crash Bandicoot N. Sane Trilogy - 0100D1B006744000","0100D1B006744000","status-playable","playable","2024-02-11 11:38:14.000" -"Castle of Heart - 01003C100445C000","01003C100445C000","status-playable;nvdec","playable","2022-07-21 23:10:45.000" -"Darkwood","","status-playable","playable","2021-01-08 21:24:06.000" -"A Fold Apart","","","","2020-05-23 08:10:49.000" -"Blind Men - 010089D011310000","010089D011310000","audout;status-playable","playable","2021-02-20 14:15:38.000" -"Darksiders Warmastered Edition - 0100E1400BA96000","0100E1400BA96000","status-playable;nvdec","playable","2023-03-02 18:08:09.000" -"OBAKEIDORO!","","nvdec;online;status-playable","playable","2020-10-16 16:57:34.000" -"De:YABATANIEN","","","","2020-05-23 10:48:51.000" -"Crash Dummy","","nvdec;status-playable","playable","2020-05-23 11:12:43.000" -"Castlevania Anniversary Collection","","audio;status-playable","playable","2020-05-23 11:40:29.000" -"Flan - 010038200E088000","010038200E088000","status-ingame;crash;regression","ingame","2021-11-17 07:39:28.000" -"Sisters Royale: Five Sisters Under Fire","","","","2020-05-23 15:12:09.000" -"Game Tengoku CruisinMix Special","","","","2020-05-23 17:30:59.000" -"Cosmic Star Heroine - 010067C00A776000","010067C00A776000","status-playable","playable","2021-02-20 14:30:47.000" -"Croixleur Sigma - 01000F0007D92000","01000F0007D92000","status-playable;online","playable","2022-07-22 14:26:54.000" -"Cities: Skylines - Nintendo Switch Edition","","status-playable","playable","2020-12-16 10:34:57.000" -"Castlestorm - 010097C00AB66000","010097C00AB66000","status-playable;nvdec","playable","2022-07-21 22:49:14.000" -"Coffin Dodgers - 0100178009648000","0100178009648000","status-playable","playable","2021-02-20 14:57:41.000" -"Child of Light","","nvdec;status-playable","playable","2020-12-16 10:23:10.000" -"Wizards of Brandel","","status-nothing","nothing","2020-10-14 15:52:33.000" -"Contra Anniversary Collection - 0100DCA00DA7E000","0100DCA00DA7E000","status-playable","playable","2022-07-22 11:30:12.000" -"Cartoon Network Adventure Time: Pirates of the Enchiridion - 0100C4E004406000","0100C4E004406000","status-playable;nvdec","playable","2022-07-21 21:49:01.000" -"Claybook - 010009300AA6C000","010009300AA6C000","slow;status-playable;nvdec;online;UE4","playable","2022-07-22 11:11:34.000" -"Crashbots - 0100BF200CD74000","0100BF200CD74000","status-playable","playable","2022-07-22 13:50:52.000" -"Crossing Souls - 0100B1E00AA56000","0100B1E00AA56000","nvdec;status-playable","playable","2021-02-20 15:42:54.000" -"Groove Coaster: Wai Wai Party!!!! - 0100EB500D92E000","0100EB500D92E000","status-playable;nvdec;ldn-broken","playable","2021-11-06 14:54:27.000" -"Candle - The Power of the Flame","","nvdec;status-playable","playable","2020-05-26 12:10:20.000" -"Minecraft Dungeons - 01006C100EC08000","01006C100EC08000","status-playable;nvdec;online-broken;UE4","playable","2024-06-26 22:10:43.000" -"Constructor Plus","","status-playable","playable","2020-05-26 12:37:40.000" -"The Wonderful 101: Remastered - 0100B1300FF08000","0100B1300FF08000","slow;status-playable;nvdec","playable","2022-09-30 13:49:28.000" -"Dandara","","status-playable","playable","2020-05-26 12:42:33.000" -"ChromaGun","","status-playable","playable","2020-05-26 12:56:42.000" -"Crayola Scoot - 0100C66007E96000","0100C66007E96000","status-playable;nvdec","playable","2022-07-22 14:01:55.000" -"Chess Ultra - 0100A5900472E000","0100A5900472E000","status-playable;UE4","playable","2023-08-30 23:06:31.000" -"Clue","","crash;online;status-menus","menus","2020-11-10 09:23:48.000" -"ACA NEOGEO Metal Slug X","","crash;services;status-menus","menus","2020-05-26 14:07:20.000" -"ACA NEOGEO ZUPAPA!","","online;status-playable","playable","2021-03-25 20:07:33.000" -"ACA NEOGEO WORLD HEROES PERFECT","","crash;services;status-menus","menus","2020-05-26 14:14:36.000" -"ACA NEOGEO WAKU WAKU 7 - 0100CEF001DC0000","0100CEF001DC0000","online;status-playable","playable","2021-04-10 14:20:52.000" -"ACA NEOGEO THE SUPER SPY - 0100F7F00AFA2000","0100F7F00AFA2000","online;status-playable","playable","2021-04-10 14:26:33.000" -"ACA NEOGEO THE LAST BLADE 2 - 0100699008792000","0100699008792000","online;status-playable","playable","2021-04-10 14:31:54.000" -"ACA NEOGEO THE KING OF FIGHTERS '99 - 0100583001DCA000","0100583001DCA000","online;status-playable","playable","2021-04-10 14:36:56.000" -"ACA NEOGEO THE KING OF FIGHTERS '98","","crash;services;status-menus","menus","2020-05-26 14:54:20.000" -"ACA NEOGEO THE KING OF FIGHTERS '97 - 0100170008728000","0100170008728000","online;status-playable","playable","2021-04-10 14:43:27.000" -"ACA NEOGEO THE KING OF FIGHTERS '96 - 01006F0004FB4000","01006F0004FB4000","online;status-playable","playable","2021-04-10 14:49:10.000" -"ACA NEOGEO THE KING OF FIGHTERS '95 - 01009DC001DB6000","01009DC001DB6000","status-playable","playable","2021-03-29 20:27:35.000" -"ACA NEOGEO THE KING OF FIGHTERS '94","","crash;services;status-menus","menus","2020-05-26 15:03:44.000" -"ACA NEOGEO THE KING OF FIGHTERS 2003 - 0100EF100AFE6000","0100EF100AFE6000","online;status-playable","playable","2021-04-10 14:54:31.000" -"ACA NEOGEO THE KING OF FIGHTERS 2002 - 0100CFD00AFDE000","0100CFD00AFDE000","online;status-playable","playable","2021-04-10 15:01:55.000" -"ACA NEOGEO THE KING OF FIGHTERS 2001 - 010048200AFC2000","010048200AFC2000","online;status-playable","playable","2021-04-10 15:16:23.000" -"ACA NEOGEO THE KING OF FIGHTERS 2000 - 0100B97002B44000","0100B97002B44000","online;status-playable","playable","2021-04-10 15:24:35.000" -"ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY - 0100A4D00A308000","0100A4D00A308000","online;status-playable","playable","2021-04-10 15:39:22.000" -"ACA NEOGEO SUPER SIDEKICKS 2 - 010055A00A300000","010055A00A300000","online;status-playable","playable","2021-04-10 16:05:58.000" -"ACA NEOGEO SPIN MASTER - 01007D1004DBA000","01007D1004DBA000","online;status-playable","playable","2021-04-10 15:50:19.000" -"ACA NEOGEO SHOCK TROOPERS","","crash;services;status-menus","menus","2020-05-26 15:29:34.000" -"ACA NEOGEO SENGOKU 3 - 01008D000877C000","01008D000877C000","online;status-playable","playable","2021-04-10 16:11:53.000" -"ACA NEOGEO SENGOKU 2 - 01009B300872A000","01009B300872A000","online;status-playable","playable","2021-04-10 17:36:44.000" -"ACA NEOGEO SAMURAI SHODOWN SPECIAL V - 010049F00AFE8000","010049F00AFE8000","online;status-playable","playable","2021-04-10 18:07:13.000" -"ACA NEOGEO SAMURAI SHODOWN IV - 010047F001DBC000","010047F001DBC000","online;status-playable","playable","2021-04-12 12:58:54.000" -"ACA NEOGEO SAMURAI SHODOWN - 01005C9002B42000","01005C9002B42000","online;status-playable","playable","2021-04-01 17:11:35.000" -"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL - 010088500878C000","010088500878C000","online;status-playable","playable","2021-04-01 17:18:27.000" -"ACA NEOGEO OVER TOP - 01003A5001DBA000","01003A5001DBA000","status-playable","playable","2021-02-21 13:16:25.000" -"ACA NEOGEO NINJA COMMANDO - 01007E800AFB6000","01007E800AFB6000","online;status-playable","playable","2021-04-01 17:28:18.000" -"ACA NEOGEO NINJA COMBAT - 010052A00A306000","010052A00A306000","status-playable","playable","2021-03-29 21:17:28.000" -"ACA NEOGEO NEO TURF MASTERS - 01002E70032E8000","01002E70032E8000","status-playable","playable","2021-02-21 15:12:01.000" -"ACA NEOGEO Money Puzzle Exchanger - 010038F00AFA0000","010038F00AFA0000","online;status-playable","playable","2021-04-01 17:59:56.000" -"ACA NEOGEO METAL SLUG 4 - 01009CE00AFAE000","01009CE00AFAE000","online;status-playable","playable","2021-04-01 18:12:18.000" -"ACA NEOGEO METAL SLUG 3","","crash;services;status-menus","menus","2020-05-26 16:32:45.000" -"ACA NEOGEO METAL SLUG 2 - 010086300486E000","010086300486E000","online;status-playable","playable","2021-04-01 19:25:52.000" -"ACA NEOGEO METAL SLUG - 0100EBE002B3E000","0100EBE002B3E000","status-playable","playable","2021-02-21 13:56:48.000" -"ACA NEOGEO MAGICIAN LORD - 01007920038F6000","01007920038F6000","online;status-playable","playable","2021-04-01 19:33:26.000" -"ACA NEOGEO MAGICAL DROP II","","crash;services;status-menus","menus","2020-05-26 16:48:24.000" -"SNK Gals Fighters","","","","2020-05-26 16:56:16.000" -"ESP Ra.De. Psi - 0100F9600E746000","0100F9600E746000","audio;slow;status-ingame","ingame","2024-03-07 15:05:08.000" -"ACA NEOGEO LEAGUE BOWLING","","crash;services;status-menus","menus","2020-05-26 17:11:04.000" -"ACA NEOGEO LAST RESORT - 01000D10038E6000","01000D10038E6000","online;status-playable","playable","2021-04-01 19:51:22.000" -"ACA NEOGEO GHOST PILOTS - 01005D700A2F8000","01005D700A2F8000","online;status-playable","playable","2021-04-01 20:26:45.000" -"ACA NEOGEO GAROU: MARK OF THE WOLVES - 0100CB2001DB8000","0100CB2001DB8000","online;status-playable","playable","2021-04-01 20:31:10.000" -"ACA NEOGEO FOOTBALL FRENZY","","status-playable","playable","2021-03-29 20:12:12.000" -"ACA NEOGEO FATAL FURY - 0100EE6002B48000","0100EE6002B48000","online;status-playable","playable","2021-04-01 20:36:23.000" -"ACA NEOGEO CROSSED SWORDS - 0100D2400AFB0000","0100D2400AFB0000","online;status-playable","playable","2021-04-01 20:42:59.000" -"ACA NEOGEO BLAZING STAR","","crash;services;status-menus","menus","2020-05-26 17:29:02.000" -"ACA NEOGEO BASEBALL STARS PROFESSIONAL - 01003FE00A2F6000","01003FE00A2F6000","online;status-playable","playable","2021-04-01 21:23:05.000" -"ACA NEOGEO AGGRESSORS OF DARK KOMBAT - 0100B4800AFBA000","0100B4800AFBA000","online;status-playable","playable","2021-04-01 22:48:01.000" -"ACA NEOGEO AERO FIGHTERS 3 - 0100B91008780000","0100B91008780000","online;status-playable","playable","2021-04-12 13:11:17.000" -"ACA NEOGEO 3 COUNT BOUT - 0100FC000AFC6000","0100FC000AFC6000","online;status-playable","playable","2021-04-12 13:16:42.000" -"ACA NEOGEO 2020 SUPER BASEBALL - 01003C400871E000","01003C400871E000","online;status-playable","playable","2021-04-12 13:23:51.000" -"Arcade Archives Traverse USA - 010029D006ED8000","010029D006ED8000","online;status-playable","playable","2021-04-15 08:11:06.000" -"Arcade Archives TERRA CRESTA","","crash;services;status-menus","menus","2020-08-18 20:20:55.000" -"Arcade Archives STAR FORCE - 010069F008A38000","010069F008A38000","online;status-playable","playable","2021-04-15 08:39:09.000" -"Arcade Archives Sky Skipper - 010008F00B054000","010008F00B054000","online;status-playable","playable","2021-04-15 08:58:09.000" -"Arcade Archives RYGAR - 0100C2D00981E000","0100C2D00981E000","online;status-playable","playable","2021-04-15 08:48:30.000" -"Arcade Archives Renegade - 010081E001DD2000","010081E001DD2000","status-playable;online","playable","2022-07-21 11:45:40.000" -"Arcade Archives PUNCH-OUT!! - 01001530097F8000","01001530097F8000","online;status-playable","playable","2021-03-25 22:10:55.000" -"Arcade Archives OMEGA FIGHTER","","crash;services;status-menus","menus","2020-08-18 20:50:54.000" -"Arcade Archives Ninja-Kid","","online;status-playable","playable","2021-03-26 20:55:07.000" -"Arcade Archives NINJA GAIDEN - 01003EF00D3B4000","01003EF00D3B4000","audio;online;status-ingame","ingame","2021-04-12 16:27:53.000" -"Arcade Archives MOON PATROL - 01003000097FE000","01003000097FE000","online;status-playable","playable","2021-03-26 11:42:04.000" -"Arcade Archives MARIO BROS. - 0100755004608000","0100755004608000","online;status-playable","playable","2021-03-26 11:31:32.000" -"Arcade Archives Kid's Horehore Daisakusen - 0100E7C001DE0000","0100E7C001DE0000","online;status-playable","playable","2021-04-12 16:21:29.000" -"Arcade Archives Kid Niki Radical Ninja - 010010B008A36000","010010B008A36000","audio;status-ingame;online","ingame","2022-07-21 11:02:04.000" -"Arcade Archives Ikki - 01000DB00980A000","01000DB00980A000","online;status-playable","playable","2021-03-25 23:11:28.000" -"Arcade Archives HEROIC EPISODE - 01009A4008A30000","01009A4008A30000","online;status-playable","playable","2021-03-25 23:01:26.000" -"Arcade Archives DOUBLE DRAGON II The Revenge - 01009E3001DDE000","01009E3001DDE000","online;status-playable","playable","2021-04-12 16:05:29.000" -"Arcade Archives DOUBLE DRAGON - 0100F25001DD0000","0100F25001DD0000","online;status-playable","playable","2021-03-25 22:44:34.000" -"Arcade Archives DONKEY KONG","","Needs Update;crash;services;status-menus","menus","2021-03-24 18:18:43.000" -"Arcade Archives CRAZY CLIMBER - 0100BB1001DD6000","0100BB1001DD6000","online;status-playable","playable","2021-03-25 22:24:15.000" -"Arcade Archives City CONNECTION - 010007A00980C000","010007A00980C000","online;status-playable","playable","2021-03-25 22:16:15.000" -"Arcade Archives 10-Yard Fight - 0100BE80097FA000","0100BE80097FA000","online;status-playable","playable","2021-03-25 21:26:41.000" -"Ark: Survival Evolved - 0100D4A00B284000","0100D4A00B284000","gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested","ingame","2024-04-16 00:53:56.000" -"Art of Balance - 01008EC006BE2000","01008EC006BE2000","gpu;status-ingame;ldn-works","ingame","2022-07-21 17:13:57.000" -"Aces of the Luftwaffe Squadron","","nvdec;slow;status-playable","playable","2020-05-27 12:29:42.000" -"Atelier Lulua ~ The Scion of Arland ~","","nvdec;status-playable","playable","2020-12-16 14:29:19.000" -"Apocalipsis","","deadlock;status-menus","menus","2020-05-27 12:56:37.000" -"Aqua Moto Racing Utopia - 0100D0D00516A000","0100D0D00516A000","status-playable","playable","2021-02-21 21:21:00.000" -"Arc of Alchemist - 0100C7D00E6A0000","0100C7D00E6A0000","status-playable;nvdec","playable","2022-10-07 19:15:54.000" -"1979 Revolution: Black Friday - 0100D1000B18C000","0100D1000B18C000","nvdec;status-playable","playable","2021-02-21 21:03:43.000" -"ABZU - 0100C1300BBC6000","0100C1300BBC6000","status-playable;UE4","playable","2022-07-19 15:02:52.000" -"Asterix & Obelix XXL 2 - 010050400BD38000","010050400BD38000","deadlock;status-ingame;nvdec","ingame","2022-07-21 17:54:14.000" -"Astro Bears Party","","status-playable","playable","2020-05-28 11:21:58.000" -"AQUA KITTY UDX - 0100AC10085CE000","0100AC10085CE000","online;status-playable","playable","2021-04-12 15:34:11.000" -"Assassin's Creed III Remastered - 01007F600B134000","01007F600B134000","status-boots;nvdec","boots","2024-06-25 20:12:11.000" -"Antiquia Lost","","status-playable","playable","2020-05-28 11:57:32.000" -"Animal Super Squad - 0100EFE009424000","0100EFE009424000","UE4;status-playable","playable","2021-04-23 20:50:50.000" -"Anima: Arcane Edition - 010033F00B3FA000","010033F00B3FA000","nvdec;status-playable","playable","2021-01-26 16:55:51.000" -"American Ninja Warrior: Challenge - 010089D00A3FA000","010089D00A3FA000","nvdec;status-playable","playable","2021-06-09 13:11:17.000" -"Air Conflicts: Pacific Carriers","","status-playable","playable","2021-01-04 10:52:50.000" -"Agatha Knife","","status-playable","playable","2020-05-28 12:37:58.000" -"ACORN Tactics - 0100DBC0081A4000","0100DBC0081A4000","status-playable","playable","2021-02-22 12:57:40.000" -"Anarcute - 010050900E1C6000","010050900E1C6000","status-playable","playable","2021-02-22 13:17:59.000" -"39 Days to Mars - 0100AF400C4CE000","0100AF400C4CE000","status-playable","playable","2021-02-21 22:12:46.000" -"Animal Rivals Switch - 010065B009B3A000","010065B009B3A000","status-playable","playable","2021-02-22 14:02:42.000" -"88 Heroes","","status-playable","playable","2020-05-28 14:13:02.000" -"Aegis Defenders - 01008E60065020000","01008E6006502000","status-playable","playable","2021-02-22 13:29:33.000" -"Jeopardy! - 01006E400AE2A000","01006E400AE2A000","audout;nvdec;online;status-playable","playable","2021-02-22 13:53:46.000" -"Akane - 01007F100DE52000","01007F100DE52000","status-playable;nvdec","playable","2022-07-21 00:12:18.000" -"Aaero - 010097A00CC0A000","010097A00CC0A000","status-playable;nvdec","playable","2022-07-19 14:49:55.000" -"99Vidas","","online;status-playable","playable","2020-10-29 13:00:40.000" -"AngerForce: Reloaded for Nintendo Switch - 010001E00A5F6000","010001E00A5F6000","status-playable","playable","2022-07-21 10:37:17.000" -"36 Fragments of Midnight","","status-playable","playable","2020-05-28 15:12:59.000" -"Akihabara - Feel the Rhythm Remixed - 010053100B0EA000","010053100B0EA000","status-playable","playable","2021-02-22 14:39:35.000" -"Bertram Fiddle Episode 2: A Bleaker Predicklement - 010021F00C1C0000","010021F00C1C0000","nvdec;status-playable","playable","2021-02-22 14:56:37.000" -"6180 the moon","","status-playable","playable","2020-05-28 15:39:24.000" -"Ace of Seafood - 0100FF1004D56000","0100FF1004D56000","status-playable","playable","2022-07-19 15:32:25.000" -"12 orbits","","status-playable","playable","2020-05-28 16:13:26.000" -"Access Denied - 0100A9900CB5C000","0100A9900CB5C000","status-playable","playable","2022-07-19 15:25:10.000" -"Air Hockey","","status-playable","playable","2020-05-28 16:44:37.000" -"2064: Read Only Memories","","deadlock;status-menus","menus","2020-05-28 16:53:58.000" -"12 is Better Than 6 - 01007F600D1B8000","01007F600D1B8000","status-playable","playable","2021-02-22 16:10:12.000" -"Sid Meier's Civilization VI - 010044500C182000","010044500C182000","status-playable;ldn-untested","playable","2024-04-08 16:03:40.000" -"Sniper Elite V2 Remastered - 0100BB000A3AA000","0100BB000A3AA000","slow;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-08-14 13:23:13.000" -"South Park: The Fractured But Whole - 01008F2005154000","01008F2005154000","slow;status-playable;online-broken","playable","2024-07-08 17:47:28.000" -"SkyScrappers","","status-playable","playable","2020-05-28 22:11:25.000" -"Shio - 0100C2F00A568000","0100C2F00A568000","status-playable","playable","2021-02-22 16:25:09.000" -"NBA 2K18 - 0100760002048000","0100760002048000","gpu;status-ingame;ldn-untested","ingame","2022-08-06 14:17:51.000" -"Sky Force Anniversary - 010083100B5CA000","010083100B5CA000","status-playable;online-broken","playable","2022-08-12 20:50:07.000" -"Slay the Spire - 010026300BA4A000","010026300BA4A000","status-playable","playable","2023-01-20 15:09:26.000" -"Sky Gamblers: Storm Raiders - 010093D00AC38000","010093D00AC38000","gpu;audio;status-ingame;32-bit","ingame","2022-08-12 21:13:36.000" -"Shovel Knight: Treasure Trove","","status-playable","playable","2021-02-14 18:24:39.000" -"Sine Mora EX - 01002820036A8000","01002820036A8000","gpu;status-ingame;online-broken","ingame","2022-08-12 19:36:18.000" -"NBA Playgrounds - 0100F5A008126000","0100F5A008126000","status-playable;nvdec;online-broken;UE4","playable","2022-08-06 16:13:44.000" -"Shut Eye","","status-playable","playable","2020-07-23 18:08:35.000" -"SINNER: Sacrifice for Redemption - 0100B16009C10000","0100B16009C10000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-12 20:37:33.000" -"SKYPEACE","","status-playable","playable","2020-05-29 14:14:30.000" -"Slain","","status-playable","playable","2020-05-29 14:26:16.000" -"Umihara Kawase BaZooka!","","","","2020-05-29 14:56:48.000" -"Sigi - A Fart for Melusina - 01007FC00B674000","01007FC00B674000","status-playable","playable","2021-02-22 16:46:58.000" -"Sky Ride - 0100DDB004F30000","0100DDB004F30000","status-playable","playable","2021-02-22 16:53:07.000" -"Soccer Slammers","","status-playable","playable","2020-05-30 07:48:14.000" -"Songbringer","","status-playable","playable","2020-06-22 10:42:02.000" -"Sky Rogue","","status-playable","playable","2020-05-30 08:26:28.000" -"Shovel Knight: Specter of Torment","","status-playable","playable","2020-05-30 08:34:17.000" -"Snow Moto Racing Freedom - 010045300516E000","010045300516E000","gpu;status-ingame;vulkan-backend-bug","ingame","2022-08-15 16:05:14.000" -"Snake Pass - 0100C0F0020E8000","0100C0F0020E8000","status-playable;nvdec;UE4","playable","2022-01-03 04:31:52.000" -"Shu","","nvdec;status-playable","playable","2020-05-30 09:08:59.000" -"SOLDAM Drop, Connect, Erase","","status-playable","playable","2020-05-30 09:18:54.000" -"SkyTime","","slow;status-ingame","ingame","2020-05-30 09:24:51.000" -"NBA 2K19 - 01001FF00B544000","01001FF00B544000","crash;ldn-untested;services;status-nothing","nothing","2021-04-16 13:07:21.000" -"Shred!2 - Freeride MTB","","status-playable","playable","2020-05-30 14:34:09.000" -"Skelly Selest","","status-playable","playable","2020-05-30 15:38:18.000" -"Snipperclips Plus - 01008E20047DC000","01008E20047DC000","status-playable","playable","2023-02-14 20:20:13.000" -"SolDivide for Nintendo Switch - 0100590009C38000","0100590009C38000","32-bit;status-playable","playable","2021-06-09 14:13:03.000" -"Slime-san","","status-playable","playable","2020-05-30 16:15:12.000" -"Skies of Fury","","status-playable","playable","2020-05-30 16:40:54.000" -"SlabWell - 01003AD00DEAE000","01003AD00DEAE000","status-playable","playable","2021-02-22 17:02:51.000" -"Smoke and Sacrifice - 0100207007EB2000","0100207007EB2000","status-playable","playable","2022-08-14 12:38:27.000" -"Sky Gamblers - Afterburner - 010003F00CC98000","010003F00CC98000","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-12 21:04:55.000" -"Slice Dice & Rice - 0100F4500AA4E000","0100F4500AA4E000","online;status-playable","playable","2021-02-22 17:44:23.000" -"Slayaway Camp: Butcher's Cut - 0100501006494000","0100501006494000","status-playable;opengl-backend-bug","playable","2022-08-12 23:44:05.000" -"Snowboarding the Next Phase - 0100BE200C34A000","0100BE200C34A000","nvdec;status-playable","playable","2021-02-23 12:56:58.000" -"Skylanders Imaginators","","crash;services;status-boots","boots","2020-05-30 18:49:18.000" -"Slime-san Superslime Edition","","status-playable","playable","2020-05-30 19:08:08.000" -"Skee-Ball","","status-playable","playable","2020-11-16 04:44:07.000" -"Marvel Ultimate Alliance 3: The Black Order - 010060700AC50000","010060700AC50000","status-playable;nvdec;ldn-untested","playable","2024-02-14 19:51:51.000" -"The Elder Scrolls V: Skyrim - 01000A10041EA000","01000A10041EA000","gpu;status-ingame;crash","ingame","2024-07-14 03:21:31.000" -"Risk of Rain","","","","2020-05-31 22:32:45.000" -"Risk of Rain 2 - 010076D00E4BA000","010076D00E4BA000","status-playable;online-broken","playable","2024-03-04 17:01:05.000" -"The Mummy Demastered - 0100496004194000","0100496004194000","status-playable","playable","2021-02-23 13:11:27.000" -"Teslagrad - 01005C8005F34000","01005C8005F34000","status-playable","playable","2021-02-23 14:41:02.000" -"Pushy and Pully in Blockland","","status-playable","playable","2020-07-04 11:44:41.000" -"The Raven Remastered - 010058A00BF1C000","010058A00BF1C000","status-playable;nvdec","playable","2022-08-22 20:02:47.000" -"Reed Remastered","","","","2020-05-31 23:15:15.000" -"The Infectious Madness of Doctor Dekker - 01008940086E0000","01008940086E0000","status-playable;nvdec","playable","2022-08-22 16:45:01.000" -"The Fall","","gpu;status-ingame","ingame","2020-05-31 23:31:16.000" -"The Fall Part 2: Unbound","","status-playable","playable","2021-11-06 02:18:08.000" -"The Red Strings Club","","status-playable","playable","2020-06-01 10:51:18.000" -"Omega Labyrinth Life - 01001D600E51A000","01001D600E51A000","status-playable","playable","2021-02-23 21:03:03.000" -"The Mystery of the Hudson Case","","status-playable","playable","2020-06-01 11:03:36.000" -"Tennis World Tour - 0100092006814000","0100092006814000","status-playable;online-broken","playable","2022-08-22 14:27:10.000" -"The Lost Child - 01008A000A404000","01008A000A404000","nvdec;status-playable","playable","2021-02-23 15:44:20.000" -"Little Misfortune - 0100E7000E826000","0100E7000E826000","nvdec;status-playable","playable","2021-02-23 20:39:44.000" -"The End is Nigh","","status-playable","playable","2020-06-01 11:26:45.000" -"The Caligula Effect: Overdose","","UE4;gpu;status-ingame","ingame","2021-01-04 11:07:50.000" -"The Flame in the Flood: Complete Edition - 0100C38004DCC000","0100C38004DCC000","gpu;status-ingame;nvdec;UE4","ingame","2022-08-22 16:23:49.000" -"The Journey Down: Chapter One - 010052C00B184000","010052C00B184000","nvdec;status-playable","playable","2021-02-24 13:32:41.000" -"The Journey Down: Chapter Two","","nvdec;status-playable","playable","2021-02-24 13:32:13.000" -"The Journey Down: Chapter Three - 01006BC00B188000","01006BC00B188000","nvdec;status-playable","playable","2021-02-24 13:45:27.000" -"The Mooseman - 010033300AC1A000","010033300AC1A000","status-playable","playable","2021-02-24 12:58:57.000" -"The Long Reach - 010052B003A38000","010052B003A38000","nvdec;status-playable","playable","2021-02-24 14:09:48.000" -"Asdivine Kamura","","","","2020-06-01 15:04:50.000" -"THE LAST REMNANT Remastered - 0100AC800D022000","0100AC800D022000","status-playable;nvdec;UE4","playable","2023-02-09 17:24:44.000" -"The Princess Guide - 0100E6A00B960000","0100E6A00B960000","status-playable","playable","2021-02-24 14:23:34.000" -"The LEGO NINJAGO Movie Video Game - 01007FC00206E000","01007FC00206E000","status-nothing;crash","nothing","2022-08-22 19:12:53.000" -"The Next Penelope - 01000CF0084BC000","01000CF0084BC000","status-playable","playable","2021-01-29 16:26:11.000" -"Tennis","","status-playable","playable","2020-06-01 20:50:36.000" -"The King's Bird - 010020500BD98000","010020500BD98000","status-playable","playable","2022-08-22 19:07:46.000" -"The First Tree - 010098800A1E4000","010098800A1E4000","status-playable","playable","2021-02-24 15:51:05.000" -"The Jackbox Party Pack - 0100AE5003EE6000","0100AE5003EE6000","status-playable;online-working","playable","2023-05-28 09:28:40.000" -"The Jackbox Party Pack 2 - 010015D003EE4000","010015D003EE4000","status-playable;online-working","playable","2022-08-22 18:23:40.000" -"The Jackbox Party Pack 3 - 0100CC80013D6000","0100CC80013D6000","slow;status-playable;online-working","playable","2022-08-22 18:41:06.000" -"The Jackbox Party Pack 4 - 0100E1F003EE8000","0100E1F003EE8000","status-playable;online-working","playable","2022-08-22 18:56:34.000" -"The LEGO Movie 2 - Videogame - 0100A4400BE74000","0100A4400BE74000","status-playable","playable","2023-03-01 11:23:37.000" -"The Gardens Between - 0100B13007A6A000","0100B13007A6A000","status-playable","playable","2021-01-29 16:16:53.000" -"The Bug Butcher","","status-playable","playable","2020-06-03 12:02:04.000" -"Funghi Puzzle Funghi Explosion","","status-playable","playable","2020-11-23 14:17:41.000" -"The Escapists: Complete Edition - 01001B700BA7C000","01001B700BA7C000","status-playable","playable","2021-02-24 17:50:31.000" -"The Escapists 2","","nvdec;status-playable","playable","2020-09-24 12:31:31.000" -"TENGAI for Nintendo Switch","","32-bit;status-playable","playable","2020-11-25 19:52:26.000" -"The Book of Unwritten Tales 2 - 010062500BFC0000","010062500BFC0000","status-playable","playable","2021-06-09 14:42:53.000" -"The Bridge","","status-playable","playable","2020-06-03 13:53:26.000" -"Ai: the Somnium Files - 010089B00D09C000","010089B00D09C000","status-playable;nvdec","playable","2022-09-04 14:45:06.000" -"The Coma: Recut","","status-playable","playable","2020-06-03 15:11:23.000" -"Ara Fell: Enhanced Edition","","","","2020-06-03 15:11:30.000" -"The Final Station - 0100CDC00789E000","0100CDC00789E000","status-playable;nvdec","playable","2022-08-22 15:54:39.000" -"The Count Lucanor - 01000850037C0000","01000850037C0000","status-playable;nvdec","playable","2022-08-22 15:26:37.000" -"Testra's Escape","","status-playable","playable","2020-06-03 18:21:14.000" -"The Low Road - 0100BAB00A116000","0100BAB00A116000","status-playable","playable","2021-02-26 13:23:22.000" -"The Adventure Pals - 01008ED0087A4000","01008ED0087A4000","status-playable","playable","2022-08-22 14:48:52.000" -"The Longest Five Minutes - 0100CE1004E72000","0100CE1004E72000","gpu;status-boots","boots","2023-02-19 18:33:11.000" -"The Inner World","","nvdec;status-playable","playable","2020-06-03 21:22:29.000" -"The Inner World - The Last Wind Monk","","nvdec;status-playable","playable","2020-11-16 13:09:40.000" -"The MISSING: J.J. Macfield and the Island of Memories - 0100F1B00B456000","0100F1B00B456000","status-playable","playable","2022-08-22 19:36:18.000" -"Jim Is Moving Out!","","deadlock;status-ingame","ingame","2020-06-03 22:05:19.000" -"The Darkside Detective","","status-playable","playable","2020-06-03 22:16:18.000" -"Tesla vs Lovecraft - 0100FBC007EAE000","0100FBC007EAE000","status-playable","playable","2023-11-21 06:19:36.000" -"The Lion's Song - 0100735004898000","0100735004898000","status-playable","playable","2021-06-09 15:07:16.000" -"Tennis in the Face - 01002970080AA000","01002970080AA000","status-playable","playable","2022-08-22 14:10:54.000" -"The Adventures of Elena Temple","","status-playable","playable","2020-06-03 23:15:35.000" -"The friends of Ringo Ishikawa - 010030700CBBC000","010030700CBBC000","status-playable","playable","2022-08-22 16:33:17.000" -"Redeemer: Enhanced Edition - 01000D100DCF8000","01000D100DCF8000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-09-11 10:20:24.000" -"Alien Escape","","status-playable","playable","2020-06-03 23:43:18.000" -"LEGO DC Super-Villains - 010070D009FEC000","010070D009FEC000","status-playable","playable","2021-05-27 18:10:37.000" -"LEGO Worlds","","crash;slow;status-ingame","ingame","2020-07-17 13:35:39.000" -"LEGO The Incredibles - 0100A01006E00000","0100A01006E00000","status-nothing;crash","nothing","2022-08-03 18:36:59.000" -"LEGO Harry Potter Collection - 010052A00B5D2000","010052A00B5D2000","status-ingame;crash","ingame","2024-01-31 10:28:07.000" -"Reed 2","","","","2020-06-04 16:43:29.000" -"The Men of Yoshiwara: Ohgiya","","","","2020-06-04 17:00:22.000" -"The Rainsdowne Players","","","","2020-06-04 17:16:02.000" -"Tonight we Riot - 0100D400100F8000","0100D400100F8000","status-playable","playable","2021-02-26 15:55:09.000" -"Skelattack - 01001A900F862000","01001A900F862000","status-playable","playable","2021-06-09 15:26:26.000" -"HyperParasite - 010061400ED90000","010061400ED90000","status-playable;nvdec;UE4","playable","2022-09-27 22:05:44.000" -"Climbros","","","","2020-06-04 21:02:21.000" -"Sweet Witches - 0100D6D00EC2C000","0100D6D00EC2C000","status-playable;nvdec","playable","2022-10-20 14:56:37.000" -"Whispering Willows - 010015A00AF1E000","010015A00AF1E000","status-playable;nvdec","playable","2022-09-30 22:33:05.000" -"The Outer Worlds - 0100626011656000","0100626011656000","gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-10-03 17:55:32.000" -"RADIO HAMMER STATION - 01008FA00ACEC000","01008FA00ACEC000","audout;status-playable","playable","2021-02-26 20:20:06.000" -"Light Tracer - 010087700D07C000","010087700D07C000","nvdec;status-playable","playable","2021-05-05 19:15:43.000" -"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE - 0100D4300EBF8000","0100D4300EBF8000","status-nothing;crash;Needs More Attention;Needs Update","nothing","2022-02-09 08:57:44.000" -"The Amazing Shinsengumi: Heroes in Love","","","","2020-06-06 09:27:49.000" -"Snow Battle Princess Sayuki","","","","2020-06-06 11:59:03.000" -"Good Job!","","status-playable","playable","2021-03-02 13:15:55.000" -"Ghost Blade HD - 010063200C588000","010063200C588000","status-playable;online-broken","playable","2022-09-13 21:51:21.000" -"HardCube - 01000C90117FA000","01000C90117FA000","status-playable","playable","2021-05-05 18:33:03.000" -"STAR OCEAN First Departure R - 0100EBF00E702000","0100EBF00E702000","nvdec;status-playable","playable","2021-07-05 19:29:16.000" -"Hair Mower 3D","","","","2020-06-08 02:29:17.000" -"Clubhouse Games: 51 Worldwide Classics - 010047700D540000","010047700D540000","status-playable;ldn-works","playable","2024-05-21 16:12:57.000" -"Torchlight 2","","status-playable","playable","2020-07-27 14:18:37.000" -"Creature in the Well","","UE4;gpu;status-ingame","ingame","2020-11-16 12:52:40.000" -"Panty Party","","","","2020-06-08 14:06:02.000" -"DEADLY PREMONITION Origins - 0100EBE00F22E000","0100EBE00F22E000","32-bit;status-playable;nvdec","playable","2024-03-25 12:47:46.000" -"Pillars of Eternity - 0100D6200E130000","0100D6200E130000","status-playable","playable","2021-02-27 00:24:21.000" -"Jump King","","status-playable","playable","2020-06-09 10:12:39.000" -"Bug Fables","","status-playable","playable","2020-06-09 11:27:00.000" -"DOOM 3 - 010029D00E740000","010029D00E740000","status-menus;crash","menus","2024-08-03 05:25:47.000" -"Raiden V: Director's Cut - 01002B000D97E000","01002B000D97E000","deadlock;status-boots;nvdec","boots","2024-07-12 07:31:46.000" -"Fantasy Strike - 0100944003820000","0100944003820000","online;status-playable","playable","2021-02-27 01:59:18.000" -"Hell Warders - 0100A4600E27A000","0100A4600E27A000","online;status-playable","playable","2021-02-27 02:31:03.000" -"THE NINJA SAVIORS Return of the Warriors - 01001FB00E386000","01001FB00E386000","online;status-playable","playable","2021-03-25 23:48:07.000" -"DOOM (1993) - 010018900DD00000","010018900DD00000","status-menus;nvdec;online-broken","menus","2022-09-06 13:32:19.000" -"DOOM 2 - 0100D4F00DD02000","0100D4F00DD02000","nvdec;online;status-playable","playable","2021-06-03 20:10:01.000" -"Songbird Symphony - 0100E5400BF94000","0100E5400BF94000","status-playable","playable","2021-02-27 02:44:04.000" -"Titans Pinball","","slow;status-playable","playable","2020-06-09 16:53:52.000" -"TERRORHYTHM (TRRT) - 010043700EB68000","010043700EB68000","status-playable","playable","2021-02-27 13:18:14.000" -"Pawarumi - 0100A56006CEE000","0100A56006CEE000","status-playable;online-broken","playable","2022-09-10 15:19:33.000" -"Rise: Race the Future - 01006BA00E652000","01006BA00E652000","status-playable","playable","2021-02-27 13:29:06.000" -"Run the Fan - 010074F00DE4A000","010074F00DE4A000","status-playable","playable","2021-02-27 13:36:28.000" -"Tetsumo Party","","status-playable","playable","2020-06-09 22:39:55.000" -"Snipperclips - 0100704000B3A000","0100704000B3A000","status-playable","playable","2022-12-05 12:44:55.000" -"The Tower of Beatrice - 010047300EBA6000","010047300EBA6000","status-playable","playable","2022-09-12 16:51:42.000" -"FIA European Truck Racing Championship - 01007510040E8000","01007510040E8000","status-playable;nvdec","playable","2022-09-06 17:51:59.000" -"Bear With Me - The Lost Robots - 010020700DE04000","010020700DE04000","nvdec;status-playable","playable","2021-02-27 14:20:10.000" -"Mutant Year Zero: Road to Eden - 0100E6B00DEA4000","0100E6B00DEA4000","status-playable;nvdec;UE4","playable","2022-09-10 13:31:10.000" -"Solo: Islands of the Heart - 010008600D1AC000","010008600D1AC000","gpu;status-ingame;nvdec","ingame","2022-09-11 17:54:43.000" -"1971 PROJECT HELIOS - 0100829010F4A000","0100829010F4A000","status-playable","playable","2021-04-14 13:50:19.000" -"Damsel - 0100BD2009A1C000","0100BD2009A1C000","status-playable","playable","2022-09-06 11:54:39.000" -"The Forbidden Arts - 01007700D4AC000","","status-playable","playable","2021-01-26 16:26:24.000" -"Turok 2: Seeds of Evil - 0100CDC00D8D6000","0100CDC00D8D6000","gpu;status-ingame;vulkan","ingame","2022-09-12 17:50:05.000" -"Tactics V: ""Obsidian Brigade"" - 01007C7006AEE000","01007C7006AEE000","status-playable","playable","2021-02-28 15:09:42.000" -"SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION - 01005DF00DC26000","01005DF00DC26000","UE4;gpu;online;status-ingame","ingame","2021-06-09 16:58:50.000" -"Subdivision Infinity DX - 010001400E474000","010001400E474000","UE4;crash;status-boots","boots","2021-03-03 14:26:46.000" -"#RaceDieRun","","status-playable","playable","2020-07-04 20:23:16.000" -"Wreckin' Ball Adventure - 0100C5D00EDB8000","0100C5D00EDB8000","status-playable;UE4","playable","2022-09-12 18:56:28.000" -"PictoQuest - 010043B00E1CE000","010043B00E1CE000","status-playable","playable","2021-02-27 15:03:16.000" -"VASARA Collection - 0100FE200AF48000","0100FE200AF48000","nvdec;status-playable","playable","2021-02-28 15:26:10.000" -"The Vanishing of Ethan Carter - 0100BCF00E970000","0100BCF00E970000","UE4;status-playable","playable","2021-06-09 17:14:47.000" -"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo - 010068300E08E000","010068300E08E000","gpu;status-ingame;nvdec","ingame","2022-11-20 16:18:45.000" -"Demon's Tier+ - 0100161011458000","0100161011458000","status-playable","playable","2021-06-09 17:25:36.000" -"INSTANT SPORTS - 010099700D750000","010099700D750000","status-playable","playable","2022-09-09 12:59:40.000" -"Friday the 13th: The Game - 010092A00C4B6000","010092A00C4B6000","status-playable;nvdec;online-broken;UE4","playable","2022-09-06 17:33:27.000" -"Arcade Archives VS. GRADIUS - 01004EC00E634000","01004EC00E634000","online;status-playable","playable","2021-04-12 14:53:58.000" -"Desktop Rugby","","","","2020-06-10 23:21:11.000" -"Divinity Original Sin 2 - 010027400CDC6000","010027400CDC6000","services;status-menus;crash;online-broken;regression","menus","2023-08-13 17:20:03.000" -"Grandia HD Collection - 0100E0600BBC8000","0100E0600BBC8000","status-boots;crash","boots","2024-08-19 04:29:48.000" -"Bubsy: Paws on Fire! - 0100DBE00C554000","0100DBE00C554000","slow;status-ingame","ingame","2023-08-24 02:44:51.000" -"River City Girls","","nvdec;status-playable","playable","2020-06-10 23:44:09.000" -"Super Dodgeball Beats","","","","2020-06-10 23:45:22.000" -"RAD - 010024400C516000","010024400C516000","gpu;status-menus;crash;UE4","menus","2021-11-29 02:01:56.000" -"Super Jumpy Ball","","status-playable","playable","2020-07-04 18:40:36.000" -"Headliner: NoviNews - 0100EFE00E1DC000","0100EFE00E1DC000","online;status-playable","playable","2021-03-01 11:36:00.000" -"Atelier Ryza: Ever Darkness & the Secret Hideout - 0100D1900EC80000","0100D1900EC80000","status-playable","playable","2023-10-15 16:36:50.000" -"Ancestors Legacy - 01009EE0111CC000","01009EE0111CC000","status-playable;nvdec;UE4","playable","2022-10-01 12:25:36.000" -"Resolutiion - 0100E7F00FFB8000","0100E7F00FFB8000","crash;status-boots","boots","2021-04-25 21:57:56.000" -"Puzzle Quest: The Legend Returns","","","","2020-06-11 10:05:15.000" -"FAR: Lone Sails - 010022700E7D6000","010022700E7D6000","status-playable","playable","2022-09-06 16:33:05.000" -"Awesome Pea 2 - 0100B7D01147E000","0100B7D01147E000","status-playable","playable","2022-10-01 12:34:19.000" -"Arcade Archives PLUS ALPHA","","audio;status-ingame","ingame","2020-07-04 20:47:55.000" -"Caveblazers - 01001A100C0E8000","01001A100C0E8000","slow;status-ingame","ingame","2021-06-09 17:57:28.000" -"Piofiore no banshou - ricordo","","","","2020-06-11 19:14:52.000" -"Raining Blobs","","","","2020-06-11 19:32:04.000" -"Hyper Jam","","UE4;crash;status-boots","boots","2020-12-15 22:52:11.000" -"The Midnight Sanctuary - 0100DEC00B2BC000","0100DEC00B2BC000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-03 17:17:32.000" -"Indiecalypse","","nvdec;status-playable","playable","2020-06-11 20:19:09.000" -"Liberated - 0100C8000F146000","0100C8000F146000","gpu;status-ingame;nvdec","ingame","2024-07-04 04:58:24.000" -"Nelly Cootalot","","status-playable","playable","2020-06-11 20:55:42.000" -"Corpse Party: Blood Drive - 010016400B1FE000","010016400B1FE000","nvdec;status-playable","playable","2021-03-01 12:44:23.000" -"Professor Lupo and his Horrible Pets","","status-playable","playable","2020-06-12 00:08:45.000" -"Atelier Meruru ~ The Apprentice of Arland ~ DX","","nvdec;status-playable","playable","2020-06-12 00:50:48.000" -"Atelier Totori ~ The Adventurer of Arland ~ DX","","nvdec;status-playable","playable","2020-06-12 01:04:56.000" -"Red Wings - Aces of the Sky","","status-playable","playable","2020-06-12 01:19:53.000" -"L.F.O. - Lost Future Omega - ","","UE4;deadlock;status-boots","boots","2020-10-16 12:16:44.000" -"One Night Stand","","","","2020-06-12 16:34:34.000" -"They Came From the Sky","","status-playable","playable","2020-06-12 16:38:19.000" -"Nurse Love Addiction","","","","2020-06-12 16:48:29.000" -"THE TAKEOVER","","nvdec","","2020-06-12 16:52:28.000" -"Totally Reliable Delivery Service - 0100512010728000","0100512010728000","status-playable;online-broken","playable","2024-09-27 19:32:22.000" -"Nurse Love Syndrome - 010003701002C000","010003701002C000","status-playable","playable","2022-10-13 10:05:22.000" -"Undead and Beyond - 010076F011F54000","010076F011F54000","status-playable;nvdec","playable","2022-10-04 09:11:18.000" -"Borderlands: Game of the Year Edition - 010064800F66A000","010064800F66A000","slow;status-ingame;online-broken;ldn-untested","ingame","2023-07-23 21:10:36.000" -"TurtlePop: Journey to Freedom","","status-playable","playable","2020-06-12 17:45:39.000" -"DAEMON X MACHINA - 0100B6400CA56000","0100B6400CA56000","UE4;audout;ldn-untested;nvdec;status-playable","playable","2021-06-09 19:22:29.000" -"Blasphemous - 0100698009C6E000","0100698009C6E000","nvdec;status-playable","playable","2021-03-01 12:15:31.000" -"The Sinking City - 010028D00BA1A000","010028D00BA1A000","status-playable;nvdec;UE4","playable","2022-09-12 16:41:55.000" -"Battle Supremacy - Evolution - 010099B00E898000","010099B00E898000","gpu;status-boots;nvdec","boots","2022-02-17 09:02:50.000" -"STEINS;GATE: My Darling's Embrace - 0100CB400E9BC000","0100CB400E9BC000","status-playable;nvdec","playable","2022-11-20 16:48:34.000" -"Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition - 01006C300E9F0000","01006C300E9F0000","status-playable;UE4","playable","2021-11-27 12:27:11.000" -"Star Wars™ Pinball - 01006DA00DEAC000","01006DA00DEAC000","status-playable;online-broken","playable","2022-09-11 18:53:31.000" -"Space Cows","","UE4;crash;status-menus","menus","2020-06-15 11:33:20.000" -"Ritual - 0100BD300F0EC000","0100BD300F0EC000","status-playable","playable","2021-03-02 13:51:19.000" -"Snooker 19 - 01008DA00CBBA000","01008DA00CBBA000","status-playable;nvdec;online-broken;UE4","playable","2022-09-11 17:43:22.000" -"Sydney Hunter and the Curse of the Mayan","","status-playable","playable","2020-06-15 12:15:57.000" -"CONTRA: ROGUE CORPS","","crash;nvdec;regression;status-menus","menus","2021-01-07 13:23:35.000" -"Tyd wag vir Niemand - 010073A00C4B2000","010073A00C4B2000","status-playable","playable","2021-03-02 13:39:53.000" -"Detective Dolittle - 010030600E65A000","010030600E65A000","status-playable","playable","2021-03-02 14:03:59.000" -"Rebel Cops - 0100D9B00E22C000","0100D9B00E22C000","status-playable","playable","2022-09-11 10:02:53.000" -"Sayonara Wild Hearts - 010010A00A95E000","010010A00A95E000","status-playable","playable","2023-10-23 03:20:01.000" -"Neon Drive - 010032000EAC6000","010032000EAC6000","status-playable","playable","2022-09-10 13:45:48.000" -"GRID Autosport - 0100DC800A602000","0100DC800A602000","status-playable;nvdec;online-broken;ldn-untested","playable","2023-03-02 20:14:45.000" -"DISTRAINT: Deluxe Edition","","status-playable","playable","2020-06-15 23:42:24.000" -"Jet Kave Adventure - 0100E4900D266000","0100E4900D266000","status-playable;nvdec","playable","2022-09-09 14:50:39.000" -"LEGO Jurassic World - 01001C100E772000","01001C100E772000","status-playable","playable","2021-05-27 17:00:20.000" -"Neo Cab Demo","","crash;status-boots","boots","2020-06-16 00:14:00.000" -"Reel Fishing: Road Trip Adventure - 010007C00E558000","010007C00E558000","status-playable","playable","2021-03-02 16:06:43.000" -"Zombie Army Trilogy","","ldn-untested;online;status-playable","playable","2020-12-16 12:02:28.000" -"Project Warlock","","status-playable","playable","2020-06-16 10:50:41.000" -"Super Toy Cars 2 - 0100C6800D770000","0100C6800D770000","gpu;regression;status-ingame","ingame","2021-03-02 20:15:15.000" -"Call of Cthulhu - 010046000EE40000","010046000EE40000","status-playable;nvdec;UE4","playable","2022-12-18 03:08:30.000" -"Overpass - 01008EA00E816000","01008EA00E816000","status-playable;online-broken;UE4;ldn-untested","playable","2022-10-17 15:29:47.000" -"The Little Acre - 0100A5000D590000","0100A5000D590000","nvdec;status-playable","playable","2021-03-02 20:22:27.000" -"Lost Horizon 2","","nvdec;status-playable","playable","2020-06-16 12:02:12.000" -"Rogue Robots","","status-playable","playable","2020-06-16 12:16:11.000" -"Skelittle: A Giant Party!! - 01008E700F952000","01008E700F952000","status-playable","playable","2021-06-09 19:08:34.000" -"Magazine Mogul - 01004A200E722000","01004A200E722000","status-playable;loader-allocator","playable","2022-10-03 12:05:34.000" -"Dead by Daylight - 01004C400CF96000","01004C400CF96000","status-boots;nvdec;online-broken;UE4","boots","2022-09-13 14:32:13.000" -"Ori and the Blind Forest: Definitive Edition - 010061D00DB74000","010061D00DB74000","status-playable;nvdec;online-broken","playable","2022-09-14 19:58:13.000" -"Northgard - 0100A9E00D97A000","0100A9E00D97A000","status-menus;crash","menus","2022-02-06 02:05:35.000" -"Freedom Finger - 010082B00EE50000","010082B00EE50000","nvdec;status-playable","playable","2021-06-09 19:31:30.000" -"Atelier Shallie: Alchemists of the Dusk Sea DX","","nvdec;status-playable","playable","2020-11-25 20:54:12.000" -"Dragon Quest - 0100EFC00EFB2000","0100EFC00EFB2000","gpu;status-boots","boots","2021-11-09 03:31:32.000" -"Dragon Quest II: Luminaries of the Legendary Line - 010062200EFB4000","010062200EFB4000","status-playable","playable","2022-09-13 16:44:11.000" -"Atelier Ayesha: The Alchemist of Dusk DX - 0100D9D00EE8C000","0100D9D00EE8C000","status-menus;crash;nvdec;Needs Update","menus","2021-11-24 07:29:54.000" -"Dragon Quest III: The Seeds of Salvation - 010015600EFB6000","010015600EFB6000","gpu;status-boots","boots","2021-11-09 03:38:34.000" -"Habroxia","","status-playable","playable","2020-06-16 23:04:42.000" -"Petoons Party - 010044400EEAE000","010044400EEAE000","nvdec;status-playable","playable","2021-03-02 21:07:58.000" -"Fight'N Rage","","status-playable","playable","2020-06-16 23:35:19.000" -"Cyber Protocol","","nvdec;status-playable","playable","2020-09-28 14:47:40.000" -"Barry Bradford's Putt Panic Party","","nvdec;status-playable","playable","2020-06-17 01:08:34.000" -"Potata: Fairy Flower","","nvdec;status-playable","playable","2020-06-17 09:51:34.000" -"Kawaii Deathu Desu","","","","2020-06-17 09:59:15.000" -"The Spectrum Retreat - 010041C00A68C000","010041C00A68C000","status-playable","playable","2022-10-03 18:52:40.000" -"Moero Crystal H - 01004EB0119AC000","01004EB0119AC000","32-bit;status-playable;nvdec;vulkan-backend-bug","playable","2023-07-05 12:04:22.000" -"Modern Combat Blackout - 0100D8700B712000","0100D8700B712000","crash;status-nothing","nothing","2021-03-29 19:47:15.000" -"Forager - 01001D200BCC4000","01001D200BCC4000","status-menus;crash","menus","2021-11-24 07:10:17.000" -"Ultimate Ski Jumping 2020 - 01006B601117E000","01006B601117E000","online;status-playable","playable","2021-03-02 20:54:11.000" -"Strangers of the Power 3","","","","2020-06-17 14:45:52.000" -"Little Triangle","","status-playable","playable","2020-06-17 14:46:26.000" -"Nice Slice","","nvdec;status-playable","playable","2020-06-17 15:13:27.000" -"Project Starship","","","","2020-06-17 15:33:18.000" -"Puyo Puyo Champions","","online;status-playable","playable","2020-06-19 11:35:08.000" -"Shantae and the Seven Sirens","","nvdec;status-playable","playable","2020-06-19 12:23:40.000" -"SYNAPTIC DRIVE","","online;status-playable","playable","2020-09-07 13:44:05.000" -"XCOM 2 Collection - 0100D0B00FB74000","0100D0B00FB74000","gpu;status-ingame;crash","ingame","2022-10-04 09:38:30.000" -"BioShock Remastered - 0100AD10102B2000","0100AD10102B2000","services-horizon;status-boots;crash;Needs Update","boots","2024-06-06 01:08:52.000" -"Burnout Paradise Remastered - 0100DBF01000A000","0100DBF01000A000","nvdec;online;status-playable","playable","2021-06-13 02:54:46.000" -"Adam's Venture: Origins - 0100C0C0040E4000","0100C0C0040E4000","status-playable","playable","2021-03-04 18:43:57.000" -"Invisible, Inc.","","crash;status-nothing","nothing","2021-01-29 16:28:13.000" -"Vektor Wars - 010098400E39E000","010098400E39E000","status-playable;online-broken;vulkan-backend-bug","playable","2022-10-04 09:23:46.000" -"Flux8","","nvdec;status-playable","playable","2020-06-19 20:55:11.000" -"Beyond Enemy Lines: Covert Operations - 010056500CAD8000","010056500CAD8000","status-playable;UE4","playable","2022-10-01 13:11:50.000" -"Genetic Disaster","","status-playable","playable","2020-06-19 21:41:12.000" -"Castle Pals - 0100DA2011F18000","0100DA2011F18000","status-playable","playable","2021-03-04 21:00:33.000" -"BioShock 2 Remastered - 01002620102C6000","01002620102C6000","services;status-nothing","nothing","2022-10-29 14:39:22.000" -"BioShock Infinite: The Complete Edition - 0100D560102C8000","0100D560102C8000","services-horizon;status-nothing;crash","nothing","2024-08-11 21:35:01.000" -"Borderlands 2: Game of the Year Edition - 010096F00FF22000","010096F00FF22000","status-playable","playable","2022-04-22 18:35:07.000" -"Borderlands: The Pre-Sequel Ultimate Edition - 010007400FF24000","010007400FF24000","nvdec;status-playable","playable","2021-06-09 20:17:10.000" -"The Coma 2: Vicious Sisters","","gpu;status-ingame","ingame","2020-06-20 12:51:51.000" -"Roll'd","","status-playable","playable","2020-07-04 20:24:01.000" -"Big Drunk Satanic Massacre - 01002FA00DE72000","01002FA00DE72000","status-playable","playable","2021-03-04 21:28:22.000" -"LUXAR - 0100EC2011A80000","0100EC2011A80000","status-playable","playable","2021-03-04 21:11:57.000" -"OneWayTicket","","UE4;status-playable","playable","2020-06-20 17:20:49.000" -"Radiation City - 0100DA400E07E000","0100DA400E07E000","status-ingame;crash","ingame","2022-09-30 11:15:04.000" -"Arcade Spirits","","status-playable","playable","2020-06-21 11:45:03.000" -"Bring Them Home - 01000BF00BE40000","01000BF00BE40000","UE4;status-playable","playable","2021-04-12 14:14:43.000" -"Fly Punch Boom!","","online;status-playable","playable","2020-06-21 12:06:11.000" -"Xenoblade Chronicles Definitive Edition - 0100FF500E34A000","0100FF500E34A000","status-playable;nvdec","playable","2024-05-04 20:12:41.000" -"A Winter's Daydream","","","","2020-06-22 14:52:38.000" -"DEAD OR SCHOOL - 0100A5000F7AA000","0100A5000F7AA000","status-playable;nvdec","playable","2022-09-06 12:04:09.000" -"Biolab Wars","","","","2020-06-22 15:50:34.000" -"Worldend Syndrome","","status-playable","playable","2021-01-03 14:16:32.000" -"The Tiny Bang Story - 01009B300D76A000","01009B300D76A000","status-playable","playable","2021-03-05 15:39:05.000" -"Neo Cab - 0100EBB00D2F4000","0100EBB00D2F4000","status-playable","playable","2021-04-24 00:27:58.000" -"Sniper Elite 3 Ultimate Edition - 010075A00BA14000","010075A00BA14000","status-playable;ldn-untested","playable","2024-04-18 07:47:49.000" -"Boku to Nurse no Kenshuu Nisshi - 010093700ECEC000","010093700ECEC000","status-playable","playable","2022-11-21 20:38:34.000" -"80 Days","","status-playable","playable","2020-06-22 21:43:01.000" -"Mirror","","","","2020-06-22 21:46:55.000" -"SELFY COLLECTION Dream Stylist","","","","2020-06-22 22:15:25.000" -"G-MODE Archives 4 Beach Volleyball Girl Drop","","","","2020-06-22 22:36:36.000" -"Star Horizon","","","","2020-06-22 23:03:45.000" -"To the Moon","","status-playable","playable","2021-03-20 15:33:38.000" -"Darksiders II Deathinitive Edition - 010071800BA98000","010071800BA98000","gpu;status-ingame;nvdec;online-broken","ingame","2024-06-26 00:37:25.000" -"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated - 010062800D39C000","010062800D39C000","status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug","playable","2023-08-01 19:29:34.000" -"Sleep Tight - 01004AC0081DC000","01004AC0081DC000","gpu;status-ingame;UE4","ingame","2022-08-13 00:17:32.000" -"SUPER ROBOT WARS V","","online;status-playable","playable","2020-06-23 12:56:37.000" -"Ghostbusters: The Video Game Remastered - 010008A00F632000","010008A00F632000","status-playable;nvdec","playable","2021-09-17 07:26:57.000" -"FIFA 20 Legacy Edition - 01005DE00D05C000","01005DE00D05C000","gpu;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-09-13 17:57:20.000" -"VARIABLE BARRICADE NS - 010045C0109F2000","010045C0109F2000","status-playable;nvdec","playable","2022-02-26 15:50:13.000" -"Super Cane Magic ZERO - 0100D9B00DB5E000","0100D9B00DB5E000","status-playable","playable","2022-09-12 15:33:46.000" -"Whipsey and the Lost Atlas","","status-playable","playable","2020-06-23 20:24:14.000" -"FUZE4 - 0100EAD007E98000","0100EAD007E98000","status-playable;vulkan-backend-bug","playable","2022-09-06 19:25:01.000" -"Legend of the Skyfish","","status-playable","playable","2020-06-24 13:04:22.000" -"Grand Brix Shooter","","slow;status-playable","playable","2020-06-24 13:23:54.000" -"Pokémon Café Mix - 010072400E04A000","010072400E04A000","status-playable","playable","2021-08-17 20:00:04.000" -"BULLETSTORM: DUKE OF SWITCH EDITION - 01003DD00D658000","01003DD00D658000","status-playable;nvdec","playable","2022-03-03 08:30:24.000" -"Brunch Club","","status-playable","playable","2020-06-24 13:54:07.000" -"Invisigun Reloaded - 01005F400E644000","01005F400E644000","gpu;online;status-ingame","ingame","2021-06-10 12:13:24.000" -"AER - Memories of Old - 0100A0400DDE0000","0100A0400DDE0000","nvdec;status-playable","playable","2021-03-05 18:43:43.000" -"Farm Mystery - 01000E400ED98000","01000E400ED98000","status-playable;nvdec","playable","2022-09-06 16:46:47.000" -"Ninjala - 0100CCD0073EA000","0100CCD0073EA000","status-boots;online-broken;UE4","boots","2024-07-03 20:04:49.000" -"Shojo Jigoku no Doku musume","","","","2020-06-25 11:25:12.000" -"Jump Rope Challenge - 0100B9C012706000","0100B9C012706000","services;status-boots;crash;Needs Update","boots","2023-02-27 01:24:28.000" -"Knight Squad","","status-playable","playable","2020-08-09 16:54:51.000" -"WARBORN","","status-playable","playable","2020-06-25 12:36:47.000" -"The Bard's Tale ARPG: Remastered and Resnarkled - 0100CD500DDAE000","0100CD500DDAE000","gpu;status-ingame;nvdec;online-working","ingame","2024-07-18 12:52:01.000" -"NAMCOT COLLECTION","","audio;status-playable","playable","2020-06-25 13:35:22.000" -"Code: Realize ~Future Blessings~ - 010002400F408000","010002400F408000","status-playable;nvdec","playable","2023-03-31 16:57:47.000" -"Code: Realize ~Guardian of Rebirth~","","","","2020-06-25 15:09:14.000" -"Polandball: Can Into Space!","","status-playable","playable","2020-06-25 15:13:26.000" -"Ruiner - 01006EC00F2CC000","01006EC00F2CC000","status-playable;UE4","playable","2022-10-03 14:11:33.000" -"Summer in Mara - 0100A130109B2000","0100A130109B2000","nvdec;status-playable","playable","2021-03-06 14:10:38.000" -"Brigandine: The Legend of Runersia - 010011000EA7A000","010011000EA7A000","status-playable","playable","2021-06-20 06:52:25.000" -"Duke Nukem 3D: 20th Anniversary World Tour - 01007EF00CB88000","01007EF00CB88000","32-bit;status-playable;ldn-untested","playable","2022-08-19 22:22:40.000" -"Outbuddies DX - 0100B8900EFA6000","0100B8900EFA6000","gpu;status-ingame","ingame","2022-08-04 22:39:24.000" -"Mr. DRILLER DrillLand","","nvdec;status-playable","playable","2020-07-24 13:56:48.000" -"Fable of Fairy Stones - 0100E3D0103CE000","0100E3D0103CE000","status-playable","playable","2021-05-05 21:04:54.000" -"Destrobots - 01008BB011ED6000","01008BB011ED6000","status-playable","playable","2021-03-06 14:37:05.000" -"Aery - 0100875011D0C000","0100875011D0C000","status-playable","playable","2021-03-07 15:25:51.000" -"TETRA for Nintendo Switch","","status-playable","playable","2020-06-26 20:49:55.000" -"Push the Crate 2 - 0100B60010432000","0100B60010432000","UE4;gpu;nvdec;status-ingame","ingame","2021-06-10 14:20:01.000" -"Railway Empire - 01002EE00DC02000","01002EE00DC02000","status-playable;nvdec","playable","2022-10-03 13:53:50.000" -"Endless Fables: Dark Moor - 01004F3011F92000","01004F3011F92000","gpu;nvdec;status-ingame","ingame","2021-03-07 15:31:03.000" -"Across the Grooves","","status-playable","playable","2020-06-27 12:29:51.000" -"Behold the Kickmen","","status-playable","playable","2020-06-27 12:49:45.000" -"Blood & Guts Bundle","","status-playable","playable","2020-06-27 12:57:35.000" -"Seek Hearts - 010075D0101FA000","010075D0101FA000","status-playable","playable","2022-11-22 15:06:26.000" -"Edna & Harvey: The Breakout - Anniversary Edition - 01004F000B716000","01004F000B716000","status-ingame;crash;nvdec","ingame","2022-08-01 16:59:56.000" -"-KLAUS-","","nvdec;status-playable","playable","2020-06-27 13:27:30.000" -"Gun Gun Pixies","","","","2020-06-27 13:31:06.000" -"Tcheco in the Castle of Lucio","","status-playable","playable","2020-06-27 13:35:43.000" -"My Butler","","status-playable","playable","2020-06-27 13:46:23.000" -"Caladrius Blaze - 01004FD00D66A000","01004FD00D66A000","deadlock;status-nothing;nvdec","nothing","2022-12-07 16:44:37.000" -"Shipped","","status-playable","playable","2020-11-21 14:22:32.000" -"The Alliance Alive HD Remastered - 010045A00E038000","010045A00E038000","nvdec;status-playable","playable","2021-03-07 15:43:45.000" -"Monochrome Order","","","","2020-06-27 14:38:40.000" -"My Lovely Daughter - 010086B00C784000","010086B00C784000","status-playable","playable","2022-11-24 17:25:32.000" -"Caged Garden Cock Robin","","","","2020-06-27 16:47:22.000" -"A Knight's Quest - 01005EF00CFDA000","01005EF00CFDA000","status-playable;UE4","playable","2022-09-12 20:44:20.000" -"The Witcher 3: Wild Hunt - 01003D100E9C6000","01003D100E9C6000","status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug","playable","2024-02-22 12:21:51.000" -"BATTLESTAR GALACTICA Deadlock","","nvdec;status-playable","playable","2020-06-27 17:35:44.000" -"STELLATUM - 0100BC800EDA2000","0100BC800EDA2000","gpu;status-playable","playable","2021-03-07 16:30:23.000" -"Reventure - 0100E2E00EA42000","0100E2E00EA42000","status-playable","playable","2022-09-15 20:07:06.000" -"Killer Queen Black - 0100F2900B3E2000","0100F2900B3E2000","ldn-untested;online;status-playable","playable","2021-04-08 12:46:18.000" -"Puchitto kurasutā","","Need-Update;crash;services;status-menus","menus","2020-07-04 16:44:28.000" -"Silk - 010045500DFE2000","010045500DFE2000","nvdec;status-playable","playable","2021-06-10 15:34:37.000" -"Aldred - Knight of Honor - 01000E000EEF8000","01000E000EEF8000","services;status-playable","playable","2021-11-30 01:49:17.000" -"Tamashii - 010012800EE3E000","010012800EE3E000","status-playable","playable","2021-06-10 15:26:20.000" -"Overlanders - 0100D7F00EC64000","0100D7F00EC64000","status-playable;nvdec;UE4","playable","2022-09-14 20:15:06.000" -"Romancing SaGa 3","","audio;gpu;status-ingame","ingame","2020-06-27 20:26:18.000" -"Hakoniwa Explorer Plus","","slow;status-ingame","ingame","2021-02-19 16:56:19.000" -"Fractured Minds - 01004200099F2000","01004200099F2000","status-playable","playable","2022-09-13 21:21:40.000" -"Strange Telephone","","","","2020-06-27 21:00:43.000" -"Strikey Sisters","","","","2020-06-27 22:20:14.000" -"IxSHE Tell - 0100DEB00F12A000","0100DEB00F12A000","status-playable;nvdec","playable","2022-12-02 18:00:42.000" -"Monster Farm - 0100E9900ED74000","0100E9900ED74000","32-bit;nvdec;status-playable","playable","2021-05-05 19:29:13.000" -"Pachi Pachi On A Roll","","","","2020-06-28 10:28:59.000" -"MISTOVER","","","","2020-06-28 11:23:53.000" -"Little Busters! Converted Edition - 0100943010310000","0100943010310000","status-playable;nvdec","playable","2022-09-29 15:34:56.000" -"Snack World The Dungeon Crawl Gold - 0100F2800D46E000","0100F2800D46E000","gpu;slow;status-ingame;nvdec;audout","ingame","2022-05-01 21:12:44.000" -"Super Kirby Clash - 01003FB00C5A8000","01003FB00C5A8000","status-playable;ldn-works","playable","2024-07-30 18:21:55.000" -"SEGA AGES Thunder Force IV","","","","2020-06-29 12:06:07.000" -"SEGA AGES Puyo Puyo - 01005F600CB0E000","01005F600CB0E000","online;status-playable","playable","2021-05-05 16:09:28.000" -"EAT BEAT DEADSPIKE-san - 0100A9B009678000","0100A9B009678000","audio;status-playable;Needs Update","playable","2022-12-02 19:25:29.000" -"AeternoBlade II - 01009D100EA28000","01009D100EA28000","status-playable;online-broken;UE4;vulkan-backend-bug","playable","2022-09-12 21:11:18.000" -"WRC 8 FIA World Rally Championship - 010087800DCEA000","010087800DCEA000","status-playable;nvdec","playable","2022-09-16 23:03:36.000" -"Yaga - 01006FB00DB02000","01006FB00DB02000","status-playable;nvdec","playable","2022-09-16 23:17:17.000" -"Woven - 01006F100EB16000","01006F100EB16000","nvdec;status-playable","playable","2021-06-02 13:41:08.000" -"Kissed by the Baddest Bidder - 0100F3A00F4CA000","0100F3A00F4CA000","gpu;status-ingame;nvdec","ingame","2022-12-04 20:57:11.000" -"Thief of Thieves - 0100CE700F62A000","0100CE700F62A000","status-nothing;crash;loader-allocator","nothing","2021-11-03 07:16:30.000" -"Squidgies Takeover","","status-playable","playable","2020-07-20 22:28:08.000" -"Balthazar's Dreams - 0100BC400FB64000","0100BC400FB64000","status-playable","playable","2022-09-13 00:13:22.000" -"ZenChess","","status-playable","playable","2020-07-01 22:28:27.000" -"Sparklite - 01007ED00C032000","01007ED00C032000","status-playable","playable","2022-08-06 11:35:41.000" -"Some Distant Memory - 01009EE00E91E000","01009EE00E91E000","status-playable","playable","2022-09-15 21:48:19.000" -"Skybolt Zack - 010041C01014E000","010041C01014E000","status-playable","playable","2021-04-12 18:28:00.000" -"Tactical Mind 2","","status-playable","playable","2020-07-01 23:11:07.000" -"Super Street: Racer - 0100FB400F54E000","0100FB400F54E000","status-playable;UE4","playable","2022-09-16 13:43:14.000" -"TOKYO DARK - REMEMBRANCE - - 01003E500F962000","01003E500F962000","nvdec;status-playable","playable","2021-06-10 20:09:49.000" -"Party Treats","","status-playable","playable","2020-07-02 00:05:00.000" -"Rocket Wars","","status-playable","playable","2020-07-24 14:27:39.000" -"Rawr-Off","","crash;nvdec;status-menus","menus","2020-07-02 00:14:44.000" -"Blair Witch - 01006CC01182C000","01006CC01182C000","status-playable;nvdec;UE4","playable","2022-10-01 14:06:16.000" -"Urban Trial Tricky - 0100A2500EB92000","0100A2500EB92000","status-playable;nvdec;UE4","playable","2022-12-06 13:07:56.000" -"Infliction - 01001CB00EFD6000","01001CB00EFD6000","status-playable;nvdec;UE4","playable","2022-10-02 13:15:55.000" -"Catherine Full Body for Nintendo Switch (JP) - 0100BAE0077E4000","0100BAE0077E4000","Needs Update;gpu;status-ingame","ingame","2021-02-21 18:06:11.000" -"Night Call - 0100F3A0095A6000","0100F3A0095A6000","status-playable;nvdec","playable","2022-10-03 12:57:00.000" -"Grimshade - 01001E200F2F8000","01001E200F2F8000","status-playable","playable","2022-10-02 12:44:20.000" -"A Summer with the Shiba Inu - 01007DD011C4A000","01007DD011C4A000","status-playable","playable","2021-06-10 20:51:16.000" -"Holy Potatoes! What the Hell?!","","status-playable","playable","2020-07-03 10:48:56.000" -"Tower of Time","","gpu;nvdec;status-ingame","ingame","2020-07-03 11:11:12.000" -"Iron Wings - 01005270118D6000","01005270118D6000","slow;status-ingame","ingame","2022-08-07 08:32:57.000" -"Death Come True - 010012B011AB2000","010012B011AB2000","nvdec;status-playable","playable","2021-06-10 22:30:49.000" -"CAN ANDROIDS PRAY:BLUE","","","","2020-07-05 08:14:53.000" -"The Almost Gone","","status-playable","playable","2020-07-05 12:33:07.000" -"Urban Flow","","services;status-playable","playable","2020-07-05 12:51:47.000" -"Digimon Story Cyber Sleuth: Complete Edition - 010014E00DB56000","010014E00DB56000","status-playable;nvdec;opengl","playable","2022-09-13 15:02:37.000" -"Return of the Obra Dinn - 010032E00E6E2000","010032E00E6E2000","status-playable","playable","2022-09-15 19:56:45.000" -"YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD. - 010037D00DBDC000","010037D00DBDC000","nvdec;status-playable","playable","2021-01-26 17:03:52.000" -"Summer Sweetheart - 01004E500DB9E000","01004E500DB9E000","status-playable;nvdec","playable","2022-09-16 12:51:46.000" -"ZikSquare - 010086700EF16000","010086700EF16000","gpu;status-ingame","ingame","2021-11-06 02:02:48.000" -"Planescape: Torment and Icewind Dale: Enhanced Editions - 010030B00C316000","010030B00C316000","cpu;status-boots;32-bit;crash;Needs Update","boots","2022-09-10 03:58:26.000" -"Megaquarium - 010082B00E8B8000","010082B00E8B8000","status-playable","playable","2022-09-14 16:50:00.000" -"Ice Age Scrat's Nutty Adventure - 01004E5007E92000","01004E5007E92000","status-playable;nvdec","playable","2022-09-13 22:22:29.000" -"Aggelos - 010004D00A9C0000","010004D00A9C0000","gpu;status-ingame","ingame","2023-02-19 13:24:23.000" -"Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000","010078D00E8F4000","slow;status-playable;nvdec;UE4","playable","2022-09-16 11:58:38.000" -"Sub Level Zero: Redux - 0100E6400BCE8000","0100E6400BCE8000","status-playable","playable","2022-09-16 12:30:03.000" -"BurgerTime Party!","","slow;status-playable","playable","2020-11-21 14:11:53.000" -"Another Sight","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-03 16:49:59.000" -"Baldur's Gate and Baldur's Gate II: Enhanced Editions - 010010A00DA48000","010010A00DA48000","32-bit;status-playable","playable","2022-09-12 23:52:15.000" -"Kine - 010089000F0E8000","010089000F0E8000","status-playable;UE4","playable","2022-09-14 14:28:37.000" -"Roof Rage - 010088100DD42000","010088100DD42000","status-boots;crash;regression","boots","2023-11-12 03:47:18.000" -"Pig Eat Ball - 01000FD00D5CC000","01000FD00D5CC000","services;status-ingame","ingame","2021-11-30 01:57:45.000" -"DORAEMON STORY OF SEASONS","","nvdec;status-playable","playable","2020-07-13 20:28:11.000" -"Root Letter: Last Answer - 010030A00DA3A000","010030A00DA3A000","status-playable;vulkan-backend-bug","playable","2022-09-17 10:25:57.000" -"Cat Quest II","","status-playable","playable","2020-07-06 23:52:09.000" -"Streets of Rage 4","","nvdec;online;status-playable","playable","2020-07-07 21:21:22.000" -"Deep Space Rush","","status-playable","playable","2020-07-07 23:30:33.000" -"Into the Dead 2 - 01000F700DECE000","01000F700DECE000","status-playable;nvdec","playable","2022-09-14 12:36:14.000" -"Dark Devotion - 010083A00BF6C000","010083A00BF6C000","status-playable;nvdec","playable","2022-08-09 09:41:18.000" -"Anthill - 010054C00D842000","010054C00D842000","services;status-menus;nvdec","menus","2021-11-18 09:25:25.000" -"Skullgirls: 2nd Encore - 010046B00DE62000","010046B00DE62000","status-playable","playable","2022-09-15 21:21:25.000" -"Tokyo School Life - 0100E2E00CB14000","0100E2E00CB14000","status-playable","playable","2022-09-16 20:25:54.000" -"Pixel Gladiator","","status-playable","playable","2020-07-08 02:41:26.000" -"Spirit Hunter: NG","","32-bit;status-playable","playable","2020-12-17 20:38:47.000" -"The Fox Awaits Me","","","","2020-07-08 11:58:56.000" -"Shalnor Legends: Sacred Lands - 0100B4900E008000","0100B4900E008000","status-playable","playable","2021-06-11 14:57:11.000" -"Hero must die. again","","","","2020-07-08 12:35:49.000" -"AeternoBlade I","","nvdec;status-playable","playable","2020-12-14 20:06:48.000" -"Sephirothic Stories - 010059700D4A0000","010059700D4A0000","services;status-menus","menus","2021-11-25 08:52:17.000" -"Ciel Fledge: A Daughter Raising Simulator","","","","2020-07-08 14:57:17.000" -"Olympia Soiree - 0100F9D00C186000","0100F9D00C186000","status-playable","playable","2022-12-04 21:07:12.000" -"Mighty Switch Force! Collection - 010060D00AE36000","010060D00AE36000","status-playable","playable","2022-10-28 20:40:32.000" -"Street Outlaws: The List - 010012400D202000","010012400D202000","nvdec;status-playable","playable","2021-06-11 12:15:32.000" -"TroubleDays","","","","2020-07-09 08:50:12.000" -"Legend of the Tetrarchs","","deadlock;status-ingame","ingame","2020-07-10 07:54:03.000" -"Soul Searching","","status-playable","playable","2020-07-09 18:39:07.000" -"Dusk Diver - 010011C00E636000","010011C00E636000","status-boots;crash;UE4","boots","2021-11-06 09:01:30.000" -"PBA Pro Bowling - 010085700ABC8000","010085700ABC8000","status-playable;nvdec;online-broken;UE4","playable","2022-09-14 23:00:49.000" -"Horror Pinball Bundle - 0100E4200FA82000","0100E4200FA82000","status-menus;crash","menus","2022-09-13 22:15:34.000" -"Farm Expert 2019 for Nintendo Switch","","status-playable","playable","2020-07-09 21:42:57.000" -"Super Monkey Ball: Banana Blitz HD - 0100B2A00E1E0000","0100B2A00E1E0000","status-playable;online-broken","playable","2022-09-16 13:16:25.000" -"Yuri - 0100FC900963E000","0100FC900963E000","status-playable","playable","2021-06-11 13:08:50.000" -"Vampyr - 01000BD00CE64000","01000BD00CE64000","status-playable;nvdec;UE4","playable","2022-09-16 22:15:51.000" -"Spirit Roots","","nvdec;status-playable","playable","2020-07-10 13:33:32.000" -"Resident Evil 5 - 010018100CD46000","010018100CD46000","status-playable;nvdec","playable","2024-02-18 17:15:29.000" -"RESIDENT EVIL 6 - 01002A000CD48000","01002A000CD48000","status-playable;nvdec","playable","2022-09-15 14:31:47.000" -"The Big Journey - 010089600E66A000","010089600E66A000","status-playable","playable","2022-09-16 14:03:08.000" -"Sky Gamblers: Storm Raiders 2 - 010068200E96E000","010068200E96E000","gpu;status-ingame","ingame","2022-09-13 12:24:04.000" -"Door Kickers: Action Squad - 01005ED00CD70000","01005ED00CD70000","status-playable;online-broken;ldn-broken","playable","2022-09-13 16:28:53.000" -"Agony","","UE4;crash;status-boots","boots","2020-07-10 16:21:18.000" -"Remothered: Tormented Fathers - 01001F100E8AE000","01001F100E8AE000","status-playable;nvdec;UE4","playable","2022-10-19 23:26:50.000" -"Biped - 010053B0117F8000","010053B0117F8000","status-playable;nvdec","playable","2022-10-01 13:32:58.000" -"Clash Force - 01005ED0107F4000","01005ED0107F4000","status-playable","playable","2022-10-01 23:45:48.000" -"Truck & Logistics Simulator - 0100F2100AA5C000","0100F2100AA5C000","status-playable","playable","2021-06-11 13:29:08.000" -"Collar X Malice - 010083E00F40E000","010083E00F40E000","status-playable;nvdec","playable","2022-10-02 11:51:56.000" -"TORICKY-S - 01007AF011732000","01007AF011732000","deadlock;status-menus","menus","2021-11-25 08:53:36.000" -"The Wanderer: Frankenstein's Creature","","status-playable","playable","2020-07-11 12:49:51.000" -"PRINCESS MAKER -FAERY TALES COME TRUE-","","","","2020-07-11 16:09:47.000" -"Princess Maker Go!Go! Princess","","","","2020-07-11 16:35:31.000" -"Paradox Soul","","","","2020-07-11 17:20:44.000" -"Diabolic - 0100F73011456000","0100F73011456000","status-playable","playable","2021-06-11 14:45:08.000" -"UBERMOSH:BLACK","","","","2020-07-11 17:42:34.000" -"Journey to the Savage Planet - 01008B60117EC000","01008B60117EC000","status-playable;nvdec;UE4;ldn-untested","playable","2022-10-02 18:48:12.000" -"Viviette - 010037900CB1C000","010037900CB1C000","status-playable","playable","2021-06-11 15:33:40.000" -"the StoryTale - 0100858010DC4000","0100858010DC4000","status-playable","playable","2022-09-03 13:00:25.000" -"Ghost Grab 3000","","status-playable","playable","2020-07-11 18:09:52.000" -"SEGA AGES Shinobi","","","","2020-07-11 18:17:27.000" -"eCrossminton","","status-playable","playable","2020-07-11 18:24:27.000" -"Dangerous Relationship","","","","2020-07-11 18:39:45.000" -"Indie Darling Bundle Vol. 3 - 01004DE011076000","01004DE011076000","status-playable","playable","2022-10-02 13:01:57.000" -"Murder by Numbers","","","","2020-07-11 19:12:19.000" -"BUSTAFELLOWS","","nvdec;status-playable","playable","2020-10-17 20:04:41.000" -"Love Letter from Thief X - 0100D36011AD4000","0100D36011AD4000","gpu;status-ingame;nvdec","ingame","2023-11-14 03:55:31.000" -"Escape Game Fort Boyard","","status-playable","playable","2020-07-12 12:45:43.000" -"SEGA AGES Gain Ground - 01001E600AF08000","01001E600AF08000","online;status-playable","playable","2021-05-05 16:16:27.000" -"The Wardrobe: Even Better Edition - 01008B200FC6C000","01008B200FC6C000","status-playable","playable","2022-09-16 19:14:55.000" -"SEGA AGES Wonder Boy: Monster Land - 01001E700AC60000","01001E700AC60000","online;status-playable","playable","2021-05-05 16:28:25.000" -"SEGA AGES Columns II: A Voyage Through Time","","","","2020-07-12 13:38:50.000" -"Zenith - 0100AAC00E692000","0100AAC00E692000","status-playable","playable","2022-09-17 09:57:02.000" -"Jumanji","","UE4;crash;status-boots","boots","2020-07-12 13:52:25.000" -"SEGA AGES Ichidant-R","","","","2020-07-12 13:54:29.000" -"STURMWIND EX - 0100C5500E7AE000","0100C5500E7AE000","audio;32-bit;status-playable","playable","2022-09-16 12:01:39.000" -"SEGA AGES Alex Kidd in Miracle World - 0100A8900AF04000","0100A8900AF04000","online;status-playable","playable","2021-05-05 16:35:47.000" -"The Lord of the Rings: Adventure Card Game - 010085A00C5E8000","010085A00C5E8000","status-menus;online-broken","menus","2022-09-16 15:19:32.000" -"Breeder Homegrown: Director's Cut","","","","2020-07-12 14:54:02.000" -"StarCrossed","","","","2020-07-12 15:15:22.000" -"The Legend of Dark Witch","","status-playable","playable","2020-07-12 15:18:33.000" -"One-Way Ticket","","","","2020-07-12 15:36:25.000" -"Ships - 01000E800FCB4000","01000E800FCB4000","status-playable","playable","2021-06-11 16:14:37.000" -"My Bewitching Perfume","","","","2020-07-12 15:55:15.000" -"Black and White Bushido","","","","2020-07-12 16:12:16.000" -"REKT","","online;status-playable","playable","2020-09-28 12:33:56.000" -"Nirvana Pilot Yume - 010020901088A000","010020901088A000","status-playable","playable","2022-10-29 11:49:49.000" -"Detective Jinguji Saburo Prism of Eyes","","status-playable","playable","2020-10-02 21:54:41.000" -"Harvest Moon: Mad Dash","","","","2020-07-12 20:37:50.000" -"Worse Than Death - 010037500C4DE000","010037500C4DE000","status-playable","playable","2021-06-11 16:05:40.000" -"Bad Dream: Coma - 01000CB00D094000","01000CB00D094000","deadlock;status-boots","boots","2023-08-03 00:54:18.000" -"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun","","gpu;nvdec;status-ingame","ingame","2020-09-28 17:58:04.000" -"MODEL Debut #nicola","","","","2020-07-13 11:21:44.000" -"Chameleon","","","","2020-07-13 12:06:20.000" -"Gunka o haita neko","","gpu;nvdec;status-ingame","ingame","2020-08-25 12:37:56.000" -"Genso maneju","","","","2020-07-13 14:14:09.000" -"Coffee Talk","","status-playable","playable","2020-08-10 09:48:44.000" -"Labyrinth of the Witch","","status-playable","playable","2020-11-01 14:42:37.000" -"Ritual: Crown of Horns - 010042500FABA000","010042500FABA000","status-playable","playable","2021-01-26 16:01:47.000" -"THE GRISAIA TRILOGY - 01003b300e4aa000","01003b300e4aa000","status-playable","playable","2021-01-31 15:53:59.000" -"Perseverance","","status-playable","playable","2020-07-13 18:48:27.000" -"SEGA AGES Fantasy Zone","","","","2020-07-13 19:33:23.000" -"SEGA AGES Thunder Force AC","","","","2020-07-13 19:50:34.000" -"SEGA AGES Puyo Puyo 2","","","","2020-07-13 20:15:04.000" -"GRISAIA PHANTOM TRIGGER 01&02 - 01009D7011B02000","01009D7011B02000","status-playable;nvdec","playable","2022-12-04 21:16:06.000" -"Paper Dolls Original","","UE4;crash;status-boots","boots","2020-07-13 20:26:21.000" -"STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY - 0100B61009C60000","0100B61009C60000","status-playable","playable","2021-01-26 17:37:28.000" -" SEGA AGES G-LOC AIR BATTLE","","","","2020-07-13 20:42:40.000" -"Think of the Children - 0100F2300A5DA000","0100F2300A5DA000","deadlock;status-menus","menus","2021-11-23 09:04:45.000" -"OTOKOMIZU","","status-playable","playable","2020-07-13 21:00:44.000" -"Puchikon 4 Smile BASIC","","","","2020-07-13 21:18:15.000" -"Neverlast","","slow;status-ingame","ingame","2020-07-13 23:55:19.000" -"MONKEY BARRELS - 0100FBD00ED24000","0100FBD00ED24000","status-playable","playable","2022-09-14 17:28:52.000" -"Ghost Parade","","status-playable","playable","2020-07-14 00:43:54.000" -"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit - 010087800EE5A000","010087800EE5A000","status-boots;crash","boots","2023-02-19 00:51:21.000" -"OMG Zombies! - 01006DB00D970000","01006DB00D970000","32-bit;status-playable","playable","2021-04-12 18:04:45.000" -"Evan's Remains","","","","2020-07-14 05:56:25.000" -"Working Zombies","","","","2020-07-14 06:30:55.000" -"Saboteur II: Avenging Angel","","Needs Update;cpu;crash;status-nothing","nothing","2021-01-26 14:47:37.000" -"Quell Zen - 0100492012378000","0100492012378000","gpu;status-ingame","ingame","2021-06-11 15:59:53.000" -"The Touryst - 0100C3300D8C4000","0100C3300D8C4000","status-ingame;crash","ingame","2023-08-22 01:32:38.000" -"SMASHING THE BATTLE - 01002AA00C974000","01002AA00C974000","status-playable","playable","2021-06-11 15:53:57.000" -"Him & Her","","","","2020-07-14 08:09:57.000" -"Speed Brawl","","slow;status-playable","playable","2020-09-18 22:08:16.000" -"River City Melee Mach!! - 0100B2100767C000","0100B2100767C000","status-playable;online-broken","playable","2022-09-20 20:51:57.000" -"Please The Gods","","","","2020-07-14 10:10:27.000" -"One Person Story","","status-playable","playable","2020-07-14 11:51:02.000" -"Mary Skelter 2 - 01003DE00C95E000","01003DE00C95E000","status-ingame;crash;regression","ingame","2023-09-12 07:37:28.000" -"NecroWorm","","","","2020-07-14 12:15:16.000" -"Juicy Realm - 0100C7600F654000","0100C7600F654000","status-playable","playable","2023-02-21 19:16:20.000" -"Grizzland","","","","2020-07-14 12:28:03.000" -"Garfield Kart Furious Racing - 010061E00E8BE000","010061E00E8BE000","status-playable;ldn-works;loader-allocator","playable","2022-09-13 21:40:25.000" -"Close to the Sun - 0100B7200DAC6000","0100B7200DAC6000","status-boots;crash;nvdec;UE4","boots","2021-11-04 09:19:41.000" -"Xeno Crisis","","","","2020-07-14 12:46:55.000" -"Boreal Blade - 01008E500AFF6000","01008E500AFF6000","gpu;ldn-untested;online;status-ingame","ingame","2021-06-11 15:37:14.000" -"Animus: Harbinger - 0100E5A00FD38000","0100E5A00FD38000","status-playable","playable","2022-09-13 22:09:20.000" -"DEADBOLT","","","","2020-07-14 13:20:01.000" -"Headsnatchers","","UE4;crash;status-menus","menus","2020-07-14 13:29:14.000" -"DOUBLE DRAGON Ⅲ: The Sacred Stones - 01001AD00E49A000","01001AD00E49A000","online;status-playable","playable","2021-06-11 15:41:44.000" -"911 Operator Deluxe Edition","","status-playable","playable","2020-07-14 13:57:44.000" -"Disney Tsum Tsum Festival","","crash;status-menus","menus","2020-07-14 14:05:28.000" -"JUST DANCE 2020 - 0100DDB00DB38000","0100DDB00DB38000","status-playable","playable","2022-01-24 13:31:57.000" -"A Street Cat's Tale","","","","2020-07-14 14:10:13.000" -"Real Heroes: Firefighter - 010048600CC16000","010048600CC16000","status-playable","playable","2022-09-20 18:18:44.000" -"The Savior's Gang - 01002BA00C7CE000","01002BA00C7CE000","gpu;status-ingame;nvdec;UE4","ingame","2022-09-21 12:37:48.000" -"KATANA KAMI: A Way of the Samurai Story - 0100F9800EDFA000","0100F9800EDFA000","slow;status-playable","playable","2022-04-09 10:40:16.000" -"Toon War - 01009EA00E2B8000","01009EA00E2B8000","status-playable","playable","2021-06-11 16:41:53.000" -"2048 CAT","","","","2020-07-14 14:44:29.000" -"Tick Tock: A Tale for Two","","status-menus","menus","2020-07-14 14:49:38.000" -"HexON","","","","2020-07-14 14:54:27.000" -"Ancient Rush 2","","UE4;crash;status-menus","menus","2020-07-14 14:58:47.000" -"Under Night In-Birth Exe:Late[cl-r]","","","","2020-07-14 15:06:07.000" -"Circuits - 01008FA00D686000","01008FA00D686000","status-playable","playable","2022-09-19 11:52:50.000" -"Breathing Fear","","status-playable","playable","2020-07-14 15:12:29.000" -"KAMINAZO Memories from the future","","","","2020-07-14 15:22:45.000" -"Big Pharma","","status-playable","playable","2020-07-14 15:27:30.000" -"Amoeba Battle - Microscopic RTS Action - 010041D00DEB2000","010041D00DEB2000","status-playable","playable","2021-05-06 13:33:41.000" -"Assassin's Creed The Rebel Collection - 010044700DEB0000","010044700DEB0000","gpu;status-ingame","ingame","2024-05-19 07:58:56.000" -"Defenders of Ekron - Definitive Edition - 01008BB00F824000","01008BB00F824000","status-playable","playable","2021-06-11 16:31:03.000" -"Hellmut: The Badass from Hell","","","","2020-07-14 15:56:49.000" -"Alien: Isolation - 010075D00E8BA000","010075D00E8BA000","status-playable;nvdec;vulkan-backend-bug","playable","2022-09-17 11:48:41.000" -"Immortal Planet - 01007BC00E55A000","01007BC00E55A000","status-playable","playable","2022-09-20 13:40:43.000" -"inbento","","","","2020-07-14 16:09:57.000" -"Ding Dong XL","","status-playable","playable","2020-07-14 16:13:19.000" -"KUUKIYOMI 2: Consider It More! - New Era - 010037500F282000","010037500F282000","status-nothing;crash;Needs Update","nothing","2021-11-02 09:34:40.000" -" KUUKIYOMI: Consider It!","","","","2020-07-14 16:21:36.000" -"MADORIS R","","","","2020-07-14 16:34:22.000" -"Kairobotica - 0100D5F00EC52000","0100D5F00EC52000","status-playable","playable","2021-05-06 12:17:56.000" -"Bouncy Bob 2","","status-playable","playable","2020-07-14 16:51:53.000" -"Grab the Bottle","","status-playable","playable","2020-07-14 17:06:41.000" -"Red Bow - 0100CF600FF7A000","0100CF600FF7A000","services;status-ingame","ingame","2021-11-29 03:51:34.000" -"Pocket Mini Golf","","","","2020-07-14 22:13:35.000" -"Must Dash Amigos - 0100F6000EAA8000","0100F6000EAA8000","status-playable","playable","2022-09-20 16:45:56.000" -"EarthNight - 0100A2E00BB0C000","0100A2E00BB0C000","status-playable","playable","2022-09-19 21:02:20.000" -"Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos","","status-playable","playable","2020-07-15 05:06:29.000" -"Bloo Kid 2 - 010055900FADA000","010055900FADA000","status-playable","playable","2024-05-01 17:16:57.000" -"Narcos: Rise of the Cartels - 010072B00BDDE000","010072B00BDDE000","UE4;crash;nvdec;status-boots","boots","2021-03-22 13:18:47.000" -"PUSH THE CRATE - 010016400F07E000","010016400F07E000","status-playable;nvdec;UE4","playable","2022-09-15 13:28:41.000" -"Bee Simulator","","UE4;crash;status-boots","boots","2020-07-15 12:13:13.000" -"Where the Bees Make Honey","","status-playable","playable","2020-07-15 12:40:49.000" -"The Eyes of Ara - 0100B5900DFB2000","0100B5900DFB2000","status-playable","playable","2022-09-16 14:44:06.000" -"The Unicorn Princess - 010064E00ECBC000","010064E00ECBC000","status-playable","playable","2022-09-16 16:20:56.000" -"Sword of the Guardian","","status-playable","playable","2020-07-16 12:24:39.000" -"Waifu Uncovered - 0100B130119D0000","0100B130119D0000","status-ingame;crash","ingame","2023-02-27 01:17:46.000" -"Paper Mario The Origami King - 0100A3900C3E2000","0100A3900C3E2000","audio;status-playable;Needs Update","playable","2024-08-09 18:27:40.000" -"Touhou Spell Bubble","","status-playable","playable","2020-10-18 11:43:43.000" -"Crysis Remastered - 0100E66010ADE000","0100E66010ADE000","status-menus;nvdec","menus","2024-08-13 05:23:24.000" -"Helltaker","","","","2020-07-23 21:16:43.000" -"Shadow Blade Reload - 0100D5500DA94000","0100D5500DA94000","nvdec;status-playable","playable","2021-06-11 18:40:43.000" -"The Bunker - 01001B40086E2000","01001B40086E2000","status-playable;nvdec","playable","2022-09-16 14:24:05.000" -"War Tech Fighters - 010049500DE56000","010049500DE56000","status-playable;nvdec","playable","2022-09-16 22:29:31.000" -"Real Drift Racing","","status-playable","playable","2020-07-25 14:31:31.000" -"Phantaruk - 0100DDD00C0EA000","0100DDD00C0EA000","status-playable","playable","2021-06-11 18:09:54.000" -"Omensight: Definitive Edition","","UE4;crash;nvdec;status-ingame","ingame","2020-07-26 01:45:14.000" -"Phantom Doctrine - 010096F00E5B0000","010096F00E5B0000","status-playable;UE4","playable","2022-09-15 10:51:50.000" -"Monster Bugs Eat People","","status-playable","playable","2020-07-26 02:05:34.000" -"Machi Knights Blood bagos - 0100F2400D434000","0100F2400D434000","status-playable;nvdec;UE4","playable","2022-09-14 15:08:04.000" -"Offroad Racing - 01003CD00E8BC000","01003CD00E8BC000","status-playable;online-broken;UE4","playable","2022-09-14 18:53:22.000" -"Puzzle Book","","status-playable","playable","2020-09-28 13:26:01.000" -"SUSHI REVERSI - 01005AB01119C000","01005AB01119C000","status-playable","playable","2021-06-11 19:26:58.000" -"Strike Force - War on Terror - 010039100DACC000","010039100DACC000","status-menus;crash;Needs Update","menus","2021-11-24 08:08:20.000" -"Mr Blaster - 0100D3300F110000","0100D3300F110000","status-playable","playable","2022-09-14 17:56:24.000" -"Lust for Darkness","","nvdec;status-playable","playable","2020-07-26 12:09:15.000" -"Legrand Legacy: Tale of the Fatebounds","","nvdec;status-playable","playable","2020-07-26 12:27:36.000" -"Hardway Party","","status-playable","playable","2020-07-26 12:35:07.000" -"Earthfall: Alien Horde - 0100DFC00E472000","0100DFC00E472000","status-playable;nvdec;UE4;ldn-untested","playable","2022-09-13 17:32:37.000" -"Collidalot - 010030800BC36000","010030800BC36000","status-playable;nvdec","playable","2022-09-13 14:09:27.000" -"Miniature - The Story Puzzle - 010039200EC66000","010039200EC66000","status-playable;UE4","playable","2022-09-14 17:18:50.000" -"MEANDERS - 0100EEF00CBC0000","0100EEF00CBC0000","UE4;gpu;status-ingame","ingame","2021-06-11 19:19:33.000" -"Isoland","","status-playable","playable","2020-07-26 13:48:16.000" -"Fishing Star World Tour - 0100DEB00ACE2000","0100DEB00ACE2000","status-playable","playable","2022-09-13 19:08:51.000" -"Isoland 2: Ashes of Time","","status-playable","playable","2020-07-26 14:29:05.000" -"Golazo - 010013800F0A4000","010013800F0A4000","status-playable","playable","2022-09-13 21:58:37.000" -"Castle of No Escape 2 - 0100F5500FA0E000","0100F5500FA0E000","status-playable","playable","2022-09-13 13:51:42.000" -"Guess The Word","","status-playable","playable","2020-07-26 21:34:25.000" -"Black Future '88 - 010049000B69E000","010049000B69E000","status-playable;nvdec","playable","2022-09-13 11:24:37.000" -"The Childs Sight - 010066800E9F8000","010066800E9F8000","status-playable","playable","2021-06-11 19:04:56.000" -"Asterix & Obelix XXL3: The Crystal Menhir - 010081500EA1E000","010081500EA1E000","gpu;status-ingame;nvdec;regression","ingame","2022-11-28 14:19:23.000" -"Go! Fish Go!","","status-playable","playable","2020-07-27 13:52:28.000" -"Amnesia: Collection - 01003CC00D0BE000","01003CC00D0BE000","status-playable","playable","2022-10-04 13:36:15.000" -"Ages of Mages: the Last Keeper - 0100E4700E040000","0100E4700E040000","status-playable;vulkan-backend-bug","playable","2022-10-04 11:44:05.000" -"Worlds of Magic: Planar Conquest - 010000301025A000","010000301025A000","status-playable","playable","2021-06-12 12:51:28.000" -"Hang the Kings","","status-playable","playable","2020-07-28 22:56:59.000" -"Super Dungeon Tactics - 010023100B19A000","010023100B19A000","status-playable","playable","2022-10-06 17:40:40.000" -"Five Nights at Freddy's: Sister Location - 01003B200E440000","01003B200E440000","status-playable","playable","2023-10-06 09:00:58.000" -"Ice Cream Surfer","","status-playable","playable","2020-07-29 12:04:07.000" -"Demon's Rise","","status-playable","playable","2020-07-29 12:26:27.000" -"A Ch'ti Bundle - 010096A00CC80000","010096A00CC80000","status-playable;nvdec","playable","2022-10-04 12:48:44.000" -"Overwatch®: Legendary Edition - 0100F8600E21E000","0100F8600E21E000","deadlock;status-boots","boots","2022-09-14 20:22:22.000" -"Zombieland: Double Tap - Road Trip - 01000E5800D32C000","01000E5800D32C00","status-playable","playable","2022-09-17 10:08:45.000" -"Children of Morta - 01002DE00C250000","01002DE00C250000","gpu;status-ingame;nvdec","ingame","2022-09-13 17:48:47.000" -"Story of a Gladiator","","status-playable","playable","2020-07-29 15:08:18.000" -"SD GUNDAM G GENERATION CROSS RAYS - 010055700CEA8000","010055700CEA8000","status-playable;nvdec","playable","2022-09-15 20:58:44.000" -"Neverwinter Nights: Enhanced Edition - 010013700DA4A000","010013700DA4A000","gpu;status-menus;nvdec","menus","2024-09-30 02:59:19.000" -"Race With Ryan","","UE4;gpu;nvdec;slow;status-ingame","ingame","2020-11-16 04:35:33.000" -"StrikeForce Kitty","","nvdec;status-playable","playable","2020-07-29 16:22:15.000" -"Later Daters","","status-playable","playable","2020-07-29 16:35:45.000" -"Pine","","slow;status-ingame","ingame","2020-07-29 16:57:39.000" -"Japanese Rail Sim: Journey to Kyoto","","nvdec;status-playable","playable","2020-07-29 17:14:21.000" -"FoxyLand","","status-playable","playable","2020-07-29 20:55:20.000" -"Five Nights at Freddy's - 0100B6200D8D2000","0100B6200D8D2000","status-playable","playable","2022-09-13 19:26:36.000" -"Five Nights at Freddy's 2 - 01004EB00E43A000","01004EB00E43A000","status-playable","playable","2023-02-08 15:48:24.000" -"Five Nights at Freddy's 3 - 010056100E43C000","010056100E43C000","status-playable","playable","2022-09-13 20:58:07.000" -"Five Nights at Freddy's 4 - 010083800E43E000","010083800E43E000","status-playable","playable","2023-08-19 07:28:03.000" -"Widget Satchel - 0100C7800CA06000","0100C7800CA06000","status-playable","playable","2022-09-16 22:41:07.000" -"Nyan Cat: Lost in Space - 010049F00EC30000","010049F00EC30000","online;status-playable","playable","2021-06-12 13:22:03.000" -"Blacksad: Under the Skin - 010032000EA2C000","010032000EA2C000","status-playable","playable","2022-09-13 11:38:04.000" -"Mini Trains","","status-playable","playable","2020-07-29 23:06:20.000" -"Call of Juarez: Gunslinger - 0100B4700BFC6000","0100B4700BFC6000","gpu;status-ingame;nvdec","ingame","2022-09-17 16:49:46.000" -"Locomotion","","","","2020-07-31 08:17:09.000" -"Headspun","","status-playable","playable","2020-07-31 19:46:47.000" -"Exception - 0100F2D00C7DE000","0100F2D00C7DE000","status-playable;online-broken","playable","2022-09-20 12:47:10.000" -"Dead End Job - 01004C500BD40000","01004C500BD40000","status-playable;nvdec","playable","2022-09-19 12:48:44.000" -"Event Horizon: Space Defense","","status-playable","playable","2020-07-31 20:31:24.000" -"SAMURAI SHODOWN","","UE4;crash;nvdec;status-menus","menus","2020-09-06 02:17:00.000" -"BQM BlockQuest Maker","","online;status-playable","playable","2020-07-31 20:56:50.000" -"Hard West - 0100ECE00D13E000","0100ECE00D13E000","status-nothing;regression","nothing","2022-02-09 07:45:56.000" -"Override: Mech City Brawl - Super Charged Mega Edition - 01008A700F7EE000","01008A700F7EE000","status-playable;nvdec;online-broken;UE4","playable","2022-09-20 17:33:32.000" -"Where Are My Friends? - 0100FDB0092B4000","0100FDB0092B4000","status-playable","playable","2022-09-21 14:39:26.000" -"Final Light, The Prison","","status-playable","playable","2020-07-31 21:48:44.000" -"Citizens of Space - 0100E4200D84E000","0100E4200D84E000","gpu;status-boots","boots","2023-10-22 06:45:44.000" -"Adventures of Bertram Fiddle: Episode 1: A Dreadly Business - 01003B400A00A000","01003B400A00A000","status-playable;nvdec","playable","2022-09-17 11:07:56.000" -"Momonga Pinball Adventures - 01002CC00BC4C000","01002CC00BC4C000","status-playable","playable","2022-09-20 16:00:40.000" -"Suicide Guy: Sleepin' Deeply - 0100DE000C2E4000","0100DE000C2E4000","status-ingame;Needs More Attention","ingame","2022-09-20 23:45:25.000" -"Warhammer 40,000: Mechanicus - 0100C6000EEA8000","0100C6000EEA8000","nvdec;status-playable","playable","2021-06-13 10:46:38.000" -"Caretaker - 0100DA70115E6000","0100DA70115E6000","status-playable","playable","2022-10-04 14:52:24.000" -"Once Upon A Coma","","nvdec;status-playable","playable","2020-08-01 12:09:39.000" -"Welcome to Hanwell","","UE4;crash;status-boots","boots","2020-08-03 11:54:57.000" -"Radical Rabbit Stew","","status-playable","playable","2020-08-03 12:02:56.000" -"We should talk.","","crash;status-nothing","nothing","2020-08-03 12:32:36.000" -"Get 10 Quest","","status-playable","playable","2020-08-03 12:48:39.000" -"Dongo Adventure - 010088B010DD2000","010088B010DD2000","status-playable","playable","2022-10-04 16:22:26.000" -"Singled Out","","online;status-playable","playable","2020-08-03 13:06:18.000" -"Never Breakup - 010039801093A000","010039801093A000","status-playable","playable","2022-10-05 16:12:12.000" -"Ashen - 010027B00E40E000","010027B00E40E000","status-playable;nvdec;online-broken;UE4","playable","2022-09-17 12:19:14.000" -"JDM Racing","","status-playable","playable","2020-08-03 17:02:37.000" -"Farabel","","status-playable","playable","2020-08-03 17:47:28.000" -"Hover - 0100F6800910A000","0100F6800910A000","status-playable;online-broken","playable","2022-09-20 12:54:46.000" -"DragoDino","","gpu;nvdec;status-ingame","ingame","2020-08-03 20:49:16.000" -"Rift Keeper - 0100AC600D898000","0100AC600D898000","status-playable","playable","2022-09-20 19:48:20.000" -"Melbits World - 01000FA010340000","01000FA010340000","status-menus;nvdec;online","menus","2021-11-26 13:51:22.000" -"60 Parsecs! - 010010100FF14000","010010100FF14000","status-playable","playable","2022-09-17 11:01:17.000" -"Warhammer Quest 2","","status-playable","playable","2020-08-04 15:28:03.000" -"Rescue Tale - 01003C400AD42000","01003C400AD42000","status-playable","playable","2022-09-20 18:40:18.000" -"Akuto","","status-playable","playable","2020-08-04 19:43:27.000" -"Demon Pit - 010084600F51C000","010084600F51C000","status-playable;nvdec","playable","2022-09-19 13:35:15.000" -"Regions of Ruin","","status-playable","playable","2020-08-05 11:38:58.000" -"Roombo: First Blood","","nvdec;status-playable","playable","2020-08-05 12:11:37.000" -"Mountain Rescue Simulator - 01009DB00D6E0000","01009DB00D6E0000","status-playable","playable","2022-09-20 16:36:48.000" -"Mad Games Tycoon - 010061E00EB1E000","010061E00EB1E000","status-playable","playable","2022-09-20 14:23:14.000" -"Down to Hell - 0100B6600FE06000","0100B6600FE06000","gpu;status-ingame;nvdec","ingame","2022-09-19 14:01:26.000" -"Funny Bunny Adventures","","status-playable","playable","2020-08-05 13:46:56.000" -"Crazy Zen Mini Golf","","status-playable","playable","2020-08-05 14:00:00.000" -"Drawngeon: Dungeons of Ink and Paper - 0100B7E0102E4000","0100B7E0102E4000","gpu;status-ingame","ingame","2022-09-19 15:41:25.000" -"Farming Simulator 20 - 0100EB600E914000","0100EB600E914000","nvdec;status-playable","playable","2021-06-13 10:52:44.000" -"DreamBall","","UE4;crash;gpu;status-ingame","ingame","2020-08-05 14:45:25.000" -"DEMON'S TILT - 0100BE800E6D8000","0100BE800E6D8000","status-playable","playable","2022-09-19 13:22:46.000" -"Heroland","","status-playable","playable","2020-08-05 15:35:39.000" -"Double Switch - 25th Anniversary Edition - 0100FC000EE10000","0100FC000EE10000","status-playable;nvdec","playable","2022-09-19 13:41:50.000" -"Ultimate Racing 2D","","status-playable","playable","2020-08-05 17:27:09.000" -"THOTH","","status-playable","playable","2020-08-05 18:35:28.000" -"SUPER ROBOT WARS X","","online;status-playable","playable","2020-08-05 19:18:51.000" -"Aborigenus","","status-playable","playable","2020-08-05 19:47:24.000" -"140","","status-playable","playable","2020-08-05 20:01:33.000" -"Goken","","status-playable","playable","2020-08-05 20:22:38.000" -"Maitetsu: Pure Station - 0100D9900F220000","0100D9900F220000","status-playable","playable","2022-09-20 15:12:49.000" -"Super Mega Space Blaster Special Turbo","","online;status-playable","playable","2020-08-06 12:13:25.000" -"Squidlit","","status-playable","playable","2020-08-06 12:38:32.000" -"Stories Untold - 010074400F6A8000","010074400F6A8000","status-playable;nvdec","playable","2022-12-22 01:08:46.000" -"Super Saurio Fly","","nvdec;status-playable","playable","2020-08-06 13:12:14.000" -"Hero Express","","nvdec;status-playable","playable","2020-08-06 13:23:43.000" -"Demolish & Build - 010099D00D1A4000","010099D00D1A4000","status-playable","playable","2021-06-13 15:27:26.000" -"Masquerada: Songs and Shadows - 0100113008262000","0100113008262000","status-playable","playable","2022-09-20 15:18:54.000" -"Dreaming Canvas - 010058B00F3C0000","010058B00F3C0000","UE4;gpu;status-ingame","ingame","2021-06-13 22:50:07.000" -"Time Tenshi","","","","2020-08-06 14:38:37.000" -"FoxyLand 2","","status-playable","playable","2020-08-06 14:41:30.000" -"Nicole - 0100A95012668000","0100A95012668000","status-playable;audout","playable","2022-10-05 16:41:44.000" -"Spiral Memoria -The Summer I Meet Myself-","","","","2020-08-06 15:19:11.000" -"Warhammer 40,000: Space Wolf - 0100E5600D7B2000","0100E5600D7B2000","status-playable;online-broken","playable","2022-09-20 21:11:20.000" -"KukkoroDays - 010022801242C000","010022801242C000","status-menus;crash","menus","2021-11-25 08:52:56.000" -"Shadows 2: Perfidia","","status-playable","playable","2020-08-07 12:43:46.000" -"Murasame No Sword Breaker PV","","","","2020-08-07 12:54:21.000" -"Escape from Chernobyl - 0100FEF00F0AA000","0100FEF00F0AA000","status-boots;crash","boots","2022-09-19 21:36:58.000" -"198X","","status-playable","playable","2020-08-07 13:24:38.000" -"Orn: The Tiny Forest Sprite","","UE4;gpu;status-ingame","ingame","2020-08-07 14:25:30.000" -"Oddworld: Stranger's Wrath HD - 01002EA00ABBA000","01002EA00ABBA000","status-menus;crash;nvdec;loader-allocator","menus","2021-11-23 09:23:21.000" -"Just Glide","","status-playable","playable","2020-08-07 17:38:10.000" -"Ember - 010041A00FEC6000","010041A00FEC6000","status-playable;nvdec","playable","2022-09-19 21:16:11.000" -"Crazy Strike Bowling EX","","UE4;gpu;nvdec;status-ingame","ingame","2020-08-07 18:15:59.000" -"requesting accessibility in the main UI","","","","2020-08-08 00:09:05.000" -"Invisible Fist","","status-playable","playable","2020-08-08 13:25:52.000" -"Nicky: The Home Alone Golf Ball","","status-playable","playable","2020-08-08 13:45:39.000" -"KING OF FIGHTERS R-2","","","","2020-08-09 12:39:55.000" -"The Walking Dead: Season Two","","status-playable","playable","2020-08-09 12:57:06.000" -"Yoru, tomosu","","","","2020-08-09 12:57:28.000" -"Zero Zero Zero Zero","","","","2020-08-09 13:14:58.000" -"Duke of Defense","","","","2020-08-09 13:34:52.000" -"Himno","","","","2020-08-09 13:51:57.000" -"The Walking Dead: A New Frontier - 010056E00B4F4000","010056E00B4F4000","status-playable","playable","2022-09-21 13:40:48.000" -"Cruel Bands Career","","","","2020-08-09 15:00:25.000" -"CARRION","","crash;status-nothing","nothing","2020-08-13 17:15:12.000" -"CODE SHIFTER","","status-playable","playable","2020-08-09 15:20:55.000" -"Ultra Hat Dimension - 01002D4012222000","01002D4012222000","services;audio;status-menus","menus","2021-11-18 09:05:20.000" -"Root Film","","","","2020-08-09 17:47:35.000" -"NAIRI: Tower of Shirin","","nvdec;status-playable","playable","2020-08-09 19:49:12.000" -"Panzer Paladin - 01004AE0108E0000","01004AE0108E0000","status-playable","playable","2021-05-05 18:26:00.000" -"Sinless","","nvdec;status-playable","playable","2020-08-09 20:18:55.000" -"Aviary Attorney: Definitive Edition","","status-playable","playable","2020-08-09 20:32:12.000" -"Lumini","","status-playable","playable","2020-08-09 20:45:09.000" -"Music Racer","","status-playable","playable","2020-08-10 08:51:23.000" -"Curious Cases","","status-playable","playable","2020-08-10 09:30:48.000" -"7th Sector","","nvdec;status-playable","playable","2020-08-10 14:22:14.000" -"Ash of Gods: Redemption","","deadlock;status-nothing","nothing","2020-08-10 18:08:32.000" -"The Turing Test - 0100EA100F516000","0100EA100F516000","status-playable;nvdec","playable","2022-09-21 13:24:07.000" -"The Town of Light - 010058000A576000","010058000A576000","gpu;status-playable","playable","2022-09-21 12:51:34.000" -"The Park","","UE4;crash;gpu;status-ingame","ingame","2020-12-18 12:50:07.000" -"Rogue Legacy","","status-playable","playable","2020-08-10 19:17:28.000" -"Nerved - 01008B0010160000","01008B0010160000","status-playable;UE4","playable","2022-09-20 17:14:03.000" -"Super Korotama - 010000D00F81A000","010000D00F81A000","status-playable","playable","2021-06-06 19:06:22.000" -"Mosaic","","status-playable","playable","2020-08-11 13:07:35.000" -"Pumped BMX Pro - 01009AE00B788000","01009AE00B788000","status-playable;nvdec;online-broken","playable","2022-09-20 17:40:50.000" -"The Dark Crystal","","status-playable","playable","2020-08-11 13:43:41.000" -"Ageless","","","","2020-08-11 13:52:24.000" -"EQQO - 0100E95010058000","0100E95010058000","UE4;nvdec;status-playable","playable","2021-06-13 23:10:51.000" -"LAST FIGHT - 01009E100BDD6000","01009E100BDD6000","status-playable","playable","2022-09-20 13:54:55.000" -"Neverending Nightmares - 0100F79012600000","0100F79012600000","crash;gpu;status-boots","boots","2021-04-24 01:43:35.000" -"Monster Jam Steel Titans - 010095C00F354000","010095C00F354000","status-menus;crash;nvdec;UE4","menus","2021-11-14 09:45:38.000" -"Star Story: The Horizon Escape","","status-playable","playable","2020-08-11 22:31:38.000" -"LOCO-SPORTS - 0100BA000FC9C000","0100BA000FC9C000","status-playable","playable","2022-09-20 14:09:30.000" -"Eclipse: Edge of Light","","status-playable","playable","2020-08-11 23:06:29.000" -"Psikyo Shooting Stars Alpha - 01007A200F2E2000","01007A200F2E2000","32-bit;status-playable","playable","2021-04-13 12:03:43.000" -"Monster Energy Supercross - The Official Videogame 3 - 010097800EA20000","010097800EA20000","UE4;audout;nvdec;online;status-playable","playable","2021-06-14 12:37:54.000" -"Musou Orochi 2 Ultimate","","crash;nvdec;status-boots","boots","2021-04-09 19:39:16.000" -"Alien Cruise","","status-playable","playable","2020-08-12 13:56:05.000" -"KUNAI - 010035A00DF62000","010035A00DF62000","status-playable;nvdec","playable","2022-09-20 13:48:34.000" -"Haunted Dungeons: Hyakki Castle","","status-playable","playable","2020-08-12 14:21:48.000" -"Tangledeep","","crash;status-boots","boots","2021-01-05 04:08:41.000" -"Azuran Tales: Trials","","status-playable","playable","2020-08-12 15:23:07.000" -"LOST ORBIT: Terminal Velocity - 010054600AC74000","010054600AC74000","status-playable","playable","2021-06-14 12:21:12.000" -"Monster Blast - 0100E2D0128E6000","0100E2D0128E6000","gpu;status-ingame","ingame","2023-09-02 20:02:32.000" -"Need a Packet?","","status-playable","playable","2020-08-12 16:09:01.000" -"Downwell - 010093D00C726000","010093D00C726000","status-playable","playable","2021-04-25 20:05:24.000" -"Dex","","nvdec;status-playable","playable","2020-08-12 16:48:12.000" -"Magicolors","","status-playable","playable","2020-08-12 18:39:11.000" -"Jisei: The First Case HD - 010038D011F08000","010038D011F08000","audio;status-playable","playable","2022-10-05 11:43:33.000" -"Mittelborg: City of Mages","","status-playable","playable","2020-08-12 19:58:06.000" -"Psikyo Shooting Stars Bravo - 0100D7400F2E4000","0100D7400F2E4000","32-bit;status-playable","playable","2021-06-14 12:09:07.000" -"STAB STAB STAB!","","","","2020-08-13 16:39:00.000" -"fault - milestone one","","nvdec;status-playable","playable","2021-03-24 10:41:49.000" -"Gerrrms","","status-playable","playable","2020-08-15 11:32:52.000" -"Aircraft Evolution - 0100E95011FDC000","0100E95011FDC000","nvdec;status-playable","playable","2021-06-14 13:30:18.000" -"Creaks","","status-playable","playable","2020-08-15 12:20:52.000" -"ARCADE FUZZ","","status-playable","playable","2020-08-15 12:37:36.000" -"Esports powerful pro yakyuu 2020 - 010073000FE18000","010073000FE18000","gpu;status-ingame;crash;Needs More Attention","ingame","2024-04-29 05:34:14.000" -"Arcade Archives ALPHA MISSION - 01005DD00BE08000","01005DD00BE08000","online;status-playable","playable","2021-04-15 09:20:43.000" -"Arcade Archives ALPINE SKI - 010083800DC70000","010083800DC70000","online;status-playable","playable","2021-04-15 09:28:46.000" -"Arcade Archives ARGUS - 010014F001DE2000","010014F001DE2000","online;status-playable","playable","2021-04-16 06:51:25.000" -"Arcade Archives Armed F - 010014F001DE2000","010014F001DE2000","online;status-playable","playable","2021-04-16 07:00:17.000" -"Arcade Archives ATHENA - 0100BEC00C7A2000","0100BEC00C7A2000","online;status-playable","playable","2021-04-16 07:10:12.000" -"Arcade Archives Atomic Robo-Kid - 0100426001DE4000","0100426001DE4000","online;status-playable","playable","2021-04-16 07:20:29.000" -"Arcade Archives BOMB JACK - 0100192009824000","0100192009824000","online;status-playable","playable","2021-04-16 09:48:26.000" -"Arcade Archives CLU CLU LAND - 0100EDC00E35A000","0100EDC00E35A000","online;status-playable","playable","2021-04-16 10:00:42.000" -"Arcade Archives EXCITEBIKE","","","","2020-08-19 12:08:03.000" -"Arcade Archives FRONT LINE - 0100496006EC8000","0100496006EC8000","online;status-playable","playable","2021-05-05 14:10:49.000" -"Arcade Archives ICE CLIMBER - 01007D200D3FC000","01007D200D3FC000","online;status-playable","playable","2021-05-05 14:18:34.000" -"Arcade Archives IKARI WARRIORS - 010049400C7A8000","010049400C7A8000","online;status-playable","playable","2021-05-05 14:24:46.000" -"Arcade Archives IMAGE FIGHT - 010008300C978000","010008300C978000","online;status-playable","playable","2021-05-05 14:31:21.000" -"Arcade Archives MOON CRESTA - 01000BE001DD8000","01000BE001DD8000","online;status-playable","playable","2021-05-05 14:39:29.000" -"Arcade Archives Ninja Spirit - 01002F300D2C6000","01002F300D2C6000","online;status-playable","playable","2021-05-05 14:45:31.000" -"Arcade Archives POOYAN - 0100A6E00D3F8000","0100A6E00D3F8000","online;status-playable","playable","2021-05-05 17:58:19.000" -"Arcade Archives PSYCHO SOLDIER - 01000D200C7A4000","01000D200C7A4000","online;status-playable","playable","2021-05-05 18:02:19.000" -"Arcade Archives ROAD FIGHTER - 0100FBA00E35C000","0100FBA00E35C000","online;status-playable","playable","2021-05-05 18:09:17.000" -"Arcade Archives ROUTE 16 - 010060000BF7C000","010060000BF7C000","online;status-playable","playable","2021-05-05 18:40:41.000" -"Arcade Archives Shusse Ozumo - 01007A4009834000","01007A4009834000","online;status-playable","playable","2021-05-05 17:52:25.000" -"Arcade Archives Solomon's Key - 01008C900982E000","01008C900982E000","online;status-playable","playable","2021-04-19 16:27:18.000" -"Arcade Archives TERRA FORCE - 0100348001DE6000","0100348001DE6000","online;status-playable","playable","2021-04-16 20:03:27.000" -"Arcade Archives THE NINJA WARRIORS - 0100DC000983A000","0100DC000983A000","online;slow;status-ingame","ingame","2021-04-16 19:54:56.000" -"Arcade Archives TIME PILOT - 0100AF300D2E8000","0100AF300D2E8000","online;status-playable","playable","2021-04-16 19:22:31.000" -"Arcade Archives URBAN CHAMPION - 010042200BE0C000","010042200BE0C000","online;status-playable","playable","2021-04-16 10:20:03.000" -"Arcade Archives WILD WESTERN - 01001B000D8B6000","01001B000D8B6000","online;status-playable","playable","2021-04-16 10:11:36.000" -"Arcade Archives GRADIUS","","","","2020-08-19 13:42:45.000" -"Evergate","","","","2020-08-19 22:28:07.000" -"Naught - 0100103011894000","0100103011894000","UE4;status-playable","playable","2021-04-26 13:31:45.000" -"Vitamin Connection ","","","","2020-08-19 23:18:42.000" -"Rock of Ages 3: Make & Break - 0100A1B00DB36000","0100A1B00DB36000","status-playable;UE4","playable","2022-10-06 12:18:29.000" -"Cubicity - 010040D011D04000","010040D011D04000","status-playable","playable","2021-06-14 14:19:51.000" -"Anima Gate of Memories: The Nameless Chronicles - 01007A400B3F8000","01007A400B3F8000","status-playable","playable","2021-06-14 14:33:06.000" -"Big Dipper - 0100A42011B28000","0100A42011B28000","status-playable","playable","2021-06-14 15:08:19.000" -"Dodo Peak - 01001770115C8000","01001770115C8000","status-playable;nvdec;UE4","playable","2022-10-04 16:13:05.000" -"Cube Creator X - 010001600D1E8000","010001600D1E8000","status-menus;crash","menus","2021-11-25 08:53:28.000" -"Raji An Ancient Epic","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 10:05:25.000" -"Red Siren : Space Defense - 010045400D73E000","010045400D73E000","UE4;status-playable","playable","2021-04-25 21:21:29.000" -"Shanky: The Vegan's Nightmare - 01000C00CC10000","","status-playable","playable","2021-01-26 15:03:55.000" -"Cricket 19 - 010022D00D4F0000","010022D00D4F0000","gpu;status-ingame","ingame","2021-06-14 14:56:07.000" -"Florence","","status-playable","playable","2020-09-05 01:22:30.000" -"Banner of the Maid - 010013C010C5C000","010013C010C5C000","status-playable","playable","2021-06-14 15:23:37.000" -"Super Loop Drive - 01003E300FCAE000","01003E300FCAE000","status-playable;nvdec;UE4","playable","2022-09-22 10:58:05.000" -"Buried Stars","","status-playable","playable","2020-09-07 14:11:58.000" -"FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition - 0100CE4010AAC000","0100CE4010AAC000","status-playable","playable","2023-04-02 23:39:12.000" -"Go All Out - 01000C800FADC000","01000C800FADC000","status-playable;online-broken","playable","2022-09-21 19:16:34.000" -"This Strange Realm of Mine","","status-playable","playable","2020-08-28 12:07:24.000" -"Silent World","","status-playable","playable","2020-08-28 13:45:13.000" -"Alder's Blood","","status-playable","playable","2020-08-28 15:15:23.000" -"Red Death","","status-playable","playable","2020-08-30 13:07:37.000" -"3000th Duel - 0100FB5010D2E000","0100FB5010D2E000","status-playable","playable","2022-09-21 17:12:08.000" -"Rise of Insanity","","status-playable","playable","2020-08-30 15:42:14.000" -"Darksiders Genesis - 0100F2300D4BA000","0100F2300D4BA000","status-playable;nvdec;online-broken;UE4;ldn-broken","playable","2022-09-21 18:06:25.000" -"Space Blaze","","status-playable","playable","2020-08-30 16:18:05.000" -"Two Point Hospital - 010031200E044000","010031200E044000","status-ingame;crash;nvdec","ingame","2022-09-22 11:22:23.000" -"Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate","","status-playable","playable","2020-08-31 13:52:21.000" -"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz","","status-playable","playable","2020-08-31 14:17:42.000" -"Cat Girl Without Salad: Amuse-Bouche - 010076000C86E000","010076000C86E000","status-playable","playable","2022-09-03 13:01:47.000" -"moon","","","","2020-08-31 15:46:23.000" -"Lines XL","","status-playable","playable","2020-08-31 17:48:23.000" -"Knightin'+","","status-playable","playable","2020-08-31 18:18:21.000" -"King Lucas - 0100E6B00FFBA000","0100E6B00FFBA000","status-playable","playable","2022-09-21 19:43:23.000" -"Skulls of the Shogun: Bone-a-fide Edition","","status-playable","playable","2020-08-31 18:58:12.000" -"SEGA AGES SONIC THE HEDGEHOG 2 - 01000D200C614000","01000D200C614000","status-playable","playable","2022-09-21 20:26:35.000" -"Devil May Cry 3 Special Edition - 01007B600D5BC000","01007B600D5BC000","status-playable;nvdec","playable","2024-07-08 12:33:23.000" -"Double Dragon & Kunio-Kun: Retro Brawler Bundle","","status-playable","playable","2020-09-01 12:48:46.000" -"Lost Horizon","","status-playable","playable","2020-09-01 13:41:22.000" -"Unlock the King","","status-playable","playable","2020-09-01 13:58:27.000" -"Vasilis","","status-playable","playable","2020-09-01 15:05:35.000" -"Mathland","","status-playable","playable","2020-09-01 15:40:06.000" -"MEGAMAN ZERO/ZX LEGACY COLLECTION - 010025C00D410000","010025C00D410000","status-playable","playable","2021-06-14 16:17:32.000" -"Afterparty - 0100DB100BBCE000","0100DB100BBCE000","status-playable","playable","2022-09-22 12:23:19.000" -"Tiny Racer - 01005D0011A40000","01005D0011A40000","status-playable","playable","2022-10-07 11:13:03.000" -"Skully - 0100D7B011654000","0100D7B011654000","status-playable;nvdec;UE4","playable","2022-10-06 13:52:59.000" -"Megadimension Neptunia VII","","32-bit;nvdec;status-playable","playable","2020-12-17 20:56:03.000" -"Kingdom Rush - 0100A280121F6000","0100A280121F6000","status-nothing;32-bit;crash;Needs More Attention","nothing","2022-10-05 12:34:00.000" -"Cubers: Arena - 010082E00F1CE000","010082E00F1CE000","status-playable;nvdec;UE4","playable","2022-10-04 16:05:40.000" -"Air Missions: HIND","","status-playable","playable","2020-12-13 10:16:45.000" -"Fairy Tail - 0100CF900FA3E000","0100CF900FA3E000","status-playable;nvdec","playable","2022-10-04 23:00:32.000" -"Sentinels of Freedom - 01009E500D29C000","01009E500D29C000","status-playable","playable","2021-06-14 16:42:19.000" -"SAMURAI SHOWDOWN NEOGEO COLLECTION - 0100F6800F48E000","0100F6800F48E000","nvdec;status-playable","playable","2021-06-14 17:12:56.000" -"Rugby Challenge 4 - 010009B00D33C000","010009B00D33C000","slow;status-playable;online-broken;UE4","playable","2022-10-06 12:45:53.000" -"Neon Abyss - 0100BAB01113A000","0100BAB01113A000","status-playable","playable","2022-10-05 15:59:44.000" -"Max & The Book of Chaos","","status-playable","playable","2020-09-02 12:24:43.000" -"Family Mysteries: Poisonous Promises - 0100034012606000","0100034012606000","audio;status-menus;crash","menus","2021-11-26 12:35:06.000" -"Interrogation: You will be deceived - 010041501005E000","010041501005E000","status-playable","playable","2022-10-05 11:40:10.000" -"Instant Sports Summer Games","","gpu;status-menus","menus","2020-09-02 13:39:28.000" -"AvoCuddle","","status-playable","playable","2020-09-02 14:50:13.000" -"Be-A Walker","","slow;status-ingame","ingame","2020-09-02 15:00:31.000" -"Soccer, Tactics & Glory - 010095C00F9DE000","010095C00F9DE000","gpu;status-ingame","ingame","2022-09-26 17:15:58.000" -"The Great Perhaps","","status-playable","playable","2020-09-02 15:57:04.000" -"Volta-X - 0100A7900E79C000","0100A7900E79C000","status-playable;online-broken","playable","2022-10-07 12:20:51.000" -"Hero Hours Contract","","","","2020-09-03 03:13:22.000" -"Starlit Adventures Golden Stars","","status-playable","playable","2020-11-21 12:14:43.000" -"Superliminal","","status-playable","playable","2020-09-03 13:20:50.000" -"Robozarro","","status-playable","playable","2020-09-03 13:33:40.000" -"QuietMansion2","","status-playable","playable","2020-09-03 14:59:35.000" -"DISTRAINT 2","","status-playable","playable","2020-09-03 16:08:12.000" -"Bloodstained: Curse of the Moon 2","","status-playable","playable","2020-09-04 10:56:27.000" -"Deadly Premonition 2 - 0100BAC011928000","0100BAC011928000","status-playable","playable","2021-06-15 14:12:36.000" -"CrossCode - 01003D90058FC000","01003D90058FC000","status-playable","playable","2024-02-17 10:23:19.000" -"Metro: Last Light Redux - 0100F0400E850000","0100F0400E850000","slow;status-ingame;nvdec;vulkan-backend-bug","ingame","2023-11-01 11:53:52.000" -"Soul Axiom Rebooted","","nvdec;slow;status-ingame","ingame","2020-09-04 12:41:01.000" -"Portal Dogs","","status-playable","playable","2020-09-04 12:55:46.000" -"Bucket Knight","","crash;status-ingame","ingame","2020-09-04 13:11:24.000" -"Arcade Archives LIFE FORCE","","status-playable","playable","2020-09-04 13:26:25.000" -"Stela - 01002DE01043E000","01002DE01043E000","UE4;status-playable","playable","2021-06-15 13:28:34.000" -"7 Billion Humans","","32-bit;status-playable","playable","2020-12-17 21:04:58.000" -"Rack N Ruin","","status-playable","playable","2020-09-04 15:20:26.000" -"Piffle","","","","2020-09-06 00:07:53.000" -"BATTOJUTSU","","","","2020-09-06 00:07:58.000" -"Super Battle Cards","","","","2020-09-06 00:08:01.000" -"Hayfever - 0100EA900FB2C000","0100EA900FB2C000","status-playable;loader-allocator","playable","2022-09-22 17:35:41.000" -"Save Koch - 0100C8300FA90000","0100C8300FA90000","status-playable","playable","2022-09-26 17:06:56.000" -"MY HERO ONE'S JUSTICE 2","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-18 14:08:47.000" -"Deep Diving Adventures - 010026800FA88000","010026800FA88000","status-playable","playable","2022-09-22 16:43:37.000" -"Trials of Mana Demo - 0100E1D00FBDE000","0100E1D00FBDE000","status-playable;nvdec;UE4;demo;vulkan-backend-bug","playable","2022-09-26 18:00:02.000" -"Sky Racket","","status-playable","playable","2020-09-07 12:22:24.000" -"LA-MULANA 1 & 2 - 0100E5D00F4AE000","0100E5D00F4AE000","status-playable","playable","2022-09-22 17:56:36.000" -"Exit the Gungeon - 0100DD30110CC000","0100DD30110CC000","status-playable","playable","2022-09-22 17:04:43.000" -"Super Mario 3D All-Stars - 010049900F546000","010049900F546000","services-horizon;slow;status-ingame;vulkan;amd-vendor-bug","ingame","2024-05-07 02:38:16.000" -"Cupid Parasite - 0100F7E00DFC8000","0100F7E00DFC8000","gpu;status-ingame","ingame","2023-08-21 05:52:36.000" -"Toraware no Paruma Deluxe Edition","","","","2020-09-20 09:34:41.000" -"Uta no☆Prince-sama♪ Repeat Love - 010024200E00A000","010024200E00A000","status-playable;nvdec","playable","2022-12-09 09:21:51.000" -"Clock Zero ~Shuuen no Ichibyou~ Devote - 01008C100C572000","01008C100C572000","status-playable;nvdec","playable","2022-12-04 22:19:14.000" -"Dear Magi - Mahou Shounen Gakka -","","status-playable","playable","2020-11-22 16:45:16.000" -"Reine des Fleurs","","cpu;crash;status-boots","boots","2020-09-27 18:50:39.000" -"Kaeru Batake DE Tsukamaete","","","","2020-09-20 17:06:57.000" -"Koi no Hanasaku Hyakkaen","","32-bit;gpu;nvdec;status-ingame","ingame","2020-10-03 14:17:10.000" -"Brothers Conflict: Precious Baby","","","","2020-09-20 19:13:24.000" -"Dairoku: Ayakashimori - 010061300DF48000","010061300DF48000","status-nothing;Needs Update;loader-allocator","nothing","2021-11-30 05:09:38.000" -"Yunohana Spring! - Mellow Times -","","audio;crash;status-menus","menus","2020-09-27 19:27:40.000" -"Nil Admirari no Tenbin: Irodori Nadeshiko","","","","2020-09-21 15:59:26.000" -"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~","","cpu;crash;status-boots","boots","2020-09-27 19:01:25.000" -"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~","","crash;status-menus","menus","2020-10-04 06:12:08.000" -"Kin'iro no Corda Octave","","status-playable","playable","2020-09-22 13:23:12.000" -"Moujuutsukai to Ouji-sama ~Flower & Snow~","","","","2020-09-22 17:22:03.000" -"Spooky Ghosts Dot Com - 0100C6100D75E000","0100C6100D75E000","status-playable","playable","2021-06-15 15:16:11.000" -"NBA 2K21 - 0100E24011D1E000","0100E24011D1E000","gpu;status-boots","boots","2022-10-05 15:31:51.000" -"Commander Keen in Keen Dreams - 0100C4D00D16A000","0100C4D00D16A000","gpu;status-ingame","ingame","2022-08-04 20:34:20.000" -"Minecraft - 0100D71004694000","0100D71004694000","status-ingame;crash;ldn-broken","ingame","2024-09-29 12:08:59.000" -"PGA TOUR 2K21 - 010053401147C000","010053401147C000","deadlock;status-ingame;nvdec","ingame","2022-10-05 21:53:50.000" -"The Executioner - 0100C2E0129A6000","0100C2E0129A6000","nvdec;status-playable","playable","2021-01-23 00:31:28.000" -"Tamiku - 010008A0128C4000","010008A0128C4000","gpu;status-ingame","ingame","2021-06-15 20:06:55.000" -"Shinobi, Koi Utsutsu","","","","2020-09-23 11:04:27.000" -"Hades - 0100535012974000","0100535012974000","status-playable;vulkan","playable","2022-10-05 10:45:21.000" -"Wolfenstein: Youngblood - 01003BD00CAAE000","01003BD00CAAE000","status-boots;online-broken","boots","2024-07-12 23:49:20.000" -"Taimumari: Complete Edition - 010040A00EA26000","010040A00EA26000","status-playable","playable","2022-12-06 13:34:49.000" -"Sangoku Rensenki ~Otome no Heihou!~","","gpu;nvdec;status-ingame","ingame","2020-10-17 19:13:14.000" -"Norn9 ~Norn + Nonette~ LOFN - 01001A500AD6A000","01001A500AD6A000","status-playable;nvdec;vulkan-backend-bug","playable","2022-12-09 09:29:16.000" -"Disaster Report 4: Summer Memories - 010020700E2A2000","010020700E2A2000","status-playable;nvdec;UE4","playable","2022-09-27 19:41:31.000" -"No Straight Roads - 01009F3011004000","01009F3011004000","status-playable;nvdec","playable","2022-10-05 17:01:38.000" -"Gnosia - 01008EF013A7C000","01008EF013A7C000","status-playable","playable","2021-04-05 17:20:30.000" -"Shin Hayarigami 1 and 2 Pack","","","","2020-09-25 15:56:19.000" -"Gothic Murder: Adventure That Changes Destiny","","deadlock;status-ingame;crash","ingame","2022-09-30 23:16:53.000" -"Grand Theft Auto 3 - 05B1D2ABD3D30000","05B1D2ABD3D30000","services;status-nothing;crash;homebrew","nothing","2023-05-01 22:01:58.000" -"Super Mario 64 - 054507E0B7552000","054507E0B7552000","status-ingame;homebrew","ingame","2024-03-20 16:57:27.000" -"Satsujin Tantei Jack the Ripper - 0100A4700BC98000","0100A4700BC98000","status-playable","playable","2021-06-21 16:32:54.000" -"Yoshiwara Higanbana Kuon no Chigiri","","nvdec;status-playable","playable","2020-10-17 19:14:46.000" -"Katakoi Contrast - collection of branch - - 01007FD00DB20000","01007FD00DB20000","status-playable;nvdec","playable","2022-12-09 09:41:26.000" -"Tlicolity Eyes - twinkle showtime - - 010019500DB1E000","010019500DB1E000","gpu;status-boots","boots","2021-05-29 19:43:44.000" -"Omega Vampire","","nvdec;status-playable","playable","2020-10-17 19:15:35.000" -"Iris School of Wizardry - Vinculum Hearts - - 0100AD300B786000","0100AD300B786000","status-playable","playable","2022-12-05 13:11:15.000" -"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou - 0100EA100DF92000","0100EA100DF92000","32-bit;status-playable;nvdec","playable","2022-12-05 13:19:12.000" -"Undead Darlings ~no cure for love~","","","","2020-09-30 08:34:06.000" -"LEGO Marvel Super Heroes 2 - 0100D3A00409E000","0100D3A00409E000","status-nothing;crash","nothing","2023-03-02 17:12:33.000" -"RollerCoaster Tycoon 3: Complete Edition - 01004900113F8000","01004900113F8000","32-bit;status-playable","playable","2022-10-17 14:18:01.000" -"R.B.I. Baseball 20 - 010061400E7D4000","010061400E7D4000","status-playable","playable","2021-06-15 21:16:29.000" -"BATTLESLOTHS","","status-playable","playable","2020-10-03 08:32:22.000" -"Explosive Jake - 01009B7010B42000","01009B7010B42000","status-boots;crash","boots","2021-11-03 07:48:32.000" -"Dezatopia - 0100AFC00E06A000","0100AFC00E06A000","online;status-playable","playable","2021-06-15 21:06:11.000" -"Wordify","","status-playable","playable","2020-10-03 09:01:07.000" -"Wizards: Wand of Epicosity - 0100C7600E77E000","0100C7600E77E000","status-playable","playable","2022-10-07 12:32:06.000" -"Titan Glory - 0100FE801185E000","0100FE801185E000","status-boots","boots","2022-10-07 11:36:40.000" -"Soccer Pinball - 0100B5000E05C000","0100B5000E05C000","UE4;gpu;status-ingame","ingame","2021-06-15 20:56:51.000" -"Steam Tactics - 0100AE100DAFA000","0100AE100DAFA000","status-playable","playable","2022-10-06 16:53:45.000" -"Trover Saves the Universe","","UE4;crash;status-nothing","nothing","2020-10-03 10:25:27.000" -"112th Seed","","status-playable","playable","2020-10-03 10:32:38.000" -"Spitlings - 010042700E3FC000","010042700E3FC000","status-playable;online-broken","playable","2022-10-06 16:42:39.000" -"Unlock the King 2 - 0100A3E011CB0000","0100A3E011CB0000","status-playable","playable","2021-06-15 20:43:55.000" -"Preventive Strike - 010009300D278000","010009300D278000","status-playable;nvdec","playable","2022-10-06 10:55:51.000" -"Hidden - 01004E800F03C000","01004E800F03C000","slow;status-ingame","ingame","2022-10-05 10:56:53.000" -"Pulstario - 0100861012474000","0100861012474000","status-playable","playable","2022-10-06 11:02:01.000" -"Frontline Zed","","status-playable","playable","2020-10-03 12:55:59.000" -"bayala - the game - 0100194010422000","0100194010422000","status-playable","playable","2022-10-04 14:09:25.000" -"City Bus Driving Simulator - 01005E501284E000","01005E501284E000","status-playable","playable","2021-06-15 21:25:59.000" -"Memory Lane - 010062F011E7C000","010062F011E7C000","status-playable;UE4","playable","2022-10-05 14:31:03.000" -"Minefield - 0100B7500F756000","0100B7500F756000","status-playable","playable","2022-10-05 15:03:29.000" -"Double Kick Heroes","","gpu;status-ingame","ingame","2020-10-03 14:33:59.000" -"Little Shopping","","status-playable","playable","2020-10-03 16:34:35.000" -"Car Quest - 01007BD00AE70000","01007BD00AE70000","deadlock;status-menus","menus","2021-11-18 08:59:18.000" -"RogueCube - 0100C7300C0EC000","0100C7300C0EC000","status-playable","playable","2021-06-16 12:16:42.000" -"Timber Tennis Versus","","online;status-playable","playable","2020-10-03 17:07:15.000" -"Swimsanity! - 010049D00C8B0000","010049D00C8B0000","status-menus;online","menus","2021-11-26 14:27:16.000" -"Dininho Adventures","","status-playable","playable","2020-10-03 17:25:51.000" -"Rhythm of the Gods","","UE4;crash;status-nothing","nothing","2020-10-03 17:39:59.000" -"Rainbows, toilets & unicorns","","nvdec;status-playable","playable","2020-10-03 18:08:18.000" -"Super Mario Bros. 35 - 0100277011F1A000","0100277011F1A000","status-menus;online-broken","menus","2022-08-07 16:27:25.000" -"Bohemian Killing - 0100AD1010CCE000","0100AD1010CCE000","status-playable;vulkan-backend-bug","playable","2022-09-26 22:41:37.000" -"Colorgrid","","status-playable","playable","2020-10-04 01:50:52.000" -"Dogurai","","status-playable","playable","2020-10-04 02:40:16.000" -"The Legend of Heroes: Trails of Cold Steel III Demo - 01009B101044C000","01009B101044C000","demo;nvdec;status-playable","playable","2021-04-23 01:07:32.000" -"Star Wars Jedi Knight: Jedi Academy - 01008CA00FAE8000","01008CA00FAE8000","gpu;status-boots","boots","2021-06-16 12:35:30.000" -"Panzer Dragoon: Remake","","status-playable","playable","2020-10-04 04:03:55.000" -"Blackmoor2 - 0100A0A00E660000","0100A0A00E660000","status-playable;online-broken","playable","2022-09-26 20:26:34.000" -"CHAOS CODE -NEW SIGN OF CATASTROPHE- - 01007600115CE000","01007600115CE000","status-boots;crash;nvdec","boots","2022-04-04 12:24:21.000" -"Saints Row IV - 01008D100D43E000","01008D100D43E000","status-playable;ldn-untested;LAN","playable","2023-12-04 18:33:37.000" -"Troubleshooter","","UE4;crash;status-nothing","nothing","2020-10-04 13:46:50.000" -"Children of Zodiarcs","","status-playable","playable","2020-10-04 14:23:33.000" -"VtM Coteries of New York","","status-playable","playable","2020-10-04 14:55:22.000" -"Grand Guilds - 010038100D436000","010038100D436000","UE4;nvdec;status-playable","playable","2021-04-26 12:49:05.000" -"Best Friend Forever","","","","2020-10-04 15:41:42.000" -"Copperbell","","status-playable","playable","2020-10-04 15:54:36.000" -"Deep Sky Derelicts Definitive Edition - 0100C3E00D68E000","0100C3E00D68E000","status-playable","playable","2022-09-27 11:21:08.000" -"Wanba Warriors","","status-playable","playable","2020-10-04 17:56:22.000" -"Mist Hunter - 010059200CC40000","010059200CC40000","status-playable","playable","2021-06-16 13:58:58.000" -"Shinsekai Into the Depths - 01004EE0104F6000","01004EE0104F6000","status-playable","playable","2022-09-28 14:07:51.000" -"ELEA: Paradigm Shift","","UE4;crash;status-nothing","nothing","2020-10-04 19:07:43.000" -"Harukanaru Toki no Naka De 7","","","","2020-10-05 10:12:41.000" -"Saiaku Naru Saiyaku Ningen ni Sasagu","","","","2020-10-05 10:26:45.000" -"planetarian HD ~the reverie of a little planet~","","status-playable","playable","2020-10-17 20:26:20.000" -"Hypnospace Outlaw - 0100959010466000","0100959010466000","status-ingame;nvdec","ingame","2023-08-02 22:46:49.000" -"Dei Gratia no Rashinban - 010071C00CBA4000","010071C00CBA4000","crash;status-nothing","nothing","2021-07-13 02:25:32.000" -"Rogue Company","","","","2020-10-05 17:52:10.000" -"MX Nitro - 0100161009E5C000","0100161009E5C000","status-playable","playable","2022-09-27 22:34:33.000" -"Wanderjahr TryAgainOrWalkAway","","status-playable","playable","2020-12-16 09:46:04.000" -"Pooplers","","status-playable","playable","2020-11-02 11:52:10.000" -"Beyond Enemy Lines: Essentials - 0100B8F00DACA000","0100B8F00DACA000","status-playable;nvdec;UE4","playable","2022-09-26 19:48:16.000" -"Lust for Darkness: Dawn Edition - 0100F0B00F68E000","0100F0B00F68E000","nvdec;status-playable","playable","2021-06-16 13:47:46.000" -"Nerdook Bundle Vol. 1","","gpu;slow;status-ingame","ingame","2020-10-07 14:27:10.000" -"Indie Puzzle Bundle Vol 1 - 0100A2101107C000","0100A2101107C000","status-playable","playable","2022-09-27 22:23:21.000" -"Wurroom","","status-playable","playable","2020-10-07 22:46:21.000" -"Valley - 0100E0E00B108000","0100E0E00B108000","status-playable;nvdec","playable","2022-09-28 19:27:58.000" -"FIFA 21 Legacy Edition - 01000A001171A000","01000A001171A000","gpu;status-ingame;online-broken","ingame","2023-12-11 22:10:19.000" -"Hotline Miami Collection - 0100D0E00E51E000","0100D0E00E51E000","status-playable;nvdec","playable","2022-09-09 16:41:19.000" -"QuakespasmNX","","status-nothing;crash;homebrew","nothing","2022-07-23 19:28:07.000" -"nxquake2","","services;status-nothing;crash;homebrew","nothing","2022-08-04 23:14:04.000" -"ONE PIECE: PIRATE WARRIORS 4 - 01008FE00E2F6000","01008FE00E2F6000","status-playable;online-broken;ldn-untested","playable","2022-09-27 22:55:46.000" -"The Complex - 01004170113D4000","01004170113D4000","status-playable;nvdec","playable","2022-09-28 14:35:41.000" -"Gigantosaurus The Game - 01002C400E526000","01002C400E526000","status-playable;UE4","playable","2022-09-27 21:20:00.000" -"TY the Tasmanian Tiger","","32-bit;crash;nvdec;status-menus","menus","2020-12-17 21:15:00.000" -"Speaking Simulator","","status-playable","playable","2020-10-08 13:00:39.000" -"Pikmin 3 Deluxe Demo - 01001CB0106F8000","01001CB0106F8000","32-bit;crash;demo;gpu;status-ingame","ingame","2021-06-16 18:38:07.000" -"Rascal Fight","","status-playable","playable","2020-10-08 13:23:30.000" -"Rain City","","status-playable","playable","2020-10-08 16:59:03.000" -"Fury Unleashed Demo","","status-playable","playable","2020-10-08 20:09:21.000" -"Bridge 3","","status-playable","playable","2020-10-08 20:47:24.000" -"RMX Real Motocross","","status-playable","playable","2020-10-08 21:06:15.000" -"Birthday of Midnight","","","","2020-10-09 09:43:24.000" -"WARSAW","","","","2020-10-09 10:31:40.000" -"Candy Raid: The Factory","","","","2020-10-09 10:43:39.000" -"World for Two","","","","2020-10-09 12:37:07.000" -"Voxel Pirates - 0100AFA011068000","0100AFA011068000","status-playable","playable","2022-09-28 22:55:02.000" -"Voxel Galaxy - 0100B1E0100A4000","0100B1E0100A4000","status-playable","playable","2022-09-28 22:45:02.000" -"Journey of the Broken Circle","","","","2020-10-09 13:24:52.000" -"Daggerhood","","","","2020-10-09 13:54:02.000" -"Flipon","","","","2020-10-09 14:23:40.000" -"Nevaeh - 0100C20012A54000","0100C20012A54000","gpu;nvdec;status-ingame","ingame","2021-06-16 17:29:03.000" -"Bookbound Brigade","","status-playable","playable","2020-10-09 14:30:29.000" -"Aery - Sky Castle - 010018E012914000","010018E012914000","status-playable","playable","2022-10-21 17:58:49.000" -"Nickelodeon Kart Racers 2 Grand Prix","","","","2020-10-09 14:54:17.000" -"Issho ni Asobo Koupen chan","","","","2020-10-09 14:57:27.000" -"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o - 010016C011AAA000","010016C011AAA000","status-playable","playable","2023-04-26 09:51:08.000" -"Kono Subarashii Sekai ni Shukufuku wo! Kurenai Densetsu","","","","2020-10-09 15:06:00.000" -"Hide & Dance!","","","","2020-10-09 15:10:06.000" -"Pro Yakyuu Famista 2020","","","","2020-10-09 15:21:25.000" -"METAL MAX Xeno Reborn - 0100E8F00F6BE000","0100E8F00F6BE000","status-playable","playable","2022-12-05 15:33:53.000" -"Ikenfell - 010040900AF46000","010040900AF46000","status-playable","playable","2021-06-16 17:18:44.000" -"Depixtion","","status-playable","playable","2020-10-10 18:52:37.000" -"GREEN The Life Algorithm - 0100DFE00F002000","0100DFE00F002000","status-playable","playable","2022-09-27 21:37:13.000" -"Served! A gourmet race - 0100B2C00E4DA000","0100B2C00E4DA000","status-playable;nvdec","playable","2022-09-28 12:46:00.000" -"OTTTD","","slow;status-ingame","ingame","2020-10-10 19:31:07.000" -"Metamorphosis - 010055200E87E000","010055200E87E000","UE4;audout;gpu;nvdec;status-ingame","ingame","2021-06-16 16:18:11.000" -"Zero Strain - 01004B001058C000","01004B001058C000","services;status-menus;UE4","menus","2021-11-10 07:48:32.000" -"Time Carnage - 01004C500B698000","01004C500B698000","status-playable","playable","2021-06-16 17:57:28.000" -"Spiritfarer - 0100BD400DC52000","0100BD400DC52000","gpu;status-ingame","ingame","2022-10-06 16:31:38.000" -"Street Power Soccer","","UE4;crash;status-boots","boots","2020-11-21 12:28:57.000" -"OZMAFIA!! -vivace-","","","","2020-10-12 10:24:45.000" -"Road to Guangdong","","slow;status-playable","playable","2020-10-12 12:15:32.000" -"Prehistoric Dude","","gpu;status-ingame","ingame","2020-10-12 12:38:48.000" -"MIND Path to Thalamus - 0100F5700C9A8000","0100F5700C9A8000","UE4;status-playable","playable","2021-06-16 17:37:25.000" -"Manifold Garden","","status-playable","playable","2020-10-13 20:27:13.000" -"INMOST - 0100F1401161E000","0100F1401161E000","status-playable","playable","2022-10-05 11:27:40.000" -"G.I. Joe Operation Blackout","","UE4;crash;status-boots","boots","2020-11-21 12:37:44.000" -"Petal Crash","","","","2020-10-14 07:58:02.000" -"Helheim Hassle","","status-playable","playable","2020-10-14 11:38:36.000" -"FuzzBall - 010067600F1A0000","010067600F1A0000","crash;status-nothing","nothing","2021-03-29 20:13:21.000" -"Fight Crab - 01006980127F0000","01006980127F0000","status-playable;online-broken;ldn-untested","playable","2022-10-05 10:24:04.000" -"Faeria - 010069100DB08000","010069100DB08000","status-menus;nvdec;online-broken","menus","2022-10-04 16:44:41.000" -"Escape from Tethys","","status-playable","playable","2020-10-14 22:38:25.000" -"Chinese Parents - 010046F012A04000","010046F012A04000","status-playable","playable","2021-04-08 12:56:41.000" -"Boomerang Fu - 010081A00EE62000","010081A00EE62000","status-playable","playable","2024-07-28 01:12:41.000" -"Bite the Bullet","","status-playable","playable","2020-10-14 23:10:11.000" -"Pretty Princess Magical Coordinate","","status-playable","playable","2020-10-15 11:43:41.000" -"A Short Hike","","status-playable","playable","2020-10-15 00:19:58.000" -"HYPERCHARGE: Unboxed - 0100A8B00F0B4000","0100A8B00F0B4000","status-playable;nvdec;online-broken;UE4;ldn-untested","playable","2022-09-27 21:52:39.000" -"Anima: Gate of Memories - 0100706005B6A000","0100706005B6A000","nvdec;status-playable","playable","2021-06-16 18:13:18.000" -"Perky Little Things - 01005CD012DC0000","01005CD012DC0000","status-boots;crash;vulkan","boots","2024-08-04 07:22:46.000" -"Save Your Nuts - 010091000F72C000","010091000F72C000","status-playable;nvdec;online-broken;UE4","playable","2022-09-27 23:12:02.000" -"Unknown Fate","","slow;status-ingame","ingame","2020-10-15 12:27:42.000" -"Picross S4","","status-playable","playable","2020-10-15 12:33:46.000" -"The Station - 010007F00AF56000","010007F00AF56000","status-playable","playable","2022-09-28 18:15:27.000" -"Liege Dragon - 010041F0128AE000","010041F0128AE000","status-playable","playable","2022-10-12 10:27:03.000" -"G-MODE Archives 06 The strongest ever Julia Miyamoto","","status-playable","playable","2020-10-15 13:06:26.000" -"Prinny: Can I Really Be the Hero? - 01007A0011878000","01007A0011878000","32-bit;status-playable;nvdec","playable","2023-10-22 09:25:25.000" -"Prinny 2: Dawn of Operation Panties, Dood! - 01008FA01187A000","01008FA01187A000","32-bit;status-playable","playable","2022-10-13 12:42:58.000" -"Convoy","","status-playable","playable","2020-10-15 14:43:50.000" -"Fight of Animals","","online;status-playable","playable","2020-10-15 15:08:28.000" -"Strawberry Vinegar - 0100D7E011C64000","0100D7E011C64000","status-playable;nvdec","playable","2022-12-05 16:25:40.000" -"Inside Grass: A little adventure","","status-playable","playable","2020-10-15 15:26:27.000" -"Battle Princess Madelyn Royal Edition - 0100A7500DF64000","0100A7500DF64000","status-playable","playable","2022-09-26 19:14:49.000" -"A HERO AND A GARDEN - 01009E1011EC4000","01009E1011EC4000","status-playable","playable","2022-12-05 16:37:47.000" -"Trials of Mana - 0100D7800E9E0000","0100D7800E9E0000","status-playable;UE4","playable","2022-09-30 21:50:37.000" -"Ultimate Fishing Simulator - 010048901295C000","010048901295C000","status-playable","playable","2021-06-16 18:38:23.000" -"Struggling","","status-playable","playable","2020-10-15 20:37:03.000" -"Samurai Jack Battle Through Time - 01006C600E46E000","01006C600E46E000","status-playable;nvdec;UE4","playable","2022-10-06 13:33:59.000" -"House Flipper - 0100CAE00EB02000","0100CAE00EB02000","status-playable","playable","2021-06-16 18:28:32.000" -"Aokana - Four Rhythms Across the Blue - 0100990011866000","0100990011866000","status-playable","playable","2022-10-04 13:50:26.000" -"NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO - 010084D00CF5E000","010084D00CF5E000","status-playable","playable","2024-06-29 13:04:22.000" -"Where Angels Cry - 010027D011C9C000","010027D011C9C000","gpu;status-ingame;nvdec","ingame","2022-09-30 22:24:47.000" -"The Copper Canyon Dixie Dash - 01000F20102AC000","01000F20102AC000","status-playable;UE4","playable","2022-09-29 11:42:29.000" -"Cloudpunk","","","","2020-10-15 23:03:55.000" -"MotoGP 20 - 01001FA00FBBC000","01001FA00FBBC000","status-playable;ldn-untested","playable","2022-09-29 17:58:01.000" -"Little Town Hero","","status-playable","playable","2020-10-15 23:28:48.000" -"Broken Lines","","status-playable","playable","2020-10-16 00:01:37.000" -"Crown Trick - 0100059012BAE000","0100059012BAE000","status-playable","playable","2021-06-16 19:36:29.000" -"Archaica: Path of LightInd","","crash;status-nothing","nothing","2020-10-16 13:22:26.000" -"Indivisible - 01001D3003FDE000","01001D3003FDE000","status-playable;nvdec","playable","2022-09-29 15:20:57.000" -"Thy Sword - 01000AC011588000","01000AC011588000","status-ingame;crash","ingame","2022-09-30 16:43:14.000" -"Spirit of the North - 01005E101122E000","01005E101122E000","status-playable;UE4","playable","2022-09-30 11:40:47.000" -"Megabyte Punch","","status-playable","playable","2020-10-16 14:07:18.000" -"Book of Demons - 01007A200F452000","01007A200F452000","status-playable","playable","2022-09-29 12:03:43.000" -"80's OVERDRIVE","","status-playable","playable","2020-10-16 14:33:32.000" -"My Universe My Baby","","","","2020-10-17 14:04:01.000" -"Mario Kart Live: Home Circuit - 0100ED100BA3A000","0100ED100BA3A000","services;status-nothing;crash;Needs More Attention","nothing","2022-12-07 22:36:52.000" -"STONE - 010070D00F640000","010070D00F640000","status-playable;UE4","playable","2022-09-30 11:53:32.000" -"Newt One","","status-playable","playable","2020-10-17 21:21:48.000" -"Zoids Wild Blast Unleashed - 010069C0123D8000","010069C0123D8000","status-playable;nvdec","playable","2022-10-15 11:26:59.000" -"KINGDOM HEARTS Melody of Memory DEMO","","","","2020-10-18 14:57:30.000" -"Escape First","","status-playable","playable","2020-10-20 22:46:53.000" -"If My Heart Had Wings - 01001AC00ED72000","01001AC00ED72000","status-playable","playable","2022-09-29 14:54:57.000" -"Felix the Reaper","","nvdec;status-playable","playable","2020-10-20 23:43:03.000" -"War-Torn Dreams","","crash;status-nothing","nothing","2020-10-21 11:36:16.000" -"TT Isle of Man 2 - 010000400F582000","010000400F582000","gpu;status-ingame;nvdec;online-broken","ingame","2022-09-30 22:13:05.000" -"Kholat - 0100F680116A2000","0100F680116A2000","UE4;nvdec;status-playable","playable","2021-06-17 11:52:48.000" -"Dungeon of the Endless - 010034300F0E2000","010034300F0E2000","nvdec;status-playable","playable","2021-05-27 19:16:26.000" -"Gravity Rider Zero - 01002C2011828000","01002C2011828000","gpu;status-ingame;vulkan-backend-bug","ingame","2022-09-29 13:56:13.000" -"Oddworld: Munch's Oddysee - 0100BB500EE3C000","0100BB500EE3C000","gpu;nvdec;status-ingame","ingame","2021-06-17 12:11:50.000" -"Five Nights at Freddy's: Help Wanted - 0100F7901118C000","0100F7901118C000","status-playable;UE4","playable","2022-09-29 12:40:09.000" -"Gates of Hell","","slow;status-playable","playable","2020-10-22 12:44:26.000" -"Concept Destruction - 0100971011224000","0100971011224000","status-playable","playable","2022-09-29 12:28:56.000" -"Zenge","","status-playable","playable","2020-10-22 13:23:57.000" -"Water Balloon Mania","","status-playable","playable","2020-10-23 20:20:59.000" -"The Persistence - 010050101127C000","010050101127C000","nvdec;status-playable","playable","2021-06-06 19:15:40.000" -"The House of Da Vinci 2","","status-playable","playable","2020-10-23 20:47:17.000" -"The Experiment: Escape Room - 01006050114D4000","01006050114D4000","gpu;status-ingame","ingame","2022-09-30 13:20:35.000" -"Telling Lies","","status-playable","playable","2020-10-23 21:14:51.000" -"She Sees Red - 01000320110C2000","01000320110C2000","status-playable;nvdec","playable","2022-09-30 11:30:15.000" -"Golf With Your Friends - 01006FB00EBE0000","01006FB00EBE0000","status-playable;online-broken","playable","2022-09-29 12:55:11.000" -"Island Saver","","nvdec;status-playable","playable","2020-10-23 22:07:02.000" -"Devil May Cry 2 - 01007CF00D5BA000","01007CF00D5BA000","status-playable;nvdec","playable","2023-01-24 23:03:20.000" -"The Otterman Empire - 0100B0101265C000","0100B0101265C000","UE4;gpu;status-ingame","ingame","2021-06-17 12:27:15.000" -"SaGa SCARLET GRACE: AMBITIONS - 010003A00D0B4000","010003A00D0B4000","status-playable","playable","2022-10-06 13:20:31.000" -"REZ PLZ","","status-playable","playable","2020-10-24 13:26:12.000" -"Bossgard - 010076F00EBE4000","010076F00EBE4000","status-playable;online-broken","playable","2022-10-04 14:21:13.000" -"1993 Shenandoah","","status-playable","playable","2020-10-24 13:55:42.000" -"Ori and the Will of the Wisps - 01008DD013200000","01008DD013200000","status-playable","playable","2023-03-07 00:47:13.000" -"WWE 2K Battlegrounds - 010081700EDF4000","010081700EDF4000","status-playable;nvdec;online-broken;UE4","playable","2022-10-07 12:44:40.000" -"Shaolin vs Wutang : Eastern Heroes - 01003AB01062C000","01003AB01062C000","deadlock;status-nothing","nothing","2021-03-29 20:38:54.000" -"Mini Motor Racing X - 01003560119A6000","01003560119A6000","status-playable","playable","2021-04-13 17:54:49.000" -"Secret Files 3","","nvdec;status-playable","playable","2020-10-24 15:32:39.000" -"Othercide - 0100E5900F49A000","0100E5900F49A000","status-playable;nvdec","playable","2022-10-05 19:04:38.000" -"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai","","status-playable","playable","2020-11-12 00:11:50.000" -"Party Hard 2 - 010022801217E000","010022801217E000","status-playable;nvdec","playable","2022-10-05 20:31:48.000" -"Paradise Killer - 01007FB010DC8000","01007FB010DC8000","status-playable;UE4","playable","2022-10-05 19:33:05.000" -"MX vs ATV All Out - 0100218011E7E000","0100218011E7E000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-25 19:51:46.000" -"CastleStorm 2","","UE4;crash;nvdec;status-boots","boots","2020-10-25 11:22:44.000" -"Hotshot Racing - 0100BDE008218000","0100BDE008218000","gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug","ingame","2024-02-04 21:31:17.000" -"Bounty Battle - 0100E1200DC1A000","0100E1200DC1A000","status-playable;nvdec","playable","2022-10-04 14:40:51.000" -"Avicii Invector","","status-playable","playable","2020-10-25 12:12:56.000" -"Ys Origin - 0100F90010882000","0100F90010882000","status-playable;nvdec","playable","2024-04-17 05:07:33.000" -"Kirby Fighters 2 - 0100227010460000","0100227010460000","ldn-works;online;status-playable","playable","2021-06-17 13:06:39.000" -"JUMP FORCE Deluxe Edition - 0100183010F12000","0100183010F12000","status-playable;nvdec;online-broken;UE4","playable","2023-10-01 15:56:05.000" -"The Survivalists","","status-playable","playable","2020-10-27 15:51:13.000" -"Season Match Full Bundle - Parts 1, 2 and 3","","status-playable","playable","2020-10-27 16:15:22.000" -"Moai VI: Unexpected Guests","","slow;status-playable","playable","2020-10-27 16:40:20.000" -"Agatha Christie - The ABC Murders","","status-playable","playable","2020-10-27 17:08:23.000" -"Remothered: Broken Porcelain - 0100FBD00F5F6000","0100FBD00F5F6000","UE4;gpu;nvdec;status-ingame","ingame","2021-06-17 15:13:11.000" -"Need For Speed Hot Pursuit Remastered","","audio;online;slow;status-ingame","ingame","2020-10-27 17:46:58.000" -"WarriOrb - 010032700EAC4000","010032700EAC4000","UE4;status-playable","playable","2021-06-17 15:45:14.000" -"Townsmen - A Kingdom Rebuilt - 010049E00BA34000","010049E00BA34000","status-playable;nvdec","playable","2022-10-14 22:48:59.000" -"Oceanhorn 2 Knights of the Lost Realm - 01006CB010840000","01006CB010840000","status-playable","playable","2021-05-21 18:26:10.000" -"No More Heroes 2 Desperate Struggle - 010071400F204000","010071400F204000","32-bit;status-playable;nvdec","playable","2022-11-19 01:38:13.000" -"No More Heroes - 0100F0400F202000","0100F0400F202000","32-bit;status-playable","playable","2022-09-13 07:44:27.000" -"Rusty Spount Rescue Adventure","","","","2020-10-29 17:06:42.000" -"Pixel Puzzle Makeout League - 010000E00E612000","010000E00E612000","status-playable","playable","2022-10-13 12:34:00.000" -"Futari de! Nyanko Daisensou - 01003C300B274000","01003C300B274000","status-playable","playable","2024-01-05 22:26:52.000" -"MAD RAT DEAD","","","","2020-10-31 13:30:24.000" -"The Language of Love","","Needs Update;crash;status-nothing","nothing","2020-12-03 17:54:00.000" -"Torn Tales - Rebound Edition","","status-playable","playable","2020-11-01 14:11:59.000" -"Spaceland","","status-playable","playable","2020-11-01 14:31:56.000" -"HARDCORE MECHA","","slow;status-playable","playable","2020-11-01 15:06:33.000" -"Barbearian - 0100F7E01308C000","0100F7E01308C000","Needs Update;gpu;status-ingame","ingame","2021-06-28 16:27:50.000" -"INSTANT Chef Party","","","","2020-11-01 23:15:58.000" -"Pikmin 3 Deluxe - 0100F4C009322000","0100F4C009322000","gpu;status-ingame;32-bit;nvdec;Needs Update","ingame","2024-09-03 00:28:26.000" -"Cobra Kai The Karate Kid Saga Continues - 01005790110F0000","01005790110F0000","status-playable","playable","2021-06-17 15:59:13.000" -"Seven Knights -Time Wanderer- - 010018400C24E000","010018400C24E000","status-playable;vulkan-backend-bug","playable","2022-10-13 22:08:54.000" -"Kangokuto Mary Skelter Finale","","audio;crash;status-ingame","ingame","2021-01-09 22:39:28.000" -"Shadowverse Champions Battle - 01002A800C064000","01002A800C064000","status-playable","playable","2022-10-02 22:59:29.000" -"Bakugan Champions of Vestroia","","status-playable","playable","2020-11-06 19:07:39.000" -"Jurassic World Evolution Complete Edition - 010050A011344000","010050A011344000","cpu;status-menus;crash","menus","2023-08-04 18:06:54.000" -"KAMEN RIDER memory of heroez / Premium Sound Edition - 0100A9801180E000","0100A9801180E000","status-playable","playable","2022-12-06 03:14:26.000" -"Shin Megami Tensei III NOCTURNE HD REMASTER - 010045800ED1E000","010045800ED1E000","gpu;status-ingame;Needs Update","ingame","2022-11-03 19:57:01.000" -"FUSER - 0100E1F013674000","0100E1F013674000","status-playable;nvdec;UE4","playable","2022-10-17 20:58:32.000" -"Mad Father","","status-playable","playable","2020-11-12 13:22:10.000" -"Café Enchanté","","status-playable","playable","2020-11-13 14:54:25.000" -"JUST DANCE 2021","","","","2020-11-14 06:22:04.000" -"Medarot Classics Plus Kuwagata Ver","","status-playable","playable","2020-11-21 11:30:40.000" -"Medarot Classics Plus Kabuto Ver","","status-playable","playable","2020-11-21 11:31:18.000" -"Forest Guardian","","","","2020-11-14 17:00:13.000" -"Fantasy Tavern Sextet -Vol.1 New World Days- - 01000E2012F6E000","01000E2012F6E000","gpu;status-ingame;crash;Needs Update","ingame","2022-12-05 16:48:00.000" -"Ary and the Secret of Seasons - 0100C2500CAB6000","0100C2500CAB6000","status-playable","playable","2022-10-07 20:45:09.000" -"Dark Quest 2","","status-playable","playable","2020-11-16 21:34:52.000" -"Cooking Tycoons 2: 3 in 1 Bundle","","status-playable","playable","2020-11-16 22:19:33.000" -"Cooking Tycoons: 3 in 1 Bundle","","status-playable","playable","2020-11-16 22:44:26.000" -"Agent A: A puzzle in disguise","","status-playable","playable","2020-11-16 22:53:27.000" -"ROBOTICS;NOTES DaSH","","status-playable","playable","2020-11-16 23:09:54.000" -"Hunting Simulator 2 - 010061F010C3A000","010061F010C3A000","status-playable;UE4","playable","2022-10-10 14:25:51.000" -"9 Monkeys of Shaolin","","UE4;gpu;slow;status-ingame","ingame","2020-11-17 11:58:43.000" -"Tin & Kuna","","status-playable","playable","2020-11-17 12:16:12.000" -"Seers Isle","","status-playable","playable","2020-11-17 12:28:50.000" -"Royal Roads","","status-playable","playable","2020-11-17 12:54:38.000" -"Rimelands - 01006AC00EE6E000","01006AC00EE6E000","status-playable","playable","2022-10-13 13:32:56.000" -"Mekorama - 0100B360068B2000","0100B360068B2000","gpu;status-boots","boots","2021-06-17 16:37:21.000" -"Need for Speed Hot Pursuit Remastered - 010029B0118E8000","010029B0118E8000","status-playable;online-broken","playable","2024-03-20 21:58:02.000" -"Mech Rage","","status-playable","playable","2020-11-18 12:30:16.000" -"Modern Tales: Age of Invention - 010004900D772000","010004900D772000","slow;status-playable","playable","2022-10-12 11:20:19.000" -"Dead Z Meat - 0100A24011F52000","0100A24011F52000","UE4;services;status-ingame","ingame","2021-04-14 16:50:16.000" -"Along the Edge","","status-playable","playable","2020-11-18 15:00:07.000" -"Country Tales - 0100C1E012A42000","0100C1E012A42000","status-playable","playable","2021-06-17 16:45:39.000" -"Ghost Sweeper - 01004B301108C000","01004B301108C000","status-playable","playable","2022-10-10 12:45:36.000" -"Hyrule Warriors: Age of Calamity - 01002B00111A2000","01002B00111A2000","gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug","ingame","2024-02-28 00:47:00.000" -"Path of Sin: Greed - 01001E500EA16000","01001E500EA16000","status-menus;crash","menus","2021-11-24 08:00:00.000" -"Hoggy 2 - 0100F7300ED2C000","0100F7300ED2C000","status-playable","playable","2022-10-10 13:53:35.000" -"Queen's Quest 4: Sacred Truce - 0100DCF00F13A000","0100DCF00F13A000","status-playable;nvdec","playable","2022-10-13 12:59:21.000" -"ROBOTICS;NOTES ELITE","","status-playable","playable","2020-11-26 10:28:20.000" -"Taiko no Tatsujin Rhythmic Adventure Pack","","status-playable","playable","2020-12-03 07:28:26.000" -"Pinstripe","","status-playable","playable","2020-11-26 10:40:40.000" -"Torchlight III - 010075400DDB8000","010075400DDB8000","status-playable;nvdec;online-broken;UE4","playable","2022-10-14 22:20:17.000" -"Ben 10: Power Trip - 01009CD00E3AA000","01009CD00E3AA000","status-playable;nvdec","playable","2022-10-09 10:52:12.000" -"Zoids Wild Infinity Blast","","","","2020-11-26 16:15:37.000" -"Picross S5 - 0100AC30133EC000","0100AC30133EC000","status-playable","playable","2022-10-17 18:51:42.000" -"Worm Jazz - 01009CD012CC0000","01009CD012CC0000","gpu;services;status-ingame;UE4;regression","ingame","2021-11-10 10:33:04.000" -"TTV2","","status-playable","playable","2020-11-27 13:21:36.000" -"Deadly Days","","status-playable","playable","2020-11-27 13:38:55.000" -"Pumpkin Jack - 01006C10131F6000","01006C10131F6000","status-playable;nvdec;UE4","playable","2022-10-13 12:52:32.000" -"Active Neurons 2 - 01000D1011EF0000","01000D1011EF0000","status-playable","playable","2022-10-07 16:21:42.000" -"Niche - a genetics survival game","","nvdec;status-playable","playable","2020-11-27 14:01:11.000" -"Monstrum - 010039F00EF70000","010039F00EF70000","status-playable","playable","2021-01-31 11:07:26.000" -"TRANSFORMERS: BATTLEGROUNDS - 01005E500E528000","01005E500E528000","online;status-playable","playable","2021-06-17 18:08:19.000" -"UBERMOSH:SANTICIDE","","status-playable","playable","2020-11-27 15:05:01.000" -"SPACE ELITE FORCE","","status-playable","playable","2020-11-27 15:21:05.000" -"Oddworld: New 'n' Tasty - 01005E700ABB8000","01005E700ABB8000","nvdec;status-playable","playable","2021-06-17 17:51:32.000" -"Immortal Realms: Vampire Wars - 010079501025C000","010079501025C000","nvdec;status-playable","playable","2021-06-17 17:41:46.000" -"Horace - 010086D011EB8000","010086D011EB8000","status-playable","playable","2022-10-10 14:03:50.000" -"Maid of Sker : Upscale Resolution not working","","","","2020-11-29 15:36:42.000" -"Professor Rubik's Brain Fitness","","","","2020-11-30 11:22:45.000" -"QV ( キュビ )","","","","2020-11-30 11:22:49.000" -"Double Pug Switch - 0100A5D00C7C0000","0100A5D00C7C0000","status-playable;nvdec","playable","2022-10-10 10:59:35.000" -"Trollhunters: Defenders of Arcadia","","gpu;nvdec;status-ingame","ingame","2020-11-30 13:27:09.000" -"Outbreak: Epidemic - 0100C850130FE000","0100C850130FE000","status-playable","playable","2022-10-13 10:27:31.000" -"Blackjack Hands","","status-playable","playable","2020-11-30 14:04:51.000" -"Piofiore: Fated Memories","","nvdec;status-playable","playable","2020-11-30 14:27:50.000" -"Task Force Kampas","","status-playable","playable","2020-11-30 14:44:15.000" -"Nexomon: Extinction","","status-playable","playable","2020-11-30 15:02:22.000" -"realMyst: Masterpiece Edition","","nvdec;status-playable","playable","2020-11-30 15:25:42.000" -"Neighbours back From Hell - 010065F00F55A000","010065F00F55A000","status-playable;nvdec","playable","2022-10-12 15:36:48.000" -"Sakai and... - 01007F000EB36000","01007F000EB36000","status-playable;nvdec","playable","2022-12-15 13:53:19.000" -"Supraland - 0100A6E01201C000","0100A6E01201C000","status-playable;nvdec;UE4;opengl-backend-bug","playable","2022-10-14 09:49:11.000" -"Ministry of Broadcast - 010069200EB80000","010069200EB80000","status-playable","playable","2022-08-10 00:31:16.000" -"Inertial Drift - 01002BD00F626000","01002BD00F626000","status-playable;online-broken","playable","2022-10-11 12:22:19.000" -"SuperEpic: The Entertainment War - 0100630010252000","0100630010252000","status-playable","playable","2022-10-13 23:02:48.000" -"HARDCORE Maze Cube","","status-playable","playable","2020-12-04 20:01:24.000" -"Firework","","status-playable","playable","2020-12-04 20:20:09.000" -"GORSD","","status-playable","playable","2020-12-04 22:15:21.000" -"Georifters","","UE4;crash;nvdec;status-menus","menus","2020-12-04 22:30:50.000" -"Giraffe and Annika","","UE4;crash;status-ingame","ingame","2020-12-04 22:41:57.000" -"Doodle Derby","","status-boots","boots","2020-12-04 22:51:48.000" -"Good Pizza, Great Pizza","","status-playable","playable","2020-12-04 22:59:18.000" -"HyperBrawl Tournament","","crash;services;status-boots","boots","2020-12-04 23:03:27.000" -"Dustoff Z","","status-playable","playable","2020-12-04 23:22:29.000" -"Embracelet","","status-playable","playable","2020-12-04 23:45:00.000" -"Cook, Serve, Delicious! 3?! - 0100B82010B6C000","0100B82010B6C000","status-playable","playable","2022-10-09 12:09:34.000" -"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS - 0100EAE010560000","0100EAE010560000","status-playable;online-broken;vulkan-backend-bug","playable","2022-10-09 11:20:50.000" -"Yomi wo Saku Hana","","","","2020-12-05 07:14:40.000" -"Immortals Fenyx Rising - 01004A600EC0A000","01004A600EC0A000","gpu;status-menus;crash","menus","2023-02-24 16:19:55.000" -"Supermarket Shriek - 0100C01012654000","0100C01012654000","status-playable","playable","2022-10-13 23:19:20.000" -"Absolute Drift","","status-playable","playable","2020-12-10 14:02:44.000" -"CASE 2: Animatronics Survival - 0100C4C0132F8000","0100C4C0132F8000","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-09 11:45:03.000" -"BIG-Bobby-Car - The Big Race","","slow;status-playable","playable","2020-12-10 14:25:06.000" -"Asterix & Obelix XXL: Romastered - 0100F46011B50000","0100F46011B50000","gpu;status-ingame;nvdec;opengl","ingame","2023-08-16 21:22:06.000" -"Chicken Police - Paint it RED!","","nvdec;status-playable","playable","2020-12-10 15:10:11.000" -"Descenders","","gpu;status-ingame","ingame","2020-12-10 15:22:36.000" -"Outbreak: The Nightmare Chronicles - 01006EE013100000","01006EE013100000","status-playable","playable","2022-10-13 10:41:57.000" -"#Funtime","","status-playable","playable","2020-12-10 16:54:35.000" -"My Little Dog Adventure","","gpu;status-ingame","ingame","2020-12-10 17:47:37.000" -"n Verlore Verstand","","slow;status-ingame","ingame","2020-12-10 18:00:28.000" -"Oneiros - 0100463013246000","0100463013246000","status-playable","playable","2022-10-13 10:17:22.000" -"#KillAllZombies","","slow;status-playable","playable","2020-12-16 01:50:25.000" -"Connection Haunted","","slow;status-playable","playable","2020-12-10 18:57:14.000" -"Goosebumps Dead of Night","","gpu;nvdec;status-ingame","ingame","2020-12-10 20:02:16.000" -"#Halloween, Super Puzzles Dream","","nvdec;status-playable","playable","2020-12-10 20:43:58.000" -"The Long Return","","slow;status-playable","playable","2020-12-10 21:05:10.000" -"The Bluecoats: North & South","","nvdec;status-playable","playable","2020-12-10 21:22:29.000" -"Puyo Puyo Tetris 2 - 010038E011940000","010038E011940000","status-playable;ldn-untested","playable","2023-09-26 11:35:25.000" -"Yuppie Psycho: Executive Edition","","crash;status-ingame","ingame","2020-12-11 10:37:06.000" -"Root Double -Before Crime * After Days- Xtend Edition - 0100936011556000","0100936011556000","status-nothing;crash","nothing","2022-02-05 02:03:49.000" -"Hidden Folks","","","","2020-12-11 11:48:16.000" -"KINGDOM HEARTS Melody of Memory","","crash;nvdec;status-ingame","ingame","2021-03-03 17:34:12.000" -"Unhatched","","status-playable","playable","2020-12-11 12:11:09.000" -"Tropico 6 - 0100FBE0113CC000","0100FBE0113CC000","status-playable;nvdec;UE4","playable","2022-10-14 23:21:03.000" -"Star Renegades","","nvdec;status-playable","playable","2020-12-11 12:19:23.000" -"Alpaca Ball: Allstars","","nvdec;status-playable","playable","2020-12-11 12:26:29.000" -"Nordlicht","","","","2020-12-11 12:37:12.000" -"Sakuna: Of Rice and Ruin - 0100B1400E8FE000","0100B1400E8FE000","status-playable","playable","2023-07-24 13:47:13.000" -"Re:Turn - One Way Trip - 0100F03011616000","0100F03011616000","status-playable","playable","2022-08-29 22:42:53.000" -"L.O.L. Surprise! Remix: We Rule the World - 0100F2B0123AE000","0100F2B0123AE000","status-playable","playable","2022-10-11 22:48:03.000" -"They Bleed Pixels - 01001C2010D08000","01001C2010D08000","gpu;status-ingame","ingame","2024-08-09 05:52:18.000" -"If Found...","","status-playable","playable","2020-12-11 13:43:14.000" -"Gibbous - A Cthulhu Adventure - 0100D95012C0A000","0100D95012C0A000","status-playable;nvdec","playable","2022-10-10 12:57:17.000" -"Duck Life Adventure - 01005BC012C66000","01005BC012C66000","status-playable","playable","2022-10-10 11:27:03.000" -"Sniper Elite 4 - 010007B010FCC000","010007B010FCC000","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2024-06-18 17:53:15.000" -"Serious Sam Collection - 010007D00D43A000","010007D00D43A000","status-boots;vulkan-backend-bug","boots","2022-10-13 13:53:34.000" -"Slide Stars - 010010D011E1C000","010010D011E1C000","status-menus;crash","menus","2021-11-25 08:53:43.000" -"Tank Mechanic Simulator","","status-playable","playable","2020-12-11 15:10:45.000" -"Five Dates","","nvdec;status-playable","playable","2020-12-11 15:17:11.000" -"MagiCat","","status-playable","playable","2020-12-11 15:22:07.000" -"Family Feud 2021 - 010060200FC44000","010060200FC44000","status-playable;online-broken","playable","2022-10-10 11:42:21.000" -"LUNA The Shadow Dust","","","","2020-12-11 15:26:55.000" -"Paw Patrol: Might Pups Save Adventure Bay! - 01001F201121E000","01001F201121E000","status-playable","playable","2022-10-13 12:17:55.000" -"30-in-1 Game Collection - 010056D00E234000","010056D00E234000","status-playable;online-broken","playable","2022-10-15 17:47:09.000" -"Truck Driver - 0100CB50107BA000","0100CB50107BA000","status-playable;online-broken","playable","2022-10-20 17:42:33.000" -"Bridge Constructor: The Walking Dead","","gpu;slow;status-ingame","ingame","2020-12-11 17:31:32.000" -"Speed 3: Grand Prix - 0100F18010BA0000","0100F18010BA0000","status-playable;UE4","playable","2022-10-20 12:32:31.000" -"Wonder Blade","","status-playable","playable","2020-12-11 17:55:31.000" -"Super Blood Hockey","","status-playable","playable","2020-12-11 20:01:41.000" -"Who Wants to Be a Millionaire?","","crash;status-nothing","nothing","2020-12-11 20:22:42.000" -"My Aunt is a Witch - 01002C6012334000","01002C6012334000","status-playable","playable","2022-10-19 09:21:17.000" -"Flatland: Prologue","","status-playable","playable","2020-12-11 20:41:12.000" -"Fantasy Friends - 010017C012726000","010017C012726000","status-playable","playable","2022-10-17 19:42:39.000" -"MO:Astray","","crash;status-ingame","ingame","2020-12-11 21:45:44.000" -"Wartile Complete Edition","","UE4;crash;gpu;status-menus","menus","2020-12-11 21:56:10.000" -"Super Punch Patrol - 01001F90122B2000","01001F90122B2000","status-playable","playable","2024-07-12 19:49:02.000" -"Chronos","","UE4;gpu;nvdec;status-ingame","ingame","2020-12-11 22:16:35.000" -"Going Under","","deadlock;nvdec;status-ingame","ingame","2020-12-11 22:29:46.000" -"Castle Crashers Remastered - 010001300D14A000","010001300D14A000","gpu;status-boots","boots","2024-08-10 09:21:20.000" -"Morbid: The Seven Acolytes - 010040E00F642000","010040E00F642000","status-playable","playable","2022-08-09 17:21:58.000" -"Elrador Creatures","","slow;status-playable","playable","2020-12-12 12:35:35.000" -"Sam & Max Save the World","","status-playable","playable","2020-12-12 13:11:51.000" -"Quiplash 2 InterLASHional - 0100AF100EE76000","0100AF100EE76000","status-playable;online-working","playable","2022-10-19 17:43:45.000" -"Monster Truck Championship - 0100D30010C42000","0100D30010C42000","slow;status-playable;nvdec;online-broken;UE4","playable","2022-10-18 23:16:51.000" -"Liberated: Enhanced Edition - 01003A90133A6000","01003A90133A6000","gpu;status-ingame;nvdec","ingame","2024-07-04 04:48:48.000" -"Empire of Sin","","nvdec","","2020-12-12 13:48:05.000" -"Girabox","","status-playable","playable","2020-12-12 13:55:05.000" -"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate - 01007430122D0000","01007430122D0000","status-playable;nvdec","playable","2022-10-20 11:44:36.000" -"2048 Battles","","status-playable","playable","2020-12-12 14:21:25.000" -"Reaper: Tale of a Pale Swordsman","","status-playable","playable","2020-12-12 15:12:23.000" -"Demong Hunter","","status-playable","playable","2020-12-12 15:27:08.000" -"Rise and Shine","","status-playable","playable","2020-12-12 15:56:43.000" -"12 Labours of Hercules II: The Cretan Bull - 0100B1A010014000","0100B1A010014000","cpu;status-nothing;32-bit;crash","nothing","2022-12-07 13:43:10.000" -"#womenUp, Super Puzzles Dream","","status-playable","playable","2020-12-12 16:57:25.000" -"#NoLimitFantasy, Super Puzzles Dream","","nvdec;status-playable","playable","2020-12-12 17:21:32.000" -"2urvive - 01007550131EE000","01007550131EE000","status-playable","playable","2022-11-17 13:49:37.000" -"2weistein – The Curse of the Red Dragon - 0100E20012886000","0100E20012886000","status-playable;nvdec;UE4","playable","2022-11-18 14:47:07.000" -"64","","status-playable","playable","2020-12-12 21:31:58.000" -"4x4 Dirt Track","","status-playable","playable","2020-12-12 21:41:42.000" -"Aeolis Tournament","","online;status-playable","playable","2020-12-12 22:02:14.000" -"Adventures of Pip","","nvdec;status-playable","playable","2020-12-12 22:11:55.000" -"9th Dawn III","","status-playable","playable","2020-12-12 22:27:27.000" -"Ailment","","status-playable","playable","2020-12-12 22:30:41.000" -"Adrenaline Rush - Miami Drive","","status-playable","playable","2020-12-12 22:49:50.000" -"Adventures of Chris","","status-playable","playable","2020-12-12 23:00:02.000" -"Akuarium","","slow;status-playable","playable","2020-12-12 23:43:36.000" -"Alchemist's Castle","","status-playable","playable","2020-12-12 23:54:08.000" -"Angry Video Game Nerd I & II Deluxe","","crash;status-ingame","ingame","2020-12-12 23:59:54.000" -"SENTRY","","status-playable","playable","2020-12-13 12:00:24.000" -"Squeakers","","status-playable","playable","2020-12-13 12:13:05.000" -"ALPHA","","status-playable","playable","2020-12-13 12:17:45.000" -"Shoot 1UP DX","","status-playable","playable","2020-12-13 12:32:47.000" -"Animal Hunter Z","","status-playable","playable","2020-12-13 12:50:35.000" -"Star99 - 0100E6B0115FC000","0100E6B0115FC000","status-menus;online","menus","2021-11-26 14:18:51.000" -"Alwa's Legacy","","status-playable","playable","2020-12-13 13:00:57.000" -"TERROR SQUID - 010070C00FB56000","010070C00FB56000","status-playable;online-broken","playable","2023-10-30 22:29:29.000" -"Animal Fight Club","","gpu;status-ingame","ingame","2020-12-13 13:13:33.000" -"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban! - 010093100DA04000","010093100DA04000","gpu;status-ingame","ingame","2023-09-22 10:21:46.000" -"Dokapon UP! Dreamy Roulette","","","","2020-12-13 14:53:27.000" -"ANIMUS","","status-playable","playable","2020-12-13 15:11:47.000" -"Pretty Princess Party - 01007F00128CC000","01007F00128CC000","status-playable","playable","2022-10-19 17:23:58.000" -"John Wick Hex - 01007090104EC000","01007090104EC000","status-playable","playable","2022-08-07 08:29:12.000" -"Animal Up","","status-playable","playable","2020-12-13 15:39:02.000" -"Derby Stallion","","","","2020-12-13 15:47:01.000" -"Ankh Guardian - Treasure of the Demon's Temple","","status-playable","playable","2020-12-13 15:55:49.000" -"Police X Heroine Lovepatrina! Love na Rhythm de Taihoshimasu!","","","","2020-12-13 16:12:56.000" -"Klondike Solitaire","","status-playable","playable","2020-12-13 16:17:27.000" -"Apocryph","","gpu;status-ingame","ingame","2020-12-13 23:24:10.000" -"Apparition","","nvdec;slow;status-ingame","ingame","2020-12-13 23:57:04.000" -"Tiny Gladiators","","status-playable","playable","2020-12-14 00:09:43.000" -"Aperion Cyberstorm","","status-playable","playable","2020-12-14 00:40:16.000" -"Cthulhu Saves Christmas","","status-playable","playable","2020-12-14 00:58:55.000" -"Kagamihara/Justice - 0100D58012FC2000","0100D58012FC2000","crash;status-nothing","nothing","2021-06-21 16:41:29.000" -"Greedroid","","status-playable","playable","2020-12-14 11:14:32.000" -"Aqua Lungers","","crash;status-ingame","ingame","2020-12-14 11:25:57.000" -"Atomic Heist - 01005FE00EC4E000","01005FE00EC4E000","status-playable","playable","2022-10-16 21:24:32.000" -"Nexoria: Dungeon Rogue Heroes - 0100B69012EC6000","0100B69012EC6000","gpu;status-ingame","ingame","2021-10-04 18:41:29.000" -"Armed 7 DX","","status-playable","playable","2020-12-14 11:49:56.000" -"Ord.","","status-playable","playable","2020-12-14 11:59:06.000" -"Commandos 2 HD Remaster - 010065A01158E000","010065A01158E000","gpu;status-ingame;nvdec","ingame","2022-08-10 21:52:27.000" -"Atomicrops - 0100AD30095A4000","0100AD30095A4000","status-playable","playable","2022-08-06 10:05:07.000" -"Rabi-Ribi - 01005BF00E4DE000","01005BF00E4DE000","status-playable","playable","2022-08-06 17:02:44.000" -"Assault Chainguns KM","","crash;gpu;status-ingame","ingame","2020-12-14 12:48:34.000" -"Attack of the Toy Tanks","","slow;status-ingame","ingame","2020-12-14 12:59:12.000" -"AstroWings SpaceWar","","status-playable","playable","2020-12-14 13:10:44.000" -"ATOMIK RunGunJumpGun","","status-playable","playable","2020-12-14 13:19:24.000" -"Arrest of a stone Buddha - 0100184011B32000","0100184011B32000","status-nothing;crash","nothing","2022-12-07 16:55:00.000" -"Midnight Evil - 0100A1200F20C000","0100A1200F20C000","status-playable","playable","2022-10-18 22:55:19.000" -"Awakening of Cthulhu - 0100085012D64000","0100085012D64000","UE4;status-playable","playable","2021-04-26 13:03:07.000" -"Axes - 0100DA3011174000","0100DA3011174000","status-playable","playable","2021-04-08 13:01:58.000" -"ASSAULT GUNNERS HD Edition","","","","2020-12-14 14:47:09.000" -"Shady Part of Me - 0100820013612000","0100820013612000","status-playable","playable","2022-10-20 11:31:55.000" -"A Frog Game","","status-playable","playable","2020-12-14 16:09:53.000" -"A Dark Room","","gpu;status-ingame","ingame","2020-12-14 16:14:28.000" -"A Sound Plan","","crash;status-boots","boots","2020-12-14 16:46:21.000" -"Actual Sunlight","","gpu;status-ingame","ingame","2020-12-14 17:18:41.000" -"Acthung! Cthulhu Tactics","","status-playable","playable","2020-12-14 18:40:27.000" -"ATOMINE","","gpu;nvdec;slow;status-playable","playable","2020-12-14 18:56:50.000" -"Adventure Llama","","status-playable","playable","2020-12-14 19:32:24.000" -"Minoria - 0100FAE010864000","0100FAE010864000","status-playable","playable","2022-08-06 18:50:50.000" -"Adventure Pinball Bundle","","slow;status-playable","playable","2020-12-14 20:31:53.000" -"Aery - Broken Memories - 0100087012810000","0100087012810000","status-playable","playable","2022-10-04 13:11:52.000" -"Fobia","","status-playable","playable","2020-12-14 21:05:23.000" -"Alchemic Jousts - 0100F5400AB6C000","0100F5400AB6C000","gpu;status-ingame","ingame","2022-12-08 15:06:28.000" -"Akash Path of the Five","","gpu;nvdec;status-ingame","ingame","2020-12-14 22:33:12.000" -"Witcheye","","status-playable","playable","2020-12-14 22:56:08.000" -"Zombie Driver","","nvdec;status-playable","playable","2020-12-14 23:15:10.000" -"Keen: One Girl Army","","status-playable","playable","2020-12-14 23:19:52.000" -"AFL Evolution 2 - 01001B400D334000","01001B400D334000","slow;status-playable;online-broken;UE4","playable","2022-12-07 12:45:56.000" -"Elden: Path of the Forgotten","","status-playable","playable","2020-12-15 00:33:19.000" -"Desire remaster ver.","","crash;status-boots","boots","2021-01-17 02:34:37.000" -"Alluris - 0100AC501122A000","0100AC501122A000","gpu;status-ingame;UE4","ingame","2023-08-02 23:13:50.000" -"Almightree the Last Dreamer","","slow;status-playable","playable","2020-12-15 13:59:03.000" -"Windscape - 010059900BA3C000","010059900BA3C000","status-playable","playable","2022-10-21 11:49:42.000" -"Warp Shift","","nvdec;status-playable","playable","2020-12-15 14:48:48.000" -"Alphaset by POWGI","","status-playable","playable","2020-12-15 15:15:15.000" -"Storm Boy - 010040D00BCF4000","010040D00BCF4000","status-playable","playable","2022-10-20 14:15:06.000" -"Fire & Water","","status-playable","playable","2020-12-15 15:43:20.000" -"Animated Jigsaws Collection","","nvdec;status-playable","playable","2020-12-15 15:58:34.000" -"More Dark","","status-playable","playable","2020-12-15 16:01:06.000" -"Clea","","crash;status-ingame","ingame","2020-12-15 16:22:56.000" -"Animal Fun for Toddlers and Kids","","services;status-boots","boots","2020-12-15 16:45:29.000" -"Brick Breaker","","crash;status-ingame","ingame","2020-12-15 17:03:59.000" -"Anode","","status-playable","playable","2020-12-15 17:18:58.000" -"Animal Pairs - Matching & Concentration Game for Toddlers & Kids - 010033C0121DC000","010033C0121DC000","services;status-boots","boots","2021-11-29 23:43:14.000" -"Animals for Toddlers","","services;status-boots","boots","2020-12-15 17:27:27.000" -"Stellar Interface - 01005A700C954000","01005A700C954000","status-playable","playable","2022-10-20 13:44:33.000" -"Anime Studio Story","","status-playable","playable","2020-12-15 18:14:05.000" -"Brick Breaker","","nvdec;online;status-playable","playable","2020-12-15 18:26:23.000" -"Anti-Hero Bundle - 0100596011E20000","0100596011E20000","status-playable;nvdec","playable","2022-10-21 20:10:30.000" -"Alt-Frequencies","","status-playable","playable","2020-12-15 19:01:33.000" -"Tanuki Justice - 01007A601318C000","01007A601318C000","status-playable;opengl","playable","2023-02-21 18:28:10.000" -"Norman's Great Illusion","","status-playable","playable","2020-12-15 19:28:24.000" -"Welcome to Primrose Lake - 0100D7F010B94000","0100D7F010B94000","status-playable","playable","2022-10-21 11:30:57.000" -"Dream","","status-playable","playable","2020-12-15 19:55:07.000" -"Lofi Ping Pong","","crash;status-ingame","ingame","2020-12-15 20:09:22.000" -"Antventor","","nvdec;status-playable","playable","2020-12-15 20:09:27.000" -"Space Pioneer - 010047B010260000","010047B010260000","status-playable","playable","2022-10-20 12:24:37.000" -"Death and Taxes","","status-playable","playable","2020-12-15 20:27:49.000" -"Deleveled","","slow;status-playable","playable","2020-12-15 21:02:29.000" -"Jenny LeClue - Detectivu","","crash;status-nothing","nothing","2020-12-15 21:07:07.000" -"Biz Builder Delux","","slow;status-playable","playable","2020-12-15 21:36:25.000" -"Creepy Tale","","status-playable","playable","2020-12-15 21:58:03.000" -"Among Us - 0100B0C013912000","0100B0C013912000","status-menus;online;ldn-broken","menus","2021-09-22 15:20:17.000" -"Spinch - 010076D0122A8000","010076D0122A8000","status-playable","playable","2024-07-12 19:02:10.000" -"Carto - 0100810012A1A000","0100810012A1A000","status-playable","playable","2022-09-04 15:37:06.000" -"Laraan","","status-playable","playable","2020-12-16 12:45:48.000" -"Spider Solitaire","","status-playable","playable","2020-12-16 16:19:30.000" -"Sin Slayers - 01006FE010438000","01006FE010438000","status-playable","playable","2022-10-20 11:53:52.000" -"AO Tennis 2 - 010047000E9AA000","010047000E9AA000","status-playable;online-broken","playable","2022-09-17 12:05:07.000" -"Area 86","","status-playable","playable","2020-12-16 16:45:52.000" -"Art Sqool - 01006AA013086000","01006AA013086000","status-playable;nvdec","playable","2022-10-16 20:42:37.000" -"Utopia 9 - A Volatile Vacation","","nvdec;status-playable","playable","2020-12-16 17:06:42.000" -"Arrog","","status-playable","playable","2020-12-16 17:20:50.000" -"Warlocks 2: God Slayers","","status-playable","playable","2020-12-16 17:36:50.000" -"Artifact Adventure Gaiden DX","","status-playable","playable","2020-12-16 17:49:25.000" -"Asemblance","","UE4;gpu;status-ingame","ingame","2020-12-16 18:01:23.000" -"Death Tales","","status-playable","playable","2020-12-17 10:55:52.000" -"Asphalt 9: Legends - 01007B000C834000","01007B000C834000","services;status-menus;crash;online-broken","menus","2022-12-07 13:28:29.000" -"Barbarous! Tavern of Emyr - 01003350102E2000","01003350102E2000","status-playable","playable","2022-10-16 21:50:24.000" -"Baila Latino - 010076B011EC8000","010076B011EC8000","status-playable","playable","2021-04-14 16:40:24.000" -"Unit 4","","status-playable","playable","2020-12-16 18:54:13.000" -"Ponpu","","status-playable","playable","2020-12-16 19:09:34.000" -"ATOM RPG - 0100B9400FA38000","0100B9400FA38000","status-playable;nvdec","playable","2022-10-22 10:11:48.000" -"Automachef","","status-playable","playable","2020-12-16 19:51:25.000" -"Croc's World 2","","status-playable","playable","2020-12-16 20:01:40.000" -"Ego Protocol","","nvdec;status-playable","playable","2020-12-16 20:16:35.000" -"Azure Reflections - 01006FB00990E000","01006FB00990E000","nvdec;online;status-playable","playable","2021-04-08 13:18:25.000" -"Back to Bed","","nvdec;status-playable","playable","2020-12-16 20:52:04.000" -"Azurebreak Heroes","","status-playable","playable","2020-12-16 21:26:17.000" -"Marooners - 010044600FDF0000","010044600FDF0000","status-playable;nvdec;online-broken","playable","2022-10-18 21:35:26.000" -"BaconMan - 0100EAF00E32E000","0100EAF00E32E000","status-menus;crash;nvdec","menus","2021-11-20 02:36:21.000" -"Peaky Blinders: Mastermind - 010002100CDCC000","010002100CDCC000","status-playable","playable","2022-10-19 16:56:35.000" -"Crash Drive 2","","online;status-playable","playable","2020-12-17 02:45:46.000" -"Blood will be Spilled","","nvdec;status-playable","playable","2020-12-17 03:02:03.000" -"Nefarious","","status-playable","playable","2020-12-17 03:20:33.000" -"Blacksea Odyssey - 01006B400C178000","01006B400C178000","status-playable;nvdec","playable","2022-10-16 22:14:34.000" -"Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive","","status-playable","playable","2020-12-17 11:22:50.000" -"Life of Boris: Super Slav","","status-ingame","ingame","2020-12-17 11:40:05.000" -"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo","","nvdec;status-playable","playable","2020-12-17 11:43:10.000" -"Baron: Fur Is Gonna Fly - 010039C0106C6000","010039C0106C6000","status-boots;crash","boots","2022-02-06 02:05:43.000" -"Deployment - 01000BF00B6BC000","01000BF00B6BC000","slow;status-playable;online-broken","playable","2022-10-17 16:23:59.000" -"PixelJunk Eden 2","","crash;status-ingame","ingame","2020-12-17 11:55:52.000" -"Batbarian: Testament of the Primordials","","status-playable","playable","2020-12-17 12:00:59.000" -"Abyss of The Sacrifice - 010047F012BE2000","010047F012BE2000","status-playable;nvdec","playable","2022-10-21 13:56:28.000" -"Nightmares from the Deep 2: The Siren's Call - 01006E700B702000","01006E700B702000","status-playable;nvdec","playable","2022-10-19 10:58:53.000" -"Vera Blanc: Full Moon","","audio;status-playable","playable","2020-12-17 12:09:30.000" -"Linelight","","status-playable","playable","2020-12-17 12:18:07.000" -"Battle Hunters - 0100A3B011EDE000","0100A3B011EDE000","gpu;status-ingame","ingame","2022-11-12 09:19:17.000" -"Day and Night","","status-playable","playable","2020-12-17 12:30:51.000" -"Zombie's Cool","","status-playable","playable","2020-12-17 12:41:26.000" -"Battle of Kings","","slow;status-playable","playable","2020-12-17 12:45:23.000" -"Ghostrunner","","UE4;crash;gpu;nvdec;status-ingame","ingame","2020-12-17 13:01:59.000" -"Battleground - 0100650010DD4000","0100650010DD4000","status-ingame;crash","ingame","2021-09-06 11:53:23.000" -"Little Racer - 0100E6D00E81C000","0100E6D00E81C000","status-playable","playable","2022-10-18 16:41:13.000" -"Battle Planet - Judgement Day","","status-playable","playable","2020-12-17 14:06:20.000" -"Dokuro","","nvdec;status-playable","playable","2020-12-17 14:47:09.000" -"Reflection of Mine","","audio;status-playable","playable","2020-12-17 15:06:37.000" -"Foregone","","deadlock;status-ingame","ingame","2020-12-17 15:26:53.000" -"Choices That Matter: And The Sun Went Out","","status-playable","playable","2020-12-17 15:44:08.000" -"BATTLLOON","","status-playable","playable","2020-12-17 15:48:23.000" -"Grim Legends: The Forsaken Bride - 010009F011F90000","010009F011F90000","status-playable;nvdec","playable","2022-10-18 13:14:06.000" -"Glitch's Trip","","status-playable","playable","2020-12-17 16:00:57.000" -"Maze","","status-playable","playable","2020-12-17 16:13:58.000" -"Bayonetta - 010076F0049A2000","010076F0049A2000","status-playable;audout","playable","2022-11-20 15:51:59.000" -"Gnome More War","","status-playable","playable","2020-12-17 16:33:07.000" -"Fin and the Ancient Mystery","","nvdec;status-playable","playable","2020-12-17 16:40:39.000" -"Nubarron: The adventure of an unlucky gnome","","status-playable","playable","2020-12-17 16:45:17.000" -"Survive! Mr. Cube - 010029A00AEB0000","010029A00AEB0000","status-playable","playable","2022-10-20 14:44:47.000" -"Saboteur SiO","","slow;status-ingame","ingame","2020-12-17 16:59:49.000" -"Flowlines VS","","status-playable","playable","2020-12-17 17:01:53.000" -"Beat Me! - 01002D20129FC000","01002D20129FC000","status-playable;online-broken","playable","2022-10-16 21:59:26.000" -"YesterMorrow","","crash;status-ingame","ingame","2020-12-17 17:15:25.000" -"Drums","","status-playable","playable","2020-12-17 17:21:51.000" -"Gnomes Garden: Lost King - 010036C00D0D6000","010036C00D0D6000","deadlock;status-menus","menus","2021-11-18 11:14:03.000" -"Edna & Harvey: Harvey's New Eyes - 0100ABE00DB4E000","0100ABE00DB4E000","nvdec;status-playable","playable","2021-01-26 14:36:08.000" -"Roarr! - 010068200C5BE000","010068200C5BE000","status-playable","playable","2022-10-19 23:57:45.000" -"PHOGS!","","online;status-playable","playable","2021-01-18 15:18:37.000" -"Idle Champions of the Forgotten Realms","","online;status-boots","boots","2020-12-17 18:24:57.000" -"Polyroll - 010074B00ED32000","010074B00ED32000","gpu;status-boots","boots","2021-07-01 16:16:50.000" -"Control Ultimate Edition - Cloud Version - 0100041013360000","0100041013360000","Needs Update;crash;services;status-nothing","nothing","2021-04-18 22:34:06.000" -"Wilmot's Warehouse - 010071F00D65A000","010071F00D65A000","audio;gpu;status-ingame","ingame","2021-06-02 17:24:32.000" -"Jack N' Jill DX","","","","2020-12-18 02:27:22.000" -"Izneo - 0100D8E00C874000","0100D8E00C874000","status-menus;online-broken","menus","2022-08-06 15:56:23.000" -"Dicey Dungeons - 0100BBF011394000","0100BBF011394000","gpu;audio;slow;status-ingame","ingame","2023-08-02 20:30:12.000" -"Rabbids Adventure Party Demo / 疯狂兔子:奇遇派对 - 试玩版","","","","2020-12-18 05:53:35.000" -"Venture Kid - 010095B00DBC8000","010095B00DBC8000","crash;gpu;status-ingame","ingame","2021-04-18 16:33:17.000" -"Death Coming - 0100F3B00CF32000","0100F3B00CF32000","status-nothing;crash","nothing","2022-02-06 07:43:03.000" -"OlliOlli: Switch Stance - 0100E0200B980000","0100E0200B980000","gpu;status-boots","boots","2024-04-25 08:36:37.000" -"Cybxus Heart - 01006B9013672000","01006B9013672000","gpu;slow;status-ingame","ingame","2022-01-15 05:00:49.000" -"Gensou Rougoku no Kaleidscope - 0100AC600EB4C000","0100AC600EB4C000","status-menus;crash","menus","2021-11-24 08:45:07.000" -"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy- - 0100454012E32000","0100454012E32000","status-ingame;crash","ingame","2021-08-08 11:56:18.000" -"Hulu - 0100A66003384000","0100A66003384000","status-boots;online-broken","boots","2022-12-09 10:05:00.000" -"Strife: Veteran Edition - 0100BDE012928000","0100BDE012928000","gpu;status-ingame","ingame","2022-01-15 05:10:42.000" -"Peasant Knight","","status-playable","playable","2020-12-22 09:30:50.000" -"Double Dragon Neon - 01005B10132B2000","01005B10132B2000","gpu;audio;status-ingame;32-bit","ingame","2022-09-20 18:00:20.000" -"Nekopara Vol.4","","crash;status-ingame","ingame","2021-01-17 01:47:18.000" -"Super Meat Boy Forever - 01009C200D60E000","01009C200D60E000","gpu;status-boots","boots","2021-04-26 14:25:39.000" -"Gems of Magic: Lost Family","","","","2020-12-24 15:33:57.000" -"Wagamama High Spec","","","","2020-12-25 09:02:51.000" -"BIT.TRIP RUNNER - 0100E62012D3C000","0100E62012D3C000","status-playable","playable","2022-10-17 14:23:24.000" -"BIT.TRIP VOID - 01000AD012D3A000","01000AD012D3A000","status-playable","playable","2022-10-17 14:31:23.000" -"Dark Arcana: The Carnival - 01003D301357A000","01003D301357A000","gpu;slow;status-ingame","ingame","2022-02-19 08:52:28.000" -"Food Girls","","","","2020-12-27 14:48:48.000" -"Override 2 Super Mech League - 0100647012F62000","0100647012F62000","status-playable;online-broken;UE4","playable","2022-10-19 15:56:04.000" -"Unto The End - 0100E49013190000","0100E49013190000","gpu;status-ingame","ingame","2022-10-21 11:13:29.000" -"Outbreak: Lost Hope - 0100D9F013102000","0100D9F013102000","crash;status-boots","boots","2021-04-26 18:01:23.000" -"Croc's World 3","","status-playable","playable","2020-12-30 18:53:26.000" -"COLLECTION of SaGA FINAL FANTASY LEGEND","","status-playable","playable","2020-12-30 19:11:16.000" -"The Adventures of 00 Dilly","","status-playable","playable","2020-12-30 19:32:29.000" -"Funimation - 01008E10130F8000","01008E10130F8000","gpu;status-boots","boots","2021-04-08 13:08:17.000" -"Aleste Collection","","","","2021-01-01 11:30:59.000" -"Trail Boss BMX","","","","2021-01-01 16:51:27.000" -"DEEMO -Reborn- - 01008B10132A2000","01008B10132A2000","status-playable;nvdec;online-broken","playable","2022-10-17 15:18:11.000" -"Catherine Full Body - 0100BF00112C0000","0100BF00112C0000","status-playable;nvdec","playable","2023-04-02 11:00:37.000" -"Hell Sports","","","","2021-01-03 15:40:25.000" -"Traditional Tactics Ne+","","","","2021-01-03 15:40:29.000" -"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 ) - 0100B9E012992000","0100B9E012992000","status-playable;UE4","playable","2022-12-07 12:59:16.000" -"The House of Da Vinci","","status-playable","playable","2021-01-05 14:17:19.000" -"Monster Sanctuary","","crash;status-ingame","ingame","2021-04-04 05:06:41.000" -"Monster Hunter Rise Demo - 010093A01305C000","010093A01305C000","status-playable;online-broken;ldn-works;demo","playable","2022-10-18 23:04:17.000" -"InnerSpace","","status-playable","playable","2021-01-13 19:36:14.000" -"Scott Pilgrim vs The World: The Game - 0100394011C30000","0100394011C30000","services-horizon;status-nothing;crash","nothing","2024-07-12 08:13:03.000" -"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-","","gpu;slow;status-ingame;crash","ingame","2021-11-06 02:57:29.000" -"Monster Hunter XX Nintendo Switch Ver ( Double Cross ) - 0100C3800049C000","0100C3800049C000","status-playable","playable","2024-07-21 14:08:09.000" -"Football Manager 2021 Touch - 01007CF013152000","01007CF013152000","gpu;status-ingame","ingame","2022-10-17 20:08:23.000" -"Eyes: The Horror Game - 0100EFE00A3C2000","0100EFE00A3C2000","status-playable","playable","2021-01-20 21:59:46.000" -"Evolution Board Game - 01006A800FA22000","01006A800FA22000","online;status-playable","playable","2021-01-20 22:37:56.000" -"PBA Pro Bowling 2021 - 0100F95013772000","0100F95013772000","status-playable;online-broken;UE4","playable","2022-10-19 16:46:40.000" -"Body of Evidence - 0100721013510000","0100721013510000","status-playable","playable","2021-04-25 22:22:11.000" -"The Hong Kong Massacre","","crash;status-ingame","ingame","2021-01-21 12:06:56.000" -"Arkanoid vs Space Invaders","","services;status-ingame","ingame","2021-01-21 12:50:30.000" -"Professor Lupo: Ocean - 0100D1F0132F6000","0100D1F0132F6000","status-playable","playable","2021-04-14 16:33:33.000" -"My Universe - School Teacher - 01006C301199C000","01006C301199C000","nvdec;status-playable","playable","2021-01-21 16:02:52.000" -"FUZE Player - 010055801134E000","010055801134E000","status-ingame;online-broken;vulkan-backend-bug","ingame","2022-10-18 12:23:53.000" -"Defentron - 0100CDE0136E6000","0100CDE0136E6000","status-playable","playable","2022-10-17 15:47:56.000" -"Thief Simulator - 0100CE400E34E000","0100CE400E34E000","status-playable","playable","2023-04-22 04:39:11.000" -"Stardash - 01002100137BA000","01002100137BA000","status-playable","playable","2021-01-21 16:31:19.000" -"The Last Dead End - 0100AAD011592000","0100AAD011592000","gpu;status-ingame;UE4","ingame","2022-10-20 16:59:44.000" -"Buddy Mission BOND Demo [ バディミッション BOND ]","","Incomplete","","2021-01-23 18:07:40.000" -"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ] - 01005EE013888000","01005EE013888000","gpu;status-ingame;demo","ingame","2022-12-06 15:27:59.000" -"Down in Bermuda","","","","2021-01-22 15:29:19.000" -"Blacksmith of the Sand Kingdom - 010068E013450000","010068E013450000","status-playable","playable","2022-10-16 22:37:44.000" -"Tennis World Tour 2 - 0100950012F66000","0100950012F66000","status-playable;online-broken","playable","2022-10-14 10:43:16.000" -"Shadow Gangs - 0100BE501382A000","0100BE501382A000","cpu;gpu;status-ingame;crash;regression","ingame","2024-04-29 00:07:26.000" -"Red Colony - 0100351013A06000","0100351013A06000","status-playable","playable","2021-01-25 20:44:41.000" -"Construction Simulator 3 - Console Edition - 0100A5600FAC0000","0100A5600FAC0000","status-playable","playable","2023-02-06 09:31:23.000" -"Speed Truck Racing - 010061F013A0E000","010061F013A0E000","status-playable","playable","2022-10-20 12:57:04.000" -"Arcanoid Breakout - 0100E53013E1C000","0100E53013E1C000","status-playable","playable","2021-01-25 23:28:02.000" -"Life of Fly - 0100B3A0135D6000","0100B3A0135D6000","status-playable","playable","2021-01-25 23:41:07.000" -"Little Nightmares II DEMO - 010093A0135D6000","010093A0135D6000","status-playable;UE4;demo;vulkan-backend-bug","playable","2024-05-16 18:47:20.000" -"Iris Fall - 0100945012168000","0100945012168000","status-playable;nvdec","playable","2022-10-18 13:40:22.000" -"Dirt Trackin Sprint Cars - 01004CB01378A000","01004CB01378A000","status-playable;nvdec;online-broken","playable","2022-10-17 16:34:56.000" -"Gal*Gun Returns [ ぎゃる☆がん りたーんず ] - 0100047013378000","0100047013378000","status-playable;nvdec","playable","2022-10-17 23:50:46.000" -"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ] - 0100307011D80000","0100307011D80000","status-playable","playable","2021-06-08 13:20:33.000" -"Buddy Mission BOND [ FG ] [ バディミッション BOND ] - 0100DB300B996000","0100DB300B996000","","","2021-01-30 04:22:26.000" -"CONARIUM - 010015801308E000","010015801308E000","UE4;nvdec;status-playable","playable","2021-04-26 17:57:53.000" -"Balan Wonderworld Demo - 0100E48013A34000","0100E48013A34000","gpu;services;status-ingame;UE4;demo","ingame","2023-02-16 20:05:07.000" -"War Truck Simulator - 0100B6B013B8A000","0100B6B013B8A000","status-playable","playable","2021-01-31 11:22:54.000" -"The Last Campfire - 0100449011506000","0100449011506000","status-playable","playable","2022-10-20 16:44:19.000" -"Spinny's journey - 01001E40136FE000","01001E40136FE000","status-ingame;crash","ingame","2021-11-30 03:39:44.000" -"Sally Face - 0100BBF0122B4000","0100BBF0122B4000","status-playable","playable","2022-06-06 18:41:24.000" -"Otti house keeper - 01006AF013A9E000","01006AF013A9E000","status-playable","playable","2021-01-31 12:11:24.000" -"Neoverse Trinity Edition - 01001A20133E000","","status-playable","playable","2022-10-19 10:28:03.000" -"Missile Dancer - 0100CFA0138C8000","0100CFA0138C8000","status-playable","playable","2021-01-31 12:22:03.000" -"Grisaia Phantom Trigger 03 - 01005250123B8000","01005250123B8000","audout;status-playable","playable","2021-01-31 12:30:47.000" -"GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000","0100D970123BA000","audout;status-playable","playable","2021-01-31 12:40:37.000" -"GRISAIA PHANTOM TRIGGER 05 - 01002330123BC000","01002330123BC000","audout;nvdec;status-playable","playable","2021-01-31 12:49:59.000" -"GRISAIA PHANTOM TRIGGER 5.5 - 0100CAF013AE6000","0100CAF013AE6000","audout;nvdec;status-playable","playable","2021-01-31 12:59:44.000" -"Dreamo - 0100D24013466000","0100D24013466000","status-playable;UE4","playable","2022-10-17 18:25:28.000" -"Dirt Bike Insanity - 0100A8A013DA4000","0100A8A013DA4000","status-playable","playable","2021-01-31 13:27:38.000" -"Calico - 010013A00E750000","010013A00E750000","status-playable","playable","2022-10-17 14:44:28.000" -"ADVERSE - 01008C901266E000","01008C901266E000","UE4;status-playable","playable","2021-04-26 14:32:51.000" -"All Walls Must Fall - 0100CBD012FB6000","0100CBD012FB6000","status-playable;UE4","playable","2022-10-15 19:16:30.000" -"Bus Driver Simulator - 010030D012FF6000","010030D012FF6000","status-playable","playable","2022-10-17 13:55:27.000" -"Blade II The Return of Evil - 01009CC00E224000","01009CC00E224000","audio;status-ingame;crash;UE4","ingame","2021-11-14 02:49:59.000" -"Ziggy The Chaser - 0100D7B013DD0000","0100D7B013DD0000","status-playable","playable","2021-02-04 20:34:27.000" -"Colossus Down - 0100E2F0128B4000","0100E2F0128B4000","status-playable","playable","2021-02-04 20:49:50.000" -"Turrican Flashback - 01004B0130C8000","","status-playable;audout","playable","2021-08-30 10:07:56.000" -"Ubongo - Deluxe Edition","","status-playable","playable","2021-02-04 21:15:01.000" -"Märchen Forest - 0100B201D5E000","","status-playable","playable","2021-02-04 21:33:34.000" -"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne","","gpu;status-boots;crash;nvdec;vulkan","boots","2023-03-07 21:27:24.000" -"Tracks - Toybox Edition - 0100192010F5A000","0100192010F5A000","UE4;crash;status-nothing","nothing","2021-02-08 15:19:18.000" -"TOHU - 0100B5E011920000","0100B5E011920000","slow;status-playable","playable","2021-02-08 15:40:44.000" -"Redout: Space Assault - 0100326010B98000","0100326010B98000","status-playable;UE4","playable","2022-10-19 23:04:35.000" -"Gods Will Fall - 0100CFA0111C8000","0100CFA0111C8000","status-playable","playable","2021-02-08 16:49:59.000" -"Cyber Shadow - 0100C1F0141AA000","0100C1F0141AA000","status-playable","playable","2022-07-17 05:37:41.000" -"Atelier Ryza 2: Lost Legends & the Secret Fairy - 01009A9012022000","01009A9012022000","status-playable","playable","2022-10-16 21:06:06.000" -"Heaven's Vault - 0100FD901000C000","0100FD901000C000","crash;status-ingame","ingame","2021-02-08 18:22:01.000" -"Contraptions - 01007D701298A000","01007D701298A000","status-playable","playable","2021-02-08 18:40:50.000" -"My Universe - Pet Clinic Cats & Dogs - 0100CD5011A02000","0100CD5011A02000","status-boots;crash;nvdec","boots","2022-02-06 02:05:53.000" -"Citizens Unite!: Earth x Space - 0100D9C012900000","0100D9C012900000","gpu;status-ingame","ingame","2023-10-22 06:44:19.000" -"Blue Fire - 010073B010F6E000","010073B010F6E000","status-playable;UE4","playable","2022-10-22 14:46:11.000" -"Shakes on a Plane - 01008DA012EC0000","01008DA012EC0000","status-menus;crash","menus","2021-11-25 08:52:25.000" -"Glyph - 0100EB501130E000","0100EB501130E000","status-playable","playable","2021-02-08 19:56:51.000" -"Flying Hero X - 0100419013A8A000","0100419013A8A000","status-menus;crash","menus","2021-11-17 07:46:58.000" -"Disjunction - 01000B70122A2000","01000B70122A2000","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2024-04-28 23:55:24.000" -"Grey Skies: A War of the Worlds Story - 0100DA7013792000","0100DA7013792000","status-playable;UE4","playable","2022-10-24 11:13:59.000" -"#womenUp, Super Puzzles Dream Demo - 0100D87012A14000","0100D87012A14000","nvdec;status-playable","playable","2021-02-09 00:03:31.000" -"n Verlore Verstand - Demo - 01009A500E3DA000","01009A500E3DA000","status-playable","playable","2021-02-09 00:13:32.000" -"10 Second Run RETURNS Demo - 0100DC000A472000","0100DC000A472000","gpu;status-ingame","ingame","2021-02-09 00:17:18.000" -"16-Bit Soccer Demo - 0100B94013D28000","0100B94013D28000","status-playable","playable","2021-02-09 00:23:07.000" -"1993 Shenandoah Demo - 0100148012550000","0100148012550000","status-playable","playable","2021-02-09 00:43:43.000" -"9 Monkeys of Shaolin Demo - 0100C5F012E3E000","0100C5F012E3E000","UE4;gpu;nvdec;status-ingame","ingame","2021-02-09 01:03:30.000" -"99Vidas Demo - 010023500C2F0000","010023500C2F0000","status-playable","playable","2021-02-09 12:51:31.000" -"A Duel Hand Disaster Trackher: DEMO - 0100582012B90000","0100582012B90000","crash;demo;nvdec;status-ingame","ingame","2021-03-24 18:45:27.000" -"Aces of the Luftwaffe Squadron Demo - 010054300D822000","010054300D822000","nvdec;status-playable","playable","2021-02-09 13:12:28.000" -"Active Neurons 2 Demo - 010031C0122B0000","010031C0122B0000","status-playable","playable","2021-02-09 13:40:21.000" -"Adventures of Chris Demo - 0100A0A0136E8000","0100A0A0136E8000","status-playable","playable","2021-02-09 13:49:21.000" -"Aegis Defenders Demo - 010064500AF72000","010064500AF72000","status-playable","playable","2021-02-09 14:04:17.000" -"Aeolis Tournament Demo - 01006710122CE000","01006710122CE000","nvdec;status-playable","playable","2021-02-09 14:22:30.000" -"AeternoBlade Demo Version - 0100B1C00949A000","0100B1C00949A000","nvdec;status-playable","playable","2021-02-09 14:39:26.000" -"AeternoBlade II Demo Version","","gpu;nvdec;status-ingame","ingame","2021-02-09 15:10:19.000" -"Agent A: A puzzle in disguise (Demo) - 01008E8012C02000","01008E8012C02000","status-playable","playable","2021-02-09 18:30:41.000" -"Airfield Mania Demo - 010010A00DB72000","010010A00DB72000","services;status-boots;demo","boots","2022-04-10 03:43:02.000" -"Alder's Blood Prologue - 01004510110C4000","01004510110C4000","crash;status-ingame","ingame","2021-02-09 19:03:03.000" -"AI: The Somnium Files Demo - 0100C1700FB34000","0100C1700FB34000","nvdec;status-playable","playable","2021-02-10 12:52:33.000" -"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version - 0100A8A00D27E000","0100A8A00D27E000","status-playable","playable","2021-02-10 13:33:59.000" -"Animated Jigsaws: Beautiful Japanese Scenery DEMO - 0100A1900B5B8000","0100A1900B5B8000","nvdec;status-playable","playable","2021-02-10 13:49:56.000" -"APE OUT DEMO - 010054500E6D4000","010054500E6D4000","status-playable","playable","2021-02-10 14:33:06.000" -"Anime Studio Story Demo - 01002B300EB86000","01002B300EB86000","status-playable","playable","2021-02-10 14:50:39.000" -"Aperion Cyberstorm Demo - 01008CA00D71C000","01008CA00D71C000","status-playable","playable","2021-02-10 15:53:21.000" -"ARMS Demo","","status-playable","playable","2021-02-10 16:30:13.000" -"Art of Balance DEMO - 010062F00CAE2000","010062F00CAE2000","gpu;slow;status-ingame","ingame","2021-02-10 17:17:12.000" -"Assault on Metaltron Demo - 0100C5E00E540000","0100C5E00E540000","status-playable","playable","2021-02-10 19:48:06.000" -"Automachef Demo - 01006B700EA6A000","01006B700EA6A000","status-playable","playable","2021-02-10 20:35:37.000" -"AVICII Invector Demo - 0100E100128BA000","0100E100128BA000","status-playable","playable","2021-02-10 21:04:58.000" -"Awesome Pea (Demo) - 010023800D3F2000","010023800D3F2000","status-playable","playable","2021-02-10 21:48:21.000" -"Awesome Pea 2 (Demo) - 0100D2011E28000","","crash;status-nothing","nothing","2021-02-10 22:08:27.000" -"Ayakashi koi gikyoku Free Trial - 010075400DEC6000","010075400DEC6000","status-playable","playable","2021-02-10 22:22:11.000" -"Bad North Demo","","status-playable","playable","2021-02-10 22:48:38.000" -"Baobabs Mausoleum: DEMO - 0100D3000AEC2000","0100D3000AEC2000","status-playable","playable","2021-02-10 22:59:25.000" -"Battle Chef Brigade Demo - 0100DBB00CAEE000","0100DBB00CAEE000","status-playable","playable","2021-02-10 23:15:07.000" -"Mercenaries Blaze Dawn of the Twin Dragons - 0100a790133fc000","0100a790133fc000","","","2021-02-11 18:43:00.000" -"Fallen Legion Revenants Demo - 0100cac013776000","0100cac013776000","","","2021-02-11 18:43:06.000" -"Bear With Me - The Lost Robots Demo - 010024200E97E800","010024200E97E800","nvdec;status-playable","playable","2021-02-12 22:38:12.000" -"Birds and Blocks Demo - 0100B6B012FF4000","0100B6B012FF4000","services;status-boots;demo","boots","2022-04-10 04:53:03.000" -"Black Hole Demo - 01004BE00A682000","01004BE00A682000","status-playable","playable","2021-02-12 23:02:17.000" -"Blasphemous Demo - 0100302010338000","0100302010338000","status-playable","playable","2021-02-12 23:49:56.000" -"Blaster Master Zero DEMO - 010025B002E92000","010025B002E92000","status-playable","playable","2021-02-12 23:59:06.000" -"Bleep Bloop DEMO - 010091700EA2A000","010091700EA2A000","nvdec;status-playable","playable","2021-02-13 00:20:53.000" -"Block-a-Pix Deluxe Demo - 0100E1C00DB6C000","0100E1C00DB6C000","status-playable","playable","2021-02-13 00:37:39.000" -"Get Over Here - 0100B5B00E77C000","0100B5B00E77C000","status-playable","playable","2022-10-28 11:53:52.000" -"Unspottable - 0100B410138C0000","0100B410138C0000","status-playable","playable","2022-10-25 19:28:49.000" -"Blossom Tales Demo - 01000EB01023E000","01000EB01023E000","status-playable","playable","2021-02-13 14:22:53.000" -"Boomerang Fu Demo Version - 010069F0135C4000","010069F0135C4000","demo;status-playable","playable","2021-02-13 14:38:13.000" -"Bot Vice Demo - 010069B00EAC8000","010069B00EAC8000","crash;demo;status-ingame","ingame","2021-02-13 14:52:42.000" -"BOXBOY! + BOXGIRL! Demo - 0100B7200E02E000","0100B7200E02E000","demo;status-playable","playable","2021-02-13 14:59:08.000" -"Super Mario 3D World + Bowser's Fury - 010028600EBDA000","010028600EBDA000","status-playable;ldn-works","playable","2024-07-31 10:45:37.000" -"Brawlout Demo - 0100C1B00E1CA000","0100C1B00E1CA000","demo;status-playable","playable","2021-02-13 22:46:53.000" -"Brigandine: The Legend of Runersia Demo - 0100703011258000","0100703011258000","status-playable","playable","2021-02-14 14:44:10.000" -"Brotherhood United Demo - 0100F19011226000","0100F19011226000","demo;status-playable","playable","2021-02-14 21:10:57.000" -"Bucket Knight demo - 0100F1B010A90000","0100F1B010A90000","demo;status-playable","playable","2021-02-14 21:23:09.000" -"BurgerTime Party! Demo - 01005780106E8000","01005780106E8000","demo;status-playable","playable","2021-02-14 21:34:16.000" -"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600","","demo;gpu;nvdec;status-ingame","ingame","2021-02-14 21:48:15.000" -"Cafeteria Nipponica Demo - 010060400D21C000","010060400D21C000","demo;status-playable","playable","2021-02-14 22:11:35.000" -"Cake Bash Demo - 0100699012F82000","0100699012F82000","crash;demo;status-ingame","ingame","2021-02-14 22:21:15.000" -"Captain Toad: Treasure Tracker Demo - 01002C400B6B6000","01002C400B6B6000","32-bit;demo;status-playable","playable","2021-02-14 22:36:09.000" -"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION - 01002320137CC000","01002320137CC000","slow;status-playable","playable","2021-02-14 22:45:35.000" -"Castle Crashers Remastered Demo - 0100F6D01060E000","0100F6D01060E000","gpu;status-boots;demo","boots","2022-04-10 10:57:10.000" -"Cat Quest II Demo - 0100E86010220000","0100E86010220000","demo;status-playable","playable","2021-02-15 14:11:57.000" -"Caveman Warriors Demo","","demo;status-playable","playable","2021-02-15 14:44:08.000" -"Chickens Madness DEMO - 0100CAC011C3A000","0100CAC011C3A000","UE4;demo;gpu;nvdec;status-ingame","ingame","2021-02-15 15:02:10.000" -"Little Nightmares II - 010097100EDD6000","010097100EDD6000","status-playable;UE4","playable","2023-02-10 18:24:44.000" -"Rhythm Fighter - 0100729012D18000","0100729012D18000","crash;status-nothing","nothing","2021-02-16 18:51:30.000" -"大図書館の羊飼い -Library Party-01006de00a686000","01006de00a686000","","","2021-02-16 07:20:19.000" -"Timothy and the Mysterious Forest - 0100393013A10000","0100393013A10000","gpu;slow;status-ingame","ingame","2021-06-02 00:42:11.000" -"Pixel Game Maker Series Werewolf Princess Kaguya - 0100859013CE6000","0100859013CE6000","crash;services;status-nothing","nothing","2021-03-26 00:23:07.000" -"D.C.4 ~ダ・カーポ4~-0100D8500EE14000","0100D8500EE14000","","","2021-02-17 08:46:35.000" -"Yo kai watch 1 for Nintendo Switch - 0100C0000CEEA000","0100C0000CEEA000","gpu;status-ingame;opengl","ingame","2024-05-28 11:11:49.000" -"Project TRIANGLE STRATEGY Debut Demo - 01002980140F6000","01002980140F6000","status-playable;UE4;demo","playable","2022-10-24 21:40:27.000" -"SNK VS. CAPCOM: THE MATCH OF THE MILLENNIUM - 010027D0137E0000","010027D0137E0000","","","2021-02-19 12:35:20.000" -"Super Soccer Blast - 0100D61012270000","0100D61012270000","gpu;status-ingame","ingame","2022-02-16 08:39:12.000" -"VOEZ (Japan Version) - 0100A7F002830000","0100A7F002830000","","","2021-02-19 15:07:49.000" -"Dungreed - 010045B00C496000","010045B00C496000","","","2021-02-19 16:18:07.000" -"Capcom Arcade Stadium - 01001E0013208000","01001E0013208000","status-playable","playable","2021-03-17 05:45:14.000" -"Urban Street Fighting - 010054F014016000","010054F014016000","status-playable","playable","2021-02-20 19:16:36.000" -"The Long Dark - 01007A700A87C000","01007A700A87C000","status-playable","playable","2021-02-21 14:19:52.000" -"Rebel Galaxy: Outlaw - 0100CAA01084A000","0100CAA01084A000","status-playable;nvdec","playable","2022-12-01 07:44:56.000" -"Persona 5: Strikers (US) - 0100801011C3E000","0100801011C3E000","status-playable;nvdec;mac-bug","playable","2023-09-26 09:36:01.000" -"Steven Universe Unleash the Light","","","","2021-02-25 02:33:05.000" -"Ghosts 'n Goblins Resurrection - 0100D6200F2BA000","0100D6200F2BA000","status-playable","playable","2023-05-09 12:40:41.000" -"Taxi Chaos - 0100B76011DAA000","0100B76011DAA000","slow;status-playable;online-broken;UE4","playable","2022-10-25 19:13:00.000" -"COTTOn Reboot! [ コットン リブート! ] - 01003DD00F94A000","01003DD00F94A000","status-playable","playable","2022-05-24 16:29:24.000" -"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ] - 010017301007E000","010017301007E000","status-playable","playable","2021-03-18 11:42:19.000" -"Bravely Default II - 01006DC010326000","01006DC010326000","gpu;status-ingame;crash;Needs Update;UE4","ingame","2024-04-26 06:11:26.000" -"Forward To The Sky - 0100DBA011136000","0100DBA011136000","","","2021-02-27 12:11:42.000" -"Just Dance 2019","","gpu;online;status-ingame","ingame","2021-02-27 17:21:27.000" -"Harvest Moon One World - 010016B010FDE00","","status-playable","playable","2023-05-26 09:17:19.000" -"Just Dance 2017 - 0100BCE000598000","0100BCE000598000","online;status-playable","playable","2021-03-05 09:46:01.000" -"コープスパーティー ブラッドカバー リピーティッドフィアー (Corpse Party Blood Covered: Repeated Fear) - 0100965012E22000","0100965012E22000","","","2021-03-05 09:47:52.000" -"Sea of Solitude The Director's Cut - 0100AFE012BA2000","0100AFE012BA2000","gpu;status-ingame","ingame","2024-07-12 18:29:29.000" -"Just Dance 2018 - 0100A0500348A000","0100A0500348A000","","","2021-03-13 08:09:14.000" -"Crash Bandicoot 4: It's About Time - 010073401175E000","010073401175E000","status-playable;nvdec;UE4","playable","2024-03-17 07:13:45.000" -"Bloody Bunny : The Game - 0100E510143EC000","0100E510143EC000","status-playable;nvdec;UE4","playable","2022-10-22 13:18:55.000" -"Plants vs. Zombies: Battle for Neighborville Complete Edition - 0100C56010FD8000","0100C56010FD8000","gpu;audio;status-boots;crash","boots","2024-09-02 12:58:14.000" -"Cathedral - 0100BEB01327A000","0100BEB01327A000","","","2021-03-19 22:12:46.000" -"Night Vision - 0100C3801458A000","0100C3801458A000","","","2021-03-19 22:20:53.000" -"Stubbs the Zombie in Rebel Without a Pulse - 0100964012528000","0100964012528000","","","2021-03-19 22:56:50.000" -"Hitman 3 - Cloud Version - 01004990132AC000","01004990132AC000","Needs Update;crash;services;status-nothing","nothing","2021-04-18 22:35:07.000" -"Speed Limit - 01000540139F6000","01000540139F6000","gpu;status-ingame","ingame","2022-09-02 18:37:40.000" -"Dig Dog - 0100A5A00DBB0000","0100A5A00DBB0000","gpu;status-ingame","ingame","2021-06-02 17:17:51.000" -"Renzo Racer - 01007CC0130C6000","01007CC0130C6000","status-playable","playable","2021-03-23 22:28:05.000" -"Persephone","","status-playable","playable","2021-03-23 22:39:19.000" -"Cresteaju","","gpu;status-ingame","ingame","2021-03-24 10:46:06.000" -"Boom Blaster","","status-playable","playable","2021-03-24 10:55:56.000" -"Soccer Club Life: Playing Manager - 010017B012AFC000","010017B012AFC000","gpu;status-ingame","ingame","2022-10-25 11:59:22.000" -"Radio Commander - 0100BAD013B6E000","0100BAD013B6E000","nvdec;status-playable","playable","2021-03-24 11:20:46.000" -"Negative - 01008390136FC000","01008390136FC000","nvdec;status-playable","playable","2021-03-24 11:29:41.000" -"Hero-U: Rogue to Redemption - 010077D01094C000","010077D01094C000","nvdec;status-playable","playable","2021-03-24 11:40:01.000" -"Haven - 0100E2600DBAA000","0100E2600DBAA000","status-playable","playable","2021-03-24 11:52:41.000" -"Escape First 2 - 010021201296A000","010021201296A000","status-playable","playable","2021-03-24 11:59:41.000" -"Active Neurons 3 - 0100EE1013E12000","0100EE1013E12000","status-playable","playable","2021-03-24 12:20:20.000" -"Blizzard Arcade Collection - 0100743013D56000","0100743013D56000","status-playable;nvdec","playable","2022-08-03 19:37:26.000" -"Hellpoint - 010024600C794000","010024600C794000","status-menus","menus","2021-11-26 13:24:20.000" -"Death's Hangover - 0100492011A8A000","0100492011A8A000","gpu;status-boots","boots","2023-08-01 22:38:06.000" -"Storm in a Teacup - 0100B2300B932000","0100B2300B932000","gpu;status-ingame","ingame","2021-11-06 02:03:19.000" -"Charge Kid - 0100F52013A66000","0100F52013A66000","gpu;status-boots;audout","boots","2024-02-11 01:17:47.000" -"Monster Hunter Rise - 0100B04011742000","0100B04011742000","gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works","ingame","2024-08-24 11:04:59.000" -"Gotobun no Hanayome Natsu no Omoide mo Gotobun [ 五等分の花嫁∬ ~夏の思い出も五等分~ ] - 0100FB5013670000","0100FB5013670000","","","2021-03-27 16:51:27.000" -"Steam Prison - 01008010118CC000","01008010118CC000","nvdec;status-playable","playable","2021-04-01 15:34:11.000" -"Rogue Heroes: Ruins of Tasos - 01009FA010848000","01009FA010848000","online;status-playable","playable","2021-04-01 15:41:25.000" -"Fallen Legion Revenants - 0100AA801258C000","0100AA801258C000","status-menus;crash","menus","2021-11-25 08:53:20.000" -" R-TYPE FINAL 2 Demo - 01007B0014300000","01007B0014300000","slow;status-ingame;nvdec;UE4;demo","ingame","2022-10-24 21:57:42.000" -"Fire Emblem: Shadow Dragon and the Blade of Light - 0100A12011CC8000","0100A12011CC8000","status-playable","playable","2022-10-17 19:49:14.000" -"Dariusburst - Another Chronicle EX+ - 010015800F93C000","010015800F93C000","online;status-playable","playable","2021-04-05 14:21:43.000" -"Curse of the Dead Gods - 0100D4A0118EA000","0100D4A0118EA000","status-playable","playable","2022-08-30 12:25:38.000" -"Clocker - 0100DF9013AD4000","0100DF9013AD4000","status-playable","playable","2021-04-05 15:05:13.000" -"Azur Lane: Crosswave - 01006AF012FC8000","01006AF012FC8000","UE4;nvdec;status-playable","playable","2021-04-05 15:15:25.000" -"AnShi - 01000FD00DF78000","01000FD00DF78000","status-playable;nvdec;UE4","playable","2022-10-21 19:37:01.000" -"Aery - A Journey Beyond Time - 0100DF8014056000","0100DF8014056000","status-playable","playable","2021-04-05 15:52:25.000" -"Sir Lovelot - 0100E9201410E000","0100E9201410E000","status-playable","playable","2021-04-05 16:21:46.000" -"Pixel Game Maker Series Puzzle Pedestrians - 0100EA2013BCC000","0100EA2013BCC000","status-playable","playable","2022-10-24 20:15:50.000" -"Monster Jam Steel Titans 2 - 010051B0131F0000","010051B0131F0000","status-playable;nvdec;UE4","playable","2022-10-24 17:17:59.000" -"Huntdown - 0100EBA004726000","0100EBA004726000","status-playable","playable","2021-04-05 16:59:54.000" -"GraviFire - 010054A013E0C000","010054A013E0C000","status-playable","playable","2021-04-05 17:13:32.000" -"Dungeons & Bombs","","status-playable","playable","2021-04-06 12:46:22.000" -"Estranged: The Departure - 01004F9012FD8000","01004F9012FD8000","status-playable;nvdec;UE4","playable","2022-10-24 10:37:58.000" -"Demon's Rise - Lords of Chaos - 0100E29013818000","0100E29013818000","status-playable","playable","2021-04-06 16:20:06.000" -"Bibi & Tina at the horse farm - 010062400E69C000","010062400E69C000","status-playable","playable","2021-04-06 16:31:39.000" -"WRC 9 The Official Game - 01001A0011798000","01001A0011798000","gpu;slow;status-ingame;nvdec","ingame","2022-10-25 19:47:39.000" -"Woodsalt - 0100288012966000","0100288012966000","status-playable","playable","2021-04-06 17:01:48.000" -"Kingdoms of Amalur: Re-Reckoning - 0100EF50132BE000","0100EF50132BE000","status-playable","playable","2023-08-10 13:05:08.000" -"Jiffy - 01008330134DA000","01008330134DA000","gpu;status-ingame;opengl","ingame","2024-02-03 23:11:24.000" -"A-Train: All Aboard! Tourism - 0100A3E010E56000","0100A3E010E56000","nvdec;status-playable","playable","2021-04-06 17:48:19.000" -"Synergia - 01009E700F448000","01009E700F448000","status-playable","playable","2021-04-06 17:58:04.000" -"R.B.I. Baseball 21 - 0100B4A0115CA000","0100B4A0115CA000","status-playable;online-working","playable","2022-10-24 22:31:45.000" -"NEOGEO POCKET COLOR SELECTION Vol.1 - 010006D0128B4000","010006D0128B4000","status-playable","playable","2023-07-08 20:55:36.000" -"Mighty Fight Federation - 0100C1E0135E0000","0100C1E0135E0000","online;status-playable","playable","2021-04-06 18:39:56.000" -"Lost Lands: The Four Horsemen - 0100133014510000","0100133014510000","status-playable;nvdec","playable","2022-10-24 16:41:00.000" -"In rays of the Light - 0100A760129A0000","0100A760129A0000","status-playable","playable","2021-04-07 15:18:07.000" -"DARQ Complete Edition - 0100440012FFA000","0100440012FFA000","audout;status-playable","playable","2021-04-07 15:26:21.000" -"Can't Drive This - 0100593008BDC000","0100593008BDC000","status-playable","playable","2022-10-22 14:55:17.000" -"Wanderlust Travel Stories - 0100B27010436000","0100B27010436000","status-playable","playable","2021-04-07 16:09:12.000" -"Tales from the Borderlands - 0100F0C011A68000","0100F0C011A68000","status-playable;nvdec","playable","2022-10-25 18:44:14.000" -"Star Wars: Republic Commando - 0100FA10115F8000","0100FA10115F8000","gpu;status-ingame;32-bit","ingame","2023-10-31 15:57:17.000" -"Barrage Fantasia - 0100F2A013752000","0100F2A013752000","","","2021-04-08 01:02:06.000" -"Atelier Rorona - The Alchemist of Arland - DX - 010088600C66E000","010088600C66E000","nvdec;status-playable","playable","2021-04-08 15:33:15.000" -"PAC-MAN 99 - 0100AD9012510000","0100AD9012510000","gpu;status-ingame;online-broken","ingame","2024-04-23 00:48:25.000" -"MAGLAM LORD - 0100C2C0125FC000","0100C2C0125FC000","","","2021-04-09 09:10:45.000" -"Part Time UFO - 01006B5012B32000 ","01006B5012B32000","status-ingame;crash","ingame","2023-03-03 03:13:05.000" -"Fitness Boxing - 0100E7300AAD4000","0100E7300AAD4000","status-playable","playable","2021-04-14 20:33:33.000" -"Fitness Boxing 2: Rhythm & Exercise - 0100073011382000","0100073011382000","crash;status-ingame","ingame","2021-04-14 20:40:48.000" -"Overcooked! All You Can Eat - 0100F28011892000","0100F28011892000","ldn-untested;online;status-playable","playable","2021-04-15 10:33:52.000" -"SpyHack - 01005D701264A000","01005D701264A000","status-playable","playable","2021-04-15 10:53:51.000" -"Oh My Godheads: Party Edition - 01003B900AE12000","01003B900AE12000","status-playable","playable","2021-04-15 11:04:11.000" -"My Hidden Things - 0100E4701373E000","0100E4701373E000","status-playable","playable","2021-04-15 11:26:06.000" -"Merchants of Kaidan - 0100E5000D3CA000","0100E5000D3CA000","status-playable","playable","2021-04-15 11:44:28.000" -"Mahluk dark demon - 010099A0145E8000","010099A0145E8000","status-playable","playable","2021-04-15 13:14:24.000" -"Fred3ric - 0100AC40108D8000","0100AC40108D8000","status-playable","playable","2021-04-15 13:30:31.000" -"Fishing Universe Simulator - 010069800D292000","010069800D292000","status-playable","playable","2021-04-15 14:00:43.000" -"Exorder - 0100FA800A1F4000","0100FA800A1F4000","nvdec;status-playable","playable","2021-04-15 14:17:20.000" -"FEZ - 01008D900B984000","01008D900B984000","gpu;status-ingame","ingame","2021-04-18 17:10:16.000" -"Danger Scavenger - ","","nvdec;status-playable","playable","2021-04-17 15:53:04.000" -"Hellbreachers - 01002BF013F0C000","01002BF013F0C000","","","2021-04-17 17:19:20.000" -"Cooking Simulator - 01001E400FD58000","01001E400FD58000","status-playable","playable","2021-04-18 13:25:23.000" -"Digerati Presents: The Dungeon Crawl Vol. 1 - 010035D0121EC000","010035D0121EC000","slow;status-ingame","ingame","2021-04-18 14:04:55.000" -"Clea 2 - 010045E0142A4000","010045E0142A4000","status-playable","playable","2021-04-18 14:25:18.000" -"Livestream Escape from Hotel Izanami - 0100E45014338000","0100E45014338000","","","2021-04-19 02:20:34.000" -"Ai Kiss 2 [ アイキス2 ] - 01000E9013CD4000","01000E9013CD4000","","","2021-04-19 02:49:12.000" -"Pikachin-Kit – Game de Pirameki Daisakusen [ ピカちんキット ゲームでピラメキ大作戦!] - 01009C100A8AA000","01009C100A8AA000","","","2021-04-19 03:11:07.000" -"Ougon musou kyoku CROSS [ 黄金夢想曲†CROSS] - 010011900E720000","010011900E720000","","","2021-04-19 03:22:41.000" -"Cargo Crew Driver - 0100DD6014870000","0100DD6014870000","status-playable","playable","2021-04-19 12:54:22.000" -"Black Legend - 0100C3200E7E6000","0100C3200E7E6000","gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-10-22 12:54:48.000" -"Balan Wonderworld - 0100438012EC8000","0100438012EC8000","status-playable;nvdec;UE4","playable","2022-10-22 13:08:43.000" -"Arkham Horror: Mother's Embrace - 010069A010606000","010069A010606000","nvdec;status-playable","playable","2021-04-19 15:40:55.000" -"S.N.I.P.E.R. Hunter Scope - 0100B8B012ECA000","0100B8B012ECA000","status-playable","playable","2021-04-19 15:58:09.000" -"Ploid Saga - 0100E5B011F48000 ","0100E5B011F48000","status-playable","playable","2021-04-19 16:58:45.000" -"Kaze and the Wild Masks - 010038B00F142000","010038B00F142000","status-playable","playable","2021-04-19 17:11:03.000" -"I Saw Black Clouds - 01001860140B0000","01001860140B0000","nvdec;status-playable","playable","2021-04-19 17:22:16.000" -"Escape from Life Inc - 010023E013244000","010023E013244000","status-playable","playable","2021-04-19 17:34:09.000" -"El Hijo - A Wild West Tale - 010020A01209C000","010020A01209C000","nvdec;status-playable","playable","2021-04-19 17:44:08.000" -"Bomber Fox - 0100A1F012948000","0100A1F012948000","nvdec;status-playable","playable","2021-04-19 17:58:13.000" -"Stitchy in Tooki Trouble - 010077B014518000","010077B014518000","status-playable","playable","2021-05-06 16:25:53.000" -"SaGa Frontier Remastered - 0100A51013530000","0100A51013530000","status-playable;nvdec","playable","2022-11-03 13:54:56.000" -"Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ] - 0100EB2012E36000","0100EB2012E36000","status-nothing;crash","nothing","2021-11-03 08:45:06.000" -"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ] - 01005CD013116000","01005CD013116000","status-playable","playable","2022-07-29 15:50:13.000" -"Uno no Tatsujin Machigai Sagashi Museum for Nintendo Switch [ -右脳の達人- まちがいさがしミュージアム for Nintendo Switch ] - 01001030136C6000","01001030136C6000","","","2021-04-22 21:59:27.000" -"Shantae - 0100430013120000","0100430013120000","status-playable","playable","2021-05-21 04:53:26.000" -"The Legend of Heroes: Trails of Cold Steel IV - 0100D3C010DE8000","0100D3C010DE8000","nvdec;status-playable","playable","2021-04-23 14:01:05.000" -"Effie - 01002550129F0000","01002550129F0000","status-playable","playable","2022-10-27 14:36:39.000" -"Death end re;Quest - 0100AEC013DDA000","0100AEC013DDA000","status-playable","playable","2023-07-09 12:19:54.000" -"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改] - 01005E5013862000","01005E5013862000","status-nothing;crash","nothing","2021-09-30 14:41:07.000" -"Yoshi's Crafted World - 01006000040C2000","01006000040C2000","gpu;status-ingame;audout","ingame","2021-08-30 13:25:51.000" -"TY the Tasmanian Tiger 2: Bush Rescue HD - 0100BC701417A000","0100BC701417A000","","","2021-05-04 23:11:57.000" -"Nintendo Labo Toy-Con 03: Vehicle Kit - 01001E9003502000","01001E9003502000","services;status-menus;crash","menus","2022-08-03 17:20:11.000" -"Say No! More - 01001C3012912000","01001C3012912000","status-playable","playable","2021-05-06 13:43:34.000" -"Potion Party - 01000A4014596000","01000A4014596000","status-playable","playable","2021-05-06 14:26:54.000" -"Saviors of Sapphire Wings & Stranger of Sword City Revisited - 0100AA00128BA000","0100AA00128BA000","status-menus;crash","menus","2022-10-24 23:00:46.000" -"Lost Words: Beyond the Page - 0100018013124000","0100018013124000","status-playable","playable","2022-10-24 17:03:21.000" -"Lost Lands 3: The Golden Curse - 0100156014C6A000","0100156014C6A000","status-playable;nvdec","playable","2022-10-24 16:30:00.000" -"ISLAND - 0100F06013710000","0100F06013710000","status-playable","playable","2021-05-06 15:11:47.000" -"SilverStarChess - 010016D00A964000","010016D00A964000","status-playable","playable","2021-05-06 15:25:57.000" -"Breathedge - 01000AA013A5E000","01000AA013A5E000","UE4;nvdec;status-playable","playable","2021-05-06 15:44:28.000" -"Isolomus - 010001F0145A8000","010001F0145A8000","services;status-boots","boots","2021-11-03 07:48:21.000" -"Relicta - 01002AD013C52000","01002AD013C52000","status-playable;nvdec;UE4","playable","2022-10-31 12:48:33.000" -"Rain on Your Parade - 0100BDD014232000","0100BDD014232000","status-playable","playable","2021-05-06 19:32:04.000" -"World's End Club Demo - 0100BE101453E000","0100BE101453E000","","","2021-05-08 16:22:55.000" -"Very Very Valet Demo - 01006C8014DDA000","01006C8014DDA000","status-boots;crash;Needs Update;demo","boots","2022-11-12 15:26:13.000" -"Miitopia Demo - 01007DA0140E8000","01007DA0140E8000","services;status-menus;crash;demo","menus","2023-02-24 11:50:58.000" -"Knight Squad 2 - 010024B00E1D6000","010024B00E1D6000","status-playable;nvdec;online-broken","playable","2022-10-28 18:38:09.000" -"Tonarini kanojo noiru shiawase ~ Curious Queen ~ [ となりに彼女のいる幸せ~Curious Queen~] - 0100A18011BE4000","0100A18011BE4000","","","2021-05-11 13:40:34.000" -"Mainichi mamoru miya sanchino kyou nogohan [ 毎日♪ 衛宮さんちの今日のごはん ] - 01005E6010114000","01005E6010114000","","","2021-05-11 13:45:30.000" -"Commander Keen in Keen Dreams: Definitive Edition - 0100E400129EC000","0100E400129EC000","status-playable","playable","2021-05-11 19:33:54.000" -"SD Gundam G Generation Genesis (0100CEE0140CE000)","0100CEE0140CE000","","","2021-05-13 12:29:50.000" -"Poison Control - 0100EB6012FD2000","0100EB6012FD2000","status-playable","playable","2021-05-16 14:01:54.000" -"My Riding Stables 2: A New Adventure - 010042A00FBF0000","010042A00FBF0000","status-playable","playable","2021-05-16 14:14:59.000" -"Dragon Audit - 0100DBC00BD5A000","0100DBC00BD5A000","crash;status-ingame","ingame","2021-05-16 14:24:46.000" -"Arcaea - 0100E680149DC000","0100E680149DC000","status-playable","playable","2023-03-16 19:31:21.000" -"Calculator - 010004701504A000","010004701504A000","status-playable","playable","2021-06-11 13:27:20.000" -"Rune Factory 5 (JP) - 010014D01216E000","010014D01216E000","gpu;status-ingame","ingame","2021-06-01 12:00:36.000" -"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00","","status-playable;nvdec","playable","2022-09-15 20:45:57.000" -"War Of Stealth - assassin - 01004FA01391A000","01004FA01391A000","status-playable","playable","2021-05-22 17:34:38.000" -"Under Leaves - 01008F3013E4E000","01008F3013E4E000","status-playable","playable","2021-05-22 18:13:58.000" -"Travel Mosaics 7: Fantastic Berlin - ","","status-playable","playable","2021-05-22 18:37:34.000" -"Travel Mosaics 6: Christmas Around the World - 0100D520119D6000","0100D520119D6000","status-playable","playable","2021-05-26 00:52:47.000" -"Travel Mosaics 5: Waltzing Vienna - 01004C4010C00000","01004C4010C00000","status-playable","playable","2021-05-26 11:49:35.000" -"Travel Mosaics 4: Adventures in Rio - 010096D010BFE000","010096D010BFE000","status-playable","playable","2021-05-26 11:54:58.000" -"Travel Mosaics 3: Tokyo Animated - 0100102010BFC000","0100102010BFC000","status-playable","playable","2021-05-26 12:06:27.000" -"Travel Mosaics 2: Roman Holiday - 0100A8D010BFA000","0100A8D010BFA000","status-playable","playable","2021-05-26 12:33:16.000" -"Travel Mosaics: A Paris Tour - 01007DB00A226000","01007DB00A226000","status-playable","playable","2021-05-26 12:42:26.000" -"Rolling Gunner - 010076200CA16000","010076200CA16000","status-playable","playable","2021-05-26 12:54:18.000" -"MotoGP 21 - 01000F5013820000","01000F5013820000","gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested","ingame","2022-10-28 21:35:08.000" -"Little Mouse's Encyclopedia - 0100FE0014200000","0100FE0014200000","status-playable","playable","2022-10-28 19:38:58.000" -"Himehibi 1 gakki - Princess Days - 0100F8D0129F4000","0100F8D0129F4000","status-nothing;crash","nothing","2021-11-03 08:34:19.000" -"Dokapon Up! Mugen no Roulette - 010048100D51A000","010048100D51A000","gpu;status-menus;Needs Update","menus","2022-12-08 19:39:10.000" -"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~ - 01006A300BA2C000","01006A300BA2C000","status-playable;audout","playable","2023-05-04 17:25:23.000" -"Paint (0100946012446000)","0100946012446000","","","2021-05-31 12:57:19.000" -"Knockout City - 01009EF00DDB4000","01009EF00DDB4000","services;status-boots;online-broken","boots","2022-12-09 09:48:58.000" -"Trine 2 - 010064E00A932000","010064E00A932000","nvdec;status-playable","playable","2021-06-03 11:45:20.000" -"Trine 3: The Artifacts of Power - 0100DEC00A934000","0100DEC00A934000","ldn-untested;online;status-playable","playable","2021-06-03 12:01:24.000" -"Jamestown+ - 010000100C4B8000","010000100C4B8000","","","2021-06-05 09:09:39.000" -"Lonely Mountains Downhill - 0100A0C00E0DE000","0100A0C00E0DE000","status-playable;online-broken","playable","2024-07-04 05:08:11.000" -"Densha de go!! Hashirou Yamanote Sen - 0100BC501355A000","0100BC501355A000","status-playable;nvdec;UE4","playable","2023-11-09 07:47:58.000" -"Warui Ohsama to Rippana Yuusha - 0100556011C10000","0100556011C10000","","","2021-06-24 14:22:15.000" -"TONY HAWK'S™ PRO SKATER™ 1 + 2 - 0100CC00102B4000","0100CC00102B4000","gpu;status-ingame;Needs Update","ingame","2024-09-24 08:18:14.000" -"Mario Golf: Super Rush - 0100C9C00E25C000","0100C9C00E25C000","gpu;status-ingame","ingame","2024-08-18 21:31:48.000" -"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版) - 01001AB0141A8000","01001AB0141A8000","crash;status-ingame","ingame","2021-07-18 07:29:18.000" -"LEGO Builder’s Journey - 01005EE0140AE000 ","01005EE0140AE000","","","2021-06-26 21:31:59.000" -"Disgaea 6: Defiance of Destiny - 0100ABC013136000","0100ABC013136000","deadlock;status-ingame","ingame","2023-04-15 00:50:32.000" -"Game Builder Garage - 0100FA5010788000","0100FA5010788000","status-ingame","ingame","2024-04-20 21:46:22.000" -"Miitopia - 01003DA010E8A000","01003DA010E8A000","gpu;services-horizon;status-ingame","ingame","2024-09-06 10:39:13.000" -"DOOM Eternal - 0100B1A00D8CE000","0100B1A00D8CE000","gpu;slow;status-ingame;nvdec;online-broken","ingame","2024-08-28 15:57:17.000" -"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+ - 0100FDB00AA800000","0100FDB00AA80000","gpu;status-ingame;nvdec;opengl","ingame","2022-09-14 15:15:55.000" -"Sky: Children of the Light - 0100C52011460000","0100C52011460000","cpu;status-nothing;online-broken","nothing","2023-02-23 10:57:10.000" -"Tantei bokumetsu 探偵撲滅 - 0100CBA014014000","0100CBA014014000","","","2021-07-11 15:58:42.000" -"The Legend of Heroes: Sen no Kiseki I - 0100AD0014AB4000 (Japan, Asia)","0100AD0014AB4000","","","2021-07-12 11:15:02.000" -"SmileBASIC 4 - 0100C9100B06A000","0100C9100B06A000","gpu;status-menus","menus","2021-07-29 17:35:59.000" -"The Legend of Zelda: Breath of the Wild Demo - 0100509005AF2000","0100509005AF2000","status-ingame;demo","ingame","2022-12-24 05:02:58.000" -"Kanda Alice mo Suiri Suru 神田アリス も 推理スル - 01003BD013E30000","01003BD013E30000","","","2021-07-15 00:30:16.000" -"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi - 01005BA00F486000","01005BA00F486000","status-playable","playable","2021-07-21 10:41:33.000" -"The Legend of Zelda: Skyward Sword HD - 01002DA013484000","01002DA013484000","gpu;status-ingame","ingame","2024-06-14 16:48:29.000" -"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。 - 01004E10142FE000","01004E10142FE000","crash;status-ingame","ingame","2021-07-23 10:56:44.000" -"Suguru Nature - 0100BF9012AC6000","0100BF9012AC6000","crash;status-ingame","ingame","2021-07-29 11:36:27.000" -"Cris Tales - 0100B0400EBC4000","0100B0400EBC4000","crash;status-ingame","ingame","2021-07-29 15:10:53.000" -"Ren'ai, Karichaimashita 恋愛、借りちゃいました - 0100142013cea000","0100142013cea000","","","2021-07-28 00:37:48.000" -"Dai Gyakuten Saiban 1 & 2 -Naruhodou Ryuunosuke no Bouken to Kakugo- - 大逆転裁判1&2 -成歩堂龍ノ介の冒險と覺悟- - 0100D7F00FB1A000","0100D7F00FB1A000","","","2021-07-29 06:38:53.000" -"New Pokémon Snap - 0100F4300BF2C000","0100F4300BF2C000","status-playable","playable","2023-01-15 23:26:57.000" -"Astro Port Shmup Collection - 01000A601139E000","01000A601139E000","","","2021-08-03 13:14:37.000" -"Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600","","services;status-ingame","ingame","2022-07-10 19:27:30.000" -"Picross S GENESIS and Master System edition - ピクロスS MEGA DRIVE & MARKⅢ edition - 010089701567A000","010089701567A000","","","2021-08-10 04:18:06.000" -"ooKing simulator pizza -010033c014666000","010033c014666000","","","2021-08-15 20:49:24.000" -"Everyday♪ Today's MENU for EMIYA Family - 010031B012254000","010031B012254000","","","2021-08-15 19:27:36.000" -"Hatsune Miku Logic Paint S - 0100B4101459A000","0100B4101459A000","","","2021-08-19 00:23:50.000" -"シークレットゲーム KILLER QUEEN for Nintendo Switch","","","","2021-08-21 08:12:41.000" -"リベリオンズ: Secret Game 2nd Stage for Nintendo Switch - 010096000B658000","010096000B658000","","","2021-08-21 08:28:40.000" -"Susanoh -Nihon Shinwa RPG- - スサノオ ~日本神話RPG~ - 0100F3001472A000","0100F3001472A000","","","2021-08-22 04:20:18.000" -"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H - 0100D7E0110B2000","0100D7E0110B2000","32-bit;status-playable","playable","2022-06-06 00:42:09.000" -"World's End Club - 01005A2014362000","01005A2014362000","","","2021-08-28 13:20:14.000" -"Axiom Verge 2","","","","2021-09-02 08:01:30.000" -"Slot - 01007DD011608000","01007DD011608000","","","2021-09-04 01:40:29.000" -"Golf - 01007D8010018000","01007D8010018000","","","2021-09-04 01:55:37.000" -"World Soccer - 010083B00B97A000","010083B00B97A000","","","2021-09-04 02:07:29.000" -"DogFight - 0100E80013BB0000","0100E80013BB0000","","","2021-09-04 14:12:30.000" -"Demon Gaze Extra - デモンゲイズ エクストラ - 01005110142A8000","01005110142A8000","","","2021-09-04 15:06:19.000" -"Spy Alarm - 01000E6015350000","01000E6015350000","services;status-ingame","ingame","2022-12-09 10:12:51.000" -"Rainbocorns - 01005EE0142F6000","01005EE0142F6000","","","2021-09-04 15:53:49.000" -"ZOMB - 0100E2B00E064000","0100E2B00E064000","","","2021-09-04 16:07:19.000" -"Bubble - 01004A4011CB4000","01004A4011CB4000","","","2021-09-04 16:16:24.000" -"Guitar - 0100A2D00EFBE000","0100A2D00EFBE000","","","2021-09-04 18:54:14.000" -"Hunt - 01000DE0125B8000","01000DE0125B8000","","","2021-09-06 11:29:19.000" -"Fight - 0100995013404000","0100995013404000","","","2021-09-06 11:31:42.000" -"Table Tennis - 0100CB00125B6000","0100CB00125B6000","","","2021-09-06 11:55:38.000" -"No More Heroes 3 - 01007C600EB42000","01007C600EB42000","gpu;status-ingame;UE4","ingame","2024-03-11 17:06:19.000" -"Idol Days - 愛怒流でいす - 01002EC014BCA000","01002EC014BCA000","gpu;status-ingame;crash","ingame","2021-12-19 15:31:28.000" -"Checkers - 01001B80124E4000","01001B80124E4000","","","2021-09-06 16:07:24.000" -"King's Bounty II","","","","2021-09-07 21:12:57.000" -"KeyWe - 0100E2B012056000","0100E2B012056000","","","2021-09-07 22:30:10.000" -"Sonic Colors Ultimate [010040E0116B8000]","010040E0116B8000","status-playable","playable","2022-11-12 21:24:26.000" -"SpongeBob: Krusty Cook-Off - 01000D3013E8C000","01000D3013E8C000","","","2021-09-08 13:26:06.000" -"Snakes & Ladders - 010052C00ABFA000","010052C00ABFA000","","","2021-09-08 13:45:26.000" -"Darts - 01005A6010A04000","01005A6010A04000","","","2021-09-08 14:18:00.000" -"Luna's Fishing Garden - 0100374015A2C000","0100374015A2C000","","","2021-09-11 11:38:34.000" -"WarioWare: Get It Together! - 0100563010E0C000","0100563010E0C000","gpu;status-ingame;opengl-backend-bug","ingame","2024-04-23 01:04:56.000" -"SINce Memories Off the starry sky - 0100E94014792000","0100E94014792000","","","2021-09-17 02:03:06.000" -"Bang Dream Girls Band Party for Nintendo Switch","","status-playable","playable","2021-09-19 03:06:58.000" -"ENDER LILIES: Quietus of the Knights - 0100CCF012E9A000","0100CCF012E9A000","","","2021-09-19 01:10:44.000" -"Lost in Random - 01005FE01291A000","01005FE01291A000","gpu;status-ingame","ingame","2022-12-18 07:09:28.000" -"Miyamoto Sansuu Kyoushitsu Kashikoku Naru Puzzle Daizen - 宮本算数教室 賢くなるパズル 大全 - 01004ED014160000","01004ED014160000","","","2021-09-30 12:09:06.000" -"Hot Wheels Unleashed","","","","2021-10-01 01:14:17.000" -"Memories Off - 0100978013276000","0100978013276000","","","2021-10-05 18:50:06.000" -"Blue Reflections Second Light [Demo] [JP] - 01002FA01610A000","01002FA01610A000","","","2021-10-08 09:19:34.000" -"Metroid Dread - 010093801237C000","010093801237C000","status-playable","playable","2023-11-13 04:02:36.000" -"Kentucky Route Zero [0100327005C94000]","0100327005C94000","status-playable","playable","2024-04-09 23:22:46.000" -"Cotton/Guardian Saturn Tribute Games","","gpu;status-boots","boots","2022-11-27 21:00:51.000" -"The Great Ace Attorney Chronicles - 010036E00FB20000","010036E00FB20000","status-playable","playable","2023-06-22 21:26:29.000" -"第六妖守-Dairoku-Di Liu Yao Shou -Dairoku -0100ad80135f4000","0100ad80135f4000","","","2021-10-17 04:42:47.000" -"Touhou Genso Wanderer -Lotus Labyrinth R- - 0100a7a015e4c000","0100a7a015e4c000","","","2021-10-17 20:10:40.000" -"Crysis 2 Remastered - 0100582010AE0000","0100582010AE0000","deadlock;status-menus","menus","2023-09-21 10:46:17.000" -"Crysis 3 Remastered - 0100CD3010AE2000 ","0100CD3010AE2000","deadlock;status-menus","menus","2023-09-10 16:03:50.000" -"Dying Light: Platinum Edition - 01008c8012920000","01008c8012920000","services-horizon;status-boots","boots","2024-03-11 10:43:32.000" -"Steel Assault - 01001C6014772000","01001C6014772000","status-playable","playable","2022-12-06 14:48:30.000" -"Foreclosed - 0100AE001256E000","0100AE001256E000","status-ingame;crash;Needs More Attention;nvdec","ingame","2022-12-06 14:41:12.000" -"Nintendo 64 - Nintendo Switch Online - 0100C9A00ECE6000","0100C9A00ECE6000","gpu;status-ingame;vulkan","ingame","2024-04-23 20:21:07.000" -"Mario Party Superstars - 01006FE013472000","01006FE013472000","gpu;status-ingame;ldn-works;mac-bug","ingame","2024-05-16 11:23:34.000" -"Wheel of Fortune [010033600ADE6000]","010033600ADE6000","status-boots;crash;Needs More Attention;nvdec","boots","2023-11-12 20:29:24.000" -"Abarenbo Tengu & Zombie Nation - 010040E012A5A000","010040E012A5A000","","","2021-10-31 18:24:00.000" -"Eight Dragons - 01003AD013BD2000","01003AD013BD2000","status-playable;nvdec","playable","2022-10-27 14:47:28.000" -"Restless Night [0100FF201568E000]","0100FF201568E000","status-nothing;crash","nothing","2022-02-09 10:54:49.000" -"rRootage Reloaded [01005CD015986000]","01005CD015986000","status-playable","playable","2022-08-05 23:20:18.000" -"Just Dance 2022 - 0100EA6014BB8000","0100EA6014BB8000","gpu;services;status-ingame;crash;Needs Update","ingame","2022-10-28 11:01:53.000" -"LEGO Marvel Super Heroes - 01006F600FFC8000","01006F600FFC8000","status-playable","playable","2024-09-10 19:02:19.000" -"Destructivator SE [0100D74012E0A000]","0100D74012E0A000","","","2021-11-06 14:12:07.000" -"Diablo 2 Resurrected - 0100726014352000","0100726014352000","gpu;status-ingame;nvdec","ingame","2023-08-18 18:42:47.000" -"World War Z [010099F013898000]","010099F013898000","","","2021-11-09 12:00:01.000" -"STAR WARS Jedi Knight II Jedi Outcast - 0100BB500EACA000","0100BB500EACA000","gpu;status-ingame","ingame","2022-09-15 22:51:00.000" -"Shin Megami Tensei V - 010063B012DC6000","010063B012DC6000","status-playable;UE4","playable","2024-02-21 06:30:07.000" -"Mercenaries Rebirth Call of the Wild Lynx - [010031e01627e000]","010031e01627e000","","","2021-11-13 17:14:02.000" -"Summer Pockets REFLECTION BLUE - 0100273013ECA000","0100273013ECA000","","","2021-11-15 14:25:26.000" -"Spelunky - 0100710013ABA000","0100710013ABA000","status-playable","playable","2021-11-20 17:45:03.000" -"Spelunky 2 - 01007EC013ABC000","01007EC013ABC000","","","2021-11-17 19:31:16.000" -"MARSUPILAMI-HOOBADVENTURE - 010074F014628000","010074F014628000","","","2021-11-19 07:43:14.000" -"Pokémon Brilliant Diamond - 0100000011D90000","0100000011D90000","gpu;status-ingame;ldn-works","ingame","2024-08-28 13:26:35.000" -"Ice Station Z - 0100954014718000","0100954014718000","status-menus;crash","menus","2021-11-21 20:02:15.000" -"Shiro - 01000244016BAE000","01000244016BAE00","gpu;status-ingame","ingame","2024-01-13 08:54:39.000" -"Yuru Camp △ Have a nice day! - 0100D12014FC2000","0100D12014FC2000","","","2021-11-29 10:46:03.000" -"Iridium - 010095C016C14000","010095C016C14000","status-playable","playable","2022-08-05 23:19:53.000" -"Black The Fall - 0100502007f54000","0100502007f54000","","","2021-12-05 03:08:22.000" -"Loop Hero - 010004E01523C000","010004E01523C000","","","2021-12-12 18:11:42.000" -"The Battle Cats Unite! - 01001E50141BC000","01001E50141BC000","deadlock;status-ingame","ingame","2021-12-14 21:38:34.000" -"Life is Strange: True Colors [0100500012AB4000]","0100500012AB4000","gpu;status-ingame;UE4","ingame","2024-04-08 16:11:52.000" -"Deathsmiles I・II - 01009120119B4000","01009120119B4000","status-playable","playable","2024-04-08 19:29:00.000" -"Deedlit in Wonder Labyrinth - 0100EF0015A9A000","0100EF0015A9A000","deadlock;status-ingame;Needs Update;Incomplete","ingame","2022-01-19 10:00:59.000" -"Hamidashi Creative - 01006FF014152000","01006FF014152000","gpu;status-ingame","ingame","2021-12-19 15:30:51.000" -"Ys IX: Monstrum Nox - 0100E390124D8000","0100E390124D8000","status-playable","playable","2022-06-12 04:14:42.000" -"Animal Crossing New Horizons Island Transfer Tool - 0100F38011CFE000","0100F38011CFE000","services;status-ingame;Needs Update;Incomplete","ingame","2022-12-07 13:51:19.000" -"Pokémon Mystery Dungeon Rescue Team DX (DEMO) - 010040800FB54000","010040800FB54000","","","2022-01-09 02:15:04.000" -"Monopoly Madness - 01005FF013DC2000","01005FF013DC2000","status-playable","playable","2022-01-29 21:13:52.000" -"DoDonPachi Resurrection - 怒首領蜂大復活 - 01005A001489A000","01005A001489A000","status-ingame;32-bit;crash","ingame","2024-01-25 14:37:32.000" -"Shadow Man Remastered - 0100C3A013840000","0100C3A013840000","gpu;status-ingame","ingame","2024-05-20 06:01:39.000" -"Star Wars - Knights Of The Old Republic - 0100854015868000","0100854015868000","gpu;deadlock;status-boots","boots","2024-02-12 10:13:51.000" -"Gunvolt Chronicles: Luminous Avenger iX 2 - 0100763015C2E000","0100763015C2E000","status-nothing;crash;Needs Update","nothing","2022-04-29 15:34:34.000" -"Furaiki 4 - 風雨来記4 - 010046601125A000","010046601125A000","","","2022-01-27 17:37:47.000" -"Pokémon Legends: Arceus - 01001F5010DFA000","01001F5010DFA000","gpu;status-ingame;Needs Update;ldn-works","ingame","2024-09-19 10:02:02.000" -"Demon Gaze EXTRA - 0100FCC0168FC000","0100FCC0168FC000","","","2022-02-05 16:25:26.000" -"Fatal Frame: Maiden of Black Water - 0100BEB015604000","0100BEB015604000","status-playable","playable","2023-07-05 16:01:40.000" -"OlliOlli World - 0100C5D01128E000","0100C5D01128E000","","","2022-02-08 13:01:22.000" -"Horse Club Adventures - 0100A6B012932000","0100A6B012932000","","","2022-02-10 01:59:25.000" -"Toree 3D (0100E9701479E000)","0100E9701479E000","","","2022-02-15 18:41:33.000" -"Picross S7","","status-playable","playable","2022-02-16 12:51:25.000" -"Nintendo Switch Sports Online Play Test - 01000EE017182000","01000EE017182000","gpu;status-ingame","ingame","2022-03-16 07:44:12.000" -"MLB The Show 22 Tech Test - 0100A9F01776A000","0100A9F01776A000","services;status-nothing;crash;Needs Update;demo","nothing","2022-12-09 10:28:34.000" -"Cruis'n Blast - 0100B41013C82000","0100B41013C82000","gpu;status-ingame","ingame","2023-07-30 10:33:47.000" -"Crunchyroll - 0100C090153B4000","0100C090153B4000","","","2022-02-20 13:56:29.000" -"PUZZLE & DRAGONS Nintendo Switch Edition - 01001D701375A000","01001D701375A000","","","2022-02-20 11:01:34.000" -"Hatsune Miku Connecting Puzzle TAMAGOTORI - 0100118016036000","0100118016036000","","","2022-02-23 02:07:05.000" -"Mononoke Slashdown - 0100F3A00FB78000","0100F3A00FB78000","status-menus;crash","menus","2022-05-04 20:55:47.000" -"Tsukihime - A piece of blue glass moon- - 01001DC01486A800","01001DC01486A800","","","2022-02-28 14:35:38.000" -"Kirby and the Forgotten Land (Demo version) - 010091201605A000","010091201605A000","status-playable;demo","playable","2022-08-21 21:03:01.000" -"Super Zangyura - 01001DA016942000","01001DA016942000","","","2022-03-05 04:54:47.000" -"Atelier Sophie 2: The Alchemist of the Mysterious Dream - 010082A01538E000","010082A01538E000","status-ingame;crash","ingame","2022-12-01 04:34:03.000" -"SEGA Genesis - Nintendo Switch Online - 0100B3C014BDA000","0100B3C014BDA000","status-nothing;crash;regression","nothing","2022-04-11 07:27:21.000" -"TRIANGLE STRATEGY - 0100CC80140F8000","0100CC80140F8000","gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug","ingame","2024-09-25 20:48:37.000" -"Pretty Girls Breakers! - 0100DD2017994000","0100DD2017994000","","","2022-03-10 03:43:51.000" -"Chocobo GP - 01006A30124CA000","01006A30124CA000","gpu;status-ingame;crash","ingame","2022-06-04 14:52:18.000" -".hack//G.U. Last Recode - 0100BA9014A02000","0100BA9014A02000","deadlock;status-boots","boots","2022-03-12 19:15:47.000" -"Monster World IV - 01008CF014560000","01008CF014560000","","","2022-03-12 04:25:01.000" -"Cosmos Bit - 01004810171EA000","01004810171EA000","","","2022-03-12 04:25:58.000" -"The Cruel King and the Great Hero - 0100EBA01548E000","0100EBA01548E000","gpu;services;status-ingame","ingame","2022-12-02 07:02:08.000" -"Lateral Freeze ","","","","2022-03-15 16:00:18.000" -"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath Demo - 0100FA7017CA6000","0100FA7017CA6000","","","2022-03-19 07:26:02.000" -"Neptunia X SENRAN KAGURA Ninja Wars - 01006D90165A2000","01006D90165A2000","","","2022-03-21 06:58:28.000" -"13 Sentinels Aegis Rim Demo - 0100C54015002000","0100C54015002000","status-playable;demo","playable","2022-04-13 14:15:48.000" -"Kirby and the Forgotten Land - 01004D300C5AE000","01004D300C5AE000","gpu;status-ingame","ingame","2024-03-11 17:11:21.000" -"Love of Love Emperor of LOVE! - 010015C017776000","010015C017776000","","","2022-03-25 08:46:23.000" -"Hatsune Miku JIGSAW PUZZLE - 010092E016B26000","010092E016B26000","","","2022-03-25 08:49:39.000" -"The Ryuo's Work is Never Done! - 010033100EE12000","010033100EE12000","status-playable","playable","2022-03-29 00:35:37.000" -"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath - 01005AB015994000","01005AB015994000","gpu;status-playable","playable","2022-03-28 02:22:24.000" -"MLB® The Show™ 22 - 0100876015D74000","0100876015D74000","gpu;slow;status-ingame","ingame","2023-04-25 06:28:43.000" -"13 Sentinels Aegis Rim - 01003FC01670C000","01003FC01670C000","slow;status-ingame","ingame","2024-06-10 20:33:38.000" -"Metal Dogs ","","","","2022-04-15 14:32:19.000" -"STAR WARS: The Force Unleashed - 0100153014544000","0100153014544000","status-playable","playable","2024-05-01 17:41:28.000" -"JKSV - 00000000000000000","0000000000000000","","","2022-04-21 23:34:59.000" -"Jigsaw Masterpieces - 0100BB800E0D2000","0100BB800E0D2000","","","2022-05-04 21:14:45.000" -"QuickSpot - 0100E4501677E000","0100E4501677E000","","","2022-05-04 21:14:48.000" -"Yomawari 3 - 0100F47016F26000","0100F47016F26000","status-playable","playable","2022-05-10 08:26:51.000" -"Marco & The Galaxy Dragon Demo - 0100DA7017C9E000","0100DA7017C9E000","gpu;status-ingame;demo","ingame","2023-06-03 13:05:33.000" -"Demon Turf: Neon Splash - 010010C017B28000","010010C017B28000","","","2022-05-04 21:35:59.000" -"Taiko Risshiden V DX - 0100346017304000","0100346017304000","status-nothing;crash","nothing","2022-06-06 16:25:31.000" -"The Stanley Parable: Ultra Deluxe - 010029300E5C4000","010029300E5C4000","gpu;status-ingame","ingame","2024-07-12 23:18:26.000" -"CHAOS;HEAD NOAH - 0100957016B90000","0100957016B90000","status-playable","playable","2022-06-02 22:57:19.000" -"LOOPERS - 010062A0178A8000","010062A0178A8000","gpu;slow;status-ingame;crash","ingame","2022-06-17 19:21:45.000" -"二ノ国 白き聖灰の女王 - 010032400E700000","010032400E700000","services;status-menus;32-bit","menus","2023-04-16 17:11:06.000" -"even if TEMPEST - 010095E01581C000","010095E01581C000","gpu;status-ingame","ingame","2023-06-22 23:50:25.000" -"Mario Strikers Battle League Football First Kick [01008A30182F2000]","01008A30182F2000","","","2022-06-09 20:58:06.000" -"Mario Strikers: Battle League Football - 010019401051C000","010019401051C000","status-boots;crash;nvdec","boots","2024-05-07 06:23:56.000" -"鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles - 0100309016E7A000","0100309016E7A000","status-playable;UE4","playable","2024-08-08 04:51:49.000" -"Teenage Mutant Ninja Turtles: Shredder's Revenge - 0100FE701475A000","0100FE701475A000","deadlock;status-boots;crash","boots","2024-09-28 09:31:39.000" -"MOFUMOFU Sensen - 0100B46017500000","0100B46017500000","gpu;status-menus","menus","2024-09-21 21:51:08.000" -"OMORI - 010014E017B14000","010014E017B14000","status-playable","playable","2023-01-07 20:21:02.000" -"30 in 1 game collection vol. 2 - 0100DAC013D0A000","0100DAC013D0A000","status-playable;online-broken","playable","2022-10-15 17:22:27.000" -"索尼克:起源 / Sonic Origins - 01009FB016286000","01009FB016286000","status-ingame;crash","ingame","2024-06-02 07:20:15.000" -"Fire Emblem Warriors: Three Hopes - 010071F0143EA000","010071F0143EA000","gpu;status-ingame;nvdec","ingame","2024-05-01 07:07:42.000" -"LEGO Star Wars: The Skywalker Saga - 010042D00D900000","010042D00D900000","gpu;slow;status-ingame","ingame","2024-04-13 20:08:46.000" -"Pocky & Rocky Reshrined - 01000AF015596000","01000AF015596000","","","2022-06-26 21:34:16.000" -"Horgihugh And Friends - 010085301797E000","010085301797E000","","","2022-06-26 21:34:22.000" -"The movie The Quintessential Bride -Five Memories Spent with You- - 01005E9016BDE000","01005E9016BDE000","status-playable","playable","2023-12-14 14:43:43.000" -"nx-hbmenu - 0000000000000000","0000000000000000","status-boots;Needs Update;homebrew","boots","2024-04-06 22:05:32.000" -"Portal 2 - 0100ABD01785C000","0100ABD01785C000","gpu;status-ingame","ingame","2023-02-20 22:44:15.000" -"Portal - 01007BB017812000","01007BB017812000","status-playable","playable","2024-06-12 03:48:29.000" -"EVE ghost enemies - 01007BE0160D6000","01007BE0160D6000","gpu;status-ingame","ingame","2023-01-14 03:13:30.000" -"PowerSlave Exhumed - 01008E100E416000","01008E100E416000","gpu;status-ingame","ingame","2023-07-31 23:19:10.000" -"Quake - 0100BA5012E54000","0100BA5012E54000","gpu;status-menus;crash","menus","2022-08-08 12:40:34.000" -"Rustler - 010071E0145F8000","010071E0145F8000","","","2022-07-06 02:09:18.000" -"Colors Live - 010020500BD86000","010020500BD86000","gpu;services;status-boots;crash","boots","2023-02-26 02:51:07.000" -"WAIFU IMPACT - 0100393016D7E000","0100393016D7E000","","","2022-07-08 22:16:51.000" -"Sherlock Holmes: The Devil's Daughter - 010020F014DBE000","010020F014DBE000","gpu;status-ingame","ingame","2022-07-11 00:07:26.000" -"0100EE40143B6000 - Fire Emblem Warriors: Three Hopes (Japan) ","0100EE40143B6000","","","2022-07-11 18:41:30.000" -"Wunderling - 01001C400482C000","01001C400482C000","audio;status-ingame;crash","ingame","2022-09-10 13:20:12.000" -"SYNTHETIK: Ultimate - 01009BF00E7D2000","01009BF00E7D2000","gpu;status-ingame;crash","ingame","2022-08-30 03:19:25.000" -"Breakout: Recharged - 010022C016DC8000","010022C016DC8000","slow;status-ingame","ingame","2022-11-06 15:32:57.000" -"Banner Saga Trilogy - 0100CE800B94A000","0100CE800B94A000","slow;status-playable","playable","2024-03-06 11:25:20.000" -"CAPCOM BELT ACTION COLLECTION - 0100F6400A77E000","0100F6400A77E000","status-playable;online;ldn-untested","playable","2022-07-21 20:51:23.000" -"死神と少女/Shinigami to Shoujo - 0100AFA01750C000","0100AFA01750C000","gpu;status-ingame;Incomplete","ingame","2024-03-22 01:06:45.000" -"Darius Cozmic Collection Special Edition - 010059C00BED4000","010059C00BED4000","status-playable","playable","2022-07-22 16:26:50.000" -"Earthworms - 0100DCE00B756000","0100DCE00B756000","status-playable","playable","2022-07-25 16:28:55.000" -"LIVE A LIVE - 0100CF801776C000","0100CF801776C000","status-playable;UE4;amd-vendor-bug","playable","2023-02-05 15:12:07.000" -"Fit Boxing - 0100807008868000 ","0100807008868000","status-playable","playable","2022-07-26 19:24:55.000" -"Gurimugurimoa OnceMore Demo - 01002C8018554000","01002C8018554000","status-playable","playable","2022-07-29 22:07:31.000" -"Trinity Trigger Demo - 010048201891A000","010048201891A000","","","2022-07-26 23:32:10.000" -"SD GUNDAM BATTLE ALLIANCE Demo - 0100829018568000","0100829018568000","audio;status-ingame;crash;demo","ingame","2022-08-01 23:01:20.000" -"Fortnite - 010025400AECE000","010025400AECE000","services-horizon;status-nothing","nothing","2024-04-06 18:23:25.000" -"Furi Definitive Edition - 01000EC00AF98000","01000EC00AF98000","status-playable","playable","2022-07-27 12:35:08.000" -"Jackbox Party Starter - 0100814017CB6000","0100814017CB6000","Incomplete","","2022-07-29 22:18:07.000" -"Digimon Survive - 010047500B7B2000","010047500B7B2000","","","2022-07-29 12:33:28.000" -"Xenoblade Chronicles 3 - 010074F013262000","010074F013262000","gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug","ingame","2024-08-06 19:56:44.000" -"Slime Rancher: Plortable Edition - 0100B9C0148D0000","0100B9C0148D0000","","","2022-07-30 06:02:55.000" -"Lost Ruins - 01008AD013A86800","01008AD013A86800","gpu;status-ingame","ingame","2023-02-19 14:09:00.000" -"Heroes of Hammerwatch - 0100D2B00BC54000","0100D2B00BC54000","status-playable","playable","2022-08-01 18:30:21.000" -"Zombie Army 4: Dead War - ","","","","2022-08-01 20:03:53.000" -"Plague Inc: Evolved - 01000CE00CBB8000","01000CE00CBB8000","","","2022-08-02 02:32:33.000" -"Kona - 0100464009294000","0100464009294000","status-playable","playable","2022-08-03 12:48:19.000" -"Minecraft: Story Mode - The Complete Adventure - 010059C002AC2000","010059C002AC2000","status-boots;crash;online-broken","boots","2022-08-04 18:56:58.000" -"LA-MULANA - 010026000F662800","010026000F662800","gpu;status-ingame","ingame","2022-08-12 01:06:21.000" -"Minecraft: Story Mode - Season Two - 01003EF007ABA000","01003EF007ABA000","status-playable;online-broken","playable","2023-03-04 00:30:50.000" -"My Riding Stables - Life with Horses - 010028F00ABAE000","010028F00ABAE000","status-playable","playable","2022-08-05 21:39:07.000" -"NBA Playgrounds - 010002900294A000","010002900294A000","status-playable;nvdec;online-broken;UE4","playable","2022-08-06 17:06:59.000" -"Nintendo Labo Toy-Con 02: Robot Kit - 01009AB0034E0000","01009AB0034E0000","gpu;status-ingame","ingame","2022-08-07 13:03:19.000" -"Nintendo Labo Toy-Con 04: VR Kit - 0100165003504000","0100165003504000","services;status-boots;crash","boots","2023-01-17 22:30:24.000" -"Azure Striker GUNVOLT 3 - 01004E90149AA000","01004E90149AA000","status-playable","playable","2022-08-10 13:46:49.000" -"Clumsy Rush Ultimate Guys - 0100A8A0174A4000","0100A8A0174A4000","","","2022-08-10 02:12:29.000" -"The DioField Chronicle Demo - 01009D901624A000","01009D901624A000","","","2022-08-10 02:18:16.000" -"Professional Construction - The Simulation - 0100A9800A1B6000","0100A9800A1B6000","slow;status-playable","playable","2022-08-10 15:15:45.000" -"Pokémon: Let's Go, Pikachu! demo - 01009AD008C4C000","01009AD008C4C000","slow;status-playable;demo","playable","2023-11-26 11:23:20.000" -"Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000","0100069000078000","services;status-nothing;crash","nothing","2022-08-11 13:19:41.000" -"Retimed - 010086E00BCB2000","010086E00BCB2000","status-playable","playable","2022-08-11 13:32:39.000" -"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET - 010051C0134F8000","010051C0134F8000","status-playable;vulkan-backend-bug","playable","2024-08-28 00:03:50.000" -"Runbow Deluxe Edition - 0100D37009B8A000","0100D37009B8A000","status-playable;online-broken","playable","2022-08-12 12:20:25.000" -"Saturday Morning RPG - 0100F0000869C000","0100F0000869C000","status-playable;nvdec","playable","2022-08-12 12:41:50.000" -"Slain Back from Hell - 0100BB100AF4C000","0100BB100AF4C000","status-playable","playable","2022-08-12 23:36:19.000" -"Spidersaurs - 010040B017830000","010040B017830000","","","2022-08-14 03:12:30.000" -"月姫 -A piece of blue glass moon- - 01001DC01486A000","01001DC01486A000","","","2022-08-15 15:41:29.000" -"Spacecats with Lasers - 0100D9B0041CE000","0100D9B0041CE000","status-playable","playable","2022-08-15 17:22:44.000" -"Spellspire - 0100E74007EAC000","0100E74007EAC000","status-playable","playable","2022-08-16 11:21:21.000" -"Spot The Difference - 0100E04009BD4000","0100E04009BD4000","status-playable","playable","2022-08-16 11:49:52.000" -"Spot the Differences: Party! - 010052100D1B4000","010052100D1B4000","status-playable","playable","2022-08-16 11:55:26.000" -"Demon Throttle - 01001DA015650000","01001DA015650000","","","2022-08-17 00:54:49.000" -"Kirby’s Dream Buffet - 0100A8E016236000","0100A8E016236000","status-ingame;crash;online-broken;Needs Update;ldn-works","ingame","2024-03-03 17:04:44.000" -"DOTORI - 0100DBD013C92000","0100DBD013C92000","","","2022-08-17 15:10:52.000" -"Syberia 2 - 010028C003FD6000","010028C003FD6000","gpu;status-ingame","ingame","2022-08-24 12:43:03.000" -"Drive Buy - 010093A0108DC000","010093A0108DC000","","","2022-08-21 03:30:18.000" -"Taiko no Tatsujin Rhythm Festival Demo - 0100AA2018846000","0100AA2018846000","","","2022-08-22 23:31:57.000" -"Splatoon 3: Splatfest World Premiere - 0100BA0018500000","0100BA0018500000","gpu;status-ingame;online-broken;demo","ingame","2022-09-19 03:17:12.000" -"Transcripted - 010009F004E66000","010009F004E66000","status-playable","playable","2022-08-25 12:13:11.000" -"eBaseball Powerful Pro Yakyuu 2022 - 0100BCA016636000","0100BCA016636000","gpu;services-horizon;status-nothing;crash","nothing","2024-05-26 23:07:19.000" -"Firegirl: Hack 'n Splash Rescue DX - 0100DAF016D48000","0100DAF016D48000","","","2022-08-30 15:32:22.000" -"Little Noah: Scion of Paradise - 0100535014D76000","0100535014D76000","status-playable;opengl-backend-bug","playable","2022-09-14 04:17:13.000" -"Tinykin - 0100A73016576000","0100A73016576000","gpu;status-ingame","ingame","2023-06-18 12:12:24.000" -"Youtubers Life - 00100A7700CCAA4000","00100A7700CCAA40","status-playable;nvdec","playable","2022-09-03 14:56:19.000" -"Cozy Grove - 01003370136EA000","01003370136EA000","gpu;status-ingame","ingame","2023-07-30 22:22:19.000" -"A Duel Hand Disaster: Trackher - 010026B006802000","010026B006802000","status-playable;nvdec;online-working","playable","2022-09-04 14:24:55.000" -"Angry Bunnies: Colossal Carrot Crusade - 0100F3500D05E000","0100F3500D05E000","status-playable;online-broken","playable","2022-09-04 14:53:26.000" -"CONTRA: ROGUE CORPS Demo - 0100B8200ECA6000","0100B8200ECA6000","gpu;status-ingame","ingame","2022-09-04 16:46:52.000" -"The Gardener and the Wild Vines - 01006350148DA000","01006350148DA000","gpu;status-ingame","ingame","2024-04-29 16:32:10.000" -"HAAK - 0100822012D76000","0100822012D76000","gpu;status-ingame","ingame","2023-02-19 14:31:05.000" -"Temtem - 0100C8B012DEA000","0100C8B012DEA000","status-menus;online-broken","menus","2022-12-17 17:36:11.000" -"Oniken - 010057C00D374000","010057C00D374000","status-playable","playable","2022-09-10 14:22:38.000" -"Ori and the Blind Forest: Definitive Edition Demo - 010005800F46E000","010005800F46E000","status-playable","playable","2022-09-10 14:40:12.000" -"Spyro Reignited Trilogy - 010077B00E046000","010077B00E046000","status-playable;nvdec;UE4","playable","2022-09-11 18:38:33.000" -"Disgaea 4 Complete+ Demo - 010068C00F324000","010068C00F324000","status-playable;nvdec","playable","2022-09-13 15:21:59.000" -"Disney Classic Games: Aladdin and The Lion King - 0100A2F00EEFC000 ","0100A2F00EEFC000","status-playable;online-broken","playable","2022-09-13 15:44:17.000" -"Pokémon Shield - 01008DB008C2C000","01008DB008C2C000","deadlock;status-ingame;crash;online-broken;ldn-works;LAN","ingame","2024-08-12 07:20:22.000" -"Shadowrun Returns - 0100371013B3E000","0100371013B3E000","gpu;status-ingame;Needs Update","ingame","2022-10-04 21:32:31.000" -"Shadowrun: Dragonfall - Director's Cut - 01008310154C4000","01008310154C4000","gpu;status-ingame;Needs Update","ingame","2022-10-04 20:52:18.000" -"Shadowrun: Hong Kong - Extended Edition - 0100C610154CA000","0100C610154CA000","gpu;status-ingame;Needs Update","ingame","2022-10-04 20:53:09.000" -"Animal Drifters - 010057F0195DE000","010057F0195DE000","","","2022-09-20 21:43:54.000" -"Paddles - 0100F5E019300000","0100F5E019300000","","","2022-09-20 21:46:00.000" -"River City Girls Zero - 0100E2D015DEA000","0100E2D015DEA000","","","2022-09-20 22:18:30.000" -"JoJos Bizarre Adventure All-Star Battle R - 01008120128C2000","01008120128C2000","status-playable","playable","2022-12-03 10:45:10.000" -"OneShot: World Machine EE","","","","2022-09-22 08:11:47.000" -"Taiko no Tatsujin: Rhythm Festival - 0100BCA0135A0000","0100BCA0135A0000","status-playable","playable","2023-11-13 13:16:34.000" -"Trinity Trigger - 01002D7010A54000","01002D7010A54000","status-ingame;crash","ingame","2023-03-03 03:09:09.000" -"太鼓之達人 咚咚雷音祭 - 01002460135a4000","01002460135a4000","","","2022-09-27 07:17:54.000" -"Life is Strange Remastered - 0100DC301186A000","0100DC301186A000","status-playable;UE4","playable","2022-10-03 16:54:44.000" -"Life is Strange: Before the Storm Remastered - 010008501186E000","010008501186E000","status-playable","playable","2023-09-28 17:15:44.000" -"Hatsune Miku: Project DIVA Mega Mix - 01001CC00FA1A000","01001CC00FA1A000","audio;status-playable;online-broken","playable","2024-01-07 23:12:57.000" -"Shovel Knight Dig - 0100B62017E68000","0100B62017E68000","","","2022-09-30 20:51:35.000" -"Couch Co-Op Bundle Vol. 2 - 01000E301107A000","01000E301107A000","status-playable;nvdec","playable","2022-10-02 12:04:21.000" -"Shadowverse: Champion’s Battle - 01003B90136DA000","01003B90136DA000","status-nothing;crash","nothing","2023-03-06 00:31:50.000" -"Jinrui no Ninasama he - 0100F4D00D8BE000","0100F4D00D8BE000","status-ingame;crash","ingame","2023-03-07 02:04:17.000" -"XEL - 0100CC9015360000","0100CC9015360000","gpu;status-ingame","ingame","2022-10-03 10:19:39.000" -"Catmaze - 01000A1018DF4000","01000A1018DF4000","","","2022-10-03 11:10:48.000" -"Lost Lands: Dark Overlord - 0100BDD010AC8000 ","0100BDD010AC8000","status-playable","playable","2022-10-03 11:52:58.000" -"STAR WARS Episode I: Racer - 0100BD100FFBE000 ","0100BD100FFBE000","slow;status-playable;nvdec","playable","2022-10-03 16:08:36.000" -"Story of Seasons: Friends of Mineral Town - 0100ED400EEC2000","0100ED400EEC2000","status-playable","playable","2022-10-03 16:40:31.000" -"Collar X Malice -Unlimited- - 0100E3B00F412000 ","0100E3B00F412000","status-playable;nvdec","playable","2022-10-04 15:30:40.000" -"Bullet Soul - 0100DA4017FC2000","0100DA4017FC2000","","","2022-10-05 09:41:49.000" -"Kwaidan ~Azuma manor story~ - 0100894011F62000 ","0100894011F62000","status-playable","playable","2022-10-05 12:50:44.000" -"Shantae: Risky's Revenge - Director's Cut - 0100ADA012370000","0100ADA012370000","status-playable","playable","2022-10-06 20:47:39.000" -"NieR:Automata The End of YoRHa Edition - 0100B8E016F76000","0100B8E016F76000","slow;status-ingame;crash","ingame","2024-05-17 01:06:34.000" -"Star Seeker: The secret of the sourcerous Standoff - 0100DFC018D86000","0100DFC018D86000","","","2022-10-09 15:46:05.000" -"Hyrule Warriors: Age of Calamity - Demo Version - 0100A2C01320E000","0100A2C01320E000","slow;status-playable","playable","2022-10-10 17:37:41.000" -"My Universe - Fashion Boutique - 0100F71011A0A000","0100F71011A0A000","status-playable;nvdec","playable","2022-10-12 14:54:19.000" -"Star Trek Prodigy: Supernova - 01009DF015776000","01009DF015776000","status-playable;nvdec;UE4;opengl-backend-bug","playable","2022-10-14 10:18:50.000" -"Dungeon Nightmares 1 + 2 Collection - 0100926013600000","0100926013600000","status-playable","playable","2022-10-17 18:54:22.000" -"Food Truck Tycoon - 0100F3900D0F0000 ","0100F3900D0F0000","status-playable","playable","2022-10-17 20:15:55.000" -"Persona 5 Royal - 01005CA01580EOO","","","","2022-10-17 21:00:21.000" -"Nintendo Switch Sports - 0100D2F00D5C0000","0100D2F00D5C0000","deadlock;status-boots","boots","2024-09-10 14:20:24.000" -"Grim Legends 2: Song Of The Dark Swan - 010078E012D80000","010078E012D80000","status-playable;nvdec","playable","2022-10-18 12:58:45.000" -"My Universe - Cooking Star Restaurant - 0100CD5011A02000","0100CD5011A02000","status-playable","playable","2022-10-19 10:00:44.000" -"Not Tonight - 0100DAF00D0E2000 ","0100DAF00D0E2000","status-playable;nvdec","playable","2022-10-19 11:48:47.000" -"Outbreak: The New Nightmare - 0100B450130FC000","0100B450130FC000","status-playable","playable","2022-10-19 15:42:07.000" -"Alan Wake Remaster - 01000623017A58000","01000623017A5800","","","2022-10-21 06:13:39.000" -"Persona 5 Royal - 01005CA01580E000","01005CA01580E000","gpu;status-ingame","ingame","2024-08-17 21:45:15.000" -"Shing! (サムライフォース:斬!) - 01009050133B4000","01009050133B4000","status-playable;nvdec","playable","2022-10-22 00:48:54.000" -"Mario + Rabbids® Sparks of Hope - 0100317013770000","0100317013770000","gpu;status-ingame;Needs Update","ingame","2024-06-20 19:56:19.000" -"3D Arcade Fishing - 010010C013F2A000","010010C013F2A000","status-playable","playable","2022-10-25 21:50:51.000" -"Aerial Knight's Never Yield - 0100E9B013D4A000","0100E9B013D4A000","status-playable","playable","2022-10-25 22:05:00.000" -"Aluna: Sentinel of the Shards - 010045201487C000","010045201487C000","status-playable;nvdec","playable","2022-10-25 22:17:03.000" -"Atelier Firis: The Alchemist and the Mysterious Journey DX - 010023201421E000","010023201421E000","gpu;status-ingame;nvdec","ingame","2022-10-25 22:46:19.000" -"Atelier Sophie: The Alchemist of the Mysterious Book DX - 01001A5014220000","01001A5014220000","status-playable","playable","2022-10-25 23:06:20.000" -"Backworlds - 0100FEA014316000","0100FEA014316000","status-playable","playable","2022-10-25 23:20:34.000" -"Bakumatsu Renka SHINSENGUMI - 01008260138C4000","01008260138C4000","status-playable","playable","2022-10-25 23:37:31.000" -"Bamerang - 01008D30128E0000","01008D30128E0000","status-playable","playable","2022-10-26 00:29:39.000" -"Battle Axe - 0100747011890000","0100747011890000","status-playable","playable","2022-10-26 00:38:01.000" -"Beautiful Desolation - 01006B0014590000","01006B0014590000","gpu;status-ingame;nvdec","ingame","2022-10-26 10:34:38.000" -"Bladed Fury - 0100DF0011A6A000","0100DF0011A6A000","status-playable","playable","2022-10-26 11:36:26.000" -"Boris The Rocket - 010092C013FB8000","010092C013FB8000","status-playable","playable","2022-10-26 13:23:09.000" -"BraveMatch - 010081501371E000","010081501371E000","status-playable;UE4","playable","2022-10-26 13:32:15.000" -"Brawl Chess - 010068F00F444000","010068F00F444000","status-playable;nvdec","playable","2022-10-26 13:59:17.000" -"CLANNAD Side Stories - 01007B01372C000","","status-playable","playable","2022-10-26 15:03:04.000" -"DC Super Hero Girls™: Teen Power - 0100F8F00C4F2000","0100F8F00C4F2000","nvdec","","2022-10-26 15:16:47.000" -"Devil Slayer - Raksasi - 01003C900EFF6000","01003C900EFF6000","status-playable","playable","2022-10-26 19:42:32.000" -"Disagaea 6: Defiance of Destiny Demo - 0100918014B02000","0100918014B02000","status-playable;demo","playable","2022-10-26 20:02:04.000" -"DreamWorks Spirit Lucky's Big Adventure - 0100236011B4C000","0100236011B4C000","status-playable","playable","2022-10-27 13:30:52.000" -"Dull Grey - 010068D0141F2000","010068D0141F2000","status-playable","playable","2022-10-27 13:40:38.000" -"Dunk Lords - 0100EC30140B6000","0100EC30140B6000","status-playable","playable","2024-06-26 00:07:26.000" -"Earth Defense Force: World Brothers - 0100298014030000","0100298014030000","status-playable;UE4","playable","2022-10-27 14:13:31.000" -"EQI - 01000FA0149B6000","01000FA0149B6000","status-playable;nvdec;UE4","playable","2022-10-27 16:42:32.000" -"Exodemon - 0100A82013976000","0100A82013976000","status-playable","playable","2022-10-27 20:17:52.000" -"Famicom Detective Club: The Girl Who Stands Behind - 0100D670126F6000","0100D670126F6000","status-playable;nvdec","playable","2022-10-27 20:41:40.000" -"Famicom Detective Club: The Missing Heir - 010033F0126F4000","010033F0126F4000","status-playable;nvdec","playable","2022-10-27 20:56:23.000" -"Fighting EX Layer Another Dash - 0100D02014048000","0100D02014048000","status-playable;online-broken;UE4","playable","2024-04-07 10:22:33.000" -"Fire: Ungh's Quest - 010025C014798000","010025C014798000","status-playable;nvdec","playable","2022-10-27 21:41:26.000" -"Haunted Dawn: The Zombie Apocalypse - 01009E6014F18000","01009E6014F18000","status-playable","playable","2022-10-28 12:31:51.000" -"Yomawari: The Long Night Collection - 010043D00BA3200","","Incomplete","","2022-10-29 10:23:17.000" -"Splatoon 3 - 0100C2500FC20000","0100C2500FC20000","status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug","playable","2024-08-04 23:49:11.000" -"Bayonetta 3 - 01004A4010FEA000","01004A4010FEA000","gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC","ingame","2024-09-28 14:34:33.000" -"Instant Sports Tennis - 010031B0145B8000","010031B0145B8000","status-playable","playable","2022-10-28 16:42:17.000" -"Just Die Already - 0100AC600CF0A000","0100AC600CF0A000","status-playable;UE4","playable","2022-12-13 13:37:50.000" -"King of Seas Demo - 0100515014A94000","0100515014A94000","status-playable;nvdec;UE4","playable","2022-10-28 18:09:31.000" -"King of Seas - 01008D80148C8000","01008D80148C8000","status-playable;nvdec;UE4","playable","2022-10-28 18:29:41.000" -"Layers of Fear 2 - 01001730144DA000","01001730144DA000","status-playable;nvdec;UE4","playable","2022-10-28 18:49:52.000" -"Leisure Suit Larry - Wet Dreams Dry Twice - 010031A0135CA000","010031A0135CA000","status-playable","playable","2022-10-28 19:00:57.000" -"Life of Fly 2 - 010069A01506E000","010069A01506E000","slow;status-playable","playable","2022-10-28 19:26:52.000" -"Maneater - 010093D00CB22000","010093D00CB22000","status-playable;nvdec;UE4","playable","2024-05-21 16:11:57.000" -"Mighty Goose - 0100AD701344C000","0100AD701344C000","status-playable;nvdec","playable","2022-10-28 20:25:38.000" -"Missing Features 2D - 0100E3601495C000","0100E3601495C000","status-playable","playable","2022-10-28 20:52:54.000" -"Moorkuhn Kart 2 - 010045C00F274000","010045C00F274000","status-playable;online-broken","playable","2022-10-28 21:10:35.000" -"NINJA GAIDEN 3: Razor's Edge - 01002AF014F4C000","01002AF014F4C000","status-playable;nvdec","playable","2023-08-11 08:25:31.000" -"Nongunz: Doppelganger Edition - 0100542012884000","0100542012884000","status-playable","playable","2022-10-29 12:00:39.000" -"O---O - 01002E6014FC4000","01002E6014FC4000","status-playable","playable","2022-10-29 12:12:14.000" -"Off And On Again - 01006F5013202000","01006F5013202000","status-playable","playable","2022-10-29 19:46:26.000" -"Outbreak: Endless Nightmares - 0100A0D013464000","0100A0D013464000","status-playable","playable","2022-10-29 12:35:49.000" -"Picross S6 - 010025901432A000","010025901432A000","status-playable","playable","2022-10-29 17:52:19.000" -"Alfred Hitchcock - Vertigo - 0100DC7013F14000","0100DC7013F14000","","","2022-10-30 07:55:43.000" -"Port Royale 4 - 01007EF013CA0000","01007EF013CA0000","status-menus;crash;nvdec","menus","2022-10-30 14:34:06.000" -"Quantum Replica - 010045101288A000","010045101288A000","status-playable;nvdec;UE4","playable","2022-10-30 21:17:22.000" -"R-TYPE FINAL 2 - 0100F930136B6000","0100F930136B6000","slow;status-ingame;nvdec;UE4","ingame","2022-10-30 21:46:29.000" -"Retrograde Arena - 01000ED014A2C000","01000ED014A2C000","status-playable;online-broken","playable","2022-10-31 13:38:58.000" -"Rising Hell - 010020C012F48000","010020C012F48000","status-playable","playable","2022-10-31 13:54:02.000" -"Grand Theft Auto III - The Definitive Edition [0100C3C012718000]","0100C3C012718000","","","2022-10-31 20:13:51.000" -"Grand Theft Auto: San Andreas - The Definitive Edition [010065A014024000]","010065A014024000","","","2022-10-31 20:13:56.000" -"Hell Pie - 01000938017E5C000","01000938017E5C00","status-playable;nvdec;UE4","playable","2022-11-03 16:48:46.000" -"Zengeon - 0100057011E50000","0100057011E50000","services-horizon;status-boots;crash","boots","2024-04-29 15:43:07.000" -"Teenage Mutant Ninja Turtles: The Cowabunga Collection - 0100FDB0154E4000","0100FDB0154E4000","status-playable","playable","2024-01-22 19:39:04.000" -"Rolling Sky 2 - 0100579011B40000 ","0100579011B40000","status-playable","playable","2022-11-03 10:21:12.000" -"RWBY: Grimm Eclipse - 0100E21013908000","0100E21013908000","status-playable;online-broken","playable","2022-11-03 10:44:01.000" -"Shin Megami Tensei III Nocturne HD Remaster - 01003B0012DC2000","01003B0012DC2000","status-playable","playable","2022-11-03 22:53:27.000" -"BALDO THE GUARDIAN OWLS - 0100a75005e92000","0100a75005e92000","","","2022-11-04 06:36:18.000" -"Skate City - 0100134011E32000","0100134011E32000","status-playable","playable","2022-11-04 11:37:39.000" -"SnowRunner - 0100FBD13AB6000","","services;status-boots;crash","boots","2023-10-07 00:01:16.000" -"Spooky Chase - 010097C01336A000","010097C01336A000","status-playable","playable","2022-11-04 12:17:44.000" -"Strange Field Football - 01000A6013F86000","01000A6013F86000","status-playable","playable","2022-11-04 12:25:57.000" -"Subnautica Below Zero - 010014C011146000","010014C011146000","status-playable","playable","2022-12-23 14:15:13.000" -"Subnautica - 0100429011144000","0100429011144000","status-playable;vulkan-backend-bug","playable","2022-11-04 13:07:29.000" -"Pyramid Quest - 0100A4E017372000","0100A4E017372000","gpu;status-ingame","ingame","2023-08-16 21:14:52.000" -"Sonic Frontiers - 01004AD014BF0000","01004AD014BF0000","gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug","ingame","2024-09-05 09:18:53.000" -"Metro 2033 Redux - 0100D4900E82C000","0100D4900E82C000","gpu;status-ingame","ingame","2022-11-09 10:53:13.000" -"Tactics Ogre Reborn - 0100E12013C1A000","0100E12013C1A000","status-playable;vulkan-backend-bug","playable","2024-04-09 06:21:35.000" -"Good Night, Knight - 01003AD0123A2000","01003AD0123A2000","status-nothing;crash","nothing","2023-07-30 23:38:13.000" -"Sumire - 01003D50126A4000","01003D50126A4000","status-playable","playable","2022-11-12 13:40:43.000" -"Sunblaze - 0100BFE014476000","0100BFE014476000","status-playable","playable","2022-11-12 13:59:23.000" -"Taiwan Monster Fruit : Prologue - 010028E013E0A000","010028E013E0A000","Incomplete","","2022-11-12 14:10:20.000" -"Tested on Humans: Escape Room - 01006F701507A000","01006F701507A000","status-playable","playable","2022-11-12 14:42:52.000" -"The Longing - 0100F3D0122C2000","0100F3D0122C2000","gpu;status-ingame","ingame","2022-11-12 15:00:58.000" -"Total Arcade Racing - 0100A64010D48000","0100A64010D48000","status-playable","playable","2022-11-12 15:12:48.000" -"Very Very Valet - 0100379013A62000","0100379013A62000","status-playable;nvdec","playable","2022-11-12 15:25:51.000" -"Persona 4 Arena ULTIMAX [010075A016A3A000)","010075A016A3A000","","","2022-11-12 17:27:51.000" -"Piofiore: Episodio 1926 - 01002B20174EE000","01002B20174EE000","status-playable","playable","2022-11-23 18:36:05.000" -"Seven Pirates H - 0100D6F016676000","0100D6F016676000","status-playable","playable","2024-06-03 14:54:12.000" -"Paradigm Paradox - 0100DC70174E0000","0100DC70174E0000","status-playable;vulkan-backend-bug","playable","2022-12-03 22:28:13.000" -"Wanna Survive - 0100D67013910000","0100D67013910000","status-playable","playable","2022-11-12 21:15:43.000" -"Wardogs: Red's Return - 010056901285A000","010056901285A000","status-playable","playable","2022-11-13 15:29:01.000" -"Warhammer Age of Sigmar: Storm Ground - 010031201307A000","010031201307A000","status-playable;nvdec;online-broken;UE4","playable","2022-11-13 15:46:14.000" -"Wing of Darkness - 010035B012F2000","","status-playable;UE4","playable","2022-11-13 16:03:51.000" -"Ninja Gaiden Sigma - 0100E2F014F46000","0100E2F014F46000","status-playable;nvdec","playable","2022-11-13 16:27:02.000" -"Ninja Gaiden Sigma 2 - 0100696014FA000","","status-playable;nvdec","playable","2024-07-31 21:53:48.000" -"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version - 010042501329E000","010042501329E000","status-playable;demo","playable","2022-11-13 22:20:26.000" -"112 Operator - 0100D82015774000","0100D82015774000","status-playable;nvdec","playable","2022-11-13 22:42:50.000" -"Aery - Calm Mind - 0100A801539000","","status-playable","playable","2022-11-14 14:26:58.000" -"Alex Kidd in Miracle World DX - 010025D01221A000","010025D01221A000","status-playable","playable","2022-11-14 15:01:34.000" -"Atari 50 The Anniversary Celebration - 010099801870E000","010099801870E000","slow;status-playable","playable","2022-11-14 19:42:10.000" -"FOOTBALL MANAGER 2023 TOUCH - 0100EDC01990E000","0100EDC01990E000","gpu;status-ingame","ingame","2023-08-01 03:40:53.000" -"ARIA CHRONICLE - 0100691013C46000","0100691013C46000","status-playable","playable","2022-11-16 13:50:55.000" -"B.ARK - 01009B901145C000","01009B901145C000","status-playable;nvdec","playable","2022-11-17 13:35:02.000" -"Pokémon Violet - 01008F6008C5E000","01008F6008C5E000","gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug","ingame","2024-07-30 02:51:48.000" -"Pokémon Scarlet - 0100A3D008C5C000","0100A3D008C5C000","gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug","ingame","2023-12-14 13:18:29.000" -"Bear's Restaurant - 0100CE014A4E000","","status-playable","playable","2024-08-11 21:26:59.000" -"BeeFense BeeMastered - 010018F007786000","010018F007786000","status-playable","playable","2022-11-17 15:38:12.000" -"Oddworld: Soulstorm - 0100D210177C6000","0100D210177C6000","services-horizon;status-boots;crash","boots","2024-08-18 13:13:26.000" -"Aquarium Hololive All CG","","","","2022-11-19 05:12:23.000" -"Billion Road - 010057700FF7C000","010057700FF7C000","status-playable","playable","2022-11-19 15:57:43.000" -"No Man’s Sky - 0100853015E86000","0100853015E86000","gpu;status-ingame","ingame","2024-07-25 05:18:17.000" -"Lunistice - 0100C2E01254C000","0100C2E01254C000","","","2022-11-23 18:44:18.000" -"The Oregon Trail - 0100B080184BC000","0100B080184BC000","gpu;status-ingame","ingame","2022-11-25 16:11:49.000" -"Smurfs Kart - 01009790186FE000","01009790186FE000","status-playable","playable","2023-10-18 00:55:00.000" -"DYSMANTLE - 010008900BC5A000","010008900BC5A000","gpu;status-ingame","ingame","2024-07-15 16:24:12.000" -"Happy Animals Mini Golf - 010066C018E50000","010066C018E50000","gpu;status-ingame","ingame","2022-12-04 19:24:28.000" -"Pocket Pool - 010019F019168000","010019F019168000","","","2022-11-27 03:36:39.000" -"7 Days of Rose - 01002D3019654000","01002D3019654000","","","2022-11-27 20:46:16.000" -"Garfield Lasagna Party - 01003C401895E000","01003C401895E000","","","2022-11-27 21:21:09.000" -"Paper Bad - 01002A0019914000","01002A0019914000","","","2022-11-27 22:01:45.000" -"Ultra Kaiju Monster Rancher - 01008E0019388000","01008E0019388000","","","2022-11-28 02:37:06.000" -"The Legend of Heroes: Trails from Zero - 01001920156C2000","01001920156C2000","gpu;status-ingame;mac-bug","ingame","2024-09-14 21:41:41.000" -"Harvestella - 0100A280187BC000","0100A280187BC000","status-playable;UE4;vulkan-backend-bug;mac-bug","playable","2024-02-13 07:04:11.000" -"Ace Angler: Fishing Spirits - 01007C50132C8000","01007C50132C8000","status-menus;crash","menus","2023-03-03 03:21:39.000" -"WHITE DAY : A labyrinth named school - 010076601839C000","010076601839C000","","","2022-12-03 07:17:03.000" -"Bravery and Greed - 0100F60017D4E000","0100F60017D4E000","gpu;deadlock;status-boots","boots","2022-12-04 02:23:47.000" -"River City Girls 2 - 01002E80168F4000","01002E80168F4000","status-playable","playable","2022-12-07 00:46:27.000" -"SAMURAI MAIDEN - 01003CE018AF6000","01003CE018AF6000","","","2022-12-05 02:56:48.000" -"Front Mission 1st Remake - 0100F200178F4000","0100F200178F4000","status-playable","playable","2023-06-09 07:44:24.000" -"Cardfight!! Vanguard Dear Days - 0100097016B04000","0100097016B04000","","","2022-12-06 00:37:12.000" -"MOL SOCCER ONLINE Lite - 010034501756C000","010034501756C000","","","2022-12-06 00:41:58.000" -"Goonya Monster - 010026301785A000","010026301785A000","","","2022-12-06 00:46:24.000" -"Battle Spirits Connected Battlers - 01009120155CC000","01009120155CC000","","","2022-12-07 00:21:33.000" -"TABE-O-JA - 0100E330127FC000","0100E330127FC000","","","2022-12-07 00:26:47.000" -"Solomon Program - 01008A801370C000","01008A801370C000","","","2022-12-07 00:33:02.000" -"Dragon Quest Treasures - 0100217014266000","0100217014266000","gpu;status-ingame;UE4","ingame","2023-05-09 11:16:52.000" -"Sword of the Necromancer - 0100E4701355C000","0100E4701355C000","status-ingame;crash","ingame","2022-12-10 01:28:39.000" -"Dragon Prana - 01001C5019074000","01001C5019074000","","","2022-12-10 02:10:53.000" -"Burger Patrol - 010013D018E8A000","010013D018E8A000","","","2022-12-10 02:12:02.000" -"Witch On The Holy Night - 010012A017F18800","010012A017F18800","status-playable","playable","2023-03-06 23:28:11.000" -"Hakoniwa Ranch Sheep Village - 010059C017346000 ","010059C017346000","","","2022-12-13 03:04:03.000" -"KASIORI - 0100E75014D7A000","0100E75014D7A000","","","2022-12-13 03:05:00.000" -"CRISIS CORE –FINAL FANTASY VII– REUNION - 01004BC0166CC000","01004BC0166CC000","status-playable","playable","2022-12-19 15:53:59.000" -"Bitmaster - 010026E0141C8000","010026E0141C8000","status-playable","playable","2022-12-13 14:05:51.000" -"Black Book - 0100DD1014AB8000","0100DD1014AB8000","status-playable;nvdec","playable","2022-12-13 16:38:53.000" -"Carnivores: Dinosaur Hunt","","status-playable","playable","2022-12-14 18:46:06.000" -"Trivial Pursuit Live! 2 - 0100868013FFC000","0100868013FFC000","status-boots","boots","2022-12-19 00:04:33.000" -"Astrologaster - 0100B80010C48000","0100B80010C48000","cpu;status-nothing;32-bit;crash","nothing","2023-06-28 15:39:31.000" -"Factorio - 01004200189F4000","01004200189F4000","deadlock;status-boots","boots","2024-06-11 19:26:16.000" -"The Punchuin - 01004F501962C000","01004F501962C000","","","2022-12-28 00:51:46.000" -"Adventure Academia The Fractured Continent - 01006E6018570000","01006E6018570000","","","2022-12-29 03:35:04.000" -"Illusion Garden Story ~Daiichi Sangyo Yuukarin~ - 01003FE0168EA000","01003FE0168EA000","","","2022-12-29 03:39:06.000" -"Popplings - 010063D019A70000","010063D019A70000","","","2022-12-29 03:42:21.000" -"Sports Story - 010025B0100D0000","010025B0100D0000","","","2022-12-29 03:45:54.000" -"Death Bite Shibito Magire - 01002EB01802A000","01002EB01802A000","","","2022-12-29 03:51:54.000" -"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!! - 01002D60188DE000","01002D60188DE000","status-ingame;crash","ingame","2023-03-17 01:54:01.000" -"Asphalt 9 Legends - 01007B000C834800","01007B000C834800","","","2022-12-30 05:19:35.000" -"Arcade Archives TETRIS THE GRAND MASTER - 0100DFD016B7A000","0100DFD016B7A000","status-playable","playable","2024-06-23 01:50:29.000" -"Funny action Great adventure for good adults - 0100BB1018082000","0100BB1018082000","","","2023-01-01 03:13:21.000" -"Fairy Fencer F Refrain Chord - 010048C01774E000","010048C01774E000","","","2023-01-01 03:15:45.000" -"Needy Streamer Overload","","","","2023-01-01 23:24:14.000" -"Absolute Hero Remodeling Plan - 0100D7D015CC2000","0100D7D015CC2000","","","2023-01-02 03:42:59.000" -"Fourth God -Reunion- - 0100BF50131E6000","0100BF50131E6000","","","2023-01-02 03:45:28.000" -"Doll Princess of Marl Kingdom - 010078E0181D0000","010078E0181D0000","","","2023-01-02 03:49:45.000" -"Oshiritantei Pupupu Mirai no Meitantei Tojo! - 01000F7014504000","01000F7014504000","","","2023-01-02 03:51:59.000" -"Moshikashite Obake no Shatekiya for Nintendo Switch - 0100B580144F6000","0100B580144F6000","","","2023-01-02 03:55:10.000" -"Platinum Train-A trip through Japan - 0100B9400654E000","0100B9400654E000","","","2023-01-02 03:58:00.000" -"Deadly Eating Adventure Meshi - 01007B70146F6000","01007B70146F6000","","","2023-01-02 04:00:31.000" -"Gurimugurimoa OnceMore - 01003F5017760000","01003F5017760000","","","2023-01-02 04:03:49.000" -"Neko-Tomo - 0100FA00082BE000","0100FA00082BE000","","","2023-01-03 04:43:05.000" -"Wreckfest - 0100DC0012E48000","0100DC0012E48000","status-playable","playable","2023-02-12 16:13:00.000" -"VARIOUS DAYLIFE - 0100538017BAC000","0100538017BAC000","","","2023-01-03 13:41:46.000" -"WORTH LIFE - 0100D46014648000","0100D46014648000","","","2023-01-04 02:58:27.000" -"void* tRrLM2(); //Void Terrarium 2 - 010078D0175EE000","010078D0175EE000","status-playable","playable","2023-12-21 11:00:41.000" -"Witch's Garden - 010061501904E000","010061501904E000","gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug","ingame","2023-01-11 02:11:24.000" -"PUI PUI MOLCAR Let’s! MOLCAR PARTY! - 01004F6015612000","01004F6015612000","","","2023-01-05 23:05:00.000" -"Galleria Underground Labyrinth and the Witch’s Brigade - 01007010157B4000","01007010157B4000","","","2023-01-07 01:05:40.000" -"Simona's Requiem - 0100E8C019B36000","0100E8C019B36000","gpu;status-ingame","ingame","2023-02-21 18:29:19.000" -"Sonic Frontiers: Demo - 0100D0201A062000","0100D0201A062000","","","2023-01-07 14:50:19.000" -"Alphadia Neo - 010043101944A000","010043101944A000","","","2023-01-09 01:47:53.000" -"It’s Kunio-kun’s Three Kingdoms! - 0100056014DE0000","0100056014DE0000","","","2023-01-09 01:50:08.000" -"Neon White - 0100B9201406A000","0100B9201406A000","status-ingame;crash","ingame","2023-02-02 22:25:06.000" -"Typing Quest - 0100B7101475E000","0100B7101475E000","","","2023-01-10 03:23:00.000" -"Moorhuhn Jump and Run Traps and Treasures - 0100E3D014ABC000","0100E3D014ABC000","status-playable","playable","2024-03-08 15:10:02.000" -"Bandit Detective Buzzard - 01005DB0180B4000","01005DB0180B4000","","","2023-01-10 03:27:34.000" -"Curved Space - 0100CE5014026000","0100CE5014026000","status-playable","playable","2023-01-14 22:03:50.000" -"Destroy All Humans! - 01009E701356A000","01009E701356A000","gpu;status-ingame;nvdec;UE4","ingame","2023-01-14 22:23:53.000" -"Dininho Space Adventure - 010027E0158A6000","010027E0158A6000","status-playable","playable","2023-01-14 22:43:04.000" -"Vengeful Guardian: Moonrider - 01003A8018E60000","01003A8018E60000","deadlock;status-boots","boots","2024-03-17 23:35:37.000" -"Sumikko Gurashi Atsumare! Sumikko Town - 0100508013B26000","0100508013B26000","","","2023-01-16 04:42:55.000" -"Lone Ruin - 0100B6D016EE6000","0100B6D016EE6000","status-ingame;crash;nvdec","ingame","2023-01-17 06:41:19.000" -"Falcon Age - 0100C3F011B58000","0100C3F011B58000","","","2023-01-17 02:43:00.000" -"Persona 4 Golden - 010062B01525C000","010062B01525C000","status-playable","playable","2024-08-07 17:48:07.000" -"Persona 3 Portable - 0100DCD01525A000","0100DCD01525A000","","","2023-01-19 20:20:27.000" -"Fire Emblem: Engage - 0100A6301214E000","0100A6301214E000","status-playable;amd-vendor-bug;mac-bug","playable","2024-09-01 23:37:26.000" -"Sifu - 01007B5017A12000","01007B5017A12000","","","2023-01-20 19:58:54.000" -"Silver Nornir - 0100D1E018F26000","0100D1E018F26000","","","2023-01-21 04:25:06.000" -"Together - 010041C013C94000","010041C013C94000","","","2023-01-21 04:26:20.000" -"Party Party Time - 0100C6A019C84000","0100C6A019C84000","","","2023-01-21 04:27:40.000" -"Sumikko Gurashi Gakkou Seikatsu Hajimerun desu - 010070800D3E2000","010070800D3E2000","","","2023-01-22 02:47:34.000" -"Sumikko Gurashi Sugoroku every time in the corner - 0100713012BEC000","0100713012BEC000","","","2023-01-22 02:49:00.000" -"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition - 01001C8016B4E000","01001C8016B4E000","gpu;status-ingame;crash","ingame","2024-06-10 23:33:05.000" -"Gesshizu Mori no Chiisana Nakama-tachi - 0100A0D011014000","0100A0D011014000","","","2023-01-23 03:56:43.000" -"Chickip Dancers Norinori Dance de Kokoro mo Odoru - 0100D85017B26000","0100D85017B26000","","","2023-01-23 03:56:47.000" -"Go Rally - 010055A0161F4000","010055A0161F4000","gpu;status-ingame","ingame","2023-08-16 21:18:23.000" -"Devil Kingdom - 01002F000E8F2000","01002F000E8F2000","status-playable","playable","2023-01-31 08:58:44.000" -"Cricket 22 - 0100387017100000","0100387017100000","status-boots;crash","boots","2023-10-18 08:01:57.000" -"サマータイムレンダ Another Horizon - 01005940182ec000","01005940182ec000","","","2023-01-28 02:15:25.000" -"Letters - a written adventure - 0100CE301678E800","0100CE301678E800","gpu;status-ingame","ingame","2023-02-21 20:12:38.000" -"Prinny Presents NIS Classics Volume 1 - 0100A6E01681C000","0100A6E01681C000","status-boots;crash;Needs Update","boots","2023-02-02 07:23:09.000" -"SpongeBob SquarePants The Cosmic Shake - 01009FB0172F4000","01009FB0172F4000","gpu;status-ingame;UE4","ingame","2023-08-01 19:29:53.000" -"THEATRHYTHM FINAL BAR LINE DEMO Version - 01004C5018BC4000","01004C5018BC4000","","","2023-02-01 16:59:55.000" -"Blue Reflection: Second Light [USA, Europe] - 010071C013390000","010071C013390000","","","2023-02-02 02:44:04.000" -"牧場物語 Welcome!ワンダフルライフ - 0100936018EB4000","0100936018EB4000","status-ingame;crash","ingame","2023-04-25 19:43:52.000" -"Coromon - 010048D014322000","010048D014322000","","","2023-02-03 00:47:51.000" -"Exitman Deluxe - 0100648016520000","0100648016520000","","","2023-02-04 02:02:03.000" -"Life is Strange 2 - 0100FD101186C000","0100FD101186C000","status-playable;UE4","playable","2024-07-04 05:05:58.000" -"Fashion Police Squad","","Incomplete","","2023-02-05 12:36:50.000" -"Grindstone - 0100538012496000","0100538012496000","status-playable","playable","2023-02-08 15:54:06.000" -"Kemono Friends Picross - 01004B100BDA2000","01004B100BDA2000","status-playable","playable","2023-02-08 15:54:34.000" -"Picross Lord Of The Nazarick - 010012100E8DC000","010012100E8DC000","status-playable","playable","2023-02-08 15:54:56.000" -"Shovel Knight Pocket Dungeon - 01006B00126EC000","01006B00126EC000","","","2023-02-08 20:12:10.000" -"Game Boy - Nintendo Switch Online - 0100C62011050000","0100C62011050000","status-playable","playable","2023-03-21 12:43:48.000" -"ゲームボーイ Nintendo Switch Online - 0100395011044000","0100395011044000","","","2023-02-08 23:53:21.000" -"Game Boy Advance - Nintendo Switch Online - 010012F017576000","010012F017576000","status-playable","playable","2023-02-16 20:38:15.000" -"Kirby’s Return to Dream Land Deluxe - Demo - 010091D01A57E000","010091D01A57E000","status-playable;demo","playable","2023-02-18 17:21:55.000" -"Metroid Prime Remastered - 010012101468C000","010012101468C000","gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug","ingame","2024-05-07 22:48:15.000" -"WBSC eBASEBALL: POWER PROS - 01007D9019626000","01007D9019626000","","","2023-02-09 02:56:56.000" -"Tricky Towers - 010015F005C8E000","010015F005C8E000","","","2023-02-09 14:58:15.000" -"Clunky Hero - [0100879019212000]","0100879019212000","","","2023-02-10 07:41:34.000" -"Mercenaries Lament Requiem of the Silver Wolf - 0100E44019E4C000","0100E44019E4C000","","","2023-02-11 04:36:39.000" -"Pixel Cup Soccer Ultimate Edition - 0100E17019782000","0100E17019782000","","","2023-02-11 14:28:11.000" -"Sea of Stars Demo - 010036F0182C4000","010036F0182C4000","status-playable;demo","playable","2023-02-12 15:33:56.000" -"MistWorld the after - 010003801579A000","010003801579A000","","","2023-02-13 03:40:17.000" -"MistWorld the after 2 - 0100C50016CD6000","0100C50016CD6000","","","2023-02-13 03:40:23.000" -"Wonder Boy Anniversary Collection - 0100B49016FF0000","0100B49016FF0000","deadlock;status-nothing","nothing","2023-04-20 16:01:48.000" -"OddBallers - 010079A015976000","010079A015976000","","","2023-02-13 03:40:35.000" -"Game Doraemon Nobita’s Space War 2021 - 01000200128A4000","01000200128A4000","","","2023-02-14 02:52:57.000" -"Doraemon Nobita’s Brain Exercise Adventure - 0100E6F018D10000","0100E6F018D10000","","","2023-02-14 02:54:51.000" -"Makai Senki Disgaea 7 - 0100A78017BD6000","0100A78017BD6000","status-playable","playable","2023-10-05 00:22:18.000" -"Blanc - 010039501405E000","010039501405E000","gpu;slow;status-ingame","ingame","2023-02-22 14:00:13.000" -"Arcade Machine Gopher’s Revenge - 0100DCB019CAE000","0100DCB019CAE000","","","2023-02-15 21:48:46.000" -"Santa Claus Goblins Attack - 0100A0901A3E4000","0100A0901A3E4000","","","2023-02-15 21:48:50.000" -"Garden of Pets - 010075A01A312000","010075A01A312000","","","2023-02-15 21:48:52.000" -"THEATRHYTHM FINAL BAR LINE - 010024201834A000","010024201834A000","status-playable","playable","2023-02-19 19:58:57.000" -"Rob Riches - 010061501A2B6000","010061501A2B6000","","","2023-02-16 04:44:01.000" -"Cuddly Forest Friends - 01005980198D4000","01005980198D4000","","","2023-02-16 04:44:04.000" -"Dragon Quest X Awakening Five Races Offline - 0100E2E0152E4000","0100E2E0152E4000","status-playable;nvdec;UE4","playable","2024-08-20 10:04:24.000" -"Persona 5 Strikers Bonus Content - (01002F101340C000)","01002F101340C000","","","2023-02-16 20:29:01.000" -"Let’s play duema! - 0100EFC0152E0000","0100EFC0152E0000","","","2023-02-18 03:09:55.000" -"Let’s play duema Duel Masters! 2022 - 010006C017354000","010006C017354000","","","2023-02-18 03:09:58.000" -"Heterogeneous Strongest King Encyclopedia Battle Coliseum - 0100BD00198AA000","0100BD00198AA000","","","2023-02-18 03:10:01.000" -"Hopping Girl Kohane EX - 0100D2B018F5C000","0100D2B018F5C000","","","2023-02-19 00:57:25.000" -"Earth Defense Force 2 for Nintendo Switch - 010082B013C8C000","010082B013C8C000","","","2023-02-19 01:13:14.000" -"Earth Defense Force 3 for Nintendo Switch - 0100E87013C98000","0100E87013C98000","","","2023-02-19 01:13:21.000" -"PAC-MAN WORLD Re-PAC - 0100D4401565E000","0100D4401565E000","","","2023-02-19 18:49:11.000" -"Eastward - 010071B00F63A000","010071B00F63A000","","","2023-02-19 19:50:36.000" -"Arcade Archives THE NEWZEALAND STORY - 010045D019FF0000","010045D019FF0000","","","2023-02-20 01:59:58.000" -"Foxy’s Coin Hunt - 0100EE401A378000","0100EE401A378000","","","2023-02-20 02:00:00.000" -"Samurai Warrior - 0100B6501A360000","0100B6501A360000","status-playable","playable","2023-02-27 18:42:38.000" -"NCL USA Bowl - 010004801A450000","010004801A450000","","","2023-02-20 02:00:05.000" -"Dadish - 0100B8B013310000","0100B8B013310000","","","2023-02-20 23:19:02.000" -"Dadish 2 - 0100BB70140BA000","0100BB70140BA000","","","2023-02-20 23:28:43.000" -"Dadish 3 - 01001010181AA000","01001010181AA000","","","2023-02-20 23:38:55.000" -"Digimon World: Next Order - 0100F00014254000","0100F00014254000","status-playable","playable","2023-05-09 20:41:06.000" -"PAW Patrol The Movie: Adventure City Calls - 0100FFE013628000","0100FFE013628000","","","2023-02-22 14:09:11.000" -"PAW Patrol: Grand Prix - 0100360016800000","0100360016800000","gpu;status-ingame","ingame","2024-05-03 16:16:11.000" -"Gigantosaurus Dino Kart - 01001890167FE000","01001890167FE000","","","2023-02-23 03:15:01.000" -"Rise Of Fox Hero - 0100A27018ED0000","0100A27018ED0000","","","2023-02-23 03:15:04.000" -"MEGALAN 11 - 0100C7501360C000","0100C7501360C000","","","2023-02-23 03:15:06.000" -"Rooftop Renegade - 0100644012F0C000","0100644012F0C000","","","2023-02-23 03:15:10.000" -"Kirby’s Return to Dream Land Deluxe - 01006B601380E000","01006B601380E000","status-playable","playable","2024-05-16 19:58:04.000" -"Snow Bros. Special - 0100bfa01787c000","0100bfa01787c000","","","2023-02-24 02:25:54.000" -"Toree 2 - 0100C7301658C000","0100C7301658C000","","","2023-02-24 03:15:04.000" -"Red Hands - 2 Player Games - 01003B2019424000","01003B2019424000","","","2023-02-24 03:53:12.000" -"nPaint - 0100917019FD6000","0100917019FD6000","","","2023-02-24 03:53:18.000" -"Octopath Traveler II - 0100A3501946E000","0100A3501946E000","gpu;status-ingame;amd-vendor-bug","ingame","2024-09-22 11:39:20.000" -"Planet Cube Edge - 01007EA019CFC000","01007EA019CFC000","status-playable","playable","2023-03-22 17:10:12.000" -"Rumble Sus - 0100CE201946A000","0100CE201946A000","","","2023-02-25 02:19:01.000" -"Easy Come Easy Golf - 0100ECF01800C000","0100ECF01800C000","status-playable;online-broken;regression","playable","2024-04-04 16:15:00.000" -"Piano Learn and Play - 010038501A6B8000","010038501A6B8000","","","2023-02-26 02:57:12.000" -"nOS new Operating System - 01008AE019614000","01008AE019614000","status-playable","playable","2023-03-22 16:49:08.000" -"XanChuchamel - 0100D970191B8000","0100D970191B8000","","","2023-02-26 02:57:19.000" -"Rune Factory 3 Special - 01001EF017BE6000","01001EF017BE6000","","","2023-03-02 05:34:40.000" -"Light Fingers - 0100A0E005E42000","0100A0E005E42000","","","2023-03-03 03:04:09.000" -"Disaster Detective Saiga An Indescribable Mystery - 01005BF01A3EC000","01005BF01A3EC000","","","2023-03-04 00:34:26.000" -"Touhou Gouyoku Ibun ~ Sunken Fossil World. - 0100031018CFE000","0100031018CFE000","","","2023-03-04 00:34:29.000" -"Ninja Box - 0100272009E32000","0100272009E32000","","","2023-03-06 00:31:44.000" -"Rubber Bandits - 010060801843A000","010060801843A000","","","2023-03-07 22:26:57.000" -"Arcade Archives DON DOKO DON - 0100B6201A2AA000","0100B6201A2AA000","","","2023-03-14 00:13:52.000" -"Knights and Guns - 010060A011ECC000","010060A011ECC000","","","2023-03-14 00:13:54.000" -"Process of Elimination Demo - 01007F6019E2A000","01007F6019E2A000","","","2023-03-14 00:13:57.000" -"DREDGE [ CHAPTER ONE ] - 01000AB0191DA000","01000AB0191DA000","","","2023-03-14 01:49:12.000" -"Bayonetta Origins Cereza and the Lost Demon Demo - 010002801A3FA000","010002801A3FA000","gpu;status-ingame;demo","ingame","2024-02-17 06:06:28.000" -"Yo-Kai Watch 4++ - 010086C00AF7C000","010086C00AF7C000","status-playable","playable","2024-06-18 20:21:44.000" -"Tama Cannon - 0100D8601A848000","0100D8601A848000","","","2023-03-15 01:08:05.000" -"The Smile Alchemist - 0100D1C01944E000","0100D1C01944E000","","","2023-03-15 01:08:08.000" -"Caverns of Mars Recharged - 01009B201A10E000","01009B201A10E000","","","2023-03-15 01:08:12.000" -"Roniu's Tale - 010007E0193A2000","010007E0193A2000","","","2023-03-15 01:08:18.000" -"Mythology Waifus Mahjong - 0100C7101A5BE000","0100C7101A5BE000","","","2023-03-15 01:08:23.000" -"emoji Kart Racer - 0100AC601A26A000","0100AC601A26A000","","","2023-03-17 01:53:50.000" -"Self gunsbase - 01006BB015486000","01006BB015486000","","","2023-03-17 01:53:53.000" -"Melon Journey - 0100F68019636000","0100F68019636000","status-playable","playable","2023-04-23 21:20:01.000" -"Bayonetta Origins: Cereza and the Lost Demon - 0100CF5010FEC000","0100CF5010FEC000","gpu;status-ingame","ingame","2024-02-27 01:39:49.000" -"Uta no prince-sama All star After Secret - 01008030149FE000","01008030149FE000","","","2023-03-18 16:08:20.000" -"Hampuzz - 0100D85016326000","0100D85016326000","","","2023-03-19 00:39:40.000" -"Gotta Protectors Cart of Darkness - 01007570160E2000","01007570160E2000","","","2023-03-19 00:39:43.000" -"Game Type DX - 0100433017DAC000","0100433017DAC000","","","2023-03-20 00:29:23.000" -"Ray'z Arcade Chronology - 010088D018302000","010088D018302000","","","2023-03-20 00:29:26.000" -"Ruku's HeartBalloon - 01004570192D8000","01004570192D8000","","","2023-03-20 00:29:30.000" -"Megaton Musashi - 01001AD00E41E000","01001AD00E41E000","","","2023-03-21 01:11:33.000" -"Megaton Musashi X - 0100571018A70000","0100571018A70000","","","2023-03-21 01:11:39.000" -"In the Mood - 0100281017990000","0100281017990000","","","2023-03-22 00:53:54.000" -"Sixtar Gate STARTRAIL - 0100D29019BE4000","0100D29019BE4000","","","2023-03-22 00:53:57.000" -"Spelunker HD Deluxe - 010095701381A000","010095701381A000","","","2023-03-22 00:54:02.000" -"Pizza Tycoon - 0100A6301788E000","0100A6301788E000","","","2023-03-23 02:00:04.000" -"Cubic - 010081F00EAB8000","010081F00EAB8000","","","2023-03-23 02:00:12.000" -"Sherlock Purr - 010019F01AD78000","010019F01AD78000","","","2023-03-24 02:21:34.000" -"Blocky Farm - 0100E21016A68000","0100E21016A68000","","","2023-03-24 02:21:40.000" -"SD Shin Kamen Rider Ranbu [ SD シン・仮面ライダー 乱舞 ] - 0100CD40192AC000","0100CD40192AC000","","","2023-03-24 23:07:40.000" -"Peppa Pig: World Adventures - 0100FF1018E00000","0100FF1018E00000","Incomplete","","2023-03-25 07:46:56.000" -"Remnant: From the Ashes - 010010F01418E000","010010F01418E000","","","2023-03-26 20:30:16.000" -"Titanium Hound - 010010B0195EE000","010010B0195EE000","","","2023-03-26 19:06:35.000" -"MLB® The Show™ 23 - 0100913019170000","0100913019170000","gpu;status-ingame","ingame","2024-07-26 00:56:50.000" -"Grim Guardians Demon Purge - 0100B5301A180000","0100B5301A180000","","","2023-03-29 02:03:41.000" -"Blade Assault - 0100EA1018A2E000","0100EA1018A2E000","audio;status-nothing","nothing","2024-04-29 14:32:50.000" -"Bubble Puzzler - 0100FB201A21E000","0100FB201A21E000","","","2023-04-03 01:55:12.000" -"Tricky Thief - 0100F490198B8000","0100F490198B8000","","","2023-04-03 01:56:44.000" -"Scramballed - 0100106016602000","0100106016602000","","","2023-04-03 01:58:08.000" -"SWORD ART ONLINE Alicization Lycoris - 0100C6C01225A000","0100C6C01225A000","","","2023-04-03 02:03:00.000" -"Alice Gear Aegis CS Concerto of Simulatrix - 0100EEA0184C6000","0100EEA0184C6000","","","2023-04-05 01:40:02.000" -"Curse of the Sea Rats - 0100B970138FA000","0100B970138FA000","","","2023-04-08 15:56:01.000" -"THEATRHYTHM FINAL BAR LINE - 010081B01777C000","010081B01777C000","status-ingame;Incomplete","ingame","2024-08-05 14:24:55.000" -"Assault Suits Valken DECLASSIFIED - 0100FBC019042000","0100FBC019042000","","","2023-04-11 01:05:19.000" -"Xiaomei and the Flame Dragons Fist - 010072601922C000","010072601922C000","","","2023-04-11 01:06:46.000" -"Loop - 0100C88019092000","0100C88019092000","","","2023-04-11 01:08:03.000" -"Volley Pals - 01003A301A29E000","01003A301A29E000","","","2023-04-12 01:37:14.000" -"Catgotchi Virtual Pet - 0100CCF01A884000","0100CCF01A884000","","","2023-04-12 01:37:24.000" -"Pizza Tower - 05000FD261232000","05000FD261232000","status-ingame;crash","ingame","2024-09-16 00:21:56.000" -"Megaman Battle Network Legacy Collection Vol 1 - 010038E016264000","010038E016264000","status-playable","playable","2023-04-25 03:55:57.000" -"Process of Elimination - 01005CC018A32000","01005CC018A32000","","","2023-04-17 00:46:22.000" -"Detective Boys and the Strange Karakuri Mansion on the Hill [ 少年探偵団と丘の上の奇妙なカラクリ屋敷 ] - 0100F0801A5E8000","0100F0801A5E8000","","","2023-04-17 00:49:26.000" -"Dokapon Kingdom Connect [ ドカポンキングダムコネクト ] - 0100AC4018552000","0100AC4018552000","","","2023-04-17 00:53:37.000" -"Pixel Game Maker Series Tentacled Terrors Tyrannize Terra - 010040A01AABE000","010040A01AABE000","","","2023-04-18 02:29:14.000" -"Ultra Pixel Survive - 0100472019812000","0100472019812000","","","2023-04-18 02:29:20.000" -"PIANOFORTE - 0100D6D016F06000","0100D6D016F06000","","","2023-04-18 02:29:25.000" -"NASCAR Rivals - 0100545016D5E000","0100545016D5E000","status-ingame;crash;Incomplete","ingame","2023-04-21 01:17:47.000" -"Minecraft Legends - 01007C6012CC8000","01007C6012CC8000","gpu;status-ingame;crash","ingame","2024-03-04 00:32:24.000" -"Touhou Fan-made Virtual Autography - 0100196016944000","0100196016944000","","","2023-04-21 03:59:47.000" -"FINAL FANTASY I - 01000EA014150000","01000EA014150000","status-nothing;crash","nothing","2024-09-05 20:55:30.000" -"FINAL FANTASY II - 01006B7014156000","01006B7014156000","status-nothing;crash","nothing","2024-04-13 19:18:04.000" -"FINAL FANTASY III - 01002E2014158000","01002E2014158000","","","2023-04-21 11:50:01.000" -"FINAL FANTASY V - 0100AA201415C000","0100AA201415C000","status-playable","playable","2023-04-26 01:11:55.000" -"FINAL FANTASY VI - 0100AA001415E000","0100AA001415E000","","","2023-04-21 13:08:30.000" -"Advance Wars 1+2: Re-Boot Camp - 0100300012F2A000","0100300012F2A000","status-playable","playable","2024-01-30 18:19:44.000" -"Five Nights At Freddy’s Security Breach - 01009060193C4000","01009060193C4000","gpu;status-ingame;crash;mac-bug","ingame","2023-04-23 22:33:28.000" -"BUCCANYAR - 0100942019418000","0100942019418000","","","2023-04-23 00:59:51.000" -"BraveDungeon - The Meaning of Justice - 010068A00DAFC000","010068A00DAFC000","","","2023-04-23 13:34:05.000" -"Gemini - 010045300BE9A000","010045300BE9A000","","","2023-04-24 01:31:41.000" -"LOST EPIC - 010098F019A64000","010098F019A64000","","","2023-04-24 01:31:46.000" -"AKIBA'S TRIP2 Director's Cut - 0100FBD01884C000","0100FBD01884C000","","","2023-04-24 01:31:48.000" -"Afterimage - 010095E01A12A000","010095E01A12A000","","","2023-04-27 21:39:08.000" -"Fortress S - 010053C017D40000","010053C017D40000","","","2023-04-28 01:57:34.000" -"The Mageseeker: A League of Legends Story™ 0100375019B2E000","0100375019B2E000","","","2023-04-29 14:01:15.000" -"Cult of the Lamb - 01002E7016C46000","01002E7016C46000","","","2023-04-29 06:22:56.000" -"Disney SpeedStorm - 0100F0401435E000","0100F0401435E000","services;status-boots","boots","2023-11-27 02:15:32.000" -"The Outbound Ghost - 01000BC01801A000","01000BC01801A000","status-nothing","nothing","2024-03-02 17:10:58.000" -"Blaze Union Story to Reach the Future Remaster [ ブレイズ・ユニオン ] - 01003B001A81E000","01003B001A81E000","","","2023-05-02 02:03:16.000" -"Sakura Neko Calculator - 010029701AAD2000","010029701AAD2000","","","2023-05-02 06:16:04.000" -"Bramble The Mountain King - 0100E87017D0E000","0100E87017D0E000","services-horizon;status-playable","playable","2024-03-06 09:32:17.000" -"The Legend of Zelda: Tears of the Kingdom - 0100F2C0115B6000","0100F2C0115B6000","gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug","ingame","2024-08-24 12:38:30.000" -"Magical Drop VI - 0100B4D01A3A4000","0100B4D01A3A4000","","","2023-05-13 02:27:38.000" -"Yahari ge-mu demo ore no seishun rabukome hamachigatteiru. kan [ やはりゲームでも俺の青春ラブコメはまちがっている。完 ] - 010066801A138000","010066801A138000","","","2023-05-13 02:27:49.000" -"Mega Man Battle Network Legacy Collection Vol. 2 - 0100734016266000","0100734016266000","status-playable","playable","2023-08-03 18:04:32.000" -"Numolition - 010043C019088000","010043C019088000","","","2023-05-17 02:29:23.000" -"Vibitter for Nintendo Switch [ ビビッター ] - 0100D2A01855C000","0100D2A01855C000","","","2023-05-17 02:29:31.000" -"LEGO 2K Drive - 0100739018020000","0100739018020000","gpu;status-ingame;ldn-works","ingame","2024-04-09 02:05:12.000" -"Ys Memoire : The Oath in Felghana [ イース・メモワール -フェルガナの誓い- ] - 010070D01A192000","010070D01A192000","","","2023-05-22 01:12:30.000" -"Love on Leave - 0100E3701A870000","0100E3701A870000","","","2023-05-22 01:37:22.000" -"Puzzle Bobble Everybubble! - 010079E01A1E0000","010079E01A1E0000","audio;status-playable;ldn-works","playable","2023-06-10 03:53:40.000" -"Chasm: The Rift - 010034301A556000","010034301A556000","gpu;status-ingame","ingame","2024-04-29 19:02:48.000" -"Speed Crew Demo - 01005C001B696000","01005C001B696000","","","2023-06-04 00:18:22.000" -"Dr Fetus Mean Meat Machine Demo - 01001DA01B7C4000","01001DA01B7C4000","","","2023-06-04 00:18:30.000" -"Bubble Monsters - 0100FF801B87C000","0100FF801B87C000","","","2023-06-05 02:15:43.000" -"Puzzle Bobble / Bust-a-Move ( 16-Bit Console Version ) - 0100AFF019F3C000","0100AFF019F3C000","","","2023-06-05 02:15:53.000" -"Just Dance 2023 - 0100BEE017FC0000","0100BEE017FC0000","status-nothing","nothing","2023-06-05 16:44:54.000" -"We Love Katamari REROLL+ Royal Reverie - 010089D018D18000","010089D018D18000","","","2023-06-07 07:33:49.000" -"Loop8: Summer of Gods - 0100051018E4C000","0100051018E4C000","","","2023-06-10 17:09:56.000" -"Hatsune Miku - The Planet Of Wonder And Fragments Of Wishes - 010030301ABC2000","010030301ABC2000","","","2023-06-12 02:15:31.000" -"Speed Crew - 0100C1201A558000","0100C1201A558000","","","2023-06-12 02:15:35.000" -"Nocturnal - 01009C2019510000","01009C2019510000","","","2023-06-12 16:24:50.000" -"Harmony: The Fall of Reverie - 0100A65017D68000","0100A65017D68000","","","2023-06-13 22:37:51.000" -"Cave of Past Sorrows - 0100336019D36000","0100336019D36000","","","2023-06-18 01:42:19.000" -"BIRDIE WING -Golf Girls Story- - 01005B2017D92000","01005B2017D92000","","","2023-06-18 01:42:25.000" -"Dogotchi Virtual Pet - 0100BBD01A886000","0100BBD01A886000","","","2023-06-18 01:42:31.000" -"010036F018AC8000","010036F018AC8000","","","2023-06-18 13:11:56.000" -"Pikmin 1 - 0100AA80194B0000","0100AA80194B0000","audio;status-ingame","ingame","2024-05-28 18:56:11.000" -"Pikmin 2 - 0100D680194B2000","0100D680194B2000","gpu;status-ingame","ingame","2023-07-31 08:53:41.000" -"Ghost Trick Phantom Detective Demo - 010026C0184D4000","010026C0184D4000","","","2023-06-23 01:29:44.000" -"Dr Fetus' Mean Meat Machine - 01006C301B7C2000","01006C301B7C2000","","","2023-06-23 01:29:52.000" -"FIFA 22 Legacy Edition - 0100216014472000","0100216014472000","gpu;status-ingame","ingame","2024-03-02 14:13:48.000" -"Pretty Princess Magical Garden Island - 01001CA019DA2000","01001CA019DA2000","","","2023-06-26 02:43:04.000" -"Pool Together - 01009DB01BA16000","01009DB01BA16000","","","2023-06-26 02:43:13.000" -"Kizuna AI - Touch the Beat! - 0100BF2019B98000","0100BF2019B98000","","","2023-06-26 02:43:18.000" -"Convenience Stories - 0100DF801A092000","0100DF801A092000","","","2023-06-26 10:58:37.000" -"Pikmin 4 Demo - 0100E0B019974000","0100E0B019974000","gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug","ingame","2023-09-22 21:41:08.000" -"超探偵事件簿 レインコード (Master Detective Archives: Rain Code) - 0100F4401940A000","0100F4401940A000","status-ingame;crash","ingame","2024-02-12 20:58:31.000" -"Everybody 1-2-Switch! - 01006F900BF8E000","01006F900BF8E000","services;deadlock;status-nothing","nothing","2023-07-01 05:52:55.000" -"AEW Fight Forever - 0100BD10190C0000","0100BD10190C0000","","","2023-06-30 22:09:10.000" -"Master Detective Archives: Rain Code - 01004800197F0000","01004800197F0000","gpu;status-ingame","ingame","2024-04-19 20:11:09.000" -"The Lara Croft Collection - 010079C017F5E000","010079C017F5E000","services-horizon;deadlock;status-nothing","nothing","2024-07-12 22:45:51.000" -"Ghost Trick Phantom Detective - 010029B018432000","010029B018432000","status-playable","playable","2023-08-23 14:50:12.000" -"Sentimental Death Loop - 0100FFA01ACA8000","0100FFA01ACA8000","","","2023-07-10 03:23:08.000" -"The Settlers: New Allies - 0100F3200E7CA000","0100F3200E7CA000","deadlock;status-nothing","nothing","2023-10-25 00:18:05.000" -"Manic Mechanics - 010095A01550E000","010095A01550E000","","","2023-07-17 02:07:32.000" -"Crymachina Trial Edition ( Demo ) [ クライマキナ ] - 01000CC01C108000","01000CC01C108000","status-playable;demo","playable","2023-08-06 05:33:21.000" -"Xicatrice [ シカトリス ] - 0100EB601A932000","0100EB601A932000","","","2023-07-18 02:18:35.000" -"Trouble Witches Final! Episode 01: Daughters of Amalgam - 0100D06018DCA000","0100D06018DCA000","status-playable","playable","2024-04-08 15:08:11.000" -"The Quintessential Quintuplets: Gotopazu Story [ 五等分の花嫁 ごとぱずストーリー ] - 0100137019E9C000","0100137019E9C000","","","2023-07-18 02:18:50.000" -"Pinball FX - 0100DA70186D4000","0100DA70186D4000","status-playable","playable","2024-05-03 17:09:11.000" -"Moving Out 2 Training Day ( Demo ) - 010049E01B034000","010049E01B034000","","","2023-07-19 00:37:57.000" -"Cold Silence - 010035B01706E000","010035B01706E000","cpu;status-nothing;crash","nothing","2024-07-11 17:06:14.000" -"Demons of Asteborg - 0100B92015538000","0100B92015538000","","","2023-07-20 17:03:06.000" -"Pikmin 4 - 0100B7C00933A000","0100B7C00933A000","gpu;status-ingame;crash;UE4","ingame","2024-08-26 03:39:08.000" -"Grizzland - 010091300FFA0000","010091300FFA0000","gpu;status-ingame","ingame","2024-07-11 16:28:34.000" -"Disney Illusion Island","","","","2023-07-29 09:20:56.000" -"Double Dragon Gaiden: Rise of The Dragons - 010010401BC1A000","010010401BC1A000","","","2023-08-01 05:17:28.000" -"CRYSTAR -クライスタ- 0100E7B016778800","0100E7B016778800","","","2023-08-02 11:54:22.000" -"Orebody: Binders Tale - 010055A0189B8000","010055A0189B8000","","","2023-08-03 18:50:10.000" -"Ginnung - 01004B1019C7E000","01004B1019C7E000","","","2023-08-03 19:19:00.000" -"Legends of Amberland: The Forgotten Crown - 01007170100AA000","01007170100AA000","","","2023-08-03 22:18:17.000" -"Egglien - 0100E29019F56000","0100E29019F56000","","","2023-08-03 22:48:04.000" -"Dolmenjord - Viking Islands - 010012201B998000","010012201B998000","","","2023-08-05 20:55:28.000" -"The Knight & the Dragon - 010031B00DB34000","010031B00DB34000","gpu;status-ingame","ingame","2023-08-14 10:31:43.000" -"Cookies! Theory of Super Evolution - ","","","","2023-08-06 00:21:28.000" -"Jetboy - 010039C018168000","010039C018168000","","","2023-08-07 17:25:10.000" -"Townscaper - 01001260143FC000","01001260143FC000","","","2023-08-07 18:24:29.000" -"The Deer God - 01000B6007A3C000","01000B6007A3C000","","","2023-08-07 19:48:55.000" -"6 Souls - 0100421016BF2000","0100421016BF2000","","","2023-08-07 21:17:43.000" -"Brotato - 01002EF01A316000","01002EF01A316000","","","2023-08-10 14:57:25.000" -"超次元ゲイム ネプテューヌ GameMaker R:Evolution - 010064801a01c000","010064801a01c000","status-nothing;crash","nothing","2023-10-30 22:37:40.000" -"Quake II - 010048F0195E8000","010048F0195E8000","status-playable","playable","2023-08-15 03:42:14.000" -"Red Dead Redemption - 01007820196A6000","01007820196A6000","status-playable;amd-vendor-bug","playable","2024-09-13 13:26:13.000" -"Samba de Amigo : Party Central Demo - 01007EF01C0D2000","01007EF01C0D2000","","","2023-08-18 04:00:43.000" -"Bomb Rush Cyberfunk - 0100317014B7C000","0100317014B7C000","status-playable","playable","2023-09-28 19:51:57.000" -"Jack Jeanne - 010036D01937E000","010036D01937E000","","","2023-08-21 05:58:21.000" -"Bright Memory: Infinite Gold Edition - 01001A9018560000","01001A9018560000","","","2023-08-22 22:46:26.000" -"NBA 2K23 - 0100ACA017E4E800","0100ACA017E4E800","status-boots","boots","2023-10-10 23:07:14.000" -"Marble It Up! Ultra - 0100C18016896000","0100C18016896000","","","2023-08-30 20:14:21.000" -"Words of Wisdom - 0100B7F01BC9A000","0100B7F01BC9A000","","","2023-09-02 19:05:19.000" -"Koa and the Five Pirates of Mara - 0100C57019BA2000","0100C57019BA2000","gpu;status-ingame","ingame","2024-07-11 16:14:44.000" -"Little Orpheus stuck at 2 level","","","","2023-09-05 12:09:08.000" -"Tiny Thor - 010002401AE94000","010002401AE94000","gpu;status-ingame","ingame","2024-07-26 08:37:35.000" -"Radirgy Swag - 01000B900EEF4000","01000B900EEF4000","","","2023-09-06 23:00:39.000" -"Sea of Stars - 01008C0016544000","01008C0016544000","status-playable","playable","2024-03-15 20:27:12.000" -"NBA 2K24 - 010006501A8D8000","010006501A8D8000","cpu;gpu;status-boots","boots","2024-08-11 18:23:08.000" -"Rune Factory 3 Special - 010081C0191D8000","010081C0191D8000","status-playable","playable","2023-10-15 08:32:49.000" -"Baten Kaitos I & II HD Remaster (Japan) - 0100F28018CA4000","0100F28018CA4000","services;status-boots;Needs Update","boots","2023-10-24 23:11:54.000" -"F-ZERO 99 - 0100CCF019C8C000","0100CCF019C8C000","","","2023-09-14 16:43:01.000" -"Horizon Chase 2 - 0100001019F6E000","0100001019F6E000","deadlock;slow;status-ingame;crash;UE4","ingame","2024-08-19 04:24:06.000" -"Mortal Kombat 1 - 01006560184E6000","01006560184E6000","gpu;status-ingame","ingame","2024-09-04 15:45:47.000" -"Baten Kaitos I & II HD Remaster (Europe/USA) - 0100C07018CA6000","0100C07018CA6000","services;status-boots;Needs Update","boots","2023-10-01 00:44:32.000" -"Legend of Mana 01003570130E2000","01003570130E2000","","","2023-09-17 04:07:26.000" -"TUNIC 0100DA801624E000","0100DA801624E000","","","2023-09-17 04:28:22.000" -"SUPER BOMBERMAN R 2 - 0100B87017D94000","0100B87017D94000","deadlock;status-boots","boots","2023-09-29 13:19:51.000" -"Fae Farm - 010073F0189B6000 ","010073F0189B6000","status-playable","playable","2024-08-25 15:12:12.000" -"demon skin - 01006fe0146ec000","01006fe0146ec000","","","2023-09-18 08:36:18.000" -"Fatal Frame: Mask of the Lunar Eclipse - 0100DAE019110000","0100DAE019110000","status-playable;Incomplete","playable","2024-04-11 06:01:30.000" -"Winter Games 2023 - 0100A4A015FF0000","0100A4A015FF0000","deadlock;status-menus","menus","2023-11-07 20:47:36.000" -"EA Sports FC 24 - 0100BDB01A0E6000","0100BDB01A0E6000","status-boots","boots","2023-10-04 18:32:59.000" -"Cassette Beasts - 010066F01A0E0000","010066F01A0E0000","status-playable","playable","2024-07-22 20:38:43.000" -"COCOON - 01002E700C366000","01002E700C366000","gpu;status-ingame","ingame","2024-03-06 11:33:08.000" -"Detective Pikachu Returns - 010007500F27C000","010007500F27C000","status-playable","playable","2023-10-07 10:24:59.000" -"DeepOne - 0100961011BE6000","0100961011BE6000","services-horizon;status-nothing;Needs Update","nothing","2024-01-18 15:01:05.000" -"Sonic Superstars","","","","2023-10-13 18:33:19.000" -"Disco Elysium - 01006C5015E84000","01006C5015E84000","Incomplete","","2023-10-14 13:53:12.000" -"Sonic Superstars - 01008F701C074000","01008F701C074000","gpu;status-ingame;nvdec","ingame","2023-10-28 17:48:07.000" -"Sonic Superstars Digital Art Book with Mini Digital Soundtrack - 010088801C150000","010088801C150000","status-playable","playable","2024-08-20 13:26:56.000" -"Super Mario Bros. Wonder - 010015100B514000","010015100B514000","status-playable;amd-vendor-bug","playable","2024-09-06 13:21:21.000" -"Project Blue - 0100FCD0193A0000","0100FCD0193A0000","","","2023-10-24 15:55:09.000" -"Rear Sekai [ リアセカイ ] - 0100C3B01A5DD002","0100C3B01A5DD002","","","2023-10-24 01:55:18.000" -"Dementium: The Ward (Dementium Remastered) - 010038B01D2CA000","010038B01D2CA000","status-boots;crash","boots","2024-09-02 08:28:14.000" -"A Tiny Sticker Tale - 0100f6001b738000","0100f6001b738000","","","2023-10-26 23:15:46.000" -"Clive 'n' Wrench - 0100C6C010AE4000","0100C6C010AE4000","","","2023-10-28 14:56:46.000" -"STAR OCEAN The Second Story R - 010065301A2E0000","010065301A2E0000","status-ingame;crash","ingame","2024-06-01 02:39:59.000" -"Song of Nunu: A League of Legends Story - 01004F401BEBE000","01004F401BEBE000","status-ingame","ingame","2024-07-12 18:53:44.000" -"MythForce","","","","2023-11-03 12:58:52.000" -"Here Comes Niko! - 01001600121D4000","01001600121D4000","","","2023-11-04 22:26:44.000" -"Warioware: Move IT! - 010045B018EC2000","010045B018EC2000","status-playable","playable","2023-11-14 00:23:51.000" -"Game of Life [ 人生ゲーム for Nintendo Switch ] - 0100FF1017F76000","0100FF1017F76000","","","2023-11-07 19:59:08.000" -"Osyaberi! Horijyo! Gekihori - 01005D6013A54000","01005D6013A54000","","","2023-11-07 01:46:43.000" -"Fashion Dreamer - 0100E99019B3A000","0100E99019B3A000","status-playable","playable","2023-11-12 06:42:52.000" -"THE 密室逃脱 ~牵动命运的三十五道谜团~ (ESCAPE TRICK: 35 Fateful Enigmas) - 010087F005DFE000","010087F005DFE000","","","2023-11-08 02:20:17.000" -"Hogwarts Legacy 0100F7E00C70E000","0100F7E00C70E000","status-ingame;slow","ingame","2024-09-03 19:53:58.000" -"Super Mario RPG - 0100BC0018138000","0100BC0018138000","gpu;audio;status-ingame;nvdec","ingame","2024-06-19 17:43:42.000" -"Venatrix - 010063601B386000","010063601B386000","","","2023-11-18 06:55:12.000" -"Dreamwork's All-Star Kart Racing - 010037401A374000","010037401A374000","Incomplete","","2024-02-27 08:58:57.000" -"Watermelon Game [ スイカゲーム ] - 0100800015926000","0100800015926000","","","2023-11-27 02:49:45.000" -"屁屁侦探 噗噗 未来的名侦探登场! (Oshiri Tantei Mirai no Meitantei Tojo!) - 0100FDE017E56000","0100FDE017E56000","","","2023-12-01 11:15:46.000" -"Batman: Arkham Knight - 0100ACD0163D0000","0100ACD0163D0000","gpu;status-ingame;mac-bug","ingame","2024-06-25 20:24:42.000" -"DRAGON QUEST MONSTERS: The Dark Prince - 0100A77018EA0000","0100A77018EA0000","status-playable","playable","2023-12-29 16:10:05.000" -"ftpd classic - 0000000000000000","0000000000000000","homebrew","","2023-12-03 23:42:19.000" -"ftpd pro - 0000000000000000","0000000000000000","homebrew","","2023-12-03 23:47:46.000" -"Batman: Arkham City - 01003f00163ce000","01003f00163ce000","status-playable","playable","2024-09-11 00:30:19.000" -"DoDonPachi DAI-OU-JOU Re:incarnation (怒首領蜂大往生 臨廻転生) - 0100526017B00000","0100526017B00000","","","2023-12-08 15:16:22.000" -"Squid Commando - 0100044018E82000","0100044018E82000","","","2023-12-08 17:17:27.000" -"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!) - 0100BF401AF9C000","0100BF401AF9C000","slow;status-playable","playable","2023-12-31 14:37:17.000" -"Another Code: Recollection DEMO - 01003E301A4D6000","01003E301A4D6000","","","2023-12-15 06:48:09.000" -"Alien Hominid HD - 010056B019874000","010056B019874000","","","2023-12-17 13:10:46.000" -"Piyokoro - 010098801D706000","010098801D706000","","","2023-12-18 02:17:53.000" -"Uzzuzuu My Pet - Golf Dash - 010015B01CAF0000","010015B01CAF0000","","","2023-12-18 02:17:57.000" -"Alien Hominid Invasion - 0100A3E00CDD4000","0100A3E00CDD4000","Incomplete","","2024-07-17 01:56:28.000" -"void* tRrLM2(); //Void Terrarium 2 (USA/EU) - 0100B510183BC000","0100B510183BC000","","","2023-12-21 11:08:18.000" -"Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3 - 010047F01AA10000","010047F01AA10000","services-horizon;status-menus","menus","2024-07-24 06:34:06.000" -"Party Friends - 0100C0A01D478000","0100C0A01D478000","","","2023-12-23 02:43:33.000" -"Yohane the Parhelion Numazu in the Mirage Demo - 0100D7201DAAE000","0100D7201DAAE000","","","2023-12-23 02:49:28.000" -"SPY×FAMILY OPERATION DIARY - 010041601AB40000","010041601AB40000","","","2023-12-23 02:52:29.000" -"Golf Guys - 010040901CC42000","010040901CC42000","","","2023-12-28 01:20:16.000" -"Persona 5 Tactica - 010087701B092000","010087701B092000","status-playable","playable","2024-04-01 22:21:03.000" -"Batman: Arkham Asylum - 0100E870163CA000","0100E870163CA000","","","2024-01-11 23:03:37.000" -"Persona 5 Royal (KR/HK) - 01004B10157F2000","01004B10157F2000","Incomplete","","2024-08-17 21:42:28.000" -"Prince of Persia: The Lost Crown - 0100210019428000","0100210019428000","status-ingame;crash","ingame","2024-06-08 21:31:58.000" -"Another Code: Recollection - 0100CB9018F5A000","0100CB9018F5A000","gpu;status-ingame;crash","ingame","2024-09-06 05:58:52.000" -"It Takes Two - 010092A0172E4000","010092A0172E4000","","","2024-01-23 05:15:26.000" -"逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy) - 010020D01B890000","010020D01B890000","status-playable","playable","2024-06-21 21:54:27.000" -"Hitman: Blood Money - Reprisal - 010083A018262000","010083A018262000","deadlock;status-ingame","ingame","2024-09-28 16:28:50.000" -"Mario vs. Donkey Kong™ Demo - 0100D9E01DBB0000","0100D9E01DBB0000","status-playable","playable","2024-02-18 10:40:06.000" -"LEGO The Incredibles - 0100F19006E04000","0100F19006E04000","crash","","2024-02-11 00:46:53.000" -"Tomb Raider I-III Remastered - 010024601BB16000","010024601BB16000","gpu;status-ingame;opengl","ingame","2024-09-27 12:32:04.000" -"Arzette: The Jewel of Faramore - 0100B7501C46A000","0100B7501C46A000","","","2024-02-17 17:22:34.000" -"Mario vs. Donkey Kong - 0100B99019412000","0100B99019412000","status-playable","playable","2024-05-04 21:22:39.000" -"Penny's Big Breakaway - 0100CA901AA9C000","0100CA901AA9C000","status-playable;amd-vendor-bug","playable","2024-05-27 07:58:51.000" -"CEIBA - 0100E8801D97E000","0100E8801D97E000","","","2024-02-25 22:33:36.000" -"Lil' Guardsman v1.1 - 010060B017F6E000","010060B017F6E000","","","2024-02-25 19:21:03.000" -"Fearmonium - 0100F5501CE12000","0100F5501CE12000","status-boots;crash","boots","2024-03-06 11:26:11.000" -"NeverAwake - 0100DA30189CA000","0100DA30189CA000","","","2024-02-26 02:27:39.000" -"Zombies Rising XXX","","","","2024-02-26 07:53:03.000" -"Balatro - 0100CD801CE5E000","0100CD801CE5E000","status-ingame","ingame","2024-04-21 02:01:53.000" -"Prison City - 0100C1801B914000","0100C1801B914000","gpu;status-ingame","ingame","2024-03-01 08:19:33.000" -"Yo-kai Watch Jam: Y School Heroes: Bustlin' School Life - 010051D010FC2000","010051D010FC2000","","","2024-03-03 02:57:22.000" -"Princess Peach: Showtime! Demo - 010024701DC2E000","010024701DC2E000","status-playable;UE4;demo","playable","2024-03-10 17:46:45.000" -"Unicorn Overlord - 010069401ADB8000","010069401ADB8000","status-playable","playable","2024-09-27 14:04:32.000" -"Dodgeball Academia - 010001F014D9A000","010001F014D9A000","","","2024-03-09 03:49:28.000" -"魂斗罗:加鲁加行动 (Contra: Operation Galuga) - 0100CF401A98E000","0100CF401A98E000","","","2024-03-13 01:13:42.000" -"STAR WARS Battlefront Classic Collection - 010040701B948000","010040701B948000","gpu;status-ingame;vulkan","ingame","2024-07-12 19:24:21.000" -"MLB The Show 24 - 0100E2E01C32E000","0100E2E01C32E000","services-horizon;status-nothing","nothing","2024-03-31 04:54:11.000" -"Orion Haste - 01009B401DD02000","01009B401DD02000","","","2024-03-16 17:22:59.000" -"Gylt - 0100AC601DCA8000","0100AC601DCA8000","status-ingame;crash","ingame","2024-03-18 20:16:51.000" -"マクロス(Macross) -Shooting Insight- - 01001C601B8D8000","01001C601B8D8000","","","2024-03-20 17:10:26.000" -"Geometry Survivor - 01006D401D4F4000","01006D401D4F4000","","","2024-03-20 17:35:34.000" -"Gley Lancer and Gynoug - Classic Shooting Pack - 010037201E3DA000","010037201E3DA000","","","2024-03-20 18:19:37.000" -"Princess Peach: Showtime! - 01007A3009184000","01007A3009184000","status-playable;UE4","playable","2024-09-21 13:39:45.000" -"Cosmic Fantasy Collection - 0100CCB01B1A0000","0100CCB01B1A0000","status-ingame","ingame","2024-05-21 17:56:37.000" -"Fit Boxing feat. 初音ミク - 010045D01AFC8000","010045D01AFC8000","","","2024-03-28 04:07:57.000" -"Sonic 2 (2013) - 0000000000000000","0000000000000000","status-ingame;crash;homebrew","ingame","2024-04-01 16:25:30.000" -"Sonic CD - 0000000000000000","0000000000000000","status-ingame;crash;homebrew","ingame","2024-04-01 16:25:31.000" -"Sonic A.I.R - 0000000000000000","0000000000000000","status-ingame;homebrew","ingame","2024-04-01 16:25:32.000" -"RSDKv5u - 0000000000000000","0000000000000000","status-ingame;homebrew","ingame","2024-04-01 16:25:34.000" -"Sonic 1 (2013) - 0000000000000000","0000000000000000","status-ingame;crash;homebrew","ingame","2024-04-06 18:31:20.000" -"The Dark Pictures Anthology : Man of Medan - 0100711017B30000","0100711017B30000","","","2024-04-01 16:38:04.000" -"SpaceCadetPinball - 0000000000000000","0000000000000000","status-ingame;homebrew","ingame","2024-04-18 19:30:04.000" -"Pepper Grinder - 0100B98019068000","0100B98019068000","","","2024-04-04 16:31:57.000" -"RetroArch - 010000000000100D","010000000000100D","","","2024-04-07 18:23:18.000" -"YouTube - 01003A400C3DA800","01003A400C3DA800","status-playable","playable","2024-06-08 05:24:10.000" -"Pawapoke R - 01000c4015030000","01000c4015030000","services-horizon;status-nothing","nothing","2024-05-14 14:28:32.000" -"MegaZeux - 0000000000000000","0000000000000000","","","2024-04-16 23:46:53.000" -"ANTONBLAST (Demo) - 0100B5F01EB24000","0100B5F01EB24000","","","2024-04-18 22:45:13.000" -"Europa (Demo) - 010092501EB2C000","010092501EB2C000","gpu;status-ingame;crash;UE4","ingame","2024-04-23 10:47:12.000" -"BioShock 1 & 2 Remastered [0100AD10102B2000 - 01002620102C6800] v1.0.2","0100AD10102B2000","","","2024-04-19 19:08:30.000" -"Turrican Anthology Vol. 2 - 010061D0130CA000 - game freezes at the beginning","010061D0130CA000","Incomplete","","2024-04-25 17:57:06.000" -"Nickelodeon All-Star Brawl 2 - 010010701AFB2000","010010701AFB2000","status-playable","playable","2024-06-03 14:15:01.000" -"Bloo Kid - 0100C6A01AD56000","0100C6A01AD56000","status-playable","playable","2024-05-01 17:18:04.000" -"Tales of Kenzera: ZAU - 01005C7015D30000","01005C7015D30000","","","2024-04-30 10:11:26.000" -"Demon Slayer – Kimetsu no Yaiba – Sweep the Board! - 0100A7101B806000","0100A7101B806000","","","2024-05-02 10:19:47.000" -"Endless Ocean Luminous - 010067B017588000","010067B017588000","services-horizon;status-ingame;crash","ingame","2024-05-30 02:05:57.000" -"Moto GP 24 - 010040401D564000","010040401D564000","gpu;status-ingame","ingame","2024-05-10 23:41:00.000" -"The game of life 2 - 0100B620139D8000","0100B620139D8000","","","2024-05-03 12:08:33.000" -"ANIMAL WELL - 010020D01AD24000","010020D01AD24000","status-playable","playable","2024-05-22 18:01:49.000" -"Super Mario World - 0000000000000000","0000000000000000","status-boots;homebrew","boots","2024-06-13 01:40:31.000" -"1000xRESIST - 0100B02019866000","0100B02019866000","","","2024-05-11 17:18:57.000" -"Dave The Diver - 010097F018538000","010097F018538000","Incomplete","","2024-09-03 21:38:55.000" -"Zombiewood","","Incomplete","","2024-05-15 11:37:19.000" -"Pawapoke Dash - 010066A015F94000","010066A015F94000","","","2024-05-16 08:45:51.000" -"Biomutant - 01004BA017CD6000","01004BA017CD6000","status-ingame;crash","ingame","2024-05-16 15:46:36.000" -"Vampire Survivors - 010089A0197E4000","010089A0197E4000","status-ingame","ingame","2024-06-17 09:57:38.000" -"Koumajou Remilia II Stranger’s Requiem","","Incomplete","","2024-05-22 20:59:04.000" -"Paper Mario: The Thousand-Year Door - 0100ECD018EBE000","0100ECD018EBE000","gpu;status-ingame;intel-vendor-bug;slow","ingame","2025-01-07 04:27:35.000" -"Stories From Sol: The Gun-dog Demo - 010092A01EC94000","010092A01EC94000","","","2024-05-22 19:55:35.000" -"Earth Defense Force: World Brothers 2 - 010083a01d456000","010083a01d456000","","","2024-06-01 18:34:34.000" -"锈色湖畔:内在昔日(Rusty Lake: The Past Within) - 01007010157EC000","01007010157EC000","","","2024-06-10 13:47:40.000" -"Garden Life A Cozy Simulator - 0100E3801ACC0000","0100E3801ACC0000","","","2024-06-12 00:12:01.000" -"Shin Megami Tensei V: Vengeance - 010069C01AB82000","010069C01AB82000","gpu;status-ingame;vulkan-backend-bug","ingame","2024-07-14 11:28:24.000" -"Valiant Hearts - The great war - 01006C70146A2000","01006C70146A2000","","","2024-06-18 21:31:15.000" -"Monster Hunter Stories - 010069301B1D4000","010069301B1D4000","Incomplete","","2024-09-11 07:58:24.000" -"Rocket Knight Adventures: Re-Sparked","","","","2024-06-20 20:13:10.000" -"Metal Slug Attack Reloaded","","","","2024-06-20 19:55:22.000" -"#BLUD - 010060201E0A4000","010060201E0A4000","","","2024-06-23 13:57:22.000" -"NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS - 0100D2D0190A4000","0100D2D0190A4000","services-horizon;status-nothing","nothing","2024-07-25 05:16:48.000" -"Bang-On Balls: Chronicles - 010081E01A45C000","010081E01A45C000","Incomplete","","2024-08-01 16:40:12.000" -"Downward: Enhanced Edition 0100C5501BF24000","0100C5501BF24000","","","2024-06-26 00:22:34.000" -"DNF Duel: Who's Next - 0100380017D3E000","0100380017D3E000","Incomplete","","2024-07-23 02:25:50.000" -"Borderlands 3 - 01009970122E4000","01009970122E4000","gpu;status-ingame","ingame","2024-07-15 04:38:14.000" -"Luigi's Mansion 2 HD - 010048701995E000","010048701995E000","status-ingame;ldn-broken;amd-vendor-bug","ingame","2024-09-05 23:47:27.000" -"Super Monkey Ball Banana Rumble - 010031F019294000","010031F019294000","status-playable","playable","2024-06-28 10:39:18.000" -"City of Beats 0100E94016B9E000","0100E94016B9E000","","","2024-07-01 07:02:20.000" -"Maquette 0100861018480000","0100861018480000","","","2024-07-04 05:20:21.000" -"Monomals - 01003030161DC000","01003030161DC000","gpu;status-ingame","ingame","2024-08-06 22:02:51.000" -"Ace Combat 7 - Skies Unknown Deluxe Edition - 010039301B7E0000","010039301B7E0000","gpu;status-ingame;UE4","ingame","2024-09-27 14:31:43.000" -"Teenage Mutant Ninja Turtles: Splintered Fate - 01005CF01E784000","01005CF01E784000","status-playable","playable","2024-08-03 13:50:42.000" -"Powerful Pro Baseball 2024-2025 - 0100D1C01C194000","0100D1C01C194000","gpu;status-ingame","ingame","2024-08-25 06:40:48.000" -"World of Goo 2 - 010061F01DB7C800","010061F01DB7C800","status-boots","boots","2024-08-08 22:52:49.000" -"Tomba! Special Edition - 0100D7F01E49C000","0100D7F01E49C000","services-horizon;status-nothing","nothing","2024-09-15 21:59:54.000" -"Machi Koro With Everyone-0100C32018824000","0100C32018824000","","","2024-08-07 19:19:30.000" -"STAR WARS: Bounty Hunter - 0100d7a01b7a2000","0100d7a01b7a2000","","","2024-08-08 11:12:56.000" -"Outer Wilds - 01003DC0144B6000","01003DC0144B6000","","","2024-08-08 17:36:16.000" -"Grounded 01006F301AE9C000","01006F301AE9C000","","","2024-08-09 16:35:52.000" -"DOOM + DOOM II - 01008CB01E52E000","01008CB01E52E000","status-playable;opengl;ldn-untested;LAN","playable","2024-09-12 07:06:01.000" -"Fishing Paradiso - 0100890016A74000","0100890016A74000","","","2024-08-11 21:39:54.000" -"Revue Starlight El Dorado - 010099c01d642000","010099c01d642000","","","2024-09-02 18:58:18.000" -"PowerWash Simulator - 0100926016012000","0100926016012000","","","2024-08-22 00:47:34.000" -"Thank Goodness You’re Here! - 010053101ACB8000","010053101ACB8000","","","2024-09-25 16:15:40.000" -"Freedom Planet 2 V1.2.3r (01009A301B68000)","","","","2024-08-23 18:16:54.000" -"Ace Attorney Investigations Collection DEMO - 010033401E68E000","010033401E68E000","status-playable","playable","2024-09-07 06:16:42.000" -"Castlevania Dominus Collection - 0100FA501AF90000","0100FA501AF90000","","","2024-09-19 01:39:04.000" -"Chants of Sennaar - 0100543019CB0000","0100543019CB0000","","","2024-09-19 16:30:27.000" -"Taisho x Alice ALL IN ONE - 大正×対称アリス ALL IN ONE - 010096000ca38000","010096000ca38000","","","2024-09-11 21:20:04.000" -"NBA 2K25 - 0100DFF01ED44000","0100DFF01ED44000","","","2024-09-10 17:34:54.000" -"逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection) - 010005501E68C000","010005501E68C000","status-playable","playable","2024-09-19 16:38:05.000" -"Fabledom - 0100B6001E6D6000","0100B6001E6D6000","","","2024-09-28 12:12:55.000" -"BZZZT - 010091201A3F2000","010091201A3F2000","","","2024-09-22 21:29:58.000" -"EA SPORTS FC 25 - 010054E01D878000","010054E01D878000","status-ingame;crash","ingame","2024-09-25 21:07:50.000" -"Selfloss - 010036C01E244000","010036C01E244000","","","2024-09-23 23:12:13.000" -"Disney Epic Mickey: Rebrushed - 0100DA201EBF8000","0100DA201EBF8000","status-ingame;crash","ingame","2024-09-26 22:11:51.000" -"The Plucky Squire - 01006BD018B54000","01006BD018B54000","status-ingame;crash","ingame","2024-09-27 22:32:33.000" -"The Legend of Zelda Echoes of Wisdom - 01008CF01BAAC000","01008CF01BAAC000","status-playable;nvdec;ASTC;intel-vendor-bug","playable","2024-10-01 14:11:01.000" -"Bakeru - 01007CD01FAE0000","01007CD01FAE0000","","","2024-09-25 18:05:22.000" -"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~) - 01000BB01CB8A000","01000BB01CB8A000","status-nothing","nothing","2024-09-28 07:03:14.000" -"I am an Airtraffic Controller AIRPORT HERO HANEDA ALLSTARS - 01002EE01BAE0000","01002EE01BAE0000","","","2024-09-27 02:04:17.000" -"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari) - 01001BA01EBFC000","01001BA01EBFC000","services-horizon;status-nothing","nothing","2024-09-28 12:22:55.000" -"I am an Air Traffic Controller AIRPORT HERO HANEDA - 0100BE700EDA4000","0100BE700EDA4000","","","2024-09-27 23:52:19.000" -"Angel at Dusk Demo - 0100D96020ADC000","0100D96020ADC000","","","2024-09-29 17:21:13.000" -"Monster Jam™ Showdown - 0100CE101B698000","0100CE101B698000","","","2024-09-30 04:03:13.000" -"Legend of Heroes: Trails Through Daybreak - 010040C01D248000","010040C01D248000","","","2024-10-01 07:36:25.000" -"Mario & Luigi: Brothership - 01006D0017F7A000","01006D0017F7A000","status-ingame;crash;slow;UE4;mac-bug","ingame","2025-01-07 04:00:00.000" -"Stray - 010075101EF84000","010075101EF84000","status-ingame;crash","ingame","2025-01-07 04:03:00.000" -"Dragon Quest III HD-2D Remake - 01003E601E324000","01003E601E324000","status-ingame;vulkan-backend-bug;UE4;audout;mac-bug","ingame","2025-01-07 04:10:27.000" -"SONIC X SHADOW GENERATIONS - 01005EA01C0FC000","01005EA01C0FC000","status-ingame;crash","ingame","2025-01-07 04:20:45.000" -"LEGO Horizon Adventures - 010073C01AF34000","010073C01AF34000","status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4","ingame","2025-01-07 04:24:56.000" -"Legacy of Kain™ Soul Reaver 1&2 Remastered - 010079901C898000","010079901C898000","status-playable","playable","2025-01-07 05:50:01.000" +"-KLAUS-",,nvdec;status-playable,playable,2020-06-27 13:27:30.000 +".hack//G.U. Last Recode",0100BA9014A02000,deadlock;status-boots,boots,2022-03-12 19:15:47.000 +"#Funtime",,status-playable,playable,2020-12-10 16:54:35.000 +"#Halloween, Super Puzzles Dream",,nvdec;status-playable,playable,2020-12-10 20:43:58.000 +"#KillAllZombies",,slow;status-playable,playable,2020-12-16 01:50:25.000 +"#NoLimitFantasy, Super Puzzles Dream",,nvdec;status-playable,playable,2020-12-12 17:21:32.000 +"#RaceDieRun",,status-playable,playable,2020-07-04 20:23:16.000 +"#womenUp, Super Puzzles Dream",,status-playable,playable,2020-12-12 16:57:25.000 +"#womenUp, Super Puzzles Dream Demo",0100D87012A14000,nvdec;status-playable,playable,2021-02-09 00:03:31.000 +"1-2-Switch",01000320000CC000,services;status-playable,playable,2022-02-18 14:44:03.000 +"10 Second Run Returns",01004D1007926000,gpu;status-ingame,ingame,2022-07-17 13:06:18.000 +"10 Second Run RETURNS Demo",0100DC000A472000,gpu;status-ingame,ingame,2021-02-09 00:17:18.000 +"112 Operator",0100D82015774000,status-playable;nvdec,playable,2022-11-13 22:42:50.000 +"112th Seed",,status-playable,playable,2020-10-03 10:32:38.000 +"12 is Better Than 6",01007F600D1B8000,status-playable,playable,2021-02-22 16:10:12.000 +"12 Labours of Hercules II: The Cretan Bull",0100B1A010014000,cpu;status-nothing;32-bit;crash,nothing,2022-12-07 13:43:10.000 +"12 orbits",,status-playable,playable,2020-05-28 16:13:26.000 +"13 Sentinels Aegis Rim",01003FC01670C000,slow;status-ingame,ingame,2024-06-10 20:33:38.000 +"13 Sentinels Aegis Rim Demo",0100C54015002000,status-playable;demo,playable,2022-04-13 14:15:48.000 +"140",,status-playable,playable,2020-08-05 20:01:33.000 +"16-Bit Soccer Demo",0100B94013D28000,status-playable,playable,2021-02-09 00:23:07.000 +"1917 - The Alien Invasion DX",,status-playable,playable,2021-01-08 22:11:16.000 +"1971 PROJECT HELIOS",0100829010F4A000,status-playable,playable,2021-04-14 13:50:19.000 +"1979 Revolution: Black Friday",0100D1000B18C000,nvdec;status-playable,playable,2021-02-21 21:03:43.000 +"198X",,status-playable,playable,2020-08-07 13:24:38.000 +"1993 Shenandoah",,status-playable,playable,2020-10-24 13:55:42.000 +"1993 Shenandoah Demo",0100148012550000,status-playable,playable,2021-02-09 00:43:43.000 +"2048 Battles",,status-playable,playable,2020-12-12 14:21:25.000 +"2064: Read Only Memories",,deadlock;status-menus,menus,2020-05-28 16:53:58.000 +"20XX",0100749009844000,gpu;status-ingame,ingame,2023-08-14 09:41:44.000 +"2urvive",01007550131EE000,status-playable,playable,2022-11-17 13:49:37.000 +"2weistein – The Curse of the Red Dragon",0100E20012886000,status-playable;nvdec;UE4,playable,2022-11-18 14:47:07.000 +"30 in 1 game collection vol. 2",0100DAC013D0A000,status-playable;online-broken,playable,2022-10-15 17:22:27.000 +"30-in-1 Game Collection",010056D00E234000,status-playable;online-broken,playable,2022-10-15 17:47:09.000 +"3000th Duel",0100FB5010D2E000,status-playable,playable,2022-09-21 17:12:08.000 +"36 Fragments of Midnight",,status-playable,playable,2020-05-28 15:12:59.000 +"39 Days to Mars",0100AF400C4CE000,status-playable,playable,2021-02-21 22:12:46.000 +"3D Arcade Fishing",010010C013F2A000,status-playable,playable,2022-10-25 21:50:51.000 +"3D MiniGolf",,status-playable,playable,2021-01-06 09:22:11.000 +"4x4 Dirt Track",,status-playable,playable,2020-12-12 21:41:42.000 +"60 Parsecs!",010010100FF14000,status-playable,playable,2022-09-17 11:01:17.000 +"60 Seconds!",0100969005E98000,services;status-ingame,ingame,2021-11-30 01:04:14.000 +"6180 the moon",,status-playable,playable,2020-05-28 15:39:24.000 +"64",,status-playable,playable,2020-12-12 21:31:58.000 +"7 Billion Humans",,32-bit;status-playable,playable,2020-12-17 21:04:58.000 +"7th Sector",,nvdec;status-playable,playable,2020-08-10 14:22:14.000 +"8-BIT ADVENTURE STEINS;GATE",,audio;status-ingame,ingame,2020-01-12 15:05:06.000 +"80 Days",,status-playable,playable,2020-06-22 21:43:01.000 +"80's OVERDRIVE",,status-playable,playable,2020-10-16 14:33:32.000 +"88 Heroes",,status-playable,playable,2020-05-28 14:13:02.000 +"9 Monkeys of Shaolin",,UE4;gpu;slow;status-ingame,ingame,2020-11-17 11:58:43.000 +"9 Monkeys of Shaolin Demo",0100C5F012E3E000,UE4;gpu;nvdec;status-ingame,ingame,2021-02-09 01:03:30.000 +"911 Operator Deluxe Edition",,status-playable,playable,2020-07-14 13:57:44.000 +"99Vidas",,online;status-playable,playable,2020-10-29 13:00:40.000 +"99Vidas Demo",010023500C2F0000,status-playable,playable,2021-02-09 12:51:31.000 +"9th Dawn III",,status-playable,playable,2020-12-12 22:27:27.000 +"A Ch'ti Bundle",010096A00CC80000,status-playable;nvdec,playable,2022-10-04 12:48:44.000 +"A Dark Room",,gpu;status-ingame,ingame,2020-12-14 16:14:28.000 +"A Duel Hand Disaster Trackher: DEMO",0100582012B90000,crash;demo;nvdec;status-ingame,ingame,2021-03-24 18:45:27.000 +"A Duel Hand Disaster: Trackher",010026B006802000,status-playable;nvdec;online-working,playable,2022-09-04 14:24:55.000 +"A Frog Game",,status-playable,playable,2020-12-14 16:09:53.000 +"A Hat In Time",010056E00853A000,status-playable,playable,2024-06-25 19:52:44.000 +"A HERO AND A GARDEN",01009E1011EC4000,status-playable,playable,2022-12-05 16:37:47.000 +"A Knight's Quest",01005EF00CFDA000,status-playable;UE4,playable,2022-09-12 20:44:20.000 +"A magical high school girl",01008DD006C52000,status-playable,playable,2022-07-19 14:40:50.000 +"A Short Hike",,status-playable,playable,2020-10-15 00:19:58.000 +"A Sound Plan",,crash;status-boots,boots,2020-12-14 16:46:21.000 +"A Summer with the Shiba Inu",01007DD011C4A000,status-playable,playable,2021-06-10 20:51:16.000 +"A-Train: All Aboard! Tourism",0100A3E010E56000,nvdec;status-playable,playable,2021-04-06 17:48:19.000 +"Aaero",010097A00CC0A000,status-playable;nvdec,playable,2022-07-19 14:49:55.000 +"Aborigenus",,status-playable,playable,2020-08-05 19:47:24.000 +"Absolute Drift",,status-playable,playable,2020-12-10 14:02:44.000 +"Abyss of The Sacrifice",010047F012BE2000,status-playable;nvdec,playable,2022-10-21 13:56:28.000 +"ABZU",0100C1300BBC6000,status-playable;UE4,playable,2022-07-19 15:02:52.000 +"ACA NEOGEO 2020 SUPER BASEBALL",01003C400871E000,online;status-playable,playable,2021-04-12 13:23:51.000 +"ACA NEOGEO 3 COUNT BOUT",0100FC000AFC6000,online;status-playable,playable,2021-04-12 13:16:42.000 +"ACA NEOGEO AERO FIGHTERS 2",0100AC40038F4000,online;status-playable,playable,2021-04-08 15:44:09.000 +"ACA NEOGEO AERO FIGHTERS 3",0100B91008780000,online;status-playable,playable,2021-04-12 13:11:17.000 +"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",0100B4800AFBA000,online;status-playable,playable,2021-04-01 22:48:01.000 +"ACA NEOGEO BASEBALL STARS PROFESSIONAL",01003FE00A2F6000,online;status-playable,playable,2021-04-01 21:23:05.000 +"ACA NEOGEO BLAZING STAR",,crash;services;status-menus,menus,2020-05-26 17:29:02.000 +"ACA NEOGEO CROSSED SWORDS",0100D2400AFB0000,online;status-playable,playable,2021-04-01 20:42:59.000 +"ACA NEOGEO FATAL FURY",0100EE6002B48000,online;status-playable,playable,2021-04-01 20:36:23.000 +"ACA NEOGEO FOOTBALL FRENZY",,status-playable,playable,2021-03-29 20:12:12.000 +"ACA NEOGEO GAROU: MARK OF THE WOLVES",0100CB2001DB8000,online;status-playable,playable,2021-04-01 20:31:10.000 +"ACA NEOGEO GHOST PILOTS",01005D700A2F8000,online;status-playable,playable,2021-04-01 20:26:45.000 +"ACA NEOGEO LAST RESORT",01000D10038E6000,online;status-playable,playable,2021-04-01 19:51:22.000 +"ACA NEOGEO LEAGUE BOWLING",,crash;services;status-menus,menus,2020-05-26 17:11:04.000 +"ACA NEOGEO MAGICAL DROP II",,crash;services;status-menus,menus,2020-05-26 16:48:24.000 +"ACA NEOGEO MAGICIAN LORD",01007920038F6000,online;status-playable,playable,2021-04-01 19:33:26.000 +"ACA NEOGEO METAL SLUG",0100EBE002B3E000,status-playable,playable,2021-02-21 13:56:48.000 +"ACA NEOGEO METAL SLUG 2",010086300486E000,online;status-playable,playable,2021-04-01 19:25:52.000 +"ACA NEOGEO METAL SLUG 3",,crash;services;status-menus,menus,2020-05-26 16:32:45.000 +"ACA NEOGEO METAL SLUG 4",01009CE00AFAE000,online;status-playable,playable,2021-04-01 18:12:18.000 +"ACA NEOGEO Metal Slug X",,crash;services;status-menus,menus,2020-05-26 14:07:20.000 +"ACA NEOGEO Money Puzzle Exchanger",010038F00AFA0000,online;status-playable,playable,2021-04-01 17:59:56.000 +"ACA NEOGEO NEO TURF MASTERS",01002E70032E8000,status-playable,playable,2021-02-21 15:12:01.000 +"ACA NEOGEO NINJA COMBAT",010052A00A306000,status-playable,playable,2021-03-29 21:17:28.000 +"ACA NEOGEO NINJA COMMANDO",01007E800AFB6000,online;status-playable,playable,2021-04-01 17:28:18.000 +"ACA NEOGEO OVER TOP",01003A5001DBA000,status-playable,playable,2021-02-21 13:16:25.000 +"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",010088500878C000,online;status-playable,playable,2021-04-01 17:18:27.000 +"ACA NEOGEO SAMURAI SHODOWN",01005C9002B42000,online;status-playable,playable,2021-04-01 17:11:35.000 +"ACA NEOGEO SAMURAI SHODOWN IV",010047F001DBC000,online;status-playable,playable,2021-04-12 12:58:54.000 +"ACA NEOGEO SAMURAI SHODOWN SPECIAL V",010049F00AFE8000,online;status-playable,playable,2021-04-10 18:07:13.000 +"ACA NEOGEO SENGOKU 2",01009B300872A000,online;status-playable,playable,2021-04-10 17:36:44.000 +"ACA NEOGEO SENGOKU 3",01008D000877C000,online;status-playable,playable,2021-04-10 16:11:53.000 +"ACA NEOGEO SHOCK TROOPERS",,crash;services;status-menus,menus,2020-05-26 15:29:34.000 +"ACA NEOGEO SPIN MASTER",01007D1004DBA000,online;status-playable,playable,2021-04-10 15:50:19.000 +"ACA NEOGEO SUPER SIDEKICKS 2",010055A00A300000,online;status-playable,playable,2021-04-10 16:05:58.000 +"ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY",0100A4D00A308000,online;status-playable,playable,2021-04-10 15:39:22.000 +"ACA NEOGEO THE KING OF FIGHTERS '94",,crash;services;status-menus,menus,2020-05-26 15:03:44.000 +"ACA NEOGEO THE KING OF FIGHTERS '95",01009DC001DB6000,status-playable,playable,2021-03-29 20:27:35.000 +"ACA NEOGEO THE KING OF FIGHTERS '96",01006F0004FB4000,online;status-playable,playable,2021-04-10 14:49:10.000 +"ACA NEOGEO THE KING OF FIGHTERS '97",0100170008728000,online;status-playable,playable,2021-04-10 14:43:27.000 +"ACA NEOGEO THE KING OF FIGHTERS '98",,crash;services;status-menus,menus,2020-05-26 14:54:20.000 +"ACA NEOGEO THE KING OF FIGHTERS '99",0100583001DCA000,online;status-playable,playable,2021-04-10 14:36:56.000 +"ACA NEOGEO THE KING OF FIGHTERS 2000",0100B97002B44000,online;status-playable,playable,2021-04-10 15:24:35.000 +"ACA NEOGEO THE KING OF FIGHTERS 2001",010048200AFC2000,online;status-playable,playable,2021-04-10 15:16:23.000 +"ACA NEOGEO THE KING OF FIGHTERS 2002",0100CFD00AFDE000,online;status-playable,playable,2021-04-10 15:01:55.000 +"ACA NEOGEO THE KING OF FIGHTERS 2003",0100EF100AFE6000,online;status-playable,playable,2021-04-10 14:54:31.000 +"ACA NEOGEO THE LAST BLADE 2",0100699008792000,online;status-playable,playable,2021-04-10 14:31:54.000 +"ACA NEOGEO THE SUPER SPY",0100F7F00AFA2000,online;status-playable,playable,2021-04-10 14:26:33.000 +"ACA NEOGEO WAKU WAKU 7",0100CEF001DC0000,online;status-playable,playable,2021-04-10 14:20:52.000 +"ACA NEOGEO WORLD HEROES PERFECT",,crash;services;status-menus,menus,2020-05-26 14:14:36.000 +"ACA NEOGEO ZUPAPA!",,online;status-playable,playable,2021-03-25 20:07:33.000 +"Access Denied",0100A9900CB5C000,status-playable,playable,2022-07-19 15:25:10.000 +"Ace Angler: Fishing Spirits",01007C50132C8000,status-menus;crash,menus,2023-03-03 03:21:39.000 +"Ace Attorney Investigations Collection DEMO",010033401E68E000,status-playable,playable,2024-09-07 06:16:42.000 +"Ace Combat 7 - Skies Unknown Deluxe Edition",010039301B7E0000,gpu;status-ingame;UE4,ingame,2024-09-27 14:31:43.000 +"Ace of Seafood",0100FF1004D56000,status-playable,playable,2022-07-19 15:32:25.000 +"Aces of the Luftwaffe Squadron",,nvdec;slow;status-playable,playable,2020-05-27 12:29:42.000 +"Aces of the Luftwaffe Squadron Demo",010054300D822000,nvdec;status-playable,playable,2021-02-09 13:12:28.000 +"ACORN Tactics",0100DBC0081A4000,status-playable,playable,2021-02-22 12:57:40.000 +"Across the Grooves",,status-playable,playable,2020-06-27 12:29:51.000 +"Acthung! Cthulhu Tactics",,status-playable,playable,2020-12-14 18:40:27.000 +"Active Neurons",010039A010DA0000,status-playable,playable,2021-01-27 21:31:21.000 +"Active Neurons 2",01000D1011EF0000,status-playable,playable,2022-10-07 16:21:42.000 +"Active Neurons 2 Demo",010031C0122B0000,status-playable,playable,2021-02-09 13:40:21.000 +"Active Neurons 3",0100EE1013E12000,status-playable,playable,2021-03-24 12:20:20.000 +"Actual Sunlight",,gpu;status-ingame,ingame,2020-12-14 17:18:41.000 +"Adam's Venture: Origins",0100C0C0040E4000,status-playable,playable,2021-03-04 18:43:57.000 +"Adrenaline Rush - Miami Drive",,status-playable,playable,2020-12-12 22:49:50.000 +"Advance Wars 1+2: Re-Boot Camp",0100300012F2A000,status-playable,playable,2024-01-30 18:19:44.000 +"Adventure Llama",,status-playable,playable,2020-12-14 19:32:24.000 +"Adventure Pinball Bundle",,slow;status-playable,playable,2020-12-14 20:31:53.000 +"Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",01003B400A00A000,status-playable;nvdec,playable,2022-09-17 11:07:56.000 +"Adventures of Chris",,status-playable,playable,2020-12-12 23:00:02.000 +"Adventures of Chris Demo",0100A0A0136E8000,status-playable,playable,2021-02-09 13:49:21.000 +"Adventures of Pip",,nvdec;status-playable,playable,2020-12-12 22:11:55.000 +"ADVERSE",01008C901266E000,UE4;status-playable,playable,2021-04-26 14:32:51.000 +"Aegis Defenders Demo",010064500AF72000,status-playable,playable,2021-02-09 14:04:17.000 +"Aegis Defenders0",01008E6006502000,status-playable,playable,2021-02-22 13:29:33.000 +"Aeolis Tournament",,online;status-playable,playable,2020-12-12 22:02:14.000 +"Aeolis Tournament Demo",01006710122CE000,nvdec;status-playable,playable,2021-02-09 14:22:30.000 +"AER - Memories of Old",0100A0400DDE0000,nvdec;status-playable,playable,2021-03-05 18:43:43.000 +"Aerial Knight's Never Yield",0100E9B013D4A000,status-playable,playable,2022-10-25 22:05:00.000 +"Aery",0100875011D0C000,status-playable,playable,2021-03-07 15:25:51.000 +"Aery - Sky Castle",010018E012914000,status-playable,playable,2022-10-21 17:58:49.000 +"Aery - A Journey Beyond Time",0100DF8014056000,status-playable,playable,2021-04-05 15:52:25.000 +"Aery - Broken Memories",0100087012810000,status-playable,playable,2022-10-04 13:11:52.000 +"Aery - Calm Mind - 0100A801539000",,status-playable,playable,2022-11-14 14:26:58.000 +"AeternoBlade Demo Version",0100B1C00949A000,nvdec;status-playable,playable,2021-02-09 14:39:26.000 +"AeternoBlade I",,nvdec;status-playable,playable,2020-12-14 20:06:48.000 +"AeternoBlade II",01009D100EA28000,status-playable;online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18.000 +"AeternoBlade II Demo Version",,gpu;nvdec;status-ingame,ingame,2021-02-09 15:10:19.000 +"AFL Evolution 2",01001B400D334000,slow;status-playable;online-broken;UE4,playable,2022-12-07 12:45:56.000 +"Afterparty",0100DB100BBCE000,status-playable,playable,2022-09-22 12:23:19.000 +"Agatha Christie - The ABC Murders",,status-playable,playable,2020-10-27 17:08:23.000 +"Agatha Knife",,status-playable,playable,2020-05-28 12:37:58.000 +"Agent A: A puzzle in disguise",,status-playable,playable,2020-11-16 22:53:27.000 +"Agent A: A puzzle in disguise (Demo)",01008E8012C02000,status-playable,playable,2021-02-09 18:30:41.000 +"Ages of Mages: the Last Keeper",0100E4700E040000,status-playable;vulkan-backend-bug,playable,2022-10-04 11:44:05.000 +"Aggelos",010004D00A9C0000,gpu;status-ingame,ingame,2023-02-19 13:24:23.000 +"Agony",,UE4;crash;status-boots,boots,2020-07-10 16:21:18.000 +"Ai: the Somnium Files",010089B00D09C000,status-playable;nvdec,playable,2022-09-04 14:45:06.000 +"AI: The Somnium Files Demo",0100C1700FB34000,nvdec;status-playable,playable,2021-02-10 12:52:33.000 +"Ailment",,status-playable,playable,2020-12-12 22:30:41.000 +"Air Conflicts: Pacific Carriers",,status-playable,playable,2021-01-04 10:52:50.000 +"Air Hockey",,status-playable,playable,2020-05-28 16:44:37.000 +"Air Missions: HIND",,status-playable,playable,2020-12-13 10:16:45.000 +"Aircraft Evolution",0100E95011FDC000,nvdec;status-playable,playable,2021-06-14 13:30:18.000 +"Airfield Mania Demo",010010A00DB72000,services;status-boots;demo,boots,2022-04-10 03:43:02.000 +"AIRHEART - Tales of Broken Wings",01003DD00BFEE000,status-playable,playable,2021-02-26 15:20:27.000 +"Akane",01007F100DE52000,status-playable;nvdec,playable,2022-07-21 00:12:18.000 +"Akash Path of the Five",,gpu;nvdec;status-ingame,ingame,2020-12-14 22:33:12.000 +"Akihabara - Feel the Rhythm Remixed",010053100B0EA000,status-playable,playable,2021-02-22 14:39:35.000 +"Akuarium",,slow;status-playable,playable,2020-12-12 23:43:36.000 +"Akuto",,status-playable,playable,2020-08-04 19:43:27.000 +"Alchemic Jousts",0100F5400AB6C000,gpu;status-ingame,ingame,2022-12-08 15:06:28.000 +"Alchemist's Castle",,status-playable,playable,2020-12-12 23:54:08.000 +"Alder's Blood",,status-playable,playable,2020-08-28 15:15:23.000 +"Alder's Blood Prologue",01004510110C4000,crash;status-ingame,ingame,2021-02-09 19:03:03.000 +"Aldred - Knight of Honor",01000E000EEF8000,services;status-playable,playable,2021-11-30 01:49:17.000 +"Alex Kidd in Miracle World DX",010025D01221A000,status-playable,playable,2022-11-14 15:01:34.000 +"Alien Cruise",,status-playable,playable,2020-08-12 13:56:05.000 +"Alien Escape",,status-playable,playable,2020-06-03 23:43:18.000 +"Alien: Isolation",010075D00E8BA000,status-playable;nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41.000 +"All Walls Must Fall",0100CBD012FB6000,status-playable;UE4,playable,2022-10-15 19:16:30.000 +"All-Star Fruit Racing",0100C1F00A9B8000,status-playable;nvdec;UE4,playable,2022-07-21 00:35:37.000 +"Alluris",0100AC501122A000,gpu;status-ingame;UE4,ingame,2023-08-02 23:13:50.000 +"Almightree the Last Dreamer",,slow;status-playable,playable,2020-12-15 13:59:03.000 +"Along the Edge",,status-playable,playable,2020-11-18 15:00:07.000 +"Alpaca Ball: Allstars",,nvdec;status-playable,playable,2020-12-11 12:26:29.000 +"ALPHA",,status-playable,playable,2020-12-13 12:17:45.000 +"Alphaset by POWGI",,status-playable,playable,2020-12-15 15:15:15.000 +"Alt-Frequencies",,status-playable,playable,2020-12-15 19:01:33.000 +"Alteric",,status-playable,playable,2020-11-08 13:53:22.000 +"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",,status-playable,playable,2020-08-31 14:17:42.000 +"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",0100A8A00D27E000,status-playable,playable,2021-02-10 13:33:59.000 +"Aluna: Sentinel of the Shards",010045201487C000,status-playable;nvdec,playable,2022-10-25 22:17:03.000 +"Alwa's Awakening",,status-playable,playable,2020-10-13 11:52:01.000 +"Alwa's Legacy",,status-playable,playable,2020-12-13 13:00:57.000 +"American Fugitive",,nvdec;status-playable,playable,2021-01-04 20:45:11.000 +"American Ninja Warrior: Challenge",010089D00A3FA000,nvdec;status-playable,playable,2021-06-09 13:11:17.000 +"Amnesia: Collection",01003CC00D0BE000,status-playable,playable,2022-10-04 13:36:15.000 +"Amoeba Battle - Microscopic RTS Action",010041D00DEB2000,status-playable,playable,2021-05-06 13:33:41.000 +"Among the Sleep - Enhanced Edition",010046500C8D2000,nvdec;status-playable,playable,2021-06-03 15:06:25.000 +"Among Us",0100B0C013912000,status-menus;online;ldn-broken,menus,2021-09-22 15:20:17.000 +"Anarcute",010050900E1C6000,status-playable,playable,2021-02-22 13:17:59.000 +"Ancestors Legacy",01009EE0111CC000,status-playable;nvdec;UE4,playable,2022-10-01 12:25:36.000 +"Ancient Rush 2",,UE4;crash;status-menus,menus,2020-07-14 14:58:47.000 +"Angels of Death",0100AE000AEBC000,nvdec;status-playable,playable,2021-02-22 14:17:15.000 +"AngerForce: Reloaded for Nintendo Switch",010001E00A5F6000,status-playable,playable,2022-07-21 10:37:17.000 +"Angry Bunnies: Colossal Carrot Crusade",0100F3500D05E000,status-playable;online-broken,playable,2022-09-04 14:53:26.000 +"Angry Video Game Nerd I & II Deluxe",,crash;status-ingame,ingame,2020-12-12 23:59:54.000 +"Anima Gate of Memories: The Nameless Chronicles",01007A400B3F8000,status-playable,playable,2021-06-14 14:33:06.000 +"Anima: Arcane Edition",010033F00B3FA000,nvdec;status-playable,playable,2021-01-26 16:55:51.000 +"Anima: Gate of Memories",0100706005B6A000,nvdec;status-playable,playable,2021-06-16 18:13:18.000 +"Animal Crossing New Horizons Island Transfer Tool",0100F38011CFE000,services;status-ingame;Needs Update;Incomplete,ingame,2022-12-07 13:51:19.000 +"Animal Crossing: New Horizons",01006F8002326000,gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49.000 +"Animal Fight Club",,gpu;status-ingame,ingame,2020-12-13 13:13:33.000 +"Animal Fun for Toddlers and Kids",,services;status-boots,boots,2020-12-15 16:45:29.000 +"Animal Hunter Z",,status-playable,playable,2020-12-13 12:50:35.000 +"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",010033C0121DC000,services;status-boots,boots,2021-11-29 23:43:14.000 +"Animal Rivals Switch",010065B009B3A000,status-playable,playable,2021-02-22 14:02:42.000 +"Animal Super Squad",0100EFE009424000,UE4;status-playable,playable,2021-04-23 20:50:50.000 +"Animal Up",,status-playable,playable,2020-12-13 15:39:02.000 +"ANIMAL WELL",010020D01AD24000,status-playable,playable,2024-05-22 18:01:49.000 +"Animals for Toddlers",,services;status-boots,boots,2020-12-15 17:27:27.000 +"Animated Jigsaws Collection",,nvdec;status-playable,playable,2020-12-15 15:58:34.000 +"Animated Jigsaws: Beautiful Japanese Scenery DEMO",0100A1900B5B8000,nvdec;status-playable,playable,2021-02-10 13:49:56.000 +"Anime Studio Story",,status-playable,playable,2020-12-15 18:14:05.000 +"Anime Studio Story Demo",01002B300EB86000,status-playable,playable,2021-02-10 14:50:39.000 +"ANIMUS",,status-playable,playable,2020-12-13 15:11:47.000 +"Animus: Harbinger",0100E5A00FD38000,status-playable,playable,2022-09-13 22:09:20.000 +"Ankh Guardian - Treasure of the Demon's Temple",,status-playable,playable,2020-12-13 15:55:49.000 +"Anode",,status-playable,playable,2020-12-15 17:18:58.000 +"Another Code: Recollection",0100CB9018F5A000,gpu;status-ingame;crash,ingame,2024-09-06 05:58:52.000 +"Another Sight",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-03 16:49:59.000 +"Another World",01003C300AAAE000,slow;status-playable,playable,2022-07-21 10:42:38.000 +"AnShi",01000FD00DF78000,status-playable;nvdec;UE4,playable,2022-10-21 19:37:01.000 +"Anthill",010054C00D842000,services;status-menus;nvdec,menus,2021-11-18 09:25:25.000 +"Anti-Hero Bundle",0100596011E20000,status-playable;nvdec,playable,2022-10-21 20:10:30.000 +"Antiquia Lost",,status-playable,playable,2020-05-28 11:57:32.000 +"Antventor",,nvdec;status-playable,playable,2020-12-15 20:09:27.000 +"Ao no Kanata no Four Rhythm",0100FA100620C000,status-playable,playable,2022-07-21 10:50:42.000 +"AO Tennis 2",010047000E9AA000,status-playable;online-broken,playable,2022-09-17 12:05:07.000 +"Aokana - Four Rhythms Across the Blue",0100990011866000,status-playable,playable,2022-10-04 13:50:26.000 +"Ape Out",01005B100C268000,status-playable,playable,2022-09-26 19:04:47.000 +"APE OUT DEMO",010054500E6D4000,status-playable,playable,2021-02-10 14:33:06.000 +"Aperion Cyberstorm",,status-playable,playable,2020-12-14 00:40:16.000 +"Aperion Cyberstorm Demo",01008CA00D71C000,status-playable,playable,2021-02-10 15:53:21.000 +"Apocalipsis",,deadlock;status-menus,menus,2020-05-27 12:56:37.000 +"Apocryph",,gpu;status-ingame,ingame,2020-12-13 23:24:10.000 +"Apparition",,nvdec;slow;status-ingame,ingame,2020-12-13 23:57:04.000 +"AQUA KITTY UDX",0100AC10085CE000,online;status-playable,playable,2021-04-12 15:34:11.000 +"Aqua Lungers",,crash;status-ingame,ingame,2020-12-14 11:25:57.000 +"Aqua Moto Racing Utopia",0100D0D00516A000,status-playable,playable,2021-02-21 21:21:00.000 +"Aragami: Shadow Edition",010071800BA74000,nvdec;status-playable,playable,2021-02-21 20:33:23.000 +"Arc of Alchemist",0100C7D00E6A0000,status-playable;nvdec,playable,2022-10-07 19:15:54.000 +"Arcade Archives 10-Yard Fight",0100BE80097FA000,online;status-playable,playable,2021-03-25 21:26:41.000 +"Arcade Archives ALPHA MISSION",01005DD00BE08000,online;status-playable,playable,2021-04-15 09:20:43.000 +"Arcade Archives ALPINE SKI",010083800DC70000,online;status-playable,playable,2021-04-15 09:28:46.000 +"Arcade Archives ARGUS",010014F001DE2000,online;status-playable,playable,2021-04-16 06:51:25.000 +"Arcade Archives Armed F",010014F001DE2000,online;status-playable,playable,2021-04-16 07:00:17.000 +"Arcade Archives ATHENA",0100BEC00C7A2000,online;status-playable,playable,2021-04-16 07:10:12.000 +"Arcade Archives Atomic Robo-Kid",0100426001DE4000,online;status-playable,playable,2021-04-16 07:20:29.000 +"Arcade Archives BOMB JACK",0100192009824000,online;status-playable,playable,2021-04-16 09:48:26.000 +"Arcade Archives City CONNECTION",010007A00980C000,online;status-playable,playable,2021-03-25 22:16:15.000 +"Arcade Archives CLU CLU LAND",0100EDC00E35A000,online;status-playable,playable,2021-04-16 10:00:42.000 +"Arcade Archives CRAZY CLIMBER",0100BB1001DD6000,online;status-playable,playable,2021-03-25 22:24:15.000 +"Arcade Archives DONKEY KONG",,Needs Update;crash;services;status-menus,menus,2021-03-24 18:18:43.000 +"Arcade Archives DOUBLE DRAGON",0100F25001DD0000,online;status-playable,playable,2021-03-25 22:44:34.000 +"Arcade Archives DOUBLE DRAGON II The Revenge",01009E3001DDE000,online;status-playable,playable,2021-04-12 16:05:29.000 +"Arcade Archives FRONT LINE",0100496006EC8000,online;status-playable,playable,2021-05-05 14:10:49.000 +"Arcade Archives HEROIC EPISODE",01009A4008A30000,online;status-playable,playable,2021-03-25 23:01:26.000 +"Arcade Archives ICE CLIMBER",01007D200D3FC000,online;status-playable,playable,2021-05-05 14:18:34.000 +"Arcade Archives IKARI WARRIORS",010049400C7A8000,online;status-playable,playable,2021-05-05 14:24:46.000 +"Arcade Archives Ikki",01000DB00980A000,online;status-playable,playable,2021-03-25 23:11:28.000 +"Arcade Archives IMAGE FIGHT",010008300C978000,online;status-playable,playable,2021-05-05 14:31:21.000 +"Arcade Archives Kid Niki Radical Ninja",010010B008A36000,audio;status-ingame;online,ingame,2022-07-21 11:02:04.000 +"Arcade Archives Kid's Horehore Daisakusen",0100E7C001DE0000,online;status-playable,playable,2021-04-12 16:21:29.000 +"Arcade Archives LIFE FORCE",,status-playable,playable,2020-09-04 13:26:25.000 +"Arcade Archives MARIO BROS.",0100755004608000,online;status-playable,playable,2021-03-26 11:31:32.000 +"Arcade Archives MOON CRESTA",01000BE001DD8000,online;status-playable,playable,2021-05-05 14:39:29.000 +"Arcade Archives MOON PATROL",01003000097FE000,online;status-playable,playable,2021-03-26 11:42:04.000 +"Arcade Archives NINJA GAIDEN",01003EF00D3B4000,audio;online;status-ingame,ingame,2021-04-12 16:27:53.000 +"Arcade Archives Ninja Spirit",01002F300D2C6000,online;status-playable,playable,2021-05-05 14:45:31.000 +"Arcade Archives Ninja-Kid",,online;status-playable,playable,2021-03-26 20:55:07.000 +"Arcade Archives OMEGA FIGHTER",,crash;services;status-menus,menus,2020-08-18 20:50:54.000 +"Arcade Archives PLUS ALPHA",,audio;status-ingame,ingame,2020-07-04 20:47:55.000 +"Arcade Archives POOYAN",0100A6E00D3F8000,online;status-playable,playable,2021-05-05 17:58:19.000 +"Arcade Archives PSYCHO SOLDIER",01000D200C7A4000,online;status-playable,playable,2021-05-05 18:02:19.000 +"Arcade Archives PUNCH-OUT!!",01001530097F8000,online;status-playable,playable,2021-03-25 22:10:55.000 +"Arcade Archives Renegade",010081E001DD2000,status-playable;online,playable,2022-07-21 11:45:40.000 +"Arcade Archives ROAD FIGHTER",0100FBA00E35C000,online;status-playable,playable,2021-05-05 18:09:17.000 +"Arcade Archives ROUTE 16",010060000BF7C000,online;status-playable,playable,2021-05-05 18:40:41.000 +"Arcade Archives RYGAR",0100C2D00981E000,online;status-playable,playable,2021-04-15 08:48:30.000 +"Arcade Archives Shusse Ozumo",01007A4009834000,online;status-playable,playable,2021-05-05 17:52:25.000 +"Arcade Archives Sky Skipper",010008F00B054000,online;status-playable,playable,2021-04-15 08:58:09.000 +"Arcade Archives Solomon's Key",01008C900982E000,online;status-playable,playable,2021-04-19 16:27:18.000 +"Arcade Archives STAR FORCE",010069F008A38000,online;status-playable,playable,2021-04-15 08:39:09.000 +"Arcade Archives TERRA CRESTA",,crash;services;status-menus,menus,2020-08-18 20:20:55.000 +"Arcade Archives TERRA FORCE",0100348001DE6000,online;status-playable,playable,2021-04-16 20:03:27.000 +"Arcade Archives TETRIS THE GRAND MASTER",0100DFD016B7A000,status-playable,playable,2024-06-23 01:50:29.000 +"Arcade Archives THE NINJA WARRIORS",0100DC000983A000,online;slow;status-ingame,ingame,2021-04-16 19:54:56.000 +"Arcade Archives TIME PILOT",0100AF300D2E8000,online;status-playable,playable,2021-04-16 19:22:31.000 +"Arcade Archives Traverse USA",010029D006ED8000,online;status-playable,playable,2021-04-15 08:11:06.000 +"Arcade Archives URBAN CHAMPION",010042200BE0C000,online;status-playable,playable,2021-04-16 10:20:03.000 +"Arcade Archives VS. GRADIUS",01004EC00E634000,online;status-playable,playable,2021-04-12 14:53:58.000 +"Arcade Archives VS. SUPER MARIO BROS.",,online;status-playable,playable,2021-04-08 14:48:11.000 +"Arcade Archives WILD WESTERN",01001B000D8B6000,online;status-playable,playable,2021-04-16 10:11:36.000 +"Arcade Classics Anniversary Collection",010050000D6C4000,status-playable,playable,2021-06-03 13:55:10.000 +"ARCADE FUZZ",,status-playable,playable,2020-08-15 12:37:36.000 +"Arcade Spirits",,status-playable,playable,2020-06-21 11:45:03.000 +"Arcaea",0100E680149DC000,status-playable,playable,2023-03-16 19:31:21.000 +"Arcanoid Breakout",0100E53013E1C000,status-playable,playable,2021-01-25 23:28:02.000 +"Archaica: Path of LightInd",,crash;status-nothing,nothing,2020-10-16 13:22:26.000 +"Area 86",,status-playable,playable,2020-12-16 16:45:52.000 +"ARIA CHRONICLE",0100691013C46000,status-playable,playable,2022-11-16 13:50:55.000 +"Ark: Survival Evolved",0100D4A00B284000,gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56.000 +"Arkanoid vs Space Invaders",,services;status-ingame,ingame,2021-01-21 12:50:30.000 +"Arkham Horror: Mother's Embrace",010069A010606000,nvdec;status-playable,playable,2021-04-19 15:40:55.000 +"Armed 7 DX",,status-playable,playable,2020-12-14 11:49:56.000 +"Armello",,nvdec;status-playable,playable,2021-01-07 11:43:26.000 +"ARMS",01009B500007C000,status-playable;ldn-works;LAN,playable,2024-08-28 07:49:24.000 +"ARMS Demo",,status-playable,playable,2021-02-10 16:30:13.000 +"Arrest of a stone Buddha",0100184011B32000,status-nothing;crash,nothing,2022-12-07 16:55:00.000 +"Arrog",,status-playable,playable,2020-12-16 17:20:50.000 +"Art of Balance",01008EC006BE2000,gpu;status-ingame;ldn-works,ingame,2022-07-21 17:13:57.000 +"Art of Balance DEMO",010062F00CAE2000,gpu;slow;status-ingame,ingame,2021-02-10 17:17:12.000 +"Art Sqool",01006AA013086000,status-playable;nvdec,playable,2022-10-16 20:42:37.000 +"Artifact Adventure Gaiden DX",,status-playable,playable,2020-12-16 17:49:25.000 +"Ary and the Secret of Seasons",0100C2500CAB6000,status-playable,playable,2022-10-07 20:45:09.000 +"ASCENDANCE",,status-playable,playable,2021-01-05 10:54:40.000 +"Asemblance",,UE4;gpu;status-ingame,ingame,2020-12-16 18:01:23.000 +"Ash of Gods: Redemption",,deadlock;status-nothing,nothing,2020-08-10 18:08:32.000 +"Ashen",010027B00E40E000,status-playable;nvdec;online-broken;UE4,playable,2022-09-17 12:19:14.000 +"Asphalt 9: Legends",01007B000C834000,services;status-menus;crash;online-broken,menus,2022-12-07 13:28:29.000 +"Assassin's Creed III Remastered",01007F600B134000,status-boots;nvdec,boots,2024-06-25 20:12:11.000 +"Assassin's Creed The Rebel Collection",010044700DEB0000,gpu;status-ingame,ingame,2024-05-19 07:58:56.000 +"Assault Android Cactus+",0100DF200B24C000,status-playable,playable,2021-06-03 13:23:55.000 +"Assault Chainguns KM",,crash;gpu;status-ingame,ingame,2020-12-14 12:48:34.000 +"Assault on Metaltron Demo",0100C5E00E540000,status-playable,playable,2021-02-10 19:48:06.000 +"Astebreed",010057A00C1F6000,status-playable,playable,2022-07-21 17:33:54.000 +"Asterix & Obelix XXL 2",010050400BD38000,deadlock;status-ingame;nvdec,ingame,2022-07-21 17:54:14.000 +"Asterix & Obelix XXL: Romastered",0100F46011B50000,gpu;status-ingame;nvdec;opengl,ingame,2023-08-16 21:22:06.000 +"Asterix & Obelix XXL3: The Crystal Menhir",010081500EA1E000,gpu;status-ingame;nvdec;regression,ingame,2022-11-28 14:19:23.000 +"Astral Chain",01007300020FA000,status-playable,playable,2024-07-17 18:02:19.000 +"Astro Bears Party",,status-playable,playable,2020-05-28 11:21:58.000 +"Astro Duel Deluxe",0100F0400351C000,32-bit;status-playable,playable,2021-06-03 11:21:48.000 +"Astrologaster",0100B80010C48000,cpu;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:31.000 +"AstroWings SpaceWar",,status-playable,playable,2020-12-14 13:10:44.000 +"Atari 50 The Anniversary Celebration",010099801870E000,slow;status-playable,playable,2022-11-14 19:42:10.000 +"Atelier Ayesha: The Alchemist of Dusk DX",0100D9D00EE8C000,status-menus;crash;nvdec;Needs Update,menus,2021-11-24 07:29:54.000 +"Atelier Escha & Logy: Alchemists Of The Dusk Sky DX",0100E5600EE8E000,status-playable;nvdec,playable,2022-11-20 16:01:41.000 +"Atelier Firis: The Alchemist and the Mysterious Journey DX",010023201421E000,gpu;status-ingame;nvdec,ingame,2022-10-25 22:46:19.000 +"Atelier Lulua ~ The Scion of Arland ~",,nvdec;status-playable,playable,2020-12-16 14:29:19.000 +"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings",010009900947A000,nvdec;status-playable,playable,2021-06-03 18:37:01.000 +"Atelier Meruru ~ The Apprentice of Arland ~ DX",,nvdec;status-playable,playable,2020-06-12 00:50:48.000 +"Atelier Rorona - The Alchemist of Arland - DX",010088600C66E000,nvdec;status-playable,playable,2021-04-08 15:33:15.000 +"Atelier Rorona Arland no Renkinjutsushi DX (JP)",01002D700B906000,status-playable;nvdec,playable,2022-12-02 17:26:54.000 +"Atelier Ryza 2: Lost Legends & the Secret Fairy",01009A9012022000,status-playable,playable,2022-10-16 21:06:06.000 +"Atelier Ryza: Ever Darkness & the Secret Hideout",0100D1900EC80000,status-playable,playable,2023-10-15 16:36:50.000 +"Atelier Shallie: Alchemists of the Dusk Sea DX",,nvdec;status-playable,playable,2020-11-25 20:54:12.000 +"Atelier Sophie 2: The Alchemist of the Mysterious Dream",010082A01538E000,status-ingame;crash,ingame,2022-12-01 04:34:03.000 +"Atelier Sophie: The Alchemist of the Mysterious Book DX",01001A5014220000,status-playable,playable,2022-10-25 23:06:20.000 +"Atelier Totori ~ The Adventurer of Arland ~ DX",,nvdec;status-playable,playable,2020-06-12 01:04:56.000 +"ATOM RPG",0100B9400FA38000,status-playable;nvdec,playable,2022-10-22 10:11:48.000 +"Atomic Heist",01005FE00EC4E000,status-playable,playable,2022-10-16 21:24:32.000 +"Atomicrops",0100AD30095A4000,status-playable,playable,2022-08-06 10:05:07.000 +"ATOMIK RunGunJumpGun",,status-playable,playable,2020-12-14 13:19:24.000 +"ATOMINE",,gpu;nvdec;slow;status-playable,playable,2020-12-14 18:56:50.000 +"Attack of the Toy Tanks",,slow;status-ingame,ingame,2020-12-14 12:59:12.000 +"Attack on Titan 2",,status-playable,playable,2021-01-04 11:40:01.000 +"ATV Drift & Tricks",01000F600B01E000,UE4;online;status-playable,playable,2021-04-08 17:29:17.000 +"Automachef",,status-playable,playable,2020-12-16 19:51:25.000 +"Automachef Demo",01006B700EA6A000,status-playable,playable,2021-02-10 20:35:37.000 +"Aviary Attorney: Definitive Edition",,status-playable,playable,2020-08-09 20:32:12.000 +"Avicii Invector",,status-playable,playable,2020-10-25 12:12:56.000 +"AVICII Invector Demo",0100E100128BA000,status-playable,playable,2021-02-10 21:04:58.000 +"AvoCuddle",,status-playable,playable,2020-09-02 14:50:13.000 +"Awakening of Cthulhu",0100085012D64000,UE4;status-playable,playable,2021-04-26 13:03:07.000 +"Away: Journey to the Unexpected",01002F1005F3C000,status-playable;nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04.000 +"Awesome Pea",,status-playable,playable,2020-10-11 12:39:23.000 +"Awesome Pea (Demo)",010023800D3F2000,status-playable,playable,2021-02-10 21:48:21.000 +"Awesome Pea 2",0100B7D01147E000,status-playable,playable,2022-10-01 12:34:19.000 +"Awesome Pea 2 (Demo) - 0100D2011E28000",,crash;status-nothing,nothing,2021-02-10 22:08:27.000 +"Axes",0100DA3011174000,status-playable,playable,2021-04-08 13:01:58.000 +"Axiom Verge",,status-playable,playable,2020-10-20 01:07:18.000 +"Ayakashi koi gikyoku Free Trial",010075400DEC6000,status-playable,playable,2021-02-10 22:22:11.000 +"Azur Lane: Crosswave",01006AF012FC8000,UE4;nvdec;status-playable,playable,2021-04-05 15:15:25.000 +"Azuran Tales: Trials",,status-playable,playable,2020-08-12 15:23:07.000 +"Azure Reflections",01006FB00990E000,nvdec;online;status-playable,playable,2021-04-08 13:18:25.000 +"Azure Striker GUNVOLT 3",01004E90149AA000,status-playable,playable,2022-08-10 13:46:49.000 +"Azure Striker Gunvolt: STRIKER PACK",0100192003FA4000,32-bit;status-playable,playable,2024-02-10 23:51:21.000 +"Azurebreak Heroes",,status-playable,playable,2020-12-16 21:26:17.000 +"B.ARK",01009B901145C000,status-playable;nvdec,playable,2022-11-17 13:35:02.000 +"Baba Is You",01002CD00A51C000,status-playable,playable,2022-07-17 05:36:54.000 +"Back to Bed",,nvdec;status-playable,playable,2020-12-16 20:52:04.000 +"Backworlds",0100FEA014316000,status-playable,playable,2022-10-25 23:20:34.000 +"BaconMan",0100EAF00E32E000,status-menus;crash;nvdec,menus,2021-11-20 02:36:21.000 +"Bad Dream: Coma",01000CB00D094000,deadlock;status-boots,boots,2023-08-03 00:54:18.000 +"Bad Dream: Fever",0100B3B00D81C000,status-playable,playable,2021-06-04 18:33:12.000 +"Bad Dudes",,status-playable,playable,2020-12-10 12:30:56.000 +"Bad North",0100E98006F22000,status-playable,playable,2022-07-17 13:44:25.000 +"Bad North Demo",,status-playable,playable,2021-02-10 22:48:38.000 +"BAFL",,status-playable,playable,2021-01-13 08:32:51.000 +"Baila Latino",010076B011EC8000,status-playable,playable,2021-04-14 16:40:24.000 +"Bakugan Champions of Vestroia",,status-playable,playable,2020-11-06 19:07:39.000 +"Bakumatsu Renka SHINSENGUMI",01008260138C4000,status-playable,playable,2022-10-25 23:37:31.000 +"Balan Wonderworld",0100438012EC8000,status-playable;nvdec;UE4,playable,2022-10-22 13:08:43.000 +"Balan Wonderworld Demo",0100E48013A34000,gpu;services;status-ingame;UE4;demo,ingame,2023-02-16 20:05:07.000 +"Balatro",0100CD801CE5E000,status-ingame,ingame,2024-04-21 02:01:53.000 +"Baldur's Gate and Baldur's Gate II: Enhanced Editions",010010A00DA48000,32-bit;status-playable,playable,2022-09-12 23:52:15.000 +"Balthazar's Dreams",0100BC400FB64000,status-playable,playable,2022-09-13 00:13:22.000 +"Bamerang",01008D30128E0000,status-playable,playable,2022-10-26 00:29:39.000 +"Bang Dream Girls Band Party for Nintendo Switch",,status-playable,playable,2021-09-19 03:06:58.000 +"Banner of the Maid",010013C010C5C000,status-playable,playable,2021-06-14 15:23:37.000 +"Banner Saga 2",,crash;status-boots,boots,2021-01-13 08:56:09.000 +"Banner Saga 3",,slow;status-boots,boots,2021-01-11 16:53:57.000 +"Banner Saga Trilogy",0100CE800B94A000,slow;status-playable,playable,2024-03-06 11:25:20.000 +"Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos",,status-playable,playable,2020-07-15 05:06:29.000 +"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",,nvdec;status-playable,playable,2020-12-17 11:43:10.000 +"Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive",,status-playable,playable,2020-12-17 11:22:50.000 +"Baobabs Mausoleum: DEMO",0100D3000AEC2000,status-playable,playable,2021-02-10 22:59:25.000 +"Barbarous! Tavern of Emyr",01003350102E2000,status-playable,playable,2022-10-16 21:50:24.000 +"Barbearian",0100F7E01308C000,Needs Update;gpu;status-ingame,ingame,2021-06-28 16:27:50.000 +"Baron: Fur Is Gonna Fly",010039C0106C6000,status-boots;crash,boots,2022-02-06 02:05:43.000 +"Barry Bradford's Putt Panic Party",,nvdec;status-playable,playable,2020-06-17 01:08:34.000 +"Baseball Riot",01004860080A0000,status-playable,playable,2021-06-04 18:07:27.000 +"Bass Pro Shops: The Strike - Championship Edition",0100E3100450E000,gpu;status-boots;32-bit,boots,2022-12-09 15:58:16.000 +"Bastion",010038600B27E000,status-playable,playable,2022-02-15 14:15:24.000 +"Batbarian: Testament of the Primordials",,status-playable,playable,2020-12-17 12:00:59.000 +"Baten Kaitos I & II HD Remaster (Europe/USA)",0100C07018CA6000,services;status-boots;Needs Update,boots,2023-10-01 00:44:32.000 +"Baten Kaitos I & II HD Remaster (Japan)",0100F28018CA4000,services;status-boots;Needs Update,boots,2023-10-24 23:11:54.000 +"Batman - The Telltale Series",,nvdec;slow;status-playable,playable,2021-01-11 18:19:35.000 +"Batman: Arkham City",01003f00163ce000,status-playable,playable,2024-09-11 00:30:19.000 +"Batman: Arkham Knight",0100ACD0163D0000,gpu;status-ingame;mac-bug,ingame,2024-06-25 20:24:42.000 +"Batman: The Enemy Within",,crash;status-nothing,nothing,2020-10-16 05:49:27.000 +"Battle Axe",0100747011890000,status-playable,playable,2022-10-26 00:38:01.000 +"Battle Chasers: Nightwar",,nvdec;slow;status-playable,playable,2021-01-12 12:27:34.000 +"Battle Chef Brigade",,status-playable,playable,2021-01-11 14:16:28.000 +"Battle Chef Brigade Demo",0100DBB00CAEE000,status-playable,playable,2021-02-10 23:15:07.000 +"Battle Hunters",0100A3B011EDE000,gpu;status-ingame,ingame,2022-11-12 09:19:17.000 +"Battle of Kings",,slow;status-playable,playable,2020-12-17 12:45:23.000 +"Battle Planet - Judgement Day",,status-playable,playable,2020-12-17 14:06:20.000 +"Battle Princess Madelyn",,status-playable,playable,2021-01-11 13:47:23.000 +"Battle Princess Madelyn Royal Edition",0100A7500DF64000,status-playable,playable,2022-09-26 19:14:49.000 +"Battle Supremacy - Evolution",010099B00E898000,gpu;status-boots;nvdec,boots,2022-02-17 09:02:50.000 +"Battle Worlds: Kronos",0100DEB00D5A8000,nvdec;status-playable,playable,2021-06-04 17:48:02.000 +"Battleground",0100650010DD4000,status-ingame;crash,ingame,2021-09-06 11:53:23.000 +"BATTLESLOTHS",,status-playable,playable,2020-10-03 08:32:22.000 +"BATTLESTAR GALACTICA Deadlock",,nvdec;status-playable,playable,2020-06-27 17:35:44.000 +"Battlezone Gold Edition",01006D800A988000,gpu;ldn-untested;online;status-boots,boots,2021-06-04 18:36:05.000 +"BATTLLOON",,status-playable,playable,2020-12-17 15:48:23.000 +"bayala - the game",0100194010422000,status-playable,playable,2022-10-04 14:09:25.000 +"Bayonetta",010076F0049A2000,status-playable;audout,playable,2022-11-20 15:51:59.000 +"Bayonetta 2",01007960049A0000,status-playable;nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09.000 +"Bayonetta 3",01004A4010FEA000,gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33.000 +"Bayonetta Origins Cereza and the Lost Demon Demo",010002801A3FA000,gpu;status-ingame;demo,ingame,2024-02-17 06:06:28.000 +"Bayonetta Origins: Cereza and the Lost Demon",0100CF5010FEC000,gpu;status-ingame,ingame,2024-02-27 01:39:49.000 +"Be-A Walker",,slow;status-ingame,ingame,2020-09-02 15:00:31.000 +"Beach Buggy Racing",010095C00406C000,online;status-playable,playable,2021-04-13 23:16:50.000 +"Bear With Me - The Lost Robots",010020700DE04000,nvdec;status-playable,playable,2021-02-27 14:20:10.000 +"Bear With Me - The Lost Robots Demo",010024200E97E800,nvdec;status-playable,playable,2021-02-12 22:38:12.000 +"Bear's Restaurant - 0100CE014A4E000",,status-playable,playable,2024-08-11 21:26:59.000 +"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",,crash;status-menus,menus,2020-10-04 06:12:08.000 +"Beat Cop",,status-playable,playable,2021-01-06 19:26:48.000 +"Beat Me!",01002D20129FC000,status-playable;online-broken,playable,2022-10-16 21:59:26.000 +"Beautiful Desolation",01006B0014590000,gpu;status-ingame;nvdec,ingame,2022-10-26 10:34:38.000 +"Bee Simulator",,UE4;crash;status-boots,boots,2020-07-15 12:13:13.000 +"BeeFense BeeMastered",010018F007786000,status-playable,playable,2022-11-17 15:38:12.000 +"Behold the Kickmen",,status-playable,playable,2020-06-27 12:49:45.000 +"Beholder",,status-playable,playable,2020-10-16 12:48:58.000 +"Ben 10",01006E1004404000,nvdec;status-playable,playable,2021-02-26 14:08:35.000 +"Ben 10: Power Trip",01009CD00E3AA000,status-playable;nvdec,playable,2022-10-09 10:52:12.000 +"Bendy and the Ink Machine",010074500BBC4000,status-playable,playable,2023-05-06 20:35:39.000 +"Bertram Fiddle Episode 2: A Bleaker Predicklement",010021F00C1C0000,nvdec;status-playable,playable,2021-02-22 14:56:37.000 +"Beyblade Burst Battle Zero",010068600AD16000,services;status-menus;crash;Needs Update,menus,2022-11-20 15:48:32.000 +"Beyond Enemy Lines: Covert Operations",010056500CAD8000,status-playable;UE4,playable,2022-10-01 13:11:50.000 +"Beyond Enemy Lines: Essentials",0100B8F00DACA000,status-playable;nvdec;UE4,playable,2022-09-26 19:48:16.000 +"Bibi & Tina - Adventures with Horses",,nvdec;slow;status-playable,playable,2021-01-13 08:58:09.000 +"Bibi & Tina at the horse farm",010062400E69C000,status-playable,playable,2021-04-06 16:31:39.000 +"Bibi Blocksberg - Big Broom Race 3",,status-playable,playable,2021-01-11 19:07:16.000 +"Big Buck Hunter Arcade",,nvdec;status-playable,playable,2021-01-12 20:31:39.000 +"Big Crown: Showdown",010088100C35E000,status-menus;nvdec;online;ldn-untested,menus,2022-07-17 18:25:32.000 +"Big Dipper",0100A42011B28000,status-playable,playable,2021-06-14 15:08:19.000 +"Big Drunk Satanic Massacre",01002FA00DE72000,status-playable,playable,2021-03-04 21:28:22.000 +"Big Pharma",,status-playable,playable,2020-07-14 15:27:30.000 +"BIG-Bobby-Car - The Big Race",,slow;status-playable,playable,2020-12-10 14:25:06.000 +"Billion Road",010057700FF7C000,status-playable,playable,2022-11-19 15:57:43.000 +"BINGO for Nintendo Switch",,status-playable,playable,2020-07-23 16:17:36.000 +"Biomutant",01004BA017CD6000,status-ingame;crash,ingame,2024-05-16 15:46:36.000 +"BioShock 2 Remastered",01002620102C6000,services;status-nothing,nothing,2022-10-29 14:39:22.000 +"BioShock Infinite: The Complete Edition",0100D560102C8000,services-horizon;status-nothing;crash,nothing,2024-08-11 21:35:01.000 +"BioShock Remastered",0100AD10102B2000,services-horizon;status-boots;crash;Needs Update,boots,2024-06-06 01:08:52.000 +"Biped",010053B0117F8000,status-playable;nvdec,playable,2022-10-01 13:32:58.000 +"Bird Game +",01001B700B278000,status-playable;online,playable,2022-07-17 18:41:57.000 +"Birds and Blocks Demo",0100B6B012FF4000,services;status-boots;demo,boots,2022-04-10 04:53:03.000 +"BIT.TRIP RUNNER",0100E62012D3C000,status-playable,playable,2022-10-17 14:23:24.000 +"BIT.TRIP VOID",01000AD012D3A000,status-playable,playable,2022-10-17 14:31:23.000 +"Bite the Bullet",,status-playable,playable,2020-10-14 23:10:11.000 +"Bitmaster",010026E0141C8000,status-playable,playable,2022-12-13 14:05:51.000 +"Biz Builder Delux",,slow;status-playable,playable,2020-12-15 21:36:25.000 +"Black Book",0100DD1014AB8000,status-playable;nvdec,playable,2022-12-13 16:38:53.000 +"Black Future '88",010049000B69E000,status-playable;nvdec,playable,2022-09-13 11:24:37.000 +"Black Hole Demo",01004BE00A682000,status-playable,playable,2021-02-12 23:02:17.000 +"Black Legend",0100C3200E7E6000,gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48.000 +"Blackjack Hands",,status-playable,playable,2020-11-30 14:04:51.000 +"Blackmoor2",0100A0A00E660000,status-playable;online-broken,playable,2022-09-26 20:26:34.000 +"Blacksad: Under the Skin",010032000EA2C000,status-playable,playable,2022-09-13 11:38:04.000 +"Blacksea Odyssey",01006B400C178000,status-playable;nvdec,playable,2022-10-16 22:14:34.000 +"Blacksmith of the Sand Kingdom",010068E013450000,status-playable,playable,2022-10-16 22:37:44.000 +"BLADE ARCUS Rebellion From Shining",0100C4400CB7C000,status-playable,playable,2022-07-17 18:52:28.000 +"Blade Assault",0100EA1018A2E000,audio;status-nothing,nothing,2024-04-29 14:32:50.000 +"Blade II The Return of Evil",01009CC00E224000,audio;status-ingame;crash;UE4,ingame,2021-11-14 02:49:59.000 +"Blade Strangers",01005950022EC000,status-playable;nvdec,playable,2022-07-17 19:02:43.000 +"Bladed Fury",0100DF0011A6A000,status-playable,playable,2022-10-26 11:36:26.000 +"Blades of Time",0100CFA00CC74000,deadlock;status-boots;online,boots,2022-07-17 19:19:58.000 +"Blair Witch",01006CC01182C000,status-playable;nvdec;UE4,playable,2022-10-01 14:06:16.000 +"Blanc",010039501405E000,gpu;slow;status-ingame,ingame,2023-02-22 14:00:13.000 +"Blasphemous",0100698009C6E000,nvdec;status-playable,playable,2021-03-01 12:15:31.000 +"Blasphemous Demo",0100302010338000,status-playable,playable,2021-02-12 23:49:56.000 +"Blaster Master Zero",0100225000FEE000,32-bit;status-playable,playable,2021-03-05 13:22:33.000 +"Blaster Master Zero 2",01005AA00D676000,status-playable,playable,2021-04-08 15:22:59.000 +"Blaster Master Zero DEMO",010025B002E92000,status-playable,playable,2021-02-12 23:59:06.000 +"BLAZBLUE CENTRALFICTION Special Edition",,nvdec;status-playable,playable,2020-12-15 23:50:04.000 +"BlazBlue: Cross Tag Battle",,nvdec;online;status-playable,playable,2021-01-05 20:29:37.000 +"Blazing Beaks",,status-playable,playable,2020-06-04 20:37:06.000 +"Blazing Chrome",,status-playable,playable,2020-11-16 04:56:54.000 +"Bleep Bloop DEMO",010091700EA2A000,nvdec;status-playable,playable,2021-02-13 00:20:53.000 +"Blind Men",010089D011310000,audout;status-playable,playable,2021-02-20 14:15:38.000 +"Blizzard Arcade Collection",0100743013D56000,status-playable;nvdec,playable,2022-08-03 19:37:26.000 +"BlobCat",0100F3500A20C000,status-playable,playable,2021-04-23 17:09:30.000 +"Block-a-Pix Deluxe Demo",0100E1C00DB6C000,status-playable,playable,2021-02-13 00:37:39.000 +"Bloo Kid",0100C6A01AD56000,status-playable,playable,2024-05-01 17:18:04.000 +"Bloo Kid 2",010055900FADA000,status-playable,playable,2024-05-01 17:16:57.000 +"Blood & Guts Bundle",,status-playable,playable,2020-06-27 12:57:35.000 +"Blood Waves",01007E700D17E000,gpu;status-ingame,ingame,2022-07-18 13:04:46.000 +"Blood will be Spilled",,nvdec;status-playable,playable,2020-12-17 03:02:03.000 +"Bloodstained: Curse of the Moon",,status-playable,playable,2020-09-04 10:42:17.000 +"Bloodstained: Curse of the Moon 2",,status-playable,playable,2020-09-04 10:56:27.000 +"Bloodstained: Ritual of the Night",010025A00DF2A000,status-playable;nvdec;UE4,playable,2022-07-18 14:27:35.000 +"Bloody Bunny : The Game",0100E510143EC000,status-playable;nvdec;UE4,playable,2022-10-22 13:18:55.000 +"Bloons TD 5",0100B8400A1C6000,Needs Update;audio;gpu;services;status-boots,boots,2021-04-18 23:02:46.000 +"Blossom Tales",0100C1000706C000,status-playable,playable,2022-07-18 16:43:07.000 +"Blossom Tales Demo",01000EB01023E000,status-playable,playable,2021-02-13 14:22:53.000 +"Blue Fire",010073B010F6E000,status-playable;UE4,playable,2022-10-22 14:46:11.000 +"Body of Evidence",0100721013510000,status-playable,playable,2021-04-25 22:22:11.000 +"Bohemian Killing",0100AD1010CCE000,status-playable;vulkan-backend-bug,playable,2022-09-26 22:41:37.000 +"Boku to Nurse no Kenshuu Nisshi",010093700ECEC000,status-playable,playable,2022-11-21 20:38:34.000 +"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",01001D900D9AC000,slow;status-ingame;crash;Needs Update,ingame,2022-04-24 22:46:04.000 +"Bomb Rush Cyberfunk",0100317014B7C000,status-playable,playable,2023-09-28 19:51:57.000 +"Bomber Crew",01007900080B6000,status-playable,playable,2021-06-03 14:21:28.000 +"Bomber Fox",0100A1F012948000,nvdec;status-playable,playable,2021-04-19 17:58:13.000 +"Bombslinger",010087300445A000,services;status-menus,menus,2022-07-19 12:53:15.000 +"Book of Demons",01007A200F452000,status-playable,playable,2022-09-29 12:03:43.000 +"Bookbound Brigade",,status-playable,playable,2020-10-09 14:30:29.000 +"Boom Blaster",,status-playable,playable,2021-03-24 10:55:56.000 +"Boomerang Fu",010081A00EE62000,status-playable,playable,2024-07-28 01:12:41.000 +"Boomerang Fu Demo Version",010069F0135C4000,demo;status-playable,playable,2021-02-13 14:38:13.000 +"Borderlands 2: Game of the Year Edition",010096F00FF22000,status-playable,playable,2022-04-22 18:35:07.000 +"Borderlands 3",01009970122E4000,gpu;status-ingame,ingame,2024-07-15 04:38:14.000 +"Borderlands: Game of the Year Edition",010064800F66A000,slow;status-ingame;online-broken;ldn-untested,ingame,2023-07-23 21:10:36.000 +"Borderlands: The Pre-Sequel Ultimate Edition",010007400FF24000,nvdec;status-playable,playable,2021-06-09 20:17:10.000 +"Boreal Blade",01008E500AFF6000,gpu;ldn-untested;online;status-ingame,ingame,2021-06-11 15:37:14.000 +"Boris The Rocket",010092C013FB8000,status-playable,playable,2022-10-26 13:23:09.000 +"Bossgard",010076F00EBE4000,status-playable;online-broken,playable,2022-10-04 14:21:13.000 +"Bot Vice Demo",010069B00EAC8000,crash;demo;status-ingame,ingame,2021-02-13 14:52:42.000 +"Bouncy Bob 2",,status-playable,playable,2020-07-14 16:51:53.000 +"Bounty Battle",0100E1200DC1A000,status-playable;nvdec,playable,2022-10-04 14:40:51.000 +"Bow to Blood: Last Captain Standing",,slow;status-playable,playable,2020-10-23 10:51:21.000 +"BOX Align",,crash;services;status-nothing,nothing,2020-04-03 17:26:56.000 +"BOXBOY! + BOXGIRL!",,status-playable,playable,2020-11-08 01:11:54.000 +"BOXBOY! + BOXGIRL! Demo",0100B7200E02E000,demo;status-playable,playable,2021-02-13 14:59:08.000 +"BQM BlockQuest Maker",,online;status-playable,playable,2020-07-31 20:56:50.000 +"Bramble The Mountain King",0100E87017D0E000,services-horizon;status-playable,playable,2024-03-06 09:32:17.000 +"Brave Dungeon + Dark Witch's Story: COMBAT",,status-playable,playable,2021-01-12 21:06:34.000 +"Bravely Default II",01006DC010326000,gpu;status-ingame;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26.000 +"Bravely Default II Demo",0100B6801137E000,gpu;status-ingame;crash;UE4;demo,ingame,2022-09-27 05:39:47.000 +"BraveMatch",010081501371E000,status-playable;UE4,playable,2022-10-26 13:32:15.000 +"Bravery and Greed",0100F60017D4E000,gpu;deadlock;status-boots,boots,2022-12-04 02:23:47.000 +"Brawl",,nvdec;slow;status-playable,playable,2020-06-04 14:23:18.000 +"Brawl Chess",010068F00F444000,status-playable;nvdec,playable,2022-10-26 13:59:17.000 +"Brawlhalla",0100C6800B934000,online;opengl;status-playable,playable,2021-06-03 18:26:09.000 +"Brawlout",010060200A4BE000,ldn-untested;online;status-playable,playable,2021-06-04 17:35:35.000 +"Brawlout Demo",0100C1B00E1CA000,demo;status-playable,playable,2021-02-13 22:46:53.000 +"Breakout: Recharged",010022C016DC8000,slow;status-ingame,ingame,2022-11-06 15:32:57.000 +"Breathedge",01000AA013A5E000,UE4;nvdec;status-playable,playable,2021-05-06 15:44:28.000 +"Breathing Fear",,status-playable,playable,2020-07-14 15:12:29.000 +"Brick Breaker",,crash;status-ingame,ingame,2020-12-15 17:03:59.000 +"Brick Breaker",,nvdec;online;status-playable,playable,2020-12-15 18:26:23.000 +"Bridge 3",,status-playable,playable,2020-10-08 20:47:24.000 +"Bridge Constructor: The Walking Dead",,gpu;slow;status-ingame,ingame,2020-12-11 17:31:32.000 +"Brigandine: The Legend of Runersia",010011000EA7A000,status-playable,playable,2021-06-20 06:52:25.000 +"Brigandine: The Legend of Runersia Demo",0100703011258000,status-playable,playable,2021-02-14 14:44:10.000 +"Bring Them Home",01000BF00BE40000,UE4;status-playable,playable,2021-04-12 14:14:43.000 +"Broforce",010060A00B53C000,ldn-untested;online;status-playable,playable,2021-05-28 12:23:38.000 +"Broken Age",0100EDD0068A6000,status-playable,playable,2021-06-04 17:40:32.000 +"Broken Lines",,status-playable,playable,2020-10-16 00:01:37.000 +"Broken Sword 5 - the Serpent's Curse",01001E60085E6000,status-playable,playable,2021-06-04 17:28:59.000 +"Brotherhood United Demo",0100F19011226000,demo;status-playable,playable,2021-02-14 21:10:57.000 +"Brothers: A Tale of Two Sons",01000D500D08A000,status-playable;nvdec;UE4,playable,2022-07-19 14:02:22.000 +"Brunch Club",,status-playable,playable,2020-06-24 13:54:07.000 +"Bubble Bobble 4 Friends",010010900F7B4000,nvdec;status-playable,playable,2021-06-04 15:27:55.000 +"Bubsy: Paws on Fire!",0100DBE00C554000,slow;status-ingame,ingame,2023-08-24 02:44:51.000 +"Bucket Knight",,crash;status-ingame,ingame,2020-09-04 13:11:24.000 +"Bucket Knight demo",0100F1B010A90000,demo;status-playable,playable,2021-02-14 21:23:09.000 +"Bud Spencer & Terence Hill - Slaps and Beans",01000D200AC0C000,status-playable,playable,2022-07-17 12:37:00.000 +"Bug Fables",,status-playable,playable,2020-06-09 11:27:00.000 +"BULLETSTORM: DUKE OF SWITCH EDITION",01003DD00D658000,status-playable;nvdec,playable,2022-03-03 08:30:24.000 +"BurgerTime Party!",,slow;status-playable,playable,2020-11-21 14:11:53.000 +"BurgerTime Party! Demo",01005780106E8000,demo;status-playable,playable,2021-02-14 21:34:16.000 +"Buried Stars",,status-playable,playable,2020-09-07 14:11:58.000 +"Burnout Paradise Remastered",0100DBF01000A000,nvdec;online;status-playable,playable,2021-06-13 02:54:46.000 +"Bury me, my Love",,status-playable,playable,2020-11-07 12:47:37.000 +"Bus Driver Simulator",010030D012FF6000,status-playable,playable,2022-10-17 13:55:27.000 +"BUSTAFELLOWS",,nvdec;status-playable,playable,2020-10-17 20:04:41.000 +"BUTCHER",,status-playable,playable,2021-01-11 18:50:17.000 +"Cabela's: The Hunt - Championship Edition",0100E24004510000,status-menus;32-bit,menus,2022-07-21 20:21:25.000 +"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda",01000B900D8B0000,slow;status-playable;nvdec,playable,2024-04-01 22:43:40.000 +"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600",,demo;gpu;nvdec;status-ingame,ingame,2021-02-14 21:48:15.000 +"Café Enchanté",,status-playable,playable,2020-11-13 14:54:25.000 +"Cafeteria Nipponica Demo",010060400D21C000,demo;status-playable,playable,2021-02-14 22:11:35.000 +"Cake Bash Demo",0100699012F82000,crash;demo;status-ingame,ingame,2021-02-14 22:21:15.000 +"Caladrius Blaze",01004FD00D66A000,deadlock;status-nothing;nvdec,nothing,2022-12-07 16:44:37.000 +"Calculation Castle: Greco's Ghostly Challenge ""Addition",,32-bit;status-playable,playable,2020-11-01 23:40:11.000 +"Calculation Castle: Greco's Ghostly Challenge ""Division",,32-bit;status-playable,playable,2020-11-01 23:54:55.000 +"Calculation Castle: Greco's Ghostly Challenge ""Multiplication",,32-bit;status-playable,playable,2020-11-02 00:04:33.000 +"Calculation Castle: Greco's Ghostly Challenge ""Subtraction",,32-bit;status-playable,playable,2020-11-01 23:47:42.000 +"Calculator",010004701504A000,status-playable,playable,2021-06-11 13:27:20.000 +"Calico",010013A00E750000,status-playable,playable,2022-10-17 14:44:28.000 +"Call of Cthulhu",010046000EE40000,status-playable;nvdec;UE4,playable,2022-12-18 03:08:30.000 +"Call of Juarez: Gunslinger",0100B4700BFC6000,gpu;status-ingame;nvdec,ingame,2022-09-17 16:49:46.000 +"Can't Drive This",0100593008BDC000,status-playable,playable,2022-10-22 14:55:17.000 +"Candle - The Power of the Flame",,nvdec;status-playable,playable,2020-05-26 12:10:20.000 +"Capcom Arcade Stadium",01001E0013208000,status-playable,playable,2021-03-17 05:45:14.000 +"Capcom Beat 'Em Up Bundle",,status-playable,playable,2020-03-23 18:31:24.000 +"CAPCOM BELT ACTION COLLECTION",0100F6400A77E000,status-playable;online;ldn-untested,playable,2022-07-21 20:51:23.000 +"Captain Toad: Treasure Tracker",01009BF0072D4000,32-bit;status-playable,playable,2024-04-25 00:50:16.000 +"Captain Toad: Treasure Tracker Demo",01002C400B6B6000,32-bit;demo;status-playable,playable,2021-02-14 22:36:09.000 +"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS",0100EAE010560000,status-playable;online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50.000 +"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",01002320137CC000,slow;status-playable,playable,2021-02-14 22:45:35.000 +"Car Mechanic Manager",,status-playable,playable,2020-07-23 18:50:17.000 +"Car Quest",01007BD00AE70000,deadlock;status-menus,menus,2021-11-18 08:59:18.000 +"Caretaker",0100DA70115E6000,status-playable,playable,2022-10-04 14:52:24.000 +"Cargo Crew Driver",0100DD6014870000,status-playable,playable,2021-04-19 12:54:22.000 +"Carnival Games",010088C0092FE000,status-playable;nvdec,playable,2022-07-21 21:01:22.000 +"Carnivores: Dinosaur Hunt",,status-playable,playable,2022-12-14 18:46:06.000 +"CARRION",,crash;status-nothing,nothing,2020-08-13 17:15:12.000 +"Cars 3 Driven to Win",01008D1001512000,gpu;status-ingame,ingame,2022-07-21 21:21:05.000 +"Carto",0100810012A1A000,status-playable,playable,2022-09-04 15:37:06.000 +"Cartoon Network Adventure Time: Pirates of the Enchiridion",0100C4E004406000,status-playable;nvdec,playable,2022-07-21 21:49:01.000 +"Cartoon Network Battle Crashers",0100085003A2A000,status-playable,playable,2022-07-21 21:55:40.000 +"CASE 2: Animatronics Survival",0100C4C0132F8000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03.000 +"Cassette Beasts",010066F01A0E0000,status-playable,playable,2024-07-22 20:38:43.000 +"Castle Crashers Remastered",010001300D14A000,gpu;status-boots,boots,2024-08-10 09:21:20.000 +"Castle Crashers Remastered Demo",0100F6D01060E000,gpu;status-boots;demo,boots,2022-04-10 10:57:10.000 +"Castle of Heart",01003C100445C000,status-playable;nvdec,playable,2022-07-21 23:10:45.000 +"Castle of No Escape 2",0100F5500FA0E000,status-playable,playable,2022-09-13 13:51:42.000 +"Castle Pals",0100DA2011F18000,status-playable,playable,2021-03-04 21:00:33.000 +"Castlestorm",010097C00AB66000,status-playable;nvdec,playable,2022-07-21 22:49:14.000 +"CastleStorm 2",,UE4;crash;nvdec;status-boots,boots,2020-10-25 11:22:44.000 +"Castlevania Anniversary Collection",,audio;status-playable,playable,2020-05-23 11:40:29.000 +"Cat Girl Without Salad: Amuse-Bouche",010076000C86E000,status-playable,playable,2022-09-03 13:01:47.000 +"Cat Quest",,status-playable,playable,2020-04-02 23:09:32.000 +"Cat Quest II",,status-playable,playable,2020-07-06 23:52:09.000 +"Cat Quest II Demo",0100E86010220000,demo;status-playable,playable,2021-02-15 14:11:57.000 +"Catherine Full Body",0100BF00112C0000,status-playable;nvdec,playable,2023-04-02 11:00:37.000 +"Catherine Full Body for Nintendo Switch (JP)",0100BAE0077E4000,Needs Update;gpu;status-ingame,ingame,2021-02-21 18:06:11.000 +"Cattails",010004400B28A000,status-playable,playable,2021-06-03 14:36:57.000 +"Cave Story+",,status-playable,playable,2020-05-22 09:57:25.000 +"Caveblazers",01001A100C0E8000,slow;status-ingame,ingame,2021-06-09 17:57:28.000 +"Caveman Warriors",,status-playable,playable,2020-05-22 11:44:20.000 +"Caveman Warriors Demo",,demo;status-playable,playable,2021-02-15 14:44:08.000 +"Celeste",,status-playable,playable,2020-06-17 10:14:40.000 +"Cendrillon palikA",01006B000A666000,gpu;status-ingame;nvdec,ingame,2022-07-21 22:52:24.000 +"CHAOS CODE -NEW SIGN OF CATASTROPHE-",01007600115CE000,status-boots;crash;nvdec,boots,2022-04-04 12:24:21.000 +"CHAOS;HEAD NOAH",0100957016B90000,status-playable,playable,2022-06-02 22:57:19.000 +"Charge Kid",0100F52013A66000,gpu;status-boots;audout,boots,2024-02-11 01:17:47.000 +"Chasm",,status-playable,playable,2020-10-23 11:03:43.000 +"Chasm: The Rift",010034301A556000,gpu;status-ingame,ingame,2024-04-29 19:02:48.000 +"Chess Ultra",0100A5900472E000,status-playable;UE4,playable,2023-08-30 23:06:31.000 +"Chicken Assassin: Reloaded",0100E3C00A118000,status-playable,playable,2021-02-20 13:29:01.000 +"Chicken Police - Paint it RED!",,nvdec;status-playable,playable,2020-12-10 15:10:11.000 +"Chicken Range",0100F6C00A016000,status-playable,playable,2021-04-23 12:14:23.000 +"Chicken Rider",,status-playable,playable,2020-05-22 11:31:17.000 +"Chickens Madness DEMO",0100CAC011C3A000,UE4;demo;gpu;nvdec;status-ingame,ingame,2021-02-15 15:02:10.000 +"Child of Light",,nvdec;status-playable,playable,2020-12-16 10:23:10.000 +"Children of Morta",01002DE00C250000,gpu;status-ingame;nvdec,ingame,2022-09-13 17:48:47.000 +"Children of Zodiarcs",,status-playable,playable,2020-10-04 14:23:33.000 +"Chinese Parents",010046F012A04000,status-playable,playable,2021-04-08 12:56:41.000 +"Chocobo GP",01006A30124CA000,gpu;status-ingame;crash,ingame,2022-06-04 14:52:18.000 +"Chocobo's Mystery Dungeon Every Buddy!",,slow;status-playable,playable,2020-05-26 13:53:13.000 +"Choices That Matter: And The Sun Went Out",,status-playable,playable,2020-12-17 15:44:08.000 +"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",,gpu;nvdec;status-ingame,ingame,2020-09-28 17:58:04.000 +"ChromaGun",,status-playable,playable,2020-05-26 12:56:42.000 +"Chronos",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-11 22:16:35.000 +"Circle of Sumo",,status-playable,playable,2020-05-22 12:45:21.000 +"Circuits",01008FA00D686000,status-playable,playable,2022-09-19 11:52:50.000 +"Cities: Skylines - Nintendo Switch Edition",,status-playable,playable,2020-12-16 10:34:57.000 +"Citizens of Space",0100E4200D84E000,gpu;status-boots,boots,2023-10-22 06:45:44.000 +"Citizens Unite!: Earth x Space",0100D9C012900000,gpu;status-ingame,ingame,2023-10-22 06:44:19.000 +"City Bus Driving Simulator",01005E501284E000,status-playable,playable,2021-06-15 21:25:59.000 +"CLANNAD",0100A3A00CC7E000,status-playable,playable,2021-06-03 17:01:02.000 +"CLANNAD Side Stories - 01007B01372C000",,status-playable,playable,2022-10-26 15:03:04.000 +"Clash Force",01005ED0107F4000,status-playable,playable,2022-10-01 23:45:48.000 +"Claybook",010009300AA6C000,slow;status-playable;nvdec;online;UE4,playable,2022-07-22 11:11:34.000 +"Clea",,crash;status-ingame,ingame,2020-12-15 16:22:56.000 +"Clea 2",010045E0142A4000,status-playable,playable,2021-04-18 14:25:18.000 +"Clock Zero ~Shuuen no Ichibyou~ Devote",01008C100C572000,status-playable;nvdec,playable,2022-12-04 22:19:14.000 +"Clocker",0100DF9013AD4000,status-playable,playable,2021-04-05 15:05:13.000 +"Close to the Sun",0100B7200DAC6000,status-boots;crash;nvdec;UE4,boots,2021-11-04 09:19:41.000 +"Clubhouse Games: 51 Worldwide Classics",010047700D540000,status-playable;ldn-works,playable,2024-05-21 16:12:57.000 +"Clue",,crash;online;status-menus,menus,2020-11-10 09:23:48.000 +"ClusterPuck 99",,status-playable,playable,2021-01-06 00:28:12.000 +"Clustertruck",010096900A4D2000,slow;status-ingame,ingame,2021-02-19 21:07:09.000 +"Cobra Kai The Karate Kid Saga Continues",01005790110F0000,status-playable,playable,2021-06-17 15:59:13.000 +"COCOON",01002E700C366000,gpu;status-ingame,ingame,2024-03-06 11:33:08.000 +"Code of Princess EX",010034E005C9C000,nvdec;online;status-playable,playable,2021-06-03 10:50:13.000 +"CODE SHIFTER",,status-playable,playable,2020-08-09 15:20:55.000 +"Code: Realize ~Future Blessings~",010002400F408000,status-playable;nvdec,playable,2023-03-31 16:57:47.000 +"Coffee Crisis",0100CF800C810000,status-playable,playable,2021-02-20 12:34:52.000 +"Coffee Talk",,status-playable,playable,2020-08-10 09:48:44.000 +"Coffin Dodgers",0100178009648000,status-playable,playable,2021-02-20 14:57:41.000 +"Cold Silence",010035B01706E000,cpu;status-nothing;crash,nothing,2024-07-11 17:06:14.000 +"Collar X Malice",010083E00F40E000,status-playable;nvdec,playable,2022-10-02 11:51:56.000 +"Collar X Malice -Unlimited-",0100E3B00F412000,status-playable;nvdec,playable,2022-10-04 15:30:40.000 +"Collection of Mana",,status-playable,playable,2020-10-19 19:29:45.000 +"COLLECTION of SaGA FINAL FANTASY LEGEND",,status-playable,playable,2020-12-30 19:11:16.000 +"Collidalot",010030800BC36000,status-playable;nvdec,playable,2022-09-13 14:09:27.000 +"Color Zen",,status-playable,playable,2020-05-22 10:56:17.000 +"Colorgrid",,status-playable,playable,2020-10-04 01:50:52.000 +"Coloring Book",0100A7000BD28000,status-playable,playable,2022-07-22 11:17:05.000 +"Colors Live",010020500BD86000,gpu;services;status-boots;crash,boots,2023-02-26 02:51:07.000 +"Colossus Down",0100E2F0128B4000,status-playable,playable,2021-02-04 20:49:50.000 +"Commander Keen in Keen Dreams",0100C4D00D16A000,gpu;status-ingame,ingame,2022-08-04 20:34:20.000 +"Commander Keen in Keen Dreams: Definitive Edition",0100E400129EC000,status-playable,playable,2021-05-11 19:33:54.000 +"Commandos 2 HD Remaster",010065A01158E000,gpu;status-ingame;nvdec,ingame,2022-08-10 21:52:27.000 +"CONARIUM",010015801308E000,UE4;nvdec;status-playable,playable,2021-04-26 17:57:53.000 +"Concept Destruction",0100971011224000,status-playable,playable,2022-09-29 12:28:56.000 +"Conduct TOGETHER!",010043700C9B0000,nvdec;status-playable,playable,2021-02-20 12:59:00.000 +"Conga Master Party!",,status-playable,playable,2020-05-22 13:22:24.000 +"Connection Haunted",,slow;status-playable,playable,2020-12-10 18:57:14.000 +"Construction Simulator 3 - Console Edition",0100A5600FAC0000,status-playable,playable,2023-02-06 09:31:23.000 +"Constructor Plus",,status-playable,playable,2020-05-26 12:37:40.000 +"Contra Anniversary Collection",0100DCA00DA7E000,status-playable,playable,2022-07-22 11:30:12.000 +"CONTRA: ROGUE CORPS",,crash;nvdec;regression;status-menus,menus,2021-01-07 13:23:35.000 +"CONTRA: ROGUE CORPS Demo",0100B8200ECA6000,gpu;status-ingame,ingame,2022-09-04 16:46:52.000 +"Contraptions",01007D701298A000,status-playable,playable,2021-02-08 18:40:50.000 +"Control Ultimate Edition - Cloud Version",0100041013360000,Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:34:06.000 +"Convoy",,status-playable,playable,2020-10-15 14:43:50.000 +"Cook, Serve, Delicious! 3?!",0100B82010B6C000,status-playable,playable,2022-10-09 12:09:34.000 +"Cooking Mama: Cookstar",010060700EFBA000,status-menus;crash;loader-allocator,menus,2021-11-20 03:19:35.000 +"Cooking Simulator",01001E400FD58000,status-playable,playable,2021-04-18 13:25:23.000 +"Cooking Tycoons 2: 3 in 1 Bundle",,status-playable,playable,2020-11-16 22:19:33.000 +"Cooking Tycoons: 3 in 1 Bundle",,status-playable,playable,2020-11-16 22:44:26.000 +"Copperbell",,status-playable,playable,2020-10-04 15:54:36.000 +"Corpse Party: Blood Drive",010016400B1FE000,nvdec;status-playable,playable,2021-03-01 12:44:23.000 +"Cosmic Fantasy Collection",0100CCB01B1A0000,status-ingame,ingame,2024-05-21 17:56:37.000 +"Cosmic Star Heroine",010067C00A776000,status-playable,playable,2021-02-20 14:30:47.000 +"COTTOn Reboot! [ コットン リブート! ]",01003DD00F94A000,status-playable,playable,2022-05-24 16:29:24.000 +"Cotton/Guardian Saturn Tribute Games",,gpu;status-boots,boots,2022-11-27 21:00:51.000 +"Couch Co-Op Bundle Vol. 2",01000E301107A000,status-playable;nvdec,playable,2022-10-02 12:04:21.000 +"Country Tales",0100C1E012A42000,status-playable,playable,2021-06-17 16:45:39.000 +"Cozy Grove",01003370136EA000,gpu;status-ingame,ingame,2023-07-30 22:22:19.000 +"Crash Bandicoot 4: It's About Time",010073401175E000,status-playable;nvdec;UE4,playable,2024-03-17 07:13:45.000 +"Crash Bandicoot N. Sane Trilogy",0100D1B006744000,status-playable,playable,2024-02-11 11:38:14.000 +"Crash Drive 2",,online;status-playable,playable,2020-12-17 02:45:46.000 +"Crash Dummy",,nvdec;status-playable,playable,2020-05-23 11:12:43.000 +"Crash Team Racing Nitro-Fueled",0100F9F00C696000,gpu;status-ingame;nvdec;online-broken,ingame,2023-06-25 02:40:17.000 +"Crashbots",0100BF200CD74000,status-playable,playable,2022-07-22 13:50:52.000 +"Crashlands",010027100BD16000,status-playable,playable,2021-05-27 20:30:06.000 +"Crawl",,status-playable,playable,2020-05-22 10:16:05.000 +"Crayola Scoot",0100C66007E96000,status-playable;nvdec,playable,2022-07-22 14:01:55.000 +"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",01005BA00F486000,status-playable,playable,2021-07-21 10:41:33.000 +"Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!",,services;status-menus,menus,2020-03-20 14:00:57.000 +"Crazy Strike Bowling EX",,UE4;gpu;nvdec;status-ingame,ingame,2020-08-07 18:15:59.000 +"Crazy Zen Mini Golf",,status-playable,playable,2020-08-05 14:00:00.000 +"Creaks",,status-playable,playable,2020-08-15 12:20:52.000 +"Creature in the Well",,UE4;gpu;status-ingame,ingame,2020-11-16 12:52:40.000 +"Creepy Tale",,status-playable,playable,2020-12-15 21:58:03.000 +"Cresteaju",,gpu;status-ingame,ingame,2021-03-24 10:46:06.000 +"Cricket 19",010022D00D4F0000,gpu;status-ingame,ingame,2021-06-14 14:56:07.000 +"Cricket 22",0100387017100000,status-boots;crash,boots,2023-10-18 08:01:57.000 +"Crimsonland",01005640080B0000,status-playable,playable,2021-05-27 20:50:54.000 +"Cris Tales",0100B0400EBC4000,crash;status-ingame,ingame,2021-07-29 15:10:53.000 +"CRISIS CORE –FINAL FANTASY VII– REUNION",01004BC0166CC000,status-playable,playable,2022-12-19 15:53:59.000 +"Croc's World",,status-playable,playable,2020-05-22 11:21:09.000 +"Croc's World 2",,status-playable,playable,2020-12-16 20:01:40.000 +"Croc's World 3",,status-playable,playable,2020-12-30 18:53:26.000 +"Croixleur Sigma",01000F0007D92000,status-playable;online,playable,2022-07-22 14:26:54.000 +"CrossCode",01003D90058FC000,status-playable,playable,2024-02-17 10:23:19.000 +"Crossing Souls",0100B1E00AA56000,nvdec;status-playable,playable,2021-02-20 15:42:54.000 +"Crown Trick",0100059012BAE000,status-playable,playable,2021-06-16 19:36:29.000 +"Cruis'n Blast",0100B41013C82000,gpu;status-ingame,ingame,2023-07-30 10:33:47.000 +"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",01000CC01C108000,status-playable;demo,playable,2023-08-06 05:33:21.000 +"Crypt of the Necrodancer",0100CEA007D08000,status-playable;nvdec,playable,2022-11-01 09:52:06.000 +"Crysis 2 Remastered",0100582010AE0000,deadlock;status-menus,menus,2023-09-21 10:46:17.000 +"Crysis 3 Remastered",0100CD3010AE2000,deadlock;status-menus,menus,2023-09-10 16:03:50.000 +"Crysis Remastered",0100E66010ADE000,status-menus;nvdec,menus,2024-08-13 05:23:24.000 +"Crystal Crisis",0100972008234000,nvdec;status-playable,playable,2021-02-20 13:52:44.000 +"Cthulhu Saves Christmas",,status-playable,playable,2020-12-14 00:58:55.000 +"Cube Creator X",010001600D1E8000,status-menus;crash,menus,2021-11-25 08:53:28.000 +"Cubers: Arena",010082E00F1CE000,status-playable;nvdec;UE4,playable,2022-10-04 16:05:40.000 +"Cubicity",010040D011D04000,status-playable,playable,2021-06-14 14:19:51.000 +"Cuphead",0100A5C00D162000,status-playable,playable,2022-02-01 22:45:55.000 +"Cupid Parasite",0100F7E00DFC8000,gpu;status-ingame,ingame,2023-08-21 05:52:36.000 +"Curious Cases",,status-playable,playable,2020-08-10 09:30:48.000 +"Curse of the Dead Gods",0100D4A0118EA000,status-playable,playable,2022-08-30 12:25:38.000 +"Curved Space",0100CE5014026000,status-playable,playable,2023-01-14 22:03:50.000 +"Cyber Protocol",,nvdec;status-playable,playable,2020-09-28 14:47:40.000 +"Cyber Shadow",0100C1F0141AA000,status-playable,playable,2022-07-17 05:37:41.000 +"Cybxus Heart",01006B9013672000,gpu;slow;status-ingame,ingame,2022-01-15 05:00:49.000 +"Cytus α",010063100B2C2000,nvdec;status-playable,playable,2021-02-20 13:40:46.000 +"DAEMON X MACHINA",0100B6400CA56000,UE4;audout;ldn-untested;nvdec;status-playable,playable,2021-06-09 19:22:29.000 +"Dairoku: Ayakashimori",010061300DF48000,status-nothing;Needs Update;loader-allocator,nothing,2021-11-30 05:09:38.000 +"Damsel",0100BD2009A1C000,status-playable,playable,2022-09-06 11:54:39.000 +"Dandara",,status-playable,playable,2020-05-26 12:42:33.000 +"Dandy Dungeon: Legend of Brave Yamada",,status-playable,playable,2021-01-06 09:48:47.000 +"Danger Mouse",01003ED0099B0000,status-boots;crash;online,boots,2022-07-22 15:49:45.000 +"Danger Scavenger -",,nvdec;status-playable,playable,2021-04-17 15:53:04.000 +"Danmaku Unlimited 3",,status-playable,playable,2020-11-15 00:48:35.000 +"Darius Cozmic Collection",,status-playable,playable,2021-02-19 20:59:06.000 +"Darius Cozmic Collection Special Edition",010059C00BED4000,status-playable,playable,2022-07-22 16:26:50.000 +"Dariusburst - Another Chronicle EX+",010015800F93C000,online;status-playable,playable,2021-04-05 14:21:43.000 +"Dark Arcana: The Carnival",01003D301357A000,gpu;slow;status-ingame,ingame,2022-02-19 08:52:28.000 +"Dark Devotion",010083A00BF6C000,status-playable;nvdec,playable,2022-08-09 09:41:18.000 +"Dark Quest 2",,status-playable,playable,2020-11-16 21:34:52.000 +"DARK SOULS™: REMASTERED",01004AB00A260000,gpu;status-ingame;nvdec;online-broken,ingame,2024-04-09 19:47:58.000 +"Dark Witch Music Episode: Rudymical",,status-playable,playable,2020-05-22 09:44:44.000 +"Darkest Dungeon",01008F1008DA6000,status-playable;nvdec,playable,2022-07-22 18:49:18.000 +"Darksiders Genesis",0100F2300D4BA000,status-playable;nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25.000 +"Darksiders II Deathinitive Edition",010071800BA98000,gpu;status-ingame;nvdec;online-broken,ingame,2024-06-26 00:37:25.000 +"Darksiders Warmastered Edition",0100E1400BA96000,status-playable;nvdec,playable,2023-03-02 18:08:09.000 +"Darkwood",,status-playable,playable,2021-01-08 21:24:06.000 +"DARQ Complete Edition",0100440012FFA000,audout;status-playable,playable,2021-04-07 15:26:21.000 +"Darts Up",0100BA500B660000,status-playable,playable,2021-04-14 17:22:22.000 +"Dawn of the Breakers",0100F0B0081DA000,status-menus;online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03.000 +"Day and Night",,status-playable,playable,2020-12-17 12:30:51.000 +"De Blob",,nvdec;status-playable,playable,2021-01-06 17:34:46.000 +"de Blob 2",,nvdec;status-playable,playable,2021-01-06 13:00:16.000 +"De Mambo",01008E900471E000,status-playable,playable,2021-04-10 12:39:40.000 +"Dead by Daylight",01004C400CF96000,status-boots;nvdec;online-broken;UE4,boots,2022-09-13 14:32:13.000 +"Dead Cells",0100646009FBE000,status-playable,playable,2021-09-22 22:18:49.000 +"Dead End Job",01004C500BD40000,status-playable;nvdec,playable,2022-09-19 12:48:44.000 +"DEAD OR ALIVE Xtreme 3 Scarlet",01009CC00C97C000,status-playable,playable,2022-07-23 17:05:06.000 +"DEAD OR SCHOOL",0100A5000F7AA000,status-playable;nvdec,playable,2022-09-06 12:04:09.000 +"Dead Z Meat",0100A24011F52000,UE4;services;status-ingame,ingame,2021-04-14 16:50:16.000 +"Deadly Days",,status-playable,playable,2020-11-27 13:38:55.000 +"Deadly Premonition 2",0100BAC011928000,status-playable,playable,2021-06-15 14:12:36.000 +"DEADLY PREMONITION Origins",0100EBE00F22E000,32-bit;status-playable;nvdec,playable,2024-03-25 12:47:46.000 +"Dear Magi - Mahou Shounen Gakka -",,status-playable,playable,2020-11-22 16:45:16.000 +"Death and Taxes",,status-playable,playable,2020-12-15 20:27:49.000 +"Death Come True",010012B011AB2000,nvdec;status-playable,playable,2021-06-10 22:30:49.000 +"Death Coming",0100F3B00CF32000,status-nothing;crash,nothing,2022-02-06 07:43:03.000 +"Death end re;Quest",0100AEC013DDA000,status-playable,playable,2023-07-09 12:19:54.000 +"Death Mark",,status-playable,playable,2020-12-13 10:56:25.000 +"Death Road to Canada",0100423009358000,gpu;audio;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:26.000 +"Death Squared",,status-playable,playable,2020-12-04 13:00:15.000 +"Death Tales",,status-playable,playable,2020-12-17 10:55:52.000 +"Death's Hangover",0100492011A8A000,gpu;status-boots,boots,2023-08-01 22:38:06.000 +"Deathsmiles I・II",01009120119B4000,status-playable,playable,2024-04-08 19:29:00.000 +"Debris Infinity",010034F00BFC8000,nvdec;online;status-playable,playable,2021-05-28 12:14:39.000 +"Decay of Logos",010027700FD2E000,status-playable;nvdec,playable,2022-09-13 14:42:13.000 +"Deedlit in Wonder Labyrinth",0100EF0015A9A000,deadlock;status-ingame;Needs Update;Incomplete,ingame,2022-01-19 10:00:59.000 +"Deemo",01002CC0062B8000,status-playable,playable,2022-07-24 11:34:33.000 +"DEEMO -Reborn-",01008B10132A2000,status-playable;nvdec;online-broken,playable,2022-10-17 15:18:11.000 +"Deep Diving Adventures",010026800FA88000,status-playable,playable,2022-09-22 16:43:37.000 +"Deep Ones",,services;status-nothing,nothing,2020-04-03 02:54:19.000 +"Deep Sky Derelicts Definitive Edition",0100C3E00D68E000,status-playable,playable,2022-09-27 11:21:08.000 +"Deep Space Rush",,status-playable,playable,2020-07-07 23:30:33.000 +"DeepOne",0100961011BE6000,services-horizon;status-nothing;Needs Update,nothing,2024-01-18 15:01:05.000 +"Defenders of Ekron - Definitive Edition",01008BB00F824000,status-playable,playable,2021-06-11 16:31:03.000 +"Defentron",0100CDE0136E6000,status-playable,playable,2022-10-17 15:47:56.000 +"Defunct",,status-playable,playable,2021-01-08 21:33:46.000 +"Degrees of Separation",,status-playable,playable,2021-01-10 13:40:04.000 +"Dei Gratia no Rashinban",010071C00CBA4000,crash;status-nothing,nothing,2021-07-13 02:25:32.000 +"Deleveled",,slow;status-playable,playable,2020-12-15 21:02:29.000 +"DELTARUNE Chapter 1",010023800D64A000,status-playable,playable,2023-01-22 04:47:44.000 +"Dementium: The Ward (Dementium Remastered)",010038B01D2CA000,status-boots;crash,boots,2024-09-02 08:28:14.000 +"Demetrios - The BIG Cynical Adventure",0100AB600ACB4000,status-playable,playable,2021-06-04 12:01:01.000 +"Demolish & Build",010099D00D1A4000,status-playable,playable,2021-06-13 15:27:26.000 +"Demon Pit",010084600F51C000,status-playable;nvdec,playable,2022-09-19 13:35:15.000 +"Demon's Crystals",0100A2B00BD88000,status-nothing;crash;regression,nothing,2022-12-07 16:33:17.000 +"Demon's Rise",,status-playable,playable,2020-07-29 12:26:27.000 +"Demon's Rise - Lords of Chaos",0100E29013818000,status-playable,playable,2021-04-06 16:20:06.000 +"Demon's Tier+",0100161011458000,status-playable,playable,2021-06-09 17:25:36.000 +"DEMON'S TILT",0100BE800E6D8000,status-playable,playable,2022-09-19 13:22:46.000 +"Demong Hunter",,status-playable,playable,2020-12-12 15:27:08.000 +"Densha de go!! Hashirou Yamanote Sen",0100BC501355A000,status-playable;nvdec;UE4,playable,2023-11-09 07:47:58.000 +"Depixtion",,status-playable,playable,2020-10-10 18:52:37.000 +"Deployment",01000BF00B6BC000,slow;status-playable;online-broken,playable,2022-10-17 16:23:59.000 +"Deponia",010023600C704000,nvdec;status-playable,playable,2021-01-26 17:17:19.000 +"DERU - The Art of Cooperation",,status-playable,playable,2021-01-07 16:59:59.000 +"Descenders",,gpu;status-ingame,ingame,2020-12-10 15:22:36.000 +"Desire remaster ver.",,crash;status-boots,boots,2021-01-17 02:34:37.000 +"DESTINY CONNECT",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 12:20:36.000 +"Destrobots",01008BB011ED6000,status-playable,playable,2021-03-06 14:37:05.000 +"Destroy All Humans!",01009E701356A000,gpu;status-ingame;nvdec;UE4,ingame,2023-01-14 22:23:53.000 +"Detective Dolittle",010030600E65A000,status-playable,playable,2021-03-02 14:03:59.000 +"Detective Gallo",01009C0009842000,status-playable;nvdec,playable,2022-07-24 11:51:04.000 +"Detective Jinguji Saburo Prism of Eyes",,status-playable,playable,2020-10-02 21:54:41.000 +"Detective Pikachu Returns",010007500F27C000,status-playable,playable,2023-10-07 10:24:59.000 +"Devil Engine",010031B00CF66000,status-playable,playable,2021-06-04 11:54:30.000 +"Devil Kingdom",01002F000E8F2000,status-playable,playable,2023-01-31 08:58:44.000 +"Devil May Cry",,nvdec;status-playable,playable,2021-01-04 19:43:08.000 +"Devil May Cry 2",01007CF00D5BA000,status-playable;nvdec,playable,2023-01-24 23:03:20.000 +"Devil May Cry 3 Special Edition",01007B600D5BC000,status-playable;nvdec,playable,2024-07-08 12:33:23.000 +"Devil Slayer - Raksasi",01003C900EFF6000,status-playable,playable,2022-10-26 19:42:32.000 +"Devious Dungeon",01009EA00A320000,status-playable,playable,2021-03-04 13:03:06.000 +"Dex",,nvdec;status-playable,playable,2020-08-12 16:48:12.000 +"Dexteritrip",,status-playable,playable,2021-01-06 12:51:12.000 +"Dezatopia",0100AFC00E06A000,online;status-playable,playable,2021-06-15 21:06:11.000 +"Diablo 2 Resurrected",0100726014352000,gpu;status-ingame;nvdec,ingame,2023-08-18 18:42:47.000 +"Diablo III: Eternal Collection",01001B300B9BE000,status-playable;online-broken;ldn-works,playable,2023-08-21 23:48:03.000 +"Diabolic",0100F73011456000,status-playable,playable,2021-06-11 14:45:08.000 +"DIABOLIK LOVERS CHAOS LINEAGE",010027400BD24000,gpu;status-ingame;Needs Update,ingame,2023-06-08 02:20:44.000 +"Dicey Dungeons",0100BBF011394000,gpu;audio;slow;status-ingame,ingame,2023-08-02 20:30:12.000 +"Die for Valhalla!",,status-playable,playable,2021-01-06 16:09:14.000 +"Dies irae Amantes amentes For Nintendo Switch",0100BB900B5B4000,status-nothing;32-bit;crash,nothing,2022-02-16 07:09:05.000 +"Dig Dog",0100A5A00DBB0000,gpu;status-ingame,ingame,2021-06-02 17:17:51.000 +"Digerati Presents: The Dungeon Crawl Vol. 1",010035D0121EC000,slow;status-ingame,ingame,2021-04-18 14:04:55.000 +"Digimon Story Cyber Sleuth: Complete Edition",010014E00DB56000,status-playable;nvdec;opengl,playable,2022-09-13 15:02:37.000 +"Digimon World: Next Order",0100F00014254000,status-playable,playable,2023-05-09 20:41:06.000 +"Ding Dong XL",,status-playable,playable,2020-07-14 16:13:19.000 +"Dininho Adventures",,status-playable,playable,2020-10-03 17:25:51.000 +"Dininho Space Adventure",010027E0158A6000,status-playable,playable,2023-01-14 22:43:04.000 +"Dirt Bike Insanity",0100A8A013DA4000,status-playable,playable,2021-01-31 13:27:38.000 +"Dirt Trackin Sprint Cars",01004CB01378A000,status-playable;nvdec;online-broken,playable,2022-10-17 16:34:56.000 +"Disagaea 6: Defiance of Destiny Demo",0100918014B02000,status-playable;demo,playable,2022-10-26 20:02:04.000 +"Disaster Report 4: Summer Memories",010020700E2A2000,status-playable;nvdec;UE4,playable,2022-09-27 19:41:31.000 +"Disc Jam",0100510004D2C000,UE4;ldn-untested;nvdec;online;status-playable,playable,2021-04-08 16:40:35.000 +"Disco Dodgeball Remix",,online;status-playable,playable,2020-09-28 23:24:49.000 +"Disgaea 1 Complete",01004B100AF18000,status-playable,playable,2023-01-30 21:45:23.000 +"Disgaea 4 Complete Plus",,gpu;slow;status-playable,playable,2020-02-18 10:54:28.000 +"Disgaea 4 Complete+ Demo",010068C00F324000,status-playable;nvdec,playable,2022-09-13 15:21:59.000 +"Disgaea 5 Complete",01005700031AE000,nvdec;status-playable,playable,2021-03-04 15:32:54.000 +"Disgaea 6: Defiance of Destiny",0100ABC013136000,deadlock;status-ingame,ingame,2023-04-15 00:50:32.000 +"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",0100307011D80000,status-playable,playable,2021-06-08 13:20:33.000 +"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",01005EE013888000,gpu;status-ingame;demo,ingame,2022-12-06 15:27:59.000 +"Disjunction",01000B70122A2000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24.000 +"Disney Classic Games: Aladdin and The Lion King",0100A2F00EEFC000,status-playable;online-broken,playable,2022-09-13 15:44:17.000 +"Disney Epic Mickey: Rebrushed",0100DA201EBF8000,status-ingame;crash,ingame,2024-09-26 22:11:51.000 +"Disney SpeedStorm",0100F0401435E000,services;status-boots,boots,2023-11-27 02:15:32.000 +"Disney Tsum Tsum Festival",,crash;status-menus,menus,2020-07-14 14:05:28.000 +"DISTRAINT 2",,status-playable,playable,2020-09-03 16:08:12.000 +"DISTRAINT: Deluxe Edition",,status-playable,playable,2020-06-15 23:42:24.000 +"Divinity Original Sin 2",010027400CDC6000,services;status-menus;crash;online-broken;regression,menus,2023-08-13 17:20:03.000 +"Dodo Peak",01001770115C8000,status-playable;nvdec;UE4,playable,2022-10-04 16:13:05.000 +"DoDonPachi Resurrection - 怒首領蜂大復活",01005A001489A000,status-ingame;32-bit;crash,ingame,2024-01-25 14:37:32.000 +"Dogurai",,status-playable,playable,2020-10-04 02:40:16.000 +"Dokapon Up! Mugen no Roulette",010048100D51A000,gpu;status-menus;Needs Update,menus,2022-12-08 19:39:10.000 +"Dokuro",,nvdec;status-playable,playable,2020-12-17 14:47:09.000 +"Don't Die Mr. Robot DX",010007200AC0E000,status-playable;nvdec,playable,2022-09-02 18:34:38.000 +"Don't Knock Twice",0100E470067A8000,status-playable,playable,2024-05-08 22:37:58.000 +"Don't Sink",0100C4D00B608000,gpu;status-ingame,ingame,2021-02-26 15:41:11.000 +"Don't Starve",0100751007ADA000,status-playable;nvdec,playable,2022-02-05 20:43:34.000 +"Dongo Adventure",010088B010DD2000,status-playable,playable,2022-10-04 16:22:26.000 +"Donkey Kong Country Tropical Freeze",0100C1F0051B6000,status-playable,playable,2024-08-05 16:46:10.000 +"Doodle Derby",,status-boots,boots,2020-12-04 22:51:48.000 +"DOOM",0100416004C00000,gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-09-23 15:40:07.000 +"DOOM (1993)",010018900DD00000,status-menus;nvdec;online-broken,menus,2022-09-06 13:32:19.000 +"DOOM + DOOM II",01008CB01E52E000,status-playable;opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01.000 +"DOOM 2",0100D4F00DD02000,nvdec;online;status-playable,playable,2021-06-03 20:10:01.000 +"DOOM 3",010029D00E740000,status-menus;crash,menus,2024-08-03 05:25:47.000 +"DOOM 64",,nvdec;status-playable;vulkan,playable,2020-10-13 23:47:28.000 +"DOOM Eternal",0100B1A00D8CE000,gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-08-28 15:57:17.000 +"Door Kickers: Action Squad",01005ED00CD70000,status-playable;online-broken;ldn-broken,playable,2022-09-13 16:28:53.000 +"DORAEMON STORY OF SEASONS",,nvdec;status-playable,playable,2020-07-13 20:28:11.000 +"Double Cross",,status-playable,playable,2021-01-07 15:34:22.000 +"Double Dragon & Kunio-Kun: Retro Brawler Bundle",,status-playable,playable,2020-09-01 12:48:46.000 +"DOUBLE DRAGON Ⅲ: The Sacred Stones",01001AD00E49A000,online;status-playable,playable,2021-06-11 15:41:44.000 +"Double Dragon Neon",01005B10132B2000,gpu;audio;status-ingame;32-bit,ingame,2022-09-20 18:00:20.000 +"Double Kick Heroes",,gpu;status-ingame,ingame,2020-10-03 14:33:59.000 +"Double Pug Switch",0100A5D00C7C0000,status-playable;nvdec,playable,2022-10-10 10:59:35.000 +"Double Switch - 25th Anniversary Edition",0100FC000EE10000,status-playable;nvdec,playable,2022-09-19 13:41:50.000 +"Down to Hell",0100B6600FE06000,gpu;status-ingame;nvdec,ingame,2022-09-19 14:01:26.000 +"Downwell",010093D00C726000,status-playable,playable,2021-04-25 20:05:24.000 +"Dr Kawashima's Brain Training",0100ED000D390000,services;status-ingame,ingame,2023-06-04 00:06:46.000 +"Dracula's Legacy",,nvdec;status-playable,playable,2020-12-10 13:24:25.000 +"DragoDino",,gpu;nvdec;status-ingame,ingame,2020-08-03 20:49:16.000 +"Dragon Audit",0100DBC00BD5A000,crash;status-ingame,ingame,2021-05-16 14:24:46.000 +"DRAGON BALL FighterZ",0100A250097F0000,UE4;ldn-broken;nvdec;online;status-playable,playable,2021-06-11 16:19:04.000 +"Dragon Ball Xenoverse 2",010078D000F88000,gpu;status-ingame;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01.000 +"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",010051C0134F8000,status-playable;vulkan-backend-bug,playable,2024-08-28 00:03:50.000 +"Dragon Marked for Death: Frontline Fighters (Empress & Warrior)",010089700150E000,status-playable;ldn-untested;audout,playable,2022-03-10 06:44:34.000 +"Dragon Quest",0100EFC00EFB2000,gpu;status-boots,boots,2021-11-09 03:31:32.000 +"Dragon Quest Builders",010008900705C000,gpu;status-ingame;nvdec,ingame,2023-08-14 09:54:36.000 +"Dragon Quest Builders 2",010042000A986000,status-playable,playable,2024-04-19 16:36:38.000 +"Dragon Quest Heroes I + II (JP)",0100CD3000BDC000,nvdec;status-playable,playable,2021-04-08 14:27:16.000 +"Dragon Quest II: Luminaries of the Legendary Line",010062200EFB4000,status-playable,playable,2022-09-13 16:44:11.000 +"Dragon Quest III HD-2D Remake",01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27.000 +"Dragon Quest III: The Seeds of Salvation",010015600EFB6000,gpu;status-boots,boots,2021-11-09 03:38:34.000 +"DRAGON QUEST MONSTERS: The Dark Prince",0100A77018EA0000,status-playable,playable,2023-12-29 16:10:05.000 +"Dragon Quest Treasures",0100217014266000,gpu;status-ingame;UE4,ingame,2023-05-09 11:16:52.000 +"Dragon Quest X Awakening Five Races Offline",0100E2E0152E4000,status-playable;nvdec;UE4,playable,2024-08-20 10:04:24.000 +"Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition",01006C300E9F0000,status-playable;UE4,playable,2021-11-27 12:27:11.000 +"Dragon's Dogma: Dark Arisen",010032C00AC58000,status-playable,playable,2022-07-24 12:58:33.000 +"Dragon's Lair Trilogy",,nvdec;status-playable,playable,2021-01-13 22:12:07.000 +"DragonBlaze for Nintendo Switch",,32-bit;status-playable,playable,2020-10-14 11:11:28.000 +"DragonFangZ",,status-playable,playable,2020-09-28 21:35:18.000 +"Dragons Dawn of New Riders",,nvdec;status-playable,playable,2021-01-27 20:05:26.000 +"Drawful 2",0100F7800A434000,status-ingame,ingame,2022-07-24 13:50:21.000 +"Drawngeon: Dungeons of Ink and Paper",0100B7E0102E4000,gpu;status-ingame,ingame,2022-09-19 15:41:25.000 +"Dream",,status-playable,playable,2020-12-15 19:55:07.000 +"Dream Alone - 0100AA0093DC000",,nvdec;status-playable,playable,2021-01-27 19:41:50.000 +"DreamBall",,UE4;crash;gpu;status-ingame,ingame,2020-08-05 14:45:25.000 +"Dreaming Canvas",010058B00F3C0000,UE4;gpu;status-ingame,ingame,2021-06-13 22:50:07.000 +"Dreamo",0100D24013466000,status-playable;UE4,playable,2022-10-17 18:25:28.000 +"DreamWorks Spirit Lucky's Big Adventure",0100236011B4C000,status-playable,playable,2022-10-27 13:30:52.000 +"Drone Fight",010058C00A916000,status-playable,playable,2022-07-24 14:31:56.000 +"Drowning",010052000A574000,status-playable,playable,2022-07-25 14:28:26.000 +"Drums",,status-playable,playable,2020-12-17 17:21:51.000 +"Duck Life Adventure",01005BC012C66000,status-playable,playable,2022-10-10 11:27:03.000 +"Duke Nukem 3D: 20th Anniversary World Tour",01007EF00CB88000,32-bit;status-playable;ldn-untested,playable,2022-08-19 22:22:40.000 +"Dull Grey",010068D0141F2000,status-playable,playable,2022-10-27 13:40:38.000 +"Dungeon Nightmares 1 + 2 Collection",0100926013600000,status-playable,playable,2022-10-17 18:54:22.000 +"Dungeon of the Endless",010034300F0E2000,nvdec;status-playable,playable,2021-05-27 19:16:26.000 +"Dungeon Stars",,status-playable,playable,2021-01-18 14:28:37.000 +"Dungeons & Bombs",,status-playable,playable,2021-04-06 12:46:22.000 +"Dunk Lords",0100EC30140B6000,status-playable,playable,2024-06-26 00:07:26.000 +"Dusk Diver",010011C00E636000,status-boots;crash;UE4,boots,2021-11-06 09:01:30.000 +"Dust: An Elysian Tail",0100B6E00A420000,status-playable,playable,2022-07-25 15:28:12.000 +"Dustoff Z",,status-playable,playable,2020-12-04 23:22:29.000 +"Dying Light: Platinum Edition",01008c8012920000,services-horizon;status-boots,boots,2024-03-11 10:43:32.000 +"Dyna Bomb",,status-playable,playable,2020-06-07 13:26:55.000 +"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",0100E9A00CB30000,status-playable;nvdec,playable,2024-06-26 00:16:30.000 +"DYSMANTLE",010008900BC5A000,gpu;status-ingame,ingame,2024-07-15 16:24:12.000 +"EA Sports FC 24",0100BDB01A0E6000,status-boots,boots,2023-10-04 18:32:59.000 +"EA SPORTS FC 25",010054E01D878000,status-ingame;crash,ingame,2024-09-25 21:07:50.000 +"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",01001C8016B4E000,gpu;status-ingame;crash,ingame,2024-06-10 23:33:05.000 +"Eagle Island",010037400C7DA000,status-playable,playable,2021-04-10 13:15:42.000 +"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",0100B9E012992000,status-playable;UE4,playable,2022-12-07 12:59:16.000 +"Earth Defense Force: World Brothers",0100298014030000,status-playable;UE4,playable,2022-10-27 14:13:31.000 +"EARTH WARS",01009B7006C88000,status-playable,playable,2021-06-05 11:18:33.000 +"Earthfall: Alien Horde",0100DFC00E472000,status-playable;nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37.000 +"Earthlock",01006E50042EA000,status-playable,playable,2021-06-05 11:51:02.000 +"EarthNight",0100A2E00BB0C000,status-playable,playable,2022-09-19 21:02:20.000 +"Earthworms",0100DCE00B756000,status-playable,playable,2022-07-25 16:28:55.000 +"Earthworms Demo",,status-playable,playable,2021-01-05 16:57:11.000 +"Easy Come Easy Golf",0100ECF01800C000,status-playable;online-broken;regression,playable,2024-04-04 16:15:00.000 +"EAT BEAT DEADSPIKE-san",0100A9B009678000,audio;status-playable;Needs Update,playable,2022-12-02 19:25:29.000 +"eBaseball Powerful Pro Yakyuu 2022",0100BCA016636000,gpu;services-horizon;status-nothing;crash,nothing,2024-05-26 23:07:19.000 +"Eclipse: Edge of Light",,status-playable,playable,2020-08-11 23:06:29.000 +"eCrossminton",,status-playable,playable,2020-07-11 18:24:27.000 +"Edna & Harvey: Harvey's New Eyes",0100ABE00DB4E000,nvdec;status-playable,playable,2021-01-26 14:36:08.000 +"Edna & Harvey: The Breakout - Anniversary Edition",01004F000B716000,status-ingame;crash;nvdec,ingame,2022-08-01 16:59:56.000 +"Effie",01002550129F0000,status-playable,playable,2022-10-27 14:36:39.000 +"Ego Protocol",,nvdec;status-playable,playable,2020-12-16 20:16:35.000 +"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",,status-playable,playable,2020-11-12 00:11:50.000 +"Eight Dragons",01003AD013BD2000,status-playable;nvdec,playable,2022-10-27 14:47:28.000 +"El Hijo - A Wild West Tale",010020A01209C000,nvdec;status-playable,playable,2021-04-19 17:44:08.000 +"Elden: Path of the Forgotten",,status-playable,playable,2020-12-15 00:33:19.000 +"ELEA: Paradigm Shift",,UE4;crash;status-nothing,nothing,2020-10-04 19:07:43.000 +"Element",0100A6700AF10000,status-playable,playable,2022-07-25 17:17:16.000 +"Elliot Quest",0100128003A24000,status-playable,playable,2022-07-25 17:46:14.000 +"Elrador Creatures",,slow;status-playable,playable,2020-12-12 12:35:35.000 +"Ember",010041A00FEC6000,status-playable;nvdec,playable,2022-09-19 21:16:11.000 +"Embracelet",,status-playable,playable,2020-12-04 23:45:00.000 +"Emma: Lost in Memories",010017b0102a8000,nvdec;status-playable,playable,2021-01-28 16:19:10.000 +"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo",010068300E08E000,gpu;status-ingame;nvdec,ingame,2022-11-20 16:18:45.000 +"Enchanting Mahjong Match",,gpu;status-ingame,ingame,2020-04-17 22:01:31.000 +"Endless Fables: Dark Moor",01004F3011F92000,gpu;nvdec;status-ingame,ingame,2021-03-07 15:31:03.000 +"Endless Ocean Luminous",010067B017588000,services-horizon;status-ingame;crash,ingame,2024-05-30 02:05:57.000 +"Energy Cycle Edge",0100B8700BD14000,services;status-ingame,ingame,2021-11-30 05:02:31.000 +"Energy Invasion",,status-playable,playable,2021-01-14 21:32:26.000 +"Enigmatis 2: The Mists of Ravenwood",0100C6200A0AA000,crash;regression;status-boots,boots,2021-06-06 15:15:30.000 +"Enter the Gungeon",01009D60076F6000,status-playable,playable,2022-07-25 20:28:33.000 +"Epic Loon",0100262009626000,status-playable;nvdec,playable,2022-07-25 22:06:13.000 +"EQI",01000FA0149B6000,status-playable;nvdec;UE4,playable,2022-10-27 16:42:32.000 +"EQQO",0100E95010058000,UE4;nvdec;status-playable,playable,2021-06-13 23:10:51.000 +"Escape First",,status-playable,playable,2020-10-20 22:46:53.000 +"Escape First 2",010021201296A000,status-playable,playable,2021-03-24 11:59:41.000 +"Escape from Chernobyl",0100FEF00F0AA000,status-boots;crash,boots,2022-09-19 21:36:58.000 +"Escape from Life Inc",010023E013244000,status-playable,playable,2021-04-19 17:34:09.000 +"Escape from Tethys",,status-playable,playable,2020-10-14 22:38:25.000 +"Escape Game Fort Boyard",,status-playable,playable,2020-07-12 12:45:43.000 +"ESP Ra.De. Psi",0100F9600E746000,audio;slow;status-ingame,ingame,2024-03-07 15:05:08.000 +"Esports powerful pro yakyuu 2020",010073000FE18000,gpu;status-ingame;crash;Needs More Attention,ingame,2024-04-29 05:34:14.000 +"Estranged: The Departure",01004F9012FD8000,status-playable;nvdec;UE4,playable,2022-10-24 10:37:58.000 +"Eternum Ex",,status-playable,playable,2021-01-13 20:28:32.000 +"Europa (Demo)",010092501EB2C000,gpu;status-ingame;crash;UE4,ingame,2024-04-23 10:47:12.000 +"EVE ghost enemies",01007BE0160D6000,gpu;status-ingame,ingame,2023-01-14 03:13:30.000 +"even if TEMPEST",010095E01581C000,gpu;status-ingame,ingame,2023-06-22 23:50:25.000 +"Event Horizon: Space Defense",,status-playable,playable,2020-07-31 20:31:24.000 +"EVERSPACE",0100DCF0093EC000,status-playable;UE4,playable,2022-08-14 01:16:24.000 +"Everybody 1-2-Switch!",01006F900BF8E000,services;deadlock;status-nothing,nothing,2023-07-01 05:52:55.000 +"Evil Defenders",,nvdec;status-playable,playable,2020-09-28 17:11:00.000 +"Evolution Board Game",01006A800FA22000,online;status-playable,playable,2021-01-20 22:37:56.000 +"Exception",0100F2D00C7DE000,status-playable;online-broken,playable,2022-09-20 12:47:10.000 +"Exit the Gungeon",0100DD30110CC000,status-playable,playable,2022-09-22 17:04:43.000 +"Exodemon",0100A82013976000,status-playable,playable,2022-10-27 20:17:52.000 +"Exorder",0100FA800A1F4000,nvdec;status-playable,playable,2021-04-15 14:17:20.000 +"Explosive Jake",01009B7010B42000,status-boots;crash,boots,2021-11-03 07:48:32.000 +"Eyes: The Horror Game",0100EFE00A3C2000,status-playable,playable,2021-01-20 21:59:46.000 +"Fable of Fairy Stones",0100E3D0103CE000,status-playable,playable,2021-05-05 21:04:54.000 +"Factorio",01004200189F4000,deadlock;status-boots,boots,2024-06-11 19:26:16.000 +"Fae Farm",010073F0189B6000,status-playable,playable,2024-08-25 15:12:12.000 +"Faeria",010069100DB08000,status-menus;nvdec;online-broken,menus,2022-10-04 16:44:41.000 +"Fairune Collection",01008A6009758000,status-playable,playable,2021-06-06 15:29:56.000 +"Fairy Fencer F™: Advent Dark Force",0100F6D00B8F2000,status-ingame;32-bit;crash;nvdec,ingame,2023-04-16 03:53:48.000 +"Fairy Tail",0100CF900FA3E000,status-playable;nvdec,playable,2022-10-04 23:00:32.000 +"Fall Of Light - Darkest Edition",01005A600BE60000,slow;status-ingame;nvdec,ingame,2024-07-24 04:19:26.000 +"Fallen Legion Revenants",0100AA801258C000,status-menus;crash,menus,2021-11-25 08:53:20.000 +"Famicom Detective Club: The Girl Who Stands Behind",0100D670126F6000,status-playable;nvdec,playable,2022-10-27 20:41:40.000 +"Famicom Detective Club: The Missing Heir",010033F0126F4000,status-playable;nvdec,playable,2022-10-27 20:56:23.000 +"Family Feud 2021",010060200FC44000,status-playable;online-broken,playable,2022-10-10 11:42:21.000 +"Family Mysteries: Poisonous Promises",0100034012606000,audio;status-menus;crash,menus,2021-11-26 12:35:06.000 +"Fantasy Friends",010017C012726000,status-playable,playable,2022-10-17 19:42:39.000 +"Fantasy Hero Unsigned Legacy",0100767008502000,status-playable,playable,2022-07-26 12:28:52.000 +"Fantasy Strike",0100944003820000,online;status-playable,playable,2021-02-27 01:59:18.000 +"Fantasy Tavern Sextet -Vol.1 New World Days-",01000E2012F6E000,gpu;status-ingame;crash;Needs Update,ingame,2022-12-05 16:48:00.000 +"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",,gpu;slow;status-ingame;crash,ingame,2021-11-06 02:57:29.000 +"FAR: Lone Sails",010022700E7D6000,status-playable,playable,2022-09-06 16:33:05.000 +"Farabel",,status-playable,playable,2020-08-03 17:47:28.000 +"Farm Expert 2019 for Nintendo Switch",,status-playable,playable,2020-07-09 21:42:57.000 +"Farm Mystery",01000E400ED98000,status-playable;nvdec,playable,2022-09-06 16:46:47.000 +"Farm Together",,status-playable,playable,2021-01-19 20:01:19.000 +"Farming Simulator 20",0100EB600E914000,nvdec;status-playable,playable,2021-06-13 10:52:44.000 +"Farming Simulator Nintendo Switch Edition",,nvdec;status-playable,playable,2021-01-19 14:46:44.000 +"Fashion Dreamer",0100E99019B3A000,status-playable,playable,2023-11-12 06:42:52.000 +"Fast RMX",01009510001CA000,slow;status-ingame;crash;ldn-partial,ingame,2024-06-22 20:48:58.000 +"Fatal Frame: Maiden of Black Water",0100BEB015604000,status-playable,playable,2023-07-05 16:01:40.000 +"Fatal Frame: Mask of the Lunar Eclipse",0100DAE019110000,status-playable;Incomplete,playable,2024-04-11 06:01:30.000 +"Fate/EXTELLA",010053E002EA2000,gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55.000 +"Fate/EXTELLA LINK",010051400B17A000,ldn-untested;nvdec;status-playable,playable,2021-01-27 00:45:50.000 +"fault - milestone one",,nvdec;status-playable,playable,2021-03-24 10:41:49.000 +"Fear Effect Sedna",,nvdec;status-playable,playable,2021-01-19 13:10:33.000 +"Fearmonium",0100F5501CE12000,status-boots;crash,boots,2024-03-06 11:26:11.000 +"Feather",0100E4300CB3E000,status-playable,playable,2021-06-03 14:11:27.000 +"Felix the Reaper",,nvdec;status-playable,playable,2020-10-20 23:43:03.000 +"Feudal Alloy",,status-playable,playable,2021-01-14 08:48:14.000 +"FEZ",01008D900B984000,gpu;status-ingame,ingame,2021-04-18 17:10:16.000 +"FIA European Truck Racing Championship",01007510040E8000,status-playable;nvdec,playable,2022-09-06 17:51:59.000 +"FIFA 18",0100F7B002340000,gpu;status-ingame;online-broken;ldn-untested,ingame,2022-07-26 12:43:59.000 +"FIFA 19",0100FFA0093E8000,gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07.000 +"FIFA 20 Legacy Edition",01005DE00D05C000,gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20.000 +"FIFA 21 Legacy Edition",01000A001171A000,gpu;status-ingame;online-broken,ingame,2023-12-11 22:10:19.000 +"FIFA 22 Legacy Edition",0100216014472000,gpu;status-ingame,ingame,2024-03-02 14:13:48.000 +"Fight Crab",01006980127F0000,status-playable;online-broken;ldn-untested,playable,2022-10-05 10:24:04.000 +"Fight of Animals",,online;status-playable,playable,2020-10-15 15:08:28.000 +"Fight'N Rage",,status-playable,playable,2020-06-16 23:35:19.000 +"Fighting EX Layer Another Dash",0100D02014048000,status-playable;online-broken;UE4,playable,2024-04-07 10:22:33.000 +"Figment",0100118009C68000,nvdec;status-playable,playable,2021-01-27 19:36:05.000 +"Fill-a-Pix: Phil's Epic Adventure",,status-playable,playable,2020-12-22 13:48:22.000 +"Fimbul",0100C3A00BB76000,status-playable;nvdec,playable,2022-07-26 13:31:47.000 +"Fin and the Ancient Mystery",,nvdec;status-playable,playable,2020-12-17 16:40:39.000 +"FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition",0100CE4010AAC000,status-playable,playable,2023-04-02 23:39:12.000 +"FINAL FANTASY I",01000EA014150000,status-nothing;crash,nothing,2024-09-05 20:55:30.000 +"FINAL FANTASY II",01006B7014156000,status-nothing;crash,nothing,2024-04-13 19:18:04.000 +"FINAL FANTASY IX",01006F000B056000,audout;nvdec;status-playable,playable,2021-06-05 11:35:00.000 +"FINAL FANTASY V",0100AA201415C000,status-playable,playable,2023-04-26 01:11:55.000 +"Final Fantasy VII",0100A5B00BDC6000,status-playable,playable,2022-12-09 17:03:30.000 +"FINAL FANTASY VIII REMASTERED",01008B900DC0A000,status-playable;nvdec,playable,2023-02-15 10:57:48.000 +"FINAL FANTASY X/X-2 HD REMASTER",0100BC300CB48000,gpu;status-ingame,ingame,2022-08-16 20:29:26.000 +"FINAL FANTASY XII THE ZODIAC AGE",0100EB100AB42000,status-playable;opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54.000 +"FINAL FANTASY XV POCKET EDITION HD",,status-playable,playable,2021-01-05 17:52:08.000 +"Final Light, The Prison",,status-playable,playable,2020-07-31 21:48:44.000 +"Finding Teddy 2 : Definitive Edition",0100FF100FB68000,gpu;status-ingame,ingame,2024-04-19 16:51:33.000 +"Fire & Water",,status-playable,playable,2020-12-15 15:43:20.000 +"Fire Emblem Warriors",0100F15003E64000,status-playable;nvdec,playable,2023-05-10 01:53:10.000 +"Fire Emblem Warriors: Three Hopes",010071F0143EA000,gpu;status-ingame;nvdec,ingame,2024-05-01 07:07:42.000 +"Fire Emblem: Engage",0100A6301214E000,status-playable;amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26.000 +"Fire Emblem: Shadow Dragon and the Blade of Light",0100A12011CC8000,status-playable,playable,2022-10-17 19:49:14.000 +"Fire Emblem: Three Houses",010055D009F78000,status-playable;online-broken,playable,2024-09-14 23:53:50.000 +"Fire: Ungh's Quest",010025C014798000,status-playable;nvdec,playable,2022-10-27 21:41:26.000 +"Firefighters - The Simulation",0100434003C58000,status-playable,playable,2021-02-19 13:32:05.000 +"Firefighters: Airport Fire Department",,status-playable,playable,2021-02-15 19:17:00.000 +"Firewatch",0100AC300919A000,status-playable,playable,2021-06-03 10:56:38.000 +"Firework",,status-playable,playable,2020-12-04 20:20:09.000 +"Fishing Star World Tour",0100DEB00ACE2000,status-playable,playable,2022-09-13 19:08:51.000 +"Fishing Universe Simulator",010069800D292000,status-playable,playable,2021-04-15 14:00:43.000 +"Fit Boxing",0100807008868000,status-playable,playable,2022-07-26 19:24:55.000 +"Fitness Boxing",,services;status-ingame,ingame,2020-05-17 14:00:48.000 +"Fitness Boxing",0100E7300AAD4000,status-playable,playable,2021-04-14 20:33:33.000 +"Fitness Boxing 2: Rhythm & Exercise",0100073011382000,crash;status-ingame,ingame,2021-04-14 20:40:48.000 +"Five Dates",,nvdec;status-playable,playable,2020-12-11 15:17:11.000 +"Five Nights at Freddy's",0100B6200D8D2000,status-playable,playable,2022-09-13 19:26:36.000 +"Five Nights at Freddy's 2",01004EB00E43A000,status-playable,playable,2023-02-08 15:48:24.000 +"Five Nights at Freddy's 3",010056100E43C000,status-playable,playable,2022-09-13 20:58:07.000 +"Five Nights at Freddy's 4",010083800E43E000,status-playable,playable,2023-08-19 07:28:03.000 +"Five Nights at Freddy's: Help Wanted",0100F7901118C000,status-playable;UE4,playable,2022-09-29 12:40:09.000 +"Five Nights at Freddy's: Sister Location",01003B200E440000,status-playable,playable,2023-10-06 09:00:58.000 +"Five Nights At Freddy’s Security Breach",01009060193C4000,gpu;status-ingame;crash;mac-bug,ingame,2023-04-23 22:33:28.000 +"Flan",010038200E088000,status-ingame;crash;regression,ingame,2021-11-17 07:39:28.000 +"Flashback",,nvdec;status-playable,playable,2020-05-14 13:57:29.000 +"Flat Heroes",0100C53004C52000,gpu;status-ingame,ingame,2022-07-26 19:37:37.000 +"Flatland: Prologue",,status-playable,playable,2020-12-11 20:41:12.000 +"Flinthook",,online;status-playable,playable,2021-03-25 20:42:29.000 +"Flip Wars",010095A004040000,services;status-ingame;ldn-untested,ingame,2022-05-02 15:39:18.000 +"Flipping Death",01009FB002B2E000,status-playable,playable,2021-02-17 16:12:30.000 +"Flood of Light",,status-playable,playable,2020-05-15 14:15:25.000 +"Floor Kids",0100DF9005E7A000,status-playable;nvdec,playable,2024-08-18 19:38:49.000 +"Florence",,status-playable,playable,2020-09-05 01:22:30.000 +"Flowlines VS",,status-playable,playable,2020-12-17 17:01:53.000 +"Flux8",,nvdec;status-playable,playable,2020-06-19 20:55:11.000 +"Fly O'Clock VS",,status-playable,playable,2020-05-17 13:39:52.000 +"Fly Punch Boom!",,online;status-playable,playable,2020-06-21 12:06:11.000 +"Flying Hero X",0100419013A8A000,status-menus;crash,menus,2021-11-17 07:46:58.000 +"Fobia",,status-playable,playable,2020-12-14 21:05:23.000 +"Food Truck Tycoon",0100F3900D0F0000,status-playable,playable,2022-10-17 20:15:55.000 +"Football Manager 2021 Touch",01007CF013152000,gpu;status-ingame,ingame,2022-10-17 20:08:23.000 +"FOOTBALL MANAGER 2023 TOUCH",0100EDC01990E000,gpu;status-ingame,ingame,2023-08-01 03:40:53.000 +"Football Manager Touch 2018",010097F0099B4000,status-playable,playable,2022-07-26 20:17:56.000 +"For The King",010069400B6BE000,nvdec;status-playable,playable,2021-02-15 18:51:44.000 +"Forager",01001D200BCC4000,status-menus;crash,menus,2021-11-24 07:10:17.000 +"Foreclosed",0100AE001256E000,status-ingame;crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12.000 +"Foregone",,deadlock;status-ingame,ingame,2020-12-17 15:26:53.000 +"Forgotton Anne",010059E00B93C000,nvdec;status-playable,playable,2021-02-15 18:28:07.000 +"FORMA.8",,nvdec;status-playable,playable,2020-11-15 01:04:32.000 +"Fort Boyard",,nvdec;slow;status-playable,playable,2020-05-15 13:22:53.000 +"Fortnite",010025400AECE000,services-horizon;status-nothing,nothing,2024-04-06 18:23:25.000 +"Fossil Hunters",0100CA500756C000,status-playable;nvdec,playable,2022-07-27 11:37:20.000 +"FOX n FORESTS",01008A100A028000,status-playable,playable,2021-02-16 14:27:49.000 +"FoxyLand",,status-playable,playable,2020-07-29 20:55:20.000 +"FoxyLand 2",,status-playable,playable,2020-08-06 14:41:30.000 +"Fractured Minds",01004200099F2000,status-playable,playable,2022-09-13 21:21:40.000 +"FRAMED COLLECTION",0100F1A00A5DC000,status-playable;nvdec,playable,2022-07-27 11:48:15.000 +"Fred3ric",0100AC40108D8000,status-playable,playable,2021-04-15 13:30:31.000 +"Frederic 2",,status-playable,playable,2020-07-23 16:44:37.000 +"Frederic: Resurrection of Music",,nvdec;status-playable,playable,2020-07-23 16:59:53.000 +"Freedom Finger",010082B00EE50000,nvdec;status-playable,playable,2021-06-09 19:31:30.000 +"Freedom Planet",,status-playable,playable,2020-05-14 12:23:06.000 +"Friday the 13th: Killer Puzzle",010003F00BD48000,status-playable,playable,2021-01-28 01:33:38.000 +"Friday the 13th: The Game",010092A00C4B6000,status-playable;nvdec;online-broken;UE4,playable,2022-09-06 17:33:27.000 +"Front Mission 1st Remake",0100F200178F4000,status-playable,playable,2023-06-09 07:44:24.000 +"Frontline Zed",,status-playable,playable,2020-10-03 12:55:59.000 +"Frost",0100B5300B49A000,status-playable,playable,2022-07-27 12:00:36.000 +"Fruitfall Crush",,status-playable,playable,2020-10-20 11:33:33.000 +"FullBlast",,status-playable,playable,2020-05-19 10:34:13.000 +"FUN! FUN! Animal Park",010002F00CC20000,status-playable,playable,2021-04-14 17:08:52.000 +"FunBox Party",,status-playable,playable,2020-05-15 12:07:02.000 +"Funghi Puzzle Funghi Explosion",,status-playable,playable,2020-11-23 14:17:41.000 +"Funimation",01008E10130F8000,gpu;status-boots,boots,2021-04-08 13:08:17.000 +"Funny Bunny Adventures",,status-playable,playable,2020-08-05 13:46:56.000 +"Furi",01000EC00AF98000,status-playable,playable,2022-07-27 12:21:20.000 +"Furi Definitive Edition",01000EC00AF98000,status-playable,playable,2022-07-27 12:35:08.000 +"Furwind",0100A6B00D4EC000,status-playable,playable,2021-02-19 19:44:08.000 +"Fury Unleashed",,crash;services;status-ingame,ingame,2020-10-18 11:52:40.000 +"Fury Unleashed Demo",,status-playable,playable,2020-10-08 20:09:21.000 +"FUSER",0100E1F013674000,status-playable;nvdec;UE4,playable,2022-10-17 20:58:32.000 +"Fushigi no Gensokyo Lotus Labyrinth",,Needs Update;audio;gpu;nvdec;status-ingame,ingame,2021-01-20 15:30:02.000 +"Futari de! Nyanko Daisensou",01003C300B274000,status-playable,playable,2024-01-05 22:26:52.000 +"FUZE Player",010055801134E000,status-ingame;online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53.000 +"FUZE4",0100EAD007E98000,status-playable;vulkan-backend-bug,playable,2022-09-06 19:25:01.000 +"FuzzBall",010067600F1A0000,crash;status-nothing,nothing,2021-03-29 20:13:21.000 +"G-MODE Archives 06 The strongest ever Julia Miyamoto",,status-playable,playable,2020-10-15 13:06:26.000 +"G.I. Joe Operation Blackout",,UE4;crash;status-boots,boots,2020-11-21 12:37:44.000 +"Gal Metal - 01B8000C2EA000",,status-playable,playable,2022-07-27 20:57:48.000 +"Gal*Gun 2",010024700901A000,status-playable;nvdec;UE4,playable,2022-07-27 12:45:37.000 +"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",0100047013378000,status-playable;nvdec,playable,2022-10-17 23:50:46.000 +"GALAK-Z: Variant S",0100C9800A454000,status-boots;online-broken,boots,2022-07-29 11:59:12.000 +"Game Boy - Nintendo Switch Online",0100C62011050000,status-playable,playable,2023-03-21 12:43:48.000 +"Game Boy Advance - Nintendo Switch Online",010012F017576000,status-playable,playable,2023-02-16 20:38:15.000 +"Game Builder Garage",0100FA5010788000,status-ingame,ingame,2024-04-20 21:46:22.000 +"Game Dev Story",,status-playable,playable,2020-05-20 00:00:38.000 +"Game Doraemon Nobita no Shin Kyoryu",01006BD00F8C0000,gpu;status-ingame,ingame,2023-02-27 02:03:28.000 +"Garage",,status-playable,playable,2020-05-19 20:59:53.000 +"Garfield Kart Furious Racing",010061E00E8BE000,status-playable;ldn-works;loader-allocator,playable,2022-09-13 21:40:25.000 +"Gates of Hell",,slow;status-playable,playable,2020-10-22 12:44:26.000 +"Gato Roboto",010025500C098000,status-playable,playable,2023-01-20 15:04:11.000 +"Gear.Club Unlimited",010065E003FD8000,status-playable,playable,2021-06-08 13:03:19.000 +"Gear.Club Unlimited 2",010072900AFF0000,status-playable;nvdec;online-broken,playable,2022-07-29 12:52:16.000 +"Geki Yaba Runner Anniversary Edition",01000F000D9F0000,status-playable,playable,2021-02-19 18:59:07.000 +"Gekido Kintaro's Revenge",,status-playable,playable,2020-10-27 12:44:05.000 +"Gelly Break",01009D000AF3A000,UE4;status-playable,playable,2021-03-03 16:04:02.000 +"Gem Smashers",01001A4008192000,nvdec;status-playable,playable,2021-06-08 13:40:51.000 +"Genetic Disaster",,status-playable,playable,2020-06-19 21:41:12.000 +"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",0100D7E0110B2000,32-bit;status-playable,playable,2022-06-06 00:42:09.000 +"Gensokyo Defenders",010000300C79C000,status-playable;online-broken;UE4,playable,2022-07-29 13:48:12.000 +"Gensou Rougoku no Kaleidscope",0100AC600EB4C000,status-menus;crash,menus,2021-11-24 08:45:07.000 +"Georifters",,UE4;crash;nvdec;status-menus,menus,2020-12-04 22:30:50.000 +"Gerrrms",,status-playable,playable,2020-08-15 11:32:52.000 +"Get 10 Quest",,status-playable,playable,2020-08-03 12:48:39.000 +"Get Over Here",0100B5B00E77C000,status-playable,playable,2022-10-28 11:53:52.000 +"Ghost 1.0",0100EEB005ACC000,status-playable,playable,2021-02-19 20:48:47.000 +"Ghost Blade HD",010063200C588000,status-playable;online-broken,playable,2022-09-13 21:51:21.000 +"Ghost Grab 3000",,status-playable,playable,2020-07-11 18:09:52.000 +"Ghost Parade",,status-playable,playable,2020-07-14 00:43:54.000 +"Ghost Sweeper",01004B301108C000,status-playable,playable,2022-10-10 12:45:36.000 +"Ghost Trick Phantom Detective",010029B018432000,status-playable,playable,2023-08-23 14:50:12.000 +"Ghostbusters: The Video Game Remastered",010008A00F632000,status-playable;nvdec,playable,2021-09-17 07:26:57.000 +"Ghostrunner",,UE4;crash;gpu;nvdec;status-ingame,ingame,2020-12-17 13:01:59.000 +"Ghosts 'n Goblins Resurrection",0100D6200F2BA000,status-playable,playable,2023-05-09 12:40:41.000 +"Giana Sisters: Twisted Dreams - Owltimate Edition",01003830092B8000,status-playable,playable,2022-07-29 14:06:12.000 +"Gibbous - A Cthulhu Adventure",0100D95012C0A000,status-playable;nvdec,playable,2022-10-10 12:57:17.000 +"GIGA WRECKER Alt.",010045F00BFC2000,status-playable,playable,2022-07-29 14:13:54.000 +"Gigantosaurus The Game",01002C400E526000,status-playable;UE4,playable,2022-09-27 21:20:00.000 +"Ginger: Beyond the Crystal",0100C50007070000,status-playable,playable,2021-02-17 16:27:00.000 +"Girabox",,status-playable,playable,2020-12-12 13:55:05.000 +"Giraffe and Annika",,UE4;crash;status-ingame,ingame,2020-12-04 22:41:57.000 +"Girls und Panzer Dream Tank Match DX",01006DD00CC96000,status-playable;ldn-untested,playable,2022-09-12 16:07:11.000 +"Glaive: Brick Breaker",,status-playable,playable,2020-05-20 12:15:59.000 +"Glitch's Trip",,status-playable,playable,2020-12-17 16:00:57.000 +"Glyph",0100EB501130E000,status-playable,playable,2021-02-08 19:56:51.000 +"Gnome More War",,status-playable,playable,2020-12-17 16:33:07.000 +"Gnomes Garden 2",,status-playable,playable,2021-02-19 20:08:13.000 +"Gnomes Garden: Lost King",010036C00D0D6000,deadlock;status-menus,menus,2021-11-18 11:14:03.000 +"Gnosia",01008EF013A7C000,status-playable,playable,2021-04-05 17:20:30.000 +"Go All Out",01000C800FADC000,status-playable;online-broken,playable,2022-09-21 19:16:34.000 +"Go Rally",010055A0161F4000,gpu;status-ingame,ingame,2023-08-16 21:18:23.000 +"GO VACATION",0100C1800A9B6000,status-playable;nvdec;ldn-works,playable,2024-05-13 19:28:53.000 +"Go! Fish Go!",,status-playable,playable,2020-07-27 13:52:28.000 +"Goat Simulator",010032600C8CE000,32-bit;status-playable,playable,2022-07-29 21:02:33.000 +"GOD EATER 3",01001C700873E000,gpu;status-ingame;nvdec,ingame,2022-07-29 21:33:21.000 +"GOD WARS THE COMPLETE LEGEND",,nvdec;status-playable,playable,2020-05-19 14:37:50.000 +"Gods Will Fall",0100CFA0111C8000,status-playable,playable,2021-02-08 16:49:59.000 +"Goetia",,status-playable,playable,2020-05-19 12:55:39.000 +"Going Under",,deadlock;nvdec;status-ingame,ingame,2020-12-11 22:29:46.000 +"Goken",,status-playable,playable,2020-08-05 20:22:38.000 +"Golazo - 010013800F0A4000",010013800F0A4000,status-playable,playable,2022-09-13 21:58:37.000 +"Golem Gates",01003C000D84C000,status-ingame;crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11.000 +"Golf Story",,status-playable,playable,2020-05-14 14:56:17.000 +"Golf With Your Friends",01006FB00EBE0000,status-playable;online-broken,playable,2022-09-29 12:55:11.000 +"Gone Home",0100EEC00AA6E000,status-playable,playable,2022-08-01 11:14:20.000 +"Gonner",,status-playable,playable,2020-05-19 12:05:02.000 +"Good Job!",,status-playable,playable,2021-03-02 13:15:55.000 +"Good Night, Knight",01003AD0123A2000,status-nothing;crash,nothing,2023-07-30 23:38:13.000 +"Good Pizza, Great Pizza",,status-playable,playable,2020-12-04 22:59:18.000 +"Goosebumps Dead of Night",,gpu;nvdec;status-ingame,ingame,2020-12-10 20:02:16.000 +"Goosebumps: The Game",,status-playable,playable,2020-05-19 11:56:52.000 +"Gorogoa",0100F2A005C98000,status-playable,playable,2022-08-01 11:55:08.000 +"GORSD",,status-playable,playable,2020-12-04 22:15:21.000 +"Gotcha Racing 2nd",,status-playable,playable,2020-07-23 17:14:04.000 +"Gothic Murder: Adventure That Changes Destiny",,deadlock;status-ingame;crash,ingame,2022-09-30 23:16:53.000 +"Grab the Bottle",,status-playable,playable,2020-07-14 17:06:41.000 +"Graceful Explosion Machine",,status-playable,playable,2020-05-19 20:36:55.000 +"Grand Brix Shooter",,slow;status-playable,playable,2020-06-24 13:23:54.000 +"Grand Guilds",010038100D436000,UE4;nvdec;status-playable,playable,2021-04-26 12:49:05.000 +"Grand Prix Story",0100BE600D07A000,status-playable,playable,2022-08-01 12:42:23.000 +"Grand Theft Auto 3",05B1D2ABD3D30000,services;status-nothing;crash;homebrew,nothing,2023-05-01 22:01:58.000 +"Grandia HD Collection",0100E0600BBC8000,status-boots;crash,boots,2024-08-19 04:29:48.000 +"Grass Cutter",,slow;status-ingame,ingame,2020-05-19 18:27:42.000 +"Grave Danger",,status-playable,playable,2020-05-18 17:41:28.000 +"GraviFire",010054A013E0C000,status-playable,playable,2021-04-05 17:13:32.000 +"Gravity Rider Zero",01002C2011828000,gpu;status-ingame;vulkan-backend-bug,ingame,2022-09-29 13:56:13.000 +"Greedroid",,status-playable,playable,2020-12-14 11:14:32.000 +"GREEN",010068D00AE68000,status-playable,playable,2022-08-01 12:54:15.000 +"Green Game",0100CBB0070EE000,nvdec;status-playable,playable,2021-02-19 18:51:55.000 +"GREEN The Life Algorithm",0100DFE00F002000,status-playable,playable,2022-09-27 21:37:13.000 +"Grey Skies: A War of the Worlds Story",0100DA7013792000,status-playable;UE4,playable,2022-10-24 11:13:59.000 +"GRID Autosport",0100DC800A602000,status-playable;nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45.000 +"Grid Mania",,status-playable,playable,2020-05-19 14:11:05.000 +"Gridd: Retroenhanced",,status-playable,playable,2020-05-20 11:32:40.000 +"Grim Fandango Remastered",0100B7900B024000,status-playable;nvdec,playable,2022-08-01 13:55:58.000 +"Grim Legends 2: Song Of The Dark Swan",010078E012D80000,status-playable;nvdec,playable,2022-10-18 12:58:45.000 +"Grim Legends: The Forsaken Bride",010009F011F90000,status-playable;nvdec,playable,2022-10-18 13:14:06.000 +"Grimshade",01001E200F2F8000,status-playable,playable,2022-10-02 12:44:20.000 +"Grindstone",0100538012496000,status-playable,playable,2023-02-08 15:54:06.000 +"GRIP",0100459009A2A000,status-playable;nvdec;online-broken;UE4,playable,2022-08-01 15:00:22.000 +"GRIS",0100E1700C31C000,nvdec;status-playable,playable,2021-06-03 13:33:44.000 +"GRISAIA PHANTOM TRIGGER 01&02",01009D7011B02000,status-playable;nvdec,playable,2022-12-04 21:16:06.000 +"Grisaia Phantom Trigger 03",01005250123B8000,audout;status-playable,playable,2021-01-31 12:30:47.000 +"GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000",0100D970123BA000,audout;status-playable,playable,2021-01-31 12:40:37.000 +"GRISAIA PHANTOM TRIGGER 05",01002330123BC000,audout;nvdec;status-playable,playable,2021-01-31 12:49:59.000 +"GRISAIA PHANTOM TRIGGER 5.5",0100CAF013AE6000,audout;nvdec;status-playable,playable,2021-01-31 12:59:44.000 +"Grizzland",010091300FFA0000,gpu;status-ingame,ingame,2024-07-11 16:28:34.000 +"Groove Coaster: Wai Wai Party!!!!",0100EB500D92E000,status-playable;nvdec;ldn-broken,playable,2021-11-06 14:54:27.000 +"Guacamelee! 2",,status-playable,playable,2020-05-15 14:56:59.000 +"Guacamelee! Super Turbo Championship Edition",,status-playable,playable,2020-05-13 23:44:18.000 +"Guess the Character",,status-playable,playable,2020-05-20 13:14:19.000 +"Guess The Word",,status-playable,playable,2020-07-26 21:34:25.000 +"GUILTY GEAR XX ACCENT CORE PLUS R",,nvdec;status-playable,playable,2021-01-13 09:28:33.000 +"GUNBIRD for Nintendo Switch",01003C6008940000,32-bit;status-playable,playable,2021-06-04 19:16:01.000 +"GUNBIRD2 for Nintendo Switch",,status-playable,playable,2020-10-10 14:41:16.000 +"Gunka o haita neko",,gpu;nvdec;status-ingame,ingame,2020-08-25 12:37:56.000 +"Gunman Clive HD Collection",,status-playable,playable,2020-10-09 12:17:35.000 +"Guns Gore and Cannoli 2",,online;status-playable,playable,2021-01-06 18:43:59.000 +"Gunvolt Chronicles: Luminous Avenger iX",,status-playable,playable,2020-06-16 22:47:07.000 +"Gunvolt Chronicles: Luminous Avenger iX 2",0100763015C2E000,status-nothing;crash;Needs Update,nothing,2022-04-29 15:34:34.000 +"Gurimugurimoa OnceMore Demo",01002C8018554000,status-playable,playable,2022-07-29 22:07:31.000 +"Gylt",0100AC601DCA8000,status-ingame;crash,ingame,2024-03-18 20:16:51.000 +"HAAK",0100822012D76000,gpu;status-ingame,ingame,2023-02-19 14:31:05.000 +"Habroxia",,status-playable,playable,2020-06-16 23:04:42.000 +"Hades",0100535012974000,status-playable;vulkan,playable,2022-10-05 10:45:21.000 +"Hakoniwa Explorer Plus",,slow;status-ingame,ingame,2021-02-19 16:56:19.000 +"Halloween Pinball",,status-playable,playable,2021-01-12 16:00:46.000 +"Hamidashi Creative",01006FF014152000,gpu;status-ingame,ingame,2021-12-19 15:30:51.000 +"Hammerwatch",01003B9007E86000,status-playable;online-broken;ldn-broken,playable,2022-08-01 16:28:46.000 +"Hand of Fate 2",01003620068EA000,status-playable,playable,2022-08-01 15:44:16.000 +"Hang the Kings",,status-playable,playable,2020-07-28 22:56:59.000 +"Happy Animals Mini Golf",010066C018E50000,gpu;status-ingame,ingame,2022-12-04 19:24:28.000 +"Hard West",0100ECE00D13E000,status-nothing;regression,nothing,2022-02-09 07:45:56.000 +"HARDCORE Maze Cube",,status-playable,playable,2020-12-04 20:01:24.000 +"HARDCORE MECHA",,slow;status-playable,playable,2020-11-01 15:06:33.000 +"HardCube",01000C90117FA000,status-playable,playable,2021-05-05 18:33:03.000 +"Hardway Party",,status-playable,playable,2020-07-26 12:35:07.000 +"Harvest Life",0100D0500AD30000,status-playable,playable,2022-08-01 16:51:45.000 +"Harvest Moon One World - 010016B010FDE00",,status-playable,playable,2023-05-26 09:17:19.000 +"Harvestella",0100A280187BC000,status-playable;UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11.000 +"Has-Been Heroes",,status-playable,playable,2021-01-13 13:31:48.000 +"Hatsune Miku: Project DIVA Mega Mix",01001CC00FA1A000,audio;status-playable;online-broken,playable,2024-01-07 23:12:57.000 +"Haunted Dawn: The Zombie Apocalypse",01009E6014F18000,status-playable,playable,2022-10-28 12:31:51.000 +"Haunted Dungeons: Hyakki Castle",,status-playable,playable,2020-08-12 14:21:48.000 +"Haven",0100E2600DBAA000,status-playable,playable,2021-03-24 11:52:41.000 +"Hayfever",0100EA900FB2C000,status-playable;loader-allocator,playable,2022-09-22 17:35:41.000 +"Headliner: NoviNews",0100EFE00E1DC000,online;status-playable,playable,2021-03-01 11:36:00.000 +"Headsnatchers",,UE4;crash;status-menus,menus,2020-07-14 13:29:14.000 +"Headspun",,status-playable,playable,2020-07-31 19:46:47.000 +"Heart and Slash",,status-playable,playable,2021-01-13 20:56:32.000 +"Heaven Dust",,status-playable,playable,2020-05-17 14:02:41.000 +"Heaven's Vault",0100FD901000C000,crash;status-ingame,ingame,2021-02-08 18:22:01.000 +"Helheim Hassle",,status-playable,playable,2020-10-14 11:38:36.000 +"Hell is Other Demons",,status-playable,playable,2021-01-13 13:23:02.000 +"Hell Pie0",01000938017E5C00,status-playable;nvdec;UE4,playable,2022-11-03 16:48:46.000 +"Hell Warders",0100A4600E27A000,online;status-playable,playable,2021-02-27 02:31:03.000 +"Hellblade: Senua's Sacrifice",010044500CF8E000,gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50.000 +"Hello Kitty Kruisers With Sanrio Friends",010087D0084A8000,nvdec;status-playable,playable,2021-06-04 19:08:46.000 +"Hello Neighbor",0100FAA00B168000,status-playable;UE4,playable,2022-08-01 21:32:23.000 +"Hello Neighbor: Hide And Seek",,UE4;gpu;slow;status-ingame,ingame,2020-10-24 10:59:57.000 +"Hellpoint",010024600C794000,status-menus,menus,2021-11-26 13:24:20.000 +"Hero Express",,nvdec;status-playable,playable,2020-08-06 13:23:43.000 +"Hero-U: Rogue to Redemption",010077D01094C000,nvdec;status-playable,playable,2021-03-24 11:40:01.000 +"Heroes of Hammerwatch",0100D2B00BC54000,status-playable,playable,2022-08-01 18:30:21.000 +"Heroine Anthem Zero episode 1",01001B70080F0000,status-playable;vulkan-backend-bug,playable,2022-08-01 22:02:36.000 +"Heroki",010057300B0DC000,gpu;status-ingame,ingame,2023-07-30 19:30:01.000 +"Heroland",,status-playable,playable,2020-08-05 15:35:39.000 +"Hexagravity",01007AC00E012000,status-playable,playable,2021-05-28 13:47:48.000 +"Hidden",01004E800F03C000,slow;status-ingame,ingame,2022-10-05 10:56:53.000 +"Higurashi no Naku Koro ni Hō",0100F6A00A684000,audio;status-ingame,ingame,2021-09-18 14:40:28.000 +"Himehibi 1 gakki - Princess Days",0100F8D0129F4000,status-nothing;crash,nothing,2021-11-03 08:34:19.000 +"Hiragana Pixel Party",,status-playable,playable,2021-01-14 08:36:50.000 +"Hitman 3 - Cloud Version",01004990132AC000,Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:35:07.000 +"Hitman: Blood Money - Reprisal",010083A018262000,deadlock;status-ingame,ingame,2024-09-28 16:28:50.000 +"Hob: The Definitive Edition",,status-playable,playable,2021-01-13 09:39:19.000 +"Hoggy 2",0100F7300ED2C000,status-playable,playable,2022-10-10 13:53:35.000 +"Hogwarts Legacy 0100F7E00C70E000",0100F7E00C70E000,status-ingame;slow,ingame,2024-09-03 19:53:58.000 +"Hollow Knight",0100633007D48000,status-playable;nvdec,playable,2023-01-16 15:44:56.000 +"Hollow0",0100F2100061E800,UE4;gpu;status-ingame,ingame,2021-03-03 23:42:56.000 +"Holy Potatoes! What the Hell?!",,status-playable,playable,2020-07-03 10:48:56.000 +"HoPiKo",,status-playable,playable,2021-01-13 20:12:38.000 +"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",010087800EE5A000,status-boots;crash,boots,2023-02-19 00:51:21.000 +"Horace",010086D011EB8000,status-playable,playable,2022-10-10 14:03:50.000 +"Horizon Chase 2",0100001019F6E000,deadlock;slow;status-ingame;crash;UE4,ingame,2024-08-19 04:24:06.000 +"Horizon Chase Turbo",01009EA00B714000,status-playable,playable,2021-02-19 19:40:56.000 +"Horror Pinball Bundle",0100E4200FA82000,status-menus;crash,menus,2022-09-13 22:15:34.000 +"Hotel Transylvania 3: Monsters Overboard",0100017007980000,nvdec;status-playable,playable,2021-01-27 18:55:31.000 +"Hotline Miami Collection",0100D0E00E51E000,status-playable;nvdec,playable,2022-09-09 16:41:19.000 +"Hotshot Racing",0100BDE008218000,gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17.000 +"House Flipper",0100CAE00EB02000,status-playable,playable,2021-06-16 18:28:32.000 +"Hover",0100F6800910A000,status-playable;online-broken,playable,2022-09-20 12:54:46.000 +"Hulu",0100A66003384000,status-boots;online-broken,boots,2022-12-09 10:05:00.000 +"Human Resource Machine",,32-bit;status-playable,playable,2020-12-17 21:47:09.000 +"Human: Fall Flat",,status-playable,playable,2021-01-13 18:36:05.000 +"Hungry Shark World",,status-playable,playable,2021-01-13 18:26:08.000 +"Huntdown",0100EBA004726000,status-playable,playable,2021-04-05 16:59:54.000 +"Hunter's Legacy: Purrfect Edition",010068000CAC0000,status-playable,playable,2022-08-02 10:33:31.000 +"Hunting Simulator",0100C460040EA000,status-playable;UE4,playable,2022-08-02 10:54:08.000 +"Hunting Simulator 2",010061F010C3A000,status-playable;UE4,playable,2022-10-10 14:25:51.000 +"Hyper Jam",,UE4;crash;status-boots,boots,2020-12-15 22:52:11.000 +"Hyper Light Drifter - Special Edition",01003B200B372000,status-playable;vulkan-backend-bug,playable,2023-01-13 15:44:48.000 +"HyperBrawl Tournament",,crash;services;status-boots,boots,2020-12-04 23:03:27.000 +"HYPERCHARGE: Unboxed",0100A8B00F0B4000,status-playable;nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39.000 +"HyperParasite",010061400ED90000,status-playable;nvdec;UE4,playable,2022-09-27 22:05:44.000 +"Hypnospace Outlaw",0100959010466000,status-ingame;nvdec,ingame,2023-08-02 22:46:49.000 +"Hyrule Warriors: Age of Calamity",01002B00111A2000,gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00.000 +"Hyrule Warriors: Age of Calamity - Demo Version",0100A2C01320E000,slow;status-playable,playable,2022-10-10 17:37:41.000 +"Hyrule Warriors: Definitive Edition",0100AE00096EA000,services-horizon;status-ingame;nvdec,ingame,2024-06-16 10:34:05.000 +"I AM SETSUNA",0100849000BDA000,status-playable,playable,2021-11-28 11:06:11.000 +"I Saw Black Clouds",01001860140B0000,nvdec;status-playable,playable,2021-04-19 17:22:16.000 +"I, Zombie",,status-playable,playable,2021-01-13 14:53:44.000 +"Ice Age Scrat's Nutty Adventure",01004E5007E92000,status-playable;nvdec,playable,2022-09-13 22:22:29.000 +"Ice Cream Surfer",,status-playable,playable,2020-07-29 12:04:07.000 +"Ice Station Z",0100954014718000,status-menus;crash,menus,2021-11-21 20:02:15.000 +"ICEY",,status-playable,playable,2021-01-14 16:16:04.000 +"Iconoclasts",0100BC60099FE000,status-playable,playable,2021-08-30 21:11:04.000 +"Idle Champions of the Forgotten Realms",,online;status-boots,boots,2020-12-17 18:24:57.000 +"Idol Days - 愛怒流でいす",01002EC014BCA000,gpu;status-ingame;crash,ingame,2021-12-19 15:31:28.000 +"If Found...",,status-playable,playable,2020-12-11 13:43:14.000 +"If My Heart Had Wings",01001AC00ED72000,status-playable,playable,2022-09-29 14:54:57.000 +"Ikaruga",01009F20086A0000,status-playable,playable,2023-04-06 15:00:02.000 +"Ikenfell",010040900AF46000,status-playable,playable,2021-06-16 17:18:44.000 +"Immortal Planet",01007BC00E55A000,status-playable,playable,2022-09-20 13:40:43.000 +"Immortal Realms: Vampire Wars",010079501025C000,nvdec;status-playable,playable,2021-06-17 17:41:46.000 +"Immortal Redneck - 0100F400435A000",,nvdec;status-playable,playable,2021-01-27 18:36:28.000 +"Immortals Fenyx Rising",01004A600EC0A000,gpu;status-menus;crash,menus,2023-02-24 16:19:55.000 +"IMPLOSION",0100737003190000,status-playable;nvdec,playable,2021-12-12 03:52:13.000 +"In rays of the Light",0100A760129A0000,status-playable,playable,2021-04-07 15:18:07.000 +"Indie Darling Bundle Vol. 3",01004DE011076000,status-playable,playable,2022-10-02 13:01:57.000 +"Indie Puzzle Bundle Vol 1",0100A2101107C000,status-playable,playable,2022-09-27 22:23:21.000 +"Indiecalypse",,nvdec;status-playable,playable,2020-06-11 20:19:09.000 +"Indivisible",01001D3003FDE000,status-playable;nvdec,playable,2022-09-29 15:20:57.000 +"Inertial Drift",01002BD00F626000,status-playable;online-broken,playable,2022-10-11 12:22:19.000 +"Infernium",,UE4;regression;status-nothing,nothing,2021-01-13 16:36:07.000 +"Infinite Minigolf",,online;status-playable,playable,2020-09-29 12:26:25.000 +"Infliction",01001CB00EFD6000,status-playable;nvdec;UE4,playable,2022-10-02 13:15:55.000 +"INMOST",0100F1401161E000,status-playable,playable,2022-10-05 11:27:40.000 +"InnerSpace",,status-playable,playable,2021-01-13 19:36:14.000 +"INSIDE",0100D2D009028000,status-playable,playable,2021-12-25 20:24:56.000 +"Inside Grass: A little adventure",,status-playable,playable,2020-10-15 15:26:27.000 +"INSTANT SPORTS",010099700D750000,status-playable,playable,2022-09-09 12:59:40.000 +"Instant Sports Summer Games",,gpu;status-menus,menus,2020-09-02 13:39:28.000 +"Instant Sports Tennis",010031B0145B8000,status-playable,playable,2022-10-28 16:42:17.000 +"Interrogation: You will be deceived",010041501005E000,status-playable,playable,2022-10-05 11:40:10.000 +"Into the Dead 2",01000F700DECE000,status-playable;nvdec,playable,2022-09-14 12:36:14.000 +"INVERSUS Deluxe",01001D0003B96000,status-playable;online-broken,playable,2022-08-02 14:35:36.000 +"Invisible Fist",,status-playable,playable,2020-08-08 13:25:52.000 +"Invisible, Inc.",,crash;status-nothing,nothing,2021-01-29 16:28:13.000 +"Invisigun Reloaded",01005F400E644000,gpu;online;status-ingame,ingame,2021-06-10 12:13:24.000 +"Ion Fury",010041C00D086000,status-ingame;vulkan-backend-bug,ingame,2022-08-07 08:27:51.000 +"Iridium",010095C016C14000,status-playable,playable,2022-08-05 23:19:53.000 +"Iris Fall",0100945012168000,status-playable;nvdec,playable,2022-10-18 13:40:22.000 +"Iris School of Wizardry - Vinculum Hearts -",0100AD300B786000,status-playable,playable,2022-12-05 13:11:15.000 +"Iron Wings",01005270118D6000,slow;status-ingame,ingame,2022-08-07 08:32:57.000 +"Ironcast",,status-playable,playable,2021-01-13 13:54:29.000 +"Irony Curtain: From Matryoshka with Love",0100E5700CD56000,status-playable,playable,2021-06-04 20:12:37.000 +"Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate",,status-playable,playable,2020-08-31 13:52:21.000 +"ISLAND",0100F06013710000,status-playable,playable,2021-05-06 15:11:47.000 +"Island Flight Simulator",010077900440A000,status-playable,playable,2021-06-04 19:42:46.000 +"Island Saver",,nvdec;status-playable,playable,2020-10-23 22:07:02.000 +"Isoland",,status-playable,playable,2020-07-26 13:48:16.000 +"Isoland 2: Ashes of Time",,status-playable,playable,2020-07-26 14:29:05.000 +"Isolomus",010001F0145A8000,services;status-boots,boots,2021-11-03 07:48:21.000 +"ITTA",010068700C70A000,status-playable,playable,2021-06-07 03:15:52.000 +"Ittle Dew 2+",,status-playable,playable,2020-11-17 11:44:32.000 +"IxSHE Tell",0100DEB00F12A000,status-playable;nvdec,playable,2022-12-02 18:00:42.000 +"Izneo",0100D8E00C874000,status-menus;online-broken,menus,2022-08-06 15:56:23.000 +"James Pond Operation Robocod",,status-playable,playable,2021-01-13 09:48:45.000 +"Japanese Rail Sim: Journey to Kyoto",,nvdec;status-playable,playable,2020-07-29 17:14:21.000 +"JDM Racing",,status-playable,playable,2020-08-03 17:02:37.000 +"Jenny LeClue - Detectivu",,crash;status-nothing,nothing,2020-12-15 21:07:07.000 +"Jeopardy!",01006E400AE2A000,audout;nvdec;online;status-playable,playable,2021-02-22 13:53:46.000 +"Jet Kave Adventure",0100E4900D266000,status-playable;nvdec,playable,2022-09-09 14:50:39.000 +"Jet Lancer",0100F3500C70C000,gpu;status-ingame,ingame,2021-02-15 18:15:47.000 +"Jettomero: Hero of the Universe",0100A5A00AF26000,status-playable,playable,2022-08-02 14:46:43.000 +"Jiffy",01008330134DA000,gpu;status-ingame;opengl,ingame,2024-02-03 23:11:24.000 +"Jim Is Moving Out!",,deadlock;status-ingame,ingame,2020-06-03 22:05:19.000 +"Jinrui no Ninasama he",0100F4D00D8BE000,status-ingame;crash,ingame,2023-03-07 02:04:17.000 +"Jisei: The First Case HD",010038D011F08000,audio;status-playable,playable,2022-10-05 11:43:33.000 +"Job the Leprechaun",,status-playable,playable,2020-06-05 12:10:06.000 +"John Wick Hex",01007090104EC000,status-playable,playable,2022-08-07 08:29:12.000 +"Johnny Turbo's Arcade Gate of Doom",010069B002CDE000,status-playable,playable,2022-07-29 12:17:50.000 +"Johnny Turbo's Arcade Two Crude Dudes",010080D002CC6000,status-playable,playable,2022-08-02 20:29:50.000 +"Johnny Turbo's Arcade Wizard Fire",0100D230069CC000,status-playable,playable,2022-08-02 20:39:15.000 +"JoJos Bizarre Adventure All-Star Battle R",01008120128C2000,status-playable,playable,2022-12-03 10:45:10.000 +"Journey to the Savage Planet",01008B60117EC000,status-playable;nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12.000 +"Juicy Realm - 0100C7600F654000",0100C7600F654000,status-playable,playable,2023-02-21 19:16:20.000 +"Jumanji",,UE4;crash;status-boots,boots,2020-07-12 13:52:25.000 +"JUMP FORCE Deluxe Edition",0100183010F12000,status-playable;nvdec;online-broken;UE4,playable,2023-10-01 15:56:05.000 +"Jump King",,status-playable,playable,2020-06-09 10:12:39.000 +"Jump Rope Challenge",0100B9C012706000,services;status-boots;crash;Needs Update,boots,2023-02-27 01:24:28.000 +"Jumping Joe & Friends",,status-playable,playable,2021-01-13 17:09:42.000 +"JunkPlanet",,status-playable,playable,2020-11-09 12:38:33.000 +"Jurassic Pinball",0100CE100A826000,status-playable,playable,2021-06-04 19:02:37.000 +"Jurassic World Evolution Complete Edition",010050A011344000,cpu;status-menus;crash,menus,2023-08-04 18:06:54.000 +"Just Dance 2017",0100BCE000598000,online;status-playable,playable,2021-03-05 09:46:01.000 +"Just Dance 2019",,gpu;online;status-ingame,ingame,2021-02-27 17:21:27.000 +"JUST DANCE 2020",0100DDB00DB38000,status-playable,playable,2022-01-24 13:31:57.000 +"Just Dance 2022",0100EA6014BB8000,gpu;services;status-ingame;crash;Needs Update,ingame,2022-10-28 11:01:53.000 +"Just Dance 2023",0100BEE017FC0000,status-nothing,nothing,2023-06-05 16:44:54.000 +"Just Die Already",0100AC600CF0A000,status-playable;UE4,playable,2022-12-13 13:37:50.000 +"Just Glide",,status-playable,playable,2020-08-07 17:38:10.000 +"Just Shapes & Beats",,ldn-untested;nvdec;status-playable,playable,2021-02-09 12:18:36.000 +"JYDGE",010035A0044E8000,status-playable,playable,2022-08-02 21:20:13.000 +"Kagamihara/Justice",0100D58012FC2000,crash;status-nothing,nothing,2021-06-21 16:41:29.000 +"Kairobotica",0100D5F00EC52000,status-playable,playable,2021-05-06 12:17:56.000 +"KAMEN RIDER CLIMAX SCRAMBLE",0100BDC00A664000,status-playable;nvdec;ldn-untested,playable,2024-07-03 08:51:11.000 +"KAMEN RIDER memory of heroez / Premium Sound Edition",0100A9801180E000,status-playable,playable,2022-12-06 03:14:26.000 +"KAMIKO",,status-playable,playable,2020-05-13 12:48:57.000 +"Kangokuto Mary Skelter Finale",,audio;crash;status-ingame,ingame,2021-01-09 22:39:28.000 +"Katakoi Contrast - collection of branch -",01007FD00DB20000,status-playable;nvdec,playable,2022-12-09 09:41:26.000 +"Katamari Damacy REROLL",0100D7000C2C6000,status-playable,playable,2022-08-02 21:35:05.000 +"KATANA KAMI: A Way of the Samurai Story",0100F9800EDFA000,slow;status-playable,playable,2022-04-09 10:40:16.000 +"Katana ZERO",010029600D56A000,status-playable,playable,2022-08-26 08:09:09.000 +"Kaze and the Wild Masks",010038B00F142000,status-playable,playable,2021-04-19 17:11:03.000 +"Keen: One Girl Army",,status-playable,playable,2020-12-14 23:19:52.000 +"Keep Talking and Nobody Explodes",01008D400A584000,status-playable,playable,2021-02-15 18:05:21.000 +"Kemono Friends Picross",01004B100BDA2000,status-playable,playable,2023-02-08 15:54:34.000 +"Kentucky Robo Chicken",,status-playable,playable,2020-05-12 20:54:17.000 +"Kentucky Route Zero [0100327005C94000]",0100327005C94000,status-playable,playable,2024-04-09 23:22:46.000 +"KeroBlaster",,status-playable,playable,2020-05-12 20:42:52.000 +"Kholat",0100F680116A2000,UE4;nvdec;status-playable,playable,2021-06-17 11:52:48.000 +"Kid Tripp",,crash;status-nothing,nothing,2020-10-15 07:41:23.000 +"Kill la Kill - IF",,status-playable,playable,2020-06-09 14:47:08.000 +"Kill The Bad Guy",,status-playable,playable,2020-05-12 22:16:10.000 +"Killer Queen Black",0100F2900B3E2000,ldn-untested;online;status-playable,playable,2021-04-08 12:46:18.000 +"Kin'iro no Corda Octave",,status-playable,playable,2020-09-22 13:23:12.000 +"Kine",010089000F0E8000,status-playable;UE4,playable,2022-09-14 14:28:37.000 +"King Lucas",0100E6B00FFBA000,status-playable,playable,2022-09-21 19:43:23.000 +"King Oddball",,status-playable,playable,2020-05-13 13:47:57.000 +"King of Seas",01008D80148C8000,status-playable;nvdec;UE4,playable,2022-10-28 18:29:41.000 +"King of Seas Demo",0100515014A94000,status-playable;nvdec;UE4,playable,2022-10-28 18:09:31.000 +"KINGDOM HEARTS Melody of Memory",,crash;nvdec;status-ingame,ingame,2021-03-03 17:34:12.000 +"Kingdom Rush",0100A280121F6000,status-nothing;32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00.000 +"Kingdom: New Lands",0100BD9004AB6000,status-playable,playable,2022-08-02 21:48:50.000 +"Kingdom: Two Crowns",,status-playable,playable,2020-05-16 19:36:21.000 +"Kingdoms of Amalur: Re-Reckoning",0100EF50132BE000,status-playable,playable,2023-08-10 13:05:08.000 +"Kirby and the Forgotten Land",01004D300C5AE000,gpu;status-ingame,ingame,2024-03-11 17:11:21.000 +"Kirby and the Forgotten Land (Demo version)",010091201605A000,status-playable;demo,playable,2022-08-21 21:03:01.000 +"Kirby Fighters 2",0100227010460000,ldn-works;online;status-playable,playable,2021-06-17 13:06:39.000 +"Kirby Star Allies",01007E3006DDA000,status-playable;nvdec,playable,2023-11-15 17:06:19.000 +"Kirby’s Dream Buffet",0100A8E016236000,status-ingame;crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44.000 +"Kirby’s Return to Dream Land Deluxe",01006B601380E000,status-playable,playable,2024-05-16 19:58:04.000 +"Kirby’s Return to Dream Land Deluxe - Demo",010091D01A57E000,status-playable;demo,playable,2023-02-18 17:21:55.000 +"Kissed by the Baddest Bidder",0100F3A00F4CA000,gpu;status-ingame;nvdec,ingame,2022-12-04 20:57:11.000 +"Kitten Squad",01000C900A136000,status-playable;nvdec,playable,2022-08-03 12:01:59.000 +"Klondike Solitaire",,status-playable,playable,2020-12-13 16:17:27.000 +"Knight Squad",,status-playable,playable,2020-08-09 16:54:51.000 +"Knight Squad 2",010024B00E1D6000,status-playable;nvdec;online-broken,playable,2022-10-28 18:38:09.000 +"Knight Terrors",,status-playable,playable,2020-05-13 13:09:22.000 +"Knightin'+",,status-playable,playable,2020-08-31 18:18:21.000 +"Knights of Pen and Paper +1 Deluxier Edition",,status-playable,playable,2020-05-11 21:46:32.000 +"Knights of Pen and Paper 2 Deluxiest Edition",,status-playable,playable,2020-05-13 14:07:00.000 +"Knock-Knock",010001A00A1F6000,nvdec;status-playable,playable,2021-02-01 20:03:19.000 +"Knockout City",01009EF00DDB4000,services;status-boots;online-broken,boots,2022-12-09 09:48:58.000 +"Koa and the Five Pirates of Mara",0100C57019BA2000,gpu;status-ingame,ingame,2024-07-11 16:14:44.000 +"Koi DX",,status-playable,playable,2020-05-11 21:37:51.000 +"Koi no Hanasaku Hyakkaen",,32-bit;gpu;nvdec;status-ingame,ingame,2020-10-03 14:17:10.000 +"Koloro",01005D200C9AA000,status-playable,playable,2022-08-03 12:34:02.000 +"Kona",0100464009294000,status-playable,playable,2022-08-03 12:48:19.000 +"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",010016C011AAA000,status-playable,playable,2023-04-26 09:51:08.000 +"Koral",,UE4;crash;gpu;status-menus,menus,2020-11-16 12:41:26.000 +"KORG Gadget",,status-playable,playable,2020-05-13 13:57:24.000 +"Kotodama: The 7 Mysteries of Fujisawa",010046600CCA4000,audout;status-playable,playable,2021-02-01 20:28:37.000 +"KukkoroDays",010022801242C000,status-menus;crash,menus,2021-11-25 08:52:56.000 +"KUNAI",010035A00DF62000,status-playable;nvdec,playable,2022-09-20 13:48:34.000 +"Kunio-Kun: The World Classics Collection",010060400ADD2000,online;status-playable,playable,2021-01-29 20:21:46.000 +"KUUKIYOMI 2: Consider It More! - New Era",010037500F282000,status-nothing;crash;Needs Update,nothing,2021-11-02 09:34:40.000 +"Kwaidan ~Azuma manor story~",0100894011F62000,status-playable,playable,2022-10-05 12:50:44.000 +"L.A. Noire",0100830004FB6000,status-playable,playable,2022-08-03 16:49:35.000 +"L.F.O. - Lost Future Omega -",,UE4;deadlock;status-boots,boots,2020-10-16 12:16:44.000 +"L.O.L. Surprise! Remix: We Rule the World",0100F2B0123AE000,status-playable,playable,2022-10-11 22:48:03.000 +"La Mulana 2",010038000F644000,status-playable,playable,2022-09-03 13:45:57.000 +"LA-MULANA",010026000F662800,gpu;status-ingame,ingame,2022-08-12 01:06:21.000 +"LA-MULANA 1 & 2",0100E5D00F4AE000,status-playable,playable,2022-09-22 17:56:36.000 +"Labyrinth of Refrain: Coven of Dusk",010058500B3E0000,status-playable,playable,2021-02-15 17:38:48.000 +"Labyrinth of the Witch",,status-playable,playable,2020-11-01 14:42:37.000 +"Langrisser I and II",0100BAB00E8C0000,status-playable,playable,2021-02-19 15:46:10.000 +"Lanota",,status-playable,playable,2019-09-04 01:58:14.000 +"Lapis x Labyrinth",01005E000D3D8000,status-playable,playable,2021-02-01 18:58:08.000 +"Laraan",,status-playable,playable,2020-12-16 12:45:48.000 +"Last Day of June",0100DA700879C000,nvdec;status-playable,playable,2021-06-08 11:35:32.000 +"LAST FIGHT",01009E100BDD6000,status-playable,playable,2022-09-20 13:54:55.000 +"Late Shift",0100055007B86000,nvdec;status-playable,playable,2021-02-01 18:43:58.000 +"Later Daters",,status-playable,playable,2020-07-29 16:35:45.000 +"Layers of Fear 2",01001730144DA000,status-playable;nvdec;UE4,playable,2022-10-28 18:49:52.000 +"Layers of Fear: Legacy",,nvdec;status-playable,playable,2021-02-15 16:30:41.000 +"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",0100CE500D226000,status-playable;nvdec;opengl,playable,2022-09-14 15:01:57.000 +"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",0100FDB00AA80000,gpu;status-ingame;nvdec;opengl,ingame,2022-09-14 15:15:55.000 +"League of Evil",01009C100390E000,online;status-playable,playable,2021-06-08 11:23:27.000 +"Left-Right: The Mansion",,status-playable,playable,2020-05-13 13:02:12.000 +"Legacy of Kain™ Soul Reaver 1&2 Remastered",010079901C898000,status-playable,playable,2025-01-07 05:50:01.000 +"Legend of Kay Anniversary",01002DB007A96000,nvdec;status-playable,playable,2021-01-29 18:38:29.000 +"Legend of the Skyfish",,status-playable,playable,2020-06-24 13:04:22.000 +"Legend of the Tetrarchs",,deadlock;status-ingame,ingame,2020-07-10 07:54:03.000 +"Legendary Eleven",0100A73006E74000,status-playable,playable,2021-06-08 12:09:03.000 +"Legendary Fishing",0100A7700B46C000,online;status-playable,playable,2021-04-14 15:08:46.000 +"LEGO 2K Drive",0100739018020000,gpu;status-ingame;ldn-works,ingame,2024-04-09 02:05:12.000 +"Lego City Undercover",01003A30012C0000,status-playable;nvdec,playable,2024-09-30 08:44:27.000 +"LEGO DC Super-Villains",010070D009FEC000,status-playable,playable,2021-05-27 18:10:37.000 +"LEGO Harry Potter Collection",010052A00B5D2000,status-ingame;crash,ingame,2024-01-31 10:28:07.000 +"LEGO Horizon Adventures",010073C01AF34000,status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56.000 +"LEGO Jurassic World",01001C100E772000,status-playable,playable,2021-05-27 17:00:20.000 +"LEGO Marvel Super Heroes",01006F600FFC8000,status-playable,playable,2024-09-10 19:02:19.000 +"LEGO Marvel Super Heroes 2",0100D3A00409E000,status-nothing;crash,nothing,2023-03-02 17:12:33.000 +"LEGO Star Wars: The Skywalker Saga",010042D00D900000,gpu;slow;status-ingame,ingame,2024-04-13 20:08:46.000 +"LEGO The Incredibles",0100A01006E00000,status-nothing;crash,nothing,2022-08-03 18:36:59.000 +"LEGO Worlds",,crash;slow;status-ingame,ingame,2020-07-17 13:35:39.000 +"Legrand Legacy: Tale of the Fatebounds",,nvdec;status-playable,playable,2020-07-26 12:27:36.000 +"Leisure Suit Larry - Wet Dreams Dry Twice",010031A0135CA000,status-playable,playable,2022-10-28 19:00:57.000 +"Leisure Suit Larry: Wet Dreams Don't Dry",0100A8E00CAA0000,status-playable,playable,2022-08-03 19:51:44.000 +"Lethal League Blaze",01003AB00983C000,online;status-playable,playable,2021-01-29 20:13:31.000 +"Letter Quest Remastered",,status-playable,playable,2020-05-11 21:30:34.000 +"Letters - a written adventure",0100CE301678E800,gpu;status-ingame,ingame,2023-02-21 20:12:38.000 +"Levelhead",,online;status-ingame,ingame,2020-10-18 11:44:51.000 +"Levels+",,status-playable,playable,2020-05-12 13:51:39.000 +"Liberated",0100C8000F146000,gpu;status-ingame;nvdec,ingame,2024-07-04 04:58:24.000 +"Liberated: Enhanced Edition",01003A90133A6000,gpu;status-ingame;nvdec,ingame,2024-07-04 04:48:48.000 +"Lichtspeer: Double Speer Edition",,status-playable,playable,2020-05-12 16:43:09.000 +"Liege Dragon",010041F0128AE000,status-playable,playable,2022-10-12 10:27:03.000 +"Life Goes On",010006300AFFE000,status-playable,playable,2021-01-29 19:01:20.000 +"Life is Strange 2",0100FD101186C000,status-playable;UE4,playable,2024-07-04 05:05:58.000 +"Life is Strange Remastered",0100DC301186A000,status-playable;UE4,playable,2022-10-03 16:54:44.000 +"Life is Strange: Before the Storm Remastered",010008501186E000,status-playable,playable,2023-09-28 17:15:44.000 +"Life is Strange: True Colors [0100500012AB4000]",0100500012AB4000,gpu;status-ingame;UE4,ingame,2024-04-08 16:11:52.000 +"Life of Boris: Super Slav",,status-ingame,ingame,2020-12-17 11:40:05.000 +"Life of Fly",0100B3A0135D6000,status-playable,playable,2021-01-25 23:41:07.000 +"Life of Fly 2",010069A01506E000,slow;status-playable,playable,2022-10-28 19:26:52.000 +"Lifeless Planet",01005B6008132000,status-playable,playable,2022-08-03 21:25:13.000 +"Light Fall",,nvdec;status-playable,playable,2021-01-18 14:55:36.000 +"Light Tracer",010087700D07C000,nvdec;status-playable,playable,2021-05-05 19:15:43.000 +"LIMBO",01009C8009026000,cpu;status-boots;32-bit,boots,2023-06-28 15:39:19.000 +"Linelight",,status-playable,playable,2020-12-17 12:18:07.000 +"Lines X",,status-playable,playable,2020-05-11 15:28:30.000 +"Lines XL",,status-playable,playable,2020-08-31 17:48:23.000 +"Little Busters! Converted Edition",0100943010310000,status-playable;nvdec,playable,2022-09-29 15:34:56.000 +"Little Dragons Cafe",,status-playable,playable,2020-05-12 00:00:52.000 +"LITTLE FRIENDS -DOGS & CATS-",,status-playable,playable,2020-11-12 12:45:51.000 +"Little Inferno",,32-bit;gpu;nvdec;status-ingame,ingame,2020-12-17 21:43:56.000 +"Little Misfortune",0100E7000E826000,nvdec;status-playable,playable,2021-02-23 20:39:44.000 +"Little Mouse's Encyclopedia",0100FE0014200000,status-playable,playable,2022-10-28 19:38:58.000 +"Little Nightmares",01002FC00412C000,status-playable;nvdec;UE4,playable,2022-08-03 21:45:35.000 +"Little Nightmares II",010097100EDD6000,status-playable;UE4,playable,2023-02-10 18:24:44.000 +"Little Nightmares II DEMO",010093A0135D6000,status-playable;UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20.000 +"Little Noah: Scion of Paradise",0100535014D76000,status-playable;opengl-backend-bug,playable,2022-09-14 04:17:13.000 +"Little Racer",0100E6D00E81C000,status-playable,playable,2022-10-18 16:41:13.000 +"Little Shopping",,status-playable,playable,2020-10-03 16:34:35.000 +"Little Town Hero",,status-playable,playable,2020-10-15 23:28:48.000 +"Little Triangle",,status-playable,playable,2020-06-17 14:46:26.000 +"LIVE A LIVE",0100CF801776C000,status-playable;UE4;amd-vendor-bug,playable,2023-02-05 15:12:07.000 +"LOCO-SPORTS",0100BA000FC9C000,status-playable,playable,2022-09-20 14:09:30.000 +"Lode Runner Legacy",,status-playable,playable,2021-01-10 14:10:28.000 +"Lofi Ping Pong",,crash;status-ingame,ingame,2020-12-15 20:09:22.000 +"Lone Ruin",0100B6D016EE6000,status-ingame;crash;nvdec,ingame,2023-01-17 06:41:19.000 +"Lonely Mountains Downhill",0100A0C00E0DE000,status-playable;online-broken,playable,2024-07-04 05:08:11.000 +"LOOPERS",010062A0178A8000,gpu;slow;status-ingame;crash,ingame,2022-06-17 19:21:45.000 +"Lost Horizon",,status-playable,playable,2020-09-01 13:41:22.000 +"Lost Horizon 2",,nvdec;status-playable,playable,2020-06-16 12:02:12.000 +"Lost in Random",01005FE01291A000,gpu;status-ingame,ingame,2022-12-18 07:09:28.000 +"Lost Lands 3: The Golden Curse",0100156014C6A000,status-playable;nvdec,playable,2022-10-24 16:30:00.000 +"Lost Lands: Dark Overlord",0100BDD010AC8000,status-playable,playable,2022-10-03 11:52:58.000 +"Lost Lands: The Four Horsemen",0100133014510000,status-playable;nvdec,playable,2022-10-24 16:41:00.000 +"LOST ORBIT: Terminal Velocity",010054600AC74000,status-playable,playable,2021-06-14 12:21:12.000 +"Lost Phone Stories",,services;status-ingame,ingame,2020-04-05 23:17:33.000 +"Lost Ruins",01008AD013A86800,gpu;status-ingame,ingame,2023-02-19 14:09:00.000 +"LOST SPHEAR",,status-playable,playable,2021-01-10 06:01:21.000 +"Lost Words: Beyond the Page",0100018013124000,status-playable,playable,2022-10-24 17:03:21.000 +"Love Letter from Thief X",0100D36011AD4000,gpu;status-ingame;nvdec,ingame,2023-11-14 03:55:31.000 +"Ludo Mania",,crash;services;status-nothing,nothing,2020-04-03 00:33:47.000 +"Luigi's Mansion 2 HD",010048701995E000,status-ingame;ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27.000 +"Luigi's Mansion 3",0100DCA0064A6000,gpu;slow;status-ingame;Needs Update;ldn-works,ingame,2024-09-27 22:17:36.000 +"Lumini",,status-playable,playable,2020-08-09 20:45:09.000 +"Lumo",0100FF00042EE000,status-playable;nvdec,playable,2022-02-11 18:20:30.000 +"Lust for Darkness",,nvdec;status-playable,playable,2020-07-26 12:09:15.000 +"Lust for Darkness: Dawn Edition",0100F0B00F68E000,nvdec;status-playable,playable,2021-06-16 13:47:46.000 +"LUXAR",0100EC2011A80000,status-playable,playable,2021-03-04 21:11:57.000 +"Machi Knights Blood bagos",0100F2400D434000,status-playable;nvdec;UE4,playable,2022-09-14 15:08:04.000 +"Mad Carnage",,status-playable,playable,2021-01-10 13:00:07.000 +"Mad Father",,status-playable,playable,2020-11-12 13:22:10.000 +"Mad Games Tycoon",010061E00EB1E000,status-playable,playable,2022-09-20 14:23:14.000 +"Magazine Mogul",01004A200E722000,status-playable;loader-allocator,playable,2022-10-03 12:05:34.000 +"MagiCat",,status-playable,playable,2020-12-11 15:22:07.000 +"Magicolors",,status-playable,playable,2020-08-12 18:39:11.000 +"Mahjong Solitaire Refresh",01008C300B624000,status-boots;crash,boots,2022-12-09 12:02:55.000 +"Mahluk dark demon",010099A0145E8000,status-playable,playable,2021-04-15 13:14:24.000 +"Mainlining",,status-playable,playable,2020-06-05 01:02:00.000 +"Maitetsu: Pure Station",0100D9900F220000,status-playable,playable,2022-09-20 15:12:49.000 +"Makai Senki Disgaea 7",0100A78017BD6000,status-playable,playable,2023-10-05 00:22:18.000 +"Mana Spark",,status-playable,playable,2020-12-10 13:41:01.000 +"Maneater",010093D00CB22000,status-playable;nvdec;UE4,playable,2024-05-21 16:11:57.000 +"Manifold Garden",,status-playable,playable,2020-10-13 20:27:13.000 +"Manticore - Galaxy on Fire",0100C9A00952A000,status-boots;crash;nvdec,boots,2024-02-04 04:37:24.000 +"Mantis Burn Racing",0100E98002F6E000,status-playable;online-broken;ldn-broken,playable,2024-09-02 02:13:04.000 +"Marble Power Blast",01008E800D1FE000,status-playable,playable,2021-06-04 16:00:02.000 +"Märchen Forest - 0100B201D5E000",,status-playable,playable,2021-02-04 21:33:34.000 +"Marco & The Galaxy Dragon Demo",0100DA7017C9E000,gpu;status-ingame;demo,ingame,2023-06-03 13:05:33.000 +"Mario & Luigi: Brothership",01006D0017F7A000,status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00.000 +"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",010002C00C270000,status-ingame;crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55.000 +"Mario + Rabbids Kingdom Battle",010067300059A000,slow;status-playable;opengl-backend-bug,playable,2024-05-06 10:16:54.000 +"Mario + Rabbids® Sparks of Hope",0100317013770000,gpu;status-ingame;Needs Update,ingame,2024-06-20 19:56:19.000 +"Mario Golf: Super Rush",0100C9C00E25C000,gpu;status-ingame,ingame,2024-08-18 21:31:48.000 +"Mario Kart 8 Deluxe",0100152000022000,32-bit;status-playable;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17.000 +"Mario Kart Live: Home Circuit",0100ED100BA3A000,services;status-nothing;crash;Needs More Attention,nothing,2022-12-07 22:36:52.000 +"Mario Party Superstars",01006FE013472000,gpu;status-ingame;ldn-works;mac-bug,ingame,2024-05-16 11:23:34.000 +"Mario Strikers: Battle League Football",010019401051C000,status-boots;crash;nvdec,boots,2024-05-07 06:23:56.000 +"Mario Tennis Aces",0100BDE00862A000,gpu;status-ingame;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40.000 +"Mario vs. Donkey Kong",0100B99019412000,status-playable,playable,2024-05-04 21:22:39.000 +"Mario vs. Donkey Kong™ Demo",0100D9E01DBB0000,status-playable,playable,2024-02-18 10:40:06.000 +"Mark of the Ninja Remastered",01009A700A538000,status-playable,playable,2022-08-04 15:48:30.000 +"Marooners",010044600FDF0000,status-playable;nvdec;online-broken,playable,2022-10-18 21:35:26.000 +"Marvel Ultimate Alliance 3: The Black Order",010060700AC50000,status-playable;nvdec;ldn-untested,playable,2024-02-14 19:51:51.000 +"Mary Skelter 2",01003DE00C95E000,status-ingame;crash;regression,ingame,2023-09-12 07:37:28.000 +"Masquerada: Songs and Shadows",0100113008262000,status-playable,playable,2022-09-20 15:18:54.000 +"Master Detective Archives: Rain Code",01004800197F0000,gpu;status-ingame,ingame,2024-04-19 20:11:09.000 +"Masters of Anima",0100CC7009196000,status-playable;nvdec,playable,2022-08-04 16:00:09.000 +"Mathland",,status-playable,playable,2020-09-01 15:40:06.000 +"Max & The Book of Chaos",,status-playable,playable,2020-09-02 12:24:43.000 +"Max: The Curse Of Brotherhood",01001C9007614000,status-playable;nvdec,playable,2022-08-04 16:33:04.000 +"Maze",,status-playable,playable,2020-12-17 16:13:58.000 +"MEANDERS",0100EEF00CBC0000,UE4;gpu;status-ingame,ingame,2021-06-11 19:19:33.000 +"Mech Rage",,status-playable,playable,2020-11-18 12:30:16.000 +"Mecho Tales",0100C4F005EB4000,status-playable,playable,2022-08-04 17:03:19.000 +"Mechstermination Force",0100E4600D31A000,status-playable,playable,2024-07-04 05:39:15.000 +"Medarot Classics Plus Kabuto Ver",,status-playable,playable,2020-11-21 11:31:18.000 +"Medarot Classics Plus Kuwagata Ver",,status-playable,playable,2020-11-21 11:30:40.000 +"Mega Mall Story",0100BBC00CB9A000,slow;status-playable,playable,2022-08-04 17:10:58.000 +"Mega Man 11",0100B0C0086B0000,status-playable,playable,2021-04-26 12:07:53.000 +"Mega Man Battle Network Legacy Collection Vol. 2",0100734016266000,status-playable,playable,2023-08-03 18:04:32.000 +"Mega Man Legacy Collection Vol.1",01002D4007AE0000,gpu;status-ingame,ingame,2021-06-03 18:17:17.000 +"Mega Man X Legacy Collection",,audio;crash;services;status-menus,menus,2020-12-04 04:30:17.000 +"Megabyte Punch",,status-playable,playable,2020-10-16 14:07:18.000 +"Megadimension Neptunia VII",,32-bit;nvdec;status-playable,playable,2020-12-17 20:56:03.000 +"Megaman Battle Network Legacy Collection Vol 1",010038E016264000,status-playable,playable,2023-04-25 03:55:57.000 +"Megaman Legacy Collection 2",,status-playable,playable,2021-01-06 08:47:59.000 +"MEGAMAN ZERO/ZX LEGACY COLLECTION",010025C00D410000,status-playable,playable,2021-06-14 16:17:32.000 +"Megaquarium",010082B00E8B8000,status-playable,playable,2022-09-14 16:50:00.000 +"Megaton Rainfall",010005A00B312000,gpu;status-boots;opengl,boots,2022-08-04 18:29:43.000 +"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",0100EA100DF92000,32-bit;status-playable;nvdec,playable,2022-12-05 13:19:12.000 +"Mekorama",0100B360068B2000,gpu;status-boots,boots,2021-06-17 16:37:21.000 +"Melbits World",01000FA010340000,status-menus;nvdec;online,menus,2021-11-26 13:51:22.000 +"Melon Journey",0100F68019636000,status-playable,playable,2023-04-23 21:20:01.000 +"Memories Off -Innocent Fille- for Dearest",,status-playable,playable,2020-08-04 07:31:22.000 +"Memory Lane",010062F011E7C000,status-playable;UE4,playable,2022-10-05 14:31:03.000 +"Meow Motors",,UE4;gpu;status-ingame,ingame,2020-12-18 00:24:01.000 +"Mercenaries Saga Chronicles",,status-playable,playable,2021-01-10 12:48:19.000 +"Mercenaries Wings The False Phoenix",,crash;services;status-nothing,nothing,2020-05-08 22:42:12.000 +"Mercenary Kings",,online;status-playable,playable,2020-10-16 13:05:58.000 +"Merchants of Kaidan",0100E5000D3CA000,status-playable,playable,2021-04-15 11:44:28.000 +"METAGAL",,status-playable,playable,2020-06-05 00:05:48.000 +"Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3",010047F01AA10000,services-horizon;status-menus,menus,2024-07-24 06:34:06.000 +"METAL MAX Xeno Reborn",0100E8F00F6BE000,status-playable,playable,2022-12-05 15:33:53.000 +"Metaloid: Origin",,status-playable,playable,2020-06-04 20:26:35.000 +"Metamorphosis",010055200E87E000,UE4;audout;gpu;nvdec;status-ingame,ingame,2021-06-16 16:18:11.000 +"Metro 2033 Redux",0100D4900E82C000,gpu;status-ingame,ingame,2022-11-09 10:53:13.000 +"Metro: Last Light Redux",0100F0400E850000,slow;status-ingame;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52.000 +"Metroid Dread",010093801237C000,status-playable,playable,2023-11-13 04:02:36.000 +"Metroid Prime Remastered",010012101468C000,gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15.000 +"Midnight Evil",0100A1200F20C000,status-playable,playable,2022-10-18 22:55:19.000 +"Mighty Fight Federation",0100C1E0135E0000,online;status-playable,playable,2021-04-06 18:39:56.000 +"Mighty Goose",0100AD701344C000,status-playable;nvdec,playable,2022-10-28 20:25:38.000 +"Mighty Gunvolt Burst",,status-playable,playable,2020-10-19 16:05:49.000 +"Mighty Switch Force! Collection",010060D00AE36000,status-playable,playable,2022-10-28 20:40:32.000 +"Miitopia",01003DA010E8A000,gpu;services-horizon;status-ingame,ingame,2024-09-06 10:39:13.000 +"Miitopia Demo",01007DA0140E8000,services;status-menus;crash;demo,menus,2023-02-24 11:50:58.000 +"Miles & Kilo",,status-playable,playable,2020-10-22 11:39:49.000 +"Millie",0100976008FBE000,status-playable,playable,2021-01-26 20:47:19.000 +"MIND Path to Thalamus",0100F5700C9A8000,UE4;status-playable,playable,2021-06-16 17:37:25.000 +"Minecraft",0100D71004694000,status-ingame;crash;ldn-broken,ingame,2024-09-29 12:08:59.000 +"Minecraft - Nintendo Switch Edition",01006BD001E06000,status-playable;ldn-broken,playable,2023-10-15 01:47:08.000 +"Minecraft Dungeons",01006C100EC08000,status-playable;nvdec;online-broken;UE4,playable,2024-06-26 22:10:43.000 +"Minecraft Legends",01007C6012CC8000,gpu;status-ingame;crash,ingame,2024-03-04 00:32:24.000 +"Minecraft: Story Mode - Season Two",01003EF007ABA000,status-playable;online-broken,playable,2023-03-04 00:30:50.000 +"Minecraft: Story Mode - The Complete Adventure",010059C002AC2000,status-boots;crash;online-broken,boots,2022-08-04 18:56:58.000 +"Minefield",0100B7500F756000,status-playable,playable,2022-10-05 15:03:29.000 +"Mini Motor Racing X",01003560119A6000,status-playable,playable,2021-04-13 17:54:49.000 +"Mini Trains",,status-playable,playable,2020-07-29 23:06:20.000 +"Miniature - The Story Puzzle",010039200EC66000,status-playable;UE4,playable,2022-09-14 17:18:50.000 +"Ministry of Broadcast",010069200EB80000,status-playable,playable,2022-08-10 00:31:16.000 +"Minna de Wai Wai! Spelunker",0100C3F000BD8000,status-nothing;crash,nothing,2021-11-03 07:17:11.000 +"Minoria",0100FAE010864000,status-playable,playable,2022-08-06 18:50:50.000 +"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",01005AB015994000,gpu;status-playable,playable,2022-03-28 02:22:24.000 +"Missile Dancer",0100CFA0138C8000,status-playable,playable,2021-01-31 12:22:03.000 +"Missing Features 2D",0100E3601495C000,status-playable,playable,2022-10-28 20:52:54.000 +"Mist Hunter",010059200CC40000,status-playable,playable,2021-06-16 13:58:58.000 +"Mittelborg: City of Mages",,status-playable,playable,2020-08-12 19:58:06.000 +"MLB The Show 22 Tech Test",0100A9F01776A000,services;status-nothing;crash;Needs Update;demo,nothing,2022-12-09 10:28:34.000 +"MLB The Show 24",0100E2E01C32E000,services-horizon;status-nothing,nothing,2024-03-31 04:54:11.000 +"MLB® The Show™ 22",0100876015D74000,gpu;slow;status-ingame,ingame,2023-04-25 06:28:43.000 +"MLB® The Show™ 23",0100913019170000,gpu;status-ingame,ingame,2024-07-26 00:56:50.000 +"MO:Astray",,crash;status-ingame,ingame,2020-12-11 21:45:44.000 +"Moai VI: Unexpected Guests",,slow;status-playable,playable,2020-10-27 16:40:20.000 +"Modern Combat Blackout",0100D8700B712000,crash;status-nothing,nothing,2021-03-29 19:47:15.000 +"Modern Tales: Age of Invention",010004900D772000,slow;status-playable,playable,2022-10-12 11:20:19.000 +"Moero Chronicle Hyper",0100B8500D570000,32-bit;status-playable,playable,2022-08-11 07:21:56.000 +"Moero Crystal H",01004EB0119AC000,32-bit;status-playable;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22.000 +"MOFUMOFU Sensen",0100B46017500000,gpu;status-menus,menus,2024-09-21 21:51:08.000 +"Momodora: Revere Under the Moonlight",01004A400C320000,deadlock;status-nothing,nothing,2022-02-06 03:47:43.000 +"Momonga Pinball Adventures",01002CC00BC4C000,status-playable,playable,2022-09-20 16:00:40.000 +"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",010093100DA04000,gpu;status-ingame,ingame,2023-09-22 10:21:46.000 +"MONKEY BARRELS",0100FBD00ED24000,status-playable,playable,2022-09-14 17:28:52.000 +"Monkey King: Master of the Clouds",,status-playable,playable,2020-09-28 22:35:48.000 +"Monomals",01003030161DC000,gpu;status-ingame,ingame,2024-08-06 22:02:51.000 +"Mononoke Slashdown",0100F3A00FB78000,status-menus;crash,menus,2022-05-04 20:55:47.000 +"Monopoly for Nintendo Switch",01007430037F6000,status-playable;nvdec;online-broken,playable,2024-02-06 23:13:01.000 +"Monopoly Madness",01005FF013DC2000,status-playable,playable,2022-01-29 21:13:52.000 +"Monster Blast",0100E2D0128E6000,gpu;status-ingame,ingame,2023-09-02 20:02:32.000 +"Monster Boy and the Cursed Kingdom",01006F7001D10000,status-playable;nvdec,playable,2022-08-04 20:06:32.000 +"Monster Bugs Eat People",,status-playable,playable,2020-07-26 02:05:34.000 +"Monster Energy Supercross - The Official Videogame",0100742007266000,status-playable;nvdec;UE4,playable,2022-08-04 20:25:00.000 +"Monster Energy Supercross - The Official Videogame 2",0100F8100B982000,status-playable;nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24.000 +"Monster Energy Supercross - The Official Videogame 3",010097800EA20000,UE4;audout;nvdec;online;status-playable,playable,2021-06-14 12:37:54.000 +"Monster Farm",0100E9900ED74000,32-bit;nvdec;status-playable,playable,2021-05-05 19:29:13.000 +"Monster Hunter Generation Ultimate",0100770008DD8000,32-bit;status-playable;online-broken;ldn-works,playable,2024-03-18 14:35:36.000 +"Monster Hunter Rise",0100B04011742000,gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59.000 +"Monster Hunter Rise Demo",010093A01305C000,status-playable;online-broken;ldn-works;demo,playable,2022-10-18 23:04:17.000 +"Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600",,services;status-ingame,ingame,2022-07-10 19:27:30.000 +"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",010042501329E000,status-playable;demo,playable,2022-11-13 22:20:26.000 +"Monster Hunter XX Demo",,32-bit;cpu;status-nothing,nothing,2020-03-22 10:12:28.000 +"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",0100C3800049C000,status-playable,playable,2024-07-21 14:08:09.000 +"MONSTER JAM CRUSH IT!™",010088400366E000,UE4;nvdec;online;status-playable,playable,2021-04-08 19:29:27.000 +"Monster Jam Steel Titans",010095C00F354000,status-menus;crash;nvdec;UE4,menus,2021-11-14 09:45:38.000 +"Monster Jam Steel Titans 2",010051B0131F0000,status-playable;nvdec;UE4,playable,2022-10-24 17:17:59.000 +"Monster Puzzle",,status-playable,playable,2020-09-28 22:23:10.000 +"Monster Sanctuary",,crash;status-ingame,ingame,2021-04-04 05:06:41.000 +"Monster Truck Championship",0100D30010C42000,slow;status-playable;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51.000 +"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",01004E10142FE000,crash;status-ingame,ingame,2021-07-23 10:56:44.000 +"Monstrum",010039F00EF70000,status-playable,playable,2021-01-31 11:07:26.000 +"Moonfall Ultimate",,nvdec;status-playable,playable,2021-01-17 14:01:25.000 +"Moorhuhn Jump and Run Traps and Treasures",0100E3D014ABC000,status-playable,playable,2024-03-08 15:10:02.000 +"Moorkuhn Kart 2",010045C00F274000,status-playable;online-broken,playable,2022-10-28 21:10:35.000 +"Morbid: The Seven Acolytes",010040E00F642000,status-playable,playable,2022-08-09 17:21:58.000 +"More Dark",,status-playable,playable,2020-12-15 16:01:06.000 +"Morphies Law",,UE4;crash;ldn-untested;nvdec;online;status-menus,menus,2020-11-22 17:05:29.000 +"Morphite",,status-playable,playable,2021-01-05 19:40:55.000 +"Mortal Kombat 1",01006560184E6000,gpu;status-ingame,ingame,2024-09-04 15:45:47.000 +"Mortal Kombat 11",0100F2200C984000,slow;status-ingame;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17.000 +"Mosaic",,status-playable,playable,2020-08-11 13:07:35.000 +"Moto GP 24",010040401D564000,gpu;status-ingame,ingame,2024-05-10 23:41:00.000 +"Moto Racer 4",01002ED00B01C000,UE4;nvdec;online;status-playable,playable,2021-04-08 19:09:11.000 +"Moto Rush GT",01003F200D0F2000,status-playable,playable,2022-08-05 11:23:55.000 +"MotoGP 18",0100361007268000,status-playable;nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45.000 +"MotoGP 19",01004B800D0E8000,status-playable;nvdec;online-broken;UE4,playable,2022-08-05 11:54:14.000 +"MotoGP 20",01001FA00FBBC000,status-playable;ldn-untested,playable,2022-09-29 17:58:01.000 +"MotoGP 21",01000F5013820000,gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08.000 +"Motorsport Manager for Nintendo Switch",01002A900D6D6000,status-playable;nvdec,playable,2022-08-05 12:48:14.000 +"Mountain Rescue Simulator",01009DB00D6E0000,status-playable,playable,2022-09-20 16:36:48.000 +"Moving Out",0100C4C00E73E000,nvdec;status-playable,playable,2021-06-07 21:17:24.000 +"Mr Blaster",0100D3300F110000,status-playable,playable,2022-09-14 17:56:24.000 +"Mr. DRILLER DrillLand",,nvdec;status-playable,playable,2020-07-24 13:56:48.000 +"Mr. Shifty",,slow;status-playable,playable,2020-05-08 15:28:16.000 +"Ms. Splosion Man",,online;status-playable,playable,2020-05-09 20:45:43.000 +"Muddledash",,services;status-ingame,ingame,2020-05-08 16:46:14.000 +"MudRunner - American Wilds",01009D200952E000,gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52.000 +"Mugsters",010073E008E6E000,status-playable,playable,2021-01-28 17:57:17.000 +"MUJO",,status-playable,playable,2020-05-08 16:31:04.000 +"Mulaka",0100211005E94000,status-playable,playable,2021-01-28 18:07:20.000 +"Mummy Pinball",010038B00B9AE000,status-playable,playable,2022-08-05 16:08:11.000 +"Muse Dash",,status-playable,playable,2020-06-06 14:41:29.000 +"Mushroom Quest",,status-playable,playable,2020-05-17 13:07:08.000 +"Mushroom Wars 2",,nvdec;status-playable,playable,2020-09-28 15:26:08.000 +"Music Racer",,status-playable,playable,2020-08-10 08:51:23.000 +"MUSNYX",,status-playable,playable,2020-05-08 14:24:43.000 +"Musou Orochi 2 Ultimate",,crash;nvdec;status-boots,boots,2021-04-09 19:39:16.000 +"Must Dash Amigos",0100F6000EAA8000,status-playable,playable,2022-09-20 16:45:56.000 +"Mutant Football League Dynasty Edition",0100C3E00ACAA000,status-playable;online-broken,playable,2022-08-05 17:01:51.000 +"Mutant Mudds Collection",01004BE004A86000,status-playable,playable,2022-08-05 17:11:38.000 +"Mutant Year Zero: Road to Eden",0100E6B00DEA4000,status-playable;nvdec;UE4,playable,2022-09-10 13:31:10.000 +"MX Nitro",0100161009E5C000,status-playable,playable,2022-09-27 22:34:33.000 +"MX vs ATV All Out",0100218011E7E000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46.000 +"MXGP3 - The Official Motocross Videogame",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 14:00:20.000 +"My Aunt is a Witch",01002C6012334000,status-playable,playable,2022-10-19 09:21:17.000 +"My Butler",,status-playable,playable,2020-06-27 13:46:23.000 +"My Friend Pedro: Blood Bullets Bananas",010031200B94C000,nvdec;status-playable,playable,2021-05-28 11:19:17.000 +"My Girlfriend is a Mermaid!?",,nvdec;status-playable,playable,2020-05-08 13:32:55.000 +"MY HERO ONE'S JUSTICE",,UE4;crash;gpu;online;status-menus,menus,2020-12-10 13:11:04.000 +"MY HERO ONE'S JUSTICE 2",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-18 14:08:47.000 +"My Hidden Things",0100E4701373E000,status-playable,playable,2021-04-15 11:26:06.000 +"My Little Dog Adventure",,gpu;status-ingame,ingame,2020-12-10 17:47:37.000 +"My Little Riding Champion",,slow;status-playable,playable,2020-05-08 17:00:53.000 +"My Lovely Daughter",010086B00C784000,status-playable,playable,2022-11-24 17:25:32.000 +"My Memory of Us",0100E7700C284000,status-playable,playable,2022-08-20 11:03:14.000 +"My Riding Stables - Life with Horses",010028F00ABAE000,status-playable,playable,2022-08-05 21:39:07.000 +"My Riding Stables 2: A New Adventure",010042A00FBF0000,status-playable,playable,2021-05-16 14:14:59.000 +"My Time At Portia",0100E25008E68000,status-playable,playable,2021-05-28 12:42:55.000 +"My Universe - Cooking Star Restaurant",0100CD5011A02000,status-playable,playable,2022-10-19 10:00:44.000 +"My Universe - Fashion Boutique",0100F71011A0A000,status-playable;nvdec,playable,2022-10-12 14:54:19.000 +"My Universe - Pet Clinic Cats & Dogs",0100CD5011A02000,status-boots;crash;nvdec,boots,2022-02-06 02:05:53.000 +"My Universe - School Teacher",01006C301199C000,nvdec;status-playable,playable,2021-01-21 16:02:52.000 +"n Verlore Verstand",,slow;status-ingame,ingame,2020-12-10 18:00:28.000 +"n Verlore Verstand - Demo",01009A500E3DA000,status-playable,playable,2021-02-09 00:13:32.000 +"N++",01000D5005974000,status-playable,playable,2022-08-05 21:54:58.000 +"NAIRI: Tower of Shirin",,nvdec;status-playable,playable,2020-08-09 19:49:12.000 +"NAMCO MUSEUM",010002F001220000,status-playable;ldn-untested,playable,2024-08-13 07:52:21.000 +"NAMCO MUSEUM ARCADE PAC",0100DAA00AEE6000,status-playable,playable,2021-06-07 21:44:50.000 +"NAMCOT COLLECTION",,audio;status-playable,playable,2020-06-25 13:35:22.000 +"Narcos: Rise of the Cartels",010072B00BDDE000,UE4;crash;nvdec;status-boots,boots,2021-03-22 13:18:47.000 +"NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO",010084D00CF5E000,status-playable,playable,2024-06-29 13:04:22.000 +"NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst",01006BB00800A000,status-playable;nvdec,playable,2024-06-16 14:58:05.000 +"NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS",0100D2D0190A4000,services-horizon;status-nothing,nothing,2024-07-25 05:16:48.000 +"NARUTO™: Ultimate Ninja® STORM",0100715007354000,status-playable;nvdec,playable,2022-08-06 14:10:31.000 +"NASCAR Rivals",0100545016D5E000,status-ingame;crash;Incomplete,ingame,2023-04-21 01:17:47.000 +"Naught",0100103011894000,UE4;status-playable,playable,2021-04-26 13:31:45.000 +"NBA 2K Playgrounds 2",01001AE00C1B2000,status-playable;nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38.000 +"NBA 2K18",0100760002048000,gpu;status-ingame;ldn-untested,ingame,2022-08-06 14:17:51.000 +"NBA 2K19",01001FF00B544000,crash;ldn-untested;services;status-nothing,nothing,2021-04-16 13:07:21.000 +"NBA 2K21",0100E24011D1E000,gpu;status-boots,boots,2022-10-05 15:31:51.000 +"NBA 2K23",0100ACA017E4E800,status-boots,boots,2023-10-10 23:07:14.000 +"NBA 2K24",010006501A8D8000,cpu;gpu;status-boots,boots,2024-08-11 18:23:08.000 +"NBA Playgrounds",0100F5A008126000,status-playable;nvdec;online-broken;UE4,playable,2022-08-06 16:13:44.000 +"NBA Playgrounds",010002900294A000,status-playable;nvdec;online-broken;UE4,playable,2022-08-06 17:06:59.000 +"Need a Packet?",,status-playable,playable,2020-08-12 16:09:01.000 +"Need for Speed Hot Pursuit Remastered",010029B0118E8000,status-playable;online-broken,playable,2024-03-20 21:58:02.000 +"Need For Speed Hot Pursuit Remastered",,audio;online;slow;status-ingame,ingame,2020-10-27 17:46:58.000 +"Nefarious",,status-playable,playable,2020-12-17 03:20:33.000 +"Negative",01008390136FC000,nvdec;status-playable,playable,2021-03-24 11:29:41.000 +"Neighbours back From Hell",010065F00F55A000,status-playable;nvdec,playable,2022-10-12 15:36:48.000 +"Nekopara Vol.1",0100B4900AD3E000,status-playable;nvdec,playable,2022-08-06 18:25:54.000 +"Nekopara Vol.2",,status-playable,playable,2020-12-16 11:04:47.000 +"Nekopara Vol.3",010045000E418000,status-playable,playable,2022-10-03 12:49:04.000 +"Nekopara Vol.4",,crash;status-ingame,ingame,2021-01-17 01:47:18.000 +"Nelke & the Legendary Alchemists ~Ateliers of the New World~",01006ED00BC76000,status-playable,playable,2021-01-28 19:39:42.000 +"Nelly Cootalot",,status-playable,playable,2020-06-11 20:55:42.000 +"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",01001AB0141A8000,crash;status-ingame,ingame,2021-07-18 07:29:18.000 +"Neo Cab",0100EBB00D2F4000,status-playable,playable,2021-04-24 00:27:58.000 +"Neo Cab Demo",,crash;status-boots,boots,2020-06-16 00:14:00.000 +"NEOGEO POCKET COLOR SELECTION Vol.1",010006D0128B4000,status-playable,playable,2023-07-08 20:55:36.000 +"Neon Abyss",0100BAB01113A000,status-playable,playable,2022-10-05 15:59:44.000 +"Neon Chrome",010075E0047F8000,status-playable,playable,2022-08-06 18:38:34.000 +"Neon Drive",010032000EAC6000,status-playable,playable,2022-09-10 13:45:48.000 +"Neon White",0100B9201406A000,status-ingame;crash,ingame,2023-02-02 22:25:06.000 +"Neonwall",0100743008694000,status-playable;nvdec,playable,2022-08-06 18:49:52.000 +"Neoverse Trinity Edition - 01001A20133E000",,status-playable,playable,2022-10-19 10:28:03.000 +"Nerdook Bundle Vol. 1",,gpu;slow;status-ingame,ingame,2020-10-07 14:27:10.000 +"Nerved",01008B0010160000,status-playable;UE4,playable,2022-09-20 17:14:03.000 +"NeuroVoider",,status-playable,playable,2020-06-04 18:20:05.000 +"Nevaeh",0100C20012A54000,gpu;nvdec;status-ingame,ingame,2021-06-16 17:29:03.000 +"Never Breakup",010039801093A000,status-playable,playable,2022-10-05 16:12:12.000 +"Neverending Nightmares",0100F79012600000,crash;gpu;status-boots,boots,2021-04-24 01:43:35.000 +"Neverlast",,slow;status-ingame,ingame,2020-07-13 23:55:19.000 +"Neverwinter Nights: Enhanced Edition",010013700DA4A000,gpu;status-menus;nvdec,menus,2024-09-30 02:59:19.000 +"New Frontier Days -Founding Pioneers-",,status-playable,playable,2020-12-10 12:45:07.000 +"New Pokémon Snap",0100F4300BF2C000,status-playable,playable,2023-01-15 23:26:57.000 +"New Super Lucky's Tale",010017700B6C2000,status-playable,playable,2024-03-11 14:14:10.000 +"New Super Mario Bros. U Deluxe",0100EA80032EA000,32-bit;status-playable,playable,2023-10-08 02:06:37.000 +"Newt One",,status-playable,playable,2020-10-17 21:21:48.000 +"Nexomon: Extinction",,status-playable,playable,2020-11-30 15:02:22.000 +"Nexoria: Dungeon Rogue Heroes",0100B69012EC6000,gpu;status-ingame,ingame,2021-10-04 18:41:29.000 +"Next Up Hero",,online;status-playable,playable,2021-01-04 22:39:36.000 +"Ni No Kuni Wrath of the White Witch",0100E5600D446000,status-boots;32-bit;nvdec,boots,2024-07-12 04:52:59.000 +"Nice Slice",,nvdec;status-playable,playable,2020-06-17 15:13:27.000 +"Niche - a genetics survival game",,nvdec;status-playable,playable,2020-11-27 14:01:11.000 +"Nickelodeon All-Star Brawl 2",010010701AFB2000,status-playable,playable,2024-06-03 14:15:01.000 +"Nickelodeon Kart Racers",,status-playable,playable,2021-01-07 12:16:49.000 +"Nickelodeon Paw Patrol: On a Roll",0100CEC003A4A000,nvdec;status-playable,playable,2021-01-28 21:14:49.000 +"Nicky: The Home Alone Golf Ball",,status-playable,playable,2020-08-08 13:45:39.000 +"Nicole",0100A95012668000,status-playable;audout,playable,2022-10-05 16:41:44.000 +"NieR:Automata The End of YoRHa Edition",0100B8E016F76000,slow;status-ingame;crash,ingame,2024-05-17 01:06:34.000 +"Night Call",0100F3A0095A6000,status-playable;nvdec,playable,2022-10-03 12:57:00.000 +"Night in the Woods",0100921006A04000,status-playable,playable,2022-12-03 20:17:54.000 +"Night Trap - 25th Anniversary Edition",0100D8500A692000,status-playable;nvdec,playable,2022-08-08 13:16:14.000 +"Nightmare Boy",,status-playable,playable,2021-01-05 15:52:29.000 +"Nightmares from the Deep 2: The Siren's Call",01006E700B702000,status-playable;nvdec,playable,2022-10-19 10:58:53.000 +"Nights of Azure 2: Bride of the New Moon",0100628004BCE000,status-menus;crash;nvdec;regression,menus,2022-11-24 16:00:39.000 +"Nightshade",,nvdec;status-playable,playable,2020-05-10 19:43:31.000 +"Nihilumbra",,status-playable,playable,2020-05-10 16:00:12.000 +"Nine Parchments",0100D03003F0E000,status-playable;ldn-untested,playable,2022-08-07 12:32:08.000 +"NINJA GAIDEN 3: Razor's Edge",01002AF014F4C000,status-playable;nvdec,playable,2023-08-11 08:25:31.000 +"Ninja Gaiden Sigma",0100E2F014F46000,status-playable;nvdec,playable,2022-11-13 16:27:02.000 +"Ninja Gaiden Sigma 2 - 0100696014FA000",,status-playable;nvdec,playable,2024-07-31 21:53:48.000 +"Ninja Shodown",,status-playable,playable,2020-05-11 12:31:21.000 +"Ninja Striker",,status-playable,playable,2020-12-08 19:33:29.000 +"Ninjala",0100CCD0073EA000,status-boots;online-broken;UE4,boots,2024-07-03 20:04:49.000 +"Ninjin: Clash of Carrots",010003C00B868000,status-playable;online-broken,playable,2024-07-10 05:12:26.000 +"NinNinDays",0100746010E4C000,status-playable,playable,2022-11-20 15:17:29.000 +"Nintendo 64 - Nintendo Switch Online",0100C9A00ECE6000,gpu;status-ingame;vulkan,ingame,2024-04-23 20:21:07.000 +"Nintendo Entertainment System - Nintendo Switch Online",0100D870045B6000,status-playable;online,playable,2022-07-01 15:45:06.000 +"Nintendo Labo - Toy-Con 01: Variety Kit",0100C4B0034B2000,gpu;status-ingame,ingame,2022-08-07 12:56:07.000 +"Nintendo Labo Toy-Con 02: Robot Kit",01009AB0034E0000,gpu;status-ingame,ingame,2022-08-07 13:03:19.000 +"Nintendo Labo Toy-Con 03: Vehicle Kit",01001E9003502000,services;status-menus;crash,menus,2022-08-03 17:20:11.000 +"Nintendo Labo Toy-Con 04: VR Kit",0100165003504000,services;status-boots;crash,boots,2023-01-17 22:30:24.000 +"Nintendo Switch Sports",0100D2F00D5C0000,deadlock;status-boots,boots,2024-09-10 14:20:24.000 +"Nintendo Switch Sports Online Play Test",01000EE017182000,gpu;status-ingame,ingame,2022-03-16 07:44:12.000 +"Nippon Marathon",010037200C72A000,nvdec;status-playable,playable,2021-01-28 20:32:46.000 +"Nirvana Pilot Yume",010020901088A000,status-playable,playable,2022-10-29 11:49:49.000 +"No Heroes Here",,online;status-playable,playable,2020-05-10 02:41:57.000 +"No Man’s Sky",0100853015E86000,gpu;status-ingame,ingame,2024-07-25 05:18:17.000 +"No More Heroes",0100F0400F202000,32-bit;status-playable,playable,2022-09-13 07:44:27.000 +"No More Heroes 2 Desperate Struggle",010071400F204000,32-bit;status-playable;nvdec,playable,2022-11-19 01:38:13.000 +"No More Heroes 3",01007C600EB42000,gpu;status-ingame;UE4,ingame,2024-03-11 17:06:19.000 +"No Straight Roads",01009F3011004000,status-playable;nvdec,playable,2022-10-05 17:01:38.000 +"NO THING",,status-playable,playable,2021-01-04 19:06:01.000 +"Nongunz: Doppelganger Edition",0100542012884000,status-playable,playable,2022-10-29 12:00:39.000 +"Norman's Great Illusion",,status-playable,playable,2020-12-15 19:28:24.000 +"Norn9 ~Norn + Nonette~ LOFN",01001A500AD6A000,status-playable;nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16.000 +"NORTH",,nvdec;status-playable,playable,2021-01-05 16:17:44.000 +"Northgard",0100A9E00D97A000,status-menus;crash,menus,2022-02-06 02:05:35.000 +"nOS new Operating System",01008AE019614000,status-playable,playable,2023-03-22 16:49:08.000 +"NOT A HERO",0100CB800B07E000,status-playable,playable,2021-01-28 19:31:24.000 +"Not Not a Brain Buster",,status-playable,playable,2020-05-10 02:05:26.000 +"Not Tonight",0100DAF00D0E2000,status-playable;nvdec,playable,2022-10-19 11:48:47.000 +"Nubarron: The adventure of an unlucky gnome",,status-playable,playable,2020-12-17 16:45:17.000 +"Nuclien",,status-playable,playable,2020-05-10 05:32:55.000 +"Numbala",,status-playable,playable,2020-05-11 12:01:07.000 +"Number Place 10000",010020500C8C8000,gpu;status-menus,menus,2021-11-24 09:14:23.000 +"Nurse Love Syndrome",010003701002C000,status-playable,playable,2022-10-13 10:05:22.000 +"nx-hbmenu",0000000000000000,status-boots;Needs Update;homebrew,boots,2024-04-06 22:05:32.000 +"nxquake2",,services;status-nothing;crash;homebrew,nothing,2022-08-04 23:14:04.000 +"Nyan Cat: Lost in Space",010049F00EC30000,online;status-playable,playable,2021-06-12 13:22:03.000 +"O---O",01002E6014FC4000,status-playable,playable,2022-10-29 12:12:14.000 +"OBAKEIDORO!",,nvdec;online;status-playable,playable,2020-10-16 16:57:34.000 +"Observer",01002A000C478000,UE4;gpu;nvdec;status-ingame,ingame,2021-03-03 20:19:45.000 +"Oceanhorn",,status-playable,playable,2021-01-05 13:55:22.000 +"Oceanhorn 2 Knights of the Lost Realm",01006CB010840000,status-playable,playable,2021-05-21 18:26:10.000 +"Octocopter: Double or Squids",,status-playable,playable,2021-01-06 01:30:16.000 +"Octodad Dadliest Catch",0100CAB006F54000,crash;status-boots,boots,2021-04-23 15:26:12.000 +"Octopath Traveler",,UE4;crash;gpu;status-ingame,ingame,2020-08-31 02:34:36.000 +"Octopath Traveler II",0100A3501946E000,gpu;status-ingame;amd-vendor-bug,ingame,2024-09-22 11:39:20.000 +"Odallus",010084300C816000,status-playable,playable,2022-08-08 12:37:58.000 +"Oddworld: Munch's Oddysee",0100BB500EE3C000,gpu;nvdec;status-ingame,ingame,2021-06-17 12:11:50.000 +"Oddworld: New 'n' Tasty",01005E700ABB8000,nvdec;status-playable,playable,2021-06-17 17:51:32.000 +"Oddworld: Soulstorm",0100D210177C6000,services-horizon;status-boots;crash,boots,2024-08-18 13:13:26.000 +"Oddworld: Stranger's Wrath HD",01002EA00ABBA000,status-menus;crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21.000 +"Odium to the Core",,gpu;status-ingame,ingame,2021-01-08 14:03:52.000 +"Off And On Again",01006F5013202000,status-playable,playable,2022-10-29 19:46:26.000 +"Offroad Racing",01003CD00E8BC000,status-playable;online-broken;UE4,playable,2022-09-14 18:53:22.000 +"Oh My Godheads: Party Edition",01003B900AE12000,status-playable,playable,2021-04-15 11:04:11.000 +"Oh...Sir! The Hollywood Roast",,status-ingame,ingame,2020-12-06 00:42:30.000 +"OK K.O.! Let's Play Heroes",,nvdec;status-playable,playable,2021-01-11 18:41:02.000 +"OKAMI HD",0100276009872000,status-playable;nvdec,playable,2024-04-05 06:24:58.000 +"OkunoKA",01006AB00BD82000,status-playable;online-broken,playable,2022-08-08 14:41:51.000 +"Old Man's Journey",0100CE2007A86000,nvdec;status-playable,playable,2021-01-28 19:16:52.000 +"Old School Musical",,status-playable,playable,2020-12-10 12:51:12.000 +"Old School Racer 2",,status-playable,playable,2020-10-19 12:11:26.000 +"OlliOlli: Switch Stance",0100E0200B980000,gpu;status-boots,boots,2024-04-25 08:36:37.000 +"Olympia Soiree",0100F9D00C186000,status-playable,playable,2022-12-04 21:07:12.000 +"OLYMPIC GAMES TOKYO 2020",,ldn-untested;nvdec;online;status-playable,playable,2021-01-06 01:20:24.000 +"Omega Labyrinth Life",01001D600E51A000,status-playable,playable,2021-02-23 21:03:03.000 +"Omega Vampire",,nvdec;status-playable,playable,2020-10-17 19:15:35.000 +"Omensight: Definitive Edition",,UE4;crash;nvdec;status-ingame,ingame,2020-07-26 01:45:14.000 +"OMG Zombies!",01006DB00D970000,32-bit;status-playable,playable,2021-04-12 18:04:45.000 +"OMORI",010014E017B14000,status-playable,playable,2023-01-07 20:21:02.000 +"Once Upon A Coma",,nvdec;status-playable,playable,2020-08-01 12:09:39.000 +"One More Dungeon",,status-playable,playable,2021-01-06 09:10:58.000 +"One Person Story",,status-playable,playable,2020-07-14 11:51:02.000 +"One Piece Pirate Warriors 3",,nvdec;status-playable,playable,2020-05-10 06:23:52.000 +"One Piece Unlimited World Red Deluxe Edition",,status-playable,playable,2020-05-10 22:26:32.000 +"ONE PIECE: PIRATE WARRIORS 4",01008FE00E2F6000,status-playable;online-broken;ldn-untested,playable,2022-09-27 22:55:46.000 +"Oneiros",0100463013246000,status-playable,playable,2022-10-13 10:17:22.000 +"OneWayTicket",,UE4;status-playable,playable,2020-06-20 17:20:49.000 +"Oniken",010057C00D374000,status-playable,playable,2022-09-10 14:22:38.000 +"Oniken: Unstoppable Edition",010037900C814000,status-playable,playable,2022-08-08 14:52:06.000 +"Onimusha: Warlords",,nvdec;status-playable,playable,2020-07-31 13:08:39.000 +"OniNaki",0100CF4011B2A000,nvdec;status-playable,playable,2021-02-27 21:52:42.000 +"oOo: Ascension",010074000BE8E000,status-playable,playable,2021-01-25 14:13:34.000 +"Operación Triunfo 2017",0100D5400BD90000,services;status-ingame;nvdec,ingame,2022-08-08 15:06:42.000 +"Operencia The Stolen Sun",01006CF00CFA4000,UE4;nvdec;status-playable,playable,2021-06-08 13:51:07.000 +"OPUS Collection",01004A200BE82000,status-playable,playable,2021-01-25 15:24:04.000 +"OPUS: The Day We Found Earth",010049C0075F0000,nvdec;status-playable,playable,2021-01-21 18:29:31.000 +"Ord.",,status-playable,playable,2020-12-14 11:59:06.000 +"Ori and the Blind Forest: Definitive Edition",010061D00DB74000,status-playable;nvdec;online-broken,playable,2022-09-14 19:58:13.000 +"Ori and the Blind Forest: Definitive Edition Demo",010005800F46E000,status-playable,playable,2022-09-10 14:40:12.000 +"Ori and the Will of the Wisps",01008DD013200000,status-playable,playable,2023-03-07 00:47:13.000 +"Orn: The Tiny Forest Sprite",,UE4;gpu;status-ingame,ingame,2020-08-07 14:25:30.000 +"Othercide",0100E5900F49A000,status-playable;nvdec,playable,2022-10-05 19:04:38.000 +"OTOKOMIZU",,status-playable,playable,2020-07-13 21:00:44.000 +"Otti house keeper",01006AF013A9E000,status-playable,playable,2021-01-31 12:11:24.000 +"OTTTD",,slow;status-ingame,ingame,2020-10-10 19:31:07.000 +"Our two Bedroom Story",010097F010FE6000,gpu;status-ingame;nvdec,ingame,2023-10-10 17:41:20.000 +"Our World Is Ended.",,nvdec;status-playable,playable,2021-01-19 22:46:57.000 +"Out Of The Box",01005A700A166000,status-playable,playable,2021-01-28 01:34:27.000 +"Outbreak: Endless Nightmares",0100A0D013464000,status-playable,playable,2022-10-29 12:35:49.000 +"Outbreak: Epidemic",0100C850130FE000,status-playable,playable,2022-10-13 10:27:31.000 +"Outbreak: Lost Hope",0100D9F013102000,crash;status-boots,boots,2021-04-26 18:01:23.000 +"Outbreak: The New Nightmare",0100B450130FC000,status-playable,playable,2022-10-19 15:42:07.000 +"Outbreak: The Nightmare Chronicles",01006EE013100000,status-playable,playable,2022-10-13 10:41:57.000 +"Outbuddies DX",0100B8900EFA6000,gpu;status-ingame,ingame,2022-08-04 22:39:24.000 +"Outlast",01008D4007A1E000,status-playable;nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26.000 +"Outlast 2",0100DE70085E8000,status-ingame;crash;nvdec,ingame,2022-01-22 22:28:05.000 +"Overcooked! 2",01006FD0080B2000,status-playable;ldn-untested,playable,2022-08-08 16:48:10.000 +"Overcooked! All You Can Eat",0100F28011892000,ldn-untested;online;status-playable,playable,2021-04-15 10:33:52.000 +"Overcooked! Special Edition",01009B900401E000,status-playable,playable,2022-08-08 20:48:52.000 +"Overlanders",0100D7F00EC64000,status-playable;nvdec;UE4,playable,2022-09-14 20:15:06.000 +"Overpass",01008EA00E816000,status-playable;online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47.000 +"Override 2 Super Mech League",0100647012F62000,status-playable;online-broken;UE4,playable,2022-10-19 15:56:04.000 +"Override: Mech City Brawl - Super Charged Mega Edition",01008A700F7EE000,status-playable;nvdec;online-broken;UE4,playable,2022-09-20 17:33:32.000 +"Overwatch®: Legendary Edition",0100F8600E21E000,deadlock;status-boots,boots,2022-09-14 20:22:22.000 +"OVERWHELM",01005F000CC18000,status-playable,playable,2021-01-21 18:37:18.000 +"Owlboy",,status-playable,playable,2020-10-19 14:24:45.000 +"PAC-MAN 99",0100AD9012510000,gpu;status-ingame;online-broken,ingame,2024-04-23 00:48:25.000 +"PAC-MAN CHAMPIONSHIP EDITION 2 PLUS",,status-playable,playable,2021-01-19 22:06:18.000 +"Paladins",011123900AEE0000,online;status-menus,menus,2021-01-21 19:21:37.000 +"PAN-PAN A tiny big adventure",0100F0D004CAE000,audout;status-playable,playable,2021-01-25 14:42:00.000 +"Pang Adventures",010083700B730000,status-playable,playable,2021-04-10 12:16:59.000 +"Pantsu Hunter",,status-playable,playable,2021-02-19 15:12:27.000 +"Panzer Dragoon: Remake",,status-playable,playable,2020-10-04 04:03:55.000 +"Panzer Paladin",01004AE0108E0000,status-playable,playable,2021-05-05 18:26:00.000 +"Paper Dolls Original",,UE4;crash;status-boots,boots,2020-07-13 20:26:21.000 +"Paper Mario The Origami King",0100A3900C3E2000,audio;status-playable;Needs Update,playable,2024-08-09 18:27:40.000 +"Paper Mario: The Thousand-Year Door",0100ECD018EBE000,gpu;status-ingame;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35.000 +"Paperbound Brawlers",01006AD00B82C000,status-playable,playable,2021-01-25 14:32:15.000 +"Paradigm Paradox",0100DC70174E0000,status-playable;vulkan-backend-bug,playable,2022-12-03 22:28:13.000 +"Paradise Killer",01007FB010DC8000,status-playable;UE4,playable,2022-10-05 19:33:05.000 +"Paranautical Activity",010063400B2EC000,status-playable,playable,2021-01-25 13:49:19.000 +"Part Time UFO",01006B5012B32000,status-ingame;crash,ingame,2023-03-03 03:13:05.000 +"Party Arcade",01007FC00A040000,status-playable;online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53.000 +"Party Golf",0100B8E00359E000,status-playable;nvdec,playable,2022-08-09 12:38:30.000 +"Party Hard 2",010022801217E000,status-playable;nvdec,playable,2022-10-05 20:31:48.000 +"Party Treats",,status-playable,playable,2020-07-02 00:05:00.000 +"Path of Sin: Greed",01001E500EA16000,status-menus;crash,menus,2021-11-24 08:00:00.000 +"Pato Box",010031F006E76000,status-playable,playable,2021-01-25 15:17:52.000 +"PAW Patrol: Grand Prix",0100360016800000,gpu;status-ingame,ingame,2024-05-03 16:16:11.000 +"Paw Patrol: Might Pups Save Adventure Bay!",01001F201121E000,status-playable,playable,2022-10-13 12:17:55.000 +"Pawapoke R",01000c4015030000,services-horizon;status-nothing,nothing,2024-05-14 14:28:32.000 +"Pawarumi",0100A56006CEE000,status-playable;online-broken,playable,2022-09-10 15:19:33.000 +"PAYDAY 2",0100274004052000,status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39.000 +"PBA Pro Bowling",010085700ABC8000,status-playable;nvdec;online-broken;UE4,playable,2022-09-14 23:00:49.000 +"PBA Pro Bowling 2021",0100F95013772000,status-playable;online-broken;UE4,playable,2022-10-19 16:46:40.000 +"PC Building Simulator",,status-playable,playable,2020-06-12 00:31:58.000 +"Peaky Blinders: Mastermind",010002100CDCC000,status-playable,playable,2022-10-19 16:56:35.000 +"Peasant Knight",,status-playable,playable,2020-12-22 09:30:50.000 +"Penny-Punching Princess",0100C510049E0000,status-playable,playable,2022-08-09 13:37:05.000 +"Penny's Big Breakaway",0100CA901AA9C000,status-playable;amd-vendor-bug,playable,2024-05-27 07:58:51.000 +"Perception",,UE4;crash;nvdec;status-menus,menus,2020-12-18 11:49:23.000 +"Perchang",010011700D1B2000,status-playable,playable,2021-01-25 14:19:52.000 +"Perfect Angle",010089F00A3B4000,status-playable,playable,2021-01-21 18:48:45.000 +"Perky Little Things",01005CD012DC0000,status-boots;crash;vulkan,boots,2024-08-04 07:22:46.000 +"Persephone",,status-playable,playable,2021-03-23 22:39:19.000 +"Perseverance",,status-playable,playable,2020-07-13 18:48:27.000 +"Persona 4 Golden",010062B01525C000,status-playable,playable,2024-08-07 17:48:07.000 +"Persona 5 Royal",01005CA01580E000,gpu;status-ingame,ingame,2024-08-17 21:45:15.000 +"Persona 5 Tactica",010087701B092000,status-playable,playable,2024-04-01 22:21:03.000 +"Persona 5: Scramble",,deadlock;status-boots,boots,2020-10-04 03:22:29.000 +"Persona 5: Strikers (US)",0100801011C3E000,status-playable;nvdec;mac-bug,playable,2023-09-26 09:36:01.000 +"Petoons Party",010044400EEAE000,nvdec;status-playable,playable,2021-03-02 21:07:58.000 +"PGA TOUR 2K21",010053401147C000,deadlock;status-ingame;nvdec,ingame,2022-10-05 21:53:50.000 +"Phantaruk",0100DDD00C0EA000,status-playable,playable,2021-06-11 18:09:54.000 +"PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE",0100063005C86000,audio;status-playable;nvdec,playable,2024-02-29 14:20:35.000 +"Phantom Doctrine",010096F00E5B0000,status-playable;UE4,playable,2022-09-15 10:51:50.000 +"Phantom Trigger",0100C31005A50000,status-playable,playable,2022-08-09 14:27:30.000 +"Phoenix Wright: Ace Attorney Trilogy",0100CB000A142000,status-playable,playable,2023-09-15 22:03:12.000 +"PHOGS!",,online;status-playable,playable,2021-01-18 15:18:37.000 +"Physical Contact: 2048",,slow;status-playable,playable,2021-01-25 15:18:32.000 +"Physical Contact: Speed",01008110036FE000,status-playable,playable,2022-08-09 14:40:46.000 +"Pianista: The Legendary Virtuoso",010077300A86C000,status-playable;online-broken,playable,2022-08-09 14:52:56.000 +"Picross Lord Of The Nazarick",010012100E8DC000,status-playable,playable,2023-02-08 15:54:56.000 +"Picross S2",,status-playable,playable,2020-10-15 12:01:40.000 +"Picross S3",,status-playable,playable,2020-10-15 11:55:27.000 +"Picross S4",,status-playable,playable,2020-10-15 12:33:46.000 +"Picross S5",0100AC30133EC000,status-playable,playable,2022-10-17 18:51:42.000 +"Picross S6",010025901432A000,status-playable,playable,2022-10-29 17:52:19.000 +"Picross S7",,status-playable,playable,2022-02-16 12:51:25.000 +"PictoQuest",010043B00E1CE000,status-playable,playable,2021-02-27 15:03:16.000 +"Piczle Lines DX",,UE4;crash;nvdec;status-menus,menus,2020-11-16 04:21:31.000 +"Piczle Lines DX 500 More Puzzles!",,UE4;status-playable,playable,2020-12-15 23:42:51.000 +"Pig Eat Ball",01000FD00D5CC000,services;status-ingame,ingame,2021-11-30 01:57:45.000 +"Pikmin 1",0100AA80194B0000,audio;status-ingame,ingame,2024-05-28 18:56:11.000 +"Pikmin 2",0100D680194B2000,gpu;status-ingame,ingame,2023-07-31 08:53:41.000 +"Pikmin 3 Deluxe",0100F4C009322000,gpu;status-ingame;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26.000 +"Pikmin 3 Deluxe Demo",01001CB0106F8000,32-bit;crash;demo;gpu;status-ingame,ingame,2021-06-16 18:38:07.000 +"Pikmin 4",0100B7C00933A000,gpu;status-ingame;crash;UE4,ingame,2024-08-26 03:39:08.000 +"Pikmin 4 Demo",0100E0B019974000,gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08.000 +"Pillars of Eternity",0100D6200E130000,status-playable,playable,2021-02-27 00:24:21.000 +"Pilot Sports",01007A500B0B2000,status-playable,playable,2021-01-20 15:04:17.000 +"Pinball FX",0100DA70186D4000,status-playable,playable,2024-05-03 17:09:11.000 +"Pinball FX3",0100DB7003828000,status-playable;online-broken,playable,2022-11-11 23:49:07.000 +"Pine",,slow;status-ingame,ingame,2020-07-29 16:57:39.000 +"Pinstripe",,status-playable,playable,2020-11-26 10:40:40.000 +"Piofiore: Episodio 1926",01002B20174EE000,status-playable,playable,2022-11-23 18:36:05.000 +"Piofiore: Fated Memories",,nvdec;status-playable,playable,2020-11-30 14:27:50.000 +"Pixel Game Maker Series Puzzle Pedestrians",0100EA2013BCC000,status-playable,playable,2022-10-24 20:15:50.000 +"Pixel Game Maker Series Werewolf Princess Kaguya",0100859013CE6000,crash;services;status-nothing,nothing,2021-03-26 00:23:07.000 +"Pixel Gladiator",,status-playable,playable,2020-07-08 02:41:26.000 +"Pixel Puzzle Makeout League",010000E00E612000,status-playable,playable,2022-10-13 12:34:00.000 +"PixelJunk Eden 2",,crash;status-ingame,ingame,2020-12-17 11:55:52.000 +"Pixeljunk Monsters 2",0100E4D00A690000,status-playable,playable,2021-06-07 03:40:01.000 +"Pizza Titan Ultra",01004A900C352000,nvdec;status-playable,playable,2021-01-20 15:58:42.000 +"Pizza Tower",05000FD261232000,status-ingame;crash,ingame,2024-09-16 00:21:56.000 +"Plague Road",0100FF8005EB2000,status-playable,playable,2022-08-09 15:27:14.000 +"Planescape: Torment and Icewind Dale: Enhanced Editions",010030B00C316000,cpu;status-boots;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26.000 +"PLANET ALPHA",,UE4;gpu;status-ingame,ingame,2020-12-16 14:42:20.000 +"Planet Cube Edge",01007EA019CFC000,status-playable,playable,2023-03-22 17:10:12.000 +"planetarian HD ~the reverie of a little planet~",,status-playable,playable,2020-10-17 20:26:20.000 +"Plantera",010087000428E000,status-playable,playable,2022-08-09 15:36:28.000 +"Plants vs. Zombies: Battle for Neighborville Complete Edition",0100C56010FD8000,gpu;audio;status-boots;crash,boots,2024-09-02 12:58:14.000 +"Ploid Saga",0100E5B011F48000,status-playable,playable,2021-04-19 16:58:45.000 +"Pode",01009440095FE000,nvdec;status-playable,playable,2021-01-25 12:58:35.000 +"Poi: Explorer Edition",010086F0064CE000,nvdec;status-playable,playable,2021-01-21 19:32:00.000 +"Poison Control",0100EB6012FD2000,status-playable,playable,2021-05-16 14:01:54.000 +"Pokémon Brilliant Diamond",0100000011D90000,gpu;status-ingame;ldn-works,ingame,2024-08-28 13:26:35.000 +"Pokémon Café Mix",010072400E04A000,status-playable,playable,2021-08-17 20:00:04.000 +"Pokémon HOME",,Needs Update;crash;services;status-menus,menus,2020-12-06 06:01:51.000 +"Pokémon Legends: Arceus",01001F5010DFA000,gpu;status-ingame;Needs Update;ldn-works,ingame,2024-09-19 10:02:02.000 +"Pokémon Mystery Dungeon Rescue Team DX",01003D200BAA2000,status-playable;mac-bug,playable,2024-01-21 00:16:32.000 +"Pokemon Quest",01005D100807A000,status-playable,playable,2022-02-22 16:12:32.000 +"Pokémon Scarlet",0100A3D008C5C000,gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29.000 +"Pokémon Shield",01008DB008C2C000,deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22.000 +"Pokémon Sword",0100ABF008968000,deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37.000 +"Pokémon Violet",01008F6008C5E000,gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48.000 +"Pokémon: Let's Go, Eevee!",0100187003A36000,status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04.000 +"Pokémon: Let's Go, Pikachu!",010003F003A34000,status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41.000 +"Pokémon: Let's Go, Pikachu! demo",01009AD008C4C000,slow;status-playable;demo,playable,2023-11-26 11:23:20.000 +"Pokkén Tournament DX",0100B3F000BE2000,status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08.000 +"Pokken Tournament DX Demo",010030D005AE6000,status-playable;demo;opengl-backend-bug,playable,2022-08-10 12:03:19.000 +"Polandball: Can Into Space!",,status-playable,playable,2020-06-25 15:13:26.000 +"Poly Bridge",,services;status-playable,playable,2020-06-08 23:32:41.000 +"Polygod",010017600B180000,slow;status-ingame;regression,ingame,2022-08-10 14:38:14.000 +"Polyroll",010074B00ED32000,gpu;status-boots,boots,2021-07-01 16:16:50.000 +"Ponpu",,status-playable,playable,2020-12-16 19:09:34.000 +"Pooplers",,status-playable,playable,2020-11-02 11:52:10.000 +"Port Royale 4",01007EF013CA0000,status-menus;crash;nvdec,menus,2022-10-30 14:34:06.000 +"Portal",01007BB017812000,status-playable,playable,2024-06-12 03:48:29.000 +"Portal 2",0100ABD01785C000,gpu;status-ingame,ingame,2023-02-20 22:44:15.000 +"Portal Dogs",,status-playable,playable,2020-09-04 12:55:46.000 +"Portal Knights",0100437004170000,ldn-untested;online;status-playable,playable,2021-05-27 19:29:04.000 +"Potata: Fairy Flower",,nvdec;status-playable,playable,2020-06-17 09:51:34.000 +"Potion Party",01000A4014596000,status-playable,playable,2021-05-06 14:26:54.000 +"Power Rangers: Battle for the Grid",,status-playable,playable,2020-06-21 16:52:42.000 +"Powerful Pro Baseball 2024-2025",0100D1C01C194000,gpu;status-ingame,ingame,2024-08-25 06:40:48.000 +"PowerSlave Exhumed",01008E100E416000,gpu;status-ingame,ingame,2023-07-31 23:19:10.000 +"Prehistoric Dude",,gpu;status-ingame,ingame,2020-10-12 12:38:48.000 +"Pretty Princess Magical Coordinate",,status-playable,playable,2020-10-15 11:43:41.000 +"Pretty Princess Party",01007F00128CC000,status-playable,playable,2022-10-19 17:23:58.000 +"Preventive Strike",010009300D278000,status-playable;nvdec,playable,2022-10-06 10:55:51.000 +"Prince of Persia: The Lost Crown",0100210019428000,status-ingame;crash,ingame,2024-06-08 21:31:58.000 +"Princess Peach: Showtime!",01007A3009184000,status-playable;UE4,playable,2024-09-21 13:39:45.000 +"Princess Peach: Showtime! Demo",010024701DC2E000,status-playable;UE4;demo,playable,2024-03-10 17:46:45.000 +"Prinny 2: Dawn of Operation Panties, Dood!",01008FA01187A000,32-bit;status-playable,playable,2022-10-13 12:42:58.000 +"Prinny Presents NIS Classics Volume 1",0100A6E01681C000,status-boots;crash;Needs Update,boots,2023-02-02 07:23:09.000 +"Prinny: Can I Really Be the Hero?",01007A0011878000,32-bit;status-playable;nvdec,playable,2023-10-22 09:25:25.000 +"PriPara: All Idol Perfect Stage",010007F00879E000,status-playable,playable,2022-11-22 16:35:52.000 +"Prison Architect",010029200AB1C000,status-playable,playable,2021-04-10 12:27:58.000 +"Prison City",0100C1801B914000,gpu;status-ingame,ingame,2024-03-01 08:19:33.000 +"Prison Princess",0100F4800F872000,status-playable,playable,2022-11-20 15:00:25.000 +"Professional Construction - The Simulation",0100A9800A1B6000,slow;status-playable,playable,2022-08-10 15:15:45.000 +"Professional Farmer: Nintendo Switch Edition",,slow;status-playable,playable,2020-12-16 13:38:19.000 +"Professor Lupo and his Horrible Pets",,status-playable,playable,2020-06-12 00:08:45.000 +"Professor Lupo: Ocean",0100D1F0132F6000,status-playable,playable,2021-04-14 16:33:33.000 +"Project Highrise: Architect's Edition",0100BBD00976C000,status-playable,playable,2022-08-10 17:19:12.000 +"Project Nimbus: Complete Edition",0100ACE00DAB6000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43.000 +"Project TRIANGLE STRATEGY Debut Demo",01002980140F6000,status-playable;UE4;demo,playable,2022-10-24 21:40:27.000 +"Project Warlock",,status-playable,playable,2020-06-16 10:50:41.000 +"Psikyo Collection Vol 1",,32-bit;status-playable,playable,2020-10-11 13:18:47.000 +"Psikyo Collection Vol. 3",0100A2300DB78000,status-ingame,ingame,2021-06-07 02:46:23.000 +"Psikyo Collection Vol.2",01009D400C4A8000,32-bit;status-playable,playable,2021-06-07 03:22:07.000 +"Psikyo Shooting Stars Alpha",01007A200F2E2000,32-bit;status-playable,playable,2021-04-13 12:03:43.000 +"Psikyo Shooting Stars Bravo",0100D7400F2E4000,32-bit;status-playable,playable,2021-06-14 12:09:07.000 +"PSYVARIAR DELTA",0100EC100A790000,nvdec;status-playable,playable,2021-01-20 13:01:46.000 +"Puchitto kurasutā",,Need-Update;crash;services;status-menus,menus,2020-07-04 16:44:28.000 +"Pulstario",0100861012474000,status-playable,playable,2022-10-06 11:02:01.000 +"Pumped BMX Pro",01009AE00B788000,status-playable;nvdec;online-broken,playable,2022-09-20 17:40:50.000 +"Pumpkin Jack",01006C10131F6000,status-playable;nvdec;UE4,playable,2022-10-13 12:52:32.000 +"PUSH THE CRATE",010016400F07E000,status-playable;nvdec;UE4,playable,2022-09-15 13:28:41.000 +"Push the Crate 2",0100B60010432000,UE4;gpu;nvdec;status-ingame,ingame,2021-06-10 14:20:01.000 +"Pushy and Pully in Blockland",,status-playable,playable,2020-07-04 11:44:41.000 +"Puyo Puyo Champions",,online;status-playable,playable,2020-06-19 11:35:08.000 +"Puyo Puyo Tetris 2",010038E011940000,status-playable;ldn-untested,playable,2023-09-26 11:35:25.000 +"Puzzle and Dragons GOLD",,slow;status-playable,playable,2020-05-13 15:09:34.000 +"Puzzle Bobble Everybubble!",010079E01A1E0000,audio;status-playable;ldn-works,playable,2023-06-10 03:53:40.000 +"Puzzle Book",,status-playable,playable,2020-09-28 13:26:01.000 +"Puzzle Box Maker",0100476004A9E000,status-playable;nvdec;online-broken,playable,2022-08-10 18:00:52.000 +"Pyramid Quest",0100A4E017372000,gpu;status-ingame,ingame,2023-08-16 21:14:52.000 +"Q-YO Blaster",,gpu;status-ingame,ingame,2020-06-07 22:36:53.000 +"Q.U.B.E. 2",010023600AA34000,UE4;status-playable,playable,2021-03-03 21:38:57.000 +"Qbics Paint",0100A8D003BAE000,gpu;services;status-ingame,ingame,2021-06-07 10:54:09.000 +"Quake",0100BA5012E54000,gpu;status-menus;crash,menus,2022-08-08 12:40:34.000 +"Quake II",010048F0195E8000,status-playable,playable,2023-08-15 03:42:14.000 +"QuakespasmNX",,status-nothing;crash;homebrew,nothing,2022-07-23 19:28:07.000 +"Quantum Replica",010045101288A000,status-playable;nvdec;UE4,playable,2022-10-30 21:17:22.000 +"Quarantine Circular",0100F1400BA88000,status-playable,playable,2021-01-20 15:24:15.000 +"Queen's Quest 4: Sacred Truce",0100DCF00F13A000,status-playable;nvdec,playable,2022-10-13 12:59:21.000 +"Quell Zen",0100492012378000,gpu;status-ingame,ingame,2021-06-11 15:59:53.000 +"Quest of Dungeons",01001DE005012000,status-playable,playable,2021-06-07 10:29:22.000 +"QuietMansion2",,status-playable,playable,2020-09-03 14:59:35.000 +"Quiplash 2 InterLASHional",0100AF100EE76000,status-playable;online-working,playable,2022-10-19 17:43:45.000 +"R-Type Dimensions EX",,status-playable,playable,2020-10-09 12:04:43.000 +"R-TYPE FINAL 2",0100F930136B6000,slow;status-ingame;nvdec;UE4,ingame,2022-10-30 21:46:29.000 +"R-TYPE FINAL 2 Demo",01007B0014300000,slow;status-ingame;nvdec;UE4;demo,ingame,2022-10-24 21:57:42.000 +"R.B.I. Baseball 17",0100B5A004302000,status-playable;online-working,playable,2022-08-11 11:55:47.000 +"R.B.I. Baseball 18",01005CC007616000,status-playable;nvdec;online-working,playable,2022-08-11 11:27:52.000 +"R.B.I. Baseball 19",0100FCB00BF40000,status-playable;nvdec;online-working,playable,2022-08-11 11:43:52.000 +"R.B.I. Baseball 20",010061400E7D4000,status-playable,playable,2021-06-15 21:16:29.000 +"R.B.I. Baseball 21",0100B4A0115CA000,status-playable;online-working,playable,2022-10-24 22:31:45.000 +"Rabi-Ribi",01005BF00E4DE000,status-playable,playable,2022-08-06 17:02:44.000 +"Race With Ryan",,UE4;gpu;nvdec;slow;status-ingame,ingame,2020-11-16 04:35:33.000 +"Rack N Ruin",,status-playable,playable,2020-09-04 15:20:26.000 +"RAD",010024400C516000,gpu;status-menus;crash;UE4,menus,2021-11-29 02:01:56.000 +"Rad Rodgers Radical Edition",010000600CD54000,status-playable;nvdec;online-broken,playable,2022-08-10 19:57:23.000 +"Radiation City",0100DA400E07E000,status-ingame;crash,ingame,2022-09-30 11:15:04.000 +"Radiation Island",01009E40095EE000,status-ingame;opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04.000 +"Radical Rabbit Stew",,status-playable,playable,2020-08-03 12:02:56.000 +"Radio Commander",0100BAD013B6E000,nvdec;status-playable,playable,2021-03-24 11:20:46.000 +"RADIO HAMMER STATION",01008FA00ACEC000,audout;status-playable,playable,2021-02-26 20:20:06.000 +"Raging Justice",01003D00099EC000,status-playable,playable,2021-06-03 14:06:50.000 +"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",01005CD013116000,status-playable,playable,2022-07-29 15:50:13.000 +"Raiden V: Director's Cut",01002B000D97E000,deadlock;status-boots;nvdec,boots,2024-07-12 07:31:46.000 +"Railway Empire",01002EE00DC02000,status-playable;nvdec,playable,2022-10-03 13:53:50.000 +"Rain City",,status-playable,playable,2020-10-08 16:59:03.000 +"Rain on Your Parade",0100BDD014232000,status-playable,playable,2021-05-06 19:32:04.000 +"Rain World",010047600BF72000,status-playable,playable,2023-05-10 23:34:08.000 +"Rainbows, toilets & unicorns",,nvdec;status-playable,playable,2020-10-03 18:08:18.000 +"Raji An Ancient Epic",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 10:05:25.000 +"Rapala Fishing: Pro Series",,nvdec;status-playable,playable,2020-12-16 13:26:53.000 +"Rascal Fight",,status-playable,playable,2020-10-08 13:23:30.000 +"Rawr-Off",,crash;nvdec;status-menus,menus,2020-07-02 00:14:44.000 +"Rayman Legends: Definitive Edition",01005FF002E2A000,status-playable;nvdec;ldn-works,playable,2023-05-27 18:33:07.000 +"Re:Turn - One Way Trip",0100F03011616000,status-playable,playable,2022-08-29 22:42:53.000 +"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",,gpu;status-boots;crash;nvdec;vulkan,boots,2023-03-07 21:27:24.000 +"Real Drift Racing",,status-playable,playable,2020-07-25 14:31:31.000 +"Real Heroes: Firefighter",010048600CC16000,status-playable,playable,2022-09-20 18:18:44.000 +"realMyst: Masterpiece Edition",,nvdec;status-playable,playable,2020-11-30 15:25:42.000 +"Reaper: Tale of a Pale Swordsman",,status-playable,playable,2020-12-12 15:12:23.000 +"Rebel Cops",0100D9B00E22C000,status-playable,playable,2022-09-11 10:02:53.000 +"Rebel Galaxy: Outlaw",0100CAA01084A000,status-playable;nvdec,playable,2022-12-01 07:44:56.000 +"Red Bow",0100CF600FF7A000,services;status-ingame,ingame,2021-11-29 03:51:34.000 +"Red Colony",0100351013A06000,status-playable,playable,2021-01-25 20:44:41.000 +"Red Dead Redemption",01007820196A6000,status-playable;amd-vendor-bug,playable,2024-09-13 13:26:13.000 +"Red Death",,status-playable,playable,2020-08-30 13:07:37.000 +"Red Faction Guerrilla Re-Mars-tered",010075000C608000,ldn-untested;nvdec;online;status-playable,playable,2021-06-07 03:02:13.000 +"Red Game Without a Great Name",,status-playable,playable,2021-01-19 21:42:35.000 +"Red Siren : Space Defense",010045400D73E000,UE4;status-playable,playable,2021-04-25 21:21:29.000 +"Red Wings - Aces of the Sky",,status-playable,playable,2020-06-12 01:19:53.000 +"Redeemer: Enhanced Edition",01000D100DCF8000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24.000 +"Redout: Space Assault",0100326010B98000,status-playable;UE4,playable,2022-10-19 23:04:35.000 +"Reel Fishing: Road Trip Adventure",010007C00E558000,status-playable,playable,2021-03-02 16:06:43.000 +"Reflection of Mine",,audio;status-playable,playable,2020-12-17 15:06:37.000 +"Refreshing Sideways Puzzle Ghost Hammer",,status-playable,playable,2020-10-18 12:08:54.000 +"Refunct",,UE4;status-playable,playable,2020-12-15 22:46:21.000 +"Regalia: Of Men and Monarchs - Royal Edition",0100FDF0083A6000,status-playable,playable,2022-08-11 12:24:01.000 +"Regions of Ruin",,status-playable,playable,2020-08-05 11:38:58.000 +"Reine des Fleurs",,cpu;crash;status-boots,boots,2020-09-27 18:50:39.000 +"REKT",,online;status-playable,playable,2020-09-28 12:33:56.000 +"Relicta",01002AD013C52000,status-playable;nvdec;UE4,playable,2022-10-31 12:48:33.000 +"Remi Lore",010095900B436000,status-playable,playable,2021-06-03 18:58:15.000 +"Remothered: Broken Porcelain",0100FBD00F5F6000,UE4;gpu;nvdec;status-ingame,ingame,2021-06-17 15:13:11.000 +"Remothered: Tormented Fathers",01001F100E8AE000,status-playable;nvdec;UE4,playable,2022-10-19 23:26:50.000 +"Rento Fortune Monolit",,ldn-untested;online;status-playable,playable,2021-01-19 19:52:21.000 +"Renzo Racer",01007CC0130C6000,status-playable,playable,2021-03-23 22:28:05.000 +"Rescue Tale",01003C400AD42000,status-playable,playable,2022-09-20 18:40:18.000 +"Resident Evil 4",010099A00BC1E000,status-playable;nvdec,playable,2022-11-16 21:16:04.000 +"Resident Evil 5",010018100CD46000,status-playable;nvdec,playable,2024-02-18 17:15:29.000 +"RESIDENT EVIL 6",01002A000CD48000,status-playable;nvdec,playable,2022-09-15 14:31:47.000 +"Resident Evil Revelations",0100643002136000,status-playable;nvdec;ldn-untested,playable,2022-08-11 12:44:19.000 +"RESIDENT EVIL REVELATIONS 2",010095300212A000,status-playable;online-broken;ldn-untested,playable,2022-08-11 12:57:50.000 +"Resolutiion",0100E7F00FFB8000,crash;status-boots,boots,2021-04-25 21:57:56.000 +"Restless Night [0100FF201568E000]",0100FF201568E000,status-nothing;crash,nothing,2022-02-09 10:54:49.000 +"Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000",0100069000078000,services;status-nothing;crash,nothing,2022-08-11 13:19:41.000 +"Retimed",010086E00BCB2000,status-playable,playable,2022-08-11 13:32:39.000 +"Retro City Rampage DX",,status-playable,playable,2021-01-05 17:04:17.000 +"Retrograde Arena",01000ED014A2C000,status-playable;online-broken,playable,2022-10-31 13:38:58.000 +"Return of the Obra Dinn",010032E00E6E2000,status-playable,playable,2022-09-15 19:56:45.000 +"Revenge of Justice",010027400F708000,status-playable;nvdec,playable,2022-11-20 15:43:23.000 +"Reventure",0100E2E00EA42000,status-playable,playable,2022-09-15 20:07:06.000 +"REZ PLZ",,status-playable,playable,2020-10-24 13:26:12.000 +"Rhythm Fighter",0100729012D18000,crash;status-nothing,nothing,2021-02-16 18:51:30.000 +"Rhythm of the Gods",,UE4;crash;status-nothing,nothing,2020-10-03 17:39:59.000 +"RICO",01009D5009234000,status-playable;nvdec;online-broken,playable,2022-08-11 20:16:40.000 +"Riddled Corpses EX",01002C700C326000,status-playable,playable,2021-06-06 16:02:44.000 +"Rift Keeper",0100AC600D898000,status-playable,playable,2022-09-20 19:48:20.000 +"RiME",,UE4;crash;gpu;status-boots,boots,2020-07-20 15:52:38.000 +"Rimelands",01006AC00EE6E000,status-playable,playable,2022-10-13 13:32:56.000 +"Ring Fit Adventure",01002FF008C24000,crash;services;status-nothing,nothing,2021-04-14 19:00:01.000 +"RIOT: Civil Unrest",010088E00B816000,status-playable,playable,2022-08-11 20:27:56.000 +"Riptide GP: Renegade",01002A6006AA4000,online;status-playable,playable,2021-04-13 23:33:02.000 +"Rise and Shine",,status-playable,playable,2020-12-12 15:56:43.000 +"Rise of Insanity",,status-playable,playable,2020-08-30 15:42:14.000 +"Rise: Race the Future",01006BA00E652000,status-playable,playable,2021-02-27 13:29:06.000 +"Rising Hell",010020C012F48000,status-playable,playable,2022-10-31 13:54:02.000 +"Risk",0100E8300A67A000,status-playable;nvdec;online-broken,playable,2022-08-01 18:53:28.000 +"Risk of Rain 2",010076D00E4BA000,status-playable;online-broken,playable,2024-03-04 17:01:05.000 +"Ritual",0100BD300F0EC000,status-playable,playable,2021-03-02 13:51:19.000 +"Ritual: Crown of Horns",010042500FABA000,status-playable,playable,2021-01-26 16:01:47.000 +"Rival Megagun",,nvdec;online;status-playable,playable,2021-01-19 14:01:46.000 +"RIVE: Ultimate Edition",,status-playable,playable,2021-03-24 18:45:55.000 +"River City Girls",,nvdec;status-playable,playable,2020-06-10 23:44:09.000 +"River City Girls 2",01002E80168F4000,status-playable,playable,2022-12-07 00:46:27.000 +"River City Melee Mach!!",0100B2100767C000,status-playable;online-broken,playable,2022-09-20 20:51:57.000 +"RMX Real Motocross",,status-playable,playable,2020-10-08 21:06:15.000 +"Road Redemption",010053000B986000,status-playable;online-broken,playable,2022-08-12 11:26:20.000 +"Road to Ballhalla",010002F009A7A000,UE4;status-playable,playable,2021-06-07 02:22:36.000 +"Road to Guangdong",,slow;status-playable,playable,2020-10-12 12:15:32.000 +"Roarr!",010068200C5BE000,status-playable,playable,2022-10-19 23:57:45.000 +"Robonauts",0100618004096000,status-playable;nvdec,playable,2022-08-12 11:33:23.000 +"ROBOTICS;NOTES DaSH",,status-playable,playable,2020-11-16 23:09:54.000 +"ROBOTICS;NOTES ELITE",,status-playable,playable,2020-11-26 10:28:20.000 +"Robozarro",,status-playable,playable,2020-09-03 13:33:40.000 +"Rock 'N Racing Off Road DX",,status-playable,playable,2021-01-10 15:27:15.000 +"Rock N' Racing Grand Prix",,status-playable,playable,2021-01-06 20:23:57.000 +"Rock of Ages 3: Make & Break",0100A1B00DB36000,status-playable;UE4,playable,2022-10-06 12:18:29.000 +"Rocket League",01005EE0036EC000,gpu;status-ingame;online-broken;ldn-untested,ingame,2024-02-08 19:51:36.000 +"Rocket Wars",,status-playable,playable,2020-07-24 14:27:39.000 +"Rogue Aces",0100EC7009348000,gpu;services;status-ingame;nvdec,ingame,2021-11-30 02:18:30.000 +"Rogue Heroes: Ruins of Tasos",01009FA010848000,online;status-playable,playable,2021-04-01 15:41:25.000 +"Rogue Legacy",,status-playable,playable,2020-08-10 19:17:28.000 +"Rogue Robots",,status-playable,playable,2020-06-16 12:16:11.000 +"Rogue Trooper Redux",01001CC00416C000,status-playable;nvdec;online-broken,playable,2022-08-12 11:53:01.000 +"RogueCube",0100C7300C0EC000,status-playable,playable,2021-06-16 12:16:42.000 +"Roll'd",,status-playable,playable,2020-07-04 20:24:01.000 +"RollerCoaster Tycoon 3: Complete Edition",01004900113F8000,32-bit;status-playable,playable,2022-10-17 14:18:01.000 +"RollerCoaster Tycoon Adventures",,nvdec;status-playable,playable,2021-01-05 18:14:18.000 +"Rolling Gunner",010076200CA16000,status-playable,playable,2021-05-26 12:54:18.000 +"Rolling Sky 2",0100579011B40000,status-playable,playable,2022-11-03 10:21:12.000 +"Romancing SaGa 2",01001F600829A000,status-playable,playable,2022-08-12 12:02:24.000 +"Romancing SaGa 3",,audio;gpu;status-ingame,ingame,2020-06-27 20:26:18.000 +"Roof Rage",010088100DD42000,status-boots;crash;regression,boots,2023-11-12 03:47:18.000 +"Roombo: First Blood",,nvdec;status-playable,playable,2020-08-05 12:11:37.000 +"Root Double -Before Crime * After Days- Xtend Edition",0100936011556000,status-nothing;crash,nothing,2022-02-05 02:03:49.000 +"Root Letter: Last Answer",010030A00DA3A000,status-playable;vulkan-backend-bug,playable,2022-09-17 10:25:57.000 +"Royal Roads",,status-playable,playable,2020-11-17 12:54:38.000 +"RPG Maker MV",,nvdec;status-playable,playable,2021-01-05 20:12:01.000 +"rRootage Reloaded [01005CD015986000]",01005CD015986000,status-playable,playable,2022-08-05 23:20:18.000 +"RSDKv5u",0000000000000000,status-ingame;homebrew,ingame,2024-04-01 16:25:34.000 +"Rugby Challenge 4",010009B00D33C000,slow;status-playable;online-broken;UE4,playable,2022-10-06 12:45:53.000 +"Ruiner",01006EC00F2CC000,status-playable;UE4,playable,2022-10-03 14:11:33.000 +"Run the Fan",010074F00DE4A000,status-playable,playable,2021-02-27 13:36:28.000 +"Runbow",,online;status-playable,playable,2021-01-08 22:47:44.000 +"Runbow Deluxe Edition",0100D37009B8A000,status-playable;online-broken,playable,2022-08-12 12:20:25.000 +"Rune Factory 3 Special",010081C0191D8000,status-playable,playable,2023-10-15 08:32:49.000 +"Rune Factory 4 Special",010051D00E3A4000,status-ingame;32-bit;crash;nvdec,ingame,2023-05-06 08:49:17.000 +"Rune Factory 5 (JP)",010014D01216E000,gpu;status-ingame,ingame,2021-06-01 12:00:36.000 +"RWBY: Grimm Eclipse",0100E21013908000,status-playable;online-broken,playable,2022-11-03 10:44:01.000 +"RXN -Raijin-",,nvdec;status-playable,playable,2021-01-10 16:05:43.000 +"S.N.I.P.E.R. Hunter Scope",0100B8B012ECA000,status-playable,playable,2021-04-19 15:58:09.000 +"Saboteur II: Avenging Angel",,Needs Update;cpu;crash;status-nothing,nothing,2021-01-26 14:47:37.000 +"Saboteur SiO",,slow;status-ingame,ingame,2020-12-17 16:59:49.000 +"Safety First!",,status-playable,playable,2021-01-06 09:05:23.000 +"SaGa Frontier Remastered",0100A51013530000,status-playable;nvdec,playable,2022-11-03 13:54:56.000 +"SaGa SCARLET GRACE: AMBITIONS",010003A00D0B4000,status-playable,playable,2022-10-06 13:20:31.000 +"Saints Row IV",01008D100D43E000,status-playable;ldn-untested;LAN,playable,2023-12-04 18:33:37.000 +"Saints Row: The Third - The Full Package",0100DE600BEEE000,slow;status-playable;LAN,playable,2023-08-24 02:40:58.000 +"Sakai and...",01007F000EB36000,status-playable;nvdec,playable,2022-12-15 13:53:19.000 +"Sakuna: Of Rice and Ruin",0100B1400E8FE000,status-playable,playable,2023-07-24 13:47:13.000 +"Sally Face",0100BBF0122B4000,status-playable,playable,2022-06-06 18:41:24.000 +"Salt And Sanctuary",,status-playable,playable,2020-10-22 11:52:19.000 +"Sam & Max Save the World",,status-playable,playable,2020-12-12 13:11:51.000 +"Samsara",,status-playable,playable,2021-01-11 15:14:12.000 +"Samurai Jack Battle Through Time",01006C600E46E000,status-playable;nvdec;UE4,playable,2022-10-06 13:33:59.000 +"SAMURAI SHODOWN",,UE4;crash;nvdec;status-menus,menus,2020-09-06 02:17:00.000 +"SAMURAI SHOWDOWN NEOGEO COLLECTION",0100F6800F48E000,nvdec;status-playable,playable,2021-06-14 17:12:56.000 +"Samurai Warrior",0100B6501A360000,status-playable,playable,2023-02-27 18:42:38.000 +"SamuraiAces for Nintendo Switch",,32-bit;status-playable,playable,2020-11-24 20:26:55.000 +"Sangoku Rensenki ~Otome no Heihou!~",,gpu;nvdec;status-ingame,ingame,2020-10-17 19:13:14.000 +"Satsujin Tantei Jack the Ripper",0100A4700BC98000,status-playable,playable,2021-06-21 16:32:54.000 +"Saturday Morning RPG",0100F0000869C000,status-playable;nvdec,playable,2022-08-12 12:41:50.000 +"Sausage Sports Club",,gpu;status-ingame,ingame,2021-01-10 05:37:17.000 +"Save Koch",0100C8300FA90000,status-playable,playable,2022-09-26 17:06:56.000 +"Save the Ninja Clan",,status-playable,playable,2021-01-11 13:56:37.000 +"Save Your Nuts",010091000F72C000,status-playable;nvdec;online-broken;UE4,playable,2022-09-27 23:12:02.000 +"Saviors of Sapphire Wings & Stranger of Sword City Revisited",0100AA00128BA000,status-menus;crash,menus,2022-10-24 23:00:46.000 +"Say No! More",01001C3012912000,status-playable,playable,2021-05-06 13:43:34.000 +"Sayonara Wild Hearts",010010A00A95E000,status-playable,playable,2023-10-23 03:20:01.000 +"Schlag den Star",0100ACB004006000,slow;status-playable;nvdec,playable,2022-08-12 14:28:22.000 +"Scott Pilgrim vs The World: The Game",0100394011C30000,services-horizon;status-nothing;crash,nothing,2024-07-12 08:13:03.000 +"Scribblenauts Mega Pack",,nvdec;status-playable,playable,2020-12-17 22:56:14.000 +"Scribblenauts Showdown",,gpu;nvdec;status-ingame,ingame,2020-12-17 23:05:53.000 +"SD GUNDAM BATTLE ALLIANCE Demo",0100829018568000,audio;status-ingame;crash;demo,ingame,2022-08-01 23:01:20.000 +"SD GUNDAM G GENERATION CROSS RAYS",010055700CEA8000,status-playable;nvdec,playable,2022-09-15 20:58:44.000 +"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00",,status-playable;nvdec,playable,2022-09-15 20:45:57.000 +"Sea King",0100E4A00D066000,UE4;nvdec;status-playable,playable,2021-06-04 15:49:22.000 +"Sea of Solitude The Director's Cut",0100AFE012BA2000,gpu;status-ingame,ingame,2024-07-12 18:29:29.000 +"Sea of Stars",01008C0016544000,status-playable,playable,2024-03-15 20:27:12.000 +"Sea of Stars Demo",010036F0182C4000,status-playable;demo,playable,2023-02-12 15:33:56.000 +"SeaBed",,status-playable,playable,2020-05-17 13:25:37.000 +"Season Match Bundle - Part 1 and 2",,status-playable,playable,2021-01-11 13:28:23.000 +"Season Match Full Bundle - Parts 1, 2 and 3",,status-playable,playable,2020-10-27 16:15:22.000 +"Secret Files 3",,nvdec;status-playable,playable,2020-10-24 15:32:39.000 +"Seek Hearts",010075D0101FA000,status-playable,playable,2022-11-22 15:06:26.000 +"Seers Isle",,status-playable,playable,2020-11-17 12:28:50.000 +"SEGA AGES Alex Kidd in Miracle World",0100A8900AF04000,online;status-playable,playable,2021-05-05 16:35:47.000 +"SEGA AGES Gain Ground",01001E600AF08000,online;status-playable,playable,2021-05-05 16:16:27.000 +"SEGA AGES OUTRUN",,status-playable,playable,2021-01-11 13:13:59.000 +"SEGA AGES PHANTASY STAR",,status-playable,playable,2021-01-11 12:49:48.000 +"SEGA AGES Puyo Puyo",01005F600CB0E000,online;status-playable,playable,2021-05-05 16:09:28.000 +"SEGA AGES SONIC THE HEDGEHOG 2",01000D200C614000,status-playable,playable,2022-09-21 20:26:35.000 +"SEGA AGES SPACE HARRIER",,status-playable,playable,2021-01-11 12:57:40.000 +"SEGA AGES Wonder Boy: Monster Land",01001E700AC60000,online;status-playable,playable,2021-05-05 16:28:25.000 +"SEGA Ages: Sonic The Hedgehog",010051F00AC5E000,slow;status-playable,playable,2023-03-05 20:16:31.000 +"SEGA Ages: Virtua Racing",010054400D2E6000,status-playable;online-broken,playable,2023-01-29 17:08:39.000 +"SEGA Genesis - Nintendo Switch Online",0100B3C014BDA000,status-nothing;crash;regression,nothing,2022-04-11 07:27:21.000 +"SEGA Mega Drive Classics",,online;status-playable,playable,2021-01-05 11:08:00.000 +"Semispheres",,status-playable,playable,2021-01-06 23:08:31.000 +"SENRAN KAGURA Peach Ball",0100D1800D902000,status-playable,playable,2021-06-03 15:12:10.000 +"SENRAN KAGURA Reflexions",,status-playable,playable,2020-03-23 19:15:23.000 +"Sentinels of Freedom",01009E500D29C000,status-playable,playable,2021-06-14 16:42:19.000 +"SENTRY",,status-playable,playable,2020-12-13 12:00:24.000 +"Sephirothic Stories",010059700D4A0000,services;status-menus,menus,2021-11-25 08:52:17.000 +"Serious Sam Collection",010007D00D43A000,status-boots;vulkan-backend-bug,boots,2022-10-13 13:53:34.000 +"Served! A gourmet race",0100B2C00E4DA000,status-playable;nvdec,playable,2022-09-28 12:46:00.000 +"Seven Knights -Time Wanderer-",010018400C24E000,status-playable;vulkan-backend-bug,playable,2022-10-13 22:08:54.000 +"Seven Pirates H",0100D6F016676000,status-playable,playable,2024-06-03 14:54:12.000 +"Severed",,status-playable,playable,2020-12-15 21:48:48.000 +"Shadow Blade Reload",0100D5500DA94000,nvdec;status-playable,playable,2021-06-11 18:40:43.000 +"Shadow Gangs",0100BE501382A000,cpu;gpu;status-ingame;crash;regression,ingame,2024-04-29 00:07:26.000 +"Shadow Man Remastered",0100C3A013840000,gpu;status-ingame,ingame,2024-05-20 06:01:39.000 +"Shadowgate",,status-playable,playable,2021-04-24 07:32:57.000 +"Shadowrun Returns",0100371013B3E000,gpu;status-ingame;Needs Update,ingame,2022-10-04 21:32:31.000 +"Shadowrun: Dragonfall - Director's Cut",01008310154C4000,gpu;status-ingame;Needs Update,ingame,2022-10-04 20:52:18.000 +"Shadowrun: Hong Kong - Extended Edition",0100C610154CA000,gpu;status-ingame;Needs Update,ingame,2022-10-04 20:53:09.000 +"Shadows 2: Perfidia",,status-playable,playable,2020-08-07 12:43:46.000 +"Shadows of Adam",,status-playable,playable,2021-01-11 13:35:58.000 +"Shadowverse Champions Battle",01002A800C064000,status-playable,playable,2022-10-02 22:59:29.000 +"Shadowverse: Champion’s Battle",01003B90136DA000,status-nothing;crash,nothing,2023-03-06 00:31:50.000 +"Shady Part of Me",0100820013612000,status-playable,playable,2022-10-20 11:31:55.000 +"Shakedown: Hawaii",,status-playable,playable,2021-01-07 09:44:36.000 +"Shakes on a Plane",01008DA012EC0000,status-menus;crash,menus,2021-11-25 08:52:25.000 +"Shalnor Legends: Sacred Lands",0100B4900E008000,status-playable,playable,2021-06-11 14:57:11.000 +"Shanky: The Vegan's Nightmare - 01000C00CC10000",,status-playable,playable,2021-01-26 15:03:55.000 +"Shantae",0100430013120000,status-playable,playable,2021-05-21 04:53:26.000 +"Shantae and the Pirate's Curse",0100EFD00A4FA000,status-playable,playable,2024-04-29 17:21:57.000 +"Shantae and the Seven Sirens",,nvdec;status-playable,playable,2020-06-19 12:23:40.000 +"Shantae: Half-Genie Hero Ultimate Edition",,status-playable,playable,2020-06-04 20:14:20.000 +"Shantae: Risky's Revenge - Director's Cut",0100ADA012370000,status-playable,playable,2022-10-06 20:47:39.000 +"Shaolin vs Wutang : Eastern Heroes",01003AB01062C000,deadlock;status-nothing,nothing,2021-03-29 20:38:54.000 +"Shape Of The World0",0100B250009B9600,UE4;status-playable,playable,2021-03-05 16:42:28.000 +"She Remembered Caterpillars",01004F50085F2000,status-playable,playable,2022-08-12 17:45:14.000 +"She Sees Red",01000320110C2000,status-playable;nvdec,playable,2022-09-30 11:30:15.000 +"Shelter Generations",01009EB004CB0000,status-playable,playable,2021-06-04 16:52:39.000 +"Sherlock Holmes: The Devil's Daughter",010020F014DBE000,gpu;status-ingame,ingame,2022-07-11 00:07:26.000 +"Shift Happens",,status-playable,playable,2021-01-05 21:24:18.000 +"SHIFT QUANTUM",,UE4;crash;status-ingame,ingame,2020-11-06 21:54:08.000 +"Shiftlings",01000750084B2000,nvdec;status-playable,playable,2021-03-04 13:49:54.000 +"Shin Megami Tensei III Nocturne HD Remaster",01003B0012DC2000,status-playable,playable,2022-11-03 22:53:27.000 +"Shin Megami Tensei III NOCTURNE HD REMASTER",010045800ED1E000,gpu;status-ingame;Needs Update,ingame,2022-11-03 19:57:01.000 +"Shin Megami Tensei V",010063B012DC6000,status-playable;UE4,playable,2024-02-21 06:30:07.000 +"Shin Megami Tensei V: Vengeance",010069C01AB82000,gpu;status-ingame;vulkan-backend-bug,ingame,2024-07-14 11:28:24.000 +"Shing! (サムライフォース:斬!)",01009050133B4000,status-playable;nvdec,playable,2022-10-22 00:48:54.000 +"Shining Resonance Refrain",01009A5009A9E000,status-playable;nvdec,playable,2022-08-12 18:03:01.000 +"Shinsekai Into the Depths",01004EE0104F6000,status-playable,playable,2022-09-28 14:07:51.000 +"Shio",0100C2F00A568000,status-playable,playable,2021-02-22 16:25:09.000 +"Shipped",,status-playable,playable,2020-11-21 14:22:32.000 +"Ships",01000E800FCB4000,status-playable,playable,2021-06-11 16:14:37.000 +"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",01007430122D0000,status-playable;nvdec,playable,2022-10-20 11:44:36.000 +"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",,cpu;crash;status-boots,boots,2020-09-27 19:01:25.000 +"Shiro0",01000244016BAE00,gpu;status-ingame,ingame,2024-01-13 08:54:39.000 +"Shoot 1UP DX",,status-playable,playable,2020-12-13 12:32:47.000 +"Shovel Knight: Specter of Torment",,status-playable,playable,2020-05-30 08:34:17.000 +"Shovel Knight: Treasure Trove",,status-playable,playable,2021-02-14 18:24:39.000 +"Shred!2 - Freeride MTB",,status-playable,playable,2020-05-30 14:34:09.000 +"Shu",,nvdec;status-playable,playable,2020-05-30 09:08:59.000 +"Shut Eye",,status-playable,playable,2020-07-23 18:08:35.000 +"Sid Meier's Civilization VI",010044500C182000,status-playable;ldn-untested,playable,2024-04-08 16:03:40.000 +"Sigi - A Fart for Melusina",01007FC00B674000,status-playable,playable,2021-02-22 16:46:58.000 +"Silence",0100F1400B0D6000,nvdec;status-playable,playable,2021-06-03 14:46:17.000 +"Silent World",,status-playable,playable,2020-08-28 13:45:13.000 +"Silk",010045500DFE2000,nvdec;status-playable,playable,2021-06-10 15:34:37.000 +"SilverStarChess",010016D00A964000,status-playable,playable,2021-05-06 15:25:57.000 +"Simona's Requiem",0100E8C019B36000,gpu;status-ingame,ingame,2023-02-21 18:29:19.000 +"Sin Slayers",01006FE010438000,status-playable,playable,2022-10-20 11:53:52.000 +"Sine Mora EX",01002820036A8000,gpu;status-ingame;online-broken,ingame,2022-08-12 19:36:18.000 +"Singled Out",,online;status-playable,playable,2020-08-03 13:06:18.000 +"Sinless",,nvdec;status-playable,playable,2020-08-09 20:18:55.000 +"SINNER: Sacrifice for Redemption",0100B16009C10000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33.000 +"Sir Lovelot",0100E9201410E000,status-playable,playable,2021-04-05 16:21:46.000 +"Skate City",0100134011E32000,status-playable,playable,2022-11-04 11:37:39.000 +"Skee-Ball",,status-playable,playable,2020-11-16 04:44:07.000 +"Skelattack",01001A900F862000,status-playable,playable,2021-06-09 15:26:26.000 +"Skelittle: A Giant Party!!",01008E700F952000,status-playable,playable,2021-06-09 19:08:34.000 +"Skelly Selest",,status-playable,playable,2020-05-30 15:38:18.000 +"Skies of Fury",,status-playable,playable,2020-05-30 16:40:54.000 +"Skullgirls: 2nd Encore",010046B00DE62000,status-playable,playable,2022-09-15 21:21:25.000 +"Skulls of the Shogun: Bone-a-fide Edition",,status-playable,playable,2020-08-31 18:58:12.000 +"Skully",0100D7B011654000,status-playable;nvdec;UE4,playable,2022-10-06 13:52:59.000 +"Sky Force Anniversary",010083100B5CA000,status-playable;online-broken,playable,2022-08-12 20:50:07.000 +"Sky Force Reloaded",,status-playable,playable,2021-01-04 20:06:57.000 +"Sky Gamblers - Afterburner",010003F00CC98000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55.000 +"Sky Gamblers: Storm Raiders",010093D00AC38000,gpu;audio;status-ingame;32-bit,ingame,2022-08-12 21:13:36.000 +"Sky Gamblers: Storm Raiders 2",010068200E96E000,gpu;status-ingame,ingame,2022-09-13 12:24:04.000 +"Sky Racket",,status-playable,playable,2020-09-07 12:22:24.000 +"Sky Ride",0100DDB004F30000,status-playable,playable,2021-02-22 16:53:07.000 +"Sky Rogue",,status-playable,playable,2020-05-30 08:26:28.000 +"Sky: Children of the Light",0100C52011460000,cpu;status-nothing;online-broken,nothing,2023-02-23 10:57:10.000 +"Skybolt Zack",010041C01014E000,status-playable,playable,2021-04-12 18:28:00.000 +"SKYHILL",0100A0A00D1AA000,status-playable,playable,2021-03-05 15:19:11.000 +"Skylanders Imaginators",,crash;services;status-boots,boots,2020-05-30 18:49:18.000 +"SKYPEACE",,status-playable,playable,2020-05-29 14:14:30.000 +"SkyScrappers",,status-playable,playable,2020-05-28 22:11:25.000 +"SkyTime",,slow;status-ingame,ingame,2020-05-30 09:24:51.000 +"SlabWell",01003AD00DEAE000,status-playable,playable,2021-02-22 17:02:51.000 +"Slain",,status-playable,playable,2020-05-29 14:26:16.000 +"Slain Back from Hell",0100BB100AF4C000,status-playable,playable,2022-08-12 23:36:19.000 +"Slay the Spire",010026300BA4A000,status-playable,playable,2023-01-20 15:09:26.000 +"Slayaway Camp: Butcher's Cut",0100501006494000,status-playable;opengl-backend-bug,playable,2022-08-12 23:44:05.000 +"Slayin 2",01004E900EDDA000,gpu;status-ingame,ingame,2024-04-19 16:15:26.000 +"Sleep Tight",01004AC0081DC000,gpu;status-ingame;UE4,ingame,2022-08-13 00:17:32.000 +"Slice Dice & Rice",0100F4500AA4E000,online;status-playable,playable,2021-02-22 17:44:23.000 +"Slide Stars",010010D011E1C000,status-menus;crash,menus,2021-11-25 08:53:43.000 +"Slime-san",,status-playable,playable,2020-05-30 16:15:12.000 +"Slime-san Superslime Edition",,status-playable,playable,2020-05-30 19:08:08.000 +"SMASHING THE BATTLE",01002AA00C974000,status-playable,playable,2021-06-11 15:53:57.000 +"SmileBASIC 4",0100C9100B06A000,gpu;status-menus,menus,2021-07-29 17:35:59.000 +"Smoke and Sacrifice",0100207007EB2000,status-playable,playable,2022-08-14 12:38:27.000 +"Smurfs Kart",01009790186FE000,status-playable,playable,2023-10-18 00:55:00.000 +"Snack World The Dungeon Crawl Gold",0100F2800D46E000,gpu;slow;status-ingame;nvdec;audout,ingame,2022-05-01 21:12:44.000 +"Snake Pass",0100C0F0020E8000,status-playable;nvdec;UE4,playable,2022-01-03 04:31:52.000 +"Sniper Elite 3 Ultimate Edition",010075A00BA14000,status-playable;ldn-untested,playable,2024-04-18 07:47:49.000 +"Sniper Elite 4",010007B010FCC000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15.000 +"Sniper Elite V2 Remastered",0100BB000A3AA000,slow;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13.000 +"Snipperclips",0100704000B3A000,status-playable,playable,2022-12-05 12:44:55.000 +"Snipperclips Plus",01008E20047DC000,status-playable,playable,2023-02-14 20:20:13.000 +"SNK 40th Anniversary Collection",01004AB00AEF8000,status-playable,playable,2022-08-14 13:33:15.000 +"SNK HEROINES Tag Team Frenzy",010027F00AD6C000,status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25.000 +"Snooker 19",01008DA00CBBA000,status-playable;nvdec;online-broken;UE4,playable,2022-09-11 17:43:22.000 +"Snow Moto Racing Freedom",010045300516E000,gpu;status-ingame;vulkan-backend-bug,ingame,2022-08-15 16:05:14.000 +"Snowboarding the Next Phase",0100BE200C34A000,nvdec;status-playable,playable,2021-02-23 12:56:58.000 +"SnowRunner - 0100FBD13AB6000",,services;status-boots;crash,boots,2023-10-07 00:01:16.000 +"Soccer Club Life: Playing Manager",010017B012AFC000,gpu;status-ingame,ingame,2022-10-25 11:59:22.000 +"Soccer Pinball",0100B5000E05C000,UE4;gpu;status-ingame,ingame,2021-06-15 20:56:51.000 +"Soccer Slammers",,status-playable,playable,2020-05-30 07:48:14.000 +"Soccer, Tactics & Glory",010095C00F9DE000,gpu;status-ingame,ingame,2022-09-26 17:15:58.000 +"SOLDAM Drop, Connect, Erase",,status-playable,playable,2020-05-30 09:18:54.000 +"SolDivide for Nintendo Switch",0100590009C38000,32-bit;status-playable,playable,2021-06-09 14:13:03.000 +"Solo: Islands of the Heart",010008600D1AC000,gpu;status-ingame;nvdec,ingame,2022-09-11 17:54:43.000 +"Some Distant Memory",01009EE00E91E000,status-playable,playable,2022-09-15 21:48:19.000 +"Song of Nunu: A League of Legends Story",01004F401BEBE000,status-ingame,ingame,2024-07-12 18:53:44.000 +"Songbird Symphony",0100E5400BF94000,status-playable,playable,2021-02-27 02:44:04.000 +"Songbringer",,status-playable,playable,2020-06-22 10:42:02.000 +"Sonic 1 (2013)",0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-06 18:31:20.000 +"Sonic 2 (2013)",0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-01 16:25:30.000 +"Sonic A.I.R",0000000000000000,status-ingame;homebrew,ingame,2024-04-01 16:25:32.000 +"Sonic CD",0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-01 16:25:31.000 +"Sonic Colors Ultimate [010040E0116B8000]",010040E0116B8000,status-playable,playable,2022-11-12 21:24:26.000 +"Sonic Forces",01001270012B6000,status-playable,playable,2024-07-28 13:11:21.000 +"Sonic Frontiers",01004AD014BF0000,gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53.000 +"Sonic Mania",01009AA000FAA000,status-playable,playable,2020-06-08 17:30:57.000 +"Sonic Mania Plus",01009AA000FAA000,status-playable,playable,2022-01-16 04:09:11.000 +"Sonic Superstars",01008F701C074000,gpu;status-ingame;nvdec,ingame,2023-10-28 17:48:07.000 +"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",010088801C150000,status-playable,playable,2024-08-20 13:26:56.000 +"SONIC X SHADOW GENERATIONS",01005EA01C0FC000,status-ingame;crash,ingame,2025-01-07 04:20:45.000 +"Soul Axiom Rebooted",,nvdec;slow;status-ingame,ingame,2020-09-04 12:41:01.000 +"Soul Searching",,status-playable,playable,2020-07-09 18:39:07.000 +"South Park: The Fractured But Whole",01008F2005154000,slow;status-playable;online-broken,playable,2024-07-08 17:47:28.000 +"Space Blaze",,status-playable,playable,2020-08-30 16:18:05.000 +"Space Cows",,UE4;crash;status-menus,menus,2020-06-15 11:33:20.000 +"SPACE ELITE FORCE",,status-playable,playable,2020-11-27 15:21:05.000 +"Space Pioneer",010047B010260000,status-playable,playable,2022-10-20 12:24:37.000 +"Space Ribbon",010010A009830000,status-playable,playable,2022-08-15 17:17:10.000 +"SpaceCadetPinball",0000000000000000,status-ingame;homebrew,ingame,2024-04-18 19:30:04.000 +"Spacecats with Lasers",0100D9B0041CE000,status-playable,playable,2022-08-15 17:22:44.000 +"Spaceland",,status-playable,playable,2020-11-01 14:31:56.000 +"Sparkle 2",,status-playable,playable,2020-10-19 11:51:39.000 +"Sparkle Unleashed",01000DC007E90000,status-playable,playable,2021-06-03 14:52:15.000 +"Sparkle ZERO",,gpu;slow;status-ingame,ingame,2020-03-23 18:19:18.000 +"Sparklite",01007ED00C032000,status-playable,playable,2022-08-06 11:35:41.000 +"Spartan",0100E6A009A26000,UE4;nvdec;status-playable,playable,2021-03-05 15:53:19.000 +"Speaking Simulator",,status-playable,playable,2020-10-08 13:00:39.000 +"Spectrum",01008B000A5AE000,status-playable,playable,2022-08-16 11:15:59.000 +"Speed 3: Grand Prix",0100F18010BA0000,status-playable;UE4,playable,2022-10-20 12:32:31.000 +"Speed Brawl",,slow;status-playable,playable,2020-09-18 22:08:16.000 +"Speed Limit",01000540139F6000,gpu;status-ingame,ingame,2022-09-02 18:37:40.000 +"Speed Truck Racing",010061F013A0E000,status-playable,playable,2022-10-20 12:57:04.000 +"Spellspire",0100E74007EAC000,status-playable,playable,2022-08-16 11:21:21.000 +"Spelunker Party!",010021F004270000,services;status-boots,boots,2022-08-16 11:25:49.000 +"Spelunky",0100710013ABA000,status-playable,playable,2021-11-20 17:45:03.000 +"Sphinx and the Cursed Mummy™",0100BD500BA94000,gpu;status-ingame;32-bit;opengl,ingame,2024-05-20 06:00:51.000 +"Spider Solitaire",,status-playable,playable,2020-12-16 16:19:30.000 +"Spinch",010076D0122A8000,status-playable,playable,2024-07-12 19:02:10.000 +"Spinny's journey",01001E40136FE000,status-ingame;crash,ingame,2021-11-30 03:39:44.000 +"Spiral Splatter",,status-playable,playable,2020-06-04 14:03:57.000 +"Spirit Hunter: NG",,32-bit;status-playable,playable,2020-12-17 20:38:47.000 +"Spirit of the North",01005E101122E000,status-playable;UE4,playable,2022-09-30 11:40:47.000 +"Spirit Roots",,nvdec;status-playable,playable,2020-07-10 13:33:32.000 +"Spiritfarer",0100BD400DC52000,gpu;status-ingame,ingame,2022-10-06 16:31:38.000 +"SpiritSphere DX",01009D60080B4000,status-playable,playable,2021-07-03 23:37:49.000 +"Spitlings",010042700E3FC000,status-playable;online-broken,playable,2022-10-06 16:42:39.000 +"Splatoon 2",01003BC0000A0000,status-playable;ldn-works;LAN,playable,2024-07-12 19:11:15.000 +"Splatoon 3",0100C2500FC20000,status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11.000 +"Splatoon 3: Splatfest World Premiere",0100BA0018500000,gpu;status-ingame;online-broken;demo,ingame,2022-09-19 03:17:12.000 +"SpongeBob SquarePants The Cosmic Shake",01009FB0172F4000,gpu;status-ingame;UE4,ingame,2023-08-01 19:29:53.000 +"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",010062800D39C000,status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34.000 +"Spooky Chase",010097C01336A000,status-playable,playable,2022-11-04 12:17:44.000 +"Spooky Ghosts Dot Com",0100C6100D75E000,status-playable,playable,2021-06-15 15:16:11.000 +"Sports Party",0100DE9005170000,nvdec;status-playable,playable,2021-03-05 13:40:42.000 +"Spot The Difference",0100E04009BD4000,status-playable,playable,2022-08-16 11:49:52.000 +"Spot the Differences: Party!",010052100D1B4000,status-playable,playable,2022-08-16 11:55:26.000 +"Spy Alarm",01000E6015350000,services;status-ingame,ingame,2022-12-09 10:12:51.000 +"SpyHack",01005D701264A000,status-playable,playable,2021-04-15 10:53:51.000 +"Spyro Reignited Trilogy",,Needs More Attention;UE4;crash;gpu;nvdec;status-menus,menus,2021-01-22 13:01:56.000 +"Spyro Reignited Trilogy",010077B00E046000,status-playable;nvdec;UE4,playable,2022-09-11 18:38:33.000 +"Squeakers",,status-playable,playable,2020-12-13 12:13:05.000 +"Squidgies Takeover",,status-playable,playable,2020-07-20 22:28:08.000 +"Squidlit",,status-playable,playable,2020-08-06 12:38:32.000 +"STAR OCEAN First Departure R",0100EBF00E702000,nvdec;status-playable,playable,2021-07-05 19:29:16.000 +"STAR OCEAN The Second Story R",010065301A2E0000,status-ingame;crash,ingame,2024-06-01 02:39:59.000 +"Star Renegades",,nvdec;status-playable,playable,2020-12-11 12:19:23.000 +"Star Story: The Horizon Escape",,status-playable,playable,2020-08-11 22:31:38.000 +"Star Trek Prodigy: Supernova",01009DF015776000,status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50.000 +"Star Wars - Knights Of The Old Republic",0100854015868000,gpu;deadlock;status-boots,boots,2024-02-12 10:13:51.000 +"STAR WARS Battlefront Classic Collection",010040701B948000,gpu;status-ingame;vulkan,ingame,2024-07-12 19:24:21.000 +"STAR WARS Episode I: Racer",0100BD100FFBE000,slow;status-playable;nvdec,playable,2022-10-03 16:08:36.000 +"STAR WARS Jedi Knight II Jedi Outcast",0100BB500EACA000,gpu;status-ingame,ingame,2022-09-15 22:51:00.000 +"Star Wars Jedi Knight: Jedi Academy",01008CA00FAE8000,gpu;status-boots,boots,2021-06-16 12:35:30.000 +"Star Wars: Republic Commando",0100FA10115F8000,gpu;status-ingame;32-bit,ingame,2023-10-31 15:57:17.000 +"STAR WARS: The Force Unleashed",0100153014544000,status-playable,playable,2024-05-01 17:41:28.000 +"Star Wars™ Pinball",01006DA00DEAC000,status-playable;online-broken,playable,2022-09-11 18:53:31.000 +"Star-Crossed Myth - The Department of Wishes",01005EB00EA10000,gpu;status-ingame,ingame,2021-06-04 19:34:36.000 +"Star99",0100E6B0115FC000,status-menus;online,menus,2021-11-26 14:18:51.000 +"Stardash",01002100137BA000,status-playable,playable,2021-01-21 16:31:19.000 +"Stardew Valley",0100E65002BB8000,status-playable;online-broken;ldn-untested,playable,2024-02-14 03:11:19.000 +"Starlink: Battle for Atlas",01002CC003FE6000,services-horizon;status-nothing;crash;Needs Update,nothing,2024-05-05 17:25:11.000 +"Starlit Adventures Golden Stars",,status-playable,playable,2020-11-21 12:14:43.000 +"Starship Avenger Operation: Take Back Earth",,status-playable,playable,2021-01-12 15:52:55.000 +"State of Anarchy: Master of Mayhem",,nvdec;status-playable,playable,2021-01-12 19:00:05.000 +"State of Mind",,UE4;crash;status-boots,boots,2020-06-22 22:17:50.000 +"STAY",0100616009082000,crash;services;status-boots,boots,2021-04-23 14:24:52.000 +"STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY",0100B61009C60000,status-playable,playable,2021-01-26 17:37:28.000 +"Steam Prison",01008010118CC000,nvdec;status-playable,playable,2021-04-01 15:34:11.000 +"Steam Tactics",0100AE100DAFA000,status-playable,playable,2022-10-06 16:53:45.000 +"Steamburg",,status-playable,playable,2021-01-13 08:42:01.000 +"SteamWorld Dig",01009320084A4000,status-playable,playable,2024-08-19 12:12:23.000 +"SteamWorld Dig 2",0100CA9002322000,status-playable,playable,2022-12-21 19:25:42.000 +"SteamWorld Quest",,nvdec;status-playable,playable,2020-11-09 13:10:04.000 +"Steel Assault",01001C6014772000,status-playable,playable,2022-12-06 14:48:30.000 +"Steins;Gate Elite",,status-playable,playable,2020-08-04 07:33:32.000 +"STEINS;GATE: My Darling's Embrace",0100CB400E9BC000,status-playable;nvdec,playable,2022-11-20 16:48:34.000 +"Stela",01002DE01043E000,UE4;status-playable,playable,2021-06-15 13:28:34.000 +"Stellar Interface",01005A700C954000,status-playable,playable,2022-10-20 13:44:33.000 +"STELLATUM",0100BC800EDA2000,gpu;status-playable,playable,2021-03-07 16:30:23.000 +"Steredenn",,status-playable,playable,2021-01-13 09:19:42.000 +"Stern Pinball Arcade",0100AE0006474000,status-playable,playable,2022-08-16 14:24:41.000 +"Stikbold! A Dodgeball Adventure DELUXE",,status-playable,playable,2021-01-11 20:12:54.000 +"Stitchy in Tooki Trouble",010077B014518000,status-playable,playable,2021-05-06 16:25:53.000 +"STONE",010070D00F640000,status-playable;UE4,playable,2022-09-30 11:53:32.000 +"Stories Untold",010074400F6A8000,status-playable;nvdec,playable,2022-12-22 01:08:46.000 +"Storm Boy",010040D00BCF4000,status-playable,playable,2022-10-20 14:15:06.000 +"Storm in a Teacup",0100B2300B932000,gpu;status-ingame,ingame,2021-11-06 02:03:19.000 +"Story of a Gladiator",,status-playable,playable,2020-07-29 15:08:18.000 +"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",010017301007E000,status-playable,playable,2021-03-18 11:42:19.000 +"Story of Seasons: Friends of Mineral Town",0100ED400EEC2000,status-playable,playable,2022-10-03 16:40:31.000 +"Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000",010078D00E8F4000,slow;status-playable;nvdec;UE4,playable,2022-09-16 11:58:38.000 +"Strange Field Football",01000A6013F86000,status-playable,playable,2022-11-04 12:25:57.000 +"Stranger Things 3: The Game",,status-playable,playable,2021-01-11 17:44:09.000 +"Strawberry Vinegar",0100D7E011C64000,status-playable;nvdec,playable,2022-12-05 16:25:40.000 +"Stray",010075101EF84000,status-ingame;crash,ingame,2025-01-07 04:03:00.000 +"Street Fighter 30th Anniversary Collection",0100024008310000,status-playable;online-broken;ldn-partial,playable,2022-08-20 16:50:47.000 +"Street Outlaws: The List",010012400D202000,nvdec;status-playable,playable,2021-06-11 12:15:32.000 +"Street Power Soccer",,UE4;crash;status-boots,boots,2020-11-21 12:28:57.000 +"Streets of Rage 4",,nvdec;online;status-playable,playable,2020-07-07 21:21:22.000 +"Strife: Veteran Edition",0100BDE012928000,gpu;status-ingame,ingame,2022-01-15 05:10:42.000 +"Strike Force - War on Terror",010039100DACC000,status-menus;crash;Needs Update,menus,2021-11-24 08:08:20.000 +"Strike Suit Zero: Director's Cut",010072500D52E000,crash;status-boots,boots,2021-04-23 17:15:14.000 +"StrikeForce Kitty",,nvdec;status-playable,playable,2020-07-29 16:22:15.000 +"STRIKERS1945 for Nintendo Switch",0100FF5005B76000,32-bit;status-playable,playable,2021-06-03 19:35:04.000 +"STRIKERS1945II for Nintendo Switch",0100720008ED2000,32-bit;status-playable,playable,2021-06-03 19:43:00.000 +"Struggling",,status-playable,playable,2020-10-15 20:37:03.000 +"Stunt Kite Party",0100AF000B4AE000,nvdec;status-playable,playable,2021-01-25 17:16:56.000 +"STURMWIND EX",0100C5500E7AE000,audio;32-bit;status-playable,playable,2022-09-16 12:01:39.000 +"Sub Level Zero: Redux",0100E6400BCE8000,status-playable,playable,2022-09-16 12:30:03.000 +"Subarashiki Kono Sekai -Final Remix-",,services;slow;status-ingame,ingame,2020-02-10 16:21:51.000 +"Subdivision Infinity DX",010001400E474000,UE4;crash;status-boots,boots,2021-03-03 14:26:46.000 +"Submerged",0100EDA00D866000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01.000 +"Subnautica",0100429011144000,status-playable;vulkan-backend-bug,playable,2022-11-04 13:07:29.000 +"Subnautica Below Zero",010014C011146000,status-playable,playable,2022-12-23 14:15:13.000 +"Suguru Nature",0100BF9012AC6000,crash;status-ingame,ingame,2021-07-29 11:36:27.000 +"Suicide Guy",01005CD00A2A2000,status-playable,playable,2021-01-26 13:13:54.000 +"Suicide Guy: Sleepin' Deeply",0100DE000C2E4000,status-ingame;Needs More Attention,ingame,2022-09-20 23:45:25.000 +"Sumire",01003D50126A4000,status-playable,playable,2022-11-12 13:40:43.000 +"Summer in Mara",0100A130109B2000,nvdec;status-playable,playable,2021-03-06 14:10:38.000 +"Summer Sweetheart",01004E500DB9E000,status-playable;nvdec,playable,2022-09-16 12:51:46.000 +"Sunblaze",0100BFE014476000,status-playable,playable,2022-11-12 13:59:23.000 +"Sundered: Eldritch Edition",01002D3007962000,gpu;status-ingame,ingame,2021-06-07 11:46:00.000 +"Super Beat Sports",0100F7000464A000,status-playable;ldn-untested,playable,2022-08-16 16:05:50.000 +"Super Blood Hockey",,status-playable,playable,2020-12-11 20:01:41.000 +"Super Bomberman R",01007AD00013E000,status-playable;nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14.000 +"SUPER BOMBERMAN R 2",0100B87017D94000,deadlock;status-boots,boots,2023-09-29 13:19:51.000 +"Super Cane Magic ZERO",0100D9B00DB5E000,status-playable,playable,2022-09-12 15:33:46.000 +"Super Chariot",010065F004E5E000,status-playable,playable,2021-06-03 13:19:01.000 +"SUPER DRAGON BALL HEROES WORLD MISSION",0100E5E00C464000,status-playable;nvdec;online-broken,playable,2022-08-17 12:56:30.000 +"Super Dungeon Tactics",010023100B19A000,status-playable,playable,2022-10-06 17:40:40.000 +"Super Inefficient Golf",010056800B534000,status-playable;UE4,playable,2022-08-17 15:53:45.000 +"Super Jumpy Ball",,status-playable,playable,2020-07-04 18:40:36.000 +"Super Kickers League",0100196009998000,status-playable,playable,2021-01-26 13:36:48.000 +"Super Kirby Clash",01003FB00C5A8000,status-playable;ldn-works,playable,2024-07-30 18:21:55.000 +"Super Korotama",010000D00F81A000,status-playable,playable,2021-06-06 19:06:22.000 +"Super Loop Drive",01003E300FCAE000,status-playable;nvdec;UE4,playable,2022-09-22 10:58:05.000 +"Super Mario 3D All-Stars",010049900F546000,services-horizon;slow;status-ingame;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16.000 +"Super Mario 3D World + Bowser's Fury",010028600EBDA000,status-playable;ldn-works,playable,2024-07-31 10:45:37.000 +"Super Mario 64",054507E0B7552000,status-ingame;homebrew,ingame,2024-03-20 16:57:27.000 +"Super Mario Bros. 35",0100277011F1A000,status-menus;online-broken,menus,2022-08-07 16:27:25.000 +"Super Mario Bros. Wonder",010015100B514000,status-playable;amd-vendor-bug,playable,2024-09-06 13:21:21.000 +"Super Mario Maker 2",01009B90006DC000,status-playable;online-broken;ldn-broken,playable,2024-08-25 11:05:19.000 +"Super Mario Odyssey",0100000000010000,status-playable;nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34.000 +"Super Mario Party",010036B0034E4000,gpu;status-ingame;Needs Update;ldn-works,ingame,2024-06-21 05:10:16.000 +"Super Mario RPG",0100BC0018138000,gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42.000 +"Super Mario World",0000000000000000,status-boots;homebrew,boots,2024-06-13 01:40:31.000 +"Super Meat Boy",,services;status-playable,playable,2020-04-02 23:10:07.000 +"Super Meat Boy Forever",01009C200D60E000,gpu;status-boots,boots,2021-04-26 14:25:39.000 +"Super Mega Space Blaster Special Turbo",,online;status-playable,playable,2020-08-06 12:13:25.000 +"Super Monkey Ball Banana Rumble",010031F019294000,status-playable,playable,2024-06-28 10:39:18.000 +"Super Monkey Ball: Banana Blitz HD",0100B2A00E1E0000,status-playable;online-broken,playable,2022-09-16 13:16:25.000 +"Super Mutant Alien Assault",,status-playable,playable,2020-06-07 23:32:45.000 +"Super Neptunia RPG",01004D600AC14000,status-playable;nvdec,playable,2022-08-17 16:38:52.000 +"Super Nintendo Entertainment System - Nintendo Switch Online",,status-playable,playable,2021-01-05 00:29:48.000 +"Super One More Jump",0100284007D6C000,status-playable,playable,2022-08-17 16:47:47.000 +"Super Punch Patrol",01001F90122B2000,status-playable,playable,2024-07-12 19:49:02.000 +"Super Putty Squad",0100331005E8E000,gpu;status-ingame;32-bit,ingame,2024-04-29 15:51:54.000 +"SUPER ROBOT WARS T",,online;status-playable,playable,2021-03-25 11:00:40.000 +"SUPER ROBOT WARS V",,online;status-playable,playable,2020-06-23 12:56:37.000 +"SUPER ROBOT WARS X",,online;status-playable,playable,2020-08-05 19:18:51.000 +"Super Saurio Fly",,nvdec;status-playable,playable,2020-08-06 13:12:14.000 +"Super Skelemania",,status-playable,playable,2020-06-07 22:59:50.000 +"Super Smash Bros. Ultimate",01006A800016E000,gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21.000 +"Super Soccer Blast",0100D61012270000,gpu;status-ingame,ingame,2022-02-16 08:39:12.000 +"Super Sportmatchen",0100A9300A4AE000,status-playable,playable,2022-08-19 12:34:40.000 +"Super Street: Racer",0100FB400F54E000,status-playable;UE4,playable,2022-09-16 13:43:14.000 +"Super Tennis Blast - 01000500DB50000",,status-playable,playable,2022-08-19 16:20:48.000 +"Super Toy Cars 2",0100C6800D770000,gpu;regression;status-ingame,ingame,2021-03-02 20:15:15.000 +"Super Volley Blast",010035B00B3F0000,status-playable,playable,2022-08-19 18:14:40.000 +"Superbeat: Xonic EX",0100FF60051E2000,status-ingame;crash;nvdec,ingame,2022-08-19 18:54:40.000 +"SuperEpic: The Entertainment War",0100630010252000,status-playable,playable,2022-10-13 23:02:48.000 +"Superhot",01001A500E8B4000,status-playable,playable,2021-05-05 19:51:30.000 +"Superliminal",,status-playable,playable,2020-09-03 13:20:50.000 +"Supermarket Shriek",0100C01012654000,status-playable,playable,2022-10-13 23:19:20.000 +"Supraland",0100A6E01201C000,status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11.000 +"Survive! Mr. Cube",010029A00AEB0000,status-playable,playable,2022-10-20 14:44:47.000 +"SUSHI REVERSI",01005AB01119C000,status-playable,playable,2021-06-11 19:26:58.000 +"Sushi Striker: The Way of Sushido",,nvdec;status-playable,playable,2020-06-26 20:49:11.000 +"Sweet Witches",0100D6D00EC2C000,status-playable;nvdec,playable,2022-10-20 14:56:37.000 +"Swimsanity!",010049D00C8B0000,status-menus;online,menus,2021-11-26 14:27:16.000 +"SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION",01005DF00DC26000,UE4;gpu;online;status-ingame,ingame,2021-06-09 16:58:50.000 +"SWORD ART ONLINE: Hollow Realization Deluxe Edition",01001B600D1D6000,status-playable;nvdec,playable,2022-08-19 19:19:15.000 +"Sword of the Guardian",,status-playable,playable,2020-07-16 12:24:39.000 +"Sword of the Necromancer",0100E4701355C000,status-ingame;crash,ingame,2022-12-10 01:28:39.000 +"Syberia 1 & 2",01004BB00421E000,status-playable,playable,2021-12-24 12:06:25.000 +"Syberia 2",010028C003FD6000,gpu;status-ingame,ingame,2022-08-24 12:43:03.000 +"Syberia 3",0100CBE004E6C000,nvdec;status-playable,playable,2021-01-25 16:15:12.000 +"Sydney Hunter and the Curse of the Mayan",,status-playable,playable,2020-06-15 12:15:57.000 +"SYNAPTIC DRIVE",,online;status-playable,playable,2020-09-07 13:44:05.000 +"Synergia",01009E700F448000,status-playable,playable,2021-04-06 17:58:04.000 +"SYNTHETIK: Ultimate",01009BF00E7D2000,gpu;status-ingame;crash,ingame,2022-08-30 03:19:25.000 +"Table Top Racing World Tour Nitro Edition",,status-playable,playable,2020-04-05 23:21:30.000 +"Tactical Mind",01000F20083A8000,status-playable,playable,2021-01-25 18:05:00.000 +"Tactical Mind 2",,status-playable,playable,2020-07-01 23:11:07.000 +"Tactics Ogre Reborn",0100E12013C1A000,status-playable;vulkan-backend-bug,playable,2024-04-09 06:21:35.000 +"Tactics V: ""Obsidian Brigade",01007C7006AEE000,status-playable,playable,2021-02-28 15:09:42.000 +"Taiko no Tatsujin Rhythmic Adventure Pack",,status-playable,playable,2020-12-03 07:28:26.000 +"Taiko no Tatsujin: Drum 'n' Fun!",01002C000B552000,status-playable;online-broken;ldn-broken,playable,2023-05-20 15:10:12.000 +"Taiko no Tatsujin: Rhythm Festival",0100BCA0135A0000,status-playable,playable,2023-11-13 13:16:34.000 +"Taiko Risshiden V DX",0100346017304000,status-nothing;crash,nothing,2022-06-06 16:25:31.000 +"Taimumari: Complete Edition",010040A00EA26000,status-playable,playable,2022-12-06 13:34:49.000 +"Tales from the Borderlands",0100F0C011A68000,status-playable;nvdec,playable,2022-10-25 18:44:14.000 +"Tales of the Tiny Planet",0100408007078000,status-playable,playable,2021-01-25 15:47:41.000 +"Tales of Vesperia: Definitive Edition",01002C0008E52000,status-playable,playable,2024-09-28 03:20:47.000 +"Tamashii",010012800EE3E000,status-playable,playable,2021-06-10 15:26:20.000 +"Tamiku",010008A0128C4000,gpu;status-ingame,ingame,2021-06-15 20:06:55.000 +"Tangledeep",,crash;status-boots,boots,2021-01-05 04:08:41.000 +"TaniNani",01007DB010D2C000,crash;kernel;status-nothing,nothing,2021-04-08 03:06:44.000 +"Tank Mechanic Simulator",,status-playable,playable,2020-12-11 15:10:45.000 +"Tanuki Justice",01007A601318C000,status-playable;opengl,playable,2023-02-21 18:28:10.000 +"Tanzia",01004DF007564000,status-playable,playable,2021-06-07 11:10:25.000 +"Task Force Kampas",,status-playable,playable,2020-11-30 14:44:15.000 +"Taxi Chaos",0100B76011DAA000,slow;status-playable;online-broken;UE4,playable,2022-10-25 19:13:00.000 +"Tcheco in the Castle of Lucio",,status-playable,playable,2020-06-27 13:35:43.000 +"Team Sonic Racing",010092B0091D0000,status-playable;online-broken;ldn-works,playable,2024-02-05 15:05:27.000 +"Teenage Mutant Ninja Turtles: Shredder's Revenge",0100FE701475A000,deadlock;status-boots;crash,boots,2024-09-28 09:31:39.000 +"Teenage Mutant Ninja Turtles: Splintered Fate",01005CF01E784000,status-playable,playable,2024-08-03 13:50:42.000 +"Teenage Mutant Ninja Turtles: The Cowabunga Collection",0100FDB0154E4000,status-playable,playable,2024-01-22 19:39:04.000 +"Telling Lies",,status-playable,playable,2020-10-23 21:14:51.000 +"Temtem",0100C8B012DEA000,status-menus;online-broken,menus,2022-12-17 17:36:11.000 +"TENGAI for Nintendo Switch",,32-bit;status-playable,playable,2020-11-25 19:52:26.000 +"Tennis",,status-playable,playable,2020-06-01 20:50:36.000 +"Tennis in the Face",01002970080AA000,status-playable,playable,2022-08-22 14:10:54.000 +"Tennis World Tour",0100092006814000,status-playable;online-broken,playable,2022-08-22 14:27:10.000 +"Tennis World Tour 2",0100950012F66000,status-playable;online-broken,playable,2022-10-14 10:43:16.000 +"Terraria",0100E46006708000,status-playable;online-broken,playable,2022-09-12 16:14:57.000 +"TERROR SQUID",010070C00FB56000,status-playable;online-broken,playable,2023-10-30 22:29:29.000 +"TERRORHYTHM (TRRT)",010043700EB68000,status-playable,playable,2021-02-27 13:18:14.000 +"Tesla vs Lovecraft",0100FBC007EAE000,status-playable,playable,2023-11-21 06:19:36.000 +"Teslagrad",01005C8005F34000,status-playable,playable,2021-02-23 14:41:02.000 +"Tested on Humans: Escape Room",01006F701507A000,status-playable,playable,2022-11-12 14:42:52.000 +"Testra's Escape",,status-playable,playable,2020-06-03 18:21:14.000 +"TETRA for Nintendo Switch",,status-playable,playable,2020-06-26 20:49:55.000 +"TETRIS 99",010040600C5CE000,gpu;status-ingame;online-broken;ldn-untested,ingame,2024-05-02 16:36:41.000 +"Tetsumo Party",,status-playable,playable,2020-06-09 22:39:55.000 +"The Adventure Pals",01008ED0087A4000,status-playable,playable,2022-08-22 14:48:52.000 +"The Adventures of 00 Dilly",,status-playable,playable,2020-12-30 19:32:29.000 +"The Adventures of Elena Temple",,status-playable,playable,2020-06-03 23:15:35.000 +"The Alliance Alive HD Remastered",010045A00E038000,nvdec;status-playable,playable,2021-03-07 15:43:45.000 +"The Almost Gone",,status-playable,playable,2020-07-05 12:33:07.000 +"The Bard's Tale ARPG: Remastered and Resnarkled",0100CD500DDAE000,gpu;status-ingame;nvdec;online-working,ingame,2024-07-18 12:52:01.000 +"The Battle Cats Unite!",01001E50141BC000,deadlock;status-ingame,ingame,2021-12-14 21:38:34.000 +"The Big Journey",010089600E66A000,status-playable,playable,2022-09-16 14:03:08.000 +"The Binding of Isaac: Afterbirth+",010021C000B6A000,status-playable,playable,2021-04-26 14:11:56.000 +"The Bluecoats: North & South",,nvdec;status-playable,playable,2020-12-10 21:22:29.000 +"The Book of Unwritten Tales 2",010062500BFC0000,status-playable,playable,2021-06-09 14:42:53.000 +"The Bridge",,status-playable,playable,2020-06-03 13:53:26.000 +"The Bug Butcher",,status-playable,playable,2020-06-03 12:02:04.000 +"The Bunker",01001B40086E2000,status-playable;nvdec,playable,2022-09-16 14:24:05.000 +"The Caligula Effect: Overdose",,UE4;gpu;status-ingame,ingame,2021-01-04 11:07:50.000 +"The Childs Sight",010066800E9F8000,status-playable,playable,2021-06-11 19:04:56.000 +"The Coma 2: Vicious Sisters",,gpu;status-ingame,ingame,2020-06-20 12:51:51.000 +"The Coma: Recut",,status-playable,playable,2020-06-03 15:11:23.000 +"The Complex",01004170113D4000,status-playable;nvdec,playable,2022-09-28 14:35:41.000 +"The Copper Canyon Dixie Dash",01000F20102AC000,status-playable;UE4,playable,2022-09-29 11:42:29.000 +"The Count Lucanor",01000850037C0000,status-playable;nvdec,playable,2022-08-22 15:26:37.000 +"The Cruel King and the Great Hero",0100EBA01548E000,gpu;services;status-ingame,ingame,2022-12-02 07:02:08.000 +"The Dark Crystal",,status-playable,playable,2020-08-11 13:43:41.000 +"The Darkside Detective",,status-playable,playable,2020-06-03 22:16:18.000 +"The Elder Scrolls V: Skyrim",01000A10041EA000,gpu;status-ingame;crash,ingame,2024-07-14 03:21:31.000 +"The End is Nigh",,status-playable,playable,2020-06-01 11:26:45.000 +"The Escapists 2",,nvdec;status-playable,playable,2020-09-24 12:31:31.000 +"The Escapists: Complete Edition",01001B700BA7C000,status-playable,playable,2021-02-24 17:50:31.000 +"The Executioner",0100C2E0129A6000,nvdec;status-playable,playable,2021-01-23 00:31:28.000 +"The Experiment: Escape Room",01006050114D4000,gpu;status-ingame,ingame,2022-09-30 13:20:35.000 +"The Eyes of Ara",0100B5900DFB2000,status-playable,playable,2022-09-16 14:44:06.000 +"The Fall",,gpu;status-ingame,ingame,2020-05-31 23:31:16.000 +"The Fall Part 2: Unbound",,status-playable,playable,2021-11-06 02:18:08.000 +"The Final Station",0100CDC00789E000,status-playable;nvdec,playable,2022-08-22 15:54:39.000 +"The First Tree",010098800A1E4000,status-playable,playable,2021-02-24 15:51:05.000 +"The Flame in the Flood: Complete Edition",0100C38004DCC000,gpu;status-ingame;nvdec;UE4,ingame,2022-08-22 16:23:49.000 +"The Forbidden Arts - 01007700D4AC000",,status-playable,playable,2021-01-26 16:26:24.000 +"The friends of Ringo Ishikawa",010030700CBBC000,status-playable,playable,2022-08-22 16:33:17.000 +"The Gardener and the Wild Vines",01006350148DA000,gpu;status-ingame,ingame,2024-04-29 16:32:10.000 +"The Gardens Between",0100B13007A6A000,status-playable,playable,2021-01-29 16:16:53.000 +"The Great Ace Attorney Chronicles",010036E00FB20000,status-playable,playable,2023-06-22 21:26:29.000 +"The Great Perhaps",,status-playable,playable,2020-09-02 15:57:04.000 +"THE GRISAIA TRILOGY",01003b300e4aa000,status-playable,playable,2021-01-31 15:53:59.000 +"The Hong Kong Massacre",,crash;status-ingame,ingame,2021-01-21 12:06:56.000 +"The House of Da Vinci",,status-playable,playable,2021-01-05 14:17:19.000 +"The House of Da Vinci 2",,status-playable,playable,2020-10-23 20:47:17.000 +"The Infectious Madness of Doctor Dekker",01008940086E0000,status-playable;nvdec,playable,2022-08-22 16:45:01.000 +"The Inner World",,nvdec;status-playable,playable,2020-06-03 21:22:29.000 +"The Inner World - The Last Wind Monk",,nvdec;status-playable,playable,2020-11-16 13:09:40.000 +"The Jackbox Party Pack",0100AE5003EE6000,status-playable;online-working,playable,2023-05-28 09:28:40.000 +"The Jackbox Party Pack 2",010015D003EE4000,status-playable;online-working,playable,2022-08-22 18:23:40.000 +"The Jackbox Party Pack 3",0100CC80013D6000,slow;status-playable;online-working,playable,2022-08-22 18:41:06.000 +"The Jackbox Party Pack 4",0100E1F003EE8000,status-playable;online-working,playable,2022-08-22 18:56:34.000 +"The Journey Down: Chapter One",010052C00B184000,nvdec;status-playable,playable,2021-02-24 13:32:41.000 +"The Journey Down: Chapter Three",01006BC00B188000,nvdec;status-playable,playable,2021-02-24 13:45:27.000 +"The Journey Down: Chapter Two",,nvdec;status-playable,playable,2021-02-24 13:32:13.000 +"The King's Bird",010020500BD98000,status-playable,playable,2022-08-22 19:07:46.000 +"The Knight & the Dragon",010031B00DB34000,gpu;status-ingame,ingame,2023-08-14 10:31:43.000 +"The Language of Love",,Needs Update;crash;status-nothing,nothing,2020-12-03 17:54:00.000 +"The Lara Croft Collection",010079C017F5E000,services-horizon;deadlock;status-nothing,nothing,2024-07-12 22:45:51.000 +"The Last Campfire",0100449011506000,status-playable,playable,2022-10-20 16:44:19.000 +"The Last Dead End",0100AAD011592000,gpu;status-ingame;UE4,ingame,2022-10-20 16:59:44.000 +"THE LAST REMNANT Remastered",0100AC800D022000,status-playable;nvdec;UE4,playable,2023-02-09 17:24:44.000 +"The Legend of Dark Witch",,status-playable,playable,2020-07-12 15:18:33.000 +"The Legend of Heroes: Trails from Zero",01001920156C2000,gpu;status-ingame;mac-bug,ingame,2024-09-14 21:41:41.000 +"The Legend of Heroes: Trails of Cold Steel III",,status-playable,playable,2020-12-16 10:59:18.000 +"The Legend of Heroes: Trails of Cold Steel III Demo",01009B101044C000,demo;nvdec;status-playable,playable,2021-04-23 01:07:32.000 +"The Legend of Heroes: Trails of Cold Steel IV",0100D3C010DE8000,nvdec;status-playable,playable,2021-04-23 14:01:05.000 +"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",01005E5013862000,status-nothing;crash,nothing,2021-09-30 14:41:07.000 +"The Legend of Zelda Echoes of Wisdom",01008CF01BAAC000,status-playable;nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01.000 +"The Legend of Zelda: Breath of the Wild",01007EF00011E000,gpu;status-ingame;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46.000 +"The Legend of Zelda: Breath of the Wild Demo",0100509005AF2000,status-ingame;demo,ingame,2022-12-24 05:02:58.000 +"The Legend of Zelda: Link's Awakening",01006BB00C6F0000,gpu;status-ingame;nvdec;mac-bug,ingame,2023-08-09 17:37:40.000 +"The Legend of Zelda: Skyward Sword HD",01002DA013484000,gpu;status-ingame,ingame,2024-06-14 16:48:29.000 +"The Legend of Zelda: Tears of the Kingdom",0100F2C0115B6000,gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30.000 +"The LEGO Movie 2 - Videogame",0100A4400BE74000,status-playable,playable,2023-03-01 11:23:37.000 +"The LEGO NINJAGO Movie Video Game",01007FC00206E000,status-nothing;crash,nothing,2022-08-22 19:12:53.000 +"The Liar Princess and the Blind Prince",010064B00B95C000,audio;slow;status-playable,playable,2020-06-08 21:23:28.000 +"The Lion's Song",0100735004898000,status-playable,playable,2021-06-09 15:07:16.000 +"The Little Acre",0100A5000D590000,nvdec;status-playable,playable,2021-03-02 20:22:27.000 +"The Long Dark",01007A700A87C000,status-playable,playable,2021-02-21 14:19:52.000 +"The Long Reach",010052B003A38000,nvdec;status-playable,playable,2021-02-24 14:09:48.000 +"The Long Return",,slow;status-playable,playable,2020-12-10 21:05:10.000 +"The Longest Five Minutes",0100CE1004E72000,gpu;status-boots,boots,2023-02-19 18:33:11.000 +"The Longing",0100F3D0122C2000,gpu;status-ingame,ingame,2022-11-12 15:00:58.000 +"The Lord of the Rings: Adventure Card Game",010085A00C5E8000,status-menus;online-broken,menus,2022-09-16 15:19:32.000 +"The Lost Child",01008A000A404000,nvdec;status-playable,playable,2021-02-23 15:44:20.000 +"The Low Road",0100BAB00A116000,status-playable,playable,2021-02-26 13:23:22.000 +"The Mahjong",,Needs Update;crash;services;status-nothing,nothing,2021-04-01 22:06:22.000 +"The Messenger",,status-playable,playable,2020-03-22 13:51:37.000 +"The Midnight Sanctuary",0100DEC00B2BC000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32.000 +"The MISSING: J.J. Macfield and the Island of Memories",0100F1B00B456000,status-playable,playable,2022-08-22 19:36:18.000 +"The Mooseman",010033300AC1A000,status-playable,playable,2021-02-24 12:58:57.000 +"The movie The Quintessential Bride -Five Memories Spent with You-",01005E9016BDE000,status-playable,playable,2023-12-14 14:43:43.000 +"The Mummy Demastered",0100496004194000,status-playable,playable,2021-02-23 13:11:27.000 +"The Mystery of the Hudson Case",,status-playable,playable,2020-06-01 11:03:36.000 +"The Next Penelope",01000CF0084BC000,status-playable,playable,2021-01-29 16:26:11.000 +"THE NINJA SAVIORS Return of the Warriors",01001FB00E386000,online;status-playable,playable,2021-03-25 23:48:07.000 +"The Oregon Trail",0100B080184BC000,gpu;status-ingame,ingame,2022-11-25 16:11:49.000 +"The Otterman Empire",0100B0101265C000,UE4;gpu;status-ingame,ingame,2021-06-17 12:27:15.000 +"The Outbound Ghost",01000BC01801A000,status-nothing,nothing,2024-03-02 17:10:58.000 +"The Outer Worlds",0100626011656000,gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32.000 +"The Park",,UE4;crash;gpu;status-ingame,ingame,2020-12-18 12:50:07.000 +"The Persistence",010050101127C000,nvdec;status-playable,playable,2021-06-06 19:15:40.000 +"The Pinball Arcade",0100CD300880E000,status-playable;online-broken,playable,2022-08-22 19:49:46.000 +"The Plucky Squire",01006BD018B54000,status-ingame;crash,ingame,2024-09-27 22:32:33.000 +"The Princess Guide",0100E6A00B960000,status-playable,playable,2021-02-24 14:23:34.000 +"The Raven Remastered",010058A00BF1C000,status-playable;nvdec,playable,2022-08-22 20:02:47.000 +"The Red Strings Club",,status-playable,playable,2020-06-01 10:51:18.000 +"The Room",010079400BEE0000,status-playable,playable,2021-04-14 18:57:05.000 +"The Ryuo's Work is Never Done!",010033100EE12000,status-playable,playable,2022-03-29 00:35:37.000 +"The Savior's Gang",01002BA00C7CE000,gpu;status-ingame;nvdec;UE4,ingame,2022-09-21 12:37:48.000 +"The Settlers: New Allies",0100F3200E7CA000,deadlock;status-nothing,nothing,2023-10-25 00:18:05.000 +"The Sexy Brutale",,status-playable,playable,2021-01-06 17:48:28.000 +"The Shapeshifting Detective",,nvdec;status-playable,playable,2021-01-10 13:10:49.000 +"The Sinking City",010028D00BA1A000,status-playable;nvdec;UE4,playable,2022-09-12 16:41:55.000 +"The Spectrum Retreat",010041C00A68C000,status-playable,playable,2022-10-03 18:52:40.000 +"The Stanley Parable: Ultra Deluxe",010029300E5C4000,gpu;status-ingame,ingame,2024-07-12 23:18:26.000 +"The Station",010007F00AF56000,status-playable,playable,2022-09-28 18:15:27.000 +"the StoryTale",0100858010DC4000,status-playable,playable,2022-09-03 13:00:25.000 +"The Stretchers",0100AA400A238000,status-playable;nvdec;UE4,playable,2022-09-16 15:40:58.000 +"The Survivalists",,status-playable,playable,2020-10-27 15:51:13.000 +"The Swindle",010040D00B7CE000,status-playable;nvdec,playable,2022-08-22 20:53:52.000 +"The Swords of Ditto",,slow;status-ingame,ingame,2020-12-06 00:13:12.000 +"The Tiny Bang Story",01009B300D76A000,status-playable,playable,2021-03-05 15:39:05.000 +"The Touryst",0100C3300D8C4000,status-ingame;crash,ingame,2023-08-22 01:32:38.000 +"The Tower of Beatrice",010047300EBA6000,status-playable,playable,2022-09-12 16:51:42.000 +"The Town of Light",010058000A576000,gpu;status-playable,playable,2022-09-21 12:51:34.000 +"The Trail: Frontier Challenge",0100B0E0086F6000,slow;status-playable,playable,2022-08-23 15:10:51.000 +"The Turing Test",0100EA100F516000,status-playable;nvdec,playable,2022-09-21 13:24:07.000 +"The Unicorn Princess",010064E00ECBC000,status-playable,playable,2022-09-16 16:20:56.000 +"The Vanishing of Ethan Carter",0100BCF00E970000,UE4;status-playable,playable,2021-06-09 17:14:47.000 +"The VideoKid",,nvdec;status-playable,playable,2021-01-06 09:28:24.000 +"The Voice",,services;status-menus,menus,2020-07-28 20:48:49.000 +"The Walking Dead",010029200B6AA000,status-playable,playable,2021-06-04 13:10:56.000 +"The Walking Dead: A New Frontier",010056E00B4F4000,status-playable,playable,2022-09-21 13:40:48.000 +"The Walking Dead: Season Two",,status-playable,playable,2020-08-09 12:57:06.000 +"The Walking Dead: The Final Season",010060F00AA70000,status-playable;online-broken,playable,2022-08-23 17:22:32.000 +"The Wanderer: Frankenstein's Creature",,status-playable,playable,2020-07-11 12:49:51.000 +"The Wardrobe: Even Better Edition",01008B200FC6C000,status-playable,playable,2022-09-16 19:14:55.000 +"The Witcher 3: Wild Hunt",01003D100E9C6000,status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51.000 +"The Wonderful 101: Remastered",0100B1300FF08000,slow;status-playable;nvdec,playable,2022-09-30 13:49:28.000 +"The World Ends With You -Final Remix-",0100C1500B82E000,status-playable;ldn-untested,playable,2022-07-09 01:11:21.000 +"The World Next Door",0100E6200D56E000,status-playable,playable,2022-09-21 14:15:23.000 +"Thea: The Awakening",,status-playable,playable,2021-01-18 15:08:47.000 +"THEATRHYTHM FINAL BAR LINE",010024201834A000,status-playable,playable,2023-02-19 19:58:57.000 +"THEATRHYTHM FINAL BAR LINE",010081B01777C000,status-ingame;Incomplete,ingame,2024-08-05 14:24:55.000 +"They Bleed Pixels",01001C2010D08000,gpu;status-ingame,ingame,2024-08-09 05:52:18.000 +"They Came From the Sky",,status-playable,playable,2020-06-12 16:38:19.000 +"Thief of Thieves",0100CE700F62A000,status-nothing;crash;loader-allocator,nothing,2021-11-03 07:16:30.000 +"Thief Simulator",0100CE400E34E000,status-playable,playable,2023-04-22 04:39:11.000 +"Thimbleweed Park",01009BD003B36000,status-playable,playable,2022-08-24 11:15:31.000 +"Think of the Children",0100F2300A5DA000,deadlock;status-menus,menus,2021-11-23 09:04:45.000 +"This Is the Police",0100066004D68000,status-playable,playable,2022-08-24 11:37:05.000 +"This Is the Police 2",01004C100A04C000,status-playable,playable,2022-08-24 11:49:17.000 +"This Strange Realm of Mine",,status-playable,playable,2020-08-28 12:07:24.000 +"This War of Mine: Complete Edition",0100A8700BC2A000,gpu;status-ingame;32-bit;nvdec,ingame,2022-08-24 12:00:44.000 +"THOTH",,status-playable,playable,2020-08-05 18:35:28.000 +"Thronebreaker: The Witcher Tales",0100E910103B4000,nvdec;status-playable,playable,2021-06-03 16:40:15.000 +"Thumper",01006F6002840000,gpu;status-ingame,ingame,2024-08-12 02:41:07.000 +"Thy Sword",01000AC011588000,status-ingame;crash,ingame,2022-09-30 16:43:14.000 +"Tick Tock: A Tale for Two",,status-menus,menus,2020-07-14 14:49:38.000 +"Tied Together",0100B6D00C2DE000,nvdec;status-playable,playable,2021-04-10 14:03:46.000 +"Timber Tennis Versus",,online;status-playable,playable,2020-10-03 17:07:15.000 +"Time Carnage",01004C500B698000,status-playable,playable,2021-06-16 17:57:28.000 +"Time Recoil",0100F770045CA000,status-playable,playable,2022-08-24 12:44:03.000 +"Timespinner",0100DD300CF3A000,gpu;status-ingame,ingame,2022-08-09 09:39:11.000 +"Timothy and the Mysterious Forest",0100393013A10000,gpu;slow;status-ingame,ingame,2021-06-02 00:42:11.000 +"Tin & Kuna",,status-playable,playable,2020-11-17 12:16:12.000 +"Tiny Gladiators",,status-playable,playable,2020-12-14 00:09:43.000 +"Tiny Hands Adventure",010061A00AE64000,status-playable,playable,2022-08-24 16:07:48.000 +"TINY METAL",010074800741A000,UE4;gpu;nvdec;status-ingame,ingame,2021-03-05 17:11:57.000 +"Tiny Racer",01005D0011A40000,status-playable,playable,2022-10-07 11:13:03.000 +"Tiny Thor",010002401AE94000,gpu;status-ingame,ingame,2024-07-26 08:37:35.000 +"Tinykin",0100A73016576000,gpu;status-ingame,ingame,2023-06-18 12:12:24.000 +"Titan Glory",0100FE801185E000,status-boots,boots,2022-10-07 11:36:40.000 +"Titan Quest",0100605008268000,status-playable;nvdec;online-broken,playable,2022-08-19 21:54:15.000 +"Titans Pinball",,slow;status-playable,playable,2020-06-09 16:53:52.000 +"Tlicolity Eyes - twinkle showtime -",010019500DB1E000,gpu;status-boots,boots,2021-05-29 19:43:44.000 +"To the Moon",,status-playable,playable,2021-03-20 15:33:38.000 +"Toast Time: Smash Up!",,crash;services;status-menus,menus,2020-04-03 12:26:59.000 +"Toby: The Secret Mine",,nvdec;status-playable,playable,2021-01-06 09:22:33.000 +"ToeJam & Earl: Back in the Groove",,status-playable,playable,2021-01-06 22:56:58.000 +"TOHU",0100B5E011920000,slow;status-playable,playable,2021-02-08 15:40:44.000 +"Toki",,nvdec;status-playable,playable,2021-01-06 19:59:23.000 +"TOKYO DARK - REMEMBRANCE -",01003E500F962000,nvdec;status-playable,playable,2021-06-10 20:09:49.000 +"Tokyo Mirage Sessions #FE Encore",0100A9400C9C2000,32-bit;status-playable;nvdec,playable,2022-07-07 09:41:07.000 +"Tokyo School Life",0100E2E00CB14000,status-playable,playable,2022-09-16 20:25:54.000 +"Tomb Raider I-III Remastered",010024601BB16000,gpu;status-ingame;opengl,ingame,2024-09-27 12:32:04.000 +"Tomba! Special Edition",0100D7F01E49C000,services-horizon;status-nothing,nothing,2024-09-15 21:59:54.000 +"Tonight we Riot",0100D400100F8000,status-playable,playable,2021-02-26 15:55:09.000 +"TONY HAWK'S™ PRO SKATER™ 1 + 2",0100CC00102B4000,gpu;status-ingame;Needs Update,ingame,2024-09-24 08:18:14.000 +"Tools Up!",,crash;status-ingame,ingame,2020-07-21 12:58:17.000 +"Toon War",01009EA00E2B8000,status-playable,playable,2021-06-11 16:41:53.000 +"Torchlight 2",,status-playable,playable,2020-07-27 14:18:37.000 +"Torchlight III",010075400DDB8000,status-playable;nvdec;online-broken;UE4,playable,2022-10-14 22:20:17.000 +"TORICKY-S",01007AF011732000,deadlock;status-menus,menus,2021-11-25 08:53:36.000 +"Torn Tales - Rebound Edition",,status-playable,playable,2020-11-01 14:11:59.000 +"Total Arcade Racing",0100A64010D48000,status-playable,playable,2022-11-12 15:12:48.000 +"Totally Reliable Delivery Service",0100512010728000,status-playable;online-broken,playable,2024-09-27 19:32:22.000 +"Touhou Genso Wanderer RELOADED",01004E900B082000,gpu;status-ingame;nvdec,ingame,2022-08-25 11:57:36.000 +"Touhou Kobuto V: Burst Battle",,status-playable,playable,2021-01-11 15:28:58.000 +"Touhou Spell Bubble",,status-playable,playable,2020-10-18 11:43:43.000 +"Tower of Babel",,status-playable,playable,2021-01-06 17:05:15.000 +"Tower of Time",,gpu;nvdec;status-ingame,ingame,2020-07-03 11:11:12.000 +"TowerFall",,status-playable,playable,2020-05-16 18:58:07.000 +"Towertale",,status-playable,playable,2020-10-15 13:56:58.000 +"Townsmen - A Kingdom Rebuilt",010049E00BA34000,status-playable;nvdec,playable,2022-10-14 22:48:59.000 +"Toy Stunt Bike: Tiptop's Trials",01009FF00A160000,UE4;status-playable,playable,2021-04-10 13:56:34.000 +"Tracks - Toybox Edition",0100192010F5A000,UE4;crash;status-nothing,nothing,2021-02-08 15:19:18.000 +"Trailblazers",0100BCA00843A000,status-playable,playable,2021-03-02 20:40:49.000 +"Transcripted",010009F004E66000,status-playable,playable,2022-08-25 12:13:11.000 +"TRANSFORMERS: BATTLEGROUNDS",01005E500E528000,online;status-playable,playable,2021-06-17 18:08:19.000 +"Transistor",,status-playable,playable,2020-10-22 11:28:02.000 +"Travel Mosaics 2: Roman Holiday",0100A8D010BFA000,status-playable,playable,2021-05-26 12:33:16.000 +"Travel Mosaics 3: Tokyo Animated",0100102010BFC000,status-playable,playable,2021-05-26 12:06:27.000 +"Travel Mosaics 4: Adventures in Rio",010096D010BFE000,status-playable,playable,2021-05-26 11:54:58.000 +"Travel Mosaics 5: Waltzing Vienna",01004C4010C00000,status-playable,playable,2021-05-26 11:49:35.000 +"Travel Mosaics 6: Christmas Around the World",0100D520119D6000,status-playable,playable,2021-05-26 00:52:47.000 +"Travel Mosaics 7: Fantastic Berlin -",,status-playable,playable,2021-05-22 18:37:34.000 +"Travel Mosaics: A Paris Tour",01007DB00A226000,status-playable,playable,2021-05-26 12:42:26.000 +"Travis Strikes Again: No More Heroes",010011600C946000,status-playable;nvdec;UE4,playable,2022-08-25 12:36:38.000 +"Treadnauts",,status-playable,playable,2021-01-10 14:57:41.000 +"Trials of Mana",0100D7800E9E0000,status-playable;UE4,playable,2022-09-30 21:50:37.000 +"Trials of Mana Demo",0100E1D00FBDE000,status-playable;nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02.000 +"Trials Rising",01003E800A102000,status-playable,playable,2024-02-11 01:36:39.000 +"TRIANGLE STRATEGY",0100CC80140F8000,gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37.000 +"Trine",0100D9000A930000,ldn-untested;nvdec;status-playable,playable,2021-06-03 11:28:15.000 +"Trine 2",010064E00A932000,nvdec;status-playable,playable,2021-06-03 11:45:20.000 +"Trine 3: The Artifacts of Power",0100DEC00A934000,ldn-untested;online;status-playable,playable,2021-06-03 12:01:24.000 +"Trine 4: The Nightmare Prince",010055E00CA68000,gpu;status-nothing,nothing,2025-01-07 05:47:46.000 +"Trinity Trigger",01002D7010A54000,status-ingame;crash,ingame,2023-03-03 03:09:09.000 +"Trivial Pursuit Live! 2",0100868013FFC000,status-boots,boots,2022-12-19 00:04:33.000 +"Troll and I",0100F78002040000,gpu;nvdec;status-ingame,ingame,2021-06-04 16:58:50.000 +"Trollhunters: Defenders of Arcadia",,gpu;nvdec;status-ingame,ingame,2020-11-30 13:27:09.000 +"Tropico 6",0100FBE0113CC000,status-playable;nvdec;UE4,playable,2022-10-14 23:21:03.000 +"Trouble Witches Final! Episode 01: Daughters of Amalgam",0100D06018DCA000,status-playable,playable,2024-04-08 15:08:11.000 +"Troubleshooter",,UE4;crash;status-nothing,nothing,2020-10-04 13:46:50.000 +"Trover Saves the Universe",,UE4;crash;status-nothing,nothing,2020-10-03 10:25:27.000 +"Truberbrook",0100E6300D448000,status-playable,playable,2021-06-04 17:08:00.000 +"Truck & Logistics Simulator",0100F2100AA5C000,status-playable,playable,2021-06-11 13:29:08.000 +"Truck Driver",0100CB50107BA000,status-playable;online-broken,playable,2022-10-20 17:42:33.000 +"True Fear: Forsaken Souls - Part 1",,nvdec;status-playable,playable,2020-12-15 21:39:52.000 +"TT Isle of Man",,nvdec;status-playable,playable,2020-06-22 12:25:13.000 +"TT Isle of Man 2",010000400F582000,gpu;status-ingame;nvdec;online-broken,ingame,2022-09-30 22:13:05.000 +"TTV2",,status-playable,playable,2020-11-27 13:21:36.000 +"Tumblestone",,status-playable,playable,2021-01-07 17:49:20.000 +"Turok",010085500D5F6000,gpu;status-ingame,ingame,2021-06-04 13:16:24.000 +"Turok 2: Seeds of Evil",0100CDC00D8D6000,gpu;status-ingame;vulkan,ingame,2022-09-12 17:50:05.000 +"Turrican Flashback - 01004B0130C8000",,status-playable;audout,playable,2021-08-30 10:07:56.000 +"TurtlePop: Journey to Freedom",,status-playable,playable,2020-06-12 17:45:39.000 +"Twin Robots: Ultimate Edition",0100047009742000,status-playable;nvdec,playable,2022-08-25 14:24:03.000 +"Two Point Hospital",010031200E044000,status-ingame;crash;nvdec,ingame,2022-09-22 11:22:23.000 +"TY the Tasmanian Tiger",,32-bit;crash;nvdec;status-menus,menus,2020-12-17 21:15:00.000 +"Tyd wag vir Niemand",010073A00C4B2000,status-playable,playable,2021-03-02 13:39:53.000 +"Type:Rider",,status-playable,playable,2021-01-06 13:12:55.000 +"UBERMOSH:SANTICIDE",,status-playable,playable,2020-11-27 15:05:01.000 +"Ubongo - Deluxe Edition",,status-playable,playable,2021-02-04 21:15:01.000 +"UglyDolls: An Imperfect Adventure",010079000B56C000,status-playable;nvdec;UE4,playable,2022-08-25 14:42:16.000 +"Ultimate Fishing Simulator",010048901295C000,status-playable,playable,2021-06-16 18:38:23.000 +"Ultimate Racing 2D",,status-playable,playable,2020-08-05 17:27:09.000 +"Ultimate Runner",010045200A1C2000,status-playable,playable,2022-08-29 12:52:40.000 +"Ultimate Ski Jumping 2020",01006B601117E000,online;status-playable,playable,2021-03-02 20:54:11.000 +"Ultra Hat Dimension",01002D4012222000,services;audio;status-menus,menus,2021-11-18 09:05:20.000 +"Ultra Hyperball",,status-playable,playable,2021-01-06 10:09:55.000 +"Ultra Street Fighter II: The Final Challengers",01007330027EE000,status-playable;ldn-untested,playable,2021-11-25 07:54:58.000 +"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",01006A300BA2C000,status-playable;audout,playable,2023-05-04 17:25:23.000 +"Unbox: Newbie's Adventure",0100592005164000,status-playable;UE4,playable,2022-08-29 13:12:56.000 +"Uncanny Valley",01002D900C5E4000,nvdec;status-playable,playable,2021-06-04 13:28:45.000 +"Undead and Beyond",010076F011F54000,status-playable;nvdec,playable,2022-10-04 09:11:18.000 +"Under Leaves",01008F3013E4E000,status-playable,playable,2021-05-22 18:13:58.000 +"Undertale",010080B00AD66000,status-playable,playable,2022-08-31 17:31:46.000 +"Unepic",01008F80049C6000,status-playable,playable,2024-01-15 17:03:00.000 +"UnExplored - Unlocked Edition",,status-playable,playable,2021-01-06 10:02:16.000 +"Unhatched",,status-playable,playable,2020-12-11 12:11:09.000 +"Unicorn Overlord",010069401ADB8000,status-playable,playable,2024-09-27 14:04:32.000 +"Unit 4",,status-playable,playable,2020-12-16 18:54:13.000 +"Unknown Fate",,slow;status-ingame,ingame,2020-10-15 12:27:42.000 +"Unlock the King",,status-playable,playable,2020-09-01 13:58:27.000 +"Unlock the King 2",0100A3E011CB0000,status-playable,playable,2021-06-15 20:43:55.000 +"UNO",01005AA00372A000,status-playable;nvdec;ldn-untested,playable,2022-07-28 14:49:47.000 +"Unravel TWO",0100E5D00CC0C000,status-playable;nvdec,playable,2024-05-23 15:45:05.000 +"Unruly Heroes",,status-playable,playable,2021-01-07 18:09:31.000 +"Unspottable",0100B410138C0000,status-playable,playable,2022-10-25 19:28:49.000 +"Untitled Goose Game",,status-playable,playable,2020-09-26 13:18:06.000 +"Unto The End",0100E49013190000,gpu;status-ingame,ingame,2022-10-21 11:13:29.000 +"Urban Flow",,services;status-playable,playable,2020-07-05 12:51:47.000 +"Urban Street Fighting",010054F014016000,status-playable,playable,2021-02-20 19:16:36.000 +"Urban Trial Playground",01001B10068EC000,UE4;nvdec;online;status-playable,playable,2021-03-25 20:56:51.000 +"Urban Trial Tricky",0100A2500EB92000,status-playable;nvdec;UE4,playable,2022-12-06 13:07:56.000 +"Use Your Words",01007C0003AEC000,status-menus;nvdec;online-broken,menus,2022-08-29 17:22:10.000 +"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",0100D4300EBF8000,status-nothing;crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44.000 +"Uta no☆Prince-sama♪ Repeat Love",010024200E00A000,status-playable;nvdec,playable,2022-12-09 09:21:51.000 +"Utopia 9 - A Volatile Vacation",,nvdec;status-playable,playable,2020-12-16 17:06:42.000 +"V-Rally 4",010064400B138000,gpu;nvdec;status-ingame,ingame,2021-06-07 19:37:31.000 +"VA-11 HALL-A",0100A6700D66E000,status-playable,playable,2021-02-26 15:05:34.000 +"Vaccine",,nvdec;status-playable,playable,2021-01-06 01:02:07.000 +"Valfaris",010089700F30C000,status-playable,playable,2022-09-16 21:37:24.000 +"Valkyria Chronicles",0100CAF00B744000,status-ingame;32-bit;crash;nvdec,ingame,2022-11-23 20:03:32.000 +"Valkyria Chronicles 4",01005C600AC68000,audout;nvdec;status-playable,playable,2021-06-03 18:12:25.000 +"Valkyria Chronicles 4 Demo",0100FBD00B91E000,slow;status-ingame;demo,ingame,2022-08-29 20:39:07.000 +"Valley",0100E0E00B108000,status-playable;nvdec,playable,2022-09-28 19:27:58.000 +"Vampire Survivors",010089A0197E4000,status-ingame,ingame,2024-06-17 09:57:38.000 +"Vampyr",01000BD00CE64000,status-playable;nvdec;UE4,playable,2022-09-16 22:15:51.000 +"Vandals",01007C500D650000,status-playable,playable,2021-01-27 21:45:46.000 +"Vaporum",010030F00CA1E000,nvdec;status-playable,playable,2021-05-28 14:25:33.000 +"VARIABLE BARRICADE NS",010045C0109F2000,status-playable;nvdec,playable,2022-02-26 15:50:13.000 +"VASARA Collection",0100FE200AF48000,nvdec;status-playable,playable,2021-02-28 15:26:10.000 +"Vasilis",,status-playable,playable,2020-09-01 15:05:35.000 +"Vegas Party",01009CD003A0A000,status-playable,playable,2021-04-14 19:21:41.000 +"Vektor Wars",010098400E39E000,status-playable;online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46.000 +"Vengeful Guardian: Moonrider",01003A8018E60000,deadlock;status-boots,boots,2024-03-17 23:35:37.000 +"Venture Kid",010095B00DBC8000,crash;gpu;status-ingame,ingame,2021-04-18 16:33:17.000 +"Vera Blanc: Full Moon",,audio;status-playable,playable,2020-12-17 12:09:30.000 +"Very Very Valet",0100379013A62000,status-playable;nvdec,playable,2022-11-12 15:25:51.000 +"Very Very Valet Demo - 01006C8014DDA000",01006C8014DDA000,status-boots;crash;Needs Update;demo,boots,2022-11-12 15:26:13.000 +"Vesta",010057B00712C000,status-playable;nvdec,playable,2022-08-29 21:03:39.000 +"Victor Vran Overkill Edition",0100E81007A06000,gpu;deadlock;status-ingame;nvdec;opengl,ingame,2022-08-30 11:46:56.000 +"Violett",01005880063AA000,nvdec;status-playable,playable,2021-01-28 13:09:36.000 +"Viviette",010037900CB1C000,status-playable,playable,2021-06-11 15:33:40.000 +"Void Bastards",0100D010113A8000,status-playable,playable,2022-10-15 00:04:19.000 +"void* tRrLM(); //Void Terrarium",0100FF7010E7E000,gpu;status-ingame;Needs Update;regression,ingame,2023-02-10 01:13:25.000 +"void* tRrLM2(); //Void Terrarium 2",010078D0175EE000,status-playable,playable,2023-12-21 11:00:41.000 +"Volgarr the Viking",,status-playable,playable,2020-12-18 15:25:50.000 +"Volta-X",0100A7900E79C000,status-playable;online-broken,playable,2022-10-07 12:20:51.000 +"Vostok, Inc.",01004D8007368000,status-playable,playable,2021-01-27 17:43:59.000 +"Voxel Galaxy",0100B1E0100A4000,status-playable,playable,2022-09-28 22:45:02.000 +"Voxel Pirates",0100AFA011068000,status-playable,playable,2022-09-28 22:55:02.000 +"Voxel Sword",0100BFB00D1F4000,status-playable,playable,2022-08-30 14:57:27.000 +"Vroom in the Night Sky",01004E90028A2000,status-playable;Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29.000 +"VSR: Void Space Racing",0100C7C00AE6C000,status-playable,playable,2021-01-27 14:08:59.000 +"VtM Coteries of New York",,status-playable,playable,2020-10-04 14:55:22.000 +"Waifu Uncovered",0100B130119D0000,status-ingame;crash,ingame,2023-02-27 01:17:46.000 +"Wanba Warriors",,status-playable,playable,2020-10-04 17:56:22.000 +"Wanderjahr TryAgainOrWalkAway",,status-playable,playable,2020-12-16 09:46:04.000 +"Wanderlust Travel Stories",0100B27010436000,status-playable,playable,2021-04-07 16:09:12.000 +"Wandersong",0100F8A00853C000,nvdec;status-playable,playable,2021-06-04 15:33:34.000 +"Wanna Survive",0100D67013910000,status-playable,playable,2022-11-12 21:15:43.000 +"War Of Stealth - assassin",01004FA01391A000,status-playable,playable,2021-05-22 17:34:38.000 +"War Tech Fighters",010049500DE56000,status-playable;nvdec,playable,2022-09-16 22:29:31.000 +"War Theatre",010084D00A134000,gpu;status-ingame,ingame,2021-06-07 19:42:45.000 +"War Truck Simulator",0100B6B013B8A000,status-playable,playable,2021-01-31 11:22:54.000 +"War-Torn Dreams",,crash;status-nothing,nothing,2020-10-21 11:36:16.000 +"WARBORN",,status-playable,playable,2020-06-25 12:36:47.000 +"Wardogs: Red's Return",010056901285A000,status-playable,playable,2022-11-13 15:29:01.000 +"WarGroove",01000F0002BB6000,status-playable;online-broken,playable,2022-08-31 10:30:45.000 +"Warhammer 40,000: Mechanicus",0100C6000EEA8000,nvdec;status-playable,playable,2021-06-13 10:46:38.000 +"Warhammer 40,000: Space Wolf",0100E5600D7B2000,status-playable;online-broken,playable,2022-09-20 21:11:20.000 +"Warhammer Age of Sigmar: Storm Ground",010031201307A000,status-playable;nvdec;online-broken;UE4,playable,2022-11-13 15:46:14.000 +"Warhammer Quest 2",,status-playable,playable,2020-08-04 15:28:03.000 +"WarioWare: Get It Together!",0100563010E0C000,gpu;status-ingame;opengl-backend-bug,ingame,2024-04-23 01:04:56.000 +"Warioware: Move IT!",010045B018EC2000,status-playable,playable,2023-11-14 00:23:51.000 +"Warlocks 2: God Slayers",,status-playable,playable,2020-12-16 17:36:50.000 +"Warp Shift",,nvdec;status-playable,playable,2020-12-15 14:48:48.000 +"Warparty",,nvdec;status-playable,playable,2021-01-27 18:26:32.000 +"WarriOrb",010032700EAC4000,UE4;status-playable,playable,2021-06-17 15:45:14.000 +"WARRIORS OROCHI 4 ULTIMATE",0100E8500AD58000,status-playable;nvdec;online-broken,playable,2024-08-07 01:50:37.000 +"Wartile Complete Edition",,UE4;crash;gpu;status-menus,menus,2020-12-11 21:56:10.000 +"Wasteland 2: Director's Cut",010039A00BC64000,nvdec;status-playable,playable,2021-01-27 13:34:11.000 +"Water Balloon Mania",,status-playable,playable,2020-10-23 20:20:59.000 +"Way of the Passive Fist",0100BA200C378000,gpu;status-ingame,ingame,2021-02-26 21:07:06.000 +"We should talk.",,crash;status-nothing,nothing,2020-08-03 12:32:36.000 +"Welcome to Hanwell",,UE4;crash;status-boots,boots,2020-08-03 11:54:57.000 +"Welcome to Primrose Lake",0100D7F010B94000,status-playable,playable,2022-10-21 11:30:57.000 +"Wenjia",,status-playable,playable,2020-06-08 11:38:30.000 +"West of Loathing",010031B00A4E8000,status-playable,playable,2021-01-28 12:35:19.000 +"What Remains of Edith Finch",010038900DFE0000,slow;status-playable;UE4,playable,2022-08-31 19:57:59.000 +"Wheel of Fortune [010033600ADE6000]",010033600ADE6000,status-boots;crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24.000 +"Wheels of Aurelia",0100DFC00405E000,status-playable,playable,2021-01-27 21:59:25.000 +"Where Angels Cry",010027D011C9C000,gpu;status-ingame;nvdec,ingame,2022-09-30 22:24:47.000 +"Where Are My Friends?",0100FDB0092B4000,status-playable,playable,2022-09-21 14:39:26.000 +"Where the Bees Make Honey",,status-playable,playable,2020-07-15 12:40:49.000 +"Whipsey and the Lost Atlas",,status-playable,playable,2020-06-23 20:24:14.000 +"Whispering Willows",010015A00AF1E000,status-playable;nvdec,playable,2022-09-30 22:33:05.000 +"Who Wants to Be a Millionaire?",,crash;status-nothing,nothing,2020-12-11 20:22:42.000 +"Widget Satchel",0100C7800CA06000,status-playable,playable,2022-09-16 22:41:07.000 +"WILD GUNS Reloaded",0100CFC00A1D8000,status-playable,playable,2021-01-28 12:29:05.000 +"Wilmot's Warehouse",010071F00D65A000,audio;gpu;status-ingame,ingame,2021-06-02 17:24:32.000 +"WINDJAMMERS",,online;status-playable,playable,2020-10-13 11:24:25.000 +"Windscape",010059900BA3C000,status-playable,playable,2022-10-21 11:49:42.000 +"Windstorm",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-22 13:17:48.000 +"Windstorm - Ari's Arrival",0100D6800CEAC000,UE4;status-playable,playable,2021-06-07 19:33:19.000 +"Wing of Darkness - 010035B012F2000",,status-playable;UE4,playable,2022-11-13 16:03:51.000 +"Winter Games 2023",0100A4A015FF0000,deadlock;status-menus,menus,2023-11-07 20:47:36.000 +"Witch On The Holy Night",010012A017F18800,status-playable,playable,2023-03-06 23:28:11.000 +"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",0100454012E32000,status-ingame;crash,ingame,2021-08-08 11:56:18.000 +"Witch Thief",01002FC00C6D0000,status-playable,playable,2021-01-27 18:16:07.000 +"Witch's Garden",010061501904E000,gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24.000 +"Witcheye",,status-playable,playable,2020-12-14 22:56:08.000 +"Wizard of Legend",0100522007AAA000,status-playable,playable,2021-06-07 12:20:46.000 +"Wizards of Brandel",,status-nothing,nothing,2020-10-14 15:52:33.000 +"Wizards: Wand of Epicosity",0100C7600E77E000,status-playable,playable,2022-10-07 12:32:06.000 +"Wolfenstein II The New Colossus",01009040091E0000,gpu;status-ingame,ingame,2024-04-05 05:39:46.000 +"Wolfenstein: Youngblood",01003BD00CAAE000,status-boots;online-broken,boots,2024-07-12 23:49:20.000 +"Wonder Blade",,status-playable,playable,2020-12-11 17:55:31.000 +"Wonder Boy Anniversary Collection",0100B49016FF0000,deadlock;status-nothing,nothing,2023-04-20 16:01:48.000 +"Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ]",0100EB2012E36000,status-nothing;crash,nothing,2021-11-03 08:45:06.000 +"Wonder Boy: The Dragon's Trap",0100A6300150C000,status-playable,playable,2021-06-25 04:53:21.000 +"Wondershot",0100F5D00C812000,status-playable,playable,2022-08-31 21:05:31.000 +"Woodle Tree 2",,gpu;slow;status-ingame,ingame,2020-06-04 18:44:00.000 +"Woodsalt",0100288012966000,status-playable,playable,2021-04-06 17:01:48.000 +"Wordify",,status-playable,playable,2020-10-03 09:01:07.000 +"World Conqueror X",,status-playable,playable,2020-12-22 16:10:29.000 +"World Neverland",01008E9007064000,status-playable,playable,2021-01-28 17:44:23.000 +"World of Final Fantasy Maxima",,status-playable,playable,2020-06-07 13:57:23.000 +"World of Goo",010009E001D90000,gpu;status-boots;32-bit;crash;regression,boots,2024-04-12 05:52:14.000 +"World of Goo 2",010061F01DB7C800,status-boots,boots,2024-08-08 22:52:49.000 +"World Soccer Pinball",,status-playable,playable,2021-01-06 00:37:02.000 +"Worldend Syndrome",,status-playable,playable,2021-01-03 14:16:32.000 +"Worlds of Magic: Planar Conquest",010000301025A000,status-playable,playable,2021-06-12 12:51:28.000 +"Worm Jazz",01009CD012CC0000,gpu;services;status-ingame;UE4;regression,ingame,2021-11-10 10:33:04.000 +"Worms W.M.D",01001AE005166000,gpu;status-boots;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59.000 +"Worse Than Death",010037500C4DE000,status-playable,playable,2021-06-11 16:05:40.000 +"Woven",01006F100EB16000,nvdec;status-playable,playable,2021-06-02 13:41:08.000 +"WRC 8 FIA World Rally Championship",010087800DCEA000,status-playable;nvdec,playable,2022-09-16 23:03:36.000 +"WRC 9 The Official Game",01001A0011798000,gpu;slow;status-ingame;nvdec,ingame,2022-10-25 19:47:39.000 +"Wreckfest",0100DC0012E48000,status-playable,playable,2023-02-12 16:13:00.000 +"Wreckin' Ball Adventure",0100C5D00EDB8000,status-playable;UE4,playable,2022-09-12 18:56:28.000 +"Wulverblade",010033700418A000,nvdec;status-playable,playable,2021-01-27 22:29:05.000 +"Wunderling",01001C400482C000,audio;status-ingame;crash,ingame,2022-09-10 13:20:12.000 +"Wurroom",,status-playable,playable,2020-10-07 22:46:21.000 +"WWE 2K Battlegrounds",010081700EDF4000,status-playable;nvdec;online-broken;UE4,playable,2022-10-07 12:44:40.000 +"WWE 2K18",010009800203E000,status-playable;nvdec,playable,2023-10-21 17:22:01.000 +"X-Morph: Defense",,status-playable,playable,2020-06-22 11:05:31.000 +"XCOM 2 Collection",0100D0B00FB74000,gpu;status-ingame;crash,ingame,2022-10-04 09:38:30.000 +"XEL",0100CC9015360000,gpu;status-ingame,ingame,2022-10-03 10:19:39.000 +"Xenoblade Chronicles 2",0100E95004038000,deadlock;status-ingame;amd-vendor-bug,ingame,2024-03-28 14:31:41.000 +"Xenoblade Chronicles 2: Torna - The Golden Country",0100C9F009F7A000,slow;status-playable;nvdec,playable,2023-01-28 16:47:28.000 +"Xenoblade Chronicles 3",010074F013262000,gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44.000 +"Xenoblade Chronicles Definitive Edition",0100FF500E34A000,status-playable;nvdec,playable,2024-05-04 20:12:41.000 +"Xenon Racer",010028600BA16000,status-playable;nvdec;UE4,playable,2022-08-31 22:05:30.000 +"Xenon Valkyrie+",010064200C324000,status-playable,playable,2021-06-07 20:25:53.000 +"Xenoraid",0100928005BD2000,status-playable,playable,2022-09-03 13:01:10.000 +"Xeodrifter",01005B5009364000,status-playable,playable,2022-09-03 13:18:39.000 +"Yaga",01006FB00DB02000,status-playable;nvdec,playable,2022-09-16 23:17:17.000 +"YesterMorrow",,crash;status-ingame,ingame,2020-12-17 17:15:25.000 +"Yet Another Zombie Defense HD",,status-playable,playable,2021-01-06 00:18:39.000 +"YGGDRA UNION We’ll Never Fight Alone",,status-playable,playable,2020-04-03 02:20:47.000 +"YIIK: A Postmodern RPG",0100634008266000,status-playable,playable,2021-01-28 13:38:37.000 +"Yo kai watch 1 for Nintendo Switch",0100C0000CEEA000,gpu;status-ingame;opengl,ingame,2024-05-28 11:11:49.000 +"Yo-Kai Watch 4++",010086C00AF7C000,status-playable,playable,2024-06-18 20:21:44.000 +"Yoku's Island Express",010002D00632E000,status-playable;nvdec,playable,2022-09-03 13:59:02.000 +"Yomawari 3",0100F47016F26000,status-playable,playable,2022-05-10 08:26:51.000 +"Yomawari: The Long Night Collection",010012F00B6F2000,status-playable,playable,2022-09-03 14:36:59.000 +"Yonder: The Cloud Catcher Chronicles",0100CC600ABB2000,status-playable,playable,2021-01-28 14:06:25.000 +"Yono and the Celestial Elephants",0100BE50042F6000,status-playable,playable,2021-01-28 18:23:58.000 +"Yooka-Laylee",0100F110029C8000,status-playable,playable,2021-01-28 14:21:45.000 +"Yooka-Laylee and the Impossible Lair",010022F00DA66000,status-playable,playable,2021-03-05 17:32:21.000 +"Yoshi's Crafted World",01006000040C2000,gpu;status-ingame;audout,ingame,2021-08-30 13:25:51.000 +"Yoshi's Crafted World Demo Version",,gpu;status-boots;status-ingame,boots,2020-12-16 14:57:40.000 +"Yoshiwara Higanbana Kuon no Chigiri",,nvdec;status-playable,playable,2020-10-17 19:14:46.000 +"YouTube",01003A400C3DA800,status-playable,playable,2024-06-08 05:24:10.000 +"Youtubers Life00",00100A7700CCAA40,status-playable;nvdec,playable,2022-09-03 14:56:19.000 +"Ys IX: Monstrum Nox",0100E390124D8000,status-playable,playable,2022-06-12 04:14:42.000 +"Ys Origin",0100F90010882000,status-playable;nvdec,playable,2024-04-17 05:07:33.000 +"Ys VIII: Lacrimosa of Dana",01007F200B0C0000,status-playable;nvdec,playable,2023-08-05 09:26:41.000 +"Yu-Gi-Oh! Legacy of the Duelist: Link Evolution!",010022400BE5A000,status-playable,playable,2024-09-27 21:48:43.000 +"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",01002D60188DE000,status-ingame;crash,ingame,2023-03-17 01:54:01.000 +"YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD.",010037D00DBDC000,nvdec;status-playable,playable,2021-01-26 17:03:52.000 +"Yumeutsutsu Re:After",0100B56011502000,status-playable,playable,2022-11-20 16:09:06.000 +"Yunohana Spring! - Mellow Times -",,audio;crash;status-menus,menus,2020-09-27 19:27:40.000 +"Yuppie Psycho: Executive Edition",,crash;status-ingame,ingame,2020-12-11 10:37:06.000 +"Yuri",0100FC900963E000,status-playable,playable,2021-06-11 13:08:50.000 +"Zaccaria Pinball",010092400A678000,status-playable;online-broken,playable,2022-09-03 15:44:28.000 +"Zarvot - 0100E7900C40000",,status-playable,playable,2021-01-28 13:51:36.000 +"ZenChess",,status-playable,playable,2020-07-01 22:28:27.000 +"Zenge",,status-playable,playable,2020-10-22 13:23:57.000 +"Zengeon",0100057011E50000,services-horizon;status-boots;crash,boots,2024-04-29 15:43:07.000 +"Zenith",0100AAC00E692000,status-playable,playable,2022-09-17 09:57:02.000 +"ZERO GUNNER 2",,status-playable,playable,2021-01-04 20:17:14.000 +"Zero Strain",01004B001058C000,services;status-menus;UE4,menus,2021-11-10 07:48:32.000 +"Zettai kaikyu gakuen",,gpu;nvdec;status-ingame,ingame,2020-08-25 15:15:54.000 +"Ziggy The Chaser",0100D7B013DD0000,status-playable,playable,2021-02-04 20:34:27.000 +"ZikSquare",010086700EF16000,gpu;status-ingame,ingame,2021-11-06 02:02:48.000 +"Zoids Wild Blast Unleashed",010069C0123D8000,status-playable;nvdec,playable,2022-10-15 11:26:59.000 +"Zombie Army Trilogy",,ldn-untested;online;status-playable,playable,2020-12-16 12:02:28.000 +"Zombie Driver",,nvdec;status-playable,playable,2020-12-14 23:15:10.000 +"ZOMBIE GOLD RUSH",,online;status-playable,playable,2020-09-24 12:56:08.000 +"Zombie's Cool",,status-playable,playable,2020-12-17 12:41:26.000 +"Zombieland: Double Tap - Road Trip0",01000E5800D32C00,status-playable,playable,2022-09-17 10:08:45.000 +"Zombillie",,status-playable,playable,2020-07-23 17:42:23.000 +"Zotrix: Solar Division",01001EE00A6B0000,status-playable,playable,2021-06-07 20:34:05.000 +"この世の果てで恋を唄う少女YU-NO",,audio;status-ingame,ingame,2021-01-22 07:00:16.000 +"スーパーファミコン Nintendo Switch Online",,slow;status-ingame,ingame,2020-03-14 05:48:38.000 +"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",01000BB01CB8A000,status-nothing,nothing,2024-09-28 07:03:14.000 +"メモリーズオフ - Innocent Fille",010065500B218000,status-playable,playable,2022-12-02 17:36:48.000 +"二ノ国 白き聖灰の女王",010032400E700000,services;status-menus;32-bit,menus,2023-04-16 17:11:06.000 +"初音ミク Project DIVA MEGA39's",0100F3100DA46000,audio;status-playable;loader-allocator,playable,2022-07-29 11:45:52.000 +"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",0100BF401AF9C000,slow;status-playable,playable,2023-12-31 14:37:17.000 +"死神と少女/Shinigami to Shoujo",0100AFA01750C000,gpu;status-ingame;Incomplete,ingame,2024-03-22 01:06:45.000 +"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",01001BA01EBFC000,services-horizon;status-nothing,nothing,2024-09-28 12:22:55.000 +"牧場物語 Welcome!ワンダフルライフ",0100936018EB4000,status-ingame;crash,ingame,2023-04-25 19:43:52.000 +"索尼克:起源 / Sonic Origins",01009FB016286000,status-ingame;crash,ingame,2024-06-02 07:20:15.000 +"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",0100F4401940A000,status-ingame;crash,ingame,2024-02-12 20:58:31.000 +"超次元ゲイム ネプテューヌ GameMaker R:Evolution",010064801a01c000,status-nothing;crash,nothing,2023-10-30 22:37:40.000 +"逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection)",010005501E68C000,status-playable,playable,2024-09-19 16:38:05.000 +"逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy)",010020D01B890000,status-playable,playable,2024-06-21 21:54:27.000 +"鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",0100309016E7A000,status-playable;UE4,playable,2024-08-08 04:51:49.000 -- 2.47.1 From 1343fabe415742d95fc3142322ed818cf0b56d00 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 8 Jan 2025 12:20:20 -0600 Subject: [PATCH 307/722] docs: compat: some more missing title ids --- docs/compatibility.csv | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 9976c3bd5..c84e858fa 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -1,40 +1,40 @@ "issue_title","extracted_game_id","issue_labels","extracted_status","last_event_date" -"-KLAUS-",,nvdec;status-playable,playable,2020-06-27 13:27:30.000 +"-KLAUS-",010099F00EF3E000,nvdec;status-playable,playable,2020-06-27 13:27:30.000 ".hack//G.U. Last Recode",0100BA9014A02000,deadlock;status-boots,boots,2022-03-12 19:15:47.000 -"#Funtime",,status-playable,playable,2020-12-10 16:54:35.000 -"#Halloween, Super Puzzles Dream",,nvdec;status-playable,playable,2020-12-10 20:43:58.000 -"#KillAllZombies",,slow;status-playable,playable,2020-12-16 01:50:25.000 -"#NoLimitFantasy, Super Puzzles Dream",,nvdec;status-playable,playable,2020-12-12 17:21:32.000 -"#RaceDieRun",,status-playable,playable,2020-07-04 20:23:16.000 -"#womenUp, Super Puzzles Dream",,status-playable,playable,2020-12-12 16:57:25.000 +"#Funtime",01001E500F7FC000,status-playable,playable,2020-12-10 16:54:35.000 +"#Halloween, Super Puzzles Dream",01000E50134A4000,nvdec;status-playable,playable,2020-12-10 20:43:58.000 +"#KillAllZombies",01004D100C510000,slow;status-playable,playable,2020-12-16 01:50:25.000 +"#NoLimitFantasy, Super Puzzles Dream",0100325012C12000,nvdec;status-playable,playable,2020-12-12 17:21:32.000 +"#RaceDieRun",01005D400E5C8000,status-playable,playable,2020-07-04 20:23:16.000 +"#womenUp, Super Puzzles Dream",01003DB011AE8000,status-playable,playable,2020-12-12 16:57:25.000 "#womenUp, Super Puzzles Dream Demo",0100D87012A14000,nvdec;status-playable,playable,2021-02-09 00:03:31.000 "1-2-Switch",01000320000CC000,services;status-playable,playable,2022-02-18 14:44:03.000 "10 Second Run Returns",01004D1007926000,gpu;status-ingame,ingame,2022-07-17 13:06:18.000 "10 Second Run RETURNS Demo",0100DC000A472000,gpu;status-ingame,ingame,2021-02-09 00:17:18.000 "112 Operator",0100D82015774000,status-playable;nvdec,playable,2022-11-13 22:42:50.000 -"112th Seed",,status-playable,playable,2020-10-03 10:32:38.000 +"112th Seed",010051E012302000,status-playable,playable,2020-10-03 10:32:38.000 "12 is Better Than 6",01007F600D1B8000,status-playable,playable,2021-02-22 16:10:12.000 "12 Labours of Hercules II: The Cretan Bull",0100B1A010014000,cpu;status-nothing;32-bit;crash,nothing,2022-12-07 13:43:10.000 -"12 orbits",,status-playable,playable,2020-05-28 16:13:26.000 +"12 orbits",0100A840047C2000,status-playable,playable,2020-05-28 16:13:26.000 "13 Sentinels Aegis Rim",01003FC01670C000,slow;status-ingame,ingame,2024-06-10 20:33:38.000 "13 Sentinels Aegis Rim Demo",0100C54015002000,status-playable;demo,playable,2022-04-13 14:15:48.000 -"140",,status-playable,playable,2020-08-05 20:01:33.000 +"140",01007E600EEE6000,status-playable,playable,2020-08-05 20:01:33.000 "16-Bit Soccer Demo",0100B94013D28000,status-playable,playable,2021-02-09 00:23:07.000 -"1917 - The Alien Invasion DX",,status-playable,playable,2021-01-08 22:11:16.000 +"1917 - The Alien Invasion DX",01005CA0099AA000,status-playable,playable,2021-01-08 22:11:16.000 "1971 PROJECT HELIOS",0100829010F4A000,status-playable,playable,2021-04-14 13:50:19.000 "1979 Revolution: Black Friday",0100D1000B18C000,nvdec;status-playable,playable,2021-02-21 21:03:43.000 -"198X",,status-playable,playable,2020-08-07 13:24:38.000 -"1993 Shenandoah",,status-playable,playable,2020-10-24 13:55:42.000 +"198X",01007BB00FC8A000,status-playable,playable,2020-08-07 13:24:38.000 +"1993 Shenandoah",010075601150A000,status-playable,playable,2020-10-24 13:55:42.000 "1993 Shenandoah Demo",0100148012550000,status-playable,playable,2021-02-09 00:43:43.000 -"2048 Battles",,status-playable,playable,2020-12-12 14:21:25.000 -"2064: Read Only Memories",,deadlock;status-menus,menus,2020-05-28 16:53:58.000 +"2048 Battles",010096500EA94000,status-playable,playable,2020-12-12 14:21:25.000 +"2064: Read Only Memories INTEGRAL",010024C0067C4000,deadlock;status-menus,menus,2020-05-28 16:53:58.000 "20XX",0100749009844000,gpu;status-ingame,ingame,2023-08-14 09:41:44.000 "2urvive",01007550131EE000,status-playable,playable,2022-11-17 13:49:37.000 "2weistein – The Curse of the Red Dragon",0100E20012886000,status-playable;nvdec;UE4,playable,2022-11-18 14:47:07.000 "30 in 1 game collection vol. 2",0100DAC013D0A000,status-playable;online-broken,playable,2022-10-15 17:22:27.000 "30-in-1 Game Collection",010056D00E234000,status-playable;online-broken,playable,2022-10-15 17:47:09.000 "3000th Duel",0100FB5010D2E000,status-playable,playable,2022-09-21 17:12:08.000 -"36 Fragments of Midnight",,status-playable,playable,2020-05-28 15:12:59.000 +"36 Fragments of Midnight",01003670066DE000,status-playable,playable,2020-05-28 15:12:59.000 "39 Days to Mars",0100AF400C4CE000,status-playable,playable,2021-02-21 22:12:46.000 "3D Arcade Fishing",010010C013F2A000,status-playable,playable,2022-10-25 21:50:51.000 "3D MiniGolf",,status-playable,playable,2021-01-06 09:22:11.000 -- 2.47.1 From 384416953df017cb5b1abc083a9ea71e2f55126c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 8 Jan 2025 12:30:13 -0600 Subject: [PATCH 308/722] docs: compat: list title ID column first --- docs/compatibility.csv | 6866 ++++++++--------- .../Utilities/Compat/CompatibilityCsv.cs | 16 +- 2 files changed, 3439 insertions(+), 3443 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index c84e858fa..600f00097 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -1,3433 +1,3433 @@ -"issue_title","extracted_game_id","issue_labels","extracted_status","last_event_date" -"-KLAUS-",010099F00EF3E000,nvdec;status-playable,playable,2020-06-27 13:27:30.000 -".hack//G.U. Last Recode",0100BA9014A02000,deadlock;status-boots,boots,2022-03-12 19:15:47.000 -"#Funtime",01001E500F7FC000,status-playable,playable,2020-12-10 16:54:35.000 -"#Halloween, Super Puzzles Dream",01000E50134A4000,nvdec;status-playable,playable,2020-12-10 20:43:58.000 -"#KillAllZombies",01004D100C510000,slow;status-playable,playable,2020-12-16 01:50:25.000 -"#NoLimitFantasy, Super Puzzles Dream",0100325012C12000,nvdec;status-playable,playable,2020-12-12 17:21:32.000 -"#RaceDieRun",01005D400E5C8000,status-playable,playable,2020-07-04 20:23:16.000 -"#womenUp, Super Puzzles Dream",01003DB011AE8000,status-playable,playable,2020-12-12 16:57:25.000 -"#womenUp, Super Puzzles Dream Demo",0100D87012A14000,nvdec;status-playable,playable,2021-02-09 00:03:31.000 -"1-2-Switch",01000320000CC000,services;status-playable,playable,2022-02-18 14:44:03.000 -"10 Second Run Returns",01004D1007926000,gpu;status-ingame,ingame,2022-07-17 13:06:18.000 -"10 Second Run RETURNS Demo",0100DC000A472000,gpu;status-ingame,ingame,2021-02-09 00:17:18.000 -"112 Operator",0100D82015774000,status-playable;nvdec,playable,2022-11-13 22:42:50.000 -"112th Seed",010051E012302000,status-playable,playable,2020-10-03 10:32:38.000 -"12 is Better Than 6",01007F600D1B8000,status-playable,playable,2021-02-22 16:10:12.000 -"12 Labours of Hercules II: The Cretan Bull",0100B1A010014000,cpu;status-nothing;32-bit;crash,nothing,2022-12-07 13:43:10.000 -"12 orbits",0100A840047C2000,status-playable,playable,2020-05-28 16:13:26.000 -"13 Sentinels Aegis Rim",01003FC01670C000,slow;status-ingame,ingame,2024-06-10 20:33:38.000 -"13 Sentinels Aegis Rim Demo",0100C54015002000,status-playable;demo,playable,2022-04-13 14:15:48.000 -"140",01007E600EEE6000,status-playable,playable,2020-08-05 20:01:33.000 -"16-Bit Soccer Demo",0100B94013D28000,status-playable,playable,2021-02-09 00:23:07.000 -"1917 - The Alien Invasion DX",01005CA0099AA000,status-playable,playable,2021-01-08 22:11:16.000 -"1971 PROJECT HELIOS",0100829010F4A000,status-playable,playable,2021-04-14 13:50:19.000 -"1979 Revolution: Black Friday",0100D1000B18C000,nvdec;status-playable,playable,2021-02-21 21:03:43.000 -"198X",01007BB00FC8A000,status-playable,playable,2020-08-07 13:24:38.000 -"1993 Shenandoah",010075601150A000,status-playable,playable,2020-10-24 13:55:42.000 -"1993 Shenandoah Demo",0100148012550000,status-playable,playable,2021-02-09 00:43:43.000 -"2048 Battles",010096500EA94000,status-playable,playable,2020-12-12 14:21:25.000 -"2064: Read Only Memories INTEGRAL",010024C0067C4000,deadlock;status-menus,menus,2020-05-28 16:53:58.000 -"20XX",0100749009844000,gpu;status-ingame,ingame,2023-08-14 09:41:44.000 -"2urvive",01007550131EE000,status-playable,playable,2022-11-17 13:49:37.000 -"2weistein – The Curse of the Red Dragon",0100E20012886000,status-playable;nvdec;UE4,playable,2022-11-18 14:47:07.000 -"30 in 1 game collection vol. 2",0100DAC013D0A000,status-playable;online-broken,playable,2022-10-15 17:22:27.000 -"30-in-1 Game Collection",010056D00E234000,status-playable;online-broken,playable,2022-10-15 17:47:09.000 -"3000th Duel",0100FB5010D2E000,status-playable,playable,2022-09-21 17:12:08.000 -"36 Fragments of Midnight",01003670066DE000,status-playable,playable,2020-05-28 15:12:59.000 -"39 Days to Mars",0100AF400C4CE000,status-playable,playable,2021-02-21 22:12:46.000 -"3D Arcade Fishing",010010C013F2A000,status-playable,playable,2022-10-25 21:50:51.000 -"3D MiniGolf",,status-playable,playable,2021-01-06 09:22:11.000 -"4x4 Dirt Track",,status-playable,playable,2020-12-12 21:41:42.000 -"60 Parsecs!",010010100FF14000,status-playable,playable,2022-09-17 11:01:17.000 -"60 Seconds!",0100969005E98000,services;status-ingame,ingame,2021-11-30 01:04:14.000 -"6180 the moon",,status-playable,playable,2020-05-28 15:39:24.000 -"64",,status-playable,playable,2020-12-12 21:31:58.000 -"7 Billion Humans",,32-bit;status-playable,playable,2020-12-17 21:04:58.000 -"7th Sector",,nvdec;status-playable,playable,2020-08-10 14:22:14.000 -"8-BIT ADVENTURE STEINS;GATE",,audio;status-ingame,ingame,2020-01-12 15:05:06.000 -"80 Days",,status-playable,playable,2020-06-22 21:43:01.000 -"80's OVERDRIVE",,status-playable,playable,2020-10-16 14:33:32.000 -"88 Heroes",,status-playable,playable,2020-05-28 14:13:02.000 -"9 Monkeys of Shaolin",,UE4;gpu;slow;status-ingame,ingame,2020-11-17 11:58:43.000 -"9 Monkeys of Shaolin Demo",0100C5F012E3E000,UE4;gpu;nvdec;status-ingame,ingame,2021-02-09 01:03:30.000 -"911 Operator Deluxe Edition",,status-playable,playable,2020-07-14 13:57:44.000 -"99Vidas",,online;status-playable,playable,2020-10-29 13:00:40.000 -"99Vidas Demo",010023500C2F0000,status-playable,playable,2021-02-09 12:51:31.000 -"9th Dawn III",,status-playable,playable,2020-12-12 22:27:27.000 -"A Ch'ti Bundle",010096A00CC80000,status-playable;nvdec,playable,2022-10-04 12:48:44.000 -"A Dark Room",,gpu;status-ingame,ingame,2020-12-14 16:14:28.000 -"A Duel Hand Disaster Trackher: DEMO",0100582012B90000,crash;demo;nvdec;status-ingame,ingame,2021-03-24 18:45:27.000 -"A Duel Hand Disaster: Trackher",010026B006802000,status-playable;nvdec;online-working,playable,2022-09-04 14:24:55.000 -"A Frog Game",,status-playable,playable,2020-12-14 16:09:53.000 -"A Hat In Time",010056E00853A000,status-playable,playable,2024-06-25 19:52:44.000 -"A HERO AND A GARDEN",01009E1011EC4000,status-playable,playable,2022-12-05 16:37:47.000 -"A Knight's Quest",01005EF00CFDA000,status-playable;UE4,playable,2022-09-12 20:44:20.000 -"A magical high school girl",01008DD006C52000,status-playable,playable,2022-07-19 14:40:50.000 -"A Short Hike",,status-playable,playable,2020-10-15 00:19:58.000 -"A Sound Plan",,crash;status-boots,boots,2020-12-14 16:46:21.000 -"A Summer with the Shiba Inu",01007DD011C4A000,status-playable,playable,2021-06-10 20:51:16.000 -"A-Train: All Aboard! Tourism",0100A3E010E56000,nvdec;status-playable,playable,2021-04-06 17:48:19.000 -"Aaero",010097A00CC0A000,status-playable;nvdec,playable,2022-07-19 14:49:55.000 -"Aborigenus",,status-playable,playable,2020-08-05 19:47:24.000 -"Absolute Drift",,status-playable,playable,2020-12-10 14:02:44.000 -"Abyss of The Sacrifice",010047F012BE2000,status-playable;nvdec,playable,2022-10-21 13:56:28.000 -"ABZU",0100C1300BBC6000,status-playable;UE4,playable,2022-07-19 15:02:52.000 -"ACA NEOGEO 2020 SUPER BASEBALL",01003C400871E000,online;status-playable,playable,2021-04-12 13:23:51.000 -"ACA NEOGEO 3 COUNT BOUT",0100FC000AFC6000,online;status-playable,playable,2021-04-12 13:16:42.000 -"ACA NEOGEO AERO FIGHTERS 2",0100AC40038F4000,online;status-playable,playable,2021-04-08 15:44:09.000 -"ACA NEOGEO AERO FIGHTERS 3",0100B91008780000,online;status-playable,playable,2021-04-12 13:11:17.000 -"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",0100B4800AFBA000,online;status-playable,playable,2021-04-01 22:48:01.000 -"ACA NEOGEO BASEBALL STARS PROFESSIONAL",01003FE00A2F6000,online;status-playable,playable,2021-04-01 21:23:05.000 -"ACA NEOGEO BLAZING STAR",,crash;services;status-menus,menus,2020-05-26 17:29:02.000 -"ACA NEOGEO CROSSED SWORDS",0100D2400AFB0000,online;status-playable,playable,2021-04-01 20:42:59.000 -"ACA NEOGEO FATAL FURY",0100EE6002B48000,online;status-playable,playable,2021-04-01 20:36:23.000 -"ACA NEOGEO FOOTBALL FRENZY",,status-playable,playable,2021-03-29 20:12:12.000 -"ACA NEOGEO GAROU: MARK OF THE WOLVES",0100CB2001DB8000,online;status-playable,playable,2021-04-01 20:31:10.000 -"ACA NEOGEO GHOST PILOTS",01005D700A2F8000,online;status-playable,playable,2021-04-01 20:26:45.000 -"ACA NEOGEO LAST RESORT",01000D10038E6000,online;status-playable,playable,2021-04-01 19:51:22.000 -"ACA NEOGEO LEAGUE BOWLING",,crash;services;status-menus,menus,2020-05-26 17:11:04.000 -"ACA NEOGEO MAGICAL DROP II",,crash;services;status-menus,menus,2020-05-26 16:48:24.000 -"ACA NEOGEO MAGICIAN LORD",01007920038F6000,online;status-playable,playable,2021-04-01 19:33:26.000 -"ACA NEOGEO METAL SLUG",0100EBE002B3E000,status-playable,playable,2021-02-21 13:56:48.000 -"ACA NEOGEO METAL SLUG 2",010086300486E000,online;status-playable,playable,2021-04-01 19:25:52.000 -"ACA NEOGEO METAL SLUG 3",,crash;services;status-menus,menus,2020-05-26 16:32:45.000 -"ACA NEOGEO METAL SLUG 4",01009CE00AFAE000,online;status-playable,playable,2021-04-01 18:12:18.000 -"ACA NEOGEO Metal Slug X",,crash;services;status-menus,menus,2020-05-26 14:07:20.000 -"ACA NEOGEO Money Puzzle Exchanger",010038F00AFA0000,online;status-playable,playable,2021-04-01 17:59:56.000 -"ACA NEOGEO NEO TURF MASTERS",01002E70032E8000,status-playable,playable,2021-02-21 15:12:01.000 -"ACA NEOGEO NINJA COMBAT",010052A00A306000,status-playable,playable,2021-03-29 21:17:28.000 -"ACA NEOGEO NINJA COMMANDO",01007E800AFB6000,online;status-playable,playable,2021-04-01 17:28:18.000 -"ACA NEOGEO OVER TOP",01003A5001DBA000,status-playable,playable,2021-02-21 13:16:25.000 -"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",010088500878C000,online;status-playable,playable,2021-04-01 17:18:27.000 -"ACA NEOGEO SAMURAI SHODOWN",01005C9002B42000,online;status-playable,playable,2021-04-01 17:11:35.000 -"ACA NEOGEO SAMURAI SHODOWN IV",010047F001DBC000,online;status-playable,playable,2021-04-12 12:58:54.000 -"ACA NEOGEO SAMURAI SHODOWN SPECIAL V",010049F00AFE8000,online;status-playable,playable,2021-04-10 18:07:13.000 -"ACA NEOGEO SENGOKU 2",01009B300872A000,online;status-playable,playable,2021-04-10 17:36:44.000 -"ACA NEOGEO SENGOKU 3",01008D000877C000,online;status-playable,playable,2021-04-10 16:11:53.000 -"ACA NEOGEO SHOCK TROOPERS",,crash;services;status-menus,menus,2020-05-26 15:29:34.000 -"ACA NEOGEO SPIN MASTER",01007D1004DBA000,online;status-playable,playable,2021-04-10 15:50:19.000 -"ACA NEOGEO SUPER SIDEKICKS 2",010055A00A300000,online;status-playable,playable,2021-04-10 16:05:58.000 -"ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY",0100A4D00A308000,online;status-playable,playable,2021-04-10 15:39:22.000 -"ACA NEOGEO THE KING OF FIGHTERS '94",,crash;services;status-menus,menus,2020-05-26 15:03:44.000 -"ACA NEOGEO THE KING OF FIGHTERS '95",01009DC001DB6000,status-playable,playable,2021-03-29 20:27:35.000 -"ACA NEOGEO THE KING OF FIGHTERS '96",01006F0004FB4000,online;status-playable,playable,2021-04-10 14:49:10.000 -"ACA NEOGEO THE KING OF FIGHTERS '97",0100170008728000,online;status-playable,playable,2021-04-10 14:43:27.000 -"ACA NEOGEO THE KING OF FIGHTERS '98",,crash;services;status-menus,menus,2020-05-26 14:54:20.000 -"ACA NEOGEO THE KING OF FIGHTERS '99",0100583001DCA000,online;status-playable,playable,2021-04-10 14:36:56.000 -"ACA NEOGEO THE KING OF FIGHTERS 2000",0100B97002B44000,online;status-playable,playable,2021-04-10 15:24:35.000 -"ACA NEOGEO THE KING OF FIGHTERS 2001",010048200AFC2000,online;status-playable,playable,2021-04-10 15:16:23.000 -"ACA NEOGEO THE KING OF FIGHTERS 2002",0100CFD00AFDE000,online;status-playable,playable,2021-04-10 15:01:55.000 -"ACA NEOGEO THE KING OF FIGHTERS 2003",0100EF100AFE6000,online;status-playable,playable,2021-04-10 14:54:31.000 -"ACA NEOGEO THE LAST BLADE 2",0100699008792000,online;status-playable,playable,2021-04-10 14:31:54.000 -"ACA NEOGEO THE SUPER SPY",0100F7F00AFA2000,online;status-playable,playable,2021-04-10 14:26:33.000 -"ACA NEOGEO WAKU WAKU 7",0100CEF001DC0000,online;status-playable,playable,2021-04-10 14:20:52.000 -"ACA NEOGEO WORLD HEROES PERFECT",,crash;services;status-menus,menus,2020-05-26 14:14:36.000 -"ACA NEOGEO ZUPAPA!",,online;status-playable,playable,2021-03-25 20:07:33.000 -"Access Denied",0100A9900CB5C000,status-playable,playable,2022-07-19 15:25:10.000 -"Ace Angler: Fishing Spirits",01007C50132C8000,status-menus;crash,menus,2023-03-03 03:21:39.000 -"Ace Attorney Investigations Collection DEMO",010033401E68E000,status-playable,playable,2024-09-07 06:16:42.000 -"Ace Combat 7 - Skies Unknown Deluxe Edition",010039301B7E0000,gpu;status-ingame;UE4,ingame,2024-09-27 14:31:43.000 -"Ace of Seafood",0100FF1004D56000,status-playable,playable,2022-07-19 15:32:25.000 -"Aces of the Luftwaffe Squadron",,nvdec;slow;status-playable,playable,2020-05-27 12:29:42.000 -"Aces of the Luftwaffe Squadron Demo",010054300D822000,nvdec;status-playable,playable,2021-02-09 13:12:28.000 -"ACORN Tactics",0100DBC0081A4000,status-playable,playable,2021-02-22 12:57:40.000 -"Across the Grooves",,status-playable,playable,2020-06-27 12:29:51.000 -"Acthung! Cthulhu Tactics",,status-playable,playable,2020-12-14 18:40:27.000 -"Active Neurons",010039A010DA0000,status-playable,playable,2021-01-27 21:31:21.000 -"Active Neurons 2",01000D1011EF0000,status-playable,playable,2022-10-07 16:21:42.000 -"Active Neurons 2 Demo",010031C0122B0000,status-playable,playable,2021-02-09 13:40:21.000 -"Active Neurons 3",0100EE1013E12000,status-playable,playable,2021-03-24 12:20:20.000 -"Actual Sunlight",,gpu;status-ingame,ingame,2020-12-14 17:18:41.000 -"Adam's Venture: Origins",0100C0C0040E4000,status-playable,playable,2021-03-04 18:43:57.000 -"Adrenaline Rush - Miami Drive",,status-playable,playable,2020-12-12 22:49:50.000 -"Advance Wars 1+2: Re-Boot Camp",0100300012F2A000,status-playable,playable,2024-01-30 18:19:44.000 -"Adventure Llama",,status-playable,playable,2020-12-14 19:32:24.000 -"Adventure Pinball Bundle",,slow;status-playable,playable,2020-12-14 20:31:53.000 -"Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",01003B400A00A000,status-playable;nvdec,playable,2022-09-17 11:07:56.000 -"Adventures of Chris",,status-playable,playable,2020-12-12 23:00:02.000 -"Adventures of Chris Demo",0100A0A0136E8000,status-playable,playable,2021-02-09 13:49:21.000 -"Adventures of Pip",,nvdec;status-playable,playable,2020-12-12 22:11:55.000 -"ADVERSE",01008C901266E000,UE4;status-playable,playable,2021-04-26 14:32:51.000 -"Aegis Defenders Demo",010064500AF72000,status-playable,playable,2021-02-09 14:04:17.000 -"Aegis Defenders0",01008E6006502000,status-playable,playable,2021-02-22 13:29:33.000 -"Aeolis Tournament",,online;status-playable,playable,2020-12-12 22:02:14.000 -"Aeolis Tournament Demo",01006710122CE000,nvdec;status-playable,playable,2021-02-09 14:22:30.000 -"AER - Memories of Old",0100A0400DDE0000,nvdec;status-playable,playable,2021-03-05 18:43:43.000 -"Aerial Knight's Never Yield",0100E9B013D4A000,status-playable,playable,2022-10-25 22:05:00.000 -"Aery",0100875011D0C000,status-playable,playable,2021-03-07 15:25:51.000 -"Aery - Sky Castle",010018E012914000,status-playable,playable,2022-10-21 17:58:49.000 -"Aery - A Journey Beyond Time",0100DF8014056000,status-playable,playable,2021-04-05 15:52:25.000 -"Aery - Broken Memories",0100087012810000,status-playable,playable,2022-10-04 13:11:52.000 -"Aery - Calm Mind - 0100A801539000",,status-playable,playable,2022-11-14 14:26:58.000 -"AeternoBlade Demo Version",0100B1C00949A000,nvdec;status-playable,playable,2021-02-09 14:39:26.000 -"AeternoBlade I",,nvdec;status-playable,playable,2020-12-14 20:06:48.000 -"AeternoBlade II",01009D100EA28000,status-playable;online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18.000 -"AeternoBlade II Demo Version",,gpu;nvdec;status-ingame,ingame,2021-02-09 15:10:19.000 -"AFL Evolution 2",01001B400D334000,slow;status-playable;online-broken;UE4,playable,2022-12-07 12:45:56.000 -"Afterparty",0100DB100BBCE000,status-playable,playable,2022-09-22 12:23:19.000 -"Agatha Christie - The ABC Murders",,status-playable,playable,2020-10-27 17:08:23.000 -"Agatha Knife",,status-playable,playable,2020-05-28 12:37:58.000 -"Agent A: A puzzle in disguise",,status-playable,playable,2020-11-16 22:53:27.000 -"Agent A: A puzzle in disguise (Demo)",01008E8012C02000,status-playable,playable,2021-02-09 18:30:41.000 -"Ages of Mages: the Last Keeper",0100E4700E040000,status-playable;vulkan-backend-bug,playable,2022-10-04 11:44:05.000 -"Aggelos",010004D00A9C0000,gpu;status-ingame,ingame,2023-02-19 13:24:23.000 -"Agony",,UE4;crash;status-boots,boots,2020-07-10 16:21:18.000 -"Ai: the Somnium Files",010089B00D09C000,status-playable;nvdec,playable,2022-09-04 14:45:06.000 -"AI: The Somnium Files Demo",0100C1700FB34000,nvdec;status-playable,playable,2021-02-10 12:52:33.000 -"Ailment",,status-playable,playable,2020-12-12 22:30:41.000 -"Air Conflicts: Pacific Carriers",,status-playable,playable,2021-01-04 10:52:50.000 -"Air Hockey",,status-playable,playable,2020-05-28 16:44:37.000 -"Air Missions: HIND",,status-playable,playable,2020-12-13 10:16:45.000 -"Aircraft Evolution",0100E95011FDC000,nvdec;status-playable,playable,2021-06-14 13:30:18.000 -"Airfield Mania Demo",010010A00DB72000,services;status-boots;demo,boots,2022-04-10 03:43:02.000 -"AIRHEART - Tales of Broken Wings",01003DD00BFEE000,status-playable,playable,2021-02-26 15:20:27.000 -"Akane",01007F100DE52000,status-playable;nvdec,playable,2022-07-21 00:12:18.000 -"Akash Path of the Five",,gpu;nvdec;status-ingame,ingame,2020-12-14 22:33:12.000 -"Akihabara - Feel the Rhythm Remixed",010053100B0EA000,status-playable,playable,2021-02-22 14:39:35.000 -"Akuarium",,slow;status-playable,playable,2020-12-12 23:43:36.000 -"Akuto",,status-playable,playable,2020-08-04 19:43:27.000 -"Alchemic Jousts",0100F5400AB6C000,gpu;status-ingame,ingame,2022-12-08 15:06:28.000 -"Alchemist's Castle",,status-playable,playable,2020-12-12 23:54:08.000 -"Alder's Blood",,status-playable,playable,2020-08-28 15:15:23.000 -"Alder's Blood Prologue",01004510110C4000,crash;status-ingame,ingame,2021-02-09 19:03:03.000 -"Aldred - Knight of Honor",01000E000EEF8000,services;status-playable,playable,2021-11-30 01:49:17.000 -"Alex Kidd in Miracle World DX",010025D01221A000,status-playable,playable,2022-11-14 15:01:34.000 -"Alien Cruise",,status-playable,playable,2020-08-12 13:56:05.000 -"Alien Escape",,status-playable,playable,2020-06-03 23:43:18.000 -"Alien: Isolation",010075D00E8BA000,status-playable;nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41.000 -"All Walls Must Fall",0100CBD012FB6000,status-playable;UE4,playable,2022-10-15 19:16:30.000 -"All-Star Fruit Racing",0100C1F00A9B8000,status-playable;nvdec;UE4,playable,2022-07-21 00:35:37.000 -"Alluris",0100AC501122A000,gpu;status-ingame;UE4,ingame,2023-08-02 23:13:50.000 -"Almightree the Last Dreamer",,slow;status-playable,playable,2020-12-15 13:59:03.000 -"Along the Edge",,status-playable,playable,2020-11-18 15:00:07.000 -"Alpaca Ball: Allstars",,nvdec;status-playable,playable,2020-12-11 12:26:29.000 -"ALPHA",,status-playable,playable,2020-12-13 12:17:45.000 -"Alphaset by POWGI",,status-playable,playable,2020-12-15 15:15:15.000 -"Alt-Frequencies",,status-playable,playable,2020-12-15 19:01:33.000 -"Alteric",,status-playable,playable,2020-11-08 13:53:22.000 -"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",,status-playable,playable,2020-08-31 14:17:42.000 -"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",0100A8A00D27E000,status-playable,playable,2021-02-10 13:33:59.000 -"Aluna: Sentinel of the Shards",010045201487C000,status-playable;nvdec,playable,2022-10-25 22:17:03.000 -"Alwa's Awakening",,status-playable,playable,2020-10-13 11:52:01.000 -"Alwa's Legacy",,status-playable,playable,2020-12-13 13:00:57.000 -"American Fugitive",,nvdec;status-playable,playable,2021-01-04 20:45:11.000 -"American Ninja Warrior: Challenge",010089D00A3FA000,nvdec;status-playable,playable,2021-06-09 13:11:17.000 -"Amnesia: Collection",01003CC00D0BE000,status-playable,playable,2022-10-04 13:36:15.000 -"Amoeba Battle - Microscopic RTS Action",010041D00DEB2000,status-playable,playable,2021-05-06 13:33:41.000 -"Among the Sleep - Enhanced Edition",010046500C8D2000,nvdec;status-playable,playable,2021-06-03 15:06:25.000 -"Among Us",0100B0C013912000,status-menus;online;ldn-broken,menus,2021-09-22 15:20:17.000 -"Anarcute",010050900E1C6000,status-playable,playable,2021-02-22 13:17:59.000 -"Ancestors Legacy",01009EE0111CC000,status-playable;nvdec;UE4,playable,2022-10-01 12:25:36.000 -"Ancient Rush 2",,UE4;crash;status-menus,menus,2020-07-14 14:58:47.000 -"Angels of Death",0100AE000AEBC000,nvdec;status-playable,playable,2021-02-22 14:17:15.000 -"AngerForce: Reloaded for Nintendo Switch",010001E00A5F6000,status-playable,playable,2022-07-21 10:37:17.000 -"Angry Bunnies: Colossal Carrot Crusade",0100F3500D05E000,status-playable;online-broken,playable,2022-09-04 14:53:26.000 -"Angry Video Game Nerd I & II Deluxe",,crash;status-ingame,ingame,2020-12-12 23:59:54.000 -"Anima Gate of Memories: The Nameless Chronicles",01007A400B3F8000,status-playable,playable,2021-06-14 14:33:06.000 -"Anima: Arcane Edition",010033F00B3FA000,nvdec;status-playable,playable,2021-01-26 16:55:51.000 -"Anima: Gate of Memories",0100706005B6A000,nvdec;status-playable,playable,2021-06-16 18:13:18.000 -"Animal Crossing New Horizons Island Transfer Tool",0100F38011CFE000,services;status-ingame;Needs Update;Incomplete,ingame,2022-12-07 13:51:19.000 -"Animal Crossing: New Horizons",01006F8002326000,gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49.000 -"Animal Fight Club",,gpu;status-ingame,ingame,2020-12-13 13:13:33.000 -"Animal Fun for Toddlers and Kids",,services;status-boots,boots,2020-12-15 16:45:29.000 -"Animal Hunter Z",,status-playable,playable,2020-12-13 12:50:35.000 -"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",010033C0121DC000,services;status-boots,boots,2021-11-29 23:43:14.000 -"Animal Rivals Switch",010065B009B3A000,status-playable,playable,2021-02-22 14:02:42.000 -"Animal Super Squad",0100EFE009424000,UE4;status-playable,playable,2021-04-23 20:50:50.000 -"Animal Up",,status-playable,playable,2020-12-13 15:39:02.000 -"ANIMAL WELL",010020D01AD24000,status-playable,playable,2024-05-22 18:01:49.000 -"Animals for Toddlers",,services;status-boots,boots,2020-12-15 17:27:27.000 -"Animated Jigsaws Collection",,nvdec;status-playable,playable,2020-12-15 15:58:34.000 -"Animated Jigsaws: Beautiful Japanese Scenery DEMO",0100A1900B5B8000,nvdec;status-playable,playable,2021-02-10 13:49:56.000 -"Anime Studio Story",,status-playable,playable,2020-12-15 18:14:05.000 -"Anime Studio Story Demo",01002B300EB86000,status-playable,playable,2021-02-10 14:50:39.000 -"ANIMUS",,status-playable,playable,2020-12-13 15:11:47.000 -"Animus: Harbinger",0100E5A00FD38000,status-playable,playable,2022-09-13 22:09:20.000 -"Ankh Guardian - Treasure of the Demon's Temple",,status-playable,playable,2020-12-13 15:55:49.000 -"Anode",,status-playable,playable,2020-12-15 17:18:58.000 -"Another Code: Recollection",0100CB9018F5A000,gpu;status-ingame;crash,ingame,2024-09-06 05:58:52.000 -"Another Sight",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-03 16:49:59.000 -"Another World",01003C300AAAE000,slow;status-playable,playable,2022-07-21 10:42:38.000 -"AnShi",01000FD00DF78000,status-playable;nvdec;UE4,playable,2022-10-21 19:37:01.000 -"Anthill",010054C00D842000,services;status-menus;nvdec,menus,2021-11-18 09:25:25.000 -"Anti-Hero Bundle",0100596011E20000,status-playable;nvdec,playable,2022-10-21 20:10:30.000 -"Antiquia Lost",,status-playable,playable,2020-05-28 11:57:32.000 -"Antventor",,nvdec;status-playable,playable,2020-12-15 20:09:27.000 -"Ao no Kanata no Four Rhythm",0100FA100620C000,status-playable,playable,2022-07-21 10:50:42.000 -"AO Tennis 2",010047000E9AA000,status-playable;online-broken,playable,2022-09-17 12:05:07.000 -"Aokana - Four Rhythms Across the Blue",0100990011866000,status-playable,playable,2022-10-04 13:50:26.000 -"Ape Out",01005B100C268000,status-playable,playable,2022-09-26 19:04:47.000 -"APE OUT DEMO",010054500E6D4000,status-playable,playable,2021-02-10 14:33:06.000 -"Aperion Cyberstorm",,status-playable,playable,2020-12-14 00:40:16.000 -"Aperion Cyberstorm Demo",01008CA00D71C000,status-playable,playable,2021-02-10 15:53:21.000 -"Apocalipsis",,deadlock;status-menus,menus,2020-05-27 12:56:37.000 -"Apocryph",,gpu;status-ingame,ingame,2020-12-13 23:24:10.000 -"Apparition",,nvdec;slow;status-ingame,ingame,2020-12-13 23:57:04.000 -"AQUA KITTY UDX",0100AC10085CE000,online;status-playable,playable,2021-04-12 15:34:11.000 -"Aqua Lungers",,crash;status-ingame,ingame,2020-12-14 11:25:57.000 -"Aqua Moto Racing Utopia",0100D0D00516A000,status-playable,playable,2021-02-21 21:21:00.000 -"Aragami: Shadow Edition",010071800BA74000,nvdec;status-playable,playable,2021-02-21 20:33:23.000 -"Arc of Alchemist",0100C7D00E6A0000,status-playable;nvdec,playable,2022-10-07 19:15:54.000 -"Arcade Archives 10-Yard Fight",0100BE80097FA000,online;status-playable,playable,2021-03-25 21:26:41.000 -"Arcade Archives ALPHA MISSION",01005DD00BE08000,online;status-playable,playable,2021-04-15 09:20:43.000 -"Arcade Archives ALPINE SKI",010083800DC70000,online;status-playable,playable,2021-04-15 09:28:46.000 -"Arcade Archives ARGUS",010014F001DE2000,online;status-playable,playable,2021-04-16 06:51:25.000 -"Arcade Archives Armed F",010014F001DE2000,online;status-playable,playable,2021-04-16 07:00:17.000 -"Arcade Archives ATHENA",0100BEC00C7A2000,online;status-playable,playable,2021-04-16 07:10:12.000 -"Arcade Archives Atomic Robo-Kid",0100426001DE4000,online;status-playable,playable,2021-04-16 07:20:29.000 -"Arcade Archives BOMB JACK",0100192009824000,online;status-playable,playable,2021-04-16 09:48:26.000 -"Arcade Archives City CONNECTION",010007A00980C000,online;status-playable,playable,2021-03-25 22:16:15.000 -"Arcade Archives CLU CLU LAND",0100EDC00E35A000,online;status-playable,playable,2021-04-16 10:00:42.000 -"Arcade Archives CRAZY CLIMBER",0100BB1001DD6000,online;status-playable,playable,2021-03-25 22:24:15.000 -"Arcade Archives DONKEY KONG",,Needs Update;crash;services;status-menus,menus,2021-03-24 18:18:43.000 -"Arcade Archives DOUBLE DRAGON",0100F25001DD0000,online;status-playable,playable,2021-03-25 22:44:34.000 -"Arcade Archives DOUBLE DRAGON II The Revenge",01009E3001DDE000,online;status-playable,playable,2021-04-12 16:05:29.000 -"Arcade Archives FRONT LINE",0100496006EC8000,online;status-playable,playable,2021-05-05 14:10:49.000 -"Arcade Archives HEROIC EPISODE",01009A4008A30000,online;status-playable,playable,2021-03-25 23:01:26.000 -"Arcade Archives ICE CLIMBER",01007D200D3FC000,online;status-playable,playable,2021-05-05 14:18:34.000 -"Arcade Archives IKARI WARRIORS",010049400C7A8000,online;status-playable,playable,2021-05-05 14:24:46.000 -"Arcade Archives Ikki",01000DB00980A000,online;status-playable,playable,2021-03-25 23:11:28.000 -"Arcade Archives IMAGE FIGHT",010008300C978000,online;status-playable,playable,2021-05-05 14:31:21.000 -"Arcade Archives Kid Niki Radical Ninja",010010B008A36000,audio;status-ingame;online,ingame,2022-07-21 11:02:04.000 -"Arcade Archives Kid's Horehore Daisakusen",0100E7C001DE0000,online;status-playable,playable,2021-04-12 16:21:29.000 -"Arcade Archives LIFE FORCE",,status-playable,playable,2020-09-04 13:26:25.000 -"Arcade Archives MARIO BROS.",0100755004608000,online;status-playable,playable,2021-03-26 11:31:32.000 -"Arcade Archives MOON CRESTA",01000BE001DD8000,online;status-playable,playable,2021-05-05 14:39:29.000 -"Arcade Archives MOON PATROL",01003000097FE000,online;status-playable,playable,2021-03-26 11:42:04.000 -"Arcade Archives NINJA GAIDEN",01003EF00D3B4000,audio;online;status-ingame,ingame,2021-04-12 16:27:53.000 -"Arcade Archives Ninja Spirit",01002F300D2C6000,online;status-playable,playable,2021-05-05 14:45:31.000 -"Arcade Archives Ninja-Kid",,online;status-playable,playable,2021-03-26 20:55:07.000 -"Arcade Archives OMEGA FIGHTER",,crash;services;status-menus,menus,2020-08-18 20:50:54.000 -"Arcade Archives PLUS ALPHA",,audio;status-ingame,ingame,2020-07-04 20:47:55.000 -"Arcade Archives POOYAN",0100A6E00D3F8000,online;status-playable,playable,2021-05-05 17:58:19.000 -"Arcade Archives PSYCHO SOLDIER",01000D200C7A4000,online;status-playable,playable,2021-05-05 18:02:19.000 -"Arcade Archives PUNCH-OUT!!",01001530097F8000,online;status-playable,playable,2021-03-25 22:10:55.000 -"Arcade Archives Renegade",010081E001DD2000,status-playable;online,playable,2022-07-21 11:45:40.000 -"Arcade Archives ROAD FIGHTER",0100FBA00E35C000,online;status-playable,playable,2021-05-05 18:09:17.000 -"Arcade Archives ROUTE 16",010060000BF7C000,online;status-playable,playable,2021-05-05 18:40:41.000 -"Arcade Archives RYGAR",0100C2D00981E000,online;status-playable,playable,2021-04-15 08:48:30.000 -"Arcade Archives Shusse Ozumo",01007A4009834000,online;status-playable,playable,2021-05-05 17:52:25.000 -"Arcade Archives Sky Skipper",010008F00B054000,online;status-playable,playable,2021-04-15 08:58:09.000 -"Arcade Archives Solomon's Key",01008C900982E000,online;status-playable,playable,2021-04-19 16:27:18.000 -"Arcade Archives STAR FORCE",010069F008A38000,online;status-playable,playable,2021-04-15 08:39:09.000 -"Arcade Archives TERRA CRESTA",,crash;services;status-menus,menus,2020-08-18 20:20:55.000 -"Arcade Archives TERRA FORCE",0100348001DE6000,online;status-playable,playable,2021-04-16 20:03:27.000 -"Arcade Archives TETRIS THE GRAND MASTER",0100DFD016B7A000,status-playable,playable,2024-06-23 01:50:29.000 -"Arcade Archives THE NINJA WARRIORS",0100DC000983A000,online;slow;status-ingame,ingame,2021-04-16 19:54:56.000 -"Arcade Archives TIME PILOT",0100AF300D2E8000,online;status-playable,playable,2021-04-16 19:22:31.000 -"Arcade Archives Traverse USA",010029D006ED8000,online;status-playable,playable,2021-04-15 08:11:06.000 -"Arcade Archives URBAN CHAMPION",010042200BE0C000,online;status-playable,playable,2021-04-16 10:20:03.000 -"Arcade Archives VS. GRADIUS",01004EC00E634000,online;status-playable,playable,2021-04-12 14:53:58.000 -"Arcade Archives VS. SUPER MARIO BROS.",,online;status-playable,playable,2021-04-08 14:48:11.000 -"Arcade Archives WILD WESTERN",01001B000D8B6000,online;status-playable,playable,2021-04-16 10:11:36.000 -"Arcade Classics Anniversary Collection",010050000D6C4000,status-playable,playable,2021-06-03 13:55:10.000 -"ARCADE FUZZ",,status-playable,playable,2020-08-15 12:37:36.000 -"Arcade Spirits",,status-playable,playable,2020-06-21 11:45:03.000 -"Arcaea",0100E680149DC000,status-playable,playable,2023-03-16 19:31:21.000 -"Arcanoid Breakout",0100E53013E1C000,status-playable,playable,2021-01-25 23:28:02.000 -"Archaica: Path of LightInd",,crash;status-nothing,nothing,2020-10-16 13:22:26.000 -"Area 86",,status-playable,playable,2020-12-16 16:45:52.000 -"ARIA CHRONICLE",0100691013C46000,status-playable,playable,2022-11-16 13:50:55.000 -"Ark: Survival Evolved",0100D4A00B284000,gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56.000 -"Arkanoid vs Space Invaders",,services;status-ingame,ingame,2021-01-21 12:50:30.000 -"Arkham Horror: Mother's Embrace",010069A010606000,nvdec;status-playable,playable,2021-04-19 15:40:55.000 -"Armed 7 DX",,status-playable,playable,2020-12-14 11:49:56.000 -"Armello",,nvdec;status-playable,playable,2021-01-07 11:43:26.000 -"ARMS",01009B500007C000,status-playable;ldn-works;LAN,playable,2024-08-28 07:49:24.000 -"ARMS Demo",,status-playable,playable,2021-02-10 16:30:13.000 -"Arrest of a stone Buddha",0100184011B32000,status-nothing;crash,nothing,2022-12-07 16:55:00.000 -"Arrog",,status-playable,playable,2020-12-16 17:20:50.000 -"Art of Balance",01008EC006BE2000,gpu;status-ingame;ldn-works,ingame,2022-07-21 17:13:57.000 -"Art of Balance DEMO",010062F00CAE2000,gpu;slow;status-ingame,ingame,2021-02-10 17:17:12.000 -"Art Sqool",01006AA013086000,status-playable;nvdec,playable,2022-10-16 20:42:37.000 -"Artifact Adventure Gaiden DX",,status-playable,playable,2020-12-16 17:49:25.000 -"Ary and the Secret of Seasons",0100C2500CAB6000,status-playable,playable,2022-10-07 20:45:09.000 -"ASCENDANCE",,status-playable,playable,2021-01-05 10:54:40.000 -"Asemblance",,UE4;gpu;status-ingame,ingame,2020-12-16 18:01:23.000 -"Ash of Gods: Redemption",,deadlock;status-nothing,nothing,2020-08-10 18:08:32.000 -"Ashen",010027B00E40E000,status-playable;nvdec;online-broken;UE4,playable,2022-09-17 12:19:14.000 -"Asphalt 9: Legends",01007B000C834000,services;status-menus;crash;online-broken,menus,2022-12-07 13:28:29.000 -"Assassin's Creed III Remastered",01007F600B134000,status-boots;nvdec,boots,2024-06-25 20:12:11.000 -"Assassin's Creed The Rebel Collection",010044700DEB0000,gpu;status-ingame,ingame,2024-05-19 07:58:56.000 -"Assault Android Cactus+",0100DF200B24C000,status-playable,playable,2021-06-03 13:23:55.000 -"Assault Chainguns KM",,crash;gpu;status-ingame,ingame,2020-12-14 12:48:34.000 -"Assault on Metaltron Demo",0100C5E00E540000,status-playable,playable,2021-02-10 19:48:06.000 -"Astebreed",010057A00C1F6000,status-playable,playable,2022-07-21 17:33:54.000 -"Asterix & Obelix XXL 2",010050400BD38000,deadlock;status-ingame;nvdec,ingame,2022-07-21 17:54:14.000 -"Asterix & Obelix XXL: Romastered",0100F46011B50000,gpu;status-ingame;nvdec;opengl,ingame,2023-08-16 21:22:06.000 -"Asterix & Obelix XXL3: The Crystal Menhir",010081500EA1E000,gpu;status-ingame;nvdec;regression,ingame,2022-11-28 14:19:23.000 -"Astral Chain",01007300020FA000,status-playable,playable,2024-07-17 18:02:19.000 -"Astro Bears Party",,status-playable,playable,2020-05-28 11:21:58.000 -"Astro Duel Deluxe",0100F0400351C000,32-bit;status-playable,playable,2021-06-03 11:21:48.000 -"Astrologaster",0100B80010C48000,cpu;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:31.000 -"AstroWings SpaceWar",,status-playable,playable,2020-12-14 13:10:44.000 -"Atari 50 The Anniversary Celebration",010099801870E000,slow;status-playable,playable,2022-11-14 19:42:10.000 -"Atelier Ayesha: The Alchemist of Dusk DX",0100D9D00EE8C000,status-menus;crash;nvdec;Needs Update,menus,2021-11-24 07:29:54.000 -"Atelier Escha & Logy: Alchemists Of The Dusk Sky DX",0100E5600EE8E000,status-playable;nvdec,playable,2022-11-20 16:01:41.000 -"Atelier Firis: The Alchemist and the Mysterious Journey DX",010023201421E000,gpu;status-ingame;nvdec,ingame,2022-10-25 22:46:19.000 -"Atelier Lulua ~ The Scion of Arland ~",,nvdec;status-playable,playable,2020-12-16 14:29:19.000 -"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings",010009900947A000,nvdec;status-playable,playable,2021-06-03 18:37:01.000 -"Atelier Meruru ~ The Apprentice of Arland ~ DX",,nvdec;status-playable,playable,2020-06-12 00:50:48.000 -"Atelier Rorona - The Alchemist of Arland - DX",010088600C66E000,nvdec;status-playable,playable,2021-04-08 15:33:15.000 -"Atelier Rorona Arland no Renkinjutsushi DX (JP)",01002D700B906000,status-playable;nvdec,playable,2022-12-02 17:26:54.000 -"Atelier Ryza 2: Lost Legends & the Secret Fairy",01009A9012022000,status-playable,playable,2022-10-16 21:06:06.000 -"Atelier Ryza: Ever Darkness & the Secret Hideout",0100D1900EC80000,status-playable,playable,2023-10-15 16:36:50.000 -"Atelier Shallie: Alchemists of the Dusk Sea DX",,nvdec;status-playable,playable,2020-11-25 20:54:12.000 -"Atelier Sophie 2: The Alchemist of the Mysterious Dream",010082A01538E000,status-ingame;crash,ingame,2022-12-01 04:34:03.000 -"Atelier Sophie: The Alchemist of the Mysterious Book DX",01001A5014220000,status-playable,playable,2022-10-25 23:06:20.000 -"Atelier Totori ~ The Adventurer of Arland ~ DX",,nvdec;status-playable,playable,2020-06-12 01:04:56.000 -"ATOM RPG",0100B9400FA38000,status-playable;nvdec,playable,2022-10-22 10:11:48.000 -"Atomic Heist",01005FE00EC4E000,status-playable,playable,2022-10-16 21:24:32.000 -"Atomicrops",0100AD30095A4000,status-playable,playable,2022-08-06 10:05:07.000 -"ATOMIK RunGunJumpGun",,status-playable,playable,2020-12-14 13:19:24.000 -"ATOMINE",,gpu;nvdec;slow;status-playable,playable,2020-12-14 18:56:50.000 -"Attack of the Toy Tanks",,slow;status-ingame,ingame,2020-12-14 12:59:12.000 -"Attack on Titan 2",,status-playable,playable,2021-01-04 11:40:01.000 -"ATV Drift & Tricks",01000F600B01E000,UE4;online;status-playable,playable,2021-04-08 17:29:17.000 -"Automachef",,status-playable,playable,2020-12-16 19:51:25.000 -"Automachef Demo",01006B700EA6A000,status-playable,playable,2021-02-10 20:35:37.000 -"Aviary Attorney: Definitive Edition",,status-playable,playable,2020-08-09 20:32:12.000 -"Avicii Invector",,status-playable,playable,2020-10-25 12:12:56.000 -"AVICII Invector Demo",0100E100128BA000,status-playable,playable,2021-02-10 21:04:58.000 -"AvoCuddle",,status-playable,playable,2020-09-02 14:50:13.000 -"Awakening of Cthulhu",0100085012D64000,UE4;status-playable,playable,2021-04-26 13:03:07.000 -"Away: Journey to the Unexpected",01002F1005F3C000,status-playable;nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04.000 -"Awesome Pea",,status-playable,playable,2020-10-11 12:39:23.000 -"Awesome Pea (Demo)",010023800D3F2000,status-playable,playable,2021-02-10 21:48:21.000 -"Awesome Pea 2",0100B7D01147E000,status-playable,playable,2022-10-01 12:34:19.000 -"Awesome Pea 2 (Demo) - 0100D2011E28000",,crash;status-nothing,nothing,2021-02-10 22:08:27.000 -"Axes",0100DA3011174000,status-playable,playable,2021-04-08 13:01:58.000 -"Axiom Verge",,status-playable,playable,2020-10-20 01:07:18.000 -"Ayakashi koi gikyoku Free Trial",010075400DEC6000,status-playable,playable,2021-02-10 22:22:11.000 -"Azur Lane: Crosswave",01006AF012FC8000,UE4;nvdec;status-playable,playable,2021-04-05 15:15:25.000 -"Azuran Tales: Trials",,status-playable,playable,2020-08-12 15:23:07.000 -"Azure Reflections",01006FB00990E000,nvdec;online;status-playable,playable,2021-04-08 13:18:25.000 -"Azure Striker GUNVOLT 3",01004E90149AA000,status-playable,playable,2022-08-10 13:46:49.000 -"Azure Striker Gunvolt: STRIKER PACK",0100192003FA4000,32-bit;status-playable,playable,2024-02-10 23:51:21.000 -"Azurebreak Heroes",,status-playable,playable,2020-12-16 21:26:17.000 -"B.ARK",01009B901145C000,status-playable;nvdec,playable,2022-11-17 13:35:02.000 -"Baba Is You",01002CD00A51C000,status-playable,playable,2022-07-17 05:36:54.000 -"Back to Bed",,nvdec;status-playable,playable,2020-12-16 20:52:04.000 -"Backworlds",0100FEA014316000,status-playable,playable,2022-10-25 23:20:34.000 -"BaconMan",0100EAF00E32E000,status-menus;crash;nvdec,menus,2021-11-20 02:36:21.000 -"Bad Dream: Coma",01000CB00D094000,deadlock;status-boots,boots,2023-08-03 00:54:18.000 -"Bad Dream: Fever",0100B3B00D81C000,status-playable,playable,2021-06-04 18:33:12.000 -"Bad Dudes",,status-playable,playable,2020-12-10 12:30:56.000 -"Bad North",0100E98006F22000,status-playable,playable,2022-07-17 13:44:25.000 -"Bad North Demo",,status-playable,playable,2021-02-10 22:48:38.000 -"BAFL",,status-playable,playable,2021-01-13 08:32:51.000 -"Baila Latino",010076B011EC8000,status-playable,playable,2021-04-14 16:40:24.000 -"Bakugan Champions of Vestroia",,status-playable,playable,2020-11-06 19:07:39.000 -"Bakumatsu Renka SHINSENGUMI",01008260138C4000,status-playable,playable,2022-10-25 23:37:31.000 -"Balan Wonderworld",0100438012EC8000,status-playable;nvdec;UE4,playable,2022-10-22 13:08:43.000 -"Balan Wonderworld Demo",0100E48013A34000,gpu;services;status-ingame;UE4;demo,ingame,2023-02-16 20:05:07.000 -"Balatro",0100CD801CE5E000,status-ingame,ingame,2024-04-21 02:01:53.000 -"Baldur's Gate and Baldur's Gate II: Enhanced Editions",010010A00DA48000,32-bit;status-playable,playable,2022-09-12 23:52:15.000 -"Balthazar's Dreams",0100BC400FB64000,status-playable,playable,2022-09-13 00:13:22.000 -"Bamerang",01008D30128E0000,status-playable,playable,2022-10-26 00:29:39.000 -"Bang Dream Girls Band Party for Nintendo Switch",,status-playable,playable,2021-09-19 03:06:58.000 -"Banner of the Maid",010013C010C5C000,status-playable,playable,2021-06-14 15:23:37.000 -"Banner Saga 2",,crash;status-boots,boots,2021-01-13 08:56:09.000 -"Banner Saga 3",,slow;status-boots,boots,2021-01-11 16:53:57.000 -"Banner Saga Trilogy",0100CE800B94A000,slow;status-playable,playable,2024-03-06 11:25:20.000 -"Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos",,status-playable,playable,2020-07-15 05:06:29.000 -"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",,nvdec;status-playable,playable,2020-12-17 11:43:10.000 -"Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive",,status-playable,playable,2020-12-17 11:22:50.000 -"Baobabs Mausoleum: DEMO",0100D3000AEC2000,status-playable,playable,2021-02-10 22:59:25.000 -"Barbarous! Tavern of Emyr",01003350102E2000,status-playable,playable,2022-10-16 21:50:24.000 -"Barbearian",0100F7E01308C000,Needs Update;gpu;status-ingame,ingame,2021-06-28 16:27:50.000 -"Baron: Fur Is Gonna Fly",010039C0106C6000,status-boots;crash,boots,2022-02-06 02:05:43.000 -"Barry Bradford's Putt Panic Party",,nvdec;status-playable,playable,2020-06-17 01:08:34.000 -"Baseball Riot",01004860080A0000,status-playable,playable,2021-06-04 18:07:27.000 -"Bass Pro Shops: The Strike - Championship Edition",0100E3100450E000,gpu;status-boots;32-bit,boots,2022-12-09 15:58:16.000 -"Bastion",010038600B27E000,status-playable,playable,2022-02-15 14:15:24.000 -"Batbarian: Testament of the Primordials",,status-playable,playable,2020-12-17 12:00:59.000 -"Baten Kaitos I & II HD Remaster (Europe/USA)",0100C07018CA6000,services;status-boots;Needs Update,boots,2023-10-01 00:44:32.000 -"Baten Kaitos I & II HD Remaster (Japan)",0100F28018CA4000,services;status-boots;Needs Update,boots,2023-10-24 23:11:54.000 -"Batman - The Telltale Series",,nvdec;slow;status-playable,playable,2021-01-11 18:19:35.000 -"Batman: Arkham City",01003f00163ce000,status-playable,playable,2024-09-11 00:30:19.000 -"Batman: Arkham Knight",0100ACD0163D0000,gpu;status-ingame;mac-bug,ingame,2024-06-25 20:24:42.000 -"Batman: The Enemy Within",,crash;status-nothing,nothing,2020-10-16 05:49:27.000 -"Battle Axe",0100747011890000,status-playable,playable,2022-10-26 00:38:01.000 -"Battle Chasers: Nightwar",,nvdec;slow;status-playable,playable,2021-01-12 12:27:34.000 -"Battle Chef Brigade",,status-playable,playable,2021-01-11 14:16:28.000 -"Battle Chef Brigade Demo",0100DBB00CAEE000,status-playable,playable,2021-02-10 23:15:07.000 -"Battle Hunters",0100A3B011EDE000,gpu;status-ingame,ingame,2022-11-12 09:19:17.000 -"Battle of Kings",,slow;status-playable,playable,2020-12-17 12:45:23.000 -"Battle Planet - Judgement Day",,status-playable,playable,2020-12-17 14:06:20.000 -"Battle Princess Madelyn",,status-playable,playable,2021-01-11 13:47:23.000 -"Battle Princess Madelyn Royal Edition",0100A7500DF64000,status-playable,playable,2022-09-26 19:14:49.000 -"Battle Supremacy - Evolution",010099B00E898000,gpu;status-boots;nvdec,boots,2022-02-17 09:02:50.000 -"Battle Worlds: Kronos",0100DEB00D5A8000,nvdec;status-playable,playable,2021-06-04 17:48:02.000 -"Battleground",0100650010DD4000,status-ingame;crash,ingame,2021-09-06 11:53:23.000 -"BATTLESLOTHS",,status-playable,playable,2020-10-03 08:32:22.000 -"BATTLESTAR GALACTICA Deadlock",,nvdec;status-playable,playable,2020-06-27 17:35:44.000 -"Battlezone Gold Edition",01006D800A988000,gpu;ldn-untested;online;status-boots,boots,2021-06-04 18:36:05.000 -"BATTLLOON",,status-playable,playable,2020-12-17 15:48:23.000 -"bayala - the game",0100194010422000,status-playable,playable,2022-10-04 14:09:25.000 -"Bayonetta",010076F0049A2000,status-playable;audout,playable,2022-11-20 15:51:59.000 -"Bayonetta 2",01007960049A0000,status-playable;nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09.000 -"Bayonetta 3",01004A4010FEA000,gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33.000 -"Bayonetta Origins Cereza and the Lost Demon Demo",010002801A3FA000,gpu;status-ingame;demo,ingame,2024-02-17 06:06:28.000 -"Bayonetta Origins: Cereza and the Lost Demon",0100CF5010FEC000,gpu;status-ingame,ingame,2024-02-27 01:39:49.000 -"Be-A Walker",,slow;status-ingame,ingame,2020-09-02 15:00:31.000 -"Beach Buggy Racing",010095C00406C000,online;status-playable,playable,2021-04-13 23:16:50.000 -"Bear With Me - The Lost Robots",010020700DE04000,nvdec;status-playable,playable,2021-02-27 14:20:10.000 -"Bear With Me - The Lost Robots Demo",010024200E97E800,nvdec;status-playable,playable,2021-02-12 22:38:12.000 -"Bear's Restaurant - 0100CE014A4E000",,status-playable,playable,2024-08-11 21:26:59.000 -"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",,crash;status-menus,menus,2020-10-04 06:12:08.000 -"Beat Cop",,status-playable,playable,2021-01-06 19:26:48.000 -"Beat Me!",01002D20129FC000,status-playable;online-broken,playable,2022-10-16 21:59:26.000 -"Beautiful Desolation",01006B0014590000,gpu;status-ingame;nvdec,ingame,2022-10-26 10:34:38.000 -"Bee Simulator",,UE4;crash;status-boots,boots,2020-07-15 12:13:13.000 -"BeeFense BeeMastered",010018F007786000,status-playable,playable,2022-11-17 15:38:12.000 -"Behold the Kickmen",,status-playable,playable,2020-06-27 12:49:45.000 -"Beholder",,status-playable,playable,2020-10-16 12:48:58.000 -"Ben 10",01006E1004404000,nvdec;status-playable,playable,2021-02-26 14:08:35.000 -"Ben 10: Power Trip",01009CD00E3AA000,status-playable;nvdec,playable,2022-10-09 10:52:12.000 -"Bendy and the Ink Machine",010074500BBC4000,status-playable,playable,2023-05-06 20:35:39.000 -"Bertram Fiddle Episode 2: A Bleaker Predicklement",010021F00C1C0000,nvdec;status-playable,playable,2021-02-22 14:56:37.000 -"Beyblade Burst Battle Zero",010068600AD16000,services;status-menus;crash;Needs Update,menus,2022-11-20 15:48:32.000 -"Beyond Enemy Lines: Covert Operations",010056500CAD8000,status-playable;UE4,playable,2022-10-01 13:11:50.000 -"Beyond Enemy Lines: Essentials",0100B8F00DACA000,status-playable;nvdec;UE4,playable,2022-09-26 19:48:16.000 -"Bibi & Tina - Adventures with Horses",,nvdec;slow;status-playable,playable,2021-01-13 08:58:09.000 -"Bibi & Tina at the horse farm",010062400E69C000,status-playable,playable,2021-04-06 16:31:39.000 -"Bibi Blocksberg - Big Broom Race 3",,status-playable,playable,2021-01-11 19:07:16.000 -"Big Buck Hunter Arcade",,nvdec;status-playable,playable,2021-01-12 20:31:39.000 -"Big Crown: Showdown",010088100C35E000,status-menus;nvdec;online;ldn-untested,menus,2022-07-17 18:25:32.000 -"Big Dipper",0100A42011B28000,status-playable,playable,2021-06-14 15:08:19.000 -"Big Drunk Satanic Massacre",01002FA00DE72000,status-playable,playable,2021-03-04 21:28:22.000 -"Big Pharma",,status-playable,playable,2020-07-14 15:27:30.000 -"BIG-Bobby-Car - The Big Race",,slow;status-playable,playable,2020-12-10 14:25:06.000 -"Billion Road",010057700FF7C000,status-playable,playable,2022-11-19 15:57:43.000 -"BINGO for Nintendo Switch",,status-playable,playable,2020-07-23 16:17:36.000 -"Biomutant",01004BA017CD6000,status-ingame;crash,ingame,2024-05-16 15:46:36.000 -"BioShock 2 Remastered",01002620102C6000,services;status-nothing,nothing,2022-10-29 14:39:22.000 -"BioShock Infinite: The Complete Edition",0100D560102C8000,services-horizon;status-nothing;crash,nothing,2024-08-11 21:35:01.000 -"BioShock Remastered",0100AD10102B2000,services-horizon;status-boots;crash;Needs Update,boots,2024-06-06 01:08:52.000 -"Biped",010053B0117F8000,status-playable;nvdec,playable,2022-10-01 13:32:58.000 -"Bird Game +",01001B700B278000,status-playable;online,playable,2022-07-17 18:41:57.000 -"Birds and Blocks Demo",0100B6B012FF4000,services;status-boots;demo,boots,2022-04-10 04:53:03.000 -"BIT.TRIP RUNNER",0100E62012D3C000,status-playable,playable,2022-10-17 14:23:24.000 -"BIT.TRIP VOID",01000AD012D3A000,status-playable,playable,2022-10-17 14:31:23.000 -"Bite the Bullet",,status-playable,playable,2020-10-14 23:10:11.000 -"Bitmaster",010026E0141C8000,status-playable,playable,2022-12-13 14:05:51.000 -"Biz Builder Delux",,slow;status-playable,playable,2020-12-15 21:36:25.000 -"Black Book",0100DD1014AB8000,status-playable;nvdec,playable,2022-12-13 16:38:53.000 -"Black Future '88",010049000B69E000,status-playable;nvdec,playable,2022-09-13 11:24:37.000 -"Black Hole Demo",01004BE00A682000,status-playable,playable,2021-02-12 23:02:17.000 -"Black Legend",0100C3200E7E6000,gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48.000 -"Blackjack Hands",,status-playable,playable,2020-11-30 14:04:51.000 -"Blackmoor2",0100A0A00E660000,status-playable;online-broken,playable,2022-09-26 20:26:34.000 -"Blacksad: Under the Skin",010032000EA2C000,status-playable,playable,2022-09-13 11:38:04.000 -"Blacksea Odyssey",01006B400C178000,status-playable;nvdec,playable,2022-10-16 22:14:34.000 -"Blacksmith of the Sand Kingdom",010068E013450000,status-playable,playable,2022-10-16 22:37:44.000 -"BLADE ARCUS Rebellion From Shining",0100C4400CB7C000,status-playable,playable,2022-07-17 18:52:28.000 -"Blade Assault",0100EA1018A2E000,audio;status-nothing,nothing,2024-04-29 14:32:50.000 -"Blade II The Return of Evil",01009CC00E224000,audio;status-ingame;crash;UE4,ingame,2021-11-14 02:49:59.000 -"Blade Strangers",01005950022EC000,status-playable;nvdec,playable,2022-07-17 19:02:43.000 -"Bladed Fury",0100DF0011A6A000,status-playable,playable,2022-10-26 11:36:26.000 -"Blades of Time",0100CFA00CC74000,deadlock;status-boots;online,boots,2022-07-17 19:19:58.000 -"Blair Witch",01006CC01182C000,status-playable;nvdec;UE4,playable,2022-10-01 14:06:16.000 -"Blanc",010039501405E000,gpu;slow;status-ingame,ingame,2023-02-22 14:00:13.000 -"Blasphemous",0100698009C6E000,nvdec;status-playable,playable,2021-03-01 12:15:31.000 -"Blasphemous Demo",0100302010338000,status-playable,playable,2021-02-12 23:49:56.000 -"Blaster Master Zero",0100225000FEE000,32-bit;status-playable,playable,2021-03-05 13:22:33.000 -"Blaster Master Zero 2",01005AA00D676000,status-playable,playable,2021-04-08 15:22:59.000 -"Blaster Master Zero DEMO",010025B002E92000,status-playable,playable,2021-02-12 23:59:06.000 -"BLAZBLUE CENTRALFICTION Special Edition",,nvdec;status-playable,playable,2020-12-15 23:50:04.000 -"BlazBlue: Cross Tag Battle",,nvdec;online;status-playable,playable,2021-01-05 20:29:37.000 -"Blazing Beaks",,status-playable,playable,2020-06-04 20:37:06.000 -"Blazing Chrome",,status-playable,playable,2020-11-16 04:56:54.000 -"Bleep Bloop DEMO",010091700EA2A000,nvdec;status-playable,playable,2021-02-13 00:20:53.000 -"Blind Men",010089D011310000,audout;status-playable,playable,2021-02-20 14:15:38.000 -"Blizzard Arcade Collection",0100743013D56000,status-playable;nvdec,playable,2022-08-03 19:37:26.000 -"BlobCat",0100F3500A20C000,status-playable,playable,2021-04-23 17:09:30.000 -"Block-a-Pix Deluxe Demo",0100E1C00DB6C000,status-playable,playable,2021-02-13 00:37:39.000 -"Bloo Kid",0100C6A01AD56000,status-playable,playable,2024-05-01 17:18:04.000 -"Bloo Kid 2",010055900FADA000,status-playable,playable,2024-05-01 17:16:57.000 -"Blood & Guts Bundle",,status-playable,playable,2020-06-27 12:57:35.000 -"Blood Waves",01007E700D17E000,gpu;status-ingame,ingame,2022-07-18 13:04:46.000 -"Blood will be Spilled",,nvdec;status-playable,playable,2020-12-17 03:02:03.000 -"Bloodstained: Curse of the Moon",,status-playable,playable,2020-09-04 10:42:17.000 -"Bloodstained: Curse of the Moon 2",,status-playable,playable,2020-09-04 10:56:27.000 -"Bloodstained: Ritual of the Night",010025A00DF2A000,status-playable;nvdec;UE4,playable,2022-07-18 14:27:35.000 -"Bloody Bunny : The Game",0100E510143EC000,status-playable;nvdec;UE4,playable,2022-10-22 13:18:55.000 -"Bloons TD 5",0100B8400A1C6000,Needs Update;audio;gpu;services;status-boots,boots,2021-04-18 23:02:46.000 -"Blossom Tales",0100C1000706C000,status-playable,playable,2022-07-18 16:43:07.000 -"Blossom Tales Demo",01000EB01023E000,status-playable,playable,2021-02-13 14:22:53.000 -"Blue Fire",010073B010F6E000,status-playable;UE4,playable,2022-10-22 14:46:11.000 -"Body of Evidence",0100721013510000,status-playable,playable,2021-04-25 22:22:11.000 -"Bohemian Killing",0100AD1010CCE000,status-playable;vulkan-backend-bug,playable,2022-09-26 22:41:37.000 -"Boku to Nurse no Kenshuu Nisshi",010093700ECEC000,status-playable,playable,2022-11-21 20:38:34.000 -"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",01001D900D9AC000,slow;status-ingame;crash;Needs Update,ingame,2022-04-24 22:46:04.000 -"Bomb Rush Cyberfunk",0100317014B7C000,status-playable,playable,2023-09-28 19:51:57.000 -"Bomber Crew",01007900080B6000,status-playable,playable,2021-06-03 14:21:28.000 -"Bomber Fox",0100A1F012948000,nvdec;status-playable,playable,2021-04-19 17:58:13.000 -"Bombslinger",010087300445A000,services;status-menus,menus,2022-07-19 12:53:15.000 -"Book of Demons",01007A200F452000,status-playable,playable,2022-09-29 12:03:43.000 -"Bookbound Brigade",,status-playable,playable,2020-10-09 14:30:29.000 -"Boom Blaster",,status-playable,playable,2021-03-24 10:55:56.000 -"Boomerang Fu",010081A00EE62000,status-playable,playable,2024-07-28 01:12:41.000 -"Boomerang Fu Demo Version",010069F0135C4000,demo;status-playable,playable,2021-02-13 14:38:13.000 -"Borderlands 2: Game of the Year Edition",010096F00FF22000,status-playable,playable,2022-04-22 18:35:07.000 -"Borderlands 3",01009970122E4000,gpu;status-ingame,ingame,2024-07-15 04:38:14.000 -"Borderlands: Game of the Year Edition",010064800F66A000,slow;status-ingame;online-broken;ldn-untested,ingame,2023-07-23 21:10:36.000 -"Borderlands: The Pre-Sequel Ultimate Edition",010007400FF24000,nvdec;status-playable,playable,2021-06-09 20:17:10.000 -"Boreal Blade",01008E500AFF6000,gpu;ldn-untested;online;status-ingame,ingame,2021-06-11 15:37:14.000 -"Boris The Rocket",010092C013FB8000,status-playable,playable,2022-10-26 13:23:09.000 -"Bossgard",010076F00EBE4000,status-playable;online-broken,playable,2022-10-04 14:21:13.000 -"Bot Vice Demo",010069B00EAC8000,crash;demo;status-ingame,ingame,2021-02-13 14:52:42.000 -"Bouncy Bob 2",,status-playable,playable,2020-07-14 16:51:53.000 -"Bounty Battle",0100E1200DC1A000,status-playable;nvdec,playable,2022-10-04 14:40:51.000 -"Bow to Blood: Last Captain Standing",,slow;status-playable,playable,2020-10-23 10:51:21.000 -"BOX Align",,crash;services;status-nothing,nothing,2020-04-03 17:26:56.000 -"BOXBOY! + BOXGIRL!",,status-playable,playable,2020-11-08 01:11:54.000 -"BOXBOY! + BOXGIRL! Demo",0100B7200E02E000,demo;status-playable,playable,2021-02-13 14:59:08.000 -"BQM BlockQuest Maker",,online;status-playable,playable,2020-07-31 20:56:50.000 -"Bramble The Mountain King",0100E87017D0E000,services-horizon;status-playable,playable,2024-03-06 09:32:17.000 -"Brave Dungeon + Dark Witch's Story: COMBAT",,status-playable,playable,2021-01-12 21:06:34.000 -"Bravely Default II",01006DC010326000,gpu;status-ingame;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26.000 -"Bravely Default II Demo",0100B6801137E000,gpu;status-ingame;crash;UE4;demo,ingame,2022-09-27 05:39:47.000 -"BraveMatch",010081501371E000,status-playable;UE4,playable,2022-10-26 13:32:15.000 -"Bravery and Greed",0100F60017D4E000,gpu;deadlock;status-boots,boots,2022-12-04 02:23:47.000 -"Brawl",,nvdec;slow;status-playable,playable,2020-06-04 14:23:18.000 -"Brawl Chess",010068F00F444000,status-playable;nvdec,playable,2022-10-26 13:59:17.000 -"Brawlhalla",0100C6800B934000,online;opengl;status-playable,playable,2021-06-03 18:26:09.000 -"Brawlout",010060200A4BE000,ldn-untested;online;status-playable,playable,2021-06-04 17:35:35.000 -"Brawlout Demo",0100C1B00E1CA000,demo;status-playable,playable,2021-02-13 22:46:53.000 -"Breakout: Recharged",010022C016DC8000,slow;status-ingame,ingame,2022-11-06 15:32:57.000 -"Breathedge",01000AA013A5E000,UE4;nvdec;status-playable,playable,2021-05-06 15:44:28.000 -"Breathing Fear",,status-playable,playable,2020-07-14 15:12:29.000 -"Brick Breaker",,crash;status-ingame,ingame,2020-12-15 17:03:59.000 -"Brick Breaker",,nvdec;online;status-playable,playable,2020-12-15 18:26:23.000 -"Bridge 3",,status-playable,playable,2020-10-08 20:47:24.000 -"Bridge Constructor: The Walking Dead",,gpu;slow;status-ingame,ingame,2020-12-11 17:31:32.000 -"Brigandine: The Legend of Runersia",010011000EA7A000,status-playable,playable,2021-06-20 06:52:25.000 -"Brigandine: The Legend of Runersia Demo",0100703011258000,status-playable,playable,2021-02-14 14:44:10.000 -"Bring Them Home",01000BF00BE40000,UE4;status-playable,playable,2021-04-12 14:14:43.000 -"Broforce",010060A00B53C000,ldn-untested;online;status-playable,playable,2021-05-28 12:23:38.000 -"Broken Age",0100EDD0068A6000,status-playable,playable,2021-06-04 17:40:32.000 -"Broken Lines",,status-playable,playable,2020-10-16 00:01:37.000 -"Broken Sword 5 - the Serpent's Curse",01001E60085E6000,status-playable,playable,2021-06-04 17:28:59.000 -"Brotherhood United Demo",0100F19011226000,demo;status-playable,playable,2021-02-14 21:10:57.000 -"Brothers: A Tale of Two Sons",01000D500D08A000,status-playable;nvdec;UE4,playable,2022-07-19 14:02:22.000 -"Brunch Club",,status-playable,playable,2020-06-24 13:54:07.000 -"Bubble Bobble 4 Friends",010010900F7B4000,nvdec;status-playable,playable,2021-06-04 15:27:55.000 -"Bubsy: Paws on Fire!",0100DBE00C554000,slow;status-ingame,ingame,2023-08-24 02:44:51.000 -"Bucket Knight",,crash;status-ingame,ingame,2020-09-04 13:11:24.000 -"Bucket Knight demo",0100F1B010A90000,demo;status-playable,playable,2021-02-14 21:23:09.000 -"Bud Spencer & Terence Hill - Slaps and Beans",01000D200AC0C000,status-playable,playable,2022-07-17 12:37:00.000 -"Bug Fables",,status-playable,playable,2020-06-09 11:27:00.000 -"BULLETSTORM: DUKE OF SWITCH EDITION",01003DD00D658000,status-playable;nvdec,playable,2022-03-03 08:30:24.000 -"BurgerTime Party!",,slow;status-playable,playable,2020-11-21 14:11:53.000 -"BurgerTime Party! Demo",01005780106E8000,demo;status-playable,playable,2021-02-14 21:34:16.000 -"Buried Stars",,status-playable,playable,2020-09-07 14:11:58.000 -"Burnout Paradise Remastered",0100DBF01000A000,nvdec;online;status-playable,playable,2021-06-13 02:54:46.000 -"Bury me, my Love",,status-playable,playable,2020-11-07 12:47:37.000 -"Bus Driver Simulator",010030D012FF6000,status-playable,playable,2022-10-17 13:55:27.000 -"BUSTAFELLOWS",,nvdec;status-playable,playable,2020-10-17 20:04:41.000 -"BUTCHER",,status-playable,playable,2021-01-11 18:50:17.000 -"Cabela's: The Hunt - Championship Edition",0100E24004510000,status-menus;32-bit,menus,2022-07-21 20:21:25.000 -"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda",01000B900D8B0000,slow;status-playable;nvdec,playable,2024-04-01 22:43:40.000 -"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600",,demo;gpu;nvdec;status-ingame,ingame,2021-02-14 21:48:15.000 -"Café Enchanté",,status-playable,playable,2020-11-13 14:54:25.000 -"Cafeteria Nipponica Demo",010060400D21C000,demo;status-playable,playable,2021-02-14 22:11:35.000 -"Cake Bash Demo",0100699012F82000,crash;demo;status-ingame,ingame,2021-02-14 22:21:15.000 -"Caladrius Blaze",01004FD00D66A000,deadlock;status-nothing;nvdec,nothing,2022-12-07 16:44:37.000 -"Calculation Castle: Greco's Ghostly Challenge ""Addition",,32-bit;status-playable,playable,2020-11-01 23:40:11.000 -"Calculation Castle: Greco's Ghostly Challenge ""Division",,32-bit;status-playable,playable,2020-11-01 23:54:55.000 -"Calculation Castle: Greco's Ghostly Challenge ""Multiplication",,32-bit;status-playable,playable,2020-11-02 00:04:33.000 -"Calculation Castle: Greco's Ghostly Challenge ""Subtraction",,32-bit;status-playable,playable,2020-11-01 23:47:42.000 -"Calculator",010004701504A000,status-playable,playable,2021-06-11 13:27:20.000 -"Calico",010013A00E750000,status-playable,playable,2022-10-17 14:44:28.000 -"Call of Cthulhu",010046000EE40000,status-playable;nvdec;UE4,playable,2022-12-18 03:08:30.000 -"Call of Juarez: Gunslinger",0100B4700BFC6000,gpu;status-ingame;nvdec,ingame,2022-09-17 16:49:46.000 -"Can't Drive This",0100593008BDC000,status-playable,playable,2022-10-22 14:55:17.000 -"Candle - The Power of the Flame",,nvdec;status-playable,playable,2020-05-26 12:10:20.000 -"Capcom Arcade Stadium",01001E0013208000,status-playable,playable,2021-03-17 05:45:14.000 -"Capcom Beat 'Em Up Bundle",,status-playable,playable,2020-03-23 18:31:24.000 -"CAPCOM BELT ACTION COLLECTION",0100F6400A77E000,status-playable;online;ldn-untested,playable,2022-07-21 20:51:23.000 -"Captain Toad: Treasure Tracker",01009BF0072D4000,32-bit;status-playable,playable,2024-04-25 00:50:16.000 -"Captain Toad: Treasure Tracker Demo",01002C400B6B6000,32-bit;demo;status-playable,playable,2021-02-14 22:36:09.000 -"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS",0100EAE010560000,status-playable;online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50.000 -"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",01002320137CC000,slow;status-playable,playable,2021-02-14 22:45:35.000 -"Car Mechanic Manager",,status-playable,playable,2020-07-23 18:50:17.000 -"Car Quest",01007BD00AE70000,deadlock;status-menus,menus,2021-11-18 08:59:18.000 -"Caretaker",0100DA70115E6000,status-playable,playable,2022-10-04 14:52:24.000 -"Cargo Crew Driver",0100DD6014870000,status-playable,playable,2021-04-19 12:54:22.000 -"Carnival Games",010088C0092FE000,status-playable;nvdec,playable,2022-07-21 21:01:22.000 -"Carnivores: Dinosaur Hunt",,status-playable,playable,2022-12-14 18:46:06.000 -"CARRION",,crash;status-nothing,nothing,2020-08-13 17:15:12.000 -"Cars 3 Driven to Win",01008D1001512000,gpu;status-ingame,ingame,2022-07-21 21:21:05.000 -"Carto",0100810012A1A000,status-playable,playable,2022-09-04 15:37:06.000 -"Cartoon Network Adventure Time: Pirates of the Enchiridion",0100C4E004406000,status-playable;nvdec,playable,2022-07-21 21:49:01.000 -"Cartoon Network Battle Crashers",0100085003A2A000,status-playable,playable,2022-07-21 21:55:40.000 -"CASE 2: Animatronics Survival",0100C4C0132F8000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03.000 -"Cassette Beasts",010066F01A0E0000,status-playable,playable,2024-07-22 20:38:43.000 -"Castle Crashers Remastered",010001300D14A000,gpu;status-boots,boots,2024-08-10 09:21:20.000 -"Castle Crashers Remastered Demo",0100F6D01060E000,gpu;status-boots;demo,boots,2022-04-10 10:57:10.000 -"Castle of Heart",01003C100445C000,status-playable;nvdec,playable,2022-07-21 23:10:45.000 -"Castle of No Escape 2",0100F5500FA0E000,status-playable,playable,2022-09-13 13:51:42.000 -"Castle Pals",0100DA2011F18000,status-playable,playable,2021-03-04 21:00:33.000 -"Castlestorm",010097C00AB66000,status-playable;nvdec,playable,2022-07-21 22:49:14.000 -"CastleStorm 2",,UE4;crash;nvdec;status-boots,boots,2020-10-25 11:22:44.000 -"Castlevania Anniversary Collection",,audio;status-playable,playable,2020-05-23 11:40:29.000 -"Cat Girl Without Salad: Amuse-Bouche",010076000C86E000,status-playable,playable,2022-09-03 13:01:47.000 -"Cat Quest",,status-playable,playable,2020-04-02 23:09:32.000 -"Cat Quest II",,status-playable,playable,2020-07-06 23:52:09.000 -"Cat Quest II Demo",0100E86010220000,demo;status-playable,playable,2021-02-15 14:11:57.000 -"Catherine Full Body",0100BF00112C0000,status-playable;nvdec,playable,2023-04-02 11:00:37.000 -"Catherine Full Body for Nintendo Switch (JP)",0100BAE0077E4000,Needs Update;gpu;status-ingame,ingame,2021-02-21 18:06:11.000 -"Cattails",010004400B28A000,status-playable,playable,2021-06-03 14:36:57.000 -"Cave Story+",,status-playable,playable,2020-05-22 09:57:25.000 -"Caveblazers",01001A100C0E8000,slow;status-ingame,ingame,2021-06-09 17:57:28.000 -"Caveman Warriors",,status-playable,playable,2020-05-22 11:44:20.000 -"Caveman Warriors Demo",,demo;status-playable,playable,2021-02-15 14:44:08.000 -"Celeste",,status-playable,playable,2020-06-17 10:14:40.000 -"Cendrillon palikA",01006B000A666000,gpu;status-ingame;nvdec,ingame,2022-07-21 22:52:24.000 -"CHAOS CODE -NEW SIGN OF CATASTROPHE-",01007600115CE000,status-boots;crash;nvdec,boots,2022-04-04 12:24:21.000 -"CHAOS;HEAD NOAH",0100957016B90000,status-playable,playable,2022-06-02 22:57:19.000 -"Charge Kid",0100F52013A66000,gpu;status-boots;audout,boots,2024-02-11 01:17:47.000 -"Chasm",,status-playable,playable,2020-10-23 11:03:43.000 -"Chasm: The Rift",010034301A556000,gpu;status-ingame,ingame,2024-04-29 19:02:48.000 -"Chess Ultra",0100A5900472E000,status-playable;UE4,playable,2023-08-30 23:06:31.000 -"Chicken Assassin: Reloaded",0100E3C00A118000,status-playable,playable,2021-02-20 13:29:01.000 -"Chicken Police - Paint it RED!",,nvdec;status-playable,playable,2020-12-10 15:10:11.000 -"Chicken Range",0100F6C00A016000,status-playable,playable,2021-04-23 12:14:23.000 -"Chicken Rider",,status-playable,playable,2020-05-22 11:31:17.000 -"Chickens Madness DEMO",0100CAC011C3A000,UE4;demo;gpu;nvdec;status-ingame,ingame,2021-02-15 15:02:10.000 -"Child of Light",,nvdec;status-playable,playable,2020-12-16 10:23:10.000 -"Children of Morta",01002DE00C250000,gpu;status-ingame;nvdec,ingame,2022-09-13 17:48:47.000 -"Children of Zodiarcs",,status-playable,playable,2020-10-04 14:23:33.000 -"Chinese Parents",010046F012A04000,status-playable,playable,2021-04-08 12:56:41.000 -"Chocobo GP",01006A30124CA000,gpu;status-ingame;crash,ingame,2022-06-04 14:52:18.000 -"Chocobo's Mystery Dungeon Every Buddy!",,slow;status-playable,playable,2020-05-26 13:53:13.000 -"Choices That Matter: And The Sun Went Out",,status-playable,playable,2020-12-17 15:44:08.000 -"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",,gpu;nvdec;status-ingame,ingame,2020-09-28 17:58:04.000 -"ChromaGun",,status-playable,playable,2020-05-26 12:56:42.000 -"Chronos",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-11 22:16:35.000 -"Circle of Sumo",,status-playable,playable,2020-05-22 12:45:21.000 -"Circuits",01008FA00D686000,status-playable,playable,2022-09-19 11:52:50.000 -"Cities: Skylines - Nintendo Switch Edition",,status-playable,playable,2020-12-16 10:34:57.000 -"Citizens of Space",0100E4200D84E000,gpu;status-boots,boots,2023-10-22 06:45:44.000 -"Citizens Unite!: Earth x Space",0100D9C012900000,gpu;status-ingame,ingame,2023-10-22 06:44:19.000 -"City Bus Driving Simulator",01005E501284E000,status-playable,playable,2021-06-15 21:25:59.000 -"CLANNAD",0100A3A00CC7E000,status-playable,playable,2021-06-03 17:01:02.000 -"CLANNAD Side Stories - 01007B01372C000",,status-playable,playable,2022-10-26 15:03:04.000 -"Clash Force",01005ED0107F4000,status-playable,playable,2022-10-01 23:45:48.000 -"Claybook",010009300AA6C000,slow;status-playable;nvdec;online;UE4,playable,2022-07-22 11:11:34.000 -"Clea",,crash;status-ingame,ingame,2020-12-15 16:22:56.000 -"Clea 2",010045E0142A4000,status-playable,playable,2021-04-18 14:25:18.000 -"Clock Zero ~Shuuen no Ichibyou~ Devote",01008C100C572000,status-playable;nvdec,playable,2022-12-04 22:19:14.000 -"Clocker",0100DF9013AD4000,status-playable,playable,2021-04-05 15:05:13.000 -"Close to the Sun",0100B7200DAC6000,status-boots;crash;nvdec;UE4,boots,2021-11-04 09:19:41.000 -"Clubhouse Games: 51 Worldwide Classics",010047700D540000,status-playable;ldn-works,playable,2024-05-21 16:12:57.000 -"Clue",,crash;online;status-menus,menus,2020-11-10 09:23:48.000 -"ClusterPuck 99",,status-playable,playable,2021-01-06 00:28:12.000 -"Clustertruck",010096900A4D2000,slow;status-ingame,ingame,2021-02-19 21:07:09.000 -"Cobra Kai The Karate Kid Saga Continues",01005790110F0000,status-playable,playable,2021-06-17 15:59:13.000 -"COCOON",01002E700C366000,gpu;status-ingame,ingame,2024-03-06 11:33:08.000 -"Code of Princess EX",010034E005C9C000,nvdec;online;status-playable,playable,2021-06-03 10:50:13.000 -"CODE SHIFTER",,status-playable,playable,2020-08-09 15:20:55.000 -"Code: Realize ~Future Blessings~",010002400F408000,status-playable;nvdec,playable,2023-03-31 16:57:47.000 -"Coffee Crisis",0100CF800C810000,status-playable,playable,2021-02-20 12:34:52.000 -"Coffee Talk",,status-playable,playable,2020-08-10 09:48:44.000 -"Coffin Dodgers",0100178009648000,status-playable,playable,2021-02-20 14:57:41.000 -"Cold Silence",010035B01706E000,cpu;status-nothing;crash,nothing,2024-07-11 17:06:14.000 -"Collar X Malice",010083E00F40E000,status-playable;nvdec,playable,2022-10-02 11:51:56.000 -"Collar X Malice -Unlimited-",0100E3B00F412000,status-playable;nvdec,playable,2022-10-04 15:30:40.000 -"Collection of Mana",,status-playable,playable,2020-10-19 19:29:45.000 -"COLLECTION of SaGA FINAL FANTASY LEGEND",,status-playable,playable,2020-12-30 19:11:16.000 -"Collidalot",010030800BC36000,status-playable;nvdec,playable,2022-09-13 14:09:27.000 -"Color Zen",,status-playable,playable,2020-05-22 10:56:17.000 -"Colorgrid",,status-playable,playable,2020-10-04 01:50:52.000 -"Coloring Book",0100A7000BD28000,status-playable,playable,2022-07-22 11:17:05.000 -"Colors Live",010020500BD86000,gpu;services;status-boots;crash,boots,2023-02-26 02:51:07.000 -"Colossus Down",0100E2F0128B4000,status-playable,playable,2021-02-04 20:49:50.000 -"Commander Keen in Keen Dreams",0100C4D00D16A000,gpu;status-ingame,ingame,2022-08-04 20:34:20.000 -"Commander Keen in Keen Dreams: Definitive Edition",0100E400129EC000,status-playable,playable,2021-05-11 19:33:54.000 -"Commandos 2 HD Remaster",010065A01158E000,gpu;status-ingame;nvdec,ingame,2022-08-10 21:52:27.000 -"CONARIUM",010015801308E000,UE4;nvdec;status-playable,playable,2021-04-26 17:57:53.000 -"Concept Destruction",0100971011224000,status-playable,playable,2022-09-29 12:28:56.000 -"Conduct TOGETHER!",010043700C9B0000,nvdec;status-playable,playable,2021-02-20 12:59:00.000 -"Conga Master Party!",,status-playable,playable,2020-05-22 13:22:24.000 -"Connection Haunted",,slow;status-playable,playable,2020-12-10 18:57:14.000 -"Construction Simulator 3 - Console Edition",0100A5600FAC0000,status-playable,playable,2023-02-06 09:31:23.000 -"Constructor Plus",,status-playable,playable,2020-05-26 12:37:40.000 -"Contra Anniversary Collection",0100DCA00DA7E000,status-playable,playable,2022-07-22 11:30:12.000 -"CONTRA: ROGUE CORPS",,crash;nvdec;regression;status-menus,menus,2021-01-07 13:23:35.000 -"CONTRA: ROGUE CORPS Demo",0100B8200ECA6000,gpu;status-ingame,ingame,2022-09-04 16:46:52.000 -"Contraptions",01007D701298A000,status-playable,playable,2021-02-08 18:40:50.000 -"Control Ultimate Edition - Cloud Version",0100041013360000,Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:34:06.000 -"Convoy",,status-playable,playable,2020-10-15 14:43:50.000 -"Cook, Serve, Delicious! 3?!",0100B82010B6C000,status-playable,playable,2022-10-09 12:09:34.000 -"Cooking Mama: Cookstar",010060700EFBA000,status-menus;crash;loader-allocator,menus,2021-11-20 03:19:35.000 -"Cooking Simulator",01001E400FD58000,status-playable,playable,2021-04-18 13:25:23.000 -"Cooking Tycoons 2: 3 in 1 Bundle",,status-playable,playable,2020-11-16 22:19:33.000 -"Cooking Tycoons: 3 in 1 Bundle",,status-playable,playable,2020-11-16 22:44:26.000 -"Copperbell",,status-playable,playable,2020-10-04 15:54:36.000 -"Corpse Party: Blood Drive",010016400B1FE000,nvdec;status-playable,playable,2021-03-01 12:44:23.000 -"Cosmic Fantasy Collection",0100CCB01B1A0000,status-ingame,ingame,2024-05-21 17:56:37.000 -"Cosmic Star Heroine",010067C00A776000,status-playable,playable,2021-02-20 14:30:47.000 -"COTTOn Reboot! [ コットン リブート! ]",01003DD00F94A000,status-playable,playable,2022-05-24 16:29:24.000 -"Cotton/Guardian Saturn Tribute Games",,gpu;status-boots,boots,2022-11-27 21:00:51.000 -"Couch Co-Op Bundle Vol. 2",01000E301107A000,status-playable;nvdec,playable,2022-10-02 12:04:21.000 -"Country Tales",0100C1E012A42000,status-playable,playable,2021-06-17 16:45:39.000 -"Cozy Grove",01003370136EA000,gpu;status-ingame,ingame,2023-07-30 22:22:19.000 -"Crash Bandicoot 4: It's About Time",010073401175E000,status-playable;nvdec;UE4,playable,2024-03-17 07:13:45.000 -"Crash Bandicoot N. Sane Trilogy",0100D1B006744000,status-playable,playable,2024-02-11 11:38:14.000 -"Crash Drive 2",,online;status-playable,playable,2020-12-17 02:45:46.000 -"Crash Dummy",,nvdec;status-playable,playable,2020-05-23 11:12:43.000 -"Crash Team Racing Nitro-Fueled",0100F9F00C696000,gpu;status-ingame;nvdec;online-broken,ingame,2023-06-25 02:40:17.000 -"Crashbots",0100BF200CD74000,status-playable,playable,2022-07-22 13:50:52.000 -"Crashlands",010027100BD16000,status-playable,playable,2021-05-27 20:30:06.000 -"Crawl",,status-playable,playable,2020-05-22 10:16:05.000 -"Crayola Scoot",0100C66007E96000,status-playable;nvdec,playable,2022-07-22 14:01:55.000 -"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",01005BA00F486000,status-playable,playable,2021-07-21 10:41:33.000 -"Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!",,services;status-menus,menus,2020-03-20 14:00:57.000 -"Crazy Strike Bowling EX",,UE4;gpu;nvdec;status-ingame,ingame,2020-08-07 18:15:59.000 -"Crazy Zen Mini Golf",,status-playable,playable,2020-08-05 14:00:00.000 -"Creaks",,status-playable,playable,2020-08-15 12:20:52.000 -"Creature in the Well",,UE4;gpu;status-ingame,ingame,2020-11-16 12:52:40.000 -"Creepy Tale",,status-playable,playable,2020-12-15 21:58:03.000 -"Cresteaju",,gpu;status-ingame,ingame,2021-03-24 10:46:06.000 -"Cricket 19",010022D00D4F0000,gpu;status-ingame,ingame,2021-06-14 14:56:07.000 -"Cricket 22",0100387017100000,status-boots;crash,boots,2023-10-18 08:01:57.000 -"Crimsonland",01005640080B0000,status-playable,playable,2021-05-27 20:50:54.000 -"Cris Tales",0100B0400EBC4000,crash;status-ingame,ingame,2021-07-29 15:10:53.000 -"CRISIS CORE –FINAL FANTASY VII– REUNION",01004BC0166CC000,status-playable,playable,2022-12-19 15:53:59.000 -"Croc's World",,status-playable,playable,2020-05-22 11:21:09.000 -"Croc's World 2",,status-playable,playable,2020-12-16 20:01:40.000 -"Croc's World 3",,status-playable,playable,2020-12-30 18:53:26.000 -"Croixleur Sigma",01000F0007D92000,status-playable;online,playable,2022-07-22 14:26:54.000 -"CrossCode",01003D90058FC000,status-playable,playable,2024-02-17 10:23:19.000 -"Crossing Souls",0100B1E00AA56000,nvdec;status-playable,playable,2021-02-20 15:42:54.000 -"Crown Trick",0100059012BAE000,status-playable,playable,2021-06-16 19:36:29.000 -"Cruis'n Blast",0100B41013C82000,gpu;status-ingame,ingame,2023-07-30 10:33:47.000 -"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",01000CC01C108000,status-playable;demo,playable,2023-08-06 05:33:21.000 -"Crypt of the Necrodancer",0100CEA007D08000,status-playable;nvdec,playable,2022-11-01 09:52:06.000 -"Crysis 2 Remastered",0100582010AE0000,deadlock;status-menus,menus,2023-09-21 10:46:17.000 -"Crysis 3 Remastered",0100CD3010AE2000,deadlock;status-menus,menus,2023-09-10 16:03:50.000 -"Crysis Remastered",0100E66010ADE000,status-menus;nvdec,menus,2024-08-13 05:23:24.000 -"Crystal Crisis",0100972008234000,nvdec;status-playable,playable,2021-02-20 13:52:44.000 -"Cthulhu Saves Christmas",,status-playable,playable,2020-12-14 00:58:55.000 -"Cube Creator X",010001600D1E8000,status-menus;crash,menus,2021-11-25 08:53:28.000 -"Cubers: Arena",010082E00F1CE000,status-playable;nvdec;UE4,playable,2022-10-04 16:05:40.000 -"Cubicity",010040D011D04000,status-playable,playable,2021-06-14 14:19:51.000 -"Cuphead",0100A5C00D162000,status-playable,playable,2022-02-01 22:45:55.000 -"Cupid Parasite",0100F7E00DFC8000,gpu;status-ingame,ingame,2023-08-21 05:52:36.000 -"Curious Cases",,status-playable,playable,2020-08-10 09:30:48.000 -"Curse of the Dead Gods",0100D4A0118EA000,status-playable,playable,2022-08-30 12:25:38.000 -"Curved Space",0100CE5014026000,status-playable,playable,2023-01-14 22:03:50.000 -"Cyber Protocol",,nvdec;status-playable,playable,2020-09-28 14:47:40.000 -"Cyber Shadow",0100C1F0141AA000,status-playable,playable,2022-07-17 05:37:41.000 -"Cybxus Heart",01006B9013672000,gpu;slow;status-ingame,ingame,2022-01-15 05:00:49.000 -"Cytus α",010063100B2C2000,nvdec;status-playable,playable,2021-02-20 13:40:46.000 -"DAEMON X MACHINA",0100B6400CA56000,UE4;audout;ldn-untested;nvdec;status-playable,playable,2021-06-09 19:22:29.000 -"Dairoku: Ayakashimori",010061300DF48000,status-nothing;Needs Update;loader-allocator,nothing,2021-11-30 05:09:38.000 -"Damsel",0100BD2009A1C000,status-playable,playable,2022-09-06 11:54:39.000 -"Dandara",,status-playable,playable,2020-05-26 12:42:33.000 -"Dandy Dungeon: Legend of Brave Yamada",,status-playable,playable,2021-01-06 09:48:47.000 -"Danger Mouse",01003ED0099B0000,status-boots;crash;online,boots,2022-07-22 15:49:45.000 -"Danger Scavenger -",,nvdec;status-playable,playable,2021-04-17 15:53:04.000 -"Danmaku Unlimited 3",,status-playable,playable,2020-11-15 00:48:35.000 -"Darius Cozmic Collection",,status-playable,playable,2021-02-19 20:59:06.000 -"Darius Cozmic Collection Special Edition",010059C00BED4000,status-playable,playable,2022-07-22 16:26:50.000 -"Dariusburst - Another Chronicle EX+",010015800F93C000,online;status-playable,playable,2021-04-05 14:21:43.000 -"Dark Arcana: The Carnival",01003D301357A000,gpu;slow;status-ingame,ingame,2022-02-19 08:52:28.000 -"Dark Devotion",010083A00BF6C000,status-playable;nvdec,playable,2022-08-09 09:41:18.000 -"Dark Quest 2",,status-playable,playable,2020-11-16 21:34:52.000 -"DARK SOULS™: REMASTERED",01004AB00A260000,gpu;status-ingame;nvdec;online-broken,ingame,2024-04-09 19:47:58.000 -"Dark Witch Music Episode: Rudymical",,status-playable,playable,2020-05-22 09:44:44.000 -"Darkest Dungeon",01008F1008DA6000,status-playable;nvdec,playable,2022-07-22 18:49:18.000 -"Darksiders Genesis",0100F2300D4BA000,status-playable;nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25.000 -"Darksiders II Deathinitive Edition",010071800BA98000,gpu;status-ingame;nvdec;online-broken,ingame,2024-06-26 00:37:25.000 -"Darksiders Warmastered Edition",0100E1400BA96000,status-playable;nvdec,playable,2023-03-02 18:08:09.000 -"Darkwood",,status-playable,playable,2021-01-08 21:24:06.000 -"DARQ Complete Edition",0100440012FFA000,audout;status-playable,playable,2021-04-07 15:26:21.000 -"Darts Up",0100BA500B660000,status-playable,playable,2021-04-14 17:22:22.000 -"Dawn of the Breakers",0100F0B0081DA000,status-menus;online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03.000 -"Day and Night",,status-playable,playable,2020-12-17 12:30:51.000 -"De Blob",,nvdec;status-playable,playable,2021-01-06 17:34:46.000 -"de Blob 2",,nvdec;status-playable,playable,2021-01-06 13:00:16.000 -"De Mambo",01008E900471E000,status-playable,playable,2021-04-10 12:39:40.000 -"Dead by Daylight",01004C400CF96000,status-boots;nvdec;online-broken;UE4,boots,2022-09-13 14:32:13.000 -"Dead Cells",0100646009FBE000,status-playable,playable,2021-09-22 22:18:49.000 -"Dead End Job",01004C500BD40000,status-playable;nvdec,playable,2022-09-19 12:48:44.000 -"DEAD OR ALIVE Xtreme 3 Scarlet",01009CC00C97C000,status-playable,playable,2022-07-23 17:05:06.000 -"DEAD OR SCHOOL",0100A5000F7AA000,status-playable;nvdec,playable,2022-09-06 12:04:09.000 -"Dead Z Meat",0100A24011F52000,UE4;services;status-ingame,ingame,2021-04-14 16:50:16.000 -"Deadly Days",,status-playable,playable,2020-11-27 13:38:55.000 -"Deadly Premonition 2",0100BAC011928000,status-playable,playable,2021-06-15 14:12:36.000 -"DEADLY PREMONITION Origins",0100EBE00F22E000,32-bit;status-playable;nvdec,playable,2024-03-25 12:47:46.000 -"Dear Magi - Mahou Shounen Gakka -",,status-playable,playable,2020-11-22 16:45:16.000 -"Death and Taxes",,status-playable,playable,2020-12-15 20:27:49.000 -"Death Come True",010012B011AB2000,nvdec;status-playable,playable,2021-06-10 22:30:49.000 -"Death Coming",0100F3B00CF32000,status-nothing;crash,nothing,2022-02-06 07:43:03.000 -"Death end re;Quest",0100AEC013DDA000,status-playable,playable,2023-07-09 12:19:54.000 -"Death Mark",,status-playable,playable,2020-12-13 10:56:25.000 -"Death Road to Canada",0100423009358000,gpu;audio;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:26.000 -"Death Squared",,status-playable,playable,2020-12-04 13:00:15.000 -"Death Tales",,status-playable,playable,2020-12-17 10:55:52.000 -"Death's Hangover",0100492011A8A000,gpu;status-boots,boots,2023-08-01 22:38:06.000 -"Deathsmiles I・II",01009120119B4000,status-playable,playable,2024-04-08 19:29:00.000 -"Debris Infinity",010034F00BFC8000,nvdec;online;status-playable,playable,2021-05-28 12:14:39.000 -"Decay of Logos",010027700FD2E000,status-playable;nvdec,playable,2022-09-13 14:42:13.000 -"Deedlit in Wonder Labyrinth",0100EF0015A9A000,deadlock;status-ingame;Needs Update;Incomplete,ingame,2022-01-19 10:00:59.000 -"Deemo",01002CC0062B8000,status-playable,playable,2022-07-24 11:34:33.000 -"DEEMO -Reborn-",01008B10132A2000,status-playable;nvdec;online-broken,playable,2022-10-17 15:18:11.000 -"Deep Diving Adventures",010026800FA88000,status-playable,playable,2022-09-22 16:43:37.000 -"Deep Ones",,services;status-nothing,nothing,2020-04-03 02:54:19.000 -"Deep Sky Derelicts Definitive Edition",0100C3E00D68E000,status-playable,playable,2022-09-27 11:21:08.000 -"Deep Space Rush",,status-playable,playable,2020-07-07 23:30:33.000 -"DeepOne",0100961011BE6000,services-horizon;status-nothing;Needs Update,nothing,2024-01-18 15:01:05.000 -"Defenders of Ekron - Definitive Edition",01008BB00F824000,status-playable,playable,2021-06-11 16:31:03.000 -"Defentron",0100CDE0136E6000,status-playable,playable,2022-10-17 15:47:56.000 -"Defunct",,status-playable,playable,2021-01-08 21:33:46.000 -"Degrees of Separation",,status-playable,playable,2021-01-10 13:40:04.000 -"Dei Gratia no Rashinban",010071C00CBA4000,crash;status-nothing,nothing,2021-07-13 02:25:32.000 -"Deleveled",,slow;status-playable,playable,2020-12-15 21:02:29.000 -"DELTARUNE Chapter 1",010023800D64A000,status-playable,playable,2023-01-22 04:47:44.000 -"Dementium: The Ward (Dementium Remastered)",010038B01D2CA000,status-boots;crash,boots,2024-09-02 08:28:14.000 -"Demetrios - The BIG Cynical Adventure",0100AB600ACB4000,status-playable,playable,2021-06-04 12:01:01.000 -"Demolish & Build",010099D00D1A4000,status-playable,playable,2021-06-13 15:27:26.000 -"Demon Pit",010084600F51C000,status-playable;nvdec,playable,2022-09-19 13:35:15.000 -"Demon's Crystals",0100A2B00BD88000,status-nothing;crash;regression,nothing,2022-12-07 16:33:17.000 -"Demon's Rise",,status-playable,playable,2020-07-29 12:26:27.000 -"Demon's Rise - Lords of Chaos",0100E29013818000,status-playable,playable,2021-04-06 16:20:06.000 -"Demon's Tier+",0100161011458000,status-playable,playable,2021-06-09 17:25:36.000 -"DEMON'S TILT",0100BE800E6D8000,status-playable,playable,2022-09-19 13:22:46.000 -"Demong Hunter",,status-playable,playable,2020-12-12 15:27:08.000 -"Densha de go!! Hashirou Yamanote Sen",0100BC501355A000,status-playable;nvdec;UE4,playable,2023-11-09 07:47:58.000 -"Depixtion",,status-playable,playable,2020-10-10 18:52:37.000 -"Deployment",01000BF00B6BC000,slow;status-playable;online-broken,playable,2022-10-17 16:23:59.000 -"Deponia",010023600C704000,nvdec;status-playable,playable,2021-01-26 17:17:19.000 -"DERU - The Art of Cooperation",,status-playable,playable,2021-01-07 16:59:59.000 -"Descenders",,gpu;status-ingame,ingame,2020-12-10 15:22:36.000 -"Desire remaster ver.",,crash;status-boots,boots,2021-01-17 02:34:37.000 -"DESTINY CONNECT",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 12:20:36.000 -"Destrobots",01008BB011ED6000,status-playable,playable,2021-03-06 14:37:05.000 -"Destroy All Humans!",01009E701356A000,gpu;status-ingame;nvdec;UE4,ingame,2023-01-14 22:23:53.000 -"Detective Dolittle",010030600E65A000,status-playable,playable,2021-03-02 14:03:59.000 -"Detective Gallo",01009C0009842000,status-playable;nvdec,playable,2022-07-24 11:51:04.000 -"Detective Jinguji Saburo Prism of Eyes",,status-playable,playable,2020-10-02 21:54:41.000 -"Detective Pikachu Returns",010007500F27C000,status-playable,playable,2023-10-07 10:24:59.000 -"Devil Engine",010031B00CF66000,status-playable,playable,2021-06-04 11:54:30.000 -"Devil Kingdom",01002F000E8F2000,status-playable,playable,2023-01-31 08:58:44.000 -"Devil May Cry",,nvdec;status-playable,playable,2021-01-04 19:43:08.000 -"Devil May Cry 2",01007CF00D5BA000,status-playable;nvdec,playable,2023-01-24 23:03:20.000 -"Devil May Cry 3 Special Edition",01007B600D5BC000,status-playable;nvdec,playable,2024-07-08 12:33:23.000 -"Devil Slayer - Raksasi",01003C900EFF6000,status-playable,playable,2022-10-26 19:42:32.000 -"Devious Dungeon",01009EA00A320000,status-playable,playable,2021-03-04 13:03:06.000 -"Dex",,nvdec;status-playable,playable,2020-08-12 16:48:12.000 -"Dexteritrip",,status-playable,playable,2021-01-06 12:51:12.000 -"Dezatopia",0100AFC00E06A000,online;status-playable,playable,2021-06-15 21:06:11.000 -"Diablo 2 Resurrected",0100726014352000,gpu;status-ingame;nvdec,ingame,2023-08-18 18:42:47.000 -"Diablo III: Eternal Collection",01001B300B9BE000,status-playable;online-broken;ldn-works,playable,2023-08-21 23:48:03.000 -"Diabolic",0100F73011456000,status-playable,playable,2021-06-11 14:45:08.000 -"DIABOLIK LOVERS CHAOS LINEAGE",010027400BD24000,gpu;status-ingame;Needs Update,ingame,2023-06-08 02:20:44.000 -"Dicey Dungeons",0100BBF011394000,gpu;audio;slow;status-ingame,ingame,2023-08-02 20:30:12.000 -"Die for Valhalla!",,status-playable,playable,2021-01-06 16:09:14.000 -"Dies irae Amantes amentes For Nintendo Switch",0100BB900B5B4000,status-nothing;32-bit;crash,nothing,2022-02-16 07:09:05.000 -"Dig Dog",0100A5A00DBB0000,gpu;status-ingame,ingame,2021-06-02 17:17:51.000 -"Digerati Presents: The Dungeon Crawl Vol. 1",010035D0121EC000,slow;status-ingame,ingame,2021-04-18 14:04:55.000 -"Digimon Story Cyber Sleuth: Complete Edition",010014E00DB56000,status-playable;nvdec;opengl,playable,2022-09-13 15:02:37.000 -"Digimon World: Next Order",0100F00014254000,status-playable,playable,2023-05-09 20:41:06.000 -"Ding Dong XL",,status-playable,playable,2020-07-14 16:13:19.000 -"Dininho Adventures",,status-playable,playable,2020-10-03 17:25:51.000 -"Dininho Space Adventure",010027E0158A6000,status-playable,playable,2023-01-14 22:43:04.000 -"Dirt Bike Insanity",0100A8A013DA4000,status-playable,playable,2021-01-31 13:27:38.000 -"Dirt Trackin Sprint Cars",01004CB01378A000,status-playable;nvdec;online-broken,playable,2022-10-17 16:34:56.000 -"Disagaea 6: Defiance of Destiny Demo",0100918014B02000,status-playable;demo,playable,2022-10-26 20:02:04.000 -"Disaster Report 4: Summer Memories",010020700E2A2000,status-playable;nvdec;UE4,playable,2022-09-27 19:41:31.000 -"Disc Jam",0100510004D2C000,UE4;ldn-untested;nvdec;online;status-playable,playable,2021-04-08 16:40:35.000 -"Disco Dodgeball Remix",,online;status-playable,playable,2020-09-28 23:24:49.000 -"Disgaea 1 Complete",01004B100AF18000,status-playable,playable,2023-01-30 21:45:23.000 -"Disgaea 4 Complete Plus",,gpu;slow;status-playable,playable,2020-02-18 10:54:28.000 -"Disgaea 4 Complete+ Demo",010068C00F324000,status-playable;nvdec,playable,2022-09-13 15:21:59.000 -"Disgaea 5 Complete",01005700031AE000,nvdec;status-playable,playable,2021-03-04 15:32:54.000 -"Disgaea 6: Defiance of Destiny",0100ABC013136000,deadlock;status-ingame,ingame,2023-04-15 00:50:32.000 -"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",0100307011D80000,status-playable,playable,2021-06-08 13:20:33.000 -"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",01005EE013888000,gpu;status-ingame;demo,ingame,2022-12-06 15:27:59.000 -"Disjunction",01000B70122A2000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24.000 -"Disney Classic Games: Aladdin and The Lion King",0100A2F00EEFC000,status-playable;online-broken,playable,2022-09-13 15:44:17.000 -"Disney Epic Mickey: Rebrushed",0100DA201EBF8000,status-ingame;crash,ingame,2024-09-26 22:11:51.000 -"Disney SpeedStorm",0100F0401435E000,services;status-boots,boots,2023-11-27 02:15:32.000 -"Disney Tsum Tsum Festival",,crash;status-menus,menus,2020-07-14 14:05:28.000 -"DISTRAINT 2",,status-playable,playable,2020-09-03 16:08:12.000 -"DISTRAINT: Deluxe Edition",,status-playable,playable,2020-06-15 23:42:24.000 -"Divinity Original Sin 2",010027400CDC6000,services;status-menus;crash;online-broken;regression,menus,2023-08-13 17:20:03.000 -"Dodo Peak",01001770115C8000,status-playable;nvdec;UE4,playable,2022-10-04 16:13:05.000 -"DoDonPachi Resurrection - 怒首領蜂大復活",01005A001489A000,status-ingame;32-bit;crash,ingame,2024-01-25 14:37:32.000 -"Dogurai",,status-playable,playable,2020-10-04 02:40:16.000 -"Dokapon Up! Mugen no Roulette",010048100D51A000,gpu;status-menus;Needs Update,menus,2022-12-08 19:39:10.000 -"Dokuro",,nvdec;status-playable,playable,2020-12-17 14:47:09.000 -"Don't Die Mr. Robot DX",010007200AC0E000,status-playable;nvdec,playable,2022-09-02 18:34:38.000 -"Don't Knock Twice",0100E470067A8000,status-playable,playable,2024-05-08 22:37:58.000 -"Don't Sink",0100C4D00B608000,gpu;status-ingame,ingame,2021-02-26 15:41:11.000 -"Don't Starve",0100751007ADA000,status-playable;nvdec,playable,2022-02-05 20:43:34.000 -"Dongo Adventure",010088B010DD2000,status-playable,playable,2022-10-04 16:22:26.000 -"Donkey Kong Country Tropical Freeze",0100C1F0051B6000,status-playable,playable,2024-08-05 16:46:10.000 -"Doodle Derby",,status-boots,boots,2020-12-04 22:51:48.000 -"DOOM",0100416004C00000,gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-09-23 15:40:07.000 -"DOOM (1993)",010018900DD00000,status-menus;nvdec;online-broken,menus,2022-09-06 13:32:19.000 -"DOOM + DOOM II",01008CB01E52E000,status-playable;opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01.000 -"DOOM 2",0100D4F00DD02000,nvdec;online;status-playable,playable,2021-06-03 20:10:01.000 -"DOOM 3",010029D00E740000,status-menus;crash,menus,2024-08-03 05:25:47.000 -"DOOM 64",,nvdec;status-playable;vulkan,playable,2020-10-13 23:47:28.000 -"DOOM Eternal",0100B1A00D8CE000,gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-08-28 15:57:17.000 -"Door Kickers: Action Squad",01005ED00CD70000,status-playable;online-broken;ldn-broken,playable,2022-09-13 16:28:53.000 -"DORAEMON STORY OF SEASONS",,nvdec;status-playable,playable,2020-07-13 20:28:11.000 -"Double Cross",,status-playable,playable,2021-01-07 15:34:22.000 -"Double Dragon & Kunio-Kun: Retro Brawler Bundle",,status-playable,playable,2020-09-01 12:48:46.000 -"DOUBLE DRAGON Ⅲ: The Sacred Stones",01001AD00E49A000,online;status-playable,playable,2021-06-11 15:41:44.000 -"Double Dragon Neon",01005B10132B2000,gpu;audio;status-ingame;32-bit,ingame,2022-09-20 18:00:20.000 -"Double Kick Heroes",,gpu;status-ingame,ingame,2020-10-03 14:33:59.000 -"Double Pug Switch",0100A5D00C7C0000,status-playable;nvdec,playable,2022-10-10 10:59:35.000 -"Double Switch - 25th Anniversary Edition",0100FC000EE10000,status-playable;nvdec,playable,2022-09-19 13:41:50.000 -"Down to Hell",0100B6600FE06000,gpu;status-ingame;nvdec,ingame,2022-09-19 14:01:26.000 -"Downwell",010093D00C726000,status-playable,playable,2021-04-25 20:05:24.000 -"Dr Kawashima's Brain Training",0100ED000D390000,services;status-ingame,ingame,2023-06-04 00:06:46.000 -"Dracula's Legacy",,nvdec;status-playable,playable,2020-12-10 13:24:25.000 -"DragoDino",,gpu;nvdec;status-ingame,ingame,2020-08-03 20:49:16.000 -"Dragon Audit",0100DBC00BD5A000,crash;status-ingame,ingame,2021-05-16 14:24:46.000 -"DRAGON BALL FighterZ",0100A250097F0000,UE4;ldn-broken;nvdec;online;status-playable,playable,2021-06-11 16:19:04.000 -"Dragon Ball Xenoverse 2",010078D000F88000,gpu;status-ingame;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01.000 -"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",010051C0134F8000,status-playable;vulkan-backend-bug,playable,2024-08-28 00:03:50.000 -"Dragon Marked for Death: Frontline Fighters (Empress & Warrior)",010089700150E000,status-playable;ldn-untested;audout,playable,2022-03-10 06:44:34.000 -"Dragon Quest",0100EFC00EFB2000,gpu;status-boots,boots,2021-11-09 03:31:32.000 -"Dragon Quest Builders",010008900705C000,gpu;status-ingame;nvdec,ingame,2023-08-14 09:54:36.000 -"Dragon Quest Builders 2",010042000A986000,status-playable,playable,2024-04-19 16:36:38.000 -"Dragon Quest Heroes I + II (JP)",0100CD3000BDC000,nvdec;status-playable,playable,2021-04-08 14:27:16.000 -"Dragon Quest II: Luminaries of the Legendary Line",010062200EFB4000,status-playable,playable,2022-09-13 16:44:11.000 -"Dragon Quest III HD-2D Remake",01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27.000 -"Dragon Quest III: The Seeds of Salvation",010015600EFB6000,gpu;status-boots,boots,2021-11-09 03:38:34.000 -"DRAGON QUEST MONSTERS: The Dark Prince",0100A77018EA0000,status-playable,playable,2023-12-29 16:10:05.000 -"Dragon Quest Treasures",0100217014266000,gpu;status-ingame;UE4,ingame,2023-05-09 11:16:52.000 -"Dragon Quest X Awakening Five Races Offline",0100E2E0152E4000,status-playable;nvdec;UE4,playable,2024-08-20 10:04:24.000 -"Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition",01006C300E9F0000,status-playable;UE4,playable,2021-11-27 12:27:11.000 -"Dragon's Dogma: Dark Arisen",010032C00AC58000,status-playable,playable,2022-07-24 12:58:33.000 -"Dragon's Lair Trilogy",,nvdec;status-playable,playable,2021-01-13 22:12:07.000 -"DragonBlaze for Nintendo Switch",,32-bit;status-playable,playable,2020-10-14 11:11:28.000 -"DragonFangZ",,status-playable,playable,2020-09-28 21:35:18.000 -"Dragons Dawn of New Riders",,nvdec;status-playable,playable,2021-01-27 20:05:26.000 -"Drawful 2",0100F7800A434000,status-ingame,ingame,2022-07-24 13:50:21.000 -"Drawngeon: Dungeons of Ink and Paper",0100B7E0102E4000,gpu;status-ingame,ingame,2022-09-19 15:41:25.000 -"Dream",,status-playable,playable,2020-12-15 19:55:07.000 -"Dream Alone - 0100AA0093DC000",,nvdec;status-playable,playable,2021-01-27 19:41:50.000 -"DreamBall",,UE4;crash;gpu;status-ingame,ingame,2020-08-05 14:45:25.000 -"Dreaming Canvas",010058B00F3C0000,UE4;gpu;status-ingame,ingame,2021-06-13 22:50:07.000 -"Dreamo",0100D24013466000,status-playable;UE4,playable,2022-10-17 18:25:28.000 -"DreamWorks Spirit Lucky's Big Adventure",0100236011B4C000,status-playable,playable,2022-10-27 13:30:52.000 -"Drone Fight",010058C00A916000,status-playable,playable,2022-07-24 14:31:56.000 -"Drowning",010052000A574000,status-playable,playable,2022-07-25 14:28:26.000 -"Drums",,status-playable,playable,2020-12-17 17:21:51.000 -"Duck Life Adventure",01005BC012C66000,status-playable,playable,2022-10-10 11:27:03.000 -"Duke Nukem 3D: 20th Anniversary World Tour",01007EF00CB88000,32-bit;status-playable;ldn-untested,playable,2022-08-19 22:22:40.000 -"Dull Grey",010068D0141F2000,status-playable,playable,2022-10-27 13:40:38.000 -"Dungeon Nightmares 1 + 2 Collection",0100926013600000,status-playable,playable,2022-10-17 18:54:22.000 -"Dungeon of the Endless",010034300F0E2000,nvdec;status-playable,playable,2021-05-27 19:16:26.000 -"Dungeon Stars",,status-playable,playable,2021-01-18 14:28:37.000 -"Dungeons & Bombs",,status-playable,playable,2021-04-06 12:46:22.000 -"Dunk Lords",0100EC30140B6000,status-playable,playable,2024-06-26 00:07:26.000 -"Dusk Diver",010011C00E636000,status-boots;crash;UE4,boots,2021-11-06 09:01:30.000 -"Dust: An Elysian Tail",0100B6E00A420000,status-playable,playable,2022-07-25 15:28:12.000 -"Dustoff Z",,status-playable,playable,2020-12-04 23:22:29.000 -"Dying Light: Platinum Edition",01008c8012920000,services-horizon;status-boots,boots,2024-03-11 10:43:32.000 -"Dyna Bomb",,status-playable,playable,2020-06-07 13:26:55.000 -"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",0100E9A00CB30000,status-playable;nvdec,playable,2024-06-26 00:16:30.000 -"DYSMANTLE",010008900BC5A000,gpu;status-ingame,ingame,2024-07-15 16:24:12.000 -"EA Sports FC 24",0100BDB01A0E6000,status-boots,boots,2023-10-04 18:32:59.000 -"EA SPORTS FC 25",010054E01D878000,status-ingame;crash,ingame,2024-09-25 21:07:50.000 -"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",01001C8016B4E000,gpu;status-ingame;crash,ingame,2024-06-10 23:33:05.000 -"Eagle Island",010037400C7DA000,status-playable,playable,2021-04-10 13:15:42.000 -"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",0100B9E012992000,status-playable;UE4,playable,2022-12-07 12:59:16.000 -"Earth Defense Force: World Brothers",0100298014030000,status-playable;UE4,playable,2022-10-27 14:13:31.000 -"EARTH WARS",01009B7006C88000,status-playable,playable,2021-06-05 11:18:33.000 -"Earthfall: Alien Horde",0100DFC00E472000,status-playable;nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37.000 -"Earthlock",01006E50042EA000,status-playable,playable,2021-06-05 11:51:02.000 -"EarthNight",0100A2E00BB0C000,status-playable,playable,2022-09-19 21:02:20.000 -"Earthworms",0100DCE00B756000,status-playable,playable,2022-07-25 16:28:55.000 -"Earthworms Demo",,status-playable,playable,2021-01-05 16:57:11.000 -"Easy Come Easy Golf",0100ECF01800C000,status-playable;online-broken;regression,playable,2024-04-04 16:15:00.000 -"EAT BEAT DEADSPIKE-san",0100A9B009678000,audio;status-playable;Needs Update,playable,2022-12-02 19:25:29.000 -"eBaseball Powerful Pro Yakyuu 2022",0100BCA016636000,gpu;services-horizon;status-nothing;crash,nothing,2024-05-26 23:07:19.000 -"Eclipse: Edge of Light",,status-playable,playable,2020-08-11 23:06:29.000 -"eCrossminton",,status-playable,playable,2020-07-11 18:24:27.000 -"Edna & Harvey: Harvey's New Eyes",0100ABE00DB4E000,nvdec;status-playable,playable,2021-01-26 14:36:08.000 -"Edna & Harvey: The Breakout - Anniversary Edition",01004F000B716000,status-ingame;crash;nvdec,ingame,2022-08-01 16:59:56.000 -"Effie",01002550129F0000,status-playable,playable,2022-10-27 14:36:39.000 -"Ego Protocol",,nvdec;status-playable,playable,2020-12-16 20:16:35.000 -"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",,status-playable,playable,2020-11-12 00:11:50.000 -"Eight Dragons",01003AD013BD2000,status-playable;nvdec,playable,2022-10-27 14:47:28.000 -"El Hijo - A Wild West Tale",010020A01209C000,nvdec;status-playable,playable,2021-04-19 17:44:08.000 -"Elden: Path of the Forgotten",,status-playable,playable,2020-12-15 00:33:19.000 -"ELEA: Paradigm Shift",,UE4;crash;status-nothing,nothing,2020-10-04 19:07:43.000 -"Element",0100A6700AF10000,status-playable,playable,2022-07-25 17:17:16.000 -"Elliot Quest",0100128003A24000,status-playable,playable,2022-07-25 17:46:14.000 -"Elrador Creatures",,slow;status-playable,playable,2020-12-12 12:35:35.000 -"Ember",010041A00FEC6000,status-playable;nvdec,playable,2022-09-19 21:16:11.000 -"Embracelet",,status-playable,playable,2020-12-04 23:45:00.000 -"Emma: Lost in Memories",010017b0102a8000,nvdec;status-playable,playable,2021-01-28 16:19:10.000 -"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo",010068300E08E000,gpu;status-ingame;nvdec,ingame,2022-11-20 16:18:45.000 -"Enchanting Mahjong Match",,gpu;status-ingame,ingame,2020-04-17 22:01:31.000 -"Endless Fables: Dark Moor",01004F3011F92000,gpu;nvdec;status-ingame,ingame,2021-03-07 15:31:03.000 -"Endless Ocean Luminous",010067B017588000,services-horizon;status-ingame;crash,ingame,2024-05-30 02:05:57.000 -"Energy Cycle Edge",0100B8700BD14000,services;status-ingame,ingame,2021-11-30 05:02:31.000 -"Energy Invasion",,status-playable,playable,2021-01-14 21:32:26.000 -"Enigmatis 2: The Mists of Ravenwood",0100C6200A0AA000,crash;regression;status-boots,boots,2021-06-06 15:15:30.000 -"Enter the Gungeon",01009D60076F6000,status-playable,playable,2022-07-25 20:28:33.000 -"Epic Loon",0100262009626000,status-playable;nvdec,playable,2022-07-25 22:06:13.000 -"EQI",01000FA0149B6000,status-playable;nvdec;UE4,playable,2022-10-27 16:42:32.000 -"EQQO",0100E95010058000,UE4;nvdec;status-playable,playable,2021-06-13 23:10:51.000 -"Escape First",,status-playable,playable,2020-10-20 22:46:53.000 -"Escape First 2",010021201296A000,status-playable,playable,2021-03-24 11:59:41.000 -"Escape from Chernobyl",0100FEF00F0AA000,status-boots;crash,boots,2022-09-19 21:36:58.000 -"Escape from Life Inc",010023E013244000,status-playable,playable,2021-04-19 17:34:09.000 -"Escape from Tethys",,status-playable,playable,2020-10-14 22:38:25.000 -"Escape Game Fort Boyard",,status-playable,playable,2020-07-12 12:45:43.000 -"ESP Ra.De. Psi",0100F9600E746000,audio;slow;status-ingame,ingame,2024-03-07 15:05:08.000 -"Esports powerful pro yakyuu 2020",010073000FE18000,gpu;status-ingame;crash;Needs More Attention,ingame,2024-04-29 05:34:14.000 -"Estranged: The Departure",01004F9012FD8000,status-playable;nvdec;UE4,playable,2022-10-24 10:37:58.000 -"Eternum Ex",,status-playable,playable,2021-01-13 20:28:32.000 -"Europa (Demo)",010092501EB2C000,gpu;status-ingame;crash;UE4,ingame,2024-04-23 10:47:12.000 -"EVE ghost enemies",01007BE0160D6000,gpu;status-ingame,ingame,2023-01-14 03:13:30.000 -"even if TEMPEST",010095E01581C000,gpu;status-ingame,ingame,2023-06-22 23:50:25.000 -"Event Horizon: Space Defense",,status-playable,playable,2020-07-31 20:31:24.000 -"EVERSPACE",0100DCF0093EC000,status-playable;UE4,playable,2022-08-14 01:16:24.000 -"Everybody 1-2-Switch!",01006F900BF8E000,services;deadlock;status-nothing,nothing,2023-07-01 05:52:55.000 -"Evil Defenders",,nvdec;status-playable,playable,2020-09-28 17:11:00.000 -"Evolution Board Game",01006A800FA22000,online;status-playable,playable,2021-01-20 22:37:56.000 -"Exception",0100F2D00C7DE000,status-playable;online-broken,playable,2022-09-20 12:47:10.000 -"Exit the Gungeon",0100DD30110CC000,status-playable,playable,2022-09-22 17:04:43.000 -"Exodemon",0100A82013976000,status-playable,playable,2022-10-27 20:17:52.000 -"Exorder",0100FA800A1F4000,nvdec;status-playable,playable,2021-04-15 14:17:20.000 -"Explosive Jake",01009B7010B42000,status-boots;crash,boots,2021-11-03 07:48:32.000 -"Eyes: The Horror Game",0100EFE00A3C2000,status-playable,playable,2021-01-20 21:59:46.000 -"Fable of Fairy Stones",0100E3D0103CE000,status-playable,playable,2021-05-05 21:04:54.000 -"Factorio",01004200189F4000,deadlock;status-boots,boots,2024-06-11 19:26:16.000 -"Fae Farm",010073F0189B6000,status-playable,playable,2024-08-25 15:12:12.000 -"Faeria",010069100DB08000,status-menus;nvdec;online-broken,menus,2022-10-04 16:44:41.000 -"Fairune Collection",01008A6009758000,status-playable,playable,2021-06-06 15:29:56.000 -"Fairy Fencer F™: Advent Dark Force",0100F6D00B8F2000,status-ingame;32-bit;crash;nvdec,ingame,2023-04-16 03:53:48.000 -"Fairy Tail",0100CF900FA3E000,status-playable;nvdec,playable,2022-10-04 23:00:32.000 -"Fall Of Light - Darkest Edition",01005A600BE60000,slow;status-ingame;nvdec,ingame,2024-07-24 04:19:26.000 -"Fallen Legion Revenants",0100AA801258C000,status-menus;crash,menus,2021-11-25 08:53:20.000 -"Famicom Detective Club: The Girl Who Stands Behind",0100D670126F6000,status-playable;nvdec,playable,2022-10-27 20:41:40.000 -"Famicom Detective Club: The Missing Heir",010033F0126F4000,status-playable;nvdec,playable,2022-10-27 20:56:23.000 -"Family Feud 2021",010060200FC44000,status-playable;online-broken,playable,2022-10-10 11:42:21.000 -"Family Mysteries: Poisonous Promises",0100034012606000,audio;status-menus;crash,menus,2021-11-26 12:35:06.000 -"Fantasy Friends",010017C012726000,status-playable,playable,2022-10-17 19:42:39.000 -"Fantasy Hero Unsigned Legacy",0100767008502000,status-playable,playable,2022-07-26 12:28:52.000 -"Fantasy Strike",0100944003820000,online;status-playable,playable,2021-02-27 01:59:18.000 -"Fantasy Tavern Sextet -Vol.1 New World Days-",01000E2012F6E000,gpu;status-ingame;crash;Needs Update,ingame,2022-12-05 16:48:00.000 -"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",,gpu;slow;status-ingame;crash,ingame,2021-11-06 02:57:29.000 -"FAR: Lone Sails",010022700E7D6000,status-playable,playable,2022-09-06 16:33:05.000 -"Farabel",,status-playable,playable,2020-08-03 17:47:28.000 -"Farm Expert 2019 for Nintendo Switch",,status-playable,playable,2020-07-09 21:42:57.000 -"Farm Mystery",01000E400ED98000,status-playable;nvdec,playable,2022-09-06 16:46:47.000 -"Farm Together",,status-playable,playable,2021-01-19 20:01:19.000 -"Farming Simulator 20",0100EB600E914000,nvdec;status-playable,playable,2021-06-13 10:52:44.000 -"Farming Simulator Nintendo Switch Edition",,nvdec;status-playable,playable,2021-01-19 14:46:44.000 -"Fashion Dreamer",0100E99019B3A000,status-playable,playable,2023-11-12 06:42:52.000 -"Fast RMX",01009510001CA000,slow;status-ingame;crash;ldn-partial,ingame,2024-06-22 20:48:58.000 -"Fatal Frame: Maiden of Black Water",0100BEB015604000,status-playable,playable,2023-07-05 16:01:40.000 -"Fatal Frame: Mask of the Lunar Eclipse",0100DAE019110000,status-playable;Incomplete,playable,2024-04-11 06:01:30.000 -"Fate/EXTELLA",010053E002EA2000,gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55.000 -"Fate/EXTELLA LINK",010051400B17A000,ldn-untested;nvdec;status-playable,playable,2021-01-27 00:45:50.000 -"fault - milestone one",,nvdec;status-playable,playable,2021-03-24 10:41:49.000 -"Fear Effect Sedna",,nvdec;status-playable,playable,2021-01-19 13:10:33.000 -"Fearmonium",0100F5501CE12000,status-boots;crash,boots,2024-03-06 11:26:11.000 -"Feather",0100E4300CB3E000,status-playable,playable,2021-06-03 14:11:27.000 -"Felix the Reaper",,nvdec;status-playable,playable,2020-10-20 23:43:03.000 -"Feudal Alloy",,status-playable,playable,2021-01-14 08:48:14.000 -"FEZ",01008D900B984000,gpu;status-ingame,ingame,2021-04-18 17:10:16.000 -"FIA European Truck Racing Championship",01007510040E8000,status-playable;nvdec,playable,2022-09-06 17:51:59.000 -"FIFA 18",0100F7B002340000,gpu;status-ingame;online-broken;ldn-untested,ingame,2022-07-26 12:43:59.000 -"FIFA 19",0100FFA0093E8000,gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07.000 -"FIFA 20 Legacy Edition",01005DE00D05C000,gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20.000 -"FIFA 21 Legacy Edition",01000A001171A000,gpu;status-ingame;online-broken,ingame,2023-12-11 22:10:19.000 -"FIFA 22 Legacy Edition",0100216014472000,gpu;status-ingame,ingame,2024-03-02 14:13:48.000 -"Fight Crab",01006980127F0000,status-playable;online-broken;ldn-untested,playable,2022-10-05 10:24:04.000 -"Fight of Animals",,online;status-playable,playable,2020-10-15 15:08:28.000 -"Fight'N Rage",,status-playable,playable,2020-06-16 23:35:19.000 -"Fighting EX Layer Another Dash",0100D02014048000,status-playable;online-broken;UE4,playable,2024-04-07 10:22:33.000 -"Figment",0100118009C68000,nvdec;status-playable,playable,2021-01-27 19:36:05.000 -"Fill-a-Pix: Phil's Epic Adventure",,status-playable,playable,2020-12-22 13:48:22.000 -"Fimbul",0100C3A00BB76000,status-playable;nvdec,playable,2022-07-26 13:31:47.000 -"Fin and the Ancient Mystery",,nvdec;status-playable,playable,2020-12-17 16:40:39.000 -"FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition",0100CE4010AAC000,status-playable,playable,2023-04-02 23:39:12.000 -"FINAL FANTASY I",01000EA014150000,status-nothing;crash,nothing,2024-09-05 20:55:30.000 -"FINAL FANTASY II",01006B7014156000,status-nothing;crash,nothing,2024-04-13 19:18:04.000 -"FINAL FANTASY IX",01006F000B056000,audout;nvdec;status-playable,playable,2021-06-05 11:35:00.000 -"FINAL FANTASY V",0100AA201415C000,status-playable,playable,2023-04-26 01:11:55.000 -"Final Fantasy VII",0100A5B00BDC6000,status-playable,playable,2022-12-09 17:03:30.000 -"FINAL FANTASY VIII REMASTERED",01008B900DC0A000,status-playable;nvdec,playable,2023-02-15 10:57:48.000 -"FINAL FANTASY X/X-2 HD REMASTER",0100BC300CB48000,gpu;status-ingame,ingame,2022-08-16 20:29:26.000 -"FINAL FANTASY XII THE ZODIAC AGE",0100EB100AB42000,status-playable;opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54.000 -"FINAL FANTASY XV POCKET EDITION HD",,status-playable,playable,2021-01-05 17:52:08.000 -"Final Light, The Prison",,status-playable,playable,2020-07-31 21:48:44.000 -"Finding Teddy 2 : Definitive Edition",0100FF100FB68000,gpu;status-ingame,ingame,2024-04-19 16:51:33.000 -"Fire & Water",,status-playable,playable,2020-12-15 15:43:20.000 -"Fire Emblem Warriors",0100F15003E64000,status-playable;nvdec,playable,2023-05-10 01:53:10.000 -"Fire Emblem Warriors: Three Hopes",010071F0143EA000,gpu;status-ingame;nvdec,ingame,2024-05-01 07:07:42.000 -"Fire Emblem: Engage",0100A6301214E000,status-playable;amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26.000 -"Fire Emblem: Shadow Dragon and the Blade of Light",0100A12011CC8000,status-playable,playable,2022-10-17 19:49:14.000 -"Fire Emblem: Three Houses",010055D009F78000,status-playable;online-broken,playable,2024-09-14 23:53:50.000 -"Fire: Ungh's Quest",010025C014798000,status-playable;nvdec,playable,2022-10-27 21:41:26.000 -"Firefighters - The Simulation",0100434003C58000,status-playable,playable,2021-02-19 13:32:05.000 -"Firefighters: Airport Fire Department",,status-playable,playable,2021-02-15 19:17:00.000 -"Firewatch",0100AC300919A000,status-playable,playable,2021-06-03 10:56:38.000 -"Firework",,status-playable,playable,2020-12-04 20:20:09.000 -"Fishing Star World Tour",0100DEB00ACE2000,status-playable,playable,2022-09-13 19:08:51.000 -"Fishing Universe Simulator",010069800D292000,status-playable,playable,2021-04-15 14:00:43.000 -"Fit Boxing",0100807008868000,status-playable,playable,2022-07-26 19:24:55.000 -"Fitness Boxing",,services;status-ingame,ingame,2020-05-17 14:00:48.000 -"Fitness Boxing",0100E7300AAD4000,status-playable,playable,2021-04-14 20:33:33.000 -"Fitness Boxing 2: Rhythm & Exercise",0100073011382000,crash;status-ingame,ingame,2021-04-14 20:40:48.000 -"Five Dates",,nvdec;status-playable,playable,2020-12-11 15:17:11.000 -"Five Nights at Freddy's",0100B6200D8D2000,status-playable,playable,2022-09-13 19:26:36.000 -"Five Nights at Freddy's 2",01004EB00E43A000,status-playable,playable,2023-02-08 15:48:24.000 -"Five Nights at Freddy's 3",010056100E43C000,status-playable,playable,2022-09-13 20:58:07.000 -"Five Nights at Freddy's 4",010083800E43E000,status-playable,playable,2023-08-19 07:28:03.000 -"Five Nights at Freddy's: Help Wanted",0100F7901118C000,status-playable;UE4,playable,2022-09-29 12:40:09.000 -"Five Nights at Freddy's: Sister Location",01003B200E440000,status-playable,playable,2023-10-06 09:00:58.000 -"Five Nights At Freddy’s Security Breach",01009060193C4000,gpu;status-ingame;crash;mac-bug,ingame,2023-04-23 22:33:28.000 -"Flan",010038200E088000,status-ingame;crash;regression,ingame,2021-11-17 07:39:28.000 -"Flashback",,nvdec;status-playable,playable,2020-05-14 13:57:29.000 -"Flat Heroes",0100C53004C52000,gpu;status-ingame,ingame,2022-07-26 19:37:37.000 -"Flatland: Prologue",,status-playable,playable,2020-12-11 20:41:12.000 -"Flinthook",,online;status-playable,playable,2021-03-25 20:42:29.000 -"Flip Wars",010095A004040000,services;status-ingame;ldn-untested,ingame,2022-05-02 15:39:18.000 -"Flipping Death",01009FB002B2E000,status-playable,playable,2021-02-17 16:12:30.000 -"Flood of Light",,status-playable,playable,2020-05-15 14:15:25.000 -"Floor Kids",0100DF9005E7A000,status-playable;nvdec,playable,2024-08-18 19:38:49.000 -"Florence",,status-playable,playable,2020-09-05 01:22:30.000 -"Flowlines VS",,status-playable,playable,2020-12-17 17:01:53.000 -"Flux8",,nvdec;status-playable,playable,2020-06-19 20:55:11.000 -"Fly O'Clock VS",,status-playable,playable,2020-05-17 13:39:52.000 -"Fly Punch Boom!",,online;status-playable,playable,2020-06-21 12:06:11.000 -"Flying Hero X",0100419013A8A000,status-menus;crash,menus,2021-11-17 07:46:58.000 -"Fobia",,status-playable,playable,2020-12-14 21:05:23.000 -"Food Truck Tycoon",0100F3900D0F0000,status-playable,playable,2022-10-17 20:15:55.000 -"Football Manager 2021 Touch",01007CF013152000,gpu;status-ingame,ingame,2022-10-17 20:08:23.000 -"FOOTBALL MANAGER 2023 TOUCH",0100EDC01990E000,gpu;status-ingame,ingame,2023-08-01 03:40:53.000 -"Football Manager Touch 2018",010097F0099B4000,status-playable,playable,2022-07-26 20:17:56.000 -"For The King",010069400B6BE000,nvdec;status-playable,playable,2021-02-15 18:51:44.000 -"Forager",01001D200BCC4000,status-menus;crash,menus,2021-11-24 07:10:17.000 -"Foreclosed",0100AE001256E000,status-ingame;crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12.000 -"Foregone",,deadlock;status-ingame,ingame,2020-12-17 15:26:53.000 -"Forgotton Anne",010059E00B93C000,nvdec;status-playable,playable,2021-02-15 18:28:07.000 -"FORMA.8",,nvdec;status-playable,playable,2020-11-15 01:04:32.000 -"Fort Boyard",,nvdec;slow;status-playable,playable,2020-05-15 13:22:53.000 -"Fortnite",010025400AECE000,services-horizon;status-nothing,nothing,2024-04-06 18:23:25.000 -"Fossil Hunters",0100CA500756C000,status-playable;nvdec,playable,2022-07-27 11:37:20.000 -"FOX n FORESTS",01008A100A028000,status-playable,playable,2021-02-16 14:27:49.000 -"FoxyLand",,status-playable,playable,2020-07-29 20:55:20.000 -"FoxyLand 2",,status-playable,playable,2020-08-06 14:41:30.000 -"Fractured Minds",01004200099F2000,status-playable,playable,2022-09-13 21:21:40.000 -"FRAMED COLLECTION",0100F1A00A5DC000,status-playable;nvdec,playable,2022-07-27 11:48:15.000 -"Fred3ric",0100AC40108D8000,status-playable,playable,2021-04-15 13:30:31.000 -"Frederic 2",,status-playable,playable,2020-07-23 16:44:37.000 -"Frederic: Resurrection of Music",,nvdec;status-playable,playable,2020-07-23 16:59:53.000 -"Freedom Finger",010082B00EE50000,nvdec;status-playable,playable,2021-06-09 19:31:30.000 -"Freedom Planet",,status-playable,playable,2020-05-14 12:23:06.000 -"Friday the 13th: Killer Puzzle",010003F00BD48000,status-playable,playable,2021-01-28 01:33:38.000 -"Friday the 13th: The Game",010092A00C4B6000,status-playable;nvdec;online-broken;UE4,playable,2022-09-06 17:33:27.000 -"Front Mission 1st Remake",0100F200178F4000,status-playable,playable,2023-06-09 07:44:24.000 -"Frontline Zed",,status-playable,playable,2020-10-03 12:55:59.000 -"Frost",0100B5300B49A000,status-playable,playable,2022-07-27 12:00:36.000 -"Fruitfall Crush",,status-playable,playable,2020-10-20 11:33:33.000 -"FullBlast",,status-playable,playable,2020-05-19 10:34:13.000 -"FUN! FUN! Animal Park",010002F00CC20000,status-playable,playable,2021-04-14 17:08:52.000 -"FunBox Party",,status-playable,playable,2020-05-15 12:07:02.000 -"Funghi Puzzle Funghi Explosion",,status-playable,playable,2020-11-23 14:17:41.000 -"Funimation",01008E10130F8000,gpu;status-boots,boots,2021-04-08 13:08:17.000 -"Funny Bunny Adventures",,status-playable,playable,2020-08-05 13:46:56.000 -"Furi",01000EC00AF98000,status-playable,playable,2022-07-27 12:21:20.000 -"Furi Definitive Edition",01000EC00AF98000,status-playable,playable,2022-07-27 12:35:08.000 -"Furwind",0100A6B00D4EC000,status-playable,playable,2021-02-19 19:44:08.000 -"Fury Unleashed",,crash;services;status-ingame,ingame,2020-10-18 11:52:40.000 -"Fury Unleashed Demo",,status-playable,playable,2020-10-08 20:09:21.000 -"FUSER",0100E1F013674000,status-playable;nvdec;UE4,playable,2022-10-17 20:58:32.000 -"Fushigi no Gensokyo Lotus Labyrinth",,Needs Update;audio;gpu;nvdec;status-ingame,ingame,2021-01-20 15:30:02.000 -"Futari de! Nyanko Daisensou",01003C300B274000,status-playable,playable,2024-01-05 22:26:52.000 -"FUZE Player",010055801134E000,status-ingame;online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53.000 -"FUZE4",0100EAD007E98000,status-playable;vulkan-backend-bug,playable,2022-09-06 19:25:01.000 -"FuzzBall",010067600F1A0000,crash;status-nothing,nothing,2021-03-29 20:13:21.000 -"G-MODE Archives 06 The strongest ever Julia Miyamoto",,status-playable,playable,2020-10-15 13:06:26.000 -"G.I. Joe Operation Blackout",,UE4;crash;status-boots,boots,2020-11-21 12:37:44.000 -"Gal Metal - 01B8000C2EA000",,status-playable,playable,2022-07-27 20:57:48.000 -"Gal*Gun 2",010024700901A000,status-playable;nvdec;UE4,playable,2022-07-27 12:45:37.000 -"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",0100047013378000,status-playable;nvdec,playable,2022-10-17 23:50:46.000 -"GALAK-Z: Variant S",0100C9800A454000,status-boots;online-broken,boots,2022-07-29 11:59:12.000 -"Game Boy - Nintendo Switch Online",0100C62011050000,status-playable,playable,2023-03-21 12:43:48.000 -"Game Boy Advance - Nintendo Switch Online",010012F017576000,status-playable,playable,2023-02-16 20:38:15.000 -"Game Builder Garage",0100FA5010788000,status-ingame,ingame,2024-04-20 21:46:22.000 -"Game Dev Story",,status-playable,playable,2020-05-20 00:00:38.000 -"Game Doraemon Nobita no Shin Kyoryu",01006BD00F8C0000,gpu;status-ingame,ingame,2023-02-27 02:03:28.000 -"Garage",,status-playable,playable,2020-05-19 20:59:53.000 -"Garfield Kart Furious Racing",010061E00E8BE000,status-playable;ldn-works;loader-allocator,playable,2022-09-13 21:40:25.000 -"Gates of Hell",,slow;status-playable,playable,2020-10-22 12:44:26.000 -"Gato Roboto",010025500C098000,status-playable,playable,2023-01-20 15:04:11.000 -"Gear.Club Unlimited",010065E003FD8000,status-playable,playable,2021-06-08 13:03:19.000 -"Gear.Club Unlimited 2",010072900AFF0000,status-playable;nvdec;online-broken,playable,2022-07-29 12:52:16.000 -"Geki Yaba Runner Anniversary Edition",01000F000D9F0000,status-playable,playable,2021-02-19 18:59:07.000 -"Gekido Kintaro's Revenge",,status-playable,playable,2020-10-27 12:44:05.000 -"Gelly Break",01009D000AF3A000,UE4;status-playable,playable,2021-03-03 16:04:02.000 -"Gem Smashers",01001A4008192000,nvdec;status-playable,playable,2021-06-08 13:40:51.000 -"Genetic Disaster",,status-playable,playable,2020-06-19 21:41:12.000 -"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",0100D7E0110B2000,32-bit;status-playable,playable,2022-06-06 00:42:09.000 -"Gensokyo Defenders",010000300C79C000,status-playable;online-broken;UE4,playable,2022-07-29 13:48:12.000 -"Gensou Rougoku no Kaleidscope",0100AC600EB4C000,status-menus;crash,menus,2021-11-24 08:45:07.000 -"Georifters",,UE4;crash;nvdec;status-menus,menus,2020-12-04 22:30:50.000 -"Gerrrms",,status-playable,playable,2020-08-15 11:32:52.000 -"Get 10 Quest",,status-playable,playable,2020-08-03 12:48:39.000 -"Get Over Here",0100B5B00E77C000,status-playable,playable,2022-10-28 11:53:52.000 -"Ghost 1.0",0100EEB005ACC000,status-playable,playable,2021-02-19 20:48:47.000 -"Ghost Blade HD",010063200C588000,status-playable;online-broken,playable,2022-09-13 21:51:21.000 -"Ghost Grab 3000",,status-playable,playable,2020-07-11 18:09:52.000 -"Ghost Parade",,status-playable,playable,2020-07-14 00:43:54.000 -"Ghost Sweeper",01004B301108C000,status-playable,playable,2022-10-10 12:45:36.000 -"Ghost Trick Phantom Detective",010029B018432000,status-playable,playable,2023-08-23 14:50:12.000 -"Ghostbusters: The Video Game Remastered",010008A00F632000,status-playable;nvdec,playable,2021-09-17 07:26:57.000 -"Ghostrunner",,UE4;crash;gpu;nvdec;status-ingame,ingame,2020-12-17 13:01:59.000 -"Ghosts 'n Goblins Resurrection",0100D6200F2BA000,status-playable,playable,2023-05-09 12:40:41.000 -"Giana Sisters: Twisted Dreams - Owltimate Edition",01003830092B8000,status-playable,playable,2022-07-29 14:06:12.000 -"Gibbous - A Cthulhu Adventure",0100D95012C0A000,status-playable;nvdec,playable,2022-10-10 12:57:17.000 -"GIGA WRECKER Alt.",010045F00BFC2000,status-playable,playable,2022-07-29 14:13:54.000 -"Gigantosaurus The Game",01002C400E526000,status-playable;UE4,playable,2022-09-27 21:20:00.000 -"Ginger: Beyond the Crystal",0100C50007070000,status-playable,playable,2021-02-17 16:27:00.000 -"Girabox",,status-playable,playable,2020-12-12 13:55:05.000 -"Giraffe and Annika",,UE4;crash;status-ingame,ingame,2020-12-04 22:41:57.000 -"Girls und Panzer Dream Tank Match DX",01006DD00CC96000,status-playable;ldn-untested,playable,2022-09-12 16:07:11.000 -"Glaive: Brick Breaker",,status-playable,playable,2020-05-20 12:15:59.000 -"Glitch's Trip",,status-playable,playable,2020-12-17 16:00:57.000 -"Glyph",0100EB501130E000,status-playable,playable,2021-02-08 19:56:51.000 -"Gnome More War",,status-playable,playable,2020-12-17 16:33:07.000 -"Gnomes Garden 2",,status-playable,playable,2021-02-19 20:08:13.000 -"Gnomes Garden: Lost King",010036C00D0D6000,deadlock;status-menus,menus,2021-11-18 11:14:03.000 -"Gnosia",01008EF013A7C000,status-playable,playable,2021-04-05 17:20:30.000 -"Go All Out",01000C800FADC000,status-playable;online-broken,playable,2022-09-21 19:16:34.000 -"Go Rally",010055A0161F4000,gpu;status-ingame,ingame,2023-08-16 21:18:23.000 -"GO VACATION",0100C1800A9B6000,status-playable;nvdec;ldn-works,playable,2024-05-13 19:28:53.000 -"Go! Fish Go!",,status-playable,playable,2020-07-27 13:52:28.000 -"Goat Simulator",010032600C8CE000,32-bit;status-playable,playable,2022-07-29 21:02:33.000 -"GOD EATER 3",01001C700873E000,gpu;status-ingame;nvdec,ingame,2022-07-29 21:33:21.000 -"GOD WARS THE COMPLETE LEGEND",,nvdec;status-playable,playable,2020-05-19 14:37:50.000 -"Gods Will Fall",0100CFA0111C8000,status-playable,playable,2021-02-08 16:49:59.000 -"Goetia",,status-playable,playable,2020-05-19 12:55:39.000 -"Going Under",,deadlock;nvdec;status-ingame,ingame,2020-12-11 22:29:46.000 -"Goken",,status-playable,playable,2020-08-05 20:22:38.000 -"Golazo - 010013800F0A4000",010013800F0A4000,status-playable,playable,2022-09-13 21:58:37.000 -"Golem Gates",01003C000D84C000,status-ingame;crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11.000 -"Golf Story",,status-playable,playable,2020-05-14 14:56:17.000 -"Golf With Your Friends",01006FB00EBE0000,status-playable;online-broken,playable,2022-09-29 12:55:11.000 -"Gone Home",0100EEC00AA6E000,status-playable,playable,2022-08-01 11:14:20.000 -"Gonner",,status-playable,playable,2020-05-19 12:05:02.000 -"Good Job!",,status-playable,playable,2021-03-02 13:15:55.000 -"Good Night, Knight",01003AD0123A2000,status-nothing;crash,nothing,2023-07-30 23:38:13.000 -"Good Pizza, Great Pizza",,status-playable,playable,2020-12-04 22:59:18.000 -"Goosebumps Dead of Night",,gpu;nvdec;status-ingame,ingame,2020-12-10 20:02:16.000 -"Goosebumps: The Game",,status-playable,playable,2020-05-19 11:56:52.000 -"Gorogoa",0100F2A005C98000,status-playable,playable,2022-08-01 11:55:08.000 -"GORSD",,status-playable,playable,2020-12-04 22:15:21.000 -"Gotcha Racing 2nd",,status-playable,playable,2020-07-23 17:14:04.000 -"Gothic Murder: Adventure That Changes Destiny",,deadlock;status-ingame;crash,ingame,2022-09-30 23:16:53.000 -"Grab the Bottle",,status-playable,playable,2020-07-14 17:06:41.000 -"Graceful Explosion Machine",,status-playable,playable,2020-05-19 20:36:55.000 -"Grand Brix Shooter",,slow;status-playable,playable,2020-06-24 13:23:54.000 -"Grand Guilds",010038100D436000,UE4;nvdec;status-playable,playable,2021-04-26 12:49:05.000 -"Grand Prix Story",0100BE600D07A000,status-playable,playable,2022-08-01 12:42:23.000 -"Grand Theft Auto 3",05B1D2ABD3D30000,services;status-nothing;crash;homebrew,nothing,2023-05-01 22:01:58.000 -"Grandia HD Collection",0100E0600BBC8000,status-boots;crash,boots,2024-08-19 04:29:48.000 -"Grass Cutter",,slow;status-ingame,ingame,2020-05-19 18:27:42.000 -"Grave Danger",,status-playable,playable,2020-05-18 17:41:28.000 -"GraviFire",010054A013E0C000,status-playable,playable,2021-04-05 17:13:32.000 -"Gravity Rider Zero",01002C2011828000,gpu;status-ingame;vulkan-backend-bug,ingame,2022-09-29 13:56:13.000 -"Greedroid",,status-playable,playable,2020-12-14 11:14:32.000 -"GREEN",010068D00AE68000,status-playable,playable,2022-08-01 12:54:15.000 -"Green Game",0100CBB0070EE000,nvdec;status-playable,playable,2021-02-19 18:51:55.000 -"GREEN The Life Algorithm",0100DFE00F002000,status-playable,playable,2022-09-27 21:37:13.000 -"Grey Skies: A War of the Worlds Story",0100DA7013792000,status-playable;UE4,playable,2022-10-24 11:13:59.000 -"GRID Autosport",0100DC800A602000,status-playable;nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45.000 -"Grid Mania",,status-playable,playable,2020-05-19 14:11:05.000 -"Gridd: Retroenhanced",,status-playable,playable,2020-05-20 11:32:40.000 -"Grim Fandango Remastered",0100B7900B024000,status-playable;nvdec,playable,2022-08-01 13:55:58.000 -"Grim Legends 2: Song Of The Dark Swan",010078E012D80000,status-playable;nvdec,playable,2022-10-18 12:58:45.000 -"Grim Legends: The Forsaken Bride",010009F011F90000,status-playable;nvdec,playable,2022-10-18 13:14:06.000 -"Grimshade",01001E200F2F8000,status-playable,playable,2022-10-02 12:44:20.000 -"Grindstone",0100538012496000,status-playable,playable,2023-02-08 15:54:06.000 -"GRIP",0100459009A2A000,status-playable;nvdec;online-broken;UE4,playable,2022-08-01 15:00:22.000 -"GRIS",0100E1700C31C000,nvdec;status-playable,playable,2021-06-03 13:33:44.000 -"GRISAIA PHANTOM TRIGGER 01&02",01009D7011B02000,status-playable;nvdec,playable,2022-12-04 21:16:06.000 -"Grisaia Phantom Trigger 03",01005250123B8000,audout;status-playable,playable,2021-01-31 12:30:47.000 -"GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000",0100D970123BA000,audout;status-playable,playable,2021-01-31 12:40:37.000 -"GRISAIA PHANTOM TRIGGER 05",01002330123BC000,audout;nvdec;status-playable,playable,2021-01-31 12:49:59.000 -"GRISAIA PHANTOM TRIGGER 5.5",0100CAF013AE6000,audout;nvdec;status-playable,playable,2021-01-31 12:59:44.000 -"Grizzland",010091300FFA0000,gpu;status-ingame,ingame,2024-07-11 16:28:34.000 -"Groove Coaster: Wai Wai Party!!!!",0100EB500D92E000,status-playable;nvdec;ldn-broken,playable,2021-11-06 14:54:27.000 -"Guacamelee! 2",,status-playable,playable,2020-05-15 14:56:59.000 -"Guacamelee! Super Turbo Championship Edition",,status-playable,playable,2020-05-13 23:44:18.000 -"Guess the Character",,status-playable,playable,2020-05-20 13:14:19.000 -"Guess The Word",,status-playable,playable,2020-07-26 21:34:25.000 -"GUILTY GEAR XX ACCENT CORE PLUS R",,nvdec;status-playable,playable,2021-01-13 09:28:33.000 -"GUNBIRD for Nintendo Switch",01003C6008940000,32-bit;status-playable,playable,2021-06-04 19:16:01.000 -"GUNBIRD2 for Nintendo Switch",,status-playable,playable,2020-10-10 14:41:16.000 -"Gunka o haita neko",,gpu;nvdec;status-ingame,ingame,2020-08-25 12:37:56.000 -"Gunman Clive HD Collection",,status-playable,playable,2020-10-09 12:17:35.000 -"Guns Gore and Cannoli 2",,online;status-playable,playable,2021-01-06 18:43:59.000 -"Gunvolt Chronicles: Luminous Avenger iX",,status-playable,playable,2020-06-16 22:47:07.000 -"Gunvolt Chronicles: Luminous Avenger iX 2",0100763015C2E000,status-nothing;crash;Needs Update,nothing,2022-04-29 15:34:34.000 -"Gurimugurimoa OnceMore Demo",01002C8018554000,status-playable,playable,2022-07-29 22:07:31.000 -"Gylt",0100AC601DCA8000,status-ingame;crash,ingame,2024-03-18 20:16:51.000 -"HAAK",0100822012D76000,gpu;status-ingame,ingame,2023-02-19 14:31:05.000 -"Habroxia",,status-playable,playable,2020-06-16 23:04:42.000 -"Hades",0100535012974000,status-playable;vulkan,playable,2022-10-05 10:45:21.000 -"Hakoniwa Explorer Plus",,slow;status-ingame,ingame,2021-02-19 16:56:19.000 -"Halloween Pinball",,status-playable,playable,2021-01-12 16:00:46.000 -"Hamidashi Creative",01006FF014152000,gpu;status-ingame,ingame,2021-12-19 15:30:51.000 -"Hammerwatch",01003B9007E86000,status-playable;online-broken;ldn-broken,playable,2022-08-01 16:28:46.000 -"Hand of Fate 2",01003620068EA000,status-playable,playable,2022-08-01 15:44:16.000 -"Hang the Kings",,status-playable,playable,2020-07-28 22:56:59.000 -"Happy Animals Mini Golf",010066C018E50000,gpu;status-ingame,ingame,2022-12-04 19:24:28.000 -"Hard West",0100ECE00D13E000,status-nothing;regression,nothing,2022-02-09 07:45:56.000 -"HARDCORE Maze Cube",,status-playable,playable,2020-12-04 20:01:24.000 -"HARDCORE MECHA",,slow;status-playable,playable,2020-11-01 15:06:33.000 -"HardCube",01000C90117FA000,status-playable,playable,2021-05-05 18:33:03.000 -"Hardway Party",,status-playable,playable,2020-07-26 12:35:07.000 -"Harvest Life",0100D0500AD30000,status-playable,playable,2022-08-01 16:51:45.000 -"Harvest Moon One World - 010016B010FDE00",,status-playable,playable,2023-05-26 09:17:19.000 -"Harvestella",0100A280187BC000,status-playable;UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11.000 -"Has-Been Heroes",,status-playable,playable,2021-01-13 13:31:48.000 -"Hatsune Miku: Project DIVA Mega Mix",01001CC00FA1A000,audio;status-playable;online-broken,playable,2024-01-07 23:12:57.000 -"Haunted Dawn: The Zombie Apocalypse",01009E6014F18000,status-playable,playable,2022-10-28 12:31:51.000 -"Haunted Dungeons: Hyakki Castle",,status-playable,playable,2020-08-12 14:21:48.000 -"Haven",0100E2600DBAA000,status-playable,playable,2021-03-24 11:52:41.000 -"Hayfever",0100EA900FB2C000,status-playable;loader-allocator,playable,2022-09-22 17:35:41.000 -"Headliner: NoviNews",0100EFE00E1DC000,online;status-playable,playable,2021-03-01 11:36:00.000 -"Headsnatchers",,UE4;crash;status-menus,menus,2020-07-14 13:29:14.000 -"Headspun",,status-playable,playable,2020-07-31 19:46:47.000 -"Heart and Slash",,status-playable,playable,2021-01-13 20:56:32.000 -"Heaven Dust",,status-playable,playable,2020-05-17 14:02:41.000 -"Heaven's Vault",0100FD901000C000,crash;status-ingame,ingame,2021-02-08 18:22:01.000 -"Helheim Hassle",,status-playable,playable,2020-10-14 11:38:36.000 -"Hell is Other Demons",,status-playable,playable,2021-01-13 13:23:02.000 -"Hell Pie0",01000938017E5C00,status-playable;nvdec;UE4,playable,2022-11-03 16:48:46.000 -"Hell Warders",0100A4600E27A000,online;status-playable,playable,2021-02-27 02:31:03.000 -"Hellblade: Senua's Sacrifice",010044500CF8E000,gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50.000 -"Hello Kitty Kruisers With Sanrio Friends",010087D0084A8000,nvdec;status-playable,playable,2021-06-04 19:08:46.000 -"Hello Neighbor",0100FAA00B168000,status-playable;UE4,playable,2022-08-01 21:32:23.000 -"Hello Neighbor: Hide And Seek",,UE4;gpu;slow;status-ingame,ingame,2020-10-24 10:59:57.000 -"Hellpoint",010024600C794000,status-menus,menus,2021-11-26 13:24:20.000 -"Hero Express",,nvdec;status-playable,playable,2020-08-06 13:23:43.000 -"Hero-U: Rogue to Redemption",010077D01094C000,nvdec;status-playable,playable,2021-03-24 11:40:01.000 -"Heroes of Hammerwatch",0100D2B00BC54000,status-playable,playable,2022-08-01 18:30:21.000 -"Heroine Anthem Zero episode 1",01001B70080F0000,status-playable;vulkan-backend-bug,playable,2022-08-01 22:02:36.000 -"Heroki",010057300B0DC000,gpu;status-ingame,ingame,2023-07-30 19:30:01.000 -"Heroland",,status-playable,playable,2020-08-05 15:35:39.000 -"Hexagravity",01007AC00E012000,status-playable,playable,2021-05-28 13:47:48.000 -"Hidden",01004E800F03C000,slow;status-ingame,ingame,2022-10-05 10:56:53.000 -"Higurashi no Naku Koro ni Hō",0100F6A00A684000,audio;status-ingame,ingame,2021-09-18 14:40:28.000 -"Himehibi 1 gakki - Princess Days",0100F8D0129F4000,status-nothing;crash,nothing,2021-11-03 08:34:19.000 -"Hiragana Pixel Party",,status-playable,playable,2021-01-14 08:36:50.000 -"Hitman 3 - Cloud Version",01004990132AC000,Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:35:07.000 -"Hitman: Blood Money - Reprisal",010083A018262000,deadlock;status-ingame,ingame,2024-09-28 16:28:50.000 -"Hob: The Definitive Edition",,status-playable,playable,2021-01-13 09:39:19.000 -"Hoggy 2",0100F7300ED2C000,status-playable,playable,2022-10-10 13:53:35.000 -"Hogwarts Legacy 0100F7E00C70E000",0100F7E00C70E000,status-ingame;slow,ingame,2024-09-03 19:53:58.000 -"Hollow Knight",0100633007D48000,status-playable;nvdec,playable,2023-01-16 15:44:56.000 -"Hollow0",0100F2100061E800,UE4;gpu;status-ingame,ingame,2021-03-03 23:42:56.000 -"Holy Potatoes! What the Hell?!",,status-playable,playable,2020-07-03 10:48:56.000 -"HoPiKo",,status-playable,playable,2021-01-13 20:12:38.000 -"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",010087800EE5A000,status-boots;crash,boots,2023-02-19 00:51:21.000 -"Horace",010086D011EB8000,status-playable,playable,2022-10-10 14:03:50.000 -"Horizon Chase 2",0100001019F6E000,deadlock;slow;status-ingame;crash;UE4,ingame,2024-08-19 04:24:06.000 -"Horizon Chase Turbo",01009EA00B714000,status-playable,playable,2021-02-19 19:40:56.000 -"Horror Pinball Bundle",0100E4200FA82000,status-menus;crash,menus,2022-09-13 22:15:34.000 -"Hotel Transylvania 3: Monsters Overboard",0100017007980000,nvdec;status-playable,playable,2021-01-27 18:55:31.000 -"Hotline Miami Collection",0100D0E00E51E000,status-playable;nvdec,playable,2022-09-09 16:41:19.000 -"Hotshot Racing",0100BDE008218000,gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17.000 -"House Flipper",0100CAE00EB02000,status-playable,playable,2021-06-16 18:28:32.000 -"Hover",0100F6800910A000,status-playable;online-broken,playable,2022-09-20 12:54:46.000 -"Hulu",0100A66003384000,status-boots;online-broken,boots,2022-12-09 10:05:00.000 -"Human Resource Machine",,32-bit;status-playable,playable,2020-12-17 21:47:09.000 -"Human: Fall Flat",,status-playable,playable,2021-01-13 18:36:05.000 -"Hungry Shark World",,status-playable,playable,2021-01-13 18:26:08.000 -"Huntdown",0100EBA004726000,status-playable,playable,2021-04-05 16:59:54.000 -"Hunter's Legacy: Purrfect Edition",010068000CAC0000,status-playable,playable,2022-08-02 10:33:31.000 -"Hunting Simulator",0100C460040EA000,status-playable;UE4,playable,2022-08-02 10:54:08.000 -"Hunting Simulator 2",010061F010C3A000,status-playable;UE4,playable,2022-10-10 14:25:51.000 -"Hyper Jam",,UE4;crash;status-boots,boots,2020-12-15 22:52:11.000 -"Hyper Light Drifter - Special Edition",01003B200B372000,status-playable;vulkan-backend-bug,playable,2023-01-13 15:44:48.000 -"HyperBrawl Tournament",,crash;services;status-boots,boots,2020-12-04 23:03:27.000 -"HYPERCHARGE: Unboxed",0100A8B00F0B4000,status-playable;nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39.000 -"HyperParasite",010061400ED90000,status-playable;nvdec;UE4,playable,2022-09-27 22:05:44.000 -"Hypnospace Outlaw",0100959010466000,status-ingame;nvdec,ingame,2023-08-02 22:46:49.000 -"Hyrule Warriors: Age of Calamity",01002B00111A2000,gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00.000 -"Hyrule Warriors: Age of Calamity - Demo Version",0100A2C01320E000,slow;status-playable,playable,2022-10-10 17:37:41.000 -"Hyrule Warriors: Definitive Edition",0100AE00096EA000,services-horizon;status-ingame;nvdec,ingame,2024-06-16 10:34:05.000 -"I AM SETSUNA",0100849000BDA000,status-playable,playable,2021-11-28 11:06:11.000 -"I Saw Black Clouds",01001860140B0000,nvdec;status-playable,playable,2021-04-19 17:22:16.000 -"I, Zombie",,status-playable,playable,2021-01-13 14:53:44.000 -"Ice Age Scrat's Nutty Adventure",01004E5007E92000,status-playable;nvdec,playable,2022-09-13 22:22:29.000 -"Ice Cream Surfer",,status-playable,playable,2020-07-29 12:04:07.000 -"Ice Station Z",0100954014718000,status-menus;crash,menus,2021-11-21 20:02:15.000 -"ICEY",,status-playable,playable,2021-01-14 16:16:04.000 -"Iconoclasts",0100BC60099FE000,status-playable,playable,2021-08-30 21:11:04.000 -"Idle Champions of the Forgotten Realms",,online;status-boots,boots,2020-12-17 18:24:57.000 -"Idol Days - 愛怒流でいす",01002EC014BCA000,gpu;status-ingame;crash,ingame,2021-12-19 15:31:28.000 -"If Found...",,status-playable,playable,2020-12-11 13:43:14.000 -"If My Heart Had Wings",01001AC00ED72000,status-playable,playable,2022-09-29 14:54:57.000 -"Ikaruga",01009F20086A0000,status-playable,playable,2023-04-06 15:00:02.000 -"Ikenfell",010040900AF46000,status-playable,playable,2021-06-16 17:18:44.000 -"Immortal Planet",01007BC00E55A000,status-playable,playable,2022-09-20 13:40:43.000 -"Immortal Realms: Vampire Wars",010079501025C000,nvdec;status-playable,playable,2021-06-17 17:41:46.000 -"Immortal Redneck - 0100F400435A000",,nvdec;status-playable,playable,2021-01-27 18:36:28.000 -"Immortals Fenyx Rising",01004A600EC0A000,gpu;status-menus;crash,menus,2023-02-24 16:19:55.000 -"IMPLOSION",0100737003190000,status-playable;nvdec,playable,2021-12-12 03:52:13.000 -"In rays of the Light",0100A760129A0000,status-playable,playable,2021-04-07 15:18:07.000 -"Indie Darling Bundle Vol. 3",01004DE011076000,status-playable,playable,2022-10-02 13:01:57.000 -"Indie Puzzle Bundle Vol 1",0100A2101107C000,status-playable,playable,2022-09-27 22:23:21.000 -"Indiecalypse",,nvdec;status-playable,playable,2020-06-11 20:19:09.000 -"Indivisible",01001D3003FDE000,status-playable;nvdec,playable,2022-09-29 15:20:57.000 -"Inertial Drift",01002BD00F626000,status-playable;online-broken,playable,2022-10-11 12:22:19.000 -"Infernium",,UE4;regression;status-nothing,nothing,2021-01-13 16:36:07.000 -"Infinite Minigolf",,online;status-playable,playable,2020-09-29 12:26:25.000 -"Infliction",01001CB00EFD6000,status-playable;nvdec;UE4,playable,2022-10-02 13:15:55.000 -"INMOST",0100F1401161E000,status-playable,playable,2022-10-05 11:27:40.000 -"InnerSpace",,status-playable,playable,2021-01-13 19:36:14.000 -"INSIDE",0100D2D009028000,status-playable,playable,2021-12-25 20:24:56.000 -"Inside Grass: A little adventure",,status-playable,playable,2020-10-15 15:26:27.000 -"INSTANT SPORTS",010099700D750000,status-playable,playable,2022-09-09 12:59:40.000 -"Instant Sports Summer Games",,gpu;status-menus,menus,2020-09-02 13:39:28.000 -"Instant Sports Tennis",010031B0145B8000,status-playable,playable,2022-10-28 16:42:17.000 -"Interrogation: You will be deceived",010041501005E000,status-playable,playable,2022-10-05 11:40:10.000 -"Into the Dead 2",01000F700DECE000,status-playable;nvdec,playable,2022-09-14 12:36:14.000 -"INVERSUS Deluxe",01001D0003B96000,status-playable;online-broken,playable,2022-08-02 14:35:36.000 -"Invisible Fist",,status-playable,playable,2020-08-08 13:25:52.000 -"Invisible, Inc.",,crash;status-nothing,nothing,2021-01-29 16:28:13.000 -"Invisigun Reloaded",01005F400E644000,gpu;online;status-ingame,ingame,2021-06-10 12:13:24.000 -"Ion Fury",010041C00D086000,status-ingame;vulkan-backend-bug,ingame,2022-08-07 08:27:51.000 -"Iridium",010095C016C14000,status-playable,playable,2022-08-05 23:19:53.000 -"Iris Fall",0100945012168000,status-playable;nvdec,playable,2022-10-18 13:40:22.000 -"Iris School of Wizardry - Vinculum Hearts -",0100AD300B786000,status-playable,playable,2022-12-05 13:11:15.000 -"Iron Wings",01005270118D6000,slow;status-ingame,ingame,2022-08-07 08:32:57.000 -"Ironcast",,status-playable,playable,2021-01-13 13:54:29.000 -"Irony Curtain: From Matryoshka with Love",0100E5700CD56000,status-playable,playable,2021-06-04 20:12:37.000 -"Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate",,status-playable,playable,2020-08-31 13:52:21.000 -"ISLAND",0100F06013710000,status-playable,playable,2021-05-06 15:11:47.000 -"Island Flight Simulator",010077900440A000,status-playable,playable,2021-06-04 19:42:46.000 -"Island Saver",,nvdec;status-playable,playable,2020-10-23 22:07:02.000 -"Isoland",,status-playable,playable,2020-07-26 13:48:16.000 -"Isoland 2: Ashes of Time",,status-playable,playable,2020-07-26 14:29:05.000 -"Isolomus",010001F0145A8000,services;status-boots,boots,2021-11-03 07:48:21.000 -"ITTA",010068700C70A000,status-playable,playable,2021-06-07 03:15:52.000 -"Ittle Dew 2+",,status-playable,playable,2020-11-17 11:44:32.000 -"IxSHE Tell",0100DEB00F12A000,status-playable;nvdec,playable,2022-12-02 18:00:42.000 -"Izneo",0100D8E00C874000,status-menus;online-broken,menus,2022-08-06 15:56:23.000 -"James Pond Operation Robocod",,status-playable,playable,2021-01-13 09:48:45.000 -"Japanese Rail Sim: Journey to Kyoto",,nvdec;status-playable,playable,2020-07-29 17:14:21.000 -"JDM Racing",,status-playable,playable,2020-08-03 17:02:37.000 -"Jenny LeClue - Detectivu",,crash;status-nothing,nothing,2020-12-15 21:07:07.000 -"Jeopardy!",01006E400AE2A000,audout;nvdec;online;status-playable,playable,2021-02-22 13:53:46.000 -"Jet Kave Adventure",0100E4900D266000,status-playable;nvdec,playable,2022-09-09 14:50:39.000 -"Jet Lancer",0100F3500C70C000,gpu;status-ingame,ingame,2021-02-15 18:15:47.000 -"Jettomero: Hero of the Universe",0100A5A00AF26000,status-playable,playable,2022-08-02 14:46:43.000 -"Jiffy",01008330134DA000,gpu;status-ingame;opengl,ingame,2024-02-03 23:11:24.000 -"Jim Is Moving Out!",,deadlock;status-ingame,ingame,2020-06-03 22:05:19.000 -"Jinrui no Ninasama he",0100F4D00D8BE000,status-ingame;crash,ingame,2023-03-07 02:04:17.000 -"Jisei: The First Case HD",010038D011F08000,audio;status-playable,playable,2022-10-05 11:43:33.000 -"Job the Leprechaun",,status-playable,playable,2020-06-05 12:10:06.000 -"John Wick Hex",01007090104EC000,status-playable,playable,2022-08-07 08:29:12.000 -"Johnny Turbo's Arcade Gate of Doom",010069B002CDE000,status-playable,playable,2022-07-29 12:17:50.000 -"Johnny Turbo's Arcade Two Crude Dudes",010080D002CC6000,status-playable,playable,2022-08-02 20:29:50.000 -"Johnny Turbo's Arcade Wizard Fire",0100D230069CC000,status-playable,playable,2022-08-02 20:39:15.000 -"JoJos Bizarre Adventure All-Star Battle R",01008120128C2000,status-playable,playable,2022-12-03 10:45:10.000 -"Journey to the Savage Planet",01008B60117EC000,status-playable;nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12.000 -"Juicy Realm - 0100C7600F654000",0100C7600F654000,status-playable,playable,2023-02-21 19:16:20.000 -"Jumanji",,UE4;crash;status-boots,boots,2020-07-12 13:52:25.000 -"JUMP FORCE Deluxe Edition",0100183010F12000,status-playable;nvdec;online-broken;UE4,playable,2023-10-01 15:56:05.000 -"Jump King",,status-playable,playable,2020-06-09 10:12:39.000 -"Jump Rope Challenge",0100B9C012706000,services;status-boots;crash;Needs Update,boots,2023-02-27 01:24:28.000 -"Jumping Joe & Friends",,status-playable,playable,2021-01-13 17:09:42.000 -"JunkPlanet",,status-playable,playable,2020-11-09 12:38:33.000 -"Jurassic Pinball",0100CE100A826000,status-playable,playable,2021-06-04 19:02:37.000 -"Jurassic World Evolution Complete Edition",010050A011344000,cpu;status-menus;crash,menus,2023-08-04 18:06:54.000 -"Just Dance 2017",0100BCE000598000,online;status-playable,playable,2021-03-05 09:46:01.000 -"Just Dance 2019",,gpu;online;status-ingame,ingame,2021-02-27 17:21:27.000 -"JUST DANCE 2020",0100DDB00DB38000,status-playable,playable,2022-01-24 13:31:57.000 -"Just Dance 2022",0100EA6014BB8000,gpu;services;status-ingame;crash;Needs Update,ingame,2022-10-28 11:01:53.000 -"Just Dance 2023",0100BEE017FC0000,status-nothing,nothing,2023-06-05 16:44:54.000 -"Just Die Already",0100AC600CF0A000,status-playable;UE4,playable,2022-12-13 13:37:50.000 -"Just Glide",,status-playable,playable,2020-08-07 17:38:10.000 -"Just Shapes & Beats",,ldn-untested;nvdec;status-playable,playable,2021-02-09 12:18:36.000 -"JYDGE",010035A0044E8000,status-playable,playable,2022-08-02 21:20:13.000 -"Kagamihara/Justice",0100D58012FC2000,crash;status-nothing,nothing,2021-06-21 16:41:29.000 -"Kairobotica",0100D5F00EC52000,status-playable,playable,2021-05-06 12:17:56.000 -"KAMEN RIDER CLIMAX SCRAMBLE",0100BDC00A664000,status-playable;nvdec;ldn-untested,playable,2024-07-03 08:51:11.000 -"KAMEN RIDER memory of heroez / Premium Sound Edition",0100A9801180E000,status-playable,playable,2022-12-06 03:14:26.000 -"KAMIKO",,status-playable,playable,2020-05-13 12:48:57.000 -"Kangokuto Mary Skelter Finale",,audio;crash;status-ingame,ingame,2021-01-09 22:39:28.000 -"Katakoi Contrast - collection of branch -",01007FD00DB20000,status-playable;nvdec,playable,2022-12-09 09:41:26.000 -"Katamari Damacy REROLL",0100D7000C2C6000,status-playable,playable,2022-08-02 21:35:05.000 -"KATANA KAMI: A Way of the Samurai Story",0100F9800EDFA000,slow;status-playable,playable,2022-04-09 10:40:16.000 -"Katana ZERO",010029600D56A000,status-playable,playable,2022-08-26 08:09:09.000 -"Kaze and the Wild Masks",010038B00F142000,status-playable,playable,2021-04-19 17:11:03.000 -"Keen: One Girl Army",,status-playable,playable,2020-12-14 23:19:52.000 -"Keep Talking and Nobody Explodes",01008D400A584000,status-playable,playable,2021-02-15 18:05:21.000 -"Kemono Friends Picross",01004B100BDA2000,status-playable,playable,2023-02-08 15:54:34.000 -"Kentucky Robo Chicken",,status-playable,playable,2020-05-12 20:54:17.000 -"Kentucky Route Zero [0100327005C94000]",0100327005C94000,status-playable,playable,2024-04-09 23:22:46.000 -"KeroBlaster",,status-playable,playable,2020-05-12 20:42:52.000 -"Kholat",0100F680116A2000,UE4;nvdec;status-playable,playable,2021-06-17 11:52:48.000 -"Kid Tripp",,crash;status-nothing,nothing,2020-10-15 07:41:23.000 -"Kill la Kill - IF",,status-playable,playable,2020-06-09 14:47:08.000 -"Kill The Bad Guy",,status-playable,playable,2020-05-12 22:16:10.000 -"Killer Queen Black",0100F2900B3E2000,ldn-untested;online;status-playable,playable,2021-04-08 12:46:18.000 -"Kin'iro no Corda Octave",,status-playable,playable,2020-09-22 13:23:12.000 -"Kine",010089000F0E8000,status-playable;UE4,playable,2022-09-14 14:28:37.000 -"King Lucas",0100E6B00FFBA000,status-playable,playable,2022-09-21 19:43:23.000 -"King Oddball",,status-playable,playable,2020-05-13 13:47:57.000 -"King of Seas",01008D80148C8000,status-playable;nvdec;UE4,playable,2022-10-28 18:29:41.000 -"King of Seas Demo",0100515014A94000,status-playable;nvdec;UE4,playable,2022-10-28 18:09:31.000 -"KINGDOM HEARTS Melody of Memory",,crash;nvdec;status-ingame,ingame,2021-03-03 17:34:12.000 -"Kingdom Rush",0100A280121F6000,status-nothing;32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00.000 -"Kingdom: New Lands",0100BD9004AB6000,status-playable,playable,2022-08-02 21:48:50.000 -"Kingdom: Two Crowns",,status-playable,playable,2020-05-16 19:36:21.000 -"Kingdoms of Amalur: Re-Reckoning",0100EF50132BE000,status-playable,playable,2023-08-10 13:05:08.000 -"Kirby and the Forgotten Land",01004D300C5AE000,gpu;status-ingame,ingame,2024-03-11 17:11:21.000 -"Kirby and the Forgotten Land (Demo version)",010091201605A000,status-playable;demo,playable,2022-08-21 21:03:01.000 -"Kirby Fighters 2",0100227010460000,ldn-works;online;status-playable,playable,2021-06-17 13:06:39.000 -"Kirby Star Allies",01007E3006DDA000,status-playable;nvdec,playable,2023-11-15 17:06:19.000 -"Kirby’s Dream Buffet",0100A8E016236000,status-ingame;crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44.000 -"Kirby’s Return to Dream Land Deluxe",01006B601380E000,status-playable,playable,2024-05-16 19:58:04.000 -"Kirby’s Return to Dream Land Deluxe - Demo",010091D01A57E000,status-playable;demo,playable,2023-02-18 17:21:55.000 -"Kissed by the Baddest Bidder",0100F3A00F4CA000,gpu;status-ingame;nvdec,ingame,2022-12-04 20:57:11.000 -"Kitten Squad",01000C900A136000,status-playable;nvdec,playable,2022-08-03 12:01:59.000 -"Klondike Solitaire",,status-playable,playable,2020-12-13 16:17:27.000 -"Knight Squad",,status-playable,playable,2020-08-09 16:54:51.000 -"Knight Squad 2",010024B00E1D6000,status-playable;nvdec;online-broken,playable,2022-10-28 18:38:09.000 -"Knight Terrors",,status-playable,playable,2020-05-13 13:09:22.000 -"Knightin'+",,status-playable,playable,2020-08-31 18:18:21.000 -"Knights of Pen and Paper +1 Deluxier Edition",,status-playable,playable,2020-05-11 21:46:32.000 -"Knights of Pen and Paper 2 Deluxiest Edition",,status-playable,playable,2020-05-13 14:07:00.000 -"Knock-Knock",010001A00A1F6000,nvdec;status-playable,playable,2021-02-01 20:03:19.000 -"Knockout City",01009EF00DDB4000,services;status-boots;online-broken,boots,2022-12-09 09:48:58.000 -"Koa and the Five Pirates of Mara",0100C57019BA2000,gpu;status-ingame,ingame,2024-07-11 16:14:44.000 -"Koi DX",,status-playable,playable,2020-05-11 21:37:51.000 -"Koi no Hanasaku Hyakkaen",,32-bit;gpu;nvdec;status-ingame,ingame,2020-10-03 14:17:10.000 -"Koloro",01005D200C9AA000,status-playable,playable,2022-08-03 12:34:02.000 -"Kona",0100464009294000,status-playable,playable,2022-08-03 12:48:19.000 -"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",010016C011AAA000,status-playable,playable,2023-04-26 09:51:08.000 -"Koral",,UE4;crash;gpu;status-menus,menus,2020-11-16 12:41:26.000 -"KORG Gadget",,status-playable,playable,2020-05-13 13:57:24.000 -"Kotodama: The 7 Mysteries of Fujisawa",010046600CCA4000,audout;status-playable,playable,2021-02-01 20:28:37.000 -"KukkoroDays",010022801242C000,status-menus;crash,menus,2021-11-25 08:52:56.000 -"KUNAI",010035A00DF62000,status-playable;nvdec,playable,2022-09-20 13:48:34.000 -"Kunio-Kun: The World Classics Collection",010060400ADD2000,online;status-playable,playable,2021-01-29 20:21:46.000 -"KUUKIYOMI 2: Consider It More! - New Era",010037500F282000,status-nothing;crash;Needs Update,nothing,2021-11-02 09:34:40.000 -"Kwaidan ~Azuma manor story~",0100894011F62000,status-playable,playable,2022-10-05 12:50:44.000 -"L.A. Noire",0100830004FB6000,status-playable,playable,2022-08-03 16:49:35.000 -"L.F.O. - Lost Future Omega -",,UE4;deadlock;status-boots,boots,2020-10-16 12:16:44.000 -"L.O.L. Surprise! Remix: We Rule the World",0100F2B0123AE000,status-playable,playable,2022-10-11 22:48:03.000 -"La Mulana 2",010038000F644000,status-playable,playable,2022-09-03 13:45:57.000 -"LA-MULANA",010026000F662800,gpu;status-ingame,ingame,2022-08-12 01:06:21.000 -"LA-MULANA 1 & 2",0100E5D00F4AE000,status-playable,playable,2022-09-22 17:56:36.000 -"Labyrinth of Refrain: Coven of Dusk",010058500B3E0000,status-playable,playable,2021-02-15 17:38:48.000 -"Labyrinth of the Witch",,status-playable,playable,2020-11-01 14:42:37.000 -"Langrisser I and II",0100BAB00E8C0000,status-playable,playable,2021-02-19 15:46:10.000 -"Lanota",,status-playable,playable,2019-09-04 01:58:14.000 -"Lapis x Labyrinth",01005E000D3D8000,status-playable,playable,2021-02-01 18:58:08.000 -"Laraan",,status-playable,playable,2020-12-16 12:45:48.000 -"Last Day of June",0100DA700879C000,nvdec;status-playable,playable,2021-06-08 11:35:32.000 -"LAST FIGHT",01009E100BDD6000,status-playable,playable,2022-09-20 13:54:55.000 -"Late Shift",0100055007B86000,nvdec;status-playable,playable,2021-02-01 18:43:58.000 -"Later Daters",,status-playable,playable,2020-07-29 16:35:45.000 -"Layers of Fear 2",01001730144DA000,status-playable;nvdec;UE4,playable,2022-10-28 18:49:52.000 -"Layers of Fear: Legacy",,nvdec;status-playable,playable,2021-02-15 16:30:41.000 -"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",0100CE500D226000,status-playable;nvdec;opengl,playable,2022-09-14 15:01:57.000 -"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",0100FDB00AA80000,gpu;status-ingame;nvdec;opengl,ingame,2022-09-14 15:15:55.000 -"League of Evil",01009C100390E000,online;status-playable,playable,2021-06-08 11:23:27.000 -"Left-Right: The Mansion",,status-playable,playable,2020-05-13 13:02:12.000 -"Legacy of Kain™ Soul Reaver 1&2 Remastered",010079901C898000,status-playable,playable,2025-01-07 05:50:01.000 -"Legend of Kay Anniversary",01002DB007A96000,nvdec;status-playable,playable,2021-01-29 18:38:29.000 -"Legend of the Skyfish",,status-playable,playable,2020-06-24 13:04:22.000 -"Legend of the Tetrarchs",,deadlock;status-ingame,ingame,2020-07-10 07:54:03.000 -"Legendary Eleven",0100A73006E74000,status-playable,playable,2021-06-08 12:09:03.000 -"Legendary Fishing",0100A7700B46C000,online;status-playable,playable,2021-04-14 15:08:46.000 -"LEGO 2K Drive",0100739018020000,gpu;status-ingame;ldn-works,ingame,2024-04-09 02:05:12.000 -"Lego City Undercover",01003A30012C0000,status-playable;nvdec,playable,2024-09-30 08:44:27.000 -"LEGO DC Super-Villains",010070D009FEC000,status-playable,playable,2021-05-27 18:10:37.000 -"LEGO Harry Potter Collection",010052A00B5D2000,status-ingame;crash,ingame,2024-01-31 10:28:07.000 -"LEGO Horizon Adventures",010073C01AF34000,status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56.000 -"LEGO Jurassic World",01001C100E772000,status-playable,playable,2021-05-27 17:00:20.000 -"LEGO Marvel Super Heroes",01006F600FFC8000,status-playable,playable,2024-09-10 19:02:19.000 -"LEGO Marvel Super Heroes 2",0100D3A00409E000,status-nothing;crash,nothing,2023-03-02 17:12:33.000 -"LEGO Star Wars: The Skywalker Saga",010042D00D900000,gpu;slow;status-ingame,ingame,2024-04-13 20:08:46.000 -"LEGO The Incredibles",0100A01006E00000,status-nothing;crash,nothing,2022-08-03 18:36:59.000 -"LEGO Worlds",,crash;slow;status-ingame,ingame,2020-07-17 13:35:39.000 -"Legrand Legacy: Tale of the Fatebounds",,nvdec;status-playable,playable,2020-07-26 12:27:36.000 -"Leisure Suit Larry - Wet Dreams Dry Twice",010031A0135CA000,status-playable,playable,2022-10-28 19:00:57.000 -"Leisure Suit Larry: Wet Dreams Don't Dry",0100A8E00CAA0000,status-playable,playable,2022-08-03 19:51:44.000 -"Lethal League Blaze",01003AB00983C000,online;status-playable,playable,2021-01-29 20:13:31.000 -"Letter Quest Remastered",,status-playable,playable,2020-05-11 21:30:34.000 -"Letters - a written adventure",0100CE301678E800,gpu;status-ingame,ingame,2023-02-21 20:12:38.000 -"Levelhead",,online;status-ingame,ingame,2020-10-18 11:44:51.000 -"Levels+",,status-playable,playable,2020-05-12 13:51:39.000 -"Liberated",0100C8000F146000,gpu;status-ingame;nvdec,ingame,2024-07-04 04:58:24.000 -"Liberated: Enhanced Edition",01003A90133A6000,gpu;status-ingame;nvdec,ingame,2024-07-04 04:48:48.000 -"Lichtspeer: Double Speer Edition",,status-playable,playable,2020-05-12 16:43:09.000 -"Liege Dragon",010041F0128AE000,status-playable,playable,2022-10-12 10:27:03.000 -"Life Goes On",010006300AFFE000,status-playable,playable,2021-01-29 19:01:20.000 -"Life is Strange 2",0100FD101186C000,status-playable;UE4,playable,2024-07-04 05:05:58.000 -"Life is Strange Remastered",0100DC301186A000,status-playable;UE4,playable,2022-10-03 16:54:44.000 -"Life is Strange: Before the Storm Remastered",010008501186E000,status-playable,playable,2023-09-28 17:15:44.000 -"Life is Strange: True Colors [0100500012AB4000]",0100500012AB4000,gpu;status-ingame;UE4,ingame,2024-04-08 16:11:52.000 -"Life of Boris: Super Slav",,status-ingame,ingame,2020-12-17 11:40:05.000 -"Life of Fly",0100B3A0135D6000,status-playable,playable,2021-01-25 23:41:07.000 -"Life of Fly 2",010069A01506E000,slow;status-playable,playable,2022-10-28 19:26:52.000 -"Lifeless Planet",01005B6008132000,status-playable,playable,2022-08-03 21:25:13.000 -"Light Fall",,nvdec;status-playable,playable,2021-01-18 14:55:36.000 -"Light Tracer",010087700D07C000,nvdec;status-playable,playable,2021-05-05 19:15:43.000 -"LIMBO",01009C8009026000,cpu;status-boots;32-bit,boots,2023-06-28 15:39:19.000 -"Linelight",,status-playable,playable,2020-12-17 12:18:07.000 -"Lines X",,status-playable,playable,2020-05-11 15:28:30.000 -"Lines XL",,status-playable,playable,2020-08-31 17:48:23.000 -"Little Busters! Converted Edition",0100943010310000,status-playable;nvdec,playable,2022-09-29 15:34:56.000 -"Little Dragons Cafe",,status-playable,playable,2020-05-12 00:00:52.000 -"LITTLE FRIENDS -DOGS & CATS-",,status-playable,playable,2020-11-12 12:45:51.000 -"Little Inferno",,32-bit;gpu;nvdec;status-ingame,ingame,2020-12-17 21:43:56.000 -"Little Misfortune",0100E7000E826000,nvdec;status-playable,playable,2021-02-23 20:39:44.000 -"Little Mouse's Encyclopedia",0100FE0014200000,status-playable,playable,2022-10-28 19:38:58.000 -"Little Nightmares",01002FC00412C000,status-playable;nvdec;UE4,playable,2022-08-03 21:45:35.000 -"Little Nightmares II",010097100EDD6000,status-playable;UE4,playable,2023-02-10 18:24:44.000 -"Little Nightmares II DEMO",010093A0135D6000,status-playable;UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20.000 -"Little Noah: Scion of Paradise",0100535014D76000,status-playable;opengl-backend-bug,playable,2022-09-14 04:17:13.000 -"Little Racer",0100E6D00E81C000,status-playable,playable,2022-10-18 16:41:13.000 -"Little Shopping",,status-playable,playable,2020-10-03 16:34:35.000 -"Little Town Hero",,status-playable,playable,2020-10-15 23:28:48.000 -"Little Triangle",,status-playable,playable,2020-06-17 14:46:26.000 -"LIVE A LIVE",0100CF801776C000,status-playable;UE4;amd-vendor-bug,playable,2023-02-05 15:12:07.000 -"LOCO-SPORTS",0100BA000FC9C000,status-playable,playable,2022-09-20 14:09:30.000 -"Lode Runner Legacy",,status-playable,playable,2021-01-10 14:10:28.000 -"Lofi Ping Pong",,crash;status-ingame,ingame,2020-12-15 20:09:22.000 -"Lone Ruin",0100B6D016EE6000,status-ingame;crash;nvdec,ingame,2023-01-17 06:41:19.000 -"Lonely Mountains Downhill",0100A0C00E0DE000,status-playable;online-broken,playable,2024-07-04 05:08:11.000 -"LOOPERS",010062A0178A8000,gpu;slow;status-ingame;crash,ingame,2022-06-17 19:21:45.000 -"Lost Horizon",,status-playable,playable,2020-09-01 13:41:22.000 -"Lost Horizon 2",,nvdec;status-playable,playable,2020-06-16 12:02:12.000 -"Lost in Random",01005FE01291A000,gpu;status-ingame,ingame,2022-12-18 07:09:28.000 -"Lost Lands 3: The Golden Curse",0100156014C6A000,status-playable;nvdec,playable,2022-10-24 16:30:00.000 -"Lost Lands: Dark Overlord",0100BDD010AC8000,status-playable,playable,2022-10-03 11:52:58.000 -"Lost Lands: The Four Horsemen",0100133014510000,status-playable;nvdec,playable,2022-10-24 16:41:00.000 -"LOST ORBIT: Terminal Velocity",010054600AC74000,status-playable,playable,2021-06-14 12:21:12.000 -"Lost Phone Stories",,services;status-ingame,ingame,2020-04-05 23:17:33.000 -"Lost Ruins",01008AD013A86800,gpu;status-ingame,ingame,2023-02-19 14:09:00.000 -"LOST SPHEAR",,status-playable,playable,2021-01-10 06:01:21.000 -"Lost Words: Beyond the Page",0100018013124000,status-playable,playable,2022-10-24 17:03:21.000 -"Love Letter from Thief X",0100D36011AD4000,gpu;status-ingame;nvdec,ingame,2023-11-14 03:55:31.000 -"Ludo Mania",,crash;services;status-nothing,nothing,2020-04-03 00:33:47.000 -"Luigi's Mansion 2 HD",010048701995E000,status-ingame;ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27.000 -"Luigi's Mansion 3",0100DCA0064A6000,gpu;slow;status-ingame;Needs Update;ldn-works,ingame,2024-09-27 22:17:36.000 -"Lumini",,status-playable,playable,2020-08-09 20:45:09.000 -"Lumo",0100FF00042EE000,status-playable;nvdec,playable,2022-02-11 18:20:30.000 -"Lust for Darkness",,nvdec;status-playable,playable,2020-07-26 12:09:15.000 -"Lust for Darkness: Dawn Edition",0100F0B00F68E000,nvdec;status-playable,playable,2021-06-16 13:47:46.000 -"LUXAR",0100EC2011A80000,status-playable,playable,2021-03-04 21:11:57.000 -"Machi Knights Blood bagos",0100F2400D434000,status-playable;nvdec;UE4,playable,2022-09-14 15:08:04.000 -"Mad Carnage",,status-playable,playable,2021-01-10 13:00:07.000 -"Mad Father",,status-playable,playable,2020-11-12 13:22:10.000 -"Mad Games Tycoon",010061E00EB1E000,status-playable,playable,2022-09-20 14:23:14.000 -"Magazine Mogul",01004A200E722000,status-playable;loader-allocator,playable,2022-10-03 12:05:34.000 -"MagiCat",,status-playable,playable,2020-12-11 15:22:07.000 -"Magicolors",,status-playable,playable,2020-08-12 18:39:11.000 -"Mahjong Solitaire Refresh",01008C300B624000,status-boots;crash,boots,2022-12-09 12:02:55.000 -"Mahluk dark demon",010099A0145E8000,status-playable,playable,2021-04-15 13:14:24.000 -"Mainlining",,status-playable,playable,2020-06-05 01:02:00.000 -"Maitetsu: Pure Station",0100D9900F220000,status-playable,playable,2022-09-20 15:12:49.000 -"Makai Senki Disgaea 7",0100A78017BD6000,status-playable,playable,2023-10-05 00:22:18.000 -"Mana Spark",,status-playable,playable,2020-12-10 13:41:01.000 -"Maneater",010093D00CB22000,status-playable;nvdec;UE4,playable,2024-05-21 16:11:57.000 -"Manifold Garden",,status-playable,playable,2020-10-13 20:27:13.000 -"Manticore - Galaxy on Fire",0100C9A00952A000,status-boots;crash;nvdec,boots,2024-02-04 04:37:24.000 -"Mantis Burn Racing",0100E98002F6E000,status-playable;online-broken;ldn-broken,playable,2024-09-02 02:13:04.000 -"Marble Power Blast",01008E800D1FE000,status-playable,playable,2021-06-04 16:00:02.000 -"Märchen Forest - 0100B201D5E000",,status-playable,playable,2021-02-04 21:33:34.000 -"Marco & The Galaxy Dragon Demo",0100DA7017C9E000,gpu;status-ingame;demo,ingame,2023-06-03 13:05:33.000 -"Mario & Luigi: Brothership",01006D0017F7A000,status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00.000 -"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",010002C00C270000,status-ingame;crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55.000 -"Mario + Rabbids Kingdom Battle",010067300059A000,slow;status-playable;opengl-backend-bug,playable,2024-05-06 10:16:54.000 -"Mario + Rabbids® Sparks of Hope",0100317013770000,gpu;status-ingame;Needs Update,ingame,2024-06-20 19:56:19.000 -"Mario Golf: Super Rush",0100C9C00E25C000,gpu;status-ingame,ingame,2024-08-18 21:31:48.000 -"Mario Kart 8 Deluxe",0100152000022000,32-bit;status-playable;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17.000 -"Mario Kart Live: Home Circuit",0100ED100BA3A000,services;status-nothing;crash;Needs More Attention,nothing,2022-12-07 22:36:52.000 -"Mario Party Superstars",01006FE013472000,gpu;status-ingame;ldn-works;mac-bug,ingame,2024-05-16 11:23:34.000 -"Mario Strikers: Battle League Football",010019401051C000,status-boots;crash;nvdec,boots,2024-05-07 06:23:56.000 -"Mario Tennis Aces",0100BDE00862A000,gpu;status-ingame;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40.000 -"Mario vs. Donkey Kong",0100B99019412000,status-playable,playable,2024-05-04 21:22:39.000 -"Mario vs. Donkey Kong™ Demo",0100D9E01DBB0000,status-playable,playable,2024-02-18 10:40:06.000 -"Mark of the Ninja Remastered",01009A700A538000,status-playable,playable,2022-08-04 15:48:30.000 -"Marooners",010044600FDF0000,status-playable;nvdec;online-broken,playable,2022-10-18 21:35:26.000 -"Marvel Ultimate Alliance 3: The Black Order",010060700AC50000,status-playable;nvdec;ldn-untested,playable,2024-02-14 19:51:51.000 -"Mary Skelter 2",01003DE00C95E000,status-ingame;crash;regression,ingame,2023-09-12 07:37:28.000 -"Masquerada: Songs and Shadows",0100113008262000,status-playable,playable,2022-09-20 15:18:54.000 -"Master Detective Archives: Rain Code",01004800197F0000,gpu;status-ingame,ingame,2024-04-19 20:11:09.000 -"Masters of Anima",0100CC7009196000,status-playable;nvdec,playable,2022-08-04 16:00:09.000 -"Mathland",,status-playable,playable,2020-09-01 15:40:06.000 -"Max & The Book of Chaos",,status-playable,playable,2020-09-02 12:24:43.000 -"Max: The Curse Of Brotherhood",01001C9007614000,status-playable;nvdec,playable,2022-08-04 16:33:04.000 -"Maze",,status-playable,playable,2020-12-17 16:13:58.000 -"MEANDERS",0100EEF00CBC0000,UE4;gpu;status-ingame,ingame,2021-06-11 19:19:33.000 -"Mech Rage",,status-playable,playable,2020-11-18 12:30:16.000 -"Mecho Tales",0100C4F005EB4000,status-playable,playable,2022-08-04 17:03:19.000 -"Mechstermination Force",0100E4600D31A000,status-playable,playable,2024-07-04 05:39:15.000 -"Medarot Classics Plus Kabuto Ver",,status-playable,playable,2020-11-21 11:31:18.000 -"Medarot Classics Plus Kuwagata Ver",,status-playable,playable,2020-11-21 11:30:40.000 -"Mega Mall Story",0100BBC00CB9A000,slow;status-playable,playable,2022-08-04 17:10:58.000 -"Mega Man 11",0100B0C0086B0000,status-playable,playable,2021-04-26 12:07:53.000 -"Mega Man Battle Network Legacy Collection Vol. 2",0100734016266000,status-playable,playable,2023-08-03 18:04:32.000 -"Mega Man Legacy Collection Vol.1",01002D4007AE0000,gpu;status-ingame,ingame,2021-06-03 18:17:17.000 -"Mega Man X Legacy Collection",,audio;crash;services;status-menus,menus,2020-12-04 04:30:17.000 -"Megabyte Punch",,status-playable,playable,2020-10-16 14:07:18.000 -"Megadimension Neptunia VII",,32-bit;nvdec;status-playable,playable,2020-12-17 20:56:03.000 -"Megaman Battle Network Legacy Collection Vol 1",010038E016264000,status-playable,playable,2023-04-25 03:55:57.000 -"Megaman Legacy Collection 2",,status-playable,playable,2021-01-06 08:47:59.000 -"MEGAMAN ZERO/ZX LEGACY COLLECTION",010025C00D410000,status-playable,playable,2021-06-14 16:17:32.000 -"Megaquarium",010082B00E8B8000,status-playable,playable,2022-09-14 16:50:00.000 -"Megaton Rainfall",010005A00B312000,gpu;status-boots;opengl,boots,2022-08-04 18:29:43.000 -"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",0100EA100DF92000,32-bit;status-playable;nvdec,playable,2022-12-05 13:19:12.000 -"Mekorama",0100B360068B2000,gpu;status-boots,boots,2021-06-17 16:37:21.000 -"Melbits World",01000FA010340000,status-menus;nvdec;online,menus,2021-11-26 13:51:22.000 -"Melon Journey",0100F68019636000,status-playable,playable,2023-04-23 21:20:01.000 -"Memories Off -Innocent Fille- for Dearest",,status-playable,playable,2020-08-04 07:31:22.000 -"Memory Lane",010062F011E7C000,status-playable;UE4,playable,2022-10-05 14:31:03.000 -"Meow Motors",,UE4;gpu;status-ingame,ingame,2020-12-18 00:24:01.000 -"Mercenaries Saga Chronicles",,status-playable,playable,2021-01-10 12:48:19.000 -"Mercenaries Wings The False Phoenix",,crash;services;status-nothing,nothing,2020-05-08 22:42:12.000 -"Mercenary Kings",,online;status-playable,playable,2020-10-16 13:05:58.000 -"Merchants of Kaidan",0100E5000D3CA000,status-playable,playable,2021-04-15 11:44:28.000 -"METAGAL",,status-playable,playable,2020-06-05 00:05:48.000 -"Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3",010047F01AA10000,services-horizon;status-menus,menus,2024-07-24 06:34:06.000 -"METAL MAX Xeno Reborn",0100E8F00F6BE000,status-playable,playable,2022-12-05 15:33:53.000 -"Metaloid: Origin",,status-playable,playable,2020-06-04 20:26:35.000 -"Metamorphosis",010055200E87E000,UE4;audout;gpu;nvdec;status-ingame,ingame,2021-06-16 16:18:11.000 -"Metro 2033 Redux",0100D4900E82C000,gpu;status-ingame,ingame,2022-11-09 10:53:13.000 -"Metro: Last Light Redux",0100F0400E850000,slow;status-ingame;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52.000 -"Metroid Dread",010093801237C000,status-playable,playable,2023-11-13 04:02:36.000 -"Metroid Prime Remastered",010012101468C000,gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15.000 -"Midnight Evil",0100A1200F20C000,status-playable,playable,2022-10-18 22:55:19.000 -"Mighty Fight Federation",0100C1E0135E0000,online;status-playable,playable,2021-04-06 18:39:56.000 -"Mighty Goose",0100AD701344C000,status-playable;nvdec,playable,2022-10-28 20:25:38.000 -"Mighty Gunvolt Burst",,status-playable,playable,2020-10-19 16:05:49.000 -"Mighty Switch Force! Collection",010060D00AE36000,status-playable,playable,2022-10-28 20:40:32.000 -"Miitopia",01003DA010E8A000,gpu;services-horizon;status-ingame,ingame,2024-09-06 10:39:13.000 -"Miitopia Demo",01007DA0140E8000,services;status-menus;crash;demo,menus,2023-02-24 11:50:58.000 -"Miles & Kilo",,status-playable,playable,2020-10-22 11:39:49.000 -"Millie",0100976008FBE000,status-playable,playable,2021-01-26 20:47:19.000 -"MIND Path to Thalamus",0100F5700C9A8000,UE4;status-playable,playable,2021-06-16 17:37:25.000 -"Minecraft",0100D71004694000,status-ingame;crash;ldn-broken,ingame,2024-09-29 12:08:59.000 -"Minecraft - Nintendo Switch Edition",01006BD001E06000,status-playable;ldn-broken,playable,2023-10-15 01:47:08.000 -"Minecraft Dungeons",01006C100EC08000,status-playable;nvdec;online-broken;UE4,playable,2024-06-26 22:10:43.000 -"Minecraft Legends",01007C6012CC8000,gpu;status-ingame;crash,ingame,2024-03-04 00:32:24.000 -"Minecraft: Story Mode - Season Two",01003EF007ABA000,status-playable;online-broken,playable,2023-03-04 00:30:50.000 -"Minecraft: Story Mode - The Complete Adventure",010059C002AC2000,status-boots;crash;online-broken,boots,2022-08-04 18:56:58.000 -"Minefield",0100B7500F756000,status-playable,playable,2022-10-05 15:03:29.000 -"Mini Motor Racing X",01003560119A6000,status-playable,playable,2021-04-13 17:54:49.000 -"Mini Trains",,status-playable,playable,2020-07-29 23:06:20.000 -"Miniature - The Story Puzzle",010039200EC66000,status-playable;UE4,playable,2022-09-14 17:18:50.000 -"Ministry of Broadcast",010069200EB80000,status-playable,playable,2022-08-10 00:31:16.000 -"Minna de Wai Wai! Spelunker",0100C3F000BD8000,status-nothing;crash,nothing,2021-11-03 07:17:11.000 -"Minoria",0100FAE010864000,status-playable,playable,2022-08-06 18:50:50.000 -"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",01005AB015994000,gpu;status-playable,playable,2022-03-28 02:22:24.000 -"Missile Dancer",0100CFA0138C8000,status-playable,playable,2021-01-31 12:22:03.000 -"Missing Features 2D",0100E3601495C000,status-playable,playable,2022-10-28 20:52:54.000 -"Mist Hunter",010059200CC40000,status-playable,playable,2021-06-16 13:58:58.000 -"Mittelborg: City of Mages",,status-playable,playable,2020-08-12 19:58:06.000 -"MLB The Show 22 Tech Test",0100A9F01776A000,services;status-nothing;crash;Needs Update;demo,nothing,2022-12-09 10:28:34.000 -"MLB The Show 24",0100E2E01C32E000,services-horizon;status-nothing,nothing,2024-03-31 04:54:11.000 -"MLB® The Show™ 22",0100876015D74000,gpu;slow;status-ingame,ingame,2023-04-25 06:28:43.000 -"MLB® The Show™ 23",0100913019170000,gpu;status-ingame,ingame,2024-07-26 00:56:50.000 -"MO:Astray",,crash;status-ingame,ingame,2020-12-11 21:45:44.000 -"Moai VI: Unexpected Guests",,slow;status-playable,playable,2020-10-27 16:40:20.000 -"Modern Combat Blackout",0100D8700B712000,crash;status-nothing,nothing,2021-03-29 19:47:15.000 -"Modern Tales: Age of Invention",010004900D772000,slow;status-playable,playable,2022-10-12 11:20:19.000 -"Moero Chronicle Hyper",0100B8500D570000,32-bit;status-playable,playable,2022-08-11 07:21:56.000 -"Moero Crystal H",01004EB0119AC000,32-bit;status-playable;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22.000 -"MOFUMOFU Sensen",0100B46017500000,gpu;status-menus,menus,2024-09-21 21:51:08.000 -"Momodora: Revere Under the Moonlight",01004A400C320000,deadlock;status-nothing,nothing,2022-02-06 03:47:43.000 -"Momonga Pinball Adventures",01002CC00BC4C000,status-playable,playable,2022-09-20 16:00:40.000 -"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",010093100DA04000,gpu;status-ingame,ingame,2023-09-22 10:21:46.000 -"MONKEY BARRELS",0100FBD00ED24000,status-playable,playable,2022-09-14 17:28:52.000 -"Monkey King: Master of the Clouds",,status-playable,playable,2020-09-28 22:35:48.000 -"Monomals",01003030161DC000,gpu;status-ingame,ingame,2024-08-06 22:02:51.000 -"Mononoke Slashdown",0100F3A00FB78000,status-menus;crash,menus,2022-05-04 20:55:47.000 -"Monopoly for Nintendo Switch",01007430037F6000,status-playable;nvdec;online-broken,playable,2024-02-06 23:13:01.000 -"Monopoly Madness",01005FF013DC2000,status-playable,playable,2022-01-29 21:13:52.000 -"Monster Blast",0100E2D0128E6000,gpu;status-ingame,ingame,2023-09-02 20:02:32.000 -"Monster Boy and the Cursed Kingdom",01006F7001D10000,status-playable;nvdec,playable,2022-08-04 20:06:32.000 -"Monster Bugs Eat People",,status-playable,playable,2020-07-26 02:05:34.000 -"Monster Energy Supercross - The Official Videogame",0100742007266000,status-playable;nvdec;UE4,playable,2022-08-04 20:25:00.000 -"Monster Energy Supercross - The Official Videogame 2",0100F8100B982000,status-playable;nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24.000 -"Monster Energy Supercross - The Official Videogame 3",010097800EA20000,UE4;audout;nvdec;online;status-playable,playable,2021-06-14 12:37:54.000 -"Monster Farm",0100E9900ED74000,32-bit;nvdec;status-playable,playable,2021-05-05 19:29:13.000 -"Monster Hunter Generation Ultimate",0100770008DD8000,32-bit;status-playable;online-broken;ldn-works,playable,2024-03-18 14:35:36.000 -"Monster Hunter Rise",0100B04011742000,gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59.000 -"Monster Hunter Rise Demo",010093A01305C000,status-playable;online-broken;ldn-works;demo,playable,2022-10-18 23:04:17.000 -"Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600",,services;status-ingame,ingame,2022-07-10 19:27:30.000 -"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",010042501329E000,status-playable;demo,playable,2022-11-13 22:20:26.000 -"Monster Hunter XX Demo",,32-bit;cpu;status-nothing,nothing,2020-03-22 10:12:28.000 -"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",0100C3800049C000,status-playable,playable,2024-07-21 14:08:09.000 -"MONSTER JAM CRUSH IT!™",010088400366E000,UE4;nvdec;online;status-playable,playable,2021-04-08 19:29:27.000 -"Monster Jam Steel Titans",010095C00F354000,status-menus;crash;nvdec;UE4,menus,2021-11-14 09:45:38.000 -"Monster Jam Steel Titans 2",010051B0131F0000,status-playable;nvdec;UE4,playable,2022-10-24 17:17:59.000 -"Monster Puzzle",,status-playable,playable,2020-09-28 22:23:10.000 -"Monster Sanctuary",,crash;status-ingame,ingame,2021-04-04 05:06:41.000 -"Monster Truck Championship",0100D30010C42000,slow;status-playable;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51.000 -"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",01004E10142FE000,crash;status-ingame,ingame,2021-07-23 10:56:44.000 -"Monstrum",010039F00EF70000,status-playable,playable,2021-01-31 11:07:26.000 -"Moonfall Ultimate",,nvdec;status-playable,playable,2021-01-17 14:01:25.000 -"Moorhuhn Jump and Run Traps and Treasures",0100E3D014ABC000,status-playable,playable,2024-03-08 15:10:02.000 -"Moorkuhn Kart 2",010045C00F274000,status-playable;online-broken,playable,2022-10-28 21:10:35.000 -"Morbid: The Seven Acolytes",010040E00F642000,status-playable,playable,2022-08-09 17:21:58.000 -"More Dark",,status-playable,playable,2020-12-15 16:01:06.000 -"Morphies Law",,UE4;crash;ldn-untested;nvdec;online;status-menus,menus,2020-11-22 17:05:29.000 -"Morphite",,status-playable,playable,2021-01-05 19:40:55.000 -"Mortal Kombat 1",01006560184E6000,gpu;status-ingame,ingame,2024-09-04 15:45:47.000 -"Mortal Kombat 11",0100F2200C984000,slow;status-ingame;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17.000 -"Mosaic",,status-playable,playable,2020-08-11 13:07:35.000 -"Moto GP 24",010040401D564000,gpu;status-ingame,ingame,2024-05-10 23:41:00.000 -"Moto Racer 4",01002ED00B01C000,UE4;nvdec;online;status-playable,playable,2021-04-08 19:09:11.000 -"Moto Rush GT",01003F200D0F2000,status-playable,playable,2022-08-05 11:23:55.000 -"MotoGP 18",0100361007268000,status-playable;nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45.000 -"MotoGP 19",01004B800D0E8000,status-playable;nvdec;online-broken;UE4,playable,2022-08-05 11:54:14.000 -"MotoGP 20",01001FA00FBBC000,status-playable;ldn-untested,playable,2022-09-29 17:58:01.000 -"MotoGP 21",01000F5013820000,gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08.000 -"Motorsport Manager for Nintendo Switch",01002A900D6D6000,status-playable;nvdec,playable,2022-08-05 12:48:14.000 -"Mountain Rescue Simulator",01009DB00D6E0000,status-playable,playable,2022-09-20 16:36:48.000 -"Moving Out",0100C4C00E73E000,nvdec;status-playable,playable,2021-06-07 21:17:24.000 -"Mr Blaster",0100D3300F110000,status-playable,playable,2022-09-14 17:56:24.000 -"Mr. DRILLER DrillLand",,nvdec;status-playable,playable,2020-07-24 13:56:48.000 -"Mr. Shifty",,slow;status-playable,playable,2020-05-08 15:28:16.000 -"Ms. Splosion Man",,online;status-playable,playable,2020-05-09 20:45:43.000 -"Muddledash",,services;status-ingame,ingame,2020-05-08 16:46:14.000 -"MudRunner - American Wilds",01009D200952E000,gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52.000 -"Mugsters",010073E008E6E000,status-playable,playable,2021-01-28 17:57:17.000 -"MUJO",,status-playable,playable,2020-05-08 16:31:04.000 -"Mulaka",0100211005E94000,status-playable,playable,2021-01-28 18:07:20.000 -"Mummy Pinball",010038B00B9AE000,status-playable,playable,2022-08-05 16:08:11.000 -"Muse Dash",,status-playable,playable,2020-06-06 14:41:29.000 -"Mushroom Quest",,status-playable,playable,2020-05-17 13:07:08.000 -"Mushroom Wars 2",,nvdec;status-playable,playable,2020-09-28 15:26:08.000 -"Music Racer",,status-playable,playable,2020-08-10 08:51:23.000 -"MUSNYX",,status-playable,playable,2020-05-08 14:24:43.000 -"Musou Orochi 2 Ultimate",,crash;nvdec;status-boots,boots,2021-04-09 19:39:16.000 -"Must Dash Amigos",0100F6000EAA8000,status-playable,playable,2022-09-20 16:45:56.000 -"Mutant Football League Dynasty Edition",0100C3E00ACAA000,status-playable;online-broken,playable,2022-08-05 17:01:51.000 -"Mutant Mudds Collection",01004BE004A86000,status-playable,playable,2022-08-05 17:11:38.000 -"Mutant Year Zero: Road to Eden",0100E6B00DEA4000,status-playable;nvdec;UE4,playable,2022-09-10 13:31:10.000 -"MX Nitro",0100161009E5C000,status-playable,playable,2022-09-27 22:34:33.000 -"MX vs ATV All Out",0100218011E7E000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46.000 -"MXGP3 - The Official Motocross Videogame",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 14:00:20.000 -"My Aunt is a Witch",01002C6012334000,status-playable,playable,2022-10-19 09:21:17.000 -"My Butler",,status-playable,playable,2020-06-27 13:46:23.000 -"My Friend Pedro: Blood Bullets Bananas",010031200B94C000,nvdec;status-playable,playable,2021-05-28 11:19:17.000 -"My Girlfriend is a Mermaid!?",,nvdec;status-playable,playable,2020-05-08 13:32:55.000 -"MY HERO ONE'S JUSTICE",,UE4;crash;gpu;online;status-menus,menus,2020-12-10 13:11:04.000 -"MY HERO ONE'S JUSTICE 2",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-18 14:08:47.000 -"My Hidden Things",0100E4701373E000,status-playable,playable,2021-04-15 11:26:06.000 -"My Little Dog Adventure",,gpu;status-ingame,ingame,2020-12-10 17:47:37.000 -"My Little Riding Champion",,slow;status-playable,playable,2020-05-08 17:00:53.000 -"My Lovely Daughter",010086B00C784000,status-playable,playable,2022-11-24 17:25:32.000 -"My Memory of Us",0100E7700C284000,status-playable,playable,2022-08-20 11:03:14.000 -"My Riding Stables - Life with Horses",010028F00ABAE000,status-playable,playable,2022-08-05 21:39:07.000 -"My Riding Stables 2: A New Adventure",010042A00FBF0000,status-playable,playable,2021-05-16 14:14:59.000 -"My Time At Portia",0100E25008E68000,status-playable,playable,2021-05-28 12:42:55.000 -"My Universe - Cooking Star Restaurant",0100CD5011A02000,status-playable,playable,2022-10-19 10:00:44.000 -"My Universe - Fashion Boutique",0100F71011A0A000,status-playable;nvdec,playable,2022-10-12 14:54:19.000 -"My Universe - Pet Clinic Cats & Dogs",0100CD5011A02000,status-boots;crash;nvdec,boots,2022-02-06 02:05:53.000 -"My Universe - School Teacher",01006C301199C000,nvdec;status-playable,playable,2021-01-21 16:02:52.000 -"n Verlore Verstand",,slow;status-ingame,ingame,2020-12-10 18:00:28.000 -"n Verlore Verstand - Demo",01009A500E3DA000,status-playable,playable,2021-02-09 00:13:32.000 -"N++",01000D5005974000,status-playable,playable,2022-08-05 21:54:58.000 -"NAIRI: Tower of Shirin",,nvdec;status-playable,playable,2020-08-09 19:49:12.000 -"NAMCO MUSEUM",010002F001220000,status-playable;ldn-untested,playable,2024-08-13 07:52:21.000 -"NAMCO MUSEUM ARCADE PAC",0100DAA00AEE6000,status-playable,playable,2021-06-07 21:44:50.000 -"NAMCOT COLLECTION",,audio;status-playable,playable,2020-06-25 13:35:22.000 -"Narcos: Rise of the Cartels",010072B00BDDE000,UE4;crash;nvdec;status-boots,boots,2021-03-22 13:18:47.000 -"NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO",010084D00CF5E000,status-playable,playable,2024-06-29 13:04:22.000 -"NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst",01006BB00800A000,status-playable;nvdec,playable,2024-06-16 14:58:05.000 -"NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS",0100D2D0190A4000,services-horizon;status-nothing,nothing,2024-07-25 05:16:48.000 -"NARUTO™: Ultimate Ninja® STORM",0100715007354000,status-playable;nvdec,playable,2022-08-06 14:10:31.000 -"NASCAR Rivals",0100545016D5E000,status-ingame;crash;Incomplete,ingame,2023-04-21 01:17:47.000 -"Naught",0100103011894000,UE4;status-playable,playable,2021-04-26 13:31:45.000 -"NBA 2K Playgrounds 2",01001AE00C1B2000,status-playable;nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38.000 -"NBA 2K18",0100760002048000,gpu;status-ingame;ldn-untested,ingame,2022-08-06 14:17:51.000 -"NBA 2K19",01001FF00B544000,crash;ldn-untested;services;status-nothing,nothing,2021-04-16 13:07:21.000 -"NBA 2K21",0100E24011D1E000,gpu;status-boots,boots,2022-10-05 15:31:51.000 -"NBA 2K23",0100ACA017E4E800,status-boots,boots,2023-10-10 23:07:14.000 -"NBA 2K24",010006501A8D8000,cpu;gpu;status-boots,boots,2024-08-11 18:23:08.000 -"NBA Playgrounds",0100F5A008126000,status-playable;nvdec;online-broken;UE4,playable,2022-08-06 16:13:44.000 -"NBA Playgrounds",010002900294A000,status-playable;nvdec;online-broken;UE4,playable,2022-08-06 17:06:59.000 -"Need a Packet?",,status-playable,playable,2020-08-12 16:09:01.000 -"Need for Speed Hot Pursuit Remastered",010029B0118E8000,status-playable;online-broken,playable,2024-03-20 21:58:02.000 -"Need For Speed Hot Pursuit Remastered",,audio;online;slow;status-ingame,ingame,2020-10-27 17:46:58.000 -"Nefarious",,status-playable,playable,2020-12-17 03:20:33.000 -"Negative",01008390136FC000,nvdec;status-playable,playable,2021-03-24 11:29:41.000 -"Neighbours back From Hell",010065F00F55A000,status-playable;nvdec,playable,2022-10-12 15:36:48.000 -"Nekopara Vol.1",0100B4900AD3E000,status-playable;nvdec,playable,2022-08-06 18:25:54.000 -"Nekopara Vol.2",,status-playable,playable,2020-12-16 11:04:47.000 -"Nekopara Vol.3",010045000E418000,status-playable,playable,2022-10-03 12:49:04.000 -"Nekopara Vol.4",,crash;status-ingame,ingame,2021-01-17 01:47:18.000 -"Nelke & the Legendary Alchemists ~Ateliers of the New World~",01006ED00BC76000,status-playable,playable,2021-01-28 19:39:42.000 -"Nelly Cootalot",,status-playable,playable,2020-06-11 20:55:42.000 -"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",01001AB0141A8000,crash;status-ingame,ingame,2021-07-18 07:29:18.000 -"Neo Cab",0100EBB00D2F4000,status-playable,playable,2021-04-24 00:27:58.000 -"Neo Cab Demo",,crash;status-boots,boots,2020-06-16 00:14:00.000 -"NEOGEO POCKET COLOR SELECTION Vol.1",010006D0128B4000,status-playable,playable,2023-07-08 20:55:36.000 -"Neon Abyss",0100BAB01113A000,status-playable,playable,2022-10-05 15:59:44.000 -"Neon Chrome",010075E0047F8000,status-playable,playable,2022-08-06 18:38:34.000 -"Neon Drive",010032000EAC6000,status-playable,playable,2022-09-10 13:45:48.000 -"Neon White",0100B9201406A000,status-ingame;crash,ingame,2023-02-02 22:25:06.000 -"Neonwall",0100743008694000,status-playable;nvdec,playable,2022-08-06 18:49:52.000 -"Neoverse Trinity Edition - 01001A20133E000",,status-playable,playable,2022-10-19 10:28:03.000 -"Nerdook Bundle Vol. 1",,gpu;slow;status-ingame,ingame,2020-10-07 14:27:10.000 -"Nerved",01008B0010160000,status-playable;UE4,playable,2022-09-20 17:14:03.000 -"NeuroVoider",,status-playable,playable,2020-06-04 18:20:05.000 -"Nevaeh",0100C20012A54000,gpu;nvdec;status-ingame,ingame,2021-06-16 17:29:03.000 -"Never Breakup",010039801093A000,status-playable,playable,2022-10-05 16:12:12.000 -"Neverending Nightmares",0100F79012600000,crash;gpu;status-boots,boots,2021-04-24 01:43:35.000 -"Neverlast",,slow;status-ingame,ingame,2020-07-13 23:55:19.000 -"Neverwinter Nights: Enhanced Edition",010013700DA4A000,gpu;status-menus;nvdec,menus,2024-09-30 02:59:19.000 -"New Frontier Days -Founding Pioneers-",,status-playable,playable,2020-12-10 12:45:07.000 -"New Pokémon Snap",0100F4300BF2C000,status-playable,playable,2023-01-15 23:26:57.000 -"New Super Lucky's Tale",010017700B6C2000,status-playable,playable,2024-03-11 14:14:10.000 -"New Super Mario Bros. U Deluxe",0100EA80032EA000,32-bit;status-playable,playable,2023-10-08 02:06:37.000 -"Newt One",,status-playable,playable,2020-10-17 21:21:48.000 -"Nexomon: Extinction",,status-playable,playable,2020-11-30 15:02:22.000 -"Nexoria: Dungeon Rogue Heroes",0100B69012EC6000,gpu;status-ingame,ingame,2021-10-04 18:41:29.000 -"Next Up Hero",,online;status-playable,playable,2021-01-04 22:39:36.000 -"Ni No Kuni Wrath of the White Witch",0100E5600D446000,status-boots;32-bit;nvdec,boots,2024-07-12 04:52:59.000 -"Nice Slice",,nvdec;status-playable,playable,2020-06-17 15:13:27.000 -"Niche - a genetics survival game",,nvdec;status-playable,playable,2020-11-27 14:01:11.000 -"Nickelodeon All-Star Brawl 2",010010701AFB2000,status-playable,playable,2024-06-03 14:15:01.000 -"Nickelodeon Kart Racers",,status-playable,playable,2021-01-07 12:16:49.000 -"Nickelodeon Paw Patrol: On a Roll",0100CEC003A4A000,nvdec;status-playable,playable,2021-01-28 21:14:49.000 -"Nicky: The Home Alone Golf Ball",,status-playable,playable,2020-08-08 13:45:39.000 -"Nicole",0100A95012668000,status-playable;audout,playable,2022-10-05 16:41:44.000 -"NieR:Automata The End of YoRHa Edition",0100B8E016F76000,slow;status-ingame;crash,ingame,2024-05-17 01:06:34.000 -"Night Call",0100F3A0095A6000,status-playable;nvdec,playable,2022-10-03 12:57:00.000 -"Night in the Woods",0100921006A04000,status-playable,playable,2022-12-03 20:17:54.000 -"Night Trap - 25th Anniversary Edition",0100D8500A692000,status-playable;nvdec,playable,2022-08-08 13:16:14.000 -"Nightmare Boy",,status-playable,playable,2021-01-05 15:52:29.000 -"Nightmares from the Deep 2: The Siren's Call",01006E700B702000,status-playable;nvdec,playable,2022-10-19 10:58:53.000 -"Nights of Azure 2: Bride of the New Moon",0100628004BCE000,status-menus;crash;nvdec;regression,menus,2022-11-24 16:00:39.000 -"Nightshade",,nvdec;status-playable,playable,2020-05-10 19:43:31.000 -"Nihilumbra",,status-playable,playable,2020-05-10 16:00:12.000 -"Nine Parchments",0100D03003F0E000,status-playable;ldn-untested,playable,2022-08-07 12:32:08.000 -"NINJA GAIDEN 3: Razor's Edge",01002AF014F4C000,status-playable;nvdec,playable,2023-08-11 08:25:31.000 -"Ninja Gaiden Sigma",0100E2F014F46000,status-playable;nvdec,playable,2022-11-13 16:27:02.000 -"Ninja Gaiden Sigma 2 - 0100696014FA000",,status-playable;nvdec,playable,2024-07-31 21:53:48.000 -"Ninja Shodown",,status-playable,playable,2020-05-11 12:31:21.000 -"Ninja Striker",,status-playable,playable,2020-12-08 19:33:29.000 -"Ninjala",0100CCD0073EA000,status-boots;online-broken;UE4,boots,2024-07-03 20:04:49.000 -"Ninjin: Clash of Carrots",010003C00B868000,status-playable;online-broken,playable,2024-07-10 05:12:26.000 -"NinNinDays",0100746010E4C000,status-playable,playable,2022-11-20 15:17:29.000 -"Nintendo 64 - Nintendo Switch Online",0100C9A00ECE6000,gpu;status-ingame;vulkan,ingame,2024-04-23 20:21:07.000 -"Nintendo Entertainment System - Nintendo Switch Online",0100D870045B6000,status-playable;online,playable,2022-07-01 15:45:06.000 -"Nintendo Labo - Toy-Con 01: Variety Kit",0100C4B0034B2000,gpu;status-ingame,ingame,2022-08-07 12:56:07.000 -"Nintendo Labo Toy-Con 02: Robot Kit",01009AB0034E0000,gpu;status-ingame,ingame,2022-08-07 13:03:19.000 -"Nintendo Labo Toy-Con 03: Vehicle Kit",01001E9003502000,services;status-menus;crash,menus,2022-08-03 17:20:11.000 -"Nintendo Labo Toy-Con 04: VR Kit",0100165003504000,services;status-boots;crash,boots,2023-01-17 22:30:24.000 -"Nintendo Switch Sports",0100D2F00D5C0000,deadlock;status-boots,boots,2024-09-10 14:20:24.000 -"Nintendo Switch Sports Online Play Test",01000EE017182000,gpu;status-ingame,ingame,2022-03-16 07:44:12.000 -"Nippon Marathon",010037200C72A000,nvdec;status-playable,playable,2021-01-28 20:32:46.000 -"Nirvana Pilot Yume",010020901088A000,status-playable,playable,2022-10-29 11:49:49.000 -"No Heroes Here",,online;status-playable,playable,2020-05-10 02:41:57.000 -"No Man’s Sky",0100853015E86000,gpu;status-ingame,ingame,2024-07-25 05:18:17.000 -"No More Heroes",0100F0400F202000,32-bit;status-playable,playable,2022-09-13 07:44:27.000 -"No More Heroes 2 Desperate Struggle",010071400F204000,32-bit;status-playable;nvdec,playable,2022-11-19 01:38:13.000 -"No More Heroes 3",01007C600EB42000,gpu;status-ingame;UE4,ingame,2024-03-11 17:06:19.000 -"No Straight Roads",01009F3011004000,status-playable;nvdec,playable,2022-10-05 17:01:38.000 -"NO THING",,status-playable,playable,2021-01-04 19:06:01.000 -"Nongunz: Doppelganger Edition",0100542012884000,status-playable,playable,2022-10-29 12:00:39.000 -"Norman's Great Illusion",,status-playable,playable,2020-12-15 19:28:24.000 -"Norn9 ~Norn + Nonette~ LOFN",01001A500AD6A000,status-playable;nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16.000 -"NORTH",,nvdec;status-playable,playable,2021-01-05 16:17:44.000 -"Northgard",0100A9E00D97A000,status-menus;crash,menus,2022-02-06 02:05:35.000 -"nOS new Operating System",01008AE019614000,status-playable,playable,2023-03-22 16:49:08.000 -"NOT A HERO",0100CB800B07E000,status-playable,playable,2021-01-28 19:31:24.000 -"Not Not a Brain Buster",,status-playable,playable,2020-05-10 02:05:26.000 -"Not Tonight",0100DAF00D0E2000,status-playable;nvdec,playable,2022-10-19 11:48:47.000 -"Nubarron: The adventure of an unlucky gnome",,status-playable,playable,2020-12-17 16:45:17.000 -"Nuclien",,status-playable,playable,2020-05-10 05:32:55.000 -"Numbala",,status-playable,playable,2020-05-11 12:01:07.000 -"Number Place 10000",010020500C8C8000,gpu;status-menus,menus,2021-11-24 09:14:23.000 -"Nurse Love Syndrome",010003701002C000,status-playable,playable,2022-10-13 10:05:22.000 -"nx-hbmenu",0000000000000000,status-boots;Needs Update;homebrew,boots,2024-04-06 22:05:32.000 -"nxquake2",,services;status-nothing;crash;homebrew,nothing,2022-08-04 23:14:04.000 -"Nyan Cat: Lost in Space",010049F00EC30000,online;status-playable,playable,2021-06-12 13:22:03.000 -"O---O",01002E6014FC4000,status-playable,playable,2022-10-29 12:12:14.000 -"OBAKEIDORO!",,nvdec;online;status-playable,playable,2020-10-16 16:57:34.000 -"Observer",01002A000C478000,UE4;gpu;nvdec;status-ingame,ingame,2021-03-03 20:19:45.000 -"Oceanhorn",,status-playable,playable,2021-01-05 13:55:22.000 -"Oceanhorn 2 Knights of the Lost Realm",01006CB010840000,status-playable,playable,2021-05-21 18:26:10.000 -"Octocopter: Double or Squids",,status-playable,playable,2021-01-06 01:30:16.000 -"Octodad Dadliest Catch",0100CAB006F54000,crash;status-boots,boots,2021-04-23 15:26:12.000 -"Octopath Traveler",,UE4;crash;gpu;status-ingame,ingame,2020-08-31 02:34:36.000 -"Octopath Traveler II",0100A3501946E000,gpu;status-ingame;amd-vendor-bug,ingame,2024-09-22 11:39:20.000 -"Odallus",010084300C816000,status-playable,playable,2022-08-08 12:37:58.000 -"Oddworld: Munch's Oddysee",0100BB500EE3C000,gpu;nvdec;status-ingame,ingame,2021-06-17 12:11:50.000 -"Oddworld: New 'n' Tasty",01005E700ABB8000,nvdec;status-playable,playable,2021-06-17 17:51:32.000 -"Oddworld: Soulstorm",0100D210177C6000,services-horizon;status-boots;crash,boots,2024-08-18 13:13:26.000 -"Oddworld: Stranger's Wrath HD",01002EA00ABBA000,status-menus;crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21.000 -"Odium to the Core",,gpu;status-ingame,ingame,2021-01-08 14:03:52.000 -"Off And On Again",01006F5013202000,status-playable,playable,2022-10-29 19:46:26.000 -"Offroad Racing",01003CD00E8BC000,status-playable;online-broken;UE4,playable,2022-09-14 18:53:22.000 -"Oh My Godheads: Party Edition",01003B900AE12000,status-playable,playable,2021-04-15 11:04:11.000 -"Oh...Sir! The Hollywood Roast",,status-ingame,ingame,2020-12-06 00:42:30.000 -"OK K.O.! Let's Play Heroes",,nvdec;status-playable,playable,2021-01-11 18:41:02.000 -"OKAMI HD",0100276009872000,status-playable;nvdec,playable,2024-04-05 06:24:58.000 -"OkunoKA",01006AB00BD82000,status-playable;online-broken,playable,2022-08-08 14:41:51.000 -"Old Man's Journey",0100CE2007A86000,nvdec;status-playable,playable,2021-01-28 19:16:52.000 -"Old School Musical",,status-playable,playable,2020-12-10 12:51:12.000 -"Old School Racer 2",,status-playable,playable,2020-10-19 12:11:26.000 -"OlliOlli: Switch Stance",0100E0200B980000,gpu;status-boots,boots,2024-04-25 08:36:37.000 -"Olympia Soiree",0100F9D00C186000,status-playable,playable,2022-12-04 21:07:12.000 -"OLYMPIC GAMES TOKYO 2020",,ldn-untested;nvdec;online;status-playable,playable,2021-01-06 01:20:24.000 -"Omega Labyrinth Life",01001D600E51A000,status-playable,playable,2021-02-23 21:03:03.000 -"Omega Vampire",,nvdec;status-playable,playable,2020-10-17 19:15:35.000 -"Omensight: Definitive Edition",,UE4;crash;nvdec;status-ingame,ingame,2020-07-26 01:45:14.000 -"OMG Zombies!",01006DB00D970000,32-bit;status-playable,playable,2021-04-12 18:04:45.000 -"OMORI",010014E017B14000,status-playable,playable,2023-01-07 20:21:02.000 -"Once Upon A Coma",,nvdec;status-playable,playable,2020-08-01 12:09:39.000 -"One More Dungeon",,status-playable,playable,2021-01-06 09:10:58.000 -"One Person Story",,status-playable,playable,2020-07-14 11:51:02.000 -"One Piece Pirate Warriors 3",,nvdec;status-playable,playable,2020-05-10 06:23:52.000 -"One Piece Unlimited World Red Deluxe Edition",,status-playable,playable,2020-05-10 22:26:32.000 -"ONE PIECE: PIRATE WARRIORS 4",01008FE00E2F6000,status-playable;online-broken;ldn-untested,playable,2022-09-27 22:55:46.000 -"Oneiros",0100463013246000,status-playable,playable,2022-10-13 10:17:22.000 -"OneWayTicket",,UE4;status-playable,playable,2020-06-20 17:20:49.000 -"Oniken",010057C00D374000,status-playable,playable,2022-09-10 14:22:38.000 -"Oniken: Unstoppable Edition",010037900C814000,status-playable,playable,2022-08-08 14:52:06.000 -"Onimusha: Warlords",,nvdec;status-playable,playable,2020-07-31 13:08:39.000 -"OniNaki",0100CF4011B2A000,nvdec;status-playable,playable,2021-02-27 21:52:42.000 -"oOo: Ascension",010074000BE8E000,status-playable,playable,2021-01-25 14:13:34.000 -"Operación Triunfo 2017",0100D5400BD90000,services;status-ingame;nvdec,ingame,2022-08-08 15:06:42.000 -"Operencia The Stolen Sun",01006CF00CFA4000,UE4;nvdec;status-playable,playable,2021-06-08 13:51:07.000 -"OPUS Collection",01004A200BE82000,status-playable,playable,2021-01-25 15:24:04.000 -"OPUS: The Day We Found Earth",010049C0075F0000,nvdec;status-playable,playable,2021-01-21 18:29:31.000 -"Ord.",,status-playable,playable,2020-12-14 11:59:06.000 -"Ori and the Blind Forest: Definitive Edition",010061D00DB74000,status-playable;nvdec;online-broken,playable,2022-09-14 19:58:13.000 -"Ori and the Blind Forest: Definitive Edition Demo",010005800F46E000,status-playable,playable,2022-09-10 14:40:12.000 -"Ori and the Will of the Wisps",01008DD013200000,status-playable,playable,2023-03-07 00:47:13.000 -"Orn: The Tiny Forest Sprite",,UE4;gpu;status-ingame,ingame,2020-08-07 14:25:30.000 -"Othercide",0100E5900F49A000,status-playable;nvdec,playable,2022-10-05 19:04:38.000 -"OTOKOMIZU",,status-playable,playable,2020-07-13 21:00:44.000 -"Otti house keeper",01006AF013A9E000,status-playable,playable,2021-01-31 12:11:24.000 -"OTTTD",,slow;status-ingame,ingame,2020-10-10 19:31:07.000 -"Our two Bedroom Story",010097F010FE6000,gpu;status-ingame;nvdec,ingame,2023-10-10 17:41:20.000 -"Our World Is Ended.",,nvdec;status-playable,playable,2021-01-19 22:46:57.000 -"Out Of The Box",01005A700A166000,status-playable,playable,2021-01-28 01:34:27.000 -"Outbreak: Endless Nightmares",0100A0D013464000,status-playable,playable,2022-10-29 12:35:49.000 -"Outbreak: Epidemic",0100C850130FE000,status-playable,playable,2022-10-13 10:27:31.000 -"Outbreak: Lost Hope",0100D9F013102000,crash;status-boots,boots,2021-04-26 18:01:23.000 -"Outbreak: The New Nightmare",0100B450130FC000,status-playable,playable,2022-10-19 15:42:07.000 -"Outbreak: The Nightmare Chronicles",01006EE013100000,status-playable,playable,2022-10-13 10:41:57.000 -"Outbuddies DX",0100B8900EFA6000,gpu;status-ingame,ingame,2022-08-04 22:39:24.000 -"Outlast",01008D4007A1E000,status-playable;nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26.000 -"Outlast 2",0100DE70085E8000,status-ingame;crash;nvdec,ingame,2022-01-22 22:28:05.000 -"Overcooked! 2",01006FD0080B2000,status-playable;ldn-untested,playable,2022-08-08 16:48:10.000 -"Overcooked! All You Can Eat",0100F28011892000,ldn-untested;online;status-playable,playable,2021-04-15 10:33:52.000 -"Overcooked! Special Edition",01009B900401E000,status-playable,playable,2022-08-08 20:48:52.000 -"Overlanders",0100D7F00EC64000,status-playable;nvdec;UE4,playable,2022-09-14 20:15:06.000 -"Overpass",01008EA00E816000,status-playable;online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47.000 -"Override 2 Super Mech League",0100647012F62000,status-playable;online-broken;UE4,playable,2022-10-19 15:56:04.000 -"Override: Mech City Brawl - Super Charged Mega Edition",01008A700F7EE000,status-playable;nvdec;online-broken;UE4,playable,2022-09-20 17:33:32.000 -"Overwatch®: Legendary Edition",0100F8600E21E000,deadlock;status-boots,boots,2022-09-14 20:22:22.000 -"OVERWHELM",01005F000CC18000,status-playable,playable,2021-01-21 18:37:18.000 -"Owlboy",,status-playable,playable,2020-10-19 14:24:45.000 -"PAC-MAN 99",0100AD9012510000,gpu;status-ingame;online-broken,ingame,2024-04-23 00:48:25.000 -"PAC-MAN CHAMPIONSHIP EDITION 2 PLUS",,status-playable,playable,2021-01-19 22:06:18.000 -"Paladins",011123900AEE0000,online;status-menus,menus,2021-01-21 19:21:37.000 -"PAN-PAN A tiny big adventure",0100F0D004CAE000,audout;status-playable,playable,2021-01-25 14:42:00.000 -"Pang Adventures",010083700B730000,status-playable,playable,2021-04-10 12:16:59.000 -"Pantsu Hunter",,status-playable,playable,2021-02-19 15:12:27.000 -"Panzer Dragoon: Remake",,status-playable,playable,2020-10-04 04:03:55.000 -"Panzer Paladin",01004AE0108E0000,status-playable,playable,2021-05-05 18:26:00.000 -"Paper Dolls Original",,UE4;crash;status-boots,boots,2020-07-13 20:26:21.000 -"Paper Mario The Origami King",0100A3900C3E2000,audio;status-playable;Needs Update,playable,2024-08-09 18:27:40.000 -"Paper Mario: The Thousand-Year Door",0100ECD018EBE000,gpu;status-ingame;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35.000 -"Paperbound Brawlers",01006AD00B82C000,status-playable,playable,2021-01-25 14:32:15.000 -"Paradigm Paradox",0100DC70174E0000,status-playable;vulkan-backend-bug,playable,2022-12-03 22:28:13.000 -"Paradise Killer",01007FB010DC8000,status-playable;UE4,playable,2022-10-05 19:33:05.000 -"Paranautical Activity",010063400B2EC000,status-playable,playable,2021-01-25 13:49:19.000 -"Part Time UFO",01006B5012B32000,status-ingame;crash,ingame,2023-03-03 03:13:05.000 -"Party Arcade",01007FC00A040000,status-playable;online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53.000 -"Party Golf",0100B8E00359E000,status-playable;nvdec,playable,2022-08-09 12:38:30.000 -"Party Hard 2",010022801217E000,status-playable;nvdec,playable,2022-10-05 20:31:48.000 -"Party Treats",,status-playable,playable,2020-07-02 00:05:00.000 -"Path of Sin: Greed",01001E500EA16000,status-menus;crash,menus,2021-11-24 08:00:00.000 -"Pato Box",010031F006E76000,status-playable,playable,2021-01-25 15:17:52.000 -"PAW Patrol: Grand Prix",0100360016800000,gpu;status-ingame,ingame,2024-05-03 16:16:11.000 -"Paw Patrol: Might Pups Save Adventure Bay!",01001F201121E000,status-playable,playable,2022-10-13 12:17:55.000 -"Pawapoke R",01000c4015030000,services-horizon;status-nothing,nothing,2024-05-14 14:28:32.000 -"Pawarumi",0100A56006CEE000,status-playable;online-broken,playable,2022-09-10 15:19:33.000 -"PAYDAY 2",0100274004052000,status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39.000 -"PBA Pro Bowling",010085700ABC8000,status-playable;nvdec;online-broken;UE4,playable,2022-09-14 23:00:49.000 -"PBA Pro Bowling 2021",0100F95013772000,status-playable;online-broken;UE4,playable,2022-10-19 16:46:40.000 -"PC Building Simulator",,status-playable,playable,2020-06-12 00:31:58.000 -"Peaky Blinders: Mastermind",010002100CDCC000,status-playable,playable,2022-10-19 16:56:35.000 -"Peasant Knight",,status-playable,playable,2020-12-22 09:30:50.000 -"Penny-Punching Princess",0100C510049E0000,status-playable,playable,2022-08-09 13:37:05.000 -"Penny's Big Breakaway",0100CA901AA9C000,status-playable;amd-vendor-bug,playable,2024-05-27 07:58:51.000 -"Perception",,UE4;crash;nvdec;status-menus,menus,2020-12-18 11:49:23.000 -"Perchang",010011700D1B2000,status-playable,playable,2021-01-25 14:19:52.000 -"Perfect Angle",010089F00A3B4000,status-playable,playable,2021-01-21 18:48:45.000 -"Perky Little Things",01005CD012DC0000,status-boots;crash;vulkan,boots,2024-08-04 07:22:46.000 -"Persephone",,status-playable,playable,2021-03-23 22:39:19.000 -"Perseverance",,status-playable,playable,2020-07-13 18:48:27.000 -"Persona 4 Golden",010062B01525C000,status-playable,playable,2024-08-07 17:48:07.000 -"Persona 5 Royal",01005CA01580E000,gpu;status-ingame,ingame,2024-08-17 21:45:15.000 -"Persona 5 Tactica",010087701B092000,status-playable,playable,2024-04-01 22:21:03.000 -"Persona 5: Scramble",,deadlock;status-boots,boots,2020-10-04 03:22:29.000 -"Persona 5: Strikers (US)",0100801011C3E000,status-playable;nvdec;mac-bug,playable,2023-09-26 09:36:01.000 -"Petoons Party",010044400EEAE000,nvdec;status-playable,playable,2021-03-02 21:07:58.000 -"PGA TOUR 2K21",010053401147C000,deadlock;status-ingame;nvdec,ingame,2022-10-05 21:53:50.000 -"Phantaruk",0100DDD00C0EA000,status-playable,playable,2021-06-11 18:09:54.000 -"PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE",0100063005C86000,audio;status-playable;nvdec,playable,2024-02-29 14:20:35.000 -"Phantom Doctrine",010096F00E5B0000,status-playable;UE4,playable,2022-09-15 10:51:50.000 -"Phantom Trigger",0100C31005A50000,status-playable,playable,2022-08-09 14:27:30.000 -"Phoenix Wright: Ace Attorney Trilogy",0100CB000A142000,status-playable,playable,2023-09-15 22:03:12.000 -"PHOGS!",,online;status-playable,playable,2021-01-18 15:18:37.000 -"Physical Contact: 2048",,slow;status-playable,playable,2021-01-25 15:18:32.000 -"Physical Contact: Speed",01008110036FE000,status-playable,playable,2022-08-09 14:40:46.000 -"Pianista: The Legendary Virtuoso",010077300A86C000,status-playable;online-broken,playable,2022-08-09 14:52:56.000 -"Picross Lord Of The Nazarick",010012100E8DC000,status-playable,playable,2023-02-08 15:54:56.000 -"Picross S2",,status-playable,playable,2020-10-15 12:01:40.000 -"Picross S3",,status-playable,playable,2020-10-15 11:55:27.000 -"Picross S4",,status-playable,playable,2020-10-15 12:33:46.000 -"Picross S5",0100AC30133EC000,status-playable,playable,2022-10-17 18:51:42.000 -"Picross S6",010025901432A000,status-playable,playable,2022-10-29 17:52:19.000 -"Picross S7",,status-playable,playable,2022-02-16 12:51:25.000 -"PictoQuest",010043B00E1CE000,status-playable,playable,2021-02-27 15:03:16.000 -"Piczle Lines DX",,UE4;crash;nvdec;status-menus,menus,2020-11-16 04:21:31.000 -"Piczle Lines DX 500 More Puzzles!",,UE4;status-playable,playable,2020-12-15 23:42:51.000 -"Pig Eat Ball",01000FD00D5CC000,services;status-ingame,ingame,2021-11-30 01:57:45.000 -"Pikmin 1",0100AA80194B0000,audio;status-ingame,ingame,2024-05-28 18:56:11.000 -"Pikmin 2",0100D680194B2000,gpu;status-ingame,ingame,2023-07-31 08:53:41.000 -"Pikmin 3 Deluxe",0100F4C009322000,gpu;status-ingame;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26.000 -"Pikmin 3 Deluxe Demo",01001CB0106F8000,32-bit;crash;demo;gpu;status-ingame,ingame,2021-06-16 18:38:07.000 -"Pikmin 4",0100B7C00933A000,gpu;status-ingame;crash;UE4,ingame,2024-08-26 03:39:08.000 -"Pikmin 4 Demo",0100E0B019974000,gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08.000 -"Pillars of Eternity",0100D6200E130000,status-playable,playable,2021-02-27 00:24:21.000 -"Pilot Sports",01007A500B0B2000,status-playable,playable,2021-01-20 15:04:17.000 -"Pinball FX",0100DA70186D4000,status-playable,playable,2024-05-03 17:09:11.000 -"Pinball FX3",0100DB7003828000,status-playable;online-broken,playable,2022-11-11 23:49:07.000 -"Pine",,slow;status-ingame,ingame,2020-07-29 16:57:39.000 -"Pinstripe",,status-playable,playable,2020-11-26 10:40:40.000 -"Piofiore: Episodio 1926",01002B20174EE000,status-playable,playable,2022-11-23 18:36:05.000 -"Piofiore: Fated Memories",,nvdec;status-playable,playable,2020-11-30 14:27:50.000 -"Pixel Game Maker Series Puzzle Pedestrians",0100EA2013BCC000,status-playable,playable,2022-10-24 20:15:50.000 -"Pixel Game Maker Series Werewolf Princess Kaguya",0100859013CE6000,crash;services;status-nothing,nothing,2021-03-26 00:23:07.000 -"Pixel Gladiator",,status-playable,playable,2020-07-08 02:41:26.000 -"Pixel Puzzle Makeout League",010000E00E612000,status-playable,playable,2022-10-13 12:34:00.000 -"PixelJunk Eden 2",,crash;status-ingame,ingame,2020-12-17 11:55:52.000 -"Pixeljunk Monsters 2",0100E4D00A690000,status-playable,playable,2021-06-07 03:40:01.000 -"Pizza Titan Ultra",01004A900C352000,nvdec;status-playable,playable,2021-01-20 15:58:42.000 -"Pizza Tower",05000FD261232000,status-ingame;crash,ingame,2024-09-16 00:21:56.000 -"Plague Road",0100FF8005EB2000,status-playable,playable,2022-08-09 15:27:14.000 -"Planescape: Torment and Icewind Dale: Enhanced Editions",010030B00C316000,cpu;status-boots;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26.000 -"PLANET ALPHA",,UE4;gpu;status-ingame,ingame,2020-12-16 14:42:20.000 -"Planet Cube Edge",01007EA019CFC000,status-playable,playable,2023-03-22 17:10:12.000 -"planetarian HD ~the reverie of a little planet~",,status-playable,playable,2020-10-17 20:26:20.000 -"Plantera",010087000428E000,status-playable,playable,2022-08-09 15:36:28.000 -"Plants vs. Zombies: Battle for Neighborville Complete Edition",0100C56010FD8000,gpu;audio;status-boots;crash,boots,2024-09-02 12:58:14.000 -"Ploid Saga",0100E5B011F48000,status-playable,playable,2021-04-19 16:58:45.000 -"Pode",01009440095FE000,nvdec;status-playable,playable,2021-01-25 12:58:35.000 -"Poi: Explorer Edition",010086F0064CE000,nvdec;status-playable,playable,2021-01-21 19:32:00.000 -"Poison Control",0100EB6012FD2000,status-playable,playable,2021-05-16 14:01:54.000 -"Pokémon Brilliant Diamond",0100000011D90000,gpu;status-ingame;ldn-works,ingame,2024-08-28 13:26:35.000 -"Pokémon Café Mix",010072400E04A000,status-playable,playable,2021-08-17 20:00:04.000 -"Pokémon HOME",,Needs Update;crash;services;status-menus,menus,2020-12-06 06:01:51.000 -"Pokémon Legends: Arceus",01001F5010DFA000,gpu;status-ingame;Needs Update;ldn-works,ingame,2024-09-19 10:02:02.000 -"Pokémon Mystery Dungeon Rescue Team DX",01003D200BAA2000,status-playable;mac-bug,playable,2024-01-21 00:16:32.000 -"Pokemon Quest",01005D100807A000,status-playable,playable,2022-02-22 16:12:32.000 -"Pokémon Scarlet",0100A3D008C5C000,gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29.000 -"Pokémon Shield",01008DB008C2C000,deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22.000 -"Pokémon Sword",0100ABF008968000,deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37.000 -"Pokémon Violet",01008F6008C5E000,gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48.000 -"Pokémon: Let's Go, Eevee!",0100187003A36000,status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04.000 -"Pokémon: Let's Go, Pikachu!",010003F003A34000,status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41.000 -"Pokémon: Let's Go, Pikachu! demo",01009AD008C4C000,slow;status-playable;demo,playable,2023-11-26 11:23:20.000 -"Pokkén Tournament DX",0100B3F000BE2000,status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08.000 -"Pokken Tournament DX Demo",010030D005AE6000,status-playable;demo;opengl-backend-bug,playable,2022-08-10 12:03:19.000 -"Polandball: Can Into Space!",,status-playable,playable,2020-06-25 15:13:26.000 -"Poly Bridge",,services;status-playable,playable,2020-06-08 23:32:41.000 -"Polygod",010017600B180000,slow;status-ingame;regression,ingame,2022-08-10 14:38:14.000 -"Polyroll",010074B00ED32000,gpu;status-boots,boots,2021-07-01 16:16:50.000 -"Ponpu",,status-playable,playable,2020-12-16 19:09:34.000 -"Pooplers",,status-playable,playable,2020-11-02 11:52:10.000 -"Port Royale 4",01007EF013CA0000,status-menus;crash;nvdec,menus,2022-10-30 14:34:06.000 -"Portal",01007BB017812000,status-playable,playable,2024-06-12 03:48:29.000 -"Portal 2",0100ABD01785C000,gpu;status-ingame,ingame,2023-02-20 22:44:15.000 -"Portal Dogs",,status-playable,playable,2020-09-04 12:55:46.000 -"Portal Knights",0100437004170000,ldn-untested;online;status-playable,playable,2021-05-27 19:29:04.000 -"Potata: Fairy Flower",,nvdec;status-playable,playable,2020-06-17 09:51:34.000 -"Potion Party",01000A4014596000,status-playable,playable,2021-05-06 14:26:54.000 -"Power Rangers: Battle for the Grid",,status-playable,playable,2020-06-21 16:52:42.000 -"Powerful Pro Baseball 2024-2025",0100D1C01C194000,gpu;status-ingame,ingame,2024-08-25 06:40:48.000 -"PowerSlave Exhumed",01008E100E416000,gpu;status-ingame,ingame,2023-07-31 23:19:10.000 -"Prehistoric Dude",,gpu;status-ingame,ingame,2020-10-12 12:38:48.000 -"Pretty Princess Magical Coordinate",,status-playable,playable,2020-10-15 11:43:41.000 -"Pretty Princess Party",01007F00128CC000,status-playable,playable,2022-10-19 17:23:58.000 -"Preventive Strike",010009300D278000,status-playable;nvdec,playable,2022-10-06 10:55:51.000 -"Prince of Persia: The Lost Crown",0100210019428000,status-ingame;crash,ingame,2024-06-08 21:31:58.000 -"Princess Peach: Showtime!",01007A3009184000,status-playable;UE4,playable,2024-09-21 13:39:45.000 -"Princess Peach: Showtime! Demo",010024701DC2E000,status-playable;UE4;demo,playable,2024-03-10 17:46:45.000 -"Prinny 2: Dawn of Operation Panties, Dood!",01008FA01187A000,32-bit;status-playable,playable,2022-10-13 12:42:58.000 -"Prinny Presents NIS Classics Volume 1",0100A6E01681C000,status-boots;crash;Needs Update,boots,2023-02-02 07:23:09.000 -"Prinny: Can I Really Be the Hero?",01007A0011878000,32-bit;status-playable;nvdec,playable,2023-10-22 09:25:25.000 -"PriPara: All Idol Perfect Stage",010007F00879E000,status-playable,playable,2022-11-22 16:35:52.000 -"Prison Architect",010029200AB1C000,status-playable,playable,2021-04-10 12:27:58.000 -"Prison City",0100C1801B914000,gpu;status-ingame,ingame,2024-03-01 08:19:33.000 -"Prison Princess",0100F4800F872000,status-playable,playable,2022-11-20 15:00:25.000 -"Professional Construction - The Simulation",0100A9800A1B6000,slow;status-playable,playable,2022-08-10 15:15:45.000 -"Professional Farmer: Nintendo Switch Edition",,slow;status-playable,playable,2020-12-16 13:38:19.000 -"Professor Lupo and his Horrible Pets",,status-playable,playable,2020-06-12 00:08:45.000 -"Professor Lupo: Ocean",0100D1F0132F6000,status-playable,playable,2021-04-14 16:33:33.000 -"Project Highrise: Architect's Edition",0100BBD00976C000,status-playable,playable,2022-08-10 17:19:12.000 -"Project Nimbus: Complete Edition",0100ACE00DAB6000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43.000 -"Project TRIANGLE STRATEGY Debut Demo",01002980140F6000,status-playable;UE4;demo,playable,2022-10-24 21:40:27.000 -"Project Warlock",,status-playable,playable,2020-06-16 10:50:41.000 -"Psikyo Collection Vol 1",,32-bit;status-playable,playable,2020-10-11 13:18:47.000 -"Psikyo Collection Vol. 3",0100A2300DB78000,status-ingame,ingame,2021-06-07 02:46:23.000 -"Psikyo Collection Vol.2",01009D400C4A8000,32-bit;status-playable,playable,2021-06-07 03:22:07.000 -"Psikyo Shooting Stars Alpha",01007A200F2E2000,32-bit;status-playable,playable,2021-04-13 12:03:43.000 -"Psikyo Shooting Stars Bravo",0100D7400F2E4000,32-bit;status-playable,playable,2021-06-14 12:09:07.000 -"PSYVARIAR DELTA",0100EC100A790000,nvdec;status-playable,playable,2021-01-20 13:01:46.000 -"Puchitto kurasutā",,Need-Update;crash;services;status-menus,menus,2020-07-04 16:44:28.000 -"Pulstario",0100861012474000,status-playable,playable,2022-10-06 11:02:01.000 -"Pumped BMX Pro",01009AE00B788000,status-playable;nvdec;online-broken,playable,2022-09-20 17:40:50.000 -"Pumpkin Jack",01006C10131F6000,status-playable;nvdec;UE4,playable,2022-10-13 12:52:32.000 -"PUSH THE CRATE",010016400F07E000,status-playable;nvdec;UE4,playable,2022-09-15 13:28:41.000 -"Push the Crate 2",0100B60010432000,UE4;gpu;nvdec;status-ingame,ingame,2021-06-10 14:20:01.000 -"Pushy and Pully in Blockland",,status-playable,playable,2020-07-04 11:44:41.000 -"Puyo Puyo Champions",,online;status-playable,playable,2020-06-19 11:35:08.000 -"Puyo Puyo Tetris 2",010038E011940000,status-playable;ldn-untested,playable,2023-09-26 11:35:25.000 -"Puzzle and Dragons GOLD",,slow;status-playable,playable,2020-05-13 15:09:34.000 -"Puzzle Bobble Everybubble!",010079E01A1E0000,audio;status-playable;ldn-works,playable,2023-06-10 03:53:40.000 -"Puzzle Book",,status-playable,playable,2020-09-28 13:26:01.000 -"Puzzle Box Maker",0100476004A9E000,status-playable;nvdec;online-broken,playable,2022-08-10 18:00:52.000 -"Pyramid Quest",0100A4E017372000,gpu;status-ingame,ingame,2023-08-16 21:14:52.000 -"Q-YO Blaster",,gpu;status-ingame,ingame,2020-06-07 22:36:53.000 -"Q.U.B.E. 2",010023600AA34000,UE4;status-playable,playable,2021-03-03 21:38:57.000 -"Qbics Paint",0100A8D003BAE000,gpu;services;status-ingame,ingame,2021-06-07 10:54:09.000 -"Quake",0100BA5012E54000,gpu;status-menus;crash,menus,2022-08-08 12:40:34.000 -"Quake II",010048F0195E8000,status-playable,playable,2023-08-15 03:42:14.000 -"QuakespasmNX",,status-nothing;crash;homebrew,nothing,2022-07-23 19:28:07.000 -"Quantum Replica",010045101288A000,status-playable;nvdec;UE4,playable,2022-10-30 21:17:22.000 -"Quarantine Circular",0100F1400BA88000,status-playable,playable,2021-01-20 15:24:15.000 -"Queen's Quest 4: Sacred Truce",0100DCF00F13A000,status-playable;nvdec,playable,2022-10-13 12:59:21.000 -"Quell Zen",0100492012378000,gpu;status-ingame,ingame,2021-06-11 15:59:53.000 -"Quest of Dungeons",01001DE005012000,status-playable,playable,2021-06-07 10:29:22.000 -"QuietMansion2",,status-playable,playable,2020-09-03 14:59:35.000 -"Quiplash 2 InterLASHional",0100AF100EE76000,status-playable;online-working,playable,2022-10-19 17:43:45.000 -"R-Type Dimensions EX",,status-playable,playable,2020-10-09 12:04:43.000 -"R-TYPE FINAL 2",0100F930136B6000,slow;status-ingame;nvdec;UE4,ingame,2022-10-30 21:46:29.000 -"R-TYPE FINAL 2 Demo",01007B0014300000,slow;status-ingame;nvdec;UE4;demo,ingame,2022-10-24 21:57:42.000 -"R.B.I. Baseball 17",0100B5A004302000,status-playable;online-working,playable,2022-08-11 11:55:47.000 -"R.B.I. Baseball 18",01005CC007616000,status-playable;nvdec;online-working,playable,2022-08-11 11:27:52.000 -"R.B.I. Baseball 19",0100FCB00BF40000,status-playable;nvdec;online-working,playable,2022-08-11 11:43:52.000 -"R.B.I. Baseball 20",010061400E7D4000,status-playable,playable,2021-06-15 21:16:29.000 -"R.B.I. Baseball 21",0100B4A0115CA000,status-playable;online-working,playable,2022-10-24 22:31:45.000 -"Rabi-Ribi",01005BF00E4DE000,status-playable,playable,2022-08-06 17:02:44.000 -"Race With Ryan",,UE4;gpu;nvdec;slow;status-ingame,ingame,2020-11-16 04:35:33.000 -"Rack N Ruin",,status-playable,playable,2020-09-04 15:20:26.000 -"RAD",010024400C516000,gpu;status-menus;crash;UE4,menus,2021-11-29 02:01:56.000 -"Rad Rodgers Radical Edition",010000600CD54000,status-playable;nvdec;online-broken,playable,2022-08-10 19:57:23.000 -"Radiation City",0100DA400E07E000,status-ingame;crash,ingame,2022-09-30 11:15:04.000 -"Radiation Island",01009E40095EE000,status-ingame;opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04.000 -"Radical Rabbit Stew",,status-playable,playable,2020-08-03 12:02:56.000 -"Radio Commander",0100BAD013B6E000,nvdec;status-playable,playable,2021-03-24 11:20:46.000 -"RADIO HAMMER STATION",01008FA00ACEC000,audout;status-playable,playable,2021-02-26 20:20:06.000 -"Raging Justice",01003D00099EC000,status-playable,playable,2021-06-03 14:06:50.000 -"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",01005CD013116000,status-playable,playable,2022-07-29 15:50:13.000 -"Raiden V: Director's Cut",01002B000D97E000,deadlock;status-boots;nvdec,boots,2024-07-12 07:31:46.000 -"Railway Empire",01002EE00DC02000,status-playable;nvdec,playable,2022-10-03 13:53:50.000 -"Rain City",,status-playable,playable,2020-10-08 16:59:03.000 -"Rain on Your Parade",0100BDD014232000,status-playable,playable,2021-05-06 19:32:04.000 -"Rain World",010047600BF72000,status-playable,playable,2023-05-10 23:34:08.000 -"Rainbows, toilets & unicorns",,nvdec;status-playable,playable,2020-10-03 18:08:18.000 -"Raji An Ancient Epic",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 10:05:25.000 -"Rapala Fishing: Pro Series",,nvdec;status-playable,playable,2020-12-16 13:26:53.000 -"Rascal Fight",,status-playable,playable,2020-10-08 13:23:30.000 -"Rawr-Off",,crash;nvdec;status-menus,menus,2020-07-02 00:14:44.000 -"Rayman Legends: Definitive Edition",01005FF002E2A000,status-playable;nvdec;ldn-works,playable,2023-05-27 18:33:07.000 -"Re:Turn - One Way Trip",0100F03011616000,status-playable,playable,2022-08-29 22:42:53.000 -"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",,gpu;status-boots;crash;nvdec;vulkan,boots,2023-03-07 21:27:24.000 -"Real Drift Racing",,status-playable,playable,2020-07-25 14:31:31.000 -"Real Heroes: Firefighter",010048600CC16000,status-playable,playable,2022-09-20 18:18:44.000 -"realMyst: Masterpiece Edition",,nvdec;status-playable,playable,2020-11-30 15:25:42.000 -"Reaper: Tale of a Pale Swordsman",,status-playable,playable,2020-12-12 15:12:23.000 -"Rebel Cops",0100D9B00E22C000,status-playable,playable,2022-09-11 10:02:53.000 -"Rebel Galaxy: Outlaw",0100CAA01084A000,status-playable;nvdec,playable,2022-12-01 07:44:56.000 -"Red Bow",0100CF600FF7A000,services;status-ingame,ingame,2021-11-29 03:51:34.000 -"Red Colony",0100351013A06000,status-playable,playable,2021-01-25 20:44:41.000 -"Red Dead Redemption",01007820196A6000,status-playable;amd-vendor-bug,playable,2024-09-13 13:26:13.000 -"Red Death",,status-playable,playable,2020-08-30 13:07:37.000 -"Red Faction Guerrilla Re-Mars-tered",010075000C608000,ldn-untested;nvdec;online;status-playable,playable,2021-06-07 03:02:13.000 -"Red Game Without a Great Name",,status-playable,playable,2021-01-19 21:42:35.000 -"Red Siren : Space Defense",010045400D73E000,UE4;status-playable,playable,2021-04-25 21:21:29.000 -"Red Wings - Aces of the Sky",,status-playable,playable,2020-06-12 01:19:53.000 -"Redeemer: Enhanced Edition",01000D100DCF8000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24.000 -"Redout: Space Assault",0100326010B98000,status-playable;UE4,playable,2022-10-19 23:04:35.000 -"Reel Fishing: Road Trip Adventure",010007C00E558000,status-playable,playable,2021-03-02 16:06:43.000 -"Reflection of Mine",,audio;status-playable,playable,2020-12-17 15:06:37.000 -"Refreshing Sideways Puzzle Ghost Hammer",,status-playable,playable,2020-10-18 12:08:54.000 -"Refunct",,UE4;status-playable,playable,2020-12-15 22:46:21.000 -"Regalia: Of Men and Monarchs - Royal Edition",0100FDF0083A6000,status-playable,playable,2022-08-11 12:24:01.000 -"Regions of Ruin",,status-playable,playable,2020-08-05 11:38:58.000 -"Reine des Fleurs",,cpu;crash;status-boots,boots,2020-09-27 18:50:39.000 -"REKT",,online;status-playable,playable,2020-09-28 12:33:56.000 -"Relicta",01002AD013C52000,status-playable;nvdec;UE4,playable,2022-10-31 12:48:33.000 -"Remi Lore",010095900B436000,status-playable,playable,2021-06-03 18:58:15.000 -"Remothered: Broken Porcelain",0100FBD00F5F6000,UE4;gpu;nvdec;status-ingame,ingame,2021-06-17 15:13:11.000 -"Remothered: Tormented Fathers",01001F100E8AE000,status-playable;nvdec;UE4,playable,2022-10-19 23:26:50.000 -"Rento Fortune Monolit",,ldn-untested;online;status-playable,playable,2021-01-19 19:52:21.000 -"Renzo Racer",01007CC0130C6000,status-playable,playable,2021-03-23 22:28:05.000 -"Rescue Tale",01003C400AD42000,status-playable,playable,2022-09-20 18:40:18.000 -"Resident Evil 4",010099A00BC1E000,status-playable;nvdec,playable,2022-11-16 21:16:04.000 -"Resident Evil 5",010018100CD46000,status-playable;nvdec,playable,2024-02-18 17:15:29.000 -"RESIDENT EVIL 6",01002A000CD48000,status-playable;nvdec,playable,2022-09-15 14:31:47.000 -"Resident Evil Revelations",0100643002136000,status-playable;nvdec;ldn-untested,playable,2022-08-11 12:44:19.000 -"RESIDENT EVIL REVELATIONS 2",010095300212A000,status-playable;online-broken;ldn-untested,playable,2022-08-11 12:57:50.000 -"Resolutiion",0100E7F00FFB8000,crash;status-boots,boots,2021-04-25 21:57:56.000 -"Restless Night [0100FF201568E000]",0100FF201568E000,status-nothing;crash,nothing,2022-02-09 10:54:49.000 -"Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000",0100069000078000,services;status-nothing;crash,nothing,2022-08-11 13:19:41.000 -"Retimed",010086E00BCB2000,status-playable,playable,2022-08-11 13:32:39.000 -"Retro City Rampage DX",,status-playable,playable,2021-01-05 17:04:17.000 -"Retrograde Arena",01000ED014A2C000,status-playable;online-broken,playable,2022-10-31 13:38:58.000 -"Return of the Obra Dinn",010032E00E6E2000,status-playable,playable,2022-09-15 19:56:45.000 -"Revenge of Justice",010027400F708000,status-playable;nvdec,playable,2022-11-20 15:43:23.000 -"Reventure",0100E2E00EA42000,status-playable,playable,2022-09-15 20:07:06.000 -"REZ PLZ",,status-playable,playable,2020-10-24 13:26:12.000 -"Rhythm Fighter",0100729012D18000,crash;status-nothing,nothing,2021-02-16 18:51:30.000 -"Rhythm of the Gods",,UE4;crash;status-nothing,nothing,2020-10-03 17:39:59.000 -"RICO",01009D5009234000,status-playable;nvdec;online-broken,playable,2022-08-11 20:16:40.000 -"Riddled Corpses EX",01002C700C326000,status-playable,playable,2021-06-06 16:02:44.000 -"Rift Keeper",0100AC600D898000,status-playable,playable,2022-09-20 19:48:20.000 -"RiME",,UE4;crash;gpu;status-boots,boots,2020-07-20 15:52:38.000 -"Rimelands",01006AC00EE6E000,status-playable,playable,2022-10-13 13:32:56.000 -"Ring Fit Adventure",01002FF008C24000,crash;services;status-nothing,nothing,2021-04-14 19:00:01.000 -"RIOT: Civil Unrest",010088E00B816000,status-playable,playable,2022-08-11 20:27:56.000 -"Riptide GP: Renegade",01002A6006AA4000,online;status-playable,playable,2021-04-13 23:33:02.000 -"Rise and Shine",,status-playable,playable,2020-12-12 15:56:43.000 -"Rise of Insanity",,status-playable,playable,2020-08-30 15:42:14.000 -"Rise: Race the Future",01006BA00E652000,status-playable,playable,2021-02-27 13:29:06.000 -"Rising Hell",010020C012F48000,status-playable,playable,2022-10-31 13:54:02.000 -"Risk",0100E8300A67A000,status-playable;nvdec;online-broken,playable,2022-08-01 18:53:28.000 -"Risk of Rain 2",010076D00E4BA000,status-playable;online-broken,playable,2024-03-04 17:01:05.000 -"Ritual",0100BD300F0EC000,status-playable,playable,2021-03-02 13:51:19.000 -"Ritual: Crown of Horns",010042500FABA000,status-playable,playable,2021-01-26 16:01:47.000 -"Rival Megagun",,nvdec;online;status-playable,playable,2021-01-19 14:01:46.000 -"RIVE: Ultimate Edition",,status-playable,playable,2021-03-24 18:45:55.000 -"River City Girls",,nvdec;status-playable,playable,2020-06-10 23:44:09.000 -"River City Girls 2",01002E80168F4000,status-playable,playable,2022-12-07 00:46:27.000 -"River City Melee Mach!!",0100B2100767C000,status-playable;online-broken,playable,2022-09-20 20:51:57.000 -"RMX Real Motocross",,status-playable,playable,2020-10-08 21:06:15.000 -"Road Redemption",010053000B986000,status-playable;online-broken,playable,2022-08-12 11:26:20.000 -"Road to Ballhalla",010002F009A7A000,UE4;status-playable,playable,2021-06-07 02:22:36.000 -"Road to Guangdong",,slow;status-playable,playable,2020-10-12 12:15:32.000 -"Roarr!",010068200C5BE000,status-playable,playable,2022-10-19 23:57:45.000 -"Robonauts",0100618004096000,status-playable;nvdec,playable,2022-08-12 11:33:23.000 -"ROBOTICS;NOTES DaSH",,status-playable,playable,2020-11-16 23:09:54.000 -"ROBOTICS;NOTES ELITE",,status-playable,playable,2020-11-26 10:28:20.000 -"Robozarro",,status-playable,playable,2020-09-03 13:33:40.000 -"Rock 'N Racing Off Road DX",,status-playable,playable,2021-01-10 15:27:15.000 -"Rock N' Racing Grand Prix",,status-playable,playable,2021-01-06 20:23:57.000 -"Rock of Ages 3: Make & Break",0100A1B00DB36000,status-playable;UE4,playable,2022-10-06 12:18:29.000 -"Rocket League",01005EE0036EC000,gpu;status-ingame;online-broken;ldn-untested,ingame,2024-02-08 19:51:36.000 -"Rocket Wars",,status-playable,playable,2020-07-24 14:27:39.000 -"Rogue Aces",0100EC7009348000,gpu;services;status-ingame;nvdec,ingame,2021-11-30 02:18:30.000 -"Rogue Heroes: Ruins of Tasos",01009FA010848000,online;status-playable,playable,2021-04-01 15:41:25.000 -"Rogue Legacy",,status-playable,playable,2020-08-10 19:17:28.000 -"Rogue Robots",,status-playable,playable,2020-06-16 12:16:11.000 -"Rogue Trooper Redux",01001CC00416C000,status-playable;nvdec;online-broken,playable,2022-08-12 11:53:01.000 -"RogueCube",0100C7300C0EC000,status-playable,playable,2021-06-16 12:16:42.000 -"Roll'd",,status-playable,playable,2020-07-04 20:24:01.000 -"RollerCoaster Tycoon 3: Complete Edition",01004900113F8000,32-bit;status-playable,playable,2022-10-17 14:18:01.000 -"RollerCoaster Tycoon Adventures",,nvdec;status-playable,playable,2021-01-05 18:14:18.000 -"Rolling Gunner",010076200CA16000,status-playable,playable,2021-05-26 12:54:18.000 -"Rolling Sky 2",0100579011B40000,status-playable,playable,2022-11-03 10:21:12.000 -"Romancing SaGa 2",01001F600829A000,status-playable,playable,2022-08-12 12:02:24.000 -"Romancing SaGa 3",,audio;gpu;status-ingame,ingame,2020-06-27 20:26:18.000 -"Roof Rage",010088100DD42000,status-boots;crash;regression,boots,2023-11-12 03:47:18.000 -"Roombo: First Blood",,nvdec;status-playable,playable,2020-08-05 12:11:37.000 -"Root Double -Before Crime * After Days- Xtend Edition",0100936011556000,status-nothing;crash,nothing,2022-02-05 02:03:49.000 -"Root Letter: Last Answer",010030A00DA3A000,status-playable;vulkan-backend-bug,playable,2022-09-17 10:25:57.000 -"Royal Roads",,status-playable,playable,2020-11-17 12:54:38.000 -"RPG Maker MV",,nvdec;status-playable,playable,2021-01-05 20:12:01.000 -"rRootage Reloaded [01005CD015986000]",01005CD015986000,status-playable,playable,2022-08-05 23:20:18.000 -"RSDKv5u",0000000000000000,status-ingame;homebrew,ingame,2024-04-01 16:25:34.000 -"Rugby Challenge 4",010009B00D33C000,slow;status-playable;online-broken;UE4,playable,2022-10-06 12:45:53.000 -"Ruiner",01006EC00F2CC000,status-playable;UE4,playable,2022-10-03 14:11:33.000 -"Run the Fan",010074F00DE4A000,status-playable,playable,2021-02-27 13:36:28.000 -"Runbow",,online;status-playable,playable,2021-01-08 22:47:44.000 -"Runbow Deluxe Edition",0100D37009B8A000,status-playable;online-broken,playable,2022-08-12 12:20:25.000 -"Rune Factory 3 Special",010081C0191D8000,status-playable,playable,2023-10-15 08:32:49.000 -"Rune Factory 4 Special",010051D00E3A4000,status-ingame;32-bit;crash;nvdec,ingame,2023-05-06 08:49:17.000 -"Rune Factory 5 (JP)",010014D01216E000,gpu;status-ingame,ingame,2021-06-01 12:00:36.000 -"RWBY: Grimm Eclipse",0100E21013908000,status-playable;online-broken,playable,2022-11-03 10:44:01.000 -"RXN -Raijin-",,nvdec;status-playable,playable,2021-01-10 16:05:43.000 -"S.N.I.P.E.R. Hunter Scope",0100B8B012ECA000,status-playable,playable,2021-04-19 15:58:09.000 -"Saboteur II: Avenging Angel",,Needs Update;cpu;crash;status-nothing,nothing,2021-01-26 14:47:37.000 -"Saboteur SiO",,slow;status-ingame,ingame,2020-12-17 16:59:49.000 -"Safety First!",,status-playable,playable,2021-01-06 09:05:23.000 -"SaGa Frontier Remastered",0100A51013530000,status-playable;nvdec,playable,2022-11-03 13:54:56.000 -"SaGa SCARLET GRACE: AMBITIONS",010003A00D0B4000,status-playable,playable,2022-10-06 13:20:31.000 -"Saints Row IV",01008D100D43E000,status-playable;ldn-untested;LAN,playable,2023-12-04 18:33:37.000 -"Saints Row: The Third - The Full Package",0100DE600BEEE000,slow;status-playable;LAN,playable,2023-08-24 02:40:58.000 -"Sakai and...",01007F000EB36000,status-playable;nvdec,playable,2022-12-15 13:53:19.000 -"Sakuna: Of Rice and Ruin",0100B1400E8FE000,status-playable,playable,2023-07-24 13:47:13.000 -"Sally Face",0100BBF0122B4000,status-playable,playable,2022-06-06 18:41:24.000 -"Salt And Sanctuary",,status-playable,playable,2020-10-22 11:52:19.000 -"Sam & Max Save the World",,status-playable,playable,2020-12-12 13:11:51.000 -"Samsara",,status-playable,playable,2021-01-11 15:14:12.000 -"Samurai Jack Battle Through Time",01006C600E46E000,status-playable;nvdec;UE4,playable,2022-10-06 13:33:59.000 -"SAMURAI SHODOWN",,UE4;crash;nvdec;status-menus,menus,2020-09-06 02:17:00.000 -"SAMURAI SHOWDOWN NEOGEO COLLECTION",0100F6800F48E000,nvdec;status-playable,playable,2021-06-14 17:12:56.000 -"Samurai Warrior",0100B6501A360000,status-playable,playable,2023-02-27 18:42:38.000 -"SamuraiAces for Nintendo Switch",,32-bit;status-playable,playable,2020-11-24 20:26:55.000 -"Sangoku Rensenki ~Otome no Heihou!~",,gpu;nvdec;status-ingame,ingame,2020-10-17 19:13:14.000 -"Satsujin Tantei Jack the Ripper",0100A4700BC98000,status-playable,playable,2021-06-21 16:32:54.000 -"Saturday Morning RPG",0100F0000869C000,status-playable;nvdec,playable,2022-08-12 12:41:50.000 -"Sausage Sports Club",,gpu;status-ingame,ingame,2021-01-10 05:37:17.000 -"Save Koch",0100C8300FA90000,status-playable,playable,2022-09-26 17:06:56.000 -"Save the Ninja Clan",,status-playable,playable,2021-01-11 13:56:37.000 -"Save Your Nuts",010091000F72C000,status-playable;nvdec;online-broken;UE4,playable,2022-09-27 23:12:02.000 -"Saviors of Sapphire Wings & Stranger of Sword City Revisited",0100AA00128BA000,status-menus;crash,menus,2022-10-24 23:00:46.000 -"Say No! More",01001C3012912000,status-playable,playable,2021-05-06 13:43:34.000 -"Sayonara Wild Hearts",010010A00A95E000,status-playable,playable,2023-10-23 03:20:01.000 -"Schlag den Star",0100ACB004006000,slow;status-playable;nvdec,playable,2022-08-12 14:28:22.000 -"Scott Pilgrim vs The World: The Game",0100394011C30000,services-horizon;status-nothing;crash,nothing,2024-07-12 08:13:03.000 -"Scribblenauts Mega Pack",,nvdec;status-playable,playable,2020-12-17 22:56:14.000 -"Scribblenauts Showdown",,gpu;nvdec;status-ingame,ingame,2020-12-17 23:05:53.000 -"SD GUNDAM BATTLE ALLIANCE Demo",0100829018568000,audio;status-ingame;crash;demo,ingame,2022-08-01 23:01:20.000 -"SD GUNDAM G GENERATION CROSS RAYS",010055700CEA8000,status-playable;nvdec,playable,2022-09-15 20:58:44.000 -"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00",,status-playable;nvdec,playable,2022-09-15 20:45:57.000 -"Sea King",0100E4A00D066000,UE4;nvdec;status-playable,playable,2021-06-04 15:49:22.000 -"Sea of Solitude The Director's Cut",0100AFE012BA2000,gpu;status-ingame,ingame,2024-07-12 18:29:29.000 -"Sea of Stars",01008C0016544000,status-playable,playable,2024-03-15 20:27:12.000 -"Sea of Stars Demo",010036F0182C4000,status-playable;demo,playable,2023-02-12 15:33:56.000 -"SeaBed",,status-playable,playable,2020-05-17 13:25:37.000 -"Season Match Bundle - Part 1 and 2",,status-playable,playable,2021-01-11 13:28:23.000 -"Season Match Full Bundle - Parts 1, 2 and 3",,status-playable,playable,2020-10-27 16:15:22.000 -"Secret Files 3",,nvdec;status-playable,playable,2020-10-24 15:32:39.000 -"Seek Hearts",010075D0101FA000,status-playable,playable,2022-11-22 15:06:26.000 -"Seers Isle",,status-playable,playable,2020-11-17 12:28:50.000 -"SEGA AGES Alex Kidd in Miracle World",0100A8900AF04000,online;status-playable,playable,2021-05-05 16:35:47.000 -"SEGA AGES Gain Ground",01001E600AF08000,online;status-playable,playable,2021-05-05 16:16:27.000 -"SEGA AGES OUTRUN",,status-playable,playable,2021-01-11 13:13:59.000 -"SEGA AGES PHANTASY STAR",,status-playable,playable,2021-01-11 12:49:48.000 -"SEGA AGES Puyo Puyo",01005F600CB0E000,online;status-playable,playable,2021-05-05 16:09:28.000 -"SEGA AGES SONIC THE HEDGEHOG 2",01000D200C614000,status-playable,playable,2022-09-21 20:26:35.000 -"SEGA AGES SPACE HARRIER",,status-playable,playable,2021-01-11 12:57:40.000 -"SEGA AGES Wonder Boy: Monster Land",01001E700AC60000,online;status-playable,playable,2021-05-05 16:28:25.000 -"SEGA Ages: Sonic The Hedgehog",010051F00AC5E000,slow;status-playable,playable,2023-03-05 20:16:31.000 -"SEGA Ages: Virtua Racing",010054400D2E6000,status-playable;online-broken,playable,2023-01-29 17:08:39.000 -"SEGA Genesis - Nintendo Switch Online",0100B3C014BDA000,status-nothing;crash;regression,nothing,2022-04-11 07:27:21.000 -"SEGA Mega Drive Classics",,online;status-playable,playable,2021-01-05 11:08:00.000 -"Semispheres",,status-playable,playable,2021-01-06 23:08:31.000 -"SENRAN KAGURA Peach Ball",0100D1800D902000,status-playable,playable,2021-06-03 15:12:10.000 -"SENRAN KAGURA Reflexions",,status-playable,playable,2020-03-23 19:15:23.000 -"Sentinels of Freedom",01009E500D29C000,status-playable,playable,2021-06-14 16:42:19.000 -"SENTRY",,status-playable,playable,2020-12-13 12:00:24.000 -"Sephirothic Stories",010059700D4A0000,services;status-menus,menus,2021-11-25 08:52:17.000 -"Serious Sam Collection",010007D00D43A000,status-boots;vulkan-backend-bug,boots,2022-10-13 13:53:34.000 -"Served! A gourmet race",0100B2C00E4DA000,status-playable;nvdec,playable,2022-09-28 12:46:00.000 -"Seven Knights -Time Wanderer-",010018400C24E000,status-playable;vulkan-backend-bug,playable,2022-10-13 22:08:54.000 -"Seven Pirates H",0100D6F016676000,status-playable,playable,2024-06-03 14:54:12.000 -"Severed",,status-playable,playable,2020-12-15 21:48:48.000 -"Shadow Blade Reload",0100D5500DA94000,nvdec;status-playable,playable,2021-06-11 18:40:43.000 -"Shadow Gangs",0100BE501382A000,cpu;gpu;status-ingame;crash;regression,ingame,2024-04-29 00:07:26.000 -"Shadow Man Remastered",0100C3A013840000,gpu;status-ingame,ingame,2024-05-20 06:01:39.000 -"Shadowgate",,status-playable,playable,2021-04-24 07:32:57.000 -"Shadowrun Returns",0100371013B3E000,gpu;status-ingame;Needs Update,ingame,2022-10-04 21:32:31.000 -"Shadowrun: Dragonfall - Director's Cut",01008310154C4000,gpu;status-ingame;Needs Update,ingame,2022-10-04 20:52:18.000 -"Shadowrun: Hong Kong - Extended Edition",0100C610154CA000,gpu;status-ingame;Needs Update,ingame,2022-10-04 20:53:09.000 -"Shadows 2: Perfidia",,status-playable,playable,2020-08-07 12:43:46.000 -"Shadows of Adam",,status-playable,playable,2021-01-11 13:35:58.000 -"Shadowverse Champions Battle",01002A800C064000,status-playable,playable,2022-10-02 22:59:29.000 -"Shadowverse: Champion’s Battle",01003B90136DA000,status-nothing;crash,nothing,2023-03-06 00:31:50.000 -"Shady Part of Me",0100820013612000,status-playable,playable,2022-10-20 11:31:55.000 -"Shakedown: Hawaii",,status-playable,playable,2021-01-07 09:44:36.000 -"Shakes on a Plane",01008DA012EC0000,status-menus;crash,menus,2021-11-25 08:52:25.000 -"Shalnor Legends: Sacred Lands",0100B4900E008000,status-playable,playable,2021-06-11 14:57:11.000 -"Shanky: The Vegan's Nightmare - 01000C00CC10000",,status-playable,playable,2021-01-26 15:03:55.000 -"Shantae",0100430013120000,status-playable,playable,2021-05-21 04:53:26.000 -"Shantae and the Pirate's Curse",0100EFD00A4FA000,status-playable,playable,2024-04-29 17:21:57.000 -"Shantae and the Seven Sirens",,nvdec;status-playable,playable,2020-06-19 12:23:40.000 -"Shantae: Half-Genie Hero Ultimate Edition",,status-playable,playable,2020-06-04 20:14:20.000 -"Shantae: Risky's Revenge - Director's Cut",0100ADA012370000,status-playable,playable,2022-10-06 20:47:39.000 -"Shaolin vs Wutang : Eastern Heroes",01003AB01062C000,deadlock;status-nothing,nothing,2021-03-29 20:38:54.000 -"Shape Of The World0",0100B250009B9600,UE4;status-playable,playable,2021-03-05 16:42:28.000 -"She Remembered Caterpillars",01004F50085F2000,status-playable,playable,2022-08-12 17:45:14.000 -"She Sees Red",01000320110C2000,status-playable;nvdec,playable,2022-09-30 11:30:15.000 -"Shelter Generations",01009EB004CB0000,status-playable,playable,2021-06-04 16:52:39.000 -"Sherlock Holmes: The Devil's Daughter",010020F014DBE000,gpu;status-ingame,ingame,2022-07-11 00:07:26.000 -"Shift Happens",,status-playable,playable,2021-01-05 21:24:18.000 -"SHIFT QUANTUM",,UE4;crash;status-ingame,ingame,2020-11-06 21:54:08.000 -"Shiftlings",01000750084B2000,nvdec;status-playable,playable,2021-03-04 13:49:54.000 -"Shin Megami Tensei III Nocturne HD Remaster",01003B0012DC2000,status-playable,playable,2022-11-03 22:53:27.000 -"Shin Megami Tensei III NOCTURNE HD REMASTER",010045800ED1E000,gpu;status-ingame;Needs Update,ingame,2022-11-03 19:57:01.000 -"Shin Megami Tensei V",010063B012DC6000,status-playable;UE4,playable,2024-02-21 06:30:07.000 -"Shin Megami Tensei V: Vengeance",010069C01AB82000,gpu;status-ingame;vulkan-backend-bug,ingame,2024-07-14 11:28:24.000 -"Shing! (サムライフォース:斬!)",01009050133B4000,status-playable;nvdec,playable,2022-10-22 00:48:54.000 -"Shining Resonance Refrain",01009A5009A9E000,status-playable;nvdec,playable,2022-08-12 18:03:01.000 -"Shinsekai Into the Depths",01004EE0104F6000,status-playable,playable,2022-09-28 14:07:51.000 -"Shio",0100C2F00A568000,status-playable,playable,2021-02-22 16:25:09.000 -"Shipped",,status-playable,playable,2020-11-21 14:22:32.000 -"Ships",01000E800FCB4000,status-playable,playable,2021-06-11 16:14:37.000 -"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",01007430122D0000,status-playable;nvdec,playable,2022-10-20 11:44:36.000 -"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",,cpu;crash;status-boots,boots,2020-09-27 19:01:25.000 -"Shiro0",01000244016BAE00,gpu;status-ingame,ingame,2024-01-13 08:54:39.000 -"Shoot 1UP DX",,status-playable,playable,2020-12-13 12:32:47.000 -"Shovel Knight: Specter of Torment",,status-playable,playable,2020-05-30 08:34:17.000 -"Shovel Knight: Treasure Trove",,status-playable,playable,2021-02-14 18:24:39.000 -"Shred!2 - Freeride MTB",,status-playable,playable,2020-05-30 14:34:09.000 -"Shu",,nvdec;status-playable,playable,2020-05-30 09:08:59.000 -"Shut Eye",,status-playable,playable,2020-07-23 18:08:35.000 -"Sid Meier's Civilization VI",010044500C182000,status-playable;ldn-untested,playable,2024-04-08 16:03:40.000 -"Sigi - A Fart for Melusina",01007FC00B674000,status-playable,playable,2021-02-22 16:46:58.000 -"Silence",0100F1400B0D6000,nvdec;status-playable,playable,2021-06-03 14:46:17.000 -"Silent World",,status-playable,playable,2020-08-28 13:45:13.000 -"Silk",010045500DFE2000,nvdec;status-playable,playable,2021-06-10 15:34:37.000 -"SilverStarChess",010016D00A964000,status-playable,playable,2021-05-06 15:25:57.000 -"Simona's Requiem",0100E8C019B36000,gpu;status-ingame,ingame,2023-02-21 18:29:19.000 -"Sin Slayers",01006FE010438000,status-playable,playable,2022-10-20 11:53:52.000 -"Sine Mora EX",01002820036A8000,gpu;status-ingame;online-broken,ingame,2022-08-12 19:36:18.000 -"Singled Out",,online;status-playable,playable,2020-08-03 13:06:18.000 -"Sinless",,nvdec;status-playable,playable,2020-08-09 20:18:55.000 -"SINNER: Sacrifice for Redemption",0100B16009C10000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33.000 -"Sir Lovelot",0100E9201410E000,status-playable,playable,2021-04-05 16:21:46.000 -"Skate City",0100134011E32000,status-playable,playable,2022-11-04 11:37:39.000 -"Skee-Ball",,status-playable,playable,2020-11-16 04:44:07.000 -"Skelattack",01001A900F862000,status-playable,playable,2021-06-09 15:26:26.000 -"Skelittle: A Giant Party!!",01008E700F952000,status-playable,playable,2021-06-09 19:08:34.000 -"Skelly Selest",,status-playable,playable,2020-05-30 15:38:18.000 -"Skies of Fury",,status-playable,playable,2020-05-30 16:40:54.000 -"Skullgirls: 2nd Encore",010046B00DE62000,status-playable,playable,2022-09-15 21:21:25.000 -"Skulls of the Shogun: Bone-a-fide Edition",,status-playable,playable,2020-08-31 18:58:12.000 -"Skully",0100D7B011654000,status-playable;nvdec;UE4,playable,2022-10-06 13:52:59.000 -"Sky Force Anniversary",010083100B5CA000,status-playable;online-broken,playable,2022-08-12 20:50:07.000 -"Sky Force Reloaded",,status-playable,playable,2021-01-04 20:06:57.000 -"Sky Gamblers - Afterburner",010003F00CC98000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55.000 -"Sky Gamblers: Storm Raiders",010093D00AC38000,gpu;audio;status-ingame;32-bit,ingame,2022-08-12 21:13:36.000 -"Sky Gamblers: Storm Raiders 2",010068200E96E000,gpu;status-ingame,ingame,2022-09-13 12:24:04.000 -"Sky Racket",,status-playable,playable,2020-09-07 12:22:24.000 -"Sky Ride",0100DDB004F30000,status-playable,playable,2021-02-22 16:53:07.000 -"Sky Rogue",,status-playable,playable,2020-05-30 08:26:28.000 -"Sky: Children of the Light",0100C52011460000,cpu;status-nothing;online-broken,nothing,2023-02-23 10:57:10.000 -"Skybolt Zack",010041C01014E000,status-playable,playable,2021-04-12 18:28:00.000 -"SKYHILL",0100A0A00D1AA000,status-playable,playable,2021-03-05 15:19:11.000 -"Skylanders Imaginators",,crash;services;status-boots,boots,2020-05-30 18:49:18.000 -"SKYPEACE",,status-playable,playable,2020-05-29 14:14:30.000 -"SkyScrappers",,status-playable,playable,2020-05-28 22:11:25.000 -"SkyTime",,slow;status-ingame,ingame,2020-05-30 09:24:51.000 -"SlabWell",01003AD00DEAE000,status-playable,playable,2021-02-22 17:02:51.000 -"Slain",,status-playable,playable,2020-05-29 14:26:16.000 -"Slain Back from Hell",0100BB100AF4C000,status-playable,playable,2022-08-12 23:36:19.000 -"Slay the Spire",010026300BA4A000,status-playable,playable,2023-01-20 15:09:26.000 -"Slayaway Camp: Butcher's Cut",0100501006494000,status-playable;opengl-backend-bug,playable,2022-08-12 23:44:05.000 -"Slayin 2",01004E900EDDA000,gpu;status-ingame,ingame,2024-04-19 16:15:26.000 -"Sleep Tight",01004AC0081DC000,gpu;status-ingame;UE4,ingame,2022-08-13 00:17:32.000 -"Slice Dice & Rice",0100F4500AA4E000,online;status-playable,playable,2021-02-22 17:44:23.000 -"Slide Stars",010010D011E1C000,status-menus;crash,menus,2021-11-25 08:53:43.000 -"Slime-san",,status-playable,playable,2020-05-30 16:15:12.000 -"Slime-san Superslime Edition",,status-playable,playable,2020-05-30 19:08:08.000 -"SMASHING THE BATTLE",01002AA00C974000,status-playable,playable,2021-06-11 15:53:57.000 -"SmileBASIC 4",0100C9100B06A000,gpu;status-menus,menus,2021-07-29 17:35:59.000 -"Smoke and Sacrifice",0100207007EB2000,status-playable,playable,2022-08-14 12:38:27.000 -"Smurfs Kart",01009790186FE000,status-playable,playable,2023-10-18 00:55:00.000 -"Snack World The Dungeon Crawl Gold",0100F2800D46E000,gpu;slow;status-ingame;nvdec;audout,ingame,2022-05-01 21:12:44.000 -"Snake Pass",0100C0F0020E8000,status-playable;nvdec;UE4,playable,2022-01-03 04:31:52.000 -"Sniper Elite 3 Ultimate Edition",010075A00BA14000,status-playable;ldn-untested,playable,2024-04-18 07:47:49.000 -"Sniper Elite 4",010007B010FCC000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15.000 -"Sniper Elite V2 Remastered",0100BB000A3AA000,slow;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13.000 -"Snipperclips",0100704000B3A000,status-playable,playable,2022-12-05 12:44:55.000 -"Snipperclips Plus",01008E20047DC000,status-playable,playable,2023-02-14 20:20:13.000 -"SNK 40th Anniversary Collection",01004AB00AEF8000,status-playable,playable,2022-08-14 13:33:15.000 -"SNK HEROINES Tag Team Frenzy",010027F00AD6C000,status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25.000 -"Snooker 19",01008DA00CBBA000,status-playable;nvdec;online-broken;UE4,playable,2022-09-11 17:43:22.000 -"Snow Moto Racing Freedom",010045300516E000,gpu;status-ingame;vulkan-backend-bug,ingame,2022-08-15 16:05:14.000 -"Snowboarding the Next Phase",0100BE200C34A000,nvdec;status-playable,playable,2021-02-23 12:56:58.000 -"SnowRunner - 0100FBD13AB6000",,services;status-boots;crash,boots,2023-10-07 00:01:16.000 -"Soccer Club Life: Playing Manager",010017B012AFC000,gpu;status-ingame,ingame,2022-10-25 11:59:22.000 -"Soccer Pinball",0100B5000E05C000,UE4;gpu;status-ingame,ingame,2021-06-15 20:56:51.000 -"Soccer Slammers",,status-playable,playable,2020-05-30 07:48:14.000 -"Soccer, Tactics & Glory",010095C00F9DE000,gpu;status-ingame,ingame,2022-09-26 17:15:58.000 -"SOLDAM Drop, Connect, Erase",,status-playable,playable,2020-05-30 09:18:54.000 -"SolDivide for Nintendo Switch",0100590009C38000,32-bit;status-playable,playable,2021-06-09 14:13:03.000 -"Solo: Islands of the Heart",010008600D1AC000,gpu;status-ingame;nvdec,ingame,2022-09-11 17:54:43.000 -"Some Distant Memory",01009EE00E91E000,status-playable,playable,2022-09-15 21:48:19.000 -"Song of Nunu: A League of Legends Story",01004F401BEBE000,status-ingame,ingame,2024-07-12 18:53:44.000 -"Songbird Symphony",0100E5400BF94000,status-playable,playable,2021-02-27 02:44:04.000 -"Songbringer",,status-playable,playable,2020-06-22 10:42:02.000 -"Sonic 1 (2013)",0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-06 18:31:20.000 -"Sonic 2 (2013)",0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-01 16:25:30.000 -"Sonic A.I.R",0000000000000000,status-ingame;homebrew,ingame,2024-04-01 16:25:32.000 -"Sonic CD",0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-01 16:25:31.000 -"Sonic Colors Ultimate [010040E0116B8000]",010040E0116B8000,status-playable,playable,2022-11-12 21:24:26.000 -"Sonic Forces",01001270012B6000,status-playable,playable,2024-07-28 13:11:21.000 -"Sonic Frontiers",01004AD014BF0000,gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53.000 -"Sonic Mania",01009AA000FAA000,status-playable,playable,2020-06-08 17:30:57.000 -"Sonic Mania Plus",01009AA000FAA000,status-playable,playable,2022-01-16 04:09:11.000 -"Sonic Superstars",01008F701C074000,gpu;status-ingame;nvdec,ingame,2023-10-28 17:48:07.000 -"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",010088801C150000,status-playable,playable,2024-08-20 13:26:56.000 -"SONIC X SHADOW GENERATIONS",01005EA01C0FC000,status-ingame;crash,ingame,2025-01-07 04:20:45.000 -"Soul Axiom Rebooted",,nvdec;slow;status-ingame,ingame,2020-09-04 12:41:01.000 -"Soul Searching",,status-playable,playable,2020-07-09 18:39:07.000 -"South Park: The Fractured But Whole",01008F2005154000,slow;status-playable;online-broken,playable,2024-07-08 17:47:28.000 -"Space Blaze",,status-playable,playable,2020-08-30 16:18:05.000 -"Space Cows",,UE4;crash;status-menus,menus,2020-06-15 11:33:20.000 -"SPACE ELITE FORCE",,status-playable,playable,2020-11-27 15:21:05.000 -"Space Pioneer",010047B010260000,status-playable,playable,2022-10-20 12:24:37.000 -"Space Ribbon",010010A009830000,status-playable,playable,2022-08-15 17:17:10.000 -"SpaceCadetPinball",0000000000000000,status-ingame;homebrew,ingame,2024-04-18 19:30:04.000 -"Spacecats with Lasers",0100D9B0041CE000,status-playable,playable,2022-08-15 17:22:44.000 -"Spaceland",,status-playable,playable,2020-11-01 14:31:56.000 -"Sparkle 2",,status-playable,playable,2020-10-19 11:51:39.000 -"Sparkle Unleashed",01000DC007E90000,status-playable,playable,2021-06-03 14:52:15.000 -"Sparkle ZERO",,gpu;slow;status-ingame,ingame,2020-03-23 18:19:18.000 -"Sparklite",01007ED00C032000,status-playable,playable,2022-08-06 11:35:41.000 -"Spartan",0100E6A009A26000,UE4;nvdec;status-playable,playable,2021-03-05 15:53:19.000 -"Speaking Simulator",,status-playable,playable,2020-10-08 13:00:39.000 -"Spectrum",01008B000A5AE000,status-playable,playable,2022-08-16 11:15:59.000 -"Speed 3: Grand Prix",0100F18010BA0000,status-playable;UE4,playable,2022-10-20 12:32:31.000 -"Speed Brawl",,slow;status-playable,playable,2020-09-18 22:08:16.000 -"Speed Limit",01000540139F6000,gpu;status-ingame,ingame,2022-09-02 18:37:40.000 -"Speed Truck Racing",010061F013A0E000,status-playable,playable,2022-10-20 12:57:04.000 -"Spellspire",0100E74007EAC000,status-playable,playable,2022-08-16 11:21:21.000 -"Spelunker Party!",010021F004270000,services;status-boots,boots,2022-08-16 11:25:49.000 -"Spelunky",0100710013ABA000,status-playable,playable,2021-11-20 17:45:03.000 -"Sphinx and the Cursed Mummy™",0100BD500BA94000,gpu;status-ingame;32-bit;opengl,ingame,2024-05-20 06:00:51.000 -"Spider Solitaire",,status-playable,playable,2020-12-16 16:19:30.000 -"Spinch",010076D0122A8000,status-playable,playable,2024-07-12 19:02:10.000 -"Spinny's journey",01001E40136FE000,status-ingame;crash,ingame,2021-11-30 03:39:44.000 -"Spiral Splatter",,status-playable,playable,2020-06-04 14:03:57.000 -"Spirit Hunter: NG",,32-bit;status-playable,playable,2020-12-17 20:38:47.000 -"Spirit of the North",01005E101122E000,status-playable;UE4,playable,2022-09-30 11:40:47.000 -"Spirit Roots",,nvdec;status-playable,playable,2020-07-10 13:33:32.000 -"Spiritfarer",0100BD400DC52000,gpu;status-ingame,ingame,2022-10-06 16:31:38.000 -"SpiritSphere DX",01009D60080B4000,status-playable,playable,2021-07-03 23:37:49.000 -"Spitlings",010042700E3FC000,status-playable;online-broken,playable,2022-10-06 16:42:39.000 -"Splatoon 2",01003BC0000A0000,status-playable;ldn-works;LAN,playable,2024-07-12 19:11:15.000 -"Splatoon 3",0100C2500FC20000,status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11.000 -"Splatoon 3: Splatfest World Premiere",0100BA0018500000,gpu;status-ingame;online-broken;demo,ingame,2022-09-19 03:17:12.000 -"SpongeBob SquarePants The Cosmic Shake",01009FB0172F4000,gpu;status-ingame;UE4,ingame,2023-08-01 19:29:53.000 -"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",010062800D39C000,status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34.000 -"Spooky Chase",010097C01336A000,status-playable,playable,2022-11-04 12:17:44.000 -"Spooky Ghosts Dot Com",0100C6100D75E000,status-playable,playable,2021-06-15 15:16:11.000 -"Sports Party",0100DE9005170000,nvdec;status-playable,playable,2021-03-05 13:40:42.000 -"Spot The Difference",0100E04009BD4000,status-playable,playable,2022-08-16 11:49:52.000 -"Spot the Differences: Party!",010052100D1B4000,status-playable,playable,2022-08-16 11:55:26.000 -"Spy Alarm",01000E6015350000,services;status-ingame,ingame,2022-12-09 10:12:51.000 -"SpyHack",01005D701264A000,status-playable,playable,2021-04-15 10:53:51.000 -"Spyro Reignited Trilogy",,Needs More Attention;UE4;crash;gpu;nvdec;status-menus,menus,2021-01-22 13:01:56.000 -"Spyro Reignited Trilogy",010077B00E046000,status-playable;nvdec;UE4,playable,2022-09-11 18:38:33.000 -"Squeakers",,status-playable,playable,2020-12-13 12:13:05.000 -"Squidgies Takeover",,status-playable,playable,2020-07-20 22:28:08.000 -"Squidlit",,status-playable,playable,2020-08-06 12:38:32.000 -"STAR OCEAN First Departure R",0100EBF00E702000,nvdec;status-playable,playable,2021-07-05 19:29:16.000 -"STAR OCEAN The Second Story R",010065301A2E0000,status-ingame;crash,ingame,2024-06-01 02:39:59.000 -"Star Renegades",,nvdec;status-playable,playable,2020-12-11 12:19:23.000 -"Star Story: The Horizon Escape",,status-playable,playable,2020-08-11 22:31:38.000 -"Star Trek Prodigy: Supernova",01009DF015776000,status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50.000 -"Star Wars - Knights Of The Old Republic",0100854015868000,gpu;deadlock;status-boots,boots,2024-02-12 10:13:51.000 -"STAR WARS Battlefront Classic Collection",010040701B948000,gpu;status-ingame;vulkan,ingame,2024-07-12 19:24:21.000 -"STAR WARS Episode I: Racer",0100BD100FFBE000,slow;status-playable;nvdec,playable,2022-10-03 16:08:36.000 -"STAR WARS Jedi Knight II Jedi Outcast",0100BB500EACA000,gpu;status-ingame,ingame,2022-09-15 22:51:00.000 -"Star Wars Jedi Knight: Jedi Academy",01008CA00FAE8000,gpu;status-boots,boots,2021-06-16 12:35:30.000 -"Star Wars: Republic Commando",0100FA10115F8000,gpu;status-ingame;32-bit,ingame,2023-10-31 15:57:17.000 -"STAR WARS: The Force Unleashed",0100153014544000,status-playable,playable,2024-05-01 17:41:28.000 -"Star Wars™ Pinball",01006DA00DEAC000,status-playable;online-broken,playable,2022-09-11 18:53:31.000 -"Star-Crossed Myth - The Department of Wishes",01005EB00EA10000,gpu;status-ingame,ingame,2021-06-04 19:34:36.000 -"Star99",0100E6B0115FC000,status-menus;online,menus,2021-11-26 14:18:51.000 -"Stardash",01002100137BA000,status-playable,playable,2021-01-21 16:31:19.000 -"Stardew Valley",0100E65002BB8000,status-playable;online-broken;ldn-untested,playable,2024-02-14 03:11:19.000 -"Starlink: Battle for Atlas",01002CC003FE6000,services-horizon;status-nothing;crash;Needs Update,nothing,2024-05-05 17:25:11.000 -"Starlit Adventures Golden Stars",,status-playable,playable,2020-11-21 12:14:43.000 -"Starship Avenger Operation: Take Back Earth",,status-playable,playable,2021-01-12 15:52:55.000 -"State of Anarchy: Master of Mayhem",,nvdec;status-playable,playable,2021-01-12 19:00:05.000 -"State of Mind",,UE4;crash;status-boots,boots,2020-06-22 22:17:50.000 -"STAY",0100616009082000,crash;services;status-boots,boots,2021-04-23 14:24:52.000 -"STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY",0100B61009C60000,status-playable,playable,2021-01-26 17:37:28.000 -"Steam Prison",01008010118CC000,nvdec;status-playable,playable,2021-04-01 15:34:11.000 -"Steam Tactics",0100AE100DAFA000,status-playable,playable,2022-10-06 16:53:45.000 -"Steamburg",,status-playable,playable,2021-01-13 08:42:01.000 -"SteamWorld Dig",01009320084A4000,status-playable,playable,2024-08-19 12:12:23.000 -"SteamWorld Dig 2",0100CA9002322000,status-playable,playable,2022-12-21 19:25:42.000 -"SteamWorld Quest",,nvdec;status-playable,playable,2020-11-09 13:10:04.000 -"Steel Assault",01001C6014772000,status-playable,playable,2022-12-06 14:48:30.000 -"Steins;Gate Elite",,status-playable,playable,2020-08-04 07:33:32.000 -"STEINS;GATE: My Darling's Embrace",0100CB400E9BC000,status-playable;nvdec,playable,2022-11-20 16:48:34.000 -"Stela",01002DE01043E000,UE4;status-playable,playable,2021-06-15 13:28:34.000 -"Stellar Interface",01005A700C954000,status-playable,playable,2022-10-20 13:44:33.000 -"STELLATUM",0100BC800EDA2000,gpu;status-playable,playable,2021-03-07 16:30:23.000 -"Steredenn",,status-playable,playable,2021-01-13 09:19:42.000 -"Stern Pinball Arcade",0100AE0006474000,status-playable,playable,2022-08-16 14:24:41.000 -"Stikbold! A Dodgeball Adventure DELUXE",,status-playable,playable,2021-01-11 20:12:54.000 -"Stitchy in Tooki Trouble",010077B014518000,status-playable,playable,2021-05-06 16:25:53.000 -"STONE",010070D00F640000,status-playable;UE4,playable,2022-09-30 11:53:32.000 -"Stories Untold",010074400F6A8000,status-playable;nvdec,playable,2022-12-22 01:08:46.000 -"Storm Boy",010040D00BCF4000,status-playable,playable,2022-10-20 14:15:06.000 -"Storm in a Teacup",0100B2300B932000,gpu;status-ingame,ingame,2021-11-06 02:03:19.000 -"Story of a Gladiator",,status-playable,playable,2020-07-29 15:08:18.000 -"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",010017301007E000,status-playable,playable,2021-03-18 11:42:19.000 -"Story of Seasons: Friends of Mineral Town",0100ED400EEC2000,status-playable,playable,2022-10-03 16:40:31.000 -"Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000",010078D00E8F4000,slow;status-playable;nvdec;UE4,playable,2022-09-16 11:58:38.000 -"Strange Field Football",01000A6013F86000,status-playable,playable,2022-11-04 12:25:57.000 -"Stranger Things 3: The Game",,status-playable,playable,2021-01-11 17:44:09.000 -"Strawberry Vinegar",0100D7E011C64000,status-playable;nvdec,playable,2022-12-05 16:25:40.000 -"Stray",010075101EF84000,status-ingame;crash,ingame,2025-01-07 04:03:00.000 -"Street Fighter 30th Anniversary Collection",0100024008310000,status-playable;online-broken;ldn-partial,playable,2022-08-20 16:50:47.000 -"Street Outlaws: The List",010012400D202000,nvdec;status-playable,playable,2021-06-11 12:15:32.000 -"Street Power Soccer",,UE4;crash;status-boots,boots,2020-11-21 12:28:57.000 -"Streets of Rage 4",,nvdec;online;status-playable,playable,2020-07-07 21:21:22.000 -"Strife: Veteran Edition",0100BDE012928000,gpu;status-ingame,ingame,2022-01-15 05:10:42.000 -"Strike Force - War on Terror",010039100DACC000,status-menus;crash;Needs Update,menus,2021-11-24 08:08:20.000 -"Strike Suit Zero: Director's Cut",010072500D52E000,crash;status-boots,boots,2021-04-23 17:15:14.000 -"StrikeForce Kitty",,nvdec;status-playable,playable,2020-07-29 16:22:15.000 -"STRIKERS1945 for Nintendo Switch",0100FF5005B76000,32-bit;status-playable,playable,2021-06-03 19:35:04.000 -"STRIKERS1945II for Nintendo Switch",0100720008ED2000,32-bit;status-playable,playable,2021-06-03 19:43:00.000 -"Struggling",,status-playable,playable,2020-10-15 20:37:03.000 -"Stunt Kite Party",0100AF000B4AE000,nvdec;status-playable,playable,2021-01-25 17:16:56.000 -"STURMWIND EX",0100C5500E7AE000,audio;32-bit;status-playable,playable,2022-09-16 12:01:39.000 -"Sub Level Zero: Redux",0100E6400BCE8000,status-playable,playable,2022-09-16 12:30:03.000 -"Subarashiki Kono Sekai -Final Remix-",,services;slow;status-ingame,ingame,2020-02-10 16:21:51.000 -"Subdivision Infinity DX",010001400E474000,UE4;crash;status-boots,boots,2021-03-03 14:26:46.000 -"Submerged",0100EDA00D866000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01.000 -"Subnautica",0100429011144000,status-playable;vulkan-backend-bug,playable,2022-11-04 13:07:29.000 -"Subnautica Below Zero",010014C011146000,status-playable,playable,2022-12-23 14:15:13.000 -"Suguru Nature",0100BF9012AC6000,crash;status-ingame,ingame,2021-07-29 11:36:27.000 -"Suicide Guy",01005CD00A2A2000,status-playable,playable,2021-01-26 13:13:54.000 -"Suicide Guy: Sleepin' Deeply",0100DE000C2E4000,status-ingame;Needs More Attention,ingame,2022-09-20 23:45:25.000 -"Sumire",01003D50126A4000,status-playable,playable,2022-11-12 13:40:43.000 -"Summer in Mara",0100A130109B2000,nvdec;status-playable,playable,2021-03-06 14:10:38.000 -"Summer Sweetheart",01004E500DB9E000,status-playable;nvdec,playable,2022-09-16 12:51:46.000 -"Sunblaze",0100BFE014476000,status-playable,playable,2022-11-12 13:59:23.000 -"Sundered: Eldritch Edition",01002D3007962000,gpu;status-ingame,ingame,2021-06-07 11:46:00.000 -"Super Beat Sports",0100F7000464A000,status-playable;ldn-untested,playable,2022-08-16 16:05:50.000 -"Super Blood Hockey",,status-playable,playable,2020-12-11 20:01:41.000 -"Super Bomberman R",01007AD00013E000,status-playable;nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14.000 -"SUPER BOMBERMAN R 2",0100B87017D94000,deadlock;status-boots,boots,2023-09-29 13:19:51.000 -"Super Cane Magic ZERO",0100D9B00DB5E000,status-playable,playable,2022-09-12 15:33:46.000 -"Super Chariot",010065F004E5E000,status-playable,playable,2021-06-03 13:19:01.000 -"SUPER DRAGON BALL HEROES WORLD MISSION",0100E5E00C464000,status-playable;nvdec;online-broken,playable,2022-08-17 12:56:30.000 -"Super Dungeon Tactics",010023100B19A000,status-playable,playable,2022-10-06 17:40:40.000 -"Super Inefficient Golf",010056800B534000,status-playable;UE4,playable,2022-08-17 15:53:45.000 -"Super Jumpy Ball",,status-playable,playable,2020-07-04 18:40:36.000 -"Super Kickers League",0100196009998000,status-playable,playable,2021-01-26 13:36:48.000 -"Super Kirby Clash",01003FB00C5A8000,status-playable;ldn-works,playable,2024-07-30 18:21:55.000 -"Super Korotama",010000D00F81A000,status-playable,playable,2021-06-06 19:06:22.000 -"Super Loop Drive",01003E300FCAE000,status-playable;nvdec;UE4,playable,2022-09-22 10:58:05.000 -"Super Mario 3D All-Stars",010049900F546000,services-horizon;slow;status-ingame;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16.000 -"Super Mario 3D World + Bowser's Fury",010028600EBDA000,status-playable;ldn-works,playable,2024-07-31 10:45:37.000 -"Super Mario 64",054507E0B7552000,status-ingame;homebrew,ingame,2024-03-20 16:57:27.000 -"Super Mario Bros. 35",0100277011F1A000,status-menus;online-broken,menus,2022-08-07 16:27:25.000 -"Super Mario Bros. Wonder",010015100B514000,status-playable;amd-vendor-bug,playable,2024-09-06 13:21:21.000 -"Super Mario Maker 2",01009B90006DC000,status-playable;online-broken;ldn-broken,playable,2024-08-25 11:05:19.000 -"Super Mario Odyssey",0100000000010000,status-playable;nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34.000 -"Super Mario Party",010036B0034E4000,gpu;status-ingame;Needs Update;ldn-works,ingame,2024-06-21 05:10:16.000 -"Super Mario RPG",0100BC0018138000,gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42.000 -"Super Mario World",0000000000000000,status-boots;homebrew,boots,2024-06-13 01:40:31.000 -"Super Meat Boy",,services;status-playable,playable,2020-04-02 23:10:07.000 -"Super Meat Boy Forever",01009C200D60E000,gpu;status-boots,boots,2021-04-26 14:25:39.000 -"Super Mega Space Blaster Special Turbo",,online;status-playable,playable,2020-08-06 12:13:25.000 -"Super Monkey Ball Banana Rumble",010031F019294000,status-playable,playable,2024-06-28 10:39:18.000 -"Super Monkey Ball: Banana Blitz HD",0100B2A00E1E0000,status-playable;online-broken,playable,2022-09-16 13:16:25.000 -"Super Mutant Alien Assault",,status-playable,playable,2020-06-07 23:32:45.000 -"Super Neptunia RPG",01004D600AC14000,status-playable;nvdec,playable,2022-08-17 16:38:52.000 -"Super Nintendo Entertainment System - Nintendo Switch Online",,status-playable,playable,2021-01-05 00:29:48.000 -"Super One More Jump",0100284007D6C000,status-playable,playable,2022-08-17 16:47:47.000 -"Super Punch Patrol",01001F90122B2000,status-playable,playable,2024-07-12 19:49:02.000 -"Super Putty Squad",0100331005E8E000,gpu;status-ingame;32-bit,ingame,2024-04-29 15:51:54.000 -"SUPER ROBOT WARS T",,online;status-playable,playable,2021-03-25 11:00:40.000 -"SUPER ROBOT WARS V",,online;status-playable,playable,2020-06-23 12:56:37.000 -"SUPER ROBOT WARS X",,online;status-playable,playable,2020-08-05 19:18:51.000 -"Super Saurio Fly",,nvdec;status-playable,playable,2020-08-06 13:12:14.000 -"Super Skelemania",,status-playable,playable,2020-06-07 22:59:50.000 -"Super Smash Bros. Ultimate",01006A800016E000,gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21.000 -"Super Soccer Blast",0100D61012270000,gpu;status-ingame,ingame,2022-02-16 08:39:12.000 -"Super Sportmatchen",0100A9300A4AE000,status-playable,playable,2022-08-19 12:34:40.000 -"Super Street: Racer",0100FB400F54E000,status-playable;UE4,playable,2022-09-16 13:43:14.000 -"Super Tennis Blast - 01000500DB50000",,status-playable,playable,2022-08-19 16:20:48.000 -"Super Toy Cars 2",0100C6800D770000,gpu;regression;status-ingame,ingame,2021-03-02 20:15:15.000 -"Super Volley Blast",010035B00B3F0000,status-playable,playable,2022-08-19 18:14:40.000 -"Superbeat: Xonic EX",0100FF60051E2000,status-ingame;crash;nvdec,ingame,2022-08-19 18:54:40.000 -"SuperEpic: The Entertainment War",0100630010252000,status-playable,playable,2022-10-13 23:02:48.000 -"Superhot",01001A500E8B4000,status-playable,playable,2021-05-05 19:51:30.000 -"Superliminal",,status-playable,playable,2020-09-03 13:20:50.000 -"Supermarket Shriek",0100C01012654000,status-playable,playable,2022-10-13 23:19:20.000 -"Supraland",0100A6E01201C000,status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11.000 -"Survive! Mr. Cube",010029A00AEB0000,status-playable,playable,2022-10-20 14:44:47.000 -"SUSHI REVERSI",01005AB01119C000,status-playable,playable,2021-06-11 19:26:58.000 -"Sushi Striker: The Way of Sushido",,nvdec;status-playable,playable,2020-06-26 20:49:11.000 -"Sweet Witches",0100D6D00EC2C000,status-playable;nvdec,playable,2022-10-20 14:56:37.000 -"Swimsanity!",010049D00C8B0000,status-menus;online,menus,2021-11-26 14:27:16.000 -"SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION",01005DF00DC26000,UE4;gpu;online;status-ingame,ingame,2021-06-09 16:58:50.000 -"SWORD ART ONLINE: Hollow Realization Deluxe Edition",01001B600D1D6000,status-playable;nvdec,playable,2022-08-19 19:19:15.000 -"Sword of the Guardian",,status-playable,playable,2020-07-16 12:24:39.000 -"Sword of the Necromancer",0100E4701355C000,status-ingame;crash,ingame,2022-12-10 01:28:39.000 -"Syberia 1 & 2",01004BB00421E000,status-playable,playable,2021-12-24 12:06:25.000 -"Syberia 2",010028C003FD6000,gpu;status-ingame,ingame,2022-08-24 12:43:03.000 -"Syberia 3",0100CBE004E6C000,nvdec;status-playable,playable,2021-01-25 16:15:12.000 -"Sydney Hunter and the Curse of the Mayan",,status-playable,playable,2020-06-15 12:15:57.000 -"SYNAPTIC DRIVE",,online;status-playable,playable,2020-09-07 13:44:05.000 -"Synergia",01009E700F448000,status-playable,playable,2021-04-06 17:58:04.000 -"SYNTHETIK: Ultimate",01009BF00E7D2000,gpu;status-ingame;crash,ingame,2022-08-30 03:19:25.000 -"Table Top Racing World Tour Nitro Edition",,status-playable,playable,2020-04-05 23:21:30.000 -"Tactical Mind",01000F20083A8000,status-playable,playable,2021-01-25 18:05:00.000 -"Tactical Mind 2",,status-playable,playable,2020-07-01 23:11:07.000 -"Tactics Ogre Reborn",0100E12013C1A000,status-playable;vulkan-backend-bug,playable,2024-04-09 06:21:35.000 -"Tactics V: ""Obsidian Brigade",01007C7006AEE000,status-playable,playable,2021-02-28 15:09:42.000 -"Taiko no Tatsujin Rhythmic Adventure Pack",,status-playable,playable,2020-12-03 07:28:26.000 -"Taiko no Tatsujin: Drum 'n' Fun!",01002C000B552000,status-playable;online-broken;ldn-broken,playable,2023-05-20 15:10:12.000 -"Taiko no Tatsujin: Rhythm Festival",0100BCA0135A0000,status-playable,playable,2023-11-13 13:16:34.000 -"Taiko Risshiden V DX",0100346017304000,status-nothing;crash,nothing,2022-06-06 16:25:31.000 -"Taimumari: Complete Edition",010040A00EA26000,status-playable,playable,2022-12-06 13:34:49.000 -"Tales from the Borderlands",0100F0C011A68000,status-playable;nvdec,playable,2022-10-25 18:44:14.000 -"Tales of the Tiny Planet",0100408007078000,status-playable,playable,2021-01-25 15:47:41.000 -"Tales of Vesperia: Definitive Edition",01002C0008E52000,status-playable,playable,2024-09-28 03:20:47.000 -"Tamashii",010012800EE3E000,status-playable,playable,2021-06-10 15:26:20.000 -"Tamiku",010008A0128C4000,gpu;status-ingame,ingame,2021-06-15 20:06:55.000 -"Tangledeep",,crash;status-boots,boots,2021-01-05 04:08:41.000 -"TaniNani",01007DB010D2C000,crash;kernel;status-nothing,nothing,2021-04-08 03:06:44.000 -"Tank Mechanic Simulator",,status-playable,playable,2020-12-11 15:10:45.000 -"Tanuki Justice",01007A601318C000,status-playable;opengl,playable,2023-02-21 18:28:10.000 -"Tanzia",01004DF007564000,status-playable,playable,2021-06-07 11:10:25.000 -"Task Force Kampas",,status-playable,playable,2020-11-30 14:44:15.000 -"Taxi Chaos",0100B76011DAA000,slow;status-playable;online-broken;UE4,playable,2022-10-25 19:13:00.000 -"Tcheco in the Castle of Lucio",,status-playable,playable,2020-06-27 13:35:43.000 -"Team Sonic Racing",010092B0091D0000,status-playable;online-broken;ldn-works,playable,2024-02-05 15:05:27.000 -"Teenage Mutant Ninja Turtles: Shredder's Revenge",0100FE701475A000,deadlock;status-boots;crash,boots,2024-09-28 09:31:39.000 -"Teenage Mutant Ninja Turtles: Splintered Fate",01005CF01E784000,status-playable,playable,2024-08-03 13:50:42.000 -"Teenage Mutant Ninja Turtles: The Cowabunga Collection",0100FDB0154E4000,status-playable,playable,2024-01-22 19:39:04.000 -"Telling Lies",,status-playable,playable,2020-10-23 21:14:51.000 -"Temtem",0100C8B012DEA000,status-menus;online-broken,menus,2022-12-17 17:36:11.000 -"TENGAI for Nintendo Switch",,32-bit;status-playable,playable,2020-11-25 19:52:26.000 -"Tennis",,status-playable,playable,2020-06-01 20:50:36.000 -"Tennis in the Face",01002970080AA000,status-playable,playable,2022-08-22 14:10:54.000 -"Tennis World Tour",0100092006814000,status-playable;online-broken,playable,2022-08-22 14:27:10.000 -"Tennis World Tour 2",0100950012F66000,status-playable;online-broken,playable,2022-10-14 10:43:16.000 -"Terraria",0100E46006708000,status-playable;online-broken,playable,2022-09-12 16:14:57.000 -"TERROR SQUID",010070C00FB56000,status-playable;online-broken,playable,2023-10-30 22:29:29.000 -"TERRORHYTHM (TRRT)",010043700EB68000,status-playable,playable,2021-02-27 13:18:14.000 -"Tesla vs Lovecraft",0100FBC007EAE000,status-playable,playable,2023-11-21 06:19:36.000 -"Teslagrad",01005C8005F34000,status-playable,playable,2021-02-23 14:41:02.000 -"Tested on Humans: Escape Room",01006F701507A000,status-playable,playable,2022-11-12 14:42:52.000 -"Testra's Escape",,status-playable,playable,2020-06-03 18:21:14.000 -"TETRA for Nintendo Switch",,status-playable,playable,2020-06-26 20:49:55.000 -"TETRIS 99",010040600C5CE000,gpu;status-ingame;online-broken;ldn-untested,ingame,2024-05-02 16:36:41.000 -"Tetsumo Party",,status-playable,playable,2020-06-09 22:39:55.000 -"The Adventure Pals",01008ED0087A4000,status-playable,playable,2022-08-22 14:48:52.000 -"The Adventures of 00 Dilly",,status-playable,playable,2020-12-30 19:32:29.000 -"The Adventures of Elena Temple",,status-playable,playable,2020-06-03 23:15:35.000 -"The Alliance Alive HD Remastered",010045A00E038000,nvdec;status-playable,playable,2021-03-07 15:43:45.000 -"The Almost Gone",,status-playable,playable,2020-07-05 12:33:07.000 -"The Bard's Tale ARPG: Remastered and Resnarkled",0100CD500DDAE000,gpu;status-ingame;nvdec;online-working,ingame,2024-07-18 12:52:01.000 -"The Battle Cats Unite!",01001E50141BC000,deadlock;status-ingame,ingame,2021-12-14 21:38:34.000 -"The Big Journey",010089600E66A000,status-playable,playable,2022-09-16 14:03:08.000 -"The Binding of Isaac: Afterbirth+",010021C000B6A000,status-playable,playable,2021-04-26 14:11:56.000 -"The Bluecoats: North & South",,nvdec;status-playable,playable,2020-12-10 21:22:29.000 -"The Book of Unwritten Tales 2",010062500BFC0000,status-playable,playable,2021-06-09 14:42:53.000 -"The Bridge",,status-playable,playable,2020-06-03 13:53:26.000 -"The Bug Butcher",,status-playable,playable,2020-06-03 12:02:04.000 -"The Bunker",01001B40086E2000,status-playable;nvdec,playable,2022-09-16 14:24:05.000 -"The Caligula Effect: Overdose",,UE4;gpu;status-ingame,ingame,2021-01-04 11:07:50.000 -"The Childs Sight",010066800E9F8000,status-playable,playable,2021-06-11 19:04:56.000 -"The Coma 2: Vicious Sisters",,gpu;status-ingame,ingame,2020-06-20 12:51:51.000 -"The Coma: Recut",,status-playable,playable,2020-06-03 15:11:23.000 -"The Complex",01004170113D4000,status-playable;nvdec,playable,2022-09-28 14:35:41.000 -"The Copper Canyon Dixie Dash",01000F20102AC000,status-playable;UE4,playable,2022-09-29 11:42:29.000 -"The Count Lucanor",01000850037C0000,status-playable;nvdec,playable,2022-08-22 15:26:37.000 -"The Cruel King and the Great Hero",0100EBA01548E000,gpu;services;status-ingame,ingame,2022-12-02 07:02:08.000 -"The Dark Crystal",,status-playable,playable,2020-08-11 13:43:41.000 -"The Darkside Detective",,status-playable,playable,2020-06-03 22:16:18.000 -"The Elder Scrolls V: Skyrim",01000A10041EA000,gpu;status-ingame;crash,ingame,2024-07-14 03:21:31.000 -"The End is Nigh",,status-playable,playable,2020-06-01 11:26:45.000 -"The Escapists 2",,nvdec;status-playable,playable,2020-09-24 12:31:31.000 -"The Escapists: Complete Edition",01001B700BA7C000,status-playable,playable,2021-02-24 17:50:31.000 -"The Executioner",0100C2E0129A6000,nvdec;status-playable,playable,2021-01-23 00:31:28.000 -"The Experiment: Escape Room",01006050114D4000,gpu;status-ingame,ingame,2022-09-30 13:20:35.000 -"The Eyes of Ara",0100B5900DFB2000,status-playable,playable,2022-09-16 14:44:06.000 -"The Fall",,gpu;status-ingame,ingame,2020-05-31 23:31:16.000 -"The Fall Part 2: Unbound",,status-playable,playable,2021-11-06 02:18:08.000 -"The Final Station",0100CDC00789E000,status-playable;nvdec,playable,2022-08-22 15:54:39.000 -"The First Tree",010098800A1E4000,status-playable,playable,2021-02-24 15:51:05.000 -"The Flame in the Flood: Complete Edition",0100C38004DCC000,gpu;status-ingame;nvdec;UE4,ingame,2022-08-22 16:23:49.000 -"The Forbidden Arts - 01007700D4AC000",,status-playable,playable,2021-01-26 16:26:24.000 -"The friends of Ringo Ishikawa",010030700CBBC000,status-playable,playable,2022-08-22 16:33:17.000 -"The Gardener and the Wild Vines",01006350148DA000,gpu;status-ingame,ingame,2024-04-29 16:32:10.000 -"The Gardens Between",0100B13007A6A000,status-playable,playable,2021-01-29 16:16:53.000 -"The Great Ace Attorney Chronicles",010036E00FB20000,status-playable,playable,2023-06-22 21:26:29.000 -"The Great Perhaps",,status-playable,playable,2020-09-02 15:57:04.000 -"THE GRISAIA TRILOGY",01003b300e4aa000,status-playable,playable,2021-01-31 15:53:59.000 -"The Hong Kong Massacre",,crash;status-ingame,ingame,2021-01-21 12:06:56.000 -"The House of Da Vinci",,status-playable,playable,2021-01-05 14:17:19.000 -"The House of Da Vinci 2",,status-playable,playable,2020-10-23 20:47:17.000 -"The Infectious Madness of Doctor Dekker",01008940086E0000,status-playable;nvdec,playable,2022-08-22 16:45:01.000 -"The Inner World",,nvdec;status-playable,playable,2020-06-03 21:22:29.000 -"The Inner World - The Last Wind Monk",,nvdec;status-playable,playable,2020-11-16 13:09:40.000 -"The Jackbox Party Pack",0100AE5003EE6000,status-playable;online-working,playable,2023-05-28 09:28:40.000 -"The Jackbox Party Pack 2",010015D003EE4000,status-playable;online-working,playable,2022-08-22 18:23:40.000 -"The Jackbox Party Pack 3",0100CC80013D6000,slow;status-playable;online-working,playable,2022-08-22 18:41:06.000 -"The Jackbox Party Pack 4",0100E1F003EE8000,status-playable;online-working,playable,2022-08-22 18:56:34.000 -"The Journey Down: Chapter One",010052C00B184000,nvdec;status-playable,playable,2021-02-24 13:32:41.000 -"The Journey Down: Chapter Three",01006BC00B188000,nvdec;status-playable,playable,2021-02-24 13:45:27.000 -"The Journey Down: Chapter Two",,nvdec;status-playable,playable,2021-02-24 13:32:13.000 -"The King's Bird",010020500BD98000,status-playable,playable,2022-08-22 19:07:46.000 -"The Knight & the Dragon",010031B00DB34000,gpu;status-ingame,ingame,2023-08-14 10:31:43.000 -"The Language of Love",,Needs Update;crash;status-nothing,nothing,2020-12-03 17:54:00.000 -"The Lara Croft Collection",010079C017F5E000,services-horizon;deadlock;status-nothing,nothing,2024-07-12 22:45:51.000 -"The Last Campfire",0100449011506000,status-playable,playable,2022-10-20 16:44:19.000 -"The Last Dead End",0100AAD011592000,gpu;status-ingame;UE4,ingame,2022-10-20 16:59:44.000 -"THE LAST REMNANT Remastered",0100AC800D022000,status-playable;nvdec;UE4,playable,2023-02-09 17:24:44.000 -"The Legend of Dark Witch",,status-playable,playable,2020-07-12 15:18:33.000 -"The Legend of Heroes: Trails from Zero",01001920156C2000,gpu;status-ingame;mac-bug,ingame,2024-09-14 21:41:41.000 -"The Legend of Heroes: Trails of Cold Steel III",,status-playable,playable,2020-12-16 10:59:18.000 -"The Legend of Heroes: Trails of Cold Steel III Demo",01009B101044C000,demo;nvdec;status-playable,playable,2021-04-23 01:07:32.000 -"The Legend of Heroes: Trails of Cold Steel IV",0100D3C010DE8000,nvdec;status-playable,playable,2021-04-23 14:01:05.000 -"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",01005E5013862000,status-nothing;crash,nothing,2021-09-30 14:41:07.000 -"The Legend of Zelda Echoes of Wisdom",01008CF01BAAC000,status-playable;nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01.000 -"The Legend of Zelda: Breath of the Wild",01007EF00011E000,gpu;status-ingame;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46.000 -"The Legend of Zelda: Breath of the Wild Demo",0100509005AF2000,status-ingame;demo,ingame,2022-12-24 05:02:58.000 -"The Legend of Zelda: Link's Awakening",01006BB00C6F0000,gpu;status-ingame;nvdec;mac-bug,ingame,2023-08-09 17:37:40.000 -"The Legend of Zelda: Skyward Sword HD",01002DA013484000,gpu;status-ingame,ingame,2024-06-14 16:48:29.000 -"The Legend of Zelda: Tears of the Kingdom",0100F2C0115B6000,gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30.000 -"The LEGO Movie 2 - Videogame",0100A4400BE74000,status-playable,playable,2023-03-01 11:23:37.000 -"The LEGO NINJAGO Movie Video Game",01007FC00206E000,status-nothing;crash,nothing,2022-08-22 19:12:53.000 -"The Liar Princess and the Blind Prince",010064B00B95C000,audio;slow;status-playable,playable,2020-06-08 21:23:28.000 -"The Lion's Song",0100735004898000,status-playable,playable,2021-06-09 15:07:16.000 -"The Little Acre",0100A5000D590000,nvdec;status-playable,playable,2021-03-02 20:22:27.000 -"The Long Dark",01007A700A87C000,status-playable,playable,2021-02-21 14:19:52.000 -"The Long Reach",010052B003A38000,nvdec;status-playable,playable,2021-02-24 14:09:48.000 -"The Long Return",,slow;status-playable,playable,2020-12-10 21:05:10.000 -"The Longest Five Minutes",0100CE1004E72000,gpu;status-boots,boots,2023-02-19 18:33:11.000 -"The Longing",0100F3D0122C2000,gpu;status-ingame,ingame,2022-11-12 15:00:58.000 -"The Lord of the Rings: Adventure Card Game",010085A00C5E8000,status-menus;online-broken,menus,2022-09-16 15:19:32.000 -"The Lost Child",01008A000A404000,nvdec;status-playable,playable,2021-02-23 15:44:20.000 -"The Low Road",0100BAB00A116000,status-playable,playable,2021-02-26 13:23:22.000 -"The Mahjong",,Needs Update;crash;services;status-nothing,nothing,2021-04-01 22:06:22.000 -"The Messenger",,status-playable,playable,2020-03-22 13:51:37.000 -"The Midnight Sanctuary",0100DEC00B2BC000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32.000 -"The MISSING: J.J. Macfield and the Island of Memories",0100F1B00B456000,status-playable,playable,2022-08-22 19:36:18.000 -"The Mooseman",010033300AC1A000,status-playable,playable,2021-02-24 12:58:57.000 -"The movie The Quintessential Bride -Five Memories Spent with You-",01005E9016BDE000,status-playable,playable,2023-12-14 14:43:43.000 -"The Mummy Demastered",0100496004194000,status-playable,playable,2021-02-23 13:11:27.000 -"The Mystery of the Hudson Case",,status-playable,playable,2020-06-01 11:03:36.000 -"The Next Penelope",01000CF0084BC000,status-playable,playable,2021-01-29 16:26:11.000 -"THE NINJA SAVIORS Return of the Warriors",01001FB00E386000,online;status-playable,playable,2021-03-25 23:48:07.000 -"The Oregon Trail",0100B080184BC000,gpu;status-ingame,ingame,2022-11-25 16:11:49.000 -"The Otterman Empire",0100B0101265C000,UE4;gpu;status-ingame,ingame,2021-06-17 12:27:15.000 -"The Outbound Ghost",01000BC01801A000,status-nothing,nothing,2024-03-02 17:10:58.000 -"The Outer Worlds",0100626011656000,gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32.000 -"The Park",,UE4;crash;gpu;status-ingame,ingame,2020-12-18 12:50:07.000 -"The Persistence",010050101127C000,nvdec;status-playable,playable,2021-06-06 19:15:40.000 -"The Pinball Arcade",0100CD300880E000,status-playable;online-broken,playable,2022-08-22 19:49:46.000 -"The Plucky Squire",01006BD018B54000,status-ingame;crash,ingame,2024-09-27 22:32:33.000 -"The Princess Guide",0100E6A00B960000,status-playable,playable,2021-02-24 14:23:34.000 -"The Raven Remastered",010058A00BF1C000,status-playable;nvdec,playable,2022-08-22 20:02:47.000 -"The Red Strings Club",,status-playable,playable,2020-06-01 10:51:18.000 -"The Room",010079400BEE0000,status-playable,playable,2021-04-14 18:57:05.000 -"The Ryuo's Work is Never Done!",010033100EE12000,status-playable,playable,2022-03-29 00:35:37.000 -"The Savior's Gang",01002BA00C7CE000,gpu;status-ingame;nvdec;UE4,ingame,2022-09-21 12:37:48.000 -"The Settlers: New Allies",0100F3200E7CA000,deadlock;status-nothing,nothing,2023-10-25 00:18:05.000 -"The Sexy Brutale",,status-playable,playable,2021-01-06 17:48:28.000 -"The Shapeshifting Detective",,nvdec;status-playable,playable,2021-01-10 13:10:49.000 -"The Sinking City",010028D00BA1A000,status-playable;nvdec;UE4,playable,2022-09-12 16:41:55.000 -"The Spectrum Retreat",010041C00A68C000,status-playable,playable,2022-10-03 18:52:40.000 -"The Stanley Parable: Ultra Deluxe",010029300E5C4000,gpu;status-ingame,ingame,2024-07-12 23:18:26.000 -"The Station",010007F00AF56000,status-playable,playable,2022-09-28 18:15:27.000 -"the StoryTale",0100858010DC4000,status-playable,playable,2022-09-03 13:00:25.000 -"The Stretchers",0100AA400A238000,status-playable;nvdec;UE4,playable,2022-09-16 15:40:58.000 -"The Survivalists",,status-playable,playable,2020-10-27 15:51:13.000 -"The Swindle",010040D00B7CE000,status-playable;nvdec,playable,2022-08-22 20:53:52.000 -"The Swords of Ditto",,slow;status-ingame,ingame,2020-12-06 00:13:12.000 -"The Tiny Bang Story",01009B300D76A000,status-playable,playable,2021-03-05 15:39:05.000 -"The Touryst",0100C3300D8C4000,status-ingame;crash,ingame,2023-08-22 01:32:38.000 -"The Tower of Beatrice",010047300EBA6000,status-playable,playable,2022-09-12 16:51:42.000 -"The Town of Light",010058000A576000,gpu;status-playable,playable,2022-09-21 12:51:34.000 -"The Trail: Frontier Challenge",0100B0E0086F6000,slow;status-playable,playable,2022-08-23 15:10:51.000 -"The Turing Test",0100EA100F516000,status-playable;nvdec,playable,2022-09-21 13:24:07.000 -"The Unicorn Princess",010064E00ECBC000,status-playable,playable,2022-09-16 16:20:56.000 -"The Vanishing of Ethan Carter",0100BCF00E970000,UE4;status-playable,playable,2021-06-09 17:14:47.000 -"The VideoKid",,nvdec;status-playable,playable,2021-01-06 09:28:24.000 -"The Voice",,services;status-menus,menus,2020-07-28 20:48:49.000 -"The Walking Dead",010029200B6AA000,status-playable,playable,2021-06-04 13:10:56.000 -"The Walking Dead: A New Frontier",010056E00B4F4000,status-playable,playable,2022-09-21 13:40:48.000 -"The Walking Dead: Season Two",,status-playable,playable,2020-08-09 12:57:06.000 -"The Walking Dead: The Final Season",010060F00AA70000,status-playable;online-broken,playable,2022-08-23 17:22:32.000 -"The Wanderer: Frankenstein's Creature",,status-playable,playable,2020-07-11 12:49:51.000 -"The Wardrobe: Even Better Edition",01008B200FC6C000,status-playable,playable,2022-09-16 19:14:55.000 -"The Witcher 3: Wild Hunt",01003D100E9C6000,status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51.000 -"The Wonderful 101: Remastered",0100B1300FF08000,slow;status-playable;nvdec,playable,2022-09-30 13:49:28.000 -"The World Ends With You -Final Remix-",0100C1500B82E000,status-playable;ldn-untested,playable,2022-07-09 01:11:21.000 -"The World Next Door",0100E6200D56E000,status-playable,playable,2022-09-21 14:15:23.000 -"Thea: The Awakening",,status-playable,playable,2021-01-18 15:08:47.000 -"THEATRHYTHM FINAL BAR LINE",010024201834A000,status-playable,playable,2023-02-19 19:58:57.000 -"THEATRHYTHM FINAL BAR LINE",010081B01777C000,status-ingame;Incomplete,ingame,2024-08-05 14:24:55.000 -"They Bleed Pixels",01001C2010D08000,gpu;status-ingame,ingame,2024-08-09 05:52:18.000 -"They Came From the Sky",,status-playable,playable,2020-06-12 16:38:19.000 -"Thief of Thieves",0100CE700F62A000,status-nothing;crash;loader-allocator,nothing,2021-11-03 07:16:30.000 -"Thief Simulator",0100CE400E34E000,status-playable,playable,2023-04-22 04:39:11.000 -"Thimbleweed Park",01009BD003B36000,status-playable,playable,2022-08-24 11:15:31.000 -"Think of the Children",0100F2300A5DA000,deadlock;status-menus,menus,2021-11-23 09:04:45.000 -"This Is the Police",0100066004D68000,status-playable,playable,2022-08-24 11:37:05.000 -"This Is the Police 2",01004C100A04C000,status-playable,playable,2022-08-24 11:49:17.000 -"This Strange Realm of Mine",,status-playable,playable,2020-08-28 12:07:24.000 -"This War of Mine: Complete Edition",0100A8700BC2A000,gpu;status-ingame;32-bit;nvdec,ingame,2022-08-24 12:00:44.000 -"THOTH",,status-playable,playable,2020-08-05 18:35:28.000 -"Thronebreaker: The Witcher Tales",0100E910103B4000,nvdec;status-playable,playable,2021-06-03 16:40:15.000 -"Thumper",01006F6002840000,gpu;status-ingame,ingame,2024-08-12 02:41:07.000 -"Thy Sword",01000AC011588000,status-ingame;crash,ingame,2022-09-30 16:43:14.000 -"Tick Tock: A Tale for Two",,status-menus,menus,2020-07-14 14:49:38.000 -"Tied Together",0100B6D00C2DE000,nvdec;status-playable,playable,2021-04-10 14:03:46.000 -"Timber Tennis Versus",,online;status-playable,playable,2020-10-03 17:07:15.000 -"Time Carnage",01004C500B698000,status-playable,playable,2021-06-16 17:57:28.000 -"Time Recoil",0100F770045CA000,status-playable,playable,2022-08-24 12:44:03.000 -"Timespinner",0100DD300CF3A000,gpu;status-ingame,ingame,2022-08-09 09:39:11.000 -"Timothy and the Mysterious Forest",0100393013A10000,gpu;slow;status-ingame,ingame,2021-06-02 00:42:11.000 -"Tin & Kuna",,status-playable,playable,2020-11-17 12:16:12.000 -"Tiny Gladiators",,status-playable,playable,2020-12-14 00:09:43.000 -"Tiny Hands Adventure",010061A00AE64000,status-playable,playable,2022-08-24 16:07:48.000 -"TINY METAL",010074800741A000,UE4;gpu;nvdec;status-ingame,ingame,2021-03-05 17:11:57.000 -"Tiny Racer",01005D0011A40000,status-playable,playable,2022-10-07 11:13:03.000 -"Tiny Thor",010002401AE94000,gpu;status-ingame,ingame,2024-07-26 08:37:35.000 -"Tinykin",0100A73016576000,gpu;status-ingame,ingame,2023-06-18 12:12:24.000 -"Titan Glory",0100FE801185E000,status-boots,boots,2022-10-07 11:36:40.000 -"Titan Quest",0100605008268000,status-playable;nvdec;online-broken,playable,2022-08-19 21:54:15.000 -"Titans Pinball",,slow;status-playable,playable,2020-06-09 16:53:52.000 -"Tlicolity Eyes - twinkle showtime -",010019500DB1E000,gpu;status-boots,boots,2021-05-29 19:43:44.000 -"To the Moon",,status-playable,playable,2021-03-20 15:33:38.000 -"Toast Time: Smash Up!",,crash;services;status-menus,menus,2020-04-03 12:26:59.000 -"Toby: The Secret Mine",,nvdec;status-playable,playable,2021-01-06 09:22:33.000 -"ToeJam & Earl: Back in the Groove",,status-playable,playable,2021-01-06 22:56:58.000 -"TOHU",0100B5E011920000,slow;status-playable,playable,2021-02-08 15:40:44.000 -"Toki",,nvdec;status-playable,playable,2021-01-06 19:59:23.000 -"TOKYO DARK - REMEMBRANCE -",01003E500F962000,nvdec;status-playable,playable,2021-06-10 20:09:49.000 -"Tokyo Mirage Sessions #FE Encore",0100A9400C9C2000,32-bit;status-playable;nvdec,playable,2022-07-07 09:41:07.000 -"Tokyo School Life",0100E2E00CB14000,status-playable,playable,2022-09-16 20:25:54.000 -"Tomb Raider I-III Remastered",010024601BB16000,gpu;status-ingame;opengl,ingame,2024-09-27 12:32:04.000 -"Tomba! Special Edition",0100D7F01E49C000,services-horizon;status-nothing,nothing,2024-09-15 21:59:54.000 -"Tonight we Riot",0100D400100F8000,status-playable,playable,2021-02-26 15:55:09.000 -"TONY HAWK'S™ PRO SKATER™ 1 + 2",0100CC00102B4000,gpu;status-ingame;Needs Update,ingame,2024-09-24 08:18:14.000 -"Tools Up!",,crash;status-ingame,ingame,2020-07-21 12:58:17.000 -"Toon War",01009EA00E2B8000,status-playable,playable,2021-06-11 16:41:53.000 -"Torchlight 2",,status-playable,playable,2020-07-27 14:18:37.000 -"Torchlight III",010075400DDB8000,status-playable;nvdec;online-broken;UE4,playable,2022-10-14 22:20:17.000 -"TORICKY-S",01007AF011732000,deadlock;status-menus,menus,2021-11-25 08:53:36.000 -"Torn Tales - Rebound Edition",,status-playable,playable,2020-11-01 14:11:59.000 -"Total Arcade Racing",0100A64010D48000,status-playable,playable,2022-11-12 15:12:48.000 -"Totally Reliable Delivery Service",0100512010728000,status-playable;online-broken,playable,2024-09-27 19:32:22.000 -"Touhou Genso Wanderer RELOADED",01004E900B082000,gpu;status-ingame;nvdec,ingame,2022-08-25 11:57:36.000 -"Touhou Kobuto V: Burst Battle",,status-playable,playable,2021-01-11 15:28:58.000 -"Touhou Spell Bubble",,status-playable,playable,2020-10-18 11:43:43.000 -"Tower of Babel",,status-playable,playable,2021-01-06 17:05:15.000 -"Tower of Time",,gpu;nvdec;status-ingame,ingame,2020-07-03 11:11:12.000 -"TowerFall",,status-playable,playable,2020-05-16 18:58:07.000 -"Towertale",,status-playable,playable,2020-10-15 13:56:58.000 -"Townsmen - A Kingdom Rebuilt",010049E00BA34000,status-playable;nvdec,playable,2022-10-14 22:48:59.000 -"Toy Stunt Bike: Tiptop's Trials",01009FF00A160000,UE4;status-playable,playable,2021-04-10 13:56:34.000 -"Tracks - Toybox Edition",0100192010F5A000,UE4;crash;status-nothing,nothing,2021-02-08 15:19:18.000 -"Trailblazers",0100BCA00843A000,status-playable,playable,2021-03-02 20:40:49.000 -"Transcripted",010009F004E66000,status-playable,playable,2022-08-25 12:13:11.000 -"TRANSFORMERS: BATTLEGROUNDS",01005E500E528000,online;status-playable,playable,2021-06-17 18:08:19.000 -"Transistor",,status-playable,playable,2020-10-22 11:28:02.000 -"Travel Mosaics 2: Roman Holiday",0100A8D010BFA000,status-playable,playable,2021-05-26 12:33:16.000 -"Travel Mosaics 3: Tokyo Animated",0100102010BFC000,status-playable,playable,2021-05-26 12:06:27.000 -"Travel Mosaics 4: Adventures in Rio",010096D010BFE000,status-playable,playable,2021-05-26 11:54:58.000 -"Travel Mosaics 5: Waltzing Vienna",01004C4010C00000,status-playable,playable,2021-05-26 11:49:35.000 -"Travel Mosaics 6: Christmas Around the World",0100D520119D6000,status-playable,playable,2021-05-26 00:52:47.000 -"Travel Mosaics 7: Fantastic Berlin -",,status-playable,playable,2021-05-22 18:37:34.000 -"Travel Mosaics: A Paris Tour",01007DB00A226000,status-playable,playable,2021-05-26 12:42:26.000 -"Travis Strikes Again: No More Heroes",010011600C946000,status-playable;nvdec;UE4,playable,2022-08-25 12:36:38.000 -"Treadnauts",,status-playable,playable,2021-01-10 14:57:41.000 -"Trials of Mana",0100D7800E9E0000,status-playable;UE4,playable,2022-09-30 21:50:37.000 -"Trials of Mana Demo",0100E1D00FBDE000,status-playable;nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02.000 -"Trials Rising",01003E800A102000,status-playable,playable,2024-02-11 01:36:39.000 -"TRIANGLE STRATEGY",0100CC80140F8000,gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37.000 -"Trine",0100D9000A930000,ldn-untested;nvdec;status-playable,playable,2021-06-03 11:28:15.000 -"Trine 2",010064E00A932000,nvdec;status-playable,playable,2021-06-03 11:45:20.000 -"Trine 3: The Artifacts of Power",0100DEC00A934000,ldn-untested;online;status-playable,playable,2021-06-03 12:01:24.000 -"Trine 4: The Nightmare Prince",010055E00CA68000,gpu;status-nothing,nothing,2025-01-07 05:47:46.000 -"Trinity Trigger",01002D7010A54000,status-ingame;crash,ingame,2023-03-03 03:09:09.000 -"Trivial Pursuit Live! 2",0100868013FFC000,status-boots,boots,2022-12-19 00:04:33.000 -"Troll and I",0100F78002040000,gpu;nvdec;status-ingame,ingame,2021-06-04 16:58:50.000 -"Trollhunters: Defenders of Arcadia",,gpu;nvdec;status-ingame,ingame,2020-11-30 13:27:09.000 -"Tropico 6",0100FBE0113CC000,status-playable;nvdec;UE4,playable,2022-10-14 23:21:03.000 -"Trouble Witches Final! Episode 01: Daughters of Amalgam",0100D06018DCA000,status-playable,playable,2024-04-08 15:08:11.000 -"Troubleshooter",,UE4;crash;status-nothing,nothing,2020-10-04 13:46:50.000 -"Trover Saves the Universe",,UE4;crash;status-nothing,nothing,2020-10-03 10:25:27.000 -"Truberbrook",0100E6300D448000,status-playable,playable,2021-06-04 17:08:00.000 -"Truck & Logistics Simulator",0100F2100AA5C000,status-playable,playable,2021-06-11 13:29:08.000 -"Truck Driver",0100CB50107BA000,status-playable;online-broken,playable,2022-10-20 17:42:33.000 -"True Fear: Forsaken Souls - Part 1",,nvdec;status-playable,playable,2020-12-15 21:39:52.000 -"TT Isle of Man",,nvdec;status-playable,playable,2020-06-22 12:25:13.000 -"TT Isle of Man 2",010000400F582000,gpu;status-ingame;nvdec;online-broken,ingame,2022-09-30 22:13:05.000 -"TTV2",,status-playable,playable,2020-11-27 13:21:36.000 -"Tumblestone",,status-playable,playable,2021-01-07 17:49:20.000 -"Turok",010085500D5F6000,gpu;status-ingame,ingame,2021-06-04 13:16:24.000 -"Turok 2: Seeds of Evil",0100CDC00D8D6000,gpu;status-ingame;vulkan,ingame,2022-09-12 17:50:05.000 -"Turrican Flashback - 01004B0130C8000",,status-playable;audout,playable,2021-08-30 10:07:56.000 -"TurtlePop: Journey to Freedom",,status-playable,playable,2020-06-12 17:45:39.000 -"Twin Robots: Ultimate Edition",0100047009742000,status-playable;nvdec,playable,2022-08-25 14:24:03.000 -"Two Point Hospital",010031200E044000,status-ingame;crash;nvdec,ingame,2022-09-22 11:22:23.000 -"TY the Tasmanian Tiger",,32-bit;crash;nvdec;status-menus,menus,2020-12-17 21:15:00.000 -"Tyd wag vir Niemand",010073A00C4B2000,status-playable,playable,2021-03-02 13:39:53.000 -"Type:Rider",,status-playable,playable,2021-01-06 13:12:55.000 -"UBERMOSH:SANTICIDE",,status-playable,playable,2020-11-27 15:05:01.000 -"Ubongo - Deluxe Edition",,status-playable,playable,2021-02-04 21:15:01.000 -"UglyDolls: An Imperfect Adventure",010079000B56C000,status-playable;nvdec;UE4,playable,2022-08-25 14:42:16.000 -"Ultimate Fishing Simulator",010048901295C000,status-playable,playable,2021-06-16 18:38:23.000 -"Ultimate Racing 2D",,status-playable,playable,2020-08-05 17:27:09.000 -"Ultimate Runner",010045200A1C2000,status-playable,playable,2022-08-29 12:52:40.000 -"Ultimate Ski Jumping 2020",01006B601117E000,online;status-playable,playable,2021-03-02 20:54:11.000 -"Ultra Hat Dimension",01002D4012222000,services;audio;status-menus,menus,2021-11-18 09:05:20.000 -"Ultra Hyperball",,status-playable,playable,2021-01-06 10:09:55.000 -"Ultra Street Fighter II: The Final Challengers",01007330027EE000,status-playable;ldn-untested,playable,2021-11-25 07:54:58.000 -"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",01006A300BA2C000,status-playable;audout,playable,2023-05-04 17:25:23.000 -"Unbox: Newbie's Adventure",0100592005164000,status-playable;UE4,playable,2022-08-29 13:12:56.000 -"Uncanny Valley",01002D900C5E4000,nvdec;status-playable,playable,2021-06-04 13:28:45.000 -"Undead and Beyond",010076F011F54000,status-playable;nvdec,playable,2022-10-04 09:11:18.000 -"Under Leaves",01008F3013E4E000,status-playable,playable,2021-05-22 18:13:58.000 -"Undertale",010080B00AD66000,status-playable,playable,2022-08-31 17:31:46.000 -"Unepic",01008F80049C6000,status-playable,playable,2024-01-15 17:03:00.000 -"UnExplored - Unlocked Edition",,status-playable,playable,2021-01-06 10:02:16.000 -"Unhatched",,status-playable,playable,2020-12-11 12:11:09.000 -"Unicorn Overlord",010069401ADB8000,status-playable,playable,2024-09-27 14:04:32.000 -"Unit 4",,status-playable,playable,2020-12-16 18:54:13.000 -"Unknown Fate",,slow;status-ingame,ingame,2020-10-15 12:27:42.000 -"Unlock the King",,status-playable,playable,2020-09-01 13:58:27.000 -"Unlock the King 2",0100A3E011CB0000,status-playable,playable,2021-06-15 20:43:55.000 -"UNO",01005AA00372A000,status-playable;nvdec;ldn-untested,playable,2022-07-28 14:49:47.000 -"Unravel TWO",0100E5D00CC0C000,status-playable;nvdec,playable,2024-05-23 15:45:05.000 -"Unruly Heroes",,status-playable,playable,2021-01-07 18:09:31.000 -"Unspottable",0100B410138C0000,status-playable,playable,2022-10-25 19:28:49.000 -"Untitled Goose Game",,status-playable,playable,2020-09-26 13:18:06.000 -"Unto The End",0100E49013190000,gpu;status-ingame,ingame,2022-10-21 11:13:29.000 -"Urban Flow",,services;status-playable,playable,2020-07-05 12:51:47.000 -"Urban Street Fighting",010054F014016000,status-playable,playable,2021-02-20 19:16:36.000 -"Urban Trial Playground",01001B10068EC000,UE4;nvdec;online;status-playable,playable,2021-03-25 20:56:51.000 -"Urban Trial Tricky",0100A2500EB92000,status-playable;nvdec;UE4,playable,2022-12-06 13:07:56.000 -"Use Your Words",01007C0003AEC000,status-menus;nvdec;online-broken,menus,2022-08-29 17:22:10.000 -"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",0100D4300EBF8000,status-nothing;crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44.000 -"Uta no☆Prince-sama♪ Repeat Love",010024200E00A000,status-playable;nvdec,playable,2022-12-09 09:21:51.000 -"Utopia 9 - A Volatile Vacation",,nvdec;status-playable,playable,2020-12-16 17:06:42.000 -"V-Rally 4",010064400B138000,gpu;nvdec;status-ingame,ingame,2021-06-07 19:37:31.000 -"VA-11 HALL-A",0100A6700D66E000,status-playable,playable,2021-02-26 15:05:34.000 -"Vaccine",,nvdec;status-playable,playable,2021-01-06 01:02:07.000 -"Valfaris",010089700F30C000,status-playable,playable,2022-09-16 21:37:24.000 -"Valkyria Chronicles",0100CAF00B744000,status-ingame;32-bit;crash;nvdec,ingame,2022-11-23 20:03:32.000 -"Valkyria Chronicles 4",01005C600AC68000,audout;nvdec;status-playable,playable,2021-06-03 18:12:25.000 -"Valkyria Chronicles 4 Demo",0100FBD00B91E000,slow;status-ingame;demo,ingame,2022-08-29 20:39:07.000 -"Valley",0100E0E00B108000,status-playable;nvdec,playable,2022-09-28 19:27:58.000 -"Vampire Survivors",010089A0197E4000,status-ingame,ingame,2024-06-17 09:57:38.000 -"Vampyr",01000BD00CE64000,status-playable;nvdec;UE4,playable,2022-09-16 22:15:51.000 -"Vandals",01007C500D650000,status-playable,playable,2021-01-27 21:45:46.000 -"Vaporum",010030F00CA1E000,nvdec;status-playable,playable,2021-05-28 14:25:33.000 -"VARIABLE BARRICADE NS",010045C0109F2000,status-playable;nvdec,playable,2022-02-26 15:50:13.000 -"VASARA Collection",0100FE200AF48000,nvdec;status-playable,playable,2021-02-28 15:26:10.000 -"Vasilis",,status-playable,playable,2020-09-01 15:05:35.000 -"Vegas Party",01009CD003A0A000,status-playable,playable,2021-04-14 19:21:41.000 -"Vektor Wars",010098400E39E000,status-playable;online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46.000 -"Vengeful Guardian: Moonrider",01003A8018E60000,deadlock;status-boots,boots,2024-03-17 23:35:37.000 -"Venture Kid",010095B00DBC8000,crash;gpu;status-ingame,ingame,2021-04-18 16:33:17.000 -"Vera Blanc: Full Moon",,audio;status-playable,playable,2020-12-17 12:09:30.000 -"Very Very Valet",0100379013A62000,status-playable;nvdec,playable,2022-11-12 15:25:51.000 -"Very Very Valet Demo - 01006C8014DDA000",01006C8014DDA000,status-boots;crash;Needs Update;demo,boots,2022-11-12 15:26:13.000 -"Vesta",010057B00712C000,status-playable;nvdec,playable,2022-08-29 21:03:39.000 -"Victor Vran Overkill Edition",0100E81007A06000,gpu;deadlock;status-ingame;nvdec;opengl,ingame,2022-08-30 11:46:56.000 -"Violett",01005880063AA000,nvdec;status-playable,playable,2021-01-28 13:09:36.000 -"Viviette",010037900CB1C000,status-playable,playable,2021-06-11 15:33:40.000 -"Void Bastards",0100D010113A8000,status-playable,playable,2022-10-15 00:04:19.000 -"void* tRrLM(); //Void Terrarium",0100FF7010E7E000,gpu;status-ingame;Needs Update;regression,ingame,2023-02-10 01:13:25.000 -"void* tRrLM2(); //Void Terrarium 2",010078D0175EE000,status-playable,playable,2023-12-21 11:00:41.000 -"Volgarr the Viking",,status-playable,playable,2020-12-18 15:25:50.000 -"Volta-X",0100A7900E79C000,status-playable;online-broken,playable,2022-10-07 12:20:51.000 -"Vostok, Inc.",01004D8007368000,status-playable,playable,2021-01-27 17:43:59.000 -"Voxel Galaxy",0100B1E0100A4000,status-playable,playable,2022-09-28 22:45:02.000 -"Voxel Pirates",0100AFA011068000,status-playable,playable,2022-09-28 22:55:02.000 -"Voxel Sword",0100BFB00D1F4000,status-playable,playable,2022-08-30 14:57:27.000 -"Vroom in the Night Sky",01004E90028A2000,status-playable;Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29.000 -"VSR: Void Space Racing",0100C7C00AE6C000,status-playable,playable,2021-01-27 14:08:59.000 -"VtM Coteries of New York",,status-playable,playable,2020-10-04 14:55:22.000 -"Waifu Uncovered",0100B130119D0000,status-ingame;crash,ingame,2023-02-27 01:17:46.000 -"Wanba Warriors",,status-playable,playable,2020-10-04 17:56:22.000 -"Wanderjahr TryAgainOrWalkAway",,status-playable,playable,2020-12-16 09:46:04.000 -"Wanderlust Travel Stories",0100B27010436000,status-playable,playable,2021-04-07 16:09:12.000 -"Wandersong",0100F8A00853C000,nvdec;status-playable,playable,2021-06-04 15:33:34.000 -"Wanna Survive",0100D67013910000,status-playable,playable,2022-11-12 21:15:43.000 -"War Of Stealth - assassin",01004FA01391A000,status-playable,playable,2021-05-22 17:34:38.000 -"War Tech Fighters",010049500DE56000,status-playable;nvdec,playable,2022-09-16 22:29:31.000 -"War Theatre",010084D00A134000,gpu;status-ingame,ingame,2021-06-07 19:42:45.000 -"War Truck Simulator",0100B6B013B8A000,status-playable,playable,2021-01-31 11:22:54.000 -"War-Torn Dreams",,crash;status-nothing,nothing,2020-10-21 11:36:16.000 -"WARBORN",,status-playable,playable,2020-06-25 12:36:47.000 -"Wardogs: Red's Return",010056901285A000,status-playable,playable,2022-11-13 15:29:01.000 -"WarGroove",01000F0002BB6000,status-playable;online-broken,playable,2022-08-31 10:30:45.000 -"Warhammer 40,000: Mechanicus",0100C6000EEA8000,nvdec;status-playable,playable,2021-06-13 10:46:38.000 -"Warhammer 40,000: Space Wolf",0100E5600D7B2000,status-playable;online-broken,playable,2022-09-20 21:11:20.000 -"Warhammer Age of Sigmar: Storm Ground",010031201307A000,status-playable;nvdec;online-broken;UE4,playable,2022-11-13 15:46:14.000 -"Warhammer Quest 2",,status-playable,playable,2020-08-04 15:28:03.000 -"WarioWare: Get It Together!",0100563010E0C000,gpu;status-ingame;opengl-backend-bug,ingame,2024-04-23 01:04:56.000 -"Warioware: Move IT!",010045B018EC2000,status-playable,playable,2023-11-14 00:23:51.000 -"Warlocks 2: God Slayers",,status-playable,playable,2020-12-16 17:36:50.000 -"Warp Shift",,nvdec;status-playable,playable,2020-12-15 14:48:48.000 -"Warparty",,nvdec;status-playable,playable,2021-01-27 18:26:32.000 -"WarriOrb",010032700EAC4000,UE4;status-playable,playable,2021-06-17 15:45:14.000 -"WARRIORS OROCHI 4 ULTIMATE",0100E8500AD58000,status-playable;nvdec;online-broken,playable,2024-08-07 01:50:37.000 -"Wartile Complete Edition",,UE4;crash;gpu;status-menus,menus,2020-12-11 21:56:10.000 -"Wasteland 2: Director's Cut",010039A00BC64000,nvdec;status-playable,playable,2021-01-27 13:34:11.000 -"Water Balloon Mania",,status-playable,playable,2020-10-23 20:20:59.000 -"Way of the Passive Fist",0100BA200C378000,gpu;status-ingame,ingame,2021-02-26 21:07:06.000 -"We should talk.",,crash;status-nothing,nothing,2020-08-03 12:32:36.000 -"Welcome to Hanwell",,UE4;crash;status-boots,boots,2020-08-03 11:54:57.000 -"Welcome to Primrose Lake",0100D7F010B94000,status-playable,playable,2022-10-21 11:30:57.000 -"Wenjia",,status-playable,playable,2020-06-08 11:38:30.000 -"West of Loathing",010031B00A4E8000,status-playable,playable,2021-01-28 12:35:19.000 -"What Remains of Edith Finch",010038900DFE0000,slow;status-playable;UE4,playable,2022-08-31 19:57:59.000 -"Wheel of Fortune [010033600ADE6000]",010033600ADE6000,status-boots;crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24.000 -"Wheels of Aurelia",0100DFC00405E000,status-playable,playable,2021-01-27 21:59:25.000 -"Where Angels Cry",010027D011C9C000,gpu;status-ingame;nvdec,ingame,2022-09-30 22:24:47.000 -"Where Are My Friends?",0100FDB0092B4000,status-playable,playable,2022-09-21 14:39:26.000 -"Where the Bees Make Honey",,status-playable,playable,2020-07-15 12:40:49.000 -"Whipsey and the Lost Atlas",,status-playable,playable,2020-06-23 20:24:14.000 -"Whispering Willows",010015A00AF1E000,status-playable;nvdec,playable,2022-09-30 22:33:05.000 -"Who Wants to Be a Millionaire?",,crash;status-nothing,nothing,2020-12-11 20:22:42.000 -"Widget Satchel",0100C7800CA06000,status-playable,playable,2022-09-16 22:41:07.000 -"WILD GUNS Reloaded",0100CFC00A1D8000,status-playable,playable,2021-01-28 12:29:05.000 -"Wilmot's Warehouse",010071F00D65A000,audio;gpu;status-ingame,ingame,2021-06-02 17:24:32.000 -"WINDJAMMERS",,online;status-playable,playable,2020-10-13 11:24:25.000 -"Windscape",010059900BA3C000,status-playable,playable,2022-10-21 11:49:42.000 -"Windstorm",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-22 13:17:48.000 -"Windstorm - Ari's Arrival",0100D6800CEAC000,UE4;status-playable,playable,2021-06-07 19:33:19.000 -"Wing of Darkness - 010035B012F2000",,status-playable;UE4,playable,2022-11-13 16:03:51.000 -"Winter Games 2023",0100A4A015FF0000,deadlock;status-menus,menus,2023-11-07 20:47:36.000 -"Witch On The Holy Night",010012A017F18800,status-playable,playable,2023-03-06 23:28:11.000 -"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",0100454012E32000,status-ingame;crash,ingame,2021-08-08 11:56:18.000 -"Witch Thief",01002FC00C6D0000,status-playable,playable,2021-01-27 18:16:07.000 -"Witch's Garden",010061501904E000,gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24.000 -"Witcheye",,status-playable,playable,2020-12-14 22:56:08.000 -"Wizard of Legend",0100522007AAA000,status-playable,playable,2021-06-07 12:20:46.000 -"Wizards of Brandel",,status-nothing,nothing,2020-10-14 15:52:33.000 -"Wizards: Wand of Epicosity",0100C7600E77E000,status-playable,playable,2022-10-07 12:32:06.000 -"Wolfenstein II The New Colossus",01009040091E0000,gpu;status-ingame,ingame,2024-04-05 05:39:46.000 -"Wolfenstein: Youngblood",01003BD00CAAE000,status-boots;online-broken,boots,2024-07-12 23:49:20.000 -"Wonder Blade",,status-playable,playable,2020-12-11 17:55:31.000 -"Wonder Boy Anniversary Collection",0100B49016FF0000,deadlock;status-nothing,nothing,2023-04-20 16:01:48.000 -"Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ]",0100EB2012E36000,status-nothing;crash,nothing,2021-11-03 08:45:06.000 -"Wonder Boy: The Dragon's Trap",0100A6300150C000,status-playable,playable,2021-06-25 04:53:21.000 -"Wondershot",0100F5D00C812000,status-playable,playable,2022-08-31 21:05:31.000 -"Woodle Tree 2",,gpu;slow;status-ingame,ingame,2020-06-04 18:44:00.000 -"Woodsalt",0100288012966000,status-playable,playable,2021-04-06 17:01:48.000 -"Wordify",,status-playable,playable,2020-10-03 09:01:07.000 -"World Conqueror X",,status-playable,playable,2020-12-22 16:10:29.000 -"World Neverland",01008E9007064000,status-playable,playable,2021-01-28 17:44:23.000 -"World of Final Fantasy Maxima",,status-playable,playable,2020-06-07 13:57:23.000 -"World of Goo",010009E001D90000,gpu;status-boots;32-bit;crash;regression,boots,2024-04-12 05:52:14.000 -"World of Goo 2",010061F01DB7C800,status-boots,boots,2024-08-08 22:52:49.000 -"World Soccer Pinball",,status-playable,playable,2021-01-06 00:37:02.000 -"Worldend Syndrome",,status-playable,playable,2021-01-03 14:16:32.000 -"Worlds of Magic: Planar Conquest",010000301025A000,status-playable,playable,2021-06-12 12:51:28.000 -"Worm Jazz",01009CD012CC0000,gpu;services;status-ingame;UE4;regression,ingame,2021-11-10 10:33:04.000 -"Worms W.M.D",01001AE005166000,gpu;status-boots;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59.000 -"Worse Than Death",010037500C4DE000,status-playable,playable,2021-06-11 16:05:40.000 -"Woven",01006F100EB16000,nvdec;status-playable,playable,2021-06-02 13:41:08.000 -"WRC 8 FIA World Rally Championship",010087800DCEA000,status-playable;nvdec,playable,2022-09-16 23:03:36.000 -"WRC 9 The Official Game",01001A0011798000,gpu;slow;status-ingame;nvdec,ingame,2022-10-25 19:47:39.000 -"Wreckfest",0100DC0012E48000,status-playable,playable,2023-02-12 16:13:00.000 -"Wreckin' Ball Adventure",0100C5D00EDB8000,status-playable;UE4,playable,2022-09-12 18:56:28.000 -"Wulverblade",010033700418A000,nvdec;status-playable,playable,2021-01-27 22:29:05.000 -"Wunderling",01001C400482C000,audio;status-ingame;crash,ingame,2022-09-10 13:20:12.000 -"Wurroom",,status-playable,playable,2020-10-07 22:46:21.000 -"WWE 2K Battlegrounds",010081700EDF4000,status-playable;nvdec;online-broken;UE4,playable,2022-10-07 12:44:40.000 -"WWE 2K18",010009800203E000,status-playable;nvdec,playable,2023-10-21 17:22:01.000 -"X-Morph: Defense",,status-playable,playable,2020-06-22 11:05:31.000 -"XCOM 2 Collection",0100D0B00FB74000,gpu;status-ingame;crash,ingame,2022-10-04 09:38:30.000 -"XEL",0100CC9015360000,gpu;status-ingame,ingame,2022-10-03 10:19:39.000 -"Xenoblade Chronicles 2",0100E95004038000,deadlock;status-ingame;amd-vendor-bug,ingame,2024-03-28 14:31:41.000 -"Xenoblade Chronicles 2: Torna - The Golden Country",0100C9F009F7A000,slow;status-playable;nvdec,playable,2023-01-28 16:47:28.000 -"Xenoblade Chronicles 3",010074F013262000,gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44.000 -"Xenoblade Chronicles Definitive Edition",0100FF500E34A000,status-playable;nvdec,playable,2024-05-04 20:12:41.000 -"Xenon Racer",010028600BA16000,status-playable;nvdec;UE4,playable,2022-08-31 22:05:30.000 -"Xenon Valkyrie+",010064200C324000,status-playable,playable,2021-06-07 20:25:53.000 -"Xenoraid",0100928005BD2000,status-playable,playable,2022-09-03 13:01:10.000 -"Xeodrifter",01005B5009364000,status-playable,playable,2022-09-03 13:18:39.000 -"Yaga",01006FB00DB02000,status-playable;nvdec,playable,2022-09-16 23:17:17.000 -"YesterMorrow",,crash;status-ingame,ingame,2020-12-17 17:15:25.000 -"Yet Another Zombie Defense HD",,status-playable,playable,2021-01-06 00:18:39.000 -"YGGDRA UNION We’ll Never Fight Alone",,status-playable,playable,2020-04-03 02:20:47.000 -"YIIK: A Postmodern RPG",0100634008266000,status-playable,playable,2021-01-28 13:38:37.000 -"Yo kai watch 1 for Nintendo Switch",0100C0000CEEA000,gpu;status-ingame;opengl,ingame,2024-05-28 11:11:49.000 -"Yo-Kai Watch 4++",010086C00AF7C000,status-playable,playable,2024-06-18 20:21:44.000 -"Yoku's Island Express",010002D00632E000,status-playable;nvdec,playable,2022-09-03 13:59:02.000 -"Yomawari 3",0100F47016F26000,status-playable,playable,2022-05-10 08:26:51.000 -"Yomawari: The Long Night Collection",010012F00B6F2000,status-playable,playable,2022-09-03 14:36:59.000 -"Yonder: The Cloud Catcher Chronicles",0100CC600ABB2000,status-playable,playable,2021-01-28 14:06:25.000 -"Yono and the Celestial Elephants",0100BE50042F6000,status-playable,playable,2021-01-28 18:23:58.000 -"Yooka-Laylee",0100F110029C8000,status-playable,playable,2021-01-28 14:21:45.000 -"Yooka-Laylee and the Impossible Lair",010022F00DA66000,status-playable,playable,2021-03-05 17:32:21.000 -"Yoshi's Crafted World",01006000040C2000,gpu;status-ingame;audout,ingame,2021-08-30 13:25:51.000 -"Yoshi's Crafted World Demo Version",,gpu;status-boots;status-ingame,boots,2020-12-16 14:57:40.000 -"Yoshiwara Higanbana Kuon no Chigiri",,nvdec;status-playable,playable,2020-10-17 19:14:46.000 -"YouTube",01003A400C3DA800,status-playable,playable,2024-06-08 05:24:10.000 -"Youtubers Life00",00100A7700CCAA40,status-playable;nvdec,playable,2022-09-03 14:56:19.000 -"Ys IX: Monstrum Nox",0100E390124D8000,status-playable,playable,2022-06-12 04:14:42.000 -"Ys Origin",0100F90010882000,status-playable;nvdec,playable,2024-04-17 05:07:33.000 -"Ys VIII: Lacrimosa of Dana",01007F200B0C0000,status-playable;nvdec,playable,2023-08-05 09:26:41.000 -"Yu-Gi-Oh! Legacy of the Duelist: Link Evolution!",010022400BE5A000,status-playable,playable,2024-09-27 21:48:43.000 -"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",01002D60188DE000,status-ingame;crash,ingame,2023-03-17 01:54:01.000 -"YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD.",010037D00DBDC000,nvdec;status-playable,playable,2021-01-26 17:03:52.000 -"Yumeutsutsu Re:After",0100B56011502000,status-playable,playable,2022-11-20 16:09:06.000 -"Yunohana Spring! - Mellow Times -",,audio;crash;status-menus,menus,2020-09-27 19:27:40.000 -"Yuppie Psycho: Executive Edition",,crash;status-ingame,ingame,2020-12-11 10:37:06.000 -"Yuri",0100FC900963E000,status-playable,playable,2021-06-11 13:08:50.000 -"Zaccaria Pinball",010092400A678000,status-playable;online-broken,playable,2022-09-03 15:44:28.000 -"Zarvot - 0100E7900C40000",,status-playable,playable,2021-01-28 13:51:36.000 -"ZenChess",,status-playable,playable,2020-07-01 22:28:27.000 -"Zenge",,status-playable,playable,2020-10-22 13:23:57.000 -"Zengeon",0100057011E50000,services-horizon;status-boots;crash,boots,2024-04-29 15:43:07.000 -"Zenith",0100AAC00E692000,status-playable,playable,2022-09-17 09:57:02.000 -"ZERO GUNNER 2",,status-playable,playable,2021-01-04 20:17:14.000 -"Zero Strain",01004B001058C000,services;status-menus;UE4,menus,2021-11-10 07:48:32.000 -"Zettai kaikyu gakuen",,gpu;nvdec;status-ingame,ingame,2020-08-25 15:15:54.000 -"Ziggy The Chaser",0100D7B013DD0000,status-playable,playable,2021-02-04 20:34:27.000 -"ZikSquare",010086700EF16000,gpu;status-ingame,ingame,2021-11-06 02:02:48.000 -"Zoids Wild Blast Unleashed",010069C0123D8000,status-playable;nvdec,playable,2022-10-15 11:26:59.000 -"Zombie Army Trilogy",,ldn-untested;online;status-playable,playable,2020-12-16 12:02:28.000 -"Zombie Driver",,nvdec;status-playable,playable,2020-12-14 23:15:10.000 -"ZOMBIE GOLD RUSH",,online;status-playable,playable,2020-09-24 12:56:08.000 -"Zombie's Cool",,status-playable,playable,2020-12-17 12:41:26.000 -"Zombieland: Double Tap - Road Trip0",01000E5800D32C00,status-playable,playable,2022-09-17 10:08:45.000 -"Zombillie",,status-playable,playable,2020-07-23 17:42:23.000 -"Zotrix: Solar Division",01001EE00A6B0000,status-playable,playable,2021-06-07 20:34:05.000 -"この世の果てで恋を唄う少女YU-NO",,audio;status-ingame,ingame,2021-01-22 07:00:16.000 -"スーパーファミコン Nintendo Switch Online",,slow;status-ingame,ingame,2020-03-14 05:48:38.000 -"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",01000BB01CB8A000,status-nothing,nothing,2024-09-28 07:03:14.000 -"メモリーズオフ - Innocent Fille",010065500B218000,status-playable,playable,2022-12-02 17:36:48.000 -"二ノ国 白き聖灰の女王",010032400E700000,services;status-menus;32-bit,menus,2023-04-16 17:11:06.000 -"初音ミク Project DIVA MEGA39's",0100F3100DA46000,audio;status-playable;loader-allocator,playable,2022-07-29 11:45:52.000 -"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",0100BF401AF9C000,slow;status-playable,playable,2023-12-31 14:37:17.000 -"死神と少女/Shinigami to Shoujo",0100AFA01750C000,gpu;status-ingame;Incomplete,ingame,2024-03-22 01:06:45.000 -"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",01001BA01EBFC000,services-horizon;status-nothing,nothing,2024-09-28 12:22:55.000 -"牧場物語 Welcome!ワンダフルライフ",0100936018EB4000,status-ingame;crash,ingame,2023-04-25 19:43:52.000 -"索尼克:起源 / Sonic Origins",01009FB016286000,status-ingame;crash,ingame,2024-06-02 07:20:15.000 -"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",0100F4401940A000,status-ingame;crash,ingame,2024-02-12 20:58:31.000 -"超次元ゲイム ネプテューヌ GameMaker R:Evolution",010064801a01c000,status-nothing;crash,nothing,2023-10-30 22:37:40.000 -"逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection)",010005501E68C000,status-playable,playable,2024-09-19 16:38:05.000 -"逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy)",010020D01B890000,status-playable,playable,2024-06-21 21:54:27.000 -"鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",0100309016E7A000,status-playable;UE4,playable,2024-08-08 04:51:49.000 +"title_id","game_name","labels","status","last_updated" +"01001E500F7FC000","#Funtime","status-playable","playable","2020-12-10 16:54:35.000" +"01000E50134A4000","#Halloween, Super Puzzles Dream","nvdec;status-playable","playable","2020-12-10 20:43:58.000" +"01004D100C510000","#KillAllZombies","slow;status-playable","playable","2020-12-16 01:50:25.000" +"0100325012C12000","#NoLimitFantasy, Super Puzzles Dream","nvdec;status-playable","playable","2020-12-12 17:21:32.000" +"01005D400E5C8000","#RaceDieRun","status-playable","playable","2020-07-04 20:23:16.000" +"01003DB011AE8000","#womenUp, Super Puzzles Dream","status-playable","playable","2020-12-12 16:57:25.000" +"0100D87012A14000","#womenUp, Super Puzzles Dream Demo","nvdec;status-playable","playable","2021-02-09 00:03:31.000" +"010099F00EF3E000","-KLAUS-","nvdec;status-playable","playable","2020-06-27 13:27:30.000" +"0100BA9014A02000",".hack//G.U. Last Recode","deadlock;status-boots","boots","2022-03-12 19:15:47.000" +"01000320000CC000","1-2-Switch","services;status-playable","playable","2022-02-18 14:44:03.000" +"0100DC000A472000","10 Second Run RETURNS Demo","gpu;status-ingame","ingame","2021-02-09 00:17:18.000" +"01004D1007926000","10 Second Run Returns","gpu;status-ingame","ingame","2022-07-17 13:06:18.000" +"0100D82015774000","112 Operator","status-playable;nvdec","playable","2022-11-13 22:42:50.000" +"010051E012302000","112th Seed","status-playable","playable","2020-10-03 10:32:38.000" +"0100B1A010014000","12 Labours of Hercules II: The Cretan Bull","cpu;status-nothing;32-bit;crash","nothing","2022-12-07 13:43:10.000" +"01007F600D1B8000","12 is Better Than 6","status-playable","playable","2021-02-22 16:10:12.000" +"0100A840047C2000","12 orbits","status-playable","playable","2020-05-28 16:13:26.000" +"01003FC01670C000","13 Sentinels Aegis Rim","slow;status-ingame","ingame","2024-06-10 20:33:38.000" +"0100C54015002000","13 Sentinels Aegis Rim Demo","status-playable;demo","playable","2022-04-13 14:15:48.000" +"01007E600EEE6000","140","status-playable","playable","2020-08-05 20:01:33.000" +"0100B94013D28000","16-Bit Soccer Demo","status-playable","playable","2021-02-09 00:23:07.000" +"01005CA0099AA000","1917 - The Alien Invasion DX","status-playable","playable","2021-01-08 22:11:16.000" +"0100829010F4A000","1971 PROJECT HELIOS","status-playable","playable","2021-04-14 13:50:19.000" +"0100D1000B18C000","1979 Revolution: Black Friday","nvdec;status-playable","playable","2021-02-21 21:03:43.000" +"01007BB00FC8A000","198X","status-playable","playable","2020-08-07 13:24:38.000" +"010075601150A000","1993 Shenandoah","status-playable","playable","2020-10-24 13:55:42.000" +"0100148012550000","1993 Shenandoah Demo","status-playable","playable","2021-02-09 00:43:43.000" +"010096500EA94000","2048 Battles","status-playable","playable","2020-12-12 14:21:25.000" +"010024C0067C4000","2064: Read Only Memories INTEGRAL","deadlock;status-menus","menus","2020-05-28 16:53:58.000" +"0100749009844000","20XX","gpu;status-ingame","ingame","2023-08-14 09:41:44.000" +"01007550131EE000","2urvive","status-playable","playable","2022-11-17 13:49:37.000" +"0100E20012886000","2weistein – The Curse of the Red Dragon","status-playable;nvdec;UE4","playable","2022-11-18 14:47:07.000" +"0100DAC013D0A000","30 in 1 game collection vol. 2","status-playable;online-broken","playable","2022-10-15 17:22:27.000" +"010056D00E234000","30-in-1 Game Collection","status-playable;online-broken","playable","2022-10-15 17:47:09.000" +"0100FB5010D2E000","3000th Duel","status-playable","playable","2022-09-21 17:12:08.000" +"01003670066DE000","36 Fragments of Midnight","status-playable","playable","2020-05-28 15:12:59.000" +"0100AF400C4CE000","39 Days to Mars","status-playable","playable","2021-02-21 22:12:46.000" +"010010C013F2A000","3D Arcade Fishing","status-playable","playable","2022-10-25 21:50:51.000" +"","3D MiniGolf","status-playable","playable","2021-01-06 09:22:11.000" +"","4x4 Dirt Track","status-playable","playable","2020-12-12 21:41:42.000" +"010010100FF14000","60 Parsecs!","status-playable","playable","2022-09-17 11:01:17.000" +"0100969005E98000","60 Seconds!","services;status-ingame","ingame","2021-11-30 01:04:14.000" +"","6180 the moon","status-playable","playable","2020-05-28 15:39:24.000" +"","64","status-playable","playable","2020-12-12 21:31:58.000" +"","7 Billion Humans","32-bit;status-playable","playable","2020-12-17 21:04:58.000" +"","7th Sector","nvdec;status-playable","playable","2020-08-10 14:22:14.000" +"","8-BIT ADVENTURE STEINS;GATE","audio;status-ingame","ingame","2020-01-12 15:05:06.000" +"","80 Days","status-playable","playable","2020-06-22 21:43:01.000" +"","80's OVERDRIVE","status-playable","playable","2020-10-16 14:33:32.000" +"","88 Heroes","status-playable","playable","2020-05-28 14:13:02.000" +"","9 Monkeys of Shaolin","UE4;gpu;slow;status-ingame","ingame","2020-11-17 11:58:43.000" +"0100C5F012E3E000","9 Monkeys of Shaolin Demo","UE4;gpu;nvdec;status-ingame","ingame","2021-02-09 01:03:30.000" +"","911 Operator Deluxe Edition","status-playable","playable","2020-07-14 13:57:44.000" +"","99Vidas","online;status-playable","playable","2020-10-29 13:00:40.000" +"010023500C2F0000","99Vidas Demo","status-playable","playable","2021-02-09 12:51:31.000" +"","9th Dawn III","status-playable","playable","2020-12-12 22:27:27.000" +"010096A00CC80000","A Ch'ti Bundle","status-playable;nvdec","playable","2022-10-04 12:48:44.000" +"","A Dark Room","gpu;status-ingame","ingame","2020-12-14 16:14:28.000" +"0100582012B90000","A Duel Hand Disaster Trackher: DEMO","crash;demo;nvdec;status-ingame","ingame","2021-03-24 18:45:27.000" +"010026B006802000","A Duel Hand Disaster: Trackher","status-playable;nvdec;online-working","playable","2022-09-04 14:24:55.000" +"","A Frog Game","status-playable","playable","2020-12-14 16:09:53.000" +"01009E1011EC4000","A HERO AND A GARDEN","status-playable","playable","2022-12-05 16:37:47.000" +"010056E00853A000","A Hat In Time","status-playable","playable","2024-06-25 19:52:44.000" +"01005EF00CFDA000","A Knight's Quest","status-playable;UE4","playable","2022-09-12 20:44:20.000" +"","A Short Hike","status-playable","playable","2020-10-15 00:19:58.000" +"","A Sound Plan","crash;status-boots","boots","2020-12-14 16:46:21.000" +"01007DD011C4A000","A Summer with the Shiba Inu","status-playable","playable","2021-06-10 20:51:16.000" +"01008DD006C52000","A magical high school girl","status-playable","playable","2022-07-19 14:40:50.000" +"0100A3E010E56000","A-Train: All Aboard! Tourism","nvdec;status-playable","playable","2021-04-06 17:48:19.000" +"0100C1300BBC6000","ABZU","status-playable;UE4","playable","2022-07-19 15:02:52.000" +"01003C400871E000","ACA NEOGEO 2020 SUPER BASEBALL","online;status-playable","playable","2021-04-12 13:23:51.000" +"0100FC000AFC6000","ACA NEOGEO 3 COUNT BOUT","online;status-playable","playable","2021-04-12 13:16:42.000" +"0100AC40038F4000","ACA NEOGEO AERO FIGHTERS 2","online;status-playable","playable","2021-04-08 15:44:09.000" +"0100B91008780000","ACA NEOGEO AERO FIGHTERS 3","online;status-playable","playable","2021-04-12 13:11:17.000" +"0100B4800AFBA000","ACA NEOGEO AGGRESSORS OF DARK KOMBAT","online;status-playable","playable","2021-04-01 22:48:01.000" +"01003FE00A2F6000","ACA NEOGEO BASEBALL STARS PROFESSIONAL","online;status-playable","playable","2021-04-01 21:23:05.000" +"","ACA NEOGEO BLAZING STAR","crash;services;status-menus","menus","2020-05-26 17:29:02.000" +"0100D2400AFB0000","ACA NEOGEO CROSSED SWORDS","online;status-playable","playable","2021-04-01 20:42:59.000" +"0100EE6002B48000","ACA NEOGEO FATAL FURY","online;status-playable","playable","2021-04-01 20:36:23.000" +"","ACA NEOGEO FOOTBALL FRENZY","status-playable","playable","2021-03-29 20:12:12.000" +"0100CB2001DB8000","ACA NEOGEO GAROU: MARK OF THE WOLVES","online;status-playable","playable","2021-04-01 20:31:10.000" +"01005D700A2F8000","ACA NEOGEO GHOST PILOTS","online;status-playable","playable","2021-04-01 20:26:45.000" +"01000D10038E6000","ACA NEOGEO LAST RESORT","online;status-playable","playable","2021-04-01 19:51:22.000" +"","ACA NEOGEO LEAGUE BOWLING","crash;services;status-menus","menus","2020-05-26 17:11:04.000" +"","ACA NEOGEO MAGICAL DROP II","crash;services;status-menus","menus","2020-05-26 16:48:24.000" +"01007920038F6000","ACA NEOGEO MAGICIAN LORD","online;status-playable","playable","2021-04-01 19:33:26.000" +"0100EBE002B3E000","ACA NEOGEO METAL SLUG","status-playable","playable","2021-02-21 13:56:48.000" +"010086300486E000","ACA NEOGEO METAL SLUG 2","online;status-playable","playable","2021-04-01 19:25:52.000" +"","ACA NEOGEO METAL SLUG 3","crash;services;status-menus","menus","2020-05-26 16:32:45.000" +"01009CE00AFAE000","ACA NEOGEO METAL SLUG 4","online;status-playable","playable","2021-04-01 18:12:18.000" +"","ACA NEOGEO Metal Slug X","crash;services;status-menus","menus","2020-05-26 14:07:20.000" +"010038F00AFA0000","ACA NEOGEO Money Puzzle Exchanger","online;status-playable","playable","2021-04-01 17:59:56.000" +"01002E70032E8000","ACA NEOGEO NEO TURF MASTERS","status-playable","playable","2021-02-21 15:12:01.000" +"010052A00A306000","ACA NEOGEO NINJA COMBAT","status-playable","playable","2021-03-29 21:17:28.000" +"01007E800AFB6000","ACA NEOGEO NINJA COMMANDO","online;status-playable","playable","2021-04-01 17:28:18.000" +"01003A5001DBA000","ACA NEOGEO OVER TOP","status-playable","playable","2021-02-21 13:16:25.000" +"010088500878C000","ACA NEOGEO REAL BOUT FATAL FURY SPECIAL","online;status-playable","playable","2021-04-01 17:18:27.000" +"01005C9002B42000","ACA NEOGEO SAMURAI SHODOWN","online;status-playable","playable","2021-04-01 17:11:35.000" +"010047F001DBC000","ACA NEOGEO SAMURAI SHODOWN IV","online;status-playable","playable","2021-04-12 12:58:54.000" +"010049F00AFE8000","ACA NEOGEO SAMURAI SHODOWN SPECIAL V","online;status-playable","playable","2021-04-10 18:07:13.000" +"01009B300872A000","ACA NEOGEO SENGOKU 2","online;status-playable","playable","2021-04-10 17:36:44.000" +"01008D000877C000","ACA NEOGEO SENGOKU 3","online;status-playable","playable","2021-04-10 16:11:53.000" +"","ACA NEOGEO SHOCK TROOPERS","crash;services;status-menus","menus","2020-05-26 15:29:34.000" +"01007D1004DBA000","ACA NEOGEO SPIN MASTER","online;status-playable","playable","2021-04-10 15:50:19.000" +"010055A00A300000","ACA NEOGEO SUPER SIDEKICKS 2","online;status-playable","playable","2021-04-10 16:05:58.000" +"0100A4D00A308000","ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY","online;status-playable","playable","2021-04-10 15:39:22.000" +"","ACA NEOGEO THE KING OF FIGHTERS '94","crash;services;status-menus","menus","2020-05-26 15:03:44.000" +"01009DC001DB6000","ACA NEOGEO THE KING OF FIGHTERS '95","status-playable","playable","2021-03-29 20:27:35.000" +"01006F0004FB4000","ACA NEOGEO THE KING OF FIGHTERS '96","online;status-playable","playable","2021-04-10 14:49:10.000" +"0100170008728000","ACA NEOGEO THE KING OF FIGHTERS '97","online;status-playable","playable","2021-04-10 14:43:27.000" +"","ACA NEOGEO THE KING OF FIGHTERS '98","crash;services;status-menus","menus","2020-05-26 14:54:20.000" +"0100583001DCA000","ACA NEOGEO THE KING OF FIGHTERS '99","online;status-playable","playable","2021-04-10 14:36:56.000" +"0100B97002B44000","ACA NEOGEO THE KING OF FIGHTERS 2000","online;status-playable","playable","2021-04-10 15:24:35.000" +"010048200AFC2000","ACA NEOGEO THE KING OF FIGHTERS 2001","online;status-playable","playable","2021-04-10 15:16:23.000" +"0100CFD00AFDE000","ACA NEOGEO THE KING OF FIGHTERS 2002","online;status-playable","playable","2021-04-10 15:01:55.000" +"0100EF100AFE6000","ACA NEOGEO THE KING OF FIGHTERS 2003","online;status-playable","playable","2021-04-10 14:54:31.000" +"0100699008792000","ACA NEOGEO THE LAST BLADE 2","online;status-playable","playable","2021-04-10 14:31:54.000" +"0100F7F00AFA2000","ACA NEOGEO THE SUPER SPY","online;status-playable","playable","2021-04-10 14:26:33.000" +"0100CEF001DC0000","ACA NEOGEO WAKU WAKU 7","online;status-playable","playable","2021-04-10 14:20:52.000" +"","ACA NEOGEO WORLD HEROES PERFECT","crash;services;status-menus","menus","2020-05-26 14:14:36.000" +"","ACA NEOGEO ZUPAPA!","online;status-playable","playable","2021-03-25 20:07:33.000" +"0100DBC0081A4000","ACORN Tactics","status-playable","playable","2021-02-22 12:57:40.000" +"01008C901266E000","ADVERSE","UE4;status-playable","playable","2021-04-26 14:32:51.000" +"0100A0400DDE0000","AER - Memories of Old","nvdec;status-playable","playable","2021-03-05 18:43:43.000" +"01001B400D334000","AFL Evolution 2","slow;status-playable;online-broken;UE4","playable","2022-12-07 12:45:56.000" +"0100C1700FB34000","AI: The Somnium Files Demo","nvdec;status-playable","playable","2021-02-10 12:52:33.000" +"01003DD00BFEE000","AIRHEART - Tales of Broken Wings","status-playable","playable","2021-02-26 15:20:27.000" +"","ALPHA","status-playable","playable","2020-12-13 12:17:45.000" +"010020D01AD24000","ANIMAL WELL","status-playable","playable","2024-05-22 18:01:49.000" +"","ANIMUS","status-playable","playable","2020-12-13 15:11:47.000" +"010047000E9AA000","AO Tennis 2","status-playable;online-broken","playable","2022-09-17 12:05:07.000" +"010054500E6D4000","APE OUT DEMO","status-playable","playable","2021-02-10 14:33:06.000" +"0100AC10085CE000","AQUA KITTY UDX","online;status-playable","playable","2021-04-12 15:34:11.000" +"","ARCADE FUZZ","status-playable","playable","2020-08-15 12:37:36.000" +"0100691013C46000","ARIA CHRONICLE","status-playable","playable","2022-11-16 13:50:55.000" +"01009B500007C000","ARMS","status-playable;ldn-works;LAN","playable","2024-08-28 07:49:24.000" +"","ARMS Demo","status-playable","playable","2021-02-10 16:30:13.000" +"","ASCENDANCE","status-playable","playable","2021-01-05 10:54:40.000" +"0100B9400FA38000","ATOM RPG","status-playable;nvdec","playable","2022-10-22 10:11:48.000" +"","ATOMIK RunGunJumpGun","status-playable","playable","2020-12-14 13:19:24.000" +"","ATOMINE","gpu;nvdec;slow;status-playable","playable","2020-12-14 18:56:50.000" +"01000F600B01E000","ATV Drift & Tricks","UE4;online;status-playable","playable","2021-04-08 17:29:17.000" +"0100E100128BA000","AVICII Invector Demo","status-playable","playable","2021-02-10 21:04:58.000" +"010097A00CC0A000","Aaero","status-playable;nvdec","playable","2022-07-19 14:49:55.000" +"","Aborigenus","status-playable","playable","2020-08-05 19:47:24.000" +"","Absolute Drift","status-playable","playable","2020-12-10 14:02:44.000" +"010047F012BE2000","Abyss of The Sacrifice","status-playable;nvdec","playable","2022-10-21 13:56:28.000" +"0100A9900CB5C000","Access Denied","status-playable","playable","2022-07-19 15:25:10.000" +"01007C50132C8000","Ace Angler: Fishing Spirits","status-menus;crash","menus","2023-03-03 03:21:39.000" +"010033401E68E000","Ace Attorney Investigations Collection DEMO","status-playable","playable","2024-09-07 06:16:42.000" +"010039301B7E0000","Ace Combat 7 - Skies Unknown Deluxe Edition","gpu;status-ingame;UE4","ingame","2024-09-27 14:31:43.000" +"0100FF1004D56000","Ace of Seafood","status-playable","playable","2022-07-19 15:32:25.000" +"","Aces of the Luftwaffe Squadron","nvdec;slow;status-playable","playable","2020-05-27 12:29:42.000" +"010054300D822000","Aces of the Luftwaffe Squadron Demo","nvdec;status-playable","playable","2021-02-09 13:12:28.000" +"","Across the Grooves","status-playable","playable","2020-06-27 12:29:51.000" +"","Acthung! Cthulhu Tactics","status-playable","playable","2020-12-14 18:40:27.000" +"010039A010DA0000","Active Neurons","status-playable","playable","2021-01-27 21:31:21.000" +"01000D1011EF0000","Active Neurons 2","status-playable","playable","2022-10-07 16:21:42.000" +"010031C0122B0000","Active Neurons 2 Demo","status-playable","playable","2021-02-09 13:40:21.000" +"0100EE1013E12000","Active Neurons 3","status-playable","playable","2021-03-24 12:20:20.000" +"","Actual Sunlight","gpu;status-ingame","ingame","2020-12-14 17:18:41.000" +"0100C0C0040E4000","Adam's Venture: Origins","status-playable","playable","2021-03-04 18:43:57.000" +"","Adrenaline Rush - Miami Drive","status-playable","playable","2020-12-12 22:49:50.000" +"0100300012F2A000","Advance Wars 1+2: Re-Boot Camp","status-playable","playable","2024-01-30 18:19:44.000" +"","Adventure Llama","status-playable","playable","2020-12-14 19:32:24.000" +"","Adventure Pinball Bundle","slow;status-playable","playable","2020-12-14 20:31:53.000" +"01003B400A00A000","Adventures of Bertram Fiddle: Episode 1: A Dreadly Business","status-playable;nvdec","playable","2022-09-17 11:07:56.000" +"","Adventures of Chris","status-playable","playable","2020-12-12 23:00:02.000" +"0100A0A0136E8000","Adventures of Chris Demo","status-playable","playable","2021-02-09 13:49:21.000" +"","Adventures of Pip","nvdec;status-playable","playable","2020-12-12 22:11:55.000" +"010064500AF72000","Aegis Defenders Demo","status-playable","playable","2021-02-09 14:04:17.000" +"01008E6006502000","Aegis Defenders0","status-playable","playable","2021-02-22 13:29:33.000" +"","Aeolis Tournament","online;status-playable","playable","2020-12-12 22:02:14.000" +"01006710122CE000","Aeolis Tournament Demo","nvdec;status-playable","playable","2021-02-09 14:22:30.000" +"0100E9B013D4A000","Aerial Knight's Never Yield","status-playable","playable","2022-10-25 22:05:00.000" +"0100875011D0C000","Aery","status-playable","playable","2021-03-07 15:25:51.000" +"010018E012914000","Aery - Sky Castle","status-playable","playable","2022-10-21 17:58:49.000" +"0100DF8014056000","Aery - A Journey Beyond Time","status-playable","playable","2021-04-05 15:52:25.000" +"0100087012810000","Aery - Broken Memories","status-playable","playable","2022-10-04 13:11:52.000" +"","Aery - Calm Mind - 0100A801539000","status-playable","playable","2022-11-14 14:26:58.000" +"0100B1C00949A000","AeternoBlade Demo Version","nvdec;status-playable","playable","2021-02-09 14:39:26.000" +"","AeternoBlade I","nvdec;status-playable","playable","2020-12-14 20:06:48.000" +"01009D100EA28000","AeternoBlade II","status-playable;online-broken;UE4;vulkan-backend-bug","playable","2022-09-12 21:11:18.000" +"","AeternoBlade II Demo Version","gpu;nvdec;status-ingame","ingame","2021-02-09 15:10:19.000" +"0100DB100BBCE000","Afterparty","status-playable","playable","2022-09-22 12:23:19.000" +"","Agatha Christie - The ABC Murders","status-playable","playable","2020-10-27 17:08:23.000" +"","Agatha Knife","status-playable","playable","2020-05-28 12:37:58.000" +"","Agent A: A puzzle in disguise","status-playable","playable","2020-11-16 22:53:27.000" +"01008E8012C02000","Agent A: A puzzle in disguise (Demo)","status-playable","playable","2021-02-09 18:30:41.000" +"0100E4700E040000","Ages of Mages: the Last Keeper","status-playable;vulkan-backend-bug","playable","2022-10-04 11:44:05.000" +"010004D00A9C0000","Aggelos","gpu;status-ingame","ingame","2023-02-19 13:24:23.000" +"","Agony","UE4;crash;status-boots","boots","2020-07-10 16:21:18.000" +"010089B00D09C000","Ai: the Somnium Files","status-playable;nvdec","playable","2022-09-04 14:45:06.000" +"","Ailment","status-playable","playable","2020-12-12 22:30:41.000" +"","Air Conflicts: Pacific Carriers","status-playable","playable","2021-01-04 10:52:50.000" +"","Air Hockey","status-playable","playable","2020-05-28 16:44:37.000" +"","Air Missions: HIND","status-playable","playable","2020-12-13 10:16:45.000" +"0100E95011FDC000","Aircraft Evolution","nvdec;status-playable","playable","2021-06-14 13:30:18.000" +"010010A00DB72000","Airfield Mania Demo","services;status-boots;demo","boots","2022-04-10 03:43:02.000" +"01007F100DE52000","Akane","status-playable;nvdec","playable","2022-07-21 00:12:18.000" +"","Akash Path of the Five","gpu;nvdec;status-ingame","ingame","2020-12-14 22:33:12.000" +"010053100B0EA000","Akihabara - Feel the Rhythm Remixed","status-playable","playable","2021-02-22 14:39:35.000" +"","Akuarium","slow;status-playable","playable","2020-12-12 23:43:36.000" +"","Akuto","status-playable","playable","2020-08-04 19:43:27.000" +"0100F5400AB6C000","Alchemic Jousts","gpu;status-ingame","ingame","2022-12-08 15:06:28.000" +"","Alchemist's Castle","status-playable","playable","2020-12-12 23:54:08.000" +"","Alder's Blood","status-playable","playable","2020-08-28 15:15:23.000" +"01004510110C4000","Alder's Blood Prologue","crash;status-ingame","ingame","2021-02-09 19:03:03.000" +"01000E000EEF8000","Aldred - Knight of Honor","services;status-playable","playable","2021-11-30 01:49:17.000" +"010025D01221A000","Alex Kidd in Miracle World DX","status-playable","playable","2022-11-14 15:01:34.000" +"","Alien Cruise","status-playable","playable","2020-08-12 13:56:05.000" +"","Alien Escape","status-playable","playable","2020-06-03 23:43:18.000" +"010075D00E8BA000","Alien: Isolation","status-playable;nvdec;vulkan-backend-bug","playable","2022-09-17 11:48:41.000" +"0100CBD012FB6000","All Walls Must Fall","status-playable;UE4","playable","2022-10-15 19:16:30.000" +"0100C1F00A9B8000","All-Star Fruit Racing","status-playable;nvdec;UE4","playable","2022-07-21 00:35:37.000" +"0100AC501122A000","Alluris","gpu;status-ingame;UE4","ingame","2023-08-02 23:13:50.000" +"","Almightree the Last Dreamer","slow;status-playable","playable","2020-12-15 13:59:03.000" +"","Along the Edge","status-playable","playable","2020-11-18 15:00:07.000" +"","Alpaca Ball: Allstars","nvdec;status-playable","playable","2020-12-11 12:26:29.000" +"","Alphaset by POWGI","status-playable","playable","2020-12-15 15:15:15.000" +"","Alt-Frequencies","status-playable","playable","2020-12-15 19:01:33.000" +"","Alteric","status-playable","playable","2020-11-08 13:53:22.000" +"","Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz","status-playable","playable","2020-08-31 14:17:42.000" +"0100A8A00D27E000","Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version","status-playable","playable","2021-02-10 13:33:59.000" +"010045201487C000","Aluna: Sentinel of the Shards","status-playable;nvdec","playable","2022-10-25 22:17:03.000" +"","Alwa's Awakening","status-playable","playable","2020-10-13 11:52:01.000" +"","Alwa's Legacy","status-playable","playable","2020-12-13 13:00:57.000" +"","American Fugitive","nvdec;status-playable","playable","2021-01-04 20:45:11.000" +"010089D00A3FA000","American Ninja Warrior: Challenge","nvdec;status-playable","playable","2021-06-09 13:11:17.000" +"01003CC00D0BE000","Amnesia: Collection","status-playable","playable","2022-10-04 13:36:15.000" +"010041D00DEB2000","Amoeba Battle - Microscopic RTS Action","status-playable","playable","2021-05-06 13:33:41.000" +"0100B0C013912000","Among Us","status-menus;online;ldn-broken","menus","2021-09-22 15:20:17.000" +"010046500C8D2000","Among the Sleep - Enhanced Edition","nvdec;status-playable","playable","2021-06-03 15:06:25.000" +"01000FD00DF78000","AnShi","status-playable;nvdec;UE4","playable","2022-10-21 19:37:01.000" +"010050900E1C6000","Anarcute","status-playable","playable","2021-02-22 13:17:59.000" +"01009EE0111CC000","Ancestors Legacy","status-playable;nvdec;UE4","playable","2022-10-01 12:25:36.000" +"","Ancient Rush 2","UE4;crash;status-menus","menus","2020-07-14 14:58:47.000" +"0100AE000AEBC000","Angels of Death","nvdec;status-playable","playable","2021-02-22 14:17:15.000" +"010001E00A5F6000","AngerForce: Reloaded for Nintendo Switch","status-playable","playable","2022-07-21 10:37:17.000" +"0100F3500D05E000","Angry Bunnies: Colossal Carrot Crusade","status-playable;online-broken","playable","2022-09-04 14:53:26.000" +"","Angry Video Game Nerd I & II Deluxe","crash;status-ingame","ingame","2020-12-12 23:59:54.000" +"01007A400B3F8000","Anima Gate of Memories: The Nameless Chronicles","status-playable","playable","2021-06-14 14:33:06.000" +"010033F00B3FA000","Anima: Arcane Edition","nvdec;status-playable","playable","2021-01-26 16:55:51.000" +"0100706005B6A000","Anima: Gate of Memories","nvdec;status-playable","playable","2021-06-16 18:13:18.000" +"0100F38011CFE000","Animal Crossing New Horizons Island Transfer Tool","services;status-ingame;Needs Update;Incomplete","ingame","2022-12-07 13:51:19.000" +"01006F8002326000","Animal Crossing: New Horizons","gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug","ingame","2024-09-23 13:31:49.000" +"","Animal Fight Club","gpu;status-ingame","ingame","2020-12-13 13:13:33.000" +"","Animal Fun for Toddlers and Kids","services;status-boots","boots","2020-12-15 16:45:29.000" +"","Animal Hunter Z","status-playable","playable","2020-12-13 12:50:35.000" +"010033C0121DC000","Animal Pairs - Matching & Concentration Game for Toddlers & Kids","services;status-boots","boots","2021-11-29 23:43:14.000" +"010065B009B3A000","Animal Rivals Switch","status-playable","playable","2021-02-22 14:02:42.000" +"0100EFE009424000","Animal Super Squad","UE4;status-playable","playable","2021-04-23 20:50:50.000" +"","Animal Up","status-playable","playable","2020-12-13 15:39:02.000" +"","Animals for Toddlers","services;status-boots","boots","2020-12-15 17:27:27.000" +"","Animated Jigsaws Collection","nvdec;status-playable","playable","2020-12-15 15:58:34.000" +"0100A1900B5B8000","Animated Jigsaws: Beautiful Japanese Scenery DEMO","nvdec;status-playable","playable","2021-02-10 13:49:56.000" +"","Anime Studio Story","status-playable","playable","2020-12-15 18:14:05.000" +"01002B300EB86000","Anime Studio Story Demo","status-playable","playable","2021-02-10 14:50:39.000" +"0100E5A00FD38000","Animus: Harbinger","status-playable","playable","2022-09-13 22:09:20.000" +"","Ankh Guardian - Treasure of the Demon's Temple","status-playable","playable","2020-12-13 15:55:49.000" +"","Anode","status-playable","playable","2020-12-15 17:18:58.000" +"0100CB9018F5A000","Another Code: Recollection","gpu;status-ingame;crash","ingame","2024-09-06 05:58:52.000" +"","Another Sight","UE4;gpu;nvdec;status-ingame","ingame","2020-12-03 16:49:59.000" +"01003C300AAAE000","Another World","slow;status-playable","playable","2022-07-21 10:42:38.000" +"010054C00D842000","Anthill","services;status-menus;nvdec","menus","2021-11-18 09:25:25.000" +"0100596011E20000","Anti-Hero Bundle","status-playable;nvdec","playable","2022-10-21 20:10:30.000" +"","Antiquia Lost","status-playable","playable","2020-05-28 11:57:32.000" +"","Antventor","nvdec;status-playable","playable","2020-12-15 20:09:27.000" +"0100FA100620C000","Ao no Kanata no Four Rhythm","status-playable","playable","2022-07-21 10:50:42.000" +"0100990011866000","Aokana - Four Rhythms Across the Blue","status-playable","playable","2022-10-04 13:50:26.000" +"01005B100C268000","Ape Out","status-playable","playable","2022-09-26 19:04:47.000" +"","Aperion Cyberstorm","status-playable","playable","2020-12-14 00:40:16.000" +"01008CA00D71C000","Aperion Cyberstorm Demo","status-playable","playable","2021-02-10 15:53:21.000" +"","Apocalipsis","deadlock;status-menus","menus","2020-05-27 12:56:37.000" +"","Apocryph","gpu;status-ingame","ingame","2020-12-13 23:24:10.000" +"","Apparition","nvdec;slow;status-ingame","ingame","2020-12-13 23:57:04.000" +"","Aqua Lungers","crash;status-ingame","ingame","2020-12-14 11:25:57.000" +"0100D0D00516A000","Aqua Moto Racing Utopia","status-playable","playable","2021-02-21 21:21:00.000" +"010071800BA74000","Aragami: Shadow Edition","nvdec;status-playable","playable","2021-02-21 20:33:23.000" +"0100C7D00E6A0000","Arc of Alchemist","status-playable;nvdec","playable","2022-10-07 19:15:54.000" +"0100BE80097FA000","Arcade Archives 10-Yard Fight","online;status-playable","playable","2021-03-25 21:26:41.000" +"01005DD00BE08000","Arcade Archives ALPHA MISSION","online;status-playable","playable","2021-04-15 09:20:43.000" +"010083800DC70000","Arcade Archives ALPINE SKI","online;status-playable","playable","2021-04-15 09:28:46.000" +"010014F001DE2000","Arcade Archives ARGUS","online;status-playable","playable","2021-04-16 06:51:25.000" +"0100BEC00C7A2000","Arcade Archives ATHENA","online;status-playable","playable","2021-04-16 07:10:12.000" +"010014F001DE2000","Arcade Archives Armed F","online;status-playable","playable","2021-04-16 07:00:17.000" +"0100426001DE4000","Arcade Archives Atomic Robo-Kid","online;status-playable","playable","2021-04-16 07:20:29.000" +"0100192009824000","Arcade Archives BOMB JACK","online;status-playable","playable","2021-04-16 09:48:26.000" +"0100EDC00E35A000","Arcade Archives CLU CLU LAND","online;status-playable","playable","2021-04-16 10:00:42.000" +"0100BB1001DD6000","Arcade Archives CRAZY CLIMBER","online;status-playable","playable","2021-03-25 22:24:15.000" +"010007A00980C000","Arcade Archives City CONNECTION","online;status-playable","playable","2021-03-25 22:16:15.000" +"","Arcade Archives DONKEY KONG","Needs Update;crash;services;status-menus","menus","2021-03-24 18:18:43.000" +"0100F25001DD0000","Arcade Archives DOUBLE DRAGON","online;status-playable","playable","2021-03-25 22:44:34.000" +"01009E3001DDE000","Arcade Archives DOUBLE DRAGON II The Revenge","online;status-playable","playable","2021-04-12 16:05:29.000" +"0100496006EC8000","Arcade Archives FRONT LINE","online;status-playable","playable","2021-05-05 14:10:49.000" +"01009A4008A30000","Arcade Archives HEROIC EPISODE","online;status-playable","playable","2021-03-25 23:01:26.000" +"01007D200D3FC000","Arcade Archives ICE CLIMBER","online;status-playable","playable","2021-05-05 14:18:34.000" +"010049400C7A8000","Arcade Archives IKARI WARRIORS","online;status-playable","playable","2021-05-05 14:24:46.000" +"010008300C978000","Arcade Archives IMAGE FIGHT","online;status-playable","playable","2021-05-05 14:31:21.000" +"01000DB00980A000","Arcade Archives Ikki","online;status-playable","playable","2021-03-25 23:11:28.000" +"010010B008A36000","Arcade Archives Kid Niki Radical Ninja","audio;status-ingame;online","ingame","2022-07-21 11:02:04.000" +"0100E7C001DE0000","Arcade Archives Kid's Horehore Daisakusen","online;status-playable","playable","2021-04-12 16:21:29.000" +"","Arcade Archives LIFE FORCE","status-playable","playable","2020-09-04 13:26:25.000" +"0100755004608000","Arcade Archives MARIO BROS.","online;status-playable","playable","2021-03-26 11:31:32.000" +"01000BE001DD8000","Arcade Archives MOON CRESTA","online;status-playable","playable","2021-05-05 14:39:29.000" +"01003000097FE000","Arcade Archives MOON PATROL","online;status-playable","playable","2021-03-26 11:42:04.000" +"01003EF00D3B4000","Arcade Archives NINJA GAIDEN","audio;online;status-ingame","ingame","2021-04-12 16:27:53.000" +"01002F300D2C6000","Arcade Archives Ninja Spirit","online;status-playable","playable","2021-05-05 14:45:31.000" +"","Arcade Archives Ninja-Kid","online;status-playable","playable","2021-03-26 20:55:07.000" +"","Arcade Archives OMEGA FIGHTER","crash;services;status-menus","menus","2020-08-18 20:50:54.000" +"","Arcade Archives PLUS ALPHA","audio;status-ingame","ingame","2020-07-04 20:47:55.000" +"0100A6E00D3F8000","Arcade Archives POOYAN","online;status-playable","playable","2021-05-05 17:58:19.000" +"01000D200C7A4000","Arcade Archives PSYCHO SOLDIER","online;status-playable","playable","2021-05-05 18:02:19.000" +"01001530097F8000","Arcade Archives PUNCH-OUT!!","online;status-playable","playable","2021-03-25 22:10:55.000" +"0100FBA00E35C000","Arcade Archives ROAD FIGHTER","online;status-playable","playable","2021-05-05 18:09:17.000" +"010060000BF7C000","Arcade Archives ROUTE 16","online;status-playable","playable","2021-05-05 18:40:41.000" +"0100C2D00981E000","Arcade Archives RYGAR","online;status-playable","playable","2021-04-15 08:48:30.000" +"010081E001DD2000","Arcade Archives Renegade","status-playable;online","playable","2022-07-21 11:45:40.000" +"010069F008A38000","Arcade Archives STAR FORCE","online;status-playable","playable","2021-04-15 08:39:09.000" +"01007A4009834000","Arcade Archives Shusse Ozumo","online;status-playable","playable","2021-05-05 17:52:25.000" +"010008F00B054000","Arcade Archives Sky Skipper","online;status-playable","playable","2021-04-15 08:58:09.000" +"01008C900982E000","Arcade Archives Solomon's Key","online;status-playable","playable","2021-04-19 16:27:18.000" +"","Arcade Archives TERRA CRESTA","crash;services;status-menus","menus","2020-08-18 20:20:55.000" +"0100348001DE6000","Arcade Archives TERRA FORCE","online;status-playable","playable","2021-04-16 20:03:27.000" +"0100DFD016B7A000","Arcade Archives TETRIS THE GRAND MASTER","status-playable","playable","2024-06-23 01:50:29.000" +"0100DC000983A000","Arcade Archives THE NINJA WARRIORS","online;slow;status-ingame","ingame","2021-04-16 19:54:56.000" +"0100AF300D2E8000","Arcade Archives TIME PILOT","online;status-playable","playable","2021-04-16 19:22:31.000" +"010029D006ED8000","Arcade Archives Traverse USA","online;status-playable","playable","2021-04-15 08:11:06.000" +"010042200BE0C000","Arcade Archives URBAN CHAMPION","online;status-playable","playable","2021-04-16 10:20:03.000" +"01004EC00E634000","Arcade Archives VS. GRADIUS","online;status-playable","playable","2021-04-12 14:53:58.000" +"","Arcade Archives VS. SUPER MARIO BROS.","online;status-playable","playable","2021-04-08 14:48:11.000" +"01001B000D8B6000","Arcade Archives WILD WESTERN","online;status-playable","playable","2021-04-16 10:11:36.000" +"010050000D6C4000","Arcade Classics Anniversary Collection","status-playable","playable","2021-06-03 13:55:10.000" +"","Arcade Spirits","status-playable","playable","2020-06-21 11:45:03.000" +"0100E680149DC000","Arcaea","status-playable","playable","2023-03-16 19:31:21.000" +"0100E53013E1C000","Arcanoid Breakout","status-playable","playable","2021-01-25 23:28:02.000" +"","Archaica: Path of LightInd","crash;status-nothing","nothing","2020-10-16 13:22:26.000" +"","Area 86","status-playable","playable","2020-12-16 16:45:52.000" +"0100D4A00B284000","Ark: Survival Evolved","gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested","ingame","2024-04-16 00:53:56.000" +"","Arkanoid vs Space Invaders","services;status-ingame","ingame","2021-01-21 12:50:30.000" +"010069A010606000","Arkham Horror: Mother's Embrace","nvdec;status-playable","playable","2021-04-19 15:40:55.000" +"","Armed 7 DX","status-playable","playable","2020-12-14 11:49:56.000" +"","Armello","nvdec;status-playable","playable","2021-01-07 11:43:26.000" +"0100184011B32000","Arrest of a stone Buddha","status-nothing;crash","nothing","2022-12-07 16:55:00.000" +"","Arrog","status-playable","playable","2020-12-16 17:20:50.000" +"01006AA013086000","Art Sqool","status-playable;nvdec","playable","2022-10-16 20:42:37.000" +"01008EC006BE2000","Art of Balance","gpu;status-ingame;ldn-works","ingame","2022-07-21 17:13:57.000" +"010062F00CAE2000","Art of Balance DEMO","gpu;slow;status-ingame","ingame","2021-02-10 17:17:12.000" +"","Artifact Adventure Gaiden DX","status-playable","playable","2020-12-16 17:49:25.000" +"0100C2500CAB6000","Ary and the Secret of Seasons","status-playable","playable","2022-10-07 20:45:09.000" +"","Asemblance","UE4;gpu;status-ingame","ingame","2020-12-16 18:01:23.000" +"","Ash of Gods: Redemption","deadlock;status-nothing","nothing","2020-08-10 18:08:32.000" +"010027B00E40E000","Ashen","status-playable;nvdec;online-broken;UE4","playable","2022-09-17 12:19:14.000" +"01007B000C834000","Asphalt 9: Legends","services;status-menus;crash;online-broken","menus","2022-12-07 13:28:29.000" +"01007F600B134000","Assassin's Creed III Remastered","status-boots;nvdec","boots","2024-06-25 20:12:11.000" +"010044700DEB0000","Assassin's Creed The Rebel Collection","gpu;status-ingame","ingame","2024-05-19 07:58:56.000" +"0100DF200B24C000","Assault Android Cactus+","status-playable","playable","2021-06-03 13:23:55.000" +"","Assault Chainguns KM","crash;gpu;status-ingame","ingame","2020-12-14 12:48:34.000" +"0100C5E00E540000","Assault on Metaltron Demo","status-playable","playable","2021-02-10 19:48:06.000" +"010057A00C1F6000","Astebreed","status-playable","playable","2022-07-21 17:33:54.000" +"010050400BD38000","Asterix & Obelix XXL 2","deadlock;status-ingame;nvdec","ingame","2022-07-21 17:54:14.000" +"010081500EA1E000","Asterix & Obelix XXL3: The Crystal Menhir","gpu;status-ingame;nvdec;regression","ingame","2022-11-28 14:19:23.000" +"0100F46011B50000","Asterix & Obelix XXL: Romastered","gpu;status-ingame;nvdec;opengl","ingame","2023-08-16 21:22:06.000" +"01007300020FA000","Astral Chain","status-playable","playable","2024-07-17 18:02:19.000" +"","Astro Bears Party","status-playable","playable","2020-05-28 11:21:58.000" +"0100F0400351C000","Astro Duel Deluxe","32-bit;status-playable","playable","2021-06-03 11:21:48.000" +"","AstroWings SpaceWar","status-playable","playable","2020-12-14 13:10:44.000" +"0100B80010C48000","Astrologaster","cpu;status-nothing;32-bit;crash","nothing","2023-06-28 15:39:31.000" +"010099801870E000","Atari 50 The Anniversary Celebration","slow;status-playable","playable","2022-11-14 19:42:10.000" +"0100D9D00EE8C000","Atelier Ayesha: The Alchemist of Dusk DX","status-menus;crash;nvdec;Needs Update","menus","2021-11-24 07:29:54.000" +"0100E5600EE8E000","Atelier Escha & Logy: Alchemists Of The Dusk Sky DX","status-playable;nvdec","playable","2022-11-20 16:01:41.000" +"010023201421E000","Atelier Firis: The Alchemist and the Mysterious Journey DX","gpu;status-ingame;nvdec","ingame","2022-10-25 22:46:19.000" +"","Atelier Lulua ~ The Scion of Arland ~","nvdec;status-playable","playable","2020-12-16 14:29:19.000" +"010009900947A000","Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings","nvdec;status-playable","playable","2021-06-03 18:37:01.000" +"","Atelier Meruru ~ The Apprentice of Arland ~ DX","nvdec;status-playable","playable","2020-06-12 00:50:48.000" +"010088600C66E000","Atelier Rorona - The Alchemist of Arland - DX","nvdec;status-playable","playable","2021-04-08 15:33:15.000" +"01002D700B906000","Atelier Rorona Arland no Renkinjutsushi DX (JP)","status-playable;nvdec","playable","2022-12-02 17:26:54.000" +"01009A9012022000","Atelier Ryza 2: Lost Legends & the Secret Fairy","status-playable","playable","2022-10-16 21:06:06.000" +"0100D1900EC80000","Atelier Ryza: Ever Darkness & the Secret Hideout","status-playable","playable","2023-10-15 16:36:50.000" +"","Atelier Shallie: Alchemists of the Dusk Sea DX","nvdec;status-playable","playable","2020-11-25 20:54:12.000" +"010082A01538E000","Atelier Sophie 2: The Alchemist of the Mysterious Dream","status-ingame;crash","ingame","2022-12-01 04:34:03.000" +"01001A5014220000","Atelier Sophie: The Alchemist of the Mysterious Book DX","status-playable","playable","2022-10-25 23:06:20.000" +"","Atelier Totori ~ The Adventurer of Arland ~ DX","nvdec;status-playable","playable","2020-06-12 01:04:56.000" +"01005FE00EC4E000","Atomic Heist","status-playable","playable","2022-10-16 21:24:32.000" +"0100AD30095A4000","Atomicrops","status-playable","playable","2022-08-06 10:05:07.000" +"","Attack of the Toy Tanks","slow;status-ingame","ingame","2020-12-14 12:59:12.000" +"","Attack on Titan 2","status-playable","playable","2021-01-04 11:40:01.000" +"","Automachef","status-playable","playable","2020-12-16 19:51:25.000" +"01006B700EA6A000","Automachef Demo","status-playable","playable","2021-02-10 20:35:37.000" +"","Aviary Attorney: Definitive Edition","status-playable","playable","2020-08-09 20:32:12.000" +"","Avicii Invector","status-playable","playable","2020-10-25 12:12:56.000" +"","AvoCuddle","status-playable","playable","2020-09-02 14:50:13.000" +"0100085012D64000","Awakening of Cthulhu","UE4;status-playable","playable","2021-04-26 13:03:07.000" +"01002F1005F3C000","Away: Journey to the Unexpected","status-playable;nvdec;vulkan-backend-bug","playable","2022-11-06 15:31:04.000" +"","Awesome Pea","status-playable","playable","2020-10-11 12:39:23.000" +"010023800D3F2000","Awesome Pea (Demo)","status-playable","playable","2021-02-10 21:48:21.000" +"0100B7D01147E000","Awesome Pea 2","status-playable","playable","2022-10-01 12:34:19.000" +"","Awesome Pea 2 (Demo) - 0100D2011E28000","crash;status-nothing","nothing","2021-02-10 22:08:27.000" +"0100DA3011174000","Axes","status-playable","playable","2021-04-08 13:01:58.000" +"","Axiom Verge","status-playable","playable","2020-10-20 01:07:18.000" +"010075400DEC6000","Ayakashi koi gikyoku Free Trial","status-playable","playable","2021-02-10 22:22:11.000" +"01006AF012FC8000","Azur Lane: Crosswave","UE4;nvdec;status-playable","playable","2021-04-05 15:15:25.000" +"","Azuran Tales: Trials","status-playable","playable","2020-08-12 15:23:07.000" +"01006FB00990E000","Azure Reflections","nvdec;online;status-playable","playable","2021-04-08 13:18:25.000" +"01004E90149AA000","Azure Striker GUNVOLT 3","status-playable","playable","2022-08-10 13:46:49.000" +"0100192003FA4000","Azure Striker Gunvolt: STRIKER PACK","32-bit;status-playable","playable","2024-02-10 23:51:21.000" +"","Azurebreak Heroes","status-playable","playable","2020-12-16 21:26:17.000" +"01009B901145C000","B.ARK","status-playable;nvdec","playable","2022-11-17 13:35:02.000" +"","BAFL","status-playable","playable","2021-01-13 08:32:51.000" +"","BATTLESLOTHS","status-playable","playable","2020-10-03 08:32:22.000" +"","BATTLESTAR GALACTICA Deadlock","nvdec;status-playable","playable","2020-06-27 17:35:44.000" +"","BATTLLOON","status-playable","playable","2020-12-17 15:48:23.000" +"","BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~","crash;status-menus","menus","2020-10-04 06:12:08.000" +"","BIG-Bobby-Car - The Big Race","slow;status-playable","playable","2020-12-10 14:25:06.000" +"","BINGO for Nintendo Switch","status-playable","playable","2020-07-23 16:17:36.000" +"0100E62012D3C000","BIT.TRIP RUNNER","status-playable","playable","2022-10-17 14:23:24.000" +"01000AD012D3A000","BIT.TRIP VOID","status-playable","playable","2022-10-17 14:31:23.000" +"0100C4400CB7C000","BLADE ARCUS Rebellion From Shining","status-playable","playable","2022-07-17 18:52:28.000" +"","BLAZBLUE CENTRALFICTION Special Edition","nvdec;status-playable","playable","2020-12-15 23:50:04.000" +"","BOX Align","crash;services;status-nothing","nothing","2020-04-03 17:26:56.000" +"","BOXBOY! + BOXGIRL!","status-playable","playable","2020-11-08 01:11:54.000" +"0100B7200E02E000","BOXBOY! + BOXGIRL! Demo","demo;status-playable","playable","2021-02-13 14:59:08.000" +"","BQM BlockQuest Maker","online;status-playable","playable","2020-07-31 20:56:50.000" +"01003DD00D658000","BULLETSTORM: DUKE OF SWITCH EDITION","status-playable;nvdec","playable","2022-03-03 08:30:24.000" +"","BUSTAFELLOWS","nvdec;status-playable","playable","2020-10-17 20:04:41.000" +"","BUTCHER","status-playable","playable","2021-01-11 18:50:17.000" +"01002CD00A51C000","Baba Is You","status-playable","playable","2022-07-17 05:36:54.000" +"","Back to Bed","nvdec;status-playable","playable","2020-12-16 20:52:04.000" +"0100FEA014316000","Backworlds","status-playable","playable","2022-10-25 23:20:34.000" +"0100EAF00E32E000","BaconMan","status-menus;crash;nvdec","menus","2021-11-20 02:36:21.000" +"01000CB00D094000","Bad Dream: Coma","deadlock;status-boots","boots","2023-08-03 00:54:18.000" +"0100B3B00D81C000","Bad Dream: Fever","status-playable","playable","2021-06-04 18:33:12.000" +"","Bad Dudes","status-playable","playable","2020-12-10 12:30:56.000" +"0100E98006F22000","Bad North","status-playable","playable","2022-07-17 13:44:25.000" +"","Bad North Demo","status-playable","playable","2021-02-10 22:48:38.000" +"010076B011EC8000","Baila Latino","status-playable","playable","2021-04-14 16:40:24.000" +"","Bakugan Champions of Vestroia","status-playable","playable","2020-11-06 19:07:39.000" +"01008260138C4000","Bakumatsu Renka SHINSENGUMI","status-playable","playable","2022-10-25 23:37:31.000" +"0100438012EC8000","Balan Wonderworld","status-playable;nvdec;UE4","playable","2022-10-22 13:08:43.000" +"0100E48013A34000","Balan Wonderworld Demo","gpu;services;status-ingame;UE4;demo","ingame","2023-02-16 20:05:07.000" +"0100CD801CE5E000","Balatro","status-ingame","ingame","2024-04-21 02:01:53.000" +"010010A00DA48000","Baldur's Gate and Baldur's Gate II: Enhanced Editions","32-bit;status-playable","playable","2022-09-12 23:52:15.000" +"0100BC400FB64000","Balthazar's Dreams","status-playable","playable","2022-09-13 00:13:22.000" +"01008D30128E0000","Bamerang","status-playable","playable","2022-10-26 00:29:39.000" +"","Bang Dream Girls Band Party for Nintendo Switch","status-playable","playable","2021-09-19 03:06:58.000" +"","Banner Saga 2","crash;status-boots","boots","2021-01-13 08:56:09.000" +"","Banner Saga 3","slow;status-boots","boots","2021-01-11 16:53:57.000" +"0100CE800B94A000","Banner Saga Trilogy","slow;status-playable","playable","2024-03-06 11:25:20.000" +"010013C010C5C000","Banner of the Maid","status-playable","playable","2021-06-14 15:23:37.000" +"","Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos","status-playable","playable","2020-07-15 05:06:29.000" +"","Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo","nvdec;status-playable","playable","2020-12-17 11:43:10.000" +"","Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive","status-playable","playable","2020-12-17 11:22:50.000" +"0100D3000AEC2000","Baobabs Mausoleum: DEMO","status-playable","playable","2021-02-10 22:59:25.000" +"01003350102E2000","Barbarous! Tavern of Emyr","status-playable","playable","2022-10-16 21:50:24.000" +"0100F7E01308C000","Barbearian","Needs Update;gpu;status-ingame","ingame","2021-06-28 16:27:50.000" +"010039C0106C6000","Baron: Fur Is Gonna Fly","status-boots;crash","boots","2022-02-06 02:05:43.000" +"","Barry Bradford's Putt Panic Party","nvdec;status-playable","playable","2020-06-17 01:08:34.000" +"01004860080A0000","Baseball Riot","status-playable","playable","2021-06-04 18:07:27.000" +"0100E3100450E000","Bass Pro Shops: The Strike - Championship Edition","gpu;status-boots;32-bit","boots","2022-12-09 15:58:16.000" +"010038600B27E000","Bastion","status-playable","playable","2022-02-15 14:15:24.000" +"","Batbarian: Testament of the Primordials","status-playable","playable","2020-12-17 12:00:59.000" +"0100C07018CA6000","Baten Kaitos I & II HD Remaster (Europe/USA)","services;status-boots;Needs Update","boots","2023-10-01 00:44:32.000" +"0100F28018CA4000","Baten Kaitos I & II HD Remaster (Japan)","services;status-boots;Needs Update","boots","2023-10-24 23:11:54.000" +"","Batman - The Telltale Series","nvdec;slow;status-playable","playable","2021-01-11 18:19:35.000" +"01003f00163ce000","Batman: Arkham City","status-playable","playable","2024-09-11 00:30:19.000" +"0100ACD0163D0000","Batman: Arkham Knight","gpu;status-ingame;mac-bug","ingame","2024-06-25 20:24:42.000" +"","Batman: The Enemy Within","crash;status-nothing","nothing","2020-10-16 05:49:27.000" +"0100747011890000","Battle Axe","status-playable","playable","2022-10-26 00:38:01.000" +"","Battle Chasers: Nightwar","nvdec;slow;status-playable","playable","2021-01-12 12:27:34.000" +"","Battle Chef Brigade","status-playable","playable","2021-01-11 14:16:28.000" +"0100DBB00CAEE000","Battle Chef Brigade Demo","status-playable","playable","2021-02-10 23:15:07.000" +"0100A3B011EDE000","Battle Hunters","gpu;status-ingame","ingame","2022-11-12 09:19:17.000" +"","Battle Planet - Judgement Day","status-playable","playable","2020-12-17 14:06:20.000" +"","Battle Princess Madelyn","status-playable","playable","2021-01-11 13:47:23.000" +"0100A7500DF64000","Battle Princess Madelyn Royal Edition","status-playable","playable","2022-09-26 19:14:49.000" +"010099B00E898000","Battle Supremacy - Evolution","gpu;status-boots;nvdec","boots","2022-02-17 09:02:50.000" +"0100DEB00D5A8000","Battle Worlds: Kronos","nvdec;status-playable","playable","2021-06-04 17:48:02.000" +"","Battle of Kings","slow;status-playable","playable","2020-12-17 12:45:23.000" +"0100650010DD4000","Battleground","status-ingame;crash","ingame","2021-09-06 11:53:23.000" +"01006D800A988000","Battlezone Gold Edition","gpu;ldn-untested;online;status-boots","boots","2021-06-04 18:36:05.000" +"010076F0049A2000","Bayonetta","status-playable;audout","playable","2022-11-20 15:51:59.000" +"01007960049A0000","Bayonetta 2","status-playable;nvdec;ldn-works;LAN","playable","2022-11-26 03:46:09.000" +"01004A4010FEA000","Bayonetta 3","gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC","ingame","2024-09-28 14:34:33.000" +"010002801A3FA000","Bayonetta Origins Cereza and the Lost Demon Demo","gpu;status-ingame;demo","ingame","2024-02-17 06:06:28.000" +"0100CF5010FEC000","Bayonetta Origins: Cereza and the Lost Demon","gpu;status-ingame","ingame","2024-02-27 01:39:49.000" +"","Be-A Walker","slow;status-ingame","ingame","2020-09-02 15:00:31.000" +"010095C00406C000","Beach Buggy Racing","online;status-playable","playable","2021-04-13 23:16:50.000" +"010020700DE04000","Bear With Me - The Lost Robots","nvdec;status-playable","playable","2021-02-27 14:20:10.000" +"010024200E97E800","Bear With Me - The Lost Robots Demo","nvdec;status-playable","playable","2021-02-12 22:38:12.000" +"","Bear's Restaurant - 0100CE014A4E000","status-playable","playable","2024-08-11 21:26:59.000" +"","Beat Cop","status-playable","playable","2021-01-06 19:26:48.000" +"01002D20129FC000","Beat Me!","status-playable;online-broken","playable","2022-10-16 21:59:26.000" +"01006B0014590000","Beautiful Desolation","gpu;status-ingame;nvdec","ingame","2022-10-26 10:34:38.000" +"","Bee Simulator","UE4;crash;status-boots","boots","2020-07-15 12:13:13.000" +"010018F007786000","BeeFense BeeMastered","status-playable","playable","2022-11-17 15:38:12.000" +"","Behold the Kickmen","status-playable","playable","2020-06-27 12:49:45.000" +"","Beholder","status-playable","playable","2020-10-16 12:48:58.000" +"01006E1004404000","Ben 10","nvdec;status-playable","playable","2021-02-26 14:08:35.000" +"01009CD00E3AA000","Ben 10: Power Trip","status-playable;nvdec","playable","2022-10-09 10:52:12.000" +"010074500BBC4000","Bendy and the Ink Machine","status-playable","playable","2023-05-06 20:35:39.000" +"010021F00C1C0000","Bertram Fiddle Episode 2: A Bleaker Predicklement","nvdec;status-playable","playable","2021-02-22 14:56:37.000" +"010068600AD16000","Beyblade Burst Battle Zero","services;status-menus;crash;Needs Update","menus","2022-11-20 15:48:32.000" +"010056500CAD8000","Beyond Enemy Lines: Covert Operations","status-playable;UE4","playable","2022-10-01 13:11:50.000" +"0100B8F00DACA000","Beyond Enemy Lines: Essentials","status-playable;nvdec;UE4","playable","2022-09-26 19:48:16.000" +"","Bibi & Tina - Adventures with Horses","nvdec;slow;status-playable","playable","2021-01-13 08:58:09.000" +"010062400E69C000","Bibi & Tina at the horse farm","status-playable","playable","2021-04-06 16:31:39.000" +"","Bibi Blocksberg - Big Broom Race 3","status-playable","playable","2021-01-11 19:07:16.000" +"","Big Buck Hunter Arcade","nvdec;status-playable","playable","2021-01-12 20:31:39.000" +"010088100C35E000","Big Crown: Showdown","status-menus;nvdec;online;ldn-untested","menus","2022-07-17 18:25:32.000" +"0100A42011B28000","Big Dipper","status-playable","playable","2021-06-14 15:08:19.000" +"01002FA00DE72000","Big Drunk Satanic Massacre","status-playable","playable","2021-03-04 21:28:22.000" +"","Big Pharma","status-playable","playable","2020-07-14 15:27:30.000" +"010057700FF7C000","Billion Road","status-playable","playable","2022-11-19 15:57:43.000" +"01002620102C6000","BioShock 2 Remastered","services;status-nothing","nothing","2022-10-29 14:39:22.000" +"0100D560102C8000","BioShock Infinite: The Complete Edition","services-horizon;status-nothing;crash","nothing","2024-08-11 21:35:01.000" +"0100AD10102B2000","BioShock Remastered","services-horizon;status-boots;crash;Needs Update","boots","2024-06-06 01:08:52.000" +"01004BA017CD6000","Biomutant","status-ingame;crash","ingame","2024-05-16 15:46:36.000" +"010053B0117F8000","Biped","status-playable;nvdec","playable","2022-10-01 13:32:58.000" +"01001B700B278000","Bird Game +","status-playable;online","playable","2022-07-17 18:41:57.000" +"0100B6B012FF4000","Birds and Blocks Demo","services;status-boots;demo","boots","2022-04-10 04:53:03.000" +"","Bite the Bullet","status-playable","playable","2020-10-14 23:10:11.000" +"010026E0141C8000","Bitmaster","status-playable","playable","2022-12-13 14:05:51.000" +"","Biz Builder Delux","slow;status-playable","playable","2020-12-15 21:36:25.000" +"0100DD1014AB8000","Black Book","status-playable;nvdec","playable","2022-12-13 16:38:53.000" +"010049000B69E000","Black Future '88","status-playable;nvdec","playable","2022-09-13 11:24:37.000" +"01004BE00A682000","Black Hole Demo","status-playable","playable","2021-02-12 23:02:17.000" +"0100C3200E7E6000","Black Legend","gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-10-22 12:54:48.000" +"","Blackjack Hands","status-playable","playable","2020-11-30 14:04:51.000" +"0100A0A00E660000","Blackmoor2","status-playable;online-broken","playable","2022-09-26 20:26:34.000" +"010032000EA2C000","Blacksad: Under the Skin","status-playable","playable","2022-09-13 11:38:04.000" +"01006B400C178000","Blacksea Odyssey","status-playable;nvdec","playable","2022-10-16 22:14:34.000" +"010068E013450000","Blacksmith of the Sand Kingdom","status-playable","playable","2022-10-16 22:37:44.000" +"0100EA1018A2E000","Blade Assault","audio;status-nothing","nothing","2024-04-29 14:32:50.000" +"01009CC00E224000","Blade II The Return of Evil","audio;status-ingame;crash;UE4","ingame","2021-11-14 02:49:59.000" +"01005950022EC000","Blade Strangers","status-playable;nvdec","playable","2022-07-17 19:02:43.000" +"0100DF0011A6A000","Bladed Fury","status-playable","playable","2022-10-26 11:36:26.000" +"0100CFA00CC74000","Blades of Time","deadlock;status-boots;online","boots","2022-07-17 19:19:58.000" +"01006CC01182C000","Blair Witch","status-playable;nvdec;UE4","playable","2022-10-01 14:06:16.000" +"010039501405E000","Blanc","gpu;slow;status-ingame","ingame","2023-02-22 14:00:13.000" +"0100698009C6E000","Blasphemous","nvdec;status-playable","playable","2021-03-01 12:15:31.000" +"0100302010338000","Blasphemous Demo","status-playable","playable","2021-02-12 23:49:56.000" +"0100225000FEE000","Blaster Master Zero","32-bit;status-playable","playable","2021-03-05 13:22:33.000" +"01005AA00D676000","Blaster Master Zero 2","status-playable","playable","2021-04-08 15:22:59.000" +"010025B002E92000","Blaster Master Zero DEMO","status-playable","playable","2021-02-12 23:59:06.000" +"","BlazBlue: Cross Tag Battle","nvdec;online;status-playable","playable","2021-01-05 20:29:37.000" +"","Blazing Beaks","status-playable","playable","2020-06-04 20:37:06.000" +"","Blazing Chrome","status-playable","playable","2020-11-16 04:56:54.000" +"010091700EA2A000","Bleep Bloop DEMO","nvdec;status-playable","playable","2021-02-13 00:20:53.000" +"010089D011310000","Blind Men","audout;status-playable","playable","2021-02-20 14:15:38.000" +"0100743013D56000","Blizzard Arcade Collection","status-playable;nvdec","playable","2022-08-03 19:37:26.000" +"0100F3500A20C000","BlobCat","status-playable","playable","2021-04-23 17:09:30.000" +"0100E1C00DB6C000","Block-a-Pix Deluxe Demo","status-playable","playable","2021-02-13 00:37:39.000" +"0100C6A01AD56000","Bloo Kid","status-playable","playable","2024-05-01 17:18:04.000" +"010055900FADA000","Bloo Kid 2","status-playable","playable","2024-05-01 17:16:57.000" +"","Blood & Guts Bundle","status-playable","playable","2020-06-27 12:57:35.000" +"01007E700D17E000","Blood Waves","gpu;status-ingame","ingame","2022-07-18 13:04:46.000" +"","Blood will be Spilled","nvdec;status-playable","playable","2020-12-17 03:02:03.000" +"","Bloodstained: Curse of the Moon","status-playable","playable","2020-09-04 10:42:17.000" +"","Bloodstained: Curse of the Moon 2","status-playable","playable","2020-09-04 10:56:27.000" +"010025A00DF2A000","Bloodstained: Ritual of the Night","status-playable;nvdec;UE4","playable","2022-07-18 14:27:35.000" +"0100E510143EC000","Bloody Bunny : The Game","status-playable;nvdec;UE4","playable","2022-10-22 13:18:55.000" +"0100B8400A1C6000","Bloons TD 5","Needs Update;audio;gpu;services;status-boots","boots","2021-04-18 23:02:46.000" +"0100C1000706C000","Blossom Tales","status-playable","playable","2022-07-18 16:43:07.000" +"01000EB01023E000","Blossom Tales Demo","status-playable","playable","2021-02-13 14:22:53.000" +"010073B010F6E000","Blue Fire","status-playable;UE4","playable","2022-10-22 14:46:11.000" +"0100721013510000","Body of Evidence","status-playable","playable","2021-04-25 22:22:11.000" +"0100AD1010CCE000","Bohemian Killing","status-playable;vulkan-backend-bug","playable","2022-09-26 22:41:37.000" +"010093700ECEC000","Boku to Nurse no Kenshuu Nisshi","status-playable","playable","2022-11-21 20:38:34.000" +"01001D900D9AC000","Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)","slow;status-ingame;crash;Needs Update","ingame","2022-04-24 22:46:04.000" +"0100317014B7C000","Bomb Rush Cyberfunk","status-playable","playable","2023-09-28 19:51:57.000" +"01007900080B6000","Bomber Crew","status-playable","playable","2021-06-03 14:21:28.000" +"0100A1F012948000","Bomber Fox","nvdec;status-playable","playable","2021-04-19 17:58:13.000" +"010087300445A000","Bombslinger","services;status-menus","menus","2022-07-19 12:53:15.000" +"01007A200F452000","Book of Demons","status-playable","playable","2022-09-29 12:03:43.000" +"","Bookbound Brigade","status-playable","playable","2020-10-09 14:30:29.000" +"","Boom Blaster","status-playable","playable","2021-03-24 10:55:56.000" +"010081A00EE62000","Boomerang Fu","status-playable","playable","2024-07-28 01:12:41.000" +"010069F0135C4000","Boomerang Fu Demo Version","demo;status-playable","playable","2021-02-13 14:38:13.000" +"010096F00FF22000","Borderlands 2: Game of the Year Edition","status-playable","playable","2022-04-22 18:35:07.000" +"01009970122E4000","Borderlands 3","gpu;status-ingame","ingame","2024-07-15 04:38:14.000" +"010064800F66A000","Borderlands: Game of the Year Edition","slow;status-ingame;online-broken;ldn-untested","ingame","2023-07-23 21:10:36.000" +"010007400FF24000","Borderlands: The Pre-Sequel Ultimate Edition","nvdec;status-playable","playable","2021-06-09 20:17:10.000" +"01008E500AFF6000","Boreal Blade","gpu;ldn-untested;online;status-ingame","ingame","2021-06-11 15:37:14.000" +"010092C013FB8000","Boris The Rocket","status-playable","playable","2022-10-26 13:23:09.000" +"010076F00EBE4000","Bossgard","status-playable;online-broken","playable","2022-10-04 14:21:13.000" +"010069B00EAC8000","Bot Vice Demo","crash;demo;status-ingame","ingame","2021-02-13 14:52:42.000" +"","Bouncy Bob 2","status-playable","playable","2020-07-14 16:51:53.000" +"0100E1200DC1A000","Bounty Battle","status-playable;nvdec","playable","2022-10-04 14:40:51.000" +"","Bow to Blood: Last Captain Standing","slow;status-playable","playable","2020-10-23 10:51:21.000" +"0100E87017D0E000","Bramble The Mountain King","services-horizon;status-playable","playable","2024-03-06 09:32:17.000" +"","Brave Dungeon + Dark Witch's Story: COMBAT","status-playable","playable","2021-01-12 21:06:34.000" +"010081501371E000","BraveMatch","status-playable;UE4","playable","2022-10-26 13:32:15.000" +"01006DC010326000","Bravely Default II","gpu;status-ingame;crash;Needs Update;UE4","ingame","2024-04-26 06:11:26.000" +"0100B6801137E000","Bravely Default II Demo","gpu;status-ingame;crash;UE4;demo","ingame","2022-09-27 05:39:47.000" +"0100F60017D4E000","Bravery and Greed","gpu;deadlock;status-boots","boots","2022-12-04 02:23:47.000" +"","Brawl","nvdec;slow;status-playable","playable","2020-06-04 14:23:18.000" +"010068F00F444000","Brawl Chess","status-playable;nvdec","playable","2022-10-26 13:59:17.000" +"0100C6800B934000","Brawlhalla","online;opengl;status-playable","playable","2021-06-03 18:26:09.000" +"010060200A4BE000","Brawlout","ldn-untested;online;status-playable","playable","2021-06-04 17:35:35.000" +"0100C1B00E1CA000","Brawlout Demo","demo;status-playable","playable","2021-02-13 22:46:53.000" +"010022C016DC8000","Breakout: Recharged","slow;status-ingame","ingame","2022-11-06 15:32:57.000" +"01000AA013A5E000","Breathedge","UE4;nvdec;status-playable","playable","2021-05-06 15:44:28.000" +"","Breathing Fear","status-playable","playable","2020-07-14 15:12:29.000" +"","Brick Breaker","crash;status-ingame","ingame","2020-12-15 17:03:59.000" +"","Brick Breaker","nvdec;online;status-playable","playable","2020-12-15 18:26:23.000" +"","Bridge 3","status-playable","playable","2020-10-08 20:47:24.000" +"","Bridge Constructor: The Walking Dead","gpu;slow;status-ingame","ingame","2020-12-11 17:31:32.000" +"010011000EA7A000","Brigandine: The Legend of Runersia","status-playable","playable","2021-06-20 06:52:25.000" +"0100703011258000","Brigandine: The Legend of Runersia Demo","status-playable","playable","2021-02-14 14:44:10.000" +"01000BF00BE40000","Bring Them Home","UE4;status-playable","playable","2021-04-12 14:14:43.000" +"010060A00B53C000","Broforce","ldn-untested;online;status-playable","playable","2021-05-28 12:23:38.000" +"0100EDD0068A6000","Broken Age","status-playable","playable","2021-06-04 17:40:32.000" +"","Broken Lines","status-playable","playable","2020-10-16 00:01:37.000" +"01001E60085E6000","Broken Sword 5 - the Serpent's Curse","status-playable","playable","2021-06-04 17:28:59.000" +"0100F19011226000","Brotherhood United Demo","demo;status-playable","playable","2021-02-14 21:10:57.000" +"01000D500D08A000","Brothers: A Tale of Two Sons","status-playable;nvdec;UE4","playable","2022-07-19 14:02:22.000" +"","Brunch Club","status-playable","playable","2020-06-24 13:54:07.000" +"010010900F7B4000","Bubble Bobble 4 Friends","nvdec;status-playable","playable","2021-06-04 15:27:55.000" +"0100DBE00C554000","Bubsy: Paws on Fire!","slow;status-ingame","ingame","2023-08-24 02:44:51.000" +"","Bucket Knight","crash;status-ingame","ingame","2020-09-04 13:11:24.000" +"0100F1B010A90000","Bucket Knight demo","demo;status-playable","playable","2021-02-14 21:23:09.000" +"01000D200AC0C000","Bud Spencer & Terence Hill - Slaps and Beans","status-playable","playable","2022-07-17 12:37:00.000" +"","Bug Fables","status-playable","playable","2020-06-09 11:27:00.000" +"","BurgerTime Party!","slow;status-playable","playable","2020-11-21 14:11:53.000" +"01005780106E8000","BurgerTime Party! Demo","demo;status-playable","playable","2021-02-14 21:34:16.000" +"","Buried Stars","status-playable","playable","2020-09-07 14:11:58.000" +"0100DBF01000A000","Burnout Paradise Remastered","nvdec;online;status-playable","playable","2021-06-13 02:54:46.000" +"","Bury me, my Love","status-playable","playable","2020-11-07 12:47:37.000" +"010030D012FF6000","Bus Driver Simulator","status-playable","playable","2022-10-17 13:55:27.000" +"0100F6400A77E000","CAPCOM BELT ACTION COLLECTION","status-playable;online;ldn-untested","playable","2022-07-21 20:51:23.000" +"0100EAE010560000","CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS","status-playable;online-broken;vulkan-backend-bug","playable","2022-10-09 11:20:50.000" +"01002320137CC000","CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION","slow;status-playable","playable","2021-02-14 22:45:35.000" +"","CARRION","crash;status-nothing","nothing","2020-08-13 17:15:12.000" +"0100C4C0132F8000","CASE 2: Animatronics Survival","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-09 11:45:03.000" +"01007600115CE000","CHAOS CODE -NEW SIGN OF CATASTROPHE-","status-boots;crash;nvdec","boots","2022-04-04 12:24:21.000" +"0100957016B90000","CHAOS;HEAD NOAH","status-playable","playable","2022-06-02 22:57:19.000" +"0100A3A00CC7E000","CLANNAD","status-playable","playable","2021-06-03 17:01:02.000" +"","CLANNAD Side Stories - 01007B01372C000","status-playable","playable","2022-10-26 15:03:04.000" +"01002E700C366000","COCOON","gpu;status-ingame","ingame","2024-03-06 11:33:08.000" +"","CODE SHIFTER","status-playable","playable","2020-08-09 15:20:55.000" +"","COLLECTION of SaGA FINAL FANTASY LEGEND","status-playable","playable","2020-12-30 19:11:16.000" +"010015801308E000","CONARIUM","UE4;nvdec;status-playable","playable","2021-04-26 17:57:53.000" +"","CONTRA: ROGUE CORPS","crash;nvdec;regression;status-menus","menus","2021-01-07 13:23:35.000" +"0100B8200ECA6000","CONTRA: ROGUE CORPS Demo","gpu;status-ingame","ingame","2022-09-04 16:46:52.000" +"01003DD00F94A000","COTTOn Reboot! [ コットン リブート! ]","status-playable","playable","2022-05-24 16:29:24.000" +"01004BC0166CC000","CRISIS CORE –FINAL FANTASY VII– REUNION","status-playable","playable","2022-12-19 15:53:59.000" +"0100E24004510000","Cabela's: The Hunt - Championship Edition","status-menus;32-bit","menus","2022-07-21 20:21:25.000" +"01000B900D8B0000","Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda","slow;status-playable;nvdec","playable","2024-04-01 22:43:40.000" +"","Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600","demo;gpu;nvdec;status-ingame","ingame","2021-02-14 21:48:15.000" +"010060400D21C000","Cafeteria Nipponica Demo","demo;status-playable","playable","2021-02-14 22:11:35.000" +"","Café Enchanté","status-playable","playable","2020-11-13 14:54:25.000" +"0100699012F82000","Cake Bash Demo","crash;demo;status-ingame","ingame","2021-02-14 22:21:15.000" +"01004FD00D66A000","Caladrius Blaze","deadlock;status-nothing;nvdec","nothing","2022-12-07 16:44:37.000" +"","Calculation Castle: Greco's Ghostly Challenge ""Addition","32-bit;status-playable","playable","2020-11-01 23:40:11.000" +"","Calculation Castle: Greco's Ghostly Challenge ""Division","32-bit;status-playable","playable","2020-11-01 23:54:55.000" +"","Calculation Castle: Greco's Ghostly Challenge ""Multiplication","32-bit;status-playable","playable","2020-11-02 00:04:33.000" +"","Calculation Castle: Greco's Ghostly Challenge ""Subtraction","32-bit;status-playable","playable","2020-11-01 23:47:42.000" +"010004701504A000","Calculator","status-playable","playable","2021-06-11 13:27:20.000" +"010013A00E750000","Calico","status-playable","playable","2022-10-17 14:44:28.000" +"010046000EE40000","Call of Cthulhu","status-playable;nvdec;UE4","playable","2022-12-18 03:08:30.000" +"0100B4700BFC6000","Call of Juarez: Gunslinger","gpu;status-ingame;nvdec","ingame","2022-09-17 16:49:46.000" +"0100593008BDC000","Can't Drive This","status-playable","playable","2022-10-22 14:55:17.000" +"","Candle - The Power of the Flame","nvdec;status-playable","playable","2020-05-26 12:10:20.000" +"01001E0013208000","Capcom Arcade Stadium","status-playable","playable","2021-03-17 05:45:14.000" +"","Capcom Beat 'Em Up Bundle","status-playable","playable","2020-03-23 18:31:24.000" +"01009BF0072D4000","Captain Toad: Treasure Tracker","32-bit;status-playable","playable","2024-04-25 00:50:16.000" +"01002C400B6B6000","Captain Toad: Treasure Tracker Demo","32-bit;demo;status-playable","playable","2021-02-14 22:36:09.000" +"","Car Mechanic Manager","status-playable","playable","2020-07-23 18:50:17.000" +"01007BD00AE70000","Car Quest","deadlock;status-menus","menus","2021-11-18 08:59:18.000" +"0100DA70115E6000","Caretaker","status-playable","playable","2022-10-04 14:52:24.000" +"0100DD6014870000","Cargo Crew Driver","status-playable","playable","2021-04-19 12:54:22.000" +"010088C0092FE000","Carnival Games","status-playable;nvdec","playable","2022-07-21 21:01:22.000" +"","Carnivores: Dinosaur Hunt","status-playable","playable","2022-12-14 18:46:06.000" +"01008D1001512000","Cars 3 Driven to Win","gpu;status-ingame","ingame","2022-07-21 21:21:05.000" +"0100810012A1A000","Carto","status-playable","playable","2022-09-04 15:37:06.000" +"0100C4E004406000","Cartoon Network Adventure Time: Pirates of the Enchiridion","status-playable;nvdec","playable","2022-07-21 21:49:01.000" +"0100085003A2A000","Cartoon Network Battle Crashers","status-playable","playable","2022-07-21 21:55:40.000" +"010066F01A0E0000","Cassette Beasts","status-playable","playable","2024-07-22 20:38:43.000" +"010001300D14A000","Castle Crashers Remastered","gpu;status-boots","boots","2024-08-10 09:21:20.000" +"0100F6D01060E000","Castle Crashers Remastered Demo","gpu;status-boots;demo","boots","2022-04-10 10:57:10.000" +"0100DA2011F18000","Castle Pals","status-playable","playable","2021-03-04 21:00:33.000" +"01003C100445C000","Castle of Heart","status-playable;nvdec","playable","2022-07-21 23:10:45.000" +"0100F5500FA0E000","Castle of No Escape 2","status-playable","playable","2022-09-13 13:51:42.000" +"","CastleStorm 2","UE4;crash;nvdec;status-boots","boots","2020-10-25 11:22:44.000" +"010097C00AB66000","Castlestorm","status-playable;nvdec","playable","2022-07-21 22:49:14.000" +"","Castlevania Anniversary Collection","audio;status-playable","playable","2020-05-23 11:40:29.000" +"010076000C86E000","Cat Girl Without Salad: Amuse-Bouche","status-playable","playable","2022-09-03 13:01:47.000" +"","Cat Quest","status-playable","playable","2020-04-02 23:09:32.000" +"","Cat Quest II","status-playable","playable","2020-07-06 23:52:09.000" +"0100E86010220000","Cat Quest II Demo","demo;status-playable","playable","2021-02-15 14:11:57.000" +"0100BF00112C0000","Catherine Full Body","status-playable;nvdec","playable","2023-04-02 11:00:37.000" +"0100BAE0077E4000","Catherine Full Body for Nintendo Switch (JP)","Needs Update;gpu;status-ingame","ingame","2021-02-21 18:06:11.000" +"010004400B28A000","Cattails","status-playable","playable","2021-06-03 14:36:57.000" +"","Cave Story+","status-playable","playable","2020-05-22 09:57:25.000" +"01001A100C0E8000","Caveblazers","slow;status-ingame","ingame","2021-06-09 17:57:28.000" +"","Caveman Warriors","status-playable","playable","2020-05-22 11:44:20.000" +"","Caveman Warriors Demo","demo;status-playable","playable","2021-02-15 14:44:08.000" +"","Celeste","status-playable","playable","2020-06-17 10:14:40.000" +"01006B000A666000","Cendrillon palikA","gpu;status-ingame;nvdec","ingame","2022-07-21 22:52:24.000" +"0100F52013A66000","Charge Kid","gpu;status-boots;audout","boots","2024-02-11 01:17:47.000" +"","Chasm","status-playable","playable","2020-10-23 11:03:43.000" +"010034301A556000","Chasm: The Rift","gpu;status-ingame","ingame","2024-04-29 19:02:48.000" +"0100A5900472E000","Chess Ultra","status-playable;UE4","playable","2023-08-30 23:06:31.000" +"0100E3C00A118000","Chicken Assassin: Reloaded","status-playable","playable","2021-02-20 13:29:01.000" +"","Chicken Police - Paint it RED!","nvdec;status-playable","playable","2020-12-10 15:10:11.000" +"0100F6C00A016000","Chicken Range","status-playable","playable","2021-04-23 12:14:23.000" +"","Chicken Rider","status-playable","playable","2020-05-22 11:31:17.000" +"0100CAC011C3A000","Chickens Madness DEMO","UE4;demo;gpu;nvdec;status-ingame","ingame","2021-02-15 15:02:10.000" +"","Child of Light","nvdec;status-playable","playable","2020-12-16 10:23:10.000" +"01002DE00C250000","Children of Morta","gpu;status-ingame;nvdec","ingame","2022-09-13 17:48:47.000" +"","Children of Zodiarcs","status-playable","playable","2020-10-04 14:23:33.000" +"010046F012A04000","Chinese Parents","status-playable","playable","2021-04-08 12:56:41.000" +"01006A30124CA000","Chocobo GP","gpu;status-ingame;crash","ingame","2022-06-04 14:52:18.000" +"","Chocobo's Mystery Dungeon Every Buddy!","slow;status-playable","playable","2020-05-26 13:53:13.000" +"","Choices That Matter: And The Sun Went Out","status-playable","playable","2020-12-17 15:44:08.000" +"","Chou no Doku Hana no Kusari: Taishou Irokoi Ibun","gpu;nvdec;status-ingame","ingame","2020-09-28 17:58:04.000" +"","ChromaGun","status-playable","playable","2020-05-26 12:56:42.000" +"","Chronos","UE4;gpu;nvdec;status-ingame","ingame","2020-12-11 22:16:35.000" +"","Circle of Sumo","status-playable","playable","2020-05-22 12:45:21.000" +"01008FA00D686000","Circuits","status-playable","playable","2022-09-19 11:52:50.000" +"","Cities: Skylines - Nintendo Switch Edition","status-playable","playable","2020-12-16 10:34:57.000" +"0100D9C012900000","Citizens Unite!: Earth x Space","gpu;status-ingame","ingame","2023-10-22 06:44:19.000" +"0100E4200D84E000","Citizens of Space","gpu;status-boots","boots","2023-10-22 06:45:44.000" +"01005E501284E000","City Bus Driving Simulator","status-playable","playable","2021-06-15 21:25:59.000" +"01005ED0107F4000","Clash Force","status-playable","playable","2022-10-01 23:45:48.000" +"010009300AA6C000","Claybook","slow;status-playable;nvdec;online;UE4","playable","2022-07-22 11:11:34.000" +"","Clea","crash;status-ingame","ingame","2020-12-15 16:22:56.000" +"010045E0142A4000","Clea 2","status-playable","playable","2021-04-18 14:25:18.000" +"01008C100C572000","Clock Zero ~Shuuen no Ichibyou~ Devote","status-playable;nvdec","playable","2022-12-04 22:19:14.000" +"0100DF9013AD4000","Clocker","status-playable","playable","2021-04-05 15:05:13.000" +"0100B7200DAC6000","Close to the Sun","status-boots;crash;nvdec;UE4","boots","2021-11-04 09:19:41.000" +"010047700D540000","Clubhouse Games: 51 Worldwide Classics","status-playable;ldn-works","playable","2024-05-21 16:12:57.000" +"","Clue","crash;online;status-menus","menus","2020-11-10 09:23:48.000" +"","ClusterPuck 99","status-playable","playable","2021-01-06 00:28:12.000" +"010096900A4D2000","Clustertruck","slow;status-ingame","ingame","2021-02-19 21:07:09.000" +"01005790110F0000","Cobra Kai The Karate Kid Saga Continues","status-playable","playable","2021-06-17 15:59:13.000" +"010034E005C9C000","Code of Princess EX","nvdec;online;status-playable","playable","2021-06-03 10:50:13.000" +"010002400F408000","Code: Realize ~Future Blessings~","status-playable;nvdec","playable","2023-03-31 16:57:47.000" +"0100CF800C810000","Coffee Crisis","status-playable","playable","2021-02-20 12:34:52.000" +"","Coffee Talk","status-playable","playable","2020-08-10 09:48:44.000" +"0100178009648000","Coffin Dodgers","status-playable","playable","2021-02-20 14:57:41.000" +"010035B01706E000","Cold Silence","cpu;status-nothing;crash","nothing","2024-07-11 17:06:14.000" +"010083E00F40E000","Collar X Malice","status-playable;nvdec","playable","2022-10-02 11:51:56.000" +"0100E3B00F412000","Collar X Malice -Unlimited-","status-playable;nvdec","playable","2022-10-04 15:30:40.000" +"","Collection of Mana","status-playable","playable","2020-10-19 19:29:45.000" +"010030800BC36000","Collidalot","status-playable;nvdec","playable","2022-09-13 14:09:27.000" +"","Color Zen","status-playable","playable","2020-05-22 10:56:17.000" +"","Colorgrid","status-playable","playable","2020-10-04 01:50:52.000" +"0100A7000BD28000","Coloring Book","status-playable","playable","2022-07-22 11:17:05.000" +"010020500BD86000","Colors Live","gpu;services;status-boots;crash","boots","2023-02-26 02:51:07.000" +"0100E2F0128B4000","Colossus Down","status-playable","playable","2021-02-04 20:49:50.000" +"0100C4D00D16A000","Commander Keen in Keen Dreams","gpu;status-ingame","ingame","2022-08-04 20:34:20.000" +"0100E400129EC000","Commander Keen in Keen Dreams: Definitive Edition","status-playable","playable","2021-05-11 19:33:54.000" +"010065A01158E000","Commandos 2 HD Remaster","gpu;status-ingame;nvdec","ingame","2022-08-10 21:52:27.000" +"0100971011224000","Concept Destruction","status-playable","playable","2022-09-29 12:28:56.000" +"010043700C9B0000","Conduct TOGETHER!","nvdec;status-playable","playable","2021-02-20 12:59:00.000" +"","Conga Master Party!","status-playable","playable","2020-05-22 13:22:24.000" +"","Connection Haunted","slow;status-playable","playable","2020-12-10 18:57:14.000" +"0100A5600FAC0000","Construction Simulator 3 - Console Edition","status-playable","playable","2023-02-06 09:31:23.000" +"","Constructor Plus","status-playable","playable","2020-05-26 12:37:40.000" +"0100DCA00DA7E000","Contra Anniversary Collection","status-playable","playable","2022-07-22 11:30:12.000" +"01007D701298A000","Contraptions","status-playable","playable","2021-02-08 18:40:50.000" +"0100041013360000","Control Ultimate Edition - Cloud Version","Needs Update;crash;services;status-nothing","nothing","2021-04-18 22:34:06.000" +"","Convoy","status-playable","playable","2020-10-15 14:43:50.000" +"0100B82010B6C000","Cook, Serve, Delicious! 3?!","status-playable","playable","2022-10-09 12:09:34.000" +"010060700EFBA000","Cooking Mama: Cookstar","status-menus;crash;loader-allocator","menus","2021-11-20 03:19:35.000" +"01001E400FD58000","Cooking Simulator","status-playable","playable","2021-04-18 13:25:23.000" +"","Cooking Tycoons 2: 3 in 1 Bundle","status-playable","playable","2020-11-16 22:19:33.000" +"","Cooking Tycoons: 3 in 1 Bundle","status-playable","playable","2020-11-16 22:44:26.000" +"","Copperbell","status-playable","playable","2020-10-04 15:54:36.000" +"010016400B1FE000","Corpse Party: Blood Drive","nvdec;status-playable","playable","2021-03-01 12:44:23.000" +"0100CCB01B1A0000","Cosmic Fantasy Collection","status-ingame","ingame","2024-05-21 17:56:37.000" +"010067C00A776000","Cosmic Star Heroine","status-playable","playable","2021-02-20 14:30:47.000" +"","Cotton/Guardian Saturn Tribute Games","gpu;status-boots","boots","2022-11-27 21:00:51.000" +"01000E301107A000","Couch Co-Op Bundle Vol. 2","status-playable;nvdec","playable","2022-10-02 12:04:21.000" +"0100C1E012A42000","Country Tales","status-playable","playable","2021-06-17 16:45:39.000" +"01003370136EA000","Cozy Grove","gpu;status-ingame","ingame","2023-07-30 22:22:19.000" +"010073401175E000","Crash Bandicoot 4: It's About Time","status-playable;nvdec;UE4","playable","2024-03-17 07:13:45.000" +"0100D1B006744000","Crash Bandicoot N. Sane Trilogy","status-playable","playable","2024-02-11 11:38:14.000" +"","Crash Drive 2","online;status-playable","playable","2020-12-17 02:45:46.000" +"","Crash Dummy","nvdec;status-playable","playable","2020-05-23 11:12:43.000" +"0100F9F00C696000","Crash Team Racing Nitro-Fueled","gpu;status-ingame;nvdec;online-broken","ingame","2023-06-25 02:40:17.000" +"0100BF200CD74000","Crashbots","status-playable","playable","2022-07-22 13:50:52.000" +"010027100BD16000","Crashlands","status-playable","playable","2021-05-27 20:30:06.000" +"","Crawl","status-playable","playable","2020-05-22 10:16:05.000" +"0100C66007E96000","Crayola Scoot","status-playable;nvdec","playable","2022-07-22 14:01:55.000" +"01005BA00F486000","Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi","status-playable","playable","2021-07-21 10:41:33.000" +"","Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!","services;status-menus","menus","2020-03-20 14:00:57.000" +"","Crazy Strike Bowling EX","UE4;gpu;nvdec;status-ingame","ingame","2020-08-07 18:15:59.000" +"","Crazy Zen Mini Golf","status-playable","playable","2020-08-05 14:00:00.000" +"","Creaks","status-playable","playable","2020-08-15 12:20:52.000" +"","Creature in the Well","UE4;gpu;status-ingame","ingame","2020-11-16 12:52:40.000" +"","Creepy Tale","status-playable","playable","2020-12-15 21:58:03.000" +"","Cresteaju","gpu;status-ingame","ingame","2021-03-24 10:46:06.000" +"010022D00D4F0000","Cricket 19","gpu;status-ingame","ingame","2021-06-14 14:56:07.000" +"0100387017100000","Cricket 22","status-boots;crash","boots","2023-10-18 08:01:57.000" +"01005640080B0000","Crimsonland","status-playable","playable","2021-05-27 20:50:54.000" +"0100B0400EBC4000","Cris Tales","crash;status-ingame","ingame","2021-07-29 15:10:53.000" +"","Croc's World","status-playable","playable","2020-05-22 11:21:09.000" +"","Croc's World 2","status-playable","playable","2020-12-16 20:01:40.000" +"","Croc's World 3","status-playable","playable","2020-12-30 18:53:26.000" +"01000F0007D92000","Croixleur Sigma","status-playable;online","playable","2022-07-22 14:26:54.000" +"01003D90058FC000","CrossCode","status-playable","playable","2024-02-17 10:23:19.000" +"0100B1E00AA56000","Crossing Souls","nvdec;status-playable","playable","2021-02-20 15:42:54.000" +"0100059012BAE000","Crown Trick","status-playable","playable","2021-06-16 19:36:29.000" +"0100B41013C82000","Cruis'n Blast","gpu;status-ingame","ingame","2023-07-30 10:33:47.000" +"01000CC01C108000","Crymachina Trial Edition ( Demo ) [ クライマキナ ]","status-playable;demo","playable","2023-08-06 05:33:21.000" +"0100CEA007D08000","Crypt of the Necrodancer","status-playable;nvdec","playable","2022-11-01 09:52:06.000" +"0100582010AE0000","Crysis 2 Remastered","deadlock;status-menus","menus","2023-09-21 10:46:17.000" +"0100CD3010AE2000","Crysis 3 Remastered","deadlock;status-menus","menus","2023-09-10 16:03:50.000" +"0100E66010ADE000","Crysis Remastered","status-menus;nvdec","menus","2024-08-13 05:23:24.000" +"0100972008234000","Crystal Crisis","nvdec;status-playable","playable","2021-02-20 13:52:44.000" +"","Cthulhu Saves Christmas","status-playable","playable","2020-12-14 00:58:55.000" +"010001600D1E8000","Cube Creator X","status-menus;crash","menus","2021-11-25 08:53:28.000" +"010082E00F1CE000","Cubers: Arena","status-playable;nvdec;UE4","playable","2022-10-04 16:05:40.000" +"010040D011D04000","Cubicity","status-playable","playable","2021-06-14 14:19:51.000" +"0100A5C00D162000","Cuphead","status-playable","playable","2022-02-01 22:45:55.000" +"0100F7E00DFC8000","Cupid Parasite","gpu;status-ingame","ingame","2023-08-21 05:52:36.000" +"","Curious Cases","status-playable","playable","2020-08-10 09:30:48.000" +"0100D4A0118EA000","Curse of the Dead Gods","status-playable","playable","2022-08-30 12:25:38.000" +"0100CE5014026000","Curved Space","status-playable","playable","2023-01-14 22:03:50.000" +"","Cyber Protocol","nvdec;status-playable","playable","2020-09-28 14:47:40.000" +"0100C1F0141AA000","Cyber Shadow","status-playable","playable","2022-07-17 05:37:41.000" +"01006B9013672000","Cybxus Heart","gpu;slow;status-ingame","ingame","2022-01-15 05:00:49.000" +"010063100B2C2000","Cytus α","nvdec;status-playable","playable","2021-02-20 13:40:46.000" +"0100B6400CA56000","DAEMON X MACHINA","UE4;audout;ldn-untested;nvdec;status-playable","playable","2021-06-09 19:22:29.000" +"01004AB00A260000","DARK SOULS™: REMASTERED","gpu;status-ingame;nvdec;online-broken","ingame","2024-04-09 19:47:58.000" +"0100440012FFA000","DARQ Complete Edition","audout;status-playable","playable","2021-04-07 15:26:21.000" +"01009CC00C97C000","DEAD OR ALIVE Xtreme 3 Scarlet","status-playable","playable","2022-07-23 17:05:06.000" +"0100A5000F7AA000","DEAD OR SCHOOL","status-playable;nvdec","playable","2022-09-06 12:04:09.000" +"0100EBE00F22E000","DEADLY PREMONITION Origins","32-bit;status-playable;nvdec","playable","2024-03-25 12:47:46.000" +"01008B10132A2000","DEEMO -Reborn-","status-playable;nvdec;online-broken","playable","2022-10-17 15:18:11.000" +"010023800D64A000","DELTARUNE Chapter 1","status-playable","playable","2023-01-22 04:47:44.000" +"0100BE800E6D8000","DEMON'S TILT","status-playable","playable","2022-09-19 13:22:46.000" +"","DERU - The Art of Cooperation","status-playable","playable","2021-01-07 16:59:59.000" +"","DESTINY CONNECT","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 12:20:36.000" +"010027400BD24000","DIABOLIK LOVERS CHAOS LINEAGE","gpu;status-ingame;Needs Update","ingame","2023-06-08 02:20:44.000" +"","DISTRAINT 2","status-playable","playable","2020-09-03 16:08:12.000" +"","DISTRAINT: Deluxe Edition","status-playable","playable","2020-06-15 23:42:24.000" +"0100416004C00000","DOOM","gpu;slow;status-ingame;nvdec;online-broken","ingame","2024-09-23 15:40:07.000" +"010018900DD00000","DOOM (1993)","status-menus;nvdec;online-broken","menus","2022-09-06 13:32:19.000" +"01008CB01E52E000","DOOM + DOOM II","status-playable;opengl;ldn-untested;LAN","playable","2024-09-12 07:06:01.000" +"0100D4F00DD02000","DOOM 2","nvdec;online;status-playable","playable","2021-06-03 20:10:01.000" +"010029D00E740000","DOOM 3","status-menus;crash","menus","2024-08-03 05:25:47.000" +"","DOOM 64","nvdec;status-playable;vulkan","playable","2020-10-13 23:47:28.000" +"0100B1A00D8CE000","DOOM Eternal","gpu;slow;status-ingame;nvdec;online-broken","ingame","2024-08-28 15:57:17.000" +"","DORAEMON STORY OF SEASONS","nvdec;status-playable","playable","2020-07-13 20:28:11.000" +"01001AD00E49A000","DOUBLE DRAGON Ⅲ: The Sacred Stones","online;status-playable","playable","2021-06-11 15:41:44.000" +"0100A250097F0000","DRAGON BALL FighterZ","UE4;ldn-broken;nvdec;online;status-playable","playable","2021-06-11 16:19:04.000" +"010051C0134F8000","DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET","status-playable;vulkan-backend-bug","playable","2024-08-28 00:03:50.000" +"0100A77018EA0000","DRAGON QUEST MONSTERS: The Dark Prince","status-playable","playable","2023-12-29 16:10:05.000" +"0100E9A00CB30000","DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition","status-playable;nvdec","playable","2024-06-26 00:16:30.000" +"010008900BC5A000","DYSMANTLE","gpu;status-ingame","ingame","2024-07-15 16:24:12.000" +"010061300DF48000","Dairoku: Ayakashimori","status-nothing;Needs Update;loader-allocator","nothing","2021-11-30 05:09:38.000" +"0100BD2009A1C000","Damsel","status-playable","playable","2022-09-06 11:54:39.000" +"","Dandara","status-playable","playable","2020-05-26 12:42:33.000" +"","Dandy Dungeon: Legend of Brave Yamada","status-playable","playable","2021-01-06 09:48:47.000" +"01003ED0099B0000","Danger Mouse","status-boots;crash;online","boots","2022-07-22 15:49:45.000" +"","Danger Scavenger -","nvdec;status-playable","playable","2021-04-17 15:53:04.000" +"","Danmaku Unlimited 3","status-playable","playable","2020-11-15 00:48:35.000" +"","Darius Cozmic Collection","status-playable","playable","2021-02-19 20:59:06.000" +"010059C00BED4000","Darius Cozmic Collection Special Edition","status-playable","playable","2022-07-22 16:26:50.000" +"010015800F93C000","Dariusburst - Another Chronicle EX+","online;status-playable","playable","2021-04-05 14:21:43.000" +"01003D301357A000","Dark Arcana: The Carnival","gpu;slow;status-ingame","ingame","2022-02-19 08:52:28.000" +"010083A00BF6C000","Dark Devotion","status-playable;nvdec","playable","2022-08-09 09:41:18.000" +"","Dark Quest 2","status-playable","playable","2020-11-16 21:34:52.000" +"","Dark Witch Music Episode: Rudymical","status-playable","playable","2020-05-22 09:44:44.000" +"01008F1008DA6000","Darkest Dungeon","status-playable;nvdec","playable","2022-07-22 18:49:18.000" +"0100F2300D4BA000","Darksiders Genesis","status-playable;nvdec;online-broken;UE4;ldn-broken","playable","2022-09-21 18:06:25.000" +"010071800BA98000","Darksiders II Deathinitive Edition","gpu;status-ingame;nvdec;online-broken","ingame","2024-06-26 00:37:25.000" +"0100E1400BA96000","Darksiders Warmastered Edition","status-playable;nvdec","playable","2023-03-02 18:08:09.000" +"","Darkwood","status-playable","playable","2021-01-08 21:24:06.000" +"0100BA500B660000","Darts Up","status-playable","playable","2021-04-14 17:22:22.000" +"0100F0B0081DA000","Dawn of the Breakers","status-menus;online-broken;vulkan-backend-bug","menus","2022-12-08 14:40:03.000" +"","Day and Night","status-playable","playable","2020-12-17 12:30:51.000" +"","De Blob","nvdec;status-playable","playable","2021-01-06 17:34:46.000" +"01008E900471E000","De Mambo","status-playable","playable","2021-04-10 12:39:40.000" +"0100646009FBE000","Dead Cells","status-playable","playable","2021-09-22 22:18:49.000" +"01004C500BD40000","Dead End Job","status-playable;nvdec","playable","2022-09-19 12:48:44.000" +"0100A24011F52000","Dead Z Meat","UE4;services;status-ingame","ingame","2021-04-14 16:50:16.000" +"01004C400CF96000","Dead by Daylight","status-boots;nvdec;online-broken;UE4","boots","2022-09-13 14:32:13.000" +"","Deadly Days","status-playable","playable","2020-11-27 13:38:55.000" +"0100BAC011928000","Deadly Premonition 2","status-playable","playable","2021-06-15 14:12:36.000" +"","Dear Magi - Mahou Shounen Gakka -","status-playable","playable","2020-11-22 16:45:16.000" +"010012B011AB2000","Death Come True","nvdec;status-playable","playable","2021-06-10 22:30:49.000" +"0100F3B00CF32000","Death Coming","status-nothing;crash","nothing","2022-02-06 07:43:03.000" +"","Death Mark","status-playable","playable","2020-12-13 10:56:25.000" +"0100423009358000","Death Road to Canada","gpu;audio;status-nothing;32-bit;crash","nothing","2023-06-28 15:39:26.000" +"","Death Squared","status-playable","playable","2020-12-04 13:00:15.000" +"","Death Tales","status-playable","playable","2020-12-17 10:55:52.000" +"","Death and Taxes","status-playable","playable","2020-12-15 20:27:49.000" +"0100AEC013DDA000","Death end re;Quest","status-playable","playable","2023-07-09 12:19:54.000" +"0100492011A8A000","Death's Hangover","gpu;status-boots","boots","2023-08-01 22:38:06.000" +"01009120119B4000","Deathsmiles I・II","status-playable","playable","2024-04-08 19:29:00.000" +"010034F00BFC8000","Debris Infinity","nvdec;online;status-playable","playable","2021-05-28 12:14:39.000" +"010027700FD2E000","Decay of Logos","status-playable;nvdec","playable","2022-09-13 14:42:13.000" +"0100EF0015A9A000","Deedlit in Wonder Labyrinth","deadlock;status-ingame;Needs Update;Incomplete","ingame","2022-01-19 10:00:59.000" +"01002CC0062B8000","Deemo","status-playable","playable","2022-07-24 11:34:33.000" +"010026800FA88000","Deep Diving Adventures","status-playable","playable","2022-09-22 16:43:37.000" +"","Deep Ones","services;status-nothing","nothing","2020-04-03 02:54:19.000" +"0100C3E00D68E000","Deep Sky Derelicts Definitive Edition","status-playable","playable","2022-09-27 11:21:08.000" +"","Deep Space Rush","status-playable","playable","2020-07-07 23:30:33.000" +"0100961011BE6000","DeepOne","services-horizon;status-nothing;Needs Update","nothing","2024-01-18 15:01:05.000" +"01008BB00F824000","Defenders of Ekron - Definitive Edition","status-playable","playable","2021-06-11 16:31:03.000" +"0100CDE0136E6000","Defentron","status-playable","playable","2022-10-17 15:47:56.000" +"","Defunct","status-playable","playable","2021-01-08 21:33:46.000" +"","Degrees of Separation","status-playable","playable","2021-01-10 13:40:04.000" +"010071C00CBA4000","Dei Gratia no Rashinban","crash;status-nothing","nothing","2021-07-13 02:25:32.000" +"","Deleveled","slow;status-playable","playable","2020-12-15 21:02:29.000" +"010038B01D2CA000","Dementium: The Ward (Dementium Remastered)","status-boots;crash","boots","2024-09-02 08:28:14.000" +"0100AB600ACB4000","Demetrios - The BIG Cynical Adventure","status-playable","playable","2021-06-04 12:01:01.000" +"010099D00D1A4000","Demolish & Build","status-playable","playable","2021-06-13 15:27:26.000" +"010084600F51C000","Demon Pit","status-playable;nvdec","playable","2022-09-19 13:35:15.000" +"0100A2B00BD88000","Demon's Crystals","status-nothing;crash;regression","nothing","2022-12-07 16:33:17.000" +"","Demon's Rise","status-playable","playable","2020-07-29 12:26:27.000" +"0100E29013818000","Demon's Rise - Lords of Chaos","status-playable","playable","2021-04-06 16:20:06.000" +"0100161011458000","Demon's Tier+","status-playable","playable","2021-06-09 17:25:36.000" +"","Demong Hunter","status-playable","playable","2020-12-12 15:27:08.000" +"0100BC501355A000","Densha de go!! Hashirou Yamanote Sen","status-playable;nvdec;UE4","playable","2023-11-09 07:47:58.000" +"","Depixtion","status-playable","playable","2020-10-10 18:52:37.000" +"01000BF00B6BC000","Deployment","slow;status-playable;online-broken","playable","2022-10-17 16:23:59.000" +"010023600C704000","Deponia","nvdec;status-playable","playable","2021-01-26 17:17:19.000" +"","Descenders","gpu;status-ingame","ingame","2020-12-10 15:22:36.000" +"","Desire remaster ver.","crash;status-boots","boots","2021-01-17 02:34:37.000" +"01008BB011ED6000","Destrobots","status-playable","playable","2021-03-06 14:37:05.000" +"01009E701356A000","Destroy All Humans!","gpu;status-ingame;nvdec;UE4","ingame","2023-01-14 22:23:53.000" +"010030600E65A000","Detective Dolittle","status-playable","playable","2021-03-02 14:03:59.000" +"01009C0009842000","Detective Gallo","status-playable;nvdec","playable","2022-07-24 11:51:04.000" +"","Detective Jinguji Saburo Prism of Eyes","status-playable","playable","2020-10-02 21:54:41.000" +"010007500F27C000","Detective Pikachu Returns","status-playable","playable","2023-10-07 10:24:59.000" +"010031B00CF66000","Devil Engine","status-playable","playable","2021-06-04 11:54:30.000" +"01002F000E8F2000","Devil Kingdom","status-playable","playable","2023-01-31 08:58:44.000" +"","Devil May Cry","nvdec;status-playable","playable","2021-01-04 19:43:08.000" +"01007CF00D5BA000","Devil May Cry 2","status-playable;nvdec","playable","2023-01-24 23:03:20.000" +"01007B600D5BC000","Devil May Cry 3 Special Edition","status-playable;nvdec","playable","2024-07-08 12:33:23.000" +"01003C900EFF6000","Devil Slayer - Raksasi","status-playable","playable","2022-10-26 19:42:32.000" +"01009EA00A320000","Devious Dungeon","status-playable","playable","2021-03-04 13:03:06.000" +"","Dex","nvdec;status-playable","playable","2020-08-12 16:48:12.000" +"","Dexteritrip","status-playable","playable","2021-01-06 12:51:12.000" +"0100AFC00E06A000","Dezatopia","online;status-playable","playable","2021-06-15 21:06:11.000" +"0100726014352000","Diablo 2 Resurrected","gpu;status-ingame;nvdec","ingame","2023-08-18 18:42:47.000" +"01001B300B9BE000","Diablo III: Eternal Collection","status-playable;online-broken;ldn-works","playable","2023-08-21 23:48:03.000" +"0100F73011456000","Diabolic","status-playable","playable","2021-06-11 14:45:08.000" +"0100BBF011394000","Dicey Dungeons","gpu;audio;slow;status-ingame","ingame","2023-08-02 20:30:12.000" +"","Die for Valhalla!","status-playable","playable","2021-01-06 16:09:14.000" +"0100BB900B5B4000","Dies irae Amantes amentes For Nintendo Switch","status-nothing;32-bit;crash","nothing","2022-02-16 07:09:05.000" +"0100A5A00DBB0000","Dig Dog","gpu;status-ingame","ingame","2021-06-02 17:17:51.000" +"010035D0121EC000","Digerati Presents: The Dungeon Crawl Vol. 1","slow;status-ingame","ingame","2021-04-18 14:04:55.000" +"010014E00DB56000","Digimon Story Cyber Sleuth: Complete Edition","status-playable;nvdec;opengl","playable","2022-09-13 15:02:37.000" +"0100F00014254000","Digimon World: Next Order","status-playable","playable","2023-05-09 20:41:06.000" +"","Ding Dong XL","status-playable","playable","2020-07-14 16:13:19.000" +"","Dininho Adventures","status-playable","playable","2020-10-03 17:25:51.000" +"010027E0158A6000","Dininho Space Adventure","status-playable","playable","2023-01-14 22:43:04.000" +"0100A8A013DA4000","Dirt Bike Insanity","status-playable","playable","2021-01-31 13:27:38.000" +"01004CB01378A000","Dirt Trackin Sprint Cars","status-playable;nvdec;online-broken","playable","2022-10-17 16:34:56.000" +"0100918014B02000","Disagaea 6: Defiance of Destiny Demo","status-playable;demo","playable","2022-10-26 20:02:04.000" +"010020700E2A2000","Disaster Report 4: Summer Memories","status-playable;nvdec;UE4","playable","2022-09-27 19:41:31.000" +"0100510004D2C000","Disc Jam","UE4;ldn-untested;nvdec;online;status-playable","playable","2021-04-08 16:40:35.000" +"","Disco Dodgeball Remix","online;status-playable","playable","2020-09-28 23:24:49.000" +"01004B100AF18000","Disgaea 1 Complete","status-playable","playable","2023-01-30 21:45:23.000" +"010068C00F324000","Disgaea 4 Complete+ Demo","status-playable;nvdec","playable","2022-09-13 15:21:59.000" +"","Disgaea 4 Complete Plus","gpu;slow;status-playable","playable","2020-02-18 10:54:28.000" +"01005700031AE000","Disgaea 5 Complete","nvdec;status-playable","playable","2021-03-04 15:32:54.000" +"0100ABC013136000","Disgaea 6: Defiance of Destiny","deadlock;status-ingame","ingame","2023-04-15 00:50:32.000" +"01005EE013888000","Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]","gpu;status-ingame;demo","ingame","2022-12-06 15:27:59.000" +"0100307011D80000","Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]","status-playable","playable","2021-06-08 13:20:33.000" +"01000B70122A2000","Disjunction","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2024-04-28 23:55:24.000" +"0100A2F00EEFC000","Disney Classic Games: Aladdin and The Lion King","status-playable;online-broken","playable","2022-09-13 15:44:17.000" +"0100DA201EBF8000","Disney Epic Mickey: Rebrushed","status-ingame;crash","ingame","2024-09-26 22:11:51.000" +"0100F0401435E000","Disney SpeedStorm","services;status-boots","boots","2023-11-27 02:15:32.000" +"","Disney Tsum Tsum Festival","crash;status-menus","menus","2020-07-14 14:05:28.000" +"010027400CDC6000","Divinity Original Sin 2","services;status-menus;crash;online-broken;regression","menus","2023-08-13 17:20:03.000" +"01005A001489A000","DoDonPachi Resurrection - 怒首領蜂大復活","status-ingame;32-bit;crash","ingame","2024-01-25 14:37:32.000" +"01001770115C8000","Dodo Peak","status-playable;nvdec;UE4","playable","2022-10-04 16:13:05.000" +"","Dogurai","status-playable","playable","2020-10-04 02:40:16.000" +"010048100D51A000","Dokapon Up! Mugen no Roulette","gpu;status-menus;Needs Update","menus","2022-12-08 19:39:10.000" +"","Dokuro","nvdec;status-playable","playable","2020-12-17 14:47:09.000" +"010007200AC0E000","Don't Die Mr. Robot DX","status-playable;nvdec","playable","2022-09-02 18:34:38.000" +"0100E470067A8000","Don't Knock Twice","status-playable","playable","2024-05-08 22:37:58.000" +"0100C4D00B608000","Don't Sink","gpu;status-ingame","ingame","2021-02-26 15:41:11.000" +"0100751007ADA000","Don't Starve","status-playable;nvdec","playable","2022-02-05 20:43:34.000" +"010088B010DD2000","Dongo Adventure","status-playable","playable","2022-10-04 16:22:26.000" +"0100C1F0051B6000","Donkey Kong Country Tropical Freeze","status-playable","playable","2024-08-05 16:46:10.000" +"","Doodle Derby","status-boots","boots","2020-12-04 22:51:48.000" +"01005ED00CD70000","Door Kickers: Action Squad","status-playable;online-broken;ldn-broken","playable","2022-09-13 16:28:53.000" +"","Double Cross","status-playable","playable","2021-01-07 15:34:22.000" +"","Double Dragon & Kunio-Kun: Retro Brawler Bundle","status-playable","playable","2020-09-01 12:48:46.000" +"01005B10132B2000","Double Dragon Neon","gpu;audio;status-ingame;32-bit","ingame","2022-09-20 18:00:20.000" +"","Double Kick Heroes","gpu;status-ingame","ingame","2020-10-03 14:33:59.000" +"0100A5D00C7C0000","Double Pug Switch","status-playable;nvdec","playable","2022-10-10 10:59:35.000" +"0100FC000EE10000","Double Switch - 25th Anniversary Edition","status-playable;nvdec","playable","2022-09-19 13:41:50.000" +"0100B6600FE06000","Down to Hell","gpu;status-ingame;nvdec","ingame","2022-09-19 14:01:26.000" +"010093D00C726000","Downwell","status-playable","playable","2021-04-25 20:05:24.000" +"0100ED000D390000","Dr Kawashima's Brain Training","services;status-ingame","ingame","2023-06-04 00:06:46.000" +"","Dracula's Legacy","nvdec;status-playable","playable","2020-12-10 13:24:25.000" +"","DragoDino","gpu;nvdec;status-ingame","ingame","2020-08-03 20:49:16.000" +"0100DBC00BD5A000","Dragon Audit","crash;status-ingame","ingame","2021-05-16 14:24:46.000" +"010078D000F88000","Dragon Ball Xenoverse 2","gpu;status-ingame;nvdec;online;ldn-untested","ingame","2022-07-24 12:31:01.000" +"010089700150E000","Dragon Marked for Death: Frontline Fighters (Empress & Warrior)","status-playable;ldn-untested;audout","playable","2022-03-10 06:44:34.000" +"0100EFC00EFB2000","Dragon Quest","gpu;status-boots","boots","2021-11-09 03:31:32.000" +"010008900705C000","Dragon Quest Builders","gpu;status-ingame;nvdec","ingame","2023-08-14 09:54:36.000" +"010042000A986000","Dragon Quest Builders 2","status-playable","playable","2024-04-19 16:36:38.000" +"0100CD3000BDC000","Dragon Quest Heroes I + II (JP)","nvdec;status-playable","playable","2021-04-08 14:27:16.000" +"010062200EFB4000","Dragon Quest II: Luminaries of the Legendary Line","status-playable","playable","2022-09-13 16:44:11.000" +"01003E601E324000","Dragon Quest III HD-2D Remake","status-ingame;vulkan-backend-bug;UE4;audout;mac-bug","ingame","2025-01-07 04:10:27.000" +"010015600EFB6000","Dragon Quest III: The Seeds of Salvation","gpu;status-boots","boots","2021-11-09 03:38:34.000" +"0100217014266000","Dragon Quest Treasures","gpu;status-ingame;UE4","ingame","2023-05-09 11:16:52.000" +"0100E2E0152E4000","Dragon Quest X Awakening Five Races Offline","status-playable;nvdec;UE4","playable","2024-08-20 10:04:24.000" +"01006C300E9F0000","Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition","status-playable;UE4","playable","2021-11-27 12:27:11.000" +"010032C00AC58000","Dragon's Dogma: Dark Arisen","status-playable","playable","2022-07-24 12:58:33.000" +"","Dragon's Lair Trilogy","nvdec;status-playable","playable","2021-01-13 22:12:07.000" +"","DragonBlaze for Nintendo Switch","32-bit;status-playable","playable","2020-10-14 11:11:28.000" +"","DragonFangZ","status-playable","playable","2020-09-28 21:35:18.000" +"","Dragons Dawn of New Riders","nvdec;status-playable","playable","2021-01-27 20:05:26.000" +"0100F7800A434000","Drawful 2","status-ingame","ingame","2022-07-24 13:50:21.000" +"0100B7E0102E4000","Drawngeon: Dungeons of Ink and Paper","gpu;status-ingame","ingame","2022-09-19 15:41:25.000" +"","Dream","status-playable","playable","2020-12-15 19:55:07.000" +"","Dream Alone - 0100AA0093DC000","nvdec;status-playable","playable","2021-01-27 19:41:50.000" +"","DreamBall","UE4;crash;gpu;status-ingame","ingame","2020-08-05 14:45:25.000" +"0100236011B4C000","DreamWorks Spirit Lucky's Big Adventure","status-playable","playable","2022-10-27 13:30:52.000" +"010058B00F3C0000","Dreaming Canvas","UE4;gpu;status-ingame","ingame","2021-06-13 22:50:07.000" +"0100D24013466000","Dreamo","status-playable;UE4","playable","2022-10-17 18:25:28.000" +"010058C00A916000","Drone Fight","status-playable","playable","2022-07-24 14:31:56.000" +"010052000A574000","Drowning","status-playable","playable","2022-07-25 14:28:26.000" +"","Drums","status-playable","playable","2020-12-17 17:21:51.000" +"01005BC012C66000","Duck Life Adventure","status-playable","playable","2022-10-10 11:27:03.000" +"01007EF00CB88000","Duke Nukem 3D: 20th Anniversary World Tour","32-bit;status-playable;ldn-untested","playable","2022-08-19 22:22:40.000" +"010068D0141F2000","Dull Grey","status-playable","playable","2022-10-27 13:40:38.000" +"0100926013600000","Dungeon Nightmares 1 + 2 Collection","status-playable","playable","2022-10-17 18:54:22.000" +"","Dungeon Stars","status-playable","playable","2021-01-18 14:28:37.000" +"010034300F0E2000","Dungeon of the Endless","nvdec;status-playable","playable","2021-05-27 19:16:26.000" +"","Dungeons & Bombs","status-playable","playable","2021-04-06 12:46:22.000" +"0100EC30140B6000","Dunk Lords","status-playable","playable","2024-06-26 00:07:26.000" +"010011C00E636000","Dusk Diver","status-boots;crash;UE4","boots","2021-11-06 09:01:30.000" +"0100B6E00A420000","Dust: An Elysian Tail","status-playable","playable","2022-07-25 15:28:12.000" +"","Dustoff Z","status-playable","playable","2020-12-04 23:22:29.000" +"01008c8012920000","Dying Light: Platinum Edition","services-horizon;status-boots","boots","2024-03-11 10:43:32.000" +"","Dyna Bomb","status-playable","playable","2020-06-07 13:26:55.000" +"010054E01D878000","EA SPORTS FC 25","status-ingame;crash","ingame","2024-09-25 21:07:50.000" +"01001C8016B4E000","EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition","gpu;status-ingame;crash","ingame","2024-06-10 23:33:05.000" +"0100BDB01A0E6000","EA Sports FC 24","status-boots","boots","2023-10-04 18:32:59.000" +"01009B7006C88000","EARTH WARS","status-playable","playable","2021-06-05 11:18:33.000" +"0100A9B009678000","EAT BEAT DEADSPIKE-san","audio;status-playable;Needs Update","playable","2022-12-02 19:25:29.000" +"","ELEA: Paradigm Shift","UE4;crash;status-nothing","nothing","2020-10-04 19:07:43.000" +"01000FA0149B6000","EQI","status-playable;nvdec;UE4","playable","2022-10-27 16:42:32.000" +"0100E95010058000","EQQO","UE4;nvdec;status-playable","playable","2021-06-13 23:10:51.000" +"0100F9600E746000","ESP Ra.De. Psi","audio;slow;status-ingame","ingame","2024-03-07 15:05:08.000" +"01007BE0160D6000","EVE ghost enemies","gpu;status-ingame","ingame","2023-01-14 03:13:30.000" +"0100DCF0093EC000","EVERSPACE","status-playable;UE4","playable","2022-08-14 01:16:24.000" +"010037400C7DA000","Eagle Island","status-playable","playable","2021-04-10 13:15:42.000" +"0100B9E012992000","Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )","status-playable;UE4","playable","2022-12-07 12:59:16.000" +"0100298014030000","Earth Defense Force: World Brothers","status-playable;UE4","playable","2022-10-27 14:13:31.000" +"0100A2E00BB0C000","EarthNight","status-playable","playable","2022-09-19 21:02:20.000" +"0100DFC00E472000","Earthfall: Alien Horde","status-playable;nvdec;UE4;ldn-untested","playable","2022-09-13 17:32:37.000" +"01006E50042EA000","Earthlock","status-playable","playable","2021-06-05 11:51:02.000" +"0100DCE00B756000","Earthworms","status-playable","playable","2022-07-25 16:28:55.000" +"","Earthworms Demo","status-playable","playable","2021-01-05 16:57:11.000" +"0100ECF01800C000","Easy Come Easy Golf","status-playable;online-broken;regression","playable","2024-04-04 16:15:00.000" +"","Eclipse: Edge of Light","status-playable","playable","2020-08-11 23:06:29.000" +"0100ABE00DB4E000","Edna & Harvey: Harvey's New Eyes","nvdec;status-playable","playable","2021-01-26 14:36:08.000" +"01004F000B716000","Edna & Harvey: The Breakout - Anniversary Edition","status-ingame;crash;nvdec","ingame","2022-08-01 16:59:56.000" +"01002550129F0000","Effie","status-playable","playable","2022-10-27 14:36:39.000" +"","Ego Protocol","nvdec;status-playable","playable","2020-12-16 20:16:35.000" +"","Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai","status-playable","playable","2020-11-12 00:11:50.000" +"01003AD013BD2000","Eight Dragons","status-playable;nvdec","playable","2022-10-27 14:47:28.000" +"010020A01209C000","El Hijo - A Wild West Tale","nvdec;status-playable","playable","2021-04-19 17:44:08.000" +"","Elden: Path of the Forgotten","status-playable","playable","2020-12-15 00:33:19.000" +"0100A6700AF10000","Element","status-playable","playable","2022-07-25 17:17:16.000" +"0100128003A24000","Elliot Quest","status-playable","playable","2022-07-25 17:46:14.000" +"","Elrador Creatures","slow;status-playable","playable","2020-12-12 12:35:35.000" +"010041A00FEC6000","Ember","status-playable;nvdec","playable","2022-09-19 21:16:11.000" +"","Embracelet","status-playable","playable","2020-12-04 23:45:00.000" +"010017b0102a8000","Emma: Lost in Memories","nvdec;status-playable","playable","2021-01-28 16:19:10.000" +"010068300E08E000","Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo","gpu;status-ingame;nvdec","ingame","2022-11-20 16:18:45.000" +"","Enchanting Mahjong Match","gpu;status-ingame","ingame","2020-04-17 22:01:31.000" +"01004F3011F92000","Endless Fables: Dark Moor","gpu;nvdec;status-ingame","ingame","2021-03-07 15:31:03.000" +"010067B017588000","Endless Ocean Luminous","services-horizon;status-ingame;crash","ingame","2024-05-30 02:05:57.000" +"0100B8700BD14000","Energy Cycle Edge","services;status-ingame","ingame","2021-11-30 05:02:31.000" +"","Energy Invasion","status-playable","playable","2021-01-14 21:32:26.000" +"0100C6200A0AA000","Enigmatis 2: The Mists of Ravenwood","crash;regression;status-boots","boots","2021-06-06 15:15:30.000" +"01009D60076F6000","Enter the Gungeon","status-playable","playable","2022-07-25 20:28:33.000" +"0100262009626000","Epic Loon","status-playable;nvdec","playable","2022-07-25 22:06:13.000" +"","Escape First","status-playable","playable","2020-10-20 22:46:53.000" +"010021201296A000","Escape First 2","status-playable","playable","2021-03-24 11:59:41.000" +"","Escape Game Fort Boyard","status-playable","playable","2020-07-12 12:45:43.000" +"0100FEF00F0AA000","Escape from Chernobyl","status-boots;crash","boots","2022-09-19 21:36:58.000" +"010023E013244000","Escape from Life Inc","status-playable","playable","2021-04-19 17:34:09.000" +"","Escape from Tethys","status-playable","playable","2020-10-14 22:38:25.000" +"010073000FE18000","Esports powerful pro yakyuu 2020","gpu;status-ingame;crash;Needs More Attention","ingame","2024-04-29 05:34:14.000" +"01004F9012FD8000","Estranged: The Departure","status-playable;nvdec;UE4","playable","2022-10-24 10:37:58.000" +"","Eternum Ex","status-playable","playable","2021-01-13 20:28:32.000" +"010092501EB2C000","Europa (Demo)","gpu;status-ingame;crash;UE4","ingame","2024-04-23 10:47:12.000" +"","Event Horizon: Space Defense","status-playable","playable","2020-07-31 20:31:24.000" +"01006F900BF8E000","Everybody 1-2-Switch!","services;deadlock;status-nothing","nothing","2023-07-01 05:52:55.000" +"","Evil Defenders","nvdec;status-playable","playable","2020-09-28 17:11:00.000" +"01006A800FA22000","Evolution Board Game","online;status-playable","playable","2021-01-20 22:37:56.000" +"0100F2D00C7DE000","Exception","status-playable;online-broken","playable","2022-09-20 12:47:10.000" +"0100DD30110CC000","Exit the Gungeon","status-playable","playable","2022-09-22 17:04:43.000" +"0100A82013976000","Exodemon","status-playable","playable","2022-10-27 20:17:52.000" +"0100FA800A1F4000","Exorder","nvdec;status-playable","playable","2021-04-15 14:17:20.000" +"01009B7010B42000","Explosive Jake","status-boots;crash","boots","2021-11-03 07:48:32.000" +"0100EFE00A3C2000","Eyes: The Horror Game","status-playable","playable","2021-01-20 21:59:46.000" +"010022700E7D6000","FAR: Lone Sails","status-playable","playable","2022-09-06 16:33:05.000" +"01008D900B984000","FEZ","gpu;status-ingame","ingame","2021-04-18 17:10:16.000" +"01007510040E8000","FIA European Truck Racing Championship","status-playable;nvdec","playable","2022-09-06 17:51:59.000" +"0100F7B002340000","FIFA 18","gpu;status-ingame;online-broken;ldn-untested","ingame","2022-07-26 12:43:59.000" +"0100FFA0093E8000","FIFA 19","gpu;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-07-26 13:07:07.000" +"01005DE00D05C000","FIFA 20 Legacy Edition","gpu;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-09-13 17:57:20.000" +"01000A001171A000","FIFA 21 Legacy Edition","gpu;status-ingame;online-broken","ingame","2023-12-11 22:10:19.000" +"0100216014472000","FIFA 22 Legacy Edition","gpu;status-ingame","ingame","2024-03-02 14:13:48.000" +"0100CE4010AAC000","FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition","status-playable","playable","2023-04-02 23:39:12.000" +"01000EA014150000","FINAL FANTASY I","status-nothing;crash","nothing","2024-09-05 20:55:30.000" +"01006B7014156000","FINAL FANTASY II","status-nothing;crash","nothing","2024-04-13 19:18:04.000" +"01006F000B056000","FINAL FANTASY IX","audout;nvdec;status-playable","playable","2021-06-05 11:35:00.000" +"0100AA201415C000","FINAL FANTASY V","status-playable","playable","2023-04-26 01:11:55.000" +"01008B900DC0A000","FINAL FANTASY VIII REMASTERED","status-playable;nvdec","playable","2023-02-15 10:57:48.000" +"0100BC300CB48000","FINAL FANTASY X/X-2 HD REMASTER","gpu;status-ingame","ingame","2022-08-16 20:29:26.000" +"0100EB100AB42000","FINAL FANTASY XII THE ZODIAC AGE","status-playable;opengl;vulkan-backend-bug","playable","2024-08-11 07:01:54.000" +"","FINAL FANTASY XV POCKET EDITION HD","status-playable","playable","2021-01-05 17:52:08.000" +"0100EDC01990E000","FOOTBALL MANAGER 2023 TOUCH","gpu;status-ingame","ingame","2023-08-01 03:40:53.000" +"","FORMA.8","nvdec;status-playable","playable","2020-11-15 01:04:32.000" +"01008A100A028000","FOX n FORESTS","status-playable","playable","2021-02-16 14:27:49.000" +"0100F1A00A5DC000","FRAMED COLLECTION","status-playable;nvdec","playable","2022-07-27 11:48:15.000" +"010002F00CC20000","FUN! FUN! Animal Park","status-playable","playable","2021-04-14 17:08:52.000" +"0100E1F013674000","FUSER","status-playable;nvdec;UE4","playable","2022-10-17 20:58:32.000" +"010055801134E000","FUZE Player","status-ingame;online-broken;vulkan-backend-bug","ingame","2022-10-18 12:23:53.000" +"0100EAD007E98000","FUZE4","status-playable;vulkan-backend-bug","playable","2022-09-06 19:25:01.000" +"0100E3D0103CE000","Fable of Fairy Stones","status-playable","playable","2021-05-05 21:04:54.000" +"01004200189F4000","Factorio","deadlock;status-boots","boots","2024-06-11 19:26:16.000" +"010073F0189B6000","Fae Farm","status-playable","playable","2024-08-25 15:12:12.000" +"010069100DB08000","Faeria","status-menus;nvdec;online-broken","menus","2022-10-04 16:44:41.000" +"01008A6009758000","Fairune Collection","status-playable","playable","2021-06-06 15:29:56.000" +"0100F6D00B8F2000","Fairy Fencer F™: Advent Dark Force","status-ingame;32-bit;crash;nvdec","ingame","2023-04-16 03:53:48.000" +"0100CF900FA3E000","Fairy Tail","status-playable;nvdec","playable","2022-10-04 23:00:32.000" +"01005A600BE60000","Fall Of Light - Darkest Edition","slow;status-ingame;nvdec","ingame","2024-07-24 04:19:26.000" +"0100AA801258C000","Fallen Legion Revenants","status-menus;crash","menus","2021-11-25 08:53:20.000" +"0100D670126F6000","Famicom Detective Club: The Girl Who Stands Behind","status-playable;nvdec","playable","2022-10-27 20:41:40.000" +"010033F0126F4000","Famicom Detective Club: The Missing Heir","status-playable;nvdec","playable","2022-10-27 20:56:23.000" +"010060200FC44000","Family Feud 2021","status-playable;online-broken","playable","2022-10-10 11:42:21.000" +"0100034012606000","Family Mysteries: Poisonous Promises","audio;status-menus;crash","menus","2021-11-26 12:35:06.000" +"010017C012726000","Fantasy Friends","status-playable","playable","2022-10-17 19:42:39.000" +"0100767008502000","Fantasy Hero Unsigned Legacy","status-playable","playable","2022-07-26 12:28:52.000" +"0100944003820000","Fantasy Strike","online;status-playable","playable","2021-02-27 01:59:18.000" +"01000E2012F6E000","Fantasy Tavern Sextet -Vol.1 New World Days-","gpu;status-ingame;crash;Needs Update","ingame","2022-12-05 16:48:00.000" +"","Fantasy Tavern Sextet -Vol.2 Adventurer's Days-","gpu;slow;status-ingame;crash","ingame","2021-11-06 02:57:29.000" +"","Farabel","status-playable","playable","2020-08-03 17:47:28.000" +"","Farm Expert 2019 for Nintendo Switch","status-playable","playable","2020-07-09 21:42:57.000" +"01000E400ED98000","Farm Mystery","status-playable;nvdec","playable","2022-09-06 16:46:47.000" +"","Farm Together","status-playable","playable","2021-01-19 20:01:19.000" +"0100EB600E914000","Farming Simulator 20","nvdec;status-playable","playable","2021-06-13 10:52:44.000" +"","Farming Simulator Nintendo Switch Edition","nvdec;status-playable","playable","2021-01-19 14:46:44.000" +"0100E99019B3A000","Fashion Dreamer","status-playable","playable","2023-11-12 06:42:52.000" +"01009510001CA000","Fast RMX","slow;status-ingame;crash;ldn-partial","ingame","2024-06-22 20:48:58.000" +"0100BEB015604000","Fatal Frame: Maiden of Black Water","status-playable","playable","2023-07-05 16:01:40.000" +"0100DAE019110000","Fatal Frame: Mask of the Lunar Eclipse","status-playable;Incomplete","playable","2024-04-11 06:01:30.000" +"010053E002EA2000","Fate/EXTELLA","gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug","ingame","2023-04-24 23:37:55.000" +"010051400B17A000","Fate/EXTELLA LINK","ldn-untested;nvdec;status-playable","playable","2021-01-27 00:45:50.000" +"","Fear Effect Sedna","nvdec;status-playable","playable","2021-01-19 13:10:33.000" +"0100F5501CE12000","Fearmonium","status-boots;crash","boots","2024-03-06 11:26:11.000" +"0100E4300CB3E000","Feather","status-playable","playable","2021-06-03 14:11:27.000" +"","Felix the Reaper","nvdec;status-playable","playable","2020-10-20 23:43:03.000" +"","Feudal Alloy","status-playable","playable","2021-01-14 08:48:14.000" +"01006980127F0000","Fight Crab","status-playable;online-broken;ldn-untested","playable","2022-10-05 10:24:04.000" +"","Fight of Animals","online;status-playable","playable","2020-10-15 15:08:28.000" +"","Fight'N Rage","status-playable","playable","2020-06-16 23:35:19.000" +"0100D02014048000","Fighting EX Layer Another Dash","status-playable;online-broken;UE4","playable","2024-04-07 10:22:33.000" +"0100118009C68000","Figment","nvdec;status-playable","playable","2021-01-27 19:36:05.000" +"","Fill-a-Pix: Phil's Epic Adventure","status-playable","playable","2020-12-22 13:48:22.000" +"0100C3A00BB76000","Fimbul","status-playable;nvdec","playable","2022-07-26 13:31:47.000" +"","Fin and the Ancient Mystery","nvdec;status-playable","playable","2020-12-17 16:40:39.000" +"0100A5B00BDC6000","Final Fantasy VII","status-playable","playable","2022-12-09 17:03:30.000" +"","Final Light, The Prison","status-playable","playable","2020-07-31 21:48:44.000" +"0100FF100FB68000","Finding Teddy 2 : Definitive Edition","gpu;status-ingame","ingame","2024-04-19 16:51:33.000" +"","Fire & Water","status-playable","playable","2020-12-15 15:43:20.000" +"0100F15003E64000","Fire Emblem Warriors","status-playable;nvdec","playable","2023-05-10 01:53:10.000" +"010071F0143EA000","Fire Emblem Warriors: Three Hopes","gpu;status-ingame;nvdec","ingame","2024-05-01 07:07:42.000" +"0100A6301214E000","Fire Emblem: Engage","status-playable;amd-vendor-bug;mac-bug","playable","2024-09-01 23:37:26.000" +"0100A12011CC8000","Fire Emblem: Shadow Dragon and the Blade of Light","status-playable","playable","2022-10-17 19:49:14.000" +"010055D009F78000","Fire Emblem: Three Houses","status-playable;online-broken","playable","2024-09-14 23:53:50.000" +"010025C014798000","Fire: Ungh's Quest","status-playable;nvdec","playable","2022-10-27 21:41:26.000" +"0100434003C58000","Firefighters - The Simulation","status-playable","playable","2021-02-19 13:32:05.000" +"","Firefighters: Airport Fire Department","status-playable","playable","2021-02-15 19:17:00.000" +"0100AC300919A000","Firewatch","status-playable","playable","2021-06-03 10:56:38.000" +"","Firework","status-playable","playable","2020-12-04 20:20:09.000" +"0100DEB00ACE2000","Fishing Star World Tour","status-playable","playable","2022-09-13 19:08:51.000" +"010069800D292000","Fishing Universe Simulator","status-playable","playable","2021-04-15 14:00:43.000" +"0100807008868000","Fit Boxing","status-playable","playable","2022-07-26 19:24:55.000" +"","Fitness Boxing","services;status-ingame","ingame","2020-05-17 14:00:48.000" +"0100E7300AAD4000","Fitness Boxing","status-playable","playable","2021-04-14 20:33:33.000" +"0100073011382000","Fitness Boxing 2: Rhythm & Exercise","crash;status-ingame","ingame","2021-04-14 20:40:48.000" +"","Five Dates","nvdec;status-playable","playable","2020-12-11 15:17:11.000" +"01009060193C4000","Five Nights At Freddy’s Security Breach","gpu;status-ingame;crash;mac-bug","ingame","2023-04-23 22:33:28.000" +"0100B6200D8D2000","Five Nights at Freddy's","status-playable","playable","2022-09-13 19:26:36.000" +"01004EB00E43A000","Five Nights at Freddy's 2","status-playable","playable","2023-02-08 15:48:24.000" +"010056100E43C000","Five Nights at Freddy's 3","status-playable","playable","2022-09-13 20:58:07.000" +"010083800E43E000","Five Nights at Freddy's 4","status-playable","playable","2023-08-19 07:28:03.000" +"0100F7901118C000","Five Nights at Freddy's: Help Wanted","status-playable;UE4","playable","2022-09-29 12:40:09.000" +"01003B200E440000","Five Nights at Freddy's: Sister Location","status-playable","playable","2023-10-06 09:00:58.000" +"010038200E088000","Flan","status-ingame;crash;regression","ingame","2021-11-17 07:39:28.000" +"","Flashback","nvdec;status-playable","playable","2020-05-14 13:57:29.000" +"0100C53004C52000","Flat Heroes","gpu;status-ingame","ingame","2022-07-26 19:37:37.000" +"","Flatland: Prologue","status-playable","playable","2020-12-11 20:41:12.000" +"","Flinthook","online;status-playable","playable","2021-03-25 20:42:29.000" +"010095A004040000","Flip Wars","services;status-ingame;ldn-untested","ingame","2022-05-02 15:39:18.000" +"01009FB002B2E000","Flipping Death","status-playable","playable","2021-02-17 16:12:30.000" +"","Flood of Light","status-playable","playable","2020-05-15 14:15:25.000" +"0100DF9005E7A000","Floor Kids","status-playable;nvdec","playable","2024-08-18 19:38:49.000" +"","Florence","status-playable","playable","2020-09-05 01:22:30.000" +"","Flowlines VS","status-playable","playable","2020-12-17 17:01:53.000" +"","Flux8","nvdec;status-playable","playable","2020-06-19 20:55:11.000" +"","Fly O'Clock VS","status-playable","playable","2020-05-17 13:39:52.000" +"","Fly Punch Boom!","online;status-playable","playable","2020-06-21 12:06:11.000" +"0100419013A8A000","Flying Hero X","status-menus;crash","menus","2021-11-17 07:46:58.000" +"","Fobia","status-playable","playable","2020-12-14 21:05:23.000" +"0100F3900D0F0000","Food Truck Tycoon","status-playable","playable","2022-10-17 20:15:55.000" +"01007CF013152000","Football Manager 2021 Touch","gpu;status-ingame","ingame","2022-10-17 20:08:23.000" +"010097F0099B4000","Football Manager Touch 2018","status-playable","playable","2022-07-26 20:17:56.000" +"010069400B6BE000","For The King","nvdec;status-playable","playable","2021-02-15 18:51:44.000" +"01001D200BCC4000","Forager","status-menus;crash","menus","2021-11-24 07:10:17.000" +"0100AE001256E000","Foreclosed","status-ingame;crash;Needs More Attention;nvdec","ingame","2022-12-06 14:41:12.000" +"","Foregone","deadlock;status-ingame","ingame","2020-12-17 15:26:53.000" +"010059E00B93C000","Forgotton Anne","nvdec;status-playable","playable","2021-02-15 18:28:07.000" +"","Fort Boyard","nvdec;slow;status-playable","playable","2020-05-15 13:22:53.000" +"010025400AECE000","Fortnite","services-horizon;status-nothing","nothing","2024-04-06 18:23:25.000" +"0100CA500756C000","Fossil Hunters","status-playable;nvdec","playable","2022-07-27 11:37:20.000" +"","FoxyLand","status-playable","playable","2020-07-29 20:55:20.000" +"","FoxyLand 2","status-playable","playable","2020-08-06 14:41:30.000" +"01004200099F2000","Fractured Minds","status-playable","playable","2022-09-13 21:21:40.000" +"0100AC40108D8000","Fred3ric","status-playable","playable","2021-04-15 13:30:31.000" +"","Frederic 2","status-playable","playable","2020-07-23 16:44:37.000" +"","Frederic: Resurrection of Music","nvdec;status-playable","playable","2020-07-23 16:59:53.000" +"010082B00EE50000","Freedom Finger","nvdec;status-playable","playable","2021-06-09 19:31:30.000" +"","Freedom Planet","status-playable","playable","2020-05-14 12:23:06.000" +"010003F00BD48000","Friday the 13th: Killer Puzzle","status-playable","playable","2021-01-28 01:33:38.000" +"010092A00C4B6000","Friday the 13th: The Game","status-playable;nvdec;online-broken;UE4","playable","2022-09-06 17:33:27.000" +"0100F200178F4000","Front Mission 1st Remake","status-playable","playable","2023-06-09 07:44:24.000" +"","Frontline Zed","status-playable","playable","2020-10-03 12:55:59.000" +"0100B5300B49A000","Frost","status-playable","playable","2022-07-27 12:00:36.000" +"","Fruitfall Crush","status-playable","playable","2020-10-20 11:33:33.000" +"","FullBlast","status-playable","playable","2020-05-19 10:34:13.000" +"","FunBox Party","status-playable","playable","2020-05-15 12:07:02.000" +"","Funghi Puzzle Funghi Explosion","status-playable","playable","2020-11-23 14:17:41.000" +"01008E10130F8000","Funimation","gpu;status-boots","boots","2021-04-08 13:08:17.000" +"","Funny Bunny Adventures","status-playable","playable","2020-08-05 13:46:56.000" +"01000EC00AF98000","Furi","status-playable","playable","2022-07-27 12:21:20.000" +"01000EC00AF98000","Furi Definitive Edition","status-playable","playable","2022-07-27 12:35:08.000" +"0100A6B00D4EC000","Furwind","status-playable","playable","2021-02-19 19:44:08.000" +"","Fury Unleashed","crash;services;status-ingame","ingame","2020-10-18 11:52:40.000" +"","Fury Unleashed Demo","status-playable","playable","2020-10-08 20:09:21.000" +"","Fushigi no Gensokyo Lotus Labyrinth","Needs Update;audio;gpu;nvdec;status-ingame","ingame","2021-01-20 15:30:02.000" +"01003C300B274000","Futari de! Nyanko Daisensou","status-playable","playable","2024-01-05 22:26:52.000" +"010067600F1A0000","FuzzBall","crash;status-nothing","nothing","2021-03-29 20:13:21.000" +"","G-MODE Archives 06 The strongest ever Julia Miyamoto","status-playable","playable","2020-10-15 13:06:26.000" +"","G.I. Joe Operation Blackout","UE4;crash;status-boots","boots","2020-11-21 12:37:44.000" +"0100C9800A454000","GALAK-Z: Variant S","status-boots;online-broken","boots","2022-07-29 11:59:12.000" +"010045F00BFC2000","GIGA WRECKER Alt.","status-playable","playable","2022-07-29 14:13:54.000" +"0100C1800A9B6000","GO VACATION","status-playable;nvdec;ldn-works","playable","2024-05-13 19:28:53.000" +"01001C700873E000","GOD EATER 3","gpu;status-ingame;nvdec","ingame","2022-07-29 21:33:21.000" +"","GOD WARS THE COMPLETE LEGEND","nvdec;status-playable","playable","2020-05-19 14:37:50.000" +"","GORSD","status-playable","playable","2020-12-04 22:15:21.000" +"010068D00AE68000","GREEN","status-playable","playable","2022-08-01 12:54:15.000" +"0100DFE00F002000","GREEN The Life Algorithm","status-playable","playable","2022-09-27 21:37:13.000" +"0100DC800A602000","GRID Autosport","status-playable;nvdec;online-broken;ldn-untested","playable","2023-03-02 20:14:45.000" +"0100459009A2A000","GRIP","status-playable;nvdec;online-broken;UE4","playable","2022-08-01 15:00:22.000" +"0100E1700C31C000","GRIS","nvdec;status-playable","playable","2021-06-03 13:33:44.000" +"01009D7011B02000","GRISAIA PHANTOM TRIGGER 01&02","status-playable;nvdec","playable","2022-12-04 21:16:06.000" +"0100D970123BA000","GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000","audout;status-playable","playable","2021-01-31 12:40:37.000" +"01002330123BC000","GRISAIA PHANTOM TRIGGER 05","audout;nvdec;status-playable","playable","2021-01-31 12:49:59.000" +"0100CAF013AE6000","GRISAIA PHANTOM TRIGGER 5.5","audout;nvdec;status-playable","playable","2021-01-31 12:59:44.000" +"","GUILTY GEAR XX ACCENT CORE PLUS R","nvdec;status-playable","playable","2021-01-13 09:28:33.000" +"01003C6008940000","GUNBIRD for Nintendo Switch","32-bit;status-playable","playable","2021-06-04 19:16:01.000" +"","GUNBIRD2 for Nintendo Switch","status-playable","playable","2020-10-10 14:41:16.000" +"","Gal Metal - 01B8000C2EA000","status-playable","playable","2022-07-27 20:57:48.000" +"010024700901A000","Gal*Gun 2","status-playable;nvdec;UE4","playable","2022-07-27 12:45:37.000" +"0100047013378000","Gal*Gun Returns [ ぎゃる☆がん りたーんず ]","status-playable;nvdec","playable","2022-10-17 23:50:46.000" +"0100C62011050000","Game Boy - Nintendo Switch Online","status-playable","playable","2023-03-21 12:43:48.000" +"010012F017576000","Game Boy Advance - Nintendo Switch Online","status-playable","playable","2023-02-16 20:38:15.000" +"0100FA5010788000","Game Builder Garage","status-ingame","ingame","2024-04-20 21:46:22.000" +"","Game Dev Story","status-playable","playable","2020-05-20 00:00:38.000" +"01006BD00F8C0000","Game Doraemon Nobita no Shin Kyoryu","gpu;status-ingame","ingame","2023-02-27 02:03:28.000" +"","Garage","status-playable","playable","2020-05-19 20:59:53.000" +"010061E00E8BE000","Garfield Kart Furious Racing","status-playable;ldn-works;loader-allocator","playable","2022-09-13 21:40:25.000" +"","Gates of Hell","slow;status-playable","playable","2020-10-22 12:44:26.000" +"010025500C098000","Gato Roboto","status-playable","playable","2023-01-20 15:04:11.000" +"010065E003FD8000","Gear.Club Unlimited","status-playable","playable","2021-06-08 13:03:19.000" +"010072900AFF0000","Gear.Club Unlimited 2","status-playable;nvdec;online-broken","playable","2022-07-29 12:52:16.000" +"01000F000D9F0000","Geki Yaba Runner Anniversary Edition","status-playable","playable","2021-02-19 18:59:07.000" +"","Gekido Kintaro's Revenge","status-playable","playable","2020-10-27 12:44:05.000" +"01009D000AF3A000","Gelly Break","UE4;status-playable","playable","2021-03-03 16:04:02.000" +"01001A4008192000","Gem Smashers","nvdec;status-playable","playable","2021-06-08 13:40:51.000" +"","Genetic Disaster","status-playable","playable","2020-06-19 21:41:12.000" +"0100D7E0110B2000","Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H","32-bit;status-playable","playable","2022-06-06 00:42:09.000" +"010000300C79C000","Gensokyo Defenders","status-playable;online-broken;UE4","playable","2022-07-29 13:48:12.000" +"0100AC600EB4C000","Gensou Rougoku no Kaleidscope","status-menus;crash","menus","2021-11-24 08:45:07.000" +"","Georifters","UE4;crash;nvdec;status-menus","menus","2020-12-04 22:30:50.000" +"","Gerrrms","status-playable","playable","2020-08-15 11:32:52.000" +"","Get 10 Quest","status-playable","playable","2020-08-03 12:48:39.000" +"0100B5B00E77C000","Get Over Here","status-playable","playable","2022-10-28 11:53:52.000" +"0100EEB005ACC000","Ghost 1.0","status-playable","playable","2021-02-19 20:48:47.000" +"010063200C588000","Ghost Blade HD","status-playable;online-broken","playable","2022-09-13 21:51:21.000" +"","Ghost Grab 3000","status-playable","playable","2020-07-11 18:09:52.000" +"","Ghost Parade","status-playable","playable","2020-07-14 00:43:54.000" +"01004B301108C000","Ghost Sweeper","status-playable","playable","2022-10-10 12:45:36.000" +"010029B018432000","Ghost Trick Phantom Detective","status-playable","playable","2023-08-23 14:50:12.000" +"010008A00F632000","Ghostbusters: The Video Game Remastered","status-playable;nvdec","playable","2021-09-17 07:26:57.000" +"","Ghostrunner","UE4;crash;gpu;nvdec;status-ingame","ingame","2020-12-17 13:01:59.000" +"0100D6200F2BA000","Ghosts 'n Goblins Resurrection","status-playable","playable","2023-05-09 12:40:41.000" +"01003830092B8000","Giana Sisters: Twisted Dreams - Owltimate Edition","status-playable","playable","2022-07-29 14:06:12.000" +"0100D95012C0A000","Gibbous - A Cthulhu Adventure","status-playable;nvdec","playable","2022-10-10 12:57:17.000" +"01002C400E526000","Gigantosaurus The Game","status-playable;UE4","playable","2022-09-27 21:20:00.000" +"0100C50007070000","Ginger: Beyond the Crystal","status-playable","playable","2021-02-17 16:27:00.000" +"","Girabox","status-playable","playable","2020-12-12 13:55:05.000" +"","Giraffe and Annika","UE4;crash;status-ingame","ingame","2020-12-04 22:41:57.000" +"01006DD00CC96000","Girls und Panzer Dream Tank Match DX","status-playable;ldn-untested","playable","2022-09-12 16:07:11.000" +"","Glaive: Brick Breaker","status-playable","playable","2020-05-20 12:15:59.000" +"","Glitch's Trip","status-playable","playable","2020-12-17 16:00:57.000" +"0100EB501130E000","Glyph","status-playable","playable","2021-02-08 19:56:51.000" +"","Gnome More War","status-playable","playable","2020-12-17 16:33:07.000" +"","Gnomes Garden 2","status-playable","playable","2021-02-19 20:08:13.000" +"010036C00D0D6000","Gnomes Garden: Lost King","deadlock;status-menus","menus","2021-11-18 11:14:03.000" +"01008EF013A7C000","Gnosia","status-playable","playable","2021-04-05 17:20:30.000" +"01000C800FADC000","Go All Out","status-playable;online-broken","playable","2022-09-21 19:16:34.000" +"010055A0161F4000","Go Rally","gpu;status-ingame","ingame","2023-08-16 21:18:23.000" +"","Go! Fish Go!","status-playable","playable","2020-07-27 13:52:28.000" +"010032600C8CE000","Goat Simulator","32-bit;status-playable","playable","2022-07-29 21:02:33.000" +"0100CFA0111C8000","Gods Will Fall","status-playable","playable","2021-02-08 16:49:59.000" +"","Goetia","status-playable","playable","2020-05-19 12:55:39.000" +"","Going Under","deadlock;nvdec;status-ingame","ingame","2020-12-11 22:29:46.000" +"","Goken","status-playable","playable","2020-08-05 20:22:38.000" +"010013800F0A4000","Golazo - 010013800F0A4000","status-playable","playable","2022-09-13 21:58:37.000" +"01003C000D84C000","Golem Gates","status-ingame;crash;nvdec;online-broken;UE4","ingame","2022-07-30 11:35:11.000" +"","Golf Story","status-playable","playable","2020-05-14 14:56:17.000" +"01006FB00EBE0000","Golf With Your Friends","status-playable;online-broken","playable","2022-09-29 12:55:11.000" +"0100EEC00AA6E000","Gone Home","status-playable","playable","2022-08-01 11:14:20.000" +"","Gonner","status-playable","playable","2020-05-19 12:05:02.000" +"","Good Job!","status-playable","playable","2021-03-02 13:15:55.000" +"01003AD0123A2000","Good Night, Knight","status-nothing;crash","nothing","2023-07-30 23:38:13.000" +"","Good Pizza, Great Pizza","status-playable","playable","2020-12-04 22:59:18.000" +"","Goosebumps Dead of Night","gpu;nvdec;status-ingame","ingame","2020-12-10 20:02:16.000" +"","Goosebumps: The Game","status-playable","playable","2020-05-19 11:56:52.000" +"0100F2A005C98000","Gorogoa","status-playable","playable","2022-08-01 11:55:08.000" +"","Gotcha Racing 2nd","status-playable","playable","2020-07-23 17:14:04.000" +"","Gothic Murder: Adventure That Changes Destiny","deadlock;status-ingame;crash","ingame","2022-09-30 23:16:53.000" +"","Grab the Bottle","status-playable","playable","2020-07-14 17:06:41.000" +"","Graceful Explosion Machine","status-playable","playable","2020-05-19 20:36:55.000" +"","Grand Brix Shooter","slow;status-playable","playable","2020-06-24 13:23:54.000" +"010038100D436000","Grand Guilds","UE4;nvdec;status-playable","playable","2021-04-26 12:49:05.000" +"0100BE600D07A000","Grand Prix Story","status-playable","playable","2022-08-01 12:42:23.000" +"05B1D2ABD3D30000","Grand Theft Auto 3","services;status-nothing;crash;homebrew","nothing","2023-05-01 22:01:58.000" +"0100E0600BBC8000","Grandia HD Collection","status-boots;crash","boots","2024-08-19 04:29:48.000" +"","Grass Cutter","slow;status-ingame","ingame","2020-05-19 18:27:42.000" +"","Grave Danger","status-playable","playable","2020-05-18 17:41:28.000" +"010054A013E0C000","GraviFire","status-playable","playable","2021-04-05 17:13:32.000" +"01002C2011828000","Gravity Rider Zero","gpu;status-ingame;vulkan-backend-bug","ingame","2022-09-29 13:56:13.000" +"","Greedroid","status-playable","playable","2020-12-14 11:14:32.000" +"0100CBB0070EE000","Green Game","nvdec;status-playable","playable","2021-02-19 18:51:55.000" +"0100DA7013792000","Grey Skies: A War of the Worlds Story","status-playable;UE4","playable","2022-10-24 11:13:59.000" +"","Grid Mania","status-playable","playable","2020-05-19 14:11:05.000" +"","Gridd: Retroenhanced","status-playable","playable","2020-05-20 11:32:40.000" +"0100B7900B024000","Grim Fandango Remastered","status-playable;nvdec","playable","2022-08-01 13:55:58.000" +"010078E012D80000","Grim Legends 2: Song Of The Dark Swan","status-playable;nvdec","playable","2022-10-18 12:58:45.000" +"010009F011F90000","Grim Legends: The Forsaken Bride","status-playable;nvdec","playable","2022-10-18 13:14:06.000" +"01001E200F2F8000","Grimshade","status-playable","playable","2022-10-02 12:44:20.000" +"0100538012496000","Grindstone","status-playable","playable","2023-02-08 15:54:06.000" +"01005250123B8000","Grisaia Phantom Trigger 03","audout;status-playable","playable","2021-01-31 12:30:47.000" +"010091300FFA0000","Grizzland","gpu;status-ingame","ingame","2024-07-11 16:28:34.000" +"0100EB500D92E000","Groove Coaster: Wai Wai Party!!!!","status-playable;nvdec;ldn-broken","playable","2021-11-06 14:54:27.000" +"","Guacamelee! 2","status-playable","playable","2020-05-15 14:56:59.000" +"","Guacamelee! Super Turbo Championship Edition","status-playable","playable","2020-05-13 23:44:18.000" +"","Guess The Word","status-playable","playable","2020-07-26 21:34:25.000" +"","Guess the Character","status-playable","playable","2020-05-20 13:14:19.000" +"","Gunka o haita neko","gpu;nvdec;status-ingame","ingame","2020-08-25 12:37:56.000" +"","Gunman Clive HD Collection","status-playable","playable","2020-10-09 12:17:35.000" +"","Guns Gore and Cannoli 2","online;status-playable","playable","2021-01-06 18:43:59.000" +"","Gunvolt Chronicles: Luminous Avenger iX","status-playable","playable","2020-06-16 22:47:07.000" +"0100763015C2E000","Gunvolt Chronicles: Luminous Avenger iX 2","status-nothing;crash;Needs Update","nothing","2022-04-29 15:34:34.000" +"01002C8018554000","Gurimugurimoa OnceMore Demo","status-playable","playable","2022-07-29 22:07:31.000" +"0100AC601DCA8000","Gylt","status-ingame;crash","ingame","2024-03-18 20:16:51.000" +"0100822012D76000","HAAK","gpu;status-ingame","ingame","2023-02-19 14:31:05.000" +"","HARDCORE MECHA","slow;status-playable","playable","2020-11-01 15:06:33.000" +"","HARDCORE Maze Cube","status-playable","playable","2020-12-04 20:01:24.000" +"0100A8B00F0B4000","HYPERCHARGE: Unboxed","status-playable;nvdec;online-broken;UE4;ldn-untested","playable","2022-09-27 21:52:39.000" +"","Habroxia","status-playable","playable","2020-06-16 23:04:42.000" +"0100535012974000","Hades","status-playable;vulkan","playable","2022-10-05 10:45:21.000" +"","Hakoniwa Explorer Plus","slow;status-ingame","ingame","2021-02-19 16:56:19.000" +"","Halloween Pinball","status-playable","playable","2021-01-12 16:00:46.000" +"01006FF014152000","Hamidashi Creative","gpu;status-ingame","ingame","2021-12-19 15:30:51.000" +"01003B9007E86000","Hammerwatch","status-playable;online-broken;ldn-broken","playable","2022-08-01 16:28:46.000" +"01003620068EA000","Hand of Fate 2","status-playable","playable","2022-08-01 15:44:16.000" +"","Hang the Kings","status-playable","playable","2020-07-28 22:56:59.000" +"010066C018E50000","Happy Animals Mini Golf","gpu;status-ingame","ingame","2022-12-04 19:24:28.000" +"0100ECE00D13E000","Hard West","status-nothing;regression","nothing","2022-02-09 07:45:56.000" +"01000C90117FA000","HardCube","status-playable","playable","2021-05-05 18:33:03.000" +"","Hardway Party","status-playable","playable","2020-07-26 12:35:07.000" +"0100D0500AD30000","Harvest Life","status-playable","playable","2022-08-01 16:51:45.000" +"","Harvest Moon One World - 010016B010FDE00","status-playable","playable","2023-05-26 09:17:19.000" +"0100A280187BC000","Harvestella","status-playable;UE4;vulkan-backend-bug;mac-bug","playable","2024-02-13 07:04:11.000" +"","Has-Been Heroes","status-playable","playable","2021-01-13 13:31:48.000" +"01001CC00FA1A000","Hatsune Miku: Project DIVA Mega Mix","audio;status-playable;online-broken","playable","2024-01-07 23:12:57.000" +"01009E6014F18000","Haunted Dawn: The Zombie Apocalypse","status-playable","playable","2022-10-28 12:31:51.000" +"","Haunted Dungeons: Hyakki Castle","status-playable","playable","2020-08-12 14:21:48.000" +"0100E2600DBAA000","Haven","status-playable","playable","2021-03-24 11:52:41.000" +"0100EA900FB2C000","Hayfever","status-playable;loader-allocator","playable","2022-09-22 17:35:41.000" +"0100EFE00E1DC000","Headliner: NoviNews","online;status-playable","playable","2021-03-01 11:36:00.000" +"","Headsnatchers","UE4;crash;status-menus","menus","2020-07-14 13:29:14.000" +"","Headspun","status-playable","playable","2020-07-31 19:46:47.000" +"","Heart and Slash","status-playable","playable","2021-01-13 20:56:32.000" +"","Heaven Dust","status-playable","playable","2020-05-17 14:02:41.000" +"0100FD901000C000","Heaven's Vault","crash;status-ingame","ingame","2021-02-08 18:22:01.000" +"","Helheim Hassle","status-playable","playable","2020-10-14 11:38:36.000" +"01000938017E5C00","Hell Pie0","status-playable;nvdec;UE4","playable","2022-11-03 16:48:46.000" +"0100A4600E27A000","Hell Warders","online;status-playable","playable","2021-02-27 02:31:03.000" +"","Hell is Other Demons","status-playable","playable","2021-01-13 13:23:02.000" +"010044500CF8E000","Hellblade: Senua's Sacrifice","gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-01 19:36:50.000" +"010087D0084A8000","Hello Kitty Kruisers With Sanrio Friends","nvdec;status-playable","playable","2021-06-04 19:08:46.000" +"0100FAA00B168000","Hello Neighbor","status-playable;UE4","playable","2022-08-01 21:32:23.000" +"","Hello Neighbor: Hide And Seek","UE4;gpu;slow;status-ingame","ingame","2020-10-24 10:59:57.000" +"010024600C794000","Hellpoint","status-menus","menus","2021-11-26 13:24:20.000" +"","Hero Express","nvdec;status-playable","playable","2020-08-06 13:23:43.000" +"010077D01094C000","Hero-U: Rogue to Redemption","nvdec;status-playable","playable","2021-03-24 11:40:01.000" +"0100D2B00BC54000","Heroes of Hammerwatch","status-playable","playable","2022-08-01 18:30:21.000" +"01001B70080F0000","Heroine Anthem Zero episode 1","status-playable;vulkan-backend-bug","playable","2022-08-01 22:02:36.000" +"010057300B0DC000","Heroki","gpu;status-ingame","ingame","2023-07-30 19:30:01.000" +"","Heroland","status-playable","playable","2020-08-05 15:35:39.000" +"01007AC00E012000","Hexagravity","status-playable","playable","2021-05-28 13:47:48.000" +"01004E800F03C000","Hidden","slow;status-ingame","ingame","2022-10-05 10:56:53.000" +"0100F6A00A684000","Higurashi no Naku Koro ni Hō","audio;status-ingame","ingame","2021-09-18 14:40:28.000" +"0100F8D0129F4000","Himehibi 1 gakki - Princess Days","status-nothing;crash","nothing","2021-11-03 08:34:19.000" +"","Hiragana Pixel Party","status-playable","playable","2021-01-14 08:36:50.000" +"01004990132AC000","Hitman 3 - Cloud Version","Needs Update;crash;services;status-nothing","nothing","2021-04-18 22:35:07.000" +"010083A018262000","Hitman: Blood Money - Reprisal","deadlock;status-ingame","ingame","2024-09-28 16:28:50.000" +"","HoPiKo","status-playable","playable","2021-01-13 20:12:38.000" +"","Hob: The Definitive Edition","status-playable","playable","2021-01-13 09:39:19.000" +"0100F7300ED2C000","Hoggy 2","status-playable","playable","2022-10-10 13:53:35.000" +"0100F7E00C70E000","Hogwarts Legacy 0100F7E00C70E000","status-ingame;slow","ingame","2024-09-03 19:53:58.000" +"0100633007D48000","Hollow Knight","status-playable;nvdec","playable","2023-01-16 15:44:56.000" +"0100F2100061E800","Hollow0","UE4;gpu;status-ingame","ingame","2021-03-03 23:42:56.000" +"","Holy Potatoes! What the Hell?!","status-playable","playable","2020-07-03 10:48:56.000" +"010087800EE5A000","Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit","status-boots;crash","boots","2023-02-19 00:51:21.000" +"010086D011EB8000","Horace","status-playable","playable","2022-10-10 14:03:50.000" +"0100001019F6E000","Horizon Chase 2","deadlock;slow;status-ingame;crash;UE4","ingame","2024-08-19 04:24:06.000" +"01009EA00B714000","Horizon Chase Turbo","status-playable","playable","2021-02-19 19:40:56.000" +"0100E4200FA82000","Horror Pinball Bundle","status-menus;crash","menus","2022-09-13 22:15:34.000" +"0100017007980000","Hotel Transylvania 3: Monsters Overboard","nvdec;status-playable","playable","2021-01-27 18:55:31.000" +"0100D0E00E51E000","Hotline Miami Collection","status-playable;nvdec","playable","2022-09-09 16:41:19.000" +"0100BDE008218000","Hotshot Racing","gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug","ingame","2024-02-04 21:31:17.000" +"0100CAE00EB02000","House Flipper","status-playable","playable","2021-06-16 18:28:32.000" +"0100F6800910A000","Hover","status-playable;online-broken","playable","2022-09-20 12:54:46.000" +"0100A66003384000","Hulu","status-boots;online-broken","boots","2022-12-09 10:05:00.000" +"","Human Resource Machine","32-bit;status-playable","playable","2020-12-17 21:47:09.000" +"","Human: Fall Flat","status-playable","playable","2021-01-13 18:36:05.000" +"","Hungry Shark World","status-playable","playable","2021-01-13 18:26:08.000" +"0100EBA004726000","Huntdown","status-playable","playable","2021-04-05 16:59:54.000" +"010068000CAC0000","Hunter's Legacy: Purrfect Edition","status-playable","playable","2022-08-02 10:33:31.000" +"0100C460040EA000","Hunting Simulator","status-playable;UE4","playable","2022-08-02 10:54:08.000" +"010061F010C3A000","Hunting Simulator 2","status-playable;UE4","playable","2022-10-10 14:25:51.000" +"","Hyper Jam","UE4;crash;status-boots","boots","2020-12-15 22:52:11.000" +"01003B200B372000","Hyper Light Drifter - Special Edition","status-playable;vulkan-backend-bug","playable","2023-01-13 15:44:48.000" +"","HyperBrawl Tournament","crash;services;status-boots","boots","2020-12-04 23:03:27.000" +"010061400ED90000","HyperParasite","status-playable;nvdec;UE4","playable","2022-09-27 22:05:44.000" +"0100959010466000","Hypnospace Outlaw","status-ingame;nvdec","ingame","2023-08-02 22:46:49.000" +"01002B00111A2000","Hyrule Warriors: Age of Calamity","gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug","ingame","2024-02-28 00:47:00.000" +"0100A2C01320E000","Hyrule Warriors: Age of Calamity - Demo Version","slow;status-playable","playable","2022-10-10 17:37:41.000" +"0100AE00096EA000","Hyrule Warriors: Definitive Edition","services-horizon;status-ingame;nvdec","ingame","2024-06-16 10:34:05.000" +"0100849000BDA000","I AM SETSUNA","status-playable","playable","2021-11-28 11:06:11.000" +"01001860140B0000","I Saw Black Clouds","nvdec;status-playable","playable","2021-04-19 17:22:16.000" +"","I, Zombie","status-playable","playable","2021-01-13 14:53:44.000" +"","ICEY","status-playable","playable","2021-01-14 16:16:04.000" +"0100737003190000","IMPLOSION","status-playable;nvdec","playable","2021-12-12 03:52:13.000" +"0100F1401161E000","INMOST","status-playable","playable","2022-10-05 11:27:40.000" +"0100D2D009028000","INSIDE","status-playable","playable","2021-12-25 20:24:56.000" +"010099700D750000","INSTANT SPORTS","status-playable","playable","2022-09-09 12:59:40.000" +"01001D0003B96000","INVERSUS Deluxe","status-playable;online-broken","playable","2022-08-02 14:35:36.000" +"0100F06013710000","ISLAND","status-playable","playable","2021-05-06 15:11:47.000" +"010068700C70A000","ITTA","status-playable","playable","2021-06-07 03:15:52.000" +"01004E5007E92000","Ice Age Scrat's Nutty Adventure","status-playable;nvdec","playable","2022-09-13 22:22:29.000" +"","Ice Cream Surfer","status-playable","playable","2020-07-29 12:04:07.000" +"0100954014718000","Ice Station Z","status-menus;crash","menus","2021-11-21 20:02:15.000" +"0100BC60099FE000","Iconoclasts","status-playable","playable","2021-08-30 21:11:04.000" +"","Idle Champions of the Forgotten Realms","online;status-boots","boots","2020-12-17 18:24:57.000" +"01002EC014BCA000","Idol Days - 愛怒流でいす","gpu;status-ingame;crash","ingame","2021-12-19 15:31:28.000" +"","If Found...","status-playable","playable","2020-12-11 13:43:14.000" +"01001AC00ED72000","If My Heart Had Wings","status-playable","playable","2022-09-29 14:54:57.000" +"01009F20086A0000","Ikaruga","status-playable","playable","2023-04-06 15:00:02.000" +"010040900AF46000","Ikenfell","status-playable","playable","2021-06-16 17:18:44.000" +"01007BC00E55A000","Immortal Planet","status-playable","playable","2022-09-20 13:40:43.000" +"010079501025C000","Immortal Realms: Vampire Wars","nvdec;status-playable","playable","2021-06-17 17:41:46.000" +"","Immortal Redneck - 0100F400435A000","nvdec;status-playable","playable","2021-01-27 18:36:28.000" +"01004A600EC0A000","Immortals Fenyx Rising","gpu;status-menus;crash","menus","2023-02-24 16:19:55.000" +"0100A760129A0000","In rays of the Light","status-playable","playable","2021-04-07 15:18:07.000" +"01004DE011076000","Indie Darling Bundle Vol. 3","status-playable","playable","2022-10-02 13:01:57.000" +"0100A2101107C000","Indie Puzzle Bundle Vol 1","status-playable","playable","2022-09-27 22:23:21.000" +"","Indiecalypse","nvdec;status-playable","playable","2020-06-11 20:19:09.000" +"01001D3003FDE000","Indivisible","status-playable;nvdec","playable","2022-09-29 15:20:57.000" +"01002BD00F626000","Inertial Drift","status-playable;online-broken","playable","2022-10-11 12:22:19.000" +"","Infernium","UE4;regression;status-nothing","nothing","2021-01-13 16:36:07.000" +"","Infinite Minigolf","online;status-playable","playable","2020-09-29 12:26:25.000" +"01001CB00EFD6000","Infliction","status-playable;nvdec;UE4","playable","2022-10-02 13:15:55.000" +"","InnerSpace","status-playable","playable","2021-01-13 19:36:14.000" +"","Inside Grass: A little adventure","status-playable","playable","2020-10-15 15:26:27.000" +"","Instant Sports Summer Games","gpu;status-menus","menus","2020-09-02 13:39:28.000" +"010031B0145B8000","Instant Sports Tennis","status-playable","playable","2022-10-28 16:42:17.000" +"010041501005E000","Interrogation: You will be deceived","status-playable","playable","2022-10-05 11:40:10.000" +"01000F700DECE000","Into the Dead 2","status-playable;nvdec","playable","2022-09-14 12:36:14.000" +"","Invisible Fist","status-playable","playable","2020-08-08 13:25:52.000" +"","Invisible, Inc.","crash;status-nothing","nothing","2021-01-29 16:28:13.000" +"01005F400E644000","Invisigun Reloaded","gpu;online;status-ingame","ingame","2021-06-10 12:13:24.000" +"010041C00D086000","Ion Fury","status-ingame;vulkan-backend-bug","ingame","2022-08-07 08:27:51.000" +"010095C016C14000","Iridium","status-playable","playable","2022-08-05 23:19:53.000" +"0100945012168000","Iris Fall","status-playable;nvdec","playable","2022-10-18 13:40:22.000" +"0100AD300B786000","Iris School of Wizardry - Vinculum Hearts -","status-playable","playable","2022-12-05 13:11:15.000" +"01005270118D6000","Iron Wings","slow;status-ingame","ingame","2022-08-07 08:32:57.000" +"","Ironcast","status-playable","playable","2021-01-13 13:54:29.000" +"0100E5700CD56000","Irony Curtain: From Matryoshka with Love","status-playable","playable","2021-06-04 20:12:37.000" +"","Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate","status-playable","playable","2020-08-31 13:52:21.000" +"010077900440A000","Island Flight Simulator","status-playable","playable","2021-06-04 19:42:46.000" +"","Island Saver","nvdec;status-playable","playable","2020-10-23 22:07:02.000" +"","Isoland","status-playable","playable","2020-07-26 13:48:16.000" +"","Isoland 2: Ashes of Time","status-playable","playable","2020-07-26 14:29:05.000" +"010001F0145A8000","Isolomus","services;status-boots","boots","2021-11-03 07:48:21.000" +"","Ittle Dew 2+","status-playable","playable","2020-11-17 11:44:32.000" +"0100DEB00F12A000","IxSHE Tell","status-playable;nvdec","playable","2022-12-02 18:00:42.000" +"0100D8E00C874000","Izneo","status-menus;online-broken","menus","2022-08-06 15:56:23.000" +"","JDM Racing","status-playable","playable","2020-08-03 17:02:37.000" +"0100183010F12000","JUMP FORCE Deluxe Edition","status-playable;nvdec;online-broken;UE4","playable","2023-10-01 15:56:05.000" +"0100DDB00DB38000","JUST DANCE 2020","status-playable","playable","2022-01-24 13:31:57.000" +"010035A0044E8000","JYDGE","status-playable","playable","2022-08-02 21:20:13.000" +"","James Pond Operation Robocod","status-playable","playable","2021-01-13 09:48:45.000" +"","Japanese Rail Sim: Journey to Kyoto","nvdec;status-playable","playable","2020-07-29 17:14:21.000" +"","Jenny LeClue - Detectivu","crash;status-nothing","nothing","2020-12-15 21:07:07.000" +"01006E400AE2A000","Jeopardy!","audout;nvdec;online;status-playable","playable","2021-02-22 13:53:46.000" +"0100E4900D266000","Jet Kave Adventure","status-playable;nvdec","playable","2022-09-09 14:50:39.000" +"0100F3500C70C000","Jet Lancer","gpu;status-ingame","ingame","2021-02-15 18:15:47.000" +"0100A5A00AF26000","Jettomero: Hero of the Universe","status-playable","playable","2022-08-02 14:46:43.000" +"01008330134DA000","Jiffy","gpu;status-ingame;opengl","ingame","2024-02-03 23:11:24.000" +"","Jim Is Moving Out!","deadlock;status-ingame","ingame","2020-06-03 22:05:19.000" +"0100F4D00D8BE000","Jinrui no Ninasama he","status-ingame;crash","ingame","2023-03-07 02:04:17.000" +"010038D011F08000","Jisei: The First Case HD","audio;status-playable","playable","2022-10-05 11:43:33.000" +"01008120128C2000","JoJos Bizarre Adventure All-Star Battle R","status-playable","playable","2022-12-03 10:45:10.000" +"","Job the Leprechaun","status-playable","playable","2020-06-05 12:10:06.000" +"01007090104EC000","John Wick Hex","status-playable","playable","2022-08-07 08:29:12.000" +"010069B002CDE000","Johnny Turbo's Arcade Gate of Doom","status-playable","playable","2022-07-29 12:17:50.000" +"010080D002CC6000","Johnny Turbo's Arcade Two Crude Dudes","status-playable","playable","2022-08-02 20:29:50.000" +"0100D230069CC000","Johnny Turbo's Arcade Wizard Fire","status-playable","playable","2022-08-02 20:39:15.000" +"01008B60117EC000","Journey to the Savage Planet","status-playable;nvdec;UE4;ldn-untested","playable","2022-10-02 18:48:12.000" +"0100C7600F654000","Juicy Realm - 0100C7600F654000","status-playable","playable","2023-02-21 19:16:20.000" +"","Jumanji","UE4;crash;status-boots","boots","2020-07-12 13:52:25.000" +"","Jump King","status-playable","playable","2020-06-09 10:12:39.000" +"0100B9C012706000","Jump Rope Challenge","services;status-boots;crash;Needs Update","boots","2023-02-27 01:24:28.000" +"","Jumping Joe & Friends","status-playable","playable","2021-01-13 17:09:42.000" +"","JunkPlanet","status-playable","playable","2020-11-09 12:38:33.000" +"0100CE100A826000","Jurassic Pinball","status-playable","playable","2021-06-04 19:02:37.000" +"010050A011344000","Jurassic World Evolution Complete Edition","cpu;status-menus;crash","menus","2023-08-04 18:06:54.000" +"0100BCE000598000","Just Dance 2017","online;status-playable","playable","2021-03-05 09:46:01.000" +"","Just Dance 2019","gpu;online;status-ingame","ingame","2021-02-27 17:21:27.000" +"0100EA6014BB8000","Just Dance 2022","gpu;services;status-ingame;crash;Needs Update","ingame","2022-10-28 11:01:53.000" +"0100BEE017FC0000","Just Dance 2023","status-nothing","nothing","2023-06-05 16:44:54.000" +"0100AC600CF0A000","Just Die Already","status-playable;UE4","playable","2022-12-13 13:37:50.000" +"","Just Glide","status-playable","playable","2020-08-07 17:38:10.000" +"","Just Shapes & Beats","ldn-untested;nvdec;status-playable","playable","2021-02-09 12:18:36.000" +"0100BDC00A664000","KAMEN RIDER CLIMAX SCRAMBLE","status-playable;nvdec;ldn-untested","playable","2024-07-03 08:51:11.000" +"0100A9801180E000","KAMEN RIDER memory of heroez / Premium Sound Edition","status-playable","playable","2022-12-06 03:14:26.000" +"","KAMIKO","status-playable","playable","2020-05-13 12:48:57.000" +"0100F9800EDFA000","KATANA KAMI: A Way of the Samurai Story","slow;status-playable","playable","2022-04-09 10:40:16.000" +"","KINGDOM HEARTS Melody of Memory","crash;nvdec;status-ingame","ingame","2021-03-03 17:34:12.000" +"","KORG Gadget","status-playable","playable","2020-05-13 13:57:24.000" +"010035A00DF62000","KUNAI","status-playable;nvdec","playable","2022-09-20 13:48:34.000" +"010037500F282000","KUUKIYOMI 2: Consider It More! - New Era","status-nothing;crash;Needs Update","nothing","2021-11-02 09:34:40.000" +"0100D58012FC2000","Kagamihara/Justice","crash;status-nothing","nothing","2021-06-21 16:41:29.000" +"0100D5F00EC52000","Kairobotica","status-playable","playable","2021-05-06 12:17:56.000" +"","Kangokuto Mary Skelter Finale","audio;crash;status-ingame","ingame","2021-01-09 22:39:28.000" +"01007FD00DB20000","Katakoi Contrast - collection of branch -","status-playable;nvdec","playable","2022-12-09 09:41:26.000" +"0100D7000C2C6000","Katamari Damacy REROLL","status-playable","playable","2022-08-02 21:35:05.000" +"010029600D56A000","Katana ZERO","status-playable","playable","2022-08-26 08:09:09.000" +"010038B00F142000","Kaze and the Wild Masks","status-playable","playable","2021-04-19 17:11:03.000" +"","Keen: One Girl Army","status-playable","playable","2020-12-14 23:19:52.000" +"01008D400A584000","Keep Talking and Nobody Explodes","status-playable","playable","2021-02-15 18:05:21.000" +"01004B100BDA2000","Kemono Friends Picross","status-playable","playable","2023-02-08 15:54:34.000" +"","Kentucky Robo Chicken","status-playable","playable","2020-05-12 20:54:17.000" +"0100327005C94000","Kentucky Route Zero [0100327005C94000]","status-playable","playable","2024-04-09 23:22:46.000" +"","KeroBlaster","status-playable","playable","2020-05-12 20:42:52.000" +"0100F680116A2000","Kholat","UE4;nvdec;status-playable","playable","2021-06-17 11:52:48.000" +"","Kid Tripp","crash;status-nothing","nothing","2020-10-15 07:41:23.000" +"","Kill The Bad Guy","status-playable","playable","2020-05-12 22:16:10.000" +"","Kill la Kill - IF","status-playable","playable","2020-06-09 14:47:08.000" +"0100F2900B3E2000","Killer Queen Black","ldn-untested;online;status-playable","playable","2021-04-08 12:46:18.000" +"","Kin'iro no Corda Octave","status-playable","playable","2020-09-22 13:23:12.000" +"010089000F0E8000","Kine","status-playable;UE4","playable","2022-09-14 14:28:37.000" +"0100E6B00FFBA000","King Lucas","status-playable","playable","2022-09-21 19:43:23.000" +"","King Oddball","status-playable","playable","2020-05-13 13:47:57.000" +"01008D80148C8000","King of Seas","status-playable;nvdec;UE4","playable","2022-10-28 18:29:41.000" +"0100515014A94000","King of Seas Demo","status-playable;nvdec;UE4","playable","2022-10-28 18:09:31.000" +"0100A280121F6000","Kingdom Rush","status-nothing;32-bit;crash;Needs More Attention","nothing","2022-10-05 12:34:00.000" +"0100BD9004AB6000","Kingdom: New Lands","status-playable","playable","2022-08-02 21:48:50.000" +"","Kingdom: Two Crowns","status-playable","playable","2020-05-16 19:36:21.000" +"0100EF50132BE000","Kingdoms of Amalur: Re-Reckoning","status-playable","playable","2023-08-10 13:05:08.000" +"0100227010460000","Kirby Fighters 2","ldn-works;online;status-playable","playable","2021-06-17 13:06:39.000" +"01007E3006DDA000","Kirby Star Allies","status-playable;nvdec","playable","2023-11-15 17:06:19.000" +"01004D300C5AE000","Kirby and the Forgotten Land","gpu;status-ingame","ingame","2024-03-11 17:11:21.000" +"010091201605A000","Kirby and the Forgotten Land (Demo version)","status-playable;demo","playable","2022-08-21 21:03:01.000" +"0100A8E016236000","Kirby’s Dream Buffet","status-ingame;crash;online-broken;Needs Update;ldn-works","ingame","2024-03-03 17:04:44.000" +"01006B601380E000","Kirby’s Return to Dream Land Deluxe","status-playable","playable","2024-05-16 19:58:04.000" +"010091D01A57E000","Kirby’s Return to Dream Land Deluxe - Demo","status-playable;demo","playable","2023-02-18 17:21:55.000" +"0100F3A00F4CA000","Kissed by the Baddest Bidder","gpu;status-ingame;nvdec","ingame","2022-12-04 20:57:11.000" +"01000C900A136000","Kitten Squad","status-playable;nvdec","playable","2022-08-03 12:01:59.000" +"","Klondike Solitaire","status-playable","playable","2020-12-13 16:17:27.000" +"","Knight Squad","status-playable","playable","2020-08-09 16:54:51.000" +"010024B00E1D6000","Knight Squad 2","status-playable;nvdec;online-broken","playable","2022-10-28 18:38:09.000" +"","Knight Terrors","status-playable","playable","2020-05-13 13:09:22.000" +"","Knightin'+","status-playable","playable","2020-08-31 18:18:21.000" +"","Knights of Pen and Paper +1 Deluxier Edition","status-playable","playable","2020-05-11 21:46:32.000" +"","Knights of Pen and Paper 2 Deluxiest Edition","status-playable","playable","2020-05-13 14:07:00.000" +"010001A00A1F6000","Knock-Knock","nvdec;status-playable","playable","2021-02-01 20:03:19.000" +"01009EF00DDB4000","Knockout City","services;status-boots;online-broken","boots","2022-12-09 09:48:58.000" +"0100C57019BA2000","Koa and the Five Pirates of Mara","gpu;status-ingame","ingame","2024-07-11 16:14:44.000" +"","Koi DX","status-playable","playable","2020-05-11 21:37:51.000" +"","Koi no Hanasaku Hyakkaen","32-bit;gpu;nvdec;status-ingame","ingame","2020-10-03 14:17:10.000" +"01005D200C9AA000","Koloro","status-playable","playable","2022-08-03 12:34:02.000" +"0100464009294000","Kona","status-playable","playable","2022-08-03 12:48:19.000" +"010016C011AAA000","Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o","status-playable","playable","2023-04-26 09:51:08.000" +"","Koral","UE4;crash;gpu;status-menus","menus","2020-11-16 12:41:26.000" +"010046600CCA4000","Kotodama: The 7 Mysteries of Fujisawa","audout;status-playable","playable","2021-02-01 20:28:37.000" +"010022801242C000","KukkoroDays","status-menus;crash","menus","2021-11-25 08:52:56.000" +"010060400ADD2000","Kunio-Kun: The World Classics Collection","online;status-playable","playable","2021-01-29 20:21:46.000" +"0100894011F62000","Kwaidan ~Azuma manor story~","status-playable","playable","2022-10-05 12:50:44.000" +"0100830004FB6000","L.A. Noire","status-playable","playable","2022-08-03 16:49:35.000" +"","L.F.O. - Lost Future Omega -","UE4;deadlock;status-boots","boots","2020-10-16 12:16:44.000" +"0100F2B0123AE000","L.O.L. Surprise! Remix: We Rule the World","status-playable","playable","2022-10-11 22:48:03.000" +"010026000F662800","LA-MULANA","gpu;status-ingame","ingame","2022-08-12 01:06:21.000" +"0100E5D00F4AE000","LA-MULANA 1 & 2","status-playable","playable","2022-09-22 17:56:36.000" +"01009E100BDD6000","LAST FIGHT","status-playable","playable","2022-09-20 13:54:55.000" +"0100739018020000","LEGO 2K Drive","gpu;status-ingame;ldn-works","ingame","2024-04-09 02:05:12.000" +"010070D009FEC000","LEGO DC Super-Villains","status-playable","playable","2021-05-27 18:10:37.000" +"010052A00B5D2000","LEGO Harry Potter Collection","status-ingame;crash","ingame","2024-01-31 10:28:07.000" +"010073C01AF34000","LEGO Horizon Adventures","status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4","ingame","2025-01-07 04:24:56.000" +"01001C100E772000","LEGO Jurassic World","status-playable","playable","2021-05-27 17:00:20.000" +"01006F600FFC8000","LEGO Marvel Super Heroes","status-playable","playable","2024-09-10 19:02:19.000" +"0100D3A00409E000","LEGO Marvel Super Heroes 2","status-nothing;crash","nothing","2023-03-02 17:12:33.000" +"010042D00D900000","LEGO Star Wars: The Skywalker Saga","gpu;slow;status-ingame","ingame","2024-04-13 20:08:46.000" +"0100A01006E00000","LEGO The Incredibles","status-nothing;crash","nothing","2022-08-03 18:36:59.000" +"","LEGO Worlds","crash;slow;status-ingame","ingame","2020-07-17 13:35:39.000" +"01009C8009026000","LIMBO","cpu;status-boots;32-bit","boots","2023-06-28 15:39:19.000" +"","LITTLE FRIENDS -DOGS & CATS-","status-playable","playable","2020-11-12 12:45:51.000" +"0100CF801776C000","LIVE A LIVE","status-playable;UE4;amd-vendor-bug","playable","2023-02-05 15:12:07.000" +"0100BA000FC9C000","LOCO-SPORTS","status-playable","playable","2022-09-20 14:09:30.000" +"010062A0178A8000","LOOPERS","gpu;slow;status-ingame;crash","ingame","2022-06-17 19:21:45.000" +"010054600AC74000","LOST ORBIT: Terminal Velocity","status-playable","playable","2021-06-14 12:21:12.000" +"","LOST SPHEAR","status-playable","playable","2021-01-10 06:01:21.000" +"0100EC2011A80000","LUXAR","status-playable","playable","2021-03-04 21:11:57.000" +"010038000F644000","La Mulana 2","status-playable","playable","2022-09-03 13:45:57.000" +"010058500B3E0000","Labyrinth of Refrain: Coven of Dusk","status-playable","playable","2021-02-15 17:38:48.000" +"","Labyrinth of the Witch","status-playable","playable","2020-11-01 14:42:37.000" +"0100BAB00E8C0000","Langrisser I and II","status-playable","playable","2021-02-19 15:46:10.000" +"","Lanota","status-playable","playable","2019-09-04 01:58:14.000" +"01005E000D3D8000","Lapis x Labyrinth","status-playable","playable","2021-02-01 18:58:08.000" +"","Laraan","status-playable","playable","2020-12-16 12:45:48.000" +"0100DA700879C000","Last Day of June","nvdec;status-playable","playable","2021-06-08 11:35:32.000" +"0100055007B86000","Late Shift","nvdec;status-playable","playable","2021-02-01 18:43:58.000" +"","Later Daters","status-playable","playable","2020-07-29 16:35:45.000" +"01001730144DA000","Layers of Fear 2","status-playable;nvdec;UE4","playable","2022-10-28 18:49:52.000" +"","Layers of Fear: Legacy","nvdec;status-playable","playable","2021-02-15 16:30:41.000" +"0100CE500D226000","Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition","status-playable;nvdec;opengl","playable","2022-09-14 15:01:57.000" +"0100FDB00AA80000","Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0","gpu;status-ingame;nvdec;opengl","ingame","2022-09-14 15:15:55.000" +"01009C100390E000","League of Evil","online;status-playable","playable","2021-06-08 11:23:27.000" +"","Left-Right: The Mansion","status-playable","playable","2020-05-13 13:02:12.000" +"010079901C898000","Legacy of Kain™ Soul Reaver 1&2 Remastered","status-playable","playable","2025-01-07 05:50:01.000" +"01002DB007A96000","Legend of Kay Anniversary","nvdec;status-playable","playable","2021-01-29 18:38:29.000" +"","Legend of the Skyfish","status-playable","playable","2020-06-24 13:04:22.000" +"","Legend of the Tetrarchs","deadlock;status-ingame","ingame","2020-07-10 07:54:03.000" +"0100A73006E74000","Legendary Eleven","status-playable","playable","2021-06-08 12:09:03.000" +"0100A7700B46C000","Legendary Fishing","online;status-playable","playable","2021-04-14 15:08:46.000" +"01003A30012C0000","Lego City Undercover","status-playable;nvdec","playable","2024-09-30 08:44:27.000" +"","Legrand Legacy: Tale of the Fatebounds","nvdec;status-playable","playable","2020-07-26 12:27:36.000" +"010031A0135CA000","Leisure Suit Larry - Wet Dreams Dry Twice","status-playable","playable","2022-10-28 19:00:57.000" +"0100A8E00CAA0000","Leisure Suit Larry: Wet Dreams Don't Dry","status-playable","playable","2022-08-03 19:51:44.000" +"01003AB00983C000","Lethal League Blaze","online;status-playable","playable","2021-01-29 20:13:31.000" +"","Letter Quest Remastered","status-playable","playable","2020-05-11 21:30:34.000" +"0100CE301678E800","Letters - a written adventure","gpu;status-ingame","ingame","2023-02-21 20:12:38.000" +"","Levelhead","online;status-ingame","ingame","2020-10-18 11:44:51.000" +"","Levels+","status-playable","playable","2020-05-12 13:51:39.000" +"0100C8000F146000","Liberated","gpu;status-ingame;nvdec","ingame","2024-07-04 04:58:24.000" +"01003A90133A6000","Liberated: Enhanced Edition","gpu;status-ingame;nvdec","ingame","2024-07-04 04:48:48.000" +"","Lichtspeer: Double Speer Edition","status-playable","playable","2020-05-12 16:43:09.000" +"010041F0128AE000","Liege Dragon","status-playable","playable","2022-10-12 10:27:03.000" +"010006300AFFE000","Life Goes On","status-playable","playable","2021-01-29 19:01:20.000" +"0100FD101186C000","Life is Strange 2","status-playable;UE4","playable","2024-07-04 05:05:58.000" +"0100DC301186A000","Life is Strange Remastered","status-playable;UE4","playable","2022-10-03 16:54:44.000" +"010008501186E000","Life is Strange: Before the Storm Remastered","status-playable","playable","2023-09-28 17:15:44.000" +"0100500012AB4000","Life is Strange: True Colors [0100500012AB4000]","gpu;status-ingame;UE4","ingame","2024-04-08 16:11:52.000" +"","Life of Boris: Super Slav","status-ingame","ingame","2020-12-17 11:40:05.000" +"0100B3A0135D6000","Life of Fly","status-playable","playable","2021-01-25 23:41:07.000" +"010069A01506E000","Life of Fly 2","slow;status-playable","playable","2022-10-28 19:26:52.000" +"01005B6008132000","Lifeless Planet","status-playable","playable","2022-08-03 21:25:13.000" +"","Light Fall","nvdec;status-playable","playable","2021-01-18 14:55:36.000" +"010087700D07C000","Light Tracer","nvdec;status-playable","playable","2021-05-05 19:15:43.000" +"","Linelight","status-playable","playable","2020-12-17 12:18:07.000" +"","Lines X","status-playable","playable","2020-05-11 15:28:30.000" +"","Lines XL","status-playable","playable","2020-08-31 17:48:23.000" +"0100943010310000","Little Busters! Converted Edition","status-playable;nvdec","playable","2022-09-29 15:34:56.000" +"","Little Dragons Cafe","status-playable","playable","2020-05-12 00:00:52.000" +"","Little Inferno","32-bit;gpu;nvdec;status-ingame","ingame","2020-12-17 21:43:56.000" +"0100E7000E826000","Little Misfortune","nvdec;status-playable","playable","2021-02-23 20:39:44.000" +"0100FE0014200000","Little Mouse's Encyclopedia","status-playable","playable","2022-10-28 19:38:58.000" +"01002FC00412C000","Little Nightmares","status-playable;nvdec;UE4","playable","2022-08-03 21:45:35.000" +"010097100EDD6000","Little Nightmares II","status-playable;UE4","playable","2023-02-10 18:24:44.000" +"010093A0135D6000","Little Nightmares II DEMO","status-playable;UE4;demo;vulkan-backend-bug","playable","2024-05-16 18:47:20.000" +"0100535014D76000","Little Noah: Scion of Paradise","status-playable;opengl-backend-bug","playable","2022-09-14 04:17:13.000" +"0100E6D00E81C000","Little Racer","status-playable","playable","2022-10-18 16:41:13.000" +"","Little Shopping","status-playable","playable","2020-10-03 16:34:35.000" +"","Little Town Hero","status-playable","playable","2020-10-15 23:28:48.000" +"","Little Triangle","status-playable","playable","2020-06-17 14:46:26.000" +"","Lode Runner Legacy","status-playable","playable","2021-01-10 14:10:28.000" +"","Lofi Ping Pong","crash;status-ingame","ingame","2020-12-15 20:09:22.000" +"0100B6D016EE6000","Lone Ruin","status-ingame;crash;nvdec","ingame","2023-01-17 06:41:19.000" +"0100A0C00E0DE000","Lonely Mountains Downhill","status-playable;online-broken","playable","2024-07-04 05:08:11.000" +"","Lost Horizon","status-playable","playable","2020-09-01 13:41:22.000" +"","Lost Horizon 2","nvdec;status-playable","playable","2020-06-16 12:02:12.000" +"0100156014C6A000","Lost Lands 3: The Golden Curse","status-playable;nvdec","playable","2022-10-24 16:30:00.000" +"0100BDD010AC8000","Lost Lands: Dark Overlord","status-playable","playable","2022-10-03 11:52:58.000" +"0100133014510000","Lost Lands: The Four Horsemen","status-playable;nvdec","playable","2022-10-24 16:41:00.000" +"","Lost Phone Stories","services;status-ingame","ingame","2020-04-05 23:17:33.000" +"01008AD013A86800","Lost Ruins","gpu;status-ingame","ingame","2023-02-19 14:09:00.000" +"0100018013124000","Lost Words: Beyond the Page","status-playable","playable","2022-10-24 17:03:21.000" +"01005FE01291A000","Lost in Random","gpu;status-ingame","ingame","2022-12-18 07:09:28.000" +"0100D36011AD4000","Love Letter from Thief X","gpu;status-ingame;nvdec","ingame","2023-11-14 03:55:31.000" +"","Ludo Mania","crash;services;status-nothing","nothing","2020-04-03 00:33:47.000" +"010048701995E000","Luigi's Mansion 2 HD","status-ingame;ldn-broken;amd-vendor-bug","ingame","2024-09-05 23:47:27.000" +"0100DCA0064A6000","Luigi's Mansion 3","gpu;slow;status-ingame;Needs Update;ldn-works","ingame","2024-09-27 22:17:36.000" +"","Lumini","status-playable","playable","2020-08-09 20:45:09.000" +"0100FF00042EE000","Lumo","status-playable;nvdec","playable","2022-02-11 18:20:30.000" +"","Lust for Darkness","nvdec;status-playable","playable","2020-07-26 12:09:15.000" +"0100F0B00F68E000","Lust for Darkness: Dawn Edition","nvdec;status-playable","playable","2021-06-16 13:47:46.000" +"010002C00C270000","MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020","status-ingame;crash;online-broken;ldn-works","ingame","2024-08-23 16:12:55.000" +"0100EEF00CBC0000","MEANDERS","UE4;gpu;status-ingame","ingame","2021-06-11 19:19:33.000" +"010025C00D410000","MEGAMAN ZERO/ZX LEGACY COLLECTION","status-playable","playable","2021-06-14 16:17:32.000" +"","METAGAL","status-playable","playable","2020-06-05 00:05:48.000" +"0100E8F00F6BE000","METAL MAX Xeno Reborn","status-playable","playable","2022-12-05 15:33:53.000" +"0100F5700C9A8000","MIND Path to Thalamus","UE4;status-playable","playable","2021-06-16 17:37:25.000" +"0100A9F01776A000","MLB The Show 22 Tech Test","services;status-nothing;crash;Needs Update;demo","nothing","2022-12-09 10:28:34.000" +"0100E2E01C32E000","MLB The Show 24","services-horizon;status-nothing","nothing","2024-03-31 04:54:11.000" +"0100876015D74000","MLB® The Show™ 22","gpu;slow;status-ingame","ingame","2023-04-25 06:28:43.000" +"0100913019170000","MLB® The Show™ 23","gpu;status-ingame","ingame","2024-07-26 00:56:50.000" +"","MO:Astray","crash;status-ingame","ingame","2020-12-11 21:45:44.000" +"0100B46017500000","MOFUMOFU Sensen","gpu;status-menus","menus","2024-09-21 21:51:08.000" +"0100FBD00ED24000","MONKEY BARRELS","status-playable","playable","2022-09-14 17:28:52.000" +"010042501329E000","MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version","status-playable;demo","playable","2022-11-13 22:20:26.000" +"010088400366E000","MONSTER JAM CRUSH IT!™","UE4;nvdec;online;status-playable","playable","2021-04-08 19:29:27.000" +"","MUJO","status-playable","playable","2020-05-08 16:31:04.000" +"","MUSNYX","status-playable","playable","2020-05-08 14:24:43.000" +"0100161009E5C000","MX Nitro","status-playable","playable","2022-09-27 22:34:33.000" +"0100218011E7E000","MX vs ATV All Out","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-25 19:51:46.000" +"","MXGP3 - The Official Motocross Videogame","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 14:00:20.000" +"","MY HERO ONE'S JUSTICE","UE4;crash;gpu;online;status-menus","menus","2020-12-10 13:11:04.000" +"","MY HERO ONE'S JUSTICE 2","UE4;gpu;nvdec;status-ingame","ingame","2020-12-18 14:08:47.000" +"0100F2400D434000","Machi Knights Blood bagos","status-playable;nvdec;UE4","playable","2022-09-14 15:08:04.000" +"","Mad Carnage","status-playable","playable","2021-01-10 13:00:07.000" +"","Mad Father","status-playable","playable","2020-11-12 13:22:10.000" +"010061E00EB1E000","Mad Games Tycoon","status-playable","playable","2022-09-20 14:23:14.000" +"01004A200E722000","Magazine Mogul","status-playable;loader-allocator","playable","2022-10-03 12:05:34.000" +"","MagiCat","status-playable","playable","2020-12-11 15:22:07.000" +"","Magicolors","status-playable","playable","2020-08-12 18:39:11.000" +"01008C300B624000","Mahjong Solitaire Refresh","status-boots;crash","boots","2022-12-09 12:02:55.000" +"010099A0145E8000","Mahluk dark demon","status-playable","playable","2021-04-15 13:14:24.000" +"","Mainlining","status-playable","playable","2020-06-05 01:02:00.000" +"0100D9900F220000","Maitetsu: Pure Station","status-playable","playable","2022-09-20 15:12:49.000" +"0100A78017BD6000","Makai Senki Disgaea 7","status-playable","playable","2023-10-05 00:22:18.000" +"","Mana Spark","status-playable","playable","2020-12-10 13:41:01.000" +"010093D00CB22000","Maneater","status-playable;nvdec;UE4","playable","2024-05-21 16:11:57.000" +"","Manifold Garden","status-playable","playable","2020-10-13 20:27:13.000" +"0100C9A00952A000","Manticore - Galaxy on Fire","status-boots;crash;nvdec","boots","2024-02-04 04:37:24.000" +"0100E98002F6E000","Mantis Burn Racing","status-playable;online-broken;ldn-broken","playable","2024-09-02 02:13:04.000" +"01008E800D1FE000","Marble Power Blast","status-playable","playable","2021-06-04 16:00:02.000" +"0100DA7017C9E000","Marco & The Galaxy Dragon Demo","gpu;status-ingame;demo","ingame","2023-06-03 13:05:33.000" +"01006D0017F7A000","Mario & Luigi: Brothership","status-ingame;crash;slow;UE4;mac-bug","ingame","2025-01-07 04:00:00.000" +"010067300059A000","Mario + Rabbids Kingdom Battle","slow;status-playable;opengl-backend-bug","playable","2024-05-06 10:16:54.000" +"0100317013770000","Mario + Rabbids® Sparks of Hope","gpu;status-ingame;Needs Update","ingame","2024-06-20 19:56:19.000" +"0100C9C00E25C000","Mario Golf: Super Rush","gpu;status-ingame","ingame","2024-08-18 21:31:48.000" +"0100152000022000","Mario Kart 8 Deluxe","32-bit;status-playable;ldn-works;LAN;amd-vendor-bug","playable","2024-09-19 11:55:17.000" +"0100ED100BA3A000","Mario Kart Live: Home Circuit","services;status-nothing;crash;Needs More Attention","nothing","2022-12-07 22:36:52.000" +"01006FE013472000","Mario Party Superstars","gpu;status-ingame;ldn-works;mac-bug","ingame","2024-05-16 11:23:34.000" +"010019401051C000","Mario Strikers: Battle League Football","status-boots;crash;nvdec","boots","2024-05-07 06:23:56.000" +"0100BDE00862A000","Mario Tennis Aces","gpu;status-ingame;nvdec;ldn-works;LAN","ingame","2024-09-28 15:54:40.000" +"0100B99019412000","Mario vs. Donkey Kong","status-playable","playable","2024-05-04 21:22:39.000" +"0100D9E01DBB0000","Mario vs. Donkey Kong™ Demo","status-playable","playable","2024-02-18 10:40:06.000" +"01009A700A538000","Mark of the Ninja Remastered","status-playable","playable","2022-08-04 15:48:30.000" +"010044600FDF0000","Marooners","status-playable;nvdec;online-broken","playable","2022-10-18 21:35:26.000" +"010060700AC50000","Marvel Ultimate Alliance 3: The Black Order","status-playable;nvdec;ldn-untested","playable","2024-02-14 19:51:51.000" +"01003DE00C95E000","Mary Skelter 2","status-ingame;crash;regression","ingame","2023-09-12 07:37:28.000" +"0100113008262000","Masquerada: Songs and Shadows","status-playable","playable","2022-09-20 15:18:54.000" +"01004800197F0000","Master Detective Archives: Rain Code","gpu;status-ingame","ingame","2024-04-19 20:11:09.000" +"0100CC7009196000","Masters of Anima","status-playable;nvdec","playable","2022-08-04 16:00:09.000" +"","Mathland","status-playable","playable","2020-09-01 15:40:06.000" +"","Max & The Book of Chaos","status-playable","playable","2020-09-02 12:24:43.000" +"01001C9007614000","Max: The Curse Of Brotherhood","status-playable;nvdec","playable","2022-08-04 16:33:04.000" +"","Maze","status-playable","playable","2020-12-17 16:13:58.000" +"","Mech Rage","status-playable","playable","2020-11-18 12:30:16.000" +"0100C4F005EB4000","Mecho Tales","status-playable","playable","2022-08-04 17:03:19.000" +"0100E4600D31A000","Mechstermination Force","status-playable","playable","2024-07-04 05:39:15.000" +"","Medarot Classics Plus Kabuto Ver","status-playable","playable","2020-11-21 11:31:18.000" +"","Medarot Classics Plus Kuwagata Ver","status-playable","playable","2020-11-21 11:30:40.000" +"0100BBC00CB9A000","Mega Mall Story","slow;status-playable","playable","2022-08-04 17:10:58.000" +"0100B0C0086B0000","Mega Man 11","status-playable","playable","2021-04-26 12:07:53.000" +"0100734016266000","Mega Man Battle Network Legacy Collection Vol. 2","status-playable","playable","2023-08-03 18:04:32.000" +"01002D4007AE0000","Mega Man Legacy Collection Vol.1","gpu;status-ingame","ingame","2021-06-03 18:17:17.000" +"","Mega Man X Legacy Collection","audio;crash;services;status-menus","menus","2020-12-04 04:30:17.000" +"","Megabyte Punch","status-playable","playable","2020-10-16 14:07:18.000" +"","Megadimension Neptunia VII","32-bit;nvdec;status-playable","playable","2020-12-17 20:56:03.000" +"010038E016264000","Megaman Battle Network Legacy Collection Vol 1","status-playable","playable","2023-04-25 03:55:57.000" +"","Megaman Legacy Collection 2","status-playable","playable","2021-01-06 08:47:59.000" +"010082B00E8B8000","Megaquarium","status-playable","playable","2022-09-14 16:50:00.000" +"010005A00B312000","Megaton Rainfall","gpu;status-boots;opengl","boots","2022-08-04 18:29:43.000" +"0100EA100DF92000","Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou","32-bit;status-playable;nvdec","playable","2022-12-05 13:19:12.000" +"0100B360068B2000","Mekorama","gpu;status-boots","boots","2021-06-17 16:37:21.000" +"01000FA010340000","Melbits World","status-menus;nvdec;online","menus","2021-11-26 13:51:22.000" +"0100F68019636000","Melon Journey","status-playable","playable","2023-04-23 21:20:01.000" +"","Memories Off -Innocent Fille- for Dearest","status-playable","playable","2020-08-04 07:31:22.000" +"010062F011E7C000","Memory Lane","status-playable;UE4","playable","2022-10-05 14:31:03.000" +"","Meow Motors","UE4;gpu;status-ingame","ingame","2020-12-18 00:24:01.000" +"","Mercenaries Saga Chronicles","status-playable","playable","2021-01-10 12:48:19.000" +"","Mercenaries Wings The False Phoenix","crash;services;status-nothing","nothing","2020-05-08 22:42:12.000" +"","Mercenary Kings","online;status-playable","playable","2020-10-16 13:05:58.000" +"0100E5000D3CA000","Merchants of Kaidan","status-playable","playable","2021-04-15 11:44:28.000" +"010047F01AA10000","Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3","services-horizon;status-menus","menus","2024-07-24 06:34:06.000" +"","Metaloid: Origin","status-playable","playable","2020-06-04 20:26:35.000" +"010055200E87E000","Metamorphosis","UE4;audout;gpu;nvdec;status-ingame","ingame","2021-06-16 16:18:11.000" +"0100D4900E82C000","Metro 2033 Redux","gpu;status-ingame","ingame","2022-11-09 10:53:13.000" +"0100F0400E850000","Metro: Last Light Redux","slow;status-ingame;nvdec;vulkan-backend-bug","ingame","2023-11-01 11:53:52.000" +"010093801237C000","Metroid Dread","status-playable","playable","2023-11-13 04:02:36.000" +"010012101468C000","Metroid Prime Remastered","gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug","ingame","2024-05-07 22:48:15.000" +"0100A1200F20C000","Midnight Evil","status-playable","playable","2022-10-18 22:55:19.000" +"0100C1E0135E0000","Mighty Fight Federation","online;status-playable","playable","2021-04-06 18:39:56.000" +"0100AD701344C000","Mighty Goose","status-playable;nvdec","playable","2022-10-28 20:25:38.000" +"","Mighty Gunvolt Burst","status-playable","playable","2020-10-19 16:05:49.000" +"010060D00AE36000","Mighty Switch Force! Collection","status-playable","playable","2022-10-28 20:40:32.000" +"01003DA010E8A000","Miitopia","gpu;services-horizon;status-ingame","ingame","2024-09-06 10:39:13.000" +"01007DA0140E8000","Miitopia Demo","services;status-menus;crash;demo","menus","2023-02-24 11:50:58.000" +"","Miles & Kilo","status-playable","playable","2020-10-22 11:39:49.000" +"0100976008FBE000","Millie","status-playable","playable","2021-01-26 20:47:19.000" +"0100D71004694000","Minecraft","status-ingame;crash;ldn-broken","ingame","2024-09-29 12:08:59.000" +"01006BD001E06000","Minecraft - Nintendo Switch Edition","status-playable;ldn-broken","playable","2023-10-15 01:47:08.000" +"01006C100EC08000","Minecraft Dungeons","status-playable;nvdec;online-broken;UE4","playable","2024-06-26 22:10:43.000" +"01007C6012CC8000","Minecraft Legends","gpu;status-ingame;crash","ingame","2024-03-04 00:32:24.000" +"01003EF007ABA000","Minecraft: Story Mode - Season Two","status-playable;online-broken","playable","2023-03-04 00:30:50.000" +"010059C002AC2000","Minecraft: Story Mode - The Complete Adventure","status-boots;crash;online-broken","boots","2022-08-04 18:56:58.000" +"0100B7500F756000","Minefield","status-playable","playable","2022-10-05 15:03:29.000" +"01003560119A6000","Mini Motor Racing X","status-playable","playable","2021-04-13 17:54:49.000" +"","Mini Trains","status-playable","playable","2020-07-29 23:06:20.000" +"010039200EC66000","Miniature - The Story Puzzle","status-playable;UE4","playable","2022-09-14 17:18:50.000" +"010069200EB80000","Ministry of Broadcast","status-playable","playable","2022-08-10 00:31:16.000" +"0100C3F000BD8000","Minna de Wai Wai! Spelunker","status-nothing;crash","nothing","2021-11-03 07:17:11.000" +"0100FAE010864000","Minoria","status-playable","playable","2022-08-06 18:50:50.000" +"01005AB015994000","Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath","gpu;status-playable","playable","2022-03-28 02:22:24.000" +"0100CFA0138C8000","Missile Dancer","status-playable","playable","2021-01-31 12:22:03.000" +"0100E3601495C000","Missing Features 2D","status-playable","playable","2022-10-28 20:52:54.000" +"010059200CC40000","Mist Hunter","status-playable","playable","2021-06-16 13:58:58.000" +"","Mittelborg: City of Mages","status-playable","playable","2020-08-12 19:58:06.000" +"","Moai VI: Unexpected Guests","slow;status-playable","playable","2020-10-27 16:40:20.000" +"0100D8700B712000","Modern Combat Blackout","crash;status-nothing","nothing","2021-03-29 19:47:15.000" +"010004900D772000","Modern Tales: Age of Invention","slow;status-playable","playable","2022-10-12 11:20:19.000" +"0100B8500D570000","Moero Chronicle Hyper","32-bit;status-playable","playable","2022-08-11 07:21:56.000" +"01004EB0119AC000","Moero Crystal H","32-bit;status-playable;nvdec;vulkan-backend-bug","playable","2023-07-05 12:04:22.000" +"01004A400C320000","Momodora: Revere Under the Moonlight","deadlock;status-nothing","nothing","2022-02-06 03:47:43.000" +"01002CC00BC4C000","Momonga Pinball Adventures","status-playable","playable","2022-09-20 16:00:40.000" +"010093100DA04000","Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!","gpu;status-ingame","ingame","2023-09-22 10:21:46.000" +"","Monkey King: Master of the Clouds","status-playable","playable","2020-09-28 22:35:48.000" +"01003030161DC000","Monomals","gpu;status-ingame","ingame","2024-08-06 22:02:51.000" +"0100F3A00FB78000","Mononoke Slashdown","status-menus;crash","menus","2022-05-04 20:55:47.000" +"01005FF013DC2000","Monopoly Madness","status-playable","playable","2022-01-29 21:13:52.000" +"01007430037F6000","Monopoly for Nintendo Switch","status-playable;nvdec;online-broken","playable","2024-02-06 23:13:01.000" +"0100E2D0128E6000","Monster Blast","gpu;status-ingame","ingame","2023-09-02 20:02:32.000" +"01006F7001D10000","Monster Boy and the Cursed Kingdom","status-playable;nvdec","playable","2022-08-04 20:06:32.000" +"","Monster Bugs Eat People","status-playable","playable","2020-07-26 02:05:34.000" +"0100742007266000","Monster Energy Supercross - The Official Videogame","status-playable;nvdec;UE4","playable","2022-08-04 20:25:00.000" +"0100F8100B982000","Monster Energy Supercross - The Official Videogame 2","status-playable;nvdec;UE4;ldn-untested","playable","2022-08-04 21:21:24.000" +"010097800EA20000","Monster Energy Supercross - The Official Videogame 3","UE4;audout;nvdec;online;status-playable","playable","2021-06-14 12:37:54.000" +"0100E9900ED74000","Monster Farm","32-bit;nvdec;status-playable","playable","2021-05-05 19:29:13.000" +"0100770008DD8000","Monster Hunter Generation Ultimate","32-bit;status-playable;online-broken;ldn-works","playable","2024-03-18 14:35:36.000" +"0100B04011742000","Monster Hunter Rise","gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works","ingame","2024-08-24 11:04:59.000" +"010093A01305C000","Monster Hunter Rise Demo","status-playable;online-broken;ldn-works;demo","playable","2022-10-18 23:04:17.000" +"","Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600","services;status-ingame","ingame","2022-07-10 19:27:30.000" +"","Monster Hunter XX Demo","32-bit;cpu;status-nothing","nothing","2020-03-22 10:12:28.000" +"0100C3800049C000","Monster Hunter XX Nintendo Switch Ver ( Double Cross )","status-playable","playable","2024-07-21 14:08:09.000" +"010095C00F354000","Monster Jam Steel Titans","status-menus;crash;nvdec;UE4","menus","2021-11-14 09:45:38.000" +"010051B0131F0000","Monster Jam Steel Titans 2","status-playable;nvdec;UE4","playable","2022-10-24 17:17:59.000" +"","Monster Puzzle","status-playable","playable","2020-09-28 22:23:10.000" +"","Monster Sanctuary","crash;status-ingame","ingame","2021-04-04 05:06:41.000" +"0100D30010C42000","Monster Truck Championship","slow;status-playable;nvdec;online-broken;UE4","playable","2022-10-18 23:16:51.000" +"01004E10142FE000","Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。","crash;status-ingame","ingame","2021-07-23 10:56:44.000" +"010039F00EF70000","Monstrum","status-playable","playable","2021-01-31 11:07:26.000" +"","Moonfall Ultimate","nvdec;status-playable","playable","2021-01-17 14:01:25.000" +"0100E3D014ABC000","Moorhuhn Jump and Run Traps and Treasures","status-playable","playable","2024-03-08 15:10:02.000" +"010045C00F274000","Moorkuhn Kart 2","status-playable;online-broken","playable","2022-10-28 21:10:35.000" +"010040E00F642000","Morbid: The Seven Acolytes","status-playable","playable","2022-08-09 17:21:58.000" +"","More Dark","status-playable","playable","2020-12-15 16:01:06.000" +"","Morphies Law","UE4;crash;ldn-untested;nvdec;online;status-menus","menus","2020-11-22 17:05:29.000" +"","Morphite","status-playable","playable","2021-01-05 19:40:55.000" +"01006560184E6000","Mortal Kombat 1","gpu;status-ingame","ingame","2024-09-04 15:45:47.000" +"0100F2200C984000","Mortal Kombat 11","slow;status-ingame;nvdec;online-broken;ldn-broken","ingame","2024-06-19 02:22:17.000" +"","Mosaic","status-playable","playable","2020-08-11 13:07:35.000" +"010040401D564000","Moto GP 24","gpu;status-ingame","ingame","2024-05-10 23:41:00.000" +"01002ED00B01C000","Moto Racer 4","UE4;nvdec;online;status-playable","playable","2021-04-08 19:09:11.000" +"01003F200D0F2000","Moto Rush GT","status-playable","playable","2022-08-05 11:23:55.000" +"0100361007268000","MotoGP 18","status-playable;nvdec;UE4;ldn-untested","playable","2022-08-05 11:41:45.000" +"01004B800D0E8000","MotoGP 19","status-playable;nvdec;online-broken;UE4","playable","2022-08-05 11:54:14.000" +"01001FA00FBBC000","MotoGP 20","status-playable;ldn-untested","playable","2022-09-29 17:58:01.000" +"01000F5013820000","MotoGP 21","gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested","ingame","2022-10-28 21:35:08.000" +"01002A900D6D6000","Motorsport Manager for Nintendo Switch","status-playable;nvdec","playable","2022-08-05 12:48:14.000" +"01009DB00D6E0000","Mountain Rescue Simulator","status-playable","playable","2022-09-20 16:36:48.000" +"0100C4C00E73E000","Moving Out","nvdec;status-playable","playable","2021-06-07 21:17:24.000" +"0100D3300F110000","Mr Blaster","status-playable","playable","2022-09-14 17:56:24.000" +"","Mr. DRILLER DrillLand","nvdec;status-playable","playable","2020-07-24 13:56:48.000" +"","Mr. Shifty","slow;status-playable","playable","2020-05-08 15:28:16.000" +"","Ms. Splosion Man","online;status-playable","playable","2020-05-09 20:45:43.000" +"01009D200952E000","MudRunner - American Wilds","gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-16 11:40:52.000" +"","Muddledash","services;status-ingame","ingame","2020-05-08 16:46:14.000" +"010073E008E6E000","Mugsters","status-playable","playable","2021-01-28 17:57:17.000" +"0100211005E94000","Mulaka","status-playable","playable","2021-01-28 18:07:20.000" +"010038B00B9AE000","Mummy Pinball","status-playable","playable","2022-08-05 16:08:11.000" +"","Muse Dash","status-playable","playable","2020-06-06 14:41:29.000" +"","Mushroom Quest","status-playable","playable","2020-05-17 13:07:08.000" +"","Mushroom Wars 2","nvdec;status-playable","playable","2020-09-28 15:26:08.000" +"","Music Racer","status-playable","playable","2020-08-10 08:51:23.000" +"","Musou Orochi 2 Ultimate","crash;nvdec;status-boots","boots","2021-04-09 19:39:16.000" +"0100F6000EAA8000","Must Dash Amigos","status-playable","playable","2022-09-20 16:45:56.000" +"0100C3E00ACAA000","Mutant Football League Dynasty Edition","status-playable;online-broken","playable","2022-08-05 17:01:51.000" +"01004BE004A86000","Mutant Mudds Collection","status-playable","playable","2022-08-05 17:11:38.000" +"0100E6B00DEA4000","Mutant Year Zero: Road to Eden","status-playable;nvdec;UE4","playable","2022-09-10 13:31:10.000" +"01002C6012334000","My Aunt is a Witch","status-playable","playable","2022-10-19 09:21:17.000" +"","My Butler","status-playable","playable","2020-06-27 13:46:23.000" +"010031200B94C000","My Friend Pedro: Blood Bullets Bananas","nvdec;status-playable","playable","2021-05-28 11:19:17.000" +"","My Girlfriend is a Mermaid!?","nvdec;status-playable","playable","2020-05-08 13:32:55.000" +"0100E4701373E000","My Hidden Things","status-playable","playable","2021-04-15 11:26:06.000" +"","My Little Dog Adventure","gpu;status-ingame","ingame","2020-12-10 17:47:37.000" +"","My Little Riding Champion","slow;status-playable","playable","2020-05-08 17:00:53.000" +"010086B00C784000","My Lovely Daughter","status-playable","playable","2022-11-24 17:25:32.000" +"0100E7700C284000","My Memory of Us","status-playable","playable","2022-08-20 11:03:14.000" +"010028F00ABAE000","My Riding Stables - Life with Horses","status-playable","playable","2022-08-05 21:39:07.000" +"010042A00FBF0000","My Riding Stables 2: A New Adventure","status-playable","playable","2021-05-16 14:14:59.000" +"0100E25008E68000","My Time At Portia","status-playable","playable","2021-05-28 12:42:55.000" +"0100CD5011A02000","My Universe - Cooking Star Restaurant","status-playable","playable","2022-10-19 10:00:44.000" +"0100F71011A0A000","My Universe - Fashion Boutique","status-playable;nvdec","playable","2022-10-12 14:54:19.000" +"0100CD5011A02000","My Universe - Pet Clinic Cats & Dogs","status-boots;crash;nvdec","boots","2022-02-06 02:05:53.000" +"01006C301199C000","My Universe - School Teacher","nvdec;status-playable","playable","2021-01-21 16:02:52.000" +"","Märchen Forest - 0100B201D5E000","status-playable","playable","2021-02-04 21:33:34.000" +"01000D5005974000","N++","status-playable","playable","2022-08-05 21:54:58.000" +"","NAIRI: Tower of Shirin","nvdec;status-playable","playable","2020-08-09 19:49:12.000" +"010002F001220000","NAMCO MUSEUM","status-playable;ldn-untested","playable","2024-08-13 07:52:21.000" +"0100DAA00AEE6000","NAMCO MUSEUM ARCADE PAC","status-playable","playable","2021-06-07 21:44:50.000" +"","NAMCOT COLLECTION","audio;status-playable","playable","2020-06-25 13:35:22.000" +"010084D00CF5E000","NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO","status-playable","playable","2024-06-29 13:04:22.000" +"01006BB00800A000","NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst","status-playable;nvdec","playable","2024-06-16 14:58:05.000" +"0100D2D0190A4000","NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS","services-horizon;status-nothing","nothing","2024-07-25 05:16:48.000" +"0100715007354000","NARUTO™: Ultimate Ninja® STORM","status-playable;nvdec","playable","2022-08-06 14:10:31.000" +"0100545016D5E000","NASCAR Rivals","status-ingame;crash;Incomplete","ingame","2023-04-21 01:17:47.000" +"01001AE00C1B2000","NBA 2K Playgrounds 2","status-playable;nvdec;online-broken;UE4;vulkan-backend-bug","playable","2022-08-06 14:40:38.000" +"0100760002048000","NBA 2K18","gpu;status-ingame;ldn-untested","ingame","2022-08-06 14:17:51.000" +"01001FF00B544000","NBA 2K19","crash;ldn-untested;services;status-nothing","nothing","2021-04-16 13:07:21.000" +"0100E24011D1E000","NBA 2K21","gpu;status-boots","boots","2022-10-05 15:31:51.000" +"0100ACA017E4E800","NBA 2K23","status-boots","boots","2023-10-10 23:07:14.000" +"010006501A8D8000","NBA 2K24","cpu;gpu;status-boots","boots","2024-08-11 18:23:08.000" +"0100F5A008126000","NBA Playgrounds","status-playable;nvdec;online-broken;UE4","playable","2022-08-06 16:13:44.000" +"010002900294A000","NBA Playgrounds","status-playable;nvdec;online-broken;UE4","playable","2022-08-06 17:06:59.000" +"010006D0128B4000","NEOGEO POCKET COLOR SELECTION Vol.1","status-playable","playable","2023-07-08 20:55:36.000" +"01002AF014F4C000","NINJA GAIDEN 3: Razor's Edge","status-playable;nvdec","playable","2023-08-11 08:25:31.000" +"","NO THING","status-playable","playable","2021-01-04 19:06:01.000" +"","NORTH","nvdec;status-playable","playable","2021-01-05 16:17:44.000" +"0100CB800B07E000","NOT A HERO","status-playable","playable","2021-01-28 19:31:24.000" +"010072B00BDDE000","Narcos: Rise of the Cartels","UE4;crash;nvdec;status-boots","boots","2021-03-22 13:18:47.000" +"0100103011894000","Naught","UE4;status-playable","playable","2021-04-26 13:31:45.000" +"","Need For Speed Hot Pursuit Remastered","audio;online;slow;status-ingame","ingame","2020-10-27 17:46:58.000" +"","Need a Packet?","status-playable","playable","2020-08-12 16:09:01.000" +"010029B0118E8000","Need for Speed Hot Pursuit Remastered","status-playable;online-broken","playable","2024-03-20 21:58:02.000" +"","Nefarious","status-playable","playable","2020-12-17 03:20:33.000" +"01008390136FC000","Negative","nvdec;status-playable","playable","2021-03-24 11:29:41.000" +"010065F00F55A000","Neighbours back From Hell","status-playable;nvdec","playable","2022-10-12 15:36:48.000" +"0100B4900AD3E000","Nekopara Vol.1","status-playable;nvdec","playable","2022-08-06 18:25:54.000" +"","Nekopara Vol.2","status-playable","playable","2020-12-16 11:04:47.000" +"010045000E418000","Nekopara Vol.3","status-playable","playable","2022-10-03 12:49:04.000" +"","Nekopara Vol.4","crash;status-ingame","ingame","2021-01-17 01:47:18.000" +"01006ED00BC76000","Nelke & the Legendary Alchemists ~Ateliers of the New World~","status-playable","playable","2021-01-28 19:39:42.000" +"","Nelly Cootalot","status-playable","playable","2020-06-11 20:55:42.000" +"01001AB0141A8000","Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)","crash;status-ingame","ingame","2021-07-18 07:29:18.000" +"0100EBB00D2F4000","Neo Cab","status-playable","playable","2021-04-24 00:27:58.000" +"","Neo Cab Demo","crash;status-boots","boots","2020-06-16 00:14:00.000" +"0100BAB01113A000","Neon Abyss","status-playable","playable","2022-10-05 15:59:44.000" +"010075E0047F8000","Neon Chrome","status-playable","playable","2022-08-06 18:38:34.000" +"010032000EAC6000","Neon Drive","status-playable","playable","2022-09-10 13:45:48.000" +"0100B9201406A000","Neon White","status-ingame;crash","ingame","2023-02-02 22:25:06.000" +"0100743008694000","Neonwall","status-playable;nvdec","playable","2022-08-06 18:49:52.000" +"","Neoverse Trinity Edition - 01001A20133E000","status-playable","playable","2022-10-19 10:28:03.000" +"","Nerdook Bundle Vol. 1","gpu;slow;status-ingame","ingame","2020-10-07 14:27:10.000" +"01008B0010160000","Nerved","status-playable;UE4","playable","2022-09-20 17:14:03.000" +"","NeuroVoider","status-playable","playable","2020-06-04 18:20:05.000" +"0100C20012A54000","Nevaeh","gpu;nvdec;status-ingame","ingame","2021-06-16 17:29:03.000" +"010039801093A000","Never Breakup","status-playable","playable","2022-10-05 16:12:12.000" +"0100F79012600000","Neverending Nightmares","crash;gpu;status-boots","boots","2021-04-24 01:43:35.000" +"","Neverlast","slow;status-ingame","ingame","2020-07-13 23:55:19.000" +"010013700DA4A000","Neverwinter Nights: Enhanced Edition","gpu;status-menus;nvdec","menus","2024-09-30 02:59:19.000" +"","New Frontier Days -Founding Pioneers-","status-playable","playable","2020-12-10 12:45:07.000" +"0100F4300BF2C000","New Pokémon Snap","status-playable","playable","2023-01-15 23:26:57.000" +"010017700B6C2000","New Super Lucky's Tale","status-playable","playable","2024-03-11 14:14:10.000" +"0100EA80032EA000","New Super Mario Bros. U Deluxe","32-bit;status-playable","playable","2023-10-08 02:06:37.000" +"","Newt One","status-playable","playable","2020-10-17 21:21:48.000" +"","Nexomon: Extinction","status-playable","playable","2020-11-30 15:02:22.000" +"0100B69012EC6000","Nexoria: Dungeon Rogue Heroes","gpu;status-ingame","ingame","2021-10-04 18:41:29.000" +"","Next Up Hero","online;status-playable","playable","2021-01-04 22:39:36.000" +"0100E5600D446000","Ni No Kuni Wrath of the White Witch","status-boots;32-bit;nvdec","boots","2024-07-12 04:52:59.000" +"","Nice Slice","nvdec;status-playable","playable","2020-06-17 15:13:27.000" +"","Niche - a genetics survival game","nvdec;status-playable","playable","2020-11-27 14:01:11.000" +"010010701AFB2000","Nickelodeon All-Star Brawl 2","status-playable","playable","2024-06-03 14:15:01.000" +"","Nickelodeon Kart Racers","status-playable","playable","2021-01-07 12:16:49.000" +"0100CEC003A4A000","Nickelodeon Paw Patrol: On a Roll","nvdec;status-playable","playable","2021-01-28 21:14:49.000" +"","Nicky: The Home Alone Golf Ball","status-playable","playable","2020-08-08 13:45:39.000" +"0100A95012668000","Nicole","status-playable;audout","playable","2022-10-05 16:41:44.000" +"0100B8E016F76000","NieR:Automata The End of YoRHa Edition","slow;status-ingame;crash","ingame","2024-05-17 01:06:34.000" +"0100F3A0095A6000","Night Call","status-playable;nvdec","playable","2022-10-03 12:57:00.000" +"0100D8500A692000","Night Trap - 25th Anniversary Edition","status-playable;nvdec","playable","2022-08-08 13:16:14.000" +"0100921006A04000","Night in the Woods","status-playable","playable","2022-12-03 20:17:54.000" +"","Nightmare Boy","status-playable","playable","2021-01-05 15:52:29.000" +"01006E700B702000","Nightmares from the Deep 2: The Siren's Call","status-playable;nvdec","playable","2022-10-19 10:58:53.000" +"0100628004BCE000","Nights of Azure 2: Bride of the New Moon","status-menus;crash;nvdec;regression","menus","2022-11-24 16:00:39.000" +"","Nightshade","nvdec;status-playable","playable","2020-05-10 19:43:31.000" +"","Nihilumbra","status-playable","playable","2020-05-10 16:00:12.000" +"0100746010E4C000","NinNinDays","status-playable","playable","2022-11-20 15:17:29.000" +"0100D03003F0E000","Nine Parchments","status-playable;ldn-untested","playable","2022-08-07 12:32:08.000" +"0100E2F014F46000","Ninja Gaiden Sigma","status-playable;nvdec","playable","2022-11-13 16:27:02.000" +"","Ninja Gaiden Sigma 2 - 0100696014FA000","status-playable;nvdec","playable","2024-07-31 21:53:48.000" +"","Ninja Shodown","status-playable","playable","2020-05-11 12:31:21.000" +"","Ninja Striker","status-playable","playable","2020-12-08 19:33:29.000" +"0100CCD0073EA000","Ninjala","status-boots;online-broken;UE4","boots","2024-07-03 20:04:49.000" +"010003C00B868000","Ninjin: Clash of Carrots","status-playable;online-broken","playable","2024-07-10 05:12:26.000" +"0100C9A00ECE6000","Nintendo 64 - Nintendo Switch Online","gpu;status-ingame;vulkan","ingame","2024-04-23 20:21:07.000" +"0100D870045B6000","Nintendo Entertainment System - Nintendo Switch Online","status-playable;online","playable","2022-07-01 15:45:06.000" +"0100C4B0034B2000","Nintendo Labo - Toy-Con 01: Variety Kit","gpu;status-ingame","ingame","2022-08-07 12:56:07.000" +"01009AB0034E0000","Nintendo Labo Toy-Con 02: Robot Kit","gpu;status-ingame","ingame","2022-08-07 13:03:19.000" +"01001E9003502000","Nintendo Labo Toy-Con 03: Vehicle Kit","services;status-menus;crash","menus","2022-08-03 17:20:11.000" +"0100165003504000","Nintendo Labo Toy-Con 04: VR Kit","services;status-boots;crash","boots","2023-01-17 22:30:24.000" +"0100D2F00D5C0000","Nintendo Switch Sports","deadlock;status-boots","boots","2024-09-10 14:20:24.000" +"01000EE017182000","Nintendo Switch Sports Online Play Test","gpu;status-ingame","ingame","2022-03-16 07:44:12.000" +"010037200C72A000","Nippon Marathon","nvdec;status-playable","playable","2021-01-28 20:32:46.000" +"010020901088A000","Nirvana Pilot Yume","status-playable","playable","2022-10-29 11:49:49.000" +"","No Heroes Here","online;status-playable","playable","2020-05-10 02:41:57.000" +"0100853015E86000","No Man’s Sky","gpu;status-ingame","ingame","2024-07-25 05:18:17.000" +"0100F0400F202000","No More Heroes","32-bit;status-playable","playable","2022-09-13 07:44:27.000" +"010071400F204000","No More Heroes 2 Desperate Struggle","32-bit;status-playable;nvdec","playable","2022-11-19 01:38:13.000" +"01007C600EB42000","No More Heroes 3","gpu;status-ingame;UE4","ingame","2024-03-11 17:06:19.000" +"01009F3011004000","No Straight Roads","status-playable;nvdec","playable","2022-10-05 17:01:38.000" +"0100542012884000","Nongunz: Doppelganger Edition","status-playable","playable","2022-10-29 12:00:39.000" +"","Norman's Great Illusion","status-playable","playable","2020-12-15 19:28:24.000" +"01001A500AD6A000","Norn9 ~Norn + Nonette~ LOFN","status-playable;nvdec;vulkan-backend-bug","playable","2022-12-09 09:29:16.000" +"0100A9E00D97A000","Northgard","status-menus;crash","menus","2022-02-06 02:05:35.000" +"","Not Not a Brain Buster","status-playable","playable","2020-05-10 02:05:26.000" +"0100DAF00D0E2000","Not Tonight","status-playable;nvdec","playable","2022-10-19 11:48:47.000" +"","Nubarron: The adventure of an unlucky gnome","status-playable","playable","2020-12-17 16:45:17.000" +"","Nuclien","status-playable","playable","2020-05-10 05:32:55.000" +"","Numbala","status-playable","playable","2020-05-11 12:01:07.000" +"010020500C8C8000","Number Place 10000","gpu;status-menus","menus","2021-11-24 09:14:23.000" +"010003701002C000","Nurse Love Syndrome","status-playable","playable","2022-10-13 10:05:22.000" +"010049F00EC30000","Nyan Cat: Lost in Space","online;status-playable","playable","2021-06-12 13:22:03.000" +"01002E6014FC4000","O---O","status-playable","playable","2022-10-29 12:12:14.000" +"","OBAKEIDORO!","nvdec;online;status-playable","playable","2020-10-16 16:57:34.000" +"","OK K.O.! Let's Play Heroes","nvdec;status-playable","playable","2021-01-11 18:41:02.000" +"0100276009872000","OKAMI HD","status-playable;nvdec","playable","2024-04-05 06:24:58.000" +"","OLYMPIC GAMES TOKYO 2020","ldn-untested;nvdec;online;status-playable","playable","2021-01-06 01:20:24.000" +"01006DB00D970000","OMG Zombies!","32-bit;status-playable","playable","2021-04-12 18:04:45.000" +"010014E017B14000","OMORI","status-playable","playable","2023-01-07 20:21:02.000" +"01008FE00E2F6000","ONE PIECE: PIRATE WARRIORS 4","status-playable;online-broken;ldn-untested","playable","2022-09-27 22:55:46.000" +"01004A200BE82000","OPUS Collection","status-playable","playable","2021-01-25 15:24:04.000" +"010049C0075F0000","OPUS: The Day We Found Earth","nvdec;status-playable","playable","2021-01-21 18:29:31.000" +"","OTOKOMIZU","status-playable","playable","2020-07-13 21:00:44.000" +"","OTTTD","slow;status-ingame","ingame","2020-10-10 19:31:07.000" +"01005F000CC18000","OVERWHELM","status-playable","playable","2021-01-21 18:37:18.000" +"01002A000C478000","Observer","UE4;gpu;nvdec;status-ingame","ingame","2021-03-03 20:19:45.000" +"","Oceanhorn","status-playable","playable","2021-01-05 13:55:22.000" +"01006CB010840000","Oceanhorn 2 Knights of the Lost Realm","status-playable","playable","2021-05-21 18:26:10.000" +"","Octocopter: Double or Squids","status-playable","playable","2021-01-06 01:30:16.000" +"0100CAB006F54000","Octodad Dadliest Catch","crash;status-boots","boots","2021-04-23 15:26:12.000" +"","Octopath Traveler","UE4;crash;gpu;status-ingame","ingame","2020-08-31 02:34:36.000" +"0100A3501946E000","Octopath Traveler II","gpu;status-ingame;amd-vendor-bug","ingame","2024-09-22 11:39:20.000" +"010084300C816000","Odallus","status-playable","playable","2022-08-08 12:37:58.000" +"0100BB500EE3C000","Oddworld: Munch's Oddysee","gpu;nvdec;status-ingame","ingame","2021-06-17 12:11:50.000" +"01005E700ABB8000","Oddworld: New 'n' Tasty","nvdec;status-playable","playable","2021-06-17 17:51:32.000" +"0100D210177C6000","Oddworld: Soulstorm","services-horizon;status-boots;crash","boots","2024-08-18 13:13:26.000" +"01002EA00ABBA000","Oddworld: Stranger's Wrath HD","status-menus;crash;nvdec;loader-allocator","menus","2021-11-23 09:23:21.000" +"","Odium to the Core","gpu;status-ingame","ingame","2021-01-08 14:03:52.000" +"01006F5013202000","Off And On Again","status-playable","playable","2022-10-29 19:46:26.000" +"01003CD00E8BC000","Offroad Racing","status-playable;online-broken;UE4","playable","2022-09-14 18:53:22.000" +"01003B900AE12000","Oh My Godheads: Party Edition","status-playable","playable","2021-04-15 11:04:11.000" +"","Oh...Sir! The Hollywood Roast","status-ingame","ingame","2020-12-06 00:42:30.000" +"01006AB00BD82000","OkunoKA","status-playable;online-broken","playable","2022-08-08 14:41:51.000" +"0100CE2007A86000","Old Man's Journey","nvdec;status-playable","playable","2021-01-28 19:16:52.000" +"","Old School Musical","status-playable","playable","2020-12-10 12:51:12.000" +"","Old School Racer 2","status-playable","playable","2020-10-19 12:11:26.000" +"0100E0200B980000","OlliOlli: Switch Stance","gpu;status-boots","boots","2024-04-25 08:36:37.000" +"0100F9D00C186000","Olympia Soiree","status-playable","playable","2022-12-04 21:07:12.000" +"01001D600E51A000","Omega Labyrinth Life","status-playable","playable","2021-02-23 21:03:03.000" +"","Omega Vampire","nvdec;status-playable","playable","2020-10-17 19:15:35.000" +"","Omensight: Definitive Edition","UE4;crash;nvdec;status-ingame","ingame","2020-07-26 01:45:14.000" +"","Once Upon A Coma","nvdec;status-playable","playable","2020-08-01 12:09:39.000" +"","One More Dungeon","status-playable","playable","2021-01-06 09:10:58.000" +"","One Person Story","status-playable","playable","2020-07-14 11:51:02.000" +"","One Piece Pirate Warriors 3","nvdec;status-playable","playable","2020-05-10 06:23:52.000" +"","One Piece Unlimited World Red Deluxe Edition","status-playable","playable","2020-05-10 22:26:32.000" +"","OneWayTicket","UE4;status-playable","playable","2020-06-20 17:20:49.000" +"0100463013246000","Oneiros","status-playable","playable","2022-10-13 10:17:22.000" +"0100CF4011B2A000","OniNaki","nvdec;status-playable","playable","2021-02-27 21:52:42.000" +"010057C00D374000","Oniken","status-playable","playable","2022-09-10 14:22:38.000" +"010037900C814000","Oniken: Unstoppable Edition","status-playable","playable","2022-08-08 14:52:06.000" +"","Onimusha: Warlords","nvdec;status-playable","playable","2020-07-31 13:08:39.000" +"0100D5400BD90000","Operación Triunfo 2017","services;status-ingame;nvdec","ingame","2022-08-08 15:06:42.000" +"01006CF00CFA4000","Operencia The Stolen Sun","UE4;nvdec;status-playable","playable","2021-06-08 13:51:07.000" +"","Ord.","status-playable","playable","2020-12-14 11:59:06.000" +"010061D00DB74000","Ori and the Blind Forest: Definitive Edition","status-playable;nvdec;online-broken","playable","2022-09-14 19:58:13.000" +"010005800F46E000","Ori and the Blind Forest: Definitive Edition Demo","status-playable","playable","2022-09-10 14:40:12.000" +"01008DD013200000","Ori and the Will of the Wisps","status-playable","playable","2023-03-07 00:47:13.000" +"","Orn: The Tiny Forest Sprite","UE4;gpu;status-ingame","ingame","2020-08-07 14:25:30.000" +"0100E5900F49A000","Othercide","status-playable;nvdec","playable","2022-10-05 19:04:38.000" +"01006AF013A9E000","Otti house keeper","status-playable","playable","2021-01-31 12:11:24.000" +"","Our World Is Ended.","nvdec;status-playable","playable","2021-01-19 22:46:57.000" +"010097F010FE6000","Our two Bedroom Story","gpu;status-ingame;nvdec","ingame","2023-10-10 17:41:20.000" +"01005A700A166000","Out Of The Box","status-playable","playable","2021-01-28 01:34:27.000" +"0100A0D013464000","Outbreak: Endless Nightmares","status-playable","playable","2022-10-29 12:35:49.000" +"0100C850130FE000","Outbreak: Epidemic","status-playable","playable","2022-10-13 10:27:31.000" +"0100D9F013102000","Outbreak: Lost Hope","crash;status-boots","boots","2021-04-26 18:01:23.000" +"0100B450130FC000","Outbreak: The New Nightmare","status-playable","playable","2022-10-19 15:42:07.000" +"01006EE013100000","Outbreak: The Nightmare Chronicles","status-playable","playable","2022-10-13 10:41:57.000" +"0100B8900EFA6000","Outbuddies DX","gpu;status-ingame","ingame","2022-08-04 22:39:24.000" +"01008D4007A1E000","Outlast","status-playable;nvdec;loader-allocator;vulkan-backend-bug","playable","2024-01-27 04:44:26.000" +"0100DE70085E8000","Outlast 2","status-ingame;crash;nvdec","ingame","2022-01-22 22:28:05.000" +"01006FD0080B2000","Overcooked! 2","status-playable;ldn-untested","playable","2022-08-08 16:48:10.000" +"0100F28011892000","Overcooked! All You Can Eat","ldn-untested;online;status-playable","playable","2021-04-15 10:33:52.000" +"01009B900401E000","Overcooked! Special Edition","status-playable","playable","2022-08-08 20:48:52.000" +"0100D7F00EC64000","Overlanders","status-playable;nvdec;UE4","playable","2022-09-14 20:15:06.000" +"01008EA00E816000","Overpass","status-playable;online-broken;UE4;ldn-untested","playable","2022-10-17 15:29:47.000" +"0100647012F62000","Override 2 Super Mech League","status-playable;online-broken;UE4","playable","2022-10-19 15:56:04.000" +"01008A700F7EE000","Override: Mech City Brawl - Super Charged Mega Edition","status-playable;nvdec;online-broken;UE4","playable","2022-09-20 17:33:32.000" +"0100F8600E21E000","Overwatch®: Legendary Edition","deadlock;status-boots","boots","2022-09-14 20:22:22.000" +"","Owlboy","status-playable","playable","2020-10-19 14:24:45.000" +"0100AD9012510000","PAC-MAN 99","gpu;status-ingame;online-broken","ingame","2024-04-23 00:48:25.000" +"","PAC-MAN CHAMPIONSHIP EDITION 2 PLUS","status-playable","playable","2021-01-19 22:06:18.000" +"0100F0D004CAE000","PAN-PAN A tiny big adventure","audout;status-playable","playable","2021-01-25 14:42:00.000" +"0100360016800000","PAW Patrol: Grand Prix","gpu;status-ingame","ingame","2024-05-03 16:16:11.000" +"0100274004052000","PAYDAY 2","status-playable;nvdec;online-broken;ldn-untested","playable","2022-08-09 12:56:39.000" +"010085700ABC8000","PBA Pro Bowling","status-playable;nvdec;online-broken;UE4","playable","2022-09-14 23:00:49.000" +"0100F95013772000","PBA Pro Bowling 2021","status-playable;online-broken;UE4","playable","2022-10-19 16:46:40.000" +"","PC Building Simulator","status-playable","playable","2020-06-12 00:31:58.000" +"010053401147C000","PGA TOUR 2K21","deadlock;status-ingame;nvdec","ingame","2022-10-05 21:53:50.000" +"0100063005C86000","PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE","audio;status-playable;nvdec","playable","2024-02-29 14:20:35.000" +"","PHOGS!","online;status-playable","playable","2021-01-18 15:18:37.000" +"","PLANET ALPHA","UE4;gpu;status-ingame","ingame","2020-12-16 14:42:20.000" +"0100EC100A790000","PSYVARIAR DELTA","nvdec;status-playable","playable","2021-01-20 13:01:46.000" +"010016400F07E000","PUSH THE CRATE","status-playable;nvdec;UE4","playable","2022-09-15 13:28:41.000" +"011123900AEE0000","Paladins","online;status-menus","menus","2021-01-21 19:21:37.000" +"010083700B730000","Pang Adventures","status-playable","playable","2021-04-10 12:16:59.000" +"","Pantsu Hunter","status-playable","playable","2021-02-19 15:12:27.000" +"","Panzer Dragoon: Remake","status-playable","playable","2020-10-04 04:03:55.000" +"01004AE0108E0000","Panzer Paladin","status-playable","playable","2021-05-05 18:26:00.000" +"","Paper Dolls Original","UE4;crash;status-boots","boots","2020-07-13 20:26:21.000" +"0100A3900C3E2000","Paper Mario The Origami King","audio;status-playable;Needs Update","playable","2024-08-09 18:27:40.000" +"0100ECD018EBE000","Paper Mario: The Thousand-Year Door","gpu;status-ingame;intel-vendor-bug;slow","ingame","2025-01-07 04:27:35.000" +"01006AD00B82C000","Paperbound Brawlers","status-playable","playable","2021-01-25 14:32:15.000" +"0100DC70174E0000","Paradigm Paradox","status-playable;vulkan-backend-bug","playable","2022-12-03 22:28:13.000" +"01007FB010DC8000","Paradise Killer","status-playable;UE4","playable","2022-10-05 19:33:05.000" +"010063400B2EC000","Paranautical Activity","status-playable","playable","2021-01-25 13:49:19.000" +"01006B5012B32000","Part Time UFO","status-ingame;crash","ingame","2023-03-03 03:13:05.000" +"01007FC00A040000","Party Arcade","status-playable;online-broken;UE4;ldn-untested","playable","2022-08-09 12:32:53.000" +"0100B8E00359E000","Party Golf","status-playable;nvdec","playable","2022-08-09 12:38:30.000" +"010022801217E000","Party Hard 2","status-playable;nvdec","playable","2022-10-05 20:31:48.000" +"","Party Treats","status-playable","playable","2020-07-02 00:05:00.000" +"01001E500EA16000","Path of Sin: Greed","status-menus;crash","menus","2021-11-24 08:00:00.000" +"010031F006E76000","Pato Box","status-playable","playable","2021-01-25 15:17:52.000" +"01001F201121E000","Paw Patrol: Might Pups Save Adventure Bay!","status-playable","playable","2022-10-13 12:17:55.000" +"01000c4015030000","Pawapoke R","services-horizon;status-nothing","nothing","2024-05-14 14:28:32.000" +"0100A56006CEE000","Pawarumi","status-playable;online-broken","playable","2022-09-10 15:19:33.000" +"010002100CDCC000","Peaky Blinders: Mastermind","status-playable","playable","2022-10-19 16:56:35.000" +"","Peasant Knight","status-playable","playable","2020-12-22 09:30:50.000" +"0100CA901AA9C000","Penny's Big Breakaway","status-playable;amd-vendor-bug","playable","2024-05-27 07:58:51.000" +"0100C510049E0000","Penny-Punching Princess","status-playable","playable","2022-08-09 13:37:05.000" +"","Perception","UE4;crash;nvdec;status-menus","menus","2020-12-18 11:49:23.000" +"010011700D1B2000","Perchang","status-playable","playable","2021-01-25 14:19:52.000" +"010089F00A3B4000","Perfect Angle","status-playable","playable","2021-01-21 18:48:45.000" +"01005CD012DC0000","Perky Little Things","status-boots;crash;vulkan","boots","2024-08-04 07:22:46.000" +"","Persephone","status-playable","playable","2021-03-23 22:39:19.000" +"","Perseverance","status-playable","playable","2020-07-13 18:48:27.000" +"010062B01525C000","Persona 4 Golden","status-playable","playable","2024-08-07 17:48:07.000" +"01005CA01580E000","Persona 5 Royal","gpu;status-ingame","ingame","2024-08-17 21:45:15.000" +"010087701B092000","Persona 5 Tactica","status-playable","playable","2024-04-01 22:21:03.000" +"","Persona 5: Scramble","deadlock;status-boots","boots","2020-10-04 03:22:29.000" +"0100801011C3E000","Persona 5: Strikers (US)","status-playable;nvdec;mac-bug","playable","2023-09-26 09:36:01.000" +"010044400EEAE000","Petoons Party","nvdec;status-playable","playable","2021-03-02 21:07:58.000" +"0100DDD00C0EA000","Phantaruk","status-playable","playable","2021-06-11 18:09:54.000" +"010096F00E5B0000","Phantom Doctrine","status-playable;UE4","playable","2022-09-15 10:51:50.000" +"0100C31005A50000","Phantom Trigger","status-playable","playable","2022-08-09 14:27:30.000" +"0100CB000A142000","Phoenix Wright: Ace Attorney Trilogy","status-playable","playable","2023-09-15 22:03:12.000" +"","Physical Contact: 2048","slow;status-playable","playable","2021-01-25 15:18:32.000" +"01008110036FE000","Physical Contact: Speed","status-playable","playable","2022-08-09 14:40:46.000" +"010077300A86C000","Pianista: The Legendary Virtuoso","status-playable;online-broken","playable","2022-08-09 14:52:56.000" +"010012100E8DC000","Picross Lord Of The Nazarick","status-playable","playable","2023-02-08 15:54:56.000" +"","Picross S2","status-playable","playable","2020-10-15 12:01:40.000" +"","Picross S3","status-playable","playable","2020-10-15 11:55:27.000" +"","Picross S4","status-playable","playable","2020-10-15 12:33:46.000" +"0100AC30133EC000","Picross S5","status-playable","playable","2022-10-17 18:51:42.000" +"010025901432A000","Picross S6","status-playable","playable","2022-10-29 17:52:19.000" +"","Picross S7","status-playable","playable","2022-02-16 12:51:25.000" +"010043B00E1CE000","PictoQuest","status-playable","playable","2021-02-27 15:03:16.000" +"","Piczle Lines DX","UE4;crash;nvdec;status-menus","menus","2020-11-16 04:21:31.000" +"","Piczle Lines DX 500 More Puzzles!","UE4;status-playable","playable","2020-12-15 23:42:51.000" +"01000FD00D5CC000","Pig Eat Ball","services;status-ingame","ingame","2021-11-30 01:57:45.000" +"0100AA80194B0000","Pikmin 1","audio;status-ingame","ingame","2024-05-28 18:56:11.000" +"0100D680194B2000","Pikmin 2","gpu;status-ingame","ingame","2023-07-31 08:53:41.000" +"0100F4C009322000","Pikmin 3 Deluxe","gpu;status-ingame;32-bit;nvdec;Needs Update","ingame","2024-09-03 00:28:26.000" +"01001CB0106F8000","Pikmin 3 Deluxe Demo","32-bit;crash;demo;gpu;status-ingame","ingame","2021-06-16 18:38:07.000" +"0100B7C00933A000","Pikmin 4","gpu;status-ingame;crash;UE4","ingame","2024-08-26 03:39:08.000" +"0100E0B019974000","Pikmin 4 Demo","gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug","ingame","2023-09-22 21:41:08.000" +"0100D6200E130000","Pillars of Eternity","status-playable","playable","2021-02-27 00:24:21.000" +"01007A500B0B2000","Pilot Sports","status-playable","playable","2021-01-20 15:04:17.000" +"0100DA70186D4000","Pinball FX","status-playable","playable","2024-05-03 17:09:11.000" +"0100DB7003828000","Pinball FX3","status-playable;online-broken","playable","2022-11-11 23:49:07.000" +"","Pine","slow;status-ingame","ingame","2020-07-29 16:57:39.000" +"","Pinstripe","status-playable","playable","2020-11-26 10:40:40.000" +"01002B20174EE000","Piofiore: Episodio 1926","status-playable","playable","2022-11-23 18:36:05.000" +"","Piofiore: Fated Memories","nvdec;status-playable","playable","2020-11-30 14:27:50.000" +"0100EA2013BCC000","Pixel Game Maker Series Puzzle Pedestrians","status-playable","playable","2022-10-24 20:15:50.000" +"0100859013CE6000","Pixel Game Maker Series Werewolf Princess Kaguya","crash;services;status-nothing","nothing","2021-03-26 00:23:07.000" +"","Pixel Gladiator","status-playable","playable","2020-07-08 02:41:26.000" +"010000E00E612000","Pixel Puzzle Makeout League","status-playable","playable","2022-10-13 12:34:00.000" +"","PixelJunk Eden 2","crash;status-ingame","ingame","2020-12-17 11:55:52.000" +"0100E4D00A690000","Pixeljunk Monsters 2","status-playable","playable","2021-06-07 03:40:01.000" +"01004A900C352000","Pizza Titan Ultra","nvdec;status-playable","playable","2021-01-20 15:58:42.000" +"05000FD261232000","Pizza Tower","status-ingame;crash","ingame","2024-09-16 00:21:56.000" +"0100FF8005EB2000","Plague Road","status-playable","playable","2022-08-09 15:27:14.000" +"010030B00C316000","Planescape: Torment and Icewind Dale: Enhanced Editions","cpu;status-boots;32-bit;crash;Needs Update","boots","2022-09-10 03:58:26.000" +"01007EA019CFC000","Planet Cube Edge","status-playable","playable","2023-03-22 17:10:12.000" +"010087000428E000","Plantera","status-playable","playable","2022-08-09 15:36:28.000" +"0100C56010FD8000","Plants vs. Zombies: Battle for Neighborville Complete Edition","gpu;audio;status-boots;crash","boots","2024-09-02 12:58:14.000" +"0100E5B011F48000","Ploid Saga","status-playable","playable","2021-04-19 16:58:45.000" +"01009440095FE000","Pode","nvdec;status-playable","playable","2021-01-25 12:58:35.000" +"010086F0064CE000","Poi: Explorer Edition","nvdec;status-playable","playable","2021-01-21 19:32:00.000" +"0100EB6012FD2000","Poison Control","status-playable","playable","2021-05-16 14:01:54.000" +"01005D100807A000","Pokemon Quest","status-playable","playable","2022-02-22 16:12:32.000" +"010030D005AE6000","Pokken Tournament DX Demo","status-playable;demo;opengl-backend-bug","playable","2022-08-10 12:03:19.000" +"0100B3F000BE2000","Pokkén Tournament DX","status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug","playable","2024-07-18 23:11:08.000" +"0100000011D90000","Pokémon Brilliant Diamond","gpu;status-ingame;ldn-works","ingame","2024-08-28 13:26:35.000" +"010072400E04A000","Pokémon Café Mix","status-playable","playable","2021-08-17 20:00:04.000" +"","Pokémon HOME","Needs Update;crash;services;status-menus","menus","2020-12-06 06:01:51.000" +"01001F5010DFA000","Pokémon Legends: Arceus","gpu;status-ingame;Needs Update;ldn-works","ingame","2024-09-19 10:02:02.000" +"01003D200BAA2000","Pokémon Mystery Dungeon Rescue Team DX","status-playable;mac-bug","playable","2024-01-21 00:16:32.000" +"0100A3D008C5C000","Pokémon Scarlet","gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug","ingame","2023-12-14 13:18:29.000" +"01008DB008C2C000","Pokémon Shield","deadlock;status-ingame;crash;online-broken;ldn-works;LAN","ingame","2024-08-12 07:20:22.000" +"0100ABF008968000","Pokémon Sword","deadlock;status-ingame;crash;online-broken;ldn-works;LAN","ingame","2024-08-26 15:40:37.000" +"01008F6008C5E000","Pokémon Violet","gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug","ingame","2024-07-30 02:51:48.000" +"0100187003A36000","Pokémon: Let's Go, Eevee!","status-ingame;crash;nvdec;online-broken;ldn-broken","ingame","2024-06-01 15:03:04.000" +"010003F003A34000","Pokémon: Let's Go, Pikachu!","status-ingame;crash;nvdec;online-broken;ldn-broken","ingame","2024-03-15 07:55:41.000" +"01009AD008C4C000","Pokémon: Let's Go, Pikachu! demo","slow;status-playable;demo","playable","2023-11-26 11:23:20.000" +"","Polandball: Can Into Space!","status-playable","playable","2020-06-25 15:13:26.000" +"","Poly Bridge","services;status-playable","playable","2020-06-08 23:32:41.000" +"010017600B180000","Polygod","slow;status-ingame;regression","ingame","2022-08-10 14:38:14.000" +"010074B00ED32000","Polyroll","gpu;status-boots","boots","2021-07-01 16:16:50.000" +"","Ponpu","status-playable","playable","2020-12-16 19:09:34.000" +"","Pooplers","status-playable","playable","2020-11-02 11:52:10.000" +"01007EF013CA0000","Port Royale 4","status-menus;crash;nvdec","menus","2022-10-30 14:34:06.000" +"01007BB017812000","Portal","status-playable","playable","2024-06-12 03:48:29.000" +"0100ABD01785C000","Portal 2","gpu;status-ingame","ingame","2023-02-20 22:44:15.000" +"","Portal Dogs","status-playable","playable","2020-09-04 12:55:46.000" +"0100437004170000","Portal Knights","ldn-untested;online;status-playable","playable","2021-05-27 19:29:04.000" +"","Potata: Fairy Flower","nvdec;status-playable","playable","2020-06-17 09:51:34.000" +"01000A4014596000","Potion Party","status-playable","playable","2021-05-06 14:26:54.000" +"","Power Rangers: Battle for the Grid","status-playable","playable","2020-06-21 16:52:42.000" +"01008E100E416000","PowerSlave Exhumed","gpu;status-ingame","ingame","2023-07-31 23:19:10.000" +"0100D1C01C194000","Powerful Pro Baseball 2024-2025","gpu;status-ingame","ingame","2024-08-25 06:40:48.000" +"","Prehistoric Dude","gpu;status-ingame","ingame","2020-10-12 12:38:48.000" +"","Pretty Princess Magical Coordinate","status-playable","playable","2020-10-15 11:43:41.000" +"01007F00128CC000","Pretty Princess Party","status-playable","playable","2022-10-19 17:23:58.000" +"010009300D278000","Preventive Strike","status-playable;nvdec","playable","2022-10-06 10:55:51.000" +"010007F00879E000","PriPara: All Idol Perfect Stage","status-playable","playable","2022-11-22 16:35:52.000" +"0100210019428000","Prince of Persia: The Lost Crown","status-ingame;crash","ingame","2024-06-08 21:31:58.000" +"01007A3009184000","Princess Peach: Showtime!","status-playable;UE4","playable","2024-09-21 13:39:45.000" +"010024701DC2E000","Princess Peach: Showtime! Demo","status-playable;UE4;demo","playable","2024-03-10 17:46:45.000" +"01008FA01187A000","Prinny 2: Dawn of Operation Panties, Dood!","32-bit;status-playable","playable","2022-10-13 12:42:58.000" +"0100A6E01681C000","Prinny Presents NIS Classics Volume 1","status-boots;crash;Needs Update","boots","2023-02-02 07:23:09.000" +"01007A0011878000","Prinny: Can I Really Be the Hero?","32-bit;status-playable;nvdec","playable","2023-10-22 09:25:25.000" +"010029200AB1C000","Prison Architect","status-playable","playable","2021-04-10 12:27:58.000" +"0100C1801B914000","Prison City","gpu;status-ingame","ingame","2024-03-01 08:19:33.000" +"0100F4800F872000","Prison Princess","status-playable","playable","2022-11-20 15:00:25.000" +"0100A9800A1B6000","Professional Construction - The Simulation","slow;status-playable","playable","2022-08-10 15:15:45.000" +"","Professional Farmer: Nintendo Switch Edition","slow;status-playable","playable","2020-12-16 13:38:19.000" +"","Professor Lupo and his Horrible Pets","status-playable","playable","2020-06-12 00:08:45.000" +"0100D1F0132F6000","Professor Lupo: Ocean","status-playable","playable","2021-04-14 16:33:33.000" +"0100BBD00976C000","Project Highrise: Architect's Edition","status-playable","playable","2022-08-10 17:19:12.000" +"0100ACE00DAB6000","Project Nimbus: Complete Edition","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-10 17:35:43.000" +"01002980140F6000","Project TRIANGLE STRATEGY Debut Demo","status-playable;UE4;demo","playable","2022-10-24 21:40:27.000" +"","Project Warlock","status-playable","playable","2020-06-16 10:50:41.000" +"","Psikyo Collection Vol 1","32-bit;status-playable","playable","2020-10-11 13:18:47.000" +"0100A2300DB78000","Psikyo Collection Vol. 3","status-ingame","ingame","2021-06-07 02:46:23.000" +"01009D400C4A8000","Psikyo Collection Vol.2","32-bit;status-playable","playable","2021-06-07 03:22:07.000" +"01007A200F2E2000","Psikyo Shooting Stars Alpha","32-bit;status-playable","playable","2021-04-13 12:03:43.000" +"0100D7400F2E4000","Psikyo Shooting Stars Bravo","32-bit;status-playable","playable","2021-06-14 12:09:07.000" +"","Puchitto kurasutā","Need-Update;crash;services;status-menus","menus","2020-07-04 16:44:28.000" +"0100861012474000","Pulstario","status-playable","playable","2022-10-06 11:02:01.000" +"01009AE00B788000","Pumped BMX Pro","status-playable;nvdec;online-broken","playable","2022-09-20 17:40:50.000" +"01006C10131F6000","Pumpkin Jack","status-playable;nvdec;UE4","playable","2022-10-13 12:52:32.000" +"0100B60010432000","Push the Crate 2","UE4;gpu;nvdec;status-ingame","ingame","2021-06-10 14:20:01.000" +"","Pushy and Pully in Blockland","status-playable","playable","2020-07-04 11:44:41.000" +"","Puyo Puyo Champions","online;status-playable","playable","2020-06-19 11:35:08.000" +"010038E011940000","Puyo Puyo Tetris 2","status-playable;ldn-untested","playable","2023-09-26 11:35:25.000" +"010079E01A1E0000","Puzzle Bobble Everybubble!","audio;status-playable;ldn-works","playable","2023-06-10 03:53:40.000" +"","Puzzle Book","status-playable","playable","2020-09-28 13:26:01.000" +"0100476004A9E000","Puzzle Box Maker","status-playable;nvdec;online-broken","playable","2022-08-10 18:00:52.000" +"","Puzzle and Dragons GOLD","slow;status-playable","playable","2020-05-13 15:09:34.000" +"0100A4E017372000","Pyramid Quest","gpu;status-ingame","ingame","2023-08-16 21:14:52.000" +"","Q-YO Blaster","gpu;status-ingame","ingame","2020-06-07 22:36:53.000" +"010023600AA34000","Q.U.B.E. 2","UE4;status-playable","playable","2021-03-03 21:38:57.000" +"0100A8D003BAE000","Qbics Paint","gpu;services;status-ingame","ingame","2021-06-07 10:54:09.000" +"0100BA5012E54000","Quake","gpu;status-menus;crash","menus","2022-08-08 12:40:34.000" +"010048F0195E8000","Quake II","status-playable","playable","2023-08-15 03:42:14.000" +"","QuakespasmNX","status-nothing;crash;homebrew","nothing","2022-07-23 19:28:07.000" +"010045101288A000","Quantum Replica","status-playable;nvdec;UE4","playable","2022-10-30 21:17:22.000" +"0100F1400BA88000","Quarantine Circular","status-playable","playable","2021-01-20 15:24:15.000" +"0100DCF00F13A000","Queen's Quest 4: Sacred Truce","status-playable;nvdec","playable","2022-10-13 12:59:21.000" +"0100492012378000","Quell Zen","gpu;status-ingame","ingame","2021-06-11 15:59:53.000" +"01001DE005012000","Quest of Dungeons","status-playable","playable","2021-06-07 10:29:22.000" +"","QuietMansion2","status-playable","playable","2020-09-03 14:59:35.000" +"0100AF100EE76000","Quiplash 2 InterLASHional","status-playable;online-working","playable","2022-10-19 17:43:45.000" +"0100F930136B6000","R-TYPE FINAL 2","slow;status-ingame;nvdec;UE4","ingame","2022-10-30 21:46:29.000" +"01007B0014300000","R-TYPE FINAL 2 Demo","slow;status-ingame;nvdec;UE4;demo","ingame","2022-10-24 21:57:42.000" +"","R-Type Dimensions EX","status-playable","playable","2020-10-09 12:04:43.000" +"0100B5A004302000","R.B.I. Baseball 17","status-playable;online-working","playable","2022-08-11 11:55:47.000" +"01005CC007616000","R.B.I. Baseball 18","status-playable;nvdec;online-working","playable","2022-08-11 11:27:52.000" +"0100FCB00BF40000","R.B.I. Baseball 19","status-playable;nvdec;online-working","playable","2022-08-11 11:43:52.000" +"010061400E7D4000","R.B.I. Baseball 20","status-playable","playable","2021-06-15 21:16:29.000" +"0100B4A0115CA000","R.B.I. Baseball 21","status-playable;online-working","playable","2022-10-24 22:31:45.000" +"010024400C516000","RAD","gpu;status-menus;crash;UE4","menus","2021-11-29 02:01:56.000" +"01008FA00ACEC000","RADIO HAMMER STATION","audout;status-playable","playable","2021-02-26 20:20:06.000" +"","REKT","online;status-playable","playable","2020-09-28 12:33:56.000" +"01002A000CD48000","RESIDENT EVIL 6","status-playable;nvdec","playable","2022-09-15 14:31:47.000" +"010095300212A000","RESIDENT EVIL REVELATIONS 2","status-playable;online-broken;ldn-untested","playable","2022-08-11 12:57:50.000" +"","REZ PLZ","status-playable","playable","2020-10-24 13:26:12.000" +"01009D5009234000","RICO","status-playable;nvdec;online-broken","playable","2022-08-11 20:16:40.000" +"010088E00B816000","RIOT: Civil Unrest","status-playable","playable","2022-08-11 20:27:56.000" +"","RIVE: Ultimate Edition","status-playable","playable","2021-03-24 18:45:55.000" +"","RMX Real Motocross","status-playable","playable","2020-10-08 21:06:15.000" +"","ROBOTICS;NOTES DaSH","status-playable","playable","2020-11-16 23:09:54.000" +"","ROBOTICS;NOTES ELITE","status-playable","playable","2020-11-26 10:28:20.000" +"","RPG Maker MV","nvdec;status-playable","playable","2021-01-05 20:12:01.000" +"0000000000000000","RSDKv5u","status-ingame;homebrew","ingame","2024-04-01 16:25:34.000" +"0100E21013908000","RWBY: Grimm Eclipse","status-playable;online-broken","playable","2022-11-03 10:44:01.000" +"","RXN -Raijin-","nvdec;status-playable","playable","2021-01-10 16:05:43.000" +"01005BF00E4DE000","Rabi-Ribi","status-playable","playable","2022-08-06 17:02:44.000" +"","Race With Ryan","UE4;gpu;nvdec;slow;status-ingame","ingame","2020-11-16 04:35:33.000" +"","Rack N Ruin","status-playable","playable","2020-09-04 15:20:26.000" +"010000600CD54000","Rad Rodgers Radical Edition","status-playable;nvdec;online-broken","playable","2022-08-10 19:57:23.000" +"0100DA400E07E000","Radiation City","status-ingame;crash","ingame","2022-09-30 11:15:04.000" +"01009E40095EE000","Radiation Island","status-ingame;opengl;vulkan-backend-bug","ingame","2022-08-11 10:51:04.000" +"","Radical Rabbit Stew","status-playable","playable","2020-08-03 12:02:56.000" +"0100BAD013B6E000","Radio Commander","nvdec;status-playable","playable","2021-03-24 11:20:46.000" +"01003D00099EC000","Raging Justice","status-playable","playable","2021-06-03 14:06:50.000" +"01005CD013116000","Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]","status-playable","playable","2022-07-29 15:50:13.000" +"01002B000D97E000","Raiden V: Director's Cut","deadlock;status-boots;nvdec","boots","2024-07-12 07:31:46.000" +"01002EE00DC02000","Railway Empire","status-playable;nvdec","playable","2022-10-03 13:53:50.000" +"","Rain City","status-playable","playable","2020-10-08 16:59:03.000" +"010047600BF72000","Rain World","status-playable","playable","2023-05-10 23:34:08.000" +"0100BDD014232000","Rain on Your Parade","status-playable","playable","2021-05-06 19:32:04.000" +"","Rainbows, toilets & unicorns","nvdec;status-playable","playable","2020-10-03 18:08:18.000" +"","Raji An Ancient Epic","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 10:05:25.000" +"","Rapala Fishing: Pro Series","nvdec;status-playable","playable","2020-12-16 13:26:53.000" +"","Rascal Fight","status-playable","playable","2020-10-08 13:23:30.000" +"","Rawr-Off","crash;nvdec;status-menus","menus","2020-07-02 00:14:44.000" +"01005FF002E2A000","Rayman Legends: Definitive Edition","status-playable;nvdec;ldn-works","playable","2023-05-27 18:33:07.000" +"0100F03011616000","Re:Turn - One Way Trip","status-playable","playable","2022-08-29 22:42:53.000" +"","Re:ZERO -Starting Life in Another World- The Prophecy of the Throne","gpu;status-boots;crash;nvdec;vulkan","boots","2023-03-07 21:27:24.000" +"","Real Drift Racing","status-playable","playable","2020-07-25 14:31:31.000" +"010048600CC16000","Real Heroes: Firefighter","status-playable","playable","2022-09-20 18:18:44.000" +"","Reaper: Tale of a Pale Swordsman","status-playable","playable","2020-12-12 15:12:23.000" +"0100D9B00E22C000","Rebel Cops","status-playable","playable","2022-09-11 10:02:53.000" +"0100CAA01084A000","Rebel Galaxy: Outlaw","status-playable;nvdec","playable","2022-12-01 07:44:56.000" +"0100CF600FF7A000","Red Bow","services;status-ingame","ingame","2021-11-29 03:51:34.000" +"0100351013A06000","Red Colony","status-playable","playable","2021-01-25 20:44:41.000" +"01007820196A6000","Red Dead Redemption","status-playable;amd-vendor-bug","playable","2024-09-13 13:26:13.000" +"","Red Death","status-playable","playable","2020-08-30 13:07:37.000" +"010075000C608000","Red Faction Guerrilla Re-Mars-tered","ldn-untested;nvdec;online;status-playable","playable","2021-06-07 03:02:13.000" +"","Red Game Without a Great Name","status-playable","playable","2021-01-19 21:42:35.000" +"010045400D73E000","Red Siren : Space Defense","UE4;status-playable","playable","2021-04-25 21:21:29.000" +"","Red Wings - Aces of the Sky","status-playable","playable","2020-06-12 01:19:53.000" +"01000D100DCF8000","Redeemer: Enhanced Edition","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-09-11 10:20:24.000" +"0100326010B98000","Redout: Space Assault","status-playable;UE4","playable","2022-10-19 23:04:35.000" +"010007C00E558000","Reel Fishing: Road Trip Adventure","status-playable","playable","2021-03-02 16:06:43.000" +"","Reflection of Mine","audio;status-playable","playable","2020-12-17 15:06:37.000" +"","Refreshing Sideways Puzzle Ghost Hammer","status-playable","playable","2020-10-18 12:08:54.000" +"","Refunct","UE4;status-playable","playable","2020-12-15 22:46:21.000" +"0100FDF0083A6000","Regalia: Of Men and Monarchs - Royal Edition","status-playable","playable","2022-08-11 12:24:01.000" +"","Regions of Ruin","status-playable","playable","2020-08-05 11:38:58.000" +"","Reine des Fleurs","cpu;crash;status-boots","boots","2020-09-27 18:50:39.000" +"01002AD013C52000","Relicta","status-playable;nvdec;UE4","playable","2022-10-31 12:48:33.000" +"010095900B436000","Remi Lore","status-playable","playable","2021-06-03 18:58:15.000" +"0100FBD00F5F6000","Remothered: Broken Porcelain","UE4;gpu;nvdec;status-ingame","ingame","2021-06-17 15:13:11.000" +"01001F100E8AE000","Remothered: Tormented Fathers","status-playable;nvdec;UE4","playable","2022-10-19 23:26:50.000" +"","Rento Fortune Monolit","ldn-untested;online;status-playable","playable","2021-01-19 19:52:21.000" +"01007CC0130C6000","Renzo Racer","status-playable","playable","2021-03-23 22:28:05.000" +"01003C400AD42000","Rescue Tale","status-playable","playable","2022-09-20 18:40:18.000" +"010099A00BC1E000","Resident Evil 4","status-playable;nvdec","playable","2022-11-16 21:16:04.000" +"010018100CD46000","Resident Evil 5","status-playable;nvdec","playable","2024-02-18 17:15:29.000" +"0100643002136000","Resident Evil Revelations","status-playable;nvdec;ldn-untested","playable","2022-08-11 12:44:19.000" +"0100E7F00FFB8000","Resolutiion","crash;status-boots","boots","2021-04-25 21:57:56.000" +"0100FF201568E000","Restless Night [0100FF201568E000]","status-nothing;crash","nothing","2022-02-09 10:54:49.000" +"0100069000078000","Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000","services;status-nothing;crash","nothing","2022-08-11 13:19:41.000" +"010086E00BCB2000","Retimed","status-playable","playable","2022-08-11 13:32:39.000" +"","Retro City Rampage DX","status-playable","playable","2021-01-05 17:04:17.000" +"01000ED014A2C000","Retrograde Arena","status-playable;online-broken","playable","2022-10-31 13:38:58.000" +"010032E00E6E2000","Return of the Obra Dinn","status-playable","playable","2022-09-15 19:56:45.000" +"010027400F708000","Revenge of Justice","status-playable;nvdec","playable","2022-11-20 15:43:23.000" +"0100E2E00EA42000","Reventure","status-playable","playable","2022-09-15 20:07:06.000" +"0100729012D18000","Rhythm Fighter","crash;status-nothing","nothing","2021-02-16 18:51:30.000" +"","Rhythm of the Gods","UE4;crash;status-nothing","nothing","2020-10-03 17:39:59.000" +"","RiME","UE4;crash;gpu;status-boots","boots","2020-07-20 15:52:38.000" +"01002C700C326000","Riddled Corpses EX","status-playable","playable","2021-06-06 16:02:44.000" +"0100AC600D898000","Rift Keeper","status-playable","playable","2022-09-20 19:48:20.000" +"01006AC00EE6E000","Rimelands","status-playable","playable","2022-10-13 13:32:56.000" +"01002FF008C24000","Ring Fit Adventure","crash;services;status-nothing","nothing","2021-04-14 19:00:01.000" +"01002A6006AA4000","Riptide GP: Renegade","online;status-playable","playable","2021-04-13 23:33:02.000" +"","Rise and Shine","status-playable","playable","2020-12-12 15:56:43.000" +"","Rise of Insanity","status-playable","playable","2020-08-30 15:42:14.000" +"01006BA00E652000","Rise: Race the Future","status-playable","playable","2021-02-27 13:29:06.000" +"010020C012F48000","Rising Hell","status-playable","playable","2022-10-31 13:54:02.000" +"0100E8300A67A000","Risk","status-playable;nvdec;online-broken","playable","2022-08-01 18:53:28.000" +"010076D00E4BA000","Risk of Rain 2","status-playable;online-broken","playable","2024-03-04 17:01:05.000" +"0100BD300F0EC000","Ritual","status-playable","playable","2021-03-02 13:51:19.000" +"010042500FABA000","Ritual: Crown of Horns","status-playable","playable","2021-01-26 16:01:47.000" +"","Rival Megagun","nvdec;online;status-playable","playable","2021-01-19 14:01:46.000" +"","River City Girls","nvdec;status-playable","playable","2020-06-10 23:44:09.000" +"01002E80168F4000","River City Girls 2","status-playable","playable","2022-12-07 00:46:27.000" +"0100B2100767C000","River City Melee Mach!!","status-playable;online-broken","playable","2022-09-20 20:51:57.000" +"010053000B986000","Road Redemption","status-playable;online-broken","playable","2022-08-12 11:26:20.000" +"010002F009A7A000","Road to Ballhalla","UE4;status-playable","playable","2021-06-07 02:22:36.000" +"","Road to Guangdong","slow;status-playable","playable","2020-10-12 12:15:32.000" +"010068200C5BE000","Roarr!","status-playable","playable","2022-10-19 23:57:45.000" +"0100618004096000","Robonauts","status-playable;nvdec","playable","2022-08-12 11:33:23.000" +"","Robozarro","status-playable","playable","2020-09-03 13:33:40.000" +"","Rock 'N Racing Off Road DX","status-playable","playable","2021-01-10 15:27:15.000" +"","Rock N' Racing Grand Prix","status-playable","playable","2021-01-06 20:23:57.000" +"0100A1B00DB36000","Rock of Ages 3: Make & Break","status-playable;UE4","playable","2022-10-06 12:18:29.000" +"01005EE0036EC000","Rocket League","gpu;status-ingame;online-broken;ldn-untested","ingame","2024-02-08 19:51:36.000" +"","Rocket Wars","status-playable","playable","2020-07-24 14:27:39.000" +"0100EC7009348000","Rogue Aces","gpu;services;status-ingame;nvdec","ingame","2021-11-30 02:18:30.000" +"01009FA010848000","Rogue Heroes: Ruins of Tasos","online;status-playable","playable","2021-04-01 15:41:25.000" +"","Rogue Legacy","status-playable","playable","2020-08-10 19:17:28.000" +"","Rogue Robots","status-playable","playable","2020-06-16 12:16:11.000" +"01001CC00416C000","Rogue Trooper Redux","status-playable;nvdec;online-broken","playable","2022-08-12 11:53:01.000" +"0100C7300C0EC000","RogueCube","status-playable","playable","2021-06-16 12:16:42.000" +"","Roll'd","status-playable","playable","2020-07-04 20:24:01.000" +"01004900113F8000","RollerCoaster Tycoon 3: Complete Edition","32-bit;status-playable","playable","2022-10-17 14:18:01.000" +"","RollerCoaster Tycoon Adventures","nvdec;status-playable","playable","2021-01-05 18:14:18.000" +"010076200CA16000","Rolling Gunner","status-playable","playable","2021-05-26 12:54:18.000" +"0100579011B40000","Rolling Sky 2","status-playable","playable","2022-11-03 10:21:12.000" +"01001F600829A000","Romancing SaGa 2","status-playable","playable","2022-08-12 12:02:24.000" +"","Romancing SaGa 3","audio;gpu;status-ingame","ingame","2020-06-27 20:26:18.000" +"010088100DD42000","Roof Rage","status-boots;crash;regression","boots","2023-11-12 03:47:18.000" +"","Roombo: First Blood","nvdec;status-playable","playable","2020-08-05 12:11:37.000" +"0100936011556000","Root Double -Before Crime * After Days- Xtend Edition","status-nothing;crash","nothing","2022-02-05 02:03:49.000" +"010030A00DA3A000","Root Letter: Last Answer","status-playable;vulkan-backend-bug","playable","2022-09-17 10:25:57.000" +"","Royal Roads","status-playable","playable","2020-11-17 12:54:38.000" +"010009B00D33C000","Rugby Challenge 4","slow;status-playable;online-broken;UE4","playable","2022-10-06 12:45:53.000" +"01006EC00F2CC000","Ruiner","status-playable;UE4","playable","2022-10-03 14:11:33.000" +"010074F00DE4A000","Run the Fan","status-playable","playable","2021-02-27 13:36:28.000" +"","Runbow","online;status-playable","playable","2021-01-08 22:47:44.000" +"0100D37009B8A000","Runbow Deluxe Edition","status-playable;online-broken","playable","2022-08-12 12:20:25.000" +"010081C0191D8000","Rune Factory 3 Special","status-playable","playable","2023-10-15 08:32:49.000" +"010051D00E3A4000","Rune Factory 4 Special","status-ingame;32-bit;crash;nvdec","ingame","2023-05-06 08:49:17.000" +"010014D01216E000","Rune Factory 5 (JP)","gpu;status-ingame","ingame","2021-06-01 12:00:36.000" +"0100B8B012ECA000","S.N.I.P.E.R. Hunter Scope","status-playable","playable","2021-04-19 15:58:09.000" +"","SAMURAI SHODOWN","UE4;crash;nvdec;status-menus","menus","2020-09-06 02:17:00.000" +"0100F6800F48E000","SAMURAI SHOWDOWN NEOGEO COLLECTION","nvdec;status-playable","playable","2021-06-14 17:12:56.000" +"0100829018568000","SD GUNDAM BATTLE ALLIANCE Demo","audio;status-ingame;crash;demo","ingame","2022-08-01 23:01:20.000" +"010055700CEA8000","SD GUNDAM G GENERATION CROSS RAYS","status-playable;nvdec","playable","2022-09-15 20:58:44.000" +"","SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00","status-playable;nvdec","playable","2022-09-15 20:45:57.000" +"0100A8900AF04000","SEGA AGES Alex Kidd in Miracle World","online;status-playable","playable","2021-05-05 16:35:47.000" +"01001E600AF08000","SEGA AGES Gain Ground","online;status-playable","playable","2021-05-05 16:16:27.000" +"","SEGA AGES OUTRUN","status-playable","playable","2021-01-11 13:13:59.000" +"","SEGA AGES PHANTASY STAR","status-playable","playable","2021-01-11 12:49:48.000" +"01005F600CB0E000","SEGA AGES Puyo Puyo","online;status-playable","playable","2021-05-05 16:09:28.000" +"01000D200C614000","SEGA AGES SONIC THE HEDGEHOG 2","status-playable","playable","2022-09-21 20:26:35.000" +"","SEGA AGES SPACE HARRIER","status-playable","playable","2021-01-11 12:57:40.000" +"01001E700AC60000","SEGA AGES Wonder Boy: Monster Land","online;status-playable","playable","2021-05-05 16:28:25.000" +"010051F00AC5E000","SEGA Ages: Sonic The Hedgehog","slow;status-playable","playable","2023-03-05 20:16:31.000" +"010054400D2E6000","SEGA Ages: Virtua Racing","status-playable;online-broken","playable","2023-01-29 17:08:39.000" +"0100B3C014BDA000","SEGA Genesis - Nintendo Switch Online","status-nothing;crash;regression","nothing","2022-04-11 07:27:21.000" +"","SEGA Mega Drive Classics","online;status-playable","playable","2021-01-05 11:08:00.000" +"0100D1800D902000","SENRAN KAGURA Peach Ball","status-playable","playable","2021-06-03 15:12:10.000" +"","SENRAN KAGURA Reflexions","status-playable","playable","2020-03-23 19:15:23.000" +"","SENTRY","status-playable","playable","2020-12-13 12:00:24.000" +"","SHIFT QUANTUM","UE4;crash;status-ingame","ingame","2020-11-06 21:54:08.000" +"0100B16009C10000","SINNER: Sacrifice for Redemption","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-12 20:37:33.000" +"0100A0A00D1AA000","SKYHILL","status-playable","playable","2021-03-05 15:19:11.000" +"","SKYPEACE","status-playable","playable","2020-05-29 14:14:30.000" +"01002AA00C974000","SMASHING THE BATTLE","status-playable","playable","2021-06-11 15:53:57.000" +"01004AB00AEF8000","SNK 40th Anniversary Collection","status-playable","playable","2022-08-14 13:33:15.000" +"010027F00AD6C000","SNK HEROINES Tag Team Frenzy","status-playable;nvdec;online-broken;ldn-untested","playable","2022-08-14 14:19:25.000" +"","SOLDAM Drop, Connect, Erase","status-playable","playable","2020-05-30 09:18:54.000" +"01005EA01C0FC000","SONIC X SHADOW GENERATIONS","status-ingame;crash","ingame","2025-01-07 04:20:45.000" +"","SPACE ELITE FORCE","status-playable","playable","2020-11-27 15:21:05.000" +"0100EBF00E702000","STAR OCEAN First Departure R","nvdec;status-playable","playable","2021-07-05 19:29:16.000" +"010065301A2E0000","STAR OCEAN The Second Story R","status-ingame;crash","ingame","2024-06-01 02:39:59.000" +"010040701B948000","STAR WARS Battlefront Classic Collection","gpu;status-ingame;vulkan","ingame","2024-07-12 19:24:21.000" +"0100BD100FFBE000","STAR WARS Episode I: Racer","slow;status-playable;nvdec","playable","2022-10-03 16:08:36.000" +"0100BB500EACA000","STAR WARS Jedi Knight II Jedi Outcast","gpu;status-ingame","ingame","2022-09-15 22:51:00.000" +"0100153014544000","STAR WARS: The Force Unleashed","status-playable","playable","2024-05-01 17:41:28.000" +"0100616009082000","STAY","crash;services;status-boots","boots","2021-04-23 14:24:52.000" +"0100B61009C60000","STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY","status-playable","playable","2021-01-26 17:37:28.000" +"0100CB400E9BC000","STEINS;GATE: My Darling's Embrace","status-playable;nvdec","playable","2022-11-20 16:48:34.000" +"0100BC800EDA2000","STELLATUM","gpu;status-playable","playable","2021-03-07 16:30:23.000" +"010070D00F640000","STONE","status-playable;UE4","playable","2022-09-30 11:53:32.000" +"010017301007E000","STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]","status-playable","playable","2021-03-18 11:42:19.000" +"0100FF5005B76000","STRIKERS1945 for Nintendo Switch","32-bit;status-playable","playable","2021-06-03 19:35:04.000" +"0100720008ED2000","STRIKERS1945II for Nintendo Switch","32-bit;status-playable","playable","2021-06-03 19:43:00.000" +"0100C5500E7AE000","STURMWIND EX","audio;32-bit;status-playable","playable","2022-09-16 12:01:39.000" +"0100B87017D94000","SUPER BOMBERMAN R 2","deadlock;status-boots","boots","2023-09-29 13:19:51.000" +"0100E5E00C464000","SUPER DRAGON BALL HEROES WORLD MISSION","status-playable;nvdec;online-broken","playable","2022-08-17 12:56:30.000" +"","SUPER ROBOT WARS T","online;status-playable","playable","2021-03-25 11:00:40.000" +"","SUPER ROBOT WARS V","online;status-playable","playable","2020-06-23 12:56:37.000" +"","SUPER ROBOT WARS X","online;status-playable","playable","2020-08-05 19:18:51.000" +"01005AB01119C000","SUSHI REVERSI","status-playable","playable","2021-06-11 19:26:58.000" +"01005DF00DC26000","SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION","UE4;gpu;online;status-ingame","ingame","2021-06-09 16:58:50.000" +"01001B600D1D6000","SWORD ART ONLINE: Hollow Realization Deluxe Edition","status-playable;nvdec","playable","2022-08-19 19:19:15.000" +"","SYNAPTIC DRIVE","online;status-playable","playable","2020-09-07 13:44:05.000" +"01009BF00E7D2000","SYNTHETIK: Ultimate","gpu;status-ingame;crash","ingame","2022-08-30 03:19:25.000" +"0100A51013530000","SaGa Frontier Remastered","status-playable;nvdec","playable","2022-11-03 13:54:56.000" +"010003A00D0B4000","SaGa SCARLET GRACE: AMBITIONS","status-playable","playable","2022-10-06 13:20:31.000" +"","Saboteur II: Avenging Angel","Needs Update;cpu;crash;status-nothing","nothing","2021-01-26 14:47:37.000" +"","Saboteur SiO","slow;status-ingame","ingame","2020-12-17 16:59:49.000" +"","Safety First!","status-playable","playable","2021-01-06 09:05:23.000" +"01008D100D43E000","Saints Row IV","status-playable;ldn-untested;LAN","playable","2023-12-04 18:33:37.000" +"0100DE600BEEE000","Saints Row: The Third - The Full Package","slow;status-playable;LAN","playable","2023-08-24 02:40:58.000" +"01007F000EB36000","Sakai and...","status-playable;nvdec","playable","2022-12-15 13:53:19.000" +"0100B1400E8FE000","Sakuna: Of Rice and Ruin","status-playable","playable","2023-07-24 13:47:13.000" +"0100BBF0122B4000","Sally Face","status-playable","playable","2022-06-06 18:41:24.000" +"","Salt And Sanctuary","status-playable","playable","2020-10-22 11:52:19.000" +"","Sam & Max Save the World","status-playable","playable","2020-12-12 13:11:51.000" +"","Samsara","status-playable","playable","2021-01-11 15:14:12.000" +"01006C600E46E000","Samurai Jack Battle Through Time","status-playable;nvdec;UE4","playable","2022-10-06 13:33:59.000" +"0100B6501A360000","Samurai Warrior","status-playable","playable","2023-02-27 18:42:38.000" +"","SamuraiAces for Nintendo Switch","32-bit;status-playable","playable","2020-11-24 20:26:55.000" +"","Sangoku Rensenki ~Otome no Heihou!~","gpu;nvdec;status-ingame","ingame","2020-10-17 19:13:14.000" +"0100A4700BC98000","Satsujin Tantei Jack the Ripper","status-playable","playable","2021-06-21 16:32:54.000" +"0100F0000869C000","Saturday Morning RPG","status-playable;nvdec","playable","2022-08-12 12:41:50.000" +"","Sausage Sports Club","gpu;status-ingame","ingame","2021-01-10 05:37:17.000" +"0100C8300FA90000","Save Koch","status-playable","playable","2022-09-26 17:06:56.000" +"010091000F72C000","Save Your Nuts","status-playable;nvdec;online-broken;UE4","playable","2022-09-27 23:12:02.000" +"","Save the Ninja Clan","status-playable","playable","2021-01-11 13:56:37.000" +"0100AA00128BA000","Saviors of Sapphire Wings & Stranger of Sword City Revisited","status-menus;crash","menus","2022-10-24 23:00:46.000" +"01001C3012912000","Say No! More","status-playable","playable","2021-05-06 13:43:34.000" +"010010A00A95E000","Sayonara Wild Hearts","status-playable","playable","2023-10-23 03:20:01.000" +"0100ACB004006000","Schlag den Star","slow;status-playable;nvdec","playable","2022-08-12 14:28:22.000" +"0100394011C30000","Scott Pilgrim vs The World: The Game","services-horizon;status-nothing;crash","nothing","2024-07-12 08:13:03.000" +"","Scribblenauts Mega Pack","nvdec;status-playable","playable","2020-12-17 22:56:14.000" +"","Scribblenauts Showdown","gpu;nvdec;status-ingame","ingame","2020-12-17 23:05:53.000" +"0100E4A00D066000","Sea King","UE4;nvdec;status-playable","playable","2021-06-04 15:49:22.000" +"0100AFE012BA2000","Sea of Solitude The Director's Cut","gpu;status-ingame","ingame","2024-07-12 18:29:29.000" +"01008C0016544000","Sea of Stars","status-playable","playable","2024-03-15 20:27:12.000" +"010036F0182C4000","Sea of Stars Demo","status-playable;demo","playable","2023-02-12 15:33:56.000" +"","SeaBed","status-playable","playable","2020-05-17 13:25:37.000" +"","Season Match Bundle - Part 1 and 2","status-playable","playable","2021-01-11 13:28:23.000" +"","Season Match Full Bundle - Parts 1, 2 and 3","status-playable","playable","2020-10-27 16:15:22.000" +"","Secret Files 3","nvdec;status-playable","playable","2020-10-24 15:32:39.000" +"010075D0101FA000","Seek Hearts","status-playable","playable","2022-11-22 15:06:26.000" +"","Seers Isle","status-playable","playable","2020-11-17 12:28:50.000" +"","Semispheres","status-playable","playable","2021-01-06 23:08:31.000" +"01009E500D29C000","Sentinels of Freedom","status-playable","playable","2021-06-14 16:42:19.000" +"010059700D4A0000","Sephirothic Stories","services;status-menus","menus","2021-11-25 08:52:17.000" +"010007D00D43A000","Serious Sam Collection","status-boots;vulkan-backend-bug","boots","2022-10-13 13:53:34.000" +"0100B2C00E4DA000","Served! A gourmet race","status-playable;nvdec","playable","2022-09-28 12:46:00.000" +"010018400C24E000","Seven Knights -Time Wanderer-","status-playable;vulkan-backend-bug","playable","2022-10-13 22:08:54.000" +"0100D6F016676000","Seven Pirates H","status-playable","playable","2024-06-03 14:54:12.000" +"","Severed","status-playable","playable","2020-12-15 21:48:48.000" +"0100D5500DA94000","Shadow Blade Reload","nvdec;status-playable","playable","2021-06-11 18:40:43.000" +"0100BE501382A000","Shadow Gangs","cpu;gpu;status-ingame;crash;regression","ingame","2024-04-29 00:07:26.000" +"0100C3A013840000","Shadow Man Remastered","gpu;status-ingame","ingame","2024-05-20 06:01:39.000" +"","Shadowgate","status-playable","playable","2021-04-24 07:32:57.000" +"0100371013B3E000","Shadowrun Returns","gpu;status-ingame;Needs Update","ingame","2022-10-04 21:32:31.000" +"01008310154C4000","Shadowrun: Dragonfall - Director's Cut","gpu;status-ingame;Needs Update","ingame","2022-10-04 20:52:18.000" +"0100C610154CA000","Shadowrun: Hong Kong - Extended Edition","gpu;status-ingame;Needs Update","ingame","2022-10-04 20:53:09.000" +"","Shadows 2: Perfidia","status-playable","playable","2020-08-07 12:43:46.000" +"","Shadows of Adam","status-playable","playable","2021-01-11 13:35:58.000" +"01002A800C064000","Shadowverse Champions Battle","status-playable","playable","2022-10-02 22:59:29.000" +"01003B90136DA000","Shadowverse: Champion’s Battle","status-nothing;crash","nothing","2023-03-06 00:31:50.000" +"0100820013612000","Shady Part of Me","status-playable","playable","2022-10-20 11:31:55.000" +"","Shakedown: Hawaii","status-playable","playable","2021-01-07 09:44:36.000" +"01008DA012EC0000","Shakes on a Plane","status-menus;crash","menus","2021-11-25 08:52:25.000" +"0100B4900E008000","Shalnor Legends: Sacred Lands","status-playable","playable","2021-06-11 14:57:11.000" +"","Shanky: The Vegan's Nightmare - 01000C00CC10000","status-playable","playable","2021-01-26 15:03:55.000" +"0100430013120000","Shantae","status-playable","playable","2021-05-21 04:53:26.000" +"0100EFD00A4FA000","Shantae and the Pirate's Curse","status-playable","playable","2024-04-29 17:21:57.000" +"","Shantae and the Seven Sirens","nvdec;status-playable","playable","2020-06-19 12:23:40.000" +"","Shantae: Half-Genie Hero Ultimate Edition","status-playable","playable","2020-06-04 20:14:20.000" +"0100ADA012370000","Shantae: Risky's Revenge - Director's Cut","status-playable","playable","2022-10-06 20:47:39.000" +"01003AB01062C000","Shaolin vs Wutang : Eastern Heroes","deadlock;status-nothing","nothing","2021-03-29 20:38:54.000" +"0100B250009B9600","Shape Of The World0","UE4;status-playable","playable","2021-03-05 16:42:28.000" +"01004F50085F2000","She Remembered Caterpillars","status-playable","playable","2022-08-12 17:45:14.000" +"01000320110C2000","She Sees Red","status-playable;nvdec","playable","2022-09-30 11:30:15.000" +"01009EB004CB0000","Shelter Generations","status-playable","playable","2021-06-04 16:52:39.000" +"010020F014DBE000","Sherlock Holmes: The Devil's Daughter","gpu;status-ingame","ingame","2022-07-11 00:07:26.000" +"","Shift Happens","status-playable","playable","2021-01-05 21:24:18.000" +"01000750084B2000","Shiftlings","nvdec;status-playable","playable","2021-03-04 13:49:54.000" +"010045800ED1E000","Shin Megami Tensei III NOCTURNE HD REMASTER","gpu;status-ingame;Needs Update","ingame","2022-11-03 19:57:01.000" +"01003B0012DC2000","Shin Megami Tensei III Nocturne HD Remaster","status-playable","playable","2022-11-03 22:53:27.000" +"010063B012DC6000","Shin Megami Tensei V","status-playable;UE4","playable","2024-02-21 06:30:07.000" +"010069C01AB82000","Shin Megami Tensei V: Vengeance","gpu;status-ingame;vulkan-backend-bug","ingame","2024-07-14 11:28:24.000" +"01009050133B4000","Shing! (サムライフォース:斬!)","status-playable;nvdec","playable","2022-10-22 00:48:54.000" +"01009A5009A9E000","Shining Resonance Refrain","status-playable;nvdec","playable","2022-08-12 18:03:01.000" +"01004EE0104F6000","Shinsekai Into the Depths","status-playable","playable","2022-09-28 14:07:51.000" +"0100C2F00A568000","Shio","status-playable","playable","2021-02-22 16:25:09.000" +"","Shipped","status-playable","playable","2020-11-21 14:22:32.000" +"01000E800FCB4000","Ships","status-playable","playable","2021-06-11 16:14:37.000" +"01007430122D0000","Shiren the Wanderer: The Tower of Fortune and the Dice of Fate","status-playable;nvdec","playable","2022-10-20 11:44:36.000" +"","Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~","cpu;crash;status-boots","boots","2020-09-27 19:01:25.000" +"01000244016BAE00","Shiro0","gpu;status-ingame","ingame","2024-01-13 08:54:39.000" +"","Shoot 1UP DX","status-playable","playable","2020-12-13 12:32:47.000" +"","Shovel Knight: Specter of Torment","status-playable","playable","2020-05-30 08:34:17.000" +"","Shovel Knight: Treasure Trove","status-playable","playable","2021-02-14 18:24:39.000" +"","Shred!2 - Freeride MTB","status-playable","playable","2020-05-30 14:34:09.000" +"","Shu","nvdec;status-playable","playable","2020-05-30 09:08:59.000" +"","Shut Eye","status-playable","playable","2020-07-23 18:08:35.000" +"010044500C182000","Sid Meier's Civilization VI","status-playable;ldn-untested","playable","2024-04-08 16:03:40.000" +"01007FC00B674000","Sigi - A Fart for Melusina","status-playable","playable","2021-02-22 16:46:58.000" +"0100F1400B0D6000","Silence","nvdec;status-playable","playable","2021-06-03 14:46:17.000" +"","Silent World","status-playable","playable","2020-08-28 13:45:13.000" +"010045500DFE2000","Silk","nvdec;status-playable","playable","2021-06-10 15:34:37.000" +"010016D00A964000","SilverStarChess","status-playable","playable","2021-05-06 15:25:57.000" +"0100E8C019B36000","Simona's Requiem","gpu;status-ingame","ingame","2023-02-21 18:29:19.000" +"01006FE010438000","Sin Slayers","status-playable","playable","2022-10-20 11:53:52.000" +"01002820036A8000","Sine Mora EX","gpu;status-ingame;online-broken","ingame","2022-08-12 19:36:18.000" +"","Singled Out","online;status-playable","playable","2020-08-03 13:06:18.000" +"","Sinless","nvdec;status-playable","playable","2020-08-09 20:18:55.000" +"0100E9201410E000","Sir Lovelot","status-playable","playable","2021-04-05 16:21:46.000" +"0100134011E32000","Skate City","status-playable","playable","2022-11-04 11:37:39.000" +"","Skee-Ball","status-playable","playable","2020-11-16 04:44:07.000" +"01001A900F862000","Skelattack","status-playable","playable","2021-06-09 15:26:26.000" +"01008E700F952000","Skelittle: A Giant Party!!","status-playable","playable","2021-06-09 19:08:34.000" +"","Skelly Selest","status-playable","playable","2020-05-30 15:38:18.000" +"","Skies of Fury","status-playable","playable","2020-05-30 16:40:54.000" +"010046B00DE62000","Skullgirls: 2nd Encore","status-playable","playable","2022-09-15 21:21:25.000" +"","Skulls of the Shogun: Bone-a-fide Edition","status-playable","playable","2020-08-31 18:58:12.000" +"0100D7B011654000","Skully","status-playable;nvdec;UE4","playable","2022-10-06 13:52:59.000" +"010083100B5CA000","Sky Force Anniversary","status-playable;online-broken","playable","2022-08-12 20:50:07.000" +"","Sky Force Reloaded","status-playable","playable","2021-01-04 20:06:57.000" +"010003F00CC98000","Sky Gamblers - Afterburner","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-12 21:04:55.000" +"010093D00AC38000","Sky Gamblers: Storm Raiders","gpu;audio;status-ingame;32-bit","ingame","2022-08-12 21:13:36.000" +"010068200E96E000","Sky Gamblers: Storm Raiders 2","gpu;status-ingame","ingame","2022-09-13 12:24:04.000" +"","Sky Racket","status-playable","playable","2020-09-07 12:22:24.000" +"0100DDB004F30000","Sky Ride","status-playable","playable","2021-02-22 16:53:07.000" +"","Sky Rogue","status-playable","playable","2020-05-30 08:26:28.000" +"0100C52011460000","Sky: Children of the Light","cpu;status-nothing;online-broken","nothing","2023-02-23 10:57:10.000" +"","SkyScrappers","status-playable","playable","2020-05-28 22:11:25.000" +"","SkyTime","slow;status-ingame","ingame","2020-05-30 09:24:51.000" +"010041C01014E000","Skybolt Zack","status-playable","playable","2021-04-12 18:28:00.000" +"","Skylanders Imaginators","crash;services;status-boots","boots","2020-05-30 18:49:18.000" +"01003AD00DEAE000","SlabWell","status-playable","playable","2021-02-22 17:02:51.000" +"","Slain","status-playable","playable","2020-05-29 14:26:16.000" +"0100BB100AF4C000","Slain Back from Hell","status-playable","playable","2022-08-12 23:36:19.000" +"010026300BA4A000","Slay the Spire","status-playable","playable","2023-01-20 15:09:26.000" +"0100501006494000","Slayaway Camp: Butcher's Cut","status-playable;opengl-backend-bug","playable","2022-08-12 23:44:05.000" +"01004E900EDDA000","Slayin 2","gpu;status-ingame","ingame","2024-04-19 16:15:26.000" +"01004AC0081DC000","Sleep Tight","gpu;status-ingame;UE4","ingame","2022-08-13 00:17:32.000" +"0100F4500AA4E000","Slice Dice & Rice","online;status-playable","playable","2021-02-22 17:44:23.000" +"010010D011E1C000","Slide Stars","status-menus;crash","menus","2021-11-25 08:53:43.000" +"","Slime-san","status-playable","playable","2020-05-30 16:15:12.000" +"","Slime-san Superslime Edition","status-playable","playable","2020-05-30 19:08:08.000" +"0100C9100B06A000","SmileBASIC 4","gpu;status-menus","menus","2021-07-29 17:35:59.000" +"0100207007EB2000","Smoke and Sacrifice","status-playable","playable","2022-08-14 12:38:27.000" +"01009790186FE000","Smurfs Kart","status-playable","playable","2023-10-18 00:55:00.000" +"0100F2800D46E000","Snack World The Dungeon Crawl Gold","gpu;slow;status-ingame;nvdec;audout","ingame","2022-05-01 21:12:44.000" +"0100C0F0020E8000","Snake Pass","status-playable;nvdec;UE4","playable","2022-01-03 04:31:52.000" +"010075A00BA14000","Sniper Elite 3 Ultimate Edition","status-playable;ldn-untested","playable","2024-04-18 07:47:49.000" +"010007B010FCC000","Sniper Elite 4","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2024-06-18 17:53:15.000" +"0100BB000A3AA000","Sniper Elite V2 Remastered","slow;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-08-14 13:23:13.000" +"0100704000B3A000","Snipperclips","status-playable","playable","2022-12-05 12:44:55.000" +"01008E20047DC000","Snipperclips Plus","status-playable","playable","2023-02-14 20:20:13.000" +"01008DA00CBBA000","Snooker 19","status-playable;nvdec;online-broken;UE4","playable","2022-09-11 17:43:22.000" +"010045300516E000","Snow Moto Racing Freedom","gpu;status-ingame;vulkan-backend-bug","ingame","2022-08-15 16:05:14.000" +"","SnowRunner - 0100FBD13AB6000","services;status-boots;crash","boots","2023-10-07 00:01:16.000" +"0100BE200C34A000","Snowboarding the Next Phase","nvdec;status-playable","playable","2021-02-23 12:56:58.000" +"010017B012AFC000","Soccer Club Life: Playing Manager","gpu;status-ingame","ingame","2022-10-25 11:59:22.000" +"0100B5000E05C000","Soccer Pinball","UE4;gpu;status-ingame","ingame","2021-06-15 20:56:51.000" +"","Soccer Slammers","status-playable","playable","2020-05-30 07:48:14.000" +"010095C00F9DE000","Soccer, Tactics & Glory","gpu;status-ingame","ingame","2022-09-26 17:15:58.000" +"0100590009C38000","SolDivide for Nintendo Switch","32-bit;status-playable","playable","2021-06-09 14:13:03.000" +"010008600D1AC000","Solo: Islands of the Heart","gpu;status-ingame;nvdec","ingame","2022-09-11 17:54:43.000" +"01009EE00E91E000","Some Distant Memory","status-playable","playable","2022-09-15 21:48:19.000" +"01004F401BEBE000","Song of Nunu: A League of Legends Story","status-ingame","ingame","2024-07-12 18:53:44.000" +"0100E5400BF94000","Songbird Symphony","status-playable","playable","2021-02-27 02:44:04.000" +"","Songbringer","status-playable","playable","2020-06-22 10:42:02.000" +"0000000000000000","Sonic 1 (2013)","status-ingame;crash;homebrew","ingame","2024-04-06 18:31:20.000" +"0000000000000000","Sonic 2 (2013)","status-ingame;crash;homebrew","ingame","2024-04-01 16:25:30.000" +"0000000000000000","Sonic A.I.R","status-ingame;homebrew","ingame","2024-04-01 16:25:32.000" +"0000000000000000","Sonic CD","status-ingame;crash;homebrew","ingame","2024-04-01 16:25:31.000" +"010040E0116B8000","Sonic Colors Ultimate [010040E0116B8000]","status-playable","playable","2022-11-12 21:24:26.000" +"01001270012B6000","Sonic Forces","status-playable","playable","2024-07-28 13:11:21.000" +"01004AD014BF0000","Sonic Frontiers","gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug","ingame","2024-09-05 09:18:53.000" +"01009AA000FAA000","Sonic Mania","status-playable","playable","2020-06-08 17:30:57.000" +"01009AA000FAA000","Sonic Mania Plus","status-playable","playable","2022-01-16 04:09:11.000" +"01008F701C074000","Sonic Superstars","gpu;status-ingame;nvdec","ingame","2023-10-28 17:48:07.000" +"010088801C150000","Sonic Superstars Digital Art Book with Mini Digital Soundtrack","status-playable","playable","2024-08-20 13:26:56.000" +"","Soul Axiom Rebooted","nvdec;slow;status-ingame","ingame","2020-09-04 12:41:01.000" +"","Soul Searching","status-playable","playable","2020-07-09 18:39:07.000" +"01008F2005154000","South Park: The Fractured But Whole","slow;status-playable;online-broken","playable","2024-07-08 17:47:28.000" +"","Space Blaze","status-playable","playable","2020-08-30 16:18:05.000" +"","Space Cows","UE4;crash;status-menus","menus","2020-06-15 11:33:20.000" +"010047B010260000","Space Pioneer","status-playable","playable","2022-10-20 12:24:37.000" +"010010A009830000","Space Ribbon","status-playable","playable","2022-08-15 17:17:10.000" +"0000000000000000","SpaceCadetPinball","status-ingame;homebrew","ingame","2024-04-18 19:30:04.000" +"0100D9B0041CE000","Spacecats with Lasers","status-playable","playable","2022-08-15 17:22:44.000" +"","Spaceland","status-playable","playable","2020-11-01 14:31:56.000" +"","Sparkle 2","status-playable","playable","2020-10-19 11:51:39.000" +"01000DC007E90000","Sparkle Unleashed","status-playable","playable","2021-06-03 14:52:15.000" +"","Sparkle ZERO","gpu;slow;status-ingame","ingame","2020-03-23 18:19:18.000" +"01007ED00C032000","Sparklite","status-playable","playable","2022-08-06 11:35:41.000" +"0100E6A009A26000","Spartan","UE4;nvdec;status-playable","playable","2021-03-05 15:53:19.000" +"","Speaking Simulator","status-playable","playable","2020-10-08 13:00:39.000" +"01008B000A5AE000","Spectrum","status-playable","playable","2022-08-16 11:15:59.000" +"0100F18010BA0000","Speed 3: Grand Prix","status-playable;UE4","playable","2022-10-20 12:32:31.000" +"","Speed Brawl","slow;status-playable","playable","2020-09-18 22:08:16.000" +"01000540139F6000","Speed Limit","gpu;status-ingame","ingame","2022-09-02 18:37:40.000" +"010061F013A0E000","Speed Truck Racing","status-playable","playable","2022-10-20 12:57:04.000" +"0100E74007EAC000","Spellspire","status-playable","playable","2022-08-16 11:21:21.000" +"010021F004270000","Spelunker Party!","services;status-boots","boots","2022-08-16 11:25:49.000" +"0100710013ABA000","Spelunky","status-playable","playable","2021-11-20 17:45:03.000" +"0100BD500BA94000","Sphinx and the Cursed Mummy™","gpu;status-ingame;32-bit;opengl","ingame","2024-05-20 06:00:51.000" +"","Spider Solitaire","status-playable","playable","2020-12-16 16:19:30.000" +"010076D0122A8000","Spinch","status-playable","playable","2024-07-12 19:02:10.000" +"01001E40136FE000","Spinny's journey","status-ingame;crash","ingame","2021-11-30 03:39:44.000" +"","Spiral Splatter","status-playable","playable","2020-06-04 14:03:57.000" +"","Spirit Hunter: NG","32-bit;status-playable","playable","2020-12-17 20:38:47.000" +"","Spirit Roots","nvdec;status-playable","playable","2020-07-10 13:33:32.000" +"01005E101122E000","Spirit of the North","status-playable;UE4","playable","2022-09-30 11:40:47.000" +"01009D60080B4000","SpiritSphere DX","status-playable","playable","2021-07-03 23:37:49.000" +"0100BD400DC52000","Spiritfarer","gpu;status-ingame","ingame","2022-10-06 16:31:38.000" +"010042700E3FC000","Spitlings","status-playable;online-broken","playable","2022-10-06 16:42:39.000" +"01003BC0000A0000","Splatoon 2","status-playable;ldn-works;LAN","playable","2024-07-12 19:11:15.000" +"0100C2500FC20000","Splatoon 3","status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug","playable","2024-08-04 23:49:11.000" +"0100BA0018500000","Splatoon 3: Splatfest World Premiere","gpu;status-ingame;online-broken;demo","ingame","2022-09-19 03:17:12.000" +"01009FB0172F4000","SpongeBob SquarePants The Cosmic Shake","gpu;status-ingame;UE4","ingame","2023-08-01 19:29:53.000" +"010062800D39C000","SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated","status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug","playable","2023-08-01 19:29:34.000" +"010097C01336A000","Spooky Chase","status-playable","playable","2022-11-04 12:17:44.000" +"0100C6100D75E000","Spooky Ghosts Dot Com","status-playable","playable","2021-06-15 15:16:11.000" +"0100DE9005170000","Sports Party","nvdec;status-playable","playable","2021-03-05 13:40:42.000" +"0100E04009BD4000","Spot The Difference","status-playable","playable","2022-08-16 11:49:52.000" +"010052100D1B4000","Spot the Differences: Party!","status-playable","playable","2022-08-16 11:55:26.000" +"01000E6015350000","Spy Alarm","services;status-ingame","ingame","2022-12-09 10:12:51.000" +"01005D701264A000","SpyHack","status-playable","playable","2021-04-15 10:53:51.000" +"","Spyro Reignited Trilogy","Needs More Attention;UE4;crash;gpu;nvdec;status-menus","menus","2021-01-22 13:01:56.000" +"010077B00E046000","Spyro Reignited Trilogy","status-playable;nvdec;UE4","playable","2022-09-11 18:38:33.000" +"","Squeakers","status-playable","playable","2020-12-13 12:13:05.000" +"","Squidgies Takeover","status-playable","playable","2020-07-20 22:28:08.000" +"","Squidlit","status-playable","playable","2020-08-06 12:38:32.000" +"","Star Renegades","nvdec;status-playable","playable","2020-12-11 12:19:23.000" +"","Star Story: The Horizon Escape","status-playable","playable","2020-08-11 22:31:38.000" +"01009DF015776000","Star Trek Prodigy: Supernova","status-playable;nvdec;UE4;opengl-backend-bug","playable","2022-10-14 10:18:50.000" +"0100854015868000","Star Wars - Knights Of The Old Republic","gpu;deadlock;status-boots","boots","2024-02-12 10:13:51.000" +"01008CA00FAE8000","Star Wars Jedi Knight: Jedi Academy","gpu;status-boots","boots","2021-06-16 12:35:30.000" +"0100FA10115F8000","Star Wars: Republic Commando","gpu;status-ingame;32-bit","ingame","2023-10-31 15:57:17.000" +"01006DA00DEAC000","Star Wars™ Pinball","status-playable;online-broken","playable","2022-09-11 18:53:31.000" +"01005EB00EA10000","Star-Crossed Myth - The Department of Wishes","gpu;status-ingame","ingame","2021-06-04 19:34:36.000" +"0100E6B0115FC000","Star99","status-menus;online","menus","2021-11-26 14:18:51.000" +"01002100137BA000","Stardash","status-playable","playable","2021-01-21 16:31:19.000" +"0100E65002BB8000","Stardew Valley","status-playable;online-broken;ldn-untested","playable","2024-02-14 03:11:19.000" +"01002CC003FE6000","Starlink: Battle for Atlas","services-horizon;status-nothing;crash;Needs Update","nothing","2024-05-05 17:25:11.000" +"","Starlit Adventures Golden Stars","status-playable","playable","2020-11-21 12:14:43.000" +"","Starship Avenger Operation: Take Back Earth","status-playable","playable","2021-01-12 15:52:55.000" +"","State of Anarchy: Master of Mayhem","nvdec;status-playable","playable","2021-01-12 19:00:05.000" +"","State of Mind","UE4;crash;status-boots","boots","2020-06-22 22:17:50.000" +"01008010118CC000","Steam Prison","nvdec;status-playable","playable","2021-04-01 15:34:11.000" +"0100AE100DAFA000","Steam Tactics","status-playable","playable","2022-10-06 16:53:45.000" +"01009320084A4000","SteamWorld Dig","status-playable","playable","2024-08-19 12:12:23.000" +"0100CA9002322000","SteamWorld Dig 2","status-playable","playable","2022-12-21 19:25:42.000" +"","SteamWorld Quest","nvdec;status-playable","playable","2020-11-09 13:10:04.000" +"","Steamburg","status-playable","playable","2021-01-13 08:42:01.000" +"01001C6014772000","Steel Assault","status-playable","playable","2022-12-06 14:48:30.000" +"","Steins;Gate Elite","status-playable","playable","2020-08-04 07:33:32.000" +"01002DE01043E000","Stela","UE4;status-playable","playable","2021-06-15 13:28:34.000" +"01005A700C954000","Stellar Interface","status-playable","playable","2022-10-20 13:44:33.000" +"","Steredenn","status-playable","playable","2021-01-13 09:19:42.000" +"0100AE0006474000","Stern Pinball Arcade","status-playable","playable","2022-08-16 14:24:41.000" +"","Stikbold! A Dodgeball Adventure DELUXE","status-playable","playable","2021-01-11 20:12:54.000" +"010077B014518000","Stitchy in Tooki Trouble","status-playable","playable","2021-05-06 16:25:53.000" +"010074400F6A8000","Stories Untold","status-playable;nvdec","playable","2022-12-22 01:08:46.000" +"010040D00BCF4000","Storm Boy","status-playable","playable","2022-10-20 14:15:06.000" +"0100B2300B932000","Storm in a Teacup","gpu;status-ingame","ingame","2021-11-06 02:03:19.000" +"0100ED400EEC2000","Story of Seasons: Friends of Mineral Town","status-playable","playable","2022-10-03 16:40:31.000" +"","Story of a Gladiator","status-playable","playable","2020-07-29 15:08:18.000" +"010078D00E8F4000","Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000","slow;status-playable;nvdec;UE4","playable","2022-09-16 11:58:38.000" +"01000A6013F86000","Strange Field Football","status-playable","playable","2022-11-04 12:25:57.000" +"","Stranger Things 3: The Game","status-playable","playable","2021-01-11 17:44:09.000" +"0100D7E011C64000","Strawberry Vinegar","status-playable;nvdec","playable","2022-12-05 16:25:40.000" +"010075101EF84000","Stray","status-ingame;crash","ingame","2025-01-07 04:03:00.000" +"0100024008310000","Street Fighter 30th Anniversary Collection","status-playable;online-broken;ldn-partial","playable","2022-08-20 16:50:47.000" +"010012400D202000","Street Outlaws: The List","nvdec;status-playable","playable","2021-06-11 12:15:32.000" +"","Street Power Soccer","UE4;crash;status-boots","boots","2020-11-21 12:28:57.000" +"","Streets of Rage 4","nvdec;online;status-playable","playable","2020-07-07 21:21:22.000" +"0100BDE012928000","Strife: Veteran Edition","gpu;status-ingame","ingame","2022-01-15 05:10:42.000" +"010039100DACC000","Strike Force - War on Terror","status-menus;crash;Needs Update","menus","2021-11-24 08:08:20.000" +"010072500D52E000","Strike Suit Zero: Director's Cut","crash;status-boots","boots","2021-04-23 17:15:14.000" +"","StrikeForce Kitty","nvdec;status-playable","playable","2020-07-29 16:22:15.000" +"","Struggling","status-playable","playable","2020-10-15 20:37:03.000" +"0100AF000B4AE000","Stunt Kite Party","nvdec;status-playable","playable","2021-01-25 17:16:56.000" +"0100E6400BCE8000","Sub Level Zero: Redux","status-playable","playable","2022-09-16 12:30:03.000" +"","Subarashiki Kono Sekai -Final Remix-","services;slow;status-ingame","ingame","2020-02-10 16:21:51.000" +"010001400E474000","Subdivision Infinity DX","UE4;crash;status-boots","boots","2021-03-03 14:26:46.000" +"0100EDA00D866000","Submerged","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-16 15:17:01.000" +"0100429011144000","Subnautica","status-playable;vulkan-backend-bug","playable","2022-11-04 13:07:29.000" +"010014C011146000","Subnautica Below Zero","status-playable","playable","2022-12-23 14:15:13.000" +"0100BF9012AC6000","Suguru Nature","crash;status-ingame","ingame","2021-07-29 11:36:27.000" +"01005CD00A2A2000","Suicide Guy","status-playable","playable","2021-01-26 13:13:54.000" +"0100DE000C2E4000","Suicide Guy: Sleepin' Deeply","status-ingame;Needs More Attention","ingame","2022-09-20 23:45:25.000" +"01003D50126A4000","Sumire","status-playable","playable","2022-11-12 13:40:43.000" +"01004E500DB9E000","Summer Sweetheart","status-playable;nvdec","playable","2022-09-16 12:51:46.000" +"0100A130109B2000","Summer in Mara","nvdec;status-playable","playable","2021-03-06 14:10:38.000" +"0100BFE014476000","Sunblaze","status-playable","playable","2022-11-12 13:59:23.000" +"01002D3007962000","Sundered: Eldritch Edition","gpu;status-ingame","ingame","2021-06-07 11:46:00.000" +"0100F7000464A000","Super Beat Sports","status-playable;ldn-untested","playable","2022-08-16 16:05:50.000" +"","Super Blood Hockey","status-playable","playable","2020-12-11 20:01:41.000" +"01007AD00013E000","Super Bomberman R","status-playable;nvdec;online-broken;ldn-works","playable","2022-08-16 19:19:14.000" +"0100D9B00DB5E000","Super Cane Magic ZERO","status-playable","playable","2022-09-12 15:33:46.000" +"010065F004E5E000","Super Chariot","status-playable","playable","2021-06-03 13:19:01.000" +"010023100B19A000","Super Dungeon Tactics","status-playable","playable","2022-10-06 17:40:40.000" +"010056800B534000","Super Inefficient Golf","status-playable;UE4","playable","2022-08-17 15:53:45.000" +"","Super Jumpy Ball","status-playable","playable","2020-07-04 18:40:36.000" +"0100196009998000","Super Kickers League","status-playable","playable","2021-01-26 13:36:48.000" +"01003FB00C5A8000","Super Kirby Clash","status-playable;ldn-works","playable","2024-07-30 18:21:55.000" +"010000D00F81A000","Super Korotama","status-playable","playable","2021-06-06 19:06:22.000" +"01003E300FCAE000","Super Loop Drive","status-playable;nvdec;UE4","playable","2022-09-22 10:58:05.000" +"010049900F546000","Super Mario 3D All-Stars","services-horizon;slow;status-ingame;vulkan;amd-vendor-bug","ingame","2024-05-07 02:38:16.000" +"010028600EBDA000","Super Mario 3D World + Bowser's Fury","status-playable;ldn-works","playable","2024-07-31 10:45:37.000" +"054507E0B7552000","Super Mario 64","status-ingame;homebrew","ingame","2024-03-20 16:57:27.000" +"0100277011F1A000","Super Mario Bros. 35","status-menus;online-broken","menus","2022-08-07 16:27:25.000" +"010015100B514000","Super Mario Bros. Wonder","status-playable;amd-vendor-bug","playable","2024-09-06 13:21:21.000" +"01009B90006DC000","Super Mario Maker 2","status-playable;online-broken;ldn-broken","playable","2024-08-25 11:05:19.000" +"0100000000010000","Super Mario Odyssey","status-playable;nvdec;intel-vendor-bug;mac-bug","playable","2024-08-25 01:32:34.000" +"010036B0034E4000","Super Mario Party","gpu;status-ingame;Needs Update;ldn-works","ingame","2024-06-21 05:10:16.000" +"0100BC0018138000","Super Mario RPG","gpu;audio;status-ingame;nvdec","ingame","2024-06-19 17:43:42.000" +"0000000000000000","Super Mario World","status-boots;homebrew","boots","2024-06-13 01:40:31.000" +"","Super Meat Boy","services;status-playable","playable","2020-04-02 23:10:07.000" +"01009C200D60E000","Super Meat Boy Forever","gpu;status-boots","boots","2021-04-26 14:25:39.000" +"","Super Mega Space Blaster Special Turbo","online;status-playable","playable","2020-08-06 12:13:25.000" +"010031F019294000","Super Monkey Ball Banana Rumble","status-playable","playable","2024-06-28 10:39:18.000" +"0100B2A00E1E0000","Super Monkey Ball: Banana Blitz HD","status-playable;online-broken","playable","2022-09-16 13:16:25.000" +"","Super Mutant Alien Assault","status-playable","playable","2020-06-07 23:32:45.000" +"01004D600AC14000","Super Neptunia RPG","status-playable;nvdec","playable","2022-08-17 16:38:52.000" +"","Super Nintendo Entertainment System - Nintendo Switch Online","status-playable","playable","2021-01-05 00:29:48.000" +"0100284007D6C000","Super One More Jump","status-playable","playable","2022-08-17 16:47:47.000" +"01001F90122B2000","Super Punch Patrol","status-playable","playable","2024-07-12 19:49:02.000" +"0100331005E8E000","Super Putty Squad","gpu;status-ingame;32-bit","ingame","2024-04-29 15:51:54.000" +"","Super Saurio Fly","nvdec;status-playable","playable","2020-08-06 13:12:14.000" +"","Super Skelemania","status-playable","playable","2020-06-07 22:59:50.000" +"01006A800016E000","Super Smash Bros. Ultimate","gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug","ingame","2024-09-14 23:05:21.000" +"0100D61012270000","Super Soccer Blast","gpu;status-ingame","ingame","2022-02-16 08:39:12.000" +"0100A9300A4AE000","Super Sportmatchen","status-playable","playable","2022-08-19 12:34:40.000" +"0100FB400F54E000","Super Street: Racer","status-playable;UE4","playable","2022-09-16 13:43:14.000" +"","Super Tennis Blast - 01000500DB50000","status-playable","playable","2022-08-19 16:20:48.000" +"0100C6800D770000","Super Toy Cars 2","gpu;regression;status-ingame","ingame","2021-03-02 20:15:15.000" +"010035B00B3F0000","Super Volley Blast","status-playable","playable","2022-08-19 18:14:40.000" +"0100630010252000","SuperEpic: The Entertainment War","status-playable","playable","2022-10-13 23:02:48.000" +"0100FF60051E2000","Superbeat: Xonic EX","status-ingame;crash;nvdec","ingame","2022-08-19 18:54:40.000" +"01001A500E8B4000","Superhot","status-playable","playable","2021-05-05 19:51:30.000" +"","Superliminal","status-playable","playable","2020-09-03 13:20:50.000" +"0100C01012654000","Supermarket Shriek","status-playable","playable","2022-10-13 23:19:20.000" +"0100A6E01201C000","Supraland","status-playable;nvdec;UE4;opengl-backend-bug","playable","2022-10-14 09:49:11.000" +"010029A00AEB0000","Survive! Mr. Cube","status-playable","playable","2022-10-20 14:44:47.000" +"","Sushi Striker: The Way of Sushido","nvdec;status-playable","playable","2020-06-26 20:49:11.000" +"0100D6D00EC2C000","Sweet Witches","status-playable;nvdec","playable","2022-10-20 14:56:37.000" +"010049D00C8B0000","Swimsanity!","status-menus;online","menus","2021-11-26 14:27:16.000" +"","Sword of the Guardian","status-playable","playable","2020-07-16 12:24:39.000" +"0100E4701355C000","Sword of the Necromancer","status-ingame;crash","ingame","2022-12-10 01:28:39.000" +"01004BB00421E000","Syberia 1 & 2","status-playable","playable","2021-12-24 12:06:25.000" +"010028C003FD6000","Syberia 2","gpu;status-ingame","ingame","2022-08-24 12:43:03.000" +"0100CBE004E6C000","Syberia 3","nvdec;status-playable","playable","2021-01-25 16:15:12.000" +"","Sydney Hunter and the Curse of the Mayan","status-playable","playable","2020-06-15 12:15:57.000" +"01009E700F448000","Synergia","status-playable","playable","2021-04-06 17:58:04.000" +"","TENGAI for Nintendo Switch","32-bit;status-playable","playable","2020-11-25 19:52:26.000" +"010070C00FB56000","TERROR SQUID","status-playable;online-broken","playable","2023-10-30 22:29:29.000" +"010043700EB68000","TERRORHYTHM (TRRT)","status-playable","playable","2021-02-27 13:18:14.000" +"","TETRA for Nintendo Switch","status-playable","playable","2020-06-26 20:49:55.000" +"010040600C5CE000","TETRIS 99","gpu;status-ingame;online-broken;ldn-untested","ingame","2024-05-02 16:36:41.000" +"01003b300e4aa000","THE GRISAIA TRILOGY","status-playable","playable","2021-01-31 15:53:59.000" +"0100AC800D022000","THE LAST REMNANT Remastered","status-playable;nvdec;UE4","playable","2023-02-09 17:24:44.000" +"01005E5013862000","THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]","status-nothing;crash","nothing","2021-09-30 14:41:07.000" +"01001FB00E386000","THE NINJA SAVIORS Return of the Warriors","online;status-playable","playable","2021-03-25 23:48:07.000" +"010024201834A000","THEATRHYTHM FINAL BAR LINE","status-playable","playable","2023-02-19 19:58:57.000" +"010081B01777C000","THEATRHYTHM FINAL BAR LINE","status-ingame;Incomplete","ingame","2024-08-05 14:24:55.000" +"","THOTH","status-playable","playable","2020-08-05 18:35:28.000" +"010074800741A000","TINY METAL","UE4;gpu;nvdec;status-ingame","ingame","2021-03-05 17:11:57.000" +"0100B5E011920000","TOHU","slow;status-playable","playable","2021-02-08 15:40:44.000" +"01003E500F962000","TOKYO DARK - REMEMBRANCE -","nvdec;status-playable","playable","2021-06-10 20:09:49.000" +"0100CC00102B4000","TONY HAWK'S™ PRO SKATER™ 1 + 2","gpu;status-ingame;Needs Update","ingame","2024-09-24 08:18:14.000" +"01007AF011732000","TORICKY-S","deadlock;status-menus","menus","2021-11-25 08:53:36.000" +"01005E500E528000","TRANSFORMERS: BATTLEGROUNDS","online;status-playable","playable","2021-06-17 18:08:19.000" +"0100CC80140F8000","TRIANGLE STRATEGY","gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug","ingame","2024-09-25 20:48:37.000" +"","TT Isle of Man","nvdec;status-playable","playable","2020-06-22 12:25:13.000" +"010000400F582000","TT Isle of Man 2","gpu;status-ingame;nvdec;online-broken","ingame","2022-09-30 22:13:05.000" +"","TTV2","status-playable","playable","2020-11-27 13:21:36.000" +"","TY the Tasmanian Tiger","32-bit;crash;nvdec;status-menus","menus","2020-12-17 21:15:00.000" +"","Table Top Racing World Tour Nitro Edition","status-playable","playable","2020-04-05 23:21:30.000" +"01000F20083A8000","Tactical Mind","status-playable","playable","2021-01-25 18:05:00.000" +"","Tactical Mind 2","status-playable","playable","2020-07-01 23:11:07.000" +"0100E12013C1A000","Tactics Ogre Reborn","status-playable;vulkan-backend-bug","playable","2024-04-09 06:21:35.000" +"01007C7006AEE000","Tactics V: ""Obsidian Brigade","status-playable","playable","2021-02-28 15:09:42.000" +"0100346017304000","Taiko Risshiden V DX","status-nothing;crash","nothing","2022-06-06 16:25:31.000" +"","Taiko no Tatsujin Rhythmic Adventure Pack","status-playable","playable","2020-12-03 07:28:26.000" +"01002C000B552000","Taiko no Tatsujin: Drum 'n' Fun!","status-playable;online-broken;ldn-broken","playable","2023-05-20 15:10:12.000" +"0100BCA0135A0000","Taiko no Tatsujin: Rhythm Festival","status-playable","playable","2023-11-13 13:16:34.000" +"010040A00EA26000","Taimumari: Complete Edition","status-playable","playable","2022-12-06 13:34:49.000" +"0100F0C011A68000","Tales from the Borderlands","status-playable;nvdec","playable","2022-10-25 18:44:14.000" +"01002C0008E52000","Tales of Vesperia: Definitive Edition","status-playable","playable","2024-09-28 03:20:47.000" +"0100408007078000","Tales of the Tiny Planet","status-playable","playable","2021-01-25 15:47:41.000" +"010012800EE3E000","Tamashii","status-playable","playable","2021-06-10 15:26:20.000" +"010008A0128C4000","Tamiku","gpu;status-ingame","ingame","2021-06-15 20:06:55.000" +"","Tangledeep","crash;status-boots","boots","2021-01-05 04:08:41.000" +"01007DB010D2C000","TaniNani","crash;kernel;status-nothing","nothing","2021-04-08 03:06:44.000" +"","Tank Mechanic Simulator","status-playable","playable","2020-12-11 15:10:45.000" +"01007A601318C000","Tanuki Justice","status-playable;opengl","playable","2023-02-21 18:28:10.000" +"01004DF007564000","Tanzia","status-playable","playable","2021-06-07 11:10:25.000" +"","Task Force Kampas","status-playable","playable","2020-11-30 14:44:15.000" +"0100B76011DAA000","Taxi Chaos","slow;status-playable;online-broken;UE4","playable","2022-10-25 19:13:00.000" +"","Tcheco in the Castle of Lucio","status-playable","playable","2020-06-27 13:35:43.000" +"010092B0091D0000","Team Sonic Racing","status-playable;online-broken;ldn-works","playable","2024-02-05 15:05:27.000" +"0100FE701475A000","Teenage Mutant Ninja Turtles: Shredder's Revenge","deadlock;status-boots;crash","boots","2024-09-28 09:31:39.000" +"01005CF01E784000","Teenage Mutant Ninja Turtles: Splintered Fate","status-playable","playable","2024-08-03 13:50:42.000" +"0100FDB0154E4000","Teenage Mutant Ninja Turtles: The Cowabunga Collection","status-playable","playable","2024-01-22 19:39:04.000" +"","Telling Lies","status-playable","playable","2020-10-23 21:14:51.000" +"0100C8B012DEA000","Temtem","status-menus;online-broken","menus","2022-12-17 17:36:11.000" +"","Tennis","status-playable","playable","2020-06-01 20:50:36.000" +"0100092006814000","Tennis World Tour","status-playable;online-broken","playable","2022-08-22 14:27:10.000" +"0100950012F66000","Tennis World Tour 2","status-playable;online-broken","playable","2022-10-14 10:43:16.000" +"01002970080AA000","Tennis in the Face","status-playable","playable","2022-08-22 14:10:54.000" +"0100E46006708000","Terraria","status-playable;online-broken","playable","2022-09-12 16:14:57.000" +"0100FBC007EAE000","Tesla vs Lovecraft","status-playable","playable","2023-11-21 06:19:36.000" +"01005C8005F34000","Teslagrad","status-playable","playable","2021-02-23 14:41:02.000" +"01006F701507A000","Tested on Humans: Escape Room","status-playable","playable","2022-11-12 14:42:52.000" +"","Testra's Escape","status-playable","playable","2020-06-03 18:21:14.000" +"","Tetsumo Party","status-playable","playable","2020-06-09 22:39:55.000" +"01008ED0087A4000","The Adventure Pals","status-playable","playable","2022-08-22 14:48:52.000" +"","The Adventures of 00 Dilly","status-playable","playable","2020-12-30 19:32:29.000" +"","The Adventures of Elena Temple","status-playable","playable","2020-06-03 23:15:35.000" +"010045A00E038000","The Alliance Alive HD Remastered","nvdec;status-playable","playable","2021-03-07 15:43:45.000" +"","The Almost Gone","status-playable","playable","2020-07-05 12:33:07.000" +"0100CD500DDAE000","The Bard's Tale ARPG: Remastered and Resnarkled","gpu;status-ingame;nvdec;online-working","ingame","2024-07-18 12:52:01.000" +"01001E50141BC000","The Battle Cats Unite!","deadlock;status-ingame","ingame","2021-12-14 21:38:34.000" +"010089600E66A000","The Big Journey","status-playable","playable","2022-09-16 14:03:08.000" +"010021C000B6A000","The Binding of Isaac: Afterbirth+","status-playable","playable","2021-04-26 14:11:56.000" +"","The Bluecoats: North & South","nvdec;status-playable","playable","2020-12-10 21:22:29.000" +"010062500BFC0000","The Book of Unwritten Tales 2","status-playable","playable","2021-06-09 14:42:53.000" +"","The Bridge","status-playable","playable","2020-06-03 13:53:26.000" +"","The Bug Butcher","status-playable","playable","2020-06-03 12:02:04.000" +"01001B40086E2000","The Bunker","status-playable;nvdec","playable","2022-09-16 14:24:05.000" +"","The Caligula Effect: Overdose","UE4;gpu;status-ingame","ingame","2021-01-04 11:07:50.000" +"010066800E9F8000","The Childs Sight","status-playable","playable","2021-06-11 19:04:56.000" +"","The Coma 2: Vicious Sisters","gpu;status-ingame","ingame","2020-06-20 12:51:51.000" +"","The Coma: Recut","status-playable","playable","2020-06-03 15:11:23.000" +"01004170113D4000","The Complex","status-playable;nvdec","playable","2022-09-28 14:35:41.000" +"01000F20102AC000","The Copper Canyon Dixie Dash","status-playable;UE4","playable","2022-09-29 11:42:29.000" +"01000850037C0000","The Count Lucanor","status-playable;nvdec","playable","2022-08-22 15:26:37.000" +"0100EBA01548E000","The Cruel King and the Great Hero","gpu;services;status-ingame","ingame","2022-12-02 07:02:08.000" +"","The Dark Crystal","status-playable","playable","2020-08-11 13:43:41.000" +"","The Darkside Detective","status-playable","playable","2020-06-03 22:16:18.000" +"01000A10041EA000","The Elder Scrolls V: Skyrim","gpu;status-ingame;crash","ingame","2024-07-14 03:21:31.000" +"","The End is Nigh","status-playable","playable","2020-06-01 11:26:45.000" +"","The Escapists 2","nvdec;status-playable","playable","2020-09-24 12:31:31.000" +"01001B700BA7C000","The Escapists: Complete Edition","status-playable","playable","2021-02-24 17:50:31.000" +"0100C2E0129A6000","The Executioner","nvdec;status-playable","playable","2021-01-23 00:31:28.000" +"01006050114D4000","The Experiment: Escape Room","gpu;status-ingame","ingame","2022-09-30 13:20:35.000" +"0100B5900DFB2000","The Eyes of Ara","status-playable","playable","2022-09-16 14:44:06.000" +"","The Fall","gpu;status-ingame","ingame","2020-05-31 23:31:16.000" +"","The Fall Part 2: Unbound","status-playable","playable","2021-11-06 02:18:08.000" +"0100CDC00789E000","The Final Station","status-playable;nvdec","playable","2022-08-22 15:54:39.000" +"010098800A1E4000","The First Tree","status-playable","playable","2021-02-24 15:51:05.000" +"0100C38004DCC000","The Flame in the Flood: Complete Edition","gpu;status-ingame;nvdec;UE4","ingame","2022-08-22 16:23:49.000" +"","The Forbidden Arts - 01007700D4AC000","status-playable","playable","2021-01-26 16:26:24.000" +"01006350148DA000","The Gardener and the Wild Vines","gpu;status-ingame","ingame","2024-04-29 16:32:10.000" +"0100B13007A6A000","The Gardens Between","status-playable","playable","2021-01-29 16:16:53.000" +"010036E00FB20000","The Great Ace Attorney Chronicles","status-playable","playable","2023-06-22 21:26:29.000" +"","The Great Perhaps","status-playable","playable","2020-09-02 15:57:04.000" +"","The Hong Kong Massacre","crash;status-ingame","ingame","2021-01-21 12:06:56.000" +"","The House of Da Vinci","status-playable","playable","2021-01-05 14:17:19.000" +"","The House of Da Vinci 2","status-playable","playable","2020-10-23 20:47:17.000" +"01008940086E0000","The Infectious Madness of Doctor Dekker","status-playable;nvdec","playable","2022-08-22 16:45:01.000" +"","The Inner World","nvdec;status-playable","playable","2020-06-03 21:22:29.000" +"","The Inner World - The Last Wind Monk","nvdec;status-playable","playable","2020-11-16 13:09:40.000" +"0100AE5003EE6000","The Jackbox Party Pack","status-playable;online-working","playable","2023-05-28 09:28:40.000" +"010015D003EE4000","The Jackbox Party Pack 2","status-playable;online-working","playable","2022-08-22 18:23:40.000" +"0100CC80013D6000","The Jackbox Party Pack 3","slow;status-playable;online-working","playable","2022-08-22 18:41:06.000" +"0100E1F003EE8000","The Jackbox Party Pack 4","status-playable;online-working","playable","2022-08-22 18:56:34.000" +"010052C00B184000","The Journey Down: Chapter One","nvdec;status-playable","playable","2021-02-24 13:32:41.000" +"01006BC00B188000","The Journey Down: Chapter Three","nvdec;status-playable","playable","2021-02-24 13:45:27.000" +"","The Journey Down: Chapter Two","nvdec;status-playable","playable","2021-02-24 13:32:13.000" +"010020500BD98000","The King's Bird","status-playable","playable","2022-08-22 19:07:46.000" +"010031B00DB34000","The Knight & the Dragon","gpu;status-ingame","ingame","2023-08-14 10:31:43.000" +"0100A4400BE74000","The LEGO Movie 2 - Videogame","status-playable","playable","2023-03-01 11:23:37.000" +"01007FC00206E000","The LEGO NINJAGO Movie Video Game","status-nothing;crash","nothing","2022-08-22 19:12:53.000" +"","The Language of Love","Needs Update;crash;status-nothing","nothing","2020-12-03 17:54:00.000" +"010079C017F5E000","The Lara Croft Collection","services-horizon;deadlock;status-nothing","nothing","2024-07-12 22:45:51.000" +"0100449011506000","The Last Campfire","status-playable","playable","2022-10-20 16:44:19.000" +"0100AAD011592000","The Last Dead End","gpu;status-ingame;UE4","ingame","2022-10-20 16:59:44.000" +"","The Legend of Dark Witch","status-playable","playable","2020-07-12 15:18:33.000" +"01001920156C2000","The Legend of Heroes: Trails from Zero","gpu;status-ingame;mac-bug","ingame","2024-09-14 21:41:41.000" +"","The Legend of Heroes: Trails of Cold Steel III","status-playable","playable","2020-12-16 10:59:18.000" +"01009B101044C000","The Legend of Heroes: Trails of Cold Steel III Demo","demo;nvdec;status-playable","playable","2021-04-23 01:07:32.000" +"0100D3C010DE8000","The Legend of Heroes: Trails of Cold Steel IV","nvdec;status-playable","playable","2021-04-23 14:01:05.000" +"01008CF01BAAC000","The Legend of Zelda Echoes of Wisdom","status-playable;nvdec;ASTC;intel-vendor-bug","playable","2024-10-01 14:11:01.000" +"01007EF00011E000","The Legend of Zelda: Breath of the Wild","gpu;status-ingame;amd-vendor-bug;mac-bug","ingame","2024-09-23 19:35:46.000" +"0100509005AF2000","The Legend of Zelda: Breath of the Wild Demo","status-ingame;demo","ingame","2022-12-24 05:02:58.000" +"01006BB00C6F0000","The Legend of Zelda: Link's Awakening","gpu;status-ingame;nvdec;mac-bug","ingame","2023-08-09 17:37:40.000" +"01002DA013484000","The Legend of Zelda: Skyward Sword HD","gpu;status-ingame","ingame","2024-06-14 16:48:29.000" +"0100F2C0115B6000","The Legend of Zelda: Tears of the Kingdom","gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug","ingame","2024-08-24 12:38:30.000" +"010064B00B95C000","The Liar Princess and the Blind Prince","audio;slow;status-playable","playable","2020-06-08 21:23:28.000" +"0100735004898000","The Lion's Song","status-playable","playable","2021-06-09 15:07:16.000" +"0100A5000D590000","The Little Acre","nvdec;status-playable","playable","2021-03-02 20:22:27.000" +"01007A700A87C000","The Long Dark","status-playable","playable","2021-02-21 14:19:52.000" +"010052B003A38000","The Long Reach","nvdec;status-playable","playable","2021-02-24 14:09:48.000" +"","The Long Return","slow;status-playable","playable","2020-12-10 21:05:10.000" +"0100CE1004E72000","The Longest Five Minutes","gpu;status-boots","boots","2023-02-19 18:33:11.000" +"0100F3D0122C2000","The Longing","gpu;status-ingame","ingame","2022-11-12 15:00:58.000" +"010085A00C5E8000","The Lord of the Rings: Adventure Card Game","status-menus;online-broken","menus","2022-09-16 15:19:32.000" +"01008A000A404000","The Lost Child","nvdec;status-playable","playable","2021-02-23 15:44:20.000" +"0100BAB00A116000","The Low Road","status-playable","playable","2021-02-26 13:23:22.000" +"0100F1B00B456000","The MISSING: J.J. Macfield and the Island of Memories","status-playable","playable","2022-08-22 19:36:18.000" +"","The Mahjong","Needs Update;crash;services;status-nothing","nothing","2021-04-01 22:06:22.000" +"","The Messenger","status-playable","playable","2020-03-22 13:51:37.000" +"0100DEC00B2BC000","The Midnight Sanctuary","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-03 17:17:32.000" +"010033300AC1A000","The Mooseman","status-playable","playable","2021-02-24 12:58:57.000" +"0100496004194000","The Mummy Demastered","status-playable","playable","2021-02-23 13:11:27.000" +"","The Mystery of the Hudson Case","status-playable","playable","2020-06-01 11:03:36.000" +"01000CF0084BC000","The Next Penelope","status-playable","playable","2021-01-29 16:26:11.000" +"0100B080184BC000","The Oregon Trail","gpu;status-ingame","ingame","2022-11-25 16:11:49.000" +"0100B0101265C000","The Otterman Empire","UE4;gpu;status-ingame","ingame","2021-06-17 12:27:15.000" +"01000BC01801A000","The Outbound Ghost","status-nothing","nothing","2024-03-02 17:10:58.000" +"0100626011656000","The Outer Worlds","gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-10-03 17:55:32.000" +"","The Park","UE4;crash;gpu;status-ingame","ingame","2020-12-18 12:50:07.000" +"010050101127C000","The Persistence","nvdec;status-playable","playable","2021-06-06 19:15:40.000" +"0100CD300880E000","The Pinball Arcade","status-playable;online-broken","playable","2022-08-22 19:49:46.000" +"01006BD018B54000","The Plucky Squire","status-ingame;crash","ingame","2024-09-27 22:32:33.000" +"0100E6A00B960000","The Princess Guide","status-playable","playable","2021-02-24 14:23:34.000" +"010058A00BF1C000","The Raven Remastered","status-playable;nvdec","playable","2022-08-22 20:02:47.000" +"","The Red Strings Club","status-playable","playable","2020-06-01 10:51:18.000" +"010079400BEE0000","The Room","status-playable","playable","2021-04-14 18:57:05.000" +"010033100EE12000","The Ryuo's Work is Never Done!","status-playable","playable","2022-03-29 00:35:37.000" +"01002BA00C7CE000","The Savior's Gang","gpu;status-ingame;nvdec;UE4","ingame","2022-09-21 12:37:48.000" +"0100F3200E7CA000","The Settlers: New Allies","deadlock;status-nothing","nothing","2023-10-25 00:18:05.000" +"","The Sexy Brutale","status-playable","playable","2021-01-06 17:48:28.000" +"","The Shapeshifting Detective","nvdec;status-playable","playable","2021-01-10 13:10:49.000" +"010028D00BA1A000","The Sinking City","status-playable;nvdec;UE4","playable","2022-09-12 16:41:55.000" +"010041C00A68C000","The Spectrum Retreat","status-playable","playable","2022-10-03 18:52:40.000" +"010029300E5C4000","The Stanley Parable: Ultra Deluxe","gpu;status-ingame","ingame","2024-07-12 23:18:26.000" +"010007F00AF56000","The Station","status-playable","playable","2022-09-28 18:15:27.000" +"0100AA400A238000","The Stretchers","status-playable;nvdec;UE4","playable","2022-09-16 15:40:58.000" +"","The Survivalists","status-playable","playable","2020-10-27 15:51:13.000" +"010040D00B7CE000","The Swindle","status-playable;nvdec","playable","2022-08-22 20:53:52.000" +"","The Swords of Ditto","slow;status-ingame","ingame","2020-12-06 00:13:12.000" +"01009B300D76A000","The Tiny Bang Story","status-playable","playable","2021-03-05 15:39:05.000" +"0100C3300D8C4000","The Touryst","status-ingame;crash","ingame","2023-08-22 01:32:38.000" +"010047300EBA6000","The Tower of Beatrice","status-playable","playable","2022-09-12 16:51:42.000" +"010058000A576000","The Town of Light","gpu;status-playable","playable","2022-09-21 12:51:34.000" +"0100B0E0086F6000","The Trail: Frontier Challenge","slow;status-playable","playable","2022-08-23 15:10:51.000" +"0100EA100F516000","The Turing Test","status-playable;nvdec","playable","2022-09-21 13:24:07.000" +"010064E00ECBC000","The Unicorn Princess","status-playable","playable","2022-09-16 16:20:56.000" +"0100BCF00E970000","The Vanishing of Ethan Carter","UE4;status-playable","playable","2021-06-09 17:14:47.000" +"","The VideoKid","nvdec;status-playable","playable","2021-01-06 09:28:24.000" +"","The Voice","services;status-menus","menus","2020-07-28 20:48:49.000" +"010029200B6AA000","The Walking Dead","status-playable","playable","2021-06-04 13:10:56.000" +"010056E00B4F4000","The Walking Dead: A New Frontier","status-playable","playable","2022-09-21 13:40:48.000" +"","The Walking Dead: Season Two","status-playable","playable","2020-08-09 12:57:06.000" +"010060F00AA70000","The Walking Dead: The Final Season","status-playable;online-broken","playable","2022-08-23 17:22:32.000" +"","The Wanderer: Frankenstein's Creature","status-playable","playable","2020-07-11 12:49:51.000" +"01008B200FC6C000","The Wardrobe: Even Better Edition","status-playable","playable","2022-09-16 19:14:55.000" +"01003D100E9C6000","The Witcher 3: Wild Hunt","status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug","playable","2024-02-22 12:21:51.000" +"0100B1300FF08000","The Wonderful 101: Remastered","slow;status-playable;nvdec","playable","2022-09-30 13:49:28.000" +"0100C1500B82E000","The World Ends With You -Final Remix-","status-playable;ldn-untested","playable","2022-07-09 01:11:21.000" +"0100E6200D56E000","The World Next Door","status-playable","playable","2022-09-21 14:15:23.000" +"010030700CBBC000","The friends of Ringo Ishikawa","status-playable","playable","2022-08-22 16:33:17.000" +"01005E9016BDE000","The movie The Quintessential Bride -Five Memories Spent with You-","status-playable","playable","2023-12-14 14:43:43.000" +"","Thea: The Awakening","status-playable","playable","2021-01-18 15:08:47.000" +"01001C2010D08000","They Bleed Pixels","gpu;status-ingame","ingame","2024-08-09 05:52:18.000" +"","They Came From the Sky","status-playable","playable","2020-06-12 16:38:19.000" +"0100CE400E34E000","Thief Simulator","status-playable","playable","2023-04-22 04:39:11.000" +"0100CE700F62A000","Thief of Thieves","status-nothing;crash;loader-allocator","nothing","2021-11-03 07:16:30.000" +"01009BD003B36000","Thimbleweed Park","status-playable","playable","2022-08-24 11:15:31.000" +"0100F2300A5DA000","Think of the Children","deadlock;status-menus","menus","2021-11-23 09:04:45.000" +"0100066004D68000","This Is the Police","status-playable","playable","2022-08-24 11:37:05.000" +"01004C100A04C000","This Is the Police 2","status-playable","playable","2022-08-24 11:49:17.000" +"","This Strange Realm of Mine","status-playable","playable","2020-08-28 12:07:24.000" +"0100A8700BC2A000","This War of Mine: Complete Edition","gpu;status-ingame;32-bit;nvdec","ingame","2022-08-24 12:00:44.000" +"0100E910103B4000","Thronebreaker: The Witcher Tales","nvdec;status-playable","playable","2021-06-03 16:40:15.000" +"01006F6002840000","Thumper","gpu;status-ingame","ingame","2024-08-12 02:41:07.000" +"01000AC011588000","Thy Sword","status-ingame;crash","ingame","2022-09-30 16:43:14.000" +"","Tick Tock: A Tale for Two","status-menus","menus","2020-07-14 14:49:38.000" +"0100B6D00C2DE000","Tied Together","nvdec;status-playable","playable","2021-04-10 14:03:46.000" +"","Timber Tennis Versus","online;status-playable","playable","2020-10-03 17:07:15.000" +"01004C500B698000","Time Carnage","status-playable","playable","2021-06-16 17:57:28.000" +"0100F770045CA000","Time Recoil","status-playable","playable","2022-08-24 12:44:03.000" +"0100DD300CF3A000","Timespinner","gpu;status-ingame","ingame","2022-08-09 09:39:11.000" +"0100393013A10000","Timothy and the Mysterious Forest","gpu;slow;status-ingame","ingame","2021-06-02 00:42:11.000" +"","Tin & Kuna","status-playable","playable","2020-11-17 12:16:12.000" +"","Tiny Gladiators","status-playable","playable","2020-12-14 00:09:43.000" +"010061A00AE64000","Tiny Hands Adventure","status-playable","playable","2022-08-24 16:07:48.000" +"01005D0011A40000","Tiny Racer","status-playable","playable","2022-10-07 11:13:03.000" +"010002401AE94000","Tiny Thor","gpu;status-ingame","ingame","2024-07-26 08:37:35.000" +"0100A73016576000","Tinykin","gpu;status-ingame","ingame","2023-06-18 12:12:24.000" +"0100FE801185E000","Titan Glory","status-boots","boots","2022-10-07 11:36:40.000" +"0100605008268000","Titan Quest","status-playable;nvdec;online-broken","playable","2022-08-19 21:54:15.000" +"","Titans Pinball","slow;status-playable","playable","2020-06-09 16:53:52.000" +"010019500DB1E000","Tlicolity Eyes - twinkle showtime -","gpu;status-boots","boots","2021-05-29 19:43:44.000" +"","To the Moon","status-playable","playable","2021-03-20 15:33:38.000" +"","Toast Time: Smash Up!","crash;services;status-menus","menus","2020-04-03 12:26:59.000" +"","Toby: The Secret Mine","nvdec;status-playable","playable","2021-01-06 09:22:33.000" +"","ToeJam & Earl: Back in the Groove","status-playable","playable","2021-01-06 22:56:58.000" +"","Toki","nvdec;status-playable","playable","2021-01-06 19:59:23.000" +"0100A9400C9C2000","Tokyo Mirage Sessions #FE Encore","32-bit;status-playable;nvdec","playable","2022-07-07 09:41:07.000" +"0100E2E00CB14000","Tokyo School Life","status-playable","playable","2022-09-16 20:25:54.000" +"010024601BB16000","Tomb Raider I-III Remastered","gpu;status-ingame;opengl","ingame","2024-09-27 12:32:04.000" +"0100D7F01E49C000","Tomba! Special Edition","services-horizon;status-nothing","nothing","2024-09-15 21:59:54.000" +"0100D400100F8000","Tonight we Riot","status-playable","playable","2021-02-26 15:55:09.000" +"","Tools Up!","crash;status-ingame","ingame","2020-07-21 12:58:17.000" +"01009EA00E2B8000","Toon War","status-playable","playable","2021-06-11 16:41:53.000" +"","Torchlight 2","status-playable","playable","2020-07-27 14:18:37.000" +"010075400DDB8000","Torchlight III","status-playable;nvdec;online-broken;UE4","playable","2022-10-14 22:20:17.000" +"","Torn Tales - Rebound Edition","status-playable","playable","2020-11-01 14:11:59.000" +"0100A64010D48000","Total Arcade Racing","status-playable","playable","2022-11-12 15:12:48.000" +"0100512010728000","Totally Reliable Delivery Service","status-playable;online-broken","playable","2024-09-27 19:32:22.000" +"01004E900B082000","Touhou Genso Wanderer RELOADED","gpu;status-ingame;nvdec","ingame","2022-08-25 11:57:36.000" +"","Touhou Kobuto V: Burst Battle","status-playable","playable","2021-01-11 15:28:58.000" +"","Touhou Spell Bubble","status-playable","playable","2020-10-18 11:43:43.000" +"","Tower of Babel","status-playable","playable","2021-01-06 17:05:15.000" +"","Tower of Time","gpu;nvdec;status-ingame","ingame","2020-07-03 11:11:12.000" +"","TowerFall","status-playable","playable","2020-05-16 18:58:07.000" +"","Towertale","status-playable","playable","2020-10-15 13:56:58.000" +"010049E00BA34000","Townsmen - A Kingdom Rebuilt","status-playable;nvdec","playable","2022-10-14 22:48:59.000" +"01009FF00A160000","Toy Stunt Bike: Tiptop's Trials","UE4;status-playable","playable","2021-04-10 13:56:34.000" +"0100192010F5A000","Tracks - Toybox Edition","UE4;crash;status-nothing","nothing","2021-02-08 15:19:18.000" +"0100BCA00843A000","Trailblazers","status-playable","playable","2021-03-02 20:40:49.000" +"010009F004E66000","Transcripted","status-playable","playable","2022-08-25 12:13:11.000" +"","Transistor","status-playable","playable","2020-10-22 11:28:02.000" +"0100A8D010BFA000","Travel Mosaics 2: Roman Holiday","status-playable","playable","2021-05-26 12:33:16.000" +"0100102010BFC000","Travel Mosaics 3: Tokyo Animated","status-playable","playable","2021-05-26 12:06:27.000" +"010096D010BFE000","Travel Mosaics 4: Adventures in Rio","status-playable","playable","2021-05-26 11:54:58.000" +"01004C4010C00000","Travel Mosaics 5: Waltzing Vienna","status-playable","playable","2021-05-26 11:49:35.000" +"0100D520119D6000","Travel Mosaics 6: Christmas Around the World","status-playable","playable","2021-05-26 00:52:47.000" +"","Travel Mosaics 7: Fantastic Berlin -","status-playable","playable","2021-05-22 18:37:34.000" +"01007DB00A226000","Travel Mosaics: A Paris Tour","status-playable","playable","2021-05-26 12:42:26.000" +"010011600C946000","Travis Strikes Again: No More Heroes","status-playable;nvdec;UE4","playable","2022-08-25 12:36:38.000" +"","Treadnauts","status-playable","playable","2021-01-10 14:57:41.000" +"01003E800A102000","Trials Rising","status-playable","playable","2024-02-11 01:36:39.000" +"0100D7800E9E0000","Trials of Mana","status-playable;UE4","playable","2022-09-30 21:50:37.000" +"0100E1D00FBDE000","Trials of Mana Demo","status-playable;nvdec;UE4;demo;vulkan-backend-bug","playable","2022-09-26 18:00:02.000" +"0100D9000A930000","Trine","ldn-untested;nvdec;status-playable","playable","2021-06-03 11:28:15.000" +"010064E00A932000","Trine 2","nvdec;status-playable","playable","2021-06-03 11:45:20.000" +"0100DEC00A934000","Trine 3: The Artifacts of Power","ldn-untested;online;status-playable","playable","2021-06-03 12:01:24.000" +"010055E00CA68000","Trine 4: The Nightmare Prince","gpu;status-nothing","nothing","2025-01-07 05:47:46.000" +"01002D7010A54000","Trinity Trigger","status-ingame;crash","ingame","2023-03-03 03:09:09.000" +"0100868013FFC000","Trivial Pursuit Live! 2","status-boots","boots","2022-12-19 00:04:33.000" +"0100F78002040000","Troll and I","gpu;nvdec;status-ingame","ingame","2021-06-04 16:58:50.000" +"","Trollhunters: Defenders of Arcadia","gpu;nvdec;status-ingame","ingame","2020-11-30 13:27:09.000" +"0100FBE0113CC000","Tropico 6","status-playable;nvdec;UE4","playable","2022-10-14 23:21:03.000" +"0100D06018DCA000","Trouble Witches Final! Episode 01: Daughters of Amalgam","status-playable","playable","2024-04-08 15:08:11.000" +"","Troubleshooter","UE4;crash;status-nothing","nothing","2020-10-04 13:46:50.000" +"","Trover Saves the Universe","UE4;crash;status-nothing","nothing","2020-10-03 10:25:27.000" +"0100E6300D448000","Truberbrook","status-playable","playable","2021-06-04 17:08:00.000" +"0100F2100AA5C000","Truck & Logistics Simulator","status-playable","playable","2021-06-11 13:29:08.000" +"0100CB50107BA000","Truck Driver","status-playable;online-broken","playable","2022-10-20 17:42:33.000" +"","True Fear: Forsaken Souls - Part 1","nvdec;status-playable","playable","2020-12-15 21:39:52.000" +"","Tumblestone","status-playable","playable","2021-01-07 17:49:20.000" +"010085500D5F6000","Turok","gpu;status-ingame","ingame","2021-06-04 13:16:24.000" +"0100CDC00D8D6000","Turok 2: Seeds of Evil","gpu;status-ingame;vulkan","ingame","2022-09-12 17:50:05.000" +"","Turrican Flashback - 01004B0130C8000","status-playable;audout","playable","2021-08-30 10:07:56.000" +"","TurtlePop: Journey to Freedom","status-playable","playable","2020-06-12 17:45:39.000" +"0100047009742000","Twin Robots: Ultimate Edition","status-playable;nvdec","playable","2022-08-25 14:24:03.000" +"010031200E044000","Two Point Hospital","status-ingame;crash;nvdec","ingame","2022-09-22 11:22:23.000" +"010073A00C4B2000","Tyd wag vir Niemand","status-playable","playable","2021-03-02 13:39:53.000" +"","Type:Rider","status-playable","playable","2021-01-06 13:12:55.000" +"","UBERMOSH:SANTICIDE","status-playable","playable","2020-11-27 15:05:01.000" +"01005AA00372A000","UNO","status-playable;nvdec;ldn-untested","playable","2022-07-28 14:49:47.000" +"","Ubongo - Deluxe Edition","status-playable","playable","2021-02-04 21:15:01.000" +"010079000B56C000","UglyDolls: An Imperfect Adventure","status-playable;nvdec;UE4","playable","2022-08-25 14:42:16.000" +"010048901295C000","Ultimate Fishing Simulator","status-playable","playable","2021-06-16 18:38:23.000" +"","Ultimate Racing 2D","status-playable","playable","2020-08-05 17:27:09.000" +"010045200A1C2000","Ultimate Runner","status-playable","playable","2022-08-29 12:52:40.000" +"01006B601117E000","Ultimate Ski Jumping 2020","online;status-playable","playable","2021-03-02 20:54:11.000" +"01002D4012222000","Ultra Hat Dimension","services;audio;status-menus","menus","2021-11-18 09:05:20.000" +"","Ultra Hyperball","status-playable","playable","2021-01-06 10:09:55.000" +"01007330027EE000","Ultra Street Fighter II: The Final Challengers","status-playable;ldn-untested","playable","2021-11-25 07:54:58.000" +"01006A300BA2C000","Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~","status-playable;audout","playable","2023-05-04 17:25:23.000" +"","UnExplored - Unlocked Edition","status-playable","playable","2021-01-06 10:02:16.000" +"0100592005164000","Unbox: Newbie's Adventure","status-playable;UE4","playable","2022-08-29 13:12:56.000" +"01002D900C5E4000","Uncanny Valley","nvdec;status-playable","playable","2021-06-04 13:28:45.000" +"010076F011F54000","Undead and Beyond","status-playable;nvdec","playable","2022-10-04 09:11:18.000" +"01008F3013E4E000","Under Leaves","status-playable","playable","2021-05-22 18:13:58.000" +"010080B00AD66000","Undertale","status-playable","playable","2022-08-31 17:31:46.000" +"01008F80049C6000","Unepic","status-playable","playable","2024-01-15 17:03:00.000" +"","Unhatched","status-playable","playable","2020-12-11 12:11:09.000" +"010069401ADB8000","Unicorn Overlord","status-playable","playable","2024-09-27 14:04:32.000" +"","Unit 4","status-playable","playable","2020-12-16 18:54:13.000" +"","Unknown Fate","slow;status-ingame","ingame","2020-10-15 12:27:42.000" +"","Unlock the King","status-playable","playable","2020-09-01 13:58:27.000" +"0100A3E011CB0000","Unlock the King 2","status-playable","playable","2021-06-15 20:43:55.000" +"0100E5D00CC0C000","Unravel TWO","status-playable;nvdec","playable","2024-05-23 15:45:05.000" +"","Unruly Heroes","status-playable","playable","2021-01-07 18:09:31.000" +"0100B410138C0000","Unspottable","status-playable","playable","2022-10-25 19:28:49.000" +"","Untitled Goose Game","status-playable","playable","2020-09-26 13:18:06.000" +"0100E49013190000","Unto The End","gpu;status-ingame","ingame","2022-10-21 11:13:29.000" +"","Urban Flow","services;status-playable","playable","2020-07-05 12:51:47.000" +"010054F014016000","Urban Street Fighting","status-playable","playable","2021-02-20 19:16:36.000" +"01001B10068EC000","Urban Trial Playground","UE4;nvdec;online;status-playable","playable","2021-03-25 20:56:51.000" +"0100A2500EB92000","Urban Trial Tricky","status-playable;nvdec;UE4","playable","2022-12-06 13:07:56.000" +"01007C0003AEC000","Use Your Words","status-menus;nvdec;online-broken","menus","2022-08-29 17:22:10.000" +"0100D4300EBF8000","Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE","status-nothing;crash;Needs More Attention;Needs Update","nothing","2022-02-09 08:57:44.000" +"010024200E00A000","Uta no☆Prince-sama♪ Repeat Love","status-playable;nvdec","playable","2022-12-09 09:21:51.000" +"","Utopia 9 - A Volatile Vacation","nvdec;status-playable","playable","2020-12-16 17:06:42.000" +"010064400B138000","V-Rally 4","gpu;nvdec;status-ingame","ingame","2021-06-07 19:37:31.000" +"0100A6700D66E000","VA-11 HALL-A","status-playable","playable","2021-02-26 15:05:34.000" +"010045C0109F2000","VARIABLE BARRICADE NS","status-playable;nvdec","playable","2022-02-26 15:50:13.000" +"0100FE200AF48000","VASARA Collection","nvdec;status-playable","playable","2021-02-28 15:26:10.000" +"0100C7C00AE6C000","VSR: Void Space Racing","status-playable","playable","2021-01-27 14:08:59.000" +"","Vaccine","nvdec;status-playable","playable","2021-01-06 01:02:07.000" +"010089700F30C000","Valfaris","status-playable","playable","2022-09-16 21:37:24.000" +"0100CAF00B744000","Valkyria Chronicles","status-ingame;32-bit;crash;nvdec","ingame","2022-11-23 20:03:32.000" +"01005C600AC68000","Valkyria Chronicles 4","audout;nvdec;status-playable","playable","2021-06-03 18:12:25.000" +"0100FBD00B91E000","Valkyria Chronicles 4 Demo","slow;status-ingame;demo","ingame","2022-08-29 20:39:07.000" +"0100E0E00B108000","Valley","status-playable;nvdec","playable","2022-09-28 19:27:58.000" +"010089A0197E4000","Vampire Survivors","status-ingame","ingame","2024-06-17 09:57:38.000" +"01000BD00CE64000","Vampyr","status-playable;nvdec;UE4","playable","2022-09-16 22:15:51.000" +"01007C500D650000","Vandals","status-playable","playable","2021-01-27 21:45:46.000" +"010030F00CA1E000","Vaporum","nvdec;status-playable","playable","2021-05-28 14:25:33.000" +"","Vasilis","status-playable","playable","2020-09-01 15:05:35.000" +"01009CD003A0A000","Vegas Party","status-playable","playable","2021-04-14 19:21:41.000" +"010098400E39E000","Vektor Wars","status-playable;online-broken;vulkan-backend-bug","playable","2022-10-04 09:23:46.000" +"01003A8018E60000","Vengeful Guardian: Moonrider","deadlock;status-boots","boots","2024-03-17 23:35:37.000" +"010095B00DBC8000","Venture Kid","crash;gpu;status-ingame","ingame","2021-04-18 16:33:17.000" +"","Vera Blanc: Full Moon","audio;status-playable","playable","2020-12-17 12:09:30.000" +"0100379013A62000","Very Very Valet","status-playable;nvdec","playable","2022-11-12 15:25:51.000" +"01006C8014DDA000","Very Very Valet Demo - 01006C8014DDA000","status-boots;crash;Needs Update;demo","boots","2022-11-12 15:26:13.000" +"010057B00712C000","Vesta","status-playable;nvdec","playable","2022-08-29 21:03:39.000" +"0100E81007A06000","Victor Vran Overkill Edition","gpu;deadlock;status-ingame;nvdec;opengl","ingame","2022-08-30 11:46:56.000" +"01005880063AA000","Violett","nvdec;status-playable","playable","2021-01-28 13:09:36.000" +"010037900CB1C000","Viviette","status-playable","playable","2021-06-11 15:33:40.000" +"0100D010113A8000","Void Bastards","status-playable","playable","2022-10-15 00:04:19.000" +"","Volgarr the Viking","status-playable","playable","2020-12-18 15:25:50.000" +"0100A7900E79C000","Volta-X","status-playable;online-broken","playable","2022-10-07 12:20:51.000" +"01004D8007368000","Vostok, Inc.","status-playable","playable","2021-01-27 17:43:59.000" +"0100B1E0100A4000","Voxel Galaxy","status-playable","playable","2022-09-28 22:45:02.000" +"0100AFA011068000","Voxel Pirates","status-playable","playable","2022-09-28 22:55:02.000" +"0100BFB00D1F4000","Voxel Sword","status-playable","playable","2022-08-30 14:57:27.000" +"01004E90028A2000","Vroom in the Night Sky","status-playable;Needs Update;vulkan-backend-bug","playable","2023-02-20 02:32:29.000" +"","VtM Coteries of New York","status-playable","playable","2020-10-04 14:55:22.000" +"","WARBORN","status-playable","playable","2020-06-25 12:36:47.000" +"0100E8500AD58000","WARRIORS OROCHI 4 ULTIMATE","status-playable;nvdec;online-broken","playable","2024-08-07 01:50:37.000" +"0100CFC00A1D8000","WILD GUNS Reloaded","status-playable","playable","2021-01-28 12:29:05.000" +"","WINDJAMMERS","online;status-playable","playable","2020-10-13 11:24:25.000" +"010087800DCEA000","WRC 8 FIA World Rally Championship","status-playable;nvdec","playable","2022-09-16 23:03:36.000" +"01001A0011798000","WRC 9 The Official Game","gpu;slow;status-ingame;nvdec","ingame","2022-10-25 19:47:39.000" +"010081700EDF4000","WWE 2K Battlegrounds","status-playable;nvdec;online-broken;UE4","playable","2022-10-07 12:44:40.000" +"010009800203E000","WWE 2K18","status-playable;nvdec","playable","2023-10-21 17:22:01.000" +"0100B130119D0000","Waifu Uncovered","status-ingame;crash","ingame","2023-02-27 01:17:46.000" +"","Wanba Warriors","status-playable","playable","2020-10-04 17:56:22.000" +"","Wanderjahr TryAgainOrWalkAway","status-playable","playable","2020-12-16 09:46:04.000" +"0100B27010436000","Wanderlust Travel Stories","status-playable","playable","2021-04-07 16:09:12.000" +"0100F8A00853C000","Wandersong","nvdec;status-playable","playable","2021-06-04 15:33:34.000" +"0100D67013910000","Wanna Survive","status-playable","playable","2022-11-12 21:15:43.000" +"01004FA01391A000","War Of Stealth - assassin","status-playable","playable","2021-05-22 17:34:38.000" +"010049500DE56000","War Tech Fighters","status-playable;nvdec","playable","2022-09-16 22:29:31.000" +"010084D00A134000","War Theatre","gpu;status-ingame","ingame","2021-06-07 19:42:45.000" +"0100B6B013B8A000","War Truck Simulator","status-playable","playable","2021-01-31 11:22:54.000" +"","War-Torn Dreams","crash;status-nothing","nothing","2020-10-21 11:36:16.000" +"01000F0002BB6000","WarGroove","status-playable;online-broken","playable","2022-08-31 10:30:45.000" +"010056901285A000","Wardogs: Red's Return","status-playable","playable","2022-11-13 15:29:01.000" +"0100C6000EEA8000","Warhammer 40,000: Mechanicus","nvdec;status-playable","playable","2021-06-13 10:46:38.000" +"0100E5600D7B2000","Warhammer 40,000: Space Wolf","status-playable;online-broken","playable","2022-09-20 21:11:20.000" +"010031201307A000","Warhammer Age of Sigmar: Storm Ground","status-playable;nvdec;online-broken;UE4","playable","2022-11-13 15:46:14.000" +"","Warhammer Quest 2","status-playable","playable","2020-08-04 15:28:03.000" +"0100563010E0C000","WarioWare: Get It Together!","gpu;status-ingame;opengl-backend-bug","ingame","2024-04-23 01:04:56.000" +"010045B018EC2000","Warioware: Move IT!","status-playable","playable","2023-11-14 00:23:51.000" +"","Warlocks 2: God Slayers","status-playable","playable","2020-12-16 17:36:50.000" +"","Warp Shift","nvdec;status-playable","playable","2020-12-15 14:48:48.000" +"","Warparty","nvdec;status-playable","playable","2021-01-27 18:26:32.000" +"010032700EAC4000","WarriOrb","UE4;status-playable","playable","2021-06-17 15:45:14.000" +"","Wartile Complete Edition","UE4;crash;gpu;status-menus","menus","2020-12-11 21:56:10.000" +"010039A00BC64000","Wasteland 2: Director's Cut","nvdec;status-playable","playable","2021-01-27 13:34:11.000" +"","Water Balloon Mania","status-playable","playable","2020-10-23 20:20:59.000" +"0100BA200C378000","Way of the Passive Fist","gpu;status-ingame","ingame","2021-02-26 21:07:06.000" +"","We should talk.","crash;status-nothing","nothing","2020-08-03 12:32:36.000" +"","Welcome to Hanwell","UE4;crash;status-boots","boots","2020-08-03 11:54:57.000" +"0100D7F010B94000","Welcome to Primrose Lake","status-playable","playable","2022-10-21 11:30:57.000" +"","Wenjia","status-playable","playable","2020-06-08 11:38:30.000" +"010031B00A4E8000","West of Loathing","status-playable","playable","2021-01-28 12:35:19.000" +"010038900DFE0000","What Remains of Edith Finch","slow;status-playable;UE4","playable","2022-08-31 19:57:59.000" +"010033600ADE6000","Wheel of Fortune [010033600ADE6000]","status-boots;crash;Needs More Attention;nvdec","boots","2023-11-12 20:29:24.000" +"0100DFC00405E000","Wheels of Aurelia","status-playable","playable","2021-01-27 21:59:25.000" +"010027D011C9C000","Where Angels Cry","gpu;status-ingame;nvdec","ingame","2022-09-30 22:24:47.000" +"0100FDB0092B4000","Where Are My Friends?","status-playable","playable","2022-09-21 14:39:26.000" +"","Where the Bees Make Honey","status-playable","playable","2020-07-15 12:40:49.000" +"","Whipsey and the Lost Atlas","status-playable","playable","2020-06-23 20:24:14.000" +"010015A00AF1E000","Whispering Willows","status-playable;nvdec","playable","2022-09-30 22:33:05.000" +"","Who Wants to Be a Millionaire?","crash;status-nothing","nothing","2020-12-11 20:22:42.000" +"0100C7800CA06000","Widget Satchel","status-playable","playable","2022-09-16 22:41:07.000" +"010071F00D65A000","Wilmot's Warehouse","audio;gpu;status-ingame","ingame","2021-06-02 17:24:32.000" +"010059900BA3C000","Windscape","status-playable","playable","2022-10-21 11:49:42.000" +"","Windstorm","UE4;gpu;nvdec;status-ingame","ingame","2020-12-22 13:17:48.000" +"0100D6800CEAC000","Windstorm - Ari's Arrival","UE4;status-playable","playable","2021-06-07 19:33:19.000" +"","Wing of Darkness - 010035B012F2000","status-playable;UE4","playable","2022-11-13 16:03:51.000" +"0100A4A015FF0000","Winter Games 2023","deadlock;status-menus","menus","2023-11-07 20:47:36.000" +"010012A017F18800","Witch On The Holy Night","status-playable","playable","2023-03-06 23:28:11.000" +"0100454012E32000","Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-","status-ingame;crash","ingame","2021-08-08 11:56:18.000" +"01002FC00C6D0000","Witch Thief","status-playable","playable","2021-01-27 18:16:07.000" +"010061501904E000","Witch's Garden","gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug","ingame","2023-01-11 02:11:24.000" +"","Witcheye","status-playable","playable","2020-12-14 22:56:08.000" +"0100522007AAA000","Wizard of Legend","status-playable","playable","2021-06-07 12:20:46.000" +"","Wizards of Brandel","status-nothing","nothing","2020-10-14 15:52:33.000" +"0100C7600E77E000","Wizards: Wand of Epicosity","status-playable","playable","2022-10-07 12:32:06.000" +"01009040091E0000","Wolfenstein II The New Colossus","gpu;status-ingame","ingame","2024-04-05 05:39:46.000" +"01003BD00CAAE000","Wolfenstein: Youngblood","status-boots;online-broken","boots","2024-07-12 23:49:20.000" +"","Wonder Blade","status-playable","playable","2020-12-11 17:55:31.000" +"0100B49016FF0000","Wonder Boy Anniversary Collection","deadlock;status-nothing","nothing","2023-04-20 16:01:48.000" +"0100EB2012E36000","Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ]","status-nothing;crash","nothing","2021-11-03 08:45:06.000" +"0100A6300150C000","Wonder Boy: The Dragon's Trap","status-playable","playable","2021-06-25 04:53:21.000" +"0100F5D00C812000","Wondershot","status-playable","playable","2022-08-31 21:05:31.000" +"","Woodle Tree 2","gpu;slow;status-ingame","ingame","2020-06-04 18:44:00.000" +"0100288012966000","Woodsalt","status-playable","playable","2021-04-06 17:01:48.000" +"","Wordify","status-playable","playable","2020-10-03 09:01:07.000" +"","World Conqueror X","status-playable","playable","2020-12-22 16:10:29.000" +"01008E9007064000","World Neverland","status-playable","playable","2021-01-28 17:44:23.000" +"","World Soccer Pinball","status-playable","playable","2021-01-06 00:37:02.000" +"","World of Final Fantasy Maxima","status-playable","playable","2020-06-07 13:57:23.000" +"010009E001D90000","World of Goo","gpu;status-boots;32-bit;crash;regression","boots","2024-04-12 05:52:14.000" +"010061F01DB7C800","World of Goo 2","status-boots","boots","2024-08-08 22:52:49.000" +"","Worldend Syndrome","status-playable","playable","2021-01-03 14:16:32.000" +"010000301025A000","Worlds of Magic: Planar Conquest","status-playable","playable","2021-06-12 12:51:28.000" +"01009CD012CC0000","Worm Jazz","gpu;services;status-ingame;UE4;regression","ingame","2021-11-10 10:33:04.000" +"01001AE005166000","Worms W.M.D","gpu;status-boots;crash;nvdec;ldn-untested","boots","2023-09-16 21:42:59.000" +"010037500C4DE000","Worse Than Death","status-playable","playable","2021-06-11 16:05:40.000" +"01006F100EB16000","Woven","nvdec;status-playable","playable","2021-06-02 13:41:08.000" +"0100DC0012E48000","Wreckfest","status-playable","playable","2023-02-12 16:13:00.000" +"0100C5D00EDB8000","Wreckin' Ball Adventure","status-playable;UE4","playable","2022-09-12 18:56:28.000" +"010033700418A000","Wulverblade","nvdec;status-playable","playable","2021-01-27 22:29:05.000" +"01001C400482C000","Wunderling","audio;status-ingame;crash","ingame","2022-09-10 13:20:12.000" +"","Wurroom","status-playable","playable","2020-10-07 22:46:21.000" +"","X-Morph: Defense","status-playable","playable","2020-06-22 11:05:31.000" +"0100D0B00FB74000","XCOM 2 Collection","gpu;status-ingame;crash","ingame","2022-10-04 09:38:30.000" +"0100CC9015360000","XEL","gpu;status-ingame","ingame","2022-10-03 10:19:39.000" +"0100E95004038000","Xenoblade Chronicles 2","deadlock;status-ingame;amd-vendor-bug","ingame","2024-03-28 14:31:41.000" +"0100C9F009F7A000","Xenoblade Chronicles 2: Torna - The Golden Country","slow;status-playable;nvdec","playable","2023-01-28 16:47:28.000" +"010074F013262000","Xenoblade Chronicles 3","gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug","ingame","2024-08-06 19:56:44.000" +"0100FF500E34A000","Xenoblade Chronicles Definitive Edition","status-playable;nvdec","playable","2024-05-04 20:12:41.000" +"010028600BA16000","Xenon Racer","status-playable;nvdec;UE4","playable","2022-08-31 22:05:30.000" +"010064200C324000","Xenon Valkyrie+","status-playable","playable","2021-06-07 20:25:53.000" +"0100928005BD2000","Xenoraid","status-playable","playable","2022-09-03 13:01:10.000" +"01005B5009364000","Xeodrifter","status-playable","playable","2022-09-03 13:18:39.000" +"","YGGDRA UNION We’ll Never Fight Alone","status-playable","playable","2020-04-03 02:20:47.000" +"0100634008266000","YIIK: A Postmodern RPG","status-playable","playable","2021-01-28 13:38:37.000" +"010037D00DBDC000","YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD.","nvdec;status-playable","playable","2021-01-26 17:03:52.000" +"01006FB00DB02000","Yaga","status-playable;nvdec","playable","2022-09-16 23:17:17.000" +"","YesterMorrow","crash;status-ingame","ingame","2020-12-17 17:15:25.000" +"","Yet Another Zombie Defense HD","status-playable","playable","2021-01-06 00:18:39.000" +"0100C0000CEEA000","Yo kai watch 1 for Nintendo Switch","gpu;status-ingame;opengl","ingame","2024-05-28 11:11:49.000" +"010086C00AF7C000","Yo-Kai Watch 4++","status-playable","playable","2024-06-18 20:21:44.000" +"010002D00632E000","Yoku's Island Express","status-playable;nvdec","playable","2022-09-03 13:59:02.000" +"0100F47016F26000","Yomawari 3","status-playable","playable","2022-05-10 08:26:51.000" +"010012F00B6F2000","Yomawari: The Long Night Collection","status-playable","playable","2022-09-03 14:36:59.000" +"0100CC600ABB2000","Yonder: The Cloud Catcher Chronicles","status-playable","playable","2021-01-28 14:06:25.000" +"0100BE50042F6000","Yono and the Celestial Elephants","status-playable","playable","2021-01-28 18:23:58.000" +"0100F110029C8000","Yooka-Laylee","status-playable","playable","2021-01-28 14:21:45.000" +"010022F00DA66000","Yooka-Laylee and the Impossible Lair","status-playable","playable","2021-03-05 17:32:21.000" +"01006000040C2000","Yoshi's Crafted World","gpu;status-ingame;audout","ingame","2021-08-30 13:25:51.000" +"","Yoshi's Crafted World Demo Version","gpu;status-boots;status-ingame","boots","2020-12-16 14:57:40.000" +"","Yoshiwara Higanbana Kuon no Chigiri","nvdec;status-playable","playable","2020-10-17 19:14:46.000" +"01003A400C3DA800","YouTube","status-playable","playable","2024-06-08 05:24:10.000" +"00100A7700CCAA40","Youtubers Life00","status-playable;nvdec","playable","2022-09-03 14:56:19.000" +"0100E390124D8000","Ys IX: Monstrum Nox","status-playable","playable","2022-06-12 04:14:42.000" +"0100F90010882000","Ys Origin","status-playable;nvdec","playable","2024-04-17 05:07:33.000" +"01007F200B0C0000","Ys VIII: Lacrimosa of Dana","status-playable;nvdec","playable","2023-08-05 09:26:41.000" +"010022400BE5A000","Yu-Gi-Oh! Legacy of the Duelist: Link Evolution!","status-playable","playable","2024-09-27 21:48:43.000" +"01002D60188DE000","Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!","status-ingame;crash","ingame","2023-03-17 01:54:01.000" +"0100B56011502000","Yumeutsutsu Re:After","status-playable","playable","2022-11-20 16:09:06.000" +"","Yunohana Spring! - Mellow Times -","audio;crash;status-menus","menus","2020-09-27 19:27:40.000" +"","Yuppie Psycho: Executive Edition","crash;status-ingame","ingame","2020-12-11 10:37:06.000" +"0100FC900963E000","Yuri","status-playable","playable","2021-06-11 13:08:50.000" +"","ZERO GUNNER 2","status-playable","playable","2021-01-04 20:17:14.000" +"","ZOMBIE GOLD RUSH","online;status-playable","playable","2020-09-24 12:56:08.000" +"010092400A678000","Zaccaria Pinball","status-playable;online-broken","playable","2022-09-03 15:44:28.000" +"","Zarvot - 0100E7900C40000","status-playable","playable","2021-01-28 13:51:36.000" +"","ZenChess","status-playable","playable","2020-07-01 22:28:27.000" +"","Zenge","status-playable","playable","2020-10-22 13:23:57.000" +"0100057011E50000","Zengeon","services-horizon;status-boots;crash","boots","2024-04-29 15:43:07.000" +"0100AAC00E692000","Zenith","status-playable","playable","2022-09-17 09:57:02.000" +"01004B001058C000","Zero Strain","services;status-menus;UE4","menus","2021-11-10 07:48:32.000" +"","Zettai kaikyu gakuen","gpu;nvdec;status-ingame","ingame","2020-08-25 15:15:54.000" +"0100D7B013DD0000","Ziggy The Chaser","status-playable","playable","2021-02-04 20:34:27.000" +"010086700EF16000","ZikSquare","gpu;status-ingame","ingame","2021-11-06 02:02:48.000" +"010069C0123D8000","Zoids Wild Blast Unleashed","status-playable;nvdec","playable","2022-10-15 11:26:59.000" +"","Zombie Army Trilogy","ldn-untested;online;status-playable","playable","2020-12-16 12:02:28.000" +"","Zombie Driver","nvdec;status-playable","playable","2020-12-14 23:15:10.000" +"","Zombie's Cool","status-playable","playable","2020-12-17 12:41:26.000" +"01000E5800D32C00","Zombieland: Double Tap - Road Trip0","status-playable","playable","2022-09-17 10:08:45.000" +"","Zombillie","status-playable","playable","2020-07-23 17:42:23.000" +"01001EE00A6B0000","Zotrix: Solar Division","status-playable","playable","2021-06-07 20:34:05.000" +"0100194010422000","bayala - the game","status-playable","playable","2022-10-04 14:09:25.000" +"","de Blob 2","nvdec;status-playable","playable","2021-01-06 13:00:16.000" +"0100BCA016636000","eBaseball Powerful Pro Yakyuu 2022","gpu;services-horizon;status-nothing;crash","nothing","2024-05-26 23:07:19.000" +"","eCrossminton","status-playable","playable","2020-07-11 18:24:27.000" +"010095E01581C000","even if TEMPEST","gpu;status-ingame","ingame","2023-06-22 23:50:25.000" +"","fault - milestone one","nvdec;status-playable","playable","2021-03-24 10:41:49.000" +"","n Verlore Verstand","slow;status-ingame","ingame","2020-12-10 18:00:28.000" +"01009A500E3DA000","n Verlore Verstand - Demo","status-playable","playable","2021-02-09 00:13:32.000" +"01008AE019614000","nOS new Operating System","status-playable","playable","2023-03-22 16:49:08.000" +"0000000000000000","nx-hbmenu","status-boots;Needs Update;homebrew","boots","2024-04-06 22:05:32.000" +"","nxquake2","services;status-nothing;crash;homebrew","nothing","2022-08-04 23:14:04.000" +"010074000BE8E000","oOo: Ascension","status-playable","playable","2021-01-25 14:13:34.000" +"","planetarian HD ~the reverie of a little planet~","status-playable","playable","2020-10-17 20:26:20.000" +"01005CD015986000","rRootage Reloaded [01005CD015986000]","status-playable","playable","2022-08-05 23:20:18.000" +"","realMyst: Masterpiece Edition","nvdec;status-playable","playable","2020-11-30 15:25:42.000" +"0100858010DC4000","the StoryTale","status-playable","playable","2022-09-03 13:00:25.000" +"0100FF7010E7E000","void* tRrLM(); //Void Terrarium","gpu;status-ingame;Needs Update;regression","ingame","2023-02-10 01:13:25.000" +"010078D0175EE000","void* tRrLM2(); //Void Terrarium 2","status-playable","playable","2023-12-21 11:00:41.000" +"","この世の果てで恋を唄う少女YU-NO","audio;status-ingame","ingame","2021-01-22 07:00:16.000" +"","スーパーファミコン Nintendo Switch Online","slow;status-ingame","ingame","2020-03-14 05:48:38.000" +"01000BB01CB8A000","トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)","status-nothing","nothing","2024-09-28 07:03:14.000" +"010065500B218000","メモリーズオフ - Innocent Fille","status-playable","playable","2022-12-02 17:36:48.000" +"010032400E700000","二ノ国 白き聖灰の女王","services;status-menus;32-bit","menus","2023-04-16 17:11:06.000" +"0100F3100DA46000","初音ミク Project DIVA MEGA39's","audio;status-playable;loader-allocator","playable","2022-07-29 11:45:52.000" +"0100BF401AF9C000","御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)","slow;status-playable","playable","2023-12-31 14:37:17.000" +"0100AFA01750C000","死神と少女/Shinigami to Shoujo","gpu;status-ingame;Incomplete","ingame","2024-03-22 01:06:45.000" +"01001BA01EBFC000","燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)","services-horizon;status-nothing","nothing","2024-09-28 12:22:55.000" +"0100936018EB4000","牧場物語 Welcome!ワンダフルライフ","status-ingame;crash","ingame","2023-04-25 19:43:52.000" +"01009FB016286000","索尼克:起源 / Sonic Origins","status-ingame;crash","ingame","2024-06-02 07:20:15.000" +"0100F4401940A000","超探偵事件簿 レインコード (Master Detective Archives: Rain Code)","status-ingame;crash","ingame","2024-02-12 20:58:31.000" +"010064801a01c000","超次元ゲイム ネプテューヌ GameMaker R:Evolution","status-nothing;crash","nothing","2023-10-30 22:37:40.000" +"010005501E68C000","逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection)","status-playable","playable","2024-09-19 16:38:05.000" +"010020D01B890000","逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy)","status-playable","playable","2024-06-21 21:54:27.000" +"0100309016E7A000","鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles","status-playable;UE4","playable","2024-08-08 04:51:49.000" diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index 8a3482c01..1e69b42d5 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -36,19 +36,15 @@ namespace Ryujinx.Ava.Utilities.Compat if (row.ColCount != header.ColNames.Count) throw new InvalidDataException($"CSV row {row.RowIndex} ({row.ToString()}) has mismatched column count"); - var titleIdRow = ColStr(row[header.IndexOf("\"extracted_game_id\"")]); + var titleIdRow = ColStr(row[header.IndexOf("\"title_id\"")]); TitleId = !string.IsNullOrEmpty(titleIdRow) ? titleIdRow : default(Optional); + + GameName = ColStr(row[header.IndexOf("\"game_name\"")]).Trim().Trim('"'); - var issueTitleRow = ColStr(row[header.IndexOf("\"issue_title\"")]); - if (TitleId.HasValue) - issueTitleRow = issueTitleRow.ReplaceIgnoreCase($" - {TitleId}", string.Empty); - - GameName = issueTitleRow.Trim().Trim('"'); - - IssueLabels = ColStr(row[header.IndexOf("\"issue_labels\"")]).Split(';'); - Status = ColStr(row[header.IndexOf("\"extracted_status\"")]).ToLower() switch + IssueLabels = ColStr(row[header.IndexOf("\"labels\"")]).Split(';'); + Status = ColStr(row[header.IndexOf("\"status\"")]).ToLower() switch { "playable" => LocaleKeys.CompatibilityListPlayable, "ingame" => LocaleKeys.CompatibilityListIngame, @@ -58,7 +54,7 @@ namespace Ryujinx.Ava.Utilities.Compat _ => null }; - if (DateTime.TryParse(ColStr(row[header.IndexOf("\"last_event_date\"")]), out var dt)) + if (DateTime.TryParse(ColStr(row[header.IndexOf("\"last_updated\"")]), out var dt)) LastEvent = dt; return; -- 2.47.1 From 2226521f6c96f72f36132d104858af96e82e7b42 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 8 Jan 2025 12:36:26 -0600 Subject: [PATCH 309/722] docs: compat: remove quotes around everything but game titles --- docs/compatibility.csv | 6864 ++++++++++++++++++++-------------------- 1 file changed, 3432 insertions(+), 3432 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 600f00097..94ff62ab3 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -1,3433 +1,3433 @@ "title_id","game_name","labels","status","last_updated" -"01001E500F7FC000","#Funtime","status-playable","playable","2020-12-10 16:54:35.000" -"01000E50134A4000","#Halloween, Super Puzzles Dream","nvdec;status-playable","playable","2020-12-10 20:43:58.000" -"01004D100C510000","#KillAllZombies","slow;status-playable","playable","2020-12-16 01:50:25.000" -"0100325012C12000","#NoLimitFantasy, Super Puzzles Dream","nvdec;status-playable","playable","2020-12-12 17:21:32.000" -"01005D400E5C8000","#RaceDieRun","status-playable","playable","2020-07-04 20:23:16.000" -"01003DB011AE8000","#womenUp, Super Puzzles Dream","status-playable","playable","2020-12-12 16:57:25.000" -"0100D87012A14000","#womenUp, Super Puzzles Dream Demo","nvdec;status-playable","playable","2021-02-09 00:03:31.000" -"010099F00EF3E000","-KLAUS-","nvdec;status-playable","playable","2020-06-27 13:27:30.000" -"0100BA9014A02000",".hack//G.U. Last Recode","deadlock;status-boots","boots","2022-03-12 19:15:47.000" -"01000320000CC000","1-2-Switch","services;status-playable","playable","2022-02-18 14:44:03.000" -"0100DC000A472000","10 Second Run RETURNS Demo","gpu;status-ingame","ingame","2021-02-09 00:17:18.000" -"01004D1007926000","10 Second Run Returns","gpu;status-ingame","ingame","2022-07-17 13:06:18.000" -"0100D82015774000","112 Operator","status-playable;nvdec","playable","2022-11-13 22:42:50.000" -"010051E012302000","112th Seed","status-playable","playable","2020-10-03 10:32:38.000" -"0100B1A010014000","12 Labours of Hercules II: The Cretan Bull","cpu;status-nothing;32-bit;crash","nothing","2022-12-07 13:43:10.000" -"01007F600D1B8000","12 is Better Than 6","status-playable","playable","2021-02-22 16:10:12.000" -"0100A840047C2000","12 orbits","status-playable","playable","2020-05-28 16:13:26.000" -"01003FC01670C000","13 Sentinels Aegis Rim","slow;status-ingame","ingame","2024-06-10 20:33:38.000" -"0100C54015002000","13 Sentinels Aegis Rim Demo","status-playable;demo","playable","2022-04-13 14:15:48.000" -"01007E600EEE6000","140","status-playable","playable","2020-08-05 20:01:33.000" -"0100B94013D28000","16-Bit Soccer Demo","status-playable","playable","2021-02-09 00:23:07.000" -"01005CA0099AA000","1917 - The Alien Invasion DX","status-playable","playable","2021-01-08 22:11:16.000" -"0100829010F4A000","1971 PROJECT HELIOS","status-playable","playable","2021-04-14 13:50:19.000" -"0100D1000B18C000","1979 Revolution: Black Friday","nvdec;status-playable","playable","2021-02-21 21:03:43.000" -"01007BB00FC8A000","198X","status-playable","playable","2020-08-07 13:24:38.000" -"010075601150A000","1993 Shenandoah","status-playable","playable","2020-10-24 13:55:42.000" -"0100148012550000","1993 Shenandoah Demo","status-playable","playable","2021-02-09 00:43:43.000" -"010096500EA94000","2048 Battles","status-playable","playable","2020-12-12 14:21:25.000" -"010024C0067C4000","2064: Read Only Memories INTEGRAL","deadlock;status-menus","menus","2020-05-28 16:53:58.000" -"0100749009844000","20XX","gpu;status-ingame","ingame","2023-08-14 09:41:44.000" -"01007550131EE000","2urvive","status-playable","playable","2022-11-17 13:49:37.000" -"0100E20012886000","2weistein – The Curse of the Red Dragon","status-playable;nvdec;UE4","playable","2022-11-18 14:47:07.000" -"0100DAC013D0A000","30 in 1 game collection vol. 2","status-playable;online-broken","playable","2022-10-15 17:22:27.000" -"010056D00E234000","30-in-1 Game Collection","status-playable;online-broken","playable","2022-10-15 17:47:09.000" -"0100FB5010D2E000","3000th Duel","status-playable","playable","2022-09-21 17:12:08.000" -"01003670066DE000","36 Fragments of Midnight","status-playable","playable","2020-05-28 15:12:59.000" -"0100AF400C4CE000","39 Days to Mars","status-playable","playable","2021-02-21 22:12:46.000" -"010010C013F2A000","3D Arcade Fishing","status-playable","playable","2022-10-25 21:50:51.000" -"","3D MiniGolf","status-playable","playable","2021-01-06 09:22:11.000" -"","4x4 Dirt Track","status-playable","playable","2020-12-12 21:41:42.000" -"010010100FF14000","60 Parsecs!","status-playable","playable","2022-09-17 11:01:17.000" -"0100969005E98000","60 Seconds!","services;status-ingame","ingame","2021-11-30 01:04:14.000" -"","6180 the moon","status-playable","playable","2020-05-28 15:39:24.000" -"","64","status-playable","playable","2020-12-12 21:31:58.000" -"","7 Billion Humans","32-bit;status-playable","playable","2020-12-17 21:04:58.000" -"","7th Sector","nvdec;status-playable","playable","2020-08-10 14:22:14.000" -"","8-BIT ADVENTURE STEINS;GATE","audio;status-ingame","ingame","2020-01-12 15:05:06.000" -"","80 Days","status-playable","playable","2020-06-22 21:43:01.000" -"","80's OVERDRIVE","status-playable","playable","2020-10-16 14:33:32.000" -"","88 Heroes","status-playable","playable","2020-05-28 14:13:02.000" -"","9 Monkeys of Shaolin","UE4;gpu;slow;status-ingame","ingame","2020-11-17 11:58:43.000" -"0100C5F012E3E000","9 Monkeys of Shaolin Demo","UE4;gpu;nvdec;status-ingame","ingame","2021-02-09 01:03:30.000" -"","911 Operator Deluxe Edition","status-playable","playable","2020-07-14 13:57:44.000" -"","99Vidas","online;status-playable","playable","2020-10-29 13:00:40.000" -"010023500C2F0000","99Vidas Demo","status-playable","playable","2021-02-09 12:51:31.000" -"","9th Dawn III","status-playable","playable","2020-12-12 22:27:27.000" -"010096A00CC80000","A Ch'ti Bundle","status-playable;nvdec","playable","2022-10-04 12:48:44.000" -"","A Dark Room","gpu;status-ingame","ingame","2020-12-14 16:14:28.000" -"0100582012B90000","A Duel Hand Disaster Trackher: DEMO","crash;demo;nvdec;status-ingame","ingame","2021-03-24 18:45:27.000" -"010026B006802000","A Duel Hand Disaster: Trackher","status-playable;nvdec;online-working","playable","2022-09-04 14:24:55.000" -"","A Frog Game","status-playable","playable","2020-12-14 16:09:53.000" -"01009E1011EC4000","A HERO AND A GARDEN","status-playable","playable","2022-12-05 16:37:47.000" -"010056E00853A000","A Hat In Time","status-playable","playable","2024-06-25 19:52:44.000" -"01005EF00CFDA000","A Knight's Quest","status-playable;UE4","playable","2022-09-12 20:44:20.000" -"","A Short Hike","status-playable","playable","2020-10-15 00:19:58.000" -"","A Sound Plan","crash;status-boots","boots","2020-12-14 16:46:21.000" -"01007DD011C4A000","A Summer with the Shiba Inu","status-playable","playable","2021-06-10 20:51:16.000" -"01008DD006C52000","A magical high school girl","status-playable","playable","2022-07-19 14:40:50.000" -"0100A3E010E56000","A-Train: All Aboard! Tourism","nvdec;status-playable","playable","2021-04-06 17:48:19.000" -"0100C1300BBC6000","ABZU","status-playable;UE4","playable","2022-07-19 15:02:52.000" -"01003C400871E000","ACA NEOGEO 2020 SUPER BASEBALL","online;status-playable","playable","2021-04-12 13:23:51.000" -"0100FC000AFC6000","ACA NEOGEO 3 COUNT BOUT","online;status-playable","playable","2021-04-12 13:16:42.000" -"0100AC40038F4000","ACA NEOGEO AERO FIGHTERS 2","online;status-playable","playable","2021-04-08 15:44:09.000" -"0100B91008780000","ACA NEOGEO AERO FIGHTERS 3","online;status-playable","playable","2021-04-12 13:11:17.000" -"0100B4800AFBA000","ACA NEOGEO AGGRESSORS OF DARK KOMBAT","online;status-playable","playable","2021-04-01 22:48:01.000" -"01003FE00A2F6000","ACA NEOGEO BASEBALL STARS PROFESSIONAL","online;status-playable","playable","2021-04-01 21:23:05.000" -"","ACA NEOGEO BLAZING STAR","crash;services;status-menus","menus","2020-05-26 17:29:02.000" -"0100D2400AFB0000","ACA NEOGEO CROSSED SWORDS","online;status-playable","playable","2021-04-01 20:42:59.000" -"0100EE6002B48000","ACA NEOGEO FATAL FURY","online;status-playable","playable","2021-04-01 20:36:23.000" -"","ACA NEOGEO FOOTBALL FRENZY","status-playable","playable","2021-03-29 20:12:12.000" -"0100CB2001DB8000","ACA NEOGEO GAROU: MARK OF THE WOLVES","online;status-playable","playable","2021-04-01 20:31:10.000" -"01005D700A2F8000","ACA NEOGEO GHOST PILOTS","online;status-playable","playable","2021-04-01 20:26:45.000" -"01000D10038E6000","ACA NEOGEO LAST RESORT","online;status-playable","playable","2021-04-01 19:51:22.000" -"","ACA NEOGEO LEAGUE BOWLING","crash;services;status-menus","menus","2020-05-26 17:11:04.000" -"","ACA NEOGEO MAGICAL DROP II","crash;services;status-menus","menus","2020-05-26 16:48:24.000" -"01007920038F6000","ACA NEOGEO MAGICIAN LORD","online;status-playable","playable","2021-04-01 19:33:26.000" -"0100EBE002B3E000","ACA NEOGEO METAL SLUG","status-playable","playable","2021-02-21 13:56:48.000" -"010086300486E000","ACA NEOGEO METAL SLUG 2","online;status-playable","playable","2021-04-01 19:25:52.000" -"","ACA NEOGEO METAL SLUG 3","crash;services;status-menus","menus","2020-05-26 16:32:45.000" -"01009CE00AFAE000","ACA NEOGEO METAL SLUG 4","online;status-playable","playable","2021-04-01 18:12:18.000" -"","ACA NEOGEO Metal Slug X","crash;services;status-menus","menus","2020-05-26 14:07:20.000" -"010038F00AFA0000","ACA NEOGEO Money Puzzle Exchanger","online;status-playable","playable","2021-04-01 17:59:56.000" -"01002E70032E8000","ACA NEOGEO NEO TURF MASTERS","status-playable","playable","2021-02-21 15:12:01.000" -"010052A00A306000","ACA NEOGEO NINJA COMBAT","status-playable","playable","2021-03-29 21:17:28.000" -"01007E800AFB6000","ACA NEOGEO NINJA COMMANDO","online;status-playable","playable","2021-04-01 17:28:18.000" -"01003A5001DBA000","ACA NEOGEO OVER TOP","status-playable","playable","2021-02-21 13:16:25.000" -"010088500878C000","ACA NEOGEO REAL BOUT FATAL FURY SPECIAL","online;status-playable","playable","2021-04-01 17:18:27.000" -"01005C9002B42000","ACA NEOGEO SAMURAI SHODOWN","online;status-playable","playable","2021-04-01 17:11:35.000" -"010047F001DBC000","ACA NEOGEO SAMURAI SHODOWN IV","online;status-playable","playable","2021-04-12 12:58:54.000" -"010049F00AFE8000","ACA NEOGEO SAMURAI SHODOWN SPECIAL V","online;status-playable","playable","2021-04-10 18:07:13.000" -"01009B300872A000","ACA NEOGEO SENGOKU 2","online;status-playable","playable","2021-04-10 17:36:44.000" -"01008D000877C000","ACA NEOGEO SENGOKU 3","online;status-playable","playable","2021-04-10 16:11:53.000" -"","ACA NEOGEO SHOCK TROOPERS","crash;services;status-menus","menus","2020-05-26 15:29:34.000" -"01007D1004DBA000","ACA NEOGEO SPIN MASTER","online;status-playable","playable","2021-04-10 15:50:19.000" -"010055A00A300000","ACA NEOGEO SUPER SIDEKICKS 2","online;status-playable","playable","2021-04-10 16:05:58.000" -"0100A4D00A308000","ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY","online;status-playable","playable","2021-04-10 15:39:22.000" -"","ACA NEOGEO THE KING OF FIGHTERS '94","crash;services;status-menus","menus","2020-05-26 15:03:44.000" -"01009DC001DB6000","ACA NEOGEO THE KING OF FIGHTERS '95","status-playable","playable","2021-03-29 20:27:35.000" -"01006F0004FB4000","ACA NEOGEO THE KING OF FIGHTERS '96","online;status-playable","playable","2021-04-10 14:49:10.000" -"0100170008728000","ACA NEOGEO THE KING OF FIGHTERS '97","online;status-playable","playable","2021-04-10 14:43:27.000" -"","ACA NEOGEO THE KING OF FIGHTERS '98","crash;services;status-menus","menus","2020-05-26 14:54:20.000" -"0100583001DCA000","ACA NEOGEO THE KING OF FIGHTERS '99","online;status-playable","playable","2021-04-10 14:36:56.000" -"0100B97002B44000","ACA NEOGEO THE KING OF FIGHTERS 2000","online;status-playable","playable","2021-04-10 15:24:35.000" -"010048200AFC2000","ACA NEOGEO THE KING OF FIGHTERS 2001","online;status-playable","playable","2021-04-10 15:16:23.000" -"0100CFD00AFDE000","ACA NEOGEO THE KING OF FIGHTERS 2002","online;status-playable","playable","2021-04-10 15:01:55.000" -"0100EF100AFE6000","ACA NEOGEO THE KING OF FIGHTERS 2003","online;status-playable","playable","2021-04-10 14:54:31.000" -"0100699008792000","ACA NEOGEO THE LAST BLADE 2","online;status-playable","playable","2021-04-10 14:31:54.000" -"0100F7F00AFA2000","ACA NEOGEO THE SUPER SPY","online;status-playable","playable","2021-04-10 14:26:33.000" -"0100CEF001DC0000","ACA NEOGEO WAKU WAKU 7","online;status-playable","playable","2021-04-10 14:20:52.000" -"","ACA NEOGEO WORLD HEROES PERFECT","crash;services;status-menus","menus","2020-05-26 14:14:36.000" -"","ACA NEOGEO ZUPAPA!","online;status-playable","playable","2021-03-25 20:07:33.000" -"0100DBC0081A4000","ACORN Tactics","status-playable","playable","2021-02-22 12:57:40.000" -"01008C901266E000","ADVERSE","UE4;status-playable","playable","2021-04-26 14:32:51.000" -"0100A0400DDE0000","AER - Memories of Old","nvdec;status-playable","playable","2021-03-05 18:43:43.000" -"01001B400D334000","AFL Evolution 2","slow;status-playable;online-broken;UE4","playable","2022-12-07 12:45:56.000" -"0100C1700FB34000","AI: The Somnium Files Demo","nvdec;status-playable","playable","2021-02-10 12:52:33.000" -"01003DD00BFEE000","AIRHEART - Tales of Broken Wings","status-playable","playable","2021-02-26 15:20:27.000" -"","ALPHA","status-playable","playable","2020-12-13 12:17:45.000" -"010020D01AD24000","ANIMAL WELL","status-playable","playable","2024-05-22 18:01:49.000" -"","ANIMUS","status-playable","playable","2020-12-13 15:11:47.000" -"010047000E9AA000","AO Tennis 2","status-playable;online-broken","playable","2022-09-17 12:05:07.000" -"010054500E6D4000","APE OUT DEMO","status-playable","playable","2021-02-10 14:33:06.000" -"0100AC10085CE000","AQUA KITTY UDX","online;status-playable","playable","2021-04-12 15:34:11.000" -"","ARCADE FUZZ","status-playable","playable","2020-08-15 12:37:36.000" -"0100691013C46000","ARIA CHRONICLE","status-playable","playable","2022-11-16 13:50:55.000" -"01009B500007C000","ARMS","status-playable;ldn-works;LAN","playable","2024-08-28 07:49:24.000" -"","ARMS Demo","status-playable","playable","2021-02-10 16:30:13.000" -"","ASCENDANCE","status-playable","playable","2021-01-05 10:54:40.000" -"0100B9400FA38000","ATOM RPG","status-playable;nvdec","playable","2022-10-22 10:11:48.000" -"","ATOMIK RunGunJumpGun","status-playable","playable","2020-12-14 13:19:24.000" -"","ATOMINE","gpu;nvdec;slow;status-playable","playable","2020-12-14 18:56:50.000" -"01000F600B01E000","ATV Drift & Tricks","UE4;online;status-playable","playable","2021-04-08 17:29:17.000" -"0100E100128BA000","AVICII Invector Demo","status-playable","playable","2021-02-10 21:04:58.000" -"010097A00CC0A000","Aaero","status-playable;nvdec","playable","2022-07-19 14:49:55.000" -"","Aborigenus","status-playable","playable","2020-08-05 19:47:24.000" -"","Absolute Drift","status-playable","playable","2020-12-10 14:02:44.000" -"010047F012BE2000","Abyss of The Sacrifice","status-playable;nvdec","playable","2022-10-21 13:56:28.000" -"0100A9900CB5C000","Access Denied","status-playable","playable","2022-07-19 15:25:10.000" -"01007C50132C8000","Ace Angler: Fishing Spirits","status-menus;crash","menus","2023-03-03 03:21:39.000" -"010033401E68E000","Ace Attorney Investigations Collection DEMO","status-playable","playable","2024-09-07 06:16:42.000" -"010039301B7E0000","Ace Combat 7 - Skies Unknown Deluxe Edition","gpu;status-ingame;UE4","ingame","2024-09-27 14:31:43.000" -"0100FF1004D56000","Ace of Seafood","status-playable","playable","2022-07-19 15:32:25.000" -"","Aces of the Luftwaffe Squadron","nvdec;slow;status-playable","playable","2020-05-27 12:29:42.000" -"010054300D822000","Aces of the Luftwaffe Squadron Demo","nvdec;status-playable","playable","2021-02-09 13:12:28.000" -"","Across the Grooves","status-playable","playable","2020-06-27 12:29:51.000" -"","Acthung! Cthulhu Tactics","status-playable","playable","2020-12-14 18:40:27.000" -"010039A010DA0000","Active Neurons","status-playable","playable","2021-01-27 21:31:21.000" -"01000D1011EF0000","Active Neurons 2","status-playable","playable","2022-10-07 16:21:42.000" -"010031C0122B0000","Active Neurons 2 Demo","status-playable","playable","2021-02-09 13:40:21.000" -"0100EE1013E12000","Active Neurons 3","status-playable","playable","2021-03-24 12:20:20.000" -"","Actual Sunlight","gpu;status-ingame","ingame","2020-12-14 17:18:41.000" -"0100C0C0040E4000","Adam's Venture: Origins","status-playable","playable","2021-03-04 18:43:57.000" -"","Adrenaline Rush - Miami Drive","status-playable","playable","2020-12-12 22:49:50.000" -"0100300012F2A000","Advance Wars 1+2: Re-Boot Camp","status-playable","playable","2024-01-30 18:19:44.000" -"","Adventure Llama","status-playable","playable","2020-12-14 19:32:24.000" -"","Adventure Pinball Bundle","slow;status-playable","playable","2020-12-14 20:31:53.000" -"01003B400A00A000","Adventures of Bertram Fiddle: Episode 1: A Dreadly Business","status-playable;nvdec","playable","2022-09-17 11:07:56.000" -"","Adventures of Chris","status-playable","playable","2020-12-12 23:00:02.000" -"0100A0A0136E8000","Adventures of Chris Demo","status-playable","playable","2021-02-09 13:49:21.000" -"","Adventures of Pip","nvdec;status-playable","playable","2020-12-12 22:11:55.000" -"010064500AF72000","Aegis Defenders Demo","status-playable","playable","2021-02-09 14:04:17.000" -"01008E6006502000","Aegis Defenders0","status-playable","playable","2021-02-22 13:29:33.000" -"","Aeolis Tournament","online;status-playable","playable","2020-12-12 22:02:14.000" -"01006710122CE000","Aeolis Tournament Demo","nvdec;status-playable","playable","2021-02-09 14:22:30.000" -"0100E9B013D4A000","Aerial Knight's Never Yield","status-playable","playable","2022-10-25 22:05:00.000" -"0100875011D0C000","Aery","status-playable","playable","2021-03-07 15:25:51.000" -"010018E012914000","Aery - Sky Castle","status-playable","playable","2022-10-21 17:58:49.000" -"0100DF8014056000","Aery - A Journey Beyond Time","status-playable","playable","2021-04-05 15:52:25.000" -"0100087012810000","Aery - Broken Memories","status-playable","playable","2022-10-04 13:11:52.000" -"","Aery - Calm Mind - 0100A801539000","status-playable","playable","2022-11-14 14:26:58.000" -"0100B1C00949A000","AeternoBlade Demo Version","nvdec;status-playable","playable","2021-02-09 14:39:26.000" -"","AeternoBlade I","nvdec;status-playable","playable","2020-12-14 20:06:48.000" -"01009D100EA28000","AeternoBlade II","status-playable;online-broken;UE4;vulkan-backend-bug","playable","2022-09-12 21:11:18.000" -"","AeternoBlade II Demo Version","gpu;nvdec;status-ingame","ingame","2021-02-09 15:10:19.000" -"0100DB100BBCE000","Afterparty","status-playable","playable","2022-09-22 12:23:19.000" -"","Agatha Christie - The ABC Murders","status-playable","playable","2020-10-27 17:08:23.000" -"","Agatha Knife","status-playable","playable","2020-05-28 12:37:58.000" -"","Agent A: A puzzle in disguise","status-playable","playable","2020-11-16 22:53:27.000" -"01008E8012C02000","Agent A: A puzzle in disguise (Demo)","status-playable","playable","2021-02-09 18:30:41.000" -"0100E4700E040000","Ages of Mages: the Last Keeper","status-playable;vulkan-backend-bug","playable","2022-10-04 11:44:05.000" -"010004D00A9C0000","Aggelos","gpu;status-ingame","ingame","2023-02-19 13:24:23.000" -"","Agony","UE4;crash;status-boots","boots","2020-07-10 16:21:18.000" -"010089B00D09C000","Ai: the Somnium Files","status-playable;nvdec","playable","2022-09-04 14:45:06.000" -"","Ailment","status-playable","playable","2020-12-12 22:30:41.000" -"","Air Conflicts: Pacific Carriers","status-playable","playable","2021-01-04 10:52:50.000" -"","Air Hockey","status-playable","playable","2020-05-28 16:44:37.000" -"","Air Missions: HIND","status-playable","playable","2020-12-13 10:16:45.000" -"0100E95011FDC000","Aircraft Evolution","nvdec;status-playable","playable","2021-06-14 13:30:18.000" -"010010A00DB72000","Airfield Mania Demo","services;status-boots;demo","boots","2022-04-10 03:43:02.000" -"01007F100DE52000","Akane","status-playable;nvdec","playable","2022-07-21 00:12:18.000" -"","Akash Path of the Five","gpu;nvdec;status-ingame","ingame","2020-12-14 22:33:12.000" -"010053100B0EA000","Akihabara - Feel the Rhythm Remixed","status-playable","playable","2021-02-22 14:39:35.000" -"","Akuarium","slow;status-playable","playable","2020-12-12 23:43:36.000" -"","Akuto","status-playable","playable","2020-08-04 19:43:27.000" -"0100F5400AB6C000","Alchemic Jousts","gpu;status-ingame","ingame","2022-12-08 15:06:28.000" -"","Alchemist's Castle","status-playable","playable","2020-12-12 23:54:08.000" -"","Alder's Blood","status-playable","playable","2020-08-28 15:15:23.000" -"01004510110C4000","Alder's Blood Prologue","crash;status-ingame","ingame","2021-02-09 19:03:03.000" -"01000E000EEF8000","Aldred - Knight of Honor","services;status-playable","playable","2021-11-30 01:49:17.000" -"010025D01221A000","Alex Kidd in Miracle World DX","status-playable","playable","2022-11-14 15:01:34.000" -"","Alien Cruise","status-playable","playable","2020-08-12 13:56:05.000" -"","Alien Escape","status-playable","playable","2020-06-03 23:43:18.000" -"010075D00E8BA000","Alien: Isolation","status-playable;nvdec;vulkan-backend-bug","playable","2022-09-17 11:48:41.000" -"0100CBD012FB6000","All Walls Must Fall","status-playable;UE4","playable","2022-10-15 19:16:30.000" -"0100C1F00A9B8000","All-Star Fruit Racing","status-playable;nvdec;UE4","playable","2022-07-21 00:35:37.000" -"0100AC501122A000","Alluris","gpu;status-ingame;UE4","ingame","2023-08-02 23:13:50.000" -"","Almightree the Last Dreamer","slow;status-playable","playable","2020-12-15 13:59:03.000" -"","Along the Edge","status-playable","playable","2020-11-18 15:00:07.000" -"","Alpaca Ball: Allstars","nvdec;status-playable","playable","2020-12-11 12:26:29.000" -"","Alphaset by POWGI","status-playable","playable","2020-12-15 15:15:15.000" -"","Alt-Frequencies","status-playable","playable","2020-12-15 19:01:33.000" -"","Alteric","status-playable","playable","2020-11-08 13:53:22.000" -"","Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz","status-playable","playable","2020-08-31 14:17:42.000" -"0100A8A00D27E000","Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version","status-playable","playable","2021-02-10 13:33:59.000" -"010045201487C000","Aluna: Sentinel of the Shards","status-playable;nvdec","playable","2022-10-25 22:17:03.000" -"","Alwa's Awakening","status-playable","playable","2020-10-13 11:52:01.000" -"","Alwa's Legacy","status-playable","playable","2020-12-13 13:00:57.000" -"","American Fugitive","nvdec;status-playable","playable","2021-01-04 20:45:11.000" -"010089D00A3FA000","American Ninja Warrior: Challenge","nvdec;status-playable","playable","2021-06-09 13:11:17.000" -"01003CC00D0BE000","Amnesia: Collection","status-playable","playable","2022-10-04 13:36:15.000" -"010041D00DEB2000","Amoeba Battle - Microscopic RTS Action","status-playable","playable","2021-05-06 13:33:41.000" -"0100B0C013912000","Among Us","status-menus;online;ldn-broken","menus","2021-09-22 15:20:17.000" -"010046500C8D2000","Among the Sleep - Enhanced Edition","nvdec;status-playable","playable","2021-06-03 15:06:25.000" -"01000FD00DF78000","AnShi","status-playable;nvdec;UE4","playable","2022-10-21 19:37:01.000" -"010050900E1C6000","Anarcute","status-playable","playable","2021-02-22 13:17:59.000" -"01009EE0111CC000","Ancestors Legacy","status-playable;nvdec;UE4","playable","2022-10-01 12:25:36.000" -"","Ancient Rush 2","UE4;crash;status-menus","menus","2020-07-14 14:58:47.000" -"0100AE000AEBC000","Angels of Death","nvdec;status-playable","playable","2021-02-22 14:17:15.000" -"010001E00A5F6000","AngerForce: Reloaded for Nintendo Switch","status-playable","playable","2022-07-21 10:37:17.000" -"0100F3500D05E000","Angry Bunnies: Colossal Carrot Crusade","status-playable;online-broken","playable","2022-09-04 14:53:26.000" -"","Angry Video Game Nerd I & II Deluxe","crash;status-ingame","ingame","2020-12-12 23:59:54.000" -"01007A400B3F8000","Anima Gate of Memories: The Nameless Chronicles","status-playable","playable","2021-06-14 14:33:06.000" -"010033F00B3FA000","Anima: Arcane Edition","nvdec;status-playable","playable","2021-01-26 16:55:51.000" -"0100706005B6A000","Anima: Gate of Memories","nvdec;status-playable","playable","2021-06-16 18:13:18.000" -"0100F38011CFE000","Animal Crossing New Horizons Island Transfer Tool","services;status-ingame;Needs Update;Incomplete","ingame","2022-12-07 13:51:19.000" -"01006F8002326000","Animal Crossing: New Horizons","gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug","ingame","2024-09-23 13:31:49.000" -"","Animal Fight Club","gpu;status-ingame","ingame","2020-12-13 13:13:33.000" -"","Animal Fun for Toddlers and Kids","services;status-boots","boots","2020-12-15 16:45:29.000" -"","Animal Hunter Z","status-playable","playable","2020-12-13 12:50:35.000" -"010033C0121DC000","Animal Pairs - Matching & Concentration Game for Toddlers & Kids","services;status-boots","boots","2021-11-29 23:43:14.000" -"010065B009B3A000","Animal Rivals Switch","status-playable","playable","2021-02-22 14:02:42.000" -"0100EFE009424000","Animal Super Squad","UE4;status-playable","playable","2021-04-23 20:50:50.000" -"","Animal Up","status-playable","playable","2020-12-13 15:39:02.000" -"","Animals for Toddlers","services;status-boots","boots","2020-12-15 17:27:27.000" -"","Animated Jigsaws Collection","nvdec;status-playable","playable","2020-12-15 15:58:34.000" -"0100A1900B5B8000","Animated Jigsaws: Beautiful Japanese Scenery DEMO","nvdec;status-playable","playable","2021-02-10 13:49:56.000" -"","Anime Studio Story","status-playable","playable","2020-12-15 18:14:05.000" -"01002B300EB86000","Anime Studio Story Demo","status-playable","playable","2021-02-10 14:50:39.000" -"0100E5A00FD38000","Animus: Harbinger","status-playable","playable","2022-09-13 22:09:20.000" -"","Ankh Guardian - Treasure of the Demon's Temple","status-playable","playable","2020-12-13 15:55:49.000" -"","Anode","status-playable","playable","2020-12-15 17:18:58.000" -"0100CB9018F5A000","Another Code: Recollection","gpu;status-ingame;crash","ingame","2024-09-06 05:58:52.000" -"","Another Sight","UE4;gpu;nvdec;status-ingame","ingame","2020-12-03 16:49:59.000" -"01003C300AAAE000","Another World","slow;status-playable","playable","2022-07-21 10:42:38.000" -"010054C00D842000","Anthill","services;status-menus;nvdec","menus","2021-11-18 09:25:25.000" -"0100596011E20000","Anti-Hero Bundle","status-playable;nvdec","playable","2022-10-21 20:10:30.000" -"","Antiquia Lost","status-playable","playable","2020-05-28 11:57:32.000" -"","Antventor","nvdec;status-playable","playable","2020-12-15 20:09:27.000" -"0100FA100620C000","Ao no Kanata no Four Rhythm","status-playable","playable","2022-07-21 10:50:42.000" -"0100990011866000","Aokana - Four Rhythms Across the Blue","status-playable","playable","2022-10-04 13:50:26.000" -"01005B100C268000","Ape Out","status-playable","playable","2022-09-26 19:04:47.000" -"","Aperion Cyberstorm","status-playable","playable","2020-12-14 00:40:16.000" -"01008CA00D71C000","Aperion Cyberstorm Demo","status-playable","playable","2021-02-10 15:53:21.000" -"","Apocalipsis","deadlock;status-menus","menus","2020-05-27 12:56:37.000" -"","Apocryph","gpu;status-ingame","ingame","2020-12-13 23:24:10.000" -"","Apparition","nvdec;slow;status-ingame","ingame","2020-12-13 23:57:04.000" -"","Aqua Lungers","crash;status-ingame","ingame","2020-12-14 11:25:57.000" -"0100D0D00516A000","Aqua Moto Racing Utopia","status-playable","playable","2021-02-21 21:21:00.000" -"010071800BA74000","Aragami: Shadow Edition","nvdec;status-playable","playable","2021-02-21 20:33:23.000" -"0100C7D00E6A0000","Arc of Alchemist","status-playable;nvdec","playable","2022-10-07 19:15:54.000" -"0100BE80097FA000","Arcade Archives 10-Yard Fight","online;status-playable","playable","2021-03-25 21:26:41.000" -"01005DD00BE08000","Arcade Archives ALPHA MISSION","online;status-playable","playable","2021-04-15 09:20:43.000" -"010083800DC70000","Arcade Archives ALPINE SKI","online;status-playable","playable","2021-04-15 09:28:46.000" -"010014F001DE2000","Arcade Archives ARGUS","online;status-playable","playable","2021-04-16 06:51:25.000" -"0100BEC00C7A2000","Arcade Archives ATHENA","online;status-playable","playable","2021-04-16 07:10:12.000" -"010014F001DE2000","Arcade Archives Armed F","online;status-playable","playable","2021-04-16 07:00:17.000" -"0100426001DE4000","Arcade Archives Atomic Robo-Kid","online;status-playable","playable","2021-04-16 07:20:29.000" -"0100192009824000","Arcade Archives BOMB JACK","online;status-playable","playable","2021-04-16 09:48:26.000" -"0100EDC00E35A000","Arcade Archives CLU CLU LAND","online;status-playable","playable","2021-04-16 10:00:42.000" -"0100BB1001DD6000","Arcade Archives CRAZY CLIMBER","online;status-playable","playable","2021-03-25 22:24:15.000" -"010007A00980C000","Arcade Archives City CONNECTION","online;status-playable","playable","2021-03-25 22:16:15.000" -"","Arcade Archives DONKEY KONG","Needs Update;crash;services;status-menus","menus","2021-03-24 18:18:43.000" -"0100F25001DD0000","Arcade Archives DOUBLE DRAGON","online;status-playable","playable","2021-03-25 22:44:34.000" -"01009E3001DDE000","Arcade Archives DOUBLE DRAGON II The Revenge","online;status-playable","playable","2021-04-12 16:05:29.000" -"0100496006EC8000","Arcade Archives FRONT LINE","online;status-playable","playable","2021-05-05 14:10:49.000" -"01009A4008A30000","Arcade Archives HEROIC EPISODE","online;status-playable","playable","2021-03-25 23:01:26.000" -"01007D200D3FC000","Arcade Archives ICE CLIMBER","online;status-playable","playable","2021-05-05 14:18:34.000" -"010049400C7A8000","Arcade Archives IKARI WARRIORS","online;status-playable","playable","2021-05-05 14:24:46.000" -"010008300C978000","Arcade Archives IMAGE FIGHT","online;status-playable","playable","2021-05-05 14:31:21.000" -"01000DB00980A000","Arcade Archives Ikki","online;status-playable","playable","2021-03-25 23:11:28.000" -"010010B008A36000","Arcade Archives Kid Niki Radical Ninja","audio;status-ingame;online","ingame","2022-07-21 11:02:04.000" -"0100E7C001DE0000","Arcade Archives Kid's Horehore Daisakusen","online;status-playable","playable","2021-04-12 16:21:29.000" -"","Arcade Archives LIFE FORCE","status-playable","playable","2020-09-04 13:26:25.000" -"0100755004608000","Arcade Archives MARIO BROS.","online;status-playable","playable","2021-03-26 11:31:32.000" -"01000BE001DD8000","Arcade Archives MOON CRESTA","online;status-playable","playable","2021-05-05 14:39:29.000" -"01003000097FE000","Arcade Archives MOON PATROL","online;status-playable","playable","2021-03-26 11:42:04.000" -"01003EF00D3B4000","Arcade Archives NINJA GAIDEN","audio;online;status-ingame","ingame","2021-04-12 16:27:53.000" -"01002F300D2C6000","Arcade Archives Ninja Spirit","online;status-playable","playable","2021-05-05 14:45:31.000" -"","Arcade Archives Ninja-Kid","online;status-playable","playable","2021-03-26 20:55:07.000" -"","Arcade Archives OMEGA FIGHTER","crash;services;status-menus","menus","2020-08-18 20:50:54.000" -"","Arcade Archives PLUS ALPHA","audio;status-ingame","ingame","2020-07-04 20:47:55.000" -"0100A6E00D3F8000","Arcade Archives POOYAN","online;status-playable","playable","2021-05-05 17:58:19.000" -"01000D200C7A4000","Arcade Archives PSYCHO SOLDIER","online;status-playable","playable","2021-05-05 18:02:19.000" -"01001530097F8000","Arcade Archives PUNCH-OUT!!","online;status-playable","playable","2021-03-25 22:10:55.000" -"0100FBA00E35C000","Arcade Archives ROAD FIGHTER","online;status-playable","playable","2021-05-05 18:09:17.000" -"010060000BF7C000","Arcade Archives ROUTE 16","online;status-playable","playable","2021-05-05 18:40:41.000" -"0100C2D00981E000","Arcade Archives RYGAR","online;status-playable","playable","2021-04-15 08:48:30.000" -"010081E001DD2000","Arcade Archives Renegade","status-playable;online","playable","2022-07-21 11:45:40.000" -"010069F008A38000","Arcade Archives STAR FORCE","online;status-playable","playable","2021-04-15 08:39:09.000" -"01007A4009834000","Arcade Archives Shusse Ozumo","online;status-playable","playable","2021-05-05 17:52:25.000" -"010008F00B054000","Arcade Archives Sky Skipper","online;status-playable","playable","2021-04-15 08:58:09.000" -"01008C900982E000","Arcade Archives Solomon's Key","online;status-playable","playable","2021-04-19 16:27:18.000" -"","Arcade Archives TERRA CRESTA","crash;services;status-menus","menus","2020-08-18 20:20:55.000" -"0100348001DE6000","Arcade Archives TERRA FORCE","online;status-playable","playable","2021-04-16 20:03:27.000" -"0100DFD016B7A000","Arcade Archives TETRIS THE GRAND MASTER","status-playable","playable","2024-06-23 01:50:29.000" -"0100DC000983A000","Arcade Archives THE NINJA WARRIORS","online;slow;status-ingame","ingame","2021-04-16 19:54:56.000" -"0100AF300D2E8000","Arcade Archives TIME PILOT","online;status-playable","playable","2021-04-16 19:22:31.000" -"010029D006ED8000","Arcade Archives Traverse USA","online;status-playable","playable","2021-04-15 08:11:06.000" -"010042200BE0C000","Arcade Archives URBAN CHAMPION","online;status-playable","playable","2021-04-16 10:20:03.000" -"01004EC00E634000","Arcade Archives VS. GRADIUS","online;status-playable","playable","2021-04-12 14:53:58.000" -"","Arcade Archives VS. SUPER MARIO BROS.","online;status-playable","playable","2021-04-08 14:48:11.000" -"01001B000D8B6000","Arcade Archives WILD WESTERN","online;status-playable","playable","2021-04-16 10:11:36.000" -"010050000D6C4000","Arcade Classics Anniversary Collection","status-playable","playable","2021-06-03 13:55:10.000" -"","Arcade Spirits","status-playable","playable","2020-06-21 11:45:03.000" -"0100E680149DC000","Arcaea","status-playable","playable","2023-03-16 19:31:21.000" -"0100E53013E1C000","Arcanoid Breakout","status-playable","playable","2021-01-25 23:28:02.000" -"","Archaica: Path of LightInd","crash;status-nothing","nothing","2020-10-16 13:22:26.000" -"","Area 86","status-playable","playable","2020-12-16 16:45:52.000" -"0100D4A00B284000","Ark: Survival Evolved","gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested","ingame","2024-04-16 00:53:56.000" -"","Arkanoid vs Space Invaders","services;status-ingame","ingame","2021-01-21 12:50:30.000" -"010069A010606000","Arkham Horror: Mother's Embrace","nvdec;status-playable","playable","2021-04-19 15:40:55.000" -"","Armed 7 DX","status-playable","playable","2020-12-14 11:49:56.000" -"","Armello","nvdec;status-playable","playable","2021-01-07 11:43:26.000" -"0100184011B32000","Arrest of a stone Buddha","status-nothing;crash","nothing","2022-12-07 16:55:00.000" -"","Arrog","status-playable","playable","2020-12-16 17:20:50.000" -"01006AA013086000","Art Sqool","status-playable;nvdec","playable","2022-10-16 20:42:37.000" -"01008EC006BE2000","Art of Balance","gpu;status-ingame;ldn-works","ingame","2022-07-21 17:13:57.000" -"010062F00CAE2000","Art of Balance DEMO","gpu;slow;status-ingame","ingame","2021-02-10 17:17:12.000" -"","Artifact Adventure Gaiden DX","status-playable","playable","2020-12-16 17:49:25.000" -"0100C2500CAB6000","Ary and the Secret of Seasons","status-playable","playable","2022-10-07 20:45:09.000" -"","Asemblance","UE4;gpu;status-ingame","ingame","2020-12-16 18:01:23.000" -"","Ash of Gods: Redemption","deadlock;status-nothing","nothing","2020-08-10 18:08:32.000" -"010027B00E40E000","Ashen","status-playable;nvdec;online-broken;UE4","playable","2022-09-17 12:19:14.000" -"01007B000C834000","Asphalt 9: Legends","services;status-menus;crash;online-broken","menus","2022-12-07 13:28:29.000" -"01007F600B134000","Assassin's Creed III Remastered","status-boots;nvdec","boots","2024-06-25 20:12:11.000" -"010044700DEB0000","Assassin's Creed The Rebel Collection","gpu;status-ingame","ingame","2024-05-19 07:58:56.000" -"0100DF200B24C000","Assault Android Cactus+","status-playable","playable","2021-06-03 13:23:55.000" -"","Assault Chainguns KM","crash;gpu;status-ingame","ingame","2020-12-14 12:48:34.000" -"0100C5E00E540000","Assault on Metaltron Demo","status-playable","playable","2021-02-10 19:48:06.000" -"010057A00C1F6000","Astebreed","status-playable","playable","2022-07-21 17:33:54.000" -"010050400BD38000","Asterix & Obelix XXL 2","deadlock;status-ingame;nvdec","ingame","2022-07-21 17:54:14.000" -"010081500EA1E000","Asterix & Obelix XXL3: The Crystal Menhir","gpu;status-ingame;nvdec;regression","ingame","2022-11-28 14:19:23.000" -"0100F46011B50000","Asterix & Obelix XXL: Romastered","gpu;status-ingame;nvdec;opengl","ingame","2023-08-16 21:22:06.000" -"01007300020FA000","Astral Chain","status-playable","playable","2024-07-17 18:02:19.000" -"","Astro Bears Party","status-playable","playable","2020-05-28 11:21:58.000" -"0100F0400351C000","Astro Duel Deluxe","32-bit;status-playable","playable","2021-06-03 11:21:48.000" -"","AstroWings SpaceWar","status-playable","playable","2020-12-14 13:10:44.000" -"0100B80010C48000","Astrologaster","cpu;status-nothing;32-bit;crash","nothing","2023-06-28 15:39:31.000" -"010099801870E000","Atari 50 The Anniversary Celebration","slow;status-playable","playable","2022-11-14 19:42:10.000" -"0100D9D00EE8C000","Atelier Ayesha: The Alchemist of Dusk DX","status-menus;crash;nvdec;Needs Update","menus","2021-11-24 07:29:54.000" -"0100E5600EE8E000","Atelier Escha & Logy: Alchemists Of The Dusk Sky DX","status-playable;nvdec","playable","2022-11-20 16:01:41.000" -"010023201421E000","Atelier Firis: The Alchemist and the Mysterious Journey DX","gpu;status-ingame;nvdec","ingame","2022-10-25 22:46:19.000" -"","Atelier Lulua ~ The Scion of Arland ~","nvdec;status-playable","playable","2020-12-16 14:29:19.000" -"010009900947A000","Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings","nvdec;status-playable","playable","2021-06-03 18:37:01.000" -"","Atelier Meruru ~ The Apprentice of Arland ~ DX","nvdec;status-playable","playable","2020-06-12 00:50:48.000" -"010088600C66E000","Atelier Rorona - The Alchemist of Arland - DX","nvdec;status-playable","playable","2021-04-08 15:33:15.000" -"01002D700B906000","Atelier Rorona Arland no Renkinjutsushi DX (JP)","status-playable;nvdec","playable","2022-12-02 17:26:54.000" -"01009A9012022000","Atelier Ryza 2: Lost Legends & the Secret Fairy","status-playable","playable","2022-10-16 21:06:06.000" -"0100D1900EC80000","Atelier Ryza: Ever Darkness & the Secret Hideout","status-playable","playable","2023-10-15 16:36:50.000" -"","Atelier Shallie: Alchemists of the Dusk Sea DX","nvdec;status-playable","playable","2020-11-25 20:54:12.000" -"010082A01538E000","Atelier Sophie 2: The Alchemist of the Mysterious Dream","status-ingame;crash","ingame","2022-12-01 04:34:03.000" -"01001A5014220000","Atelier Sophie: The Alchemist of the Mysterious Book DX","status-playable","playable","2022-10-25 23:06:20.000" -"","Atelier Totori ~ The Adventurer of Arland ~ DX","nvdec;status-playable","playable","2020-06-12 01:04:56.000" -"01005FE00EC4E000","Atomic Heist","status-playable","playable","2022-10-16 21:24:32.000" -"0100AD30095A4000","Atomicrops","status-playable","playable","2022-08-06 10:05:07.000" -"","Attack of the Toy Tanks","slow;status-ingame","ingame","2020-12-14 12:59:12.000" -"","Attack on Titan 2","status-playable","playable","2021-01-04 11:40:01.000" -"","Automachef","status-playable","playable","2020-12-16 19:51:25.000" -"01006B700EA6A000","Automachef Demo","status-playable","playable","2021-02-10 20:35:37.000" -"","Aviary Attorney: Definitive Edition","status-playable","playable","2020-08-09 20:32:12.000" -"","Avicii Invector","status-playable","playable","2020-10-25 12:12:56.000" -"","AvoCuddle","status-playable","playable","2020-09-02 14:50:13.000" -"0100085012D64000","Awakening of Cthulhu","UE4;status-playable","playable","2021-04-26 13:03:07.000" -"01002F1005F3C000","Away: Journey to the Unexpected","status-playable;nvdec;vulkan-backend-bug","playable","2022-11-06 15:31:04.000" -"","Awesome Pea","status-playable","playable","2020-10-11 12:39:23.000" -"010023800D3F2000","Awesome Pea (Demo)","status-playable","playable","2021-02-10 21:48:21.000" -"0100B7D01147E000","Awesome Pea 2","status-playable","playable","2022-10-01 12:34:19.000" -"","Awesome Pea 2 (Demo) - 0100D2011E28000","crash;status-nothing","nothing","2021-02-10 22:08:27.000" -"0100DA3011174000","Axes","status-playable","playable","2021-04-08 13:01:58.000" -"","Axiom Verge","status-playable","playable","2020-10-20 01:07:18.000" -"010075400DEC6000","Ayakashi koi gikyoku Free Trial","status-playable","playable","2021-02-10 22:22:11.000" -"01006AF012FC8000","Azur Lane: Crosswave","UE4;nvdec;status-playable","playable","2021-04-05 15:15:25.000" -"","Azuran Tales: Trials","status-playable","playable","2020-08-12 15:23:07.000" -"01006FB00990E000","Azure Reflections","nvdec;online;status-playable","playable","2021-04-08 13:18:25.000" -"01004E90149AA000","Azure Striker GUNVOLT 3","status-playable","playable","2022-08-10 13:46:49.000" -"0100192003FA4000","Azure Striker Gunvolt: STRIKER PACK","32-bit;status-playable","playable","2024-02-10 23:51:21.000" -"","Azurebreak Heroes","status-playable","playable","2020-12-16 21:26:17.000" -"01009B901145C000","B.ARK","status-playable;nvdec","playable","2022-11-17 13:35:02.000" -"","BAFL","status-playable","playable","2021-01-13 08:32:51.000" -"","BATTLESLOTHS","status-playable","playable","2020-10-03 08:32:22.000" -"","BATTLESTAR GALACTICA Deadlock","nvdec;status-playable","playable","2020-06-27 17:35:44.000" -"","BATTLLOON","status-playable","playable","2020-12-17 15:48:23.000" -"","BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~","crash;status-menus","menus","2020-10-04 06:12:08.000" -"","BIG-Bobby-Car - The Big Race","slow;status-playable","playable","2020-12-10 14:25:06.000" -"","BINGO for Nintendo Switch","status-playable","playable","2020-07-23 16:17:36.000" -"0100E62012D3C000","BIT.TRIP RUNNER","status-playable","playable","2022-10-17 14:23:24.000" -"01000AD012D3A000","BIT.TRIP VOID","status-playable","playable","2022-10-17 14:31:23.000" -"0100C4400CB7C000","BLADE ARCUS Rebellion From Shining","status-playable","playable","2022-07-17 18:52:28.000" -"","BLAZBLUE CENTRALFICTION Special Edition","nvdec;status-playable","playable","2020-12-15 23:50:04.000" -"","BOX Align","crash;services;status-nothing","nothing","2020-04-03 17:26:56.000" -"","BOXBOY! + BOXGIRL!","status-playable","playable","2020-11-08 01:11:54.000" -"0100B7200E02E000","BOXBOY! + BOXGIRL! Demo","demo;status-playable","playable","2021-02-13 14:59:08.000" -"","BQM BlockQuest Maker","online;status-playable","playable","2020-07-31 20:56:50.000" -"01003DD00D658000","BULLETSTORM: DUKE OF SWITCH EDITION","status-playable;nvdec","playable","2022-03-03 08:30:24.000" -"","BUSTAFELLOWS","nvdec;status-playable","playable","2020-10-17 20:04:41.000" -"","BUTCHER","status-playable","playable","2021-01-11 18:50:17.000" -"01002CD00A51C000","Baba Is You","status-playable","playable","2022-07-17 05:36:54.000" -"","Back to Bed","nvdec;status-playable","playable","2020-12-16 20:52:04.000" -"0100FEA014316000","Backworlds","status-playable","playable","2022-10-25 23:20:34.000" -"0100EAF00E32E000","BaconMan","status-menus;crash;nvdec","menus","2021-11-20 02:36:21.000" -"01000CB00D094000","Bad Dream: Coma","deadlock;status-boots","boots","2023-08-03 00:54:18.000" -"0100B3B00D81C000","Bad Dream: Fever","status-playable","playable","2021-06-04 18:33:12.000" -"","Bad Dudes","status-playable","playable","2020-12-10 12:30:56.000" -"0100E98006F22000","Bad North","status-playable","playable","2022-07-17 13:44:25.000" -"","Bad North Demo","status-playable","playable","2021-02-10 22:48:38.000" -"010076B011EC8000","Baila Latino","status-playable","playable","2021-04-14 16:40:24.000" -"","Bakugan Champions of Vestroia","status-playable","playable","2020-11-06 19:07:39.000" -"01008260138C4000","Bakumatsu Renka SHINSENGUMI","status-playable","playable","2022-10-25 23:37:31.000" -"0100438012EC8000","Balan Wonderworld","status-playable;nvdec;UE4","playable","2022-10-22 13:08:43.000" -"0100E48013A34000","Balan Wonderworld Demo","gpu;services;status-ingame;UE4;demo","ingame","2023-02-16 20:05:07.000" -"0100CD801CE5E000","Balatro","status-ingame","ingame","2024-04-21 02:01:53.000" -"010010A00DA48000","Baldur's Gate and Baldur's Gate II: Enhanced Editions","32-bit;status-playable","playable","2022-09-12 23:52:15.000" -"0100BC400FB64000","Balthazar's Dreams","status-playable","playable","2022-09-13 00:13:22.000" -"01008D30128E0000","Bamerang","status-playable","playable","2022-10-26 00:29:39.000" -"","Bang Dream Girls Band Party for Nintendo Switch","status-playable","playable","2021-09-19 03:06:58.000" -"","Banner Saga 2","crash;status-boots","boots","2021-01-13 08:56:09.000" -"","Banner Saga 3","slow;status-boots","boots","2021-01-11 16:53:57.000" -"0100CE800B94A000","Banner Saga Trilogy","slow;status-playable","playable","2024-03-06 11:25:20.000" -"010013C010C5C000","Banner of the Maid","status-playable","playable","2021-06-14 15:23:37.000" -"","Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos","status-playable","playable","2020-07-15 05:06:29.000" -"","Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo","nvdec;status-playable","playable","2020-12-17 11:43:10.000" -"","Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive","status-playable","playable","2020-12-17 11:22:50.000" -"0100D3000AEC2000","Baobabs Mausoleum: DEMO","status-playable","playable","2021-02-10 22:59:25.000" -"01003350102E2000","Barbarous! Tavern of Emyr","status-playable","playable","2022-10-16 21:50:24.000" -"0100F7E01308C000","Barbearian","Needs Update;gpu;status-ingame","ingame","2021-06-28 16:27:50.000" -"010039C0106C6000","Baron: Fur Is Gonna Fly","status-boots;crash","boots","2022-02-06 02:05:43.000" -"","Barry Bradford's Putt Panic Party","nvdec;status-playable","playable","2020-06-17 01:08:34.000" -"01004860080A0000","Baseball Riot","status-playable","playable","2021-06-04 18:07:27.000" -"0100E3100450E000","Bass Pro Shops: The Strike - Championship Edition","gpu;status-boots;32-bit","boots","2022-12-09 15:58:16.000" -"010038600B27E000","Bastion","status-playable","playable","2022-02-15 14:15:24.000" -"","Batbarian: Testament of the Primordials","status-playable","playable","2020-12-17 12:00:59.000" -"0100C07018CA6000","Baten Kaitos I & II HD Remaster (Europe/USA)","services;status-boots;Needs Update","boots","2023-10-01 00:44:32.000" -"0100F28018CA4000","Baten Kaitos I & II HD Remaster (Japan)","services;status-boots;Needs Update","boots","2023-10-24 23:11:54.000" -"","Batman - The Telltale Series","nvdec;slow;status-playable","playable","2021-01-11 18:19:35.000" -"01003f00163ce000","Batman: Arkham City","status-playable","playable","2024-09-11 00:30:19.000" -"0100ACD0163D0000","Batman: Arkham Knight","gpu;status-ingame;mac-bug","ingame","2024-06-25 20:24:42.000" -"","Batman: The Enemy Within","crash;status-nothing","nothing","2020-10-16 05:49:27.000" -"0100747011890000","Battle Axe","status-playable","playable","2022-10-26 00:38:01.000" -"","Battle Chasers: Nightwar","nvdec;slow;status-playable","playable","2021-01-12 12:27:34.000" -"","Battle Chef Brigade","status-playable","playable","2021-01-11 14:16:28.000" -"0100DBB00CAEE000","Battle Chef Brigade Demo","status-playable","playable","2021-02-10 23:15:07.000" -"0100A3B011EDE000","Battle Hunters","gpu;status-ingame","ingame","2022-11-12 09:19:17.000" -"","Battle Planet - Judgement Day","status-playable","playable","2020-12-17 14:06:20.000" -"","Battle Princess Madelyn","status-playable","playable","2021-01-11 13:47:23.000" -"0100A7500DF64000","Battle Princess Madelyn Royal Edition","status-playable","playable","2022-09-26 19:14:49.000" -"010099B00E898000","Battle Supremacy - Evolution","gpu;status-boots;nvdec","boots","2022-02-17 09:02:50.000" -"0100DEB00D5A8000","Battle Worlds: Kronos","nvdec;status-playable","playable","2021-06-04 17:48:02.000" -"","Battle of Kings","slow;status-playable","playable","2020-12-17 12:45:23.000" -"0100650010DD4000","Battleground","status-ingame;crash","ingame","2021-09-06 11:53:23.000" -"01006D800A988000","Battlezone Gold Edition","gpu;ldn-untested;online;status-boots","boots","2021-06-04 18:36:05.000" -"010076F0049A2000","Bayonetta","status-playable;audout","playable","2022-11-20 15:51:59.000" -"01007960049A0000","Bayonetta 2","status-playable;nvdec;ldn-works;LAN","playable","2022-11-26 03:46:09.000" -"01004A4010FEA000","Bayonetta 3","gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC","ingame","2024-09-28 14:34:33.000" -"010002801A3FA000","Bayonetta Origins Cereza and the Lost Demon Demo","gpu;status-ingame;demo","ingame","2024-02-17 06:06:28.000" -"0100CF5010FEC000","Bayonetta Origins: Cereza and the Lost Demon","gpu;status-ingame","ingame","2024-02-27 01:39:49.000" -"","Be-A Walker","slow;status-ingame","ingame","2020-09-02 15:00:31.000" -"010095C00406C000","Beach Buggy Racing","online;status-playable","playable","2021-04-13 23:16:50.000" -"010020700DE04000","Bear With Me - The Lost Robots","nvdec;status-playable","playable","2021-02-27 14:20:10.000" -"010024200E97E800","Bear With Me - The Lost Robots Demo","nvdec;status-playable","playable","2021-02-12 22:38:12.000" -"","Bear's Restaurant - 0100CE014A4E000","status-playable","playable","2024-08-11 21:26:59.000" -"","Beat Cop","status-playable","playable","2021-01-06 19:26:48.000" -"01002D20129FC000","Beat Me!","status-playable;online-broken","playable","2022-10-16 21:59:26.000" -"01006B0014590000","Beautiful Desolation","gpu;status-ingame;nvdec","ingame","2022-10-26 10:34:38.000" -"","Bee Simulator","UE4;crash;status-boots","boots","2020-07-15 12:13:13.000" -"010018F007786000","BeeFense BeeMastered","status-playable","playable","2022-11-17 15:38:12.000" -"","Behold the Kickmen","status-playable","playable","2020-06-27 12:49:45.000" -"","Beholder","status-playable","playable","2020-10-16 12:48:58.000" -"01006E1004404000","Ben 10","nvdec;status-playable","playable","2021-02-26 14:08:35.000" -"01009CD00E3AA000","Ben 10: Power Trip","status-playable;nvdec","playable","2022-10-09 10:52:12.000" -"010074500BBC4000","Bendy and the Ink Machine","status-playable","playable","2023-05-06 20:35:39.000" -"010021F00C1C0000","Bertram Fiddle Episode 2: A Bleaker Predicklement","nvdec;status-playable","playable","2021-02-22 14:56:37.000" -"010068600AD16000","Beyblade Burst Battle Zero","services;status-menus;crash;Needs Update","menus","2022-11-20 15:48:32.000" -"010056500CAD8000","Beyond Enemy Lines: Covert Operations","status-playable;UE4","playable","2022-10-01 13:11:50.000" -"0100B8F00DACA000","Beyond Enemy Lines: Essentials","status-playable;nvdec;UE4","playable","2022-09-26 19:48:16.000" -"","Bibi & Tina - Adventures with Horses","nvdec;slow;status-playable","playable","2021-01-13 08:58:09.000" -"010062400E69C000","Bibi & Tina at the horse farm","status-playable","playable","2021-04-06 16:31:39.000" -"","Bibi Blocksberg - Big Broom Race 3","status-playable","playable","2021-01-11 19:07:16.000" -"","Big Buck Hunter Arcade","nvdec;status-playable","playable","2021-01-12 20:31:39.000" -"010088100C35E000","Big Crown: Showdown","status-menus;nvdec;online;ldn-untested","menus","2022-07-17 18:25:32.000" -"0100A42011B28000","Big Dipper","status-playable","playable","2021-06-14 15:08:19.000" -"01002FA00DE72000","Big Drunk Satanic Massacre","status-playable","playable","2021-03-04 21:28:22.000" -"","Big Pharma","status-playable","playable","2020-07-14 15:27:30.000" -"010057700FF7C000","Billion Road","status-playable","playable","2022-11-19 15:57:43.000" -"01002620102C6000","BioShock 2 Remastered","services;status-nothing","nothing","2022-10-29 14:39:22.000" -"0100D560102C8000","BioShock Infinite: The Complete Edition","services-horizon;status-nothing;crash","nothing","2024-08-11 21:35:01.000" -"0100AD10102B2000","BioShock Remastered","services-horizon;status-boots;crash;Needs Update","boots","2024-06-06 01:08:52.000" -"01004BA017CD6000","Biomutant","status-ingame;crash","ingame","2024-05-16 15:46:36.000" -"010053B0117F8000","Biped","status-playable;nvdec","playable","2022-10-01 13:32:58.000" -"01001B700B278000","Bird Game +","status-playable;online","playable","2022-07-17 18:41:57.000" -"0100B6B012FF4000","Birds and Blocks Demo","services;status-boots;demo","boots","2022-04-10 04:53:03.000" -"","Bite the Bullet","status-playable","playable","2020-10-14 23:10:11.000" -"010026E0141C8000","Bitmaster","status-playable","playable","2022-12-13 14:05:51.000" -"","Biz Builder Delux","slow;status-playable","playable","2020-12-15 21:36:25.000" -"0100DD1014AB8000","Black Book","status-playable;nvdec","playable","2022-12-13 16:38:53.000" -"010049000B69E000","Black Future '88","status-playable;nvdec","playable","2022-09-13 11:24:37.000" -"01004BE00A682000","Black Hole Demo","status-playable","playable","2021-02-12 23:02:17.000" -"0100C3200E7E6000","Black Legend","gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-10-22 12:54:48.000" -"","Blackjack Hands","status-playable","playable","2020-11-30 14:04:51.000" -"0100A0A00E660000","Blackmoor2","status-playable;online-broken","playable","2022-09-26 20:26:34.000" -"010032000EA2C000","Blacksad: Under the Skin","status-playable","playable","2022-09-13 11:38:04.000" -"01006B400C178000","Blacksea Odyssey","status-playable;nvdec","playable","2022-10-16 22:14:34.000" -"010068E013450000","Blacksmith of the Sand Kingdom","status-playable","playable","2022-10-16 22:37:44.000" -"0100EA1018A2E000","Blade Assault","audio;status-nothing","nothing","2024-04-29 14:32:50.000" -"01009CC00E224000","Blade II The Return of Evil","audio;status-ingame;crash;UE4","ingame","2021-11-14 02:49:59.000" -"01005950022EC000","Blade Strangers","status-playable;nvdec","playable","2022-07-17 19:02:43.000" -"0100DF0011A6A000","Bladed Fury","status-playable","playable","2022-10-26 11:36:26.000" -"0100CFA00CC74000","Blades of Time","deadlock;status-boots;online","boots","2022-07-17 19:19:58.000" -"01006CC01182C000","Blair Witch","status-playable;nvdec;UE4","playable","2022-10-01 14:06:16.000" -"010039501405E000","Blanc","gpu;slow;status-ingame","ingame","2023-02-22 14:00:13.000" -"0100698009C6E000","Blasphemous","nvdec;status-playable","playable","2021-03-01 12:15:31.000" -"0100302010338000","Blasphemous Demo","status-playable","playable","2021-02-12 23:49:56.000" -"0100225000FEE000","Blaster Master Zero","32-bit;status-playable","playable","2021-03-05 13:22:33.000" -"01005AA00D676000","Blaster Master Zero 2","status-playable","playable","2021-04-08 15:22:59.000" -"010025B002E92000","Blaster Master Zero DEMO","status-playable","playable","2021-02-12 23:59:06.000" -"","BlazBlue: Cross Tag Battle","nvdec;online;status-playable","playable","2021-01-05 20:29:37.000" -"","Blazing Beaks","status-playable","playable","2020-06-04 20:37:06.000" -"","Blazing Chrome","status-playable","playable","2020-11-16 04:56:54.000" -"010091700EA2A000","Bleep Bloop DEMO","nvdec;status-playable","playable","2021-02-13 00:20:53.000" -"010089D011310000","Blind Men","audout;status-playable","playable","2021-02-20 14:15:38.000" -"0100743013D56000","Blizzard Arcade Collection","status-playable;nvdec","playable","2022-08-03 19:37:26.000" -"0100F3500A20C000","BlobCat","status-playable","playable","2021-04-23 17:09:30.000" -"0100E1C00DB6C000","Block-a-Pix Deluxe Demo","status-playable","playable","2021-02-13 00:37:39.000" -"0100C6A01AD56000","Bloo Kid","status-playable","playable","2024-05-01 17:18:04.000" -"010055900FADA000","Bloo Kid 2","status-playable","playable","2024-05-01 17:16:57.000" -"","Blood & Guts Bundle","status-playable","playable","2020-06-27 12:57:35.000" -"01007E700D17E000","Blood Waves","gpu;status-ingame","ingame","2022-07-18 13:04:46.000" -"","Blood will be Spilled","nvdec;status-playable","playable","2020-12-17 03:02:03.000" -"","Bloodstained: Curse of the Moon","status-playable","playable","2020-09-04 10:42:17.000" -"","Bloodstained: Curse of the Moon 2","status-playable","playable","2020-09-04 10:56:27.000" -"010025A00DF2A000","Bloodstained: Ritual of the Night","status-playable;nvdec;UE4","playable","2022-07-18 14:27:35.000" -"0100E510143EC000","Bloody Bunny : The Game","status-playable;nvdec;UE4","playable","2022-10-22 13:18:55.000" -"0100B8400A1C6000","Bloons TD 5","Needs Update;audio;gpu;services;status-boots","boots","2021-04-18 23:02:46.000" -"0100C1000706C000","Blossom Tales","status-playable","playable","2022-07-18 16:43:07.000" -"01000EB01023E000","Blossom Tales Demo","status-playable","playable","2021-02-13 14:22:53.000" -"010073B010F6E000","Blue Fire","status-playable;UE4","playable","2022-10-22 14:46:11.000" -"0100721013510000","Body of Evidence","status-playable","playable","2021-04-25 22:22:11.000" -"0100AD1010CCE000","Bohemian Killing","status-playable;vulkan-backend-bug","playable","2022-09-26 22:41:37.000" -"010093700ECEC000","Boku to Nurse no Kenshuu Nisshi","status-playable","playable","2022-11-21 20:38:34.000" -"01001D900D9AC000","Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)","slow;status-ingame;crash;Needs Update","ingame","2022-04-24 22:46:04.000" -"0100317014B7C000","Bomb Rush Cyberfunk","status-playable","playable","2023-09-28 19:51:57.000" -"01007900080B6000","Bomber Crew","status-playable","playable","2021-06-03 14:21:28.000" -"0100A1F012948000","Bomber Fox","nvdec;status-playable","playable","2021-04-19 17:58:13.000" -"010087300445A000","Bombslinger","services;status-menus","menus","2022-07-19 12:53:15.000" -"01007A200F452000","Book of Demons","status-playable","playable","2022-09-29 12:03:43.000" -"","Bookbound Brigade","status-playable","playable","2020-10-09 14:30:29.000" -"","Boom Blaster","status-playable","playable","2021-03-24 10:55:56.000" -"010081A00EE62000","Boomerang Fu","status-playable","playable","2024-07-28 01:12:41.000" -"010069F0135C4000","Boomerang Fu Demo Version","demo;status-playable","playable","2021-02-13 14:38:13.000" -"010096F00FF22000","Borderlands 2: Game of the Year Edition","status-playable","playable","2022-04-22 18:35:07.000" -"01009970122E4000","Borderlands 3","gpu;status-ingame","ingame","2024-07-15 04:38:14.000" -"010064800F66A000","Borderlands: Game of the Year Edition","slow;status-ingame;online-broken;ldn-untested","ingame","2023-07-23 21:10:36.000" -"010007400FF24000","Borderlands: The Pre-Sequel Ultimate Edition","nvdec;status-playable","playable","2021-06-09 20:17:10.000" -"01008E500AFF6000","Boreal Blade","gpu;ldn-untested;online;status-ingame","ingame","2021-06-11 15:37:14.000" -"010092C013FB8000","Boris The Rocket","status-playable","playable","2022-10-26 13:23:09.000" -"010076F00EBE4000","Bossgard","status-playable;online-broken","playable","2022-10-04 14:21:13.000" -"010069B00EAC8000","Bot Vice Demo","crash;demo;status-ingame","ingame","2021-02-13 14:52:42.000" -"","Bouncy Bob 2","status-playable","playable","2020-07-14 16:51:53.000" -"0100E1200DC1A000","Bounty Battle","status-playable;nvdec","playable","2022-10-04 14:40:51.000" -"","Bow to Blood: Last Captain Standing","slow;status-playable","playable","2020-10-23 10:51:21.000" -"0100E87017D0E000","Bramble The Mountain King","services-horizon;status-playable","playable","2024-03-06 09:32:17.000" -"","Brave Dungeon + Dark Witch's Story: COMBAT","status-playable","playable","2021-01-12 21:06:34.000" -"010081501371E000","BraveMatch","status-playable;UE4","playable","2022-10-26 13:32:15.000" -"01006DC010326000","Bravely Default II","gpu;status-ingame;crash;Needs Update;UE4","ingame","2024-04-26 06:11:26.000" -"0100B6801137E000","Bravely Default II Demo","gpu;status-ingame;crash;UE4;demo","ingame","2022-09-27 05:39:47.000" -"0100F60017D4E000","Bravery and Greed","gpu;deadlock;status-boots","boots","2022-12-04 02:23:47.000" -"","Brawl","nvdec;slow;status-playable","playable","2020-06-04 14:23:18.000" -"010068F00F444000","Brawl Chess","status-playable;nvdec","playable","2022-10-26 13:59:17.000" -"0100C6800B934000","Brawlhalla","online;opengl;status-playable","playable","2021-06-03 18:26:09.000" -"010060200A4BE000","Brawlout","ldn-untested;online;status-playable","playable","2021-06-04 17:35:35.000" -"0100C1B00E1CA000","Brawlout Demo","demo;status-playable","playable","2021-02-13 22:46:53.000" -"010022C016DC8000","Breakout: Recharged","slow;status-ingame","ingame","2022-11-06 15:32:57.000" -"01000AA013A5E000","Breathedge","UE4;nvdec;status-playable","playable","2021-05-06 15:44:28.000" -"","Breathing Fear","status-playable","playable","2020-07-14 15:12:29.000" -"","Brick Breaker","crash;status-ingame","ingame","2020-12-15 17:03:59.000" -"","Brick Breaker","nvdec;online;status-playable","playable","2020-12-15 18:26:23.000" -"","Bridge 3","status-playable","playable","2020-10-08 20:47:24.000" -"","Bridge Constructor: The Walking Dead","gpu;slow;status-ingame","ingame","2020-12-11 17:31:32.000" -"010011000EA7A000","Brigandine: The Legend of Runersia","status-playable","playable","2021-06-20 06:52:25.000" -"0100703011258000","Brigandine: The Legend of Runersia Demo","status-playable","playable","2021-02-14 14:44:10.000" -"01000BF00BE40000","Bring Them Home","UE4;status-playable","playable","2021-04-12 14:14:43.000" -"010060A00B53C000","Broforce","ldn-untested;online;status-playable","playable","2021-05-28 12:23:38.000" -"0100EDD0068A6000","Broken Age","status-playable","playable","2021-06-04 17:40:32.000" -"","Broken Lines","status-playable","playable","2020-10-16 00:01:37.000" -"01001E60085E6000","Broken Sword 5 - the Serpent's Curse","status-playable","playable","2021-06-04 17:28:59.000" -"0100F19011226000","Brotherhood United Demo","demo;status-playable","playable","2021-02-14 21:10:57.000" -"01000D500D08A000","Brothers: A Tale of Two Sons","status-playable;nvdec;UE4","playable","2022-07-19 14:02:22.000" -"","Brunch Club","status-playable","playable","2020-06-24 13:54:07.000" -"010010900F7B4000","Bubble Bobble 4 Friends","nvdec;status-playable","playable","2021-06-04 15:27:55.000" -"0100DBE00C554000","Bubsy: Paws on Fire!","slow;status-ingame","ingame","2023-08-24 02:44:51.000" -"","Bucket Knight","crash;status-ingame","ingame","2020-09-04 13:11:24.000" -"0100F1B010A90000","Bucket Knight demo","demo;status-playable","playable","2021-02-14 21:23:09.000" -"01000D200AC0C000","Bud Spencer & Terence Hill - Slaps and Beans","status-playable","playable","2022-07-17 12:37:00.000" -"","Bug Fables","status-playable","playable","2020-06-09 11:27:00.000" -"","BurgerTime Party!","slow;status-playable","playable","2020-11-21 14:11:53.000" -"01005780106E8000","BurgerTime Party! Demo","demo;status-playable","playable","2021-02-14 21:34:16.000" -"","Buried Stars","status-playable","playable","2020-09-07 14:11:58.000" -"0100DBF01000A000","Burnout Paradise Remastered","nvdec;online;status-playable","playable","2021-06-13 02:54:46.000" -"","Bury me, my Love","status-playable","playable","2020-11-07 12:47:37.000" -"010030D012FF6000","Bus Driver Simulator","status-playable","playable","2022-10-17 13:55:27.000" -"0100F6400A77E000","CAPCOM BELT ACTION COLLECTION","status-playable;online;ldn-untested","playable","2022-07-21 20:51:23.000" -"0100EAE010560000","CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS","status-playable;online-broken;vulkan-backend-bug","playable","2022-10-09 11:20:50.000" -"01002320137CC000","CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION","slow;status-playable","playable","2021-02-14 22:45:35.000" -"","CARRION","crash;status-nothing","nothing","2020-08-13 17:15:12.000" -"0100C4C0132F8000","CASE 2: Animatronics Survival","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-09 11:45:03.000" -"01007600115CE000","CHAOS CODE -NEW SIGN OF CATASTROPHE-","status-boots;crash;nvdec","boots","2022-04-04 12:24:21.000" -"0100957016B90000","CHAOS;HEAD NOAH","status-playable","playable","2022-06-02 22:57:19.000" -"0100A3A00CC7E000","CLANNAD","status-playable","playable","2021-06-03 17:01:02.000" -"","CLANNAD Side Stories - 01007B01372C000","status-playable","playable","2022-10-26 15:03:04.000" -"01002E700C366000","COCOON","gpu;status-ingame","ingame","2024-03-06 11:33:08.000" -"","CODE SHIFTER","status-playable","playable","2020-08-09 15:20:55.000" -"","COLLECTION of SaGA FINAL FANTASY LEGEND","status-playable","playable","2020-12-30 19:11:16.000" -"010015801308E000","CONARIUM","UE4;nvdec;status-playable","playable","2021-04-26 17:57:53.000" -"","CONTRA: ROGUE CORPS","crash;nvdec;regression;status-menus","menus","2021-01-07 13:23:35.000" -"0100B8200ECA6000","CONTRA: ROGUE CORPS Demo","gpu;status-ingame","ingame","2022-09-04 16:46:52.000" -"01003DD00F94A000","COTTOn Reboot! [ コットン リブート! ]","status-playable","playable","2022-05-24 16:29:24.000" -"01004BC0166CC000","CRISIS CORE –FINAL FANTASY VII– REUNION","status-playable","playable","2022-12-19 15:53:59.000" -"0100E24004510000","Cabela's: The Hunt - Championship Edition","status-menus;32-bit","menus","2022-07-21 20:21:25.000" -"01000B900D8B0000","Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda","slow;status-playable;nvdec","playable","2024-04-01 22:43:40.000" -"","Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600","demo;gpu;nvdec;status-ingame","ingame","2021-02-14 21:48:15.000" -"010060400D21C000","Cafeteria Nipponica Demo","demo;status-playable","playable","2021-02-14 22:11:35.000" -"","Café Enchanté","status-playable","playable","2020-11-13 14:54:25.000" -"0100699012F82000","Cake Bash Demo","crash;demo;status-ingame","ingame","2021-02-14 22:21:15.000" -"01004FD00D66A000","Caladrius Blaze","deadlock;status-nothing;nvdec","nothing","2022-12-07 16:44:37.000" -"","Calculation Castle: Greco's Ghostly Challenge ""Addition","32-bit;status-playable","playable","2020-11-01 23:40:11.000" -"","Calculation Castle: Greco's Ghostly Challenge ""Division","32-bit;status-playable","playable","2020-11-01 23:54:55.000" -"","Calculation Castle: Greco's Ghostly Challenge ""Multiplication","32-bit;status-playable","playable","2020-11-02 00:04:33.000" -"","Calculation Castle: Greco's Ghostly Challenge ""Subtraction","32-bit;status-playable","playable","2020-11-01 23:47:42.000" -"010004701504A000","Calculator","status-playable","playable","2021-06-11 13:27:20.000" -"010013A00E750000","Calico","status-playable","playable","2022-10-17 14:44:28.000" -"010046000EE40000","Call of Cthulhu","status-playable;nvdec;UE4","playable","2022-12-18 03:08:30.000" -"0100B4700BFC6000","Call of Juarez: Gunslinger","gpu;status-ingame;nvdec","ingame","2022-09-17 16:49:46.000" -"0100593008BDC000","Can't Drive This","status-playable","playable","2022-10-22 14:55:17.000" -"","Candle - The Power of the Flame","nvdec;status-playable","playable","2020-05-26 12:10:20.000" -"01001E0013208000","Capcom Arcade Stadium","status-playable","playable","2021-03-17 05:45:14.000" -"","Capcom Beat 'Em Up Bundle","status-playable","playable","2020-03-23 18:31:24.000" -"01009BF0072D4000","Captain Toad: Treasure Tracker","32-bit;status-playable","playable","2024-04-25 00:50:16.000" -"01002C400B6B6000","Captain Toad: Treasure Tracker Demo","32-bit;demo;status-playable","playable","2021-02-14 22:36:09.000" -"","Car Mechanic Manager","status-playable","playable","2020-07-23 18:50:17.000" -"01007BD00AE70000","Car Quest","deadlock;status-menus","menus","2021-11-18 08:59:18.000" -"0100DA70115E6000","Caretaker","status-playable","playable","2022-10-04 14:52:24.000" -"0100DD6014870000","Cargo Crew Driver","status-playable","playable","2021-04-19 12:54:22.000" -"010088C0092FE000","Carnival Games","status-playable;nvdec","playable","2022-07-21 21:01:22.000" -"","Carnivores: Dinosaur Hunt","status-playable","playable","2022-12-14 18:46:06.000" -"01008D1001512000","Cars 3 Driven to Win","gpu;status-ingame","ingame","2022-07-21 21:21:05.000" -"0100810012A1A000","Carto","status-playable","playable","2022-09-04 15:37:06.000" -"0100C4E004406000","Cartoon Network Adventure Time: Pirates of the Enchiridion","status-playable;nvdec","playable","2022-07-21 21:49:01.000" -"0100085003A2A000","Cartoon Network Battle Crashers","status-playable","playable","2022-07-21 21:55:40.000" -"010066F01A0E0000","Cassette Beasts","status-playable","playable","2024-07-22 20:38:43.000" -"010001300D14A000","Castle Crashers Remastered","gpu;status-boots","boots","2024-08-10 09:21:20.000" -"0100F6D01060E000","Castle Crashers Remastered Demo","gpu;status-boots;demo","boots","2022-04-10 10:57:10.000" -"0100DA2011F18000","Castle Pals","status-playable","playable","2021-03-04 21:00:33.000" -"01003C100445C000","Castle of Heart","status-playable;nvdec","playable","2022-07-21 23:10:45.000" -"0100F5500FA0E000","Castle of No Escape 2","status-playable","playable","2022-09-13 13:51:42.000" -"","CastleStorm 2","UE4;crash;nvdec;status-boots","boots","2020-10-25 11:22:44.000" -"010097C00AB66000","Castlestorm","status-playable;nvdec","playable","2022-07-21 22:49:14.000" -"","Castlevania Anniversary Collection","audio;status-playable","playable","2020-05-23 11:40:29.000" -"010076000C86E000","Cat Girl Without Salad: Amuse-Bouche","status-playable","playable","2022-09-03 13:01:47.000" -"","Cat Quest","status-playable","playable","2020-04-02 23:09:32.000" -"","Cat Quest II","status-playable","playable","2020-07-06 23:52:09.000" -"0100E86010220000","Cat Quest II Demo","demo;status-playable","playable","2021-02-15 14:11:57.000" -"0100BF00112C0000","Catherine Full Body","status-playable;nvdec","playable","2023-04-02 11:00:37.000" -"0100BAE0077E4000","Catherine Full Body for Nintendo Switch (JP)","Needs Update;gpu;status-ingame","ingame","2021-02-21 18:06:11.000" -"010004400B28A000","Cattails","status-playable","playable","2021-06-03 14:36:57.000" -"","Cave Story+","status-playable","playable","2020-05-22 09:57:25.000" -"01001A100C0E8000","Caveblazers","slow;status-ingame","ingame","2021-06-09 17:57:28.000" -"","Caveman Warriors","status-playable","playable","2020-05-22 11:44:20.000" -"","Caveman Warriors Demo","demo;status-playable","playable","2021-02-15 14:44:08.000" -"","Celeste","status-playable","playable","2020-06-17 10:14:40.000" -"01006B000A666000","Cendrillon palikA","gpu;status-ingame;nvdec","ingame","2022-07-21 22:52:24.000" -"0100F52013A66000","Charge Kid","gpu;status-boots;audout","boots","2024-02-11 01:17:47.000" -"","Chasm","status-playable","playable","2020-10-23 11:03:43.000" -"010034301A556000","Chasm: The Rift","gpu;status-ingame","ingame","2024-04-29 19:02:48.000" -"0100A5900472E000","Chess Ultra","status-playable;UE4","playable","2023-08-30 23:06:31.000" -"0100E3C00A118000","Chicken Assassin: Reloaded","status-playable","playable","2021-02-20 13:29:01.000" -"","Chicken Police - Paint it RED!","nvdec;status-playable","playable","2020-12-10 15:10:11.000" -"0100F6C00A016000","Chicken Range","status-playable","playable","2021-04-23 12:14:23.000" -"","Chicken Rider","status-playable","playable","2020-05-22 11:31:17.000" -"0100CAC011C3A000","Chickens Madness DEMO","UE4;demo;gpu;nvdec;status-ingame","ingame","2021-02-15 15:02:10.000" -"","Child of Light","nvdec;status-playable","playable","2020-12-16 10:23:10.000" -"01002DE00C250000","Children of Morta","gpu;status-ingame;nvdec","ingame","2022-09-13 17:48:47.000" -"","Children of Zodiarcs","status-playable","playable","2020-10-04 14:23:33.000" -"010046F012A04000","Chinese Parents","status-playable","playable","2021-04-08 12:56:41.000" -"01006A30124CA000","Chocobo GP","gpu;status-ingame;crash","ingame","2022-06-04 14:52:18.000" -"","Chocobo's Mystery Dungeon Every Buddy!","slow;status-playable","playable","2020-05-26 13:53:13.000" -"","Choices That Matter: And The Sun Went Out","status-playable","playable","2020-12-17 15:44:08.000" -"","Chou no Doku Hana no Kusari: Taishou Irokoi Ibun","gpu;nvdec;status-ingame","ingame","2020-09-28 17:58:04.000" -"","ChromaGun","status-playable","playable","2020-05-26 12:56:42.000" -"","Chronos","UE4;gpu;nvdec;status-ingame","ingame","2020-12-11 22:16:35.000" -"","Circle of Sumo","status-playable","playable","2020-05-22 12:45:21.000" -"01008FA00D686000","Circuits","status-playable","playable","2022-09-19 11:52:50.000" -"","Cities: Skylines - Nintendo Switch Edition","status-playable","playable","2020-12-16 10:34:57.000" -"0100D9C012900000","Citizens Unite!: Earth x Space","gpu;status-ingame","ingame","2023-10-22 06:44:19.000" -"0100E4200D84E000","Citizens of Space","gpu;status-boots","boots","2023-10-22 06:45:44.000" -"01005E501284E000","City Bus Driving Simulator","status-playable","playable","2021-06-15 21:25:59.000" -"01005ED0107F4000","Clash Force","status-playable","playable","2022-10-01 23:45:48.000" -"010009300AA6C000","Claybook","slow;status-playable;nvdec;online;UE4","playable","2022-07-22 11:11:34.000" -"","Clea","crash;status-ingame","ingame","2020-12-15 16:22:56.000" -"010045E0142A4000","Clea 2","status-playable","playable","2021-04-18 14:25:18.000" -"01008C100C572000","Clock Zero ~Shuuen no Ichibyou~ Devote","status-playable;nvdec","playable","2022-12-04 22:19:14.000" -"0100DF9013AD4000","Clocker","status-playable","playable","2021-04-05 15:05:13.000" -"0100B7200DAC6000","Close to the Sun","status-boots;crash;nvdec;UE4","boots","2021-11-04 09:19:41.000" -"010047700D540000","Clubhouse Games: 51 Worldwide Classics","status-playable;ldn-works","playable","2024-05-21 16:12:57.000" -"","Clue","crash;online;status-menus","menus","2020-11-10 09:23:48.000" -"","ClusterPuck 99","status-playable","playable","2021-01-06 00:28:12.000" -"010096900A4D2000","Clustertruck","slow;status-ingame","ingame","2021-02-19 21:07:09.000" -"01005790110F0000","Cobra Kai The Karate Kid Saga Continues","status-playable","playable","2021-06-17 15:59:13.000" -"010034E005C9C000","Code of Princess EX","nvdec;online;status-playable","playable","2021-06-03 10:50:13.000" -"010002400F408000","Code: Realize ~Future Blessings~","status-playable;nvdec","playable","2023-03-31 16:57:47.000" -"0100CF800C810000","Coffee Crisis","status-playable","playable","2021-02-20 12:34:52.000" -"","Coffee Talk","status-playable","playable","2020-08-10 09:48:44.000" -"0100178009648000","Coffin Dodgers","status-playable","playable","2021-02-20 14:57:41.000" -"010035B01706E000","Cold Silence","cpu;status-nothing;crash","nothing","2024-07-11 17:06:14.000" -"010083E00F40E000","Collar X Malice","status-playable;nvdec","playable","2022-10-02 11:51:56.000" -"0100E3B00F412000","Collar X Malice -Unlimited-","status-playable;nvdec","playable","2022-10-04 15:30:40.000" -"","Collection of Mana","status-playable","playable","2020-10-19 19:29:45.000" -"010030800BC36000","Collidalot","status-playable;nvdec","playable","2022-09-13 14:09:27.000" -"","Color Zen","status-playable","playable","2020-05-22 10:56:17.000" -"","Colorgrid","status-playable","playable","2020-10-04 01:50:52.000" -"0100A7000BD28000","Coloring Book","status-playable","playable","2022-07-22 11:17:05.000" -"010020500BD86000","Colors Live","gpu;services;status-boots;crash","boots","2023-02-26 02:51:07.000" -"0100E2F0128B4000","Colossus Down","status-playable","playable","2021-02-04 20:49:50.000" -"0100C4D00D16A000","Commander Keen in Keen Dreams","gpu;status-ingame","ingame","2022-08-04 20:34:20.000" -"0100E400129EC000","Commander Keen in Keen Dreams: Definitive Edition","status-playable","playable","2021-05-11 19:33:54.000" -"010065A01158E000","Commandos 2 HD Remaster","gpu;status-ingame;nvdec","ingame","2022-08-10 21:52:27.000" -"0100971011224000","Concept Destruction","status-playable","playable","2022-09-29 12:28:56.000" -"010043700C9B0000","Conduct TOGETHER!","nvdec;status-playable","playable","2021-02-20 12:59:00.000" -"","Conga Master Party!","status-playable","playable","2020-05-22 13:22:24.000" -"","Connection Haunted","slow;status-playable","playable","2020-12-10 18:57:14.000" -"0100A5600FAC0000","Construction Simulator 3 - Console Edition","status-playable","playable","2023-02-06 09:31:23.000" -"","Constructor Plus","status-playable","playable","2020-05-26 12:37:40.000" -"0100DCA00DA7E000","Contra Anniversary Collection","status-playable","playable","2022-07-22 11:30:12.000" -"01007D701298A000","Contraptions","status-playable","playable","2021-02-08 18:40:50.000" -"0100041013360000","Control Ultimate Edition - Cloud Version","Needs Update;crash;services;status-nothing","nothing","2021-04-18 22:34:06.000" -"","Convoy","status-playable","playable","2020-10-15 14:43:50.000" -"0100B82010B6C000","Cook, Serve, Delicious! 3?!","status-playable","playable","2022-10-09 12:09:34.000" -"010060700EFBA000","Cooking Mama: Cookstar","status-menus;crash;loader-allocator","menus","2021-11-20 03:19:35.000" -"01001E400FD58000","Cooking Simulator","status-playable","playable","2021-04-18 13:25:23.000" -"","Cooking Tycoons 2: 3 in 1 Bundle","status-playable","playable","2020-11-16 22:19:33.000" -"","Cooking Tycoons: 3 in 1 Bundle","status-playable","playable","2020-11-16 22:44:26.000" -"","Copperbell","status-playable","playable","2020-10-04 15:54:36.000" -"010016400B1FE000","Corpse Party: Blood Drive","nvdec;status-playable","playable","2021-03-01 12:44:23.000" -"0100CCB01B1A0000","Cosmic Fantasy Collection","status-ingame","ingame","2024-05-21 17:56:37.000" -"010067C00A776000","Cosmic Star Heroine","status-playable","playable","2021-02-20 14:30:47.000" -"","Cotton/Guardian Saturn Tribute Games","gpu;status-boots","boots","2022-11-27 21:00:51.000" -"01000E301107A000","Couch Co-Op Bundle Vol. 2","status-playable;nvdec","playable","2022-10-02 12:04:21.000" -"0100C1E012A42000","Country Tales","status-playable","playable","2021-06-17 16:45:39.000" -"01003370136EA000","Cozy Grove","gpu;status-ingame","ingame","2023-07-30 22:22:19.000" -"010073401175E000","Crash Bandicoot 4: It's About Time","status-playable;nvdec;UE4","playable","2024-03-17 07:13:45.000" -"0100D1B006744000","Crash Bandicoot N. Sane Trilogy","status-playable","playable","2024-02-11 11:38:14.000" -"","Crash Drive 2","online;status-playable","playable","2020-12-17 02:45:46.000" -"","Crash Dummy","nvdec;status-playable","playable","2020-05-23 11:12:43.000" -"0100F9F00C696000","Crash Team Racing Nitro-Fueled","gpu;status-ingame;nvdec;online-broken","ingame","2023-06-25 02:40:17.000" -"0100BF200CD74000","Crashbots","status-playable","playable","2022-07-22 13:50:52.000" -"010027100BD16000","Crashlands","status-playable","playable","2021-05-27 20:30:06.000" -"","Crawl","status-playable","playable","2020-05-22 10:16:05.000" -"0100C66007E96000","Crayola Scoot","status-playable;nvdec","playable","2022-07-22 14:01:55.000" -"01005BA00F486000","Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi","status-playable","playable","2021-07-21 10:41:33.000" -"","Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!","services;status-menus","menus","2020-03-20 14:00:57.000" -"","Crazy Strike Bowling EX","UE4;gpu;nvdec;status-ingame","ingame","2020-08-07 18:15:59.000" -"","Crazy Zen Mini Golf","status-playable","playable","2020-08-05 14:00:00.000" -"","Creaks","status-playable","playable","2020-08-15 12:20:52.000" -"","Creature in the Well","UE4;gpu;status-ingame","ingame","2020-11-16 12:52:40.000" -"","Creepy Tale","status-playable","playable","2020-12-15 21:58:03.000" -"","Cresteaju","gpu;status-ingame","ingame","2021-03-24 10:46:06.000" -"010022D00D4F0000","Cricket 19","gpu;status-ingame","ingame","2021-06-14 14:56:07.000" -"0100387017100000","Cricket 22","status-boots;crash","boots","2023-10-18 08:01:57.000" -"01005640080B0000","Crimsonland","status-playable","playable","2021-05-27 20:50:54.000" -"0100B0400EBC4000","Cris Tales","crash;status-ingame","ingame","2021-07-29 15:10:53.000" -"","Croc's World","status-playable","playable","2020-05-22 11:21:09.000" -"","Croc's World 2","status-playable","playable","2020-12-16 20:01:40.000" -"","Croc's World 3","status-playable","playable","2020-12-30 18:53:26.000" -"01000F0007D92000","Croixleur Sigma","status-playable;online","playable","2022-07-22 14:26:54.000" -"01003D90058FC000","CrossCode","status-playable","playable","2024-02-17 10:23:19.000" -"0100B1E00AA56000","Crossing Souls","nvdec;status-playable","playable","2021-02-20 15:42:54.000" -"0100059012BAE000","Crown Trick","status-playable","playable","2021-06-16 19:36:29.000" -"0100B41013C82000","Cruis'n Blast","gpu;status-ingame","ingame","2023-07-30 10:33:47.000" -"01000CC01C108000","Crymachina Trial Edition ( Demo ) [ クライマキナ ]","status-playable;demo","playable","2023-08-06 05:33:21.000" -"0100CEA007D08000","Crypt of the Necrodancer","status-playable;nvdec","playable","2022-11-01 09:52:06.000" -"0100582010AE0000","Crysis 2 Remastered","deadlock;status-menus","menus","2023-09-21 10:46:17.000" -"0100CD3010AE2000","Crysis 3 Remastered","deadlock;status-menus","menus","2023-09-10 16:03:50.000" -"0100E66010ADE000","Crysis Remastered","status-menus;nvdec","menus","2024-08-13 05:23:24.000" -"0100972008234000","Crystal Crisis","nvdec;status-playable","playable","2021-02-20 13:52:44.000" -"","Cthulhu Saves Christmas","status-playable","playable","2020-12-14 00:58:55.000" -"010001600D1E8000","Cube Creator X","status-menus;crash","menus","2021-11-25 08:53:28.000" -"010082E00F1CE000","Cubers: Arena","status-playable;nvdec;UE4","playable","2022-10-04 16:05:40.000" -"010040D011D04000","Cubicity","status-playable","playable","2021-06-14 14:19:51.000" -"0100A5C00D162000","Cuphead","status-playable","playable","2022-02-01 22:45:55.000" -"0100F7E00DFC8000","Cupid Parasite","gpu;status-ingame","ingame","2023-08-21 05:52:36.000" -"","Curious Cases","status-playable","playable","2020-08-10 09:30:48.000" -"0100D4A0118EA000","Curse of the Dead Gods","status-playable","playable","2022-08-30 12:25:38.000" -"0100CE5014026000","Curved Space","status-playable","playable","2023-01-14 22:03:50.000" -"","Cyber Protocol","nvdec;status-playable","playable","2020-09-28 14:47:40.000" -"0100C1F0141AA000","Cyber Shadow","status-playable","playable","2022-07-17 05:37:41.000" -"01006B9013672000","Cybxus Heart","gpu;slow;status-ingame","ingame","2022-01-15 05:00:49.000" -"010063100B2C2000","Cytus α","nvdec;status-playable","playable","2021-02-20 13:40:46.000" -"0100B6400CA56000","DAEMON X MACHINA","UE4;audout;ldn-untested;nvdec;status-playable","playable","2021-06-09 19:22:29.000" -"01004AB00A260000","DARK SOULS™: REMASTERED","gpu;status-ingame;nvdec;online-broken","ingame","2024-04-09 19:47:58.000" -"0100440012FFA000","DARQ Complete Edition","audout;status-playable","playable","2021-04-07 15:26:21.000" -"01009CC00C97C000","DEAD OR ALIVE Xtreme 3 Scarlet","status-playable","playable","2022-07-23 17:05:06.000" -"0100A5000F7AA000","DEAD OR SCHOOL","status-playable;nvdec","playable","2022-09-06 12:04:09.000" -"0100EBE00F22E000","DEADLY PREMONITION Origins","32-bit;status-playable;nvdec","playable","2024-03-25 12:47:46.000" -"01008B10132A2000","DEEMO -Reborn-","status-playable;nvdec;online-broken","playable","2022-10-17 15:18:11.000" -"010023800D64A000","DELTARUNE Chapter 1","status-playable","playable","2023-01-22 04:47:44.000" -"0100BE800E6D8000","DEMON'S TILT","status-playable","playable","2022-09-19 13:22:46.000" -"","DERU - The Art of Cooperation","status-playable","playable","2021-01-07 16:59:59.000" -"","DESTINY CONNECT","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 12:20:36.000" -"010027400BD24000","DIABOLIK LOVERS CHAOS LINEAGE","gpu;status-ingame;Needs Update","ingame","2023-06-08 02:20:44.000" -"","DISTRAINT 2","status-playable","playable","2020-09-03 16:08:12.000" -"","DISTRAINT: Deluxe Edition","status-playable","playable","2020-06-15 23:42:24.000" -"0100416004C00000","DOOM","gpu;slow;status-ingame;nvdec;online-broken","ingame","2024-09-23 15:40:07.000" -"010018900DD00000","DOOM (1993)","status-menus;nvdec;online-broken","menus","2022-09-06 13:32:19.000" -"01008CB01E52E000","DOOM + DOOM II","status-playable;opengl;ldn-untested;LAN","playable","2024-09-12 07:06:01.000" -"0100D4F00DD02000","DOOM 2","nvdec;online;status-playable","playable","2021-06-03 20:10:01.000" -"010029D00E740000","DOOM 3","status-menus;crash","menus","2024-08-03 05:25:47.000" -"","DOOM 64","nvdec;status-playable;vulkan","playable","2020-10-13 23:47:28.000" -"0100B1A00D8CE000","DOOM Eternal","gpu;slow;status-ingame;nvdec;online-broken","ingame","2024-08-28 15:57:17.000" -"","DORAEMON STORY OF SEASONS","nvdec;status-playable","playable","2020-07-13 20:28:11.000" -"01001AD00E49A000","DOUBLE DRAGON Ⅲ: The Sacred Stones","online;status-playable","playable","2021-06-11 15:41:44.000" -"0100A250097F0000","DRAGON BALL FighterZ","UE4;ldn-broken;nvdec;online;status-playable","playable","2021-06-11 16:19:04.000" -"010051C0134F8000","DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET","status-playable;vulkan-backend-bug","playable","2024-08-28 00:03:50.000" -"0100A77018EA0000","DRAGON QUEST MONSTERS: The Dark Prince","status-playable","playable","2023-12-29 16:10:05.000" -"0100E9A00CB30000","DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition","status-playable;nvdec","playable","2024-06-26 00:16:30.000" -"010008900BC5A000","DYSMANTLE","gpu;status-ingame","ingame","2024-07-15 16:24:12.000" -"010061300DF48000","Dairoku: Ayakashimori","status-nothing;Needs Update;loader-allocator","nothing","2021-11-30 05:09:38.000" -"0100BD2009A1C000","Damsel","status-playable","playable","2022-09-06 11:54:39.000" -"","Dandara","status-playable","playable","2020-05-26 12:42:33.000" -"","Dandy Dungeon: Legend of Brave Yamada","status-playable","playable","2021-01-06 09:48:47.000" -"01003ED0099B0000","Danger Mouse","status-boots;crash;online","boots","2022-07-22 15:49:45.000" -"","Danger Scavenger -","nvdec;status-playable","playable","2021-04-17 15:53:04.000" -"","Danmaku Unlimited 3","status-playable","playable","2020-11-15 00:48:35.000" -"","Darius Cozmic Collection","status-playable","playable","2021-02-19 20:59:06.000" -"010059C00BED4000","Darius Cozmic Collection Special Edition","status-playable","playable","2022-07-22 16:26:50.000" -"010015800F93C000","Dariusburst - Another Chronicle EX+","online;status-playable","playable","2021-04-05 14:21:43.000" -"01003D301357A000","Dark Arcana: The Carnival","gpu;slow;status-ingame","ingame","2022-02-19 08:52:28.000" -"010083A00BF6C000","Dark Devotion","status-playable;nvdec","playable","2022-08-09 09:41:18.000" -"","Dark Quest 2","status-playable","playable","2020-11-16 21:34:52.000" -"","Dark Witch Music Episode: Rudymical","status-playable","playable","2020-05-22 09:44:44.000" -"01008F1008DA6000","Darkest Dungeon","status-playable;nvdec","playable","2022-07-22 18:49:18.000" -"0100F2300D4BA000","Darksiders Genesis","status-playable;nvdec;online-broken;UE4;ldn-broken","playable","2022-09-21 18:06:25.000" -"010071800BA98000","Darksiders II Deathinitive Edition","gpu;status-ingame;nvdec;online-broken","ingame","2024-06-26 00:37:25.000" -"0100E1400BA96000","Darksiders Warmastered Edition","status-playable;nvdec","playable","2023-03-02 18:08:09.000" -"","Darkwood","status-playable","playable","2021-01-08 21:24:06.000" -"0100BA500B660000","Darts Up","status-playable","playable","2021-04-14 17:22:22.000" -"0100F0B0081DA000","Dawn of the Breakers","status-menus;online-broken;vulkan-backend-bug","menus","2022-12-08 14:40:03.000" -"","Day and Night","status-playable","playable","2020-12-17 12:30:51.000" -"","De Blob","nvdec;status-playable","playable","2021-01-06 17:34:46.000" -"01008E900471E000","De Mambo","status-playable","playable","2021-04-10 12:39:40.000" -"0100646009FBE000","Dead Cells","status-playable","playable","2021-09-22 22:18:49.000" -"01004C500BD40000","Dead End Job","status-playable;nvdec","playable","2022-09-19 12:48:44.000" -"0100A24011F52000","Dead Z Meat","UE4;services;status-ingame","ingame","2021-04-14 16:50:16.000" -"01004C400CF96000","Dead by Daylight","status-boots;nvdec;online-broken;UE4","boots","2022-09-13 14:32:13.000" -"","Deadly Days","status-playable","playable","2020-11-27 13:38:55.000" -"0100BAC011928000","Deadly Premonition 2","status-playable","playable","2021-06-15 14:12:36.000" -"","Dear Magi - Mahou Shounen Gakka -","status-playable","playable","2020-11-22 16:45:16.000" -"010012B011AB2000","Death Come True","nvdec;status-playable","playable","2021-06-10 22:30:49.000" -"0100F3B00CF32000","Death Coming","status-nothing;crash","nothing","2022-02-06 07:43:03.000" -"","Death Mark","status-playable","playable","2020-12-13 10:56:25.000" -"0100423009358000","Death Road to Canada","gpu;audio;status-nothing;32-bit;crash","nothing","2023-06-28 15:39:26.000" -"","Death Squared","status-playable","playable","2020-12-04 13:00:15.000" -"","Death Tales","status-playable","playable","2020-12-17 10:55:52.000" -"","Death and Taxes","status-playable","playable","2020-12-15 20:27:49.000" -"0100AEC013DDA000","Death end re;Quest","status-playable","playable","2023-07-09 12:19:54.000" -"0100492011A8A000","Death's Hangover","gpu;status-boots","boots","2023-08-01 22:38:06.000" -"01009120119B4000","Deathsmiles I・II","status-playable","playable","2024-04-08 19:29:00.000" -"010034F00BFC8000","Debris Infinity","nvdec;online;status-playable","playable","2021-05-28 12:14:39.000" -"010027700FD2E000","Decay of Logos","status-playable;nvdec","playable","2022-09-13 14:42:13.000" -"0100EF0015A9A000","Deedlit in Wonder Labyrinth","deadlock;status-ingame;Needs Update;Incomplete","ingame","2022-01-19 10:00:59.000" -"01002CC0062B8000","Deemo","status-playable","playable","2022-07-24 11:34:33.000" -"010026800FA88000","Deep Diving Adventures","status-playable","playable","2022-09-22 16:43:37.000" -"","Deep Ones","services;status-nothing","nothing","2020-04-03 02:54:19.000" -"0100C3E00D68E000","Deep Sky Derelicts Definitive Edition","status-playable","playable","2022-09-27 11:21:08.000" -"","Deep Space Rush","status-playable","playable","2020-07-07 23:30:33.000" -"0100961011BE6000","DeepOne","services-horizon;status-nothing;Needs Update","nothing","2024-01-18 15:01:05.000" -"01008BB00F824000","Defenders of Ekron - Definitive Edition","status-playable","playable","2021-06-11 16:31:03.000" -"0100CDE0136E6000","Defentron","status-playable","playable","2022-10-17 15:47:56.000" -"","Defunct","status-playable","playable","2021-01-08 21:33:46.000" -"","Degrees of Separation","status-playable","playable","2021-01-10 13:40:04.000" -"010071C00CBA4000","Dei Gratia no Rashinban","crash;status-nothing","nothing","2021-07-13 02:25:32.000" -"","Deleveled","slow;status-playable","playable","2020-12-15 21:02:29.000" -"010038B01D2CA000","Dementium: The Ward (Dementium Remastered)","status-boots;crash","boots","2024-09-02 08:28:14.000" -"0100AB600ACB4000","Demetrios - The BIG Cynical Adventure","status-playable","playable","2021-06-04 12:01:01.000" -"010099D00D1A4000","Demolish & Build","status-playable","playable","2021-06-13 15:27:26.000" -"010084600F51C000","Demon Pit","status-playable;nvdec","playable","2022-09-19 13:35:15.000" -"0100A2B00BD88000","Demon's Crystals","status-nothing;crash;regression","nothing","2022-12-07 16:33:17.000" -"","Demon's Rise","status-playable","playable","2020-07-29 12:26:27.000" -"0100E29013818000","Demon's Rise - Lords of Chaos","status-playable","playable","2021-04-06 16:20:06.000" -"0100161011458000","Demon's Tier+","status-playable","playable","2021-06-09 17:25:36.000" -"","Demong Hunter","status-playable","playable","2020-12-12 15:27:08.000" -"0100BC501355A000","Densha de go!! Hashirou Yamanote Sen","status-playable;nvdec;UE4","playable","2023-11-09 07:47:58.000" -"","Depixtion","status-playable","playable","2020-10-10 18:52:37.000" -"01000BF00B6BC000","Deployment","slow;status-playable;online-broken","playable","2022-10-17 16:23:59.000" -"010023600C704000","Deponia","nvdec;status-playable","playable","2021-01-26 17:17:19.000" -"","Descenders","gpu;status-ingame","ingame","2020-12-10 15:22:36.000" -"","Desire remaster ver.","crash;status-boots","boots","2021-01-17 02:34:37.000" -"01008BB011ED6000","Destrobots","status-playable","playable","2021-03-06 14:37:05.000" -"01009E701356A000","Destroy All Humans!","gpu;status-ingame;nvdec;UE4","ingame","2023-01-14 22:23:53.000" -"010030600E65A000","Detective Dolittle","status-playable","playable","2021-03-02 14:03:59.000" -"01009C0009842000","Detective Gallo","status-playable;nvdec","playable","2022-07-24 11:51:04.000" -"","Detective Jinguji Saburo Prism of Eyes","status-playable","playable","2020-10-02 21:54:41.000" -"010007500F27C000","Detective Pikachu Returns","status-playable","playable","2023-10-07 10:24:59.000" -"010031B00CF66000","Devil Engine","status-playable","playable","2021-06-04 11:54:30.000" -"01002F000E8F2000","Devil Kingdom","status-playable","playable","2023-01-31 08:58:44.000" -"","Devil May Cry","nvdec;status-playable","playable","2021-01-04 19:43:08.000" -"01007CF00D5BA000","Devil May Cry 2","status-playable;nvdec","playable","2023-01-24 23:03:20.000" -"01007B600D5BC000","Devil May Cry 3 Special Edition","status-playable;nvdec","playable","2024-07-08 12:33:23.000" -"01003C900EFF6000","Devil Slayer - Raksasi","status-playable","playable","2022-10-26 19:42:32.000" -"01009EA00A320000","Devious Dungeon","status-playable","playable","2021-03-04 13:03:06.000" -"","Dex","nvdec;status-playable","playable","2020-08-12 16:48:12.000" -"","Dexteritrip","status-playable","playable","2021-01-06 12:51:12.000" -"0100AFC00E06A000","Dezatopia","online;status-playable","playable","2021-06-15 21:06:11.000" -"0100726014352000","Diablo 2 Resurrected","gpu;status-ingame;nvdec","ingame","2023-08-18 18:42:47.000" -"01001B300B9BE000","Diablo III: Eternal Collection","status-playable;online-broken;ldn-works","playable","2023-08-21 23:48:03.000" -"0100F73011456000","Diabolic","status-playable","playable","2021-06-11 14:45:08.000" -"0100BBF011394000","Dicey Dungeons","gpu;audio;slow;status-ingame","ingame","2023-08-02 20:30:12.000" -"","Die for Valhalla!","status-playable","playable","2021-01-06 16:09:14.000" -"0100BB900B5B4000","Dies irae Amantes amentes For Nintendo Switch","status-nothing;32-bit;crash","nothing","2022-02-16 07:09:05.000" -"0100A5A00DBB0000","Dig Dog","gpu;status-ingame","ingame","2021-06-02 17:17:51.000" -"010035D0121EC000","Digerati Presents: The Dungeon Crawl Vol. 1","slow;status-ingame","ingame","2021-04-18 14:04:55.000" -"010014E00DB56000","Digimon Story Cyber Sleuth: Complete Edition","status-playable;nvdec;opengl","playable","2022-09-13 15:02:37.000" -"0100F00014254000","Digimon World: Next Order","status-playable","playable","2023-05-09 20:41:06.000" -"","Ding Dong XL","status-playable","playable","2020-07-14 16:13:19.000" -"","Dininho Adventures","status-playable","playable","2020-10-03 17:25:51.000" -"010027E0158A6000","Dininho Space Adventure","status-playable","playable","2023-01-14 22:43:04.000" -"0100A8A013DA4000","Dirt Bike Insanity","status-playable","playable","2021-01-31 13:27:38.000" -"01004CB01378A000","Dirt Trackin Sprint Cars","status-playable;nvdec;online-broken","playable","2022-10-17 16:34:56.000" -"0100918014B02000","Disagaea 6: Defiance of Destiny Demo","status-playable;demo","playable","2022-10-26 20:02:04.000" -"010020700E2A2000","Disaster Report 4: Summer Memories","status-playable;nvdec;UE4","playable","2022-09-27 19:41:31.000" -"0100510004D2C000","Disc Jam","UE4;ldn-untested;nvdec;online;status-playable","playable","2021-04-08 16:40:35.000" -"","Disco Dodgeball Remix","online;status-playable","playable","2020-09-28 23:24:49.000" -"01004B100AF18000","Disgaea 1 Complete","status-playable","playable","2023-01-30 21:45:23.000" -"010068C00F324000","Disgaea 4 Complete+ Demo","status-playable;nvdec","playable","2022-09-13 15:21:59.000" -"","Disgaea 4 Complete Plus","gpu;slow;status-playable","playable","2020-02-18 10:54:28.000" -"01005700031AE000","Disgaea 5 Complete","nvdec;status-playable","playable","2021-03-04 15:32:54.000" -"0100ABC013136000","Disgaea 6: Defiance of Destiny","deadlock;status-ingame","ingame","2023-04-15 00:50:32.000" -"01005EE013888000","Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]","gpu;status-ingame;demo","ingame","2022-12-06 15:27:59.000" -"0100307011D80000","Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]","status-playable","playable","2021-06-08 13:20:33.000" -"01000B70122A2000","Disjunction","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2024-04-28 23:55:24.000" -"0100A2F00EEFC000","Disney Classic Games: Aladdin and The Lion King","status-playable;online-broken","playable","2022-09-13 15:44:17.000" -"0100DA201EBF8000","Disney Epic Mickey: Rebrushed","status-ingame;crash","ingame","2024-09-26 22:11:51.000" -"0100F0401435E000","Disney SpeedStorm","services;status-boots","boots","2023-11-27 02:15:32.000" -"","Disney Tsum Tsum Festival","crash;status-menus","menus","2020-07-14 14:05:28.000" -"010027400CDC6000","Divinity Original Sin 2","services;status-menus;crash;online-broken;regression","menus","2023-08-13 17:20:03.000" -"01005A001489A000","DoDonPachi Resurrection - 怒首領蜂大復活","status-ingame;32-bit;crash","ingame","2024-01-25 14:37:32.000" -"01001770115C8000","Dodo Peak","status-playable;nvdec;UE4","playable","2022-10-04 16:13:05.000" -"","Dogurai","status-playable","playable","2020-10-04 02:40:16.000" -"010048100D51A000","Dokapon Up! Mugen no Roulette","gpu;status-menus;Needs Update","menus","2022-12-08 19:39:10.000" -"","Dokuro","nvdec;status-playable","playable","2020-12-17 14:47:09.000" -"010007200AC0E000","Don't Die Mr. Robot DX","status-playable;nvdec","playable","2022-09-02 18:34:38.000" -"0100E470067A8000","Don't Knock Twice","status-playable","playable","2024-05-08 22:37:58.000" -"0100C4D00B608000","Don't Sink","gpu;status-ingame","ingame","2021-02-26 15:41:11.000" -"0100751007ADA000","Don't Starve","status-playable;nvdec","playable","2022-02-05 20:43:34.000" -"010088B010DD2000","Dongo Adventure","status-playable","playable","2022-10-04 16:22:26.000" -"0100C1F0051B6000","Donkey Kong Country Tropical Freeze","status-playable","playable","2024-08-05 16:46:10.000" -"","Doodle Derby","status-boots","boots","2020-12-04 22:51:48.000" -"01005ED00CD70000","Door Kickers: Action Squad","status-playable;online-broken;ldn-broken","playable","2022-09-13 16:28:53.000" -"","Double Cross","status-playable","playable","2021-01-07 15:34:22.000" -"","Double Dragon & Kunio-Kun: Retro Brawler Bundle","status-playable","playable","2020-09-01 12:48:46.000" -"01005B10132B2000","Double Dragon Neon","gpu;audio;status-ingame;32-bit","ingame","2022-09-20 18:00:20.000" -"","Double Kick Heroes","gpu;status-ingame","ingame","2020-10-03 14:33:59.000" -"0100A5D00C7C0000","Double Pug Switch","status-playable;nvdec","playable","2022-10-10 10:59:35.000" -"0100FC000EE10000","Double Switch - 25th Anniversary Edition","status-playable;nvdec","playable","2022-09-19 13:41:50.000" -"0100B6600FE06000","Down to Hell","gpu;status-ingame;nvdec","ingame","2022-09-19 14:01:26.000" -"010093D00C726000","Downwell","status-playable","playable","2021-04-25 20:05:24.000" -"0100ED000D390000","Dr Kawashima's Brain Training","services;status-ingame","ingame","2023-06-04 00:06:46.000" -"","Dracula's Legacy","nvdec;status-playable","playable","2020-12-10 13:24:25.000" -"","DragoDino","gpu;nvdec;status-ingame","ingame","2020-08-03 20:49:16.000" -"0100DBC00BD5A000","Dragon Audit","crash;status-ingame","ingame","2021-05-16 14:24:46.000" -"010078D000F88000","Dragon Ball Xenoverse 2","gpu;status-ingame;nvdec;online;ldn-untested","ingame","2022-07-24 12:31:01.000" -"010089700150E000","Dragon Marked for Death: Frontline Fighters (Empress & Warrior)","status-playable;ldn-untested;audout","playable","2022-03-10 06:44:34.000" -"0100EFC00EFB2000","Dragon Quest","gpu;status-boots","boots","2021-11-09 03:31:32.000" -"010008900705C000","Dragon Quest Builders","gpu;status-ingame;nvdec","ingame","2023-08-14 09:54:36.000" -"010042000A986000","Dragon Quest Builders 2","status-playable","playable","2024-04-19 16:36:38.000" -"0100CD3000BDC000","Dragon Quest Heroes I + II (JP)","nvdec;status-playable","playable","2021-04-08 14:27:16.000" -"010062200EFB4000","Dragon Quest II: Luminaries of the Legendary Line","status-playable","playable","2022-09-13 16:44:11.000" -"01003E601E324000","Dragon Quest III HD-2D Remake","status-ingame;vulkan-backend-bug;UE4;audout;mac-bug","ingame","2025-01-07 04:10:27.000" -"010015600EFB6000","Dragon Quest III: The Seeds of Salvation","gpu;status-boots","boots","2021-11-09 03:38:34.000" -"0100217014266000","Dragon Quest Treasures","gpu;status-ingame;UE4","ingame","2023-05-09 11:16:52.000" -"0100E2E0152E4000","Dragon Quest X Awakening Five Races Offline","status-playable;nvdec;UE4","playable","2024-08-20 10:04:24.000" -"01006C300E9F0000","Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition","status-playable;UE4","playable","2021-11-27 12:27:11.000" -"010032C00AC58000","Dragon's Dogma: Dark Arisen","status-playable","playable","2022-07-24 12:58:33.000" -"","Dragon's Lair Trilogy","nvdec;status-playable","playable","2021-01-13 22:12:07.000" -"","DragonBlaze for Nintendo Switch","32-bit;status-playable","playable","2020-10-14 11:11:28.000" -"","DragonFangZ","status-playable","playable","2020-09-28 21:35:18.000" -"","Dragons Dawn of New Riders","nvdec;status-playable","playable","2021-01-27 20:05:26.000" -"0100F7800A434000","Drawful 2","status-ingame","ingame","2022-07-24 13:50:21.000" -"0100B7E0102E4000","Drawngeon: Dungeons of Ink and Paper","gpu;status-ingame","ingame","2022-09-19 15:41:25.000" -"","Dream","status-playable","playable","2020-12-15 19:55:07.000" -"","Dream Alone - 0100AA0093DC000","nvdec;status-playable","playable","2021-01-27 19:41:50.000" -"","DreamBall","UE4;crash;gpu;status-ingame","ingame","2020-08-05 14:45:25.000" -"0100236011B4C000","DreamWorks Spirit Lucky's Big Adventure","status-playable","playable","2022-10-27 13:30:52.000" -"010058B00F3C0000","Dreaming Canvas","UE4;gpu;status-ingame","ingame","2021-06-13 22:50:07.000" -"0100D24013466000","Dreamo","status-playable;UE4","playable","2022-10-17 18:25:28.000" -"010058C00A916000","Drone Fight","status-playable","playable","2022-07-24 14:31:56.000" -"010052000A574000","Drowning","status-playable","playable","2022-07-25 14:28:26.000" -"","Drums","status-playable","playable","2020-12-17 17:21:51.000" -"01005BC012C66000","Duck Life Adventure","status-playable","playable","2022-10-10 11:27:03.000" -"01007EF00CB88000","Duke Nukem 3D: 20th Anniversary World Tour","32-bit;status-playable;ldn-untested","playable","2022-08-19 22:22:40.000" -"010068D0141F2000","Dull Grey","status-playable","playable","2022-10-27 13:40:38.000" -"0100926013600000","Dungeon Nightmares 1 + 2 Collection","status-playable","playable","2022-10-17 18:54:22.000" -"","Dungeon Stars","status-playable","playable","2021-01-18 14:28:37.000" -"010034300F0E2000","Dungeon of the Endless","nvdec;status-playable","playable","2021-05-27 19:16:26.000" -"","Dungeons & Bombs","status-playable","playable","2021-04-06 12:46:22.000" -"0100EC30140B6000","Dunk Lords","status-playable","playable","2024-06-26 00:07:26.000" -"010011C00E636000","Dusk Diver","status-boots;crash;UE4","boots","2021-11-06 09:01:30.000" -"0100B6E00A420000","Dust: An Elysian Tail","status-playable","playable","2022-07-25 15:28:12.000" -"","Dustoff Z","status-playable","playable","2020-12-04 23:22:29.000" -"01008c8012920000","Dying Light: Platinum Edition","services-horizon;status-boots","boots","2024-03-11 10:43:32.000" -"","Dyna Bomb","status-playable","playable","2020-06-07 13:26:55.000" -"010054E01D878000","EA SPORTS FC 25","status-ingame;crash","ingame","2024-09-25 21:07:50.000" -"01001C8016B4E000","EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition","gpu;status-ingame;crash","ingame","2024-06-10 23:33:05.000" -"0100BDB01A0E6000","EA Sports FC 24","status-boots","boots","2023-10-04 18:32:59.000" -"01009B7006C88000","EARTH WARS","status-playable","playable","2021-06-05 11:18:33.000" -"0100A9B009678000","EAT BEAT DEADSPIKE-san","audio;status-playable;Needs Update","playable","2022-12-02 19:25:29.000" -"","ELEA: Paradigm Shift","UE4;crash;status-nothing","nothing","2020-10-04 19:07:43.000" -"01000FA0149B6000","EQI","status-playable;nvdec;UE4","playable","2022-10-27 16:42:32.000" -"0100E95010058000","EQQO","UE4;nvdec;status-playable","playable","2021-06-13 23:10:51.000" -"0100F9600E746000","ESP Ra.De. Psi","audio;slow;status-ingame","ingame","2024-03-07 15:05:08.000" -"01007BE0160D6000","EVE ghost enemies","gpu;status-ingame","ingame","2023-01-14 03:13:30.000" -"0100DCF0093EC000","EVERSPACE","status-playable;UE4","playable","2022-08-14 01:16:24.000" -"010037400C7DA000","Eagle Island","status-playable","playable","2021-04-10 13:15:42.000" -"0100B9E012992000","Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )","status-playable;UE4","playable","2022-12-07 12:59:16.000" -"0100298014030000","Earth Defense Force: World Brothers","status-playable;UE4","playable","2022-10-27 14:13:31.000" -"0100A2E00BB0C000","EarthNight","status-playable","playable","2022-09-19 21:02:20.000" -"0100DFC00E472000","Earthfall: Alien Horde","status-playable;nvdec;UE4;ldn-untested","playable","2022-09-13 17:32:37.000" -"01006E50042EA000","Earthlock","status-playable","playable","2021-06-05 11:51:02.000" -"0100DCE00B756000","Earthworms","status-playable","playable","2022-07-25 16:28:55.000" -"","Earthworms Demo","status-playable","playable","2021-01-05 16:57:11.000" -"0100ECF01800C000","Easy Come Easy Golf","status-playable;online-broken;regression","playable","2024-04-04 16:15:00.000" -"","Eclipse: Edge of Light","status-playable","playable","2020-08-11 23:06:29.000" -"0100ABE00DB4E000","Edna & Harvey: Harvey's New Eyes","nvdec;status-playable","playable","2021-01-26 14:36:08.000" -"01004F000B716000","Edna & Harvey: The Breakout - Anniversary Edition","status-ingame;crash;nvdec","ingame","2022-08-01 16:59:56.000" -"01002550129F0000","Effie","status-playable","playable","2022-10-27 14:36:39.000" -"","Ego Protocol","nvdec;status-playable","playable","2020-12-16 20:16:35.000" -"","Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai","status-playable","playable","2020-11-12 00:11:50.000" -"01003AD013BD2000","Eight Dragons","status-playable;nvdec","playable","2022-10-27 14:47:28.000" -"010020A01209C000","El Hijo - A Wild West Tale","nvdec;status-playable","playable","2021-04-19 17:44:08.000" -"","Elden: Path of the Forgotten","status-playable","playable","2020-12-15 00:33:19.000" -"0100A6700AF10000","Element","status-playable","playable","2022-07-25 17:17:16.000" -"0100128003A24000","Elliot Quest","status-playable","playable","2022-07-25 17:46:14.000" -"","Elrador Creatures","slow;status-playable","playable","2020-12-12 12:35:35.000" -"010041A00FEC6000","Ember","status-playable;nvdec","playable","2022-09-19 21:16:11.000" -"","Embracelet","status-playable","playable","2020-12-04 23:45:00.000" -"010017b0102a8000","Emma: Lost in Memories","nvdec;status-playable","playable","2021-01-28 16:19:10.000" -"010068300E08E000","Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo","gpu;status-ingame;nvdec","ingame","2022-11-20 16:18:45.000" -"","Enchanting Mahjong Match","gpu;status-ingame","ingame","2020-04-17 22:01:31.000" -"01004F3011F92000","Endless Fables: Dark Moor","gpu;nvdec;status-ingame","ingame","2021-03-07 15:31:03.000" -"010067B017588000","Endless Ocean Luminous","services-horizon;status-ingame;crash","ingame","2024-05-30 02:05:57.000" -"0100B8700BD14000","Energy Cycle Edge","services;status-ingame","ingame","2021-11-30 05:02:31.000" -"","Energy Invasion","status-playable","playable","2021-01-14 21:32:26.000" -"0100C6200A0AA000","Enigmatis 2: The Mists of Ravenwood","crash;regression;status-boots","boots","2021-06-06 15:15:30.000" -"01009D60076F6000","Enter the Gungeon","status-playable","playable","2022-07-25 20:28:33.000" -"0100262009626000","Epic Loon","status-playable;nvdec","playable","2022-07-25 22:06:13.000" -"","Escape First","status-playable","playable","2020-10-20 22:46:53.000" -"010021201296A000","Escape First 2","status-playable","playable","2021-03-24 11:59:41.000" -"","Escape Game Fort Boyard","status-playable","playable","2020-07-12 12:45:43.000" -"0100FEF00F0AA000","Escape from Chernobyl","status-boots;crash","boots","2022-09-19 21:36:58.000" -"010023E013244000","Escape from Life Inc","status-playable","playable","2021-04-19 17:34:09.000" -"","Escape from Tethys","status-playable","playable","2020-10-14 22:38:25.000" -"010073000FE18000","Esports powerful pro yakyuu 2020","gpu;status-ingame;crash;Needs More Attention","ingame","2024-04-29 05:34:14.000" -"01004F9012FD8000","Estranged: The Departure","status-playable;nvdec;UE4","playable","2022-10-24 10:37:58.000" -"","Eternum Ex","status-playable","playable","2021-01-13 20:28:32.000" -"010092501EB2C000","Europa (Demo)","gpu;status-ingame;crash;UE4","ingame","2024-04-23 10:47:12.000" -"","Event Horizon: Space Defense","status-playable","playable","2020-07-31 20:31:24.000" -"01006F900BF8E000","Everybody 1-2-Switch!","services;deadlock;status-nothing","nothing","2023-07-01 05:52:55.000" -"","Evil Defenders","nvdec;status-playable","playable","2020-09-28 17:11:00.000" -"01006A800FA22000","Evolution Board Game","online;status-playable","playable","2021-01-20 22:37:56.000" -"0100F2D00C7DE000","Exception","status-playable;online-broken","playable","2022-09-20 12:47:10.000" -"0100DD30110CC000","Exit the Gungeon","status-playable","playable","2022-09-22 17:04:43.000" -"0100A82013976000","Exodemon","status-playable","playable","2022-10-27 20:17:52.000" -"0100FA800A1F4000","Exorder","nvdec;status-playable","playable","2021-04-15 14:17:20.000" -"01009B7010B42000","Explosive Jake","status-boots;crash","boots","2021-11-03 07:48:32.000" -"0100EFE00A3C2000","Eyes: The Horror Game","status-playable","playable","2021-01-20 21:59:46.000" -"010022700E7D6000","FAR: Lone Sails","status-playable","playable","2022-09-06 16:33:05.000" -"01008D900B984000","FEZ","gpu;status-ingame","ingame","2021-04-18 17:10:16.000" -"01007510040E8000","FIA European Truck Racing Championship","status-playable;nvdec","playable","2022-09-06 17:51:59.000" -"0100F7B002340000","FIFA 18","gpu;status-ingame;online-broken;ldn-untested","ingame","2022-07-26 12:43:59.000" -"0100FFA0093E8000","FIFA 19","gpu;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-07-26 13:07:07.000" -"01005DE00D05C000","FIFA 20 Legacy Edition","gpu;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-09-13 17:57:20.000" -"01000A001171A000","FIFA 21 Legacy Edition","gpu;status-ingame;online-broken","ingame","2023-12-11 22:10:19.000" -"0100216014472000","FIFA 22 Legacy Edition","gpu;status-ingame","ingame","2024-03-02 14:13:48.000" -"0100CE4010AAC000","FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition","status-playable","playable","2023-04-02 23:39:12.000" -"01000EA014150000","FINAL FANTASY I","status-nothing;crash","nothing","2024-09-05 20:55:30.000" -"01006B7014156000","FINAL FANTASY II","status-nothing;crash","nothing","2024-04-13 19:18:04.000" -"01006F000B056000","FINAL FANTASY IX","audout;nvdec;status-playable","playable","2021-06-05 11:35:00.000" -"0100AA201415C000","FINAL FANTASY V","status-playable","playable","2023-04-26 01:11:55.000" -"01008B900DC0A000","FINAL FANTASY VIII REMASTERED","status-playable;nvdec","playable","2023-02-15 10:57:48.000" -"0100BC300CB48000","FINAL FANTASY X/X-2 HD REMASTER","gpu;status-ingame","ingame","2022-08-16 20:29:26.000" -"0100EB100AB42000","FINAL FANTASY XII THE ZODIAC AGE","status-playable;opengl;vulkan-backend-bug","playable","2024-08-11 07:01:54.000" -"","FINAL FANTASY XV POCKET EDITION HD","status-playable","playable","2021-01-05 17:52:08.000" -"0100EDC01990E000","FOOTBALL MANAGER 2023 TOUCH","gpu;status-ingame","ingame","2023-08-01 03:40:53.000" -"","FORMA.8","nvdec;status-playable","playable","2020-11-15 01:04:32.000" -"01008A100A028000","FOX n FORESTS","status-playable","playable","2021-02-16 14:27:49.000" -"0100F1A00A5DC000","FRAMED COLLECTION","status-playable;nvdec","playable","2022-07-27 11:48:15.000" -"010002F00CC20000","FUN! FUN! Animal Park","status-playable","playable","2021-04-14 17:08:52.000" -"0100E1F013674000","FUSER","status-playable;nvdec;UE4","playable","2022-10-17 20:58:32.000" -"010055801134E000","FUZE Player","status-ingame;online-broken;vulkan-backend-bug","ingame","2022-10-18 12:23:53.000" -"0100EAD007E98000","FUZE4","status-playable;vulkan-backend-bug","playable","2022-09-06 19:25:01.000" -"0100E3D0103CE000","Fable of Fairy Stones","status-playable","playable","2021-05-05 21:04:54.000" -"01004200189F4000","Factorio","deadlock;status-boots","boots","2024-06-11 19:26:16.000" -"010073F0189B6000","Fae Farm","status-playable","playable","2024-08-25 15:12:12.000" -"010069100DB08000","Faeria","status-menus;nvdec;online-broken","menus","2022-10-04 16:44:41.000" -"01008A6009758000","Fairune Collection","status-playable","playable","2021-06-06 15:29:56.000" -"0100F6D00B8F2000","Fairy Fencer F™: Advent Dark Force","status-ingame;32-bit;crash;nvdec","ingame","2023-04-16 03:53:48.000" -"0100CF900FA3E000","Fairy Tail","status-playable;nvdec","playable","2022-10-04 23:00:32.000" -"01005A600BE60000","Fall Of Light - Darkest Edition","slow;status-ingame;nvdec","ingame","2024-07-24 04:19:26.000" -"0100AA801258C000","Fallen Legion Revenants","status-menus;crash","menus","2021-11-25 08:53:20.000" -"0100D670126F6000","Famicom Detective Club: The Girl Who Stands Behind","status-playable;nvdec","playable","2022-10-27 20:41:40.000" -"010033F0126F4000","Famicom Detective Club: The Missing Heir","status-playable;nvdec","playable","2022-10-27 20:56:23.000" -"010060200FC44000","Family Feud 2021","status-playable;online-broken","playable","2022-10-10 11:42:21.000" -"0100034012606000","Family Mysteries: Poisonous Promises","audio;status-menus;crash","menus","2021-11-26 12:35:06.000" -"010017C012726000","Fantasy Friends","status-playable","playable","2022-10-17 19:42:39.000" -"0100767008502000","Fantasy Hero Unsigned Legacy","status-playable","playable","2022-07-26 12:28:52.000" -"0100944003820000","Fantasy Strike","online;status-playable","playable","2021-02-27 01:59:18.000" -"01000E2012F6E000","Fantasy Tavern Sextet -Vol.1 New World Days-","gpu;status-ingame;crash;Needs Update","ingame","2022-12-05 16:48:00.000" -"","Fantasy Tavern Sextet -Vol.2 Adventurer's Days-","gpu;slow;status-ingame;crash","ingame","2021-11-06 02:57:29.000" -"","Farabel","status-playable","playable","2020-08-03 17:47:28.000" -"","Farm Expert 2019 for Nintendo Switch","status-playable","playable","2020-07-09 21:42:57.000" -"01000E400ED98000","Farm Mystery","status-playable;nvdec","playable","2022-09-06 16:46:47.000" -"","Farm Together","status-playable","playable","2021-01-19 20:01:19.000" -"0100EB600E914000","Farming Simulator 20","nvdec;status-playable","playable","2021-06-13 10:52:44.000" -"","Farming Simulator Nintendo Switch Edition","nvdec;status-playable","playable","2021-01-19 14:46:44.000" -"0100E99019B3A000","Fashion Dreamer","status-playable","playable","2023-11-12 06:42:52.000" -"01009510001CA000","Fast RMX","slow;status-ingame;crash;ldn-partial","ingame","2024-06-22 20:48:58.000" -"0100BEB015604000","Fatal Frame: Maiden of Black Water","status-playable","playable","2023-07-05 16:01:40.000" -"0100DAE019110000","Fatal Frame: Mask of the Lunar Eclipse","status-playable;Incomplete","playable","2024-04-11 06:01:30.000" -"010053E002EA2000","Fate/EXTELLA","gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug","ingame","2023-04-24 23:37:55.000" -"010051400B17A000","Fate/EXTELLA LINK","ldn-untested;nvdec;status-playable","playable","2021-01-27 00:45:50.000" -"","Fear Effect Sedna","nvdec;status-playable","playable","2021-01-19 13:10:33.000" -"0100F5501CE12000","Fearmonium","status-boots;crash","boots","2024-03-06 11:26:11.000" -"0100E4300CB3E000","Feather","status-playable","playable","2021-06-03 14:11:27.000" -"","Felix the Reaper","nvdec;status-playable","playable","2020-10-20 23:43:03.000" -"","Feudal Alloy","status-playable","playable","2021-01-14 08:48:14.000" -"01006980127F0000","Fight Crab","status-playable;online-broken;ldn-untested","playable","2022-10-05 10:24:04.000" -"","Fight of Animals","online;status-playable","playable","2020-10-15 15:08:28.000" -"","Fight'N Rage","status-playable","playable","2020-06-16 23:35:19.000" -"0100D02014048000","Fighting EX Layer Another Dash","status-playable;online-broken;UE4","playable","2024-04-07 10:22:33.000" -"0100118009C68000","Figment","nvdec;status-playable","playable","2021-01-27 19:36:05.000" -"","Fill-a-Pix: Phil's Epic Adventure","status-playable","playable","2020-12-22 13:48:22.000" -"0100C3A00BB76000","Fimbul","status-playable;nvdec","playable","2022-07-26 13:31:47.000" -"","Fin and the Ancient Mystery","nvdec;status-playable","playable","2020-12-17 16:40:39.000" -"0100A5B00BDC6000","Final Fantasy VII","status-playable","playable","2022-12-09 17:03:30.000" -"","Final Light, The Prison","status-playable","playable","2020-07-31 21:48:44.000" -"0100FF100FB68000","Finding Teddy 2 : Definitive Edition","gpu;status-ingame","ingame","2024-04-19 16:51:33.000" -"","Fire & Water","status-playable","playable","2020-12-15 15:43:20.000" -"0100F15003E64000","Fire Emblem Warriors","status-playable;nvdec","playable","2023-05-10 01:53:10.000" -"010071F0143EA000","Fire Emblem Warriors: Three Hopes","gpu;status-ingame;nvdec","ingame","2024-05-01 07:07:42.000" -"0100A6301214E000","Fire Emblem: Engage","status-playable;amd-vendor-bug;mac-bug","playable","2024-09-01 23:37:26.000" -"0100A12011CC8000","Fire Emblem: Shadow Dragon and the Blade of Light","status-playable","playable","2022-10-17 19:49:14.000" -"010055D009F78000","Fire Emblem: Three Houses","status-playable;online-broken","playable","2024-09-14 23:53:50.000" -"010025C014798000","Fire: Ungh's Quest","status-playable;nvdec","playable","2022-10-27 21:41:26.000" -"0100434003C58000","Firefighters - The Simulation","status-playable","playable","2021-02-19 13:32:05.000" -"","Firefighters: Airport Fire Department","status-playable","playable","2021-02-15 19:17:00.000" -"0100AC300919A000","Firewatch","status-playable","playable","2021-06-03 10:56:38.000" -"","Firework","status-playable","playable","2020-12-04 20:20:09.000" -"0100DEB00ACE2000","Fishing Star World Tour","status-playable","playable","2022-09-13 19:08:51.000" -"010069800D292000","Fishing Universe Simulator","status-playable","playable","2021-04-15 14:00:43.000" -"0100807008868000","Fit Boxing","status-playable","playable","2022-07-26 19:24:55.000" -"","Fitness Boxing","services;status-ingame","ingame","2020-05-17 14:00:48.000" -"0100E7300AAD4000","Fitness Boxing","status-playable","playable","2021-04-14 20:33:33.000" -"0100073011382000","Fitness Boxing 2: Rhythm & Exercise","crash;status-ingame","ingame","2021-04-14 20:40:48.000" -"","Five Dates","nvdec;status-playable","playable","2020-12-11 15:17:11.000" -"01009060193C4000","Five Nights At Freddy’s Security Breach","gpu;status-ingame;crash;mac-bug","ingame","2023-04-23 22:33:28.000" -"0100B6200D8D2000","Five Nights at Freddy's","status-playable","playable","2022-09-13 19:26:36.000" -"01004EB00E43A000","Five Nights at Freddy's 2","status-playable","playable","2023-02-08 15:48:24.000" -"010056100E43C000","Five Nights at Freddy's 3","status-playable","playable","2022-09-13 20:58:07.000" -"010083800E43E000","Five Nights at Freddy's 4","status-playable","playable","2023-08-19 07:28:03.000" -"0100F7901118C000","Five Nights at Freddy's: Help Wanted","status-playable;UE4","playable","2022-09-29 12:40:09.000" -"01003B200E440000","Five Nights at Freddy's: Sister Location","status-playable","playable","2023-10-06 09:00:58.000" -"010038200E088000","Flan","status-ingame;crash;regression","ingame","2021-11-17 07:39:28.000" -"","Flashback","nvdec;status-playable","playable","2020-05-14 13:57:29.000" -"0100C53004C52000","Flat Heroes","gpu;status-ingame","ingame","2022-07-26 19:37:37.000" -"","Flatland: Prologue","status-playable","playable","2020-12-11 20:41:12.000" -"","Flinthook","online;status-playable","playable","2021-03-25 20:42:29.000" -"010095A004040000","Flip Wars","services;status-ingame;ldn-untested","ingame","2022-05-02 15:39:18.000" -"01009FB002B2E000","Flipping Death","status-playable","playable","2021-02-17 16:12:30.000" -"","Flood of Light","status-playable","playable","2020-05-15 14:15:25.000" -"0100DF9005E7A000","Floor Kids","status-playable;nvdec","playable","2024-08-18 19:38:49.000" -"","Florence","status-playable","playable","2020-09-05 01:22:30.000" -"","Flowlines VS","status-playable","playable","2020-12-17 17:01:53.000" -"","Flux8","nvdec;status-playable","playable","2020-06-19 20:55:11.000" -"","Fly O'Clock VS","status-playable","playable","2020-05-17 13:39:52.000" -"","Fly Punch Boom!","online;status-playable","playable","2020-06-21 12:06:11.000" -"0100419013A8A000","Flying Hero X","status-menus;crash","menus","2021-11-17 07:46:58.000" -"","Fobia","status-playable","playable","2020-12-14 21:05:23.000" -"0100F3900D0F0000","Food Truck Tycoon","status-playable","playable","2022-10-17 20:15:55.000" -"01007CF013152000","Football Manager 2021 Touch","gpu;status-ingame","ingame","2022-10-17 20:08:23.000" -"010097F0099B4000","Football Manager Touch 2018","status-playable","playable","2022-07-26 20:17:56.000" -"010069400B6BE000","For The King","nvdec;status-playable","playable","2021-02-15 18:51:44.000" -"01001D200BCC4000","Forager","status-menus;crash","menus","2021-11-24 07:10:17.000" -"0100AE001256E000","Foreclosed","status-ingame;crash;Needs More Attention;nvdec","ingame","2022-12-06 14:41:12.000" -"","Foregone","deadlock;status-ingame","ingame","2020-12-17 15:26:53.000" -"010059E00B93C000","Forgotton Anne","nvdec;status-playable","playable","2021-02-15 18:28:07.000" -"","Fort Boyard","nvdec;slow;status-playable","playable","2020-05-15 13:22:53.000" -"010025400AECE000","Fortnite","services-horizon;status-nothing","nothing","2024-04-06 18:23:25.000" -"0100CA500756C000","Fossil Hunters","status-playable;nvdec","playable","2022-07-27 11:37:20.000" -"","FoxyLand","status-playable","playable","2020-07-29 20:55:20.000" -"","FoxyLand 2","status-playable","playable","2020-08-06 14:41:30.000" -"01004200099F2000","Fractured Minds","status-playable","playable","2022-09-13 21:21:40.000" -"0100AC40108D8000","Fred3ric","status-playable","playable","2021-04-15 13:30:31.000" -"","Frederic 2","status-playable","playable","2020-07-23 16:44:37.000" -"","Frederic: Resurrection of Music","nvdec;status-playable","playable","2020-07-23 16:59:53.000" -"010082B00EE50000","Freedom Finger","nvdec;status-playable","playable","2021-06-09 19:31:30.000" -"","Freedom Planet","status-playable","playable","2020-05-14 12:23:06.000" -"010003F00BD48000","Friday the 13th: Killer Puzzle","status-playable","playable","2021-01-28 01:33:38.000" -"010092A00C4B6000","Friday the 13th: The Game","status-playable;nvdec;online-broken;UE4","playable","2022-09-06 17:33:27.000" -"0100F200178F4000","Front Mission 1st Remake","status-playable","playable","2023-06-09 07:44:24.000" -"","Frontline Zed","status-playable","playable","2020-10-03 12:55:59.000" -"0100B5300B49A000","Frost","status-playable","playable","2022-07-27 12:00:36.000" -"","Fruitfall Crush","status-playable","playable","2020-10-20 11:33:33.000" -"","FullBlast","status-playable","playable","2020-05-19 10:34:13.000" -"","FunBox Party","status-playable","playable","2020-05-15 12:07:02.000" -"","Funghi Puzzle Funghi Explosion","status-playable","playable","2020-11-23 14:17:41.000" -"01008E10130F8000","Funimation","gpu;status-boots","boots","2021-04-08 13:08:17.000" -"","Funny Bunny Adventures","status-playable","playable","2020-08-05 13:46:56.000" -"01000EC00AF98000","Furi","status-playable","playable","2022-07-27 12:21:20.000" -"01000EC00AF98000","Furi Definitive Edition","status-playable","playable","2022-07-27 12:35:08.000" -"0100A6B00D4EC000","Furwind","status-playable","playable","2021-02-19 19:44:08.000" -"","Fury Unleashed","crash;services;status-ingame","ingame","2020-10-18 11:52:40.000" -"","Fury Unleashed Demo","status-playable","playable","2020-10-08 20:09:21.000" -"","Fushigi no Gensokyo Lotus Labyrinth","Needs Update;audio;gpu;nvdec;status-ingame","ingame","2021-01-20 15:30:02.000" -"01003C300B274000","Futari de! Nyanko Daisensou","status-playable","playable","2024-01-05 22:26:52.000" -"010067600F1A0000","FuzzBall","crash;status-nothing","nothing","2021-03-29 20:13:21.000" -"","G-MODE Archives 06 The strongest ever Julia Miyamoto","status-playable","playable","2020-10-15 13:06:26.000" -"","G.I. Joe Operation Blackout","UE4;crash;status-boots","boots","2020-11-21 12:37:44.000" -"0100C9800A454000","GALAK-Z: Variant S","status-boots;online-broken","boots","2022-07-29 11:59:12.000" -"010045F00BFC2000","GIGA WRECKER Alt.","status-playable","playable","2022-07-29 14:13:54.000" -"0100C1800A9B6000","GO VACATION","status-playable;nvdec;ldn-works","playable","2024-05-13 19:28:53.000" -"01001C700873E000","GOD EATER 3","gpu;status-ingame;nvdec","ingame","2022-07-29 21:33:21.000" -"","GOD WARS THE COMPLETE LEGEND","nvdec;status-playable","playable","2020-05-19 14:37:50.000" -"","GORSD","status-playable","playable","2020-12-04 22:15:21.000" -"010068D00AE68000","GREEN","status-playable","playable","2022-08-01 12:54:15.000" -"0100DFE00F002000","GREEN The Life Algorithm","status-playable","playable","2022-09-27 21:37:13.000" -"0100DC800A602000","GRID Autosport","status-playable;nvdec;online-broken;ldn-untested","playable","2023-03-02 20:14:45.000" -"0100459009A2A000","GRIP","status-playable;nvdec;online-broken;UE4","playable","2022-08-01 15:00:22.000" -"0100E1700C31C000","GRIS","nvdec;status-playable","playable","2021-06-03 13:33:44.000" -"01009D7011B02000","GRISAIA PHANTOM TRIGGER 01&02","status-playable;nvdec","playable","2022-12-04 21:16:06.000" -"0100D970123BA000","GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000","audout;status-playable","playable","2021-01-31 12:40:37.000" -"01002330123BC000","GRISAIA PHANTOM TRIGGER 05","audout;nvdec;status-playable","playable","2021-01-31 12:49:59.000" -"0100CAF013AE6000","GRISAIA PHANTOM TRIGGER 5.5","audout;nvdec;status-playable","playable","2021-01-31 12:59:44.000" -"","GUILTY GEAR XX ACCENT CORE PLUS R","nvdec;status-playable","playable","2021-01-13 09:28:33.000" -"01003C6008940000","GUNBIRD for Nintendo Switch","32-bit;status-playable","playable","2021-06-04 19:16:01.000" -"","GUNBIRD2 for Nintendo Switch","status-playable","playable","2020-10-10 14:41:16.000" -"","Gal Metal - 01B8000C2EA000","status-playable","playable","2022-07-27 20:57:48.000" -"010024700901A000","Gal*Gun 2","status-playable;nvdec;UE4","playable","2022-07-27 12:45:37.000" -"0100047013378000","Gal*Gun Returns [ ぎゃる☆がん りたーんず ]","status-playable;nvdec","playable","2022-10-17 23:50:46.000" -"0100C62011050000","Game Boy - Nintendo Switch Online","status-playable","playable","2023-03-21 12:43:48.000" -"010012F017576000","Game Boy Advance - Nintendo Switch Online","status-playable","playable","2023-02-16 20:38:15.000" -"0100FA5010788000","Game Builder Garage","status-ingame","ingame","2024-04-20 21:46:22.000" -"","Game Dev Story","status-playable","playable","2020-05-20 00:00:38.000" -"01006BD00F8C0000","Game Doraemon Nobita no Shin Kyoryu","gpu;status-ingame","ingame","2023-02-27 02:03:28.000" -"","Garage","status-playable","playable","2020-05-19 20:59:53.000" -"010061E00E8BE000","Garfield Kart Furious Racing","status-playable;ldn-works;loader-allocator","playable","2022-09-13 21:40:25.000" -"","Gates of Hell","slow;status-playable","playable","2020-10-22 12:44:26.000" -"010025500C098000","Gato Roboto","status-playable","playable","2023-01-20 15:04:11.000" -"010065E003FD8000","Gear.Club Unlimited","status-playable","playable","2021-06-08 13:03:19.000" -"010072900AFF0000","Gear.Club Unlimited 2","status-playable;nvdec;online-broken","playable","2022-07-29 12:52:16.000" -"01000F000D9F0000","Geki Yaba Runner Anniversary Edition","status-playable","playable","2021-02-19 18:59:07.000" -"","Gekido Kintaro's Revenge","status-playable","playable","2020-10-27 12:44:05.000" -"01009D000AF3A000","Gelly Break","UE4;status-playable","playable","2021-03-03 16:04:02.000" -"01001A4008192000","Gem Smashers","nvdec;status-playable","playable","2021-06-08 13:40:51.000" -"","Genetic Disaster","status-playable","playable","2020-06-19 21:41:12.000" -"0100D7E0110B2000","Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H","32-bit;status-playable","playable","2022-06-06 00:42:09.000" -"010000300C79C000","Gensokyo Defenders","status-playable;online-broken;UE4","playable","2022-07-29 13:48:12.000" -"0100AC600EB4C000","Gensou Rougoku no Kaleidscope","status-menus;crash","menus","2021-11-24 08:45:07.000" -"","Georifters","UE4;crash;nvdec;status-menus","menus","2020-12-04 22:30:50.000" -"","Gerrrms","status-playable","playable","2020-08-15 11:32:52.000" -"","Get 10 Quest","status-playable","playable","2020-08-03 12:48:39.000" -"0100B5B00E77C000","Get Over Here","status-playable","playable","2022-10-28 11:53:52.000" -"0100EEB005ACC000","Ghost 1.0","status-playable","playable","2021-02-19 20:48:47.000" -"010063200C588000","Ghost Blade HD","status-playable;online-broken","playable","2022-09-13 21:51:21.000" -"","Ghost Grab 3000","status-playable","playable","2020-07-11 18:09:52.000" -"","Ghost Parade","status-playable","playable","2020-07-14 00:43:54.000" -"01004B301108C000","Ghost Sweeper","status-playable","playable","2022-10-10 12:45:36.000" -"010029B018432000","Ghost Trick Phantom Detective","status-playable","playable","2023-08-23 14:50:12.000" -"010008A00F632000","Ghostbusters: The Video Game Remastered","status-playable;nvdec","playable","2021-09-17 07:26:57.000" -"","Ghostrunner","UE4;crash;gpu;nvdec;status-ingame","ingame","2020-12-17 13:01:59.000" -"0100D6200F2BA000","Ghosts 'n Goblins Resurrection","status-playable","playable","2023-05-09 12:40:41.000" -"01003830092B8000","Giana Sisters: Twisted Dreams - Owltimate Edition","status-playable","playable","2022-07-29 14:06:12.000" -"0100D95012C0A000","Gibbous - A Cthulhu Adventure","status-playable;nvdec","playable","2022-10-10 12:57:17.000" -"01002C400E526000","Gigantosaurus The Game","status-playable;UE4","playable","2022-09-27 21:20:00.000" -"0100C50007070000","Ginger: Beyond the Crystal","status-playable","playable","2021-02-17 16:27:00.000" -"","Girabox","status-playable","playable","2020-12-12 13:55:05.000" -"","Giraffe and Annika","UE4;crash;status-ingame","ingame","2020-12-04 22:41:57.000" -"01006DD00CC96000","Girls und Panzer Dream Tank Match DX","status-playable;ldn-untested","playable","2022-09-12 16:07:11.000" -"","Glaive: Brick Breaker","status-playable","playable","2020-05-20 12:15:59.000" -"","Glitch's Trip","status-playable","playable","2020-12-17 16:00:57.000" -"0100EB501130E000","Glyph","status-playable","playable","2021-02-08 19:56:51.000" -"","Gnome More War","status-playable","playable","2020-12-17 16:33:07.000" -"","Gnomes Garden 2","status-playable","playable","2021-02-19 20:08:13.000" -"010036C00D0D6000","Gnomes Garden: Lost King","deadlock;status-menus","menus","2021-11-18 11:14:03.000" -"01008EF013A7C000","Gnosia","status-playable","playable","2021-04-05 17:20:30.000" -"01000C800FADC000","Go All Out","status-playable;online-broken","playable","2022-09-21 19:16:34.000" -"010055A0161F4000","Go Rally","gpu;status-ingame","ingame","2023-08-16 21:18:23.000" -"","Go! Fish Go!","status-playable","playable","2020-07-27 13:52:28.000" -"010032600C8CE000","Goat Simulator","32-bit;status-playable","playable","2022-07-29 21:02:33.000" -"0100CFA0111C8000","Gods Will Fall","status-playable","playable","2021-02-08 16:49:59.000" -"","Goetia","status-playable","playable","2020-05-19 12:55:39.000" -"","Going Under","deadlock;nvdec;status-ingame","ingame","2020-12-11 22:29:46.000" -"","Goken","status-playable","playable","2020-08-05 20:22:38.000" -"010013800F0A4000","Golazo - 010013800F0A4000","status-playable","playable","2022-09-13 21:58:37.000" -"01003C000D84C000","Golem Gates","status-ingame;crash;nvdec;online-broken;UE4","ingame","2022-07-30 11:35:11.000" -"","Golf Story","status-playable","playable","2020-05-14 14:56:17.000" -"01006FB00EBE0000","Golf With Your Friends","status-playable;online-broken","playable","2022-09-29 12:55:11.000" -"0100EEC00AA6E000","Gone Home","status-playable","playable","2022-08-01 11:14:20.000" -"","Gonner","status-playable","playable","2020-05-19 12:05:02.000" -"","Good Job!","status-playable","playable","2021-03-02 13:15:55.000" -"01003AD0123A2000","Good Night, Knight","status-nothing;crash","nothing","2023-07-30 23:38:13.000" -"","Good Pizza, Great Pizza","status-playable","playable","2020-12-04 22:59:18.000" -"","Goosebumps Dead of Night","gpu;nvdec;status-ingame","ingame","2020-12-10 20:02:16.000" -"","Goosebumps: The Game","status-playable","playable","2020-05-19 11:56:52.000" -"0100F2A005C98000","Gorogoa","status-playable","playable","2022-08-01 11:55:08.000" -"","Gotcha Racing 2nd","status-playable","playable","2020-07-23 17:14:04.000" -"","Gothic Murder: Adventure That Changes Destiny","deadlock;status-ingame;crash","ingame","2022-09-30 23:16:53.000" -"","Grab the Bottle","status-playable","playable","2020-07-14 17:06:41.000" -"","Graceful Explosion Machine","status-playable","playable","2020-05-19 20:36:55.000" -"","Grand Brix Shooter","slow;status-playable","playable","2020-06-24 13:23:54.000" -"010038100D436000","Grand Guilds","UE4;nvdec;status-playable","playable","2021-04-26 12:49:05.000" -"0100BE600D07A000","Grand Prix Story","status-playable","playable","2022-08-01 12:42:23.000" -"05B1D2ABD3D30000","Grand Theft Auto 3","services;status-nothing;crash;homebrew","nothing","2023-05-01 22:01:58.000" -"0100E0600BBC8000","Grandia HD Collection","status-boots;crash","boots","2024-08-19 04:29:48.000" -"","Grass Cutter","slow;status-ingame","ingame","2020-05-19 18:27:42.000" -"","Grave Danger","status-playable","playable","2020-05-18 17:41:28.000" -"010054A013E0C000","GraviFire","status-playable","playable","2021-04-05 17:13:32.000" -"01002C2011828000","Gravity Rider Zero","gpu;status-ingame;vulkan-backend-bug","ingame","2022-09-29 13:56:13.000" -"","Greedroid","status-playable","playable","2020-12-14 11:14:32.000" -"0100CBB0070EE000","Green Game","nvdec;status-playable","playable","2021-02-19 18:51:55.000" -"0100DA7013792000","Grey Skies: A War of the Worlds Story","status-playable;UE4","playable","2022-10-24 11:13:59.000" -"","Grid Mania","status-playable","playable","2020-05-19 14:11:05.000" -"","Gridd: Retroenhanced","status-playable","playable","2020-05-20 11:32:40.000" -"0100B7900B024000","Grim Fandango Remastered","status-playable;nvdec","playable","2022-08-01 13:55:58.000" -"010078E012D80000","Grim Legends 2: Song Of The Dark Swan","status-playable;nvdec","playable","2022-10-18 12:58:45.000" -"010009F011F90000","Grim Legends: The Forsaken Bride","status-playable;nvdec","playable","2022-10-18 13:14:06.000" -"01001E200F2F8000","Grimshade","status-playable","playable","2022-10-02 12:44:20.000" -"0100538012496000","Grindstone","status-playable","playable","2023-02-08 15:54:06.000" -"01005250123B8000","Grisaia Phantom Trigger 03","audout;status-playable","playable","2021-01-31 12:30:47.000" -"010091300FFA0000","Grizzland","gpu;status-ingame","ingame","2024-07-11 16:28:34.000" -"0100EB500D92E000","Groove Coaster: Wai Wai Party!!!!","status-playable;nvdec;ldn-broken","playable","2021-11-06 14:54:27.000" -"","Guacamelee! 2","status-playable","playable","2020-05-15 14:56:59.000" -"","Guacamelee! Super Turbo Championship Edition","status-playable","playable","2020-05-13 23:44:18.000" -"","Guess The Word","status-playable","playable","2020-07-26 21:34:25.000" -"","Guess the Character","status-playable","playable","2020-05-20 13:14:19.000" -"","Gunka o haita neko","gpu;nvdec;status-ingame","ingame","2020-08-25 12:37:56.000" -"","Gunman Clive HD Collection","status-playable","playable","2020-10-09 12:17:35.000" -"","Guns Gore and Cannoli 2","online;status-playable","playable","2021-01-06 18:43:59.000" -"","Gunvolt Chronicles: Luminous Avenger iX","status-playable","playable","2020-06-16 22:47:07.000" -"0100763015C2E000","Gunvolt Chronicles: Luminous Avenger iX 2","status-nothing;crash;Needs Update","nothing","2022-04-29 15:34:34.000" -"01002C8018554000","Gurimugurimoa OnceMore Demo","status-playable","playable","2022-07-29 22:07:31.000" -"0100AC601DCA8000","Gylt","status-ingame;crash","ingame","2024-03-18 20:16:51.000" -"0100822012D76000","HAAK","gpu;status-ingame","ingame","2023-02-19 14:31:05.000" -"","HARDCORE MECHA","slow;status-playable","playable","2020-11-01 15:06:33.000" -"","HARDCORE Maze Cube","status-playable","playable","2020-12-04 20:01:24.000" -"0100A8B00F0B4000","HYPERCHARGE: Unboxed","status-playable;nvdec;online-broken;UE4;ldn-untested","playable","2022-09-27 21:52:39.000" -"","Habroxia","status-playable","playable","2020-06-16 23:04:42.000" -"0100535012974000","Hades","status-playable;vulkan","playable","2022-10-05 10:45:21.000" -"","Hakoniwa Explorer Plus","slow;status-ingame","ingame","2021-02-19 16:56:19.000" -"","Halloween Pinball","status-playable","playable","2021-01-12 16:00:46.000" -"01006FF014152000","Hamidashi Creative","gpu;status-ingame","ingame","2021-12-19 15:30:51.000" -"01003B9007E86000","Hammerwatch","status-playable;online-broken;ldn-broken","playable","2022-08-01 16:28:46.000" -"01003620068EA000","Hand of Fate 2","status-playable","playable","2022-08-01 15:44:16.000" -"","Hang the Kings","status-playable","playable","2020-07-28 22:56:59.000" -"010066C018E50000","Happy Animals Mini Golf","gpu;status-ingame","ingame","2022-12-04 19:24:28.000" -"0100ECE00D13E000","Hard West","status-nothing;regression","nothing","2022-02-09 07:45:56.000" -"01000C90117FA000","HardCube","status-playable","playable","2021-05-05 18:33:03.000" -"","Hardway Party","status-playable","playable","2020-07-26 12:35:07.000" -"0100D0500AD30000","Harvest Life","status-playable","playable","2022-08-01 16:51:45.000" -"","Harvest Moon One World - 010016B010FDE00","status-playable","playable","2023-05-26 09:17:19.000" -"0100A280187BC000","Harvestella","status-playable;UE4;vulkan-backend-bug;mac-bug","playable","2024-02-13 07:04:11.000" -"","Has-Been Heroes","status-playable","playable","2021-01-13 13:31:48.000" -"01001CC00FA1A000","Hatsune Miku: Project DIVA Mega Mix","audio;status-playable;online-broken","playable","2024-01-07 23:12:57.000" -"01009E6014F18000","Haunted Dawn: The Zombie Apocalypse","status-playable","playable","2022-10-28 12:31:51.000" -"","Haunted Dungeons: Hyakki Castle","status-playable","playable","2020-08-12 14:21:48.000" -"0100E2600DBAA000","Haven","status-playable","playable","2021-03-24 11:52:41.000" -"0100EA900FB2C000","Hayfever","status-playable;loader-allocator","playable","2022-09-22 17:35:41.000" -"0100EFE00E1DC000","Headliner: NoviNews","online;status-playable","playable","2021-03-01 11:36:00.000" -"","Headsnatchers","UE4;crash;status-menus","menus","2020-07-14 13:29:14.000" -"","Headspun","status-playable","playable","2020-07-31 19:46:47.000" -"","Heart and Slash","status-playable","playable","2021-01-13 20:56:32.000" -"","Heaven Dust","status-playable","playable","2020-05-17 14:02:41.000" -"0100FD901000C000","Heaven's Vault","crash;status-ingame","ingame","2021-02-08 18:22:01.000" -"","Helheim Hassle","status-playable","playable","2020-10-14 11:38:36.000" -"01000938017E5C00","Hell Pie0","status-playable;nvdec;UE4","playable","2022-11-03 16:48:46.000" -"0100A4600E27A000","Hell Warders","online;status-playable","playable","2021-02-27 02:31:03.000" -"","Hell is Other Demons","status-playable","playable","2021-01-13 13:23:02.000" -"010044500CF8E000","Hellblade: Senua's Sacrifice","gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-01 19:36:50.000" -"010087D0084A8000","Hello Kitty Kruisers With Sanrio Friends","nvdec;status-playable","playable","2021-06-04 19:08:46.000" -"0100FAA00B168000","Hello Neighbor","status-playable;UE4","playable","2022-08-01 21:32:23.000" -"","Hello Neighbor: Hide And Seek","UE4;gpu;slow;status-ingame","ingame","2020-10-24 10:59:57.000" -"010024600C794000","Hellpoint","status-menus","menus","2021-11-26 13:24:20.000" -"","Hero Express","nvdec;status-playable","playable","2020-08-06 13:23:43.000" -"010077D01094C000","Hero-U: Rogue to Redemption","nvdec;status-playable","playable","2021-03-24 11:40:01.000" -"0100D2B00BC54000","Heroes of Hammerwatch","status-playable","playable","2022-08-01 18:30:21.000" -"01001B70080F0000","Heroine Anthem Zero episode 1","status-playable;vulkan-backend-bug","playable","2022-08-01 22:02:36.000" -"010057300B0DC000","Heroki","gpu;status-ingame","ingame","2023-07-30 19:30:01.000" -"","Heroland","status-playable","playable","2020-08-05 15:35:39.000" -"01007AC00E012000","Hexagravity","status-playable","playable","2021-05-28 13:47:48.000" -"01004E800F03C000","Hidden","slow;status-ingame","ingame","2022-10-05 10:56:53.000" -"0100F6A00A684000","Higurashi no Naku Koro ni Hō","audio;status-ingame","ingame","2021-09-18 14:40:28.000" -"0100F8D0129F4000","Himehibi 1 gakki - Princess Days","status-nothing;crash","nothing","2021-11-03 08:34:19.000" -"","Hiragana Pixel Party","status-playable","playable","2021-01-14 08:36:50.000" -"01004990132AC000","Hitman 3 - Cloud Version","Needs Update;crash;services;status-nothing","nothing","2021-04-18 22:35:07.000" -"010083A018262000","Hitman: Blood Money - Reprisal","deadlock;status-ingame","ingame","2024-09-28 16:28:50.000" -"","HoPiKo","status-playable","playable","2021-01-13 20:12:38.000" -"","Hob: The Definitive Edition","status-playable","playable","2021-01-13 09:39:19.000" -"0100F7300ED2C000","Hoggy 2","status-playable","playable","2022-10-10 13:53:35.000" -"0100F7E00C70E000","Hogwarts Legacy 0100F7E00C70E000","status-ingame;slow","ingame","2024-09-03 19:53:58.000" -"0100633007D48000","Hollow Knight","status-playable;nvdec","playable","2023-01-16 15:44:56.000" -"0100F2100061E800","Hollow0","UE4;gpu;status-ingame","ingame","2021-03-03 23:42:56.000" -"","Holy Potatoes! What the Hell?!","status-playable","playable","2020-07-03 10:48:56.000" -"010087800EE5A000","Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit","status-boots;crash","boots","2023-02-19 00:51:21.000" -"010086D011EB8000","Horace","status-playable","playable","2022-10-10 14:03:50.000" -"0100001019F6E000","Horizon Chase 2","deadlock;slow;status-ingame;crash;UE4","ingame","2024-08-19 04:24:06.000" -"01009EA00B714000","Horizon Chase Turbo","status-playable","playable","2021-02-19 19:40:56.000" -"0100E4200FA82000","Horror Pinball Bundle","status-menus;crash","menus","2022-09-13 22:15:34.000" -"0100017007980000","Hotel Transylvania 3: Monsters Overboard","nvdec;status-playable","playable","2021-01-27 18:55:31.000" -"0100D0E00E51E000","Hotline Miami Collection","status-playable;nvdec","playable","2022-09-09 16:41:19.000" -"0100BDE008218000","Hotshot Racing","gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug","ingame","2024-02-04 21:31:17.000" -"0100CAE00EB02000","House Flipper","status-playable","playable","2021-06-16 18:28:32.000" -"0100F6800910A000","Hover","status-playable;online-broken","playable","2022-09-20 12:54:46.000" -"0100A66003384000","Hulu","status-boots;online-broken","boots","2022-12-09 10:05:00.000" -"","Human Resource Machine","32-bit;status-playable","playable","2020-12-17 21:47:09.000" -"","Human: Fall Flat","status-playable","playable","2021-01-13 18:36:05.000" -"","Hungry Shark World","status-playable","playable","2021-01-13 18:26:08.000" -"0100EBA004726000","Huntdown","status-playable","playable","2021-04-05 16:59:54.000" -"010068000CAC0000","Hunter's Legacy: Purrfect Edition","status-playable","playable","2022-08-02 10:33:31.000" -"0100C460040EA000","Hunting Simulator","status-playable;UE4","playable","2022-08-02 10:54:08.000" -"010061F010C3A000","Hunting Simulator 2","status-playable;UE4","playable","2022-10-10 14:25:51.000" -"","Hyper Jam","UE4;crash;status-boots","boots","2020-12-15 22:52:11.000" -"01003B200B372000","Hyper Light Drifter - Special Edition","status-playable;vulkan-backend-bug","playable","2023-01-13 15:44:48.000" -"","HyperBrawl Tournament","crash;services;status-boots","boots","2020-12-04 23:03:27.000" -"010061400ED90000","HyperParasite","status-playable;nvdec;UE4","playable","2022-09-27 22:05:44.000" -"0100959010466000","Hypnospace Outlaw","status-ingame;nvdec","ingame","2023-08-02 22:46:49.000" -"01002B00111A2000","Hyrule Warriors: Age of Calamity","gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug","ingame","2024-02-28 00:47:00.000" -"0100A2C01320E000","Hyrule Warriors: Age of Calamity - Demo Version","slow;status-playable","playable","2022-10-10 17:37:41.000" -"0100AE00096EA000","Hyrule Warriors: Definitive Edition","services-horizon;status-ingame;nvdec","ingame","2024-06-16 10:34:05.000" -"0100849000BDA000","I AM SETSUNA","status-playable","playable","2021-11-28 11:06:11.000" -"01001860140B0000","I Saw Black Clouds","nvdec;status-playable","playable","2021-04-19 17:22:16.000" -"","I, Zombie","status-playable","playable","2021-01-13 14:53:44.000" -"","ICEY","status-playable","playable","2021-01-14 16:16:04.000" -"0100737003190000","IMPLOSION","status-playable;nvdec","playable","2021-12-12 03:52:13.000" -"0100F1401161E000","INMOST","status-playable","playable","2022-10-05 11:27:40.000" -"0100D2D009028000","INSIDE","status-playable","playable","2021-12-25 20:24:56.000" -"010099700D750000","INSTANT SPORTS","status-playable","playable","2022-09-09 12:59:40.000" -"01001D0003B96000","INVERSUS Deluxe","status-playable;online-broken","playable","2022-08-02 14:35:36.000" -"0100F06013710000","ISLAND","status-playable","playable","2021-05-06 15:11:47.000" -"010068700C70A000","ITTA","status-playable","playable","2021-06-07 03:15:52.000" -"01004E5007E92000","Ice Age Scrat's Nutty Adventure","status-playable;nvdec","playable","2022-09-13 22:22:29.000" -"","Ice Cream Surfer","status-playable","playable","2020-07-29 12:04:07.000" -"0100954014718000","Ice Station Z","status-menus;crash","menus","2021-11-21 20:02:15.000" -"0100BC60099FE000","Iconoclasts","status-playable","playable","2021-08-30 21:11:04.000" -"","Idle Champions of the Forgotten Realms","online;status-boots","boots","2020-12-17 18:24:57.000" -"01002EC014BCA000","Idol Days - 愛怒流でいす","gpu;status-ingame;crash","ingame","2021-12-19 15:31:28.000" -"","If Found...","status-playable","playable","2020-12-11 13:43:14.000" -"01001AC00ED72000","If My Heart Had Wings","status-playable","playable","2022-09-29 14:54:57.000" -"01009F20086A0000","Ikaruga","status-playable","playable","2023-04-06 15:00:02.000" -"010040900AF46000","Ikenfell","status-playable","playable","2021-06-16 17:18:44.000" -"01007BC00E55A000","Immortal Planet","status-playable","playable","2022-09-20 13:40:43.000" -"010079501025C000","Immortal Realms: Vampire Wars","nvdec;status-playable","playable","2021-06-17 17:41:46.000" -"","Immortal Redneck - 0100F400435A000","nvdec;status-playable","playable","2021-01-27 18:36:28.000" -"01004A600EC0A000","Immortals Fenyx Rising","gpu;status-menus;crash","menus","2023-02-24 16:19:55.000" -"0100A760129A0000","In rays of the Light","status-playable","playable","2021-04-07 15:18:07.000" -"01004DE011076000","Indie Darling Bundle Vol. 3","status-playable","playable","2022-10-02 13:01:57.000" -"0100A2101107C000","Indie Puzzle Bundle Vol 1","status-playable","playable","2022-09-27 22:23:21.000" -"","Indiecalypse","nvdec;status-playable","playable","2020-06-11 20:19:09.000" -"01001D3003FDE000","Indivisible","status-playable;nvdec","playable","2022-09-29 15:20:57.000" -"01002BD00F626000","Inertial Drift","status-playable;online-broken","playable","2022-10-11 12:22:19.000" -"","Infernium","UE4;regression;status-nothing","nothing","2021-01-13 16:36:07.000" -"","Infinite Minigolf","online;status-playable","playable","2020-09-29 12:26:25.000" -"01001CB00EFD6000","Infliction","status-playable;nvdec;UE4","playable","2022-10-02 13:15:55.000" -"","InnerSpace","status-playable","playable","2021-01-13 19:36:14.000" -"","Inside Grass: A little adventure","status-playable","playable","2020-10-15 15:26:27.000" -"","Instant Sports Summer Games","gpu;status-menus","menus","2020-09-02 13:39:28.000" -"010031B0145B8000","Instant Sports Tennis","status-playable","playable","2022-10-28 16:42:17.000" -"010041501005E000","Interrogation: You will be deceived","status-playable","playable","2022-10-05 11:40:10.000" -"01000F700DECE000","Into the Dead 2","status-playable;nvdec","playable","2022-09-14 12:36:14.000" -"","Invisible Fist","status-playable","playable","2020-08-08 13:25:52.000" -"","Invisible, Inc.","crash;status-nothing","nothing","2021-01-29 16:28:13.000" -"01005F400E644000","Invisigun Reloaded","gpu;online;status-ingame","ingame","2021-06-10 12:13:24.000" -"010041C00D086000","Ion Fury","status-ingame;vulkan-backend-bug","ingame","2022-08-07 08:27:51.000" -"010095C016C14000","Iridium","status-playable","playable","2022-08-05 23:19:53.000" -"0100945012168000","Iris Fall","status-playable;nvdec","playable","2022-10-18 13:40:22.000" -"0100AD300B786000","Iris School of Wizardry - Vinculum Hearts -","status-playable","playable","2022-12-05 13:11:15.000" -"01005270118D6000","Iron Wings","slow;status-ingame","ingame","2022-08-07 08:32:57.000" -"","Ironcast","status-playable","playable","2021-01-13 13:54:29.000" -"0100E5700CD56000","Irony Curtain: From Matryoshka with Love","status-playable","playable","2021-06-04 20:12:37.000" -"","Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate","status-playable","playable","2020-08-31 13:52:21.000" -"010077900440A000","Island Flight Simulator","status-playable","playable","2021-06-04 19:42:46.000" -"","Island Saver","nvdec;status-playable","playable","2020-10-23 22:07:02.000" -"","Isoland","status-playable","playable","2020-07-26 13:48:16.000" -"","Isoland 2: Ashes of Time","status-playable","playable","2020-07-26 14:29:05.000" -"010001F0145A8000","Isolomus","services;status-boots","boots","2021-11-03 07:48:21.000" -"","Ittle Dew 2+","status-playable","playable","2020-11-17 11:44:32.000" -"0100DEB00F12A000","IxSHE Tell","status-playable;nvdec","playable","2022-12-02 18:00:42.000" -"0100D8E00C874000","Izneo","status-menus;online-broken","menus","2022-08-06 15:56:23.000" -"","JDM Racing","status-playable","playable","2020-08-03 17:02:37.000" -"0100183010F12000","JUMP FORCE Deluxe Edition","status-playable;nvdec;online-broken;UE4","playable","2023-10-01 15:56:05.000" -"0100DDB00DB38000","JUST DANCE 2020","status-playable","playable","2022-01-24 13:31:57.000" -"010035A0044E8000","JYDGE","status-playable","playable","2022-08-02 21:20:13.000" -"","James Pond Operation Robocod","status-playable","playable","2021-01-13 09:48:45.000" -"","Japanese Rail Sim: Journey to Kyoto","nvdec;status-playable","playable","2020-07-29 17:14:21.000" -"","Jenny LeClue - Detectivu","crash;status-nothing","nothing","2020-12-15 21:07:07.000" -"01006E400AE2A000","Jeopardy!","audout;nvdec;online;status-playable","playable","2021-02-22 13:53:46.000" -"0100E4900D266000","Jet Kave Adventure","status-playable;nvdec","playable","2022-09-09 14:50:39.000" -"0100F3500C70C000","Jet Lancer","gpu;status-ingame","ingame","2021-02-15 18:15:47.000" -"0100A5A00AF26000","Jettomero: Hero of the Universe","status-playable","playable","2022-08-02 14:46:43.000" -"01008330134DA000","Jiffy","gpu;status-ingame;opengl","ingame","2024-02-03 23:11:24.000" -"","Jim Is Moving Out!","deadlock;status-ingame","ingame","2020-06-03 22:05:19.000" -"0100F4D00D8BE000","Jinrui no Ninasama he","status-ingame;crash","ingame","2023-03-07 02:04:17.000" -"010038D011F08000","Jisei: The First Case HD","audio;status-playable","playable","2022-10-05 11:43:33.000" -"01008120128C2000","JoJos Bizarre Adventure All-Star Battle R","status-playable","playable","2022-12-03 10:45:10.000" -"","Job the Leprechaun","status-playable","playable","2020-06-05 12:10:06.000" -"01007090104EC000","John Wick Hex","status-playable","playable","2022-08-07 08:29:12.000" -"010069B002CDE000","Johnny Turbo's Arcade Gate of Doom","status-playable","playable","2022-07-29 12:17:50.000" -"010080D002CC6000","Johnny Turbo's Arcade Two Crude Dudes","status-playable","playable","2022-08-02 20:29:50.000" -"0100D230069CC000","Johnny Turbo's Arcade Wizard Fire","status-playable","playable","2022-08-02 20:39:15.000" -"01008B60117EC000","Journey to the Savage Planet","status-playable;nvdec;UE4;ldn-untested","playable","2022-10-02 18:48:12.000" -"0100C7600F654000","Juicy Realm - 0100C7600F654000","status-playable","playable","2023-02-21 19:16:20.000" -"","Jumanji","UE4;crash;status-boots","boots","2020-07-12 13:52:25.000" -"","Jump King","status-playable","playable","2020-06-09 10:12:39.000" -"0100B9C012706000","Jump Rope Challenge","services;status-boots;crash;Needs Update","boots","2023-02-27 01:24:28.000" -"","Jumping Joe & Friends","status-playable","playable","2021-01-13 17:09:42.000" -"","JunkPlanet","status-playable","playable","2020-11-09 12:38:33.000" -"0100CE100A826000","Jurassic Pinball","status-playable","playable","2021-06-04 19:02:37.000" -"010050A011344000","Jurassic World Evolution Complete Edition","cpu;status-menus;crash","menus","2023-08-04 18:06:54.000" -"0100BCE000598000","Just Dance 2017","online;status-playable","playable","2021-03-05 09:46:01.000" -"","Just Dance 2019","gpu;online;status-ingame","ingame","2021-02-27 17:21:27.000" -"0100EA6014BB8000","Just Dance 2022","gpu;services;status-ingame;crash;Needs Update","ingame","2022-10-28 11:01:53.000" -"0100BEE017FC0000","Just Dance 2023","status-nothing","nothing","2023-06-05 16:44:54.000" -"0100AC600CF0A000","Just Die Already","status-playable;UE4","playable","2022-12-13 13:37:50.000" -"","Just Glide","status-playable","playable","2020-08-07 17:38:10.000" -"","Just Shapes & Beats","ldn-untested;nvdec;status-playable","playable","2021-02-09 12:18:36.000" -"0100BDC00A664000","KAMEN RIDER CLIMAX SCRAMBLE","status-playable;nvdec;ldn-untested","playable","2024-07-03 08:51:11.000" -"0100A9801180E000","KAMEN RIDER memory of heroez / Premium Sound Edition","status-playable","playable","2022-12-06 03:14:26.000" -"","KAMIKO","status-playable","playable","2020-05-13 12:48:57.000" -"0100F9800EDFA000","KATANA KAMI: A Way of the Samurai Story","slow;status-playable","playable","2022-04-09 10:40:16.000" -"","KINGDOM HEARTS Melody of Memory","crash;nvdec;status-ingame","ingame","2021-03-03 17:34:12.000" -"","KORG Gadget","status-playable","playable","2020-05-13 13:57:24.000" -"010035A00DF62000","KUNAI","status-playable;nvdec","playable","2022-09-20 13:48:34.000" -"010037500F282000","KUUKIYOMI 2: Consider It More! - New Era","status-nothing;crash;Needs Update","nothing","2021-11-02 09:34:40.000" -"0100D58012FC2000","Kagamihara/Justice","crash;status-nothing","nothing","2021-06-21 16:41:29.000" -"0100D5F00EC52000","Kairobotica","status-playable","playable","2021-05-06 12:17:56.000" -"","Kangokuto Mary Skelter Finale","audio;crash;status-ingame","ingame","2021-01-09 22:39:28.000" -"01007FD00DB20000","Katakoi Contrast - collection of branch -","status-playable;nvdec","playable","2022-12-09 09:41:26.000" -"0100D7000C2C6000","Katamari Damacy REROLL","status-playable","playable","2022-08-02 21:35:05.000" -"010029600D56A000","Katana ZERO","status-playable","playable","2022-08-26 08:09:09.000" -"010038B00F142000","Kaze and the Wild Masks","status-playable","playable","2021-04-19 17:11:03.000" -"","Keen: One Girl Army","status-playable","playable","2020-12-14 23:19:52.000" -"01008D400A584000","Keep Talking and Nobody Explodes","status-playable","playable","2021-02-15 18:05:21.000" -"01004B100BDA2000","Kemono Friends Picross","status-playable","playable","2023-02-08 15:54:34.000" -"","Kentucky Robo Chicken","status-playable","playable","2020-05-12 20:54:17.000" -"0100327005C94000","Kentucky Route Zero [0100327005C94000]","status-playable","playable","2024-04-09 23:22:46.000" -"","KeroBlaster","status-playable","playable","2020-05-12 20:42:52.000" -"0100F680116A2000","Kholat","UE4;nvdec;status-playable","playable","2021-06-17 11:52:48.000" -"","Kid Tripp","crash;status-nothing","nothing","2020-10-15 07:41:23.000" -"","Kill The Bad Guy","status-playable","playable","2020-05-12 22:16:10.000" -"","Kill la Kill - IF","status-playable","playable","2020-06-09 14:47:08.000" -"0100F2900B3E2000","Killer Queen Black","ldn-untested;online;status-playable","playable","2021-04-08 12:46:18.000" -"","Kin'iro no Corda Octave","status-playable","playable","2020-09-22 13:23:12.000" -"010089000F0E8000","Kine","status-playable;UE4","playable","2022-09-14 14:28:37.000" -"0100E6B00FFBA000","King Lucas","status-playable","playable","2022-09-21 19:43:23.000" -"","King Oddball","status-playable","playable","2020-05-13 13:47:57.000" -"01008D80148C8000","King of Seas","status-playable;nvdec;UE4","playable","2022-10-28 18:29:41.000" -"0100515014A94000","King of Seas Demo","status-playable;nvdec;UE4","playable","2022-10-28 18:09:31.000" -"0100A280121F6000","Kingdom Rush","status-nothing;32-bit;crash;Needs More Attention","nothing","2022-10-05 12:34:00.000" -"0100BD9004AB6000","Kingdom: New Lands","status-playable","playable","2022-08-02 21:48:50.000" -"","Kingdom: Two Crowns","status-playable","playable","2020-05-16 19:36:21.000" -"0100EF50132BE000","Kingdoms of Amalur: Re-Reckoning","status-playable","playable","2023-08-10 13:05:08.000" -"0100227010460000","Kirby Fighters 2","ldn-works;online;status-playable","playable","2021-06-17 13:06:39.000" -"01007E3006DDA000","Kirby Star Allies","status-playable;nvdec","playable","2023-11-15 17:06:19.000" -"01004D300C5AE000","Kirby and the Forgotten Land","gpu;status-ingame","ingame","2024-03-11 17:11:21.000" -"010091201605A000","Kirby and the Forgotten Land (Demo version)","status-playable;demo","playable","2022-08-21 21:03:01.000" -"0100A8E016236000","Kirby’s Dream Buffet","status-ingame;crash;online-broken;Needs Update;ldn-works","ingame","2024-03-03 17:04:44.000" -"01006B601380E000","Kirby’s Return to Dream Land Deluxe","status-playable","playable","2024-05-16 19:58:04.000" -"010091D01A57E000","Kirby’s Return to Dream Land Deluxe - Demo","status-playable;demo","playable","2023-02-18 17:21:55.000" -"0100F3A00F4CA000","Kissed by the Baddest Bidder","gpu;status-ingame;nvdec","ingame","2022-12-04 20:57:11.000" -"01000C900A136000","Kitten Squad","status-playable;nvdec","playable","2022-08-03 12:01:59.000" -"","Klondike Solitaire","status-playable","playable","2020-12-13 16:17:27.000" -"","Knight Squad","status-playable","playable","2020-08-09 16:54:51.000" -"010024B00E1D6000","Knight Squad 2","status-playable;nvdec;online-broken","playable","2022-10-28 18:38:09.000" -"","Knight Terrors","status-playable","playable","2020-05-13 13:09:22.000" -"","Knightin'+","status-playable","playable","2020-08-31 18:18:21.000" -"","Knights of Pen and Paper +1 Deluxier Edition","status-playable","playable","2020-05-11 21:46:32.000" -"","Knights of Pen and Paper 2 Deluxiest Edition","status-playable","playable","2020-05-13 14:07:00.000" -"010001A00A1F6000","Knock-Knock","nvdec;status-playable","playable","2021-02-01 20:03:19.000" -"01009EF00DDB4000","Knockout City","services;status-boots;online-broken","boots","2022-12-09 09:48:58.000" -"0100C57019BA2000","Koa and the Five Pirates of Mara","gpu;status-ingame","ingame","2024-07-11 16:14:44.000" -"","Koi DX","status-playable","playable","2020-05-11 21:37:51.000" -"","Koi no Hanasaku Hyakkaen","32-bit;gpu;nvdec;status-ingame","ingame","2020-10-03 14:17:10.000" -"01005D200C9AA000","Koloro","status-playable","playable","2022-08-03 12:34:02.000" -"0100464009294000","Kona","status-playable","playable","2022-08-03 12:48:19.000" -"010016C011AAA000","Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o","status-playable","playable","2023-04-26 09:51:08.000" -"","Koral","UE4;crash;gpu;status-menus","menus","2020-11-16 12:41:26.000" -"010046600CCA4000","Kotodama: The 7 Mysteries of Fujisawa","audout;status-playable","playable","2021-02-01 20:28:37.000" -"010022801242C000","KukkoroDays","status-menus;crash","menus","2021-11-25 08:52:56.000" -"010060400ADD2000","Kunio-Kun: The World Classics Collection","online;status-playable","playable","2021-01-29 20:21:46.000" -"0100894011F62000","Kwaidan ~Azuma manor story~","status-playable","playable","2022-10-05 12:50:44.000" -"0100830004FB6000","L.A. Noire","status-playable","playable","2022-08-03 16:49:35.000" -"","L.F.O. - Lost Future Omega -","UE4;deadlock;status-boots","boots","2020-10-16 12:16:44.000" -"0100F2B0123AE000","L.O.L. Surprise! Remix: We Rule the World","status-playable","playable","2022-10-11 22:48:03.000" -"010026000F662800","LA-MULANA","gpu;status-ingame","ingame","2022-08-12 01:06:21.000" -"0100E5D00F4AE000","LA-MULANA 1 & 2","status-playable","playable","2022-09-22 17:56:36.000" -"01009E100BDD6000","LAST FIGHT","status-playable","playable","2022-09-20 13:54:55.000" -"0100739018020000","LEGO 2K Drive","gpu;status-ingame;ldn-works","ingame","2024-04-09 02:05:12.000" -"010070D009FEC000","LEGO DC Super-Villains","status-playable","playable","2021-05-27 18:10:37.000" -"010052A00B5D2000","LEGO Harry Potter Collection","status-ingame;crash","ingame","2024-01-31 10:28:07.000" -"010073C01AF34000","LEGO Horizon Adventures","status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4","ingame","2025-01-07 04:24:56.000" -"01001C100E772000","LEGO Jurassic World","status-playable","playable","2021-05-27 17:00:20.000" -"01006F600FFC8000","LEGO Marvel Super Heroes","status-playable","playable","2024-09-10 19:02:19.000" -"0100D3A00409E000","LEGO Marvel Super Heroes 2","status-nothing;crash","nothing","2023-03-02 17:12:33.000" -"010042D00D900000","LEGO Star Wars: The Skywalker Saga","gpu;slow;status-ingame","ingame","2024-04-13 20:08:46.000" -"0100A01006E00000","LEGO The Incredibles","status-nothing;crash","nothing","2022-08-03 18:36:59.000" -"","LEGO Worlds","crash;slow;status-ingame","ingame","2020-07-17 13:35:39.000" -"01009C8009026000","LIMBO","cpu;status-boots;32-bit","boots","2023-06-28 15:39:19.000" -"","LITTLE FRIENDS -DOGS & CATS-","status-playable","playable","2020-11-12 12:45:51.000" -"0100CF801776C000","LIVE A LIVE","status-playable;UE4;amd-vendor-bug","playable","2023-02-05 15:12:07.000" -"0100BA000FC9C000","LOCO-SPORTS","status-playable","playable","2022-09-20 14:09:30.000" -"010062A0178A8000","LOOPERS","gpu;slow;status-ingame;crash","ingame","2022-06-17 19:21:45.000" -"010054600AC74000","LOST ORBIT: Terminal Velocity","status-playable","playable","2021-06-14 12:21:12.000" -"","LOST SPHEAR","status-playable","playable","2021-01-10 06:01:21.000" -"0100EC2011A80000","LUXAR","status-playable","playable","2021-03-04 21:11:57.000" -"010038000F644000","La Mulana 2","status-playable","playable","2022-09-03 13:45:57.000" -"010058500B3E0000","Labyrinth of Refrain: Coven of Dusk","status-playable","playable","2021-02-15 17:38:48.000" -"","Labyrinth of the Witch","status-playable","playable","2020-11-01 14:42:37.000" -"0100BAB00E8C0000","Langrisser I and II","status-playable","playable","2021-02-19 15:46:10.000" -"","Lanota","status-playable","playable","2019-09-04 01:58:14.000" -"01005E000D3D8000","Lapis x Labyrinth","status-playable","playable","2021-02-01 18:58:08.000" -"","Laraan","status-playable","playable","2020-12-16 12:45:48.000" -"0100DA700879C000","Last Day of June","nvdec;status-playable","playable","2021-06-08 11:35:32.000" -"0100055007B86000","Late Shift","nvdec;status-playable","playable","2021-02-01 18:43:58.000" -"","Later Daters","status-playable","playable","2020-07-29 16:35:45.000" -"01001730144DA000","Layers of Fear 2","status-playable;nvdec;UE4","playable","2022-10-28 18:49:52.000" -"","Layers of Fear: Legacy","nvdec;status-playable","playable","2021-02-15 16:30:41.000" -"0100CE500D226000","Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition","status-playable;nvdec;opengl","playable","2022-09-14 15:01:57.000" -"0100FDB00AA80000","Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0","gpu;status-ingame;nvdec;opengl","ingame","2022-09-14 15:15:55.000" -"01009C100390E000","League of Evil","online;status-playable","playable","2021-06-08 11:23:27.000" -"","Left-Right: The Mansion","status-playable","playable","2020-05-13 13:02:12.000" -"010079901C898000","Legacy of Kain™ Soul Reaver 1&2 Remastered","status-playable","playable","2025-01-07 05:50:01.000" -"01002DB007A96000","Legend of Kay Anniversary","nvdec;status-playable","playable","2021-01-29 18:38:29.000" -"","Legend of the Skyfish","status-playable","playable","2020-06-24 13:04:22.000" -"","Legend of the Tetrarchs","deadlock;status-ingame","ingame","2020-07-10 07:54:03.000" -"0100A73006E74000","Legendary Eleven","status-playable","playable","2021-06-08 12:09:03.000" -"0100A7700B46C000","Legendary Fishing","online;status-playable","playable","2021-04-14 15:08:46.000" -"01003A30012C0000","Lego City Undercover","status-playable;nvdec","playable","2024-09-30 08:44:27.000" -"","Legrand Legacy: Tale of the Fatebounds","nvdec;status-playable","playable","2020-07-26 12:27:36.000" -"010031A0135CA000","Leisure Suit Larry - Wet Dreams Dry Twice","status-playable","playable","2022-10-28 19:00:57.000" -"0100A8E00CAA0000","Leisure Suit Larry: Wet Dreams Don't Dry","status-playable","playable","2022-08-03 19:51:44.000" -"01003AB00983C000","Lethal League Blaze","online;status-playable","playable","2021-01-29 20:13:31.000" -"","Letter Quest Remastered","status-playable","playable","2020-05-11 21:30:34.000" -"0100CE301678E800","Letters - a written adventure","gpu;status-ingame","ingame","2023-02-21 20:12:38.000" -"","Levelhead","online;status-ingame","ingame","2020-10-18 11:44:51.000" -"","Levels+","status-playable","playable","2020-05-12 13:51:39.000" -"0100C8000F146000","Liberated","gpu;status-ingame;nvdec","ingame","2024-07-04 04:58:24.000" -"01003A90133A6000","Liberated: Enhanced Edition","gpu;status-ingame;nvdec","ingame","2024-07-04 04:48:48.000" -"","Lichtspeer: Double Speer Edition","status-playable","playable","2020-05-12 16:43:09.000" -"010041F0128AE000","Liege Dragon","status-playable","playable","2022-10-12 10:27:03.000" -"010006300AFFE000","Life Goes On","status-playable","playable","2021-01-29 19:01:20.000" -"0100FD101186C000","Life is Strange 2","status-playable;UE4","playable","2024-07-04 05:05:58.000" -"0100DC301186A000","Life is Strange Remastered","status-playable;UE4","playable","2022-10-03 16:54:44.000" -"010008501186E000","Life is Strange: Before the Storm Remastered","status-playable","playable","2023-09-28 17:15:44.000" -"0100500012AB4000","Life is Strange: True Colors [0100500012AB4000]","gpu;status-ingame;UE4","ingame","2024-04-08 16:11:52.000" -"","Life of Boris: Super Slav","status-ingame","ingame","2020-12-17 11:40:05.000" -"0100B3A0135D6000","Life of Fly","status-playable","playable","2021-01-25 23:41:07.000" -"010069A01506E000","Life of Fly 2","slow;status-playable","playable","2022-10-28 19:26:52.000" -"01005B6008132000","Lifeless Planet","status-playable","playable","2022-08-03 21:25:13.000" -"","Light Fall","nvdec;status-playable","playable","2021-01-18 14:55:36.000" -"010087700D07C000","Light Tracer","nvdec;status-playable","playable","2021-05-05 19:15:43.000" -"","Linelight","status-playable","playable","2020-12-17 12:18:07.000" -"","Lines X","status-playable","playable","2020-05-11 15:28:30.000" -"","Lines XL","status-playable","playable","2020-08-31 17:48:23.000" -"0100943010310000","Little Busters! Converted Edition","status-playable;nvdec","playable","2022-09-29 15:34:56.000" -"","Little Dragons Cafe","status-playable","playable","2020-05-12 00:00:52.000" -"","Little Inferno","32-bit;gpu;nvdec;status-ingame","ingame","2020-12-17 21:43:56.000" -"0100E7000E826000","Little Misfortune","nvdec;status-playable","playable","2021-02-23 20:39:44.000" -"0100FE0014200000","Little Mouse's Encyclopedia","status-playable","playable","2022-10-28 19:38:58.000" -"01002FC00412C000","Little Nightmares","status-playable;nvdec;UE4","playable","2022-08-03 21:45:35.000" -"010097100EDD6000","Little Nightmares II","status-playable;UE4","playable","2023-02-10 18:24:44.000" -"010093A0135D6000","Little Nightmares II DEMO","status-playable;UE4;demo;vulkan-backend-bug","playable","2024-05-16 18:47:20.000" -"0100535014D76000","Little Noah: Scion of Paradise","status-playable;opengl-backend-bug","playable","2022-09-14 04:17:13.000" -"0100E6D00E81C000","Little Racer","status-playable","playable","2022-10-18 16:41:13.000" -"","Little Shopping","status-playable","playable","2020-10-03 16:34:35.000" -"","Little Town Hero","status-playable","playable","2020-10-15 23:28:48.000" -"","Little Triangle","status-playable","playable","2020-06-17 14:46:26.000" -"","Lode Runner Legacy","status-playable","playable","2021-01-10 14:10:28.000" -"","Lofi Ping Pong","crash;status-ingame","ingame","2020-12-15 20:09:22.000" -"0100B6D016EE6000","Lone Ruin","status-ingame;crash;nvdec","ingame","2023-01-17 06:41:19.000" -"0100A0C00E0DE000","Lonely Mountains Downhill","status-playable;online-broken","playable","2024-07-04 05:08:11.000" -"","Lost Horizon","status-playable","playable","2020-09-01 13:41:22.000" -"","Lost Horizon 2","nvdec;status-playable","playable","2020-06-16 12:02:12.000" -"0100156014C6A000","Lost Lands 3: The Golden Curse","status-playable;nvdec","playable","2022-10-24 16:30:00.000" -"0100BDD010AC8000","Lost Lands: Dark Overlord","status-playable","playable","2022-10-03 11:52:58.000" -"0100133014510000","Lost Lands: The Four Horsemen","status-playable;nvdec","playable","2022-10-24 16:41:00.000" -"","Lost Phone Stories","services;status-ingame","ingame","2020-04-05 23:17:33.000" -"01008AD013A86800","Lost Ruins","gpu;status-ingame","ingame","2023-02-19 14:09:00.000" -"0100018013124000","Lost Words: Beyond the Page","status-playable","playable","2022-10-24 17:03:21.000" -"01005FE01291A000","Lost in Random","gpu;status-ingame","ingame","2022-12-18 07:09:28.000" -"0100D36011AD4000","Love Letter from Thief X","gpu;status-ingame;nvdec","ingame","2023-11-14 03:55:31.000" -"","Ludo Mania","crash;services;status-nothing","nothing","2020-04-03 00:33:47.000" -"010048701995E000","Luigi's Mansion 2 HD","status-ingame;ldn-broken;amd-vendor-bug","ingame","2024-09-05 23:47:27.000" -"0100DCA0064A6000","Luigi's Mansion 3","gpu;slow;status-ingame;Needs Update;ldn-works","ingame","2024-09-27 22:17:36.000" -"","Lumini","status-playable","playable","2020-08-09 20:45:09.000" -"0100FF00042EE000","Lumo","status-playable;nvdec","playable","2022-02-11 18:20:30.000" -"","Lust for Darkness","nvdec;status-playable","playable","2020-07-26 12:09:15.000" -"0100F0B00F68E000","Lust for Darkness: Dawn Edition","nvdec;status-playable","playable","2021-06-16 13:47:46.000" -"010002C00C270000","MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020","status-ingame;crash;online-broken;ldn-works","ingame","2024-08-23 16:12:55.000" -"0100EEF00CBC0000","MEANDERS","UE4;gpu;status-ingame","ingame","2021-06-11 19:19:33.000" -"010025C00D410000","MEGAMAN ZERO/ZX LEGACY COLLECTION","status-playable","playable","2021-06-14 16:17:32.000" -"","METAGAL","status-playable","playable","2020-06-05 00:05:48.000" -"0100E8F00F6BE000","METAL MAX Xeno Reborn","status-playable","playable","2022-12-05 15:33:53.000" -"0100F5700C9A8000","MIND Path to Thalamus","UE4;status-playable","playable","2021-06-16 17:37:25.000" -"0100A9F01776A000","MLB The Show 22 Tech Test","services;status-nothing;crash;Needs Update;demo","nothing","2022-12-09 10:28:34.000" -"0100E2E01C32E000","MLB The Show 24","services-horizon;status-nothing","nothing","2024-03-31 04:54:11.000" -"0100876015D74000","MLB® The Show™ 22","gpu;slow;status-ingame","ingame","2023-04-25 06:28:43.000" -"0100913019170000","MLB® The Show™ 23","gpu;status-ingame","ingame","2024-07-26 00:56:50.000" -"","MO:Astray","crash;status-ingame","ingame","2020-12-11 21:45:44.000" -"0100B46017500000","MOFUMOFU Sensen","gpu;status-menus","menus","2024-09-21 21:51:08.000" -"0100FBD00ED24000","MONKEY BARRELS","status-playable","playable","2022-09-14 17:28:52.000" -"010042501329E000","MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version","status-playable;demo","playable","2022-11-13 22:20:26.000" -"010088400366E000","MONSTER JAM CRUSH IT!™","UE4;nvdec;online;status-playable","playable","2021-04-08 19:29:27.000" -"","MUJO","status-playable","playable","2020-05-08 16:31:04.000" -"","MUSNYX","status-playable","playable","2020-05-08 14:24:43.000" -"0100161009E5C000","MX Nitro","status-playable","playable","2022-09-27 22:34:33.000" -"0100218011E7E000","MX vs ATV All Out","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-25 19:51:46.000" -"","MXGP3 - The Official Motocross Videogame","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 14:00:20.000" -"","MY HERO ONE'S JUSTICE","UE4;crash;gpu;online;status-menus","menus","2020-12-10 13:11:04.000" -"","MY HERO ONE'S JUSTICE 2","UE4;gpu;nvdec;status-ingame","ingame","2020-12-18 14:08:47.000" -"0100F2400D434000","Machi Knights Blood bagos","status-playable;nvdec;UE4","playable","2022-09-14 15:08:04.000" -"","Mad Carnage","status-playable","playable","2021-01-10 13:00:07.000" -"","Mad Father","status-playable","playable","2020-11-12 13:22:10.000" -"010061E00EB1E000","Mad Games Tycoon","status-playable","playable","2022-09-20 14:23:14.000" -"01004A200E722000","Magazine Mogul","status-playable;loader-allocator","playable","2022-10-03 12:05:34.000" -"","MagiCat","status-playable","playable","2020-12-11 15:22:07.000" -"","Magicolors","status-playable","playable","2020-08-12 18:39:11.000" -"01008C300B624000","Mahjong Solitaire Refresh","status-boots;crash","boots","2022-12-09 12:02:55.000" -"010099A0145E8000","Mahluk dark demon","status-playable","playable","2021-04-15 13:14:24.000" -"","Mainlining","status-playable","playable","2020-06-05 01:02:00.000" -"0100D9900F220000","Maitetsu: Pure Station","status-playable","playable","2022-09-20 15:12:49.000" -"0100A78017BD6000","Makai Senki Disgaea 7","status-playable","playable","2023-10-05 00:22:18.000" -"","Mana Spark","status-playable","playable","2020-12-10 13:41:01.000" -"010093D00CB22000","Maneater","status-playable;nvdec;UE4","playable","2024-05-21 16:11:57.000" -"","Manifold Garden","status-playable","playable","2020-10-13 20:27:13.000" -"0100C9A00952A000","Manticore - Galaxy on Fire","status-boots;crash;nvdec","boots","2024-02-04 04:37:24.000" -"0100E98002F6E000","Mantis Burn Racing","status-playable;online-broken;ldn-broken","playable","2024-09-02 02:13:04.000" -"01008E800D1FE000","Marble Power Blast","status-playable","playable","2021-06-04 16:00:02.000" -"0100DA7017C9E000","Marco & The Galaxy Dragon Demo","gpu;status-ingame;demo","ingame","2023-06-03 13:05:33.000" -"01006D0017F7A000","Mario & Luigi: Brothership","status-ingame;crash;slow;UE4;mac-bug","ingame","2025-01-07 04:00:00.000" -"010067300059A000","Mario + Rabbids Kingdom Battle","slow;status-playable;opengl-backend-bug","playable","2024-05-06 10:16:54.000" -"0100317013770000","Mario + Rabbids® Sparks of Hope","gpu;status-ingame;Needs Update","ingame","2024-06-20 19:56:19.000" -"0100C9C00E25C000","Mario Golf: Super Rush","gpu;status-ingame","ingame","2024-08-18 21:31:48.000" -"0100152000022000","Mario Kart 8 Deluxe","32-bit;status-playable;ldn-works;LAN;amd-vendor-bug","playable","2024-09-19 11:55:17.000" -"0100ED100BA3A000","Mario Kart Live: Home Circuit","services;status-nothing;crash;Needs More Attention","nothing","2022-12-07 22:36:52.000" -"01006FE013472000","Mario Party Superstars","gpu;status-ingame;ldn-works;mac-bug","ingame","2024-05-16 11:23:34.000" -"010019401051C000","Mario Strikers: Battle League Football","status-boots;crash;nvdec","boots","2024-05-07 06:23:56.000" -"0100BDE00862A000","Mario Tennis Aces","gpu;status-ingame;nvdec;ldn-works;LAN","ingame","2024-09-28 15:54:40.000" -"0100B99019412000","Mario vs. Donkey Kong","status-playable","playable","2024-05-04 21:22:39.000" -"0100D9E01DBB0000","Mario vs. Donkey Kong™ Demo","status-playable","playable","2024-02-18 10:40:06.000" -"01009A700A538000","Mark of the Ninja Remastered","status-playable","playable","2022-08-04 15:48:30.000" -"010044600FDF0000","Marooners","status-playable;nvdec;online-broken","playable","2022-10-18 21:35:26.000" -"010060700AC50000","Marvel Ultimate Alliance 3: The Black Order","status-playable;nvdec;ldn-untested","playable","2024-02-14 19:51:51.000" -"01003DE00C95E000","Mary Skelter 2","status-ingame;crash;regression","ingame","2023-09-12 07:37:28.000" -"0100113008262000","Masquerada: Songs and Shadows","status-playable","playable","2022-09-20 15:18:54.000" -"01004800197F0000","Master Detective Archives: Rain Code","gpu;status-ingame","ingame","2024-04-19 20:11:09.000" -"0100CC7009196000","Masters of Anima","status-playable;nvdec","playable","2022-08-04 16:00:09.000" -"","Mathland","status-playable","playable","2020-09-01 15:40:06.000" -"","Max & The Book of Chaos","status-playable","playable","2020-09-02 12:24:43.000" -"01001C9007614000","Max: The Curse Of Brotherhood","status-playable;nvdec","playable","2022-08-04 16:33:04.000" -"","Maze","status-playable","playable","2020-12-17 16:13:58.000" -"","Mech Rage","status-playable","playable","2020-11-18 12:30:16.000" -"0100C4F005EB4000","Mecho Tales","status-playable","playable","2022-08-04 17:03:19.000" -"0100E4600D31A000","Mechstermination Force","status-playable","playable","2024-07-04 05:39:15.000" -"","Medarot Classics Plus Kabuto Ver","status-playable","playable","2020-11-21 11:31:18.000" -"","Medarot Classics Plus Kuwagata Ver","status-playable","playable","2020-11-21 11:30:40.000" -"0100BBC00CB9A000","Mega Mall Story","slow;status-playable","playable","2022-08-04 17:10:58.000" -"0100B0C0086B0000","Mega Man 11","status-playable","playable","2021-04-26 12:07:53.000" -"0100734016266000","Mega Man Battle Network Legacy Collection Vol. 2","status-playable","playable","2023-08-03 18:04:32.000" -"01002D4007AE0000","Mega Man Legacy Collection Vol.1","gpu;status-ingame","ingame","2021-06-03 18:17:17.000" -"","Mega Man X Legacy Collection","audio;crash;services;status-menus","menus","2020-12-04 04:30:17.000" -"","Megabyte Punch","status-playable","playable","2020-10-16 14:07:18.000" -"","Megadimension Neptunia VII","32-bit;nvdec;status-playable","playable","2020-12-17 20:56:03.000" -"010038E016264000","Megaman Battle Network Legacy Collection Vol 1","status-playable","playable","2023-04-25 03:55:57.000" -"","Megaman Legacy Collection 2","status-playable","playable","2021-01-06 08:47:59.000" -"010082B00E8B8000","Megaquarium","status-playable","playable","2022-09-14 16:50:00.000" -"010005A00B312000","Megaton Rainfall","gpu;status-boots;opengl","boots","2022-08-04 18:29:43.000" -"0100EA100DF92000","Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou","32-bit;status-playable;nvdec","playable","2022-12-05 13:19:12.000" -"0100B360068B2000","Mekorama","gpu;status-boots","boots","2021-06-17 16:37:21.000" -"01000FA010340000","Melbits World","status-menus;nvdec;online","menus","2021-11-26 13:51:22.000" -"0100F68019636000","Melon Journey","status-playable","playable","2023-04-23 21:20:01.000" -"","Memories Off -Innocent Fille- for Dearest","status-playable","playable","2020-08-04 07:31:22.000" -"010062F011E7C000","Memory Lane","status-playable;UE4","playable","2022-10-05 14:31:03.000" -"","Meow Motors","UE4;gpu;status-ingame","ingame","2020-12-18 00:24:01.000" -"","Mercenaries Saga Chronicles","status-playable","playable","2021-01-10 12:48:19.000" -"","Mercenaries Wings The False Phoenix","crash;services;status-nothing","nothing","2020-05-08 22:42:12.000" -"","Mercenary Kings","online;status-playable","playable","2020-10-16 13:05:58.000" -"0100E5000D3CA000","Merchants of Kaidan","status-playable","playable","2021-04-15 11:44:28.000" -"010047F01AA10000","Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3","services-horizon;status-menus","menus","2024-07-24 06:34:06.000" -"","Metaloid: Origin","status-playable","playable","2020-06-04 20:26:35.000" -"010055200E87E000","Metamorphosis","UE4;audout;gpu;nvdec;status-ingame","ingame","2021-06-16 16:18:11.000" -"0100D4900E82C000","Metro 2033 Redux","gpu;status-ingame","ingame","2022-11-09 10:53:13.000" -"0100F0400E850000","Metro: Last Light Redux","slow;status-ingame;nvdec;vulkan-backend-bug","ingame","2023-11-01 11:53:52.000" -"010093801237C000","Metroid Dread","status-playable","playable","2023-11-13 04:02:36.000" -"010012101468C000","Metroid Prime Remastered","gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug","ingame","2024-05-07 22:48:15.000" -"0100A1200F20C000","Midnight Evil","status-playable","playable","2022-10-18 22:55:19.000" -"0100C1E0135E0000","Mighty Fight Federation","online;status-playable","playable","2021-04-06 18:39:56.000" -"0100AD701344C000","Mighty Goose","status-playable;nvdec","playable","2022-10-28 20:25:38.000" -"","Mighty Gunvolt Burst","status-playable","playable","2020-10-19 16:05:49.000" -"010060D00AE36000","Mighty Switch Force! Collection","status-playable","playable","2022-10-28 20:40:32.000" -"01003DA010E8A000","Miitopia","gpu;services-horizon;status-ingame","ingame","2024-09-06 10:39:13.000" -"01007DA0140E8000","Miitopia Demo","services;status-menus;crash;demo","menus","2023-02-24 11:50:58.000" -"","Miles & Kilo","status-playable","playable","2020-10-22 11:39:49.000" -"0100976008FBE000","Millie","status-playable","playable","2021-01-26 20:47:19.000" -"0100D71004694000","Minecraft","status-ingame;crash;ldn-broken","ingame","2024-09-29 12:08:59.000" -"01006BD001E06000","Minecraft - Nintendo Switch Edition","status-playable;ldn-broken","playable","2023-10-15 01:47:08.000" -"01006C100EC08000","Minecraft Dungeons","status-playable;nvdec;online-broken;UE4","playable","2024-06-26 22:10:43.000" -"01007C6012CC8000","Minecraft Legends","gpu;status-ingame;crash","ingame","2024-03-04 00:32:24.000" -"01003EF007ABA000","Minecraft: Story Mode - Season Two","status-playable;online-broken","playable","2023-03-04 00:30:50.000" -"010059C002AC2000","Minecraft: Story Mode - The Complete Adventure","status-boots;crash;online-broken","boots","2022-08-04 18:56:58.000" -"0100B7500F756000","Minefield","status-playable","playable","2022-10-05 15:03:29.000" -"01003560119A6000","Mini Motor Racing X","status-playable","playable","2021-04-13 17:54:49.000" -"","Mini Trains","status-playable","playable","2020-07-29 23:06:20.000" -"010039200EC66000","Miniature - The Story Puzzle","status-playable;UE4","playable","2022-09-14 17:18:50.000" -"010069200EB80000","Ministry of Broadcast","status-playable","playable","2022-08-10 00:31:16.000" -"0100C3F000BD8000","Minna de Wai Wai! Spelunker","status-nothing;crash","nothing","2021-11-03 07:17:11.000" -"0100FAE010864000","Minoria","status-playable","playable","2022-08-06 18:50:50.000" -"01005AB015994000","Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath","gpu;status-playable","playable","2022-03-28 02:22:24.000" -"0100CFA0138C8000","Missile Dancer","status-playable","playable","2021-01-31 12:22:03.000" -"0100E3601495C000","Missing Features 2D","status-playable","playable","2022-10-28 20:52:54.000" -"010059200CC40000","Mist Hunter","status-playable","playable","2021-06-16 13:58:58.000" -"","Mittelborg: City of Mages","status-playable","playable","2020-08-12 19:58:06.000" -"","Moai VI: Unexpected Guests","slow;status-playable","playable","2020-10-27 16:40:20.000" -"0100D8700B712000","Modern Combat Blackout","crash;status-nothing","nothing","2021-03-29 19:47:15.000" -"010004900D772000","Modern Tales: Age of Invention","slow;status-playable","playable","2022-10-12 11:20:19.000" -"0100B8500D570000","Moero Chronicle Hyper","32-bit;status-playable","playable","2022-08-11 07:21:56.000" -"01004EB0119AC000","Moero Crystal H","32-bit;status-playable;nvdec;vulkan-backend-bug","playable","2023-07-05 12:04:22.000" -"01004A400C320000","Momodora: Revere Under the Moonlight","deadlock;status-nothing","nothing","2022-02-06 03:47:43.000" -"01002CC00BC4C000","Momonga Pinball Adventures","status-playable","playable","2022-09-20 16:00:40.000" -"010093100DA04000","Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!","gpu;status-ingame","ingame","2023-09-22 10:21:46.000" -"","Monkey King: Master of the Clouds","status-playable","playable","2020-09-28 22:35:48.000" -"01003030161DC000","Monomals","gpu;status-ingame","ingame","2024-08-06 22:02:51.000" -"0100F3A00FB78000","Mononoke Slashdown","status-menus;crash","menus","2022-05-04 20:55:47.000" -"01005FF013DC2000","Monopoly Madness","status-playable","playable","2022-01-29 21:13:52.000" -"01007430037F6000","Monopoly for Nintendo Switch","status-playable;nvdec;online-broken","playable","2024-02-06 23:13:01.000" -"0100E2D0128E6000","Monster Blast","gpu;status-ingame","ingame","2023-09-02 20:02:32.000" -"01006F7001D10000","Monster Boy and the Cursed Kingdom","status-playable;nvdec","playable","2022-08-04 20:06:32.000" -"","Monster Bugs Eat People","status-playable","playable","2020-07-26 02:05:34.000" -"0100742007266000","Monster Energy Supercross - The Official Videogame","status-playable;nvdec;UE4","playable","2022-08-04 20:25:00.000" -"0100F8100B982000","Monster Energy Supercross - The Official Videogame 2","status-playable;nvdec;UE4;ldn-untested","playable","2022-08-04 21:21:24.000" -"010097800EA20000","Monster Energy Supercross - The Official Videogame 3","UE4;audout;nvdec;online;status-playable","playable","2021-06-14 12:37:54.000" -"0100E9900ED74000","Monster Farm","32-bit;nvdec;status-playable","playable","2021-05-05 19:29:13.000" -"0100770008DD8000","Monster Hunter Generation Ultimate","32-bit;status-playable;online-broken;ldn-works","playable","2024-03-18 14:35:36.000" -"0100B04011742000","Monster Hunter Rise","gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works","ingame","2024-08-24 11:04:59.000" -"010093A01305C000","Monster Hunter Rise Demo","status-playable;online-broken;ldn-works;demo","playable","2022-10-18 23:04:17.000" -"","Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600","services;status-ingame","ingame","2022-07-10 19:27:30.000" -"","Monster Hunter XX Demo","32-bit;cpu;status-nothing","nothing","2020-03-22 10:12:28.000" -"0100C3800049C000","Monster Hunter XX Nintendo Switch Ver ( Double Cross )","status-playable","playable","2024-07-21 14:08:09.000" -"010095C00F354000","Monster Jam Steel Titans","status-menus;crash;nvdec;UE4","menus","2021-11-14 09:45:38.000" -"010051B0131F0000","Monster Jam Steel Titans 2","status-playable;nvdec;UE4","playable","2022-10-24 17:17:59.000" -"","Monster Puzzle","status-playable","playable","2020-09-28 22:23:10.000" -"","Monster Sanctuary","crash;status-ingame","ingame","2021-04-04 05:06:41.000" -"0100D30010C42000","Monster Truck Championship","slow;status-playable;nvdec;online-broken;UE4","playable","2022-10-18 23:16:51.000" -"01004E10142FE000","Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。","crash;status-ingame","ingame","2021-07-23 10:56:44.000" -"010039F00EF70000","Monstrum","status-playable","playable","2021-01-31 11:07:26.000" -"","Moonfall Ultimate","nvdec;status-playable","playable","2021-01-17 14:01:25.000" -"0100E3D014ABC000","Moorhuhn Jump and Run Traps and Treasures","status-playable","playable","2024-03-08 15:10:02.000" -"010045C00F274000","Moorkuhn Kart 2","status-playable;online-broken","playable","2022-10-28 21:10:35.000" -"010040E00F642000","Morbid: The Seven Acolytes","status-playable","playable","2022-08-09 17:21:58.000" -"","More Dark","status-playable","playable","2020-12-15 16:01:06.000" -"","Morphies Law","UE4;crash;ldn-untested;nvdec;online;status-menus","menus","2020-11-22 17:05:29.000" -"","Morphite","status-playable","playable","2021-01-05 19:40:55.000" -"01006560184E6000","Mortal Kombat 1","gpu;status-ingame","ingame","2024-09-04 15:45:47.000" -"0100F2200C984000","Mortal Kombat 11","slow;status-ingame;nvdec;online-broken;ldn-broken","ingame","2024-06-19 02:22:17.000" -"","Mosaic","status-playable","playable","2020-08-11 13:07:35.000" -"010040401D564000","Moto GP 24","gpu;status-ingame","ingame","2024-05-10 23:41:00.000" -"01002ED00B01C000","Moto Racer 4","UE4;nvdec;online;status-playable","playable","2021-04-08 19:09:11.000" -"01003F200D0F2000","Moto Rush GT","status-playable","playable","2022-08-05 11:23:55.000" -"0100361007268000","MotoGP 18","status-playable;nvdec;UE4;ldn-untested","playable","2022-08-05 11:41:45.000" -"01004B800D0E8000","MotoGP 19","status-playable;nvdec;online-broken;UE4","playable","2022-08-05 11:54:14.000" -"01001FA00FBBC000","MotoGP 20","status-playable;ldn-untested","playable","2022-09-29 17:58:01.000" -"01000F5013820000","MotoGP 21","gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested","ingame","2022-10-28 21:35:08.000" -"01002A900D6D6000","Motorsport Manager for Nintendo Switch","status-playable;nvdec","playable","2022-08-05 12:48:14.000" -"01009DB00D6E0000","Mountain Rescue Simulator","status-playable","playable","2022-09-20 16:36:48.000" -"0100C4C00E73E000","Moving Out","nvdec;status-playable","playable","2021-06-07 21:17:24.000" -"0100D3300F110000","Mr Blaster","status-playable","playable","2022-09-14 17:56:24.000" -"","Mr. DRILLER DrillLand","nvdec;status-playable","playable","2020-07-24 13:56:48.000" -"","Mr. Shifty","slow;status-playable","playable","2020-05-08 15:28:16.000" -"","Ms. Splosion Man","online;status-playable","playable","2020-05-09 20:45:43.000" -"01009D200952E000","MudRunner - American Wilds","gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-16 11:40:52.000" -"","Muddledash","services;status-ingame","ingame","2020-05-08 16:46:14.000" -"010073E008E6E000","Mugsters","status-playable","playable","2021-01-28 17:57:17.000" -"0100211005E94000","Mulaka","status-playable","playable","2021-01-28 18:07:20.000" -"010038B00B9AE000","Mummy Pinball","status-playable","playable","2022-08-05 16:08:11.000" -"","Muse Dash","status-playable","playable","2020-06-06 14:41:29.000" -"","Mushroom Quest","status-playable","playable","2020-05-17 13:07:08.000" -"","Mushroom Wars 2","nvdec;status-playable","playable","2020-09-28 15:26:08.000" -"","Music Racer","status-playable","playable","2020-08-10 08:51:23.000" -"","Musou Orochi 2 Ultimate","crash;nvdec;status-boots","boots","2021-04-09 19:39:16.000" -"0100F6000EAA8000","Must Dash Amigos","status-playable","playable","2022-09-20 16:45:56.000" -"0100C3E00ACAA000","Mutant Football League Dynasty Edition","status-playable;online-broken","playable","2022-08-05 17:01:51.000" -"01004BE004A86000","Mutant Mudds Collection","status-playable","playable","2022-08-05 17:11:38.000" -"0100E6B00DEA4000","Mutant Year Zero: Road to Eden","status-playable;nvdec;UE4","playable","2022-09-10 13:31:10.000" -"01002C6012334000","My Aunt is a Witch","status-playable","playable","2022-10-19 09:21:17.000" -"","My Butler","status-playable","playable","2020-06-27 13:46:23.000" -"010031200B94C000","My Friend Pedro: Blood Bullets Bananas","nvdec;status-playable","playable","2021-05-28 11:19:17.000" -"","My Girlfriend is a Mermaid!?","nvdec;status-playable","playable","2020-05-08 13:32:55.000" -"0100E4701373E000","My Hidden Things","status-playable","playable","2021-04-15 11:26:06.000" -"","My Little Dog Adventure","gpu;status-ingame","ingame","2020-12-10 17:47:37.000" -"","My Little Riding Champion","slow;status-playable","playable","2020-05-08 17:00:53.000" -"010086B00C784000","My Lovely Daughter","status-playable","playable","2022-11-24 17:25:32.000" -"0100E7700C284000","My Memory of Us","status-playable","playable","2022-08-20 11:03:14.000" -"010028F00ABAE000","My Riding Stables - Life with Horses","status-playable","playable","2022-08-05 21:39:07.000" -"010042A00FBF0000","My Riding Stables 2: A New Adventure","status-playable","playable","2021-05-16 14:14:59.000" -"0100E25008E68000","My Time At Portia","status-playable","playable","2021-05-28 12:42:55.000" -"0100CD5011A02000","My Universe - Cooking Star Restaurant","status-playable","playable","2022-10-19 10:00:44.000" -"0100F71011A0A000","My Universe - Fashion Boutique","status-playable;nvdec","playable","2022-10-12 14:54:19.000" -"0100CD5011A02000","My Universe - Pet Clinic Cats & Dogs","status-boots;crash;nvdec","boots","2022-02-06 02:05:53.000" -"01006C301199C000","My Universe - School Teacher","nvdec;status-playable","playable","2021-01-21 16:02:52.000" -"","Märchen Forest - 0100B201D5E000","status-playable","playable","2021-02-04 21:33:34.000" -"01000D5005974000","N++","status-playable","playable","2022-08-05 21:54:58.000" -"","NAIRI: Tower of Shirin","nvdec;status-playable","playable","2020-08-09 19:49:12.000" -"010002F001220000","NAMCO MUSEUM","status-playable;ldn-untested","playable","2024-08-13 07:52:21.000" -"0100DAA00AEE6000","NAMCO MUSEUM ARCADE PAC","status-playable","playable","2021-06-07 21:44:50.000" -"","NAMCOT COLLECTION","audio;status-playable","playable","2020-06-25 13:35:22.000" -"010084D00CF5E000","NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO","status-playable","playable","2024-06-29 13:04:22.000" -"01006BB00800A000","NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst","status-playable;nvdec","playable","2024-06-16 14:58:05.000" -"0100D2D0190A4000","NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS","services-horizon;status-nothing","nothing","2024-07-25 05:16:48.000" -"0100715007354000","NARUTO™: Ultimate Ninja® STORM","status-playable;nvdec","playable","2022-08-06 14:10:31.000" -"0100545016D5E000","NASCAR Rivals","status-ingame;crash;Incomplete","ingame","2023-04-21 01:17:47.000" -"01001AE00C1B2000","NBA 2K Playgrounds 2","status-playable;nvdec;online-broken;UE4;vulkan-backend-bug","playable","2022-08-06 14:40:38.000" -"0100760002048000","NBA 2K18","gpu;status-ingame;ldn-untested","ingame","2022-08-06 14:17:51.000" -"01001FF00B544000","NBA 2K19","crash;ldn-untested;services;status-nothing","nothing","2021-04-16 13:07:21.000" -"0100E24011D1E000","NBA 2K21","gpu;status-boots","boots","2022-10-05 15:31:51.000" -"0100ACA017E4E800","NBA 2K23","status-boots","boots","2023-10-10 23:07:14.000" -"010006501A8D8000","NBA 2K24","cpu;gpu;status-boots","boots","2024-08-11 18:23:08.000" -"0100F5A008126000","NBA Playgrounds","status-playable;nvdec;online-broken;UE4","playable","2022-08-06 16:13:44.000" -"010002900294A000","NBA Playgrounds","status-playable;nvdec;online-broken;UE4","playable","2022-08-06 17:06:59.000" -"010006D0128B4000","NEOGEO POCKET COLOR SELECTION Vol.1","status-playable","playable","2023-07-08 20:55:36.000" -"01002AF014F4C000","NINJA GAIDEN 3: Razor's Edge","status-playable;nvdec","playable","2023-08-11 08:25:31.000" -"","NO THING","status-playable","playable","2021-01-04 19:06:01.000" -"","NORTH","nvdec;status-playable","playable","2021-01-05 16:17:44.000" -"0100CB800B07E000","NOT A HERO","status-playable","playable","2021-01-28 19:31:24.000" -"010072B00BDDE000","Narcos: Rise of the Cartels","UE4;crash;nvdec;status-boots","boots","2021-03-22 13:18:47.000" -"0100103011894000","Naught","UE4;status-playable","playable","2021-04-26 13:31:45.000" -"","Need For Speed Hot Pursuit Remastered","audio;online;slow;status-ingame","ingame","2020-10-27 17:46:58.000" -"","Need a Packet?","status-playable","playable","2020-08-12 16:09:01.000" -"010029B0118E8000","Need for Speed Hot Pursuit Remastered","status-playable;online-broken","playable","2024-03-20 21:58:02.000" -"","Nefarious","status-playable","playable","2020-12-17 03:20:33.000" -"01008390136FC000","Negative","nvdec;status-playable","playable","2021-03-24 11:29:41.000" -"010065F00F55A000","Neighbours back From Hell","status-playable;nvdec","playable","2022-10-12 15:36:48.000" -"0100B4900AD3E000","Nekopara Vol.1","status-playable;nvdec","playable","2022-08-06 18:25:54.000" -"","Nekopara Vol.2","status-playable","playable","2020-12-16 11:04:47.000" -"010045000E418000","Nekopara Vol.3","status-playable","playable","2022-10-03 12:49:04.000" -"","Nekopara Vol.4","crash;status-ingame","ingame","2021-01-17 01:47:18.000" -"01006ED00BC76000","Nelke & the Legendary Alchemists ~Ateliers of the New World~","status-playable","playable","2021-01-28 19:39:42.000" -"","Nelly Cootalot","status-playable","playable","2020-06-11 20:55:42.000" -"01001AB0141A8000","Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)","crash;status-ingame","ingame","2021-07-18 07:29:18.000" -"0100EBB00D2F4000","Neo Cab","status-playable","playable","2021-04-24 00:27:58.000" -"","Neo Cab Demo","crash;status-boots","boots","2020-06-16 00:14:00.000" -"0100BAB01113A000","Neon Abyss","status-playable","playable","2022-10-05 15:59:44.000" -"010075E0047F8000","Neon Chrome","status-playable","playable","2022-08-06 18:38:34.000" -"010032000EAC6000","Neon Drive","status-playable","playable","2022-09-10 13:45:48.000" -"0100B9201406A000","Neon White","status-ingame;crash","ingame","2023-02-02 22:25:06.000" -"0100743008694000","Neonwall","status-playable;nvdec","playable","2022-08-06 18:49:52.000" -"","Neoverse Trinity Edition - 01001A20133E000","status-playable","playable","2022-10-19 10:28:03.000" -"","Nerdook Bundle Vol. 1","gpu;slow;status-ingame","ingame","2020-10-07 14:27:10.000" -"01008B0010160000","Nerved","status-playable;UE4","playable","2022-09-20 17:14:03.000" -"","NeuroVoider","status-playable","playable","2020-06-04 18:20:05.000" -"0100C20012A54000","Nevaeh","gpu;nvdec;status-ingame","ingame","2021-06-16 17:29:03.000" -"010039801093A000","Never Breakup","status-playable","playable","2022-10-05 16:12:12.000" -"0100F79012600000","Neverending Nightmares","crash;gpu;status-boots","boots","2021-04-24 01:43:35.000" -"","Neverlast","slow;status-ingame","ingame","2020-07-13 23:55:19.000" -"010013700DA4A000","Neverwinter Nights: Enhanced Edition","gpu;status-menus;nvdec","menus","2024-09-30 02:59:19.000" -"","New Frontier Days -Founding Pioneers-","status-playable","playable","2020-12-10 12:45:07.000" -"0100F4300BF2C000","New Pokémon Snap","status-playable","playable","2023-01-15 23:26:57.000" -"010017700B6C2000","New Super Lucky's Tale","status-playable","playable","2024-03-11 14:14:10.000" -"0100EA80032EA000","New Super Mario Bros. U Deluxe","32-bit;status-playable","playable","2023-10-08 02:06:37.000" -"","Newt One","status-playable","playable","2020-10-17 21:21:48.000" -"","Nexomon: Extinction","status-playable","playable","2020-11-30 15:02:22.000" -"0100B69012EC6000","Nexoria: Dungeon Rogue Heroes","gpu;status-ingame","ingame","2021-10-04 18:41:29.000" -"","Next Up Hero","online;status-playable","playable","2021-01-04 22:39:36.000" -"0100E5600D446000","Ni No Kuni Wrath of the White Witch","status-boots;32-bit;nvdec","boots","2024-07-12 04:52:59.000" -"","Nice Slice","nvdec;status-playable","playable","2020-06-17 15:13:27.000" -"","Niche - a genetics survival game","nvdec;status-playable","playable","2020-11-27 14:01:11.000" -"010010701AFB2000","Nickelodeon All-Star Brawl 2","status-playable","playable","2024-06-03 14:15:01.000" -"","Nickelodeon Kart Racers","status-playable","playable","2021-01-07 12:16:49.000" -"0100CEC003A4A000","Nickelodeon Paw Patrol: On a Roll","nvdec;status-playable","playable","2021-01-28 21:14:49.000" -"","Nicky: The Home Alone Golf Ball","status-playable","playable","2020-08-08 13:45:39.000" -"0100A95012668000","Nicole","status-playable;audout","playable","2022-10-05 16:41:44.000" -"0100B8E016F76000","NieR:Automata The End of YoRHa Edition","slow;status-ingame;crash","ingame","2024-05-17 01:06:34.000" -"0100F3A0095A6000","Night Call","status-playable;nvdec","playable","2022-10-03 12:57:00.000" -"0100D8500A692000","Night Trap - 25th Anniversary Edition","status-playable;nvdec","playable","2022-08-08 13:16:14.000" -"0100921006A04000","Night in the Woods","status-playable","playable","2022-12-03 20:17:54.000" -"","Nightmare Boy","status-playable","playable","2021-01-05 15:52:29.000" -"01006E700B702000","Nightmares from the Deep 2: The Siren's Call","status-playable;nvdec","playable","2022-10-19 10:58:53.000" -"0100628004BCE000","Nights of Azure 2: Bride of the New Moon","status-menus;crash;nvdec;regression","menus","2022-11-24 16:00:39.000" -"","Nightshade","nvdec;status-playable","playable","2020-05-10 19:43:31.000" -"","Nihilumbra","status-playable","playable","2020-05-10 16:00:12.000" -"0100746010E4C000","NinNinDays","status-playable","playable","2022-11-20 15:17:29.000" -"0100D03003F0E000","Nine Parchments","status-playable;ldn-untested","playable","2022-08-07 12:32:08.000" -"0100E2F014F46000","Ninja Gaiden Sigma","status-playable;nvdec","playable","2022-11-13 16:27:02.000" -"","Ninja Gaiden Sigma 2 - 0100696014FA000","status-playable;nvdec","playable","2024-07-31 21:53:48.000" -"","Ninja Shodown","status-playable","playable","2020-05-11 12:31:21.000" -"","Ninja Striker","status-playable","playable","2020-12-08 19:33:29.000" -"0100CCD0073EA000","Ninjala","status-boots;online-broken;UE4","boots","2024-07-03 20:04:49.000" -"010003C00B868000","Ninjin: Clash of Carrots","status-playable;online-broken","playable","2024-07-10 05:12:26.000" -"0100C9A00ECE6000","Nintendo 64 - Nintendo Switch Online","gpu;status-ingame;vulkan","ingame","2024-04-23 20:21:07.000" -"0100D870045B6000","Nintendo Entertainment System - Nintendo Switch Online","status-playable;online","playable","2022-07-01 15:45:06.000" -"0100C4B0034B2000","Nintendo Labo - Toy-Con 01: Variety Kit","gpu;status-ingame","ingame","2022-08-07 12:56:07.000" -"01009AB0034E0000","Nintendo Labo Toy-Con 02: Robot Kit","gpu;status-ingame","ingame","2022-08-07 13:03:19.000" -"01001E9003502000","Nintendo Labo Toy-Con 03: Vehicle Kit","services;status-menus;crash","menus","2022-08-03 17:20:11.000" -"0100165003504000","Nintendo Labo Toy-Con 04: VR Kit","services;status-boots;crash","boots","2023-01-17 22:30:24.000" -"0100D2F00D5C0000","Nintendo Switch Sports","deadlock;status-boots","boots","2024-09-10 14:20:24.000" -"01000EE017182000","Nintendo Switch Sports Online Play Test","gpu;status-ingame","ingame","2022-03-16 07:44:12.000" -"010037200C72A000","Nippon Marathon","nvdec;status-playable","playable","2021-01-28 20:32:46.000" -"010020901088A000","Nirvana Pilot Yume","status-playable","playable","2022-10-29 11:49:49.000" -"","No Heroes Here","online;status-playable","playable","2020-05-10 02:41:57.000" -"0100853015E86000","No Man’s Sky","gpu;status-ingame","ingame","2024-07-25 05:18:17.000" -"0100F0400F202000","No More Heroes","32-bit;status-playable","playable","2022-09-13 07:44:27.000" -"010071400F204000","No More Heroes 2 Desperate Struggle","32-bit;status-playable;nvdec","playable","2022-11-19 01:38:13.000" -"01007C600EB42000","No More Heroes 3","gpu;status-ingame;UE4","ingame","2024-03-11 17:06:19.000" -"01009F3011004000","No Straight Roads","status-playable;nvdec","playable","2022-10-05 17:01:38.000" -"0100542012884000","Nongunz: Doppelganger Edition","status-playable","playable","2022-10-29 12:00:39.000" -"","Norman's Great Illusion","status-playable","playable","2020-12-15 19:28:24.000" -"01001A500AD6A000","Norn9 ~Norn + Nonette~ LOFN","status-playable;nvdec;vulkan-backend-bug","playable","2022-12-09 09:29:16.000" -"0100A9E00D97A000","Northgard","status-menus;crash","menus","2022-02-06 02:05:35.000" -"","Not Not a Brain Buster","status-playable","playable","2020-05-10 02:05:26.000" -"0100DAF00D0E2000","Not Tonight","status-playable;nvdec","playable","2022-10-19 11:48:47.000" -"","Nubarron: The adventure of an unlucky gnome","status-playable","playable","2020-12-17 16:45:17.000" -"","Nuclien","status-playable","playable","2020-05-10 05:32:55.000" -"","Numbala","status-playable","playable","2020-05-11 12:01:07.000" -"010020500C8C8000","Number Place 10000","gpu;status-menus","menus","2021-11-24 09:14:23.000" -"010003701002C000","Nurse Love Syndrome","status-playable","playable","2022-10-13 10:05:22.000" -"010049F00EC30000","Nyan Cat: Lost in Space","online;status-playable","playable","2021-06-12 13:22:03.000" -"01002E6014FC4000","O---O","status-playable","playable","2022-10-29 12:12:14.000" -"","OBAKEIDORO!","nvdec;online;status-playable","playable","2020-10-16 16:57:34.000" -"","OK K.O.! Let's Play Heroes","nvdec;status-playable","playable","2021-01-11 18:41:02.000" -"0100276009872000","OKAMI HD","status-playable;nvdec","playable","2024-04-05 06:24:58.000" -"","OLYMPIC GAMES TOKYO 2020","ldn-untested;nvdec;online;status-playable","playable","2021-01-06 01:20:24.000" -"01006DB00D970000","OMG Zombies!","32-bit;status-playable","playable","2021-04-12 18:04:45.000" -"010014E017B14000","OMORI","status-playable","playable","2023-01-07 20:21:02.000" -"01008FE00E2F6000","ONE PIECE: PIRATE WARRIORS 4","status-playable;online-broken;ldn-untested","playable","2022-09-27 22:55:46.000" -"01004A200BE82000","OPUS Collection","status-playable","playable","2021-01-25 15:24:04.000" -"010049C0075F0000","OPUS: The Day We Found Earth","nvdec;status-playable","playable","2021-01-21 18:29:31.000" -"","OTOKOMIZU","status-playable","playable","2020-07-13 21:00:44.000" -"","OTTTD","slow;status-ingame","ingame","2020-10-10 19:31:07.000" -"01005F000CC18000","OVERWHELM","status-playable","playable","2021-01-21 18:37:18.000" -"01002A000C478000","Observer","UE4;gpu;nvdec;status-ingame","ingame","2021-03-03 20:19:45.000" -"","Oceanhorn","status-playable","playable","2021-01-05 13:55:22.000" -"01006CB010840000","Oceanhorn 2 Knights of the Lost Realm","status-playable","playable","2021-05-21 18:26:10.000" -"","Octocopter: Double or Squids","status-playable","playable","2021-01-06 01:30:16.000" -"0100CAB006F54000","Octodad Dadliest Catch","crash;status-boots","boots","2021-04-23 15:26:12.000" -"","Octopath Traveler","UE4;crash;gpu;status-ingame","ingame","2020-08-31 02:34:36.000" -"0100A3501946E000","Octopath Traveler II","gpu;status-ingame;amd-vendor-bug","ingame","2024-09-22 11:39:20.000" -"010084300C816000","Odallus","status-playable","playable","2022-08-08 12:37:58.000" -"0100BB500EE3C000","Oddworld: Munch's Oddysee","gpu;nvdec;status-ingame","ingame","2021-06-17 12:11:50.000" -"01005E700ABB8000","Oddworld: New 'n' Tasty","nvdec;status-playable","playable","2021-06-17 17:51:32.000" -"0100D210177C6000","Oddworld: Soulstorm","services-horizon;status-boots;crash","boots","2024-08-18 13:13:26.000" -"01002EA00ABBA000","Oddworld: Stranger's Wrath HD","status-menus;crash;nvdec;loader-allocator","menus","2021-11-23 09:23:21.000" -"","Odium to the Core","gpu;status-ingame","ingame","2021-01-08 14:03:52.000" -"01006F5013202000","Off And On Again","status-playable","playable","2022-10-29 19:46:26.000" -"01003CD00E8BC000","Offroad Racing","status-playable;online-broken;UE4","playable","2022-09-14 18:53:22.000" -"01003B900AE12000","Oh My Godheads: Party Edition","status-playable","playable","2021-04-15 11:04:11.000" -"","Oh...Sir! The Hollywood Roast","status-ingame","ingame","2020-12-06 00:42:30.000" -"01006AB00BD82000","OkunoKA","status-playable;online-broken","playable","2022-08-08 14:41:51.000" -"0100CE2007A86000","Old Man's Journey","nvdec;status-playable","playable","2021-01-28 19:16:52.000" -"","Old School Musical","status-playable","playable","2020-12-10 12:51:12.000" -"","Old School Racer 2","status-playable","playable","2020-10-19 12:11:26.000" -"0100E0200B980000","OlliOlli: Switch Stance","gpu;status-boots","boots","2024-04-25 08:36:37.000" -"0100F9D00C186000","Olympia Soiree","status-playable","playable","2022-12-04 21:07:12.000" -"01001D600E51A000","Omega Labyrinth Life","status-playable","playable","2021-02-23 21:03:03.000" -"","Omega Vampire","nvdec;status-playable","playable","2020-10-17 19:15:35.000" -"","Omensight: Definitive Edition","UE4;crash;nvdec;status-ingame","ingame","2020-07-26 01:45:14.000" -"","Once Upon A Coma","nvdec;status-playable","playable","2020-08-01 12:09:39.000" -"","One More Dungeon","status-playable","playable","2021-01-06 09:10:58.000" -"","One Person Story","status-playable","playable","2020-07-14 11:51:02.000" -"","One Piece Pirate Warriors 3","nvdec;status-playable","playable","2020-05-10 06:23:52.000" -"","One Piece Unlimited World Red Deluxe Edition","status-playable","playable","2020-05-10 22:26:32.000" -"","OneWayTicket","UE4;status-playable","playable","2020-06-20 17:20:49.000" -"0100463013246000","Oneiros","status-playable","playable","2022-10-13 10:17:22.000" -"0100CF4011B2A000","OniNaki","nvdec;status-playable","playable","2021-02-27 21:52:42.000" -"010057C00D374000","Oniken","status-playable","playable","2022-09-10 14:22:38.000" -"010037900C814000","Oniken: Unstoppable Edition","status-playable","playable","2022-08-08 14:52:06.000" -"","Onimusha: Warlords","nvdec;status-playable","playable","2020-07-31 13:08:39.000" -"0100D5400BD90000","Operación Triunfo 2017","services;status-ingame;nvdec","ingame","2022-08-08 15:06:42.000" -"01006CF00CFA4000","Operencia The Stolen Sun","UE4;nvdec;status-playable","playable","2021-06-08 13:51:07.000" -"","Ord.","status-playable","playable","2020-12-14 11:59:06.000" -"010061D00DB74000","Ori and the Blind Forest: Definitive Edition","status-playable;nvdec;online-broken","playable","2022-09-14 19:58:13.000" -"010005800F46E000","Ori and the Blind Forest: Definitive Edition Demo","status-playable","playable","2022-09-10 14:40:12.000" -"01008DD013200000","Ori and the Will of the Wisps","status-playable","playable","2023-03-07 00:47:13.000" -"","Orn: The Tiny Forest Sprite","UE4;gpu;status-ingame","ingame","2020-08-07 14:25:30.000" -"0100E5900F49A000","Othercide","status-playable;nvdec","playable","2022-10-05 19:04:38.000" -"01006AF013A9E000","Otti house keeper","status-playable","playable","2021-01-31 12:11:24.000" -"","Our World Is Ended.","nvdec;status-playable","playable","2021-01-19 22:46:57.000" -"010097F010FE6000","Our two Bedroom Story","gpu;status-ingame;nvdec","ingame","2023-10-10 17:41:20.000" -"01005A700A166000","Out Of The Box","status-playable","playable","2021-01-28 01:34:27.000" -"0100A0D013464000","Outbreak: Endless Nightmares","status-playable","playable","2022-10-29 12:35:49.000" -"0100C850130FE000","Outbreak: Epidemic","status-playable","playable","2022-10-13 10:27:31.000" -"0100D9F013102000","Outbreak: Lost Hope","crash;status-boots","boots","2021-04-26 18:01:23.000" -"0100B450130FC000","Outbreak: The New Nightmare","status-playable","playable","2022-10-19 15:42:07.000" -"01006EE013100000","Outbreak: The Nightmare Chronicles","status-playable","playable","2022-10-13 10:41:57.000" -"0100B8900EFA6000","Outbuddies DX","gpu;status-ingame","ingame","2022-08-04 22:39:24.000" -"01008D4007A1E000","Outlast","status-playable;nvdec;loader-allocator;vulkan-backend-bug","playable","2024-01-27 04:44:26.000" -"0100DE70085E8000","Outlast 2","status-ingame;crash;nvdec","ingame","2022-01-22 22:28:05.000" -"01006FD0080B2000","Overcooked! 2","status-playable;ldn-untested","playable","2022-08-08 16:48:10.000" -"0100F28011892000","Overcooked! All You Can Eat","ldn-untested;online;status-playable","playable","2021-04-15 10:33:52.000" -"01009B900401E000","Overcooked! Special Edition","status-playable","playable","2022-08-08 20:48:52.000" -"0100D7F00EC64000","Overlanders","status-playable;nvdec;UE4","playable","2022-09-14 20:15:06.000" -"01008EA00E816000","Overpass","status-playable;online-broken;UE4;ldn-untested","playable","2022-10-17 15:29:47.000" -"0100647012F62000","Override 2 Super Mech League","status-playable;online-broken;UE4","playable","2022-10-19 15:56:04.000" -"01008A700F7EE000","Override: Mech City Brawl - Super Charged Mega Edition","status-playable;nvdec;online-broken;UE4","playable","2022-09-20 17:33:32.000" -"0100F8600E21E000","Overwatch®: Legendary Edition","deadlock;status-boots","boots","2022-09-14 20:22:22.000" -"","Owlboy","status-playable","playable","2020-10-19 14:24:45.000" -"0100AD9012510000","PAC-MAN 99","gpu;status-ingame;online-broken","ingame","2024-04-23 00:48:25.000" -"","PAC-MAN CHAMPIONSHIP EDITION 2 PLUS","status-playable","playable","2021-01-19 22:06:18.000" -"0100F0D004CAE000","PAN-PAN A tiny big adventure","audout;status-playable","playable","2021-01-25 14:42:00.000" -"0100360016800000","PAW Patrol: Grand Prix","gpu;status-ingame","ingame","2024-05-03 16:16:11.000" -"0100274004052000","PAYDAY 2","status-playable;nvdec;online-broken;ldn-untested","playable","2022-08-09 12:56:39.000" -"010085700ABC8000","PBA Pro Bowling","status-playable;nvdec;online-broken;UE4","playable","2022-09-14 23:00:49.000" -"0100F95013772000","PBA Pro Bowling 2021","status-playable;online-broken;UE4","playable","2022-10-19 16:46:40.000" -"","PC Building Simulator","status-playable","playable","2020-06-12 00:31:58.000" -"010053401147C000","PGA TOUR 2K21","deadlock;status-ingame;nvdec","ingame","2022-10-05 21:53:50.000" -"0100063005C86000","PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE","audio;status-playable;nvdec","playable","2024-02-29 14:20:35.000" -"","PHOGS!","online;status-playable","playable","2021-01-18 15:18:37.000" -"","PLANET ALPHA","UE4;gpu;status-ingame","ingame","2020-12-16 14:42:20.000" -"0100EC100A790000","PSYVARIAR DELTA","nvdec;status-playable","playable","2021-01-20 13:01:46.000" -"010016400F07E000","PUSH THE CRATE","status-playable;nvdec;UE4","playable","2022-09-15 13:28:41.000" -"011123900AEE0000","Paladins","online;status-menus","menus","2021-01-21 19:21:37.000" -"010083700B730000","Pang Adventures","status-playable","playable","2021-04-10 12:16:59.000" -"","Pantsu Hunter","status-playable","playable","2021-02-19 15:12:27.000" -"","Panzer Dragoon: Remake","status-playable","playable","2020-10-04 04:03:55.000" -"01004AE0108E0000","Panzer Paladin","status-playable","playable","2021-05-05 18:26:00.000" -"","Paper Dolls Original","UE4;crash;status-boots","boots","2020-07-13 20:26:21.000" -"0100A3900C3E2000","Paper Mario The Origami King","audio;status-playable;Needs Update","playable","2024-08-09 18:27:40.000" -"0100ECD018EBE000","Paper Mario: The Thousand-Year Door","gpu;status-ingame;intel-vendor-bug;slow","ingame","2025-01-07 04:27:35.000" -"01006AD00B82C000","Paperbound Brawlers","status-playable","playable","2021-01-25 14:32:15.000" -"0100DC70174E0000","Paradigm Paradox","status-playable;vulkan-backend-bug","playable","2022-12-03 22:28:13.000" -"01007FB010DC8000","Paradise Killer","status-playable;UE4","playable","2022-10-05 19:33:05.000" -"010063400B2EC000","Paranautical Activity","status-playable","playable","2021-01-25 13:49:19.000" -"01006B5012B32000","Part Time UFO","status-ingame;crash","ingame","2023-03-03 03:13:05.000" -"01007FC00A040000","Party Arcade","status-playable;online-broken;UE4;ldn-untested","playable","2022-08-09 12:32:53.000" -"0100B8E00359E000","Party Golf","status-playable;nvdec","playable","2022-08-09 12:38:30.000" -"010022801217E000","Party Hard 2","status-playable;nvdec","playable","2022-10-05 20:31:48.000" -"","Party Treats","status-playable","playable","2020-07-02 00:05:00.000" -"01001E500EA16000","Path of Sin: Greed","status-menus;crash","menus","2021-11-24 08:00:00.000" -"010031F006E76000","Pato Box","status-playable","playable","2021-01-25 15:17:52.000" -"01001F201121E000","Paw Patrol: Might Pups Save Adventure Bay!","status-playable","playable","2022-10-13 12:17:55.000" -"01000c4015030000","Pawapoke R","services-horizon;status-nothing","nothing","2024-05-14 14:28:32.000" -"0100A56006CEE000","Pawarumi","status-playable;online-broken","playable","2022-09-10 15:19:33.000" -"010002100CDCC000","Peaky Blinders: Mastermind","status-playable","playable","2022-10-19 16:56:35.000" -"","Peasant Knight","status-playable","playable","2020-12-22 09:30:50.000" -"0100CA901AA9C000","Penny's Big Breakaway","status-playable;amd-vendor-bug","playable","2024-05-27 07:58:51.000" -"0100C510049E0000","Penny-Punching Princess","status-playable","playable","2022-08-09 13:37:05.000" -"","Perception","UE4;crash;nvdec;status-menus","menus","2020-12-18 11:49:23.000" -"010011700D1B2000","Perchang","status-playable","playable","2021-01-25 14:19:52.000" -"010089F00A3B4000","Perfect Angle","status-playable","playable","2021-01-21 18:48:45.000" -"01005CD012DC0000","Perky Little Things","status-boots;crash;vulkan","boots","2024-08-04 07:22:46.000" -"","Persephone","status-playable","playable","2021-03-23 22:39:19.000" -"","Perseverance","status-playable","playable","2020-07-13 18:48:27.000" -"010062B01525C000","Persona 4 Golden","status-playable","playable","2024-08-07 17:48:07.000" -"01005CA01580E000","Persona 5 Royal","gpu;status-ingame","ingame","2024-08-17 21:45:15.000" -"010087701B092000","Persona 5 Tactica","status-playable","playable","2024-04-01 22:21:03.000" -"","Persona 5: Scramble","deadlock;status-boots","boots","2020-10-04 03:22:29.000" -"0100801011C3E000","Persona 5: Strikers (US)","status-playable;nvdec;mac-bug","playable","2023-09-26 09:36:01.000" -"010044400EEAE000","Petoons Party","nvdec;status-playable","playable","2021-03-02 21:07:58.000" -"0100DDD00C0EA000","Phantaruk","status-playable","playable","2021-06-11 18:09:54.000" -"010096F00E5B0000","Phantom Doctrine","status-playable;UE4","playable","2022-09-15 10:51:50.000" -"0100C31005A50000","Phantom Trigger","status-playable","playable","2022-08-09 14:27:30.000" -"0100CB000A142000","Phoenix Wright: Ace Attorney Trilogy","status-playable","playable","2023-09-15 22:03:12.000" -"","Physical Contact: 2048","slow;status-playable","playable","2021-01-25 15:18:32.000" -"01008110036FE000","Physical Contact: Speed","status-playable","playable","2022-08-09 14:40:46.000" -"010077300A86C000","Pianista: The Legendary Virtuoso","status-playable;online-broken","playable","2022-08-09 14:52:56.000" -"010012100E8DC000","Picross Lord Of The Nazarick","status-playable","playable","2023-02-08 15:54:56.000" -"","Picross S2","status-playable","playable","2020-10-15 12:01:40.000" -"","Picross S3","status-playable","playable","2020-10-15 11:55:27.000" -"","Picross S4","status-playable","playable","2020-10-15 12:33:46.000" -"0100AC30133EC000","Picross S5","status-playable","playable","2022-10-17 18:51:42.000" -"010025901432A000","Picross S6","status-playable","playable","2022-10-29 17:52:19.000" -"","Picross S7","status-playable","playable","2022-02-16 12:51:25.000" -"010043B00E1CE000","PictoQuest","status-playable","playable","2021-02-27 15:03:16.000" -"","Piczle Lines DX","UE4;crash;nvdec;status-menus","menus","2020-11-16 04:21:31.000" -"","Piczle Lines DX 500 More Puzzles!","UE4;status-playable","playable","2020-12-15 23:42:51.000" -"01000FD00D5CC000","Pig Eat Ball","services;status-ingame","ingame","2021-11-30 01:57:45.000" -"0100AA80194B0000","Pikmin 1","audio;status-ingame","ingame","2024-05-28 18:56:11.000" -"0100D680194B2000","Pikmin 2","gpu;status-ingame","ingame","2023-07-31 08:53:41.000" -"0100F4C009322000","Pikmin 3 Deluxe","gpu;status-ingame;32-bit;nvdec;Needs Update","ingame","2024-09-03 00:28:26.000" -"01001CB0106F8000","Pikmin 3 Deluxe Demo","32-bit;crash;demo;gpu;status-ingame","ingame","2021-06-16 18:38:07.000" -"0100B7C00933A000","Pikmin 4","gpu;status-ingame;crash;UE4","ingame","2024-08-26 03:39:08.000" -"0100E0B019974000","Pikmin 4 Demo","gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug","ingame","2023-09-22 21:41:08.000" -"0100D6200E130000","Pillars of Eternity","status-playable","playable","2021-02-27 00:24:21.000" -"01007A500B0B2000","Pilot Sports","status-playable","playable","2021-01-20 15:04:17.000" -"0100DA70186D4000","Pinball FX","status-playable","playable","2024-05-03 17:09:11.000" -"0100DB7003828000","Pinball FX3","status-playable;online-broken","playable","2022-11-11 23:49:07.000" -"","Pine","slow;status-ingame","ingame","2020-07-29 16:57:39.000" -"","Pinstripe","status-playable","playable","2020-11-26 10:40:40.000" -"01002B20174EE000","Piofiore: Episodio 1926","status-playable","playable","2022-11-23 18:36:05.000" -"","Piofiore: Fated Memories","nvdec;status-playable","playable","2020-11-30 14:27:50.000" -"0100EA2013BCC000","Pixel Game Maker Series Puzzle Pedestrians","status-playable","playable","2022-10-24 20:15:50.000" -"0100859013CE6000","Pixel Game Maker Series Werewolf Princess Kaguya","crash;services;status-nothing","nothing","2021-03-26 00:23:07.000" -"","Pixel Gladiator","status-playable","playable","2020-07-08 02:41:26.000" -"010000E00E612000","Pixel Puzzle Makeout League","status-playable","playable","2022-10-13 12:34:00.000" -"","PixelJunk Eden 2","crash;status-ingame","ingame","2020-12-17 11:55:52.000" -"0100E4D00A690000","Pixeljunk Monsters 2","status-playable","playable","2021-06-07 03:40:01.000" -"01004A900C352000","Pizza Titan Ultra","nvdec;status-playable","playable","2021-01-20 15:58:42.000" -"05000FD261232000","Pizza Tower","status-ingame;crash","ingame","2024-09-16 00:21:56.000" -"0100FF8005EB2000","Plague Road","status-playable","playable","2022-08-09 15:27:14.000" -"010030B00C316000","Planescape: Torment and Icewind Dale: Enhanced Editions","cpu;status-boots;32-bit;crash;Needs Update","boots","2022-09-10 03:58:26.000" -"01007EA019CFC000","Planet Cube Edge","status-playable","playable","2023-03-22 17:10:12.000" -"010087000428E000","Plantera","status-playable","playable","2022-08-09 15:36:28.000" -"0100C56010FD8000","Plants vs. Zombies: Battle for Neighborville Complete Edition","gpu;audio;status-boots;crash","boots","2024-09-02 12:58:14.000" -"0100E5B011F48000","Ploid Saga","status-playable","playable","2021-04-19 16:58:45.000" -"01009440095FE000","Pode","nvdec;status-playable","playable","2021-01-25 12:58:35.000" -"010086F0064CE000","Poi: Explorer Edition","nvdec;status-playable","playable","2021-01-21 19:32:00.000" -"0100EB6012FD2000","Poison Control","status-playable","playable","2021-05-16 14:01:54.000" -"01005D100807A000","Pokemon Quest","status-playable","playable","2022-02-22 16:12:32.000" -"010030D005AE6000","Pokken Tournament DX Demo","status-playable;demo;opengl-backend-bug","playable","2022-08-10 12:03:19.000" -"0100B3F000BE2000","Pokkén Tournament DX","status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug","playable","2024-07-18 23:11:08.000" -"0100000011D90000","Pokémon Brilliant Diamond","gpu;status-ingame;ldn-works","ingame","2024-08-28 13:26:35.000" -"010072400E04A000","Pokémon Café Mix","status-playable","playable","2021-08-17 20:00:04.000" -"","Pokémon HOME","Needs Update;crash;services;status-menus","menus","2020-12-06 06:01:51.000" -"01001F5010DFA000","Pokémon Legends: Arceus","gpu;status-ingame;Needs Update;ldn-works","ingame","2024-09-19 10:02:02.000" -"01003D200BAA2000","Pokémon Mystery Dungeon Rescue Team DX","status-playable;mac-bug","playable","2024-01-21 00:16:32.000" -"0100A3D008C5C000","Pokémon Scarlet","gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug","ingame","2023-12-14 13:18:29.000" -"01008DB008C2C000","Pokémon Shield","deadlock;status-ingame;crash;online-broken;ldn-works;LAN","ingame","2024-08-12 07:20:22.000" -"0100ABF008968000","Pokémon Sword","deadlock;status-ingame;crash;online-broken;ldn-works;LAN","ingame","2024-08-26 15:40:37.000" -"01008F6008C5E000","Pokémon Violet","gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug","ingame","2024-07-30 02:51:48.000" -"0100187003A36000","Pokémon: Let's Go, Eevee!","status-ingame;crash;nvdec;online-broken;ldn-broken","ingame","2024-06-01 15:03:04.000" -"010003F003A34000","Pokémon: Let's Go, Pikachu!","status-ingame;crash;nvdec;online-broken;ldn-broken","ingame","2024-03-15 07:55:41.000" -"01009AD008C4C000","Pokémon: Let's Go, Pikachu! demo","slow;status-playable;demo","playable","2023-11-26 11:23:20.000" -"","Polandball: Can Into Space!","status-playable","playable","2020-06-25 15:13:26.000" -"","Poly Bridge","services;status-playable","playable","2020-06-08 23:32:41.000" -"010017600B180000","Polygod","slow;status-ingame;regression","ingame","2022-08-10 14:38:14.000" -"010074B00ED32000","Polyroll","gpu;status-boots","boots","2021-07-01 16:16:50.000" -"","Ponpu","status-playable","playable","2020-12-16 19:09:34.000" -"","Pooplers","status-playable","playable","2020-11-02 11:52:10.000" -"01007EF013CA0000","Port Royale 4","status-menus;crash;nvdec","menus","2022-10-30 14:34:06.000" -"01007BB017812000","Portal","status-playable","playable","2024-06-12 03:48:29.000" -"0100ABD01785C000","Portal 2","gpu;status-ingame","ingame","2023-02-20 22:44:15.000" -"","Portal Dogs","status-playable","playable","2020-09-04 12:55:46.000" -"0100437004170000","Portal Knights","ldn-untested;online;status-playable","playable","2021-05-27 19:29:04.000" -"","Potata: Fairy Flower","nvdec;status-playable","playable","2020-06-17 09:51:34.000" -"01000A4014596000","Potion Party","status-playable","playable","2021-05-06 14:26:54.000" -"","Power Rangers: Battle for the Grid","status-playable","playable","2020-06-21 16:52:42.000" -"01008E100E416000","PowerSlave Exhumed","gpu;status-ingame","ingame","2023-07-31 23:19:10.000" -"0100D1C01C194000","Powerful Pro Baseball 2024-2025","gpu;status-ingame","ingame","2024-08-25 06:40:48.000" -"","Prehistoric Dude","gpu;status-ingame","ingame","2020-10-12 12:38:48.000" -"","Pretty Princess Magical Coordinate","status-playable","playable","2020-10-15 11:43:41.000" -"01007F00128CC000","Pretty Princess Party","status-playable","playable","2022-10-19 17:23:58.000" -"010009300D278000","Preventive Strike","status-playable;nvdec","playable","2022-10-06 10:55:51.000" -"010007F00879E000","PriPara: All Idol Perfect Stage","status-playable","playable","2022-11-22 16:35:52.000" -"0100210019428000","Prince of Persia: The Lost Crown","status-ingame;crash","ingame","2024-06-08 21:31:58.000" -"01007A3009184000","Princess Peach: Showtime!","status-playable;UE4","playable","2024-09-21 13:39:45.000" -"010024701DC2E000","Princess Peach: Showtime! Demo","status-playable;UE4;demo","playable","2024-03-10 17:46:45.000" -"01008FA01187A000","Prinny 2: Dawn of Operation Panties, Dood!","32-bit;status-playable","playable","2022-10-13 12:42:58.000" -"0100A6E01681C000","Prinny Presents NIS Classics Volume 1","status-boots;crash;Needs Update","boots","2023-02-02 07:23:09.000" -"01007A0011878000","Prinny: Can I Really Be the Hero?","32-bit;status-playable;nvdec","playable","2023-10-22 09:25:25.000" -"010029200AB1C000","Prison Architect","status-playable","playable","2021-04-10 12:27:58.000" -"0100C1801B914000","Prison City","gpu;status-ingame","ingame","2024-03-01 08:19:33.000" -"0100F4800F872000","Prison Princess","status-playable","playable","2022-11-20 15:00:25.000" -"0100A9800A1B6000","Professional Construction - The Simulation","slow;status-playable","playable","2022-08-10 15:15:45.000" -"","Professional Farmer: Nintendo Switch Edition","slow;status-playable","playable","2020-12-16 13:38:19.000" -"","Professor Lupo and his Horrible Pets","status-playable","playable","2020-06-12 00:08:45.000" -"0100D1F0132F6000","Professor Lupo: Ocean","status-playable","playable","2021-04-14 16:33:33.000" -"0100BBD00976C000","Project Highrise: Architect's Edition","status-playable","playable","2022-08-10 17:19:12.000" -"0100ACE00DAB6000","Project Nimbus: Complete Edition","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-10 17:35:43.000" -"01002980140F6000","Project TRIANGLE STRATEGY Debut Demo","status-playable;UE4;demo","playable","2022-10-24 21:40:27.000" -"","Project Warlock","status-playable","playable","2020-06-16 10:50:41.000" -"","Psikyo Collection Vol 1","32-bit;status-playable","playable","2020-10-11 13:18:47.000" -"0100A2300DB78000","Psikyo Collection Vol. 3","status-ingame","ingame","2021-06-07 02:46:23.000" -"01009D400C4A8000","Psikyo Collection Vol.2","32-bit;status-playable","playable","2021-06-07 03:22:07.000" -"01007A200F2E2000","Psikyo Shooting Stars Alpha","32-bit;status-playable","playable","2021-04-13 12:03:43.000" -"0100D7400F2E4000","Psikyo Shooting Stars Bravo","32-bit;status-playable","playable","2021-06-14 12:09:07.000" -"","Puchitto kurasutā","Need-Update;crash;services;status-menus","menus","2020-07-04 16:44:28.000" -"0100861012474000","Pulstario","status-playable","playable","2022-10-06 11:02:01.000" -"01009AE00B788000","Pumped BMX Pro","status-playable;nvdec;online-broken","playable","2022-09-20 17:40:50.000" -"01006C10131F6000","Pumpkin Jack","status-playable;nvdec;UE4","playable","2022-10-13 12:52:32.000" -"0100B60010432000","Push the Crate 2","UE4;gpu;nvdec;status-ingame","ingame","2021-06-10 14:20:01.000" -"","Pushy and Pully in Blockland","status-playable","playable","2020-07-04 11:44:41.000" -"","Puyo Puyo Champions","online;status-playable","playable","2020-06-19 11:35:08.000" -"010038E011940000","Puyo Puyo Tetris 2","status-playable;ldn-untested","playable","2023-09-26 11:35:25.000" -"010079E01A1E0000","Puzzle Bobble Everybubble!","audio;status-playable;ldn-works","playable","2023-06-10 03:53:40.000" -"","Puzzle Book","status-playable","playable","2020-09-28 13:26:01.000" -"0100476004A9E000","Puzzle Box Maker","status-playable;nvdec;online-broken","playable","2022-08-10 18:00:52.000" -"","Puzzle and Dragons GOLD","slow;status-playable","playable","2020-05-13 15:09:34.000" -"0100A4E017372000","Pyramid Quest","gpu;status-ingame","ingame","2023-08-16 21:14:52.000" -"","Q-YO Blaster","gpu;status-ingame","ingame","2020-06-07 22:36:53.000" -"010023600AA34000","Q.U.B.E. 2","UE4;status-playable","playable","2021-03-03 21:38:57.000" -"0100A8D003BAE000","Qbics Paint","gpu;services;status-ingame","ingame","2021-06-07 10:54:09.000" -"0100BA5012E54000","Quake","gpu;status-menus;crash","menus","2022-08-08 12:40:34.000" -"010048F0195E8000","Quake II","status-playable","playable","2023-08-15 03:42:14.000" -"","QuakespasmNX","status-nothing;crash;homebrew","nothing","2022-07-23 19:28:07.000" -"010045101288A000","Quantum Replica","status-playable;nvdec;UE4","playable","2022-10-30 21:17:22.000" -"0100F1400BA88000","Quarantine Circular","status-playable","playable","2021-01-20 15:24:15.000" -"0100DCF00F13A000","Queen's Quest 4: Sacred Truce","status-playable;nvdec","playable","2022-10-13 12:59:21.000" -"0100492012378000","Quell Zen","gpu;status-ingame","ingame","2021-06-11 15:59:53.000" -"01001DE005012000","Quest of Dungeons","status-playable","playable","2021-06-07 10:29:22.000" -"","QuietMansion2","status-playable","playable","2020-09-03 14:59:35.000" -"0100AF100EE76000","Quiplash 2 InterLASHional","status-playable;online-working","playable","2022-10-19 17:43:45.000" -"0100F930136B6000","R-TYPE FINAL 2","slow;status-ingame;nvdec;UE4","ingame","2022-10-30 21:46:29.000" -"01007B0014300000","R-TYPE FINAL 2 Demo","slow;status-ingame;nvdec;UE4;demo","ingame","2022-10-24 21:57:42.000" -"","R-Type Dimensions EX","status-playable","playable","2020-10-09 12:04:43.000" -"0100B5A004302000","R.B.I. Baseball 17","status-playable;online-working","playable","2022-08-11 11:55:47.000" -"01005CC007616000","R.B.I. Baseball 18","status-playable;nvdec;online-working","playable","2022-08-11 11:27:52.000" -"0100FCB00BF40000","R.B.I. Baseball 19","status-playable;nvdec;online-working","playable","2022-08-11 11:43:52.000" -"010061400E7D4000","R.B.I. Baseball 20","status-playable","playable","2021-06-15 21:16:29.000" -"0100B4A0115CA000","R.B.I. Baseball 21","status-playable;online-working","playable","2022-10-24 22:31:45.000" -"010024400C516000","RAD","gpu;status-menus;crash;UE4","menus","2021-11-29 02:01:56.000" -"01008FA00ACEC000","RADIO HAMMER STATION","audout;status-playable","playable","2021-02-26 20:20:06.000" -"","REKT","online;status-playable","playable","2020-09-28 12:33:56.000" -"01002A000CD48000","RESIDENT EVIL 6","status-playable;nvdec","playable","2022-09-15 14:31:47.000" -"010095300212A000","RESIDENT EVIL REVELATIONS 2","status-playable;online-broken;ldn-untested","playable","2022-08-11 12:57:50.000" -"","REZ PLZ","status-playable","playable","2020-10-24 13:26:12.000" -"01009D5009234000","RICO","status-playable;nvdec;online-broken","playable","2022-08-11 20:16:40.000" -"010088E00B816000","RIOT: Civil Unrest","status-playable","playable","2022-08-11 20:27:56.000" -"","RIVE: Ultimate Edition","status-playable","playable","2021-03-24 18:45:55.000" -"","RMX Real Motocross","status-playable","playable","2020-10-08 21:06:15.000" -"","ROBOTICS;NOTES DaSH","status-playable","playable","2020-11-16 23:09:54.000" -"","ROBOTICS;NOTES ELITE","status-playable","playable","2020-11-26 10:28:20.000" -"","RPG Maker MV","nvdec;status-playable","playable","2021-01-05 20:12:01.000" -"0000000000000000","RSDKv5u","status-ingame;homebrew","ingame","2024-04-01 16:25:34.000" -"0100E21013908000","RWBY: Grimm Eclipse","status-playable;online-broken","playable","2022-11-03 10:44:01.000" -"","RXN -Raijin-","nvdec;status-playable","playable","2021-01-10 16:05:43.000" -"01005BF00E4DE000","Rabi-Ribi","status-playable","playable","2022-08-06 17:02:44.000" -"","Race With Ryan","UE4;gpu;nvdec;slow;status-ingame","ingame","2020-11-16 04:35:33.000" -"","Rack N Ruin","status-playable","playable","2020-09-04 15:20:26.000" -"010000600CD54000","Rad Rodgers Radical Edition","status-playable;nvdec;online-broken","playable","2022-08-10 19:57:23.000" -"0100DA400E07E000","Radiation City","status-ingame;crash","ingame","2022-09-30 11:15:04.000" -"01009E40095EE000","Radiation Island","status-ingame;opengl;vulkan-backend-bug","ingame","2022-08-11 10:51:04.000" -"","Radical Rabbit Stew","status-playable","playable","2020-08-03 12:02:56.000" -"0100BAD013B6E000","Radio Commander","nvdec;status-playable","playable","2021-03-24 11:20:46.000" -"01003D00099EC000","Raging Justice","status-playable","playable","2021-06-03 14:06:50.000" -"01005CD013116000","Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]","status-playable","playable","2022-07-29 15:50:13.000" -"01002B000D97E000","Raiden V: Director's Cut","deadlock;status-boots;nvdec","boots","2024-07-12 07:31:46.000" -"01002EE00DC02000","Railway Empire","status-playable;nvdec","playable","2022-10-03 13:53:50.000" -"","Rain City","status-playable","playable","2020-10-08 16:59:03.000" -"010047600BF72000","Rain World","status-playable","playable","2023-05-10 23:34:08.000" -"0100BDD014232000","Rain on Your Parade","status-playable","playable","2021-05-06 19:32:04.000" -"","Rainbows, toilets & unicorns","nvdec;status-playable","playable","2020-10-03 18:08:18.000" -"","Raji An Ancient Epic","UE4;gpu;nvdec;status-ingame","ingame","2020-12-16 10:05:25.000" -"","Rapala Fishing: Pro Series","nvdec;status-playable","playable","2020-12-16 13:26:53.000" -"","Rascal Fight","status-playable","playable","2020-10-08 13:23:30.000" -"","Rawr-Off","crash;nvdec;status-menus","menus","2020-07-02 00:14:44.000" -"01005FF002E2A000","Rayman Legends: Definitive Edition","status-playable;nvdec;ldn-works","playable","2023-05-27 18:33:07.000" -"0100F03011616000","Re:Turn - One Way Trip","status-playable","playable","2022-08-29 22:42:53.000" -"","Re:ZERO -Starting Life in Another World- The Prophecy of the Throne","gpu;status-boots;crash;nvdec;vulkan","boots","2023-03-07 21:27:24.000" -"","Real Drift Racing","status-playable","playable","2020-07-25 14:31:31.000" -"010048600CC16000","Real Heroes: Firefighter","status-playable","playable","2022-09-20 18:18:44.000" -"","Reaper: Tale of a Pale Swordsman","status-playable","playable","2020-12-12 15:12:23.000" -"0100D9B00E22C000","Rebel Cops","status-playable","playable","2022-09-11 10:02:53.000" -"0100CAA01084A000","Rebel Galaxy: Outlaw","status-playable;nvdec","playable","2022-12-01 07:44:56.000" -"0100CF600FF7A000","Red Bow","services;status-ingame","ingame","2021-11-29 03:51:34.000" -"0100351013A06000","Red Colony","status-playable","playable","2021-01-25 20:44:41.000" -"01007820196A6000","Red Dead Redemption","status-playable;amd-vendor-bug","playable","2024-09-13 13:26:13.000" -"","Red Death","status-playable","playable","2020-08-30 13:07:37.000" -"010075000C608000","Red Faction Guerrilla Re-Mars-tered","ldn-untested;nvdec;online;status-playable","playable","2021-06-07 03:02:13.000" -"","Red Game Without a Great Name","status-playable","playable","2021-01-19 21:42:35.000" -"010045400D73E000","Red Siren : Space Defense","UE4;status-playable","playable","2021-04-25 21:21:29.000" -"","Red Wings - Aces of the Sky","status-playable","playable","2020-06-12 01:19:53.000" -"01000D100DCF8000","Redeemer: Enhanced Edition","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-09-11 10:20:24.000" -"0100326010B98000","Redout: Space Assault","status-playable;UE4","playable","2022-10-19 23:04:35.000" -"010007C00E558000","Reel Fishing: Road Trip Adventure","status-playable","playable","2021-03-02 16:06:43.000" -"","Reflection of Mine","audio;status-playable","playable","2020-12-17 15:06:37.000" -"","Refreshing Sideways Puzzle Ghost Hammer","status-playable","playable","2020-10-18 12:08:54.000" -"","Refunct","UE4;status-playable","playable","2020-12-15 22:46:21.000" -"0100FDF0083A6000","Regalia: Of Men and Monarchs - Royal Edition","status-playable","playable","2022-08-11 12:24:01.000" -"","Regions of Ruin","status-playable","playable","2020-08-05 11:38:58.000" -"","Reine des Fleurs","cpu;crash;status-boots","boots","2020-09-27 18:50:39.000" -"01002AD013C52000","Relicta","status-playable;nvdec;UE4","playable","2022-10-31 12:48:33.000" -"010095900B436000","Remi Lore","status-playable","playable","2021-06-03 18:58:15.000" -"0100FBD00F5F6000","Remothered: Broken Porcelain","UE4;gpu;nvdec;status-ingame","ingame","2021-06-17 15:13:11.000" -"01001F100E8AE000","Remothered: Tormented Fathers","status-playable;nvdec;UE4","playable","2022-10-19 23:26:50.000" -"","Rento Fortune Monolit","ldn-untested;online;status-playable","playable","2021-01-19 19:52:21.000" -"01007CC0130C6000","Renzo Racer","status-playable","playable","2021-03-23 22:28:05.000" -"01003C400AD42000","Rescue Tale","status-playable","playable","2022-09-20 18:40:18.000" -"010099A00BC1E000","Resident Evil 4","status-playable;nvdec","playable","2022-11-16 21:16:04.000" -"010018100CD46000","Resident Evil 5","status-playable;nvdec","playable","2024-02-18 17:15:29.000" -"0100643002136000","Resident Evil Revelations","status-playable;nvdec;ldn-untested","playable","2022-08-11 12:44:19.000" -"0100E7F00FFB8000","Resolutiion","crash;status-boots","boots","2021-04-25 21:57:56.000" -"0100FF201568E000","Restless Night [0100FF201568E000]","status-nothing;crash","nothing","2022-02-09 10:54:49.000" -"0100069000078000","Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000","services;status-nothing;crash","nothing","2022-08-11 13:19:41.000" -"010086E00BCB2000","Retimed","status-playable","playable","2022-08-11 13:32:39.000" -"","Retro City Rampage DX","status-playable","playable","2021-01-05 17:04:17.000" -"01000ED014A2C000","Retrograde Arena","status-playable;online-broken","playable","2022-10-31 13:38:58.000" -"010032E00E6E2000","Return of the Obra Dinn","status-playable","playable","2022-09-15 19:56:45.000" -"010027400F708000","Revenge of Justice","status-playable;nvdec","playable","2022-11-20 15:43:23.000" -"0100E2E00EA42000","Reventure","status-playable","playable","2022-09-15 20:07:06.000" -"0100729012D18000","Rhythm Fighter","crash;status-nothing","nothing","2021-02-16 18:51:30.000" -"","Rhythm of the Gods","UE4;crash;status-nothing","nothing","2020-10-03 17:39:59.000" -"","RiME","UE4;crash;gpu;status-boots","boots","2020-07-20 15:52:38.000" -"01002C700C326000","Riddled Corpses EX","status-playable","playable","2021-06-06 16:02:44.000" -"0100AC600D898000","Rift Keeper","status-playable","playable","2022-09-20 19:48:20.000" -"01006AC00EE6E000","Rimelands","status-playable","playable","2022-10-13 13:32:56.000" -"01002FF008C24000","Ring Fit Adventure","crash;services;status-nothing","nothing","2021-04-14 19:00:01.000" -"01002A6006AA4000","Riptide GP: Renegade","online;status-playable","playable","2021-04-13 23:33:02.000" -"","Rise and Shine","status-playable","playable","2020-12-12 15:56:43.000" -"","Rise of Insanity","status-playable","playable","2020-08-30 15:42:14.000" -"01006BA00E652000","Rise: Race the Future","status-playable","playable","2021-02-27 13:29:06.000" -"010020C012F48000","Rising Hell","status-playable","playable","2022-10-31 13:54:02.000" -"0100E8300A67A000","Risk","status-playable;nvdec;online-broken","playable","2022-08-01 18:53:28.000" -"010076D00E4BA000","Risk of Rain 2","status-playable;online-broken","playable","2024-03-04 17:01:05.000" -"0100BD300F0EC000","Ritual","status-playable","playable","2021-03-02 13:51:19.000" -"010042500FABA000","Ritual: Crown of Horns","status-playable","playable","2021-01-26 16:01:47.000" -"","Rival Megagun","nvdec;online;status-playable","playable","2021-01-19 14:01:46.000" -"","River City Girls","nvdec;status-playable","playable","2020-06-10 23:44:09.000" -"01002E80168F4000","River City Girls 2","status-playable","playable","2022-12-07 00:46:27.000" -"0100B2100767C000","River City Melee Mach!!","status-playable;online-broken","playable","2022-09-20 20:51:57.000" -"010053000B986000","Road Redemption","status-playable;online-broken","playable","2022-08-12 11:26:20.000" -"010002F009A7A000","Road to Ballhalla","UE4;status-playable","playable","2021-06-07 02:22:36.000" -"","Road to Guangdong","slow;status-playable","playable","2020-10-12 12:15:32.000" -"010068200C5BE000","Roarr!","status-playable","playable","2022-10-19 23:57:45.000" -"0100618004096000","Robonauts","status-playable;nvdec","playable","2022-08-12 11:33:23.000" -"","Robozarro","status-playable","playable","2020-09-03 13:33:40.000" -"","Rock 'N Racing Off Road DX","status-playable","playable","2021-01-10 15:27:15.000" -"","Rock N' Racing Grand Prix","status-playable","playable","2021-01-06 20:23:57.000" -"0100A1B00DB36000","Rock of Ages 3: Make & Break","status-playable;UE4","playable","2022-10-06 12:18:29.000" -"01005EE0036EC000","Rocket League","gpu;status-ingame;online-broken;ldn-untested","ingame","2024-02-08 19:51:36.000" -"","Rocket Wars","status-playable","playable","2020-07-24 14:27:39.000" -"0100EC7009348000","Rogue Aces","gpu;services;status-ingame;nvdec","ingame","2021-11-30 02:18:30.000" -"01009FA010848000","Rogue Heroes: Ruins of Tasos","online;status-playable","playable","2021-04-01 15:41:25.000" -"","Rogue Legacy","status-playable","playable","2020-08-10 19:17:28.000" -"","Rogue Robots","status-playable","playable","2020-06-16 12:16:11.000" -"01001CC00416C000","Rogue Trooper Redux","status-playable;nvdec;online-broken","playable","2022-08-12 11:53:01.000" -"0100C7300C0EC000","RogueCube","status-playable","playable","2021-06-16 12:16:42.000" -"","Roll'd","status-playable","playable","2020-07-04 20:24:01.000" -"01004900113F8000","RollerCoaster Tycoon 3: Complete Edition","32-bit;status-playable","playable","2022-10-17 14:18:01.000" -"","RollerCoaster Tycoon Adventures","nvdec;status-playable","playable","2021-01-05 18:14:18.000" -"010076200CA16000","Rolling Gunner","status-playable","playable","2021-05-26 12:54:18.000" -"0100579011B40000","Rolling Sky 2","status-playable","playable","2022-11-03 10:21:12.000" -"01001F600829A000","Romancing SaGa 2","status-playable","playable","2022-08-12 12:02:24.000" -"","Romancing SaGa 3","audio;gpu;status-ingame","ingame","2020-06-27 20:26:18.000" -"010088100DD42000","Roof Rage","status-boots;crash;regression","boots","2023-11-12 03:47:18.000" -"","Roombo: First Blood","nvdec;status-playable","playable","2020-08-05 12:11:37.000" -"0100936011556000","Root Double -Before Crime * After Days- Xtend Edition","status-nothing;crash","nothing","2022-02-05 02:03:49.000" -"010030A00DA3A000","Root Letter: Last Answer","status-playable;vulkan-backend-bug","playable","2022-09-17 10:25:57.000" -"","Royal Roads","status-playable","playable","2020-11-17 12:54:38.000" -"010009B00D33C000","Rugby Challenge 4","slow;status-playable;online-broken;UE4","playable","2022-10-06 12:45:53.000" -"01006EC00F2CC000","Ruiner","status-playable;UE4","playable","2022-10-03 14:11:33.000" -"010074F00DE4A000","Run the Fan","status-playable","playable","2021-02-27 13:36:28.000" -"","Runbow","online;status-playable","playable","2021-01-08 22:47:44.000" -"0100D37009B8A000","Runbow Deluxe Edition","status-playable;online-broken","playable","2022-08-12 12:20:25.000" -"010081C0191D8000","Rune Factory 3 Special","status-playable","playable","2023-10-15 08:32:49.000" -"010051D00E3A4000","Rune Factory 4 Special","status-ingame;32-bit;crash;nvdec","ingame","2023-05-06 08:49:17.000" -"010014D01216E000","Rune Factory 5 (JP)","gpu;status-ingame","ingame","2021-06-01 12:00:36.000" -"0100B8B012ECA000","S.N.I.P.E.R. Hunter Scope","status-playable","playable","2021-04-19 15:58:09.000" -"","SAMURAI SHODOWN","UE4;crash;nvdec;status-menus","menus","2020-09-06 02:17:00.000" -"0100F6800F48E000","SAMURAI SHOWDOWN NEOGEO COLLECTION","nvdec;status-playable","playable","2021-06-14 17:12:56.000" -"0100829018568000","SD GUNDAM BATTLE ALLIANCE Demo","audio;status-ingame;crash;demo","ingame","2022-08-01 23:01:20.000" -"010055700CEA8000","SD GUNDAM G GENERATION CROSS RAYS","status-playable;nvdec","playable","2022-09-15 20:58:44.000" -"","SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00","status-playable;nvdec","playable","2022-09-15 20:45:57.000" -"0100A8900AF04000","SEGA AGES Alex Kidd in Miracle World","online;status-playable","playable","2021-05-05 16:35:47.000" -"01001E600AF08000","SEGA AGES Gain Ground","online;status-playable","playable","2021-05-05 16:16:27.000" -"","SEGA AGES OUTRUN","status-playable","playable","2021-01-11 13:13:59.000" -"","SEGA AGES PHANTASY STAR","status-playable","playable","2021-01-11 12:49:48.000" -"01005F600CB0E000","SEGA AGES Puyo Puyo","online;status-playable","playable","2021-05-05 16:09:28.000" -"01000D200C614000","SEGA AGES SONIC THE HEDGEHOG 2","status-playable","playable","2022-09-21 20:26:35.000" -"","SEGA AGES SPACE HARRIER","status-playable","playable","2021-01-11 12:57:40.000" -"01001E700AC60000","SEGA AGES Wonder Boy: Monster Land","online;status-playable","playable","2021-05-05 16:28:25.000" -"010051F00AC5E000","SEGA Ages: Sonic The Hedgehog","slow;status-playable","playable","2023-03-05 20:16:31.000" -"010054400D2E6000","SEGA Ages: Virtua Racing","status-playable;online-broken","playable","2023-01-29 17:08:39.000" -"0100B3C014BDA000","SEGA Genesis - Nintendo Switch Online","status-nothing;crash;regression","nothing","2022-04-11 07:27:21.000" -"","SEGA Mega Drive Classics","online;status-playable","playable","2021-01-05 11:08:00.000" -"0100D1800D902000","SENRAN KAGURA Peach Ball","status-playable","playable","2021-06-03 15:12:10.000" -"","SENRAN KAGURA Reflexions","status-playable","playable","2020-03-23 19:15:23.000" -"","SENTRY","status-playable","playable","2020-12-13 12:00:24.000" -"","SHIFT QUANTUM","UE4;crash;status-ingame","ingame","2020-11-06 21:54:08.000" -"0100B16009C10000","SINNER: Sacrifice for Redemption","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-12 20:37:33.000" -"0100A0A00D1AA000","SKYHILL","status-playable","playable","2021-03-05 15:19:11.000" -"","SKYPEACE","status-playable","playable","2020-05-29 14:14:30.000" -"01002AA00C974000","SMASHING THE BATTLE","status-playable","playable","2021-06-11 15:53:57.000" -"01004AB00AEF8000","SNK 40th Anniversary Collection","status-playable","playable","2022-08-14 13:33:15.000" -"010027F00AD6C000","SNK HEROINES Tag Team Frenzy","status-playable;nvdec;online-broken;ldn-untested","playable","2022-08-14 14:19:25.000" -"","SOLDAM Drop, Connect, Erase","status-playable","playable","2020-05-30 09:18:54.000" -"01005EA01C0FC000","SONIC X SHADOW GENERATIONS","status-ingame;crash","ingame","2025-01-07 04:20:45.000" -"","SPACE ELITE FORCE","status-playable","playable","2020-11-27 15:21:05.000" -"0100EBF00E702000","STAR OCEAN First Departure R","nvdec;status-playable","playable","2021-07-05 19:29:16.000" -"010065301A2E0000","STAR OCEAN The Second Story R","status-ingame;crash","ingame","2024-06-01 02:39:59.000" -"010040701B948000","STAR WARS Battlefront Classic Collection","gpu;status-ingame;vulkan","ingame","2024-07-12 19:24:21.000" -"0100BD100FFBE000","STAR WARS Episode I: Racer","slow;status-playable;nvdec","playable","2022-10-03 16:08:36.000" -"0100BB500EACA000","STAR WARS Jedi Knight II Jedi Outcast","gpu;status-ingame","ingame","2022-09-15 22:51:00.000" -"0100153014544000","STAR WARS: The Force Unleashed","status-playable","playable","2024-05-01 17:41:28.000" -"0100616009082000","STAY","crash;services;status-boots","boots","2021-04-23 14:24:52.000" -"0100B61009C60000","STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY","status-playable","playable","2021-01-26 17:37:28.000" -"0100CB400E9BC000","STEINS;GATE: My Darling's Embrace","status-playable;nvdec","playable","2022-11-20 16:48:34.000" -"0100BC800EDA2000","STELLATUM","gpu;status-playable","playable","2021-03-07 16:30:23.000" -"010070D00F640000","STONE","status-playable;UE4","playable","2022-09-30 11:53:32.000" -"010017301007E000","STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]","status-playable","playable","2021-03-18 11:42:19.000" -"0100FF5005B76000","STRIKERS1945 for Nintendo Switch","32-bit;status-playable","playable","2021-06-03 19:35:04.000" -"0100720008ED2000","STRIKERS1945II for Nintendo Switch","32-bit;status-playable","playable","2021-06-03 19:43:00.000" -"0100C5500E7AE000","STURMWIND EX","audio;32-bit;status-playable","playable","2022-09-16 12:01:39.000" -"0100B87017D94000","SUPER BOMBERMAN R 2","deadlock;status-boots","boots","2023-09-29 13:19:51.000" -"0100E5E00C464000","SUPER DRAGON BALL HEROES WORLD MISSION","status-playable;nvdec;online-broken","playable","2022-08-17 12:56:30.000" -"","SUPER ROBOT WARS T","online;status-playable","playable","2021-03-25 11:00:40.000" -"","SUPER ROBOT WARS V","online;status-playable","playable","2020-06-23 12:56:37.000" -"","SUPER ROBOT WARS X","online;status-playable","playable","2020-08-05 19:18:51.000" -"01005AB01119C000","SUSHI REVERSI","status-playable","playable","2021-06-11 19:26:58.000" -"01005DF00DC26000","SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION","UE4;gpu;online;status-ingame","ingame","2021-06-09 16:58:50.000" -"01001B600D1D6000","SWORD ART ONLINE: Hollow Realization Deluxe Edition","status-playable;nvdec","playable","2022-08-19 19:19:15.000" -"","SYNAPTIC DRIVE","online;status-playable","playable","2020-09-07 13:44:05.000" -"01009BF00E7D2000","SYNTHETIK: Ultimate","gpu;status-ingame;crash","ingame","2022-08-30 03:19:25.000" -"0100A51013530000","SaGa Frontier Remastered","status-playable;nvdec","playable","2022-11-03 13:54:56.000" -"010003A00D0B4000","SaGa SCARLET GRACE: AMBITIONS","status-playable","playable","2022-10-06 13:20:31.000" -"","Saboteur II: Avenging Angel","Needs Update;cpu;crash;status-nothing","nothing","2021-01-26 14:47:37.000" -"","Saboteur SiO","slow;status-ingame","ingame","2020-12-17 16:59:49.000" -"","Safety First!","status-playable","playable","2021-01-06 09:05:23.000" -"01008D100D43E000","Saints Row IV","status-playable;ldn-untested;LAN","playable","2023-12-04 18:33:37.000" -"0100DE600BEEE000","Saints Row: The Third - The Full Package","slow;status-playable;LAN","playable","2023-08-24 02:40:58.000" -"01007F000EB36000","Sakai and...","status-playable;nvdec","playable","2022-12-15 13:53:19.000" -"0100B1400E8FE000","Sakuna: Of Rice and Ruin","status-playable","playable","2023-07-24 13:47:13.000" -"0100BBF0122B4000","Sally Face","status-playable","playable","2022-06-06 18:41:24.000" -"","Salt And Sanctuary","status-playable","playable","2020-10-22 11:52:19.000" -"","Sam & Max Save the World","status-playable","playable","2020-12-12 13:11:51.000" -"","Samsara","status-playable","playable","2021-01-11 15:14:12.000" -"01006C600E46E000","Samurai Jack Battle Through Time","status-playable;nvdec;UE4","playable","2022-10-06 13:33:59.000" -"0100B6501A360000","Samurai Warrior","status-playable","playable","2023-02-27 18:42:38.000" -"","SamuraiAces for Nintendo Switch","32-bit;status-playable","playable","2020-11-24 20:26:55.000" -"","Sangoku Rensenki ~Otome no Heihou!~","gpu;nvdec;status-ingame","ingame","2020-10-17 19:13:14.000" -"0100A4700BC98000","Satsujin Tantei Jack the Ripper","status-playable","playable","2021-06-21 16:32:54.000" -"0100F0000869C000","Saturday Morning RPG","status-playable;nvdec","playable","2022-08-12 12:41:50.000" -"","Sausage Sports Club","gpu;status-ingame","ingame","2021-01-10 05:37:17.000" -"0100C8300FA90000","Save Koch","status-playable","playable","2022-09-26 17:06:56.000" -"010091000F72C000","Save Your Nuts","status-playable;nvdec;online-broken;UE4","playable","2022-09-27 23:12:02.000" -"","Save the Ninja Clan","status-playable","playable","2021-01-11 13:56:37.000" -"0100AA00128BA000","Saviors of Sapphire Wings & Stranger of Sword City Revisited","status-menus;crash","menus","2022-10-24 23:00:46.000" -"01001C3012912000","Say No! More","status-playable","playable","2021-05-06 13:43:34.000" -"010010A00A95E000","Sayonara Wild Hearts","status-playable","playable","2023-10-23 03:20:01.000" -"0100ACB004006000","Schlag den Star","slow;status-playable;nvdec","playable","2022-08-12 14:28:22.000" -"0100394011C30000","Scott Pilgrim vs The World: The Game","services-horizon;status-nothing;crash","nothing","2024-07-12 08:13:03.000" -"","Scribblenauts Mega Pack","nvdec;status-playable","playable","2020-12-17 22:56:14.000" -"","Scribblenauts Showdown","gpu;nvdec;status-ingame","ingame","2020-12-17 23:05:53.000" -"0100E4A00D066000","Sea King","UE4;nvdec;status-playable","playable","2021-06-04 15:49:22.000" -"0100AFE012BA2000","Sea of Solitude The Director's Cut","gpu;status-ingame","ingame","2024-07-12 18:29:29.000" -"01008C0016544000","Sea of Stars","status-playable","playable","2024-03-15 20:27:12.000" -"010036F0182C4000","Sea of Stars Demo","status-playable;demo","playable","2023-02-12 15:33:56.000" -"","SeaBed","status-playable","playable","2020-05-17 13:25:37.000" -"","Season Match Bundle - Part 1 and 2","status-playable","playable","2021-01-11 13:28:23.000" -"","Season Match Full Bundle - Parts 1, 2 and 3","status-playable","playable","2020-10-27 16:15:22.000" -"","Secret Files 3","nvdec;status-playable","playable","2020-10-24 15:32:39.000" -"010075D0101FA000","Seek Hearts","status-playable","playable","2022-11-22 15:06:26.000" -"","Seers Isle","status-playable","playable","2020-11-17 12:28:50.000" -"","Semispheres","status-playable","playable","2021-01-06 23:08:31.000" -"01009E500D29C000","Sentinels of Freedom","status-playable","playable","2021-06-14 16:42:19.000" -"010059700D4A0000","Sephirothic Stories","services;status-menus","menus","2021-11-25 08:52:17.000" -"010007D00D43A000","Serious Sam Collection","status-boots;vulkan-backend-bug","boots","2022-10-13 13:53:34.000" -"0100B2C00E4DA000","Served! A gourmet race","status-playable;nvdec","playable","2022-09-28 12:46:00.000" -"010018400C24E000","Seven Knights -Time Wanderer-","status-playable;vulkan-backend-bug","playable","2022-10-13 22:08:54.000" -"0100D6F016676000","Seven Pirates H","status-playable","playable","2024-06-03 14:54:12.000" -"","Severed","status-playable","playable","2020-12-15 21:48:48.000" -"0100D5500DA94000","Shadow Blade Reload","nvdec;status-playable","playable","2021-06-11 18:40:43.000" -"0100BE501382A000","Shadow Gangs","cpu;gpu;status-ingame;crash;regression","ingame","2024-04-29 00:07:26.000" -"0100C3A013840000","Shadow Man Remastered","gpu;status-ingame","ingame","2024-05-20 06:01:39.000" -"","Shadowgate","status-playable","playable","2021-04-24 07:32:57.000" -"0100371013B3E000","Shadowrun Returns","gpu;status-ingame;Needs Update","ingame","2022-10-04 21:32:31.000" -"01008310154C4000","Shadowrun: Dragonfall - Director's Cut","gpu;status-ingame;Needs Update","ingame","2022-10-04 20:52:18.000" -"0100C610154CA000","Shadowrun: Hong Kong - Extended Edition","gpu;status-ingame;Needs Update","ingame","2022-10-04 20:53:09.000" -"","Shadows 2: Perfidia","status-playable","playable","2020-08-07 12:43:46.000" -"","Shadows of Adam","status-playable","playable","2021-01-11 13:35:58.000" -"01002A800C064000","Shadowverse Champions Battle","status-playable","playable","2022-10-02 22:59:29.000" -"01003B90136DA000","Shadowverse: Champion’s Battle","status-nothing;crash","nothing","2023-03-06 00:31:50.000" -"0100820013612000","Shady Part of Me","status-playable","playable","2022-10-20 11:31:55.000" -"","Shakedown: Hawaii","status-playable","playable","2021-01-07 09:44:36.000" -"01008DA012EC0000","Shakes on a Plane","status-menus;crash","menus","2021-11-25 08:52:25.000" -"0100B4900E008000","Shalnor Legends: Sacred Lands","status-playable","playable","2021-06-11 14:57:11.000" -"","Shanky: The Vegan's Nightmare - 01000C00CC10000","status-playable","playable","2021-01-26 15:03:55.000" -"0100430013120000","Shantae","status-playable","playable","2021-05-21 04:53:26.000" -"0100EFD00A4FA000","Shantae and the Pirate's Curse","status-playable","playable","2024-04-29 17:21:57.000" -"","Shantae and the Seven Sirens","nvdec;status-playable","playable","2020-06-19 12:23:40.000" -"","Shantae: Half-Genie Hero Ultimate Edition","status-playable","playable","2020-06-04 20:14:20.000" -"0100ADA012370000","Shantae: Risky's Revenge - Director's Cut","status-playable","playable","2022-10-06 20:47:39.000" -"01003AB01062C000","Shaolin vs Wutang : Eastern Heroes","deadlock;status-nothing","nothing","2021-03-29 20:38:54.000" -"0100B250009B9600","Shape Of The World0","UE4;status-playable","playable","2021-03-05 16:42:28.000" -"01004F50085F2000","She Remembered Caterpillars","status-playable","playable","2022-08-12 17:45:14.000" -"01000320110C2000","She Sees Red","status-playable;nvdec","playable","2022-09-30 11:30:15.000" -"01009EB004CB0000","Shelter Generations","status-playable","playable","2021-06-04 16:52:39.000" -"010020F014DBE000","Sherlock Holmes: The Devil's Daughter","gpu;status-ingame","ingame","2022-07-11 00:07:26.000" -"","Shift Happens","status-playable","playable","2021-01-05 21:24:18.000" -"01000750084B2000","Shiftlings","nvdec;status-playable","playable","2021-03-04 13:49:54.000" -"010045800ED1E000","Shin Megami Tensei III NOCTURNE HD REMASTER","gpu;status-ingame;Needs Update","ingame","2022-11-03 19:57:01.000" -"01003B0012DC2000","Shin Megami Tensei III Nocturne HD Remaster","status-playable","playable","2022-11-03 22:53:27.000" -"010063B012DC6000","Shin Megami Tensei V","status-playable;UE4","playable","2024-02-21 06:30:07.000" -"010069C01AB82000","Shin Megami Tensei V: Vengeance","gpu;status-ingame;vulkan-backend-bug","ingame","2024-07-14 11:28:24.000" -"01009050133B4000","Shing! (サムライフォース:斬!)","status-playable;nvdec","playable","2022-10-22 00:48:54.000" -"01009A5009A9E000","Shining Resonance Refrain","status-playable;nvdec","playable","2022-08-12 18:03:01.000" -"01004EE0104F6000","Shinsekai Into the Depths","status-playable","playable","2022-09-28 14:07:51.000" -"0100C2F00A568000","Shio","status-playable","playable","2021-02-22 16:25:09.000" -"","Shipped","status-playable","playable","2020-11-21 14:22:32.000" -"01000E800FCB4000","Ships","status-playable","playable","2021-06-11 16:14:37.000" -"01007430122D0000","Shiren the Wanderer: The Tower of Fortune and the Dice of Fate","status-playable;nvdec","playable","2022-10-20 11:44:36.000" -"","Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~","cpu;crash;status-boots","boots","2020-09-27 19:01:25.000" -"01000244016BAE00","Shiro0","gpu;status-ingame","ingame","2024-01-13 08:54:39.000" -"","Shoot 1UP DX","status-playable","playable","2020-12-13 12:32:47.000" -"","Shovel Knight: Specter of Torment","status-playable","playable","2020-05-30 08:34:17.000" -"","Shovel Knight: Treasure Trove","status-playable","playable","2021-02-14 18:24:39.000" -"","Shred!2 - Freeride MTB","status-playable","playable","2020-05-30 14:34:09.000" -"","Shu","nvdec;status-playable","playable","2020-05-30 09:08:59.000" -"","Shut Eye","status-playable","playable","2020-07-23 18:08:35.000" -"010044500C182000","Sid Meier's Civilization VI","status-playable;ldn-untested","playable","2024-04-08 16:03:40.000" -"01007FC00B674000","Sigi - A Fart for Melusina","status-playable","playable","2021-02-22 16:46:58.000" -"0100F1400B0D6000","Silence","nvdec;status-playable","playable","2021-06-03 14:46:17.000" -"","Silent World","status-playable","playable","2020-08-28 13:45:13.000" -"010045500DFE2000","Silk","nvdec;status-playable","playable","2021-06-10 15:34:37.000" -"010016D00A964000","SilverStarChess","status-playable","playable","2021-05-06 15:25:57.000" -"0100E8C019B36000","Simona's Requiem","gpu;status-ingame","ingame","2023-02-21 18:29:19.000" -"01006FE010438000","Sin Slayers","status-playable","playable","2022-10-20 11:53:52.000" -"01002820036A8000","Sine Mora EX","gpu;status-ingame;online-broken","ingame","2022-08-12 19:36:18.000" -"","Singled Out","online;status-playable","playable","2020-08-03 13:06:18.000" -"","Sinless","nvdec;status-playable","playable","2020-08-09 20:18:55.000" -"0100E9201410E000","Sir Lovelot","status-playable","playable","2021-04-05 16:21:46.000" -"0100134011E32000","Skate City","status-playable","playable","2022-11-04 11:37:39.000" -"","Skee-Ball","status-playable","playable","2020-11-16 04:44:07.000" -"01001A900F862000","Skelattack","status-playable","playable","2021-06-09 15:26:26.000" -"01008E700F952000","Skelittle: A Giant Party!!","status-playable","playable","2021-06-09 19:08:34.000" -"","Skelly Selest","status-playable","playable","2020-05-30 15:38:18.000" -"","Skies of Fury","status-playable","playable","2020-05-30 16:40:54.000" -"010046B00DE62000","Skullgirls: 2nd Encore","status-playable","playable","2022-09-15 21:21:25.000" -"","Skulls of the Shogun: Bone-a-fide Edition","status-playable","playable","2020-08-31 18:58:12.000" -"0100D7B011654000","Skully","status-playable;nvdec;UE4","playable","2022-10-06 13:52:59.000" -"010083100B5CA000","Sky Force Anniversary","status-playable;online-broken","playable","2022-08-12 20:50:07.000" -"","Sky Force Reloaded","status-playable","playable","2021-01-04 20:06:57.000" -"010003F00CC98000","Sky Gamblers - Afterburner","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2022-08-12 21:04:55.000" -"010093D00AC38000","Sky Gamblers: Storm Raiders","gpu;audio;status-ingame;32-bit","ingame","2022-08-12 21:13:36.000" -"010068200E96E000","Sky Gamblers: Storm Raiders 2","gpu;status-ingame","ingame","2022-09-13 12:24:04.000" -"","Sky Racket","status-playable","playable","2020-09-07 12:22:24.000" -"0100DDB004F30000","Sky Ride","status-playable","playable","2021-02-22 16:53:07.000" -"","Sky Rogue","status-playable","playable","2020-05-30 08:26:28.000" -"0100C52011460000","Sky: Children of the Light","cpu;status-nothing;online-broken","nothing","2023-02-23 10:57:10.000" -"","SkyScrappers","status-playable","playable","2020-05-28 22:11:25.000" -"","SkyTime","slow;status-ingame","ingame","2020-05-30 09:24:51.000" -"010041C01014E000","Skybolt Zack","status-playable","playable","2021-04-12 18:28:00.000" -"","Skylanders Imaginators","crash;services;status-boots","boots","2020-05-30 18:49:18.000" -"01003AD00DEAE000","SlabWell","status-playable","playable","2021-02-22 17:02:51.000" -"","Slain","status-playable","playable","2020-05-29 14:26:16.000" -"0100BB100AF4C000","Slain Back from Hell","status-playable","playable","2022-08-12 23:36:19.000" -"010026300BA4A000","Slay the Spire","status-playable","playable","2023-01-20 15:09:26.000" -"0100501006494000","Slayaway Camp: Butcher's Cut","status-playable;opengl-backend-bug","playable","2022-08-12 23:44:05.000" -"01004E900EDDA000","Slayin 2","gpu;status-ingame","ingame","2024-04-19 16:15:26.000" -"01004AC0081DC000","Sleep Tight","gpu;status-ingame;UE4","ingame","2022-08-13 00:17:32.000" -"0100F4500AA4E000","Slice Dice & Rice","online;status-playable","playable","2021-02-22 17:44:23.000" -"010010D011E1C000","Slide Stars","status-menus;crash","menus","2021-11-25 08:53:43.000" -"","Slime-san","status-playable","playable","2020-05-30 16:15:12.000" -"","Slime-san Superslime Edition","status-playable","playable","2020-05-30 19:08:08.000" -"0100C9100B06A000","SmileBASIC 4","gpu;status-menus","menus","2021-07-29 17:35:59.000" -"0100207007EB2000","Smoke and Sacrifice","status-playable","playable","2022-08-14 12:38:27.000" -"01009790186FE000","Smurfs Kart","status-playable","playable","2023-10-18 00:55:00.000" -"0100F2800D46E000","Snack World The Dungeon Crawl Gold","gpu;slow;status-ingame;nvdec;audout","ingame","2022-05-01 21:12:44.000" -"0100C0F0020E8000","Snake Pass","status-playable;nvdec;UE4","playable","2022-01-03 04:31:52.000" -"010075A00BA14000","Sniper Elite 3 Ultimate Edition","status-playable;ldn-untested","playable","2024-04-18 07:47:49.000" -"010007B010FCC000","Sniper Elite 4","gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug","ingame","2024-06-18 17:53:15.000" -"0100BB000A3AA000","Sniper Elite V2 Remastered","slow;status-ingame;nvdec;online-broken;ldn-untested","ingame","2022-08-14 13:23:13.000" -"0100704000B3A000","Snipperclips","status-playable","playable","2022-12-05 12:44:55.000" -"01008E20047DC000","Snipperclips Plus","status-playable","playable","2023-02-14 20:20:13.000" -"01008DA00CBBA000","Snooker 19","status-playable;nvdec;online-broken;UE4","playable","2022-09-11 17:43:22.000" -"010045300516E000","Snow Moto Racing Freedom","gpu;status-ingame;vulkan-backend-bug","ingame","2022-08-15 16:05:14.000" -"","SnowRunner - 0100FBD13AB6000","services;status-boots;crash","boots","2023-10-07 00:01:16.000" -"0100BE200C34A000","Snowboarding the Next Phase","nvdec;status-playable","playable","2021-02-23 12:56:58.000" -"010017B012AFC000","Soccer Club Life: Playing Manager","gpu;status-ingame","ingame","2022-10-25 11:59:22.000" -"0100B5000E05C000","Soccer Pinball","UE4;gpu;status-ingame","ingame","2021-06-15 20:56:51.000" -"","Soccer Slammers","status-playable","playable","2020-05-30 07:48:14.000" -"010095C00F9DE000","Soccer, Tactics & Glory","gpu;status-ingame","ingame","2022-09-26 17:15:58.000" -"0100590009C38000","SolDivide for Nintendo Switch","32-bit;status-playable","playable","2021-06-09 14:13:03.000" -"010008600D1AC000","Solo: Islands of the Heart","gpu;status-ingame;nvdec","ingame","2022-09-11 17:54:43.000" -"01009EE00E91E000","Some Distant Memory","status-playable","playable","2022-09-15 21:48:19.000" -"01004F401BEBE000","Song of Nunu: A League of Legends Story","status-ingame","ingame","2024-07-12 18:53:44.000" -"0100E5400BF94000","Songbird Symphony","status-playable","playable","2021-02-27 02:44:04.000" -"","Songbringer","status-playable","playable","2020-06-22 10:42:02.000" -"0000000000000000","Sonic 1 (2013)","status-ingame;crash;homebrew","ingame","2024-04-06 18:31:20.000" -"0000000000000000","Sonic 2 (2013)","status-ingame;crash;homebrew","ingame","2024-04-01 16:25:30.000" -"0000000000000000","Sonic A.I.R","status-ingame;homebrew","ingame","2024-04-01 16:25:32.000" -"0000000000000000","Sonic CD","status-ingame;crash;homebrew","ingame","2024-04-01 16:25:31.000" -"010040E0116B8000","Sonic Colors Ultimate [010040E0116B8000]","status-playable","playable","2022-11-12 21:24:26.000" -"01001270012B6000","Sonic Forces","status-playable","playable","2024-07-28 13:11:21.000" -"01004AD014BF0000","Sonic Frontiers","gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug","ingame","2024-09-05 09:18:53.000" -"01009AA000FAA000","Sonic Mania","status-playable","playable","2020-06-08 17:30:57.000" -"01009AA000FAA000","Sonic Mania Plus","status-playable","playable","2022-01-16 04:09:11.000" -"01008F701C074000","Sonic Superstars","gpu;status-ingame;nvdec","ingame","2023-10-28 17:48:07.000" -"010088801C150000","Sonic Superstars Digital Art Book with Mini Digital Soundtrack","status-playable","playable","2024-08-20 13:26:56.000" -"","Soul Axiom Rebooted","nvdec;slow;status-ingame","ingame","2020-09-04 12:41:01.000" -"","Soul Searching","status-playable","playable","2020-07-09 18:39:07.000" -"01008F2005154000","South Park: The Fractured But Whole","slow;status-playable;online-broken","playable","2024-07-08 17:47:28.000" -"","Space Blaze","status-playable","playable","2020-08-30 16:18:05.000" -"","Space Cows","UE4;crash;status-menus","menus","2020-06-15 11:33:20.000" -"010047B010260000","Space Pioneer","status-playable","playable","2022-10-20 12:24:37.000" -"010010A009830000","Space Ribbon","status-playable","playable","2022-08-15 17:17:10.000" -"0000000000000000","SpaceCadetPinball","status-ingame;homebrew","ingame","2024-04-18 19:30:04.000" -"0100D9B0041CE000","Spacecats with Lasers","status-playable","playable","2022-08-15 17:22:44.000" -"","Spaceland","status-playable","playable","2020-11-01 14:31:56.000" -"","Sparkle 2","status-playable","playable","2020-10-19 11:51:39.000" -"01000DC007E90000","Sparkle Unleashed","status-playable","playable","2021-06-03 14:52:15.000" -"","Sparkle ZERO","gpu;slow;status-ingame","ingame","2020-03-23 18:19:18.000" -"01007ED00C032000","Sparklite","status-playable","playable","2022-08-06 11:35:41.000" -"0100E6A009A26000","Spartan","UE4;nvdec;status-playable","playable","2021-03-05 15:53:19.000" -"","Speaking Simulator","status-playable","playable","2020-10-08 13:00:39.000" -"01008B000A5AE000","Spectrum","status-playable","playable","2022-08-16 11:15:59.000" -"0100F18010BA0000","Speed 3: Grand Prix","status-playable;UE4","playable","2022-10-20 12:32:31.000" -"","Speed Brawl","slow;status-playable","playable","2020-09-18 22:08:16.000" -"01000540139F6000","Speed Limit","gpu;status-ingame","ingame","2022-09-02 18:37:40.000" -"010061F013A0E000","Speed Truck Racing","status-playable","playable","2022-10-20 12:57:04.000" -"0100E74007EAC000","Spellspire","status-playable","playable","2022-08-16 11:21:21.000" -"010021F004270000","Spelunker Party!","services;status-boots","boots","2022-08-16 11:25:49.000" -"0100710013ABA000","Spelunky","status-playable","playable","2021-11-20 17:45:03.000" -"0100BD500BA94000","Sphinx and the Cursed Mummy™","gpu;status-ingame;32-bit;opengl","ingame","2024-05-20 06:00:51.000" -"","Spider Solitaire","status-playable","playable","2020-12-16 16:19:30.000" -"010076D0122A8000","Spinch","status-playable","playable","2024-07-12 19:02:10.000" -"01001E40136FE000","Spinny's journey","status-ingame;crash","ingame","2021-11-30 03:39:44.000" -"","Spiral Splatter","status-playable","playable","2020-06-04 14:03:57.000" -"","Spirit Hunter: NG","32-bit;status-playable","playable","2020-12-17 20:38:47.000" -"","Spirit Roots","nvdec;status-playable","playable","2020-07-10 13:33:32.000" -"01005E101122E000","Spirit of the North","status-playable;UE4","playable","2022-09-30 11:40:47.000" -"01009D60080B4000","SpiritSphere DX","status-playable","playable","2021-07-03 23:37:49.000" -"0100BD400DC52000","Spiritfarer","gpu;status-ingame","ingame","2022-10-06 16:31:38.000" -"010042700E3FC000","Spitlings","status-playable;online-broken","playable","2022-10-06 16:42:39.000" -"01003BC0000A0000","Splatoon 2","status-playable;ldn-works;LAN","playable","2024-07-12 19:11:15.000" -"0100C2500FC20000","Splatoon 3","status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug","playable","2024-08-04 23:49:11.000" -"0100BA0018500000","Splatoon 3: Splatfest World Premiere","gpu;status-ingame;online-broken;demo","ingame","2022-09-19 03:17:12.000" -"01009FB0172F4000","SpongeBob SquarePants The Cosmic Shake","gpu;status-ingame;UE4","ingame","2023-08-01 19:29:53.000" -"010062800D39C000","SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated","status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug","playable","2023-08-01 19:29:34.000" -"010097C01336A000","Spooky Chase","status-playable","playable","2022-11-04 12:17:44.000" -"0100C6100D75E000","Spooky Ghosts Dot Com","status-playable","playable","2021-06-15 15:16:11.000" -"0100DE9005170000","Sports Party","nvdec;status-playable","playable","2021-03-05 13:40:42.000" -"0100E04009BD4000","Spot The Difference","status-playable","playable","2022-08-16 11:49:52.000" -"010052100D1B4000","Spot the Differences: Party!","status-playable","playable","2022-08-16 11:55:26.000" -"01000E6015350000","Spy Alarm","services;status-ingame","ingame","2022-12-09 10:12:51.000" -"01005D701264A000","SpyHack","status-playable","playable","2021-04-15 10:53:51.000" -"","Spyro Reignited Trilogy","Needs More Attention;UE4;crash;gpu;nvdec;status-menus","menus","2021-01-22 13:01:56.000" -"010077B00E046000","Spyro Reignited Trilogy","status-playable;nvdec;UE4","playable","2022-09-11 18:38:33.000" -"","Squeakers","status-playable","playable","2020-12-13 12:13:05.000" -"","Squidgies Takeover","status-playable","playable","2020-07-20 22:28:08.000" -"","Squidlit","status-playable","playable","2020-08-06 12:38:32.000" -"","Star Renegades","nvdec;status-playable","playable","2020-12-11 12:19:23.000" -"","Star Story: The Horizon Escape","status-playable","playable","2020-08-11 22:31:38.000" -"01009DF015776000","Star Trek Prodigy: Supernova","status-playable;nvdec;UE4;opengl-backend-bug","playable","2022-10-14 10:18:50.000" -"0100854015868000","Star Wars - Knights Of The Old Republic","gpu;deadlock;status-boots","boots","2024-02-12 10:13:51.000" -"01008CA00FAE8000","Star Wars Jedi Knight: Jedi Academy","gpu;status-boots","boots","2021-06-16 12:35:30.000" -"0100FA10115F8000","Star Wars: Republic Commando","gpu;status-ingame;32-bit","ingame","2023-10-31 15:57:17.000" -"01006DA00DEAC000","Star Wars™ Pinball","status-playable;online-broken","playable","2022-09-11 18:53:31.000" -"01005EB00EA10000","Star-Crossed Myth - The Department of Wishes","gpu;status-ingame","ingame","2021-06-04 19:34:36.000" -"0100E6B0115FC000","Star99","status-menus;online","menus","2021-11-26 14:18:51.000" -"01002100137BA000","Stardash","status-playable","playable","2021-01-21 16:31:19.000" -"0100E65002BB8000","Stardew Valley","status-playable;online-broken;ldn-untested","playable","2024-02-14 03:11:19.000" -"01002CC003FE6000","Starlink: Battle for Atlas","services-horizon;status-nothing;crash;Needs Update","nothing","2024-05-05 17:25:11.000" -"","Starlit Adventures Golden Stars","status-playable","playable","2020-11-21 12:14:43.000" -"","Starship Avenger Operation: Take Back Earth","status-playable","playable","2021-01-12 15:52:55.000" -"","State of Anarchy: Master of Mayhem","nvdec;status-playable","playable","2021-01-12 19:00:05.000" -"","State of Mind","UE4;crash;status-boots","boots","2020-06-22 22:17:50.000" -"01008010118CC000","Steam Prison","nvdec;status-playable","playable","2021-04-01 15:34:11.000" -"0100AE100DAFA000","Steam Tactics","status-playable","playable","2022-10-06 16:53:45.000" -"01009320084A4000","SteamWorld Dig","status-playable","playable","2024-08-19 12:12:23.000" -"0100CA9002322000","SteamWorld Dig 2","status-playable","playable","2022-12-21 19:25:42.000" -"","SteamWorld Quest","nvdec;status-playable","playable","2020-11-09 13:10:04.000" -"","Steamburg","status-playable","playable","2021-01-13 08:42:01.000" -"01001C6014772000","Steel Assault","status-playable","playable","2022-12-06 14:48:30.000" -"","Steins;Gate Elite","status-playable","playable","2020-08-04 07:33:32.000" -"01002DE01043E000","Stela","UE4;status-playable","playable","2021-06-15 13:28:34.000" -"01005A700C954000","Stellar Interface","status-playable","playable","2022-10-20 13:44:33.000" -"","Steredenn","status-playable","playable","2021-01-13 09:19:42.000" -"0100AE0006474000","Stern Pinball Arcade","status-playable","playable","2022-08-16 14:24:41.000" -"","Stikbold! A Dodgeball Adventure DELUXE","status-playable","playable","2021-01-11 20:12:54.000" -"010077B014518000","Stitchy in Tooki Trouble","status-playable","playable","2021-05-06 16:25:53.000" -"010074400F6A8000","Stories Untold","status-playable;nvdec","playable","2022-12-22 01:08:46.000" -"010040D00BCF4000","Storm Boy","status-playable","playable","2022-10-20 14:15:06.000" -"0100B2300B932000","Storm in a Teacup","gpu;status-ingame","ingame","2021-11-06 02:03:19.000" -"0100ED400EEC2000","Story of Seasons: Friends of Mineral Town","status-playable","playable","2022-10-03 16:40:31.000" -"","Story of a Gladiator","status-playable","playable","2020-07-29 15:08:18.000" -"010078D00E8F4000","Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000","slow;status-playable;nvdec;UE4","playable","2022-09-16 11:58:38.000" -"01000A6013F86000","Strange Field Football","status-playable","playable","2022-11-04 12:25:57.000" -"","Stranger Things 3: The Game","status-playable","playable","2021-01-11 17:44:09.000" -"0100D7E011C64000","Strawberry Vinegar","status-playable;nvdec","playable","2022-12-05 16:25:40.000" -"010075101EF84000","Stray","status-ingame;crash","ingame","2025-01-07 04:03:00.000" -"0100024008310000","Street Fighter 30th Anniversary Collection","status-playable;online-broken;ldn-partial","playable","2022-08-20 16:50:47.000" -"010012400D202000","Street Outlaws: The List","nvdec;status-playable","playable","2021-06-11 12:15:32.000" -"","Street Power Soccer","UE4;crash;status-boots","boots","2020-11-21 12:28:57.000" -"","Streets of Rage 4","nvdec;online;status-playable","playable","2020-07-07 21:21:22.000" -"0100BDE012928000","Strife: Veteran Edition","gpu;status-ingame","ingame","2022-01-15 05:10:42.000" -"010039100DACC000","Strike Force - War on Terror","status-menus;crash;Needs Update","menus","2021-11-24 08:08:20.000" -"010072500D52E000","Strike Suit Zero: Director's Cut","crash;status-boots","boots","2021-04-23 17:15:14.000" -"","StrikeForce Kitty","nvdec;status-playable","playable","2020-07-29 16:22:15.000" -"","Struggling","status-playable","playable","2020-10-15 20:37:03.000" -"0100AF000B4AE000","Stunt Kite Party","nvdec;status-playable","playable","2021-01-25 17:16:56.000" -"0100E6400BCE8000","Sub Level Zero: Redux","status-playable","playable","2022-09-16 12:30:03.000" -"","Subarashiki Kono Sekai -Final Remix-","services;slow;status-ingame","ingame","2020-02-10 16:21:51.000" -"010001400E474000","Subdivision Infinity DX","UE4;crash;status-boots","boots","2021-03-03 14:26:46.000" -"0100EDA00D866000","Submerged","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-08-16 15:17:01.000" -"0100429011144000","Subnautica","status-playable;vulkan-backend-bug","playable","2022-11-04 13:07:29.000" -"010014C011146000","Subnautica Below Zero","status-playable","playable","2022-12-23 14:15:13.000" -"0100BF9012AC6000","Suguru Nature","crash;status-ingame","ingame","2021-07-29 11:36:27.000" -"01005CD00A2A2000","Suicide Guy","status-playable","playable","2021-01-26 13:13:54.000" -"0100DE000C2E4000","Suicide Guy: Sleepin' Deeply","status-ingame;Needs More Attention","ingame","2022-09-20 23:45:25.000" -"01003D50126A4000","Sumire","status-playable","playable","2022-11-12 13:40:43.000" -"01004E500DB9E000","Summer Sweetheart","status-playable;nvdec","playable","2022-09-16 12:51:46.000" -"0100A130109B2000","Summer in Mara","nvdec;status-playable","playable","2021-03-06 14:10:38.000" -"0100BFE014476000","Sunblaze","status-playable","playable","2022-11-12 13:59:23.000" -"01002D3007962000","Sundered: Eldritch Edition","gpu;status-ingame","ingame","2021-06-07 11:46:00.000" -"0100F7000464A000","Super Beat Sports","status-playable;ldn-untested","playable","2022-08-16 16:05:50.000" -"","Super Blood Hockey","status-playable","playable","2020-12-11 20:01:41.000" -"01007AD00013E000","Super Bomberman R","status-playable;nvdec;online-broken;ldn-works","playable","2022-08-16 19:19:14.000" -"0100D9B00DB5E000","Super Cane Magic ZERO","status-playable","playable","2022-09-12 15:33:46.000" -"010065F004E5E000","Super Chariot","status-playable","playable","2021-06-03 13:19:01.000" -"010023100B19A000","Super Dungeon Tactics","status-playable","playable","2022-10-06 17:40:40.000" -"010056800B534000","Super Inefficient Golf","status-playable;UE4","playable","2022-08-17 15:53:45.000" -"","Super Jumpy Ball","status-playable","playable","2020-07-04 18:40:36.000" -"0100196009998000","Super Kickers League","status-playable","playable","2021-01-26 13:36:48.000" -"01003FB00C5A8000","Super Kirby Clash","status-playable;ldn-works","playable","2024-07-30 18:21:55.000" -"010000D00F81A000","Super Korotama","status-playable","playable","2021-06-06 19:06:22.000" -"01003E300FCAE000","Super Loop Drive","status-playable;nvdec;UE4","playable","2022-09-22 10:58:05.000" -"010049900F546000","Super Mario 3D All-Stars","services-horizon;slow;status-ingame;vulkan;amd-vendor-bug","ingame","2024-05-07 02:38:16.000" -"010028600EBDA000","Super Mario 3D World + Bowser's Fury","status-playable;ldn-works","playable","2024-07-31 10:45:37.000" -"054507E0B7552000","Super Mario 64","status-ingame;homebrew","ingame","2024-03-20 16:57:27.000" -"0100277011F1A000","Super Mario Bros. 35","status-menus;online-broken","menus","2022-08-07 16:27:25.000" -"010015100B514000","Super Mario Bros. Wonder","status-playable;amd-vendor-bug","playable","2024-09-06 13:21:21.000" -"01009B90006DC000","Super Mario Maker 2","status-playable;online-broken;ldn-broken","playable","2024-08-25 11:05:19.000" -"0100000000010000","Super Mario Odyssey","status-playable;nvdec;intel-vendor-bug;mac-bug","playable","2024-08-25 01:32:34.000" -"010036B0034E4000","Super Mario Party","gpu;status-ingame;Needs Update;ldn-works","ingame","2024-06-21 05:10:16.000" -"0100BC0018138000","Super Mario RPG","gpu;audio;status-ingame;nvdec","ingame","2024-06-19 17:43:42.000" -"0000000000000000","Super Mario World","status-boots;homebrew","boots","2024-06-13 01:40:31.000" -"","Super Meat Boy","services;status-playable","playable","2020-04-02 23:10:07.000" -"01009C200D60E000","Super Meat Boy Forever","gpu;status-boots","boots","2021-04-26 14:25:39.000" -"","Super Mega Space Blaster Special Turbo","online;status-playable","playable","2020-08-06 12:13:25.000" -"010031F019294000","Super Monkey Ball Banana Rumble","status-playable","playable","2024-06-28 10:39:18.000" -"0100B2A00E1E0000","Super Monkey Ball: Banana Blitz HD","status-playable;online-broken","playable","2022-09-16 13:16:25.000" -"","Super Mutant Alien Assault","status-playable","playable","2020-06-07 23:32:45.000" -"01004D600AC14000","Super Neptunia RPG","status-playable;nvdec","playable","2022-08-17 16:38:52.000" -"","Super Nintendo Entertainment System - Nintendo Switch Online","status-playable","playable","2021-01-05 00:29:48.000" -"0100284007D6C000","Super One More Jump","status-playable","playable","2022-08-17 16:47:47.000" -"01001F90122B2000","Super Punch Patrol","status-playable","playable","2024-07-12 19:49:02.000" -"0100331005E8E000","Super Putty Squad","gpu;status-ingame;32-bit","ingame","2024-04-29 15:51:54.000" -"","Super Saurio Fly","nvdec;status-playable","playable","2020-08-06 13:12:14.000" -"","Super Skelemania","status-playable","playable","2020-06-07 22:59:50.000" -"01006A800016E000","Super Smash Bros. Ultimate","gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug","ingame","2024-09-14 23:05:21.000" -"0100D61012270000","Super Soccer Blast","gpu;status-ingame","ingame","2022-02-16 08:39:12.000" -"0100A9300A4AE000","Super Sportmatchen","status-playable","playable","2022-08-19 12:34:40.000" -"0100FB400F54E000","Super Street: Racer","status-playable;UE4","playable","2022-09-16 13:43:14.000" -"","Super Tennis Blast - 01000500DB50000","status-playable","playable","2022-08-19 16:20:48.000" -"0100C6800D770000","Super Toy Cars 2","gpu;regression;status-ingame","ingame","2021-03-02 20:15:15.000" -"010035B00B3F0000","Super Volley Blast","status-playable","playable","2022-08-19 18:14:40.000" -"0100630010252000","SuperEpic: The Entertainment War","status-playable","playable","2022-10-13 23:02:48.000" -"0100FF60051E2000","Superbeat: Xonic EX","status-ingame;crash;nvdec","ingame","2022-08-19 18:54:40.000" -"01001A500E8B4000","Superhot","status-playable","playable","2021-05-05 19:51:30.000" -"","Superliminal","status-playable","playable","2020-09-03 13:20:50.000" -"0100C01012654000","Supermarket Shriek","status-playable","playable","2022-10-13 23:19:20.000" -"0100A6E01201C000","Supraland","status-playable;nvdec;UE4;opengl-backend-bug","playable","2022-10-14 09:49:11.000" -"010029A00AEB0000","Survive! Mr. Cube","status-playable","playable","2022-10-20 14:44:47.000" -"","Sushi Striker: The Way of Sushido","nvdec;status-playable","playable","2020-06-26 20:49:11.000" -"0100D6D00EC2C000","Sweet Witches","status-playable;nvdec","playable","2022-10-20 14:56:37.000" -"010049D00C8B0000","Swimsanity!","status-menus;online","menus","2021-11-26 14:27:16.000" -"","Sword of the Guardian","status-playable","playable","2020-07-16 12:24:39.000" -"0100E4701355C000","Sword of the Necromancer","status-ingame;crash","ingame","2022-12-10 01:28:39.000" -"01004BB00421E000","Syberia 1 & 2","status-playable","playable","2021-12-24 12:06:25.000" -"010028C003FD6000","Syberia 2","gpu;status-ingame","ingame","2022-08-24 12:43:03.000" -"0100CBE004E6C000","Syberia 3","nvdec;status-playable","playable","2021-01-25 16:15:12.000" -"","Sydney Hunter and the Curse of the Mayan","status-playable","playable","2020-06-15 12:15:57.000" -"01009E700F448000","Synergia","status-playable","playable","2021-04-06 17:58:04.000" -"","TENGAI for Nintendo Switch","32-bit;status-playable","playable","2020-11-25 19:52:26.000" -"010070C00FB56000","TERROR SQUID","status-playable;online-broken","playable","2023-10-30 22:29:29.000" -"010043700EB68000","TERRORHYTHM (TRRT)","status-playable","playable","2021-02-27 13:18:14.000" -"","TETRA for Nintendo Switch","status-playable","playable","2020-06-26 20:49:55.000" -"010040600C5CE000","TETRIS 99","gpu;status-ingame;online-broken;ldn-untested","ingame","2024-05-02 16:36:41.000" -"01003b300e4aa000","THE GRISAIA TRILOGY","status-playable","playable","2021-01-31 15:53:59.000" -"0100AC800D022000","THE LAST REMNANT Remastered","status-playable;nvdec;UE4","playable","2023-02-09 17:24:44.000" -"01005E5013862000","THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]","status-nothing;crash","nothing","2021-09-30 14:41:07.000" -"01001FB00E386000","THE NINJA SAVIORS Return of the Warriors","online;status-playable","playable","2021-03-25 23:48:07.000" -"010024201834A000","THEATRHYTHM FINAL BAR LINE","status-playable","playable","2023-02-19 19:58:57.000" -"010081B01777C000","THEATRHYTHM FINAL BAR LINE","status-ingame;Incomplete","ingame","2024-08-05 14:24:55.000" -"","THOTH","status-playable","playable","2020-08-05 18:35:28.000" -"010074800741A000","TINY METAL","UE4;gpu;nvdec;status-ingame","ingame","2021-03-05 17:11:57.000" -"0100B5E011920000","TOHU","slow;status-playable","playable","2021-02-08 15:40:44.000" -"01003E500F962000","TOKYO DARK - REMEMBRANCE -","nvdec;status-playable","playable","2021-06-10 20:09:49.000" -"0100CC00102B4000","TONY HAWK'S™ PRO SKATER™ 1 + 2","gpu;status-ingame;Needs Update","ingame","2024-09-24 08:18:14.000" -"01007AF011732000","TORICKY-S","deadlock;status-menus","menus","2021-11-25 08:53:36.000" -"01005E500E528000","TRANSFORMERS: BATTLEGROUNDS","online;status-playable","playable","2021-06-17 18:08:19.000" -"0100CC80140F8000","TRIANGLE STRATEGY","gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug","ingame","2024-09-25 20:48:37.000" -"","TT Isle of Man","nvdec;status-playable","playable","2020-06-22 12:25:13.000" -"010000400F582000","TT Isle of Man 2","gpu;status-ingame;nvdec;online-broken","ingame","2022-09-30 22:13:05.000" -"","TTV2","status-playable","playable","2020-11-27 13:21:36.000" -"","TY the Tasmanian Tiger","32-bit;crash;nvdec;status-menus","menus","2020-12-17 21:15:00.000" -"","Table Top Racing World Tour Nitro Edition","status-playable","playable","2020-04-05 23:21:30.000" -"01000F20083A8000","Tactical Mind","status-playable","playable","2021-01-25 18:05:00.000" -"","Tactical Mind 2","status-playable","playable","2020-07-01 23:11:07.000" -"0100E12013C1A000","Tactics Ogre Reborn","status-playable;vulkan-backend-bug","playable","2024-04-09 06:21:35.000" -"01007C7006AEE000","Tactics V: ""Obsidian Brigade","status-playable","playable","2021-02-28 15:09:42.000" -"0100346017304000","Taiko Risshiden V DX","status-nothing;crash","nothing","2022-06-06 16:25:31.000" -"","Taiko no Tatsujin Rhythmic Adventure Pack","status-playable","playable","2020-12-03 07:28:26.000" -"01002C000B552000","Taiko no Tatsujin: Drum 'n' Fun!","status-playable;online-broken;ldn-broken","playable","2023-05-20 15:10:12.000" -"0100BCA0135A0000","Taiko no Tatsujin: Rhythm Festival","status-playable","playable","2023-11-13 13:16:34.000" -"010040A00EA26000","Taimumari: Complete Edition","status-playable","playable","2022-12-06 13:34:49.000" -"0100F0C011A68000","Tales from the Borderlands","status-playable;nvdec","playable","2022-10-25 18:44:14.000" -"01002C0008E52000","Tales of Vesperia: Definitive Edition","status-playable","playable","2024-09-28 03:20:47.000" -"0100408007078000","Tales of the Tiny Planet","status-playable","playable","2021-01-25 15:47:41.000" -"010012800EE3E000","Tamashii","status-playable","playable","2021-06-10 15:26:20.000" -"010008A0128C4000","Tamiku","gpu;status-ingame","ingame","2021-06-15 20:06:55.000" -"","Tangledeep","crash;status-boots","boots","2021-01-05 04:08:41.000" -"01007DB010D2C000","TaniNani","crash;kernel;status-nothing","nothing","2021-04-08 03:06:44.000" -"","Tank Mechanic Simulator","status-playable","playable","2020-12-11 15:10:45.000" -"01007A601318C000","Tanuki Justice","status-playable;opengl","playable","2023-02-21 18:28:10.000" -"01004DF007564000","Tanzia","status-playable","playable","2021-06-07 11:10:25.000" -"","Task Force Kampas","status-playable","playable","2020-11-30 14:44:15.000" -"0100B76011DAA000","Taxi Chaos","slow;status-playable;online-broken;UE4","playable","2022-10-25 19:13:00.000" -"","Tcheco in the Castle of Lucio","status-playable","playable","2020-06-27 13:35:43.000" -"010092B0091D0000","Team Sonic Racing","status-playable;online-broken;ldn-works","playable","2024-02-05 15:05:27.000" -"0100FE701475A000","Teenage Mutant Ninja Turtles: Shredder's Revenge","deadlock;status-boots;crash","boots","2024-09-28 09:31:39.000" -"01005CF01E784000","Teenage Mutant Ninja Turtles: Splintered Fate","status-playable","playable","2024-08-03 13:50:42.000" -"0100FDB0154E4000","Teenage Mutant Ninja Turtles: The Cowabunga Collection","status-playable","playable","2024-01-22 19:39:04.000" -"","Telling Lies","status-playable","playable","2020-10-23 21:14:51.000" -"0100C8B012DEA000","Temtem","status-menus;online-broken","menus","2022-12-17 17:36:11.000" -"","Tennis","status-playable","playable","2020-06-01 20:50:36.000" -"0100092006814000","Tennis World Tour","status-playable;online-broken","playable","2022-08-22 14:27:10.000" -"0100950012F66000","Tennis World Tour 2","status-playable;online-broken","playable","2022-10-14 10:43:16.000" -"01002970080AA000","Tennis in the Face","status-playable","playable","2022-08-22 14:10:54.000" -"0100E46006708000","Terraria","status-playable;online-broken","playable","2022-09-12 16:14:57.000" -"0100FBC007EAE000","Tesla vs Lovecraft","status-playable","playable","2023-11-21 06:19:36.000" -"01005C8005F34000","Teslagrad","status-playable","playable","2021-02-23 14:41:02.000" -"01006F701507A000","Tested on Humans: Escape Room","status-playable","playable","2022-11-12 14:42:52.000" -"","Testra's Escape","status-playable","playable","2020-06-03 18:21:14.000" -"","Tetsumo Party","status-playable","playable","2020-06-09 22:39:55.000" -"01008ED0087A4000","The Adventure Pals","status-playable","playable","2022-08-22 14:48:52.000" -"","The Adventures of 00 Dilly","status-playable","playable","2020-12-30 19:32:29.000" -"","The Adventures of Elena Temple","status-playable","playable","2020-06-03 23:15:35.000" -"010045A00E038000","The Alliance Alive HD Remastered","nvdec;status-playable","playable","2021-03-07 15:43:45.000" -"","The Almost Gone","status-playable","playable","2020-07-05 12:33:07.000" -"0100CD500DDAE000","The Bard's Tale ARPG: Remastered and Resnarkled","gpu;status-ingame;nvdec;online-working","ingame","2024-07-18 12:52:01.000" -"01001E50141BC000","The Battle Cats Unite!","deadlock;status-ingame","ingame","2021-12-14 21:38:34.000" -"010089600E66A000","The Big Journey","status-playable","playable","2022-09-16 14:03:08.000" -"010021C000B6A000","The Binding of Isaac: Afterbirth+","status-playable","playable","2021-04-26 14:11:56.000" -"","The Bluecoats: North & South","nvdec;status-playable","playable","2020-12-10 21:22:29.000" -"010062500BFC0000","The Book of Unwritten Tales 2","status-playable","playable","2021-06-09 14:42:53.000" -"","The Bridge","status-playable","playable","2020-06-03 13:53:26.000" -"","The Bug Butcher","status-playable","playable","2020-06-03 12:02:04.000" -"01001B40086E2000","The Bunker","status-playable;nvdec","playable","2022-09-16 14:24:05.000" -"","The Caligula Effect: Overdose","UE4;gpu;status-ingame","ingame","2021-01-04 11:07:50.000" -"010066800E9F8000","The Childs Sight","status-playable","playable","2021-06-11 19:04:56.000" -"","The Coma 2: Vicious Sisters","gpu;status-ingame","ingame","2020-06-20 12:51:51.000" -"","The Coma: Recut","status-playable","playable","2020-06-03 15:11:23.000" -"01004170113D4000","The Complex","status-playable;nvdec","playable","2022-09-28 14:35:41.000" -"01000F20102AC000","The Copper Canyon Dixie Dash","status-playable;UE4","playable","2022-09-29 11:42:29.000" -"01000850037C0000","The Count Lucanor","status-playable;nvdec","playable","2022-08-22 15:26:37.000" -"0100EBA01548E000","The Cruel King and the Great Hero","gpu;services;status-ingame","ingame","2022-12-02 07:02:08.000" -"","The Dark Crystal","status-playable","playable","2020-08-11 13:43:41.000" -"","The Darkside Detective","status-playable","playable","2020-06-03 22:16:18.000" -"01000A10041EA000","The Elder Scrolls V: Skyrim","gpu;status-ingame;crash","ingame","2024-07-14 03:21:31.000" -"","The End is Nigh","status-playable","playable","2020-06-01 11:26:45.000" -"","The Escapists 2","nvdec;status-playable","playable","2020-09-24 12:31:31.000" -"01001B700BA7C000","The Escapists: Complete Edition","status-playable","playable","2021-02-24 17:50:31.000" -"0100C2E0129A6000","The Executioner","nvdec;status-playable","playable","2021-01-23 00:31:28.000" -"01006050114D4000","The Experiment: Escape Room","gpu;status-ingame","ingame","2022-09-30 13:20:35.000" -"0100B5900DFB2000","The Eyes of Ara","status-playable","playable","2022-09-16 14:44:06.000" -"","The Fall","gpu;status-ingame","ingame","2020-05-31 23:31:16.000" -"","The Fall Part 2: Unbound","status-playable","playable","2021-11-06 02:18:08.000" -"0100CDC00789E000","The Final Station","status-playable;nvdec","playable","2022-08-22 15:54:39.000" -"010098800A1E4000","The First Tree","status-playable","playable","2021-02-24 15:51:05.000" -"0100C38004DCC000","The Flame in the Flood: Complete Edition","gpu;status-ingame;nvdec;UE4","ingame","2022-08-22 16:23:49.000" -"","The Forbidden Arts - 01007700D4AC000","status-playable","playable","2021-01-26 16:26:24.000" -"01006350148DA000","The Gardener and the Wild Vines","gpu;status-ingame","ingame","2024-04-29 16:32:10.000" -"0100B13007A6A000","The Gardens Between","status-playable","playable","2021-01-29 16:16:53.000" -"010036E00FB20000","The Great Ace Attorney Chronicles","status-playable","playable","2023-06-22 21:26:29.000" -"","The Great Perhaps","status-playable","playable","2020-09-02 15:57:04.000" -"","The Hong Kong Massacre","crash;status-ingame","ingame","2021-01-21 12:06:56.000" -"","The House of Da Vinci","status-playable","playable","2021-01-05 14:17:19.000" -"","The House of Da Vinci 2","status-playable","playable","2020-10-23 20:47:17.000" -"01008940086E0000","The Infectious Madness of Doctor Dekker","status-playable;nvdec","playable","2022-08-22 16:45:01.000" -"","The Inner World","nvdec;status-playable","playable","2020-06-03 21:22:29.000" -"","The Inner World - The Last Wind Monk","nvdec;status-playable","playable","2020-11-16 13:09:40.000" -"0100AE5003EE6000","The Jackbox Party Pack","status-playable;online-working","playable","2023-05-28 09:28:40.000" -"010015D003EE4000","The Jackbox Party Pack 2","status-playable;online-working","playable","2022-08-22 18:23:40.000" -"0100CC80013D6000","The Jackbox Party Pack 3","slow;status-playable;online-working","playable","2022-08-22 18:41:06.000" -"0100E1F003EE8000","The Jackbox Party Pack 4","status-playable;online-working","playable","2022-08-22 18:56:34.000" -"010052C00B184000","The Journey Down: Chapter One","nvdec;status-playable","playable","2021-02-24 13:32:41.000" -"01006BC00B188000","The Journey Down: Chapter Three","nvdec;status-playable","playable","2021-02-24 13:45:27.000" -"","The Journey Down: Chapter Two","nvdec;status-playable","playable","2021-02-24 13:32:13.000" -"010020500BD98000","The King's Bird","status-playable","playable","2022-08-22 19:07:46.000" -"010031B00DB34000","The Knight & the Dragon","gpu;status-ingame","ingame","2023-08-14 10:31:43.000" -"0100A4400BE74000","The LEGO Movie 2 - Videogame","status-playable","playable","2023-03-01 11:23:37.000" -"01007FC00206E000","The LEGO NINJAGO Movie Video Game","status-nothing;crash","nothing","2022-08-22 19:12:53.000" -"","The Language of Love","Needs Update;crash;status-nothing","nothing","2020-12-03 17:54:00.000" -"010079C017F5E000","The Lara Croft Collection","services-horizon;deadlock;status-nothing","nothing","2024-07-12 22:45:51.000" -"0100449011506000","The Last Campfire","status-playable","playable","2022-10-20 16:44:19.000" -"0100AAD011592000","The Last Dead End","gpu;status-ingame;UE4","ingame","2022-10-20 16:59:44.000" -"","The Legend of Dark Witch","status-playable","playable","2020-07-12 15:18:33.000" -"01001920156C2000","The Legend of Heroes: Trails from Zero","gpu;status-ingame;mac-bug","ingame","2024-09-14 21:41:41.000" -"","The Legend of Heroes: Trails of Cold Steel III","status-playable","playable","2020-12-16 10:59:18.000" -"01009B101044C000","The Legend of Heroes: Trails of Cold Steel III Demo","demo;nvdec;status-playable","playable","2021-04-23 01:07:32.000" -"0100D3C010DE8000","The Legend of Heroes: Trails of Cold Steel IV","nvdec;status-playable","playable","2021-04-23 14:01:05.000" -"01008CF01BAAC000","The Legend of Zelda Echoes of Wisdom","status-playable;nvdec;ASTC;intel-vendor-bug","playable","2024-10-01 14:11:01.000" -"01007EF00011E000","The Legend of Zelda: Breath of the Wild","gpu;status-ingame;amd-vendor-bug;mac-bug","ingame","2024-09-23 19:35:46.000" -"0100509005AF2000","The Legend of Zelda: Breath of the Wild Demo","status-ingame;demo","ingame","2022-12-24 05:02:58.000" -"01006BB00C6F0000","The Legend of Zelda: Link's Awakening","gpu;status-ingame;nvdec;mac-bug","ingame","2023-08-09 17:37:40.000" -"01002DA013484000","The Legend of Zelda: Skyward Sword HD","gpu;status-ingame","ingame","2024-06-14 16:48:29.000" -"0100F2C0115B6000","The Legend of Zelda: Tears of the Kingdom","gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug","ingame","2024-08-24 12:38:30.000" -"010064B00B95C000","The Liar Princess and the Blind Prince","audio;slow;status-playable","playable","2020-06-08 21:23:28.000" -"0100735004898000","The Lion's Song","status-playable","playable","2021-06-09 15:07:16.000" -"0100A5000D590000","The Little Acre","nvdec;status-playable","playable","2021-03-02 20:22:27.000" -"01007A700A87C000","The Long Dark","status-playable","playable","2021-02-21 14:19:52.000" -"010052B003A38000","The Long Reach","nvdec;status-playable","playable","2021-02-24 14:09:48.000" -"","The Long Return","slow;status-playable","playable","2020-12-10 21:05:10.000" -"0100CE1004E72000","The Longest Five Minutes","gpu;status-boots","boots","2023-02-19 18:33:11.000" -"0100F3D0122C2000","The Longing","gpu;status-ingame","ingame","2022-11-12 15:00:58.000" -"010085A00C5E8000","The Lord of the Rings: Adventure Card Game","status-menus;online-broken","menus","2022-09-16 15:19:32.000" -"01008A000A404000","The Lost Child","nvdec;status-playable","playable","2021-02-23 15:44:20.000" -"0100BAB00A116000","The Low Road","status-playable","playable","2021-02-26 13:23:22.000" -"0100F1B00B456000","The MISSING: J.J. Macfield and the Island of Memories","status-playable","playable","2022-08-22 19:36:18.000" -"","The Mahjong","Needs Update;crash;services;status-nothing","nothing","2021-04-01 22:06:22.000" -"","The Messenger","status-playable","playable","2020-03-22 13:51:37.000" -"0100DEC00B2BC000","The Midnight Sanctuary","status-playable;nvdec;UE4;vulkan-backend-bug","playable","2022-10-03 17:17:32.000" -"010033300AC1A000","The Mooseman","status-playable","playable","2021-02-24 12:58:57.000" -"0100496004194000","The Mummy Demastered","status-playable","playable","2021-02-23 13:11:27.000" -"","The Mystery of the Hudson Case","status-playable","playable","2020-06-01 11:03:36.000" -"01000CF0084BC000","The Next Penelope","status-playable","playable","2021-01-29 16:26:11.000" -"0100B080184BC000","The Oregon Trail","gpu;status-ingame","ingame","2022-11-25 16:11:49.000" -"0100B0101265C000","The Otterman Empire","UE4;gpu;status-ingame","ingame","2021-06-17 12:27:15.000" -"01000BC01801A000","The Outbound Ghost","status-nothing","nothing","2024-03-02 17:10:58.000" -"0100626011656000","The Outer Worlds","gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug","ingame","2022-10-03 17:55:32.000" -"","The Park","UE4;crash;gpu;status-ingame","ingame","2020-12-18 12:50:07.000" -"010050101127C000","The Persistence","nvdec;status-playable","playable","2021-06-06 19:15:40.000" -"0100CD300880E000","The Pinball Arcade","status-playable;online-broken","playable","2022-08-22 19:49:46.000" -"01006BD018B54000","The Plucky Squire","status-ingame;crash","ingame","2024-09-27 22:32:33.000" -"0100E6A00B960000","The Princess Guide","status-playable","playable","2021-02-24 14:23:34.000" -"010058A00BF1C000","The Raven Remastered","status-playable;nvdec","playable","2022-08-22 20:02:47.000" -"","The Red Strings Club","status-playable","playable","2020-06-01 10:51:18.000" -"010079400BEE0000","The Room","status-playable","playable","2021-04-14 18:57:05.000" -"010033100EE12000","The Ryuo's Work is Never Done!","status-playable","playable","2022-03-29 00:35:37.000" -"01002BA00C7CE000","The Savior's Gang","gpu;status-ingame;nvdec;UE4","ingame","2022-09-21 12:37:48.000" -"0100F3200E7CA000","The Settlers: New Allies","deadlock;status-nothing","nothing","2023-10-25 00:18:05.000" -"","The Sexy Brutale","status-playable","playable","2021-01-06 17:48:28.000" -"","The Shapeshifting Detective","nvdec;status-playable","playable","2021-01-10 13:10:49.000" -"010028D00BA1A000","The Sinking City","status-playable;nvdec;UE4","playable","2022-09-12 16:41:55.000" -"010041C00A68C000","The Spectrum Retreat","status-playable","playable","2022-10-03 18:52:40.000" -"010029300E5C4000","The Stanley Parable: Ultra Deluxe","gpu;status-ingame","ingame","2024-07-12 23:18:26.000" -"010007F00AF56000","The Station","status-playable","playable","2022-09-28 18:15:27.000" -"0100AA400A238000","The Stretchers","status-playable;nvdec;UE4","playable","2022-09-16 15:40:58.000" -"","The Survivalists","status-playable","playable","2020-10-27 15:51:13.000" -"010040D00B7CE000","The Swindle","status-playable;nvdec","playable","2022-08-22 20:53:52.000" -"","The Swords of Ditto","slow;status-ingame","ingame","2020-12-06 00:13:12.000" -"01009B300D76A000","The Tiny Bang Story","status-playable","playable","2021-03-05 15:39:05.000" -"0100C3300D8C4000","The Touryst","status-ingame;crash","ingame","2023-08-22 01:32:38.000" -"010047300EBA6000","The Tower of Beatrice","status-playable","playable","2022-09-12 16:51:42.000" -"010058000A576000","The Town of Light","gpu;status-playable","playable","2022-09-21 12:51:34.000" -"0100B0E0086F6000","The Trail: Frontier Challenge","slow;status-playable","playable","2022-08-23 15:10:51.000" -"0100EA100F516000","The Turing Test","status-playable;nvdec","playable","2022-09-21 13:24:07.000" -"010064E00ECBC000","The Unicorn Princess","status-playable","playable","2022-09-16 16:20:56.000" -"0100BCF00E970000","The Vanishing of Ethan Carter","UE4;status-playable","playable","2021-06-09 17:14:47.000" -"","The VideoKid","nvdec;status-playable","playable","2021-01-06 09:28:24.000" -"","The Voice","services;status-menus","menus","2020-07-28 20:48:49.000" -"010029200B6AA000","The Walking Dead","status-playable","playable","2021-06-04 13:10:56.000" -"010056E00B4F4000","The Walking Dead: A New Frontier","status-playable","playable","2022-09-21 13:40:48.000" -"","The Walking Dead: Season Two","status-playable","playable","2020-08-09 12:57:06.000" -"010060F00AA70000","The Walking Dead: The Final Season","status-playable;online-broken","playable","2022-08-23 17:22:32.000" -"","The Wanderer: Frankenstein's Creature","status-playable","playable","2020-07-11 12:49:51.000" -"01008B200FC6C000","The Wardrobe: Even Better Edition","status-playable","playable","2022-09-16 19:14:55.000" -"01003D100E9C6000","The Witcher 3: Wild Hunt","status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug","playable","2024-02-22 12:21:51.000" -"0100B1300FF08000","The Wonderful 101: Remastered","slow;status-playable;nvdec","playable","2022-09-30 13:49:28.000" -"0100C1500B82E000","The World Ends With You -Final Remix-","status-playable;ldn-untested","playable","2022-07-09 01:11:21.000" -"0100E6200D56E000","The World Next Door","status-playable","playable","2022-09-21 14:15:23.000" -"010030700CBBC000","The friends of Ringo Ishikawa","status-playable","playable","2022-08-22 16:33:17.000" -"01005E9016BDE000","The movie The Quintessential Bride -Five Memories Spent with You-","status-playable","playable","2023-12-14 14:43:43.000" -"","Thea: The Awakening","status-playable","playable","2021-01-18 15:08:47.000" -"01001C2010D08000","They Bleed Pixels","gpu;status-ingame","ingame","2024-08-09 05:52:18.000" -"","They Came From the Sky","status-playable","playable","2020-06-12 16:38:19.000" -"0100CE400E34E000","Thief Simulator","status-playable","playable","2023-04-22 04:39:11.000" -"0100CE700F62A000","Thief of Thieves","status-nothing;crash;loader-allocator","nothing","2021-11-03 07:16:30.000" -"01009BD003B36000","Thimbleweed Park","status-playable","playable","2022-08-24 11:15:31.000" -"0100F2300A5DA000","Think of the Children","deadlock;status-menus","menus","2021-11-23 09:04:45.000" -"0100066004D68000","This Is the Police","status-playable","playable","2022-08-24 11:37:05.000" -"01004C100A04C000","This Is the Police 2","status-playable","playable","2022-08-24 11:49:17.000" -"","This Strange Realm of Mine","status-playable","playable","2020-08-28 12:07:24.000" -"0100A8700BC2A000","This War of Mine: Complete Edition","gpu;status-ingame;32-bit;nvdec","ingame","2022-08-24 12:00:44.000" -"0100E910103B4000","Thronebreaker: The Witcher Tales","nvdec;status-playable","playable","2021-06-03 16:40:15.000" -"01006F6002840000","Thumper","gpu;status-ingame","ingame","2024-08-12 02:41:07.000" -"01000AC011588000","Thy Sword","status-ingame;crash","ingame","2022-09-30 16:43:14.000" -"","Tick Tock: A Tale for Two","status-menus","menus","2020-07-14 14:49:38.000" -"0100B6D00C2DE000","Tied Together","nvdec;status-playable","playable","2021-04-10 14:03:46.000" -"","Timber Tennis Versus","online;status-playable","playable","2020-10-03 17:07:15.000" -"01004C500B698000","Time Carnage","status-playable","playable","2021-06-16 17:57:28.000" -"0100F770045CA000","Time Recoil","status-playable","playable","2022-08-24 12:44:03.000" -"0100DD300CF3A000","Timespinner","gpu;status-ingame","ingame","2022-08-09 09:39:11.000" -"0100393013A10000","Timothy and the Mysterious Forest","gpu;slow;status-ingame","ingame","2021-06-02 00:42:11.000" -"","Tin & Kuna","status-playable","playable","2020-11-17 12:16:12.000" -"","Tiny Gladiators","status-playable","playable","2020-12-14 00:09:43.000" -"010061A00AE64000","Tiny Hands Adventure","status-playable","playable","2022-08-24 16:07:48.000" -"01005D0011A40000","Tiny Racer","status-playable","playable","2022-10-07 11:13:03.000" -"010002401AE94000","Tiny Thor","gpu;status-ingame","ingame","2024-07-26 08:37:35.000" -"0100A73016576000","Tinykin","gpu;status-ingame","ingame","2023-06-18 12:12:24.000" -"0100FE801185E000","Titan Glory","status-boots","boots","2022-10-07 11:36:40.000" -"0100605008268000","Titan Quest","status-playable;nvdec;online-broken","playable","2022-08-19 21:54:15.000" -"","Titans Pinball","slow;status-playable","playable","2020-06-09 16:53:52.000" -"010019500DB1E000","Tlicolity Eyes - twinkle showtime -","gpu;status-boots","boots","2021-05-29 19:43:44.000" -"","To the Moon","status-playable","playable","2021-03-20 15:33:38.000" -"","Toast Time: Smash Up!","crash;services;status-menus","menus","2020-04-03 12:26:59.000" -"","Toby: The Secret Mine","nvdec;status-playable","playable","2021-01-06 09:22:33.000" -"","ToeJam & Earl: Back in the Groove","status-playable","playable","2021-01-06 22:56:58.000" -"","Toki","nvdec;status-playable","playable","2021-01-06 19:59:23.000" -"0100A9400C9C2000","Tokyo Mirage Sessions #FE Encore","32-bit;status-playable;nvdec","playable","2022-07-07 09:41:07.000" -"0100E2E00CB14000","Tokyo School Life","status-playable","playable","2022-09-16 20:25:54.000" -"010024601BB16000","Tomb Raider I-III Remastered","gpu;status-ingame;opengl","ingame","2024-09-27 12:32:04.000" -"0100D7F01E49C000","Tomba! Special Edition","services-horizon;status-nothing","nothing","2024-09-15 21:59:54.000" -"0100D400100F8000","Tonight we Riot","status-playable","playable","2021-02-26 15:55:09.000" -"","Tools Up!","crash;status-ingame","ingame","2020-07-21 12:58:17.000" -"01009EA00E2B8000","Toon War","status-playable","playable","2021-06-11 16:41:53.000" -"","Torchlight 2","status-playable","playable","2020-07-27 14:18:37.000" -"010075400DDB8000","Torchlight III","status-playable;nvdec;online-broken;UE4","playable","2022-10-14 22:20:17.000" -"","Torn Tales - Rebound Edition","status-playable","playable","2020-11-01 14:11:59.000" -"0100A64010D48000","Total Arcade Racing","status-playable","playable","2022-11-12 15:12:48.000" -"0100512010728000","Totally Reliable Delivery Service","status-playable;online-broken","playable","2024-09-27 19:32:22.000" -"01004E900B082000","Touhou Genso Wanderer RELOADED","gpu;status-ingame;nvdec","ingame","2022-08-25 11:57:36.000" -"","Touhou Kobuto V: Burst Battle","status-playable","playable","2021-01-11 15:28:58.000" -"","Touhou Spell Bubble","status-playable","playable","2020-10-18 11:43:43.000" -"","Tower of Babel","status-playable","playable","2021-01-06 17:05:15.000" -"","Tower of Time","gpu;nvdec;status-ingame","ingame","2020-07-03 11:11:12.000" -"","TowerFall","status-playable","playable","2020-05-16 18:58:07.000" -"","Towertale","status-playable","playable","2020-10-15 13:56:58.000" -"010049E00BA34000","Townsmen - A Kingdom Rebuilt","status-playable;nvdec","playable","2022-10-14 22:48:59.000" -"01009FF00A160000","Toy Stunt Bike: Tiptop's Trials","UE4;status-playable","playable","2021-04-10 13:56:34.000" -"0100192010F5A000","Tracks - Toybox Edition","UE4;crash;status-nothing","nothing","2021-02-08 15:19:18.000" -"0100BCA00843A000","Trailblazers","status-playable","playable","2021-03-02 20:40:49.000" -"010009F004E66000","Transcripted","status-playable","playable","2022-08-25 12:13:11.000" -"","Transistor","status-playable","playable","2020-10-22 11:28:02.000" -"0100A8D010BFA000","Travel Mosaics 2: Roman Holiday","status-playable","playable","2021-05-26 12:33:16.000" -"0100102010BFC000","Travel Mosaics 3: Tokyo Animated","status-playable","playable","2021-05-26 12:06:27.000" -"010096D010BFE000","Travel Mosaics 4: Adventures in Rio","status-playable","playable","2021-05-26 11:54:58.000" -"01004C4010C00000","Travel Mosaics 5: Waltzing Vienna","status-playable","playable","2021-05-26 11:49:35.000" -"0100D520119D6000","Travel Mosaics 6: Christmas Around the World","status-playable","playable","2021-05-26 00:52:47.000" -"","Travel Mosaics 7: Fantastic Berlin -","status-playable","playable","2021-05-22 18:37:34.000" -"01007DB00A226000","Travel Mosaics: A Paris Tour","status-playable","playable","2021-05-26 12:42:26.000" -"010011600C946000","Travis Strikes Again: No More Heroes","status-playable;nvdec;UE4","playable","2022-08-25 12:36:38.000" -"","Treadnauts","status-playable","playable","2021-01-10 14:57:41.000" -"01003E800A102000","Trials Rising","status-playable","playable","2024-02-11 01:36:39.000" -"0100D7800E9E0000","Trials of Mana","status-playable;UE4","playable","2022-09-30 21:50:37.000" -"0100E1D00FBDE000","Trials of Mana Demo","status-playable;nvdec;UE4;demo;vulkan-backend-bug","playable","2022-09-26 18:00:02.000" -"0100D9000A930000","Trine","ldn-untested;nvdec;status-playable","playable","2021-06-03 11:28:15.000" -"010064E00A932000","Trine 2","nvdec;status-playable","playable","2021-06-03 11:45:20.000" -"0100DEC00A934000","Trine 3: The Artifacts of Power","ldn-untested;online;status-playable","playable","2021-06-03 12:01:24.000" -"010055E00CA68000","Trine 4: The Nightmare Prince","gpu;status-nothing","nothing","2025-01-07 05:47:46.000" -"01002D7010A54000","Trinity Trigger","status-ingame;crash","ingame","2023-03-03 03:09:09.000" -"0100868013FFC000","Trivial Pursuit Live! 2","status-boots","boots","2022-12-19 00:04:33.000" -"0100F78002040000","Troll and I","gpu;nvdec;status-ingame","ingame","2021-06-04 16:58:50.000" -"","Trollhunters: Defenders of Arcadia","gpu;nvdec;status-ingame","ingame","2020-11-30 13:27:09.000" -"0100FBE0113CC000","Tropico 6","status-playable;nvdec;UE4","playable","2022-10-14 23:21:03.000" -"0100D06018DCA000","Trouble Witches Final! Episode 01: Daughters of Amalgam","status-playable","playable","2024-04-08 15:08:11.000" -"","Troubleshooter","UE4;crash;status-nothing","nothing","2020-10-04 13:46:50.000" -"","Trover Saves the Universe","UE4;crash;status-nothing","nothing","2020-10-03 10:25:27.000" -"0100E6300D448000","Truberbrook","status-playable","playable","2021-06-04 17:08:00.000" -"0100F2100AA5C000","Truck & Logistics Simulator","status-playable","playable","2021-06-11 13:29:08.000" -"0100CB50107BA000","Truck Driver","status-playable;online-broken","playable","2022-10-20 17:42:33.000" -"","True Fear: Forsaken Souls - Part 1","nvdec;status-playable","playable","2020-12-15 21:39:52.000" -"","Tumblestone","status-playable","playable","2021-01-07 17:49:20.000" -"010085500D5F6000","Turok","gpu;status-ingame","ingame","2021-06-04 13:16:24.000" -"0100CDC00D8D6000","Turok 2: Seeds of Evil","gpu;status-ingame;vulkan","ingame","2022-09-12 17:50:05.000" -"","Turrican Flashback - 01004B0130C8000","status-playable;audout","playable","2021-08-30 10:07:56.000" -"","TurtlePop: Journey to Freedom","status-playable","playable","2020-06-12 17:45:39.000" -"0100047009742000","Twin Robots: Ultimate Edition","status-playable;nvdec","playable","2022-08-25 14:24:03.000" -"010031200E044000","Two Point Hospital","status-ingame;crash;nvdec","ingame","2022-09-22 11:22:23.000" -"010073A00C4B2000","Tyd wag vir Niemand","status-playable","playable","2021-03-02 13:39:53.000" -"","Type:Rider","status-playable","playable","2021-01-06 13:12:55.000" -"","UBERMOSH:SANTICIDE","status-playable","playable","2020-11-27 15:05:01.000" -"01005AA00372A000","UNO","status-playable;nvdec;ldn-untested","playable","2022-07-28 14:49:47.000" -"","Ubongo - Deluxe Edition","status-playable","playable","2021-02-04 21:15:01.000" -"010079000B56C000","UglyDolls: An Imperfect Adventure","status-playable;nvdec;UE4","playable","2022-08-25 14:42:16.000" -"010048901295C000","Ultimate Fishing Simulator","status-playable","playable","2021-06-16 18:38:23.000" -"","Ultimate Racing 2D","status-playable","playable","2020-08-05 17:27:09.000" -"010045200A1C2000","Ultimate Runner","status-playable","playable","2022-08-29 12:52:40.000" -"01006B601117E000","Ultimate Ski Jumping 2020","online;status-playable","playable","2021-03-02 20:54:11.000" -"01002D4012222000","Ultra Hat Dimension","services;audio;status-menus","menus","2021-11-18 09:05:20.000" -"","Ultra Hyperball","status-playable","playable","2021-01-06 10:09:55.000" -"01007330027EE000","Ultra Street Fighter II: The Final Challengers","status-playable;ldn-untested","playable","2021-11-25 07:54:58.000" -"01006A300BA2C000","Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~","status-playable;audout","playable","2023-05-04 17:25:23.000" -"","UnExplored - Unlocked Edition","status-playable","playable","2021-01-06 10:02:16.000" -"0100592005164000","Unbox: Newbie's Adventure","status-playable;UE4","playable","2022-08-29 13:12:56.000" -"01002D900C5E4000","Uncanny Valley","nvdec;status-playable","playable","2021-06-04 13:28:45.000" -"010076F011F54000","Undead and Beyond","status-playable;nvdec","playable","2022-10-04 09:11:18.000" -"01008F3013E4E000","Under Leaves","status-playable","playable","2021-05-22 18:13:58.000" -"010080B00AD66000","Undertale","status-playable","playable","2022-08-31 17:31:46.000" -"01008F80049C6000","Unepic","status-playable","playable","2024-01-15 17:03:00.000" -"","Unhatched","status-playable","playable","2020-12-11 12:11:09.000" -"010069401ADB8000","Unicorn Overlord","status-playable","playable","2024-09-27 14:04:32.000" -"","Unit 4","status-playable","playable","2020-12-16 18:54:13.000" -"","Unknown Fate","slow;status-ingame","ingame","2020-10-15 12:27:42.000" -"","Unlock the King","status-playable","playable","2020-09-01 13:58:27.000" -"0100A3E011CB0000","Unlock the King 2","status-playable","playable","2021-06-15 20:43:55.000" -"0100E5D00CC0C000","Unravel TWO","status-playable;nvdec","playable","2024-05-23 15:45:05.000" -"","Unruly Heroes","status-playable","playable","2021-01-07 18:09:31.000" -"0100B410138C0000","Unspottable","status-playable","playable","2022-10-25 19:28:49.000" -"","Untitled Goose Game","status-playable","playable","2020-09-26 13:18:06.000" -"0100E49013190000","Unto The End","gpu;status-ingame","ingame","2022-10-21 11:13:29.000" -"","Urban Flow","services;status-playable","playable","2020-07-05 12:51:47.000" -"010054F014016000","Urban Street Fighting","status-playable","playable","2021-02-20 19:16:36.000" -"01001B10068EC000","Urban Trial Playground","UE4;nvdec;online;status-playable","playable","2021-03-25 20:56:51.000" -"0100A2500EB92000","Urban Trial Tricky","status-playable;nvdec;UE4","playable","2022-12-06 13:07:56.000" -"01007C0003AEC000","Use Your Words","status-menus;nvdec;online-broken","menus","2022-08-29 17:22:10.000" -"0100D4300EBF8000","Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE","status-nothing;crash;Needs More Attention;Needs Update","nothing","2022-02-09 08:57:44.000" -"010024200E00A000","Uta no☆Prince-sama♪ Repeat Love","status-playable;nvdec","playable","2022-12-09 09:21:51.000" -"","Utopia 9 - A Volatile Vacation","nvdec;status-playable","playable","2020-12-16 17:06:42.000" -"010064400B138000","V-Rally 4","gpu;nvdec;status-ingame","ingame","2021-06-07 19:37:31.000" -"0100A6700D66E000","VA-11 HALL-A","status-playable","playable","2021-02-26 15:05:34.000" -"010045C0109F2000","VARIABLE BARRICADE NS","status-playable;nvdec","playable","2022-02-26 15:50:13.000" -"0100FE200AF48000","VASARA Collection","nvdec;status-playable","playable","2021-02-28 15:26:10.000" -"0100C7C00AE6C000","VSR: Void Space Racing","status-playable","playable","2021-01-27 14:08:59.000" -"","Vaccine","nvdec;status-playable","playable","2021-01-06 01:02:07.000" -"010089700F30C000","Valfaris","status-playable","playable","2022-09-16 21:37:24.000" -"0100CAF00B744000","Valkyria Chronicles","status-ingame;32-bit;crash;nvdec","ingame","2022-11-23 20:03:32.000" -"01005C600AC68000","Valkyria Chronicles 4","audout;nvdec;status-playable","playable","2021-06-03 18:12:25.000" -"0100FBD00B91E000","Valkyria Chronicles 4 Demo","slow;status-ingame;demo","ingame","2022-08-29 20:39:07.000" -"0100E0E00B108000","Valley","status-playable;nvdec","playable","2022-09-28 19:27:58.000" -"010089A0197E4000","Vampire Survivors","status-ingame","ingame","2024-06-17 09:57:38.000" -"01000BD00CE64000","Vampyr","status-playable;nvdec;UE4","playable","2022-09-16 22:15:51.000" -"01007C500D650000","Vandals","status-playable","playable","2021-01-27 21:45:46.000" -"010030F00CA1E000","Vaporum","nvdec;status-playable","playable","2021-05-28 14:25:33.000" -"","Vasilis","status-playable","playable","2020-09-01 15:05:35.000" -"01009CD003A0A000","Vegas Party","status-playable","playable","2021-04-14 19:21:41.000" -"010098400E39E000","Vektor Wars","status-playable;online-broken;vulkan-backend-bug","playable","2022-10-04 09:23:46.000" -"01003A8018E60000","Vengeful Guardian: Moonrider","deadlock;status-boots","boots","2024-03-17 23:35:37.000" -"010095B00DBC8000","Venture Kid","crash;gpu;status-ingame","ingame","2021-04-18 16:33:17.000" -"","Vera Blanc: Full Moon","audio;status-playable","playable","2020-12-17 12:09:30.000" -"0100379013A62000","Very Very Valet","status-playable;nvdec","playable","2022-11-12 15:25:51.000" -"01006C8014DDA000","Very Very Valet Demo - 01006C8014DDA000","status-boots;crash;Needs Update;demo","boots","2022-11-12 15:26:13.000" -"010057B00712C000","Vesta","status-playable;nvdec","playable","2022-08-29 21:03:39.000" -"0100E81007A06000","Victor Vran Overkill Edition","gpu;deadlock;status-ingame;nvdec;opengl","ingame","2022-08-30 11:46:56.000" -"01005880063AA000","Violett","nvdec;status-playable","playable","2021-01-28 13:09:36.000" -"010037900CB1C000","Viviette","status-playable","playable","2021-06-11 15:33:40.000" -"0100D010113A8000","Void Bastards","status-playable","playable","2022-10-15 00:04:19.000" -"","Volgarr the Viking","status-playable","playable","2020-12-18 15:25:50.000" -"0100A7900E79C000","Volta-X","status-playable;online-broken","playable","2022-10-07 12:20:51.000" -"01004D8007368000","Vostok, Inc.","status-playable","playable","2021-01-27 17:43:59.000" -"0100B1E0100A4000","Voxel Galaxy","status-playable","playable","2022-09-28 22:45:02.000" -"0100AFA011068000","Voxel Pirates","status-playable","playable","2022-09-28 22:55:02.000" -"0100BFB00D1F4000","Voxel Sword","status-playable","playable","2022-08-30 14:57:27.000" -"01004E90028A2000","Vroom in the Night Sky","status-playable;Needs Update;vulkan-backend-bug","playable","2023-02-20 02:32:29.000" -"","VtM Coteries of New York","status-playable","playable","2020-10-04 14:55:22.000" -"","WARBORN","status-playable","playable","2020-06-25 12:36:47.000" -"0100E8500AD58000","WARRIORS OROCHI 4 ULTIMATE","status-playable;nvdec;online-broken","playable","2024-08-07 01:50:37.000" -"0100CFC00A1D8000","WILD GUNS Reloaded","status-playable","playable","2021-01-28 12:29:05.000" -"","WINDJAMMERS","online;status-playable","playable","2020-10-13 11:24:25.000" -"010087800DCEA000","WRC 8 FIA World Rally Championship","status-playable;nvdec","playable","2022-09-16 23:03:36.000" -"01001A0011798000","WRC 9 The Official Game","gpu;slow;status-ingame;nvdec","ingame","2022-10-25 19:47:39.000" -"010081700EDF4000","WWE 2K Battlegrounds","status-playable;nvdec;online-broken;UE4","playable","2022-10-07 12:44:40.000" -"010009800203E000","WWE 2K18","status-playable;nvdec","playable","2023-10-21 17:22:01.000" -"0100B130119D0000","Waifu Uncovered","status-ingame;crash","ingame","2023-02-27 01:17:46.000" -"","Wanba Warriors","status-playable","playable","2020-10-04 17:56:22.000" -"","Wanderjahr TryAgainOrWalkAway","status-playable","playable","2020-12-16 09:46:04.000" -"0100B27010436000","Wanderlust Travel Stories","status-playable","playable","2021-04-07 16:09:12.000" -"0100F8A00853C000","Wandersong","nvdec;status-playable","playable","2021-06-04 15:33:34.000" -"0100D67013910000","Wanna Survive","status-playable","playable","2022-11-12 21:15:43.000" -"01004FA01391A000","War Of Stealth - assassin","status-playable","playable","2021-05-22 17:34:38.000" -"010049500DE56000","War Tech Fighters","status-playable;nvdec","playable","2022-09-16 22:29:31.000" -"010084D00A134000","War Theatre","gpu;status-ingame","ingame","2021-06-07 19:42:45.000" -"0100B6B013B8A000","War Truck Simulator","status-playable","playable","2021-01-31 11:22:54.000" -"","War-Torn Dreams","crash;status-nothing","nothing","2020-10-21 11:36:16.000" -"01000F0002BB6000","WarGroove","status-playable;online-broken","playable","2022-08-31 10:30:45.000" -"010056901285A000","Wardogs: Red's Return","status-playable","playable","2022-11-13 15:29:01.000" -"0100C6000EEA8000","Warhammer 40,000: Mechanicus","nvdec;status-playable","playable","2021-06-13 10:46:38.000" -"0100E5600D7B2000","Warhammer 40,000: Space Wolf","status-playable;online-broken","playable","2022-09-20 21:11:20.000" -"010031201307A000","Warhammer Age of Sigmar: Storm Ground","status-playable;nvdec;online-broken;UE4","playable","2022-11-13 15:46:14.000" -"","Warhammer Quest 2","status-playable","playable","2020-08-04 15:28:03.000" -"0100563010E0C000","WarioWare: Get It Together!","gpu;status-ingame;opengl-backend-bug","ingame","2024-04-23 01:04:56.000" -"010045B018EC2000","Warioware: Move IT!","status-playable","playable","2023-11-14 00:23:51.000" -"","Warlocks 2: God Slayers","status-playable","playable","2020-12-16 17:36:50.000" -"","Warp Shift","nvdec;status-playable","playable","2020-12-15 14:48:48.000" -"","Warparty","nvdec;status-playable","playable","2021-01-27 18:26:32.000" -"010032700EAC4000","WarriOrb","UE4;status-playable","playable","2021-06-17 15:45:14.000" -"","Wartile Complete Edition","UE4;crash;gpu;status-menus","menus","2020-12-11 21:56:10.000" -"010039A00BC64000","Wasteland 2: Director's Cut","nvdec;status-playable","playable","2021-01-27 13:34:11.000" -"","Water Balloon Mania","status-playable","playable","2020-10-23 20:20:59.000" -"0100BA200C378000","Way of the Passive Fist","gpu;status-ingame","ingame","2021-02-26 21:07:06.000" -"","We should talk.","crash;status-nothing","nothing","2020-08-03 12:32:36.000" -"","Welcome to Hanwell","UE4;crash;status-boots","boots","2020-08-03 11:54:57.000" -"0100D7F010B94000","Welcome to Primrose Lake","status-playable","playable","2022-10-21 11:30:57.000" -"","Wenjia","status-playable","playable","2020-06-08 11:38:30.000" -"010031B00A4E8000","West of Loathing","status-playable","playable","2021-01-28 12:35:19.000" -"010038900DFE0000","What Remains of Edith Finch","slow;status-playable;UE4","playable","2022-08-31 19:57:59.000" -"010033600ADE6000","Wheel of Fortune [010033600ADE6000]","status-boots;crash;Needs More Attention;nvdec","boots","2023-11-12 20:29:24.000" -"0100DFC00405E000","Wheels of Aurelia","status-playable","playable","2021-01-27 21:59:25.000" -"010027D011C9C000","Where Angels Cry","gpu;status-ingame;nvdec","ingame","2022-09-30 22:24:47.000" -"0100FDB0092B4000","Where Are My Friends?","status-playable","playable","2022-09-21 14:39:26.000" -"","Where the Bees Make Honey","status-playable","playable","2020-07-15 12:40:49.000" -"","Whipsey and the Lost Atlas","status-playable","playable","2020-06-23 20:24:14.000" -"010015A00AF1E000","Whispering Willows","status-playable;nvdec","playable","2022-09-30 22:33:05.000" -"","Who Wants to Be a Millionaire?","crash;status-nothing","nothing","2020-12-11 20:22:42.000" -"0100C7800CA06000","Widget Satchel","status-playable","playable","2022-09-16 22:41:07.000" -"010071F00D65A000","Wilmot's Warehouse","audio;gpu;status-ingame","ingame","2021-06-02 17:24:32.000" -"010059900BA3C000","Windscape","status-playable","playable","2022-10-21 11:49:42.000" -"","Windstorm","UE4;gpu;nvdec;status-ingame","ingame","2020-12-22 13:17:48.000" -"0100D6800CEAC000","Windstorm - Ari's Arrival","UE4;status-playable","playable","2021-06-07 19:33:19.000" -"","Wing of Darkness - 010035B012F2000","status-playable;UE4","playable","2022-11-13 16:03:51.000" -"0100A4A015FF0000","Winter Games 2023","deadlock;status-menus","menus","2023-11-07 20:47:36.000" -"010012A017F18800","Witch On The Holy Night","status-playable","playable","2023-03-06 23:28:11.000" -"0100454012E32000","Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-","status-ingame;crash","ingame","2021-08-08 11:56:18.000" -"01002FC00C6D0000","Witch Thief","status-playable","playable","2021-01-27 18:16:07.000" -"010061501904E000","Witch's Garden","gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug","ingame","2023-01-11 02:11:24.000" -"","Witcheye","status-playable","playable","2020-12-14 22:56:08.000" -"0100522007AAA000","Wizard of Legend","status-playable","playable","2021-06-07 12:20:46.000" -"","Wizards of Brandel","status-nothing","nothing","2020-10-14 15:52:33.000" -"0100C7600E77E000","Wizards: Wand of Epicosity","status-playable","playable","2022-10-07 12:32:06.000" -"01009040091E0000","Wolfenstein II The New Colossus","gpu;status-ingame","ingame","2024-04-05 05:39:46.000" -"01003BD00CAAE000","Wolfenstein: Youngblood","status-boots;online-broken","boots","2024-07-12 23:49:20.000" -"","Wonder Blade","status-playable","playable","2020-12-11 17:55:31.000" -"0100B49016FF0000","Wonder Boy Anniversary Collection","deadlock;status-nothing","nothing","2023-04-20 16:01:48.000" -"0100EB2012E36000","Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ]","status-nothing;crash","nothing","2021-11-03 08:45:06.000" -"0100A6300150C000","Wonder Boy: The Dragon's Trap","status-playable","playable","2021-06-25 04:53:21.000" -"0100F5D00C812000","Wondershot","status-playable","playable","2022-08-31 21:05:31.000" -"","Woodle Tree 2","gpu;slow;status-ingame","ingame","2020-06-04 18:44:00.000" -"0100288012966000","Woodsalt","status-playable","playable","2021-04-06 17:01:48.000" -"","Wordify","status-playable","playable","2020-10-03 09:01:07.000" -"","World Conqueror X","status-playable","playable","2020-12-22 16:10:29.000" -"01008E9007064000","World Neverland","status-playable","playable","2021-01-28 17:44:23.000" -"","World Soccer Pinball","status-playable","playable","2021-01-06 00:37:02.000" -"","World of Final Fantasy Maxima","status-playable","playable","2020-06-07 13:57:23.000" -"010009E001D90000","World of Goo","gpu;status-boots;32-bit;crash;regression","boots","2024-04-12 05:52:14.000" -"010061F01DB7C800","World of Goo 2","status-boots","boots","2024-08-08 22:52:49.000" -"","Worldend Syndrome","status-playable","playable","2021-01-03 14:16:32.000" -"010000301025A000","Worlds of Magic: Planar Conquest","status-playable","playable","2021-06-12 12:51:28.000" -"01009CD012CC0000","Worm Jazz","gpu;services;status-ingame;UE4;regression","ingame","2021-11-10 10:33:04.000" -"01001AE005166000","Worms W.M.D","gpu;status-boots;crash;nvdec;ldn-untested","boots","2023-09-16 21:42:59.000" -"010037500C4DE000","Worse Than Death","status-playable","playable","2021-06-11 16:05:40.000" -"01006F100EB16000","Woven","nvdec;status-playable","playable","2021-06-02 13:41:08.000" -"0100DC0012E48000","Wreckfest","status-playable","playable","2023-02-12 16:13:00.000" -"0100C5D00EDB8000","Wreckin' Ball Adventure","status-playable;UE4","playable","2022-09-12 18:56:28.000" -"010033700418A000","Wulverblade","nvdec;status-playable","playable","2021-01-27 22:29:05.000" -"01001C400482C000","Wunderling","audio;status-ingame;crash","ingame","2022-09-10 13:20:12.000" -"","Wurroom","status-playable","playable","2020-10-07 22:46:21.000" -"","X-Morph: Defense","status-playable","playable","2020-06-22 11:05:31.000" -"0100D0B00FB74000","XCOM 2 Collection","gpu;status-ingame;crash","ingame","2022-10-04 09:38:30.000" -"0100CC9015360000","XEL","gpu;status-ingame","ingame","2022-10-03 10:19:39.000" -"0100E95004038000","Xenoblade Chronicles 2","deadlock;status-ingame;amd-vendor-bug","ingame","2024-03-28 14:31:41.000" -"0100C9F009F7A000","Xenoblade Chronicles 2: Torna - The Golden Country","slow;status-playable;nvdec","playable","2023-01-28 16:47:28.000" -"010074F013262000","Xenoblade Chronicles 3","gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug","ingame","2024-08-06 19:56:44.000" -"0100FF500E34A000","Xenoblade Chronicles Definitive Edition","status-playable;nvdec","playable","2024-05-04 20:12:41.000" -"010028600BA16000","Xenon Racer","status-playable;nvdec;UE4","playable","2022-08-31 22:05:30.000" -"010064200C324000","Xenon Valkyrie+","status-playable","playable","2021-06-07 20:25:53.000" -"0100928005BD2000","Xenoraid","status-playable","playable","2022-09-03 13:01:10.000" -"01005B5009364000","Xeodrifter","status-playable","playable","2022-09-03 13:18:39.000" -"","YGGDRA UNION We’ll Never Fight Alone","status-playable","playable","2020-04-03 02:20:47.000" -"0100634008266000","YIIK: A Postmodern RPG","status-playable","playable","2021-01-28 13:38:37.000" -"010037D00DBDC000","YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD.","nvdec;status-playable","playable","2021-01-26 17:03:52.000" -"01006FB00DB02000","Yaga","status-playable;nvdec","playable","2022-09-16 23:17:17.000" -"","YesterMorrow","crash;status-ingame","ingame","2020-12-17 17:15:25.000" -"","Yet Another Zombie Defense HD","status-playable","playable","2021-01-06 00:18:39.000" -"0100C0000CEEA000","Yo kai watch 1 for Nintendo Switch","gpu;status-ingame;opengl","ingame","2024-05-28 11:11:49.000" -"010086C00AF7C000","Yo-Kai Watch 4++","status-playable","playable","2024-06-18 20:21:44.000" -"010002D00632E000","Yoku's Island Express","status-playable;nvdec","playable","2022-09-03 13:59:02.000" -"0100F47016F26000","Yomawari 3","status-playable","playable","2022-05-10 08:26:51.000" -"010012F00B6F2000","Yomawari: The Long Night Collection","status-playable","playable","2022-09-03 14:36:59.000" -"0100CC600ABB2000","Yonder: The Cloud Catcher Chronicles","status-playable","playable","2021-01-28 14:06:25.000" -"0100BE50042F6000","Yono and the Celestial Elephants","status-playable","playable","2021-01-28 18:23:58.000" -"0100F110029C8000","Yooka-Laylee","status-playable","playable","2021-01-28 14:21:45.000" -"010022F00DA66000","Yooka-Laylee and the Impossible Lair","status-playable","playable","2021-03-05 17:32:21.000" -"01006000040C2000","Yoshi's Crafted World","gpu;status-ingame;audout","ingame","2021-08-30 13:25:51.000" -"","Yoshi's Crafted World Demo Version","gpu;status-boots;status-ingame","boots","2020-12-16 14:57:40.000" -"","Yoshiwara Higanbana Kuon no Chigiri","nvdec;status-playable","playable","2020-10-17 19:14:46.000" -"01003A400C3DA800","YouTube","status-playable","playable","2024-06-08 05:24:10.000" -"00100A7700CCAA40","Youtubers Life00","status-playable;nvdec","playable","2022-09-03 14:56:19.000" -"0100E390124D8000","Ys IX: Monstrum Nox","status-playable","playable","2022-06-12 04:14:42.000" -"0100F90010882000","Ys Origin","status-playable;nvdec","playable","2024-04-17 05:07:33.000" -"01007F200B0C0000","Ys VIII: Lacrimosa of Dana","status-playable;nvdec","playable","2023-08-05 09:26:41.000" -"010022400BE5A000","Yu-Gi-Oh! Legacy of the Duelist: Link Evolution!","status-playable","playable","2024-09-27 21:48:43.000" -"01002D60188DE000","Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!","status-ingame;crash","ingame","2023-03-17 01:54:01.000" -"0100B56011502000","Yumeutsutsu Re:After","status-playable","playable","2022-11-20 16:09:06.000" -"","Yunohana Spring! - Mellow Times -","audio;crash;status-menus","menus","2020-09-27 19:27:40.000" -"","Yuppie Psycho: Executive Edition","crash;status-ingame","ingame","2020-12-11 10:37:06.000" -"0100FC900963E000","Yuri","status-playable","playable","2021-06-11 13:08:50.000" -"","ZERO GUNNER 2","status-playable","playable","2021-01-04 20:17:14.000" -"","ZOMBIE GOLD RUSH","online;status-playable","playable","2020-09-24 12:56:08.000" -"010092400A678000","Zaccaria Pinball","status-playable;online-broken","playable","2022-09-03 15:44:28.000" -"","Zarvot - 0100E7900C40000","status-playable","playable","2021-01-28 13:51:36.000" -"","ZenChess","status-playable","playable","2020-07-01 22:28:27.000" -"","Zenge","status-playable","playable","2020-10-22 13:23:57.000" -"0100057011E50000","Zengeon","services-horizon;status-boots;crash","boots","2024-04-29 15:43:07.000" -"0100AAC00E692000","Zenith","status-playable","playable","2022-09-17 09:57:02.000" -"01004B001058C000","Zero Strain","services;status-menus;UE4","menus","2021-11-10 07:48:32.000" -"","Zettai kaikyu gakuen","gpu;nvdec;status-ingame","ingame","2020-08-25 15:15:54.000" -"0100D7B013DD0000","Ziggy The Chaser","status-playable","playable","2021-02-04 20:34:27.000" -"010086700EF16000","ZikSquare","gpu;status-ingame","ingame","2021-11-06 02:02:48.000" -"010069C0123D8000","Zoids Wild Blast Unleashed","status-playable;nvdec","playable","2022-10-15 11:26:59.000" -"","Zombie Army Trilogy","ldn-untested;online;status-playable","playable","2020-12-16 12:02:28.000" -"","Zombie Driver","nvdec;status-playable","playable","2020-12-14 23:15:10.000" -"","Zombie's Cool","status-playable","playable","2020-12-17 12:41:26.000" -"01000E5800D32C00","Zombieland: Double Tap - Road Trip0","status-playable","playable","2022-09-17 10:08:45.000" -"","Zombillie","status-playable","playable","2020-07-23 17:42:23.000" -"01001EE00A6B0000","Zotrix: Solar Division","status-playable","playable","2021-06-07 20:34:05.000" -"0100194010422000","bayala - the game","status-playable","playable","2022-10-04 14:09:25.000" -"","de Blob 2","nvdec;status-playable","playable","2021-01-06 13:00:16.000" -"0100BCA016636000","eBaseball Powerful Pro Yakyuu 2022","gpu;services-horizon;status-nothing;crash","nothing","2024-05-26 23:07:19.000" -"","eCrossminton","status-playable","playable","2020-07-11 18:24:27.000" -"010095E01581C000","even if TEMPEST","gpu;status-ingame","ingame","2023-06-22 23:50:25.000" -"","fault - milestone one","nvdec;status-playable","playable","2021-03-24 10:41:49.000" -"","n Verlore Verstand","slow;status-ingame","ingame","2020-12-10 18:00:28.000" -"01009A500E3DA000","n Verlore Verstand - Demo","status-playable","playable","2021-02-09 00:13:32.000" -"01008AE019614000","nOS new Operating System","status-playable","playable","2023-03-22 16:49:08.000" -"0000000000000000","nx-hbmenu","status-boots;Needs Update;homebrew","boots","2024-04-06 22:05:32.000" -"","nxquake2","services;status-nothing;crash;homebrew","nothing","2022-08-04 23:14:04.000" -"010074000BE8E000","oOo: Ascension","status-playable","playable","2021-01-25 14:13:34.000" -"","planetarian HD ~the reverie of a little planet~","status-playable","playable","2020-10-17 20:26:20.000" -"01005CD015986000","rRootage Reloaded [01005CD015986000]","status-playable","playable","2022-08-05 23:20:18.000" -"","realMyst: Masterpiece Edition","nvdec;status-playable","playable","2020-11-30 15:25:42.000" -"0100858010DC4000","the StoryTale","status-playable","playable","2022-09-03 13:00:25.000" -"0100FF7010E7E000","void* tRrLM(); //Void Terrarium","gpu;status-ingame;Needs Update;regression","ingame","2023-02-10 01:13:25.000" -"010078D0175EE000","void* tRrLM2(); //Void Terrarium 2","status-playable","playable","2023-12-21 11:00:41.000" -"","この世の果てで恋を唄う少女YU-NO","audio;status-ingame","ingame","2021-01-22 07:00:16.000" -"","スーパーファミコン Nintendo Switch Online","slow;status-ingame","ingame","2020-03-14 05:48:38.000" -"01000BB01CB8A000","トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)","status-nothing","nothing","2024-09-28 07:03:14.000" -"010065500B218000","メモリーズオフ - Innocent Fille","status-playable","playable","2022-12-02 17:36:48.000" -"010032400E700000","二ノ国 白き聖灰の女王","services;status-menus;32-bit","menus","2023-04-16 17:11:06.000" -"0100F3100DA46000","初音ミク Project DIVA MEGA39's","audio;status-playable;loader-allocator","playable","2022-07-29 11:45:52.000" -"0100BF401AF9C000","御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)","slow;status-playable","playable","2023-12-31 14:37:17.000" -"0100AFA01750C000","死神と少女/Shinigami to Shoujo","gpu;status-ingame;Incomplete","ingame","2024-03-22 01:06:45.000" -"01001BA01EBFC000","燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)","services-horizon;status-nothing","nothing","2024-09-28 12:22:55.000" -"0100936018EB4000","牧場物語 Welcome!ワンダフルライフ","status-ingame;crash","ingame","2023-04-25 19:43:52.000" -"01009FB016286000","索尼克:起源 / Sonic Origins","status-ingame;crash","ingame","2024-06-02 07:20:15.000" -"0100F4401940A000","超探偵事件簿 レインコード (Master Detective Archives: Rain Code)","status-ingame;crash","ingame","2024-02-12 20:58:31.000" -"010064801a01c000","超次元ゲイム ネプテューヌ GameMaker R:Evolution","status-nothing;crash","nothing","2023-10-30 22:37:40.000" -"010005501E68C000","逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection)","status-playable","playable","2024-09-19 16:38:05.000" -"010020D01B890000","逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy)","status-playable","playable","2024-06-21 21:54:27.000" -"0100309016E7A000","鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles","status-playable;UE4","playable","2024-08-08 04:51:49.000" +010099F00EF3E000,"-KLAUS-",nvdec;status-playable,playable,2020-06-27 13:27:30.000 +0100BA9014A02000,".hack//G.U. Last Recode",deadlock;status-boots,boots,2022-03-12 19:15:47.000 +01001E500F7FC000,"#Funtime",status-playable,playable,2020-12-10 16:54:35.000 +01000E50134A4000,"#Halloween, Super Puzzles Dream",nvdec;status-playable,playable,2020-12-10 20:43:58.000 +01004D100C510000,"#KillAllZombies",slow;status-playable,playable,2020-12-16 01:50:25.000 +0100325012C12000,"#NoLimitFantasy, Super Puzzles Dream",nvdec;status-playable,playable,2020-12-12 17:21:32.000 +01005D400E5C8000,"#RaceDieRun",status-playable,playable,2020-07-04 20:23:16.000 +01003DB011AE8000,"#womenUp, Super Puzzles Dream",status-playable,playable,2020-12-12 16:57:25.000 +0100D87012A14000,"#womenUp, Super Puzzles Dream Demo",nvdec;status-playable,playable,2021-02-09 00:03:31.000 +01000320000CC000,"1-2-Switch",services;status-playable,playable,2022-02-18 14:44:03.000 +01004D1007926000,"10 Second Run Returns",gpu;status-ingame,ingame,2022-07-17 13:06:18.000 +0100DC000A472000,"10 Second Run RETURNS Demo",gpu;status-ingame,ingame,2021-02-09 00:17:18.000 +0100D82015774000,"112 Operator",status-playable;nvdec,playable,2022-11-13 22:42:50.000 +010051E012302000,"112th Seed",status-playable,playable,2020-10-03 10:32:38.000 +01007F600D1B8000,"12 is Better Than 6",status-playable,playable,2021-02-22 16:10:12.000 +0100B1A010014000,"12 Labours of Hercules II: The Cretan Bull",cpu;status-nothing;32-bit;crash,nothing,2022-12-07 13:43:10.000 +0100A840047C2000,"12 orbits",status-playable,playable,2020-05-28 16:13:26.000 +01003FC01670C000,"13 Sentinels Aegis Rim",slow;status-ingame,ingame,2024-06-10 20:33:38.000 +0100C54015002000,"13 Sentinels Aegis Rim Demo",status-playable;demo,playable,2022-04-13 14:15:48.000 +01007E600EEE6000,"140",status-playable,playable,2020-08-05 20:01:33.000 +0100B94013D28000,"16-Bit Soccer Demo",status-playable,playable,2021-02-09 00:23:07.000 +01005CA0099AA000,"1917 - The Alien Invasion DX",status-playable,playable,2021-01-08 22:11:16.000 +0100829010F4A000,"1971 PROJECT HELIOS",status-playable,playable,2021-04-14 13:50:19.000 +0100D1000B18C000,"1979 Revolution: Black Friday",nvdec;status-playable,playable,2021-02-21 21:03:43.000 +01007BB00FC8A000,"198X",status-playable,playable,2020-08-07 13:24:38.000 +010075601150A000,"1993 Shenandoah",status-playable,playable,2020-10-24 13:55:42.000 +0100148012550000,"1993 Shenandoah Demo",status-playable,playable,2021-02-09 00:43:43.000 +010096500EA94000,"2048 Battles",status-playable,playable,2020-12-12 14:21:25.000 +010024C0067C4000,"2064: Read Only Memories INTEGRAL",deadlock;status-menus,menus,2020-05-28 16:53:58.000 +0100749009844000,"20XX",gpu;status-ingame,ingame,2023-08-14 09:41:44.000 +01007550131EE000,"2urvive",status-playable,playable,2022-11-17 13:49:37.000 +0100E20012886000,"2weistein – The Curse of the Red Dragon",status-playable;nvdec;UE4,playable,2022-11-18 14:47:07.000 +0100DAC013D0A000,"30 in 1 game collection vol. 2",status-playable;online-broken,playable,2022-10-15 17:22:27.000 +010056D00E234000,"30-in-1 Game Collection",status-playable;online-broken,playable,2022-10-15 17:47:09.000 +0100FB5010D2E000,"3000th Duel",status-playable,playable,2022-09-21 17:12:08.000 +01003670066DE000,"36 Fragments of Midnight",status-playable,playable,2020-05-28 15:12:59.000 +0100AF400C4CE000,"39 Days to Mars",status-playable,playable,2021-02-21 22:12:46.000 +010010C013F2A000,"3D Arcade Fishing",status-playable,playable,2022-10-25 21:50:51.000 +,"3D MiniGolf",status-playable,playable,2021-01-06 09:22:11.000 +,"4x4 Dirt Track",status-playable,playable,2020-12-12 21:41:42.000 +010010100FF14000,"60 Parsecs!",status-playable,playable,2022-09-17 11:01:17.000 +0100969005E98000,"60 Seconds!",services;status-ingame,ingame,2021-11-30 01:04:14.000 +,"6180 the moon",status-playable,playable,2020-05-28 15:39:24.000 +,"64",status-playable,playable,2020-12-12 21:31:58.000 +,"7 Billion Humans",32-bit;status-playable,playable,2020-12-17 21:04:58.000 +,"7th Sector",nvdec;status-playable,playable,2020-08-10 14:22:14.000 +,"8-BIT ADVENTURE STEINS;GATE",audio;status-ingame,ingame,2020-01-12 15:05:06.000 +,"80 Days",status-playable,playable,2020-06-22 21:43:01.000 +,"80's OVERDRIVE",status-playable,playable,2020-10-16 14:33:32.000 +,"88 Heroes",status-playable,playable,2020-05-28 14:13:02.000 +,"9 Monkeys of Shaolin",UE4;gpu;slow;status-ingame,ingame,2020-11-17 11:58:43.000 +0100C5F012E3E000,"9 Monkeys of Shaolin Demo",UE4;gpu;nvdec;status-ingame,ingame,2021-02-09 01:03:30.000 +,"911 Operator Deluxe Edition",status-playable,playable,2020-07-14 13:57:44.000 +,"99Vidas",online;status-playable,playable,2020-10-29 13:00:40.000 +010023500C2F0000,"99Vidas Demo",status-playable,playable,2021-02-09 12:51:31.000 +,"9th Dawn III",status-playable,playable,2020-12-12 22:27:27.000 +010096A00CC80000,"A Ch'ti Bundle",status-playable;nvdec,playable,2022-10-04 12:48:44.000 +,"A Dark Room",gpu;status-ingame,ingame,2020-12-14 16:14:28.000 +0100582012B90000,"A Duel Hand Disaster Trackher: DEMO",crash;demo;nvdec;status-ingame,ingame,2021-03-24 18:45:27.000 +010026B006802000,"A Duel Hand Disaster: Trackher",status-playable;nvdec;online-working,playable,2022-09-04 14:24:55.000 +,"A Frog Game",status-playable,playable,2020-12-14 16:09:53.000 +010056E00853A000,"A Hat In Time",status-playable,playable,2024-06-25 19:52:44.000 +01009E1011EC4000,"A HERO AND A GARDEN",status-playable,playable,2022-12-05 16:37:47.000 +01005EF00CFDA000,"A Knight's Quest",status-playable;UE4,playable,2022-09-12 20:44:20.000 +01008DD006C52000,"A magical high school girl",status-playable,playable,2022-07-19 14:40:50.000 +,"A Short Hike",status-playable,playable,2020-10-15 00:19:58.000 +,"A Sound Plan",crash;status-boots,boots,2020-12-14 16:46:21.000 +01007DD011C4A000,"A Summer with the Shiba Inu",status-playable,playable,2021-06-10 20:51:16.000 +0100A3E010E56000,"A-Train: All Aboard! Tourism",nvdec;status-playable,playable,2021-04-06 17:48:19.000 +010097A00CC0A000,"Aaero",status-playable;nvdec,playable,2022-07-19 14:49:55.000 +,"Aborigenus",status-playable,playable,2020-08-05 19:47:24.000 +,"Absolute Drift",status-playable,playable,2020-12-10 14:02:44.000 +010047F012BE2000,"Abyss of The Sacrifice",status-playable;nvdec,playable,2022-10-21 13:56:28.000 +0100C1300BBC6000,"ABZU",status-playable;UE4,playable,2022-07-19 15:02:52.000 +01003C400871E000,"ACA NEOGEO 2020 SUPER BASEBALL",online;status-playable,playable,2021-04-12 13:23:51.000 +0100FC000AFC6000,"ACA NEOGEO 3 COUNT BOUT",online;status-playable,playable,2021-04-12 13:16:42.000 +0100AC40038F4000,"ACA NEOGEO AERO FIGHTERS 2",online;status-playable,playable,2021-04-08 15:44:09.000 +0100B91008780000,"ACA NEOGEO AERO FIGHTERS 3",online;status-playable,playable,2021-04-12 13:11:17.000 +0100B4800AFBA000,"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",online;status-playable,playable,2021-04-01 22:48:01.000 +01003FE00A2F6000,"ACA NEOGEO BASEBALL STARS PROFESSIONAL",online;status-playable,playable,2021-04-01 21:23:05.000 +,"ACA NEOGEO BLAZING STAR",crash;services;status-menus,menus,2020-05-26 17:29:02.000 +0100D2400AFB0000,"ACA NEOGEO CROSSED SWORDS",online;status-playable,playable,2021-04-01 20:42:59.000 +0100EE6002B48000,"ACA NEOGEO FATAL FURY",online;status-playable,playable,2021-04-01 20:36:23.000 +,"ACA NEOGEO FOOTBALL FRENZY",status-playable,playable,2021-03-29 20:12:12.000 +0100CB2001DB8000,"ACA NEOGEO GAROU: MARK OF THE WOLVES",online;status-playable,playable,2021-04-01 20:31:10.000 +01005D700A2F8000,"ACA NEOGEO GHOST PILOTS",online;status-playable,playable,2021-04-01 20:26:45.000 +01000D10038E6000,"ACA NEOGEO LAST RESORT",online;status-playable,playable,2021-04-01 19:51:22.000 +,"ACA NEOGEO LEAGUE BOWLING",crash;services;status-menus,menus,2020-05-26 17:11:04.000 +,"ACA NEOGEO MAGICAL DROP II",crash;services;status-menus,menus,2020-05-26 16:48:24.000 +01007920038F6000,"ACA NEOGEO MAGICIAN LORD",online;status-playable,playable,2021-04-01 19:33:26.000 +0100EBE002B3E000,"ACA NEOGEO METAL SLUG",status-playable,playable,2021-02-21 13:56:48.000 +010086300486E000,"ACA NEOGEO METAL SLUG 2",online;status-playable,playable,2021-04-01 19:25:52.000 +,"ACA NEOGEO METAL SLUG 3",crash;services;status-menus,menus,2020-05-26 16:32:45.000 +01009CE00AFAE000,"ACA NEOGEO METAL SLUG 4",online;status-playable,playable,2021-04-01 18:12:18.000 +,"ACA NEOGEO Metal Slug X",crash;services;status-menus,menus,2020-05-26 14:07:20.000 +010038F00AFA0000,"ACA NEOGEO Money Puzzle Exchanger",online;status-playable,playable,2021-04-01 17:59:56.000 +01002E70032E8000,"ACA NEOGEO NEO TURF MASTERS",status-playable,playable,2021-02-21 15:12:01.000 +010052A00A306000,"ACA NEOGEO NINJA COMBAT",status-playable,playable,2021-03-29 21:17:28.000 +01007E800AFB6000,"ACA NEOGEO NINJA COMMANDO",online;status-playable,playable,2021-04-01 17:28:18.000 +01003A5001DBA000,"ACA NEOGEO OVER TOP",status-playable,playable,2021-02-21 13:16:25.000 +010088500878C000,"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",online;status-playable,playable,2021-04-01 17:18:27.000 +01005C9002B42000,"ACA NEOGEO SAMURAI SHODOWN",online;status-playable,playable,2021-04-01 17:11:35.000 +010047F001DBC000,"ACA NEOGEO SAMURAI SHODOWN IV",online;status-playable,playable,2021-04-12 12:58:54.000 +010049F00AFE8000,"ACA NEOGEO SAMURAI SHODOWN SPECIAL V",online;status-playable,playable,2021-04-10 18:07:13.000 +01009B300872A000,"ACA NEOGEO SENGOKU 2",online;status-playable,playable,2021-04-10 17:36:44.000 +01008D000877C000,"ACA NEOGEO SENGOKU 3",online;status-playable,playable,2021-04-10 16:11:53.000 +,"ACA NEOGEO SHOCK TROOPERS",crash;services;status-menus,menus,2020-05-26 15:29:34.000 +01007D1004DBA000,"ACA NEOGEO SPIN MASTER",online;status-playable,playable,2021-04-10 15:50:19.000 +010055A00A300000,"ACA NEOGEO SUPER SIDEKICKS 2",online;status-playable,playable,2021-04-10 16:05:58.000 +0100A4D00A308000,"ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY",online;status-playable,playable,2021-04-10 15:39:22.000 +,"ACA NEOGEO THE KING OF FIGHTERS '94",crash;services;status-menus,menus,2020-05-26 15:03:44.000 +01009DC001DB6000,"ACA NEOGEO THE KING OF FIGHTERS '95",status-playable,playable,2021-03-29 20:27:35.000 +01006F0004FB4000,"ACA NEOGEO THE KING OF FIGHTERS '96",online;status-playable,playable,2021-04-10 14:49:10.000 +0100170008728000,"ACA NEOGEO THE KING OF FIGHTERS '97",online;status-playable,playable,2021-04-10 14:43:27.000 +,"ACA NEOGEO THE KING OF FIGHTERS '98",crash;services;status-menus,menus,2020-05-26 14:54:20.000 +0100583001DCA000,"ACA NEOGEO THE KING OF FIGHTERS '99",online;status-playable,playable,2021-04-10 14:36:56.000 +0100B97002B44000,"ACA NEOGEO THE KING OF FIGHTERS 2000",online;status-playable,playable,2021-04-10 15:24:35.000 +010048200AFC2000,"ACA NEOGEO THE KING OF FIGHTERS 2001",online;status-playable,playable,2021-04-10 15:16:23.000 +0100CFD00AFDE000,"ACA NEOGEO THE KING OF FIGHTERS 2002",online;status-playable,playable,2021-04-10 15:01:55.000 +0100EF100AFE6000,"ACA NEOGEO THE KING OF FIGHTERS 2003",online;status-playable,playable,2021-04-10 14:54:31.000 +0100699008792000,"ACA NEOGEO THE LAST BLADE 2",online;status-playable,playable,2021-04-10 14:31:54.000 +0100F7F00AFA2000,"ACA NEOGEO THE SUPER SPY",online;status-playable,playable,2021-04-10 14:26:33.000 +0100CEF001DC0000,"ACA NEOGEO WAKU WAKU 7",online;status-playable,playable,2021-04-10 14:20:52.000 +,"ACA NEOGEO WORLD HEROES PERFECT",crash;services;status-menus,menus,2020-05-26 14:14:36.000 +,"ACA NEOGEO ZUPAPA!",online;status-playable,playable,2021-03-25 20:07:33.000 +0100A9900CB5C000,"Access Denied",status-playable,playable,2022-07-19 15:25:10.000 +01007C50132C8000,"Ace Angler: Fishing Spirits",status-menus;crash,menus,2023-03-03 03:21:39.000 +010033401E68E000,"Ace Attorney Investigations Collection DEMO",status-playable,playable,2024-09-07 06:16:42.000 +010039301B7E0000,"Ace Combat 7 - Skies Unknown Deluxe Edition",gpu;status-ingame;UE4,ingame,2024-09-27 14:31:43.000 +0100FF1004D56000,"Ace of Seafood",status-playable,playable,2022-07-19 15:32:25.000 +,"Aces of the Luftwaffe Squadron",nvdec;slow;status-playable,playable,2020-05-27 12:29:42.000 +010054300D822000,"Aces of the Luftwaffe Squadron Demo",nvdec;status-playable,playable,2021-02-09 13:12:28.000 +0100DBC0081A4000,"ACORN Tactics",status-playable,playable,2021-02-22 12:57:40.000 +,"Across the Grooves",status-playable,playable,2020-06-27 12:29:51.000 +,"Acthung! Cthulhu Tactics",status-playable,playable,2020-12-14 18:40:27.000 +010039A010DA0000,"Active Neurons",status-playable,playable,2021-01-27 21:31:21.000 +01000D1011EF0000,"Active Neurons 2",status-playable,playable,2022-10-07 16:21:42.000 +010031C0122B0000,"Active Neurons 2 Demo",status-playable,playable,2021-02-09 13:40:21.000 +0100EE1013E12000,"Active Neurons 3",status-playable,playable,2021-03-24 12:20:20.000 +,"Actual Sunlight",gpu;status-ingame,ingame,2020-12-14 17:18:41.000 +0100C0C0040E4000,"Adam's Venture: Origins",status-playable,playable,2021-03-04 18:43:57.000 +,"Adrenaline Rush - Miami Drive",status-playable,playable,2020-12-12 22:49:50.000 +0100300012F2A000,"Advance Wars 1+2: Re-Boot Camp",status-playable,playable,2024-01-30 18:19:44.000 +,"Adventure Llama",status-playable,playable,2020-12-14 19:32:24.000 +,"Adventure Pinball Bundle",slow;status-playable,playable,2020-12-14 20:31:53.000 +01003B400A00A000,"Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",status-playable;nvdec,playable,2022-09-17 11:07:56.000 +,"Adventures of Chris",status-playable,playable,2020-12-12 23:00:02.000 +0100A0A0136E8000,"Adventures of Chris Demo",status-playable,playable,2021-02-09 13:49:21.000 +,"Adventures of Pip",nvdec;status-playable,playable,2020-12-12 22:11:55.000 +01008C901266E000,"ADVERSE",UE4;status-playable,playable,2021-04-26 14:32:51.000 +010064500AF72000,"Aegis Defenders Demo",status-playable,playable,2021-02-09 14:04:17.000 +01008E6006502000,"Aegis Defenders0",status-playable,playable,2021-02-22 13:29:33.000 +,"Aeolis Tournament",online;status-playable,playable,2020-12-12 22:02:14.000 +01006710122CE000,"Aeolis Tournament Demo",nvdec;status-playable,playable,2021-02-09 14:22:30.000 +0100A0400DDE0000,"AER - Memories of Old",nvdec;status-playable,playable,2021-03-05 18:43:43.000 +0100E9B013D4A000,"Aerial Knight's Never Yield",status-playable,playable,2022-10-25 22:05:00.000 +0100875011D0C000,"Aery",status-playable,playable,2021-03-07 15:25:51.000 +010018E012914000,"Aery - Sky Castle",status-playable,playable,2022-10-21 17:58:49.000 +0100DF8014056000,"Aery - A Journey Beyond Time",status-playable,playable,2021-04-05 15:52:25.000 +0100087012810000,"Aery - Broken Memories",status-playable,playable,2022-10-04 13:11:52.000 +,"Aery - Calm Mind - 0100A801539000",status-playable,playable,2022-11-14 14:26:58.000 +0100B1C00949A000,"AeternoBlade Demo Version",nvdec;status-playable,playable,2021-02-09 14:39:26.000 +,"AeternoBlade I",nvdec;status-playable,playable,2020-12-14 20:06:48.000 +01009D100EA28000,"AeternoBlade II",status-playable;online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18.000 +,"AeternoBlade II Demo Version",gpu;nvdec;status-ingame,ingame,2021-02-09 15:10:19.000 +01001B400D334000,"AFL Evolution 2",slow;status-playable;online-broken;UE4,playable,2022-12-07 12:45:56.000 +0100DB100BBCE000,"Afterparty",status-playable,playable,2022-09-22 12:23:19.000 +,"Agatha Christie - The ABC Murders",status-playable,playable,2020-10-27 17:08:23.000 +,"Agatha Knife",status-playable,playable,2020-05-28 12:37:58.000 +,"Agent A: A puzzle in disguise",status-playable,playable,2020-11-16 22:53:27.000 +01008E8012C02000,"Agent A: A puzzle in disguise (Demo)",status-playable,playable,2021-02-09 18:30:41.000 +0100E4700E040000,"Ages of Mages: the Last Keeper",status-playable;vulkan-backend-bug,playable,2022-10-04 11:44:05.000 +010004D00A9C0000,"Aggelos",gpu;status-ingame,ingame,2023-02-19 13:24:23.000 +,"Agony",UE4;crash;status-boots,boots,2020-07-10 16:21:18.000 +010089B00D09C000,"Ai: the Somnium Files",status-playable;nvdec,playable,2022-09-04 14:45:06.000 +0100C1700FB34000,"AI: The Somnium Files Demo",nvdec;status-playable,playable,2021-02-10 12:52:33.000 +,"Ailment",status-playable,playable,2020-12-12 22:30:41.000 +,"Air Conflicts: Pacific Carriers",status-playable,playable,2021-01-04 10:52:50.000 +,"Air Hockey",status-playable,playable,2020-05-28 16:44:37.000 +,"Air Missions: HIND",status-playable,playable,2020-12-13 10:16:45.000 +0100E95011FDC000,"Aircraft Evolution",nvdec;status-playable,playable,2021-06-14 13:30:18.000 +010010A00DB72000,"Airfield Mania Demo",services;status-boots;demo,boots,2022-04-10 03:43:02.000 +01003DD00BFEE000,"AIRHEART - Tales of Broken Wings",status-playable,playable,2021-02-26 15:20:27.000 +01007F100DE52000,"Akane",status-playable;nvdec,playable,2022-07-21 00:12:18.000 +,"Akash Path of the Five",gpu;nvdec;status-ingame,ingame,2020-12-14 22:33:12.000 +010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",status-playable,playable,2021-02-22 14:39:35.000 +,"Akuarium",slow;status-playable,playable,2020-12-12 23:43:36.000 +,"Akuto",status-playable,playable,2020-08-04 19:43:27.000 +0100F5400AB6C000,"Alchemic Jousts",gpu;status-ingame,ingame,2022-12-08 15:06:28.000 +,"Alchemist's Castle",status-playable,playable,2020-12-12 23:54:08.000 +,"Alder's Blood",status-playable,playable,2020-08-28 15:15:23.000 +01004510110C4000,"Alder's Blood Prologue",crash;status-ingame,ingame,2021-02-09 19:03:03.000 +01000E000EEF8000,"Aldred - Knight of Honor",services;status-playable,playable,2021-11-30 01:49:17.000 +010025D01221A000,"Alex Kidd in Miracle World DX",status-playable,playable,2022-11-14 15:01:34.000 +,"Alien Cruise",status-playable,playable,2020-08-12 13:56:05.000 +,"Alien Escape",status-playable,playable,2020-06-03 23:43:18.000 +010075D00E8BA000,"Alien: Isolation",status-playable;nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41.000 +0100CBD012FB6000,"All Walls Must Fall",status-playable;UE4,playable,2022-10-15 19:16:30.000 +0100C1F00A9B8000,"All-Star Fruit Racing",status-playable;nvdec;UE4,playable,2022-07-21 00:35:37.000 +0100AC501122A000,"Alluris",gpu;status-ingame;UE4,ingame,2023-08-02 23:13:50.000 +,"Almightree the Last Dreamer",slow;status-playable,playable,2020-12-15 13:59:03.000 +,"Along the Edge",status-playable,playable,2020-11-18 15:00:07.000 +,"Alpaca Ball: Allstars",nvdec;status-playable,playable,2020-12-11 12:26:29.000 +,"ALPHA",status-playable,playable,2020-12-13 12:17:45.000 +,"Alphaset by POWGI",status-playable,playable,2020-12-15 15:15:15.000 +,"Alt-Frequencies",status-playable,playable,2020-12-15 19:01:33.000 +,"Alteric",status-playable,playable,2020-11-08 13:53:22.000 +,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",status-playable,playable,2020-08-31 14:17:42.000 +0100A8A00D27E000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",status-playable,playable,2021-02-10 13:33:59.000 +010045201487C000,"Aluna: Sentinel of the Shards",status-playable;nvdec,playable,2022-10-25 22:17:03.000 +,"Alwa's Awakening",status-playable,playable,2020-10-13 11:52:01.000 +,"Alwa's Legacy",status-playable,playable,2020-12-13 13:00:57.000 +,"American Fugitive",nvdec;status-playable,playable,2021-01-04 20:45:11.000 +010089D00A3FA000,"American Ninja Warrior: Challenge",nvdec;status-playable,playable,2021-06-09 13:11:17.000 +01003CC00D0BE000,"Amnesia: Collection",status-playable,playable,2022-10-04 13:36:15.000 +010041D00DEB2000,"Amoeba Battle - Microscopic RTS Action",status-playable,playable,2021-05-06 13:33:41.000 +010046500C8D2000,"Among the Sleep - Enhanced Edition",nvdec;status-playable,playable,2021-06-03 15:06:25.000 +0100B0C013912000,"Among Us",status-menus;online;ldn-broken,menus,2021-09-22 15:20:17.000 +010050900E1C6000,"Anarcute",status-playable,playable,2021-02-22 13:17:59.000 +01009EE0111CC000,"Ancestors Legacy",status-playable;nvdec;UE4,playable,2022-10-01 12:25:36.000 +,"Ancient Rush 2",UE4;crash;status-menus,menus,2020-07-14 14:58:47.000 +0100AE000AEBC000,"Angels of Death",nvdec;status-playable,playable,2021-02-22 14:17:15.000 +010001E00A5F6000,"AngerForce: Reloaded for Nintendo Switch",status-playable,playable,2022-07-21 10:37:17.000 +0100F3500D05E000,"Angry Bunnies: Colossal Carrot Crusade",status-playable;online-broken,playable,2022-09-04 14:53:26.000 +,"Angry Video Game Nerd I & II Deluxe",crash;status-ingame,ingame,2020-12-12 23:59:54.000 +01007A400B3F8000,"Anima Gate of Memories: The Nameless Chronicles",status-playable,playable,2021-06-14 14:33:06.000 +010033F00B3FA000,"Anima: Arcane Edition",nvdec;status-playable,playable,2021-01-26 16:55:51.000 +0100706005B6A000,"Anima: Gate of Memories",nvdec;status-playable,playable,2021-06-16 18:13:18.000 +0100F38011CFE000,"Animal Crossing New Horizons Island Transfer Tool",services;status-ingame;Needs Update;Incomplete,ingame,2022-12-07 13:51:19.000 +01006F8002326000,"Animal Crossing: New Horizons",gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49.000 +,"Animal Fight Club",gpu;status-ingame,ingame,2020-12-13 13:13:33.000 +,"Animal Fun for Toddlers and Kids",services;status-boots,boots,2020-12-15 16:45:29.000 +,"Animal Hunter Z",status-playable,playable,2020-12-13 12:50:35.000 +010033C0121DC000,"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",services;status-boots,boots,2021-11-29 23:43:14.000 +010065B009B3A000,"Animal Rivals Switch",status-playable,playable,2021-02-22 14:02:42.000 +0100EFE009424000,"Animal Super Squad",UE4;status-playable,playable,2021-04-23 20:50:50.000 +,"Animal Up",status-playable,playable,2020-12-13 15:39:02.000 +010020D01AD24000,"ANIMAL WELL",status-playable,playable,2024-05-22 18:01:49.000 +,"Animals for Toddlers",services;status-boots,boots,2020-12-15 17:27:27.000 +,"Animated Jigsaws Collection",nvdec;status-playable,playable,2020-12-15 15:58:34.000 +0100A1900B5B8000,"Animated Jigsaws: Beautiful Japanese Scenery DEMO",nvdec;status-playable,playable,2021-02-10 13:49:56.000 +,"Anime Studio Story",status-playable,playable,2020-12-15 18:14:05.000 +01002B300EB86000,"Anime Studio Story Demo",status-playable,playable,2021-02-10 14:50:39.000 +,"ANIMUS",status-playable,playable,2020-12-13 15:11:47.000 +0100E5A00FD38000,"Animus: Harbinger",status-playable,playable,2022-09-13 22:09:20.000 +,"Ankh Guardian - Treasure of the Demon's Temple",status-playable,playable,2020-12-13 15:55:49.000 +,"Anode",status-playable,playable,2020-12-15 17:18:58.000 +0100CB9018F5A000,"Another Code: Recollection",gpu;status-ingame;crash,ingame,2024-09-06 05:58:52.000 +,"Another Sight",UE4;gpu;nvdec;status-ingame,ingame,2020-12-03 16:49:59.000 +01003C300AAAE000,"Another World",slow;status-playable,playable,2022-07-21 10:42:38.000 +01000FD00DF78000,"AnShi",status-playable;nvdec;UE4,playable,2022-10-21 19:37:01.000 +010054C00D842000,"Anthill",services;status-menus;nvdec,menus,2021-11-18 09:25:25.000 +0100596011E20000,"Anti-Hero Bundle",status-playable;nvdec,playable,2022-10-21 20:10:30.000 +,"Antiquia Lost",status-playable,playable,2020-05-28 11:57:32.000 +,"Antventor",nvdec;status-playable,playable,2020-12-15 20:09:27.000 +0100FA100620C000,"Ao no Kanata no Four Rhythm",status-playable,playable,2022-07-21 10:50:42.000 +010047000E9AA000,"AO Tennis 2",status-playable;online-broken,playable,2022-09-17 12:05:07.000 +0100990011866000,"Aokana - Four Rhythms Across the Blue",status-playable,playable,2022-10-04 13:50:26.000 +01005B100C268000,"Ape Out",status-playable,playable,2022-09-26 19:04:47.000 +010054500E6D4000,"APE OUT DEMO",status-playable,playable,2021-02-10 14:33:06.000 +,"Aperion Cyberstorm",status-playable,playable,2020-12-14 00:40:16.000 +01008CA00D71C000,"Aperion Cyberstorm Demo",status-playable,playable,2021-02-10 15:53:21.000 +,"Apocalipsis",deadlock;status-menus,menus,2020-05-27 12:56:37.000 +,"Apocryph",gpu;status-ingame,ingame,2020-12-13 23:24:10.000 +,"Apparition",nvdec;slow;status-ingame,ingame,2020-12-13 23:57:04.000 +0100AC10085CE000,"AQUA KITTY UDX",online;status-playable,playable,2021-04-12 15:34:11.000 +,"Aqua Lungers",crash;status-ingame,ingame,2020-12-14 11:25:57.000 +0100D0D00516A000,"Aqua Moto Racing Utopia",status-playable,playable,2021-02-21 21:21:00.000 +010071800BA74000,"Aragami: Shadow Edition",nvdec;status-playable,playable,2021-02-21 20:33:23.000 +0100C7D00E6A0000,"Arc of Alchemist",status-playable;nvdec,playable,2022-10-07 19:15:54.000 +0100BE80097FA000,"Arcade Archives 10-Yard Fight",online;status-playable,playable,2021-03-25 21:26:41.000 +01005DD00BE08000,"Arcade Archives ALPHA MISSION",online;status-playable,playable,2021-04-15 09:20:43.000 +010083800DC70000,"Arcade Archives ALPINE SKI",online;status-playable,playable,2021-04-15 09:28:46.000 +010014F001DE2000,"Arcade Archives ARGUS",online;status-playable,playable,2021-04-16 06:51:25.000 +010014F001DE2000,"Arcade Archives Armed F",online;status-playable,playable,2021-04-16 07:00:17.000 +0100BEC00C7A2000,"Arcade Archives ATHENA",online;status-playable,playable,2021-04-16 07:10:12.000 +0100426001DE4000,"Arcade Archives Atomic Robo-Kid",online;status-playable,playable,2021-04-16 07:20:29.000 +0100192009824000,"Arcade Archives BOMB JACK",online;status-playable,playable,2021-04-16 09:48:26.000 +010007A00980C000,"Arcade Archives City CONNECTION",online;status-playable,playable,2021-03-25 22:16:15.000 +0100EDC00E35A000,"Arcade Archives CLU CLU LAND",online;status-playable,playable,2021-04-16 10:00:42.000 +0100BB1001DD6000,"Arcade Archives CRAZY CLIMBER",online;status-playable,playable,2021-03-25 22:24:15.000 +,"Arcade Archives DONKEY KONG",Needs Update;crash;services;status-menus,menus,2021-03-24 18:18:43.000 +0100F25001DD0000,"Arcade Archives DOUBLE DRAGON",online;status-playable,playable,2021-03-25 22:44:34.000 +01009E3001DDE000,"Arcade Archives DOUBLE DRAGON II The Revenge",online;status-playable,playable,2021-04-12 16:05:29.000 +0100496006EC8000,"Arcade Archives FRONT LINE",online;status-playable,playable,2021-05-05 14:10:49.000 +01009A4008A30000,"Arcade Archives HEROIC EPISODE",online;status-playable,playable,2021-03-25 23:01:26.000 +01007D200D3FC000,"Arcade Archives ICE CLIMBER",online;status-playable,playable,2021-05-05 14:18:34.000 +010049400C7A8000,"Arcade Archives IKARI WARRIORS",online;status-playable,playable,2021-05-05 14:24:46.000 +01000DB00980A000,"Arcade Archives Ikki",online;status-playable,playable,2021-03-25 23:11:28.000 +010008300C978000,"Arcade Archives IMAGE FIGHT",online;status-playable,playable,2021-05-05 14:31:21.000 +010010B008A36000,"Arcade Archives Kid Niki Radical Ninja",audio;status-ingame;online,ingame,2022-07-21 11:02:04.000 +0100E7C001DE0000,"Arcade Archives Kid's Horehore Daisakusen",online;status-playable,playable,2021-04-12 16:21:29.000 +,"Arcade Archives LIFE FORCE",status-playable,playable,2020-09-04 13:26:25.000 +0100755004608000,"Arcade Archives MARIO BROS.",online;status-playable,playable,2021-03-26 11:31:32.000 +01000BE001DD8000,"Arcade Archives MOON CRESTA",online;status-playable,playable,2021-05-05 14:39:29.000 +01003000097FE000,"Arcade Archives MOON PATROL",online;status-playable,playable,2021-03-26 11:42:04.000 +01003EF00D3B4000,"Arcade Archives NINJA GAIDEN",audio;online;status-ingame,ingame,2021-04-12 16:27:53.000 +01002F300D2C6000,"Arcade Archives Ninja Spirit",online;status-playable,playable,2021-05-05 14:45:31.000 +,"Arcade Archives Ninja-Kid",online;status-playable,playable,2021-03-26 20:55:07.000 +,"Arcade Archives OMEGA FIGHTER",crash;services;status-menus,menus,2020-08-18 20:50:54.000 +,"Arcade Archives PLUS ALPHA",audio;status-ingame,ingame,2020-07-04 20:47:55.000 +0100A6E00D3F8000,"Arcade Archives POOYAN",online;status-playable,playable,2021-05-05 17:58:19.000 +01000D200C7A4000,"Arcade Archives PSYCHO SOLDIER",online;status-playable,playable,2021-05-05 18:02:19.000 +01001530097F8000,"Arcade Archives PUNCH-OUT!!",online;status-playable,playable,2021-03-25 22:10:55.000 +010081E001DD2000,"Arcade Archives Renegade",status-playable;online,playable,2022-07-21 11:45:40.000 +0100FBA00E35C000,"Arcade Archives ROAD FIGHTER",online;status-playable,playable,2021-05-05 18:09:17.000 +010060000BF7C000,"Arcade Archives ROUTE 16",online;status-playable,playable,2021-05-05 18:40:41.000 +0100C2D00981E000,"Arcade Archives RYGAR",online;status-playable,playable,2021-04-15 08:48:30.000 +01007A4009834000,"Arcade Archives Shusse Ozumo",online;status-playable,playable,2021-05-05 17:52:25.000 +010008F00B054000,"Arcade Archives Sky Skipper",online;status-playable,playable,2021-04-15 08:58:09.000 +01008C900982E000,"Arcade Archives Solomon's Key",online;status-playable,playable,2021-04-19 16:27:18.000 +010069F008A38000,"Arcade Archives STAR FORCE",online;status-playable,playable,2021-04-15 08:39:09.000 +,"Arcade Archives TERRA CRESTA",crash;services;status-menus,menus,2020-08-18 20:20:55.000 +0100348001DE6000,"Arcade Archives TERRA FORCE",online;status-playable,playable,2021-04-16 20:03:27.000 +0100DFD016B7A000,"Arcade Archives TETRIS THE GRAND MASTER",status-playable,playable,2024-06-23 01:50:29.000 +0100DC000983A000,"Arcade Archives THE NINJA WARRIORS",online;slow;status-ingame,ingame,2021-04-16 19:54:56.000 +0100AF300D2E8000,"Arcade Archives TIME PILOT",online;status-playable,playable,2021-04-16 19:22:31.000 +010029D006ED8000,"Arcade Archives Traverse USA",online;status-playable,playable,2021-04-15 08:11:06.000 +010042200BE0C000,"Arcade Archives URBAN CHAMPION",online;status-playable,playable,2021-04-16 10:20:03.000 +01004EC00E634000,"Arcade Archives VS. GRADIUS",online;status-playable,playable,2021-04-12 14:53:58.000 +,"Arcade Archives VS. SUPER MARIO BROS.",online;status-playable,playable,2021-04-08 14:48:11.000 +01001B000D8B6000,"Arcade Archives WILD WESTERN",online;status-playable,playable,2021-04-16 10:11:36.000 +010050000D6C4000,"Arcade Classics Anniversary Collection",status-playable,playable,2021-06-03 13:55:10.000 +,"ARCADE FUZZ",status-playable,playable,2020-08-15 12:37:36.000 +,"Arcade Spirits",status-playable,playable,2020-06-21 11:45:03.000 +0100E680149DC000,"Arcaea",status-playable,playable,2023-03-16 19:31:21.000 +0100E53013E1C000,"Arcanoid Breakout",status-playable,playable,2021-01-25 23:28:02.000 +,"Archaica: Path of LightInd",crash;status-nothing,nothing,2020-10-16 13:22:26.000 +,"Area 86",status-playable,playable,2020-12-16 16:45:52.000 +0100691013C46000,"ARIA CHRONICLE",status-playable,playable,2022-11-16 13:50:55.000 +0100D4A00B284000,"Ark: Survival Evolved",gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56.000 +,"Arkanoid vs Space Invaders",services;status-ingame,ingame,2021-01-21 12:50:30.000 +010069A010606000,"Arkham Horror: Mother's Embrace",nvdec;status-playable,playable,2021-04-19 15:40:55.000 +,"Armed 7 DX",status-playable,playable,2020-12-14 11:49:56.000 +,"Armello",nvdec;status-playable,playable,2021-01-07 11:43:26.000 +01009B500007C000,"ARMS",status-playable;ldn-works;LAN,playable,2024-08-28 07:49:24.000 +,"ARMS Demo",status-playable,playable,2021-02-10 16:30:13.000 +0100184011B32000,"Arrest of a stone Buddha",status-nothing;crash,nothing,2022-12-07 16:55:00.000 +,"Arrog",status-playable,playable,2020-12-16 17:20:50.000 +01008EC006BE2000,"Art of Balance",gpu;status-ingame;ldn-works,ingame,2022-07-21 17:13:57.000 +010062F00CAE2000,"Art of Balance DEMO",gpu;slow;status-ingame,ingame,2021-02-10 17:17:12.000 +01006AA013086000,"Art Sqool",status-playable;nvdec,playable,2022-10-16 20:42:37.000 +,"Artifact Adventure Gaiden DX",status-playable,playable,2020-12-16 17:49:25.000 +0100C2500CAB6000,"Ary and the Secret of Seasons",status-playable,playable,2022-10-07 20:45:09.000 +,"ASCENDANCE",status-playable,playable,2021-01-05 10:54:40.000 +,"Asemblance",UE4;gpu;status-ingame,ingame,2020-12-16 18:01:23.000 +,"Ash of Gods: Redemption",deadlock;status-nothing,nothing,2020-08-10 18:08:32.000 +010027B00E40E000,"Ashen",status-playable;nvdec;online-broken;UE4,playable,2022-09-17 12:19:14.000 +01007B000C834000,"Asphalt 9: Legends",services;status-menus;crash;online-broken,menus,2022-12-07 13:28:29.000 +01007F600B134000,"Assassin's Creed III Remastered",status-boots;nvdec,boots,2024-06-25 20:12:11.000 +010044700DEB0000,"Assassin's Creed The Rebel Collection",gpu;status-ingame,ingame,2024-05-19 07:58:56.000 +0100DF200B24C000,"Assault Android Cactus+",status-playable,playable,2021-06-03 13:23:55.000 +,"Assault Chainguns KM",crash;gpu;status-ingame,ingame,2020-12-14 12:48:34.000 +0100C5E00E540000,"Assault on Metaltron Demo",status-playable,playable,2021-02-10 19:48:06.000 +010057A00C1F6000,"Astebreed",status-playable,playable,2022-07-21 17:33:54.000 +010050400BD38000,"Asterix & Obelix XXL 2",deadlock;status-ingame;nvdec,ingame,2022-07-21 17:54:14.000 +0100F46011B50000,"Asterix & Obelix XXL: Romastered",gpu;status-ingame;nvdec;opengl,ingame,2023-08-16 21:22:06.000 +010081500EA1E000,"Asterix & Obelix XXL3: The Crystal Menhir",gpu;status-ingame;nvdec;regression,ingame,2022-11-28 14:19:23.000 +01007300020FA000,"Astral Chain",status-playable,playable,2024-07-17 18:02:19.000 +,"Astro Bears Party",status-playable,playable,2020-05-28 11:21:58.000 +0100F0400351C000,"Astro Duel Deluxe",32-bit;status-playable,playable,2021-06-03 11:21:48.000 +0100B80010C48000,"Astrologaster",cpu;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:31.000 +,"AstroWings SpaceWar",status-playable,playable,2020-12-14 13:10:44.000 +010099801870E000,"Atari 50 The Anniversary Celebration",slow;status-playable,playable,2022-11-14 19:42:10.000 +0100D9D00EE8C000,"Atelier Ayesha: The Alchemist of Dusk DX",status-menus;crash;nvdec;Needs Update,menus,2021-11-24 07:29:54.000 +0100E5600EE8E000,"Atelier Escha & Logy: Alchemists Of The Dusk Sky DX",status-playable;nvdec,playable,2022-11-20 16:01:41.000 +010023201421E000,"Atelier Firis: The Alchemist and the Mysterious Journey DX",gpu;status-ingame;nvdec,ingame,2022-10-25 22:46:19.000 +,"Atelier Lulua ~ The Scion of Arland ~",nvdec;status-playable,playable,2020-12-16 14:29:19.000 +010009900947A000,"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings",nvdec;status-playable,playable,2021-06-03 18:37:01.000 +,"Atelier Meruru ~ The Apprentice of Arland ~ DX",nvdec;status-playable,playable,2020-06-12 00:50:48.000 +010088600C66E000,"Atelier Rorona - The Alchemist of Arland - DX",nvdec;status-playable,playable,2021-04-08 15:33:15.000 +01002D700B906000,"Atelier Rorona Arland no Renkinjutsushi DX (JP)",status-playable;nvdec,playable,2022-12-02 17:26:54.000 +01009A9012022000,"Atelier Ryza 2: Lost Legends & the Secret Fairy",status-playable,playable,2022-10-16 21:06:06.000 +0100D1900EC80000,"Atelier Ryza: Ever Darkness & the Secret Hideout",status-playable,playable,2023-10-15 16:36:50.000 +,"Atelier Shallie: Alchemists of the Dusk Sea DX",nvdec;status-playable,playable,2020-11-25 20:54:12.000 +010082A01538E000,"Atelier Sophie 2: The Alchemist of the Mysterious Dream",status-ingame;crash,ingame,2022-12-01 04:34:03.000 +01001A5014220000,"Atelier Sophie: The Alchemist of the Mysterious Book DX",status-playable,playable,2022-10-25 23:06:20.000 +,"Atelier Totori ~ The Adventurer of Arland ~ DX",nvdec;status-playable,playable,2020-06-12 01:04:56.000 +0100B9400FA38000,"ATOM RPG",status-playable;nvdec,playable,2022-10-22 10:11:48.000 +01005FE00EC4E000,"Atomic Heist",status-playable,playable,2022-10-16 21:24:32.000 +0100AD30095A4000,"Atomicrops",status-playable,playable,2022-08-06 10:05:07.000 +,"ATOMIK RunGunJumpGun",status-playable,playable,2020-12-14 13:19:24.000 +,"ATOMINE",gpu;nvdec;slow;status-playable,playable,2020-12-14 18:56:50.000 +,"Attack of the Toy Tanks",slow;status-ingame,ingame,2020-12-14 12:59:12.000 +,"Attack on Titan 2",status-playable,playable,2021-01-04 11:40:01.000 +01000F600B01E000,"ATV Drift & Tricks",UE4;online;status-playable,playable,2021-04-08 17:29:17.000 +,"Automachef",status-playable,playable,2020-12-16 19:51:25.000 +01006B700EA6A000,"Automachef Demo",status-playable,playable,2021-02-10 20:35:37.000 +,"Aviary Attorney: Definitive Edition",status-playable,playable,2020-08-09 20:32:12.000 +,"Avicii Invector",status-playable,playable,2020-10-25 12:12:56.000 +0100E100128BA000,"AVICII Invector Demo",status-playable,playable,2021-02-10 21:04:58.000 +,"AvoCuddle",status-playable,playable,2020-09-02 14:50:13.000 +0100085012D64000,"Awakening of Cthulhu",UE4;status-playable,playable,2021-04-26 13:03:07.000 +01002F1005F3C000,"Away: Journey to the Unexpected",status-playable;nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04.000 +,"Awesome Pea",status-playable,playable,2020-10-11 12:39:23.000 +010023800D3F2000,"Awesome Pea (Demo)",status-playable,playable,2021-02-10 21:48:21.000 +0100B7D01147E000,"Awesome Pea 2",status-playable,playable,2022-10-01 12:34:19.000 +,"Awesome Pea 2 (Demo) - 0100D2011E28000",crash;status-nothing,nothing,2021-02-10 22:08:27.000 +0100DA3011174000,"Axes",status-playable,playable,2021-04-08 13:01:58.000 +,"Axiom Verge",status-playable,playable,2020-10-20 01:07:18.000 +010075400DEC6000,"Ayakashi koi gikyoku Free Trial",status-playable,playable,2021-02-10 22:22:11.000 +01006AF012FC8000,"Azur Lane: Crosswave",UE4;nvdec;status-playable,playable,2021-04-05 15:15:25.000 +,"Azuran Tales: Trials",status-playable,playable,2020-08-12 15:23:07.000 +01006FB00990E000,"Azure Reflections",nvdec;online;status-playable,playable,2021-04-08 13:18:25.000 +01004E90149AA000,"Azure Striker GUNVOLT 3",status-playable,playable,2022-08-10 13:46:49.000 +0100192003FA4000,"Azure Striker Gunvolt: STRIKER PACK",32-bit;status-playable,playable,2024-02-10 23:51:21.000 +,"Azurebreak Heroes",status-playable,playable,2020-12-16 21:26:17.000 +01009B901145C000,"B.ARK",status-playable;nvdec,playable,2022-11-17 13:35:02.000 +01002CD00A51C000,"Baba Is You",status-playable,playable,2022-07-17 05:36:54.000 +,"Back to Bed",nvdec;status-playable,playable,2020-12-16 20:52:04.000 +0100FEA014316000,"Backworlds",status-playable,playable,2022-10-25 23:20:34.000 +0100EAF00E32E000,"BaconMan",status-menus;crash;nvdec,menus,2021-11-20 02:36:21.000 +01000CB00D094000,"Bad Dream: Coma",deadlock;status-boots,boots,2023-08-03 00:54:18.000 +0100B3B00D81C000,"Bad Dream: Fever",status-playable,playable,2021-06-04 18:33:12.000 +,"Bad Dudes",status-playable,playable,2020-12-10 12:30:56.000 +0100E98006F22000,"Bad North",status-playable,playable,2022-07-17 13:44:25.000 +,"Bad North Demo",status-playable,playable,2021-02-10 22:48:38.000 +,"BAFL",status-playable,playable,2021-01-13 08:32:51.000 +010076B011EC8000,"Baila Latino",status-playable,playable,2021-04-14 16:40:24.000 +,"Bakugan Champions of Vestroia",status-playable,playable,2020-11-06 19:07:39.000 +01008260138C4000,"Bakumatsu Renka SHINSENGUMI",status-playable,playable,2022-10-25 23:37:31.000 +0100438012EC8000,"Balan Wonderworld",status-playable;nvdec;UE4,playable,2022-10-22 13:08:43.000 +0100E48013A34000,"Balan Wonderworld Demo",gpu;services;status-ingame;UE4;demo,ingame,2023-02-16 20:05:07.000 +0100CD801CE5E000,"Balatro",status-ingame,ingame,2024-04-21 02:01:53.000 +010010A00DA48000,"Baldur's Gate and Baldur's Gate II: Enhanced Editions",32-bit;status-playable,playable,2022-09-12 23:52:15.000 +0100BC400FB64000,"Balthazar's Dreams",status-playable,playable,2022-09-13 00:13:22.000 +01008D30128E0000,"Bamerang",status-playable,playable,2022-10-26 00:29:39.000 +,"Bang Dream Girls Band Party for Nintendo Switch",status-playable,playable,2021-09-19 03:06:58.000 +010013C010C5C000,"Banner of the Maid",status-playable,playable,2021-06-14 15:23:37.000 +,"Banner Saga 2",crash;status-boots,boots,2021-01-13 08:56:09.000 +,"Banner Saga 3",slow;status-boots,boots,2021-01-11 16:53:57.000 +0100CE800B94A000,"Banner Saga Trilogy",slow;status-playable,playable,2024-03-06 11:25:20.000 +,"Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos",status-playable,playable,2020-07-15 05:06:29.000 +,"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",nvdec;status-playable,playable,2020-12-17 11:43:10.000 +,"Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive",status-playable,playable,2020-12-17 11:22:50.000 +0100D3000AEC2000,"Baobabs Mausoleum: DEMO",status-playable,playable,2021-02-10 22:59:25.000 +01003350102E2000,"Barbarous! Tavern of Emyr",status-playable,playable,2022-10-16 21:50:24.000 +0100F7E01308C000,"Barbearian",Needs Update;gpu;status-ingame,ingame,2021-06-28 16:27:50.000 +010039C0106C6000,"Baron: Fur Is Gonna Fly",status-boots;crash,boots,2022-02-06 02:05:43.000 +,"Barry Bradford's Putt Panic Party",nvdec;status-playable,playable,2020-06-17 01:08:34.000 +01004860080A0000,"Baseball Riot",status-playable,playable,2021-06-04 18:07:27.000 +0100E3100450E000,"Bass Pro Shops: The Strike - Championship Edition",gpu;status-boots;32-bit,boots,2022-12-09 15:58:16.000 +010038600B27E000,"Bastion",status-playable,playable,2022-02-15 14:15:24.000 +,"Batbarian: Testament of the Primordials",status-playable,playable,2020-12-17 12:00:59.000 +0100C07018CA6000,"Baten Kaitos I & II HD Remaster (Europe/USA)",services;status-boots;Needs Update,boots,2023-10-01 00:44:32.000 +0100F28018CA4000,"Baten Kaitos I & II HD Remaster (Japan)",services;status-boots;Needs Update,boots,2023-10-24 23:11:54.000 +,"Batman - The Telltale Series",nvdec;slow;status-playable,playable,2021-01-11 18:19:35.000 +01003f00163ce000,"Batman: Arkham City",status-playable,playable,2024-09-11 00:30:19.000 +0100ACD0163D0000,"Batman: Arkham Knight",gpu;status-ingame;mac-bug,ingame,2024-06-25 20:24:42.000 +,"Batman: The Enemy Within",crash;status-nothing,nothing,2020-10-16 05:49:27.000 +0100747011890000,"Battle Axe",status-playable,playable,2022-10-26 00:38:01.000 +,"Battle Chasers: Nightwar",nvdec;slow;status-playable,playable,2021-01-12 12:27:34.000 +,"Battle Chef Brigade",status-playable,playable,2021-01-11 14:16:28.000 +0100DBB00CAEE000,"Battle Chef Brigade Demo",status-playable,playable,2021-02-10 23:15:07.000 +0100A3B011EDE000,"Battle Hunters",gpu;status-ingame,ingame,2022-11-12 09:19:17.000 +,"Battle of Kings",slow;status-playable,playable,2020-12-17 12:45:23.000 +,"Battle Planet - Judgement Day",status-playable,playable,2020-12-17 14:06:20.000 +,"Battle Princess Madelyn",status-playable,playable,2021-01-11 13:47:23.000 +0100A7500DF64000,"Battle Princess Madelyn Royal Edition",status-playable,playable,2022-09-26 19:14:49.000 +010099B00E898000,"Battle Supremacy - Evolution",gpu;status-boots;nvdec,boots,2022-02-17 09:02:50.000 +0100DEB00D5A8000,"Battle Worlds: Kronos",nvdec;status-playable,playable,2021-06-04 17:48:02.000 +0100650010DD4000,"Battleground",status-ingame;crash,ingame,2021-09-06 11:53:23.000 +,"BATTLESLOTHS",status-playable,playable,2020-10-03 08:32:22.000 +,"BATTLESTAR GALACTICA Deadlock",nvdec;status-playable,playable,2020-06-27 17:35:44.000 +01006D800A988000,"Battlezone Gold Edition",gpu;ldn-untested;online;status-boots,boots,2021-06-04 18:36:05.000 +,"BATTLLOON",status-playable,playable,2020-12-17 15:48:23.000 +0100194010422000,"bayala - the game",status-playable,playable,2022-10-04 14:09:25.000 +010076F0049A2000,"Bayonetta",status-playable;audout,playable,2022-11-20 15:51:59.000 +01007960049A0000,"Bayonetta 2",status-playable;nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09.000 +01004A4010FEA000,"Bayonetta 3",gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33.000 +010002801A3FA000,"Bayonetta Origins Cereza and the Lost Demon Demo",gpu;status-ingame;demo,ingame,2024-02-17 06:06:28.000 +0100CF5010FEC000,"Bayonetta Origins: Cereza and the Lost Demon",gpu;status-ingame,ingame,2024-02-27 01:39:49.000 +,"Be-A Walker",slow;status-ingame,ingame,2020-09-02 15:00:31.000 +010095C00406C000,"Beach Buggy Racing",online;status-playable,playable,2021-04-13 23:16:50.000 +010020700DE04000,"Bear With Me - The Lost Robots",nvdec;status-playable,playable,2021-02-27 14:20:10.000 +010024200E97E800,"Bear With Me - The Lost Robots Demo",nvdec;status-playable,playable,2021-02-12 22:38:12.000 +,"Bear's Restaurant - 0100CE014A4E000",status-playable,playable,2024-08-11 21:26:59.000 +,"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",crash;status-menus,menus,2020-10-04 06:12:08.000 +,"Beat Cop",status-playable,playable,2021-01-06 19:26:48.000 +01002D20129FC000,"Beat Me!",status-playable;online-broken,playable,2022-10-16 21:59:26.000 +01006B0014590000,"Beautiful Desolation",gpu;status-ingame;nvdec,ingame,2022-10-26 10:34:38.000 +,"Bee Simulator",UE4;crash;status-boots,boots,2020-07-15 12:13:13.000 +010018F007786000,"BeeFense BeeMastered",status-playable,playable,2022-11-17 15:38:12.000 +,"Behold the Kickmen",status-playable,playable,2020-06-27 12:49:45.000 +,"Beholder",status-playable,playable,2020-10-16 12:48:58.000 +01006E1004404000,"Ben 10",nvdec;status-playable,playable,2021-02-26 14:08:35.000 +01009CD00E3AA000,"Ben 10: Power Trip",status-playable;nvdec,playable,2022-10-09 10:52:12.000 +010074500BBC4000,"Bendy and the Ink Machine",status-playable,playable,2023-05-06 20:35:39.000 +010021F00C1C0000,"Bertram Fiddle Episode 2: A Bleaker Predicklement",nvdec;status-playable,playable,2021-02-22 14:56:37.000 +010068600AD16000,"Beyblade Burst Battle Zero",services;status-menus;crash;Needs Update,menus,2022-11-20 15:48:32.000 +010056500CAD8000,"Beyond Enemy Lines: Covert Operations",status-playable;UE4,playable,2022-10-01 13:11:50.000 +0100B8F00DACA000,"Beyond Enemy Lines: Essentials",status-playable;nvdec;UE4,playable,2022-09-26 19:48:16.000 +,"Bibi & Tina - Adventures with Horses",nvdec;slow;status-playable,playable,2021-01-13 08:58:09.000 +010062400E69C000,"Bibi & Tina at the horse farm",status-playable,playable,2021-04-06 16:31:39.000 +,"Bibi Blocksberg - Big Broom Race 3",status-playable,playable,2021-01-11 19:07:16.000 +,"Big Buck Hunter Arcade",nvdec;status-playable,playable,2021-01-12 20:31:39.000 +010088100C35E000,"Big Crown: Showdown",status-menus;nvdec;online;ldn-untested,menus,2022-07-17 18:25:32.000 +0100A42011B28000,"Big Dipper",status-playable,playable,2021-06-14 15:08:19.000 +01002FA00DE72000,"Big Drunk Satanic Massacre",status-playable,playable,2021-03-04 21:28:22.000 +,"Big Pharma",status-playable,playable,2020-07-14 15:27:30.000 +,"BIG-Bobby-Car - The Big Race",slow;status-playable,playable,2020-12-10 14:25:06.000 +010057700FF7C000,"Billion Road",status-playable,playable,2022-11-19 15:57:43.000 +,"BINGO for Nintendo Switch",status-playable,playable,2020-07-23 16:17:36.000 +01004BA017CD6000,"Biomutant",status-ingame;crash,ingame,2024-05-16 15:46:36.000 +01002620102C6000,"BioShock 2 Remastered",services;status-nothing,nothing,2022-10-29 14:39:22.000 +0100D560102C8000,"BioShock Infinite: The Complete Edition",services-horizon;status-nothing;crash,nothing,2024-08-11 21:35:01.000 +0100AD10102B2000,"BioShock Remastered",services-horizon;status-boots;crash;Needs Update,boots,2024-06-06 01:08:52.000 +010053B0117F8000,"Biped",status-playable;nvdec,playable,2022-10-01 13:32:58.000 +01001B700B278000,"Bird Game +",status-playable;online,playable,2022-07-17 18:41:57.000 +0100B6B012FF4000,"Birds and Blocks Demo",services;status-boots;demo,boots,2022-04-10 04:53:03.000 +0100E62012D3C000,"BIT.TRIP RUNNER",status-playable,playable,2022-10-17 14:23:24.000 +01000AD012D3A000,"BIT.TRIP VOID",status-playable,playable,2022-10-17 14:31:23.000 +,"Bite the Bullet",status-playable,playable,2020-10-14 23:10:11.000 +010026E0141C8000,"Bitmaster",status-playable,playable,2022-12-13 14:05:51.000 +,"Biz Builder Delux",slow;status-playable,playable,2020-12-15 21:36:25.000 +0100DD1014AB8000,"Black Book",status-playable;nvdec,playable,2022-12-13 16:38:53.000 +010049000B69E000,"Black Future '88",status-playable;nvdec,playable,2022-09-13 11:24:37.000 +01004BE00A682000,"Black Hole Demo",status-playable,playable,2021-02-12 23:02:17.000 +0100C3200E7E6000,"Black Legend",gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48.000 +,"Blackjack Hands",status-playable,playable,2020-11-30 14:04:51.000 +0100A0A00E660000,"Blackmoor2",status-playable;online-broken,playable,2022-09-26 20:26:34.000 +010032000EA2C000,"Blacksad: Under the Skin",status-playable,playable,2022-09-13 11:38:04.000 +01006B400C178000,"Blacksea Odyssey",status-playable;nvdec,playable,2022-10-16 22:14:34.000 +010068E013450000,"Blacksmith of the Sand Kingdom",status-playable,playable,2022-10-16 22:37:44.000 +0100C4400CB7C000,"BLADE ARCUS Rebellion From Shining",status-playable,playable,2022-07-17 18:52:28.000 +0100EA1018A2E000,"Blade Assault",audio;status-nothing,nothing,2024-04-29 14:32:50.000 +01009CC00E224000,"Blade II The Return of Evil",audio;status-ingame;crash;UE4,ingame,2021-11-14 02:49:59.000 +01005950022EC000,"Blade Strangers",status-playable;nvdec,playable,2022-07-17 19:02:43.000 +0100DF0011A6A000,"Bladed Fury",status-playable,playable,2022-10-26 11:36:26.000 +0100CFA00CC74000,"Blades of Time",deadlock;status-boots;online,boots,2022-07-17 19:19:58.000 +01006CC01182C000,"Blair Witch",status-playable;nvdec;UE4,playable,2022-10-01 14:06:16.000 +010039501405E000,"Blanc",gpu;slow;status-ingame,ingame,2023-02-22 14:00:13.000 +0100698009C6E000,"Blasphemous",nvdec;status-playable,playable,2021-03-01 12:15:31.000 +0100302010338000,"Blasphemous Demo",status-playable,playable,2021-02-12 23:49:56.000 +0100225000FEE000,"Blaster Master Zero",32-bit;status-playable,playable,2021-03-05 13:22:33.000 +01005AA00D676000,"Blaster Master Zero 2",status-playable,playable,2021-04-08 15:22:59.000 +010025B002E92000,"Blaster Master Zero DEMO",status-playable,playable,2021-02-12 23:59:06.000 +,"BLAZBLUE CENTRALFICTION Special Edition",nvdec;status-playable,playable,2020-12-15 23:50:04.000 +,"BlazBlue: Cross Tag Battle",nvdec;online;status-playable,playable,2021-01-05 20:29:37.000 +,"Blazing Beaks",status-playable,playable,2020-06-04 20:37:06.000 +,"Blazing Chrome",status-playable,playable,2020-11-16 04:56:54.000 +010091700EA2A000,"Bleep Bloop DEMO",nvdec;status-playable,playable,2021-02-13 00:20:53.000 +010089D011310000,"Blind Men",audout;status-playable,playable,2021-02-20 14:15:38.000 +0100743013D56000,"Blizzard Arcade Collection",status-playable;nvdec,playable,2022-08-03 19:37:26.000 +0100F3500A20C000,"BlobCat",status-playable,playable,2021-04-23 17:09:30.000 +0100E1C00DB6C000,"Block-a-Pix Deluxe Demo",status-playable,playable,2021-02-13 00:37:39.000 +0100C6A01AD56000,"Bloo Kid",status-playable,playable,2024-05-01 17:18:04.000 +010055900FADA000,"Bloo Kid 2",status-playable,playable,2024-05-01 17:16:57.000 +,"Blood & Guts Bundle",status-playable,playable,2020-06-27 12:57:35.000 +01007E700D17E000,"Blood Waves",gpu;status-ingame,ingame,2022-07-18 13:04:46.000 +,"Blood will be Spilled",nvdec;status-playable,playable,2020-12-17 03:02:03.000 +,"Bloodstained: Curse of the Moon",status-playable,playable,2020-09-04 10:42:17.000 +,"Bloodstained: Curse of the Moon 2",status-playable,playable,2020-09-04 10:56:27.000 +010025A00DF2A000,"Bloodstained: Ritual of the Night",status-playable;nvdec;UE4,playable,2022-07-18 14:27:35.000 +0100E510143EC000,"Bloody Bunny : The Game",status-playable;nvdec;UE4,playable,2022-10-22 13:18:55.000 +0100B8400A1C6000,"Bloons TD 5",Needs Update;audio;gpu;services;status-boots,boots,2021-04-18 23:02:46.000 +0100C1000706C000,"Blossom Tales",status-playable,playable,2022-07-18 16:43:07.000 +01000EB01023E000,"Blossom Tales Demo",status-playable,playable,2021-02-13 14:22:53.000 +010073B010F6E000,"Blue Fire",status-playable;UE4,playable,2022-10-22 14:46:11.000 +0100721013510000,"Body of Evidence",status-playable,playable,2021-04-25 22:22:11.000 +0100AD1010CCE000,"Bohemian Killing",status-playable;vulkan-backend-bug,playable,2022-09-26 22:41:37.000 +010093700ECEC000,"Boku to Nurse no Kenshuu Nisshi",status-playable,playable,2022-11-21 20:38:34.000 +01001D900D9AC000,"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",slow;status-ingame;crash;Needs Update,ingame,2022-04-24 22:46:04.000 +0100317014B7C000,"Bomb Rush Cyberfunk",status-playable,playable,2023-09-28 19:51:57.000 +01007900080B6000,"Bomber Crew",status-playable,playable,2021-06-03 14:21:28.000 +0100A1F012948000,"Bomber Fox",nvdec;status-playable,playable,2021-04-19 17:58:13.000 +010087300445A000,"Bombslinger",services;status-menus,menus,2022-07-19 12:53:15.000 +01007A200F452000,"Book of Demons",status-playable,playable,2022-09-29 12:03:43.000 +,"Bookbound Brigade",status-playable,playable,2020-10-09 14:30:29.000 +,"Boom Blaster",status-playable,playable,2021-03-24 10:55:56.000 +010081A00EE62000,"Boomerang Fu",status-playable,playable,2024-07-28 01:12:41.000 +010069F0135C4000,"Boomerang Fu Demo Version",demo;status-playable,playable,2021-02-13 14:38:13.000 +010096F00FF22000,"Borderlands 2: Game of the Year Edition",status-playable,playable,2022-04-22 18:35:07.000 +01009970122E4000,"Borderlands 3",gpu;status-ingame,ingame,2024-07-15 04:38:14.000 +010064800F66A000,"Borderlands: Game of the Year Edition",slow;status-ingame;online-broken;ldn-untested,ingame,2023-07-23 21:10:36.000 +010007400FF24000,"Borderlands: The Pre-Sequel Ultimate Edition",nvdec;status-playable,playable,2021-06-09 20:17:10.000 +01008E500AFF6000,"Boreal Blade",gpu;ldn-untested;online;status-ingame,ingame,2021-06-11 15:37:14.000 +010092C013FB8000,"Boris The Rocket",status-playable,playable,2022-10-26 13:23:09.000 +010076F00EBE4000,"Bossgard",status-playable;online-broken,playable,2022-10-04 14:21:13.000 +010069B00EAC8000,"Bot Vice Demo",crash;demo;status-ingame,ingame,2021-02-13 14:52:42.000 +,"Bouncy Bob 2",status-playable,playable,2020-07-14 16:51:53.000 +0100E1200DC1A000,"Bounty Battle",status-playable;nvdec,playable,2022-10-04 14:40:51.000 +,"Bow to Blood: Last Captain Standing",slow;status-playable,playable,2020-10-23 10:51:21.000 +,"BOX Align",crash;services;status-nothing,nothing,2020-04-03 17:26:56.000 +,"BOXBOY! + BOXGIRL!",status-playable,playable,2020-11-08 01:11:54.000 +0100B7200E02E000,"BOXBOY! + BOXGIRL! Demo",demo;status-playable,playable,2021-02-13 14:59:08.000 +,"BQM BlockQuest Maker",online;status-playable,playable,2020-07-31 20:56:50.000 +0100E87017D0E000,"Bramble The Mountain King",services-horizon;status-playable,playable,2024-03-06 09:32:17.000 +,"Brave Dungeon + Dark Witch's Story: COMBAT",status-playable,playable,2021-01-12 21:06:34.000 +01006DC010326000,"Bravely Default II",gpu;status-ingame;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26.000 +0100B6801137E000,"Bravely Default II Demo",gpu;status-ingame;crash;UE4;demo,ingame,2022-09-27 05:39:47.000 +010081501371E000,"BraveMatch",status-playable;UE4,playable,2022-10-26 13:32:15.000 +0100F60017D4E000,"Bravery and Greed",gpu;deadlock;status-boots,boots,2022-12-04 02:23:47.000 +,"Brawl",nvdec;slow;status-playable,playable,2020-06-04 14:23:18.000 +010068F00F444000,"Brawl Chess",status-playable;nvdec,playable,2022-10-26 13:59:17.000 +0100C6800B934000,"Brawlhalla",online;opengl;status-playable,playable,2021-06-03 18:26:09.000 +010060200A4BE000,"Brawlout",ldn-untested;online;status-playable,playable,2021-06-04 17:35:35.000 +0100C1B00E1CA000,"Brawlout Demo",demo;status-playable,playable,2021-02-13 22:46:53.000 +010022C016DC8000,"Breakout: Recharged",slow;status-ingame,ingame,2022-11-06 15:32:57.000 +01000AA013A5E000,"Breathedge",UE4;nvdec;status-playable,playable,2021-05-06 15:44:28.000 +,"Breathing Fear",status-playable,playable,2020-07-14 15:12:29.000 +,"Brick Breaker",crash;status-ingame,ingame,2020-12-15 17:03:59.000 +,"Brick Breaker",nvdec;online;status-playable,playable,2020-12-15 18:26:23.000 +,"Bridge 3",status-playable,playable,2020-10-08 20:47:24.000 +,"Bridge Constructor: The Walking Dead",gpu;slow;status-ingame,ingame,2020-12-11 17:31:32.000 +010011000EA7A000,"Brigandine: The Legend of Runersia",status-playable,playable,2021-06-20 06:52:25.000 +0100703011258000,"Brigandine: The Legend of Runersia Demo",status-playable,playable,2021-02-14 14:44:10.000 +01000BF00BE40000,"Bring Them Home",UE4;status-playable,playable,2021-04-12 14:14:43.000 +010060A00B53C000,"Broforce",ldn-untested;online;status-playable,playable,2021-05-28 12:23:38.000 +0100EDD0068A6000,"Broken Age",status-playable,playable,2021-06-04 17:40:32.000 +,"Broken Lines",status-playable,playable,2020-10-16 00:01:37.000 +01001E60085E6000,"Broken Sword 5 - the Serpent's Curse",status-playable,playable,2021-06-04 17:28:59.000 +0100F19011226000,"Brotherhood United Demo",demo;status-playable,playable,2021-02-14 21:10:57.000 +01000D500D08A000,"Brothers: A Tale of Two Sons",status-playable;nvdec;UE4,playable,2022-07-19 14:02:22.000 +,"Brunch Club",status-playable,playable,2020-06-24 13:54:07.000 +010010900F7B4000,"Bubble Bobble 4 Friends",nvdec;status-playable,playable,2021-06-04 15:27:55.000 +0100DBE00C554000,"Bubsy: Paws on Fire!",slow;status-ingame,ingame,2023-08-24 02:44:51.000 +,"Bucket Knight",crash;status-ingame,ingame,2020-09-04 13:11:24.000 +0100F1B010A90000,"Bucket Knight demo",demo;status-playable,playable,2021-02-14 21:23:09.000 +01000D200AC0C000,"Bud Spencer & Terence Hill - Slaps and Beans",status-playable,playable,2022-07-17 12:37:00.000 +,"Bug Fables",status-playable,playable,2020-06-09 11:27:00.000 +01003DD00D658000,"BULLETSTORM: DUKE OF SWITCH EDITION",status-playable;nvdec,playable,2022-03-03 08:30:24.000 +,"BurgerTime Party!",slow;status-playable,playable,2020-11-21 14:11:53.000 +01005780106E8000,"BurgerTime Party! Demo",demo;status-playable,playable,2021-02-14 21:34:16.000 +,"Buried Stars",status-playable,playable,2020-09-07 14:11:58.000 +0100DBF01000A000,"Burnout Paradise Remastered",nvdec;online;status-playable,playable,2021-06-13 02:54:46.000 +,"Bury me, my Love",status-playable,playable,2020-11-07 12:47:37.000 +010030D012FF6000,"Bus Driver Simulator",status-playable,playable,2022-10-17 13:55:27.000 +,"BUSTAFELLOWS",nvdec;status-playable,playable,2020-10-17 20:04:41.000 +,"BUTCHER",status-playable,playable,2021-01-11 18:50:17.000 +0100E24004510000,"Cabela's: The Hunt - Championship Edition",status-menus;32-bit,menus,2022-07-21 20:21:25.000 +01000B900D8B0000,"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda",slow;status-playable;nvdec,playable,2024-04-01 22:43:40.000 +,"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600",demo;gpu;nvdec;status-ingame,ingame,2021-02-14 21:48:15.000 +,"Café Enchanté",status-playable,playable,2020-11-13 14:54:25.000 +010060400D21C000,"Cafeteria Nipponica Demo",demo;status-playable,playable,2021-02-14 22:11:35.000 +0100699012F82000,"Cake Bash Demo",crash;demo;status-ingame,ingame,2021-02-14 22:21:15.000 +01004FD00D66A000,"Caladrius Blaze",deadlock;status-nothing;nvdec,nothing,2022-12-07 16:44:37.000 +,"Calculation Castle: Greco's Ghostly Challenge ""Addition",32-bit;status-playable,playable,2020-11-01 23:40:11.000 +,"Calculation Castle: Greco's Ghostly Challenge ""Division",32-bit;status-playable,playable,2020-11-01 23:54:55.000 +,"Calculation Castle: Greco's Ghostly Challenge ""Multiplication",32-bit;status-playable,playable,2020-11-02 00:04:33.000 +,"Calculation Castle: Greco's Ghostly Challenge ""Subtraction",32-bit;status-playable,playable,2020-11-01 23:47:42.000 +010004701504A000,"Calculator",status-playable,playable,2021-06-11 13:27:20.000 +010013A00E750000,"Calico",status-playable,playable,2022-10-17 14:44:28.000 +010046000EE40000,"Call of Cthulhu",status-playable;nvdec;UE4,playable,2022-12-18 03:08:30.000 +0100B4700BFC6000,"Call of Juarez: Gunslinger",gpu;status-ingame;nvdec,ingame,2022-09-17 16:49:46.000 +0100593008BDC000,"Can't Drive This",status-playable,playable,2022-10-22 14:55:17.000 +,"Candle - The Power of the Flame",nvdec;status-playable,playable,2020-05-26 12:10:20.000 +01001E0013208000,"Capcom Arcade Stadium",status-playable,playable,2021-03-17 05:45:14.000 +,"Capcom Beat 'Em Up Bundle",status-playable,playable,2020-03-23 18:31:24.000 +0100F6400A77E000,"CAPCOM BELT ACTION COLLECTION",status-playable;online;ldn-untested,playable,2022-07-21 20:51:23.000 +01009BF0072D4000,"Captain Toad: Treasure Tracker",32-bit;status-playable,playable,2024-04-25 00:50:16.000 +01002C400B6B6000,"Captain Toad: Treasure Tracker Demo",32-bit;demo;status-playable,playable,2021-02-14 22:36:09.000 +0100EAE010560000,"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS",status-playable;online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50.000 +01002320137CC000,"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",slow;status-playable,playable,2021-02-14 22:45:35.000 +,"Car Mechanic Manager",status-playable,playable,2020-07-23 18:50:17.000 +01007BD00AE70000,"Car Quest",deadlock;status-menus,menus,2021-11-18 08:59:18.000 +0100DA70115E6000,"Caretaker",status-playable,playable,2022-10-04 14:52:24.000 +0100DD6014870000,"Cargo Crew Driver",status-playable,playable,2021-04-19 12:54:22.000 +010088C0092FE000,"Carnival Games",status-playable;nvdec,playable,2022-07-21 21:01:22.000 +,"Carnivores: Dinosaur Hunt",status-playable,playable,2022-12-14 18:46:06.000 +,"CARRION",crash;status-nothing,nothing,2020-08-13 17:15:12.000 +01008D1001512000,"Cars 3 Driven to Win",gpu;status-ingame,ingame,2022-07-21 21:21:05.000 +0100810012A1A000,"Carto",status-playable,playable,2022-09-04 15:37:06.000 +0100C4E004406000,"Cartoon Network Adventure Time: Pirates of the Enchiridion",status-playable;nvdec,playable,2022-07-21 21:49:01.000 +0100085003A2A000,"Cartoon Network Battle Crashers",status-playable,playable,2022-07-21 21:55:40.000 +0100C4C0132F8000,"CASE 2: Animatronics Survival",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03.000 +010066F01A0E0000,"Cassette Beasts",status-playable,playable,2024-07-22 20:38:43.000 +010001300D14A000,"Castle Crashers Remastered",gpu;status-boots,boots,2024-08-10 09:21:20.000 +0100F6D01060E000,"Castle Crashers Remastered Demo",gpu;status-boots;demo,boots,2022-04-10 10:57:10.000 +01003C100445C000,"Castle of Heart",status-playable;nvdec,playable,2022-07-21 23:10:45.000 +0100F5500FA0E000,"Castle of No Escape 2",status-playable,playable,2022-09-13 13:51:42.000 +0100DA2011F18000,"Castle Pals",status-playable,playable,2021-03-04 21:00:33.000 +010097C00AB66000,"Castlestorm",status-playable;nvdec,playable,2022-07-21 22:49:14.000 +,"CastleStorm 2",UE4;crash;nvdec;status-boots,boots,2020-10-25 11:22:44.000 +,"Castlevania Anniversary Collection",audio;status-playable,playable,2020-05-23 11:40:29.000 +010076000C86E000,"Cat Girl Without Salad: Amuse-Bouche",status-playable,playable,2022-09-03 13:01:47.000 +,"Cat Quest",status-playable,playable,2020-04-02 23:09:32.000 +,"Cat Quest II",status-playable,playable,2020-07-06 23:52:09.000 +0100E86010220000,"Cat Quest II Demo",demo;status-playable,playable,2021-02-15 14:11:57.000 +0100BF00112C0000,"Catherine Full Body",status-playable;nvdec,playable,2023-04-02 11:00:37.000 +0100BAE0077E4000,"Catherine Full Body for Nintendo Switch (JP)",Needs Update;gpu;status-ingame,ingame,2021-02-21 18:06:11.000 +010004400B28A000,"Cattails",status-playable,playable,2021-06-03 14:36:57.000 +,"Cave Story+",status-playable,playable,2020-05-22 09:57:25.000 +01001A100C0E8000,"Caveblazers",slow;status-ingame,ingame,2021-06-09 17:57:28.000 +,"Caveman Warriors",status-playable,playable,2020-05-22 11:44:20.000 +,"Caveman Warriors Demo",demo;status-playable,playable,2021-02-15 14:44:08.000 +,"Celeste",status-playable,playable,2020-06-17 10:14:40.000 +01006B000A666000,"Cendrillon palikA",gpu;status-ingame;nvdec,ingame,2022-07-21 22:52:24.000 +01007600115CE000,"CHAOS CODE -NEW SIGN OF CATASTROPHE-",status-boots;crash;nvdec,boots,2022-04-04 12:24:21.000 +0100957016B90000,"CHAOS;HEAD NOAH",status-playable,playable,2022-06-02 22:57:19.000 +0100F52013A66000,"Charge Kid",gpu;status-boots;audout,boots,2024-02-11 01:17:47.000 +,"Chasm",status-playable,playable,2020-10-23 11:03:43.000 +010034301A556000,"Chasm: The Rift",gpu;status-ingame,ingame,2024-04-29 19:02:48.000 +0100A5900472E000,"Chess Ultra",status-playable;UE4,playable,2023-08-30 23:06:31.000 +0100E3C00A118000,"Chicken Assassin: Reloaded",status-playable,playable,2021-02-20 13:29:01.000 +,"Chicken Police - Paint it RED!",nvdec;status-playable,playable,2020-12-10 15:10:11.000 +0100F6C00A016000,"Chicken Range",status-playable,playable,2021-04-23 12:14:23.000 +,"Chicken Rider",status-playable,playable,2020-05-22 11:31:17.000 +0100CAC011C3A000,"Chickens Madness DEMO",UE4;demo;gpu;nvdec;status-ingame,ingame,2021-02-15 15:02:10.000 +,"Child of Light",nvdec;status-playable,playable,2020-12-16 10:23:10.000 +01002DE00C250000,"Children of Morta",gpu;status-ingame;nvdec,ingame,2022-09-13 17:48:47.000 +,"Children of Zodiarcs",status-playable,playable,2020-10-04 14:23:33.000 +010046F012A04000,"Chinese Parents",status-playable,playable,2021-04-08 12:56:41.000 +01006A30124CA000,"Chocobo GP",gpu;status-ingame;crash,ingame,2022-06-04 14:52:18.000 +,"Chocobo's Mystery Dungeon Every Buddy!",slow;status-playable,playable,2020-05-26 13:53:13.000 +,"Choices That Matter: And The Sun Went Out",status-playable,playable,2020-12-17 15:44:08.000 +,"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",gpu;nvdec;status-ingame,ingame,2020-09-28 17:58:04.000 +,"ChromaGun",status-playable,playable,2020-05-26 12:56:42.000 +,"Chronos",UE4;gpu;nvdec;status-ingame,ingame,2020-12-11 22:16:35.000 +,"Circle of Sumo",status-playable,playable,2020-05-22 12:45:21.000 +01008FA00D686000,"Circuits",status-playable,playable,2022-09-19 11:52:50.000 +,"Cities: Skylines - Nintendo Switch Edition",status-playable,playable,2020-12-16 10:34:57.000 +0100E4200D84E000,"Citizens of Space",gpu;status-boots,boots,2023-10-22 06:45:44.000 +0100D9C012900000,"Citizens Unite!: Earth x Space",gpu;status-ingame,ingame,2023-10-22 06:44:19.000 +01005E501284E000,"City Bus Driving Simulator",status-playable,playable,2021-06-15 21:25:59.000 +0100A3A00CC7E000,"CLANNAD",status-playable,playable,2021-06-03 17:01:02.000 +,"CLANNAD Side Stories - 01007B01372C000",status-playable,playable,2022-10-26 15:03:04.000 +01005ED0107F4000,"Clash Force",status-playable,playable,2022-10-01 23:45:48.000 +010009300AA6C000,"Claybook",slow;status-playable;nvdec;online;UE4,playable,2022-07-22 11:11:34.000 +,"Clea",crash;status-ingame,ingame,2020-12-15 16:22:56.000 +010045E0142A4000,"Clea 2",status-playable,playable,2021-04-18 14:25:18.000 +01008C100C572000,"Clock Zero ~Shuuen no Ichibyou~ Devote",status-playable;nvdec,playable,2022-12-04 22:19:14.000 +0100DF9013AD4000,"Clocker",status-playable,playable,2021-04-05 15:05:13.000 +0100B7200DAC6000,"Close to the Sun",status-boots;crash;nvdec;UE4,boots,2021-11-04 09:19:41.000 +010047700D540000,"Clubhouse Games: 51 Worldwide Classics",status-playable;ldn-works,playable,2024-05-21 16:12:57.000 +,"Clue",crash;online;status-menus,menus,2020-11-10 09:23:48.000 +,"ClusterPuck 99",status-playable,playable,2021-01-06 00:28:12.000 +010096900A4D2000,"Clustertruck",slow;status-ingame,ingame,2021-02-19 21:07:09.000 +01005790110F0000,"Cobra Kai The Karate Kid Saga Continues",status-playable,playable,2021-06-17 15:59:13.000 +01002E700C366000,"COCOON",gpu;status-ingame,ingame,2024-03-06 11:33:08.000 +010034E005C9C000,"Code of Princess EX",nvdec;online;status-playable,playable,2021-06-03 10:50:13.000 +,"CODE SHIFTER",status-playable,playable,2020-08-09 15:20:55.000 +010002400F408000,"Code: Realize ~Future Blessings~",status-playable;nvdec,playable,2023-03-31 16:57:47.000 +0100CF800C810000,"Coffee Crisis",status-playable,playable,2021-02-20 12:34:52.000 +,"Coffee Talk",status-playable,playable,2020-08-10 09:48:44.000 +0100178009648000,"Coffin Dodgers",status-playable,playable,2021-02-20 14:57:41.000 +010035B01706E000,"Cold Silence",cpu;status-nothing;crash,nothing,2024-07-11 17:06:14.000 +010083E00F40E000,"Collar X Malice",status-playable;nvdec,playable,2022-10-02 11:51:56.000 +0100E3B00F412000,"Collar X Malice -Unlimited-",status-playable;nvdec,playable,2022-10-04 15:30:40.000 +,"Collection of Mana",status-playable,playable,2020-10-19 19:29:45.000 +,"COLLECTION of SaGA FINAL FANTASY LEGEND",status-playable,playable,2020-12-30 19:11:16.000 +010030800BC36000,"Collidalot",status-playable;nvdec,playable,2022-09-13 14:09:27.000 +,"Color Zen",status-playable,playable,2020-05-22 10:56:17.000 +,"Colorgrid",status-playable,playable,2020-10-04 01:50:52.000 +0100A7000BD28000,"Coloring Book",status-playable,playable,2022-07-22 11:17:05.000 +010020500BD86000,"Colors Live",gpu;services;status-boots;crash,boots,2023-02-26 02:51:07.000 +0100E2F0128B4000,"Colossus Down",status-playable,playable,2021-02-04 20:49:50.000 +0100C4D00D16A000,"Commander Keen in Keen Dreams",gpu;status-ingame,ingame,2022-08-04 20:34:20.000 +0100E400129EC000,"Commander Keen in Keen Dreams: Definitive Edition",status-playable,playable,2021-05-11 19:33:54.000 +010065A01158E000,"Commandos 2 HD Remaster",gpu;status-ingame;nvdec,ingame,2022-08-10 21:52:27.000 +010015801308E000,"CONARIUM",UE4;nvdec;status-playable,playable,2021-04-26 17:57:53.000 +0100971011224000,"Concept Destruction",status-playable,playable,2022-09-29 12:28:56.000 +010043700C9B0000,"Conduct TOGETHER!",nvdec;status-playable,playable,2021-02-20 12:59:00.000 +,"Conga Master Party!",status-playable,playable,2020-05-22 13:22:24.000 +,"Connection Haunted",slow;status-playable,playable,2020-12-10 18:57:14.000 +0100A5600FAC0000,"Construction Simulator 3 - Console Edition",status-playable,playable,2023-02-06 09:31:23.000 +,"Constructor Plus",status-playable,playable,2020-05-26 12:37:40.000 +0100DCA00DA7E000,"Contra Anniversary Collection",status-playable,playable,2022-07-22 11:30:12.000 +,"CONTRA: ROGUE CORPS",crash;nvdec;regression;status-menus,menus,2021-01-07 13:23:35.000 +0100B8200ECA6000,"CONTRA: ROGUE CORPS Demo",gpu;status-ingame,ingame,2022-09-04 16:46:52.000 +01007D701298A000,"Contraptions",status-playable,playable,2021-02-08 18:40:50.000 +0100041013360000,"Control Ultimate Edition - Cloud Version",Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:34:06.000 +,"Convoy",status-playable,playable,2020-10-15 14:43:50.000 +0100B82010B6C000,"Cook, Serve, Delicious! 3?!",status-playable,playable,2022-10-09 12:09:34.000 +010060700EFBA000,"Cooking Mama: Cookstar",status-menus;crash;loader-allocator,menus,2021-11-20 03:19:35.000 +01001E400FD58000,"Cooking Simulator",status-playable,playable,2021-04-18 13:25:23.000 +,"Cooking Tycoons 2: 3 in 1 Bundle",status-playable,playable,2020-11-16 22:19:33.000 +,"Cooking Tycoons: 3 in 1 Bundle",status-playable,playable,2020-11-16 22:44:26.000 +,"Copperbell",status-playable,playable,2020-10-04 15:54:36.000 +010016400B1FE000,"Corpse Party: Blood Drive",nvdec;status-playable,playable,2021-03-01 12:44:23.000 +0100CCB01B1A0000,"Cosmic Fantasy Collection",status-ingame,ingame,2024-05-21 17:56:37.000 +010067C00A776000,"Cosmic Star Heroine",status-playable,playable,2021-02-20 14:30:47.000 +01003DD00F94A000,"COTTOn Reboot! [ コットン リブート! ]",status-playable,playable,2022-05-24 16:29:24.000 +,"Cotton/Guardian Saturn Tribute Games",gpu;status-boots,boots,2022-11-27 21:00:51.000 +01000E301107A000,"Couch Co-Op Bundle Vol. 2",status-playable;nvdec,playable,2022-10-02 12:04:21.000 +0100C1E012A42000,"Country Tales",status-playable,playable,2021-06-17 16:45:39.000 +01003370136EA000,"Cozy Grove",gpu;status-ingame,ingame,2023-07-30 22:22:19.000 +010073401175E000,"Crash Bandicoot 4: It's About Time",status-playable;nvdec;UE4,playable,2024-03-17 07:13:45.000 +0100D1B006744000,"Crash Bandicoot N. Sane Trilogy",status-playable,playable,2024-02-11 11:38:14.000 +,"Crash Drive 2",online;status-playable,playable,2020-12-17 02:45:46.000 +,"Crash Dummy",nvdec;status-playable,playable,2020-05-23 11:12:43.000 +0100F9F00C696000,"Crash Team Racing Nitro-Fueled",gpu;status-ingame;nvdec;online-broken,ingame,2023-06-25 02:40:17.000 +0100BF200CD74000,"Crashbots",status-playable,playable,2022-07-22 13:50:52.000 +010027100BD16000,"Crashlands",status-playable,playable,2021-05-27 20:30:06.000 +,"Crawl",status-playable,playable,2020-05-22 10:16:05.000 +0100C66007E96000,"Crayola Scoot",status-playable;nvdec,playable,2022-07-22 14:01:55.000 +01005BA00F486000,"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",status-playable,playable,2021-07-21 10:41:33.000 +,"Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!",services;status-menus,menus,2020-03-20 14:00:57.000 +,"Crazy Strike Bowling EX",UE4;gpu;nvdec;status-ingame,ingame,2020-08-07 18:15:59.000 +,"Crazy Zen Mini Golf",status-playable,playable,2020-08-05 14:00:00.000 +,"Creaks",status-playable,playable,2020-08-15 12:20:52.000 +,"Creature in the Well",UE4;gpu;status-ingame,ingame,2020-11-16 12:52:40.000 +,"Creepy Tale",status-playable,playable,2020-12-15 21:58:03.000 +,"Cresteaju",gpu;status-ingame,ingame,2021-03-24 10:46:06.000 +010022D00D4F0000,"Cricket 19",gpu;status-ingame,ingame,2021-06-14 14:56:07.000 +0100387017100000,"Cricket 22",status-boots;crash,boots,2023-10-18 08:01:57.000 +01005640080B0000,"Crimsonland",status-playable,playable,2021-05-27 20:50:54.000 +0100B0400EBC4000,"Cris Tales",crash;status-ingame,ingame,2021-07-29 15:10:53.000 +01004BC0166CC000,"CRISIS CORE –FINAL FANTASY VII– REUNION",status-playable,playable,2022-12-19 15:53:59.000 +,"Croc's World",status-playable,playable,2020-05-22 11:21:09.000 +,"Croc's World 2",status-playable,playable,2020-12-16 20:01:40.000 +,"Croc's World 3",status-playable,playable,2020-12-30 18:53:26.000 +01000F0007D92000,"Croixleur Sigma",status-playable;online,playable,2022-07-22 14:26:54.000 +01003D90058FC000,"CrossCode",status-playable,playable,2024-02-17 10:23:19.000 +0100B1E00AA56000,"Crossing Souls",nvdec;status-playable,playable,2021-02-20 15:42:54.000 +0100059012BAE000,"Crown Trick",status-playable,playable,2021-06-16 19:36:29.000 +0100B41013C82000,"Cruis'n Blast",gpu;status-ingame,ingame,2023-07-30 10:33:47.000 +01000CC01C108000,"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",status-playable;demo,playable,2023-08-06 05:33:21.000 +0100CEA007D08000,"Crypt of the Necrodancer",status-playable;nvdec,playable,2022-11-01 09:52:06.000 +0100582010AE0000,"Crysis 2 Remastered",deadlock;status-menus,menus,2023-09-21 10:46:17.000 +0100CD3010AE2000,"Crysis 3 Remastered",deadlock;status-menus,menus,2023-09-10 16:03:50.000 +0100E66010ADE000,"Crysis Remastered",status-menus;nvdec,menus,2024-08-13 05:23:24.000 +0100972008234000,"Crystal Crisis",nvdec;status-playable,playable,2021-02-20 13:52:44.000 +,"Cthulhu Saves Christmas",status-playable,playable,2020-12-14 00:58:55.000 +010001600D1E8000,"Cube Creator X",status-menus;crash,menus,2021-11-25 08:53:28.000 +010082E00F1CE000,"Cubers: Arena",status-playable;nvdec;UE4,playable,2022-10-04 16:05:40.000 +010040D011D04000,"Cubicity",status-playable,playable,2021-06-14 14:19:51.000 +0100A5C00D162000,"Cuphead",status-playable,playable,2022-02-01 22:45:55.000 +0100F7E00DFC8000,"Cupid Parasite",gpu;status-ingame,ingame,2023-08-21 05:52:36.000 +,"Curious Cases",status-playable,playable,2020-08-10 09:30:48.000 +0100D4A0118EA000,"Curse of the Dead Gods",status-playable,playable,2022-08-30 12:25:38.000 +0100CE5014026000,"Curved Space",status-playable,playable,2023-01-14 22:03:50.000 +,"Cyber Protocol",nvdec;status-playable,playable,2020-09-28 14:47:40.000 +0100C1F0141AA000,"Cyber Shadow",status-playable,playable,2022-07-17 05:37:41.000 +01006B9013672000,"Cybxus Heart",gpu;slow;status-ingame,ingame,2022-01-15 05:00:49.000 +010063100B2C2000,"Cytus α",nvdec;status-playable,playable,2021-02-20 13:40:46.000 +0100B6400CA56000,"DAEMON X MACHINA",UE4;audout;ldn-untested;nvdec;status-playable,playable,2021-06-09 19:22:29.000 +010061300DF48000,"Dairoku: Ayakashimori",status-nothing;Needs Update;loader-allocator,nothing,2021-11-30 05:09:38.000 +0100BD2009A1C000,"Damsel",status-playable,playable,2022-09-06 11:54:39.000 +,"Dandara",status-playable,playable,2020-05-26 12:42:33.000 +,"Dandy Dungeon: Legend of Brave Yamada",status-playable,playable,2021-01-06 09:48:47.000 +01003ED0099B0000,"Danger Mouse",status-boots;crash;online,boots,2022-07-22 15:49:45.000 +,"Danger Scavenger -",nvdec;status-playable,playable,2021-04-17 15:53:04.000 +,"Danmaku Unlimited 3",status-playable,playable,2020-11-15 00:48:35.000 +,"Darius Cozmic Collection",status-playable,playable,2021-02-19 20:59:06.000 +010059C00BED4000,"Darius Cozmic Collection Special Edition",status-playable,playable,2022-07-22 16:26:50.000 +010015800F93C000,"Dariusburst - Another Chronicle EX+",online;status-playable,playable,2021-04-05 14:21:43.000 +01003D301357A000,"Dark Arcana: The Carnival",gpu;slow;status-ingame,ingame,2022-02-19 08:52:28.000 +010083A00BF6C000,"Dark Devotion",status-playable;nvdec,playable,2022-08-09 09:41:18.000 +,"Dark Quest 2",status-playable,playable,2020-11-16 21:34:52.000 +01004AB00A260000,"DARK SOULS™: REMASTERED",gpu;status-ingame;nvdec;online-broken,ingame,2024-04-09 19:47:58.000 +,"Dark Witch Music Episode: Rudymical",status-playable,playable,2020-05-22 09:44:44.000 +01008F1008DA6000,"Darkest Dungeon",status-playable;nvdec,playable,2022-07-22 18:49:18.000 +0100F2300D4BA000,"Darksiders Genesis",status-playable;nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25.000 +010071800BA98000,"Darksiders II Deathinitive Edition",gpu;status-ingame;nvdec;online-broken,ingame,2024-06-26 00:37:25.000 +0100E1400BA96000,"Darksiders Warmastered Edition",status-playable;nvdec,playable,2023-03-02 18:08:09.000 +,"Darkwood",status-playable,playable,2021-01-08 21:24:06.000 +0100440012FFA000,"DARQ Complete Edition",audout;status-playable,playable,2021-04-07 15:26:21.000 +0100BA500B660000,"Darts Up",status-playable,playable,2021-04-14 17:22:22.000 +0100F0B0081DA000,"Dawn of the Breakers",status-menus;online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03.000 +,"Day and Night",status-playable,playable,2020-12-17 12:30:51.000 +,"De Blob",nvdec;status-playable,playable,2021-01-06 17:34:46.000 +,"de Blob 2",nvdec;status-playable,playable,2021-01-06 13:00:16.000 +01008E900471E000,"De Mambo",status-playable,playable,2021-04-10 12:39:40.000 +01004C400CF96000,"Dead by Daylight",status-boots;nvdec;online-broken;UE4,boots,2022-09-13 14:32:13.000 +0100646009FBE000,"Dead Cells",status-playable,playable,2021-09-22 22:18:49.000 +01004C500BD40000,"Dead End Job",status-playable;nvdec,playable,2022-09-19 12:48:44.000 +01009CC00C97C000,"DEAD OR ALIVE Xtreme 3 Scarlet",status-playable,playable,2022-07-23 17:05:06.000 +0100A5000F7AA000,"DEAD OR SCHOOL",status-playable;nvdec,playable,2022-09-06 12:04:09.000 +0100A24011F52000,"Dead Z Meat",UE4;services;status-ingame,ingame,2021-04-14 16:50:16.000 +,"Deadly Days",status-playable,playable,2020-11-27 13:38:55.000 +0100BAC011928000,"Deadly Premonition 2",status-playable,playable,2021-06-15 14:12:36.000 +0100EBE00F22E000,"DEADLY PREMONITION Origins",32-bit;status-playable;nvdec,playable,2024-03-25 12:47:46.000 +,"Dear Magi - Mahou Shounen Gakka -",status-playable,playable,2020-11-22 16:45:16.000 +,"Death and Taxes",status-playable,playable,2020-12-15 20:27:49.000 +010012B011AB2000,"Death Come True",nvdec;status-playable,playable,2021-06-10 22:30:49.000 +0100F3B00CF32000,"Death Coming",status-nothing;crash,nothing,2022-02-06 07:43:03.000 +0100AEC013DDA000,"Death end re;Quest",status-playable,playable,2023-07-09 12:19:54.000 +,"Death Mark",status-playable,playable,2020-12-13 10:56:25.000 +0100423009358000,"Death Road to Canada",gpu;audio;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:26.000 +,"Death Squared",status-playable,playable,2020-12-04 13:00:15.000 +,"Death Tales",status-playable,playable,2020-12-17 10:55:52.000 +0100492011A8A000,"Death's Hangover",gpu;status-boots,boots,2023-08-01 22:38:06.000 +01009120119B4000,"Deathsmiles I・II",status-playable,playable,2024-04-08 19:29:00.000 +010034F00BFC8000,"Debris Infinity",nvdec;online;status-playable,playable,2021-05-28 12:14:39.000 +010027700FD2E000,"Decay of Logos",status-playable;nvdec,playable,2022-09-13 14:42:13.000 +0100EF0015A9A000,"Deedlit in Wonder Labyrinth",deadlock;status-ingame;Needs Update;Incomplete,ingame,2022-01-19 10:00:59.000 +01002CC0062B8000,"Deemo",status-playable,playable,2022-07-24 11:34:33.000 +01008B10132A2000,"DEEMO -Reborn-",status-playable;nvdec;online-broken,playable,2022-10-17 15:18:11.000 +010026800FA88000,"Deep Diving Adventures",status-playable,playable,2022-09-22 16:43:37.000 +,"Deep Ones",services;status-nothing,nothing,2020-04-03 02:54:19.000 +0100C3E00D68E000,"Deep Sky Derelicts Definitive Edition",status-playable,playable,2022-09-27 11:21:08.000 +,"Deep Space Rush",status-playable,playable,2020-07-07 23:30:33.000 +0100961011BE6000,"DeepOne",services-horizon;status-nothing;Needs Update,nothing,2024-01-18 15:01:05.000 +01008BB00F824000,"Defenders of Ekron - Definitive Edition",status-playable,playable,2021-06-11 16:31:03.000 +0100CDE0136E6000,"Defentron",status-playable,playable,2022-10-17 15:47:56.000 +,"Defunct",status-playable,playable,2021-01-08 21:33:46.000 +,"Degrees of Separation",status-playable,playable,2021-01-10 13:40:04.000 +010071C00CBA4000,"Dei Gratia no Rashinban",crash;status-nothing,nothing,2021-07-13 02:25:32.000 +,"Deleveled",slow;status-playable,playable,2020-12-15 21:02:29.000 +010023800D64A000,"DELTARUNE Chapter 1",status-playable,playable,2023-01-22 04:47:44.000 +010038B01D2CA000,"Dementium: The Ward (Dementium Remastered)",status-boots;crash,boots,2024-09-02 08:28:14.000 +0100AB600ACB4000,"Demetrios - The BIG Cynical Adventure",status-playable,playable,2021-06-04 12:01:01.000 +010099D00D1A4000,"Demolish & Build",status-playable,playable,2021-06-13 15:27:26.000 +010084600F51C000,"Demon Pit",status-playable;nvdec,playable,2022-09-19 13:35:15.000 +0100A2B00BD88000,"Demon's Crystals",status-nothing;crash;regression,nothing,2022-12-07 16:33:17.000 +,"Demon's Rise",status-playable,playable,2020-07-29 12:26:27.000 +0100E29013818000,"Demon's Rise - Lords of Chaos",status-playable,playable,2021-04-06 16:20:06.000 +0100161011458000,"Demon's Tier+",status-playable,playable,2021-06-09 17:25:36.000 +0100BE800E6D8000,"DEMON'S TILT",status-playable,playable,2022-09-19 13:22:46.000 +,"Demong Hunter",status-playable,playable,2020-12-12 15:27:08.000 +0100BC501355A000,"Densha de go!! Hashirou Yamanote Sen",status-playable;nvdec;UE4,playable,2023-11-09 07:47:58.000 +,"Depixtion",status-playable,playable,2020-10-10 18:52:37.000 +01000BF00B6BC000,"Deployment",slow;status-playable;online-broken,playable,2022-10-17 16:23:59.000 +010023600C704000,"Deponia",nvdec;status-playable,playable,2021-01-26 17:17:19.000 +,"DERU - The Art of Cooperation",status-playable,playable,2021-01-07 16:59:59.000 +,"Descenders",gpu;status-ingame,ingame,2020-12-10 15:22:36.000 +,"Desire remaster ver.",crash;status-boots,boots,2021-01-17 02:34:37.000 +,"DESTINY CONNECT",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 12:20:36.000 +01008BB011ED6000,"Destrobots",status-playable,playable,2021-03-06 14:37:05.000 +01009E701356A000,"Destroy All Humans!",gpu;status-ingame;nvdec;UE4,ingame,2023-01-14 22:23:53.000 +010030600E65A000,"Detective Dolittle",status-playable,playable,2021-03-02 14:03:59.000 +01009C0009842000,"Detective Gallo",status-playable;nvdec,playable,2022-07-24 11:51:04.000 +,"Detective Jinguji Saburo Prism of Eyes",status-playable,playable,2020-10-02 21:54:41.000 +010007500F27C000,"Detective Pikachu Returns",status-playable,playable,2023-10-07 10:24:59.000 +010031B00CF66000,"Devil Engine",status-playable,playable,2021-06-04 11:54:30.000 +01002F000E8F2000,"Devil Kingdom",status-playable,playable,2023-01-31 08:58:44.000 +,"Devil May Cry",nvdec;status-playable,playable,2021-01-04 19:43:08.000 +01007CF00D5BA000,"Devil May Cry 2",status-playable;nvdec,playable,2023-01-24 23:03:20.000 +01007B600D5BC000,"Devil May Cry 3 Special Edition",status-playable;nvdec,playable,2024-07-08 12:33:23.000 +01003C900EFF6000,"Devil Slayer - Raksasi",status-playable,playable,2022-10-26 19:42:32.000 +01009EA00A320000,"Devious Dungeon",status-playable,playable,2021-03-04 13:03:06.000 +,"Dex",nvdec;status-playable,playable,2020-08-12 16:48:12.000 +,"Dexteritrip",status-playable,playable,2021-01-06 12:51:12.000 +0100AFC00E06A000,"Dezatopia",online;status-playable,playable,2021-06-15 21:06:11.000 +0100726014352000,"Diablo 2 Resurrected",gpu;status-ingame;nvdec,ingame,2023-08-18 18:42:47.000 +01001B300B9BE000,"Diablo III: Eternal Collection",status-playable;online-broken;ldn-works,playable,2023-08-21 23:48:03.000 +0100F73011456000,"Diabolic",status-playable,playable,2021-06-11 14:45:08.000 +010027400BD24000,"DIABOLIK LOVERS CHAOS LINEAGE",gpu;status-ingame;Needs Update,ingame,2023-06-08 02:20:44.000 +0100BBF011394000,"Dicey Dungeons",gpu;audio;slow;status-ingame,ingame,2023-08-02 20:30:12.000 +,"Die for Valhalla!",status-playable,playable,2021-01-06 16:09:14.000 +0100BB900B5B4000,"Dies irae Amantes amentes For Nintendo Switch",status-nothing;32-bit;crash,nothing,2022-02-16 07:09:05.000 +0100A5A00DBB0000,"Dig Dog",gpu;status-ingame,ingame,2021-06-02 17:17:51.000 +010035D0121EC000,"Digerati Presents: The Dungeon Crawl Vol. 1",slow;status-ingame,ingame,2021-04-18 14:04:55.000 +010014E00DB56000,"Digimon Story Cyber Sleuth: Complete Edition",status-playable;nvdec;opengl,playable,2022-09-13 15:02:37.000 +0100F00014254000,"Digimon World: Next Order",status-playable,playable,2023-05-09 20:41:06.000 +,"Ding Dong XL",status-playable,playable,2020-07-14 16:13:19.000 +,"Dininho Adventures",status-playable,playable,2020-10-03 17:25:51.000 +010027E0158A6000,"Dininho Space Adventure",status-playable,playable,2023-01-14 22:43:04.000 +0100A8A013DA4000,"Dirt Bike Insanity",status-playable,playable,2021-01-31 13:27:38.000 +01004CB01378A000,"Dirt Trackin Sprint Cars",status-playable;nvdec;online-broken,playable,2022-10-17 16:34:56.000 +0100918014B02000,"Disagaea 6: Defiance of Destiny Demo",status-playable;demo,playable,2022-10-26 20:02:04.000 +010020700E2A2000,"Disaster Report 4: Summer Memories",status-playable;nvdec;UE4,playable,2022-09-27 19:41:31.000 +0100510004D2C000,"Disc Jam",UE4;ldn-untested;nvdec;online;status-playable,playable,2021-04-08 16:40:35.000 +,"Disco Dodgeball Remix",online;status-playable,playable,2020-09-28 23:24:49.000 +01004B100AF18000,"Disgaea 1 Complete",status-playable,playable,2023-01-30 21:45:23.000 +,"Disgaea 4 Complete Plus",gpu;slow;status-playable,playable,2020-02-18 10:54:28.000 +010068C00F324000,"Disgaea 4 Complete+ Demo",status-playable;nvdec,playable,2022-09-13 15:21:59.000 +01005700031AE000,"Disgaea 5 Complete",nvdec;status-playable,playable,2021-03-04 15:32:54.000 +0100ABC013136000,"Disgaea 6: Defiance of Destiny",deadlock;status-ingame,ingame,2023-04-15 00:50:32.000 +0100307011D80000,"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",status-playable,playable,2021-06-08 13:20:33.000 +01005EE013888000,"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",gpu;status-ingame;demo,ingame,2022-12-06 15:27:59.000 +01000B70122A2000,"Disjunction",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24.000 +0100A2F00EEFC000,"Disney Classic Games: Aladdin and The Lion King",status-playable;online-broken,playable,2022-09-13 15:44:17.000 +0100DA201EBF8000,"Disney Epic Mickey: Rebrushed",status-ingame;crash,ingame,2024-09-26 22:11:51.000 +0100F0401435E000,"Disney SpeedStorm",services;status-boots,boots,2023-11-27 02:15:32.000 +,"Disney Tsum Tsum Festival",crash;status-menus,menus,2020-07-14 14:05:28.000 +,"DISTRAINT 2",status-playable,playable,2020-09-03 16:08:12.000 +,"DISTRAINT: Deluxe Edition",status-playable,playable,2020-06-15 23:42:24.000 +010027400CDC6000,"Divinity Original Sin 2",services;status-menus;crash;online-broken;regression,menus,2023-08-13 17:20:03.000 +01001770115C8000,"Dodo Peak",status-playable;nvdec;UE4,playable,2022-10-04 16:13:05.000 +01005A001489A000,"DoDonPachi Resurrection - 怒首領蜂大復活",status-ingame;32-bit;crash,ingame,2024-01-25 14:37:32.000 +,"Dogurai",status-playable,playable,2020-10-04 02:40:16.000 +010048100D51A000,"Dokapon Up! Mugen no Roulette",gpu;status-menus;Needs Update,menus,2022-12-08 19:39:10.000 +,"Dokuro",nvdec;status-playable,playable,2020-12-17 14:47:09.000 +010007200AC0E000,"Don't Die Mr. Robot DX",status-playable;nvdec,playable,2022-09-02 18:34:38.000 +0100E470067A8000,"Don't Knock Twice",status-playable,playable,2024-05-08 22:37:58.000 +0100C4D00B608000,"Don't Sink",gpu;status-ingame,ingame,2021-02-26 15:41:11.000 +0100751007ADA000,"Don't Starve",status-playable;nvdec,playable,2022-02-05 20:43:34.000 +010088B010DD2000,"Dongo Adventure",status-playable,playable,2022-10-04 16:22:26.000 +0100C1F0051B6000,"Donkey Kong Country Tropical Freeze",status-playable,playable,2024-08-05 16:46:10.000 +,"Doodle Derby",status-boots,boots,2020-12-04 22:51:48.000 +0100416004C00000,"DOOM",gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-09-23 15:40:07.000 +010018900DD00000,"DOOM (1993)",status-menus;nvdec;online-broken,menus,2022-09-06 13:32:19.000 +01008CB01E52E000,"DOOM + DOOM II",status-playable;opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01.000 +0100D4F00DD02000,"DOOM 2",nvdec;online;status-playable,playable,2021-06-03 20:10:01.000 +010029D00E740000,"DOOM 3",status-menus;crash,menus,2024-08-03 05:25:47.000 +,"DOOM 64",nvdec;status-playable;vulkan,playable,2020-10-13 23:47:28.000 +0100B1A00D8CE000,"DOOM Eternal",gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-08-28 15:57:17.000 +01005ED00CD70000,"Door Kickers: Action Squad",status-playable;online-broken;ldn-broken,playable,2022-09-13 16:28:53.000 +,"DORAEMON STORY OF SEASONS",nvdec;status-playable,playable,2020-07-13 20:28:11.000 +,"Double Cross",status-playable,playable,2021-01-07 15:34:22.000 +,"Double Dragon & Kunio-Kun: Retro Brawler Bundle",status-playable,playable,2020-09-01 12:48:46.000 +01001AD00E49A000,"DOUBLE DRAGON Ⅲ: The Sacred Stones",online;status-playable,playable,2021-06-11 15:41:44.000 +01005B10132B2000,"Double Dragon Neon",gpu;audio;status-ingame;32-bit,ingame,2022-09-20 18:00:20.000 +,"Double Kick Heroes",gpu;status-ingame,ingame,2020-10-03 14:33:59.000 +0100A5D00C7C0000,"Double Pug Switch",status-playable;nvdec,playable,2022-10-10 10:59:35.000 +0100FC000EE10000,"Double Switch - 25th Anniversary Edition",status-playable;nvdec,playable,2022-09-19 13:41:50.000 +0100B6600FE06000,"Down to Hell",gpu;status-ingame;nvdec,ingame,2022-09-19 14:01:26.000 +010093D00C726000,"Downwell",status-playable,playable,2021-04-25 20:05:24.000 +0100ED000D390000,"Dr Kawashima's Brain Training",services;status-ingame,ingame,2023-06-04 00:06:46.000 +,"Dracula's Legacy",nvdec;status-playable,playable,2020-12-10 13:24:25.000 +,"DragoDino",gpu;nvdec;status-ingame,ingame,2020-08-03 20:49:16.000 +0100DBC00BD5A000,"Dragon Audit",crash;status-ingame,ingame,2021-05-16 14:24:46.000 +0100A250097F0000,"DRAGON BALL FighterZ",UE4;ldn-broken;nvdec;online;status-playable,playable,2021-06-11 16:19:04.000 +010078D000F88000,"Dragon Ball Xenoverse 2",gpu;status-ingame;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01.000 +010051C0134F8000,"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",status-playable;vulkan-backend-bug,playable,2024-08-28 00:03:50.000 +010089700150E000,"Dragon Marked for Death: Frontline Fighters (Empress & Warrior)",status-playable;ldn-untested;audout,playable,2022-03-10 06:44:34.000 +0100EFC00EFB2000,"Dragon Quest",gpu;status-boots,boots,2021-11-09 03:31:32.000 +010008900705C000,"Dragon Quest Builders",gpu;status-ingame;nvdec,ingame,2023-08-14 09:54:36.000 +010042000A986000,"Dragon Quest Builders 2",status-playable,playable,2024-04-19 16:36:38.000 +0100CD3000BDC000,"Dragon Quest Heroes I + II (JP)",nvdec;status-playable,playable,2021-04-08 14:27:16.000 +010062200EFB4000,"Dragon Quest II: Luminaries of the Legendary Line",status-playable,playable,2022-09-13 16:44:11.000 +01003E601E324000,"Dragon Quest III HD-2D Remake",status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27.000 +010015600EFB6000,"Dragon Quest III: The Seeds of Salvation",gpu;status-boots,boots,2021-11-09 03:38:34.000 +0100A77018EA0000,"DRAGON QUEST MONSTERS: The Dark Prince",status-playable,playable,2023-12-29 16:10:05.000 +0100217014266000,"Dragon Quest Treasures",gpu;status-ingame;UE4,ingame,2023-05-09 11:16:52.000 +0100E2E0152E4000,"Dragon Quest X Awakening Five Races Offline",status-playable;nvdec;UE4,playable,2024-08-20 10:04:24.000 +01006C300E9F0000,"Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition",status-playable;UE4,playable,2021-11-27 12:27:11.000 +010032C00AC58000,"Dragon's Dogma: Dark Arisen",status-playable,playable,2022-07-24 12:58:33.000 +,"Dragon's Lair Trilogy",nvdec;status-playable,playable,2021-01-13 22:12:07.000 +,"DragonBlaze for Nintendo Switch",32-bit;status-playable,playable,2020-10-14 11:11:28.000 +,"DragonFangZ",status-playable,playable,2020-09-28 21:35:18.000 +,"Dragons Dawn of New Riders",nvdec;status-playable,playable,2021-01-27 20:05:26.000 +0100F7800A434000,"Drawful 2",status-ingame,ingame,2022-07-24 13:50:21.000 +0100B7E0102E4000,"Drawngeon: Dungeons of Ink and Paper",gpu;status-ingame,ingame,2022-09-19 15:41:25.000 +,"Dream",status-playable,playable,2020-12-15 19:55:07.000 +,"Dream Alone - 0100AA0093DC000",nvdec;status-playable,playable,2021-01-27 19:41:50.000 +,"DreamBall",UE4;crash;gpu;status-ingame,ingame,2020-08-05 14:45:25.000 +010058B00F3C0000,"Dreaming Canvas",UE4;gpu;status-ingame,ingame,2021-06-13 22:50:07.000 +0100D24013466000,"Dreamo",status-playable;UE4,playable,2022-10-17 18:25:28.000 +0100236011B4C000,"DreamWorks Spirit Lucky's Big Adventure",status-playable,playable,2022-10-27 13:30:52.000 +010058C00A916000,"Drone Fight",status-playable,playable,2022-07-24 14:31:56.000 +010052000A574000,"Drowning",status-playable,playable,2022-07-25 14:28:26.000 +,"Drums",status-playable,playable,2020-12-17 17:21:51.000 +01005BC012C66000,"Duck Life Adventure",status-playable,playable,2022-10-10 11:27:03.000 +01007EF00CB88000,"Duke Nukem 3D: 20th Anniversary World Tour",32-bit;status-playable;ldn-untested,playable,2022-08-19 22:22:40.000 +010068D0141F2000,"Dull Grey",status-playable,playable,2022-10-27 13:40:38.000 +0100926013600000,"Dungeon Nightmares 1 + 2 Collection",status-playable,playable,2022-10-17 18:54:22.000 +010034300F0E2000,"Dungeon of the Endless",nvdec;status-playable,playable,2021-05-27 19:16:26.000 +,"Dungeon Stars",status-playable,playable,2021-01-18 14:28:37.000 +,"Dungeons & Bombs",status-playable,playable,2021-04-06 12:46:22.000 +0100EC30140B6000,"Dunk Lords",status-playable,playable,2024-06-26 00:07:26.000 +010011C00E636000,"Dusk Diver",status-boots;crash;UE4,boots,2021-11-06 09:01:30.000 +0100B6E00A420000,"Dust: An Elysian Tail",status-playable,playable,2022-07-25 15:28:12.000 +,"Dustoff Z",status-playable,playable,2020-12-04 23:22:29.000 +01008c8012920000,"Dying Light: Platinum Edition",services-horizon;status-boots,boots,2024-03-11 10:43:32.000 +,"Dyna Bomb",status-playable,playable,2020-06-07 13:26:55.000 +0100E9A00CB30000,"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",status-playable;nvdec,playable,2024-06-26 00:16:30.000 +010008900BC5A000,"DYSMANTLE",gpu;status-ingame,ingame,2024-07-15 16:24:12.000 +0100BDB01A0E6000,"EA Sports FC 24",status-boots,boots,2023-10-04 18:32:59.000 +010054E01D878000,"EA SPORTS FC 25",status-ingame;crash,ingame,2024-09-25 21:07:50.000 +01001C8016B4E000,"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",gpu;status-ingame;crash,ingame,2024-06-10 23:33:05.000 +010037400C7DA000,"Eagle Island",status-playable,playable,2021-04-10 13:15:42.000 +0100B9E012992000,"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",status-playable;UE4,playable,2022-12-07 12:59:16.000 +0100298014030000,"Earth Defense Force: World Brothers",status-playable;UE4,playable,2022-10-27 14:13:31.000 +01009B7006C88000,"EARTH WARS",status-playable,playable,2021-06-05 11:18:33.000 +0100DFC00E472000,"Earthfall: Alien Horde",status-playable;nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37.000 +01006E50042EA000,"Earthlock",status-playable,playable,2021-06-05 11:51:02.000 +0100A2E00BB0C000,"EarthNight",status-playable,playable,2022-09-19 21:02:20.000 +0100DCE00B756000,"Earthworms",status-playable,playable,2022-07-25 16:28:55.000 +,"Earthworms Demo",status-playable,playable,2021-01-05 16:57:11.000 +0100ECF01800C000,"Easy Come Easy Golf",status-playable;online-broken;regression,playable,2024-04-04 16:15:00.000 +0100A9B009678000,"EAT BEAT DEADSPIKE-san",audio;status-playable;Needs Update,playable,2022-12-02 19:25:29.000 +0100BCA016636000,"eBaseball Powerful Pro Yakyuu 2022",gpu;services-horizon;status-nothing;crash,nothing,2024-05-26 23:07:19.000 +,"Eclipse: Edge of Light",status-playable,playable,2020-08-11 23:06:29.000 +,"eCrossminton",status-playable,playable,2020-07-11 18:24:27.000 +0100ABE00DB4E000,"Edna & Harvey: Harvey's New Eyes",nvdec;status-playable,playable,2021-01-26 14:36:08.000 +01004F000B716000,"Edna & Harvey: The Breakout - Anniversary Edition",status-ingame;crash;nvdec,ingame,2022-08-01 16:59:56.000 +01002550129F0000,"Effie",status-playable,playable,2022-10-27 14:36:39.000 +,"Ego Protocol",nvdec;status-playable,playable,2020-12-16 20:16:35.000 +,"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",status-playable,playable,2020-11-12 00:11:50.000 +01003AD013BD2000,"Eight Dragons",status-playable;nvdec,playable,2022-10-27 14:47:28.000 +010020A01209C000,"El Hijo - A Wild West Tale",nvdec;status-playable,playable,2021-04-19 17:44:08.000 +,"Elden: Path of the Forgotten",status-playable,playable,2020-12-15 00:33:19.000 +,"ELEA: Paradigm Shift",UE4;crash;status-nothing,nothing,2020-10-04 19:07:43.000 +0100A6700AF10000,"Element",status-playable,playable,2022-07-25 17:17:16.000 +0100128003A24000,"Elliot Quest",status-playable,playable,2022-07-25 17:46:14.000 +,"Elrador Creatures",slow;status-playable,playable,2020-12-12 12:35:35.000 +010041A00FEC6000,"Ember",status-playable;nvdec,playable,2022-09-19 21:16:11.000 +,"Embracelet",status-playable,playable,2020-12-04 23:45:00.000 +010017b0102a8000,"Emma: Lost in Memories",nvdec;status-playable,playable,2021-01-28 16:19:10.000 +010068300E08E000,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo",gpu;status-ingame;nvdec,ingame,2022-11-20 16:18:45.000 +,"Enchanting Mahjong Match",gpu;status-ingame,ingame,2020-04-17 22:01:31.000 +01004F3011F92000,"Endless Fables: Dark Moor",gpu;nvdec;status-ingame,ingame,2021-03-07 15:31:03.000 +010067B017588000,"Endless Ocean Luminous",services-horizon;status-ingame;crash,ingame,2024-05-30 02:05:57.000 +0100B8700BD14000,"Energy Cycle Edge",services;status-ingame,ingame,2021-11-30 05:02:31.000 +,"Energy Invasion",status-playable,playable,2021-01-14 21:32:26.000 +0100C6200A0AA000,"Enigmatis 2: The Mists of Ravenwood",crash;regression;status-boots,boots,2021-06-06 15:15:30.000 +01009D60076F6000,"Enter the Gungeon",status-playable,playable,2022-07-25 20:28:33.000 +0100262009626000,"Epic Loon",status-playable;nvdec,playable,2022-07-25 22:06:13.000 +01000FA0149B6000,"EQI",status-playable;nvdec;UE4,playable,2022-10-27 16:42:32.000 +0100E95010058000,"EQQO",UE4;nvdec;status-playable,playable,2021-06-13 23:10:51.000 +,"Escape First",status-playable,playable,2020-10-20 22:46:53.000 +010021201296A000,"Escape First 2",status-playable,playable,2021-03-24 11:59:41.000 +0100FEF00F0AA000,"Escape from Chernobyl",status-boots;crash,boots,2022-09-19 21:36:58.000 +010023E013244000,"Escape from Life Inc",status-playable,playable,2021-04-19 17:34:09.000 +,"Escape from Tethys",status-playable,playable,2020-10-14 22:38:25.000 +,"Escape Game Fort Boyard",status-playable,playable,2020-07-12 12:45:43.000 +0100F9600E746000,"ESP Ra.De. Psi",audio;slow;status-ingame,ingame,2024-03-07 15:05:08.000 +010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;status-ingame;crash;Needs More Attention,ingame,2024-04-29 05:34:14.000 +01004F9012FD8000,"Estranged: The Departure",status-playable;nvdec;UE4,playable,2022-10-24 10:37:58.000 +,"Eternum Ex",status-playable,playable,2021-01-13 20:28:32.000 +010092501EB2C000,"Europa (Demo)",gpu;status-ingame;crash;UE4,ingame,2024-04-23 10:47:12.000 +01007BE0160D6000,"EVE ghost enemies",gpu;status-ingame,ingame,2023-01-14 03:13:30.000 +010095E01581C000,"even if TEMPEST",gpu;status-ingame,ingame,2023-06-22 23:50:25.000 +,"Event Horizon: Space Defense",status-playable,playable,2020-07-31 20:31:24.000 +0100DCF0093EC000,"EVERSPACE",status-playable;UE4,playable,2022-08-14 01:16:24.000 +01006F900BF8E000,"Everybody 1-2-Switch!",services;deadlock;status-nothing,nothing,2023-07-01 05:52:55.000 +,"Evil Defenders",nvdec;status-playable,playable,2020-09-28 17:11:00.000 +01006A800FA22000,"Evolution Board Game",online;status-playable,playable,2021-01-20 22:37:56.000 +0100F2D00C7DE000,"Exception",status-playable;online-broken,playable,2022-09-20 12:47:10.000 +0100DD30110CC000,"Exit the Gungeon",status-playable,playable,2022-09-22 17:04:43.000 +0100A82013976000,"Exodemon",status-playable,playable,2022-10-27 20:17:52.000 +0100FA800A1F4000,"Exorder",nvdec;status-playable,playable,2021-04-15 14:17:20.000 +01009B7010B42000,"Explosive Jake",status-boots;crash,boots,2021-11-03 07:48:32.000 +0100EFE00A3C2000,"Eyes: The Horror Game",status-playable,playable,2021-01-20 21:59:46.000 +0100E3D0103CE000,"Fable of Fairy Stones",status-playable,playable,2021-05-05 21:04:54.000 +01004200189F4000,"Factorio",deadlock;status-boots,boots,2024-06-11 19:26:16.000 +010073F0189B6000,"Fae Farm",status-playable,playable,2024-08-25 15:12:12.000 +010069100DB08000,"Faeria",status-menus;nvdec;online-broken,menus,2022-10-04 16:44:41.000 +01008A6009758000,"Fairune Collection",status-playable,playable,2021-06-06 15:29:56.000 +0100F6D00B8F2000,"Fairy Fencer F™: Advent Dark Force",status-ingame;32-bit;crash;nvdec,ingame,2023-04-16 03:53:48.000 +0100CF900FA3E000,"Fairy Tail",status-playable;nvdec,playable,2022-10-04 23:00:32.000 +01005A600BE60000,"Fall Of Light - Darkest Edition",slow;status-ingame;nvdec,ingame,2024-07-24 04:19:26.000 +0100AA801258C000,"Fallen Legion Revenants",status-menus;crash,menus,2021-11-25 08:53:20.000 +0100D670126F6000,"Famicom Detective Club: The Girl Who Stands Behind",status-playable;nvdec,playable,2022-10-27 20:41:40.000 +010033F0126F4000,"Famicom Detective Club: The Missing Heir",status-playable;nvdec,playable,2022-10-27 20:56:23.000 +010060200FC44000,"Family Feud 2021",status-playable;online-broken,playable,2022-10-10 11:42:21.000 +0100034012606000,"Family Mysteries: Poisonous Promises",audio;status-menus;crash,menus,2021-11-26 12:35:06.000 +010017C012726000,"Fantasy Friends",status-playable,playable,2022-10-17 19:42:39.000 +0100767008502000,"Fantasy Hero Unsigned Legacy",status-playable,playable,2022-07-26 12:28:52.000 +0100944003820000,"Fantasy Strike",online;status-playable,playable,2021-02-27 01:59:18.000 +01000E2012F6E000,"Fantasy Tavern Sextet -Vol.1 New World Days-",gpu;status-ingame;crash;Needs Update,ingame,2022-12-05 16:48:00.000 +,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;status-ingame;crash,ingame,2021-11-06 02:57:29.000 +010022700E7D6000,"FAR: Lone Sails",status-playable,playable,2022-09-06 16:33:05.000 +,"Farabel",status-playable,playable,2020-08-03 17:47:28.000 +,"Farm Expert 2019 for Nintendo Switch",status-playable,playable,2020-07-09 21:42:57.000 +01000E400ED98000,"Farm Mystery",status-playable;nvdec,playable,2022-09-06 16:46:47.000 +,"Farm Together",status-playable,playable,2021-01-19 20:01:19.000 +0100EB600E914000,"Farming Simulator 20",nvdec;status-playable,playable,2021-06-13 10:52:44.000 +,"Farming Simulator Nintendo Switch Edition",nvdec;status-playable,playable,2021-01-19 14:46:44.000 +0100E99019B3A000,"Fashion Dreamer",status-playable,playable,2023-11-12 06:42:52.000 +01009510001CA000,"Fast RMX",slow;status-ingame;crash;ldn-partial,ingame,2024-06-22 20:48:58.000 +0100BEB015604000,"Fatal Frame: Maiden of Black Water",status-playable,playable,2023-07-05 16:01:40.000 +0100DAE019110000,"Fatal Frame: Mask of the Lunar Eclipse",status-playable;Incomplete,playable,2024-04-11 06:01:30.000 +010053E002EA2000,"Fate/EXTELLA",gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55.000 +010051400B17A000,"Fate/EXTELLA LINK",ldn-untested;nvdec;status-playable,playable,2021-01-27 00:45:50.000 +,"fault - milestone one",nvdec;status-playable,playable,2021-03-24 10:41:49.000 +,"Fear Effect Sedna",nvdec;status-playable,playable,2021-01-19 13:10:33.000 +0100F5501CE12000,"Fearmonium",status-boots;crash,boots,2024-03-06 11:26:11.000 +0100E4300CB3E000,"Feather",status-playable,playable,2021-06-03 14:11:27.000 +,"Felix the Reaper",nvdec;status-playable,playable,2020-10-20 23:43:03.000 +,"Feudal Alloy",status-playable,playable,2021-01-14 08:48:14.000 +01008D900B984000,"FEZ",gpu;status-ingame,ingame,2021-04-18 17:10:16.000 +01007510040E8000,"FIA European Truck Racing Championship",status-playable;nvdec,playable,2022-09-06 17:51:59.000 +0100F7B002340000,"FIFA 18",gpu;status-ingame;online-broken;ldn-untested,ingame,2022-07-26 12:43:59.000 +0100FFA0093E8000,"FIFA 19",gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07.000 +01005DE00D05C000,"FIFA 20 Legacy Edition",gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20.000 +01000A001171A000,"FIFA 21 Legacy Edition",gpu;status-ingame;online-broken,ingame,2023-12-11 22:10:19.000 +0100216014472000,"FIFA 22 Legacy Edition",gpu;status-ingame,ingame,2024-03-02 14:13:48.000 +01006980127F0000,"Fight Crab",status-playable;online-broken;ldn-untested,playable,2022-10-05 10:24:04.000 +,"Fight of Animals",online;status-playable,playable,2020-10-15 15:08:28.000 +,"Fight'N Rage",status-playable,playable,2020-06-16 23:35:19.000 +0100D02014048000,"Fighting EX Layer Another Dash",status-playable;online-broken;UE4,playable,2024-04-07 10:22:33.000 +0100118009C68000,"Figment",nvdec;status-playable,playable,2021-01-27 19:36:05.000 +,"Fill-a-Pix: Phil's Epic Adventure",status-playable,playable,2020-12-22 13:48:22.000 +0100C3A00BB76000,"Fimbul",status-playable;nvdec,playable,2022-07-26 13:31:47.000 +,"Fin and the Ancient Mystery",nvdec;status-playable,playable,2020-12-17 16:40:39.000 +0100CE4010AAC000,"FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition",status-playable,playable,2023-04-02 23:39:12.000 +01000EA014150000,"FINAL FANTASY I",status-nothing;crash,nothing,2024-09-05 20:55:30.000 +01006B7014156000,"FINAL FANTASY II",status-nothing;crash,nothing,2024-04-13 19:18:04.000 +01006F000B056000,"FINAL FANTASY IX",audout;nvdec;status-playable,playable,2021-06-05 11:35:00.000 +0100AA201415C000,"FINAL FANTASY V",status-playable,playable,2023-04-26 01:11:55.000 +0100A5B00BDC6000,"Final Fantasy VII",status-playable,playable,2022-12-09 17:03:30.000 +01008B900DC0A000,"FINAL FANTASY VIII REMASTERED",status-playable;nvdec,playable,2023-02-15 10:57:48.000 +0100BC300CB48000,"FINAL FANTASY X/X-2 HD REMASTER",gpu;status-ingame,ingame,2022-08-16 20:29:26.000 +0100EB100AB42000,"FINAL FANTASY XII THE ZODIAC AGE",status-playable;opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54.000 +,"FINAL FANTASY XV POCKET EDITION HD",status-playable,playable,2021-01-05 17:52:08.000 +,"Final Light, The Prison",status-playable,playable,2020-07-31 21:48:44.000 +0100FF100FB68000,"Finding Teddy 2 : Definitive Edition",gpu;status-ingame,ingame,2024-04-19 16:51:33.000 +,"Fire & Water",status-playable,playable,2020-12-15 15:43:20.000 +0100F15003E64000,"Fire Emblem Warriors",status-playable;nvdec,playable,2023-05-10 01:53:10.000 +010071F0143EA000,"Fire Emblem Warriors: Three Hopes",gpu;status-ingame;nvdec,ingame,2024-05-01 07:07:42.000 +0100A6301214E000,"Fire Emblem: Engage",status-playable;amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26.000 +0100A12011CC8000,"Fire Emblem: Shadow Dragon and the Blade of Light",status-playable,playable,2022-10-17 19:49:14.000 +010055D009F78000,"Fire Emblem: Three Houses",status-playable;online-broken,playable,2024-09-14 23:53:50.000 +010025C014798000,"Fire: Ungh's Quest",status-playable;nvdec,playable,2022-10-27 21:41:26.000 +0100434003C58000,"Firefighters - The Simulation",status-playable,playable,2021-02-19 13:32:05.000 +,"Firefighters: Airport Fire Department",status-playable,playable,2021-02-15 19:17:00.000 +0100AC300919A000,"Firewatch",status-playable,playable,2021-06-03 10:56:38.000 +,"Firework",status-playable,playable,2020-12-04 20:20:09.000 +0100DEB00ACE2000,"Fishing Star World Tour",status-playable,playable,2022-09-13 19:08:51.000 +010069800D292000,"Fishing Universe Simulator",status-playable,playable,2021-04-15 14:00:43.000 +0100807008868000,"Fit Boxing",status-playable,playable,2022-07-26 19:24:55.000 +,"Fitness Boxing",services;status-ingame,ingame,2020-05-17 14:00:48.000 +0100E7300AAD4000,"Fitness Boxing",status-playable,playable,2021-04-14 20:33:33.000 +0100073011382000,"Fitness Boxing 2: Rhythm & Exercise",crash;status-ingame,ingame,2021-04-14 20:40:48.000 +,"Five Dates",nvdec;status-playable,playable,2020-12-11 15:17:11.000 +0100B6200D8D2000,"Five Nights at Freddy's",status-playable,playable,2022-09-13 19:26:36.000 +01004EB00E43A000,"Five Nights at Freddy's 2",status-playable,playable,2023-02-08 15:48:24.000 +010056100E43C000,"Five Nights at Freddy's 3",status-playable,playable,2022-09-13 20:58:07.000 +010083800E43E000,"Five Nights at Freddy's 4",status-playable,playable,2023-08-19 07:28:03.000 +0100F7901118C000,"Five Nights at Freddy's: Help Wanted",status-playable;UE4,playable,2022-09-29 12:40:09.000 +01003B200E440000,"Five Nights at Freddy's: Sister Location",status-playable,playable,2023-10-06 09:00:58.000 +01009060193C4000,"Five Nights At Freddy’s Security Breach",gpu;status-ingame;crash;mac-bug,ingame,2023-04-23 22:33:28.000 +010038200E088000,"Flan",status-ingame;crash;regression,ingame,2021-11-17 07:39:28.000 +,"Flashback",nvdec;status-playable,playable,2020-05-14 13:57:29.000 +0100C53004C52000,"Flat Heroes",gpu;status-ingame,ingame,2022-07-26 19:37:37.000 +,"Flatland: Prologue",status-playable,playable,2020-12-11 20:41:12.000 +,"Flinthook",online;status-playable,playable,2021-03-25 20:42:29.000 +010095A004040000,"Flip Wars",services;status-ingame;ldn-untested,ingame,2022-05-02 15:39:18.000 +01009FB002B2E000,"Flipping Death",status-playable,playable,2021-02-17 16:12:30.000 +,"Flood of Light",status-playable,playable,2020-05-15 14:15:25.000 +0100DF9005E7A000,"Floor Kids",status-playable;nvdec,playable,2024-08-18 19:38:49.000 +,"Florence",status-playable,playable,2020-09-05 01:22:30.000 +,"Flowlines VS",status-playable,playable,2020-12-17 17:01:53.000 +,"Flux8",nvdec;status-playable,playable,2020-06-19 20:55:11.000 +,"Fly O'Clock VS",status-playable,playable,2020-05-17 13:39:52.000 +,"Fly Punch Boom!",online;status-playable,playable,2020-06-21 12:06:11.000 +0100419013A8A000,"Flying Hero X",status-menus;crash,menus,2021-11-17 07:46:58.000 +,"Fobia",status-playable,playable,2020-12-14 21:05:23.000 +0100F3900D0F0000,"Food Truck Tycoon",status-playable,playable,2022-10-17 20:15:55.000 +01007CF013152000,"Football Manager 2021 Touch",gpu;status-ingame,ingame,2022-10-17 20:08:23.000 +0100EDC01990E000,"FOOTBALL MANAGER 2023 TOUCH",gpu;status-ingame,ingame,2023-08-01 03:40:53.000 +010097F0099B4000,"Football Manager Touch 2018",status-playable,playable,2022-07-26 20:17:56.000 +010069400B6BE000,"For The King",nvdec;status-playable,playable,2021-02-15 18:51:44.000 +01001D200BCC4000,"Forager",status-menus;crash,menus,2021-11-24 07:10:17.000 +0100AE001256E000,"Foreclosed",status-ingame;crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12.000 +,"Foregone",deadlock;status-ingame,ingame,2020-12-17 15:26:53.000 +010059E00B93C000,"Forgotton Anne",nvdec;status-playable,playable,2021-02-15 18:28:07.000 +,"FORMA.8",nvdec;status-playable,playable,2020-11-15 01:04:32.000 +,"Fort Boyard",nvdec;slow;status-playable,playable,2020-05-15 13:22:53.000 +010025400AECE000,"Fortnite",services-horizon;status-nothing,nothing,2024-04-06 18:23:25.000 +0100CA500756C000,"Fossil Hunters",status-playable;nvdec,playable,2022-07-27 11:37:20.000 +01008A100A028000,"FOX n FORESTS",status-playable,playable,2021-02-16 14:27:49.000 +,"FoxyLand",status-playable,playable,2020-07-29 20:55:20.000 +,"FoxyLand 2",status-playable,playable,2020-08-06 14:41:30.000 +01004200099F2000,"Fractured Minds",status-playable,playable,2022-09-13 21:21:40.000 +0100F1A00A5DC000,"FRAMED COLLECTION",status-playable;nvdec,playable,2022-07-27 11:48:15.000 +0100AC40108D8000,"Fred3ric",status-playable,playable,2021-04-15 13:30:31.000 +,"Frederic 2",status-playable,playable,2020-07-23 16:44:37.000 +,"Frederic: Resurrection of Music",nvdec;status-playable,playable,2020-07-23 16:59:53.000 +010082B00EE50000,"Freedom Finger",nvdec;status-playable,playable,2021-06-09 19:31:30.000 +,"Freedom Planet",status-playable,playable,2020-05-14 12:23:06.000 +010003F00BD48000,"Friday the 13th: Killer Puzzle",status-playable,playable,2021-01-28 01:33:38.000 +010092A00C4B6000,"Friday the 13th: The Game",status-playable;nvdec;online-broken;UE4,playable,2022-09-06 17:33:27.000 +0100F200178F4000,"Front Mission 1st Remake",status-playable,playable,2023-06-09 07:44:24.000 +,"Frontline Zed",status-playable,playable,2020-10-03 12:55:59.000 +0100B5300B49A000,"Frost",status-playable,playable,2022-07-27 12:00:36.000 +,"Fruitfall Crush",status-playable,playable,2020-10-20 11:33:33.000 +,"FullBlast",status-playable,playable,2020-05-19 10:34:13.000 +010002F00CC20000,"FUN! FUN! Animal Park",status-playable,playable,2021-04-14 17:08:52.000 +,"FunBox Party",status-playable,playable,2020-05-15 12:07:02.000 +,"Funghi Puzzle Funghi Explosion",status-playable,playable,2020-11-23 14:17:41.000 +01008E10130F8000,"Funimation",gpu;status-boots,boots,2021-04-08 13:08:17.000 +,"Funny Bunny Adventures",status-playable,playable,2020-08-05 13:46:56.000 +01000EC00AF98000,"Furi",status-playable,playable,2022-07-27 12:21:20.000 +01000EC00AF98000,"Furi Definitive Edition",status-playable,playable,2022-07-27 12:35:08.000 +0100A6B00D4EC000,"Furwind",status-playable,playable,2021-02-19 19:44:08.000 +,"Fury Unleashed",crash;services;status-ingame,ingame,2020-10-18 11:52:40.000 +,"Fury Unleashed Demo",status-playable,playable,2020-10-08 20:09:21.000 +0100E1F013674000,"FUSER",status-playable;nvdec;UE4,playable,2022-10-17 20:58:32.000 +,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec;status-ingame,ingame,2021-01-20 15:30:02.000 +01003C300B274000,"Futari de! Nyanko Daisensou",status-playable,playable,2024-01-05 22:26:52.000 +010055801134E000,"FUZE Player",status-ingame;online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53.000 +0100EAD007E98000,"FUZE4",status-playable;vulkan-backend-bug,playable,2022-09-06 19:25:01.000 +010067600F1A0000,"FuzzBall",crash;status-nothing,nothing,2021-03-29 20:13:21.000 +,"G-MODE Archives 06 The strongest ever Julia Miyamoto",status-playable,playable,2020-10-15 13:06:26.000 +,"G.I. Joe Operation Blackout",UE4;crash;status-boots,boots,2020-11-21 12:37:44.000 +,"Gal Metal - 01B8000C2EA000",status-playable,playable,2022-07-27 20:57:48.000 +010024700901A000,"Gal*Gun 2",status-playable;nvdec;UE4,playable,2022-07-27 12:45:37.000 +0100047013378000,"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",status-playable;nvdec,playable,2022-10-17 23:50:46.000 +0100C9800A454000,"GALAK-Z: Variant S",status-boots;online-broken,boots,2022-07-29 11:59:12.000 +0100C62011050000,"Game Boy - Nintendo Switch Online",status-playable,playable,2023-03-21 12:43:48.000 +010012F017576000,"Game Boy Advance - Nintendo Switch Online",status-playable,playable,2023-02-16 20:38:15.000 +0100FA5010788000,"Game Builder Garage",status-ingame,ingame,2024-04-20 21:46:22.000 +,"Game Dev Story",status-playable,playable,2020-05-20 00:00:38.000 +01006BD00F8C0000,"Game Doraemon Nobita no Shin Kyoryu",gpu;status-ingame,ingame,2023-02-27 02:03:28.000 +,"Garage",status-playable,playable,2020-05-19 20:59:53.000 +010061E00E8BE000,"Garfield Kart Furious Racing",status-playable;ldn-works;loader-allocator,playable,2022-09-13 21:40:25.000 +,"Gates of Hell",slow;status-playable,playable,2020-10-22 12:44:26.000 +010025500C098000,"Gato Roboto",status-playable,playable,2023-01-20 15:04:11.000 +010065E003FD8000,"Gear.Club Unlimited",status-playable,playable,2021-06-08 13:03:19.000 +010072900AFF0000,"Gear.Club Unlimited 2",status-playable;nvdec;online-broken,playable,2022-07-29 12:52:16.000 +01000F000D9F0000,"Geki Yaba Runner Anniversary Edition",status-playable,playable,2021-02-19 18:59:07.000 +,"Gekido Kintaro's Revenge",status-playable,playable,2020-10-27 12:44:05.000 +01009D000AF3A000,"Gelly Break",UE4;status-playable,playable,2021-03-03 16:04:02.000 +01001A4008192000,"Gem Smashers",nvdec;status-playable,playable,2021-06-08 13:40:51.000 +,"Genetic Disaster",status-playable,playable,2020-06-19 21:41:12.000 +0100D7E0110B2000,"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",32-bit;status-playable,playable,2022-06-06 00:42:09.000 +010000300C79C000,"Gensokyo Defenders",status-playable;online-broken;UE4,playable,2022-07-29 13:48:12.000 +0100AC600EB4C000,"Gensou Rougoku no Kaleidscope",status-menus;crash,menus,2021-11-24 08:45:07.000 +,"Georifters",UE4;crash;nvdec;status-menus,menus,2020-12-04 22:30:50.000 +,"Gerrrms",status-playable,playable,2020-08-15 11:32:52.000 +,"Get 10 Quest",status-playable,playable,2020-08-03 12:48:39.000 +0100B5B00E77C000,"Get Over Here",status-playable,playable,2022-10-28 11:53:52.000 +0100EEB005ACC000,"Ghost 1.0",status-playable,playable,2021-02-19 20:48:47.000 +010063200C588000,"Ghost Blade HD",status-playable;online-broken,playable,2022-09-13 21:51:21.000 +,"Ghost Grab 3000",status-playable,playable,2020-07-11 18:09:52.000 +,"Ghost Parade",status-playable,playable,2020-07-14 00:43:54.000 +01004B301108C000,"Ghost Sweeper",status-playable,playable,2022-10-10 12:45:36.000 +010029B018432000,"Ghost Trick Phantom Detective",status-playable,playable,2023-08-23 14:50:12.000 +010008A00F632000,"Ghostbusters: The Video Game Remastered",status-playable;nvdec,playable,2021-09-17 07:26:57.000 +,"Ghostrunner",UE4;crash;gpu;nvdec;status-ingame,ingame,2020-12-17 13:01:59.000 +0100D6200F2BA000,"Ghosts 'n Goblins Resurrection",status-playable,playable,2023-05-09 12:40:41.000 +01003830092B8000,"Giana Sisters: Twisted Dreams - Owltimate Edition",status-playable,playable,2022-07-29 14:06:12.000 +0100D95012C0A000,"Gibbous - A Cthulhu Adventure",status-playable;nvdec,playable,2022-10-10 12:57:17.000 +010045F00BFC2000,"GIGA WRECKER Alt.",status-playable,playable,2022-07-29 14:13:54.000 +01002C400E526000,"Gigantosaurus The Game",status-playable;UE4,playable,2022-09-27 21:20:00.000 +0100C50007070000,"Ginger: Beyond the Crystal",status-playable,playable,2021-02-17 16:27:00.000 +,"Girabox",status-playable,playable,2020-12-12 13:55:05.000 +,"Giraffe and Annika",UE4;crash;status-ingame,ingame,2020-12-04 22:41:57.000 +01006DD00CC96000,"Girls und Panzer Dream Tank Match DX",status-playable;ldn-untested,playable,2022-09-12 16:07:11.000 +,"Glaive: Brick Breaker",status-playable,playable,2020-05-20 12:15:59.000 +,"Glitch's Trip",status-playable,playable,2020-12-17 16:00:57.000 +0100EB501130E000,"Glyph",status-playable,playable,2021-02-08 19:56:51.000 +,"Gnome More War",status-playable,playable,2020-12-17 16:33:07.000 +,"Gnomes Garden 2",status-playable,playable,2021-02-19 20:08:13.000 +010036C00D0D6000,"Gnomes Garden: Lost King",deadlock;status-menus,menus,2021-11-18 11:14:03.000 +01008EF013A7C000,"Gnosia",status-playable,playable,2021-04-05 17:20:30.000 +01000C800FADC000,"Go All Out",status-playable;online-broken,playable,2022-09-21 19:16:34.000 +010055A0161F4000,"Go Rally",gpu;status-ingame,ingame,2023-08-16 21:18:23.000 +0100C1800A9B6000,"GO VACATION",status-playable;nvdec;ldn-works,playable,2024-05-13 19:28:53.000 +,"Go! Fish Go!",status-playable,playable,2020-07-27 13:52:28.000 +010032600C8CE000,"Goat Simulator",32-bit;status-playable,playable,2022-07-29 21:02:33.000 +01001C700873E000,"GOD EATER 3",gpu;status-ingame;nvdec,ingame,2022-07-29 21:33:21.000 +,"GOD WARS THE COMPLETE LEGEND",nvdec;status-playable,playable,2020-05-19 14:37:50.000 +0100CFA0111C8000,"Gods Will Fall",status-playable,playable,2021-02-08 16:49:59.000 +,"Goetia",status-playable,playable,2020-05-19 12:55:39.000 +,"Going Under",deadlock;nvdec;status-ingame,ingame,2020-12-11 22:29:46.000 +,"Goken",status-playable,playable,2020-08-05 20:22:38.000 +010013800F0A4000,"Golazo - 010013800F0A4000",status-playable,playable,2022-09-13 21:58:37.000 +01003C000D84C000,"Golem Gates",status-ingame;crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11.000 +,"Golf Story",status-playable,playable,2020-05-14 14:56:17.000 +01006FB00EBE0000,"Golf With Your Friends",status-playable;online-broken,playable,2022-09-29 12:55:11.000 +0100EEC00AA6E000,"Gone Home",status-playable,playable,2022-08-01 11:14:20.000 +,"Gonner",status-playable,playable,2020-05-19 12:05:02.000 +,"Good Job!",status-playable,playable,2021-03-02 13:15:55.000 +01003AD0123A2000,"Good Night, Knight",status-nothing;crash,nothing,2023-07-30 23:38:13.000 +,"Good Pizza, Great Pizza",status-playable,playable,2020-12-04 22:59:18.000 +,"Goosebumps Dead of Night",gpu;nvdec;status-ingame,ingame,2020-12-10 20:02:16.000 +,"Goosebumps: The Game",status-playable,playable,2020-05-19 11:56:52.000 +0100F2A005C98000,"Gorogoa",status-playable,playable,2022-08-01 11:55:08.000 +,"GORSD",status-playable,playable,2020-12-04 22:15:21.000 +,"Gotcha Racing 2nd",status-playable,playable,2020-07-23 17:14:04.000 +,"Gothic Murder: Adventure That Changes Destiny",deadlock;status-ingame;crash,ingame,2022-09-30 23:16:53.000 +,"Grab the Bottle",status-playable,playable,2020-07-14 17:06:41.000 +,"Graceful Explosion Machine",status-playable,playable,2020-05-19 20:36:55.000 +,"Grand Brix Shooter",slow;status-playable,playable,2020-06-24 13:23:54.000 +010038100D436000,"Grand Guilds",UE4;nvdec;status-playable,playable,2021-04-26 12:49:05.000 +0100BE600D07A000,"Grand Prix Story",status-playable,playable,2022-08-01 12:42:23.000 +05B1D2ABD3D30000,"Grand Theft Auto 3",services;status-nothing;crash;homebrew,nothing,2023-05-01 22:01:58.000 +0100E0600BBC8000,"Grandia HD Collection",status-boots;crash,boots,2024-08-19 04:29:48.000 +,"Grass Cutter",slow;status-ingame,ingame,2020-05-19 18:27:42.000 +,"Grave Danger",status-playable,playable,2020-05-18 17:41:28.000 +010054A013E0C000,"GraviFire",status-playable,playable,2021-04-05 17:13:32.000 +01002C2011828000,"Gravity Rider Zero",gpu;status-ingame;vulkan-backend-bug,ingame,2022-09-29 13:56:13.000 +,"Greedroid",status-playable,playable,2020-12-14 11:14:32.000 +010068D00AE68000,"GREEN",status-playable,playable,2022-08-01 12:54:15.000 +0100CBB0070EE000,"Green Game",nvdec;status-playable,playable,2021-02-19 18:51:55.000 +0100DFE00F002000,"GREEN The Life Algorithm",status-playable,playable,2022-09-27 21:37:13.000 +0100DA7013792000,"Grey Skies: A War of the Worlds Story",status-playable;UE4,playable,2022-10-24 11:13:59.000 +0100DC800A602000,"GRID Autosport",status-playable;nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45.000 +,"Grid Mania",status-playable,playable,2020-05-19 14:11:05.000 +,"Gridd: Retroenhanced",status-playable,playable,2020-05-20 11:32:40.000 +0100B7900B024000,"Grim Fandango Remastered",status-playable;nvdec,playable,2022-08-01 13:55:58.000 +010078E012D80000,"Grim Legends 2: Song Of The Dark Swan",status-playable;nvdec,playable,2022-10-18 12:58:45.000 +010009F011F90000,"Grim Legends: The Forsaken Bride",status-playable;nvdec,playable,2022-10-18 13:14:06.000 +01001E200F2F8000,"Grimshade",status-playable,playable,2022-10-02 12:44:20.000 +0100538012496000,"Grindstone",status-playable,playable,2023-02-08 15:54:06.000 +0100459009A2A000,"GRIP",status-playable;nvdec;online-broken;UE4,playable,2022-08-01 15:00:22.000 +0100E1700C31C000,"GRIS",nvdec;status-playable,playable,2021-06-03 13:33:44.000 +01009D7011B02000,"GRISAIA PHANTOM TRIGGER 01&02",status-playable;nvdec,playable,2022-12-04 21:16:06.000 +01005250123B8000,"Grisaia Phantom Trigger 03",audout;status-playable,playable,2021-01-31 12:30:47.000 +0100D970123BA000,"GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000",audout;status-playable,playable,2021-01-31 12:40:37.000 +01002330123BC000,"GRISAIA PHANTOM TRIGGER 05",audout;nvdec;status-playable,playable,2021-01-31 12:49:59.000 +0100CAF013AE6000,"GRISAIA PHANTOM TRIGGER 5.5",audout;nvdec;status-playable,playable,2021-01-31 12:59:44.000 +010091300FFA0000,"Grizzland",gpu;status-ingame,ingame,2024-07-11 16:28:34.000 +0100EB500D92E000,"Groove Coaster: Wai Wai Party!!!!",status-playable;nvdec;ldn-broken,playable,2021-11-06 14:54:27.000 +,"Guacamelee! 2",status-playable,playable,2020-05-15 14:56:59.000 +,"Guacamelee! Super Turbo Championship Edition",status-playable,playable,2020-05-13 23:44:18.000 +,"Guess the Character",status-playable,playable,2020-05-20 13:14:19.000 +,"Guess The Word",status-playable,playable,2020-07-26 21:34:25.000 +,"GUILTY GEAR XX ACCENT CORE PLUS R",nvdec;status-playable,playable,2021-01-13 09:28:33.000 +01003C6008940000,"GUNBIRD for Nintendo Switch",32-bit;status-playable,playable,2021-06-04 19:16:01.000 +,"GUNBIRD2 for Nintendo Switch",status-playable,playable,2020-10-10 14:41:16.000 +,"Gunka o haita neko",gpu;nvdec;status-ingame,ingame,2020-08-25 12:37:56.000 +,"Gunman Clive HD Collection",status-playable,playable,2020-10-09 12:17:35.000 +,"Guns Gore and Cannoli 2",online;status-playable,playable,2021-01-06 18:43:59.000 +,"Gunvolt Chronicles: Luminous Avenger iX",status-playable,playable,2020-06-16 22:47:07.000 +0100763015C2E000,"Gunvolt Chronicles: Luminous Avenger iX 2",status-nothing;crash;Needs Update,nothing,2022-04-29 15:34:34.000 +01002C8018554000,"Gurimugurimoa OnceMore Demo",status-playable,playable,2022-07-29 22:07:31.000 +0100AC601DCA8000,"Gylt",status-ingame;crash,ingame,2024-03-18 20:16:51.000 +0100822012D76000,"HAAK",gpu;status-ingame,ingame,2023-02-19 14:31:05.000 +,"Habroxia",status-playable,playable,2020-06-16 23:04:42.000 +0100535012974000,"Hades",status-playable;vulkan,playable,2022-10-05 10:45:21.000 +,"Hakoniwa Explorer Plus",slow;status-ingame,ingame,2021-02-19 16:56:19.000 +,"Halloween Pinball",status-playable,playable,2021-01-12 16:00:46.000 +01006FF014152000,"Hamidashi Creative",gpu;status-ingame,ingame,2021-12-19 15:30:51.000 +01003B9007E86000,"Hammerwatch",status-playable;online-broken;ldn-broken,playable,2022-08-01 16:28:46.000 +01003620068EA000,"Hand of Fate 2",status-playable,playable,2022-08-01 15:44:16.000 +,"Hang the Kings",status-playable,playable,2020-07-28 22:56:59.000 +010066C018E50000,"Happy Animals Mini Golf",gpu;status-ingame,ingame,2022-12-04 19:24:28.000 +0100ECE00D13E000,"Hard West",status-nothing;regression,nothing,2022-02-09 07:45:56.000 +,"HARDCORE Maze Cube",status-playable,playable,2020-12-04 20:01:24.000 +,"HARDCORE MECHA",slow;status-playable,playable,2020-11-01 15:06:33.000 +01000C90117FA000,"HardCube",status-playable,playable,2021-05-05 18:33:03.000 +,"Hardway Party",status-playable,playable,2020-07-26 12:35:07.000 +0100D0500AD30000,"Harvest Life",status-playable,playable,2022-08-01 16:51:45.000 +,"Harvest Moon One World - 010016B010FDE00",status-playable,playable,2023-05-26 09:17:19.000 +0100A280187BC000,"Harvestella",status-playable;UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11.000 +,"Has-Been Heroes",status-playable,playable,2021-01-13 13:31:48.000 +01001CC00FA1A000,"Hatsune Miku: Project DIVA Mega Mix",audio;status-playable;online-broken,playable,2024-01-07 23:12:57.000 +01009E6014F18000,"Haunted Dawn: The Zombie Apocalypse",status-playable,playable,2022-10-28 12:31:51.000 +,"Haunted Dungeons: Hyakki Castle",status-playable,playable,2020-08-12 14:21:48.000 +0100E2600DBAA000,"Haven",status-playable,playable,2021-03-24 11:52:41.000 +0100EA900FB2C000,"Hayfever",status-playable;loader-allocator,playable,2022-09-22 17:35:41.000 +0100EFE00E1DC000,"Headliner: NoviNews",online;status-playable,playable,2021-03-01 11:36:00.000 +,"Headsnatchers",UE4;crash;status-menus,menus,2020-07-14 13:29:14.000 +,"Headspun",status-playable,playable,2020-07-31 19:46:47.000 +,"Heart and Slash",status-playable,playable,2021-01-13 20:56:32.000 +,"Heaven Dust",status-playable,playable,2020-05-17 14:02:41.000 +0100FD901000C000,"Heaven's Vault",crash;status-ingame,ingame,2021-02-08 18:22:01.000 +,"Helheim Hassle",status-playable,playable,2020-10-14 11:38:36.000 +,"Hell is Other Demons",status-playable,playable,2021-01-13 13:23:02.000 +01000938017E5C00,"Hell Pie0",status-playable;nvdec;UE4,playable,2022-11-03 16:48:46.000 +0100A4600E27A000,"Hell Warders",online;status-playable,playable,2021-02-27 02:31:03.000 +010044500CF8E000,"Hellblade: Senua's Sacrifice",gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50.000 +010087D0084A8000,"Hello Kitty Kruisers With Sanrio Friends",nvdec;status-playable,playable,2021-06-04 19:08:46.000 +0100FAA00B168000,"Hello Neighbor",status-playable;UE4,playable,2022-08-01 21:32:23.000 +,"Hello Neighbor: Hide And Seek",UE4;gpu;slow;status-ingame,ingame,2020-10-24 10:59:57.000 +010024600C794000,"Hellpoint",status-menus,menus,2021-11-26 13:24:20.000 +,"Hero Express",nvdec;status-playable,playable,2020-08-06 13:23:43.000 +010077D01094C000,"Hero-U: Rogue to Redemption",nvdec;status-playable,playable,2021-03-24 11:40:01.000 +0100D2B00BC54000,"Heroes of Hammerwatch",status-playable,playable,2022-08-01 18:30:21.000 +01001B70080F0000,"Heroine Anthem Zero episode 1",status-playable;vulkan-backend-bug,playable,2022-08-01 22:02:36.000 +010057300B0DC000,"Heroki",gpu;status-ingame,ingame,2023-07-30 19:30:01.000 +,"Heroland",status-playable,playable,2020-08-05 15:35:39.000 +01007AC00E012000,"Hexagravity",status-playable,playable,2021-05-28 13:47:48.000 +01004E800F03C000,"Hidden",slow;status-ingame,ingame,2022-10-05 10:56:53.000 +0100F6A00A684000,"Higurashi no Naku Koro ni Hō",audio;status-ingame,ingame,2021-09-18 14:40:28.000 +0100F8D0129F4000,"Himehibi 1 gakki - Princess Days",status-nothing;crash,nothing,2021-11-03 08:34:19.000 +,"Hiragana Pixel Party",status-playable,playable,2021-01-14 08:36:50.000 +01004990132AC000,"Hitman 3 - Cloud Version",Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:35:07.000 +010083A018262000,"Hitman: Blood Money - Reprisal",deadlock;status-ingame,ingame,2024-09-28 16:28:50.000 +,"Hob: The Definitive Edition",status-playable,playable,2021-01-13 09:39:19.000 +0100F7300ED2C000,"Hoggy 2",status-playable,playable,2022-10-10 13:53:35.000 +0100F7E00C70E000,"Hogwarts Legacy 0100F7E00C70E000",status-ingame;slow,ingame,2024-09-03 19:53:58.000 +0100633007D48000,"Hollow Knight",status-playable;nvdec,playable,2023-01-16 15:44:56.000 +0100F2100061E800,"Hollow0",UE4;gpu;status-ingame,ingame,2021-03-03 23:42:56.000 +,"Holy Potatoes! What the Hell?!",status-playable,playable,2020-07-03 10:48:56.000 +,"HoPiKo",status-playable,playable,2021-01-13 20:12:38.000 +010087800EE5A000,"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",status-boots;crash,boots,2023-02-19 00:51:21.000 +010086D011EB8000,"Horace",status-playable,playable,2022-10-10 14:03:50.000 +0100001019F6E000,"Horizon Chase 2",deadlock;slow;status-ingame;crash;UE4,ingame,2024-08-19 04:24:06.000 +01009EA00B714000,"Horizon Chase Turbo",status-playable,playable,2021-02-19 19:40:56.000 +0100E4200FA82000,"Horror Pinball Bundle",status-menus;crash,menus,2022-09-13 22:15:34.000 +0100017007980000,"Hotel Transylvania 3: Monsters Overboard",nvdec;status-playable,playable,2021-01-27 18:55:31.000 +0100D0E00E51E000,"Hotline Miami Collection",status-playable;nvdec,playable,2022-09-09 16:41:19.000 +0100BDE008218000,"Hotshot Racing",gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17.000 +0100CAE00EB02000,"House Flipper",status-playable,playable,2021-06-16 18:28:32.000 +0100F6800910A000,"Hover",status-playable;online-broken,playable,2022-09-20 12:54:46.000 +0100A66003384000,"Hulu",status-boots;online-broken,boots,2022-12-09 10:05:00.000 +,"Human Resource Machine",32-bit;status-playable,playable,2020-12-17 21:47:09.000 +,"Human: Fall Flat",status-playable,playable,2021-01-13 18:36:05.000 +,"Hungry Shark World",status-playable,playable,2021-01-13 18:26:08.000 +0100EBA004726000,"Huntdown",status-playable,playable,2021-04-05 16:59:54.000 +010068000CAC0000,"Hunter's Legacy: Purrfect Edition",status-playable,playable,2022-08-02 10:33:31.000 +0100C460040EA000,"Hunting Simulator",status-playable;UE4,playable,2022-08-02 10:54:08.000 +010061F010C3A000,"Hunting Simulator 2",status-playable;UE4,playable,2022-10-10 14:25:51.000 +,"Hyper Jam",UE4;crash;status-boots,boots,2020-12-15 22:52:11.000 +01003B200B372000,"Hyper Light Drifter - Special Edition",status-playable;vulkan-backend-bug,playable,2023-01-13 15:44:48.000 +,"HyperBrawl Tournament",crash;services;status-boots,boots,2020-12-04 23:03:27.000 +0100A8B00F0B4000,"HYPERCHARGE: Unboxed",status-playable;nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39.000 +010061400ED90000,"HyperParasite",status-playable;nvdec;UE4,playable,2022-09-27 22:05:44.000 +0100959010466000,"Hypnospace Outlaw",status-ingame;nvdec,ingame,2023-08-02 22:46:49.000 +01002B00111A2000,"Hyrule Warriors: Age of Calamity",gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00.000 +0100A2C01320E000,"Hyrule Warriors: Age of Calamity - Demo Version",slow;status-playable,playable,2022-10-10 17:37:41.000 +0100AE00096EA000,"Hyrule Warriors: Definitive Edition",services-horizon;status-ingame;nvdec,ingame,2024-06-16 10:34:05.000 +0100849000BDA000,"I AM SETSUNA",status-playable,playable,2021-11-28 11:06:11.000 +01001860140B0000,"I Saw Black Clouds",nvdec;status-playable,playable,2021-04-19 17:22:16.000 +,"I, Zombie",status-playable,playable,2021-01-13 14:53:44.000 +01004E5007E92000,"Ice Age Scrat's Nutty Adventure",status-playable;nvdec,playable,2022-09-13 22:22:29.000 +,"Ice Cream Surfer",status-playable,playable,2020-07-29 12:04:07.000 +0100954014718000,"Ice Station Z",status-menus;crash,menus,2021-11-21 20:02:15.000 +,"ICEY",status-playable,playable,2021-01-14 16:16:04.000 +0100BC60099FE000,"Iconoclasts",status-playable,playable,2021-08-30 21:11:04.000 +,"Idle Champions of the Forgotten Realms",online;status-boots,boots,2020-12-17 18:24:57.000 +01002EC014BCA000,"Idol Days - 愛怒流でいす",gpu;status-ingame;crash,ingame,2021-12-19 15:31:28.000 +,"If Found...",status-playable,playable,2020-12-11 13:43:14.000 +01001AC00ED72000,"If My Heart Had Wings",status-playable,playable,2022-09-29 14:54:57.000 +01009F20086A0000,"Ikaruga",status-playable,playable,2023-04-06 15:00:02.000 +010040900AF46000,"Ikenfell",status-playable,playable,2021-06-16 17:18:44.000 +01007BC00E55A000,"Immortal Planet",status-playable,playable,2022-09-20 13:40:43.000 +010079501025C000,"Immortal Realms: Vampire Wars",nvdec;status-playable,playable,2021-06-17 17:41:46.000 +,"Immortal Redneck - 0100F400435A000",nvdec;status-playable,playable,2021-01-27 18:36:28.000 +01004A600EC0A000,"Immortals Fenyx Rising",gpu;status-menus;crash,menus,2023-02-24 16:19:55.000 +0100737003190000,"IMPLOSION",status-playable;nvdec,playable,2021-12-12 03:52:13.000 +0100A760129A0000,"In rays of the Light",status-playable,playable,2021-04-07 15:18:07.000 +01004DE011076000,"Indie Darling Bundle Vol. 3",status-playable,playable,2022-10-02 13:01:57.000 +0100A2101107C000,"Indie Puzzle Bundle Vol 1",status-playable,playable,2022-09-27 22:23:21.000 +,"Indiecalypse",nvdec;status-playable,playable,2020-06-11 20:19:09.000 +01001D3003FDE000,"Indivisible",status-playable;nvdec,playable,2022-09-29 15:20:57.000 +01002BD00F626000,"Inertial Drift",status-playable;online-broken,playable,2022-10-11 12:22:19.000 +,"Infernium",UE4;regression;status-nothing,nothing,2021-01-13 16:36:07.000 +,"Infinite Minigolf",online;status-playable,playable,2020-09-29 12:26:25.000 +01001CB00EFD6000,"Infliction",status-playable;nvdec;UE4,playable,2022-10-02 13:15:55.000 +0100F1401161E000,"INMOST",status-playable,playable,2022-10-05 11:27:40.000 +,"InnerSpace",status-playable,playable,2021-01-13 19:36:14.000 +0100D2D009028000,"INSIDE",status-playable,playable,2021-12-25 20:24:56.000 +,"Inside Grass: A little adventure",status-playable,playable,2020-10-15 15:26:27.000 +010099700D750000,"INSTANT SPORTS",status-playable,playable,2022-09-09 12:59:40.000 +,"Instant Sports Summer Games",gpu;status-menus,menus,2020-09-02 13:39:28.000 +010031B0145B8000,"Instant Sports Tennis",status-playable,playable,2022-10-28 16:42:17.000 +010041501005E000,"Interrogation: You will be deceived",status-playable,playable,2022-10-05 11:40:10.000 +01000F700DECE000,"Into the Dead 2",status-playable;nvdec,playable,2022-09-14 12:36:14.000 +01001D0003B96000,"INVERSUS Deluxe",status-playable;online-broken,playable,2022-08-02 14:35:36.000 +,"Invisible Fist",status-playable,playable,2020-08-08 13:25:52.000 +,"Invisible, Inc.",crash;status-nothing,nothing,2021-01-29 16:28:13.000 +01005F400E644000,"Invisigun Reloaded",gpu;online;status-ingame,ingame,2021-06-10 12:13:24.000 +010041C00D086000,"Ion Fury",status-ingame;vulkan-backend-bug,ingame,2022-08-07 08:27:51.000 +010095C016C14000,"Iridium",status-playable,playable,2022-08-05 23:19:53.000 +0100945012168000,"Iris Fall",status-playable;nvdec,playable,2022-10-18 13:40:22.000 +0100AD300B786000,"Iris School of Wizardry - Vinculum Hearts -",status-playable,playable,2022-12-05 13:11:15.000 +01005270118D6000,"Iron Wings",slow;status-ingame,ingame,2022-08-07 08:32:57.000 +,"Ironcast",status-playable,playable,2021-01-13 13:54:29.000 +0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",status-playable,playable,2021-06-04 20:12:37.000 +,"Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate",status-playable,playable,2020-08-31 13:52:21.000 +0100F06013710000,"ISLAND",status-playable,playable,2021-05-06 15:11:47.000 +010077900440A000,"Island Flight Simulator",status-playable,playable,2021-06-04 19:42:46.000 +,"Island Saver",nvdec;status-playable,playable,2020-10-23 22:07:02.000 +,"Isoland",status-playable,playable,2020-07-26 13:48:16.000 +,"Isoland 2: Ashes of Time",status-playable,playable,2020-07-26 14:29:05.000 +010001F0145A8000,"Isolomus",services;status-boots,boots,2021-11-03 07:48:21.000 +010068700C70A000,"ITTA",status-playable,playable,2021-06-07 03:15:52.000 +,"Ittle Dew 2+",status-playable,playable,2020-11-17 11:44:32.000 +0100DEB00F12A000,"IxSHE Tell",status-playable;nvdec,playable,2022-12-02 18:00:42.000 +0100D8E00C874000,"Izneo",status-menus;online-broken,menus,2022-08-06 15:56:23.000 +,"James Pond Operation Robocod",status-playable,playable,2021-01-13 09:48:45.000 +,"Japanese Rail Sim: Journey to Kyoto",nvdec;status-playable,playable,2020-07-29 17:14:21.000 +,"JDM Racing",status-playable,playable,2020-08-03 17:02:37.000 +,"Jenny LeClue - Detectivu",crash;status-nothing,nothing,2020-12-15 21:07:07.000 +01006E400AE2A000,"Jeopardy!",audout;nvdec;online;status-playable,playable,2021-02-22 13:53:46.000 +0100E4900D266000,"Jet Kave Adventure",status-playable;nvdec,playable,2022-09-09 14:50:39.000 +0100F3500C70C000,"Jet Lancer",gpu;status-ingame,ingame,2021-02-15 18:15:47.000 +0100A5A00AF26000,"Jettomero: Hero of the Universe",status-playable,playable,2022-08-02 14:46:43.000 +01008330134DA000,"Jiffy",gpu;status-ingame;opengl,ingame,2024-02-03 23:11:24.000 +,"Jim Is Moving Out!",deadlock;status-ingame,ingame,2020-06-03 22:05:19.000 +0100F4D00D8BE000,"Jinrui no Ninasama he",status-ingame;crash,ingame,2023-03-07 02:04:17.000 +010038D011F08000,"Jisei: The First Case HD",audio;status-playable,playable,2022-10-05 11:43:33.000 +,"Job the Leprechaun",status-playable,playable,2020-06-05 12:10:06.000 +01007090104EC000,"John Wick Hex",status-playable,playable,2022-08-07 08:29:12.000 +010069B002CDE000,"Johnny Turbo's Arcade Gate of Doom",status-playable,playable,2022-07-29 12:17:50.000 +010080D002CC6000,"Johnny Turbo's Arcade Two Crude Dudes",status-playable,playable,2022-08-02 20:29:50.000 +0100D230069CC000,"Johnny Turbo's Arcade Wizard Fire",status-playable,playable,2022-08-02 20:39:15.000 +01008120128C2000,"JoJos Bizarre Adventure All-Star Battle R",status-playable,playable,2022-12-03 10:45:10.000 +01008B60117EC000,"Journey to the Savage Planet",status-playable;nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12.000 +0100C7600F654000,"Juicy Realm - 0100C7600F654000",status-playable,playable,2023-02-21 19:16:20.000 +,"Jumanji",UE4;crash;status-boots,boots,2020-07-12 13:52:25.000 +0100183010F12000,"JUMP FORCE Deluxe Edition",status-playable;nvdec;online-broken;UE4,playable,2023-10-01 15:56:05.000 +,"Jump King",status-playable,playable,2020-06-09 10:12:39.000 +0100B9C012706000,"Jump Rope Challenge",services;status-boots;crash;Needs Update,boots,2023-02-27 01:24:28.000 +,"Jumping Joe & Friends",status-playable,playable,2021-01-13 17:09:42.000 +,"JunkPlanet",status-playable,playable,2020-11-09 12:38:33.000 +0100CE100A826000,"Jurassic Pinball",status-playable,playable,2021-06-04 19:02:37.000 +010050A011344000,"Jurassic World Evolution Complete Edition",cpu;status-menus;crash,menus,2023-08-04 18:06:54.000 +0100BCE000598000,"Just Dance 2017",online;status-playable,playable,2021-03-05 09:46:01.000 +,"Just Dance 2019",gpu;online;status-ingame,ingame,2021-02-27 17:21:27.000 +0100DDB00DB38000,"JUST DANCE 2020",status-playable,playable,2022-01-24 13:31:57.000 +0100EA6014BB8000,"Just Dance 2022",gpu;services;status-ingame;crash;Needs Update,ingame,2022-10-28 11:01:53.000 +0100BEE017FC0000,"Just Dance 2023",status-nothing,nothing,2023-06-05 16:44:54.000 +0100AC600CF0A000,"Just Die Already",status-playable;UE4,playable,2022-12-13 13:37:50.000 +,"Just Glide",status-playable,playable,2020-08-07 17:38:10.000 +,"Just Shapes & Beats",ldn-untested;nvdec;status-playable,playable,2021-02-09 12:18:36.000 +010035A0044E8000,"JYDGE",status-playable,playable,2022-08-02 21:20:13.000 +0100D58012FC2000,"Kagamihara/Justice",crash;status-nothing,nothing,2021-06-21 16:41:29.000 +0100D5F00EC52000,"Kairobotica",status-playable,playable,2021-05-06 12:17:56.000 +0100BDC00A664000,"KAMEN RIDER CLIMAX SCRAMBLE",status-playable;nvdec;ldn-untested,playable,2024-07-03 08:51:11.000 +0100A9801180E000,"KAMEN RIDER memory of heroez / Premium Sound Edition",status-playable,playable,2022-12-06 03:14:26.000 +,"KAMIKO",status-playable,playable,2020-05-13 12:48:57.000 +,"Kangokuto Mary Skelter Finale",audio;crash;status-ingame,ingame,2021-01-09 22:39:28.000 +01007FD00DB20000,"Katakoi Contrast - collection of branch -",status-playable;nvdec,playable,2022-12-09 09:41:26.000 +0100D7000C2C6000,"Katamari Damacy REROLL",status-playable,playable,2022-08-02 21:35:05.000 +0100F9800EDFA000,"KATANA KAMI: A Way of the Samurai Story",slow;status-playable,playable,2022-04-09 10:40:16.000 +010029600D56A000,"Katana ZERO",status-playable,playable,2022-08-26 08:09:09.000 +010038B00F142000,"Kaze and the Wild Masks",status-playable,playable,2021-04-19 17:11:03.000 +,"Keen: One Girl Army",status-playable,playable,2020-12-14 23:19:52.000 +01008D400A584000,"Keep Talking and Nobody Explodes",status-playable,playable,2021-02-15 18:05:21.000 +01004B100BDA2000,"Kemono Friends Picross",status-playable,playable,2023-02-08 15:54:34.000 +,"Kentucky Robo Chicken",status-playable,playable,2020-05-12 20:54:17.000 +0100327005C94000,"Kentucky Route Zero [0100327005C94000]",status-playable,playable,2024-04-09 23:22:46.000 +,"KeroBlaster",status-playable,playable,2020-05-12 20:42:52.000 +0100F680116A2000,"Kholat",UE4;nvdec;status-playable,playable,2021-06-17 11:52:48.000 +,"Kid Tripp",crash;status-nothing,nothing,2020-10-15 07:41:23.000 +,"Kill la Kill - IF",status-playable,playable,2020-06-09 14:47:08.000 +,"Kill The Bad Guy",status-playable,playable,2020-05-12 22:16:10.000 +0100F2900B3E2000,"Killer Queen Black",ldn-untested;online;status-playable,playable,2021-04-08 12:46:18.000 +,"Kin'iro no Corda Octave",status-playable,playable,2020-09-22 13:23:12.000 +010089000F0E8000,"Kine",status-playable;UE4,playable,2022-09-14 14:28:37.000 +0100E6B00FFBA000,"King Lucas",status-playable,playable,2022-09-21 19:43:23.000 +,"King Oddball",status-playable,playable,2020-05-13 13:47:57.000 +01008D80148C8000,"King of Seas",status-playable;nvdec;UE4,playable,2022-10-28 18:29:41.000 +0100515014A94000,"King of Seas Demo",status-playable;nvdec;UE4,playable,2022-10-28 18:09:31.000 +,"KINGDOM HEARTS Melody of Memory",crash;nvdec;status-ingame,ingame,2021-03-03 17:34:12.000 +0100A280121F6000,"Kingdom Rush",status-nothing;32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00.000 +0100BD9004AB6000,"Kingdom: New Lands",status-playable,playable,2022-08-02 21:48:50.000 +,"Kingdom: Two Crowns",status-playable,playable,2020-05-16 19:36:21.000 +0100EF50132BE000,"Kingdoms of Amalur: Re-Reckoning",status-playable,playable,2023-08-10 13:05:08.000 +01004D300C5AE000,"Kirby and the Forgotten Land",gpu;status-ingame,ingame,2024-03-11 17:11:21.000 +010091201605A000,"Kirby and the Forgotten Land (Demo version)",status-playable;demo,playable,2022-08-21 21:03:01.000 +0100227010460000,"Kirby Fighters 2",ldn-works;online;status-playable,playable,2021-06-17 13:06:39.000 +01007E3006DDA000,"Kirby Star Allies",status-playable;nvdec,playable,2023-11-15 17:06:19.000 +0100A8E016236000,"Kirby’s Dream Buffet",status-ingame;crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44.000 +01006B601380E000,"Kirby’s Return to Dream Land Deluxe",status-playable,playable,2024-05-16 19:58:04.000 +010091D01A57E000,"Kirby’s Return to Dream Land Deluxe - Demo",status-playable;demo,playable,2023-02-18 17:21:55.000 +0100F3A00F4CA000,"Kissed by the Baddest Bidder",gpu;status-ingame;nvdec,ingame,2022-12-04 20:57:11.000 +01000C900A136000,"Kitten Squad",status-playable;nvdec,playable,2022-08-03 12:01:59.000 +,"Klondike Solitaire",status-playable,playable,2020-12-13 16:17:27.000 +,"Knight Squad",status-playable,playable,2020-08-09 16:54:51.000 +010024B00E1D6000,"Knight Squad 2",status-playable;nvdec;online-broken,playable,2022-10-28 18:38:09.000 +,"Knight Terrors",status-playable,playable,2020-05-13 13:09:22.000 +,"Knightin'+",status-playable,playable,2020-08-31 18:18:21.000 +,"Knights of Pen and Paper +1 Deluxier Edition",status-playable,playable,2020-05-11 21:46:32.000 +,"Knights of Pen and Paper 2 Deluxiest Edition",status-playable,playable,2020-05-13 14:07:00.000 +010001A00A1F6000,"Knock-Knock",nvdec;status-playable,playable,2021-02-01 20:03:19.000 +01009EF00DDB4000,"Knockout City",services;status-boots;online-broken,boots,2022-12-09 09:48:58.000 +0100C57019BA2000,"Koa and the Five Pirates of Mara",gpu;status-ingame,ingame,2024-07-11 16:14:44.000 +,"Koi DX",status-playable,playable,2020-05-11 21:37:51.000 +,"Koi no Hanasaku Hyakkaen",32-bit;gpu;nvdec;status-ingame,ingame,2020-10-03 14:17:10.000 +01005D200C9AA000,"Koloro",status-playable,playable,2022-08-03 12:34:02.000 +0100464009294000,"Kona",status-playable,playable,2022-08-03 12:48:19.000 +010016C011AAA000,"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",status-playable,playable,2023-04-26 09:51:08.000 +,"Koral",UE4;crash;gpu;status-menus,menus,2020-11-16 12:41:26.000 +,"KORG Gadget",status-playable,playable,2020-05-13 13:57:24.000 +010046600CCA4000,"Kotodama: The 7 Mysteries of Fujisawa",audout;status-playable,playable,2021-02-01 20:28:37.000 +010022801242C000,"KukkoroDays",status-menus;crash,menus,2021-11-25 08:52:56.000 +010035A00DF62000,"KUNAI",status-playable;nvdec,playable,2022-09-20 13:48:34.000 +010060400ADD2000,"Kunio-Kun: The World Classics Collection",online;status-playable,playable,2021-01-29 20:21:46.000 +010037500F282000,"KUUKIYOMI 2: Consider It More! - New Era",status-nothing;crash;Needs Update,nothing,2021-11-02 09:34:40.000 +0100894011F62000,"Kwaidan ~Azuma manor story~",status-playable,playable,2022-10-05 12:50:44.000 +0100830004FB6000,"L.A. Noire",status-playable,playable,2022-08-03 16:49:35.000 +,"L.F.O. - Lost Future Omega -",UE4;deadlock;status-boots,boots,2020-10-16 12:16:44.000 +0100F2B0123AE000,"L.O.L. Surprise! Remix: We Rule the World",status-playable,playable,2022-10-11 22:48:03.000 +010038000F644000,"La Mulana 2",status-playable,playable,2022-09-03 13:45:57.000 +010026000F662800,"LA-MULANA",gpu;status-ingame,ingame,2022-08-12 01:06:21.000 +0100E5D00F4AE000,"LA-MULANA 1 & 2",status-playable,playable,2022-09-22 17:56:36.000 +010058500B3E0000,"Labyrinth of Refrain: Coven of Dusk",status-playable,playable,2021-02-15 17:38:48.000 +,"Labyrinth of the Witch",status-playable,playable,2020-11-01 14:42:37.000 +0100BAB00E8C0000,"Langrisser I and II",status-playable,playable,2021-02-19 15:46:10.000 +,"Lanota",status-playable,playable,2019-09-04 01:58:14.000 +01005E000D3D8000,"Lapis x Labyrinth",status-playable,playable,2021-02-01 18:58:08.000 +,"Laraan",status-playable,playable,2020-12-16 12:45:48.000 +0100DA700879C000,"Last Day of June",nvdec;status-playable,playable,2021-06-08 11:35:32.000 +01009E100BDD6000,"LAST FIGHT",status-playable,playable,2022-09-20 13:54:55.000 +0100055007B86000,"Late Shift",nvdec;status-playable,playable,2021-02-01 18:43:58.000 +,"Later Daters",status-playable,playable,2020-07-29 16:35:45.000 +01001730144DA000,"Layers of Fear 2",status-playable;nvdec;UE4,playable,2022-10-28 18:49:52.000 +,"Layers of Fear: Legacy",nvdec;status-playable,playable,2021-02-15 16:30:41.000 +0100CE500D226000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",status-playable;nvdec;opengl,playable,2022-09-14 15:01:57.000 +0100FDB00AA80000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",gpu;status-ingame;nvdec;opengl,ingame,2022-09-14 15:15:55.000 +01009C100390E000,"League of Evil",online;status-playable,playable,2021-06-08 11:23:27.000 +,"Left-Right: The Mansion",status-playable,playable,2020-05-13 13:02:12.000 +010079901C898000,"Legacy of Kain™ Soul Reaver 1&2 Remastered",status-playable,playable,2025-01-07 05:50:01.000 +01002DB007A96000,"Legend of Kay Anniversary",nvdec;status-playable,playable,2021-01-29 18:38:29.000 +,"Legend of the Skyfish",status-playable,playable,2020-06-24 13:04:22.000 +,"Legend of the Tetrarchs",deadlock;status-ingame,ingame,2020-07-10 07:54:03.000 +0100A73006E74000,"Legendary Eleven",status-playable,playable,2021-06-08 12:09:03.000 +0100A7700B46C000,"Legendary Fishing",online;status-playable,playable,2021-04-14 15:08:46.000 +0100739018020000,"LEGO 2K Drive",gpu;status-ingame;ldn-works,ingame,2024-04-09 02:05:12.000 +01003A30012C0000,"Lego City Undercover",status-playable;nvdec,playable,2024-09-30 08:44:27.000 +010070D009FEC000,"LEGO DC Super-Villains",status-playable,playable,2021-05-27 18:10:37.000 +010052A00B5D2000,"LEGO Harry Potter Collection",status-ingame;crash,ingame,2024-01-31 10:28:07.000 +010073C01AF34000,"LEGO Horizon Adventures",status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56.000 +01001C100E772000,"LEGO Jurassic World",status-playable,playable,2021-05-27 17:00:20.000 +01006F600FFC8000,"LEGO Marvel Super Heroes",status-playable,playable,2024-09-10 19:02:19.000 +0100D3A00409E000,"LEGO Marvel Super Heroes 2",status-nothing;crash,nothing,2023-03-02 17:12:33.000 +010042D00D900000,"LEGO Star Wars: The Skywalker Saga",gpu;slow;status-ingame,ingame,2024-04-13 20:08:46.000 +0100A01006E00000,"LEGO The Incredibles",status-nothing;crash,nothing,2022-08-03 18:36:59.000 +,"LEGO Worlds",crash;slow;status-ingame,ingame,2020-07-17 13:35:39.000 +,"Legrand Legacy: Tale of the Fatebounds",nvdec;status-playable,playable,2020-07-26 12:27:36.000 +010031A0135CA000,"Leisure Suit Larry - Wet Dreams Dry Twice",status-playable,playable,2022-10-28 19:00:57.000 +0100A8E00CAA0000,"Leisure Suit Larry: Wet Dreams Don't Dry",status-playable,playable,2022-08-03 19:51:44.000 +01003AB00983C000,"Lethal League Blaze",online;status-playable,playable,2021-01-29 20:13:31.000 +,"Letter Quest Remastered",status-playable,playable,2020-05-11 21:30:34.000 +0100CE301678E800,"Letters - a written adventure",gpu;status-ingame,ingame,2023-02-21 20:12:38.000 +,"Levelhead",online;status-ingame,ingame,2020-10-18 11:44:51.000 +,"Levels+",status-playable,playable,2020-05-12 13:51:39.000 +0100C8000F146000,"Liberated",gpu;status-ingame;nvdec,ingame,2024-07-04 04:58:24.000 +01003A90133A6000,"Liberated: Enhanced Edition",gpu;status-ingame;nvdec,ingame,2024-07-04 04:48:48.000 +,"Lichtspeer: Double Speer Edition",status-playable,playable,2020-05-12 16:43:09.000 +010041F0128AE000,"Liege Dragon",status-playable,playable,2022-10-12 10:27:03.000 +010006300AFFE000,"Life Goes On",status-playable,playable,2021-01-29 19:01:20.000 +0100FD101186C000,"Life is Strange 2",status-playable;UE4,playable,2024-07-04 05:05:58.000 +0100DC301186A000,"Life is Strange Remastered",status-playable;UE4,playable,2022-10-03 16:54:44.000 +010008501186E000,"Life is Strange: Before the Storm Remastered",status-playable,playable,2023-09-28 17:15:44.000 +0100500012AB4000,"Life is Strange: True Colors [0100500012AB4000]",gpu;status-ingame;UE4,ingame,2024-04-08 16:11:52.000 +,"Life of Boris: Super Slav",status-ingame,ingame,2020-12-17 11:40:05.000 +0100B3A0135D6000,"Life of Fly",status-playable,playable,2021-01-25 23:41:07.000 +010069A01506E000,"Life of Fly 2",slow;status-playable,playable,2022-10-28 19:26:52.000 +01005B6008132000,"Lifeless Planet",status-playable,playable,2022-08-03 21:25:13.000 +,"Light Fall",nvdec;status-playable,playable,2021-01-18 14:55:36.000 +010087700D07C000,"Light Tracer",nvdec;status-playable,playable,2021-05-05 19:15:43.000 +01009C8009026000,"LIMBO",cpu;status-boots;32-bit,boots,2023-06-28 15:39:19.000 +,"Linelight",status-playable,playable,2020-12-17 12:18:07.000 +,"Lines X",status-playable,playable,2020-05-11 15:28:30.000 +,"Lines XL",status-playable,playable,2020-08-31 17:48:23.000 +0100943010310000,"Little Busters! Converted Edition",status-playable;nvdec,playable,2022-09-29 15:34:56.000 +,"Little Dragons Cafe",status-playable,playable,2020-05-12 00:00:52.000 +,"LITTLE FRIENDS -DOGS & CATS-",status-playable,playable,2020-11-12 12:45:51.000 +,"Little Inferno",32-bit;gpu;nvdec;status-ingame,ingame,2020-12-17 21:43:56.000 +0100E7000E826000,"Little Misfortune",nvdec;status-playable,playable,2021-02-23 20:39:44.000 +0100FE0014200000,"Little Mouse's Encyclopedia",status-playable,playable,2022-10-28 19:38:58.000 +01002FC00412C000,"Little Nightmares",status-playable;nvdec;UE4,playable,2022-08-03 21:45:35.000 +010097100EDD6000,"Little Nightmares II",status-playable;UE4,playable,2023-02-10 18:24:44.000 +010093A0135D6000,"Little Nightmares II DEMO",status-playable;UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20.000 +0100535014D76000,"Little Noah: Scion of Paradise",status-playable;opengl-backend-bug,playable,2022-09-14 04:17:13.000 +0100E6D00E81C000,"Little Racer",status-playable,playable,2022-10-18 16:41:13.000 +,"Little Shopping",status-playable,playable,2020-10-03 16:34:35.000 +,"Little Town Hero",status-playable,playable,2020-10-15 23:28:48.000 +,"Little Triangle",status-playable,playable,2020-06-17 14:46:26.000 +0100CF801776C000,"LIVE A LIVE",status-playable;UE4;amd-vendor-bug,playable,2023-02-05 15:12:07.000 +0100BA000FC9C000,"LOCO-SPORTS",status-playable,playable,2022-09-20 14:09:30.000 +,"Lode Runner Legacy",status-playable,playable,2021-01-10 14:10:28.000 +,"Lofi Ping Pong",crash;status-ingame,ingame,2020-12-15 20:09:22.000 +0100B6D016EE6000,"Lone Ruin",status-ingame;crash;nvdec,ingame,2023-01-17 06:41:19.000 +0100A0C00E0DE000,"Lonely Mountains Downhill",status-playable;online-broken,playable,2024-07-04 05:08:11.000 +010062A0178A8000,"LOOPERS",gpu;slow;status-ingame;crash,ingame,2022-06-17 19:21:45.000 +,"Lost Horizon",status-playable,playable,2020-09-01 13:41:22.000 +,"Lost Horizon 2",nvdec;status-playable,playable,2020-06-16 12:02:12.000 +01005FE01291A000,"Lost in Random",gpu;status-ingame,ingame,2022-12-18 07:09:28.000 +0100156014C6A000,"Lost Lands 3: The Golden Curse",status-playable;nvdec,playable,2022-10-24 16:30:00.000 +0100BDD010AC8000,"Lost Lands: Dark Overlord",status-playable,playable,2022-10-03 11:52:58.000 +0100133014510000,"Lost Lands: The Four Horsemen",status-playable;nvdec,playable,2022-10-24 16:41:00.000 +010054600AC74000,"LOST ORBIT: Terminal Velocity",status-playable,playable,2021-06-14 12:21:12.000 +,"Lost Phone Stories",services;status-ingame,ingame,2020-04-05 23:17:33.000 +01008AD013A86800,"Lost Ruins",gpu;status-ingame,ingame,2023-02-19 14:09:00.000 +,"LOST SPHEAR",status-playable,playable,2021-01-10 06:01:21.000 +0100018013124000,"Lost Words: Beyond the Page",status-playable,playable,2022-10-24 17:03:21.000 +0100D36011AD4000,"Love Letter from Thief X",gpu;status-ingame;nvdec,ingame,2023-11-14 03:55:31.000 +,"Ludo Mania",crash;services;status-nothing,nothing,2020-04-03 00:33:47.000 +010048701995E000,"Luigi's Mansion 2 HD",status-ingame;ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27.000 +0100DCA0064A6000,"Luigi's Mansion 3",gpu;slow;status-ingame;Needs Update;ldn-works,ingame,2024-09-27 22:17:36.000 +,"Lumini",status-playable,playable,2020-08-09 20:45:09.000 +0100FF00042EE000,"Lumo",status-playable;nvdec,playable,2022-02-11 18:20:30.000 +,"Lust for Darkness",nvdec;status-playable,playable,2020-07-26 12:09:15.000 +0100F0B00F68E000,"Lust for Darkness: Dawn Edition",nvdec;status-playable,playable,2021-06-16 13:47:46.000 +0100EC2011A80000,"LUXAR",status-playable,playable,2021-03-04 21:11:57.000 +0100F2400D434000,"Machi Knights Blood bagos",status-playable;nvdec;UE4,playable,2022-09-14 15:08:04.000 +,"Mad Carnage",status-playable,playable,2021-01-10 13:00:07.000 +,"Mad Father",status-playable,playable,2020-11-12 13:22:10.000 +010061E00EB1E000,"Mad Games Tycoon",status-playable,playable,2022-09-20 14:23:14.000 +01004A200E722000,"Magazine Mogul",status-playable;loader-allocator,playable,2022-10-03 12:05:34.000 +,"MagiCat",status-playable,playable,2020-12-11 15:22:07.000 +,"Magicolors",status-playable,playable,2020-08-12 18:39:11.000 +01008C300B624000,"Mahjong Solitaire Refresh",status-boots;crash,boots,2022-12-09 12:02:55.000 +010099A0145E8000,"Mahluk dark demon",status-playable,playable,2021-04-15 13:14:24.000 +,"Mainlining",status-playable,playable,2020-06-05 01:02:00.000 +0100D9900F220000,"Maitetsu: Pure Station",status-playable,playable,2022-09-20 15:12:49.000 +0100A78017BD6000,"Makai Senki Disgaea 7",status-playable,playable,2023-10-05 00:22:18.000 +,"Mana Spark",status-playable,playable,2020-12-10 13:41:01.000 +010093D00CB22000,"Maneater",status-playable;nvdec;UE4,playable,2024-05-21 16:11:57.000 +,"Manifold Garden",status-playable,playable,2020-10-13 20:27:13.000 +0100C9A00952A000,"Manticore - Galaxy on Fire",status-boots;crash;nvdec,boots,2024-02-04 04:37:24.000 +0100E98002F6E000,"Mantis Burn Racing",status-playable;online-broken;ldn-broken,playable,2024-09-02 02:13:04.000 +01008E800D1FE000,"Marble Power Blast",status-playable,playable,2021-06-04 16:00:02.000 +,"Märchen Forest - 0100B201D5E000",status-playable,playable,2021-02-04 21:33:34.000 +0100DA7017C9E000,"Marco & The Galaxy Dragon Demo",gpu;status-ingame;demo,ingame,2023-06-03 13:05:33.000 +01006D0017F7A000,"Mario & Luigi: Brothership",status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00.000 +010002C00C270000,"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",status-ingame;crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55.000 +010067300059A000,"Mario + Rabbids Kingdom Battle",slow;status-playable;opengl-backend-bug,playable,2024-05-06 10:16:54.000 +0100317013770000,"Mario + Rabbids® Sparks of Hope",gpu;status-ingame;Needs Update,ingame,2024-06-20 19:56:19.000 +0100C9C00E25C000,"Mario Golf: Super Rush",gpu;status-ingame,ingame,2024-08-18 21:31:48.000 +0100152000022000,"Mario Kart 8 Deluxe",32-bit;status-playable;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17.000 +0100ED100BA3A000,"Mario Kart Live: Home Circuit",services;status-nothing;crash;Needs More Attention,nothing,2022-12-07 22:36:52.000 +01006FE013472000,"Mario Party Superstars",gpu;status-ingame;ldn-works;mac-bug,ingame,2024-05-16 11:23:34.000 +010019401051C000,"Mario Strikers: Battle League Football",status-boots;crash;nvdec,boots,2024-05-07 06:23:56.000 +0100BDE00862A000,"Mario Tennis Aces",gpu;status-ingame;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40.000 +0100B99019412000,"Mario vs. Donkey Kong",status-playable,playable,2024-05-04 21:22:39.000 +0100D9E01DBB0000,"Mario vs. Donkey Kong™ Demo",status-playable,playable,2024-02-18 10:40:06.000 +01009A700A538000,"Mark of the Ninja Remastered",status-playable,playable,2022-08-04 15:48:30.000 +010044600FDF0000,"Marooners",status-playable;nvdec;online-broken,playable,2022-10-18 21:35:26.000 +010060700AC50000,"Marvel Ultimate Alliance 3: The Black Order",status-playable;nvdec;ldn-untested,playable,2024-02-14 19:51:51.000 +01003DE00C95E000,"Mary Skelter 2",status-ingame;crash;regression,ingame,2023-09-12 07:37:28.000 +0100113008262000,"Masquerada: Songs and Shadows",status-playable,playable,2022-09-20 15:18:54.000 +01004800197F0000,"Master Detective Archives: Rain Code",gpu;status-ingame,ingame,2024-04-19 20:11:09.000 +0100CC7009196000,"Masters of Anima",status-playable;nvdec,playable,2022-08-04 16:00:09.000 +,"Mathland",status-playable,playable,2020-09-01 15:40:06.000 +,"Max & The Book of Chaos",status-playable,playable,2020-09-02 12:24:43.000 +01001C9007614000,"Max: The Curse Of Brotherhood",status-playable;nvdec,playable,2022-08-04 16:33:04.000 +,"Maze",status-playable,playable,2020-12-17 16:13:58.000 +0100EEF00CBC0000,"MEANDERS",UE4;gpu;status-ingame,ingame,2021-06-11 19:19:33.000 +,"Mech Rage",status-playable,playable,2020-11-18 12:30:16.000 +0100C4F005EB4000,"Mecho Tales",status-playable,playable,2022-08-04 17:03:19.000 +0100E4600D31A000,"Mechstermination Force",status-playable,playable,2024-07-04 05:39:15.000 +,"Medarot Classics Plus Kabuto Ver",status-playable,playable,2020-11-21 11:31:18.000 +,"Medarot Classics Plus Kuwagata Ver",status-playable,playable,2020-11-21 11:30:40.000 +0100BBC00CB9A000,"Mega Mall Story",slow;status-playable,playable,2022-08-04 17:10:58.000 +0100B0C0086B0000,"Mega Man 11",status-playable,playable,2021-04-26 12:07:53.000 +0100734016266000,"Mega Man Battle Network Legacy Collection Vol. 2",status-playable,playable,2023-08-03 18:04:32.000 +01002D4007AE0000,"Mega Man Legacy Collection Vol.1",gpu;status-ingame,ingame,2021-06-03 18:17:17.000 +,"Mega Man X Legacy Collection",audio;crash;services;status-menus,menus,2020-12-04 04:30:17.000 +,"Megabyte Punch",status-playable,playable,2020-10-16 14:07:18.000 +,"Megadimension Neptunia VII",32-bit;nvdec;status-playable,playable,2020-12-17 20:56:03.000 +010038E016264000,"Megaman Battle Network Legacy Collection Vol 1",status-playable,playable,2023-04-25 03:55:57.000 +,"Megaman Legacy Collection 2",status-playable,playable,2021-01-06 08:47:59.000 +010025C00D410000,"MEGAMAN ZERO/ZX LEGACY COLLECTION",status-playable,playable,2021-06-14 16:17:32.000 +010082B00E8B8000,"Megaquarium",status-playable,playable,2022-09-14 16:50:00.000 +010005A00B312000,"Megaton Rainfall",gpu;status-boots;opengl,boots,2022-08-04 18:29:43.000 +0100EA100DF92000,"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",32-bit;status-playable;nvdec,playable,2022-12-05 13:19:12.000 +0100B360068B2000,"Mekorama",gpu;status-boots,boots,2021-06-17 16:37:21.000 +01000FA010340000,"Melbits World",status-menus;nvdec;online,menus,2021-11-26 13:51:22.000 +0100F68019636000,"Melon Journey",status-playable,playable,2023-04-23 21:20:01.000 +,"Memories Off -Innocent Fille- for Dearest",status-playable,playable,2020-08-04 07:31:22.000 +010062F011E7C000,"Memory Lane",status-playable;UE4,playable,2022-10-05 14:31:03.000 +,"Meow Motors",UE4;gpu;status-ingame,ingame,2020-12-18 00:24:01.000 +,"Mercenaries Saga Chronicles",status-playable,playable,2021-01-10 12:48:19.000 +,"Mercenaries Wings The False Phoenix",crash;services;status-nothing,nothing,2020-05-08 22:42:12.000 +,"Mercenary Kings",online;status-playable,playable,2020-10-16 13:05:58.000 +0100E5000D3CA000,"Merchants of Kaidan",status-playable,playable,2021-04-15 11:44:28.000 +,"METAGAL",status-playable,playable,2020-06-05 00:05:48.000 +010047F01AA10000,"Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3",services-horizon;status-menus,menus,2024-07-24 06:34:06.000 +0100E8F00F6BE000,"METAL MAX Xeno Reborn",status-playable,playable,2022-12-05 15:33:53.000 +,"Metaloid: Origin",status-playable,playable,2020-06-04 20:26:35.000 +010055200E87E000,"Metamorphosis",UE4;audout;gpu;nvdec;status-ingame,ingame,2021-06-16 16:18:11.000 +0100D4900E82C000,"Metro 2033 Redux",gpu;status-ingame,ingame,2022-11-09 10:53:13.000 +0100F0400E850000,"Metro: Last Light Redux",slow;status-ingame;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52.000 +010093801237C000,"Metroid Dread",status-playable,playable,2023-11-13 04:02:36.000 +010012101468C000,"Metroid Prime Remastered",gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15.000 +0100A1200F20C000,"Midnight Evil",status-playable,playable,2022-10-18 22:55:19.000 +0100C1E0135E0000,"Mighty Fight Federation",online;status-playable,playable,2021-04-06 18:39:56.000 +0100AD701344C000,"Mighty Goose",status-playable;nvdec,playable,2022-10-28 20:25:38.000 +,"Mighty Gunvolt Burst",status-playable,playable,2020-10-19 16:05:49.000 +010060D00AE36000,"Mighty Switch Force! Collection",status-playable,playable,2022-10-28 20:40:32.000 +01003DA010E8A000,"Miitopia",gpu;services-horizon;status-ingame,ingame,2024-09-06 10:39:13.000 +01007DA0140E8000,"Miitopia Demo",services;status-menus;crash;demo,menus,2023-02-24 11:50:58.000 +,"Miles & Kilo",status-playable,playable,2020-10-22 11:39:49.000 +0100976008FBE000,"Millie",status-playable,playable,2021-01-26 20:47:19.000 +0100F5700C9A8000,"MIND Path to Thalamus",UE4;status-playable,playable,2021-06-16 17:37:25.000 +0100D71004694000,"Minecraft",status-ingame;crash;ldn-broken,ingame,2024-09-29 12:08:59.000 +01006BD001E06000,"Minecraft - Nintendo Switch Edition",status-playable;ldn-broken,playable,2023-10-15 01:47:08.000 +01006C100EC08000,"Minecraft Dungeons",status-playable;nvdec;online-broken;UE4,playable,2024-06-26 22:10:43.000 +01007C6012CC8000,"Minecraft Legends",gpu;status-ingame;crash,ingame,2024-03-04 00:32:24.000 +01003EF007ABA000,"Minecraft: Story Mode - Season Two",status-playable;online-broken,playable,2023-03-04 00:30:50.000 +010059C002AC2000,"Minecraft: Story Mode - The Complete Adventure",status-boots;crash;online-broken,boots,2022-08-04 18:56:58.000 +0100B7500F756000,"Minefield",status-playable,playable,2022-10-05 15:03:29.000 +01003560119A6000,"Mini Motor Racing X",status-playable,playable,2021-04-13 17:54:49.000 +,"Mini Trains",status-playable,playable,2020-07-29 23:06:20.000 +010039200EC66000,"Miniature - The Story Puzzle",status-playable;UE4,playable,2022-09-14 17:18:50.000 +010069200EB80000,"Ministry of Broadcast",status-playable,playable,2022-08-10 00:31:16.000 +0100C3F000BD8000,"Minna de Wai Wai! Spelunker",status-nothing;crash,nothing,2021-11-03 07:17:11.000 +0100FAE010864000,"Minoria",status-playable,playable,2022-08-06 18:50:50.000 +01005AB015994000,"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",gpu;status-playable,playable,2022-03-28 02:22:24.000 +0100CFA0138C8000,"Missile Dancer",status-playable,playable,2021-01-31 12:22:03.000 +0100E3601495C000,"Missing Features 2D",status-playable,playable,2022-10-28 20:52:54.000 +010059200CC40000,"Mist Hunter",status-playable,playable,2021-06-16 13:58:58.000 +,"Mittelborg: City of Mages",status-playable,playable,2020-08-12 19:58:06.000 +0100A9F01776A000,"MLB The Show 22 Tech Test",services;status-nothing;crash;Needs Update;demo,nothing,2022-12-09 10:28:34.000 +0100E2E01C32E000,"MLB The Show 24",services-horizon;status-nothing,nothing,2024-03-31 04:54:11.000 +0100876015D74000,"MLB® The Show™ 22",gpu;slow;status-ingame,ingame,2023-04-25 06:28:43.000 +0100913019170000,"MLB® The Show™ 23",gpu;status-ingame,ingame,2024-07-26 00:56:50.000 +,"MO:Astray",crash;status-ingame,ingame,2020-12-11 21:45:44.000 +,"Moai VI: Unexpected Guests",slow;status-playable,playable,2020-10-27 16:40:20.000 +0100D8700B712000,"Modern Combat Blackout",crash;status-nothing,nothing,2021-03-29 19:47:15.000 +010004900D772000,"Modern Tales: Age of Invention",slow;status-playable,playable,2022-10-12 11:20:19.000 +0100B8500D570000,"Moero Chronicle Hyper",32-bit;status-playable,playable,2022-08-11 07:21:56.000 +01004EB0119AC000,"Moero Crystal H",32-bit;status-playable;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22.000 +0100B46017500000,"MOFUMOFU Sensen",gpu;status-menus,menus,2024-09-21 21:51:08.000 +01004A400C320000,"Momodora: Revere Under the Moonlight",deadlock;status-nothing,nothing,2022-02-06 03:47:43.000 +01002CC00BC4C000,"Momonga Pinball Adventures",status-playable,playable,2022-09-20 16:00:40.000 +010093100DA04000,"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",gpu;status-ingame,ingame,2023-09-22 10:21:46.000 +0100FBD00ED24000,"MONKEY BARRELS",status-playable,playable,2022-09-14 17:28:52.000 +,"Monkey King: Master of the Clouds",status-playable,playable,2020-09-28 22:35:48.000 +01003030161DC000,"Monomals",gpu;status-ingame,ingame,2024-08-06 22:02:51.000 +0100F3A00FB78000,"Mononoke Slashdown",status-menus;crash,menus,2022-05-04 20:55:47.000 +01007430037F6000,"Monopoly for Nintendo Switch",status-playable;nvdec;online-broken,playable,2024-02-06 23:13:01.000 +01005FF013DC2000,"Monopoly Madness",status-playable,playable,2022-01-29 21:13:52.000 +0100E2D0128E6000,"Monster Blast",gpu;status-ingame,ingame,2023-09-02 20:02:32.000 +01006F7001D10000,"Monster Boy and the Cursed Kingdom",status-playable;nvdec,playable,2022-08-04 20:06:32.000 +,"Monster Bugs Eat People",status-playable,playable,2020-07-26 02:05:34.000 +0100742007266000,"Monster Energy Supercross - The Official Videogame",status-playable;nvdec;UE4,playable,2022-08-04 20:25:00.000 +0100F8100B982000,"Monster Energy Supercross - The Official Videogame 2",status-playable;nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24.000 +010097800EA20000,"Monster Energy Supercross - The Official Videogame 3",UE4;audout;nvdec;online;status-playable,playable,2021-06-14 12:37:54.000 +0100E9900ED74000,"Monster Farm",32-bit;nvdec;status-playable,playable,2021-05-05 19:29:13.000 +0100770008DD8000,"Monster Hunter Generation Ultimate",32-bit;status-playable;online-broken;ldn-works,playable,2024-03-18 14:35:36.000 +0100B04011742000,"Monster Hunter Rise",gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59.000 +010093A01305C000,"Monster Hunter Rise Demo",status-playable;online-broken;ldn-works;demo,playable,2022-10-18 23:04:17.000 +,"Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600",services;status-ingame,ingame,2022-07-10 19:27:30.000 +010042501329E000,"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",status-playable;demo,playable,2022-11-13 22:20:26.000 +,"Monster Hunter XX Demo",32-bit;cpu;status-nothing,nothing,2020-03-22 10:12:28.000 +0100C3800049C000,"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",status-playable,playable,2024-07-21 14:08:09.000 +010088400366E000,"MONSTER JAM CRUSH IT!™",UE4;nvdec;online;status-playable,playable,2021-04-08 19:29:27.000 +010095C00F354000,"Monster Jam Steel Titans",status-menus;crash;nvdec;UE4,menus,2021-11-14 09:45:38.000 +010051B0131F0000,"Monster Jam Steel Titans 2",status-playable;nvdec;UE4,playable,2022-10-24 17:17:59.000 +,"Monster Puzzle",status-playable,playable,2020-09-28 22:23:10.000 +,"Monster Sanctuary",crash;status-ingame,ingame,2021-04-04 05:06:41.000 +0100D30010C42000,"Monster Truck Championship",slow;status-playable;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51.000 +01004E10142FE000,"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",crash;status-ingame,ingame,2021-07-23 10:56:44.000 +010039F00EF70000,"Monstrum",status-playable,playable,2021-01-31 11:07:26.000 +,"Moonfall Ultimate",nvdec;status-playable,playable,2021-01-17 14:01:25.000 +0100E3D014ABC000,"Moorhuhn Jump and Run Traps and Treasures",status-playable,playable,2024-03-08 15:10:02.000 +010045C00F274000,"Moorkuhn Kart 2",status-playable;online-broken,playable,2022-10-28 21:10:35.000 +010040E00F642000,"Morbid: The Seven Acolytes",status-playable,playable,2022-08-09 17:21:58.000 +,"More Dark",status-playable,playable,2020-12-15 16:01:06.000 +,"Morphies Law",UE4;crash;ldn-untested;nvdec;online;status-menus,menus,2020-11-22 17:05:29.000 +,"Morphite",status-playable,playable,2021-01-05 19:40:55.000 +01006560184E6000,"Mortal Kombat 1",gpu;status-ingame,ingame,2024-09-04 15:45:47.000 +0100F2200C984000,"Mortal Kombat 11",slow;status-ingame;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17.000 +,"Mosaic",status-playable,playable,2020-08-11 13:07:35.000 +010040401D564000,"Moto GP 24",gpu;status-ingame,ingame,2024-05-10 23:41:00.000 +01002ED00B01C000,"Moto Racer 4",UE4;nvdec;online;status-playable,playable,2021-04-08 19:09:11.000 +01003F200D0F2000,"Moto Rush GT",status-playable,playable,2022-08-05 11:23:55.000 +0100361007268000,"MotoGP 18",status-playable;nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45.000 +01004B800D0E8000,"MotoGP 19",status-playable;nvdec;online-broken;UE4,playable,2022-08-05 11:54:14.000 +01001FA00FBBC000,"MotoGP 20",status-playable;ldn-untested,playable,2022-09-29 17:58:01.000 +01000F5013820000,"MotoGP 21",gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08.000 +01002A900D6D6000,"Motorsport Manager for Nintendo Switch",status-playable;nvdec,playable,2022-08-05 12:48:14.000 +01009DB00D6E0000,"Mountain Rescue Simulator",status-playable,playable,2022-09-20 16:36:48.000 +0100C4C00E73E000,"Moving Out",nvdec;status-playable,playable,2021-06-07 21:17:24.000 +0100D3300F110000,"Mr Blaster",status-playable,playable,2022-09-14 17:56:24.000 +,"Mr. DRILLER DrillLand",nvdec;status-playable,playable,2020-07-24 13:56:48.000 +,"Mr. Shifty",slow;status-playable,playable,2020-05-08 15:28:16.000 +,"Ms. Splosion Man",online;status-playable,playable,2020-05-09 20:45:43.000 +,"Muddledash",services;status-ingame,ingame,2020-05-08 16:46:14.000 +01009D200952E000,"MudRunner - American Wilds",gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52.000 +010073E008E6E000,"Mugsters",status-playable,playable,2021-01-28 17:57:17.000 +,"MUJO",status-playable,playable,2020-05-08 16:31:04.000 +0100211005E94000,"Mulaka",status-playable,playable,2021-01-28 18:07:20.000 +010038B00B9AE000,"Mummy Pinball",status-playable,playable,2022-08-05 16:08:11.000 +,"Muse Dash",status-playable,playable,2020-06-06 14:41:29.000 +,"Mushroom Quest",status-playable,playable,2020-05-17 13:07:08.000 +,"Mushroom Wars 2",nvdec;status-playable,playable,2020-09-28 15:26:08.000 +,"Music Racer",status-playable,playable,2020-08-10 08:51:23.000 +,"MUSNYX",status-playable,playable,2020-05-08 14:24:43.000 +,"Musou Orochi 2 Ultimate",crash;nvdec;status-boots,boots,2021-04-09 19:39:16.000 +0100F6000EAA8000,"Must Dash Amigos",status-playable,playable,2022-09-20 16:45:56.000 +0100C3E00ACAA000,"Mutant Football League Dynasty Edition",status-playable;online-broken,playable,2022-08-05 17:01:51.000 +01004BE004A86000,"Mutant Mudds Collection",status-playable,playable,2022-08-05 17:11:38.000 +0100E6B00DEA4000,"Mutant Year Zero: Road to Eden",status-playable;nvdec;UE4,playable,2022-09-10 13:31:10.000 +0100161009E5C000,"MX Nitro",status-playable,playable,2022-09-27 22:34:33.000 +0100218011E7E000,"MX vs ATV All Out",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46.000 +,"MXGP3 - The Official Motocross Videogame",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 14:00:20.000 +01002C6012334000,"My Aunt is a Witch",status-playable,playable,2022-10-19 09:21:17.000 +,"My Butler",status-playable,playable,2020-06-27 13:46:23.000 +010031200B94C000,"My Friend Pedro: Blood Bullets Bananas",nvdec;status-playable,playable,2021-05-28 11:19:17.000 +,"My Girlfriend is a Mermaid!?",nvdec;status-playable,playable,2020-05-08 13:32:55.000 +,"MY HERO ONE'S JUSTICE",UE4;crash;gpu;online;status-menus,menus,2020-12-10 13:11:04.000 +,"MY HERO ONE'S JUSTICE 2",UE4;gpu;nvdec;status-ingame,ingame,2020-12-18 14:08:47.000 +0100E4701373E000,"My Hidden Things",status-playable,playable,2021-04-15 11:26:06.000 +,"My Little Dog Adventure",gpu;status-ingame,ingame,2020-12-10 17:47:37.000 +,"My Little Riding Champion",slow;status-playable,playable,2020-05-08 17:00:53.000 +010086B00C784000,"My Lovely Daughter",status-playable,playable,2022-11-24 17:25:32.000 +0100E7700C284000,"My Memory of Us",status-playable,playable,2022-08-20 11:03:14.000 +010028F00ABAE000,"My Riding Stables - Life with Horses",status-playable,playable,2022-08-05 21:39:07.000 +010042A00FBF0000,"My Riding Stables 2: A New Adventure",status-playable,playable,2021-05-16 14:14:59.000 +0100E25008E68000,"My Time At Portia",status-playable,playable,2021-05-28 12:42:55.000 +0100CD5011A02000,"My Universe - Cooking Star Restaurant",status-playable,playable,2022-10-19 10:00:44.000 +0100F71011A0A000,"My Universe - Fashion Boutique",status-playable;nvdec,playable,2022-10-12 14:54:19.000 +0100CD5011A02000,"My Universe - Pet Clinic Cats & Dogs",status-boots;crash;nvdec,boots,2022-02-06 02:05:53.000 +01006C301199C000,"My Universe - School Teacher",nvdec;status-playable,playable,2021-01-21 16:02:52.000 +,"n Verlore Verstand",slow;status-ingame,ingame,2020-12-10 18:00:28.000 +01009A500E3DA000,"n Verlore Verstand - Demo",status-playable,playable,2021-02-09 00:13:32.000 +01000D5005974000,"N++",status-playable,playable,2022-08-05 21:54:58.000 +,"NAIRI: Tower of Shirin",nvdec;status-playable,playable,2020-08-09 19:49:12.000 +010002F001220000,"NAMCO MUSEUM",status-playable;ldn-untested,playable,2024-08-13 07:52:21.000 +0100DAA00AEE6000,"NAMCO MUSEUM ARCADE PAC",status-playable,playable,2021-06-07 21:44:50.000 +,"NAMCOT COLLECTION",audio;status-playable,playable,2020-06-25 13:35:22.000 +010072B00BDDE000,"Narcos: Rise of the Cartels",UE4;crash;nvdec;status-boots,boots,2021-03-22 13:18:47.000 +010084D00CF5E000,"NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO",status-playable,playable,2024-06-29 13:04:22.000 +01006BB00800A000,"NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst",status-playable;nvdec,playable,2024-06-16 14:58:05.000 +0100D2D0190A4000,"NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS",services-horizon;status-nothing,nothing,2024-07-25 05:16:48.000 +0100715007354000,"NARUTO™: Ultimate Ninja® STORM",status-playable;nvdec,playable,2022-08-06 14:10:31.000 +0100545016D5E000,"NASCAR Rivals",status-ingame;crash;Incomplete,ingame,2023-04-21 01:17:47.000 +0100103011894000,"Naught",UE4;status-playable,playable,2021-04-26 13:31:45.000 +01001AE00C1B2000,"NBA 2K Playgrounds 2",status-playable;nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38.000 +0100760002048000,"NBA 2K18",gpu;status-ingame;ldn-untested,ingame,2022-08-06 14:17:51.000 +01001FF00B544000,"NBA 2K19",crash;ldn-untested;services;status-nothing,nothing,2021-04-16 13:07:21.000 +0100E24011D1E000,"NBA 2K21",gpu;status-boots,boots,2022-10-05 15:31:51.000 +0100ACA017E4E800,"NBA 2K23",status-boots,boots,2023-10-10 23:07:14.000 +010006501A8D8000,"NBA 2K24",cpu;gpu;status-boots,boots,2024-08-11 18:23:08.000 +0100F5A008126000,"NBA Playgrounds",status-playable;nvdec;online-broken;UE4,playable,2022-08-06 16:13:44.000 +010002900294A000,"NBA Playgrounds",status-playable;nvdec;online-broken;UE4,playable,2022-08-06 17:06:59.000 +,"Need a Packet?",status-playable,playable,2020-08-12 16:09:01.000 +010029B0118E8000,"Need for Speed Hot Pursuit Remastered",status-playable;online-broken,playable,2024-03-20 21:58:02.000 +,"Need For Speed Hot Pursuit Remastered",audio;online;slow;status-ingame,ingame,2020-10-27 17:46:58.000 +,"Nefarious",status-playable,playable,2020-12-17 03:20:33.000 +01008390136FC000,"Negative",nvdec;status-playable,playable,2021-03-24 11:29:41.000 +010065F00F55A000,"Neighbours back From Hell",status-playable;nvdec,playable,2022-10-12 15:36:48.000 +0100B4900AD3E000,"Nekopara Vol.1",status-playable;nvdec,playable,2022-08-06 18:25:54.000 +,"Nekopara Vol.2",status-playable,playable,2020-12-16 11:04:47.000 +010045000E418000,"Nekopara Vol.3",status-playable,playable,2022-10-03 12:49:04.000 +,"Nekopara Vol.4",crash;status-ingame,ingame,2021-01-17 01:47:18.000 +01006ED00BC76000,"Nelke & the Legendary Alchemists ~Ateliers of the New World~",status-playable,playable,2021-01-28 19:39:42.000 +,"Nelly Cootalot",status-playable,playable,2020-06-11 20:55:42.000 +01001AB0141A8000,"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",crash;status-ingame,ingame,2021-07-18 07:29:18.000 +0100EBB00D2F4000,"Neo Cab",status-playable,playable,2021-04-24 00:27:58.000 +,"Neo Cab Demo",crash;status-boots,boots,2020-06-16 00:14:00.000 +010006D0128B4000,"NEOGEO POCKET COLOR SELECTION Vol.1",status-playable,playable,2023-07-08 20:55:36.000 +0100BAB01113A000,"Neon Abyss",status-playable,playable,2022-10-05 15:59:44.000 +010075E0047F8000,"Neon Chrome",status-playable,playable,2022-08-06 18:38:34.000 +010032000EAC6000,"Neon Drive",status-playable,playable,2022-09-10 13:45:48.000 +0100B9201406A000,"Neon White",status-ingame;crash,ingame,2023-02-02 22:25:06.000 +0100743008694000,"Neonwall",status-playable;nvdec,playable,2022-08-06 18:49:52.000 +,"Neoverse Trinity Edition - 01001A20133E000",status-playable,playable,2022-10-19 10:28:03.000 +,"Nerdook Bundle Vol. 1",gpu;slow;status-ingame,ingame,2020-10-07 14:27:10.000 +01008B0010160000,"Nerved",status-playable;UE4,playable,2022-09-20 17:14:03.000 +,"NeuroVoider",status-playable,playable,2020-06-04 18:20:05.000 +0100C20012A54000,"Nevaeh",gpu;nvdec;status-ingame,ingame,2021-06-16 17:29:03.000 +010039801093A000,"Never Breakup",status-playable,playable,2022-10-05 16:12:12.000 +0100F79012600000,"Neverending Nightmares",crash;gpu;status-boots,boots,2021-04-24 01:43:35.000 +,"Neverlast",slow;status-ingame,ingame,2020-07-13 23:55:19.000 +010013700DA4A000,"Neverwinter Nights: Enhanced Edition",gpu;status-menus;nvdec,menus,2024-09-30 02:59:19.000 +,"New Frontier Days -Founding Pioneers-",status-playable,playable,2020-12-10 12:45:07.000 +0100F4300BF2C000,"New Pokémon Snap",status-playable,playable,2023-01-15 23:26:57.000 +010017700B6C2000,"New Super Lucky's Tale",status-playable,playable,2024-03-11 14:14:10.000 +0100EA80032EA000,"New Super Mario Bros. U Deluxe",32-bit;status-playable,playable,2023-10-08 02:06:37.000 +,"Newt One",status-playable,playable,2020-10-17 21:21:48.000 +,"Nexomon: Extinction",status-playable,playable,2020-11-30 15:02:22.000 +0100B69012EC6000,"Nexoria: Dungeon Rogue Heroes",gpu;status-ingame,ingame,2021-10-04 18:41:29.000 +,"Next Up Hero",online;status-playable,playable,2021-01-04 22:39:36.000 +0100E5600D446000,"Ni No Kuni Wrath of the White Witch",status-boots;32-bit;nvdec,boots,2024-07-12 04:52:59.000 +,"Nice Slice",nvdec;status-playable,playable,2020-06-17 15:13:27.000 +,"Niche - a genetics survival game",nvdec;status-playable,playable,2020-11-27 14:01:11.000 +010010701AFB2000,"Nickelodeon All-Star Brawl 2",status-playable,playable,2024-06-03 14:15:01.000 +,"Nickelodeon Kart Racers",status-playable,playable,2021-01-07 12:16:49.000 +0100CEC003A4A000,"Nickelodeon Paw Patrol: On a Roll",nvdec;status-playable,playable,2021-01-28 21:14:49.000 +,"Nicky: The Home Alone Golf Ball",status-playable,playable,2020-08-08 13:45:39.000 +0100A95012668000,"Nicole",status-playable;audout,playable,2022-10-05 16:41:44.000 +0100B8E016F76000,"NieR:Automata The End of YoRHa Edition",slow;status-ingame;crash,ingame,2024-05-17 01:06:34.000 +0100F3A0095A6000,"Night Call",status-playable;nvdec,playable,2022-10-03 12:57:00.000 +0100921006A04000,"Night in the Woods",status-playable,playable,2022-12-03 20:17:54.000 +0100D8500A692000,"Night Trap - 25th Anniversary Edition",status-playable;nvdec,playable,2022-08-08 13:16:14.000 +,"Nightmare Boy",status-playable,playable,2021-01-05 15:52:29.000 +01006E700B702000,"Nightmares from the Deep 2: The Siren's Call",status-playable;nvdec,playable,2022-10-19 10:58:53.000 +0100628004BCE000,"Nights of Azure 2: Bride of the New Moon",status-menus;crash;nvdec;regression,menus,2022-11-24 16:00:39.000 +,"Nightshade",nvdec;status-playable,playable,2020-05-10 19:43:31.000 +,"Nihilumbra",status-playable,playable,2020-05-10 16:00:12.000 +0100D03003F0E000,"Nine Parchments",status-playable;ldn-untested,playable,2022-08-07 12:32:08.000 +01002AF014F4C000,"NINJA GAIDEN 3: Razor's Edge",status-playable;nvdec,playable,2023-08-11 08:25:31.000 +0100E2F014F46000,"Ninja Gaiden Sigma",status-playable;nvdec,playable,2022-11-13 16:27:02.000 +,"Ninja Gaiden Sigma 2 - 0100696014FA000",status-playable;nvdec,playable,2024-07-31 21:53:48.000 +,"Ninja Shodown",status-playable,playable,2020-05-11 12:31:21.000 +,"Ninja Striker",status-playable,playable,2020-12-08 19:33:29.000 +0100CCD0073EA000,"Ninjala",status-boots;online-broken;UE4,boots,2024-07-03 20:04:49.000 +010003C00B868000,"Ninjin: Clash of Carrots",status-playable;online-broken,playable,2024-07-10 05:12:26.000 +0100746010E4C000,"NinNinDays",status-playable,playable,2022-11-20 15:17:29.000 +0100C9A00ECE6000,"Nintendo 64 - Nintendo Switch Online",gpu;status-ingame;vulkan,ingame,2024-04-23 20:21:07.000 +0100D870045B6000,"Nintendo Entertainment System - Nintendo Switch Online",status-playable;online,playable,2022-07-01 15:45:06.000 +0100C4B0034B2000,"Nintendo Labo - Toy-Con 01: Variety Kit",gpu;status-ingame,ingame,2022-08-07 12:56:07.000 +01009AB0034E0000,"Nintendo Labo Toy-Con 02: Robot Kit",gpu;status-ingame,ingame,2022-08-07 13:03:19.000 +01001E9003502000,"Nintendo Labo Toy-Con 03: Vehicle Kit",services;status-menus;crash,menus,2022-08-03 17:20:11.000 +0100165003504000,"Nintendo Labo Toy-Con 04: VR Kit",services;status-boots;crash,boots,2023-01-17 22:30:24.000 +0100D2F00D5C0000,"Nintendo Switch Sports",deadlock;status-boots,boots,2024-09-10 14:20:24.000 +01000EE017182000,"Nintendo Switch Sports Online Play Test",gpu;status-ingame,ingame,2022-03-16 07:44:12.000 +010037200C72A000,"Nippon Marathon",nvdec;status-playable,playable,2021-01-28 20:32:46.000 +010020901088A000,"Nirvana Pilot Yume",status-playable,playable,2022-10-29 11:49:49.000 +,"No Heroes Here",online;status-playable,playable,2020-05-10 02:41:57.000 +0100853015E86000,"No Man’s Sky",gpu;status-ingame,ingame,2024-07-25 05:18:17.000 +0100F0400F202000,"No More Heroes",32-bit;status-playable,playable,2022-09-13 07:44:27.000 +010071400F204000,"No More Heroes 2 Desperate Struggle",32-bit;status-playable;nvdec,playable,2022-11-19 01:38:13.000 +01007C600EB42000,"No More Heroes 3",gpu;status-ingame;UE4,ingame,2024-03-11 17:06:19.000 +01009F3011004000,"No Straight Roads",status-playable;nvdec,playable,2022-10-05 17:01:38.000 +,"NO THING",status-playable,playable,2021-01-04 19:06:01.000 +0100542012884000,"Nongunz: Doppelganger Edition",status-playable,playable,2022-10-29 12:00:39.000 +,"Norman's Great Illusion",status-playable,playable,2020-12-15 19:28:24.000 +01001A500AD6A000,"Norn9 ~Norn + Nonette~ LOFN",status-playable;nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16.000 +,"NORTH",nvdec;status-playable,playable,2021-01-05 16:17:44.000 +0100A9E00D97A000,"Northgard",status-menus;crash,menus,2022-02-06 02:05:35.000 +01008AE019614000,"nOS new Operating System",status-playable,playable,2023-03-22 16:49:08.000 +0100CB800B07E000,"NOT A HERO",status-playable,playable,2021-01-28 19:31:24.000 +,"Not Not a Brain Buster",status-playable,playable,2020-05-10 02:05:26.000 +0100DAF00D0E2000,"Not Tonight",status-playable;nvdec,playable,2022-10-19 11:48:47.000 +,"Nubarron: The adventure of an unlucky gnome",status-playable,playable,2020-12-17 16:45:17.000 +,"Nuclien",status-playable,playable,2020-05-10 05:32:55.000 +,"Numbala",status-playable,playable,2020-05-11 12:01:07.000 +010020500C8C8000,"Number Place 10000",gpu;status-menus,menus,2021-11-24 09:14:23.000 +010003701002C000,"Nurse Love Syndrome",status-playable,playable,2022-10-13 10:05:22.000 +0000000000000000,"nx-hbmenu",status-boots;Needs Update;homebrew,boots,2024-04-06 22:05:32.000 +,"nxquake2",services;status-nothing;crash;homebrew,nothing,2022-08-04 23:14:04.000 +010049F00EC30000,"Nyan Cat: Lost in Space",online;status-playable,playable,2021-06-12 13:22:03.000 +01002E6014FC4000,"O---O",status-playable,playable,2022-10-29 12:12:14.000 +,"OBAKEIDORO!",nvdec;online;status-playable,playable,2020-10-16 16:57:34.000 +01002A000C478000,"Observer",UE4;gpu;nvdec;status-ingame,ingame,2021-03-03 20:19:45.000 +,"Oceanhorn",status-playable,playable,2021-01-05 13:55:22.000 +01006CB010840000,"Oceanhorn 2 Knights of the Lost Realm",status-playable,playable,2021-05-21 18:26:10.000 +,"Octocopter: Double or Squids",status-playable,playable,2021-01-06 01:30:16.000 +0100CAB006F54000,"Octodad Dadliest Catch",crash;status-boots,boots,2021-04-23 15:26:12.000 +,"Octopath Traveler",UE4;crash;gpu;status-ingame,ingame,2020-08-31 02:34:36.000 +0100A3501946E000,"Octopath Traveler II",gpu;status-ingame;amd-vendor-bug,ingame,2024-09-22 11:39:20.000 +010084300C816000,"Odallus",status-playable,playable,2022-08-08 12:37:58.000 +0100BB500EE3C000,"Oddworld: Munch's Oddysee",gpu;nvdec;status-ingame,ingame,2021-06-17 12:11:50.000 +01005E700ABB8000,"Oddworld: New 'n' Tasty",nvdec;status-playable,playable,2021-06-17 17:51:32.000 +0100D210177C6000,"Oddworld: Soulstorm",services-horizon;status-boots;crash,boots,2024-08-18 13:13:26.000 +01002EA00ABBA000,"Oddworld: Stranger's Wrath HD",status-menus;crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21.000 +,"Odium to the Core",gpu;status-ingame,ingame,2021-01-08 14:03:52.000 +01006F5013202000,"Off And On Again",status-playable,playable,2022-10-29 19:46:26.000 +01003CD00E8BC000,"Offroad Racing",status-playable;online-broken;UE4,playable,2022-09-14 18:53:22.000 +01003B900AE12000,"Oh My Godheads: Party Edition",status-playable,playable,2021-04-15 11:04:11.000 +,"Oh...Sir! The Hollywood Roast",status-ingame,ingame,2020-12-06 00:42:30.000 +,"OK K.O.! Let's Play Heroes",nvdec;status-playable,playable,2021-01-11 18:41:02.000 +0100276009872000,"OKAMI HD",status-playable;nvdec,playable,2024-04-05 06:24:58.000 +01006AB00BD82000,"OkunoKA",status-playable;online-broken,playable,2022-08-08 14:41:51.000 +0100CE2007A86000,"Old Man's Journey",nvdec;status-playable,playable,2021-01-28 19:16:52.000 +,"Old School Musical",status-playable,playable,2020-12-10 12:51:12.000 +,"Old School Racer 2",status-playable,playable,2020-10-19 12:11:26.000 +0100E0200B980000,"OlliOlli: Switch Stance",gpu;status-boots,boots,2024-04-25 08:36:37.000 +0100F9D00C186000,"Olympia Soiree",status-playable,playable,2022-12-04 21:07:12.000 +,"OLYMPIC GAMES TOKYO 2020",ldn-untested;nvdec;online;status-playable,playable,2021-01-06 01:20:24.000 +01001D600E51A000,"Omega Labyrinth Life",status-playable,playable,2021-02-23 21:03:03.000 +,"Omega Vampire",nvdec;status-playable,playable,2020-10-17 19:15:35.000 +,"Omensight: Definitive Edition",UE4;crash;nvdec;status-ingame,ingame,2020-07-26 01:45:14.000 +01006DB00D970000,"OMG Zombies!",32-bit;status-playable,playable,2021-04-12 18:04:45.000 +010014E017B14000,"OMORI",status-playable,playable,2023-01-07 20:21:02.000 +,"Once Upon A Coma",nvdec;status-playable,playable,2020-08-01 12:09:39.000 +,"One More Dungeon",status-playable,playable,2021-01-06 09:10:58.000 +,"One Person Story",status-playable,playable,2020-07-14 11:51:02.000 +,"One Piece Pirate Warriors 3",nvdec;status-playable,playable,2020-05-10 06:23:52.000 +,"One Piece Unlimited World Red Deluxe Edition",status-playable,playable,2020-05-10 22:26:32.000 +01008FE00E2F6000,"ONE PIECE: PIRATE WARRIORS 4",status-playable;online-broken;ldn-untested,playable,2022-09-27 22:55:46.000 +0100463013246000,"Oneiros",status-playable,playable,2022-10-13 10:17:22.000 +,"OneWayTicket",UE4;status-playable,playable,2020-06-20 17:20:49.000 +010057C00D374000,"Oniken",status-playable,playable,2022-09-10 14:22:38.000 +010037900C814000,"Oniken: Unstoppable Edition",status-playable,playable,2022-08-08 14:52:06.000 +,"Onimusha: Warlords",nvdec;status-playable,playable,2020-07-31 13:08:39.000 +0100CF4011B2A000,"OniNaki",nvdec;status-playable,playable,2021-02-27 21:52:42.000 +010074000BE8E000,"oOo: Ascension",status-playable,playable,2021-01-25 14:13:34.000 +0100D5400BD90000,"Operación Triunfo 2017",services;status-ingame;nvdec,ingame,2022-08-08 15:06:42.000 +01006CF00CFA4000,"Operencia The Stolen Sun",UE4;nvdec;status-playable,playable,2021-06-08 13:51:07.000 +01004A200BE82000,"OPUS Collection",status-playable,playable,2021-01-25 15:24:04.000 +010049C0075F0000,"OPUS: The Day We Found Earth",nvdec;status-playable,playable,2021-01-21 18:29:31.000 +,"Ord.",status-playable,playable,2020-12-14 11:59:06.000 +010061D00DB74000,"Ori and the Blind Forest: Definitive Edition",status-playable;nvdec;online-broken,playable,2022-09-14 19:58:13.000 +010005800F46E000,"Ori and the Blind Forest: Definitive Edition Demo",status-playable,playable,2022-09-10 14:40:12.000 +01008DD013200000,"Ori and the Will of the Wisps",status-playable,playable,2023-03-07 00:47:13.000 +,"Orn: The Tiny Forest Sprite",UE4;gpu;status-ingame,ingame,2020-08-07 14:25:30.000 +0100E5900F49A000,"Othercide",status-playable;nvdec,playable,2022-10-05 19:04:38.000 +,"OTOKOMIZU",status-playable,playable,2020-07-13 21:00:44.000 +01006AF013A9E000,"Otti house keeper",status-playable,playable,2021-01-31 12:11:24.000 +,"OTTTD",slow;status-ingame,ingame,2020-10-10 19:31:07.000 +010097F010FE6000,"Our two Bedroom Story",gpu;status-ingame;nvdec,ingame,2023-10-10 17:41:20.000 +,"Our World Is Ended.",nvdec;status-playable,playable,2021-01-19 22:46:57.000 +01005A700A166000,"Out Of The Box",status-playable,playable,2021-01-28 01:34:27.000 +0100A0D013464000,"Outbreak: Endless Nightmares",status-playable,playable,2022-10-29 12:35:49.000 +0100C850130FE000,"Outbreak: Epidemic",status-playable,playable,2022-10-13 10:27:31.000 +0100D9F013102000,"Outbreak: Lost Hope",crash;status-boots,boots,2021-04-26 18:01:23.000 +0100B450130FC000,"Outbreak: The New Nightmare",status-playable,playable,2022-10-19 15:42:07.000 +01006EE013100000,"Outbreak: The Nightmare Chronicles",status-playable,playable,2022-10-13 10:41:57.000 +0100B8900EFA6000,"Outbuddies DX",gpu;status-ingame,ingame,2022-08-04 22:39:24.000 +01008D4007A1E000,"Outlast",status-playable;nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26.000 +0100DE70085E8000,"Outlast 2",status-ingame;crash;nvdec,ingame,2022-01-22 22:28:05.000 +01006FD0080B2000,"Overcooked! 2",status-playable;ldn-untested,playable,2022-08-08 16:48:10.000 +0100F28011892000,"Overcooked! All You Can Eat",ldn-untested;online;status-playable,playable,2021-04-15 10:33:52.000 +01009B900401E000,"Overcooked! Special Edition",status-playable,playable,2022-08-08 20:48:52.000 +0100D7F00EC64000,"Overlanders",status-playable;nvdec;UE4,playable,2022-09-14 20:15:06.000 +01008EA00E816000,"Overpass",status-playable;online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47.000 +0100647012F62000,"Override 2 Super Mech League",status-playable;online-broken;UE4,playable,2022-10-19 15:56:04.000 +01008A700F7EE000,"Override: Mech City Brawl - Super Charged Mega Edition",status-playable;nvdec;online-broken;UE4,playable,2022-09-20 17:33:32.000 +0100F8600E21E000,"Overwatch®: Legendary Edition",deadlock;status-boots,boots,2022-09-14 20:22:22.000 +01005F000CC18000,"OVERWHELM",status-playable,playable,2021-01-21 18:37:18.000 +,"Owlboy",status-playable,playable,2020-10-19 14:24:45.000 +0100AD9012510000,"PAC-MAN 99",gpu;status-ingame;online-broken,ingame,2024-04-23 00:48:25.000 +,"PAC-MAN CHAMPIONSHIP EDITION 2 PLUS",status-playable,playable,2021-01-19 22:06:18.000 +011123900AEE0000,"Paladins",online;status-menus,menus,2021-01-21 19:21:37.000 +0100F0D004CAE000,"PAN-PAN A tiny big adventure",audout;status-playable,playable,2021-01-25 14:42:00.000 +010083700B730000,"Pang Adventures",status-playable,playable,2021-04-10 12:16:59.000 +,"Pantsu Hunter",status-playable,playable,2021-02-19 15:12:27.000 +,"Panzer Dragoon: Remake",status-playable,playable,2020-10-04 04:03:55.000 +01004AE0108E0000,"Panzer Paladin",status-playable,playable,2021-05-05 18:26:00.000 +,"Paper Dolls Original",UE4;crash;status-boots,boots,2020-07-13 20:26:21.000 +0100A3900C3E2000,"Paper Mario The Origami King",audio;status-playable;Needs Update,playable,2024-08-09 18:27:40.000 +0100ECD018EBE000,"Paper Mario: The Thousand-Year Door",gpu;status-ingame;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35.000 +01006AD00B82C000,"Paperbound Brawlers",status-playable,playable,2021-01-25 14:32:15.000 +0100DC70174E0000,"Paradigm Paradox",status-playable;vulkan-backend-bug,playable,2022-12-03 22:28:13.000 +01007FB010DC8000,"Paradise Killer",status-playable;UE4,playable,2022-10-05 19:33:05.000 +010063400B2EC000,"Paranautical Activity",status-playable,playable,2021-01-25 13:49:19.000 +01006B5012B32000,"Part Time UFO",status-ingame;crash,ingame,2023-03-03 03:13:05.000 +01007FC00A040000,"Party Arcade",status-playable;online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53.000 +0100B8E00359E000,"Party Golf",status-playable;nvdec,playable,2022-08-09 12:38:30.000 +010022801217E000,"Party Hard 2",status-playable;nvdec,playable,2022-10-05 20:31:48.000 +,"Party Treats",status-playable,playable,2020-07-02 00:05:00.000 +01001E500EA16000,"Path of Sin: Greed",status-menus;crash,menus,2021-11-24 08:00:00.000 +010031F006E76000,"Pato Box",status-playable,playable,2021-01-25 15:17:52.000 +0100360016800000,"PAW Patrol: Grand Prix",gpu;status-ingame,ingame,2024-05-03 16:16:11.000 +01001F201121E000,"Paw Patrol: Might Pups Save Adventure Bay!",status-playable,playable,2022-10-13 12:17:55.000 +01000c4015030000,"Pawapoke R",services-horizon;status-nothing,nothing,2024-05-14 14:28:32.000 +0100A56006CEE000,"Pawarumi",status-playable;online-broken,playable,2022-09-10 15:19:33.000 +0100274004052000,"PAYDAY 2",status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39.000 +010085700ABC8000,"PBA Pro Bowling",status-playable;nvdec;online-broken;UE4,playable,2022-09-14 23:00:49.000 +0100F95013772000,"PBA Pro Bowling 2021",status-playable;online-broken;UE4,playable,2022-10-19 16:46:40.000 +,"PC Building Simulator",status-playable,playable,2020-06-12 00:31:58.000 +010002100CDCC000,"Peaky Blinders: Mastermind",status-playable,playable,2022-10-19 16:56:35.000 +,"Peasant Knight",status-playable,playable,2020-12-22 09:30:50.000 +0100C510049E0000,"Penny-Punching Princess",status-playable,playable,2022-08-09 13:37:05.000 +0100CA901AA9C000,"Penny's Big Breakaway",status-playable;amd-vendor-bug,playable,2024-05-27 07:58:51.000 +,"Perception",UE4;crash;nvdec;status-menus,menus,2020-12-18 11:49:23.000 +010011700D1B2000,"Perchang",status-playable,playable,2021-01-25 14:19:52.000 +010089F00A3B4000,"Perfect Angle",status-playable,playable,2021-01-21 18:48:45.000 +01005CD012DC0000,"Perky Little Things",status-boots;crash;vulkan,boots,2024-08-04 07:22:46.000 +,"Persephone",status-playable,playable,2021-03-23 22:39:19.000 +,"Perseverance",status-playable,playable,2020-07-13 18:48:27.000 +010062B01525C000,"Persona 4 Golden",status-playable,playable,2024-08-07 17:48:07.000 +01005CA01580E000,"Persona 5 Royal",gpu;status-ingame,ingame,2024-08-17 21:45:15.000 +010087701B092000,"Persona 5 Tactica",status-playable,playable,2024-04-01 22:21:03.000 +,"Persona 5: Scramble",deadlock;status-boots,boots,2020-10-04 03:22:29.000 +0100801011C3E000,"Persona 5: Strikers (US)",status-playable;nvdec;mac-bug,playable,2023-09-26 09:36:01.000 +010044400EEAE000,"Petoons Party",nvdec;status-playable,playable,2021-03-02 21:07:58.000 +010053401147C000,"PGA TOUR 2K21",deadlock;status-ingame;nvdec,ingame,2022-10-05 21:53:50.000 +0100DDD00C0EA000,"Phantaruk",status-playable,playable,2021-06-11 18:09:54.000 +0100063005C86000,"PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE",audio;status-playable;nvdec,playable,2024-02-29 14:20:35.000 +010096F00E5B0000,"Phantom Doctrine",status-playable;UE4,playable,2022-09-15 10:51:50.000 +0100C31005A50000,"Phantom Trigger",status-playable,playable,2022-08-09 14:27:30.000 +0100CB000A142000,"Phoenix Wright: Ace Attorney Trilogy",status-playable,playable,2023-09-15 22:03:12.000 +,"PHOGS!",online;status-playable,playable,2021-01-18 15:18:37.000 +,"Physical Contact: 2048",slow;status-playable,playable,2021-01-25 15:18:32.000 +01008110036FE000,"Physical Contact: Speed",status-playable,playable,2022-08-09 14:40:46.000 +010077300A86C000,"Pianista: The Legendary Virtuoso",status-playable;online-broken,playable,2022-08-09 14:52:56.000 +010012100E8DC000,"Picross Lord Of The Nazarick",status-playable,playable,2023-02-08 15:54:56.000 +,"Picross S2",status-playable,playable,2020-10-15 12:01:40.000 +,"Picross S3",status-playable,playable,2020-10-15 11:55:27.000 +,"Picross S4",status-playable,playable,2020-10-15 12:33:46.000 +0100AC30133EC000,"Picross S5",status-playable,playable,2022-10-17 18:51:42.000 +010025901432A000,"Picross S6",status-playable,playable,2022-10-29 17:52:19.000 +,"Picross S7",status-playable,playable,2022-02-16 12:51:25.000 +010043B00E1CE000,"PictoQuest",status-playable,playable,2021-02-27 15:03:16.000 +,"Piczle Lines DX",UE4;crash;nvdec;status-menus,menus,2020-11-16 04:21:31.000 +,"Piczle Lines DX 500 More Puzzles!",UE4;status-playable,playable,2020-12-15 23:42:51.000 +01000FD00D5CC000,"Pig Eat Ball",services;status-ingame,ingame,2021-11-30 01:57:45.000 +0100AA80194B0000,"Pikmin 1",audio;status-ingame,ingame,2024-05-28 18:56:11.000 +0100D680194B2000,"Pikmin 2",gpu;status-ingame,ingame,2023-07-31 08:53:41.000 +0100F4C009322000,"Pikmin 3 Deluxe",gpu;status-ingame;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26.000 +01001CB0106F8000,"Pikmin 3 Deluxe Demo",32-bit;crash;demo;gpu;status-ingame,ingame,2021-06-16 18:38:07.000 +0100B7C00933A000,"Pikmin 4",gpu;status-ingame;crash;UE4,ingame,2024-08-26 03:39:08.000 +0100E0B019974000,"Pikmin 4 Demo",gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08.000 +0100D6200E130000,"Pillars of Eternity",status-playable,playable,2021-02-27 00:24:21.000 +01007A500B0B2000,"Pilot Sports",status-playable,playable,2021-01-20 15:04:17.000 +0100DA70186D4000,"Pinball FX",status-playable,playable,2024-05-03 17:09:11.000 +0100DB7003828000,"Pinball FX3",status-playable;online-broken,playable,2022-11-11 23:49:07.000 +,"Pine",slow;status-ingame,ingame,2020-07-29 16:57:39.000 +,"Pinstripe",status-playable,playable,2020-11-26 10:40:40.000 +01002B20174EE000,"Piofiore: Episodio 1926",status-playable,playable,2022-11-23 18:36:05.000 +,"Piofiore: Fated Memories",nvdec;status-playable,playable,2020-11-30 14:27:50.000 +0100EA2013BCC000,"Pixel Game Maker Series Puzzle Pedestrians",status-playable,playable,2022-10-24 20:15:50.000 +0100859013CE6000,"Pixel Game Maker Series Werewolf Princess Kaguya",crash;services;status-nothing,nothing,2021-03-26 00:23:07.000 +,"Pixel Gladiator",status-playable,playable,2020-07-08 02:41:26.000 +010000E00E612000,"Pixel Puzzle Makeout League",status-playable,playable,2022-10-13 12:34:00.000 +,"PixelJunk Eden 2",crash;status-ingame,ingame,2020-12-17 11:55:52.000 +0100E4D00A690000,"Pixeljunk Monsters 2",status-playable,playable,2021-06-07 03:40:01.000 +01004A900C352000,"Pizza Titan Ultra",nvdec;status-playable,playable,2021-01-20 15:58:42.000 +05000FD261232000,"Pizza Tower",status-ingame;crash,ingame,2024-09-16 00:21:56.000 +0100FF8005EB2000,"Plague Road",status-playable,playable,2022-08-09 15:27:14.000 +010030B00C316000,"Planescape: Torment and Icewind Dale: Enhanced Editions",cpu;status-boots;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26.000 +,"PLANET ALPHA",UE4;gpu;status-ingame,ingame,2020-12-16 14:42:20.000 +01007EA019CFC000,"Planet Cube Edge",status-playable,playable,2023-03-22 17:10:12.000 +,"planetarian HD ~the reverie of a little planet~",status-playable,playable,2020-10-17 20:26:20.000 +010087000428E000,"Plantera",status-playable,playable,2022-08-09 15:36:28.000 +0100C56010FD8000,"Plants vs. Zombies: Battle for Neighborville Complete Edition",gpu;audio;status-boots;crash,boots,2024-09-02 12:58:14.000 +0100E5B011F48000,"Ploid Saga",status-playable,playable,2021-04-19 16:58:45.000 +01009440095FE000,"Pode",nvdec;status-playable,playable,2021-01-25 12:58:35.000 +010086F0064CE000,"Poi: Explorer Edition",nvdec;status-playable,playable,2021-01-21 19:32:00.000 +0100EB6012FD2000,"Poison Control",status-playable,playable,2021-05-16 14:01:54.000 +0100000011D90000,"Pokémon Brilliant Diamond",gpu;status-ingame;ldn-works,ingame,2024-08-28 13:26:35.000 +010072400E04A000,"Pokémon Café Mix",status-playable,playable,2021-08-17 20:00:04.000 +,"Pokémon HOME",Needs Update;crash;services;status-menus,menus,2020-12-06 06:01:51.000 +01001F5010DFA000,"Pokémon Legends: Arceus",gpu;status-ingame;Needs Update;ldn-works,ingame,2024-09-19 10:02:02.000 +01003D200BAA2000,"Pokémon Mystery Dungeon Rescue Team DX",status-playable;mac-bug,playable,2024-01-21 00:16:32.000 +01005D100807A000,"Pokemon Quest",status-playable,playable,2022-02-22 16:12:32.000 +0100A3D008C5C000,"Pokémon Scarlet",gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29.000 +01008DB008C2C000,"Pokémon Shield",deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22.000 +0100ABF008968000,"Pokémon Sword",deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37.000 +01008F6008C5E000,"Pokémon Violet",gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48.000 +0100187003A36000,"Pokémon: Let's Go, Eevee!",status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04.000 +010003F003A34000,"Pokémon: Let's Go, Pikachu!",status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41.000 +01009AD008C4C000,"Pokémon: Let's Go, Pikachu! demo",slow;status-playable;demo,playable,2023-11-26 11:23:20.000 +0100B3F000BE2000,"Pokkén Tournament DX",status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08.000 +010030D005AE6000,"Pokken Tournament DX Demo",status-playable;demo;opengl-backend-bug,playable,2022-08-10 12:03:19.000 +,"Polandball: Can Into Space!",status-playable,playable,2020-06-25 15:13:26.000 +,"Poly Bridge",services;status-playable,playable,2020-06-08 23:32:41.000 +010017600B180000,"Polygod",slow;status-ingame;regression,ingame,2022-08-10 14:38:14.000 +010074B00ED32000,"Polyroll",gpu;status-boots,boots,2021-07-01 16:16:50.000 +,"Ponpu",status-playable,playable,2020-12-16 19:09:34.000 +,"Pooplers",status-playable,playable,2020-11-02 11:52:10.000 +01007EF013CA0000,"Port Royale 4",status-menus;crash;nvdec,menus,2022-10-30 14:34:06.000 +01007BB017812000,"Portal",status-playable,playable,2024-06-12 03:48:29.000 +0100ABD01785C000,"Portal 2",gpu;status-ingame,ingame,2023-02-20 22:44:15.000 +,"Portal Dogs",status-playable,playable,2020-09-04 12:55:46.000 +0100437004170000,"Portal Knights",ldn-untested;online;status-playable,playable,2021-05-27 19:29:04.000 +,"Potata: Fairy Flower",nvdec;status-playable,playable,2020-06-17 09:51:34.000 +01000A4014596000,"Potion Party",status-playable,playable,2021-05-06 14:26:54.000 +,"Power Rangers: Battle for the Grid",status-playable,playable,2020-06-21 16:52:42.000 +0100D1C01C194000,"Powerful Pro Baseball 2024-2025",gpu;status-ingame,ingame,2024-08-25 06:40:48.000 +01008E100E416000,"PowerSlave Exhumed",gpu;status-ingame,ingame,2023-07-31 23:19:10.000 +,"Prehistoric Dude",gpu;status-ingame,ingame,2020-10-12 12:38:48.000 +,"Pretty Princess Magical Coordinate",status-playable,playable,2020-10-15 11:43:41.000 +01007F00128CC000,"Pretty Princess Party",status-playable,playable,2022-10-19 17:23:58.000 +010009300D278000,"Preventive Strike",status-playable;nvdec,playable,2022-10-06 10:55:51.000 +0100210019428000,"Prince of Persia: The Lost Crown",status-ingame;crash,ingame,2024-06-08 21:31:58.000 +01007A3009184000,"Princess Peach: Showtime!",status-playable;UE4,playable,2024-09-21 13:39:45.000 +010024701DC2E000,"Princess Peach: Showtime! Demo",status-playable;UE4;demo,playable,2024-03-10 17:46:45.000 +01008FA01187A000,"Prinny 2: Dawn of Operation Panties, Dood!",32-bit;status-playable,playable,2022-10-13 12:42:58.000 +0100A6E01681C000,"Prinny Presents NIS Classics Volume 1",status-boots;crash;Needs Update,boots,2023-02-02 07:23:09.000 +01007A0011878000,"Prinny: Can I Really Be the Hero?",32-bit;status-playable;nvdec,playable,2023-10-22 09:25:25.000 +010007F00879E000,"PriPara: All Idol Perfect Stage",status-playable,playable,2022-11-22 16:35:52.000 +010029200AB1C000,"Prison Architect",status-playable,playable,2021-04-10 12:27:58.000 +0100C1801B914000,"Prison City",gpu;status-ingame,ingame,2024-03-01 08:19:33.000 +0100F4800F872000,"Prison Princess",status-playable,playable,2022-11-20 15:00:25.000 +0100A9800A1B6000,"Professional Construction - The Simulation",slow;status-playable,playable,2022-08-10 15:15:45.000 +,"Professional Farmer: Nintendo Switch Edition",slow;status-playable,playable,2020-12-16 13:38:19.000 +,"Professor Lupo and his Horrible Pets",status-playable,playable,2020-06-12 00:08:45.000 +0100D1F0132F6000,"Professor Lupo: Ocean",status-playable,playable,2021-04-14 16:33:33.000 +0100BBD00976C000,"Project Highrise: Architect's Edition",status-playable,playable,2022-08-10 17:19:12.000 +0100ACE00DAB6000,"Project Nimbus: Complete Edition",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43.000 +01002980140F6000,"Project TRIANGLE STRATEGY Debut Demo",status-playable;UE4;demo,playable,2022-10-24 21:40:27.000 +,"Project Warlock",status-playable,playable,2020-06-16 10:50:41.000 +,"Psikyo Collection Vol 1",32-bit;status-playable,playable,2020-10-11 13:18:47.000 +0100A2300DB78000,"Psikyo Collection Vol. 3",status-ingame,ingame,2021-06-07 02:46:23.000 +01009D400C4A8000,"Psikyo Collection Vol.2",32-bit;status-playable,playable,2021-06-07 03:22:07.000 +01007A200F2E2000,"Psikyo Shooting Stars Alpha",32-bit;status-playable,playable,2021-04-13 12:03:43.000 +0100D7400F2E4000,"Psikyo Shooting Stars Bravo",32-bit;status-playable,playable,2021-06-14 12:09:07.000 +0100EC100A790000,"PSYVARIAR DELTA",nvdec;status-playable,playable,2021-01-20 13:01:46.000 +,"Puchitto kurasutā",Need-Update;crash;services;status-menus,menus,2020-07-04 16:44:28.000 +0100861012474000,"Pulstario",status-playable,playable,2022-10-06 11:02:01.000 +01009AE00B788000,"Pumped BMX Pro",status-playable;nvdec;online-broken,playable,2022-09-20 17:40:50.000 +01006C10131F6000,"Pumpkin Jack",status-playable;nvdec;UE4,playable,2022-10-13 12:52:32.000 +010016400F07E000,"PUSH THE CRATE",status-playable;nvdec;UE4,playable,2022-09-15 13:28:41.000 +0100B60010432000,"Push the Crate 2",UE4;gpu;nvdec;status-ingame,ingame,2021-06-10 14:20:01.000 +,"Pushy and Pully in Blockland",status-playable,playable,2020-07-04 11:44:41.000 +,"Puyo Puyo Champions",online;status-playable,playable,2020-06-19 11:35:08.000 +010038E011940000,"Puyo Puyo Tetris 2",status-playable;ldn-untested,playable,2023-09-26 11:35:25.000 +,"Puzzle and Dragons GOLD",slow;status-playable,playable,2020-05-13 15:09:34.000 +010079E01A1E0000,"Puzzle Bobble Everybubble!",audio;status-playable;ldn-works,playable,2023-06-10 03:53:40.000 +,"Puzzle Book",status-playable,playable,2020-09-28 13:26:01.000 +0100476004A9E000,"Puzzle Box Maker",status-playable;nvdec;online-broken,playable,2022-08-10 18:00:52.000 +0100A4E017372000,"Pyramid Quest",gpu;status-ingame,ingame,2023-08-16 21:14:52.000 +,"Q-YO Blaster",gpu;status-ingame,ingame,2020-06-07 22:36:53.000 +010023600AA34000,"Q.U.B.E. 2",UE4;status-playable,playable,2021-03-03 21:38:57.000 +0100A8D003BAE000,"Qbics Paint",gpu;services;status-ingame,ingame,2021-06-07 10:54:09.000 +0100BA5012E54000,"Quake",gpu;status-menus;crash,menus,2022-08-08 12:40:34.000 +010048F0195E8000,"Quake II",status-playable,playable,2023-08-15 03:42:14.000 +,"QuakespasmNX",status-nothing;crash;homebrew,nothing,2022-07-23 19:28:07.000 +010045101288A000,"Quantum Replica",status-playable;nvdec;UE4,playable,2022-10-30 21:17:22.000 +0100F1400BA88000,"Quarantine Circular",status-playable,playable,2021-01-20 15:24:15.000 +0100DCF00F13A000,"Queen's Quest 4: Sacred Truce",status-playable;nvdec,playable,2022-10-13 12:59:21.000 +0100492012378000,"Quell Zen",gpu;status-ingame,ingame,2021-06-11 15:59:53.000 +01001DE005012000,"Quest of Dungeons",status-playable,playable,2021-06-07 10:29:22.000 +,"QuietMansion2",status-playable,playable,2020-09-03 14:59:35.000 +0100AF100EE76000,"Quiplash 2 InterLASHional",status-playable;online-working,playable,2022-10-19 17:43:45.000 +,"R-Type Dimensions EX",status-playable,playable,2020-10-09 12:04:43.000 +0100F930136B6000,"R-TYPE FINAL 2",slow;status-ingame;nvdec;UE4,ingame,2022-10-30 21:46:29.000 +01007B0014300000,"R-TYPE FINAL 2 Demo",slow;status-ingame;nvdec;UE4;demo,ingame,2022-10-24 21:57:42.000 +0100B5A004302000,"R.B.I. Baseball 17",status-playable;online-working,playable,2022-08-11 11:55:47.000 +01005CC007616000,"R.B.I. Baseball 18",status-playable;nvdec;online-working,playable,2022-08-11 11:27:52.000 +0100FCB00BF40000,"R.B.I. Baseball 19",status-playable;nvdec;online-working,playable,2022-08-11 11:43:52.000 +010061400E7D4000,"R.B.I. Baseball 20",status-playable,playable,2021-06-15 21:16:29.000 +0100B4A0115CA000,"R.B.I. Baseball 21",status-playable;online-working,playable,2022-10-24 22:31:45.000 +01005BF00E4DE000,"Rabi-Ribi",status-playable,playable,2022-08-06 17:02:44.000 +,"Race With Ryan",UE4;gpu;nvdec;slow;status-ingame,ingame,2020-11-16 04:35:33.000 +,"Rack N Ruin",status-playable,playable,2020-09-04 15:20:26.000 +010024400C516000,"RAD",gpu;status-menus;crash;UE4,menus,2021-11-29 02:01:56.000 +010000600CD54000,"Rad Rodgers Radical Edition",status-playable;nvdec;online-broken,playable,2022-08-10 19:57:23.000 +0100DA400E07E000,"Radiation City",status-ingame;crash,ingame,2022-09-30 11:15:04.000 +01009E40095EE000,"Radiation Island",status-ingame;opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04.000 +,"Radical Rabbit Stew",status-playable,playable,2020-08-03 12:02:56.000 +0100BAD013B6E000,"Radio Commander",nvdec;status-playable,playable,2021-03-24 11:20:46.000 +01008FA00ACEC000,"RADIO HAMMER STATION",audout;status-playable,playable,2021-02-26 20:20:06.000 +01003D00099EC000,"Raging Justice",status-playable,playable,2021-06-03 14:06:50.000 +01005CD013116000,"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",status-playable,playable,2022-07-29 15:50:13.000 +01002B000D97E000,"Raiden V: Director's Cut",deadlock;status-boots;nvdec,boots,2024-07-12 07:31:46.000 +01002EE00DC02000,"Railway Empire",status-playable;nvdec,playable,2022-10-03 13:53:50.000 +,"Rain City",status-playable,playable,2020-10-08 16:59:03.000 +0100BDD014232000,"Rain on Your Parade",status-playable,playable,2021-05-06 19:32:04.000 +010047600BF72000,"Rain World",status-playable,playable,2023-05-10 23:34:08.000 +,"Rainbows, toilets & unicorns",nvdec;status-playable,playable,2020-10-03 18:08:18.000 +,"Raji An Ancient Epic",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 10:05:25.000 +,"Rapala Fishing: Pro Series",nvdec;status-playable,playable,2020-12-16 13:26:53.000 +,"Rascal Fight",status-playable,playable,2020-10-08 13:23:30.000 +,"Rawr-Off",crash;nvdec;status-menus,menus,2020-07-02 00:14:44.000 +01005FF002E2A000,"Rayman Legends: Definitive Edition",status-playable;nvdec;ldn-works,playable,2023-05-27 18:33:07.000 +0100F03011616000,"Re:Turn - One Way Trip",status-playable,playable,2022-08-29 22:42:53.000 +,"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",gpu;status-boots;crash;nvdec;vulkan,boots,2023-03-07 21:27:24.000 +,"Real Drift Racing",status-playable,playable,2020-07-25 14:31:31.000 +010048600CC16000,"Real Heroes: Firefighter",status-playable,playable,2022-09-20 18:18:44.000 +,"realMyst: Masterpiece Edition",nvdec;status-playable,playable,2020-11-30 15:25:42.000 +,"Reaper: Tale of a Pale Swordsman",status-playable,playable,2020-12-12 15:12:23.000 +0100D9B00E22C000,"Rebel Cops",status-playable,playable,2022-09-11 10:02:53.000 +0100CAA01084A000,"Rebel Galaxy: Outlaw",status-playable;nvdec,playable,2022-12-01 07:44:56.000 +0100CF600FF7A000,"Red Bow",services;status-ingame,ingame,2021-11-29 03:51:34.000 +0100351013A06000,"Red Colony",status-playable,playable,2021-01-25 20:44:41.000 +01007820196A6000,"Red Dead Redemption",status-playable;amd-vendor-bug,playable,2024-09-13 13:26:13.000 +,"Red Death",status-playable,playable,2020-08-30 13:07:37.000 +010075000C608000,"Red Faction Guerrilla Re-Mars-tered",ldn-untested;nvdec;online;status-playable,playable,2021-06-07 03:02:13.000 +,"Red Game Without a Great Name",status-playable,playable,2021-01-19 21:42:35.000 +010045400D73E000,"Red Siren : Space Defense",UE4;status-playable,playable,2021-04-25 21:21:29.000 +,"Red Wings - Aces of the Sky",status-playable,playable,2020-06-12 01:19:53.000 +01000D100DCF8000,"Redeemer: Enhanced Edition",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24.000 +0100326010B98000,"Redout: Space Assault",status-playable;UE4,playable,2022-10-19 23:04:35.000 +010007C00E558000,"Reel Fishing: Road Trip Adventure",status-playable,playable,2021-03-02 16:06:43.000 +,"Reflection of Mine",audio;status-playable,playable,2020-12-17 15:06:37.000 +,"Refreshing Sideways Puzzle Ghost Hammer",status-playable,playable,2020-10-18 12:08:54.000 +,"Refunct",UE4;status-playable,playable,2020-12-15 22:46:21.000 +0100FDF0083A6000,"Regalia: Of Men and Monarchs - Royal Edition",status-playable,playable,2022-08-11 12:24:01.000 +,"Regions of Ruin",status-playable,playable,2020-08-05 11:38:58.000 +,"Reine des Fleurs",cpu;crash;status-boots,boots,2020-09-27 18:50:39.000 +,"REKT",online;status-playable,playable,2020-09-28 12:33:56.000 +01002AD013C52000,"Relicta",status-playable;nvdec;UE4,playable,2022-10-31 12:48:33.000 +010095900B436000,"Remi Lore",status-playable,playable,2021-06-03 18:58:15.000 +0100FBD00F5F6000,"Remothered: Broken Porcelain",UE4;gpu;nvdec;status-ingame,ingame,2021-06-17 15:13:11.000 +01001F100E8AE000,"Remothered: Tormented Fathers",status-playable;nvdec;UE4,playable,2022-10-19 23:26:50.000 +,"Rento Fortune Monolit",ldn-untested;online;status-playable,playable,2021-01-19 19:52:21.000 +01007CC0130C6000,"Renzo Racer",status-playable,playable,2021-03-23 22:28:05.000 +01003C400AD42000,"Rescue Tale",status-playable,playable,2022-09-20 18:40:18.000 +010099A00BC1E000,"Resident Evil 4",status-playable;nvdec,playable,2022-11-16 21:16:04.000 +010018100CD46000,"Resident Evil 5",status-playable;nvdec,playable,2024-02-18 17:15:29.000 +01002A000CD48000,"RESIDENT EVIL 6",status-playable;nvdec,playable,2022-09-15 14:31:47.000 +0100643002136000,"Resident Evil Revelations",status-playable;nvdec;ldn-untested,playable,2022-08-11 12:44:19.000 +010095300212A000,"RESIDENT EVIL REVELATIONS 2",status-playable;online-broken;ldn-untested,playable,2022-08-11 12:57:50.000 +0100E7F00FFB8000,"Resolutiion",crash;status-boots,boots,2021-04-25 21:57:56.000 +0100FF201568E000,"Restless Night [0100FF201568E000]",status-nothing;crash,nothing,2022-02-09 10:54:49.000 +0100069000078000,"Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000",services;status-nothing;crash,nothing,2022-08-11 13:19:41.000 +010086E00BCB2000,"Retimed",status-playable,playable,2022-08-11 13:32:39.000 +,"Retro City Rampage DX",status-playable,playable,2021-01-05 17:04:17.000 +01000ED014A2C000,"Retrograde Arena",status-playable;online-broken,playable,2022-10-31 13:38:58.000 +010032E00E6E2000,"Return of the Obra Dinn",status-playable,playable,2022-09-15 19:56:45.000 +010027400F708000,"Revenge of Justice",status-playable;nvdec,playable,2022-11-20 15:43:23.000 +0100E2E00EA42000,"Reventure",status-playable,playable,2022-09-15 20:07:06.000 +,"REZ PLZ",status-playable,playable,2020-10-24 13:26:12.000 +0100729012D18000,"Rhythm Fighter",crash;status-nothing,nothing,2021-02-16 18:51:30.000 +,"Rhythm of the Gods",UE4;crash;status-nothing,nothing,2020-10-03 17:39:59.000 +01009D5009234000,"RICO",status-playable;nvdec;online-broken,playable,2022-08-11 20:16:40.000 +01002C700C326000,"Riddled Corpses EX",status-playable,playable,2021-06-06 16:02:44.000 +0100AC600D898000,"Rift Keeper",status-playable,playable,2022-09-20 19:48:20.000 +,"RiME",UE4;crash;gpu;status-boots,boots,2020-07-20 15:52:38.000 +01006AC00EE6E000,"Rimelands",status-playable,playable,2022-10-13 13:32:56.000 +01002FF008C24000,"Ring Fit Adventure",crash;services;status-nothing,nothing,2021-04-14 19:00:01.000 +010088E00B816000,"RIOT: Civil Unrest",status-playable,playable,2022-08-11 20:27:56.000 +01002A6006AA4000,"Riptide GP: Renegade",online;status-playable,playable,2021-04-13 23:33:02.000 +,"Rise and Shine",status-playable,playable,2020-12-12 15:56:43.000 +,"Rise of Insanity",status-playable,playable,2020-08-30 15:42:14.000 +01006BA00E652000,"Rise: Race the Future",status-playable,playable,2021-02-27 13:29:06.000 +010020C012F48000,"Rising Hell",status-playable,playable,2022-10-31 13:54:02.000 +0100E8300A67A000,"Risk",status-playable;nvdec;online-broken,playable,2022-08-01 18:53:28.000 +010076D00E4BA000,"Risk of Rain 2",status-playable;online-broken,playable,2024-03-04 17:01:05.000 +0100BD300F0EC000,"Ritual",status-playable,playable,2021-03-02 13:51:19.000 +010042500FABA000,"Ritual: Crown of Horns",status-playable,playable,2021-01-26 16:01:47.000 +,"Rival Megagun",nvdec;online;status-playable,playable,2021-01-19 14:01:46.000 +,"RIVE: Ultimate Edition",status-playable,playable,2021-03-24 18:45:55.000 +,"River City Girls",nvdec;status-playable,playable,2020-06-10 23:44:09.000 +01002E80168F4000,"River City Girls 2",status-playable,playable,2022-12-07 00:46:27.000 +0100B2100767C000,"River City Melee Mach!!",status-playable;online-broken,playable,2022-09-20 20:51:57.000 +,"RMX Real Motocross",status-playable,playable,2020-10-08 21:06:15.000 +010053000B986000,"Road Redemption",status-playable;online-broken,playable,2022-08-12 11:26:20.000 +010002F009A7A000,"Road to Ballhalla",UE4;status-playable,playable,2021-06-07 02:22:36.000 +,"Road to Guangdong",slow;status-playable,playable,2020-10-12 12:15:32.000 +010068200C5BE000,"Roarr!",status-playable,playable,2022-10-19 23:57:45.000 +0100618004096000,"Robonauts",status-playable;nvdec,playable,2022-08-12 11:33:23.000 +,"ROBOTICS;NOTES DaSH",status-playable,playable,2020-11-16 23:09:54.000 +,"ROBOTICS;NOTES ELITE",status-playable,playable,2020-11-26 10:28:20.000 +,"Robozarro",status-playable,playable,2020-09-03 13:33:40.000 +,"Rock 'N Racing Off Road DX",status-playable,playable,2021-01-10 15:27:15.000 +,"Rock N' Racing Grand Prix",status-playable,playable,2021-01-06 20:23:57.000 +0100A1B00DB36000,"Rock of Ages 3: Make & Break",status-playable;UE4,playable,2022-10-06 12:18:29.000 +01005EE0036EC000,"Rocket League",gpu;status-ingame;online-broken;ldn-untested,ingame,2024-02-08 19:51:36.000 +,"Rocket Wars",status-playable,playable,2020-07-24 14:27:39.000 +0100EC7009348000,"Rogue Aces",gpu;services;status-ingame;nvdec,ingame,2021-11-30 02:18:30.000 +01009FA010848000,"Rogue Heroes: Ruins of Tasos",online;status-playable,playable,2021-04-01 15:41:25.000 +,"Rogue Legacy",status-playable,playable,2020-08-10 19:17:28.000 +,"Rogue Robots",status-playable,playable,2020-06-16 12:16:11.000 +01001CC00416C000,"Rogue Trooper Redux",status-playable;nvdec;online-broken,playable,2022-08-12 11:53:01.000 +0100C7300C0EC000,"RogueCube",status-playable,playable,2021-06-16 12:16:42.000 +,"Roll'd",status-playable,playable,2020-07-04 20:24:01.000 +01004900113F8000,"RollerCoaster Tycoon 3: Complete Edition",32-bit;status-playable,playable,2022-10-17 14:18:01.000 +,"RollerCoaster Tycoon Adventures",nvdec;status-playable,playable,2021-01-05 18:14:18.000 +010076200CA16000,"Rolling Gunner",status-playable,playable,2021-05-26 12:54:18.000 +0100579011B40000,"Rolling Sky 2",status-playable,playable,2022-11-03 10:21:12.000 +01001F600829A000,"Romancing SaGa 2",status-playable,playable,2022-08-12 12:02:24.000 +,"Romancing SaGa 3",audio;gpu;status-ingame,ingame,2020-06-27 20:26:18.000 +010088100DD42000,"Roof Rage",status-boots;crash;regression,boots,2023-11-12 03:47:18.000 +,"Roombo: First Blood",nvdec;status-playable,playable,2020-08-05 12:11:37.000 +0100936011556000,"Root Double -Before Crime * After Days- Xtend Edition",status-nothing;crash,nothing,2022-02-05 02:03:49.000 +010030A00DA3A000,"Root Letter: Last Answer",status-playable;vulkan-backend-bug,playable,2022-09-17 10:25:57.000 +,"Royal Roads",status-playable,playable,2020-11-17 12:54:38.000 +,"RPG Maker MV",nvdec;status-playable,playable,2021-01-05 20:12:01.000 +01005CD015986000,"rRootage Reloaded [01005CD015986000]",status-playable,playable,2022-08-05 23:20:18.000 +0000000000000000,"RSDKv5u",status-ingame;homebrew,ingame,2024-04-01 16:25:34.000 +010009B00D33C000,"Rugby Challenge 4",slow;status-playable;online-broken;UE4,playable,2022-10-06 12:45:53.000 +01006EC00F2CC000,"Ruiner",status-playable;UE4,playable,2022-10-03 14:11:33.000 +010074F00DE4A000,"Run the Fan",status-playable,playable,2021-02-27 13:36:28.000 +,"Runbow",online;status-playable,playable,2021-01-08 22:47:44.000 +0100D37009B8A000,"Runbow Deluxe Edition",status-playable;online-broken,playable,2022-08-12 12:20:25.000 +010081C0191D8000,"Rune Factory 3 Special",status-playable,playable,2023-10-15 08:32:49.000 +010051D00E3A4000,"Rune Factory 4 Special",status-ingame;32-bit;crash;nvdec,ingame,2023-05-06 08:49:17.000 +010014D01216E000,"Rune Factory 5 (JP)",gpu;status-ingame,ingame,2021-06-01 12:00:36.000 +0100E21013908000,"RWBY: Grimm Eclipse",status-playable;online-broken,playable,2022-11-03 10:44:01.000 +,"RXN -Raijin-",nvdec;status-playable,playable,2021-01-10 16:05:43.000 +0100B8B012ECA000,"S.N.I.P.E.R. Hunter Scope",status-playable,playable,2021-04-19 15:58:09.000 +,"Saboteur II: Avenging Angel",Needs Update;cpu;crash;status-nothing,nothing,2021-01-26 14:47:37.000 +,"Saboteur SiO",slow;status-ingame,ingame,2020-12-17 16:59:49.000 +,"Safety First!",status-playable,playable,2021-01-06 09:05:23.000 +0100A51013530000,"SaGa Frontier Remastered",status-playable;nvdec,playable,2022-11-03 13:54:56.000 +010003A00D0B4000,"SaGa SCARLET GRACE: AMBITIONS",status-playable,playable,2022-10-06 13:20:31.000 +01008D100D43E000,"Saints Row IV",status-playable;ldn-untested;LAN,playable,2023-12-04 18:33:37.000 +0100DE600BEEE000,"Saints Row: The Third - The Full Package",slow;status-playable;LAN,playable,2023-08-24 02:40:58.000 +01007F000EB36000,"Sakai and...",status-playable;nvdec,playable,2022-12-15 13:53:19.000 +0100B1400E8FE000,"Sakuna: Of Rice and Ruin",status-playable,playable,2023-07-24 13:47:13.000 +0100BBF0122B4000,"Sally Face",status-playable,playable,2022-06-06 18:41:24.000 +,"Salt And Sanctuary",status-playable,playable,2020-10-22 11:52:19.000 +,"Sam & Max Save the World",status-playable,playable,2020-12-12 13:11:51.000 +,"Samsara",status-playable,playable,2021-01-11 15:14:12.000 +01006C600E46E000,"Samurai Jack Battle Through Time",status-playable;nvdec;UE4,playable,2022-10-06 13:33:59.000 +,"SAMURAI SHODOWN",UE4;crash;nvdec;status-menus,menus,2020-09-06 02:17:00.000 +0100F6800F48E000,"SAMURAI SHOWDOWN NEOGEO COLLECTION",nvdec;status-playable,playable,2021-06-14 17:12:56.000 +0100B6501A360000,"Samurai Warrior",status-playable,playable,2023-02-27 18:42:38.000 +,"SamuraiAces for Nintendo Switch",32-bit;status-playable,playable,2020-11-24 20:26:55.000 +,"Sangoku Rensenki ~Otome no Heihou!~",gpu;nvdec;status-ingame,ingame,2020-10-17 19:13:14.000 +0100A4700BC98000,"Satsujin Tantei Jack the Ripper",status-playable,playable,2021-06-21 16:32:54.000 +0100F0000869C000,"Saturday Morning RPG",status-playable;nvdec,playable,2022-08-12 12:41:50.000 +,"Sausage Sports Club",gpu;status-ingame,ingame,2021-01-10 05:37:17.000 +0100C8300FA90000,"Save Koch",status-playable,playable,2022-09-26 17:06:56.000 +,"Save the Ninja Clan",status-playable,playable,2021-01-11 13:56:37.000 +010091000F72C000,"Save Your Nuts",status-playable;nvdec;online-broken;UE4,playable,2022-09-27 23:12:02.000 +0100AA00128BA000,"Saviors of Sapphire Wings & Stranger of Sword City Revisited",status-menus;crash,menus,2022-10-24 23:00:46.000 +01001C3012912000,"Say No! More",status-playable,playable,2021-05-06 13:43:34.000 +010010A00A95E000,"Sayonara Wild Hearts",status-playable,playable,2023-10-23 03:20:01.000 +0100ACB004006000,"Schlag den Star",slow;status-playable;nvdec,playable,2022-08-12 14:28:22.000 +0100394011C30000,"Scott Pilgrim vs The World: The Game",services-horizon;status-nothing;crash,nothing,2024-07-12 08:13:03.000 +,"Scribblenauts Mega Pack",nvdec;status-playable,playable,2020-12-17 22:56:14.000 +,"Scribblenauts Showdown",gpu;nvdec;status-ingame,ingame,2020-12-17 23:05:53.000 +0100829018568000,"SD GUNDAM BATTLE ALLIANCE Demo",audio;status-ingame;crash;demo,ingame,2022-08-01 23:01:20.000 +010055700CEA8000,"SD GUNDAM G GENERATION CROSS RAYS",status-playable;nvdec,playable,2022-09-15 20:58:44.000 +,"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00",status-playable;nvdec,playable,2022-09-15 20:45:57.000 +0100E4A00D066000,"Sea King",UE4;nvdec;status-playable,playable,2021-06-04 15:49:22.000 +0100AFE012BA2000,"Sea of Solitude The Director's Cut",gpu;status-ingame,ingame,2024-07-12 18:29:29.000 +01008C0016544000,"Sea of Stars",status-playable,playable,2024-03-15 20:27:12.000 +010036F0182C4000,"Sea of Stars Demo",status-playable;demo,playable,2023-02-12 15:33:56.000 +,"SeaBed",status-playable,playable,2020-05-17 13:25:37.000 +,"Season Match Bundle - Part 1 and 2",status-playable,playable,2021-01-11 13:28:23.000 +,"Season Match Full Bundle - Parts 1, 2 and 3",status-playable,playable,2020-10-27 16:15:22.000 +,"Secret Files 3",nvdec;status-playable,playable,2020-10-24 15:32:39.000 +010075D0101FA000,"Seek Hearts",status-playable,playable,2022-11-22 15:06:26.000 +,"Seers Isle",status-playable,playable,2020-11-17 12:28:50.000 +0100A8900AF04000,"SEGA AGES Alex Kidd in Miracle World",online;status-playable,playable,2021-05-05 16:35:47.000 +01001E600AF08000,"SEGA AGES Gain Ground",online;status-playable,playable,2021-05-05 16:16:27.000 +,"SEGA AGES OUTRUN",status-playable,playable,2021-01-11 13:13:59.000 +,"SEGA AGES PHANTASY STAR",status-playable,playable,2021-01-11 12:49:48.000 +01005F600CB0E000,"SEGA AGES Puyo Puyo",online;status-playable,playable,2021-05-05 16:09:28.000 +01000D200C614000,"SEGA AGES SONIC THE HEDGEHOG 2",status-playable,playable,2022-09-21 20:26:35.000 +,"SEGA AGES SPACE HARRIER",status-playable,playable,2021-01-11 12:57:40.000 +01001E700AC60000,"SEGA AGES Wonder Boy: Monster Land",online;status-playable,playable,2021-05-05 16:28:25.000 +010051F00AC5E000,"SEGA Ages: Sonic The Hedgehog",slow;status-playable,playable,2023-03-05 20:16:31.000 +010054400D2E6000,"SEGA Ages: Virtua Racing",status-playable;online-broken,playable,2023-01-29 17:08:39.000 +0100B3C014BDA000,"SEGA Genesis - Nintendo Switch Online",status-nothing;crash;regression,nothing,2022-04-11 07:27:21.000 +,"SEGA Mega Drive Classics",online;status-playable,playable,2021-01-05 11:08:00.000 +,"Semispheres",status-playable,playable,2021-01-06 23:08:31.000 +0100D1800D902000,"SENRAN KAGURA Peach Ball",status-playable,playable,2021-06-03 15:12:10.000 +,"SENRAN KAGURA Reflexions",status-playable,playable,2020-03-23 19:15:23.000 +01009E500D29C000,"Sentinels of Freedom",status-playable,playable,2021-06-14 16:42:19.000 +,"SENTRY",status-playable,playable,2020-12-13 12:00:24.000 +010059700D4A0000,"Sephirothic Stories",services;status-menus,menus,2021-11-25 08:52:17.000 +010007D00D43A000,"Serious Sam Collection",status-boots;vulkan-backend-bug,boots,2022-10-13 13:53:34.000 +0100B2C00E4DA000,"Served! A gourmet race",status-playable;nvdec,playable,2022-09-28 12:46:00.000 +010018400C24E000,"Seven Knights -Time Wanderer-",status-playable;vulkan-backend-bug,playable,2022-10-13 22:08:54.000 +0100D6F016676000,"Seven Pirates H",status-playable,playable,2024-06-03 14:54:12.000 +,"Severed",status-playable,playable,2020-12-15 21:48:48.000 +0100D5500DA94000,"Shadow Blade Reload",nvdec;status-playable,playable,2021-06-11 18:40:43.000 +0100BE501382A000,"Shadow Gangs",cpu;gpu;status-ingame;crash;regression,ingame,2024-04-29 00:07:26.000 +0100C3A013840000,"Shadow Man Remastered",gpu;status-ingame,ingame,2024-05-20 06:01:39.000 +,"Shadowgate",status-playable,playable,2021-04-24 07:32:57.000 +0100371013B3E000,"Shadowrun Returns",gpu;status-ingame;Needs Update,ingame,2022-10-04 21:32:31.000 +01008310154C4000,"Shadowrun: Dragonfall - Director's Cut",gpu;status-ingame;Needs Update,ingame,2022-10-04 20:52:18.000 +0100C610154CA000,"Shadowrun: Hong Kong - Extended Edition",gpu;status-ingame;Needs Update,ingame,2022-10-04 20:53:09.000 +,"Shadows 2: Perfidia",status-playable,playable,2020-08-07 12:43:46.000 +,"Shadows of Adam",status-playable,playable,2021-01-11 13:35:58.000 +01002A800C064000,"Shadowverse Champions Battle",status-playable,playable,2022-10-02 22:59:29.000 +01003B90136DA000,"Shadowverse: Champion’s Battle",status-nothing;crash,nothing,2023-03-06 00:31:50.000 +0100820013612000,"Shady Part of Me",status-playable,playable,2022-10-20 11:31:55.000 +,"Shakedown: Hawaii",status-playable,playable,2021-01-07 09:44:36.000 +01008DA012EC0000,"Shakes on a Plane",status-menus;crash,menus,2021-11-25 08:52:25.000 +0100B4900E008000,"Shalnor Legends: Sacred Lands",status-playable,playable,2021-06-11 14:57:11.000 +,"Shanky: The Vegan's Nightmare - 01000C00CC10000",status-playable,playable,2021-01-26 15:03:55.000 +0100430013120000,"Shantae",status-playable,playable,2021-05-21 04:53:26.000 +0100EFD00A4FA000,"Shantae and the Pirate's Curse",status-playable,playable,2024-04-29 17:21:57.000 +,"Shantae and the Seven Sirens",nvdec;status-playable,playable,2020-06-19 12:23:40.000 +,"Shantae: Half-Genie Hero Ultimate Edition",status-playable,playable,2020-06-04 20:14:20.000 +0100ADA012370000,"Shantae: Risky's Revenge - Director's Cut",status-playable,playable,2022-10-06 20:47:39.000 +01003AB01062C000,"Shaolin vs Wutang : Eastern Heroes",deadlock;status-nothing,nothing,2021-03-29 20:38:54.000 +0100B250009B9600,"Shape Of The World0",UE4;status-playable,playable,2021-03-05 16:42:28.000 +01004F50085F2000,"She Remembered Caterpillars",status-playable,playable,2022-08-12 17:45:14.000 +01000320110C2000,"She Sees Red",status-playable;nvdec,playable,2022-09-30 11:30:15.000 +01009EB004CB0000,"Shelter Generations",status-playable,playable,2021-06-04 16:52:39.000 +010020F014DBE000,"Sherlock Holmes: The Devil's Daughter",gpu;status-ingame,ingame,2022-07-11 00:07:26.000 +,"Shift Happens",status-playable,playable,2021-01-05 21:24:18.000 +,"SHIFT QUANTUM",UE4;crash;status-ingame,ingame,2020-11-06 21:54:08.000 +01000750084B2000,"Shiftlings",nvdec;status-playable,playable,2021-03-04 13:49:54.000 +01003B0012DC2000,"Shin Megami Tensei III Nocturne HD Remaster",status-playable,playable,2022-11-03 22:53:27.000 +010045800ED1E000,"Shin Megami Tensei III NOCTURNE HD REMASTER",gpu;status-ingame;Needs Update,ingame,2022-11-03 19:57:01.000 +010063B012DC6000,"Shin Megami Tensei V",status-playable;UE4,playable,2024-02-21 06:30:07.000 +010069C01AB82000,"Shin Megami Tensei V: Vengeance",gpu;status-ingame;vulkan-backend-bug,ingame,2024-07-14 11:28:24.000 +01009050133B4000,"Shing! (サムライフォース:斬!)",status-playable;nvdec,playable,2022-10-22 00:48:54.000 +01009A5009A9E000,"Shining Resonance Refrain",status-playable;nvdec,playable,2022-08-12 18:03:01.000 +01004EE0104F6000,"Shinsekai Into the Depths",status-playable,playable,2022-09-28 14:07:51.000 +0100C2F00A568000,"Shio",status-playable,playable,2021-02-22 16:25:09.000 +,"Shipped",status-playable,playable,2020-11-21 14:22:32.000 +01000E800FCB4000,"Ships",status-playable,playable,2021-06-11 16:14:37.000 +01007430122D0000,"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",status-playable;nvdec,playable,2022-10-20 11:44:36.000 +,"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",cpu;crash;status-boots,boots,2020-09-27 19:01:25.000 +01000244016BAE00,"Shiro0",gpu;status-ingame,ingame,2024-01-13 08:54:39.000 +,"Shoot 1UP DX",status-playable,playable,2020-12-13 12:32:47.000 +,"Shovel Knight: Specter of Torment",status-playable,playable,2020-05-30 08:34:17.000 +,"Shovel Knight: Treasure Trove",status-playable,playable,2021-02-14 18:24:39.000 +,"Shred!2 - Freeride MTB",status-playable,playable,2020-05-30 14:34:09.000 +,"Shu",nvdec;status-playable,playable,2020-05-30 09:08:59.000 +,"Shut Eye",status-playable,playable,2020-07-23 18:08:35.000 +010044500C182000,"Sid Meier's Civilization VI",status-playable;ldn-untested,playable,2024-04-08 16:03:40.000 +01007FC00B674000,"Sigi - A Fart for Melusina",status-playable,playable,2021-02-22 16:46:58.000 +0100F1400B0D6000,"Silence",nvdec;status-playable,playable,2021-06-03 14:46:17.000 +,"Silent World",status-playable,playable,2020-08-28 13:45:13.000 +010045500DFE2000,"Silk",nvdec;status-playable,playable,2021-06-10 15:34:37.000 +010016D00A964000,"SilverStarChess",status-playable,playable,2021-05-06 15:25:57.000 +0100E8C019B36000,"Simona's Requiem",gpu;status-ingame,ingame,2023-02-21 18:29:19.000 +01006FE010438000,"Sin Slayers",status-playable,playable,2022-10-20 11:53:52.000 +01002820036A8000,"Sine Mora EX",gpu;status-ingame;online-broken,ingame,2022-08-12 19:36:18.000 +,"Singled Out",online;status-playable,playable,2020-08-03 13:06:18.000 +,"Sinless",nvdec;status-playable,playable,2020-08-09 20:18:55.000 +0100B16009C10000,"SINNER: Sacrifice for Redemption",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33.000 +0100E9201410E000,"Sir Lovelot",status-playable,playable,2021-04-05 16:21:46.000 +0100134011E32000,"Skate City",status-playable,playable,2022-11-04 11:37:39.000 +,"Skee-Ball",status-playable,playable,2020-11-16 04:44:07.000 +01001A900F862000,"Skelattack",status-playable,playable,2021-06-09 15:26:26.000 +01008E700F952000,"Skelittle: A Giant Party!!",status-playable,playable,2021-06-09 19:08:34.000 +,"Skelly Selest",status-playable,playable,2020-05-30 15:38:18.000 +,"Skies of Fury",status-playable,playable,2020-05-30 16:40:54.000 +010046B00DE62000,"Skullgirls: 2nd Encore",status-playable,playable,2022-09-15 21:21:25.000 +,"Skulls of the Shogun: Bone-a-fide Edition",status-playable,playable,2020-08-31 18:58:12.000 +0100D7B011654000,"Skully",status-playable;nvdec;UE4,playable,2022-10-06 13:52:59.000 +010083100B5CA000,"Sky Force Anniversary",status-playable;online-broken,playable,2022-08-12 20:50:07.000 +,"Sky Force Reloaded",status-playable,playable,2021-01-04 20:06:57.000 +010003F00CC98000,"Sky Gamblers - Afterburner",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55.000 +010093D00AC38000,"Sky Gamblers: Storm Raiders",gpu;audio;status-ingame;32-bit,ingame,2022-08-12 21:13:36.000 +010068200E96E000,"Sky Gamblers: Storm Raiders 2",gpu;status-ingame,ingame,2022-09-13 12:24:04.000 +,"Sky Racket",status-playable,playable,2020-09-07 12:22:24.000 +0100DDB004F30000,"Sky Ride",status-playable,playable,2021-02-22 16:53:07.000 +,"Sky Rogue",status-playable,playable,2020-05-30 08:26:28.000 +0100C52011460000,"Sky: Children of the Light",cpu;status-nothing;online-broken,nothing,2023-02-23 10:57:10.000 +010041C01014E000,"Skybolt Zack",status-playable,playable,2021-04-12 18:28:00.000 +0100A0A00D1AA000,"SKYHILL",status-playable,playable,2021-03-05 15:19:11.000 +,"Skylanders Imaginators",crash;services;status-boots,boots,2020-05-30 18:49:18.000 +,"SKYPEACE",status-playable,playable,2020-05-29 14:14:30.000 +,"SkyScrappers",status-playable,playable,2020-05-28 22:11:25.000 +,"SkyTime",slow;status-ingame,ingame,2020-05-30 09:24:51.000 +01003AD00DEAE000,"SlabWell",status-playable,playable,2021-02-22 17:02:51.000 +,"Slain",status-playable,playable,2020-05-29 14:26:16.000 +0100BB100AF4C000,"Slain Back from Hell",status-playable,playable,2022-08-12 23:36:19.000 +010026300BA4A000,"Slay the Spire",status-playable,playable,2023-01-20 15:09:26.000 +0100501006494000,"Slayaway Camp: Butcher's Cut",status-playable;opengl-backend-bug,playable,2022-08-12 23:44:05.000 +01004E900EDDA000,"Slayin 2",gpu;status-ingame,ingame,2024-04-19 16:15:26.000 +01004AC0081DC000,"Sleep Tight",gpu;status-ingame;UE4,ingame,2022-08-13 00:17:32.000 +0100F4500AA4E000,"Slice Dice & Rice",online;status-playable,playable,2021-02-22 17:44:23.000 +010010D011E1C000,"Slide Stars",status-menus;crash,menus,2021-11-25 08:53:43.000 +,"Slime-san",status-playable,playable,2020-05-30 16:15:12.000 +,"Slime-san Superslime Edition",status-playable,playable,2020-05-30 19:08:08.000 +01002AA00C974000,"SMASHING THE BATTLE",status-playable,playable,2021-06-11 15:53:57.000 +0100C9100B06A000,"SmileBASIC 4",gpu;status-menus,menus,2021-07-29 17:35:59.000 +0100207007EB2000,"Smoke and Sacrifice",status-playable,playable,2022-08-14 12:38:27.000 +01009790186FE000,"Smurfs Kart",status-playable,playable,2023-10-18 00:55:00.000 +0100F2800D46E000,"Snack World The Dungeon Crawl Gold",gpu;slow;status-ingame;nvdec;audout,ingame,2022-05-01 21:12:44.000 +0100C0F0020E8000,"Snake Pass",status-playable;nvdec;UE4,playable,2022-01-03 04:31:52.000 +010075A00BA14000,"Sniper Elite 3 Ultimate Edition",status-playable;ldn-untested,playable,2024-04-18 07:47:49.000 +010007B010FCC000,"Sniper Elite 4",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15.000 +0100BB000A3AA000,"Sniper Elite V2 Remastered",slow;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13.000 +0100704000B3A000,"Snipperclips",status-playable,playable,2022-12-05 12:44:55.000 +01008E20047DC000,"Snipperclips Plus",status-playable,playable,2023-02-14 20:20:13.000 +01004AB00AEF8000,"SNK 40th Anniversary Collection",status-playable,playable,2022-08-14 13:33:15.000 +010027F00AD6C000,"SNK HEROINES Tag Team Frenzy",status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25.000 +01008DA00CBBA000,"Snooker 19",status-playable;nvdec;online-broken;UE4,playable,2022-09-11 17:43:22.000 +010045300516E000,"Snow Moto Racing Freedom",gpu;status-ingame;vulkan-backend-bug,ingame,2022-08-15 16:05:14.000 +0100BE200C34A000,"Snowboarding the Next Phase",nvdec;status-playable,playable,2021-02-23 12:56:58.000 +,"SnowRunner - 0100FBD13AB6000",services;status-boots;crash,boots,2023-10-07 00:01:16.000 +010017B012AFC000,"Soccer Club Life: Playing Manager",gpu;status-ingame,ingame,2022-10-25 11:59:22.000 +0100B5000E05C000,"Soccer Pinball",UE4;gpu;status-ingame,ingame,2021-06-15 20:56:51.000 +,"Soccer Slammers",status-playable,playable,2020-05-30 07:48:14.000 +010095C00F9DE000,"Soccer, Tactics & Glory",gpu;status-ingame,ingame,2022-09-26 17:15:58.000 +,"SOLDAM Drop, Connect, Erase",status-playable,playable,2020-05-30 09:18:54.000 +0100590009C38000,"SolDivide for Nintendo Switch",32-bit;status-playable,playable,2021-06-09 14:13:03.000 +010008600D1AC000,"Solo: Islands of the Heart",gpu;status-ingame;nvdec,ingame,2022-09-11 17:54:43.000 +01009EE00E91E000,"Some Distant Memory",status-playable,playable,2022-09-15 21:48:19.000 +01004F401BEBE000,"Song of Nunu: A League of Legends Story",status-ingame,ingame,2024-07-12 18:53:44.000 +0100E5400BF94000,"Songbird Symphony",status-playable,playable,2021-02-27 02:44:04.000 +,"Songbringer",status-playable,playable,2020-06-22 10:42:02.000 +0000000000000000,"Sonic 1 (2013)",status-ingame;crash;homebrew,ingame,2024-04-06 18:31:20.000 +0000000000000000,"Sonic 2 (2013)",status-ingame;crash;homebrew,ingame,2024-04-01 16:25:30.000 +0000000000000000,"Sonic A.I.R",status-ingame;homebrew,ingame,2024-04-01 16:25:32.000 +0000000000000000,"Sonic CD",status-ingame;crash;homebrew,ingame,2024-04-01 16:25:31.000 +010040E0116B8000,"Sonic Colors Ultimate [010040E0116B8000]",status-playable,playable,2022-11-12 21:24:26.000 +01001270012B6000,"Sonic Forces",status-playable,playable,2024-07-28 13:11:21.000 +01004AD014BF0000,"Sonic Frontiers",gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53.000 +01009AA000FAA000,"Sonic Mania",status-playable,playable,2020-06-08 17:30:57.000 +01009AA000FAA000,"Sonic Mania Plus",status-playable,playable,2022-01-16 04:09:11.000 +01008F701C074000,"Sonic Superstars",gpu;status-ingame;nvdec,ingame,2023-10-28 17:48:07.000 +010088801C150000,"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",status-playable,playable,2024-08-20 13:26:56.000 +01005EA01C0FC000,"SONIC X SHADOW GENERATIONS",status-ingame;crash,ingame,2025-01-07 04:20:45.000 +,"Soul Axiom Rebooted",nvdec;slow;status-ingame,ingame,2020-09-04 12:41:01.000 +,"Soul Searching",status-playable,playable,2020-07-09 18:39:07.000 +01008F2005154000,"South Park: The Fractured But Whole",slow;status-playable;online-broken,playable,2024-07-08 17:47:28.000 +,"Space Blaze",status-playable,playable,2020-08-30 16:18:05.000 +,"Space Cows",UE4;crash;status-menus,menus,2020-06-15 11:33:20.000 +,"SPACE ELITE FORCE",status-playable,playable,2020-11-27 15:21:05.000 +010047B010260000,"Space Pioneer",status-playable,playable,2022-10-20 12:24:37.000 +010010A009830000,"Space Ribbon",status-playable,playable,2022-08-15 17:17:10.000 +0000000000000000,"SpaceCadetPinball",status-ingame;homebrew,ingame,2024-04-18 19:30:04.000 +0100D9B0041CE000,"Spacecats with Lasers",status-playable,playable,2022-08-15 17:22:44.000 +,"Spaceland",status-playable,playable,2020-11-01 14:31:56.000 +,"Sparkle 2",status-playable,playable,2020-10-19 11:51:39.000 +01000DC007E90000,"Sparkle Unleashed",status-playable,playable,2021-06-03 14:52:15.000 +,"Sparkle ZERO",gpu;slow;status-ingame,ingame,2020-03-23 18:19:18.000 +01007ED00C032000,"Sparklite",status-playable,playable,2022-08-06 11:35:41.000 +0100E6A009A26000,"Spartan",UE4;nvdec;status-playable,playable,2021-03-05 15:53:19.000 +,"Speaking Simulator",status-playable,playable,2020-10-08 13:00:39.000 +01008B000A5AE000,"Spectrum",status-playable,playable,2022-08-16 11:15:59.000 +0100F18010BA0000,"Speed 3: Grand Prix",status-playable;UE4,playable,2022-10-20 12:32:31.000 +,"Speed Brawl",slow;status-playable,playable,2020-09-18 22:08:16.000 +01000540139F6000,"Speed Limit",gpu;status-ingame,ingame,2022-09-02 18:37:40.000 +010061F013A0E000,"Speed Truck Racing",status-playable,playable,2022-10-20 12:57:04.000 +0100E74007EAC000,"Spellspire",status-playable,playable,2022-08-16 11:21:21.000 +010021F004270000,"Spelunker Party!",services;status-boots,boots,2022-08-16 11:25:49.000 +0100710013ABA000,"Spelunky",status-playable,playable,2021-11-20 17:45:03.000 +0100BD500BA94000,"Sphinx and the Cursed Mummy™",gpu;status-ingame;32-bit;opengl,ingame,2024-05-20 06:00:51.000 +,"Spider Solitaire",status-playable,playable,2020-12-16 16:19:30.000 +010076D0122A8000,"Spinch",status-playable,playable,2024-07-12 19:02:10.000 +01001E40136FE000,"Spinny's journey",status-ingame;crash,ingame,2021-11-30 03:39:44.000 +,"Spiral Splatter",status-playable,playable,2020-06-04 14:03:57.000 +,"Spirit Hunter: NG",32-bit;status-playable,playable,2020-12-17 20:38:47.000 +01005E101122E000,"Spirit of the North",status-playable;UE4,playable,2022-09-30 11:40:47.000 +,"Spirit Roots",nvdec;status-playable,playable,2020-07-10 13:33:32.000 +0100BD400DC52000,"Spiritfarer",gpu;status-ingame,ingame,2022-10-06 16:31:38.000 +01009D60080B4000,"SpiritSphere DX",status-playable,playable,2021-07-03 23:37:49.000 +010042700E3FC000,"Spitlings",status-playable;online-broken,playable,2022-10-06 16:42:39.000 +01003BC0000A0000,"Splatoon 2",status-playable;ldn-works;LAN,playable,2024-07-12 19:11:15.000 +0100C2500FC20000,"Splatoon 3",status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11.000 +0100BA0018500000,"Splatoon 3: Splatfest World Premiere",gpu;status-ingame;online-broken;demo,ingame,2022-09-19 03:17:12.000 +01009FB0172F4000,"SpongeBob SquarePants The Cosmic Shake",gpu;status-ingame;UE4,ingame,2023-08-01 19:29:53.000 +010062800D39C000,"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34.000 +010097C01336A000,"Spooky Chase",status-playable,playable,2022-11-04 12:17:44.000 +0100C6100D75E000,"Spooky Ghosts Dot Com",status-playable,playable,2021-06-15 15:16:11.000 +0100DE9005170000,"Sports Party",nvdec;status-playable,playable,2021-03-05 13:40:42.000 +0100E04009BD4000,"Spot The Difference",status-playable,playable,2022-08-16 11:49:52.000 +010052100D1B4000,"Spot the Differences: Party!",status-playable,playable,2022-08-16 11:55:26.000 +01000E6015350000,"Spy Alarm",services;status-ingame,ingame,2022-12-09 10:12:51.000 +01005D701264A000,"SpyHack",status-playable,playable,2021-04-15 10:53:51.000 +,"Spyro Reignited Trilogy",Needs More Attention;UE4;crash;gpu;nvdec;status-menus,menus,2021-01-22 13:01:56.000 +010077B00E046000,"Spyro Reignited Trilogy",status-playable;nvdec;UE4,playable,2022-09-11 18:38:33.000 +,"Squeakers",status-playable,playable,2020-12-13 12:13:05.000 +,"Squidgies Takeover",status-playable,playable,2020-07-20 22:28:08.000 +,"Squidlit",status-playable,playable,2020-08-06 12:38:32.000 +0100EBF00E702000,"STAR OCEAN First Departure R",nvdec;status-playable,playable,2021-07-05 19:29:16.000 +010065301A2E0000,"STAR OCEAN The Second Story R",status-ingame;crash,ingame,2024-06-01 02:39:59.000 +,"Star Renegades",nvdec;status-playable,playable,2020-12-11 12:19:23.000 +,"Star Story: The Horizon Escape",status-playable,playable,2020-08-11 22:31:38.000 +01009DF015776000,"Star Trek Prodigy: Supernova",status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50.000 +0100854015868000,"Star Wars - Knights Of The Old Republic",gpu;deadlock;status-boots,boots,2024-02-12 10:13:51.000 +010040701B948000,"STAR WARS Battlefront Classic Collection",gpu;status-ingame;vulkan,ingame,2024-07-12 19:24:21.000 +0100BD100FFBE000,"STAR WARS Episode I: Racer",slow;status-playable;nvdec,playable,2022-10-03 16:08:36.000 +0100BB500EACA000,"STAR WARS Jedi Knight II Jedi Outcast",gpu;status-ingame,ingame,2022-09-15 22:51:00.000 +01008CA00FAE8000,"Star Wars Jedi Knight: Jedi Academy",gpu;status-boots,boots,2021-06-16 12:35:30.000 +0100FA10115F8000,"Star Wars: Republic Commando",gpu;status-ingame;32-bit,ingame,2023-10-31 15:57:17.000 +0100153014544000,"STAR WARS: The Force Unleashed",status-playable,playable,2024-05-01 17:41:28.000 +01006DA00DEAC000,"Star Wars™ Pinball",status-playable;online-broken,playable,2022-09-11 18:53:31.000 +01005EB00EA10000,"Star-Crossed Myth - The Department of Wishes",gpu;status-ingame,ingame,2021-06-04 19:34:36.000 +0100E6B0115FC000,"Star99",status-menus;online,menus,2021-11-26 14:18:51.000 +01002100137BA000,"Stardash",status-playable,playable,2021-01-21 16:31:19.000 +0100E65002BB8000,"Stardew Valley",status-playable;online-broken;ldn-untested,playable,2024-02-14 03:11:19.000 +01002CC003FE6000,"Starlink: Battle for Atlas",services-horizon;status-nothing;crash;Needs Update,nothing,2024-05-05 17:25:11.000 +,"Starlit Adventures Golden Stars",status-playable,playable,2020-11-21 12:14:43.000 +,"Starship Avenger Operation: Take Back Earth",status-playable,playable,2021-01-12 15:52:55.000 +,"State of Anarchy: Master of Mayhem",nvdec;status-playable,playable,2021-01-12 19:00:05.000 +,"State of Mind",UE4;crash;status-boots,boots,2020-06-22 22:17:50.000 +0100616009082000,"STAY",crash;services;status-boots,boots,2021-04-23 14:24:52.000 +0100B61009C60000,"STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY",status-playable,playable,2021-01-26 17:37:28.000 +01008010118CC000,"Steam Prison",nvdec;status-playable,playable,2021-04-01 15:34:11.000 +0100AE100DAFA000,"Steam Tactics",status-playable,playable,2022-10-06 16:53:45.000 +,"Steamburg",status-playable,playable,2021-01-13 08:42:01.000 +01009320084A4000,"SteamWorld Dig",status-playable,playable,2024-08-19 12:12:23.000 +0100CA9002322000,"SteamWorld Dig 2",status-playable,playable,2022-12-21 19:25:42.000 +,"SteamWorld Quest",nvdec;status-playable,playable,2020-11-09 13:10:04.000 +01001C6014772000,"Steel Assault",status-playable,playable,2022-12-06 14:48:30.000 +,"Steins;Gate Elite",status-playable,playable,2020-08-04 07:33:32.000 +0100CB400E9BC000,"STEINS;GATE: My Darling's Embrace",status-playable;nvdec,playable,2022-11-20 16:48:34.000 +01002DE01043E000,"Stela",UE4;status-playable,playable,2021-06-15 13:28:34.000 +01005A700C954000,"Stellar Interface",status-playable,playable,2022-10-20 13:44:33.000 +0100BC800EDA2000,"STELLATUM",gpu;status-playable,playable,2021-03-07 16:30:23.000 +,"Steredenn",status-playable,playable,2021-01-13 09:19:42.000 +0100AE0006474000,"Stern Pinball Arcade",status-playable,playable,2022-08-16 14:24:41.000 +,"Stikbold! A Dodgeball Adventure DELUXE",status-playable,playable,2021-01-11 20:12:54.000 +010077B014518000,"Stitchy in Tooki Trouble",status-playable,playable,2021-05-06 16:25:53.000 +010070D00F640000,"STONE",status-playable;UE4,playable,2022-09-30 11:53:32.000 +010074400F6A8000,"Stories Untold",status-playable;nvdec,playable,2022-12-22 01:08:46.000 +010040D00BCF4000,"Storm Boy",status-playable,playable,2022-10-20 14:15:06.000 +0100B2300B932000,"Storm in a Teacup",gpu;status-ingame,ingame,2021-11-06 02:03:19.000 +,"Story of a Gladiator",status-playable,playable,2020-07-29 15:08:18.000 +010017301007E000,"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",status-playable,playable,2021-03-18 11:42:19.000 +0100ED400EEC2000,"Story of Seasons: Friends of Mineral Town",status-playable,playable,2022-10-03 16:40:31.000 +010078D00E8F4000,"Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000",slow;status-playable;nvdec;UE4,playable,2022-09-16 11:58:38.000 +01000A6013F86000,"Strange Field Football",status-playable,playable,2022-11-04 12:25:57.000 +,"Stranger Things 3: The Game",status-playable,playable,2021-01-11 17:44:09.000 +0100D7E011C64000,"Strawberry Vinegar",status-playable;nvdec,playable,2022-12-05 16:25:40.000 +010075101EF84000,"Stray",status-ingame;crash,ingame,2025-01-07 04:03:00.000 +0100024008310000,"Street Fighter 30th Anniversary Collection",status-playable;online-broken;ldn-partial,playable,2022-08-20 16:50:47.000 +010012400D202000,"Street Outlaws: The List",nvdec;status-playable,playable,2021-06-11 12:15:32.000 +,"Street Power Soccer",UE4;crash;status-boots,boots,2020-11-21 12:28:57.000 +,"Streets of Rage 4",nvdec;online;status-playable,playable,2020-07-07 21:21:22.000 +0100BDE012928000,"Strife: Veteran Edition",gpu;status-ingame,ingame,2022-01-15 05:10:42.000 +010039100DACC000,"Strike Force - War on Terror",status-menus;crash;Needs Update,menus,2021-11-24 08:08:20.000 +010072500D52E000,"Strike Suit Zero: Director's Cut",crash;status-boots,boots,2021-04-23 17:15:14.000 +,"StrikeForce Kitty",nvdec;status-playable,playable,2020-07-29 16:22:15.000 +0100FF5005B76000,"STRIKERS1945 for Nintendo Switch",32-bit;status-playable,playable,2021-06-03 19:35:04.000 +0100720008ED2000,"STRIKERS1945II for Nintendo Switch",32-bit;status-playable,playable,2021-06-03 19:43:00.000 +,"Struggling",status-playable,playable,2020-10-15 20:37:03.000 +0100AF000B4AE000,"Stunt Kite Party",nvdec;status-playable,playable,2021-01-25 17:16:56.000 +0100C5500E7AE000,"STURMWIND EX",audio;32-bit;status-playable,playable,2022-09-16 12:01:39.000 +0100E6400BCE8000,"Sub Level Zero: Redux",status-playable,playable,2022-09-16 12:30:03.000 +,"Subarashiki Kono Sekai -Final Remix-",services;slow;status-ingame,ingame,2020-02-10 16:21:51.000 +010001400E474000,"Subdivision Infinity DX",UE4;crash;status-boots,boots,2021-03-03 14:26:46.000 +0100EDA00D866000,"Submerged",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01.000 +0100429011144000,"Subnautica",status-playable;vulkan-backend-bug,playable,2022-11-04 13:07:29.000 +010014C011146000,"Subnautica Below Zero",status-playable,playable,2022-12-23 14:15:13.000 +0100BF9012AC6000,"Suguru Nature",crash;status-ingame,ingame,2021-07-29 11:36:27.000 +01005CD00A2A2000,"Suicide Guy",status-playable,playable,2021-01-26 13:13:54.000 +0100DE000C2E4000,"Suicide Guy: Sleepin' Deeply",status-ingame;Needs More Attention,ingame,2022-09-20 23:45:25.000 +01003D50126A4000,"Sumire",status-playable,playable,2022-11-12 13:40:43.000 +0100A130109B2000,"Summer in Mara",nvdec;status-playable,playable,2021-03-06 14:10:38.000 +01004E500DB9E000,"Summer Sweetheart",status-playable;nvdec,playable,2022-09-16 12:51:46.000 +0100BFE014476000,"Sunblaze",status-playable,playable,2022-11-12 13:59:23.000 +01002D3007962000,"Sundered: Eldritch Edition",gpu;status-ingame,ingame,2021-06-07 11:46:00.000 +0100F7000464A000,"Super Beat Sports",status-playable;ldn-untested,playable,2022-08-16 16:05:50.000 +,"Super Blood Hockey",status-playable,playable,2020-12-11 20:01:41.000 +01007AD00013E000,"Super Bomberman R",status-playable;nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14.000 +0100B87017D94000,"SUPER BOMBERMAN R 2",deadlock;status-boots,boots,2023-09-29 13:19:51.000 +0100D9B00DB5E000,"Super Cane Magic ZERO",status-playable,playable,2022-09-12 15:33:46.000 +010065F004E5E000,"Super Chariot",status-playable,playable,2021-06-03 13:19:01.000 +0100E5E00C464000,"SUPER DRAGON BALL HEROES WORLD MISSION",status-playable;nvdec;online-broken,playable,2022-08-17 12:56:30.000 +010023100B19A000,"Super Dungeon Tactics",status-playable,playable,2022-10-06 17:40:40.000 +010056800B534000,"Super Inefficient Golf",status-playable;UE4,playable,2022-08-17 15:53:45.000 +,"Super Jumpy Ball",status-playable,playable,2020-07-04 18:40:36.000 +0100196009998000,"Super Kickers League",status-playable,playable,2021-01-26 13:36:48.000 +01003FB00C5A8000,"Super Kirby Clash",status-playable;ldn-works,playable,2024-07-30 18:21:55.000 +010000D00F81A000,"Super Korotama",status-playable,playable,2021-06-06 19:06:22.000 +01003E300FCAE000,"Super Loop Drive",status-playable;nvdec;UE4,playable,2022-09-22 10:58:05.000 +010049900F546000,"Super Mario 3D All-Stars",services-horizon;slow;status-ingame;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16.000 +010028600EBDA000,"Super Mario 3D World + Bowser's Fury",status-playable;ldn-works,playable,2024-07-31 10:45:37.000 +054507E0B7552000,"Super Mario 64",status-ingame;homebrew,ingame,2024-03-20 16:57:27.000 +0100277011F1A000,"Super Mario Bros. 35",status-menus;online-broken,menus,2022-08-07 16:27:25.000 +010015100B514000,"Super Mario Bros. Wonder",status-playable;amd-vendor-bug,playable,2024-09-06 13:21:21.000 +01009B90006DC000,"Super Mario Maker 2",status-playable;online-broken;ldn-broken,playable,2024-08-25 11:05:19.000 +0100000000010000,"Super Mario Odyssey",status-playable;nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34.000 +010036B0034E4000,"Super Mario Party",gpu;status-ingame;Needs Update;ldn-works,ingame,2024-06-21 05:10:16.000 +0100BC0018138000,"Super Mario RPG",gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42.000 +0000000000000000,"Super Mario World",status-boots;homebrew,boots,2024-06-13 01:40:31.000 +,"Super Meat Boy",services;status-playable,playable,2020-04-02 23:10:07.000 +01009C200D60E000,"Super Meat Boy Forever",gpu;status-boots,boots,2021-04-26 14:25:39.000 +,"Super Mega Space Blaster Special Turbo",online;status-playable,playable,2020-08-06 12:13:25.000 +010031F019294000,"Super Monkey Ball Banana Rumble",status-playable,playable,2024-06-28 10:39:18.000 +0100B2A00E1E0000,"Super Monkey Ball: Banana Blitz HD",status-playable;online-broken,playable,2022-09-16 13:16:25.000 +,"Super Mutant Alien Assault",status-playable,playable,2020-06-07 23:32:45.000 +01004D600AC14000,"Super Neptunia RPG",status-playable;nvdec,playable,2022-08-17 16:38:52.000 +,"Super Nintendo Entertainment System - Nintendo Switch Online",status-playable,playable,2021-01-05 00:29:48.000 +0100284007D6C000,"Super One More Jump",status-playable,playable,2022-08-17 16:47:47.000 +01001F90122B2000,"Super Punch Patrol",status-playable,playable,2024-07-12 19:49:02.000 +0100331005E8E000,"Super Putty Squad",gpu;status-ingame;32-bit,ingame,2024-04-29 15:51:54.000 +,"SUPER ROBOT WARS T",online;status-playable,playable,2021-03-25 11:00:40.000 +,"SUPER ROBOT WARS V",online;status-playable,playable,2020-06-23 12:56:37.000 +,"SUPER ROBOT WARS X",online;status-playable,playable,2020-08-05 19:18:51.000 +,"Super Saurio Fly",nvdec;status-playable,playable,2020-08-06 13:12:14.000 +,"Super Skelemania",status-playable,playable,2020-06-07 22:59:50.000 +01006A800016E000,"Super Smash Bros. Ultimate",gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21.000 +0100D61012270000,"Super Soccer Blast",gpu;status-ingame,ingame,2022-02-16 08:39:12.000 +0100A9300A4AE000,"Super Sportmatchen",status-playable,playable,2022-08-19 12:34:40.000 +0100FB400F54E000,"Super Street: Racer",status-playable;UE4,playable,2022-09-16 13:43:14.000 +,"Super Tennis Blast - 01000500DB50000",status-playable,playable,2022-08-19 16:20:48.000 +0100C6800D770000,"Super Toy Cars 2",gpu;regression;status-ingame,ingame,2021-03-02 20:15:15.000 +010035B00B3F0000,"Super Volley Blast",status-playable,playable,2022-08-19 18:14:40.000 +0100FF60051E2000,"Superbeat: Xonic EX",status-ingame;crash;nvdec,ingame,2022-08-19 18:54:40.000 +0100630010252000,"SuperEpic: The Entertainment War",status-playable,playable,2022-10-13 23:02:48.000 +01001A500E8B4000,"Superhot",status-playable,playable,2021-05-05 19:51:30.000 +,"Superliminal",status-playable,playable,2020-09-03 13:20:50.000 +0100C01012654000,"Supermarket Shriek",status-playable,playable,2022-10-13 23:19:20.000 +0100A6E01201C000,"Supraland",status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11.000 +010029A00AEB0000,"Survive! Mr. Cube",status-playable,playable,2022-10-20 14:44:47.000 +01005AB01119C000,"SUSHI REVERSI",status-playable,playable,2021-06-11 19:26:58.000 +,"Sushi Striker: The Way of Sushido",nvdec;status-playable,playable,2020-06-26 20:49:11.000 +0100D6D00EC2C000,"Sweet Witches",status-playable;nvdec,playable,2022-10-20 14:56:37.000 +010049D00C8B0000,"Swimsanity!",status-menus;online,menus,2021-11-26 14:27:16.000 +01005DF00DC26000,"SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION",UE4;gpu;online;status-ingame,ingame,2021-06-09 16:58:50.000 +01001B600D1D6000,"SWORD ART ONLINE: Hollow Realization Deluxe Edition",status-playable;nvdec,playable,2022-08-19 19:19:15.000 +,"Sword of the Guardian",status-playable,playable,2020-07-16 12:24:39.000 +0100E4701355C000,"Sword of the Necromancer",status-ingame;crash,ingame,2022-12-10 01:28:39.000 +01004BB00421E000,"Syberia 1 & 2",status-playable,playable,2021-12-24 12:06:25.000 +010028C003FD6000,"Syberia 2",gpu;status-ingame,ingame,2022-08-24 12:43:03.000 +0100CBE004E6C000,"Syberia 3",nvdec;status-playable,playable,2021-01-25 16:15:12.000 +,"Sydney Hunter and the Curse of the Mayan",status-playable,playable,2020-06-15 12:15:57.000 +,"SYNAPTIC DRIVE",online;status-playable,playable,2020-09-07 13:44:05.000 +01009E700F448000,"Synergia",status-playable,playable,2021-04-06 17:58:04.000 +01009BF00E7D2000,"SYNTHETIK: Ultimate",gpu;status-ingame;crash,ingame,2022-08-30 03:19:25.000 +,"Table Top Racing World Tour Nitro Edition",status-playable,playable,2020-04-05 23:21:30.000 +01000F20083A8000,"Tactical Mind",status-playable,playable,2021-01-25 18:05:00.000 +,"Tactical Mind 2",status-playable,playable,2020-07-01 23:11:07.000 +0100E12013C1A000,"Tactics Ogre Reborn",status-playable;vulkan-backend-bug,playable,2024-04-09 06:21:35.000 +01007C7006AEE000,"Tactics V: ""Obsidian Brigade",status-playable,playable,2021-02-28 15:09:42.000 +,"Taiko no Tatsujin Rhythmic Adventure Pack",status-playable,playable,2020-12-03 07:28:26.000 +01002C000B552000,"Taiko no Tatsujin: Drum 'n' Fun!",status-playable;online-broken;ldn-broken,playable,2023-05-20 15:10:12.000 +0100BCA0135A0000,"Taiko no Tatsujin: Rhythm Festival",status-playable,playable,2023-11-13 13:16:34.000 +0100346017304000,"Taiko Risshiden V DX",status-nothing;crash,nothing,2022-06-06 16:25:31.000 +010040A00EA26000,"Taimumari: Complete Edition",status-playable,playable,2022-12-06 13:34:49.000 +0100F0C011A68000,"Tales from the Borderlands",status-playable;nvdec,playable,2022-10-25 18:44:14.000 +0100408007078000,"Tales of the Tiny Planet",status-playable,playable,2021-01-25 15:47:41.000 +01002C0008E52000,"Tales of Vesperia: Definitive Edition",status-playable,playable,2024-09-28 03:20:47.000 +010012800EE3E000,"Tamashii",status-playable,playable,2021-06-10 15:26:20.000 +010008A0128C4000,"Tamiku",gpu;status-ingame,ingame,2021-06-15 20:06:55.000 +,"Tangledeep",crash;status-boots,boots,2021-01-05 04:08:41.000 +01007DB010D2C000,"TaniNani",crash;kernel;status-nothing,nothing,2021-04-08 03:06:44.000 +,"Tank Mechanic Simulator",status-playable,playable,2020-12-11 15:10:45.000 +01007A601318C000,"Tanuki Justice",status-playable;opengl,playable,2023-02-21 18:28:10.000 +01004DF007564000,"Tanzia",status-playable,playable,2021-06-07 11:10:25.000 +,"Task Force Kampas",status-playable,playable,2020-11-30 14:44:15.000 +0100B76011DAA000,"Taxi Chaos",slow;status-playable;online-broken;UE4,playable,2022-10-25 19:13:00.000 +,"Tcheco in the Castle of Lucio",status-playable,playable,2020-06-27 13:35:43.000 +010092B0091D0000,"Team Sonic Racing",status-playable;online-broken;ldn-works,playable,2024-02-05 15:05:27.000 +0100FE701475A000,"Teenage Mutant Ninja Turtles: Shredder's Revenge",deadlock;status-boots;crash,boots,2024-09-28 09:31:39.000 +01005CF01E784000,"Teenage Mutant Ninja Turtles: Splintered Fate",status-playable,playable,2024-08-03 13:50:42.000 +0100FDB0154E4000,"Teenage Mutant Ninja Turtles: The Cowabunga Collection",status-playable,playable,2024-01-22 19:39:04.000 +,"Telling Lies",status-playable,playable,2020-10-23 21:14:51.000 +0100C8B012DEA000,"Temtem",status-menus;online-broken,menus,2022-12-17 17:36:11.000 +,"TENGAI for Nintendo Switch",32-bit;status-playable,playable,2020-11-25 19:52:26.000 +,"Tennis",status-playable,playable,2020-06-01 20:50:36.000 +01002970080AA000,"Tennis in the Face",status-playable,playable,2022-08-22 14:10:54.000 +0100092006814000,"Tennis World Tour",status-playable;online-broken,playable,2022-08-22 14:27:10.000 +0100950012F66000,"Tennis World Tour 2",status-playable;online-broken,playable,2022-10-14 10:43:16.000 +0100E46006708000,"Terraria",status-playable;online-broken,playable,2022-09-12 16:14:57.000 +010070C00FB56000,"TERROR SQUID",status-playable;online-broken,playable,2023-10-30 22:29:29.000 +010043700EB68000,"TERRORHYTHM (TRRT)",status-playable,playable,2021-02-27 13:18:14.000 +0100FBC007EAE000,"Tesla vs Lovecraft",status-playable,playable,2023-11-21 06:19:36.000 +01005C8005F34000,"Teslagrad",status-playable,playable,2021-02-23 14:41:02.000 +01006F701507A000,"Tested on Humans: Escape Room",status-playable,playable,2022-11-12 14:42:52.000 +,"Testra's Escape",status-playable,playable,2020-06-03 18:21:14.000 +,"TETRA for Nintendo Switch",status-playable,playable,2020-06-26 20:49:55.000 +010040600C5CE000,"TETRIS 99",gpu;status-ingame;online-broken;ldn-untested,ingame,2024-05-02 16:36:41.000 +,"Tetsumo Party",status-playable,playable,2020-06-09 22:39:55.000 +01008ED0087A4000,"The Adventure Pals",status-playable,playable,2022-08-22 14:48:52.000 +,"The Adventures of 00 Dilly",status-playable,playable,2020-12-30 19:32:29.000 +,"The Adventures of Elena Temple",status-playable,playable,2020-06-03 23:15:35.000 +010045A00E038000,"The Alliance Alive HD Remastered",nvdec;status-playable,playable,2021-03-07 15:43:45.000 +,"The Almost Gone",status-playable,playable,2020-07-05 12:33:07.000 +0100CD500DDAE000,"The Bard's Tale ARPG: Remastered and Resnarkled",gpu;status-ingame;nvdec;online-working,ingame,2024-07-18 12:52:01.000 +01001E50141BC000,"The Battle Cats Unite!",deadlock;status-ingame,ingame,2021-12-14 21:38:34.000 +010089600E66A000,"The Big Journey",status-playable,playable,2022-09-16 14:03:08.000 +010021C000B6A000,"The Binding of Isaac: Afterbirth+",status-playable,playable,2021-04-26 14:11:56.000 +,"The Bluecoats: North & South",nvdec;status-playable,playable,2020-12-10 21:22:29.000 +010062500BFC0000,"The Book of Unwritten Tales 2",status-playable,playable,2021-06-09 14:42:53.000 +,"The Bridge",status-playable,playable,2020-06-03 13:53:26.000 +,"The Bug Butcher",status-playable,playable,2020-06-03 12:02:04.000 +01001B40086E2000,"The Bunker",status-playable;nvdec,playable,2022-09-16 14:24:05.000 +,"The Caligula Effect: Overdose",UE4;gpu;status-ingame,ingame,2021-01-04 11:07:50.000 +010066800E9F8000,"The Childs Sight",status-playable,playable,2021-06-11 19:04:56.000 +,"The Coma 2: Vicious Sisters",gpu;status-ingame,ingame,2020-06-20 12:51:51.000 +,"The Coma: Recut",status-playable,playable,2020-06-03 15:11:23.000 +01004170113D4000,"The Complex",status-playable;nvdec,playable,2022-09-28 14:35:41.000 +01000F20102AC000,"The Copper Canyon Dixie Dash",status-playable;UE4,playable,2022-09-29 11:42:29.000 +01000850037C0000,"The Count Lucanor",status-playable;nvdec,playable,2022-08-22 15:26:37.000 +0100EBA01548E000,"The Cruel King and the Great Hero",gpu;services;status-ingame,ingame,2022-12-02 07:02:08.000 +,"The Dark Crystal",status-playable,playable,2020-08-11 13:43:41.000 +,"The Darkside Detective",status-playable,playable,2020-06-03 22:16:18.000 +01000A10041EA000,"The Elder Scrolls V: Skyrim",gpu;status-ingame;crash,ingame,2024-07-14 03:21:31.000 +,"The End is Nigh",status-playable,playable,2020-06-01 11:26:45.000 +,"The Escapists 2",nvdec;status-playable,playable,2020-09-24 12:31:31.000 +01001B700BA7C000,"The Escapists: Complete Edition",status-playable,playable,2021-02-24 17:50:31.000 +0100C2E0129A6000,"The Executioner",nvdec;status-playable,playable,2021-01-23 00:31:28.000 +01006050114D4000,"The Experiment: Escape Room",gpu;status-ingame,ingame,2022-09-30 13:20:35.000 +0100B5900DFB2000,"The Eyes of Ara",status-playable,playable,2022-09-16 14:44:06.000 +,"The Fall",gpu;status-ingame,ingame,2020-05-31 23:31:16.000 +,"The Fall Part 2: Unbound",status-playable,playable,2021-11-06 02:18:08.000 +0100CDC00789E000,"The Final Station",status-playable;nvdec,playable,2022-08-22 15:54:39.000 +010098800A1E4000,"The First Tree",status-playable,playable,2021-02-24 15:51:05.000 +0100C38004DCC000,"The Flame in the Flood: Complete Edition",gpu;status-ingame;nvdec;UE4,ingame,2022-08-22 16:23:49.000 +,"The Forbidden Arts - 01007700D4AC000",status-playable,playable,2021-01-26 16:26:24.000 +010030700CBBC000,"The friends of Ringo Ishikawa",status-playable,playable,2022-08-22 16:33:17.000 +01006350148DA000,"The Gardener and the Wild Vines",gpu;status-ingame,ingame,2024-04-29 16:32:10.000 +0100B13007A6A000,"The Gardens Between",status-playable,playable,2021-01-29 16:16:53.000 +010036E00FB20000,"The Great Ace Attorney Chronicles",status-playable,playable,2023-06-22 21:26:29.000 +,"The Great Perhaps",status-playable,playable,2020-09-02 15:57:04.000 +01003b300e4aa000,"THE GRISAIA TRILOGY",status-playable,playable,2021-01-31 15:53:59.000 +,"The Hong Kong Massacre",crash;status-ingame,ingame,2021-01-21 12:06:56.000 +,"The House of Da Vinci",status-playable,playable,2021-01-05 14:17:19.000 +,"The House of Da Vinci 2",status-playable,playable,2020-10-23 20:47:17.000 +01008940086E0000,"The Infectious Madness of Doctor Dekker",status-playable;nvdec,playable,2022-08-22 16:45:01.000 +,"The Inner World",nvdec;status-playable,playable,2020-06-03 21:22:29.000 +,"The Inner World - The Last Wind Monk",nvdec;status-playable,playable,2020-11-16 13:09:40.000 +0100AE5003EE6000,"The Jackbox Party Pack",status-playable;online-working,playable,2023-05-28 09:28:40.000 +010015D003EE4000,"The Jackbox Party Pack 2",status-playable;online-working,playable,2022-08-22 18:23:40.000 +0100CC80013D6000,"The Jackbox Party Pack 3",slow;status-playable;online-working,playable,2022-08-22 18:41:06.000 +0100E1F003EE8000,"The Jackbox Party Pack 4",status-playable;online-working,playable,2022-08-22 18:56:34.000 +010052C00B184000,"The Journey Down: Chapter One",nvdec;status-playable,playable,2021-02-24 13:32:41.000 +01006BC00B188000,"The Journey Down: Chapter Three",nvdec;status-playable,playable,2021-02-24 13:45:27.000 +,"The Journey Down: Chapter Two",nvdec;status-playable,playable,2021-02-24 13:32:13.000 +010020500BD98000,"The King's Bird",status-playable,playable,2022-08-22 19:07:46.000 +010031B00DB34000,"The Knight & the Dragon",gpu;status-ingame,ingame,2023-08-14 10:31:43.000 +,"The Language of Love",Needs Update;crash;status-nothing,nothing,2020-12-03 17:54:00.000 +010079C017F5E000,"The Lara Croft Collection",services-horizon;deadlock;status-nothing,nothing,2024-07-12 22:45:51.000 +0100449011506000,"The Last Campfire",status-playable,playable,2022-10-20 16:44:19.000 +0100AAD011592000,"The Last Dead End",gpu;status-ingame;UE4,ingame,2022-10-20 16:59:44.000 +0100AC800D022000,"THE LAST REMNANT Remastered",status-playable;nvdec;UE4,playable,2023-02-09 17:24:44.000 +,"The Legend of Dark Witch",status-playable,playable,2020-07-12 15:18:33.000 +01001920156C2000,"The Legend of Heroes: Trails from Zero",gpu;status-ingame;mac-bug,ingame,2024-09-14 21:41:41.000 +,"The Legend of Heroes: Trails of Cold Steel III",status-playable,playable,2020-12-16 10:59:18.000 +01009B101044C000,"The Legend of Heroes: Trails of Cold Steel III Demo",demo;nvdec;status-playable,playable,2021-04-23 01:07:32.000 +0100D3C010DE8000,"The Legend of Heroes: Trails of Cold Steel IV",nvdec;status-playable,playable,2021-04-23 14:01:05.000 +01005E5013862000,"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",status-nothing;crash,nothing,2021-09-30 14:41:07.000 +01008CF01BAAC000,"The Legend of Zelda Echoes of Wisdom",status-playable;nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01.000 +01007EF00011E000,"The Legend of Zelda: Breath of the Wild",gpu;status-ingame;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46.000 +0100509005AF2000,"The Legend of Zelda: Breath of the Wild Demo",status-ingame;demo,ingame,2022-12-24 05:02:58.000 +01006BB00C6F0000,"The Legend of Zelda: Link's Awakening",gpu;status-ingame;nvdec;mac-bug,ingame,2023-08-09 17:37:40.000 +01002DA013484000,"The Legend of Zelda: Skyward Sword HD",gpu;status-ingame,ingame,2024-06-14 16:48:29.000 +0100F2C0115B6000,"The Legend of Zelda: Tears of the Kingdom",gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30.000 +0100A4400BE74000,"The LEGO Movie 2 - Videogame",status-playable,playable,2023-03-01 11:23:37.000 +01007FC00206E000,"The LEGO NINJAGO Movie Video Game",status-nothing;crash,nothing,2022-08-22 19:12:53.000 +010064B00B95C000,"The Liar Princess and the Blind Prince",audio;slow;status-playable,playable,2020-06-08 21:23:28.000 +0100735004898000,"The Lion's Song",status-playable,playable,2021-06-09 15:07:16.000 +0100A5000D590000,"The Little Acre",nvdec;status-playable,playable,2021-03-02 20:22:27.000 +01007A700A87C000,"The Long Dark",status-playable,playable,2021-02-21 14:19:52.000 +010052B003A38000,"The Long Reach",nvdec;status-playable,playable,2021-02-24 14:09:48.000 +,"The Long Return",slow;status-playable,playable,2020-12-10 21:05:10.000 +0100CE1004E72000,"The Longest Five Minutes",gpu;status-boots,boots,2023-02-19 18:33:11.000 +0100F3D0122C2000,"The Longing",gpu;status-ingame,ingame,2022-11-12 15:00:58.000 +010085A00C5E8000,"The Lord of the Rings: Adventure Card Game",status-menus;online-broken,menus,2022-09-16 15:19:32.000 +01008A000A404000,"The Lost Child",nvdec;status-playable,playable,2021-02-23 15:44:20.000 +0100BAB00A116000,"The Low Road",status-playable,playable,2021-02-26 13:23:22.000 +,"The Mahjong",Needs Update;crash;services;status-nothing,nothing,2021-04-01 22:06:22.000 +,"The Messenger",status-playable,playable,2020-03-22 13:51:37.000 +0100DEC00B2BC000,"The Midnight Sanctuary",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32.000 +0100F1B00B456000,"The MISSING: J.J. Macfield and the Island of Memories",status-playable,playable,2022-08-22 19:36:18.000 +010033300AC1A000,"The Mooseman",status-playable,playable,2021-02-24 12:58:57.000 +01005E9016BDE000,"The movie The Quintessential Bride -Five Memories Spent with You-",status-playable,playable,2023-12-14 14:43:43.000 +0100496004194000,"The Mummy Demastered",status-playable,playable,2021-02-23 13:11:27.000 +,"The Mystery of the Hudson Case",status-playable,playable,2020-06-01 11:03:36.000 +01000CF0084BC000,"The Next Penelope",status-playable,playable,2021-01-29 16:26:11.000 +01001FB00E386000,"THE NINJA SAVIORS Return of the Warriors",online;status-playable,playable,2021-03-25 23:48:07.000 +0100B080184BC000,"The Oregon Trail",gpu;status-ingame,ingame,2022-11-25 16:11:49.000 +0100B0101265C000,"The Otterman Empire",UE4;gpu;status-ingame,ingame,2021-06-17 12:27:15.000 +01000BC01801A000,"The Outbound Ghost",status-nothing,nothing,2024-03-02 17:10:58.000 +0100626011656000,"The Outer Worlds",gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32.000 +,"The Park",UE4;crash;gpu;status-ingame,ingame,2020-12-18 12:50:07.000 +010050101127C000,"The Persistence",nvdec;status-playable,playable,2021-06-06 19:15:40.000 +0100CD300880E000,"The Pinball Arcade",status-playable;online-broken,playable,2022-08-22 19:49:46.000 +01006BD018B54000,"The Plucky Squire",status-ingame;crash,ingame,2024-09-27 22:32:33.000 +0100E6A00B960000,"The Princess Guide",status-playable,playable,2021-02-24 14:23:34.000 +010058A00BF1C000,"The Raven Remastered",status-playable;nvdec,playable,2022-08-22 20:02:47.000 +,"The Red Strings Club",status-playable,playable,2020-06-01 10:51:18.000 +010079400BEE0000,"The Room",status-playable,playable,2021-04-14 18:57:05.000 +010033100EE12000,"The Ryuo's Work is Never Done!",status-playable,playable,2022-03-29 00:35:37.000 +01002BA00C7CE000,"The Savior's Gang",gpu;status-ingame;nvdec;UE4,ingame,2022-09-21 12:37:48.000 +0100F3200E7CA000,"The Settlers: New Allies",deadlock;status-nothing,nothing,2023-10-25 00:18:05.000 +,"The Sexy Brutale",status-playable,playable,2021-01-06 17:48:28.000 +,"The Shapeshifting Detective",nvdec;status-playable,playable,2021-01-10 13:10:49.000 +010028D00BA1A000,"The Sinking City",status-playable;nvdec;UE4,playable,2022-09-12 16:41:55.000 +010041C00A68C000,"The Spectrum Retreat",status-playable,playable,2022-10-03 18:52:40.000 +010029300E5C4000,"The Stanley Parable: Ultra Deluxe",gpu;status-ingame,ingame,2024-07-12 23:18:26.000 +010007F00AF56000,"The Station",status-playable,playable,2022-09-28 18:15:27.000 +0100858010DC4000,"the StoryTale",status-playable,playable,2022-09-03 13:00:25.000 +0100AA400A238000,"The Stretchers",status-playable;nvdec;UE4,playable,2022-09-16 15:40:58.000 +,"The Survivalists",status-playable,playable,2020-10-27 15:51:13.000 +010040D00B7CE000,"The Swindle",status-playable;nvdec,playable,2022-08-22 20:53:52.000 +,"The Swords of Ditto",slow;status-ingame,ingame,2020-12-06 00:13:12.000 +01009B300D76A000,"The Tiny Bang Story",status-playable,playable,2021-03-05 15:39:05.000 +0100C3300D8C4000,"The Touryst",status-ingame;crash,ingame,2023-08-22 01:32:38.000 +010047300EBA6000,"The Tower of Beatrice",status-playable,playable,2022-09-12 16:51:42.000 +010058000A576000,"The Town of Light",gpu;status-playable,playable,2022-09-21 12:51:34.000 +0100B0E0086F6000,"The Trail: Frontier Challenge",slow;status-playable,playable,2022-08-23 15:10:51.000 +0100EA100F516000,"The Turing Test",status-playable;nvdec,playable,2022-09-21 13:24:07.000 +010064E00ECBC000,"The Unicorn Princess",status-playable,playable,2022-09-16 16:20:56.000 +0100BCF00E970000,"The Vanishing of Ethan Carter",UE4;status-playable,playable,2021-06-09 17:14:47.000 +,"The VideoKid",nvdec;status-playable,playable,2021-01-06 09:28:24.000 +,"The Voice",services;status-menus,menus,2020-07-28 20:48:49.000 +010029200B6AA000,"The Walking Dead",status-playable,playable,2021-06-04 13:10:56.000 +010056E00B4F4000,"The Walking Dead: A New Frontier",status-playable,playable,2022-09-21 13:40:48.000 +,"The Walking Dead: Season Two",status-playable,playable,2020-08-09 12:57:06.000 +010060F00AA70000,"The Walking Dead: The Final Season",status-playable;online-broken,playable,2022-08-23 17:22:32.000 +,"The Wanderer: Frankenstein's Creature",status-playable,playable,2020-07-11 12:49:51.000 +01008B200FC6C000,"The Wardrobe: Even Better Edition",status-playable,playable,2022-09-16 19:14:55.000 +01003D100E9C6000,"The Witcher 3: Wild Hunt",status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51.000 +0100B1300FF08000,"The Wonderful 101: Remastered",slow;status-playable;nvdec,playable,2022-09-30 13:49:28.000 +0100C1500B82E000,"The World Ends With You -Final Remix-",status-playable;ldn-untested,playable,2022-07-09 01:11:21.000 +0100E6200D56E000,"The World Next Door",status-playable,playable,2022-09-21 14:15:23.000 +,"Thea: The Awakening",status-playable,playable,2021-01-18 15:08:47.000 +010024201834A000,"THEATRHYTHM FINAL BAR LINE",status-playable,playable,2023-02-19 19:58:57.000 +010081B01777C000,"THEATRHYTHM FINAL BAR LINE",status-ingame;Incomplete,ingame,2024-08-05 14:24:55.000 +01001C2010D08000,"They Bleed Pixels",gpu;status-ingame,ingame,2024-08-09 05:52:18.000 +,"They Came From the Sky",status-playable,playable,2020-06-12 16:38:19.000 +0100CE700F62A000,"Thief of Thieves",status-nothing;crash;loader-allocator,nothing,2021-11-03 07:16:30.000 +0100CE400E34E000,"Thief Simulator",status-playable,playable,2023-04-22 04:39:11.000 +01009BD003B36000,"Thimbleweed Park",status-playable,playable,2022-08-24 11:15:31.000 +0100F2300A5DA000,"Think of the Children",deadlock;status-menus,menus,2021-11-23 09:04:45.000 +0100066004D68000,"This Is the Police",status-playable,playable,2022-08-24 11:37:05.000 +01004C100A04C000,"This Is the Police 2",status-playable,playable,2022-08-24 11:49:17.000 +,"This Strange Realm of Mine",status-playable,playable,2020-08-28 12:07:24.000 +0100A8700BC2A000,"This War of Mine: Complete Edition",gpu;status-ingame;32-bit;nvdec,ingame,2022-08-24 12:00:44.000 +,"THOTH",status-playable,playable,2020-08-05 18:35:28.000 +0100E910103B4000,"Thronebreaker: The Witcher Tales",nvdec;status-playable,playable,2021-06-03 16:40:15.000 +01006F6002840000,"Thumper",gpu;status-ingame,ingame,2024-08-12 02:41:07.000 +01000AC011588000,"Thy Sword",status-ingame;crash,ingame,2022-09-30 16:43:14.000 +,"Tick Tock: A Tale for Two",status-menus,menus,2020-07-14 14:49:38.000 +0100B6D00C2DE000,"Tied Together",nvdec;status-playable,playable,2021-04-10 14:03:46.000 +,"Timber Tennis Versus",online;status-playable,playable,2020-10-03 17:07:15.000 +01004C500B698000,"Time Carnage",status-playable,playable,2021-06-16 17:57:28.000 +0100F770045CA000,"Time Recoil",status-playable,playable,2022-08-24 12:44:03.000 +0100DD300CF3A000,"Timespinner",gpu;status-ingame,ingame,2022-08-09 09:39:11.000 +0100393013A10000,"Timothy and the Mysterious Forest",gpu;slow;status-ingame,ingame,2021-06-02 00:42:11.000 +,"Tin & Kuna",status-playable,playable,2020-11-17 12:16:12.000 +,"Tiny Gladiators",status-playable,playable,2020-12-14 00:09:43.000 +010061A00AE64000,"Tiny Hands Adventure",status-playable,playable,2022-08-24 16:07:48.000 +010074800741A000,"TINY METAL",UE4;gpu;nvdec;status-ingame,ingame,2021-03-05 17:11:57.000 +01005D0011A40000,"Tiny Racer",status-playable,playable,2022-10-07 11:13:03.000 +010002401AE94000,"Tiny Thor",gpu;status-ingame,ingame,2024-07-26 08:37:35.000 +0100A73016576000,"Tinykin",gpu;status-ingame,ingame,2023-06-18 12:12:24.000 +0100FE801185E000,"Titan Glory",status-boots,boots,2022-10-07 11:36:40.000 +0100605008268000,"Titan Quest",status-playable;nvdec;online-broken,playable,2022-08-19 21:54:15.000 +,"Titans Pinball",slow;status-playable,playable,2020-06-09 16:53:52.000 +010019500DB1E000,"Tlicolity Eyes - twinkle showtime -",gpu;status-boots,boots,2021-05-29 19:43:44.000 +,"To the Moon",status-playable,playable,2021-03-20 15:33:38.000 +,"Toast Time: Smash Up!",crash;services;status-menus,menus,2020-04-03 12:26:59.000 +,"Toby: The Secret Mine",nvdec;status-playable,playable,2021-01-06 09:22:33.000 +,"ToeJam & Earl: Back in the Groove",status-playable,playable,2021-01-06 22:56:58.000 +0100B5E011920000,"TOHU",slow;status-playable,playable,2021-02-08 15:40:44.000 +,"Toki",nvdec;status-playable,playable,2021-01-06 19:59:23.000 +01003E500F962000,"TOKYO DARK - REMEMBRANCE -",nvdec;status-playable,playable,2021-06-10 20:09:49.000 +0100A9400C9C2000,"Tokyo Mirage Sessions #FE Encore",32-bit;status-playable;nvdec,playable,2022-07-07 09:41:07.000 +0100E2E00CB14000,"Tokyo School Life",status-playable,playable,2022-09-16 20:25:54.000 +010024601BB16000,"Tomb Raider I-III Remastered",gpu;status-ingame;opengl,ingame,2024-09-27 12:32:04.000 +0100D7F01E49C000,"Tomba! Special Edition",services-horizon;status-nothing,nothing,2024-09-15 21:59:54.000 +0100D400100F8000,"Tonight we Riot",status-playable,playable,2021-02-26 15:55:09.000 +0100CC00102B4000,"TONY HAWK'S™ PRO SKATER™ 1 + 2",gpu;status-ingame;Needs Update,ingame,2024-09-24 08:18:14.000 +,"Tools Up!",crash;status-ingame,ingame,2020-07-21 12:58:17.000 +01009EA00E2B8000,"Toon War",status-playable,playable,2021-06-11 16:41:53.000 +,"Torchlight 2",status-playable,playable,2020-07-27 14:18:37.000 +010075400DDB8000,"Torchlight III",status-playable;nvdec;online-broken;UE4,playable,2022-10-14 22:20:17.000 +01007AF011732000,"TORICKY-S",deadlock;status-menus,menus,2021-11-25 08:53:36.000 +,"Torn Tales - Rebound Edition",status-playable,playable,2020-11-01 14:11:59.000 +0100A64010D48000,"Total Arcade Racing",status-playable,playable,2022-11-12 15:12:48.000 +0100512010728000,"Totally Reliable Delivery Service",status-playable;online-broken,playable,2024-09-27 19:32:22.000 +01004E900B082000,"Touhou Genso Wanderer RELOADED",gpu;status-ingame;nvdec,ingame,2022-08-25 11:57:36.000 +,"Touhou Kobuto V: Burst Battle",status-playable,playable,2021-01-11 15:28:58.000 +,"Touhou Spell Bubble",status-playable,playable,2020-10-18 11:43:43.000 +,"Tower of Babel",status-playable,playable,2021-01-06 17:05:15.000 +,"Tower of Time",gpu;nvdec;status-ingame,ingame,2020-07-03 11:11:12.000 +,"TowerFall",status-playable,playable,2020-05-16 18:58:07.000 +,"Towertale",status-playable,playable,2020-10-15 13:56:58.000 +010049E00BA34000,"Townsmen - A Kingdom Rebuilt",status-playable;nvdec,playable,2022-10-14 22:48:59.000 +01009FF00A160000,"Toy Stunt Bike: Tiptop's Trials",UE4;status-playable,playable,2021-04-10 13:56:34.000 +0100192010F5A000,"Tracks - Toybox Edition",UE4;crash;status-nothing,nothing,2021-02-08 15:19:18.000 +0100BCA00843A000,"Trailblazers",status-playable,playable,2021-03-02 20:40:49.000 +010009F004E66000,"Transcripted",status-playable,playable,2022-08-25 12:13:11.000 +01005E500E528000,"TRANSFORMERS: BATTLEGROUNDS",online;status-playable,playable,2021-06-17 18:08:19.000 +,"Transistor",status-playable,playable,2020-10-22 11:28:02.000 +0100A8D010BFA000,"Travel Mosaics 2: Roman Holiday",status-playable,playable,2021-05-26 12:33:16.000 +0100102010BFC000,"Travel Mosaics 3: Tokyo Animated",status-playable,playable,2021-05-26 12:06:27.000 +010096D010BFE000,"Travel Mosaics 4: Adventures in Rio",status-playable,playable,2021-05-26 11:54:58.000 +01004C4010C00000,"Travel Mosaics 5: Waltzing Vienna",status-playable,playable,2021-05-26 11:49:35.000 +0100D520119D6000,"Travel Mosaics 6: Christmas Around the World",status-playable,playable,2021-05-26 00:52:47.000 +,"Travel Mosaics 7: Fantastic Berlin -",status-playable,playable,2021-05-22 18:37:34.000 +01007DB00A226000,"Travel Mosaics: A Paris Tour",status-playable,playable,2021-05-26 12:42:26.000 +010011600C946000,"Travis Strikes Again: No More Heroes",status-playable;nvdec;UE4,playable,2022-08-25 12:36:38.000 +,"Treadnauts",status-playable,playable,2021-01-10 14:57:41.000 +0100D7800E9E0000,"Trials of Mana",status-playable;UE4,playable,2022-09-30 21:50:37.000 +0100E1D00FBDE000,"Trials of Mana Demo",status-playable;nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02.000 +01003E800A102000,"Trials Rising",status-playable,playable,2024-02-11 01:36:39.000 +0100CC80140F8000,"TRIANGLE STRATEGY",gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37.000 +0100D9000A930000,"Trine",ldn-untested;nvdec;status-playable,playable,2021-06-03 11:28:15.000 +010064E00A932000,"Trine 2",nvdec;status-playable,playable,2021-06-03 11:45:20.000 +0100DEC00A934000,"Trine 3: The Artifacts of Power",ldn-untested;online;status-playable,playable,2021-06-03 12:01:24.000 +010055E00CA68000,"Trine 4: The Nightmare Prince",gpu;status-nothing,nothing,2025-01-07 05:47:46.000 +01002D7010A54000,"Trinity Trigger",status-ingame;crash,ingame,2023-03-03 03:09:09.000 +0100868013FFC000,"Trivial Pursuit Live! 2",status-boots,boots,2022-12-19 00:04:33.000 +0100F78002040000,"Troll and I",gpu;nvdec;status-ingame,ingame,2021-06-04 16:58:50.000 +,"Trollhunters: Defenders of Arcadia",gpu;nvdec;status-ingame,ingame,2020-11-30 13:27:09.000 +0100FBE0113CC000,"Tropico 6",status-playable;nvdec;UE4,playable,2022-10-14 23:21:03.000 +0100D06018DCA000,"Trouble Witches Final! Episode 01: Daughters of Amalgam",status-playable,playable,2024-04-08 15:08:11.000 +,"Troubleshooter",UE4;crash;status-nothing,nothing,2020-10-04 13:46:50.000 +,"Trover Saves the Universe",UE4;crash;status-nothing,nothing,2020-10-03 10:25:27.000 +0100E6300D448000,"Truberbrook",status-playable,playable,2021-06-04 17:08:00.000 +0100F2100AA5C000,"Truck & Logistics Simulator",status-playable,playable,2021-06-11 13:29:08.000 +0100CB50107BA000,"Truck Driver",status-playable;online-broken,playable,2022-10-20 17:42:33.000 +,"True Fear: Forsaken Souls - Part 1",nvdec;status-playable,playable,2020-12-15 21:39:52.000 +,"TT Isle of Man",nvdec;status-playable,playable,2020-06-22 12:25:13.000 +010000400F582000,"TT Isle of Man 2",gpu;status-ingame;nvdec;online-broken,ingame,2022-09-30 22:13:05.000 +,"TTV2",status-playable,playable,2020-11-27 13:21:36.000 +,"Tumblestone",status-playable,playable,2021-01-07 17:49:20.000 +010085500D5F6000,"Turok",gpu;status-ingame,ingame,2021-06-04 13:16:24.000 +0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;status-ingame;vulkan,ingame,2022-09-12 17:50:05.000 +,"Turrican Flashback - 01004B0130C8000",status-playable;audout,playable,2021-08-30 10:07:56.000 +,"TurtlePop: Journey to Freedom",status-playable,playable,2020-06-12 17:45:39.000 +0100047009742000,"Twin Robots: Ultimate Edition",status-playable;nvdec,playable,2022-08-25 14:24:03.000 +010031200E044000,"Two Point Hospital",status-ingame;crash;nvdec,ingame,2022-09-22 11:22:23.000 +,"TY the Tasmanian Tiger",32-bit;crash;nvdec;status-menus,menus,2020-12-17 21:15:00.000 +010073A00C4B2000,"Tyd wag vir Niemand",status-playable,playable,2021-03-02 13:39:53.000 +,"Type:Rider",status-playable,playable,2021-01-06 13:12:55.000 +,"UBERMOSH:SANTICIDE",status-playable,playable,2020-11-27 15:05:01.000 +,"Ubongo - Deluxe Edition",status-playable,playable,2021-02-04 21:15:01.000 +010079000B56C000,"UglyDolls: An Imperfect Adventure",status-playable;nvdec;UE4,playable,2022-08-25 14:42:16.000 +010048901295C000,"Ultimate Fishing Simulator",status-playable,playable,2021-06-16 18:38:23.000 +,"Ultimate Racing 2D",status-playable,playable,2020-08-05 17:27:09.000 +010045200A1C2000,"Ultimate Runner",status-playable,playable,2022-08-29 12:52:40.000 +01006B601117E000,"Ultimate Ski Jumping 2020",online;status-playable,playable,2021-03-02 20:54:11.000 +01002D4012222000,"Ultra Hat Dimension",services;audio;status-menus,menus,2021-11-18 09:05:20.000 +,"Ultra Hyperball",status-playable,playable,2021-01-06 10:09:55.000 +01007330027EE000,"Ultra Street Fighter II: The Final Challengers",status-playable;ldn-untested,playable,2021-11-25 07:54:58.000 +01006A300BA2C000,"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",status-playable;audout,playable,2023-05-04 17:25:23.000 +0100592005164000,"Unbox: Newbie's Adventure",status-playable;UE4,playable,2022-08-29 13:12:56.000 +01002D900C5E4000,"Uncanny Valley",nvdec;status-playable,playable,2021-06-04 13:28:45.000 +010076F011F54000,"Undead and Beyond",status-playable;nvdec,playable,2022-10-04 09:11:18.000 +01008F3013E4E000,"Under Leaves",status-playable,playable,2021-05-22 18:13:58.000 +010080B00AD66000,"Undertale",status-playable,playable,2022-08-31 17:31:46.000 +01008F80049C6000,"Unepic",status-playable,playable,2024-01-15 17:03:00.000 +,"UnExplored - Unlocked Edition",status-playable,playable,2021-01-06 10:02:16.000 +,"Unhatched",status-playable,playable,2020-12-11 12:11:09.000 +010069401ADB8000,"Unicorn Overlord",status-playable,playable,2024-09-27 14:04:32.000 +,"Unit 4",status-playable,playable,2020-12-16 18:54:13.000 +,"Unknown Fate",slow;status-ingame,ingame,2020-10-15 12:27:42.000 +,"Unlock the King",status-playable,playable,2020-09-01 13:58:27.000 +0100A3E011CB0000,"Unlock the King 2",status-playable,playable,2021-06-15 20:43:55.000 +01005AA00372A000,"UNO",status-playable;nvdec;ldn-untested,playable,2022-07-28 14:49:47.000 +0100E5D00CC0C000,"Unravel TWO",status-playable;nvdec,playable,2024-05-23 15:45:05.000 +,"Unruly Heroes",status-playable,playable,2021-01-07 18:09:31.000 +0100B410138C0000,"Unspottable",status-playable,playable,2022-10-25 19:28:49.000 +,"Untitled Goose Game",status-playable,playable,2020-09-26 13:18:06.000 +0100E49013190000,"Unto The End",gpu;status-ingame,ingame,2022-10-21 11:13:29.000 +,"Urban Flow",services;status-playable,playable,2020-07-05 12:51:47.000 +010054F014016000,"Urban Street Fighting",status-playable,playable,2021-02-20 19:16:36.000 +01001B10068EC000,"Urban Trial Playground",UE4;nvdec;online;status-playable,playable,2021-03-25 20:56:51.000 +0100A2500EB92000,"Urban Trial Tricky",status-playable;nvdec;UE4,playable,2022-12-06 13:07:56.000 +01007C0003AEC000,"Use Your Words",status-menus;nvdec;online-broken,menus,2022-08-29 17:22:10.000 +0100D4300EBF8000,"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",status-nothing;crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44.000 +010024200E00A000,"Uta no☆Prince-sama♪ Repeat Love",status-playable;nvdec,playable,2022-12-09 09:21:51.000 +,"Utopia 9 - A Volatile Vacation",nvdec;status-playable,playable,2020-12-16 17:06:42.000 +010064400B138000,"V-Rally 4",gpu;nvdec;status-ingame,ingame,2021-06-07 19:37:31.000 +0100A6700D66E000,"VA-11 HALL-A",status-playable,playable,2021-02-26 15:05:34.000 +,"Vaccine",nvdec;status-playable,playable,2021-01-06 01:02:07.000 +010089700F30C000,"Valfaris",status-playable,playable,2022-09-16 21:37:24.000 +0100CAF00B744000,"Valkyria Chronicles",status-ingame;32-bit;crash;nvdec,ingame,2022-11-23 20:03:32.000 +01005C600AC68000,"Valkyria Chronicles 4",audout;nvdec;status-playable,playable,2021-06-03 18:12:25.000 +0100FBD00B91E000,"Valkyria Chronicles 4 Demo",slow;status-ingame;demo,ingame,2022-08-29 20:39:07.000 +0100E0E00B108000,"Valley",status-playable;nvdec,playable,2022-09-28 19:27:58.000 +010089A0197E4000,"Vampire Survivors",status-ingame,ingame,2024-06-17 09:57:38.000 +01000BD00CE64000,"Vampyr",status-playable;nvdec;UE4,playable,2022-09-16 22:15:51.000 +01007C500D650000,"Vandals",status-playable,playable,2021-01-27 21:45:46.000 +010030F00CA1E000,"Vaporum",nvdec;status-playable,playable,2021-05-28 14:25:33.000 +010045C0109F2000,"VARIABLE BARRICADE NS",status-playable;nvdec,playable,2022-02-26 15:50:13.000 +0100FE200AF48000,"VASARA Collection",nvdec;status-playable,playable,2021-02-28 15:26:10.000 +,"Vasilis",status-playable,playable,2020-09-01 15:05:35.000 +01009CD003A0A000,"Vegas Party",status-playable,playable,2021-04-14 19:21:41.000 +010098400E39E000,"Vektor Wars",status-playable;online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46.000 +01003A8018E60000,"Vengeful Guardian: Moonrider",deadlock;status-boots,boots,2024-03-17 23:35:37.000 +010095B00DBC8000,"Venture Kid",crash;gpu;status-ingame,ingame,2021-04-18 16:33:17.000 +,"Vera Blanc: Full Moon",audio;status-playable,playable,2020-12-17 12:09:30.000 +0100379013A62000,"Very Very Valet",status-playable;nvdec,playable,2022-11-12 15:25:51.000 +01006C8014DDA000,"Very Very Valet Demo - 01006C8014DDA000",status-boots;crash;Needs Update;demo,boots,2022-11-12 15:26:13.000 +010057B00712C000,"Vesta",status-playable;nvdec,playable,2022-08-29 21:03:39.000 +0100E81007A06000,"Victor Vran Overkill Edition",gpu;deadlock;status-ingame;nvdec;opengl,ingame,2022-08-30 11:46:56.000 +01005880063AA000,"Violett",nvdec;status-playable,playable,2021-01-28 13:09:36.000 +010037900CB1C000,"Viviette",status-playable,playable,2021-06-11 15:33:40.000 +0100D010113A8000,"Void Bastards",status-playable,playable,2022-10-15 00:04:19.000 +0100FF7010E7E000,"void* tRrLM(); //Void Terrarium",gpu;status-ingame;Needs Update;regression,ingame,2023-02-10 01:13:25.000 +010078D0175EE000,"void* tRrLM2(); //Void Terrarium 2",status-playable,playable,2023-12-21 11:00:41.000 +,"Volgarr the Viking",status-playable,playable,2020-12-18 15:25:50.000 +0100A7900E79C000,"Volta-X",status-playable;online-broken,playable,2022-10-07 12:20:51.000 +01004D8007368000,"Vostok, Inc.",status-playable,playable,2021-01-27 17:43:59.000 +0100B1E0100A4000,"Voxel Galaxy",status-playable,playable,2022-09-28 22:45:02.000 +0100AFA011068000,"Voxel Pirates",status-playable,playable,2022-09-28 22:55:02.000 +0100BFB00D1F4000,"Voxel Sword",status-playable,playable,2022-08-30 14:57:27.000 +01004E90028A2000,"Vroom in the Night Sky",status-playable;Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29.000 +0100C7C00AE6C000,"VSR: Void Space Racing",status-playable,playable,2021-01-27 14:08:59.000 +,"VtM Coteries of New York",status-playable,playable,2020-10-04 14:55:22.000 +0100B130119D0000,"Waifu Uncovered",status-ingame;crash,ingame,2023-02-27 01:17:46.000 +,"Wanba Warriors",status-playable,playable,2020-10-04 17:56:22.000 +,"Wanderjahr TryAgainOrWalkAway",status-playable,playable,2020-12-16 09:46:04.000 +0100B27010436000,"Wanderlust Travel Stories",status-playable,playable,2021-04-07 16:09:12.000 +0100F8A00853C000,"Wandersong",nvdec;status-playable,playable,2021-06-04 15:33:34.000 +0100D67013910000,"Wanna Survive",status-playable,playable,2022-11-12 21:15:43.000 +01004FA01391A000,"War Of Stealth - assassin",status-playable,playable,2021-05-22 17:34:38.000 +010049500DE56000,"War Tech Fighters",status-playable;nvdec,playable,2022-09-16 22:29:31.000 +010084D00A134000,"War Theatre",gpu;status-ingame,ingame,2021-06-07 19:42:45.000 +0100B6B013B8A000,"War Truck Simulator",status-playable,playable,2021-01-31 11:22:54.000 +,"War-Torn Dreams",crash;status-nothing,nothing,2020-10-21 11:36:16.000 +,"WARBORN",status-playable,playable,2020-06-25 12:36:47.000 +010056901285A000,"Wardogs: Red's Return",status-playable,playable,2022-11-13 15:29:01.000 +01000F0002BB6000,"WarGroove",status-playable;online-broken,playable,2022-08-31 10:30:45.000 +0100C6000EEA8000,"Warhammer 40,000: Mechanicus",nvdec;status-playable,playable,2021-06-13 10:46:38.000 +0100E5600D7B2000,"Warhammer 40,000: Space Wolf",status-playable;online-broken,playable,2022-09-20 21:11:20.000 +010031201307A000,"Warhammer Age of Sigmar: Storm Ground",status-playable;nvdec;online-broken;UE4,playable,2022-11-13 15:46:14.000 +,"Warhammer Quest 2",status-playable,playable,2020-08-04 15:28:03.000 +0100563010E0C000,"WarioWare: Get It Together!",gpu;status-ingame;opengl-backend-bug,ingame,2024-04-23 01:04:56.000 +010045B018EC2000,"Warioware: Move IT!",status-playable,playable,2023-11-14 00:23:51.000 +,"Warlocks 2: God Slayers",status-playable,playable,2020-12-16 17:36:50.000 +,"Warp Shift",nvdec;status-playable,playable,2020-12-15 14:48:48.000 +,"Warparty",nvdec;status-playable,playable,2021-01-27 18:26:32.000 +010032700EAC4000,"WarriOrb",UE4;status-playable,playable,2021-06-17 15:45:14.000 +0100E8500AD58000,"WARRIORS OROCHI 4 ULTIMATE",status-playable;nvdec;online-broken,playable,2024-08-07 01:50:37.000 +,"Wartile Complete Edition",UE4;crash;gpu;status-menus,menus,2020-12-11 21:56:10.000 +010039A00BC64000,"Wasteland 2: Director's Cut",nvdec;status-playable,playable,2021-01-27 13:34:11.000 +,"Water Balloon Mania",status-playable,playable,2020-10-23 20:20:59.000 +0100BA200C378000,"Way of the Passive Fist",gpu;status-ingame,ingame,2021-02-26 21:07:06.000 +,"We should talk.",crash;status-nothing,nothing,2020-08-03 12:32:36.000 +,"Welcome to Hanwell",UE4;crash;status-boots,boots,2020-08-03 11:54:57.000 +0100D7F010B94000,"Welcome to Primrose Lake",status-playable,playable,2022-10-21 11:30:57.000 +,"Wenjia",status-playable,playable,2020-06-08 11:38:30.000 +010031B00A4E8000,"West of Loathing",status-playable,playable,2021-01-28 12:35:19.000 +010038900DFE0000,"What Remains of Edith Finch",slow;status-playable;UE4,playable,2022-08-31 19:57:59.000 +010033600ADE6000,"Wheel of Fortune [010033600ADE6000]",status-boots;crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24.000 +0100DFC00405E000,"Wheels of Aurelia",status-playable,playable,2021-01-27 21:59:25.000 +010027D011C9C000,"Where Angels Cry",gpu;status-ingame;nvdec,ingame,2022-09-30 22:24:47.000 +0100FDB0092B4000,"Where Are My Friends?",status-playable,playable,2022-09-21 14:39:26.000 +,"Where the Bees Make Honey",status-playable,playable,2020-07-15 12:40:49.000 +,"Whipsey and the Lost Atlas",status-playable,playable,2020-06-23 20:24:14.000 +010015A00AF1E000,"Whispering Willows",status-playable;nvdec,playable,2022-09-30 22:33:05.000 +,"Who Wants to Be a Millionaire?",crash;status-nothing,nothing,2020-12-11 20:22:42.000 +0100C7800CA06000,"Widget Satchel",status-playable,playable,2022-09-16 22:41:07.000 +0100CFC00A1D8000,"WILD GUNS Reloaded",status-playable,playable,2021-01-28 12:29:05.000 +010071F00D65A000,"Wilmot's Warehouse",audio;gpu;status-ingame,ingame,2021-06-02 17:24:32.000 +,"WINDJAMMERS",online;status-playable,playable,2020-10-13 11:24:25.000 +010059900BA3C000,"Windscape",status-playable,playable,2022-10-21 11:49:42.000 +,"Windstorm",UE4;gpu;nvdec;status-ingame,ingame,2020-12-22 13:17:48.000 +0100D6800CEAC000,"Windstorm - Ari's Arrival",UE4;status-playable,playable,2021-06-07 19:33:19.000 +,"Wing of Darkness - 010035B012F2000",status-playable;UE4,playable,2022-11-13 16:03:51.000 +0100A4A015FF0000,"Winter Games 2023",deadlock;status-menus,menus,2023-11-07 20:47:36.000 +010012A017F18800,"Witch On The Holy Night",status-playable,playable,2023-03-06 23:28:11.000 +0100454012E32000,"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",status-ingame;crash,ingame,2021-08-08 11:56:18.000 +01002FC00C6D0000,"Witch Thief",status-playable,playable,2021-01-27 18:16:07.000 +010061501904E000,"Witch's Garden",gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24.000 +,"Witcheye",status-playable,playable,2020-12-14 22:56:08.000 +0100522007AAA000,"Wizard of Legend",status-playable,playable,2021-06-07 12:20:46.000 +,"Wizards of Brandel",status-nothing,nothing,2020-10-14 15:52:33.000 +0100C7600E77E000,"Wizards: Wand of Epicosity",status-playable,playable,2022-10-07 12:32:06.000 +01009040091E0000,"Wolfenstein II The New Colossus",gpu;status-ingame,ingame,2024-04-05 05:39:46.000 +01003BD00CAAE000,"Wolfenstein: Youngblood",status-boots;online-broken,boots,2024-07-12 23:49:20.000 +,"Wonder Blade",status-playable,playable,2020-12-11 17:55:31.000 +0100B49016FF0000,"Wonder Boy Anniversary Collection",deadlock;status-nothing,nothing,2023-04-20 16:01:48.000 +0100EB2012E36000,"Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ]",status-nothing;crash,nothing,2021-11-03 08:45:06.000 +0100A6300150C000,"Wonder Boy: The Dragon's Trap",status-playable,playable,2021-06-25 04:53:21.000 +0100F5D00C812000,"Wondershot",status-playable,playable,2022-08-31 21:05:31.000 +,"Woodle Tree 2",gpu;slow;status-ingame,ingame,2020-06-04 18:44:00.000 +0100288012966000,"Woodsalt",status-playable,playable,2021-04-06 17:01:48.000 +,"Wordify",status-playable,playable,2020-10-03 09:01:07.000 +,"World Conqueror X",status-playable,playable,2020-12-22 16:10:29.000 +01008E9007064000,"World Neverland",status-playable,playable,2021-01-28 17:44:23.000 +,"World of Final Fantasy Maxima",status-playable,playable,2020-06-07 13:57:23.000 +010009E001D90000,"World of Goo",gpu;status-boots;32-bit;crash;regression,boots,2024-04-12 05:52:14.000 +010061F01DB7C800,"World of Goo 2",status-boots,boots,2024-08-08 22:52:49.000 +,"World Soccer Pinball",status-playable,playable,2021-01-06 00:37:02.000 +,"Worldend Syndrome",status-playable,playable,2021-01-03 14:16:32.000 +010000301025A000,"Worlds of Magic: Planar Conquest",status-playable,playable,2021-06-12 12:51:28.000 +01009CD012CC0000,"Worm Jazz",gpu;services;status-ingame;UE4;regression,ingame,2021-11-10 10:33:04.000 +01001AE005166000,"Worms W.M.D",gpu;status-boots;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59.000 +010037500C4DE000,"Worse Than Death",status-playable,playable,2021-06-11 16:05:40.000 +01006F100EB16000,"Woven",nvdec;status-playable,playable,2021-06-02 13:41:08.000 +010087800DCEA000,"WRC 8 FIA World Rally Championship",status-playable;nvdec,playable,2022-09-16 23:03:36.000 +01001A0011798000,"WRC 9 The Official Game",gpu;slow;status-ingame;nvdec,ingame,2022-10-25 19:47:39.000 +0100DC0012E48000,"Wreckfest",status-playable,playable,2023-02-12 16:13:00.000 +0100C5D00EDB8000,"Wreckin' Ball Adventure",status-playable;UE4,playable,2022-09-12 18:56:28.000 +010033700418A000,"Wulverblade",nvdec;status-playable,playable,2021-01-27 22:29:05.000 +01001C400482C000,"Wunderling",audio;status-ingame;crash,ingame,2022-09-10 13:20:12.000 +,"Wurroom",status-playable,playable,2020-10-07 22:46:21.000 +010081700EDF4000,"WWE 2K Battlegrounds",status-playable;nvdec;online-broken;UE4,playable,2022-10-07 12:44:40.000 +010009800203E000,"WWE 2K18",status-playable;nvdec,playable,2023-10-21 17:22:01.000 +,"X-Morph: Defense",status-playable,playable,2020-06-22 11:05:31.000 +0100D0B00FB74000,"XCOM 2 Collection",gpu;status-ingame;crash,ingame,2022-10-04 09:38:30.000 +0100CC9015360000,"XEL",gpu;status-ingame,ingame,2022-10-03 10:19:39.000 +0100E95004038000,"Xenoblade Chronicles 2",deadlock;status-ingame;amd-vendor-bug,ingame,2024-03-28 14:31:41.000 +0100C9F009F7A000,"Xenoblade Chronicles 2: Torna - The Golden Country",slow;status-playable;nvdec,playable,2023-01-28 16:47:28.000 +010074F013262000,"Xenoblade Chronicles 3",gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44.000 +0100FF500E34A000,"Xenoblade Chronicles Definitive Edition",status-playable;nvdec,playable,2024-05-04 20:12:41.000 +010028600BA16000,"Xenon Racer",status-playable;nvdec;UE4,playable,2022-08-31 22:05:30.000 +010064200C324000,"Xenon Valkyrie+",status-playable,playable,2021-06-07 20:25:53.000 +0100928005BD2000,"Xenoraid",status-playable,playable,2022-09-03 13:01:10.000 +01005B5009364000,"Xeodrifter",status-playable,playable,2022-09-03 13:18:39.000 +01006FB00DB02000,"Yaga",status-playable;nvdec,playable,2022-09-16 23:17:17.000 +,"YesterMorrow",crash;status-ingame,ingame,2020-12-17 17:15:25.000 +,"Yet Another Zombie Defense HD",status-playable,playable,2021-01-06 00:18:39.000 +,"YGGDRA UNION We’ll Never Fight Alone",status-playable,playable,2020-04-03 02:20:47.000 +0100634008266000,"YIIK: A Postmodern RPG",status-playable,playable,2021-01-28 13:38:37.000 +0100C0000CEEA000,"Yo kai watch 1 for Nintendo Switch",gpu;status-ingame;opengl,ingame,2024-05-28 11:11:49.000 +010086C00AF7C000,"Yo-Kai Watch 4++",status-playable,playable,2024-06-18 20:21:44.000 +010002D00632E000,"Yoku's Island Express",status-playable;nvdec,playable,2022-09-03 13:59:02.000 +0100F47016F26000,"Yomawari 3",status-playable,playable,2022-05-10 08:26:51.000 +010012F00B6F2000,"Yomawari: The Long Night Collection",status-playable,playable,2022-09-03 14:36:59.000 +0100CC600ABB2000,"Yonder: The Cloud Catcher Chronicles",status-playable,playable,2021-01-28 14:06:25.000 +0100BE50042F6000,"Yono and the Celestial Elephants",status-playable,playable,2021-01-28 18:23:58.000 +0100F110029C8000,"Yooka-Laylee",status-playable,playable,2021-01-28 14:21:45.000 +010022F00DA66000,"Yooka-Laylee and the Impossible Lair",status-playable,playable,2021-03-05 17:32:21.000 +01006000040C2000,"Yoshi's Crafted World",gpu;status-ingame;audout,ingame,2021-08-30 13:25:51.000 +,"Yoshi's Crafted World Demo Version",gpu;status-boots;status-ingame,boots,2020-12-16 14:57:40.000 +,"Yoshiwara Higanbana Kuon no Chigiri",nvdec;status-playable,playable,2020-10-17 19:14:46.000 +01003A400C3DA800,"YouTube",status-playable,playable,2024-06-08 05:24:10.000 +00100A7700CCAA40,"Youtubers Life00",status-playable;nvdec,playable,2022-09-03 14:56:19.000 +0100E390124D8000,"Ys IX: Monstrum Nox",status-playable,playable,2022-06-12 04:14:42.000 +0100F90010882000,"Ys Origin",status-playable;nvdec,playable,2024-04-17 05:07:33.000 +01007F200B0C0000,"Ys VIII: Lacrimosa of Dana",status-playable;nvdec,playable,2023-08-05 09:26:41.000 +010022400BE5A000,"Yu-Gi-Oh! Legacy of the Duelist: Link Evolution!",status-playable,playable,2024-09-27 21:48:43.000 +01002D60188DE000,"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",status-ingame;crash,ingame,2023-03-17 01:54:01.000 +010037D00DBDC000,"YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD.",nvdec;status-playable,playable,2021-01-26 17:03:52.000 +0100B56011502000,"Yumeutsutsu Re:After",status-playable,playable,2022-11-20 16:09:06.000 +,"Yunohana Spring! - Mellow Times -",audio;crash;status-menus,menus,2020-09-27 19:27:40.000 +,"Yuppie Psycho: Executive Edition",crash;status-ingame,ingame,2020-12-11 10:37:06.000 +0100FC900963E000,"Yuri",status-playable,playable,2021-06-11 13:08:50.000 +010092400A678000,"Zaccaria Pinball",status-playable;online-broken,playable,2022-09-03 15:44:28.000 +,"Zarvot - 0100E7900C40000",status-playable,playable,2021-01-28 13:51:36.000 +,"ZenChess",status-playable,playable,2020-07-01 22:28:27.000 +,"Zenge",status-playable,playable,2020-10-22 13:23:57.000 +0100057011E50000,"Zengeon",services-horizon;status-boots;crash,boots,2024-04-29 15:43:07.000 +0100AAC00E692000,"Zenith",status-playable,playable,2022-09-17 09:57:02.000 +,"ZERO GUNNER 2",status-playable,playable,2021-01-04 20:17:14.000 +01004B001058C000,"Zero Strain",services;status-menus;UE4,menus,2021-11-10 07:48:32.000 +,"Zettai kaikyu gakuen",gpu;nvdec;status-ingame,ingame,2020-08-25 15:15:54.000 +0100D7B013DD0000,"Ziggy The Chaser",status-playable,playable,2021-02-04 20:34:27.000 +010086700EF16000,"ZikSquare",gpu;status-ingame,ingame,2021-11-06 02:02:48.000 +010069C0123D8000,"Zoids Wild Blast Unleashed",status-playable;nvdec,playable,2022-10-15 11:26:59.000 +,"Zombie Army Trilogy",ldn-untested;online;status-playable,playable,2020-12-16 12:02:28.000 +,"Zombie Driver",nvdec;status-playable,playable,2020-12-14 23:15:10.000 +,"ZOMBIE GOLD RUSH",online;status-playable,playable,2020-09-24 12:56:08.000 +,"Zombie's Cool",status-playable,playable,2020-12-17 12:41:26.000 +01000E5800D32C00,"Zombieland: Double Tap - Road Trip0",status-playable,playable,2022-09-17 10:08:45.000 +,"Zombillie",status-playable,playable,2020-07-23 17:42:23.000 +01001EE00A6B0000,"Zotrix: Solar Division",status-playable,playable,2021-06-07 20:34:05.000 +,"この世の果てで恋を唄う少女YU-NO",audio;status-ingame,ingame,2021-01-22 07:00:16.000 +,"スーパーファミコン Nintendo Switch Online",slow;status-ingame,ingame,2020-03-14 05:48:38.000 +01000BB01CB8A000,"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",status-nothing,nothing,2024-09-28 07:03:14.000 +010065500B218000,"メモリーズオフ - Innocent Fille",status-playable,playable,2022-12-02 17:36:48.000 +010032400E700000,"二ノ国 白き聖灰の女王",services;status-menus;32-bit,menus,2023-04-16 17:11:06.000 +0100F3100DA46000,"初音ミク Project DIVA MEGA39's",audio;status-playable;loader-allocator,playable,2022-07-29 11:45:52.000 +0100BF401AF9C000,"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",slow;status-playable,playable,2023-12-31 14:37:17.000 +0100AFA01750C000,"死神と少女/Shinigami to Shoujo",gpu;status-ingame;Incomplete,ingame,2024-03-22 01:06:45.000 +01001BA01EBFC000,"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",services-horizon;status-nothing,nothing,2024-09-28 12:22:55.000 +0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",status-ingame;crash,ingame,2023-04-25 19:43:52.000 +01009FB016286000,"索尼克:起源 / Sonic Origins",status-ingame;crash,ingame,2024-06-02 07:20:15.000 +0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",status-ingame;crash,ingame,2024-02-12 20:58:31.000 +010064801a01c000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",status-nothing;crash,nothing,2023-10-30 22:37:40.000 +010005501E68C000,"逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection)",status-playable,playable,2024-09-19 16:38:05.000 +010020D01B890000,"逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy)",status-playable,playable,2024-06-21 21:54:27.000 +0100309016E7A000,"鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",status-playable;UE4,playable,2024-08-08 04:51:49.000 \ No newline at end of file -- 2.47.1 From f580521e998ab96e2dbedd60c7ad98be7b7ee4df Mon Sep 17 00:00:00 2001 From: Vita Chumakova Date: Thu, 9 Jan 2025 23:18:27 +0400 Subject: [PATCH 310/722] Update game data in the compatibility database (#507) The entries were matched with the game database from https://github.com/blawar/titledb/blob/master/US.en.json, allowing to fill missing title IDs and fix game names. --- docs/compatibility.csv | 6857 ++++++++++++++++++++-------------------- 1 file changed, 3424 insertions(+), 3433 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 94ff62ab3..b95e93072 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -1,3433 +1,3424 @@ -"title_id","game_name","labels","status","last_updated" -010099F00EF3E000,"-KLAUS-",nvdec;status-playable,playable,2020-06-27 13:27:30.000 -0100BA9014A02000,".hack//G.U. Last Recode",deadlock;status-boots,boots,2022-03-12 19:15:47.000 -01001E500F7FC000,"#Funtime",status-playable,playable,2020-12-10 16:54:35.000 -01000E50134A4000,"#Halloween, Super Puzzles Dream",nvdec;status-playable,playable,2020-12-10 20:43:58.000 -01004D100C510000,"#KillAllZombies",slow;status-playable,playable,2020-12-16 01:50:25.000 -0100325012C12000,"#NoLimitFantasy, Super Puzzles Dream",nvdec;status-playable,playable,2020-12-12 17:21:32.000 -01005D400E5C8000,"#RaceDieRun",status-playable,playable,2020-07-04 20:23:16.000 -01003DB011AE8000,"#womenUp, Super Puzzles Dream",status-playable,playable,2020-12-12 16:57:25.000 -0100D87012A14000,"#womenUp, Super Puzzles Dream Demo",nvdec;status-playable,playable,2021-02-09 00:03:31.000 -01000320000CC000,"1-2-Switch",services;status-playable,playable,2022-02-18 14:44:03.000 -01004D1007926000,"10 Second Run Returns",gpu;status-ingame,ingame,2022-07-17 13:06:18.000 -0100DC000A472000,"10 Second Run RETURNS Demo",gpu;status-ingame,ingame,2021-02-09 00:17:18.000 -0100D82015774000,"112 Operator",status-playable;nvdec,playable,2022-11-13 22:42:50.000 -010051E012302000,"112th Seed",status-playable,playable,2020-10-03 10:32:38.000 -01007F600D1B8000,"12 is Better Than 6",status-playable,playable,2021-02-22 16:10:12.000 -0100B1A010014000,"12 Labours of Hercules II: The Cretan Bull",cpu;status-nothing;32-bit;crash,nothing,2022-12-07 13:43:10.000 -0100A840047C2000,"12 orbits",status-playable,playable,2020-05-28 16:13:26.000 -01003FC01670C000,"13 Sentinels Aegis Rim",slow;status-ingame,ingame,2024-06-10 20:33:38.000 -0100C54015002000,"13 Sentinels Aegis Rim Demo",status-playable;demo,playable,2022-04-13 14:15:48.000 -01007E600EEE6000,"140",status-playable,playable,2020-08-05 20:01:33.000 -0100B94013D28000,"16-Bit Soccer Demo",status-playable,playable,2021-02-09 00:23:07.000 -01005CA0099AA000,"1917 - The Alien Invasion DX",status-playable,playable,2021-01-08 22:11:16.000 -0100829010F4A000,"1971 PROJECT HELIOS",status-playable,playable,2021-04-14 13:50:19.000 -0100D1000B18C000,"1979 Revolution: Black Friday",nvdec;status-playable,playable,2021-02-21 21:03:43.000 -01007BB00FC8A000,"198X",status-playable,playable,2020-08-07 13:24:38.000 -010075601150A000,"1993 Shenandoah",status-playable,playable,2020-10-24 13:55:42.000 -0100148012550000,"1993 Shenandoah Demo",status-playable,playable,2021-02-09 00:43:43.000 -010096500EA94000,"2048 Battles",status-playable,playable,2020-12-12 14:21:25.000 -010024C0067C4000,"2064: Read Only Memories INTEGRAL",deadlock;status-menus,menus,2020-05-28 16:53:58.000 -0100749009844000,"20XX",gpu;status-ingame,ingame,2023-08-14 09:41:44.000 -01007550131EE000,"2urvive",status-playable,playable,2022-11-17 13:49:37.000 -0100E20012886000,"2weistein – The Curse of the Red Dragon",status-playable;nvdec;UE4,playable,2022-11-18 14:47:07.000 -0100DAC013D0A000,"30 in 1 game collection vol. 2",status-playable;online-broken,playable,2022-10-15 17:22:27.000 -010056D00E234000,"30-in-1 Game Collection",status-playable;online-broken,playable,2022-10-15 17:47:09.000 -0100FB5010D2E000,"3000th Duel",status-playable,playable,2022-09-21 17:12:08.000 -01003670066DE000,"36 Fragments of Midnight",status-playable,playable,2020-05-28 15:12:59.000 -0100AF400C4CE000,"39 Days to Mars",status-playable,playable,2021-02-21 22:12:46.000 -010010C013F2A000,"3D Arcade Fishing",status-playable,playable,2022-10-25 21:50:51.000 -,"3D MiniGolf",status-playable,playable,2021-01-06 09:22:11.000 -,"4x4 Dirt Track",status-playable,playable,2020-12-12 21:41:42.000 -010010100FF14000,"60 Parsecs!",status-playable,playable,2022-09-17 11:01:17.000 -0100969005E98000,"60 Seconds!",services;status-ingame,ingame,2021-11-30 01:04:14.000 -,"6180 the moon",status-playable,playable,2020-05-28 15:39:24.000 -,"64",status-playable,playable,2020-12-12 21:31:58.000 -,"7 Billion Humans",32-bit;status-playable,playable,2020-12-17 21:04:58.000 -,"7th Sector",nvdec;status-playable,playable,2020-08-10 14:22:14.000 -,"8-BIT ADVENTURE STEINS;GATE",audio;status-ingame,ingame,2020-01-12 15:05:06.000 -,"80 Days",status-playable,playable,2020-06-22 21:43:01.000 -,"80's OVERDRIVE",status-playable,playable,2020-10-16 14:33:32.000 -,"88 Heroes",status-playable,playable,2020-05-28 14:13:02.000 -,"9 Monkeys of Shaolin",UE4;gpu;slow;status-ingame,ingame,2020-11-17 11:58:43.000 -0100C5F012E3E000,"9 Monkeys of Shaolin Demo",UE4;gpu;nvdec;status-ingame,ingame,2021-02-09 01:03:30.000 -,"911 Operator Deluxe Edition",status-playable,playable,2020-07-14 13:57:44.000 -,"99Vidas",online;status-playable,playable,2020-10-29 13:00:40.000 -010023500C2F0000,"99Vidas Demo",status-playable,playable,2021-02-09 12:51:31.000 -,"9th Dawn III",status-playable,playable,2020-12-12 22:27:27.000 -010096A00CC80000,"A Ch'ti Bundle",status-playable;nvdec,playable,2022-10-04 12:48:44.000 -,"A Dark Room",gpu;status-ingame,ingame,2020-12-14 16:14:28.000 -0100582012B90000,"A Duel Hand Disaster Trackher: DEMO",crash;demo;nvdec;status-ingame,ingame,2021-03-24 18:45:27.000 -010026B006802000,"A Duel Hand Disaster: Trackher",status-playable;nvdec;online-working,playable,2022-09-04 14:24:55.000 -,"A Frog Game",status-playable,playable,2020-12-14 16:09:53.000 -010056E00853A000,"A Hat In Time",status-playable,playable,2024-06-25 19:52:44.000 -01009E1011EC4000,"A HERO AND A GARDEN",status-playable,playable,2022-12-05 16:37:47.000 -01005EF00CFDA000,"A Knight's Quest",status-playable;UE4,playable,2022-09-12 20:44:20.000 -01008DD006C52000,"A magical high school girl",status-playable,playable,2022-07-19 14:40:50.000 -,"A Short Hike",status-playable,playable,2020-10-15 00:19:58.000 -,"A Sound Plan",crash;status-boots,boots,2020-12-14 16:46:21.000 -01007DD011C4A000,"A Summer with the Shiba Inu",status-playable,playable,2021-06-10 20:51:16.000 -0100A3E010E56000,"A-Train: All Aboard! Tourism",nvdec;status-playable,playable,2021-04-06 17:48:19.000 -010097A00CC0A000,"Aaero",status-playable;nvdec,playable,2022-07-19 14:49:55.000 -,"Aborigenus",status-playable,playable,2020-08-05 19:47:24.000 -,"Absolute Drift",status-playable,playable,2020-12-10 14:02:44.000 -010047F012BE2000,"Abyss of The Sacrifice",status-playable;nvdec,playable,2022-10-21 13:56:28.000 -0100C1300BBC6000,"ABZU",status-playable;UE4,playable,2022-07-19 15:02:52.000 -01003C400871E000,"ACA NEOGEO 2020 SUPER BASEBALL",online;status-playable,playable,2021-04-12 13:23:51.000 -0100FC000AFC6000,"ACA NEOGEO 3 COUNT BOUT",online;status-playable,playable,2021-04-12 13:16:42.000 -0100AC40038F4000,"ACA NEOGEO AERO FIGHTERS 2",online;status-playable,playable,2021-04-08 15:44:09.000 -0100B91008780000,"ACA NEOGEO AERO FIGHTERS 3",online;status-playable,playable,2021-04-12 13:11:17.000 -0100B4800AFBA000,"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",online;status-playable,playable,2021-04-01 22:48:01.000 -01003FE00A2F6000,"ACA NEOGEO BASEBALL STARS PROFESSIONAL",online;status-playable,playable,2021-04-01 21:23:05.000 -,"ACA NEOGEO BLAZING STAR",crash;services;status-menus,menus,2020-05-26 17:29:02.000 -0100D2400AFB0000,"ACA NEOGEO CROSSED SWORDS",online;status-playable,playable,2021-04-01 20:42:59.000 -0100EE6002B48000,"ACA NEOGEO FATAL FURY",online;status-playable,playable,2021-04-01 20:36:23.000 -,"ACA NEOGEO FOOTBALL FRENZY",status-playable,playable,2021-03-29 20:12:12.000 -0100CB2001DB8000,"ACA NEOGEO GAROU: MARK OF THE WOLVES",online;status-playable,playable,2021-04-01 20:31:10.000 -01005D700A2F8000,"ACA NEOGEO GHOST PILOTS",online;status-playable,playable,2021-04-01 20:26:45.000 -01000D10038E6000,"ACA NEOGEO LAST RESORT",online;status-playable,playable,2021-04-01 19:51:22.000 -,"ACA NEOGEO LEAGUE BOWLING",crash;services;status-menus,menus,2020-05-26 17:11:04.000 -,"ACA NEOGEO MAGICAL DROP II",crash;services;status-menus,menus,2020-05-26 16:48:24.000 -01007920038F6000,"ACA NEOGEO MAGICIAN LORD",online;status-playable,playable,2021-04-01 19:33:26.000 -0100EBE002B3E000,"ACA NEOGEO METAL SLUG",status-playable,playable,2021-02-21 13:56:48.000 -010086300486E000,"ACA NEOGEO METAL SLUG 2",online;status-playable,playable,2021-04-01 19:25:52.000 -,"ACA NEOGEO METAL SLUG 3",crash;services;status-menus,menus,2020-05-26 16:32:45.000 -01009CE00AFAE000,"ACA NEOGEO METAL SLUG 4",online;status-playable,playable,2021-04-01 18:12:18.000 -,"ACA NEOGEO Metal Slug X",crash;services;status-menus,menus,2020-05-26 14:07:20.000 -010038F00AFA0000,"ACA NEOGEO Money Puzzle Exchanger",online;status-playable,playable,2021-04-01 17:59:56.000 -01002E70032E8000,"ACA NEOGEO NEO TURF MASTERS",status-playable,playable,2021-02-21 15:12:01.000 -010052A00A306000,"ACA NEOGEO NINJA COMBAT",status-playable,playable,2021-03-29 21:17:28.000 -01007E800AFB6000,"ACA NEOGEO NINJA COMMANDO",online;status-playable,playable,2021-04-01 17:28:18.000 -01003A5001DBA000,"ACA NEOGEO OVER TOP",status-playable,playable,2021-02-21 13:16:25.000 -010088500878C000,"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",online;status-playable,playable,2021-04-01 17:18:27.000 -01005C9002B42000,"ACA NEOGEO SAMURAI SHODOWN",online;status-playable,playable,2021-04-01 17:11:35.000 -010047F001DBC000,"ACA NEOGEO SAMURAI SHODOWN IV",online;status-playable,playable,2021-04-12 12:58:54.000 -010049F00AFE8000,"ACA NEOGEO SAMURAI SHODOWN SPECIAL V",online;status-playable,playable,2021-04-10 18:07:13.000 -01009B300872A000,"ACA NEOGEO SENGOKU 2",online;status-playable,playable,2021-04-10 17:36:44.000 -01008D000877C000,"ACA NEOGEO SENGOKU 3",online;status-playable,playable,2021-04-10 16:11:53.000 -,"ACA NEOGEO SHOCK TROOPERS",crash;services;status-menus,menus,2020-05-26 15:29:34.000 -01007D1004DBA000,"ACA NEOGEO SPIN MASTER",online;status-playable,playable,2021-04-10 15:50:19.000 -010055A00A300000,"ACA NEOGEO SUPER SIDEKICKS 2",online;status-playable,playable,2021-04-10 16:05:58.000 -0100A4D00A308000,"ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY",online;status-playable,playable,2021-04-10 15:39:22.000 -,"ACA NEOGEO THE KING OF FIGHTERS '94",crash;services;status-menus,menus,2020-05-26 15:03:44.000 -01009DC001DB6000,"ACA NEOGEO THE KING OF FIGHTERS '95",status-playable,playable,2021-03-29 20:27:35.000 -01006F0004FB4000,"ACA NEOGEO THE KING OF FIGHTERS '96",online;status-playable,playable,2021-04-10 14:49:10.000 -0100170008728000,"ACA NEOGEO THE KING OF FIGHTERS '97",online;status-playable,playable,2021-04-10 14:43:27.000 -,"ACA NEOGEO THE KING OF FIGHTERS '98",crash;services;status-menus,menus,2020-05-26 14:54:20.000 -0100583001DCA000,"ACA NEOGEO THE KING OF FIGHTERS '99",online;status-playable,playable,2021-04-10 14:36:56.000 -0100B97002B44000,"ACA NEOGEO THE KING OF FIGHTERS 2000",online;status-playable,playable,2021-04-10 15:24:35.000 -010048200AFC2000,"ACA NEOGEO THE KING OF FIGHTERS 2001",online;status-playable,playable,2021-04-10 15:16:23.000 -0100CFD00AFDE000,"ACA NEOGEO THE KING OF FIGHTERS 2002",online;status-playable,playable,2021-04-10 15:01:55.000 -0100EF100AFE6000,"ACA NEOGEO THE KING OF FIGHTERS 2003",online;status-playable,playable,2021-04-10 14:54:31.000 -0100699008792000,"ACA NEOGEO THE LAST BLADE 2",online;status-playable,playable,2021-04-10 14:31:54.000 -0100F7F00AFA2000,"ACA NEOGEO THE SUPER SPY",online;status-playable,playable,2021-04-10 14:26:33.000 -0100CEF001DC0000,"ACA NEOGEO WAKU WAKU 7",online;status-playable,playable,2021-04-10 14:20:52.000 -,"ACA NEOGEO WORLD HEROES PERFECT",crash;services;status-menus,menus,2020-05-26 14:14:36.000 -,"ACA NEOGEO ZUPAPA!",online;status-playable,playable,2021-03-25 20:07:33.000 -0100A9900CB5C000,"Access Denied",status-playable,playable,2022-07-19 15:25:10.000 -01007C50132C8000,"Ace Angler: Fishing Spirits",status-menus;crash,menus,2023-03-03 03:21:39.000 -010033401E68E000,"Ace Attorney Investigations Collection DEMO",status-playable,playable,2024-09-07 06:16:42.000 -010039301B7E0000,"Ace Combat 7 - Skies Unknown Deluxe Edition",gpu;status-ingame;UE4,ingame,2024-09-27 14:31:43.000 -0100FF1004D56000,"Ace of Seafood",status-playable,playable,2022-07-19 15:32:25.000 -,"Aces of the Luftwaffe Squadron",nvdec;slow;status-playable,playable,2020-05-27 12:29:42.000 -010054300D822000,"Aces of the Luftwaffe Squadron Demo",nvdec;status-playable,playable,2021-02-09 13:12:28.000 -0100DBC0081A4000,"ACORN Tactics",status-playable,playable,2021-02-22 12:57:40.000 -,"Across the Grooves",status-playable,playable,2020-06-27 12:29:51.000 -,"Acthung! Cthulhu Tactics",status-playable,playable,2020-12-14 18:40:27.000 -010039A010DA0000,"Active Neurons",status-playable,playable,2021-01-27 21:31:21.000 -01000D1011EF0000,"Active Neurons 2",status-playable,playable,2022-10-07 16:21:42.000 -010031C0122B0000,"Active Neurons 2 Demo",status-playable,playable,2021-02-09 13:40:21.000 -0100EE1013E12000,"Active Neurons 3",status-playable,playable,2021-03-24 12:20:20.000 -,"Actual Sunlight",gpu;status-ingame,ingame,2020-12-14 17:18:41.000 -0100C0C0040E4000,"Adam's Venture: Origins",status-playable,playable,2021-03-04 18:43:57.000 -,"Adrenaline Rush - Miami Drive",status-playable,playable,2020-12-12 22:49:50.000 -0100300012F2A000,"Advance Wars 1+2: Re-Boot Camp",status-playable,playable,2024-01-30 18:19:44.000 -,"Adventure Llama",status-playable,playable,2020-12-14 19:32:24.000 -,"Adventure Pinball Bundle",slow;status-playable,playable,2020-12-14 20:31:53.000 -01003B400A00A000,"Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",status-playable;nvdec,playable,2022-09-17 11:07:56.000 -,"Adventures of Chris",status-playable,playable,2020-12-12 23:00:02.000 -0100A0A0136E8000,"Adventures of Chris Demo",status-playable,playable,2021-02-09 13:49:21.000 -,"Adventures of Pip",nvdec;status-playable,playable,2020-12-12 22:11:55.000 -01008C901266E000,"ADVERSE",UE4;status-playable,playable,2021-04-26 14:32:51.000 -010064500AF72000,"Aegis Defenders Demo",status-playable,playable,2021-02-09 14:04:17.000 -01008E6006502000,"Aegis Defenders0",status-playable,playable,2021-02-22 13:29:33.000 -,"Aeolis Tournament",online;status-playable,playable,2020-12-12 22:02:14.000 -01006710122CE000,"Aeolis Tournament Demo",nvdec;status-playable,playable,2021-02-09 14:22:30.000 -0100A0400DDE0000,"AER - Memories of Old",nvdec;status-playable,playable,2021-03-05 18:43:43.000 -0100E9B013D4A000,"Aerial Knight's Never Yield",status-playable,playable,2022-10-25 22:05:00.000 -0100875011D0C000,"Aery",status-playable,playable,2021-03-07 15:25:51.000 -010018E012914000,"Aery - Sky Castle",status-playable,playable,2022-10-21 17:58:49.000 -0100DF8014056000,"Aery - A Journey Beyond Time",status-playable,playable,2021-04-05 15:52:25.000 -0100087012810000,"Aery - Broken Memories",status-playable,playable,2022-10-04 13:11:52.000 -,"Aery - Calm Mind - 0100A801539000",status-playable,playable,2022-11-14 14:26:58.000 -0100B1C00949A000,"AeternoBlade Demo Version",nvdec;status-playable,playable,2021-02-09 14:39:26.000 -,"AeternoBlade I",nvdec;status-playable,playable,2020-12-14 20:06:48.000 -01009D100EA28000,"AeternoBlade II",status-playable;online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18.000 -,"AeternoBlade II Demo Version",gpu;nvdec;status-ingame,ingame,2021-02-09 15:10:19.000 -01001B400D334000,"AFL Evolution 2",slow;status-playable;online-broken;UE4,playable,2022-12-07 12:45:56.000 -0100DB100BBCE000,"Afterparty",status-playable,playable,2022-09-22 12:23:19.000 -,"Agatha Christie - The ABC Murders",status-playable,playable,2020-10-27 17:08:23.000 -,"Agatha Knife",status-playable,playable,2020-05-28 12:37:58.000 -,"Agent A: A puzzle in disguise",status-playable,playable,2020-11-16 22:53:27.000 -01008E8012C02000,"Agent A: A puzzle in disguise (Demo)",status-playable,playable,2021-02-09 18:30:41.000 -0100E4700E040000,"Ages of Mages: the Last Keeper",status-playable;vulkan-backend-bug,playable,2022-10-04 11:44:05.000 -010004D00A9C0000,"Aggelos",gpu;status-ingame,ingame,2023-02-19 13:24:23.000 -,"Agony",UE4;crash;status-boots,boots,2020-07-10 16:21:18.000 -010089B00D09C000,"Ai: the Somnium Files",status-playable;nvdec,playable,2022-09-04 14:45:06.000 -0100C1700FB34000,"AI: The Somnium Files Demo",nvdec;status-playable,playable,2021-02-10 12:52:33.000 -,"Ailment",status-playable,playable,2020-12-12 22:30:41.000 -,"Air Conflicts: Pacific Carriers",status-playable,playable,2021-01-04 10:52:50.000 -,"Air Hockey",status-playable,playable,2020-05-28 16:44:37.000 -,"Air Missions: HIND",status-playable,playable,2020-12-13 10:16:45.000 -0100E95011FDC000,"Aircraft Evolution",nvdec;status-playable,playable,2021-06-14 13:30:18.000 -010010A00DB72000,"Airfield Mania Demo",services;status-boots;demo,boots,2022-04-10 03:43:02.000 -01003DD00BFEE000,"AIRHEART - Tales of Broken Wings",status-playable,playable,2021-02-26 15:20:27.000 -01007F100DE52000,"Akane",status-playable;nvdec,playable,2022-07-21 00:12:18.000 -,"Akash Path of the Five",gpu;nvdec;status-ingame,ingame,2020-12-14 22:33:12.000 -010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",status-playable,playable,2021-02-22 14:39:35.000 -,"Akuarium",slow;status-playable,playable,2020-12-12 23:43:36.000 -,"Akuto",status-playable,playable,2020-08-04 19:43:27.000 -0100F5400AB6C000,"Alchemic Jousts",gpu;status-ingame,ingame,2022-12-08 15:06:28.000 -,"Alchemist's Castle",status-playable,playable,2020-12-12 23:54:08.000 -,"Alder's Blood",status-playable,playable,2020-08-28 15:15:23.000 -01004510110C4000,"Alder's Blood Prologue",crash;status-ingame,ingame,2021-02-09 19:03:03.000 -01000E000EEF8000,"Aldred - Knight of Honor",services;status-playable,playable,2021-11-30 01:49:17.000 -010025D01221A000,"Alex Kidd in Miracle World DX",status-playable,playable,2022-11-14 15:01:34.000 -,"Alien Cruise",status-playable,playable,2020-08-12 13:56:05.000 -,"Alien Escape",status-playable,playable,2020-06-03 23:43:18.000 -010075D00E8BA000,"Alien: Isolation",status-playable;nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41.000 -0100CBD012FB6000,"All Walls Must Fall",status-playable;UE4,playable,2022-10-15 19:16:30.000 -0100C1F00A9B8000,"All-Star Fruit Racing",status-playable;nvdec;UE4,playable,2022-07-21 00:35:37.000 -0100AC501122A000,"Alluris",gpu;status-ingame;UE4,ingame,2023-08-02 23:13:50.000 -,"Almightree the Last Dreamer",slow;status-playable,playable,2020-12-15 13:59:03.000 -,"Along the Edge",status-playable,playable,2020-11-18 15:00:07.000 -,"Alpaca Ball: Allstars",nvdec;status-playable,playable,2020-12-11 12:26:29.000 -,"ALPHA",status-playable,playable,2020-12-13 12:17:45.000 -,"Alphaset by POWGI",status-playable,playable,2020-12-15 15:15:15.000 -,"Alt-Frequencies",status-playable,playable,2020-12-15 19:01:33.000 -,"Alteric",status-playable,playable,2020-11-08 13:53:22.000 -,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",status-playable,playable,2020-08-31 14:17:42.000 -0100A8A00D27E000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",status-playable,playable,2021-02-10 13:33:59.000 -010045201487C000,"Aluna: Sentinel of the Shards",status-playable;nvdec,playable,2022-10-25 22:17:03.000 -,"Alwa's Awakening",status-playable,playable,2020-10-13 11:52:01.000 -,"Alwa's Legacy",status-playable,playable,2020-12-13 13:00:57.000 -,"American Fugitive",nvdec;status-playable,playable,2021-01-04 20:45:11.000 -010089D00A3FA000,"American Ninja Warrior: Challenge",nvdec;status-playable,playable,2021-06-09 13:11:17.000 -01003CC00D0BE000,"Amnesia: Collection",status-playable,playable,2022-10-04 13:36:15.000 -010041D00DEB2000,"Amoeba Battle - Microscopic RTS Action",status-playable,playable,2021-05-06 13:33:41.000 -010046500C8D2000,"Among the Sleep - Enhanced Edition",nvdec;status-playable,playable,2021-06-03 15:06:25.000 -0100B0C013912000,"Among Us",status-menus;online;ldn-broken,menus,2021-09-22 15:20:17.000 -010050900E1C6000,"Anarcute",status-playable,playable,2021-02-22 13:17:59.000 -01009EE0111CC000,"Ancestors Legacy",status-playable;nvdec;UE4,playable,2022-10-01 12:25:36.000 -,"Ancient Rush 2",UE4;crash;status-menus,menus,2020-07-14 14:58:47.000 -0100AE000AEBC000,"Angels of Death",nvdec;status-playable,playable,2021-02-22 14:17:15.000 -010001E00A5F6000,"AngerForce: Reloaded for Nintendo Switch",status-playable,playable,2022-07-21 10:37:17.000 -0100F3500D05E000,"Angry Bunnies: Colossal Carrot Crusade",status-playable;online-broken,playable,2022-09-04 14:53:26.000 -,"Angry Video Game Nerd I & II Deluxe",crash;status-ingame,ingame,2020-12-12 23:59:54.000 -01007A400B3F8000,"Anima Gate of Memories: The Nameless Chronicles",status-playable,playable,2021-06-14 14:33:06.000 -010033F00B3FA000,"Anima: Arcane Edition",nvdec;status-playable,playable,2021-01-26 16:55:51.000 -0100706005B6A000,"Anima: Gate of Memories",nvdec;status-playable,playable,2021-06-16 18:13:18.000 -0100F38011CFE000,"Animal Crossing New Horizons Island Transfer Tool",services;status-ingame;Needs Update;Incomplete,ingame,2022-12-07 13:51:19.000 -01006F8002326000,"Animal Crossing: New Horizons",gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49.000 -,"Animal Fight Club",gpu;status-ingame,ingame,2020-12-13 13:13:33.000 -,"Animal Fun for Toddlers and Kids",services;status-boots,boots,2020-12-15 16:45:29.000 -,"Animal Hunter Z",status-playable,playable,2020-12-13 12:50:35.000 -010033C0121DC000,"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",services;status-boots,boots,2021-11-29 23:43:14.000 -010065B009B3A000,"Animal Rivals Switch",status-playable,playable,2021-02-22 14:02:42.000 -0100EFE009424000,"Animal Super Squad",UE4;status-playable,playable,2021-04-23 20:50:50.000 -,"Animal Up",status-playable,playable,2020-12-13 15:39:02.000 -010020D01AD24000,"ANIMAL WELL",status-playable,playable,2024-05-22 18:01:49.000 -,"Animals for Toddlers",services;status-boots,boots,2020-12-15 17:27:27.000 -,"Animated Jigsaws Collection",nvdec;status-playable,playable,2020-12-15 15:58:34.000 -0100A1900B5B8000,"Animated Jigsaws: Beautiful Japanese Scenery DEMO",nvdec;status-playable,playable,2021-02-10 13:49:56.000 -,"Anime Studio Story",status-playable,playable,2020-12-15 18:14:05.000 -01002B300EB86000,"Anime Studio Story Demo",status-playable,playable,2021-02-10 14:50:39.000 -,"ANIMUS",status-playable,playable,2020-12-13 15:11:47.000 -0100E5A00FD38000,"Animus: Harbinger",status-playable,playable,2022-09-13 22:09:20.000 -,"Ankh Guardian - Treasure of the Demon's Temple",status-playable,playable,2020-12-13 15:55:49.000 -,"Anode",status-playable,playable,2020-12-15 17:18:58.000 -0100CB9018F5A000,"Another Code: Recollection",gpu;status-ingame;crash,ingame,2024-09-06 05:58:52.000 -,"Another Sight",UE4;gpu;nvdec;status-ingame,ingame,2020-12-03 16:49:59.000 -01003C300AAAE000,"Another World",slow;status-playable,playable,2022-07-21 10:42:38.000 -01000FD00DF78000,"AnShi",status-playable;nvdec;UE4,playable,2022-10-21 19:37:01.000 -010054C00D842000,"Anthill",services;status-menus;nvdec,menus,2021-11-18 09:25:25.000 -0100596011E20000,"Anti-Hero Bundle",status-playable;nvdec,playable,2022-10-21 20:10:30.000 -,"Antiquia Lost",status-playable,playable,2020-05-28 11:57:32.000 -,"Antventor",nvdec;status-playable,playable,2020-12-15 20:09:27.000 -0100FA100620C000,"Ao no Kanata no Four Rhythm",status-playable,playable,2022-07-21 10:50:42.000 -010047000E9AA000,"AO Tennis 2",status-playable;online-broken,playable,2022-09-17 12:05:07.000 -0100990011866000,"Aokana - Four Rhythms Across the Blue",status-playable,playable,2022-10-04 13:50:26.000 -01005B100C268000,"Ape Out",status-playable,playable,2022-09-26 19:04:47.000 -010054500E6D4000,"APE OUT DEMO",status-playable,playable,2021-02-10 14:33:06.000 -,"Aperion Cyberstorm",status-playable,playable,2020-12-14 00:40:16.000 -01008CA00D71C000,"Aperion Cyberstorm Demo",status-playable,playable,2021-02-10 15:53:21.000 -,"Apocalipsis",deadlock;status-menus,menus,2020-05-27 12:56:37.000 -,"Apocryph",gpu;status-ingame,ingame,2020-12-13 23:24:10.000 -,"Apparition",nvdec;slow;status-ingame,ingame,2020-12-13 23:57:04.000 -0100AC10085CE000,"AQUA KITTY UDX",online;status-playable,playable,2021-04-12 15:34:11.000 -,"Aqua Lungers",crash;status-ingame,ingame,2020-12-14 11:25:57.000 -0100D0D00516A000,"Aqua Moto Racing Utopia",status-playable,playable,2021-02-21 21:21:00.000 -010071800BA74000,"Aragami: Shadow Edition",nvdec;status-playable,playable,2021-02-21 20:33:23.000 -0100C7D00E6A0000,"Arc of Alchemist",status-playable;nvdec,playable,2022-10-07 19:15:54.000 -0100BE80097FA000,"Arcade Archives 10-Yard Fight",online;status-playable,playable,2021-03-25 21:26:41.000 -01005DD00BE08000,"Arcade Archives ALPHA MISSION",online;status-playable,playable,2021-04-15 09:20:43.000 -010083800DC70000,"Arcade Archives ALPINE SKI",online;status-playable,playable,2021-04-15 09:28:46.000 -010014F001DE2000,"Arcade Archives ARGUS",online;status-playable,playable,2021-04-16 06:51:25.000 -010014F001DE2000,"Arcade Archives Armed F",online;status-playable,playable,2021-04-16 07:00:17.000 -0100BEC00C7A2000,"Arcade Archives ATHENA",online;status-playable,playable,2021-04-16 07:10:12.000 -0100426001DE4000,"Arcade Archives Atomic Robo-Kid",online;status-playable,playable,2021-04-16 07:20:29.000 -0100192009824000,"Arcade Archives BOMB JACK",online;status-playable,playable,2021-04-16 09:48:26.000 -010007A00980C000,"Arcade Archives City CONNECTION",online;status-playable,playable,2021-03-25 22:16:15.000 -0100EDC00E35A000,"Arcade Archives CLU CLU LAND",online;status-playable,playable,2021-04-16 10:00:42.000 -0100BB1001DD6000,"Arcade Archives CRAZY CLIMBER",online;status-playable,playable,2021-03-25 22:24:15.000 -,"Arcade Archives DONKEY KONG",Needs Update;crash;services;status-menus,menus,2021-03-24 18:18:43.000 -0100F25001DD0000,"Arcade Archives DOUBLE DRAGON",online;status-playable,playable,2021-03-25 22:44:34.000 -01009E3001DDE000,"Arcade Archives DOUBLE DRAGON II The Revenge",online;status-playable,playable,2021-04-12 16:05:29.000 -0100496006EC8000,"Arcade Archives FRONT LINE",online;status-playable,playable,2021-05-05 14:10:49.000 -01009A4008A30000,"Arcade Archives HEROIC EPISODE",online;status-playable,playable,2021-03-25 23:01:26.000 -01007D200D3FC000,"Arcade Archives ICE CLIMBER",online;status-playable,playable,2021-05-05 14:18:34.000 -010049400C7A8000,"Arcade Archives IKARI WARRIORS",online;status-playable,playable,2021-05-05 14:24:46.000 -01000DB00980A000,"Arcade Archives Ikki",online;status-playable,playable,2021-03-25 23:11:28.000 -010008300C978000,"Arcade Archives IMAGE FIGHT",online;status-playable,playable,2021-05-05 14:31:21.000 -010010B008A36000,"Arcade Archives Kid Niki Radical Ninja",audio;status-ingame;online,ingame,2022-07-21 11:02:04.000 -0100E7C001DE0000,"Arcade Archives Kid's Horehore Daisakusen",online;status-playable,playable,2021-04-12 16:21:29.000 -,"Arcade Archives LIFE FORCE",status-playable,playable,2020-09-04 13:26:25.000 -0100755004608000,"Arcade Archives MARIO BROS.",online;status-playable,playable,2021-03-26 11:31:32.000 -01000BE001DD8000,"Arcade Archives MOON CRESTA",online;status-playable,playable,2021-05-05 14:39:29.000 -01003000097FE000,"Arcade Archives MOON PATROL",online;status-playable,playable,2021-03-26 11:42:04.000 -01003EF00D3B4000,"Arcade Archives NINJA GAIDEN",audio;online;status-ingame,ingame,2021-04-12 16:27:53.000 -01002F300D2C6000,"Arcade Archives Ninja Spirit",online;status-playable,playable,2021-05-05 14:45:31.000 -,"Arcade Archives Ninja-Kid",online;status-playable,playable,2021-03-26 20:55:07.000 -,"Arcade Archives OMEGA FIGHTER",crash;services;status-menus,menus,2020-08-18 20:50:54.000 -,"Arcade Archives PLUS ALPHA",audio;status-ingame,ingame,2020-07-04 20:47:55.000 -0100A6E00D3F8000,"Arcade Archives POOYAN",online;status-playable,playable,2021-05-05 17:58:19.000 -01000D200C7A4000,"Arcade Archives PSYCHO SOLDIER",online;status-playable,playable,2021-05-05 18:02:19.000 -01001530097F8000,"Arcade Archives PUNCH-OUT!!",online;status-playable,playable,2021-03-25 22:10:55.000 -010081E001DD2000,"Arcade Archives Renegade",status-playable;online,playable,2022-07-21 11:45:40.000 -0100FBA00E35C000,"Arcade Archives ROAD FIGHTER",online;status-playable,playable,2021-05-05 18:09:17.000 -010060000BF7C000,"Arcade Archives ROUTE 16",online;status-playable,playable,2021-05-05 18:40:41.000 -0100C2D00981E000,"Arcade Archives RYGAR",online;status-playable,playable,2021-04-15 08:48:30.000 -01007A4009834000,"Arcade Archives Shusse Ozumo",online;status-playable,playable,2021-05-05 17:52:25.000 -010008F00B054000,"Arcade Archives Sky Skipper",online;status-playable,playable,2021-04-15 08:58:09.000 -01008C900982E000,"Arcade Archives Solomon's Key",online;status-playable,playable,2021-04-19 16:27:18.000 -010069F008A38000,"Arcade Archives STAR FORCE",online;status-playable,playable,2021-04-15 08:39:09.000 -,"Arcade Archives TERRA CRESTA",crash;services;status-menus,menus,2020-08-18 20:20:55.000 -0100348001DE6000,"Arcade Archives TERRA FORCE",online;status-playable,playable,2021-04-16 20:03:27.000 -0100DFD016B7A000,"Arcade Archives TETRIS THE GRAND MASTER",status-playable,playable,2024-06-23 01:50:29.000 -0100DC000983A000,"Arcade Archives THE NINJA WARRIORS",online;slow;status-ingame,ingame,2021-04-16 19:54:56.000 -0100AF300D2E8000,"Arcade Archives TIME PILOT",online;status-playable,playable,2021-04-16 19:22:31.000 -010029D006ED8000,"Arcade Archives Traverse USA",online;status-playable,playable,2021-04-15 08:11:06.000 -010042200BE0C000,"Arcade Archives URBAN CHAMPION",online;status-playable,playable,2021-04-16 10:20:03.000 -01004EC00E634000,"Arcade Archives VS. GRADIUS",online;status-playable,playable,2021-04-12 14:53:58.000 -,"Arcade Archives VS. SUPER MARIO BROS.",online;status-playable,playable,2021-04-08 14:48:11.000 -01001B000D8B6000,"Arcade Archives WILD WESTERN",online;status-playable,playable,2021-04-16 10:11:36.000 -010050000D6C4000,"Arcade Classics Anniversary Collection",status-playable,playable,2021-06-03 13:55:10.000 -,"ARCADE FUZZ",status-playable,playable,2020-08-15 12:37:36.000 -,"Arcade Spirits",status-playable,playable,2020-06-21 11:45:03.000 -0100E680149DC000,"Arcaea",status-playable,playable,2023-03-16 19:31:21.000 -0100E53013E1C000,"Arcanoid Breakout",status-playable,playable,2021-01-25 23:28:02.000 -,"Archaica: Path of LightInd",crash;status-nothing,nothing,2020-10-16 13:22:26.000 -,"Area 86",status-playable,playable,2020-12-16 16:45:52.000 -0100691013C46000,"ARIA CHRONICLE",status-playable,playable,2022-11-16 13:50:55.000 -0100D4A00B284000,"Ark: Survival Evolved",gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56.000 -,"Arkanoid vs Space Invaders",services;status-ingame,ingame,2021-01-21 12:50:30.000 -010069A010606000,"Arkham Horror: Mother's Embrace",nvdec;status-playable,playable,2021-04-19 15:40:55.000 -,"Armed 7 DX",status-playable,playable,2020-12-14 11:49:56.000 -,"Armello",nvdec;status-playable,playable,2021-01-07 11:43:26.000 -01009B500007C000,"ARMS",status-playable;ldn-works;LAN,playable,2024-08-28 07:49:24.000 -,"ARMS Demo",status-playable,playable,2021-02-10 16:30:13.000 -0100184011B32000,"Arrest of a stone Buddha",status-nothing;crash,nothing,2022-12-07 16:55:00.000 -,"Arrog",status-playable,playable,2020-12-16 17:20:50.000 -01008EC006BE2000,"Art of Balance",gpu;status-ingame;ldn-works,ingame,2022-07-21 17:13:57.000 -010062F00CAE2000,"Art of Balance DEMO",gpu;slow;status-ingame,ingame,2021-02-10 17:17:12.000 -01006AA013086000,"Art Sqool",status-playable;nvdec,playable,2022-10-16 20:42:37.000 -,"Artifact Adventure Gaiden DX",status-playable,playable,2020-12-16 17:49:25.000 -0100C2500CAB6000,"Ary and the Secret of Seasons",status-playable,playable,2022-10-07 20:45:09.000 -,"ASCENDANCE",status-playable,playable,2021-01-05 10:54:40.000 -,"Asemblance",UE4;gpu;status-ingame,ingame,2020-12-16 18:01:23.000 -,"Ash of Gods: Redemption",deadlock;status-nothing,nothing,2020-08-10 18:08:32.000 -010027B00E40E000,"Ashen",status-playable;nvdec;online-broken;UE4,playable,2022-09-17 12:19:14.000 -01007B000C834000,"Asphalt 9: Legends",services;status-menus;crash;online-broken,menus,2022-12-07 13:28:29.000 -01007F600B134000,"Assassin's Creed III Remastered",status-boots;nvdec,boots,2024-06-25 20:12:11.000 -010044700DEB0000,"Assassin's Creed The Rebel Collection",gpu;status-ingame,ingame,2024-05-19 07:58:56.000 -0100DF200B24C000,"Assault Android Cactus+",status-playable,playable,2021-06-03 13:23:55.000 -,"Assault Chainguns KM",crash;gpu;status-ingame,ingame,2020-12-14 12:48:34.000 -0100C5E00E540000,"Assault on Metaltron Demo",status-playable,playable,2021-02-10 19:48:06.000 -010057A00C1F6000,"Astebreed",status-playable,playable,2022-07-21 17:33:54.000 -010050400BD38000,"Asterix & Obelix XXL 2",deadlock;status-ingame;nvdec,ingame,2022-07-21 17:54:14.000 -0100F46011B50000,"Asterix & Obelix XXL: Romastered",gpu;status-ingame;nvdec;opengl,ingame,2023-08-16 21:22:06.000 -010081500EA1E000,"Asterix & Obelix XXL3: The Crystal Menhir",gpu;status-ingame;nvdec;regression,ingame,2022-11-28 14:19:23.000 -01007300020FA000,"Astral Chain",status-playable,playable,2024-07-17 18:02:19.000 -,"Astro Bears Party",status-playable,playable,2020-05-28 11:21:58.000 -0100F0400351C000,"Astro Duel Deluxe",32-bit;status-playable,playable,2021-06-03 11:21:48.000 -0100B80010C48000,"Astrologaster",cpu;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:31.000 -,"AstroWings SpaceWar",status-playable,playable,2020-12-14 13:10:44.000 -010099801870E000,"Atari 50 The Anniversary Celebration",slow;status-playable,playable,2022-11-14 19:42:10.000 -0100D9D00EE8C000,"Atelier Ayesha: The Alchemist of Dusk DX",status-menus;crash;nvdec;Needs Update,menus,2021-11-24 07:29:54.000 -0100E5600EE8E000,"Atelier Escha & Logy: Alchemists Of The Dusk Sky DX",status-playable;nvdec,playable,2022-11-20 16:01:41.000 -010023201421E000,"Atelier Firis: The Alchemist and the Mysterious Journey DX",gpu;status-ingame;nvdec,ingame,2022-10-25 22:46:19.000 -,"Atelier Lulua ~ The Scion of Arland ~",nvdec;status-playable,playable,2020-12-16 14:29:19.000 -010009900947A000,"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings",nvdec;status-playable,playable,2021-06-03 18:37:01.000 -,"Atelier Meruru ~ The Apprentice of Arland ~ DX",nvdec;status-playable,playable,2020-06-12 00:50:48.000 -010088600C66E000,"Atelier Rorona - The Alchemist of Arland - DX",nvdec;status-playable,playable,2021-04-08 15:33:15.000 -01002D700B906000,"Atelier Rorona Arland no Renkinjutsushi DX (JP)",status-playable;nvdec,playable,2022-12-02 17:26:54.000 -01009A9012022000,"Atelier Ryza 2: Lost Legends & the Secret Fairy",status-playable,playable,2022-10-16 21:06:06.000 -0100D1900EC80000,"Atelier Ryza: Ever Darkness & the Secret Hideout",status-playable,playable,2023-10-15 16:36:50.000 -,"Atelier Shallie: Alchemists of the Dusk Sea DX",nvdec;status-playable,playable,2020-11-25 20:54:12.000 -010082A01538E000,"Atelier Sophie 2: The Alchemist of the Mysterious Dream",status-ingame;crash,ingame,2022-12-01 04:34:03.000 -01001A5014220000,"Atelier Sophie: The Alchemist of the Mysterious Book DX",status-playable,playable,2022-10-25 23:06:20.000 -,"Atelier Totori ~ The Adventurer of Arland ~ DX",nvdec;status-playable,playable,2020-06-12 01:04:56.000 -0100B9400FA38000,"ATOM RPG",status-playable;nvdec,playable,2022-10-22 10:11:48.000 -01005FE00EC4E000,"Atomic Heist",status-playable,playable,2022-10-16 21:24:32.000 -0100AD30095A4000,"Atomicrops",status-playable,playable,2022-08-06 10:05:07.000 -,"ATOMIK RunGunJumpGun",status-playable,playable,2020-12-14 13:19:24.000 -,"ATOMINE",gpu;nvdec;slow;status-playable,playable,2020-12-14 18:56:50.000 -,"Attack of the Toy Tanks",slow;status-ingame,ingame,2020-12-14 12:59:12.000 -,"Attack on Titan 2",status-playable,playable,2021-01-04 11:40:01.000 -01000F600B01E000,"ATV Drift & Tricks",UE4;online;status-playable,playable,2021-04-08 17:29:17.000 -,"Automachef",status-playable,playable,2020-12-16 19:51:25.000 -01006B700EA6A000,"Automachef Demo",status-playable,playable,2021-02-10 20:35:37.000 -,"Aviary Attorney: Definitive Edition",status-playable,playable,2020-08-09 20:32:12.000 -,"Avicii Invector",status-playable,playable,2020-10-25 12:12:56.000 -0100E100128BA000,"AVICII Invector Demo",status-playable,playable,2021-02-10 21:04:58.000 -,"AvoCuddle",status-playable,playable,2020-09-02 14:50:13.000 -0100085012D64000,"Awakening of Cthulhu",UE4;status-playable,playable,2021-04-26 13:03:07.000 -01002F1005F3C000,"Away: Journey to the Unexpected",status-playable;nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04.000 -,"Awesome Pea",status-playable,playable,2020-10-11 12:39:23.000 -010023800D3F2000,"Awesome Pea (Demo)",status-playable,playable,2021-02-10 21:48:21.000 -0100B7D01147E000,"Awesome Pea 2",status-playable,playable,2022-10-01 12:34:19.000 -,"Awesome Pea 2 (Demo) - 0100D2011E28000",crash;status-nothing,nothing,2021-02-10 22:08:27.000 -0100DA3011174000,"Axes",status-playable,playable,2021-04-08 13:01:58.000 -,"Axiom Verge",status-playable,playable,2020-10-20 01:07:18.000 -010075400DEC6000,"Ayakashi koi gikyoku Free Trial",status-playable,playable,2021-02-10 22:22:11.000 -01006AF012FC8000,"Azur Lane: Crosswave",UE4;nvdec;status-playable,playable,2021-04-05 15:15:25.000 -,"Azuran Tales: Trials",status-playable,playable,2020-08-12 15:23:07.000 -01006FB00990E000,"Azure Reflections",nvdec;online;status-playable,playable,2021-04-08 13:18:25.000 -01004E90149AA000,"Azure Striker GUNVOLT 3",status-playable,playable,2022-08-10 13:46:49.000 -0100192003FA4000,"Azure Striker Gunvolt: STRIKER PACK",32-bit;status-playable,playable,2024-02-10 23:51:21.000 -,"Azurebreak Heroes",status-playable,playable,2020-12-16 21:26:17.000 -01009B901145C000,"B.ARK",status-playable;nvdec,playable,2022-11-17 13:35:02.000 -01002CD00A51C000,"Baba Is You",status-playable,playable,2022-07-17 05:36:54.000 -,"Back to Bed",nvdec;status-playable,playable,2020-12-16 20:52:04.000 -0100FEA014316000,"Backworlds",status-playable,playable,2022-10-25 23:20:34.000 -0100EAF00E32E000,"BaconMan",status-menus;crash;nvdec,menus,2021-11-20 02:36:21.000 -01000CB00D094000,"Bad Dream: Coma",deadlock;status-boots,boots,2023-08-03 00:54:18.000 -0100B3B00D81C000,"Bad Dream: Fever",status-playable,playable,2021-06-04 18:33:12.000 -,"Bad Dudes",status-playable,playable,2020-12-10 12:30:56.000 -0100E98006F22000,"Bad North",status-playable,playable,2022-07-17 13:44:25.000 -,"Bad North Demo",status-playable,playable,2021-02-10 22:48:38.000 -,"BAFL",status-playable,playable,2021-01-13 08:32:51.000 -010076B011EC8000,"Baila Latino",status-playable,playable,2021-04-14 16:40:24.000 -,"Bakugan Champions of Vestroia",status-playable,playable,2020-11-06 19:07:39.000 -01008260138C4000,"Bakumatsu Renka SHINSENGUMI",status-playable,playable,2022-10-25 23:37:31.000 -0100438012EC8000,"Balan Wonderworld",status-playable;nvdec;UE4,playable,2022-10-22 13:08:43.000 -0100E48013A34000,"Balan Wonderworld Demo",gpu;services;status-ingame;UE4;demo,ingame,2023-02-16 20:05:07.000 -0100CD801CE5E000,"Balatro",status-ingame,ingame,2024-04-21 02:01:53.000 -010010A00DA48000,"Baldur's Gate and Baldur's Gate II: Enhanced Editions",32-bit;status-playable,playable,2022-09-12 23:52:15.000 -0100BC400FB64000,"Balthazar's Dreams",status-playable,playable,2022-09-13 00:13:22.000 -01008D30128E0000,"Bamerang",status-playable,playable,2022-10-26 00:29:39.000 -,"Bang Dream Girls Band Party for Nintendo Switch",status-playable,playable,2021-09-19 03:06:58.000 -010013C010C5C000,"Banner of the Maid",status-playable,playable,2021-06-14 15:23:37.000 -,"Banner Saga 2",crash;status-boots,boots,2021-01-13 08:56:09.000 -,"Banner Saga 3",slow;status-boots,boots,2021-01-11 16:53:57.000 -0100CE800B94A000,"Banner Saga Trilogy",slow;status-playable,playable,2024-03-06 11:25:20.000 -,"Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos",status-playable,playable,2020-07-15 05:06:29.000 -,"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",nvdec;status-playable,playable,2020-12-17 11:43:10.000 -,"Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive",status-playable,playable,2020-12-17 11:22:50.000 -0100D3000AEC2000,"Baobabs Mausoleum: DEMO",status-playable,playable,2021-02-10 22:59:25.000 -01003350102E2000,"Barbarous! Tavern of Emyr",status-playable,playable,2022-10-16 21:50:24.000 -0100F7E01308C000,"Barbearian",Needs Update;gpu;status-ingame,ingame,2021-06-28 16:27:50.000 -010039C0106C6000,"Baron: Fur Is Gonna Fly",status-boots;crash,boots,2022-02-06 02:05:43.000 -,"Barry Bradford's Putt Panic Party",nvdec;status-playable,playable,2020-06-17 01:08:34.000 -01004860080A0000,"Baseball Riot",status-playable,playable,2021-06-04 18:07:27.000 -0100E3100450E000,"Bass Pro Shops: The Strike - Championship Edition",gpu;status-boots;32-bit,boots,2022-12-09 15:58:16.000 -010038600B27E000,"Bastion",status-playable,playable,2022-02-15 14:15:24.000 -,"Batbarian: Testament of the Primordials",status-playable,playable,2020-12-17 12:00:59.000 -0100C07018CA6000,"Baten Kaitos I & II HD Remaster (Europe/USA)",services;status-boots;Needs Update,boots,2023-10-01 00:44:32.000 -0100F28018CA4000,"Baten Kaitos I & II HD Remaster (Japan)",services;status-boots;Needs Update,boots,2023-10-24 23:11:54.000 -,"Batman - The Telltale Series",nvdec;slow;status-playable,playable,2021-01-11 18:19:35.000 -01003f00163ce000,"Batman: Arkham City",status-playable,playable,2024-09-11 00:30:19.000 -0100ACD0163D0000,"Batman: Arkham Knight",gpu;status-ingame;mac-bug,ingame,2024-06-25 20:24:42.000 -,"Batman: The Enemy Within",crash;status-nothing,nothing,2020-10-16 05:49:27.000 -0100747011890000,"Battle Axe",status-playable,playable,2022-10-26 00:38:01.000 -,"Battle Chasers: Nightwar",nvdec;slow;status-playable,playable,2021-01-12 12:27:34.000 -,"Battle Chef Brigade",status-playable,playable,2021-01-11 14:16:28.000 -0100DBB00CAEE000,"Battle Chef Brigade Demo",status-playable,playable,2021-02-10 23:15:07.000 -0100A3B011EDE000,"Battle Hunters",gpu;status-ingame,ingame,2022-11-12 09:19:17.000 -,"Battle of Kings",slow;status-playable,playable,2020-12-17 12:45:23.000 -,"Battle Planet - Judgement Day",status-playable,playable,2020-12-17 14:06:20.000 -,"Battle Princess Madelyn",status-playable,playable,2021-01-11 13:47:23.000 -0100A7500DF64000,"Battle Princess Madelyn Royal Edition",status-playable,playable,2022-09-26 19:14:49.000 -010099B00E898000,"Battle Supremacy - Evolution",gpu;status-boots;nvdec,boots,2022-02-17 09:02:50.000 -0100DEB00D5A8000,"Battle Worlds: Kronos",nvdec;status-playable,playable,2021-06-04 17:48:02.000 -0100650010DD4000,"Battleground",status-ingame;crash,ingame,2021-09-06 11:53:23.000 -,"BATTLESLOTHS",status-playable,playable,2020-10-03 08:32:22.000 -,"BATTLESTAR GALACTICA Deadlock",nvdec;status-playable,playable,2020-06-27 17:35:44.000 -01006D800A988000,"Battlezone Gold Edition",gpu;ldn-untested;online;status-boots,boots,2021-06-04 18:36:05.000 -,"BATTLLOON",status-playable,playable,2020-12-17 15:48:23.000 -0100194010422000,"bayala - the game",status-playable,playable,2022-10-04 14:09:25.000 -010076F0049A2000,"Bayonetta",status-playable;audout,playable,2022-11-20 15:51:59.000 -01007960049A0000,"Bayonetta 2",status-playable;nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09.000 -01004A4010FEA000,"Bayonetta 3",gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33.000 -010002801A3FA000,"Bayonetta Origins Cereza and the Lost Demon Demo",gpu;status-ingame;demo,ingame,2024-02-17 06:06:28.000 -0100CF5010FEC000,"Bayonetta Origins: Cereza and the Lost Demon",gpu;status-ingame,ingame,2024-02-27 01:39:49.000 -,"Be-A Walker",slow;status-ingame,ingame,2020-09-02 15:00:31.000 -010095C00406C000,"Beach Buggy Racing",online;status-playable,playable,2021-04-13 23:16:50.000 -010020700DE04000,"Bear With Me - The Lost Robots",nvdec;status-playable,playable,2021-02-27 14:20:10.000 -010024200E97E800,"Bear With Me - The Lost Robots Demo",nvdec;status-playable,playable,2021-02-12 22:38:12.000 -,"Bear's Restaurant - 0100CE014A4E000",status-playable,playable,2024-08-11 21:26:59.000 -,"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",crash;status-menus,menus,2020-10-04 06:12:08.000 -,"Beat Cop",status-playable,playable,2021-01-06 19:26:48.000 -01002D20129FC000,"Beat Me!",status-playable;online-broken,playable,2022-10-16 21:59:26.000 -01006B0014590000,"Beautiful Desolation",gpu;status-ingame;nvdec,ingame,2022-10-26 10:34:38.000 -,"Bee Simulator",UE4;crash;status-boots,boots,2020-07-15 12:13:13.000 -010018F007786000,"BeeFense BeeMastered",status-playable,playable,2022-11-17 15:38:12.000 -,"Behold the Kickmen",status-playable,playable,2020-06-27 12:49:45.000 -,"Beholder",status-playable,playable,2020-10-16 12:48:58.000 -01006E1004404000,"Ben 10",nvdec;status-playable,playable,2021-02-26 14:08:35.000 -01009CD00E3AA000,"Ben 10: Power Trip",status-playable;nvdec,playable,2022-10-09 10:52:12.000 -010074500BBC4000,"Bendy and the Ink Machine",status-playable,playable,2023-05-06 20:35:39.000 -010021F00C1C0000,"Bertram Fiddle Episode 2: A Bleaker Predicklement",nvdec;status-playable,playable,2021-02-22 14:56:37.000 -010068600AD16000,"Beyblade Burst Battle Zero",services;status-menus;crash;Needs Update,menus,2022-11-20 15:48:32.000 -010056500CAD8000,"Beyond Enemy Lines: Covert Operations",status-playable;UE4,playable,2022-10-01 13:11:50.000 -0100B8F00DACA000,"Beyond Enemy Lines: Essentials",status-playable;nvdec;UE4,playable,2022-09-26 19:48:16.000 -,"Bibi & Tina - Adventures with Horses",nvdec;slow;status-playable,playable,2021-01-13 08:58:09.000 -010062400E69C000,"Bibi & Tina at the horse farm",status-playable,playable,2021-04-06 16:31:39.000 -,"Bibi Blocksberg - Big Broom Race 3",status-playable,playable,2021-01-11 19:07:16.000 -,"Big Buck Hunter Arcade",nvdec;status-playable,playable,2021-01-12 20:31:39.000 -010088100C35E000,"Big Crown: Showdown",status-menus;nvdec;online;ldn-untested,menus,2022-07-17 18:25:32.000 -0100A42011B28000,"Big Dipper",status-playable,playable,2021-06-14 15:08:19.000 -01002FA00DE72000,"Big Drunk Satanic Massacre",status-playable,playable,2021-03-04 21:28:22.000 -,"Big Pharma",status-playable,playable,2020-07-14 15:27:30.000 -,"BIG-Bobby-Car - The Big Race",slow;status-playable,playable,2020-12-10 14:25:06.000 -010057700FF7C000,"Billion Road",status-playable,playable,2022-11-19 15:57:43.000 -,"BINGO for Nintendo Switch",status-playable,playable,2020-07-23 16:17:36.000 -01004BA017CD6000,"Biomutant",status-ingame;crash,ingame,2024-05-16 15:46:36.000 -01002620102C6000,"BioShock 2 Remastered",services;status-nothing,nothing,2022-10-29 14:39:22.000 -0100D560102C8000,"BioShock Infinite: The Complete Edition",services-horizon;status-nothing;crash,nothing,2024-08-11 21:35:01.000 -0100AD10102B2000,"BioShock Remastered",services-horizon;status-boots;crash;Needs Update,boots,2024-06-06 01:08:52.000 -010053B0117F8000,"Biped",status-playable;nvdec,playable,2022-10-01 13:32:58.000 -01001B700B278000,"Bird Game +",status-playable;online,playable,2022-07-17 18:41:57.000 -0100B6B012FF4000,"Birds and Blocks Demo",services;status-boots;demo,boots,2022-04-10 04:53:03.000 -0100E62012D3C000,"BIT.TRIP RUNNER",status-playable,playable,2022-10-17 14:23:24.000 -01000AD012D3A000,"BIT.TRIP VOID",status-playable,playable,2022-10-17 14:31:23.000 -,"Bite the Bullet",status-playable,playable,2020-10-14 23:10:11.000 -010026E0141C8000,"Bitmaster",status-playable,playable,2022-12-13 14:05:51.000 -,"Biz Builder Delux",slow;status-playable,playable,2020-12-15 21:36:25.000 -0100DD1014AB8000,"Black Book",status-playable;nvdec,playable,2022-12-13 16:38:53.000 -010049000B69E000,"Black Future '88",status-playable;nvdec,playable,2022-09-13 11:24:37.000 -01004BE00A682000,"Black Hole Demo",status-playable,playable,2021-02-12 23:02:17.000 -0100C3200E7E6000,"Black Legend",gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48.000 -,"Blackjack Hands",status-playable,playable,2020-11-30 14:04:51.000 -0100A0A00E660000,"Blackmoor2",status-playable;online-broken,playable,2022-09-26 20:26:34.000 -010032000EA2C000,"Blacksad: Under the Skin",status-playable,playable,2022-09-13 11:38:04.000 -01006B400C178000,"Blacksea Odyssey",status-playable;nvdec,playable,2022-10-16 22:14:34.000 -010068E013450000,"Blacksmith of the Sand Kingdom",status-playable,playable,2022-10-16 22:37:44.000 -0100C4400CB7C000,"BLADE ARCUS Rebellion From Shining",status-playable,playable,2022-07-17 18:52:28.000 -0100EA1018A2E000,"Blade Assault",audio;status-nothing,nothing,2024-04-29 14:32:50.000 -01009CC00E224000,"Blade II The Return of Evil",audio;status-ingame;crash;UE4,ingame,2021-11-14 02:49:59.000 -01005950022EC000,"Blade Strangers",status-playable;nvdec,playable,2022-07-17 19:02:43.000 -0100DF0011A6A000,"Bladed Fury",status-playable,playable,2022-10-26 11:36:26.000 -0100CFA00CC74000,"Blades of Time",deadlock;status-boots;online,boots,2022-07-17 19:19:58.000 -01006CC01182C000,"Blair Witch",status-playable;nvdec;UE4,playable,2022-10-01 14:06:16.000 -010039501405E000,"Blanc",gpu;slow;status-ingame,ingame,2023-02-22 14:00:13.000 -0100698009C6E000,"Blasphemous",nvdec;status-playable,playable,2021-03-01 12:15:31.000 -0100302010338000,"Blasphemous Demo",status-playable,playable,2021-02-12 23:49:56.000 -0100225000FEE000,"Blaster Master Zero",32-bit;status-playable,playable,2021-03-05 13:22:33.000 -01005AA00D676000,"Blaster Master Zero 2",status-playable,playable,2021-04-08 15:22:59.000 -010025B002E92000,"Blaster Master Zero DEMO",status-playable,playable,2021-02-12 23:59:06.000 -,"BLAZBLUE CENTRALFICTION Special Edition",nvdec;status-playable,playable,2020-12-15 23:50:04.000 -,"BlazBlue: Cross Tag Battle",nvdec;online;status-playable,playable,2021-01-05 20:29:37.000 -,"Blazing Beaks",status-playable,playable,2020-06-04 20:37:06.000 -,"Blazing Chrome",status-playable,playable,2020-11-16 04:56:54.000 -010091700EA2A000,"Bleep Bloop DEMO",nvdec;status-playable,playable,2021-02-13 00:20:53.000 -010089D011310000,"Blind Men",audout;status-playable,playable,2021-02-20 14:15:38.000 -0100743013D56000,"Blizzard Arcade Collection",status-playable;nvdec,playable,2022-08-03 19:37:26.000 -0100F3500A20C000,"BlobCat",status-playable,playable,2021-04-23 17:09:30.000 -0100E1C00DB6C000,"Block-a-Pix Deluxe Demo",status-playable,playable,2021-02-13 00:37:39.000 -0100C6A01AD56000,"Bloo Kid",status-playable,playable,2024-05-01 17:18:04.000 -010055900FADA000,"Bloo Kid 2",status-playable,playable,2024-05-01 17:16:57.000 -,"Blood & Guts Bundle",status-playable,playable,2020-06-27 12:57:35.000 -01007E700D17E000,"Blood Waves",gpu;status-ingame,ingame,2022-07-18 13:04:46.000 -,"Blood will be Spilled",nvdec;status-playable,playable,2020-12-17 03:02:03.000 -,"Bloodstained: Curse of the Moon",status-playable,playable,2020-09-04 10:42:17.000 -,"Bloodstained: Curse of the Moon 2",status-playable,playable,2020-09-04 10:56:27.000 -010025A00DF2A000,"Bloodstained: Ritual of the Night",status-playable;nvdec;UE4,playable,2022-07-18 14:27:35.000 -0100E510143EC000,"Bloody Bunny : The Game",status-playable;nvdec;UE4,playable,2022-10-22 13:18:55.000 -0100B8400A1C6000,"Bloons TD 5",Needs Update;audio;gpu;services;status-boots,boots,2021-04-18 23:02:46.000 -0100C1000706C000,"Blossom Tales",status-playable,playable,2022-07-18 16:43:07.000 -01000EB01023E000,"Blossom Tales Demo",status-playable,playable,2021-02-13 14:22:53.000 -010073B010F6E000,"Blue Fire",status-playable;UE4,playable,2022-10-22 14:46:11.000 -0100721013510000,"Body of Evidence",status-playable,playable,2021-04-25 22:22:11.000 -0100AD1010CCE000,"Bohemian Killing",status-playable;vulkan-backend-bug,playable,2022-09-26 22:41:37.000 -010093700ECEC000,"Boku to Nurse no Kenshuu Nisshi",status-playable,playable,2022-11-21 20:38:34.000 -01001D900D9AC000,"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",slow;status-ingame;crash;Needs Update,ingame,2022-04-24 22:46:04.000 -0100317014B7C000,"Bomb Rush Cyberfunk",status-playable,playable,2023-09-28 19:51:57.000 -01007900080B6000,"Bomber Crew",status-playable,playable,2021-06-03 14:21:28.000 -0100A1F012948000,"Bomber Fox",nvdec;status-playable,playable,2021-04-19 17:58:13.000 -010087300445A000,"Bombslinger",services;status-menus,menus,2022-07-19 12:53:15.000 -01007A200F452000,"Book of Demons",status-playable,playable,2022-09-29 12:03:43.000 -,"Bookbound Brigade",status-playable,playable,2020-10-09 14:30:29.000 -,"Boom Blaster",status-playable,playable,2021-03-24 10:55:56.000 -010081A00EE62000,"Boomerang Fu",status-playable,playable,2024-07-28 01:12:41.000 -010069F0135C4000,"Boomerang Fu Demo Version",demo;status-playable,playable,2021-02-13 14:38:13.000 -010096F00FF22000,"Borderlands 2: Game of the Year Edition",status-playable,playable,2022-04-22 18:35:07.000 -01009970122E4000,"Borderlands 3",gpu;status-ingame,ingame,2024-07-15 04:38:14.000 -010064800F66A000,"Borderlands: Game of the Year Edition",slow;status-ingame;online-broken;ldn-untested,ingame,2023-07-23 21:10:36.000 -010007400FF24000,"Borderlands: The Pre-Sequel Ultimate Edition",nvdec;status-playable,playable,2021-06-09 20:17:10.000 -01008E500AFF6000,"Boreal Blade",gpu;ldn-untested;online;status-ingame,ingame,2021-06-11 15:37:14.000 -010092C013FB8000,"Boris The Rocket",status-playable,playable,2022-10-26 13:23:09.000 -010076F00EBE4000,"Bossgard",status-playable;online-broken,playable,2022-10-04 14:21:13.000 -010069B00EAC8000,"Bot Vice Demo",crash;demo;status-ingame,ingame,2021-02-13 14:52:42.000 -,"Bouncy Bob 2",status-playable,playable,2020-07-14 16:51:53.000 -0100E1200DC1A000,"Bounty Battle",status-playable;nvdec,playable,2022-10-04 14:40:51.000 -,"Bow to Blood: Last Captain Standing",slow;status-playable,playable,2020-10-23 10:51:21.000 -,"BOX Align",crash;services;status-nothing,nothing,2020-04-03 17:26:56.000 -,"BOXBOY! + BOXGIRL!",status-playable,playable,2020-11-08 01:11:54.000 -0100B7200E02E000,"BOXBOY! + BOXGIRL! Demo",demo;status-playable,playable,2021-02-13 14:59:08.000 -,"BQM BlockQuest Maker",online;status-playable,playable,2020-07-31 20:56:50.000 -0100E87017D0E000,"Bramble The Mountain King",services-horizon;status-playable,playable,2024-03-06 09:32:17.000 -,"Brave Dungeon + Dark Witch's Story: COMBAT",status-playable,playable,2021-01-12 21:06:34.000 -01006DC010326000,"Bravely Default II",gpu;status-ingame;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26.000 -0100B6801137E000,"Bravely Default II Demo",gpu;status-ingame;crash;UE4;demo,ingame,2022-09-27 05:39:47.000 -010081501371E000,"BraveMatch",status-playable;UE4,playable,2022-10-26 13:32:15.000 -0100F60017D4E000,"Bravery and Greed",gpu;deadlock;status-boots,boots,2022-12-04 02:23:47.000 -,"Brawl",nvdec;slow;status-playable,playable,2020-06-04 14:23:18.000 -010068F00F444000,"Brawl Chess",status-playable;nvdec,playable,2022-10-26 13:59:17.000 -0100C6800B934000,"Brawlhalla",online;opengl;status-playable,playable,2021-06-03 18:26:09.000 -010060200A4BE000,"Brawlout",ldn-untested;online;status-playable,playable,2021-06-04 17:35:35.000 -0100C1B00E1CA000,"Brawlout Demo",demo;status-playable,playable,2021-02-13 22:46:53.000 -010022C016DC8000,"Breakout: Recharged",slow;status-ingame,ingame,2022-11-06 15:32:57.000 -01000AA013A5E000,"Breathedge",UE4;nvdec;status-playable,playable,2021-05-06 15:44:28.000 -,"Breathing Fear",status-playable,playable,2020-07-14 15:12:29.000 -,"Brick Breaker",crash;status-ingame,ingame,2020-12-15 17:03:59.000 -,"Brick Breaker",nvdec;online;status-playable,playable,2020-12-15 18:26:23.000 -,"Bridge 3",status-playable,playable,2020-10-08 20:47:24.000 -,"Bridge Constructor: The Walking Dead",gpu;slow;status-ingame,ingame,2020-12-11 17:31:32.000 -010011000EA7A000,"Brigandine: The Legend of Runersia",status-playable,playable,2021-06-20 06:52:25.000 -0100703011258000,"Brigandine: The Legend of Runersia Demo",status-playable,playable,2021-02-14 14:44:10.000 -01000BF00BE40000,"Bring Them Home",UE4;status-playable,playable,2021-04-12 14:14:43.000 -010060A00B53C000,"Broforce",ldn-untested;online;status-playable,playable,2021-05-28 12:23:38.000 -0100EDD0068A6000,"Broken Age",status-playable,playable,2021-06-04 17:40:32.000 -,"Broken Lines",status-playable,playable,2020-10-16 00:01:37.000 -01001E60085E6000,"Broken Sword 5 - the Serpent's Curse",status-playable,playable,2021-06-04 17:28:59.000 -0100F19011226000,"Brotherhood United Demo",demo;status-playable,playable,2021-02-14 21:10:57.000 -01000D500D08A000,"Brothers: A Tale of Two Sons",status-playable;nvdec;UE4,playable,2022-07-19 14:02:22.000 -,"Brunch Club",status-playable,playable,2020-06-24 13:54:07.000 -010010900F7B4000,"Bubble Bobble 4 Friends",nvdec;status-playable,playable,2021-06-04 15:27:55.000 -0100DBE00C554000,"Bubsy: Paws on Fire!",slow;status-ingame,ingame,2023-08-24 02:44:51.000 -,"Bucket Knight",crash;status-ingame,ingame,2020-09-04 13:11:24.000 -0100F1B010A90000,"Bucket Knight demo",demo;status-playable,playable,2021-02-14 21:23:09.000 -01000D200AC0C000,"Bud Spencer & Terence Hill - Slaps and Beans",status-playable,playable,2022-07-17 12:37:00.000 -,"Bug Fables",status-playable,playable,2020-06-09 11:27:00.000 -01003DD00D658000,"BULLETSTORM: DUKE OF SWITCH EDITION",status-playable;nvdec,playable,2022-03-03 08:30:24.000 -,"BurgerTime Party!",slow;status-playable,playable,2020-11-21 14:11:53.000 -01005780106E8000,"BurgerTime Party! Demo",demo;status-playable,playable,2021-02-14 21:34:16.000 -,"Buried Stars",status-playable,playable,2020-09-07 14:11:58.000 -0100DBF01000A000,"Burnout Paradise Remastered",nvdec;online;status-playable,playable,2021-06-13 02:54:46.000 -,"Bury me, my Love",status-playable,playable,2020-11-07 12:47:37.000 -010030D012FF6000,"Bus Driver Simulator",status-playable,playable,2022-10-17 13:55:27.000 -,"BUSTAFELLOWS",nvdec;status-playable,playable,2020-10-17 20:04:41.000 -,"BUTCHER",status-playable,playable,2021-01-11 18:50:17.000 -0100E24004510000,"Cabela's: The Hunt - Championship Edition",status-menus;32-bit,menus,2022-07-21 20:21:25.000 -01000B900D8B0000,"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda",slow;status-playable;nvdec,playable,2024-04-01 22:43:40.000 -,"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600",demo;gpu;nvdec;status-ingame,ingame,2021-02-14 21:48:15.000 -,"Café Enchanté",status-playable,playable,2020-11-13 14:54:25.000 -010060400D21C000,"Cafeteria Nipponica Demo",demo;status-playable,playable,2021-02-14 22:11:35.000 -0100699012F82000,"Cake Bash Demo",crash;demo;status-ingame,ingame,2021-02-14 22:21:15.000 -01004FD00D66A000,"Caladrius Blaze",deadlock;status-nothing;nvdec,nothing,2022-12-07 16:44:37.000 -,"Calculation Castle: Greco's Ghostly Challenge ""Addition",32-bit;status-playable,playable,2020-11-01 23:40:11.000 -,"Calculation Castle: Greco's Ghostly Challenge ""Division",32-bit;status-playable,playable,2020-11-01 23:54:55.000 -,"Calculation Castle: Greco's Ghostly Challenge ""Multiplication",32-bit;status-playable,playable,2020-11-02 00:04:33.000 -,"Calculation Castle: Greco's Ghostly Challenge ""Subtraction",32-bit;status-playable,playable,2020-11-01 23:47:42.000 -010004701504A000,"Calculator",status-playable,playable,2021-06-11 13:27:20.000 -010013A00E750000,"Calico",status-playable,playable,2022-10-17 14:44:28.000 -010046000EE40000,"Call of Cthulhu",status-playable;nvdec;UE4,playable,2022-12-18 03:08:30.000 -0100B4700BFC6000,"Call of Juarez: Gunslinger",gpu;status-ingame;nvdec,ingame,2022-09-17 16:49:46.000 -0100593008BDC000,"Can't Drive This",status-playable,playable,2022-10-22 14:55:17.000 -,"Candle - The Power of the Flame",nvdec;status-playable,playable,2020-05-26 12:10:20.000 -01001E0013208000,"Capcom Arcade Stadium",status-playable,playable,2021-03-17 05:45:14.000 -,"Capcom Beat 'Em Up Bundle",status-playable,playable,2020-03-23 18:31:24.000 -0100F6400A77E000,"CAPCOM BELT ACTION COLLECTION",status-playable;online;ldn-untested,playable,2022-07-21 20:51:23.000 -01009BF0072D4000,"Captain Toad: Treasure Tracker",32-bit;status-playable,playable,2024-04-25 00:50:16.000 -01002C400B6B6000,"Captain Toad: Treasure Tracker Demo",32-bit;demo;status-playable,playable,2021-02-14 22:36:09.000 -0100EAE010560000,"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS",status-playable;online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50.000 -01002320137CC000,"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",slow;status-playable,playable,2021-02-14 22:45:35.000 -,"Car Mechanic Manager",status-playable,playable,2020-07-23 18:50:17.000 -01007BD00AE70000,"Car Quest",deadlock;status-menus,menus,2021-11-18 08:59:18.000 -0100DA70115E6000,"Caretaker",status-playable,playable,2022-10-04 14:52:24.000 -0100DD6014870000,"Cargo Crew Driver",status-playable,playable,2021-04-19 12:54:22.000 -010088C0092FE000,"Carnival Games",status-playable;nvdec,playable,2022-07-21 21:01:22.000 -,"Carnivores: Dinosaur Hunt",status-playable,playable,2022-12-14 18:46:06.000 -,"CARRION",crash;status-nothing,nothing,2020-08-13 17:15:12.000 -01008D1001512000,"Cars 3 Driven to Win",gpu;status-ingame,ingame,2022-07-21 21:21:05.000 -0100810012A1A000,"Carto",status-playable,playable,2022-09-04 15:37:06.000 -0100C4E004406000,"Cartoon Network Adventure Time: Pirates of the Enchiridion",status-playable;nvdec,playable,2022-07-21 21:49:01.000 -0100085003A2A000,"Cartoon Network Battle Crashers",status-playable,playable,2022-07-21 21:55:40.000 -0100C4C0132F8000,"CASE 2: Animatronics Survival",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03.000 -010066F01A0E0000,"Cassette Beasts",status-playable,playable,2024-07-22 20:38:43.000 -010001300D14A000,"Castle Crashers Remastered",gpu;status-boots,boots,2024-08-10 09:21:20.000 -0100F6D01060E000,"Castle Crashers Remastered Demo",gpu;status-boots;demo,boots,2022-04-10 10:57:10.000 -01003C100445C000,"Castle of Heart",status-playable;nvdec,playable,2022-07-21 23:10:45.000 -0100F5500FA0E000,"Castle of No Escape 2",status-playable,playable,2022-09-13 13:51:42.000 -0100DA2011F18000,"Castle Pals",status-playable,playable,2021-03-04 21:00:33.000 -010097C00AB66000,"Castlestorm",status-playable;nvdec,playable,2022-07-21 22:49:14.000 -,"CastleStorm 2",UE4;crash;nvdec;status-boots,boots,2020-10-25 11:22:44.000 -,"Castlevania Anniversary Collection",audio;status-playable,playable,2020-05-23 11:40:29.000 -010076000C86E000,"Cat Girl Without Salad: Amuse-Bouche",status-playable,playable,2022-09-03 13:01:47.000 -,"Cat Quest",status-playable,playable,2020-04-02 23:09:32.000 -,"Cat Quest II",status-playable,playable,2020-07-06 23:52:09.000 -0100E86010220000,"Cat Quest II Demo",demo;status-playable,playable,2021-02-15 14:11:57.000 -0100BF00112C0000,"Catherine Full Body",status-playable;nvdec,playable,2023-04-02 11:00:37.000 -0100BAE0077E4000,"Catherine Full Body for Nintendo Switch (JP)",Needs Update;gpu;status-ingame,ingame,2021-02-21 18:06:11.000 -010004400B28A000,"Cattails",status-playable,playable,2021-06-03 14:36:57.000 -,"Cave Story+",status-playable,playable,2020-05-22 09:57:25.000 -01001A100C0E8000,"Caveblazers",slow;status-ingame,ingame,2021-06-09 17:57:28.000 -,"Caveman Warriors",status-playable,playable,2020-05-22 11:44:20.000 -,"Caveman Warriors Demo",demo;status-playable,playable,2021-02-15 14:44:08.000 -,"Celeste",status-playable,playable,2020-06-17 10:14:40.000 -01006B000A666000,"Cendrillon palikA",gpu;status-ingame;nvdec,ingame,2022-07-21 22:52:24.000 -01007600115CE000,"CHAOS CODE -NEW SIGN OF CATASTROPHE-",status-boots;crash;nvdec,boots,2022-04-04 12:24:21.000 -0100957016B90000,"CHAOS;HEAD NOAH",status-playable,playable,2022-06-02 22:57:19.000 -0100F52013A66000,"Charge Kid",gpu;status-boots;audout,boots,2024-02-11 01:17:47.000 -,"Chasm",status-playable,playable,2020-10-23 11:03:43.000 -010034301A556000,"Chasm: The Rift",gpu;status-ingame,ingame,2024-04-29 19:02:48.000 -0100A5900472E000,"Chess Ultra",status-playable;UE4,playable,2023-08-30 23:06:31.000 -0100E3C00A118000,"Chicken Assassin: Reloaded",status-playable,playable,2021-02-20 13:29:01.000 -,"Chicken Police - Paint it RED!",nvdec;status-playable,playable,2020-12-10 15:10:11.000 -0100F6C00A016000,"Chicken Range",status-playable,playable,2021-04-23 12:14:23.000 -,"Chicken Rider",status-playable,playable,2020-05-22 11:31:17.000 -0100CAC011C3A000,"Chickens Madness DEMO",UE4;demo;gpu;nvdec;status-ingame,ingame,2021-02-15 15:02:10.000 -,"Child of Light",nvdec;status-playable,playable,2020-12-16 10:23:10.000 -01002DE00C250000,"Children of Morta",gpu;status-ingame;nvdec,ingame,2022-09-13 17:48:47.000 -,"Children of Zodiarcs",status-playable,playable,2020-10-04 14:23:33.000 -010046F012A04000,"Chinese Parents",status-playable,playable,2021-04-08 12:56:41.000 -01006A30124CA000,"Chocobo GP",gpu;status-ingame;crash,ingame,2022-06-04 14:52:18.000 -,"Chocobo's Mystery Dungeon Every Buddy!",slow;status-playable,playable,2020-05-26 13:53:13.000 -,"Choices That Matter: And The Sun Went Out",status-playable,playable,2020-12-17 15:44:08.000 -,"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",gpu;nvdec;status-ingame,ingame,2020-09-28 17:58:04.000 -,"ChromaGun",status-playable,playable,2020-05-26 12:56:42.000 -,"Chronos",UE4;gpu;nvdec;status-ingame,ingame,2020-12-11 22:16:35.000 -,"Circle of Sumo",status-playable,playable,2020-05-22 12:45:21.000 -01008FA00D686000,"Circuits",status-playable,playable,2022-09-19 11:52:50.000 -,"Cities: Skylines - Nintendo Switch Edition",status-playable,playable,2020-12-16 10:34:57.000 -0100E4200D84E000,"Citizens of Space",gpu;status-boots,boots,2023-10-22 06:45:44.000 -0100D9C012900000,"Citizens Unite!: Earth x Space",gpu;status-ingame,ingame,2023-10-22 06:44:19.000 -01005E501284E000,"City Bus Driving Simulator",status-playable,playable,2021-06-15 21:25:59.000 -0100A3A00CC7E000,"CLANNAD",status-playable,playable,2021-06-03 17:01:02.000 -,"CLANNAD Side Stories - 01007B01372C000",status-playable,playable,2022-10-26 15:03:04.000 -01005ED0107F4000,"Clash Force",status-playable,playable,2022-10-01 23:45:48.000 -010009300AA6C000,"Claybook",slow;status-playable;nvdec;online;UE4,playable,2022-07-22 11:11:34.000 -,"Clea",crash;status-ingame,ingame,2020-12-15 16:22:56.000 -010045E0142A4000,"Clea 2",status-playable,playable,2021-04-18 14:25:18.000 -01008C100C572000,"Clock Zero ~Shuuen no Ichibyou~ Devote",status-playable;nvdec,playable,2022-12-04 22:19:14.000 -0100DF9013AD4000,"Clocker",status-playable,playable,2021-04-05 15:05:13.000 -0100B7200DAC6000,"Close to the Sun",status-boots;crash;nvdec;UE4,boots,2021-11-04 09:19:41.000 -010047700D540000,"Clubhouse Games: 51 Worldwide Classics",status-playable;ldn-works,playable,2024-05-21 16:12:57.000 -,"Clue",crash;online;status-menus,menus,2020-11-10 09:23:48.000 -,"ClusterPuck 99",status-playable,playable,2021-01-06 00:28:12.000 -010096900A4D2000,"Clustertruck",slow;status-ingame,ingame,2021-02-19 21:07:09.000 -01005790110F0000,"Cobra Kai The Karate Kid Saga Continues",status-playable,playable,2021-06-17 15:59:13.000 -01002E700C366000,"COCOON",gpu;status-ingame,ingame,2024-03-06 11:33:08.000 -010034E005C9C000,"Code of Princess EX",nvdec;online;status-playable,playable,2021-06-03 10:50:13.000 -,"CODE SHIFTER",status-playable,playable,2020-08-09 15:20:55.000 -010002400F408000,"Code: Realize ~Future Blessings~",status-playable;nvdec,playable,2023-03-31 16:57:47.000 -0100CF800C810000,"Coffee Crisis",status-playable,playable,2021-02-20 12:34:52.000 -,"Coffee Talk",status-playable,playable,2020-08-10 09:48:44.000 -0100178009648000,"Coffin Dodgers",status-playable,playable,2021-02-20 14:57:41.000 -010035B01706E000,"Cold Silence",cpu;status-nothing;crash,nothing,2024-07-11 17:06:14.000 -010083E00F40E000,"Collar X Malice",status-playable;nvdec,playable,2022-10-02 11:51:56.000 -0100E3B00F412000,"Collar X Malice -Unlimited-",status-playable;nvdec,playable,2022-10-04 15:30:40.000 -,"Collection of Mana",status-playable,playable,2020-10-19 19:29:45.000 -,"COLLECTION of SaGA FINAL FANTASY LEGEND",status-playable,playable,2020-12-30 19:11:16.000 -010030800BC36000,"Collidalot",status-playable;nvdec,playable,2022-09-13 14:09:27.000 -,"Color Zen",status-playable,playable,2020-05-22 10:56:17.000 -,"Colorgrid",status-playable,playable,2020-10-04 01:50:52.000 -0100A7000BD28000,"Coloring Book",status-playable,playable,2022-07-22 11:17:05.000 -010020500BD86000,"Colors Live",gpu;services;status-boots;crash,boots,2023-02-26 02:51:07.000 -0100E2F0128B4000,"Colossus Down",status-playable,playable,2021-02-04 20:49:50.000 -0100C4D00D16A000,"Commander Keen in Keen Dreams",gpu;status-ingame,ingame,2022-08-04 20:34:20.000 -0100E400129EC000,"Commander Keen in Keen Dreams: Definitive Edition",status-playable,playable,2021-05-11 19:33:54.000 -010065A01158E000,"Commandos 2 HD Remaster",gpu;status-ingame;nvdec,ingame,2022-08-10 21:52:27.000 -010015801308E000,"CONARIUM",UE4;nvdec;status-playable,playable,2021-04-26 17:57:53.000 -0100971011224000,"Concept Destruction",status-playable,playable,2022-09-29 12:28:56.000 -010043700C9B0000,"Conduct TOGETHER!",nvdec;status-playable,playable,2021-02-20 12:59:00.000 -,"Conga Master Party!",status-playable,playable,2020-05-22 13:22:24.000 -,"Connection Haunted",slow;status-playable,playable,2020-12-10 18:57:14.000 -0100A5600FAC0000,"Construction Simulator 3 - Console Edition",status-playable,playable,2023-02-06 09:31:23.000 -,"Constructor Plus",status-playable,playable,2020-05-26 12:37:40.000 -0100DCA00DA7E000,"Contra Anniversary Collection",status-playable,playable,2022-07-22 11:30:12.000 -,"CONTRA: ROGUE CORPS",crash;nvdec;regression;status-menus,menus,2021-01-07 13:23:35.000 -0100B8200ECA6000,"CONTRA: ROGUE CORPS Demo",gpu;status-ingame,ingame,2022-09-04 16:46:52.000 -01007D701298A000,"Contraptions",status-playable,playable,2021-02-08 18:40:50.000 -0100041013360000,"Control Ultimate Edition - Cloud Version",Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:34:06.000 -,"Convoy",status-playable,playable,2020-10-15 14:43:50.000 -0100B82010B6C000,"Cook, Serve, Delicious! 3?!",status-playable,playable,2022-10-09 12:09:34.000 -010060700EFBA000,"Cooking Mama: Cookstar",status-menus;crash;loader-allocator,menus,2021-11-20 03:19:35.000 -01001E400FD58000,"Cooking Simulator",status-playable,playable,2021-04-18 13:25:23.000 -,"Cooking Tycoons 2: 3 in 1 Bundle",status-playable,playable,2020-11-16 22:19:33.000 -,"Cooking Tycoons: 3 in 1 Bundle",status-playable,playable,2020-11-16 22:44:26.000 -,"Copperbell",status-playable,playable,2020-10-04 15:54:36.000 -010016400B1FE000,"Corpse Party: Blood Drive",nvdec;status-playable,playable,2021-03-01 12:44:23.000 -0100CCB01B1A0000,"Cosmic Fantasy Collection",status-ingame,ingame,2024-05-21 17:56:37.000 -010067C00A776000,"Cosmic Star Heroine",status-playable,playable,2021-02-20 14:30:47.000 -01003DD00F94A000,"COTTOn Reboot! [ コットン リブート! ]",status-playable,playable,2022-05-24 16:29:24.000 -,"Cotton/Guardian Saturn Tribute Games",gpu;status-boots,boots,2022-11-27 21:00:51.000 -01000E301107A000,"Couch Co-Op Bundle Vol. 2",status-playable;nvdec,playable,2022-10-02 12:04:21.000 -0100C1E012A42000,"Country Tales",status-playable,playable,2021-06-17 16:45:39.000 -01003370136EA000,"Cozy Grove",gpu;status-ingame,ingame,2023-07-30 22:22:19.000 -010073401175E000,"Crash Bandicoot 4: It's About Time",status-playable;nvdec;UE4,playable,2024-03-17 07:13:45.000 -0100D1B006744000,"Crash Bandicoot N. Sane Trilogy",status-playable,playable,2024-02-11 11:38:14.000 -,"Crash Drive 2",online;status-playable,playable,2020-12-17 02:45:46.000 -,"Crash Dummy",nvdec;status-playable,playable,2020-05-23 11:12:43.000 -0100F9F00C696000,"Crash Team Racing Nitro-Fueled",gpu;status-ingame;nvdec;online-broken,ingame,2023-06-25 02:40:17.000 -0100BF200CD74000,"Crashbots",status-playable,playable,2022-07-22 13:50:52.000 -010027100BD16000,"Crashlands",status-playable,playable,2021-05-27 20:30:06.000 -,"Crawl",status-playable,playable,2020-05-22 10:16:05.000 -0100C66007E96000,"Crayola Scoot",status-playable;nvdec,playable,2022-07-22 14:01:55.000 -01005BA00F486000,"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",status-playable,playable,2021-07-21 10:41:33.000 -,"Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!",services;status-menus,menus,2020-03-20 14:00:57.000 -,"Crazy Strike Bowling EX",UE4;gpu;nvdec;status-ingame,ingame,2020-08-07 18:15:59.000 -,"Crazy Zen Mini Golf",status-playable,playable,2020-08-05 14:00:00.000 -,"Creaks",status-playable,playable,2020-08-15 12:20:52.000 -,"Creature in the Well",UE4;gpu;status-ingame,ingame,2020-11-16 12:52:40.000 -,"Creepy Tale",status-playable,playable,2020-12-15 21:58:03.000 -,"Cresteaju",gpu;status-ingame,ingame,2021-03-24 10:46:06.000 -010022D00D4F0000,"Cricket 19",gpu;status-ingame,ingame,2021-06-14 14:56:07.000 -0100387017100000,"Cricket 22",status-boots;crash,boots,2023-10-18 08:01:57.000 -01005640080B0000,"Crimsonland",status-playable,playable,2021-05-27 20:50:54.000 -0100B0400EBC4000,"Cris Tales",crash;status-ingame,ingame,2021-07-29 15:10:53.000 -01004BC0166CC000,"CRISIS CORE –FINAL FANTASY VII– REUNION",status-playable,playable,2022-12-19 15:53:59.000 -,"Croc's World",status-playable,playable,2020-05-22 11:21:09.000 -,"Croc's World 2",status-playable,playable,2020-12-16 20:01:40.000 -,"Croc's World 3",status-playable,playable,2020-12-30 18:53:26.000 -01000F0007D92000,"Croixleur Sigma",status-playable;online,playable,2022-07-22 14:26:54.000 -01003D90058FC000,"CrossCode",status-playable,playable,2024-02-17 10:23:19.000 -0100B1E00AA56000,"Crossing Souls",nvdec;status-playable,playable,2021-02-20 15:42:54.000 -0100059012BAE000,"Crown Trick",status-playable,playable,2021-06-16 19:36:29.000 -0100B41013C82000,"Cruis'n Blast",gpu;status-ingame,ingame,2023-07-30 10:33:47.000 -01000CC01C108000,"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",status-playable;demo,playable,2023-08-06 05:33:21.000 -0100CEA007D08000,"Crypt of the Necrodancer",status-playable;nvdec,playable,2022-11-01 09:52:06.000 -0100582010AE0000,"Crysis 2 Remastered",deadlock;status-menus,menus,2023-09-21 10:46:17.000 -0100CD3010AE2000,"Crysis 3 Remastered",deadlock;status-menus,menus,2023-09-10 16:03:50.000 -0100E66010ADE000,"Crysis Remastered",status-menus;nvdec,menus,2024-08-13 05:23:24.000 -0100972008234000,"Crystal Crisis",nvdec;status-playable,playable,2021-02-20 13:52:44.000 -,"Cthulhu Saves Christmas",status-playable,playable,2020-12-14 00:58:55.000 -010001600D1E8000,"Cube Creator X",status-menus;crash,menus,2021-11-25 08:53:28.000 -010082E00F1CE000,"Cubers: Arena",status-playable;nvdec;UE4,playable,2022-10-04 16:05:40.000 -010040D011D04000,"Cubicity",status-playable,playable,2021-06-14 14:19:51.000 -0100A5C00D162000,"Cuphead",status-playable,playable,2022-02-01 22:45:55.000 -0100F7E00DFC8000,"Cupid Parasite",gpu;status-ingame,ingame,2023-08-21 05:52:36.000 -,"Curious Cases",status-playable,playable,2020-08-10 09:30:48.000 -0100D4A0118EA000,"Curse of the Dead Gods",status-playable,playable,2022-08-30 12:25:38.000 -0100CE5014026000,"Curved Space",status-playable,playable,2023-01-14 22:03:50.000 -,"Cyber Protocol",nvdec;status-playable,playable,2020-09-28 14:47:40.000 -0100C1F0141AA000,"Cyber Shadow",status-playable,playable,2022-07-17 05:37:41.000 -01006B9013672000,"Cybxus Heart",gpu;slow;status-ingame,ingame,2022-01-15 05:00:49.000 -010063100B2C2000,"Cytus α",nvdec;status-playable,playable,2021-02-20 13:40:46.000 -0100B6400CA56000,"DAEMON X MACHINA",UE4;audout;ldn-untested;nvdec;status-playable,playable,2021-06-09 19:22:29.000 -010061300DF48000,"Dairoku: Ayakashimori",status-nothing;Needs Update;loader-allocator,nothing,2021-11-30 05:09:38.000 -0100BD2009A1C000,"Damsel",status-playable,playable,2022-09-06 11:54:39.000 -,"Dandara",status-playable,playable,2020-05-26 12:42:33.000 -,"Dandy Dungeon: Legend of Brave Yamada",status-playable,playable,2021-01-06 09:48:47.000 -01003ED0099B0000,"Danger Mouse",status-boots;crash;online,boots,2022-07-22 15:49:45.000 -,"Danger Scavenger -",nvdec;status-playable,playable,2021-04-17 15:53:04.000 -,"Danmaku Unlimited 3",status-playable,playable,2020-11-15 00:48:35.000 -,"Darius Cozmic Collection",status-playable,playable,2021-02-19 20:59:06.000 -010059C00BED4000,"Darius Cozmic Collection Special Edition",status-playable,playable,2022-07-22 16:26:50.000 -010015800F93C000,"Dariusburst - Another Chronicle EX+",online;status-playable,playable,2021-04-05 14:21:43.000 -01003D301357A000,"Dark Arcana: The Carnival",gpu;slow;status-ingame,ingame,2022-02-19 08:52:28.000 -010083A00BF6C000,"Dark Devotion",status-playable;nvdec,playable,2022-08-09 09:41:18.000 -,"Dark Quest 2",status-playable,playable,2020-11-16 21:34:52.000 -01004AB00A260000,"DARK SOULS™: REMASTERED",gpu;status-ingame;nvdec;online-broken,ingame,2024-04-09 19:47:58.000 -,"Dark Witch Music Episode: Rudymical",status-playable,playable,2020-05-22 09:44:44.000 -01008F1008DA6000,"Darkest Dungeon",status-playable;nvdec,playable,2022-07-22 18:49:18.000 -0100F2300D4BA000,"Darksiders Genesis",status-playable;nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25.000 -010071800BA98000,"Darksiders II Deathinitive Edition",gpu;status-ingame;nvdec;online-broken,ingame,2024-06-26 00:37:25.000 -0100E1400BA96000,"Darksiders Warmastered Edition",status-playable;nvdec,playable,2023-03-02 18:08:09.000 -,"Darkwood",status-playable,playable,2021-01-08 21:24:06.000 -0100440012FFA000,"DARQ Complete Edition",audout;status-playable,playable,2021-04-07 15:26:21.000 -0100BA500B660000,"Darts Up",status-playable,playable,2021-04-14 17:22:22.000 -0100F0B0081DA000,"Dawn of the Breakers",status-menus;online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03.000 -,"Day and Night",status-playable,playable,2020-12-17 12:30:51.000 -,"De Blob",nvdec;status-playable,playable,2021-01-06 17:34:46.000 -,"de Blob 2",nvdec;status-playable,playable,2021-01-06 13:00:16.000 -01008E900471E000,"De Mambo",status-playable,playable,2021-04-10 12:39:40.000 -01004C400CF96000,"Dead by Daylight",status-boots;nvdec;online-broken;UE4,boots,2022-09-13 14:32:13.000 -0100646009FBE000,"Dead Cells",status-playable,playable,2021-09-22 22:18:49.000 -01004C500BD40000,"Dead End Job",status-playable;nvdec,playable,2022-09-19 12:48:44.000 -01009CC00C97C000,"DEAD OR ALIVE Xtreme 3 Scarlet",status-playable,playable,2022-07-23 17:05:06.000 -0100A5000F7AA000,"DEAD OR SCHOOL",status-playable;nvdec,playable,2022-09-06 12:04:09.000 -0100A24011F52000,"Dead Z Meat",UE4;services;status-ingame,ingame,2021-04-14 16:50:16.000 -,"Deadly Days",status-playable,playable,2020-11-27 13:38:55.000 -0100BAC011928000,"Deadly Premonition 2",status-playable,playable,2021-06-15 14:12:36.000 -0100EBE00F22E000,"DEADLY PREMONITION Origins",32-bit;status-playable;nvdec,playable,2024-03-25 12:47:46.000 -,"Dear Magi - Mahou Shounen Gakka -",status-playable,playable,2020-11-22 16:45:16.000 -,"Death and Taxes",status-playable,playable,2020-12-15 20:27:49.000 -010012B011AB2000,"Death Come True",nvdec;status-playable,playable,2021-06-10 22:30:49.000 -0100F3B00CF32000,"Death Coming",status-nothing;crash,nothing,2022-02-06 07:43:03.000 -0100AEC013DDA000,"Death end re;Quest",status-playable,playable,2023-07-09 12:19:54.000 -,"Death Mark",status-playable,playable,2020-12-13 10:56:25.000 -0100423009358000,"Death Road to Canada",gpu;audio;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:26.000 -,"Death Squared",status-playable,playable,2020-12-04 13:00:15.000 -,"Death Tales",status-playable,playable,2020-12-17 10:55:52.000 -0100492011A8A000,"Death's Hangover",gpu;status-boots,boots,2023-08-01 22:38:06.000 -01009120119B4000,"Deathsmiles I・II",status-playable,playable,2024-04-08 19:29:00.000 -010034F00BFC8000,"Debris Infinity",nvdec;online;status-playable,playable,2021-05-28 12:14:39.000 -010027700FD2E000,"Decay of Logos",status-playable;nvdec,playable,2022-09-13 14:42:13.000 -0100EF0015A9A000,"Deedlit in Wonder Labyrinth",deadlock;status-ingame;Needs Update;Incomplete,ingame,2022-01-19 10:00:59.000 -01002CC0062B8000,"Deemo",status-playable,playable,2022-07-24 11:34:33.000 -01008B10132A2000,"DEEMO -Reborn-",status-playable;nvdec;online-broken,playable,2022-10-17 15:18:11.000 -010026800FA88000,"Deep Diving Adventures",status-playable,playable,2022-09-22 16:43:37.000 -,"Deep Ones",services;status-nothing,nothing,2020-04-03 02:54:19.000 -0100C3E00D68E000,"Deep Sky Derelicts Definitive Edition",status-playable,playable,2022-09-27 11:21:08.000 -,"Deep Space Rush",status-playable,playable,2020-07-07 23:30:33.000 -0100961011BE6000,"DeepOne",services-horizon;status-nothing;Needs Update,nothing,2024-01-18 15:01:05.000 -01008BB00F824000,"Defenders of Ekron - Definitive Edition",status-playable,playable,2021-06-11 16:31:03.000 -0100CDE0136E6000,"Defentron",status-playable,playable,2022-10-17 15:47:56.000 -,"Defunct",status-playable,playable,2021-01-08 21:33:46.000 -,"Degrees of Separation",status-playable,playable,2021-01-10 13:40:04.000 -010071C00CBA4000,"Dei Gratia no Rashinban",crash;status-nothing,nothing,2021-07-13 02:25:32.000 -,"Deleveled",slow;status-playable,playable,2020-12-15 21:02:29.000 -010023800D64A000,"DELTARUNE Chapter 1",status-playable,playable,2023-01-22 04:47:44.000 -010038B01D2CA000,"Dementium: The Ward (Dementium Remastered)",status-boots;crash,boots,2024-09-02 08:28:14.000 -0100AB600ACB4000,"Demetrios - The BIG Cynical Adventure",status-playable,playable,2021-06-04 12:01:01.000 -010099D00D1A4000,"Demolish & Build",status-playable,playable,2021-06-13 15:27:26.000 -010084600F51C000,"Demon Pit",status-playable;nvdec,playable,2022-09-19 13:35:15.000 -0100A2B00BD88000,"Demon's Crystals",status-nothing;crash;regression,nothing,2022-12-07 16:33:17.000 -,"Demon's Rise",status-playable,playable,2020-07-29 12:26:27.000 -0100E29013818000,"Demon's Rise - Lords of Chaos",status-playable,playable,2021-04-06 16:20:06.000 -0100161011458000,"Demon's Tier+",status-playable,playable,2021-06-09 17:25:36.000 -0100BE800E6D8000,"DEMON'S TILT",status-playable,playable,2022-09-19 13:22:46.000 -,"Demong Hunter",status-playable,playable,2020-12-12 15:27:08.000 -0100BC501355A000,"Densha de go!! Hashirou Yamanote Sen",status-playable;nvdec;UE4,playable,2023-11-09 07:47:58.000 -,"Depixtion",status-playable,playable,2020-10-10 18:52:37.000 -01000BF00B6BC000,"Deployment",slow;status-playable;online-broken,playable,2022-10-17 16:23:59.000 -010023600C704000,"Deponia",nvdec;status-playable,playable,2021-01-26 17:17:19.000 -,"DERU - The Art of Cooperation",status-playable,playable,2021-01-07 16:59:59.000 -,"Descenders",gpu;status-ingame,ingame,2020-12-10 15:22:36.000 -,"Desire remaster ver.",crash;status-boots,boots,2021-01-17 02:34:37.000 -,"DESTINY CONNECT",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 12:20:36.000 -01008BB011ED6000,"Destrobots",status-playable,playable,2021-03-06 14:37:05.000 -01009E701356A000,"Destroy All Humans!",gpu;status-ingame;nvdec;UE4,ingame,2023-01-14 22:23:53.000 -010030600E65A000,"Detective Dolittle",status-playable,playable,2021-03-02 14:03:59.000 -01009C0009842000,"Detective Gallo",status-playable;nvdec,playable,2022-07-24 11:51:04.000 -,"Detective Jinguji Saburo Prism of Eyes",status-playable,playable,2020-10-02 21:54:41.000 -010007500F27C000,"Detective Pikachu Returns",status-playable,playable,2023-10-07 10:24:59.000 -010031B00CF66000,"Devil Engine",status-playable,playable,2021-06-04 11:54:30.000 -01002F000E8F2000,"Devil Kingdom",status-playable,playable,2023-01-31 08:58:44.000 -,"Devil May Cry",nvdec;status-playable,playable,2021-01-04 19:43:08.000 -01007CF00D5BA000,"Devil May Cry 2",status-playable;nvdec,playable,2023-01-24 23:03:20.000 -01007B600D5BC000,"Devil May Cry 3 Special Edition",status-playable;nvdec,playable,2024-07-08 12:33:23.000 -01003C900EFF6000,"Devil Slayer - Raksasi",status-playable,playable,2022-10-26 19:42:32.000 -01009EA00A320000,"Devious Dungeon",status-playable,playable,2021-03-04 13:03:06.000 -,"Dex",nvdec;status-playable,playable,2020-08-12 16:48:12.000 -,"Dexteritrip",status-playable,playable,2021-01-06 12:51:12.000 -0100AFC00E06A000,"Dezatopia",online;status-playable,playable,2021-06-15 21:06:11.000 -0100726014352000,"Diablo 2 Resurrected",gpu;status-ingame;nvdec,ingame,2023-08-18 18:42:47.000 -01001B300B9BE000,"Diablo III: Eternal Collection",status-playable;online-broken;ldn-works,playable,2023-08-21 23:48:03.000 -0100F73011456000,"Diabolic",status-playable,playable,2021-06-11 14:45:08.000 -010027400BD24000,"DIABOLIK LOVERS CHAOS LINEAGE",gpu;status-ingame;Needs Update,ingame,2023-06-08 02:20:44.000 -0100BBF011394000,"Dicey Dungeons",gpu;audio;slow;status-ingame,ingame,2023-08-02 20:30:12.000 -,"Die for Valhalla!",status-playable,playable,2021-01-06 16:09:14.000 -0100BB900B5B4000,"Dies irae Amantes amentes For Nintendo Switch",status-nothing;32-bit;crash,nothing,2022-02-16 07:09:05.000 -0100A5A00DBB0000,"Dig Dog",gpu;status-ingame,ingame,2021-06-02 17:17:51.000 -010035D0121EC000,"Digerati Presents: The Dungeon Crawl Vol. 1",slow;status-ingame,ingame,2021-04-18 14:04:55.000 -010014E00DB56000,"Digimon Story Cyber Sleuth: Complete Edition",status-playable;nvdec;opengl,playable,2022-09-13 15:02:37.000 -0100F00014254000,"Digimon World: Next Order",status-playable,playable,2023-05-09 20:41:06.000 -,"Ding Dong XL",status-playable,playable,2020-07-14 16:13:19.000 -,"Dininho Adventures",status-playable,playable,2020-10-03 17:25:51.000 -010027E0158A6000,"Dininho Space Adventure",status-playable,playable,2023-01-14 22:43:04.000 -0100A8A013DA4000,"Dirt Bike Insanity",status-playable,playable,2021-01-31 13:27:38.000 -01004CB01378A000,"Dirt Trackin Sprint Cars",status-playable;nvdec;online-broken,playable,2022-10-17 16:34:56.000 -0100918014B02000,"Disagaea 6: Defiance of Destiny Demo",status-playable;demo,playable,2022-10-26 20:02:04.000 -010020700E2A2000,"Disaster Report 4: Summer Memories",status-playable;nvdec;UE4,playable,2022-09-27 19:41:31.000 -0100510004D2C000,"Disc Jam",UE4;ldn-untested;nvdec;online;status-playable,playable,2021-04-08 16:40:35.000 -,"Disco Dodgeball Remix",online;status-playable,playable,2020-09-28 23:24:49.000 -01004B100AF18000,"Disgaea 1 Complete",status-playable,playable,2023-01-30 21:45:23.000 -,"Disgaea 4 Complete Plus",gpu;slow;status-playable,playable,2020-02-18 10:54:28.000 -010068C00F324000,"Disgaea 4 Complete+ Demo",status-playable;nvdec,playable,2022-09-13 15:21:59.000 -01005700031AE000,"Disgaea 5 Complete",nvdec;status-playable,playable,2021-03-04 15:32:54.000 -0100ABC013136000,"Disgaea 6: Defiance of Destiny",deadlock;status-ingame,ingame,2023-04-15 00:50:32.000 -0100307011D80000,"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",status-playable,playable,2021-06-08 13:20:33.000 -01005EE013888000,"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",gpu;status-ingame;demo,ingame,2022-12-06 15:27:59.000 -01000B70122A2000,"Disjunction",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24.000 -0100A2F00EEFC000,"Disney Classic Games: Aladdin and The Lion King",status-playable;online-broken,playable,2022-09-13 15:44:17.000 -0100DA201EBF8000,"Disney Epic Mickey: Rebrushed",status-ingame;crash,ingame,2024-09-26 22:11:51.000 -0100F0401435E000,"Disney SpeedStorm",services;status-boots,boots,2023-11-27 02:15:32.000 -,"Disney Tsum Tsum Festival",crash;status-menus,menus,2020-07-14 14:05:28.000 -,"DISTRAINT 2",status-playable,playable,2020-09-03 16:08:12.000 -,"DISTRAINT: Deluxe Edition",status-playable,playable,2020-06-15 23:42:24.000 -010027400CDC6000,"Divinity Original Sin 2",services;status-menus;crash;online-broken;regression,menus,2023-08-13 17:20:03.000 -01001770115C8000,"Dodo Peak",status-playable;nvdec;UE4,playable,2022-10-04 16:13:05.000 -01005A001489A000,"DoDonPachi Resurrection - 怒首領蜂大復活",status-ingame;32-bit;crash,ingame,2024-01-25 14:37:32.000 -,"Dogurai",status-playable,playable,2020-10-04 02:40:16.000 -010048100D51A000,"Dokapon Up! Mugen no Roulette",gpu;status-menus;Needs Update,menus,2022-12-08 19:39:10.000 -,"Dokuro",nvdec;status-playable,playable,2020-12-17 14:47:09.000 -010007200AC0E000,"Don't Die Mr. Robot DX",status-playable;nvdec,playable,2022-09-02 18:34:38.000 -0100E470067A8000,"Don't Knock Twice",status-playable,playable,2024-05-08 22:37:58.000 -0100C4D00B608000,"Don't Sink",gpu;status-ingame,ingame,2021-02-26 15:41:11.000 -0100751007ADA000,"Don't Starve",status-playable;nvdec,playable,2022-02-05 20:43:34.000 -010088B010DD2000,"Dongo Adventure",status-playable,playable,2022-10-04 16:22:26.000 -0100C1F0051B6000,"Donkey Kong Country Tropical Freeze",status-playable,playable,2024-08-05 16:46:10.000 -,"Doodle Derby",status-boots,boots,2020-12-04 22:51:48.000 -0100416004C00000,"DOOM",gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-09-23 15:40:07.000 -010018900DD00000,"DOOM (1993)",status-menus;nvdec;online-broken,menus,2022-09-06 13:32:19.000 -01008CB01E52E000,"DOOM + DOOM II",status-playable;opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01.000 -0100D4F00DD02000,"DOOM 2",nvdec;online;status-playable,playable,2021-06-03 20:10:01.000 -010029D00E740000,"DOOM 3",status-menus;crash,menus,2024-08-03 05:25:47.000 -,"DOOM 64",nvdec;status-playable;vulkan,playable,2020-10-13 23:47:28.000 -0100B1A00D8CE000,"DOOM Eternal",gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-08-28 15:57:17.000 -01005ED00CD70000,"Door Kickers: Action Squad",status-playable;online-broken;ldn-broken,playable,2022-09-13 16:28:53.000 -,"DORAEMON STORY OF SEASONS",nvdec;status-playable,playable,2020-07-13 20:28:11.000 -,"Double Cross",status-playable,playable,2021-01-07 15:34:22.000 -,"Double Dragon & Kunio-Kun: Retro Brawler Bundle",status-playable,playable,2020-09-01 12:48:46.000 -01001AD00E49A000,"DOUBLE DRAGON Ⅲ: The Sacred Stones",online;status-playable,playable,2021-06-11 15:41:44.000 -01005B10132B2000,"Double Dragon Neon",gpu;audio;status-ingame;32-bit,ingame,2022-09-20 18:00:20.000 -,"Double Kick Heroes",gpu;status-ingame,ingame,2020-10-03 14:33:59.000 -0100A5D00C7C0000,"Double Pug Switch",status-playable;nvdec,playable,2022-10-10 10:59:35.000 -0100FC000EE10000,"Double Switch - 25th Anniversary Edition",status-playable;nvdec,playable,2022-09-19 13:41:50.000 -0100B6600FE06000,"Down to Hell",gpu;status-ingame;nvdec,ingame,2022-09-19 14:01:26.000 -010093D00C726000,"Downwell",status-playable,playable,2021-04-25 20:05:24.000 -0100ED000D390000,"Dr Kawashima's Brain Training",services;status-ingame,ingame,2023-06-04 00:06:46.000 -,"Dracula's Legacy",nvdec;status-playable,playable,2020-12-10 13:24:25.000 -,"DragoDino",gpu;nvdec;status-ingame,ingame,2020-08-03 20:49:16.000 -0100DBC00BD5A000,"Dragon Audit",crash;status-ingame,ingame,2021-05-16 14:24:46.000 -0100A250097F0000,"DRAGON BALL FighterZ",UE4;ldn-broken;nvdec;online;status-playable,playable,2021-06-11 16:19:04.000 -010078D000F88000,"Dragon Ball Xenoverse 2",gpu;status-ingame;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01.000 -010051C0134F8000,"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",status-playable;vulkan-backend-bug,playable,2024-08-28 00:03:50.000 -010089700150E000,"Dragon Marked for Death: Frontline Fighters (Empress & Warrior)",status-playable;ldn-untested;audout,playable,2022-03-10 06:44:34.000 -0100EFC00EFB2000,"Dragon Quest",gpu;status-boots,boots,2021-11-09 03:31:32.000 -010008900705C000,"Dragon Quest Builders",gpu;status-ingame;nvdec,ingame,2023-08-14 09:54:36.000 -010042000A986000,"Dragon Quest Builders 2",status-playable,playable,2024-04-19 16:36:38.000 -0100CD3000BDC000,"Dragon Quest Heroes I + II (JP)",nvdec;status-playable,playable,2021-04-08 14:27:16.000 -010062200EFB4000,"Dragon Quest II: Luminaries of the Legendary Line",status-playable,playable,2022-09-13 16:44:11.000 -01003E601E324000,"Dragon Quest III HD-2D Remake",status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27.000 -010015600EFB6000,"Dragon Quest III: The Seeds of Salvation",gpu;status-boots,boots,2021-11-09 03:38:34.000 -0100A77018EA0000,"DRAGON QUEST MONSTERS: The Dark Prince",status-playable,playable,2023-12-29 16:10:05.000 -0100217014266000,"Dragon Quest Treasures",gpu;status-ingame;UE4,ingame,2023-05-09 11:16:52.000 -0100E2E0152E4000,"Dragon Quest X Awakening Five Races Offline",status-playable;nvdec;UE4,playable,2024-08-20 10:04:24.000 -01006C300E9F0000,"Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition",status-playable;UE4,playable,2021-11-27 12:27:11.000 -010032C00AC58000,"Dragon's Dogma: Dark Arisen",status-playable,playable,2022-07-24 12:58:33.000 -,"Dragon's Lair Trilogy",nvdec;status-playable,playable,2021-01-13 22:12:07.000 -,"DragonBlaze for Nintendo Switch",32-bit;status-playable,playable,2020-10-14 11:11:28.000 -,"DragonFangZ",status-playable,playable,2020-09-28 21:35:18.000 -,"Dragons Dawn of New Riders",nvdec;status-playable,playable,2021-01-27 20:05:26.000 -0100F7800A434000,"Drawful 2",status-ingame,ingame,2022-07-24 13:50:21.000 -0100B7E0102E4000,"Drawngeon: Dungeons of Ink and Paper",gpu;status-ingame,ingame,2022-09-19 15:41:25.000 -,"Dream",status-playable,playable,2020-12-15 19:55:07.000 -,"Dream Alone - 0100AA0093DC000",nvdec;status-playable,playable,2021-01-27 19:41:50.000 -,"DreamBall",UE4;crash;gpu;status-ingame,ingame,2020-08-05 14:45:25.000 -010058B00F3C0000,"Dreaming Canvas",UE4;gpu;status-ingame,ingame,2021-06-13 22:50:07.000 -0100D24013466000,"Dreamo",status-playable;UE4,playable,2022-10-17 18:25:28.000 -0100236011B4C000,"DreamWorks Spirit Lucky's Big Adventure",status-playable,playable,2022-10-27 13:30:52.000 -010058C00A916000,"Drone Fight",status-playable,playable,2022-07-24 14:31:56.000 -010052000A574000,"Drowning",status-playable,playable,2022-07-25 14:28:26.000 -,"Drums",status-playable,playable,2020-12-17 17:21:51.000 -01005BC012C66000,"Duck Life Adventure",status-playable,playable,2022-10-10 11:27:03.000 -01007EF00CB88000,"Duke Nukem 3D: 20th Anniversary World Tour",32-bit;status-playable;ldn-untested,playable,2022-08-19 22:22:40.000 -010068D0141F2000,"Dull Grey",status-playable,playable,2022-10-27 13:40:38.000 -0100926013600000,"Dungeon Nightmares 1 + 2 Collection",status-playable,playable,2022-10-17 18:54:22.000 -010034300F0E2000,"Dungeon of the Endless",nvdec;status-playable,playable,2021-05-27 19:16:26.000 -,"Dungeon Stars",status-playable,playable,2021-01-18 14:28:37.000 -,"Dungeons & Bombs",status-playable,playable,2021-04-06 12:46:22.000 -0100EC30140B6000,"Dunk Lords",status-playable,playable,2024-06-26 00:07:26.000 -010011C00E636000,"Dusk Diver",status-boots;crash;UE4,boots,2021-11-06 09:01:30.000 -0100B6E00A420000,"Dust: An Elysian Tail",status-playable,playable,2022-07-25 15:28:12.000 -,"Dustoff Z",status-playable,playable,2020-12-04 23:22:29.000 -01008c8012920000,"Dying Light: Platinum Edition",services-horizon;status-boots,boots,2024-03-11 10:43:32.000 -,"Dyna Bomb",status-playable,playable,2020-06-07 13:26:55.000 -0100E9A00CB30000,"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",status-playable;nvdec,playable,2024-06-26 00:16:30.000 -010008900BC5A000,"DYSMANTLE",gpu;status-ingame,ingame,2024-07-15 16:24:12.000 -0100BDB01A0E6000,"EA Sports FC 24",status-boots,boots,2023-10-04 18:32:59.000 -010054E01D878000,"EA SPORTS FC 25",status-ingame;crash,ingame,2024-09-25 21:07:50.000 -01001C8016B4E000,"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",gpu;status-ingame;crash,ingame,2024-06-10 23:33:05.000 -010037400C7DA000,"Eagle Island",status-playable,playable,2021-04-10 13:15:42.000 -0100B9E012992000,"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",status-playable;UE4,playable,2022-12-07 12:59:16.000 -0100298014030000,"Earth Defense Force: World Brothers",status-playable;UE4,playable,2022-10-27 14:13:31.000 -01009B7006C88000,"EARTH WARS",status-playable,playable,2021-06-05 11:18:33.000 -0100DFC00E472000,"Earthfall: Alien Horde",status-playable;nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37.000 -01006E50042EA000,"Earthlock",status-playable,playable,2021-06-05 11:51:02.000 -0100A2E00BB0C000,"EarthNight",status-playable,playable,2022-09-19 21:02:20.000 -0100DCE00B756000,"Earthworms",status-playable,playable,2022-07-25 16:28:55.000 -,"Earthworms Demo",status-playable,playable,2021-01-05 16:57:11.000 -0100ECF01800C000,"Easy Come Easy Golf",status-playable;online-broken;regression,playable,2024-04-04 16:15:00.000 -0100A9B009678000,"EAT BEAT DEADSPIKE-san",audio;status-playable;Needs Update,playable,2022-12-02 19:25:29.000 -0100BCA016636000,"eBaseball Powerful Pro Yakyuu 2022",gpu;services-horizon;status-nothing;crash,nothing,2024-05-26 23:07:19.000 -,"Eclipse: Edge of Light",status-playable,playable,2020-08-11 23:06:29.000 -,"eCrossminton",status-playable,playable,2020-07-11 18:24:27.000 -0100ABE00DB4E000,"Edna & Harvey: Harvey's New Eyes",nvdec;status-playable,playable,2021-01-26 14:36:08.000 -01004F000B716000,"Edna & Harvey: The Breakout - Anniversary Edition",status-ingame;crash;nvdec,ingame,2022-08-01 16:59:56.000 -01002550129F0000,"Effie",status-playable,playable,2022-10-27 14:36:39.000 -,"Ego Protocol",nvdec;status-playable,playable,2020-12-16 20:16:35.000 -,"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",status-playable,playable,2020-11-12 00:11:50.000 -01003AD013BD2000,"Eight Dragons",status-playable;nvdec,playable,2022-10-27 14:47:28.000 -010020A01209C000,"El Hijo - A Wild West Tale",nvdec;status-playable,playable,2021-04-19 17:44:08.000 -,"Elden: Path of the Forgotten",status-playable,playable,2020-12-15 00:33:19.000 -,"ELEA: Paradigm Shift",UE4;crash;status-nothing,nothing,2020-10-04 19:07:43.000 -0100A6700AF10000,"Element",status-playable,playable,2022-07-25 17:17:16.000 -0100128003A24000,"Elliot Quest",status-playable,playable,2022-07-25 17:46:14.000 -,"Elrador Creatures",slow;status-playable,playable,2020-12-12 12:35:35.000 -010041A00FEC6000,"Ember",status-playable;nvdec,playable,2022-09-19 21:16:11.000 -,"Embracelet",status-playable,playable,2020-12-04 23:45:00.000 -010017b0102a8000,"Emma: Lost in Memories",nvdec;status-playable,playable,2021-01-28 16:19:10.000 -010068300E08E000,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo",gpu;status-ingame;nvdec,ingame,2022-11-20 16:18:45.000 -,"Enchanting Mahjong Match",gpu;status-ingame,ingame,2020-04-17 22:01:31.000 -01004F3011F92000,"Endless Fables: Dark Moor",gpu;nvdec;status-ingame,ingame,2021-03-07 15:31:03.000 -010067B017588000,"Endless Ocean Luminous",services-horizon;status-ingame;crash,ingame,2024-05-30 02:05:57.000 -0100B8700BD14000,"Energy Cycle Edge",services;status-ingame,ingame,2021-11-30 05:02:31.000 -,"Energy Invasion",status-playable,playable,2021-01-14 21:32:26.000 -0100C6200A0AA000,"Enigmatis 2: The Mists of Ravenwood",crash;regression;status-boots,boots,2021-06-06 15:15:30.000 -01009D60076F6000,"Enter the Gungeon",status-playable,playable,2022-07-25 20:28:33.000 -0100262009626000,"Epic Loon",status-playable;nvdec,playable,2022-07-25 22:06:13.000 -01000FA0149B6000,"EQI",status-playable;nvdec;UE4,playable,2022-10-27 16:42:32.000 -0100E95010058000,"EQQO",UE4;nvdec;status-playable,playable,2021-06-13 23:10:51.000 -,"Escape First",status-playable,playable,2020-10-20 22:46:53.000 -010021201296A000,"Escape First 2",status-playable,playable,2021-03-24 11:59:41.000 -0100FEF00F0AA000,"Escape from Chernobyl",status-boots;crash,boots,2022-09-19 21:36:58.000 -010023E013244000,"Escape from Life Inc",status-playable,playable,2021-04-19 17:34:09.000 -,"Escape from Tethys",status-playable,playable,2020-10-14 22:38:25.000 -,"Escape Game Fort Boyard",status-playable,playable,2020-07-12 12:45:43.000 -0100F9600E746000,"ESP Ra.De. Psi",audio;slow;status-ingame,ingame,2024-03-07 15:05:08.000 -010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;status-ingame;crash;Needs More Attention,ingame,2024-04-29 05:34:14.000 -01004F9012FD8000,"Estranged: The Departure",status-playable;nvdec;UE4,playable,2022-10-24 10:37:58.000 -,"Eternum Ex",status-playable,playable,2021-01-13 20:28:32.000 -010092501EB2C000,"Europa (Demo)",gpu;status-ingame;crash;UE4,ingame,2024-04-23 10:47:12.000 -01007BE0160D6000,"EVE ghost enemies",gpu;status-ingame,ingame,2023-01-14 03:13:30.000 -010095E01581C000,"even if TEMPEST",gpu;status-ingame,ingame,2023-06-22 23:50:25.000 -,"Event Horizon: Space Defense",status-playable,playable,2020-07-31 20:31:24.000 -0100DCF0093EC000,"EVERSPACE",status-playable;UE4,playable,2022-08-14 01:16:24.000 -01006F900BF8E000,"Everybody 1-2-Switch!",services;deadlock;status-nothing,nothing,2023-07-01 05:52:55.000 -,"Evil Defenders",nvdec;status-playable,playable,2020-09-28 17:11:00.000 -01006A800FA22000,"Evolution Board Game",online;status-playable,playable,2021-01-20 22:37:56.000 -0100F2D00C7DE000,"Exception",status-playable;online-broken,playable,2022-09-20 12:47:10.000 -0100DD30110CC000,"Exit the Gungeon",status-playable,playable,2022-09-22 17:04:43.000 -0100A82013976000,"Exodemon",status-playable,playable,2022-10-27 20:17:52.000 -0100FA800A1F4000,"Exorder",nvdec;status-playable,playable,2021-04-15 14:17:20.000 -01009B7010B42000,"Explosive Jake",status-boots;crash,boots,2021-11-03 07:48:32.000 -0100EFE00A3C2000,"Eyes: The Horror Game",status-playable,playable,2021-01-20 21:59:46.000 -0100E3D0103CE000,"Fable of Fairy Stones",status-playable,playable,2021-05-05 21:04:54.000 -01004200189F4000,"Factorio",deadlock;status-boots,boots,2024-06-11 19:26:16.000 -010073F0189B6000,"Fae Farm",status-playable,playable,2024-08-25 15:12:12.000 -010069100DB08000,"Faeria",status-menus;nvdec;online-broken,menus,2022-10-04 16:44:41.000 -01008A6009758000,"Fairune Collection",status-playable,playable,2021-06-06 15:29:56.000 -0100F6D00B8F2000,"Fairy Fencer F™: Advent Dark Force",status-ingame;32-bit;crash;nvdec,ingame,2023-04-16 03:53:48.000 -0100CF900FA3E000,"Fairy Tail",status-playable;nvdec,playable,2022-10-04 23:00:32.000 -01005A600BE60000,"Fall Of Light - Darkest Edition",slow;status-ingame;nvdec,ingame,2024-07-24 04:19:26.000 -0100AA801258C000,"Fallen Legion Revenants",status-menus;crash,menus,2021-11-25 08:53:20.000 -0100D670126F6000,"Famicom Detective Club: The Girl Who Stands Behind",status-playable;nvdec,playable,2022-10-27 20:41:40.000 -010033F0126F4000,"Famicom Detective Club: The Missing Heir",status-playable;nvdec,playable,2022-10-27 20:56:23.000 -010060200FC44000,"Family Feud 2021",status-playable;online-broken,playable,2022-10-10 11:42:21.000 -0100034012606000,"Family Mysteries: Poisonous Promises",audio;status-menus;crash,menus,2021-11-26 12:35:06.000 -010017C012726000,"Fantasy Friends",status-playable,playable,2022-10-17 19:42:39.000 -0100767008502000,"Fantasy Hero Unsigned Legacy",status-playable,playable,2022-07-26 12:28:52.000 -0100944003820000,"Fantasy Strike",online;status-playable,playable,2021-02-27 01:59:18.000 -01000E2012F6E000,"Fantasy Tavern Sextet -Vol.1 New World Days-",gpu;status-ingame;crash;Needs Update,ingame,2022-12-05 16:48:00.000 -,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;status-ingame;crash,ingame,2021-11-06 02:57:29.000 -010022700E7D6000,"FAR: Lone Sails",status-playable,playable,2022-09-06 16:33:05.000 -,"Farabel",status-playable,playable,2020-08-03 17:47:28.000 -,"Farm Expert 2019 for Nintendo Switch",status-playable,playable,2020-07-09 21:42:57.000 -01000E400ED98000,"Farm Mystery",status-playable;nvdec,playable,2022-09-06 16:46:47.000 -,"Farm Together",status-playable,playable,2021-01-19 20:01:19.000 -0100EB600E914000,"Farming Simulator 20",nvdec;status-playable,playable,2021-06-13 10:52:44.000 -,"Farming Simulator Nintendo Switch Edition",nvdec;status-playable,playable,2021-01-19 14:46:44.000 -0100E99019B3A000,"Fashion Dreamer",status-playable,playable,2023-11-12 06:42:52.000 -01009510001CA000,"Fast RMX",slow;status-ingame;crash;ldn-partial,ingame,2024-06-22 20:48:58.000 -0100BEB015604000,"Fatal Frame: Maiden of Black Water",status-playable,playable,2023-07-05 16:01:40.000 -0100DAE019110000,"Fatal Frame: Mask of the Lunar Eclipse",status-playable;Incomplete,playable,2024-04-11 06:01:30.000 -010053E002EA2000,"Fate/EXTELLA",gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55.000 -010051400B17A000,"Fate/EXTELLA LINK",ldn-untested;nvdec;status-playable,playable,2021-01-27 00:45:50.000 -,"fault - milestone one",nvdec;status-playable,playable,2021-03-24 10:41:49.000 -,"Fear Effect Sedna",nvdec;status-playable,playable,2021-01-19 13:10:33.000 -0100F5501CE12000,"Fearmonium",status-boots;crash,boots,2024-03-06 11:26:11.000 -0100E4300CB3E000,"Feather",status-playable,playable,2021-06-03 14:11:27.000 -,"Felix the Reaper",nvdec;status-playable,playable,2020-10-20 23:43:03.000 -,"Feudal Alloy",status-playable,playable,2021-01-14 08:48:14.000 -01008D900B984000,"FEZ",gpu;status-ingame,ingame,2021-04-18 17:10:16.000 -01007510040E8000,"FIA European Truck Racing Championship",status-playable;nvdec,playable,2022-09-06 17:51:59.000 -0100F7B002340000,"FIFA 18",gpu;status-ingame;online-broken;ldn-untested,ingame,2022-07-26 12:43:59.000 -0100FFA0093E8000,"FIFA 19",gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07.000 -01005DE00D05C000,"FIFA 20 Legacy Edition",gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20.000 -01000A001171A000,"FIFA 21 Legacy Edition",gpu;status-ingame;online-broken,ingame,2023-12-11 22:10:19.000 -0100216014472000,"FIFA 22 Legacy Edition",gpu;status-ingame,ingame,2024-03-02 14:13:48.000 -01006980127F0000,"Fight Crab",status-playable;online-broken;ldn-untested,playable,2022-10-05 10:24:04.000 -,"Fight of Animals",online;status-playable,playable,2020-10-15 15:08:28.000 -,"Fight'N Rage",status-playable,playable,2020-06-16 23:35:19.000 -0100D02014048000,"Fighting EX Layer Another Dash",status-playable;online-broken;UE4,playable,2024-04-07 10:22:33.000 -0100118009C68000,"Figment",nvdec;status-playable,playable,2021-01-27 19:36:05.000 -,"Fill-a-Pix: Phil's Epic Adventure",status-playable,playable,2020-12-22 13:48:22.000 -0100C3A00BB76000,"Fimbul",status-playable;nvdec,playable,2022-07-26 13:31:47.000 -,"Fin and the Ancient Mystery",nvdec;status-playable,playable,2020-12-17 16:40:39.000 -0100CE4010AAC000,"FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition",status-playable,playable,2023-04-02 23:39:12.000 -01000EA014150000,"FINAL FANTASY I",status-nothing;crash,nothing,2024-09-05 20:55:30.000 -01006B7014156000,"FINAL FANTASY II",status-nothing;crash,nothing,2024-04-13 19:18:04.000 -01006F000B056000,"FINAL FANTASY IX",audout;nvdec;status-playable,playable,2021-06-05 11:35:00.000 -0100AA201415C000,"FINAL FANTASY V",status-playable,playable,2023-04-26 01:11:55.000 -0100A5B00BDC6000,"Final Fantasy VII",status-playable,playable,2022-12-09 17:03:30.000 -01008B900DC0A000,"FINAL FANTASY VIII REMASTERED",status-playable;nvdec,playable,2023-02-15 10:57:48.000 -0100BC300CB48000,"FINAL FANTASY X/X-2 HD REMASTER",gpu;status-ingame,ingame,2022-08-16 20:29:26.000 -0100EB100AB42000,"FINAL FANTASY XII THE ZODIAC AGE",status-playable;opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54.000 -,"FINAL FANTASY XV POCKET EDITION HD",status-playable,playable,2021-01-05 17:52:08.000 -,"Final Light, The Prison",status-playable,playable,2020-07-31 21:48:44.000 -0100FF100FB68000,"Finding Teddy 2 : Definitive Edition",gpu;status-ingame,ingame,2024-04-19 16:51:33.000 -,"Fire & Water",status-playable,playable,2020-12-15 15:43:20.000 -0100F15003E64000,"Fire Emblem Warriors",status-playable;nvdec,playable,2023-05-10 01:53:10.000 -010071F0143EA000,"Fire Emblem Warriors: Three Hopes",gpu;status-ingame;nvdec,ingame,2024-05-01 07:07:42.000 -0100A6301214E000,"Fire Emblem: Engage",status-playable;amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26.000 -0100A12011CC8000,"Fire Emblem: Shadow Dragon and the Blade of Light",status-playable,playable,2022-10-17 19:49:14.000 -010055D009F78000,"Fire Emblem: Three Houses",status-playable;online-broken,playable,2024-09-14 23:53:50.000 -010025C014798000,"Fire: Ungh's Quest",status-playable;nvdec,playable,2022-10-27 21:41:26.000 -0100434003C58000,"Firefighters - The Simulation",status-playable,playable,2021-02-19 13:32:05.000 -,"Firefighters: Airport Fire Department",status-playable,playable,2021-02-15 19:17:00.000 -0100AC300919A000,"Firewatch",status-playable,playable,2021-06-03 10:56:38.000 -,"Firework",status-playable,playable,2020-12-04 20:20:09.000 -0100DEB00ACE2000,"Fishing Star World Tour",status-playable,playable,2022-09-13 19:08:51.000 -010069800D292000,"Fishing Universe Simulator",status-playable,playable,2021-04-15 14:00:43.000 -0100807008868000,"Fit Boxing",status-playable,playable,2022-07-26 19:24:55.000 -,"Fitness Boxing",services;status-ingame,ingame,2020-05-17 14:00:48.000 -0100E7300AAD4000,"Fitness Boxing",status-playable,playable,2021-04-14 20:33:33.000 -0100073011382000,"Fitness Boxing 2: Rhythm & Exercise",crash;status-ingame,ingame,2021-04-14 20:40:48.000 -,"Five Dates",nvdec;status-playable,playable,2020-12-11 15:17:11.000 -0100B6200D8D2000,"Five Nights at Freddy's",status-playable,playable,2022-09-13 19:26:36.000 -01004EB00E43A000,"Five Nights at Freddy's 2",status-playable,playable,2023-02-08 15:48:24.000 -010056100E43C000,"Five Nights at Freddy's 3",status-playable,playable,2022-09-13 20:58:07.000 -010083800E43E000,"Five Nights at Freddy's 4",status-playable,playable,2023-08-19 07:28:03.000 -0100F7901118C000,"Five Nights at Freddy's: Help Wanted",status-playable;UE4,playable,2022-09-29 12:40:09.000 -01003B200E440000,"Five Nights at Freddy's: Sister Location",status-playable,playable,2023-10-06 09:00:58.000 -01009060193C4000,"Five Nights At Freddy’s Security Breach",gpu;status-ingame;crash;mac-bug,ingame,2023-04-23 22:33:28.000 -010038200E088000,"Flan",status-ingame;crash;regression,ingame,2021-11-17 07:39:28.000 -,"Flashback",nvdec;status-playable,playable,2020-05-14 13:57:29.000 -0100C53004C52000,"Flat Heroes",gpu;status-ingame,ingame,2022-07-26 19:37:37.000 -,"Flatland: Prologue",status-playable,playable,2020-12-11 20:41:12.000 -,"Flinthook",online;status-playable,playable,2021-03-25 20:42:29.000 -010095A004040000,"Flip Wars",services;status-ingame;ldn-untested,ingame,2022-05-02 15:39:18.000 -01009FB002B2E000,"Flipping Death",status-playable,playable,2021-02-17 16:12:30.000 -,"Flood of Light",status-playable,playable,2020-05-15 14:15:25.000 -0100DF9005E7A000,"Floor Kids",status-playable;nvdec,playable,2024-08-18 19:38:49.000 -,"Florence",status-playable,playable,2020-09-05 01:22:30.000 -,"Flowlines VS",status-playable,playable,2020-12-17 17:01:53.000 -,"Flux8",nvdec;status-playable,playable,2020-06-19 20:55:11.000 -,"Fly O'Clock VS",status-playable,playable,2020-05-17 13:39:52.000 -,"Fly Punch Boom!",online;status-playable,playable,2020-06-21 12:06:11.000 -0100419013A8A000,"Flying Hero X",status-menus;crash,menus,2021-11-17 07:46:58.000 -,"Fobia",status-playable,playable,2020-12-14 21:05:23.000 -0100F3900D0F0000,"Food Truck Tycoon",status-playable,playable,2022-10-17 20:15:55.000 -01007CF013152000,"Football Manager 2021 Touch",gpu;status-ingame,ingame,2022-10-17 20:08:23.000 -0100EDC01990E000,"FOOTBALL MANAGER 2023 TOUCH",gpu;status-ingame,ingame,2023-08-01 03:40:53.000 -010097F0099B4000,"Football Manager Touch 2018",status-playable,playable,2022-07-26 20:17:56.000 -010069400B6BE000,"For The King",nvdec;status-playable,playable,2021-02-15 18:51:44.000 -01001D200BCC4000,"Forager",status-menus;crash,menus,2021-11-24 07:10:17.000 -0100AE001256E000,"Foreclosed",status-ingame;crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12.000 -,"Foregone",deadlock;status-ingame,ingame,2020-12-17 15:26:53.000 -010059E00B93C000,"Forgotton Anne",nvdec;status-playable,playable,2021-02-15 18:28:07.000 -,"FORMA.8",nvdec;status-playable,playable,2020-11-15 01:04:32.000 -,"Fort Boyard",nvdec;slow;status-playable,playable,2020-05-15 13:22:53.000 -010025400AECE000,"Fortnite",services-horizon;status-nothing,nothing,2024-04-06 18:23:25.000 -0100CA500756C000,"Fossil Hunters",status-playable;nvdec,playable,2022-07-27 11:37:20.000 -01008A100A028000,"FOX n FORESTS",status-playable,playable,2021-02-16 14:27:49.000 -,"FoxyLand",status-playable,playable,2020-07-29 20:55:20.000 -,"FoxyLand 2",status-playable,playable,2020-08-06 14:41:30.000 -01004200099F2000,"Fractured Minds",status-playable,playable,2022-09-13 21:21:40.000 -0100F1A00A5DC000,"FRAMED COLLECTION",status-playable;nvdec,playable,2022-07-27 11:48:15.000 -0100AC40108D8000,"Fred3ric",status-playable,playable,2021-04-15 13:30:31.000 -,"Frederic 2",status-playable,playable,2020-07-23 16:44:37.000 -,"Frederic: Resurrection of Music",nvdec;status-playable,playable,2020-07-23 16:59:53.000 -010082B00EE50000,"Freedom Finger",nvdec;status-playable,playable,2021-06-09 19:31:30.000 -,"Freedom Planet",status-playable,playable,2020-05-14 12:23:06.000 -010003F00BD48000,"Friday the 13th: Killer Puzzle",status-playable,playable,2021-01-28 01:33:38.000 -010092A00C4B6000,"Friday the 13th: The Game",status-playable;nvdec;online-broken;UE4,playable,2022-09-06 17:33:27.000 -0100F200178F4000,"Front Mission 1st Remake",status-playable,playable,2023-06-09 07:44:24.000 -,"Frontline Zed",status-playable,playable,2020-10-03 12:55:59.000 -0100B5300B49A000,"Frost",status-playable,playable,2022-07-27 12:00:36.000 -,"Fruitfall Crush",status-playable,playable,2020-10-20 11:33:33.000 -,"FullBlast",status-playable,playable,2020-05-19 10:34:13.000 -010002F00CC20000,"FUN! FUN! Animal Park",status-playable,playable,2021-04-14 17:08:52.000 -,"FunBox Party",status-playable,playable,2020-05-15 12:07:02.000 -,"Funghi Puzzle Funghi Explosion",status-playable,playable,2020-11-23 14:17:41.000 -01008E10130F8000,"Funimation",gpu;status-boots,boots,2021-04-08 13:08:17.000 -,"Funny Bunny Adventures",status-playable,playable,2020-08-05 13:46:56.000 -01000EC00AF98000,"Furi",status-playable,playable,2022-07-27 12:21:20.000 -01000EC00AF98000,"Furi Definitive Edition",status-playable,playable,2022-07-27 12:35:08.000 -0100A6B00D4EC000,"Furwind",status-playable,playable,2021-02-19 19:44:08.000 -,"Fury Unleashed",crash;services;status-ingame,ingame,2020-10-18 11:52:40.000 -,"Fury Unleashed Demo",status-playable,playable,2020-10-08 20:09:21.000 -0100E1F013674000,"FUSER",status-playable;nvdec;UE4,playable,2022-10-17 20:58:32.000 -,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec;status-ingame,ingame,2021-01-20 15:30:02.000 -01003C300B274000,"Futari de! Nyanko Daisensou",status-playable,playable,2024-01-05 22:26:52.000 -010055801134E000,"FUZE Player",status-ingame;online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53.000 -0100EAD007E98000,"FUZE4",status-playable;vulkan-backend-bug,playable,2022-09-06 19:25:01.000 -010067600F1A0000,"FuzzBall",crash;status-nothing,nothing,2021-03-29 20:13:21.000 -,"G-MODE Archives 06 The strongest ever Julia Miyamoto",status-playable,playable,2020-10-15 13:06:26.000 -,"G.I. Joe Operation Blackout",UE4;crash;status-boots,boots,2020-11-21 12:37:44.000 -,"Gal Metal - 01B8000C2EA000",status-playable,playable,2022-07-27 20:57:48.000 -010024700901A000,"Gal*Gun 2",status-playable;nvdec;UE4,playable,2022-07-27 12:45:37.000 -0100047013378000,"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",status-playable;nvdec,playable,2022-10-17 23:50:46.000 -0100C9800A454000,"GALAK-Z: Variant S",status-boots;online-broken,boots,2022-07-29 11:59:12.000 -0100C62011050000,"Game Boy - Nintendo Switch Online",status-playable,playable,2023-03-21 12:43:48.000 -010012F017576000,"Game Boy Advance - Nintendo Switch Online",status-playable,playable,2023-02-16 20:38:15.000 -0100FA5010788000,"Game Builder Garage",status-ingame,ingame,2024-04-20 21:46:22.000 -,"Game Dev Story",status-playable,playable,2020-05-20 00:00:38.000 -01006BD00F8C0000,"Game Doraemon Nobita no Shin Kyoryu",gpu;status-ingame,ingame,2023-02-27 02:03:28.000 -,"Garage",status-playable,playable,2020-05-19 20:59:53.000 -010061E00E8BE000,"Garfield Kart Furious Racing",status-playable;ldn-works;loader-allocator,playable,2022-09-13 21:40:25.000 -,"Gates of Hell",slow;status-playable,playable,2020-10-22 12:44:26.000 -010025500C098000,"Gato Roboto",status-playable,playable,2023-01-20 15:04:11.000 -010065E003FD8000,"Gear.Club Unlimited",status-playable,playable,2021-06-08 13:03:19.000 -010072900AFF0000,"Gear.Club Unlimited 2",status-playable;nvdec;online-broken,playable,2022-07-29 12:52:16.000 -01000F000D9F0000,"Geki Yaba Runner Anniversary Edition",status-playable,playable,2021-02-19 18:59:07.000 -,"Gekido Kintaro's Revenge",status-playable,playable,2020-10-27 12:44:05.000 -01009D000AF3A000,"Gelly Break",UE4;status-playable,playable,2021-03-03 16:04:02.000 -01001A4008192000,"Gem Smashers",nvdec;status-playable,playable,2021-06-08 13:40:51.000 -,"Genetic Disaster",status-playable,playable,2020-06-19 21:41:12.000 -0100D7E0110B2000,"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",32-bit;status-playable,playable,2022-06-06 00:42:09.000 -010000300C79C000,"Gensokyo Defenders",status-playable;online-broken;UE4,playable,2022-07-29 13:48:12.000 -0100AC600EB4C000,"Gensou Rougoku no Kaleidscope",status-menus;crash,menus,2021-11-24 08:45:07.000 -,"Georifters",UE4;crash;nvdec;status-menus,menus,2020-12-04 22:30:50.000 -,"Gerrrms",status-playable,playable,2020-08-15 11:32:52.000 -,"Get 10 Quest",status-playable,playable,2020-08-03 12:48:39.000 -0100B5B00E77C000,"Get Over Here",status-playable,playable,2022-10-28 11:53:52.000 -0100EEB005ACC000,"Ghost 1.0",status-playable,playable,2021-02-19 20:48:47.000 -010063200C588000,"Ghost Blade HD",status-playable;online-broken,playable,2022-09-13 21:51:21.000 -,"Ghost Grab 3000",status-playable,playable,2020-07-11 18:09:52.000 -,"Ghost Parade",status-playable,playable,2020-07-14 00:43:54.000 -01004B301108C000,"Ghost Sweeper",status-playable,playable,2022-10-10 12:45:36.000 -010029B018432000,"Ghost Trick Phantom Detective",status-playable,playable,2023-08-23 14:50:12.000 -010008A00F632000,"Ghostbusters: The Video Game Remastered",status-playable;nvdec,playable,2021-09-17 07:26:57.000 -,"Ghostrunner",UE4;crash;gpu;nvdec;status-ingame,ingame,2020-12-17 13:01:59.000 -0100D6200F2BA000,"Ghosts 'n Goblins Resurrection",status-playable,playable,2023-05-09 12:40:41.000 -01003830092B8000,"Giana Sisters: Twisted Dreams - Owltimate Edition",status-playable,playable,2022-07-29 14:06:12.000 -0100D95012C0A000,"Gibbous - A Cthulhu Adventure",status-playable;nvdec,playable,2022-10-10 12:57:17.000 -010045F00BFC2000,"GIGA WRECKER Alt.",status-playable,playable,2022-07-29 14:13:54.000 -01002C400E526000,"Gigantosaurus The Game",status-playable;UE4,playable,2022-09-27 21:20:00.000 -0100C50007070000,"Ginger: Beyond the Crystal",status-playable,playable,2021-02-17 16:27:00.000 -,"Girabox",status-playable,playable,2020-12-12 13:55:05.000 -,"Giraffe and Annika",UE4;crash;status-ingame,ingame,2020-12-04 22:41:57.000 -01006DD00CC96000,"Girls und Panzer Dream Tank Match DX",status-playable;ldn-untested,playable,2022-09-12 16:07:11.000 -,"Glaive: Brick Breaker",status-playable,playable,2020-05-20 12:15:59.000 -,"Glitch's Trip",status-playable,playable,2020-12-17 16:00:57.000 -0100EB501130E000,"Glyph",status-playable,playable,2021-02-08 19:56:51.000 -,"Gnome More War",status-playable,playable,2020-12-17 16:33:07.000 -,"Gnomes Garden 2",status-playable,playable,2021-02-19 20:08:13.000 -010036C00D0D6000,"Gnomes Garden: Lost King",deadlock;status-menus,menus,2021-11-18 11:14:03.000 -01008EF013A7C000,"Gnosia",status-playable,playable,2021-04-05 17:20:30.000 -01000C800FADC000,"Go All Out",status-playable;online-broken,playable,2022-09-21 19:16:34.000 -010055A0161F4000,"Go Rally",gpu;status-ingame,ingame,2023-08-16 21:18:23.000 -0100C1800A9B6000,"GO VACATION",status-playable;nvdec;ldn-works,playable,2024-05-13 19:28:53.000 -,"Go! Fish Go!",status-playable,playable,2020-07-27 13:52:28.000 -010032600C8CE000,"Goat Simulator",32-bit;status-playable,playable,2022-07-29 21:02:33.000 -01001C700873E000,"GOD EATER 3",gpu;status-ingame;nvdec,ingame,2022-07-29 21:33:21.000 -,"GOD WARS THE COMPLETE LEGEND",nvdec;status-playable,playable,2020-05-19 14:37:50.000 -0100CFA0111C8000,"Gods Will Fall",status-playable,playable,2021-02-08 16:49:59.000 -,"Goetia",status-playable,playable,2020-05-19 12:55:39.000 -,"Going Under",deadlock;nvdec;status-ingame,ingame,2020-12-11 22:29:46.000 -,"Goken",status-playable,playable,2020-08-05 20:22:38.000 -010013800F0A4000,"Golazo - 010013800F0A4000",status-playable,playable,2022-09-13 21:58:37.000 -01003C000D84C000,"Golem Gates",status-ingame;crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11.000 -,"Golf Story",status-playable,playable,2020-05-14 14:56:17.000 -01006FB00EBE0000,"Golf With Your Friends",status-playable;online-broken,playable,2022-09-29 12:55:11.000 -0100EEC00AA6E000,"Gone Home",status-playable,playable,2022-08-01 11:14:20.000 -,"Gonner",status-playable,playable,2020-05-19 12:05:02.000 -,"Good Job!",status-playable,playable,2021-03-02 13:15:55.000 -01003AD0123A2000,"Good Night, Knight",status-nothing;crash,nothing,2023-07-30 23:38:13.000 -,"Good Pizza, Great Pizza",status-playable,playable,2020-12-04 22:59:18.000 -,"Goosebumps Dead of Night",gpu;nvdec;status-ingame,ingame,2020-12-10 20:02:16.000 -,"Goosebumps: The Game",status-playable,playable,2020-05-19 11:56:52.000 -0100F2A005C98000,"Gorogoa",status-playable,playable,2022-08-01 11:55:08.000 -,"GORSD",status-playable,playable,2020-12-04 22:15:21.000 -,"Gotcha Racing 2nd",status-playable,playable,2020-07-23 17:14:04.000 -,"Gothic Murder: Adventure That Changes Destiny",deadlock;status-ingame;crash,ingame,2022-09-30 23:16:53.000 -,"Grab the Bottle",status-playable,playable,2020-07-14 17:06:41.000 -,"Graceful Explosion Machine",status-playable,playable,2020-05-19 20:36:55.000 -,"Grand Brix Shooter",slow;status-playable,playable,2020-06-24 13:23:54.000 -010038100D436000,"Grand Guilds",UE4;nvdec;status-playable,playable,2021-04-26 12:49:05.000 -0100BE600D07A000,"Grand Prix Story",status-playable,playable,2022-08-01 12:42:23.000 -05B1D2ABD3D30000,"Grand Theft Auto 3",services;status-nothing;crash;homebrew,nothing,2023-05-01 22:01:58.000 -0100E0600BBC8000,"Grandia HD Collection",status-boots;crash,boots,2024-08-19 04:29:48.000 -,"Grass Cutter",slow;status-ingame,ingame,2020-05-19 18:27:42.000 -,"Grave Danger",status-playable,playable,2020-05-18 17:41:28.000 -010054A013E0C000,"GraviFire",status-playable,playable,2021-04-05 17:13:32.000 -01002C2011828000,"Gravity Rider Zero",gpu;status-ingame;vulkan-backend-bug,ingame,2022-09-29 13:56:13.000 -,"Greedroid",status-playable,playable,2020-12-14 11:14:32.000 -010068D00AE68000,"GREEN",status-playable,playable,2022-08-01 12:54:15.000 -0100CBB0070EE000,"Green Game",nvdec;status-playable,playable,2021-02-19 18:51:55.000 -0100DFE00F002000,"GREEN The Life Algorithm",status-playable,playable,2022-09-27 21:37:13.000 -0100DA7013792000,"Grey Skies: A War of the Worlds Story",status-playable;UE4,playable,2022-10-24 11:13:59.000 -0100DC800A602000,"GRID Autosport",status-playable;nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45.000 -,"Grid Mania",status-playable,playable,2020-05-19 14:11:05.000 -,"Gridd: Retroenhanced",status-playable,playable,2020-05-20 11:32:40.000 -0100B7900B024000,"Grim Fandango Remastered",status-playable;nvdec,playable,2022-08-01 13:55:58.000 -010078E012D80000,"Grim Legends 2: Song Of The Dark Swan",status-playable;nvdec,playable,2022-10-18 12:58:45.000 -010009F011F90000,"Grim Legends: The Forsaken Bride",status-playable;nvdec,playable,2022-10-18 13:14:06.000 -01001E200F2F8000,"Grimshade",status-playable,playable,2022-10-02 12:44:20.000 -0100538012496000,"Grindstone",status-playable,playable,2023-02-08 15:54:06.000 -0100459009A2A000,"GRIP",status-playable;nvdec;online-broken;UE4,playable,2022-08-01 15:00:22.000 -0100E1700C31C000,"GRIS",nvdec;status-playable,playable,2021-06-03 13:33:44.000 -01009D7011B02000,"GRISAIA PHANTOM TRIGGER 01&02",status-playable;nvdec,playable,2022-12-04 21:16:06.000 -01005250123B8000,"Grisaia Phantom Trigger 03",audout;status-playable,playable,2021-01-31 12:30:47.000 -0100D970123BA000,"GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000",audout;status-playable,playable,2021-01-31 12:40:37.000 -01002330123BC000,"GRISAIA PHANTOM TRIGGER 05",audout;nvdec;status-playable,playable,2021-01-31 12:49:59.000 -0100CAF013AE6000,"GRISAIA PHANTOM TRIGGER 5.5",audout;nvdec;status-playable,playable,2021-01-31 12:59:44.000 -010091300FFA0000,"Grizzland",gpu;status-ingame,ingame,2024-07-11 16:28:34.000 -0100EB500D92E000,"Groove Coaster: Wai Wai Party!!!!",status-playable;nvdec;ldn-broken,playable,2021-11-06 14:54:27.000 -,"Guacamelee! 2",status-playable,playable,2020-05-15 14:56:59.000 -,"Guacamelee! Super Turbo Championship Edition",status-playable,playable,2020-05-13 23:44:18.000 -,"Guess the Character",status-playable,playable,2020-05-20 13:14:19.000 -,"Guess The Word",status-playable,playable,2020-07-26 21:34:25.000 -,"GUILTY GEAR XX ACCENT CORE PLUS R",nvdec;status-playable,playable,2021-01-13 09:28:33.000 -01003C6008940000,"GUNBIRD for Nintendo Switch",32-bit;status-playable,playable,2021-06-04 19:16:01.000 -,"GUNBIRD2 for Nintendo Switch",status-playable,playable,2020-10-10 14:41:16.000 -,"Gunka o haita neko",gpu;nvdec;status-ingame,ingame,2020-08-25 12:37:56.000 -,"Gunman Clive HD Collection",status-playable,playable,2020-10-09 12:17:35.000 -,"Guns Gore and Cannoli 2",online;status-playable,playable,2021-01-06 18:43:59.000 -,"Gunvolt Chronicles: Luminous Avenger iX",status-playable,playable,2020-06-16 22:47:07.000 -0100763015C2E000,"Gunvolt Chronicles: Luminous Avenger iX 2",status-nothing;crash;Needs Update,nothing,2022-04-29 15:34:34.000 -01002C8018554000,"Gurimugurimoa OnceMore Demo",status-playable,playable,2022-07-29 22:07:31.000 -0100AC601DCA8000,"Gylt",status-ingame;crash,ingame,2024-03-18 20:16:51.000 -0100822012D76000,"HAAK",gpu;status-ingame,ingame,2023-02-19 14:31:05.000 -,"Habroxia",status-playable,playable,2020-06-16 23:04:42.000 -0100535012974000,"Hades",status-playable;vulkan,playable,2022-10-05 10:45:21.000 -,"Hakoniwa Explorer Plus",slow;status-ingame,ingame,2021-02-19 16:56:19.000 -,"Halloween Pinball",status-playable,playable,2021-01-12 16:00:46.000 -01006FF014152000,"Hamidashi Creative",gpu;status-ingame,ingame,2021-12-19 15:30:51.000 -01003B9007E86000,"Hammerwatch",status-playable;online-broken;ldn-broken,playable,2022-08-01 16:28:46.000 -01003620068EA000,"Hand of Fate 2",status-playable,playable,2022-08-01 15:44:16.000 -,"Hang the Kings",status-playable,playable,2020-07-28 22:56:59.000 -010066C018E50000,"Happy Animals Mini Golf",gpu;status-ingame,ingame,2022-12-04 19:24:28.000 -0100ECE00D13E000,"Hard West",status-nothing;regression,nothing,2022-02-09 07:45:56.000 -,"HARDCORE Maze Cube",status-playable,playable,2020-12-04 20:01:24.000 -,"HARDCORE MECHA",slow;status-playable,playable,2020-11-01 15:06:33.000 -01000C90117FA000,"HardCube",status-playable,playable,2021-05-05 18:33:03.000 -,"Hardway Party",status-playable,playable,2020-07-26 12:35:07.000 -0100D0500AD30000,"Harvest Life",status-playable,playable,2022-08-01 16:51:45.000 -,"Harvest Moon One World - 010016B010FDE00",status-playable,playable,2023-05-26 09:17:19.000 -0100A280187BC000,"Harvestella",status-playable;UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11.000 -,"Has-Been Heroes",status-playable,playable,2021-01-13 13:31:48.000 -01001CC00FA1A000,"Hatsune Miku: Project DIVA Mega Mix",audio;status-playable;online-broken,playable,2024-01-07 23:12:57.000 -01009E6014F18000,"Haunted Dawn: The Zombie Apocalypse",status-playable,playable,2022-10-28 12:31:51.000 -,"Haunted Dungeons: Hyakki Castle",status-playable,playable,2020-08-12 14:21:48.000 -0100E2600DBAA000,"Haven",status-playable,playable,2021-03-24 11:52:41.000 -0100EA900FB2C000,"Hayfever",status-playable;loader-allocator,playable,2022-09-22 17:35:41.000 -0100EFE00E1DC000,"Headliner: NoviNews",online;status-playable,playable,2021-03-01 11:36:00.000 -,"Headsnatchers",UE4;crash;status-menus,menus,2020-07-14 13:29:14.000 -,"Headspun",status-playable,playable,2020-07-31 19:46:47.000 -,"Heart and Slash",status-playable,playable,2021-01-13 20:56:32.000 -,"Heaven Dust",status-playable,playable,2020-05-17 14:02:41.000 -0100FD901000C000,"Heaven's Vault",crash;status-ingame,ingame,2021-02-08 18:22:01.000 -,"Helheim Hassle",status-playable,playable,2020-10-14 11:38:36.000 -,"Hell is Other Demons",status-playable,playable,2021-01-13 13:23:02.000 -01000938017E5C00,"Hell Pie0",status-playable;nvdec;UE4,playable,2022-11-03 16:48:46.000 -0100A4600E27A000,"Hell Warders",online;status-playable,playable,2021-02-27 02:31:03.000 -010044500CF8E000,"Hellblade: Senua's Sacrifice",gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50.000 -010087D0084A8000,"Hello Kitty Kruisers With Sanrio Friends",nvdec;status-playable,playable,2021-06-04 19:08:46.000 -0100FAA00B168000,"Hello Neighbor",status-playable;UE4,playable,2022-08-01 21:32:23.000 -,"Hello Neighbor: Hide And Seek",UE4;gpu;slow;status-ingame,ingame,2020-10-24 10:59:57.000 -010024600C794000,"Hellpoint",status-menus,menus,2021-11-26 13:24:20.000 -,"Hero Express",nvdec;status-playable,playable,2020-08-06 13:23:43.000 -010077D01094C000,"Hero-U: Rogue to Redemption",nvdec;status-playable,playable,2021-03-24 11:40:01.000 -0100D2B00BC54000,"Heroes of Hammerwatch",status-playable,playable,2022-08-01 18:30:21.000 -01001B70080F0000,"Heroine Anthem Zero episode 1",status-playable;vulkan-backend-bug,playable,2022-08-01 22:02:36.000 -010057300B0DC000,"Heroki",gpu;status-ingame,ingame,2023-07-30 19:30:01.000 -,"Heroland",status-playable,playable,2020-08-05 15:35:39.000 -01007AC00E012000,"Hexagravity",status-playable,playable,2021-05-28 13:47:48.000 -01004E800F03C000,"Hidden",slow;status-ingame,ingame,2022-10-05 10:56:53.000 -0100F6A00A684000,"Higurashi no Naku Koro ni Hō",audio;status-ingame,ingame,2021-09-18 14:40:28.000 -0100F8D0129F4000,"Himehibi 1 gakki - Princess Days",status-nothing;crash,nothing,2021-11-03 08:34:19.000 -,"Hiragana Pixel Party",status-playable,playable,2021-01-14 08:36:50.000 -01004990132AC000,"Hitman 3 - Cloud Version",Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:35:07.000 -010083A018262000,"Hitman: Blood Money - Reprisal",deadlock;status-ingame,ingame,2024-09-28 16:28:50.000 -,"Hob: The Definitive Edition",status-playable,playable,2021-01-13 09:39:19.000 -0100F7300ED2C000,"Hoggy 2",status-playable,playable,2022-10-10 13:53:35.000 -0100F7E00C70E000,"Hogwarts Legacy 0100F7E00C70E000",status-ingame;slow,ingame,2024-09-03 19:53:58.000 -0100633007D48000,"Hollow Knight",status-playable;nvdec,playable,2023-01-16 15:44:56.000 -0100F2100061E800,"Hollow0",UE4;gpu;status-ingame,ingame,2021-03-03 23:42:56.000 -,"Holy Potatoes! What the Hell?!",status-playable,playable,2020-07-03 10:48:56.000 -,"HoPiKo",status-playable,playable,2021-01-13 20:12:38.000 -010087800EE5A000,"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",status-boots;crash,boots,2023-02-19 00:51:21.000 -010086D011EB8000,"Horace",status-playable,playable,2022-10-10 14:03:50.000 -0100001019F6E000,"Horizon Chase 2",deadlock;slow;status-ingame;crash;UE4,ingame,2024-08-19 04:24:06.000 -01009EA00B714000,"Horizon Chase Turbo",status-playable,playable,2021-02-19 19:40:56.000 -0100E4200FA82000,"Horror Pinball Bundle",status-menus;crash,menus,2022-09-13 22:15:34.000 -0100017007980000,"Hotel Transylvania 3: Monsters Overboard",nvdec;status-playable,playable,2021-01-27 18:55:31.000 -0100D0E00E51E000,"Hotline Miami Collection",status-playable;nvdec,playable,2022-09-09 16:41:19.000 -0100BDE008218000,"Hotshot Racing",gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17.000 -0100CAE00EB02000,"House Flipper",status-playable,playable,2021-06-16 18:28:32.000 -0100F6800910A000,"Hover",status-playable;online-broken,playable,2022-09-20 12:54:46.000 -0100A66003384000,"Hulu",status-boots;online-broken,boots,2022-12-09 10:05:00.000 -,"Human Resource Machine",32-bit;status-playable,playable,2020-12-17 21:47:09.000 -,"Human: Fall Flat",status-playable,playable,2021-01-13 18:36:05.000 -,"Hungry Shark World",status-playable,playable,2021-01-13 18:26:08.000 -0100EBA004726000,"Huntdown",status-playable,playable,2021-04-05 16:59:54.000 -010068000CAC0000,"Hunter's Legacy: Purrfect Edition",status-playable,playable,2022-08-02 10:33:31.000 -0100C460040EA000,"Hunting Simulator",status-playable;UE4,playable,2022-08-02 10:54:08.000 -010061F010C3A000,"Hunting Simulator 2",status-playable;UE4,playable,2022-10-10 14:25:51.000 -,"Hyper Jam",UE4;crash;status-boots,boots,2020-12-15 22:52:11.000 -01003B200B372000,"Hyper Light Drifter - Special Edition",status-playable;vulkan-backend-bug,playable,2023-01-13 15:44:48.000 -,"HyperBrawl Tournament",crash;services;status-boots,boots,2020-12-04 23:03:27.000 -0100A8B00F0B4000,"HYPERCHARGE: Unboxed",status-playable;nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39.000 -010061400ED90000,"HyperParasite",status-playable;nvdec;UE4,playable,2022-09-27 22:05:44.000 -0100959010466000,"Hypnospace Outlaw",status-ingame;nvdec,ingame,2023-08-02 22:46:49.000 -01002B00111A2000,"Hyrule Warriors: Age of Calamity",gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00.000 -0100A2C01320E000,"Hyrule Warriors: Age of Calamity - Demo Version",slow;status-playable,playable,2022-10-10 17:37:41.000 -0100AE00096EA000,"Hyrule Warriors: Definitive Edition",services-horizon;status-ingame;nvdec,ingame,2024-06-16 10:34:05.000 -0100849000BDA000,"I AM SETSUNA",status-playable,playable,2021-11-28 11:06:11.000 -01001860140B0000,"I Saw Black Clouds",nvdec;status-playable,playable,2021-04-19 17:22:16.000 -,"I, Zombie",status-playable,playable,2021-01-13 14:53:44.000 -01004E5007E92000,"Ice Age Scrat's Nutty Adventure",status-playable;nvdec,playable,2022-09-13 22:22:29.000 -,"Ice Cream Surfer",status-playable,playable,2020-07-29 12:04:07.000 -0100954014718000,"Ice Station Z",status-menus;crash,menus,2021-11-21 20:02:15.000 -,"ICEY",status-playable,playable,2021-01-14 16:16:04.000 -0100BC60099FE000,"Iconoclasts",status-playable,playable,2021-08-30 21:11:04.000 -,"Idle Champions of the Forgotten Realms",online;status-boots,boots,2020-12-17 18:24:57.000 -01002EC014BCA000,"Idol Days - 愛怒流でいす",gpu;status-ingame;crash,ingame,2021-12-19 15:31:28.000 -,"If Found...",status-playable,playable,2020-12-11 13:43:14.000 -01001AC00ED72000,"If My Heart Had Wings",status-playable,playable,2022-09-29 14:54:57.000 -01009F20086A0000,"Ikaruga",status-playable,playable,2023-04-06 15:00:02.000 -010040900AF46000,"Ikenfell",status-playable,playable,2021-06-16 17:18:44.000 -01007BC00E55A000,"Immortal Planet",status-playable,playable,2022-09-20 13:40:43.000 -010079501025C000,"Immortal Realms: Vampire Wars",nvdec;status-playable,playable,2021-06-17 17:41:46.000 -,"Immortal Redneck - 0100F400435A000",nvdec;status-playable,playable,2021-01-27 18:36:28.000 -01004A600EC0A000,"Immortals Fenyx Rising",gpu;status-menus;crash,menus,2023-02-24 16:19:55.000 -0100737003190000,"IMPLOSION",status-playable;nvdec,playable,2021-12-12 03:52:13.000 -0100A760129A0000,"In rays of the Light",status-playable,playable,2021-04-07 15:18:07.000 -01004DE011076000,"Indie Darling Bundle Vol. 3",status-playable,playable,2022-10-02 13:01:57.000 -0100A2101107C000,"Indie Puzzle Bundle Vol 1",status-playable,playable,2022-09-27 22:23:21.000 -,"Indiecalypse",nvdec;status-playable,playable,2020-06-11 20:19:09.000 -01001D3003FDE000,"Indivisible",status-playable;nvdec,playable,2022-09-29 15:20:57.000 -01002BD00F626000,"Inertial Drift",status-playable;online-broken,playable,2022-10-11 12:22:19.000 -,"Infernium",UE4;regression;status-nothing,nothing,2021-01-13 16:36:07.000 -,"Infinite Minigolf",online;status-playable,playable,2020-09-29 12:26:25.000 -01001CB00EFD6000,"Infliction",status-playable;nvdec;UE4,playable,2022-10-02 13:15:55.000 -0100F1401161E000,"INMOST",status-playable,playable,2022-10-05 11:27:40.000 -,"InnerSpace",status-playable,playable,2021-01-13 19:36:14.000 -0100D2D009028000,"INSIDE",status-playable,playable,2021-12-25 20:24:56.000 -,"Inside Grass: A little adventure",status-playable,playable,2020-10-15 15:26:27.000 -010099700D750000,"INSTANT SPORTS",status-playable,playable,2022-09-09 12:59:40.000 -,"Instant Sports Summer Games",gpu;status-menus,menus,2020-09-02 13:39:28.000 -010031B0145B8000,"Instant Sports Tennis",status-playable,playable,2022-10-28 16:42:17.000 -010041501005E000,"Interrogation: You will be deceived",status-playable,playable,2022-10-05 11:40:10.000 -01000F700DECE000,"Into the Dead 2",status-playable;nvdec,playable,2022-09-14 12:36:14.000 -01001D0003B96000,"INVERSUS Deluxe",status-playable;online-broken,playable,2022-08-02 14:35:36.000 -,"Invisible Fist",status-playable,playable,2020-08-08 13:25:52.000 -,"Invisible, Inc.",crash;status-nothing,nothing,2021-01-29 16:28:13.000 -01005F400E644000,"Invisigun Reloaded",gpu;online;status-ingame,ingame,2021-06-10 12:13:24.000 -010041C00D086000,"Ion Fury",status-ingame;vulkan-backend-bug,ingame,2022-08-07 08:27:51.000 -010095C016C14000,"Iridium",status-playable,playable,2022-08-05 23:19:53.000 -0100945012168000,"Iris Fall",status-playable;nvdec,playable,2022-10-18 13:40:22.000 -0100AD300B786000,"Iris School of Wizardry - Vinculum Hearts -",status-playable,playable,2022-12-05 13:11:15.000 -01005270118D6000,"Iron Wings",slow;status-ingame,ingame,2022-08-07 08:32:57.000 -,"Ironcast",status-playable,playable,2021-01-13 13:54:29.000 -0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",status-playable,playable,2021-06-04 20:12:37.000 -,"Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate",status-playable,playable,2020-08-31 13:52:21.000 -0100F06013710000,"ISLAND",status-playable,playable,2021-05-06 15:11:47.000 -010077900440A000,"Island Flight Simulator",status-playable,playable,2021-06-04 19:42:46.000 -,"Island Saver",nvdec;status-playable,playable,2020-10-23 22:07:02.000 -,"Isoland",status-playable,playable,2020-07-26 13:48:16.000 -,"Isoland 2: Ashes of Time",status-playable,playable,2020-07-26 14:29:05.000 -010001F0145A8000,"Isolomus",services;status-boots,boots,2021-11-03 07:48:21.000 -010068700C70A000,"ITTA",status-playable,playable,2021-06-07 03:15:52.000 -,"Ittle Dew 2+",status-playable,playable,2020-11-17 11:44:32.000 -0100DEB00F12A000,"IxSHE Tell",status-playable;nvdec,playable,2022-12-02 18:00:42.000 -0100D8E00C874000,"Izneo",status-menus;online-broken,menus,2022-08-06 15:56:23.000 -,"James Pond Operation Robocod",status-playable,playable,2021-01-13 09:48:45.000 -,"Japanese Rail Sim: Journey to Kyoto",nvdec;status-playable,playable,2020-07-29 17:14:21.000 -,"JDM Racing",status-playable,playable,2020-08-03 17:02:37.000 -,"Jenny LeClue - Detectivu",crash;status-nothing,nothing,2020-12-15 21:07:07.000 -01006E400AE2A000,"Jeopardy!",audout;nvdec;online;status-playable,playable,2021-02-22 13:53:46.000 -0100E4900D266000,"Jet Kave Adventure",status-playable;nvdec,playable,2022-09-09 14:50:39.000 -0100F3500C70C000,"Jet Lancer",gpu;status-ingame,ingame,2021-02-15 18:15:47.000 -0100A5A00AF26000,"Jettomero: Hero of the Universe",status-playable,playable,2022-08-02 14:46:43.000 -01008330134DA000,"Jiffy",gpu;status-ingame;opengl,ingame,2024-02-03 23:11:24.000 -,"Jim Is Moving Out!",deadlock;status-ingame,ingame,2020-06-03 22:05:19.000 -0100F4D00D8BE000,"Jinrui no Ninasama he",status-ingame;crash,ingame,2023-03-07 02:04:17.000 -010038D011F08000,"Jisei: The First Case HD",audio;status-playable,playable,2022-10-05 11:43:33.000 -,"Job the Leprechaun",status-playable,playable,2020-06-05 12:10:06.000 -01007090104EC000,"John Wick Hex",status-playable,playable,2022-08-07 08:29:12.000 -010069B002CDE000,"Johnny Turbo's Arcade Gate of Doom",status-playable,playable,2022-07-29 12:17:50.000 -010080D002CC6000,"Johnny Turbo's Arcade Two Crude Dudes",status-playable,playable,2022-08-02 20:29:50.000 -0100D230069CC000,"Johnny Turbo's Arcade Wizard Fire",status-playable,playable,2022-08-02 20:39:15.000 -01008120128C2000,"JoJos Bizarre Adventure All-Star Battle R",status-playable,playable,2022-12-03 10:45:10.000 -01008B60117EC000,"Journey to the Savage Planet",status-playable;nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12.000 -0100C7600F654000,"Juicy Realm - 0100C7600F654000",status-playable,playable,2023-02-21 19:16:20.000 -,"Jumanji",UE4;crash;status-boots,boots,2020-07-12 13:52:25.000 -0100183010F12000,"JUMP FORCE Deluxe Edition",status-playable;nvdec;online-broken;UE4,playable,2023-10-01 15:56:05.000 -,"Jump King",status-playable,playable,2020-06-09 10:12:39.000 -0100B9C012706000,"Jump Rope Challenge",services;status-boots;crash;Needs Update,boots,2023-02-27 01:24:28.000 -,"Jumping Joe & Friends",status-playable,playable,2021-01-13 17:09:42.000 -,"JunkPlanet",status-playable,playable,2020-11-09 12:38:33.000 -0100CE100A826000,"Jurassic Pinball",status-playable,playable,2021-06-04 19:02:37.000 -010050A011344000,"Jurassic World Evolution Complete Edition",cpu;status-menus;crash,menus,2023-08-04 18:06:54.000 -0100BCE000598000,"Just Dance 2017",online;status-playable,playable,2021-03-05 09:46:01.000 -,"Just Dance 2019",gpu;online;status-ingame,ingame,2021-02-27 17:21:27.000 -0100DDB00DB38000,"JUST DANCE 2020",status-playable,playable,2022-01-24 13:31:57.000 -0100EA6014BB8000,"Just Dance 2022",gpu;services;status-ingame;crash;Needs Update,ingame,2022-10-28 11:01:53.000 -0100BEE017FC0000,"Just Dance 2023",status-nothing,nothing,2023-06-05 16:44:54.000 -0100AC600CF0A000,"Just Die Already",status-playable;UE4,playable,2022-12-13 13:37:50.000 -,"Just Glide",status-playable,playable,2020-08-07 17:38:10.000 -,"Just Shapes & Beats",ldn-untested;nvdec;status-playable,playable,2021-02-09 12:18:36.000 -010035A0044E8000,"JYDGE",status-playable,playable,2022-08-02 21:20:13.000 -0100D58012FC2000,"Kagamihara/Justice",crash;status-nothing,nothing,2021-06-21 16:41:29.000 -0100D5F00EC52000,"Kairobotica",status-playable,playable,2021-05-06 12:17:56.000 -0100BDC00A664000,"KAMEN RIDER CLIMAX SCRAMBLE",status-playable;nvdec;ldn-untested,playable,2024-07-03 08:51:11.000 -0100A9801180E000,"KAMEN RIDER memory of heroez / Premium Sound Edition",status-playable,playable,2022-12-06 03:14:26.000 -,"KAMIKO",status-playable,playable,2020-05-13 12:48:57.000 -,"Kangokuto Mary Skelter Finale",audio;crash;status-ingame,ingame,2021-01-09 22:39:28.000 -01007FD00DB20000,"Katakoi Contrast - collection of branch -",status-playable;nvdec,playable,2022-12-09 09:41:26.000 -0100D7000C2C6000,"Katamari Damacy REROLL",status-playable,playable,2022-08-02 21:35:05.000 -0100F9800EDFA000,"KATANA KAMI: A Way of the Samurai Story",slow;status-playable,playable,2022-04-09 10:40:16.000 -010029600D56A000,"Katana ZERO",status-playable,playable,2022-08-26 08:09:09.000 -010038B00F142000,"Kaze and the Wild Masks",status-playable,playable,2021-04-19 17:11:03.000 -,"Keen: One Girl Army",status-playable,playable,2020-12-14 23:19:52.000 -01008D400A584000,"Keep Talking and Nobody Explodes",status-playable,playable,2021-02-15 18:05:21.000 -01004B100BDA2000,"Kemono Friends Picross",status-playable,playable,2023-02-08 15:54:34.000 -,"Kentucky Robo Chicken",status-playable,playable,2020-05-12 20:54:17.000 -0100327005C94000,"Kentucky Route Zero [0100327005C94000]",status-playable,playable,2024-04-09 23:22:46.000 -,"KeroBlaster",status-playable,playable,2020-05-12 20:42:52.000 -0100F680116A2000,"Kholat",UE4;nvdec;status-playable,playable,2021-06-17 11:52:48.000 -,"Kid Tripp",crash;status-nothing,nothing,2020-10-15 07:41:23.000 -,"Kill la Kill - IF",status-playable,playable,2020-06-09 14:47:08.000 -,"Kill The Bad Guy",status-playable,playable,2020-05-12 22:16:10.000 -0100F2900B3E2000,"Killer Queen Black",ldn-untested;online;status-playable,playable,2021-04-08 12:46:18.000 -,"Kin'iro no Corda Octave",status-playable,playable,2020-09-22 13:23:12.000 -010089000F0E8000,"Kine",status-playable;UE4,playable,2022-09-14 14:28:37.000 -0100E6B00FFBA000,"King Lucas",status-playable,playable,2022-09-21 19:43:23.000 -,"King Oddball",status-playable,playable,2020-05-13 13:47:57.000 -01008D80148C8000,"King of Seas",status-playable;nvdec;UE4,playable,2022-10-28 18:29:41.000 -0100515014A94000,"King of Seas Demo",status-playable;nvdec;UE4,playable,2022-10-28 18:09:31.000 -,"KINGDOM HEARTS Melody of Memory",crash;nvdec;status-ingame,ingame,2021-03-03 17:34:12.000 -0100A280121F6000,"Kingdom Rush",status-nothing;32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00.000 -0100BD9004AB6000,"Kingdom: New Lands",status-playable,playable,2022-08-02 21:48:50.000 -,"Kingdom: Two Crowns",status-playable,playable,2020-05-16 19:36:21.000 -0100EF50132BE000,"Kingdoms of Amalur: Re-Reckoning",status-playable,playable,2023-08-10 13:05:08.000 -01004D300C5AE000,"Kirby and the Forgotten Land",gpu;status-ingame,ingame,2024-03-11 17:11:21.000 -010091201605A000,"Kirby and the Forgotten Land (Demo version)",status-playable;demo,playable,2022-08-21 21:03:01.000 -0100227010460000,"Kirby Fighters 2",ldn-works;online;status-playable,playable,2021-06-17 13:06:39.000 -01007E3006DDA000,"Kirby Star Allies",status-playable;nvdec,playable,2023-11-15 17:06:19.000 -0100A8E016236000,"Kirby’s Dream Buffet",status-ingame;crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44.000 -01006B601380E000,"Kirby’s Return to Dream Land Deluxe",status-playable,playable,2024-05-16 19:58:04.000 -010091D01A57E000,"Kirby’s Return to Dream Land Deluxe - Demo",status-playable;demo,playable,2023-02-18 17:21:55.000 -0100F3A00F4CA000,"Kissed by the Baddest Bidder",gpu;status-ingame;nvdec,ingame,2022-12-04 20:57:11.000 -01000C900A136000,"Kitten Squad",status-playable;nvdec,playable,2022-08-03 12:01:59.000 -,"Klondike Solitaire",status-playable,playable,2020-12-13 16:17:27.000 -,"Knight Squad",status-playable,playable,2020-08-09 16:54:51.000 -010024B00E1D6000,"Knight Squad 2",status-playable;nvdec;online-broken,playable,2022-10-28 18:38:09.000 -,"Knight Terrors",status-playable,playable,2020-05-13 13:09:22.000 -,"Knightin'+",status-playable,playable,2020-08-31 18:18:21.000 -,"Knights of Pen and Paper +1 Deluxier Edition",status-playable,playable,2020-05-11 21:46:32.000 -,"Knights of Pen and Paper 2 Deluxiest Edition",status-playable,playable,2020-05-13 14:07:00.000 -010001A00A1F6000,"Knock-Knock",nvdec;status-playable,playable,2021-02-01 20:03:19.000 -01009EF00DDB4000,"Knockout City",services;status-boots;online-broken,boots,2022-12-09 09:48:58.000 -0100C57019BA2000,"Koa and the Five Pirates of Mara",gpu;status-ingame,ingame,2024-07-11 16:14:44.000 -,"Koi DX",status-playable,playable,2020-05-11 21:37:51.000 -,"Koi no Hanasaku Hyakkaen",32-bit;gpu;nvdec;status-ingame,ingame,2020-10-03 14:17:10.000 -01005D200C9AA000,"Koloro",status-playable,playable,2022-08-03 12:34:02.000 -0100464009294000,"Kona",status-playable,playable,2022-08-03 12:48:19.000 -010016C011AAA000,"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",status-playable,playable,2023-04-26 09:51:08.000 -,"Koral",UE4;crash;gpu;status-menus,menus,2020-11-16 12:41:26.000 -,"KORG Gadget",status-playable,playable,2020-05-13 13:57:24.000 -010046600CCA4000,"Kotodama: The 7 Mysteries of Fujisawa",audout;status-playable,playable,2021-02-01 20:28:37.000 -010022801242C000,"KukkoroDays",status-menus;crash,menus,2021-11-25 08:52:56.000 -010035A00DF62000,"KUNAI",status-playable;nvdec,playable,2022-09-20 13:48:34.000 -010060400ADD2000,"Kunio-Kun: The World Classics Collection",online;status-playable,playable,2021-01-29 20:21:46.000 -010037500F282000,"KUUKIYOMI 2: Consider It More! - New Era",status-nothing;crash;Needs Update,nothing,2021-11-02 09:34:40.000 -0100894011F62000,"Kwaidan ~Azuma manor story~",status-playable,playable,2022-10-05 12:50:44.000 -0100830004FB6000,"L.A. Noire",status-playable,playable,2022-08-03 16:49:35.000 -,"L.F.O. - Lost Future Omega -",UE4;deadlock;status-boots,boots,2020-10-16 12:16:44.000 -0100F2B0123AE000,"L.O.L. Surprise! Remix: We Rule the World",status-playable,playable,2022-10-11 22:48:03.000 -010038000F644000,"La Mulana 2",status-playable,playable,2022-09-03 13:45:57.000 -010026000F662800,"LA-MULANA",gpu;status-ingame,ingame,2022-08-12 01:06:21.000 -0100E5D00F4AE000,"LA-MULANA 1 & 2",status-playable,playable,2022-09-22 17:56:36.000 -010058500B3E0000,"Labyrinth of Refrain: Coven of Dusk",status-playable,playable,2021-02-15 17:38:48.000 -,"Labyrinth of the Witch",status-playable,playable,2020-11-01 14:42:37.000 -0100BAB00E8C0000,"Langrisser I and II",status-playable,playable,2021-02-19 15:46:10.000 -,"Lanota",status-playable,playable,2019-09-04 01:58:14.000 -01005E000D3D8000,"Lapis x Labyrinth",status-playable,playable,2021-02-01 18:58:08.000 -,"Laraan",status-playable,playable,2020-12-16 12:45:48.000 -0100DA700879C000,"Last Day of June",nvdec;status-playable,playable,2021-06-08 11:35:32.000 -01009E100BDD6000,"LAST FIGHT",status-playable,playable,2022-09-20 13:54:55.000 -0100055007B86000,"Late Shift",nvdec;status-playable,playable,2021-02-01 18:43:58.000 -,"Later Daters",status-playable,playable,2020-07-29 16:35:45.000 -01001730144DA000,"Layers of Fear 2",status-playable;nvdec;UE4,playable,2022-10-28 18:49:52.000 -,"Layers of Fear: Legacy",nvdec;status-playable,playable,2021-02-15 16:30:41.000 -0100CE500D226000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",status-playable;nvdec;opengl,playable,2022-09-14 15:01:57.000 -0100FDB00AA80000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",gpu;status-ingame;nvdec;opengl,ingame,2022-09-14 15:15:55.000 -01009C100390E000,"League of Evil",online;status-playable,playable,2021-06-08 11:23:27.000 -,"Left-Right: The Mansion",status-playable,playable,2020-05-13 13:02:12.000 -010079901C898000,"Legacy of Kain™ Soul Reaver 1&2 Remastered",status-playable,playable,2025-01-07 05:50:01.000 -01002DB007A96000,"Legend of Kay Anniversary",nvdec;status-playable,playable,2021-01-29 18:38:29.000 -,"Legend of the Skyfish",status-playable,playable,2020-06-24 13:04:22.000 -,"Legend of the Tetrarchs",deadlock;status-ingame,ingame,2020-07-10 07:54:03.000 -0100A73006E74000,"Legendary Eleven",status-playable,playable,2021-06-08 12:09:03.000 -0100A7700B46C000,"Legendary Fishing",online;status-playable,playable,2021-04-14 15:08:46.000 -0100739018020000,"LEGO 2K Drive",gpu;status-ingame;ldn-works,ingame,2024-04-09 02:05:12.000 -01003A30012C0000,"Lego City Undercover",status-playable;nvdec,playable,2024-09-30 08:44:27.000 -010070D009FEC000,"LEGO DC Super-Villains",status-playable,playable,2021-05-27 18:10:37.000 -010052A00B5D2000,"LEGO Harry Potter Collection",status-ingame;crash,ingame,2024-01-31 10:28:07.000 -010073C01AF34000,"LEGO Horizon Adventures",status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56.000 -01001C100E772000,"LEGO Jurassic World",status-playable,playable,2021-05-27 17:00:20.000 -01006F600FFC8000,"LEGO Marvel Super Heroes",status-playable,playable,2024-09-10 19:02:19.000 -0100D3A00409E000,"LEGO Marvel Super Heroes 2",status-nothing;crash,nothing,2023-03-02 17:12:33.000 -010042D00D900000,"LEGO Star Wars: The Skywalker Saga",gpu;slow;status-ingame,ingame,2024-04-13 20:08:46.000 -0100A01006E00000,"LEGO The Incredibles",status-nothing;crash,nothing,2022-08-03 18:36:59.000 -,"LEGO Worlds",crash;slow;status-ingame,ingame,2020-07-17 13:35:39.000 -,"Legrand Legacy: Tale of the Fatebounds",nvdec;status-playable,playable,2020-07-26 12:27:36.000 -010031A0135CA000,"Leisure Suit Larry - Wet Dreams Dry Twice",status-playable,playable,2022-10-28 19:00:57.000 -0100A8E00CAA0000,"Leisure Suit Larry: Wet Dreams Don't Dry",status-playable,playable,2022-08-03 19:51:44.000 -01003AB00983C000,"Lethal League Blaze",online;status-playable,playable,2021-01-29 20:13:31.000 -,"Letter Quest Remastered",status-playable,playable,2020-05-11 21:30:34.000 -0100CE301678E800,"Letters - a written adventure",gpu;status-ingame,ingame,2023-02-21 20:12:38.000 -,"Levelhead",online;status-ingame,ingame,2020-10-18 11:44:51.000 -,"Levels+",status-playable,playable,2020-05-12 13:51:39.000 -0100C8000F146000,"Liberated",gpu;status-ingame;nvdec,ingame,2024-07-04 04:58:24.000 -01003A90133A6000,"Liberated: Enhanced Edition",gpu;status-ingame;nvdec,ingame,2024-07-04 04:48:48.000 -,"Lichtspeer: Double Speer Edition",status-playable,playable,2020-05-12 16:43:09.000 -010041F0128AE000,"Liege Dragon",status-playable,playable,2022-10-12 10:27:03.000 -010006300AFFE000,"Life Goes On",status-playable,playable,2021-01-29 19:01:20.000 -0100FD101186C000,"Life is Strange 2",status-playable;UE4,playable,2024-07-04 05:05:58.000 -0100DC301186A000,"Life is Strange Remastered",status-playable;UE4,playable,2022-10-03 16:54:44.000 -010008501186E000,"Life is Strange: Before the Storm Remastered",status-playable,playable,2023-09-28 17:15:44.000 -0100500012AB4000,"Life is Strange: True Colors [0100500012AB4000]",gpu;status-ingame;UE4,ingame,2024-04-08 16:11:52.000 -,"Life of Boris: Super Slav",status-ingame,ingame,2020-12-17 11:40:05.000 -0100B3A0135D6000,"Life of Fly",status-playable,playable,2021-01-25 23:41:07.000 -010069A01506E000,"Life of Fly 2",slow;status-playable,playable,2022-10-28 19:26:52.000 -01005B6008132000,"Lifeless Planet",status-playable,playable,2022-08-03 21:25:13.000 -,"Light Fall",nvdec;status-playable,playable,2021-01-18 14:55:36.000 -010087700D07C000,"Light Tracer",nvdec;status-playable,playable,2021-05-05 19:15:43.000 -01009C8009026000,"LIMBO",cpu;status-boots;32-bit,boots,2023-06-28 15:39:19.000 -,"Linelight",status-playable,playable,2020-12-17 12:18:07.000 -,"Lines X",status-playable,playable,2020-05-11 15:28:30.000 -,"Lines XL",status-playable,playable,2020-08-31 17:48:23.000 -0100943010310000,"Little Busters! Converted Edition",status-playable;nvdec,playable,2022-09-29 15:34:56.000 -,"Little Dragons Cafe",status-playable,playable,2020-05-12 00:00:52.000 -,"LITTLE FRIENDS -DOGS & CATS-",status-playable,playable,2020-11-12 12:45:51.000 -,"Little Inferno",32-bit;gpu;nvdec;status-ingame,ingame,2020-12-17 21:43:56.000 -0100E7000E826000,"Little Misfortune",nvdec;status-playable,playable,2021-02-23 20:39:44.000 -0100FE0014200000,"Little Mouse's Encyclopedia",status-playable,playable,2022-10-28 19:38:58.000 -01002FC00412C000,"Little Nightmares",status-playable;nvdec;UE4,playable,2022-08-03 21:45:35.000 -010097100EDD6000,"Little Nightmares II",status-playable;UE4,playable,2023-02-10 18:24:44.000 -010093A0135D6000,"Little Nightmares II DEMO",status-playable;UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20.000 -0100535014D76000,"Little Noah: Scion of Paradise",status-playable;opengl-backend-bug,playable,2022-09-14 04:17:13.000 -0100E6D00E81C000,"Little Racer",status-playable,playable,2022-10-18 16:41:13.000 -,"Little Shopping",status-playable,playable,2020-10-03 16:34:35.000 -,"Little Town Hero",status-playable,playable,2020-10-15 23:28:48.000 -,"Little Triangle",status-playable,playable,2020-06-17 14:46:26.000 -0100CF801776C000,"LIVE A LIVE",status-playable;UE4;amd-vendor-bug,playable,2023-02-05 15:12:07.000 -0100BA000FC9C000,"LOCO-SPORTS",status-playable,playable,2022-09-20 14:09:30.000 -,"Lode Runner Legacy",status-playable,playable,2021-01-10 14:10:28.000 -,"Lofi Ping Pong",crash;status-ingame,ingame,2020-12-15 20:09:22.000 -0100B6D016EE6000,"Lone Ruin",status-ingame;crash;nvdec,ingame,2023-01-17 06:41:19.000 -0100A0C00E0DE000,"Lonely Mountains Downhill",status-playable;online-broken,playable,2024-07-04 05:08:11.000 -010062A0178A8000,"LOOPERS",gpu;slow;status-ingame;crash,ingame,2022-06-17 19:21:45.000 -,"Lost Horizon",status-playable,playable,2020-09-01 13:41:22.000 -,"Lost Horizon 2",nvdec;status-playable,playable,2020-06-16 12:02:12.000 -01005FE01291A000,"Lost in Random",gpu;status-ingame,ingame,2022-12-18 07:09:28.000 -0100156014C6A000,"Lost Lands 3: The Golden Curse",status-playable;nvdec,playable,2022-10-24 16:30:00.000 -0100BDD010AC8000,"Lost Lands: Dark Overlord",status-playable,playable,2022-10-03 11:52:58.000 -0100133014510000,"Lost Lands: The Four Horsemen",status-playable;nvdec,playable,2022-10-24 16:41:00.000 -010054600AC74000,"LOST ORBIT: Terminal Velocity",status-playable,playable,2021-06-14 12:21:12.000 -,"Lost Phone Stories",services;status-ingame,ingame,2020-04-05 23:17:33.000 -01008AD013A86800,"Lost Ruins",gpu;status-ingame,ingame,2023-02-19 14:09:00.000 -,"LOST SPHEAR",status-playable,playable,2021-01-10 06:01:21.000 -0100018013124000,"Lost Words: Beyond the Page",status-playable,playable,2022-10-24 17:03:21.000 -0100D36011AD4000,"Love Letter from Thief X",gpu;status-ingame;nvdec,ingame,2023-11-14 03:55:31.000 -,"Ludo Mania",crash;services;status-nothing,nothing,2020-04-03 00:33:47.000 -010048701995E000,"Luigi's Mansion 2 HD",status-ingame;ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27.000 -0100DCA0064A6000,"Luigi's Mansion 3",gpu;slow;status-ingame;Needs Update;ldn-works,ingame,2024-09-27 22:17:36.000 -,"Lumini",status-playable,playable,2020-08-09 20:45:09.000 -0100FF00042EE000,"Lumo",status-playable;nvdec,playable,2022-02-11 18:20:30.000 -,"Lust for Darkness",nvdec;status-playable,playable,2020-07-26 12:09:15.000 -0100F0B00F68E000,"Lust for Darkness: Dawn Edition",nvdec;status-playable,playable,2021-06-16 13:47:46.000 -0100EC2011A80000,"LUXAR",status-playable,playable,2021-03-04 21:11:57.000 -0100F2400D434000,"Machi Knights Blood bagos",status-playable;nvdec;UE4,playable,2022-09-14 15:08:04.000 -,"Mad Carnage",status-playable,playable,2021-01-10 13:00:07.000 -,"Mad Father",status-playable,playable,2020-11-12 13:22:10.000 -010061E00EB1E000,"Mad Games Tycoon",status-playable,playable,2022-09-20 14:23:14.000 -01004A200E722000,"Magazine Mogul",status-playable;loader-allocator,playable,2022-10-03 12:05:34.000 -,"MagiCat",status-playable,playable,2020-12-11 15:22:07.000 -,"Magicolors",status-playable,playable,2020-08-12 18:39:11.000 -01008C300B624000,"Mahjong Solitaire Refresh",status-boots;crash,boots,2022-12-09 12:02:55.000 -010099A0145E8000,"Mahluk dark demon",status-playable,playable,2021-04-15 13:14:24.000 -,"Mainlining",status-playable,playable,2020-06-05 01:02:00.000 -0100D9900F220000,"Maitetsu: Pure Station",status-playable,playable,2022-09-20 15:12:49.000 -0100A78017BD6000,"Makai Senki Disgaea 7",status-playable,playable,2023-10-05 00:22:18.000 -,"Mana Spark",status-playable,playable,2020-12-10 13:41:01.000 -010093D00CB22000,"Maneater",status-playable;nvdec;UE4,playable,2024-05-21 16:11:57.000 -,"Manifold Garden",status-playable,playable,2020-10-13 20:27:13.000 -0100C9A00952A000,"Manticore - Galaxy on Fire",status-boots;crash;nvdec,boots,2024-02-04 04:37:24.000 -0100E98002F6E000,"Mantis Burn Racing",status-playable;online-broken;ldn-broken,playable,2024-09-02 02:13:04.000 -01008E800D1FE000,"Marble Power Blast",status-playable,playable,2021-06-04 16:00:02.000 -,"Märchen Forest - 0100B201D5E000",status-playable,playable,2021-02-04 21:33:34.000 -0100DA7017C9E000,"Marco & The Galaxy Dragon Demo",gpu;status-ingame;demo,ingame,2023-06-03 13:05:33.000 -01006D0017F7A000,"Mario & Luigi: Brothership",status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00.000 -010002C00C270000,"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",status-ingame;crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55.000 -010067300059A000,"Mario + Rabbids Kingdom Battle",slow;status-playable;opengl-backend-bug,playable,2024-05-06 10:16:54.000 -0100317013770000,"Mario + Rabbids® Sparks of Hope",gpu;status-ingame;Needs Update,ingame,2024-06-20 19:56:19.000 -0100C9C00E25C000,"Mario Golf: Super Rush",gpu;status-ingame,ingame,2024-08-18 21:31:48.000 -0100152000022000,"Mario Kart 8 Deluxe",32-bit;status-playable;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17.000 -0100ED100BA3A000,"Mario Kart Live: Home Circuit",services;status-nothing;crash;Needs More Attention,nothing,2022-12-07 22:36:52.000 -01006FE013472000,"Mario Party Superstars",gpu;status-ingame;ldn-works;mac-bug,ingame,2024-05-16 11:23:34.000 -010019401051C000,"Mario Strikers: Battle League Football",status-boots;crash;nvdec,boots,2024-05-07 06:23:56.000 -0100BDE00862A000,"Mario Tennis Aces",gpu;status-ingame;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40.000 -0100B99019412000,"Mario vs. Donkey Kong",status-playable,playable,2024-05-04 21:22:39.000 -0100D9E01DBB0000,"Mario vs. Donkey Kong™ Demo",status-playable,playable,2024-02-18 10:40:06.000 -01009A700A538000,"Mark of the Ninja Remastered",status-playable,playable,2022-08-04 15:48:30.000 -010044600FDF0000,"Marooners",status-playable;nvdec;online-broken,playable,2022-10-18 21:35:26.000 -010060700AC50000,"Marvel Ultimate Alliance 3: The Black Order",status-playable;nvdec;ldn-untested,playable,2024-02-14 19:51:51.000 -01003DE00C95E000,"Mary Skelter 2",status-ingame;crash;regression,ingame,2023-09-12 07:37:28.000 -0100113008262000,"Masquerada: Songs and Shadows",status-playable,playable,2022-09-20 15:18:54.000 -01004800197F0000,"Master Detective Archives: Rain Code",gpu;status-ingame,ingame,2024-04-19 20:11:09.000 -0100CC7009196000,"Masters of Anima",status-playable;nvdec,playable,2022-08-04 16:00:09.000 -,"Mathland",status-playable,playable,2020-09-01 15:40:06.000 -,"Max & The Book of Chaos",status-playable,playable,2020-09-02 12:24:43.000 -01001C9007614000,"Max: The Curse Of Brotherhood",status-playable;nvdec,playable,2022-08-04 16:33:04.000 -,"Maze",status-playable,playable,2020-12-17 16:13:58.000 -0100EEF00CBC0000,"MEANDERS",UE4;gpu;status-ingame,ingame,2021-06-11 19:19:33.000 -,"Mech Rage",status-playable,playable,2020-11-18 12:30:16.000 -0100C4F005EB4000,"Mecho Tales",status-playable,playable,2022-08-04 17:03:19.000 -0100E4600D31A000,"Mechstermination Force",status-playable,playable,2024-07-04 05:39:15.000 -,"Medarot Classics Plus Kabuto Ver",status-playable,playable,2020-11-21 11:31:18.000 -,"Medarot Classics Plus Kuwagata Ver",status-playable,playable,2020-11-21 11:30:40.000 -0100BBC00CB9A000,"Mega Mall Story",slow;status-playable,playable,2022-08-04 17:10:58.000 -0100B0C0086B0000,"Mega Man 11",status-playable,playable,2021-04-26 12:07:53.000 -0100734016266000,"Mega Man Battle Network Legacy Collection Vol. 2",status-playable,playable,2023-08-03 18:04:32.000 -01002D4007AE0000,"Mega Man Legacy Collection Vol.1",gpu;status-ingame,ingame,2021-06-03 18:17:17.000 -,"Mega Man X Legacy Collection",audio;crash;services;status-menus,menus,2020-12-04 04:30:17.000 -,"Megabyte Punch",status-playable,playable,2020-10-16 14:07:18.000 -,"Megadimension Neptunia VII",32-bit;nvdec;status-playable,playable,2020-12-17 20:56:03.000 -010038E016264000,"Megaman Battle Network Legacy Collection Vol 1",status-playable,playable,2023-04-25 03:55:57.000 -,"Megaman Legacy Collection 2",status-playable,playable,2021-01-06 08:47:59.000 -010025C00D410000,"MEGAMAN ZERO/ZX LEGACY COLLECTION",status-playable,playable,2021-06-14 16:17:32.000 -010082B00E8B8000,"Megaquarium",status-playable,playable,2022-09-14 16:50:00.000 -010005A00B312000,"Megaton Rainfall",gpu;status-boots;opengl,boots,2022-08-04 18:29:43.000 -0100EA100DF92000,"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",32-bit;status-playable;nvdec,playable,2022-12-05 13:19:12.000 -0100B360068B2000,"Mekorama",gpu;status-boots,boots,2021-06-17 16:37:21.000 -01000FA010340000,"Melbits World",status-menus;nvdec;online,menus,2021-11-26 13:51:22.000 -0100F68019636000,"Melon Journey",status-playable,playable,2023-04-23 21:20:01.000 -,"Memories Off -Innocent Fille- for Dearest",status-playable,playable,2020-08-04 07:31:22.000 -010062F011E7C000,"Memory Lane",status-playable;UE4,playable,2022-10-05 14:31:03.000 -,"Meow Motors",UE4;gpu;status-ingame,ingame,2020-12-18 00:24:01.000 -,"Mercenaries Saga Chronicles",status-playable,playable,2021-01-10 12:48:19.000 -,"Mercenaries Wings The False Phoenix",crash;services;status-nothing,nothing,2020-05-08 22:42:12.000 -,"Mercenary Kings",online;status-playable,playable,2020-10-16 13:05:58.000 -0100E5000D3CA000,"Merchants of Kaidan",status-playable,playable,2021-04-15 11:44:28.000 -,"METAGAL",status-playable,playable,2020-06-05 00:05:48.000 -010047F01AA10000,"Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3",services-horizon;status-menus,menus,2024-07-24 06:34:06.000 -0100E8F00F6BE000,"METAL MAX Xeno Reborn",status-playable,playable,2022-12-05 15:33:53.000 -,"Metaloid: Origin",status-playable,playable,2020-06-04 20:26:35.000 -010055200E87E000,"Metamorphosis",UE4;audout;gpu;nvdec;status-ingame,ingame,2021-06-16 16:18:11.000 -0100D4900E82C000,"Metro 2033 Redux",gpu;status-ingame,ingame,2022-11-09 10:53:13.000 -0100F0400E850000,"Metro: Last Light Redux",slow;status-ingame;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52.000 -010093801237C000,"Metroid Dread",status-playable,playable,2023-11-13 04:02:36.000 -010012101468C000,"Metroid Prime Remastered",gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15.000 -0100A1200F20C000,"Midnight Evil",status-playable,playable,2022-10-18 22:55:19.000 -0100C1E0135E0000,"Mighty Fight Federation",online;status-playable,playable,2021-04-06 18:39:56.000 -0100AD701344C000,"Mighty Goose",status-playable;nvdec,playable,2022-10-28 20:25:38.000 -,"Mighty Gunvolt Burst",status-playable,playable,2020-10-19 16:05:49.000 -010060D00AE36000,"Mighty Switch Force! Collection",status-playable,playable,2022-10-28 20:40:32.000 -01003DA010E8A000,"Miitopia",gpu;services-horizon;status-ingame,ingame,2024-09-06 10:39:13.000 -01007DA0140E8000,"Miitopia Demo",services;status-menus;crash;demo,menus,2023-02-24 11:50:58.000 -,"Miles & Kilo",status-playable,playable,2020-10-22 11:39:49.000 -0100976008FBE000,"Millie",status-playable,playable,2021-01-26 20:47:19.000 -0100F5700C9A8000,"MIND Path to Thalamus",UE4;status-playable,playable,2021-06-16 17:37:25.000 -0100D71004694000,"Minecraft",status-ingame;crash;ldn-broken,ingame,2024-09-29 12:08:59.000 -01006BD001E06000,"Minecraft - Nintendo Switch Edition",status-playable;ldn-broken,playable,2023-10-15 01:47:08.000 -01006C100EC08000,"Minecraft Dungeons",status-playable;nvdec;online-broken;UE4,playable,2024-06-26 22:10:43.000 -01007C6012CC8000,"Minecraft Legends",gpu;status-ingame;crash,ingame,2024-03-04 00:32:24.000 -01003EF007ABA000,"Minecraft: Story Mode - Season Two",status-playable;online-broken,playable,2023-03-04 00:30:50.000 -010059C002AC2000,"Minecraft: Story Mode - The Complete Adventure",status-boots;crash;online-broken,boots,2022-08-04 18:56:58.000 -0100B7500F756000,"Minefield",status-playable,playable,2022-10-05 15:03:29.000 -01003560119A6000,"Mini Motor Racing X",status-playable,playable,2021-04-13 17:54:49.000 -,"Mini Trains",status-playable,playable,2020-07-29 23:06:20.000 -010039200EC66000,"Miniature - The Story Puzzle",status-playable;UE4,playable,2022-09-14 17:18:50.000 -010069200EB80000,"Ministry of Broadcast",status-playable,playable,2022-08-10 00:31:16.000 -0100C3F000BD8000,"Minna de Wai Wai! Spelunker",status-nothing;crash,nothing,2021-11-03 07:17:11.000 -0100FAE010864000,"Minoria",status-playable,playable,2022-08-06 18:50:50.000 -01005AB015994000,"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",gpu;status-playable,playable,2022-03-28 02:22:24.000 -0100CFA0138C8000,"Missile Dancer",status-playable,playable,2021-01-31 12:22:03.000 -0100E3601495C000,"Missing Features 2D",status-playable,playable,2022-10-28 20:52:54.000 -010059200CC40000,"Mist Hunter",status-playable,playable,2021-06-16 13:58:58.000 -,"Mittelborg: City of Mages",status-playable,playable,2020-08-12 19:58:06.000 -0100A9F01776A000,"MLB The Show 22 Tech Test",services;status-nothing;crash;Needs Update;demo,nothing,2022-12-09 10:28:34.000 -0100E2E01C32E000,"MLB The Show 24",services-horizon;status-nothing,nothing,2024-03-31 04:54:11.000 -0100876015D74000,"MLB® The Show™ 22",gpu;slow;status-ingame,ingame,2023-04-25 06:28:43.000 -0100913019170000,"MLB® The Show™ 23",gpu;status-ingame,ingame,2024-07-26 00:56:50.000 -,"MO:Astray",crash;status-ingame,ingame,2020-12-11 21:45:44.000 -,"Moai VI: Unexpected Guests",slow;status-playable,playable,2020-10-27 16:40:20.000 -0100D8700B712000,"Modern Combat Blackout",crash;status-nothing,nothing,2021-03-29 19:47:15.000 -010004900D772000,"Modern Tales: Age of Invention",slow;status-playable,playable,2022-10-12 11:20:19.000 -0100B8500D570000,"Moero Chronicle Hyper",32-bit;status-playable,playable,2022-08-11 07:21:56.000 -01004EB0119AC000,"Moero Crystal H",32-bit;status-playable;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22.000 -0100B46017500000,"MOFUMOFU Sensen",gpu;status-menus,menus,2024-09-21 21:51:08.000 -01004A400C320000,"Momodora: Revere Under the Moonlight",deadlock;status-nothing,nothing,2022-02-06 03:47:43.000 -01002CC00BC4C000,"Momonga Pinball Adventures",status-playable,playable,2022-09-20 16:00:40.000 -010093100DA04000,"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",gpu;status-ingame,ingame,2023-09-22 10:21:46.000 -0100FBD00ED24000,"MONKEY BARRELS",status-playable,playable,2022-09-14 17:28:52.000 -,"Monkey King: Master of the Clouds",status-playable,playable,2020-09-28 22:35:48.000 -01003030161DC000,"Monomals",gpu;status-ingame,ingame,2024-08-06 22:02:51.000 -0100F3A00FB78000,"Mononoke Slashdown",status-menus;crash,menus,2022-05-04 20:55:47.000 -01007430037F6000,"Monopoly for Nintendo Switch",status-playable;nvdec;online-broken,playable,2024-02-06 23:13:01.000 -01005FF013DC2000,"Monopoly Madness",status-playable,playable,2022-01-29 21:13:52.000 -0100E2D0128E6000,"Monster Blast",gpu;status-ingame,ingame,2023-09-02 20:02:32.000 -01006F7001D10000,"Monster Boy and the Cursed Kingdom",status-playable;nvdec,playable,2022-08-04 20:06:32.000 -,"Monster Bugs Eat People",status-playable,playable,2020-07-26 02:05:34.000 -0100742007266000,"Monster Energy Supercross - The Official Videogame",status-playable;nvdec;UE4,playable,2022-08-04 20:25:00.000 -0100F8100B982000,"Monster Energy Supercross - The Official Videogame 2",status-playable;nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24.000 -010097800EA20000,"Monster Energy Supercross - The Official Videogame 3",UE4;audout;nvdec;online;status-playable,playable,2021-06-14 12:37:54.000 -0100E9900ED74000,"Monster Farm",32-bit;nvdec;status-playable,playable,2021-05-05 19:29:13.000 -0100770008DD8000,"Monster Hunter Generation Ultimate",32-bit;status-playable;online-broken;ldn-works,playable,2024-03-18 14:35:36.000 -0100B04011742000,"Monster Hunter Rise",gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59.000 -010093A01305C000,"Monster Hunter Rise Demo",status-playable;online-broken;ldn-works;demo,playable,2022-10-18 23:04:17.000 -,"Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600",services;status-ingame,ingame,2022-07-10 19:27:30.000 -010042501329E000,"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",status-playable;demo,playable,2022-11-13 22:20:26.000 -,"Monster Hunter XX Demo",32-bit;cpu;status-nothing,nothing,2020-03-22 10:12:28.000 -0100C3800049C000,"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",status-playable,playable,2024-07-21 14:08:09.000 -010088400366E000,"MONSTER JAM CRUSH IT!™",UE4;nvdec;online;status-playable,playable,2021-04-08 19:29:27.000 -010095C00F354000,"Monster Jam Steel Titans",status-menus;crash;nvdec;UE4,menus,2021-11-14 09:45:38.000 -010051B0131F0000,"Monster Jam Steel Titans 2",status-playable;nvdec;UE4,playable,2022-10-24 17:17:59.000 -,"Monster Puzzle",status-playable,playable,2020-09-28 22:23:10.000 -,"Monster Sanctuary",crash;status-ingame,ingame,2021-04-04 05:06:41.000 -0100D30010C42000,"Monster Truck Championship",slow;status-playable;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51.000 -01004E10142FE000,"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",crash;status-ingame,ingame,2021-07-23 10:56:44.000 -010039F00EF70000,"Monstrum",status-playable,playable,2021-01-31 11:07:26.000 -,"Moonfall Ultimate",nvdec;status-playable,playable,2021-01-17 14:01:25.000 -0100E3D014ABC000,"Moorhuhn Jump and Run Traps and Treasures",status-playable,playable,2024-03-08 15:10:02.000 -010045C00F274000,"Moorkuhn Kart 2",status-playable;online-broken,playable,2022-10-28 21:10:35.000 -010040E00F642000,"Morbid: The Seven Acolytes",status-playable,playable,2022-08-09 17:21:58.000 -,"More Dark",status-playable,playable,2020-12-15 16:01:06.000 -,"Morphies Law",UE4;crash;ldn-untested;nvdec;online;status-menus,menus,2020-11-22 17:05:29.000 -,"Morphite",status-playable,playable,2021-01-05 19:40:55.000 -01006560184E6000,"Mortal Kombat 1",gpu;status-ingame,ingame,2024-09-04 15:45:47.000 -0100F2200C984000,"Mortal Kombat 11",slow;status-ingame;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17.000 -,"Mosaic",status-playable,playable,2020-08-11 13:07:35.000 -010040401D564000,"Moto GP 24",gpu;status-ingame,ingame,2024-05-10 23:41:00.000 -01002ED00B01C000,"Moto Racer 4",UE4;nvdec;online;status-playable,playable,2021-04-08 19:09:11.000 -01003F200D0F2000,"Moto Rush GT",status-playable,playable,2022-08-05 11:23:55.000 -0100361007268000,"MotoGP 18",status-playable;nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45.000 -01004B800D0E8000,"MotoGP 19",status-playable;nvdec;online-broken;UE4,playable,2022-08-05 11:54:14.000 -01001FA00FBBC000,"MotoGP 20",status-playable;ldn-untested,playable,2022-09-29 17:58:01.000 -01000F5013820000,"MotoGP 21",gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08.000 -01002A900D6D6000,"Motorsport Manager for Nintendo Switch",status-playable;nvdec,playable,2022-08-05 12:48:14.000 -01009DB00D6E0000,"Mountain Rescue Simulator",status-playable,playable,2022-09-20 16:36:48.000 -0100C4C00E73E000,"Moving Out",nvdec;status-playable,playable,2021-06-07 21:17:24.000 -0100D3300F110000,"Mr Blaster",status-playable,playable,2022-09-14 17:56:24.000 -,"Mr. DRILLER DrillLand",nvdec;status-playable,playable,2020-07-24 13:56:48.000 -,"Mr. Shifty",slow;status-playable,playable,2020-05-08 15:28:16.000 -,"Ms. Splosion Man",online;status-playable,playable,2020-05-09 20:45:43.000 -,"Muddledash",services;status-ingame,ingame,2020-05-08 16:46:14.000 -01009D200952E000,"MudRunner - American Wilds",gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52.000 -010073E008E6E000,"Mugsters",status-playable,playable,2021-01-28 17:57:17.000 -,"MUJO",status-playable,playable,2020-05-08 16:31:04.000 -0100211005E94000,"Mulaka",status-playable,playable,2021-01-28 18:07:20.000 -010038B00B9AE000,"Mummy Pinball",status-playable,playable,2022-08-05 16:08:11.000 -,"Muse Dash",status-playable,playable,2020-06-06 14:41:29.000 -,"Mushroom Quest",status-playable,playable,2020-05-17 13:07:08.000 -,"Mushroom Wars 2",nvdec;status-playable,playable,2020-09-28 15:26:08.000 -,"Music Racer",status-playable,playable,2020-08-10 08:51:23.000 -,"MUSNYX",status-playable,playable,2020-05-08 14:24:43.000 -,"Musou Orochi 2 Ultimate",crash;nvdec;status-boots,boots,2021-04-09 19:39:16.000 -0100F6000EAA8000,"Must Dash Amigos",status-playable,playable,2022-09-20 16:45:56.000 -0100C3E00ACAA000,"Mutant Football League Dynasty Edition",status-playable;online-broken,playable,2022-08-05 17:01:51.000 -01004BE004A86000,"Mutant Mudds Collection",status-playable,playable,2022-08-05 17:11:38.000 -0100E6B00DEA4000,"Mutant Year Zero: Road to Eden",status-playable;nvdec;UE4,playable,2022-09-10 13:31:10.000 -0100161009E5C000,"MX Nitro",status-playable,playable,2022-09-27 22:34:33.000 -0100218011E7E000,"MX vs ATV All Out",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46.000 -,"MXGP3 - The Official Motocross Videogame",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 14:00:20.000 -01002C6012334000,"My Aunt is a Witch",status-playable,playable,2022-10-19 09:21:17.000 -,"My Butler",status-playable,playable,2020-06-27 13:46:23.000 -010031200B94C000,"My Friend Pedro: Blood Bullets Bananas",nvdec;status-playable,playable,2021-05-28 11:19:17.000 -,"My Girlfriend is a Mermaid!?",nvdec;status-playable,playable,2020-05-08 13:32:55.000 -,"MY HERO ONE'S JUSTICE",UE4;crash;gpu;online;status-menus,menus,2020-12-10 13:11:04.000 -,"MY HERO ONE'S JUSTICE 2",UE4;gpu;nvdec;status-ingame,ingame,2020-12-18 14:08:47.000 -0100E4701373E000,"My Hidden Things",status-playable,playable,2021-04-15 11:26:06.000 -,"My Little Dog Adventure",gpu;status-ingame,ingame,2020-12-10 17:47:37.000 -,"My Little Riding Champion",slow;status-playable,playable,2020-05-08 17:00:53.000 -010086B00C784000,"My Lovely Daughter",status-playable,playable,2022-11-24 17:25:32.000 -0100E7700C284000,"My Memory of Us",status-playable,playable,2022-08-20 11:03:14.000 -010028F00ABAE000,"My Riding Stables - Life with Horses",status-playable,playable,2022-08-05 21:39:07.000 -010042A00FBF0000,"My Riding Stables 2: A New Adventure",status-playable,playable,2021-05-16 14:14:59.000 -0100E25008E68000,"My Time At Portia",status-playable,playable,2021-05-28 12:42:55.000 -0100CD5011A02000,"My Universe - Cooking Star Restaurant",status-playable,playable,2022-10-19 10:00:44.000 -0100F71011A0A000,"My Universe - Fashion Boutique",status-playable;nvdec,playable,2022-10-12 14:54:19.000 -0100CD5011A02000,"My Universe - Pet Clinic Cats & Dogs",status-boots;crash;nvdec,boots,2022-02-06 02:05:53.000 -01006C301199C000,"My Universe - School Teacher",nvdec;status-playable,playable,2021-01-21 16:02:52.000 -,"n Verlore Verstand",slow;status-ingame,ingame,2020-12-10 18:00:28.000 -01009A500E3DA000,"n Verlore Verstand - Demo",status-playable,playable,2021-02-09 00:13:32.000 -01000D5005974000,"N++",status-playable,playable,2022-08-05 21:54:58.000 -,"NAIRI: Tower of Shirin",nvdec;status-playable,playable,2020-08-09 19:49:12.000 -010002F001220000,"NAMCO MUSEUM",status-playable;ldn-untested,playable,2024-08-13 07:52:21.000 -0100DAA00AEE6000,"NAMCO MUSEUM ARCADE PAC",status-playable,playable,2021-06-07 21:44:50.000 -,"NAMCOT COLLECTION",audio;status-playable,playable,2020-06-25 13:35:22.000 -010072B00BDDE000,"Narcos: Rise of the Cartels",UE4;crash;nvdec;status-boots,boots,2021-03-22 13:18:47.000 -010084D00CF5E000,"NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO",status-playable,playable,2024-06-29 13:04:22.000 -01006BB00800A000,"NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst",status-playable;nvdec,playable,2024-06-16 14:58:05.000 -0100D2D0190A4000,"NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS",services-horizon;status-nothing,nothing,2024-07-25 05:16:48.000 -0100715007354000,"NARUTO™: Ultimate Ninja® STORM",status-playable;nvdec,playable,2022-08-06 14:10:31.000 -0100545016D5E000,"NASCAR Rivals",status-ingame;crash;Incomplete,ingame,2023-04-21 01:17:47.000 -0100103011894000,"Naught",UE4;status-playable,playable,2021-04-26 13:31:45.000 -01001AE00C1B2000,"NBA 2K Playgrounds 2",status-playable;nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38.000 -0100760002048000,"NBA 2K18",gpu;status-ingame;ldn-untested,ingame,2022-08-06 14:17:51.000 -01001FF00B544000,"NBA 2K19",crash;ldn-untested;services;status-nothing,nothing,2021-04-16 13:07:21.000 -0100E24011D1E000,"NBA 2K21",gpu;status-boots,boots,2022-10-05 15:31:51.000 -0100ACA017E4E800,"NBA 2K23",status-boots,boots,2023-10-10 23:07:14.000 -010006501A8D8000,"NBA 2K24",cpu;gpu;status-boots,boots,2024-08-11 18:23:08.000 -0100F5A008126000,"NBA Playgrounds",status-playable;nvdec;online-broken;UE4,playable,2022-08-06 16:13:44.000 -010002900294A000,"NBA Playgrounds",status-playable;nvdec;online-broken;UE4,playable,2022-08-06 17:06:59.000 -,"Need a Packet?",status-playable,playable,2020-08-12 16:09:01.000 -010029B0118E8000,"Need for Speed Hot Pursuit Remastered",status-playable;online-broken,playable,2024-03-20 21:58:02.000 -,"Need For Speed Hot Pursuit Remastered",audio;online;slow;status-ingame,ingame,2020-10-27 17:46:58.000 -,"Nefarious",status-playable,playable,2020-12-17 03:20:33.000 -01008390136FC000,"Negative",nvdec;status-playable,playable,2021-03-24 11:29:41.000 -010065F00F55A000,"Neighbours back From Hell",status-playable;nvdec,playable,2022-10-12 15:36:48.000 -0100B4900AD3E000,"Nekopara Vol.1",status-playable;nvdec,playable,2022-08-06 18:25:54.000 -,"Nekopara Vol.2",status-playable,playable,2020-12-16 11:04:47.000 -010045000E418000,"Nekopara Vol.3",status-playable,playable,2022-10-03 12:49:04.000 -,"Nekopara Vol.4",crash;status-ingame,ingame,2021-01-17 01:47:18.000 -01006ED00BC76000,"Nelke & the Legendary Alchemists ~Ateliers of the New World~",status-playable,playable,2021-01-28 19:39:42.000 -,"Nelly Cootalot",status-playable,playable,2020-06-11 20:55:42.000 -01001AB0141A8000,"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",crash;status-ingame,ingame,2021-07-18 07:29:18.000 -0100EBB00D2F4000,"Neo Cab",status-playable,playable,2021-04-24 00:27:58.000 -,"Neo Cab Demo",crash;status-boots,boots,2020-06-16 00:14:00.000 -010006D0128B4000,"NEOGEO POCKET COLOR SELECTION Vol.1",status-playable,playable,2023-07-08 20:55:36.000 -0100BAB01113A000,"Neon Abyss",status-playable,playable,2022-10-05 15:59:44.000 -010075E0047F8000,"Neon Chrome",status-playable,playable,2022-08-06 18:38:34.000 -010032000EAC6000,"Neon Drive",status-playable,playable,2022-09-10 13:45:48.000 -0100B9201406A000,"Neon White",status-ingame;crash,ingame,2023-02-02 22:25:06.000 -0100743008694000,"Neonwall",status-playable;nvdec,playable,2022-08-06 18:49:52.000 -,"Neoverse Trinity Edition - 01001A20133E000",status-playable,playable,2022-10-19 10:28:03.000 -,"Nerdook Bundle Vol. 1",gpu;slow;status-ingame,ingame,2020-10-07 14:27:10.000 -01008B0010160000,"Nerved",status-playable;UE4,playable,2022-09-20 17:14:03.000 -,"NeuroVoider",status-playable,playable,2020-06-04 18:20:05.000 -0100C20012A54000,"Nevaeh",gpu;nvdec;status-ingame,ingame,2021-06-16 17:29:03.000 -010039801093A000,"Never Breakup",status-playable,playable,2022-10-05 16:12:12.000 -0100F79012600000,"Neverending Nightmares",crash;gpu;status-boots,boots,2021-04-24 01:43:35.000 -,"Neverlast",slow;status-ingame,ingame,2020-07-13 23:55:19.000 -010013700DA4A000,"Neverwinter Nights: Enhanced Edition",gpu;status-menus;nvdec,menus,2024-09-30 02:59:19.000 -,"New Frontier Days -Founding Pioneers-",status-playable,playable,2020-12-10 12:45:07.000 -0100F4300BF2C000,"New Pokémon Snap",status-playable,playable,2023-01-15 23:26:57.000 -010017700B6C2000,"New Super Lucky's Tale",status-playable,playable,2024-03-11 14:14:10.000 -0100EA80032EA000,"New Super Mario Bros. U Deluxe",32-bit;status-playable,playable,2023-10-08 02:06:37.000 -,"Newt One",status-playable,playable,2020-10-17 21:21:48.000 -,"Nexomon: Extinction",status-playable,playable,2020-11-30 15:02:22.000 -0100B69012EC6000,"Nexoria: Dungeon Rogue Heroes",gpu;status-ingame,ingame,2021-10-04 18:41:29.000 -,"Next Up Hero",online;status-playable,playable,2021-01-04 22:39:36.000 -0100E5600D446000,"Ni No Kuni Wrath of the White Witch",status-boots;32-bit;nvdec,boots,2024-07-12 04:52:59.000 -,"Nice Slice",nvdec;status-playable,playable,2020-06-17 15:13:27.000 -,"Niche - a genetics survival game",nvdec;status-playable,playable,2020-11-27 14:01:11.000 -010010701AFB2000,"Nickelodeon All-Star Brawl 2",status-playable,playable,2024-06-03 14:15:01.000 -,"Nickelodeon Kart Racers",status-playable,playable,2021-01-07 12:16:49.000 -0100CEC003A4A000,"Nickelodeon Paw Patrol: On a Roll",nvdec;status-playable,playable,2021-01-28 21:14:49.000 -,"Nicky: The Home Alone Golf Ball",status-playable,playable,2020-08-08 13:45:39.000 -0100A95012668000,"Nicole",status-playable;audout,playable,2022-10-05 16:41:44.000 -0100B8E016F76000,"NieR:Automata The End of YoRHa Edition",slow;status-ingame;crash,ingame,2024-05-17 01:06:34.000 -0100F3A0095A6000,"Night Call",status-playable;nvdec,playable,2022-10-03 12:57:00.000 -0100921006A04000,"Night in the Woods",status-playable,playable,2022-12-03 20:17:54.000 -0100D8500A692000,"Night Trap - 25th Anniversary Edition",status-playable;nvdec,playable,2022-08-08 13:16:14.000 -,"Nightmare Boy",status-playable,playable,2021-01-05 15:52:29.000 -01006E700B702000,"Nightmares from the Deep 2: The Siren's Call",status-playable;nvdec,playable,2022-10-19 10:58:53.000 -0100628004BCE000,"Nights of Azure 2: Bride of the New Moon",status-menus;crash;nvdec;regression,menus,2022-11-24 16:00:39.000 -,"Nightshade",nvdec;status-playable,playable,2020-05-10 19:43:31.000 -,"Nihilumbra",status-playable,playable,2020-05-10 16:00:12.000 -0100D03003F0E000,"Nine Parchments",status-playable;ldn-untested,playable,2022-08-07 12:32:08.000 -01002AF014F4C000,"NINJA GAIDEN 3: Razor's Edge",status-playable;nvdec,playable,2023-08-11 08:25:31.000 -0100E2F014F46000,"Ninja Gaiden Sigma",status-playable;nvdec,playable,2022-11-13 16:27:02.000 -,"Ninja Gaiden Sigma 2 - 0100696014FA000",status-playable;nvdec,playable,2024-07-31 21:53:48.000 -,"Ninja Shodown",status-playable,playable,2020-05-11 12:31:21.000 -,"Ninja Striker",status-playable,playable,2020-12-08 19:33:29.000 -0100CCD0073EA000,"Ninjala",status-boots;online-broken;UE4,boots,2024-07-03 20:04:49.000 -010003C00B868000,"Ninjin: Clash of Carrots",status-playable;online-broken,playable,2024-07-10 05:12:26.000 -0100746010E4C000,"NinNinDays",status-playable,playable,2022-11-20 15:17:29.000 -0100C9A00ECE6000,"Nintendo 64 - Nintendo Switch Online",gpu;status-ingame;vulkan,ingame,2024-04-23 20:21:07.000 -0100D870045B6000,"Nintendo Entertainment System - Nintendo Switch Online",status-playable;online,playable,2022-07-01 15:45:06.000 -0100C4B0034B2000,"Nintendo Labo - Toy-Con 01: Variety Kit",gpu;status-ingame,ingame,2022-08-07 12:56:07.000 -01009AB0034E0000,"Nintendo Labo Toy-Con 02: Robot Kit",gpu;status-ingame,ingame,2022-08-07 13:03:19.000 -01001E9003502000,"Nintendo Labo Toy-Con 03: Vehicle Kit",services;status-menus;crash,menus,2022-08-03 17:20:11.000 -0100165003504000,"Nintendo Labo Toy-Con 04: VR Kit",services;status-boots;crash,boots,2023-01-17 22:30:24.000 -0100D2F00D5C0000,"Nintendo Switch Sports",deadlock;status-boots,boots,2024-09-10 14:20:24.000 -01000EE017182000,"Nintendo Switch Sports Online Play Test",gpu;status-ingame,ingame,2022-03-16 07:44:12.000 -010037200C72A000,"Nippon Marathon",nvdec;status-playable,playable,2021-01-28 20:32:46.000 -010020901088A000,"Nirvana Pilot Yume",status-playable,playable,2022-10-29 11:49:49.000 -,"No Heroes Here",online;status-playable,playable,2020-05-10 02:41:57.000 -0100853015E86000,"No Man’s Sky",gpu;status-ingame,ingame,2024-07-25 05:18:17.000 -0100F0400F202000,"No More Heroes",32-bit;status-playable,playable,2022-09-13 07:44:27.000 -010071400F204000,"No More Heroes 2 Desperate Struggle",32-bit;status-playable;nvdec,playable,2022-11-19 01:38:13.000 -01007C600EB42000,"No More Heroes 3",gpu;status-ingame;UE4,ingame,2024-03-11 17:06:19.000 -01009F3011004000,"No Straight Roads",status-playable;nvdec,playable,2022-10-05 17:01:38.000 -,"NO THING",status-playable,playable,2021-01-04 19:06:01.000 -0100542012884000,"Nongunz: Doppelganger Edition",status-playable,playable,2022-10-29 12:00:39.000 -,"Norman's Great Illusion",status-playable,playable,2020-12-15 19:28:24.000 -01001A500AD6A000,"Norn9 ~Norn + Nonette~ LOFN",status-playable;nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16.000 -,"NORTH",nvdec;status-playable,playable,2021-01-05 16:17:44.000 -0100A9E00D97A000,"Northgard",status-menus;crash,menus,2022-02-06 02:05:35.000 -01008AE019614000,"nOS new Operating System",status-playable,playable,2023-03-22 16:49:08.000 -0100CB800B07E000,"NOT A HERO",status-playable,playable,2021-01-28 19:31:24.000 -,"Not Not a Brain Buster",status-playable,playable,2020-05-10 02:05:26.000 -0100DAF00D0E2000,"Not Tonight",status-playable;nvdec,playable,2022-10-19 11:48:47.000 -,"Nubarron: The adventure of an unlucky gnome",status-playable,playable,2020-12-17 16:45:17.000 -,"Nuclien",status-playable,playable,2020-05-10 05:32:55.000 -,"Numbala",status-playable,playable,2020-05-11 12:01:07.000 -010020500C8C8000,"Number Place 10000",gpu;status-menus,menus,2021-11-24 09:14:23.000 -010003701002C000,"Nurse Love Syndrome",status-playable,playable,2022-10-13 10:05:22.000 -0000000000000000,"nx-hbmenu",status-boots;Needs Update;homebrew,boots,2024-04-06 22:05:32.000 -,"nxquake2",services;status-nothing;crash;homebrew,nothing,2022-08-04 23:14:04.000 -010049F00EC30000,"Nyan Cat: Lost in Space",online;status-playable,playable,2021-06-12 13:22:03.000 -01002E6014FC4000,"O---O",status-playable,playable,2022-10-29 12:12:14.000 -,"OBAKEIDORO!",nvdec;online;status-playable,playable,2020-10-16 16:57:34.000 -01002A000C478000,"Observer",UE4;gpu;nvdec;status-ingame,ingame,2021-03-03 20:19:45.000 -,"Oceanhorn",status-playable,playable,2021-01-05 13:55:22.000 -01006CB010840000,"Oceanhorn 2 Knights of the Lost Realm",status-playable,playable,2021-05-21 18:26:10.000 -,"Octocopter: Double or Squids",status-playable,playable,2021-01-06 01:30:16.000 -0100CAB006F54000,"Octodad Dadliest Catch",crash;status-boots,boots,2021-04-23 15:26:12.000 -,"Octopath Traveler",UE4;crash;gpu;status-ingame,ingame,2020-08-31 02:34:36.000 -0100A3501946E000,"Octopath Traveler II",gpu;status-ingame;amd-vendor-bug,ingame,2024-09-22 11:39:20.000 -010084300C816000,"Odallus",status-playable,playable,2022-08-08 12:37:58.000 -0100BB500EE3C000,"Oddworld: Munch's Oddysee",gpu;nvdec;status-ingame,ingame,2021-06-17 12:11:50.000 -01005E700ABB8000,"Oddworld: New 'n' Tasty",nvdec;status-playable,playable,2021-06-17 17:51:32.000 -0100D210177C6000,"Oddworld: Soulstorm",services-horizon;status-boots;crash,boots,2024-08-18 13:13:26.000 -01002EA00ABBA000,"Oddworld: Stranger's Wrath HD",status-menus;crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21.000 -,"Odium to the Core",gpu;status-ingame,ingame,2021-01-08 14:03:52.000 -01006F5013202000,"Off And On Again",status-playable,playable,2022-10-29 19:46:26.000 -01003CD00E8BC000,"Offroad Racing",status-playable;online-broken;UE4,playable,2022-09-14 18:53:22.000 -01003B900AE12000,"Oh My Godheads: Party Edition",status-playable,playable,2021-04-15 11:04:11.000 -,"Oh...Sir! The Hollywood Roast",status-ingame,ingame,2020-12-06 00:42:30.000 -,"OK K.O.! Let's Play Heroes",nvdec;status-playable,playable,2021-01-11 18:41:02.000 -0100276009872000,"OKAMI HD",status-playable;nvdec,playable,2024-04-05 06:24:58.000 -01006AB00BD82000,"OkunoKA",status-playable;online-broken,playable,2022-08-08 14:41:51.000 -0100CE2007A86000,"Old Man's Journey",nvdec;status-playable,playable,2021-01-28 19:16:52.000 -,"Old School Musical",status-playable,playable,2020-12-10 12:51:12.000 -,"Old School Racer 2",status-playable,playable,2020-10-19 12:11:26.000 -0100E0200B980000,"OlliOlli: Switch Stance",gpu;status-boots,boots,2024-04-25 08:36:37.000 -0100F9D00C186000,"Olympia Soiree",status-playable,playable,2022-12-04 21:07:12.000 -,"OLYMPIC GAMES TOKYO 2020",ldn-untested;nvdec;online;status-playable,playable,2021-01-06 01:20:24.000 -01001D600E51A000,"Omega Labyrinth Life",status-playable,playable,2021-02-23 21:03:03.000 -,"Omega Vampire",nvdec;status-playable,playable,2020-10-17 19:15:35.000 -,"Omensight: Definitive Edition",UE4;crash;nvdec;status-ingame,ingame,2020-07-26 01:45:14.000 -01006DB00D970000,"OMG Zombies!",32-bit;status-playable,playable,2021-04-12 18:04:45.000 -010014E017B14000,"OMORI",status-playable,playable,2023-01-07 20:21:02.000 -,"Once Upon A Coma",nvdec;status-playable,playable,2020-08-01 12:09:39.000 -,"One More Dungeon",status-playable,playable,2021-01-06 09:10:58.000 -,"One Person Story",status-playable,playable,2020-07-14 11:51:02.000 -,"One Piece Pirate Warriors 3",nvdec;status-playable,playable,2020-05-10 06:23:52.000 -,"One Piece Unlimited World Red Deluxe Edition",status-playable,playable,2020-05-10 22:26:32.000 -01008FE00E2F6000,"ONE PIECE: PIRATE WARRIORS 4",status-playable;online-broken;ldn-untested,playable,2022-09-27 22:55:46.000 -0100463013246000,"Oneiros",status-playable,playable,2022-10-13 10:17:22.000 -,"OneWayTicket",UE4;status-playable,playable,2020-06-20 17:20:49.000 -010057C00D374000,"Oniken",status-playable,playable,2022-09-10 14:22:38.000 -010037900C814000,"Oniken: Unstoppable Edition",status-playable,playable,2022-08-08 14:52:06.000 -,"Onimusha: Warlords",nvdec;status-playable,playable,2020-07-31 13:08:39.000 -0100CF4011B2A000,"OniNaki",nvdec;status-playable,playable,2021-02-27 21:52:42.000 -010074000BE8E000,"oOo: Ascension",status-playable,playable,2021-01-25 14:13:34.000 -0100D5400BD90000,"Operación Triunfo 2017",services;status-ingame;nvdec,ingame,2022-08-08 15:06:42.000 -01006CF00CFA4000,"Operencia The Stolen Sun",UE4;nvdec;status-playable,playable,2021-06-08 13:51:07.000 -01004A200BE82000,"OPUS Collection",status-playable,playable,2021-01-25 15:24:04.000 -010049C0075F0000,"OPUS: The Day We Found Earth",nvdec;status-playable,playable,2021-01-21 18:29:31.000 -,"Ord.",status-playable,playable,2020-12-14 11:59:06.000 -010061D00DB74000,"Ori and the Blind Forest: Definitive Edition",status-playable;nvdec;online-broken,playable,2022-09-14 19:58:13.000 -010005800F46E000,"Ori and the Blind Forest: Definitive Edition Demo",status-playable,playable,2022-09-10 14:40:12.000 -01008DD013200000,"Ori and the Will of the Wisps",status-playable,playable,2023-03-07 00:47:13.000 -,"Orn: The Tiny Forest Sprite",UE4;gpu;status-ingame,ingame,2020-08-07 14:25:30.000 -0100E5900F49A000,"Othercide",status-playable;nvdec,playable,2022-10-05 19:04:38.000 -,"OTOKOMIZU",status-playable,playable,2020-07-13 21:00:44.000 -01006AF013A9E000,"Otti house keeper",status-playable,playable,2021-01-31 12:11:24.000 -,"OTTTD",slow;status-ingame,ingame,2020-10-10 19:31:07.000 -010097F010FE6000,"Our two Bedroom Story",gpu;status-ingame;nvdec,ingame,2023-10-10 17:41:20.000 -,"Our World Is Ended.",nvdec;status-playable,playable,2021-01-19 22:46:57.000 -01005A700A166000,"Out Of The Box",status-playable,playable,2021-01-28 01:34:27.000 -0100A0D013464000,"Outbreak: Endless Nightmares",status-playable,playable,2022-10-29 12:35:49.000 -0100C850130FE000,"Outbreak: Epidemic",status-playable,playable,2022-10-13 10:27:31.000 -0100D9F013102000,"Outbreak: Lost Hope",crash;status-boots,boots,2021-04-26 18:01:23.000 -0100B450130FC000,"Outbreak: The New Nightmare",status-playable,playable,2022-10-19 15:42:07.000 -01006EE013100000,"Outbreak: The Nightmare Chronicles",status-playable,playable,2022-10-13 10:41:57.000 -0100B8900EFA6000,"Outbuddies DX",gpu;status-ingame,ingame,2022-08-04 22:39:24.000 -01008D4007A1E000,"Outlast",status-playable;nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26.000 -0100DE70085E8000,"Outlast 2",status-ingame;crash;nvdec,ingame,2022-01-22 22:28:05.000 -01006FD0080B2000,"Overcooked! 2",status-playable;ldn-untested,playable,2022-08-08 16:48:10.000 -0100F28011892000,"Overcooked! All You Can Eat",ldn-untested;online;status-playable,playable,2021-04-15 10:33:52.000 -01009B900401E000,"Overcooked! Special Edition",status-playable,playable,2022-08-08 20:48:52.000 -0100D7F00EC64000,"Overlanders",status-playable;nvdec;UE4,playable,2022-09-14 20:15:06.000 -01008EA00E816000,"Overpass",status-playable;online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47.000 -0100647012F62000,"Override 2 Super Mech League",status-playable;online-broken;UE4,playable,2022-10-19 15:56:04.000 -01008A700F7EE000,"Override: Mech City Brawl - Super Charged Mega Edition",status-playable;nvdec;online-broken;UE4,playable,2022-09-20 17:33:32.000 -0100F8600E21E000,"Overwatch®: Legendary Edition",deadlock;status-boots,boots,2022-09-14 20:22:22.000 -01005F000CC18000,"OVERWHELM",status-playable,playable,2021-01-21 18:37:18.000 -,"Owlboy",status-playable,playable,2020-10-19 14:24:45.000 -0100AD9012510000,"PAC-MAN 99",gpu;status-ingame;online-broken,ingame,2024-04-23 00:48:25.000 -,"PAC-MAN CHAMPIONSHIP EDITION 2 PLUS",status-playable,playable,2021-01-19 22:06:18.000 -011123900AEE0000,"Paladins",online;status-menus,menus,2021-01-21 19:21:37.000 -0100F0D004CAE000,"PAN-PAN A tiny big adventure",audout;status-playable,playable,2021-01-25 14:42:00.000 -010083700B730000,"Pang Adventures",status-playable,playable,2021-04-10 12:16:59.000 -,"Pantsu Hunter",status-playable,playable,2021-02-19 15:12:27.000 -,"Panzer Dragoon: Remake",status-playable,playable,2020-10-04 04:03:55.000 -01004AE0108E0000,"Panzer Paladin",status-playable,playable,2021-05-05 18:26:00.000 -,"Paper Dolls Original",UE4;crash;status-boots,boots,2020-07-13 20:26:21.000 -0100A3900C3E2000,"Paper Mario The Origami King",audio;status-playable;Needs Update,playable,2024-08-09 18:27:40.000 -0100ECD018EBE000,"Paper Mario: The Thousand-Year Door",gpu;status-ingame;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35.000 -01006AD00B82C000,"Paperbound Brawlers",status-playable,playable,2021-01-25 14:32:15.000 -0100DC70174E0000,"Paradigm Paradox",status-playable;vulkan-backend-bug,playable,2022-12-03 22:28:13.000 -01007FB010DC8000,"Paradise Killer",status-playable;UE4,playable,2022-10-05 19:33:05.000 -010063400B2EC000,"Paranautical Activity",status-playable,playable,2021-01-25 13:49:19.000 -01006B5012B32000,"Part Time UFO",status-ingame;crash,ingame,2023-03-03 03:13:05.000 -01007FC00A040000,"Party Arcade",status-playable;online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53.000 -0100B8E00359E000,"Party Golf",status-playable;nvdec,playable,2022-08-09 12:38:30.000 -010022801217E000,"Party Hard 2",status-playable;nvdec,playable,2022-10-05 20:31:48.000 -,"Party Treats",status-playable,playable,2020-07-02 00:05:00.000 -01001E500EA16000,"Path of Sin: Greed",status-menus;crash,menus,2021-11-24 08:00:00.000 -010031F006E76000,"Pato Box",status-playable,playable,2021-01-25 15:17:52.000 -0100360016800000,"PAW Patrol: Grand Prix",gpu;status-ingame,ingame,2024-05-03 16:16:11.000 -01001F201121E000,"Paw Patrol: Might Pups Save Adventure Bay!",status-playable,playable,2022-10-13 12:17:55.000 -01000c4015030000,"Pawapoke R",services-horizon;status-nothing,nothing,2024-05-14 14:28:32.000 -0100A56006CEE000,"Pawarumi",status-playable;online-broken,playable,2022-09-10 15:19:33.000 -0100274004052000,"PAYDAY 2",status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39.000 -010085700ABC8000,"PBA Pro Bowling",status-playable;nvdec;online-broken;UE4,playable,2022-09-14 23:00:49.000 -0100F95013772000,"PBA Pro Bowling 2021",status-playable;online-broken;UE4,playable,2022-10-19 16:46:40.000 -,"PC Building Simulator",status-playable,playable,2020-06-12 00:31:58.000 -010002100CDCC000,"Peaky Blinders: Mastermind",status-playable,playable,2022-10-19 16:56:35.000 -,"Peasant Knight",status-playable,playable,2020-12-22 09:30:50.000 -0100C510049E0000,"Penny-Punching Princess",status-playable,playable,2022-08-09 13:37:05.000 -0100CA901AA9C000,"Penny's Big Breakaway",status-playable;amd-vendor-bug,playable,2024-05-27 07:58:51.000 -,"Perception",UE4;crash;nvdec;status-menus,menus,2020-12-18 11:49:23.000 -010011700D1B2000,"Perchang",status-playable,playable,2021-01-25 14:19:52.000 -010089F00A3B4000,"Perfect Angle",status-playable,playable,2021-01-21 18:48:45.000 -01005CD012DC0000,"Perky Little Things",status-boots;crash;vulkan,boots,2024-08-04 07:22:46.000 -,"Persephone",status-playable,playable,2021-03-23 22:39:19.000 -,"Perseverance",status-playable,playable,2020-07-13 18:48:27.000 -010062B01525C000,"Persona 4 Golden",status-playable,playable,2024-08-07 17:48:07.000 -01005CA01580E000,"Persona 5 Royal",gpu;status-ingame,ingame,2024-08-17 21:45:15.000 -010087701B092000,"Persona 5 Tactica",status-playable,playable,2024-04-01 22:21:03.000 -,"Persona 5: Scramble",deadlock;status-boots,boots,2020-10-04 03:22:29.000 -0100801011C3E000,"Persona 5: Strikers (US)",status-playable;nvdec;mac-bug,playable,2023-09-26 09:36:01.000 -010044400EEAE000,"Petoons Party",nvdec;status-playable,playable,2021-03-02 21:07:58.000 -010053401147C000,"PGA TOUR 2K21",deadlock;status-ingame;nvdec,ingame,2022-10-05 21:53:50.000 -0100DDD00C0EA000,"Phantaruk",status-playable,playable,2021-06-11 18:09:54.000 -0100063005C86000,"PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE",audio;status-playable;nvdec,playable,2024-02-29 14:20:35.000 -010096F00E5B0000,"Phantom Doctrine",status-playable;UE4,playable,2022-09-15 10:51:50.000 -0100C31005A50000,"Phantom Trigger",status-playable,playable,2022-08-09 14:27:30.000 -0100CB000A142000,"Phoenix Wright: Ace Attorney Trilogy",status-playable,playable,2023-09-15 22:03:12.000 -,"PHOGS!",online;status-playable,playable,2021-01-18 15:18:37.000 -,"Physical Contact: 2048",slow;status-playable,playable,2021-01-25 15:18:32.000 -01008110036FE000,"Physical Contact: Speed",status-playable,playable,2022-08-09 14:40:46.000 -010077300A86C000,"Pianista: The Legendary Virtuoso",status-playable;online-broken,playable,2022-08-09 14:52:56.000 -010012100E8DC000,"Picross Lord Of The Nazarick",status-playable,playable,2023-02-08 15:54:56.000 -,"Picross S2",status-playable,playable,2020-10-15 12:01:40.000 -,"Picross S3",status-playable,playable,2020-10-15 11:55:27.000 -,"Picross S4",status-playable,playable,2020-10-15 12:33:46.000 -0100AC30133EC000,"Picross S5",status-playable,playable,2022-10-17 18:51:42.000 -010025901432A000,"Picross S6",status-playable,playable,2022-10-29 17:52:19.000 -,"Picross S7",status-playable,playable,2022-02-16 12:51:25.000 -010043B00E1CE000,"PictoQuest",status-playable,playable,2021-02-27 15:03:16.000 -,"Piczle Lines DX",UE4;crash;nvdec;status-menus,menus,2020-11-16 04:21:31.000 -,"Piczle Lines DX 500 More Puzzles!",UE4;status-playable,playable,2020-12-15 23:42:51.000 -01000FD00D5CC000,"Pig Eat Ball",services;status-ingame,ingame,2021-11-30 01:57:45.000 -0100AA80194B0000,"Pikmin 1",audio;status-ingame,ingame,2024-05-28 18:56:11.000 -0100D680194B2000,"Pikmin 2",gpu;status-ingame,ingame,2023-07-31 08:53:41.000 -0100F4C009322000,"Pikmin 3 Deluxe",gpu;status-ingame;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26.000 -01001CB0106F8000,"Pikmin 3 Deluxe Demo",32-bit;crash;demo;gpu;status-ingame,ingame,2021-06-16 18:38:07.000 -0100B7C00933A000,"Pikmin 4",gpu;status-ingame;crash;UE4,ingame,2024-08-26 03:39:08.000 -0100E0B019974000,"Pikmin 4 Demo",gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08.000 -0100D6200E130000,"Pillars of Eternity",status-playable,playable,2021-02-27 00:24:21.000 -01007A500B0B2000,"Pilot Sports",status-playable,playable,2021-01-20 15:04:17.000 -0100DA70186D4000,"Pinball FX",status-playable,playable,2024-05-03 17:09:11.000 -0100DB7003828000,"Pinball FX3",status-playable;online-broken,playable,2022-11-11 23:49:07.000 -,"Pine",slow;status-ingame,ingame,2020-07-29 16:57:39.000 -,"Pinstripe",status-playable,playable,2020-11-26 10:40:40.000 -01002B20174EE000,"Piofiore: Episodio 1926",status-playable,playable,2022-11-23 18:36:05.000 -,"Piofiore: Fated Memories",nvdec;status-playable,playable,2020-11-30 14:27:50.000 -0100EA2013BCC000,"Pixel Game Maker Series Puzzle Pedestrians",status-playable,playable,2022-10-24 20:15:50.000 -0100859013CE6000,"Pixel Game Maker Series Werewolf Princess Kaguya",crash;services;status-nothing,nothing,2021-03-26 00:23:07.000 -,"Pixel Gladiator",status-playable,playable,2020-07-08 02:41:26.000 -010000E00E612000,"Pixel Puzzle Makeout League",status-playable,playable,2022-10-13 12:34:00.000 -,"PixelJunk Eden 2",crash;status-ingame,ingame,2020-12-17 11:55:52.000 -0100E4D00A690000,"Pixeljunk Monsters 2",status-playable,playable,2021-06-07 03:40:01.000 -01004A900C352000,"Pizza Titan Ultra",nvdec;status-playable,playable,2021-01-20 15:58:42.000 -05000FD261232000,"Pizza Tower",status-ingame;crash,ingame,2024-09-16 00:21:56.000 -0100FF8005EB2000,"Plague Road",status-playable,playable,2022-08-09 15:27:14.000 -010030B00C316000,"Planescape: Torment and Icewind Dale: Enhanced Editions",cpu;status-boots;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26.000 -,"PLANET ALPHA",UE4;gpu;status-ingame,ingame,2020-12-16 14:42:20.000 -01007EA019CFC000,"Planet Cube Edge",status-playable,playable,2023-03-22 17:10:12.000 -,"planetarian HD ~the reverie of a little planet~",status-playable,playable,2020-10-17 20:26:20.000 -010087000428E000,"Plantera",status-playable,playable,2022-08-09 15:36:28.000 -0100C56010FD8000,"Plants vs. Zombies: Battle for Neighborville Complete Edition",gpu;audio;status-boots;crash,boots,2024-09-02 12:58:14.000 -0100E5B011F48000,"Ploid Saga",status-playable,playable,2021-04-19 16:58:45.000 -01009440095FE000,"Pode",nvdec;status-playable,playable,2021-01-25 12:58:35.000 -010086F0064CE000,"Poi: Explorer Edition",nvdec;status-playable,playable,2021-01-21 19:32:00.000 -0100EB6012FD2000,"Poison Control",status-playable,playable,2021-05-16 14:01:54.000 -0100000011D90000,"Pokémon Brilliant Diamond",gpu;status-ingame;ldn-works,ingame,2024-08-28 13:26:35.000 -010072400E04A000,"Pokémon Café Mix",status-playable,playable,2021-08-17 20:00:04.000 -,"Pokémon HOME",Needs Update;crash;services;status-menus,menus,2020-12-06 06:01:51.000 -01001F5010DFA000,"Pokémon Legends: Arceus",gpu;status-ingame;Needs Update;ldn-works,ingame,2024-09-19 10:02:02.000 -01003D200BAA2000,"Pokémon Mystery Dungeon Rescue Team DX",status-playable;mac-bug,playable,2024-01-21 00:16:32.000 -01005D100807A000,"Pokemon Quest",status-playable,playable,2022-02-22 16:12:32.000 -0100A3D008C5C000,"Pokémon Scarlet",gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29.000 -01008DB008C2C000,"Pokémon Shield",deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22.000 -0100ABF008968000,"Pokémon Sword",deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37.000 -01008F6008C5E000,"Pokémon Violet",gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48.000 -0100187003A36000,"Pokémon: Let's Go, Eevee!",status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04.000 -010003F003A34000,"Pokémon: Let's Go, Pikachu!",status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41.000 -01009AD008C4C000,"Pokémon: Let's Go, Pikachu! demo",slow;status-playable;demo,playable,2023-11-26 11:23:20.000 -0100B3F000BE2000,"Pokkén Tournament DX",status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08.000 -010030D005AE6000,"Pokken Tournament DX Demo",status-playable;demo;opengl-backend-bug,playable,2022-08-10 12:03:19.000 -,"Polandball: Can Into Space!",status-playable,playable,2020-06-25 15:13:26.000 -,"Poly Bridge",services;status-playable,playable,2020-06-08 23:32:41.000 -010017600B180000,"Polygod",slow;status-ingame;regression,ingame,2022-08-10 14:38:14.000 -010074B00ED32000,"Polyroll",gpu;status-boots,boots,2021-07-01 16:16:50.000 -,"Ponpu",status-playable,playable,2020-12-16 19:09:34.000 -,"Pooplers",status-playable,playable,2020-11-02 11:52:10.000 -01007EF013CA0000,"Port Royale 4",status-menus;crash;nvdec,menus,2022-10-30 14:34:06.000 -01007BB017812000,"Portal",status-playable,playable,2024-06-12 03:48:29.000 -0100ABD01785C000,"Portal 2",gpu;status-ingame,ingame,2023-02-20 22:44:15.000 -,"Portal Dogs",status-playable,playable,2020-09-04 12:55:46.000 -0100437004170000,"Portal Knights",ldn-untested;online;status-playable,playable,2021-05-27 19:29:04.000 -,"Potata: Fairy Flower",nvdec;status-playable,playable,2020-06-17 09:51:34.000 -01000A4014596000,"Potion Party",status-playable,playable,2021-05-06 14:26:54.000 -,"Power Rangers: Battle for the Grid",status-playable,playable,2020-06-21 16:52:42.000 -0100D1C01C194000,"Powerful Pro Baseball 2024-2025",gpu;status-ingame,ingame,2024-08-25 06:40:48.000 -01008E100E416000,"PowerSlave Exhumed",gpu;status-ingame,ingame,2023-07-31 23:19:10.000 -,"Prehistoric Dude",gpu;status-ingame,ingame,2020-10-12 12:38:48.000 -,"Pretty Princess Magical Coordinate",status-playable,playable,2020-10-15 11:43:41.000 -01007F00128CC000,"Pretty Princess Party",status-playable,playable,2022-10-19 17:23:58.000 -010009300D278000,"Preventive Strike",status-playable;nvdec,playable,2022-10-06 10:55:51.000 -0100210019428000,"Prince of Persia: The Lost Crown",status-ingame;crash,ingame,2024-06-08 21:31:58.000 -01007A3009184000,"Princess Peach: Showtime!",status-playable;UE4,playable,2024-09-21 13:39:45.000 -010024701DC2E000,"Princess Peach: Showtime! Demo",status-playable;UE4;demo,playable,2024-03-10 17:46:45.000 -01008FA01187A000,"Prinny 2: Dawn of Operation Panties, Dood!",32-bit;status-playable,playable,2022-10-13 12:42:58.000 -0100A6E01681C000,"Prinny Presents NIS Classics Volume 1",status-boots;crash;Needs Update,boots,2023-02-02 07:23:09.000 -01007A0011878000,"Prinny: Can I Really Be the Hero?",32-bit;status-playable;nvdec,playable,2023-10-22 09:25:25.000 -010007F00879E000,"PriPara: All Idol Perfect Stage",status-playable,playable,2022-11-22 16:35:52.000 -010029200AB1C000,"Prison Architect",status-playable,playable,2021-04-10 12:27:58.000 -0100C1801B914000,"Prison City",gpu;status-ingame,ingame,2024-03-01 08:19:33.000 -0100F4800F872000,"Prison Princess",status-playable,playable,2022-11-20 15:00:25.000 -0100A9800A1B6000,"Professional Construction - The Simulation",slow;status-playable,playable,2022-08-10 15:15:45.000 -,"Professional Farmer: Nintendo Switch Edition",slow;status-playable,playable,2020-12-16 13:38:19.000 -,"Professor Lupo and his Horrible Pets",status-playable,playable,2020-06-12 00:08:45.000 -0100D1F0132F6000,"Professor Lupo: Ocean",status-playable,playable,2021-04-14 16:33:33.000 -0100BBD00976C000,"Project Highrise: Architect's Edition",status-playable,playable,2022-08-10 17:19:12.000 -0100ACE00DAB6000,"Project Nimbus: Complete Edition",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43.000 -01002980140F6000,"Project TRIANGLE STRATEGY Debut Demo",status-playable;UE4;demo,playable,2022-10-24 21:40:27.000 -,"Project Warlock",status-playable,playable,2020-06-16 10:50:41.000 -,"Psikyo Collection Vol 1",32-bit;status-playable,playable,2020-10-11 13:18:47.000 -0100A2300DB78000,"Psikyo Collection Vol. 3",status-ingame,ingame,2021-06-07 02:46:23.000 -01009D400C4A8000,"Psikyo Collection Vol.2",32-bit;status-playable,playable,2021-06-07 03:22:07.000 -01007A200F2E2000,"Psikyo Shooting Stars Alpha",32-bit;status-playable,playable,2021-04-13 12:03:43.000 -0100D7400F2E4000,"Psikyo Shooting Stars Bravo",32-bit;status-playable,playable,2021-06-14 12:09:07.000 -0100EC100A790000,"PSYVARIAR DELTA",nvdec;status-playable,playable,2021-01-20 13:01:46.000 -,"Puchitto kurasutā",Need-Update;crash;services;status-menus,menus,2020-07-04 16:44:28.000 -0100861012474000,"Pulstario",status-playable,playable,2022-10-06 11:02:01.000 -01009AE00B788000,"Pumped BMX Pro",status-playable;nvdec;online-broken,playable,2022-09-20 17:40:50.000 -01006C10131F6000,"Pumpkin Jack",status-playable;nvdec;UE4,playable,2022-10-13 12:52:32.000 -010016400F07E000,"PUSH THE CRATE",status-playable;nvdec;UE4,playable,2022-09-15 13:28:41.000 -0100B60010432000,"Push the Crate 2",UE4;gpu;nvdec;status-ingame,ingame,2021-06-10 14:20:01.000 -,"Pushy and Pully in Blockland",status-playable,playable,2020-07-04 11:44:41.000 -,"Puyo Puyo Champions",online;status-playable,playable,2020-06-19 11:35:08.000 -010038E011940000,"Puyo Puyo Tetris 2",status-playable;ldn-untested,playable,2023-09-26 11:35:25.000 -,"Puzzle and Dragons GOLD",slow;status-playable,playable,2020-05-13 15:09:34.000 -010079E01A1E0000,"Puzzle Bobble Everybubble!",audio;status-playable;ldn-works,playable,2023-06-10 03:53:40.000 -,"Puzzle Book",status-playable,playable,2020-09-28 13:26:01.000 -0100476004A9E000,"Puzzle Box Maker",status-playable;nvdec;online-broken,playable,2022-08-10 18:00:52.000 -0100A4E017372000,"Pyramid Quest",gpu;status-ingame,ingame,2023-08-16 21:14:52.000 -,"Q-YO Blaster",gpu;status-ingame,ingame,2020-06-07 22:36:53.000 -010023600AA34000,"Q.U.B.E. 2",UE4;status-playable,playable,2021-03-03 21:38:57.000 -0100A8D003BAE000,"Qbics Paint",gpu;services;status-ingame,ingame,2021-06-07 10:54:09.000 -0100BA5012E54000,"Quake",gpu;status-menus;crash,menus,2022-08-08 12:40:34.000 -010048F0195E8000,"Quake II",status-playable,playable,2023-08-15 03:42:14.000 -,"QuakespasmNX",status-nothing;crash;homebrew,nothing,2022-07-23 19:28:07.000 -010045101288A000,"Quantum Replica",status-playable;nvdec;UE4,playable,2022-10-30 21:17:22.000 -0100F1400BA88000,"Quarantine Circular",status-playable,playable,2021-01-20 15:24:15.000 -0100DCF00F13A000,"Queen's Quest 4: Sacred Truce",status-playable;nvdec,playable,2022-10-13 12:59:21.000 -0100492012378000,"Quell Zen",gpu;status-ingame,ingame,2021-06-11 15:59:53.000 -01001DE005012000,"Quest of Dungeons",status-playable,playable,2021-06-07 10:29:22.000 -,"QuietMansion2",status-playable,playable,2020-09-03 14:59:35.000 -0100AF100EE76000,"Quiplash 2 InterLASHional",status-playable;online-working,playable,2022-10-19 17:43:45.000 -,"R-Type Dimensions EX",status-playable,playable,2020-10-09 12:04:43.000 -0100F930136B6000,"R-TYPE FINAL 2",slow;status-ingame;nvdec;UE4,ingame,2022-10-30 21:46:29.000 -01007B0014300000,"R-TYPE FINAL 2 Demo",slow;status-ingame;nvdec;UE4;demo,ingame,2022-10-24 21:57:42.000 -0100B5A004302000,"R.B.I. Baseball 17",status-playable;online-working,playable,2022-08-11 11:55:47.000 -01005CC007616000,"R.B.I. Baseball 18",status-playable;nvdec;online-working,playable,2022-08-11 11:27:52.000 -0100FCB00BF40000,"R.B.I. Baseball 19",status-playable;nvdec;online-working,playable,2022-08-11 11:43:52.000 -010061400E7D4000,"R.B.I. Baseball 20",status-playable,playable,2021-06-15 21:16:29.000 -0100B4A0115CA000,"R.B.I. Baseball 21",status-playable;online-working,playable,2022-10-24 22:31:45.000 -01005BF00E4DE000,"Rabi-Ribi",status-playable,playable,2022-08-06 17:02:44.000 -,"Race With Ryan",UE4;gpu;nvdec;slow;status-ingame,ingame,2020-11-16 04:35:33.000 -,"Rack N Ruin",status-playable,playable,2020-09-04 15:20:26.000 -010024400C516000,"RAD",gpu;status-menus;crash;UE4,menus,2021-11-29 02:01:56.000 -010000600CD54000,"Rad Rodgers Radical Edition",status-playable;nvdec;online-broken,playable,2022-08-10 19:57:23.000 -0100DA400E07E000,"Radiation City",status-ingame;crash,ingame,2022-09-30 11:15:04.000 -01009E40095EE000,"Radiation Island",status-ingame;opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04.000 -,"Radical Rabbit Stew",status-playable,playable,2020-08-03 12:02:56.000 -0100BAD013B6E000,"Radio Commander",nvdec;status-playable,playable,2021-03-24 11:20:46.000 -01008FA00ACEC000,"RADIO HAMMER STATION",audout;status-playable,playable,2021-02-26 20:20:06.000 -01003D00099EC000,"Raging Justice",status-playable,playable,2021-06-03 14:06:50.000 -01005CD013116000,"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",status-playable,playable,2022-07-29 15:50:13.000 -01002B000D97E000,"Raiden V: Director's Cut",deadlock;status-boots;nvdec,boots,2024-07-12 07:31:46.000 -01002EE00DC02000,"Railway Empire",status-playable;nvdec,playable,2022-10-03 13:53:50.000 -,"Rain City",status-playable,playable,2020-10-08 16:59:03.000 -0100BDD014232000,"Rain on Your Parade",status-playable,playable,2021-05-06 19:32:04.000 -010047600BF72000,"Rain World",status-playable,playable,2023-05-10 23:34:08.000 -,"Rainbows, toilets & unicorns",nvdec;status-playable,playable,2020-10-03 18:08:18.000 -,"Raji An Ancient Epic",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 10:05:25.000 -,"Rapala Fishing: Pro Series",nvdec;status-playable,playable,2020-12-16 13:26:53.000 -,"Rascal Fight",status-playable,playable,2020-10-08 13:23:30.000 -,"Rawr-Off",crash;nvdec;status-menus,menus,2020-07-02 00:14:44.000 -01005FF002E2A000,"Rayman Legends: Definitive Edition",status-playable;nvdec;ldn-works,playable,2023-05-27 18:33:07.000 -0100F03011616000,"Re:Turn - One Way Trip",status-playable,playable,2022-08-29 22:42:53.000 -,"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",gpu;status-boots;crash;nvdec;vulkan,boots,2023-03-07 21:27:24.000 -,"Real Drift Racing",status-playable,playable,2020-07-25 14:31:31.000 -010048600CC16000,"Real Heroes: Firefighter",status-playable,playable,2022-09-20 18:18:44.000 -,"realMyst: Masterpiece Edition",nvdec;status-playable,playable,2020-11-30 15:25:42.000 -,"Reaper: Tale of a Pale Swordsman",status-playable,playable,2020-12-12 15:12:23.000 -0100D9B00E22C000,"Rebel Cops",status-playable,playable,2022-09-11 10:02:53.000 -0100CAA01084A000,"Rebel Galaxy: Outlaw",status-playable;nvdec,playable,2022-12-01 07:44:56.000 -0100CF600FF7A000,"Red Bow",services;status-ingame,ingame,2021-11-29 03:51:34.000 -0100351013A06000,"Red Colony",status-playable,playable,2021-01-25 20:44:41.000 -01007820196A6000,"Red Dead Redemption",status-playable;amd-vendor-bug,playable,2024-09-13 13:26:13.000 -,"Red Death",status-playable,playable,2020-08-30 13:07:37.000 -010075000C608000,"Red Faction Guerrilla Re-Mars-tered",ldn-untested;nvdec;online;status-playable,playable,2021-06-07 03:02:13.000 -,"Red Game Without a Great Name",status-playable,playable,2021-01-19 21:42:35.000 -010045400D73E000,"Red Siren : Space Defense",UE4;status-playable,playable,2021-04-25 21:21:29.000 -,"Red Wings - Aces of the Sky",status-playable,playable,2020-06-12 01:19:53.000 -01000D100DCF8000,"Redeemer: Enhanced Edition",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24.000 -0100326010B98000,"Redout: Space Assault",status-playable;UE4,playable,2022-10-19 23:04:35.000 -010007C00E558000,"Reel Fishing: Road Trip Adventure",status-playable,playable,2021-03-02 16:06:43.000 -,"Reflection of Mine",audio;status-playable,playable,2020-12-17 15:06:37.000 -,"Refreshing Sideways Puzzle Ghost Hammer",status-playable,playable,2020-10-18 12:08:54.000 -,"Refunct",UE4;status-playable,playable,2020-12-15 22:46:21.000 -0100FDF0083A6000,"Regalia: Of Men and Monarchs - Royal Edition",status-playable,playable,2022-08-11 12:24:01.000 -,"Regions of Ruin",status-playable,playable,2020-08-05 11:38:58.000 -,"Reine des Fleurs",cpu;crash;status-boots,boots,2020-09-27 18:50:39.000 -,"REKT",online;status-playable,playable,2020-09-28 12:33:56.000 -01002AD013C52000,"Relicta",status-playable;nvdec;UE4,playable,2022-10-31 12:48:33.000 -010095900B436000,"Remi Lore",status-playable,playable,2021-06-03 18:58:15.000 -0100FBD00F5F6000,"Remothered: Broken Porcelain",UE4;gpu;nvdec;status-ingame,ingame,2021-06-17 15:13:11.000 -01001F100E8AE000,"Remothered: Tormented Fathers",status-playable;nvdec;UE4,playable,2022-10-19 23:26:50.000 -,"Rento Fortune Monolit",ldn-untested;online;status-playable,playable,2021-01-19 19:52:21.000 -01007CC0130C6000,"Renzo Racer",status-playable,playable,2021-03-23 22:28:05.000 -01003C400AD42000,"Rescue Tale",status-playable,playable,2022-09-20 18:40:18.000 -010099A00BC1E000,"Resident Evil 4",status-playable;nvdec,playable,2022-11-16 21:16:04.000 -010018100CD46000,"Resident Evil 5",status-playable;nvdec,playable,2024-02-18 17:15:29.000 -01002A000CD48000,"RESIDENT EVIL 6",status-playable;nvdec,playable,2022-09-15 14:31:47.000 -0100643002136000,"Resident Evil Revelations",status-playable;nvdec;ldn-untested,playable,2022-08-11 12:44:19.000 -010095300212A000,"RESIDENT EVIL REVELATIONS 2",status-playable;online-broken;ldn-untested,playable,2022-08-11 12:57:50.000 -0100E7F00FFB8000,"Resolutiion",crash;status-boots,boots,2021-04-25 21:57:56.000 -0100FF201568E000,"Restless Night [0100FF201568E000]",status-nothing;crash,nothing,2022-02-09 10:54:49.000 -0100069000078000,"Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000",services;status-nothing;crash,nothing,2022-08-11 13:19:41.000 -010086E00BCB2000,"Retimed",status-playable,playable,2022-08-11 13:32:39.000 -,"Retro City Rampage DX",status-playable,playable,2021-01-05 17:04:17.000 -01000ED014A2C000,"Retrograde Arena",status-playable;online-broken,playable,2022-10-31 13:38:58.000 -010032E00E6E2000,"Return of the Obra Dinn",status-playable,playable,2022-09-15 19:56:45.000 -010027400F708000,"Revenge of Justice",status-playable;nvdec,playable,2022-11-20 15:43:23.000 -0100E2E00EA42000,"Reventure",status-playable,playable,2022-09-15 20:07:06.000 -,"REZ PLZ",status-playable,playable,2020-10-24 13:26:12.000 -0100729012D18000,"Rhythm Fighter",crash;status-nothing,nothing,2021-02-16 18:51:30.000 -,"Rhythm of the Gods",UE4;crash;status-nothing,nothing,2020-10-03 17:39:59.000 -01009D5009234000,"RICO",status-playable;nvdec;online-broken,playable,2022-08-11 20:16:40.000 -01002C700C326000,"Riddled Corpses EX",status-playable,playable,2021-06-06 16:02:44.000 -0100AC600D898000,"Rift Keeper",status-playable,playable,2022-09-20 19:48:20.000 -,"RiME",UE4;crash;gpu;status-boots,boots,2020-07-20 15:52:38.000 -01006AC00EE6E000,"Rimelands",status-playable,playable,2022-10-13 13:32:56.000 -01002FF008C24000,"Ring Fit Adventure",crash;services;status-nothing,nothing,2021-04-14 19:00:01.000 -010088E00B816000,"RIOT: Civil Unrest",status-playable,playable,2022-08-11 20:27:56.000 -01002A6006AA4000,"Riptide GP: Renegade",online;status-playable,playable,2021-04-13 23:33:02.000 -,"Rise and Shine",status-playable,playable,2020-12-12 15:56:43.000 -,"Rise of Insanity",status-playable,playable,2020-08-30 15:42:14.000 -01006BA00E652000,"Rise: Race the Future",status-playable,playable,2021-02-27 13:29:06.000 -010020C012F48000,"Rising Hell",status-playable,playable,2022-10-31 13:54:02.000 -0100E8300A67A000,"Risk",status-playable;nvdec;online-broken,playable,2022-08-01 18:53:28.000 -010076D00E4BA000,"Risk of Rain 2",status-playable;online-broken,playable,2024-03-04 17:01:05.000 -0100BD300F0EC000,"Ritual",status-playable,playable,2021-03-02 13:51:19.000 -010042500FABA000,"Ritual: Crown of Horns",status-playable,playable,2021-01-26 16:01:47.000 -,"Rival Megagun",nvdec;online;status-playable,playable,2021-01-19 14:01:46.000 -,"RIVE: Ultimate Edition",status-playable,playable,2021-03-24 18:45:55.000 -,"River City Girls",nvdec;status-playable,playable,2020-06-10 23:44:09.000 -01002E80168F4000,"River City Girls 2",status-playable,playable,2022-12-07 00:46:27.000 -0100B2100767C000,"River City Melee Mach!!",status-playable;online-broken,playable,2022-09-20 20:51:57.000 -,"RMX Real Motocross",status-playable,playable,2020-10-08 21:06:15.000 -010053000B986000,"Road Redemption",status-playable;online-broken,playable,2022-08-12 11:26:20.000 -010002F009A7A000,"Road to Ballhalla",UE4;status-playable,playable,2021-06-07 02:22:36.000 -,"Road to Guangdong",slow;status-playable,playable,2020-10-12 12:15:32.000 -010068200C5BE000,"Roarr!",status-playable,playable,2022-10-19 23:57:45.000 -0100618004096000,"Robonauts",status-playable;nvdec,playable,2022-08-12 11:33:23.000 -,"ROBOTICS;NOTES DaSH",status-playable,playable,2020-11-16 23:09:54.000 -,"ROBOTICS;NOTES ELITE",status-playable,playable,2020-11-26 10:28:20.000 -,"Robozarro",status-playable,playable,2020-09-03 13:33:40.000 -,"Rock 'N Racing Off Road DX",status-playable,playable,2021-01-10 15:27:15.000 -,"Rock N' Racing Grand Prix",status-playable,playable,2021-01-06 20:23:57.000 -0100A1B00DB36000,"Rock of Ages 3: Make & Break",status-playable;UE4,playable,2022-10-06 12:18:29.000 -01005EE0036EC000,"Rocket League",gpu;status-ingame;online-broken;ldn-untested,ingame,2024-02-08 19:51:36.000 -,"Rocket Wars",status-playable,playable,2020-07-24 14:27:39.000 -0100EC7009348000,"Rogue Aces",gpu;services;status-ingame;nvdec,ingame,2021-11-30 02:18:30.000 -01009FA010848000,"Rogue Heroes: Ruins of Tasos",online;status-playable,playable,2021-04-01 15:41:25.000 -,"Rogue Legacy",status-playable,playable,2020-08-10 19:17:28.000 -,"Rogue Robots",status-playable,playable,2020-06-16 12:16:11.000 -01001CC00416C000,"Rogue Trooper Redux",status-playable;nvdec;online-broken,playable,2022-08-12 11:53:01.000 -0100C7300C0EC000,"RogueCube",status-playable,playable,2021-06-16 12:16:42.000 -,"Roll'd",status-playable,playable,2020-07-04 20:24:01.000 -01004900113F8000,"RollerCoaster Tycoon 3: Complete Edition",32-bit;status-playable,playable,2022-10-17 14:18:01.000 -,"RollerCoaster Tycoon Adventures",nvdec;status-playable,playable,2021-01-05 18:14:18.000 -010076200CA16000,"Rolling Gunner",status-playable,playable,2021-05-26 12:54:18.000 -0100579011B40000,"Rolling Sky 2",status-playable,playable,2022-11-03 10:21:12.000 -01001F600829A000,"Romancing SaGa 2",status-playable,playable,2022-08-12 12:02:24.000 -,"Romancing SaGa 3",audio;gpu;status-ingame,ingame,2020-06-27 20:26:18.000 -010088100DD42000,"Roof Rage",status-boots;crash;regression,boots,2023-11-12 03:47:18.000 -,"Roombo: First Blood",nvdec;status-playable,playable,2020-08-05 12:11:37.000 -0100936011556000,"Root Double -Before Crime * After Days- Xtend Edition",status-nothing;crash,nothing,2022-02-05 02:03:49.000 -010030A00DA3A000,"Root Letter: Last Answer",status-playable;vulkan-backend-bug,playable,2022-09-17 10:25:57.000 -,"Royal Roads",status-playable,playable,2020-11-17 12:54:38.000 -,"RPG Maker MV",nvdec;status-playable,playable,2021-01-05 20:12:01.000 -01005CD015986000,"rRootage Reloaded [01005CD015986000]",status-playable,playable,2022-08-05 23:20:18.000 -0000000000000000,"RSDKv5u",status-ingame;homebrew,ingame,2024-04-01 16:25:34.000 -010009B00D33C000,"Rugby Challenge 4",slow;status-playable;online-broken;UE4,playable,2022-10-06 12:45:53.000 -01006EC00F2CC000,"Ruiner",status-playable;UE4,playable,2022-10-03 14:11:33.000 -010074F00DE4A000,"Run the Fan",status-playable,playable,2021-02-27 13:36:28.000 -,"Runbow",online;status-playable,playable,2021-01-08 22:47:44.000 -0100D37009B8A000,"Runbow Deluxe Edition",status-playable;online-broken,playable,2022-08-12 12:20:25.000 -010081C0191D8000,"Rune Factory 3 Special",status-playable,playable,2023-10-15 08:32:49.000 -010051D00E3A4000,"Rune Factory 4 Special",status-ingame;32-bit;crash;nvdec,ingame,2023-05-06 08:49:17.000 -010014D01216E000,"Rune Factory 5 (JP)",gpu;status-ingame,ingame,2021-06-01 12:00:36.000 -0100E21013908000,"RWBY: Grimm Eclipse",status-playable;online-broken,playable,2022-11-03 10:44:01.000 -,"RXN -Raijin-",nvdec;status-playable,playable,2021-01-10 16:05:43.000 -0100B8B012ECA000,"S.N.I.P.E.R. Hunter Scope",status-playable,playable,2021-04-19 15:58:09.000 -,"Saboteur II: Avenging Angel",Needs Update;cpu;crash;status-nothing,nothing,2021-01-26 14:47:37.000 -,"Saboteur SiO",slow;status-ingame,ingame,2020-12-17 16:59:49.000 -,"Safety First!",status-playable,playable,2021-01-06 09:05:23.000 -0100A51013530000,"SaGa Frontier Remastered",status-playable;nvdec,playable,2022-11-03 13:54:56.000 -010003A00D0B4000,"SaGa SCARLET GRACE: AMBITIONS",status-playable,playable,2022-10-06 13:20:31.000 -01008D100D43E000,"Saints Row IV",status-playable;ldn-untested;LAN,playable,2023-12-04 18:33:37.000 -0100DE600BEEE000,"Saints Row: The Third - The Full Package",slow;status-playable;LAN,playable,2023-08-24 02:40:58.000 -01007F000EB36000,"Sakai and...",status-playable;nvdec,playable,2022-12-15 13:53:19.000 -0100B1400E8FE000,"Sakuna: Of Rice and Ruin",status-playable,playable,2023-07-24 13:47:13.000 -0100BBF0122B4000,"Sally Face",status-playable,playable,2022-06-06 18:41:24.000 -,"Salt And Sanctuary",status-playable,playable,2020-10-22 11:52:19.000 -,"Sam & Max Save the World",status-playable,playable,2020-12-12 13:11:51.000 -,"Samsara",status-playable,playable,2021-01-11 15:14:12.000 -01006C600E46E000,"Samurai Jack Battle Through Time",status-playable;nvdec;UE4,playable,2022-10-06 13:33:59.000 -,"SAMURAI SHODOWN",UE4;crash;nvdec;status-menus,menus,2020-09-06 02:17:00.000 -0100F6800F48E000,"SAMURAI SHOWDOWN NEOGEO COLLECTION",nvdec;status-playable,playable,2021-06-14 17:12:56.000 -0100B6501A360000,"Samurai Warrior",status-playable,playable,2023-02-27 18:42:38.000 -,"SamuraiAces for Nintendo Switch",32-bit;status-playable,playable,2020-11-24 20:26:55.000 -,"Sangoku Rensenki ~Otome no Heihou!~",gpu;nvdec;status-ingame,ingame,2020-10-17 19:13:14.000 -0100A4700BC98000,"Satsujin Tantei Jack the Ripper",status-playable,playable,2021-06-21 16:32:54.000 -0100F0000869C000,"Saturday Morning RPG",status-playable;nvdec,playable,2022-08-12 12:41:50.000 -,"Sausage Sports Club",gpu;status-ingame,ingame,2021-01-10 05:37:17.000 -0100C8300FA90000,"Save Koch",status-playable,playable,2022-09-26 17:06:56.000 -,"Save the Ninja Clan",status-playable,playable,2021-01-11 13:56:37.000 -010091000F72C000,"Save Your Nuts",status-playable;nvdec;online-broken;UE4,playable,2022-09-27 23:12:02.000 -0100AA00128BA000,"Saviors of Sapphire Wings & Stranger of Sword City Revisited",status-menus;crash,menus,2022-10-24 23:00:46.000 -01001C3012912000,"Say No! More",status-playable,playable,2021-05-06 13:43:34.000 -010010A00A95E000,"Sayonara Wild Hearts",status-playable,playable,2023-10-23 03:20:01.000 -0100ACB004006000,"Schlag den Star",slow;status-playable;nvdec,playable,2022-08-12 14:28:22.000 -0100394011C30000,"Scott Pilgrim vs The World: The Game",services-horizon;status-nothing;crash,nothing,2024-07-12 08:13:03.000 -,"Scribblenauts Mega Pack",nvdec;status-playable,playable,2020-12-17 22:56:14.000 -,"Scribblenauts Showdown",gpu;nvdec;status-ingame,ingame,2020-12-17 23:05:53.000 -0100829018568000,"SD GUNDAM BATTLE ALLIANCE Demo",audio;status-ingame;crash;demo,ingame,2022-08-01 23:01:20.000 -010055700CEA8000,"SD GUNDAM G GENERATION CROSS RAYS",status-playable;nvdec,playable,2022-09-15 20:58:44.000 -,"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00",status-playable;nvdec,playable,2022-09-15 20:45:57.000 -0100E4A00D066000,"Sea King",UE4;nvdec;status-playable,playable,2021-06-04 15:49:22.000 -0100AFE012BA2000,"Sea of Solitude The Director's Cut",gpu;status-ingame,ingame,2024-07-12 18:29:29.000 -01008C0016544000,"Sea of Stars",status-playable,playable,2024-03-15 20:27:12.000 -010036F0182C4000,"Sea of Stars Demo",status-playable;demo,playable,2023-02-12 15:33:56.000 -,"SeaBed",status-playable,playable,2020-05-17 13:25:37.000 -,"Season Match Bundle - Part 1 and 2",status-playable,playable,2021-01-11 13:28:23.000 -,"Season Match Full Bundle - Parts 1, 2 and 3",status-playable,playable,2020-10-27 16:15:22.000 -,"Secret Files 3",nvdec;status-playable,playable,2020-10-24 15:32:39.000 -010075D0101FA000,"Seek Hearts",status-playable,playable,2022-11-22 15:06:26.000 -,"Seers Isle",status-playable,playable,2020-11-17 12:28:50.000 -0100A8900AF04000,"SEGA AGES Alex Kidd in Miracle World",online;status-playable,playable,2021-05-05 16:35:47.000 -01001E600AF08000,"SEGA AGES Gain Ground",online;status-playable,playable,2021-05-05 16:16:27.000 -,"SEGA AGES OUTRUN",status-playable,playable,2021-01-11 13:13:59.000 -,"SEGA AGES PHANTASY STAR",status-playable,playable,2021-01-11 12:49:48.000 -01005F600CB0E000,"SEGA AGES Puyo Puyo",online;status-playable,playable,2021-05-05 16:09:28.000 -01000D200C614000,"SEGA AGES SONIC THE HEDGEHOG 2",status-playable,playable,2022-09-21 20:26:35.000 -,"SEGA AGES SPACE HARRIER",status-playable,playable,2021-01-11 12:57:40.000 -01001E700AC60000,"SEGA AGES Wonder Boy: Monster Land",online;status-playable,playable,2021-05-05 16:28:25.000 -010051F00AC5E000,"SEGA Ages: Sonic The Hedgehog",slow;status-playable,playable,2023-03-05 20:16:31.000 -010054400D2E6000,"SEGA Ages: Virtua Racing",status-playable;online-broken,playable,2023-01-29 17:08:39.000 -0100B3C014BDA000,"SEGA Genesis - Nintendo Switch Online",status-nothing;crash;regression,nothing,2022-04-11 07:27:21.000 -,"SEGA Mega Drive Classics",online;status-playable,playable,2021-01-05 11:08:00.000 -,"Semispheres",status-playable,playable,2021-01-06 23:08:31.000 -0100D1800D902000,"SENRAN KAGURA Peach Ball",status-playable,playable,2021-06-03 15:12:10.000 -,"SENRAN KAGURA Reflexions",status-playable,playable,2020-03-23 19:15:23.000 -01009E500D29C000,"Sentinels of Freedom",status-playable,playable,2021-06-14 16:42:19.000 -,"SENTRY",status-playable,playable,2020-12-13 12:00:24.000 -010059700D4A0000,"Sephirothic Stories",services;status-menus,menus,2021-11-25 08:52:17.000 -010007D00D43A000,"Serious Sam Collection",status-boots;vulkan-backend-bug,boots,2022-10-13 13:53:34.000 -0100B2C00E4DA000,"Served! A gourmet race",status-playable;nvdec,playable,2022-09-28 12:46:00.000 -010018400C24E000,"Seven Knights -Time Wanderer-",status-playable;vulkan-backend-bug,playable,2022-10-13 22:08:54.000 -0100D6F016676000,"Seven Pirates H",status-playable,playable,2024-06-03 14:54:12.000 -,"Severed",status-playable,playable,2020-12-15 21:48:48.000 -0100D5500DA94000,"Shadow Blade Reload",nvdec;status-playable,playable,2021-06-11 18:40:43.000 -0100BE501382A000,"Shadow Gangs",cpu;gpu;status-ingame;crash;regression,ingame,2024-04-29 00:07:26.000 -0100C3A013840000,"Shadow Man Remastered",gpu;status-ingame,ingame,2024-05-20 06:01:39.000 -,"Shadowgate",status-playable,playable,2021-04-24 07:32:57.000 -0100371013B3E000,"Shadowrun Returns",gpu;status-ingame;Needs Update,ingame,2022-10-04 21:32:31.000 -01008310154C4000,"Shadowrun: Dragonfall - Director's Cut",gpu;status-ingame;Needs Update,ingame,2022-10-04 20:52:18.000 -0100C610154CA000,"Shadowrun: Hong Kong - Extended Edition",gpu;status-ingame;Needs Update,ingame,2022-10-04 20:53:09.000 -,"Shadows 2: Perfidia",status-playable,playable,2020-08-07 12:43:46.000 -,"Shadows of Adam",status-playable,playable,2021-01-11 13:35:58.000 -01002A800C064000,"Shadowverse Champions Battle",status-playable,playable,2022-10-02 22:59:29.000 -01003B90136DA000,"Shadowverse: Champion’s Battle",status-nothing;crash,nothing,2023-03-06 00:31:50.000 -0100820013612000,"Shady Part of Me",status-playable,playable,2022-10-20 11:31:55.000 -,"Shakedown: Hawaii",status-playable,playable,2021-01-07 09:44:36.000 -01008DA012EC0000,"Shakes on a Plane",status-menus;crash,menus,2021-11-25 08:52:25.000 -0100B4900E008000,"Shalnor Legends: Sacred Lands",status-playable,playable,2021-06-11 14:57:11.000 -,"Shanky: The Vegan's Nightmare - 01000C00CC10000",status-playable,playable,2021-01-26 15:03:55.000 -0100430013120000,"Shantae",status-playable,playable,2021-05-21 04:53:26.000 -0100EFD00A4FA000,"Shantae and the Pirate's Curse",status-playable,playable,2024-04-29 17:21:57.000 -,"Shantae and the Seven Sirens",nvdec;status-playable,playable,2020-06-19 12:23:40.000 -,"Shantae: Half-Genie Hero Ultimate Edition",status-playable,playable,2020-06-04 20:14:20.000 -0100ADA012370000,"Shantae: Risky's Revenge - Director's Cut",status-playable,playable,2022-10-06 20:47:39.000 -01003AB01062C000,"Shaolin vs Wutang : Eastern Heroes",deadlock;status-nothing,nothing,2021-03-29 20:38:54.000 -0100B250009B9600,"Shape Of The World0",UE4;status-playable,playable,2021-03-05 16:42:28.000 -01004F50085F2000,"She Remembered Caterpillars",status-playable,playable,2022-08-12 17:45:14.000 -01000320110C2000,"She Sees Red",status-playable;nvdec,playable,2022-09-30 11:30:15.000 -01009EB004CB0000,"Shelter Generations",status-playable,playable,2021-06-04 16:52:39.000 -010020F014DBE000,"Sherlock Holmes: The Devil's Daughter",gpu;status-ingame,ingame,2022-07-11 00:07:26.000 -,"Shift Happens",status-playable,playable,2021-01-05 21:24:18.000 -,"SHIFT QUANTUM",UE4;crash;status-ingame,ingame,2020-11-06 21:54:08.000 -01000750084B2000,"Shiftlings",nvdec;status-playable,playable,2021-03-04 13:49:54.000 -01003B0012DC2000,"Shin Megami Tensei III Nocturne HD Remaster",status-playable,playable,2022-11-03 22:53:27.000 -010045800ED1E000,"Shin Megami Tensei III NOCTURNE HD REMASTER",gpu;status-ingame;Needs Update,ingame,2022-11-03 19:57:01.000 -010063B012DC6000,"Shin Megami Tensei V",status-playable;UE4,playable,2024-02-21 06:30:07.000 -010069C01AB82000,"Shin Megami Tensei V: Vengeance",gpu;status-ingame;vulkan-backend-bug,ingame,2024-07-14 11:28:24.000 -01009050133B4000,"Shing! (サムライフォース:斬!)",status-playable;nvdec,playable,2022-10-22 00:48:54.000 -01009A5009A9E000,"Shining Resonance Refrain",status-playable;nvdec,playable,2022-08-12 18:03:01.000 -01004EE0104F6000,"Shinsekai Into the Depths",status-playable,playable,2022-09-28 14:07:51.000 -0100C2F00A568000,"Shio",status-playable,playable,2021-02-22 16:25:09.000 -,"Shipped",status-playable,playable,2020-11-21 14:22:32.000 -01000E800FCB4000,"Ships",status-playable,playable,2021-06-11 16:14:37.000 -01007430122D0000,"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",status-playable;nvdec,playable,2022-10-20 11:44:36.000 -,"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",cpu;crash;status-boots,boots,2020-09-27 19:01:25.000 -01000244016BAE00,"Shiro0",gpu;status-ingame,ingame,2024-01-13 08:54:39.000 -,"Shoot 1UP DX",status-playable,playable,2020-12-13 12:32:47.000 -,"Shovel Knight: Specter of Torment",status-playable,playable,2020-05-30 08:34:17.000 -,"Shovel Knight: Treasure Trove",status-playable,playable,2021-02-14 18:24:39.000 -,"Shred!2 - Freeride MTB",status-playable,playable,2020-05-30 14:34:09.000 -,"Shu",nvdec;status-playable,playable,2020-05-30 09:08:59.000 -,"Shut Eye",status-playable,playable,2020-07-23 18:08:35.000 -010044500C182000,"Sid Meier's Civilization VI",status-playable;ldn-untested,playable,2024-04-08 16:03:40.000 -01007FC00B674000,"Sigi - A Fart for Melusina",status-playable,playable,2021-02-22 16:46:58.000 -0100F1400B0D6000,"Silence",nvdec;status-playable,playable,2021-06-03 14:46:17.000 -,"Silent World",status-playable,playable,2020-08-28 13:45:13.000 -010045500DFE2000,"Silk",nvdec;status-playable,playable,2021-06-10 15:34:37.000 -010016D00A964000,"SilverStarChess",status-playable,playable,2021-05-06 15:25:57.000 -0100E8C019B36000,"Simona's Requiem",gpu;status-ingame,ingame,2023-02-21 18:29:19.000 -01006FE010438000,"Sin Slayers",status-playable,playable,2022-10-20 11:53:52.000 -01002820036A8000,"Sine Mora EX",gpu;status-ingame;online-broken,ingame,2022-08-12 19:36:18.000 -,"Singled Out",online;status-playable,playable,2020-08-03 13:06:18.000 -,"Sinless",nvdec;status-playable,playable,2020-08-09 20:18:55.000 -0100B16009C10000,"SINNER: Sacrifice for Redemption",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33.000 -0100E9201410E000,"Sir Lovelot",status-playable,playable,2021-04-05 16:21:46.000 -0100134011E32000,"Skate City",status-playable,playable,2022-11-04 11:37:39.000 -,"Skee-Ball",status-playable,playable,2020-11-16 04:44:07.000 -01001A900F862000,"Skelattack",status-playable,playable,2021-06-09 15:26:26.000 -01008E700F952000,"Skelittle: A Giant Party!!",status-playable,playable,2021-06-09 19:08:34.000 -,"Skelly Selest",status-playable,playable,2020-05-30 15:38:18.000 -,"Skies of Fury",status-playable,playable,2020-05-30 16:40:54.000 -010046B00DE62000,"Skullgirls: 2nd Encore",status-playable,playable,2022-09-15 21:21:25.000 -,"Skulls of the Shogun: Bone-a-fide Edition",status-playable,playable,2020-08-31 18:58:12.000 -0100D7B011654000,"Skully",status-playable;nvdec;UE4,playable,2022-10-06 13:52:59.000 -010083100B5CA000,"Sky Force Anniversary",status-playable;online-broken,playable,2022-08-12 20:50:07.000 -,"Sky Force Reloaded",status-playable,playable,2021-01-04 20:06:57.000 -010003F00CC98000,"Sky Gamblers - Afterburner",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55.000 -010093D00AC38000,"Sky Gamblers: Storm Raiders",gpu;audio;status-ingame;32-bit,ingame,2022-08-12 21:13:36.000 -010068200E96E000,"Sky Gamblers: Storm Raiders 2",gpu;status-ingame,ingame,2022-09-13 12:24:04.000 -,"Sky Racket",status-playable,playable,2020-09-07 12:22:24.000 -0100DDB004F30000,"Sky Ride",status-playable,playable,2021-02-22 16:53:07.000 -,"Sky Rogue",status-playable,playable,2020-05-30 08:26:28.000 -0100C52011460000,"Sky: Children of the Light",cpu;status-nothing;online-broken,nothing,2023-02-23 10:57:10.000 -010041C01014E000,"Skybolt Zack",status-playable,playable,2021-04-12 18:28:00.000 -0100A0A00D1AA000,"SKYHILL",status-playable,playable,2021-03-05 15:19:11.000 -,"Skylanders Imaginators",crash;services;status-boots,boots,2020-05-30 18:49:18.000 -,"SKYPEACE",status-playable,playable,2020-05-29 14:14:30.000 -,"SkyScrappers",status-playable,playable,2020-05-28 22:11:25.000 -,"SkyTime",slow;status-ingame,ingame,2020-05-30 09:24:51.000 -01003AD00DEAE000,"SlabWell",status-playable,playable,2021-02-22 17:02:51.000 -,"Slain",status-playable,playable,2020-05-29 14:26:16.000 -0100BB100AF4C000,"Slain Back from Hell",status-playable,playable,2022-08-12 23:36:19.000 -010026300BA4A000,"Slay the Spire",status-playable,playable,2023-01-20 15:09:26.000 -0100501006494000,"Slayaway Camp: Butcher's Cut",status-playable;opengl-backend-bug,playable,2022-08-12 23:44:05.000 -01004E900EDDA000,"Slayin 2",gpu;status-ingame,ingame,2024-04-19 16:15:26.000 -01004AC0081DC000,"Sleep Tight",gpu;status-ingame;UE4,ingame,2022-08-13 00:17:32.000 -0100F4500AA4E000,"Slice Dice & Rice",online;status-playable,playable,2021-02-22 17:44:23.000 -010010D011E1C000,"Slide Stars",status-menus;crash,menus,2021-11-25 08:53:43.000 -,"Slime-san",status-playable,playable,2020-05-30 16:15:12.000 -,"Slime-san Superslime Edition",status-playable,playable,2020-05-30 19:08:08.000 -01002AA00C974000,"SMASHING THE BATTLE",status-playable,playable,2021-06-11 15:53:57.000 -0100C9100B06A000,"SmileBASIC 4",gpu;status-menus,menus,2021-07-29 17:35:59.000 -0100207007EB2000,"Smoke and Sacrifice",status-playable,playable,2022-08-14 12:38:27.000 -01009790186FE000,"Smurfs Kart",status-playable,playable,2023-10-18 00:55:00.000 -0100F2800D46E000,"Snack World The Dungeon Crawl Gold",gpu;slow;status-ingame;nvdec;audout,ingame,2022-05-01 21:12:44.000 -0100C0F0020E8000,"Snake Pass",status-playable;nvdec;UE4,playable,2022-01-03 04:31:52.000 -010075A00BA14000,"Sniper Elite 3 Ultimate Edition",status-playable;ldn-untested,playable,2024-04-18 07:47:49.000 -010007B010FCC000,"Sniper Elite 4",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15.000 -0100BB000A3AA000,"Sniper Elite V2 Remastered",slow;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13.000 -0100704000B3A000,"Snipperclips",status-playable,playable,2022-12-05 12:44:55.000 -01008E20047DC000,"Snipperclips Plus",status-playable,playable,2023-02-14 20:20:13.000 -01004AB00AEF8000,"SNK 40th Anniversary Collection",status-playable,playable,2022-08-14 13:33:15.000 -010027F00AD6C000,"SNK HEROINES Tag Team Frenzy",status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25.000 -01008DA00CBBA000,"Snooker 19",status-playable;nvdec;online-broken;UE4,playable,2022-09-11 17:43:22.000 -010045300516E000,"Snow Moto Racing Freedom",gpu;status-ingame;vulkan-backend-bug,ingame,2022-08-15 16:05:14.000 -0100BE200C34A000,"Snowboarding the Next Phase",nvdec;status-playable,playable,2021-02-23 12:56:58.000 -,"SnowRunner - 0100FBD13AB6000",services;status-boots;crash,boots,2023-10-07 00:01:16.000 -010017B012AFC000,"Soccer Club Life: Playing Manager",gpu;status-ingame,ingame,2022-10-25 11:59:22.000 -0100B5000E05C000,"Soccer Pinball",UE4;gpu;status-ingame,ingame,2021-06-15 20:56:51.000 -,"Soccer Slammers",status-playable,playable,2020-05-30 07:48:14.000 -010095C00F9DE000,"Soccer, Tactics & Glory",gpu;status-ingame,ingame,2022-09-26 17:15:58.000 -,"SOLDAM Drop, Connect, Erase",status-playable,playable,2020-05-30 09:18:54.000 -0100590009C38000,"SolDivide for Nintendo Switch",32-bit;status-playable,playable,2021-06-09 14:13:03.000 -010008600D1AC000,"Solo: Islands of the Heart",gpu;status-ingame;nvdec,ingame,2022-09-11 17:54:43.000 -01009EE00E91E000,"Some Distant Memory",status-playable,playable,2022-09-15 21:48:19.000 -01004F401BEBE000,"Song of Nunu: A League of Legends Story",status-ingame,ingame,2024-07-12 18:53:44.000 -0100E5400BF94000,"Songbird Symphony",status-playable,playable,2021-02-27 02:44:04.000 -,"Songbringer",status-playable,playable,2020-06-22 10:42:02.000 -0000000000000000,"Sonic 1 (2013)",status-ingame;crash;homebrew,ingame,2024-04-06 18:31:20.000 -0000000000000000,"Sonic 2 (2013)",status-ingame;crash;homebrew,ingame,2024-04-01 16:25:30.000 -0000000000000000,"Sonic A.I.R",status-ingame;homebrew,ingame,2024-04-01 16:25:32.000 -0000000000000000,"Sonic CD",status-ingame;crash;homebrew,ingame,2024-04-01 16:25:31.000 -010040E0116B8000,"Sonic Colors Ultimate [010040E0116B8000]",status-playable,playable,2022-11-12 21:24:26.000 -01001270012B6000,"Sonic Forces",status-playable,playable,2024-07-28 13:11:21.000 -01004AD014BF0000,"Sonic Frontiers",gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53.000 -01009AA000FAA000,"Sonic Mania",status-playable,playable,2020-06-08 17:30:57.000 -01009AA000FAA000,"Sonic Mania Plus",status-playable,playable,2022-01-16 04:09:11.000 -01008F701C074000,"Sonic Superstars",gpu;status-ingame;nvdec,ingame,2023-10-28 17:48:07.000 -010088801C150000,"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",status-playable,playable,2024-08-20 13:26:56.000 -01005EA01C0FC000,"SONIC X SHADOW GENERATIONS",status-ingame;crash,ingame,2025-01-07 04:20:45.000 -,"Soul Axiom Rebooted",nvdec;slow;status-ingame,ingame,2020-09-04 12:41:01.000 -,"Soul Searching",status-playable,playable,2020-07-09 18:39:07.000 -01008F2005154000,"South Park: The Fractured But Whole",slow;status-playable;online-broken,playable,2024-07-08 17:47:28.000 -,"Space Blaze",status-playable,playable,2020-08-30 16:18:05.000 -,"Space Cows",UE4;crash;status-menus,menus,2020-06-15 11:33:20.000 -,"SPACE ELITE FORCE",status-playable,playable,2020-11-27 15:21:05.000 -010047B010260000,"Space Pioneer",status-playable,playable,2022-10-20 12:24:37.000 -010010A009830000,"Space Ribbon",status-playable,playable,2022-08-15 17:17:10.000 -0000000000000000,"SpaceCadetPinball",status-ingame;homebrew,ingame,2024-04-18 19:30:04.000 -0100D9B0041CE000,"Spacecats with Lasers",status-playable,playable,2022-08-15 17:22:44.000 -,"Spaceland",status-playable,playable,2020-11-01 14:31:56.000 -,"Sparkle 2",status-playable,playable,2020-10-19 11:51:39.000 -01000DC007E90000,"Sparkle Unleashed",status-playable,playable,2021-06-03 14:52:15.000 -,"Sparkle ZERO",gpu;slow;status-ingame,ingame,2020-03-23 18:19:18.000 -01007ED00C032000,"Sparklite",status-playable,playable,2022-08-06 11:35:41.000 -0100E6A009A26000,"Spartan",UE4;nvdec;status-playable,playable,2021-03-05 15:53:19.000 -,"Speaking Simulator",status-playable,playable,2020-10-08 13:00:39.000 -01008B000A5AE000,"Spectrum",status-playable,playable,2022-08-16 11:15:59.000 -0100F18010BA0000,"Speed 3: Grand Prix",status-playable;UE4,playable,2022-10-20 12:32:31.000 -,"Speed Brawl",slow;status-playable,playable,2020-09-18 22:08:16.000 -01000540139F6000,"Speed Limit",gpu;status-ingame,ingame,2022-09-02 18:37:40.000 -010061F013A0E000,"Speed Truck Racing",status-playable,playable,2022-10-20 12:57:04.000 -0100E74007EAC000,"Spellspire",status-playable,playable,2022-08-16 11:21:21.000 -010021F004270000,"Spelunker Party!",services;status-boots,boots,2022-08-16 11:25:49.000 -0100710013ABA000,"Spelunky",status-playable,playable,2021-11-20 17:45:03.000 -0100BD500BA94000,"Sphinx and the Cursed Mummy™",gpu;status-ingame;32-bit;opengl,ingame,2024-05-20 06:00:51.000 -,"Spider Solitaire",status-playable,playable,2020-12-16 16:19:30.000 -010076D0122A8000,"Spinch",status-playable,playable,2024-07-12 19:02:10.000 -01001E40136FE000,"Spinny's journey",status-ingame;crash,ingame,2021-11-30 03:39:44.000 -,"Spiral Splatter",status-playable,playable,2020-06-04 14:03:57.000 -,"Spirit Hunter: NG",32-bit;status-playable,playable,2020-12-17 20:38:47.000 -01005E101122E000,"Spirit of the North",status-playable;UE4,playable,2022-09-30 11:40:47.000 -,"Spirit Roots",nvdec;status-playable,playable,2020-07-10 13:33:32.000 -0100BD400DC52000,"Spiritfarer",gpu;status-ingame,ingame,2022-10-06 16:31:38.000 -01009D60080B4000,"SpiritSphere DX",status-playable,playable,2021-07-03 23:37:49.000 -010042700E3FC000,"Spitlings",status-playable;online-broken,playable,2022-10-06 16:42:39.000 -01003BC0000A0000,"Splatoon 2",status-playable;ldn-works;LAN,playable,2024-07-12 19:11:15.000 -0100C2500FC20000,"Splatoon 3",status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11.000 -0100BA0018500000,"Splatoon 3: Splatfest World Premiere",gpu;status-ingame;online-broken;demo,ingame,2022-09-19 03:17:12.000 -01009FB0172F4000,"SpongeBob SquarePants The Cosmic Shake",gpu;status-ingame;UE4,ingame,2023-08-01 19:29:53.000 -010062800D39C000,"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34.000 -010097C01336A000,"Spooky Chase",status-playable,playable,2022-11-04 12:17:44.000 -0100C6100D75E000,"Spooky Ghosts Dot Com",status-playable,playable,2021-06-15 15:16:11.000 -0100DE9005170000,"Sports Party",nvdec;status-playable,playable,2021-03-05 13:40:42.000 -0100E04009BD4000,"Spot The Difference",status-playable,playable,2022-08-16 11:49:52.000 -010052100D1B4000,"Spot the Differences: Party!",status-playable,playable,2022-08-16 11:55:26.000 -01000E6015350000,"Spy Alarm",services;status-ingame,ingame,2022-12-09 10:12:51.000 -01005D701264A000,"SpyHack",status-playable,playable,2021-04-15 10:53:51.000 -,"Spyro Reignited Trilogy",Needs More Attention;UE4;crash;gpu;nvdec;status-menus,menus,2021-01-22 13:01:56.000 -010077B00E046000,"Spyro Reignited Trilogy",status-playable;nvdec;UE4,playable,2022-09-11 18:38:33.000 -,"Squeakers",status-playable,playable,2020-12-13 12:13:05.000 -,"Squidgies Takeover",status-playable,playable,2020-07-20 22:28:08.000 -,"Squidlit",status-playable,playable,2020-08-06 12:38:32.000 -0100EBF00E702000,"STAR OCEAN First Departure R",nvdec;status-playable,playable,2021-07-05 19:29:16.000 -010065301A2E0000,"STAR OCEAN The Second Story R",status-ingame;crash,ingame,2024-06-01 02:39:59.000 -,"Star Renegades",nvdec;status-playable,playable,2020-12-11 12:19:23.000 -,"Star Story: The Horizon Escape",status-playable,playable,2020-08-11 22:31:38.000 -01009DF015776000,"Star Trek Prodigy: Supernova",status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50.000 -0100854015868000,"Star Wars - Knights Of The Old Republic",gpu;deadlock;status-boots,boots,2024-02-12 10:13:51.000 -010040701B948000,"STAR WARS Battlefront Classic Collection",gpu;status-ingame;vulkan,ingame,2024-07-12 19:24:21.000 -0100BD100FFBE000,"STAR WARS Episode I: Racer",slow;status-playable;nvdec,playable,2022-10-03 16:08:36.000 -0100BB500EACA000,"STAR WARS Jedi Knight II Jedi Outcast",gpu;status-ingame,ingame,2022-09-15 22:51:00.000 -01008CA00FAE8000,"Star Wars Jedi Knight: Jedi Academy",gpu;status-boots,boots,2021-06-16 12:35:30.000 -0100FA10115F8000,"Star Wars: Republic Commando",gpu;status-ingame;32-bit,ingame,2023-10-31 15:57:17.000 -0100153014544000,"STAR WARS: The Force Unleashed",status-playable,playable,2024-05-01 17:41:28.000 -01006DA00DEAC000,"Star Wars™ Pinball",status-playable;online-broken,playable,2022-09-11 18:53:31.000 -01005EB00EA10000,"Star-Crossed Myth - The Department of Wishes",gpu;status-ingame,ingame,2021-06-04 19:34:36.000 -0100E6B0115FC000,"Star99",status-menus;online,menus,2021-11-26 14:18:51.000 -01002100137BA000,"Stardash",status-playable,playable,2021-01-21 16:31:19.000 -0100E65002BB8000,"Stardew Valley",status-playable;online-broken;ldn-untested,playable,2024-02-14 03:11:19.000 -01002CC003FE6000,"Starlink: Battle for Atlas",services-horizon;status-nothing;crash;Needs Update,nothing,2024-05-05 17:25:11.000 -,"Starlit Adventures Golden Stars",status-playable,playable,2020-11-21 12:14:43.000 -,"Starship Avenger Operation: Take Back Earth",status-playable,playable,2021-01-12 15:52:55.000 -,"State of Anarchy: Master of Mayhem",nvdec;status-playable,playable,2021-01-12 19:00:05.000 -,"State of Mind",UE4;crash;status-boots,boots,2020-06-22 22:17:50.000 -0100616009082000,"STAY",crash;services;status-boots,boots,2021-04-23 14:24:52.000 -0100B61009C60000,"STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY",status-playable,playable,2021-01-26 17:37:28.000 -01008010118CC000,"Steam Prison",nvdec;status-playable,playable,2021-04-01 15:34:11.000 -0100AE100DAFA000,"Steam Tactics",status-playable,playable,2022-10-06 16:53:45.000 -,"Steamburg",status-playable,playable,2021-01-13 08:42:01.000 -01009320084A4000,"SteamWorld Dig",status-playable,playable,2024-08-19 12:12:23.000 -0100CA9002322000,"SteamWorld Dig 2",status-playable,playable,2022-12-21 19:25:42.000 -,"SteamWorld Quest",nvdec;status-playable,playable,2020-11-09 13:10:04.000 -01001C6014772000,"Steel Assault",status-playable,playable,2022-12-06 14:48:30.000 -,"Steins;Gate Elite",status-playable,playable,2020-08-04 07:33:32.000 -0100CB400E9BC000,"STEINS;GATE: My Darling's Embrace",status-playable;nvdec,playable,2022-11-20 16:48:34.000 -01002DE01043E000,"Stela",UE4;status-playable,playable,2021-06-15 13:28:34.000 -01005A700C954000,"Stellar Interface",status-playable,playable,2022-10-20 13:44:33.000 -0100BC800EDA2000,"STELLATUM",gpu;status-playable,playable,2021-03-07 16:30:23.000 -,"Steredenn",status-playable,playable,2021-01-13 09:19:42.000 -0100AE0006474000,"Stern Pinball Arcade",status-playable,playable,2022-08-16 14:24:41.000 -,"Stikbold! A Dodgeball Adventure DELUXE",status-playable,playable,2021-01-11 20:12:54.000 -010077B014518000,"Stitchy in Tooki Trouble",status-playable,playable,2021-05-06 16:25:53.000 -010070D00F640000,"STONE",status-playable;UE4,playable,2022-09-30 11:53:32.000 -010074400F6A8000,"Stories Untold",status-playable;nvdec,playable,2022-12-22 01:08:46.000 -010040D00BCF4000,"Storm Boy",status-playable,playable,2022-10-20 14:15:06.000 -0100B2300B932000,"Storm in a Teacup",gpu;status-ingame,ingame,2021-11-06 02:03:19.000 -,"Story of a Gladiator",status-playable,playable,2020-07-29 15:08:18.000 -010017301007E000,"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",status-playable,playable,2021-03-18 11:42:19.000 -0100ED400EEC2000,"Story of Seasons: Friends of Mineral Town",status-playable,playable,2022-10-03 16:40:31.000 -010078D00E8F4000,"Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000",slow;status-playable;nvdec;UE4,playable,2022-09-16 11:58:38.000 -01000A6013F86000,"Strange Field Football",status-playable,playable,2022-11-04 12:25:57.000 -,"Stranger Things 3: The Game",status-playable,playable,2021-01-11 17:44:09.000 -0100D7E011C64000,"Strawberry Vinegar",status-playable;nvdec,playable,2022-12-05 16:25:40.000 -010075101EF84000,"Stray",status-ingame;crash,ingame,2025-01-07 04:03:00.000 -0100024008310000,"Street Fighter 30th Anniversary Collection",status-playable;online-broken;ldn-partial,playable,2022-08-20 16:50:47.000 -010012400D202000,"Street Outlaws: The List",nvdec;status-playable,playable,2021-06-11 12:15:32.000 -,"Street Power Soccer",UE4;crash;status-boots,boots,2020-11-21 12:28:57.000 -,"Streets of Rage 4",nvdec;online;status-playable,playable,2020-07-07 21:21:22.000 -0100BDE012928000,"Strife: Veteran Edition",gpu;status-ingame,ingame,2022-01-15 05:10:42.000 -010039100DACC000,"Strike Force - War on Terror",status-menus;crash;Needs Update,menus,2021-11-24 08:08:20.000 -010072500D52E000,"Strike Suit Zero: Director's Cut",crash;status-boots,boots,2021-04-23 17:15:14.000 -,"StrikeForce Kitty",nvdec;status-playable,playable,2020-07-29 16:22:15.000 -0100FF5005B76000,"STRIKERS1945 for Nintendo Switch",32-bit;status-playable,playable,2021-06-03 19:35:04.000 -0100720008ED2000,"STRIKERS1945II for Nintendo Switch",32-bit;status-playable,playable,2021-06-03 19:43:00.000 -,"Struggling",status-playable,playable,2020-10-15 20:37:03.000 -0100AF000B4AE000,"Stunt Kite Party",nvdec;status-playable,playable,2021-01-25 17:16:56.000 -0100C5500E7AE000,"STURMWIND EX",audio;32-bit;status-playable,playable,2022-09-16 12:01:39.000 -0100E6400BCE8000,"Sub Level Zero: Redux",status-playable,playable,2022-09-16 12:30:03.000 -,"Subarashiki Kono Sekai -Final Remix-",services;slow;status-ingame,ingame,2020-02-10 16:21:51.000 -010001400E474000,"Subdivision Infinity DX",UE4;crash;status-boots,boots,2021-03-03 14:26:46.000 -0100EDA00D866000,"Submerged",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01.000 -0100429011144000,"Subnautica",status-playable;vulkan-backend-bug,playable,2022-11-04 13:07:29.000 -010014C011146000,"Subnautica Below Zero",status-playable,playable,2022-12-23 14:15:13.000 -0100BF9012AC6000,"Suguru Nature",crash;status-ingame,ingame,2021-07-29 11:36:27.000 -01005CD00A2A2000,"Suicide Guy",status-playable,playable,2021-01-26 13:13:54.000 -0100DE000C2E4000,"Suicide Guy: Sleepin' Deeply",status-ingame;Needs More Attention,ingame,2022-09-20 23:45:25.000 -01003D50126A4000,"Sumire",status-playable,playable,2022-11-12 13:40:43.000 -0100A130109B2000,"Summer in Mara",nvdec;status-playable,playable,2021-03-06 14:10:38.000 -01004E500DB9E000,"Summer Sweetheart",status-playable;nvdec,playable,2022-09-16 12:51:46.000 -0100BFE014476000,"Sunblaze",status-playable,playable,2022-11-12 13:59:23.000 -01002D3007962000,"Sundered: Eldritch Edition",gpu;status-ingame,ingame,2021-06-07 11:46:00.000 -0100F7000464A000,"Super Beat Sports",status-playable;ldn-untested,playable,2022-08-16 16:05:50.000 -,"Super Blood Hockey",status-playable,playable,2020-12-11 20:01:41.000 -01007AD00013E000,"Super Bomberman R",status-playable;nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14.000 -0100B87017D94000,"SUPER BOMBERMAN R 2",deadlock;status-boots,boots,2023-09-29 13:19:51.000 -0100D9B00DB5E000,"Super Cane Magic ZERO",status-playable,playable,2022-09-12 15:33:46.000 -010065F004E5E000,"Super Chariot",status-playable,playable,2021-06-03 13:19:01.000 -0100E5E00C464000,"SUPER DRAGON BALL HEROES WORLD MISSION",status-playable;nvdec;online-broken,playable,2022-08-17 12:56:30.000 -010023100B19A000,"Super Dungeon Tactics",status-playable,playable,2022-10-06 17:40:40.000 -010056800B534000,"Super Inefficient Golf",status-playable;UE4,playable,2022-08-17 15:53:45.000 -,"Super Jumpy Ball",status-playable,playable,2020-07-04 18:40:36.000 -0100196009998000,"Super Kickers League",status-playable,playable,2021-01-26 13:36:48.000 -01003FB00C5A8000,"Super Kirby Clash",status-playable;ldn-works,playable,2024-07-30 18:21:55.000 -010000D00F81A000,"Super Korotama",status-playable,playable,2021-06-06 19:06:22.000 -01003E300FCAE000,"Super Loop Drive",status-playable;nvdec;UE4,playable,2022-09-22 10:58:05.000 -010049900F546000,"Super Mario 3D All-Stars",services-horizon;slow;status-ingame;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16.000 -010028600EBDA000,"Super Mario 3D World + Bowser's Fury",status-playable;ldn-works,playable,2024-07-31 10:45:37.000 -054507E0B7552000,"Super Mario 64",status-ingame;homebrew,ingame,2024-03-20 16:57:27.000 -0100277011F1A000,"Super Mario Bros. 35",status-menus;online-broken,menus,2022-08-07 16:27:25.000 -010015100B514000,"Super Mario Bros. Wonder",status-playable;amd-vendor-bug,playable,2024-09-06 13:21:21.000 -01009B90006DC000,"Super Mario Maker 2",status-playable;online-broken;ldn-broken,playable,2024-08-25 11:05:19.000 -0100000000010000,"Super Mario Odyssey",status-playable;nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34.000 -010036B0034E4000,"Super Mario Party",gpu;status-ingame;Needs Update;ldn-works,ingame,2024-06-21 05:10:16.000 -0100BC0018138000,"Super Mario RPG",gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42.000 -0000000000000000,"Super Mario World",status-boots;homebrew,boots,2024-06-13 01:40:31.000 -,"Super Meat Boy",services;status-playable,playable,2020-04-02 23:10:07.000 -01009C200D60E000,"Super Meat Boy Forever",gpu;status-boots,boots,2021-04-26 14:25:39.000 -,"Super Mega Space Blaster Special Turbo",online;status-playable,playable,2020-08-06 12:13:25.000 -010031F019294000,"Super Monkey Ball Banana Rumble",status-playable,playable,2024-06-28 10:39:18.000 -0100B2A00E1E0000,"Super Monkey Ball: Banana Blitz HD",status-playable;online-broken,playable,2022-09-16 13:16:25.000 -,"Super Mutant Alien Assault",status-playable,playable,2020-06-07 23:32:45.000 -01004D600AC14000,"Super Neptunia RPG",status-playable;nvdec,playable,2022-08-17 16:38:52.000 -,"Super Nintendo Entertainment System - Nintendo Switch Online",status-playable,playable,2021-01-05 00:29:48.000 -0100284007D6C000,"Super One More Jump",status-playable,playable,2022-08-17 16:47:47.000 -01001F90122B2000,"Super Punch Patrol",status-playable,playable,2024-07-12 19:49:02.000 -0100331005E8E000,"Super Putty Squad",gpu;status-ingame;32-bit,ingame,2024-04-29 15:51:54.000 -,"SUPER ROBOT WARS T",online;status-playable,playable,2021-03-25 11:00:40.000 -,"SUPER ROBOT WARS V",online;status-playable,playable,2020-06-23 12:56:37.000 -,"SUPER ROBOT WARS X",online;status-playable,playable,2020-08-05 19:18:51.000 -,"Super Saurio Fly",nvdec;status-playable,playable,2020-08-06 13:12:14.000 -,"Super Skelemania",status-playable,playable,2020-06-07 22:59:50.000 -01006A800016E000,"Super Smash Bros. Ultimate",gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21.000 -0100D61012270000,"Super Soccer Blast",gpu;status-ingame,ingame,2022-02-16 08:39:12.000 -0100A9300A4AE000,"Super Sportmatchen",status-playable,playable,2022-08-19 12:34:40.000 -0100FB400F54E000,"Super Street: Racer",status-playable;UE4,playable,2022-09-16 13:43:14.000 -,"Super Tennis Blast - 01000500DB50000",status-playable,playable,2022-08-19 16:20:48.000 -0100C6800D770000,"Super Toy Cars 2",gpu;regression;status-ingame,ingame,2021-03-02 20:15:15.000 -010035B00B3F0000,"Super Volley Blast",status-playable,playable,2022-08-19 18:14:40.000 -0100FF60051E2000,"Superbeat: Xonic EX",status-ingame;crash;nvdec,ingame,2022-08-19 18:54:40.000 -0100630010252000,"SuperEpic: The Entertainment War",status-playable,playable,2022-10-13 23:02:48.000 -01001A500E8B4000,"Superhot",status-playable,playable,2021-05-05 19:51:30.000 -,"Superliminal",status-playable,playable,2020-09-03 13:20:50.000 -0100C01012654000,"Supermarket Shriek",status-playable,playable,2022-10-13 23:19:20.000 -0100A6E01201C000,"Supraland",status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11.000 -010029A00AEB0000,"Survive! Mr. Cube",status-playable,playable,2022-10-20 14:44:47.000 -01005AB01119C000,"SUSHI REVERSI",status-playable,playable,2021-06-11 19:26:58.000 -,"Sushi Striker: The Way of Sushido",nvdec;status-playable,playable,2020-06-26 20:49:11.000 -0100D6D00EC2C000,"Sweet Witches",status-playable;nvdec,playable,2022-10-20 14:56:37.000 -010049D00C8B0000,"Swimsanity!",status-menus;online,menus,2021-11-26 14:27:16.000 -01005DF00DC26000,"SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION",UE4;gpu;online;status-ingame,ingame,2021-06-09 16:58:50.000 -01001B600D1D6000,"SWORD ART ONLINE: Hollow Realization Deluxe Edition",status-playable;nvdec,playable,2022-08-19 19:19:15.000 -,"Sword of the Guardian",status-playable,playable,2020-07-16 12:24:39.000 -0100E4701355C000,"Sword of the Necromancer",status-ingame;crash,ingame,2022-12-10 01:28:39.000 -01004BB00421E000,"Syberia 1 & 2",status-playable,playable,2021-12-24 12:06:25.000 -010028C003FD6000,"Syberia 2",gpu;status-ingame,ingame,2022-08-24 12:43:03.000 -0100CBE004E6C000,"Syberia 3",nvdec;status-playable,playable,2021-01-25 16:15:12.000 -,"Sydney Hunter and the Curse of the Mayan",status-playable,playable,2020-06-15 12:15:57.000 -,"SYNAPTIC DRIVE",online;status-playable,playable,2020-09-07 13:44:05.000 -01009E700F448000,"Synergia",status-playable,playable,2021-04-06 17:58:04.000 -01009BF00E7D2000,"SYNTHETIK: Ultimate",gpu;status-ingame;crash,ingame,2022-08-30 03:19:25.000 -,"Table Top Racing World Tour Nitro Edition",status-playable,playable,2020-04-05 23:21:30.000 -01000F20083A8000,"Tactical Mind",status-playable,playable,2021-01-25 18:05:00.000 -,"Tactical Mind 2",status-playable,playable,2020-07-01 23:11:07.000 -0100E12013C1A000,"Tactics Ogre Reborn",status-playable;vulkan-backend-bug,playable,2024-04-09 06:21:35.000 -01007C7006AEE000,"Tactics V: ""Obsidian Brigade",status-playable,playable,2021-02-28 15:09:42.000 -,"Taiko no Tatsujin Rhythmic Adventure Pack",status-playable,playable,2020-12-03 07:28:26.000 -01002C000B552000,"Taiko no Tatsujin: Drum 'n' Fun!",status-playable;online-broken;ldn-broken,playable,2023-05-20 15:10:12.000 -0100BCA0135A0000,"Taiko no Tatsujin: Rhythm Festival",status-playable,playable,2023-11-13 13:16:34.000 -0100346017304000,"Taiko Risshiden V DX",status-nothing;crash,nothing,2022-06-06 16:25:31.000 -010040A00EA26000,"Taimumari: Complete Edition",status-playable,playable,2022-12-06 13:34:49.000 -0100F0C011A68000,"Tales from the Borderlands",status-playable;nvdec,playable,2022-10-25 18:44:14.000 -0100408007078000,"Tales of the Tiny Planet",status-playable,playable,2021-01-25 15:47:41.000 -01002C0008E52000,"Tales of Vesperia: Definitive Edition",status-playable,playable,2024-09-28 03:20:47.000 -010012800EE3E000,"Tamashii",status-playable,playable,2021-06-10 15:26:20.000 -010008A0128C4000,"Tamiku",gpu;status-ingame,ingame,2021-06-15 20:06:55.000 -,"Tangledeep",crash;status-boots,boots,2021-01-05 04:08:41.000 -01007DB010D2C000,"TaniNani",crash;kernel;status-nothing,nothing,2021-04-08 03:06:44.000 -,"Tank Mechanic Simulator",status-playable,playable,2020-12-11 15:10:45.000 -01007A601318C000,"Tanuki Justice",status-playable;opengl,playable,2023-02-21 18:28:10.000 -01004DF007564000,"Tanzia",status-playable,playable,2021-06-07 11:10:25.000 -,"Task Force Kampas",status-playable,playable,2020-11-30 14:44:15.000 -0100B76011DAA000,"Taxi Chaos",slow;status-playable;online-broken;UE4,playable,2022-10-25 19:13:00.000 -,"Tcheco in the Castle of Lucio",status-playable,playable,2020-06-27 13:35:43.000 -010092B0091D0000,"Team Sonic Racing",status-playable;online-broken;ldn-works,playable,2024-02-05 15:05:27.000 -0100FE701475A000,"Teenage Mutant Ninja Turtles: Shredder's Revenge",deadlock;status-boots;crash,boots,2024-09-28 09:31:39.000 -01005CF01E784000,"Teenage Mutant Ninja Turtles: Splintered Fate",status-playable,playable,2024-08-03 13:50:42.000 -0100FDB0154E4000,"Teenage Mutant Ninja Turtles: The Cowabunga Collection",status-playable,playable,2024-01-22 19:39:04.000 -,"Telling Lies",status-playable,playable,2020-10-23 21:14:51.000 -0100C8B012DEA000,"Temtem",status-menus;online-broken,menus,2022-12-17 17:36:11.000 -,"TENGAI for Nintendo Switch",32-bit;status-playable,playable,2020-11-25 19:52:26.000 -,"Tennis",status-playable,playable,2020-06-01 20:50:36.000 -01002970080AA000,"Tennis in the Face",status-playable,playable,2022-08-22 14:10:54.000 -0100092006814000,"Tennis World Tour",status-playable;online-broken,playable,2022-08-22 14:27:10.000 -0100950012F66000,"Tennis World Tour 2",status-playable;online-broken,playable,2022-10-14 10:43:16.000 -0100E46006708000,"Terraria",status-playable;online-broken,playable,2022-09-12 16:14:57.000 -010070C00FB56000,"TERROR SQUID",status-playable;online-broken,playable,2023-10-30 22:29:29.000 -010043700EB68000,"TERRORHYTHM (TRRT)",status-playable,playable,2021-02-27 13:18:14.000 -0100FBC007EAE000,"Tesla vs Lovecraft",status-playable,playable,2023-11-21 06:19:36.000 -01005C8005F34000,"Teslagrad",status-playable,playable,2021-02-23 14:41:02.000 -01006F701507A000,"Tested on Humans: Escape Room",status-playable,playable,2022-11-12 14:42:52.000 -,"Testra's Escape",status-playable,playable,2020-06-03 18:21:14.000 -,"TETRA for Nintendo Switch",status-playable,playable,2020-06-26 20:49:55.000 -010040600C5CE000,"TETRIS 99",gpu;status-ingame;online-broken;ldn-untested,ingame,2024-05-02 16:36:41.000 -,"Tetsumo Party",status-playable,playable,2020-06-09 22:39:55.000 -01008ED0087A4000,"The Adventure Pals",status-playable,playable,2022-08-22 14:48:52.000 -,"The Adventures of 00 Dilly",status-playable,playable,2020-12-30 19:32:29.000 -,"The Adventures of Elena Temple",status-playable,playable,2020-06-03 23:15:35.000 -010045A00E038000,"The Alliance Alive HD Remastered",nvdec;status-playable,playable,2021-03-07 15:43:45.000 -,"The Almost Gone",status-playable,playable,2020-07-05 12:33:07.000 -0100CD500DDAE000,"The Bard's Tale ARPG: Remastered and Resnarkled",gpu;status-ingame;nvdec;online-working,ingame,2024-07-18 12:52:01.000 -01001E50141BC000,"The Battle Cats Unite!",deadlock;status-ingame,ingame,2021-12-14 21:38:34.000 -010089600E66A000,"The Big Journey",status-playable,playable,2022-09-16 14:03:08.000 -010021C000B6A000,"The Binding of Isaac: Afterbirth+",status-playable,playable,2021-04-26 14:11:56.000 -,"The Bluecoats: North & South",nvdec;status-playable,playable,2020-12-10 21:22:29.000 -010062500BFC0000,"The Book of Unwritten Tales 2",status-playable,playable,2021-06-09 14:42:53.000 -,"The Bridge",status-playable,playable,2020-06-03 13:53:26.000 -,"The Bug Butcher",status-playable,playable,2020-06-03 12:02:04.000 -01001B40086E2000,"The Bunker",status-playable;nvdec,playable,2022-09-16 14:24:05.000 -,"The Caligula Effect: Overdose",UE4;gpu;status-ingame,ingame,2021-01-04 11:07:50.000 -010066800E9F8000,"The Childs Sight",status-playable,playable,2021-06-11 19:04:56.000 -,"The Coma 2: Vicious Sisters",gpu;status-ingame,ingame,2020-06-20 12:51:51.000 -,"The Coma: Recut",status-playable,playable,2020-06-03 15:11:23.000 -01004170113D4000,"The Complex",status-playable;nvdec,playable,2022-09-28 14:35:41.000 -01000F20102AC000,"The Copper Canyon Dixie Dash",status-playable;UE4,playable,2022-09-29 11:42:29.000 -01000850037C0000,"The Count Lucanor",status-playable;nvdec,playable,2022-08-22 15:26:37.000 -0100EBA01548E000,"The Cruel King and the Great Hero",gpu;services;status-ingame,ingame,2022-12-02 07:02:08.000 -,"The Dark Crystal",status-playable,playable,2020-08-11 13:43:41.000 -,"The Darkside Detective",status-playable,playable,2020-06-03 22:16:18.000 -01000A10041EA000,"The Elder Scrolls V: Skyrim",gpu;status-ingame;crash,ingame,2024-07-14 03:21:31.000 -,"The End is Nigh",status-playable,playable,2020-06-01 11:26:45.000 -,"The Escapists 2",nvdec;status-playable,playable,2020-09-24 12:31:31.000 -01001B700BA7C000,"The Escapists: Complete Edition",status-playable,playable,2021-02-24 17:50:31.000 -0100C2E0129A6000,"The Executioner",nvdec;status-playable,playable,2021-01-23 00:31:28.000 -01006050114D4000,"The Experiment: Escape Room",gpu;status-ingame,ingame,2022-09-30 13:20:35.000 -0100B5900DFB2000,"The Eyes of Ara",status-playable,playable,2022-09-16 14:44:06.000 -,"The Fall",gpu;status-ingame,ingame,2020-05-31 23:31:16.000 -,"The Fall Part 2: Unbound",status-playable,playable,2021-11-06 02:18:08.000 -0100CDC00789E000,"The Final Station",status-playable;nvdec,playable,2022-08-22 15:54:39.000 -010098800A1E4000,"The First Tree",status-playable,playable,2021-02-24 15:51:05.000 -0100C38004DCC000,"The Flame in the Flood: Complete Edition",gpu;status-ingame;nvdec;UE4,ingame,2022-08-22 16:23:49.000 -,"The Forbidden Arts - 01007700D4AC000",status-playable,playable,2021-01-26 16:26:24.000 -010030700CBBC000,"The friends of Ringo Ishikawa",status-playable,playable,2022-08-22 16:33:17.000 -01006350148DA000,"The Gardener and the Wild Vines",gpu;status-ingame,ingame,2024-04-29 16:32:10.000 -0100B13007A6A000,"The Gardens Between",status-playable,playable,2021-01-29 16:16:53.000 -010036E00FB20000,"The Great Ace Attorney Chronicles",status-playable,playable,2023-06-22 21:26:29.000 -,"The Great Perhaps",status-playable,playable,2020-09-02 15:57:04.000 -01003b300e4aa000,"THE GRISAIA TRILOGY",status-playable,playable,2021-01-31 15:53:59.000 -,"The Hong Kong Massacre",crash;status-ingame,ingame,2021-01-21 12:06:56.000 -,"The House of Da Vinci",status-playable,playable,2021-01-05 14:17:19.000 -,"The House of Da Vinci 2",status-playable,playable,2020-10-23 20:47:17.000 -01008940086E0000,"The Infectious Madness of Doctor Dekker",status-playable;nvdec,playable,2022-08-22 16:45:01.000 -,"The Inner World",nvdec;status-playable,playable,2020-06-03 21:22:29.000 -,"The Inner World - The Last Wind Monk",nvdec;status-playable,playable,2020-11-16 13:09:40.000 -0100AE5003EE6000,"The Jackbox Party Pack",status-playable;online-working,playable,2023-05-28 09:28:40.000 -010015D003EE4000,"The Jackbox Party Pack 2",status-playable;online-working,playable,2022-08-22 18:23:40.000 -0100CC80013D6000,"The Jackbox Party Pack 3",slow;status-playable;online-working,playable,2022-08-22 18:41:06.000 -0100E1F003EE8000,"The Jackbox Party Pack 4",status-playable;online-working,playable,2022-08-22 18:56:34.000 -010052C00B184000,"The Journey Down: Chapter One",nvdec;status-playable,playable,2021-02-24 13:32:41.000 -01006BC00B188000,"The Journey Down: Chapter Three",nvdec;status-playable,playable,2021-02-24 13:45:27.000 -,"The Journey Down: Chapter Two",nvdec;status-playable,playable,2021-02-24 13:32:13.000 -010020500BD98000,"The King's Bird",status-playable,playable,2022-08-22 19:07:46.000 -010031B00DB34000,"The Knight & the Dragon",gpu;status-ingame,ingame,2023-08-14 10:31:43.000 -,"The Language of Love",Needs Update;crash;status-nothing,nothing,2020-12-03 17:54:00.000 -010079C017F5E000,"The Lara Croft Collection",services-horizon;deadlock;status-nothing,nothing,2024-07-12 22:45:51.000 -0100449011506000,"The Last Campfire",status-playable,playable,2022-10-20 16:44:19.000 -0100AAD011592000,"The Last Dead End",gpu;status-ingame;UE4,ingame,2022-10-20 16:59:44.000 -0100AC800D022000,"THE LAST REMNANT Remastered",status-playable;nvdec;UE4,playable,2023-02-09 17:24:44.000 -,"The Legend of Dark Witch",status-playable,playable,2020-07-12 15:18:33.000 -01001920156C2000,"The Legend of Heroes: Trails from Zero",gpu;status-ingame;mac-bug,ingame,2024-09-14 21:41:41.000 -,"The Legend of Heroes: Trails of Cold Steel III",status-playable,playable,2020-12-16 10:59:18.000 -01009B101044C000,"The Legend of Heroes: Trails of Cold Steel III Demo",demo;nvdec;status-playable,playable,2021-04-23 01:07:32.000 -0100D3C010DE8000,"The Legend of Heroes: Trails of Cold Steel IV",nvdec;status-playable,playable,2021-04-23 14:01:05.000 -01005E5013862000,"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",status-nothing;crash,nothing,2021-09-30 14:41:07.000 -01008CF01BAAC000,"The Legend of Zelda Echoes of Wisdom",status-playable;nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01.000 -01007EF00011E000,"The Legend of Zelda: Breath of the Wild",gpu;status-ingame;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46.000 -0100509005AF2000,"The Legend of Zelda: Breath of the Wild Demo",status-ingame;demo,ingame,2022-12-24 05:02:58.000 -01006BB00C6F0000,"The Legend of Zelda: Link's Awakening",gpu;status-ingame;nvdec;mac-bug,ingame,2023-08-09 17:37:40.000 -01002DA013484000,"The Legend of Zelda: Skyward Sword HD",gpu;status-ingame,ingame,2024-06-14 16:48:29.000 -0100F2C0115B6000,"The Legend of Zelda: Tears of the Kingdom",gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30.000 -0100A4400BE74000,"The LEGO Movie 2 - Videogame",status-playable,playable,2023-03-01 11:23:37.000 -01007FC00206E000,"The LEGO NINJAGO Movie Video Game",status-nothing;crash,nothing,2022-08-22 19:12:53.000 -010064B00B95C000,"The Liar Princess and the Blind Prince",audio;slow;status-playable,playable,2020-06-08 21:23:28.000 -0100735004898000,"The Lion's Song",status-playable,playable,2021-06-09 15:07:16.000 -0100A5000D590000,"The Little Acre",nvdec;status-playable,playable,2021-03-02 20:22:27.000 -01007A700A87C000,"The Long Dark",status-playable,playable,2021-02-21 14:19:52.000 -010052B003A38000,"The Long Reach",nvdec;status-playable,playable,2021-02-24 14:09:48.000 -,"The Long Return",slow;status-playable,playable,2020-12-10 21:05:10.000 -0100CE1004E72000,"The Longest Five Minutes",gpu;status-boots,boots,2023-02-19 18:33:11.000 -0100F3D0122C2000,"The Longing",gpu;status-ingame,ingame,2022-11-12 15:00:58.000 -010085A00C5E8000,"The Lord of the Rings: Adventure Card Game",status-menus;online-broken,menus,2022-09-16 15:19:32.000 -01008A000A404000,"The Lost Child",nvdec;status-playable,playable,2021-02-23 15:44:20.000 -0100BAB00A116000,"The Low Road",status-playable,playable,2021-02-26 13:23:22.000 -,"The Mahjong",Needs Update;crash;services;status-nothing,nothing,2021-04-01 22:06:22.000 -,"The Messenger",status-playable,playable,2020-03-22 13:51:37.000 -0100DEC00B2BC000,"The Midnight Sanctuary",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32.000 -0100F1B00B456000,"The MISSING: J.J. Macfield and the Island of Memories",status-playable,playable,2022-08-22 19:36:18.000 -010033300AC1A000,"The Mooseman",status-playable,playable,2021-02-24 12:58:57.000 -01005E9016BDE000,"The movie The Quintessential Bride -Five Memories Spent with You-",status-playable,playable,2023-12-14 14:43:43.000 -0100496004194000,"The Mummy Demastered",status-playable,playable,2021-02-23 13:11:27.000 -,"The Mystery of the Hudson Case",status-playable,playable,2020-06-01 11:03:36.000 -01000CF0084BC000,"The Next Penelope",status-playable,playable,2021-01-29 16:26:11.000 -01001FB00E386000,"THE NINJA SAVIORS Return of the Warriors",online;status-playable,playable,2021-03-25 23:48:07.000 -0100B080184BC000,"The Oregon Trail",gpu;status-ingame,ingame,2022-11-25 16:11:49.000 -0100B0101265C000,"The Otterman Empire",UE4;gpu;status-ingame,ingame,2021-06-17 12:27:15.000 -01000BC01801A000,"The Outbound Ghost",status-nothing,nothing,2024-03-02 17:10:58.000 -0100626011656000,"The Outer Worlds",gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32.000 -,"The Park",UE4;crash;gpu;status-ingame,ingame,2020-12-18 12:50:07.000 -010050101127C000,"The Persistence",nvdec;status-playable,playable,2021-06-06 19:15:40.000 -0100CD300880E000,"The Pinball Arcade",status-playable;online-broken,playable,2022-08-22 19:49:46.000 -01006BD018B54000,"The Plucky Squire",status-ingame;crash,ingame,2024-09-27 22:32:33.000 -0100E6A00B960000,"The Princess Guide",status-playable,playable,2021-02-24 14:23:34.000 -010058A00BF1C000,"The Raven Remastered",status-playable;nvdec,playable,2022-08-22 20:02:47.000 -,"The Red Strings Club",status-playable,playable,2020-06-01 10:51:18.000 -010079400BEE0000,"The Room",status-playable,playable,2021-04-14 18:57:05.000 -010033100EE12000,"The Ryuo's Work is Never Done!",status-playable,playable,2022-03-29 00:35:37.000 -01002BA00C7CE000,"The Savior's Gang",gpu;status-ingame;nvdec;UE4,ingame,2022-09-21 12:37:48.000 -0100F3200E7CA000,"The Settlers: New Allies",deadlock;status-nothing,nothing,2023-10-25 00:18:05.000 -,"The Sexy Brutale",status-playable,playable,2021-01-06 17:48:28.000 -,"The Shapeshifting Detective",nvdec;status-playable,playable,2021-01-10 13:10:49.000 -010028D00BA1A000,"The Sinking City",status-playable;nvdec;UE4,playable,2022-09-12 16:41:55.000 -010041C00A68C000,"The Spectrum Retreat",status-playable,playable,2022-10-03 18:52:40.000 -010029300E5C4000,"The Stanley Parable: Ultra Deluxe",gpu;status-ingame,ingame,2024-07-12 23:18:26.000 -010007F00AF56000,"The Station",status-playable,playable,2022-09-28 18:15:27.000 -0100858010DC4000,"the StoryTale",status-playable,playable,2022-09-03 13:00:25.000 -0100AA400A238000,"The Stretchers",status-playable;nvdec;UE4,playable,2022-09-16 15:40:58.000 -,"The Survivalists",status-playable,playable,2020-10-27 15:51:13.000 -010040D00B7CE000,"The Swindle",status-playable;nvdec,playable,2022-08-22 20:53:52.000 -,"The Swords of Ditto",slow;status-ingame,ingame,2020-12-06 00:13:12.000 -01009B300D76A000,"The Tiny Bang Story",status-playable,playable,2021-03-05 15:39:05.000 -0100C3300D8C4000,"The Touryst",status-ingame;crash,ingame,2023-08-22 01:32:38.000 -010047300EBA6000,"The Tower of Beatrice",status-playable,playable,2022-09-12 16:51:42.000 -010058000A576000,"The Town of Light",gpu;status-playable,playable,2022-09-21 12:51:34.000 -0100B0E0086F6000,"The Trail: Frontier Challenge",slow;status-playable,playable,2022-08-23 15:10:51.000 -0100EA100F516000,"The Turing Test",status-playable;nvdec,playable,2022-09-21 13:24:07.000 -010064E00ECBC000,"The Unicorn Princess",status-playable,playable,2022-09-16 16:20:56.000 -0100BCF00E970000,"The Vanishing of Ethan Carter",UE4;status-playable,playable,2021-06-09 17:14:47.000 -,"The VideoKid",nvdec;status-playable,playable,2021-01-06 09:28:24.000 -,"The Voice",services;status-menus,menus,2020-07-28 20:48:49.000 -010029200B6AA000,"The Walking Dead",status-playable,playable,2021-06-04 13:10:56.000 -010056E00B4F4000,"The Walking Dead: A New Frontier",status-playable,playable,2022-09-21 13:40:48.000 -,"The Walking Dead: Season Two",status-playable,playable,2020-08-09 12:57:06.000 -010060F00AA70000,"The Walking Dead: The Final Season",status-playable;online-broken,playable,2022-08-23 17:22:32.000 -,"The Wanderer: Frankenstein's Creature",status-playable,playable,2020-07-11 12:49:51.000 -01008B200FC6C000,"The Wardrobe: Even Better Edition",status-playable,playable,2022-09-16 19:14:55.000 -01003D100E9C6000,"The Witcher 3: Wild Hunt",status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51.000 -0100B1300FF08000,"The Wonderful 101: Remastered",slow;status-playable;nvdec,playable,2022-09-30 13:49:28.000 -0100C1500B82E000,"The World Ends With You -Final Remix-",status-playable;ldn-untested,playable,2022-07-09 01:11:21.000 -0100E6200D56E000,"The World Next Door",status-playable,playable,2022-09-21 14:15:23.000 -,"Thea: The Awakening",status-playable,playable,2021-01-18 15:08:47.000 -010024201834A000,"THEATRHYTHM FINAL BAR LINE",status-playable,playable,2023-02-19 19:58:57.000 -010081B01777C000,"THEATRHYTHM FINAL BAR LINE",status-ingame;Incomplete,ingame,2024-08-05 14:24:55.000 -01001C2010D08000,"They Bleed Pixels",gpu;status-ingame,ingame,2024-08-09 05:52:18.000 -,"They Came From the Sky",status-playable,playable,2020-06-12 16:38:19.000 -0100CE700F62A000,"Thief of Thieves",status-nothing;crash;loader-allocator,nothing,2021-11-03 07:16:30.000 -0100CE400E34E000,"Thief Simulator",status-playable,playable,2023-04-22 04:39:11.000 -01009BD003B36000,"Thimbleweed Park",status-playable,playable,2022-08-24 11:15:31.000 -0100F2300A5DA000,"Think of the Children",deadlock;status-menus,menus,2021-11-23 09:04:45.000 -0100066004D68000,"This Is the Police",status-playable,playable,2022-08-24 11:37:05.000 -01004C100A04C000,"This Is the Police 2",status-playable,playable,2022-08-24 11:49:17.000 -,"This Strange Realm of Mine",status-playable,playable,2020-08-28 12:07:24.000 -0100A8700BC2A000,"This War of Mine: Complete Edition",gpu;status-ingame;32-bit;nvdec,ingame,2022-08-24 12:00:44.000 -,"THOTH",status-playable,playable,2020-08-05 18:35:28.000 -0100E910103B4000,"Thronebreaker: The Witcher Tales",nvdec;status-playable,playable,2021-06-03 16:40:15.000 -01006F6002840000,"Thumper",gpu;status-ingame,ingame,2024-08-12 02:41:07.000 -01000AC011588000,"Thy Sword",status-ingame;crash,ingame,2022-09-30 16:43:14.000 -,"Tick Tock: A Tale for Two",status-menus,menus,2020-07-14 14:49:38.000 -0100B6D00C2DE000,"Tied Together",nvdec;status-playable,playable,2021-04-10 14:03:46.000 -,"Timber Tennis Versus",online;status-playable,playable,2020-10-03 17:07:15.000 -01004C500B698000,"Time Carnage",status-playable,playable,2021-06-16 17:57:28.000 -0100F770045CA000,"Time Recoil",status-playable,playable,2022-08-24 12:44:03.000 -0100DD300CF3A000,"Timespinner",gpu;status-ingame,ingame,2022-08-09 09:39:11.000 -0100393013A10000,"Timothy and the Mysterious Forest",gpu;slow;status-ingame,ingame,2021-06-02 00:42:11.000 -,"Tin & Kuna",status-playable,playable,2020-11-17 12:16:12.000 -,"Tiny Gladiators",status-playable,playable,2020-12-14 00:09:43.000 -010061A00AE64000,"Tiny Hands Adventure",status-playable,playable,2022-08-24 16:07:48.000 -010074800741A000,"TINY METAL",UE4;gpu;nvdec;status-ingame,ingame,2021-03-05 17:11:57.000 -01005D0011A40000,"Tiny Racer",status-playable,playable,2022-10-07 11:13:03.000 -010002401AE94000,"Tiny Thor",gpu;status-ingame,ingame,2024-07-26 08:37:35.000 -0100A73016576000,"Tinykin",gpu;status-ingame,ingame,2023-06-18 12:12:24.000 -0100FE801185E000,"Titan Glory",status-boots,boots,2022-10-07 11:36:40.000 -0100605008268000,"Titan Quest",status-playable;nvdec;online-broken,playable,2022-08-19 21:54:15.000 -,"Titans Pinball",slow;status-playable,playable,2020-06-09 16:53:52.000 -010019500DB1E000,"Tlicolity Eyes - twinkle showtime -",gpu;status-boots,boots,2021-05-29 19:43:44.000 -,"To the Moon",status-playable,playable,2021-03-20 15:33:38.000 -,"Toast Time: Smash Up!",crash;services;status-menus,menus,2020-04-03 12:26:59.000 -,"Toby: The Secret Mine",nvdec;status-playable,playable,2021-01-06 09:22:33.000 -,"ToeJam & Earl: Back in the Groove",status-playable,playable,2021-01-06 22:56:58.000 -0100B5E011920000,"TOHU",slow;status-playable,playable,2021-02-08 15:40:44.000 -,"Toki",nvdec;status-playable,playable,2021-01-06 19:59:23.000 -01003E500F962000,"TOKYO DARK - REMEMBRANCE -",nvdec;status-playable,playable,2021-06-10 20:09:49.000 -0100A9400C9C2000,"Tokyo Mirage Sessions #FE Encore",32-bit;status-playable;nvdec,playable,2022-07-07 09:41:07.000 -0100E2E00CB14000,"Tokyo School Life",status-playable,playable,2022-09-16 20:25:54.000 -010024601BB16000,"Tomb Raider I-III Remastered",gpu;status-ingame;opengl,ingame,2024-09-27 12:32:04.000 -0100D7F01E49C000,"Tomba! Special Edition",services-horizon;status-nothing,nothing,2024-09-15 21:59:54.000 -0100D400100F8000,"Tonight we Riot",status-playable,playable,2021-02-26 15:55:09.000 -0100CC00102B4000,"TONY HAWK'S™ PRO SKATER™ 1 + 2",gpu;status-ingame;Needs Update,ingame,2024-09-24 08:18:14.000 -,"Tools Up!",crash;status-ingame,ingame,2020-07-21 12:58:17.000 -01009EA00E2B8000,"Toon War",status-playable,playable,2021-06-11 16:41:53.000 -,"Torchlight 2",status-playable,playable,2020-07-27 14:18:37.000 -010075400DDB8000,"Torchlight III",status-playable;nvdec;online-broken;UE4,playable,2022-10-14 22:20:17.000 -01007AF011732000,"TORICKY-S",deadlock;status-menus,menus,2021-11-25 08:53:36.000 -,"Torn Tales - Rebound Edition",status-playable,playable,2020-11-01 14:11:59.000 -0100A64010D48000,"Total Arcade Racing",status-playable,playable,2022-11-12 15:12:48.000 -0100512010728000,"Totally Reliable Delivery Service",status-playable;online-broken,playable,2024-09-27 19:32:22.000 -01004E900B082000,"Touhou Genso Wanderer RELOADED",gpu;status-ingame;nvdec,ingame,2022-08-25 11:57:36.000 -,"Touhou Kobuto V: Burst Battle",status-playable,playable,2021-01-11 15:28:58.000 -,"Touhou Spell Bubble",status-playable,playable,2020-10-18 11:43:43.000 -,"Tower of Babel",status-playable,playable,2021-01-06 17:05:15.000 -,"Tower of Time",gpu;nvdec;status-ingame,ingame,2020-07-03 11:11:12.000 -,"TowerFall",status-playable,playable,2020-05-16 18:58:07.000 -,"Towertale",status-playable,playable,2020-10-15 13:56:58.000 -010049E00BA34000,"Townsmen - A Kingdom Rebuilt",status-playable;nvdec,playable,2022-10-14 22:48:59.000 -01009FF00A160000,"Toy Stunt Bike: Tiptop's Trials",UE4;status-playable,playable,2021-04-10 13:56:34.000 -0100192010F5A000,"Tracks - Toybox Edition",UE4;crash;status-nothing,nothing,2021-02-08 15:19:18.000 -0100BCA00843A000,"Trailblazers",status-playable,playable,2021-03-02 20:40:49.000 -010009F004E66000,"Transcripted",status-playable,playable,2022-08-25 12:13:11.000 -01005E500E528000,"TRANSFORMERS: BATTLEGROUNDS",online;status-playable,playable,2021-06-17 18:08:19.000 -,"Transistor",status-playable,playable,2020-10-22 11:28:02.000 -0100A8D010BFA000,"Travel Mosaics 2: Roman Holiday",status-playable,playable,2021-05-26 12:33:16.000 -0100102010BFC000,"Travel Mosaics 3: Tokyo Animated",status-playable,playable,2021-05-26 12:06:27.000 -010096D010BFE000,"Travel Mosaics 4: Adventures in Rio",status-playable,playable,2021-05-26 11:54:58.000 -01004C4010C00000,"Travel Mosaics 5: Waltzing Vienna",status-playable,playable,2021-05-26 11:49:35.000 -0100D520119D6000,"Travel Mosaics 6: Christmas Around the World",status-playable,playable,2021-05-26 00:52:47.000 -,"Travel Mosaics 7: Fantastic Berlin -",status-playable,playable,2021-05-22 18:37:34.000 -01007DB00A226000,"Travel Mosaics: A Paris Tour",status-playable,playable,2021-05-26 12:42:26.000 -010011600C946000,"Travis Strikes Again: No More Heroes",status-playable;nvdec;UE4,playable,2022-08-25 12:36:38.000 -,"Treadnauts",status-playable,playable,2021-01-10 14:57:41.000 -0100D7800E9E0000,"Trials of Mana",status-playable;UE4,playable,2022-09-30 21:50:37.000 -0100E1D00FBDE000,"Trials of Mana Demo",status-playable;nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02.000 -01003E800A102000,"Trials Rising",status-playable,playable,2024-02-11 01:36:39.000 -0100CC80140F8000,"TRIANGLE STRATEGY",gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37.000 -0100D9000A930000,"Trine",ldn-untested;nvdec;status-playable,playable,2021-06-03 11:28:15.000 -010064E00A932000,"Trine 2",nvdec;status-playable,playable,2021-06-03 11:45:20.000 -0100DEC00A934000,"Trine 3: The Artifacts of Power",ldn-untested;online;status-playable,playable,2021-06-03 12:01:24.000 -010055E00CA68000,"Trine 4: The Nightmare Prince",gpu;status-nothing,nothing,2025-01-07 05:47:46.000 -01002D7010A54000,"Trinity Trigger",status-ingame;crash,ingame,2023-03-03 03:09:09.000 -0100868013FFC000,"Trivial Pursuit Live! 2",status-boots,boots,2022-12-19 00:04:33.000 -0100F78002040000,"Troll and I",gpu;nvdec;status-ingame,ingame,2021-06-04 16:58:50.000 -,"Trollhunters: Defenders of Arcadia",gpu;nvdec;status-ingame,ingame,2020-11-30 13:27:09.000 -0100FBE0113CC000,"Tropico 6",status-playable;nvdec;UE4,playable,2022-10-14 23:21:03.000 -0100D06018DCA000,"Trouble Witches Final! Episode 01: Daughters of Amalgam",status-playable,playable,2024-04-08 15:08:11.000 -,"Troubleshooter",UE4;crash;status-nothing,nothing,2020-10-04 13:46:50.000 -,"Trover Saves the Universe",UE4;crash;status-nothing,nothing,2020-10-03 10:25:27.000 -0100E6300D448000,"Truberbrook",status-playable,playable,2021-06-04 17:08:00.000 -0100F2100AA5C000,"Truck & Logistics Simulator",status-playable,playable,2021-06-11 13:29:08.000 -0100CB50107BA000,"Truck Driver",status-playable;online-broken,playable,2022-10-20 17:42:33.000 -,"True Fear: Forsaken Souls - Part 1",nvdec;status-playable,playable,2020-12-15 21:39:52.000 -,"TT Isle of Man",nvdec;status-playable,playable,2020-06-22 12:25:13.000 -010000400F582000,"TT Isle of Man 2",gpu;status-ingame;nvdec;online-broken,ingame,2022-09-30 22:13:05.000 -,"TTV2",status-playable,playable,2020-11-27 13:21:36.000 -,"Tumblestone",status-playable,playable,2021-01-07 17:49:20.000 -010085500D5F6000,"Turok",gpu;status-ingame,ingame,2021-06-04 13:16:24.000 -0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;status-ingame;vulkan,ingame,2022-09-12 17:50:05.000 -,"Turrican Flashback - 01004B0130C8000",status-playable;audout,playable,2021-08-30 10:07:56.000 -,"TurtlePop: Journey to Freedom",status-playable,playable,2020-06-12 17:45:39.000 -0100047009742000,"Twin Robots: Ultimate Edition",status-playable;nvdec,playable,2022-08-25 14:24:03.000 -010031200E044000,"Two Point Hospital",status-ingame;crash;nvdec,ingame,2022-09-22 11:22:23.000 -,"TY the Tasmanian Tiger",32-bit;crash;nvdec;status-menus,menus,2020-12-17 21:15:00.000 -010073A00C4B2000,"Tyd wag vir Niemand",status-playable,playable,2021-03-02 13:39:53.000 -,"Type:Rider",status-playable,playable,2021-01-06 13:12:55.000 -,"UBERMOSH:SANTICIDE",status-playable,playable,2020-11-27 15:05:01.000 -,"Ubongo - Deluxe Edition",status-playable,playable,2021-02-04 21:15:01.000 -010079000B56C000,"UglyDolls: An Imperfect Adventure",status-playable;nvdec;UE4,playable,2022-08-25 14:42:16.000 -010048901295C000,"Ultimate Fishing Simulator",status-playable,playable,2021-06-16 18:38:23.000 -,"Ultimate Racing 2D",status-playable,playable,2020-08-05 17:27:09.000 -010045200A1C2000,"Ultimate Runner",status-playable,playable,2022-08-29 12:52:40.000 -01006B601117E000,"Ultimate Ski Jumping 2020",online;status-playable,playable,2021-03-02 20:54:11.000 -01002D4012222000,"Ultra Hat Dimension",services;audio;status-menus,menus,2021-11-18 09:05:20.000 -,"Ultra Hyperball",status-playable,playable,2021-01-06 10:09:55.000 -01007330027EE000,"Ultra Street Fighter II: The Final Challengers",status-playable;ldn-untested,playable,2021-11-25 07:54:58.000 -01006A300BA2C000,"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",status-playable;audout,playable,2023-05-04 17:25:23.000 -0100592005164000,"Unbox: Newbie's Adventure",status-playable;UE4,playable,2022-08-29 13:12:56.000 -01002D900C5E4000,"Uncanny Valley",nvdec;status-playable,playable,2021-06-04 13:28:45.000 -010076F011F54000,"Undead and Beyond",status-playable;nvdec,playable,2022-10-04 09:11:18.000 -01008F3013E4E000,"Under Leaves",status-playable,playable,2021-05-22 18:13:58.000 -010080B00AD66000,"Undertale",status-playable,playable,2022-08-31 17:31:46.000 -01008F80049C6000,"Unepic",status-playable,playable,2024-01-15 17:03:00.000 -,"UnExplored - Unlocked Edition",status-playable,playable,2021-01-06 10:02:16.000 -,"Unhatched",status-playable,playable,2020-12-11 12:11:09.000 -010069401ADB8000,"Unicorn Overlord",status-playable,playable,2024-09-27 14:04:32.000 -,"Unit 4",status-playable,playable,2020-12-16 18:54:13.000 -,"Unknown Fate",slow;status-ingame,ingame,2020-10-15 12:27:42.000 -,"Unlock the King",status-playable,playable,2020-09-01 13:58:27.000 -0100A3E011CB0000,"Unlock the King 2",status-playable,playable,2021-06-15 20:43:55.000 -01005AA00372A000,"UNO",status-playable;nvdec;ldn-untested,playable,2022-07-28 14:49:47.000 -0100E5D00CC0C000,"Unravel TWO",status-playable;nvdec,playable,2024-05-23 15:45:05.000 -,"Unruly Heroes",status-playable,playable,2021-01-07 18:09:31.000 -0100B410138C0000,"Unspottable",status-playable,playable,2022-10-25 19:28:49.000 -,"Untitled Goose Game",status-playable,playable,2020-09-26 13:18:06.000 -0100E49013190000,"Unto The End",gpu;status-ingame,ingame,2022-10-21 11:13:29.000 -,"Urban Flow",services;status-playable,playable,2020-07-05 12:51:47.000 -010054F014016000,"Urban Street Fighting",status-playable,playable,2021-02-20 19:16:36.000 -01001B10068EC000,"Urban Trial Playground",UE4;nvdec;online;status-playable,playable,2021-03-25 20:56:51.000 -0100A2500EB92000,"Urban Trial Tricky",status-playable;nvdec;UE4,playable,2022-12-06 13:07:56.000 -01007C0003AEC000,"Use Your Words",status-menus;nvdec;online-broken,menus,2022-08-29 17:22:10.000 -0100D4300EBF8000,"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",status-nothing;crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44.000 -010024200E00A000,"Uta no☆Prince-sama♪ Repeat Love",status-playable;nvdec,playable,2022-12-09 09:21:51.000 -,"Utopia 9 - A Volatile Vacation",nvdec;status-playable,playable,2020-12-16 17:06:42.000 -010064400B138000,"V-Rally 4",gpu;nvdec;status-ingame,ingame,2021-06-07 19:37:31.000 -0100A6700D66E000,"VA-11 HALL-A",status-playable,playable,2021-02-26 15:05:34.000 -,"Vaccine",nvdec;status-playable,playable,2021-01-06 01:02:07.000 -010089700F30C000,"Valfaris",status-playable,playable,2022-09-16 21:37:24.000 -0100CAF00B744000,"Valkyria Chronicles",status-ingame;32-bit;crash;nvdec,ingame,2022-11-23 20:03:32.000 -01005C600AC68000,"Valkyria Chronicles 4",audout;nvdec;status-playable,playable,2021-06-03 18:12:25.000 -0100FBD00B91E000,"Valkyria Chronicles 4 Demo",slow;status-ingame;demo,ingame,2022-08-29 20:39:07.000 -0100E0E00B108000,"Valley",status-playable;nvdec,playable,2022-09-28 19:27:58.000 -010089A0197E4000,"Vampire Survivors",status-ingame,ingame,2024-06-17 09:57:38.000 -01000BD00CE64000,"Vampyr",status-playable;nvdec;UE4,playable,2022-09-16 22:15:51.000 -01007C500D650000,"Vandals",status-playable,playable,2021-01-27 21:45:46.000 -010030F00CA1E000,"Vaporum",nvdec;status-playable,playable,2021-05-28 14:25:33.000 -010045C0109F2000,"VARIABLE BARRICADE NS",status-playable;nvdec,playable,2022-02-26 15:50:13.000 -0100FE200AF48000,"VASARA Collection",nvdec;status-playable,playable,2021-02-28 15:26:10.000 -,"Vasilis",status-playable,playable,2020-09-01 15:05:35.000 -01009CD003A0A000,"Vegas Party",status-playable,playable,2021-04-14 19:21:41.000 -010098400E39E000,"Vektor Wars",status-playable;online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46.000 -01003A8018E60000,"Vengeful Guardian: Moonrider",deadlock;status-boots,boots,2024-03-17 23:35:37.000 -010095B00DBC8000,"Venture Kid",crash;gpu;status-ingame,ingame,2021-04-18 16:33:17.000 -,"Vera Blanc: Full Moon",audio;status-playable,playable,2020-12-17 12:09:30.000 -0100379013A62000,"Very Very Valet",status-playable;nvdec,playable,2022-11-12 15:25:51.000 -01006C8014DDA000,"Very Very Valet Demo - 01006C8014DDA000",status-boots;crash;Needs Update;demo,boots,2022-11-12 15:26:13.000 -010057B00712C000,"Vesta",status-playable;nvdec,playable,2022-08-29 21:03:39.000 -0100E81007A06000,"Victor Vran Overkill Edition",gpu;deadlock;status-ingame;nvdec;opengl,ingame,2022-08-30 11:46:56.000 -01005880063AA000,"Violett",nvdec;status-playable,playable,2021-01-28 13:09:36.000 -010037900CB1C000,"Viviette",status-playable,playable,2021-06-11 15:33:40.000 -0100D010113A8000,"Void Bastards",status-playable,playable,2022-10-15 00:04:19.000 -0100FF7010E7E000,"void* tRrLM(); //Void Terrarium",gpu;status-ingame;Needs Update;regression,ingame,2023-02-10 01:13:25.000 -010078D0175EE000,"void* tRrLM2(); //Void Terrarium 2",status-playable,playable,2023-12-21 11:00:41.000 -,"Volgarr the Viking",status-playable,playable,2020-12-18 15:25:50.000 -0100A7900E79C000,"Volta-X",status-playable;online-broken,playable,2022-10-07 12:20:51.000 -01004D8007368000,"Vostok, Inc.",status-playable,playable,2021-01-27 17:43:59.000 -0100B1E0100A4000,"Voxel Galaxy",status-playable,playable,2022-09-28 22:45:02.000 -0100AFA011068000,"Voxel Pirates",status-playable,playable,2022-09-28 22:55:02.000 -0100BFB00D1F4000,"Voxel Sword",status-playable,playable,2022-08-30 14:57:27.000 -01004E90028A2000,"Vroom in the Night Sky",status-playable;Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29.000 -0100C7C00AE6C000,"VSR: Void Space Racing",status-playable,playable,2021-01-27 14:08:59.000 -,"VtM Coteries of New York",status-playable,playable,2020-10-04 14:55:22.000 -0100B130119D0000,"Waifu Uncovered",status-ingame;crash,ingame,2023-02-27 01:17:46.000 -,"Wanba Warriors",status-playable,playable,2020-10-04 17:56:22.000 -,"Wanderjahr TryAgainOrWalkAway",status-playable,playable,2020-12-16 09:46:04.000 -0100B27010436000,"Wanderlust Travel Stories",status-playable,playable,2021-04-07 16:09:12.000 -0100F8A00853C000,"Wandersong",nvdec;status-playable,playable,2021-06-04 15:33:34.000 -0100D67013910000,"Wanna Survive",status-playable,playable,2022-11-12 21:15:43.000 -01004FA01391A000,"War Of Stealth - assassin",status-playable,playable,2021-05-22 17:34:38.000 -010049500DE56000,"War Tech Fighters",status-playable;nvdec,playable,2022-09-16 22:29:31.000 -010084D00A134000,"War Theatre",gpu;status-ingame,ingame,2021-06-07 19:42:45.000 -0100B6B013B8A000,"War Truck Simulator",status-playable,playable,2021-01-31 11:22:54.000 -,"War-Torn Dreams",crash;status-nothing,nothing,2020-10-21 11:36:16.000 -,"WARBORN",status-playable,playable,2020-06-25 12:36:47.000 -010056901285A000,"Wardogs: Red's Return",status-playable,playable,2022-11-13 15:29:01.000 -01000F0002BB6000,"WarGroove",status-playable;online-broken,playable,2022-08-31 10:30:45.000 -0100C6000EEA8000,"Warhammer 40,000: Mechanicus",nvdec;status-playable,playable,2021-06-13 10:46:38.000 -0100E5600D7B2000,"Warhammer 40,000: Space Wolf",status-playable;online-broken,playable,2022-09-20 21:11:20.000 -010031201307A000,"Warhammer Age of Sigmar: Storm Ground",status-playable;nvdec;online-broken;UE4,playable,2022-11-13 15:46:14.000 -,"Warhammer Quest 2",status-playable,playable,2020-08-04 15:28:03.000 -0100563010E0C000,"WarioWare: Get It Together!",gpu;status-ingame;opengl-backend-bug,ingame,2024-04-23 01:04:56.000 -010045B018EC2000,"Warioware: Move IT!",status-playable,playable,2023-11-14 00:23:51.000 -,"Warlocks 2: God Slayers",status-playable,playable,2020-12-16 17:36:50.000 -,"Warp Shift",nvdec;status-playable,playable,2020-12-15 14:48:48.000 -,"Warparty",nvdec;status-playable,playable,2021-01-27 18:26:32.000 -010032700EAC4000,"WarriOrb",UE4;status-playable,playable,2021-06-17 15:45:14.000 -0100E8500AD58000,"WARRIORS OROCHI 4 ULTIMATE",status-playable;nvdec;online-broken,playable,2024-08-07 01:50:37.000 -,"Wartile Complete Edition",UE4;crash;gpu;status-menus,menus,2020-12-11 21:56:10.000 -010039A00BC64000,"Wasteland 2: Director's Cut",nvdec;status-playable,playable,2021-01-27 13:34:11.000 -,"Water Balloon Mania",status-playable,playable,2020-10-23 20:20:59.000 -0100BA200C378000,"Way of the Passive Fist",gpu;status-ingame,ingame,2021-02-26 21:07:06.000 -,"We should talk.",crash;status-nothing,nothing,2020-08-03 12:32:36.000 -,"Welcome to Hanwell",UE4;crash;status-boots,boots,2020-08-03 11:54:57.000 -0100D7F010B94000,"Welcome to Primrose Lake",status-playable,playable,2022-10-21 11:30:57.000 -,"Wenjia",status-playable,playable,2020-06-08 11:38:30.000 -010031B00A4E8000,"West of Loathing",status-playable,playable,2021-01-28 12:35:19.000 -010038900DFE0000,"What Remains of Edith Finch",slow;status-playable;UE4,playable,2022-08-31 19:57:59.000 -010033600ADE6000,"Wheel of Fortune [010033600ADE6000]",status-boots;crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24.000 -0100DFC00405E000,"Wheels of Aurelia",status-playable,playable,2021-01-27 21:59:25.000 -010027D011C9C000,"Where Angels Cry",gpu;status-ingame;nvdec,ingame,2022-09-30 22:24:47.000 -0100FDB0092B4000,"Where Are My Friends?",status-playable,playable,2022-09-21 14:39:26.000 -,"Where the Bees Make Honey",status-playable,playable,2020-07-15 12:40:49.000 -,"Whipsey and the Lost Atlas",status-playable,playable,2020-06-23 20:24:14.000 -010015A00AF1E000,"Whispering Willows",status-playable;nvdec,playable,2022-09-30 22:33:05.000 -,"Who Wants to Be a Millionaire?",crash;status-nothing,nothing,2020-12-11 20:22:42.000 -0100C7800CA06000,"Widget Satchel",status-playable,playable,2022-09-16 22:41:07.000 -0100CFC00A1D8000,"WILD GUNS Reloaded",status-playable,playable,2021-01-28 12:29:05.000 -010071F00D65A000,"Wilmot's Warehouse",audio;gpu;status-ingame,ingame,2021-06-02 17:24:32.000 -,"WINDJAMMERS",online;status-playable,playable,2020-10-13 11:24:25.000 -010059900BA3C000,"Windscape",status-playable,playable,2022-10-21 11:49:42.000 -,"Windstorm",UE4;gpu;nvdec;status-ingame,ingame,2020-12-22 13:17:48.000 -0100D6800CEAC000,"Windstorm - Ari's Arrival",UE4;status-playable,playable,2021-06-07 19:33:19.000 -,"Wing of Darkness - 010035B012F2000",status-playable;UE4,playable,2022-11-13 16:03:51.000 -0100A4A015FF0000,"Winter Games 2023",deadlock;status-menus,menus,2023-11-07 20:47:36.000 -010012A017F18800,"Witch On The Holy Night",status-playable,playable,2023-03-06 23:28:11.000 -0100454012E32000,"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",status-ingame;crash,ingame,2021-08-08 11:56:18.000 -01002FC00C6D0000,"Witch Thief",status-playable,playable,2021-01-27 18:16:07.000 -010061501904E000,"Witch's Garden",gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24.000 -,"Witcheye",status-playable,playable,2020-12-14 22:56:08.000 -0100522007AAA000,"Wizard of Legend",status-playable,playable,2021-06-07 12:20:46.000 -,"Wizards of Brandel",status-nothing,nothing,2020-10-14 15:52:33.000 -0100C7600E77E000,"Wizards: Wand of Epicosity",status-playable,playable,2022-10-07 12:32:06.000 -01009040091E0000,"Wolfenstein II The New Colossus",gpu;status-ingame,ingame,2024-04-05 05:39:46.000 -01003BD00CAAE000,"Wolfenstein: Youngblood",status-boots;online-broken,boots,2024-07-12 23:49:20.000 -,"Wonder Blade",status-playable,playable,2020-12-11 17:55:31.000 -0100B49016FF0000,"Wonder Boy Anniversary Collection",deadlock;status-nothing,nothing,2023-04-20 16:01:48.000 -0100EB2012E36000,"Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ]",status-nothing;crash,nothing,2021-11-03 08:45:06.000 -0100A6300150C000,"Wonder Boy: The Dragon's Trap",status-playable,playable,2021-06-25 04:53:21.000 -0100F5D00C812000,"Wondershot",status-playable,playable,2022-08-31 21:05:31.000 -,"Woodle Tree 2",gpu;slow;status-ingame,ingame,2020-06-04 18:44:00.000 -0100288012966000,"Woodsalt",status-playable,playable,2021-04-06 17:01:48.000 -,"Wordify",status-playable,playable,2020-10-03 09:01:07.000 -,"World Conqueror X",status-playable,playable,2020-12-22 16:10:29.000 -01008E9007064000,"World Neverland",status-playable,playable,2021-01-28 17:44:23.000 -,"World of Final Fantasy Maxima",status-playable,playable,2020-06-07 13:57:23.000 -010009E001D90000,"World of Goo",gpu;status-boots;32-bit;crash;regression,boots,2024-04-12 05:52:14.000 -010061F01DB7C800,"World of Goo 2",status-boots,boots,2024-08-08 22:52:49.000 -,"World Soccer Pinball",status-playable,playable,2021-01-06 00:37:02.000 -,"Worldend Syndrome",status-playable,playable,2021-01-03 14:16:32.000 -010000301025A000,"Worlds of Magic: Planar Conquest",status-playable,playable,2021-06-12 12:51:28.000 -01009CD012CC0000,"Worm Jazz",gpu;services;status-ingame;UE4;regression,ingame,2021-11-10 10:33:04.000 -01001AE005166000,"Worms W.M.D",gpu;status-boots;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59.000 -010037500C4DE000,"Worse Than Death",status-playable,playable,2021-06-11 16:05:40.000 -01006F100EB16000,"Woven",nvdec;status-playable,playable,2021-06-02 13:41:08.000 -010087800DCEA000,"WRC 8 FIA World Rally Championship",status-playable;nvdec,playable,2022-09-16 23:03:36.000 -01001A0011798000,"WRC 9 The Official Game",gpu;slow;status-ingame;nvdec,ingame,2022-10-25 19:47:39.000 -0100DC0012E48000,"Wreckfest",status-playable,playable,2023-02-12 16:13:00.000 -0100C5D00EDB8000,"Wreckin' Ball Adventure",status-playable;UE4,playable,2022-09-12 18:56:28.000 -010033700418A000,"Wulverblade",nvdec;status-playable,playable,2021-01-27 22:29:05.000 -01001C400482C000,"Wunderling",audio;status-ingame;crash,ingame,2022-09-10 13:20:12.000 -,"Wurroom",status-playable,playable,2020-10-07 22:46:21.000 -010081700EDF4000,"WWE 2K Battlegrounds",status-playable;nvdec;online-broken;UE4,playable,2022-10-07 12:44:40.000 -010009800203E000,"WWE 2K18",status-playable;nvdec,playable,2023-10-21 17:22:01.000 -,"X-Morph: Defense",status-playable,playable,2020-06-22 11:05:31.000 -0100D0B00FB74000,"XCOM 2 Collection",gpu;status-ingame;crash,ingame,2022-10-04 09:38:30.000 -0100CC9015360000,"XEL",gpu;status-ingame,ingame,2022-10-03 10:19:39.000 -0100E95004038000,"Xenoblade Chronicles 2",deadlock;status-ingame;amd-vendor-bug,ingame,2024-03-28 14:31:41.000 -0100C9F009F7A000,"Xenoblade Chronicles 2: Torna - The Golden Country",slow;status-playable;nvdec,playable,2023-01-28 16:47:28.000 -010074F013262000,"Xenoblade Chronicles 3",gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44.000 -0100FF500E34A000,"Xenoblade Chronicles Definitive Edition",status-playable;nvdec,playable,2024-05-04 20:12:41.000 -010028600BA16000,"Xenon Racer",status-playable;nvdec;UE4,playable,2022-08-31 22:05:30.000 -010064200C324000,"Xenon Valkyrie+",status-playable,playable,2021-06-07 20:25:53.000 -0100928005BD2000,"Xenoraid",status-playable,playable,2022-09-03 13:01:10.000 -01005B5009364000,"Xeodrifter",status-playable,playable,2022-09-03 13:18:39.000 -01006FB00DB02000,"Yaga",status-playable;nvdec,playable,2022-09-16 23:17:17.000 -,"YesterMorrow",crash;status-ingame,ingame,2020-12-17 17:15:25.000 -,"Yet Another Zombie Defense HD",status-playable,playable,2021-01-06 00:18:39.000 -,"YGGDRA UNION We’ll Never Fight Alone",status-playable,playable,2020-04-03 02:20:47.000 -0100634008266000,"YIIK: A Postmodern RPG",status-playable,playable,2021-01-28 13:38:37.000 -0100C0000CEEA000,"Yo kai watch 1 for Nintendo Switch",gpu;status-ingame;opengl,ingame,2024-05-28 11:11:49.000 -010086C00AF7C000,"Yo-Kai Watch 4++",status-playable,playable,2024-06-18 20:21:44.000 -010002D00632E000,"Yoku's Island Express",status-playable;nvdec,playable,2022-09-03 13:59:02.000 -0100F47016F26000,"Yomawari 3",status-playable,playable,2022-05-10 08:26:51.000 -010012F00B6F2000,"Yomawari: The Long Night Collection",status-playable,playable,2022-09-03 14:36:59.000 -0100CC600ABB2000,"Yonder: The Cloud Catcher Chronicles",status-playable,playable,2021-01-28 14:06:25.000 -0100BE50042F6000,"Yono and the Celestial Elephants",status-playable,playable,2021-01-28 18:23:58.000 -0100F110029C8000,"Yooka-Laylee",status-playable,playable,2021-01-28 14:21:45.000 -010022F00DA66000,"Yooka-Laylee and the Impossible Lair",status-playable,playable,2021-03-05 17:32:21.000 -01006000040C2000,"Yoshi's Crafted World",gpu;status-ingame;audout,ingame,2021-08-30 13:25:51.000 -,"Yoshi's Crafted World Demo Version",gpu;status-boots;status-ingame,boots,2020-12-16 14:57:40.000 -,"Yoshiwara Higanbana Kuon no Chigiri",nvdec;status-playable,playable,2020-10-17 19:14:46.000 -01003A400C3DA800,"YouTube",status-playable,playable,2024-06-08 05:24:10.000 -00100A7700CCAA40,"Youtubers Life00",status-playable;nvdec,playable,2022-09-03 14:56:19.000 -0100E390124D8000,"Ys IX: Monstrum Nox",status-playable,playable,2022-06-12 04:14:42.000 -0100F90010882000,"Ys Origin",status-playable;nvdec,playable,2024-04-17 05:07:33.000 -01007F200B0C0000,"Ys VIII: Lacrimosa of Dana",status-playable;nvdec,playable,2023-08-05 09:26:41.000 -010022400BE5A000,"Yu-Gi-Oh! Legacy of the Duelist: Link Evolution!",status-playable,playable,2024-09-27 21:48:43.000 -01002D60188DE000,"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",status-ingame;crash,ingame,2023-03-17 01:54:01.000 -010037D00DBDC000,"YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD.",nvdec;status-playable,playable,2021-01-26 17:03:52.000 -0100B56011502000,"Yumeutsutsu Re:After",status-playable,playable,2022-11-20 16:09:06.000 -,"Yunohana Spring! - Mellow Times -",audio;crash;status-menus,menus,2020-09-27 19:27:40.000 -,"Yuppie Psycho: Executive Edition",crash;status-ingame,ingame,2020-12-11 10:37:06.000 -0100FC900963E000,"Yuri",status-playable,playable,2021-06-11 13:08:50.000 -010092400A678000,"Zaccaria Pinball",status-playable;online-broken,playable,2022-09-03 15:44:28.000 -,"Zarvot - 0100E7900C40000",status-playable,playable,2021-01-28 13:51:36.000 -,"ZenChess",status-playable,playable,2020-07-01 22:28:27.000 -,"Zenge",status-playable,playable,2020-10-22 13:23:57.000 -0100057011E50000,"Zengeon",services-horizon;status-boots;crash,boots,2024-04-29 15:43:07.000 -0100AAC00E692000,"Zenith",status-playable,playable,2022-09-17 09:57:02.000 -,"ZERO GUNNER 2",status-playable,playable,2021-01-04 20:17:14.000 -01004B001058C000,"Zero Strain",services;status-menus;UE4,menus,2021-11-10 07:48:32.000 -,"Zettai kaikyu gakuen",gpu;nvdec;status-ingame,ingame,2020-08-25 15:15:54.000 -0100D7B013DD0000,"Ziggy The Chaser",status-playable,playable,2021-02-04 20:34:27.000 -010086700EF16000,"ZikSquare",gpu;status-ingame,ingame,2021-11-06 02:02:48.000 -010069C0123D8000,"Zoids Wild Blast Unleashed",status-playable;nvdec,playable,2022-10-15 11:26:59.000 -,"Zombie Army Trilogy",ldn-untested;online;status-playable,playable,2020-12-16 12:02:28.000 -,"Zombie Driver",nvdec;status-playable,playable,2020-12-14 23:15:10.000 -,"ZOMBIE GOLD RUSH",online;status-playable,playable,2020-09-24 12:56:08.000 -,"Zombie's Cool",status-playable,playable,2020-12-17 12:41:26.000 -01000E5800D32C00,"Zombieland: Double Tap - Road Trip0",status-playable,playable,2022-09-17 10:08:45.000 -,"Zombillie",status-playable,playable,2020-07-23 17:42:23.000 -01001EE00A6B0000,"Zotrix: Solar Division",status-playable,playable,2021-06-07 20:34:05.000 -,"この世の果てで恋を唄う少女YU-NO",audio;status-ingame,ingame,2021-01-22 07:00:16.000 -,"スーパーファミコン Nintendo Switch Online",slow;status-ingame,ingame,2020-03-14 05:48:38.000 -01000BB01CB8A000,"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",status-nothing,nothing,2024-09-28 07:03:14.000 -010065500B218000,"メモリーズオフ - Innocent Fille",status-playable,playable,2022-12-02 17:36:48.000 -010032400E700000,"二ノ国 白き聖灰の女王",services;status-menus;32-bit,menus,2023-04-16 17:11:06.000 -0100F3100DA46000,"初音ミク Project DIVA MEGA39's",audio;status-playable;loader-allocator,playable,2022-07-29 11:45:52.000 -0100BF401AF9C000,"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",slow;status-playable,playable,2023-12-31 14:37:17.000 -0100AFA01750C000,"死神と少女/Shinigami to Shoujo",gpu;status-ingame;Incomplete,ingame,2024-03-22 01:06:45.000 -01001BA01EBFC000,"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",services-horizon;status-nothing,nothing,2024-09-28 12:22:55.000 -0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",status-ingame;crash,ingame,2023-04-25 19:43:52.000 -01009FB016286000,"索尼克:起源 / Sonic Origins",status-ingame;crash,ingame,2024-06-02 07:20:15.000 -0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",status-ingame;crash,ingame,2024-02-12 20:58:31.000 -010064801a01c000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",status-nothing;crash,nothing,2023-10-30 22:37:40.000 -010005501E68C000,"逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection)",status-playable,playable,2024-09-19 16:38:05.000 -010020D01B890000,"逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy)",status-playable,playable,2024-06-21 21:54:27.000 -0100309016E7A000,"鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",status-playable;UE4,playable,2024-08-08 04:51:49.000 \ No newline at end of file +"title_id","game_name","labels","status","last_updated" +010099F00EF3E000,"-KLAUS-",nvdec;status-playable,playable,2020-06-27 13:27:30.000 +0100BA9014A02000,".hack//G.U. Last Recode",deadlock;status-boots,boots,2022-03-12 19:15:47.000 +010098800C4B0000,"'n Verlore Verstand",slow;status-ingame,ingame,2020-12-10 18:00:28.000 +01009A500E3DA000,"'n Verlore Verstand - Demo",status-playable,playable,2021-02-09 00:13:32.000 +0100A5D01174C000,"/Connection Haunted ",slow;status-playable,playable,2020-12-10 18:57:14.000 +01001E500F7FC000,"#Funtime",status-playable,playable,2020-12-10 16:54:35.000 +01000E50134A4000,"#Halloween, Super Puzzles Dream",nvdec;status-playable,playable,2020-12-10 20:43:58.000 +01004D100C510000,"#KILLALLZOMBIES",slow;status-playable,playable,2020-12-16 01:50:25.000 +0100325012C12000,"#NoLimitFantasy, Super Puzzles Dream",nvdec;status-playable,playable,2020-12-12 17:21:32.000 +01005D400E5C8000,"#RaceDieRun",status-playable,playable,2020-07-04 20:23:16.000 +01003DB011AE8000,"#womenUp, Super Puzzles Dream",status-playable,playable,2020-12-12 16:57:25.000 +0100D87012A14000,"#womenUp, Super Puzzles Dream Demo",nvdec;status-playable,playable,2021-02-09 00:03:31.000 +01000320000CC000,"1-2-Switch™",services;status-playable,playable,2022-02-18 14:44:03.000 +01004D1007926000,"10 Second Run RETURNS",gpu;status-ingame,ingame,2022-07-17 13:06:18.000 +0100DC000A472000,"10 Second Run RETURNS Demo",gpu;status-ingame,ingame,2021-02-09 00:17:18.000 +0100D82015774000,"112 Operator",status-playable;nvdec,playable,2022-11-13 22:42:50.000 +010051E012302000,"112th Seed",status-playable,playable,2020-10-03 10:32:38.000 +01007F600D1B8000,"12 is Better Than 6",status-playable,playable,2021-02-22 16:10:12.000 +0100B1A010014000,"12 Labours of Hercules II: The Cretan Bull",cpu;status-nothing;32-bit;crash,nothing,2022-12-07 13:43:10.000 +0100A840047C2000,"12 orbits",status-playable,playable,2020-05-28 16:13:26.000 +01003FC01670C000,"13 Sentinels: Aegis Rim",slow;status-ingame,ingame,2024-06-10 20:33:38.000 +0100C54015002000,"13 Sentinels: Aegis Rim Demo",status-playable;demo,playable,2022-04-13 14:15:48.000 +01007E600EEE6000,"140",status-playable,playable,2020-08-05 20:01:33.000 +0100B94013D28000,"16-Bit Soccer Demo",status-playable,playable,2021-02-09 00:23:07.000 +01005CA0099AA000,"1917 - The Alien Invasion DX",status-playable,playable,2021-01-08 22:11:16.000 +0100829010F4A000,"1971 Project Helios",status-playable,playable,2021-04-14 13:50:19.000 +0100D1000B18C000,"1979 Revolution: Black Friday",nvdec;status-playable,playable,2021-02-21 21:03:43.000 +01007BB00FC8A000,"198X",status-playable,playable,2020-08-07 13:24:38.000 +010075601150A000,"1993 Shenandoah",status-playable,playable,2020-10-24 13:55:42.000 +0100148012550000,"1993 Shenandoah Demo",status-playable,playable,2021-02-09 00:43:43.000 +010096500EA94000,"2048 Battles",status-playable,playable,2020-12-12 14:21:25.000 +010024C0067C4000,"2064: Read Only Memories INTEGRAL",deadlock;status-menus,menus,2020-05-28 16:53:58.000 +0100749009844000,"20XX",gpu;status-ingame,ingame,2023-08-14 09:41:44.000 +01007550131EE000,"2URVIVE",status-playable,playable,2022-11-17 13:49:37.000 +0100E20012886000,"2weistein – The Curse of the Red Dragon",status-playable;nvdec;UE4,playable,2022-11-18 14:47:07.000 +0100DAC013D0A000,"30 in 1 game collection vol. 2",status-playable;online-broken,playable,2022-10-15 17:22:27.000 +010056D00E234000,"30-in-1 Game Collection",status-playable;online-broken,playable,2022-10-15 17:47:09.000 +0100FB5010D2E000,"3000th Duel",status-playable,playable,2022-09-21 17:12:08.000 +01003670066DE000,"36 Fragments of Midnight",status-playable,playable,2020-05-28 15:12:59.000 +0100AF400C4CE000,"39 Days to Mars",status-playable,playable,2021-02-21 22:12:46.000 +010010C013F2A000,"3D Arcade Fishing",status-playable,playable,2022-10-25 21:50:51.000 +01006DA00707C000,"3D MiniGolf",status-playable,playable,2021-01-06 09:22:11.000 +01006890126E4000,"4x4 Dirt Track",status-playable,playable,2020-12-12 21:41:42.000 +010010100FF14000,"60 Parsecs!",status-playable,playable,2022-09-17 11:01:17.000 +0100969005E98000,"60 Seconds!",services;status-ingame,ingame,2021-11-30 01:04:14.000 +0100ECF008474000,"6180 the moon",status-playable,playable,2020-05-28 15:39:24.000 +0100EFE00E964000,"64.0",status-playable,playable,2020-12-12 21:31:58.000 +0100DA900B67A000,"7 Billion Humans",32-bit;status-playable,playable,2020-12-17 21:04:58.000 +01004B200DF76000,"7th Sector",nvdec;status-playable,playable,2020-08-10 14:22:14.000 +0100E9F00B882000,"8-BIT ADV STEINS;GATE",audio;status-ingame,ingame,2020-01-12 15:05:06.000 +0100B0700E944000,"80 DAYS",status-playable,playable,2020-06-22 21:43:01.000 +01006B1011B9E000,"80's OVERDRIVE",status-playable,playable,2020-10-16 14:33:32.000 +010006A0042F0000,"88 Heroes - 98 Heroes Edition",status-playable,playable,2020-05-28 14:13:02.000 +010005E00E2BC000,"9 Monkeys of Shaolin",UE4;gpu;slow;status-ingame,ingame,2020-11-17 11:58:43.000 +0100C5F012E3E000,"9 Monkeys of Shaolin Demo",UE4;gpu;nvdec;status-ingame,ingame,2021-02-09 01:03:30.000 +01000360107BC000,"911 Operator Deluxe Edition",status-playable,playable,2020-07-14 13:57:44.000 +0100B2C00682E000,"99Vidas - Definitive Edition",online;status-playable,playable,2020-10-29 13:00:40.000 +010023500C2F0000,"99Vidas Demo",status-playable,playable,2021-02-09 12:51:31.000 +0100DB00117BA000,"9th Dawn III",status-playable,playable,2020-12-12 22:27:27.000 +010096A00CC80000,"A Ch'ti Bundle",status-playable;nvdec,playable,2022-10-04 12:48:44.000 +010021D00D53E000,"A Dark Room",gpu;status-ingame,ingame,2020-12-14 16:14:28.000 +010026B006802000,"A Duel Hand Disaster: Trackher",status-playable;nvdec;online-working,playable,2022-09-04 14:24:55.000 +0100582012B90000,"A Duel Hand Disaster: Trackher DEMO",crash;demo;nvdec;status-ingame,ingame,2021-03-24 18:45:27.000 +01006CE0134E6000,"A Frog Game",status-playable,playable,2020-12-14 16:09:53.000 +010056E00853A000,"A Hat in Time",status-playable,playable,2024-06-25 19:52:44.000 +01009E1011EC4000,"A HERO AND A GARDEN",status-playable,playable,2022-12-05 16:37:47.000 +01005EF00CFDA000,"A Knight's Quest",status-playable;UE4,playable,2022-09-12 20:44:20.000 +01008DD006C52000,"A Magical High School Girl",status-playable,playable,2022-07-19 14:40:50.000 +01004890117B2000,"A Short Hike",status-playable,playable,2020-10-15 00:19:58.000 +0100F0901006C000,"A Sound Plan",crash;status-boots,boots,2020-12-14 16:46:21.000 +01007DD011C4A000,"A Summer with the Shiba Inu",status-playable,playable,2021-06-10 20:51:16.000 +0100A3E010E56000,"A-Train: All Aboard! Tourism",nvdec;status-playable,playable,2021-04-06 17:48:19.000 +010097A00CC0A000,"Aaero: Complete Edition",status-playable;nvdec,playable,2022-07-19 14:49:55.000 +0100EFC010398000,"Aborigenus",status-playable,playable,2020-08-05 19:47:24.000 +0100A5B010A66000,"Absolute Drift",status-playable,playable,2020-12-10 14:02:44.000 +0100C1300BBC6000,"ABZÛ",status-playable;UE4,playable,2022-07-19 15:02:52.000 +01003C400871E000,"ACA NEOGEO 2020 SUPER BASEBALL",online;status-playable,playable,2021-04-12 13:23:51.000 +0100FC000AFC6000,"ACA NEOGEO 3 COUNT BOUT",online;status-playable,playable,2021-04-12 13:16:42.000 +0100AC40038F4000,"ACA NEOGEO AERO FIGHTERS 2",online;status-playable,playable,2021-04-08 15:44:09.000 +0100B91008780000,"ACA NEOGEO AERO FIGHTERS 3",online;status-playable,playable,2021-04-12 13:11:17.000 +0100B4800AFBA000,"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",online;status-playable,playable,2021-04-01 22:48:01.000 +01003FE00A2F6000,"ACA NEOGEO BASEBALL STARS PROFESSIONAL",online;status-playable,playable,2021-04-01 21:23:05.000 +0100DFC003398000,"ACA NEOGEO BLAZING STAR",crash;services;status-menus,menus,2020-05-26 17:29:02.000 +0100D2400AFB0000,"ACA NEOGEO CROSSED SWORDS",online;status-playable,playable,2021-04-01 20:42:59.000 +0100EE6002B48000,"ACA NEOGEO FATAL FURY",online;status-playable,playable,2021-04-01 20:36:23.000 +0100EEA00AFB2000,"ACA NEOGEO FOOTBALL FRENZY",status-playable,playable,2021-03-29 20:12:12.000 +0100CB2001DB8000,"ACA NEOGEO GAROU: MARK OF THE WOLVES",online;status-playable,playable,2021-04-01 20:31:10.000 +01005D700A2F8000,"ACA NEOGEO GHOST PILOTS",online;status-playable,playable,2021-04-01 20:26:45.000 +01000D10038E6000,"ACA NEOGEO LAST RESORT",online;status-playable,playable,2021-04-01 19:51:22.000 +0100A2900AFA4000,"ACA NEOGEO LEAGUE BOWLING",crash;services;status-menus,menus,2020-05-26 17:11:04.000 +0100A050038F2000,"ACA NEOGEO MAGICAL DROP II",crash;services;status-menus,menus,2020-05-26 16:48:24.000 +01007920038F6000,"ACA NEOGEO MAGICIAN LORD",online;status-playable,playable,2021-04-01 19:33:26.000 +0100EBE002B3E000,"ACA NEOGEO METAL SLUG",status-playable,playable,2021-02-21 13:56:48.000 +010086300486E000,"ACA NEOGEO METAL SLUG 2",online;status-playable,playable,2021-04-01 19:25:52.000 +0100BA8001DC6000,"ACA NEOGEO METAL SLUG 3",crash;services;status-menus,menus,2020-05-26 16:32:45.000 +01009CE00AFAE000,"ACA NEOGEO METAL SLUG 4",online;status-playable,playable,2021-04-01 18:12:18.000 +01008FD004DB6000,"ACA NEOGEO METAL SLUG X",crash;services;status-menus,menus,2020-05-26 14:07:20.000 +010038F00AFA0000,"ACA NEOGEO Money Puzzle Exchanger",online;status-playable,playable,2021-04-01 17:59:56.000 +01002E70032E8000,"ACA NEOGEO NEO TURF MASTERS",status-playable,playable,2021-02-21 15:12:01.000 +010052A00A306000,"ACA NEOGEO NINJA COMBAT",status-playable,playable,2021-03-29 21:17:28.000 +01007E800AFB6000,"ACA NEOGEO NINJA COMMANDO",online;status-playable,playable,2021-04-01 17:28:18.000 +01003A5001DBA000,"ACA NEOGEO OVER TOP",status-playable,playable,2021-02-21 13:16:25.000 +010088500878C000,"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",online;status-playable,playable,2021-04-01 17:18:27.000 +01005C9002B42000,"ACA NEOGEO SAMURAI SHODOWN",online;status-playable,playable,2021-04-01 17:11:35.000 +010047F001DBC000,"ACA NEOGEO SAMURAI SHODOWN IV",online;status-playable,playable,2021-04-12 12:58:54.000 +010049F00AFE8000,"ACA NEOGEO SAMURAI SHODOWN V SPECIAL",online;status-playable,playable,2021-04-10 18:07:13.000 +01009B300872A000,"ACA NEOGEO SENGOKU 2",online;status-playable,playable,2021-04-10 17:36:44.000 +01008D000877C000,"ACA NEOGEO SENGOKU 3",online;status-playable,playable,2021-04-10 16:11:53.000 +01008A9001DC2000,"ACA NEOGEO SHOCK TROOPERS",crash;services;status-menus,menus,2020-05-26 15:29:34.000 +01007D1004DBA000,"ACA NEOGEO SPIN MASTER",online;status-playable,playable,2021-04-10 15:50:19.000 +010055A00A300000,"ACA NEOGEO SUPER SIDEKICKS 2",online;status-playable,playable,2021-04-10 16:05:58.000 +0100A4D00A308000,"ACA NEOGEO SUPER SIDEKICKS 3 : THE NEXT GLORY",online;status-playable,playable,2021-04-10 15:39:22.000 +0100EB2001DCC000,"ACA NEOGEO THE KING OF FIGHTERS '94",crash;services;status-menus,menus,2020-05-26 15:03:44.000 +01009DC001DB6000,"ACA NEOGEO THE KING OF FIGHTERS '95",status-playable,playable,2021-03-29 20:27:35.000 +01006F0004FB4000,"ACA NEOGEO THE KING OF FIGHTERS '96",online;status-playable,playable,2021-04-10 14:49:10.000 +0100170008728000,"ACA NEOGEO THE KING OF FIGHTERS '97",online;status-playable,playable,2021-04-10 14:43:27.000 +0100B42001DB4000,"ACA NEOGEO THE KING OF FIGHTERS '98",crash;services;status-menus,menus,2020-05-26 14:54:20.000 +0100583001DCA000,"ACA NEOGEO THE KING OF FIGHTERS '99",online;status-playable,playable,2021-04-10 14:36:56.000 +0100B97002B44000,"ACA NEOGEO THE KING OF FIGHTERS 2000",online;status-playable,playable,2021-04-10 15:24:35.000 +010048200AFC2000,"ACA NEOGEO THE KING OF FIGHTERS 2001",online;status-playable,playable,2021-04-10 15:16:23.000 +0100CFD00AFDE000,"ACA NEOGEO THE KING OF FIGHTERS 2002",online;status-playable,playable,2021-04-10 15:01:55.000 +0100EF100AFE6000,"ACA NEOGEO THE KING OF FIGHTERS 2003",online;status-playable,playable,2021-04-10 14:54:31.000 +0100699008792000,"ACA NEOGEO THE LAST BLADE 2",online;status-playable,playable,2021-04-10 14:31:54.000 +0100F7F00AFA2000,"ACA NEOGEO THE SUPER SPY",online;status-playable,playable,2021-04-10 14:26:33.000 +0100CEF001DC0000,"ACA NEOGEO WAKU WAKU 7",online;status-playable,playable,2021-04-10 14:20:52.000 +01009D4001DC4000,"ACA NEOGEO WORLD HEROES PERFECT",crash;services;status-menus,menus,2020-05-26 14:14:36.000 +01002E700AFC4000,"ACA NEOGEO ZUPAPA!",online;status-playable,playable,2021-03-25 20:07:33.000 +0100A9900CB5C000,"Access Denied",status-playable,playable,2022-07-19 15:25:10.000 +01007C50132C8000,"Ace Angler: Fishing Spirits",status-menus;crash,menus,2023-03-03 03:21:39.000 +010005501E68C000,"Ace Attorney Investigations Collection",status-playable,playable,2024-09-19 16:38:05.000 +010033401E68E000,"Ace Attorney Investigations Collection DEMO",status-playable,playable,2024-09-07 06:16:42.000 +010039301B7E0000,"Ace Combat 7 - Skies Unknown Deluxe Edition",gpu;status-ingame;UE4,ingame,2024-09-27 14:31:43.000 +0100FF1004D56000,"Ace of Seafood",status-playable,playable,2022-07-19 15:32:25.000 +0100B28003440000,"Aces of the Luftwaffe - Squadron",nvdec;slow;status-playable,playable,2020-05-27 12:29:42.000 +010054300D822000,"Aces of the Luftwaffe - Squadron Demo",nvdec;status-playable,playable,2021-02-09 13:12:28.000 +010079B00B3F4000,"Achtung! Cthulhu Tactics",status-playable,playable,2020-12-14 18:40:27.000 +0100DBC0081A4000,"ACORN Tactics",status-playable,playable,2021-02-22 12:57:40.000 +010043C010AEA000,"Across the Grooves",status-playable,playable,2020-06-27 12:29:51.000 +010039A010DA0000,"Active Neurons - Puzzle game",status-playable,playable,2021-01-27 21:31:21.000 +01000D1011EF0000,"Active Neurons 2",status-playable,playable,2022-10-07 16:21:42.000 +010031C0122B0000,"Active Neurons 2 Demo",status-playable,playable,2021-02-09 13:40:21.000 +0100EE1013E12000,"Active Neurons 3 - Wonders Of The World",status-playable,playable,2021-03-24 12:20:20.000 +0100CD40104DE000,"Actual Sunlight",gpu;status-ingame,ingame,2020-12-14 17:18:41.000 +0100C0C0040E4000,"Adam's Venture™: Origins",status-playable,playable,2021-03-04 18:43:57.000 +010029700EB76000,"Adrenaline Rush - Miami Drive",status-playable,playable,2020-12-12 22:49:50.000 +0100300012F2A000,"Advance Wars™ 1+2: Re-Boot Camp",status-playable,playable,2024-01-30 18:19:44.000 +010014B0130F2000,"Adventure Llama",status-playable,playable,2020-12-14 19:32:24.000 +0100C990102A0000,"Adventure Pinball Bundle",slow;status-playable,playable,2020-12-14 20:31:53.000 +0100C4E004406000,"Adventure Time: Pirates of the Enchiridion",status-playable;nvdec,playable,2022-07-21 21:49:01.000 +010021F00C1C0000,"Adventures of Bertram Fiddle Episode 2: A Bleaker Predicklement",nvdec;status-playable,playable,2021-02-22 14:56:37.000 +010072601233C000,"Adventures of Chris",status-playable,playable,2020-12-12 23:00:02.000 +0100A0A0136E8000,"Adventures of Chris Demo",status-playable,playable,2021-02-09 13:49:21.000 +01002B5012004000,"Adventures of Pip",nvdec;status-playable,playable,2020-12-12 22:11:55.000 +01008C901266E000,"ADVERSE",UE4;status-playable,playable,2021-04-26 14:32:51.000 +01008E6006502000,"Aegis Defenders",status-playable,playable,2021-02-22 13:29:33.000 +010064500AF72000,"Aegis Defenders demo",status-playable,playable,2021-02-09 14:04:17.000 +010001C011354000,"Aeolis Tournament",online;status-playable,playable,2020-12-12 22:02:14.000 +01006710122CE000,"Aeolis Tournament Demo",nvdec;status-playable,playable,2021-02-09 14:22:30.000 +0100A0400DDE0000,"AER Memories of Old",nvdec;status-playable,playable,2021-03-05 18:43:43.000 +0100E9B013D4A000,"Aerial_Knight's Never Yield",status-playable,playable,2022-10-25 22:05:00.000 +0100087012810000,"Aery - Broken Memories",status-playable,playable,2022-10-04 13:11:52.000 +01000A8015390000,"Aery - Calm Mind",status-playable,playable,2022-11-14 14:26:58.000 +0100875011D0C000,"Aery - Little Bird Adventure",status-playable,playable,2021-03-07 15:25:51.000 +010018E012914000,"Aery - Sky Castle",status-playable,playable,2022-10-21 17:58:49.000 +0100DF8014056000,"Aery – A Journey Beyond Time",status-playable,playable,2021-04-05 15:52:25.000 +01006C40086EA000,"AeternoBlade",nvdec;status-playable,playable,2020-12-14 20:06:48.000 +0100B1C00949A000,"AeternoBlade Demo",nvdec;status-playable,playable,2021-02-09 14:39:26.000 +01009D100EA28000,"AeternoBlade II",status-playable;online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18.000 +,"AeternoBlade II Demo Version",gpu;nvdec;status-ingame,ingame,2021-02-09 15:10:19.000 +01001B400D334000,"AFL Evolution 2",slow;status-playable;online-broken;UE4,playable,2022-12-07 12:45:56.000 +0100DB100BBCE000,"Afterparty",status-playable,playable,2022-09-22 12:23:19.000 +010087C011C4E000,"Agatha Christie - The ABC Murders",status-playable,playable,2020-10-27 17:08:23.000 +010093600A60C000,"Agatha Knife",status-playable,playable,2020-05-28 12:37:58.000 +010005400A45E000,"Agent A: A puzzle in disguise",status-playable,playable,2020-11-16 22:53:27.000 +01008E8012C02000,"Agent A: A puzzle in disguise (Demo)",status-playable,playable,2021-02-09 18:30:41.000 +0100E4700E040000,"Ages of Mages: The last keeper",status-playable;vulkan-backend-bug,playable,2022-10-04 11:44:05.000 +010004D00A9C0000,"Aggelos",gpu;status-ingame,ingame,2023-02-19 13:24:23.000 +010072600D21C000,"Agony",UE4;crash;status-boots,boots,2020-07-10 16:21:18.000 +010089B00D09C000,"AI: THE SOMNIUM FILES",status-playable;nvdec,playable,2022-09-04 14:45:06.000 +0100C1700FB34000,"AI: THE SOMNIUM FILES Demo",nvdec;status-playable,playable,2021-02-10 12:52:33.000 +01006E8011C1E000,"Ailment",status-playable,playable,2020-12-12 22:30:41.000 +0100C7600C7D6000,"Air Conflicts: Pacific Carriers",status-playable,playable,2021-01-04 10:52:50.000 +010005A00A4F4000,"Air Hockey",status-playable,playable,2020-05-28 16:44:37.000 +0100C9E00F54C000,"Air Missions: HIND",status-playable,playable,2020-12-13 10:16:45.000 +0100E95011FDC000,"Aircraft Evolution",nvdec;status-playable,playable,2021-06-14 13:30:18.000 +010010A00DB72000,"Airfield Mania Demo",services;status-boots;demo,boots,2022-04-10 03:43:02.000 +01003DD00BFEE000,"Airheart - Tales of broken Wings",status-playable,playable,2021-02-26 15:20:27.000 +01007F100DE52000,"Akane",status-playable;nvdec,playable,2022-07-21 00:12:18.000 +01009A800F0C8000,"Akash: Path of the Five",gpu;nvdec;status-ingame,ingame,2020-12-14 22:33:12.000 +010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",status-playable,playable,2021-02-22 14:39:35.000 +0100D4C00EE0C000,"Akuarium",slow;status-playable,playable,2020-12-12 23:43:36.000 +010026E00FEBE000,"Akuto: Showdown",status-playable,playable,2020-08-04 19:43:27.000 +0100F5400AB6C000,"Alchemic Jousts",gpu;status-ingame,ingame,2022-12-08 15:06:28.000 +010001E00F75A000,"Alchemist's Castle",status-playable,playable,2020-12-12 23:54:08.000 +01004510110C4000,"Alder's Blood Prologue",crash;status-ingame,ingame,2021-02-09 19:03:03.000 +0100D740110C0000,"Alder's Blood: Definitive Edition",status-playable,playable,2020-08-28 15:15:23.000 +01000E000EEF8000,"Aldred Knight",services;status-playable,playable,2021-11-30 01:49:17.000 +010025D01221A000,"Alex Kidd in Miracle World DX",status-playable,playable,2022-11-14 15:01:34.000 +0100A2E00D0E0000,"Alien Cruise",status-playable,playable,2020-08-12 13:56:05.000 +0100C1500DBDE000,"Alien Escape",status-playable,playable,2020-06-03 23:43:18.000 +010075D00E8BA000,"Alien: Isolation",status-playable;nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41.000 +0100CBD012FB6000,"All Walls Must Fall",status-playable;UE4,playable,2022-10-15 19:16:30.000 +0100C1F00A9B8000,"All-Star Fruit Racing",status-playable;nvdec;UE4,playable,2022-07-21 00:35:37.000 +0100AC501122A000,"Alluris",gpu;status-ingame;UE4,ingame,2023-08-02 23:13:50.000 +010063000C3CE000,"Almightree: The Last Dreamer",slow;status-playable,playable,2020-12-15 13:59:03.000 +010083E010AE8000,"Along the Edge",status-playable,playable,2020-11-18 15:00:07.000 +010083E013188000,"Alpaca Ball: Allstars",nvdec;status-playable,playable,2020-12-11 12:26:29.000 +01000A800B998000,"ALPHA",status-playable,playable,2020-12-13 12:17:45.000 +010053B0123DC000,"Alphaset by POWGI",status-playable,playable,2020-12-15 15:15:15.000 +01003E700FD66000,"Alt-Frequencies",status-playable,playable,2020-12-15 19:01:33.000 +01004DB00935A000,"Alteric",status-playable,playable,2020-11-08 13:53:22.000 +0100C3D00D1D4000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",status-playable,playable,2020-08-31 14:17:42.000 +0100A8A00D27E000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",status-playable,playable,2021-02-10 13:33:59.000 +010045201487C000,"Aluna: Sentinel of the Shards",status-playable;nvdec,playable,2022-10-25 22:17:03.000 +01004C200B0B4000,"Alwa's Awakening",status-playable,playable,2020-10-13 11:52:01.000 +01001B7012214000,"Alwa's Legacy",status-playable,playable,2020-12-13 13:00:57.000 +010002B00C534000,"American Fugitive",nvdec;status-playable,playable,2021-01-04 20:45:11.000 +010089D00A3FA000,"American Ninja Warrior: Challenge",nvdec;status-playable,playable,2021-06-09 13:11:17.000 +01003CC00D0BE000,"Amnesia: Collection",status-playable,playable,2022-10-04 13:36:15.000 +010041D00DEB2000,"Amoeba Battle - Microscopic RTS Action",status-playable,playable,2021-05-06 13:33:41.000 +010046500C8D2000,"Among the Sleep - Enhanced Edition",nvdec;status-playable,playable,2021-06-03 15:06:25.000 +0100B0C013912000,"Among Us",status-menus;online;ldn-broken,menus,2021-09-22 15:20:17.000 +010050900E1C6000,"Anarcute",status-playable,playable,2021-02-22 13:17:59.000 +01009EE0111CC000,"Ancestors Legacy",status-playable;nvdec;UE4,playable,2022-10-01 12:25:36.000 +010021700BC56000,"Ancient Rush 2",UE4;crash;status-menus,menus,2020-07-14 14:58:47.000 +0100AE000AEBC000,"Angels of Death",nvdec;status-playable,playable,2021-02-22 14:17:15.000 +010001E00A5F6000,"AngerForce: Reloaded for Nintendo Switch",status-playable,playable,2022-07-21 10:37:17.000 +0100F3500D05E000,"Angry Bunnies: Colossal Carrot Crusade",status-playable;online-broken,playable,2022-09-04 14:53:26.000 +010084500C7DC000,"Angry Video Game Nerd I & II Deluxe",crash;status-ingame,ingame,2020-12-12 23:59:54.000 +0100706005B6A000,"Anima: Gate of Memories",nvdec;status-playable,playable,2021-06-16 18:13:18.000 +010033F00B3FA000,"Anima: Gate of Memories - Arcane Edition",nvdec;status-playable,playable,2021-01-26 16:55:51.000 +01007A400B3F8000,"Anima: Gate of Memories - The Nameless Chronicles",status-playable,playable,2021-06-14 14:33:06.000 +0100F38011CFE000,"Animal Crossing: New Horizons Island Transfer Tool",services;status-ingame;Needs Update;Incomplete,ingame,2022-12-07 13:51:19.000 +01006F8002326000,"Animal Crossing™: New Horizons",gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49.000 +010019500E642000,"Animal Fight Club",gpu;status-ingame,ingame,2020-12-13 13:13:33.000 +01002F4011A8E000,"Animal Fun for Toddlers and Kids",services;status-boots,boots,2020-12-15 16:45:29.000 +010035500CA0E000,"Animal Hunter Z",status-playable,playable,2020-12-13 12:50:35.000 +010033C0121DC000,"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",services;status-boots,boots,2021-11-29 23:43:14.000 +010065B009B3A000,"Animal Rivals: Nintendo Switch Edition",status-playable,playable,2021-02-22 14:02:42.000 +0100EFE009424000,"Animal Super Squad",UE4;status-playable,playable,2021-04-23 20:50:50.000 +0100A16010966000,"Animal Up!",status-playable,playable,2020-12-13 15:39:02.000 +010020D01AD24000,"ANIMAL WELL",status-playable,playable,2024-05-22 18:01:49.000 +0100451012492000,"Animals for Toddlers",services;status-boots,boots,2020-12-15 17:27:27.000 +010098600CF06000,"Animated Jigsaws Collection",nvdec;status-playable,playable,2020-12-15 15:58:34.000 +0100A1900B5B8000,"Animated Jigsaws: Beautiful Japanese Scenery Demo",nvdec;status-playable,playable,2021-02-10 13:49:56.000 +010062500EB84000,"Anime Studio Story",status-playable,playable,2020-12-15 18:14:05.000 +01002B300EB86000,"Anime Studio Story Demo",status-playable,playable,2021-02-10 14:50:39.000 +010097600C322000,"ANIMUS",status-playable,playable,2020-12-13 15:11:47.000 +0100E5A00FD38000,"ANIMUS: Harbinger",status-playable,playable,2022-09-13 22:09:20.000 +010055500CCD2000,"Ankh Guardian - Treasure of the Demon's Temple",status-playable,playable,2020-12-13 15:55:49.000 +01009E600D78C000,"Anode",status-playable,playable,2020-12-15 17:18:58.000 +0100CB9018F5A000,"Another Code™: Recollection",gpu;status-ingame;crash,ingame,2024-09-06 05:58:52.000 +01001A900D312000,"Another Sight",UE4;gpu;nvdec;status-ingame,ingame,2020-12-03 16:49:59.000 +01003C300AAAE000,"Another World",slow;status-playable,playable,2022-07-21 10:42:38.000 +01000FD00DF78000,"AnShi",status-playable;nvdec;UE4,playable,2022-10-21 19:37:01.000 +010054C00D842000,"Anthill",services;status-menus;nvdec,menus,2021-11-18 09:25:25.000 +0100596011E20000,"Anti Hero Bundle",status-playable;nvdec,playable,2022-10-21 20:10:30.000 +0100016007154000,"Antiquia Lost",status-playable,playable,2020-05-28 11:57:32.000 +0100FE1011400000,"AntVentor",nvdec;status-playable,playable,2020-12-15 20:09:27.000 +0100FA100620C000,"Ao no Kanata no Four Rhythm",status-playable,playable,2022-07-21 10:50:42.000 +010047000E9AA000,"AO Tennis 2",status-playable;online-broken,playable,2022-09-17 12:05:07.000 +0100990011866000,"Aokana - Four Rhythms Across the Blue",status-playable,playable,2022-10-04 13:50:26.000 +01005B100C268000,"Ape Out",status-playable,playable,2022-09-26 19:04:47.000 +010054500E6D4000,"Ape Out DEMO",status-playable,playable,2021-02-10 14:33:06.000 +010051C003A08000,"Aperion Cyberstorm",status-playable,playable,2020-12-14 00:40:16.000 +01008CA00D71C000,"Aperion Cyberstorm [DEMO]",status-playable,playable,2021-02-10 15:53:21.000 +01008FC00C5BC000,"Apocalipsis Wormwood Edition",deadlock;status-menus,menus,2020-05-27 12:56:37.000 +010045D009EFC000,"Apocryph: an old-school shooter",gpu;status-ingame,ingame,2020-12-13 23:24:10.000 +010020D01B890000,"Apollo Justice: Ace Attorney Trilogy",status-playable,playable,2024-06-21 21:54:27.000 +01005F20116A0000,"Apparition",nvdec;slow;status-ingame,ingame,2020-12-13 23:57:04.000 +0100AC10085CE000,"AQUA KITTY UDX",online;status-playable,playable,2021-04-12 15:34:11.000 +0100FE0010886000,"Aqua Lungers",crash;status-ingame,ingame,2020-12-14 11:25:57.000 +0100D0D00516A000,"Aqua Moto Racing Utopia",status-playable,playable,2021-02-21 21:21:00.000 +010071800BA74000,"Aragami: Shadow Edition",nvdec;status-playable,playable,2021-02-21 20:33:23.000 +0100C7D00E6A0000,"Arc of Alchemist",status-playable;nvdec,playable,2022-10-07 19:15:54.000 +0100BE80097FA000,"Arcade Archives 10-Yard Fight",online;status-playable,playable,2021-03-25 21:26:41.000 +01005DD00BE08000,"Arcade Archives ALPHA MISSION",online;status-playable,playable,2021-04-15 09:20:43.000 +010083800DC70000,"Arcade Archives ALPINE SKI",online;status-playable,playable,2021-04-15 09:28:46.000 +0100A5700AF32000,"Arcade Archives ARGUS",online;status-playable,playable,2021-04-16 06:51:25.000 +010014F001DE2000,"Arcade Archives Armed F",online;status-playable,playable,2021-04-16 07:00:17.000 +0100BEC00C7A2000,"Arcade Archives ATHENA",online;status-playable,playable,2021-04-16 07:10:12.000 +0100426001DE4000,"Arcade Archives Atomic Robo-Kid",online;status-playable,playable,2021-04-16 07:20:29.000 +0100192009824000,"Arcade Archives BOMB JACK",online;status-playable,playable,2021-04-16 09:48:26.000 +010007A00980C000,"Arcade Archives City CONNECTION",online;status-playable,playable,2021-03-25 22:16:15.000 +0100EDC00E35A000,"Arcade Archives CLU CLU LAND",online;status-playable,playable,2021-04-16 10:00:42.000 +0100BB1001DD6000,"Arcade Archives CRAZY CLIMBER",online;status-playable,playable,2021-03-25 22:24:15.000 +0100E9E00B052000,"Arcade Archives DONKEY KONG",Needs Update;crash;services;status-menus,menus,2021-03-24 18:18:43.000 +0100F25001DD0000,"Arcade Archives DOUBLE DRAGON",online;status-playable,playable,2021-03-25 22:44:34.000 +01009E3001DDE000,"Arcade Archives DOUBLE DRAGON II The Revenge",online;status-playable,playable,2021-04-12 16:05:29.000 +0100496006EC8000,"Arcade Archives FRONT LINE",online;status-playable,playable,2021-05-05 14:10:49.000 +01009A4008A30000,"Arcade Archives HEROIC EPISODE",online;status-playable,playable,2021-03-25 23:01:26.000 +01007D200D3FC000,"Arcade Archives ICE CLIMBER",online;status-playable,playable,2021-05-05 14:18:34.000 +010049400C7A8000,"Arcade Archives IKARI WARRIORS",online;status-playable,playable,2021-05-05 14:24:46.000 +01000DB00980A000,"Arcade Archives Ikki",online;status-playable,playable,2021-03-25 23:11:28.000 +010008300C978000,"Arcade Archives IMAGE FIGHT",online;status-playable,playable,2021-05-05 14:31:21.000 +010010B008A36000,"Arcade Archives Kid Niki Radical Ninja",audio;status-ingame;online,ingame,2022-07-21 11:02:04.000 +0100E7C001DE0000,"Arcade Archives Kid's Horehore Daisakusen",online;status-playable,playable,2021-04-12 16:21:29.000 +0100F380105A4000,"Arcade Archives LIFE FORCE",status-playable,playable,2020-09-04 13:26:25.000 +0100755004608000,"Arcade Archives Mario Bros.",online;status-playable,playable,2021-03-26 11:31:32.000 +01000BE001DD8000,"Arcade Archives MOON CRESTA",online;status-playable,playable,2021-05-05 14:39:29.000 +01003000097FE000,"Arcade Archives MOON PATROL",online;status-playable,playable,2021-03-26 11:42:04.000 +01003EF00D3B4000,"Arcade Archives NINJA GAIDEN",audio;online;status-ingame,ingame,2021-04-12 16:27:53.000 +01002F300D2C6000,"Arcade Archives Ninja Spirit",online;status-playable,playable,2021-05-05 14:45:31.000 +0100369001DDC000,"Arcade Archives Ninja-Kid",online;status-playable,playable,2021-03-26 20:55:07.000 +01004A200BB48000,"Arcade Archives OMEGA FIGHTER",crash;services;status-menus,menus,2020-08-18 20:50:54.000 +01007F8010C66000,"Arcade Archives PLUS ALPHA",audio;status-ingame,ingame,2020-07-04 20:47:55.000 +0100A6E00D3F8000,"Arcade Archives POOYAN",online;status-playable,playable,2021-05-05 17:58:19.000 +01000D200C7A4000,"Arcade Archives PSYCHO SOLDIER",online;status-playable,playable,2021-05-05 18:02:19.000 +01001530097F8000,"Arcade Archives PUNCH-OUT!!",online;status-playable,playable,2021-03-25 22:10:55.000 +010081E001DD2000,"Arcade Archives Renegade",status-playable;online,playable,2022-07-21 11:45:40.000 +0100FBA00E35C000,"Arcade Archives ROAD FIGHTER",online;status-playable,playable,2021-05-05 18:09:17.000 +010060000BF7C000,"Arcade Archives ROUTE 16",online;status-playable,playable,2021-05-05 18:40:41.000 +0100C2D00981E000,"Arcade Archives RYGAR",online;status-playable,playable,2021-04-15 08:48:30.000 +01007A4009834000,"Arcade Archives Shusse Ozumo",online;status-playable,playable,2021-05-05 17:52:25.000 +010008F00B054000,"Arcade Archives Sky Skipper",online;status-playable,playable,2021-04-15 08:58:09.000 +01008C900982E000,"Arcade Archives Solomon's Key",online;status-playable,playable,2021-04-19 16:27:18.000 +010069F008A38000,"Arcade Archives STAR FORCE",online;status-playable,playable,2021-04-15 08:39:09.000 +0100422001DDA000,"Arcade Archives TERRA CRESTA",crash;services;status-menus,menus,2020-08-18 20:20:55.000 +0100348001DE6000,"Arcade Archives TERRA FORCE",online;status-playable,playable,2021-04-16 20:03:27.000 +0100DFD016B7A000,"Arcade Archives TETRIS® THE GRAND MASTER",status-playable,playable,2024-06-23 01:50:29.000 +0100DC000983A000,"Arcade Archives THE NINJA WARRIORS",online;slow;status-ingame,ingame,2021-04-16 19:54:56.000 +0100AF300D2E8000,"Arcade Archives TIME PILOT",online;status-playable,playable,2021-04-16 19:22:31.000 +010029D006ED8000,"Arcade Archives Traverse USA",online;status-playable,playable,2021-04-15 08:11:06.000 +010042200BE0C000,"Arcade Archives URBAN CHAMPION",online;status-playable,playable,2021-04-16 10:20:03.000 +01004EC00E634000,"Arcade Archives VS. GRADIUS",online;status-playable,playable,2021-04-12 14:53:58.000 +010021D00812A000,"Arcade Archives VS. SUPER MARIO BROS.",online;status-playable,playable,2021-04-08 14:48:11.000 +01001B000D8B6000,"Arcade Archives WILD WESTERN",online;status-playable,playable,2021-04-16 10:11:36.000 +010050000D6C4000,"Arcade Classics Anniversary Collection",status-playable,playable,2021-06-03 13:55:10.000 +01005A8010C7E000,"ARCADE FUZZ",status-playable,playable,2020-08-15 12:37:36.000 +010077000F620000,"Arcade Spirits",status-playable,playable,2020-06-21 11:45:03.000 +0100E680149DC000,"Arcaea",status-playable,playable,2023-03-16 19:31:21.000 +01003C2010C78000,"Archaica: The Path Of Light",crash;status-nothing,nothing,2020-10-16 13:22:26.000 +01004DA012976000,"Area 86",status-playable,playable,2020-12-16 16:45:52.000 +0100691013C46000,"ARIA CHRONICLE",status-playable,playable,2022-11-16 13:50:55.000 +0100D4A00B284000,"ARK: Survival Evolved",gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56.000 +0100C56012C96000,"Arkanoid vs. Space Invaders",services;status-ingame,ingame,2021-01-21 12:50:30.000 +010069A010606000,"Arkham Horror: Mother's Embrace",nvdec;status-playable,playable,2021-04-19 15:40:55.000 +0100C5B0113A0000,"Armed 7 DX",status-playable,playable,2020-12-14 11:49:56.000 +010070A00A5F4000,"Armello",nvdec;status-playable,playable,2021-01-07 11:43:26.000 +0100A5400AC86000,"ARMS Demo",status-playable,playable,2021-02-10 16:30:13.000 +01009B500007C000,"ARMS™",status-playable;ldn-works;LAN,playable,2024-08-28 07:49:24.000 +0100184011B32000,"Arrest of a stone Buddha",status-nothing;crash,nothing,2022-12-07 16:55:00.000 +01007AB012102000,"Arrog",status-playable,playable,2020-12-16 17:20:50.000 +01008EC006BE2000,"Art of Balance",gpu;status-ingame;ldn-works,ingame,2022-07-21 17:13:57.000 +010062F00CAE2000,"Art of Balance DEMO",gpu;slow;status-ingame,ingame,2021-02-10 17:17:12.000 +01006AA013086000,"Art Sqool",status-playable;nvdec,playable,2022-10-16 20:42:37.000 +0100CDD00DA70000,"Artifact Adventure Gaiden DX",status-playable,playable,2020-12-16 17:49:25.000 +0100C2500CAB6000,"Ary and the Secret of Seasons",status-playable,playable,2022-10-07 20:45:09.000 +0100C9F00AAEE000,"ASCENDANCE",status-playable,playable,2021-01-05 10:54:40.000 +0100D5800DECA000,"Asemblance",UE4;gpu;status-ingame,ingame,2020-12-16 18:01:23.000 +0100E4C00DE30000,"Ash of Gods: Redemption",deadlock;status-nothing,nothing,2020-08-10 18:08:32.000 +010027B00E40E000,"Ashen",status-playable;nvdec;online-broken;UE4,playable,2022-09-17 12:19:14.000 +01007B000C834000,"Asphalt Legends Unite",services;status-menus;crash;online-broken,menus,2022-12-07 13:28:29.000 +01007F600B134000,"Assassin's Creed® III: Remastered",status-boots;nvdec,boots,2024-06-25 20:12:11.000 +010044700DEB0000,"Assassin’s Creed®: The Rebel Collection",gpu;status-ingame,ingame,2024-05-19 07:58:56.000 +0100DF200B24C000,"Assault Android Cactus+",status-playable,playable,2021-06-03 13:23:55.000 +0100BF8012A30000,"Assault ChaingunS KM",crash;gpu;status-ingame,ingame,2020-12-14 12:48:34.000 +0100C5E00E540000,"Assault on Metaltron Demo",status-playable,playable,2021-02-10 19:48:06.000 +010057A00C1F6000,"Astebreed",status-playable,playable,2022-07-21 17:33:54.000 +010081500EA1E000,"Asterix & Obelix XXL 3 - The Crystal Menhir",gpu;status-ingame;nvdec;regression,ingame,2022-11-28 14:19:23.000 +0100F46011B50000,"Asterix & Obelix XXL: Romastered",gpu;status-ingame;nvdec;opengl,ingame,2023-08-16 21:22:06.000 +01007300020FA000,"ASTRAL CHAIN",status-playable,playable,2024-07-17 18:02:19.000 +0100E5F00643C000,"Astro Bears Party",status-playable,playable,2020-05-28 11:21:58.000 +0100F0400351C000,"Astro Duel Deluxe",32-bit;status-playable,playable,2021-06-03 11:21:48.000 +0100B80010C48000,"Astrologaster",cpu;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:31.000 +0100DF401249C000,"AstroWings: Space War",status-playable,playable,2020-12-14 13:10:44.000 +010099801870E000,"Atari 50: The Anniversary Celebration",slow;status-playable,playable,2022-11-14 19:42:10.000 +010088600C66E000,"Atelier Arland series Deluxe Pack",nvdec;status-playable,playable,2021-04-08 15:33:15.000 +0100D9D00EE8C000,"Atelier Ayesha: The Alchemist of Dusk DX",status-menus;crash;nvdec;Needs Update,menus,2021-11-24 07:29:54.000 +0100E5600EE8E000,"Atelier Escha & Logy: Alchemists of the Dusk Sky DX",status-playable;nvdec,playable,2022-11-20 16:01:41.000 +010023201421E000,"Atelier Firis: The Alchemist and the Mysterious Journey DX",gpu;status-ingame;nvdec,ingame,2022-10-25 22:46:19.000 +0100B1400CD50000,"Atelier Lulua ~The Scion of Arland~",nvdec;status-playable,playable,2020-12-16 14:29:19.000 +010009900947A000,"Atelier Lydie & Suelle ~The Alchemists and the Mysterious Paintings~",nvdec;status-playable,playable,2021-06-03 18:37:01.000 +01001A5014220000,"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings DX",status-playable,playable,2022-10-25 23:06:20.000 +0100ADD00C6FA000,"Atelier Meruru ~The Apprentice of Arland~ DX",nvdec;status-playable,playable,2020-06-12 00:50:48.000 +01002D700B906000,"Atelier Rorona Arland no Renkinjutsushi DX (JP)",status-playable;nvdec,playable,2022-12-02 17:26:54.000 +01009A9012022000,"Atelier Ryza 2: Lost Legends & the Secret Fairy",status-playable,playable,2022-10-16 21:06:06.000 +0100D1900EC80000,"Atelier Ryza: Ever Darkness & the Secret Hideout",status-playable,playable,2023-10-15 16:36:50.000 +010005C00EE90000,"Atelier Shallie: Alchemists of the Dusk Sea DX",nvdec;status-playable,playable,2020-11-25 20:54:12.000 +010082A01538E000,"Atelier Sophie 2: The Alchemist of the Mysterious Dream",status-ingame;crash,ingame,2022-12-01 04:34:03.000 +01009BC00C6F6000,"Atelier Totori ~The Adventurer of Arland~ DX",nvdec;status-playable,playable,2020-06-12 01:04:56.000 +0100B9400FA38000,"ATOM RPG",status-playable;nvdec,playable,2022-10-22 10:11:48.000 +01005FE00EC4E000,"Atomic Heist",status-playable,playable,2022-10-16 21:24:32.000 +0100AD30095A4000,"Atomicrops",status-playable,playable,2022-08-06 10:05:07.000 +01000D1006CEC000,"ATOMIK: RunGunJumpGun",status-playable,playable,2020-12-14 13:19:24.000 +0100FB500631E000,"ATOMINE",gpu;nvdec;slow;status-playable,playable,2020-12-14 18:56:50.000 +010039600E7AC000,"Attack of the Toy Tanks",slow;status-ingame,ingame,2020-12-14 12:59:12.000 +010034500641A000,"Attack on Titan 2",status-playable,playable,2021-01-04 11:40:01.000 +01000F600B01E000,"ATV Drift & Tricks",UE4;online;status-playable,playable,2021-04-08 17:29:17.000 +0100AA800DA42000,"Automachef",status-playable,playable,2020-12-16 19:51:25.000 +01006B700EA6A000,"Automachef Demo",status-playable,playable,2021-02-10 20:35:37.000 +0100B280106A0000,"Aviary Attorney: Definitive Edition",status-playable,playable,2020-08-09 20:32:12.000 +010064600F982000,"AVICII Invector",status-playable,playable,2020-10-25 12:12:56.000 +0100E100128BA000,"AVICII Invector Demo",status-playable,playable,2021-02-10 21:04:58.000 +01008FB011248000,"AvoCuddle",status-playable,playable,2020-09-02 14:50:13.000 +0100085012D64000,"Awakening of Cthulhu",UE4;status-playable,playable,2021-04-26 13:03:07.000 +01002F1005F3C000,"Away: Journey To The Unexpected",status-playable;nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04.000 +0100B8C00CFCE000,"Awesome Pea",status-playable,playable,2020-10-11 12:39:23.000 +010023800D3F2000,"Awesome Pea (Demo)",status-playable,playable,2021-02-10 21:48:21.000 +0100B7D01147E000,"Awesome Pea 2",status-playable,playable,2022-10-01 12:34:19.000 +0100D2011E28000,"Awesome Pea 2 (Demo)",crash;status-nothing,nothing,2021-02-10 22:08:27.000 +0100DA3011174000,"AXES",status-playable,playable,2021-04-08 13:01:58.000 +0100052004384000,"Axiom Verge",status-playable,playable,2020-10-20 01:07:18.000 +010075400DEC6000,"Ayakashi Koi Gikyoku《Trial version》",status-playable,playable,2021-02-10 22:22:11.000 +01006AF012FC8000,"Azur Lane: Crosswave",UE4;nvdec;status-playable,playable,2021-04-05 15:15:25.000 +0100C7D00DE24000,"Azuran Tales: TRIALS",status-playable,playable,2020-08-12 15:23:07.000 +01006FB00990E000,"Azure Reflections",nvdec;online;status-playable,playable,2021-04-08 13:18:25.000 +01004E90149AA000,"Azure Striker GUNVOLT 3",status-playable,playable,2022-08-10 13:46:49.000 +0100192003FA4000,"Azure Striker GUNVOLT: STRIKER PACK",32-bit;status-playable,playable,2024-02-10 23:51:21.000 +010031D012BA4000,"Azurebreak Heroes",status-playable,playable,2020-12-16 21:26:17.000 +01009B901145C000,"B.ARK",status-playable;nvdec,playable,2022-11-17 13:35:02.000 +01002CD00A51C000,"Baba Is You",status-playable,playable,2022-07-17 05:36:54.000 +0100F4100AF16000,"Back to Bed",nvdec;status-playable,playable,2020-12-16 20:52:04.000 +0100FEA014316000,"Backworlds",status-playable,playable,2022-10-25 23:20:34.000 +0100EAF00E32E000,"Bacon Man: An Adventure",status-menus;crash;nvdec,menus,2021-11-20 02:36:21.000 +01000CB00D094000,"Bad Dream: Coma",deadlock;status-boots,boots,2023-08-03 00:54:18.000 +0100B3B00D81C000,"Bad Dream: Fever",status-playable,playable,2021-06-04 18:33:12.000 +0100E98006F22000,"Bad North",status-playable,playable,2022-07-17 13:44:25.000 +010075000D092000,"Bad North Demo",status-playable,playable,2021-02-10 22:48:38.000 +01004C70086EC000,"BAFL - Brakes Are For Losers",status-playable,playable,2021-01-13 08:32:51.000 +010076B011EC8000,"Baila Latino",status-playable,playable,2021-04-14 16:40:24.000 +0100730011BDC000,"Bakugan: Champions of Vestroia",status-playable,playable,2020-11-06 19:07:39.000 +01008260138C4000,"Bakumatsu Renka SHINSENGUMI",status-playable,playable,2022-10-25 23:37:31.000 +0100438012EC8000,"BALAN WONDERWORLD",status-playable;nvdec;UE4,playable,2022-10-22 13:08:43.000 +0100E48013A34000,"Balan Wonderworld Demo",gpu;services;status-ingame;UE4;demo,ingame,2023-02-16 20:05:07.000 +0100CD801CE5E000,"Balatro",status-ingame,ingame,2024-04-21 02:01:53.000 +010010A00DA48000,"Baldur's Gate and Baldur's Gate II: Enhanced Editions",32-bit;status-playable,playable,2022-09-12 23:52:15.000 +0100BC400FB64000,"Balthazar's Dream",status-playable,playable,2022-09-13 00:13:22.000 +01008D30128E0000,"Bamerang",status-playable,playable,2022-10-26 00:29:39.000 +,"Bang Dream Girls Band Party for Nintendo Switch",status-playable,playable,2021-09-19 03:06:58.000 +010013C010C5C000,"Banner of the Maid",status-playable,playable,2021-06-14 15:23:37.000 +0100388008758000,"Banner Saga 2",crash;status-boots,boots,2021-01-13 08:56:09.000 +010071E00875A000,"Banner Saga 3",slow;status-boots,boots,2021-01-11 16:53:57.000 +0100CE800B94A000,"Banner Saga Trilogy",slow;status-playable,playable,2024-03-06 11:25:20.000 +0100425009FB2000,"Baobabs Mausoleum Ep.1: Ovnifagos Don't Eat Flamingos",status-playable,playable,2020-07-15 05:06:29.000 +010079300E976000,"Baobabs Mausoleum Ep.2: 1313 Barnabas Dead End Drive",status-playable,playable,2020-12-17 11:22:50.000 +01006D300FFA6000,"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",nvdec;status-playable,playable,2020-12-17 11:43:10.000 +0100D3000AEC2000,"Baobabs Mausoleum: DEMO",status-playable,playable,2021-02-10 22:59:25.000 +01003350102E2000,"Barbarous: Tavern of Emyr",status-playable,playable,2022-10-16 21:50:24.000 +0100F7E01308C000,"Barbearian",Needs Update;gpu;status-ingame,ingame,2021-06-28 16:27:50.000 +010039C0106C6000,"Baron: Fur Is Gonna Fly",status-boots;crash,boots,2022-02-06 02:05:43.000 +0100FB000EB96000,"Barry Bradford's Putt Panic Party",nvdec;status-playable,playable,2020-06-17 01:08:34.000 +01004860080A0000,"Baseball Riot",status-playable,playable,2021-06-04 18:07:27.000 +010038600B27E000,"Bastion",status-playable,playable,2022-02-15 14:15:24.000 +01005F3012748000,"Batbarian: Testament of the Primordials",status-playable,playable,2020-12-17 12:00:59.000 +0100C07018CA6000,"Baten Kaitos I & II HD Remaster (Europe/USA)",services;status-boots;Needs Update,boots,2023-10-01 00:44:32.000 +0100F28018CA4000,"Baten Kaitos I & II HD Remaster (Japan)",services;status-boots;Needs Update,boots,2023-10-24 23:11:54.000 +0100011005D92000,"Batman - The Telltale Series",nvdec;slow;status-playable,playable,2021-01-11 18:19:35.000 +01003F00163CE000,"Batman: Arkham City",status-playable,playable,2024-09-11 00:30:19.000 +0100ACD0163D0000,"Batman: Arkham Knight",gpu;status-ingame;mac-bug,ingame,2024-06-25 20:24:42.000 +0100E6300AA3A000,"Batman: The Enemy Within",crash;status-nothing,nothing,2020-10-16 05:49:27.000 +0100747011890000,"Battle Axe",status-playable,playable,2022-10-26 00:38:01.000 +0100551001D88000,"Battle Chasers: Nightwar",nvdec;slow;status-playable,playable,2021-01-12 12:27:34.000 +0100CC2001C6C000,"Battle Chef Brigade Deluxe",status-playable,playable,2021-01-11 14:16:28.000 +0100DBB00CAEE000,"Battle Chef Brigade Demo",status-playable,playable,2021-02-10 23:15:07.000 +0100A3B011EDE000,"Battle Hunters",gpu;status-ingame,ingame,2022-11-12 09:19:17.000 +010035E00C1AE000,"Battle of Kings",slow;status-playable,playable,2020-12-17 12:45:23.000 +0100D2800EB40000,"Battle Planet - Judgement Day",status-playable,playable,2020-12-17 14:06:20.000 +0100C4D0093EA000,"Battle Princess Madelyn",status-playable,playable,2021-01-11 13:47:23.000 +0100A7500DF64000,"Battle Princess Madelyn Royal Edition",status-playable,playable,2022-09-26 19:14:49.000 +010099B00E898000,"Battle Supremacy - Evolution",gpu;status-boots;nvdec,boots,2022-02-17 09:02:50.000 +0100DEB00D5A8000,"Battle Worlds: Kronos",nvdec;status-playable,playable,2021-06-04 17:48:02.000 +0100650010DD4000,"Battleground",status-ingame;crash,ingame,2021-09-06 11:53:23.000 +010044E00D97C000,"BATTLESLOTHS",status-playable,playable,2020-10-03 08:32:22.000 +010059C00E39C000,"Battlestar Galactica Deadlock",nvdec;status-playable,playable,2020-06-27 17:35:44.000 +01006D800A988000,"Battlezone Gold Edition",gpu;ldn-untested;online;status-boots,boots,2021-06-04 18:36:05.000 +010048300D5C2000,"BATTLLOON",status-playable,playable,2020-12-17 15:48:23.000 +0100194010422000,"bayala - the game",status-playable,playable,2022-10-04 14:09:25.000 +0100CF5010FEC000,"Bayonetta Origins: Cereza and the Lost Demon™",gpu;status-ingame,ingame,2024-02-27 01:39:49.000 +010002801A3FA000,"Bayonetta Origins: Cereza and the Lost Demon™ Demo",gpu;status-ingame;demo,ingame,2024-02-17 06:06:28.000 +010076F0049A2000,"Bayonetta™",status-playable;audout,playable,2022-11-20 15:51:59.000 +01007960049A0000,"Bayonetta™ 2",status-playable;nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09.000 +01004A4010FEA000,"Bayonetta™ 3",gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33.000 +01002FA00DE72000,"BDSM: Big Drunk Satanic Massacre",status-playable,playable,2021-03-04 21:28:22.000 +01003A1010E3C000,"BE-A Walker",slow;status-ingame,ingame,2020-09-02 15:00:31.000 +010095C00406C000,"Beach Buggy Racing",online;status-playable,playable,2021-04-13 23:16:50.000 +010020700DE04000,"Bear With Me: The Lost Robots",nvdec;status-playable,playable,2021-02-27 14:20:10.000 +010024200E97E800,"Bear With Me: The Lost Robots Demo",nvdec;status-playable,playable,2021-02-12 22:38:12.000 +0100C0E014A4E000,"Bear's Restaurant",status-playable,playable,2024-08-11 21:26:59.000 +,"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",crash;status-menus,menus,2020-10-04 06:12:08.000 +01009C300BB4C000,"Beat Cop",status-playable,playable,2021-01-06 19:26:48.000 +01002D20129FC000,"Beat Me!",status-playable;online-broken,playable,2022-10-16 21:59:26.000 +01006B0014590000,"BEAUTIFUL DESOLATION",gpu;status-ingame;nvdec,ingame,2022-10-26 10:34:38.000 +01009E700DB2E000,"Bee Simulator",UE4;crash;status-boots,boots,2020-07-15 12:13:13.000 +010018F007786000,"BeeFense BeeMastered",status-playable,playable,2022-11-17 15:38:12.000 +0100558010B26000,"Behold the Kickmen",status-playable,playable,2020-06-27 12:49:45.000 +0100D1300C1EA000,"Beholder: Complete Edition",status-playable,playable,2020-10-16 12:48:58.000 +01006E1004404000,"Ben 10",nvdec;status-playable,playable,2021-02-26 14:08:35.000 +01009CD00E3AA000,"Ben 10: Power Trip!",status-playable;nvdec,playable,2022-10-09 10:52:12.000 +010074500BBC4000,"Bendy and the Ink Machine",status-playable,playable,2023-05-06 20:35:39.000 +010068600AD16000,"Beyblade Burst Battle Zero",services;status-menus;crash;Needs Update,menus,2022-11-20 15:48:32.000 +010056500CAD8000,"Beyond Enemy Lines: Covert Operations",status-playable;UE4,playable,2022-10-01 13:11:50.000 +0100B8F00DACA000,"Beyond Enemy Lines: Essentials",status-playable;nvdec;UE4,playable,2022-09-26 19:48:16.000 +0100BF400AF38000,"Bibi & Tina – Adventures with Horses",nvdec;slow;status-playable,playable,2021-01-13 08:58:09.000 +010062400E69C000,"Bibi & Tina at the horse farm",status-playable,playable,2021-04-06 16:31:39.000 +01005FF00AF36000,"Bibi Blocksberg – Big Broom Race 3",status-playable,playable,2021-01-11 19:07:16.000 +010062B00A874000,"Big Buck Hunter Arcade",nvdec;status-playable,playable,2021-01-12 20:31:39.000 +010088100C35E000,"Big Crown: Showdown",status-menus;nvdec;online;ldn-untested,menus,2022-07-17 18:25:32.000 +0100A42011B28000,"Big Dipper",status-playable,playable,2021-06-14 15:08:19.000 +010077E00F30E000,"Big Pharma",status-playable,playable,2020-07-14 15:27:30.000 +010007401287E000,"BIG-Bobby-Car - The Big Race",slow;status-playable,playable,2020-12-10 14:25:06.000 +010057700FF7C000,"Billion Road",status-playable,playable,2022-11-19 15:57:43.000 +010087D008D64000,"BINGO for Nintendo Switch",status-playable,playable,2020-07-23 16:17:36.000 +01004BA017CD6000,"Biomutant",status-ingame;crash,ingame,2024-05-16 15:46:36.000 +01002620102C6000,"BioShock 2 Remastered",services;status-nothing,nothing,2022-10-29 14:39:22.000 +0100D560102C8000,"BioShock Infinite: The Complete Edition",services-horizon;status-nothing;crash,nothing,2024-08-11 21:35:01.000 +0100AD10102B2000,"BioShock Remastered",services-horizon;status-boots;crash;Needs Update,boots,2024-06-06 01:08:52.000 +010053B0117F8000,"Biped",status-playable;nvdec,playable,2022-10-01 13:32:58.000 +01001B700B278000,"Bird Game +",status-playable;online,playable,2022-07-17 18:41:57.000 +0100B6B012FF4000,"Birds and Blocks Demo",services;status-boots;demo,boots,2022-04-10 04:53:03.000 +0100E62012D3C000,"BIT.TRIP RUNNER",status-playable,playable,2022-10-17 14:23:24.000 +01000AD012D3A000,"BIT.TRIP VOID",status-playable,playable,2022-10-17 14:31:23.000 +0100A0800EA9C000,"Bite the Bullet",status-playable,playable,2020-10-14 23:10:11.000 +010026E0141C8000,"Bitmaster",status-playable,playable,2022-12-13 14:05:51.000 +010061D00FD26000,"Biz Builder Delux",slow;status-playable,playable,2020-12-15 21:36:25.000 +0100DD1014AB8000,"Black Book",status-playable;nvdec,playable,2022-12-13 16:38:53.000 +010049000B69E000,"Black Future '88",status-playable;nvdec,playable,2022-09-13 11:24:37.000 +01004BE00A682000,"Black Hole Demo",status-playable,playable,2021-02-12 23:02:17.000 +0100C3200E7E6000,"Black Legend",gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48.000 +010043A012A32000,"Blackjack Hands",status-playable,playable,2020-11-30 14:04:51.000 +0100A0A00E660000,"Blackmoor 2",status-playable;online-broken,playable,2022-09-26 20:26:34.000 +010032000EA2C000,"Blacksad: Under the Skin",status-playable,playable,2022-09-13 11:38:04.000 +01006B400C178000,"Blacksea Odyssey",status-playable;nvdec,playable,2022-10-16 22:14:34.000 +010068E013450000,"Blacksmith of the Sand Kingdom",status-playable,playable,2022-10-16 22:37:44.000 +0100C4400CB7C000,"BLADE ARCUS Rebellion From Shining",status-playable,playable,2022-07-17 18:52:28.000 +0100EA1018A2E000,"Blade Assault",audio;status-nothing,nothing,2024-04-29 14:32:50.000 +01009CC00E224000,"Blade II - The Return Of Evil",audio;status-ingame;crash;UE4,ingame,2021-11-14 02:49:59.000 +01005950022EC000,"Blade Strangers",status-playable;nvdec,playable,2022-07-17 19:02:43.000 +0100DF0011A6A000,"Bladed Fury",status-playable,playable,2022-10-26 11:36:26.000 +0100CFA00CC74000,"Blades of Time",deadlock;status-boots;online,boots,2022-07-17 19:19:58.000 +01006CC01182C000,"Blair Witch",status-playable;nvdec;UE4,playable,2022-10-01 14:06:16.000 +010039501405E000,"Blanc",gpu;slow;status-ingame,ingame,2023-02-22 14:00:13.000 +0100698009C6E000,"Blasphemous",nvdec;status-playable,playable,2021-03-01 12:15:31.000 +0100302010338000,"Blasphemous Demo",status-playable,playable,2021-02-12 23:49:56.000 +0100225000FEE000,"Blaster Master Zero",32-bit;status-playable,playable,2021-03-05 13:22:33.000 +01005AA00D676000,"Blaster Master Zero 2",status-playable,playable,2021-04-08 15:22:59.000 +010025B002E92000,"Blaster Master Zero Demo",status-playable,playable,2021-02-12 23:59:06.000 +0100E53013E1C000,"Blastoid Breakout",status-playable,playable,2021-01-25 23:28:02.000 +0100EE800C93E000,"BLAZBLUE CENTRALFICTION Special Edition",nvdec;status-playable,playable,2020-12-15 23:50:04.000 +0100B61008208000,"BLAZBLUE CROSS TAG BATTLE",nvdec;online;status-playable,playable,2021-01-05 20:29:37.000 +010021A00DE54000,"Blazing Beaks",status-playable,playable,2020-06-04 20:37:06.000 +0100C2700C252000,"Blazing Chrome",status-playable,playable,2020-11-16 04:56:54.000 +010091700EA2A000,"Bleep Bloop DEMO",nvdec;status-playable,playable,2021-02-13 00:20:53.000 +010089D011310000,"Blind Men",audout;status-playable,playable,2021-02-20 14:15:38.000 +0100743013D56000,"Blizzard® Arcade Collection",status-playable;nvdec,playable,2022-08-03 19:37:26.000 +0100F3500A20C000,"BlobCat",status-playable,playable,2021-04-23 17:09:30.000 +0100E1C00DB6C000,"Block-a-Pix Deluxe Demo",status-playable,playable,2021-02-13 00:37:39.000 +0100C6A01AD56000,"Bloo Kid",status-playable,playable,2024-05-01 17:18:04.000 +010055900FADA000,"Bloo Kid 2",status-playable,playable,2024-05-01 17:16:57.000 +0100EE5011DB6000,"Blood and Guts Bundle",status-playable,playable,2020-06-27 12:57:35.000 +01007E700D17E000,"Blood Waves",gpu;status-ingame,ingame,2022-07-18 13:04:46.000 +0100E060102AA000,"Blood will be Spilled",nvdec;status-playable,playable,2020-12-17 03:02:03.000 +01004B800AF5A000,"Bloodstained: Curse of the Moon",status-playable,playable,2020-09-04 10:42:17.000 +01004680124E6000,"Bloodstained: Curse of the Moon 2",status-playable,playable,2020-09-04 10:56:27.000 +010025A00DF2A000,"Bloodstained: Ritual of the Night",status-playable;nvdec;UE4,playable,2022-07-18 14:27:35.000 +0100E510143EC000,"Bloody Bunny, The Game",status-playable;nvdec;UE4,playable,2022-10-22 13:18:55.000 +0100B8400A1C6000,"Bloons TD 5",Needs Update;audio;gpu;services;status-boots,boots,2021-04-18 23:02:46.000 +01000EB01023E000,"Blossom Tales Demo",status-playable,playable,2021-02-13 14:22:53.000 +0100C1000706C000,"Blossom Tales: The Sleeping King",status-playable,playable,2022-07-18 16:43:07.000 +010073B010F6E000,"Blue Fire",status-playable;UE4,playable,2022-10-22 14:46:11.000 +0100721013510000,"Body of Evidence",status-playable,playable,2021-04-25 22:22:11.000 +0100AD1010CCE000,"Bohemian Killing",status-playable;vulkan-backend-bug,playable,2022-09-26 22:41:37.000 +010093700ECEC000,"Boku to Nurse no Kenshuu Nisshi",status-playable,playable,2022-11-21 20:38:34.000 +01001D900D9AC000,"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",slow;status-ingame;crash;Needs Update,ingame,2022-04-24 22:46:04.000 +0100317014B7C000,"Bomb Rush Cyberfunk",status-playable,playable,2023-09-28 19:51:57.000 +01007900080B6000,"Bomber Crew",status-playable,playable,2021-06-03 14:21:28.000 +0100A1F012948000,"Bomber Fox",nvdec;status-playable,playable,2021-04-19 17:58:13.000 +010087300445A000,"Bombslinger",services;status-menus,menus,2022-07-19 12:53:15.000 +01007A200F452000,"Book of Demons",status-playable,playable,2022-09-29 12:03:43.000 +010054500F564000,"Bookbound Brigade",status-playable,playable,2020-10-09 14:30:29.000 +01002E6013ED8000,"Boom Blaster",status-playable,playable,2021-03-24 10:55:56.000 +010081A00EE62000,"Boomerang Fu",status-playable,playable,2024-07-28 01:12:41.000 +010069F0135C4000,"Boomerang Fu Demo Version",demo;status-playable,playable,2021-02-13 14:38:13.000 +01009970122E4000,"Borderlands 3 Ultimate Edition",gpu;status-ingame,ingame,2024-07-15 04:38:14.000 +010064800F66A000,"Borderlands: Game of the Year Edition",slow;status-ingame;online-broken;ldn-untested,ingame,2023-07-23 21:10:36.000 +010096F00FF22000,"Borderlands: The Handsome Collection",status-playable,playable,2022-04-22 18:35:07.000 +010007400FF24000,"Borderlands: The Pre-Sequel",nvdec;status-playable,playable,2021-06-09 20:17:10.000 +01008E500AFF6000,"Boreal Blade",gpu;ldn-untested;online;status-ingame,ingame,2021-06-11 15:37:14.000 +010092C013FB8000,"BORIS THE ROCKET",status-playable,playable,2022-10-26 13:23:09.000 +010076F00EBE4000,"BOSSGARD",status-playable;online-broken,playable,2022-10-04 14:21:13.000 +010069B00EAC8000,"Bot Vice Demo",crash;demo;status-ingame,ingame,2021-02-13 14:52:42.000 +010081100FE08000,"Bouncy Bob 2",status-playable,playable,2020-07-14 16:51:53.000 +0100E1200DC1A000,"Bounty Battle",status-playable;nvdec,playable,2022-10-04 14:40:51.000 +0100B4700C57E000,"Bow to Blood: Last Captain Standing",slow;status-playable,playable,2020-10-23 10:51:21.000 +010040800BA8A000,"Box Align",crash;services;status-nothing,nothing,2020-04-03 17:26:56.000 +010018300D006000,"BOXBOY! + BOXGIRL!™",status-playable,playable,2020-11-08 01:11:54.000 +0100B7200E02E000,"BOXBOY! + BOXGIRL!™ Demo",demo;status-playable,playable,2021-02-13 14:59:08.000 +0100CA400B6D0000,"BQM -BlockQuest Maker-",online;status-playable,playable,2020-07-31 20:56:50.000 +0100E87017D0E000,"Bramble: The Mountain King",services-horizon;status-playable,playable,2024-03-06 09:32:17.000 +01000F5003068000,"Brave Dungeon + Dark Witch Story:COMBAT",status-playable,playable,2021-01-12 21:06:34.000 +01006DC010326000,"BRAVELY DEFAULT™ II",gpu;status-ingame;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26.000 +0100B6801137E000,"Bravely Default™ II Demo",gpu;status-ingame;crash;UE4;demo,ingame,2022-09-27 05:39:47.000 +010081501371E000,"BraveMatch",status-playable;UE4,playable,2022-10-26 13:32:15.000 +0100F60017D4E000,"Bravery and Greed",gpu;deadlock;status-boots,boots,2022-12-04 02:23:47.000 +0100A42004718000,"BRAWL",nvdec;slow;status-playable,playable,2020-06-04 14:23:18.000 +010068F00F444000,"Brawl Chess",status-playable;nvdec,playable,2022-10-26 13:59:17.000 +0100C6800B934000,"Brawlhalla",online;opengl;status-playable,playable,2021-06-03 18:26:09.000 +010060200A4BE000,"Brawlout",ldn-untested;online;status-playable,playable,2021-06-04 17:35:35.000 +0100C1B00E1CA000,"Brawlout Demo",demo;status-playable,playable,2021-02-13 22:46:53.000 +010022C016DC8000,"Breakout: Recharged",slow;status-ingame,ingame,2022-11-06 15:32:57.000 +01000AA013A5E000,"Breathedge",UE4;nvdec;status-playable,playable,2021-05-06 15:44:28.000 +01003D50100F4000,"Breathing Fear",status-playable,playable,2020-07-14 15:12:29.000 +010026800BB06000,"Brick Breaker",nvdec;online;status-playable,playable,2020-12-15 18:26:23.000 +01002AD0126AE000,"Bridge Constructor: The Walking Dead",gpu;slow;status-ingame,ingame,2020-12-11 17:31:32.000 +01000B1010D8E000,"Bridge! 3",status-playable,playable,2020-10-08 20:47:24.000 +010011000EA7A000,"BRIGANDINE The Legend of Runersia",status-playable,playable,2021-06-20 06:52:25.000 +0100703011258000,"BRIGANDINE The Legend of Runersia Demo",status-playable,playable,2021-02-14 14:44:10.000 +01000BF00BE40000,"Bring Them Home",UE4;status-playable,playable,2021-04-12 14:14:43.000 +010060A00B53C000,"Broforce",ldn-untested;online;status-playable,playable,2021-05-28 12:23:38.000 +0100EDD0068A6000,"Broken Age",status-playable,playable,2021-06-04 17:40:32.000 +0100A5800F6AC000,"Broken Lines",status-playable,playable,2020-10-16 00:01:37.000 +01001E60085E6000,"Broken Sword 5 - the Serpent's Curse",status-playable,playable,2021-06-04 17:28:59.000 +0100F19011226000,"Brotherhood United Demo",demo;status-playable,playable,2021-02-14 21:10:57.000 +01000D500D08A000,"Brothers: A Tale of Two Sons",status-playable;nvdec;UE4,playable,2022-07-19 14:02:22.000 +0100B2700E90E000,"Brunch Club",status-playable,playable,2020-06-24 13:54:07.000 +010010900F7B4000,"Bubble Bobble 4 Friends: The Baron is Back!",nvdec;status-playable,playable,2021-06-04 15:27:55.000 +0100DBE00C554000,"Bubsy: Paws on Fire!",slow;status-ingame,ingame,2023-08-24 02:44:51.000 +0100089010A92000,"Bucket Knight",crash;status-ingame,ingame,2020-09-04 13:11:24.000 +0100F1B010A90000,"Bucket Knight demo",demo;status-playable,playable,2021-02-14 21:23:09.000 +01000D200AC0C000,"Bud Spencer & Terence Hill - Slaps And Beans",status-playable,playable,2022-07-17 12:37:00.000 +010051A00E99E000,"Bug Fables: The Everlasting Sapling",status-playable,playable,2020-06-09 11:27:00.000 +01003DD00D658000,"Bulletstorm: Duke of Switch Edition",status-playable;nvdec,playable,2022-03-03 08:30:24.000 +01006BB00E8FA000,"BurgerTime Party!",slow;status-playable,playable,2020-11-21 14:11:53.000 +01005780106E8000,"BurgerTime Party! Demo",demo;status-playable,playable,2021-02-14 21:34:16.000 +010078C00DB40000,"Buried Stars",status-playable,playable,2020-09-07 14:11:58.000 +0100DBF01000A000,"Burnout™ Paradise Remastered",nvdec;online;status-playable,playable,2021-06-13 02:54:46.000 +010066F00C76A000,"Bury me, my Love",status-playable,playable,2020-11-07 12:47:37.000 +010030D012FF6000,"Bus Driver Simulator",status-playable,playable,2022-10-17 13:55:27.000 +0100A9101418C000,"BUSTAFELLOWS",nvdec;status-playable,playable,2020-10-17 20:04:41.000 +0100177005C8A000,"BUTCHER",status-playable,playable,2021-01-11 18:50:17.000 +01000B900D8B0000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda",slow;status-playable;nvdec,playable,2024-04-01 22:43:40.000 +010065700EE06000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda Demo",demo;gpu;nvdec;status-ingame,ingame,2021-02-14 21:48:15.000 +01005C00117A8000,"Café Enchanté",status-playable,playable,2020-11-13 14:54:25.000 +010060400D21C000,"Cafeteria Nipponica Demo",demo;status-playable,playable,2021-02-14 22:11:35.000 +0100699012F82000,"Cake Bash Demo",crash;demo;status-ingame,ingame,2021-02-14 22:21:15.000 +01004FD00D66A000,"Caladrius Blaze",deadlock;status-nothing;nvdec,nothing,2022-12-07 16:44:37.000 +01004B500AB88000,"Calculation Castle : Greco's Ghostly Challenge Addition""""",32-bit;status-playable,playable,2020-11-01 23:40:11.000 +010045500B212000,"Calculation Castle : Greco's Ghostly Challenge Division """"",32-bit;status-playable,playable,2020-11-01 23:54:55.000 +0100ECE00B210000,"Calculation Castle : Greco's Ghostly Challenge Multiplication """"",32-bit;status-playable,playable,2020-11-02 00:04:33.000 +0100A6500B176000,"Calculation Castle : Greco's Ghostly Challenge Subtraction """"",32-bit;status-playable,playable,2020-11-01 23:47:42.000 +010004701504A000,"Calculator",status-playable,playable,2021-06-11 13:27:20.000 +010013A00E750000,"Calico",status-playable,playable,2022-10-17 14:44:28.000 +010046000EE40000,"Call of Cthulhu",status-playable;nvdec;UE4,playable,2022-12-18 03:08:30.000 +0100B4700BFC6000,"Call of Juarez: Gunslinger",gpu;status-ingame;nvdec,ingame,2022-09-17 16:49:46.000 +0100593008BDC000,"Can't Drive This",status-playable,playable,2022-10-22 14:55:17.000 +0100E4600B166000,"Candle: The Power of the Flame",nvdec;status-playable,playable,2020-05-26 12:10:20.000 +01001E0013208000,"Capcom Arcade Stadium",status-playable,playable,2021-03-17 05:45:14.000 +010094E00B52E000,"Capcom Beat 'Em Up Bundle",status-playable,playable,2020-03-23 18:31:24.000 +0100F6400A77E000,"CAPCOM BELT ACTION COLLECTION",status-playable;online;ldn-untested,playable,2022-07-21 20:51:23.000 +01009BF0072D4000,"Captain Toad™: Treasure Tracker",32-bit;status-playable,playable,2024-04-25 00:50:16.000 +01002C400B6B6000,"Captain Toad™: Treasure Tracker Demo",32-bit;demo;status-playable,playable,2021-02-14 22:36:09.000 +0100EAE010560000,"Captain Tsubasa: Rise of New Champions",status-playable;online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50.000 +01002320137CC000,"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",slow;status-playable,playable,2021-02-14 22:45:35.000 +010048800D95C000,"Car Mechanic Manager",status-playable,playable,2020-07-23 18:50:17.000 +01007BD00AE70000,"Car Quest",deadlock;status-menus,menus,2021-11-18 08:59:18.000 +0100DA70115E6000,"Caretaker",status-playable,playable,2022-10-04 14:52:24.000 +0100DD6014870000,"Cargo Crew Driver",status-playable,playable,2021-04-19 12:54:22.000 +010088C0092FE000,"Carnival Games®",status-playable;nvdec,playable,2022-07-21 21:01:22.000 +01005F5011AC4000,"Carnivores: Dinosaur Hunt",status-playable,playable,2022-12-14 18:46:06.000 +0100B1600E9AE000,"CARRION",crash;status-nothing,nothing,2020-08-13 17:15:12.000 +01008D1001512000,"Cars 3: Driven to Win",gpu;status-ingame,ingame,2022-07-21 21:21:05.000 +0100810012A1A000,"Carto",status-playable,playable,2022-09-04 15:37:06.000 +0100085003A2A000,"Cartoon Network Battle Crashers",status-playable,playable,2022-07-21 21:55:40.000 +0100C4C0132F8000,"CASE 2: Animatronics Survival",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03.000 +010066F01A0E0000,"Cassette Beasts",status-playable,playable,2024-07-22 20:38:43.000 +010001300D14A000,"Castle Crashers Remastered",gpu;status-boots,boots,2024-08-10 09:21:20.000 +0100F6D01060E000,"Castle Crashers Remastered Demo",gpu;status-boots;demo,boots,2022-04-10 10:57:10.000 +01003C100445C000,"Castle of Heart",status-playable;nvdec,playable,2022-07-21 23:10:45.000 +0100F5500FA0E000,"Castle of no Escape 2",status-playable,playable,2022-09-13 13:51:42.000 +0100DA2011F18000,"Castle Pals",status-playable,playable,2021-03-04 21:00:33.000 +010097C00AB66000,"CastleStorm",status-playable;nvdec,playable,2022-07-21 22:49:14.000 +010007400EB64000,"CastleStorm II",UE4;crash;nvdec;status-boots,boots,2020-10-25 11:22:44.000 +01001A800D6BC000,"Castlevania Anniversary Collection",audio;status-playable,playable,2020-05-23 11:40:29.000 +010076000C86E000,"Cat Girl Without Salad: Amuse-Bouche",status-playable,playable,2022-09-03 13:01:47.000 +0100A2F006FBE000,"Cat Quest",status-playable,playable,2020-04-02 23:09:32.000 +01008BE00E968000,"Cat Quest II",status-playable,playable,2020-07-06 23:52:09.000 +0100E86010220000,"Cat Quest II Demo",demo;status-playable,playable,2021-02-15 14:11:57.000 +0100BAE0077E4000,"Catherine Full Body for Nintendo Switch (JP)",Needs Update;gpu;status-ingame,ingame,2021-02-21 18:06:11.000 +0100BF00112C0000,"Catherine: Full Body",status-playable;nvdec,playable,2023-04-02 11:00:37.000 +010004400B28A000,"Cattails",status-playable,playable,2021-06-03 14:36:57.000 +0100B7D0022EE000,"Cave Story+",status-playable,playable,2020-05-22 09:57:25.000 +01001A100C0E8000,"Caveblazers",slow;status-ingame,ingame,2021-06-09 17:57:28.000 +01006DB004566000,"Caveman Warriors",status-playable,playable,2020-05-22 11:44:20.000 +010078700B2CC000,"Caveman Warriors Demo",demo;status-playable,playable,2021-02-15 14:44:08.000 +01002B30028F6000,"Celeste",status-playable,playable,2020-06-17 10:14:40.000 +01006B000A666000,"Cendrillon palikA",gpu;status-ingame;nvdec,ingame,2022-07-21 22:52:24.000 +01007600115CE000,"CHAOS CODE -NEW SIGN OF CATASTROPHE-",status-boots;crash;nvdec,boots,2022-04-04 12:24:21.000 +0100957016B90000,"CHAOS;HEAD NOAH",status-playable,playable,2022-06-02 22:57:19.000 +0100F52013A66000,"Charge Kid",gpu;status-boots;audout,boots,2024-02-11 01:17:47.000 +0100DE200C350000,"Chasm",status-playable,playable,2020-10-23 11:03:43.000 +010034301A556000,"Chasm: The Rift",gpu;status-ingame,ingame,2024-04-29 19:02:48.000 +0100A5900472E000,"Chess Ultra",status-playable;UE4,playable,2023-08-30 23:06:31.000 +0100E3C00A118000,"Chicken Assassin: Reloaded",status-playable,playable,2021-02-20 13:29:01.000 +0100713010E7A000,"Chicken Police – Paint it RED!",nvdec;status-playable,playable,2020-12-10 15:10:11.000 +0100F6C00A016000,"Chicken Range",status-playable,playable,2021-04-23 12:14:23.000 +01002E500E3EE000,"Chicken Rider",status-playable,playable,2020-05-22 11:31:17.000 +0100CAC011C3A000,"Chickens Madness DEMO",UE4;demo;gpu;nvdec;status-ingame,ingame,2021-02-15 15:02:10.000 +01007D000AD8A000,"Child of Light® Ultimate Edition",nvdec;status-playable,playable,2020-12-16 10:23:10.000 +01002DE00C250000,"Children of Morta",gpu;status-ingame;nvdec,ingame,2022-09-13 17:48:47.000 +0100C1A00AC3E000,"Children of Zodiarcs",status-playable,playable,2020-10-04 14:23:33.000 +010046F012A04000,"Chinese Parents",status-playable,playable,2021-04-08 12:56:41.000 +01005A001489A000,"Chiptune Arrange Sound(DoDonPachi Resurrection)",status-ingame;32-bit;crash,ingame,2024-01-25 14:37:32.000 +01006A30124CA000,"Chocobo GP",gpu;status-ingame;crash,ingame,2022-06-04 14:52:18.000 +0100BF600BF26000,"Chocobo's Mystery Dungeon EVERY BUDDY!",slow;status-playable,playable,2020-05-26 13:53:13.000 +01000BA0132EA000,"Choices That Matter: And The Sun Went Out",status-playable,playable,2020-12-17 15:44:08.000 +,"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",gpu;nvdec;status-ingame,ingame,2020-09-28 17:58:04.000 +010039A008E76000,"ChromaGun",status-playable,playable,2020-05-26 12:56:42.000 +010006800E13A000,"Chronos: Before the Ashes",UE4;gpu;nvdec;status-ingame,ingame,2020-12-11 22:16:35.000 +010039700BA7E000,"Circle of Sumo",status-playable,playable,2020-05-22 12:45:21.000 +01008FA00D686000,"Circuits",status-playable,playable,2022-09-19 11:52:50.000 +0100D8800B87C000,"Cities: Skylines - Nintendo Switch™ Edition",status-playable,playable,2020-12-16 10:34:57.000 +0100E4200D84E000,"Citizens of Space",gpu;status-boots,boots,2023-10-22 06:45:44.000 +0100D9C012900000,"Citizens Unite!: Earth x Space",gpu;status-ingame,ingame,2023-10-22 06:44:19.000 +01005E501284E000,"City Bus Driving Simulator",status-playable,playable,2021-06-15 21:25:59.000 +0100A3A00CC7E000,"CLANNAD",status-playable,playable,2021-06-03 17:01:02.000 +01007B501372C000,"CLANNAD Side Stories",status-playable,playable,2022-10-26 15:03:04.000 +01005ED0107F4000,"Clash Force",status-playable,playable,2022-10-01 23:45:48.000 +010009300AA6C000,"Claybook",slow;status-playable;nvdec;online;UE4,playable,2022-07-22 11:11:34.000 +010058900F52E000,"Clea",crash;status-ingame,ingame,2020-12-15 16:22:56.000 +010045E0142A4000,"Clea 2",status-playable,playable,2021-04-18 14:25:18.000 +01008C100C572000,"Clock Zero ~Shuuen no Ichibyou~ Devote",status-playable;nvdec,playable,2022-12-04 22:19:14.000 +0100DF9013AD4000,"Clocker",status-playable,playable,2021-04-05 15:05:13.000 +0100B7200DAC6000,"Close to the Sun",status-boots;crash;nvdec;UE4,boots,2021-11-04 09:19:41.000 +010047700D540000,"Clubhouse Games™: 51 Worldwide Classics",status-playable;ldn-works,playable,2024-05-21 16:12:57.000 +0100C1401CEDC000,"Clue",crash;online;status-menus,menus,2020-11-10 09:23:48.000 +010085A00821A000,"ClusterPuck 99",status-playable,playable,2021-01-06 00:28:12.000 +010096900A4D2000,"Clustertruck",slow;status-ingame,ingame,2021-02-19 21:07:09.000 +01005790110F0000,"Cobra Kai: The Karate Kid Saga Continues",status-playable,playable,2021-06-17 15:59:13.000 +01002E700C366000,"COCOON",gpu;status-ingame,ingame,2024-03-06 11:33:08.000 +010034E005C9C000,"Code of Princess EX",nvdec;online;status-playable,playable,2021-06-03 10:50:13.000 +010086100CDCA000,"CODE SHIFTER",status-playable,playable,2020-08-09 15:20:55.000 +010002400F408000,"Code: Realize ~Future Blessings~",status-playable;nvdec,playable,2023-03-31 16:57:47.000 +0100CF800C810000,"Coffee Crisis",status-playable,playable,2021-02-20 12:34:52.000 +010066200E1E6000,"Coffee Talk",status-playable,playable,2020-08-10 09:48:44.000 +0100178009648000,"Coffin Dodgers",status-playable,playable,2021-02-20 14:57:41.000 +010035B01706E000,"Cold Silence",cpu;status-nothing;crash,nothing,2024-07-11 17:06:14.000 +010083E00F40E000,"Collar X Malice",status-playable;nvdec,playable,2022-10-02 11:51:56.000 +0100E3B00F412000,"Collar X Malice -Unlimited-",status-playable;nvdec,playable,2022-10-04 15:30:40.000 +01002A600D7FC000,"Collection of Mana",status-playable,playable,2020-10-19 19:29:45.000 +0100B77012266000,"COLLECTION of SaGa FINAL FANTASY LEGEND",status-playable,playable,2020-12-30 19:11:16.000 +010030800BC36000,"Collidalot",status-playable;nvdec,playable,2022-09-13 14:09:27.000 +0100CA100C0BA000,"Color Zen",status-playable,playable,2020-05-22 10:56:17.000 +010039B011312000,"Colorgrid",status-playable,playable,2020-10-04 01:50:52.000 +0100A7000BD28000,"Coloring Book",status-playable,playable,2022-07-22 11:17:05.000 +010020500BD86000,"Colors Live",gpu;services;status-boots;crash,boots,2023-02-26 02:51:07.000 +0100E2F0128B4000,"Colossus Down",status-playable,playable,2021-02-04 20:49:50.000 +0100C4D00D16A000,"Commander Keen in Keen Dreams",gpu;status-ingame,ingame,2022-08-04 20:34:20.000 +0100E400129EC000,"Commander Keen in Keen Dreams: Definitive Edition",status-playable,playable,2021-05-11 19:33:54.000 +010065A01158E000,"Commandos 2 - HD Remaster",gpu;status-ingame;nvdec,ingame,2022-08-10 21:52:27.000 +010015801308E000,"Conarium",UE4;nvdec;status-playable,playable,2021-04-26 17:57:53.000 +0100971011224000,"Concept Destruction",status-playable,playable,2022-09-29 12:28:56.000 +010043700C9B0000,"Conduct TOGETHER!",nvdec;status-playable,playable,2021-02-20 12:59:00.000 +01007EF00399C000,"Conga Master Party!",status-playable,playable,2020-05-22 13:22:24.000 +0100A5600FAC0000,"Construction Simulator 3 - Console Edition",status-playable,playable,2023-02-06 09:31:23.000 +0100A330022C2000,"Constructor Plus",status-playable,playable,2020-05-26 12:37:40.000 +0100DCA00DA7E000,"Contra Anniversary Collection",status-playable,playable,2022-07-22 11:30:12.000 +0100F2600D710000,"CONTRA: ROGUE CORPS",crash;nvdec;regression;status-menus,menus,2021-01-07 13:23:35.000 +0100B8200ECA6000,"CONTRA: ROGUE CORPS Demo",gpu;status-ingame,ingame,2022-09-04 16:46:52.000 +01007D701298A000,"Contraptions",status-playable,playable,2021-02-08 18:40:50.000 +0100041013360000,"Control Ultimate Edition - Cloud Version",Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:34:06.000 +010058800E90A000,"Convoy: A Tactical Roguelike",status-playable,playable,2020-10-15 14:43:50.000 +0100B82010B6C000,"Cook, Serve, Delicious! 3?!",status-playable,playable,2022-10-09 12:09:34.000 +010060700EFBA000,"Cooking Mama: Cookstar",status-menus;crash;loader-allocator,menus,2021-11-20 03:19:35.000 +01001E400FD58000,"Cooking Simulator",status-playable,playable,2021-04-18 13:25:23.000 +0100DF9010206000,"Cooking Tycoons - 3 in 1 Bundle",status-playable,playable,2020-11-16 22:44:26.000 +01005350126E0000,"Cooking Tycoons 2 - 3 in 1 Bundle",status-playable,playable,2020-11-16 22:19:33.000 +0100C5A0115C4000,"CopperBell",status-playable,playable,2020-10-04 15:54:36.000 +010016400B1FE000,"Corpse Party: Blood Drive",nvdec;status-playable,playable,2021-03-01 12:44:23.000 +0100CCB01B1A0000,"COSMIC FANTASY COLLECTION",status-ingame,ingame,2024-05-21 17:56:37.000 +010067C00A776000,"Cosmic Star Heroine",status-playable,playable,2021-02-20 14:30:47.000 +01003DD00F94A000,"COTTOn Reboot! [ コットン リブート! ]",status-playable,playable,2022-05-24 16:29:24.000 +,"Cotton/Guardian Saturn Tribute Games",gpu;status-boots,boots,2022-11-27 21:00:51.000 +01000E301107A000,"Couch Co-Op Bundle Vol. 2",status-playable;nvdec,playable,2022-10-02 12:04:21.000 +0100C1E012A42000,"Country Tales",status-playable,playable,2021-06-17 16:45:39.000 +01003370136EA000,"Cozy Grove",gpu;status-ingame,ingame,2023-07-30 22:22:19.000 +010073401175E000,"Crash Bandicoot™ 4: It’s About Time",status-playable;nvdec;UE4,playable,2024-03-17 07:13:45.000 +0100D1B006744000,"Crash Bandicoot™ N. Sane Trilogy",status-playable,playable,2024-02-11 11:38:14.000 +010007900FCE2000,"Crash Drive 2",online;status-playable,playable,2020-12-17 02:45:46.000 +010046600BD0E000,"Crash Dummy",nvdec;status-playable,playable,2020-05-23 11:12:43.000 +0100BF200CD74000,"Crashbots",status-playable,playable,2022-07-22 13:50:52.000 +010027100BD16000,"Crashlands",status-playable,playable,2021-05-27 20:30:06.000 +0100F9F00C696000,"Crash™ Team Racing Nitro-Fueled",gpu;status-ingame;nvdec;online-broken,ingame,2023-06-25 02:40:17.000 +0100BF7006BCA000,"Crawl",status-playable,playable,2020-05-22 10:16:05.000 +0100C66007E96000,"Crayola Scoot",status-playable;nvdec,playable,2022-07-22 14:01:55.000 +01005BA00F486000,"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",status-playable,playable,2021-07-21 10:41:33.000 +0100D470106DC000,"CRAYON SHINCHAN The Storm Called FLAMING KASUKABE RUNNER!!",services;status-menus,menus,2020-03-20 14:00:57.000 +01006BC00C27A000,"Crazy Strike Bowling EX",UE4;gpu;nvdec;status-ingame,ingame,2020-08-07 18:15:59.000 +0100F9900D8C8000,"Crazy Zen Mini Golf",status-playable,playable,2020-08-05 14:00:00.000 +0100B0E010CF8000,"Creaks",status-playable,playable,2020-08-15 12:20:52.000 +01007C600D778000,"Creature in the Well",UE4;gpu;status-ingame,ingame,2020-11-16 12:52:40.000 +0100A19011EEE000,"Creepy Tale",status-playable,playable,2020-12-15 21:58:03.000 +01005C2013B00000,"Cresteaju",gpu;status-ingame,ingame,2021-03-24 10:46:06.000 +010022D00D4F0000,"Cricket 19",gpu;status-ingame,ingame,2021-06-14 14:56:07.000 +0100387017100000,"Cricket 22 The Official Game Of The Ashes",status-boots;crash,boots,2023-10-18 08:01:57.000 +01005640080B0000,"Crimsonland",status-playable,playable,2021-05-27 20:50:54.000 +0100B0400EBC4000,"Cris Tales",crash;status-ingame,ingame,2021-07-29 15:10:53.000 +01004BC0166CC000,"CRISIS CORE –FINAL FANTASY VII– REUNION",status-playable,playable,2022-12-19 15:53:59.000 +01004F800C4DA000,"Croc's World",status-playable,playable,2020-05-22 11:21:09.000 +01009DB00DE12000,"Croc's World 2",status-playable,playable,2020-12-16 20:01:40.000 +010025200FC54000,"Croc's World 3",status-playable,playable,2020-12-30 18:53:26.000 +01000F0007D92000,"Croixleur Sigma",status-playable;online,playable,2022-07-22 14:26:54.000 +01003D90058FC000,"CrossCode",status-playable,playable,2024-02-17 10:23:19.000 +0100B1E00AA56000,"Crossing Souls",nvdec;status-playable,playable,2021-02-20 15:42:54.000 +0100059012BAE000,"Crown Trick",status-playable,playable,2021-06-16 19:36:29.000 +0100B41013C82000,"Cruis'n Blast",gpu;status-ingame,ingame,2023-07-30 10:33:47.000 +01000CC01C108000,"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",status-playable;demo,playable,2023-08-06 05:33:21.000 +0100CEA007D08000,"Crypt of the NecroDancer: Nintendo Switch Edition",status-playable;nvdec,playable,2022-11-01 09:52:06.000 +0100582010AE0000,"Crysis 2 Remastered",deadlock;status-menus,menus,2023-09-21 10:46:17.000 +0100CD3010AE2000,"Crysis 3 Remastered",deadlock;status-menus,menus,2023-09-10 16:03:50.000 +0100E66010ADE000,"Crysis Remastered",status-menus;nvdec,menus,2024-08-13 05:23:24.000 +0100972008234000,"Crystal Crisis",nvdec;status-playable,playable,2021-02-20 13:52:44.000 +01006FA012FE0000,"Cthulhu Saves Christmas",status-playable,playable,2020-12-14 00:58:55.000 +010001600D1E8000,"Cube Creator X",status-menus;crash,menus,2021-11-25 08:53:28.000 +010082E00F1CE000,"Cubers: Arena",status-playable;nvdec;UE4,playable,2022-10-04 16:05:40.000 +010040D011D04000,"Cubicity",status-playable,playable,2021-06-14 14:19:51.000 +0100A5C00D162000,"Cuphead",status-playable,playable,2022-02-01 22:45:55.000 +0100F7E00DFC8000,"Cupid Parasite",gpu;status-ingame,ingame,2023-08-21 05:52:36.000 +010054501075C000,"Curious Cases",status-playable,playable,2020-08-10 09:30:48.000 +0100D4A0118EA000,"Curse of the Dead Gods",status-playable,playable,2022-08-30 12:25:38.000 +0100CE5014026000,"Curved Space",status-playable,playable,2023-01-14 22:03:50.000 +0100C1300DE74000,"Cyber Protocol",nvdec;status-playable,playable,2020-09-28 14:47:40.000 +0100C1F0141AA000,"Cyber Shadow",status-playable,playable,2022-07-17 05:37:41.000 +01006B9013672000,"Cybxus Hearts",gpu;slow;status-ingame,ingame,2022-01-15 05:00:49.000 +010063100B2C2000,"Cytus α",nvdec;status-playable,playable,2021-02-20 13:40:46.000 +0100B6400CA56000,"DAEMON X MACHINA™",UE4;audout;ldn-untested;nvdec;status-playable,playable,2021-06-09 19:22:29.000 +010061300DF48000,"Dairoku: Ayakashimori",status-nothing;Needs Update;loader-allocator,nothing,2021-11-30 05:09:38.000 +0100BD2009A1C000,"Damsel",status-playable,playable,2022-09-06 11:54:39.000 +0100BFC002B4E000,"Dandara: Trials of Fear Edition",status-playable,playable,2020-05-26 12:42:33.000 +0100DFB00D808000,"Dandy Dungeon - Legend of Brave Yamada -",status-playable,playable,2021-01-06 09:48:47.000 +01003ED0099B0000,"Danger Mouse: The Danger Games",status-boots;crash;online,boots,2022-07-22 15:49:45.000 +0100EFA013E7C000,"Danger Scavenger",nvdec;status-playable,playable,2021-04-17 15:53:04.000 +0100417007F78000,"Danmaku Unlimited 3",status-playable,playable,2020-11-15 00:48:35.000 +,"Darius Cozmic Collection",status-playable,playable,2021-02-19 20:59:06.000 +010059C00BED4000,"Darius Cozmic Collection Special Edition",status-playable,playable,2022-07-22 16:26:50.000 +010015800F93C000,"Dariusburst - Another Chronicle EX+",online;status-playable,playable,2021-04-05 14:21:43.000 +01003D301357A000,"Dark Arcana: The Carnival",gpu;slow;status-ingame,ingame,2022-02-19 08:52:28.000 +010083A00BF6C000,"Dark Devotion",status-playable;nvdec,playable,2022-08-09 09:41:18.000 +0100BFF00D5AE000,"Dark Quest 2",status-playable,playable,2020-11-16 21:34:52.000 +01004AB00A260000,"DARK SOULS™: REMASTERED",gpu;status-ingame;nvdec;online-broken,ingame,2024-04-09 19:47:58.000 +01001FA0034E2000,"Dark Witch Music Episode: Rudymical",status-playable,playable,2020-05-22 09:44:44.000 +01008F1008DA6000,"Darkest Dungeon",status-playable;nvdec,playable,2022-07-22 18:49:18.000 +0100F2300D4BA000,"Darksiders Genesis",status-playable;nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25.000 +010071800BA98000,"Darksiders II Deathinitive Edition",gpu;status-ingame;nvdec;online-broken,ingame,2024-06-26 00:37:25.000 +0100E1400BA96000,"Darksiders Warmastered Edition",status-playable;nvdec,playable,2023-03-02 18:08:09.000 +010033500B7B6000,"Darkwood",status-playable,playable,2021-01-08 21:24:06.000 +0100440012FFA000,"DARQ Complete Edition",audout;status-playable,playable,2021-04-07 15:26:21.000 +0100BA500B660000,"Darts Up",status-playable,playable,2021-04-14 17:22:22.000 +0100F0B0081DA000,"Dawn of the Breakers",status-menus;online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03.000 +0100FCF00F6CC000,"Day and Night",status-playable,playable,2020-12-17 12:30:51.000 +0100D0A009310000,"de Blob",nvdec;status-playable,playable,2021-01-06 17:34:46.000 +010034E00A114000,"de Blob 2",nvdec;status-playable,playable,2021-01-06 13:00:16.000 +01008E900471E000,"De Mambo",status-playable,playable,2021-04-10 12:39:40.000 +01004C400CF96000,"Dead by Daylight",status-boots;nvdec;online-broken;UE4,boots,2022-09-13 14:32:13.000 +0100646009FBE000,"Dead Cells",status-playable,playable,2021-09-22 22:18:49.000 +01004C500BD40000,"Dead End Job",status-playable;nvdec,playable,2022-09-19 12:48:44.000 +01009CC00C97C000,"DEAD OR ALIVE Xtreme 3 Scarlet",status-playable,playable,2022-07-23 17:05:06.000 +0100A5000F7AA000,"DEAD OR SCHOOL",status-playable;nvdec,playable,2022-09-06 12:04:09.000 +0100A24011F52000,"Dead Z Meat",UE4;services;status-ingame,ingame,2021-04-14 16:50:16.000 +010095A011A14000,"Deadly Days",status-playable,playable,2020-11-27 13:38:55.000 +0100BAC011928000,"Deadly Premonition 2: A Blessing In Disguise",status-playable,playable,2021-06-15 14:12:36.000 +0100EBE00F22E000,"Deadly Premonition Origins",32-bit;status-playable;nvdec,playable,2024-03-25 12:47:46.000 +,"Dear Magi - Mahou Shounen Gakka -",status-playable,playable,2020-11-22 16:45:16.000 +01000D60126B6000,"Death and Taxes",status-playable,playable,2020-12-15 20:27:49.000 +010012B011AB2000,"Death Come True",nvdec;status-playable,playable,2021-06-10 22:30:49.000 +0100F3B00CF32000,"Death Coming",status-nothing;crash,nothing,2022-02-06 07:43:03.000 +0100AEC013DDA000,"Death end re;Quest",status-playable,playable,2023-07-09 12:19:54.000 +0100423009358000,"Death Road to Canada",gpu;audio;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:26.000 +010085900337E000,"Death Squared",status-playable,playable,2020-12-04 13:00:15.000 +0100A51013550000,"Death Tales",status-playable,playable,2020-12-17 10:55:52.000 +0100492011A8A000,"Death's Hangover",gpu;status-boots,boots,2023-08-01 22:38:06.000 +01009120119B4000,"Deathsmiles I・II",status-playable,playable,2024-04-08 19:29:00.000 +010034F00BFC8000,"Debris Infinity",nvdec;online;status-playable,playable,2021-05-28 12:14:39.000 +010027700FD2E000,"Decay of Logos",status-playable;nvdec,playable,2022-09-13 14:42:13.000 +01002CC0062B8000,"DEEMO",status-playable,playable,2022-07-24 11:34:33.000 +01008B10132A2000,"DEEMO -Reborn-",status-playable;nvdec;online-broken,playable,2022-10-17 15:18:11.000 +010026800FA88000,"Deep Diving Adventures",status-playable,playable,2022-09-22 16:43:37.000 +0100FAF009562000,"Deep Ones",services;status-nothing,nothing,2020-04-03 02:54:19.000 +0100C3E00D68E000,"Deep Sky Derelicts: Definitive Edition",status-playable,playable,2022-09-27 11:21:08.000 +01000A700F956000,"Deep Space Rush",status-playable,playable,2020-07-07 23:30:33.000 +0100961011BE6000,"DeepOne",services-horizon;status-nothing;Needs Update,nothing,2024-01-18 15:01:05.000 +01008BB00F824000,"Defenders of Ekron: Definitive Edition",status-playable,playable,2021-06-11 16:31:03.000 +0100CDE0136E6000,"Defentron",status-playable,playable,2022-10-17 15:47:56.000 +010039300BDB2000,"Defunct",status-playable,playable,2021-01-08 21:33:46.000 +010067900B9C4000,"Degrees of Separation",status-playable,playable,2021-01-10 13:40:04.000 +010071C00CBA4000,"Dei Gratia no Rashinban",crash;status-nothing,nothing,2021-07-13 02:25:32.000 +010092E00E7F4000,"Deleveled",slow;status-playable,playable,2020-12-15 21:02:29.000 +010023800D64A000,"DELTARUNE Chapter 1&2",status-playable,playable,2023-01-22 04:47:44.000 +010038B01D2CA000,"Dementium: The Ward",status-boots;crash,boots,2024-09-02 08:28:14.000 +0100AB600ACB4000,"Demetrios - The BIG Cynical Adventure",status-playable,playable,2021-06-04 12:01:01.000 +010099D00D1A4000,"Demolish & Build 2018",status-playable,playable,2021-06-13 15:27:26.000 +010084600F51C000,"Demon Pit",status-playable;nvdec,playable,2022-09-19 13:35:15.000 +0100309016E7A000,"Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",status-playable;UE4,playable,2024-08-08 04:51:49.000 +0100A2B00BD88000,"Demon's Crystals",status-nothing;crash;regression,nothing,2022-12-07 16:33:17.000 +0100E29013818000,"Demon's Rise - Lords of Chaos",status-playable,playable,2021-04-06 16:20:06.000 +0100C3501094E000,"Demon's Rise - War for the Deep",status-playable,playable,2020-07-29 12:26:27.000 +0100161011458000,"Demon's Tier+",status-playable,playable,2021-06-09 17:25:36.000 +0100BE800E6D8000,"DEMON'S TILT",status-playable,playable,2022-09-19 13:22:46.000 +010000401313A000,"Demong Hunter",status-playable,playable,2020-12-12 15:27:08.000 +0100BC501355A000,"Densha de go!! Hashirou Yamanote Sen",status-playable;nvdec;UE4,playable,2023-11-09 07:47:58.000 +0100C9100FAE2000,"Depixtion",status-playable,playable,2020-10-10 18:52:37.000 +01000BF00B6BC000,"Deployment",slow;status-playable;online-broken,playable,2022-10-17 16:23:59.000 +010023600C704000,"Deponia",nvdec;status-playable,playable,2021-01-26 17:17:19.000 +0100ED700469A000,"Deru - The Art of Cooperation",status-playable,playable,2021-01-07 16:59:59.000 +0100D4600D0E4000,"Descenders",gpu;status-ingame,ingame,2020-12-10 15:22:36.000 +,"Desire remaster ver.",crash;status-boots,boots,2021-01-17 02:34:37.000 +010069500DD86000,"Destiny Connect: Tick-Tock Travelers",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 12:20:36.000 +01008BB011ED6000,"Destrobots",status-playable,playable,2021-03-06 14:37:05.000 +01009E701356A000,"Destroy All Humans!",gpu;status-ingame;nvdec;UE4,ingame,2023-01-14 22:23:53.000 +010030600E65A000,"Detective Dolittle",status-playable,playable,2021-03-02 14:03:59.000 +01009C0009842000,"Detective Gallo",status-playable;nvdec,playable,2022-07-24 11:51:04.000 +,"Detective Jinguji Saburo Prism of Eyes",status-playable,playable,2020-10-02 21:54:41.000 +010007500F27C000,"Detective Pikachu™ Returns",status-playable,playable,2023-10-07 10:24:59.000 +010031B00CF66000,"Devil Engine",status-playable,playable,2021-06-04 11:54:30.000 +01002F000E8F2000,"Devil Kingdom",status-playable,playable,2023-01-31 08:58:44.000 +0100E8000D5B8000,"Devil May Cry",nvdec;status-playable,playable,2021-01-04 19:43:08.000 +01007CF00D5BA000,"Devil May Cry 2",status-playable;nvdec,playable,2023-01-24 23:03:20.000 +01007B600D5BC000,"Devil May Cry 3 Special Edition",status-playable;nvdec,playable,2024-07-08 12:33:23.000 +01003C900EFF6000,"Devil Slayer Raksasi",status-playable,playable,2022-10-26 19:42:32.000 +01009EA00A320000,"Devious Dungeon",status-playable,playable,2021-03-04 13:03:06.000 +01003F601025E000,"Dex",nvdec;status-playable,playable,2020-08-12 16:48:12.000 +010044000CBCA000,"Dexteritrip",status-playable,playable,2021-01-06 12:51:12.000 +0100AFC00E06A000,"Dezatopia",online;status-playable,playable,2021-06-15 21:06:11.000 +01001B300B9BE000,"Diablo III: Eternal Collection",status-playable;online-broken;ldn-works,playable,2023-08-21 23:48:03.000 +0100726014352000,"Diablo® II: Resurrected™",gpu;status-ingame;nvdec,ingame,2023-08-18 18:42:47.000 +0100F73011456000,"Diabolic",status-playable,playable,2021-06-11 14:45:08.000 +010027400BD24000,"DIABOLIK LOVERS CHAOS LINEAGE",gpu;status-ingame;Needs Update,ingame,2023-06-08 02:20:44.000 +0100BBF011394000,"Dicey Dungeons",gpu;audio;slow;status-ingame,ingame,2023-08-02 20:30:12.000 +0100D98005E8C000,"Die for Valhalla!",status-playable,playable,2021-01-06 16:09:14.000 +0100BB900B5B4000,"Dies irae Amantes amentes For Nintendo Switch",status-nothing;32-bit;crash,nothing,2022-02-16 07:09:05.000 +0100A5A00DBB0000,"Dig Dog",gpu;status-ingame,ingame,2021-06-02 17:17:51.000 +01004DE011076000,"Digerati Indie Darling Bundle Vol. 3",status-playable,playable,2022-10-02 13:01:57.000 +010035D0121EC000,"Digerati Presents: The Dungeon Crawl Vol. 1",slow;status-ingame,ingame,2021-04-18 14:04:55.000 +010014E00DB56000,"Digimon Story Cyber Sleuth: Complete Edition",status-playable;nvdec;opengl,playable,2022-09-13 15:02:37.000 +0100F00014254000,"Digimon World: Next Order",status-playable,playable,2023-05-09 20:41:06.000 +0100B6D00DA6E000,"Ding Dong XL",status-playable,playable,2020-07-14 16:13:19.000 +01002E4011924000,"Dininho Adventures",status-playable,playable,2020-10-03 17:25:51.000 +010027E0158A6000,"Dininho Space Adventure",status-playable,playable,2023-01-14 22:43:04.000 +0100A8A013DA4000,"Dirt Bike Insanity",status-playable,playable,2021-01-31 13:27:38.000 +01004CB01378A000,"Dirt Trackin Sprint Cars",status-playable;nvdec;online-broken,playable,2022-10-17 16:34:56.000 +0100918014B02000,"Disagaea 6: Defiance of Destiny Demo",status-playable;demo,playable,2022-10-26 20:02:04.000 +010020700E2A2000,"Disaster Report 4: Summer Memories",status-playable;nvdec;UE4,playable,2022-09-27 19:41:31.000 +0100510004D2C000,"Disc Jam",UE4;ldn-untested;nvdec;online;status-playable,playable,2021-04-08 16:40:35.000 +0100C81004780000,"Disco Dodgeball - REMIX",online;status-playable,playable,2020-09-28 23:24:49.000 +01004B100AF18000,"Disgaea 1 Complete",status-playable,playable,2023-01-30 21:45:23.000 +0100A9800E9B4000,"Disgaea 4 Complete+",gpu;slow;status-playable,playable,2020-02-18 10:54:28.000 +010068C00F324000,"Disgaea 4 Complete+ Demo",status-playable;nvdec,playable,2022-09-13 15:21:59.000 +01005700031AE000,"Disgaea 5 Complete",nvdec;status-playable,playable,2021-03-04 15:32:54.000 +0100ABC013136000,"Disgaea 6: Defiance of Destiny",deadlock;status-ingame,ingame,2023-04-15 00:50:32.000 +0100307011D80000,"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",status-playable,playable,2021-06-08 13:20:33.000 +01005EE013888000,"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",gpu;status-ingame;demo,ingame,2022-12-06 15:27:59.000 +01000B70122A2000,"Disjunction",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24.000 +0100A2F00EEFC000,"Disney Classic Games Collection",status-playable;online-broken,playable,2022-09-13 15:44:17.000 +0100DA201EBF8000,"Disney Epic Mickey: Rebrushed",status-ingame;crash,ingame,2024-09-26 22:11:51.000 +0100F0401435E000,"Disney Speedstorm",services;status-boots,boots,2023-11-27 02:15:32.000 +010012800EBAE000,"Disney TSUM TSUM FESTIVAL",crash;status-menus,menus,2020-07-14 14:05:28.000 +01009740120FE000,"DISTRAINT 2",status-playable,playable,2020-09-03 16:08:12.000 +010075B004DD2000,"DISTRAINT: Deluxe Edition",status-playable,playable,2020-06-15 23:42:24.000 +010027400CDC6000,"Divinity: Original Sin 2 - Definitive Edition",services;status-menus;crash;online-broken;regression,menus,2023-08-13 17:20:03.000 +01001770115C8000,"Dodo Peak",status-playable;nvdec;UE4,playable,2022-10-04 16:13:05.000 +010077B0100DA000,"Dogurai",status-playable,playable,2020-10-04 02:40:16.000 +010048100D51A000,"Dokapon Up! Mugen no Roulette",gpu;status-menus;Needs Update,menus,2022-12-08 19:39:10.000 +01005EE00BC78000,"Dokuro (ドクロ)",nvdec;status-playable,playable,2020-12-17 14:47:09.000 +010007200AC0E000,"Don't Die, Mr Robot!",status-playable;nvdec,playable,2022-09-02 18:34:38.000 +0100E470067A8000,"Don't Knock Twice",status-playable,playable,2024-05-08 22:37:58.000 +0100C4D00B608000,"Don't Sink",gpu;status-ingame,ingame,2021-02-26 15:41:11.000 +0100751007ADA000,"Don't Starve: Nintendo Switch Edition",status-playable;nvdec,playable,2022-02-05 20:43:34.000 +010088B010DD2000,"Dongo Adventure",status-playable,playable,2022-10-04 16:22:26.000 +0100C1F0051B6000,"Donkey Kong Country™: Tropical Freeze",status-playable,playable,2024-08-05 16:46:10.000 +0100F2C00F060000,"Doodle Derby",status-boots,boots,2020-12-04 22:51:48.000 +0100416004C00000,"DOOM",gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-09-23 15:40:07.000 +010018900DD00000,"DOOM (1993)",status-menus;nvdec;online-broken,menus,2022-09-06 13:32:19.000 +01008CB01E52E000,"DOOM + DOOM II",status-playable;opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01.000 +010029D00E740000,"DOOM 3",status-menus;crash,menus,2024-08-03 05:25:47.000 +01005D700E742000,"DOOM 64",nvdec;status-playable;vulkan,playable,2020-10-13 23:47:28.000 +0100D4F00DD02000,"DOOM II (Classic)",nvdec;online;status-playable,playable,2021-06-03 20:10:01.000 +0100B1A00D8CE000,"DOOM® Eternal",gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-08-28 15:57:17.000 +01005ED00CD70000,"Door Kickers: Action Squad",status-playable;online-broken;ldn-broken,playable,2022-09-13 16:28:53.000 +010073700E412000,"DORAEMON STORY OF SEASONS",nvdec;status-playable,playable,2020-07-13 20:28:11.000 +0100F7300BD8E000,"Double Cross",status-playable,playable,2021-01-07 15:34:22.000 +0100B1500E9F2000,"Double Dragon & Kunio-kun: Retro Brawler Bundle",status-playable,playable,2020-09-01 12:48:46.000 +01001AD00E49A000,"DOUBLE DRAGON Ⅲ: The Sacred Stones",online;status-playable,playable,2021-06-11 15:41:44.000 +01005B10132B2000,"Double Dragon Neon",gpu;audio;status-ingame;32-bit,ingame,2022-09-20 18:00:20.000 +01000F400C1A4000,"Double Kick Heroes",gpu;status-ingame,ingame,2020-10-03 14:33:59.000 +0100A5D00C7C0000,"Double Pug Switch",status-playable;nvdec,playable,2022-10-10 10:59:35.000 +0100FC000EE10000,"Double Switch - 25th Anniversary Edition",status-playable;nvdec,playable,2022-09-19 13:41:50.000 +0100B6600FE06000,"Down to Hell",gpu;status-ingame;nvdec,ingame,2022-09-19 14:01:26.000 +010093D00C726000,"Downwell",status-playable,playable,2021-04-25 20:05:24.000 +0100ED000D390000,"Dr Kawashima's Brain Training",services;status-ingame,ingame,2023-06-04 00:06:46.000 +01001B80099F6000,"Dracula's Legacy",nvdec;status-playable,playable,2020-12-10 13:24:25.000 +0100566009238000,"DragoDino",gpu;nvdec;status-ingame,ingame,2020-08-03 20:49:16.000 +0100DBC00BD5A000,"Dragon Audit",crash;status-ingame,ingame,2021-05-16 14:24:46.000 +0100A250097F0000,"DRAGON BALL FighterZ",UE4;ldn-broken;nvdec;online;status-playable,playable,2021-06-11 16:19:04.000 +010078D000F88000,"DRAGON BALL XENOVERSE 2 for Nintendo Switch",gpu;status-ingame;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01.000 +010051C0134F8000,"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",status-playable;vulkan-backend-bug,playable,2024-08-28 00:03:50.000 +010099B00A2DC000,"Dragon Blaze for Nintendo Switch",32-bit;status-playable,playable,2020-10-14 11:11:28.000 +010089700150E000,"Dragon Marked for Death: Advanced Attackers",status-playable;ldn-untested;audout,playable,2022-03-10 06:44:34.000 +0100EFC00EFB2000,"DRAGON QUEST",gpu;status-boots,boots,2021-11-09 03:31:32.000 +010008900705C000,"Dragon Quest Builders™",gpu;status-ingame;nvdec,ingame,2023-08-14 09:54:36.000 +010042000A986000,"DRAGON QUEST BUILDERS™ 2",status-playable,playable,2024-04-19 16:36:38.000 +0100CD3000BDC000,"Dragon Quest Heroes I + II (JP)",nvdec;status-playable,playable,2021-04-08 14:27:16.000 +010062200EFB4000,"DRAGON QUEST II: Luminaries of the Legendary Line",status-playable,playable,2022-09-13 16:44:11.000 +01003E601E324000,"DRAGON QUEST III HD-2D Remake",status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27.000 +010015600EFB6000,"DRAGON QUEST III: The Seeds of Salvation",gpu;status-boots,boots,2021-11-09 03:38:34.000 +0100A77018EA0000,"DRAGON QUEST MONSTERS: The Dark Prince",status-playable,playable,2023-12-29 16:10:05.000 +0100217014266000,"Dragon Quest Treasures",gpu;status-ingame;UE4,ingame,2023-05-09 11:16:52.000 +0100E2E0152E4000,"Dragon Quest X Awakening Five Races Offline",status-playable;nvdec;UE4,playable,2024-08-20 10:04:24.000 +01006C300E9F0000,"DRAGON QUEST® XI S: Echoes of an Elusive Age – Definitive Edition",status-playable;UE4,playable,2021-11-27 12:27:11.000 +010032C00AC58000,"Dragon's Dogma: Dark Arisen",status-playable,playable,2022-07-24 12:58:33.000 +010027100C544000,"Dragon's Lair Trilogy",nvdec;status-playable,playable,2021-01-13 22:12:07.000 +0100DA0006F50000,"DragonFangZ - The Rose & Dungeon of Time",status-playable,playable,2020-09-28 21:35:18.000 +0100F7800A434000,"Drawful 2",status-ingame,ingame,2022-07-24 13:50:21.000 +0100B7E0102E4000,"Drawngeon: Dungeons of Ink and Paper",gpu;status-ingame,ingame,2022-09-19 15:41:25.000 +01008B20129F2000,"Dream",status-playable,playable,2020-12-15 19:55:07.000 +01000AA0093DC000,"Dream Alone",nvdec;status-playable,playable,2021-01-27 19:41:50.000 +010034D00F330000,"DreamBall",UE4;crash;gpu;status-ingame,ingame,2020-08-05 14:45:25.000 +010058B00F3C0000,"Dreaming Canvas",UE4;gpu;status-ingame,ingame,2021-06-13 22:50:07.000 +0100D24013466000,"DREAMO",status-playable;UE4,playable,2022-10-17 18:25:28.000 +0100ED200B6FC000,"DreamWorks Dragons Dawn of New Riders",nvdec;status-playable,playable,2021-01-27 20:05:26.000 +0100236011B4C000,"DreamWorks Spirit Lucky’s Big Adventure",status-playable,playable,2022-10-27 13:30:52.000 +010058C00A916000,"Drone Fight",status-playable,playable,2022-07-24 14:31:56.000 +010052000A574000,"Drowning",status-playable,playable,2022-07-25 14:28:26.000 +0100652012F58000,"Drums",status-playable,playable,2020-12-17 17:21:51.000 +01005BC012C66000,"Duck Life Adventure",status-playable,playable,2022-10-10 11:27:03.000 +01007EF00CB88000,"Duke Nukem 3D: 20th Anniversary World Tour",32-bit;status-playable;ldn-untested,playable,2022-08-19 22:22:40.000 +010068D0141F2000,"Dull Grey",status-playable,playable,2022-10-27 13:40:38.000 +0100926013600000,"Dungeon Nightmares 1 + 2 Collection",status-playable,playable,2022-10-17 18:54:22.000 +010034300F0E2000,"Dungeon of the Endless",nvdec;status-playable,playable,2021-05-27 19:16:26.000 +0100E79009A94000,"Dungeon Stars",status-playable,playable,2021-01-18 14:28:37.000 +0100BE801360E000,"Dungeons & Bombs",status-playable,playable,2021-04-06 12:46:22.000 +0100EC30140B6000,"Dunk Lords",status-playable,playable,2024-06-26 00:07:26.000 +010011C00E636000,"Dusk Diver",status-boots;crash;UE4,boots,2021-11-06 09:01:30.000 +0100B6E00A420000,"Dust: An Elysian Tail",status-playable,playable,2022-07-25 15:28:12.000 +0100D7E012F2E000,"Dustoff Z",status-playable,playable,2020-12-04 23:22:29.000 +01008C8012920000,"Dying Light: Definitive Edition",services-horizon;status-boots,boots,2024-03-11 10:43:32.000 +01007DD00DFDE000,"Dyna Bomb",status-playable,playable,2020-06-07 13:26:55.000 +0100E9A00CB30000,"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",status-playable;nvdec,playable,2024-06-26 00:16:30.000 +010008900BC5A000,"DYSMANTLE",gpu;status-ingame,ingame,2024-07-15 16:24:12.000 +010054E01D878000,"EA SPORTS FC 25",status-ingame;crash,ingame,2024-09-25 21:07:50.000 +0100BDB01A0E6000,"EA SPORTS FC™ 24",status-boots,boots,2023-10-04 18:32:59.000 +01001C8016B4E000,"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",gpu;status-ingame;crash,ingame,2024-06-10 23:33:05.000 +01005DE00D05C000,"EA SPORTS™ FIFA 20 Nintendo Switch™ Legacy Edition",gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20.000 +010037400C7DA000,"Eagle Island Twist",status-playable,playable,2021-04-10 13:15:42.000 +0100B9E012992000,"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",status-playable;UE4,playable,2022-12-07 12:59:16.000 +0100298014030000,"Earth Defense Force: World Brothers",status-playable;UE4,playable,2022-10-27 14:13:31.000 +01009B7006C88000,"EARTH WARS",status-playable,playable,2021-06-05 11:18:33.000 +0100DFC00E472000,"Earthfall: Alien Horde",status-playable;nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37.000 +01006E50042EA000,"EARTHLOCK",status-playable,playable,2021-06-05 11:51:02.000 +0100A2E00BB0C000,"EarthNight",status-playable,playable,2022-09-19 21:02:20.000 +0100DCE00B756000,"Earthworms",status-playable,playable,2022-07-25 16:28:55.000 +0100E3500BD84000,"Earthworms Demo",status-playable,playable,2021-01-05 16:57:11.000 +0100ECF01800C000,"Easy Come Easy Golf",status-playable;online-broken;regression,playable,2024-04-04 16:15:00.000 +0100A9B009678000,"EAT BEAT DEADSPIKE-san",audio;status-playable;Needs Update,playable,2022-12-02 19:25:29.000 +0100BCA016636000,"eBaseball Powerful Pro Yakyuu 2022",gpu;services-horizon;status-nothing;crash,nothing,2024-05-26 23:07:19.000 +01001F20100B8000,"Eclipse: Edge of Light",status-playable,playable,2020-08-11 23:06:29.000 +0100E0A0110F4000,"eCrossminton",status-playable,playable,2020-07-11 18:24:27.000 +0100ABE00DB4E000,"Edna & Harvey: Harvey's New Eyes",nvdec;status-playable,playable,2021-01-26 14:36:08.000 +01004F000B716000,"Edna & Harvey: The Breakout – Anniversary Edition",status-ingame;crash;nvdec,ingame,2022-08-01 16:59:56.000 +01002550129F0000,"Effie",status-playable,playable,2022-10-27 14:36:39.000 +0100CC0010A46000,"Ego Protocol: Remastered",nvdec;status-playable,playable,2020-12-16 20:16:35.000 +,"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",status-playable,playable,2020-11-12 00:11:50.000 +01003AD013BD2000,"Eight Dragons",status-playable;nvdec,playable,2022-10-27 14:47:28.000 +010020A01209C000,"El Hijo - A Wild West Tale",nvdec;status-playable,playable,2021-04-19 17:44:08.000 +0100B5B00EF38000,"Elden: Path of the Forgotten",status-playable,playable,2020-12-15 00:33:19.000 +010068F012880000,"Eldrador® Creatures",slow;status-playable,playable,2020-12-12 12:35:35.000 +010008E010012000,"ELEA: Paradigm Shift",UE4;crash;status-nothing,nothing,2020-10-04 19:07:43.000 +0100A6700AF10000,"Element",status-playable,playable,2022-07-25 17:17:16.000 +0100128003A24000,"Elliot Quest",status-playable,playable,2022-07-25 17:46:14.000 +010041A00FEC6000,"Ember",status-playable;nvdec,playable,2022-09-19 21:16:11.000 +010071B012940000,"Embracelet",status-playable,playable,2020-12-04 23:45:00.000 +010017B0102A8000,"Emma: Lost in Memories",nvdec;status-playable,playable,2021-01-28 16:19:10.000 +010068300E08E000,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo -",gpu;status-ingame;nvdec,ingame,2022-11-20 16:18:45.000 +01007A4008486000,"Enchanting Mahjong Match",gpu;status-ingame,ingame,2020-04-17 22:01:31.000 +01004F3011F92000,"Endless Fables: Dark Moor",gpu;nvdec;status-ingame,ingame,2021-03-07 15:31:03.000 +010067B017588000,"Endless Ocean™ Luminous",services-horizon;status-ingame;crash,ingame,2024-05-30 02:05:57.000 +0100B8700BD14000,"Energy Cycle Edge",services;status-ingame,ingame,2021-11-30 05:02:31.000 +0100A8E0090B0000,"Energy Invasion",status-playable,playable,2021-01-14 21:32:26.000 +0100C6200A0AA000,"Enigmatis 2: The Mists of Ravenwood",crash;regression;status-boots,boots,2021-06-06 15:15:30.000 +01009D60076F6000,"Enter the Gungeon",status-playable,playable,2022-07-25 20:28:33.000 +0100262009626000,"Epic Loon",status-playable;nvdec,playable,2022-07-25 22:06:13.000 +01000FA0149B6000,"EQI",status-playable;nvdec;UE4,playable,2022-10-27 16:42:32.000 +0100E95010058000,"EQQO",UE4;nvdec;status-playable,playable,2021-06-13 23:10:51.000 +01000E8010A98000,"Escape First",status-playable,playable,2020-10-20 22:46:53.000 +010021201296A000,"Escape First 2",status-playable,playable,2021-03-24 11:59:41.000 +0100FEF00F0AA000,"Escape from Chernobyl",status-boots;crash,boots,2022-09-19 21:36:58.000 +010023E013244000,"Escape from Life Inc",status-playable,playable,2021-04-19 17:34:09.000 +010092901203A000,"Escape From Tethys",status-playable,playable,2020-10-14 22:38:25.000 +0100B0F011A84000,"Escape Game Fort Boyard",status-playable,playable,2020-07-12 12:45:43.000 +0100F9600E746000,"ESP Ra.De. Psi",audio;slow;status-ingame,ingame,2024-03-07 15:05:08.000 +010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;status-ingame;crash;Needs More Attention,ingame,2024-04-29 05:34:14.000 +01004F9012FD8000,"Estranged: The Departure",status-playable;nvdec;UE4,playable,2022-10-24 10:37:58.000 +0100CB900B498000,"Eternum Ex",status-playable,playable,2021-01-13 20:28:32.000 +010092501EB2C000,"Europa (Demo)",gpu;status-ingame;crash;UE4,ingame,2024-04-23 10:47:12.000 +01007BE0160D6000,"EVE ghost enemies",gpu;status-ingame,ingame,2023-01-14 03:13:30.000 +010095E01581C000,"even if TEMPEST",gpu;status-ingame,ingame,2023-06-22 23:50:25.000 +010072C010002000,"Event Horizon: Space Defense",status-playable,playable,2020-07-31 20:31:24.000 +0100DCF0093EC000,"Everspace™ - Stellar Edition",status-playable;UE4,playable,2022-08-14 01:16:24.000 +01006F900BF8E000,"Everybody 1-2-Switch!™",services;deadlock;status-nothing,nothing,2023-07-01 05:52:55.000 +010080600B53E000,"Evil Defenders",nvdec;status-playable,playable,2020-09-28 17:11:00.000 +01006A800FA22000,"Evolution Board Game",online;status-playable,playable,2021-01-20 22:37:56.000 +0100F2D00C7DE000,"Exception",status-playable;online-broken,playable,2022-09-20 12:47:10.000 +0100DD30110CC000,"Exit the Gungeon",status-playable,playable,2022-09-22 17:04:43.000 +0100A82013976000,"Exodemon",status-playable,playable,2022-10-27 20:17:52.000 +0100FA800A1F4000,"EXORDER",nvdec;status-playable,playable,2021-04-15 14:17:20.000 +01009B7010B42000,"Explosive Jake",status-boots;crash,boots,2021-11-03 07:48:32.000 +0100EFE00A3C2000,"Eyes: The Horror Game",status-playable,playable,2021-01-20 21:59:46.000 +0100E3D0103CE000,"Fable of Fairy Stones",status-playable,playable,2021-05-05 21:04:54.000 +01004200189F4000,"Factorio",deadlock;status-boots,boots,2024-06-11 19:26:16.000 +010073F0189B6000,"Fae Farm",status-playable,playable,2024-08-25 15:12:12.000 +010069100DB08000,"Faeria",status-menus;nvdec;online-broken,menus,2022-10-04 16:44:41.000 +01008A6009758000,"Fairune Collection",status-playable,playable,2021-06-06 15:29:56.000 +0100F6D00B8F2000,"Fairy Fencer F™: Advent Dark Force",status-ingame;32-bit;crash;nvdec,ingame,2023-04-16 03:53:48.000 +0100CF900FA3E000,"FAIRY TAIL",status-playable;nvdec,playable,2022-10-04 23:00:32.000 +01005A600BE60000,"Fall of Light: Darkest Edition",slow;status-ingame;nvdec,ingame,2024-07-24 04:19:26.000 +0100AA801258C000,"Fallen Legion Revenants",status-menus;crash,menus,2021-11-25 08:53:20.000 +0100D670126F6000,"Famicom Detective Club™: The Girl Who Stands Behind",status-playable;nvdec,playable,2022-10-27 20:41:40.000 +010033F0126F4000,"Famicom Detective Club™: The Missing Heir",status-playable;nvdec,playable,2022-10-27 20:56:23.000 +010060200FC44000,"Family Feud®",status-playable;online-broken,playable,2022-10-10 11:42:21.000 +0100034012606000,"Family Mysteries: Poisonous Promises",audio;status-menus;crash,menus,2021-11-26 12:35:06.000 +010017C012726000,"Fantasy Friends",status-playable,playable,2022-10-17 19:42:39.000 +0100767008502000,"FANTASY HERO ~unsigned legacy~",status-playable,playable,2022-07-26 12:28:52.000 +0100944003820000,"Fantasy Strike",online;status-playable,playable,2021-02-27 01:59:18.000 +01000E2012F6E000,"Fantasy Tavern Sextet -Vol.1 New World Days-",gpu;status-ingame;crash;Needs Update,ingame,2022-12-05 16:48:00.000 +01005C10136CA000,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;status-ingame;crash,ingame,2021-11-06 02:57:29.000 +010022700E7D6000,"FAR: Lone Sails",status-playable,playable,2022-09-06 16:33:05.000 +0100C9E00FD62000,"Farabel",status-playable,playable,2020-08-03 17:47:28.000 +,"Farm Expert 2019 for Nintendo Switch",status-playable,playable,2020-07-09 21:42:57.000 +01000E400ED98000,"Farm Mystery",status-playable;nvdec,playable,2022-09-06 16:46:47.000 +010086B00BB50000,"Farm Together",status-playable,playable,2021-01-19 20:01:19.000 +0100EB600E914000,"Farming Simulator 20",nvdec;status-playable,playable,2021-06-13 10:52:44.000 +0100D04004176000,"Farming Simulator Nintendo Switch Edition",nvdec;status-playable,playable,2021-01-19 14:46:44.000 +0100E99019B3A000,"Fashion Dreamer",status-playable,playable,2023-11-12 06:42:52.000 +01009510001CA000,"FAST RMX",slow;status-ingame;crash;ldn-partial,ingame,2024-06-22 20:48:58.000 +0100BEB015604000,"FATAL FRAME: Maiden of Black Water",status-playable,playable,2023-07-05 16:01:40.000 +0100DAE019110000,"FATAL FRAME: Mask of the Lunar Eclipse",status-playable;Incomplete,playable,2024-04-11 06:01:30.000 +010051400B17A000,"Fate/EXTELLA LINK",ldn-untested;nvdec;status-playable,playable,2021-01-27 00:45:50.000 +010053E002EA2000,"Fate/EXTELLA: The Umbral Star",gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55.000 +0100F6200B7D4000,"fault - milestone one",nvdec;status-playable,playable,2021-03-24 10:41:49.000 +01005AC0068F6000,"Fear Effect Sedna",nvdec;status-playable,playable,2021-01-19 13:10:33.000 +0100F5501CE12000,"Fearmonium",status-boots;crash,boots,2024-03-06 11:26:11.000 +0100E4300CB3E000,"Feather",status-playable,playable,2021-06-03 14:11:27.000 +010003B00D3A2000,"Felix The Reaper",nvdec;status-playable,playable,2020-10-20 23:43:03.000 +0100AA3009738000,"Feudal Alloy",status-playable,playable,2021-01-14 08:48:14.000 +01008D900B984000,"FEZ",gpu;status-ingame,ingame,2021-04-18 17:10:16.000 +01007510040E8000,"FIA European Truck Racing Championship",status-playable;nvdec,playable,2022-09-06 17:51:59.000 +0100F7B002340000,"FIFA 18",gpu;status-ingame;online-broken;ldn-untested,ingame,2022-07-26 12:43:59.000 +0100FFA0093E8000,"FIFA 19",gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07.000 +01000A001171A000,"FIFA 21 Nintendo Switch™ Legacy Edition",gpu;status-ingame;online-broken,ingame,2023-12-11 22:10:19.000 +0100216014472000,"FIFA 22 Nintendo Switch™ Legacy Edition",gpu;status-ingame,ingame,2024-03-02 14:13:48.000 +01006980127F0000,"Fight Crab",status-playable;online-broken;ldn-untested,playable,2022-10-05 10:24:04.000 +010047E010B3E000,"Fight of Animals",online;status-playable,playable,2020-10-15 15:08:28.000 +0100C7D00E730000,"Fight'N Rage",status-playable,playable,2020-06-16 23:35:19.000 +0100D02014048000,"FIGHTING EX LAYER ANOTHER DASH",status-playable;online-broken;UE4,playable,2024-04-07 10:22:33.000 +0100118009C68000,"Figment",nvdec;status-playable,playable,2021-01-27 19:36:05.000 +010095600AA36000,"Fill-a-Pix: Phil's Epic Adventure",status-playable,playable,2020-12-22 13:48:22.000 +0100C3A00BB76000,"Fimbul",status-playable;nvdec,playable,2022-07-26 13:31:47.000 +0100C8200E942000,"Fin and the Ancient Mystery",nvdec;status-playable,playable,2020-12-17 16:40:39.000 +01000EA014150000,"FINAL FANTASY",status-nothing;crash,nothing,2024-09-05 20:55:30.000 +01006B7014156000,"FINAL FANTASY II",status-nothing;crash,nothing,2024-04-13 19:18:04.000 +01006F000B056000,"FINAL FANTASY IX",audout;nvdec;status-playable,playable,2021-06-05 11:35:00.000 +0100AA201415C000,"FINAL FANTASY V",status-playable,playable,2023-04-26 01:11:55.000 +0100A5B00BDC6000,"FINAL FANTASY VII",status-playable,playable,2022-12-09 17:03:30.000 +01008B900DC0A000,"FINAL FANTASY VIII Remastered",status-playable;nvdec,playable,2023-02-15 10:57:48.000 +0100BC300CB48000,"FINAL FANTASY X/X-2 HD Remaster",gpu;status-ingame,ingame,2022-08-16 20:29:26.000 +0100EB100AB42000,"FINAL FANTASY XII THE ZODIAC AGE",status-playable;opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54.000 +010068F00AA78000,"FINAL FANTASY XV POCKET EDITION HD",status-playable,playable,2021-01-05 17:52:08.000 +0100CE4010AAC000,"FINAL FANTASY® CRYSTAL CHRONICLES™ Remastered Edition",status-playable,playable,2023-04-02 23:39:12.000 +01001BA00AE4E000,"Final Light, The Prison",status-playable,playable,2020-07-31 21:48:44.000 +0100FF100FB68000,"Finding Teddy 2 : Definitive Edition",gpu;status-ingame,ingame,2024-04-19 16:51:33.000 +0100F4E013AAE000,"Fire & Water",status-playable,playable,2020-12-15 15:43:20.000 +0100F15003E64000,"Fire Emblem Warriors",status-playable;nvdec,playable,2023-05-10 01:53:10.000 +010071F0143EA000,"Fire Emblem Warriors: Three Hopes",gpu;status-ingame;nvdec,ingame,2024-05-01 07:07:42.000 +0100A6301214E000,"Fire Emblem™ Engage",status-playable;amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26.000 +0100A12011CC8000,"Fire Emblem™: Shadow Dragon & the Blade of Light",status-playable,playable,2022-10-17 19:49:14.000 +010055D009F78000,"Fire Emblem™: Three Houses",status-playable;online-broken,playable,2024-09-14 23:53:50.000 +010025C014798000,"Fire: Ungh’s Quest",status-playable;nvdec,playable,2022-10-27 21:41:26.000 +0100434003C58000,"Firefighters – The Simulation",status-playable,playable,2021-02-19 13:32:05.000 +0100BB1009E50000,"Firefighters: Airport Fire Department",status-playable,playable,2021-02-15 19:17:00.000 +0100AC300919A000,"Firewatch",status-playable,playable,2021-06-03 10:56:38.000 +0100BA9012B36000,"Firework",status-playable,playable,2020-12-04 20:20:09.000 +0100DEB00ACE2000,"Fishing Star World Tour",status-playable,playable,2022-09-13 19:08:51.000 +010069800D292000,"Fishing Universe Simulator",status-playable,playable,2021-04-15 14:00:43.000 +0100807008868000,"Fit Boxing",status-playable,playable,2022-07-26 19:24:55.000 +0100E7300AAD4000,"Fitness Boxing",status-playable,playable,2021-04-14 20:33:33.000 +0100073011382000,"Fitness Boxing 2: Rhythm & Exercise",crash;status-ingame,ingame,2021-04-14 20:40:48.000 +0100C7E0134BE000,"Five Dates",nvdec;status-playable,playable,2020-12-11 15:17:11.000 +0100B6200D8D2000,"Five Nights at Freddy's",status-playable,playable,2022-09-13 19:26:36.000 +01004EB00E43A000,"Five Nights at Freddy's 2",status-playable,playable,2023-02-08 15:48:24.000 +010056100E43C000,"Five Nights at Freddy's 3",status-playable,playable,2022-09-13 20:58:07.000 +010083800E43E000,"Five Nights at Freddy's 4",status-playable,playable,2023-08-19 07:28:03.000 +0100F7901118C000,"Five Nights at Freddy's: Help Wanted",status-playable;UE4,playable,2022-09-29 12:40:09.000 +01009060193C4000,"Five Nights at Freddy's: Security Breach",gpu;status-ingame;crash;mac-bug,ingame,2023-04-23 22:33:28.000 +01003B200E440000,"Five Nights at Freddy's: Sister Location",status-playable,playable,2023-10-06 09:00:58.000 +010038200E088000,"Flan",status-ingame;crash;regression,ingame,2021-11-17 07:39:28.000 +01000A0004C50000,"FLASHBACK™",nvdec;status-playable,playable,2020-05-14 13:57:29.000 +0100C53004C52000,"Flat Heroes",gpu;status-ingame,ingame,2022-07-26 19:37:37.000 +0100B54012798000,"Flatland: Prologue",status-playable,playable,2020-12-11 20:41:12.000 +0100307004B4C000,"Flinthook",online;status-playable,playable,2021-03-25 20:42:29.000 +010095A004040000,"Flip Wars",services;status-ingame;ldn-untested,ingame,2022-05-02 15:39:18.000 +01009FB002B2E000,"Flipping Death",status-playable,playable,2021-02-17 16:12:30.000 +0100D1700ACFC000,"Flood of Light",status-playable,playable,2020-05-15 14:15:25.000 +0100DF9005E7A000,"Floor Kids",status-playable;nvdec,playable,2024-08-18 19:38:49.000 +010040700E8FC000,"Florence",status-playable,playable,2020-09-05 01:22:30.000 +0100F5D00CD58000,"Flowlines VS",status-playable,playable,2020-12-17 17:01:53.000 +010039C00E2CE000,"Flux8",nvdec;status-playable,playable,2020-06-19 20:55:11.000 +0100EDA00BBBE000,"Fly O'Clock",status-playable,playable,2020-05-17 13:39:52.000 +0100FC300F4A4000,"Fly Punch Boom!",online;status-playable,playable,2020-06-21 12:06:11.000 +0100419013A8A000,"Flying Hero X",status-menus;crash,menus,2021-11-17 07:46:58.000 +010056000BA1C000,"Fobia",status-playable,playable,2020-12-14 21:05:23.000 +0100F3900D0F0000,"Food Truck Tycoon",status-playable,playable,2022-10-17 20:15:55.000 +01007CF013152000,"Football Manager 2021 Touch",gpu;status-ingame,ingame,2022-10-17 20:08:23.000 +0100EDC01990E000,"Football Manager 2023 Touch",gpu;status-ingame,ingame,2023-08-01 03:40:53.000 +010097F0099B4000,"Football Manager Touch 2018",status-playable,playable,2022-07-26 20:17:56.000 +010069400B6BE000,"For The King",nvdec;status-playable,playable,2021-02-15 18:51:44.000 +01001D200BCC4000,"Forager",status-menus;crash,menus,2021-11-24 07:10:17.000 +0100AE001256E000,"FORECLOSED",status-ingame;crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12.000 +010044B00E70A000,"Foregone",deadlock;status-ingame,ingame,2020-12-17 15:26:53.000 +010059E00B93C000,"Forgotton Anne",nvdec;status-playable,playable,2021-02-15 18:28:07.000 +01008EA00405C000,"forma.8",nvdec;status-playable,playable,2020-11-15 01:04:32.000 +010025400AECE000,"Fortnite",services-horizon;status-nothing,nothing,2024-04-06 18:23:25.000 +0100AAE01E39C000,"Fortress Challenge - Fort Boyard",nvdec;slow;status-playable,playable,2020-05-15 13:22:53.000 +0100CA500756C000,"Fossil Hunters",status-playable;nvdec,playable,2022-07-27 11:37:20.000 +01008A100A028000,"FOX n FORESTS",status-playable,playable,2021-02-16 14:27:49.000 +0100D2501001A000,"FoxyLand",status-playable,playable,2020-07-29 20:55:20.000 +01000AC010024000,"FoxyLand 2",status-playable,playable,2020-08-06 14:41:30.000 +01004200099F2000,"Fractured Minds",status-playable,playable,2022-09-13 21:21:40.000 +0100F1A00A5DC000,"FRAMED Collection",status-playable;nvdec,playable,2022-07-27 11:48:15.000 +0100AC40108D8000,"Fred3ric",status-playable,playable,2021-04-15 13:30:31.000 +01000490067AE000,"Frederic 2: Evil Strikes Back",status-playable,playable,2020-07-23 16:44:37.000 +01005B1006988000,"Frederic: Resurrection of Music",nvdec;status-playable,playable,2020-07-23 16:59:53.000 +010082B00EE50000,"Freedom Finger",nvdec;status-playable,playable,2021-06-09 19:31:30.000 +0100EB800B614000,"Freedom Planet",status-playable,playable,2020-05-14 12:23:06.000 +010003F00BD48000,"Friday the 13th: Killer Puzzle",status-playable,playable,2021-01-28 01:33:38.000 +010092A00C4B6000,"Friday the 13th: The Game Ultimate Slasher Edition",status-playable;nvdec;online-broken;UE4,playable,2022-09-06 17:33:27.000 +0100F200178F4000,"FRONT MISSION 1st: Remake",status-playable,playable,2023-06-09 07:44:24.000 +0100861012474000,"Frontline Zed",status-playable,playable,2020-10-03 12:55:59.000 +0100B5300B49A000,"Frost",status-playable,playable,2022-07-27 12:00:36.000 +010038A007AA4000,"FruitFall Crush",status-playable,playable,2020-10-20 11:33:33.000 +01008D800AE4A000,"FullBlast",status-playable,playable,2020-05-19 10:34:13.000 +010002F00CC20000,"FUN! FUN! Animal Park",status-playable,playable,2021-04-14 17:08:52.000 +0100A8F00B3D0000,"FunBox Party",status-playable,playable,2020-05-15 12:07:02.000 +0100E7B00BF24000,"Funghi Explosion",status-playable,playable,2020-11-23 14:17:41.000 +01008E10130F8000,"Funimation",gpu;status-boots,boots,2021-04-08 13:08:17.000 +0100EA501033C000,"Funny Bunny Adventures",status-playable,playable,2020-08-05 13:46:56.000 +01000EC00AF98000,"Furi",status-playable,playable,2022-07-27 12:21:20.000 +0100A6B00D4EC000,"Furwind",status-playable,playable,2021-02-19 19:44:08.000 +0100ECE00C0C4000,"Fury Unleashed",crash;services;status-ingame,ingame,2020-10-18 11:52:40.000 +,"Fury Unleashed Demo",status-playable,playable,2020-10-08 20:09:21.000 +0100E1F013674000,"FUSER™",status-playable;nvdec;UE4,playable,2022-10-17 20:58:32.000 +,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec;status-ingame,ingame,2021-01-20 15:30:02.000 +01003C300B274000,"Futari de! Nyanko Daisensou",status-playable,playable,2024-01-05 22:26:52.000 +010055801134E000,"FUZE Player",status-ingame;online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53.000 +0100EAD007E98000,"FUZE4 Nintendo Switch",status-playable;vulkan-backend-bug,playable,2022-09-06 19:25:01.000 +010067600F1A0000,"FuzzBall",crash;status-nothing,nothing,2021-03-29 20:13:21.000 +,"G-MODE Archives 06 The strongest ever Julia Miyamoto",status-playable,playable,2020-10-15 13:06:26.000 +0100EB10108EA000,"G.I. Joe: Operation Blackout",UE4;crash;status-boots,boots,2020-11-21 12:37:44.000 +010048600B14E000,"Gal Metal",status-playable,playable,2022-07-27 20:57:48.000 +010024700901A000,"Gal*Gun 2",status-playable;nvdec;UE4,playable,2022-07-27 12:45:37.000 +0100047013378000,"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",status-playable;nvdec,playable,2022-10-17 23:50:46.000 +0100C9800A454000,"GALAK-Z: Variant S",status-boots;online-broken,boots,2022-07-29 11:59:12.000 +0100C62011050000,"Game Boy™ – Nintendo Switch Online",status-playable,playable,2023-03-21 12:43:48.000 +010012F017576000,"Game Boy™ Advance – Nintendo Switch Online",status-playable,playable,2023-02-16 20:38:15.000 +0100FA5010788000,"Game Builder Garage™",status-ingame,ingame,2024-04-20 21:46:22.000 +0100AF700BCD2000,"Game Dev Story",status-playable,playable,2020-05-20 00:00:38.000 +01006BD00F8C0000,"Game Doraemon Nobita no Shin Kyoryu",gpu;status-ingame,ingame,2023-02-27 02:03:28.000 +01000FA00A4E4000,"Garage",status-playable,playable,2020-05-19 20:59:53.000 +010061E00E8BE000,"Garfield Kart Furious Racing",status-playable;ldn-works;loader-allocator,playable,2022-09-13 21:40:25.000 +0100EA001069E000,"Gates Of Hell",slow;status-playable,playable,2020-10-22 12:44:26.000 +010025500C098000,"Gato Roboto",status-playable,playable,2023-01-20 15:04:11.000 +010065E003FD8000,"Gear.Club Unlimited",status-playable,playable,2021-06-08 13:03:19.000 +010072900AFF0000,"Gear.Club Unlimited 2",status-playable;nvdec;online-broken,playable,2022-07-29 12:52:16.000 +01000F000D9F0000,"Geki Yaba Runner Anniversary Edition",status-playable,playable,2021-02-19 18:59:07.000 +010052A00942A000,"Gekido Kintaro's Revenge",status-playable,playable,2020-10-27 12:44:05.000 +01009D000AF3A000,"Gelly Break Deluxe",UE4;status-playable,playable,2021-03-03 16:04:02.000 +01001A4008192000,"Gem Smashers",nvdec;status-playable,playable,2021-06-08 13:40:51.000 +010014901144C000,"Genetic Disaster",status-playable,playable,2020-06-19 21:41:12.000 +0100D7E0110B2000,"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",32-bit;status-playable,playable,2022-06-06 00:42:09.000 +010000300C79C000,"GensokyoDefenders",status-playable;online-broken;UE4,playable,2022-07-29 13:48:12.000 +0100AC600EB4C000,"Gensou Rougoku no Kaleidscope",status-menus;crash,menus,2021-11-24 08:45:07.000 +01007FC012FD4000,"Georifters",UE4;crash;nvdec;status-menus,menus,2020-12-04 22:30:50.000 +010058F010296000,"GERRRMS",status-playable,playable,2020-08-15 11:32:52.000 +01006F30129F8000,"Get 10 quest",status-playable,playable,2020-08-03 12:48:39.000 +0100B5B00E77C000,"Get Over Here",status-playable,playable,2022-10-28 11:53:52.000 +0100EEB005ACC000,"Ghost 1.0",status-playable,playable,2021-02-19 20:48:47.000 +010063200C588000,"Ghost Blade HD",status-playable;online-broken,playable,2022-09-13 21:51:21.000 +010057500E744000,"Ghost Grab 3000",status-playable,playable,2020-07-11 18:09:52.000 +010094C00E180000,"Ghost Parade",status-playable,playable,2020-07-14 00:43:54.000 +01004B301108C000,"Ghost Sweeper",status-playable,playable,2022-10-10 12:45:36.000 +010029B018432000,"Ghost Trick: Phantom Detective",status-playable,playable,2023-08-23 14:50:12.000 +010008A00F632000,"Ghostbusters: The Video Game Remastered",status-playable;nvdec,playable,2021-09-17 07:26:57.000 +010090F012916000,"Ghostrunner",UE4;crash;gpu;nvdec;status-ingame,ingame,2020-12-17 13:01:59.000 +0100D6200F2BA000,"Ghosts 'n Goblins Resurrection",status-playable,playable,2023-05-09 12:40:41.000 +01003830092B8000,"Giana Sisters: Twisted Dreams - Owltimate Edition",status-playable,playable,2022-07-29 14:06:12.000 +0100D95012C0A000,"Gibbous - A Cthulhu Adventure",status-playable;nvdec,playable,2022-10-10 12:57:17.000 +010045F00BFC2000,"GIGA WRECKER ALT.",status-playable,playable,2022-07-29 14:13:54.000 +01002C400E526000,"Gigantosaurus The Game",status-playable;UE4,playable,2022-09-27 21:20:00.000 +0100C50007070000,"Ginger: Beyond the Crystal",status-playable,playable,2021-02-17 16:27:00.000 +01006BA013990000,"Girabox",status-playable,playable,2020-12-12 13:55:05.000 +01007E90116CE000,"Giraffe and Annika",UE4;crash;status-ingame,ingame,2020-12-04 22:41:57.000 +01006DD00CC96000,"Girls und Panzer Dream Tank Match DX",status-playable;ldn-untested,playable,2022-09-12 16:07:11.000 +01005CB009E20000,"Glaive: Brick Breaker",status-playable,playable,2020-05-20 12:15:59.000 +0100B6F01227C000,"Glitch's Trip",status-playable,playable,2020-12-17 16:00:57.000 +0100EB501130E000,"Glyph",status-playable,playable,2021-02-08 19:56:51.000 +0100EB8011B0C000,"Gnome More War",status-playable,playable,2020-12-17 16:33:07.000 +010008D00CCEC000,"Gnomes Garden 2",status-playable,playable,2021-02-19 20:08:13.000 +010036C00D0D6000,"Gnomes Garden: Lost King",deadlock;status-menus,menus,2021-11-18 11:14:03.000 +01008EF013A7C000,"Gnosia",status-playable,playable,2021-04-05 17:20:30.000 +01000C800FADC000,"Go All Out!",status-playable;online-broken,playable,2022-09-21 19:16:34.000 +010055A0161F4000,"Go Rally",gpu;status-ingame,ingame,2023-08-16 21:18:23.000 +0100C1800A9B6000,"Go Vacation™",status-playable;nvdec;ldn-works,playable,2024-05-13 19:28:53.000 +0100E6300F854000,"Go! Fish Go!",status-playable,playable,2020-07-27 13:52:28.000 +010032600C8CE000,"Goat Simulator: The GOATY",32-bit;status-playable,playable,2022-07-29 21:02:33.000 +01001C700873E000,"GOD EATER 3",gpu;status-ingame;nvdec,ingame,2022-07-29 21:33:21.000 +0100F3D00B032000,"GOD WARS The Complete Legend",nvdec;status-playable,playable,2020-05-19 14:37:50.000 +0100CFA0111C8000,"Gods Will Fall",status-playable,playable,2021-02-08 16:49:59.000 +0100D82009024000,"Goetia",status-playable,playable,2020-05-19 12:55:39.000 +01004D501113C000,"Going Under",deadlock;nvdec;status-ingame,ingame,2020-12-11 22:29:46.000 +0100126006EF0000,"GOKEN",status-playable,playable,2020-08-05 20:22:38.000 +010013800F0A4000,"Golazo!",status-playable,playable,2022-09-13 21:58:37.000 +01003C000D84C000,"Golem Gates",status-ingame;crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11.000 +0100779004172000,"Golf Story",status-playable,playable,2020-05-14 14:56:17.000 +01006FB00EBE0000,"Golf With Your Friends",status-playable;online-broken,playable,2022-09-29 12:55:11.000 +0100EEC00AA6E000,"Gone Home",status-playable,playable,2022-08-01 11:14:20.000 +01007C2002B3C000,"GoNNER",status-playable,playable,2020-05-19 12:05:02.000 +0100B0500FE4E000,"Good Job!™",status-playable,playable,2021-03-02 13:15:55.000 +01003AD0123A2000,"Good Night, Knight",status-nothing;crash,nothing,2023-07-30 23:38:13.000 +0100F610122F6000,"Good Pizza, Great Pizza",status-playable,playable,2020-12-04 22:59:18.000 +010014C0100C6000,"Goosebumps Dead of Night",gpu;nvdec;status-ingame,ingame,2020-12-10 20:02:16.000 +0100B8000B190000,"Goosebumps The Game",status-playable,playable,2020-05-19 11:56:52.000 +0100F2A005C98000,"Gorogoa",status-playable,playable,2022-08-01 11:55:08.000 +01000C7003FE8000,"GORSD",status-playable,playable,2020-12-04 22:15:21.000 +0100E8D007E16000,"Gotcha Racing 2nd",status-playable,playable,2020-07-23 17:14:04.000 +01001010121DE000,"Gothic Murder: Adventure That Changes Destiny",deadlock;status-ingame;crash,ingame,2022-09-30 23:16:53.000 +01003FF009E60000,"Grab the Bottle",status-playable,playable,2020-07-14 17:06:41.000 +01004D10020F2000,"Graceful Explosion Machine",status-playable,playable,2020-05-19 20:36:55.000 +010038D00EC88000,"Grand Brix Shooter",slow;status-playable,playable,2020-06-24 13:23:54.000 +010038100D436000,"Grand Guilds",UE4;nvdec;status-playable,playable,2021-04-26 12:49:05.000 +0100BE600D07A000,"Grand Prix Story",status-playable,playable,2022-08-01 12:42:23.000 +05B1D2ABD3D30000,"Grand Theft Auto 3",services;status-nothing;crash;homebrew,nothing,2023-05-01 22:01:58.000 +0100E0600BBC8000,"GRANDIA HD Collection",status-boots;crash,boots,2024-08-19 04:29:48.000 +010028200E132000,"Grass Cutter - Mutated Lawns",slow;status-ingame,ingame,2020-05-19 18:27:42.000 +010074E0099FA000,"Grave Danger",status-playable,playable,2020-05-18 17:41:28.000 +010054A013E0C000,"GraviFire",status-playable,playable,2021-04-05 17:13:32.000 +01002C2011828000,"Gravity Rider Zero",gpu;status-ingame;vulkan-backend-bug,ingame,2022-09-29 13:56:13.000 +0100BD800DFA6000,"Greedroid",status-playable,playable,2020-12-14 11:14:32.000 +010068D00AE68000,"GREEN",status-playable,playable,2022-08-01 12:54:15.000 +0100CBB0070EE000,"Green Game: TimeSwapper",nvdec;status-playable,playable,2021-02-19 18:51:55.000 +0100DFE00F002000,"GREEN The Life Algorithm",status-playable,playable,2022-09-27 21:37:13.000 +0100DA7013792000,"Grey Skies: A War of the Worlds Story",status-playable;UE4,playable,2022-10-24 11:13:59.000 +010031200981C000,"Grid Mania",status-playable,playable,2020-05-19 14:11:05.000 +0100197008B52000,"GRIDD: Retroenhanced",status-playable,playable,2020-05-20 11:32:40.000 +0100DC800A602000,"GRID™ Autosport",status-playable;nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45.000 +0100B7900B024000,"Grim Fandango Remastered",status-playable;nvdec,playable,2022-08-01 13:55:58.000 +010078E012D80000,"Grim Legends 2: Song of the Dark Swan",status-playable;nvdec,playable,2022-10-18 12:58:45.000 +010009F011F90000,"Grim Legends: The Forsaken Bride",status-playable;nvdec,playable,2022-10-18 13:14:06.000 +01001E200F2F8000,"Grimshade",status-playable,playable,2022-10-02 12:44:20.000 +0100538012496000,"Grindstone",status-playable,playable,2023-02-08 15:54:06.000 +0100459009A2A000,"GRIP",status-playable;nvdec;online-broken;UE4,playable,2022-08-01 15:00:22.000 +0100E1700C31C000,"GRIS",nvdec;status-playable,playable,2021-06-03 13:33:44.000 +01009D7011B02000,"GRISAIA PHANTOM TRIGGER 01&02",status-playable;nvdec,playable,2022-12-04 21:16:06.000 +01005250123B8000,"GRISAIA PHANTOM TRIGGER 03",audout;status-playable,playable,2021-01-31 12:30:47.000 +0100D970123BA000,"GRISAIA PHANTOM TRIGGER 04",audout;status-playable,playable,2021-01-31 12:40:37.000 +01002330123BC000,"GRISAIA PHANTOM TRIGGER 05",audout;nvdec;status-playable,playable,2021-01-31 12:49:59.000 +0100CAF013AE6000,"GRISAIA PHANTOM TRIGGER 5.5",audout;nvdec;status-playable,playable,2021-01-31 12:59:44.000 +010091300FFA0000,"Grizzland",gpu;status-ingame,ingame,2024-07-11 16:28:34.000 +0100EB500D92E000,"GROOVE COASTER WAI WAI PARTY!!!!",status-playable;nvdec;ldn-broken,playable,2021-11-06 14:54:27.000 +01007E100456C000,"Guacamelee! 2",status-playable,playable,2020-05-15 14:56:59.000 +0100BAE00B470000,"Guacamelee! Super Turbo Championship Edition",status-playable,playable,2020-05-13 23:44:18.000 +010089900C9FA000,"Guess the Character",status-playable,playable,2020-05-20 13:14:19.000 +01005DC00D80C000,"Guess the word",status-playable,playable,2020-07-26 21:34:25.000 +01006F80082E4000,"GUILTY GEAR XX ACCENT CORE PLUS R",nvdec;status-playable,playable,2021-01-13 09:28:33.000 +01003C6008940000,"GUNBIRD for Nintendo Switch",32-bit;status-playable,playable,2021-06-04 19:16:01.000 +0100BCB00AE98000,"GUNBIRD2 for Nintendo Switch",status-playable,playable,2020-10-10 14:41:16.000 +,"Gunka o haita neko",gpu;nvdec;status-ingame,ingame,2020-08-25 12:37:56.000 +010061000D318000,"Gunman Clive HD Collection",status-playable,playable,2020-10-09 12:17:35.000 +01006D4003BCE000,"Guns, Gore and Cannoli 2",online;status-playable,playable,2021-01-06 18:43:59.000 +01008C800E654000,"Gunvolt Chronicles Luminous Avenger iX - Retail Version",status-playable,playable,2020-06-16 22:47:07.000 +0100763015C2E000,"Gunvolt Chronicles: Luminous Avenger iX 2",status-nothing;crash;Needs Update,nothing,2022-04-29 15:34:34.000 +01002C8018554000,"Gurimugurimoa OnceMore Demo",status-playable,playable,2022-07-29 22:07:31.000 +0100AC601DCA8000,"GYLT",status-ingame;crash,ingame,2024-03-18 20:16:51.000 +0100822012D76000,"HAAK",gpu;status-ingame,ingame,2023-02-19 14:31:05.000 +01007E100EFA8000,"Habroxia",status-playable,playable,2020-06-16 23:04:42.000 +0100535012974000,"Hades",status-playable;vulkan,playable,2022-10-05 10:45:21.000 +0100618010D76000,"Hakoniwa Explorer Plus",slow;status-ingame,ingame,2021-02-19 16:56:19.000 +0100E0D00C336000,"Halloween Pinball",status-playable,playable,2021-01-12 16:00:46.000 +01006FF014152000,"Hamidashi Creative",gpu;status-ingame,ingame,2021-12-19 15:30:51.000 +01003B9007E86000,"Hammerwatch",status-playable;online-broken;ldn-broken,playable,2022-08-01 16:28:46.000 +01003620068EA000,"Hand of Fate 2",status-playable,playable,2022-08-01 15:44:16.000 +0100973011358000,"Hang The Kings",status-playable,playable,2020-07-28 22:56:59.000 +010066C018E50000,"Happy Animals Mini Golf",gpu;status-ingame,ingame,2022-12-04 19:24:28.000 +0100ECE00D13E000,"Hard West",status-nothing;regression,nothing,2022-02-09 07:45:56.000 +0100D55011D60000,"Hardcore Maze Cube",status-playable,playable,2020-12-04 20:01:24.000 +01002F0011DD4000,"HARDCORE MECHA",slow;status-playable,playable,2020-11-01 15:06:33.000 +01000C90117FA000,"HardCube",status-playable,playable,2021-05-05 18:33:03.000 +0100BB600C096000,"Hardway Party",status-playable,playable,2020-07-26 12:35:07.000 +0100D0500AD30000,"Harvest Life",status-playable,playable,2022-08-01 16:51:45.000 +010016B010FDE000,"Harvest Moon®: One World",status-playable,playable,2023-05-26 09:17:19.000 +0100A280187BC000,"Harvestella",status-playable;UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11.000 +0100E29001298000,"Has-Been Heroes",status-playable,playable,2021-01-13 13:31:48.000 +01001CC00FA1A000,"Hatsune Miku: Project DIVA Mega Mix",audio;status-playable;online-broken,playable,2024-01-07 23:12:57.000 +01009E6014F18000,"Haunted Dawn: The Zombie Apocalypse",status-playable,playable,2022-10-28 12:31:51.000 +010023F008204000,"Haunted Dungeons:Hyakki Castle",status-playable,playable,2020-08-12 14:21:48.000 +0100E2600DBAA000,"Haven",status-playable,playable,2021-03-24 11:52:41.000 +0100EA900FB2C000,"Hayfever",status-playable;loader-allocator,playable,2022-09-22 17:35:41.000 +0100EFE00E1DC000,"Headliner: NoviNews",online;status-playable,playable,2021-03-01 11:36:00.000 +0100A8200C372000,"Headsnatchers",UE4;crash;status-menus,menus,2020-07-14 13:29:14.000 +010067400EA5C000,"Headspun",status-playable,playable,2020-07-31 19:46:47.000 +0100D12008EE4000,"Heart&Slash",status-playable,playable,2021-01-13 20:56:32.000 +010059100D928000,"Heaven Dust",status-playable,playable,2020-05-17 14:02:41.000 +0100FD901000C000,"Heaven's Vault",crash;status-ingame,ingame,2021-02-08 18:22:01.000 +0100B9C012B66000,"Helheim Hassle",status-playable,playable,2020-10-14 11:38:36.000 +0100E4300C278000,"Hell is Other Demons",status-playable,playable,2021-01-13 13:23:02.000 +01000938017E5C00,"Hell Pie0",status-playable;nvdec;UE4,playable,2022-11-03 16:48:46.000 +0100A4600E27A000,"Hell Warders",online;status-playable,playable,2021-02-27 02:31:03.000 +010044500CF8E000,"Hellblade: Senua's Sacrifice",gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50.000 +010087D0084A8000,"Hello Kitty Kruisers With Sanrio Friends",nvdec;status-playable,playable,2021-06-04 19:08:46.000 +0100FAA00B168000,"Hello Neighbor",status-playable;UE4,playable,2022-08-01 21:32:23.000 +010092B00C4F0000,"Hello Neighbor Hide and Seek",UE4;gpu;slow;status-ingame,ingame,2020-10-24 10:59:57.000 +010024600C794000,"Hellpoint",status-menus,menus,2021-11-26 13:24:20.000 +0100BEA00E63A000,"Hero Express",nvdec;status-playable,playable,2020-08-06 13:23:43.000 +010077D01094C000,"Hero-U: Rogue to Redemption",nvdec;status-playable,playable,2021-03-24 11:40:01.000 +0100D2B00BC54000,"Heroes of Hammerwatch - Ultimate Edition",status-playable,playable,2022-08-01 18:30:21.000 +01001B70080F0000,"HEROINE ANTHEM ZERO episode 1",status-playable;vulkan-backend-bug,playable,2022-08-01 22:02:36.000 +010057300B0DC000,"Heroki",gpu;status-ingame,ingame,2023-07-30 19:30:01.000 +0100C2700E338000,"Heroland",status-playable,playable,2020-08-05 15:35:39.000 +01007AC00E012000,"HexaGravity",status-playable,playable,2021-05-28 13:47:48.000 +01004E800F03C000,"Hidden",slow;status-ingame,ingame,2022-10-05 10:56:53.000 +0100F6A00A684000,"Higurashi no Naku Koro ni Hō",audio;status-ingame,ingame,2021-09-18 14:40:28.000 +0100F8D0129F4000,"Himehibi 1 gakki - Princess Days",status-nothing;crash,nothing,2021-11-03 08:34:19.000 +0100F3D008436000,"Hiragana Pixel Party",status-playable,playable,2021-01-14 08:36:50.000 +01004990132AC000,"HITMAN 3 - Cloud Version",Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:35:07.000 +010083A018262000,"Hitman: Blood Money — Reprisal",deadlock;status-ingame,ingame,2024-09-28 16:28:50.000 +01004B100A5CC000,"Hob: The Definitive Edition",status-playable,playable,2021-01-13 09:39:19.000 +0100F7300ED2C000,"Hoggy2",status-playable,playable,2022-10-10 13:53:35.000 +0100F7E00C70E000,"Hogwarts Legacy",status-ingame;slow,ingame,2024-09-03 19:53:58.000 +0100633007D48000,"Hollow Knight",status-playable;nvdec,playable,2023-01-16 15:44:56.000 +0100F2100061E800,"Hollow0",UE4;gpu;status-ingame,ingame,2021-03-03 23:42:56.000 +0100342009E16000,"Holy Potatoes! What The Hell?!",status-playable,playable,2020-07-03 10:48:56.000 +010071B00C904000,"HoPiKo",status-playable,playable,2021-01-13 20:12:38.000 +010087800EE5A000,"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",status-boots;crash,boots,2023-02-19 00:51:21.000 +010086D011EB8000,"Horace",status-playable,playable,2022-10-10 14:03:50.000 +0100001019F6E000,"Horizon Chase 2",deadlock;slow;status-ingame;crash;UE4,ingame,2024-08-19 04:24:06.000 +01009EA00B714000,"Horizon Chase Turbo",status-playable,playable,2021-02-19 19:40:56.000 +0100E4200FA82000,"Horror Pinball Bundle",status-menus;crash,menus,2022-09-13 22:15:34.000 +0100017007980000,"Hotel Transylvania 3 Monsters Overboard",nvdec;status-playable,playable,2021-01-27 18:55:31.000 +0100D0E00E51E000,"Hotline Miami Collection",status-playable;nvdec,playable,2022-09-09 16:41:19.000 +0100BDE008218000,"Hotshot Racing",gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17.000 +0100CAE00EB02000,"House Flipper",status-playable,playable,2021-06-16 18:28:32.000 +0100F6800910A000,"Hover",status-playable;online-broken,playable,2022-09-20 12:54:46.000 +0100A66003384000,"Hulu",status-boots;online-broken,boots,2022-12-09 10:05:00.000 +0100701001D92000,"Human Resource Machine",32-bit;status-playable,playable,2020-12-17 21:47:09.000 +01000CA004DCA000,"Human: Fall Flat",status-playable,playable,2021-01-13 18:36:05.000 +0100E1A00AF40000,"Hungry Shark® World",status-playable,playable,2021-01-13 18:26:08.000 +0100EBA004726000,"Huntdown",status-playable,playable,2021-04-05 16:59:54.000 +010068000CAC0000,"Hunter's Legacy: Purrfect Edition",status-playable,playable,2022-08-02 10:33:31.000 +0100C460040EA000,"Hunting Simulator",status-playable;UE4,playable,2022-08-02 10:54:08.000 +010061F010C3A000,"Hunting Simulator 2",status-playable;UE4,playable,2022-10-10 14:25:51.000 +0100B3300B4AA000,"Hyper Jam",UE4;crash;status-boots,boots,2020-12-15 22:52:11.000 +01003B200B372000,"Hyper Light Drifter - Special Edition",status-playable;vulkan-backend-bug,playable,2023-01-13 15:44:48.000 +01006C500A29C000,"HyperBrawl Tournament",crash;services;status-boots,boots,2020-12-04 23:03:27.000 +0100A8B00F0B4000,"HYPERCHARGE Unboxed",status-playable;nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39.000 +010061400ED90000,"HyperParasite",status-playable;nvdec;UE4,playable,2022-09-27 22:05:44.000 +0100959010466000,"Hypnospace Outlaw",status-ingame;nvdec,ingame,2023-08-02 22:46:49.000 +01002B00111A2000,"Hyrule Warriors: Age of Calamity",gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00.000 +0100A2C01320E000,"Hyrule Warriors: Age of Calamity - Demo Version",slow;status-playable,playable,2022-10-10 17:37:41.000 +0100AE00096EA000,"Hyrule Warriors: Definitive Edition",services-horizon;status-ingame;nvdec,ingame,2024-06-16 10:34:05.000 +0100849000BDA000,"I Am Setsuna",status-playable,playable,2021-11-28 11:06:11.000 +01001860140B0000,"I Saw Black Clouds",nvdec;status-playable,playable,2021-04-19 17:22:16.000 +0100429006A06000,"I, Zombie",status-playable,playable,2021-01-13 14:53:44.000 +01004E5007E92000,"Ice Age Scrat's Nutty Adventure!",status-playable;nvdec,playable,2022-09-13 22:22:29.000 +010053700A25A000,"Ice Cream Surfer",status-playable,playable,2020-07-29 12:04:07.000 +0100954014718000,"Ice Station Z",status-menus;crash,menus,2021-11-21 20:02:15.000 +0100BE9007E7E000,"ICEY",status-playable,playable,2021-01-14 16:16:04.000 +0100BC60099FE000,"Iconoclasts",status-playable,playable,2021-08-30 21:11:04.000 +01001E700EB28000,"Idle Champions of the Forgotten Realms",online;status-boots,boots,2020-12-17 18:24:57.000 +01002EC014BCA000,"IdolDays",gpu;status-ingame;crash,ingame,2021-12-19 15:31:28.000 +01006550129C6000,"If Found...",status-playable,playable,2020-12-11 13:43:14.000 +01001AC00ED72000,"If My Heart Had Wings",status-playable,playable,2022-09-29 14:54:57.000 +01009F20086A0000,"Ikaruga",status-playable,playable,2023-04-06 15:00:02.000 +010040900AF46000,"Ikenfell",status-playable,playable,2021-06-16 17:18:44.000 +01007BC00E55A000,"Immortal Planet",status-playable,playable,2022-09-20 13:40:43.000 +010079501025C000,"Immortal Realms: Vampire Wars",nvdec;status-playable,playable,2021-06-17 17:41:46.000 +01000F400435A000,"Immortal Redneck",nvdec;status-playable,playable,2021-01-27 18:36:28.000 +01004A600EC0A000,"Immortals Fenyx Rising™",gpu;status-menus;crash,menus,2023-02-24 16:19:55.000 +0100737003190000,"IMPLOSION",status-playable;nvdec,playable,2021-12-12 03:52:13.000 +0100A760129A0000,"In rays of the Light",status-playable,playable,2021-04-07 15:18:07.000 +0100A2101107C000,"Indie Puzzle Bundle Vol 1",status-playable,playable,2022-09-27 22:23:21.000 +010002A00CD68000,"Indiecalypse",nvdec;status-playable,playable,2020-06-11 20:19:09.000 +01001D3003FDE000,"Indivisible",status-playable;nvdec,playable,2022-09-29 15:20:57.000 +01002BD00F626000,"Inertial Drift",status-playable;online-broken,playable,2022-10-11 12:22:19.000 +0100D4300A4CA000,"Infernium",UE4;regression;status-nothing,nothing,2021-01-13 16:36:07.000 +010039C001296000,"Infinite Minigolf",online;status-playable,playable,2020-09-29 12:26:25.000 +01001CB00EFD6000,"Infliction: Extended Cut",status-playable;nvdec;UE4,playable,2022-10-02 13:15:55.000 +0100F1401161E000,"INMOST",status-playable,playable,2022-10-05 11:27:40.000 +0100F200049C8000,"InnerSpace",status-playable,playable,2021-01-13 19:36:14.000 +0100D2D009028000,"INSIDE",status-playable,playable,2021-12-25 20:24:56.000 +0100EC7012D34000,"Inside Grass: A little adventure",status-playable,playable,2020-10-15 15:26:27.000 +010099700D750000,"Instant Sports",status-playable,playable,2022-09-09 12:59:40.000 +010099A011A46000,"Instant Sports Summer Games",gpu;status-menus,menus,2020-09-02 13:39:28.000 +010031B0145B8000,"INSTANT SPORTS TENNIS",status-playable,playable,2022-10-28 16:42:17.000 +010041501005E000,"Interrogation: You will be deceived",status-playable,playable,2022-10-05 11:40:10.000 +01000F700DECE000,"Into the Dead 2",status-playable;nvdec,playable,2022-09-14 12:36:14.000 +01001D0003B96000,"INVERSUS Deluxe",status-playable;online-broken,playable,2022-08-02 14:35:36.000 +0100C5B00FADE000,"Invisible Fist",status-playable,playable,2020-08-08 13:25:52.000 +010031B00C48C000,"Invisible, Inc. Nintendo Switch Edition",crash;status-nothing,nothing,2021-01-29 16:28:13.000 +01005F400E644000,"Invisigun Reloaded",gpu;online;status-ingame,ingame,2021-06-10 12:13:24.000 +010041C00D086000,"Ion Fury",status-ingame;vulkan-backend-bug,ingame,2022-08-07 08:27:51.000 +010095C016C14000,"Iridium",status-playable,playable,2022-08-05 23:19:53.000 +0100AD300B786000,"Iris School of Wizardry -Vinculum Hearts-",status-playable,playable,2022-12-05 13:11:15.000 +0100945012168000,"Iris.Fall",status-playable;nvdec,playable,2022-10-18 13:40:22.000 +01005270118D6000,"Iron Wings",slow;status-ingame,ingame,2022-08-07 08:32:57.000 +01004DB003E6A000,"IRONCAST",status-playable,playable,2021-01-13 13:54:29.000 +0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",status-playable,playable,2021-06-04 20:12:37.000 +010063E0104BE000,"Is It Wrong to Try to Pick Up Girls in a Dungeon? Familia Myth Infinite Combate",status-playable,playable,2020-08-31 13:52:21.000 +0100F06013710000,"ISLAND",status-playable,playable,2021-05-06 15:11:47.000 +010077900440A000,"Island Flight Simulator",status-playable,playable,2021-06-04 19:42:46.000 +0100A2600FCA0000,"Island Saver",nvdec;status-playable,playable,2020-10-23 22:07:02.000 +010065200D192000,"Isoland",status-playable,playable,2020-07-26 13:48:16.000 +0100F5600D194000,"Isoland 2 - Ashes of Time",status-playable,playable,2020-07-26 14:29:05.000 +010001F0145A8000,"Isolomus",services;status-boots,boots,2021-11-03 07:48:21.000 +010068700C70A000,"ITTA",status-playable,playable,2021-06-07 03:15:52.000 +01004070022F0000,"Ittle Dew 2+",status-playable,playable,2020-11-17 11:44:32.000 +0100DEB00F12A000,"IxSHE Tell",status-playable;nvdec,playable,2022-12-02 18:00:42.000 +0100D8E00C874000,"izneo",status-menus;online-broken,menus,2022-08-06 15:56:23.000 +0100CD5008D9E000,"James Pond Codename Robocod",status-playable,playable,2021-01-13 09:48:45.000 +01005F4010AF0000,"Japanese Rail Sim: Journey to Kyoto",nvdec;status-playable,playable,2020-07-29 17:14:21.000 +010002D00EDD0000,"JDM Racing",status-playable,playable,2020-08-03 17:02:37.000 +0100C2700AEB8000,"Jenny LeClue - Detectivu",crash;status-nothing,nothing,2020-12-15 21:07:07.000 +01006E400AE2A000,"Jeopardy!®",audout;nvdec;online;status-playable,playable,2021-02-22 13:53:46.000 +0100E4900D266000,"Jet Kave Adventure",status-playable;nvdec,playable,2022-09-09 14:50:39.000 +0100F3500C70C000,"Jet Lancer",gpu;status-ingame,ingame,2021-02-15 18:15:47.000 +0100A5A00AF26000,"Jettomero: Hero of the Universe",status-playable,playable,2022-08-02 14:46:43.000 +01008330134DA000,"Jiffy",gpu;status-ingame;opengl,ingame,2024-02-03 23:11:24.000 +01001F5006DF6000,"Jim is Moving Out!",deadlock;status-ingame,ingame,2020-06-03 22:05:19.000 +0100F4D00D8BE000,"Jinrui no Ninasama he",status-ingame;crash,ingame,2023-03-07 02:04:17.000 +010038D011F08000,"Jisei: The First Case HD",audio;status-playable,playable,2022-10-05 11:43:33.000 +01007CE00C960000,"Job the Leprechaun",status-playable,playable,2020-06-05 12:10:06.000 +01007090104EC000,"John Wick Hex",status-playable,playable,2022-08-07 08:29:12.000 +01006E4003832000,"Johnny Turbo's Arcade: Bad Dudes",status-playable,playable,2020-12-10 12:30:56.000 +010069B002CDE000,"Johnny Turbo's Arcade: Gate Of Doom",status-playable,playable,2022-07-29 12:17:50.000 +010080D002CC6000,"Johnny Turbo's Arcade: Two Crude Dudes",status-playable,playable,2022-08-02 20:29:50.000 +0100D230069CC000,"Johnny Turbo's Arcade: Wizard Fire",status-playable,playable,2022-08-02 20:39:15.000 +01008120128C2000,"JoJos Bizarre Adventure All-Star Battle R",status-playable,playable,2022-12-03 10:45:10.000 +01008B60117EC000,"Journey to the Savage Planet",status-playable;nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12.000 +0100C7600F654000,"Juicy Realm",status-playable,playable,2023-02-21 19:16:20.000 +0100B4D00C76E000,"JUMANJI: The Video Game",UE4;crash;status-boots,boots,2020-07-12 13:52:25.000 +0100183010F12000,"JUMP FORCE - Deluxe Edition",status-playable;nvdec;online-broken;UE4,playable,2023-10-01 15:56:05.000 +01003D601014A000,"Jump King",status-playable,playable,2020-06-09 10:12:39.000 +0100B9C012706000,"Jump Rope Challenge",services;status-boots;crash;Needs Update,boots,2023-02-27 01:24:28.000 +0100D87009954000,"Jumping Joe & Friends",status-playable,playable,2021-01-13 17:09:42.000 +010069800D2B4000,"JUNK PLANET",status-playable,playable,2020-11-09 12:38:33.000 +0100CE100A826000,"Jurassic Pinball",status-playable,playable,2021-06-04 19:02:37.000 +010050A011344000,"Jurassic World Evolution: Complete Edition",cpu;status-menus;crash,menus,2023-08-04 18:06:54.000 +0100BCE000598000,"Just Dance 2017®",online;status-playable,playable,2021-03-05 09:46:01.000 +0100BEE017FC0000,"Just Dance 2023",status-nothing,nothing,2023-06-05 16:44:54.000 +010075600AE96000,"Just Dance® 2019",gpu;online;status-ingame,ingame,2021-02-27 17:21:27.000 +0100DDB00DB38000,"Just Dance® 2020",status-playable,playable,2022-01-24 13:31:57.000 +0100EA6014BB8000,"Just Dance® 2022",gpu;services;status-ingame;crash;Needs Update,ingame,2022-10-28 11:01:53.000 +0100AC600CF0A000,"Just Die Already",status-playable;UE4,playable,2022-12-13 13:37:50.000 +01002C301033E000,"Just Glide",status-playable,playable,2020-08-07 17:38:10.000 +0100830008426000,"Just Shapes & Beats",ldn-untested;nvdec;status-playable,playable,2021-02-09 12:18:36.000 +010035A0044E8000,"JYDGE",status-playable,playable,2022-08-02 21:20:13.000 +0100D58012FC2000,"Kagamihara/Justice",crash;status-nothing,nothing,2021-06-21 16:41:29.000 +0100D5F00EC52000,"Kairobotica",status-playable,playable,2021-05-06 12:17:56.000 +0100BDC00A664000,"KAMEN RIDER CLIMAX SCRAMBLE",status-playable;nvdec;ldn-untested,playable,2024-07-03 08:51:11.000 +0100A9801180E000,"KAMEN RIDER memory of heroez / Premium Sound Edition",status-playable,playable,2022-12-06 03:14:26.000 +010085300314E000,"KAMIKO",status-playable,playable,2020-05-13 12:48:57.000 +,"Kangokuto Mary Skelter Finale",audio;crash;status-ingame,ingame,2021-01-09 22:39:28.000 +01007FD00DB20000,"Katakoi Contrast - collection of branch -",status-playable;nvdec,playable,2022-12-09 09:41:26.000 +0100D7000C2C6000,"Katamari Damacy REROLL",status-playable,playable,2022-08-02 21:35:05.000 +0100F9800EDFA000,"KATANA KAMI: A Way of the Samurai Story",slow;status-playable,playable,2022-04-09 10:40:16.000 +010029600D56A000,"Katana ZERO",status-playable,playable,2022-08-26 08:09:09.000 +010038B00F142000,"Kaze and the Wild Masks",status-playable,playable,2021-04-19 17:11:03.000 +0100D7C01115E000,"Keen: One Girl Army",status-playable,playable,2020-12-14 23:19:52.000 +01008D400A584000,"Keep Talking and Nobody Explodes",status-playable,playable,2021-02-15 18:05:21.000 +01004B100BDA2000,"KEMONO FRIENDS PICROSS",status-playable,playable,2023-02-08 15:54:34.000 +0100A8200B15C000,"Kentucky Robo Chicken",status-playable,playable,2020-05-12 20:54:17.000 +0100327005C94000,"Kentucky Route Zero: TV Edition",status-playable,playable,2024-04-09 23:22:46.000 +0100DA200A09A000,"Kero Blaster",status-playable,playable,2020-05-12 20:42:52.000 +0100F680116A2000,"Kholat",UE4;nvdec;status-playable,playable,2021-06-17 11:52:48.000 +0100C0A004C2C000,"Kid Tripp",crash;status-nothing,nothing,2020-10-15 07:41:23.000 +0100FB400D832000,"KILL la KILL -IF",status-playable,playable,2020-06-09 14:47:08.000 +010011B00910C000,"Kill The Bad Guy",status-playable,playable,2020-05-12 22:16:10.000 +0100F2900B3E2000,"Killer Queen Black",ldn-untested;online;status-playable,playable,2021-04-08 12:46:18.000 +,"Kin'iro no Corda Octave",status-playable,playable,2020-09-22 13:23:12.000 +010089000F0E8000,"Kine",status-playable;UE4,playable,2022-09-14 14:28:37.000 +0100E6B00FFBA000,"King Lucas",status-playable,playable,2022-09-21 19:43:23.000 +0100B1300783E000,"King Oddball",status-playable,playable,2020-05-13 13:47:57.000 +01008D80148C8000,"King of Seas",status-playable;nvdec;UE4,playable,2022-10-28 18:29:41.000 +0100515014A94000,"King of Seas Demo",status-playable;nvdec;UE4,playable,2022-10-28 18:09:31.000 +01005D2011EA8000,"KINGDOM HEARTS Melody of Memory",crash;nvdec;status-ingame,ingame,2021-03-03 17:34:12.000 +0100A280121F6000,"Kingdom Rush",status-nothing;32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00.000 +01005EF003FF2000,"Kingdom Two Crowns",status-playable,playable,2020-05-16 19:36:21.000 +0100BD9004AB6000,"Kingdom: New Lands",status-playable,playable,2022-08-02 21:48:50.000 +0100EF50132BE000,"Kingdoms of Amalur: Re-Reckoning",status-playable,playable,2023-08-10 13:05:08.000 +010091201605A000,"Kirby and the Forgotten Land (Demo version)",status-playable;demo,playable,2022-08-21 21:03:01.000 +0100227010460000,"Kirby Fighters™ 2",ldn-works;online;status-playable,playable,2021-06-17 13:06:39.000 +0100A8E016236000,"Kirby’s Dream Buffet™",status-ingame;crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44.000 +010091D01A57E000,"Kirby’s Return to Dream Land Deluxe - Demo",status-playable;demo,playable,2023-02-18 17:21:55.000 +01006B601380E000,"Kirby’s Return to Dream Land™ Deluxe",status-playable,playable,2024-05-16 19:58:04.000 +01004D300C5AE000,"Kirby™ and the Forgotten Land",gpu;status-ingame,ingame,2024-03-11 17:11:21.000 +01007E3006DDA000,"Kirby™ Star Allies",status-playable;nvdec,playable,2023-11-15 17:06:19.000 +0100F3A00F4CA000,"Kissed by the Baddest Bidder",gpu;status-ingame;nvdec,ingame,2022-12-04 20:57:11.000 +01000C900A136000,"Kitten Squad",status-playable;nvdec,playable,2022-08-03 12:01:59.000 +010079D00C8AE000,"Klondike Solitaire",status-playable,playable,2020-12-13 16:17:27.000 +0100A6800DE70000,"Knight Squad",status-playable,playable,2020-08-09 16:54:51.000 +010024B00E1D6000,"Knight Squad 2",status-playable;nvdec;online-broken,playable,2022-10-28 18:38:09.000 +0100D51006AAC000,"Knight Terrors",status-playable,playable,2020-05-13 13:09:22.000 +01005F8010D98000,"Knightin'+",status-playable,playable,2020-08-31 18:18:21.000 +010004400B22A000,"Knights of Pen & Paper 2 Deluxiest Edition",status-playable,playable,2020-05-13 14:07:00.000 +0100D3F008746000,"Knights of Pen and Paper +1 Deluxier Edition",status-playable,playable,2020-05-11 21:46:32.000 +010001A00A1F6000,"Knock-Knock",nvdec;status-playable,playable,2021-02-01 20:03:19.000 +01009EF00DDB4000,"Knockout City™",services;status-boots;online-broken,boots,2022-12-09 09:48:58.000 +0100C57019BA2000,"Koa and the Five Pirates of Mara",gpu;status-ingame,ingame,2024-07-11 16:14:44.000 +01001E500401C000,"Koi DX",status-playable,playable,2020-05-11 21:37:51.000 +,"Koi no Hanasaku Hyakkaen",32-bit;gpu;nvdec;status-ingame,ingame,2020-10-03 14:17:10.000 +01005D200C9AA000,"Koloro",status-playable,playable,2022-08-03 12:34:02.000 +0100464009294000,"Kona",status-playable,playable,2022-08-03 12:48:19.000 +010016C011AAA000,"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",status-playable,playable,2023-04-26 09:51:08.000 +010088500D5EE000,"KORAL",UE4;crash;gpu;status-menus,menus,2020-11-16 12:41:26.000 +0100EC8004762000,"KORG Gadget for Nintendo Switch",status-playable,playable,2020-05-13 13:57:24.000 +010046600CCA4000,"Kotodama: The 7 Mysteries of Fujisawa",audout;status-playable,playable,2021-02-01 20:28:37.000 +010022801242C000,"KukkoroDays",status-menus;crash,menus,2021-11-25 08:52:56.000 +010035A00DF62000,"KUNAI",status-playable;nvdec,playable,2022-09-20 13:48:34.000 +010060400ADD2000,"Kunio-Kun: The World Classics Collection",online;status-playable,playable,2021-01-29 20:21:46.000 +010037500F282000,"KUUKIYOMI 2: Consider It More! - New Era",status-nothing;crash;Needs Update,nothing,2021-11-02 09:34:40.000 +0100894011F62000,"Kwaidan ~Azuma manor story~",status-playable,playable,2022-10-05 12:50:44.000 +0100830004FB6000,"L.A. Noire",status-playable,playable,2022-08-03 16:49:35.000 +0100732009CAE000,"L.F.O. -Lost Future Omega-",UE4;deadlock;status-boots,boots,2020-10-16 12:16:44.000 +0100F2B0123AE000,"L.O.L. Surprise! Remix: We Rule The World",status-playable,playable,2022-10-11 22:48:03.000 +010026000F662800,"LA-MULANA",gpu;status-ingame,ingame,2022-08-12 01:06:21.000 +0100E5D00F4AE000,"LA-MULANA 1 & 2",status-playable,playable,2022-09-22 17:56:36.000 +010038000F644000,"LA-MULANA 2",status-playable,playable,2022-09-03 13:45:57.000 +010058500B3E0000,"Labyrinth of Refrain: Coven of Dusk",status-playable,playable,2021-02-15 17:38:48.000 +010022D0089AE000,"Labyrinth of the Witch",status-playable,playable,2020-11-01 14:42:37.000 +0100BAB00E8C0000,"Langrisser I & II",status-playable,playable,2021-02-19 15:46:10.000 +0100E7200B272000,"Lanota",status-playable,playable,2019-09-04 01:58:14.000 +01005E000D3D8000,"Lapis x Labyrinth",status-playable,playable,2021-02-01 18:58:08.000 +0100AFE00E882000,"Laraan",status-playable,playable,2020-12-16 12:45:48.000 +0100DA700879C000,"Last Day of June",nvdec;status-playable,playable,2021-06-08 11:35:32.000 +01009E100BDD6000,"LASTFIGHT",status-playable,playable,2022-09-20 13:54:55.000 +0100055007B86000,"Late Shift",nvdec;status-playable,playable,2021-02-01 18:43:58.000 +01004EB00DACE000,"Later Daters Part One",status-playable,playable,2020-07-29 16:35:45.000 +01001730144DA000,"Layers of Fear 2",status-playable;nvdec;UE4,playable,2022-10-28 18:49:52.000 +0100BF5006A7C000,"Layers of Fear: Legacy",nvdec;status-playable,playable,2021-02-15 16:30:41.000 +0100CE500D226000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",status-playable;nvdec;opengl,playable,2022-09-14 15:01:57.000 +0100FDB00AA80000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",gpu;status-ingame;nvdec;opengl,ingame,2022-09-14 15:15:55.000 +01009C100390E000,"League of Evil",online;status-playable,playable,2021-06-08 11:23:27.000 +01002E900CD6E000,"Left-Right : The Mansion",status-playable,playable,2020-05-13 13:02:12.000 +010079901C898000,"Legacy of Kain™ Soul Reaver 1&2 Remastered",status-playable,playable,2025-01-07 05:50:01.000 +01002DB007A96000,"Legend of Kay Anniversary",nvdec;status-playable,playable,2021-01-29 18:38:29.000 +0100ECC00EF3C000,"Legend of the Skyfish",status-playable,playable,2020-06-24 13:04:22.000 +01007E900DFB6000,"Legend of the Tetrarchs",deadlock;status-ingame,ingame,2020-07-10 07:54:03.000 +0100A73006E74000,"Legendary Eleven",status-playable,playable,2021-06-08 12:09:03.000 +0100A7700B46C000,"Legendary Fishing",online;status-playable,playable,2021-04-14 15:08:46.000 +0100739018020000,"LEGO® 2K Drive",gpu;status-ingame;ldn-works,ingame,2024-04-09 02:05:12.000 +01003A30012C0000,"LEGO® CITY Undercover",status-playable;nvdec,playable,2024-09-30 08:44:27.000 +010070D009FEC000,"LEGO® DC Super-Villains",status-playable,playable,2021-05-27 18:10:37.000 +010052A00B5D2000,"LEGO® Harry Potter™ Collection",status-ingame;crash,ingame,2024-01-31 10:28:07.000 +010073C01AF34000,"LEGO® Horizon Adventures™",status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56.000 +01001C100E772000,"LEGO® Jurassic World",status-playable,playable,2021-05-27 17:00:20.000 +0100D3A00409E000,"LEGO® Marvel Super Heroes 2",status-nothing;crash,nothing,2023-03-02 17:12:33.000 +01006F600FFC8000,"LEGO® Marvel™ Super Heroes",status-playable,playable,2024-09-10 19:02:19.000 +01007FC00206E000,"LEGO® NINJAGO® Movie Video Game",status-nothing;crash,nothing,2022-08-22 19:12:53.000 +010042D00D900000,"LEGO® Star Wars™: The Skywalker Saga",gpu;slow;status-ingame,ingame,2024-04-13 20:08:46.000 +0100A01006E00000,"LEGO® The Incredibles",status-nothing;crash,nothing,2022-08-03 18:36:59.000 +0100838002AEA000,"LEGO® Worlds",crash;slow;status-ingame,ingame,2020-07-17 13:35:39.000 +0100E7500BF84000,"LEGRAND LEGACY: Tale of the Fatebounds",nvdec;status-playable,playable,2020-07-26 12:27:36.000 +0100A8E00CAA0000,"Leisure Suit Larry - Wet Dreams Don't Dry",status-playable,playable,2022-08-03 19:51:44.000 +010031A0135CA000,"Leisure Suit Larry - Wet Dreams Dry Twice",status-playable,playable,2022-10-28 19:00:57.000 +01003AB00983C000,"Lethal League Blaze",online;status-playable,playable,2021-01-29 20:13:31.000 +01008C300648E000,"Letter Quest Remastered",status-playable,playable,2020-05-11 21:30:34.000 +0100CE301678E800,"Letters - a written adventure",gpu;status-ingame,ingame,2023-02-21 20:12:38.000 +01009A200BE42000,"Levelhead",online;status-ingame,ingame,2020-10-18 11:44:51.000 +0100C960041DC000,"Levels+ : Addictive Puzzle Game",status-playable,playable,2020-05-12 13:51:39.000 +0100C8000F146000,"Liberated",gpu;status-ingame;nvdec,ingame,2024-07-04 04:58:24.000 +01003A90133A6000,"Liberated: Enhanced Edition",gpu;status-ingame;nvdec,ingame,2024-07-04 04:48:48.000 +01004360045C8000,"Lichtspeer: Double Speer Edition",status-playable,playable,2020-05-12 16:43:09.000 +010041F0128AE000,"Liege Dragon",status-playable,playable,2022-10-12 10:27:03.000 +010006300AFFE000,"Life Goes On",status-playable,playable,2021-01-29 19:01:20.000 +0100FD101186C000,"Life is Strange 2",status-playable;UE4,playable,2024-07-04 05:05:58.000 +0100DC301186A000,"Life is Strange Remastered",status-playable;UE4,playable,2022-10-03 16:54:44.000 +010008501186E000,"Life is Strange: Before the Storm Remastered",status-playable,playable,2023-09-28 17:15:44.000 +0100500012AB4000,"Life is Strange: True Colors™",gpu;status-ingame;UE4,ingame,2024-04-08 16:11:52.000 +01003AB012F00000,"Life of Boris: Super Slav",status-ingame,ingame,2020-12-17 11:40:05.000 +0100B3A0135D6000,"Life of Fly",status-playable,playable,2021-01-25 23:41:07.000 +010069A01506E000,"Life of Fly 2",slow;status-playable,playable,2022-10-28 19:26:52.000 +01005B6008132000,"Lifeless Planet: Premiere Edition",status-playable,playable,2022-08-03 21:25:13.000 +010030A006F6E000,"Light Fall",nvdec;status-playable,playable,2021-01-18 14:55:36.000 +010087700D07C000,"Light Tracer",nvdec;status-playable,playable,2021-05-05 19:15:43.000 +01009C8009026000,"LIMBO",cpu;status-boots;32-bit,boots,2023-06-28 15:39:19.000 +0100EDE012B58000,"Linelight",status-playable,playable,2020-12-17 12:18:07.000 +0100FAD00E65E000,"Lines X",status-playable,playable,2020-05-11 15:28:30.000 +010032F01096C000,"Lines XL",status-playable,playable,2020-08-31 17:48:23.000 +0100943010310000,"Little Busters! Converted Edition",status-playable;nvdec,playable,2022-09-29 15:34:56.000 +0100A3F009142000,"Little Dragons Café",status-playable,playable,2020-05-12 00:00:52.000 +010079A00D9E8000,"Little Friends: Dogs & Cats",status-playable,playable,2020-11-12 12:45:51.000 +0100B18001D8E000,"Little Inferno",32-bit;gpu;nvdec;status-ingame,ingame,2020-12-17 21:43:56.000 +0100E7000E826000,"Little Misfortune",nvdec;status-playable,playable,2021-02-23 20:39:44.000 +0100FE0014200000,"Little Mouse's Encyclopedia",status-playable,playable,2022-10-28 19:38:58.000 +01002FC00412C000,"Little Nightmares Complete Edition",status-playable;nvdec;UE4,playable,2022-08-03 21:45:35.000 +010097100EDD6000,"Little Nightmares II",status-playable;UE4,playable,2023-02-10 18:24:44.000 +010093A0135D6000,"Little Nightmares II DEMO",status-playable;UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20.000 +0100535014D76000,"Little Noah: Scion of Paradise",status-playable;opengl-backend-bug,playable,2022-09-14 04:17:13.000 +0100E6D00E81C000,"Little Racer",status-playable,playable,2022-10-18 16:41:13.000 +0100DD700D95E000,"Little Shopping",status-playable,playable,2020-10-03 16:34:35.000 +01000FB00AA90000,"Little Town Hero",status-playable,playable,2020-10-15 23:28:48.000 +01000690085BE000,"Little Triangle",status-playable,playable,2020-06-17 14:46:26.000 +0100CF801776C000,"LIVE A LIVE",status-playable;UE4;amd-vendor-bug,playable,2023-02-05 15:12:07.000 +0100BA000FC9C000,"LocO-SportS",status-playable,playable,2022-09-20 14:09:30.000 +010016C009374000,"Lode Runner Legacy",status-playable,playable,2021-01-10 14:10:28.000 +0100D2C013288000,"Lofi Ping Pong",crash;status-ingame,ingame,2020-12-15 20:09:22.000 +0100B6D016EE6000,"Lone Ruin",status-ingame;crash;nvdec,ingame,2023-01-17 06:41:19.000 +0100A0C00E0DE000,"Lonely Mountains: Downhill",status-playable;online-broken,playable,2024-07-04 05:08:11.000 +010062A0178A8000,"LOOPERS",gpu;slow;status-ingame;crash,ingame,2022-06-17 19:21:45.000 +010064200F7D8000,"Lost Horizon",status-playable,playable,2020-09-01 13:41:22.000 +01005ED010642000,"Lost Horizon 2",nvdec;status-playable,playable,2020-06-16 12:02:12.000 +01005FE01291A000,"Lost in Random™",gpu;status-ingame,ingame,2022-12-18 07:09:28.000 +0100133014510000,"Lost Lands 2: The Four Horsemen",status-playable;nvdec,playable,2022-10-24 16:41:00.000 +0100156014C6A000,"Lost Lands 3: The Golden Curse",status-playable;nvdec,playable,2022-10-24 16:30:00.000 +0100BDD010AC8000,"Lost Lands: Dark Overlord",status-playable,playable,2022-10-03 11:52:58.000 +010054600AC74000,"LOST ORBIT: Terminal Velocity",status-playable,playable,2021-06-14 12:21:12.000 +010046600B76A000,"Lost Phone Stories",services;status-ingame,ingame,2020-04-05 23:17:33.000 +01008AD013A86800,"Lost Ruins",gpu;status-ingame,ingame,2023-02-19 14:09:00.000 +010077B0038B2000,"LOST SPHEAR",status-playable,playable,2021-01-10 06:01:21.000 +0100018013124000,"Lost Words: Beyond the Page",status-playable,playable,2022-10-24 17:03:21.000 +0100D36011AD4000,"Love Letter from Thief X",gpu;status-ingame;nvdec,ingame,2023-11-14 03:55:31.000 +0100F0300B7BE000,"Ludomania",crash;services;status-nothing,nothing,2020-04-03 00:33:47.000 +010048701995E000,"Luigi's Mansion™ 2 HD",status-ingame;ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27.000 +0100DCA0064A6000,"Luigi’s Mansion™ 3",gpu;slow;status-ingame;Needs Update;ldn-works,ingame,2024-09-27 22:17:36.000 +010052B00B194000,"Lumini",status-playable,playable,2020-08-09 20:45:09.000 +0100FF00042EE000,"Lumo",status-playable;nvdec,playable,2022-02-11 18:20:30.000 +0100F3100EB44000,"Lust for Darkness",nvdec;status-playable,playable,2020-07-26 12:09:15.000 +0100F0B00F68E000,"Lust for Darkness: Dawn Edition",nvdec;status-playable,playable,2021-06-16 13:47:46.000 +0100EC2011A80000,"Luxar",status-playable,playable,2021-03-04 21:11:57.000 +0100F2400D434000,"MachiKnights -Blood bagos-",status-playable;nvdec;UE4,playable,2022-09-14 15:08:04.000 +010024A009428000,"Mad Carnage",status-playable,playable,2021-01-10 13:00:07.000 +01005E7013476000,"Mad Father",status-playable,playable,2020-11-12 13:22:10.000 +010061E00EB1E000,"Mad Games Tycoon",status-playable,playable,2022-09-20 14:23:14.000 +01004A200E722000,"Magazine Mogul",status-playable;loader-allocator,playable,2022-10-03 12:05:34.000 +01008E500BF62000,"MagiCat",status-playable,playable,2020-12-11 15:22:07.000 +010032C011356000,"Magicolors",status-playable,playable,2020-08-12 18:39:11.000 +01008C300B624000,"Mahjong Solitaire Refresh",status-boots;crash,boots,2022-12-09 12:02:55.000 +010099A0145E8000,"Mahluk dark demon",status-playable,playable,2021-04-15 13:14:24.000 +01001C100D80E000,"Mainlining",status-playable,playable,2020-06-05 01:02:00.000 +0100D9900F220000,"Maitetsu:Pure Station",status-playable,playable,2022-09-20 15:12:49.000 +0100A78017BD6000,"Makai Senki Disgaea 7",status-playable,playable,2023-10-05 00:22:18.000 +01005A700CC3C000,"Mana Spark",status-playable,playable,2020-12-10 13:41:01.000 +010093D00CB22000,"Maneater",status-playable;nvdec;UE4,playable,2024-05-21 16:11:57.000 +0100361009B1A000,"Manifold Garden",status-playable,playable,2020-10-13 20:27:13.000 +0100C9A00952A000,"Manticore - Galaxy on Fire",status-boots;crash;nvdec,boots,2024-02-04 04:37:24.000 +0100E98002F6E000,"Mantis Burn Racing",status-playable;online-broken;ldn-broken,playable,2024-09-02 02:13:04.000 +01008E800D1FE000,"Marble Power Blast",status-playable,playable,2021-06-04 16:00:02.000 +01001B2012D5E000,"Märchen Forest",status-playable,playable,2021-02-04 21:33:34.000 +0100DA7017C9E000,"Marco & The Galaxy Dragon Demo",gpu;status-ingame;demo,ingame,2023-06-03 13:05:33.000 +01006D0017F7A000,"Mario & Luigi: Brothership",status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00.000 +010002C00C270000,"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",status-ingame;crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55.000 +0100317013770000,"MARIO + RABBIDS SPARKS OF HOPE",gpu;status-ingame;Needs Update,ingame,2024-06-20 19:56:19.000 +010067300059A000,"Mario + Rabbids® Kingdom Battle",slow;status-playable;opengl-backend-bug,playable,2024-05-06 10:16:54.000 +0100C9C00E25C000,"Mario Golf™: Super Rush",gpu;status-ingame,ingame,2024-08-18 21:31:48.000 +0100ED100BA3A000,"Mario Kart Live: Home Circuit™",services;status-nothing;crash;Needs More Attention,nothing,2022-12-07 22:36:52.000 +0100152000022000,"Mario Kart™ 8 Deluxe",32-bit;status-playable;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17.000 +01006FE013472000,"Mario Party™ Superstars",gpu;status-ingame;ldn-works;mac-bug,ingame,2024-05-16 11:23:34.000 +010019401051C000,"Mario Strikers™: Battle League",status-boots;crash;nvdec,boots,2024-05-07 06:23:56.000 +0100BDE00862A000,"Mario Tennis™ Aces",gpu;status-ingame;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40.000 +0100B99019412000,"Mario vs. Donkey Kong™",status-playable,playable,2024-05-04 21:22:39.000 +0100D9E01DBB0000,"Mario vs. Donkey Kong™ Demo",status-playable,playable,2024-02-18 10:40:06.000 +01009A700A538000,"Mark of the Ninja: Remastered",status-playable,playable,2022-08-04 15:48:30.000 +010044600FDF0000,"Marooners",status-playable;nvdec;online-broken,playable,2022-10-18 21:35:26.000 +010060700AC50000,"MARVEL ULTIMATE ALLIANCE 3: The Black Order",status-playable;nvdec;ldn-untested,playable,2024-02-14 19:51:51.000 +01003DE00C95E000,"Mary Skelter 2",status-ingame;crash;regression,ingame,2023-09-12 07:37:28.000 +0100113008262000,"Masquerada: Songs and Shadows",status-playable,playable,2022-09-20 15:18:54.000 +01004800197F0000,"Master Detective Archives: Rain Code",gpu;status-ingame,ingame,2024-04-19 20:11:09.000 +0100CC7009196000,"Masters of Anima",status-playable;nvdec,playable,2022-08-04 16:00:09.000 +01004B100A1C4000,"MathLand",status-playable,playable,2020-09-01 15:40:06.000 +0100A8C011F26000,"Max and the book of chaos",status-playable,playable,2020-09-02 12:24:43.000 +01001C9007614000,"Max: The Curse of Brotherhood",status-playable;nvdec,playable,2022-08-04 16:33:04.000 +0100E8B012FBC000,"Maze",status-playable,playable,2020-12-17 16:13:58.000 +0100EEF00CBC0000,"MEANDERS",UE4;gpu;status-ingame,ingame,2021-06-11 19:19:33.000 +0100EC000CE24000,"Mech Rage",status-playable,playable,2020-11-18 12:30:16.000 +0100C4F005EB4000,"Mecho Tales",status-playable,playable,2022-08-04 17:03:19.000 +0100E4600D31A000,"Mechstermination Force",status-playable,playable,2024-07-04 05:39:15.000 +,"Medarot Classics Plus Kabuto Ver",status-playable,playable,2020-11-21 11:31:18.000 +,"Medarot Classics Plus Kuwagata Ver",status-playable,playable,2020-11-21 11:30:40.000 +0100BBC00CB9A000,"Mega Mall Story",slow;status-playable,playable,2022-08-04 17:10:58.000 +0100B0C0086B0000,"Mega Man 11",status-playable,playable,2021-04-26 12:07:53.000 +010038E016264000,"Mega Man Battle Network Legacy Collection Vol. 1",status-playable,playable,2023-04-25 03:55:57.000 +0100734016266000,"Mega Man Battle Network Legacy Collection Vol. 2",status-playable,playable,2023-08-03 18:04:32.000 +01002D4007AE0000,"Mega Man Legacy Collection",gpu;status-ingame,ingame,2021-06-03 18:17:17.000 +0100842008EC4000,"Mega Man Legacy Collection 2",status-playable,playable,2021-01-06 08:47:59.000 +01005C60086BE000,"Mega Man X Legacy Collection",audio;crash;services;status-menus,menus,2020-12-04 04:30:17.000 +010025C00D410000,"Mega Man Zero/ZX Legacy Collection",status-playable,playable,2021-06-14 16:17:32.000 +0100FC700F942000,"Megabyte Punch",status-playable,playable,2020-10-16 14:07:18.000 +010006F011220000,"Megadimension Neptunia VII",32-bit;nvdec;status-playable,playable,2020-12-17 20:56:03.000 +010082B00E8B8000,"Megaquarium",status-playable,playable,2022-09-14 16:50:00.000 +010005A00B312000,"Megaton Rainfall",gpu;status-boots;opengl,boots,2022-08-04 18:29:43.000 +0100EA100DF92000,"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",32-bit;status-playable;nvdec,playable,2022-12-05 13:19:12.000 +0100B360068B2000,"Mekorama",gpu;status-boots,boots,2021-06-17 16:37:21.000 +01000FA010340000,"Melbits World",status-menus;nvdec;online,menus,2021-11-26 13:51:22.000 +0100F68019636000,"Melon Journey",status-playable,playable,2023-04-23 21:20:01.000 +,"Memories Off -Innocent Fille- for Dearest",status-playable,playable,2020-08-04 07:31:22.000 +010062F011E7C000,"Memory Lane",status-playable;UE4,playable,2022-10-05 14:31:03.000 +0100EBE00D5B0000,"Meow Motors",UE4;gpu;status-ingame,ingame,2020-12-18 00:24:01.000 +0100273008FBC000,"Mercenaries Saga Chronicles",status-playable,playable,2021-01-10 12:48:19.000 +010094500C216000,"Mercenaries Wings: The False Phoenix",crash;services;status-nothing,nothing,2020-05-08 22:42:12.000 +0100F900046C4000,"Mercenary Kings: Reloaded Edition",online;status-playable,playable,2020-10-16 13:05:58.000 +0100E5000D3CA000,"Merchants of Kaidan",status-playable,playable,2021-04-15 11:44:28.000 +01009A500D4A8000,"METAGAL",status-playable,playable,2020-06-05 00:05:48.000 +010047F01AA10000,"METAL GEAR SOLID 3: Snake Eater - Master Collection Version",services-horizon;status-menus,menus,2024-07-24 06:34:06.000 +0100E8F00F6BE000,"METAL MAX Xeno Reborn",status-playable,playable,2022-12-05 15:33:53.000 +01002DE00E5D0000,"Metaloid: Origin",status-playable,playable,2020-06-04 20:26:35.000 +010055200E87E000,"Metamorphosis",UE4;audout;gpu;nvdec;status-ingame,ingame,2021-06-16 16:18:11.000 +0100D4900E82C000,"Metro 2033 Redux",gpu;status-ingame,ingame,2022-11-09 10:53:13.000 +0100F0400E850000,"Metro: Last Light Redux",slow;status-ingame;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52.000 +010012101468C000,"Metroid Prime™ Remastered",gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15.000 +010093801237C000,"Metroid™ Dread",status-playable,playable,2023-11-13 04:02:36.000 +0100A1200F20C000,"Midnight Evil",status-playable,playable,2022-10-18 22:55:19.000 +0100C1E0135E0000,"Mighty Fight Federation",online;status-playable,playable,2021-04-06 18:39:56.000 +0100AD701344C000,"Mighty Goose",status-playable;nvdec,playable,2022-10-28 20:25:38.000 +01000E2003FA0000,"MIGHTY GUNVOLT BURST",status-playable,playable,2020-10-19 16:05:49.000 +010060D00AE36000,"Mighty Switch Force! Collection",status-playable,playable,2022-10-28 20:40:32.000 +01003DA010E8A000,"Miitopia™",gpu;services-horizon;status-ingame,ingame,2024-09-06 10:39:13.000 +01007DA0140E8000,"Miitopia™ Demo",services;status-menus;crash;demo,menus,2023-02-24 11:50:58.000 +01004B7009F00000,"Miles & Kilo",status-playable,playable,2020-10-22 11:39:49.000 +0100976008FBE000,"Millie",status-playable,playable,2021-01-26 20:47:19.000 +0100F5700C9A8000,"MIND: Path to Thalamus",UE4;status-playable,playable,2021-06-16 17:37:25.000 +0100D71004694000,"Minecraft",status-ingame;crash;ldn-broken,ingame,2024-09-29 12:08:59.000 +01006C100EC08000,"Minecraft Dungeons",status-playable;nvdec;online-broken;UE4,playable,2024-06-26 22:10:43.000 +01007C6012CC8000,"Minecraft Legends",gpu;status-ingame;crash,ingame,2024-03-04 00:32:24.000 +01006BD001E06000,"Minecraft: Nintendo Switch Edition",status-playable;ldn-broken,playable,2023-10-15 01:47:08.000 +01003EF007ABA000,"Minecraft: Story Mode - Season Two",status-playable;online-broken,playable,2023-03-04 00:30:50.000 +010059C002AC2000,"Minecraft: Story Mode - The Complete Adventure",status-boots;crash;online-broken,boots,2022-08-04 18:56:58.000 +0100B7500F756000,"Minefield",status-playable,playable,2022-10-05 15:03:29.000 +01003560119A6000,"Mini Motor Racing X",status-playable,playable,2021-04-13 17:54:49.000 +0100FB700DE1A000,"Mini Trains",status-playable,playable,2020-07-29 23:06:20.000 +010039200EC66000,"Miniature - The Story Puzzle",status-playable;UE4,playable,2022-09-14 17:18:50.000 +010069200EB80000,"Ministry of Broadcast",status-playable,playable,2022-08-10 00:31:16.000 +0100C3F000BD8000,"Minna de Wai Wai! Spelunker",status-nothing;crash,nothing,2021-11-03 07:17:11.000 +0100FAE010864000,"Minoria",status-playable,playable,2022-08-06 18:50:50.000 +01005AB015994000,"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",gpu;status-playable,playable,2022-03-28 02:22:24.000 +0100CFA0138C8000,"Missile Dancer",status-playable,playable,2021-01-31 12:22:03.000 +0100E3601495C000,"Missing Features: 2D",status-playable,playable,2022-10-28 20:52:54.000 +010059200CC40000,"Mist Hunter",status-playable,playable,2021-06-16 13:58:58.000 +0100F65011E52000,"Mittelborg: City of Mages",status-playable,playable,2020-08-12 19:58:06.000 +0100876015D74000,"MLB® The Show™ 22",gpu;slow;status-ingame,ingame,2023-04-25 06:28:43.000 +0100A9F01776A000,"MLB® The Show™ 22 Tech Test",services;status-nothing;crash;Needs Update;demo,nothing,2022-12-09 10:28:34.000 +0100913019170000,"MLB® The Show™ 23",gpu;status-ingame,ingame,2024-07-26 00:56:50.000 +0100E2E01C32E000,"MLB® The Show™ 24",services-horizon;status-nothing,nothing,2024-03-31 04:54:11.000 +010011300F74C000,"MO:Astray",crash;status-ingame,ingame,2020-12-11 21:45:44.000 +010020400BDD2000,"Moai VI: Unexpected Guests",slow;status-playable,playable,2020-10-27 16:40:20.000 +0100D8700B712000,"Modern Combat Blackout",crash;status-nothing,nothing,2021-03-29 19:47:15.000 +010004900D772000,"Modern Tales: Age of Invention",slow;status-playable,playable,2022-10-12 11:20:19.000 +0100B8500D570000,"Moero Chronicle™ Hyper",32-bit;status-playable,playable,2022-08-11 07:21:56.000 +01004EB0119AC000,"Moero Crystal H",32-bit;status-playable;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22.000 +0100B46017500000,"MOFUMOFUSENSEN",gpu;status-menus,menus,2024-09-21 21:51:08.000 +01004A400C320000,"Momodora: Reverie Under the Moonlight",deadlock;status-nothing,nothing,2022-02-06 03:47:43.000 +01002CC00BC4C000,"Momonga Pinball Adventures",status-playable,playable,2022-09-20 16:00:40.000 +010093100DA04000,"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",gpu;status-ingame,ingame,2023-09-22 10:21:46.000 +0100FBD00ED24000,"MONKEY BARRELS",status-playable,playable,2022-09-14 17:28:52.000 +01004C500B8E0000,"Monkey King: Master of the Clouds",status-playable,playable,2020-09-28 22:35:48.000 +01003030161DC000,"Monomals",gpu;status-ingame,ingame,2024-08-06 22:02:51.000 +0100F3A00FB78000,"Mononoke Slashdown",status-menus;crash,menus,2022-05-04 20:55:47.000 +01007430037F6000,"MONOPOLY® for Nintendo Switch™",status-playable;nvdec;online-broken,playable,2024-02-06 23:13:01.000 +01005FF013DC2000,"MONOPOLY® Madness",status-playable,playable,2022-01-29 21:13:52.000 +0100E2D0128E6000,"Monster Blast",gpu;status-ingame,ingame,2023-09-02 20:02:32.000 +01006F7001D10000,"Monster Boy and the Cursed Kingdom",status-playable;nvdec,playable,2022-08-04 20:06:32.000 +01005FC01000E000,"Monster Bugs Eat People",status-playable,playable,2020-07-26 02:05:34.000 +0100742007266000,"Monster Energy Supercross - The Official Videogame",status-playable;nvdec;UE4,playable,2022-08-04 20:25:00.000 +0100F8100B982000,"Monster Energy Supercross - The Official Videogame 2",status-playable;nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24.000 +010097800EA20000,"Monster Energy Supercross - The Official Videogame 3",UE4;audout;nvdec;online;status-playable,playable,2021-06-14 12:37:54.000 +0100E9900ED74000,"Monster Farm",32-bit;nvdec;status-playable,playable,2021-05-05 19:29:13.000 +0100770008DD8000,"Monster Hunter Generations Ultimate™",32-bit;status-playable;online-broken;ldn-works,playable,2024-03-18 14:35:36.000 +0100B04011742000,"Monster Hunter Rise",gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59.000 +010093A01305C000,"Monster Hunter Rise Demo",status-playable;online-broken;ldn-works;demo,playable,2022-10-18 23:04:17.000 +0100E21011446000,"Monster Hunter Stories 2: Wings of Ruin",services;status-ingame,ingame,2022-07-10 19:27:30.000 +010042501329E000,"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",status-playable;demo,playable,2022-11-13 22:20:26.000 +,"Monster Hunter XX Demo",32-bit;cpu;status-nothing,nothing,2020-03-22 10:12:28.000 +0100C3800049C000,"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",status-playable,playable,2024-07-21 14:08:09.000 +010088400366E000,"Monster Jam Crush It!",UE4;nvdec;online;status-playable,playable,2021-04-08 19:29:27.000 +010095C00F354000,"Monster Jam Steel Titans",status-menus;crash;nvdec;UE4,menus,2021-11-14 09:45:38.000 +010051B0131F0000,"Monster Jam Steel Titans 2",status-playable;nvdec;UE4,playable,2022-10-24 17:17:59.000 +01004DE00DD44000,"Monster Puzzle",status-playable,playable,2020-09-28 22:23:10.000 +0100A0F00DA68000,"Monster Sanctuary",crash;status-ingame,ingame,2021-04-04 05:06:41.000 +0100D30010C42000,"Monster Truck Championship",slow;status-playable;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51.000 +01004E10142FE000,"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",crash;status-ingame,ingame,2021-07-23 10:56:44.000 +010039F00EF70000,"Monstrum",status-playable,playable,2021-01-31 11:07:26.000 +0100C2E00B494000,"Moonfall Ultimate",nvdec;status-playable,playable,2021-01-17 14:01:25.000 +0100E3D014ABC000,"Moorhuhn Jump and Run 'Traps and Treasures'",status-playable,playable,2024-03-08 15:10:02.000 +010045C00F274000,"Moorhuhn Kart 2",status-playable;online-broken,playable,2022-10-28 21:10:35.000 +010040E00F642000,"Morbid: The Seven Acolytes",status-playable,playable,2022-08-09 17:21:58.000 +01004230123E0000,"More Dark",status-playable,playable,2020-12-15 16:01:06.000 +01005DA003E6E000,"Morphies Law",UE4;crash;ldn-untested;nvdec;online;status-menus,menus,2020-11-22 17:05:29.000 +0100776003F0C000,"Morphite",status-playable,playable,2021-01-05 19:40:55.000 +0100F2200C984000,"Mortal Kombat 11",slow;status-ingame;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17.000 +01006560184E6000,"Mortal Kombat™ 1",gpu;status-ingame,ingame,2024-09-04 15:45:47.000 +010032800D740000,"Mosaic",status-playable,playable,2020-08-11 13:07:35.000 +01002ED00B01C000,"Moto Racer 4",UE4;nvdec;online;status-playable,playable,2021-04-08 19:09:11.000 +01003F200D0F2000,"Moto Rush GT",status-playable,playable,2022-08-05 11:23:55.000 +0100361007268000,"MotoGP™18",status-playable;nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45.000 +01004B800D0E8000,"MotoGP™19",status-playable;nvdec;online-broken;UE4,playable,2022-08-05 11:54:14.000 +01001FA00FBBC000,"MotoGP™20",status-playable;ldn-untested,playable,2022-09-29 17:58:01.000 +01000F5013820000,"MotoGP™21",gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08.000 +010040401D564000,"MotoGP™24",gpu;status-ingame,ingame,2024-05-10 23:41:00.000 +01002A900D6D6000,"Motorsport Manager for Nintendo Switch™",status-playable;nvdec,playable,2022-08-05 12:48:14.000 +01009DB00D6E0000,"Mountain Rescue Simulator",status-playable,playable,2022-09-20 16:36:48.000 +0100C4C00E73E000,"Moving Out",nvdec;status-playable,playable,2021-06-07 21:17:24.000 +0100D3300F110000,"Mr Blaster",status-playable,playable,2022-09-14 17:56:24.000 +0100DCA011262000,"Mr. DRILLER DrillLand",nvdec;status-playable,playable,2020-07-24 13:56:48.000 +010031F002B66000,"Mr. Shifty",slow;status-playable,playable,2020-05-08 15:28:16.000 +01005EF00B4BC000,"Ms. Splosion Man",online;status-playable,playable,2020-05-09 20:45:43.000 +010087C009246000,"Muddledash",services;status-ingame,ingame,2020-05-08 16:46:14.000 +01009D200952E000,"MudRunner - American Wilds",gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52.000 +010073E008E6E000,"Mugsters",status-playable,playable,2021-01-28 17:57:17.000 +0100A8400471A000,"MUJO",status-playable,playable,2020-05-08 16:31:04.000 +0100211005E94000,"Mulaka",status-playable,playable,2021-01-28 18:07:20.000 +010038B00B9AE000,"Mummy Pinball",status-playable,playable,2022-08-05 16:08:11.000 +01008E200C5C2000,"Muse Dash",status-playable,playable,2020-06-06 14:41:29.000 +010035901046C000,"Mushroom Quest",status-playable,playable,2020-05-17 13:07:08.000 +0100700006EF6000,"Mushroom Wars 2",nvdec;status-playable,playable,2020-09-28 15:26:08.000 +010046400F310000,"Music Racer",status-playable,playable,2020-08-10 08:51:23.000 +,"Musou Orochi 2 Ultimate",crash;nvdec;status-boots,boots,2021-04-09 19:39:16.000 +0100F6000EAA8000,"Must Dash Amigos",status-playable,playable,2022-09-20 16:45:56.000 +01007B6006092000,"MUSYNX",status-playable,playable,2020-05-08 14:24:43.000 +0100C3E00ACAA000,"Mutant Football League: Dynasty Edition",status-playable;online-broken,playable,2022-08-05 17:01:51.000 +01004BE004A86000,"Mutant Mudds Collection",status-playable,playable,2022-08-05 17:11:38.000 +0100E6B00DEA4000,"Mutant Year Zero: Road to Eden - Deluxe Edition",status-playable;nvdec;UE4,playable,2022-09-10 13:31:10.000 +0100161009E5C000,"MX Nitro: Unleashed",status-playable,playable,2022-09-27 22:34:33.000 +0100218011E7E000,"MX vs ATV All Out",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46.000 +0100D940063A0000,"MXGP3 - The Official Motocross Videogame",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 14:00:20.000 +01002C6012334000,"My Aunt is a Witch",status-playable,playable,2022-10-19 09:21:17.000 +0100F6F0118B8000,"My Butler",status-playable,playable,2020-06-27 13:46:23.000 +010031200B94C000,"My Friend Pedro",nvdec;status-playable,playable,2021-05-28 11:19:17.000 +01000D700BE88000,"My Girlfriend is a Mermaid!?",nvdec;status-playable,playable,2020-05-08 13:32:55.000 +010039000B68E000,"MY HERO ONE'S JUSTICE",UE4;crash;gpu;online;status-menus,menus,2020-12-10 13:11:04.000 +01007E700DBF6000,"MY HERO ONE'S JUSTICE 2",UE4;gpu;nvdec;status-ingame,ingame,2020-12-18 14:08:47.000 +0100E4701373E000,"My Hidden Things",status-playable,playable,2021-04-15 11:26:06.000 +0100872012B34000,"My Little Dog Adventure",gpu;status-ingame,ingame,2020-12-10 17:47:37.000 +01008C600395A000,"My Little Riding Champion",slow;status-playable,playable,2020-05-08 17:00:53.000 +010086B00C784000,"My Lovely Daughter: ReBorn",status-playable,playable,2022-11-24 17:25:32.000 +0100E7700C284000,"My Memory of Us",status-playable,playable,2022-08-20 11:03:14.000 +010028F00ABAE000,"My Riding Stables - Life with Horses",status-playable,playable,2022-08-05 21:39:07.000 +010042A00FBF0000,"My Riding Stables 2: A New Adventure",status-playable,playable,2021-05-16 14:14:59.000 +0100E25008E68000,"My Time at Portia",status-playable,playable,2021-05-28 12:42:55.000 +0100158011A08000,"My Universe - Cooking Star Restaurant",status-playable,playable,2022-10-19 10:00:44.000 +0100F71011A0A000,"My Universe - Fashion Boutique",status-playable;nvdec,playable,2022-10-12 14:54:19.000 +0100CD5011A02000,"My Universe - PET CLINIC CATS & DOGS",status-boots;crash;nvdec,boots,2022-02-06 02:05:53.000 +01006C301199C000,"My Universe - School Teacher",nvdec;status-playable,playable,2021-01-21 16:02:52.000 +01000D5005974000,"N++ (NPLUSPLUS)",status-playable,playable,2022-08-05 21:54:58.000 +0100A6F00AC70000,"NAIRI: Tower of Shirin",nvdec;status-playable,playable,2020-08-09 19:49:12.000 +010002F001220000,"NAMCO MUSEUM",status-playable;ldn-untested,playable,2024-08-13 07:52:21.000 +0100DAA00AEE6000,"NAMCO MUSEUM™ ARCADE PAC™",status-playable,playable,2021-06-07 21:44:50.000 +,"NAMCOT COLLECTION",audio;status-playable,playable,2020-06-25 13:35:22.000 +010072B00BDDE000,"Narcos: Rise of the Cartels",UE4;crash;nvdec;status-boots,boots,2021-03-22 13:18:47.000 +01006BB00800A000,"NARUTO SHIPPUDEN: Ultimate Ninja STORM 3 Full Burst",status-playable;nvdec,playable,2024-06-16 14:58:05.000 +010084D00CF5E000,"NARUTO SHIPPUDEN™: Ultimate Ninja® STORM 4 ROAD TO BORUTO",status-playable,playable,2024-06-29 13:04:22.000 +0100D2D0190A4000,"NARUTO X BORUTO Ultimate Ninja STORM CONNECTIONS",services-horizon;status-nothing,nothing,2024-07-25 05:16:48.000 +0100715007354000,"NARUTO: Ultimate Ninja STORM",status-playable;nvdec,playable,2022-08-06 14:10:31.000 +0100545016D5E000,"NASCAR Rivals",status-ingame;crash;Incomplete,ingame,2023-04-21 01:17:47.000 +0100103011894000,"Naught",UE4;status-playable,playable,2021-04-26 13:31:45.000 +01001AE00C1B2000,"NBA 2K Playgrounds 2",status-playable;nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38.000 +0100760002048000,"NBA 2K18",gpu;status-ingame;ldn-untested,ingame,2022-08-06 14:17:51.000 +01001FF00B544000,"NBA 2K19",crash;ldn-untested;services;status-nothing,nothing,2021-04-16 13:07:21.000 +0100E24011D1E000,"NBA 2K21",gpu;status-boots,boots,2022-10-05 15:31:51.000 +0100ACA017E4E800,"NBA 2K23",status-boots,boots,2023-10-10 23:07:14.000 +010006501A8D8000,"NBA 2K24 Kobe Bryant Edition",cpu;gpu;status-boots,boots,2024-08-11 18:23:08.000 +010002900294A000,"NBA Playgrounds",status-playable;nvdec;online-broken;UE4,playable,2022-08-06 17:06:59.000 +0100F5A008126000,"NBA Playgrounds - Enhanced Edition",status-playable;nvdec;online-broken;UE4,playable,2022-08-06 16:13:44.000 +0100BBC00E4F8000,"Need a packet?",status-playable,playable,2020-08-12 16:09:01.000 +010029B0118E8000,"Need for Speed™ Hot Pursuit Remastered",status-playable;online-broken,playable,2024-03-20 21:58:02.000 +010023500B0BA000,"Nefarious",status-playable,playable,2020-12-17 03:20:33.000 +01008390136FC000,"Negative: The Way of Shinobi",nvdec;status-playable,playable,2021-03-24 11:29:41.000 +010065F00F55A000,"Neighbours back From Hell",status-playable;nvdec,playable,2022-10-12 15:36:48.000 +0100B4900AD3E000,"NEKOPARA Vol.1",status-playable;nvdec,playable,2022-08-06 18:25:54.000 +010012900C782000,"NEKOPARA Vol.2",status-playable,playable,2020-12-16 11:04:47.000 +010045000E418000,"NEKOPARA Vol.3",status-playable,playable,2022-10-03 12:49:04.000 +010049F013656000,"NEKOPARA Vol.4",crash;status-ingame,ingame,2021-01-17 01:47:18.000 +01006ED00BC76000,"Nelke & the Legendary Alchemists ~Ateliers of the New World~",status-playable,playable,2021-01-28 19:39:42.000 +01005F000B784000,"Nelly Cootalot: The Fowl Fleet",status-playable,playable,2020-06-11 20:55:42.000 +01001AB0141A8000,"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",crash;status-ingame,ingame,2021-07-18 07:29:18.000 +0100EBB00D2F4000,"Neo Cab",status-playable,playable,2021-04-24 00:27:58.000 +,"Neo Cab Demo",crash;status-boots,boots,2020-06-16 00:14:00.000 +010006D0128B4000,"NEOGEO POCKET COLOR SELECTION Vol.1",status-playable,playable,2023-07-08 20:55:36.000 +0100BAB01113A000,"Neon Abyss",status-playable,playable,2022-10-05 15:59:44.000 +010075E0047F8000,"Neon Chrome",status-playable,playable,2022-08-06 18:38:34.000 +010032000EAC6000,"Neon Drive",status-playable,playable,2022-09-10 13:45:48.000 +0100B9201406A000,"Neon White",status-ingame;crash,ingame,2023-02-02 22:25:06.000 +0100743008694000,"Neonwall",status-playable;nvdec,playable,2022-08-06 18:49:52.000 +01001A201331E000,"Neoverse Trinity Edition",status-playable,playable,2022-10-19 10:28:03.000 +01000B2011352000,"Nerdook Bundle Vol. 1",gpu;slow;status-ingame,ingame,2020-10-07 14:27:10.000 +01008B0010160000,"Nerved",status-playable;UE4,playable,2022-09-20 17:14:03.000 +0100BA0004F38000,"NeuroVoider",status-playable,playable,2020-06-04 18:20:05.000 +0100C20012A54000,"Nevaeh",gpu;nvdec;status-ingame,ingame,2021-06-16 17:29:03.000 +010039801093A000,"Never Breakup",status-playable,playable,2022-10-05 16:12:12.000 +0100F79012600000,"Neverending Nightmares",crash;gpu;status-boots,boots,2021-04-24 01:43:35.000 +0100A9600EDF8000,"Neverlast",slow;status-ingame,ingame,2020-07-13 23:55:19.000 +010013700DA4A000,"Neverwinter Nights: Enhanced Edition",gpu;status-menus;nvdec,menus,2024-09-30 02:59:19.000 +01004C200100E000,"New Frontier Days ~Founding Pioneers~",status-playable,playable,2020-12-10 12:45:07.000 +0100F4300BF2C000,"New Pokémon Snap™",status-playable,playable,2023-01-15 23:26:57.000 +010017700B6C2000,"New Super Lucky's Tale",status-playable,playable,2024-03-11 14:14:10.000 +0100EA80032EA000,"New Super Mario Bros.™ U Deluxe",32-bit;status-playable,playable,2023-10-08 02:06:37.000 +0100B9500E886000,"Newt One",status-playable,playable,2020-10-17 21:21:48.000 +01005A5011A44000,"Nexomon: Extinction",status-playable,playable,2020-11-30 15:02:22.000 +0100B69012EC6000,"Nexoria: Dungeon Rogue Heroes",gpu;status-ingame,ingame,2021-10-04 18:41:29.000 +0100271004570000,"Next Up Hero",online;status-playable,playable,2021-01-04 22:39:36.000 +0100E5600D446000,"Ni no Kuni: Wrath of the White Witch",status-boots;32-bit;nvdec,boots,2024-07-12 04:52:59.000 +0100EDD00D530000,"Nice Slice",nvdec;status-playable,playable,2020-06-17 15:13:27.000 +01000EC010BF4000,"Niche - a genetics survival game",nvdec;status-playable,playable,2020-11-27 14:01:11.000 +010010701AFB2000,"Nickelodeon All-Star Brawl 2",status-playable,playable,2024-06-03 14:15:01.000 +0100D6200933C000,"Nickelodeon Kart Racers",status-playable,playable,2021-01-07 12:16:49.000 +010058800F860000,"Nicky - The Home Alone Golf Ball",status-playable,playable,2020-08-08 13:45:39.000 +0100A95012668000,"Nicole",status-playable;audout,playable,2022-10-05 16:41:44.000 +0100B8E016F76000,"NieR:Automata The End of YoRHa Edition",slow;status-ingame;crash,ingame,2024-05-17 01:06:34.000 +0100F3A0095A6000,"Night Call",status-playable;nvdec,playable,2022-10-03 12:57:00.000 +0100921006A04000,"Night in the Woods",status-playable,playable,2022-12-03 20:17:54.000 +0100D8500A692000,"Night Trap - 25th Anniversary Edition",status-playable;nvdec,playable,2022-08-08 13:16:14.000 +01005F4009112000,"Nightmare Boy: The New Horizons of Reigns of Dreams, a Metroidvania journey with little rusty nightmares, the empire of knight final boss",status-playable,playable,2021-01-05 15:52:29.000 +01006E700B702000,"Nightmares from the Deep 2: The Siren`s Call",status-playable;nvdec,playable,2022-10-19 10:58:53.000 +0100628004BCE000,"Nights of Azure 2: Bride of the New Moon",status-menus;crash;nvdec;regression,menus,2022-11-24 16:00:39.000 +010042300C4F6000,"Nightshade/百花百狼",nvdec;status-playable,playable,2020-05-10 19:43:31.000 +0100AA0008736000,"Nihilumbra",status-playable,playable,2020-05-10 16:00:12.000 +0100D03003F0E000,"Nine Parchments",status-playable;ldn-untested,playable,2022-08-07 12:32:08.000 +0100E2F014F46000,"NINJA GAIDEN Σ",status-playable;nvdec,playable,2022-11-13 16:27:02.000 +0100696014F4A000,"NINJA GAIDEN Σ2",status-playable;nvdec,playable,2024-07-31 21:53:48.000 +01002AF014F4C000,"NINJA GAIDEN: Master Collection",status-playable;nvdec,playable,2023-08-11 08:25:31.000 +010088E003A76000,"Ninja Shodown",status-playable,playable,2020-05-11 12:31:21.000 +010081D00A480000,"Ninja Striker!",status-playable,playable,2020-12-08 19:33:29.000 +0100CCD0073EA000,"Ninjala",status-boots;online-broken;UE4,boots,2024-07-03 20:04:49.000 +010003C00B868000,"Ninjin: Clash of Carrots",status-playable;online-broken,playable,2024-07-10 05:12:26.000 +0100746010E4C000,"NinNinDays",status-playable,playable,2022-11-20 15:17:29.000 +0100C9A00ECE6000,"Nintendo 64™ – Nintendo Switch Online",gpu;status-ingame;vulkan,ingame,2024-04-23 20:21:07.000 +0100D870045B6000,"Nintendo Entertainment System™ - Nintendo Switch Online",status-playable;online,playable,2022-07-01 15:45:06.000 +0100C4B0034B2000,"Nintendo Labo Toy-Con 01 Variety Kit",gpu;status-ingame,ingame,2022-08-07 12:56:07.000 +01001E9003502000,"Nintendo Labo Toy-Con 03 Vehicle Kit",services;status-menus;crash,menus,2022-08-03 17:20:11.000 +0100165003504000,"Nintendo Labo Toy-Con 04 VR Kit",services;status-boots;crash,boots,2023-01-17 22:30:24.000 +01009AB0034E0000,"Nintendo Labo™ Toy-Con 02: Robot Kit",gpu;status-ingame,ingame,2022-08-07 13:03:19.000 +0100D2F00D5C0000,"Nintendo Switch™ Sports",deadlock;status-boots,boots,2024-09-10 14:20:24.000 +01000EE017182000,"Nintendo Switch™ Sports Online Play Test",gpu;status-ingame,ingame,2022-03-16 07:44:12.000 +010037200C72A000,"Nippon Marathon",nvdec;status-playable,playable,2021-01-28 20:32:46.000 +010020901088A000,"Nirvana Pilot Yume",status-playable,playable,2022-10-29 11:49:49.000 +01009B400ACBA000,"No Heroes Here",online;status-playable,playable,2020-05-10 02:41:57.000 +0100853015E86000,"No Man's Sky",gpu;status-ingame,ingame,2024-07-25 05:18:17.000 +0100F0400F202000,"No More Heroes",32-bit;status-playable,playable,2022-09-13 07:44:27.000 +010071400F204000,"No More Heroes 2: Desperate Struggle",32-bit;status-playable;nvdec,playable,2022-11-19 01:38:13.000 +01007C600EB42000,"No More Heroes 3",gpu;status-ingame;UE4,ingame,2024-03-11 17:06:19.000 +01009F3011004000,"No Straight Roads",status-playable;nvdec,playable,2022-10-05 17:01:38.000 +0100F7D00A1BC000,"NO THING",status-playable,playable,2021-01-04 19:06:01.000 +0100542012884000,"Nongunz: Doppelganger Edition",status-playable,playable,2022-10-29 12:00:39.000 +010016E011EFA000,"Norman's Great Illusion",status-playable,playable,2020-12-15 19:28:24.000 +01001A500AD6A000,"Norn9 ~Norn + Nonette~ LOFN",status-playable;nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16.000 +01004840086FE000,"NORTH",nvdec;status-playable,playable,2021-01-05 16:17:44.000 +0100A9E00D97A000,"Northgard",status-menus;crash,menus,2022-02-06 02:05:35.000 +01008AE019614000,"nOS new Operating System",status-playable,playable,2023-03-22 16:49:08.000 +0100CB800B07E000,"NOT A HERO: SUPER SNAZZY EDITION",status-playable,playable,2021-01-28 19:31:24.000 +01004D500D9BE000,"Not Not - A Brain Buster",status-playable,playable,2020-05-10 02:05:26.000 +0100DAF00D0E2000,"Not Tonight: Take Back Control Edition",status-playable;nvdec,playable,2022-10-19 11:48:47.000 +0100343013248000,"Nubarron: The adventure of an unlucky gnome",status-playable,playable,2020-12-17 16:45:17.000 +01005140089F6000,"Nuclien",status-playable,playable,2020-05-10 05:32:55.000 +010002700C34C000,"Numbala",status-playable,playable,2020-05-11 12:01:07.000 +010020500C8C8000,"Number Place 10000",gpu;status-menus,menus,2021-11-24 09:14:23.000 +010003701002C000,"Nurse Love Syndrome",status-playable,playable,2022-10-13 10:05:22.000 +0000000000000000,"nx-hbmenu",status-boots;Needs Update;homebrew,boots,2024-04-06 22:05:32.000 +,"nxquake2",services;status-nothing;crash;homebrew,nothing,2022-08-04 23:14:04.000 +010049F00EC30000,"Nyan Cat: Lost in Space",online;status-playable,playable,2021-06-12 13:22:03.000 +01002E6014FC4000,"O---O",status-playable,playable,2022-10-29 12:12:14.000 +010074600CC7A000,"OBAKEIDORO!",nvdec;online;status-playable,playable,2020-10-16 16:57:34.000 +01002A000C478000,"Observer",UE4;gpu;nvdec;status-ingame,ingame,2021-03-03 20:19:45.000 +01007D7001D0E000,"Oceanhorn - Monster of Uncharted Seas",status-playable,playable,2021-01-05 13:55:22.000 +01006CB010840000,"Oceanhorn 2: Knights of the Lost Realm",status-playable,playable,2021-05-21 18:26:10.000 +010096B00A08E000,"Octocopter: Double or Squids",status-playable,playable,2021-01-06 01:30:16.000 +0100CAB006F54000,"Octodad: Dadliest Catch",crash;status-boots,boots,2021-04-23 15:26:12.000 +0100A3501946E000,"OCTOPATH TRAVELER II",gpu;status-ingame;amd-vendor-bug,ingame,2024-09-22 11:39:20.000 +010057D006492000,"Octopath Traveler™",UE4;crash;gpu;status-ingame,ingame,2020-08-31 02:34:36.000 +010084300C816000,"Odallus: The Dark Call",status-playable,playable,2022-08-08 12:37:58.000 +0100BB500EE3C000,"Oddworld: Munch's Oddysee",gpu;nvdec;status-ingame,ingame,2021-06-17 12:11:50.000 +01005E700ABB8000,"Oddworld: New 'n' Tasty",nvdec;status-playable,playable,2021-06-17 17:51:32.000 +0100D210177C6000,"ODDWORLD: SOULSTORM",services-horizon;status-boots;crash,boots,2024-08-18 13:13:26.000 +01002EA00ABBA000,"Oddworld: Stranger's Wrath",status-menus;crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21.000 +010029F00C876000,"Odium to the Core",gpu;status-ingame,ingame,2021-01-08 14:03:52.000 +01006F5013202000,"Off And On Again",status-playable,playable,2022-10-29 19:46:26.000 +01003CD00E8BC000,"Offroad Racing - Buggy X ATV X Moto",status-playable;online-broken;UE4,playable,2022-09-14 18:53:22.000 +01003B900AE12000,"Oh My Godheads: Party Edition",status-playable,playable,2021-04-15 11:04:11.000 +0100F45006A00000,"Oh...Sir! The Hollywood Roast",status-ingame,ingame,2020-12-06 00:42:30.000 +010030B00B2F6000,"OK K.O.! Let’s Play Heroes",nvdec;status-playable,playable,2021-01-11 18:41:02.000 +0100276009872000,"OKAMI HD",status-playable;nvdec,playable,2024-04-05 06:24:58.000 +01006AB00BD82000,"OkunoKA",status-playable;online-broken,playable,2022-08-08 14:41:51.000 +0100CE2007A86000,"Old Man's Journey",nvdec;status-playable,playable,2021-01-28 19:16:52.000 +0100C3D00923A000,"Old School Musical",status-playable,playable,2020-12-10 12:51:12.000 +010099000BA48000,"Old School Racer 2",status-playable,playable,2020-10-19 12:11:26.000 +0100E0200B980000,"OlliOlli: Switch Stance",gpu;status-boots,boots,2024-04-25 08:36:37.000 +0100F9D00C186000,"Olympia Soiree",status-playable,playable,2022-12-04 21:07:12.000 +0100A8B00E14A000,"Olympic Games Tokyo 2020 – The Official Video Game™",ldn-untested;nvdec;online;status-playable,playable,2021-01-06 01:20:24.000 +01001D600E51A000,"Omega Labyrinth Life",status-playable,playable,2021-02-23 21:03:03.000 +,"Omega Vampire",nvdec;status-playable,playable,2020-10-17 19:15:35.000 +0100CDC00C40A000,"Omensight: Definitive Edition",UE4;crash;nvdec;status-ingame,ingame,2020-07-26 01:45:14.000 +01006DB00D970000,"OMG Zombies!",32-bit;status-playable,playable,2021-04-12 18:04:45.000 +010014E017B14000,"OMORI",status-playable,playable,2023-01-07 20:21:02.000 +,"Once Upon A Coma",nvdec;status-playable,playable,2020-08-01 12:09:39.000 +0100BD3006A02000,"One More Dungeon",status-playable,playable,2021-01-06 09:10:58.000 +010076600FD64000,"One Person Story",status-playable,playable,2020-07-14 11:51:02.000 +0100774009CF6000,"ONE PIECE Pirate Warriors 3 Deluxe Edition",nvdec;status-playable,playable,2020-05-10 06:23:52.000 +01008FE00E2F6000,"ONE PIECE: PIRATE WARRIORS 4",status-playable;online-broken;ldn-untested,playable,2022-09-27 22:55:46.000 +0100574002AF4000,"ONE PIECE: Unlimited World Red Deluxe Edition",status-playable,playable,2020-05-10 22:26:32.000 +0100EEA00E3EA000,"One-Way Ticket",UE4;status-playable,playable,2020-06-20 17:20:49.000 +0100463013246000,"Oneiros",status-playable,playable,2022-10-13 10:17:22.000 +010057C00D374000,"Oniken",status-playable,playable,2022-09-10 14:22:38.000 +010037900C814000,"Oniken: Unstoppable Edition",status-playable,playable,2022-08-08 14:52:06.000 +0100416008A12000,"Onimusha: Warlords",nvdec;status-playable,playable,2020-07-31 13:08:39.000 +0100CF4011B2A000,"OniNaki",nvdec;status-playable,playable,2021-02-27 21:52:42.000 +010074000BE8E000,"oOo: Ascension",status-playable,playable,2021-01-25 14:13:34.000 +0100D5400BD90000,"Operación Triunfo 2017",services;status-ingame;nvdec,ingame,2022-08-08 15:06:42.000 +01006CF00CFA4000,"Operencia: The Stolen Sun",UE4;nvdec;status-playable,playable,2021-06-08 13:51:07.000 +01004A200BE82000,"OPUS Collection",status-playable,playable,2021-01-25 15:24:04.000 +010049C0075F0000,"OPUS: The Day We Found Earth",nvdec;status-playable,playable,2021-01-21 18:29:31.000 +0100F9A012892000,"Ord.",status-playable,playable,2020-12-14 11:59:06.000 +010061D00DB74000,"Ori and the Blind Forest: Definitive Edition",status-playable;nvdec;online-broken,playable,2022-09-14 19:58:13.000 +010005800F46E000,"Ori and the Blind Forest: Definitive Edition Demo",status-playable,playable,2022-09-10 14:40:12.000 +01008DD013200000,"Ori and the Will of the Wisps",status-playable,playable,2023-03-07 00:47:13.000 +01006C70102EA000,"Orn: The Tiny Forest Sprite",UE4;gpu;status-ingame,ingame,2020-08-07 14:25:30.000 +0100E5900F49A000,"Othercide",status-playable;nvdec,playable,2022-10-05 19:04:38.000 +01006AA00EE44000,"Otokomizu",status-playable,playable,2020-07-13 21:00:44.000 +01006AF013A9E000,"Otti: The House Keeper",status-playable,playable,2021-01-31 12:11:24.000 +01000320060AC000,"OTTTD: Over The Top Tower Defense",slow;status-ingame,ingame,2020-10-10 19:31:07.000 +010097F010FE6000,"Our Two Bedroom Story",gpu;status-ingame;nvdec,ingame,2023-10-10 17:41:20.000 +0100D5D00C6BE000,"Our World Is Ended.",nvdec;status-playable,playable,2021-01-19 22:46:57.000 +01005A700A166000,"OUT OF THE BOX",status-playable,playable,2021-01-28 01:34:27.000 +0100D9F013102000,"Outbreak Lost Hope",crash;status-boots,boots,2021-04-26 18:01:23.000 +01006EE013100000,"Outbreak The Nightmare Chronicles",status-playable,playable,2022-10-13 10:41:57.000 +0100A0D013464000,"Outbreak: Endless Nightmares",status-playable,playable,2022-10-29 12:35:49.000 +0100C850130FE000,"Outbreak: Epidemic",status-playable,playable,2022-10-13 10:27:31.000 +0100B450130FC000,"Outbreak: The New Nightmare",status-playable,playable,2022-10-19 15:42:07.000 +0100B8900EFA6000,"Outbuddies DX",gpu;status-ingame,ingame,2022-08-04 22:39:24.000 +0100DE70085E8000,"Outlast 2",status-ingame;crash;nvdec,ingame,2022-01-22 22:28:05.000 +01008D4007A1E000,"Outlast: Bundle of Terror",status-playable;nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26.000 +01009B900401E000,"Overcooked Special Edition",status-playable,playable,2022-08-08 20:48:52.000 +01006FD0080B2000,"Overcooked! 2",status-playable;ldn-untested,playable,2022-08-08 16:48:10.000 +0100F28011892000,"Overcooked! All You Can Eat",ldn-untested;online;status-playable,playable,2021-04-15 10:33:52.000 +0100D7F00EC64000,"Overlanders",status-playable;nvdec;UE4,playable,2022-09-14 20:15:06.000 +01008EA00E816000,"OVERPASS™",status-playable;online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47.000 +0100647012F62000,"Override 2: Super Mech League",status-playable;online-broken;UE4,playable,2022-10-19 15:56:04.000 +01008A700F7EE000,"Override: Mech City Brawl - Super Charged Mega Edition",status-playable;nvdec;online-broken;UE4,playable,2022-09-20 17:33:32.000 +0100F8600E21E000,"Overwatch® 2",deadlock;status-boots,boots,2022-09-14 20:22:22.000 +01005F000CC18000,"OVERWHELM",status-playable,playable,2021-01-21 18:37:18.000 +0100BC2004FF4000,"Owlboy",status-playable,playable,2020-10-19 14:24:45.000 +0100AD9012510000,"PAC-MAN™ 99",gpu;status-ingame;online-broken,ingame,2024-04-23 00:48:25.000 +010024C001224000,"PAC-MAN™ CHAMPIONSHIP EDITION 2 PLUS",status-playable,playable,2021-01-19 22:06:18.000 +011123900AEE0000,"Paladins",online;status-menus,menus,2021-01-21 19:21:37.000 +0100F0D004CAE000,"PAN-PAN A tiny big adventure",audout;status-playable,playable,2021-01-25 14:42:00.000 +010083700B730000,"Pang Adventures",status-playable,playable,2021-04-10 12:16:59.000 +010006E00DFAE000,"Pantsu Hunter: Back to the 90s",status-playable,playable,2021-02-19 15:12:27.000 +0100C6A00E94A000,"Panzer Dragoon: Remake",status-playable,playable,2020-10-04 04:03:55.000 +01004AE0108E0000,"Panzer Paladin",status-playable,playable,2021-05-05 18:26:00.000 +010004500DE50000,"Paper Dolls Original",UE4;crash;status-boots,boots,2020-07-13 20:26:21.000 +0100A3900C3E2000,"Paper Mario™: The Origami King",audio;status-playable;Needs Update,playable,2024-08-09 18:27:40.000 +0100ECD018EBE000,"Paper Mario™: The Thousand-Year Door",gpu;status-ingame;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35.000 +01006AD00B82C000,"Paperbound Brawlers",status-playable,playable,2021-01-25 14:32:15.000 +0100DC70174E0000,"Paradigm Paradox",status-playable;vulkan-backend-bug,playable,2022-12-03 22:28:13.000 +01007FB010DC8000,"Paradise Killer",status-playable;UE4,playable,2022-10-05 19:33:05.000 +010063400B2EC000,"Paranautical Activity",status-playable,playable,2021-01-25 13:49:19.000 +01006B5012B32000,"Part Time UFO™",status-ingame;crash,ingame,2023-03-03 03:13:05.000 +01007FC00A040000,"Party Arcade",status-playable;online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53.000 +0100B8E00359E000,"Party Golf",status-playable;nvdec,playable,2022-08-09 12:38:30.000 +010022801217E000,"Party Hard 2",status-playable;nvdec,playable,2022-10-05 20:31:48.000 +010027D00F63C000,"Party Treats",status-playable,playable,2020-07-02 00:05:00.000 +01001E500EA16000,"Path of Sin: Greed",status-menus;crash,menus,2021-11-24 08:00:00.000 +010031F006E76000,"Pato Box",status-playable,playable,2021-01-25 15:17:52.000 +01001F201121E000,"PAW Patrol Mighty Pups Save Adventure Bay",status-playable,playable,2022-10-13 12:17:55.000 +0100360016800000,"PAW Patrol: Grand Prix",gpu;status-ingame,ingame,2024-05-03 16:16:11.000 +0100CEC003A4A000,"PAW Patrol: On a Roll!",nvdec;status-playable,playable,2021-01-28 21:14:49.000 +01000C4015030000,"Pawapoke R",services-horizon;status-nothing,nothing,2024-05-14 14:28:32.000 +0100A56006CEE000,"Pawarumi",status-playable;online-broken,playable,2022-09-10 15:19:33.000 +0100274004052000,"PAYDAY 2",status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39.000 +010085700ABC8000,"PBA Pro Bowling",status-playable;nvdec;online-broken;UE4,playable,2022-09-14 23:00:49.000 +0100F95013772000,"PBA Pro Bowling 2021",status-playable;online-broken;UE4,playable,2022-10-19 16:46:40.000 +010072800CBE8000,"PC Building Simulator",status-playable,playable,2020-06-12 00:31:58.000 +010002100CDCC000,"Peaky Blinders: Mastermind",status-playable,playable,2022-10-19 16:56:35.000 +010028A0048A6000,"Peasant Knight",status-playable,playable,2020-12-22 09:30:50.000 +0100C510049E0000,"Penny-Punching Princess",status-playable,playable,2022-08-09 13:37:05.000 +0100CA901AA9C000,"Penny’s Big Breakaway",status-playable;amd-vendor-bug,playable,2024-05-27 07:58:51.000 +0100563005B70000,"Perception",UE4;crash;nvdec;status-menus,menus,2020-12-18 11:49:23.000 +010011700D1B2000,"Perchang",status-playable,playable,2021-01-25 14:19:52.000 +010089F00A3B4000,"Perfect Angle",status-playable,playable,2021-01-21 18:48:45.000 +01005CD012DC0000,"Perky Little Things",status-boots;crash;vulkan,boots,2024-08-04 07:22:46.000 +01005EB013FBA000,"Persephone",status-playable,playable,2021-03-23 22:39:19.000 +0100A0300FC3E000,"Perseverance",status-playable,playable,2020-07-13 18:48:27.000 +010062B01525C000,"Persona 4 Golden",status-playable,playable,2024-08-07 17:48:07.000 +01005CA01580E000,"Persona 5 Royal",gpu;status-ingame,ingame,2024-08-17 21:45:15.000 +010087701B092000,"Persona 5 Tactica",status-playable,playable,2024-04-01 22:21:03.000 +,"Persona 5: Scramble",deadlock;status-boots,boots,2020-10-04 03:22:29.000 +0100801011C3E000,"Persona® 5 Strikers",status-playable;nvdec;mac-bug,playable,2023-09-26 09:36:01.000 +010044400EEAE000,"Petoons Party",nvdec;status-playable,playable,2021-03-02 21:07:58.000 +010053401147C000,"PGA TOUR 2K21",deadlock;status-ingame;nvdec,ingame,2022-10-05 21:53:50.000 +0100DDD00C0EA000,"Phantaruk",status-playable,playable,2021-06-11 18:09:54.000 +0100063005C86000,"Phantom Breaker: Battle Grounds Overdrive",audio;status-playable;nvdec,playable,2024-02-29 14:20:35.000 +010096F00E5B0000,"Phantom Doctrine",status-playable;UE4,playable,2022-09-15 10:51:50.000 +0100C31005A50000,"Phantom Trigger",status-playable,playable,2022-08-09 14:27:30.000 +0100CB000A142000,"Phoenix Wright: Ace Attorney Trilogy",status-playable,playable,2023-09-15 22:03:12.000 +0100DA400F624000,"PHOGS!",online;status-playable,playable,2021-01-18 15:18:37.000 +0100BF1003B9A000,"Physical Contact: 2048",slow;status-playable,playable,2021-01-25 15:18:32.000 +01008110036FE000,"Physical Contact: SPEED",status-playable,playable,2022-08-09 14:40:46.000 +010077300A86C000,"PIANISTA",status-playable;online-broken,playable,2022-08-09 14:52:56.000 +010012100E8DC000,"PICROSS LORD OF THE NAZARICK",status-playable,playable,2023-02-08 15:54:56.000 +0100C9600A88E000,"PICROSS S2",status-playable,playable,2020-10-15 12:01:40.000 +010079200D330000,"PICROSS S3",status-playable,playable,2020-10-15 11:55:27.000 +0100C250115DC000,"PICROSS S4",status-playable,playable,2020-10-15 12:33:46.000 +0100AC30133EC000,"PICROSS S5",status-playable,playable,2022-10-17 18:51:42.000 +010025901432A000,"PICROSS S6",status-playable,playable,2022-10-29 17:52:19.000 +01009B2016104000,"PICROSS S7",status-playable,playable,2022-02-16 12:51:25.000 +010043B00E1CE000,"PictoQuest",status-playable,playable,2021-02-27 15:03:16.000 +0100D06003056000,"Piczle Lines DX",UE4;crash;nvdec;status-menus,menus,2020-11-16 04:21:31.000 +010017600B532000,"Piczle Lines DX 500 More Puzzles!",UE4;status-playable,playable,2020-12-15 23:42:51.000 +01000FD00D5CC000,"Pig Eat Ball",services;status-ingame,ingame,2021-11-30 01:57:45.000 +01001CB0106F8000,"Pikmin 3 Deluxe Demo",32-bit;crash;demo;gpu;status-ingame,ingame,2021-06-16 18:38:07.000 +0100E0B019974000,"Pikmin 4 Demo",gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08.000 +0100AA80194B0000,"Pikmin™ 1",audio;status-ingame,ingame,2024-05-28 18:56:11.000 +0100D680194B2000,"Pikmin™ 1+2",gpu;status-ingame,ingame,2023-07-31 08:53:41.000 +0100F4C009322000,"Pikmin™ 3 Deluxe",gpu;status-ingame;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26.000 +0100B7C00933A000,"Pikmin™ 4",gpu;status-ingame;crash;UE4,ingame,2024-08-26 03:39:08.000 +0100D6200E130000,"Pillars of Eternity: Complete Edition",status-playable,playable,2021-02-27 00:24:21.000 +01007A500B0B2000,"Pilot Sports",status-playable,playable,2021-01-20 15:04:17.000 +0100DA70186D4000,"Pinball FX",status-playable,playable,2024-05-03 17:09:11.000 +0100DB7003828000,"Pinball FX3",status-playable;online-broken,playable,2022-11-11 23:49:07.000 +01002BA00D662000,"Pine",slow;status-ingame,ingame,2020-07-29 16:57:39.000 +010041100B148000,"Pinstripe",status-playable,playable,2020-11-26 10:40:40.000 +01002B20174EE000,"Piofiore: Episodio 1926",status-playable,playable,2022-11-23 18:36:05.000 +01009240117A2000,"Piofiore: Fated Memories",nvdec;status-playable,playable,2020-11-30 14:27:50.000 +0100EA2013BCC000,"Pixel Game Maker Series Puzzle Pedestrians",status-playable,playable,2022-10-24 20:15:50.000 +0100859013CE6000,"Pixel Game Maker Series Werewolf Princess Kaguya",crash;services;status-nothing,nothing,2021-03-26 00:23:07.000 +010060A00F5E8000,"Pixel Gladiator",status-playable,playable,2020-07-08 02:41:26.000 +010000E00E612000,"Pixel Puzzle Makeout League",status-playable,playable,2022-10-13 12:34:00.000 +0100382011002000,"PixelJunk Eden 2",crash;status-ingame,ingame,2020-12-17 11:55:52.000 +0100E4D00A690000,"PixelJunk™ Monsters 2",status-playable,playable,2021-06-07 03:40:01.000 +01004A900C352000,"Pizza Titan Ultra",nvdec;status-playable,playable,2021-01-20 15:58:42.000 +05000FD261232000,"Pizza Tower",status-ingame;crash,ingame,2024-09-16 00:21:56.000 +0100FF8005EB2000,"Plague Road",status-playable,playable,2022-08-09 15:27:14.000 +010030B00C316000,"Planescape: Torment and Icewind Dale: Enhanced Editions",cpu;status-boots;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26.000 +010003C0099EE000,"PLANET ALPHA",UE4;gpu;status-ingame,ingame,2020-12-16 14:42:20.000 +01007EA019CFC000,"Planet Cube: Edge",status-playable,playable,2023-03-22 17:10:12.000 +0100F0A01F112000,"planetarian: The Reverie of a Little Planet & Snow Globe",status-playable,playable,2020-10-17 20:26:20.000 +010087000428E000,"Plantera Deluxe",status-playable,playable,2022-08-09 15:36:28.000 +0100C56010FD8000,"Plants vs. Zombies: Battle for Neighborville™ Complete Edition",gpu;audio;status-boots;crash,boots,2024-09-02 12:58:14.000 +0100E5B011F48000,"PLOID SAGA",status-playable,playable,2021-04-19 16:58:45.000 +01009440095FE000,"Pode",nvdec;status-playable,playable,2021-01-25 12:58:35.000 +010086F0064CE000,"Poi: Explorer Edition",nvdec;status-playable,playable,2021-01-21 19:32:00.000 +0100EB6012FD2000,"Poison Control",status-playable,playable,2021-05-16 14:01:54.000 +010072400E04A000,"Pokémon Café ReMix",status-playable,playable,2021-08-17 20:00:04.000 +01003D200BAA2000,"Pokémon Mystery Dungeon™: Rescue Team DX",status-playable;mac-bug,playable,2024-01-21 00:16:32.000 +01008DB008C2C000,"Pokémon Shield + Pokémon Shield Expansion Pass",deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22.000 +0100ABF008968000,"Pokémon Sword + Pokémon Sword Expansion Pass",deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37.000 +01009AD008C4C000,"Pokémon: Let's Go, Pikachu! demo",slow;status-playable;demo,playable,2023-11-26 11:23:20.000 +0100000011D90000,"Pokémon™ Brilliant Diamond",gpu;status-ingame;ldn-works,ingame,2024-08-28 13:26:35.000 +010015F008C54000,"Pokémon™ HOME",Needs Update;crash;services;status-menus,menus,2020-12-06 06:01:51.000 +01001F5010DFA000,"Pokémon™ Legends: Arceus",gpu;status-ingame;Needs Update;ldn-works,ingame,2024-09-19 10:02:02.000 +01005D100807A000,"Pokémon™ Quest",status-playable,playable,2022-02-22 16:12:32.000 +0100A3D008C5C000,"Pokémon™ Scarlet",gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29.000 +01008F6008C5E000,"Pokémon™ Violet",gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48.000 +0100187003A36000,"Pokémon™: Let’s Go, Eevee!",status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04.000 +010003F003A34000,"Pokémon™: Let’s Go, Pikachu!",status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41.000 +0100B3F000BE2000,"Pokkén Tournament™ DX",status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08.000 +010030D005AE6000,"Pokkén Tournament™ DX Demo",status-playable;demo;opengl-backend-bug,playable,2022-08-10 12:03:19.000 +0100A3500B4EC000,"Polandball: Can Into Space",status-playable,playable,2020-06-25 15:13:26.000 +0100EAB00605C000,"Poly Bridge",services;status-playable,playable,2020-06-08 23:32:41.000 +010017600B180000,"Polygod",slow;status-ingame;regression,ingame,2022-08-10 14:38:14.000 +010074B00ED32000,"Polyroll",gpu;status-boots,boots,2021-07-01 16:16:50.000 +010096B01179A000,"Ponpu",status-playable,playable,2020-12-16 19:09:34.000 +01005C5011086000,"Pooplers",status-playable,playable,2020-11-02 11:52:10.000 +01007EF013CA0000,"Port Royale 4",status-menus;crash;nvdec,menus,2022-10-30 14:34:06.000 +01007BB017812000,"Portal",status-playable,playable,2024-06-12 03:48:29.000 +0100ABD01785C000,"Portal 2",gpu;status-ingame,ingame,2023-02-20 22:44:15.000 +010050D00FE0C000,"Portal Dogs",status-playable,playable,2020-09-04 12:55:46.000 +0100437004170000,"Portal Knights",ldn-untested;online;status-playable,playable,2021-05-27 19:29:04.000 +01005FC010EB2000,"Potata: Fairy Flower",nvdec;status-playable,playable,2020-06-17 09:51:34.000 +01000A4014596000,"Potion Party",status-playable,playable,2021-05-06 14:26:54.000 +0100E1E00CF1A000,"Power Rangers: Battle for the Grid",status-playable,playable,2020-06-21 16:52:42.000 +0100D1C01C194000,"Powerful Pro Baseball 2024-2025",gpu;status-ingame,ingame,2024-08-25 06:40:48.000 +01008E100E416000,"PowerSlave Exhumed",gpu;status-ingame,ingame,2023-07-31 23:19:10.000 +010054F01266C000,"Prehistoric Dude",gpu;status-ingame,ingame,2020-10-12 12:38:48.000 +,"Pretty Princess Magical Coordinate",status-playable,playable,2020-10-15 11:43:41.000 +01007F00128CC000,"Pretty Princess Party",status-playable,playable,2022-10-19 17:23:58.000 +010009300D278000,"Preventive Strike",status-playable;nvdec,playable,2022-10-06 10:55:51.000 +0100210019428000,"Prince of Persia The Lost Crown",status-ingame;crash,ingame,2024-06-08 21:31:58.000 +01007A3009184000,"Princess Peach™: Showtime!",status-playable;UE4,playable,2024-09-21 13:39:45.000 +010024701DC2E000,"Princess Peach™: Showtime! Demo",status-playable;UE4;demo,playable,2024-03-10 17:46:45.000 +01001FA01451C000,"Prinny Presents NIS Classics Volume 1: Phantom Brave: The Hermuda Triangle Remastered / Soul Nomad & the World Eaters",status-boots;crash;Needs Update,boots,2023-02-02 07:23:09.000 +01008FA01187A000,"Prinny® 2: Dawn of Operation Panties, Dood!",32-bit;status-playable,playable,2022-10-13 12:42:58.000 +01007A0011878000,"Prinny®: Can I Really Be the Hero?",32-bit;status-playable;nvdec,playable,2023-10-22 09:25:25.000 +010007F00879E000,"PriPara: All Idol Perfect Stage",status-playable,playable,2022-11-22 16:35:52.000 +010029200AB1C000,"Prison Architect: Nintendo Switch™ Edition",status-playable,playable,2021-04-10 12:27:58.000 +0100C1801B914000,"Prison City",gpu;status-ingame,ingame,2024-03-01 08:19:33.000 +0100F4800F872000,"Prison Princess",status-playable,playable,2022-11-20 15:00:25.000 +0100A9800A1B6000,"Professional Construction – The Simulation",slow;status-playable,playable,2022-08-10 15:15:45.000 +010077B00BDD8000,"Professional Farmer: Nintendo Switch™ Edition",slow;status-playable,playable,2020-12-16 13:38:19.000 +010018300C83A000,"Professor Lupo and his Horrible Pets",status-playable,playable,2020-06-12 00:08:45.000 +0100D1F0132F6000,"Professor Lupo: Ocean",status-playable,playable,2021-04-14 16:33:33.000 +0100BBD00976C000,"Project Highrise: Architect's Edition",status-playable,playable,2022-08-10 17:19:12.000 +0100ACE00DAB6000,"Project Nimbus: Complete Edition",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43.000 +01002980140F6000,"Project TRIANGLE STRATEGY™ Debut Demo",status-playable;UE4;demo,playable,2022-10-24 21:40:27.000 +0100BDB01150E000,"Project Warlock",status-playable,playable,2020-06-16 10:50:41.000 +,"Psikyo Collection Vol 1",32-bit;status-playable,playable,2020-10-11 13:18:47.000 +0100A2300DB78000,"Psikyo Collection Vol. 3",status-ingame,ingame,2021-06-07 02:46:23.000 +01009D400C4A8000,"Psikyo Collection Vol.2",32-bit;status-playable,playable,2021-06-07 03:22:07.000 +01007A200F2E2000,"Psikyo Shooting Stars Alpha",32-bit;status-playable,playable,2021-04-13 12:03:43.000 +0100D7400F2E4000,"Psikyo Shooting Stars Bravo",32-bit;status-playable,playable,2021-06-14 12:09:07.000 +0100EC100A790000,"PSYVARIAR DELTA",nvdec;status-playable,playable,2021-01-20 13:01:46.000 +,"Puchitto kurasutā",Need-Update;crash;services;status-menus,menus,2020-07-04 16:44:28.000 +0100D61010526000,"Pulstario",status-playable,playable,2022-10-06 11:02:01.000 +01009AE00B788000,"Pumped BMX Pro",status-playable;nvdec;online-broken,playable,2022-09-20 17:40:50.000 +01006C10131F6000,"Pumpkin Jack",status-playable;nvdec;UE4,playable,2022-10-13 12:52:32.000 +010016400F07E000,"Push the Crate",status-playable;nvdec;UE4,playable,2022-09-15 13:28:41.000 +0100B60010432000,"Push the Crate 2",UE4;gpu;nvdec;status-ingame,ingame,2021-06-10 14:20:01.000 +0100F1200F6D8000,"Pushy and Pully in Blockland",status-playable,playable,2020-07-04 11:44:41.000 +0100AAE00CAB4000,"Puyo Puyo Champions",online;status-playable,playable,2020-06-19 11:35:08.000 +010038E011940000,"Puyo Puyo™ Tetris® 2",status-playable;ldn-untested,playable,2023-09-26 11:35:25.000 +0100C5700ECE0000,"Puzzle & Dragons GOLD",slow;status-playable,playable,2020-05-13 15:09:34.000 +010079E01A1E0000,"Puzzle Bobble Everybubble!",audio;status-playable;ldn-works,playable,2023-06-10 03:53:40.000 +010043100F0EA000,"Puzzle Book",status-playable,playable,2020-09-28 13:26:01.000 +0100476004A9E000,"Puzzle Box Maker",status-playable;nvdec;online-broken,playable,2022-08-10 18:00:52.000 +0100A4E017372000,"Pyramid Quest",gpu;status-ingame,ingame,2023-08-16 21:14:52.000 +0100F1100E606000,"Q-YO Blaster",gpu;status-ingame,ingame,2020-06-07 22:36:53.000 +010023600AA34000,"Q.U.B.E. 2",UE4;status-playable,playable,2021-03-03 21:38:57.000 +0100A8D003BAE000,"Qbics Paint",gpu;services;status-ingame,ingame,2021-06-07 10:54:09.000 +0100BA5012E54000,"QUAKE",gpu;status-menus;crash,menus,2022-08-08 12:40:34.000 +010048F0195E8000,"Quake II",status-playable,playable,2023-08-15 03:42:14.000 +,"QuakespasmNX",status-nothing;crash;homebrew,nothing,2022-07-23 19:28:07.000 +010045101288A000,"Quantum Replica",status-playable;nvdec;UE4,playable,2022-10-30 21:17:22.000 +0100F1400BA88000,"Quarantine Circular",status-playable,playable,2021-01-20 15:24:15.000 +0100DCF00F13A000,"Queen's Quest 4: Sacred Truce",status-playable;nvdec,playable,2022-10-13 12:59:21.000 +0100492012378000,"Quell",gpu;status-ingame,ingame,2021-06-11 15:59:53.000 +01001DE005012000,"Quest of Dungeons",status-playable,playable,2021-06-07 10:29:22.000 +,"QuietMansion2",status-playable,playable,2020-09-03 14:59:35.000 +0100AF100EE76000,"Quiplash 2 InterLASHional: The Say Anything Party Game!",status-playable;online-working,playable,2022-10-19 17:43:45.000 +0100E5400BE64000,"R-Type Dimensions EX",status-playable,playable,2020-10-09 12:04:43.000 +0100F930136B6000,"R-Type® Final 2",slow;status-ingame;nvdec;UE4,ingame,2022-10-30 21:46:29.000 +01007B0014300000,"R-Type® Final 2 Demo",slow;status-ingame;nvdec;UE4;demo,ingame,2022-10-24 21:57:42.000 +0100B5A004302000,"R.B.I. Baseball 17",status-playable;online-working,playable,2022-08-11 11:55:47.000 +01005CC007616000,"R.B.I. Baseball 18",status-playable;nvdec;online-working,playable,2022-08-11 11:27:52.000 +0100FCB00BF40000,"R.B.I. Baseball 19",status-playable;nvdec;online-working,playable,2022-08-11 11:43:52.000 +010061400E7D4000,"R.B.I. Baseball 20",status-playable,playable,2021-06-15 21:16:29.000 +0100B4A0115CA000,"R.B.I. Baseball 21",status-playable;online-working,playable,2022-10-24 22:31:45.000 +01005BF00E4DE000,"Rabi-Ribi",status-playable,playable,2022-08-06 17:02:44.000 +010075D00DD04000,"Race with Ryan",UE4;gpu;nvdec;slow;status-ingame,ingame,2020-11-16 04:35:33.000 +0100B8100C54A000,"Rack N Ruin",status-playable,playable,2020-09-04 15:20:26.000 +010024400C516000,"RAD",gpu;status-menus;crash;UE4,menus,2021-11-29 02:01:56.000 +010000600CD54000,"Rad Rodgers Radical Edition",status-playable;nvdec;online-broken,playable,2022-08-10 19:57:23.000 +0100DA400E07E000,"Radiation City",status-ingame;crash,ingame,2022-09-30 11:15:04.000 +01009E40095EE000,"Radiation Island",status-ingame;opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04.000 +0100C8B00D2BE000,"Radical Rabbit Stew",status-playable,playable,2020-08-03 12:02:56.000 +0100BAD013B6E000,"Radio Commander",nvdec;status-playable,playable,2021-03-24 11:20:46.000 +01008FA00ACEC000,"RADIOHAMMER STATION",audout;status-playable,playable,2021-02-26 20:20:06.000 +01003D00099EC000,"Raging Justice",status-playable,playable,2021-06-03 14:06:50.000 +01005CD013116000,"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",status-playable,playable,2022-07-29 15:50:13.000 +01002B000D97E000,"Raiden V: Director's Cut",deadlock;status-boots;nvdec,boots,2024-07-12 07:31:46.000 +01002EE00DC02000,"Railway Empire - Nintendo Switch™ Edition",status-playable;nvdec,playable,2022-10-03 13:53:50.000 +01003C700D0DE000,"Rain City",status-playable,playable,2020-10-08 16:59:03.000 +0100BDD014232000,"Rain on Your Parade",status-playable,playable,2021-05-06 19:32:04.000 +010047600BF72000,"Rain World",status-playable,playable,2023-05-10 23:34:08.000 +01009D9010B9E000,"Rainbows, toilets & unicorns",nvdec;status-playable,playable,2020-10-03 18:08:18.000 +010010B00DDA2000,"Raji: An Ancient Epic",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 10:05:25.000 +010042A00A9CC000,"Rapala Fishing Pro Series",nvdec;status-playable,playable,2020-12-16 13:26:53.000 +0100E73010754000,"Rascal Fight",status-playable,playable,2020-10-08 13:23:30.000 +010003F00C5C0000,"Rawr-Off",crash;nvdec;status-menus,menus,2020-07-02 00:14:44.000 +01005FF002E2A000,"Rayman® Legends Definitive Edition",status-playable;nvdec;ldn-works,playable,2023-05-27 18:33:07.000 +0100F03011616000,"Re:Turn - One Way Trip",status-playable,playable,2022-08-29 22:42:53.000 +01000B20117B8000,"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",gpu;status-boots;crash;nvdec;vulkan,boots,2023-03-07 21:27:24.000 +0100A8A00E462000,"Real Drift Racing",status-playable,playable,2020-07-25 14:31:31.000 +010048600CC16000,"Real Heroes: Firefighter",status-playable,playable,2022-09-20 18:18:44.000 +0100E64010BAA000,"realMyst: Masterpiece Edition",nvdec;status-playable,playable,2020-11-30 15:25:42.000 +01000F300F082000,"Reaper: Tale of a Pale Swordsman",status-playable,playable,2020-12-12 15:12:23.000 +0100D9B00E22C000,"Rebel Cops",status-playable,playable,2022-09-11 10:02:53.000 +0100CAA01084A000,"Rebel Galaxy Outlaw",status-playable;nvdec,playable,2022-12-01 07:44:56.000 +0100EF0015A9A000,"Record of Lodoss War-Deedlit in Wonder Labyrinth-",deadlock;status-ingame;Needs Update;Incomplete,ingame,2022-01-19 10:00:59.000 +0100CF600FF7A000,"Red Bow",services;status-ingame,ingame,2021-11-29 03:51:34.000 +0100351013A06000,"Red Colony",status-playable,playable,2021-01-25 20:44:41.000 +01007820196A6000,"Red Dead Redemption",status-playable;amd-vendor-bug,playable,2024-09-13 13:26:13.000 +0100069010592000,"Red Death",status-playable,playable,2020-08-30 13:07:37.000 +010075000C608000,"Red Faction Guerrilla Re-Mars-tered",ldn-untested;nvdec;online;status-playable,playable,2021-06-07 03:02:13.000 +01002290070E4000,"Red Game Without a Great Name",status-playable,playable,2021-01-19 21:42:35.000 +010045400D73E000,"Red Siren: Space Defense",UE4;status-playable,playable,2021-04-25 21:21:29.000 +0100D8A00E880000,"Red Wings: Aces of the Sky",status-playable,playable,2020-06-12 01:19:53.000 +01000D100DCF8000,"Redeemer: Enhanced Edition",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24.000 +0100326010B98000,"Redout: Space Assault",status-playable;UE4,playable,2022-10-19 23:04:35.000 +010007C00E558000,"Reel Fishing: Road Trip Adventure",status-playable,playable,2021-03-02 16:06:43.000 +010045D01273A000,"Reflection of Mine",audio;status-playable,playable,2020-12-17 15:06:37.000 +01003AA00F5C4000,"Refreshing Sideways Puzzle Ghost Hammer",status-playable,playable,2020-10-18 12:08:54.000 +01007A800D520000,"Refunct",UE4;status-playable,playable,2020-12-15 22:46:21.000 +0100FDF0083A6000,"Regalia: Of Men and Monarchs - Royal Edition",status-playable,playable,2022-08-11 12:24:01.000 +01005FD00F15A000,"Regions of Ruin",status-playable,playable,2020-08-05 11:38:58.000 +,"Reine des Fleurs",cpu;crash;status-boots,boots,2020-09-27 18:50:39.000 +0100F1900B144000,"REKT! High Octane Stunts",online;status-playable,playable,2020-09-28 12:33:56.000 +01002AD013C52000,"Relicta",status-playable;nvdec;UE4,playable,2022-10-31 12:48:33.000 +010095900B436000,"RemiLore",status-playable,playable,2021-06-03 18:58:15.000 +0100FBD00F5F6000,"Remothered: Broken Porcelain",UE4;gpu;nvdec;status-ingame,ingame,2021-06-17 15:13:11.000 +01001F100E8AE000,"Remothered: Tormented Fathers",status-playable;nvdec;UE4,playable,2022-10-19 23:26:50.000 +01008EE00B22C000,"Rento Fortune",ldn-untested;online;status-playable,playable,2021-01-19 19:52:21.000 +01007CC0130C6000,"Renzo Racer",status-playable,playable,2021-03-23 22:28:05.000 +01003C400AD42000,"Rescue Tale",status-playable,playable,2022-09-20 18:40:18.000 +010099A00BC1E000,"resident evil 4",status-playable;nvdec,playable,2022-11-16 21:16:04.000 +010018100CD46000,"Resident Evil 5",status-playable;nvdec,playable,2024-02-18 17:15:29.000 +01002A000CD48000,"Resident Evil 6",status-playable;nvdec,playable,2022-09-15 14:31:47.000 +0100643002136000,"Resident Evil Revelations",status-playable;nvdec;ldn-untested,playable,2022-08-11 12:44:19.000 +010095300212A000,"Resident Evil Revelations 2",status-playable;online-broken;ldn-untested,playable,2022-08-11 12:57:50.000 +0100E7F00FFB8000,"Resolutiion",crash;status-boots,boots,2021-04-25 21:57:56.000 +0100FF201568E000,"Restless Night",status-nothing;crash,nothing,2022-02-09 10:54:49.000 +0100069000078000,"Retail Interactive Display Menu (DevQuestMenu)",services;status-nothing;crash,nothing,2022-08-11 13:19:41.000 +010086E00BCB2000,"Retimed",status-playable,playable,2022-08-11 13:32:39.000 +0100F17004156000,"Retro City Rampage DX",status-playable,playable,2021-01-05 17:04:17.000 +01000ED014A2C000,"Retro Machina",status-playable;online-broken,playable,2022-10-31 13:38:58.000 +010032E00E6E2000,"Return of the Obra Dinn",status-playable,playable,2022-09-15 19:56:45.000 +010027400F708000,"Revenge of Justice",status-playable;nvdec,playable,2022-11-20 15:43:23.000 +0100E2E00EA42000,"Reventure",status-playable,playable,2022-09-15 20:07:06.000 +010071D00F156000,"REZ PLZ",status-playable,playable,2020-10-24 13:26:12.000 +0100729012D18000,"Rhythm Fighter",crash;status-nothing,nothing,2021-02-16 18:51:30.000 +010081D0100F0000,"Rhythm of the Gods",UE4;crash;status-nothing,nothing,2020-10-03 17:39:59.000 +01009D5009234000,"RICO",status-playable;nvdec;online-broken,playable,2022-08-11 20:16:40.000 +01002C700C326000,"Riddled Corpses EX",status-playable,playable,2021-06-06 16:02:44.000 +0100AC600D898000,"Rift Keeper",status-playable,playable,2022-09-20 19:48:20.000 +0100A62002042000,"RiME",UE4;crash;gpu;status-boots,boots,2020-07-20 15:52:38.000 +01006AC00EE6E000,"Rimelands: Hammer of Thor",status-playable,playable,2022-10-13 13:32:56.000 +01002FF008C24000,"RingFit Adventure",crash;services;status-nothing,nothing,2021-04-14 19:00:01.000 +010088E00B816000,"RIOT - Civil Unrest",status-playable,playable,2022-08-11 20:27:56.000 +01002A6006AA4000,"Riptide GP: Renegade",online;status-playable,playable,2021-04-13 23:33:02.000 +010065B00B0EC000,"Rise and Shine",status-playable,playable,2020-12-12 15:56:43.000 +0100E9C010EA8000,"Rise of Insanity",status-playable,playable,2020-08-30 15:42:14.000 +01006BA00E652000,"Rise: Race The Future",status-playable,playable,2021-02-27 13:29:06.000 +010020C012F48000,"Rising Hell",status-playable,playable,2022-10-31 13:54:02.000 +010076D00E4BA000,"Risk of Rain 2",status-playable;online-broken,playable,2024-03-04 17:01:05.000 +0100E8300A67A000,"RISK® Global Domination",status-playable;nvdec;online-broken,playable,2022-08-01 18:53:28.000 +010042500FABA000,"Ritual: Crown of Horns",status-playable,playable,2021-01-26 16:01:47.000 +0100BD300F0EC000,"Ritual: Sorcerer Angel",status-playable,playable,2021-03-02 13:51:19.000 +0100A7D008392000,"Rival Megagun",nvdec;online;status-playable,playable,2021-01-19 14:01:46.000 +010069C00401A000,"RIVE: Ultimate Edition",status-playable,playable,2021-03-24 18:45:55.000 +01004E700DFE6000,"River City Girls",nvdec;status-playable,playable,2020-06-10 23:44:09.000 +01002E80168F4000,"River City Girls 2",status-playable,playable,2022-12-07 00:46:27.000 +0100B2100767C000,"River City Melee Mach!!",status-playable;online-broken,playable,2022-09-20 20:51:57.000 +01008AC0115C6000,"RMX Real Motocross",status-playable,playable,2020-10-08 21:06:15.000 +010053000B986000,"Road Redemption",status-playable;online-broken,playable,2022-08-12 11:26:20.000 +010002F009A7A000,"Road to Ballhalla",UE4;status-playable,playable,2021-06-07 02:22:36.000 +0100735010F58000,"Road To Guangdong",slow;status-playable,playable,2020-10-12 12:15:32.000 +010068200C5BE000,"Roarr! Jurassic Edition",status-playable,playable,2022-10-19 23:57:45.000 +0100618004096000,"Robonauts",status-playable;nvdec,playable,2022-08-12 11:33:23.000 +010039A0117C0000,"ROBOTICS;NOTES DaSH",status-playable,playable,2020-11-16 23:09:54.000 +01002A900EE8A000,"ROBOTICS;NOTES ELITE",status-playable,playable,2020-11-26 10:28:20.000 +010044A010BB8000,"Robozarro",status-playable,playable,2020-09-03 13:33:40.000 +01000CC012D74000,"Rock 'N Racing Bundle Grand Prix & Rally",status-playable,playable,2021-01-06 20:23:57.000 +0100A1B00DB36000,"Rock of Ages 3: Make & Break",status-playable;UE4,playable,2022-10-06 12:18:29.000 +0100513005AF4000,"Rock'N Racing Off Road DX",status-playable,playable,2021-01-10 15:27:15.000 +01005EE0036EC000,"Rocket League®",gpu;status-ingame;online-broken;ldn-untested,ingame,2024-02-08 19:51:36.000 +0100E88009A34000,"Rocket Wars",status-playable,playable,2020-07-24 14:27:39.000 +0100EC7009348000,"Rogue Aces",gpu;services;status-ingame;nvdec,ingame,2021-11-30 02:18:30.000 +01009FA010848000,"Rogue Heroes: Ruins of Tasos",online;status-playable,playable,2021-04-01 15:41:25.000 +010056500AD50000,"Rogue Legacy",status-playable,playable,2020-08-10 19:17:28.000 +0100F3B010F56000,"Rogue Robots",status-playable,playable,2020-06-16 12:16:11.000 +01001CC00416C000,"Rogue Trooper Redux",status-playable;nvdec;online-broken,playable,2022-08-12 11:53:01.000 +0100C7300C0EC000,"RogueCube",status-playable,playable,2021-06-16 12:16:42.000 +0100B7200FC96000,"Roll'd",status-playable,playable,2020-07-04 20:24:01.000 +01004900113F8000,"RollerCoaster Tycoon 3 Complete Edition",32-bit;status-playable,playable,2022-10-17 14:18:01.000 +0100E3900B598000,"RollerCoaster Tycoon Adventures",nvdec;status-playable,playable,2021-01-05 18:14:18.000 +010076200CA16000,"Rolling Gunner",status-playable,playable,2021-05-26 12:54:18.000 +0100579011B40000,"Rolling Sky 2",status-playable,playable,2022-11-03 10:21:12.000 +010050400BD38000,"Roman Rumble in Las Vegum - Asterix & Obelix XXL 2",deadlock;status-ingame;nvdec,ingame,2022-07-21 17:54:14.000 +01001F600829A000,"Romancing SaGa 2",status-playable,playable,2022-08-12 12:02:24.000 +0100D0400D27A000,"Romancing SaGa 3",audio;gpu;status-ingame,ingame,2020-06-27 20:26:18.000 +010088100DD42000,"Roof Rage",status-boots;crash;regression,boots,2023-11-12 03:47:18.000 +0100F3000FA58000,"Roombo: First Blood",nvdec;status-playable,playable,2020-08-05 12:11:37.000 +0100936011556000,"Root Double -Before Crime * After Days- Xtend Edition",status-nothing;crash,nothing,2022-02-05 02:03:49.000 +010030A00DA3A000,"Root Letter: Last Answer",status-playable;vulkan-backend-bug,playable,2022-09-17 10:25:57.000 +0100AFE00DDAC000,"Royal Roads",status-playable,playable,2020-11-17 12:54:38.000 +0100E2C00B414000,"RPG Maker MV",nvdec;status-playable,playable,2021-01-05 20:12:01.000 +01005CD015986000,"rRootage Reloaded",status-playable,playable,2022-08-05 23:20:18.000 +0000000000000000,"RSDKv5u",status-ingame;homebrew,ingame,2024-04-01 16:25:34.000 +010009B00D33C000,"Rugby Challenge 4",slow;status-playable;online-broken;UE4,playable,2022-10-06 12:45:53.000 +01006EC00F2CC000,"RUINER",status-playable;UE4,playable,2022-10-03 14:11:33.000 +010074F00DE4A000,"Run the Fan",status-playable,playable,2021-02-27 13:36:28.000 +0100ADF00700E000,"Runbow",online;status-playable,playable,2021-01-08 22:47:44.000 +0100D37009B8A000,"Runbow Deluxe Edition",status-playable;online-broken,playable,2022-08-12 12:20:25.000 +010081C0191D8000,"Rune Factory 3 Special",status-playable,playable,2023-10-15 08:32:49.000 +010051D00E3A4000,"Rune Factory 4 Special",status-ingame;32-bit;crash;nvdec,ingame,2023-05-06 08:49:17.000 +010014D01216E000,"Rune Factory 5 (JP)",gpu;status-ingame,ingame,2021-06-01 12:00:36.000 +0100E21013908000,"RWBY: Grimm Eclipse - Definitive Edition",status-playable;online-broken,playable,2022-11-03 10:44:01.000 +010012C0060F0000,"RXN -Raijin-",nvdec;status-playable,playable,2021-01-10 16:05:43.000 +0100B8B012ECA000,"S.N.I.P.E.R. - Hunter Scope",status-playable,playable,2021-04-19 15:58:09.000 +010007700CFA2000,"Saboteur II: Avenging Angel",Needs Update;cpu;crash;status-nothing,nothing,2021-01-26 14:47:37.000 +0100D94012FE8000,"Saboteur SiO",slow;status-ingame,ingame,2020-12-17 16:59:49.000 +0100A5200C2E0000,"Safety First!",status-playable,playable,2021-01-06 09:05:23.000 +0100A51013530000,"SaGa Frontier Remastered",status-playable;nvdec,playable,2022-11-03 13:54:56.000 +010003A00D0B4000,"SaGa SCARLET GRACE: AMBITIONS™",status-playable,playable,2022-10-06 13:20:31.000 +01008D100D43E000,"Saints Row IV®: Re-Elected™",status-playable;ldn-untested;LAN,playable,2023-12-04 18:33:37.000 +0100DE600BEEE000,"SAINTS ROW®: THE THIRD™ - THE FULL PACKAGE",slow;status-playable;LAN,playable,2023-08-24 02:40:58.000 +01007F000EB36000,"Sakai and...",status-playable;nvdec,playable,2022-12-15 13:53:19.000 +0100B1400E8FE000,"Sakuna: Of Rice and Ruin",status-playable,playable,2023-07-24 13:47:13.000 +0100BBF0122B4000,"Sally Face",status-playable,playable,2022-06-06 18:41:24.000 +0100D250083B4000,"Salt and Sanctuary",status-playable,playable,2020-10-22 11:52:19.000 +0100CD301354E000,"Sam & Max Save the World",status-playable,playable,2020-12-12 13:11:51.000 +010014000C63C000,"Samsara: Deluxe Edition",status-playable,playable,2021-01-11 15:14:12.000 +0100ADF0096F2000,"Samurai Aces for Nintendo Switch",32-bit;status-playable,playable,2020-11-24 20:26:55.000 +01006C600E46E000,"Samurai Jack: Battle Through Time",status-playable;nvdec;UE4,playable,2022-10-06 13:33:59.000 +01002DF00F76C000,"SAMURAI SHODOWN",UE4;crash;nvdec;status-menus,menus,2020-09-06 02:17:00.000 +0100F6800F48E000,"SAMURAI SHODOWN NEOGEO COLLECTION",nvdec;status-playable,playable,2021-06-14 17:12:56.000 +0100B6501A360000,"Samurai Warrior",status-playable,playable,2023-02-27 18:42:38.000 +,"Sangoku Rensenki ~Otome no Heihou!~",gpu;nvdec;status-ingame,ingame,2020-10-17 19:13:14.000 +0100A4700BC98000,"Satsujin Tantei Jack the Ripper",status-playable,playable,2021-06-21 16:32:54.000 +0100F0000869C000,"Saturday Morning RPG",status-playable;nvdec,playable,2022-08-12 12:41:50.000 +01006EE00380C000,"Sausage Sports Club",gpu;status-ingame,ingame,2021-01-10 05:37:17.000 +0100C8300FA90000,"Save Koch",status-playable,playable,2022-09-26 17:06:56.000 +0100D6E008700000,"Save the Ninja Clan",status-playable,playable,2021-01-11 13:56:37.000 +010091000F72C000,"Save Your Nuts",status-playable;nvdec;online-broken;UE4,playable,2022-09-27 23:12:02.000 +0100AA00128BA000,"Saviors of Sapphire Wings / Stranger of Sword City Revisited",status-menus;crash,menus,2022-10-24 23:00:46.000 +01001C3012912000,"Say No! More",status-playable,playable,2021-05-06 13:43:34.000 +010010A00A95E000,"Sayonara Wild Hearts",status-playable,playable,2023-10-23 03:20:01.000 +0100ACB004006000,"Schlag den Star",slow;status-playable;nvdec,playable,2022-08-12 14:28:22.000 +0100394011C30000,"Scott Pilgrim vs. The World™: The Game – Complete Edition",services-horizon;status-nothing;crash,nothing,2024-07-12 08:13:03.000 +0100E7100B198000,"Scribblenauts Mega Pack",nvdec;status-playable,playable,2020-12-17 22:56:14.000 +01001E40041BE000,"Scribblenauts Showdown",gpu;nvdec;status-ingame,ingame,2020-12-17 23:05:53.000 +0100829018568000,"SD GUNDAM BATTLE ALLIANCE Demo",audio;status-ingame;crash;demo,ingame,2022-08-01 23:01:20.000 +010055700CEA8000,"SD GUNDAM G GENERATION CROSS RAYS",status-playable;nvdec,playable,2022-09-15 20:58:44.000 +010022900D3EC00,"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION",status-playable;nvdec,playable,2022-09-15 20:45:57.000 +0100E4A00D066000,"Sea King",UE4;nvdec;status-playable,playable,2021-06-04 15:49:22.000 +0100AFE012BA2000,"Sea of Solitude: The Director's Cut",gpu;status-ingame,ingame,2024-07-12 18:29:29.000 +01008C0016544000,"Sea of Stars",status-playable,playable,2024-03-15 20:27:12.000 +010036F0182C4000,"Sea of Stars Demo",status-playable;demo,playable,2023-02-12 15:33:56.000 +0100C2400D68C000,"SeaBed",status-playable,playable,2020-05-17 13:25:37.000 +010077100CA6E000,"Season Match Bundle",status-playable,playable,2020-10-27 16:15:22.000 +010028F010644000,"Secret Files 3",nvdec;status-playable,playable,2020-10-24 15:32:39.000 +010075D0101FA000,"Seek Hearts",status-playable,playable,2022-11-22 15:06:26.000 +0100394010844000,"Seers Isle",status-playable,playable,2020-11-17 12:28:50.000 +0100A8900AF04000,"SEGA AGES Alex Kidd in Miracle World",online;status-playable,playable,2021-05-05 16:35:47.000 +01001E600AF08000,"SEGA AGES Gain Ground",online;status-playable,playable,2021-05-05 16:16:27.000 +0100D4D00AC62000,"SEGA AGES Out Run",status-playable,playable,2021-01-11 13:13:59.000 +01005A300C9F6000,"SEGA AGES Phantasy Star",status-playable,playable,2021-01-11 12:49:48.000 +01005F600CB0E000,"SEGA AGES Puyo Puyo",online;status-playable,playable,2021-05-05 16:09:28.000 +010051F00AC5E000,"SEGA AGES Sonic The Hedgehog",slow;status-playable,playable,2023-03-05 20:16:31.000 +01000D200C614000,"SEGA AGES Sonic The Hedgehog 2",status-playable,playable,2022-09-21 20:26:35.000 +0100C3E00B700000,"SEGA AGES Space Harrier",status-playable,playable,2021-01-11 12:57:40.000 +010054400D2E6000,"SEGA AGES Virtua Racing",status-playable;online-broken,playable,2023-01-29 17:08:39.000 +01001E700AC60000,"SEGA AGES Wonder Boy: Monster Land",online;status-playable,playable,2021-05-05 16:28:25.000 +0100B3C014BDA000,"SEGA Genesis™ – Nintendo Switch Online",status-nothing;crash;regression,nothing,2022-04-11 07:27:21.000 +,"SEGA Mega Drive Classics",online;status-playable,playable,2021-01-05 11:08:00.000 +01009840046BC000,"Semispheres",status-playable,playable,2021-01-06 23:08:31.000 +0100D1800D902000,"SENRAN KAGURA Peach Ball",status-playable,playable,2021-06-03 15:12:10.000 +0100E0C00ADAC000,"SENRAN KAGURA Reflexions",status-playable,playable,2020-03-23 19:15:23.000 +01009E500D29C000,"Sentinels of Freedom",status-playable,playable,2021-06-14 16:42:19.000 +0100A5D012DAC000,"SENTRY",status-playable,playable,2020-12-13 12:00:24.000 +010059700D4A0000,"Sephirothic Stories",services;status-menus,menus,2021-11-25 08:52:17.000 +010007D00D43A000,"Serious Sam Collection",status-boots;vulkan-backend-bug,boots,2022-10-13 13:53:34.000 +0100B2C00E4DA000,"Served!",status-playable;nvdec,playable,2022-09-28 12:46:00.000 +010018400C24E000,"Seven Knights -Time Wanderer-",status-playable;vulkan-backend-bug,playable,2022-10-13 22:08:54.000 +0100D6F016676000,"Seven Pirates H",status-playable,playable,2024-06-03 14:54:12.000 +0100157004512000,"Severed",status-playable,playable,2020-12-15 21:48:48.000 +0100D5500DA94000,"Shadow Blade: Reload",nvdec;status-playable,playable,2021-06-11 18:40:43.000 +0100BE501382A000,"Shadow Gangs",cpu;gpu;status-ingame;crash;regression,ingame,2024-04-29 00:07:26.000 +0100C3A013840000,"Shadow Man Remastered",gpu;status-ingame,ingame,2024-05-20 06:01:39.000 +010073400B696000,"Shadowgate",status-playable,playable,2021-04-24 07:32:57.000 +0100371013B3E000,"Shadowrun Returns",gpu;status-ingame;Needs Update,ingame,2022-10-04 21:32:31.000 +01008310154C4000,"Shadowrun: Dragonfall - Director's Cut",gpu;status-ingame;Needs Update,ingame,2022-10-04 20:52:18.000 +0100C610154CA000,"Shadowrun: Hong Kong - Extended Edition",gpu;status-ingame;Needs Update,ingame,2022-10-04 20:53:09.000 +010000000EEF0000,"Shadows 2: Perfidia",status-playable,playable,2020-08-07 12:43:46.000 +0100AD700CBBE000,"Shadows of Adam",status-playable,playable,2021-01-11 13:35:58.000 +01002A800C064000,"Shadowverse Champions Battle",status-playable,playable,2022-10-02 22:59:29.000 +01003B90136DA000,"Shadowverse: Champion's Battle",status-nothing;crash,nothing,2023-03-06 00:31:50.000 +0100820013612000,"Shady Part of Me",status-playable,playable,2022-10-20 11:31:55.000 +0100B10002904000,"Shakedown: Hawaii",status-playable,playable,2021-01-07 09:44:36.000 +01008DA012EC0000,"Shakes on a Plane",status-menus;crash,menus,2021-11-25 08:52:25.000 +0100B4900E008000,"Shalnor Legends: Sacred Lands",status-playable,playable,2021-06-11 14:57:11.000 +010006C00CC10000,"Shanky: The Vegan`s Nightmare",status-playable,playable,2021-01-26 15:03:55.000 +0100430013120000,"Shantae",status-playable,playable,2021-05-21 04:53:26.000 +0100EFD00A4FA000,"Shantae and the Pirate's Curse",status-playable,playable,2024-04-29 17:21:57.000 +0100EB901040A000,"Shantae and the Seven Sirens",nvdec;status-playable,playable,2020-06-19 12:23:40.000 +01006A200936C000,"Shantae: Half- Genie Hero Ultimate Edition",status-playable,playable,2020-06-04 20:14:20.000 +0100ADA012370000,"Shantae: Risky's Revenge - Director's Cut",status-playable,playable,2022-10-06 20:47:39.000 +01003AB01062C000,"Shaolin vs Wutang",deadlock;status-nothing,nothing,2021-03-29 20:38:54.000 +0100B250009B9600,"Shape Of The World0",UE4;status-playable,playable,2021-03-05 16:42:28.000 +01004F50085F2000,"She Remembered Caterpillars",status-playable,playable,2022-08-12 17:45:14.000 +01000320110C2000,"She Sees Red - Interactive Movie",status-playable;nvdec,playable,2022-09-30 11:30:15.000 +01009EB004CB0000,"Shelter Generations",status-playable,playable,2021-06-04 16:52:39.000 +010020F014DBE000,"Sherlock Holmes: The Devil’s Daughter",gpu;status-ingame,ingame,2022-07-11 00:07:26.000 +0100B1000AC3A000,"Shift Happens",status-playable,playable,2021-01-05 21:24:18.000 +01000E8009E1C000,"Shift Quantum",UE4;crash;status-ingame,ingame,2020-11-06 21:54:08.000 +01000750084B2000,"Shiftlings - Enhanced Edition",nvdec;status-playable,playable,2021-03-04 13:49:54.000 +01003B0012DC2000,"Shin Megami Tensei III Nocturne HD Remaster",status-playable,playable,2022-11-03 22:53:27.000 +010045800ED1E000,"Shin Megami Tensei III NOCTURNE HD REMASTER",gpu;status-ingame;Needs Update,ingame,2022-11-03 19:57:01.000 +010063B012DC6000,"Shin Megami Tensei V",status-playable;UE4,playable,2024-02-21 06:30:07.000 +010069C01AB82000,"Shin Megami Tensei V: Vengeance",gpu;status-ingame;vulkan-backend-bug,ingame,2024-07-14 11:28:24.000 +01009050133B4000,"Shing! (サムライフォース:斬!)",status-playable;nvdec,playable,2022-10-22 00:48:54.000 +01009A5009A9E000,"Shining Resonance Refrain",status-playable;nvdec,playable,2022-08-12 18:03:01.000 +01004EE0104F6000,"Shinsekai Into the Depths™",status-playable,playable,2022-09-28 14:07:51.000 +0100C2F00A568000,"Shio",status-playable,playable,2021-02-22 16:25:09.000 +0100B2E00F13E000,"Shipped",status-playable,playable,2020-11-21 14:22:32.000 +01000E800FCB4000,"Ships",status-playable,playable,2021-06-11 16:14:37.000 +01007430122D0000,"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",status-playable;nvdec,playable,2022-10-20 11:44:36.000 +,"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",cpu;crash;status-boots,boots,2020-09-27 19:01:25.000 +01000244016BAE00,"Shiro0",gpu;status-ingame,ingame,2024-01-13 08:54:39.000 +0100CCE00DDB6000,"Shoot 1UP DX",status-playable,playable,2020-12-13 12:32:47.000 +01001180021FA000,"Shovel Knight: Specter of Torment",status-playable,playable,2020-05-30 08:34:17.000 +010057D0021E8000,"Shovel Knight: Treasure Trove",status-playable,playable,2021-02-14 18:24:39.000 +01003DD00BF0E000,"Shred! 2 - ft Sam Pilgrim",status-playable,playable,2020-05-30 14:34:09.000 +01001DE0076A4000,"Shu",nvdec;status-playable,playable,2020-05-30 09:08:59.000 +0100A7900B936000,"Shut Eye",status-playable,playable,2020-07-23 18:08:35.000 +010044500C182000,"Sid Meier’s Civilization VI",status-playable;ldn-untested,playable,2024-04-08 16:03:40.000 +01007FC00B674000,"Sigi - A Fart for Melusina",status-playable,playable,2021-02-22 16:46:58.000 +0100F1400B0D6000,"Silence",nvdec;status-playable,playable,2021-06-03 14:46:17.000 +0100A32010618000,"Silent World",status-playable,playable,2020-08-28 13:45:13.000 +010045500DFE2000,"Silk",nvdec;status-playable,playable,2021-06-10 15:34:37.000 +010016D00A964000,"SilverStarChess",status-playable,playable,2021-05-06 15:25:57.000 +0100E8C019B36000,"Simona's Requiem",gpu;status-ingame,ingame,2023-02-21 18:29:19.000 +01006FE010438000,"Sin Slayers",status-playable,playable,2022-10-20 11:53:52.000 +01002820036A8000,"Sine Mora EX",gpu;status-ingame;online-broken,ingame,2022-08-12 19:36:18.000 +0100F10012002000,"Singled Out",online;status-playable,playable,2020-08-03 13:06:18.000 +0100B8800F858000,"Sinless",nvdec;status-playable,playable,2020-08-09 20:18:55.000 +0100B16009C10000,"SINNER: Sacrifice for Redemption",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33.000 +0100E9201410E000,"Sir Lovelot",status-playable,playable,2021-04-05 16:21:46.000 +0100134011E32000,"Skate City",status-playable,playable,2022-11-04 11:37:39.000 +0100B2F008BD8000,"Skee-Ball",status-playable,playable,2020-11-16 04:44:07.000 +01001A900F862000,"Skelattack",status-playable,playable,2021-06-09 15:26:26.000 +01008E700F952000,"Skelittle: A Giant Party!",status-playable,playable,2021-06-09 19:08:34.000 +01006C000DC8A000,"Skelly Selest",status-playable,playable,2020-05-30 15:38:18.000 +0100D67006F14000,"Skies of Fury DX",status-playable,playable,2020-05-30 16:40:54.000 +010046B00DE62000,"Skullgirls 2nd Encore",status-playable,playable,2022-09-15 21:21:25.000 +0100D1100BF9C000,"Skulls of the Shogun: Bone-A-Fide Edition",status-playable,playable,2020-08-31 18:58:12.000 +0100D7B011654000,"Skully",status-playable;nvdec;UE4,playable,2022-10-06 13:52:59.000 +010083100B5CA000,"Sky Force Anniversary",status-playable;online-broken,playable,2022-08-12 20:50:07.000 +01006FE005B6E000,"Sky Force Reloaded",status-playable,playable,2021-01-04 20:06:57.000 +010003F00CC98000,"Sky Gamblers - Afterburner",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55.000 +010093D00AC38000,"Sky Gamblers: Storm Raiders",gpu;audio;status-ingame;32-bit,ingame,2022-08-12 21:13:36.000 +010068200E96E000,"Sky Gamblers: Storm Raiders 2",gpu;status-ingame,ingame,2022-09-13 12:24:04.000 +01004F0010A02000,"Sky Racket",status-playable,playable,2020-09-07 12:22:24.000 +0100DDB004F30000,"Sky Ride",status-playable,playable,2021-02-22 16:53:07.000 +0100C5700434C000,"Sky Rogue",status-playable,playable,2020-05-30 08:26:28.000 +0100C52011460000,"Sky: Children of the Light",cpu;status-nothing;online-broken,nothing,2023-02-23 10:57:10.000 +010041C01014E000,"Skybolt Zack",status-playable,playable,2021-04-12 18:28:00.000 +0100A0A00D1AA000,"SKYHILL",status-playable,playable,2021-03-05 15:19:11.000 +,"Skylanders Imaginators",crash;services;status-boots,boots,2020-05-30 18:49:18.000 +010021A00ABEE000,"SKYPEACE",status-playable,playable,2020-05-29 14:14:30.000 +0100EA400BF44000,"SkyScrappers",status-playable,playable,2020-05-28 22:11:25.000 +0100F3C00C400000,"SkyTime",slow;status-ingame,ingame,2020-05-30 09:24:51.000 +01003AD00DEAE000,"SlabWell: The Quest For Kaktun's Alpaca",status-playable,playable,2021-02-22 17:02:51.000 +,"Slain",status-playable,playable,2020-05-29 14:26:16.000 +0100BB100AF4C000,"Slain Back from Hell",status-playable,playable,2022-08-12 23:36:19.000 +010026300BA4A000,"Slay the Spire",status-playable,playable,2023-01-20 15:09:26.000 +0100501006494000,"Slayaway Camp: Butcher's Cut",status-playable;opengl-backend-bug,playable,2022-08-12 23:44:05.000 +01004E900EDDA000,"Slayin 2",gpu;status-ingame,ingame,2024-04-19 16:15:26.000 +01004AC0081DC000,"Sleep Tight",gpu;status-ingame;UE4,ingame,2022-08-13 00:17:32.000 +0100F4500AA4E000,"Slice, Dice & Rice",online;status-playable,playable,2021-02-22 17:44:23.000 +010010D011E1C000,"Slide Stars",status-menus;crash,menus,2021-11-25 08:53:43.000 +0100112003B8A000,"Slime-san",status-playable,playable,2020-05-30 16:15:12.000 +01002AA00C974000,"SMASHING THE BATTLE",status-playable,playable,2021-06-11 15:53:57.000 +0100C9100B06A000,"SmileBASIC 4",gpu;status-menus,menus,2021-07-29 17:35:59.000 +0100207007EB2000,"Smoke And Sacrifice",status-playable,playable,2022-08-14 12:38:27.000 +01009790186FE000,"SMURFS KART",status-playable,playable,2023-10-18 00:55:00.000 +0100F2800D46E000,"Snack World The Dungeon Crawl Gold",gpu;slow;status-ingame;nvdec;audout,ingame,2022-05-01 21:12:44.000 +0100C0F0020E8000,"Snake Pass",status-playable;nvdec;UE4,playable,2022-01-03 04:31:52.000 +010075A00BA14000,"Sniper Elite 3 Ultimate Edition",status-playable;ldn-untested,playable,2024-04-18 07:47:49.000 +010007B010FCC000,"Sniper Elite 4",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15.000 +0100BB000A3AA000,"Sniper Elite V2 Remastered",slow;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13.000 +01008E20047DC000,"Snipperclips Plus: Cut It Out, Together!",status-playable,playable,2023-02-14 20:20:13.000 +0100704000B3A000,"Snipperclips™ – Cut it out, together!",status-playable,playable,2022-12-05 12:44:55.000 +01004AB00AEF8000,"SNK 40th ANNIVERSARY COLLECTION",status-playable,playable,2022-08-14 13:33:15.000 +010027F00AD6C000,"SNK HEROINES Tag Team Frenzy",status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25.000 +01008DA00CBBA000,"Snooker 19",status-playable;nvdec;online-broken;UE4,playable,2022-09-11 17:43:22.000 +010045300516E000,"Snow Moto Racing Freedom",gpu;status-ingame;vulkan-backend-bug,ingame,2022-08-15 16:05:14.000 +0100BE200C34A000,"Snowboarding The Next Phase",nvdec;status-playable,playable,2021-02-23 12:56:58.000 +0100FBD013AB6000,"SnowRunner",services;status-boots;crash,boots,2023-10-07 00:01:16.000 +010017B012AFC000,"Soccer Club Life: Playing Manager",gpu;status-ingame,ingame,2022-10-25 11:59:22.000 +0100B5000E05C000,"Soccer Pinball",UE4;gpu;status-ingame,ingame,2021-06-15 20:56:51.000 +010011A00A9A8000,"Soccer Slammers",status-playable,playable,2020-05-30 07:48:14.000 +010095C00F9DE000,"Soccer, Tactics & Glory",gpu;status-ingame,ingame,2022-09-26 17:15:58.000 +0100590009C38000,"SOL DIVIDE -SWORD OF DARKNESS- for Nintendo Switch",32-bit;status-playable,playable,2021-06-09 14:13:03.000 +0100A290048B0000,"Soldam: Drop, Connect, Erase",status-playable,playable,2020-05-30 09:18:54.000 +010008600D1AC000,"Solo: Islands of the Heart",gpu;status-ingame;nvdec,ingame,2022-09-11 17:54:43.000 +01009EE00E91E000,"Some Distant Memory",status-playable,playable,2022-09-15 21:48:19.000 +01004F401BEBE000,"Song of Nunu: A League of Legends Story",status-ingame,ingame,2024-07-12 18:53:44.000 +0100E5400BF94000,"Songbird Symphony",status-playable,playable,2021-02-27 02:44:04.000 +010031D00A604000,"Songbringer",status-playable,playable,2020-06-22 10:42:02.000 +0000000000000000,"Sonic 1 (2013)",status-ingame;crash;homebrew,ingame,2024-04-06 18:31:20.000 +0000000000000000,"Sonic 2 (2013)",status-ingame;crash;homebrew,ingame,2024-04-01 16:25:30.000 +0000000000000000,"Sonic A.I.R",status-ingame;homebrew,ingame,2024-04-01 16:25:32.000 +0000000000000000,"Sonic CD",status-ingame;crash;homebrew,ingame,2024-04-01 16:25:31.000 +010040E0116B8000,"Sonic Colors: Ultimate",status-playable,playable,2022-11-12 21:24:26.000 +01001270012B6000,"SONIC FORCES™",status-playable,playable,2024-07-28 13:11:21.000 +01004AD014BF0000,"Sonic Frontiers",gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53.000 +01009AA000FAA000,"Sonic Mania",status-playable,playable,2020-06-08 17:30:57.000 +01009FB016286000,"Sonic Origins",status-ingame;crash,ingame,2024-06-02 07:20:15.000 +01008F701C074000,"SONIC SUPERSTARS",gpu;status-ingame;nvdec,ingame,2023-10-28 17:48:07.000 +010088801C150000,"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",status-playable,playable,2024-08-20 13:26:56.000 +01005EA01C0FC000,"SONIC X SHADOW GENERATIONS",status-ingame;crash,ingame,2025-01-07 04:20:45.000 +010064F00C212000,"Soul Axiom Rebooted",nvdec;slow;status-ingame,ingame,2020-09-04 12:41:01.000 +0100F2100F0B2000,"Soul Searching",status-playable,playable,2020-07-09 18:39:07.000 +01008F2005154000,"South Park™: The Fractured but Whole™ - Standard Edition",slow;status-playable;online-broken,playable,2024-07-08 17:47:28.000 +0100B9F00C162000,"Space Blaze",status-playable,playable,2020-08-30 16:18:05.000 +010005500E81E000,"Space Cows",UE4;crash;status-menus,menus,2020-06-15 11:33:20.000 +0100707011722000,"Space Elite Force",status-playable,playable,2020-11-27 15:21:05.000 +010047B010260000,"Space Pioneer",status-playable,playable,2022-10-20 12:24:37.000 +010010A009830000,"Space Ribbon",status-playable,playable,2022-08-15 17:17:10.000 +0000000000000000,"SpaceCadetPinball",status-ingame;homebrew,ingame,2024-04-18 19:30:04.000 +0100D9B0041CE000,"Spacecats with Lasers",status-playable,playable,2022-08-15 17:22:44.000 +010034800FB60000,"Spaceland",status-playable,playable,2020-11-01 14:31:56.000 +010028D0045CE000,"Sparkle 2",status-playable,playable,2020-10-19 11:51:39.000 +01000DC007E90000,"Sparkle Unleashed",status-playable,playable,2021-06-03 14:52:15.000 +0100E4F00AE14000,"Sparkle ZERO",gpu;slow;status-ingame,ingame,2020-03-23 18:19:18.000 +01007ED00C032000,"Sparklite",status-playable,playable,2022-08-06 11:35:41.000 +0100E6A009A26000,"Spartan",UE4;nvdec;status-playable,playable,2021-03-05 15:53:19.000 +010020500E7A6000,"Speaking Simulator",status-playable,playable,2020-10-08 13:00:39.000 +01008B000A5AE000,"Spectrum",status-playable,playable,2022-08-16 11:15:59.000 +0100F18010BA0000,"Speed 3: Grand Prix",status-playable;UE4,playable,2022-10-20 12:32:31.000 +010040F00AA9A000,"Speed Brawl",slow;status-playable,playable,2020-09-18 22:08:16.000 +01000540139F6000,"Speed Limit",gpu;status-ingame,ingame,2022-09-02 18:37:40.000 +010061F013A0E000,"Speed Truck Racing",status-playable,playable,2022-10-20 12:57:04.000 +0100E74007EAC000,"Spellspire",status-playable,playable,2022-08-16 11:21:21.000 +010021F004270000,"Spelunker Party!",services;status-boots,boots,2022-08-16 11:25:49.000 +0100710013ABA000,"Spelunky",status-playable,playable,2021-11-20 17:45:03.000 +0100BD500BA94000,"Sphinx and the Cursed Mummy",gpu;status-ingame;32-bit;opengl,ingame,2024-05-20 06:00:51.000 +010092A0102AE000,"Spider Solitaire",status-playable,playable,2020-12-16 16:19:30.000 +010076D0122A8000,"Spinch",status-playable,playable,2024-07-12 19:02:10.000 +01001E40136FE000,"Spinny's Journey",status-ingame;crash,ingame,2021-11-30 03:39:44.000 +010023E008702000,"Spiral Splatter",status-playable,playable,2020-06-04 14:03:57.000 +0100D1B00B6FA000,"Spirit Hunter: Death Mark",status-playable,playable,2020-12-13 10:56:25.000 +0100FAE00E19A000,"Spirit Hunter: NG",32-bit;status-playable,playable,2020-12-17 20:38:47.000 +01005E101122E000,"Spirit of the North",status-playable;UE4,playable,2022-09-30 11:40:47.000 +01000AC00F5EC000,"Spirit Roots",nvdec;status-playable,playable,2020-07-10 13:33:32.000 +0100BD400DC52000,"Spiritfarer",gpu;status-ingame,ingame,2022-10-06 16:31:38.000 +01009D60080B4000,"SpiritSphere DX",status-playable,playable,2021-07-03 23:37:49.000 +010042700E3FC000,"Spitlings",status-playable;online-broken,playable,2022-10-06 16:42:39.000 +01003BC0000A0000,"Splatoon™ 2",status-playable;ldn-works;LAN,playable,2024-07-12 19:11:15.000 +0100C2500FC20000,"Splatoon™ 3",status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11.000 +0100BA0018500000,"Splatoon™ 3: Splatfest World Premiere",gpu;status-ingame;online-broken;demo,ingame,2022-09-19 03:17:12.000 +010062800D39C000,"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34.000 +01009FB0172F4000,"SpongeBob SquarePants: The Cosmic Shake",gpu;status-ingame;UE4,ingame,2023-08-01 19:29:53.000 +010097C01336A000,"Spooky Chase",status-playable,playable,2022-11-04 12:17:44.000 +0100C6100D75E000,"Spooky Ghosts Dot Com",status-playable,playable,2021-06-15 15:16:11.000 +0100DE9005170000,"Sports Party",nvdec;status-playable,playable,2021-03-05 13:40:42.000 +0100E04009BD4000,"Spot The Difference",status-playable,playable,2022-08-16 11:49:52.000 +010052100D1B4000,"Spot The Differences: Party!",status-playable,playable,2022-08-16 11:55:26.000 +01000E6015350000,"Spy Alarm",services;status-ingame,ingame,2022-12-09 10:12:51.000 +01005D701264A000,"SpyHack",status-playable,playable,2021-04-15 10:53:51.000 +010077B00E046000,"Spyro™ Reignited Trilogy",status-playable;nvdec;UE4,playable,2022-09-11 18:38:33.000 +0100085012A0E000,"Squeakers",status-playable,playable,2020-12-13 12:13:05.000 +010009300D31C000,"Squidgies Takeover",status-playable,playable,2020-07-20 22:28:08.000 +0100FCD0102EC000,"Squidlit",status-playable,playable,2020-08-06 12:38:32.000 +0100EBF00E702000,"STAR OCEAN First Departure R",nvdec;status-playable,playable,2021-07-05 19:29:16.000 +010065301A2E0000,"STAR OCEAN THE SECOND STORY R",status-ingame;crash,ingame,2024-06-01 02:39:59.000 +010060D00F658000,"Star Renegades",nvdec;status-playable,playable,2020-12-11 12:19:23.000 +0100D7000AE6A000,"Star Story: The Horizon Escape",status-playable,playable,2020-08-11 22:31:38.000 +01009DF015776000,"Star Trek Prodigy: Supernova",status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50.000 +0100BD100FFBE000,"STAR WARS™ Episode I Racer",slow;status-playable;nvdec,playable,2022-10-03 16:08:36.000 +0100BB500EACA000,"STAR WARS™ Jedi Knight II: Jedi Outcast™",gpu;status-ingame,ingame,2022-09-15 22:51:00.000 +01008CA00FAE8000,"STAR WARS™ Jedi Knight: Jedi Academy",gpu;status-boots,boots,2021-06-16 12:35:30.000 +01006DA00DEAC000,"Star Wars™ Pinball",status-playable;online-broken,playable,2022-09-11 18:53:31.000 +0100FA10115F8000,"STAR WARS™ Republic Commando™",gpu;status-ingame;32-bit,ingame,2023-10-31 15:57:17.000 +010040701B948000,"STAR WARS™: Battlefront Classic Collection",gpu;status-ingame;vulkan,ingame,2024-07-12 19:24:21.000 +0100854015868000,"STAR WARS™: Knights of the Old Republic™",gpu;deadlock;status-boots,boots,2024-02-12 10:13:51.000 +0100153014544000,"STAR WARS™: The Force Unleashed™",status-playable,playable,2024-05-01 17:41:28.000 +01005EB00EA10000,"Star-Crossed Myth - The Department of Wishes -",gpu;status-ingame,ingame,2021-06-04 19:34:36.000 +0100E6B0115FC000,"Star99",status-menus;online,menus,2021-11-26 14:18:51.000 +01002100137BA000,"Stardash",status-playable,playable,2021-01-21 16:31:19.000 +0100E65002BB8000,"Stardew Valley",status-playable;online-broken;ldn-untested,playable,2024-02-14 03:11:19.000 +01002CC003FE6000,"Starlink: Battle for Atlas™ Digital Edition",services-horizon;status-nothing;crash;Needs Update,nothing,2024-05-05 17:25:11.000 +010098E010FDA000,"Starlit Adventures Golden Stars",status-playable,playable,2020-11-21 12:14:43.000 +01001BB00AC26000,"STARSHIP AVENGER Operation: Take Back Earth",status-playable,playable,2021-01-12 15:52:55.000 +010000700A572000,"State of Anarchy: Master of Mayhem",nvdec;status-playable,playable,2021-01-12 19:00:05.000 +0100844004CB6000,"State of Mind",UE4;crash;status-boots,boots,2020-06-22 22:17:50.000 +0100616009082000,"STAY",crash;services;status-boots,boots,2021-04-23 14:24:52.000 +0100B61009C60000,"STAY COOL, KOBAYASHI-SAN!: A RIVER CITY RANSOM STORY",status-playable,playable,2021-01-26 17:37:28.000 +01008010118CC000,"Steam Prison",nvdec;status-playable,playable,2021-04-01 15:34:11.000 +0100AE100DAFA000,"Steam Tactics",status-playable,playable,2022-10-06 16:53:45.000 +01004DD00C87A000,"Steamburg",status-playable,playable,2021-01-13 08:42:01.000 +01009320084A4000,"SteamWorld Dig",status-playable,playable,2024-08-19 12:12:23.000 +0100CA9002322000,"SteamWorld Dig 2",status-playable,playable,2022-12-21 19:25:42.000 +0100F6D00D83E000,"SteamWorld Quest: Hand of Gilgamech",nvdec;status-playable,playable,2020-11-09 13:10:04.000 +01001C6014772000,"Steel Assault",status-playable,playable,2022-12-06 14:48:30.000 +010042800B880000,"STEINS;GATE ELITE",status-playable,playable,2020-08-04 07:33:32.000 +0100CB400E9BC000,"STEINS;GATE: My Darling's Embrace",status-playable;nvdec,playable,2022-11-20 16:48:34.000 +01002DE01043E000,"Stela",UE4;status-playable,playable,2021-06-15 13:28:34.000 +01005A700C954000,"Stellar Interface",status-playable,playable,2022-10-20 13:44:33.000 +0100BC800EDA2000,"STELLATUM",gpu;status-playable,playable,2021-03-07 16:30:23.000 +0100775004794000,"Steredenn: Binary Stars",status-playable,playable,2021-01-13 09:19:42.000 +0100AE0006474000,"Stern Pinball Arcade",status-playable,playable,2022-08-16 14:24:41.000 +0100E24006FA8000,"Stikbold! A Dodgeball Adventure DELUXE",status-playable,playable,2021-01-11 20:12:54.000 +010077B014518000,"Stitchy in Tooki Trouble",status-playable,playable,2021-05-06 16:25:53.000 +010070D00F640000,"STONE",status-playable;UE4,playable,2022-09-30 11:53:32.000 +010074400F6A8000,"Stories Untold",status-playable;nvdec,playable,2022-12-22 01:08:46.000 +010040D00BCF4000,"Storm Boy",status-playable,playable,2022-10-20 14:15:06.000 +0100B2300B932000,"Storm In A Teacup",gpu;status-ingame,ingame,2021-11-06 02:03:19.000 +0100D5D00DAF2000,"Story of a Gladiator",status-playable,playable,2020-07-29 15:08:18.000 +010017301007E000,"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",status-playable,playable,2021-03-18 11:42:19.000 +0100ED400EEC2000,"STORY OF SEASONS: Friends of Mineral Town",status-playable,playable,2022-10-03 16:40:31.000 +010078D00E8F4000,"Stranded Sails - Explorers of the Cursed Islands",slow;status-playable;nvdec;UE4,playable,2022-09-16 11:58:38.000 +01000A6013F86000,"Strange Field Football",status-playable,playable,2022-11-04 12:25:57.000 +0100DD600DD48000,"Stranger Things 3: The Game",status-playable,playable,2021-01-11 17:44:09.000 +0100D7E011C64000,"Strawberry Vinegar",status-playable;nvdec,playable,2022-12-05 16:25:40.000 +010075101EF84000,"Stray",status-ingame;crash,ingame,2025-01-07 04:03:00.000 +0100024008310000,"Street Fighter 30th Anniversary Collection",status-playable;online-broken;ldn-partial,playable,2022-08-20 16:50:47.000 +010012400D202000,"Street Outlaws: The List",nvdec;status-playable,playable,2021-06-11 12:15:32.000 +0100888011CB2000,"Street Power Soccer",UE4;crash;status-boots,boots,2020-11-21 12:28:57.000 +0100EC9010258000,"Streets of Rage 4",nvdec;online;status-playable,playable,2020-07-07 21:21:22.000 +0100BDE012928000,"Strife: Veteran Edition",gpu;status-ingame,ingame,2022-01-15 05:10:42.000 +010039100DACC000,"Strike Force - War on Terror",status-menus;crash;Needs Update,menus,2021-11-24 08:08:20.000 +010038A00E6C6000,"Strike Force Kitty",nvdec;status-playable,playable,2020-07-29 16:22:15.000 +010072500D52E000,"Strike Suit Zero: Director's Cut",crash;status-boots,boots,2021-04-23 17:15:14.000 +0100FF5005B76000,"STRIKERS1945 for Nintendo Switch",32-bit;status-playable,playable,2021-06-03 19:35:04.000 +0100720008ED2000,"STRIKERS1945 Ⅱ for Nintendo Switch",32-bit;status-playable,playable,2021-06-03 19:43:00.000 +0100681011B56000,"Struggling",status-playable,playable,2020-10-15 20:37:03.000 +0100AF000B4AE000,"Stunt Kite Party",nvdec;status-playable,playable,2021-01-25 17:16:56.000 +0100C5500E7AE000,"STURMWIND EX",audio;32-bit;status-playable,playable,2022-09-16 12:01:39.000 +,"Subarashiki Kono Sekai -Final Remix-",services;slow;status-ingame,ingame,2020-02-10 16:21:51.000 +010001400E474000,"Subdivision Infinity DX",UE4;crash;status-boots,boots,2021-03-03 14:26:46.000 +0100E6400BCE8000,"Sublevel Zero Redux",status-playable,playable,2022-09-16 12:30:03.000 +0100EDA00D866000,"Submerged",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01.000 +0100429011144000,"Subnautica",status-playable;vulkan-backend-bug,playable,2022-11-04 13:07:29.000 +010014C011146000,"Subnautica: Below Zero",status-playable,playable,2022-12-23 14:15:13.000 +0100BF9012AC6000,"Suguru Nature",crash;status-ingame,ingame,2021-07-29 11:36:27.000 +01005CD00A2A2000,"Suicide Guy",status-playable,playable,2021-01-26 13:13:54.000 +0100DE000C2E4000,"Suicide Guy: Sleepin' Deeply",status-ingame;Needs More Attention,ingame,2022-09-20 23:45:25.000 +01003D50126A4000,"Sumire",status-playable,playable,2022-11-12 13:40:43.000 +0100A130109B2000,"Summer in Mara",nvdec;status-playable,playable,2021-03-06 14:10:38.000 +01004E500DB9E000,"Summer Sweetheart",status-playable;nvdec,playable,2022-09-16 12:51:46.000 +0100BFE014476000,"Sunblaze",status-playable,playable,2022-11-12 13:59:23.000 +01002D3007962000,"Sundered: Eldritch Edition",gpu;status-ingame,ingame,2021-06-07 11:46:00.000 +0100F7000464A000,"Super Beat Sports™",status-playable;ldn-untested,playable,2022-08-16 16:05:50.000 +010051A00D716000,"Super Blood Hockey",status-playable,playable,2020-12-11 20:01:41.000 +01007AD00013E000,"Super Bomberman R",status-playable;nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14.000 +0100B87017D94000,"SUPER BOMBERMAN R 2",deadlock;status-boots,boots,2023-09-29 13:19:51.000 +0100D9B00DB5E000,"Super Cane Magic ZERO",status-playable,playable,2022-09-12 15:33:46.000 +010065F004E5E000,"Super Chariot",status-playable,playable,2021-06-03 13:19:01.000 +0100E5E00C464000,"SUPER DRAGON BALL HEROES WORLD MISSION",status-playable;nvdec;online-broken,playable,2022-08-17 12:56:30.000 +010023100B19A000,"Super Dungeon Tactics",status-playable,playable,2022-10-06 17:40:40.000 +010056800B534000,"Super Inefficient Golf",status-playable;UE4,playable,2022-08-17 15:53:45.000 +010015700D5DC000,"Super Jumpy Ball",status-playable,playable,2020-07-04 18:40:36.000 +0100196009998000,"Super Kickers League Ultimate",status-playable,playable,2021-01-26 13:36:48.000 +01003FB00C5A8000,"Super Kirby Clash™",status-playable;ldn-works,playable,2024-07-30 18:21:55.000 +010000D00F81A000,"Super Korotama",status-playable,playable,2021-06-06 19:06:22.000 +01003E300FCAE000,"Super Loop Drive",status-playable;nvdec;UE4,playable,2022-09-22 10:58:05.000 +054507E0B7552000,"Super Mario 64",status-ingame;homebrew,ingame,2024-03-20 16:57:27.000 +0100277011F1A000,"Super Mario Bros.™ 35",status-menus;online-broken,menus,2022-08-07 16:27:25.000 +010015100B514000,"Super Mario Bros.™ Wonder",status-playable;amd-vendor-bug,playable,2024-09-06 13:21:21.000 +01009B90006DC000,"Super Mario Maker™ 2",status-playable;online-broken;ldn-broken,playable,2024-08-25 11:05:19.000 +0100000000010000,"Super Mario Odyssey™",status-playable;nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34.000 +010036B0034E4000,"Super Mario Party™",gpu;status-ingame;Needs Update;ldn-works,ingame,2024-06-21 05:10:16.000 +0100BC0018138000,"Super Mario RPG™",gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42.000 +0000000000000000,"Super Mario World",status-boots;homebrew,boots,2024-06-13 01:40:31.000 +010049900F546000,"Super Mario™ 3D All-Stars",services-horizon;slow;status-ingame;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16.000 +010028600EBDA000,"Super Mario™ 3D World + Bowser’s Fury",status-playable;ldn-works,playable,2024-07-31 10:45:37.000 +01004F8006A78000,"Super Meat Boy",services;status-playable,playable,2020-04-02 23:10:07.000 +01009C200D60E000,"Super Meat Boy Forever",gpu;status-boots,boots,2021-04-26 14:25:39.000 +0100BDD00EC5C000,"Super Mega Space Blaster Special Turbo",online;status-playable,playable,2020-08-06 12:13:25.000 +010031F019294000,"Super Monkey Ball Banana Rumble",status-playable,playable,2024-06-28 10:39:18.000 +0100B2A00E1E0000,"Super Monkey Ball: Banana Blitz HD",status-playable;online-broken,playable,2022-09-16 13:16:25.000 +01006D000D2A0000,"Super Mutant Alien Assault",status-playable,playable,2020-06-07 23:32:45.000 +01004D600AC14000,"Super Neptunia RPG",status-playable;nvdec,playable,2022-08-17 16:38:52.000 +01008D300C50C000,"Super Nintendo Entertainment System™ - Nintendo Switch Online",status-playable,playable,2021-01-05 00:29:48.000 +0100284007D6C000,"Super One More Jump",status-playable,playable,2022-08-17 16:47:47.000 +01001F90122B2000,"Super Punch Patrol",status-playable,playable,2024-07-12 19:49:02.000 +0100331005E8E000,"Super Putty Squad",gpu;status-ingame;32-bit,ingame,2024-04-29 15:51:54.000 +,"SUPER ROBOT WARS T",online;status-playable,playable,2021-03-25 11:00:40.000 +,"SUPER ROBOT WARS V",online;status-playable,playable,2020-06-23 12:56:37.000 +,"SUPER ROBOT WARS X",online;status-playable,playable,2020-08-05 19:18:51.000 +01004CF00A60E000,"Super Saurio Fly",nvdec;status-playable,playable,2020-08-06 13:12:14.000 +010039700D200000,"Super Skelemania",status-playable,playable,2020-06-07 22:59:50.000 +01006A800016E000,"Super Smash Bros.™ Ultimate",gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21.000 +0100D61012270000,"Super Soccer Blast",gpu;status-ingame,ingame,2022-02-16 08:39:12.000 +0100A9300A4AE000,"Super Sportmatchen",status-playable,playable,2022-08-19 12:34:40.000 +0100FB400F54E000,"Super Street: Racer",status-playable;UE4,playable,2022-09-16 13:43:14.000 +010000500DB50000,"Super Tennis Blast",status-playable,playable,2022-08-19 16:20:48.000 +0100C6800D770000,"Super Toy Cars 2",gpu;regression;status-ingame,ingame,2021-03-02 20:15:15.000 +010035B00B3F0000,"Super Volley Blast",status-playable,playable,2022-08-19 18:14:40.000 +0100FF60051E2000,"Superbeat: Xonic EX",status-ingame;crash;nvdec,ingame,2022-08-19 18:54:40.000 +0100630010252000,"SuperEpic: The Entertainment War",status-playable,playable,2022-10-13 23:02:48.000 +01001A500E8B4000,"SUPERHOT",status-playable,playable,2021-05-05 19:51:30.000 +010075701153A000,"Superliminal",status-playable,playable,2020-09-03 13:20:50.000 +0100C01012654000,"Supermarket Shriek",status-playable,playable,2022-10-13 23:19:20.000 +0100A6E01201C000,"Supraland",status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11.000 +010029A00AEB0000,"Survive! MR.CUBE",status-playable,playable,2022-10-20 14:44:47.000 +01005AB01119C000,"SUSHI REVERSI",status-playable,playable,2021-06-11 19:26:58.000 +0100DDD0085A4000,"Sushi Striker™: The Way of Sushido",nvdec;status-playable,playable,2020-06-26 20:49:11.000 +0100D6D00EC2C000,"Sweet Witches",status-playable;nvdec,playable,2022-10-20 14:56:37.000 +010049D00C8B0000,"Swimsanity!",status-menus;online,menus,2021-11-26 14:27:16.000 +01005DF00DC26000,"SWORD ART ONLINE: FATAL BULLET Complete Edition",UE4;gpu;online;status-ingame,ingame,2021-06-09 16:58:50.000 +01001B600D1D6000,"SWORD ART ONLINE: Hollow Realization Deluxe Edition",status-playable;nvdec,playable,2022-08-19 19:19:15.000 +01000D70049BE000,"Sword of the Guardian",status-playable,playable,2020-07-16 12:24:39.000 +0100E4701355C000,"Sword of the Necromancer",status-ingame;crash,ingame,2022-12-10 01:28:39.000 +01004BB00421E000,"Syberia 1 & 2",status-playable,playable,2021-12-24 12:06:25.000 +010028C003FD6000,"Syberia 2",gpu;status-ingame,ingame,2022-08-24 12:43:03.000 +0100CBE004E6C000,"Syberia 3",nvdec;status-playable,playable,2021-01-25 16:15:12.000 +010007300C482000,"Sydney Hunter and the Curse of the Mayan",status-playable,playable,2020-06-15 12:15:57.000 +0100D8400DAF0000,"SYNAPTIC DRIVE",online;status-playable,playable,2020-09-07 13:44:05.000 +01009E700F448000,"Synergia",status-playable,playable,2021-04-06 17:58:04.000 +01009BF00E7D2000,"SYNTHETIK: Ultimate",gpu;status-ingame;crash,ingame,2022-08-30 03:19:25.000 +010015B00BB00000,"Table Top Racing: World Tour - Nitro Edition",status-playable,playable,2020-04-05 23:21:30.000 +01000F20083A8000,"Tactical Mind",status-playable,playable,2021-01-25 18:05:00.000 +0100BD700F5F0000,"Tactical Mind 2",status-playable,playable,2020-07-01 23:11:07.000 +0100E12013C1A000,"Tactics Ogre: Reborn",status-playable;vulkan-backend-bug,playable,2024-04-09 06:21:35.000 +01007C7006AEE000,"Tactics V: Obsidian Brigade""""",status-playable,playable,2021-02-28 15:09:42.000 +01002C000B552000,"Taiko no Tatsujin: Drum 'n' Fun!",status-playable;online-broken;ldn-broken,playable,2023-05-20 15:10:12.000 +0100BCA0135A0000,"Taiko no Tatsujin: Rhythm Festival",status-playable,playable,2023-11-13 13:16:34.000 +0100DD6012644000,"Taiko no Tatsujin: Rhythmic Adventure Pack",status-playable,playable,2020-12-03 07:28:26.000 +0100346017304000,"Taiko Risshiden V DX",status-nothing;crash,nothing,2022-06-06 16:25:31.000 +010040A00EA26000,"Taimumari: Complete Edition",status-playable,playable,2022-12-06 13:34:49.000 +0100F0C011A68000,"Tales from the Borderlands",status-playable;nvdec,playable,2022-10-25 18:44:14.000 +0100408007078000,"Tales of the Tiny Planet",status-playable,playable,2021-01-25 15:47:41.000 +01002C0008E52000,"Tales of Vesperia™: Definitive Edition",status-playable,playable,2024-09-28 03:20:47.000 +010012800EE3E000,"Tamashii",status-playable,playable,2021-06-10 15:26:20.000 +010008A0128C4000,"Tamiku",gpu;status-ingame,ingame,2021-06-15 20:06:55.000 +010048F007ADE000,"Tangledeep",crash;status-boots,boots,2021-01-05 04:08:41.000 +01007DB010D2C000,"TaniNani",crash;kernel;status-nothing,nothing,2021-04-08 03:06:44.000 +0100E06012BB4000,"Tank Mechanic Simulator",status-playable,playable,2020-12-11 15:10:45.000 +01007A601318C000,"Tanuki Justice",status-playable;opengl,playable,2023-02-21 18:28:10.000 +01004DF007564000,"Tanzia",status-playable,playable,2021-06-07 11:10:25.000 +01002D4011208000,"Task Force Kampas",status-playable,playable,2020-11-30 14:44:15.000 +0100B76011DAA000,"Taxi Chaos",slow;status-playable;online-broken;UE4,playable,2022-10-25 19:13:00.000 +0100F43011E5A000,"Tcheco in the Castle of Lucio",status-playable,playable,2020-06-27 13:35:43.000 +010092B0091D0000,"Team Sonic Racing",status-playable;online-broken;ldn-works,playable,2024-02-05 15:05:27.000 +0100FE701475A000,"Teenage Mutant Ninja Turtles: Shredder's Revenge",deadlock;status-boots;crash,boots,2024-09-28 09:31:39.000 +01005CF01E784000,"Teenage Mutant Ninja Turtles: Splintered Fate",status-playable,playable,2024-08-03 13:50:42.000 +0100FDB0154E4000,"Teenage Mutant Ninja Turtles: The Cowabunga Collection",status-playable,playable,2024-01-22 19:39:04.000 +010021100DF22000,"Telling Lies",status-playable,playable,2020-10-23 21:14:51.000 +0100C8B012DEA000,"Temtem",status-menus;online-broken,menus,2022-12-17 17:36:11.000 +0100B2600A398000,"TENGAI for Nintendo Switch",32-bit;status-playable,playable,2020-11-25 19:52:26.000 +0100D7A005DFC000,"Tennis",status-playable,playable,2020-06-01 20:50:36.000 +01002970080AA000,"Tennis in the Face",status-playable,playable,2022-08-22 14:10:54.000 +0100092006814000,"Tennis World Tour",status-playable;online-broken,playable,2022-08-22 14:27:10.000 +0100950012F66000,"Tennis World Tour 2",status-playable;online-broken,playable,2022-10-14 10:43:16.000 +0100E46006708000,"Terraria",status-playable;online-broken,playable,2022-09-12 16:14:57.000 +010070C00FB56000,"TERROR SQUID",status-playable;online-broken,playable,2023-10-30 22:29:29.000 +010043700EB68000,"TERRORHYTHM (TRRT)",status-playable,playable,2021-02-27 13:18:14.000 +0100FBC007EAE000,"Tesla vs Lovecraft",status-playable,playable,2023-11-21 06:19:36.000 +01005C8005F34000,"Teslagrad",status-playable,playable,2021-02-23 14:41:02.000 +01006F701507A000,"Tested on Humans: Escape Room",status-playable,playable,2022-11-12 14:42:52.000 +0100671016432000,"TETRA for Nintendo Switch™ International Edition",status-playable,playable,2020-06-26 20:49:55.000 +01004E500A15C000,"TETRA's Escape",status-playable,playable,2020-06-03 18:21:14.000 +010040600C5CE000,"Tetris 99 Retail Bundle",gpu;status-ingame;online-broken;ldn-untested,ingame,2024-05-02 16:36:41.000 +0100EC000D39A000,"Tetsumo Party",status-playable,playable,2020-06-09 22:39:55.000 +01008ED0087A4000,"The Adventure Pals",status-playable,playable,2022-08-22 14:48:52.000 +0100137010152000,"The Adventures of 00 Dilly®",status-playable,playable,2020-12-30 19:32:29.000 +01003B400A00A000,"The Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",status-playable;nvdec,playable,2022-09-17 11:07:56.000 +010035C00A4BC000,"The Adventures of Elena Temple",status-playable,playable,2020-06-03 23:15:35.000 +010045A00E038000,"The Alliance Alive HD Remastered",nvdec;status-playable,playable,2021-03-07 15:43:45.000 +010079A0112BE000,"The Almost Gone",status-playable,playable,2020-07-05 12:33:07.000 +0100CD500DDAE000,"The Bard's Tale ARPG: Remastered and Resnarkled",gpu;status-ingame;nvdec;online-working,ingame,2024-07-18 12:52:01.000 +01001E50141BC000,"The Battle Cats Unite!",deadlock;status-ingame,ingame,2021-12-14 21:38:34.000 +010089600E66A000,"The Big Journey",status-playable,playable,2022-09-16 14:03:08.000 +010021C000B6A000,"The Binding of Isaac: Afterbirth+",status-playable,playable,2021-04-26 14:11:56.000 +0100A5A00B2AA000,"The Bluecoats North & South",nvdec;status-playable,playable,2020-12-10 21:22:29.000 +010062500BFC0000,"The Book of Unwritten Tales 2",status-playable,playable,2021-06-09 14:42:53.000 +01002A2004530000,"The Bridge",status-playable,playable,2020-06-03 13:53:26.000 +01008D700AB14000,"The Bug Butcher",status-playable,playable,2020-06-03 12:02:04.000 +01001B40086E2000,"The Bunker",status-playable;nvdec,playable,2022-09-16 14:24:05.000 +010069100B7F0000,"The Caligula Effect: Overdose",UE4;gpu;status-ingame,ingame,2021-01-04 11:07:50.000 +010066800E9F8000,"The Childs Sight",status-playable,playable,2021-06-11 19:04:56.000 +0100B7C01169C000,"The Coma 2: Vicious Sisters",gpu;status-ingame,ingame,2020-06-20 12:51:51.000 +010033100691A000,"The Coma: Recut",status-playable,playable,2020-06-03 15:11:23.000 +01004170113D4000,"The Complex",status-playable;nvdec,playable,2022-09-28 14:35:41.000 +01000F20102AC000,"The Copper Canyon Dixie Dash",status-playable;UE4,playable,2022-09-29 11:42:29.000 +01000850037C0000,"The Count Lucanor",status-playable;nvdec,playable,2022-08-22 15:26:37.000 +0100EBA01548E000,"The Cruel King and the Great Hero",gpu;services;status-ingame,ingame,2022-12-02 07:02:08.000 +010051800E922000,"The Dark Crystal: Age of Resistance Tactics",status-playable,playable,2020-08-11 13:43:41.000 +01003DE00918E000,"The Darkside Detective",status-playable,playable,2020-06-03 22:16:18.000 +01000A10041EA000,"The Elder Scrolls V: Skyrim",gpu;status-ingame;crash,ingame,2024-07-14 03:21:31.000 +01004A9006B84000,"The End Is Nigh",status-playable,playable,2020-06-01 11:26:45.000 +0100CA100489C000,"The Escapists 2",nvdec;status-playable,playable,2020-09-24 12:31:31.000 +01001B700BA7C000,"The Escapists: Complete Edition",status-playable,playable,2021-02-24 17:50:31.000 +0100C2E0129A6000,"The Executioner",nvdec;status-playable,playable,2021-01-23 00:31:28.000 +01006050114D4000,"The Experiment: Escape Room",gpu;status-ingame,ingame,2022-09-30 13:20:35.000 +0100B5900DFB2000,"The Eyes of Ara",status-playable,playable,2022-09-16 14:44:06.000 +01002DD00AF9E000,"The Fall",gpu;status-ingame,ingame,2020-05-31 23:31:16.000 +01003E5002320000,"The Fall Part 2: Unbound",status-playable,playable,2021-11-06 02:18:08.000 +0100CDC00789E000,"The Final Station",status-playable;nvdec,playable,2022-08-22 15:54:39.000 +010098800A1E4000,"The First Tree",status-playable,playable,2021-02-24 15:51:05.000 +0100C38004DCC000,"The Flame In The Flood: Complete Edition",gpu;status-ingame;nvdec;UE4,ingame,2022-08-22 16:23:49.000 +010007700D4AC000,"The Forbidden Arts",status-playable,playable,2021-01-26 16:26:24.000 +010030700CBBC000,"The friends of Ringo Ishikawa",status-playable,playable,2022-08-22 16:33:17.000 +01006350148DA000,"The Gardener and the Wild Vines",gpu;status-ingame,ingame,2024-04-29 16:32:10.000 +0100B13007A6A000,"The Gardens Between",status-playable,playable,2021-01-29 16:16:53.000 +010036E00FB20000,"The Great Ace Attorney Chronicles",status-playable,playable,2023-06-22 21:26:29.000 +010007B012514000,"The Great Perhaps",status-playable,playable,2020-09-02 15:57:04.000 +01003B300E4AA000,"THE GRISAIA TRILOGY",status-playable,playable,2021-01-31 15:53:59.000 +01001950137D8000,"The Hong Kong Massacre",crash;status-ingame,ingame,2021-01-21 12:06:56.000 +01004AD00E094000,"The House of Da Vinci",status-playable,playable,2021-01-05 14:17:19.000 +01005A80113D2000,"The House of Da Vinci 2",status-playable,playable,2020-10-23 20:47:17.000 +0100E24004510000,"The Hunt - Championship Edition",status-menus;32-bit,menus,2022-07-21 20:21:25.000 +01008940086E0000,"The Infectious Madness of Doctor Dekker",status-playable;nvdec,playable,2022-08-22 16:45:01.000 +0100B0B00B318000,"The Inner World",nvdec;status-playable,playable,2020-06-03 21:22:29.000 +0100A9D00B31A000,"The Inner World - The Last Wind Monk",nvdec;status-playable,playable,2020-11-16 13:09:40.000 +0100AE5003EE6000,"The Jackbox Party Pack",status-playable;online-working,playable,2023-05-28 09:28:40.000 +010015D003EE4000,"The Jackbox Party Pack 2",status-playable;online-working,playable,2022-08-22 18:23:40.000 +0100CC80013D6000,"The Jackbox Party Pack 3",slow;status-playable;online-working,playable,2022-08-22 18:41:06.000 +0100E1F003EE8000,"The Jackbox Party Pack 4",status-playable;online-working,playable,2022-08-22 18:56:34.000 +010052C00B184000,"The Journey Down: Chapter One",nvdec;status-playable,playable,2021-02-24 13:32:41.000 +01006BC00B188000,"The Journey Down: Chapter Three",nvdec;status-playable,playable,2021-02-24 13:45:27.000 +01009AB00B186000,"The Journey Down: Chapter Two",nvdec;status-playable,playable,2021-02-24 13:32:13.000 +010020500BD98000,"The King's Bird",status-playable,playable,2022-08-22 19:07:46.000 +010031B00DB34000,"the Knight & the Dragon",gpu;status-ingame,ingame,2023-08-14 10:31:43.000 +01007AF012E16000,"The Language Of Love",Needs Update;crash;status-nothing,nothing,2020-12-03 17:54:00.000 +010079C017F5E000,"The Lara Croft Collection",services-horizon;deadlock;status-nothing,nothing,2024-07-12 22:45:51.000 +0100449011506000,"The Last Campfire",status-playable,playable,2022-10-20 16:44:19.000 +0100AAD011592000,"The Last Dead End",gpu;status-ingame;UE4,ingame,2022-10-20 16:59:44.000 +0100AC800D022000,"THE LAST REMNANT Remastered",status-playable;nvdec;UE4,playable,2023-02-09 17:24:44.000 +0100B1900F0B6000,"The Legend of Dark Witch",status-playable,playable,2020-07-12 15:18:33.000 +01001920156C2000,"The Legend of Heroes: Trails from Zero",gpu;status-ingame;mac-bug,ingame,2024-09-14 21:41:41.000 +01005420101DA000,"The Legend of Heroes: Trails of Cold Steel III",status-playable,playable,2020-12-16 10:59:18.000 +01009B101044C000,"The Legend of Heroes: Trails of Cold Steel III Demo",demo;nvdec;status-playable,playable,2021-04-23 01:07:32.000 +0100D3C010DE8000,"The Legend of Heroes: Trails of Cold Steel IV",nvdec;status-playable,playable,2021-04-23 14:01:05.000 +01005E5013862000,"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",status-nothing;crash,nothing,2021-09-30 14:41:07.000 +01008CF01BAAC000,"The Legend of Zelda Echoes of Wisdom",status-playable;nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01.000 +0100509005AF2000,"The Legend of Zelda: Breath of the Wild Demo",status-ingame;demo,ingame,2022-12-24 05:02:58.000 +01007EF00011E000,"The Legend of Zelda™: Breath of the Wild",gpu;status-ingame;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46.000 +01006BB00C6F0000,"The Legend of Zelda™: Link’s Awakening",gpu;status-ingame;nvdec;mac-bug,ingame,2023-08-09 17:37:40.000 +01002DA013484000,"The Legend of Zelda™: Skyward Sword HD",gpu;status-ingame,ingame,2024-06-14 16:48:29.000 +0100F2C0115B6000,"The Legend of Zelda™: Tears of the Kingdom",gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30.000 +0100A4400BE74000,"The LEGO Movie 2 Videogame",status-playable,playable,2023-03-01 11:23:37.000 +010064B00B95C000,"The Liar Princess and the Blind Prince",audio;slow;status-playable,playable,2020-06-08 21:23:28.000 +0100735004898000,"The Lion's Song",status-playable,playable,2021-06-09 15:07:16.000 +0100A5000D590000,"The Little Acre",nvdec;status-playable,playable,2021-03-02 20:22:27.000 +01007A700A87C000,"The Long Dark",status-playable,playable,2021-02-21 14:19:52.000 +010052B003A38000,"The Long Reach",nvdec;status-playable,playable,2021-02-24 14:09:48.000 +01003C3013300000,"The Long Return",slow;status-playable,playable,2020-12-10 21:05:10.000 +0100CE1004E72000,"The Longest Five Minutes",gpu;status-boots,boots,2023-02-19 18:33:11.000 +0100F3D0122C2000,"The Longing",gpu;status-ingame,ingame,2022-11-12 15:00:58.000 +010085A00C5E8000,"The Lord of the Rings: Adventure Card Game - Definitive Edition",status-menus;online-broken,menus,2022-09-16 15:19:32.000 +01008A000A404000,"The Lost Child",nvdec;status-playable,playable,2021-02-23 15:44:20.000 +0100BAB00A116000,"The Low Road",status-playable,playable,2021-02-26 13:23:22.000 +,"The Mahjong",Needs Update;crash;services;status-nothing,nothing,2021-04-01 22:06:22.000 +0100DC300AC78000,"The Messenger",status-playable,playable,2020-03-22 13:51:37.000 +0100DEC00B2BC000,"The Midnight Sanctuary",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32.000 +0100F1B00B456000,"The MISSING: J.J. Macfield and the Island of Memories",status-playable,playable,2022-08-22 19:36:18.000 +010033300AC1A000,"The Mooseman",status-playable,playable,2021-02-24 12:58:57.000 +01005E9016BDE000,"The movie The Quintessential Bride -Five Memories Spent with You-",status-playable,playable,2023-12-14 14:43:43.000 +0100496004194000,"The Mummy Demastered",status-playable,playable,2021-02-23 13:11:27.000 +01004C500AAF6000,"The Mystery of the Hudson Case",status-playable,playable,2020-06-01 11:03:36.000 +01000CF0084BC000,"The Next Penelope",status-playable,playable,2021-01-29 16:26:11.000 +01001FB00E386000,"THE NINJA SAVIORS Return of the Warriors",online;status-playable,playable,2021-03-25 23:48:07.000 +0100B080184BC000,"The Oregon Trail",gpu;status-ingame,ingame,2022-11-25 16:11:49.000 +0100B0101265C000,"The Otterman Empire",UE4;gpu;status-ingame,ingame,2021-06-17 12:27:15.000 +01000BC01801A000,"The Outbound Ghost",status-nothing,nothing,2024-03-02 17:10:58.000 +0100626011656000,"The Outer Worlds",gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32.000 +01005C500D690000,"The Park",UE4;crash;gpu;status-ingame,ingame,2020-12-18 12:50:07.000 +010050101127C000,"The Persistence",nvdec;status-playable,playable,2021-06-06 19:15:40.000 +0100CD300880E000,"The Pinball Arcade",status-playable;online-broken,playable,2022-08-22 19:49:46.000 +01006BD018B54000,"The Plucky Squire",status-ingame;crash,ingame,2024-09-27 22:32:33.000 +0100E6A00B960000,"The Princess Guide",status-playable,playable,2021-02-24 14:23:34.000 +010058A00BF1C000,"The Raven Remastered",status-playable;nvdec,playable,2022-08-22 20:02:47.000 +0100EB100D17C000,"The Red Strings Club",status-playable,playable,2020-06-01 10:51:18.000 +010079400BEE0000,"The Room",status-playable,playable,2021-04-14 18:57:05.000 +010033100EE12000,"The Ryuo's Work is Never Done!",status-playable,playable,2022-03-29 00:35:37.000 +01002BA00C7CE000,"The Savior's Gang",gpu;status-ingame;nvdec;UE4,ingame,2022-09-21 12:37:48.000 +0100F3200E7CA000,"The Settlers®: New Allies",deadlock;status-nothing,nothing,2023-10-25 00:18:05.000 +0100F89003BC8000,"The Sexy Brutale",status-playable,playable,2021-01-06 17:48:28.000 +01001FF00BEE8000,"The Shapeshifting Detective",nvdec;status-playable,playable,2021-01-10 13:10:49.000 +010028D00BA1A000,"The Sinking City",status-playable;nvdec;UE4,playable,2022-09-12 16:41:55.000 +010041C00A68C000,"The Spectrum Retreat",status-playable,playable,2022-10-03 18:52:40.000 +010029300E5C4000,"The Stanley Parable: Ultra Deluxe",gpu;status-ingame,ingame,2024-07-12 23:18:26.000 +010007F00AF56000,"The Station",status-playable,playable,2022-09-28 18:15:27.000 +0100858010DC4000,"the StoryTale",status-playable,playable,2022-09-03 13:00:25.000 +0100AA400A238000,"The Stretchers™",status-playable;nvdec;UE4,playable,2022-09-16 15:40:58.000 +0100E3100450E000,"The Strike - Championship Edition",gpu;status-boots;32-bit,boots,2022-12-09 15:58:16.000 +0100EF200DA60000,"The Survivalists",status-playable,playable,2020-10-27 15:51:13.000 +010040D00B7CE000,"The Swindle",status-playable;nvdec,playable,2022-08-22 20:53:52.000 +010037D00D568000,"The Swords of Ditto: Mormo's Curse",slow;status-ingame,ingame,2020-12-06 00:13:12.000 +01009B300D76A000,"The Tiny Bang Story",status-playable,playable,2021-03-05 15:39:05.000 +0100C3300D8C4000,"The Touryst",status-ingame;crash,ingame,2023-08-22 01:32:38.000 +010047300EBA6000,"The Tower of Beatrice",status-playable,playable,2022-09-12 16:51:42.000 +010058000A576000,"The Town of Light: Deluxe Edition",gpu;status-playable,playable,2022-09-21 12:51:34.000 +0100B0E0086F6000,"The Trail: Frontier Challenge",slow;status-playable,playable,2022-08-23 15:10:51.000 +0100EA100F516000,"The Turing Test",status-playable;nvdec,playable,2022-09-21 13:24:07.000 +010064E00ECBC000,"The Unicorn Princess",status-playable,playable,2022-09-16 16:20:56.000 +0100BCF00E970000,"The Vanishing of Ethan Carter",UE4;status-playable,playable,2021-06-09 17:14:47.000 +0100D0500B0A6000,"The VideoKid",nvdec;status-playable,playable,2021-01-06 09:28:24.000 +,"The Voice",services;status-menus,menus,2020-07-28 20:48:49.000 +010056E00B4F4000,"The Walking Dead: A New Frontier",status-playable,playable,2022-09-21 13:40:48.000 +010099100B6AC000,"The Walking Dead: Season Two",status-playable,playable,2020-08-09 12:57:06.000 +010029200B6AA000,"The Walking Dead: The Complete First Season",status-playable,playable,2021-06-04 13:10:56.000 +010060F00AA70000,"The Walking Dead: The Final Season - Season Pass",status-playable;online-broken,playable,2022-08-23 17:22:32.000 +010095F010568000,"The Wanderer: Frankenstein's Creature",status-playable,playable,2020-07-11 12:49:51.000 +01008B200FC6C000,"The Wardrobe: Even Better Edition",status-playable,playable,2022-09-16 19:14:55.000 +01003D100E9C6000,"The Witcher 3: Wild Hunt",status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51.000 +0100B1300FF08000,"The Wonderful 101: Remastered",slow;status-playable;nvdec,playable,2022-09-30 13:49:28.000 +0100C1500B82E000,"The World Ends with You®: Final Remix",status-playable;ldn-untested,playable,2022-07-09 01:11:21.000 +0100E6200D56E000,"The World Next Door",status-playable,playable,2022-09-21 14:15:23.000 +010075900CD1C000,"Thea: The Awakening",status-playable,playable,2021-01-18 15:08:47.000 +010081B01777C000,"THEATRHYTHM FINAL BAR LINE",status-ingame;Incomplete,ingame,2024-08-05 14:24:55.000 +01001C2010D08000,"They Bleed Pixels",gpu;status-ingame,ingame,2024-08-09 05:52:18.000 +0100768010970000,"They Came From the Sky",status-playable,playable,2020-06-12 16:38:19.000 +0100CE700F62A000,"Thief of Thieves: Season One",status-nothing;crash;loader-allocator,nothing,2021-11-03 07:16:30.000 +0100CE400E34E000,"Thief Simulator",status-playable,playable,2023-04-22 04:39:11.000 +01009BD003B36000,"Thimbleweed Park",status-playable,playable,2022-08-24 11:15:31.000 +0100F2300A5DA000,"Think of the Children",deadlock;status-menus,menus,2021-11-23 09:04:45.000 +0100066004D68000,"This Is the Police",status-playable,playable,2022-08-24 11:37:05.000 +01004C100A04C000,"This is the Police 2",status-playable,playable,2022-08-24 11:49:17.000 +0100C7C00F77C000,"This Strange Realm Of Mine",status-playable,playable,2020-08-28 12:07:24.000 +0100A8700BC2A000,"This War of Mine: Complete Edition",gpu;status-ingame;32-bit;nvdec,ingame,2022-08-24 12:00:44.000 +0100AC500EEE8000,"THOTH",status-playable,playable,2020-08-05 18:35:28.000 +0100E910103B4000,"Thronebreaker: The Witcher Tales",nvdec;status-playable,playable,2021-06-03 16:40:15.000 +01006F6002840000,"Thumper",gpu;status-ingame,ingame,2024-08-12 02:41:07.000 +01000AC011588000,"Thy Sword",status-ingame;crash,ingame,2022-09-30 16:43:14.000 +0100E9000C42C000,"Tick Tock: A Tale for Two",status-menus,menus,2020-07-14 14:49:38.000 +0100B6D00C2DE000,"Tied Together",nvdec;status-playable,playable,2021-04-10 14:03:46.000 +010074500699A000,"Timber Tennis: Versus",online;status-playable,playable,2020-10-03 17:07:15.000 +01004C500B698000,"Time Carnage",status-playable,playable,2021-06-16 17:57:28.000 +0100F770045CA000,"Time Recoil",status-playable,playable,2022-08-24 12:44:03.000 +0100DD300CF3A000,"Timespinner",gpu;status-ingame,ingame,2022-08-09 09:39:11.000 +0100393013A10000,"Timothy and the Mysterious Forest",gpu;slow;status-ingame,ingame,2021-06-02 00:42:11.000 +0100F7C010AF6000,"Tin & Kuna",status-playable,playable,2020-11-17 12:16:12.000 +0100DF900FC52000,"Tiny Gladiators",status-playable,playable,2020-12-14 00:09:43.000 +010061A00AE64000,"Tiny Hands Adventure",status-playable,playable,2022-08-24 16:07:48.000 +010074800741A000,"TINY METAL",UE4;gpu;nvdec;status-ingame,ingame,2021-03-05 17:11:57.000 +01005D0011A40000,"Tiny Racer",status-playable,playable,2022-10-07 11:13:03.000 +010002401AE94000,"Tiny Thor",gpu;status-ingame,ingame,2024-07-26 08:37:35.000 +0100A73016576000,"Tinykin",gpu;status-ingame,ingame,2023-06-18 12:12:24.000 +0100FE801185E000,"Titan Glory",status-boots,boots,2022-10-07 11:36:40.000 +0100605008268000,"Titan Quest",status-playable;nvdec;online-broken,playable,2022-08-19 21:54:15.000 +01009C400E93E000,"Titans Pinball",slow;status-playable,playable,2020-06-09 16:53:52.000 +010019500DB1E000,"Tlicolity Eyes - twinkle showtime -",gpu;status-boots,boots,2021-05-29 19:43:44.000 +010036700F83E000,"To the Moon",status-playable,playable,2021-03-20 15:33:38.000 +010014900865A000,"Toast Time: Smash Up!",crash;services;status-menus,menus,2020-04-03 12:26:59.000 +0100A4A00B2E8000,"Toby: The Secret Mine",nvdec;status-playable,playable,2021-01-06 09:22:33.000 +0100B5200BB7C000,"ToeJam & Earl: Back in the Groove!",status-playable,playable,2021-01-06 22:56:58.000 +0100B5E011920000,"TOHU",slow;status-playable,playable,2021-02-08 15:40:44.000 +0100F3400A432000,"Toki",nvdec;status-playable,playable,2021-01-06 19:59:23.000 +01003E500F962000,"Tokyo Dark – Remembrance –",nvdec;status-playable,playable,2021-06-10 20:09:49.000 +0100A9400C9C2000,"Tokyo Mirage Sessions™ #FE Encore",32-bit;status-playable;nvdec,playable,2022-07-07 09:41:07.000 +0100E2E00CB14000,"Tokyo School Life",status-playable,playable,2022-09-16 20:25:54.000 +010024601BB16000,"Tomb Raider I-III Remastered Starring Lara Croft",gpu;status-ingame;opengl,ingame,2024-09-27 12:32:04.000 +0100D7F01E49C000,"Tomba! Special Edition",services-horizon;status-nothing,nothing,2024-09-15 21:59:54.000 +0100D400100F8000,"Tonight We Riot",status-playable,playable,2021-02-26 15:55:09.000 +0100CC00102B4000,"Tony Hawk's™ Pro Skater™ 1 + 2",gpu;status-ingame;Needs Update,ingame,2024-09-24 08:18:14.000 +010093F00E818000,"Tools Up!",crash;status-ingame,ingame,2020-07-21 12:58:17.000 +01009EA00E2B8000,"Toon War",status-playable,playable,2021-06-11 16:41:53.000 +010090400D366000,"Torchlight II",status-playable,playable,2020-07-27 14:18:37.000 +010075400DDB8000,"Torchlight III",status-playable;nvdec;online-broken;UE4,playable,2022-10-14 22:20:17.000 +01007AF011732000,"TORICKY-S",deadlock;status-menus,menus,2021-11-25 08:53:36.000 +0100BEB010F2A000,"Torn Tales: Rebound Edition",status-playable,playable,2020-11-01 14:11:59.000 +0100A64010D48000,"Total Arcade Racing",status-playable,playable,2022-11-12 15:12:48.000 +0100512010728000,"Totally Reliable Delivery Service",status-playable;online-broken,playable,2024-09-27 19:32:22.000 +01004E900B082000,"Touhou Genso Wanderer Reloaded",gpu;status-ingame;nvdec,ingame,2022-08-25 11:57:36.000 +010010F004022000,"Touhou Kobuto V: Burst Battle",status-playable,playable,2021-01-11 15:28:58.000 +0100E9D00D6C2000,"TOUHOU Spell Bubble",status-playable,playable,2020-10-18 11:43:43.000 +0100F7B00595C000,"Tower Of Babel",status-playable,playable,2021-01-06 17:05:15.000 +010094600DC86000,"Tower Of Time",gpu;nvdec;status-ingame,ingame,2020-07-03 11:11:12.000 +0100A1C00359C000,"TowerFall",status-playable,playable,2020-05-16 18:58:07.000 +0100F6200F77E000,"Towertale",status-playable,playable,2020-10-15 13:56:58.000 +010049E00BA34000,"Townsmen - A Kingdom Rebuilt",status-playable;nvdec,playable,2022-10-14 22:48:59.000 +01009FF00A160000,"Toy Stunt Bike: Tiptop's Trials",UE4;status-playable,playable,2021-04-10 13:56:34.000 +0100192010F5A000,"Tracks - Toybox Edition",UE4;crash;status-nothing,nothing,2021-02-08 15:19:18.000 +0100BCA00843A000,"Trailblazers",status-playable,playable,2021-03-02 20:40:49.000 +010009F004E66000,"Transcripted",status-playable,playable,2022-08-25 12:13:11.000 +01005E500E528000,"TRANSFORMERS: BATTLEGROUNDS",online;status-playable,playable,2021-06-17 18:08:19.000 +0100BE500BEA2000,"Transistor",status-playable,playable,2020-10-22 11:28:02.000 +0100A8D010BFA000,"Travel Mosaics 2: Roman Holiday",status-playable,playable,2021-05-26 12:33:16.000 +0100102010BFC000,"Travel Mosaics 3: Tokyo Animated",status-playable,playable,2021-05-26 12:06:27.000 +010096D010BFE000,"Travel Mosaics 4: Adventures In Rio",status-playable,playable,2021-05-26 11:54:58.000 +01004C4010C00000,"Travel Mosaics 5: Waltzing Vienna",status-playable,playable,2021-05-26 11:49:35.000 +0100D520119D6000,"Travel Mosaics 6: Christmas Around the World",status-playable,playable,2021-05-26 00:52:47.000 +01000BD0119DE000,"Travel Mosaics 7: Fantastic Berlin",status-playable,playable,2021-05-22 18:37:34.000 +01007DB00A226000,"Travel Mosaics: A Paris Tour",status-playable,playable,2021-05-26 12:42:26.000 +010011600C946000,"Travis Strikes Again: No More Heroes",status-playable;nvdec;UE4,playable,2022-08-25 12:36:38.000 +01006EB004B0E000,"Treadnauts",status-playable,playable,2021-01-10 14:57:41.000 +0100D7800E9E0000,"Trials of Mana",status-playable;UE4,playable,2022-09-30 21:50:37.000 +0100E1D00FBDE000,"Trials of Mana Demo",status-playable;nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02.000 +01003E800A102000,"Trials Rising Standard Edition",status-playable,playable,2024-02-11 01:36:39.000 +0100CC80140F8000,"TRIANGLE STRATEGY™",gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37.000 +010064E00A932000,"Trine 2: Complete Story",nvdec;status-playable,playable,2021-06-03 11:45:20.000 +0100DEC00A934000,"Trine 3: The Artifacts of Power",ldn-untested;online;status-playable,playable,2021-06-03 12:01:24.000 +010055E00CA68000,"Trine 4: The Nightmare Prince",gpu;status-nothing,nothing,2025-01-07 05:47:46.000 +0100D9000A930000,"Trine Enchanted Edition",ldn-untested;nvdec;status-playable,playable,2021-06-03 11:28:15.000 +01002D7010A54000,"Trinity Trigger",status-ingame;crash,ingame,2023-03-03 03:09:09.000 +0100868013FFC000,"TRIVIAL PURSUIT Live! 2",status-boots,boots,2022-12-19 00:04:33.000 +0100F78002040000,"Troll and I™",gpu;nvdec;status-ingame,ingame,2021-06-04 16:58:50.000 +0100145011008000,"Trollhunters: Defenders of Arcadia",gpu;nvdec;status-ingame,ingame,2020-11-30 13:27:09.000 +0100FBE0113CC000,"Tropico 6 - Nintendo Switch™ Edition",status-playable;nvdec;UE4,playable,2022-10-14 23:21:03.000 +0100D06018DCA000,"Trouble Witches Final! Episode 01: Daughters of Amalgam",status-playable,playable,2024-04-08 15:08:11.000 +0100B5B0113CE000,"Troubleshooter",UE4;crash;status-nothing,nothing,2020-10-04 13:46:50.000 +010089600FB72000,"Trover Saves The Universe",UE4;crash;status-nothing,nothing,2020-10-03 10:25:27.000 +0100E6300D448000,"Trüberbrook",status-playable,playable,2021-06-04 17:08:00.000 +0100F2100AA5C000,"Truck and Logistics Simulator",status-playable,playable,2021-06-11 13:29:08.000 +0100CB50107BA000,"Truck Driver",status-playable;online-broken,playable,2022-10-20 17:42:33.000 +0100E75004766000,"True Fear: Forsaken Souls - Part 1",nvdec;status-playable,playable,2020-12-15 21:39:52.000 +010099900CAB2000,"TT Isle of Man",nvdec;status-playable,playable,2020-06-22 12:25:13.000 +010000400F582000,"TT Isle of Man Ride on the Edge 2",gpu;status-ingame;nvdec;online-broken,ingame,2022-09-30 22:13:05.000 +0100752011628000,"TTV2",status-playable,playable,2020-11-27 13:21:36.000 +0100AFE00452E000,"Tumblestone",status-playable,playable,2021-01-07 17:49:20.000 +010085500D5F6000,"Turok",gpu;status-ingame,ingame,2021-06-04 13:16:24.000 +0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;status-ingame;vulkan,ingame,2022-09-12 17:50:05.000 +010004B0130C8000,"Turrican Flashback",status-playable;audout,playable,2021-08-30 10:07:56.000 +0100B1F0090F2000,"TurtlePop: Journey to Freedom",status-playable,playable,2020-06-12 17:45:39.000 +0100047009742000,"Twin Robots: Ultimate Edition",status-playable;nvdec,playable,2022-08-25 14:24:03.000 +010031200E044000,"Two Point Hospital™",status-ingame;crash;nvdec,ingame,2022-09-22 11:22:23.000 +010038400C2FE000,"TY the Tasmanian Tiger™ HD",32-bit;crash;nvdec;status-menus,menus,2020-12-17 21:15:00.000 +010073A00C4B2000,"Tyd wag vir Niemand",status-playable,playable,2021-03-02 13:39:53.000 +0100D5B00D6DA000,"Type:Rider",status-playable,playable,2021-01-06 13:12:55.000 +010040D01222C000,"UBERMOSH: SANTICIDE",status-playable,playable,2020-11-27 15:05:01.000 +0100992010BF8000,"Ubongo",status-playable,playable,2021-02-04 21:15:01.000 +010079000B56C000,"UglyDolls: An Imperfect Adventure",status-playable;nvdec;UE4,playable,2022-08-25 14:42:16.000 +010048901295C000,"Ultimate Fishing Simulator",status-playable,playable,2021-06-16 18:38:23.000 +01009D000FAE0000,"Ultimate Racing 2D",status-playable,playable,2020-08-05 17:27:09.000 +010045200A1C2000,"Ultimate Runner",status-playable,playable,2022-08-29 12:52:40.000 +01006B601117E000,"Ultimate Ski Jumping 2020",online;status-playable,playable,2021-03-02 20:54:11.000 +01002D4012222000,"Ultra Hat Dimension",services;audio;status-menus,menus,2021-11-18 09:05:20.000 +01009C000415A000,"Ultra Hyperball",status-playable,playable,2021-01-06 10:09:55.000 +01007330027EE000,"Ultra Street Fighter® II: The Final Challengers",status-playable;ldn-untested,playable,2021-11-25 07:54:58.000 +01006A300BA2C000,"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",status-playable;audout,playable,2023-05-04 17:25:23.000 +0100592005164000,"UNBOX: Newbie's Adventure",status-playable;UE4,playable,2022-08-29 13:12:56.000 +01002D900C5E4000,"Uncanny Valley",nvdec;status-playable,playable,2021-06-04 13:28:45.000 +010076F011F54000,"Undead & Beyond",status-playable;nvdec,playable,2022-10-04 09:11:18.000 +01008F3013E4E000,"Under Leaves",status-playable,playable,2021-05-22 18:13:58.000 +010080B00AD66000,"Undertale",status-playable,playable,2022-08-31 17:31:46.000 +01008F80049C6000,"Unepic",status-playable,playable,2024-01-15 17:03:00.000 +01007820096FC000,"UnExplored",status-playable,playable,2021-01-06 10:02:16.000 +01007D1013512000,"Unhatched",status-playable,playable,2020-12-11 12:11:09.000 +010069401ADB8000,"Unicorn Overlord",status-playable,playable,2024-09-27 14:04:32.000 +0100B1400D92A000,"Unit 4",status-playable,playable,2020-12-16 18:54:13.000 +010045200D3A4000,"Unknown Fate",slow;status-ingame,ingame,2020-10-15 12:27:42.000 +0100AB2010B4C000,"Unlock The King",status-playable,playable,2020-09-01 13:58:27.000 +0100A3E011CB0000,"Unlock the King 2",status-playable,playable,2021-06-15 20:43:55.000 +01005AA00372A000,"UNO® for Nintendo Switch",status-playable;nvdec;ldn-untested,playable,2022-07-28 14:49:47.000 +0100E5D00CC0C000,"Unravel Two",status-playable;nvdec,playable,2024-05-23 15:45:05.000 +010001300CC4A000,"Unruly Heroes",status-playable,playable,2021-01-07 18:09:31.000 +0100B410138C0000,"Unspottable",status-playable,playable,2022-10-25 19:28:49.000 +010082400BCC6000,"Untitled Goose Game",status-playable,playable,2020-09-26 13:18:06.000 +0100E49013190000,"Unto The End",gpu;status-ingame,ingame,2022-10-21 11:13:29.000 +0100B110109F8000,"Urban Flow",services;status-playable,playable,2020-07-05 12:51:47.000 +010054F014016000,"Urban Street Fighting",status-playable,playable,2021-02-20 19:16:36.000 +01001B10068EC000,"Urban Trial Playground",UE4;nvdec;online;status-playable,playable,2021-03-25 20:56:51.000 +0100A2500EB92000,"Urban Trial Tricky",status-playable;nvdec;UE4,playable,2022-12-06 13:07:56.000 +01007C0003AEC000,"Use Your Words",status-menus;nvdec;online-broken,menus,2022-08-29 17:22:10.000 +0100D4300EBF8000,"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",status-nothing;crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44.000 +010024200E00A000,"Uta no☆Prince-sama♪ Repeat Love",status-playable;nvdec,playable,2022-12-09 09:21:51.000 +010029B00CC3E000,"UTOPIA 9 - A Volatile Vacation",nvdec;status-playable,playable,2020-12-16 17:06:42.000 +010064400B138000,"V-Rally 4",gpu;nvdec;status-ingame,ingame,2021-06-07 19:37:31.000 +0100A6700D66E000,"VA-11 HALL-A",status-playable,playable,2021-02-26 15:05:34.000 +01009E2003FE2000,"Vaccine",nvdec;status-playable,playable,2021-01-06 01:02:07.000 +010089700F30C000,"Valfaris",status-playable,playable,2022-09-16 21:37:24.000 +0100CAF00B744000,"Valkyria Chronicles",status-ingame;32-bit;crash;nvdec,ingame,2022-11-23 20:03:32.000 +01005C600AC68000,"Valkyria Chronicles 4",audout;nvdec;status-playable,playable,2021-06-03 18:12:25.000 +0100FBD00B91E000,"Valkyria Chronicles 4 Demo",slow;status-ingame;demo,ingame,2022-08-29 20:39:07.000 +0100E0E00B108000,"Valley",status-playable;nvdec,playable,2022-09-28 19:27:58.000 +010089A0197E4000,"Vampire Survivors",status-ingame,ingame,2024-06-17 09:57:38.000 +010020C00FFB6000,"Vampire: The Masquerade - Coteries of New York",status-playable,playable,2020-10-04 14:55:22.000 +01000BD00CE64000,"VAMPYR",status-playable;nvdec;UE4,playable,2022-09-16 22:15:51.000 +01007C500D650000,"Vandals",status-playable,playable,2021-01-27 21:45:46.000 +010030F00CA1E000,"Vaporum",nvdec;status-playable,playable,2021-05-28 14:25:33.000 +010045C0109F2000,"VARIABLE BARRICADE NS",status-playable;nvdec,playable,2022-02-26 15:50:13.000 +0100FE200AF48000,"VASARA Collection",nvdec;status-playable,playable,2021-02-28 15:26:10.000 +0100AD300E4FA000,"Vasilis",status-playable,playable,2020-09-01 15:05:35.000 +01009CD003A0A000,"Vegas Party",status-playable,playable,2021-04-14 19:21:41.000 +010098400E39E000,"Vektor Wars",status-playable;online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46.000 +01003A8018E60000,"Vengeful Guardian: Moonrider",deadlock;status-boots,boots,2024-03-17 23:35:37.000 +010095B00DBC8000,"Venture Kid",crash;gpu;status-ingame,ingame,2021-04-18 16:33:17.000 +0100C850134A0000,"Vera Blanc: Full Moon",audio;status-playable,playable,2020-12-17 12:09:30.000 +0100379013A62000,"Very Very Valet",status-playable;nvdec,playable,2022-11-12 15:25:51.000 +01006C8014DDA000,"Very Very Valet Demo",status-boots;crash;Needs Update;demo,boots,2022-11-12 15:26:13.000 +010057B00712C000,"Vesta",status-playable;nvdec,playable,2022-08-29 21:03:39.000 +0100E81007A06000,"Victor Vran Overkill Edition",gpu;deadlock;status-ingame;nvdec;opengl,ingame,2022-08-30 11:46:56.000 +01005880063AA000,"Violett",nvdec;status-playable,playable,2021-01-28 13:09:36.000 +010037900CB1C000,"Viviette",status-playable,playable,2021-06-11 15:33:40.000 +0100D010113A8000,"Void Bastards",status-playable,playable,2022-10-15 00:04:19.000 +0100FF7010E7E000,"void tRrLM(); //Void Terrarium",gpu;status-ingame;Needs Update;regression,ingame,2023-02-10 01:13:25.000 +010078D0175EE000,"void* tRrLM2(); //Void Terrarium 2",status-playable,playable,2023-12-21 11:00:41.000 +0100B1A0066DC000,"Volgarr the Viking",status-playable,playable,2020-12-18 15:25:50.000 +0100A7900E79C000,"Volta-X",status-playable;online-broken,playable,2022-10-07 12:20:51.000 +01004D8007368000,"Vostok Inc.",status-playable,playable,2021-01-27 17:43:59.000 +0100B1E0100A4000,"Voxel Galaxy",status-playable,playable,2022-09-28 22:45:02.000 +0100AFA011068000,"Voxel Pirates",status-playable,playable,2022-09-28 22:55:02.000 +0100BFB00D1F4000,"Voxel Sword",status-playable,playable,2022-08-30 14:57:27.000 +01004E90028A2000,"Vroom in the night sky",status-playable;Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29.000 +0100C7C00AE6C000,"VSR: Void Space Racing",status-playable,playable,2021-01-27 14:08:59.000 +0100B130119D0000,"Waifu Uncovered",status-ingame;crash,ingame,2023-02-27 01:17:46.000 +0100E29010A4A000,"Wanba Warriors",status-playable,playable,2020-10-04 17:56:22.000 +010078800825E000,"Wanderjahr TryAgainOrWalkAway",status-playable,playable,2020-12-16 09:46:04.000 +0100B27010436000,"Wanderlust Travel Stories",status-playable,playable,2021-04-07 16:09:12.000 +0100F8A00853C000,"Wandersong",nvdec;status-playable,playable,2021-06-04 15:33:34.000 +0100D67013910000,"Wanna Survive",status-playable,playable,2022-11-12 21:15:43.000 +010056901285A000,"War Dogs: Red's Return",status-playable,playable,2022-11-13 15:29:01.000 +01004FA01391A000,"War Of Stealth - assassin",status-playable,playable,2021-05-22 17:34:38.000 +010035A00D4E6000,"War Party",nvdec;status-playable,playable,2021-01-27 18:26:32.000 +010049500DE56000,"War Tech Fighters",status-playable;nvdec,playable,2022-09-16 22:29:31.000 +010084D00A134000,"War Theatre",gpu;status-ingame,ingame,2021-06-07 19:42:45.000 +0100B6B013B8A000,"War Truck Simulator",status-playable,playable,2021-01-31 11:22:54.000 +0100563011B4A000,"War-Torn Dreams",crash;status-nothing,nothing,2020-10-21 11:36:16.000 +010054900F51A000,"WARBORN",status-playable,playable,2020-06-25 12:36:47.000 +01000F0002BB6000,"Wargroove",status-playable;online-broken,playable,2022-08-31 10:30:45.000 +0100C6000EEA8000,"Warhammer 40,000: Mechanicus",nvdec;status-playable,playable,2021-06-13 10:46:38.000 +0100E5600D7B2000,"WARHAMMER 40,000: SPACE WOLF",status-playable;online-broken,playable,2022-09-20 21:11:20.000 +010031201307A000,"Warhammer Age of Sigmar: Storm Ground",status-playable;nvdec;online-broken;UE4,playable,2022-11-13 15:46:14.000 +01002FF00F460000,"Warhammer Quest 2: The End Times",status-playable,playable,2020-08-04 15:28:03.000 +0100563010E0C000,"WarioWare™: Get It Together!",gpu;status-ingame;opengl-backend-bug,ingame,2024-04-23 01:04:56.000 +010045B018EC2000,"WarioWare™: Move It!",status-playable,playable,2023-11-14 00:23:51.000 +0100E0400E320000,"Warlocks 2: God Slayers",status-playable,playable,2020-12-16 17:36:50.000 +0100DB300A026000,"Warp Shift",nvdec;status-playable,playable,2020-12-15 14:48:48.000 +010032700EAC4000,"WarriOrb",UE4;status-playable,playable,2021-06-17 15:45:14.000 +0100E8500AD58000,"WARRIORS OROCHI 4 ULTIMATE",status-playable;nvdec;online-broken,playable,2024-08-07 01:50:37.000 +0100CD900FB24000,"WARTILE",UE4;crash;gpu;status-menus,menus,2020-12-11 21:56:10.000 +010039A00BC64000,"Wasteland 2: Director's Cut",nvdec;status-playable,playable,2021-01-27 13:34:11.000 +0100B79011F06000,"Water Balloon Mania",status-playable,playable,2020-10-23 20:20:59.000 +0100BA200C378000,"Way of the Passive Fist",gpu;status-ingame,ingame,2021-02-26 21:07:06.000 +0100560010E3E000,"We should talk.",crash;status-nothing,nothing,2020-08-03 12:32:36.000 +010096000EEBA000,"Welcome to Hanwell",UE4;crash;status-boots,boots,2020-08-03 11:54:57.000 +0100D7F010B94000,"Welcome to Primrose Lake",status-playable,playable,2022-10-21 11:30:57.000 +010035600EC94000,"Wenjia",status-playable,playable,2020-06-08 11:38:30.000 +010031B00A4E8000,"West of Loathing",status-playable,playable,2021-01-28 12:35:19.000 +010038900DFE0000,"What Remains of Edith Finch",slow;status-playable;UE4,playable,2022-08-31 19:57:59.000 +010033600ADE6000,"Wheel of Fortune®",status-boots;crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24.000 +0100DFC00405E000,"Wheels of Aurelia",status-playable,playable,2021-01-27 21:59:25.000 +010027D011C9C000,"Where Angels Cry",gpu;status-ingame;nvdec,ingame,2022-09-30 22:24:47.000 +0100FDB0092B4000,"Where Are My Friends?",status-playable,playable,2022-09-21 14:39:26.000 +01000C000C966000,"Where the Bees Make Honey",status-playable,playable,2020-07-15 12:40:49.000 +010017500E7E0000,"Whipseey and the Lost Atlas",status-playable,playable,2020-06-23 20:24:14.000 +010015A00AF1E000,"Whispering Willows",status-playable;nvdec,playable,2022-09-30 22:33:05.000 +010027F0128EA000,"Who Wants to Be a Millionaire?",crash;status-nothing,nothing,2020-12-11 20:22:42.000 +0100C7800CA06000,"Widget Satchel",status-playable,playable,2022-09-16 22:41:07.000 +0100CFC00A1D8000,"Wild Guns™ Reloaded",status-playable,playable,2021-01-28 12:29:05.000 +010071F00D65A000,"Wilmot's Warehouse",audio;gpu;status-ingame,ingame,2021-06-02 17:24:32.000 +010048800B638000,"Windjammers",online;status-playable,playable,2020-10-13 11:24:25.000 +010059900BA3C000,"Windscape",status-playable,playable,2022-10-21 11:49:42.000 +0100D6800CEAC000,"Windstorm: An Unexpected Arrival",UE4;status-playable,playable,2021-06-07 19:33:19.000 +01005A100B314000,"Windstorm: Start of a Great Friendship",UE4;gpu;nvdec;status-ingame,ingame,2020-12-22 13:17:48.000 +010035B012F28000,"Wing of Darkness",status-playable;UE4,playable,2022-11-13 16:03:51.000 +0100A4A015FF0000,"Winter Games 2023",deadlock;status-menus,menus,2023-11-07 20:47:36.000 +010012A017F18800,"Witch On The Holy Night",status-playable,playable,2023-03-06 23:28:11.000 +0100454012E32000,"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",status-ingame;crash,ingame,2021-08-08 11:56:18.000 +01002FC00C6D0000,"Witch Thief",status-playable,playable,2021-01-27 18:16:07.000 +010061501904E000,"Witch's Garden",gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24.000 +0100BD4011FFE000,"Witcheye",status-playable,playable,2020-12-14 22:56:08.000 +0100522007AAA000,"Wizard of Legend",status-playable,playable,2021-06-07 12:20:46.000 +010081900F9E2000,"Wizards of Brandel",status-nothing,nothing,2020-10-14 15:52:33.000 +0100C7600E77E000,"Wizards: Wand of Epicosity",status-playable,playable,2022-10-07 12:32:06.000 +01009040091E0000,"Wolfenstein II®: The New Colossus™",gpu;status-ingame,ingame,2024-04-05 05:39:46.000 +01003BD00CAAE000,"Wolfenstein: Youngblood",status-boots;online-broken,boots,2024-07-12 23:49:20.000 +010037A00F5E2000,"Wonder Blade",status-playable,playable,2020-12-11 17:55:31.000 +0100B49016FF0000,"Wonder Boy Anniversary Collection",deadlock;status-nothing,nothing,2023-04-20 16:01:48.000 +0100EB2012E36000,"Wonder Boy Asha in Monster World",status-nothing;crash,nothing,2021-11-03 08:45:06.000 +0100A6300150C000,"Wonder Boy: The Dragon's Trap",status-playable,playable,2021-06-25 04:53:21.000 +0100F5D00C812000,"Wondershot",status-playable,playable,2022-08-31 21:05:31.000 +0100E0300EB04000,"Woodle Tree 2: Deluxe",gpu;slow;status-ingame,ingame,2020-06-04 18:44:00.000 +0100288012966000,"Woodsalt",status-playable,playable,2021-04-06 17:01:48.000 +010083E011BC8000,"Wordify",status-playable,playable,2020-10-03 09:01:07.000 +01009D500A194000,"World Conqueror X",status-playable,playable,2020-12-22 16:10:29.000 +010072000BD32000,"WORLD OF FINAL FANTASY MAXIMA",status-playable,playable,2020-06-07 13:57:23.000 +010009E001D90000,"World of Goo",gpu;status-boots;32-bit;crash;regression,boots,2024-04-12 05:52:14.000 +010061F01DB7C800,"World of Goo 2",status-boots,boots,2024-08-08 22:52:49.000 +01001E300B038000,"World Soccer Pinball",status-playable,playable,2021-01-06 00:37:02.000 +010048900CF64000,"Worldend Syndrome",status-playable,playable,2021-01-03 14:16:32.000 +01008E9007064000,"WorldNeverland - Elnea Kingdom",status-playable,playable,2021-01-28 17:44:23.000 +010000301025A000,"Worlds of Magic: Planar Conquest",status-playable,playable,2021-06-12 12:51:28.000 +01009CD012CC0000,"Worm Jazz",gpu;services;status-ingame;UE4;regression,ingame,2021-11-10 10:33:04.000 +01001AE005166000,"Worms W.M.D",gpu;status-boots;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59.000 +010037500C4DE000,"Worse Than Death",status-playable,playable,2021-06-11 16:05:40.000 +01006F100EB16000,"Woven",nvdec;status-playable,playable,2021-06-02 13:41:08.000 +010087800DCEA000,"WRC 8 FIA World Rally Championship",status-playable;nvdec,playable,2022-09-16 23:03:36.000 +01001A0011798000,"WRC 9 The Official Game",gpu;slow;status-ingame;nvdec,ingame,2022-10-25 19:47:39.000 +0100DC0012E48000,"Wreckfest",status-playable,playable,2023-02-12 16:13:00.000 +0100C5D00EDB8000,"Wreckin' Ball Adventure",status-playable;UE4,playable,2022-09-12 18:56:28.000 +010033700418A000,"Wulverblade",nvdec;status-playable,playable,2021-01-27 22:29:05.000 +01001C400482C000,"Wunderling DX",audio;status-ingame;crash,ingame,2022-09-10 13:20:12.000 +01003B401148E000,"Wurroom",status-playable,playable,2020-10-07 22:46:21.000 +010081700EDF4000,"WWE 2K Battlegrounds",status-playable;nvdec;online-broken;UE4,playable,2022-10-07 12:44:40.000 +010009800203E000,"WWE 2K18",status-playable;nvdec,playable,2023-10-21 17:22:01.000 +0100DF100B97C000,"X-Morph: Defense",status-playable,playable,2020-06-22 11:05:31.000 +0100D0B00FB74000,"XCOM® 2 Collection",gpu;status-ingame;crash,ingame,2022-10-04 09:38:30.000 +0100CC9015360000,"XEL",gpu;status-ingame,ingame,2022-10-03 10:19:39.000 +0100C9F009F7A000,"Xenoblade Chronicles 2: Torna ~ The Golden Country",slow;status-playable;nvdec,playable,2023-01-28 16:47:28.000 +0100E95004038000,"Xenoblade Chronicles™ 2",deadlock;status-ingame;amd-vendor-bug,ingame,2024-03-28 14:31:41.000 +010074F013262000,"Xenoblade Chronicles™ 3",gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44.000 +0100FF500E34A000,"Xenoblade Chronicles™ Definitive Edition",status-playable;nvdec,playable,2024-05-04 20:12:41.000 +010028600BA16000,"Xenon Racer",status-playable;nvdec;UE4,playable,2022-08-31 22:05:30.000 +010064200C324000,"Xenon Valkyrie+",status-playable,playable,2021-06-07 20:25:53.000 +0100928005BD2000,"Xenoraid",status-playable,playable,2022-09-03 13:01:10.000 +01005B5009364000,"Xeodrifter",status-playable,playable,2022-09-03 13:18:39.000 +01006FB00DB02000,"Yaga",status-playable;nvdec,playable,2022-09-16 23:17:17.000 +010076B0101A0000,"YesterMorrow",crash;status-ingame,ingame,2020-12-17 17:15:25.000 +010085500B29A000,"Yet Another Zombie Defense HD",status-playable,playable,2021-01-06 00:18:39.000 +0100725019978000,"YGGDRA UNION ~WE'LL NEVER FIGHT ALONE~",status-playable,playable,2020-04-03 02:20:47.000 +0100634008266000,"YIIK: A Postmodern RPG",status-playable,playable,2021-01-28 13:38:37.000 +0100C0000CEEA000,"Yo kai watch 1 for Nintendo Switch",gpu;status-ingame;opengl,ingame,2024-05-28 11:11:49.000 +010086C00AF7C000,"Yo-Kai Watch 4++",status-playable,playable,2024-06-18 20:21:44.000 +010002D00632E000,"Yoku's Island Express",status-playable;nvdec,playable,2022-09-03 13:59:02.000 +0100F47016F26000,"Yomawari 3",status-playable,playable,2022-05-10 08:26:51.000 +010012F00B6F2000,"Yomawari: The Long Night Collection",status-playable,playable,2022-09-03 14:36:59.000 +0100CC600ABB2000,"Yonder: The Cloud Catcher Chronicles (Retail Only)",status-playable,playable,2021-01-28 14:06:25.000 +0100BE50042F6000,"Yono and the Celestial Elephants",status-playable,playable,2021-01-28 18:23:58.000 +0100F110029C8000,"Yooka-Laylee",status-playable,playable,2021-01-28 14:21:45.000 +010022F00DA66000,"Yooka-Laylee and the Impossible Lair",status-playable,playable,2021-03-05 17:32:21.000 +01006000040C2000,"Yoshi’s Crafted World™",gpu;status-ingame;audout,ingame,2021-08-30 13:25:51.000 +0100AE800C9C6000,"Yoshi’s Crafted World™ Demo",gpu;status-boots;status-ingame,boots,2020-12-16 14:57:40.000 +,"Yoshiwara Higanbana Kuon no Chigiri",nvdec;status-playable,playable,2020-10-17 19:14:46.000 +01003A400C3DA800,"YouTube",status-playable,playable,2024-06-08 05:24:10.000 +00100A7700CCAA40,"Youtubers Life00",status-playable;nvdec,playable,2022-09-03 14:56:19.000 +0100E390124D8000,"Ys IX: Monstrum Nox",status-playable,playable,2022-06-12 04:14:42.000 +0100F90010882000,"Ys Origin",status-playable;nvdec,playable,2024-04-17 05:07:33.000 +01007F200B0C0000,"Ys VIII: Lacrimosa of DANA",status-playable;nvdec,playable,2023-08-05 09:26:41.000 +010022400BE5A000,"Yu-Gi-Oh! Legacy of the Duelist : Link Evolution",status-playable,playable,2024-09-27 21:48:43.000 +01002D60188DE000,"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",status-ingame;crash,ingame,2023-03-17 01:54:01.000 +010037D00DBDC000,"YU-NO: A girl who chants love at the bound of this world.",nvdec;status-playable,playable,2021-01-26 17:03:52.000 +0100B56011502000,"Yumeutsutsu Re:After",status-playable,playable,2022-11-20 16:09:06.000 +,"Yunohana Spring! - Mellow Times -",audio;crash;status-menus,menus,2020-09-27 19:27:40.000 +0100307011C44000,"Yuppie Psycho: Executive Edition",crash;status-ingame,ingame,2020-12-11 10:37:06.000 +0100FC900963E000,"Yuri",status-playable,playable,2021-06-11 13:08:50.000 +010092400A678000,"Zaccaria Pinball",status-playable;online-broken,playable,2022-09-03 15:44:28.000 +0100E7900C4C0000,"Zarvot",status-playable,playable,2021-01-28 13:51:36.000 +01005F200F7C2000,"Zen Chess Collection",status-playable,playable,2020-07-01 22:28:27.000 +01008DD0114AE000,"Zenge",status-playable,playable,2020-10-22 13:23:57.000 +0100057011E50000,"Zengeon",services-horizon;status-boots;crash,boots,2024-04-29 15:43:07.000 +0100AAC00E692000,"Zenith",status-playable,playable,2022-09-17 09:57:02.000 +0100A6A00894C000,"ZERO GUNNER 2- for Nintendo Switch",status-playable,playable,2021-01-04 20:17:14.000 +01004B001058C000,"Zero Strain",services;status-menus;UE4,menus,2021-11-10 07:48:32.000 +,"Zettai kaikyu gakuen",gpu;nvdec;status-ingame,ingame,2020-08-25 15:15:54.000 +0100D7B013DD0000,"Ziggy the Chaser",status-playable,playable,2021-02-04 20:34:27.000 +010086700EF16000,"ZikSquare",gpu;status-ingame,ingame,2021-11-06 02:02:48.000 +010069C0123D8000,"Zoids Wild Blast Unleashed",status-playable;nvdec,playable,2022-10-15 11:26:59.000 +0100C7300EEE4000,"Zombie Army Trilogy",ldn-untested;online;status-playable,playable,2020-12-16 12:02:28.000 +01006CF00DA8C000,"Zombie Driver Immortal Edition",nvdec;status-playable,playable,2020-12-14 23:15:10.000 +0100CFE003A64000,"ZOMBIE GOLD RUSH",online;status-playable,playable,2020-09-24 12:56:08.000 +01001740116EC000,"Zombie's Cool",status-playable,playable,2020-12-17 12:41:26.000 +01000E5800D32C00,"Zombieland: Double Tap - Road Trip0",status-playable,playable,2022-09-17 10:08:45.000 +0100CD300A1BA000,"Zombillie",status-playable,playable,2020-07-23 17:42:23.000 +01001EE00A6B0000,"Zotrix: Solar Division",status-playable,playable,2021-06-07 20:34:05.000 +,"この世の果てで恋を唄う少女YU-NO",audio;status-ingame,ingame,2021-01-22 07:00:16.000 +,"スーパーファミコン Nintendo Switch Online",slow;status-ingame,ingame,2020-03-14 05:48:38.000 +01000BB01CB8A000,"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",status-nothing,nothing,2024-09-28 07:03:14.000 +010065500B218000,"メモリーズオフ - Innocent Fille",status-playable,playable,2022-12-02 17:36:48.000 +010032400E700000,"二ノ国 白き聖灰の女王",services;status-menus;32-bit,menus,2023-04-16 17:11:06.000 +0100F3100DA46000,"初音ミク Project DIVA MEGA39's",audio;status-playable;loader-allocator,playable,2022-07-29 11:45:52.000 +010047F012BE2000,"密室のサクリファイス/ABYSS OF THE SACRIFICE",status-playable;nvdec,playable,2022-10-21 13:56:28.000 +0100BF401AF9C000,"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",slow;status-playable,playable,2023-12-31 14:37:17.000 +0100AFA01750C000,"死神と少女/Shinigami to Shoujo",gpu;status-ingame;Incomplete,ingame,2024-03-22 01:06:45.000 +01001BA01EBFC000,"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",services-horizon;status-nothing,nothing,2024-09-28 12:22:55.000 +0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",status-ingame;crash,ingame,2023-04-25 19:43:52.000 +0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",status-ingame;crash,ingame,2024-02-12 20:58:31.000 +010064801A01C000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",status-nothing;crash,nothing,2023-10-30 22:37:40.000 -- 2.47.1 From daa81689854e19d387b39461190b6c7ab60c4f62 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 9 Jan 2025 14:03:37 -0600 Subject: [PATCH 311/722] docs: compat: the final title IDs i could find --- docs/compatibility.csv | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index b95e93072..9b00f14c4 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -428,7 +428,6 @@ 010010A00DA48000,"Baldur's Gate and Baldur's Gate II: Enhanced Editions",32-bit;status-playable,playable,2022-09-12 23:52:15.000 0100BC400FB64000,"Balthazar's Dream",status-playable,playable,2022-09-13 00:13:22.000 01008D30128E0000,"Bamerang",status-playable,playable,2022-10-26 00:29:39.000 -,"Bang Dream Girls Band Party for Nintendo Switch",status-playable,playable,2021-09-19 03:06:58.000 010013C010C5C000,"Banner of the Maid",status-playable,playable,2021-06-14 15:23:37.000 0100388008758000,"Banner Saga 2",crash;status-boots,boots,2021-01-13 08:56:09.000 010071E00875A000,"Banner Saga 3",slow;status-boots,boots,2021-01-11 16:53:57.000 @@ -1245,7 +1244,7 @@ 01000EC00AF98000,"Furi",status-playable,playable,2022-07-27 12:21:20.000 0100A6B00D4EC000,"Furwind",status-playable,playable,2021-02-19 19:44:08.000 0100ECE00C0C4000,"Fury Unleashed",crash;services;status-ingame,ingame,2020-10-18 11:52:40.000 -,"Fury Unleashed Demo",status-playable,playable,2020-10-08 20:09:21.000 +010070000ED9E000,"Fury Unleashed Demo",status-playable,playable,2020-10-08 20:09:21.000 0100E1F013674000,"FUSER™",status-playable;nvdec;UE4,playable,2022-10-17 20:58:32.000 ,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec;status-ingame,ingame,2021-01-20 15:30:02.000 01003C300B274000,"Futari de! Nyanko Daisensou",status-playable,playable,2024-01-05 22:26:52.000 @@ -1978,7 +1977,7 @@ 01005F000B784000,"Nelly Cootalot: The Fowl Fleet",status-playable,playable,2020-06-11 20:55:42.000 01001AB0141A8000,"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",crash;status-ingame,ingame,2021-07-18 07:29:18.000 0100EBB00D2F4000,"Neo Cab",status-playable,playable,2021-04-24 00:27:58.000 -,"Neo Cab Demo",crash;status-boots,boots,2020-06-16 00:14:00.000 +010040000DB98000,"Neo Cab Demo",crash;status-boots,boots,2020-06-16 00:14:00.000 010006D0128B4000,"NEOGEO POCKET COLOR SELECTION Vol.1",status-playable,playable,2023-07-08 20:55:36.000 0100BAB01113A000,"Neon Abyss",status-playable,playable,2022-10-05 15:59:44.000 010075E0047F8000,"Neon Chrome",status-playable,playable,2022-08-06 18:38:34.000 @@ -2632,8 +2631,7 @@ 0100EA400BF44000,"SkyScrappers",status-playable,playable,2020-05-28 22:11:25.000 0100F3C00C400000,"SkyTime",slow;status-ingame,ingame,2020-05-30 09:24:51.000 01003AD00DEAE000,"SlabWell: The Quest For Kaktun's Alpaca",status-playable,playable,2021-02-22 17:02:51.000 -,"Slain",status-playable,playable,2020-05-29 14:26:16.000 -0100BB100AF4C000,"Slain Back from Hell",status-playable,playable,2022-08-12 23:36:19.000 +0100224004004000,"Slain: Back from Hell",status-playable,playable,2022-08-12 23:36:19.000 010026300BA4A000,"Slay the Spire",status-playable,playable,2023-01-20 15:09:26.000 0100501006494000,"Slayaway Camp: Butcher's Cut",status-playable;opengl-backend-bug,playable,2022-08-12 23:44:05.000 01004E900EDDA000,"Slayin 2",gpu;status-ingame,ingame,2024-04-19 16:15:26.000 -- 2.47.1 From a8c3407d11ffaddd7980c4fd83a7c1542458b72c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 9 Jan 2025 14:25:16 -0600 Subject: [PATCH 312/722] missing JP title id --- docs/compatibility.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 9b00f14c4..f116b4474 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -3407,7 +3407,7 @@ 01000E5800D32C00,"Zombieland: Double Tap - Road Trip0",status-playable,playable,2022-09-17 10:08:45.000 0100CD300A1BA000,"Zombillie",status-playable,playable,2020-07-23 17:42:23.000 01001EE00A6B0000,"Zotrix: Solar Division",status-playable,playable,2021-06-07 20:34:05.000 -,"この世の果てで恋を唄う少女YU-NO",audio;status-ingame,ingame,2021-01-22 07:00:16.000 +0100B9B00C6A4000,"この世の果てで恋を唄う少女YU-NO",audio;status-ingame,ingame,2021-01-22 07:00:16.000 ,"スーパーファミコン Nintendo Switch Online",slow;status-ingame,ingame,2020-03-14 05:48:38.000 01000BB01CB8A000,"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",status-nothing,nothing,2024-09-28 07:03:14.000 010065500B218000,"メモリーズオフ - Innocent Fille",status-playable,playable,2022-12-02 17:36:48.000 -- 2.47.1 From 606e149bd343c57263db72c3f740ecf8bcfeb718 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 9 Jan 2025 18:48:15 -0600 Subject: [PATCH 313/722] UI: Create a ColumnIndices struct and pass it by reference to the row ctor instead of recomputing the column index for every column on every row --- .../Utilities/Compat/CompatibilityCsv.cs | 73 ++++++++++++------- .../Compat/CompatibilityList.axaml.cs | 9 --- .../Compat/CompatibilityViewModel.cs | 9 +-- 3 files changed, 51 insertions(+), 40 deletions(-) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index 1e69b42d5..8fc7aeb04 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -1,50 +1,71 @@ using Gommon; using nietras.SeparatedValues; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Common.Logging; using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Reflection; using System.Text; namespace Ryujinx.Ava.Utilities.Compat { + public struct ColumnIndices(SepReaderHeader header) + { + public const string TitleIdCol = "\"title_id\""; + public const string GameNameCol = "\"game_name\""; + public const string LabelsCol = "\"labels\""; + public const string StatusCol = "\"status\""; + public const string LastUpdatedCol = "\"last_updated\""; + + public readonly int TitleId = header.IndexOf(TitleIdCol); + public readonly int GameName = header.IndexOf(GameNameCol); + public readonly int Labels = header.IndexOf(LabelsCol); + public readonly int Status = header.IndexOf(StatusCol); + public readonly int LastUpdated = header.IndexOf(LastUpdatedCol); + } + public class CompatibilityCsv { - public static CompatibilityCsv Shared { get; set; } - - public CompatibilityCsv(SepReader reader) + static CompatibilityCsv() { - var entries = new List(); + using Stream csvStream = Assembly.GetExecutingAssembly() + .GetManifestResourceStream("RyujinxGameCompatibilityList")!; + csvStream.Position = 0; - foreach (var row in reader) - { - entries.Add(new CompatibilityEntry(reader.Header, row)); - } + LoadFromStream(csvStream); + } + + public static void LoadFromStream(Stream stream) + { + var reader = Sep.Reader().From(stream); + var columnIndices = new ColumnIndices(reader.Header); - Entries = entries.Where(x => x.Status != null) - .OrderBy(it => it.GameName).ToArray(); + Entries = reader + .Enumerate(row => new CompatibilityEntry(ref columnIndices, row)) + .OrderBy(it => it.GameName) + .ToArray(); + + Logger.Debug?.Print(LogClass.UI, "Compatibility CSV loaded."); } - public CompatibilityEntry[] Entries { get; } + public static CompatibilityEntry[] Entries { get; private set; } } public class CompatibilityEntry { - public CompatibilityEntry(SepReaderHeader header, SepReader.Row row) + public CompatibilityEntry(ref ColumnIndices indices, SepReader.Row row) { - if (row.ColCount != header.ColNames.Count) - throw new InvalidDataException($"CSV row {row.RowIndex} ({row.ToString()}) has mismatched column count"); - - var titleIdRow = ColStr(row[header.IndexOf("\"title_id\"")]); + var titleIdRow = ColStr(row[indices.TitleId]); TitleId = !string.IsNullOrEmpty(titleIdRow) ? titleIdRow : default(Optional); - GameName = ColStr(row[header.IndexOf("\"game_name\"")]).Trim().Trim('"'); + GameName = ColStr(row[indices.GameName]).Trim().Trim('"'); - IssueLabels = ColStr(row[header.IndexOf("\"labels\"")]).Split(';'); - Status = ColStr(row[header.IndexOf("\"status\"")]).ToLower() switch + Labels = ColStr(row[indices.Labels]).Split(';'); + Status = ColStr(row[indices.Status]).ToLower() switch { "playable" => LocaleKeys.CompatibilityListPlayable, "ingame" => LocaleKeys.CompatibilityListIngame, @@ -54,8 +75,8 @@ namespace Ryujinx.Ava.Utilities.Compat _ => null }; - if (DateTime.TryParse(ColStr(row[header.IndexOf("\"last_updated\"")]), out var dt)) - LastEvent = dt; + if (DateTime.TryParse(ColStr(row[indices.LastUpdated]), out var dt)) + LastUpdated = dt; return; @@ -64,15 +85,15 @@ namespace Ryujinx.Ava.Utilities.Compat public string GameName { get; } public Optional TitleId { get; } - public string[] IssueLabels { get; } + public string[] Labels { get; } public LocaleKeys? Status { get; } - public DateTime LastEvent { get; } + public DateTime LastUpdated { get; } public string LocalizedStatus => LocaleManager.Instance[Status!.Value]; public string FormattedTitleId => TitleId .OrElse(new string(' ', 16)); - public string FormattedIssueLabels => IssueLabels + public string FormattedIssueLabels => Labels .Where(it => !it.StartsWithIgnoreCase("status")) .Select(FormatLabelName) .JoinToString(", "); @@ -82,9 +103,9 @@ namespace Ryujinx.Ava.Utilities.Compat var sb = new StringBuilder("CompatibilityEntry: {"); sb.Append($"{nameof(GameName)}=\"{GameName}\", "); sb.Append($"{nameof(TitleId)}={TitleId}, "); - sb.Append($"{nameof(IssueLabels)}=\"{IssueLabels}\", "); + sb.Append($"{nameof(Labels)}=\"{Labels}\", "); sb.Append($"{nameof(Status)}=\"{Status}\", "); - sb.Append($"{nameof(LastEvent)}=\"{LastEvent}\""); + sb.Append($"{nameof(LastUpdated)}=\"{LastUpdated}\""); sb.Append('}'); return sb.ToString(); diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs index 80f124121..2d5f08868 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -14,15 +14,6 @@ namespace Ryujinx.Ava.Utilities.Compat { public static async Task Show() { - if (CompatibilityCsv.Shared is null) - { - await using Stream csvStream = Assembly.GetExecutingAssembly() - .GetManifestResourceStream("RyujinxGameCompatibilityList")!; - csvStream.Position = 0; - - CompatibilityCsv.Shared = new CompatibilityCsv(Sep.Reader().From(csvStream)); - } - ContentDialog contentDialog = new() { PrimaryButtonText = string.Empty, diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs b/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs index 8140c041f..4bd97cc35 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs @@ -11,14 +11,13 @@ namespace Ryujinx.Ava.Utilities.Compat { [ObservableProperty] private bool _onlyShowOwnedGames = true; - private IEnumerable _currentEntries = CompatibilityCsv.Shared.Entries; + private IEnumerable _currentEntries = CompatibilityCsv.Entries; private readonly string[] _ownedGameTitleIds = []; private readonly ApplicationLibrary _appLibrary; public IEnumerable CurrentEntries => OnlyShowOwnedGames ? _currentEntries.Where(x => - x.TitleId.Check(tid => _ownedGameTitleIds.ContainsIgnoreCase(tid)) - || _appLibrary.Applications.Items.Any(a => a.Name.EqualsIgnoreCase(x.GameName))) + x.TitleId.Check(tid => _ownedGameTitleIds.ContainsIgnoreCase(tid))) : _currentEntries; public CompatibilityViewModel() {} @@ -39,11 +38,11 @@ namespace Ryujinx.Ava.Utilities.Compat { if (string.IsNullOrEmpty(searchTerm)) { - SetEntries(CompatibilityCsv.Shared.Entries); + SetEntries(CompatibilityCsv.Entries); return; } - SetEntries(CompatibilityCsv.Shared.Entries.Where(x => + SetEntries(CompatibilityCsv.Entries.Where(x => x.GameName.ContainsIgnoreCase(searchTerm) || x.TitleId.Check(tid => tid.ContainsIgnoreCase(searchTerm)))); } -- 2.47.1 From 292e27f0dac05c5d79fe71cb56eba95d0aa8a69a Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 9 Jan 2025 19:24:48 -0600 Subject: [PATCH 314/722] UI: dispose CSV reader when done + use explicit types --- src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index 8fc7aeb04..8b8f456ef 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -39,8 +39,8 @@ namespace Ryujinx.Ava.Utilities.Compat public static void LoadFromStream(Stream stream) { - var reader = Sep.Reader().From(stream); - var columnIndices = new ColumnIndices(reader.Header); + using SepReader reader = Sep.Reader().From(stream); + ColumnIndices columnIndices = new(reader.Header); Entries = reader .Enumerate(row => new CompatibilityEntry(ref columnIndices, row)) @@ -57,7 +57,7 @@ namespace Ryujinx.Ava.Utilities.Compat { public CompatibilityEntry(ref ColumnIndices indices, SepReader.Row row) { - var titleIdRow = ColStr(row[indices.TitleId]); + string titleIdRow = ColStr(row[indices.TitleId]); TitleId = !string.IsNullOrEmpty(titleIdRow) ? titleIdRow : default(Optional); @@ -100,7 +100,7 @@ namespace Ryujinx.Ava.Utilities.Compat public override string ToString() { - var sb = new StringBuilder("CompatibilityEntry: {"); + StringBuilder sb = new("CompatibilityEntry: {"); sb.Append($"{nameof(GameName)}=\"{GameName}\", "); sb.Append($"{nameof(TitleId)}={TitleId}, "); sb.Append($"{nameof(Labels)}=\"{Labels}\", "); @@ -161,8 +161,8 @@ namespace Ryujinx.Ava.Utilities.Compat if (value == string.Empty) return string.Empty; - var firstChar = value[0]; - var rest = value[1..]; + char firstChar = value[0]; + string rest = value[1..]; return $"{char.ToUpper(firstChar)}{rest}"; } -- 2.47.1 From c5574b41a127556cd800d413955de6a75213ca85 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 9 Jan 2025 19:44:24 -0600 Subject: [PATCH 315/722] UI: collapse LoadFromStream into static ctor pass the index get delegate to the struct instead of the entire header --- .../Utilities/Compat/CompatibilityCsv.cs | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index 8b8f456ef..b3812faa2 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -11,7 +11,7 @@ using System.Text; namespace Ryujinx.Ava.Utilities.Compat { - public struct ColumnIndices(SepReaderHeader header) + public struct ColumnIndices(Func getIndex) { public const string TitleIdCol = "\"title_id\""; public const string GameNameCol = "\"game_name\""; @@ -19,11 +19,11 @@ namespace Ryujinx.Ava.Utilities.Compat public const string StatusCol = "\"status\""; public const string LastUpdatedCol = "\"last_updated\""; - public readonly int TitleId = header.IndexOf(TitleIdCol); - public readonly int GameName = header.IndexOf(GameNameCol); - public readonly int Labels = header.IndexOf(LabelsCol); - public readonly int Status = header.IndexOf(StatusCol); - public readonly int LastUpdated = header.IndexOf(LastUpdatedCol); + public readonly int TitleId = getIndex(TitleIdCol); + public readonly int GameName = getIndex(GameNameCol); + public readonly int Labels = getIndex(LabelsCol); + public readonly int Status = getIndex(StatusCol); + public readonly int LastUpdated = getIndex(LastUpdatedCol); } public class CompatibilityCsv @@ -34,13 +34,8 @@ namespace Ryujinx.Ava.Utilities.Compat .GetManifestResourceStream("RyujinxGameCompatibilityList")!; csvStream.Position = 0; - LoadFromStream(csvStream); - } - - public static void LoadFromStream(Stream stream) - { - using SepReader reader = Sep.Reader().From(stream); - ColumnIndices columnIndices = new(reader.Header); + using SepReader reader = Sep.Reader().From(csvStream); + ColumnIndices columnIndices = new(reader.Header.IndexOf); Entries = reader .Enumerate(row => new CompatibilityEntry(ref columnIndices, row)) -- 2.47.1 From bdd890cf6f8b583d47946abe3988f158dac3140f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 9 Jan 2025 19:48:11 -0600 Subject: [PATCH 316/722] UI: logger function name --- src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index b3812faa2..742442714 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -42,7 +42,7 @@ namespace Ryujinx.Ava.Utilities.Compat .OrderBy(it => it.GameName) .ToArray(); - Logger.Debug?.Print(LogClass.UI, "Compatibility CSV loaded."); + Logger.Debug?.Print(LogClass.UI, "Compatibility CSV loaded.", "LoadCompatCsv"); } public static CompatibilityEntry[] Entries { get; private set; } -- 2.47.1 From 27993b789fbc6943410a06cbb849a0e0d7d648b8 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 9 Jan 2025 20:23:26 -0600 Subject: [PATCH 317/722] misc: chore: fix some compile warnings --- src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs | 6 +++--- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 5 ++++- src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs | 3 +-- src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs b/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs index a894f0246..99c6a0fce 100644 --- a/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs +++ b/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs @@ -12,8 +12,8 @@ namespace Ryujinx.Ava.UI.Helpers private static readonly Lazy _shared = new(() => new()); public static PlayabilityStatusConverter Shared => _shared.Value; - public object Convert(object? value, Type _, object? __, CultureInfo ___) => - value.Cast() switch + public object Convert(object value, Type _, object __, CultureInfo ___) + => value.Cast() switch { LocaleKeys.CompatibilityListNothing or LocaleKeys.CompatibilityListBoots or @@ -22,7 +22,7 @@ namespace Ryujinx.Ava.UI.Helpers _ => Brushes.ForestGreen }; - public object ConvertBack(object? value, Type _, object? __, CultureInfo ___) + public object ConvertBack(object value, Type _, object __, CultureInfo ___) => throw new NotSupportedException(); } } diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index e11d855a6..6ca82d38b 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -741,7 +741,10 @@ namespace Ryujinx.Ava.UI.ViewModels Applications.ToObservableChangeSet() .Filter(Filter) .Sort(GetComparer()) - .Bind(out _appsObservableList).AsObservableList(); +#pragma warning disable MVVMTK0034 + .Bind(out _appsObservableList) +#pragma warning enable MVVMTK0034 + .AsObservableList(); OnPropertyChanged(nameof(AppsObservableList)); } diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index 742442714..e3d630b60 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -3,7 +3,6 @@ using nietras.SeparatedValues; using Ryujinx.Ava.Common.Locale; using Ryujinx.Common.Logging; using System; -using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; @@ -11,7 +10,7 @@ using System.Text; namespace Ryujinx.Ava.Utilities.Compat { - public struct ColumnIndices(Func getIndex) + public struct ColumnIndices(Func, int> getIndex) { public const string TitleIdCol = "\"title_id\""; public const string GameNameCol = "\"game_name\""; diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs index 2d5f08868..841db23a8 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -42,7 +42,7 @@ namespace Ryujinx.Ava.Utilities.Compat InitializeComponent(); } - private void TextBox_OnTextChanged(object? sender, TextChangedEventArgs e) + private void TextBox_OnTextChanged(object sender, TextChangedEventArgs e) { if (DataContext is not CompatibilityViewModel cvm) return; -- 2.47.1 From 845c86f545ddd27e0bade490ff161886c7a587b6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 9 Jan 2025 21:14:35 -0600 Subject: [PATCH 318/722] misc: chore: cleanup AppletMetadata.CanStart --- src/Ryujinx/Utilities/AppletMetadata.cs | 26 ++++++++++++------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/Ryujinx/Utilities/AppletMetadata.cs b/src/Ryujinx/Utilities/AppletMetadata.cs index 82baed7d3..42c23ee12 100644 --- a/src/Ryujinx/Utilities/AppletMetadata.cs +++ b/src/Ryujinx/Utilities/AppletMetadata.cs @@ -32,29 +32,27 @@ namespace Ryujinx.Ava.Utilities public string GetContentPath(ContentManager contentManager) => (contentManager ?? _contentManager) - .GetInstalledContentPath(ProgramId, StorageId.BuiltInSystem, NcaContentType.Program); + ?.GetInstalledContentPath(ProgramId, StorageId.BuiltInSystem, NcaContentType.Program); public bool CanStart(ContentManager contentManager, out ApplicationData appData, out BlitStruct appControl) { contentManager ??= _contentManager; - if (contentManager == null) - { - appData = null; - appControl = new BlitStruct(0); - return false; - } + if (contentManager == null) + goto BadData; + + string contentPath = GetContentPath(contentManager); + if (string.IsNullOrEmpty(contentPath)) + goto BadData; appData = new() { Name = Name, Id = ProgramId, Path = GetContentPath(contentManager) }; - - if (string.IsNullOrEmpty(appData.Path)) - { - appControl = new BlitStruct(0); - return false; - } - appControl = StructHelpers.CreateCustomNacpData(Name, Version); return true; + + BadData: + appData = null; + appControl = new BlitStruct(0); + return false; } } } -- 2.47.1 From cca429d46a15e8b5fdcff0d548c10e60c0d6055f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 9 Jan 2025 21:42:54 -0600 Subject: [PATCH 319/722] misc: chore: restore not enable --- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 6ca82d38b..17b9ea98c 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -743,7 +743,7 @@ namespace Ryujinx.Ava.UI.ViewModels .Sort(GetComparer()) #pragma warning disable MVVMTK0034 .Bind(out _appsObservableList) -#pragma warning enable MVVMTK0034 +#pragma warning restore MVVMTK0034 .AsObservableList(); OnPropertyChanged(nameof(AppsObservableList)); -- 2.47.1 From 918ec1bde3b84650e0ad18e0fe712381dc1276f9 Mon Sep 17 00:00:00 2001 From: LotP1 <68976644+LotP1@users.noreply.github.com> Date: Fri, 10 Jan 2025 04:43:18 +0100 Subject: [PATCH 320/722] cores rework (#505) This PR changes the core count to be defined in the device instead of being a const value. This is mostly a change for future features I want to implement and should not impact any functionality. The console will now log the range of cores requested from the application, and for now, if the requested range is not 0 to 2 (the 3 cores used for application emulation), it will give an error message which tells the user to contact me on discord. I'm doing this because I'm interested in finding applications/games that don't use 3 cores and the error will be removed in the future once I've gotten enough data. --- src/Ryujinx.HLE/HOS/Horizon.cs | 2 +- src/Ryujinx.HLE/HOS/Kernel/KernelContext.cs | 1 + src/Ryujinx.HLE/HOS/Kernel/KernelStatic.cs | 2 +- src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs | 2 +- .../HOS/Kernel/Process/KProcessCapabilities.cs | 17 +++++++++++------ .../HOS/Kernel/SupervisorCall/Syscall.cs | 2 +- .../HOS/Kernel/Threading/KScheduler.cs | 18 +++++++++++++----- src/Ryujinx.HLE/HOS/Services/ServerBase.cs | 6 +++--- src/Ryujinx.HLE/Switch.cs | 2 ++ src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 2 +- 10 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Horizon.cs b/src/Ryujinx.HLE/HOS/Horizon.cs index f9c5ddecf..627b649df 100644 --- a/src/Ryujinx.HLE/HOS/Horizon.cs +++ b/src/Ryujinx.HLE/HOS/Horizon.cs @@ -284,7 +284,7 @@ namespace Ryujinx.HLE.HOS ProcessCreationInfo creationInfo = new("Service", 1, 0, 0x8000000, 1, Flags, 0, 0); uint[] defaultCapabilities = { - 0x030363F7, + (((uint)KScheduler.CpuCoresCount - 1) << 24) + (((uint)KScheduler.CpuCoresCount - 1) << 16) + 0x63F7u, 0x1FFFFFCF, 0x207FFFEF, 0x47E0060F, diff --git a/src/Ryujinx.HLE/HOS/Kernel/KernelContext.cs b/src/Ryujinx.HLE/HOS/Kernel/KernelContext.cs index 89d788c54..7e2e9cacc 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/KernelContext.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/KernelContext.cs @@ -63,6 +63,7 @@ namespace Ryujinx.HLE.HOS.Kernel TickSource = tickSource; Device = device; Memory = memory; + KScheduler.CpuCoresCount = device.CpuCoresCount; Running = true; diff --git a/src/Ryujinx.HLE/HOS/Kernel/KernelStatic.cs b/src/Ryujinx.HLE/HOS/Kernel/KernelStatic.cs index f5ecba752..e05fc8397 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/KernelStatic.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/KernelStatic.cs @@ -37,7 +37,7 @@ namespace Ryujinx.HLE.HOS.Kernel return result; } - process.DefaultCpuCore = 3; + process.DefaultCpuCore = KScheduler.CpuCoresCount - 1; context.Processes.TryAdd(process.Pid, process); diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs index b4aa5ca5c..82c3d2e70 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs @@ -277,7 +277,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process return result; } - result = Capabilities.InitializeForUser(capabilities, MemoryManager); + result = Capabilities.InitializeForUser(capabilities, MemoryManager, IsApplication); if (result != Result.Success) { diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs index ebab67bb8..5c9f4f100 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs @@ -35,15 +35,15 @@ namespace Ryujinx.HLE.HOS.Kernel.Process DebuggingFlags &= ~3u; KernelReleaseVersion = KProcess.KernelVersionPacked; - return Parse(capabilities, memoryManager); + return Parse(capabilities, memoryManager, false); } - public Result InitializeForUser(ReadOnlySpan capabilities, KPageTableBase memoryManager) + public Result InitializeForUser(ReadOnlySpan capabilities, KPageTableBase memoryManager, bool isApplication) { - return Parse(capabilities, memoryManager); + return Parse(capabilities, memoryManager, isApplication); } - private Result Parse(ReadOnlySpan capabilities, KPageTableBase memoryManager) + private Result Parse(ReadOnlySpan capabilities, KPageTableBase memoryManager, bool isApplication) { int mask0 = 0; int mask1 = 0; @@ -54,7 +54,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process if (cap.GetCapabilityType() != CapabilityType.MapRange) { - Result result = ParseCapability(cap, ref mask0, ref mask1, memoryManager); + Result result = ParseCapability(cap, ref mask0, ref mask1, memoryManager, isApplication); if (result != Result.Success) { @@ -120,7 +120,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process return Result.Success; } - private Result ParseCapability(uint cap, ref int mask0, ref int mask1, KPageTableBase memoryManager) + private Result ParseCapability(uint cap, ref int mask0, ref int mask1, KPageTableBase memoryManager, bool isApplication) { CapabilityType code = cap.GetCapabilityType(); @@ -176,6 +176,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Process AllowedCpuCoresMask = GetMaskFromMinMax(lowestCpuCore, highestCpuCore); AllowedThreadPriosMask = GetMaskFromMinMax(lowestThreadPrio, highestThreadPrio); + if (isApplication && lowestCpuCore == 0 && highestCpuCore != 2) + Ryujinx.Common.Logging.Logger.Error?.Print(Ryujinx.Common.Logging.LogClass.Application, $"Application requested cores with index range {lowestCpuCore} to {highestCpuCore}! Report this to @LotP on the Ryujinx/Ryubing discord server (discord.gg/ryujinx)!"); + else if (isApplication) + Ryujinx.Common.Logging.Logger.Info?.Print(Ryujinx.Common.Logging.LogClass.Application, $"Application requested cores with index range {lowestCpuCore} to {highestCpuCore}"); + break; } diff --git a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs index 2f487243d..1b6433af6 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs @@ -2683,7 +2683,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall return KernelResult.InvalidCombination; } - if ((uint)preferredCore > 3) + if ((uint)preferredCore > KScheduler.CpuCoresCount - 1) { if ((preferredCore | 2) != -1) { diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KScheduler.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KScheduler.cs index 8ef77902c..19f1b8be0 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KScheduler.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KScheduler.cs @@ -9,13 +9,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading partial class KScheduler : IDisposable { public const int PrioritiesCount = 64; - public const int CpuCoresCount = 4; + public static int CpuCoresCount; private const int RoundRobinTimeQuantumMs = 10; - private static readonly int[] _preemptionPriorities = { 59, 59, 59, 63 }; - - private static readonly int[] _srcCoresHighestPrioThreads = new int[CpuCoresCount]; + private static int[] _srcCoresHighestPrioThreads; private readonly KernelContext _context; private readonly int _coreId; @@ -47,6 +45,16 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading _coreId = coreId; _currentThread = null; + + if (_srcCoresHighestPrioThreads == null) + { + _srcCoresHighestPrioThreads = new int[CpuCoresCount]; + } + } + + private static int PreemptionPriorities(int index) + { + return index == CpuCoresCount - 1 ? 63 : 59; } public static ulong SelectThreads(KernelContext context) @@ -437,7 +445,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading for (int core = 0; core < CpuCoresCount; core++) { - RotateScheduledQueue(context, core, _preemptionPriorities[core]); + RotateScheduledQueue(context, core, PreemptionPriorities(core)); } context.CriticalSection.Leave(); diff --git a/src/Ryujinx.HLE/HOS/Services/ServerBase.cs b/src/Ryujinx.HLE/HOS/Services/ServerBase.cs index f67699b90..40329aa36 100644 --- a/src/Ryujinx.HLE/HOS/Services/ServerBase.cs +++ b/src/Ryujinx.HLE/HOS/Services/ServerBase.cs @@ -24,14 +24,14 @@ namespace Ryujinx.HLE.HOS.Services // not large enough. private const int PointerBufferSize = 0x8000; - private readonly static uint[] _defaultCapabilities = { - 0x030363F7, + private static uint[] _defaultCapabilities => [ + (((uint)KScheduler.CpuCoresCount - 1) << 24) + (((uint)KScheduler.CpuCoresCount - 1) << 16) + 0x63F7u, 0x1FFFFFCF, 0x207FFFEF, 0x47E0060F, 0x0048BFFF, 0x01007FFF, - }; + ]; // The amount of time Dispose() will wait to Join() the thread executing the ServerLoop() private static readonly TimeSpan _threadJoinTimeout = TimeSpan.FromSeconds(3); diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index 25e65354f..e15fab03a 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -32,6 +32,8 @@ namespace Ryujinx.HLE public TamperMachine TamperMachine { get; } public IHostUIHandler UIHandler { get; } + public int CpuCoresCount = 4; //Switch 1 has 4 cores + public VSyncMode VSyncMode { get; set; } = VSyncMode.Switch; public bool CustomVSyncIntervalEnabled { get; set; } = false; public int CustomVSyncInterval { get; set; } diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index 19d2fb94e..7d75ac7c1 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -1,4 +1,4 @@ -using DiscordRPC; +using DiscordRPC; using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.SDL2; using Ryujinx.Ava; -- 2.47.1 From 4a4ea557de4b36c27abd8e401494f3b7ed50d41e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 10 Jan 2025 01:43:34 -0600 Subject: [PATCH 321/722] UI: compat: show last updated date on entry hover --- Directory.Packages.props | 2 +- src/Ryujinx/Assets/locales.json | 25 +++++++++++++++++++ .../Utilities/Compat/CompatibilityCsv.cs | 8 +++++- .../Utilities/Compat/CompatibilityList.axaml | 7 ++++-- 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 203f40588..a480d3d29 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -42,7 +42,7 @@ - + diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 0951ad632..b90e16855 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -22597,6 +22597,31 @@ "zh_TW": "" } }, + { + "ID": "CompatibilityListLastUpdated", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Last updated: {0}", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "CompatibilityListWarning", "Translations": { diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index e3d630b60..676cf1a52 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -1,4 +1,5 @@ using Gommon; +using Humanizer; using nietras.SeparatedValues; using Ryujinx.Ava.Common.Locale; using Ryujinx.Common.Logging; @@ -83,6 +84,9 @@ namespace Ryujinx.Ava.Utilities.Compat public LocaleKeys? Status { get; } public DateTime LastUpdated { get; } + public string LocalizedLastUpdated => + LocaleManager.FormatDynamicValue(LocaleKeys.CompatibilityListLastUpdated, LastUpdated.Humanize()); + public string LocalizedStatus => LocaleManager.Instance[Status!.Value]; public string FormattedTitleId => TitleId .OrElse(new string(' ', 16)); @@ -97,7 +101,9 @@ namespace Ryujinx.Ava.Utilities.Compat StringBuilder sb = new("CompatibilityEntry: {"); sb.Append($"{nameof(GameName)}=\"{GameName}\", "); sb.Append($"{nameof(TitleId)}={TitleId}, "); - sb.Append($"{nameof(Labels)}=\"{Labels}\", "); + sb.Append($"{nameof(Labels)}={ + Labels.FormatCollection(it => $"\"{it}\"", separator: ", ", prefix: "[", suffix: "]") + }, "); sb.Append($"{nameof(Status)}=\"{Status}\", "); sb.Append($"{nameof(LastUpdated)}=\"{LastUpdated}\""); sb.Append('}'); diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml index 8e14c3904..73ec84c53 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml @@ -44,8 +44,11 @@ ItemsSource="{Binding CurrentEntries}"> - + Date: Fri, 10 Jan 2025 20:23:47 -0600 Subject: [PATCH 322/722] UI: Show play time in one time unit, maxing out at hours. --- .../UI/Controls/ApplicationListView.axaml | 5 +-- .../UI/Windows/SettingsWindow.axaml.cs | 7 ++++ .../Utilities/AppLibrary/ApplicationData.cs | 2 ++ src/Ryujinx/Utilities/ValueFormatUtils.cs | 36 ++++++++++--------- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml b/src/Ryujinx/UI/Controls/ApplicationListView.axaml index 41a8af0e0..764a33cc0 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml @@ -133,12 +133,13 @@ Spacing="5"> ValueFormatUtils.FormatTimeSpan(TimePlayed); + public bool HasPlayedPreviously => TimePlayedString != string.Empty; + public string LastPlayedString => ValueFormatUtils.FormatDateTime(LastPlayed)?.Replace(" ", "\n"); public string FileSizeString => ValueFormatUtils.FormatFileSize(FileSize); diff --git a/src/Ryujinx/Utilities/ValueFormatUtils.cs b/src/Ryujinx/Utilities/ValueFormatUtils.cs index 944cfbf8a..f5cdb4125 100644 --- a/src/Ryujinx/Utilities/ValueFormatUtils.cs +++ b/src/Ryujinx/Utilities/ValueFormatUtils.cs @@ -1,3 +1,5 @@ +using Humanizer; +using Humanizer.Localisation; using Ryujinx.Ava.Common.Locale; using System; using System.Globalization; @@ -31,7 +33,7 @@ namespace Ryujinx.Ava.Utilities Gigabytes = 9, Terabytes = 10, Petabytes = 11, - Exabytes = 12, + Exabytes = 12 } private const double SizeBase10 = 1000; @@ -48,22 +50,24 @@ namespace Ryujinx.Ava.Utilities public static string FormatTimeSpan(TimeSpan? timeSpan) { if (!timeSpan.HasValue || timeSpan.Value.TotalSeconds < 1) - { - // Game was never played - return TimeSpan.Zero.ToString("c", CultureInfo.InvariantCulture); - } + return string.Empty; + + if (timeSpan.Value.TotalSeconds < 60) + return timeSpan.Value.Humanize(1, + countEmptyUnits: false, + maxUnit: TimeUnit.Second, + minUnit: TimeUnit.Second); - if (timeSpan.Value.TotalDays < 1) - { - // Game was played for less than a day - return timeSpan.Value.ToString("c", CultureInfo.InvariantCulture); - } - - // Game was played for more than a day - TimeSpan onlyTime = timeSpan.Value.Subtract(TimeSpan.FromDays(timeSpan.Value.Days)); - string onlyTimeString = onlyTime.ToString("c", CultureInfo.InvariantCulture); - - return $"{timeSpan.Value.Days}d, {onlyTimeString}"; + if (timeSpan.Value.TotalMinutes < 60) + return timeSpan.Value.Humanize(1, + countEmptyUnits: false, + maxUnit: TimeUnit.Minute, + minUnit: TimeUnit.Minute); + + return timeSpan.Value.Humanize(1, + countEmptyUnits: false, + maxUnit: TimeUnit.Hour, + minUnit: TimeUnit.Hour); } /// -- 2.47.1 From cc95e80ee9c6fd563ed9313dc80861ae120893ad Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 10 Jan 2025 20:24:53 -0600 Subject: [PATCH 323/722] misc: chore: Move converters into a directory in Helpers. Namespace unchanged --- .../UI/Helpers/{ => Converters}/BitmapArrayValueConverter.cs | 0 .../Helpers/{ => Converters}/DownloadableContentLabelConverter.cs | 0 src/Ryujinx/UI/Helpers/{ => Converters}/GlyphValueConverter.cs | 0 src/Ryujinx/UI/Helpers/{ => Converters}/KeyValueConverter.cs | 0 .../UI/Helpers/{ => Converters}/MultiplayerInfoConverter.cs | 0 .../UI/Helpers/{ => Converters}/PlayabilityStatusConverter.cs | 0 src/Ryujinx/UI/Helpers/{ => Converters}/TimeZoneConverter.cs | 0 .../UI/Helpers/{ => Converters}/TitleUpdateLabelConverter.cs | 0 .../{ => Converters}/XCITrimmerFileSpaceSavingsConverter.cs | 0 .../UI/Helpers/{ => Converters}/XCITrimmerFileStatusConverter.cs | 0 .../{ => Converters}/XCITrimmerFileStatusDetailConverter.cs | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename src/Ryujinx/UI/Helpers/{ => Converters}/BitmapArrayValueConverter.cs (100%) rename src/Ryujinx/UI/Helpers/{ => Converters}/DownloadableContentLabelConverter.cs (100%) rename src/Ryujinx/UI/Helpers/{ => Converters}/GlyphValueConverter.cs (100%) rename src/Ryujinx/UI/Helpers/{ => Converters}/KeyValueConverter.cs (100%) rename src/Ryujinx/UI/Helpers/{ => Converters}/MultiplayerInfoConverter.cs (100%) rename src/Ryujinx/UI/Helpers/{ => Converters}/PlayabilityStatusConverter.cs (100%) rename src/Ryujinx/UI/Helpers/{ => Converters}/TimeZoneConverter.cs (100%) rename src/Ryujinx/UI/Helpers/{ => Converters}/TitleUpdateLabelConverter.cs (100%) rename src/Ryujinx/UI/Helpers/{ => Converters}/XCITrimmerFileSpaceSavingsConverter.cs (100%) rename src/Ryujinx/UI/Helpers/{ => Converters}/XCITrimmerFileStatusConverter.cs (100%) rename src/Ryujinx/UI/Helpers/{ => Converters}/XCITrimmerFileStatusDetailConverter.cs (100%) diff --git a/src/Ryujinx/UI/Helpers/BitmapArrayValueConverter.cs b/src/Ryujinx/UI/Helpers/Converters/BitmapArrayValueConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/BitmapArrayValueConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/BitmapArrayValueConverter.cs diff --git a/src/Ryujinx/UI/Helpers/DownloadableContentLabelConverter.cs b/src/Ryujinx/UI/Helpers/Converters/DownloadableContentLabelConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/DownloadableContentLabelConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/DownloadableContentLabelConverter.cs diff --git a/src/Ryujinx/UI/Helpers/GlyphValueConverter.cs b/src/Ryujinx/UI/Helpers/Converters/GlyphValueConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/GlyphValueConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/GlyphValueConverter.cs diff --git a/src/Ryujinx/UI/Helpers/KeyValueConverter.cs b/src/Ryujinx/UI/Helpers/Converters/KeyValueConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/KeyValueConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/KeyValueConverter.cs diff --git a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs diff --git a/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs b/src/Ryujinx/UI/Helpers/Converters/PlayabilityStatusConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/PlayabilityStatusConverter.cs diff --git a/src/Ryujinx/UI/Helpers/TimeZoneConverter.cs b/src/Ryujinx/UI/Helpers/Converters/TimeZoneConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/TimeZoneConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/TimeZoneConverter.cs diff --git a/src/Ryujinx/UI/Helpers/TitleUpdateLabelConverter.cs b/src/Ryujinx/UI/Helpers/Converters/TitleUpdateLabelConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/TitleUpdateLabelConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/TitleUpdateLabelConverter.cs diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs b/src/Ryujinx/UI/Helpers/Converters/XCITrimmerFileSpaceSavingsConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/XCITrimmerFileSpaceSavingsConverter.cs diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs b/src/Ryujinx/UI/Helpers/Converters/XCITrimmerFileStatusConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/XCITrimmerFileStatusConverter.cs diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs b/src/Ryujinx/UI/Helpers/Converters/XCITrimmerFileStatusDetailConverter.cs similarity index 100% rename from src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs rename to src/Ryujinx/UI/Helpers/Converters/XCITrimmerFileStatusDetailConverter.cs -- 2.47.1 From de341b285bc2f816d1c90b91c160ed2f343736c7 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 10 Jan 2025 23:15:37 -0600 Subject: [PATCH 324/722] misc: use ObservableProperty on HotkeyConfig fields --- src/Ryujinx/UI/Models/Input/HotkeyConfig.cs | 160 ++++---------------- 1 file changed, 29 insertions(+), 131 deletions(-) diff --git a/src/Ryujinx/UI/Models/Input/HotkeyConfig.cs b/src/Ryujinx/UI/Models/Input/HotkeyConfig.cs index 4c7a6bd02..40f53c673 100644 --- a/src/Ryujinx/UI/Models/Input/HotkeyConfig.cs +++ b/src/Ryujinx/UI/Models/Input/HotkeyConfig.cs @@ -1,152 +1,53 @@ +using CommunityToolkit.Mvvm.ComponentModel; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Common.Configuration.Hid; namespace Ryujinx.Ava.UI.Models.Input { - public class HotkeyConfig : BaseModel + public partial class HotkeyConfig : BaseModel { - private Key _toggleVSyncMode; - public Key ToggleVSyncMode - { - get => _toggleVSyncMode; - set - { - _toggleVSyncMode = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _toggleVSyncMode; - private Key _screenshot; - public Key Screenshot - { - get => _screenshot; - set - { - _screenshot = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _screenshot; - private Key _showUI; - public Key ShowUI - { - get => _showUI; - set - { - _showUI = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _showUI; - private Key _pause; - public Key Pause - { - get => _pause; - set - { - _pause = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _pause; - private Key _toggleMute; - public Key ToggleMute - { - get => _toggleMute; - set - { - _toggleMute = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _toggleMute; - private Key _resScaleUp; - public Key ResScaleUp - { - get => _resScaleUp; - set - { - _resScaleUp = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _resScaleUp; - private Key _resScaleDown; - public Key ResScaleDown - { - get => _resScaleDown; - set - { - _resScaleDown = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _resScaleDown; - private Key _volumeUp; - public Key VolumeUp - { - get => _volumeUp; - set - { - _volumeUp = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _volumeUp; - private Key _volumeDown; - public Key VolumeDown - { - get => _volumeDown; - set - { - _volumeDown = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _volumeDown; - private Key _customVSyncIntervalIncrement; - public Key CustomVSyncIntervalIncrement - { - get => _customVSyncIntervalIncrement; - set - { - _customVSyncIntervalIncrement = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _customVSyncIntervalIncrement; - private Key _customVSyncIntervalDecrement; - public Key CustomVSyncIntervalDecrement - { - get => _customVSyncIntervalDecrement; - set - { - _customVSyncIntervalDecrement = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Key _customVSyncIntervalDecrement; public HotkeyConfig(KeyboardHotkeys config) { - if (config != null) - { - ToggleVSyncMode = config.ToggleVSyncMode; - Screenshot = config.Screenshot; - ShowUI = config.ShowUI; - Pause = config.Pause; - ToggleMute = config.ToggleMute; - ResScaleUp = config.ResScaleUp; - ResScaleDown = config.ResScaleDown; - VolumeUp = config.VolumeUp; - VolumeDown = config.VolumeDown; - CustomVSyncIntervalIncrement = config.CustomVSyncIntervalIncrement; - CustomVSyncIntervalDecrement = config.CustomVSyncIntervalDecrement; - } + if (config == null) + return; + + ToggleVSyncMode = config.ToggleVSyncMode; + Screenshot = config.Screenshot; + ShowUI = config.ShowUI; + Pause = config.Pause; + ToggleMute = config.ToggleMute; + ResScaleUp = config.ResScaleUp; + ResScaleDown = config.ResScaleDown; + VolumeUp = config.VolumeUp; + VolumeDown = config.VolumeDown; + CustomVSyncIntervalIncrement = config.CustomVSyncIntervalIncrement; + CustomVSyncIntervalDecrement = config.CustomVSyncIntervalDecrement; } - public KeyboardHotkeys GetConfig() - { - var config = new KeyboardHotkeys + public KeyboardHotkeys GetConfig() => + new() { ToggleVSyncMode = ToggleVSyncMode, Screenshot = Screenshot, @@ -160,8 +61,5 @@ namespace Ryujinx.Ava.UI.Models.Input CustomVSyncIntervalIncrement = CustomVSyncIntervalIncrement, CustomVSyncIntervalDecrement = CustomVSyncIntervalDecrement, }; - - return config; - } } } -- 2.47.1 From 3141c560fbfab4f7080c4131dfc975d38bfce6a7 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 10 Jan 2025 23:15:55 -0600 Subject: [PATCH 325/722] misc: chore: remove sender parameter from LdnGameData receieved event --- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 9 +++------ src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs | 8 ++++---- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index e5a815b28..2aaac4098 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -164,7 +164,7 @@ namespace Ryujinx.Ava.UI.Windows }); } - private void ApplicationLibrary_LdnGameDataReceived(object sender, LdnGameDataReceivedEventArgs e) + private void ApplicationLibrary_LdnGameDataReceived(LdnGameDataReceivedEventArgs e) { Dispatcher.UIThread.Post(() => { @@ -408,13 +408,10 @@ namespace Ryujinx.Ava.UI.Windows { StatusBarView.VolumeStatus.Click += VolumeStatus_CheckedChanged; + ApplicationGrid.DataContext = ApplicationList.DataContext = ViewModel; + ApplicationGrid.ApplicationOpened += Application_Opened; - - ApplicationGrid.DataContext = ViewModel; - ApplicationList.ApplicationOpened += Application_Opened; - - ApplicationList.DataContext = ViewModel; } private void SetWindowSizePosition() diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index e79602eaf..41bcff129 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -45,7 +45,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary public const string DefaultLanPlayWebHost = "ryuldnweb.vudjun.com"; public Language DesiredLanguage { get; set; } public event EventHandler ApplicationCountUpdated; - public event EventHandler LdnGameDataReceived; + public event Action LdnGameDataReceived; public readonly IObservableCache Applications; public readonly IObservableCache<(TitleUpdateModel TitleUpdate, bool IsSelected), TitleUpdateModel> TitleUpdates; @@ -779,7 +779,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary using HttpClient httpClient = new HttpClient(); string ldnGameDataArrayString = await httpClient.GetStringAsync($"https://{ldnWebHost}/api/public_games"); ldnGameDataArray = JsonHelper.Deserialize(ldnGameDataArrayString, _ldnDataSerializerContext.IEnumerableLdnGameData); - LdnGameDataReceived?.Invoke(null, new LdnGameDataReceivedEventArgs + LdnGameDataReceived?.Invoke(new LdnGameDataReceivedEventArgs { LdnData = ldnGameDataArray }); @@ -787,7 +787,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary catch (Exception ex) { Logger.Warning?.Print(LogClass.Application, $"Failed to fetch the public games JSON from the API. Player and game count in the game list will be unavailable.\n{ex.Message}"); - LdnGameDataReceived?.Invoke(null, new LdnGameDataReceivedEventArgs + LdnGameDataReceived?.Invoke(new LdnGameDataReceivedEventArgs { LdnData = Array.Empty() }); @@ -795,7 +795,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary } else { - LdnGameDataReceived?.Invoke(null, new LdnGameDataReceivedEventArgs + LdnGameDataReceived?.Invoke(new LdnGameDataReceivedEventArgs { LdnData = Array.Empty() }); -- 2.47.1 From d4a7ee25eaf04a99c81ac56e3311beefa4a1aa5b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 10 Jan 2025 23:23:05 -0600 Subject: [PATCH 326/722] misc: chore: use ObservableProperty on input view models --- .../Input/ControllerInputViewModel.cs | 25 +---- .../UI/ViewModels/Input/InputViewModel.cs | 30 +----- .../Input/KeyboardInputViewModel.cs | 25 +---- .../ViewModels/Input/MotionInputViewModel.cs | 92 +++---------------- .../ViewModels/Input/RumbleInputViewModel.cs | 26 +----- 5 files changed, 28 insertions(+), 170 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs index 6ee79a371..482fe2981 100644 --- a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs @@ -1,21 +1,13 @@ using Avalonia.Svg.Skia; +using CommunityToolkit.Mvvm.ComponentModel; using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Views.Input; namespace Ryujinx.Ava.UI.ViewModels.Input { - public class ControllerInputViewModel : BaseModel + public partial class ControllerInputViewModel : BaseModel { - private GamepadInputConfig _config; - public GamepadInputConfig Config - { - get => _config; - set - { - _config = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private GamepadInputConfig _config; private bool _isLeft; public bool IsLeft @@ -43,16 +35,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool HasSides => IsLeft ^ IsRight; - private SvgImage _image; - public SvgImage Image - { - get => _image; - set - { - _image = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private SvgImage _image; public readonly InputViewModel ParentModel; diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 16f8e46fa..05f479d9f 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -1,9 +1,8 @@ -using Avalonia; using Avalonia.Collections; using Avalonia.Controls; -using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Svg.Skia; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Input; using Ryujinx.Ava.UI.Helpers; @@ -32,7 +31,7 @@ using Key = Ryujinx.Common.Configuration.Hid.Key; namespace Ryujinx.Ava.UI.ViewModels.Input { - public class InputViewModel : BaseModel, IDisposable + public partial class InputViewModel : BaseModel, IDisposable { private const string Disabled = "disabled"; private const string ProControllerResource = "Ryujinx/Assets/Icons/Controller_ProCon.svg"; @@ -48,8 +47,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Input private int _controller; private string _controllerImage; private int _device; - private object _configViewModel; - private string _profileName; + [ObservableProperty] private object _configViewModel; + [ObservableProperty] private string _profileName; private bool _isLoaded; private static readonly InputConfigJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); @@ -73,17 +72,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool IsModified { get; set; } public event Action NotifyChangesEvent; - public object ConfigViewModel - { - get => _configViewModel; - set - { - _configViewModel = value; - - OnPropertyChanged(); - } - } - public PlayerIndex PlayerIdChoose { get => _playerIdChoose; @@ -200,16 +188,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Input } } - public string ProfileName - { - get => _profileName; set - { - _profileName = value; - - OnPropertyChanged(); - } - } - public int Device { get => _device; diff --git a/src/Ryujinx/UI/ViewModels/Input/KeyboardInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/KeyboardInputViewModel.cs index 0b530eb09..5ff9bb578 100644 --- a/src/Ryujinx/UI/ViewModels/Input/KeyboardInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/KeyboardInputViewModel.cs @@ -1,20 +1,12 @@ using Avalonia.Svg.Skia; +using CommunityToolkit.Mvvm.ComponentModel; using Ryujinx.Ava.UI.Models.Input; namespace Ryujinx.Ava.UI.ViewModels.Input { - public class KeyboardInputViewModel : BaseModel + public partial class KeyboardInputViewModel : BaseModel { - private KeyboardInputConfig _config; - public KeyboardInputConfig Config - { - get => _config; - set - { - _config = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private KeyboardInputConfig _config; private bool _isLeft; public bool IsLeft @@ -42,16 +34,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool HasSides => IsLeft ^ IsRight; - private SvgImage _image; - public SvgImage Image - { - get => _image; - set - { - _image = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private SvgImage _image; public readonly InputViewModel ParentModel; diff --git a/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs index c9ed8f2d4..7538c0f16 100644 --- a/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs @@ -1,93 +1,23 @@ +using CommunityToolkit.Mvvm.ComponentModel; + namespace Ryujinx.Ava.UI.ViewModels.Input { - public class MotionInputViewModel : BaseModel + public partial class MotionInputViewModel : BaseModel { - private int _slot; - public int Slot - { - get => _slot; - set - { - _slot = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private int _slot; - private int _altSlot; - public int AltSlot - { - get => _altSlot; - set - { - _altSlot = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private int _altSlot; - private string _dsuServerHost; - public string DsuServerHost - { - get => _dsuServerHost; - set - { - _dsuServerHost = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private string _dsuServerHost; - private int _dsuServerPort; - public int DsuServerPort - { - get => _dsuServerPort; - set - { - _dsuServerPort = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private int _dsuServerPort; - private bool _mirrorInput; - public bool MirrorInput - { - get => _mirrorInput; - set - { - _mirrorInput = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private bool _mirrorInput; - private int _sensitivity; - public int Sensitivity - { - get => _sensitivity; - set - { - _sensitivity = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private int _sensitivity; - private double _gryoDeadzone; - public double GyroDeadzone - { - get => _gryoDeadzone; - set - { - _gryoDeadzone = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private double _gryoDeadzone; - private bool _enableCemuHookMotion; - public bool EnableCemuHookMotion - { - get => _enableCemuHookMotion; - set - { - _enableCemuHookMotion = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private bool _enableCemuHookMotion; } } diff --git a/src/Ryujinx/UI/ViewModels/Input/RumbleInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/RumbleInputViewModel.cs index 8ad33cf4c..c4158fced 100644 --- a/src/Ryujinx/UI/ViewModels/Input/RumbleInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/RumbleInputViewModel.cs @@ -1,27 +1,11 @@ +using CommunityToolkit.Mvvm.ComponentModel; + namespace Ryujinx.Ava.UI.ViewModels.Input { - public class RumbleInputViewModel : BaseModel + public partial class RumbleInputViewModel : BaseModel { - private float _strongRumble; - public float StrongRumble - { - get => _strongRumble; - set - { - _strongRumble = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private float _strongRumble; - private float _weakRumble; - public float WeakRumble - { - get => _weakRumble; - set - { - _weakRumble = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private float _weakRumble; } } -- 2.47.1 From 41c8fd8194076a3dd82a21ff98a905d3eb728276 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 10 Jan 2025 23:23:53 -0600 Subject: [PATCH 327/722] misc: chore: lol this field was misspelled --- src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs index 7538c0f16..ba8686831 100644 --- a/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/MotionInputViewModel.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input [ObservableProperty] private int _sensitivity; - [ObservableProperty] private double _gryoDeadzone; + [ObservableProperty] private double _gyroDeadzone; [ObservableProperty] private bool _enableCemuHookMotion; } -- 2.47.1 From c5091f499e0c7b493017846a7d92120dafde6da3 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 11 Jan 2025 00:38:32 -0600 Subject: [PATCH 328/722] docs: compat: The House of the Dead: Remake Playable --- docs/compatibility.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index f116b4474..239e733c9 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -3420,3 +3420,4 @@ 0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",status-ingame;crash,ingame,2023-04-25 19:43:52.000 0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",status-ingame;crash,ingame,2024-02-12 20:58:31.000 010064801A01C000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",status-nothing;crash,nothing,2023-10-30 22:37:40.000 +010088401495E000,"The House of the Dead: Remake",status-playable,playable,2025-01-11 00:36:01 -- 2.47.1 From 4e0aafd005b2567544d6a1e66a90ba49d021d148 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 11 Jan 2025 01:18:10 -0600 Subject: [PATCH 329/722] docs: compat: Trim redundant/duplicate information to save space --- docs/compatibility.csv | 6844 ++++++++++++++++++++-------------------- 1 file changed, 3422 insertions(+), 3422 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 239e733c9..b12c7e500 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -1,3423 +1,3423 @@ "title_id","game_name","labels","status","last_updated" -010099F00EF3E000,"-KLAUS-",nvdec;status-playable,playable,2020-06-27 13:27:30.000 -0100BA9014A02000,".hack//G.U. Last Recode",deadlock;status-boots,boots,2022-03-12 19:15:47.000 -010098800C4B0000,"'n Verlore Verstand",slow;status-ingame,ingame,2020-12-10 18:00:28.000 -01009A500E3DA000,"'n Verlore Verstand - Demo",status-playable,playable,2021-02-09 00:13:32.000 -0100A5D01174C000,"/Connection Haunted ",slow;status-playable,playable,2020-12-10 18:57:14.000 -01001E500F7FC000,"#Funtime",status-playable,playable,2020-12-10 16:54:35.000 -01000E50134A4000,"#Halloween, Super Puzzles Dream",nvdec;status-playable,playable,2020-12-10 20:43:58.000 -01004D100C510000,"#KILLALLZOMBIES",slow;status-playable,playable,2020-12-16 01:50:25.000 -0100325012C12000,"#NoLimitFantasy, Super Puzzles Dream",nvdec;status-playable,playable,2020-12-12 17:21:32.000 -01005D400E5C8000,"#RaceDieRun",status-playable,playable,2020-07-04 20:23:16.000 -01003DB011AE8000,"#womenUp, Super Puzzles Dream",status-playable,playable,2020-12-12 16:57:25.000 -0100D87012A14000,"#womenUp, Super Puzzles Dream Demo",nvdec;status-playable,playable,2021-02-09 00:03:31.000 -01000320000CC000,"1-2-Switch™",services;status-playable,playable,2022-02-18 14:44:03.000 -01004D1007926000,"10 Second Run RETURNS",gpu;status-ingame,ingame,2022-07-17 13:06:18.000 -0100DC000A472000,"10 Second Run RETURNS Demo",gpu;status-ingame,ingame,2021-02-09 00:17:18.000 -0100D82015774000,"112 Operator",status-playable;nvdec,playable,2022-11-13 22:42:50.000 -010051E012302000,"112th Seed",status-playable,playable,2020-10-03 10:32:38.000 -01007F600D1B8000,"12 is Better Than 6",status-playable,playable,2021-02-22 16:10:12.000 -0100B1A010014000,"12 Labours of Hercules II: The Cretan Bull",cpu;status-nothing;32-bit;crash,nothing,2022-12-07 13:43:10.000 -0100A840047C2000,"12 orbits",status-playable,playable,2020-05-28 16:13:26.000 -01003FC01670C000,"13 Sentinels: Aegis Rim",slow;status-ingame,ingame,2024-06-10 20:33:38.000 -0100C54015002000,"13 Sentinels: Aegis Rim Demo",status-playable;demo,playable,2022-04-13 14:15:48.000 -01007E600EEE6000,"140",status-playable,playable,2020-08-05 20:01:33.000 -0100B94013D28000,"16-Bit Soccer Demo",status-playable,playable,2021-02-09 00:23:07.000 -01005CA0099AA000,"1917 - The Alien Invasion DX",status-playable,playable,2021-01-08 22:11:16.000 -0100829010F4A000,"1971 Project Helios",status-playable,playable,2021-04-14 13:50:19.000 -0100D1000B18C000,"1979 Revolution: Black Friday",nvdec;status-playable,playable,2021-02-21 21:03:43.000 -01007BB00FC8A000,"198X",status-playable,playable,2020-08-07 13:24:38.000 -010075601150A000,"1993 Shenandoah",status-playable,playable,2020-10-24 13:55:42.000 -0100148012550000,"1993 Shenandoah Demo",status-playable,playable,2021-02-09 00:43:43.000 -010096500EA94000,"2048 Battles",status-playable,playable,2020-12-12 14:21:25.000 -010024C0067C4000,"2064: Read Only Memories INTEGRAL",deadlock;status-menus,menus,2020-05-28 16:53:58.000 -0100749009844000,"20XX",gpu;status-ingame,ingame,2023-08-14 09:41:44.000 -01007550131EE000,"2URVIVE",status-playable,playable,2022-11-17 13:49:37.000 -0100E20012886000,"2weistein – The Curse of the Red Dragon",status-playable;nvdec;UE4,playable,2022-11-18 14:47:07.000 -0100DAC013D0A000,"30 in 1 game collection vol. 2",status-playable;online-broken,playable,2022-10-15 17:22:27.000 -010056D00E234000,"30-in-1 Game Collection",status-playable;online-broken,playable,2022-10-15 17:47:09.000 -0100FB5010D2E000,"3000th Duel",status-playable,playable,2022-09-21 17:12:08.000 -01003670066DE000,"36 Fragments of Midnight",status-playable,playable,2020-05-28 15:12:59.000 -0100AF400C4CE000,"39 Days to Mars",status-playable,playable,2021-02-21 22:12:46.000 -010010C013F2A000,"3D Arcade Fishing",status-playable,playable,2022-10-25 21:50:51.000 -01006DA00707C000,"3D MiniGolf",status-playable,playable,2021-01-06 09:22:11.000 -01006890126E4000,"4x4 Dirt Track",status-playable,playable,2020-12-12 21:41:42.000 -010010100FF14000,"60 Parsecs!",status-playable,playable,2022-09-17 11:01:17.000 -0100969005E98000,"60 Seconds!",services;status-ingame,ingame,2021-11-30 01:04:14.000 -0100ECF008474000,"6180 the moon",status-playable,playable,2020-05-28 15:39:24.000 -0100EFE00E964000,"64.0",status-playable,playable,2020-12-12 21:31:58.000 -0100DA900B67A000,"7 Billion Humans",32-bit;status-playable,playable,2020-12-17 21:04:58.000 -01004B200DF76000,"7th Sector",nvdec;status-playable,playable,2020-08-10 14:22:14.000 -0100E9F00B882000,"8-BIT ADV STEINS;GATE",audio;status-ingame,ingame,2020-01-12 15:05:06.000 -0100B0700E944000,"80 DAYS",status-playable,playable,2020-06-22 21:43:01.000 -01006B1011B9E000,"80's OVERDRIVE",status-playable,playable,2020-10-16 14:33:32.000 -010006A0042F0000,"88 Heroes - 98 Heroes Edition",status-playable,playable,2020-05-28 14:13:02.000 -010005E00E2BC000,"9 Monkeys of Shaolin",UE4;gpu;slow;status-ingame,ingame,2020-11-17 11:58:43.000 -0100C5F012E3E000,"9 Monkeys of Shaolin Demo",UE4;gpu;nvdec;status-ingame,ingame,2021-02-09 01:03:30.000 -01000360107BC000,"911 Operator Deluxe Edition",status-playable,playable,2020-07-14 13:57:44.000 -0100B2C00682E000,"99Vidas - Definitive Edition",online;status-playable,playable,2020-10-29 13:00:40.000 -010023500C2F0000,"99Vidas Demo",status-playable,playable,2021-02-09 12:51:31.000 -0100DB00117BA000,"9th Dawn III",status-playable,playable,2020-12-12 22:27:27.000 -010096A00CC80000,"A Ch'ti Bundle",status-playable;nvdec,playable,2022-10-04 12:48:44.000 -010021D00D53E000,"A Dark Room",gpu;status-ingame,ingame,2020-12-14 16:14:28.000 -010026B006802000,"A Duel Hand Disaster: Trackher",status-playable;nvdec;online-working,playable,2022-09-04 14:24:55.000 -0100582012B90000,"A Duel Hand Disaster: Trackher DEMO",crash;demo;nvdec;status-ingame,ingame,2021-03-24 18:45:27.000 -01006CE0134E6000,"A Frog Game",status-playable,playable,2020-12-14 16:09:53.000 -010056E00853A000,"A Hat in Time",status-playable,playable,2024-06-25 19:52:44.000 -01009E1011EC4000,"A HERO AND A GARDEN",status-playable,playable,2022-12-05 16:37:47.000 -01005EF00CFDA000,"A Knight's Quest",status-playable;UE4,playable,2022-09-12 20:44:20.000 -01008DD006C52000,"A Magical High School Girl",status-playable,playable,2022-07-19 14:40:50.000 -01004890117B2000,"A Short Hike",status-playable,playable,2020-10-15 00:19:58.000 -0100F0901006C000,"A Sound Plan",crash;status-boots,boots,2020-12-14 16:46:21.000 -01007DD011C4A000,"A Summer with the Shiba Inu",status-playable,playable,2021-06-10 20:51:16.000 -0100A3E010E56000,"A-Train: All Aboard! Tourism",nvdec;status-playable,playable,2021-04-06 17:48:19.000 -010097A00CC0A000,"Aaero: Complete Edition",status-playable;nvdec,playable,2022-07-19 14:49:55.000 -0100EFC010398000,"Aborigenus",status-playable,playable,2020-08-05 19:47:24.000 -0100A5B010A66000,"Absolute Drift",status-playable,playable,2020-12-10 14:02:44.000 -0100C1300BBC6000,"ABZÛ",status-playable;UE4,playable,2022-07-19 15:02:52.000 -01003C400871E000,"ACA NEOGEO 2020 SUPER BASEBALL",online;status-playable,playable,2021-04-12 13:23:51.000 -0100FC000AFC6000,"ACA NEOGEO 3 COUNT BOUT",online;status-playable,playable,2021-04-12 13:16:42.000 -0100AC40038F4000,"ACA NEOGEO AERO FIGHTERS 2",online;status-playable,playable,2021-04-08 15:44:09.000 -0100B91008780000,"ACA NEOGEO AERO FIGHTERS 3",online;status-playable,playable,2021-04-12 13:11:17.000 -0100B4800AFBA000,"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",online;status-playable,playable,2021-04-01 22:48:01.000 -01003FE00A2F6000,"ACA NEOGEO BASEBALL STARS PROFESSIONAL",online;status-playable,playable,2021-04-01 21:23:05.000 -0100DFC003398000,"ACA NEOGEO BLAZING STAR",crash;services;status-menus,menus,2020-05-26 17:29:02.000 -0100D2400AFB0000,"ACA NEOGEO CROSSED SWORDS",online;status-playable,playable,2021-04-01 20:42:59.000 -0100EE6002B48000,"ACA NEOGEO FATAL FURY",online;status-playable,playable,2021-04-01 20:36:23.000 -0100EEA00AFB2000,"ACA NEOGEO FOOTBALL FRENZY",status-playable,playable,2021-03-29 20:12:12.000 -0100CB2001DB8000,"ACA NEOGEO GAROU: MARK OF THE WOLVES",online;status-playable,playable,2021-04-01 20:31:10.000 -01005D700A2F8000,"ACA NEOGEO GHOST PILOTS",online;status-playable,playable,2021-04-01 20:26:45.000 -01000D10038E6000,"ACA NEOGEO LAST RESORT",online;status-playable,playable,2021-04-01 19:51:22.000 -0100A2900AFA4000,"ACA NEOGEO LEAGUE BOWLING",crash;services;status-menus,menus,2020-05-26 17:11:04.000 -0100A050038F2000,"ACA NEOGEO MAGICAL DROP II",crash;services;status-menus,menus,2020-05-26 16:48:24.000 -01007920038F6000,"ACA NEOGEO MAGICIAN LORD",online;status-playable,playable,2021-04-01 19:33:26.000 -0100EBE002B3E000,"ACA NEOGEO METAL SLUG",status-playable,playable,2021-02-21 13:56:48.000 -010086300486E000,"ACA NEOGEO METAL SLUG 2",online;status-playable,playable,2021-04-01 19:25:52.000 -0100BA8001DC6000,"ACA NEOGEO METAL SLUG 3",crash;services;status-menus,menus,2020-05-26 16:32:45.000 -01009CE00AFAE000,"ACA NEOGEO METAL SLUG 4",online;status-playable,playable,2021-04-01 18:12:18.000 -01008FD004DB6000,"ACA NEOGEO METAL SLUG X",crash;services;status-menus,menus,2020-05-26 14:07:20.000 -010038F00AFA0000,"ACA NEOGEO Money Puzzle Exchanger",online;status-playable,playable,2021-04-01 17:59:56.000 -01002E70032E8000,"ACA NEOGEO NEO TURF MASTERS",status-playable,playable,2021-02-21 15:12:01.000 -010052A00A306000,"ACA NEOGEO NINJA COMBAT",status-playable,playable,2021-03-29 21:17:28.000 -01007E800AFB6000,"ACA NEOGEO NINJA COMMANDO",online;status-playable,playable,2021-04-01 17:28:18.000 -01003A5001DBA000,"ACA NEOGEO OVER TOP",status-playable,playable,2021-02-21 13:16:25.000 -010088500878C000,"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",online;status-playable,playable,2021-04-01 17:18:27.000 -01005C9002B42000,"ACA NEOGEO SAMURAI SHODOWN",online;status-playable,playable,2021-04-01 17:11:35.000 -010047F001DBC000,"ACA NEOGEO SAMURAI SHODOWN IV",online;status-playable,playable,2021-04-12 12:58:54.000 -010049F00AFE8000,"ACA NEOGEO SAMURAI SHODOWN V SPECIAL",online;status-playable,playable,2021-04-10 18:07:13.000 -01009B300872A000,"ACA NEOGEO SENGOKU 2",online;status-playable,playable,2021-04-10 17:36:44.000 -01008D000877C000,"ACA NEOGEO SENGOKU 3",online;status-playable,playable,2021-04-10 16:11:53.000 -01008A9001DC2000,"ACA NEOGEO SHOCK TROOPERS",crash;services;status-menus,menus,2020-05-26 15:29:34.000 -01007D1004DBA000,"ACA NEOGEO SPIN MASTER",online;status-playable,playable,2021-04-10 15:50:19.000 -010055A00A300000,"ACA NEOGEO SUPER SIDEKICKS 2",online;status-playable,playable,2021-04-10 16:05:58.000 -0100A4D00A308000,"ACA NEOGEO SUPER SIDEKICKS 3 : THE NEXT GLORY",online;status-playable,playable,2021-04-10 15:39:22.000 -0100EB2001DCC000,"ACA NEOGEO THE KING OF FIGHTERS '94",crash;services;status-menus,menus,2020-05-26 15:03:44.000 -01009DC001DB6000,"ACA NEOGEO THE KING OF FIGHTERS '95",status-playable,playable,2021-03-29 20:27:35.000 -01006F0004FB4000,"ACA NEOGEO THE KING OF FIGHTERS '96",online;status-playable,playable,2021-04-10 14:49:10.000 -0100170008728000,"ACA NEOGEO THE KING OF FIGHTERS '97",online;status-playable,playable,2021-04-10 14:43:27.000 -0100B42001DB4000,"ACA NEOGEO THE KING OF FIGHTERS '98",crash;services;status-menus,menus,2020-05-26 14:54:20.000 -0100583001DCA000,"ACA NEOGEO THE KING OF FIGHTERS '99",online;status-playable,playable,2021-04-10 14:36:56.000 -0100B97002B44000,"ACA NEOGEO THE KING OF FIGHTERS 2000",online;status-playable,playable,2021-04-10 15:24:35.000 -010048200AFC2000,"ACA NEOGEO THE KING OF FIGHTERS 2001",online;status-playable,playable,2021-04-10 15:16:23.000 -0100CFD00AFDE000,"ACA NEOGEO THE KING OF FIGHTERS 2002",online;status-playable,playable,2021-04-10 15:01:55.000 -0100EF100AFE6000,"ACA NEOGEO THE KING OF FIGHTERS 2003",online;status-playable,playable,2021-04-10 14:54:31.000 -0100699008792000,"ACA NEOGEO THE LAST BLADE 2",online;status-playable,playable,2021-04-10 14:31:54.000 -0100F7F00AFA2000,"ACA NEOGEO THE SUPER SPY",online;status-playable,playable,2021-04-10 14:26:33.000 -0100CEF001DC0000,"ACA NEOGEO WAKU WAKU 7",online;status-playable,playable,2021-04-10 14:20:52.000 -01009D4001DC4000,"ACA NEOGEO WORLD HEROES PERFECT",crash;services;status-menus,menus,2020-05-26 14:14:36.000 -01002E700AFC4000,"ACA NEOGEO ZUPAPA!",online;status-playable,playable,2021-03-25 20:07:33.000 -0100A9900CB5C000,"Access Denied",status-playable,playable,2022-07-19 15:25:10.000 -01007C50132C8000,"Ace Angler: Fishing Spirits",status-menus;crash,menus,2023-03-03 03:21:39.000 -010005501E68C000,"Ace Attorney Investigations Collection",status-playable,playable,2024-09-19 16:38:05.000 -010033401E68E000,"Ace Attorney Investigations Collection DEMO",status-playable,playable,2024-09-07 06:16:42.000 -010039301B7E0000,"Ace Combat 7 - Skies Unknown Deluxe Edition",gpu;status-ingame;UE4,ingame,2024-09-27 14:31:43.000 -0100FF1004D56000,"Ace of Seafood",status-playable,playable,2022-07-19 15:32:25.000 -0100B28003440000,"Aces of the Luftwaffe - Squadron",nvdec;slow;status-playable,playable,2020-05-27 12:29:42.000 -010054300D822000,"Aces of the Luftwaffe - Squadron Demo",nvdec;status-playable,playable,2021-02-09 13:12:28.000 -010079B00B3F4000,"Achtung! Cthulhu Tactics",status-playable,playable,2020-12-14 18:40:27.000 -0100DBC0081A4000,"ACORN Tactics",status-playable,playable,2021-02-22 12:57:40.000 -010043C010AEA000,"Across the Grooves",status-playable,playable,2020-06-27 12:29:51.000 -010039A010DA0000,"Active Neurons - Puzzle game",status-playable,playable,2021-01-27 21:31:21.000 -01000D1011EF0000,"Active Neurons 2",status-playable,playable,2022-10-07 16:21:42.000 -010031C0122B0000,"Active Neurons 2 Demo",status-playable,playable,2021-02-09 13:40:21.000 -0100EE1013E12000,"Active Neurons 3 - Wonders Of The World",status-playable,playable,2021-03-24 12:20:20.000 -0100CD40104DE000,"Actual Sunlight",gpu;status-ingame,ingame,2020-12-14 17:18:41.000 -0100C0C0040E4000,"Adam's Venture™: Origins",status-playable,playable,2021-03-04 18:43:57.000 -010029700EB76000,"Adrenaline Rush - Miami Drive",status-playable,playable,2020-12-12 22:49:50.000 -0100300012F2A000,"Advance Wars™ 1+2: Re-Boot Camp",status-playable,playable,2024-01-30 18:19:44.000 -010014B0130F2000,"Adventure Llama",status-playable,playable,2020-12-14 19:32:24.000 -0100C990102A0000,"Adventure Pinball Bundle",slow;status-playable,playable,2020-12-14 20:31:53.000 -0100C4E004406000,"Adventure Time: Pirates of the Enchiridion",status-playable;nvdec,playable,2022-07-21 21:49:01.000 -010021F00C1C0000,"Adventures of Bertram Fiddle Episode 2: A Bleaker Predicklement",nvdec;status-playable,playable,2021-02-22 14:56:37.000 -010072601233C000,"Adventures of Chris",status-playable,playable,2020-12-12 23:00:02.000 -0100A0A0136E8000,"Adventures of Chris Demo",status-playable,playable,2021-02-09 13:49:21.000 -01002B5012004000,"Adventures of Pip",nvdec;status-playable,playable,2020-12-12 22:11:55.000 -01008C901266E000,"ADVERSE",UE4;status-playable,playable,2021-04-26 14:32:51.000 -01008E6006502000,"Aegis Defenders",status-playable,playable,2021-02-22 13:29:33.000 -010064500AF72000,"Aegis Defenders demo",status-playable,playable,2021-02-09 14:04:17.000 -010001C011354000,"Aeolis Tournament",online;status-playable,playable,2020-12-12 22:02:14.000 -01006710122CE000,"Aeolis Tournament Demo",nvdec;status-playable,playable,2021-02-09 14:22:30.000 -0100A0400DDE0000,"AER Memories of Old",nvdec;status-playable,playable,2021-03-05 18:43:43.000 -0100E9B013D4A000,"Aerial_Knight's Never Yield",status-playable,playable,2022-10-25 22:05:00.000 -0100087012810000,"Aery - Broken Memories",status-playable,playable,2022-10-04 13:11:52.000 -01000A8015390000,"Aery - Calm Mind",status-playable,playable,2022-11-14 14:26:58.000 -0100875011D0C000,"Aery - Little Bird Adventure",status-playable,playable,2021-03-07 15:25:51.000 -010018E012914000,"Aery - Sky Castle",status-playable,playable,2022-10-21 17:58:49.000 -0100DF8014056000,"Aery – A Journey Beyond Time",status-playable,playable,2021-04-05 15:52:25.000 -01006C40086EA000,"AeternoBlade",nvdec;status-playable,playable,2020-12-14 20:06:48.000 -0100B1C00949A000,"AeternoBlade Demo",nvdec;status-playable,playable,2021-02-09 14:39:26.000 -01009D100EA28000,"AeternoBlade II",status-playable;online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18.000 -,"AeternoBlade II Demo Version",gpu;nvdec;status-ingame,ingame,2021-02-09 15:10:19.000 -01001B400D334000,"AFL Evolution 2",slow;status-playable;online-broken;UE4,playable,2022-12-07 12:45:56.000 -0100DB100BBCE000,"Afterparty",status-playable,playable,2022-09-22 12:23:19.000 -010087C011C4E000,"Agatha Christie - The ABC Murders",status-playable,playable,2020-10-27 17:08:23.000 -010093600A60C000,"Agatha Knife",status-playable,playable,2020-05-28 12:37:58.000 -010005400A45E000,"Agent A: A puzzle in disguise",status-playable,playable,2020-11-16 22:53:27.000 -01008E8012C02000,"Agent A: A puzzle in disguise (Demo)",status-playable,playable,2021-02-09 18:30:41.000 -0100E4700E040000,"Ages of Mages: The last keeper",status-playable;vulkan-backend-bug,playable,2022-10-04 11:44:05.000 -010004D00A9C0000,"Aggelos",gpu;status-ingame,ingame,2023-02-19 13:24:23.000 -010072600D21C000,"Agony",UE4;crash;status-boots,boots,2020-07-10 16:21:18.000 -010089B00D09C000,"AI: THE SOMNIUM FILES",status-playable;nvdec,playable,2022-09-04 14:45:06.000 -0100C1700FB34000,"AI: THE SOMNIUM FILES Demo",nvdec;status-playable,playable,2021-02-10 12:52:33.000 -01006E8011C1E000,"Ailment",status-playable,playable,2020-12-12 22:30:41.000 -0100C7600C7D6000,"Air Conflicts: Pacific Carriers",status-playable,playable,2021-01-04 10:52:50.000 -010005A00A4F4000,"Air Hockey",status-playable,playable,2020-05-28 16:44:37.000 -0100C9E00F54C000,"Air Missions: HIND",status-playable,playable,2020-12-13 10:16:45.000 -0100E95011FDC000,"Aircraft Evolution",nvdec;status-playable,playable,2021-06-14 13:30:18.000 -010010A00DB72000,"Airfield Mania Demo",services;status-boots;demo,boots,2022-04-10 03:43:02.000 -01003DD00BFEE000,"Airheart - Tales of broken Wings",status-playable,playable,2021-02-26 15:20:27.000 -01007F100DE52000,"Akane",status-playable;nvdec,playable,2022-07-21 00:12:18.000 -01009A800F0C8000,"Akash: Path of the Five",gpu;nvdec;status-ingame,ingame,2020-12-14 22:33:12.000 -010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",status-playable,playable,2021-02-22 14:39:35.000 -0100D4C00EE0C000,"Akuarium",slow;status-playable,playable,2020-12-12 23:43:36.000 -010026E00FEBE000,"Akuto: Showdown",status-playable,playable,2020-08-04 19:43:27.000 -0100F5400AB6C000,"Alchemic Jousts",gpu;status-ingame,ingame,2022-12-08 15:06:28.000 -010001E00F75A000,"Alchemist's Castle",status-playable,playable,2020-12-12 23:54:08.000 -01004510110C4000,"Alder's Blood Prologue",crash;status-ingame,ingame,2021-02-09 19:03:03.000 -0100D740110C0000,"Alder's Blood: Definitive Edition",status-playable,playable,2020-08-28 15:15:23.000 -01000E000EEF8000,"Aldred Knight",services;status-playable,playable,2021-11-30 01:49:17.000 -010025D01221A000,"Alex Kidd in Miracle World DX",status-playable,playable,2022-11-14 15:01:34.000 -0100A2E00D0E0000,"Alien Cruise",status-playable,playable,2020-08-12 13:56:05.000 -0100C1500DBDE000,"Alien Escape",status-playable,playable,2020-06-03 23:43:18.000 -010075D00E8BA000,"Alien: Isolation",status-playable;nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41.000 -0100CBD012FB6000,"All Walls Must Fall",status-playable;UE4,playable,2022-10-15 19:16:30.000 -0100C1F00A9B8000,"All-Star Fruit Racing",status-playable;nvdec;UE4,playable,2022-07-21 00:35:37.000 -0100AC501122A000,"Alluris",gpu;status-ingame;UE4,ingame,2023-08-02 23:13:50.000 -010063000C3CE000,"Almightree: The Last Dreamer",slow;status-playable,playable,2020-12-15 13:59:03.000 -010083E010AE8000,"Along the Edge",status-playable,playable,2020-11-18 15:00:07.000 -010083E013188000,"Alpaca Ball: Allstars",nvdec;status-playable,playable,2020-12-11 12:26:29.000 -01000A800B998000,"ALPHA",status-playable,playable,2020-12-13 12:17:45.000 -010053B0123DC000,"Alphaset by POWGI",status-playable,playable,2020-12-15 15:15:15.000 -01003E700FD66000,"Alt-Frequencies",status-playable,playable,2020-12-15 19:01:33.000 -01004DB00935A000,"Alteric",status-playable,playable,2020-11-08 13:53:22.000 -0100C3D00D1D4000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",status-playable,playable,2020-08-31 14:17:42.000 -0100A8A00D27E000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",status-playable,playable,2021-02-10 13:33:59.000 -010045201487C000,"Aluna: Sentinel of the Shards",status-playable;nvdec,playable,2022-10-25 22:17:03.000 -01004C200B0B4000,"Alwa's Awakening",status-playable,playable,2020-10-13 11:52:01.000 -01001B7012214000,"Alwa's Legacy",status-playable,playable,2020-12-13 13:00:57.000 -010002B00C534000,"American Fugitive",nvdec;status-playable,playable,2021-01-04 20:45:11.000 -010089D00A3FA000,"American Ninja Warrior: Challenge",nvdec;status-playable,playable,2021-06-09 13:11:17.000 -01003CC00D0BE000,"Amnesia: Collection",status-playable,playable,2022-10-04 13:36:15.000 -010041D00DEB2000,"Amoeba Battle - Microscopic RTS Action",status-playable,playable,2021-05-06 13:33:41.000 -010046500C8D2000,"Among the Sleep - Enhanced Edition",nvdec;status-playable,playable,2021-06-03 15:06:25.000 -0100B0C013912000,"Among Us",status-menus;online;ldn-broken,menus,2021-09-22 15:20:17.000 -010050900E1C6000,"Anarcute",status-playable,playable,2021-02-22 13:17:59.000 -01009EE0111CC000,"Ancestors Legacy",status-playable;nvdec;UE4,playable,2022-10-01 12:25:36.000 -010021700BC56000,"Ancient Rush 2",UE4;crash;status-menus,menus,2020-07-14 14:58:47.000 -0100AE000AEBC000,"Angels of Death",nvdec;status-playable,playable,2021-02-22 14:17:15.000 -010001E00A5F6000,"AngerForce: Reloaded for Nintendo Switch",status-playable,playable,2022-07-21 10:37:17.000 -0100F3500D05E000,"Angry Bunnies: Colossal Carrot Crusade",status-playable;online-broken,playable,2022-09-04 14:53:26.000 -010084500C7DC000,"Angry Video Game Nerd I & II Deluxe",crash;status-ingame,ingame,2020-12-12 23:59:54.000 -0100706005B6A000,"Anima: Gate of Memories",nvdec;status-playable,playable,2021-06-16 18:13:18.000 -010033F00B3FA000,"Anima: Gate of Memories - Arcane Edition",nvdec;status-playable,playable,2021-01-26 16:55:51.000 -01007A400B3F8000,"Anima: Gate of Memories - The Nameless Chronicles",status-playable,playable,2021-06-14 14:33:06.000 -0100F38011CFE000,"Animal Crossing: New Horizons Island Transfer Tool",services;status-ingame;Needs Update;Incomplete,ingame,2022-12-07 13:51:19.000 -01006F8002326000,"Animal Crossing™: New Horizons",gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49.000 -010019500E642000,"Animal Fight Club",gpu;status-ingame,ingame,2020-12-13 13:13:33.000 -01002F4011A8E000,"Animal Fun for Toddlers and Kids",services;status-boots,boots,2020-12-15 16:45:29.000 -010035500CA0E000,"Animal Hunter Z",status-playable,playable,2020-12-13 12:50:35.000 -010033C0121DC000,"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",services;status-boots,boots,2021-11-29 23:43:14.000 -010065B009B3A000,"Animal Rivals: Nintendo Switch Edition",status-playable,playable,2021-02-22 14:02:42.000 -0100EFE009424000,"Animal Super Squad",UE4;status-playable,playable,2021-04-23 20:50:50.000 -0100A16010966000,"Animal Up!",status-playable,playable,2020-12-13 15:39:02.000 -010020D01AD24000,"ANIMAL WELL",status-playable,playable,2024-05-22 18:01:49.000 -0100451012492000,"Animals for Toddlers",services;status-boots,boots,2020-12-15 17:27:27.000 -010098600CF06000,"Animated Jigsaws Collection",nvdec;status-playable,playable,2020-12-15 15:58:34.000 -0100A1900B5B8000,"Animated Jigsaws: Beautiful Japanese Scenery Demo",nvdec;status-playable,playable,2021-02-10 13:49:56.000 -010062500EB84000,"Anime Studio Story",status-playable,playable,2020-12-15 18:14:05.000 -01002B300EB86000,"Anime Studio Story Demo",status-playable,playable,2021-02-10 14:50:39.000 -010097600C322000,"ANIMUS",status-playable,playable,2020-12-13 15:11:47.000 -0100E5A00FD38000,"ANIMUS: Harbinger",status-playable,playable,2022-09-13 22:09:20.000 -010055500CCD2000,"Ankh Guardian - Treasure of the Demon's Temple",status-playable,playable,2020-12-13 15:55:49.000 -01009E600D78C000,"Anode",status-playable,playable,2020-12-15 17:18:58.000 -0100CB9018F5A000,"Another Code™: Recollection",gpu;status-ingame;crash,ingame,2024-09-06 05:58:52.000 -01001A900D312000,"Another Sight",UE4;gpu;nvdec;status-ingame,ingame,2020-12-03 16:49:59.000 -01003C300AAAE000,"Another World",slow;status-playable,playable,2022-07-21 10:42:38.000 -01000FD00DF78000,"AnShi",status-playable;nvdec;UE4,playable,2022-10-21 19:37:01.000 -010054C00D842000,"Anthill",services;status-menus;nvdec,menus,2021-11-18 09:25:25.000 -0100596011E20000,"Anti Hero Bundle",status-playable;nvdec,playable,2022-10-21 20:10:30.000 -0100016007154000,"Antiquia Lost",status-playable,playable,2020-05-28 11:57:32.000 -0100FE1011400000,"AntVentor",nvdec;status-playable,playable,2020-12-15 20:09:27.000 -0100FA100620C000,"Ao no Kanata no Four Rhythm",status-playable,playable,2022-07-21 10:50:42.000 -010047000E9AA000,"AO Tennis 2",status-playable;online-broken,playable,2022-09-17 12:05:07.000 -0100990011866000,"Aokana - Four Rhythms Across the Blue",status-playable,playable,2022-10-04 13:50:26.000 -01005B100C268000,"Ape Out",status-playable,playable,2022-09-26 19:04:47.000 -010054500E6D4000,"Ape Out DEMO",status-playable,playable,2021-02-10 14:33:06.000 -010051C003A08000,"Aperion Cyberstorm",status-playable,playable,2020-12-14 00:40:16.000 -01008CA00D71C000,"Aperion Cyberstorm [DEMO]",status-playable,playable,2021-02-10 15:53:21.000 -01008FC00C5BC000,"Apocalipsis Wormwood Edition",deadlock;status-menus,menus,2020-05-27 12:56:37.000 -010045D009EFC000,"Apocryph: an old-school shooter",gpu;status-ingame,ingame,2020-12-13 23:24:10.000 -010020D01B890000,"Apollo Justice: Ace Attorney Trilogy",status-playable,playable,2024-06-21 21:54:27.000 -01005F20116A0000,"Apparition",nvdec;slow;status-ingame,ingame,2020-12-13 23:57:04.000 -0100AC10085CE000,"AQUA KITTY UDX",online;status-playable,playable,2021-04-12 15:34:11.000 -0100FE0010886000,"Aqua Lungers",crash;status-ingame,ingame,2020-12-14 11:25:57.000 -0100D0D00516A000,"Aqua Moto Racing Utopia",status-playable,playable,2021-02-21 21:21:00.000 -010071800BA74000,"Aragami: Shadow Edition",nvdec;status-playable,playable,2021-02-21 20:33:23.000 -0100C7D00E6A0000,"Arc of Alchemist",status-playable;nvdec,playable,2022-10-07 19:15:54.000 -0100BE80097FA000,"Arcade Archives 10-Yard Fight",online;status-playable,playable,2021-03-25 21:26:41.000 -01005DD00BE08000,"Arcade Archives ALPHA MISSION",online;status-playable,playable,2021-04-15 09:20:43.000 -010083800DC70000,"Arcade Archives ALPINE SKI",online;status-playable,playable,2021-04-15 09:28:46.000 -0100A5700AF32000,"Arcade Archives ARGUS",online;status-playable,playable,2021-04-16 06:51:25.000 -010014F001DE2000,"Arcade Archives Armed F",online;status-playable,playable,2021-04-16 07:00:17.000 -0100BEC00C7A2000,"Arcade Archives ATHENA",online;status-playable,playable,2021-04-16 07:10:12.000 -0100426001DE4000,"Arcade Archives Atomic Robo-Kid",online;status-playable,playable,2021-04-16 07:20:29.000 -0100192009824000,"Arcade Archives BOMB JACK",online;status-playable,playable,2021-04-16 09:48:26.000 -010007A00980C000,"Arcade Archives City CONNECTION",online;status-playable,playable,2021-03-25 22:16:15.000 -0100EDC00E35A000,"Arcade Archives CLU CLU LAND",online;status-playable,playable,2021-04-16 10:00:42.000 -0100BB1001DD6000,"Arcade Archives CRAZY CLIMBER",online;status-playable,playable,2021-03-25 22:24:15.000 -0100E9E00B052000,"Arcade Archives DONKEY KONG",Needs Update;crash;services;status-menus,menus,2021-03-24 18:18:43.000 -0100F25001DD0000,"Arcade Archives DOUBLE DRAGON",online;status-playable,playable,2021-03-25 22:44:34.000 -01009E3001DDE000,"Arcade Archives DOUBLE DRAGON II The Revenge",online;status-playable,playable,2021-04-12 16:05:29.000 -0100496006EC8000,"Arcade Archives FRONT LINE",online;status-playable,playable,2021-05-05 14:10:49.000 -01009A4008A30000,"Arcade Archives HEROIC EPISODE",online;status-playable,playable,2021-03-25 23:01:26.000 -01007D200D3FC000,"Arcade Archives ICE CLIMBER",online;status-playable,playable,2021-05-05 14:18:34.000 -010049400C7A8000,"Arcade Archives IKARI WARRIORS",online;status-playable,playable,2021-05-05 14:24:46.000 -01000DB00980A000,"Arcade Archives Ikki",online;status-playable,playable,2021-03-25 23:11:28.000 -010008300C978000,"Arcade Archives IMAGE FIGHT",online;status-playable,playable,2021-05-05 14:31:21.000 -010010B008A36000,"Arcade Archives Kid Niki Radical Ninja",audio;status-ingame;online,ingame,2022-07-21 11:02:04.000 -0100E7C001DE0000,"Arcade Archives Kid's Horehore Daisakusen",online;status-playable,playable,2021-04-12 16:21:29.000 -0100F380105A4000,"Arcade Archives LIFE FORCE",status-playable,playable,2020-09-04 13:26:25.000 -0100755004608000,"Arcade Archives Mario Bros.",online;status-playable,playable,2021-03-26 11:31:32.000 -01000BE001DD8000,"Arcade Archives MOON CRESTA",online;status-playable,playable,2021-05-05 14:39:29.000 -01003000097FE000,"Arcade Archives MOON PATROL",online;status-playable,playable,2021-03-26 11:42:04.000 -01003EF00D3B4000,"Arcade Archives NINJA GAIDEN",audio;online;status-ingame,ingame,2021-04-12 16:27:53.000 -01002F300D2C6000,"Arcade Archives Ninja Spirit",online;status-playable,playable,2021-05-05 14:45:31.000 -0100369001DDC000,"Arcade Archives Ninja-Kid",online;status-playable,playable,2021-03-26 20:55:07.000 -01004A200BB48000,"Arcade Archives OMEGA FIGHTER",crash;services;status-menus,menus,2020-08-18 20:50:54.000 -01007F8010C66000,"Arcade Archives PLUS ALPHA",audio;status-ingame,ingame,2020-07-04 20:47:55.000 -0100A6E00D3F8000,"Arcade Archives POOYAN",online;status-playable,playable,2021-05-05 17:58:19.000 -01000D200C7A4000,"Arcade Archives PSYCHO SOLDIER",online;status-playable,playable,2021-05-05 18:02:19.000 -01001530097F8000,"Arcade Archives PUNCH-OUT!!",online;status-playable,playable,2021-03-25 22:10:55.000 -010081E001DD2000,"Arcade Archives Renegade",status-playable;online,playable,2022-07-21 11:45:40.000 -0100FBA00E35C000,"Arcade Archives ROAD FIGHTER",online;status-playable,playable,2021-05-05 18:09:17.000 -010060000BF7C000,"Arcade Archives ROUTE 16",online;status-playable,playable,2021-05-05 18:40:41.000 -0100C2D00981E000,"Arcade Archives RYGAR",online;status-playable,playable,2021-04-15 08:48:30.000 -01007A4009834000,"Arcade Archives Shusse Ozumo",online;status-playable,playable,2021-05-05 17:52:25.000 -010008F00B054000,"Arcade Archives Sky Skipper",online;status-playable,playable,2021-04-15 08:58:09.000 -01008C900982E000,"Arcade Archives Solomon's Key",online;status-playable,playable,2021-04-19 16:27:18.000 -010069F008A38000,"Arcade Archives STAR FORCE",online;status-playable,playable,2021-04-15 08:39:09.000 -0100422001DDA000,"Arcade Archives TERRA CRESTA",crash;services;status-menus,menus,2020-08-18 20:20:55.000 -0100348001DE6000,"Arcade Archives TERRA FORCE",online;status-playable,playable,2021-04-16 20:03:27.000 -0100DFD016B7A000,"Arcade Archives TETRIS® THE GRAND MASTER",status-playable,playable,2024-06-23 01:50:29.000 -0100DC000983A000,"Arcade Archives THE NINJA WARRIORS",online;slow;status-ingame,ingame,2021-04-16 19:54:56.000 -0100AF300D2E8000,"Arcade Archives TIME PILOT",online;status-playable,playable,2021-04-16 19:22:31.000 -010029D006ED8000,"Arcade Archives Traverse USA",online;status-playable,playable,2021-04-15 08:11:06.000 -010042200BE0C000,"Arcade Archives URBAN CHAMPION",online;status-playable,playable,2021-04-16 10:20:03.000 -01004EC00E634000,"Arcade Archives VS. GRADIUS",online;status-playable,playable,2021-04-12 14:53:58.000 -010021D00812A000,"Arcade Archives VS. SUPER MARIO BROS.",online;status-playable,playable,2021-04-08 14:48:11.000 -01001B000D8B6000,"Arcade Archives WILD WESTERN",online;status-playable,playable,2021-04-16 10:11:36.000 -010050000D6C4000,"Arcade Classics Anniversary Collection",status-playable,playable,2021-06-03 13:55:10.000 -01005A8010C7E000,"ARCADE FUZZ",status-playable,playable,2020-08-15 12:37:36.000 -010077000F620000,"Arcade Spirits",status-playable,playable,2020-06-21 11:45:03.000 -0100E680149DC000,"Arcaea",status-playable,playable,2023-03-16 19:31:21.000 -01003C2010C78000,"Archaica: The Path Of Light",crash;status-nothing,nothing,2020-10-16 13:22:26.000 -01004DA012976000,"Area 86",status-playable,playable,2020-12-16 16:45:52.000 -0100691013C46000,"ARIA CHRONICLE",status-playable,playable,2022-11-16 13:50:55.000 -0100D4A00B284000,"ARK: Survival Evolved",gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56.000 -0100C56012C96000,"Arkanoid vs. Space Invaders",services;status-ingame,ingame,2021-01-21 12:50:30.000 -010069A010606000,"Arkham Horror: Mother's Embrace",nvdec;status-playable,playable,2021-04-19 15:40:55.000 -0100C5B0113A0000,"Armed 7 DX",status-playable,playable,2020-12-14 11:49:56.000 -010070A00A5F4000,"Armello",nvdec;status-playable,playable,2021-01-07 11:43:26.000 -0100A5400AC86000,"ARMS Demo",status-playable,playable,2021-02-10 16:30:13.000 -01009B500007C000,"ARMS™",status-playable;ldn-works;LAN,playable,2024-08-28 07:49:24.000 -0100184011B32000,"Arrest of a stone Buddha",status-nothing;crash,nothing,2022-12-07 16:55:00.000 -01007AB012102000,"Arrog",status-playable,playable,2020-12-16 17:20:50.000 -01008EC006BE2000,"Art of Balance",gpu;status-ingame;ldn-works,ingame,2022-07-21 17:13:57.000 -010062F00CAE2000,"Art of Balance DEMO",gpu;slow;status-ingame,ingame,2021-02-10 17:17:12.000 -01006AA013086000,"Art Sqool",status-playable;nvdec,playable,2022-10-16 20:42:37.000 -0100CDD00DA70000,"Artifact Adventure Gaiden DX",status-playable,playable,2020-12-16 17:49:25.000 -0100C2500CAB6000,"Ary and the Secret of Seasons",status-playable,playable,2022-10-07 20:45:09.000 -0100C9F00AAEE000,"ASCENDANCE",status-playable,playable,2021-01-05 10:54:40.000 -0100D5800DECA000,"Asemblance",UE4;gpu;status-ingame,ingame,2020-12-16 18:01:23.000 -0100E4C00DE30000,"Ash of Gods: Redemption",deadlock;status-nothing,nothing,2020-08-10 18:08:32.000 -010027B00E40E000,"Ashen",status-playable;nvdec;online-broken;UE4,playable,2022-09-17 12:19:14.000 -01007B000C834000,"Asphalt Legends Unite",services;status-menus;crash;online-broken,menus,2022-12-07 13:28:29.000 -01007F600B134000,"Assassin's Creed® III: Remastered",status-boots;nvdec,boots,2024-06-25 20:12:11.000 -010044700DEB0000,"Assassin’s Creed®: The Rebel Collection",gpu;status-ingame,ingame,2024-05-19 07:58:56.000 -0100DF200B24C000,"Assault Android Cactus+",status-playable,playable,2021-06-03 13:23:55.000 -0100BF8012A30000,"Assault ChaingunS KM",crash;gpu;status-ingame,ingame,2020-12-14 12:48:34.000 -0100C5E00E540000,"Assault on Metaltron Demo",status-playable,playable,2021-02-10 19:48:06.000 -010057A00C1F6000,"Astebreed",status-playable,playable,2022-07-21 17:33:54.000 -010081500EA1E000,"Asterix & Obelix XXL 3 - The Crystal Menhir",gpu;status-ingame;nvdec;regression,ingame,2022-11-28 14:19:23.000 -0100F46011B50000,"Asterix & Obelix XXL: Romastered",gpu;status-ingame;nvdec;opengl,ingame,2023-08-16 21:22:06.000 -01007300020FA000,"ASTRAL CHAIN",status-playable,playable,2024-07-17 18:02:19.000 -0100E5F00643C000,"Astro Bears Party",status-playable,playable,2020-05-28 11:21:58.000 -0100F0400351C000,"Astro Duel Deluxe",32-bit;status-playable,playable,2021-06-03 11:21:48.000 -0100B80010C48000,"Astrologaster",cpu;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:31.000 -0100DF401249C000,"AstroWings: Space War",status-playable,playable,2020-12-14 13:10:44.000 -010099801870E000,"Atari 50: The Anniversary Celebration",slow;status-playable,playable,2022-11-14 19:42:10.000 -010088600C66E000,"Atelier Arland series Deluxe Pack",nvdec;status-playable,playable,2021-04-08 15:33:15.000 -0100D9D00EE8C000,"Atelier Ayesha: The Alchemist of Dusk DX",status-menus;crash;nvdec;Needs Update,menus,2021-11-24 07:29:54.000 -0100E5600EE8E000,"Atelier Escha & Logy: Alchemists of the Dusk Sky DX",status-playable;nvdec,playable,2022-11-20 16:01:41.000 -010023201421E000,"Atelier Firis: The Alchemist and the Mysterious Journey DX",gpu;status-ingame;nvdec,ingame,2022-10-25 22:46:19.000 -0100B1400CD50000,"Atelier Lulua ~The Scion of Arland~",nvdec;status-playable,playable,2020-12-16 14:29:19.000 -010009900947A000,"Atelier Lydie & Suelle ~The Alchemists and the Mysterious Paintings~",nvdec;status-playable,playable,2021-06-03 18:37:01.000 -01001A5014220000,"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings DX",status-playable,playable,2022-10-25 23:06:20.000 -0100ADD00C6FA000,"Atelier Meruru ~The Apprentice of Arland~ DX",nvdec;status-playable,playable,2020-06-12 00:50:48.000 -01002D700B906000,"Atelier Rorona Arland no Renkinjutsushi DX (JP)",status-playable;nvdec,playable,2022-12-02 17:26:54.000 -01009A9012022000,"Atelier Ryza 2: Lost Legends & the Secret Fairy",status-playable,playable,2022-10-16 21:06:06.000 -0100D1900EC80000,"Atelier Ryza: Ever Darkness & the Secret Hideout",status-playable,playable,2023-10-15 16:36:50.000 -010005C00EE90000,"Atelier Shallie: Alchemists of the Dusk Sea DX",nvdec;status-playable,playable,2020-11-25 20:54:12.000 -010082A01538E000,"Atelier Sophie 2: The Alchemist of the Mysterious Dream",status-ingame;crash,ingame,2022-12-01 04:34:03.000 -01009BC00C6F6000,"Atelier Totori ~The Adventurer of Arland~ DX",nvdec;status-playable,playable,2020-06-12 01:04:56.000 -0100B9400FA38000,"ATOM RPG",status-playable;nvdec,playable,2022-10-22 10:11:48.000 -01005FE00EC4E000,"Atomic Heist",status-playable,playable,2022-10-16 21:24:32.000 -0100AD30095A4000,"Atomicrops",status-playable,playable,2022-08-06 10:05:07.000 -01000D1006CEC000,"ATOMIK: RunGunJumpGun",status-playable,playable,2020-12-14 13:19:24.000 -0100FB500631E000,"ATOMINE",gpu;nvdec;slow;status-playable,playable,2020-12-14 18:56:50.000 -010039600E7AC000,"Attack of the Toy Tanks",slow;status-ingame,ingame,2020-12-14 12:59:12.000 -010034500641A000,"Attack on Titan 2",status-playable,playable,2021-01-04 11:40:01.000 -01000F600B01E000,"ATV Drift & Tricks",UE4;online;status-playable,playable,2021-04-08 17:29:17.000 -0100AA800DA42000,"Automachef",status-playable,playable,2020-12-16 19:51:25.000 -01006B700EA6A000,"Automachef Demo",status-playable,playable,2021-02-10 20:35:37.000 -0100B280106A0000,"Aviary Attorney: Definitive Edition",status-playable,playable,2020-08-09 20:32:12.000 -010064600F982000,"AVICII Invector",status-playable,playable,2020-10-25 12:12:56.000 -0100E100128BA000,"AVICII Invector Demo",status-playable,playable,2021-02-10 21:04:58.000 -01008FB011248000,"AvoCuddle",status-playable,playable,2020-09-02 14:50:13.000 -0100085012D64000,"Awakening of Cthulhu",UE4;status-playable,playable,2021-04-26 13:03:07.000 -01002F1005F3C000,"Away: Journey To The Unexpected",status-playable;nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04.000 -0100B8C00CFCE000,"Awesome Pea",status-playable,playable,2020-10-11 12:39:23.000 -010023800D3F2000,"Awesome Pea (Demo)",status-playable,playable,2021-02-10 21:48:21.000 -0100B7D01147E000,"Awesome Pea 2",status-playable,playable,2022-10-01 12:34:19.000 -0100D2011E28000,"Awesome Pea 2 (Demo)",crash;status-nothing,nothing,2021-02-10 22:08:27.000 -0100DA3011174000,"AXES",status-playable,playable,2021-04-08 13:01:58.000 -0100052004384000,"Axiom Verge",status-playable,playable,2020-10-20 01:07:18.000 -010075400DEC6000,"Ayakashi Koi Gikyoku《Trial version》",status-playable,playable,2021-02-10 22:22:11.000 -01006AF012FC8000,"Azur Lane: Crosswave",UE4;nvdec;status-playable,playable,2021-04-05 15:15:25.000 -0100C7D00DE24000,"Azuran Tales: TRIALS",status-playable,playable,2020-08-12 15:23:07.000 -01006FB00990E000,"Azure Reflections",nvdec;online;status-playable,playable,2021-04-08 13:18:25.000 -01004E90149AA000,"Azure Striker GUNVOLT 3",status-playable,playable,2022-08-10 13:46:49.000 -0100192003FA4000,"Azure Striker GUNVOLT: STRIKER PACK",32-bit;status-playable,playable,2024-02-10 23:51:21.000 -010031D012BA4000,"Azurebreak Heroes",status-playable,playable,2020-12-16 21:26:17.000 -01009B901145C000,"B.ARK",status-playable;nvdec,playable,2022-11-17 13:35:02.000 -01002CD00A51C000,"Baba Is You",status-playable,playable,2022-07-17 05:36:54.000 -0100F4100AF16000,"Back to Bed",nvdec;status-playable,playable,2020-12-16 20:52:04.000 -0100FEA014316000,"Backworlds",status-playable,playable,2022-10-25 23:20:34.000 -0100EAF00E32E000,"Bacon Man: An Adventure",status-menus;crash;nvdec,menus,2021-11-20 02:36:21.000 -01000CB00D094000,"Bad Dream: Coma",deadlock;status-boots,boots,2023-08-03 00:54:18.000 -0100B3B00D81C000,"Bad Dream: Fever",status-playable,playable,2021-06-04 18:33:12.000 -0100E98006F22000,"Bad North",status-playable,playable,2022-07-17 13:44:25.000 -010075000D092000,"Bad North Demo",status-playable,playable,2021-02-10 22:48:38.000 -01004C70086EC000,"BAFL - Brakes Are For Losers",status-playable,playable,2021-01-13 08:32:51.000 -010076B011EC8000,"Baila Latino",status-playable,playable,2021-04-14 16:40:24.000 -0100730011BDC000,"Bakugan: Champions of Vestroia",status-playable,playable,2020-11-06 19:07:39.000 -01008260138C4000,"Bakumatsu Renka SHINSENGUMI",status-playable,playable,2022-10-25 23:37:31.000 -0100438012EC8000,"BALAN WONDERWORLD",status-playable;nvdec;UE4,playable,2022-10-22 13:08:43.000 -0100E48013A34000,"Balan Wonderworld Demo",gpu;services;status-ingame;UE4;demo,ingame,2023-02-16 20:05:07.000 -0100CD801CE5E000,"Balatro",status-ingame,ingame,2024-04-21 02:01:53.000 -010010A00DA48000,"Baldur's Gate and Baldur's Gate II: Enhanced Editions",32-bit;status-playable,playable,2022-09-12 23:52:15.000 -0100BC400FB64000,"Balthazar's Dream",status-playable,playable,2022-09-13 00:13:22.000 -01008D30128E0000,"Bamerang",status-playable,playable,2022-10-26 00:29:39.000 -010013C010C5C000,"Banner of the Maid",status-playable,playable,2021-06-14 15:23:37.000 -0100388008758000,"Banner Saga 2",crash;status-boots,boots,2021-01-13 08:56:09.000 -010071E00875A000,"Banner Saga 3",slow;status-boots,boots,2021-01-11 16:53:57.000 -0100CE800B94A000,"Banner Saga Trilogy",slow;status-playable,playable,2024-03-06 11:25:20.000 -0100425009FB2000,"Baobabs Mausoleum Ep.1: Ovnifagos Don't Eat Flamingos",status-playable,playable,2020-07-15 05:06:29.000 -010079300E976000,"Baobabs Mausoleum Ep.2: 1313 Barnabas Dead End Drive",status-playable,playable,2020-12-17 11:22:50.000 -01006D300FFA6000,"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",nvdec;status-playable,playable,2020-12-17 11:43:10.000 -0100D3000AEC2000,"Baobabs Mausoleum: DEMO",status-playable,playable,2021-02-10 22:59:25.000 -01003350102E2000,"Barbarous: Tavern of Emyr",status-playable,playable,2022-10-16 21:50:24.000 -0100F7E01308C000,"Barbearian",Needs Update;gpu;status-ingame,ingame,2021-06-28 16:27:50.000 -010039C0106C6000,"Baron: Fur Is Gonna Fly",status-boots;crash,boots,2022-02-06 02:05:43.000 -0100FB000EB96000,"Barry Bradford's Putt Panic Party",nvdec;status-playable,playable,2020-06-17 01:08:34.000 -01004860080A0000,"Baseball Riot",status-playable,playable,2021-06-04 18:07:27.000 -010038600B27E000,"Bastion",status-playable,playable,2022-02-15 14:15:24.000 -01005F3012748000,"Batbarian: Testament of the Primordials",status-playable,playable,2020-12-17 12:00:59.000 -0100C07018CA6000,"Baten Kaitos I & II HD Remaster (Europe/USA)",services;status-boots;Needs Update,boots,2023-10-01 00:44:32.000 -0100F28018CA4000,"Baten Kaitos I & II HD Remaster (Japan)",services;status-boots;Needs Update,boots,2023-10-24 23:11:54.000 -0100011005D92000,"Batman - The Telltale Series",nvdec;slow;status-playable,playable,2021-01-11 18:19:35.000 -01003F00163CE000,"Batman: Arkham City",status-playable,playable,2024-09-11 00:30:19.000 -0100ACD0163D0000,"Batman: Arkham Knight",gpu;status-ingame;mac-bug,ingame,2024-06-25 20:24:42.000 -0100E6300AA3A000,"Batman: The Enemy Within",crash;status-nothing,nothing,2020-10-16 05:49:27.000 -0100747011890000,"Battle Axe",status-playable,playable,2022-10-26 00:38:01.000 -0100551001D88000,"Battle Chasers: Nightwar",nvdec;slow;status-playable,playable,2021-01-12 12:27:34.000 -0100CC2001C6C000,"Battle Chef Brigade Deluxe",status-playable,playable,2021-01-11 14:16:28.000 -0100DBB00CAEE000,"Battle Chef Brigade Demo",status-playable,playable,2021-02-10 23:15:07.000 -0100A3B011EDE000,"Battle Hunters",gpu;status-ingame,ingame,2022-11-12 09:19:17.000 -010035E00C1AE000,"Battle of Kings",slow;status-playable,playable,2020-12-17 12:45:23.000 -0100D2800EB40000,"Battle Planet - Judgement Day",status-playable,playable,2020-12-17 14:06:20.000 -0100C4D0093EA000,"Battle Princess Madelyn",status-playable,playable,2021-01-11 13:47:23.000 -0100A7500DF64000,"Battle Princess Madelyn Royal Edition",status-playable,playable,2022-09-26 19:14:49.000 -010099B00E898000,"Battle Supremacy - Evolution",gpu;status-boots;nvdec,boots,2022-02-17 09:02:50.000 -0100DEB00D5A8000,"Battle Worlds: Kronos",nvdec;status-playable,playable,2021-06-04 17:48:02.000 -0100650010DD4000,"Battleground",status-ingame;crash,ingame,2021-09-06 11:53:23.000 -010044E00D97C000,"BATTLESLOTHS",status-playable,playable,2020-10-03 08:32:22.000 -010059C00E39C000,"Battlestar Galactica Deadlock",nvdec;status-playable,playable,2020-06-27 17:35:44.000 -01006D800A988000,"Battlezone Gold Edition",gpu;ldn-untested;online;status-boots,boots,2021-06-04 18:36:05.000 -010048300D5C2000,"BATTLLOON",status-playable,playable,2020-12-17 15:48:23.000 -0100194010422000,"bayala - the game",status-playable,playable,2022-10-04 14:09:25.000 -0100CF5010FEC000,"Bayonetta Origins: Cereza and the Lost Demon™",gpu;status-ingame,ingame,2024-02-27 01:39:49.000 -010002801A3FA000,"Bayonetta Origins: Cereza and the Lost Demon™ Demo",gpu;status-ingame;demo,ingame,2024-02-17 06:06:28.000 -010076F0049A2000,"Bayonetta™",status-playable;audout,playable,2022-11-20 15:51:59.000 -01007960049A0000,"Bayonetta™ 2",status-playable;nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09.000 -01004A4010FEA000,"Bayonetta™ 3",gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33.000 -01002FA00DE72000,"BDSM: Big Drunk Satanic Massacre",status-playable,playable,2021-03-04 21:28:22.000 -01003A1010E3C000,"BE-A Walker",slow;status-ingame,ingame,2020-09-02 15:00:31.000 -010095C00406C000,"Beach Buggy Racing",online;status-playable,playable,2021-04-13 23:16:50.000 -010020700DE04000,"Bear With Me: The Lost Robots",nvdec;status-playable,playable,2021-02-27 14:20:10.000 -010024200E97E800,"Bear With Me: The Lost Robots Demo",nvdec;status-playable,playable,2021-02-12 22:38:12.000 -0100C0E014A4E000,"Bear's Restaurant",status-playable,playable,2024-08-11 21:26:59.000 -,"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",crash;status-menus,menus,2020-10-04 06:12:08.000 -01009C300BB4C000,"Beat Cop",status-playable,playable,2021-01-06 19:26:48.000 -01002D20129FC000,"Beat Me!",status-playable;online-broken,playable,2022-10-16 21:59:26.000 -01006B0014590000,"BEAUTIFUL DESOLATION",gpu;status-ingame;nvdec,ingame,2022-10-26 10:34:38.000 -01009E700DB2E000,"Bee Simulator",UE4;crash;status-boots,boots,2020-07-15 12:13:13.000 -010018F007786000,"BeeFense BeeMastered",status-playable,playable,2022-11-17 15:38:12.000 -0100558010B26000,"Behold the Kickmen",status-playable,playable,2020-06-27 12:49:45.000 -0100D1300C1EA000,"Beholder: Complete Edition",status-playable,playable,2020-10-16 12:48:58.000 -01006E1004404000,"Ben 10",nvdec;status-playable,playable,2021-02-26 14:08:35.000 -01009CD00E3AA000,"Ben 10: Power Trip!",status-playable;nvdec,playable,2022-10-09 10:52:12.000 -010074500BBC4000,"Bendy and the Ink Machine",status-playable,playable,2023-05-06 20:35:39.000 -010068600AD16000,"Beyblade Burst Battle Zero",services;status-menus;crash;Needs Update,menus,2022-11-20 15:48:32.000 -010056500CAD8000,"Beyond Enemy Lines: Covert Operations",status-playable;UE4,playable,2022-10-01 13:11:50.000 -0100B8F00DACA000,"Beyond Enemy Lines: Essentials",status-playable;nvdec;UE4,playable,2022-09-26 19:48:16.000 -0100BF400AF38000,"Bibi & Tina – Adventures with Horses",nvdec;slow;status-playable,playable,2021-01-13 08:58:09.000 -010062400E69C000,"Bibi & Tina at the horse farm",status-playable,playable,2021-04-06 16:31:39.000 -01005FF00AF36000,"Bibi Blocksberg – Big Broom Race 3",status-playable,playable,2021-01-11 19:07:16.000 -010062B00A874000,"Big Buck Hunter Arcade",nvdec;status-playable,playable,2021-01-12 20:31:39.000 -010088100C35E000,"Big Crown: Showdown",status-menus;nvdec;online;ldn-untested,menus,2022-07-17 18:25:32.000 -0100A42011B28000,"Big Dipper",status-playable,playable,2021-06-14 15:08:19.000 -010077E00F30E000,"Big Pharma",status-playable,playable,2020-07-14 15:27:30.000 -010007401287E000,"BIG-Bobby-Car - The Big Race",slow;status-playable,playable,2020-12-10 14:25:06.000 -010057700FF7C000,"Billion Road",status-playable,playable,2022-11-19 15:57:43.000 -010087D008D64000,"BINGO for Nintendo Switch",status-playable,playable,2020-07-23 16:17:36.000 -01004BA017CD6000,"Biomutant",status-ingame;crash,ingame,2024-05-16 15:46:36.000 -01002620102C6000,"BioShock 2 Remastered",services;status-nothing,nothing,2022-10-29 14:39:22.000 -0100D560102C8000,"BioShock Infinite: The Complete Edition",services-horizon;status-nothing;crash,nothing,2024-08-11 21:35:01.000 -0100AD10102B2000,"BioShock Remastered",services-horizon;status-boots;crash;Needs Update,boots,2024-06-06 01:08:52.000 -010053B0117F8000,"Biped",status-playable;nvdec,playable,2022-10-01 13:32:58.000 -01001B700B278000,"Bird Game +",status-playable;online,playable,2022-07-17 18:41:57.000 -0100B6B012FF4000,"Birds and Blocks Demo",services;status-boots;demo,boots,2022-04-10 04:53:03.000 -0100E62012D3C000,"BIT.TRIP RUNNER",status-playable,playable,2022-10-17 14:23:24.000 -01000AD012D3A000,"BIT.TRIP VOID",status-playable,playable,2022-10-17 14:31:23.000 -0100A0800EA9C000,"Bite the Bullet",status-playable,playable,2020-10-14 23:10:11.000 -010026E0141C8000,"Bitmaster",status-playable,playable,2022-12-13 14:05:51.000 -010061D00FD26000,"Biz Builder Delux",slow;status-playable,playable,2020-12-15 21:36:25.000 -0100DD1014AB8000,"Black Book",status-playable;nvdec,playable,2022-12-13 16:38:53.000 -010049000B69E000,"Black Future '88",status-playable;nvdec,playable,2022-09-13 11:24:37.000 -01004BE00A682000,"Black Hole Demo",status-playable,playable,2021-02-12 23:02:17.000 -0100C3200E7E6000,"Black Legend",gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48.000 -010043A012A32000,"Blackjack Hands",status-playable,playable,2020-11-30 14:04:51.000 -0100A0A00E660000,"Blackmoor 2",status-playable;online-broken,playable,2022-09-26 20:26:34.000 -010032000EA2C000,"Blacksad: Under the Skin",status-playable,playable,2022-09-13 11:38:04.000 -01006B400C178000,"Blacksea Odyssey",status-playable;nvdec,playable,2022-10-16 22:14:34.000 -010068E013450000,"Blacksmith of the Sand Kingdom",status-playable,playable,2022-10-16 22:37:44.000 -0100C4400CB7C000,"BLADE ARCUS Rebellion From Shining",status-playable,playable,2022-07-17 18:52:28.000 -0100EA1018A2E000,"Blade Assault",audio;status-nothing,nothing,2024-04-29 14:32:50.000 -01009CC00E224000,"Blade II - The Return Of Evil",audio;status-ingame;crash;UE4,ingame,2021-11-14 02:49:59.000 -01005950022EC000,"Blade Strangers",status-playable;nvdec,playable,2022-07-17 19:02:43.000 -0100DF0011A6A000,"Bladed Fury",status-playable,playable,2022-10-26 11:36:26.000 -0100CFA00CC74000,"Blades of Time",deadlock;status-boots;online,boots,2022-07-17 19:19:58.000 -01006CC01182C000,"Blair Witch",status-playable;nvdec;UE4,playable,2022-10-01 14:06:16.000 -010039501405E000,"Blanc",gpu;slow;status-ingame,ingame,2023-02-22 14:00:13.000 -0100698009C6E000,"Blasphemous",nvdec;status-playable,playable,2021-03-01 12:15:31.000 -0100302010338000,"Blasphemous Demo",status-playable,playable,2021-02-12 23:49:56.000 -0100225000FEE000,"Blaster Master Zero",32-bit;status-playable,playable,2021-03-05 13:22:33.000 -01005AA00D676000,"Blaster Master Zero 2",status-playable,playable,2021-04-08 15:22:59.000 -010025B002E92000,"Blaster Master Zero Demo",status-playable,playable,2021-02-12 23:59:06.000 -0100E53013E1C000,"Blastoid Breakout",status-playable,playable,2021-01-25 23:28:02.000 -0100EE800C93E000,"BLAZBLUE CENTRALFICTION Special Edition",nvdec;status-playable,playable,2020-12-15 23:50:04.000 -0100B61008208000,"BLAZBLUE CROSS TAG BATTLE",nvdec;online;status-playable,playable,2021-01-05 20:29:37.000 -010021A00DE54000,"Blazing Beaks",status-playable,playable,2020-06-04 20:37:06.000 -0100C2700C252000,"Blazing Chrome",status-playable,playable,2020-11-16 04:56:54.000 -010091700EA2A000,"Bleep Bloop DEMO",nvdec;status-playable,playable,2021-02-13 00:20:53.000 -010089D011310000,"Blind Men",audout;status-playable,playable,2021-02-20 14:15:38.000 -0100743013D56000,"Blizzard® Arcade Collection",status-playable;nvdec,playable,2022-08-03 19:37:26.000 -0100F3500A20C000,"BlobCat",status-playable,playable,2021-04-23 17:09:30.000 -0100E1C00DB6C000,"Block-a-Pix Deluxe Demo",status-playable,playable,2021-02-13 00:37:39.000 -0100C6A01AD56000,"Bloo Kid",status-playable,playable,2024-05-01 17:18:04.000 -010055900FADA000,"Bloo Kid 2",status-playable,playable,2024-05-01 17:16:57.000 -0100EE5011DB6000,"Blood and Guts Bundle",status-playable,playable,2020-06-27 12:57:35.000 -01007E700D17E000,"Blood Waves",gpu;status-ingame,ingame,2022-07-18 13:04:46.000 -0100E060102AA000,"Blood will be Spilled",nvdec;status-playable,playable,2020-12-17 03:02:03.000 -01004B800AF5A000,"Bloodstained: Curse of the Moon",status-playable,playable,2020-09-04 10:42:17.000 -01004680124E6000,"Bloodstained: Curse of the Moon 2",status-playable,playable,2020-09-04 10:56:27.000 -010025A00DF2A000,"Bloodstained: Ritual of the Night",status-playable;nvdec;UE4,playable,2022-07-18 14:27:35.000 -0100E510143EC000,"Bloody Bunny, The Game",status-playable;nvdec;UE4,playable,2022-10-22 13:18:55.000 -0100B8400A1C6000,"Bloons TD 5",Needs Update;audio;gpu;services;status-boots,boots,2021-04-18 23:02:46.000 -01000EB01023E000,"Blossom Tales Demo",status-playable,playable,2021-02-13 14:22:53.000 -0100C1000706C000,"Blossom Tales: The Sleeping King",status-playable,playable,2022-07-18 16:43:07.000 -010073B010F6E000,"Blue Fire",status-playable;UE4,playable,2022-10-22 14:46:11.000 -0100721013510000,"Body of Evidence",status-playable,playable,2021-04-25 22:22:11.000 -0100AD1010CCE000,"Bohemian Killing",status-playable;vulkan-backend-bug,playable,2022-09-26 22:41:37.000 -010093700ECEC000,"Boku to Nurse no Kenshuu Nisshi",status-playable,playable,2022-11-21 20:38:34.000 -01001D900D9AC000,"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",slow;status-ingame;crash;Needs Update,ingame,2022-04-24 22:46:04.000 -0100317014B7C000,"Bomb Rush Cyberfunk",status-playable,playable,2023-09-28 19:51:57.000 -01007900080B6000,"Bomber Crew",status-playable,playable,2021-06-03 14:21:28.000 -0100A1F012948000,"Bomber Fox",nvdec;status-playable,playable,2021-04-19 17:58:13.000 -010087300445A000,"Bombslinger",services;status-menus,menus,2022-07-19 12:53:15.000 -01007A200F452000,"Book of Demons",status-playable,playable,2022-09-29 12:03:43.000 -010054500F564000,"Bookbound Brigade",status-playable,playable,2020-10-09 14:30:29.000 -01002E6013ED8000,"Boom Blaster",status-playable,playable,2021-03-24 10:55:56.000 -010081A00EE62000,"Boomerang Fu",status-playable,playable,2024-07-28 01:12:41.000 -010069F0135C4000,"Boomerang Fu Demo Version",demo;status-playable,playable,2021-02-13 14:38:13.000 -01009970122E4000,"Borderlands 3 Ultimate Edition",gpu;status-ingame,ingame,2024-07-15 04:38:14.000 -010064800F66A000,"Borderlands: Game of the Year Edition",slow;status-ingame;online-broken;ldn-untested,ingame,2023-07-23 21:10:36.000 -010096F00FF22000,"Borderlands: The Handsome Collection",status-playable,playable,2022-04-22 18:35:07.000 -010007400FF24000,"Borderlands: The Pre-Sequel",nvdec;status-playable,playable,2021-06-09 20:17:10.000 -01008E500AFF6000,"Boreal Blade",gpu;ldn-untested;online;status-ingame,ingame,2021-06-11 15:37:14.000 -010092C013FB8000,"BORIS THE ROCKET",status-playable,playable,2022-10-26 13:23:09.000 -010076F00EBE4000,"BOSSGARD",status-playable;online-broken,playable,2022-10-04 14:21:13.000 -010069B00EAC8000,"Bot Vice Demo",crash;demo;status-ingame,ingame,2021-02-13 14:52:42.000 -010081100FE08000,"Bouncy Bob 2",status-playable,playable,2020-07-14 16:51:53.000 -0100E1200DC1A000,"Bounty Battle",status-playable;nvdec,playable,2022-10-04 14:40:51.000 -0100B4700C57E000,"Bow to Blood: Last Captain Standing",slow;status-playable,playable,2020-10-23 10:51:21.000 -010040800BA8A000,"Box Align",crash;services;status-nothing,nothing,2020-04-03 17:26:56.000 -010018300D006000,"BOXBOY! + BOXGIRL!™",status-playable,playable,2020-11-08 01:11:54.000 -0100B7200E02E000,"BOXBOY! + BOXGIRL!™ Demo",demo;status-playable,playable,2021-02-13 14:59:08.000 -0100CA400B6D0000,"BQM -BlockQuest Maker-",online;status-playable,playable,2020-07-31 20:56:50.000 -0100E87017D0E000,"Bramble: The Mountain King",services-horizon;status-playable,playable,2024-03-06 09:32:17.000 -01000F5003068000,"Brave Dungeon + Dark Witch Story:COMBAT",status-playable,playable,2021-01-12 21:06:34.000 -01006DC010326000,"BRAVELY DEFAULT™ II",gpu;status-ingame;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26.000 -0100B6801137E000,"Bravely Default™ II Demo",gpu;status-ingame;crash;UE4;demo,ingame,2022-09-27 05:39:47.000 -010081501371E000,"BraveMatch",status-playable;UE4,playable,2022-10-26 13:32:15.000 -0100F60017D4E000,"Bravery and Greed",gpu;deadlock;status-boots,boots,2022-12-04 02:23:47.000 -0100A42004718000,"BRAWL",nvdec;slow;status-playable,playable,2020-06-04 14:23:18.000 -010068F00F444000,"Brawl Chess",status-playable;nvdec,playable,2022-10-26 13:59:17.000 -0100C6800B934000,"Brawlhalla",online;opengl;status-playable,playable,2021-06-03 18:26:09.000 -010060200A4BE000,"Brawlout",ldn-untested;online;status-playable,playable,2021-06-04 17:35:35.000 -0100C1B00E1CA000,"Brawlout Demo",demo;status-playable,playable,2021-02-13 22:46:53.000 -010022C016DC8000,"Breakout: Recharged",slow;status-ingame,ingame,2022-11-06 15:32:57.000 -01000AA013A5E000,"Breathedge",UE4;nvdec;status-playable,playable,2021-05-06 15:44:28.000 -01003D50100F4000,"Breathing Fear",status-playable,playable,2020-07-14 15:12:29.000 -010026800BB06000,"Brick Breaker",nvdec;online;status-playable,playable,2020-12-15 18:26:23.000 -01002AD0126AE000,"Bridge Constructor: The Walking Dead",gpu;slow;status-ingame,ingame,2020-12-11 17:31:32.000 -01000B1010D8E000,"Bridge! 3",status-playable,playable,2020-10-08 20:47:24.000 -010011000EA7A000,"BRIGANDINE The Legend of Runersia",status-playable,playable,2021-06-20 06:52:25.000 -0100703011258000,"BRIGANDINE The Legend of Runersia Demo",status-playable,playable,2021-02-14 14:44:10.000 -01000BF00BE40000,"Bring Them Home",UE4;status-playable,playable,2021-04-12 14:14:43.000 -010060A00B53C000,"Broforce",ldn-untested;online;status-playable,playable,2021-05-28 12:23:38.000 -0100EDD0068A6000,"Broken Age",status-playable,playable,2021-06-04 17:40:32.000 -0100A5800F6AC000,"Broken Lines",status-playable,playable,2020-10-16 00:01:37.000 -01001E60085E6000,"Broken Sword 5 - the Serpent's Curse",status-playable,playable,2021-06-04 17:28:59.000 -0100F19011226000,"Brotherhood United Demo",demo;status-playable,playable,2021-02-14 21:10:57.000 -01000D500D08A000,"Brothers: A Tale of Two Sons",status-playable;nvdec;UE4,playable,2022-07-19 14:02:22.000 -0100B2700E90E000,"Brunch Club",status-playable,playable,2020-06-24 13:54:07.000 -010010900F7B4000,"Bubble Bobble 4 Friends: The Baron is Back!",nvdec;status-playable,playable,2021-06-04 15:27:55.000 -0100DBE00C554000,"Bubsy: Paws on Fire!",slow;status-ingame,ingame,2023-08-24 02:44:51.000 -0100089010A92000,"Bucket Knight",crash;status-ingame,ingame,2020-09-04 13:11:24.000 -0100F1B010A90000,"Bucket Knight demo",demo;status-playable,playable,2021-02-14 21:23:09.000 -01000D200AC0C000,"Bud Spencer & Terence Hill - Slaps And Beans",status-playable,playable,2022-07-17 12:37:00.000 -010051A00E99E000,"Bug Fables: The Everlasting Sapling",status-playable,playable,2020-06-09 11:27:00.000 -01003DD00D658000,"Bulletstorm: Duke of Switch Edition",status-playable;nvdec,playable,2022-03-03 08:30:24.000 -01006BB00E8FA000,"BurgerTime Party!",slow;status-playable,playable,2020-11-21 14:11:53.000 -01005780106E8000,"BurgerTime Party! Demo",demo;status-playable,playable,2021-02-14 21:34:16.000 -010078C00DB40000,"Buried Stars",status-playable,playable,2020-09-07 14:11:58.000 -0100DBF01000A000,"Burnout™ Paradise Remastered",nvdec;online;status-playable,playable,2021-06-13 02:54:46.000 -010066F00C76A000,"Bury me, my Love",status-playable,playable,2020-11-07 12:47:37.000 -010030D012FF6000,"Bus Driver Simulator",status-playable,playable,2022-10-17 13:55:27.000 -0100A9101418C000,"BUSTAFELLOWS",nvdec;status-playable,playable,2020-10-17 20:04:41.000 -0100177005C8A000,"BUTCHER",status-playable,playable,2021-01-11 18:50:17.000 -01000B900D8B0000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda",slow;status-playable;nvdec,playable,2024-04-01 22:43:40.000 -010065700EE06000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda Demo",demo;gpu;nvdec;status-ingame,ingame,2021-02-14 21:48:15.000 -01005C00117A8000,"Café Enchanté",status-playable,playable,2020-11-13 14:54:25.000 -010060400D21C000,"Cafeteria Nipponica Demo",demo;status-playable,playable,2021-02-14 22:11:35.000 -0100699012F82000,"Cake Bash Demo",crash;demo;status-ingame,ingame,2021-02-14 22:21:15.000 -01004FD00D66A000,"Caladrius Blaze",deadlock;status-nothing;nvdec,nothing,2022-12-07 16:44:37.000 -01004B500AB88000,"Calculation Castle : Greco's Ghostly Challenge Addition""""",32-bit;status-playable,playable,2020-11-01 23:40:11.000 -010045500B212000,"Calculation Castle : Greco's Ghostly Challenge Division """"",32-bit;status-playable,playable,2020-11-01 23:54:55.000 -0100ECE00B210000,"Calculation Castle : Greco's Ghostly Challenge Multiplication """"",32-bit;status-playable,playable,2020-11-02 00:04:33.000 -0100A6500B176000,"Calculation Castle : Greco's Ghostly Challenge Subtraction """"",32-bit;status-playable,playable,2020-11-01 23:47:42.000 -010004701504A000,"Calculator",status-playable,playable,2021-06-11 13:27:20.000 -010013A00E750000,"Calico",status-playable,playable,2022-10-17 14:44:28.000 -010046000EE40000,"Call of Cthulhu",status-playable;nvdec;UE4,playable,2022-12-18 03:08:30.000 -0100B4700BFC6000,"Call of Juarez: Gunslinger",gpu;status-ingame;nvdec,ingame,2022-09-17 16:49:46.000 -0100593008BDC000,"Can't Drive This",status-playable,playable,2022-10-22 14:55:17.000 -0100E4600B166000,"Candle: The Power of the Flame",nvdec;status-playable,playable,2020-05-26 12:10:20.000 -01001E0013208000,"Capcom Arcade Stadium",status-playable,playable,2021-03-17 05:45:14.000 -010094E00B52E000,"Capcom Beat 'Em Up Bundle",status-playable,playable,2020-03-23 18:31:24.000 -0100F6400A77E000,"CAPCOM BELT ACTION COLLECTION",status-playable;online;ldn-untested,playable,2022-07-21 20:51:23.000 -01009BF0072D4000,"Captain Toad™: Treasure Tracker",32-bit;status-playable,playable,2024-04-25 00:50:16.000 -01002C400B6B6000,"Captain Toad™: Treasure Tracker Demo",32-bit;demo;status-playable,playable,2021-02-14 22:36:09.000 -0100EAE010560000,"Captain Tsubasa: Rise of New Champions",status-playable;online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50.000 -01002320137CC000,"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",slow;status-playable,playable,2021-02-14 22:45:35.000 -010048800D95C000,"Car Mechanic Manager",status-playable,playable,2020-07-23 18:50:17.000 -01007BD00AE70000,"Car Quest",deadlock;status-menus,menus,2021-11-18 08:59:18.000 -0100DA70115E6000,"Caretaker",status-playable,playable,2022-10-04 14:52:24.000 -0100DD6014870000,"Cargo Crew Driver",status-playable,playable,2021-04-19 12:54:22.000 -010088C0092FE000,"Carnival Games®",status-playable;nvdec,playable,2022-07-21 21:01:22.000 -01005F5011AC4000,"Carnivores: Dinosaur Hunt",status-playable,playable,2022-12-14 18:46:06.000 -0100B1600E9AE000,"CARRION",crash;status-nothing,nothing,2020-08-13 17:15:12.000 -01008D1001512000,"Cars 3: Driven to Win",gpu;status-ingame,ingame,2022-07-21 21:21:05.000 -0100810012A1A000,"Carto",status-playable,playable,2022-09-04 15:37:06.000 -0100085003A2A000,"Cartoon Network Battle Crashers",status-playable,playable,2022-07-21 21:55:40.000 -0100C4C0132F8000,"CASE 2: Animatronics Survival",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03.000 -010066F01A0E0000,"Cassette Beasts",status-playable,playable,2024-07-22 20:38:43.000 -010001300D14A000,"Castle Crashers Remastered",gpu;status-boots,boots,2024-08-10 09:21:20.000 -0100F6D01060E000,"Castle Crashers Remastered Demo",gpu;status-boots;demo,boots,2022-04-10 10:57:10.000 -01003C100445C000,"Castle of Heart",status-playable;nvdec,playable,2022-07-21 23:10:45.000 -0100F5500FA0E000,"Castle of no Escape 2",status-playable,playable,2022-09-13 13:51:42.000 -0100DA2011F18000,"Castle Pals",status-playable,playable,2021-03-04 21:00:33.000 -010097C00AB66000,"CastleStorm",status-playable;nvdec,playable,2022-07-21 22:49:14.000 -010007400EB64000,"CastleStorm II",UE4;crash;nvdec;status-boots,boots,2020-10-25 11:22:44.000 -01001A800D6BC000,"Castlevania Anniversary Collection",audio;status-playable,playable,2020-05-23 11:40:29.000 -010076000C86E000,"Cat Girl Without Salad: Amuse-Bouche",status-playable,playable,2022-09-03 13:01:47.000 -0100A2F006FBE000,"Cat Quest",status-playable,playable,2020-04-02 23:09:32.000 -01008BE00E968000,"Cat Quest II",status-playable,playable,2020-07-06 23:52:09.000 -0100E86010220000,"Cat Quest II Demo",demo;status-playable,playable,2021-02-15 14:11:57.000 -0100BAE0077E4000,"Catherine Full Body for Nintendo Switch (JP)",Needs Update;gpu;status-ingame,ingame,2021-02-21 18:06:11.000 -0100BF00112C0000,"Catherine: Full Body",status-playable;nvdec,playable,2023-04-02 11:00:37.000 -010004400B28A000,"Cattails",status-playable,playable,2021-06-03 14:36:57.000 -0100B7D0022EE000,"Cave Story+",status-playable,playable,2020-05-22 09:57:25.000 -01001A100C0E8000,"Caveblazers",slow;status-ingame,ingame,2021-06-09 17:57:28.000 -01006DB004566000,"Caveman Warriors",status-playable,playable,2020-05-22 11:44:20.000 -010078700B2CC000,"Caveman Warriors Demo",demo;status-playable,playable,2021-02-15 14:44:08.000 -01002B30028F6000,"Celeste",status-playable,playable,2020-06-17 10:14:40.000 -01006B000A666000,"Cendrillon palikA",gpu;status-ingame;nvdec,ingame,2022-07-21 22:52:24.000 -01007600115CE000,"CHAOS CODE -NEW SIGN OF CATASTROPHE-",status-boots;crash;nvdec,boots,2022-04-04 12:24:21.000 -0100957016B90000,"CHAOS;HEAD NOAH",status-playable,playable,2022-06-02 22:57:19.000 -0100F52013A66000,"Charge Kid",gpu;status-boots;audout,boots,2024-02-11 01:17:47.000 -0100DE200C350000,"Chasm",status-playable,playable,2020-10-23 11:03:43.000 -010034301A556000,"Chasm: The Rift",gpu;status-ingame,ingame,2024-04-29 19:02:48.000 -0100A5900472E000,"Chess Ultra",status-playable;UE4,playable,2023-08-30 23:06:31.000 -0100E3C00A118000,"Chicken Assassin: Reloaded",status-playable,playable,2021-02-20 13:29:01.000 -0100713010E7A000,"Chicken Police – Paint it RED!",nvdec;status-playable,playable,2020-12-10 15:10:11.000 -0100F6C00A016000,"Chicken Range",status-playable,playable,2021-04-23 12:14:23.000 -01002E500E3EE000,"Chicken Rider",status-playable,playable,2020-05-22 11:31:17.000 -0100CAC011C3A000,"Chickens Madness DEMO",UE4;demo;gpu;nvdec;status-ingame,ingame,2021-02-15 15:02:10.000 -01007D000AD8A000,"Child of Light® Ultimate Edition",nvdec;status-playable,playable,2020-12-16 10:23:10.000 -01002DE00C250000,"Children of Morta",gpu;status-ingame;nvdec,ingame,2022-09-13 17:48:47.000 -0100C1A00AC3E000,"Children of Zodiarcs",status-playable,playable,2020-10-04 14:23:33.000 -010046F012A04000,"Chinese Parents",status-playable,playable,2021-04-08 12:56:41.000 -01005A001489A000,"Chiptune Arrange Sound(DoDonPachi Resurrection)",status-ingame;32-bit;crash,ingame,2024-01-25 14:37:32.000 -01006A30124CA000,"Chocobo GP",gpu;status-ingame;crash,ingame,2022-06-04 14:52:18.000 -0100BF600BF26000,"Chocobo's Mystery Dungeon EVERY BUDDY!",slow;status-playable,playable,2020-05-26 13:53:13.000 -01000BA0132EA000,"Choices That Matter: And The Sun Went Out",status-playable,playable,2020-12-17 15:44:08.000 -,"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",gpu;nvdec;status-ingame,ingame,2020-09-28 17:58:04.000 -010039A008E76000,"ChromaGun",status-playable,playable,2020-05-26 12:56:42.000 -010006800E13A000,"Chronos: Before the Ashes",UE4;gpu;nvdec;status-ingame,ingame,2020-12-11 22:16:35.000 -010039700BA7E000,"Circle of Sumo",status-playable,playable,2020-05-22 12:45:21.000 -01008FA00D686000,"Circuits",status-playable,playable,2022-09-19 11:52:50.000 -0100D8800B87C000,"Cities: Skylines - Nintendo Switch™ Edition",status-playable,playable,2020-12-16 10:34:57.000 -0100E4200D84E000,"Citizens of Space",gpu;status-boots,boots,2023-10-22 06:45:44.000 -0100D9C012900000,"Citizens Unite!: Earth x Space",gpu;status-ingame,ingame,2023-10-22 06:44:19.000 -01005E501284E000,"City Bus Driving Simulator",status-playable,playable,2021-06-15 21:25:59.000 -0100A3A00CC7E000,"CLANNAD",status-playable,playable,2021-06-03 17:01:02.000 -01007B501372C000,"CLANNAD Side Stories",status-playable,playable,2022-10-26 15:03:04.000 -01005ED0107F4000,"Clash Force",status-playable,playable,2022-10-01 23:45:48.000 -010009300AA6C000,"Claybook",slow;status-playable;nvdec;online;UE4,playable,2022-07-22 11:11:34.000 -010058900F52E000,"Clea",crash;status-ingame,ingame,2020-12-15 16:22:56.000 -010045E0142A4000,"Clea 2",status-playable,playable,2021-04-18 14:25:18.000 -01008C100C572000,"Clock Zero ~Shuuen no Ichibyou~ Devote",status-playable;nvdec,playable,2022-12-04 22:19:14.000 -0100DF9013AD4000,"Clocker",status-playable,playable,2021-04-05 15:05:13.000 -0100B7200DAC6000,"Close to the Sun",status-boots;crash;nvdec;UE4,boots,2021-11-04 09:19:41.000 -010047700D540000,"Clubhouse Games™: 51 Worldwide Classics",status-playable;ldn-works,playable,2024-05-21 16:12:57.000 -0100C1401CEDC000,"Clue",crash;online;status-menus,menus,2020-11-10 09:23:48.000 -010085A00821A000,"ClusterPuck 99",status-playable,playable,2021-01-06 00:28:12.000 -010096900A4D2000,"Clustertruck",slow;status-ingame,ingame,2021-02-19 21:07:09.000 -01005790110F0000,"Cobra Kai: The Karate Kid Saga Continues",status-playable,playable,2021-06-17 15:59:13.000 -01002E700C366000,"COCOON",gpu;status-ingame,ingame,2024-03-06 11:33:08.000 -010034E005C9C000,"Code of Princess EX",nvdec;online;status-playable,playable,2021-06-03 10:50:13.000 -010086100CDCA000,"CODE SHIFTER",status-playable,playable,2020-08-09 15:20:55.000 -010002400F408000,"Code: Realize ~Future Blessings~",status-playable;nvdec,playable,2023-03-31 16:57:47.000 -0100CF800C810000,"Coffee Crisis",status-playable,playable,2021-02-20 12:34:52.000 -010066200E1E6000,"Coffee Talk",status-playable,playable,2020-08-10 09:48:44.000 -0100178009648000,"Coffin Dodgers",status-playable,playable,2021-02-20 14:57:41.000 -010035B01706E000,"Cold Silence",cpu;status-nothing;crash,nothing,2024-07-11 17:06:14.000 -010083E00F40E000,"Collar X Malice",status-playable;nvdec,playable,2022-10-02 11:51:56.000 -0100E3B00F412000,"Collar X Malice -Unlimited-",status-playable;nvdec,playable,2022-10-04 15:30:40.000 -01002A600D7FC000,"Collection of Mana",status-playable,playable,2020-10-19 19:29:45.000 -0100B77012266000,"COLLECTION of SaGa FINAL FANTASY LEGEND",status-playable,playable,2020-12-30 19:11:16.000 -010030800BC36000,"Collidalot",status-playable;nvdec,playable,2022-09-13 14:09:27.000 -0100CA100C0BA000,"Color Zen",status-playable,playable,2020-05-22 10:56:17.000 -010039B011312000,"Colorgrid",status-playable,playable,2020-10-04 01:50:52.000 -0100A7000BD28000,"Coloring Book",status-playable,playable,2022-07-22 11:17:05.000 -010020500BD86000,"Colors Live",gpu;services;status-boots;crash,boots,2023-02-26 02:51:07.000 -0100E2F0128B4000,"Colossus Down",status-playable,playable,2021-02-04 20:49:50.000 -0100C4D00D16A000,"Commander Keen in Keen Dreams",gpu;status-ingame,ingame,2022-08-04 20:34:20.000 -0100E400129EC000,"Commander Keen in Keen Dreams: Definitive Edition",status-playable,playable,2021-05-11 19:33:54.000 -010065A01158E000,"Commandos 2 - HD Remaster",gpu;status-ingame;nvdec,ingame,2022-08-10 21:52:27.000 -010015801308E000,"Conarium",UE4;nvdec;status-playable,playable,2021-04-26 17:57:53.000 -0100971011224000,"Concept Destruction",status-playable,playable,2022-09-29 12:28:56.000 -010043700C9B0000,"Conduct TOGETHER!",nvdec;status-playable,playable,2021-02-20 12:59:00.000 -01007EF00399C000,"Conga Master Party!",status-playable,playable,2020-05-22 13:22:24.000 -0100A5600FAC0000,"Construction Simulator 3 - Console Edition",status-playable,playable,2023-02-06 09:31:23.000 -0100A330022C2000,"Constructor Plus",status-playable,playable,2020-05-26 12:37:40.000 -0100DCA00DA7E000,"Contra Anniversary Collection",status-playable,playable,2022-07-22 11:30:12.000 -0100F2600D710000,"CONTRA: ROGUE CORPS",crash;nvdec;regression;status-menus,menus,2021-01-07 13:23:35.000 -0100B8200ECA6000,"CONTRA: ROGUE CORPS Demo",gpu;status-ingame,ingame,2022-09-04 16:46:52.000 -01007D701298A000,"Contraptions",status-playable,playable,2021-02-08 18:40:50.000 -0100041013360000,"Control Ultimate Edition - Cloud Version",Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:34:06.000 -010058800E90A000,"Convoy: A Tactical Roguelike",status-playable,playable,2020-10-15 14:43:50.000 -0100B82010B6C000,"Cook, Serve, Delicious! 3?!",status-playable,playable,2022-10-09 12:09:34.000 -010060700EFBA000,"Cooking Mama: Cookstar",status-menus;crash;loader-allocator,menus,2021-11-20 03:19:35.000 -01001E400FD58000,"Cooking Simulator",status-playable,playable,2021-04-18 13:25:23.000 -0100DF9010206000,"Cooking Tycoons - 3 in 1 Bundle",status-playable,playable,2020-11-16 22:44:26.000 -01005350126E0000,"Cooking Tycoons 2 - 3 in 1 Bundle",status-playable,playable,2020-11-16 22:19:33.000 -0100C5A0115C4000,"CopperBell",status-playable,playable,2020-10-04 15:54:36.000 -010016400B1FE000,"Corpse Party: Blood Drive",nvdec;status-playable,playable,2021-03-01 12:44:23.000 -0100CCB01B1A0000,"COSMIC FANTASY COLLECTION",status-ingame,ingame,2024-05-21 17:56:37.000 -010067C00A776000,"Cosmic Star Heroine",status-playable,playable,2021-02-20 14:30:47.000 -01003DD00F94A000,"COTTOn Reboot! [ コットン リブート! ]",status-playable,playable,2022-05-24 16:29:24.000 -,"Cotton/Guardian Saturn Tribute Games",gpu;status-boots,boots,2022-11-27 21:00:51.000 -01000E301107A000,"Couch Co-Op Bundle Vol. 2",status-playable;nvdec,playable,2022-10-02 12:04:21.000 -0100C1E012A42000,"Country Tales",status-playable,playable,2021-06-17 16:45:39.000 -01003370136EA000,"Cozy Grove",gpu;status-ingame,ingame,2023-07-30 22:22:19.000 -010073401175E000,"Crash Bandicoot™ 4: It’s About Time",status-playable;nvdec;UE4,playable,2024-03-17 07:13:45.000 -0100D1B006744000,"Crash Bandicoot™ N. Sane Trilogy",status-playable,playable,2024-02-11 11:38:14.000 -010007900FCE2000,"Crash Drive 2",online;status-playable,playable,2020-12-17 02:45:46.000 -010046600BD0E000,"Crash Dummy",nvdec;status-playable,playable,2020-05-23 11:12:43.000 -0100BF200CD74000,"Crashbots",status-playable,playable,2022-07-22 13:50:52.000 -010027100BD16000,"Crashlands",status-playable,playable,2021-05-27 20:30:06.000 -0100F9F00C696000,"Crash™ Team Racing Nitro-Fueled",gpu;status-ingame;nvdec;online-broken,ingame,2023-06-25 02:40:17.000 -0100BF7006BCA000,"Crawl",status-playable,playable,2020-05-22 10:16:05.000 -0100C66007E96000,"Crayola Scoot",status-playable;nvdec,playable,2022-07-22 14:01:55.000 -01005BA00F486000,"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",status-playable,playable,2021-07-21 10:41:33.000 -0100D470106DC000,"CRAYON SHINCHAN The Storm Called FLAMING KASUKABE RUNNER!!",services;status-menus,menus,2020-03-20 14:00:57.000 -01006BC00C27A000,"Crazy Strike Bowling EX",UE4;gpu;nvdec;status-ingame,ingame,2020-08-07 18:15:59.000 -0100F9900D8C8000,"Crazy Zen Mini Golf",status-playable,playable,2020-08-05 14:00:00.000 -0100B0E010CF8000,"Creaks",status-playable,playable,2020-08-15 12:20:52.000 -01007C600D778000,"Creature in the Well",UE4;gpu;status-ingame,ingame,2020-11-16 12:52:40.000 -0100A19011EEE000,"Creepy Tale",status-playable,playable,2020-12-15 21:58:03.000 -01005C2013B00000,"Cresteaju",gpu;status-ingame,ingame,2021-03-24 10:46:06.000 -010022D00D4F0000,"Cricket 19",gpu;status-ingame,ingame,2021-06-14 14:56:07.000 -0100387017100000,"Cricket 22 The Official Game Of The Ashes",status-boots;crash,boots,2023-10-18 08:01:57.000 -01005640080B0000,"Crimsonland",status-playable,playable,2021-05-27 20:50:54.000 -0100B0400EBC4000,"Cris Tales",crash;status-ingame,ingame,2021-07-29 15:10:53.000 -01004BC0166CC000,"CRISIS CORE –FINAL FANTASY VII– REUNION",status-playable,playable,2022-12-19 15:53:59.000 -01004F800C4DA000,"Croc's World",status-playable,playable,2020-05-22 11:21:09.000 -01009DB00DE12000,"Croc's World 2",status-playable,playable,2020-12-16 20:01:40.000 -010025200FC54000,"Croc's World 3",status-playable,playable,2020-12-30 18:53:26.000 -01000F0007D92000,"Croixleur Sigma",status-playable;online,playable,2022-07-22 14:26:54.000 -01003D90058FC000,"CrossCode",status-playable,playable,2024-02-17 10:23:19.000 -0100B1E00AA56000,"Crossing Souls",nvdec;status-playable,playable,2021-02-20 15:42:54.000 -0100059012BAE000,"Crown Trick",status-playable,playable,2021-06-16 19:36:29.000 -0100B41013C82000,"Cruis'n Blast",gpu;status-ingame,ingame,2023-07-30 10:33:47.000 -01000CC01C108000,"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",status-playable;demo,playable,2023-08-06 05:33:21.000 -0100CEA007D08000,"Crypt of the NecroDancer: Nintendo Switch Edition",status-playable;nvdec,playable,2022-11-01 09:52:06.000 -0100582010AE0000,"Crysis 2 Remastered",deadlock;status-menus,menus,2023-09-21 10:46:17.000 -0100CD3010AE2000,"Crysis 3 Remastered",deadlock;status-menus,menus,2023-09-10 16:03:50.000 -0100E66010ADE000,"Crysis Remastered",status-menus;nvdec,menus,2024-08-13 05:23:24.000 -0100972008234000,"Crystal Crisis",nvdec;status-playable,playable,2021-02-20 13:52:44.000 -01006FA012FE0000,"Cthulhu Saves Christmas",status-playable,playable,2020-12-14 00:58:55.000 -010001600D1E8000,"Cube Creator X",status-menus;crash,menus,2021-11-25 08:53:28.000 -010082E00F1CE000,"Cubers: Arena",status-playable;nvdec;UE4,playable,2022-10-04 16:05:40.000 -010040D011D04000,"Cubicity",status-playable,playable,2021-06-14 14:19:51.000 -0100A5C00D162000,"Cuphead",status-playable,playable,2022-02-01 22:45:55.000 -0100F7E00DFC8000,"Cupid Parasite",gpu;status-ingame,ingame,2023-08-21 05:52:36.000 -010054501075C000,"Curious Cases",status-playable,playable,2020-08-10 09:30:48.000 -0100D4A0118EA000,"Curse of the Dead Gods",status-playable,playable,2022-08-30 12:25:38.000 -0100CE5014026000,"Curved Space",status-playable,playable,2023-01-14 22:03:50.000 -0100C1300DE74000,"Cyber Protocol",nvdec;status-playable,playable,2020-09-28 14:47:40.000 -0100C1F0141AA000,"Cyber Shadow",status-playable,playable,2022-07-17 05:37:41.000 -01006B9013672000,"Cybxus Hearts",gpu;slow;status-ingame,ingame,2022-01-15 05:00:49.000 -010063100B2C2000,"Cytus α",nvdec;status-playable,playable,2021-02-20 13:40:46.000 -0100B6400CA56000,"DAEMON X MACHINA™",UE4;audout;ldn-untested;nvdec;status-playable,playable,2021-06-09 19:22:29.000 -010061300DF48000,"Dairoku: Ayakashimori",status-nothing;Needs Update;loader-allocator,nothing,2021-11-30 05:09:38.000 -0100BD2009A1C000,"Damsel",status-playable,playable,2022-09-06 11:54:39.000 -0100BFC002B4E000,"Dandara: Trials of Fear Edition",status-playable,playable,2020-05-26 12:42:33.000 -0100DFB00D808000,"Dandy Dungeon - Legend of Brave Yamada -",status-playable,playable,2021-01-06 09:48:47.000 -01003ED0099B0000,"Danger Mouse: The Danger Games",status-boots;crash;online,boots,2022-07-22 15:49:45.000 -0100EFA013E7C000,"Danger Scavenger",nvdec;status-playable,playable,2021-04-17 15:53:04.000 -0100417007F78000,"Danmaku Unlimited 3",status-playable,playable,2020-11-15 00:48:35.000 -,"Darius Cozmic Collection",status-playable,playable,2021-02-19 20:59:06.000 -010059C00BED4000,"Darius Cozmic Collection Special Edition",status-playable,playable,2022-07-22 16:26:50.000 -010015800F93C000,"Dariusburst - Another Chronicle EX+",online;status-playable,playable,2021-04-05 14:21:43.000 -01003D301357A000,"Dark Arcana: The Carnival",gpu;slow;status-ingame,ingame,2022-02-19 08:52:28.000 -010083A00BF6C000,"Dark Devotion",status-playable;nvdec,playable,2022-08-09 09:41:18.000 -0100BFF00D5AE000,"Dark Quest 2",status-playable,playable,2020-11-16 21:34:52.000 -01004AB00A260000,"DARK SOULS™: REMASTERED",gpu;status-ingame;nvdec;online-broken,ingame,2024-04-09 19:47:58.000 -01001FA0034E2000,"Dark Witch Music Episode: Rudymical",status-playable,playable,2020-05-22 09:44:44.000 -01008F1008DA6000,"Darkest Dungeon",status-playable;nvdec,playable,2022-07-22 18:49:18.000 -0100F2300D4BA000,"Darksiders Genesis",status-playable;nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25.000 -010071800BA98000,"Darksiders II Deathinitive Edition",gpu;status-ingame;nvdec;online-broken,ingame,2024-06-26 00:37:25.000 -0100E1400BA96000,"Darksiders Warmastered Edition",status-playable;nvdec,playable,2023-03-02 18:08:09.000 -010033500B7B6000,"Darkwood",status-playable,playable,2021-01-08 21:24:06.000 -0100440012FFA000,"DARQ Complete Edition",audout;status-playable,playable,2021-04-07 15:26:21.000 -0100BA500B660000,"Darts Up",status-playable,playable,2021-04-14 17:22:22.000 -0100F0B0081DA000,"Dawn of the Breakers",status-menus;online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03.000 -0100FCF00F6CC000,"Day and Night",status-playable,playable,2020-12-17 12:30:51.000 -0100D0A009310000,"de Blob",nvdec;status-playable,playable,2021-01-06 17:34:46.000 -010034E00A114000,"de Blob 2",nvdec;status-playable,playable,2021-01-06 13:00:16.000 -01008E900471E000,"De Mambo",status-playable,playable,2021-04-10 12:39:40.000 -01004C400CF96000,"Dead by Daylight",status-boots;nvdec;online-broken;UE4,boots,2022-09-13 14:32:13.000 -0100646009FBE000,"Dead Cells",status-playable,playable,2021-09-22 22:18:49.000 -01004C500BD40000,"Dead End Job",status-playable;nvdec,playable,2022-09-19 12:48:44.000 -01009CC00C97C000,"DEAD OR ALIVE Xtreme 3 Scarlet",status-playable,playable,2022-07-23 17:05:06.000 -0100A5000F7AA000,"DEAD OR SCHOOL",status-playable;nvdec,playable,2022-09-06 12:04:09.000 -0100A24011F52000,"Dead Z Meat",UE4;services;status-ingame,ingame,2021-04-14 16:50:16.000 -010095A011A14000,"Deadly Days",status-playable,playable,2020-11-27 13:38:55.000 -0100BAC011928000,"Deadly Premonition 2: A Blessing In Disguise",status-playable,playable,2021-06-15 14:12:36.000 -0100EBE00F22E000,"Deadly Premonition Origins",32-bit;status-playable;nvdec,playable,2024-03-25 12:47:46.000 -,"Dear Magi - Mahou Shounen Gakka -",status-playable,playable,2020-11-22 16:45:16.000 -01000D60126B6000,"Death and Taxes",status-playable,playable,2020-12-15 20:27:49.000 -010012B011AB2000,"Death Come True",nvdec;status-playable,playable,2021-06-10 22:30:49.000 -0100F3B00CF32000,"Death Coming",status-nothing;crash,nothing,2022-02-06 07:43:03.000 -0100AEC013DDA000,"Death end re;Quest",status-playable,playable,2023-07-09 12:19:54.000 -0100423009358000,"Death Road to Canada",gpu;audio;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:26.000 -010085900337E000,"Death Squared",status-playable,playable,2020-12-04 13:00:15.000 -0100A51013550000,"Death Tales",status-playable,playable,2020-12-17 10:55:52.000 -0100492011A8A000,"Death's Hangover",gpu;status-boots,boots,2023-08-01 22:38:06.000 -01009120119B4000,"Deathsmiles I・II",status-playable,playable,2024-04-08 19:29:00.000 -010034F00BFC8000,"Debris Infinity",nvdec;online;status-playable,playable,2021-05-28 12:14:39.000 -010027700FD2E000,"Decay of Logos",status-playable;nvdec,playable,2022-09-13 14:42:13.000 -01002CC0062B8000,"DEEMO",status-playable,playable,2022-07-24 11:34:33.000 -01008B10132A2000,"DEEMO -Reborn-",status-playable;nvdec;online-broken,playable,2022-10-17 15:18:11.000 -010026800FA88000,"Deep Diving Adventures",status-playable,playable,2022-09-22 16:43:37.000 -0100FAF009562000,"Deep Ones",services;status-nothing,nothing,2020-04-03 02:54:19.000 -0100C3E00D68E000,"Deep Sky Derelicts: Definitive Edition",status-playable,playable,2022-09-27 11:21:08.000 -01000A700F956000,"Deep Space Rush",status-playable,playable,2020-07-07 23:30:33.000 -0100961011BE6000,"DeepOne",services-horizon;status-nothing;Needs Update,nothing,2024-01-18 15:01:05.000 -01008BB00F824000,"Defenders of Ekron: Definitive Edition",status-playable,playable,2021-06-11 16:31:03.000 -0100CDE0136E6000,"Defentron",status-playable,playable,2022-10-17 15:47:56.000 -010039300BDB2000,"Defunct",status-playable,playable,2021-01-08 21:33:46.000 -010067900B9C4000,"Degrees of Separation",status-playable,playable,2021-01-10 13:40:04.000 -010071C00CBA4000,"Dei Gratia no Rashinban",crash;status-nothing,nothing,2021-07-13 02:25:32.000 -010092E00E7F4000,"Deleveled",slow;status-playable,playable,2020-12-15 21:02:29.000 -010023800D64A000,"DELTARUNE Chapter 1&2",status-playable,playable,2023-01-22 04:47:44.000 -010038B01D2CA000,"Dementium: The Ward",status-boots;crash,boots,2024-09-02 08:28:14.000 -0100AB600ACB4000,"Demetrios - The BIG Cynical Adventure",status-playable,playable,2021-06-04 12:01:01.000 -010099D00D1A4000,"Demolish & Build 2018",status-playable,playable,2021-06-13 15:27:26.000 -010084600F51C000,"Demon Pit",status-playable;nvdec,playable,2022-09-19 13:35:15.000 -0100309016E7A000,"Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",status-playable;UE4,playable,2024-08-08 04:51:49.000 -0100A2B00BD88000,"Demon's Crystals",status-nothing;crash;regression,nothing,2022-12-07 16:33:17.000 -0100E29013818000,"Demon's Rise - Lords of Chaos",status-playable,playable,2021-04-06 16:20:06.000 -0100C3501094E000,"Demon's Rise - War for the Deep",status-playable,playable,2020-07-29 12:26:27.000 -0100161011458000,"Demon's Tier+",status-playable,playable,2021-06-09 17:25:36.000 -0100BE800E6D8000,"DEMON'S TILT",status-playable,playable,2022-09-19 13:22:46.000 -010000401313A000,"Demong Hunter",status-playable,playable,2020-12-12 15:27:08.000 -0100BC501355A000,"Densha de go!! Hashirou Yamanote Sen",status-playable;nvdec;UE4,playable,2023-11-09 07:47:58.000 -0100C9100FAE2000,"Depixtion",status-playable,playable,2020-10-10 18:52:37.000 -01000BF00B6BC000,"Deployment",slow;status-playable;online-broken,playable,2022-10-17 16:23:59.000 -010023600C704000,"Deponia",nvdec;status-playable,playable,2021-01-26 17:17:19.000 -0100ED700469A000,"Deru - The Art of Cooperation",status-playable,playable,2021-01-07 16:59:59.000 -0100D4600D0E4000,"Descenders",gpu;status-ingame,ingame,2020-12-10 15:22:36.000 -,"Desire remaster ver.",crash;status-boots,boots,2021-01-17 02:34:37.000 -010069500DD86000,"Destiny Connect: Tick-Tock Travelers",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 12:20:36.000 -01008BB011ED6000,"Destrobots",status-playable,playable,2021-03-06 14:37:05.000 -01009E701356A000,"Destroy All Humans!",gpu;status-ingame;nvdec;UE4,ingame,2023-01-14 22:23:53.000 -010030600E65A000,"Detective Dolittle",status-playable,playable,2021-03-02 14:03:59.000 -01009C0009842000,"Detective Gallo",status-playable;nvdec,playable,2022-07-24 11:51:04.000 -,"Detective Jinguji Saburo Prism of Eyes",status-playable,playable,2020-10-02 21:54:41.000 -010007500F27C000,"Detective Pikachu™ Returns",status-playable,playable,2023-10-07 10:24:59.000 -010031B00CF66000,"Devil Engine",status-playable,playable,2021-06-04 11:54:30.000 -01002F000E8F2000,"Devil Kingdom",status-playable,playable,2023-01-31 08:58:44.000 -0100E8000D5B8000,"Devil May Cry",nvdec;status-playable,playable,2021-01-04 19:43:08.000 -01007CF00D5BA000,"Devil May Cry 2",status-playable;nvdec,playable,2023-01-24 23:03:20.000 -01007B600D5BC000,"Devil May Cry 3 Special Edition",status-playable;nvdec,playable,2024-07-08 12:33:23.000 -01003C900EFF6000,"Devil Slayer Raksasi",status-playable,playable,2022-10-26 19:42:32.000 -01009EA00A320000,"Devious Dungeon",status-playable,playable,2021-03-04 13:03:06.000 -01003F601025E000,"Dex",nvdec;status-playable,playable,2020-08-12 16:48:12.000 -010044000CBCA000,"Dexteritrip",status-playable,playable,2021-01-06 12:51:12.000 -0100AFC00E06A000,"Dezatopia",online;status-playable,playable,2021-06-15 21:06:11.000 -01001B300B9BE000,"Diablo III: Eternal Collection",status-playable;online-broken;ldn-works,playable,2023-08-21 23:48:03.000 -0100726014352000,"Diablo® II: Resurrected™",gpu;status-ingame;nvdec,ingame,2023-08-18 18:42:47.000 -0100F73011456000,"Diabolic",status-playable,playable,2021-06-11 14:45:08.000 -010027400BD24000,"DIABOLIK LOVERS CHAOS LINEAGE",gpu;status-ingame;Needs Update,ingame,2023-06-08 02:20:44.000 -0100BBF011394000,"Dicey Dungeons",gpu;audio;slow;status-ingame,ingame,2023-08-02 20:30:12.000 -0100D98005E8C000,"Die for Valhalla!",status-playable,playable,2021-01-06 16:09:14.000 -0100BB900B5B4000,"Dies irae Amantes amentes For Nintendo Switch",status-nothing;32-bit;crash,nothing,2022-02-16 07:09:05.000 -0100A5A00DBB0000,"Dig Dog",gpu;status-ingame,ingame,2021-06-02 17:17:51.000 -01004DE011076000,"Digerati Indie Darling Bundle Vol. 3",status-playable,playable,2022-10-02 13:01:57.000 -010035D0121EC000,"Digerati Presents: The Dungeon Crawl Vol. 1",slow;status-ingame,ingame,2021-04-18 14:04:55.000 -010014E00DB56000,"Digimon Story Cyber Sleuth: Complete Edition",status-playable;nvdec;opengl,playable,2022-09-13 15:02:37.000 -0100F00014254000,"Digimon World: Next Order",status-playable,playable,2023-05-09 20:41:06.000 -0100B6D00DA6E000,"Ding Dong XL",status-playable,playable,2020-07-14 16:13:19.000 -01002E4011924000,"Dininho Adventures",status-playable,playable,2020-10-03 17:25:51.000 -010027E0158A6000,"Dininho Space Adventure",status-playable,playable,2023-01-14 22:43:04.000 -0100A8A013DA4000,"Dirt Bike Insanity",status-playable,playable,2021-01-31 13:27:38.000 -01004CB01378A000,"Dirt Trackin Sprint Cars",status-playable;nvdec;online-broken,playable,2022-10-17 16:34:56.000 -0100918014B02000,"Disagaea 6: Defiance of Destiny Demo",status-playable;demo,playable,2022-10-26 20:02:04.000 -010020700E2A2000,"Disaster Report 4: Summer Memories",status-playable;nvdec;UE4,playable,2022-09-27 19:41:31.000 -0100510004D2C000,"Disc Jam",UE4;ldn-untested;nvdec;online;status-playable,playable,2021-04-08 16:40:35.000 -0100C81004780000,"Disco Dodgeball - REMIX",online;status-playable,playable,2020-09-28 23:24:49.000 -01004B100AF18000,"Disgaea 1 Complete",status-playable,playable,2023-01-30 21:45:23.000 -0100A9800E9B4000,"Disgaea 4 Complete+",gpu;slow;status-playable,playable,2020-02-18 10:54:28.000 -010068C00F324000,"Disgaea 4 Complete+ Demo",status-playable;nvdec,playable,2022-09-13 15:21:59.000 -01005700031AE000,"Disgaea 5 Complete",nvdec;status-playable,playable,2021-03-04 15:32:54.000 -0100ABC013136000,"Disgaea 6: Defiance of Destiny",deadlock;status-ingame,ingame,2023-04-15 00:50:32.000 -0100307011D80000,"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",status-playable,playable,2021-06-08 13:20:33.000 -01005EE013888000,"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",gpu;status-ingame;demo,ingame,2022-12-06 15:27:59.000 -01000B70122A2000,"Disjunction",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24.000 -0100A2F00EEFC000,"Disney Classic Games Collection",status-playable;online-broken,playable,2022-09-13 15:44:17.000 -0100DA201EBF8000,"Disney Epic Mickey: Rebrushed",status-ingame;crash,ingame,2024-09-26 22:11:51.000 -0100F0401435E000,"Disney Speedstorm",services;status-boots,boots,2023-11-27 02:15:32.000 -010012800EBAE000,"Disney TSUM TSUM FESTIVAL",crash;status-menus,menus,2020-07-14 14:05:28.000 -01009740120FE000,"DISTRAINT 2",status-playable,playable,2020-09-03 16:08:12.000 -010075B004DD2000,"DISTRAINT: Deluxe Edition",status-playable,playable,2020-06-15 23:42:24.000 -010027400CDC6000,"Divinity: Original Sin 2 - Definitive Edition",services;status-menus;crash;online-broken;regression,menus,2023-08-13 17:20:03.000 -01001770115C8000,"Dodo Peak",status-playable;nvdec;UE4,playable,2022-10-04 16:13:05.000 -010077B0100DA000,"Dogurai",status-playable,playable,2020-10-04 02:40:16.000 -010048100D51A000,"Dokapon Up! Mugen no Roulette",gpu;status-menus;Needs Update,menus,2022-12-08 19:39:10.000 -01005EE00BC78000,"Dokuro (ドクロ)",nvdec;status-playable,playable,2020-12-17 14:47:09.000 -010007200AC0E000,"Don't Die, Mr Robot!",status-playable;nvdec,playable,2022-09-02 18:34:38.000 -0100E470067A8000,"Don't Knock Twice",status-playable,playable,2024-05-08 22:37:58.000 -0100C4D00B608000,"Don't Sink",gpu;status-ingame,ingame,2021-02-26 15:41:11.000 -0100751007ADA000,"Don't Starve: Nintendo Switch Edition",status-playable;nvdec,playable,2022-02-05 20:43:34.000 -010088B010DD2000,"Dongo Adventure",status-playable,playable,2022-10-04 16:22:26.000 -0100C1F0051B6000,"Donkey Kong Country™: Tropical Freeze",status-playable,playable,2024-08-05 16:46:10.000 -0100F2C00F060000,"Doodle Derby",status-boots,boots,2020-12-04 22:51:48.000 -0100416004C00000,"DOOM",gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-09-23 15:40:07.000 -010018900DD00000,"DOOM (1993)",status-menus;nvdec;online-broken,menus,2022-09-06 13:32:19.000 -01008CB01E52E000,"DOOM + DOOM II",status-playable;opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01.000 -010029D00E740000,"DOOM 3",status-menus;crash,menus,2024-08-03 05:25:47.000 -01005D700E742000,"DOOM 64",nvdec;status-playable;vulkan,playable,2020-10-13 23:47:28.000 -0100D4F00DD02000,"DOOM II (Classic)",nvdec;online;status-playable,playable,2021-06-03 20:10:01.000 -0100B1A00D8CE000,"DOOM® Eternal",gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-08-28 15:57:17.000 -01005ED00CD70000,"Door Kickers: Action Squad",status-playable;online-broken;ldn-broken,playable,2022-09-13 16:28:53.000 -010073700E412000,"DORAEMON STORY OF SEASONS",nvdec;status-playable,playable,2020-07-13 20:28:11.000 -0100F7300BD8E000,"Double Cross",status-playable,playable,2021-01-07 15:34:22.000 -0100B1500E9F2000,"Double Dragon & Kunio-kun: Retro Brawler Bundle",status-playable,playable,2020-09-01 12:48:46.000 -01001AD00E49A000,"DOUBLE DRAGON Ⅲ: The Sacred Stones",online;status-playable,playable,2021-06-11 15:41:44.000 -01005B10132B2000,"Double Dragon Neon",gpu;audio;status-ingame;32-bit,ingame,2022-09-20 18:00:20.000 -01000F400C1A4000,"Double Kick Heroes",gpu;status-ingame,ingame,2020-10-03 14:33:59.000 -0100A5D00C7C0000,"Double Pug Switch",status-playable;nvdec,playable,2022-10-10 10:59:35.000 -0100FC000EE10000,"Double Switch - 25th Anniversary Edition",status-playable;nvdec,playable,2022-09-19 13:41:50.000 -0100B6600FE06000,"Down to Hell",gpu;status-ingame;nvdec,ingame,2022-09-19 14:01:26.000 -010093D00C726000,"Downwell",status-playable,playable,2021-04-25 20:05:24.000 -0100ED000D390000,"Dr Kawashima's Brain Training",services;status-ingame,ingame,2023-06-04 00:06:46.000 -01001B80099F6000,"Dracula's Legacy",nvdec;status-playable,playable,2020-12-10 13:24:25.000 -0100566009238000,"DragoDino",gpu;nvdec;status-ingame,ingame,2020-08-03 20:49:16.000 -0100DBC00BD5A000,"Dragon Audit",crash;status-ingame,ingame,2021-05-16 14:24:46.000 -0100A250097F0000,"DRAGON BALL FighterZ",UE4;ldn-broken;nvdec;online;status-playable,playable,2021-06-11 16:19:04.000 -010078D000F88000,"DRAGON BALL XENOVERSE 2 for Nintendo Switch",gpu;status-ingame;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01.000 -010051C0134F8000,"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",status-playable;vulkan-backend-bug,playable,2024-08-28 00:03:50.000 -010099B00A2DC000,"Dragon Blaze for Nintendo Switch",32-bit;status-playable,playable,2020-10-14 11:11:28.000 -010089700150E000,"Dragon Marked for Death: Advanced Attackers",status-playable;ldn-untested;audout,playable,2022-03-10 06:44:34.000 -0100EFC00EFB2000,"DRAGON QUEST",gpu;status-boots,boots,2021-11-09 03:31:32.000 -010008900705C000,"Dragon Quest Builders™",gpu;status-ingame;nvdec,ingame,2023-08-14 09:54:36.000 -010042000A986000,"DRAGON QUEST BUILDERS™ 2",status-playable,playable,2024-04-19 16:36:38.000 -0100CD3000BDC000,"Dragon Quest Heroes I + II (JP)",nvdec;status-playable,playable,2021-04-08 14:27:16.000 -010062200EFB4000,"DRAGON QUEST II: Luminaries of the Legendary Line",status-playable,playable,2022-09-13 16:44:11.000 -01003E601E324000,"DRAGON QUEST III HD-2D Remake",status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27.000 -010015600EFB6000,"DRAGON QUEST III: The Seeds of Salvation",gpu;status-boots,boots,2021-11-09 03:38:34.000 -0100A77018EA0000,"DRAGON QUEST MONSTERS: The Dark Prince",status-playable,playable,2023-12-29 16:10:05.000 -0100217014266000,"Dragon Quest Treasures",gpu;status-ingame;UE4,ingame,2023-05-09 11:16:52.000 -0100E2E0152E4000,"Dragon Quest X Awakening Five Races Offline",status-playable;nvdec;UE4,playable,2024-08-20 10:04:24.000 -01006C300E9F0000,"DRAGON QUEST® XI S: Echoes of an Elusive Age – Definitive Edition",status-playable;UE4,playable,2021-11-27 12:27:11.000 -010032C00AC58000,"Dragon's Dogma: Dark Arisen",status-playable,playable,2022-07-24 12:58:33.000 -010027100C544000,"Dragon's Lair Trilogy",nvdec;status-playable,playable,2021-01-13 22:12:07.000 -0100DA0006F50000,"DragonFangZ - The Rose & Dungeon of Time",status-playable,playable,2020-09-28 21:35:18.000 -0100F7800A434000,"Drawful 2",status-ingame,ingame,2022-07-24 13:50:21.000 -0100B7E0102E4000,"Drawngeon: Dungeons of Ink and Paper",gpu;status-ingame,ingame,2022-09-19 15:41:25.000 -01008B20129F2000,"Dream",status-playable,playable,2020-12-15 19:55:07.000 -01000AA0093DC000,"Dream Alone",nvdec;status-playable,playable,2021-01-27 19:41:50.000 -010034D00F330000,"DreamBall",UE4;crash;gpu;status-ingame,ingame,2020-08-05 14:45:25.000 -010058B00F3C0000,"Dreaming Canvas",UE4;gpu;status-ingame,ingame,2021-06-13 22:50:07.000 -0100D24013466000,"DREAMO",status-playable;UE4,playable,2022-10-17 18:25:28.000 -0100ED200B6FC000,"DreamWorks Dragons Dawn of New Riders",nvdec;status-playable,playable,2021-01-27 20:05:26.000 -0100236011B4C000,"DreamWorks Spirit Lucky’s Big Adventure",status-playable,playable,2022-10-27 13:30:52.000 -010058C00A916000,"Drone Fight",status-playable,playable,2022-07-24 14:31:56.000 -010052000A574000,"Drowning",status-playable,playable,2022-07-25 14:28:26.000 -0100652012F58000,"Drums",status-playable,playable,2020-12-17 17:21:51.000 -01005BC012C66000,"Duck Life Adventure",status-playable,playable,2022-10-10 11:27:03.000 -01007EF00CB88000,"Duke Nukem 3D: 20th Anniversary World Tour",32-bit;status-playable;ldn-untested,playable,2022-08-19 22:22:40.000 -010068D0141F2000,"Dull Grey",status-playable,playable,2022-10-27 13:40:38.000 -0100926013600000,"Dungeon Nightmares 1 + 2 Collection",status-playable,playable,2022-10-17 18:54:22.000 -010034300F0E2000,"Dungeon of the Endless",nvdec;status-playable,playable,2021-05-27 19:16:26.000 -0100E79009A94000,"Dungeon Stars",status-playable,playable,2021-01-18 14:28:37.000 -0100BE801360E000,"Dungeons & Bombs",status-playable,playable,2021-04-06 12:46:22.000 -0100EC30140B6000,"Dunk Lords",status-playable,playable,2024-06-26 00:07:26.000 -010011C00E636000,"Dusk Diver",status-boots;crash;UE4,boots,2021-11-06 09:01:30.000 -0100B6E00A420000,"Dust: An Elysian Tail",status-playable,playable,2022-07-25 15:28:12.000 -0100D7E012F2E000,"Dustoff Z",status-playable,playable,2020-12-04 23:22:29.000 -01008C8012920000,"Dying Light: Definitive Edition",services-horizon;status-boots,boots,2024-03-11 10:43:32.000 -01007DD00DFDE000,"Dyna Bomb",status-playable,playable,2020-06-07 13:26:55.000 -0100E9A00CB30000,"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",status-playable;nvdec,playable,2024-06-26 00:16:30.000 -010008900BC5A000,"DYSMANTLE",gpu;status-ingame,ingame,2024-07-15 16:24:12.000 -010054E01D878000,"EA SPORTS FC 25",status-ingame;crash,ingame,2024-09-25 21:07:50.000 -0100BDB01A0E6000,"EA SPORTS FC™ 24",status-boots,boots,2023-10-04 18:32:59.000 -01001C8016B4E000,"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",gpu;status-ingame;crash,ingame,2024-06-10 23:33:05.000 -01005DE00D05C000,"EA SPORTS™ FIFA 20 Nintendo Switch™ Legacy Edition",gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20.000 -010037400C7DA000,"Eagle Island Twist",status-playable,playable,2021-04-10 13:15:42.000 -0100B9E012992000,"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",status-playable;UE4,playable,2022-12-07 12:59:16.000 -0100298014030000,"Earth Defense Force: World Brothers",status-playable;UE4,playable,2022-10-27 14:13:31.000 -01009B7006C88000,"EARTH WARS",status-playable,playable,2021-06-05 11:18:33.000 -0100DFC00E472000,"Earthfall: Alien Horde",status-playable;nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37.000 -01006E50042EA000,"EARTHLOCK",status-playable,playable,2021-06-05 11:51:02.000 -0100A2E00BB0C000,"EarthNight",status-playable,playable,2022-09-19 21:02:20.000 -0100DCE00B756000,"Earthworms",status-playable,playable,2022-07-25 16:28:55.000 -0100E3500BD84000,"Earthworms Demo",status-playable,playable,2021-01-05 16:57:11.000 -0100ECF01800C000,"Easy Come Easy Golf",status-playable;online-broken;regression,playable,2024-04-04 16:15:00.000 -0100A9B009678000,"EAT BEAT DEADSPIKE-san",audio;status-playable;Needs Update,playable,2022-12-02 19:25:29.000 -0100BCA016636000,"eBaseball Powerful Pro Yakyuu 2022",gpu;services-horizon;status-nothing;crash,nothing,2024-05-26 23:07:19.000 -01001F20100B8000,"Eclipse: Edge of Light",status-playable,playable,2020-08-11 23:06:29.000 -0100E0A0110F4000,"eCrossminton",status-playable,playable,2020-07-11 18:24:27.000 -0100ABE00DB4E000,"Edna & Harvey: Harvey's New Eyes",nvdec;status-playable,playable,2021-01-26 14:36:08.000 -01004F000B716000,"Edna & Harvey: The Breakout – Anniversary Edition",status-ingame;crash;nvdec,ingame,2022-08-01 16:59:56.000 -01002550129F0000,"Effie",status-playable,playable,2022-10-27 14:36:39.000 -0100CC0010A46000,"Ego Protocol: Remastered",nvdec;status-playable,playable,2020-12-16 20:16:35.000 -,"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",status-playable,playable,2020-11-12 00:11:50.000 -01003AD013BD2000,"Eight Dragons",status-playable;nvdec,playable,2022-10-27 14:47:28.000 -010020A01209C000,"El Hijo - A Wild West Tale",nvdec;status-playable,playable,2021-04-19 17:44:08.000 -0100B5B00EF38000,"Elden: Path of the Forgotten",status-playable,playable,2020-12-15 00:33:19.000 -010068F012880000,"Eldrador® Creatures",slow;status-playable,playable,2020-12-12 12:35:35.000 -010008E010012000,"ELEA: Paradigm Shift",UE4;crash;status-nothing,nothing,2020-10-04 19:07:43.000 -0100A6700AF10000,"Element",status-playable,playable,2022-07-25 17:17:16.000 -0100128003A24000,"Elliot Quest",status-playable,playable,2022-07-25 17:46:14.000 -010041A00FEC6000,"Ember",status-playable;nvdec,playable,2022-09-19 21:16:11.000 -010071B012940000,"Embracelet",status-playable,playable,2020-12-04 23:45:00.000 -010017B0102A8000,"Emma: Lost in Memories",nvdec;status-playable,playable,2021-01-28 16:19:10.000 -010068300E08E000,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo -",gpu;status-ingame;nvdec,ingame,2022-11-20 16:18:45.000 -01007A4008486000,"Enchanting Mahjong Match",gpu;status-ingame,ingame,2020-04-17 22:01:31.000 -01004F3011F92000,"Endless Fables: Dark Moor",gpu;nvdec;status-ingame,ingame,2021-03-07 15:31:03.000 -010067B017588000,"Endless Ocean™ Luminous",services-horizon;status-ingame;crash,ingame,2024-05-30 02:05:57.000 -0100B8700BD14000,"Energy Cycle Edge",services;status-ingame,ingame,2021-11-30 05:02:31.000 -0100A8E0090B0000,"Energy Invasion",status-playable,playable,2021-01-14 21:32:26.000 -0100C6200A0AA000,"Enigmatis 2: The Mists of Ravenwood",crash;regression;status-boots,boots,2021-06-06 15:15:30.000 -01009D60076F6000,"Enter the Gungeon",status-playable,playable,2022-07-25 20:28:33.000 -0100262009626000,"Epic Loon",status-playable;nvdec,playable,2022-07-25 22:06:13.000 -01000FA0149B6000,"EQI",status-playable;nvdec;UE4,playable,2022-10-27 16:42:32.000 -0100E95010058000,"EQQO",UE4;nvdec;status-playable,playable,2021-06-13 23:10:51.000 -01000E8010A98000,"Escape First",status-playable,playable,2020-10-20 22:46:53.000 -010021201296A000,"Escape First 2",status-playable,playable,2021-03-24 11:59:41.000 -0100FEF00F0AA000,"Escape from Chernobyl",status-boots;crash,boots,2022-09-19 21:36:58.000 -010023E013244000,"Escape from Life Inc",status-playable,playable,2021-04-19 17:34:09.000 -010092901203A000,"Escape From Tethys",status-playable,playable,2020-10-14 22:38:25.000 -0100B0F011A84000,"Escape Game Fort Boyard",status-playable,playable,2020-07-12 12:45:43.000 -0100F9600E746000,"ESP Ra.De. Psi",audio;slow;status-ingame,ingame,2024-03-07 15:05:08.000 -010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;status-ingame;crash;Needs More Attention,ingame,2024-04-29 05:34:14.000 -01004F9012FD8000,"Estranged: The Departure",status-playable;nvdec;UE4,playable,2022-10-24 10:37:58.000 -0100CB900B498000,"Eternum Ex",status-playable,playable,2021-01-13 20:28:32.000 -010092501EB2C000,"Europa (Demo)",gpu;status-ingame;crash;UE4,ingame,2024-04-23 10:47:12.000 -01007BE0160D6000,"EVE ghost enemies",gpu;status-ingame,ingame,2023-01-14 03:13:30.000 -010095E01581C000,"even if TEMPEST",gpu;status-ingame,ingame,2023-06-22 23:50:25.000 -010072C010002000,"Event Horizon: Space Defense",status-playable,playable,2020-07-31 20:31:24.000 -0100DCF0093EC000,"Everspace™ - Stellar Edition",status-playable;UE4,playable,2022-08-14 01:16:24.000 -01006F900BF8E000,"Everybody 1-2-Switch!™",services;deadlock;status-nothing,nothing,2023-07-01 05:52:55.000 -010080600B53E000,"Evil Defenders",nvdec;status-playable,playable,2020-09-28 17:11:00.000 -01006A800FA22000,"Evolution Board Game",online;status-playable,playable,2021-01-20 22:37:56.000 -0100F2D00C7DE000,"Exception",status-playable;online-broken,playable,2022-09-20 12:47:10.000 -0100DD30110CC000,"Exit the Gungeon",status-playable,playable,2022-09-22 17:04:43.000 -0100A82013976000,"Exodemon",status-playable,playable,2022-10-27 20:17:52.000 -0100FA800A1F4000,"EXORDER",nvdec;status-playable,playable,2021-04-15 14:17:20.000 -01009B7010B42000,"Explosive Jake",status-boots;crash,boots,2021-11-03 07:48:32.000 -0100EFE00A3C2000,"Eyes: The Horror Game",status-playable,playable,2021-01-20 21:59:46.000 -0100E3D0103CE000,"Fable of Fairy Stones",status-playable,playable,2021-05-05 21:04:54.000 -01004200189F4000,"Factorio",deadlock;status-boots,boots,2024-06-11 19:26:16.000 -010073F0189B6000,"Fae Farm",status-playable,playable,2024-08-25 15:12:12.000 -010069100DB08000,"Faeria",status-menus;nvdec;online-broken,menus,2022-10-04 16:44:41.000 -01008A6009758000,"Fairune Collection",status-playable,playable,2021-06-06 15:29:56.000 -0100F6D00B8F2000,"Fairy Fencer F™: Advent Dark Force",status-ingame;32-bit;crash;nvdec,ingame,2023-04-16 03:53:48.000 -0100CF900FA3E000,"FAIRY TAIL",status-playable;nvdec,playable,2022-10-04 23:00:32.000 -01005A600BE60000,"Fall of Light: Darkest Edition",slow;status-ingame;nvdec,ingame,2024-07-24 04:19:26.000 -0100AA801258C000,"Fallen Legion Revenants",status-menus;crash,menus,2021-11-25 08:53:20.000 -0100D670126F6000,"Famicom Detective Club™: The Girl Who Stands Behind",status-playable;nvdec,playable,2022-10-27 20:41:40.000 -010033F0126F4000,"Famicom Detective Club™: The Missing Heir",status-playable;nvdec,playable,2022-10-27 20:56:23.000 -010060200FC44000,"Family Feud®",status-playable;online-broken,playable,2022-10-10 11:42:21.000 -0100034012606000,"Family Mysteries: Poisonous Promises",audio;status-menus;crash,menus,2021-11-26 12:35:06.000 -010017C012726000,"Fantasy Friends",status-playable,playable,2022-10-17 19:42:39.000 -0100767008502000,"FANTASY HERO ~unsigned legacy~",status-playable,playable,2022-07-26 12:28:52.000 -0100944003820000,"Fantasy Strike",online;status-playable,playable,2021-02-27 01:59:18.000 -01000E2012F6E000,"Fantasy Tavern Sextet -Vol.1 New World Days-",gpu;status-ingame;crash;Needs Update,ingame,2022-12-05 16:48:00.000 -01005C10136CA000,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;status-ingame;crash,ingame,2021-11-06 02:57:29.000 -010022700E7D6000,"FAR: Lone Sails",status-playable,playable,2022-09-06 16:33:05.000 -0100C9E00FD62000,"Farabel",status-playable,playable,2020-08-03 17:47:28.000 -,"Farm Expert 2019 for Nintendo Switch",status-playable,playable,2020-07-09 21:42:57.000 -01000E400ED98000,"Farm Mystery",status-playable;nvdec,playable,2022-09-06 16:46:47.000 -010086B00BB50000,"Farm Together",status-playable,playable,2021-01-19 20:01:19.000 -0100EB600E914000,"Farming Simulator 20",nvdec;status-playable,playable,2021-06-13 10:52:44.000 -0100D04004176000,"Farming Simulator Nintendo Switch Edition",nvdec;status-playable,playable,2021-01-19 14:46:44.000 -0100E99019B3A000,"Fashion Dreamer",status-playable,playable,2023-11-12 06:42:52.000 -01009510001CA000,"FAST RMX",slow;status-ingame;crash;ldn-partial,ingame,2024-06-22 20:48:58.000 -0100BEB015604000,"FATAL FRAME: Maiden of Black Water",status-playable,playable,2023-07-05 16:01:40.000 -0100DAE019110000,"FATAL FRAME: Mask of the Lunar Eclipse",status-playable;Incomplete,playable,2024-04-11 06:01:30.000 -010051400B17A000,"Fate/EXTELLA LINK",ldn-untested;nvdec;status-playable,playable,2021-01-27 00:45:50.000 -010053E002EA2000,"Fate/EXTELLA: The Umbral Star",gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55.000 -0100F6200B7D4000,"fault - milestone one",nvdec;status-playable,playable,2021-03-24 10:41:49.000 -01005AC0068F6000,"Fear Effect Sedna",nvdec;status-playable,playable,2021-01-19 13:10:33.000 -0100F5501CE12000,"Fearmonium",status-boots;crash,boots,2024-03-06 11:26:11.000 -0100E4300CB3E000,"Feather",status-playable,playable,2021-06-03 14:11:27.000 -010003B00D3A2000,"Felix The Reaper",nvdec;status-playable,playable,2020-10-20 23:43:03.000 -0100AA3009738000,"Feudal Alloy",status-playable,playable,2021-01-14 08:48:14.000 -01008D900B984000,"FEZ",gpu;status-ingame,ingame,2021-04-18 17:10:16.000 -01007510040E8000,"FIA European Truck Racing Championship",status-playable;nvdec,playable,2022-09-06 17:51:59.000 -0100F7B002340000,"FIFA 18",gpu;status-ingame;online-broken;ldn-untested,ingame,2022-07-26 12:43:59.000 -0100FFA0093E8000,"FIFA 19",gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07.000 -01000A001171A000,"FIFA 21 Nintendo Switch™ Legacy Edition",gpu;status-ingame;online-broken,ingame,2023-12-11 22:10:19.000 -0100216014472000,"FIFA 22 Nintendo Switch™ Legacy Edition",gpu;status-ingame,ingame,2024-03-02 14:13:48.000 -01006980127F0000,"Fight Crab",status-playable;online-broken;ldn-untested,playable,2022-10-05 10:24:04.000 -010047E010B3E000,"Fight of Animals",online;status-playable,playable,2020-10-15 15:08:28.000 -0100C7D00E730000,"Fight'N Rage",status-playable,playable,2020-06-16 23:35:19.000 -0100D02014048000,"FIGHTING EX LAYER ANOTHER DASH",status-playable;online-broken;UE4,playable,2024-04-07 10:22:33.000 -0100118009C68000,"Figment",nvdec;status-playable,playable,2021-01-27 19:36:05.000 -010095600AA36000,"Fill-a-Pix: Phil's Epic Adventure",status-playable,playable,2020-12-22 13:48:22.000 -0100C3A00BB76000,"Fimbul",status-playable;nvdec,playable,2022-07-26 13:31:47.000 -0100C8200E942000,"Fin and the Ancient Mystery",nvdec;status-playable,playable,2020-12-17 16:40:39.000 -01000EA014150000,"FINAL FANTASY",status-nothing;crash,nothing,2024-09-05 20:55:30.000 -01006B7014156000,"FINAL FANTASY II",status-nothing;crash,nothing,2024-04-13 19:18:04.000 -01006F000B056000,"FINAL FANTASY IX",audout;nvdec;status-playable,playable,2021-06-05 11:35:00.000 -0100AA201415C000,"FINAL FANTASY V",status-playable,playable,2023-04-26 01:11:55.000 -0100A5B00BDC6000,"FINAL FANTASY VII",status-playable,playable,2022-12-09 17:03:30.000 -01008B900DC0A000,"FINAL FANTASY VIII Remastered",status-playable;nvdec,playable,2023-02-15 10:57:48.000 -0100BC300CB48000,"FINAL FANTASY X/X-2 HD Remaster",gpu;status-ingame,ingame,2022-08-16 20:29:26.000 -0100EB100AB42000,"FINAL FANTASY XII THE ZODIAC AGE",status-playable;opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54.000 -010068F00AA78000,"FINAL FANTASY XV POCKET EDITION HD",status-playable,playable,2021-01-05 17:52:08.000 -0100CE4010AAC000,"FINAL FANTASY® CRYSTAL CHRONICLES™ Remastered Edition",status-playable,playable,2023-04-02 23:39:12.000 -01001BA00AE4E000,"Final Light, The Prison",status-playable,playable,2020-07-31 21:48:44.000 -0100FF100FB68000,"Finding Teddy 2 : Definitive Edition",gpu;status-ingame,ingame,2024-04-19 16:51:33.000 -0100F4E013AAE000,"Fire & Water",status-playable,playable,2020-12-15 15:43:20.000 -0100F15003E64000,"Fire Emblem Warriors",status-playable;nvdec,playable,2023-05-10 01:53:10.000 -010071F0143EA000,"Fire Emblem Warriors: Three Hopes",gpu;status-ingame;nvdec,ingame,2024-05-01 07:07:42.000 -0100A6301214E000,"Fire Emblem™ Engage",status-playable;amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26.000 -0100A12011CC8000,"Fire Emblem™: Shadow Dragon & the Blade of Light",status-playable,playable,2022-10-17 19:49:14.000 -010055D009F78000,"Fire Emblem™: Three Houses",status-playable;online-broken,playable,2024-09-14 23:53:50.000 -010025C014798000,"Fire: Ungh’s Quest",status-playable;nvdec,playable,2022-10-27 21:41:26.000 -0100434003C58000,"Firefighters – The Simulation",status-playable,playable,2021-02-19 13:32:05.000 -0100BB1009E50000,"Firefighters: Airport Fire Department",status-playable,playable,2021-02-15 19:17:00.000 -0100AC300919A000,"Firewatch",status-playable,playable,2021-06-03 10:56:38.000 -0100BA9012B36000,"Firework",status-playable,playable,2020-12-04 20:20:09.000 -0100DEB00ACE2000,"Fishing Star World Tour",status-playable,playable,2022-09-13 19:08:51.000 -010069800D292000,"Fishing Universe Simulator",status-playable,playable,2021-04-15 14:00:43.000 -0100807008868000,"Fit Boxing",status-playable,playable,2022-07-26 19:24:55.000 -0100E7300AAD4000,"Fitness Boxing",status-playable,playable,2021-04-14 20:33:33.000 -0100073011382000,"Fitness Boxing 2: Rhythm & Exercise",crash;status-ingame,ingame,2021-04-14 20:40:48.000 -0100C7E0134BE000,"Five Dates",nvdec;status-playable,playable,2020-12-11 15:17:11.000 -0100B6200D8D2000,"Five Nights at Freddy's",status-playable,playable,2022-09-13 19:26:36.000 -01004EB00E43A000,"Five Nights at Freddy's 2",status-playable,playable,2023-02-08 15:48:24.000 -010056100E43C000,"Five Nights at Freddy's 3",status-playable,playable,2022-09-13 20:58:07.000 -010083800E43E000,"Five Nights at Freddy's 4",status-playable,playable,2023-08-19 07:28:03.000 -0100F7901118C000,"Five Nights at Freddy's: Help Wanted",status-playable;UE4,playable,2022-09-29 12:40:09.000 -01009060193C4000,"Five Nights at Freddy's: Security Breach",gpu;status-ingame;crash;mac-bug,ingame,2023-04-23 22:33:28.000 -01003B200E440000,"Five Nights at Freddy's: Sister Location",status-playable,playable,2023-10-06 09:00:58.000 -010038200E088000,"Flan",status-ingame;crash;regression,ingame,2021-11-17 07:39:28.000 -01000A0004C50000,"FLASHBACK™",nvdec;status-playable,playable,2020-05-14 13:57:29.000 -0100C53004C52000,"Flat Heroes",gpu;status-ingame,ingame,2022-07-26 19:37:37.000 -0100B54012798000,"Flatland: Prologue",status-playable,playable,2020-12-11 20:41:12.000 -0100307004B4C000,"Flinthook",online;status-playable,playable,2021-03-25 20:42:29.000 -010095A004040000,"Flip Wars",services;status-ingame;ldn-untested,ingame,2022-05-02 15:39:18.000 -01009FB002B2E000,"Flipping Death",status-playable,playable,2021-02-17 16:12:30.000 -0100D1700ACFC000,"Flood of Light",status-playable,playable,2020-05-15 14:15:25.000 -0100DF9005E7A000,"Floor Kids",status-playable;nvdec,playable,2024-08-18 19:38:49.000 -010040700E8FC000,"Florence",status-playable,playable,2020-09-05 01:22:30.000 -0100F5D00CD58000,"Flowlines VS",status-playable,playable,2020-12-17 17:01:53.000 -010039C00E2CE000,"Flux8",nvdec;status-playable,playable,2020-06-19 20:55:11.000 -0100EDA00BBBE000,"Fly O'Clock",status-playable,playable,2020-05-17 13:39:52.000 -0100FC300F4A4000,"Fly Punch Boom!",online;status-playable,playable,2020-06-21 12:06:11.000 -0100419013A8A000,"Flying Hero X",status-menus;crash,menus,2021-11-17 07:46:58.000 -010056000BA1C000,"Fobia",status-playable,playable,2020-12-14 21:05:23.000 -0100F3900D0F0000,"Food Truck Tycoon",status-playable,playable,2022-10-17 20:15:55.000 -01007CF013152000,"Football Manager 2021 Touch",gpu;status-ingame,ingame,2022-10-17 20:08:23.000 -0100EDC01990E000,"Football Manager 2023 Touch",gpu;status-ingame,ingame,2023-08-01 03:40:53.000 -010097F0099B4000,"Football Manager Touch 2018",status-playable,playable,2022-07-26 20:17:56.000 -010069400B6BE000,"For The King",nvdec;status-playable,playable,2021-02-15 18:51:44.000 -01001D200BCC4000,"Forager",status-menus;crash,menus,2021-11-24 07:10:17.000 -0100AE001256E000,"FORECLOSED",status-ingame;crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12.000 -010044B00E70A000,"Foregone",deadlock;status-ingame,ingame,2020-12-17 15:26:53.000 -010059E00B93C000,"Forgotton Anne",nvdec;status-playable,playable,2021-02-15 18:28:07.000 -01008EA00405C000,"forma.8",nvdec;status-playable,playable,2020-11-15 01:04:32.000 -010025400AECE000,"Fortnite",services-horizon;status-nothing,nothing,2024-04-06 18:23:25.000 -0100AAE01E39C000,"Fortress Challenge - Fort Boyard",nvdec;slow;status-playable,playable,2020-05-15 13:22:53.000 -0100CA500756C000,"Fossil Hunters",status-playable;nvdec,playable,2022-07-27 11:37:20.000 -01008A100A028000,"FOX n FORESTS",status-playable,playable,2021-02-16 14:27:49.000 -0100D2501001A000,"FoxyLand",status-playable,playable,2020-07-29 20:55:20.000 -01000AC010024000,"FoxyLand 2",status-playable,playable,2020-08-06 14:41:30.000 -01004200099F2000,"Fractured Minds",status-playable,playable,2022-09-13 21:21:40.000 -0100F1A00A5DC000,"FRAMED Collection",status-playable;nvdec,playable,2022-07-27 11:48:15.000 -0100AC40108D8000,"Fred3ric",status-playable,playable,2021-04-15 13:30:31.000 -01000490067AE000,"Frederic 2: Evil Strikes Back",status-playable,playable,2020-07-23 16:44:37.000 -01005B1006988000,"Frederic: Resurrection of Music",nvdec;status-playable,playable,2020-07-23 16:59:53.000 -010082B00EE50000,"Freedom Finger",nvdec;status-playable,playable,2021-06-09 19:31:30.000 -0100EB800B614000,"Freedom Planet",status-playable,playable,2020-05-14 12:23:06.000 -010003F00BD48000,"Friday the 13th: Killer Puzzle",status-playable,playable,2021-01-28 01:33:38.000 -010092A00C4B6000,"Friday the 13th: The Game Ultimate Slasher Edition",status-playable;nvdec;online-broken;UE4,playable,2022-09-06 17:33:27.000 -0100F200178F4000,"FRONT MISSION 1st: Remake",status-playable,playable,2023-06-09 07:44:24.000 -0100861012474000,"Frontline Zed",status-playable,playable,2020-10-03 12:55:59.000 -0100B5300B49A000,"Frost",status-playable,playable,2022-07-27 12:00:36.000 -010038A007AA4000,"FruitFall Crush",status-playable,playable,2020-10-20 11:33:33.000 -01008D800AE4A000,"FullBlast",status-playable,playable,2020-05-19 10:34:13.000 -010002F00CC20000,"FUN! FUN! Animal Park",status-playable,playable,2021-04-14 17:08:52.000 -0100A8F00B3D0000,"FunBox Party",status-playable,playable,2020-05-15 12:07:02.000 -0100E7B00BF24000,"Funghi Explosion",status-playable,playable,2020-11-23 14:17:41.000 -01008E10130F8000,"Funimation",gpu;status-boots,boots,2021-04-08 13:08:17.000 -0100EA501033C000,"Funny Bunny Adventures",status-playable,playable,2020-08-05 13:46:56.000 -01000EC00AF98000,"Furi",status-playable,playable,2022-07-27 12:21:20.000 -0100A6B00D4EC000,"Furwind",status-playable,playable,2021-02-19 19:44:08.000 -0100ECE00C0C4000,"Fury Unleashed",crash;services;status-ingame,ingame,2020-10-18 11:52:40.000 -010070000ED9E000,"Fury Unleashed Demo",status-playable,playable,2020-10-08 20:09:21.000 -0100E1F013674000,"FUSER™",status-playable;nvdec;UE4,playable,2022-10-17 20:58:32.000 -,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec;status-ingame,ingame,2021-01-20 15:30:02.000 -01003C300B274000,"Futari de! Nyanko Daisensou",status-playable,playable,2024-01-05 22:26:52.000 -010055801134E000,"FUZE Player",status-ingame;online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53.000 -0100EAD007E98000,"FUZE4 Nintendo Switch",status-playable;vulkan-backend-bug,playable,2022-09-06 19:25:01.000 -010067600F1A0000,"FuzzBall",crash;status-nothing,nothing,2021-03-29 20:13:21.000 -,"G-MODE Archives 06 The strongest ever Julia Miyamoto",status-playable,playable,2020-10-15 13:06:26.000 -0100EB10108EA000,"G.I. Joe: Operation Blackout",UE4;crash;status-boots,boots,2020-11-21 12:37:44.000 -010048600B14E000,"Gal Metal",status-playable,playable,2022-07-27 20:57:48.000 -010024700901A000,"Gal*Gun 2",status-playable;nvdec;UE4,playable,2022-07-27 12:45:37.000 -0100047013378000,"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",status-playable;nvdec,playable,2022-10-17 23:50:46.000 -0100C9800A454000,"GALAK-Z: Variant S",status-boots;online-broken,boots,2022-07-29 11:59:12.000 -0100C62011050000,"Game Boy™ – Nintendo Switch Online",status-playable,playable,2023-03-21 12:43:48.000 -010012F017576000,"Game Boy™ Advance – Nintendo Switch Online",status-playable,playable,2023-02-16 20:38:15.000 -0100FA5010788000,"Game Builder Garage™",status-ingame,ingame,2024-04-20 21:46:22.000 -0100AF700BCD2000,"Game Dev Story",status-playable,playable,2020-05-20 00:00:38.000 -01006BD00F8C0000,"Game Doraemon Nobita no Shin Kyoryu",gpu;status-ingame,ingame,2023-02-27 02:03:28.000 -01000FA00A4E4000,"Garage",status-playable,playable,2020-05-19 20:59:53.000 -010061E00E8BE000,"Garfield Kart Furious Racing",status-playable;ldn-works;loader-allocator,playable,2022-09-13 21:40:25.000 -0100EA001069E000,"Gates Of Hell",slow;status-playable,playable,2020-10-22 12:44:26.000 -010025500C098000,"Gato Roboto",status-playable,playable,2023-01-20 15:04:11.000 -010065E003FD8000,"Gear.Club Unlimited",status-playable,playable,2021-06-08 13:03:19.000 -010072900AFF0000,"Gear.Club Unlimited 2",status-playable;nvdec;online-broken,playable,2022-07-29 12:52:16.000 -01000F000D9F0000,"Geki Yaba Runner Anniversary Edition",status-playable,playable,2021-02-19 18:59:07.000 -010052A00942A000,"Gekido Kintaro's Revenge",status-playable,playable,2020-10-27 12:44:05.000 -01009D000AF3A000,"Gelly Break Deluxe",UE4;status-playable,playable,2021-03-03 16:04:02.000 -01001A4008192000,"Gem Smashers",nvdec;status-playable,playable,2021-06-08 13:40:51.000 -010014901144C000,"Genetic Disaster",status-playable,playable,2020-06-19 21:41:12.000 -0100D7E0110B2000,"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",32-bit;status-playable,playable,2022-06-06 00:42:09.000 -010000300C79C000,"GensokyoDefenders",status-playable;online-broken;UE4,playable,2022-07-29 13:48:12.000 -0100AC600EB4C000,"Gensou Rougoku no Kaleidscope",status-menus;crash,menus,2021-11-24 08:45:07.000 -01007FC012FD4000,"Georifters",UE4;crash;nvdec;status-menus,menus,2020-12-04 22:30:50.000 -010058F010296000,"GERRRMS",status-playable,playable,2020-08-15 11:32:52.000 -01006F30129F8000,"Get 10 quest",status-playable,playable,2020-08-03 12:48:39.000 -0100B5B00E77C000,"Get Over Here",status-playable,playable,2022-10-28 11:53:52.000 -0100EEB005ACC000,"Ghost 1.0",status-playable,playable,2021-02-19 20:48:47.000 -010063200C588000,"Ghost Blade HD",status-playable;online-broken,playable,2022-09-13 21:51:21.000 -010057500E744000,"Ghost Grab 3000",status-playable,playable,2020-07-11 18:09:52.000 -010094C00E180000,"Ghost Parade",status-playable,playable,2020-07-14 00:43:54.000 -01004B301108C000,"Ghost Sweeper",status-playable,playable,2022-10-10 12:45:36.000 -010029B018432000,"Ghost Trick: Phantom Detective",status-playable,playable,2023-08-23 14:50:12.000 -010008A00F632000,"Ghostbusters: The Video Game Remastered",status-playable;nvdec,playable,2021-09-17 07:26:57.000 -010090F012916000,"Ghostrunner",UE4;crash;gpu;nvdec;status-ingame,ingame,2020-12-17 13:01:59.000 -0100D6200F2BA000,"Ghosts 'n Goblins Resurrection",status-playable,playable,2023-05-09 12:40:41.000 -01003830092B8000,"Giana Sisters: Twisted Dreams - Owltimate Edition",status-playable,playable,2022-07-29 14:06:12.000 -0100D95012C0A000,"Gibbous - A Cthulhu Adventure",status-playable;nvdec,playable,2022-10-10 12:57:17.000 -010045F00BFC2000,"GIGA WRECKER ALT.",status-playable,playable,2022-07-29 14:13:54.000 -01002C400E526000,"Gigantosaurus The Game",status-playable;UE4,playable,2022-09-27 21:20:00.000 -0100C50007070000,"Ginger: Beyond the Crystal",status-playable,playable,2021-02-17 16:27:00.000 -01006BA013990000,"Girabox",status-playable,playable,2020-12-12 13:55:05.000 -01007E90116CE000,"Giraffe and Annika",UE4;crash;status-ingame,ingame,2020-12-04 22:41:57.000 -01006DD00CC96000,"Girls und Panzer Dream Tank Match DX",status-playable;ldn-untested,playable,2022-09-12 16:07:11.000 -01005CB009E20000,"Glaive: Brick Breaker",status-playable,playable,2020-05-20 12:15:59.000 -0100B6F01227C000,"Glitch's Trip",status-playable,playable,2020-12-17 16:00:57.000 -0100EB501130E000,"Glyph",status-playable,playable,2021-02-08 19:56:51.000 -0100EB8011B0C000,"Gnome More War",status-playable,playable,2020-12-17 16:33:07.000 -010008D00CCEC000,"Gnomes Garden 2",status-playable,playable,2021-02-19 20:08:13.000 -010036C00D0D6000,"Gnomes Garden: Lost King",deadlock;status-menus,menus,2021-11-18 11:14:03.000 -01008EF013A7C000,"Gnosia",status-playable,playable,2021-04-05 17:20:30.000 -01000C800FADC000,"Go All Out!",status-playable;online-broken,playable,2022-09-21 19:16:34.000 -010055A0161F4000,"Go Rally",gpu;status-ingame,ingame,2023-08-16 21:18:23.000 -0100C1800A9B6000,"Go Vacation™",status-playable;nvdec;ldn-works,playable,2024-05-13 19:28:53.000 -0100E6300F854000,"Go! Fish Go!",status-playable,playable,2020-07-27 13:52:28.000 -010032600C8CE000,"Goat Simulator: The GOATY",32-bit;status-playable,playable,2022-07-29 21:02:33.000 -01001C700873E000,"GOD EATER 3",gpu;status-ingame;nvdec,ingame,2022-07-29 21:33:21.000 -0100F3D00B032000,"GOD WARS The Complete Legend",nvdec;status-playable,playable,2020-05-19 14:37:50.000 -0100CFA0111C8000,"Gods Will Fall",status-playable,playable,2021-02-08 16:49:59.000 -0100D82009024000,"Goetia",status-playable,playable,2020-05-19 12:55:39.000 -01004D501113C000,"Going Under",deadlock;nvdec;status-ingame,ingame,2020-12-11 22:29:46.000 -0100126006EF0000,"GOKEN",status-playable,playable,2020-08-05 20:22:38.000 -010013800F0A4000,"Golazo!",status-playable,playable,2022-09-13 21:58:37.000 -01003C000D84C000,"Golem Gates",status-ingame;crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11.000 -0100779004172000,"Golf Story",status-playable,playable,2020-05-14 14:56:17.000 -01006FB00EBE0000,"Golf With Your Friends",status-playable;online-broken,playable,2022-09-29 12:55:11.000 -0100EEC00AA6E000,"Gone Home",status-playable,playable,2022-08-01 11:14:20.000 -01007C2002B3C000,"GoNNER",status-playable,playable,2020-05-19 12:05:02.000 -0100B0500FE4E000,"Good Job!™",status-playable,playable,2021-03-02 13:15:55.000 -01003AD0123A2000,"Good Night, Knight",status-nothing;crash,nothing,2023-07-30 23:38:13.000 -0100F610122F6000,"Good Pizza, Great Pizza",status-playable,playable,2020-12-04 22:59:18.000 -010014C0100C6000,"Goosebumps Dead of Night",gpu;nvdec;status-ingame,ingame,2020-12-10 20:02:16.000 -0100B8000B190000,"Goosebumps The Game",status-playable,playable,2020-05-19 11:56:52.000 -0100F2A005C98000,"Gorogoa",status-playable,playable,2022-08-01 11:55:08.000 -01000C7003FE8000,"GORSD",status-playable,playable,2020-12-04 22:15:21.000 -0100E8D007E16000,"Gotcha Racing 2nd",status-playable,playable,2020-07-23 17:14:04.000 -01001010121DE000,"Gothic Murder: Adventure That Changes Destiny",deadlock;status-ingame;crash,ingame,2022-09-30 23:16:53.000 -01003FF009E60000,"Grab the Bottle",status-playable,playable,2020-07-14 17:06:41.000 -01004D10020F2000,"Graceful Explosion Machine",status-playable,playable,2020-05-19 20:36:55.000 -010038D00EC88000,"Grand Brix Shooter",slow;status-playable,playable,2020-06-24 13:23:54.000 -010038100D436000,"Grand Guilds",UE4;nvdec;status-playable,playable,2021-04-26 12:49:05.000 -0100BE600D07A000,"Grand Prix Story",status-playable,playable,2022-08-01 12:42:23.000 -05B1D2ABD3D30000,"Grand Theft Auto 3",services;status-nothing;crash;homebrew,nothing,2023-05-01 22:01:58.000 -0100E0600BBC8000,"GRANDIA HD Collection",status-boots;crash,boots,2024-08-19 04:29:48.000 -010028200E132000,"Grass Cutter - Mutated Lawns",slow;status-ingame,ingame,2020-05-19 18:27:42.000 -010074E0099FA000,"Grave Danger",status-playable,playable,2020-05-18 17:41:28.000 -010054A013E0C000,"GraviFire",status-playable,playable,2021-04-05 17:13:32.000 -01002C2011828000,"Gravity Rider Zero",gpu;status-ingame;vulkan-backend-bug,ingame,2022-09-29 13:56:13.000 -0100BD800DFA6000,"Greedroid",status-playable,playable,2020-12-14 11:14:32.000 -010068D00AE68000,"GREEN",status-playable,playable,2022-08-01 12:54:15.000 -0100CBB0070EE000,"Green Game: TimeSwapper",nvdec;status-playable,playable,2021-02-19 18:51:55.000 -0100DFE00F002000,"GREEN The Life Algorithm",status-playable,playable,2022-09-27 21:37:13.000 -0100DA7013792000,"Grey Skies: A War of the Worlds Story",status-playable;UE4,playable,2022-10-24 11:13:59.000 -010031200981C000,"Grid Mania",status-playable,playable,2020-05-19 14:11:05.000 -0100197008B52000,"GRIDD: Retroenhanced",status-playable,playable,2020-05-20 11:32:40.000 -0100DC800A602000,"GRID™ Autosport",status-playable;nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45.000 -0100B7900B024000,"Grim Fandango Remastered",status-playable;nvdec,playable,2022-08-01 13:55:58.000 -010078E012D80000,"Grim Legends 2: Song of the Dark Swan",status-playable;nvdec,playable,2022-10-18 12:58:45.000 -010009F011F90000,"Grim Legends: The Forsaken Bride",status-playable;nvdec,playable,2022-10-18 13:14:06.000 -01001E200F2F8000,"Grimshade",status-playable,playable,2022-10-02 12:44:20.000 -0100538012496000,"Grindstone",status-playable,playable,2023-02-08 15:54:06.000 -0100459009A2A000,"GRIP",status-playable;nvdec;online-broken;UE4,playable,2022-08-01 15:00:22.000 -0100E1700C31C000,"GRIS",nvdec;status-playable,playable,2021-06-03 13:33:44.000 -01009D7011B02000,"GRISAIA PHANTOM TRIGGER 01&02",status-playable;nvdec,playable,2022-12-04 21:16:06.000 -01005250123B8000,"GRISAIA PHANTOM TRIGGER 03",audout;status-playable,playable,2021-01-31 12:30:47.000 -0100D970123BA000,"GRISAIA PHANTOM TRIGGER 04",audout;status-playable,playable,2021-01-31 12:40:37.000 -01002330123BC000,"GRISAIA PHANTOM TRIGGER 05",audout;nvdec;status-playable,playable,2021-01-31 12:49:59.000 -0100CAF013AE6000,"GRISAIA PHANTOM TRIGGER 5.5",audout;nvdec;status-playable,playable,2021-01-31 12:59:44.000 -010091300FFA0000,"Grizzland",gpu;status-ingame,ingame,2024-07-11 16:28:34.000 -0100EB500D92E000,"GROOVE COASTER WAI WAI PARTY!!!!",status-playable;nvdec;ldn-broken,playable,2021-11-06 14:54:27.000 -01007E100456C000,"Guacamelee! 2",status-playable,playable,2020-05-15 14:56:59.000 -0100BAE00B470000,"Guacamelee! Super Turbo Championship Edition",status-playable,playable,2020-05-13 23:44:18.000 -010089900C9FA000,"Guess the Character",status-playable,playable,2020-05-20 13:14:19.000 -01005DC00D80C000,"Guess the word",status-playable,playable,2020-07-26 21:34:25.000 -01006F80082E4000,"GUILTY GEAR XX ACCENT CORE PLUS R",nvdec;status-playable,playable,2021-01-13 09:28:33.000 -01003C6008940000,"GUNBIRD for Nintendo Switch",32-bit;status-playable,playable,2021-06-04 19:16:01.000 -0100BCB00AE98000,"GUNBIRD2 for Nintendo Switch",status-playable,playable,2020-10-10 14:41:16.000 -,"Gunka o haita neko",gpu;nvdec;status-ingame,ingame,2020-08-25 12:37:56.000 -010061000D318000,"Gunman Clive HD Collection",status-playable,playable,2020-10-09 12:17:35.000 -01006D4003BCE000,"Guns, Gore and Cannoli 2",online;status-playable,playable,2021-01-06 18:43:59.000 -01008C800E654000,"Gunvolt Chronicles Luminous Avenger iX - Retail Version",status-playable,playable,2020-06-16 22:47:07.000 -0100763015C2E000,"Gunvolt Chronicles: Luminous Avenger iX 2",status-nothing;crash;Needs Update,nothing,2022-04-29 15:34:34.000 -01002C8018554000,"Gurimugurimoa OnceMore Demo",status-playable,playable,2022-07-29 22:07:31.000 -0100AC601DCA8000,"GYLT",status-ingame;crash,ingame,2024-03-18 20:16:51.000 -0100822012D76000,"HAAK",gpu;status-ingame,ingame,2023-02-19 14:31:05.000 -01007E100EFA8000,"Habroxia",status-playable,playable,2020-06-16 23:04:42.000 -0100535012974000,"Hades",status-playable;vulkan,playable,2022-10-05 10:45:21.000 -0100618010D76000,"Hakoniwa Explorer Plus",slow;status-ingame,ingame,2021-02-19 16:56:19.000 -0100E0D00C336000,"Halloween Pinball",status-playable,playable,2021-01-12 16:00:46.000 -01006FF014152000,"Hamidashi Creative",gpu;status-ingame,ingame,2021-12-19 15:30:51.000 -01003B9007E86000,"Hammerwatch",status-playable;online-broken;ldn-broken,playable,2022-08-01 16:28:46.000 -01003620068EA000,"Hand of Fate 2",status-playable,playable,2022-08-01 15:44:16.000 -0100973011358000,"Hang The Kings",status-playable,playable,2020-07-28 22:56:59.000 -010066C018E50000,"Happy Animals Mini Golf",gpu;status-ingame,ingame,2022-12-04 19:24:28.000 -0100ECE00D13E000,"Hard West",status-nothing;regression,nothing,2022-02-09 07:45:56.000 -0100D55011D60000,"Hardcore Maze Cube",status-playable,playable,2020-12-04 20:01:24.000 -01002F0011DD4000,"HARDCORE MECHA",slow;status-playable,playable,2020-11-01 15:06:33.000 -01000C90117FA000,"HardCube",status-playable,playable,2021-05-05 18:33:03.000 -0100BB600C096000,"Hardway Party",status-playable,playable,2020-07-26 12:35:07.000 -0100D0500AD30000,"Harvest Life",status-playable,playable,2022-08-01 16:51:45.000 -010016B010FDE000,"Harvest Moon®: One World",status-playable,playable,2023-05-26 09:17:19.000 -0100A280187BC000,"Harvestella",status-playable;UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11.000 -0100E29001298000,"Has-Been Heroes",status-playable,playable,2021-01-13 13:31:48.000 -01001CC00FA1A000,"Hatsune Miku: Project DIVA Mega Mix",audio;status-playable;online-broken,playable,2024-01-07 23:12:57.000 -01009E6014F18000,"Haunted Dawn: The Zombie Apocalypse",status-playable,playable,2022-10-28 12:31:51.000 -010023F008204000,"Haunted Dungeons:Hyakki Castle",status-playable,playable,2020-08-12 14:21:48.000 -0100E2600DBAA000,"Haven",status-playable,playable,2021-03-24 11:52:41.000 -0100EA900FB2C000,"Hayfever",status-playable;loader-allocator,playable,2022-09-22 17:35:41.000 -0100EFE00E1DC000,"Headliner: NoviNews",online;status-playable,playable,2021-03-01 11:36:00.000 -0100A8200C372000,"Headsnatchers",UE4;crash;status-menus,menus,2020-07-14 13:29:14.000 -010067400EA5C000,"Headspun",status-playable,playable,2020-07-31 19:46:47.000 -0100D12008EE4000,"Heart&Slash",status-playable,playable,2021-01-13 20:56:32.000 -010059100D928000,"Heaven Dust",status-playable,playable,2020-05-17 14:02:41.000 -0100FD901000C000,"Heaven's Vault",crash;status-ingame,ingame,2021-02-08 18:22:01.000 -0100B9C012B66000,"Helheim Hassle",status-playable,playable,2020-10-14 11:38:36.000 -0100E4300C278000,"Hell is Other Demons",status-playable,playable,2021-01-13 13:23:02.000 -01000938017E5C00,"Hell Pie0",status-playable;nvdec;UE4,playable,2022-11-03 16:48:46.000 -0100A4600E27A000,"Hell Warders",online;status-playable,playable,2021-02-27 02:31:03.000 -010044500CF8E000,"Hellblade: Senua's Sacrifice",gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50.000 -010087D0084A8000,"Hello Kitty Kruisers With Sanrio Friends",nvdec;status-playable,playable,2021-06-04 19:08:46.000 -0100FAA00B168000,"Hello Neighbor",status-playable;UE4,playable,2022-08-01 21:32:23.000 -010092B00C4F0000,"Hello Neighbor Hide and Seek",UE4;gpu;slow;status-ingame,ingame,2020-10-24 10:59:57.000 -010024600C794000,"Hellpoint",status-menus,menus,2021-11-26 13:24:20.000 -0100BEA00E63A000,"Hero Express",nvdec;status-playable,playable,2020-08-06 13:23:43.000 -010077D01094C000,"Hero-U: Rogue to Redemption",nvdec;status-playable,playable,2021-03-24 11:40:01.000 -0100D2B00BC54000,"Heroes of Hammerwatch - Ultimate Edition",status-playable,playable,2022-08-01 18:30:21.000 -01001B70080F0000,"HEROINE ANTHEM ZERO episode 1",status-playable;vulkan-backend-bug,playable,2022-08-01 22:02:36.000 -010057300B0DC000,"Heroki",gpu;status-ingame,ingame,2023-07-30 19:30:01.000 -0100C2700E338000,"Heroland",status-playable,playable,2020-08-05 15:35:39.000 -01007AC00E012000,"HexaGravity",status-playable,playable,2021-05-28 13:47:48.000 -01004E800F03C000,"Hidden",slow;status-ingame,ingame,2022-10-05 10:56:53.000 -0100F6A00A684000,"Higurashi no Naku Koro ni Hō",audio;status-ingame,ingame,2021-09-18 14:40:28.000 -0100F8D0129F4000,"Himehibi 1 gakki - Princess Days",status-nothing;crash,nothing,2021-11-03 08:34:19.000 -0100F3D008436000,"Hiragana Pixel Party",status-playable,playable,2021-01-14 08:36:50.000 -01004990132AC000,"HITMAN 3 - Cloud Version",Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:35:07.000 -010083A018262000,"Hitman: Blood Money — Reprisal",deadlock;status-ingame,ingame,2024-09-28 16:28:50.000 -01004B100A5CC000,"Hob: The Definitive Edition",status-playable,playable,2021-01-13 09:39:19.000 -0100F7300ED2C000,"Hoggy2",status-playable,playable,2022-10-10 13:53:35.000 -0100F7E00C70E000,"Hogwarts Legacy",status-ingame;slow,ingame,2024-09-03 19:53:58.000 -0100633007D48000,"Hollow Knight",status-playable;nvdec,playable,2023-01-16 15:44:56.000 -0100F2100061E800,"Hollow0",UE4;gpu;status-ingame,ingame,2021-03-03 23:42:56.000 -0100342009E16000,"Holy Potatoes! What The Hell?!",status-playable,playable,2020-07-03 10:48:56.000 -010071B00C904000,"HoPiKo",status-playable,playable,2021-01-13 20:12:38.000 -010087800EE5A000,"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",status-boots;crash,boots,2023-02-19 00:51:21.000 -010086D011EB8000,"Horace",status-playable,playable,2022-10-10 14:03:50.000 -0100001019F6E000,"Horizon Chase 2",deadlock;slow;status-ingame;crash;UE4,ingame,2024-08-19 04:24:06.000 -01009EA00B714000,"Horizon Chase Turbo",status-playable,playable,2021-02-19 19:40:56.000 -0100E4200FA82000,"Horror Pinball Bundle",status-menus;crash,menus,2022-09-13 22:15:34.000 -0100017007980000,"Hotel Transylvania 3 Monsters Overboard",nvdec;status-playable,playable,2021-01-27 18:55:31.000 -0100D0E00E51E000,"Hotline Miami Collection",status-playable;nvdec,playable,2022-09-09 16:41:19.000 -0100BDE008218000,"Hotshot Racing",gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17.000 -0100CAE00EB02000,"House Flipper",status-playable,playable,2021-06-16 18:28:32.000 -0100F6800910A000,"Hover",status-playable;online-broken,playable,2022-09-20 12:54:46.000 -0100A66003384000,"Hulu",status-boots;online-broken,boots,2022-12-09 10:05:00.000 -0100701001D92000,"Human Resource Machine",32-bit;status-playable,playable,2020-12-17 21:47:09.000 -01000CA004DCA000,"Human: Fall Flat",status-playable,playable,2021-01-13 18:36:05.000 -0100E1A00AF40000,"Hungry Shark® World",status-playable,playable,2021-01-13 18:26:08.000 -0100EBA004726000,"Huntdown",status-playable,playable,2021-04-05 16:59:54.000 -010068000CAC0000,"Hunter's Legacy: Purrfect Edition",status-playable,playable,2022-08-02 10:33:31.000 -0100C460040EA000,"Hunting Simulator",status-playable;UE4,playable,2022-08-02 10:54:08.000 -010061F010C3A000,"Hunting Simulator 2",status-playable;UE4,playable,2022-10-10 14:25:51.000 -0100B3300B4AA000,"Hyper Jam",UE4;crash;status-boots,boots,2020-12-15 22:52:11.000 -01003B200B372000,"Hyper Light Drifter - Special Edition",status-playable;vulkan-backend-bug,playable,2023-01-13 15:44:48.000 -01006C500A29C000,"HyperBrawl Tournament",crash;services;status-boots,boots,2020-12-04 23:03:27.000 -0100A8B00F0B4000,"HYPERCHARGE Unboxed",status-playable;nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39.000 -010061400ED90000,"HyperParasite",status-playable;nvdec;UE4,playable,2022-09-27 22:05:44.000 -0100959010466000,"Hypnospace Outlaw",status-ingame;nvdec,ingame,2023-08-02 22:46:49.000 -01002B00111A2000,"Hyrule Warriors: Age of Calamity",gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00.000 -0100A2C01320E000,"Hyrule Warriors: Age of Calamity - Demo Version",slow;status-playable,playable,2022-10-10 17:37:41.000 -0100AE00096EA000,"Hyrule Warriors: Definitive Edition",services-horizon;status-ingame;nvdec,ingame,2024-06-16 10:34:05.000 -0100849000BDA000,"I Am Setsuna",status-playable,playable,2021-11-28 11:06:11.000 -01001860140B0000,"I Saw Black Clouds",nvdec;status-playable,playable,2021-04-19 17:22:16.000 -0100429006A06000,"I, Zombie",status-playable,playable,2021-01-13 14:53:44.000 -01004E5007E92000,"Ice Age Scrat's Nutty Adventure!",status-playable;nvdec,playable,2022-09-13 22:22:29.000 -010053700A25A000,"Ice Cream Surfer",status-playable,playable,2020-07-29 12:04:07.000 -0100954014718000,"Ice Station Z",status-menus;crash,menus,2021-11-21 20:02:15.000 -0100BE9007E7E000,"ICEY",status-playable,playable,2021-01-14 16:16:04.000 -0100BC60099FE000,"Iconoclasts",status-playable,playable,2021-08-30 21:11:04.000 -01001E700EB28000,"Idle Champions of the Forgotten Realms",online;status-boots,boots,2020-12-17 18:24:57.000 -01002EC014BCA000,"IdolDays",gpu;status-ingame;crash,ingame,2021-12-19 15:31:28.000 -01006550129C6000,"If Found...",status-playable,playable,2020-12-11 13:43:14.000 -01001AC00ED72000,"If My Heart Had Wings",status-playable,playable,2022-09-29 14:54:57.000 -01009F20086A0000,"Ikaruga",status-playable,playable,2023-04-06 15:00:02.000 -010040900AF46000,"Ikenfell",status-playable,playable,2021-06-16 17:18:44.000 -01007BC00E55A000,"Immortal Planet",status-playable,playable,2022-09-20 13:40:43.000 -010079501025C000,"Immortal Realms: Vampire Wars",nvdec;status-playable,playable,2021-06-17 17:41:46.000 -01000F400435A000,"Immortal Redneck",nvdec;status-playable,playable,2021-01-27 18:36:28.000 -01004A600EC0A000,"Immortals Fenyx Rising™",gpu;status-menus;crash,menus,2023-02-24 16:19:55.000 -0100737003190000,"IMPLOSION",status-playable;nvdec,playable,2021-12-12 03:52:13.000 -0100A760129A0000,"In rays of the Light",status-playable,playable,2021-04-07 15:18:07.000 -0100A2101107C000,"Indie Puzzle Bundle Vol 1",status-playable,playable,2022-09-27 22:23:21.000 -010002A00CD68000,"Indiecalypse",nvdec;status-playable,playable,2020-06-11 20:19:09.000 -01001D3003FDE000,"Indivisible",status-playable;nvdec,playable,2022-09-29 15:20:57.000 -01002BD00F626000,"Inertial Drift",status-playable;online-broken,playable,2022-10-11 12:22:19.000 -0100D4300A4CA000,"Infernium",UE4;regression;status-nothing,nothing,2021-01-13 16:36:07.000 -010039C001296000,"Infinite Minigolf",online;status-playable,playable,2020-09-29 12:26:25.000 -01001CB00EFD6000,"Infliction: Extended Cut",status-playable;nvdec;UE4,playable,2022-10-02 13:15:55.000 -0100F1401161E000,"INMOST",status-playable,playable,2022-10-05 11:27:40.000 -0100F200049C8000,"InnerSpace",status-playable,playable,2021-01-13 19:36:14.000 -0100D2D009028000,"INSIDE",status-playable,playable,2021-12-25 20:24:56.000 -0100EC7012D34000,"Inside Grass: A little adventure",status-playable,playable,2020-10-15 15:26:27.000 -010099700D750000,"Instant Sports",status-playable,playable,2022-09-09 12:59:40.000 -010099A011A46000,"Instant Sports Summer Games",gpu;status-menus,menus,2020-09-02 13:39:28.000 -010031B0145B8000,"INSTANT SPORTS TENNIS",status-playable,playable,2022-10-28 16:42:17.000 -010041501005E000,"Interrogation: You will be deceived",status-playable,playable,2022-10-05 11:40:10.000 -01000F700DECE000,"Into the Dead 2",status-playable;nvdec,playable,2022-09-14 12:36:14.000 -01001D0003B96000,"INVERSUS Deluxe",status-playable;online-broken,playable,2022-08-02 14:35:36.000 -0100C5B00FADE000,"Invisible Fist",status-playable,playable,2020-08-08 13:25:52.000 -010031B00C48C000,"Invisible, Inc. Nintendo Switch Edition",crash;status-nothing,nothing,2021-01-29 16:28:13.000 -01005F400E644000,"Invisigun Reloaded",gpu;online;status-ingame,ingame,2021-06-10 12:13:24.000 -010041C00D086000,"Ion Fury",status-ingame;vulkan-backend-bug,ingame,2022-08-07 08:27:51.000 -010095C016C14000,"Iridium",status-playable,playable,2022-08-05 23:19:53.000 -0100AD300B786000,"Iris School of Wizardry -Vinculum Hearts-",status-playable,playable,2022-12-05 13:11:15.000 -0100945012168000,"Iris.Fall",status-playable;nvdec,playable,2022-10-18 13:40:22.000 -01005270118D6000,"Iron Wings",slow;status-ingame,ingame,2022-08-07 08:32:57.000 -01004DB003E6A000,"IRONCAST",status-playable,playable,2021-01-13 13:54:29.000 -0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",status-playable,playable,2021-06-04 20:12:37.000 -010063E0104BE000,"Is It Wrong to Try to Pick Up Girls in a Dungeon? Familia Myth Infinite Combate",status-playable,playable,2020-08-31 13:52:21.000 -0100F06013710000,"ISLAND",status-playable,playable,2021-05-06 15:11:47.000 -010077900440A000,"Island Flight Simulator",status-playable,playable,2021-06-04 19:42:46.000 -0100A2600FCA0000,"Island Saver",nvdec;status-playable,playable,2020-10-23 22:07:02.000 -010065200D192000,"Isoland",status-playable,playable,2020-07-26 13:48:16.000 -0100F5600D194000,"Isoland 2 - Ashes of Time",status-playable,playable,2020-07-26 14:29:05.000 -010001F0145A8000,"Isolomus",services;status-boots,boots,2021-11-03 07:48:21.000 -010068700C70A000,"ITTA",status-playable,playable,2021-06-07 03:15:52.000 -01004070022F0000,"Ittle Dew 2+",status-playable,playable,2020-11-17 11:44:32.000 -0100DEB00F12A000,"IxSHE Tell",status-playable;nvdec,playable,2022-12-02 18:00:42.000 -0100D8E00C874000,"izneo",status-menus;online-broken,menus,2022-08-06 15:56:23.000 -0100CD5008D9E000,"James Pond Codename Robocod",status-playable,playable,2021-01-13 09:48:45.000 -01005F4010AF0000,"Japanese Rail Sim: Journey to Kyoto",nvdec;status-playable,playable,2020-07-29 17:14:21.000 -010002D00EDD0000,"JDM Racing",status-playable,playable,2020-08-03 17:02:37.000 -0100C2700AEB8000,"Jenny LeClue - Detectivu",crash;status-nothing,nothing,2020-12-15 21:07:07.000 -01006E400AE2A000,"Jeopardy!®",audout;nvdec;online;status-playable,playable,2021-02-22 13:53:46.000 -0100E4900D266000,"Jet Kave Adventure",status-playable;nvdec,playable,2022-09-09 14:50:39.000 -0100F3500C70C000,"Jet Lancer",gpu;status-ingame,ingame,2021-02-15 18:15:47.000 -0100A5A00AF26000,"Jettomero: Hero of the Universe",status-playable,playable,2022-08-02 14:46:43.000 -01008330134DA000,"Jiffy",gpu;status-ingame;opengl,ingame,2024-02-03 23:11:24.000 -01001F5006DF6000,"Jim is Moving Out!",deadlock;status-ingame,ingame,2020-06-03 22:05:19.000 -0100F4D00D8BE000,"Jinrui no Ninasama he",status-ingame;crash,ingame,2023-03-07 02:04:17.000 -010038D011F08000,"Jisei: The First Case HD",audio;status-playable,playable,2022-10-05 11:43:33.000 -01007CE00C960000,"Job the Leprechaun",status-playable,playable,2020-06-05 12:10:06.000 -01007090104EC000,"John Wick Hex",status-playable,playable,2022-08-07 08:29:12.000 -01006E4003832000,"Johnny Turbo's Arcade: Bad Dudes",status-playable,playable,2020-12-10 12:30:56.000 -010069B002CDE000,"Johnny Turbo's Arcade: Gate Of Doom",status-playable,playable,2022-07-29 12:17:50.000 -010080D002CC6000,"Johnny Turbo's Arcade: Two Crude Dudes",status-playable,playable,2022-08-02 20:29:50.000 -0100D230069CC000,"Johnny Turbo's Arcade: Wizard Fire",status-playable,playable,2022-08-02 20:39:15.000 -01008120128C2000,"JoJos Bizarre Adventure All-Star Battle R",status-playable,playable,2022-12-03 10:45:10.000 -01008B60117EC000,"Journey to the Savage Planet",status-playable;nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12.000 -0100C7600F654000,"Juicy Realm",status-playable,playable,2023-02-21 19:16:20.000 -0100B4D00C76E000,"JUMANJI: The Video Game",UE4;crash;status-boots,boots,2020-07-12 13:52:25.000 -0100183010F12000,"JUMP FORCE - Deluxe Edition",status-playable;nvdec;online-broken;UE4,playable,2023-10-01 15:56:05.000 -01003D601014A000,"Jump King",status-playable,playable,2020-06-09 10:12:39.000 -0100B9C012706000,"Jump Rope Challenge",services;status-boots;crash;Needs Update,boots,2023-02-27 01:24:28.000 -0100D87009954000,"Jumping Joe & Friends",status-playable,playable,2021-01-13 17:09:42.000 -010069800D2B4000,"JUNK PLANET",status-playable,playable,2020-11-09 12:38:33.000 -0100CE100A826000,"Jurassic Pinball",status-playable,playable,2021-06-04 19:02:37.000 -010050A011344000,"Jurassic World Evolution: Complete Edition",cpu;status-menus;crash,menus,2023-08-04 18:06:54.000 -0100BCE000598000,"Just Dance 2017®",online;status-playable,playable,2021-03-05 09:46:01.000 -0100BEE017FC0000,"Just Dance 2023",status-nothing,nothing,2023-06-05 16:44:54.000 -010075600AE96000,"Just Dance® 2019",gpu;online;status-ingame,ingame,2021-02-27 17:21:27.000 -0100DDB00DB38000,"Just Dance® 2020",status-playable,playable,2022-01-24 13:31:57.000 -0100EA6014BB8000,"Just Dance® 2022",gpu;services;status-ingame;crash;Needs Update,ingame,2022-10-28 11:01:53.000 -0100AC600CF0A000,"Just Die Already",status-playable;UE4,playable,2022-12-13 13:37:50.000 -01002C301033E000,"Just Glide",status-playable,playable,2020-08-07 17:38:10.000 -0100830008426000,"Just Shapes & Beats",ldn-untested;nvdec;status-playable,playable,2021-02-09 12:18:36.000 -010035A0044E8000,"JYDGE",status-playable,playable,2022-08-02 21:20:13.000 -0100D58012FC2000,"Kagamihara/Justice",crash;status-nothing,nothing,2021-06-21 16:41:29.000 -0100D5F00EC52000,"Kairobotica",status-playable,playable,2021-05-06 12:17:56.000 -0100BDC00A664000,"KAMEN RIDER CLIMAX SCRAMBLE",status-playable;nvdec;ldn-untested,playable,2024-07-03 08:51:11.000 -0100A9801180E000,"KAMEN RIDER memory of heroez / Premium Sound Edition",status-playable,playable,2022-12-06 03:14:26.000 -010085300314E000,"KAMIKO",status-playable,playable,2020-05-13 12:48:57.000 -,"Kangokuto Mary Skelter Finale",audio;crash;status-ingame,ingame,2021-01-09 22:39:28.000 -01007FD00DB20000,"Katakoi Contrast - collection of branch -",status-playable;nvdec,playable,2022-12-09 09:41:26.000 -0100D7000C2C6000,"Katamari Damacy REROLL",status-playable,playable,2022-08-02 21:35:05.000 -0100F9800EDFA000,"KATANA KAMI: A Way of the Samurai Story",slow;status-playable,playable,2022-04-09 10:40:16.000 -010029600D56A000,"Katana ZERO",status-playable,playable,2022-08-26 08:09:09.000 -010038B00F142000,"Kaze and the Wild Masks",status-playable,playable,2021-04-19 17:11:03.000 -0100D7C01115E000,"Keen: One Girl Army",status-playable,playable,2020-12-14 23:19:52.000 -01008D400A584000,"Keep Talking and Nobody Explodes",status-playable,playable,2021-02-15 18:05:21.000 -01004B100BDA2000,"KEMONO FRIENDS PICROSS",status-playable,playable,2023-02-08 15:54:34.000 -0100A8200B15C000,"Kentucky Robo Chicken",status-playable,playable,2020-05-12 20:54:17.000 -0100327005C94000,"Kentucky Route Zero: TV Edition",status-playable,playable,2024-04-09 23:22:46.000 -0100DA200A09A000,"Kero Blaster",status-playable,playable,2020-05-12 20:42:52.000 -0100F680116A2000,"Kholat",UE4;nvdec;status-playable,playable,2021-06-17 11:52:48.000 -0100C0A004C2C000,"Kid Tripp",crash;status-nothing,nothing,2020-10-15 07:41:23.000 -0100FB400D832000,"KILL la KILL -IF",status-playable,playable,2020-06-09 14:47:08.000 -010011B00910C000,"Kill The Bad Guy",status-playable,playable,2020-05-12 22:16:10.000 -0100F2900B3E2000,"Killer Queen Black",ldn-untested;online;status-playable,playable,2021-04-08 12:46:18.000 -,"Kin'iro no Corda Octave",status-playable,playable,2020-09-22 13:23:12.000 -010089000F0E8000,"Kine",status-playable;UE4,playable,2022-09-14 14:28:37.000 -0100E6B00FFBA000,"King Lucas",status-playable,playable,2022-09-21 19:43:23.000 -0100B1300783E000,"King Oddball",status-playable,playable,2020-05-13 13:47:57.000 -01008D80148C8000,"King of Seas",status-playable;nvdec;UE4,playable,2022-10-28 18:29:41.000 -0100515014A94000,"King of Seas Demo",status-playable;nvdec;UE4,playable,2022-10-28 18:09:31.000 -01005D2011EA8000,"KINGDOM HEARTS Melody of Memory",crash;nvdec;status-ingame,ingame,2021-03-03 17:34:12.000 -0100A280121F6000,"Kingdom Rush",status-nothing;32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00.000 -01005EF003FF2000,"Kingdom Two Crowns",status-playable,playable,2020-05-16 19:36:21.000 -0100BD9004AB6000,"Kingdom: New Lands",status-playable,playable,2022-08-02 21:48:50.000 -0100EF50132BE000,"Kingdoms of Amalur: Re-Reckoning",status-playable,playable,2023-08-10 13:05:08.000 -010091201605A000,"Kirby and the Forgotten Land (Demo version)",status-playable;demo,playable,2022-08-21 21:03:01.000 -0100227010460000,"Kirby Fighters™ 2",ldn-works;online;status-playable,playable,2021-06-17 13:06:39.000 -0100A8E016236000,"Kirby’s Dream Buffet™",status-ingame;crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44.000 -010091D01A57E000,"Kirby’s Return to Dream Land Deluxe - Demo",status-playable;demo,playable,2023-02-18 17:21:55.000 -01006B601380E000,"Kirby’s Return to Dream Land™ Deluxe",status-playable,playable,2024-05-16 19:58:04.000 -01004D300C5AE000,"Kirby™ and the Forgotten Land",gpu;status-ingame,ingame,2024-03-11 17:11:21.000 -01007E3006DDA000,"Kirby™ Star Allies",status-playable;nvdec,playable,2023-11-15 17:06:19.000 -0100F3A00F4CA000,"Kissed by the Baddest Bidder",gpu;status-ingame;nvdec,ingame,2022-12-04 20:57:11.000 -01000C900A136000,"Kitten Squad",status-playable;nvdec,playable,2022-08-03 12:01:59.000 -010079D00C8AE000,"Klondike Solitaire",status-playable,playable,2020-12-13 16:17:27.000 -0100A6800DE70000,"Knight Squad",status-playable,playable,2020-08-09 16:54:51.000 -010024B00E1D6000,"Knight Squad 2",status-playable;nvdec;online-broken,playable,2022-10-28 18:38:09.000 -0100D51006AAC000,"Knight Terrors",status-playable,playable,2020-05-13 13:09:22.000 -01005F8010D98000,"Knightin'+",status-playable,playable,2020-08-31 18:18:21.000 -010004400B22A000,"Knights of Pen & Paper 2 Deluxiest Edition",status-playable,playable,2020-05-13 14:07:00.000 -0100D3F008746000,"Knights of Pen and Paper +1 Deluxier Edition",status-playable,playable,2020-05-11 21:46:32.000 -010001A00A1F6000,"Knock-Knock",nvdec;status-playable,playable,2021-02-01 20:03:19.000 -01009EF00DDB4000,"Knockout City™",services;status-boots;online-broken,boots,2022-12-09 09:48:58.000 -0100C57019BA2000,"Koa and the Five Pirates of Mara",gpu;status-ingame,ingame,2024-07-11 16:14:44.000 -01001E500401C000,"Koi DX",status-playable,playable,2020-05-11 21:37:51.000 -,"Koi no Hanasaku Hyakkaen",32-bit;gpu;nvdec;status-ingame,ingame,2020-10-03 14:17:10.000 -01005D200C9AA000,"Koloro",status-playable,playable,2022-08-03 12:34:02.000 -0100464009294000,"Kona",status-playable,playable,2022-08-03 12:48:19.000 -010016C011AAA000,"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",status-playable,playable,2023-04-26 09:51:08.000 -010088500D5EE000,"KORAL",UE4;crash;gpu;status-menus,menus,2020-11-16 12:41:26.000 -0100EC8004762000,"KORG Gadget for Nintendo Switch",status-playable,playable,2020-05-13 13:57:24.000 -010046600CCA4000,"Kotodama: The 7 Mysteries of Fujisawa",audout;status-playable,playable,2021-02-01 20:28:37.000 -010022801242C000,"KukkoroDays",status-menus;crash,menus,2021-11-25 08:52:56.000 -010035A00DF62000,"KUNAI",status-playable;nvdec,playable,2022-09-20 13:48:34.000 -010060400ADD2000,"Kunio-Kun: The World Classics Collection",online;status-playable,playable,2021-01-29 20:21:46.000 -010037500F282000,"KUUKIYOMI 2: Consider It More! - New Era",status-nothing;crash;Needs Update,nothing,2021-11-02 09:34:40.000 -0100894011F62000,"Kwaidan ~Azuma manor story~",status-playable,playable,2022-10-05 12:50:44.000 -0100830004FB6000,"L.A. Noire",status-playable,playable,2022-08-03 16:49:35.000 -0100732009CAE000,"L.F.O. -Lost Future Omega-",UE4;deadlock;status-boots,boots,2020-10-16 12:16:44.000 -0100F2B0123AE000,"L.O.L. Surprise! Remix: We Rule The World",status-playable,playable,2022-10-11 22:48:03.000 -010026000F662800,"LA-MULANA",gpu;status-ingame,ingame,2022-08-12 01:06:21.000 -0100E5D00F4AE000,"LA-MULANA 1 & 2",status-playable,playable,2022-09-22 17:56:36.000 -010038000F644000,"LA-MULANA 2",status-playable,playable,2022-09-03 13:45:57.000 -010058500B3E0000,"Labyrinth of Refrain: Coven of Dusk",status-playable,playable,2021-02-15 17:38:48.000 -010022D0089AE000,"Labyrinth of the Witch",status-playable,playable,2020-11-01 14:42:37.000 -0100BAB00E8C0000,"Langrisser I & II",status-playable,playable,2021-02-19 15:46:10.000 -0100E7200B272000,"Lanota",status-playable,playable,2019-09-04 01:58:14.000 -01005E000D3D8000,"Lapis x Labyrinth",status-playable,playable,2021-02-01 18:58:08.000 -0100AFE00E882000,"Laraan",status-playable,playable,2020-12-16 12:45:48.000 -0100DA700879C000,"Last Day of June",nvdec;status-playable,playable,2021-06-08 11:35:32.000 -01009E100BDD6000,"LASTFIGHT",status-playable,playable,2022-09-20 13:54:55.000 -0100055007B86000,"Late Shift",nvdec;status-playable,playable,2021-02-01 18:43:58.000 -01004EB00DACE000,"Later Daters Part One",status-playable,playable,2020-07-29 16:35:45.000 -01001730144DA000,"Layers of Fear 2",status-playable;nvdec;UE4,playable,2022-10-28 18:49:52.000 -0100BF5006A7C000,"Layers of Fear: Legacy",nvdec;status-playable,playable,2021-02-15 16:30:41.000 -0100CE500D226000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",status-playable;nvdec;opengl,playable,2022-09-14 15:01:57.000 -0100FDB00AA80000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",gpu;status-ingame;nvdec;opengl,ingame,2022-09-14 15:15:55.000 -01009C100390E000,"League of Evil",online;status-playable,playable,2021-06-08 11:23:27.000 -01002E900CD6E000,"Left-Right : The Mansion",status-playable,playable,2020-05-13 13:02:12.000 -010079901C898000,"Legacy of Kain™ Soul Reaver 1&2 Remastered",status-playable,playable,2025-01-07 05:50:01.000 -01002DB007A96000,"Legend of Kay Anniversary",nvdec;status-playable,playable,2021-01-29 18:38:29.000 -0100ECC00EF3C000,"Legend of the Skyfish",status-playable,playable,2020-06-24 13:04:22.000 -01007E900DFB6000,"Legend of the Tetrarchs",deadlock;status-ingame,ingame,2020-07-10 07:54:03.000 -0100A73006E74000,"Legendary Eleven",status-playable,playable,2021-06-08 12:09:03.000 -0100A7700B46C000,"Legendary Fishing",online;status-playable,playable,2021-04-14 15:08:46.000 -0100739018020000,"LEGO® 2K Drive",gpu;status-ingame;ldn-works,ingame,2024-04-09 02:05:12.000 -01003A30012C0000,"LEGO® CITY Undercover",status-playable;nvdec,playable,2024-09-30 08:44:27.000 -010070D009FEC000,"LEGO® DC Super-Villains",status-playable,playable,2021-05-27 18:10:37.000 -010052A00B5D2000,"LEGO® Harry Potter™ Collection",status-ingame;crash,ingame,2024-01-31 10:28:07.000 -010073C01AF34000,"LEGO® Horizon Adventures™",status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56.000 -01001C100E772000,"LEGO® Jurassic World",status-playable,playable,2021-05-27 17:00:20.000 -0100D3A00409E000,"LEGO® Marvel Super Heroes 2",status-nothing;crash,nothing,2023-03-02 17:12:33.000 -01006F600FFC8000,"LEGO® Marvel™ Super Heroes",status-playable,playable,2024-09-10 19:02:19.000 -01007FC00206E000,"LEGO® NINJAGO® Movie Video Game",status-nothing;crash,nothing,2022-08-22 19:12:53.000 -010042D00D900000,"LEGO® Star Wars™: The Skywalker Saga",gpu;slow;status-ingame,ingame,2024-04-13 20:08:46.000 -0100A01006E00000,"LEGO® The Incredibles",status-nothing;crash,nothing,2022-08-03 18:36:59.000 -0100838002AEA000,"LEGO® Worlds",crash;slow;status-ingame,ingame,2020-07-17 13:35:39.000 -0100E7500BF84000,"LEGRAND LEGACY: Tale of the Fatebounds",nvdec;status-playable,playable,2020-07-26 12:27:36.000 -0100A8E00CAA0000,"Leisure Suit Larry - Wet Dreams Don't Dry",status-playable,playable,2022-08-03 19:51:44.000 -010031A0135CA000,"Leisure Suit Larry - Wet Dreams Dry Twice",status-playable,playable,2022-10-28 19:00:57.000 -01003AB00983C000,"Lethal League Blaze",online;status-playable,playable,2021-01-29 20:13:31.000 -01008C300648E000,"Letter Quest Remastered",status-playable,playable,2020-05-11 21:30:34.000 -0100CE301678E800,"Letters - a written adventure",gpu;status-ingame,ingame,2023-02-21 20:12:38.000 -01009A200BE42000,"Levelhead",online;status-ingame,ingame,2020-10-18 11:44:51.000 -0100C960041DC000,"Levels+ : Addictive Puzzle Game",status-playable,playable,2020-05-12 13:51:39.000 -0100C8000F146000,"Liberated",gpu;status-ingame;nvdec,ingame,2024-07-04 04:58:24.000 -01003A90133A6000,"Liberated: Enhanced Edition",gpu;status-ingame;nvdec,ingame,2024-07-04 04:48:48.000 -01004360045C8000,"Lichtspeer: Double Speer Edition",status-playable,playable,2020-05-12 16:43:09.000 -010041F0128AE000,"Liege Dragon",status-playable,playable,2022-10-12 10:27:03.000 -010006300AFFE000,"Life Goes On",status-playable,playable,2021-01-29 19:01:20.000 -0100FD101186C000,"Life is Strange 2",status-playable;UE4,playable,2024-07-04 05:05:58.000 -0100DC301186A000,"Life is Strange Remastered",status-playable;UE4,playable,2022-10-03 16:54:44.000 -010008501186E000,"Life is Strange: Before the Storm Remastered",status-playable,playable,2023-09-28 17:15:44.000 -0100500012AB4000,"Life is Strange: True Colors™",gpu;status-ingame;UE4,ingame,2024-04-08 16:11:52.000 -01003AB012F00000,"Life of Boris: Super Slav",status-ingame,ingame,2020-12-17 11:40:05.000 -0100B3A0135D6000,"Life of Fly",status-playable,playable,2021-01-25 23:41:07.000 -010069A01506E000,"Life of Fly 2",slow;status-playable,playable,2022-10-28 19:26:52.000 -01005B6008132000,"Lifeless Planet: Premiere Edition",status-playable,playable,2022-08-03 21:25:13.000 -010030A006F6E000,"Light Fall",nvdec;status-playable,playable,2021-01-18 14:55:36.000 -010087700D07C000,"Light Tracer",nvdec;status-playable,playable,2021-05-05 19:15:43.000 -01009C8009026000,"LIMBO",cpu;status-boots;32-bit,boots,2023-06-28 15:39:19.000 -0100EDE012B58000,"Linelight",status-playable,playable,2020-12-17 12:18:07.000 -0100FAD00E65E000,"Lines X",status-playable,playable,2020-05-11 15:28:30.000 -010032F01096C000,"Lines XL",status-playable,playable,2020-08-31 17:48:23.000 -0100943010310000,"Little Busters! Converted Edition",status-playable;nvdec,playable,2022-09-29 15:34:56.000 -0100A3F009142000,"Little Dragons Café",status-playable,playable,2020-05-12 00:00:52.000 -010079A00D9E8000,"Little Friends: Dogs & Cats",status-playable,playable,2020-11-12 12:45:51.000 -0100B18001D8E000,"Little Inferno",32-bit;gpu;nvdec;status-ingame,ingame,2020-12-17 21:43:56.000 -0100E7000E826000,"Little Misfortune",nvdec;status-playable,playable,2021-02-23 20:39:44.000 -0100FE0014200000,"Little Mouse's Encyclopedia",status-playable,playable,2022-10-28 19:38:58.000 -01002FC00412C000,"Little Nightmares Complete Edition",status-playable;nvdec;UE4,playable,2022-08-03 21:45:35.000 -010097100EDD6000,"Little Nightmares II",status-playable;UE4,playable,2023-02-10 18:24:44.000 -010093A0135D6000,"Little Nightmares II DEMO",status-playable;UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20.000 -0100535014D76000,"Little Noah: Scion of Paradise",status-playable;opengl-backend-bug,playable,2022-09-14 04:17:13.000 -0100E6D00E81C000,"Little Racer",status-playable,playable,2022-10-18 16:41:13.000 -0100DD700D95E000,"Little Shopping",status-playable,playable,2020-10-03 16:34:35.000 -01000FB00AA90000,"Little Town Hero",status-playable,playable,2020-10-15 23:28:48.000 -01000690085BE000,"Little Triangle",status-playable,playable,2020-06-17 14:46:26.000 -0100CF801776C000,"LIVE A LIVE",status-playable;UE4;amd-vendor-bug,playable,2023-02-05 15:12:07.000 -0100BA000FC9C000,"LocO-SportS",status-playable,playable,2022-09-20 14:09:30.000 -010016C009374000,"Lode Runner Legacy",status-playable,playable,2021-01-10 14:10:28.000 -0100D2C013288000,"Lofi Ping Pong",crash;status-ingame,ingame,2020-12-15 20:09:22.000 -0100B6D016EE6000,"Lone Ruin",status-ingame;crash;nvdec,ingame,2023-01-17 06:41:19.000 -0100A0C00E0DE000,"Lonely Mountains: Downhill",status-playable;online-broken,playable,2024-07-04 05:08:11.000 -010062A0178A8000,"LOOPERS",gpu;slow;status-ingame;crash,ingame,2022-06-17 19:21:45.000 -010064200F7D8000,"Lost Horizon",status-playable,playable,2020-09-01 13:41:22.000 -01005ED010642000,"Lost Horizon 2",nvdec;status-playable,playable,2020-06-16 12:02:12.000 -01005FE01291A000,"Lost in Random™",gpu;status-ingame,ingame,2022-12-18 07:09:28.000 -0100133014510000,"Lost Lands 2: The Four Horsemen",status-playable;nvdec,playable,2022-10-24 16:41:00.000 -0100156014C6A000,"Lost Lands 3: The Golden Curse",status-playable;nvdec,playable,2022-10-24 16:30:00.000 -0100BDD010AC8000,"Lost Lands: Dark Overlord",status-playable,playable,2022-10-03 11:52:58.000 -010054600AC74000,"LOST ORBIT: Terminal Velocity",status-playable,playable,2021-06-14 12:21:12.000 -010046600B76A000,"Lost Phone Stories",services;status-ingame,ingame,2020-04-05 23:17:33.000 -01008AD013A86800,"Lost Ruins",gpu;status-ingame,ingame,2023-02-19 14:09:00.000 -010077B0038B2000,"LOST SPHEAR",status-playable,playable,2021-01-10 06:01:21.000 -0100018013124000,"Lost Words: Beyond the Page",status-playable,playable,2022-10-24 17:03:21.000 -0100D36011AD4000,"Love Letter from Thief X",gpu;status-ingame;nvdec,ingame,2023-11-14 03:55:31.000 -0100F0300B7BE000,"Ludomania",crash;services;status-nothing,nothing,2020-04-03 00:33:47.000 -010048701995E000,"Luigi's Mansion™ 2 HD",status-ingame;ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27.000 -0100DCA0064A6000,"Luigi’s Mansion™ 3",gpu;slow;status-ingame;Needs Update;ldn-works,ingame,2024-09-27 22:17:36.000 -010052B00B194000,"Lumini",status-playable,playable,2020-08-09 20:45:09.000 -0100FF00042EE000,"Lumo",status-playable;nvdec,playable,2022-02-11 18:20:30.000 -0100F3100EB44000,"Lust for Darkness",nvdec;status-playable,playable,2020-07-26 12:09:15.000 -0100F0B00F68E000,"Lust for Darkness: Dawn Edition",nvdec;status-playable,playable,2021-06-16 13:47:46.000 -0100EC2011A80000,"Luxar",status-playable,playable,2021-03-04 21:11:57.000 -0100F2400D434000,"MachiKnights -Blood bagos-",status-playable;nvdec;UE4,playable,2022-09-14 15:08:04.000 -010024A009428000,"Mad Carnage",status-playable,playable,2021-01-10 13:00:07.000 -01005E7013476000,"Mad Father",status-playable,playable,2020-11-12 13:22:10.000 -010061E00EB1E000,"Mad Games Tycoon",status-playable,playable,2022-09-20 14:23:14.000 -01004A200E722000,"Magazine Mogul",status-playable;loader-allocator,playable,2022-10-03 12:05:34.000 -01008E500BF62000,"MagiCat",status-playable,playable,2020-12-11 15:22:07.000 -010032C011356000,"Magicolors",status-playable,playable,2020-08-12 18:39:11.000 -01008C300B624000,"Mahjong Solitaire Refresh",status-boots;crash,boots,2022-12-09 12:02:55.000 -010099A0145E8000,"Mahluk dark demon",status-playable,playable,2021-04-15 13:14:24.000 -01001C100D80E000,"Mainlining",status-playable,playable,2020-06-05 01:02:00.000 -0100D9900F220000,"Maitetsu:Pure Station",status-playable,playable,2022-09-20 15:12:49.000 -0100A78017BD6000,"Makai Senki Disgaea 7",status-playable,playable,2023-10-05 00:22:18.000 -01005A700CC3C000,"Mana Spark",status-playable,playable,2020-12-10 13:41:01.000 -010093D00CB22000,"Maneater",status-playable;nvdec;UE4,playable,2024-05-21 16:11:57.000 -0100361009B1A000,"Manifold Garden",status-playable,playable,2020-10-13 20:27:13.000 -0100C9A00952A000,"Manticore - Galaxy on Fire",status-boots;crash;nvdec,boots,2024-02-04 04:37:24.000 -0100E98002F6E000,"Mantis Burn Racing",status-playable;online-broken;ldn-broken,playable,2024-09-02 02:13:04.000 -01008E800D1FE000,"Marble Power Blast",status-playable,playable,2021-06-04 16:00:02.000 -01001B2012D5E000,"Märchen Forest",status-playable,playable,2021-02-04 21:33:34.000 -0100DA7017C9E000,"Marco & The Galaxy Dragon Demo",gpu;status-ingame;demo,ingame,2023-06-03 13:05:33.000 -01006D0017F7A000,"Mario & Luigi: Brothership",status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00.000 -010002C00C270000,"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",status-ingame;crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55.000 -0100317013770000,"MARIO + RABBIDS SPARKS OF HOPE",gpu;status-ingame;Needs Update,ingame,2024-06-20 19:56:19.000 -010067300059A000,"Mario + Rabbids® Kingdom Battle",slow;status-playable;opengl-backend-bug,playable,2024-05-06 10:16:54.000 -0100C9C00E25C000,"Mario Golf™: Super Rush",gpu;status-ingame,ingame,2024-08-18 21:31:48.000 -0100ED100BA3A000,"Mario Kart Live: Home Circuit™",services;status-nothing;crash;Needs More Attention,nothing,2022-12-07 22:36:52.000 -0100152000022000,"Mario Kart™ 8 Deluxe",32-bit;status-playable;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17.000 -01006FE013472000,"Mario Party™ Superstars",gpu;status-ingame;ldn-works;mac-bug,ingame,2024-05-16 11:23:34.000 -010019401051C000,"Mario Strikers™: Battle League",status-boots;crash;nvdec,boots,2024-05-07 06:23:56.000 -0100BDE00862A000,"Mario Tennis™ Aces",gpu;status-ingame;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40.000 -0100B99019412000,"Mario vs. Donkey Kong™",status-playable,playable,2024-05-04 21:22:39.000 -0100D9E01DBB0000,"Mario vs. Donkey Kong™ Demo",status-playable,playable,2024-02-18 10:40:06.000 -01009A700A538000,"Mark of the Ninja: Remastered",status-playable,playable,2022-08-04 15:48:30.000 -010044600FDF0000,"Marooners",status-playable;nvdec;online-broken,playable,2022-10-18 21:35:26.000 -010060700AC50000,"MARVEL ULTIMATE ALLIANCE 3: The Black Order",status-playable;nvdec;ldn-untested,playable,2024-02-14 19:51:51.000 -01003DE00C95E000,"Mary Skelter 2",status-ingame;crash;regression,ingame,2023-09-12 07:37:28.000 -0100113008262000,"Masquerada: Songs and Shadows",status-playable,playable,2022-09-20 15:18:54.000 -01004800197F0000,"Master Detective Archives: Rain Code",gpu;status-ingame,ingame,2024-04-19 20:11:09.000 -0100CC7009196000,"Masters of Anima",status-playable;nvdec,playable,2022-08-04 16:00:09.000 -01004B100A1C4000,"MathLand",status-playable,playable,2020-09-01 15:40:06.000 -0100A8C011F26000,"Max and the book of chaos",status-playable,playable,2020-09-02 12:24:43.000 -01001C9007614000,"Max: The Curse of Brotherhood",status-playable;nvdec,playable,2022-08-04 16:33:04.000 -0100E8B012FBC000,"Maze",status-playable,playable,2020-12-17 16:13:58.000 -0100EEF00CBC0000,"MEANDERS",UE4;gpu;status-ingame,ingame,2021-06-11 19:19:33.000 -0100EC000CE24000,"Mech Rage",status-playable,playable,2020-11-18 12:30:16.000 -0100C4F005EB4000,"Mecho Tales",status-playable,playable,2022-08-04 17:03:19.000 -0100E4600D31A000,"Mechstermination Force",status-playable,playable,2024-07-04 05:39:15.000 -,"Medarot Classics Plus Kabuto Ver",status-playable,playable,2020-11-21 11:31:18.000 -,"Medarot Classics Plus Kuwagata Ver",status-playable,playable,2020-11-21 11:30:40.000 -0100BBC00CB9A000,"Mega Mall Story",slow;status-playable,playable,2022-08-04 17:10:58.000 -0100B0C0086B0000,"Mega Man 11",status-playable,playable,2021-04-26 12:07:53.000 -010038E016264000,"Mega Man Battle Network Legacy Collection Vol. 1",status-playable,playable,2023-04-25 03:55:57.000 -0100734016266000,"Mega Man Battle Network Legacy Collection Vol. 2",status-playable,playable,2023-08-03 18:04:32.000 -01002D4007AE0000,"Mega Man Legacy Collection",gpu;status-ingame,ingame,2021-06-03 18:17:17.000 -0100842008EC4000,"Mega Man Legacy Collection 2",status-playable,playable,2021-01-06 08:47:59.000 -01005C60086BE000,"Mega Man X Legacy Collection",audio;crash;services;status-menus,menus,2020-12-04 04:30:17.000 -010025C00D410000,"Mega Man Zero/ZX Legacy Collection",status-playable,playable,2021-06-14 16:17:32.000 -0100FC700F942000,"Megabyte Punch",status-playable,playable,2020-10-16 14:07:18.000 -010006F011220000,"Megadimension Neptunia VII",32-bit;nvdec;status-playable,playable,2020-12-17 20:56:03.000 -010082B00E8B8000,"Megaquarium",status-playable,playable,2022-09-14 16:50:00.000 -010005A00B312000,"Megaton Rainfall",gpu;status-boots;opengl,boots,2022-08-04 18:29:43.000 -0100EA100DF92000,"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",32-bit;status-playable;nvdec,playable,2022-12-05 13:19:12.000 -0100B360068B2000,"Mekorama",gpu;status-boots,boots,2021-06-17 16:37:21.000 -01000FA010340000,"Melbits World",status-menus;nvdec;online,menus,2021-11-26 13:51:22.000 -0100F68019636000,"Melon Journey",status-playable,playable,2023-04-23 21:20:01.000 -,"Memories Off -Innocent Fille- for Dearest",status-playable,playable,2020-08-04 07:31:22.000 -010062F011E7C000,"Memory Lane",status-playable;UE4,playable,2022-10-05 14:31:03.000 -0100EBE00D5B0000,"Meow Motors",UE4;gpu;status-ingame,ingame,2020-12-18 00:24:01.000 -0100273008FBC000,"Mercenaries Saga Chronicles",status-playable,playable,2021-01-10 12:48:19.000 -010094500C216000,"Mercenaries Wings: The False Phoenix",crash;services;status-nothing,nothing,2020-05-08 22:42:12.000 -0100F900046C4000,"Mercenary Kings: Reloaded Edition",online;status-playable,playable,2020-10-16 13:05:58.000 -0100E5000D3CA000,"Merchants of Kaidan",status-playable,playable,2021-04-15 11:44:28.000 -01009A500D4A8000,"METAGAL",status-playable,playable,2020-06-05 00:05:48.000 -010047F01AA10000,"METAL GEAR SOLID 3: Snake Eater - Master Collection Version",services-horizon;status-menus,menus,2024-07-24 06:34:06.000 -0100E8F00F6BE000,"METAL MAX Xeno Reborn",status-playable,playable,2022-12-05 15:33:53.000 -01002DE00E5D0000,"Metaloid: Origin",status-playable,playable,2020-06-04 20:26:35.000 -010055200E87E000,"Metamorphosis",UE4;audout;gpu;nvdec;status-ingame,ingame,2021-06-16 16:18:11.000 -0100D4900E82C000,"Metro 2033 Redux",gpu;status-ingame,ingame,2022-11-09 10:53:13.000 -0100F0400E850000,"Metro: Last Light Redux",slow;status-ingame;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52.000 -010012101468C000,"Metroid Prime™ Remastered",gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15.000 -010093801237C000,"Metroid™ Dread",status-playable,playable,2023-11-13 04:02:36.000 -0100A1200F20C000,"Midnight Evil",status-playable,playable,2022-10-18 22:55:19.000 -0100C1E0135E0000,"Mighty Fight Federation",online;status-playable,playable,2021-04-06 18:39:56.000 -0100AD701344C000,"Mighty Goose",status-playable;nvdec,playable,2022-10-28 20:25:38.000 -01000E2003FA0000,"MIGHTY GUNVOLT BURST",status-playable,playable,2020-10-19 16:05:49.000 -010060D00AE36000,"Mighty Switch Force! Collection",status-playable,playable,2022-10-28 20:40:32.000 -01003DA010E8A000,"Miitopia™",gpu;services-horizon;status-ingame,ingame,2024-09-06 10:39:13.000 -01007DA0140E8000,"Miitopia™ Demo",services;status-menus;crash;demo,menus,2023-02-24 11:50:58.000 -01004B7009F00000,"Miles & Kilo",status-playable,playable,2020-10-22 11:39:49.000 -0100976008FBE000,"Millie",status-playable,playable,2021-01-26 20:47:19.000 -0100F5700C9A8000,"MIND: Path to Thalamus",UE4;status-playable,playable,2021-06-16 17:37:25.000 -0100D71004694000,"Minecraft",status-ingame;crash;ldn-broken,ingame,2024-09-29 12:08:59.000 -01006C100EC08000,"Minecraft Dungeons",status-playable;nvdec;online-broken;UE4,playable,2024-06-26 22:10:43.000 -01007C6012CC8000,"Minecraft Legends",gpu;status-ingame;crash,ingame,2024-03-04 00:32:24.000 -01006BD001E06000,"Minecraft: Nintendo Switch Edition",status-playable;ldn-broken,playable,2023-10-15 01:47:08.000 -01003EF007ABA000,"Minecraft: Story Mode - Season Two",status-playable;online-broken,playable,2023-03-04 00:30:50.000 -010059C002AC2000,"Minecraft: Story Mode - The Complete Adventure",status-boots;crash;online-broken,boots,2022-08-04 18:56:58.000 -0100B7500F756000,"Minefield",status-playable,playable,2022-10-05 15:03:29.000 -01003560119A6000,"Mini Motor Racing X",status-playable,playable,2021-04-13 17:54:49.000 -0100FB700DE1A000,"Mini Trains",status-playable,playable,2020-07-29 23:06:20.000 -010039200EC66000,"Miniature - The Story Puzzle",status-playable;UE4,playable,2022-09-14 17:18:50.000 -010069200EB80000,"Ministry of Broadcast",status-playable,playable,2022-08-10 00:31:16.000 -0100C3F000BD8000,"Minna de Wai Wai! Spelunker",status-nothing;crash,nothing,2021-11-03 07:17:11.000 -0100FAE010864000,"Minoria",status-playable,playable,2022-08-06 18:50:50.000 -01005AB015994000,"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",gpu;status-playable,playable,2022-03-28 02:22:24.000 -0100CFA0138C8000,"Missile Dancer",status-playable,playable,2021-01-31 12:22:03.000 -0100E3601495C000,"Missing Features: 2D",status-playable,playable,2022-10-28 20:52:54.000 -010059200CC40000,"Mist Hunter",status-playable,playable,2021-06-16 13:58:58.000 -0100F65011E52000,"Mittelborg: City of Mages",status-playable,playable,2020-08-12 19:58:06.000 -0100876015D74000,"MLB® The Show™ 22",gpu;slow;status-ingame,ingame,2023-04-25 06:28:43.000 -0100A9F01776A000,"MLB® The Show™ 22 Tech Test",services;status-nothing;crash;Needs Update;demo,nothing,2022-12-09 10:28:34.000 -0100913019170000,"MLB® The Show™ 23",gpu;status-ingame,ingame,2024-07-26 00:56:50.000 -0100E2E01C32E000,"MLB® The Show™ 24",services-horizon;status-nothing,nothing,2024-03-31 04:54:11.000 -010011300F74C000,"MO:Astray",crash;status-ingame,ingame,2020-12-11 21:45:44.000 -010020400BDD2000,"Moai VI: Unexpected Guests",slow;status-playable,playable,2020-10-27 16:40:20.000 -0100D8700B712000,"Modern Combat Blackout",crash;status-nothing,nothing,2021-03-29 19:47:15.000 -010004900D772000,"Modern Tales: Age of Invention",slow;status-playable,playable,2022-10-12 11:20:19.000 -0100B8500D570000,"Moero Chronicle™ Hyper",32-bit;status-playable,playable,2022-08-11 07:21:56.000 -01004EB0119AC000,"Moero Crystal H",32-bit;status-playable;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22.000 -0100B46017500000,"MOFUMOFUSENSEN",gpu;status-menus,menus,2024-09-21 21:51:08.000 -01004A400C320000,"Momodora: Reverie Under the Moonlight",deadlock;status-nothing,nothing,2022-02-06 03:47:43.000 -01002CC00BC4C000,"Momonga Pinball Adventures",status-playable,playable,2022-09-20 16:00:40.000 -010093100DA04000,"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",gpu;status-ingame,ingame,2023-09-22 10:21:46.000 -0100FBD00ED24000,"MONKEY BARRELS",status-playable,playable,2022-09-14 17:28:52.000 -01004C500B8E0000,"Monkey King: Master of the Clouds",status-playable,playable,2020-09-28 22:35:48.000 -01003030161DC000,"Monomals",gpu;status-ingame,ingame,2024-08-06 22:02:51.000 -0100F3A00FB78000,"Mononoke Slashdown",status-menus;crash,menus,2022-05-04 20:55:47.000 -01007430037F6000,"MONOPOLY® for Nintendo Switch™",status-playable;nvdec;online-broken,playable,2024-02-06 23:13:01.000 -01005FF013DC2000,"MONOPOLY® Madness",status-playable,playable,2022-01-29 21:13:52.000 -0100E2D0128E6000,"Monster Blast",gpu;status-ingame,ingame,2023-09-02 20:02:32.000 -01006F7001D10000,"Monster Boy and the Cursed Kingdom",status-playable;nvdec,playable,2022-08-04 20:06:32.000 -01005FC01000E000,"Monster Bugs Eat People",status-playable,playable,2020-07-26 02:05:34.000 -0100742007266000,"Monster Energy Supercross - The Official Videogame",status-playable;nvdec;UE4,playable,2022-08-04 20:25:00.000 -0100F8100B982000,"Monster Energy Supercross - The Official Videogame 2",status-playable;nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24.000 -010097800EA20000,"Monster Energy Supercross - The Official Videogame 3",UE4;audout;nvdec;online;status-playable,playable,2021-06-14 12:37:54.000 -0100E9900ED74000,"Monster Farm",32-bit;nvdec;status-playable,playable,2021-05-05 19:29:13.000 -0100770008DD8000,"Monster Hunter Generations Ultimate™",32-bit;status-playable;online-broken;ldn-works,playable,2024-03-18 14:35:36.000 -0100B04011742000,"Monster Hunter Rise",gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59.000 -010093A01305C000,"Monster Hunter Rise Demo",status-playable;online-broken;ldn-works;demo,playable,2022-10-18 23:04:17.000 -0100E21011446000,"Monster Hunter Stories 2: Wings of Ruin",services;status-ingame,ingame,2022-07-10 19:27:30.000 -010042501329E000,"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",status-playable;demo,playable,2022-11-13 22:20:26.000 -,"Monster Hunter XX Demo",32-bit;cpu;status-nothing,nothing,2020-03-22 10:12:28.000 -0100C3800049C000,"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",status-playable,playable,2024-07-21 14:08:09.000 -010088400366E000,"Monster Jam Crush It!",UE4;nvdec;online;status-playable,playable,2021-04-08 19:29:27.000 -010095C00F354000,"Monster Jam Steel Titans",status-menus;crash;nvdec;UE4,menus,2021-11-14 09:45:38.000 -010051B0131F0000,"Monster Jam Steel Titans 2",status-playable;nvdec;UE4,playable,2022-10-24 17:17:59.000 -01004DE00DD44000,"Monster Puzzle",status-playable,playable,2020-09-28 22:23:10.000 -0100A0F00DA68000,"Monster Sanctuary",crash;status-ingame,ingame,2021-04-04 05:06:41.000 -0100D30010C42000,"Monster Truck Championship",slow;status-playable;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51.000 -01004E10142FE000,"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",crash;status-ingame,ingame,2021-07-23 10:56:44.000 -010039F00EF70000,"Monstrum",status-playable,playable,2021-01-31 11:07:26.000 -0100C2E00B494000,"Moonfall Ultimate",nvdec;status-playable,playable,2021-01-17 14:01:25.000 -0100E3D014ABC000,"Moorhuhn Jump and Run 'Traps and Treasures'",status-playable,playable,2024-03-08 15:10:02.000 -010045C00F274000,"Moorhuhn Kart 2",status-playable;online-broken,playable,2022-10-28 21:10:35.000 -010040E00F642000,"Morbid: The Seven Acolytes",status-playable,playable,2022-08-09 17:21:58.000 -01004230123E0000,"More Dark",status-playable,playable,2020-12-15 16:01:06.000 -01005DA003E6E000,"Morphies Law",UE4;crash;ldn-untested;nvdec;online;status-menus,menus,2020-11-22 17:05:29.000 -0100776003F0C000,"Morphite",status-playable,playable,2021-01-05 19:40:55.000 -0100F2200C984000,"Mortal Kombat 11",slow;status-ingame;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17.000 -01006560184E6000,"Mortal Kombat™ 1",gpu;status-ingame,ingame,2024-09-04 15:45:47.000 -010032800D740000,"Mosaic",status-playable,playable,2020-08-11 13:07:35.000 -01002ED00B01C000,"Moto Racer 4",UE4;nvdec;online;status-playable,playable,2021-04-08 19:09:11.000 -01003F200D0F2000,"Moto Rush GT",status-playable,playable,2022-08-05 11:23:55.000 -0100361007268000,"MotoGP™18",status-playable;nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45.000 -01004B800D0E8000,"MotoGP™19",status-playable;nvdec;online-broken;UE4,playable,2022-08-05 11:54:14.000 -01001FA00FBBC000,"MotoGP™20",status-playable;ldn-untested,playable,2022-09-29 17:58:01.000 -01000F5013820000,"MotoGP™21",gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08.000 -010040401D564000,"MotoGP™24",gpu;status-ingame,ingame,2024-05-10 23:41:00.000 -01002A900D6D6000,"Motorsport Manager for Nintendo Switch™",status-playable;nvdec,playable,2022-08-05 12:48:14.000 -01009DB00D6E0000,"Mountain Rescue Simulator",status-playable,playable,2022-09-20 16:36:48.000 -0100C4C00E73E000,"Moving Out",nvdec;status-playable,playable,2021-06-07 21:17:24.000 -0100D3300F110000,"Mr Blaster",status-playable,playable,2022-09-14 17:56:24.000 -0100DCA011262000,"Mr. DRILLER DrillLand",nvdec;status-playable,playable,2020-07-24 13:56:48.000 -010031F002B66000,"Mr. Shifty",slow;status-playable,playable,2020-05-08 15:28:16.000 -01005EF00B4BC000,"Ms. Splosion Man",online;status-playable,playable,2020-05-09 20:45:43.000 -010087C009246000,"Muddledash",services;status-ingame,ingame,2020-05-08 16:46:14.000 -01009D200952E000,"MudRunner - American Wilds",gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52.000 -010073E008E6E000,"Mugsters",status-playable,playable,2021-01-28 17:57:17.000 -0100A8400471A000,"MUJO",status-playable,playable,2020-05-08 16:31:04.000 -0100211005E94000,"Mulaka",status-playable,playable,2021-01-28 18:07:20.000 -010038B00B9AE000,"Mummy Pinball",status-playable,playable,2022-08-05 16:08:11.000 -01008E200C5C2000,"Muse Dash",status-playable,playable,2020-06-06 14:41:29.000 -010035901046C000,"Mushroom Quest",status-playable,playable,2020-05-17 13:07:08.000 -0100700006EF6000,"Mushroom Wars 2",nvdec;status-playable,playable,2020-09-28 15:26:08.000 -010046400F310000,"Music Racer",status-playable,playable,2020-08-10 08:51:23.000 -,"Musou Orochi 2 Ultimate",crash;nvdec;status-boots,boots,2021-04-09 19:39:16.000 -0100F6000EAA8000,"Must Dash Amigos",status-playable,playable,2022-09-20 16:45:56.000 -01007B6006092000,"MUSYNX",status-playable,playable,2020-05-08 14:24:43.000 -0100C3E00ACAA000,"Mutant Football League: Dynasty Edition",status-playable;online-broken,playable,2022-08-05 17:01:51.000 -01004BE004A86000,"Mutant Mudds Collection",status-playable,playable,2022-08-05 17:11:38.000 -0100E6B00DEA4000,"Mutant Year Zero: Road to Eden - Deluxe Edition",status-playable;nvdec;UE4,playable,2022-09-10 13:31:10.000 -0100161009E5C000,"MX Nitro: Unleashed",status-playable,playable,2022-09-27 22:34:33.000 -0100218011E7E000,"MX vs ATV All Out",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46.000 -0100D940063A0000,"MXGP3 - The Official Motocross Videogame",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 14:00:20.000 -01002C6012334000,"My Aunt is a Witch",status-playable,playable,2022-10-19 09:21:17.000 -0100F6F0118B8000,"My Butler",status-playable,playable,2020-06-27 13:46:23.000 -010031200B94C000,"My Friend Pedro",nvdec;status-playable,playable,2021-05-28 11:19:17.000 -01000D700BE88000,"My Girlfriend is a Mermaid!?",nvdec;status-playable,playable,2020-05-08 13:32:55.000 -010039000B68E000,"MY HERO ONE'S JUSTICE",UE4;crash;gpu;online;status-menus,menus,2020-12-10 13:11:04.000 -01007E700DBF6000,"MY HERO ONE'S JUSTICE 2",UE4;gpu;nvdec;status-ingame,ingame,2020-12-18 14:08:47.000 -0100E4701373E000,"My Hidden Things",status-playable,playable,2021-04-15 11:26:06.000 -0100872012B34000,"My Little Dog Adventure",gpu;status-ingame,ingame,2020-12-10 17:47:37.000 -01008C600395A000,"My Little Riding Champion",slow;status-playable,playable,2020-05-08 17:00:53.000 -010086B00C784000,"My Lovely Daughter: ReBorn",status-playable,playable,2022-11-24 17:25:32.000 -0100E7700C284000,"My Memory of Us",status-playable,playable,2022-08-20 11:03:14.000 -010028F00ABAE000,"My Riding Stables - Life with Horses",status-playable,playable,2022-08-05 21:39:07.000 -010042A00FBF0000,"My Riding Stables 2: A New Adventure",status-playable,playable,2021-05-16 14:14:59.000 -0100E25008E68000,"My Time at Portia",status-playable,playable,2021-05-28 12:42:55.000 -0100158011A08000,"My Universe - Cooking Star Restaurant",status-playable,playable,2022-10-19 10:00:44.000 -0100F71011A0A000,"My Universe - Fashion Boutique",status-playable;nvdec,playable,2022-10-12 14:54:19.000 -0100CD5011A02000,"My Universe - PET CLINIC CATS & DOGS",status-boots;crash;nvdec,boots,2022-02-06 02:05:53.000 -01006C301199C000,"My Universe - School Teacher",nvdec;status-playable,playable,2021-01-21 16:02:52.000 -01000D5005974000,"N++ (NPLUSPLUS)",status-playable,playable,2022-08-05 21:54:58.000 -0100A6F00AC70000,"NAIRI: Tower of Shirin",nvdec;status-playable,playable,2020-08-09 19:49:12.000 -010002F001220000,"NAMCO MUSEUM",status-playable;ldn-untested,playable,2024-08-13 07:52:21.000 -0100DAA00AEE6000,"NAMCO MUSEUM™ ARCADE PAC™",status-playable,playable,2021-06-07 21:44:50.000 -,"NAMCOT COLLECTION",audio;status-playable,playable,2020-06-25 13:35:22.000 -010072B00BDDE000,"Narcos: Rise of the Cartels",UE4;crash;nvdec;status-boots,boots,2021-03-22 13:18:47.000 -01006BB00800A000,"NARUTO SHIPPUDEN: Ultimate Ninja STORM 3 Full Burst",status-playable;nvdec,playable,2024-06-16 14:58:05.000 -010084D00CF5E000,"NARUTO SHIPPUDEN™: Ultimate Ninja® STORM 4 ROAD TO BORUTO",status-playable,playable,2024-06-29 13:04:22.000 -0100D2D0190A4000,"NARUTO X BORUTO Ultimate Ninja STORM CONNECTIONS",services-horizon;status-nothing,nothing,2024-07-25 05:16:48.000 -0100715007354000,"NARUTO: Ultimate Ninja STORM",status-playable;nvdec,playable,2022-08-06 14:10:31.000 -0100545016D5E000,"NASCAR Rivals",status-ingame;crash;Incomplete,ingame,2023-04-21 01:17:47.000 -0100103011894000,"Naught",UE4;status-playable,playable,2021-04-26 13:31:45.000 -01001AE00C1B2000,"NBA 2K Playgrounds 2",status-playable;nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38.000 -0100760002048000,"NBA 2K18",gpu;status-ingame;ldn-untested,ingame,2022-08-06 14:17:51.000 -01001FF00B544000,"NBA 2K19",crash;ldn-untested;services;status-nothing,nothing,2021-04-16 13:07:21.000 -0100E24011D1E000,"NBA 2K21",gpu;status-boots,boots,2022-10-05 15:31:51.000 -0100ACA017E4E800,"NBA 2K23",status-boots,boots,2023-10-10 23:07:14.000 -010006501A8D8000,"NBA 2K24 Kobe Bryant Edition",cpu;gpu;status-boots,boots,2024-08-11 18:23:08.000 -010002900294A000,"NBA Playgrounds",status-playable;nvdec;online-broken;UE4,playable,2022-08-06 17:06:59.000 -0100F5A008126000,"NBA Playgrounds - Enhanced Edition",status-playable;nvdec;online-broken;UE4,playable,2022-08-06 16:13:44.000 -0100BBC00E4F8000,"Need a packet?",status-playable,playable,2020-08-12 16:09:01.000 -010029B0118E8000,"Need for Speed™ Hot Pursuit Remastered",status-playable;online-broken,playable,2024-03-20 21:58:02.000 -010023500B0BA000,"Nefarious",status-playable,playable,2020-12-17 03:20:33.000 -01008390136FC000,"Negative: The Way of Shinobi",nvdec;status-playable,playable,2021-03-24 11:29:41.000 -010065F00F55A000,"Neighbours back From Hell",status-playable;nvdec,playable,2022-10-12 15:36:48.000 -0100B4900AD3E000,"NEKOPARA Vol.1",status-playable;nvdec,playable,2022-08-06 18:25:54.000 -010012900C782000,"NEKOPARA Vol.2",status-playable,playable,2020-12-16 11:04:47.000 -010045000E418000,"NEKOPARA Vol.3",status-playable,playable,2022-10-03 12:49:04.000 -010049F013656000,"NEKOPARA Vol.4",crash;status-ingame,ingame,2021-01-17 01:47:18.000 -01006ED00BC76000,"Nelke & the Legendary Alchemists ~Ateliers of the New World~",status-playable,playable,2021-01-28 19:39:42.000 -01005F000B784000,"Nelly Cootalot: The Fowl Fleet",status-playable,playable,2020-06-11 20:55:42.000 -01001AB0141A8000,"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",crash;status-ingame,ingame,2021-07-18 07:29:18.000 -0100EBB00D2F4000,"Neo Cab",status-playable,playable,2021-04-24 00:27:58.000 -010040000DB98000,"Neo Cab Demo",crash;status-boots,boots,2020-06-16 00:14:00.000 -010006D0128B4000,"NEOGEO POCKET COLOR SELECTION Vol.1",status-playable,playable,2023-07-08 20:55:36.000 -0100BAB01113A000,"Neon Abyss",status-playable,playable,2022-10-05 15:59:44.000 -010075E0047F8000,"Neon Chrome",status-playable,playable,2022-08-06 18:38:34.000 -010032000EAC6000,"Neon Drive",status-playable,playable,2022-09-10 13:45:48.000 -0100B9201406A000,"Neon White",status-ingame;crash,ingame,2023-02-02 22:25:06.000 -0100743008694000,"Neonwall",status-playable;nvdec,playable,2022-08-06 18:49:52.000 -01001A201331E000,"Neoverse Trinity Edition",status-playable,playable,2022-10-19 10:28:03.000 -01000B2011352000,"Nerdook Bundle Vol. 1",gpu;slow;status-ingame,ingame,2020-10-07 14:27:10.000 -01008B0010160000,"Nerved",status-playable;UE4,playable,2022-09-20 17:14:03.000 -0100BA0004F38000,"NeuroVoider",status-playable,playable,2020-06-04 18:20:05.000 -0100C20012A54000,"Nevaeh",gpu;nvdec;status-ingame,ingame,2021-06-16 17:29:03.000 -010039801093A000,"Never Breakup",status-playable,playable,2022-10-05 16:12:12.000 -0100F79012600000,"Neverending Nightmares",crash;gpu;status-boots,boots,2021-04-24 01:43:35.000 -0100A9600EDF8000,"Neverlast",slow;status-ingame,ingame,2020-07-13 23:55:19.000 -010013700DA4A000,"Neverwinter Nights: Enhanced Edition",gpu;status-menus;nvdec,menus,2024-09-30 02:59:19.000 -01004C200100E000,"New Frontier Days ~Founding Pioneers~",status-playable,playable,2020-12-10 12:45:07.000 -0100F4300BF2C000,"New Pokémon Snap™",status-playable,playable,2023-01-15 23:26:57.000 -010017700B6C2000,"New Super Lucky's Tale",status-playable,playable,2024-03-11 14:14:10.000 -0100EA80032EA000,"New Super Mario Bros.™ U Deluxe",32-bit;status-playable,playable,2023-10-08 02:06:37.000 -0100B9500E886000,"Newt One",status-playable,playable,2020-10-17 21:21:48.000 -01005A5011A44000,"Nexomon: Extinction",status-playable,playable,2020-11-30 15:02:22.000 -0100B69012EC6000,"Nexoria: Dungeon Rogue Heroes",gpu;status-ingame,ingame,2021-10-04 18:41:29.000 -0100271004570000,"Next Up Hero",online;status-playable,playable,2021-01-04 22:39:36.000 -0100E5600D446000,"Ni no Kuni: Wrath of the White Witch",status-boots;32-bit;nvdec,boots,2024-07-12 04:52:59.000 -0100EDD00D530000,"Nice Slice",nvdec;status-playable,playable,2020-06-17 15:13:27.000 -01000EC010BF4000,"Niche - a genetics survival game",nvdec;status-playable,playable,2020-11-27 14:01:11.000 -010010701AFB2000,"Nickelodeon All-Star Brawl 2",status-playable,playable,2024-06-03 14:15:01.000 -0100D6200933C000,"Nickelodeon Kart Racers",status-playable,playable,2021-01-07 12:16:49.000 -010058800F860000,"Nicky - The Home Alone Golf Ball",status-playable,playable,2020-08-08 13:45:39.000 -0100A95012668000,"Nicole",status-playable;audout,playable,2022-10-05 16:41:44.000 -0100B8E016F76000,"NieR:Automata The End of YoRHa Edition",slow;status-ingame;crash,ingame,2024-05-17 01:06:34.000 -0100F3A0095A6000,"Night Call",status-playable;nvdec,playable,2022-10-03 12:57:00.000 -0100921006A04000,"Night in the Woods",status-playable,playable,2022-12-03 20:17:54.000 -0100D8500A692000,"Night Trap - 25th Anniversary Edition",status-playable;nvdec,playable,2022-08-08 13:16:14.000 -01005F4009112000,"Nightmare Boy: The New Horizons of Reigns of Dreams, a Metroidvania journey with little rusty nightmares, the empire of knight final boss",status-playable,playable,2021-01-05 15:52:29.000 -01006E700B702000,"Nightmares from the Deep 2: The Siren`s Call",status-playable;nvdec,playable,2022-10-19 10:58:53.000 -0100628004BCE000,"Nights of Azure 2: Bride of the New Moon",status-menus;crash;nvdec;regression,menus,2022-11-24 16:00:39.000 -010042300C4F6000,"Nightshade/百花百狼",nvdec;status-playable,playable,2020-05-10 19:43:31.000 -0100AA0008736000,"Nihilumbra",status-playable,playable,2020-05-10 16:00:12.000 -0100D03003F0E000,"Nine Parchments",status-playable;ldn-untested,playable,2022-08-07 12:32:08.000 -0100E2F014F46000,"NINJA GAIDEN Σ",status-playable;nvdec,playable,2022-11-13 16:27:02.000 -0100696014F4A000,"NINJA GAIDEN Σ2",status-playable;nvdec,playable,2024-07-31 21:53:48.000 -01002AF014F4C000,"NINJA GAIDEN: Master Collection",status-playable;nvdec,playable,2023-08-11 08:25:31.000 -010088E003A76000,"Ninja Shodown",status-playable,playable,2020-05-11 12:31:21.000 -010081D00A480000,"Ninja Striker!",status-playable,playable,2020-12-08 19:33:29.000 -0100CCD0073EA000,"Ninjala",status-boots;online-broken;UE4,boots,2024-07-03 20:04:49.000 -010003C00B868000,"Ninjin: Clash of Carrots",status-playable;online-broken,playable,2024-07-10 05:12:26.000 -0100746010E4C000,"NinNinDays",status-playable,playable,2022-11-20 15:17:29.000 -0100C9A00ECE6000,"Nintendo 64™ – Nintendo Switch Online",gpu;status-ingame;vulkan,ingame,2024-04-23 20:21:07.000 -0100D870045B6000,"Nintendo Entertainment System™ - Nintendo Switch Online",status-playable;online,playable,2022-07-01 15:45:06.000 -0100C4B0034B2000,"Nintendo Labo Toy-Con 01 Variety Kit",gpu;status-ingame,ingame,2022-08-07 12:56:07.000 -01001E9003502000,"Nintendo Labo Toy-Con 03 Vehicle Kit",services;status-menus;crash,menus,2022-08-03 17:20:11.000 -0100165003504000,"Nintendo Labo Toy-Con 04 VR Kit",services;status-boots;crash,boots,2023-01-17 22:30:24.000 -01009AB0034E0000,"Nintendo Labo™ Toy-Con 02: Robot Kit",gpu;status-ingame,ingame,2022-08-07 13:03:19.000 -0100D2F00D5C0000,"Nintendo Switch™ Sports",deadlock;status-boots,boots,2024-09-10 14:20:24.000 -01000EE017182000,"Nintendo Switch™ Sports Online Play Test",gpu;status-ingame,ingame,2022-03-16 07:44:12.000 -010037200C72A000,"Nippon Marathon",nvdec;status-playable,playable,2021-01-28 20:32:46.000 -010020901088A000,"Nirvana Pilot Yume",status-playable,playable,2022-10-29 11:49:49.000 -01009B400ACBA000,"No Heroes Here",online;status-playable,playable,2020-05-10 02:41:57.000 -0100853015E86000,"No Man's Sky",gpu;status-ingame,ingame,2024-07-25 05:18:17.000 -0100F0400F202000,"No More Heroes",32-bit;status-playable,playable,2022-09-13 07:44:27.000 -010071400F204000,"No More Heroes 2: Desperate Struggle",32-bit;status-playable;nvdec,playable,2022-11-19 01:38:13.000 -01007C600EB42000,"No More Heroes 3",gpu;status-ingame;UE4,ingame,2024-03-11 17:06:19.000 -01009F3011004000,"No Straight Roads",status-playable;nvdec,playable,2022-10-05 17:01:38.000 -0100F7D00A1BC000,"NO THING",status-playable,playable,2021-01-04 19:06:01.000 -0100542012884000,"Nongunz: Doppelganger Edition",status-playable,playable,2022-10-29 12:00:39.000 -010016E011EFA000,"Norman's Great Illusion",status-playable,playable,2020-12-15 19:28:24.000 -01001A500AD6A000,"Norn9 ~Norn + Nonette~ LOFN",status-playable;nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16.000 -01004840086FE000,"NORTH",nvdec;status-playable,playable,2021-01-05 16:17:44.000 -0100A9E00D97A000,"Northgard",status-menus;crash,menus,2022-02-06 02:05:35.000 -01008AE019614000,"nOS new Operating System",status-playable,playable,2023-03-22 16:49:08.000 -0100CB800B07E000,"NOT A HERO: SUPER SNAZZY EDITION",status-playable,playable,2021-01-28 19:31:24.000 -01004D500D9BE000,"Not Not - A Brain Buster",status-playable,playable,2020-05-10 02:05:26.000 -0100DAF00D0E2000,"Not Tonight: Take Back Control Edition",status-playable;nvdec,playable,2022-10-19 11:48:47.000 -0100343013248000,"Nubarron: The adventure of an unlucky gnome",status-playable,playable,2020-12-17 16:45:17.000 -01005140089F6000,"Nuclien",status-playable,playable,2020-05-10 05:32:55.000 -010002700C34C000,"Numbala",status-playable,playable,2020-05-11 12:01:07.000 -010020500C8C8000,"Number Place 10000",gpu;status-menus,menus,2021-11-24 09:14:23.000 -010003701002C000,"Nurse Love Syndrome",status-playable,playable,2022-10-13 10:05:22.000 -0000000000000000,"nx-hbmenu",status-boots;Needs Update;homebrew,boots,2024-04-06 22:05:32.000 -,"nxquake2",services;status-nothing;crash;homebrew,nothing,2022-08-04 23:14:04.000 -010049F00EC30000,"Nyan Cat: Lost in Space",online;status-playable,playable,2021-06-12 13:22:03.000 -01002E6014FC4000,"O---O",status-playable,playable,2022-10-29 12:12:14.000 -010074600CC7A000,"OBAKEIDORO!",nvdec;online;status-playable,playable,2020-10-16 16:57:34.000 -01002A000C478000,"Observer",UE4;gpu;nvdec;status-ingame,ingame,2021-03-03 20:19:45.000 -01007D7001D0E000,"Oceanhorn - Monster of Uncharted Seas",status-playable,playable,2021-01-05 13:55:22.000 -01006CB010840000,"Oceanhorn 2: Knights of the Lost Realm",status-playable,playable,2021-05-21 18:26:10.000 -010096B00A08E000,"Octocopter: Double or Squids",status-playable,playable,2021-01-06 01:30:16.000 -0100CAB006F54000,"Octodad: Dadliest Catch",crash;status-boots,boots,2021-04-23 15:26:12.000 -0100A3501946E000,"OCTOPATH TRAVELER II",gpu;status-ingame;amd-vendor-bug,ingame,2024-09-22 11:39:20.000 -010057D006492000,"Octopath Traveler™",UE4;crash;gpu;status-ingame,ingame,2020-08-31 02:34:36.000 -010084300C816000,"Odallus: The Dark Call",status-playable,playable,2022-08-08 12:37:58.000 -0100BB500EE3C000,"Oddworld: Munch's Oddysee",gpu;nvdec;status-ingame,ingame,2021-06-17 12:11:50.000 -01005E700ABB8000,"Oddworld: New 'n' Tasty",nvdec;status-playable,playable,2021-06-17 17:51:32.000 -0100D210177C6000,"ODDWORLD: SOULSTORM",services-horizon;status-boots;crash,boots,2024-08-18 13:13:26.000 -01002EA00ABBA000,"Oddworld: Stranger's Wrath",status-menus;crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21.000 -010029F00C876000,"Odium to the Core",gpu;status-ingame,ingame,2021-01-08 14:03:52.000 -01006F5013202000,"Off And On Again",status-playable,playable,2022-10-29 19:46:26.000 -01003CD00E8BC000,"Offroad Racing - Buggy X ATV X Moto",status-playable;online-broken;UE4,playable,2022-09-14 18:53:22.000 -01003B900AE12000,"Oh My Godheads: Party Edition",status-playable,playable,2021-04-15 11:04:11.000 -0100F45006A00000,"Oh...Sir! The Hollywood Roast",status-ingame,ingame,2020-12-06 00:42:30.000 -010030B00B2F6000,"OK K.O.! Let’s Play Heroes",nvdec;status-playable,playable,2021-01-11 18:41:02.000 -0100276009872000,"OKAMI HD",status-playable;nvdec,playable,2024-04-05 06:24:58.000 -01006AB00BD82000,"OkunoKA",status-playable;online-broken,playable,2022-08-08 14:41:51.000 -0100CE2007A86000,"Old Man's Journey",nvdec;status-playable,playable,2021-01-28 19:16:52.000 -0100C3D00923A000,"Old School Musical",status-playable,playable,2020-12-10 12:51:12.000 -010099000BA48000,"Old School Racer 2",status-playable,playable,2020-10-19 12:11:26.000 -0100E0200B980000,"OlliOlli: Switch Stance",gpu;status-boots,boots,2024-04-25 08:36:37.000 -0100F9D00C186000,"Olympia Soiree",status-playable,playable,2022-12-04 21:07:12.000 -0100A8B00E14A000,"Olympic Games Tokyo 2020 – The Official Video Game™",ldn-untested;nvdec;online;status-playable,playable,2021-01-06 01:20:24.000 -01001D600E51A000,"Omega Labyrinth Life",status-playable,playable,2021-02-23 21:03:03.000 -,"Omega Vampire",nvdec;status-playable,playable,2020-10-17 19:15:35.000 -0100CDC00C40A000,"Omensight: Definitive Edition",UE4;crash;nvdec;status-ingame,ingame,2020-07-26 01:45:14.000 -01006DB00D970000,"OMG Zombies!",32-bit;status-playable,playable,2021-04-12 18:04:45.000 -010014E017B14000,"OMORI",status-playable,playable,2023-01-07 20:21:02.000 -,"Once Upon A Coma",nvdec;status-playable,playable,2020-08-01 12:09:39.000 -0100BD3006A02000,"One More Dungeon",status-playable,playable,2021-01-06 09:10:58.000 -010076600FD64000,"One Person Story",status-playable,playable,2020-07-14 11:51:02.000 -0100774009CF6000,"ONE PIECE Pirate Warriors 3 Deluxe Edition",nvdec;status-playable,playable,2020-05-10 06:23:52.000 -01008FE00E2F6000,"ONE PIECE: PIRATE WARRIORS 4",status-playable;online-broken;ldn-untested,playable,2022-09-27 22:55:46.000 -0100574002AF4000,"ONE PIECE: Unlimited World Red Deluxe Edition",status-playable,playable,2020-05-10 22:26:32.000 -0100EEA00E3EA000,"One-Way Ticket",UE4;status-playable,playable,2020-06-20 17:20:49.000 -0100463013246000,"Oneiros",status-playable,playable,2022-10-13 10:17:22.000 -010057C00D374000,"Oniken",status-playable,playable,2022-09-10 14:22:38.000 -010037900C814000,"Oniken: Unstoppable Edition",status-playable,playable,2022-08-08 14:52:06.000 -0100416008A12000,"Onimusha: Warlords",nvdec;status-playable,playable,2020-07-31 13:08:39.000 -0100CF4011B2A000,"OniNaki",nvdec;status-playable,playable,2021-02-27 21:52:42.000 -010074000BE8E000,"oOo: Ascension",status-playable,playable,2021-01-25 14:13:34.000 -0100D5400BD90000,"Operación Triunfo 2017",services;status-ingame;nvdec,ingame,2022-08-08 15:06:42.000 -01006CF00CFA4000,"Operencia: The Stolen Sun",UE4;nvdec;status-playable,playable,2021-06-08 13:51:07.000 -01004A200BE82000,"OPUS Collection",status-playable,playable,2021-01-25 15:24:04.000 -010049C0075F0000,"OPUS: The Day We Found Earth",nvdec;status-playable,playable,2021-01-21 18:29:31.000 -0100F9A012892000,"Ord.",status-playable,playable,2020-12-14 11:59:06.000 -010061D00DB74000,"Ori and the Blind Forest: Definitive Edition",status-playable;nvdec;online-broken,playable,2022-09-14 19:58:13.000 -010005800F46E000,"Ori and the Blind Forest: Definitive Edition Demo",status-playable,playable,2022-09-10 14:40:12.000 -01008DD013200000,"Ori and the Will of the Wisps",status-playable,playable,2023-03-07 00:47:13.000 -01006C70102EA000,"Orn: The Tiny Forest Sprite",UE4;gpu;status-ingame,ingame,2020-08-07 14:25:30.000 -0100E5900F49A000,"Othercide",status-playable;nvdec,playable,2022-10-05 19:04:38.000 -01006AA00EE44000,"Otokomizu",status-playable,playable,2020-07-13 21:00:44.000 -01006AF013A9E000,"Otti: The House Keeper",status-playable,playable,2021-01-31 12:11:24.000 -01000320060AC000,"OTTTD: Over The Top Tower Defense",slow;status-ingame,ingame,2020-10-10 19:31:07.000 -010097F010FE6000,"Our Two Bedroom Story",gpu;status-ingame;nvdec,ingame,2023-10-10 17:41:20.000 -0100D5D00C6BE000,"Our World Is Ended.",nvdec;status-playable,playable,2021-01-19 22:46:57.000 -01005A700A166000,"OUT OF THE BOX",status-playable,playable,2021-01-28 01:34:27.000 -0100D9F013102000,"Outbreak Lost Hope",crash;status-boots,boots,2021-04-26 18:01:23.000 -01006EE013100000,"Outbreak The Nightmare Chronicles",status-playable,playable,2022-10-13 10:41:57.000 -0100A0D013464000,"Outbreak: Endless Nightmares",status-playable,playable,2022-10-29 12:35:49.000 -0100C850130FE000,"Outbreak: Epidemic",status-playable,playable,2022-10-13 10:27:31.000 -0100B450130FC000,"Outbreak: The New Nightmare",status-playable,playable,2022-10-19 15:42:07.000 -0100B8900EFA6000,"Outbuddies DX",gpu;status-ingame,ingame,2022-08-04 22:39:24.000 -0100DE70085E8000,"Outlast 2",status-ingame;crash;nvdec,ingame,2022-01-22 22:28:05.000 -01008D4007A1E000,"Outlast: Bundle of Terror",status-playable;nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26.000 -01009B900401E000,"Overcooked Special Edition",status-playable,playable,2022-08-08 20:48:52.000 -01006FD0080B2000,"Overcooked! 2",status-playable;ldn-untested,playable,2022-08-08 16:48:10.000 -0100F28011892000,"Overcooked! All You Can Eat",ldn-untested;online;status-playable,playable,2021-04-15 10:33:52.000 -0100D7F00EC64000,"Overlanders",status-playable;nvdec;UE4,playable,2022-09-14 20:15:06.000 -01008EA00E816000,"OVERPASS™",status-playable;online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47.000 -0100647012F62000,"Override 2: Super Mech League",status-playable;online-broken;UE4,playable,2022-10-19 15:56:04.000 -01008A700F7EE000,"Override: Mech City Brawl - Super Charged Mega Edition",status-playable;nvdec;online-broken;UE4,playable,2022-09-20 17:33:32.000 -0100F8600E21E000,"Overwatch® 2",deadlock;status-boots,boots,2022-09-14 20:22:22.000 -01005F000CC18000,"OVERWHELM",status-playable,playable,2021-01-21 18:37:18.000 -0100BC2004FF4000,"Owlboy",status-playable,playable,2020-10-19 14:24:45.000 -0100AD9012510000,"PAC-MAN™ 99",gpu;status-ingame;online-broken,ingame,2024-04-23 00:48:25.000 -010024C001224000,"PAC-MAN™ CHAMPIONSHIP EDITION 2 PLUS",status-playable,playable,2021-01-19 22:06:18.000 -011123900AEE0000,"Paladins",online;status-menus,menus,2021-01-21 19:21:37.000 -0100F0D004CAE000,"PAN-PAN A tiny big adventure",audout;status-playable,playable,2021-01-25 14:42:00.000 -010083700B730000,"Pang Adventures",status-playable,playable,2021-04-10 12:16:59.000 -010006E00DFAE000,"Pantsu Hunter: Back to the 90s",status-playable,playable,2021-02-19 15:12:27.000 -0100C6A00E94A000,"Panzer Dragoon: Remake",status-playable,playable,2020-10-04 04:03:55.000 -01004AE0108E0000,"Panzer Paladin",status-playable,playable,2021-05-05 18:26:00.000 -010004500DE50000,"Paper Dolls Original",UE4;crash;status-boots,boots,2020-07-13 20:26:21.000 -0100A3900C3E2000,"Paper Mario™: The Origami King",audio;status-playable;Needs Update,playable,2024-08-09 18:27:40.000 -0100ECD018EBE000,"Paper Mario™: The Thousand-Year Door",gpu;status-ingame;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35.000 -01006AD00B82C000,"Paperbound Brawlers",status-playable,playable,2021-01-25 14:32:15.000 -0100DC70174E0000,"Paradigm Paradox",status-playable;vulkan-backend-bug,playable,2022-12-03 22:28:13.000 -01007FB010DC8000,"Paradise Killer",status-playable;UE4,playable,2022-10-05 19:33:05.000 -010063400B2EC000,"Paranautical Activity",status-playable,playable,2021-01-25 13:49:19.000 -01006B5012B32000,"Part Time UFO™",status-ingame;crash,ingame,2023-03-03 03:13:05.000 -01007FC00A040000,"Party Arcade",status-playable;online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53.000 -0100B8E00359E000,"Party Golf",status-playable;nvdec,playable,2022-08-09 12:38:30.000 -010022801217E000,"Party Hard 2",status-playable;nvdec,playable,2022-10-05 20:31:48.000 -010027D00F63C000,"Party Treats",status-playable,playable,2020-07-02 00:05:00.000 -01001E500EA16000,"Path of Sin: Greed",status-menus;crash,menus,2021-11-24 08:00:00.000 -010031F006E76000,"Pato Box",status-playable,playable,2021-01-25 15:17:52.000 -01001F201121E000,"PAW Patrol Mighty Pups Save Adventure Bay",status-playable,playable,2022-10-13 12:17:55.000 -0100360016800000,"PAW Patrol: Grand Prix",gpu;status-ingame,ingame,2024-05-03 16:16:11.000 -0100CEC003A4A000,"PAW Patrol: On a Roll!",nvdec;status-playable,playable,2021-01-28 21:14:49.000 -01000C4015030000,"Pawapoke R",services-horizon;status-nothing,nothing,2024-05-14 14:28:32.000 -0100A56006CEE000,"Pawarumi",status-playable;online-broken,playable,2022-09-10 15:19:33.000 -0100274004052000,"PAYDAY 2",status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39.000 -010085700ABC8000,"PBA Pro Bowling",status-playable;nvdec;online-broken;UE4,playable,2022-09-14 23:00:49.000 -0100F95013772000,"PBA Pro Bowling 2021",status-playable;online-broken;UE4,playable,2022-10-19 16:46:40.000 -010072800CBE8000,"PC Building Simulator",status-playable,playable,2020-06-12 00:31:58.000 -010002100CDCC000,"Peaky Blinders: Mastermind",status-playable,playable,2022-10-19 16:56:35.000 -010028A0048A6000,"Peasant Knight",status-playable,playable,2020-12-22 09:30:50.000 -0100C510049E0000,"Penny-Punching Princess",status-playable,playable,2022-08-09 13:37:05.000 -0100CA901AA9C000,"Penny’s Big Breakaway",status-playable;amd-vendor-bug,playable,2024-05-27 07:58:51.000 -0100563005B70000,"Perception",UE4;crash;nvdec;status-menus,menus,2020-12-18 11:49:23.000 -010011700D1B2000,"Perchang",status-playable,playable,2021-01-25 14:19:52.000 -010089F00A3B4000,"Perfect Angle",status-playable,playable,2021-01-21 18:48:45.000 -01005CD012DC0000,"Perky Little Things",status-boots;crash;vulkan,boots,2024-08-04 07:22:46.000 -01005EB013FBA000,"Persephone",status-playable,playable,2021-03-23 22:39:19.000 -0100A0300FC3E000,"Perseverance",status-playable,playable,2020-07-13 18:48:27.000 -010062B01525C000,"Persona 4 Golden",status-playable,playable,2024-08-07 17:48:07.000 -01005CA01580E000,"Persona 5 Royal",gpu;status-ingame,ingame,2024-08-17 21:45:15.000 -010087701B092000,"Persona 5 Tactica",status-playable,playable,2024-04-01 22:21:03.000 -,"Persona 5: Scramble",deadlock;status-boots,boots,2020-10-04 03:22:29.000 -0100801011C3E000,"Persona® 5 Strikers",status-playable;nvdec;mac-bug,playable,2023-09-26 09:36:01.000 -010044400EEAE000,"Petoons Party",nvdec;status-playable,playable,2021-03-02 21:07:58.000 -010053401147C000,"PGA TOUR 2K21",deadlock;status-ingame;nvdec,ingame,2022-10-05 21:53:50.000 -0100DDD00C0EA000,"Phantaruk",status-playable,playable,2021-06-11 18:09:54.000 -0100063005C86000,"Phantom Breaker: Battle Grounds Overdrive",audio;status-playable;nvdec,playable,2024-02-29 14:20:35.000 -010096F00E5B0000,"Phantom Doctrine",status-playable;UE4,playable,2022-09-15 10:51:50.000 -0100C31005A50000,"Phantom Trigger",status-playable,playable,2022-08-09 14:27:30.000 -0100CB000A142000,"Phoenix Wright: Ace Attorney Trilogy",status-playable,playable,2023-09-15 22:03:12.000 -0100DA400F624000,"PHOGS!",online;status-playable,playable,2021-01-18 15:18:37.000 -0100BF1003B9A000,"Physical Contact: 2048",slow;status-playable,playable,2021-01-25 15:18:32.000 -01008110036FE000,"Physical Contact: SPEED",status-playable,playable,2022-08-09 14:40:46.000 -010077300A86C000,"PIANISTA",status-playable;online-broken,playable,2022-08-09 14:52:56.000 -010012100E8DC000,"PICROSS LORD OF THE NAZARICK",status-playable,playable,2023-02-08 15:54:56.000 -0100C9600A88E000,"PICROSS S2",status-playable,playable,2020-10-15 12:01:40.000 -010079200D330000,"PICROSS S3",status-playable,playable,2020-10-15 11:55:27.000 -0100C250115DC000,"PICROSS S4",status-playable,playable,2020-10-15 12:33:46.000 -0100AC30133EC000,"PICROSS S5",status-playable,playable,2022-10-17 18:51:42.000 -010025901432A000,"PICROSS S6",status-playable,playable,2022-10-29 17:52:19.000 -01009B2016104000,"PICROSS S7",status-playable,playable,2022-02-16 12:51:25.000 -010043B00E1CE000,"PictoQuest",status-playable,playable,2021-02-27 15:03:16.000 -0100D06003056000,"Piczle Lines DX",UE4;crash;nvdec;status-menus,menus,2020-11-16 04:21:31.000 -010017600B532000,"Piczle Lines DX 500 More Puzzles!",UE4;status-playable,playable,2020-12-15 23:42:51.000 -01000FD00D5CC000,"Pig Eat Ball",services;status-ingame,ingame,2021-11-30 01:57:45.000 -01001CB0106F8000,"Pikmin 3 Deluxe Demo",32-bit;crash;demo;gpu;status-ingame,ingame,2021-06-16 18:38:07.000 -0100E0B019974000,"Pikmin 4 Demo",gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08.000 -0100AA80194B0000,"Pikmin™ 1",audio;status-ingame,ingame,2024-05-28 18:56:11.000 -0100D680194B2000,"Pikmin™ 1+2",gpu;status-ingame,ingame,2023-07-31 08:53:41.000 -0100F4C009322000,"Pikmin™ 3 Deluxe",gpu;status-ingame;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26.000 -0100B7C00933A000,"Pikmin™ 4",gpu;status-ingame;crash;UE4,ingame,2024-08-26 03:39:08.000 -0100D6200E130000,"Pillars of Eternity: Complete Edition",status-playable,playable,2021-02-27 00:24:21.000 -01007A500B0B2000,"Pilot Sports",status-playable,playable,2021-01-20 15:04:17.000 -0100DA70186D4000,"Pinball FX",status-playable,playable,2024-05-03 17:09:11.000 -0100DB7003828000,"Pinball FX3",status-playable;online-broken,playable,2022-11-11 23:49:07.000 -01002BA00D662000,"Pine",slow;status-ingame,ingame,2020-07-29 16:57:39.000 -010041100B148000,"Pinstripe",status-playable,playable,2020-11-26 10:40:40.000 -01002B20174EE000,"Piofiore: Episodio 1926",status-playable,playable,2022-11-23 18:36:05.000 -01009240117A2000,"Piofiore: Fated Memories",nvdec;status-playable,playable,2020-11-30 14:27:50.000 -0100EA2013BCC000,"Pixel Game Maker Series Puzzle Pedestrians",status-playable,playable,2022-10-24 20:15:50.000 -0100859013CE6000,"Pixel Game Maker Series Werewolf Princess Kaguya",crash;services;status-nothing,nothing,2021-03-26 00:23:07.000 -010060A00F5E8000,"Pixel Gladiator",status-playable,playable,2020-07-08 02:41:26.000 -010000E00E612000,"Pixel Puzzle Makeout League",status-playable,playable,2022-10-13 12:34:00.000 -0100382011002000,"PixelJunk Eden 2",crash;status-ingame,ingame,2020-12-17 11:55:52.000 -0100E4D00A690000,"PixelJunk™ Monsters 2",status-playable,playable,2021-06-07 03:40:01.000 -01004A900C352000,"Pizza Titan Ultra",nvdec;status-playable,playable,2021-01-20 15:58:42.000 -05000FD261232000,"Pizza Tower",status-ingame;crash,ingame,2024-09-16 00:21:56.000 -0100FF8005EB2000,"Plague Road",status-playable,playable,2022-08-09 15:27:14.000 -010030B00C316000,"Planescape: Torment and Icewind Dale: Enhanced Editions",cpu;status-boots;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26.000 -010003C0099EE000,"PLANET ALPHA",UE4;gpu;status-ingame,ingame,2020-12-16 14:42:20.000 -01007EA019CFC000,"Planet Cube: Edge",status-playable,playable,2023-03-22 17:10:12.000 -0100F0A01F112000,"planetarian: The Reverie of a Little Planet & Snow Globe",status-playable,playable,2020-10-17 20:26:20.000 -010087000428E000,"Plantera Deluxe",status-playable,playable,2022-08-09 15:36:28.000 -0100C56010FD8000,"Plants vs. Zombies: Battle for Neighborville™ Complete Edition",gpu;audio;status-boots;crash,boots,2024-09-02 12:58:14.000 -0100E5B011F48000,"PLOID SAGA",status-playable,playable,2021-04-19 16:58:45.000 -01009440095FE000,"Pode",nvdec;status-playable,playable,2021-01-25 12:58:35.000 -010086F0064CE000,"Poi: Explorer Edition",nvdec;status-playable,playable,2021-01-21 19:32:00.000 -0100EB6012FD2000,"Poison Control",status-playable,playable,2021-05-16 14:01:54.000 -010072400E04A000,"Pokémon Café ReMix",status-playable,playable,2021-08-17 20:00:04.000 -01003D200BAA2000,"Pokémon Mystery Dungeon™: Rescue Team DX",status-playable;mac-bug,playable,2024-01-21 00:16:32.000 -01008DB008C2C000,"Pokémon Shield + Pokémon Shield Expansion Pass",deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22.000 -0100ABF008968000,"Pokémon Sword + Pokémon Sword Expansion Pass",deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37.000 -01009AD008C4C000,"Pokémon: Let's Go, Pikachu! demo",slow;status-playable;demo,playable,2023-11-26 11:23:20.000 -0100000011D90000,"Pokémon™ Brilliant Diamond",gpu;status-ingame;ldn-works,ingame,2024-08-28 13:26:35.000 -010015F008C54000,"Pokémon™ HOME",Needs Update;crash;services;status-menus,menus,2020-12-06 06:01:51.000 -01001F5010DFA000,"Pokémon™ Legends: Arceus",gpu;status-ingame;Needs Update;ldn-works,ingame,2024-09-19 10:02:02.000 -01005D100807A000,"Pokémon™ Quest",status-playable,playable,2022-02-22 16:12:32.000 -0100A3D008C5C000,"Pokémon™ Scarlet",gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29.000 -01008F6008C5E000,"Pokémon™ Violet",gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48.000 -0100187003A36000,"Pokémon™: Let’s Go, Eevee!",status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04.000 -010003F003A34000,"Pokémon™: Let’s Go, Pikachu!",status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41.000 -0100B3F000BE2000,"Pokkén Tournament™ DX",status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08.000 -010030D005AE6000,"Pokkén Tournament™ DX Demo",status-playable;demo;opengl-backend-bug,playable,2022-08-10 12:03:19.000 -0100A3500B4EC000,"Polandball: Can Into Space",status-playable,playable,2020-06-25 15:13:26.000 -0100EAB00605C000,"Poly Bridge",services;status-playable,playable,2020-06-08 23:32:41.000 -010017600B180000,"Polygod",slow;status-ingame;regression,ingame,2022-08-10 14:38:14.000 -010074B00ED32000,"Polyroll",gpu;status-boots,boots,2021-07-01 16:16:50.000 -010096B01179A000,"Ponpu",status-playable,playable,2020-12-16 19:09:34.000 -01005C5011086000,"Pooplers",status-playable,playable,2020-11-02 11:52:10.000 -01007EF013CA0000,"Port Royale 4",status-menus;crash;nvdec,menus,2022-10-30 14:34:06.000 -01007BB017812000,"Portal",status-playable,playable,2024-06-12 03:48:29.000 -0100ABD01785C000,"Portal 2",gpu;status-ingame,ingame,2023-02-20 22:44:15.000 -010050D00FE0C000,"Portal Dogs",status-playable,playable,2020-09-04 12:55:46.000 -0100437004170000,"Portal Knights",ldn-untested;online;status-playable,playable,2021-05-27 19:29:04.000 -01005FC010EB2000,"Potata: Fairy Flower",nvdec;status-playable,playable,2020-06-17 09:51:34.000 -01000A4014596000,"Potion Party",status-playable,playable,2021-05-06 14:26:54.000 -0100E1E00CF1A000,"Power Rangers: Battle for the Grid",status-playable,playable,2020-06-21 16:52:42.000 -0100D1C01C194000,"Powerful Pro Baseball 2024-2025",gpu;status-ingame,ingame,2024-08-25 06:40:48.000 -01008E100E416000,"PowerSlave Exhumed",gpu;status-ingame,ingame,2023-07-31 23:19:10.000 -010054F01266C000,"Prehistoric Dude",gpu;status-ingame,ingame,2020-10-12 12:38:48.000 -,"Pretty Princess Magical Coordinate",status-playable,playable,2020-10-15 11:43:41.000 -01007F00128CC000,"Pretty Princess Party",status-playable,playable,2022-10-19 17:23:58.000 -010009300D278000,"Preventive Strike",status-playable;nvdec,playable,2022-10-06 10:55:51.000 -0100210019428000,"Prince of Persia The Lost Crown",status-ingame;crash,ingame,2024-06-08 21:31:58.000 -01007A3009184000,"Princess Peach™: Showtime!",status-playable;UE4,playable,2024-09-21 13:39:45.000 -010024701DC2E000,"Princess Peach™: Showtime! Demo",status-playable;UE4;demo,playable,2024-03-10 17:46:45.000 -01001FA01451C000,"Prinny Presents NIS Classics Volume 1: Phantom Brave: The Hermuda Triangle Remastered / Soul Nomad & the World Eaters",status-boots;crash;Needs Update,boots,2023-02-02 07:23:09.000 -01008FA01187A000,"Prinny® 2: Dawn of Operation Panties, Dood!",32-bit;status-playable,playable,2022-10-13 12:42:58.000 -01007A0011878000,"Prinny®: Can I Really Be the Hero?",32-bit;status-playable;nvdec,playable,2023-10-22 09:25:25.000 -010007F00879E000,"PriPara: All Idol Perfect Stage",status-playable,playable,2022-11-22 16:35:52.000 -010029200AB1C000,"Prison Architect: Nintendo Switch™ Edition",status-playable,playable,2021-04-10 12:27:58.000 -0100C1801B914000,"Prison City",gpu;status-ingame,ingame,2024-03-01 08:19:33.000 -0100F4800F872000,"Prison Princess",status-playable,playable,2022-11-20 15:00:25.000 -0100A9800A1B6000,"Professional Construction – The Simulation",slow;status-playable,playable,2022-08-10 15:15:45.000 -010077B00BDD8000,"Professional Farmer: Nintendo Switch™ Edition",slow;status-playable,playable,2020-12-16 13:38:19.000 -010018300C83A000,"Professor Lupo and his Horrible Pets",status-playable,playable,2020-06-12 00:08:45.000 -0100D1F0132F6000,"Professor Lupo: Ocean",status-playable,playable,2021-04-14 16:33:33.000 -0100BBD00976C000,"Project Highrise: Architect's Edition",status-playable,playable,2022-08-10 17:19:12.000 -0100ACE00DAB6000,"Project Nimbus: Complete Edition",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43.000 -01002980140F6000,"Project TRIANGLE STRATEGY™ Debut Demo",status-playable;UE4;demo,playable,2022-10-24 21:40:27.000 -0100BDB01150E000,"Project Warlock",status-playable,playable,2020-06-16 10:50:41.000 -,"Psikyo Collection Vol 1",32-bit;status-playable,playable,2020-10-11 13:18:47.000 -0100A2300DB78000,"Psikyo Collection Vol. 3",status-ingame,ingame,2021-06-07 02:46:23.000 -01009D400C4A8000,"Psikyo Collection Vol.2",32-bit;status-playable,playable,2021-06-07 03:22:07.000 -01007A200F2E2000,"Psikyo Shooting Stars Alpha",32-bit;status-playable,playable,2021-04-13 12:03:43.000 -0100D7400F2E4000,"Psikyo Shooting Stars Bravo",32-bit;status-playable,playable,2021-06-14 12:09:07.000 -0100EC100A790000,"PSYVARIAR DELTA",nvdec;status-playable,playable,2021-01-20 13:01:46.000 -,"Puchitto kurasutā",Need-Update;crash;services;status-menus,menus,2020-07-04 16:44:28.000 -0100D61010526000,"Pulstario",status-playable,playable,2022-10-06 11:02:01.000 -01009AE00B788000,"Pumped BMX Pro",status-playable;nvdec;online-broken,playable,2022-09-20 17:40:50.000 -01006C10131F6000,"Pumpkin Jack",status-playable;nvdec;UE4,playable,2022-10-13 12:52:32.000 -010016400F07E000,"Push the Crate",status-playable;nvdec;UE4,playable,2022-09-15 13:28:41.000 -0100B60010432000,"Push the Crate 2",UE4;gpu;nvdec;status-ingame,ingame,2021-06-10 14:20:01.000 -0100F1200F6D8000,"Pushy and Pully in Blockland",status-playable,playable,2020-07-04 11:44:41.000 -0100AAE00CAB4000,"Puyo Puyo Champions",online;status-playable,playable,2020-06-19 11:35:08.000 -010038E011940000,"Puyo Puyo™ Tetris® 2",status-playable;ldn-untested,playable,2023-09-26 11:35:25.000 -0100C5700ECE0000,"Puzzle & Dragons GOLD",slow;status-playable,playable,2020-05-13 15:09:34.000 -010079E01A1E0000,"Puzzle Bobble Everybubble!",audio;status-playable;ldn-works,playable,2023-06-10 03:53:40.000 -010043100F0EA000,"Puzzle Book",status-playable,playable,2020-09-28 13:26:01.000 -0100476004A9E000,"Puzzle Box Maker",status-playable;nvdec;online-broken,playable,2022-08-10 18:00:52.000 -0100A4E017372000,"Pyramid Quest",gpu;status-ingame,ingame,2023-08-16 21:14:52.000 -0100F1100E606000,"Q-YO Blaster",gpu;status-ingame,ingame,2020-06-07 22:36:53.000 -010023600AA34000,"Q.U.B.E. 2",UE4;status-playable,playable,2021-03-03 21:38:57.000 -0100A8D003BAE000,"Qbics Paint",gpu;services;status-ingame,ingame,2021-06-07 10:54:09.000 -0100BA5012E54000,"QUAKE",gpu;status-menus;crash,menus,2022-08-08 12:40:34.000 -010048F0195E8000,"Quake II",status-playable,playable,2023-08-15 03:42:14.000 -,"QuakespasmNX",status-nothing;crash;homebrew,nothing,2022-07-23 19:28:07.000 -010045101288A000,"Quantum Replica",status-playable;nvdec;UE4,playable,2022-10-30 21:17:22.000 -0100F1400BA88000,"Quarantine Circular",status-playable,playable,2021-01-20 15:24:15.000 -0100DCF00F13A000,"Queen's Quest 4: Sacred Truce",status-playable;nvdec,playable,2022-10-13 12:59:21.000 -0100492012378000,"Quell",gpu;status-ingame,ingame,2021-06-11 15:59:53.000 -01001DE005012000,"Quest of Dungeons",status-playable,playable,2021-06-07 10:29:22.000 -,"QuietMansion2",status-playable,playable,2020-09-03 14:59:35.000 -0100AF100EE76000,"Quiplash 2 InterLASHional: The Say Anything Party Game!",status-playable;online-working,playable,2022-10-19 17:43:45.000 -0100E5400BE64000,"R-Type Dimensions EX",status-playable,playable,2020-10-09 12:04:43.000 -0100F930136B6000,"R-Type® Final 2",slow;status-ingame;nvdec;UE4,ingame,2022-10-30 21:46:29.000 -01007B0014300000,"R-Type® Final 2 Demo",slow;status-ingame;nvdec;UE4;demo,ingame,2022-10-24 21:57:42.000 -0100B5A004302000,"R.B.I. Baseball 17",status-playable;online-working,playable,2022-08-11 11:55:47.000 -01005CC007616000,"R.B.I. Baseball 18",status-playable;nvdec;online-working,playable,2022-08-11 11:27:52.000 -0100FCB00BF40000,"R.B.I. Baseball 19",status-playable;nvdec;online-working,playable,2022-08-11 11:43:52.000 -010061400E7D4000,"R.B.I. Baseball 20",status-playable,playable,2021-06-15 21:16:29.000 -0100B4A0115CA000,"R.B.I. Baseball 21",status-playable;online-working,playable,2022-10-24 22:31:45.000 -01005BF00E4DE000,"Rabi-Ribi",status-playable,playable,2022-08-06 17:02:44.000 -010075D00DD04000,"Race with Ryan",UE4;gpu;nvdec;slow;status-ingame,ingame,2020-11-16 04:35:33.000 -0100B8100C54A000,"Rack N Ruin",status-playable,playable,2020-09-04 15:20:26.000 -010024400C516000,"RAD",gpu;status-menus;crash;UE4,menus,2021-11-29 02:01:56.000 -010000600CD54000,"Rad Rodgers Radical Edition",status-playable;nvdec;online-broken,playable,2022-08-10 19:57:23.000 -0100DA400E07E000,"Radiation City",status-ingame;crash,ingame,2022-09-30 11:15:04.000 -01009E40095EE000,"Radiation Island",status-ingame;opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04.000 -0100C8B00D2BE000,"Radical Rabbit Stew",status-playable,playable,2020-08-03 12:02:56.000 -0100BAD013B6E000,"Radio Commander",nvdec;status-playable,playable,2021-03-24 11:20:46.000 -01008FA00ACEC000,"RADIOHAMMER STATION",audout;status-playable,playable,2021-02-26 20:20:06.000 -01003D00099EC000,"Raging Justice",status-playable,playable,2021-06-03 14:06:50.000 -01005CD013116000,"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",status-playable,playable,2022-07-29 15:50:13.000 -01002B000D97E000,"Raiden V: Director's Cut",deadlock;status-boots;nvdec,boots,2024-07-12 07:31:46.000 -01002EE00DC02000,"Railway Empire - Nintendo Switch™ Edition",status-playable;nvdec,playable,2022-10-03 13:53:50.000 -01003C700D0DE000,"Rain City",status-playable,playable,2020-10-08 16:59:03.000 -0100BDD014232000,"Rain on Your Parade",status-playable,playable,2021-05-06 19:32:04.000 -010047600BF72000,"Rain World",status-playable,playable,2023-05-10 23:34:08.000 -01009D9010B9E000,"Rainbows, toilets & unicorns",nvdec;status-playable,playable,2020-10-03 18:08:18.000 -010010B00DDA2000,"Raji: An Ancient Epic",UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 10:05:25.000 -010042A00A9CC000,"Rapala Fishing Pro Series",nvdec;status-playable,playable,2020-12-16 13:26:53.000 -0100E73010754000,"Rascal Fight",status-playable,playable,2020-10-08 13:23:30.000 -010003F00C5C0000,"Rawr-Off",crash;nvdec;status-menus,menus,2020-07-02 00:14:44.000 -01005FF002E2A000,"Rayman® Legends Definitive Edition",status-playable;nvdec;ldn-works,playable,2023-05-27 18:33:07.000 -0100F03011616000,"Re:Turn - One Way Trip",status-playable,playable,2022-08-29 22:42:53.000 -01000B20117B8000,"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",gpu;status-boots;crash;nvdec;vulkan,boots,2023-03-07 21:27:24.000 -0100A8A00E462000,"Real Drift Racing",status-playable,playable,2020-07-25 14:31:31.000 -010048600CC16000,"Real Heroes: Firefighter",status-playable,playable,2022-09-20 18:18:44.000 -0100E64010BAA000,"realMyst: Masterpiece Edition",nvdec;status-playable,playable,2020-11-30 15:25:42.000 -01000F300F082000,"Reaper: Tale of a Pale Swordsman",status-playable,playable,2020-12-12 15:12:23.000 -0100D9B00E22C000,"Rebel Cops",status-playable,playable,2022-09-11 10:02:53.000 -0100CAA01084A000,"Rebel Galaxy Outlaw",status-playable;nvdec,playable,2022-12-01 07:44:56.000 -0100EF0015A9A000,"Record of Lodoss War-Deedlit in Wonder Labyrinth-",deadlock;status-ingame;Needs Update;Incomplete,ingame,2022-01-19 10:00:59.000 -0100CF600FF7A000,"Red Bow",services;status-ingame,ingame,2021-11-29 03:51:34.000 -0100351013A06000,"Red Colony",status-playable,playable,2021-01-25 20:44:41.000 -01007820196A6000,"Red Dead Redemption",status-playable;amd-vendor-bug,playable,2024-09-13 13:26:13.000 -0100069010592000,"Red Death",status-playable,playable,2020-08-30 13:07:37.000 -010075000C608000,"Red Faction Guerrilla Re-Mars-tered",ldn-untested;nvdec;online;status-playable,playable,2021-06-07 03:02:13.000 -01002290070E4000,"Red Game Without a Great Name",status-playable,playable,2021-01-19 21:42:35.000 -010045400D73E000,"Red Siren: Space Defense",UE4;status-playable,playable,2021-04-25 21:21:29.000 -0100D8A00E880000,"Red Wings: Aces of the Sky",status-playable,playable,2020-06-12 01:19:53.000 -01000D100DCF8000,"Redeemer: Enhanced Edition",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24.000 -0100326010B98000,"Redout: Space Assault",status-playable;UE4,playable,2022-10-19 23:04:35.000 -010007C00E558000,"Reel Fishing: Road Trip Adventure",status-playable,playable,2021-03-02 16:06:43.000 -010045D01273A000,"Reflection of Mine",audio;status-playable,playable,2020-12-17 15:06:37.000 -01003AA00F5C4000,"Refreshing Sideways Puzzle Ghost Hammer",status-playable,playable,2020-10-18 12:08:54.000 -01007A800D520000,"Refunct",UE4;status-playable,playable,2020-12-15 22:46:21.000 -0100FDF0083A6000,"Regalia: Of Men and Monarchs - Royal Edition",status-playable,playable,2022-08-11 12:24:01.000 -01005FD00F15A000,"Regions of Ruin",status-playable,playable,2020-08-05 11:38:58.000 -,"Reine des Fleurs",cpu;crash;status-boots,boots,2020-09-27 18:50:39.000 -0100F1900B144000,"REKT! High Octane Stunts",online;status-playable,playable,2020-09-28 12:33:56.000 -01002AD013C52000,"Relicta",status-playable;nvdec;UE4,playable,2022-10-31 12:48:33.000 -010095900B436000,"RemiLore",status-playable,playable,2021-06-03 18:58:15.000 -0100FBD00F5F6000,"Remothered: Broken Porcelain",UE4;gpu;nvdec;status-ingame,ingame,2021-06-17 15:13:11.000 -01001F100E8AE000,"Remothered: Tormented Fathers",status-playable;nvdec;UE4,playable,2022-10-19 23:26:50.000 -01008EE00B22C000,"Rento Fortune",ldn-untested;online;status-playable,playable,2021-01-19 19:52:21.000 -01007CC0130C6000,"Renzo Racer",status-playable,playable,2021-03-23 22:28:05.000 -01003C400AD42000,"Rescue Tale",status-playable,playable,2022-09-20 18:40:18.000 -010099A00BC1E000,"resident evil 4",status-playable;nvdec,playable,2022-11-16 21:16:04.000 -010018100CD46000,"Resident Evil 5",status-playable;nvdec,playable,2024-02-18 17:15:29.000 -01002A000CD48000,"Resident Evil 6",status-playable;nvdec,playable,2022-09-15 14:31:47.000 -0100643002136000,"Resident Evil Revelations",status-playable;nvdec;ldn-untested,playable,2022-08-11 12:44:19.000 -010095300212A000,"Resident Evil Revelations 2",status-playable;online-broken;ldn-untested,playable,2022-08-11 12:57:50.000 -0100E7F00FFB8000,"Resolutiion",crash;status-boots,boots,2021-04-25 21:57:56.000 -0100FF201568E000,"Restless Night",status-nothing;crash,nothing,2022-02-09 10:54:49.000 -0100069000078000,"Retail Interactive Display Menu (DevQuestMenu)",services;status-nothing;crash,nothing,2022-08-11 13:19:41.000 -010086E00BCB2000,"Retimed",status-playable,playable,2022-08-11 13:32:39.000 -0100F17004156000,"Retro City Rampage DX",status-playable,playable,2021-01-05 17:04:17.000 -01000ED014A2C000,"Retro Machina",status-playable;online-broken,playable,2022-10-31 13:38:58.000 -010032E00E6E2000,"Return of the Obra Dinn",status-playable,playable,2022-09-15 19:56:45.000 -010027400F708000,"Revenge of Justice",status-playable;nvdec,playable,2022-11-20 15:43:23.000 -0100E2E00EA42000,"Reventure",status-playable,playable,2022-09-15 20:07:06.000 -010071D00F156000,"REZ PLZ",status-playable,playable,2020-10-24 13:26:12.000 -0100729012D18000,"Rhythm Fighter",crash;status-nothing,nothing,2021-02-16 18:51:30.000 -010081D0100F0000,"Rhythm of the Gods",UE4;crash;status-nothing,nothing,2020-10-03 17:39:59.000 -01009D5009234000,"RICO",status-playable;nvdec;online-broken,playable,2022-08-11 20:16:40.000 -01002C700C326000,"Riddled Corpses EX",status-playable,playable,2021-06-06 16:02:44.000 -0100AC600D898000,"Rift Keeper",status-playable,playable,2022-09-20 19:48:20.000 -0100A62002042000,"RiME",UE4;crash;gpu;status-boots,boots,2020-07-20 15:52:38.000 -01006AC00EE6E000,"Rimelands: Hammer of Thor",status-playable,playable,2022-10-13 13:32:56.000 -01002FF008C24000,"RingFit Adventure",crash;services;status-nothing,nothing,2021-04-14 19:00:01.000 -010088E00B816000,"RIOT - Civil Unrest",status-playable,playable,2022-08-11 20:27:56.000 -01002A6006AA4000,"Riptide GP: Renegade",online;status-playable,playable,2021-04-13 23:33:02.000 -010065B00B0EC000,"Rise and Shine",status-playable,playable,2020-12-12 15:56:43.000 -0100E9C010EA8000,"Rise of Insanity",status-playable,playable,2020-08-30 15:42:14.000 -01006BA00E652000,"Rise: Race The Future",status-playable,playable,2021-02-27 13:29:06.000 -010020C012F48000,"Rising Hell",status-playable,playable,2022-10-31 13:54:02.000 -010076D00E4BA000,"Risk of Rain 2",status-playable;online-broken,playable,2024-03-04 17:01:05.000 -0100E8300A67A000,"RISK® Global Domination",status-playable;nvdec;online-broken,playable,2022-08-01 18:53:28.000 -010042500FABA000,"Ritual: Crown of Horns",status-playable,playable,2021-01-26 16:01:47.000 -0100BD300F0EC000,"Ritual: Sorcerer Angel",status-playable,playable,2021-03-02 13:51:19.000 -0100A7D008392000,"Rival Megagun",nvdec;online;status-playable,playable,2021-01-19 14:01:46.000 -010069C00401A000,"RIVE: Ultimate Edition",status-playable,playable,2021-03-24 18:45:55.000 -01004E700DFE6000,"River City Girls",nvdec;status-playable,playable,2020-06-10 23:44:09.000 -01002E80168F4000,"River City Girls 2",status-playable,playable,2022-12-07 00:46:27.000 -0100B2100767C000,"River City Melee Mach!!",status-playable;online-broken,playable,2022-09-20 20:51:57.000 -01008AC0115C6000,"RMX Real Motocross",status-playable,playable,2020-10-08 21:06:15.000 -010053000B986000,"Road Redemption",status-playable;online-broken,playable,2022-08-12 11:26:20.000 -010002F009A7A000,"Road to Ballhalla",UE4;status-playable,playable,2021-06-07 02:22:36.000 -0100735010F58000,"Road To Guangdong",slow;status-playable,playable,2020-10-12 12:15:32.000 -010068200C5BE000,"Roarr! Jurassic Edition",status-playable,playable,2022-10-19 23:57:45.000 -0100618004096000,"Robonauts",status-playable;nvdec,playable,2022-08-12 11:33:23.000 -010039A0117C0000,"ROBOTICS;NOTES DaSH",status-playable,playable,2020-11-16 23:09:54.000 -01002A900EE8A000,"ROBOTICS;NOTES ELITE",status-playable,playable,2020-11-26 10:28:20.000 -010044A010BB8000,"Robozarro",status-playable,playable,2020-09-03 13:33:40.000 -01000CC012D74000,"Rock 'N Racing Bundle Grand Prix & Rally",status-playable,playable,2021-01-06 20:23:57.000 -0100A1B00DB36000,"Rock of Ages 3: Make & Break",status-playable;UE4,playable,2022-10-06 12:18:29.000 -0100513005AF4000,"Rock'N Racing Off Road DX",status-playable,playable,2021-01-10 15:27:15.000 -01005EE0036EC000,"Rocket League®",gpu;status-ingame;online-broken;ldn-untested,ingame,2024-02-08 19:51:36.000 -0100E88009A34000,"Rocket Wars",status-playable,playable,2020-07-24 14:27:39.000 -0100EC7009348000,"Rogue Aces",gpu;services;status-ingame;nvdec,ingame,2021-11-30 02:18:30.000 -01009FA010848000,"Rogue Heroes: Ruins of Tasos",online;status-playable,playable,2021-04-01 15:41:25.000 -010056500AD50000,"Rogue Legacy",status-playable,playable,2020-08-10 19:17:28.000 -0100F3B010F56000,"Rogue Robots",status-playable,playable,2020-06-16 12:16:11.000 -01001CC00416C000,"Rogue Trooper Redux",status-playable;nvdec;online-broken,playable,2022-08-12 11:53:01.000 -0100C7300C0EC000,"RogueCube",status-playable,playable,2021-06-16 12:16:42.000 -0100B7200FC96000,"Roll'd",status-playable,playable,2020-07-04 20:24:01.000 -01004900113F8000,"RollerCoaster Tycoon 3 Complete Edition",32-bit;status-playable,playable,2022-10-17 14:18:01.000 -0100E3900B598000,"RollerCoaster Tycoon Adventures",nvdec;status-playable,playable,2021-01-05 18:14:18.000 -010076200CA16000,"Rolling Gunner",status-playable,playable,2021-05-26 12:54:18.000 -0100579011B40000,"Rolling Sky 2",status-playable,playable,2022-11-03 10:21:12.000 -010050400BD38000,"Roman Rumble in Las Vegum - Asterix & Obelix XXL 2",deadlock;status-ingame;nvdec,ingame,2022-07-21 17:54:14.000 -01001F600829A000,"Romancing SaGa 2",status-playable,playable,2022-08-12 12:02:24.000 -0100D0400D27A000,"Romancing SaGa 3",audio;gpu;status-ingame,ingame,2020-06-27 20:26:18.000 -010088100DD42000,"Roof Rage",status-boots;crash;regression,boots,2023-11-12 03:47:18.000 -0100F3000FA58000,"Roombo: First Blood",nvdec;status-playable,playable,2020-08-05 12:11:37.000 -0100936011556000,"Root Double -Before Crime * After Days- Xtend Edition",status-nothing;crash,nothing,2022-02-05 02:03:49.000 -010030A00DA3A000,"Root Letter: Last Answer",status-playable;vulkan-backend-bug,playable,2022-09-17 10:25:57.000 -0100AFE00DDAC000,"Royal Roads",status-playable,playable,2020-11-17 12:54:38.000 -0100E2C00B414000,"RPG Maker MV",nvdec;status-playable,playable,2021-01-05 20:12:01.000 -01005CD015986000,"rRootage Reloaded",status-playable,playable,2022-08-05 23:20:18.000 -0000000000000000,"RSDKv5u",status-ingame;homebrew,ingame,2024-04-01 16:25:34.000 -010009B00D33C000,"Rugby Challenge 4",slow;status-playable;online-broken;UE4,playable,2022-10-06 12:45:53.000 -01006EC00F2CC000,"RUINER",status-playable;UE4,playable,2022-10-03 14:11:33.000 -010074F00DE4A000,"Run the Fan",status-playable,playable,2021-02-27 13:36:28.000 -0100ADF00700E000,"Runbow",online;status-playable,playable,2021-01-08 22:47:44.000 -0100D37009B8A000,"Runbow Deluxe Edition",status-playable;online-broken,playable,2022-08-12 12:20:25.000 -010081C0191D8000,"Rune Factory 3 Special",status-playable,playable,2023-10-15 08:32:49.000 -010051D00E3A4000,"Rune Factory 4 Special",status-ingame;32-bit;crash;nvdec,ingame,2023-05-06 08:49:17.000 -010014D01216E000,"Rune Factory 5 (JP)",gpu;status-ingame,ingame,2021-06-01 12:00:36.000 -0100E21013908000,"RWBY: Grimm Eclipse - Definitive Edition",status-playable;online-broken,playable,2022-11-03 10:44:01.000 -010012C0060F0000,"RXN -Raijin-",nvdec;status-playable,playable,2021-01-10 16:05:43.000 -0100B8B012ECA000,"S.N.I.P.E.R. - Hunter Scope",status-playable,playable,2021-04-19 15:58:09.000 -010007700CFA2000,"Saboteur II: Avenging Angel",Needs Update;cpu;crash;status-nothing,nothing,2021-01-26 14:47:37.000 -0100D94012FE8000,"Saboteur SiO",slow;status-ingame,ingame,2020-12-17 16:59:49.000 -0100A5200C2E0000,"Safety First!",status-playable,playable,2021-01-06 09:05:23.000 -0100A51013530000,"SaGa Frontier Remastered",status-playable;nvdec,playable,2022-11-03 13:54:56.000 -010003A00D0B4000,"SaGa SCARLET GRACE: AMBITIONS™",status-playable,playable,2022-10-06 13:20:31.000 -01008D100D43E000,"Saints Row IV®: Re-Elected™",status-playable;ldn-untested;LAN,playable,2023-12-04 18:33:37.000 -0100DE600BEEE000,"SAINTS ROW®: THE THIRD™ - THE FULL PACKAGE",slow;status-playable;LAN,playable,2023-08-24 02:40:58.000 -01007F000EB36000,"Sakai and...",status-playable;nvdec,playable,2022-12-15 13:53:19.000 -0100B1400E8FE000,"Sakuna: Of Rice and Ruin",status-playable,playable,2023-07-24 13:47:13.000 -0100BBF0122B4000,"Sally Face",status-playable,playable,2022-06-06 18:41:24.000 -0100D250083B4000,"Salt and Sanctuary",status-playable,playable,2020-10-22 11:52:19.000 -0100CD301354E000,"Sam & Max Save the World",status-playable,playable,2020-12-12 13:11:51.000 -010014000C63C000,"Samsara: Deluxe Edition",status-playable,playable,2021-01-11 15:14:12.000 -0100ADF0096F2000,"Samurai Aces for Nintendo Switch",32-bit;status-playable,playable,2020-11-24 20:26:55.000 -01006C600E46E000,"Samurai Jack: Battle Through Time",status-playable;nvdec;UE4,playable,2022-10-06 13:33:59.000 -01002DF00F76C000,"SAMURAI SHODOWN",UE4;crash;nvdec;status-menus,menus,2020-09-06 02:17:00.000 -0100F6800F48E000,"SAMURAI SHODOWN NEOGEO COLLECTION",nvdec;status-playable,playable,2021-06-14 17:12:56.000 -0100B6501A360000,"Samurai Warrior",status-playable,playable,2023-02-27 18:42:38.000 -,"Sangoku Rensenki ~Otome no Heihou!~",gpu;nvdec;status-ingame,ingame,2020-10-17 19:13:14.000 -0100A4700BC98000,"Satsujin Tantei Jack the Ripper",status-playable,playable,2021-06-21 16:32:54.000 -0100F0000869C000,"Saturday Morning RPG",status-playable;nvdec,playable,2022-08-12 12:41:50.000 -01006EE00380C000,"Sausage Sports Club",gpu;status-ingame,ingame,2021-01-10 05:37:17.000 -0100C8300FA90000,"Save Koch",status-playable,playable,2022-09-26 17:06:56.000 -0100D6E008700000,"Save the Ninja Clan",status-playable,playable,2021-01-11 13:56:37.000 -010091000F72C000,"Save Your Nuts",status-playable;nvdec;online-broken;UE4,playable,2022-09-27 23:12:02.000 -0100AA00128BA000,"Saviors of Sapphire Wings / Stranger of Sword City Revisited",status-menus;crash,menus,2022-10-24 23:00:46.000 -01001C3012912000,"Say No! More",status-playable,playable,2021-05-06 13:43:34.000 -010010A00A95E000,"Sayonara Wild Hearts",status-playable,playable,2023-10-23 03:20:01.000 -0100ACB004006000,"Schlag den Star",slow;status-playable;nvdec,playable,2022-08-12 14:28:22.000 -0100394011C30000,"Scott Pilgrim vs. The World™: The Game – Complete Edition",services-horizon;status-nothing;crash,nothing,2024-07-12 08:13:03.000 -0100E7100B198000,"Scribblenauts Mega Pack",nvdec;status-playable,playable,2020-12-17 22:56:14.000 -01001E40041BE000,"Scribblenauts Showdown",gpu;nvdec;status-ingame,ingame,2020-12-17 23:05:53.000 -0100829018568000,"SD GUNDAM BATTLE ALLIANCE Demo",audio;status-ingame;crash;demo,ingame,2022-08-01 23:01:20.000 -010055700CEA8000,"SD GUNDAM G GENERATION CROSS RAYS",status-playable;nvdec,playable,2022-09-15 20:58:44.000 -010022900D3EC00,"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION",status-playable;nvdec,playable,2022-09-15 20:45:57.000 -0100E4A00D066000,"Sea King",UE4;nvdec;status-playable,playable,2021-06-04 15:49:22.000 -0100AFE012BA2000,"Sea of Solitude: The Director's Cut",gpu;status-ingame,ingame,2024-07-12 18:29:29.000 -01008C0016544000,"Sea of Stars",status-playable,playable,2024-03-15 20:27:12.000 -010036F0182C4000,"Sea of Stars Demo",status-playable;demo,playable,2023-02-12 15:33:56.000 -0100C2400D68C000,"SeaBed",status-playable,playable,2020-05-17 13:25:37.000 -010077100CA6E000,"Season Match Bundle",status-playable,playable,2020-10-27 16:15:22.000 -010028F010644000,"Secret Files 3",nvdec;status-playable,playable,2020-10-24 15:32:39.000 -010075D0101FA000,"Seek Hearts",status-playable,playable,2022-11-22 15:06:26.000 -0100394010844000,"Seers Isle",status-playable,playable,2020-11-17 12:28:50.000 -0100A8900AF04000,"SEGA AGES Alex Kidd in Miracle World",online;status-playable,playable,2021-05-05 16:35:47.000 -01001E600AF08000,"SEGA AGES Gain Ground",online;status-playable,playable,2021-05-05 16:16:27.000 -0100D4D00AC62000,"SEGA AGES Out Run",status-playable,playable,2021-01-11 13:13:59.000 -01005A300C9F6000,"SEGA AGES Phantasy Star",status-playable,playable,2021-01-11 12:49:48.000 -01005F600CB0E000,"SEGA AGES Puyo Puyo",online;status-playable,playable,2021-05-05 16:09:28.000 -010051F00AC5E000,"SEGA AGES Sonic The Hedgehog",slow;status-playable,playable,2023-03-05 20:16:31.000 -01000D200C614000,"SEGA AGES Sonic The Hedgehog 2",status-playable,playable,2022-09-21 20:26:35.000 -0100C3E00B700000,"SEGA AGES Space Harrier",status-playable,playable,2021-01-11 12:57:40.000 -010054400D2E6000,"SEGA AGES Virtua Racing",status-playable;online-broken,playable,2023-01-29 17:08:39.000 -01001E700AC60000,"SEGA AGES Wonder Boy: Monster Land",online;status-playable,playable,2021-05-05 16:28:25.000 -0100B3C014BDA000,"SEGA Genesis™ – Nintendo Switch Online",status-nothing;crash;regression,nothing,2022-04-11 07:27:21.000 -,"SEGA Mega Drive Classics",online;status-playable,playable,2021-01-05 11:08:00.000 -01009840046BC000,"Semispheres",status-playable,playable,2021-01-06 23:08:31.000 -0100D1800D902000,"SENRAN KAGURA Peach Ball",status-playable,playable,2021-06-03 15:12:10.000 -0100E0C00ADAC000,"SENRAN KAGURA Reflexions",status-playable,playable,2020-03-23 19:15:23.000 -01009E500D29C000,"Sentinels of Freedom",status-playable,playable,2021-06-14 16:42:19.000 -0100A5D012DAC000,"SENTRY",status-playable,playable,2020-12-13 12:00:24.000 -010059700D4A0000,"Sephirothic Stories",services;status-menus,menus,2021-11-25 08:52:17.000 -010007D00D43A000,"Serious Sam Collection",status-boots;vulkan-backend-bug,boots,2022-10-13 13:53:34.000 -0100B2C00E4DA000,"Served!",status-playable;nvdec,playable,2022-09-28 12:46:00.000 -010018400C24E000,"Seven Knights -Time Wanderer-",status-playable;vulkan-backend-bug,playable,2022-10-13 22:08:54.000 -0100D6F016676000,"Seven Pirates H",status-playable,playable,2024-06-03 14:54:12.000 -0100157004512000,"Severed",status-playable,playable,2020-12-15 21:48:48.000 -0100D5500DA94000,"Shadow Blade: Reload",nvdec;status-playable,playable,2021-06-11 18:40:43.000 -0100BE501382A000,"Shadow Gangs",cpu;gpu;status-ingame;crash;regression,ingame,2024-04-29 00:07:26.000 -0100C3A013840000,"Shadow Man Remastered",gpu;status-ingame,ingame,2024-05-20 06:01:39.000 -010073400B696000,"Shadowgate",status-playable,playable,2021-04-24 07:32:57.000 -0100371013B3E000,"Shadowrun Returns",gpu;status-ingame;Needs Update,ingame,2022-10-04 21:32:31.000 -01008310154C4000,"Shadowrun: Dragonfall - Director's Cut",gpu;status-ingame;Needs Update,ingame,2022-10-04 20:52:18.000 -0100C610154CA000,"Shadowrun: Hong Kong - Extended Edition",gpu;status-ingame;Needs Update,ingame,2022-10-04 20:53:09.000 -010000000EEF0000,"Shadows 2: Perfidia",status-playable,playable,2020-08-07 12:43:46.000 -0100AD700CBBE000,"Shadows of Adam",status-playable,playable,2021-01-11 13:35:58.000 -01002A800C064000,"Shadowverse Champions Battle",status-playable,playable,2022-10-02 22:59:29.000 -01003B90136DA000,"Shadowverse: Champion's Battle",status-nothing;crash,nothing,2023-03-06 00:31:50.000 -0100820013612000,"Shady Part of Me",status-playable,playable,2022-10-20 11:31:55.000 -0100B10002904000,"Shakedown: Hawaii",status-playable,playable,2021-01-07 09:44:36.000 -01008DA012EC0000,"Shakes on a Plane",status-menus;crash,menus,2021-11-25 08:52:25.000 -0100B4900E008000,"Shalnor Legends: Sacred Lands",status-playable,playable,2021-06-11 14:57:11.000 -010006C00CC10000,"Shanky: The Vegan`s Nightmare",status-playable,playable,2021-01-26 15:03:55.000 -0100430013120000,"Shantae",status-playable,playable,2021-05-21 04:53:26.000 -0100EFD00A4FA000,"Shantae and the Pirate's Curse",status-playable,playable,2024-04-29 17:21:57.000 -0100EB901040A000,"Shantae and the Seven Sirens",nvdec;status-playable,playable,2020-06-19 12:23:40.000 -01006A200936C000,"Shantae: Half- Genie Hero Ultimate Edition",status-playable,playable,2020-06-04 20:14:20.000 -0100ADA012370000,"Shantae: Risky's Revenge - Director's Cut",status-playable,playable,2022-10-06 20:47:39.000 -01003AB01062C000,"Shaolin vs Wutang",deadlock;status-nothing,nothing,2021-03-29 20:38:54.000 -0100B250009B9600,"Shape Of The World0",UE4;status-playable,playable,2021-03-05 16:42:28.000 -01004F50085F2000,"She Remembered Caterpillars",status-playable,playable,2022-08-12 17:45:14.000 -01000320110C2000,"She Sees Red - Interactive Movie",status-playable;nvdec,playable,2022-09-30 11:30:15.000 -01009EB004CB0000,"Shelter Generations",status-playable,playable,2021-06-04 16:52:39.000 -010020F014DBE000,"Sherlock Holmes: The Devil’s Daughter",gpu;status-ingame,ingame,2022-07-11 00:07:26.000 -0100B1000AC3A000,"Shift Happens",status-playable,playable,2021-01-05 21:24:18.000 -01000E8009E1C000,"Shift Quantum",UE4;crash;status-ingame,ingame,2020-11-06 21:54:08.000 -01000750084B2000,"Shiftlings - Enhanced Edition",nvdec;status-playable,playable,2021-03-04 13:49:54.000 -01003B0012DC2000,"Shin Megami Tensei III Nocturne HD Remaster",status-playable,playable,2022-11-03 22:53:27.000 -010045800ED1E000,"Shin Megami Tensei III NOCTURNE HD REMASTER",gpu;status-ingame;Needs Update,ingame,2022-11-03 19:57:01.000 -010063B012DC6000,"Shin Megami Tensei V",status-playable;UE4,playable,2024-02-21 06:30:07.000 -010069C01AB82000,"Shin Megami Tensei V: Vengeance",gpu;status-ingame;vulkan-backend-bug,ingame,2024-07-14 11:28:24.000 -01009050133B4000,"Shing! (サムライフォース:斬!)",status-playable;nvdec,playable,2022-10-22 00:48:54.000 -01009A5009A9E000,"Shining Resonance Refrain",status-playable;nvdec,playable,2022-08-12 18:03:01.000 -01004EE0104F6000,"Shinsekai Into the Depths™",status-playable,playable,2022-09-28 14:07:51.000 -0100C2F00A568000,"Shio",status-playable,playable,2021-02-22 16:25:09.000 -0100B2E00F13E000,"Shipped",status-playable,playable,2020-11-21 14:22:32.000 -01000E800FCB4000,"Ships",status-playable,playable,2021-06-11 16:14:37.000 -01007430122D0000,"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",status-playable;nvdec,playable,2022-10-20 11:44:36.000 -,"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",cpu;crash;status-boots,boots,2020-09-27 19:01:25.000 -01000244016BAE00,"Shiro0",gpu;status-ingame,ingame,2024-01-13 08:54:39.000 -0100CCE00DDB6000,"Shoot 1UP DX",status-playable,playable,2020-12-13 12:32:47.000 -01001180021FA000,"Shovel Knight: Specter of Torment",status-playable,playable,2020-05-30 08:34:17.000 -010057D0021E8000,"Shovel Knight: Treasure Trove",status-playable,playable,2021-02-14 18:24:39.000 -01003DD00BF0E000,"Shred! 2 - ft Sam Pilgrim",status-playable,playable,2020-05-30 14:34:09.000 -01001DE0076A4000,"Shu",nvdec;status-playable,playable,2020-05-30 09:08:59.000 -0100A7900B936000,"Shut Eye",status-playable,playable,2020-07-23 18:08:35.000 -010044500C182000,"Sid Meier’s Civilization VI",status-playable;ldn-untested,playable,2024-04-08 16:03:40.000 -01007FC00B674000,"Sigi - A Fart for Melusina",status-playable,playable,2021-02-22 16:46:58.000 -0100F1400B0D6000,"Silence",nvdec;status-playable,playable,2021-06-03 14:46:17.000 -0100A32010618000,"Silent World",status-playable,playable,2020-08-28 13:45:13.000 -010045500DFE2000,"Silk",nvdec;status-playable,playable,2021-06-10 15:34:37.000 -010016D00A964000,"SilverStarChess",status-playable,playable,2021-05-06 15:25:57.000 -0100E8C019B36000,"Simona's Requiem",gpu;status-ingame,ingame,2023-02-21 18:29:19.000 -01006FE010438000,"Sin Slayers",status-playable,playable,2022-10-20 11:53:52.000 -01002820036A8000,"Sine Mora EX",gpu;status-ingame;online-broken,ingame,2022-08-12 19:36:18.000 -0100F10012002000,"Singled Out",online;status-playable,playable,2020-08-03 13:06:18.000 -0100B8800F858000,"Sinless",nvdec;status-playable,playable,2020-08-09 20:18:55.000 -0100B16009C10000,"SINNER: Sacrifice for Redemption",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33.000 -0100E9201410E000,"Sir Lovelot",status-playable,playable,2021-04-05 16:21:46.000 -0100134011E32000,"Skate City",status-playable,playable,2022-11-04 11:37:39.000 -0100B2F008BD8000,"Skee-Ball",status-playable,playable,2020-11-16 04:44:07.000 -01001A900F862000,"Skelattack",status-playable,playable,2021-06-09 15:26:26.000 -01008E700F952000,"Skelittle: A Giant Party!",status-playable,playable,2021-06-09 19:08:34.000 -01006C000DC8A000,"Skelly Selest",status-playable,playable,2020-05-30 15:38:18.000 -0100D67006F14000,"Skies of Fury DX",status-playable,playable,2020-05-30 16:40:54.000 -010046B00DE62000,"Skullgirls 2nd Encore",status-playable,playable,2022-09-15 21:21:25.000 -0100D1100BF9C000,"Skulls of the Shogun: Bone-A-Fide Edition",status-playable,playable,2020-08-31 18:58:12.000 -0100D7B011654000,"Skully",status-playable;nvdec;UE4,playable,2022-10-06 13:52:59.000 -010083100B5CA000,"Sky Force Anniversary",status-playable;online-broken,playable,2022-08-12 20:50:07.000 -01006FE005B6E000,"Sky Force Reloaded",status-playable,playable,2021-01-04 20:06:57.000 -010003F00CC98000,"Sky Gamblers - Afterburner",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55.000 -010093D00AC38000,"Sky Gamblers: Storm Raiders",gpu;audio;status-ingame;32-bit,ingame,2022-08-12 21:13:36.000 -010068200E96E000,"Sky Gamblers: Storm Raiders 2",gpu;status-ingame,ingame,2022-09-13 12:24:04.000 -01004F0010A02000,"Sky Racket",status-playable,playable,2020-09-07 12:22:24.000 -0100DDB004F30000,"Sky Ride",status-playable,playable,2021-02-22 16:53:07.000 -0100C5700434C000,"Sky Rogue",status-playable,playable,2020-05-30 08:26:28.000 -0100C52011460000,"Sky: Children of the Light",cpu;status-nothing;online-broken,nothing,2023-02-23 10:57:10.000 -010041C01014E000,"Skybolt Zack",status-playable,playable,2021-04-12 18:28:00.000 -0100A0A00D1AA000,"SKYHILL",status-playable,playable,2021-03-05 15:19:11.000 -,"Skylanders Imaginators",crash;services;status-boots,boots,2020-05-30 18:49:18.000 -010021A00ABEE000,"SKYPEACE",status-playable,playable,2020-05-29 14:14:30.000 -0100EA400BF44000,"SkyScrappers",status-playable,playable,2020-05-28 22:11:25.000 -0100F3C00C400000,"SkyTime",slow;status-ingame,ingame,2020-05-30 09:24:51.000 -01003AD00DEAE000,"SlabWell: The Quest For Kaktun's Alpaca",status-playable,playable,2021-02-22 17:02:51.000 -0100224004004000,"Slain: Back from Hell",status-playable,playable,2022-08-12 23:36:19.000 -010026300BA4A000,"Slay the Spire",status-playable,playable,2023-01-20 15:09:26.000 -0100501006494000,"Slayaway Camp: Butcher's Cut",status-playable;opengl-backend-bug,playable,2022-08-12 23:44:05.000 -01004E900EDDA000,"Slayin 2",gpu;status-ingame,ingame,2024-04-19 16:15:26.000 -01004AC0081DC000,"Sleep Tight",gpu;status-ingame;UE4,ingame,2022-08-13 00:17:32.000 -0100F4500AA4E000,"Slice, Dice & Rice",online;status-playable,playable,2021-02-22 17:44:23.000 -010010D011E1C000,"Slide Stars",status-menus;crash,menus,2021-11-25 08:53:43.000 -0100112003B8A000,"Slime-san",status-playable,playable,2020-05-30 16:15:12.000 -01002AA00C974000,"SMASHING THE BATTLE",status-playable,playable,2021-06-11 15:53:57.000 -0100C9100B06A000,"SmileBASIC 4",gpu;status-menus,menus,2021-07-29 17:35:59.000 -0100207007EB2000,"Smoke And Sacrifice",status-playable,playable,2022-08-14 12:38:27.000 -01009790186FE000,"SMURFS KART",status-playable,playable,2023-10-18 00:55:00.000 -0100F2800D46E000,"Snack World The Dungeon Crawl Gold",gpu;slow;status-ingame;nvdec;audout,ingame,2022-05-01 21:12:44.000 -0100C0F0020E8000,"Snake Pass",status-playable;nvdec;UE4,playable,2022-01-03 04:31:52.000 -010075A00BA14000,"Sniper Elite 3 Ultimate Edition",status-playable;ldn-untested,playable,2024-04-18 07:47:49.000 -010007B010FCC000,"Sniper Elite 4",gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15.000 -0100BB000A3AA000,"Sniper Elite V2 Remastered",slow;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13.000 -01008E20047DC000,"Snipperclips Plus: Cut It Out, Together!",status-playable,playable,2023-02-14 20:20:13.000 -0100704000B3A000,"Snipperclips™ – Cut it out, together!",status-playable,playable,2022-12-05 12:44:55.000 -01004AB00AEF8000,"SNK 40th ANNIVERSARY COLLECTION",status-playable,playable,2022-08-14 13:33:15.000 -010027F00AD6C000,"SNK HEROINES Tag Team Frenzy",status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25.000 -01008DA00CBBA000,"Snooker 19",status-playable;nvdec;online-broken;UE4,playable,2022-09-11 17:43:22.000 -010045300516E000,"Snow Moto Racing Freedom",gpu;status-ingame;vulkan-backend-bug,ingame,2022-08-15 16:05:14.000 -0100BE200C34A000,"Snowboarding The Next Phase",nvdec;status-playable,playable,2021-02-23 12:56:58.000 -0100FBD013AB6000,"SnowRunner",services;status-boots;crash,boots,2023-10-07 00:01:16.000 -010017B012AFC000,"Soccer Club Life: Playing Manager",gpu;status-ingame,ingame,2022-10-25 11:59:22.000 -0100B5000E05C000,"Soccer Pinball",UE4;gpu;status-ingame,ingame,2021-06-15 20:56:51.000 -010011A00A9A8000,"Soccer Slammers",status-playable,playable,2020-05-30 07:48:14.000 -010095C00F9DE000,"Soccer, Tactics & Glory",gpu;status-ingame,ingame,2022-09-26 17:15:58.000 -0100590009C38000,"SOL DIVIDE -SWORD OF DARKNESS- for Nintendo Switch",32-bit;status-playable,playable,2021-06-09 14:13:03.000 -0100A290048B0000,"Soldam: Drop, Connect, Erase",status-playable,playable,2020-05-30 09:18:54.000 -010008600D1AC000,"Solo: Islands of the Heart",gpu;status-ingame;nvdec,ingame,2022-09-11 17:54:43.000 -01009EE00E91E000,"Some Distant Memory",status-playable,playable,2022-09-15 21:48:19.000 -01004F401BEBE000,"Song of Nunu: A League of Legends Story",status-ingame,ingame,2024-07-12 18:53:44.000 -0100E5400BF94000,"Songbird Symphony",status-playable,playable,2021-02-27 02:44:04.000 -010031D00A604000,"Songbringer",status-playable,playable,2020-06-22 10:42:02.000 -0000000000000000,"Sonic 1 (2013)",status-ingame;crash;homebrew,ingame,2024-04-06 18:31:20.000 -0000000000000000,"Sonic 2 (2013)",status-ingame;crash;homebrew,ingame,2024-04-01 16:25:30.000 -0000000000000000,"Sonic A.I.R",status-ingame;homebrew,ingame,2024-04-01 16:25:32.000 -0000000000000000,"Sonic CD",status-ingame;crash;homebrew,ingame,2024-04-01 16:25:31.000 -010040E0116B8000,"Sonic Colors: Ultimate",status-playable,playable,2022-11-12 21:24:26.000 -01001270012B6000,"SONIC FORCES™",status-playable,playable,2024-07-28 13:11:21.000 -01004AD014BF0000,"Sonic Frontiers",gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53.000 -01009AA000FAA000,"Sonic Mania",status-playable,playable,2020-06-08 17:30:57.000 -01009FB016286000,"Sonic Origins",status-ingame;crash,ingame,2024-06-02 07:20:15.000 -01008F701C074000,"SONIC SUPERSTARS",gpu;status-ingame;nvdec,ingame,2023-10-28 17:48:07.000 -010088801C150000,"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",status-playable,playable,2024-08-20 13:26:56.000 -01005EA01C0FC000,"SONIC X SHADOW GENERATIONS",status-ingame;crash,ingame,2025-01-07 04:20:45.000 -010064F00C212000,"Soul Axiom Rebooted",nvdec;slow;status-ingame,ingame,2020-09-04 12:41:01.000 -0100F2100F0B2000,"Soul Searching",status-playable,playable,2020-07-09 18:39:07.000 -01008F2005154000,"South Park™: The Fractured but Whole™ - Standard Edition",slow;status-playable;online-broken,playable,2024-07-08 17:47:28.000 -0100B9F00C162000,"Space Blaze",status-playable,playable,2020-08-30 16:18:05.000 -010005500E81E000,"Space Cows",UE4;crash;status-menus,menus,2020-06-15 11:33:20.000 -0100707011722000,"Space Elite Force",status-playable,playable,2020-11-27 15:21:05.000 -010047B010260000,"Space Pioneer",status-playable,playable,2022-10-20 12:24:37.000 -010010A009830000,"Space Ribbon",status-playable,playable,2022-08-15 17:17:10.000 -0000000000000000,"SpaceCadetPinball",status-ingame;homebrew,ingame,2024-04-18 19:30:04.000 -0100D9B0041CE000,"Spacecats with Lasers",status-playable,playable,2022-08-15 17:22:44.000 -010034800FB60000,"Spaceland",status-playable,playable,2020-11-01 14:31:56.000 -010028D0045CE000,"Sparkle 2",status-playable,playable,2020-10-19 11:51:39.000 -01000DC007E90000,"Sparkle Unleashed",status-playable,playable,2021-06-03 14:52:15.000 -0100E4F00AE14000,"Sparkle ZERO",gpu;slow;status-ingame,ingame,2020-03-23 18:19:18.000 -01007ED00C032000,"Sparklite",status-playable,playable,2022-08-06 11:35:41.000 -0100E6A009A26000,"Spartan",UE4;nvdec;status-playable,playable,2021-03-05 15:53:19.000 -010020500E7A6000,"Speaking Simulator",status-playable,playable,2020-10-08 13:00:39.000 -01008B000A5AE000,"Spectrum",status-playable,playable,2022-08-16 11:15:59.000 -0100F18010BA0000,"Speed 3: Grand Prix",status-playable;UE4,playable,2022-10-20 12:32:31.000 -010040F00AA9A000,"Speed Brawl",slow;status-playable,playable,2020-09-18 22:08:16.000 -01000540139F6000,"Speed Limit",gpu;status-ingame,ingame,2022-09-02 18:37:40.000 -010061F013A0E000,"Speed Truck Racing",status-playable,playable,2022-10-20 12:57:04.000 -0100E74007EAC000,"Spellspire",status-playable,playable,2022-08-16 11:21:21.000 -010021F004270000,"Spelunker Party!",services;status-boots,boots,2022-08-16 11:25:49.000 -0100710013ABA000,"Spelunky",status-playable,playable,2021-11-20 17:45:03.000 -0100BD500BA94000,"Sphinx and the Cursed Mummy",gpu;status-ingame;32-bit;opengl,ingame,2024-05-20 06:00:51.000 -010092A0102AE000,"Spider Solitaire",status-playable,playable,2020-12-16 16:19:30.000 -010076D0122A8000,"Spinch",status-playable,playable,2024-07-12 19:02:10.000 -01001E40136FE000,"Spinny's Journey",status-ingame;crash,ingame,2021-11-30 03:39:44.000 -010023E008702000,"Spiral Splatter",status-playable,playable,2020-06-04 14:03:57.000 -0100D1B00B6FA000,"Spirit Hunter: Death Mark",status-playable,playable,2020-12-13 10:56:25.000 -0100FAE00E19A000,"Spirit Hunter: NG",32-bit;status-playable,playable,2020-12-17 20:38:47.000 -01005E101122E000,"Spirit of the North",status-playable;UE4,playable,2022-09-30 11:40:47.000 -01000AC00F5EC000,"Spirit Roots",nvdec;status-playable,playable,2020-07-10 13:33:32.000 -0100BD400DC52000,"Spiritfarer",gpu;status-ingame,ingame,2022-10-06 16:31:38.000 -01009D60080B4000,"SpiritSphere DX",status-playable,playable,2021-07-03 23:37:49.000 -010042700E3FC000,"Spitlings",status-playable;online-broken,playable,2022-10-06 16:42:39.000 -01003BC0000A0000,"Splatoon™ 2",status-playable;ldn-works;LAN,playable,2024-07-12 19:11:15.000 -0100C2500FC20000,"Splatoon™ 3",status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11.000 -0100BA0018500000,"Splatoon™ 3: Splatfest World Premiere",gpu;status-ingame;online-broken;demo,ingame,2022-09-19 03:17:12.000 -010062800D39C000,"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34.000 -01009FB0172F4000,"SpongeBob SquarePants: The Cosmic Shake",gpu;status-ingame;UE4,ingame,2023-08-01 19:29:53.000 -010097C01336A000,"Spooky Chase",status-playable,playable,2022-11-04 12:17:44.000 -0100C6100D75E000,"Spooky Ghosts Dot Com",status-playable,playable,2021-06-15 15:16:11.000 -0100DE9005170000,"Sports Party",nvdec;status-playable,playable,2021-03-05 13:40:42.000 -0100E04009BD4000,"Spot The Difference",status-playable,playable,2022-08-16 11:49:52.000 -010052100D1B4000,"Spot The Differences: Party!",status-playable,playable,2022-08-16 11:55:26.000 -01000E6015350000,"Spy Alarm",services;status-ingame,ingame,2022-12-09 10:12:51.000 -01005D701264A000,"SpyHack",status-playable,playable,2021-04-15 10:53:51.000 -010077B00E046000,"Spyro™ Reignited Trilogy",status-playable;nvdec;UE4,playable,2022-09-11 18:38:33.000 -0100085012A0E000,"Squeakers",status-playable,playable,2020-12-13 12:13:05.000 -010009300D31C000,"Squidgies Takeover",status-playable,playable,2020-07-20 22:28:08.000 -0100FCD0102EC000,"Squidlit",status-playable,playable,2020-08-06 12:38:32.000 -0100EBF00E702000,"STAR OCEAN First Departure R",nvdec;status-playable,playable,2021-07-05 19:29:16.000 -010065301A2E0000,"STAR OCEAN THE SECOND STORY R",status-ingame;crash,ingame,2024-06-01 02:39:59.000 -010060D00F658000,"Star Renegades",nvdec;status-playable,playable,2020-12-11 12:19:23.000 -0100D7000AE6A000,"Star Story: The Horizon Escape",status-playable,playable,2020-08-11 22:31:38.000 -01009DF015776000,"Star Trek Prodigy: Supernova",status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50.000 -0100BD100FFBE000,"STAR WARS™ Episode I Racer",slow;status-playable;nvdec,playable,2022-10-03 16:08:36.000 -0100BB500EACA000,"STAR WARS™ Jedi Knight II: Jedi Outcast™",gpu;status-ingame,ingame,2022-09-15 22:51:00.000 -01008CA00FAE8000,"STAR WARS™ Jedi Knight: Jedi Academy",gpu;status-boots,boots,2021-06-16 12:35:30.000 -01006DA00DEAC000,"Star Wars™ Pinball",status-playable;online-broken,playable,2022-09-11 18:53:31.000 -0100FA10115F8000,"STAR WARS™ Republic Commando™",gpu;status-ingame;32-bit,ingame,2023-10-31 15:57:17.000 -010040701B948000,"STAR WARS™: Battlefront Classic Collection",gpu;status-ingame;vulkan,ingame,2024-07-12 19:24:21.000 -0100854015868000,"STAR WARS™: Knights of the Old Republic™",gpu;deadlock;status-boots,boots,2024-02-12 10:13:51.000 -0100153014544000,"STAR WARS™: The Force Unleashed™",status-playable,playable,2024-05-01 17:41:28.000 -01005EB00EA10000,"Star-Crossed Myth - The Department of Wishes -",gpu;status-ingame,ingame,2021-06-04 19:34:36.000 -0100E6B0115FC000,"Star99",status-menus;online,menus,2021-11-26 14:18:51.000 -01002100137BA000,"Stardash",status-playable,playable,2021-01-21 16:31:19.000 -0100E65002BB8000,"Stardew Valley",status-playable;online-broken;ldn-untested,playable,2024-02-14 03:11:19.000 -01002CC003FE6000,"Starlink: Battle for Atlas™ Digital Edition",services-horizon;status-nothing;crash;Needs Update,nothing,2024-05-05 17:25:11.000 -010098E010FDA000,"Starlit Adventures Golden Stars",status-playable,playable,2020-11-21 12:14:43.000 -01001BB00AC26000,"STARSHIP AVENGER Operation: Take Back Earth",status-playable,playable,2021-01-12 15:52:55.000 -010000700A572000,"State of Anarchy: Master of Mayhem",nvdec;status-playable,playable,2021-01-12 19:00:05.000 -0100844004CB6000,"State of Mind",UE4;crash;status-boots,boots,2020-06-22 22:17:50.000 -0100616009082000,"STAY",crash;services;status-boots,boots,2021-04-23 14:24:52.000 -0100B61009C60000,"STAY COOL, KOBAYASHI-SAN!: A RIVER CITY RANSOM STORY",status-playable,playable,2021-01-26 17:37:28.000 -01008010118CC000,"Steam Prison",nvdec;status-playable,playable,2021-04-01 15:34:11.000 -0100AE100DAFA000,"Steam Tactics",status-playable,playable,2022-10-06 16:53:45.000 -01004DD00C87A000,"Steamburg",status-playable,playable,2021-01-13 08:42:01.000 -01009320084A4000,"SteamWorld Dig",status-playable,playable,2024-08-19 12:12:23.000 -0100CA9002322000,"SteamWorld Dig 2",status-playable,playable,2022-12-21 19:25:42.000 -0100F6D00D83E000,"SteamWorld Quest: Hand of Gilgamech",nvdec;status-playable,playable,2020-11-09 13:10:04.000 -01001C6014772000,"Steel Assault",status-playable,playable,2022-12-06 14:48:30.000 -010042800B880000,"STEINS;GATE ELITE",status-playable,playable,2020-08-04 07:33:32.000 -0100CB400E9BC000,"STEINS;GATE: My Darling's Embrace",status-playable;nvdec,playable,2022-11-20 16:48:34.000 -01002DE01043E000,"Stela",UE4;status-playable,playable,2021-06-15 13:28:34.000 -01005A700C954000,"Stellar Interface",status-playable,playable,2022-10-20 13:44:33.000 -0100BC800EDA2000,"STELLATUM",gpu;status-playable,playable,2021-03-07 16:30:23.000 -0100775004794000,"Steredenn: Binary Stars",status-playable,playable,2021-01-13 09:19:42.000 -0100AE0006474000,"Stern Pinball Arcade",status-playable,playable,2022-08-16 14:24:41.000 -0100E24006FA8000,"Stikbold! A Dodgeball Adventure DELUXE",status-playable,playable,2021-01-11 20:12:54.000 -010077B014518000,"Stitchy in Tooki Trouble",status-playable,playable,2021-05-06 16:25:53.000 -010070D00F640000,"STONE",status-playable;UE4,playable,2022-09-30 11:53:32.000 -010074400F6A8000,"Stories Untold",status-playable;nvdec,playable,2022-12-22 01:08:46.000 -010040D00BCF4000,"Storm Boy",status-playable,playable,2022-10-20 14:15:06.000 -0100B2300B932000,"Storm In A Teacup",gpu;status-ingame,ingame,2021-11-06 02:03:19.000 -0100D5D00DAF2000,"Story of a Gladiator",status-playable,playable,2020-07-29 15:08:18.000 -010017301007E000,"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",status-playable,playable,2021-03-18 11:42:19.000 -0100ED400EEC2000,"STORY OF SEASONS: Friends of Mineral Town",status-playable,playable,2022-10-03 16:40:31.000 -010078D00E8F4000,"Stranded Sails - Explorers of the Cursed Islands",slow;status-playable;nvdec;UE4,playable,2022-09-16 11:58:38.000 -01000A6013F86000,"Strange Field Football",status-playable,playable,2022-11-04 12:25:57.000 -0100DD600DD48000,"Stranger Things 3: The Game",status-playable,playable,2021-01-11 17:44:09.000 -0100D7E011C64000,"Strawberry Vinegar",status-playable;nvdec,playable,2022-12-05 16:25:40.000 -010075101EF84000,"Stray",status-ingame;crash,ingame,2025-01-07 04:03:00.000 -0100024008310000,"Street Fighter 30th Anniversary Collection",status-playable;online-broken;ldn-partial,playable,2022-08-20 16:50:47.000 -010012400D202000,"Street Outlaws: The List",nvdec;status-playable,playable,2021-06-11 12:15:32.000 -0100888011CB2000,"Street Power Soccer",UE4;crash;status-boots,boots,2020-11-21 12:28:57.000 -0100EC9010258000,"Streets of Rage 4",nvdec;online;status-playable,playable,2020-07-07 21:21:22.000 -0100BDE012928000,"Strife: Veteran Edition",gpu;status-ingame,ingame,2022-01-15 05:10:42.000 -010039100DACC000,"Strike Force - War on Terror",status-menus;crash;Needs Update,menus,2021-11-24 08:08:20.000 -010038A00E6C6000,"Strike Force Kitty",nvdec;status-playable,playable,2020-07-29 16:22:15.000 -010072500D52E000,"Strike Suit Zero: Director's Cut",crash;status-boots,boots,2021-04-23 17:15:14.000 -0100FF5005B76000,"STRIKERS1945 for Nintendo Switch",32-bit;status-playable,playable,2021-06-03 19:35:04.000 -0100720008ED2000,"STRIKERS1945 Ⅱ for Nintendo Switch",32-bit;status-playable,playable,2021-06-03 19:43:00.000 -0100681011B56000,"Struggling",status-playable,playable,2020-10-15 20:37:03.000 -0100AF000B4AE000,"Stunt Kite Party",nvdec;status-playable,playable,2021-01-25 17:16:56.000 -0100C5500E7AE000,"STURMWIND EX",audio;32-bit;status-playable,playable,2022-09-16 12:01:39.000 -,"Subarashiki Kono Sekai -Final Remix-",services;slow;status-ingame,ingame,2020-02-10 16:21:51.000 -010001400E474000,"Subdivision Infinity DX",UE4;crash;status-boots,boots,2021-03-03 14:26:46.000 -0100E6400BCE8000,"Sublevel Zero Redux",status-playable,playable,2022-09-16 12:30:03.000 -0100EDA00D866000,"Submerged",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01.000 -0100429011144000,"Subnautica",status-playable;vulkan-backend-bug,playable,2022-11-04 13:07:29.000 -010014C011146000,"Subnautica: Below Zero",status-playable,playable,2022-12-23 14:15:13.000 -0100BF9012AC6000,"Suguru Nature",crash;status-ingame,ingame,2021-07-29 11:36:27.000 -01005CD00A2A2000,"Suicide Guy",status-playable,playable,2021-01-26 13:13:54.000 -0100DE000C2E4000,"Suicide Guy: Sleepin' Deeply",status-ingame;Needs More Attention,ingame,2022-09-20 23:45:25.000 -01003D50126A4000,"Sumire",status-playable,playable,2022-11-12 13:40:43.000 -0100A130109B2000,"Summer in Mara",nvdec;status-playable,playable,2021-03-06 14:10:38.000 -01004E500DB9E000,"Summer Sweetheart",status-playable;nvdec,playable,2022-09-16 12:51:46.000 -0100BFE014476000,"Sunblaze",status-playable,playable,2022-11-12 13:59:23.000 -01002D3007962000,"Sundered: Eldritch Edition",gpu;status-ingame,ingame,2021-06-07 11:46:00.000 -0100F7000464A000,"Super Beat Sports™",status-playable;ldn-untested,playable,2022-08-16 16:05:50.000 -010051A00D716000,"Super Blood Hockey",status-playable,playable,2020-12-11 20:01:41.000 -01007AD00013E000,"Super Bomberman R",status-playable;nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14.000 -0100B87017D94000,"SUPER BOMBERMAN R 2",deadlock;status-boots,boots,2023-09-29 13:19:51.000 -0100D9B00DB5E000,"Super Cane Magic ZERO",status-playable,playable,2022-09-12 15:33:46.000 -010065F004E5E000,"Super Chariot",status-playable,playable,2021-06-03 13:19:01.000 -0100E5E00C464000,"SUPER DRAGON BALL HEROES WORLD MISSION",status-playable;nvdec;online-broken,playable,2022-08-17 12:56:30.000 -010023100B19A000,"Super Dungeon Tactics",status-playable,playable,2022-10-06 17:40:40.000 -010056800B534000,"Super Inefficient Golf",status-playable;UE4,playable,2022-08-17 15:53:45.000 -010015700D5DC000,"Super Jumpy Ball",status-playable,playable,2020-07-04 18:40:36.000 -0100196009998000,"Super Kickers League Ultimate",status-playable,playable,2021-01-26 13:36:48.000 -01003FB00C5A8000,"Super Kirby Clash™",status-playable;ldn-works,playable,2024-07-30 18:21:55.000 -010000D00F81A000,"Super Korotama",status-playable,playable,2021-06-06 19:06:22.000 -01003E300FCAE000,"Super Loop Drive",status-playable;nvdec;UE4,playable,2022-09-22 10:58:05.000 -054507E0B7552000,"Super Mario 64",status-ingame;homebrew,ingame,2024-03-20 16:57:27.000 -0100277011F1A000,"Super Mario Bros.™ 35",status-menus;online-broken,menus,2022-08-07 16:27:25.000 -010015100B514000,"Super Mario Bros.™ Wonder",status-playable;amd-vendor-bug,playable,2024-09-06 13:21:21.000 -01009B90006DC000,"Super Mario Maker™ 2",status-playable;online-broken;ldn-broken,playable,2024-08-25 11:05:19.000 -0100000000010000,"Super Mario Odyssey™",status-playable;nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34.000 -010036B0034E4000,"Super Mario Party™",gpu;status-ingame;Needs Update;ldn-works,ingame,2024-06-21 05:10:16.000 -0100BC0018138000,"Super Mario RPG™",gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42.000 -0000000000000000,"Super Mario World",status-boots;homebrew,boots,2024-06-13 01:40:31.000 -010049900F546000,"Super Mario™ 3D All-Stars",services-horizon;slow;status-ingame;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16.000 -010028600EBDA000,"Super Mario™ 3D World + Bowser’s Fury",status-playable;ldn-works,playable,2024-07-31 10:45:37.000 -01004F8006A78000,"Super Meat Boy",services;status-playable,playable,2020-04-02 23:10:07.000 -01009C200D60E000,"Super Meat Boy Forever",gpu;status-boots,boots,2021-04-26 14:25:39.000 -0100BDD00EC5C000,"Super Mega Space Blaster Special Turbo",online;status-playable,playable,2020-08-06 12:13:25.000 -010031F019294000,"Super Monkey Ball Banana Rumble",status-playable,playable,2024-06-28 10:39:18.000 -0100B2A00E1E0000,"Super Monkey Ball: Banana Blitz HD",status-playable;online-broken,playable,2022-09-16 13:16:25.000 -01006D000D2A0000,"Super Mutant Alien Assault",status-playable,playable,2020-06-07 23:32:45.000 -01004D600AC14000,"Super Neptunia RPG",status-playable;nvdec,playable,2022-08-17 16:38:52.000 -01008D300C50C000,"Super Nintendo Entertainment System™ - Nintendo Switch Online",status-playable,playable,2021-01-05 00:29:48.000 -0100284007D6C000,"Super One More Jump",status-playable,playable,2022-08-17 16:47:47.000 -01001F90122B2000,"Super Punch Patrol",status-playable,playable,2024-07-12 19:49:02.000 -0100331005E8E000,"Super Putty Squad",gpu;status-ingame;32-bit,ingame,2024-04-29 15:51:54.000 -,"SUPER ROBOT WARS T",online;status-playable,playable,2021-03-25 11:00:40.000 -,"SUPER ROBOT WARS V",online;status-playable,playable,2020-06-23 12:56:37.000 -,"SUPER ROBOT WARS X",online;status-playable,playable,2020-08-05 19:18:51.000 -01004CF00A60E000,"Super Saurio Fly",nvdec;status-playable,playable,2020-08-06 13:12:14.000 -010039700D200000,"Super Skelemania",status-playable,playable,2020-06-07 22:59:50.000 -01006A800016E000,"Super Smash Bros.™ Ultimate",gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21.000 -0100D61012270000,"Super Soccer Blast",gpu;status-ingame,ingame,2022-02-16 08:39:12.000 -0100A9300A4AE000,"Super Sportmatchen",status-playable,playable,2022-08-19 12:34:40.000 -0100FB400F54E000,"Super Street: Racer",status-playable;UE4,playable,2022-09-16 13:43:14.000 -010000500DB50000,"Super Tennis Blast",status-playable,playable,2022-08-19 16:20:48.000 -0100C6800D770000,"Super Toy Cars 2",gpu;regression;status-ingame,ingame,2021-03-02 20:15:15.000 -010035B00B3F0000,"Super Volley Blast",status-playable,playable,2022-08-19 18:14:40.000 -0100FF60051E2000,"Superbeat: Xonic EX",status-ingame;crash;nvdec,ingame,2022-08-19 18:54:40.000 -0100630010252000,"SuperEpic: The Entertainment War",status-playable,playable,2022-10-13 23:02:48.000 -01001A500E8B4000,"SUPERHOT",status-playable,playable,2021-05-05 19:51:30.000 -010075701153A000,"Superliminal",status-playable,playable,2020-09-03 13:20:50.000 -0100C01012654000,"Supermarket Shriek",status-playable,playable,2022-10-13 23:19:20.000 -0100A6E01201C000,"Supraland",status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11.000 -010029A00AEB0000,"Survive! MR.CUBE",status-playable,playable,2022-10-20 14:44:47.000 -01005AB01119C000,"SUSHI REVERSI",status-playable,playable,2021-06-11 19:26:58.000 -0100DDD0085A4000,"Sushi Striker™: The Way of Sushido",nvdec;status-playable,playable,2020-06-26 20:49:11.000 -0100D6D00EC2C000,"Sweet Witches",status-playable;nvdec,playable,2022-10-20 14:56:37.000 -010049D00C8B0000,"Swimsanity!",status-menus;online,menus,2021-11-26 14:27:16.000 -01005DF00DC26000,"SWORD ART ONLINE: FATAL BULLET Complete Edition",UE4;gpu;online;status-ingame,ingame,2021-06-09 16:58:50.000 -01001B600D1D6000,"SWORD ART ONLINE: Hollow Realization Deluxe Edition",status-playable;nvdec,playable,2022-08-19 19:19:15.000 -01000D70049BE000,"Sword of the Guardian",status-playable,playable,2020-07-16 12:24:39.000 -0100E4701355C000,"Sword of the Necromancer",status-ingame;crash,ingame,2022-12-10 01:28:39.000 -01004BB00421E000,"Syberia 1 & 2",status-playable,playable,2021-12-24 12:06:25.000 -010028C003FD6000,"Syberia 2",gpu;status-ingame,ingame,2022-08-24 12:43:03.000 -0100CBE004E6C000,"Syberia 3",nvdec;status-playable,playable,2021-01-25 16:15:12.000 -010007300C482000,"Sydney Hunter and the Curse of the Mayan",status-playable,playable,2020-06-15 12:15:57.000 -0100D8400DAF0000,"SYNAPTIC DRIVE",online;status-playable,playable,2020-09-07 13:44:05.000 -01009E700F448000,"Synergia",status-playable,playable,2021-04-06 17:58:04.000 -01009BF00E7D2000,"SYNTHETIK: Ultimate",gpu;status-ingame;crash,ingame,2022-08-30 03:19:25.000 -010015B00BB00000,"Table Top Racing: World Tour - Nitro Edition",status-playable,playable,2020-04-05 23:21:30.000 -01000F20083A8000,"Tactical Mind",status-playable,playable,2021-01-25 18:05:00.000 -0100BD700F5F0000,"Tactical Mind 2",status-playable,playable,2020-07-01 23:11:07.000 -0100E12013C1A000,"Tactics Ogre: Reborn",status-playable;vulkan-backend-bug,playable,2024-04-09 06:21:35.000 -01007C7006AEE000,"Tactics V: Obsidian Brigade""""",status-playable,playable,2021-02-28 15:09:42.000 -01002C000B552000,"Taiko no Tatsujin: Drum 'n' Fun!",status-playable;online-broken;ldn-broken,playable,2023-05-20 15:10:12.000 -0100BCA0135A0000,"Taiko no Tatsujin: Rhythm Festival",status-playable,playable,2023-11-13 13:16:34.000 -0100DD6012644000,"Taiko no Tatsujin: Rhythmic Adventure Pack",status-playable,playable,2020-12-03 07:28:26.000 -0100346017304000,"Taiko Risshiden V DX",status-nothing;crash,nothing,2022-06-06 16:25:31.000 -010040A00EA26000,"Taimumari: Complete Edition",status-playable,playable,2022-12-06 13:34:49.000 -0100F0C011A68000,"Tales from the Borderlands",status-playable;nvdec,playable,2022-10-25 18:44:14.000 -0100408007078000,"Tales of the Tiny Planet",status-playable,playable,2021-01-25 15:47:41.000 -01002C0008E52000,"Tales of Vesperia™: Definitive Edition",status-playable,playable,2024-09-28 03:20:47.000 -010012800EE3E000,"Tamashii",status-playable,playable,2021-06-10 15:26:20.000 -010008A0128C4000,"Tamiku",gpu;status-ingame,ingame,2021-06-15 20:06:55.000 -010048F007ADE000,"Tangledeep",crash;status-boots,boots,2021-01-05 04:08:41.000 -01007DB010D2C000,"TaniNani",crash;kernel;status-nothing,nothing,2021-04-08 03:06:44.000 -0100E06012BB4000,"Tank Mechanic Simulator",status-playable,playable,2020-12-11 15:10:45.000 -01007A601318C000,"Tanuki Justice",status-playable;opengl,playable,2023-02-21 18:28:10.000 -01004DF007564000,"Tanzia",status-playable,playable,2021-06-07 11:10:25.000 -01002D4011208000,"Task Force Kampas",status-playable,playable,2020-11-30 14:44:15.000 -0100B76011DAA000,"Taxi Chaos",slow;status-playable;online-broken;UE4,playable,2022-10-25 19:13:00.000 -0100F43011E5A000,"Tcheco in the Castle of Lucio",status-playable,playable,2020-06-27 13:35:43.000 -010092B0091D0000,"Team Sonic Racing",status-playable;online-broken;ldn-works,playable,2024-02-05 15:05:27.000 -0100FE701475A000,"Teenage Mutant Ninja Turtles: Shredder's Revenge",deadlock;status-boots;crash,boots,2024-09-28 09:31:39.000 -01005CF01E784000,"Teenage Mutant Ninja Turtles: Splintered Fate",status-playable,playable,2024-08-03 13:50:42.000 -0100FDB0154E4000,"Teenage Mutant Ninja Turtles: The Cowabunga Collection",status-playable,playable,2024-01-22 19:39:04.000 -010021100DF22000,"Telling Lies",status-playable,playable,2020-10-23 21:14:51.000 -0100C8B012DEA000,"Temtem",status-menus;online-broken,menus,2022-12-17 17:36:11.000 -0100B2600A398000,"TENGAI for Nintendo Switch",32-bit;status-playable,playable,2020-11-25 19:52:26.000 -0100D7A005DFC000,"Tennis",status-playable,playable,2020-06-01 20:50:36.000 -01002970080AA000,"Tennis in the Face",status-playable,playable,2022-08-22 14:10:54.000 -0100092006814000,"Tennis World Tour",status-playable;online-broken,playable,2022-08-22 14:27:10.000 -0100950012F66000,"Tennis World Tour 2",status-playable;online-broken,playable,2022-10-14 10:43:16.000 -0100E46006708000,"Terraria",status-playable;online-broken,playable,2022-09-12 16:14:57.000 -010070C00FB56000,"TERROR SQUID",status-playable;online-broken,playable,2023-10-30 22:29:29.000 -010043700EB68000,"TERRORHYTHM (TRRT)",status-playable,playable,2021-02-27 13:18:14.000 -0100FBC007EAE000,"Tesla vs Lovecraft",status-playable,playable,2023-11-21 06:19:36.000 -01005C8005F34000,"Teslagrad",status-playable,playable,2021-02-23 14:41:02.000 -01006F701507A000,"Tested on Humans: Escape Room",status-playable,playable,2022-11-12 14:42:52.000 -0100671016432000,"TETRA for Nintendo Switch™ International Edition",status-playable,playable,2020-06-26 20:49:55.000 -01004E500A15C000,"TETRA's Escape",status-playable,playable,2020-06-03 18:21:14.000 -010040600C5CE000,"Tetris 99 Retail Bundle",gpu;status-ingame;online-broken;ldn-untested,ingame,2024-05-02 16:36:41.000 -0100EC000D39A000,"Tetsumo Party",status-playable,playable,2020-06-09 22:39:55.000 -01008ED0087A4000,"The Adventure Pals",status-playable,playable,2022-08-22 14:48:52.000 -0100137010152000,"The Adventures of 00 Dilly®",status-playable,playable,2020-12-30 19:32:29.000 -01003B400A00A000,"The Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",status-playable;nvdec,playable,2022-09-17 11:07:56.000 -010035C00A4BC000,"The Adventures of Elena Temple",status-playable,playable,2020-06-03 23:15:35.000 -010045A00E038000,"The Alliance Alive HD Remastered",nvdec;status-playable,playable,2021-03-07 15:43:45.000 -010079A0112BE000,"The Almost Gone",status-playable,playable,2020-07-05 12:33:07.000 -0100CD500DDAE000,"The Bard's Tale ARPG: Remastered and Resnarkled",gpu;status-ingame;nvdec;online-working,ingame,2024-07-18 12:52:01.000 -01001E50141BC000,"The Battle Cats Unite!",deadlock;status-ingame,ingame,2021-12-14 21:38:34.000 -010089600E66A000,"The Big Journey",status-playable,playable,2022-09-16 14:03:08.000 -010021C000B6A000,"The Binding of Isaac: Afterbirth+",status-playable,playable,2021-04-26 14:11:56.000 -0100A5A00B2AA000,"The Bluecoats North & South",nvdec;status-playable,playable,2020-12-10 21:22:29.000 -010062500BFC0000,"The Book of Unwritten Tales 2",status-playable,playable,2021-06-09 14:42:53.000 -01002A2004530000,"The Bridge",status-playable,playable,2020-06-03 13:53:26.000 -01008D700AB14000,"The Bug Butcher",status-playable,playable,2020-06-03 12:02:04.000 -01001B40086E2000,"The Bunker",status-playable;nvdec,playable,2022-09-16 14:24:05.000 -010069100B7F0000,"The Caligula Effect: Overdose",UE4;gpu;status-ingame,ingame,2021-01-04 11:07:50.000 -010066800E9F8000,"The Childs Sight",status-playable,playable,2021-06-11 19:04:56.000 -0100B7C01169C000,"The Coma 2: Vicious Sisters",gpu;status-ingame,ingame,2020-06-20 12:51:51.000 -010033100691A000,"The Coma: Recut",status-playable,playable,2020-06-03 15:11:23.000 -01004170113D4000,"The Complex",status-playable;nvdec,playable,2022-09-28 14:35:41.000 -01000F20102AC000,"The Copper Canyon Dixie Dash",status-playable;UE4,playable,2022-09-29 11:42:29.000 -01000850037C0000,"The Count Lucanor",status-playable;nvdec,playable,2022-08-22 15:26:37.000 -0100EBA01548E000,"The Cruel King and the Great Hero",gpu;services;status-ingame,ingame,2022-12-02 07:02:08.000 -010051800E922000,"The Dark Crystal: Age of Resistance Tactics",status-playable,playable,2020-08-11 13:43:41.000 -01003DE00918E000,"The Darkside Detective",status-playable,playable,2020-06-03 22:16:18.000 -01000A10041EA000,"The Elder Scrolls V: Skyrim",gpu;status-ingame;crash,ingame,2024-07-14 03:21:31.000 -01004A9006B84000,"The End Is Nigh",status-playable,playable,2020-06-01 11:26:45.000 -0100CA100489C000,"The Escapists 2",nvdec;status-playable,playable,2020-09-24 12:31:31.000 -01001B700BA7C000,"The Escapists: Complete Edition",status-playable,playable,2021-02-24 17:50:31.000 -0100C2E0129A6000,"The Executioner",nvdec;status-playable,playable,2021-01-23 00:31:28.000 -01006050114D4000,"The Experiment: Escape Room",gpu;status-ingame,ingame,2022-09-30 13:20:35.000 -0100B5900DFB2000,"The Eyes of Ara",status-playable,playable,2022-09-16 14:44:06.000 -01002DD00AF9E000,"The Fall",gpu;status-ingame,ingame,2020-05-31 23:31:16.000 -01003E5002320000,"The Fall Part 2: Unbound",status-playable,playable,2021-11-06 02:18:08.000 -0100CDC00789E000,"The Final Station",status-playable;nvdec,playable,2022-08-22 15:54:39.000 -010098800A1E4000,"The First Tree",status-playable,playable,2021-02-24 15:51:05.000 -0100C38004DCC000,"The Flame In The Flood: Complete Edition",gpu;status-ingame;nvdec;UE4,ingame,2022-08-22 16:23:49.000 -010007700D4AC000,"The Forbidden Arts",status-playable,playable,2021-01-26 16:26:24.000 -010030700CBBC000,"The friends of Ringo Ishikawa",status-playable,playable,2022-08-22 16:33:17.000 -01006350148DA000,"The Gardener and the Wild Vines",gpu;status-ingame,ingame,2024-04-29 16:32:10.000 -0100B13007A6A000,"The Gardens Between",status-playable,playable,2021-01-29 16:16:53.000 -010036E00FB20000,"The Great Ace Attorney Chronicles",status-playable,playable,2023-06-22 21:26:29.000 -010007B012514000,"The Great Perhaps",status-playable,playable,2020-09-02 15:57:04.000 -01003B300E4AA000,"THE GRISAIA TRILOGY",status-playable,playable,2021-01-31 15:53:59.000 -01001950137D8000,"The Hong Kong Massacre",crash;status-ingame,ingame,2021-01-21 12:06:56.000 -01004AD00E094000,"The House of Da Vinci",status-playable,playable,2021-01-05 14:17:19.000 -01005A80113D2000,"The House of Da Vinci 2",status-playable,playable,2020-10-23 20:47:17.000 -0100E24004510000,"The Hunt - Championship Edition",status-menus;32-bit,menus,2022-07-21 20:21:25.000 -01008940086E0000,"The Infectious Madness of Doctor Dekker",status-playable;nvdec,playable,2022-08-22 16:45:01.000 -0100B0B00B318000,"The Inner World",nvdec;status-playable,playable,2020-06-03 21:22:29.000 -0100A9D00B31A000,"The Inner World - The Last Wind Monk",nvdec;status-playable,playable,2020-11-16 13:09:40.000 -0100AE5003EE6000,"The Jackbox Party Pack",status-playable;online-working,playable,2023-05-28 09:28:40.000 -010015D003EE4000,"The Jackbox Party Pack 2",status-playable;online-working,playable,2022-08-22 18:23:40.000 -0100CC80013D6000,"The Jackbox Party Pack 3",slow;status-playable;online-working,playable,2022-08-22 18:41:06.000 -0100E1F003EE8000,"The Jackbox Party Pack 4",status-playable;online-working,playable,2022-08-22 18:56:34.000 -010052C00B184000,"The Journey Down: Chapter One",nvdec;status-playable,playable,2021-02-24 13:32:41.000 -01006BC00B188000,"The Journey Down: Chapter Three",nvdec;status-playable,playable,2021-02-24 13:45:27.000 -01009AB00B186000,"The Journey Down: Chapter Two",nvdec;status-playable,playable,2021-02-24 13:32:13.000 -010020500BD98000,"The King's Bird",status-playable,playable,2022-08-22 19:07:46.000 -010031B00DB34000,"the Knight & the Dragon",gpu;status-ingame,ingame,2023-08-14 10:31:43.000 -01007AF012E16000,"The Language Of Love",Needs Update;crash;status-nothing,nothing,2020-12-03 17:54:00.000 -010079C017F5E000,"The Lara Croft Collection",services-horizon;deadlock;status-nothing,nothing,2024-07-12 22:45:51.000 -0100449011506000,"The Last Campfire",status-playable,playable,2022-10-20 16:44:19.000 -0100AAD011592000,"The Last Dead End",gpu;status-ingame;UE4,ingame,2022-10-20 16:59:44.000 -0100AC800D022000,"THE LAST REMNANT Remastered",status-playable;nvdec;UE4,playable,2023-02-09 17:24:44.000 -0100B1900F0B6000,"The Legend of Dark Witch",status-playable,playable,2020-07-12 15:18:33.000 -01001920156C2000,"The Legend of Heroes: Trails from Zero",gpu;status-ingame;mac-bug,ingame,2024-09-14 21:41:41.000 -01005420101DA000,"The Legend of Heroes: Trails of Cold Steel III",status-playable,playable,2020-12-16 10:59:18.000 -01009B101044C000,"The Legend of Heroes: Trails of Cold Steel III Demo",demo;nvdec;status-playable,playable,2021-04-23 01:07:32.000 -0100D3C010DE8000,"The Legend of Heroes: Trails of Cold Steel IV",nvdec;status-playable,playable,2021-04-23 14:01:05.000 -01005E5013862000,"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",status-nothing;crash,nothing,2021-09-30 14:41:07.000 -01008CF01BAAC000,"The Legend of Zelda Echoes of Wisdom",status-playable;nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01.000 -0100509005AF2000,"The Legend of Zelda: Breath of the Wild Demo",status-ingame;demo,ingame,2022-12-24 05:02:58.000 -01007EF00011E000,"The Legend of Zelda™: Breath of the Wild",gpu;status-ingame;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46.000 -01006BB00C6F0000,"The Legend of Zelda™: Link’s Awakening",gpu;status-ingame;nvdec;mac-bug,ingame,2023-08-09 17:37:40.000 -01002DA013484000,"The Legend of Zelda™: Skyward Sword HD",gpu;status-ingame,ingame,2024-06-14 16:48:29.000 -0100F2C0115B6000,"The Legend of Zelda™: Tears of the Kingdom",gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30.000 -0100A4400BE74000,"The LEGO Movie 2 Videogame",status-playable,playable,2023-03-01 11:23:37.000 -010064B00B95C000,"The Liar Princess and the Blind Prince",audio;slow;status-playable,playable,2020-06-08 21:23:28.000 -0100735004898000,"The Lion's Song",status-playable,playable,2021-06-09 15:07:16.000 -0100A5000D590000,"The Little Acre",nvdec;status-playable,playable,2021-03-02 20:22:27.000 -01007A700A87C000,"The Long Dark",status-playable,playable,2021-02-21 14:19:52.000 -010052B003A38000,"The Long Reach",nvdec;status-playable,playable,2021-02-24 14:09:48.000 -01003C3013300000,"The Long Return",slow;status-playable,playable,2020-12-10 21:05:10.000 -0100CE1004E72000,"The Longest Five Minutes",gpu;status-boots,boots,2023-02-19 18:33:11.000 -0100F3D0122C2000,"The Longing",gpu;status-ingame,ingame,2022-11-12 15:00:58.000 -010085A00C5E8000,"The Lord of the Rings: Adventure Card Game - Definitive Edition",status-menus;online-broken,menus,2022-09-16 15:19:32.000 -01008A000A404000,"The Lost Child",nvdec;status-playable,playable,2021-02-23 15:44:20.000 -0100BAB00A116000,"The Low Road",status-playable,playable,2021-02-26 13:23:22.000 -,"The Mahjong",Needs Update;crash;services;status-nothing,nothing,2021-04-01 22:06:22.000 -0100DC300AC78000,"The Messenger",status-playable,playable,2020-03-22 13:51:37.000 -0100DEC00B2BC000,"The Midnight Sanctuary",status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32.000 -0100F1B00B456000,"The MISSING: J.J. Macfield and the Island of Memories",status-playable,playable,2022-08-22 19:36:18.000 -010033300AC1A000,"The Mooseman",status-playable,playable,2021-02-24 12:58:57.000 -01005E9016BDE000,"The movie The Quintessential Bride -Five Memories Spent with You-",status-playable,playable,2023-12-14 14:43:43.000 -0100496004194000,"The Mummy Demastered",status-playable,playable,2021-02-23 13:11:27.000 -01004C500AAF6000,"The Mystery of the Hudson Case",status-playable,playable,2020-06-01 11:03:36.000 -01000CF0084BC000,"The Next Penelope",status-playable,playable,2021-01-29 16:26:11.000 -01001FB00E386000,"THE NINJA SAVIORS Return of the Warriors",online;status-playable,playable,2021-03-25 23:48:07.000 -0100B080184BC000,"The Oregon Trail",gpu;status-ingame,ingame,2022-11-25 16:11:49.000 -0100B0101265C000,"The Otterman Empire",UE4;gpu;status-ingame,ingame,2021-06-17 12:27:15.000 -01000BC01801A000,"The Outbound Ghost",status-nothing,nothing,2024-03-02 17:10:58.000 -0100626011656000,"The Outer Worlds",gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32.000 -01005C500D690000,"The Park",UE4;crash;gpu;status-ingame,ingame,2020-12-18 12:50:07.000 -010050101127C000,"The Persistence",nvdec;status-playable,playable,2021-06-06 19:15:40.000 -0100CD300880E000,"The Pinball Arcade",status-playable;online-broken,playable,2022-08-22 19:49:46.000 -01006BD018B54000,"The Plucky Squire",status-ingame;crash,ingame,2024-09-27 22:32:33.000 -0100E6A00B960000,"The Princess Guide",status-playable,playable,2021-02-24 14:23:34.000 -010058A00BF1C000,"The Raven Remastered",status-playable;nvdec,playable,2022-08-22 20:02:47.000 -0100EB100D17C000,"The Red Strings Club",status-playable,playable,2020-06-01 10:51:18.000 -010079400BEE0000,"The Room",status-playable,playable,2021-04-14 18:57:05.000 -010033100EE12000,"The Ryuo's Work is Never Done!",status-playable,playable,2022-03-29 00:35:37.000 -01002BA00C7CE000,"The Savior's Gang",gpu;status-ingame;nvdec;UE4,ingame,2022-09-21 12:37:48.000 -0100F3200E7CA000,"The Settlers®: New Allies",deadlock;status-nothing,nothing,2023-10-25 00:18:05.000 -0100F89003BC8000,"The Sexy Brutale",status-playable,playable,2021-01-06 17:48:28.000 -01001FF00BEE8000,"The Shapeshifting Detective",nvdec;status-playable,playable,2021-01-10 13:10:49.000 -010028D00BA1A000,"The Sinking City",status-playable;nvdec;UE4,playable,2022-09-12 16:41:55.000 -010041C00A68C000,"The Spectrum Retreat",status-playable,playable,2022-10-03 18:52:40.000 -010029300E5C4000,"The Stanley Parable: Ultra Deluxe",gpu;status-ingame,ingame,2024-07-12 23:18:26.000 -010007F00AF56000,"The Station",status-playable,playable,2022-09-28 18:15:27.000 -0100858010DC4000,"the StoryTale",status-playable,playable,2022-09-03 13:00:25.000 -0100AA400A238000,"The Stretchers™",status-playable;nvdec;UE4,playable,2022-09-16 15:40:58.000 -0100E3100450E000,"The Strike - Championship Edition",gpu;status-boots;32-bit,boots,2022-12-09 15:58:16.000 -0100EF200DA60000,"The Survivalists",status-playable,playable,2020-10-27 15:51:13.000 -010040D00B7CE000,"The Swindle",status-playable;nvdec,playable,2022-08-22 20:53:52.000 -010037D00D568000,"The Swords of Ditto: Mormo's Curse",slow;status-ingame,ingame,2020-12-06 00:13:12.000 -01009B300D76A000,"The Tiny Bang Story",status-playable,playable,2021-03-05 15:39:05.000 -0100C3300D8C4000,"The Touryst",status-ingame;crash,ingame,2023-08-22 01:32:38.000 -010047300EBA6000,"The Tower of Beatrice",status-playable,playable,2022-09-12 16:51:42.000 -010058000A576000,"The Town of Light: Deluxe Edition",gpu;status-playable,playable,2022-09-21 12:51:34.000 -0100B0E0086F6000,"The Trail: Frontier Challenge",slow;status-playable,playable,2022-08-23 15:10:51.000 -0100EA100F516000,"The Turing Test",status-playable;nvdec,playable,2022-09-21 13:24:07.000 -010064E00ECBC000,"The Unicorn Princess",status-playable,playable,2022-09-16 16:20:56.000 -0100BCF00E970000,"The Vanishing of Ethan Carter",UE4;status-playable,playable,2021-06-09 17:14:47.000 -0100D0500B0A6000,"The VideoKid",nvdec;status-playable,playable,2021-01-06 09:28:24.000 -,"The Voice",services;status-menus,menus,2020-07-28 20:48:49.000 -010056E00B4F4000,"The Walking Dead: A New Frontier",status-playable,playable,2022-09-21 13:40:48.000 -010099100B6AC000,"The Walking Dead: Season Two",status-playable,playable,2020-08-09 12:57:06.000 -010029200B6AA000,"The Walking Dead: The Complete First Season",status-playable,playable,2021-06-04 13:10:56.000 -010060F00AA70000,"The Walking Dead: The Final Season - Season Pass",status-playable;online-broken,playable,2022-08-23 17:22:32.000 -010095F010568000,"The Wanderer: Frankenstein's Creature",status-playable,playable,2020-07-11 12:49:51.000 -01008B200FC6C000,"The Wardrobe: Even Better Edition",status-playable,playable,2022-09-16 19:14:55.000 -01003D100E9C6000,"The Witcher 3: Wild Hunt",status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51.000 -0100B1300FF08000,"The Wonderful 101: Remastered",slow;status-playable;nvdec,playable,2022-09-30 13:49:28.000 -0100C1500B82E000,"The World Ends with You®: Final Remix",status-playable;ldn-untested,playable,2022-07-09 01:11:21.000 -0100E6200D56E000,"The World Next Door",status-playable,playable,2022-09-21 14:15:23.000 -010075900CD1C000,"Thea: The Awakening",status-playable,playable,2021-01-18 15:08:47.000 -010081B01777C000,"THEATRHYTHM FINAL BAR LINE",status-ingame;Incomplete,ingame,2024-08-05 14:24:55.000 -01001C2010D08000,"They Bleed Pixels",gpu;status-ingame,ingame,2024-08-09 05:52:18.000 -0100768010970000,"They Came From the Sky",status-playable,playable,2020-06-12 16:38:19.000 -0100CE700F62A000,"Thief of Thieves: Season One",status-nothing;crash;loader-allocator,nothing,2021-11-03 07:16:30.000 -0100CE400E34E000,"Thief Simulator",status-playable,playable,2023-04-22 04:39:11.000 -01009BD003B36000,"Thimbleweed Park",status-playable,playable,2022-08-24 11:15:31.000 -0100F2300A5DA000,"Think of the Children",deadlock;status-menus,menus,2021-11-23 09:04:45.000 -0100066004D68000,"This Is the Police",status-playable,playable,2022-08-24 11:37:05.000 -01004C100A04C000,"This is the Police 2",status-playable,playable,2022-08-24 11:49:17.000 -0100C7C00F77C000,"This Strange Realm Of Mine",status-playable,playable,2020-08-28 12:07:24.000 -0100A8700BC2A000,"This War of Mine: Complete Edition",gpu;status-ingame;32-bit;nvdec,ingame,2022-08-24 12:00:44.000 -0100AC500EEE8000,"THOTH",status-playable,playable,2020-08-05 18:35:28.000 -0100E910103B4000,"Thronebreaker: The Witcher Tales",nvdec;status-playable,playable,2021-06-03 16:40:15.000 -01006F6002840000,"Thumper",gpu;status-ingame,ingame,2024-08-12 02:41:07.000 -01000AC011588000,"Thy Sword",status-ingame;crash,ingame,2022-09-30 16:43:14.000 -0100E9000C42C000,"Tick Tock: A Tale for Two",status-menus,menus,2020-07-14 14:49:38.000 -0100B6D00C2DE000,"Tied Together",nvdec;status-playable,playable,2021-04-10 14:03:46.000 -010074500699A000,"Timber Tennis: Versus",online;status-playable,playable,2020-10-03 17:07:15.000 -01004C500B698000,"Time Carnage",status-playable,playable,2021-06-16 17:57:28.000 -0100F770045CA000,"Time Recoil",status-playable,playable,2022-08-24 12:44:03.000 -0100DD300CF3A000,"Timespinner",gpu;status-ingame,ingame,2022-08-09 09:39:11.000 -0100393013A10000,"Timothy and the Mysterious Forest",gpu;slow;status-ingame,ingame,2021-06-02 00:42:11.000 -0100F7C010AF6000,"Tin & Kuna",status-playable,playable,2020-11-17 12:16:12.000 -0100DF900FC52000,"Tiny Gladiators",status-playable,playable,2020-12-14 00:09:43.000 -010061A00AE64000,"Tiny Hands Adventure",status-playable,playable,2022-08-24 16:07:48.000 -010074800741A000,"TINY METAL",UE4;gpu;nvdec;status-ingame,ingame,2021-03-05 17:11:57.000 -01005D0011A40000,"Tiny Racer",status-playable,playable,2022-10-07 11:13:03.000 -010002401AE94000,"Tiny Thor",gpu;status-ingame,ingame,2024-07-26 08:37:35.000 -0100A73016576000,"Tinykin",gpu;status-ingame,ingame,2023-06-18 12:12:24.000 -0100FE801185E000,"Titan Glory",status-boots,boots,2022-10-07 11:36:40.000 -0100605008268000,"Titan Quest",status-playable;nvdec;online-broken,playable,2022-08-19 21:54:15.000 -01009C400E93E000,"Titans Pinball",slow;status-playable,playable,2020-06-09 16:53:52.000 -010019500DB1E000,"Tlicolity Eyes - twinkle showtime -",gpu;status-boots,boots,2021-05-29 19:43:44.000 -010036700F83E000,"To the Moon",status-playable,playable,2021-03-20 15:33:38.000 -010014900865A000,"Toast Time: Smash Up!",crash;services;status-menus,menus,2020-04-03 12:26:59.000 -0100A4A00B2E8000,"Toby: The Secret Mine",nvdec;status-playable,playable,2021-01-06 09:22:33.000 -0100B5200BB7C000,"ToeJam & Earl: Back in the Groove!",status-playable,playable,2021-01-06 22:56:58.000 -0100B5E011920000,"TOHU",slow;status-playable,playable,2021-02-08 15:40:44.000 -0100F3400A432000,"Toki",nvdec;status-playable,playable,2021-01-06 19:59:23.000 -01003E500F962000,"Tokyo Dark – Remembrance –",nvdec;status-playable,playable,2021-06-10 20:09:49.000 -0100A9400C9C2000,"Tokyo Mirage Sessions™ #FE Encore",32-bit;status-playable;nvdec,playable,2022-07-07 09:41:07.000 -0100E2E00CB14000,"Tokyo School Life",status-playable,playable,2022-09-16 20:25:54.000 -010024601BB16000,"Tomb Raider I-III Remastered Starring Lara Croft",gpu;status-ingame;opengl,ingame,2024-09-27 12:32:04.000 -0100D7F01E49C000,"Tomba! Special Edition",services-horizon;status-nothing,nothing,2024-09-15 21:59:54.000 -0100D400100F8000,"Tonight We Riot",status-playable,playable,2021-02-26 15:55:09.000 -0100CC00102B4000,"Tony Hawk's™ Pro Skater™ 1 + 2",gpu;status-ingame;Needs Update,ingame,2024-09-24 08:18:14.000 -010093F00E818000,"Tools Up!",crash;status-ingame,ingame,2020-07-21 12:58:17.000 -01009EA00E2B8000,"Toon War",status-playable,playable,2021-06-11 16:41:53.000 -010090400D366000,"Torchlight II",status-playable,playable,2020-07-27 14:18:37.000 -010075400DDB8000,"Torchlight III",status-playable;nvdec;online-broken;UE4,playable,2022-10-14 22:20:17.000 -01007AF011732000,"TORICKY-S",deadlock;status-menus,menus,2021-11-25 08:53:36.000 -0100BEB010F2A000,"Torn Tales: Rebound Edition",status-playable,playable,2020-11-01 14:11:59.000 -0100A64010D48000,"Total Arcade Racing",status-playable,playable,2022-11-12 15:12:48.000 -0100512010728000,"Totally Reliable Delivery Service",status-playable;online-broken,playable,2024-09-27 19:32:22.000 -01004E900B082000,"Touhou Genso Wanderer Reloaded",gpu;status-ingame;nvdec,ingame,2022-08-25 11:57:36.000 -010010F004022000,"Touhou Kobuto V: Burst Battle",status-playable,playable,2021-01-11 15:28:58.000 -0100E9D00D6C2000,"TOUHOU Spell Bubble",status-playable,playable,2020-10-18 11:43:43.000 -0100F7B00595C000,"Tower Of Babel",status-playable,playable,2021-01-06 17:05:15.000 -010094600DC86000,"Tower Of Time",gpu;nvdec;status-ingame,ingame,2020-07-03 11:11:12.000 -0100A1C00359C000,"TowerFall",status-playable,playable,2020-05-16 18:58:07.000 -0100F6200F77E000,"Towertale",status-playable,playable,2020-10-15 13:56:58.000 -010049E00BA34000,"Townsmen - A Kingdom Rebuilt",status-playable;nvdec,playable,2022-10-14 22:48:59.000 -01009FF00A160000,"Toy Stunt Bike: Tiptop's Trials",UE4;status-playable,playable,2021-04-10 13:56:34.000 -0100192010F5A000,"Tracks - Toybox Edition",UE4;crash;status-nothing,nothing,2021-02-08 15:19:18.000 -0100BCA00843A000,"Trailblazers",status-playable,playable,2021-03-02 20:40:49.000 -010009F004E66000,"Transcripted",status-playable,playable,2022-08-25 12:13:11.000 -01005E500E528000,"TRANSFORMERS: BATTLEGROUNDS",online;status-playable,playable,2021-06-17 18:08:19.000 -0100BE500BEA2000,"Transistor",status-playable,playable,2020-10-22 11:28:02.000 -0100A8D010BFA000,"Travel Mosaics 2: Roman Holiday",status-playable,playable,2021-05-26 12:33:16.000 -0100102010BFC000,"Travel Mosaics 3: Tokyo Animated",status-playable,playable,2021-05-26 12:06:27.000 -010096D010BFE000,"Travel Mosaics 4: Adventures In Rio",status-playable,playable,2021-05-26 11:54:58.000 -01004C4010C00000,"Travel Mosaics 5: Waltzing Vienna",status-playable,playable,2021-05-26 11:49:35.000 -0100D520119D6000,"Travel Mosaics 6: Christmas Around the World",status-playable,playable,2021-05-26 00:52:47.000 -01000BD0119DE000,"Travel Mosaics 7: Fantastic Berlin",status-playable,playable,2021-05-22 18:37:34.000 -01007DB00A226000,"Travel Mosaics: A Paris Tour",status-playable,playable,2021-05-26 12:42:26.000 -010011600C946000,"Travis Strikes Again: No More Heroes",status-playable;nvdec;UE4,playable,2022-08-25 12:36:38.000 -01006EB004B0E000,"Treadnauts",status-playable,playable,2021-01-10 14:57:41.000 -0100D7800E9E0000,"Trials of Mana",status-playable;UE4,playable,2022-09-30 21:50:37.000 -0100E1D00FBDE000,"Trials of Mana Demo",status-playable;nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02.000 -01003E800A102000,"Trials Rising Standard Edition",status-playable,playable,2024-02-11 01:36:39.000 -0100CC80140F8000,"TRIANGLE STRATEGY™",gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37.000 -010064E00A932000,"Trine 2: Complete Story",nvdec;status-playable,playable,2021-06-03 11:45:20.000 -0100DEC00A934000,"Trine 3: The Artifacts of Power",ldn-untested;online;status-playable,playable,2021-06-03 12:01:24.000 -010055E00CA68000,"Trine 4: The Nightmare Prince",gpu;status-nothing,nothing,2025-01-07 05:47:46.000 -0100D9000A930000,"Trine Enchanted Edition",ldn-untested;nvdec;status-playable,playable,2021-06-03 11:28:15.000 -01002D7010A54000,"Trinity Trigger",status-ingame;crash,ingame,2023-03-03 03:09:09.000 -0100868013FFC000,"TRIVIAL PURSUIT Live! 2",status-boots,boots,2022-12-19 00:04:33.000 -0100F78002040000,"Troll and I™",gpu;nvdec;status-ingame,ingame,2021-06-04 16:58:50.000 -0100145011008000,"Trollhunters: Defenders of Arcadia",gpu;nvdec;status-ingame,ingame,2020-11-30 13:27:09.000 -0100FBE0113CC000,"Tropico 6 - Nintendo Switch™ Edition",status-playable;nvdec;UE4,playable,2022-10-14 23:21:03.000 -0100D06018DCA000,"Trouble Witches Final! Episode 01: Daughters of Amalgam",status-playable,playable,2024-04-08 15:08:11.000 -0100B5B0113CE000,"Troubleshooter",UE4;crash;status-nothing,nothing,2020-10-04 13:46:50.000 -010089600FB72000,"Trover Saves The Universe",UE4;crash;status-nothing,nothing,2020-10-03 10:25:27.000 -0100E6300D448000,"Trüberbrook",status-playable,playable,2021-06-04 17:08:00.000 -0100F2100AA5C000,"Truck and Logistics Simulator",status-playable,playable,2021-06-11 13:29:08.000 -0100CB50107BA000,"Truck Driver",status-playable;online-broken,playable,2022-10-20 17:42:33.000 -0100E75004766000,"True Fear: Forsaken Souls - Part 1",nvdec;status-playable,playable,2020-12-15 21:39:52.000 -010099900CAB2000,"TT Isle of Man",nvdec;status-playable,playable,2020-06-22 12:25:13.000 -010000400F582000,"TT Isle of Man Ride on the Edge 2",gpu;status-ingame;nvdec;online-broken,ingame,2022-09-30 22:13:05.000 -0100752011628000,"TTV2",status-playable,playable,2020-11-27 13:21:36.000 -0100AFE00452E000,"Tumblestone",status-playable,playable,2021-01-07 17:49:20.000 -010085500D5F6000,"Turok",gpu;status-ingame,ingame,2021-06-04 13:16:24.000 -0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;status-ingame;vulkan,ingame,2022-09-12 17:50:05.000 -010004B0130C8000,"Turrican Flashback",status-playable;audout,playable,2021-08-30 10:07:56.000 -0100B1F0090F2000,"TurtlePop: Journey to Freedom",status-playable,playable,2020-06-12 17:45:39.000 -0100047009742000,"Twin Robots: Ultimate Edition",status-playable;nvdec,playable,2022-08-25 14:24:03.000 -010031200E044000,"Two Point Hospital™",status-ingame;crash;nvdec,ingame,2022-09-22 11:22:23.000 -010038400C2FE000,"TY the Tasmanian Tiger™ HD",32-bit;crash;nvdec;status-menus,menus,2020-12-17 21:15:00.000 -010073A00C4B2000,"Tyd wag vir Niemand",status-playable,playable,2021-03-02 13:39:53.000 -0100D5B00D6DA000,"Type:Rider",status-playable,playable,2021-01-06 13:12:55.000 -010040D01222C000,"UBERMOSH: SANTICIDE",status-playable,playable,2020-11-27 15:05:01.000 -0100992010BF8000,"Ubongo",status-playable,playable,2021-02-04 21:15:01.000 -010079000B56C000,"UglyDolls: An Imperfect Adventure",status-playable;nvdec;UE4,playable,2022-08-25 14:42:16.000 -010048901295C000,"Ultimate Fishing Simulator",status-playable,playable,2021-06-16 18:38:23.000 -01009D000FAE0000,"Ultimate Racing 2D",status-playable,playable,2020-08-05 17:27:09.000 -010045200A1C2000,"Ultimate Runner",status-playable,playable,2022-08-29 12:52:40.000 -01006B601117E000,"Ultimate Ski Jumping 2020",online;status-playable,playable,2021-03-02 20:54:11.000 -01002D4012222000,"Ultra Hat Dimension",services;audio;status-menus,menus,2021-11-18 09:05:20.000 -01009C000415A000,"Ultra Hyperball",status-playable,playable,2021-01-06 10:09:55.000 -01007330027EE000,"Ultra Street Fighter® II: The Final Challengers",status-playable;ldn-untested,playable,2021-11-25 07:54:58.000 -01006A300BA2C000,"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",status-playable;audout,playable,2023-05-04 17:25:23.000 -0100592005164000,"UNBOX: Newbie's Adventure",status-playable;UE4,playable,2022-08-29 13:12:56.000 -01002D900C5E4000,"Uncanny Valley",nvdec;status-playable,playable,2021-06-04 13:28:45.000 -010076F011F54000,"Undead & Beyond",status-playable;nvdec,playable,2022-10-04 09:11:18.000 -01008F3013E4E000,"Under Leaves",status-playable,playable,2021-05-22 18:13:58.000 -010080B00AD66000,"Undertale",status-playable,playable,2022-08-31 17:31:46.000 -01008F80049C6000,"Unepic",status-playable,playable,2024-01-15 17:03:00.000 -01007820096FC000,"UnExplored",status-playable,playable,2021-01-06 10:02:16.000 -01007D1013512000,"Unhatched",status-playable,playable,2020-12-11 12:11:09.000 -010069401ADB8000,"Unicorn Overlord",status-playable,playable,2024-09-27 14:04:32.000 -0100B1400D92A000,"Unit 4",status-playable,playable,2020-12-16 18:54:13.000 -010045200D3A4000,"Unknown Fate",slow;status-ingame,ingame,2020-10-15 12:27:42.000 -0100AB2010B4C000,"Unlock The King",status-playable,playable,2020-09-01 13:58:27.000 -0100A3E011CB0000,"Unlock the King 2",status-playable,playable,2021-06-15 20:43:55.000 -01005AA00372A000,"UNO® for Nintendo Switch",status-playable;nvdec;ldn-untested,playable,2022-07-28 14:49:47.000 -0100E5D00CC0C000,"Unravel Two",status-playable;nvdec,playable,2024-05-23 15:45:05.000 -010001300CC4A000,"Unruly Heroes",status-playable,playable,2021-01-07 18:09:31.000 -0100B410138C0000,"Unspottable",status-playable,playable,2022-10-25 19:28:49.000 -010082400BCC6000,"Untitled Goose Game",status-playable,playable,2020-09-26 13:18:06.000 -0100E49013190000,"Unto The End",gpu;status-ingame,ingame,2022-10-21 11:13:29.000 -0100B110109F8000,"Urban Flow",services;status-playable,playable,2020-07-05 12:51:47.000 -010054F014016000,"Urban Street Fighting",status-playable,playable,2021-02-20 19:16:36.000 -01001B10068EC000,"Urban Trial Playground",UE4;nvdec;online;status-playable,playable,2021-03-25 20:56:51.000 -0100A2500EB92000,"Urban Trial Tricky",status-playable;nvdec;UE4,playable,2022-12-06 13:07:56.000 -01007C0003AEC000,"Use Your Words",status-menus;nvdec;online-broken,menus,2022-08-29 17:22:10.000 -0100D4300EBF8000,"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",status-nothing;crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44.000 -010024200E00A000,"Uta no☆Prince-sama♪ Repeat Love",status-playable;nvdec,playable,2022-12-09 09:21:51.000 -010029B00CC3E000,"UTOPIA 9 - A Volatile Vacation",nvdec;status-playable,playable,2020-12-16 17:06:42.000 -010064400B138000,"V-Rally 4",gpu;nvdec;status-ingame,ingame,2021-06-07 19:37:31.000 -0100A6700D66E000,"VA-11 HALL-A",status-playable,playable,2021-02-26 15:05:34.000 -01009E2003FE2000,"Vaccine",nvdec;status-playable,playable,2021-01-06 01:02:07.000 -010089700F30C000,"Valfaris",status-playable,playable,2022-09-16 21:37:24.000 -0100CAF00B744000,"Valkyria Chronicles",status-ingame;32-bit;crash;nvdec,ingame,2022-11-23 20:03:32.000 -01005C600AC68000,"Valkyria Chronicles 4",audout;nvdec;status-playable,playable,2021-06-03 18:12:25.000 -0100FBD00B91E000,"Valkyria Chronicles 4 Demo",slow;status-ingame;demo,ingame,2022-08-29 20:39:07.000 -0100E0E00B108000,"Valley",status-playable;nvdec,playable,2022-09-28 19:27:58.000 -010089A0197E4000,"Vampire Survivors",status-ingame,ingame,2024-06-17 09:57:38.000 -010020C00FFB6000,"Vampire: The Masquerade - Coteries of New York",status-playable,playable,2020-10-04 14:55:22.000 -01000BD00CE64000,"VAMPYR",status-playable;nvdec;UE4,playable,2022-09-16 22:15:51.000 -01007C500D650000,"Vandals",status-playable,playable,2021-01-27 21:45:46.000 -010030F00CA1E000,"Vaporum",nvdec;status-playable,playable,2021-05-28 14:25:33.000 -010045C0109F2000,"VARIABLE BARRICADE NS",status-playable;nvdec,playable,2022-02-26 15:50:13.000 -0100FE200AF48000,"VASARA Collection",nvdec;status-playable,playable,2021-02-28 15:26:10.000 -0100AD300E4FA000,"Vasilis",status-playable,playable,2020-09-01 15:05:35.000 -01009CD003A0A000,"Vegas Party",status-playable,playable,2021-04-14 19:21:41.000 -010098400E39E000,"Vektor Wars",status-playable;online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46.000 -01003A8018E60000,"Vengeful Guardian: Moonrider",deadlock;status-boots,boots,2024-03-17 23:35:37.000 -010095B00DBC8000,"Venture Kid",crash;gpu;status-ingame,ingame,2021-04-18 16:33:17.000 -0100C850134A0000,"Vera Blanc: Full Moon",audio;status-playable,playable,2020-12-17 12:09:30.000 -0100379013A62000,"Very Very Valet",status-playable;nvdec,playable,2022-11-12 15:25:51.000 -01006C8014DDA000,"Very Very Valet Demo",status-boots;crash;Needs Update;demo,boots,2022-11-12 15:26:13.000 -010057B00712C000,"Vesta",status-playable;nvdec,playable,2022-08-29 21:03:39.000 -0100E81007A06000,"Victor Vran Overkill Edition",gpu;deadlock;status-ingame;nvdec;opengl,ingame,2022-08-30 11:46:56.000 -01005880063AA000,"Violett",nvdec;status-playable,playable,2021-01-28 13:09:36.000 -010037900CB1C000,"Viviette",status-playable,playable,2021-06-11 15:33:40.000 -0100D010113A8000,"Void Bastards",status-playable,playable,2022-10-15 00:04:19.000 -0100FF7010E7E000,"void tRrLM(); //Void Terrarium",gpu;status-ingame;Needs Update;regression,ingame,2023-02-10 01:13:25.000 -010078D0175EE000,"void* tRrLM2(); //Void Terrarium 2",status-playable,playable,2023-12-21 11:00:41.000 -0100B1A0066DC000,"Volgarr the Viking",status-playable,playable,2020-12-18 15:25:50.000 -0100A7900E79C000,"Volta-X",status-playable;online-broken,playable,2022-10-07 12:20:51.000 -01004D8007368000,"Vostok Inc.",status-playable,playable,2021-01-27 17:43:59.000 -0100B1E0100A4000,"Voxel Galaxy",status-playable,playable,2022-09-28 22:45:02.000 -0100AFA011068000,"Voxel Pirates",status-playable,playable,2022-09-28 22:55:02.000 -0100BFB00D1F4000,"Voxel Sword",status-playable,playable,2022-08-30 14:57:27.000 -01004E90028A2000,"Vroom in the night sky",status-playable;Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29.000 -0100C7C00AE6C000,"VSR: Void Space Racing",status-playable,playable,2021-01-27 14:08:59.000 -0100B130119D0000,"Waifu Uncovered",status-ingame;crash,ingame,2023-02-27 01:17:46.000 -0100E29010A4A000,"Wanba Warriors",status-playable,playable,2020-10-04 17:56:22.000 -010078800825E000,"Wanderjahr TryAgainOrWalkAway",status-playable,playable,2020-12-16 09:46:04.000 -0100B27010436000,"Wanderlust Travel Stories",status-playable,playable,2021-04-07 16:09:12.000 -0100F8A00853C000,"Wandersong",nvdec;status-playable,playable,2021-06-04 15:33:34.000 -0100D67013910000,"Wanna Survive",status-playable,playable,2022-11-12 21:15:43.000 -010056901285A000,"War Dogs: Red's Return",status-playable,playable,2022-11-13 15:29:01.000 -01004FA01391A000,"War Of Stealth - assassin",status-playable,playable,2021-05-22 17:34:38.000 -010035A00D4E6000,"War Party",nvdec;status-playable,playable,2021-01-27 18:26:32.000 -010049500DE56000,"War Tech Fighters",status-playable;nvdec,playable,2022-09-16 22:29:31.000 -010084D00A134000,"War Theatre",gpu;status-ingame,ingame,2021-06-07 19:42:45.000 -0100B6B013B8A000,"War Truck Simulator",status-playable,playable,2021-01-31 11:22:54.000 -0100563011B4A000,"War-Torn Dreams",crash;status-nothing,nothing,2020-10-21 11:36:16.000 -010054900F51A000,"WARBORN",status-playable,playable,2020-06-25 12:36:47.000 -01000F0002BB6000,"Wargroove",status-playable;online-broken,playable,2022-08-31 10:30:45.000 -0100C6000EEA8000,"Warhammer 40,000: Mechanicus",nvdec;status-playable,playable,2021-06-13 10:46:38.000 -0100E5600D7B2000,"WARHAMMER 40,000: SPACE WOLF",status-playable;online-broken,playable,2022-09-20 21:11:20.000 -010031201307A000,"Warhammer Age of Sigmar: Storm Ground",status-playable;nvdec;online-broken;UE4,playable,2022-11-13 15:46:14.000 -01002FF00F460000,"Warhammer Quest 2: The End Times",status-playable,playable,2020-08-04 15:28:03.000 -0100563010E0C000,"WarioWare™: Get It Together!",gpu;status-ingame;opengl-backend-bug,ingame,2024-04-23 01:04:56.000 -010045B018EC2000,"WarioWare™: Move It!",status-playable,playable,2023-11-14 00:23:51.000 -0100E0400E320000,"Warlocks 2: God Slayers",status-playable,playable,2020-12-16 17:36:50.000 -0100DB300A026000,"Warp Shift",nvdec;status-playable,playable,2020-12-15 14:48:48.000 -010032700EAC4000,"WarriOrb",UE4;status-playable,playable,2021-06-17 15:45:14.000 -0100E8500AD58000,"WARRIORS OROCHI 4 ULTIMATE",status-playable;nvdec;online-broken,playable,2024-08-07 01:50:37.000 -0100CD900FB24000,"WARTILE",UE4;crash;gpu;status-menus,menus,2020-12-11 21:56:10.000 -010039A00BC64000,"Wasteland 2: Director's Cut",nvdec;status-playable,playable,2021-01-27 13:34:11.000 -0100B79011F06000,"Water Balloon Mania",status-playable,playable,2020-10-23 20:20:59.000 -0100BA200C378000,"Way of the Passive Fist",gpu;status-ingame,ingame,2021-02-26 21:07:06.000 -0100560010E3E000,"We should talk.",crash;status-nothing,nothing,2020-08-03 12:32:36.000 -010096000EEBA000,"Welcome to Hanwell",UE4;crash;status-boots,boots,2020-08-03 11:54:57.000 -0100D7F010B94000,"Welcome to Primrose Lake",status-playable,playable,2022-10-21 11:30:57.000 -010035600EC94000,"Wenjia",status-playable,playable,2020-06-08 11:38:30.000 -010031B00A4E8000,"West of Loathing",status-playable,playable,2021-01-28 12:35:19.000 -010038900DFE0000,"What Remains of Edith Finch",slow;status-playable;UE4,playable,2022-08-31 19:57:59.000 -010033600ADE6000,"Wheel of Fortune®",status-boots;crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24.000 -0100DFC00405E000,"Wheels of Aurelia",status-playable,playable,2021-01-27 21:59:25.000 -010027D011C9C000,"Where Angels Cry",gpu;status-ingame;nvdec,ingame,2022-09-30 22:24:47.000 -0100FDB0092B4000,"Where Are My Friends?",status-playable,playable,2022-09-21 14:39:26.000 -01000C000C966000,"Where the Bees Make Honey",status-playable,playable,2020-07-15 12:40:49.000 -010017500E7E0000,"Whipseey and the Lost Atlas",status-playable,playable,2020-06-23 20:24:14.000 -010015A00AF1E000,"Whispering Willows",status-playable;nvdec,playable,2022-09-30 22:33:05.000 -010027F0128EA000,"Who Wants to Be a Millionaire?",crash;status-nothing,nothing,2020-12-11 20:22:42.000 -0100C7800CA06000,"Widget Satchel",status-playable,playable,2022-09-16 22:41:07.000 -0100CFC00A1D8000,"Wild Guns™ Reloaded",status-playable,playable,2021-01-28 12:29:05.000 -010071F00D65A000,"Wilmot's Warehouse",audio;gpu;status-ingame,ingame,2021-06-02 17:24:32.000 -010048800B638000,"Windjammers",online;status-playable,playable,2020-10-13 11:24:25.000 -010059900BA3C000,"Windscape",status-playable,playable,2022-10-21 11:49:42.000 -0100D6800CEAC000,"Windstorm: An Unexpected Arrival",UE4;status-playable,playable,2021-06-07 19:33:19.000 -01005A100B314000,"Windstorm: Start of a Great Friendship",UE4;gpu;nvdec;status-ingame,ingame,2020-12-22 13:17:48.000 -010035B012F28000,"Wing of Darkness",status-playable;UE4,playable,2022-11-13 16:03:51.000 -0100A4A015FF0000,"Winter Games 2023",deadlock;status-menus,menus,2023-11-07 20:47:36.000 -010012A017F18800,"Witch On The Holy Night",status-playable,playable,2023-03-06 23:28:11.000 -0100454012E32000,"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",status-ingame;crash,ingame,2021-08-08 11:56:18.000 -01002FC00C6D0000,"Witch Thief",status-playable,playable,2021-01-27 18:16:07.000 -010061501904E000,"Witch's Garden",gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24.000 -0100BD4011FFE000,"Witcheye",status-playable,playable,2020-12-14 22:56:08.000 -0100522007AAA000,"Wizard of Legend",status-playable,playable,2021-06-07 12:20:46.000 -010081900F9E2000,"Wizards of Brandel",status-nothing,nothing,2020-10-14 15:52:33.000 -0100C7600E77E000,"Wizards: Wand of Epicosity",status-playable,playable,2022-10-07 12:32:06.000 -01009040091E0000,"Wolfenstein II®: The New Colossus™",gpu;status-ingame,ingame,2024-04-05 05:39:46.000 -01003BD00CAAE000,"Wolfenstein: Youngblood",status-boots;online-broken,boots,2024-07-12 23:49:20.000 -010037A00F5E2000,"Wonder Blade",status-playable,playable,2020-12-11 17:55:31.000 -0100B49016FF0000,"Wonder Boy Anniversary Collection",deadlock;status-nothing,nothing,2023-04-20 16:01:48.000 -0100EB2012E36000,"Wonder Boy Asha in Monster World",status-nothing;crash,nothing,2021-11-03 08:45:06.000 -0100A6300150C000,"Wonder Boy: The Dragon's Trap",status-playable,playable,2021-06-25 04:53:21.000 -0100F5D00C812000,"Wondershot",status-playable,playable,2022-08-31 21:05:31.000 -0100E0300EB04000,"Woodle Tree 2: Deluxe",gpu;slow;status-ingame,ingame,2020-06-04 18:44:00.000 -0100288012966000,"Woodsalt",status-playable,playable,2021-04-06 17:01:48.000 -010083E011BC8000,"Wordify",status-playable,playable,2020-10-03 09:01:07.000 -01009D500A194000,"World Conqueror X",status-playable,playable,2020-12-22 16:10:29.000 -010072000BD32000,"WORLD OF FINAL FANTASY MAXIMA",status-playable,playable,2020-06-07 13:57:23.000 -010009E001D90000,"World of Goo",gpu;status-boots;32-bit;crash;regression,boots,2024-04-12 05:52:14.000 -010061F01DB7C800,"World of Goo 2",status-boots,boots,2024-08-08 22:52:49.000 -01001E300B038000,"World Soccer Pinball",status-playable,playable,2021-01-06 00:37:02.000 -010048900CF64000,"Worldend Syndrome",status-playable,playable,2021-01-03 14:16:32.000 -01008E9007064000,"WorldNeverland - Elnea Kingdom",status-playable,playable,2021-01-28 17:44:23.000 -010000301025A000,"Worlds of Magic: Planar Conquest",status-playable,playable,2021-06-12 12:51:28.000 -01009CD012CC0000,"Worm Jazz",gpu;services;status-ingame;UE4;regression,ingame,2021-11-10 10:33:04.000 -01001AE005166000,"Worms W.M.D",gpu;status-boots;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59.000 -010037500C4DE000,"Worse Than Death",status-playable,playable,2021-06-11 16:05:40.000 -01006F100EB16000,"Woven",nvdec;status-playable,playable,2021-06-02 13:41:08.000 -010087800DCEA000,"WRC 8 FIA World Rally Championship",status-playable;nvdec,playable,2022-09-16 23:03:36.000 -01001A0011798000,"WRC 9 The Official Game",gpu;slow;status-ingame;nvdec,ingame,2022-10-25 19:47:39.000 -0100DC0012E48000,"Wreckfest",status-playable,playable,2023-02-12 16:13:00.000 -0100C5D00EDB8000,"Wreckin' Ball Adventure",status-playable;UE4,playable,2022-09-12 18:56:28.000 -010033700418A000,"Wulverblade",nvdec;status-playable,playable,2021-01-27 22:29:05.000 -01001C400482C000,"Wunderling DX",audio;status-ingame;crash,ingame,2022-09-10 13:20:12.000 -01003B401148E000,"Wurroom",status-playable,playable,2020-10-07 22:46:21.000 -010081700EDF4000,"WWE 2K Battlegrounds",status-playable;nvdec;online-broken;UE4,playable,2022-10-07 12:44:40.000 -010009800203E000,"WWE 2K18",status-playable;nvdec,playable,2023-10-21 17:22:01.000 -0100DF100B97C000,"X-Morph: Defense",status-playable,playable,2020-06-22 11:05:31.000 -0100D0B00FB74000,"XCOM® 2 Collection",gpu;status-ingame;crash,ingame,2022-10-04 09:38:30.000 -0100CC9015360000,"XEL",gpu;status-ingame,ingame,2022-10-03 10:19:39.000 -0100C9F009F7A000,"Xenoblade Chronicles 2: Torna ~ The Golden Country",slow;status-playable;nvdec,playable,2023-01-28 16:47:28.000 -0100E95004038000,"Xenoblade Chronicles™ 2",deadlock;status-ingame;amd-vendor-bug,ingame,2024-03-28 14:31:41.000 -010074F013262000,"Xenoblade Chronicles™ 3",gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44.000 -0100FF500E34A000,"Xenoblade Chronicles™ Definitive Edition",status-playable;nvdec,playable,2024-05-04 20:12:41.000 -010028600BA16000,"Xenon Racer",status-playable;nvdec;UE4,playable,2022-08-31 22:05:30.000 -010064200C324000,"Xenon Valkyrie+",status-playable,playable,2021-06-07 20:25:53.000 -0100928005BD2000,"Xenoraid",status-playable,playable,2022-09-03 13:01:10.000 -01005B5009364000,"Xeodrifter",status-playable,playable,2022-09-03 13:18:39.000 -01006FB00DB02000,"Yaga",status-playable;nvdec,playable,2022-09-16 23:17:17.000 -010076B0101A0000,"YesterMorrow",crash;status-ingame,ingame,2020-12-17 17:15:25.000 -010085500B29A000,"Yet Another Zombie Defense HD",status-playable,playable,2021-01-06 00:18:39.000 -0100725019978000,"YGGDRA UNION ~WE'LL NEVER FIGHT ALONE~",status-playable,playable,2020-04-03 02:20:47.000 -0100634008266000,"YIIK: A Postmodern RPG",status-playable,playable,2021-01-28 13:38:37.000 -0100C0000CEEA000,"Yo kai watch 1 for Nintendo Switch",gpu;status-ingame;opengl,ingame,2024-05-28 11:11:49.000 -010086C00AF7C000,"Yo-Kai Watch 4++",status-playable,playable,2024-06-18 20:21:44.000 -010002D00632E000,"Yoku's Island Express",status-playable;nvdec,playable,2022-09-03 13:59:02.000 -0100F47016F26000,"Yomawari 3",status-playable,playable,2022-05-10 08:26:51.000 -010012F00B6F2000,"Yomawari: The Long Night Collection",status-playable,playable,2022-09-03 14:36:59.000 -0100CC600ABB2000,"Yonder: The Cloud Catcher Chronicles (Retail Only)",status-playable,playable,2021-01-28 14:06:25.000 -0100BE50042F6000,"Yono and the Celestial Elephants",status-playable,playable,2021-01-28 18:23:58.000 -0100F110029C8000,"Yooka-Laylee",status-playable,playable,2021-01-28 14:21:45.000 -010022F00DA66000,"Yooka-Laylee and the Impossible Lair",status-playable,playable,2021-03-05 17:32:21.000 -01006000040C2000,"Yoshi’s Crafted World™",gpu;status-ingame;audout,ingame,2021-08-30 13:25:51.000 -0100AE800C9C6000,"Yoshi’s Crafted World™ Demo",gpu;status-boots;status-ingame,boots,2020-12-16 14:57:40.000 -,"Yoshiwara Higanbana Kuon no Chigiri",nvdec;status-playable,playable,2020-10-17 19:14:46.000 -01003A400C3DA800,"YouTube",status-playable,playable,2024-06-08 05:24:10.000 -00100A7700CCAA40,"Youtubers Life00",status-playable;nvdec,playable,2022-09-03 14:56:19.000 -0100E390124D8000,"Ys IX: Monstrum Nox",status-playable,playable,2022-06-12 04:14:42.000 -0100F90010882000,"Ys Origin",status-playable;nvdec,playable,2024-04-17 05:07:33.000 -01007F200B0C0000,"Ys VIII: Lacrimosa of DANA",status-playable;nvdec,playable,2023-08-05 09:26:41.000 -010022400BE5A000,"Yu-Gi-Oh! Legacy of the Duelist : Link Evolution",status-playable,playable,2024-09-27 21:48:43.000 -01002D60188DE000,"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",status-ingame;crash,ingame,2023-03-17 01:54:01.000 -010037D00DBDC000,"YU-NO: A girl who chants love at the bound of this world.",nvdec;status-playable,playable,2021-01-26 17:03:52.000 -0100B56011502000,"Yumeutsutsu Re:After",status-playable,playable,2022-11-20 16:09:06.000 -,"Yunohana Spring! - Mellow Times -",audio;crash;status-menus,menus,2020-09-27 19:27:40.000 -0100307011C44000,"Yuppie Psycho: Executive Edition",crash;status-ingame,ingame,2020-12-11 10:37:06.000 -0100FC900963E000,"Yuri",status-playable,playable,2021-06-11 13:08:50.000 -010092400A678000,"Zaccaria Pinball",status-playable;online-broken,playable,2022-09-03 15:44:28.000 -0100E7900C4C0000,"Zarvot",status-playable,playable,2021-01-28 13:51:36.000 -01005F200F7C2000,"Zen Chess Collection",status-playable,playable,2020-07-01 22:28:27.000 -01008DD0114AE000,"Zenge",status-playable,playable,2020-10-22 13:23:57.000 -0100057011E50000,"Zengeon",services-horizon;status-boots;crash,boots,2024-04-29 15:43:07.000 -0100AAC00E692000,"Zenith",status-playable,playable,2022-09-17 09:57:02.000 -0100A6A00894C000,"ZERO GUNNER 2- for Nintendo Switch",status-playable,playable,2021-01-04 20:17:14.000 -01004B001058C000,"Zero Strain",services;status-menus;UE4,menus,2021-11-10 07:48:32.000 -,"Zettai kaikyu gakuen",gpu;nvdec;status-ingame,ingame,2020-08-25 15:15:54.000 -0100D7B013DD0000,"Ziggy the Chaser",status-playable,playable,2021-02-04 20:34:27.000 -010086700EF16000,"ZikSquare",gpu;status-ingame,ingame,2021-11-06 02:02:48.000 -010069C0123D8000,"Zoids Wild Blast Unleashed",status-playable;nvdec,playable,2022-10-15 11:26:59.000 -0100C7300EEE4000,"Zombie Army Trilogy",ldn-untested;online;status-playable,playable,2020-12-16 12:02:28.000 -01006CF00DA8C000,"Zombie Driver Immortal Edition",nvdec;status-playable,playable,2020-12-14 23:15:10.000 -0100CFE003A64000,"ZOMBIE GOLD RUSH",online;status-playable,playable,2020-09-24 12:56:08.000 -01001740116EC000,"Zombie's Cool",status-playable,playable,2020-12-17 12:41:26.000 -01000E5800D32C00,"Zombieland: Double Tap - Road Trip0",status-playable,playable,2022-09-17 10:08:45.000 -0100CD300A1BA000,"Zombillie",status-playable,playable,2020-07-23 17:42:23.000 -01001EE00A6B0000,"Zotrix: Solar Division",status-playable,playable,2021-06-07 20:34:05.000 -0100B9B00C6A4000,"この世の果てで恋を唄う少女YU-NO",audio;status-ingame,ingame,2021-01-22 07:00:16.000 -,"スーパーファミコン Nintendo Switch Online",slow;status-ingame,ingame,2020-03-14 05:48:38.000 -01000BB01CB8A000,"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",status-nothing,nothing,2024-09-28 07:03:14.000 -010065500B218000,"メモリーズオフ - Innocent Fille",status-playable,playable,2022-12-02 17:36:48.000 -010032400E700000,"二ノ国 白き聖灰の女王",services;status-menus;32-bit,menus,2023-04-16 17:11:06.000 -0100F3100DA46000,"初音ミク Project DIVA MEGA39's",audio;status-playable;loader-allocator,playable,2022-07-29 11:45:52.000 -010047F012BE2000,"密室のサクリファイス/ABYSS OF THE SACRIFICE",status-playable;nvdec,playable,2022-10-21 13:56:28.000 -0100BF401AF9C000,"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",slow;status-playable,playable,2023-12-31 14:37:17.000 -0100AFA01750C000,"死神と少女/Shinigami to Shoujo",gpu;status-ingame;Incomplete,ingame,2024-03-22 01:06:45.000 -01001BA01EBFC000,"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",services-horizon;status-nothing,nothing,2024-09-28 12:22:55.000 -0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",status-ingame;crash,ingame,2023-04-25 19:43:52.000 -0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",status-ingame;crash,ingame,2024-02-12 20:58:31.000 -010064801A01C000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",status-nothing;crash,nothing,2023-10-30 22:37:40.000 -010088401495E000,"The House of the Dead: Remake",status-playable,playable,2025-01-11 00:36:01 +010099F00EF3E000,"-KLAUS-",nvdec,playable,2020-06-27 13:27:30 +0100BA9014A02000,".hack//G.U. Last Recode",deadlock,boots,2022-03-12 19:15:47 +010098800C4B0000,"'n Verlore Verstand",slow,ingame,2020-12-10 18:00:28 +01009A500E3DA000,"'n Verlore Verstand - Demo",,playable,2021-02-09 00:13:32 +0100A5D01174C000,"/Connection Haunted ",slow,playable,2020-12-10 18:57:14 +01001E500F7FC000,"#Funtime",,playable,2020-12-10 16:54:35 +01000E50134A4000,"#Halloween, Super Puzzles Dream",nvdec,playable,2020-12-10 20:43:58 +01004D100C510000,"#KILLALLZOMBIES",slow,playable,2020-12-16 01:50:25 +0100325012C12000,"#NoLimitFantasy, Super Puzzles Dream",nvdec,playable,2020-12-12 17:21:32 +01005D400E5C8000,"#RaceDieRun",,playable,2020-07-04 20:23:16 +01003DB011AE8000,"#womenUp, Super Puzzles Dream",,playable,2020-12-12 16:57:25 +0100D87012A14000,"#womenUp, Super Puzzles Dream Demo",nvdec,playable,2021-02-09 00:03:31 +01000320000CC000,"1-2-Switch™",services,playable,2022-02-18 14:44:03 +01004D1007926000,"10 Second Run RETURNS",gpu,ingame,2022-07-17 13:06:18 +0100DC000A472000,"10 Second Run RETURNS Demo",gpu,ingame,2021-02-09 00:17:18 +0100D82015774000,"112 Operator",nvdec,playable,2022-11-13 22:42:50 +010051E012302000,"112th Seed",,playable,2020-10-03 10:32:38 +01007F600D1B8000,"12 is Better Than 6",,playable,2021-02-22 16:10:12 +0100B1A010014000,"12 Labours of Hercules II: The Cretan Bull",cpu;32-bit;crash,nothing,2022-12-07 13:43:10 +0100A840047C2000,"12 orbits",,playable,2020-05-28 16:13:26 +01003FC01670C000,"13 Sentinels: Aegis Rim",slow,ingame,2024-06-10 20:33:38 +0100C54015002000,"13 Sentinels: Aegis Rim Demo",demo,playable,2022-04-13 14:15:48 +01007E600EEE6000,"140",,playable,2020-08-05 20:01:33 +0100B94013D28000,"16-Bit Soccer Demo",,playable,2021-02-09 00:23:07 +01005CA0099AA000,"1917 - The Alien Invasion DX",,playable,2021-01-08 22:11:16 +0100829010F4A000,"1971 Project Helios",,playable,2021-04-14 13:50:19 +0100D1000B18C000,"1979 Revolution: Black Friday",nvdec,playable,2021-02-21 21:03:43 +01007BB00FC8A000,"198X",,playable,2020-08-07 13:24:38 +010075601150A000,"1993 Shenandoah",,playable,2020-10-24 13:55:42 +0100148012550000,"1993 Shenandoah Demo",,playable,2021-02-09 00:43:43 +010096500EA94000,"2048 Battles",,playable,2020-12-12 14:21:25 +010024C0067C4000,"2064: Read Only Memories INTEGRAL",deadlock,menus,2020-05-28 16:53:58 +0100749009844000,"20XX",gpu,ingame,2023-08-14 09:41:44 +01007550131EE000,"2URVIVE",,playable,2022-11-17 13:49:37 +0100E20012886000,"2weistein – The Curse of the Red Dragon",nvdec;UE4,playable,2022-11-18 14:47:07 +0100DAC013D0A000,"30 in 1 game collection vol. 2",online-broken,playable,2022-10-15 17:22:27 +010056D00E234000,"30-in-1 Game Collection",online-broken,playable,2022-10-15 17:47:09 +0100FB5010D2E000,"3000th Duel",,playable,2022-09-21 17:12:08 +01003670066DE000,"36 Fragments of Midnight",,playable,2020-05-28 15:12:59 +0100AF400C4CE000,"39 Days to Mars",,playable,2021-02-21 22:12:46 +010010C013F2A000,"3D Arcade Fishing",,playable,2022-10-25 21:50:51 +01006DA00707C000,"3D MiniGolf",,playable,2021-01-06 09:22:11 +01006890126E4000,"4x4 Dirt Track",,playable,2020-12-12 21:41:42 +010010100FF14000,"60 Parsecs!",,playable,2022-09-17 11:01:17 +0100969005E98000,"60 Seconds!",services,ingame,2021-11-30 01:04:14 +0100ECF008474000,"6180 the moon",,playable,2020-05-28 15:39:24 +0100EFE00E964000,"64.0",,playable,2020-12-12 21:31:58 +0100DA900B67A000,"7 Billion Humans",32-bit,playable,2020-12-17 21:04:58 +01004B200DF76000,"7th Sector",nvdec,playable,2020-08-10 14:22:14 +0100E9F00B882000,"8-BIT ADV STEINS;GATE",audio,ingame,2020-01-12 15:05:06 +0100B0700E944000,"80 DAYS",,playable,2020-06-22 21:43:01 +01006B1011B9E000,"80's OVERDRIVE",,playable,2020-10-16 14:33:32 +010006A0042F0000,"88 Heroes - 98 Heroes Edition",,playable,2020-05-28 14:13:02 +010005E00E2BC000,"9 Monkeys of Shaolin",UE4;gpu;slow,ingame,2020-11-17 11:58:43 +0100C5F012E3E000,"9 Monkeys of Shaolin Demo",UE4;gpu;nvdec,ingame,2021-02-09 01:03:30 +01000360107BC000,"911 Operator Deluxe Edition",,playable,2020-07-14 13:57:44 +0100B2C00682E000,"99Vidas - Definitive Edition",online,playable,2020-10-29 13:00:40 +010023500C2F0000,"99Vidas Demo",,playable,2021-02-09 12:51:31 +0100DB00117BA000,"9th Dawn III",,playable,2020-12-12 22:27:27 +010096A00CC80000,"A Ch'ti Bundle",nvdec,playable,2022-10-04 12:48:44 +010021D00D53E000,"A Dark Room",gpu,ingame,2020-12-14 16:14:28 +010026B006802000,"A Duel Hand Disaster: Trackher",nvdec;online-working,playable,2022-09-04 14:24:55 +0100582012B90000,"A Duel Hand Disaster: Trackher DEMO",crash;demo;nvdec,ingame,2021-03-24 18:45:27 +01006CE0134E6000,"A Frog Game",,playable,2020-12-14 16:09:53 +010056E00853A000,"A Hat in Time",,playable,2024-06-25 19:52:44 +01009E1011EC4000,"A HERO AND A GARDEN",,playable,2022-12-05 16:37:47 +01005EF00CFDA000,"A Knight's Quest",UE4,playable,2022-09-12 20:44:20 +01008DD006C52000,"A Magical High School Girl",,playable,2022-07-19 14:40:50 +01004890117B2000,"A Short Hike",,playable,2020-10-15 00:19:58 +0100F0901006C000,"A Sound Plan",crash,boots,2020-12-14 16:46:21 +01007DD011C4A000,"A Summer with the Shiba Inu",,playable,2021-06-10 20:51:16 +0100A3E010E56000,"A-Train: All Aboard! Tourism",nvdec,playable,2021-04-06 17:48:19 +010097A00CC0A000,"Aaero: Complete Edition",nvdec,playable,2022-07-19 14:49:55 +0100EFC010398000,"Aborigenus",,playable,2020-08-05 19:47:24 +0100A5B010A66000,"Absolute Drift",,playable,2020-12-10 14:02:44 +0100C1300BBC6000,"ABZÛ",UE4,playable,2022-07-19 15:02:52 +01003C400871E000,"ACA NEOGEO 2020 SUPER BASEBALL",online,playable,2021-04-12 13:23:51 +0100FC000AFC6000,"ACA NEOGEO 3 COUNT BOUT",online,playable,2021-04-12 13:16:42 +0100AC40038F4000,"ACA NEOGEO AERO FIGHTERS 2",online,playable,2021-04-08 15:44:09 +0100B91008780000,"ACA NEOGEO AERO FIGHTERS 3",online,playable,2021-04-12 13:11:17 +0100B4800AFBA000,"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",online,playable,2021-04-01 22:48:01 +01003FE00A2F6000,"ACA NEOGEO BASEBALL STARS PROFESSIONAL",online,playable,2021-04-01 21:23:05 +0100DFC003398000,"ACA NEOGEO BLAZING STAR",crash;services,menus,2020-05-26 17:29:02 +0100D2400AFB0000,"ACA NEOGEO CROSSED SWORDS",online,playable,2021-04-01 20:42:59 +0100EE6002B48000,"ACA NEOGEO FATAL FURY",online,playable,2021-04-01 20:36:23 +0100EEA00AFB2000,"ACA NEOGEO FOOTBALL FRENZY",,playable,2021-03-29 20:12:12 +0100CB2001DB8000,"ACA NEOGEO GAROU: MARK OF THE WOLVES",online,playable,2021-04-01 20:31:10 +01005D700A2F8000,"ACA NEOGEO GHOST PILOTS",online,playable,2021-04-01 20:26:45 +01000D10038E6000,"ACA NEOGEO LAST RESORT",online,playable,2021-04-01 19:51:22 +0100A2900AFA4000,"ACA NEOGEO LEAGUE BOWLING",crash;services,menus,2020-05-26 17:11:04 +0100A050038F2000,"ACA NEOGEO MAGICAL DROP II",crash;services,menus,2020-05-26 16:48:24 +01007920038F6000,"ACA NEOGEO MAGICIAN LORD",online,playable,2021-04-01 19:33:26 +0100EBE002B3E000,"ACA NEOGEO METAL SLUG",,playable,2021-02-21 13:56:48 +010086300486E000,"ACA NEOGEO METAL SLUG 2",online,playable,2021-04-01 19:25:52 +0100BA8001DC6000,"ACA NEOGEO METAL SLUG 3",crash;services,menus,2020-05-26 16:32:45 +01009CE00AFAE000,"ACA NEOGEO METAL SLUG 4",online,playable,2021-04-01 18:12:18 +01008FD004DB6000,"ACA NEOGEO METAL SLUG X",crash;services,menus,2020-05-26 14:07:20 +010038F00AFA0000,"ACA NEOGEO Money Puzzle Exchanger",online,playable,2021-04-01 17:59:56 +01002E70032E8000,"ACA NEOGEO NEO TURF MASTERS",,playable,2021-02-21 15:12:01 +010052A00A306000,"ACA NEOGEO NINJA COMBAT",,playable,2021-03-29 21:17:28 +01007E800AFB6000,"ACA NEOGEO NINJA COMMANDO",online,playable,2021-04-01 17:28:18 +01003A5001DBA000,"ACA NEOGEO OVER TOP",,playable,2021-02-21 13:16:25 +010088500878C000,"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",online,playable,2021-04-01 17:18:27 +01005C9002B42000,"ACA NEOGEO SAMURAI SHODOWN",online,playable,2021-04-01 17:11:35 +010047F001DBC000,"ACA NEOGEO SAMURAI SHODOWN IV",online,playable,2021-04-12 12:58:54 +010049F00AFE8000,"ACA NEOGEO SAMURAI SHODOWN V SPECIAL",online,playable,2021-04-10 18:07:13 +01009B300872A000,"ACA NEOGEO SENGOKU 2",online,playable,2021-04-10 17:36:44 +01008D000877C000,"ACA NEOGEO SENGOKU 3",online,playable,2021-04-10 16:11:53 +01008A9001DC2000,"ACA NEOGEO SHOCK TROOPERS",crash;services,menus,2020-05-26 15:29:34 +01007D1004DBA000,"ACA NEOGEO SPIN MASTER",online,playable,2021-04-10 15:50:19 +010055A00A300000,"ACA NEOGEO SUPER SIDEKICKS 2",online,playable,2021-04-10 16:05:58 +0100A4D00A308000,"ACA NEOGEO SUPER SIDEKICKS 3 : THE NEXT GLORY",online,playable,2021-04-10 15:39:22 +0100EB2001DCC000,"ACA NEOGEO THE KING OF FIGHTERS '94",crash;services,menus,2020-05-26 15:03:44 +01009DC001DB6000,"ACA NEOGEO THE KING OF FIGHTERS '95",,playable,2021-03-29 20:27:35 +01006F0004FB4000,"ACA NEOGEO THE KING OF FIGHTERS '96",online,playable,2021-04-10 14:49:10 +0100170008728000,"ACA NEOGEO THE KING OF FIGHTERS '97",online,playable,2021-04-10 14:43:27 +0100B42001DB4000,"ACA NEOGEO THE KING OF FIGHTERS '98",crash;services,menus,2020-05-26 14:54:20 +0100583001DCA000,"ACA NEOGEO THE KING OF FIGHTERS '99",online,playable,2021-04-10 14:36:56 +0100B97002B44000,"ACA NEOGEO THE KING OF FIGHTERS 2000",online,playable,2021-04-10 15:24:35 +010048200AFC2000,"ACA NEOGEO THE KING OF FIGHTERS 2001",online,playable,2021-04-10 15:16:23 +0100CFD00AFDE000,"ACA NEOGEO THE KING OF FIGHTERS 2002",online,playable,2021-04-10 15:01:55 +0100EF100AFE6000,"ACA NEOGEO THE KING OF FIGHTERS 2003",online,playable,2021-04-10 14:54:31 +0100699008792000,"ACA NEOGEO THE LAST BLADE 2",online,playable,2021-04-10 14:31:54 +0100F7F00AFA2000,"ACA NEOGEO THE SUPER SPY",online,playable,2021-04-10 14:26:33 +0100CEF001DC0000,"ACA NEOGEO WAKU WAKU 7",online,playable,2021-04-10 14:20:52 +01009D4001DC4000,"ACA NEOGEO WORLD HEROES PERFECT",crash;services,menus,2020-05-26 14:14:36 +01002E700AFC4000,"ACA NEOGEO ZUPAPA!",online,playable,2021-03-25 20:07:33 +0100A9900CB5C000,"Access Denied",,playable,2022-07-19 15:25:10 +01007C50132C8000,"Ace Angler: Fishing Spirits",crash,menus,2023-03-03 03:21:39 +010005501E68C000,"Ace Attorney Investigations Collection",,playable,2024-09-19 16:38:05 +010033401E68E000,"Ace Attorney Investigations Collection DEMO",,playable,2024-09-07 06:16:42 +010039301B7E0000,"Ace Combat 7 - Skies Unknown Deluxe Edition",gpu;UE4,ingame,2024-09-27 14:31:43 +0100FF1004D56000,"Ace of Seafood",,playable,2022-07-19 15:32:25 +0100B28003440000,"Aces of the Luftwaffe - Squadron",nvdec;slow,playable,2020-05-27 12:29:42 +010054300D822000,"Aces of the Luftwaffe - Squadron Demo",nvdec,playable,2021-02-09 13:12:28 +010079B00B3F4000,"Achtung! Cthulhu Tactics",,playable,2020-12-14 18:40:27 +0100DBC0081A4000,"ACORN Tactics",,playable,2021-02-22 12:57:40 +010043C010AEA000,"Across the Grooves",,playable,2020-06-27 12:29:51 +010039A010DA0000,"Active Neurons - Puzzle game",,playable,2021-01-27 21:31:21 +01000D1011EF0000,"Active Neurons 2",,playable,2022-10-07 16:21:42 +010031C0122B0000,"Active Neurons 2 Demo",,playable,2021-02-09 13:40:21 +0100EE1013E12000,"Active Neurons 3 - Wonders Of The World",,playable,2021-03-24 12:20:20 +0100CD40104DE000,"Actual Sunlight",gpu,ingame,2020-12-14 17:18:41 +0100C0C0040E4000,"Adam's Venture™: Origins",,playable,2021-03-04 18:43:57 +010029700EB76000,"Adrenaline Rush - Miami Drive",,playable,2020-12-12 22:49:50 +0100300012F2A000,"Advance Wars™ 1+2: Re-Boot Camp",,playable,2024-01-30 18:19:44 +010014B0130F2000,"Adventure Llama",,playable,2020-12-14 19:32:24 +0100C990102A0000,"Adventure Pinball Bundle",slow,playable,2020-12-14 20:31:53 +0100C4E004406000,"Adventure Time: Pirates of the Enchiridion",nvdec,playable,2022-07-21 21:49:01 +010021F00C1C0000,"Adventures of Bertram Fiddle Episode 2: A Bleaker Predicklement",nvdec,playable,2021-02-22 14:56:37 +010072601233C000,"Adventures of Chris",,playable,2020-12-12 23:00:02 +0100A0A0136E8000,"Adventures of Chris Demo",,playable,2021-02-09 13:49:21 +01002B5012004000,"Adventures of Pip",nvdec,playable,2020-12-12 22:11:55 +01008C901266E000,"ADVERSE",UE4,playable,2021-04-26 14:32:51 +01008E6006502000,"Aegis Defenders",,playable,2021-02-22 13:29:33 +010064500AF72000,"Aegis Defenders demo",,playable,2021-02-09 14:04:17 +010001C011354000,"Aeolis Tournament",online,playable,2020-12-12 22:02:14 +01006710122CE000,"Aeolis Tournament Demo",nvdec,playable,2021-02-09 14:22:30 +0100A0400DDE0000,"AER Memories of Old",nvdec,playable,2021-03-05 18:43:43 +0100E9B013D4A000,"Aerial_Knight's Never Yield",,playable,2022-10-25 22:05:00 +0100087012810000,"Aery - Broken Memories",,playable,2022-10-04 13:11:52 +01000A8015390000,"Aery - Calm Mind",,playable,2022-11-14 14:26:58 +0100875011D0C000,"Aery - Little Bird Adventure",,playable,2021-03-07 15:25:51 +010018E012914000,"Aery - Sky Castle",,playable,2022-10-21 17:58:49 +0100DF8014056000,"Aery – A Journey Beyond Time",,playable,2021-04-05 15:52:25 +01006C40086EA000,"AeternoBlade",nvdec,playable,2020-12-14 20:06:48 +0100B1C00949A000,"AeternoBlade Demo",nvdec,playable,2021-02-09 14:39:26 +01009D100EA28000,"AeternoBlade II",online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18 +,"AeternoBlade II Demo Version",gpu;nvdec,ingame,2021-02-09 15:10:19 +01001B400D334000,"AFL Evolution 2",slow;online-broken;UE4,playable,2022-12-07 12:45:56 +0100DB100BBCE000,"Afterparty",,playable,2022-09-22 12:23:19 +010087C011C4E000,"Agatha Christie - The ABC Murders",,playable,2020-10-27 17:08:23 +010093600A60C000,"Agatha Knife",,playable,2020-05-28 12:37:58 +010005400A45E000,"Agent A: A puzzle in disguise",,playable,2020-11-16 22:53:27 +01008E8012C02000,"Agent A: A puzzle in disguise (Demo)",,playable,2021-02-09 18:30:41 +0100E4700E040000,"Ages of Mages: The last keeper",vulkan-backend-bug,playable,2022-10-04 11:44:05 +010004D00A9C0000,"Aggelos",gpu,ingame,2023-02-19 13:24:23 +010072600D21C000,"Agony",UE4;crash,boots,2020-07-10 16:21:18 +010089B00D09C000,"AI: THE SOMNIUM FILES",nvdec,playable,2022-09-04 14:45:06 +0100C1700FB34000,"AI: THE SOMNIUM FILES Demo",nvdec,playable,2021-02-10 12:52:33 +01006E8011C1E000,"Ailment",,playable,2020-12-12 22:30:41 +0100C7600C7D6000,"Air Conflicts: Pacific Carriers",,playable,2021-01-04 10:52:50 +010005A00A4F4000,"Air Hockey",,playable,2020-05-28 16:44:37 +0100C9E00F54C000,"Air Missions: HIND",,playable,2020-12-13 10:16:45 +0100E95011FDC000,"Aircraft Evolution",nvdec,playable,2021-06-14 13:30:18 +010010A00DB72000,"Airfield Mania Demo",services;demo,boots,2022-04-10 03:43:02 +01003DD00BFEE000,"Airheart - Tales of broken Wings",,playable,2021-02-26 15:20:27 +01007F100DE52000,"Akane",nvdec,playable,2022-07-21 00:12:18 +01009A800F0C8000,"Akash: Path of the Five",gpu;nvdec,ingame,2020-12-14 22:33:12 +010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",,playable,2021-02-22 14:39:35 +0100D4C00EE0C000,"Akuarium",slow,playable,2020-12-12 23:43:36 +010026E00FEBE000,"Akuto: Showdown",,playable,2020-08-04 19:43:27 +0100F5400AB6C000,"Alchemic Jousts",gpu,ingame,2022-12-08 15:06:28 +010001E00F75A000,"Alchemist's Castle",,playable,2020-12-12 23:54:08 +01004510110C4000,"Alder's Blood Prologue",crash,ingame,2021-02-09 19:03:03 +0100D740110C0000,"Alder's Blood: Definitive Edition",,playable,2020-08-28 15:15:23 +01000E000EEF8000,"Aldred Knight",services,playable,2021-11-30 01:49:17 +010025D01221A000,"Alex Kidd in Miracle World DX",,playable,2022-11-14 15:01:34 +0100A2E00D0E0000,"Alien Cruise",,playable,2020-08-12 13:56:05 +0100C1500DBDE000,"Alien Escape",,playable,2020-06-03 23:43:18 +010075D00E8BA000,"Alien: Isolation",nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41 +0100CBD012FB6000,"All Walls Must Fall",UE4,playable,2022-10-15 19:16:30 +0100C1F00A9B8000,"All-Star Fruit Racing",nvdec;UE4,playable,2022-07-21 00:35:37 +0100AC501122A000,"Alluris",gpu;UE4,ingame,2023-08-02 23:13:50 +010063000C3CE000,"Almightree: The Last Dreamer",slow,playable,2020-12-15 13:59:03 +010083E010AE8000,"Along the Edge",,playable,2020-11-18 15:00:07 +010083E013188000,"Alpaca Ball: Allstars",nvdec,playable,2020-12-11 12:26:29 +01000A800B998000,"ALPHA",,playable,2020-12-13 12:17:45 +010053B0123DC000,"Alphaset by POWGI",,playable,2020-12-15 15:15:15 +01003E700FD66000,"Alt-Frequencies",,playable,2020-12-15 19:01:33 +01004DB00935A000,"Alteric",,playable,2020-11-08 13:53:22 +0100C3D00D1D4000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",,playable,2020-08-31 14:17:42 +0100A8A00D27E000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",,playable,2021-02-10 13:33:59 +010045201487C000,"Aluna: Sentinel of the Shards",nvdec,playable,2022-10-25 22:17:03 +01004C200B0B4000,"Alwa's Awakening",,playable,2020-10-13 11:52:01 +01001B7012214000,"Alwa's Legacy",,playable,2020-12-13 13:00:57 +010002B00C534000,"American Fugitive",nvdec,playable,2021-01-04 20:45:11 +010089D00A3FA000,"American Ninja Warrior: Challenge",nvdec,playable,2021-06-09 13:11:17 +01003CC00D0BE000,"Amnesia: Collection",,playable,2022-10-04 13:36:15 +010041D00DEB2000,"Amoeba Battle - Microscopic RTS Action",,playable,2021-05-06 13:33:41 +010046500C8D2000,"Among the Sleep - Enhanced Edition",nvdec,playable,2021-06-03 15:06:25 +0100B0C013912000,"Among Us",online;ldn-broken,menus,2021-09-22 15:20:17 +010050900E1C6000,"Anarcute",,playable,2021-02-22 13:17:59 +01009EE0111CC000,"Ancestors Legacy",nvdec;UE4,playable,2022-10-01 12:25:36 +010021700BC56000,"Ancient Rush 2",UE4;crash,menus,2020-07-14 14:58:47 +0100AE000AEBC000,"Angels of Death",nvdec,playable,2021-02-22 14:17:15 +010001E00A5F6000,"AngerForce: Reloaded for Nintendo Switch",,playable,2022-07-21 10:37:17 +0100F3500D05E000,"Angry Bunnies: Colossal Carrot Crusade",online-broken,playable,2022-09-04 14:53:26 +010084500C7DC000,"Angry Video Game Nerd I & II Deluxe",crash,ingame,2020-12-12 23:59:54 +0100706005B6A000,"Anima: Gate of Memories",nvdec,playable,2021-06-16 18:13:18 +010033F00B3FA000,"Anima: Gate of Memories - Arcane Edition",nvdec,playable,2021-01-26 16:55:51 +01007A400B3F8000,"Anima: Gate of Memories - The Nameless Chronicles",,playable,2021-06-14 14:33:06 +0100F38011CFE000,"Animal Crossing: New Horizons Island Transfer Tool",services;Needs Update;Incomplete,ingame,2022-12-07 13:51:19 +01006F8002326000,"Animal Crossing™: New Horizons",gpu;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49 +010019500E642000,"Animal Fight Club",gpu,ingame,2020-12-13 13:13:33 +01002F4011A8E000,"Animal Fun for Toddlers and Kids",services,boots,2020-12-15 16:45:29 +010035500CA0E000,"Animal Hunter Z",,playable,2020-12-13 12:50:35 +010033C0121DC000,"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",services,boots,2021-11-29 23:43:14 +010065B009B3A000,"Animal Rivals: Nintendo Switch Edition",,playable,2021-02-22 14:02:42 +0100EFE009424000,"Animal Super Squad",UE4,playable,2021-04-23 20:50:50 +0100A16010966000,"Animal Up!",,playable,2020-12-13 15:39:02 +010020D01AD24000,"ANIMAL WELL",,playable,2024-05-22 18:01:49 +0100451012492000,"Animals for Toddlers",services,boots,2020-12-15 17:27:27 +010098600CF06000,"Animated Jigsaws Collection",nvdec,playable,2020-12-15 15:58:34 +0100A1900B5B8000,"Animated Jigsaws: Beautiful Japanese Scenery Demo",nvdec,playable,2021-02-10 13:49:56 +010062500EB84000,"Anime Studio Story",,playable,2020-12-15 18:14:05 +01002B300EB86000,"Anime Studio Story Demo",,playable,2021-02-10 14:50:39 +010097600C322000,"ANIMUS",,playable,2020-12-13 15:11:47 +0100E5A00FD38000,"ANIMUS: Harbinger",,playable,2022-09-13 22:09:20 +010055500CCD2000,"Ankh Guardian - Treasure of the Demon's Temple",,playable,2020-12-13 15:55:49 +01009E600D78C000,"Anode",,playable,2020-12-15 17:18:58 +0100CB9018F5A000,"Another Code™: Recollection",gpu;crash,ingame,2024-09-06 05:58:52 +01001A900D312000,"Another Sight",UE4;gpu;nvdec,ingame,2020-12-03 16:49:59 +01003C300AAAE000,"Another World",slow,playable,2022-07-21 10:42:38 +01000FD00DF78000,"AnShi",nvdec;UE4,playable,2022-10-21 19:37:01 +010054C00D842000,"Anthill",services;nvdec,menus,2021-11-18 09:25:25 +0100596011E20000,"Anti Hero Bundle",nvdec,playable,2022-10-21 20:10:30 +0100016007154000,"Antiquia Lost",,playable,2020-05-28 11:57:32 +0100FE1011400000,"AntVentor",nvdec,playable,2020-12-15 20:09:27 +0100FA100620C000,"Ao no Kanata no Four Rhythm",,playable,2022-07-21 10:50:42 +010047000E9AA000,"AO Tennis 2",online-broken,playable,2022-09-17 12:05:07 +0100990011866000,"Aokana - Four Rhythms Across the Blue",,playable,2022-10-04 13:50:26 +01005B100C268000,"Ape Out",,playable,2022-09-26 19:04:47 +010054500E6D4000,"Ape Out DEMO",,playable,2021-02-10 14:33:06 +010051C003A08000,"Aperion Cyberstorm",,playable,2020-12-14 00:40:16 +01008CA00D71C000,"Aperion Cyberstorm [DEMO]",,playable,2021-02-10 15:53:21 +01008FC00C5BC000,"Apocalipsis Wormwood Edition",deadlock,menus,2020-05-27 12:56:37 +010045D009EFC000,"Apocryph: an old-school shooter",gpu,ingame,2020-12-13 23:24:10 +010020D01B890000,"Apollo Justice: Ace Attorney Trilogy",,playable,2024-06-21 21:54:27 +01005F20116A0000,"Apparition",nvdec;slow,ingame,2020-12-13 23:57:04 +0100AC10085CE000,"AQUA KITTY UDX",online,playable,2021-04-12 15:34:11 +0100FE0010886000,"Aqua Lungers",crash,ingame,2020-12-14 11:25:57 +0100D0D00516A000,"Aqua Moto Racing Utopia",,playable,2021-02-21 21:21:00 +010071800BA74000,"Aragami: Shadow Edition",nvdec,playable,2021-02-21 20:33:23 +0100C7D00E6A0000,"Arc of Alchemist",nvdec,playable,2022-10-07 19:15:54 +0100BE80097FA000,"Arcade Archives 10-Yard Fight",online,playable,2021-03-25 21:26:41 +01005DD00BE08000,"Arcade Archives ALPHA MISSION",online,playable,2021-04-15 09:20:43 +010083800DC70000,"Arcade Archives ALPINE SKI",online,playable,2021-04-15 09:28:46 +0100A5700AF32000,"Arcade Archives ARGUS",online,playable,2021-04-16 06:51:25 +010014F001DE2000,"Arcade Archives Armed F",online,playable,2021-04-16 07:00:17 +0100BEC00C7A2000,"Arcade Archives ATHENA",online,playable,2021-04-16 07:10:12 +0100426001DE4000,"Arcade Archives Atomic Robo-Kid",online,playable,2021-04-16 07:20:29 +0100192009824000,"Arcade Archives BOMB JACK",online,playable,2021-04-16 09:48:26 +010007A00980C000,"Arcade Archives City CONNECTION",online,playable,2021-03-25 22:16:15 +0100EDC00E35A000,"Arcade Archives CLU CLU LAND",online,playable,2021-04-16 10:00:42 +0100BB1001DD6000,"Arcade Archives CRAZY CLIMBER",online,playable,2021-03-25 22:24:15 +0100E9E00B052000,"Arcade Archives DONKEY KONG",Needs Update;crash;services,menus,2021-03-24 18:18:43 +0100F25001DD0000,"Arcade Archives DOUBLE DRAGON",online,playable,2021-03-25 22:44:34 +01009E3001DDE000,"Arcade Archives DOUBLE DRAGON II The Revenge",online,playable,2021-04-12 16:05:29 +0100496006EC8000,"Arcade Archives FRONT LINE",online,playable,2021-05-05 14:10:49 +01009A4008A30000,"Arcade Archives HEROIC EPISODE",online,playable,2021-03-25 23:01:26 +01007D200D3FC000,"Arcade Archives ICE CLIMBER",online,playable,2021-05-05 14:18:34 +010049400C7A8000,"Arcade Archives IKARI WARRIORS",online,playable,2021-05-05 14:24:46 +01000DB00980A000,"Arcade Archives Ikki",online,playable,2021-03-25 23:11:28 +010008300C978000,"Arcade Archives IMAGE FIGHT",online,playable,2021-05-05 14:31:21 +010010B008A36000,"Arcade Archives Kid Niki Radical Ninja",audio;online,ingame,2022-07-21 11:02:04 +0100E7C001DE0000,"Arcade Archives Kid's Horehore Daisakusen",online,playable,2021-04-12 16:21:29 +0100F380105A4000,"Arcade Archives LIFE FORCE",,playable,2020-09-04 13:26:25 +0100755004608000,"Arcade Archives Mario Bros.",online,playable,2021-03-26 11:31:32 +01000BE001DD8000,"Arcade Archives MOON CRESTA",online,playable,2021-05-05 14:39:29 +01003000097FE000,"Arcade Archives MOON PATROL",online,playable,2021-03-26 11:42:04 +01003EF00D3B4000,"Arcade Archives NINJA GAIDEN",audio;online,ingame,2021-04-12 16:27:53 +01002F300D2C6000,"Arcade Archives Ninja Spirit",online,playable,2021-05-05 14:45:31 +0100369001DDC000,"Arcade Archives Ninja-Kid",online,playable,2021-03-26 20:55:07 +01004A200BB48000,"Arcade Archives OMEGA FIGHTER",crash;services,menus,2020-08-18 20:50:54 +01007F8010C66000,"Arcade Archives PLUS ALPHA",audio,ingame,2020-07-04 20:47:55 +0100A6E00D3F8000,"Arcade Archives POOYAN",online,playable,2021-05-05 17:58:19 +01000D200C7A4000,"Arcade Archives PSYCHO SOLDIER",online,playable,2021-05-05 18:02:19 +01001530097F8000,"Arcade Archives PUNCH-OUT!!",online,playable,2021-03-25 22:10:55 +010081E001DD2000,"Arcade Archives Renegade",online,playable,2022-07-21 11:45:40 +0100FBA00E35C000,"Arcade Archives ROAD FIGHTER",online,playable,2021-05-05 18:09:17 +010060000BF7C000,"Arcade Archives ROUTE 16",online,playable,2021-05-05 18:40:41 +0100C2D00981E000,"Arcade Archives RYGAR",online,playable,2021-04-15 08:48:30 +01007A4009834000,"Arcade Archives Shusse Ozumo",online,playable,2021-05-05 17:52:25 +010008F00B054000,"Arcade Archives Sky Skipper",online,playable,2021-04-15 08:58:09 +01008C900982E000,"Arcade Archives Solomon's Key",online,playable,2021-04-19 16:27:18 +010069F008A38000,"Arcade Archives STAR FORCE",online,playable,2021-04-15 08:39:09 +0100422001DDA000,"Arcade Archives TERRA CRESTA",crash;services,menus,2020-08-18 20:20:55 +0100348001DE6000,"Arcade Archives TERRA FORCE",online,playable,2021-04-16 20:03:27 +0100DFD016B7A000,"Arcade Archives TETRIS® THE GRAND MASTER",,playable,2024-06-23 01:50:29 +0100DC000983A000,"Arcade Archives THE NINJA WARRIORS",online;slow,ingame,2021-04-16 19:54:56 +0100AF300D2E8000,"Arcade Archives TIME PILOT",online,playable,2021-04-16 19:22:31 +010029D006ED8000,"Arcade Archives Traverse USA",online,playable,2021-04-15 08:11:06 +010042200BE0C000,"Arcade Archives URBAN CHAMPION",online,playable,2021-04-16 10:20:03 +01004EC00E634000,"Arcade Archives VS. GRADIUS",online,playable,2021-04-12 14:53:58 +010021D00812A000,"Arcade Archives VS. SUPER MARIO BROS.",online,playable,2021-04-08 14:48:11 +01001B000D8B6000,"Arcade Archives WILD WESTERN",online,playable,2021-04-16 10:11:36 +010050000D6C4000,"Arcade Classics Anniversary Collection",,playable,2021-06-03 13:55:10 +01005A8010C7E000,"ARCADE FUZZ",,playable,2020-08-15 12:37:36 +010077000F620000,"Arcade Spirits",,playable,2020-06-21 11:45:03 +0100E680149DC000,"Arcaea",,playable,2023-03-16 19:31:21 +01003C2010C78000,"Archaica: The Path Of Light",crash,nothing,2020-10-16 13:22:26 +01004DA012976000,"Area 86",,playable,2020-12-16 16:45:52 +0100691013C46000,"ARIA CHRONICLE",,playable,2022-11-16 13:50:55 +0100D4A00B284000,"ARK: Survival Evolved",gpu;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56 +0100C56012C96000,"Arkanoid vs. Space Invaders",services,ingame,2021-01-21 12:50:30 +010069A010606000,"Arkham Horror: Mother's Embrace",nvdec,playable,2021-04-19 15:40:55 +0100C5B0113A0000,"Armed 7 DX",,playable,2020-12-14 11:49:56 +010070A00A5F4000,"Armello",nvdec,playable,2021-01-07 11:43:26 +0100A5400AC86000,"ARMS Demo",,playable,2021-02-10 16:30:13 +01009B500007C000,"ARMS™",ldn-works;LAN,playable,2024-08-28 07:49:24 +0100184011B32000,"Arrest of a stone Buddha",crash,nothing,2022-12-07 16:55:00 +01007AB012102000,"Arrog",,playable,2020-12-16 17:20:50 +01008EC006BE2000,"Art of Balance",gpu;ldn-works,ingame,2022-07-21 17:13:57 +010062F00CAE2000,"Art of Balance DEMO",gpu;slow,ingame,2021-02-10 17:17:12 +01006AA013086000,"Art Sqool",nvdec,playable,2022-10-16 20:42:37 +0100CDD00DA70000,"Artifact Adventure Gaiden DX",,playable,2020-12-16 17:49:25 +0100C2500CAB6000,"Ary and the Secret of Seasons",,playable,2022-10-07 20:45:09 +0100C9F00AAEE000,"ASCENDANCE",,playable,2021-01-05 10:54:40 +0100D5800DECA000,"Asemblance",UE4;gpu,ingame,2020-12-16 18:01:23 +0100E4C00DE30000,"Ash of Gods: Redemption",deadlock,nothing,2020-08-10 18:08:32 +010027B00E40E000,"Ashen",nvdec;online-broken;UE4,playable,2022-09-17 12:19:14 +01007B000C834000,"Asphalt Legends Unite",services;crash;online-broken,menus,2022-12-07 13:28:29 +01007F600B134000,"Assassin's Creed® III: Remastered",nvdec,boots,2024-06-25 20:12:11 +010044700DEB0000,"Assassin’s Creed®: The Rebel Collection",gpu,ingame,2024-05-19 07:58:56 +0100DF200B24C000,"Assault Android Cactus+",,playable,2021-06-03 13:23:55 +0100BF8012A30000,"Assault ChaingunS KM",crash;gpu,ingame,2020-12-14 12:48:34 +0100C5E00E540000,"Assault on Metaltron Demo",,playable,2021-02-10 19:48:06 +010057A00C1F6000,"Astebreed",,playable,2022-07-21 17:33:54 +010081500EA1E000,"Asterix & Obelix XXL 3 - The Crystal Menhir",gpu;nvdec;regression,ingame,2022-11-28 14:19:23 +0100F46011B50000,"Asterix & Obelix XXL: Romastered",gpu;nvdec;opengl,ingame,2023-08-16 21:22:06 +01007300020FA000,"ASTRAL CHAIN",,playable,2024-07-17 18:02:19 +0100E5F00643C000,"Astro Bears Party",,playable,2020-05-28 11:21:58 +0100F0400351C000,"Astro Duel Deluxe",32-bit,playable,2021-06-03 11:21:48 +0100B80010C48000,"Astrologaster",cpu;32-bit;crash,nothing,2023-06-28 15:39:31 +0100DF401249C000,"AstroWings: Space War",,playable,2020-12-14 13:10:44 +010099801870E000,"Atari 50: The Anniversary Celebration",slow,playable,2022-11-14 19:42:10 +010088600C66E000,"Atelier Arland series Deluxe Pack",nvdec,playable,2021-04-08 15:33:15 +0100D9D00EE8C000,"Atelier Ayesha: The Alchemist of Dusk DX",crash;nvdec;Needs Update,menus,2021-11-24 07:29:54 +0100E5600EE8E000,"Atelier Escha & Logy: Alchemists of the Dusk Sky DX",nvdec,playable,2022-11-20 16:01:41 +010023201421E000,"Atelier Firis: The Alchemist and the Mysterious Journey DX",gpu;nvdec,ingame,2022-10-25 22:46:19 +0100B1400CD50000,"Atelier Lulua ~The Scion of Arland~",nvdec,playable,2020-12-16 14:29:19 +010009900947A000,"Atelier Lydie & Suelle ~The Alchemists and the Mysterious Paintings~",nvdec,playable,2021-06-03 18:37:01 +01001A5014220000,"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings DX",,playable,2022-10-25 23:06:20 +0100ADD00C6FA000,"Atelier Meruru ~The Apprentice of Arland~ DX",nvdec,playable,2020-06-12 00:50:48 +01002D700B906000,"Atelier Rorona Arland no Renkinjutsushi DX (JP)",nvdec,playable,2022-12-02 17:26:54 +01009A9012022000,"Atelier Ryza 2: Lost Legends & the Secret Fairy",,playable,2022-10-16 21:06:06 +0100D1900EC80000,"Atelier Ryza: Ever Darkness & the Secret Hideout",,playable,2023-10-15 16:36:50 +010005C00EE90000,"Atelier Shallie: Alchemists of the Dusk Sea DX",nvdec,playable,2020-11-25 20:54:12 +010082A01538E000,"Atelier Sophie 2: The Alchemist of the Mysterious Dream",crash,ingame,2022-12-01 04:34:03 +01009BC00C6F6000,"Atelier Totori ~The Adventurer of Arland~ DX",nvdec,playable,2020-06-12 01:04:56 +0100B9400FA38000,"ATOM RPG",nvdec,playable,2022-10-22 10:11:48 +01005FE00EC4E000,"Atomic Heist",,playable,2022-10-16 21:24:32 +0100AD30095A4000,"Atomicrops",,playable,2022-08-06 10:05:07 +01000D1006CEC000,"ATOMIK: RunGunJumpGun",,playable,2020-12-14 13:19:24 +0100FB500631E000,"ATOMINE",gpu;nvdec;slow,playable,2020-12-14 18:56:50 +010039600E7AC000,"Attack of the Toy Tanks",slow,ingame,2020-12-14 12:59:12 +010034500641A000,"Attack on Titan 2",,playable,2021-01-04 11:40:01 +01000F600B01E000,"ATV Drift & Tricks",UE4;online,playable,2021-04-08 17:29:17 +0100AA800DA42000,"Automachef",,playable,2020-12-16 19:51:25 +01006B700EA6A000,"Automachef Demo",,playable,2021-02-10 20:35:37 +0100B280106A0000,"Aviary Attorney: Definitive Edition",,playable,2020-08-09 20:32:12 +010064600F982000,"AVICII Invector",,playable,2020-10-25 12:12:56 +0100E100128BA000,"AVICII Invector Demo",,playable,2021-02-10 21:04:58 +01008FB011248000,"AvoCuddle",,playable,2020-09-02 14:50:13 +0100085012D64000,"Awakening of Cthulhu",UE4,playable,2021-04-26 13:03:07 +01002F1005F3C000,"Away: Journey To The Unexpected",nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04 +0100B8C00CFCE000,"Awesome Pea",,playable,2020-10-11 12:39:23 +010023800D3F2000,"Awesome Pea (Demo)",,playable,2021-02-10 21:48:21 +0100B7D01147E000,"Awesome Pea 2",,playable,2022-10-01 12:34:19 +0100D2011E28000,"Awesome Pea 2 (Demo)",crash,nothing,2021-02-10 22:08:27 +0100DA3011174000,"AXES",,playable,2021-04-08 13:01:58 +0100052004384000,"Axiom Verge",,playable,2020-10-20 01:07:18 +010075400DEC6000,"Ayakashi Koi Gikyoku《Trial version》",,playable,2021-02-10 22:22:11 +01006AF012FC8000,"Azur Lane: Crosswave",UE4;nvdec,playable,2021-04-05 15:15:25 +0100C7D00DE24000,"Azuran Tales: TRIALS",,playable,2020-08-12 15:23:07 +01006FB00990E000,"Azure Reflections",nvdec;online,playable,2021-04-08 13:18:25 +01004E90149AA000,"Azure Striker GUNVOLT 3",,playable,2022-08-10 13:46:49 +0100192003FA4000,"Azure Striker GUNVOLT: STRIKER PACK",32-bit,playable,2024-02-10 23:51:21 +010031D012BA4000,"Azurebreak Heroes",,playable,2020-12-16 21:26:17 +01009B901145C000,"B.ARK",nvdec,playable,2022-11-17 13:35:02 +01002CD00A51C000,"Baba Is You",,playable,2022-07-17 05:36:54 +0100F4100AF16000,"Back to Bed",nvdec,playable,2020-12-16 20:52:04 +0100FEA014316000,"Backworlds",,playable,2022-10-25 23:20:34 +0100EAF00E32E000,"Bacon Man: An Adventure",crash;nvdec,menus,2021-11-20 02:36:21 +01000CB00D094000,"Bad Dream: Coma",deadlock,boots,2023-08-03 00:54:18 +0100B3B00D81C000,"Bad Dream: Fever",,playable,2021-06-04 18:33:12 +0100E98006F22000,"Bad North",,playable,2022-07-17 13:44:25 +010075000D092000,"Bad North Demo",,playable,2021-02-10 22:48:38 +01004C70086EC000,"BAFL - Brakes Are For Losers",,playable,2021-01-13 08:32:51 +010076B011EC8000,"Baila Latino",,playable,2021-04-14 16:40:24 +0100730011BDC000,"Bakugan: Champions of Vestroia",,playable,2020-11-06 19:07:39 +01008260138C4000,"Bakumatsu Renka SHINSENGUMI",,playable,2022-10-25 23:37:31 +0100438012EC8000,"BALAN WONDERWORLD",nvdec;UE4,playable,2022-10-22 13:08:43 +0100E48013A34000,"Balan Wonderworld Demo",gpu;services;UE4;demo,ingame,2023-02-16 20:05:07 +0100CD801CE5E000,"Balatro",,ingame,2024-04-21 02:01:53 +010010A00DA48000,"Baldur's Gate and Baldur's Gate II: Enhanced Editions",32-bit,playable,2022-09-12 23:52:15 +0100BC400FB64000,"Balthazar's Dream",,playable,2022-09-13 00:13:22 +01008D30128E0000,"Bamerang",,playable,2022-10-26 00:29:39 +010013C010C5C000,"Banner of the Maid",,playable,2021-06-14 15:23:37 +0100388008758000,"Banner Saga 2",crash,boots,2021-01-13 08:56:09 +010071E00875A000,"Banner Saga 3",slow,boots,2021-01-11 16:53:57 +0100CE800B94A000,"Banner Saga Trilogy",slow,playable,2024-03-06 11:25:20 +0100425009FB2000,"Baobabs Mausoleum Ep.1: Ovnifagos Don't Eat Flamingos",,playable,2020-07-15 05:06:29 +010079300E976000,"Baobabs Mausoleum Ep.2: 1313 Barnabas Dead End Drive",,playable,2020-12-17 11:22:50 +01006D300FFA6000,"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",nvdec,playable,2020-12-17 11:43:10 +0100D3000AEC2000,"Baobabs Mausoleum: DEMO",,playable,2021-02-10 22:59:25 +01003350102E2000,"Barbarous: Tavern of Emyr",,playable,2022-10-16 21:50:24 +0100F7E01308C000,"Barbearian",Needs Update;gpu,ingame,2021-06-28 16:27:50 +010039C0106C6000,"Baron: Fur Is Gonna Fly",crash,boots,2022-02-06 02:05:43 +0100FB000EB96000,"Barry Bradford's Putt Panic Party",nvdec,playable,2020-06-17 01:08:34 +01004860080A0000,"Baseball Riot",,playable,2021-06-04 18:07:27 +010038600B27E000,"Bastion",,playable,2022-02-15 14:15:24 +01005F3012748000,"Batbarian: Testament of the Primordials",,playable,2020-12-17 12:00:59 +0100C07018CA6000,"Baten Kaitos I & II HD Remaster (Europe/USA)",services;Needs Update,boots,2023-10-01 00:44:32 +0100F28018CA4000,"Baten Kaitos I & II HD Remaster (Japan)",services;Needs Update,boots,2023-10-24 23:11:54 +0100011005D92000,"Batman - The Telltale Series",nvdec;slow,playable,2021-01-11 18:19:35 +01003F00163CE000,"Batman: Arkham City",,playable,2024-09-11 00:30:19 +0100ACD0163D0000,"Batman: Arkham Knight",gpu;mac-bug,ingame,2024-06-25 20:24:42 +0100E6300AA3A000,"Batman: The Enemy Within",crash,nothing,2020-10-16 05:49:27 +0100747011890000,"Battle Axe",,playable,2022-10-26 00:38:01 +0100551001D88000,"Battle Chasers: Nightwar",nvdec;slow,playable,2021-01-12 12:27:34 +0100CC2001C6C000,"Battle Chef Brigade Deluxe",,playable,2021-01-11 14:16:28 +0100DBB00CAEE000,"Battle Chef Brigade Demo",,playable,2021-02-10 23:15:07 +0100A3B011EDE000,"Battle Hunters",gpu,ingame,2022-11-12 09:19:17 +010035E00C1AE000,"Battle of Kings",slow,playable,2020-12-17 12:45:23 +0100D2800EB40000,"Battle Planet - Judgement Day",,playable,2020-12-17 14:06:20 +0100C4D0093EA000,"Battle Princess Madelyn",,playable,2021-01-11 13:47:23 +0100A7500DF64000,"Battle Princess Madelyn Royal Edition",,playable,2022-09-26 19:14:49 +010099B00E898000,"Battle Supremacy - Evolution",gpu;nvdec,boots,2022-02-17 09:02:50 +0100DEB00D5A8000,"Battle Worlds: Kronos",nvdec,playable,2021-06-04 17:48:02 +0100650010DD4000,"Battleground",crash,ingame,2021-09-06 11:53:23 +010044E00D97C000,"BATTLESLOTHS",,playable,2020-10-03 08:32:22 +010059C00E39C000,"Battlestar Galactica Deadlock",nvdec,playable,2020-06-27 17:35:44 +01006D800A988000,"Battlezone Gold Edition",gpu;ldn-untested;online,boots,2021-06-04 18:36:05 +010048300D5C2000,"BATTLLOON",,playable,2020-12-17 15:48:23 +0100194010422000,"bayala - the game",,playable,2022-10-04 14:09:25 +0100CF5010FEC000,"Bayonetta Origins: Cereza and the Lost Demon™",gpu,ingame,2024-02-27 01:39:49 +010002801A3FA000,"Bayonetta Origins: Cereza and the Lost Demon™ Demo",gpu;demo,ingame,2024-02-17 06:06:28 +010076F0049A2000,"Bayonetta™",audout,playable,2022-11-20 15:51:59 +01007960049A0000,"Bayonetta™ 2",nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09 +01004A4010FEA000,"Bayonetta™ 3",gpu;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33 +01002FA00DE72000,"BDSM: Big Drunk Satanic Massacre",,playable,2021-03-04 21:28:22 +01003A1010E3C000,"BE-A Walker",slow,ingame,2020-09-02 15:00:31 +010095C00406C000,"Beach Buggy Racing",online,playable,2021-04-13 23:16:50 +010020700DE04000,"Bear With Me: The Lost Robots",nvdec,playable,2021-02-27 14:20:10 +010024200E97E800,"Bear With Me: The Lost Robots Demo",nvdec,playable,2021-02-12 22:38:12 +0100C0E014A4E000,"Bear's Restaurant",,playable,2024-08-11 21:26:59 +,"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",crash,menus,2020-10-04 06:12:08 +01009C300BB4C000,"Beat Cop",,playable,2021-01-06 19:26:48 +01002D20129FC000,"Beat Me!",online-broken,playable,2022-10-16 21:59:26 +01006B0014590000,"BEAUTIFUL DESOLATION",gpu;nvdec,ingame,2022-10-26 10:34:38 +01009E700DB2E000,"Bee Simulator",UE4;crash,boots,2020-07-15 12:13:13 +010018F007786000,"BeeFense BeeMastered",,playable,2022-11-17 15:38:12 +0100558010B26000,"Behold the Kickmen",,playable,2020-06-27 12:49:45 +0100D1300C1EA000,"Beholder: Complete Edition",,playable,2020-10-16 12:48:58 +01006E1004404000,"Ben 10",nvdec,playable,2021-02-26 14:08:35 +01009CD00E3AA000,"Ben 10: Power Trip!",nvdec,playable,2022-10-09 10:52:12 +010074500BBC4000,"Bendy and the Ink Machine",,playable,2023-05-06 20:35:39 +010068600AD16000,"Beyblade Burst Battle Zero",services;crash;Needs Update,menus,2022-11-20 15:48:32 +010056500CAD8000,"Beyond Enemy Lines: Covert Operations",UE4,playable,2022-10-01 13:11:50 +0100B8F00DACA000,"Beyond Enemy Lines: Essentials",nvdec;UE4,playable,2022-09-26 19:48:16 +0100BF400AF38000,"Bibi & Tina – Adventures with Horses",nvdec;slow,playable,2021-01-13 08:58:09 +010062400E69C000,"Bibi & Tina at the horse farm",,playable,2021-04-06 16:31:39 +01005FF00AF36000,"Bibi Blocksberg – Big Broom Race 3",,playable,2021-01-11 19:07:16 +010062B00A874000,"Big Buck Hunter Arcade",nvdec,playable,2021-01-12 20:31:39 +010088100C35E000,"Big Crown: Showdown",nvdec;online;ldn-untested,menus,2022-07-17 18:25:32 +0100A42011B28000,"Big Dipper",,playable,2021-06-14 15:08:19 +010077E00F30E000,"Big Pharma",,playable,2020-07-14 15:27:30 +010007401287E000,"BIG-Bobby-Car - The Big Race",slow,playable,2020-12-10 14:25:06 +010057700FF7C000,"Billion Road",,playable,2022-11-19 15:57:43 +010087D008D64000,"BINGO for Nintendo Switch",,playable,2020-07-23 16:17:36 +01004BA017CD6000,"Biomutant",crash,ingame,2024-05-16 15:46:36 +01002620102C6000,"BioShock 2 Remastered",services,nothing,2022-10-29 14:39:22 +0100D560102C8000,"BioShock Infinite: The Complete Edition",services-horizon;crash,nothing,2024-08-11 21:35:01 +0100AD10102B2000,"BioShock Remastered",services-horizon;crash;Needs Update,boots,2024-06-06 01:08:52 +010053B0117F8000,"Biped",nvdec,playable,2022-10-01 13:32:58 +01001B700B278000,"Bird Game +",online,playable,2022-07-17 18:41:57 +0100B6B012FF4000,"Birds and Blocks Demo",services;demo,boots,2022-04-10 04:53:03 +0100E62012D3C000,"BIT.TRIP RUNNER",,playable,2022-10-17 14:23:24 +01000AD012D3A000,"BIT.TRIP VOID",,playable,2022-10-17 14:31:23 +0100A0800EA9C000,"Bite the Bullet",,playable,2020-10-14 23:10:11 +010026E0141C8000,"Bitmaster",,playable,2022-12-13 14:05:51 +010061D00FD26000,"Biz Builder Delux",slow,playable,2020-12-15 21:36:25 +0100DD1014AB8000,"Black Book",nvdec,playable,2022-12-13 16:38:53 +010049000B69E000,"Black Future '88",nvdec,playable,2022-09-13 11:24:37 +01004BE00A682000,"Black Hole Demo",,playable,2021-02-12 23:02:17 +0100C3200E7E6000,"Black Legend",gpu;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48 +010043A012A32000,"Blackjack Hands",,playable,2020-11-30 14:04:51 +0100A0A00E660000,"Blackmoor 2",online-broken,playable,2022-09-26 20:26:34 +010032000EA2C000,"Blacksad: Under the Skin",,playable,2022-09-13 11:38:04 +01006B400C178000,"Blacksea Odyssey",nvdec,playable,2022-10-16 22:14:34 +010068E013450000,"Blacksmith of the Sand Kingdom",,playable,2022-10-16 22:37:44 +0100C4400CB7C000,"BLADE ARCUS Rebellion From Shining",,playable,2022-07-17 18:52:28 +0100EA1018A2E000,"Blade Assault",audio,nothing,2024-04-29 14:32:50 +01009CC00E224000,"Blade II - The Return Of Evil",audio;crash;UE4,ingame,2021-11-14 02:49:59 +01005950022EC000,"Blade Strangers",nvdec,playable,2022-07-17 19:02:43 +0100DF0011A6A000,"Bladed Fury",,playable,2022-10-26 11:36:26 +0100CFA00CC74000,"Blades of Time",deadlock;online,boots,2022-07-17 19:19:58 +01006CC01182C000,"Blair Witch",nvdec;UE4,playable,2022-10-01 14:06:16 +010039501405E000,"Blanc",gpu;slow,ingame,2023-02-22 14:00:13 +0100698009C6E000,"Blasphemous",nvdec,playable,2021-03-01 12:15:31 +0100302010338000,"Blasphemous Demo",,playable,2021-02-12 23:49:56 +0100225000FEE000,"Blaster Master Zero",32-bit,playable,2021-03-05 13:22:33 +01005AA00D676000,"Blaster Master Zero 2",,playable,2021-04-08 15:22:59 +010025B002E92000,"Blaster Master Zero Demo",,playable,2021-02-12 23:59:06 +0100E53013E1C000,"Blastoid Breakout",,playable,2021-01-25 23:28:02 +0100EE800C93E000,"BLAZBLUE CENTRALFICTION Special Edition",nvdec,playable,2020-12-15 23:50:04 +0100B61008208000,"BLAZBLUE CROSS TAG BATTLE",nvdec;online,playable,2021-01-05 20:29:37 +010021A00DE54000,"Blazing Beaks",,playable,2020-06-04 20:37:06 +0100C2700C252000,"Blazing Chrome",,playable,2020-11-16 04:56:54 +010091700EA2A000,"Bleep Bloop DEMO",nvdec,playable,2021-02-13 00:20:53 +010089D011310000,"Blind Men",audout,playable,2021-02-20 14:15:38 +0100743013D56000,"Blizzard® Arcade Collection",nvdec,playable,2022-08-03 19:37:26 +0100F3500A20C000,"BlobCat",,playable,2021-04-23 17:09:30 +0100E1C00DB6C000,"Block-a-Pix Deluxe Demo",,playable,2021-02-13 00:37:39 +0100C6A01AD56000,"Bloo Kid",,playable,2024-05-01 17:18:04 +010055900FADA000,"Bloo Kid 2",,playable,2024-05-01 17:16:57 +0100EE5011DB6000,"Blood and Guts Bundle",,playable,2020-06-27 12:57:35 +01007E700D17E000,"Blood Waves",gpu,ingame,2022-07-18 13:04:46 +0100E060102AA000,"Blood will be Spilled",nvdec,playable,2020-12-17 03:02:03 +01004B800AF5A000,"Bloodstained: Curse of the Moon",,playable,2020-09-04 10:42:17 +01004680124E6000,"Bloodstained: Curse of the Moon 2",,playable,2020-09-04 10:56:27 +010025A00DF2A000,"Bloodstained: Ritual of the Night",nvdec;UE4,playable,2022-07-18 14:27:35 +0100E510143EC000,"Bloody Bunny, The Game",nvdec;UE4,playable,2022-10-22 13:18:55 +0100B8400A1C6000,"Bloons TD 5",Needs Update;audio;gpu;services,boots,2021-04-18 23:02:46 +01000EB01023E000,"Blossom Tales Demo",,playable,2021-02-13 14:22:53 +0100C1000706C000,"Blossom Tales: The Sleeping King",,playable,2022-07-18 16:43:07 +010073B010F6E000,"Blue Fire",UE4,playable,2022-10-22 14:46:11 +0100721013510000,"Body of Evidence",,playable,2021-04-25 22:22:11 +0100AD1010CCE000,"Bohemian Killing",vulkan-backend-bug,playable,2022-09-26 22:41:37 +010093700ECEC000,"Boku to Nurse no Kenshuu Nisshi",,playable,2022-11-21 20:38:34 +01001D900D9AC000,"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",slow;crash;Needs Update,ingame,2022-04-24 22:46:04 +0100317014B7C000,"Bomb Rush Cyberfunk",,playable,2023-09-28 19:51:57 +01007900080B6000,"Bomber Crew",,playable,2021-06-03 14:21:28 +0100A1F012948000,"Bomber Fox",nvdec,playable,2021-04-19 17:58:13 +010087300445A000,"Bombslinger",services,menus,2022-07-19 12:53:15 +01007A200F452000,"Book of Demons",,playable,2022-09-29 12:03:43 +010054500F564000,"Bookbound Brigade",,playable,2020-10-09 14:30:29 +01002E6013ED8000,"Boom Blaster",,playable,2021-03-24 10:55:56 +010081A00EE62000,"Boomerang Fu",,playable,2024-07-28 01:12:41 +010069F0135C4000,"Boomerang Fu Demo Version",demo,playable,2021-02-13 14:38:13 +01009970122E4000,"Borderlands 3 Ultimate Edition",gpu,ingame,2024-07-15 04:38:14 +010064800F66A000,"Borderlands: Game of the Year Edition",slow;online-broken;ldn-untested,ingame,2023-07-23 21:10:36 +010096F00FF22000,"Borderlands: The Handsome Collection",,playable,2022-04-22 18:35:07 +010007400FF24000,"Borderlands: The Pre-Sequel",nvdec,playable,2021-06-09 20:17:10 +01008E500AFF6000,"Boreal Blade",gpu;ldn-untested;online,ingame,2021-06-11 15:37:14 +010092C013FB8000,"BORIS THE ROCKET",,playable,2022-10-26 13:23:09 +010076F00EBE4000,"BOSSGARD",online-broken,playable,2022-10-04 14:21:13 +010069B00EAC8000,"Bot Vice Demo",crash;demo,ingame,2021-02-13 14:52:42 +010081100FE08000,"Bouncy Bob 2",,playable,2020-07-14 16:51:53 +0100E1200DC1A000,"Bounty Battle",nvdec,playable,2022-10-04 14:40:51 +0100B4700C57E000,"Bow to Blood: Last Captain Standing",slow,playable,2020-10-23 10:51:21 +010040800BA8A000,"Box Align",crash;services,nothing,2020-04-03 17:26:56 +010018300D006000,"BOXBOY! + BOXGIRL!™",,playable,2020-11-08 01:11:54 +0100B7200E02E000,"BOXBOY! + BOXGIRL!™ Demo",demo,playable,2021-02-13 14:59:08 +0100CA400B6D0000,"BQM -BlockQuest Maker-",online,playable,2020-07-31 20:56:50 +0100E87017D0E000,"Bramble: The Mountain King",services-horizon,playable,2024-03-06 09:32:17 +01000F5003068000,"Brave Dungeon + Dark Witch Story:COMBAT",,playable,2021-01-12 21:06:34 +01006DC010326000,"BRAVELY DEFAULT™ II",gpu;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26 +0100B6801137E000,"Bravely Default™ II Demo",gpu;crash;UE4;demo,ingame,2022-09-27 05:39:47 +010081501371E000,"BraveMatch",UE4,playable,2022-10-26 13:32:15 +0100F60017D4E000,"Bravery and Greed",gpu;deadlock,boots,2022-12-04 02:23:47 +0100A42004718000,"BRAWL",nvdec;slow,playable,2020-06-04 14:23:18 +010068F00F444000,"Brawl Chess",nvdec,playable,2022-10-26 13:59:17 +0100C6800B934000,"Brawlhalla",online;opengl,playable,2021-06-03 18:26:09 +010060200A4BE000,"Brawlout",ldn-untested;online,playable,2021-06-04 17:35:35 +0100C1B00E1CA000,"Brawlout Demo",demo,playable,2021-02-13 22:46:53 +010022C016DC8000,"Breakout: Recharged",slow,ingame,2022-11-06 15:32:57 +01000AA013A5E000,"Breathedge",UE4;nvdec,playable,2021-05-06 15:44:28 +01003D50100F4000,"Breathing Fear",,playable,2020-07-14 15:12:29 +010026800BB06000,"Brick Breaker",nvdec;online,playable,2020-12-15 18:26:23 +01002AD0126AE000,"Bridge Constructor: The Walking Dead",gpu;slow,ingame,2020-12-11 17:31:32 +01000B1010D8E000,"Bridge! 3",,playable,2020-10-08 20:47:24 +010011000EA7A000,"BRIGANDINE The Legend of Runersia",,playable,2021-06-20 06:52:25 +0100703011258000,"BRIGANDINE The Legend of Runersia Demo",,playable,2021-02-14 14:44:10 +01000BF00BE40000,"Bring Them Home",UE4,playable,2021-04-12 14:14:43 +010060A00B53C000,"Broforce",ldn-untested;online,playable,2021-05-28 12:23:38 +0100EDD0068A6000,"Broken Age",,playable,2021-06-04 17:40:32 +0100A5800F6AC000,"Broken Lines",,playable,2020-10-16 00:01:37 +01001E60085E6000,"Broken Sword 5 - the Serpent's Curse",,playable,2021-06-04 17:28:59 +0100F19011226000,"Brotherhood United Demo",demo,playable,2021-02-14 21:10:57 +01000D500D08A000,"Brothers: A Tale of Two Sons",nvdec;UE4,playable,2022-07-19 14:02:22 +0100B2700E90E000,"Brunch Club",,playable,2020-06-24 13:54:07 +010010900F7B4000,"Bubble Bobble 4 Friends: The Baron is Back!",nvdec,playable,2021-06-04 15:27:55 +0100DBE00C554000,"Bubsy: Paws on Fire!",slow,ingame,2023-08-24 02:44:51 +0100089010A92000,"Bucket Knight",crash,ingame,2020-09-04 13:11:24 +0100F1B010A90000,"Bucket Knight demo",demo,playable,2021-02-14 21:23:09 +01000D200AC0C000,"Bud Spencer & Terence Hill - Slaps And Beans",,playable,2022-07-17 12:37:00 +010051A00E99E000,"Bug Fables: The Everlasting Sapling",,playable,2020-06-09 11:27:00 +01003DD00D658000,"Bulletstorm: Duke of Switch Edition",nvdec,playable,2022-03-03 08:30:24 +01006BB00E8FA000,"BurgerTime Party!",slow,playable,2020-11-21 14:11:53 +01005780106E8000,"BurgerTime Party! Demo",demo,playable,2021-02-14 21:34:16 +010078C00DB40000,"Buried Stars",,playable,2020-09-07 14:11:58 +0100DBF01000A000,"Burnout™ Paradise Remastered",nvdec;online,playable,2021-06-13 02:54:46 +010066F00C76A000,"Bury me, my Love",,playable,2020-11-07 12:47:37 +010030D012FF6000,"Bus Driver Simulator",,playable,2022-10-17 13:55:27 +0100A9101418C000,"BUSTAFELLOWS",nvdec,playable,2020-10-17 20:04:41 +0100177005C8A000,"BUTCHER",,playable,2021-01-11 18:50:17 +01000B900D8B0000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda",slow;nvdec,playable,2024-04-01 22:43:40 +010065700EE06000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda Demo",demo;gpu;nvdec,ingame,2021-02-14 21:48:15 +01005C00117A8000,"Café Enchanté",,playable,2020-11-13 14:54:25 +010060400D21C000,"Cafeteria Nipponica Demo",demo,playable,2021-02-14 22:11:35 +0100699012F82000,"Cake Bash Demo",crash;demo,ingame,2021-02-14 22:21:15 +01004FD00D66A000,"Caladrius Blaze",deadlock;nvdec,nothing,2022-12-07 16:44:37 +01004B500AB88000,"Calculation Castle : Greco's Ghostly Challenge Addition",32-bit,playable,2020-11-01 23:40:11 +010045500B212000,"Calculation Castle : Greco's Ghostly Challenge Division",32-bit,playable,2020-11-01 23:54:55 +0100ECE00B210000,"Calculation Castle : Greco's Ghostly Challenge Multiplication",32-bit,playable,2020-11-02 00:04:33 +0100A6500B176000,"Calculation Castle : Greco's Ghostly Challenge Subtraction",32-bit,playable,2020-11-01 23:47:42 +010004701504A000,"Calculator",,playable,2021-06-11 13:27:20 +010013A00E750000,"Calico",,playable,2022-10-17 14:44:28 +010046000EE40000,"Call of Cthulhu",nvdec;UE4,playable,2022-12-18 03:08:30 +0100B4700BFC6000,"Call of Juarez: Gunslinger",gpu;nvdec,ingame,2022-09-17 16:49:46 +0100593008BDC000,"Can't Drive This",,playable,2022-10-22 14:55:17 +0100E4600B166000,"Candle: The Power of the Flame",nvdec,playable,2020-05-26 12:10:20 +01001E0013208000,"Capcom Arcade Stadium",,playable,2021-03-17 05:45:14 +010094E00B52E000,"Capcom Beat 'Em Up Bundle",,playable,2020-03-23 18:31:24 +0100F6400A77E000,"CAPCOM BELT ACTION COLLECTION",online;ldn-untested,playable,2022-07-21 20:51:23 +01009BF0072D4000,"Captain Toad™: Treasure Tracker",32-bit,playable,2024-04-25 00:50:16 +01002C400B6B6000,"Captain Toad™: Treasure Tracker Demo",32-bit;demo,playable,2021-02-14 22:36:09 +0100EAE010560000,"Captain Tsubasa: Rise of New Champions",online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50 +01002320137CC000,"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",slow,playable,2021-02-14 22:45:35 +010048800D95C000,"Car Mechanic Manager",,playable,2020-07-23 18:50:17 +01007BD00AE70000,"Car Quest",deadlock,menus,2021-11-18 08:59:18 +0100DA70115E6000,"Caretaker",,playable,2022-10-04 14:52:24 +0100DD6014870000,"Cargo Crew Driver",,playable,2021-04-19 12:54:22 +010088C0092FE000,"Carnival Games®",nvdec,playable,2022-07-21 21:01:22 +01005F5011AC4000,"Carnivores: Dinosaur Hunt",,playable,2022-12-14 18:46:06 +0100B1600E9AE000,"CARRION",crash,nothing,2020-08-13 17:15:12 +01008D1001512000,"Cars 3: Driven to Win",gpu,ingame,2022-07-21 21:21:05 +0100810012A1A000,"Carto",,playable,2022-09-04 15:37:06 +0100085003A2A000,"Cartoon Network Battle Crashers",,playable,2022-07-21 21:55:40 +0100C4C0132F8000,"CASE 2: Animatronics Survival",nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03 +010066F01A0E0000,"Cassette Beasts",,playable,2024-07-22 20:38:43 +010001300D14A000,"Castle Crashers Remastered",gpu,boots,2024-08-10 09:21:20 +0100F6D01060E000,"Castle Crashers Remastered Demo",gpu;demo,boots,2022-04-10 10:57:10 +01003C100445C000,"Castle of Heart",nvdec,playable,2022-07-21 23:10:45 +0100F5500FA0E000,"Castle of no Escape 2",,playable,2022-09-13 13:51:42 +0100DA2011F18000,"Castle Pals",,playable,2021-03-04 21:00:33 +010097C00AB66000,"CastleStorm",nvdec,playable,2022-07-21 22:49:14 +010007400EB64000,"CastleStorm II",UE4;crash;nvdec,boots,2020-10-25 11:22:44 +01001A800D6BC000,"Castlevania Anniversary Collection",audio,playable,2020-05-23 11:40:29 +010076000C86E000,"Cat Girl Without Salad: Amuse-Bouche",,playable,2022-09-03 13:01:47 +0100A2F006FBE000,"Cat Quest",,playable,2020-04-02 23:09:32 +01008BE00E968000,"Cat Quest II",,playable,2020-07-06 23:52:09 +0100E86010220000,"Cat Quest II Demo",demo,playable,2021-02-15 14:11:57 +0100BAE0077E4000,"Catherine Full Body for Nintendo Switch (JP)",Needs Update;gpu,ingame,2021-02-21 18:06:11 +0100BF00112C0000,"Catherine: Full Body",nvdec,playable,2023-04-02 11:00:37 +010004400B28A000,"Cattails",,playable,2021-06-03 14:36:57 +0100B7D0022EE000,"Cave Story+",,playable,2020-05-22 09:57:25 +01001A100C0E8000,"Caveblazers",slow,ingame,2021-06-09 17:57:28 +01006DB004566000,"Caveman Warriors",,playable,2020-05-22 11:44:20 +010078700B2CC000,"Caveman Warriors Demo",demo,playable,2021-02-15 14:44:08 +01002B30028F6000,"Celeste",,playable,2020-06-17 10:14:40 +01006B000A666000,"Cendrillon palikA",gpu;nvdec,ingame,2022-07-21 22:52:24 +01007600115CE000,"CHAOS CODE -NEW SIGN OF CATASTROPHE-",crash;nvdec,boots,2022-04-04 12:24:21 +0100957016B90000,"CHAOS;HEAD NOAH",,playable,2022-06-02 22:57:19 +0100F52013A66000,"Charge Kid",gpu;audout,boots,2024-02-11 01:17:47 +0100DE200C350000,"Chasm",,playable,2020-10-23 11:03:43 +010034301A556000,"Chasm: The Rift",gpu,ingame,2024-04-29 19:02:48 +0100A5900472E000,"Chess Ultra",UE4,playable,2023-08-30 23:06:31 +0100E3C00A118000,"Chicken Assassin: Reloaded",,playable,2021-02-20 13:29:01 +0100713010E7A000,"Chicken Police – Paint it RED!",nvdec,playable,2020-12-10 15:10:11 +0100F6C00A016000,"Chicken Range",,playable,2021-04-23 12:14:23 +01002E500E3EE000,"Chicken Rider",,playable,2020-05-22 11:31:17 +0100CAC011C3A000,"Chickens Madness DEMO",UE4;demo;gpu;nvdec,ingame,2021-02-15 15:02:10 +01007D000AD8A000,"Child of Light® Ultimate Edition",nvdec,playable,2020-12-16 10:23:10 +01002DE00C250000,"Children of Morta",gpu;nvdec,ingame,2022-09-13 17:48:47 +0100C1A00AC3E000,"Children of Zodiarcs",,playable,2020-10-04 14:23:33 +010046F012A04000,"Chinese Parents",,playable,2021-04-08 12:56:41 +01005A001489A000,"Chiptune Arrange Sound(DoDonPachi Resurrection)",32-bit;crash,ingame,2024-01-25 14:37:32 +01006A30124CA000,"Chocobo GP",gpu;crash,ingame,2022-06-04 14:52:18 +0100BF600BF26000,"Chocobo's Mystery Dungeon EVERY BUDDY!",slow,playable,2020-05-26 13:53:13 +01000BA0132EA000,"Choices That Matter: And The Sun Went Out",,playable,2020-12-17 15:44:08 +,"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",gpu;nvdec,ingame,2020-09-28 17:58:04 +010039A008E76000,"ChromaGun",,playable,2020-05-26 12:56:42 +010006800E13A000,"Chronos: Before the Ashes",UE4;gpu;nvdec,ingame,2020-12-11 22:16:35 +010039700BA7E000,"Circle of Sumo",,playable,2020-05-22 12:45:21 +01008FA00D686000,"Circuits",,playable,2022-09-19 11:52:50 +0100D8800B87C000,"Cities: Skylines - Nintendo Switch™ Edition",,playable,2020-12-16 10:34:57 +0100E4200D84E000,"Citizens of Space",gpu,boots,2023-10-22 06:45:44 +0100D9C012900000,"Citizens Unite!: Earth x Space",gpu,ingame,2023-10-22 06:44:19 +01005E501284E000,"City Bus Driving Simulator",,playable,2021-06-15 21:25:59 +0100A3A00CC7E000,"CLANNAD",,playable,2021-06-03 17:01:02 +01007B501372C000,"CLANNAD Side Stories",,playable,2022-10-26 15:03:04 +01005ED0107F4000,"Clash Force",,playable,2022-10-01 23:45:48 +010009300AA6C000,"Claybook",slow;nvdec;online;UE4,playable,2022-07-22 11:11:34 +010058900F52E000,"Clea",crash,ingame,2020-12-15 16:22:56 +010045E0142A4000,"Clea 2",,playable,2021-04-18 14:25:18 +01008C100C572000,"Clock Zero ~Shuuen no Ichibyou~ Devote",nvdec,playable,2022-12-04 22:19:14 +0100DF9013AD4000,"Clocker",,playable,2021-04-05 15:05:13 +0100B7200DAC6000,"Close to the Sun",crash;nvdec;UE4,boots,2021-11-04 09:19:41 +010047700D540000,"Clubhouse Games™: 51 Worldwide Classics",ldn-works,playable,2024-05-21 16:12:57 +0100C1401CEDC000,"Clue",crash;online,menus,2020-11-10 09:23:48 +010085A00821A000,"ClusterPuck 99",,playable,2021-01-06 00:28:12 +010096900A4D2000,"Clustertruck",slow,ingame,2021-02-19 21:07:09 +01005790110F0000,"Cobra Kai: The Karate Kid Saga Continues",,playable,2021-06-17 15:59:13 +01002E700C366000,"COCOON",gpu,ingame,2024-03-06 11:33:08 +010034E005C9C000,"Code of Princess EX",nvdec;online,playable,2021-06-03 10:50:13 +010086100CDCA000,"CODE SHIFTER",,playable,2020-08-09 15:20:55 +010002400F408000,"Code: Realize ~Future Blessings~",nvdec,playable,2023-03-31 16:57:47 +0100CF800C810000,"Coffee Crisis",,playable,2021-02-20 12:34:52 +010066200E1E6000,"Coffee Talk",,playable,2020-08-10 09:48:44 +0100178009648000,"Coffin Dodgers",,playable,2021-02-20 14:57:41 +010035B01706E000,"Cold Silence",cpu;crash,nothing,2024-07-11 17:06:14 +010083E00F40E000,"Collar X Malice",nvdec,playable,2022-10-02 11:51:56 +0100E3B00F412000,"Collar X Malice -Unlimited-",nvdec,playable,2022-10-04 15:30:40 +01002A600D7FC000,"Collection of Mana",,playable,2020-10-19 19:29:45 +0100B77012266000,"COLLECTION of SaGa FINAL FANTASY LEGEND",,playable,2020-12-30 19:11:16 +010030800BC36000,"Collidalot",nvdec,playable,2022-09-13 14:09:27 +0100CA100C0BA000,"Color Zen",,playable,2020-05-22 10:56:17 +010039B011312000,"Colorgrid",,playable,2020-10-04 01:50:52 +0100A7000BD28000,"Coloring Book",,playable,2022-07-22 11:17:05 +010020500BD86000,"Colors Live",gpu;services;crash,boots,2023-02-26 02:51:07 +0100E2F0128B4000,"Colossus Down",,playable,2021-02-04 20:49:50 +0100C4D00D16A000,"Commander Keen in Keen Dreams",gpu,ingame,2022-08-04 20:34:20 +0100E400129EC000,"Commander Keen in Keen Dreams: Definitive Edition",,playable,2021-05-11 19:33:54 +010065A01158E000,"Commandos 2 - HD Remaster",gpu;nvdec,ingame,2022-08-10 21:52:27 +010015801308E000,"Conarium",UE4;nvdec,playable,2021-04-26 17:57:53 +0100971011224000,"Concept Destruction",,playable,2022-09-29 12:28:56 +010043700C9B0000,"Conduct TOGETHER!",nvdec,playable,2021-02-20 12:59:00 +01007EF00399C000,"Conga Master Party!",,playable,2020-05-22 13:22:24 +0100A5600FAC0000,"Construction Simulator 3 - Console Edition",,playable,2023-02-06 09:31:23 +0100A330022C2000,"Constructor Plus",,playable,2020-05-26 12:37:40 +0100DCA00DA7E000,"Contra Anniversary Collection",,playable,2022-07-22 11:30:12 +0100F2600D710000,"CONTRA: ROGUE CORPS",crash;nvdec;regression,menus,2021-01-07 13:23:35 +0100B8200ECA6000,"CONTRA: ROGUE CORPS Demo",gpu,ingame,2022-09-04 16:46:52 +01007D701298A000,"Contraptions",,playable,2021-02-08 18:40:50 +0100041013360000,"Control Ultimate Edition - Cloud Version",Needs Update;crash;services,nothing,2021-04-18 22:34:06 +010058800E90A000,"Convoy: A Tactical Roguelike",,playable,2020-10-15 14:43:50 +0100B82010B6C000,"Cook, Serve, Delicious! 3?!",,playable,2022-10-09 12:09:34 +010060700EFBA000,"Cooking Mama: Cookstar",crash;loader-allocator,menus,2021-11-20 03:19:35 +01001E400FD58000,"Cooking Simulator",,playable,2021-04-18 13:25:23 +0100DF9010206000,"Cooking Tycoons - 3 in 1 Bundle",,playable,2020-11-16 22:44:26 +01005350126E0000,"Cooking Tycoons 2 - 3 in 1 Bundle",,playable,2020-11-16 22:19:33 +0100C5A0115C4000,"CopperBell",,playable,2020-10-04 15:54:36 +010016400B1FE000,"Corpse Party: Blood Drive",nvdec,playable,2021-03-01 12:44:23 +0100CCB01B1A0000,"COSMIC FANTASY COLLECTION",,ingame,2024-05-21 17:56:37 +010067C00A776000,"Cosmic Star Heroine",,playable,2021-02-20 14:30:47 +01003DD00F94A000,"COTTOn Reboot! [ コットン リブート! ]",,playable,2022-05-24 16:29:24 +,"Cotton/Guardian Saturn Tribute Games",gpu,boots,2022-11-27 21:00:51 +01000E301107A000,"Couch Co-Op Bundle Vol. 2",nvdec,playable,2022-10-02 12:04:21 +0100C1E012A42000,"Country Tales",,playable,2021-06-17 16:45:39 +01003370136EA000,"Cozy Grove",gpu,ingame,2023-07-30 22:22:19 +010073401175E000,"Crash Bandicoot™ 4: It’s About Time",nvdec;UE4,playable,2024-03-17 07:13:45 +0100D1B006744000,"Crash Bandicoot™ N. Sane Trilogy",,playable,2024-02-11 11:38:14 +010007900FCE2000,"Crash Drive 2",online,playable,2020-12-17 02:45:46 +010046600BD0E000,"Crash Dummy",nvdec,playable,2020-05-23 11:12:43 +0100BF200CD74000,"Crashbots",,playable,2022-07-22 13:50:52 +010027100BD16000,"Crashlands",,playable,2021-05-27 20:30:06 +0100F9F00C696000,"Crash™ Team Racing Nitro-Fueled",gpu;nvdec;online-broken,ingame,2023-06-25 02:40:17 +0100BF7006BCA000,"Crawl",,playable,2020-05-22 10:16:05 +0100C66007E96000,"Crayola Scoot",nvdec,playable,2022-07-22 14:01:55 +01005BA00F486000,"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",,playable,2021-07-21 10:41:33 +0100D470106DC000,"CRAYON SHINCHAN The Storm Called FLAMING KASUKABE RUNNER!!",services,menus,2020-03-20 14:00:57 +01006BC00C27A000,"Crazy Strike Bowling EX",UE4;gpu;nvdec,ingame,2020-08-07 18:15:59 +0100F9900D8C8000,"Crazy Zen Mini Golf",,playable,2020-08-05 14:00:00 +0100B0E010CF8000,"Creaks",,playable,2020-08-15 12:20:52 +01007C600D778000,"Creature in the Well",UE4;gpu,ingame,2020-11-16 12:52:40 +0100A19011EEE000,"Creepy Tale",,playable,2020-12-15 21:58:03 +01005C2013B00000,"Cresteaju",gpu,ingame,2021-03-24 10:46:06 +010022D00D4F0000,"Cricket 19",gpu,ingame,2021-06-14 14:56:07 +0100387017100000,"Cricket 22 The Official Game Of The Ashes",crash,boots,2023-10-18 08:01:57 +01005640080B0000,"Crimsonland",,playable,2021-05-27 20:50:54 +0100B0400EBC4000,"Cris Tales",crash,ingame,2021-07-29 15:10:53 +01004BC0166CC000,"CRISIS CORE –FINAL FANTASY VII– REUNION",,playable,2022-12-19 15:53:59 +01004F800C4DA000,"Croc's World",,playable,2020-05-22 11:21:09 +01009DB00DE12000,"Croc's World 2",,playable,2020-12-16 20:01:40 +010025200FC54000,"Croc's World 3",,playable,2020-12-30 18:53:26 +01000F0007D92000,"Croixleur Sigma",online,playable,2022-07-22 14:26:54 +01003D90058FC000,"CrossCode",,playable,2024-02-17 10:23:19 +0100B1E00AA56000,"Crossing Souls",nvdec,playable,2021-02-20 15:42:54 +0100059012BAE000,"Crown Trick",,playable,2021-06-16 19:36:29 +0100B41013C82000,"Cruis'n Blast",gpu,ingame,2023-07-30 10:33:47 +01000CC01C108000,"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",demo,playable,2023-08-06 05:33:21 +0100CEA007D08000,"Crypt of the NecroDancer: Nintendo Switch Edition",nvdec,playable,2022-11-01 09:52:06 +0100582010AE0000,"Crysis 2 Remastered",deadlock,menus,2023-09-21 10:46:17 +0100CD3010AE2000,"Crysis 3 Remastered",deadlock,menus,2023-09-10 16:03:50 +0100E66010ADE000,"Crysis Remastered",nvdec,menus,2024-08-13 05:23:24 +0100972008234000,"Crystal Crisis",nvdec,playable,2021-02-20 13:52:44 +01006FA012FE0000,"Cthulhu Saves Christmas",,playable,2020-12-14 00:58:55 +010001600D1E8000,"Cube Creator X",crash,menus,2021-11-25 08:53:28 +010082E00F1CE000,"Cubers: Arena",nvdec;UE4,playable,2022-10-04 16:05:40 +010040D011D04000,"Cubicity",,playable,2021-06-14 14:19:51 +0100A5C00D162000,"Cuphead",,playable,2022-02-01 22:45:55 +0100F7E00DFC8000,"Cupid Parasite",gpu,ingame,2023-08-21 05:52:36 +010054501075C000,"Curious Cases",,playable,2020-08-10 09:30:48 +0100D4A0118EA000,"Curse of the Dead Gods",,playable,2022-08-30 12:25:38 +0100CE5014026000,"Curved Space",,playable,2023-01-14 22:03:50 +0100C1300DE74000,"Cyber Protocol",nvdec,playable,2020-09-28 14:47:40 +0100C1F0141AA000,"Cyber Shadow",,playable,2022-07-17 05:37:41 +01006B9013672000,"Cybxus Hearts",gpu;slow,ingame,2022-01-15 05:00:49 +010063100B2C2000,"Cytus α",nvdec,playable,2021-02-20 13:40:46 +0100B6400CA56000,"DAEMON X MACHINA™",UE4;audout;ldn-untested;nvdec,playable,2021-06-09 19:22:29 +010061300DF48000,"Dairoku: Ayakashimori",Needs Update;loader-allocator,nothing,2021-11-30 05:09:38 +0100BD2009A1C000,"Damsel",,playable,2022-09-06 11:54:39 +0100BFC002B4E000,"Dandara: Trials of Fear Edition",,playable,2020-05-26 12:42:33 +0100DFB00D808000,"Dandy Dungeon - Legend of Brave Yamada -",,playable,2021-01-06 09:48:47 +01003ED0099B0000,"Danger Mouse: The Danger Games",crash;online,boots,2022-07-22 15:49:45 +0100EFA013E7C000,"Danger Scavenger",nvdec,playable,2021-04-17 15:53:04 +0100417007F78000,"Danmaku Unlimited 3",,playable,2020-11-15 00:48:35 +,"Darius Cozmic Collection",,playable,2021-02-19 20:59:06 +010059C00BED4000,"Darius Cozmic Collection Special Edition",,playable,2022-07-22 16:26:50 +010015800F93C000,"Dariusburst - Another Chronicle EX+",online,playable,2021-04-05 14:21:43 +01003D301357A000,"Dark Arcana: The Carnival",gpu;slow,ingame,2022-02-19 08:52:28 +010083A00BF6C000,"Dark Devotion",nvdec,playable,2022-08-09 09:41:18 +0100BFF00D5AE000,"Dark Quest 2",,playable,2020-11-16 21:34:52 +01004AB00A260000,"DARK SOULS™: REMASTERED",gpu;nvdec;online-broken,ingame,2024-04-09 19:47:58 +01001FA0034E2000,"Dark Witch Music Episode: Rudymical",,playable,2020-05-22 09:44:44 +01008F1008DA6000,"Darkest Dungeon",nvdec,playable,2022-07-22 18:49:18 +0100F2300D4BA000,"Darksiders Genesis",nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25 +010071800BA98000,"Darksiders II Deathinitive Edition",gpu;nvdec;online-broken,ingame,2024-06-26 00:37:25 +0100E1400BA96000,"Darksiders Warmastered Edition",nvdec,playable,2023-03-02 18:08:09 +010033500B7B6000,"Darkwood",,playable,2021-01-08 21:24:06 +0100440012FFA000,"DARQ Complete Edition",audout,playable,2021-04-07 15:26:21 +0100BA500B660000,"Darts Up",,playable,2021-04-14 17:22:22 +0100F0B0081DA000,"Dawn of the Breakers",online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03 +0100FCF00F6CC000,"Day and Night",,playable,2020-12-17 12:30:51 +0100D0A009310000,"de Blob",nvdec,playable,2021-01-06 17:34:46 +010034E00A114000,"de Blob 2",nvdec,playable,2021-01-06 13:00:16 +01008E900471E000,"De Mambo",,playable,2021-04-10 12:39:40 +01004C400CF96000,"Dead by Daylight",nvdec;online-broken;UE4,boots,2022-09-13 14:32:13 +0100646009FBE000,"Dead Cells",,playable,2021-09-22 22:18:49 +01004C500BD40000,"Dead End Job",nvdec,playable,2022-09-19 12:48:44 +01009CC00C97C000,"DEAD OR ALIVE Xtreme 3 Scarlet",,playable,2022-07-23 17:05:06 +0100A5000F7AA000,"DEAD OR SCHOOL",nvdec,playable,2022-09-06 12:04:09 +0100A24011F52000,"Dead Z Meat",UE4;services,ingame,2021-04-14 16:50:16 +010095A011A14000,"Deadly Days",,playable,2020-11-27 13:38:55 +0100BAC011928000,"Deadly Premonition 2: A Blessing In Disguise",,playable,2021-06-15 14:12:36 +0100EBE00F22E000,"Deadly Premonition Origins",32-bit;nvdec,playable,2024-03-25 12:47:46 +,"Dear Magi - Mahou Shounen Gakka -",,playable,2020-11-22 16:45:16 +01000D60126B6000,"Death and Taxes",,playable,2020-12-15 20:27:49 +010012B011AB2000,"Death Come True",nvdec,playable,2021-06-10 22:30:49 +0100F3B00CF32000,"Death Coming",crash,nothing,2022-02-06 07:43:03 +0100AEC013DDA000,"Death end re;Quest",,playable,2023-07-09 12:19:54 +0100423009358000,"Death Road to Canada",gpu;audio;32-bit;crash,nothing,2023-06-28 15:39:26 +010085900337E000,"Death Squared",,playable,2020-12-04 13:00:15 +0100A51013550000,"Death Tales",,playable,2020-12-17 10:55:52 +0100492011A8A000,"Death's Hangover",gpu,boots,2023-08-01 22:38:06 +01009120119B4000,"Deathsmiles I・II",,playable,2024-04-08 19:29:00 +010034F00BFC8000,"Debris Infinity",nvdec;online,playable,2021-05-28 12:14:39 +010027700FD2E000,"Decay of Logos",nvdec,playable,2022-09-13 14:42:13 +01002CC0062B8000,"DEEMO",,playable,2022-07-24 11:34:33 +01008B10132A2000,"DEEMO -Reborn-",nvdec;online-broken,playable,2022-10-17 15:18:11 +010026800FA88000,"Deep Diving Adventures",,playable,2022-09-22 16:43:37 +0100FAF009562000,"Deep Ones",services,nothing,2020-04-03 02:54:19 +0100C3E00D68E000,"Deep Sky Derelicts: Definitive Edition",,playable,2022-09-27 11:21:08 +01000A700F956000,"Deep Space Rush",,playable,2020-07-07 23:30:33 +0100961011BE6000,"DeepOne",services-horizon;Needs Update,nothing,2024-01-18 15:01:05 +01008BB00F824000,"Defenders of Ekron: Definitive Edition",,playable,2021-06-11 16:31:03 +0100CDE0136E6000,"Defentron",,playable,2022-10-17 15:47:56 +010039300BDB2000,"Defunct",,playable,2021-01-08 21:33:46 +010067900B9C4000,"Degrees of Separation",,playable,2021-01-10 13:40:04 +010071C00CBA4000,"Dei Gratia no Rashinban",crash,nothing,2021-07-13 02:25:32 +010092E00E7F4000,"Deleveled",slow,playable,2020-12-15 21:02:29 +010023800D64A000,"DELTARUNE Chapter 1&2",,playable,2023-01-22 04:47:44 +010038B01D2CA000,"Dementium: The Ward",crash,boots,2024-09-02 08:28:14 +0100AB600ACB4000,"Demetrios - The BIG Cynical Adventure",,playable,2021-06-04 12:01:01 +010099D00D1A4000,"Demolish & Build 2018",,playable,2021-06-13 15:27:26 +010084600F51C000,"Demon Pit",nvdec,playable,2022-09-19 13:35:15 +0100309016E7A000,"Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",UE4,playable,2024-08-08 04:51:49 +0100A2B00BD88000,"Demon's Crystals",crash;regression,nothing,2022-12-07 16:33:17 +0100E29013818000,"Demon's Rise - Lords of Chaos",,playable,2021-04-06 16:20:06 +0100C3501094E000,"Demon's Rise - War for the Deep",,playable,2020-07-29 12:26:27 +0100161011458000,"Demon's Tier+",,playable,2021-06-09 17:25:36 +0100BE800E6D8000,"DEMON'S TILT",,playable,2022-09-19 13:22:46 +010000401313A000,"Demong Hunter",,playable,2020-12-12 15:27:08 +0100BC501355A000,"Densha de go!! Hashirou Yamanote Sen",nvdec;UE4,playable,2023-11-09 07:47:58 +0100C9100FAE2000,"Depixtion",,playable,2020-10-10 18:52:37 +01000BF00B6BC000,"Deployment",slow;online-broken,playable,2022-10-17 16:23:59 +010023600C704000,"Deponia",nvdec,playable,2021-01-26 17:17:19 +0100ED700469A000,"Deru - The Art of Cooperation",,playable,2021-01-07 16:59:59 +0100D4600D0E4000,"Descenders",gpu,ingame,2020-12-10 15:22:36 +,"Desire remaster ver.",crash,boots,2021-01-17 02:34:37 +010069500DD86000,"Destiny Connect: Tick-Tock Travelers",UE4;gpu;nvdec,ingame,2020-12-16 12:20:36 +01008BB011ED6000,"Destrobots",,playable,2021-03-06 14:37:05 +01009E701356A000,"Destroy All Humans!",gpu;nvdec;UE4,ingame,2023-01-14 22:23:53 +010030600E65A000,"Detective Dolittle",,playable,2021-03-02 14:03:59 +01009C0009842000,"Detective Gallo",nvdec,playable,2022-07-24 11:51:04 +,"Detective Jinguji Saburo Prism of Eyes",,playable,2020-10-02 21:54:41 +010007500F27C000,"Detective Pikachu™ Returns",,playable,2023-10-07 10:24:59 +010031B00CF66000,"Devil Engine",,playable,2021-06-04 11:54:30 +01002F000E8F2000,"Devil Kingdom",,playable,2023-01-31 08:58:44 +0100E8000D5B8000,"Devil May Cry",nvdec,playable,2021-01-04 19:43:08 +01007CF00D5BA000,"Devil May Cry 2",nvdec,playable,2023-01-24 23:03:20 +01007B600D5BC000,"Devil May Cry 3 Special Edition",nvdec,playable,2024-07-08 12:33:23 +01003C900EFF6000,"Devil Slayer Raksasi",,playable,2022-10-26 19:42:32 +01009EA00A320000,"Devious Dungeon",,playable,2021-03-04 13:03:06 +01003F601025E000,"Dex",nvdec,playable,2020-08-12 16:48:12 +010044000CBCA000,"Dexteritrip",,playable,2021-01-06 12:51:12 +0100AFC00E06A000,"Dezatopia",online,playable,2021-06-15 21:06:11 +01001B300B9BE000,"Diablo III: Eternal Collection",online-broken;ldn-works,playable,2023-08-21 23:48:03 +0100726014352000,"Diablo® II: Resurrected™",gpu;nvdec,ingame,2023-08-18 18:42:47 +0100F73011456000,"Diabolic",,playable,2021-06-11 14:45:08 +010027400BD24000,"DIABOLIK LOVERS CHAOS LINEAGE",gpu;Needs Update,ingame,2023-06-08 02:20:44 +0100BBF011394000,"Dicey Dungeons",gpu;audio;slow,ingame,2023-08-02 20:30:12 +0100D98005E8C000,"Die for Valhalla!",,playable,2021-01-06 16:09:14 +0100BB900B5B4000,"Dies irae Amantes amentes For Nintendo Switch",32-bit;crash,nothing,2022-02-16 07:09:05 +0100A5A00DBB0000,"Dig Dog",gpu,ingame,2021-06-02 17:17:51 +01004DE011076000,"Digerati Indie Darling Bundle Vol. 3",,playable,2022-10-02 13:01:57 +010035D0121EC000,"Digerati Presents: The Dungeon Crawl Vol. 1",slow,ingame,2021-04-18 14:04:55 +010014E00DB56000,"Digimon Story Cyber Sleuth: Complete Edition",nvdec;opengl,playable,2022-09-13 15:02:37 +0100F00014254000,"Digimon World: Next Order",,playable,2023-05-09 20:41:06 +0100B6D00DA6E000,"Ding Dong XL",,playable,2020-07-14 16:13:19 +01002E4011924000,"Dininho Adventures",,playable,2020-10-03 17:25:51 +010027E0158A6000,"Dininho Space Adventure",,playable,2023-01-14 22:43:04 +0100A8A013DA4000,"Dirt Bike Insanity",,playable,2021-01-31 13:27:38 +01004CB01378A000,"Dirt Trackin Sprint Cars",nvdec;online-broken,playable,2022-10-17 16:34:56 +0100918014B02000,"Disagaea 6: Defiance of Destiny Demo",demo,playable,2022-10-26 20:02:04 +010020700E2A2000,"Disaster Report 4: Summer Memories",nvdec;UE4,playable,2022-09-27 19:41:31 +0100510004D2C000,"Disc Jam",UE4;ldn-untested;nvdec;online,playable,2021-04-08 16:40:35 +0100C81004780000,"Disco Dodgeball - REMIX",online,playable,2020-09-28 23:24:49 +01004B100AF18000,"Disgaea 1 Complete",,playable,2023-01-30 21:45:23 +0100A9800E9B4000,"Disgaea 4 Complete+",gpu;slow,playable,2020-02-18 10:54:28 +010068C00F324000,"Disgaea 4 Complete+ Demo",nvdec,playable,2022-09-13 15:21:59 +01005700031AE000,"Disgaea 5 Complete",nvdec,playable,2021-03-04 15:32:54 +0100ABC013136000,"Disgaea 6: Defiance of Destiny",deadlock,ingame,2023-04-15 00:50:32 +0100307011D80000,"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",,playable,2021-06-08 13:20:33 +01005EE013888000,"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",gpu;demo,ingame,2022-12-06 15:27:59 +01000B70122A2000,"Disjunction",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24 +0100A2F00EEFC000,"Disney Classic Games Collection",online-broken,playable,2022-09-13 15:44:17 +0100DA201EBF8000,"Disney Epic Mickey: Rebrushed",crash,ingame,2024-09-26 22:11:51 +0100F0401435E000,"Disney Speedstorm",services,boots,2023-11-27 02:15:32 +010012800EBAE000,"Disney TSUM TSUM FESTIVAL",crash,menus,2020-07-14 14:05:28 +01009740120FE000,"DISTRAINT 2",,playable,2020-09-03 16:08:12 +010075B004DD2000,"DISTRAINT: Deluxe Edition",,playable,2020-06-15 23:42:24 +010027400CDC6000,"Divinity: Original Sin 2 - Definitive Edition",services;crash;online-broken;regression,menus,2023-08-13 17:20:03 +01001770115C8000,"Dodo Peak",nvdec;UE4,playable,2022-10-04 16:13:05 +010077B0100DA000,"Dogurai",,playable,2020-10-04 02:40:16 +010048100D51A000,"Dokapon Up! Mugen no Roulette",gpu;Needs Update,menus,2022-12-08 19:39:10 +01005EE00BC78000,"Dokuro (ドクロ)",nvdec,playable,2020-12-17 14:47:09 +010007200AC0E000,"Don't Die, Mr Robot!",nvdec,playable,2022-09-02 18:34:38 +0100E470067A8000,"Don't Knock Twice",,playable,2024-05-08 22:37:58 +0100C4D00B608000,"Don't Sink",gpu,ingame,2021-02-26 15:41:11 +0100751007ADA000,"Don't Starve: Nintendo Switch Edition",nvdec,playable,2022-02-05 20:43:34 +010088B010DD2000,"Dongo Adventure",,playable,2022-10-04 16:22:26 +0100C1F0051B6000,"Donkey Kong Country™: Tropical Freeze",,playable,2024-08-05 16:46:10 +0100F2C00F060000,"Doodle Derby",,boots,2020-12-04 22:51:48 +0100416004C00000,"DOOM",gpu;slow;nvdec;online-broken,ingame,2024-09-23 15:40:07 +010018900DD00000,"DOOM (1993)",nvdec;online-broken,menus,2022-09-06 13:32:19 +01008CB01E52E000,"DOOM + DOOM II",opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01 +010029D00E740000,"DOOM 3",crash,menus,2024-08-03 05:25:47 +01005D700E742000,"DOOM 64",nvdec;vulkan,playable,2020-10-13 23:47:28 +0100D4F00DD02000,"DOOM II (Classic)",nvdec;online,playable,2021-06-03 20:10:01 +0100B1A00D8CE000,"DOOM® Eternal",gpu;slow;nvdec;online-broken,ingame,2024-08-28 15:57:17 +01005ED00CD70000,"Door Kickers: Action Squad",online-broken;ldn-broken,playable,2022-09-13 16:28:53 +010073700E412000,"DORAEMON STORY OF SEASONS",nvdec,playable,2020-07-13 20:28:11 +0100F7300BD8E000,"Double Cross",,playable,2021-01-07 15:34:22 +0100B1500E9F2000,"Double Dragon & Kunio-kun: Retro Brawler Bundle",,playable,2020-09-01 12:48:46 +01001AD00E49A000,"DOUBLE DRAGON Ⅲ: The Sacred Stones",online,playable,2021-06-11 15:41:44 +01005B10132B2000,"Double Dragon Neon",gpu;audio;32-bit,ingame,2022-09-20 18:00:20 +01000F400C1A4000,"Double Kick Heroes",gpu,ingame,2020-10-03 14:33:59 +0100A5D00C7C0000,"Double Pug Switch",nvdec,playable,2022-10-10 10:59:35 +0100FC000EE10000,"Double Switch - 25th Anniversary Edition",nvdec,playable,2022-09-19 13:41:50 +0100B6600FE06000,"Down to Hell",gpu;nvdec,ingame,2022-09-19 14:01:26 +010093D00C726000,"Downwell",,playable,2021-04-25 20:05:24 +0100ED000D390000,"Dr Kawashima's Brain Training",services,ingame,2023-06-04 00:06:46 +01001B80099F6000,"Dracula's Legacy",nvdec,playable,2020-12-10 13:24:25 +0100566009238000,"DragoDino",gpu;nvdec,ingame,2020-08-03 20:49:16 +0100DBC00BD5A000,"Dragon Audit",crash,ingame,2021-05-16 14:24:46 +0100A250097F0000,"DRAGON BALL FighterZ",UE4;ldn-broken;nvdec;online,playable,2021-06-11 16:19:04 +010078D000F88000,"DRAGON BALL XENOVERSE 2 for Nintendo Switch",gpu;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01 +010051C0134F8000,"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",vulkan-backend-bug,playable,2024-08-28 00:03:50 +010099B00A2DC000,"Dragon Blaze for Nintendo Switch",32-bit,playable,2020-10-14 11:11:28 +010089700150E000,"Dragon Marked for Death: Advanced Attackers",ldn-untested;audout,playable,2022-03-10 06:44:34 +0100EFC00EFB2000,"DRAGON QUEST",gpu,boots,2021-11-09 03:31:32 +010008900705C000,"Dragon Quest Builders™",gpu;nvdec,ingame,2023-08-14 09:54:36 +010042000A986000,"DRAGON QUEST BUILDERS™ 2",,playable,2024-04-19 16:36:38 +0100CD3000BDC000,"Dragon Quest Heroes I + II (JP)",nvdec,playable,2021-04-08 14:27:16 +010062200EFB4000,"DRAGON QUEST II: Luminaries of the Legendary Line",,playable,2022-09-13 16:44:11 +01003E601E324000,"DRAGON QUEST III HD-2D Remake",vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27 +010015600EFB6000,"DRAGON QUEST III: The Seeds of Salvation",gpu,boots,2021-11-09 03:38:34 +0100A77018EA0000,"DRAGON QUEST MONSTERS: The Dark Prince",,playable,2023-12-29 16:10:05 +0100217014266000,"Dragon Quest Treasures",gpu;UE4,ingame,2023-05-09 11:16:52 +0100E2E0152E4000,"Dragon Quest X Awakening Five Races Offline",nvdec;UE4,playable,2024-08-20 10:04:24 +01006C300E9F0000,"DRAGON QUEST® XI S: Echoes of an Elusive Age – Definitive Edition",UE4,playable,2021-11-27 12:27:11 +010032C00AC58000,"Dragon's Dogma: Dark Arisen",,playable,2022-07-24 12:58:33 +010027100C544000,"Dragon's Lair Trilogy",nvdec,playable,2021-01-13 22:12:07 +0100DA0006F50000,"DragonFangZ - The Rose & Dungeon of Time",,playable,2020-09-28 21:35:18 +0100F7800A434000,"Drawful 2",,ingame,2022-07-24 13:50:21 +0100B7E0102E4000,"Drawngeon: Dungeons of Ink and Paper",gpu,ingame,2022-09-19 15:41:25 +01008B20129F2000,"Dream",,playable,2020-12-15 19:55:07 +01000AA0093DC000,"Dream Alone",nvdec,playable,2021-01-27 19:41:50 +010034D00F330000,"DreamBall",UE4;crash;gpu,ingame,2020-08-05 14:45:25 +010058B00F3C0000,"Dreaming Canvas",UE4;gpu,ingame,2021-06-13 22:50:07 +0100D24013466000,"DREAMO",UE4,playable,2022-10-17 18:25:28 +0100ED200B6FC000,"DreamWorks Dragons Dawn of New Riders",nvdec,playable,2021-01-27 20:05:26 +0100236011B4C000,"DreamWorks Spirit Lucky’s Big Adventure",,playable,2022-10-27 13:30:52 +010058C00A916000,"Drone Fight",,playable,2022-07-24 14:31:56 +010052000A574000,"Drowning",,playable,2022-07-25 14:28:26 +0100652012F58000,"Drums",,playable,2020-12-17 17:21:51 +01005BC012C66000,"Duck Life Adventure",,playable,2022-10-10 11:27:03 +01007EF00CB88000,"Duke Nukem 3D: 20th Anniversary World Tour",32-bit;ldn-untested,playable,2022-08-19 22:22:40 +010068D0141F2000,"Dull Grey",,playable,2022-10-27 13:40:38 +0100926013600000,"Dungeon Nightmares 1 + 2 Collection",,playable,2022-10-17 18:54:22 +010034300F0E2000,"Dungeon of the Endless",nvdec,playable,2021-05-27 19:16:26 +0100E79009A94000,"Dungeon Stars",,playable,2021-01-18 14:28:37 +0100BE801360E000,"Dungeons & Bombs",,playable,2021-04-06 12:46:22 +0100EC30140B6000,"Dunk Lords",,playable,2024-06-26 00:07:26 +010011C00E636000,"Dusk Diver",crash;UE4,boots,2021-11-06 09:01:30 +0100B6E00A420000,"Dust: An Elysian Tail",,playable,2022-07-25 15:28:12 +0100D7E012F2E000,"Dustoff Z",,playable,2020-12-04 23:22:29 +01008C8012920000,"Dying Light: Definitive Edition",services-horizon,boots,2024-03-11 10:43:32 +01007DD00DFDE000,"Dyna Bomb",,playable,2020-06-07 13:26:55 +0100E9A00CB30000,"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",nvdec,playable,2024-06-26 00:16:30 +010008900BC5A000,"DYSMANTLE",gpu,ingame,2024-07-15 16:24:12 +010054E01D878000,"EA SPORTS FC 25",crash,ingame,2024-09-25 21:07:50 +0100BDB01A0E6000,"EA SPORTS FC™ 24",,boots,2023-10-04 18:32:59 +01001C8016B4E000,"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",gpu;crash,ingame,2024-06-10 23:33:05 +01005DE00D05C000,"EA SPORTS™ FIFA 20 Nintendo Switch™ Legacy Edition",gpu;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20 +010037400C7DA000,"Eagle Island Twist",,playable,2021-04-10 13:15:42 +0100B9E012992000,"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",UE4,playable,2022-12-07 12:59:16 +0100298014030000,"Earth Defense Force: World Brothers",UE4,playable,2022-10-27 14:13:31 +01009B7006C88000,"EARTH WARS",,playable,2021-06-05 11:18:33 +0100DFC00E472000,"Earthfall: Alien Horde",nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37 +01006E50042EA000,"EARTHLOCK",,playable,2021-06-05 11:51:02 +0100A2E00BB0C000,"EarthNight",,playable,2022-09-19 21:02:20 +0100DCE00B756000,"Earthworms",,playable,2022-07-25 16:28:55 +0100E3500BD84000,"Earthworms Demo",,playable,2021-01-05 16:57:11 +0100ECF01800C000,"Easy Come Easy Golf",online-broken;regression,playable,2024-04-04 16:15:00 +0100A9B009678000,"EAT BEAT DEADSPIKE-san",audio;Needs Update,playable,2022-12-02 19:25:29 +0100BCA016636000,"eBaseball Powerful Pro Yakyuu 2022",gpu;services-horizon;crash,nothing,2024-05-26 23:07:19 +01001F20100B8000,"Eclipse: Edge of Light",,playable,2020-08-11 23:06:29 +0100E0A0110F4000,"eCrossminton",,playable,2020-07-11 18:24:27 +0100ABE00DB4E000,"Edna & Harvey: Harvey's New Eyes",nvdec,playable,2021-01-26 14:36:08 +01004F000B716000,"Edna & Harvey: The Breakout – Anniversary Edition",crash;nvdec,ingame,2022-08-01 16:59:56 +01002550129F0000,"Effie",,playable,2022-10-27 14:36:39 +0100CC0010A46000,"Ego Protocol: Remastered",nvdec,playable,2020-12-16 20:16:35 +,"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",,playable,2020-11-12 00:11:50 +01003AD013BD2000,"Eight Dragons",nvdec,playable,2022-10-27 14:47:28 +010020A01209C000,"El Hijo - A Wild West Tale",nvdec,playable,2021-04-19 17:44:08 +0100B5B00EF38000,"Elden: Path of the Forgotten",,playable,2020-12-15 00:33:19 +010068F012880000,"Eldrador® Creatures",slow,playable,2020-12-12 12:35:35 +010008E010012000,"ELEA: Paradigm Shift",UE4;crash,nothing,2020-10-04 19:07:43 +0100A6700AF10000,"Element",,playable,2022-07-25 17:17:16 +0100128003A24000,"Elliot Quest",,playable,2022-07-25 17:46:14 +010041A00FEC6000,"Ember",nvdec,playable,2022-09-19 21:16:11 +010071B012940000,"Embracelet",,playable,2020-12-04 23:45:00 +010017B0102A8000,"Emma: Lost in Memories",nvdec,playable,2021-01-28 16:19:10 +010068300E08E000,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo -",gpu;nvdec,ingame,2022-11-20 16:18:45 +01007A4008486000,"Enchanting Mahjong Match",gpu,ingame,2020-04-17 22:01:31 +01004F3011F92000,"Endless Fables: Dark Moor",gpu;nvdec,ingame,2021-03-07 15:31:03 +010067B017588000,"Endless Ocean™ Luminous",services-horizon;crash,ingame,2024-05-30 02:05:57 +0100B8700BD14000,"Energy Cycle Edge",services,ingame,2021-11-30 05:02:31 +0100A8E0090B0000,"Energy Invasion",,playable,2021-01-14 21:32:26 +0100C6200A0AA000,"Enigmatis 2: The Mists of Ravenwood",crash;regression,boots,2021-06-06 15:15:30 +01009D60076F6000,"Enter the Gungeon",,playable,2022-07-25 20:28:33 +0100262009626000,"Epic Loon",nvdec,playable,2022-07-25 22:06:13 +01000FA0149B6000,"EQI",nvdec;UE4,playable,2022-10-27 16:42:32 +0100E95010058000,"EQQO",UE4;nvdec,playable,2021-06-13 23:10:51 +01000E8010A98000,"Escape First",,playable,2020-10-20 22:46:53 +010021201296A000,"Escape First 2",,playable,2021-03-24 11:59:41 +0100FEF00F0AA000,"Escape from Chernobyl",crash,boots,2022-09-19 21:36:58 +010023E013244000,"Escape from Life Inc",,playable,2021-04-19 17:34:09 +010092901203A000,"Escape From Tethys",,playable,2020-10-14 22:38:25 +0100B0F011A84000,"Escape Game Fort Boyard",,playable,2020-07-12 12:45:43 +0100F9600E746000,"ESP Ra.De. Psi",audio;slow,ingame,2024-03-07 15:05:08 +010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;crash;Needs More Attention,ingame,2024-04-29 05:34:14 +01004F9012FD8000,"Estranged: The Departure",nvdec;UE4,playable,2022-10-24 10:37:58 +0100CB900B498000,"Eternum Ex",,playable,2021-01-13 20:28:32 +010092501EB2C000,"Europa (Demo)",gpu;crash;UE4,ingame,2024-04-23 10:47:12 +01007BE0160D6000,"EVE ghost enemies",gpu,ingame,2023-01-14 03:13:30 +010095E01581C000,"even if TEMPEST",gpu,ingame,2023-06-22 23:50:25 +010072C010002000,"Event Horizon: Space Defense",,playable,2020-07-31 20:31:24 +0100DCF0093EC000,"Everspace™ - Stellar Edition",UE4,playable,2022-08-14 01:16:24 +01006F900BF8E000,"Everybody 1-2-Switch!™",services;deadlock,nothing,2023-07-01 05:52:55 +010080600B53E000,"Evil Defenders",nvdec,playable,2020-09-28 17:11:00 +01006A800FA22000,"Evolution Board Game",online,playable,2021-01-20 22:37:56 +0100F2D00C7DE000,"Exception",online-broken,playable,2022-09-20 12:47:10 +0100DD30110CC000,"Exit the Gungeon",,playable,2022-09-22 17:04:43 +0100A82013976000,"Exodemon",,playable,2022-10-27 20:17:52 +0100FA800A1F4000,"EXORDER",nvdec,playable,2021-04-15 14:17:20 +01009B7010B42000,"Explosive Jake",crash,boots,2021-11-03 07:48:32 +0100EFE00A3C2000,"Eyes: The Horror Game",,playable,2021-01-20 21:59:46 +0100E3D0103CE000,"Fable of Fairy Stones",,playable,2021-05-05 21:04:54 +01004200189F4000,"Factorio",deadlock,boots,2024-06-11 19:26:16 +010073F0189B6000,"Fae Farm",,playable,2024-08-25 15:12:12 +010069100DB08000,"Faeria",nvdec;online-broken,menus,2022-10-04 16:44:41 +01008A6009758000,"Fairune Collection",,playable,2021-06-06 15:29:56 +0100F6D00B8F2000,"Fairy Fencer F™: Advent Dark Force",32-bit;crash;nvdec,ingame,2023-04-16 03:53:48 +0100CF900FA3E000,"FAIRY TAIL",nvdec,playable,2022-10-04 23:00:32 +01005A600BE60000,"Fall of Light: Darkest Edition",slow;nvdec,ingame,2024-07-24 04:19:26 +0100AA801258C000,"Fallen Legion Revenants",crash,menus,2021-11-25 08:53:20 +0100D670126F6000,"Famicom Detective Club™: The Girl Who Stands Behind",nvdec,playable,2022-10-27 20:41:40 +010033F0126F4000,"Famicom Detective Club™: The Missing Heir",nvdec,playable,2022-10-27 20:56:23 +010060200FC44000,"Family Feud®",online-broken,playable,2022-10-10 11:42:21 +0100034012606000,"Family Mysteries: Poisonous Promises",audio;crash,menus,2021-11-26 12:35:06 +010017C012726000,"Fantasy Friends",,playable,2022-10-17 19:42:39 +0100767008502000,"FANTASY HERO ~unsigned legacy~",,playable,2022-07-26 12:28:52 +0100944003820000,"Fantasy Strike",online,playable,2021-02-27 01:59:18 +01000E2012F6E000,"Fantasy Tavern Sextet -Vol.1 New World Days-",gpu;crash;Needs Update,ingame,2022-12-05 16:48:00 +01005C10136CA000,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;crash,ingame,2021-11-06 02:57:29 +010022700E7D6000,"FAR: Lone Sails",,playable,2022-09-06 16:33:05 +0100C9E00FD62000,"Farabel",,playable,2020-08-03 17:47:28 +,"Farm Expert 2019 for Nintendo Switch",,playable,2020-07-09 21:42:57 +01000E400ED98000,"Farm Mystery",nvdec,playable,2022-09-06 16:46:47 +010086B00BB50000,"Farm Together",,playable,2021-01-19 20:01:19 +0100EB600E914000,"Farming Simulator 20",nvdec,playable,2021-06-13 10:52:44 +0100D04004176000,"Farming Simulator Nintendo Switch Edition",nvdec,playable,2021-01-19 14:46:44 +0100E99019B3A000,"Fashion Dreamer",,playable,2023-11-12 06:42:52 +01009510001CA000,"FAST RMX",slow;crash;ldn-partial,ingame,2024-06-22 20:48:58 +0100BEB015604000,"FATAL FRAME: Maiden of Black Water",,playable,2023-07-05 16:01:40 +0100DAE019110000,"FATAL FRAME: Mask of the Lunar Eclipse",Incomplete,playable,2024-04-11 06:01:30 +010051400B17A000,"Fate/EXTELLA LINK",ldn-untested;nvdec,playable,2021-01-27 00:45:50 +010053E002EA2000,"Fate/EXTELLA: The Umbral Star",gpu;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55 +0100F6200B7D4000,"fault - milestone one",nvdec,playable,2021-03-24 10:41:49 +01005AC0068F6000,"Fear Effect Sedna",nvdec,playable,2021-01-19 13:10:33 +0100F5501CE12000,"Fearmonium",crash,boots,2024-03-06 11:26:11 +0100E4300CB3E000,"Feather",,playable,2021-06-03 14:11:27 +010003B00D3A2000,"Felix The Reaper",nvdec,playable,2020-10-20 23:43:03 +0100AA3009738000,"Feudal Alloy",,playable,2021-01-14 08:48:14 +01008D900B984000,"FEZ",gpu,ingame,2021-04-18 17:10:16 +01007510040E8000,"FIA European Truck Racing Championship",nvdec,playable,2022-09-06 17:51:59 +0100F7B002340000,"FIFA 18",gpu;online-broken;ldn-untested,ingame,2022-07-26 12:43:59 +0100FFA0093E8000,"FIFA 19",gpu;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07 +01000A001171A000,"FIFA 21 Nintendo Switch™ Legacy Edition",gpu;online-broken,ingame,2023-12-11 22:10:19 +0100216014472000,"FIFA 22 Nintendo Switch™ Legacy Edition",gpu,ingame,2024-03-02 14:13:48 +01006980127F0000,"Fight Crab",online-broken;ldn-untested,playable,2022-10-05 10:24:04 +010047E010B3E000,"Fight of Animals",online,playable,2020-10-15 15:08:28 +0100C7D00E730000,"Fight'N Rage",,playable,2020-06-16 23:35:19 +0100D02014048000,"FIGHTING EX LAYER ANOTHER DASH",online-broken;UE4,playable,2024-04-07 10:22:33 +0100118009C68000,"Figment",nvdec,playable,2021-01-27 19:36:05 +010095600AA36000,"Fill-a-Pix: Phil's Epic Adventure",,playable,2020-12-22 13:48:22 +0100C3A00BB76000,"Fimbul",nvdec,playable,2022-07-26 13:31:47 +0100C8200E942000,"Fin and the Ancient Mystery",nvdec,playable,2020-12-17 16:40:39 +01000EA014150000,"FINAL FANTASY",crash,nothing,2024-09-05 20:55:30 +01006B7014156000,"FINAL FANTASY II",crash,nothing,2024-04-13 19:18:04 +01006F000B056000,"FINAL FANTASY IX",audout;nvdec,playable,2021-06-05 11:35:00 +0100AA201415C000,"FINAL FANTASY V",,playable,2023-04-26 01:11:55 +0100A5B00BDC6000,"FINAL FANTASY VII",,playable,2022-12-09 17:03:30 +01008B900DC0A000,"FINAL FANTASY VIII Remastered",nvdec,playable,2023-02-15 10:57:48 +0100BC300CB48000,"FINAL FANTASY X/X-2 HD Remaster",gpu,ingame,2022-08-16 20:29:26 +0100EB100AB42000,"FINAL FANTASY XII THE ZODIAC AGE",opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54 +010068F00AA78000,"FINAL FANTASY XV POCKET EDITION HD",,playable,2021-01-05 17:52:08 +0100CE4010AAC000,"FINAL FANTASY® CRYSTAL CHRONICLES™ Remastered Edition",,playable,2023-04-02 23:39:12 +01001BA00AE4E000,"Final Light, The Prison",,playable,2020-07-31 21:48:44 +0100FF100FB68000,"Finding Teddy 2 : Definitive Edition",gpu,ingame,2024-04-19 16:51:33 +0100F4E013AAE000,"Fire & Water",,playable,2020-12-15 15:43:20 +0100F15003E64000,"Fire Emblem Warriors",nvdec,playable,2023-05-10 01:53:10 +010071F0143EA000,"Fire Emblem Warriors: Three Hopes",gpu;nvdec,ingame,2024-05-01 07:07:42 +0100A6301214E000,"Fire Emblem™ Engage",amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26 +0100A12011CC8000,"Fire Emblem™: Shadow Dragon & the Blade of Light",,playable,2022-10-17 19:49:14 +010055D009F78000,"Fire Emblem™: Three Houses",online-broken,playable,2024-09-14 23:53:50 +010025C014798000,"Fire: Ungh’s Quest",nvdec,playable,2022-10-27 21:41:26 +0100434003C58000,"Firefighters – The Simulation",,playable,2021-02-19 13:32:05 +0100BB1009E50000,"Firefighters: Airport Fire Department",,playable,2021-02-15 19:17:00 +0100AC300919A000,"Firewatch",,playable,2021-06-03 10:56:38 +0100BA9012B36000,"Firework",,playable,2020-12-04 20:20:09 +0100DEB00ACE2000,"Fishing Star World Tour",,playable,2022-09-13 19:08:51 +010069800D292000,"Fishing Universe Simulator",,playable,2021-04-15 14:00:43 +0100807008868000,"Fit Boxing",,playable,2022-07-26 19:24:55 +0100E7300AAD4000,"Fitness Boxing",,playable,2021-04-14 20:33:33 +0100073011382000,"Fitness Boxing 2: Rhythm & Exercise",crash,ingame,2021-04-14 20:40:48 +0100C7E0134BE000,"Five Dates",nvdec,playable,2020-12-11 15:17:11 +0100B6200D8D2000,"Five Nights at Freddy's",,playable,2022-09-13 19:26:36 +01004EB00E43A000,"Five Nights at Freddy's 2",,playable,2023-02-08 15:48:24 +010056100E43C000,"Five Nights at Freddy's 3",,playable,2022-09-13 20:58:07 +010083800E43E000,"Five Nights at Freddy's 4",,playable,2023-08-19 07:28:03 +0100F7901118C000,"Five Nights at Freddy's: Help Wanted",UE4,playable,2022-09-29 12:40:09 +01009060193C4000,"Five Nights at Freddy's: Security Breach",gpu;crash;mac-bug,ingame,2023-04-23 22:33:28 +01003B200E440000,"Five Nights at Freddy's: Sister Location",,playable,2023-10-06 09:00:58 +010038200E088000,"Flan",crash;regression,ingame,2021-11-17 07:39:28 +01000A0004C50000,"FLASHBACK™",nvdec,playable,2020-05-14 13:57:29 +0100C53004C52000,"Flat Heroes",gpu,ingame,2022-07-26 19:37:37 +0100B54012798000,"Flatland: Prologue",,playable,2020-12-11 20:41:12 +0100307004B4C000,"Flinthook",online,playable,2021-03-25 20:42:29 +010095A004040000,"Flip Wars",services;ldn-untested,ingame,2022-05-02 15:39:18 +01009FB002B2E000,"Flipping Death",,playable,2021-02-17 16:12:30 +0100D1700ACFC000,"Flood of Light",,playable,2020-05-15 14:15:25 +0100DF9005E7A000,"Floor Kids",nvdec,playable,2024-08-18 19:38:49 +010040700E8FC000,"Florence",,playable,2020-09-05 01:22:30 +0100F5D00CD58000,"Flowlines VS",,playable,2020-12-17 17:01:53 +010039C00E2CE000,"Flux8",nvdec,playable,2020-06-19 20:55:11 +0100EDA00BBBE000,"Fly O'Clock",,playable,2020-05-17 13:39:52 +0100FC300F4A4000,"Fly Punch Boom!",online,playable,2020-06-21 12:06:11 +0100419013A8A000,"Flying Hero X",crash,menus,2021-11-17 07:46:58 +010056000BA1C000,"Fobia",,playable,2020-12-14 21:05:23 +0100F3900D0F0000,"Food Truck Tycoon",,playable,2022-10-17 20:15:55 +01007CF013152000,"Football Manager 2021 Touch",gpu,ingame,2022-10-17 20:08:23 +0100EDC01990E000,"Football Manager 2023 Touch",gpu,ingame,2023-08-01 03:40:53 +010097F0099B4000,"Football Manager Touch 2018",,playable,2022-07-26 20:17:56 +010069400B6BE000,"For The King",nvdec,playable,2021-02-15 18:51:44 +01001D200BCC4000,"Forager",crash,menus,2021-11-24 07:10:17 +0100AE001256E000,"FORECLOSED",crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12 +010044B00E70A000,"Foregone",deadlock,ingame,2020-12-17 15:26:53 +010059E00B93C000,"Forgotton Anne",nvdec,playable,2021-02-15 18:28:07 +01008EA00405C000,"forma.8",nvdec,playable,2020-11-15 01:04:32 +010025400AECE000,"Fortnite",services-horizon,nothing,2024-04-06 18:23:25 +0100AAE01E39C000,"Fortress Challenge - Fort Boyard",nvdec;slow,playable,2020-05-15 13:22:53 +0100CA500756C000,"Fossil Hunters",nvdec,playable,2022-07-27 11:37:20 +01008A100A028000,"FOX n FORESTS",,playable,2021-02-16 14:27:49 +0100D2501001A000,"FoxyLand",,playable,2020-07-29 20:55:20 +01000AC010024000,"FoxyLand 2",,playable,2020-08-06 14:41:30 +01004200099F2000,"Fractured Minds",,playable,2022-09-13 21:21:40 +0100F1A00A5DC000,"FRAMED Collection",nvdec,playable,2022-07-27 11:48:15 +0100AC40108D8000,"Fred3ric",,playable,2021-04-15 13:30:31 +01000490067AE000,"Frederic 2: Evil Strikes Back",,playable,2020-07-23 16:44:37 +01005B1006988000,"Frederic: Resurrection of Music",nvdec,playable,2020-07-23 16:59:53 +010082B00EE50000,"Freedom Finger",nvdec,playable,2021-06-09 19:31:30 +0100EB800B614000,"Freedom Planet",,playable,2020-05-14 12:23:06 +010003F00BD48000,"Friday the 13th: Killer Puzzle",,playable,2021-01-28 01:33:38 +010092A00C4B6000,"Friday the 13th: The Game Ultimate Slasher Edition",nvdec;online-broken;UE4,playable,2022-09-06 17:33:27 +0100F200178F4000,"FRONT MISSION 1st: Remake",,playable,2023-06-09 07:44:24 +0100861012474000,"Frontline Zed",,playable,2020-10-03 12:55:59 +0100B5300B49A000,"Frost",,playable,2022-07-27 12:00:36 +010038A007AA4000,"FruitFall Crush",,playable,2020-10-20 11:33:33 +01008D800AE4A000,"FullBlast",,playable,2020-05-19 10:34:13 +010002F00CC20000,"FUN! FUN! Animal Park",,playable,2021-04-14 17:08:52 +0100A8F00B3D0000,"FunBox Party",,playable,2020-05-15 12:07:02 +0100E7B00BF24000,"Funghi Explosion",,playable,2020-11-23 14:17:41 +01008E10130F8000,"Funimation",gpu,boots,2021-04-08 13:08:17 +0100EA501033C000,"Funny Bunny Adventures",,playable,2020-08-05 13:46:56 +01000EC00AF98000,"Furi",,playable,2022-07-27 12:21:20 +0100A6B00D4EC000,"Furwind",,playable,2021-02-19 19:44:08 +0100ECE00C0C4000,"Fury Unleashed",crash;services,ingame,2020-10-18 11:52:40 +010070000ED9E000,"Fury Unleashed Demo",,playable,2020-10-08 20:09:21 +0100E1F013674000,"FUSER™",nvdec;UE4,playable,2022-10-17 20:58:32 +,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec,ingame,2021-01-20 15:30:02 +01003C300B274000,"Futari de! Nyanko Daisensou",,playable,2024-01-05 22:26:52 +010055801134E000,"FUZE Player",online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53 +0100EAD007E98000,"FUZE4 Nintendo Switch",vulkan-backend-bug,playable,2022-09-06 19:25:01 +010067600F1A0000,"FuzzBall",crash,nothing,2021-03-29 20:13:21 +,"G-MODE Archives 06 The strongest ever Julia Miyamoto",,playable,2020-10-15 13:06:26 +0100EB10108EA000,"G.I. Joe: Operation Blackout",UE4;crash,boots,2020-11-21 12:37:44 +010048600B14E000,"Gal Metal",,playable,2022-07-27 20:57:48 +010024700901A000,"Gal*Gun 2",nvdec;UE4,playable,2022-07-27 12:45:37 +0100047013378000,"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",nvdec,playable,2022-10-17 23:50:46 +0100C9800A454000,"GALAK-Z: Variant S",online-broken,boots,2022-07-29 11:59:12 +0100C62011050000,"Game Boy™ – Nintendo Switch Online",,playable,2023-03-21 12:43:48 +010012F017576000,"Game Boy™ Advance – Nintendo Switch Online",,playable,2023-02-16 20:38:15 +0100FA5010788000,"Game Builder Garage™",,ingame,2024-04-20 21:46:22 +0100AF700BCD2000,"Game Dev Story",,playable,2020-05-20 00:00:38 +01006BD00F8C0000,"Game Doraemon Nobita no Shin Kyoryu",gpu,ingame,2023-02-27 02:03:28 +01000FA00A4E4000,"Garage",,playable,2020-05-19 20:59:53 +010061E00E8BE000,"Garfield Kart Furious Racing",ldn-works;loader-allocator,playable,2022-09-13 21:40:25 +0100EA001069E000,"Gates Of Hell",slow,playable,2020-10-22 12:44:26 +010025500C098000,"Gato Roboto",,playable,2023-01-20 15:04:11 +010065E003FD8000,"Gear.Club Unlimited",,playable,2021-06-08 13:03:19 +010072900AFF0000,"Gear.Club Unlimited 2",nvdec;online-broken,playable,2022-07-29 12:52:16 +01000F000D9F0000,"Geki Yaba Runner Anniversary Edition",,playable,2021-02-19 18:59:07 +010052A00942A000,"Gekido Kintaro's Revenge",,playable,2020-10-27 12:44:05 +01009D000AF3A000,"Gelly Break Deluxe",UE4,playable,2021-03-03 16:04:02 +01001A4008192000,"Gem Smashers",nvdec,playable,2021-06-08 13:40:51 +010014901144C000,"Genetic Disaster",,playable,2020-06-19 21:41:12 +0100D7E0110B2000,"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",32-bit,playable,2022-06-06 00:42:09 +010000300C79C000,"GensokyoDefenders",online-broken;UE4,playable,2022-07-29 13:48:12 +0100AC600EB4C000,"Gensou Rougoku no Kaleidscope",crash,menus,2021-11-24 08:45:07 +01007FC012FD4000,"Georifters",UE4;crash;nvdec,menus,2020-12-04 22:30:50 +010058F010296000,"GERRRMS",,playable,2020-08-15 11:32:52 +01006F30129F8000,"Get 10 quest",,playable,2020-08-03 12:48:39 +0100B5B00E77C000,"Get Over Here",,playable,2022-10-28 11:53:52 +0100EEB005ACC000,"Ghost 1.0",,playable,2021-02-19 20:48:47 +010063200C588000,"Ghost Blade HD",online-broken,playable,2022-09-13 21:51:21 +010057500E744000,"Ghost Grab 3000",,playable,2020-07-11 18:09:52 +010094C00E180000,"Ghost Parade",,playable,2020-07-14 00:43:54 +01004B301108C000,"Ghost Sweeper",,playable,2022-10-10 12:45:36 +010029B018432000,"Ghost Trick: Phantom Detective",,playable,2023-08-23 14:50:12 +010008A00F632000,"Ghostbusters: The Video Game Remastered",nvdec,playable,2021-09-17 07:26:57 +010090F012916000,"Ghostrunner",UE4;crash;gpu;nvdec,ingame,2020-12-17 13:01:59 +0100D6200F2BA000,"Ghosts 'n Goblins Resurrection",,playable,2023-05-09 12:40:41 +01003830092B8000,"Giana Sisters: Twisted Dreams - Owltimate Edition",,playable,2022-07-29 14:06:12 +0100D95012C0A000,"Gibbous - A Cthulhu Adventure",nvdec,playable,2022-10-10 12:57:17 +010045F00BFC2000,"GIGA WRECKER ALT.",,playable,2022-07-29 14:13:54 +01002C400E526000,"Gigantosaurus The Game",UE4,playable,2022-09-27 21:20:00 +0100C50007070000,"Ginger: Beyond the Crystal",,playable,2021-02-17 16:27:00 +01006BA013990000,"Girabox",,playable,2020-12-12 13:55:05 +01007E90116CE000,"Giraffe and Annika",UE4;crash,ingame,2020-12-04 22:41:57 +01006DD00CC96000,"Girls und Panzer Dream Tank Match DX",ldn-untested,playable,2022-09-12 16:07:11 +01005CB009E20000,"Glaive: Brick Breaker",,playable,2020-05-20 12:15:59 +0100B6F01227C000,"Glitch's Trip",,playable,2020-12-17 16:00:57 +0100EB501130E000,"Glyph",,playable,2021-02-08 19:56:51 +0100EB8011B0C000,"Gnome More War",,playable,2020-12-17 16:33:07 +010008D00CCEC000,"Gnomes Garden 2",,playable,2021-02-19 20:08:13 +010036C00D0D6000,"Gnomes Garden: Lost King",deadlock,menus,2021-11-18 11:14:03 +01008EF013A7C000,"Gnosia",,playable,2021-04-05 17:20:30 +01000C800FADC000,"Go All Out!",online-broken,playable,2022-09-21 19:16:34 +010055A0161F4000,"Go Rally",gpu,ingame,2023-08-16 21:18:23 +0100C1800A9B6000,"Go Vacation™",nvdec;ldn-works,playable,2024-05-13 19:28:53 +0100E6300F854000,"Go! Fish Go!",,playable,2020-07-27 13:52:28 +010032600C8CE000,"Goat Simulator: The GOATY",32-bit,playable,2022-07-29 21:02:33 +01001C700873E000,"GOD EATER 3",gpu;nvdec,ingame,2022-07-29 21:33:21 +0100F3D00B032000,"GOD WARS The Complete Legend",nvdec,playable,2020-05-19 14:37:50 +0100CFA0111C8000,"Gods Will Fall",,playable,2021-02-08 16:49:59 +0100D82009024000,"Goetia",,playable,2020-05-19 12:55:39 +01004D501113C000,"Going Under",deadlock;nvdec,ingame,2020-12-11 22:29:46 +0100126006EF0000,"GOKEN",,playable,2020-08-05 20:22:38 +010013800F0A4000,"Golazo!",,playable,2022-09-13 21:58:37 +01003C000D84C000,"Golem Gates",crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11 +0100779004172000,"Golf Story",,playable,2020-05-14 14:56:17 +01006FB00EBE0000,"Golf With Your Friends",online-broken,playable,2022-09-29 12:55:11 +0100EEC00AA6E000,"Gone Home",,playable,2022-08-01 11:14:20 +01007C2002B3C000,"GoNNER",,playable,2020-05-19 12:05:02 +0100B0500FE4E000,"Good Job!™",,playable,2021-03-02 13:15:55 +01003AD0123A2000,"Good Night, Knight",crash,nothing,2023-07-30 23:38:13 +0100F610122F6000,"Good Pizza, Great Pizza",,playable,2020-12-04 22:59:18 +010014C0100C6000,"Goosebumps Dead of Night",gpu;nvdec,ingame,2020-12-10 20:02:16 +0100B8000B190000,"Goosebumps The Game",,playable,2020-05-19 11:56:52 +0100F2A005C98000,"Gorogoa",,playable,2022-08-01 11:55:08 +01000C7003FE8000,"GORSD",,playable,2020-12-04 22:15:21 +0100E8D007E16000,"Gotcha Racing 2nd",,playable,2020-07-23 17:14:04 +01001010121DE000,"Gothic Murder: Adventure That Changes Destiny",deadlock;crash,ingame,2022-09-30 23:16:53 +01003FF009E60000,"Grab the Bottle",,playable,2020-07-14 17:06:41 +01004D10020F2000,"Graceful Explosion Machine",,playable,2020-05-19 20:36:55 +010038D00EC88000,"Grand Brix Shooter",slow,playable,2020-06-24 13:23:54 +010038100D436000,"Grand Guilds",UE4;nvdec,playable,2021-04-26 12:49:05 +0100BE600D07A000,"Grand Prix Story",,playable,2022-08-01 12:42:23 +05B1D2ABD3D30000,"Grand Theft Auto 3",services;crash;homebrew,nothing,2023-05-01 22:01:58 +0100E0600BBC8000,"GRANDIA HD Collection",crash,boots,2024-08-19 04:29:48 +010028200E132000,"Grass Cutter - Mutated Lawns",slow,ingame,2020-05-19 18:27:42 +010074E0099FA000,"Grave Danger",,playable,2020-05-18 17:41:28 +010054A013E0C000,"GraviFire",,playable,2021-04-05 17:13:32 +01002C2011828000,"Gravity Rider Zero",gpu;vulkan-backend-bug,ingame,2022-09-29 13:56:13 +0100BD800DFA6000,"Greedroid",,playable,2020-12-14 11:14:32 +010068D00AE68000,"GREEN",,playable,2022-08-01 12:54:15 +0100CBB0070EE000,"Green Game: TimeSwapper",nvdec,playable,2021-02-19 18:51:55 +0100DFE00F002000,"GREEN The Life Algorithm",,playable,2022-09-27 21:37:13 +0100DA7013792000,"Grey Skies: A War of the Worlds Story",UE4,playable,2022-10-24 11:13:59 +010031200981C000,"Grid Mania",,playable,2020-05-19 14:11:05 +0100197008B52000,"GRIDD: Retroenhanced",,playable,2020-05-20 11:32:40 +0100DC800A602000,"GRID™ Autosport",nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45 +0100B7900B024000,"Grim Fandango Remastered",nvdec,playable,2022-08-01 13:55:58 +010078E012D80000,"Grim Legends 2: Song of the Dark Swan",nvdec,playable,2022-10-18 12:58:45 +010009F011F90000,"Grim Legends: The Forsaken Bride",nvdec,playable,2022-10-18 13:14:06 +01001E200F2F8000,"Grimshade",,playable,2022-10-02 12:44:20 +0100538012496000,"Grindstone",,playable,2023-02-08 15:54:06 +0100459009A2A000,"GRIP",nvdec;online-broken;UE4,playable,2022-08-01 15:00:22 +0100E1700C31C000,"GRIS",nvdec,playable,2021-06-03 13:33:44 +01009D7011B02000,"GRISAIA PHANTOM TRIGGER 01&02",nvdec,playable,2022-12-04 21:16:06 +01005250123B8000,"GRISAIA PHANTOM TRIGGER 03",audout,playable,2021-01-31 12:30:47 +0100D970123BA000,"GRISAIA PHANTOM TRIGGER 04",audout,playable,2021-01-31 12:40:37 +01002330123BC000,"GRISAIA PHANTOM TRIGGER 05",audout;nvdec,playable,2021-01-31 12:49:59 +0100CAF013AE6000,"GRISAIA PHANTOM TRIGGER 5.5",audout;nvdec,playable,2021-01-31 12:59:44 +010091300FFA0000,"Grizzland",gpu,ingame,2024-07-11 16:28:34 +0100EB500D92E000,"GROOVE COASTER WAI WAI PARTY!!!!",nvdec;ldn-broken,playable,2021-11-06 14:54:27 +01007E100456C000,"Guacamelee! 2",,playable,2020-05-15 14:56:59 +0100BAE00B470000,"Guacamelee! Super Turbo Championship Edition",,playable,2020-05-13 23:44:18 +010089900C9FA000,"Guess the Character",,playable,2020-05-20 13:14:19 +01005DC00D80C000,"Guess the word",,playable,2020-07-26 21:34:25 +01006F80082E4000,"GUILTY GEAR XX ACCENT CORE PLUS R",nvdec,playable,2021-01-13 09:28:33 +01003C6008940000,"GUNBIRD for Nintendo Switch",32-bit,playable,2021-06-04 19:16:01 +0100BCB00AE98000,"GUNBIRD2 for Nintendo Switch",,playable,2020-10-10 14:41:16 +,"Gunka o haita neko",gpu;nvdec,ingame,2020-08-25 12:37:56 +010061000D318000,"Gunman Clive HD Collection",,playable,2020-10-09 12:17:35 +01006D4003BCE000,"Guns, Gore and Cannoli 2",online,playable,2021-01-06 18:43:59 +01008C800E654000,"Gunvolt Chronicles Luminous Avenger iX - Retail Version",,playable,2020-06-16 22:47:07 +0100763015C2E000,"Gunvolt Chronicles: Luminous Avenger iX 2",crash;Needs Update,nothing,2022-04-29 15:34:34 +01002C8018554000,"Gurimugurimoa OnceMore Demo",,playable,2022-07-29 22:07:31 +0100AC601DCA8000,"GYLT",crash,ingame,2024-03-18 20:16:51 +0100822012D76000,"HAAK",gpu,ingame,2023-02-19 14:31:05 +01007E100EFA8000,"Habroxia",,playable,2020-06-16 23:04:42 +0100535012974000,"Hades",vulkan,playable,2022-10-05 10:45:21 +0100618010D76000,"Hakoniwa Explorer Plus",slow,ingame,2021-02-19 16:56:19 +0100E0D00C336000,"Halloween Pinball",,playable,2021-01-12 16:00:46 +01006FF014152000,"Hamidashi Creative",gpu,ingame,2021-12-19 15:30:51 +01003B9007E86000,"Hammerwatch",online-broken;ldn-broken,playable,2022-08-01 16:28:46 +01003620068EA000,"Hand of Fate 2",,playable,2022-08-01 15:44:16 +0100973011358000,"Hang The Kings",,playable,2020-07-28 22:56:59 +010066C018E50000,"Happy Animals Mini Golf",gpu,ingame,2022-12-04 19:24:28 +0100ECE00D13E000,"Hard West",regression,nothing,2022-02-09 07:45:56 +0100D55011D60000,"Hardcore Maze Cube",,playable,2020-12-04 20:01:24 +01002F0011DD4000,"HARDCORE MECHA",slow,playable,2020-11-01 15:06:33 +01000C90117FA000,"HardCube",,playable,2021-05-05 18:33:03 +0100BB600C096000,"Hardway Party",,playable,2020-07-26 12:35:07 +0100D0500AD30000,"Harvest Life",,playable,2022-08-01 16:51:45 +010016B010FDE000,"Harvest Moon®: One World",,playable,2023-05-26 09:17:19 +0100A280187BC000,"Harvestella",UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11 +0100E29001298000,"Has-Been Heroes",,playable,2021-01-13 13:31:48 +01001CC00FA1A000,"Hatsune Miku: Project DIVA Mega Mix",audio;online-broken,playable,2024-01-07 23:12:57 +01009E6014F18000,"Haunted Dawn: The Zombie Apocalypse",,playable,2022-10-28 12:31:51 +010023F008204000,"Haunted Dungeons:Hyakki Castle",,playable,2020-08-12 14:21:48 +0100E2600DBAA000,"Haven",,playable,2021-03-24 11:52:41 +0100EA900FB2C000,"Hayfever",loader-allocator,playable,2022-09-22 17:35:41 +0100EFE00E1DC000,"Headliner: NoviNews",online,playable,2021-03-01 11:36:00 +0100A8200C372000,"Headsnatchers",UE4;crash,menus,2020-07-14 13:29:14 +010067400EA5C000,"Headspun",,playable,2020-07-31 19:46:47 +0100D12008EE4000,"Heart&Slash",,playable,2021-01-13 20:56:32 +010059100D928000,"Heaven Dust",,playable,2020-05-17 14:02:41 +0100FD901000C000,"Heaven's Vault",crash,ingame,2021-02-08 18:22:01 +0100B9C012B66000,"Helheim Hassle",,playable,2020-10-14 11:38:36 +0100E4300C278000,"Hell is Other Demons",,playable,2021-01-13 13:23:02 +01000938017E5C00,"Hell Pie0",nvdec;UE4,playable,2022-11-03 16:48:46 +0100A4600E27A000,"Hell Warders",online,playable,2021-02-27 02:31:03 +010044500CF8E000,"Hellblade: Senua's Sacrifice",gpu;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50 +010087D0084A8000,"Hello Kitty Kruisers With Sanrio Friends",nvdec,playable,2021-06-04 19:08:46 +0100FAA00B168000,"Hello Neighbor",UE4,playable,2022-08-01 21:32:23 +010092B00C4F0000,"Hello Neighbor Hide and Seek",UE4;gpu;slow,ingame,2020-10-24 10:59:57 +010024600C794000,"Hellpoint",,menus,2021-11-26 13:24:20 +0100BEA00E63A000,"Hero Express",nvdec,playable,2020-08-06 13:23:43 +010077D01094C000,"Hero-U: Rogue to Redemption",nvdec,playable,2021-03-24 11:40:01 +0100D2B00BC54000,"Heroes of Hammerwatch - Ultimate Edition",,playable,2022-08-01 18:30:21 +01001B70080F0000,"HEROINE ANTHEM ZERO episode 1",vulkan-backend-bug,playable,2022-08-01 22:02:36 +010057300B0DC000,"Heroki",gpu,ingame,2023-07-30 19:30:01 +0100C2700E338000,"Heroland",,playable,2020-08-05 15:35:39 +01007AC00E012000,"HexaGravity",,playable,2021-05-28 13:47:48 +01004E800F03C000,"Hidden",slow,ingame,2022-10-05 10:56:53 +0100F6A00A684000,"Higurashi no Naku Koro ni Hō",audio,ingame,2021-09-18 14:40:28 +0100F8D0129F4000,"Himehibi 1 gakki - Princess Days",crash,nothing,2021-11-03 08:34:19 +0100F3D008436000,"Hiragana Pixel Party",,playable,2021-01-14 08:36:50 +01004990132AC000,"HITMAN 3 - Cloud Version",Needs Update;crash;services,nothing,2021-04-18 22:35:07 +010083A018262000,"Hitman: Blood Money — Reprisal",deadlock,ingame,2024-09-28 16:28:50 +01004B100A5CC000,"Hob: The Definitive Edition",,playable,2021-01-13 09:39:19 +0100F7300ED2C000,"Hoggy2",,playable,2022-10-10 13:53:35 +0100F7E00C70E000,"Hogwarts Legacy",slow,ingame,2024-09-03 19:53:58 +0100633007D48000,"Hollow Knight",nvdec,playable,2023-01-16 15:44:56 +0100F2100061E800,"Hollow0",UE4;gpu,ingame,2021-03-03 23:42:56 +0100342009E16000,"Holy Potatoes! What The Hell?!",,playable,2020-07-03 10:48:56 +010071B00C904000,"HoPiKo",,playable,2021-01-13 20:12:38 +010087800EE5A000,"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",crash,boots,2023-02-19 00:51:21 +010086D011EB8000,"Horace",,playable,2022-10-10 14:03:50 +0100001019F6E000,"Horizon Chase 2",deadlock;slow;crash;UE4,ingame,2024-08-19 04:24:06 +01009EA00B714000,"Horizon Chase Turbo",,playable,2021-02-19 19:40:56 +0100E4200FA82000,"Horror Pinball Bundle",crash,menus,2022-09-13 22:15:34 +0100017007980000,"Hotel Transylvania 3 Monsters Overboard",nvdec,playable,2021-01-27 18:55:31 +0100D0E00E51E000,"Hotline Miami Collection",nvdec,playable,2022-09-09 16:41:19 +0100BDE008218000,"Hotshot Racing",gpu;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17 +0100CAE00EB02000,"House Flipper",,playable,2021-06-16 18:28:32 +0100F6800910A000,"Hover",online-broken,playable,2022-09-20 12:54:46 +0100A66003384000,"Hulu",online-broken,boots,2022-12-09 10:05:00 +0100701001D92000,"Human Resource Machine",32-bit,playable,2020-12-17 21:47:09 +01000CA004DCA000,"Human: Fall Flat",,playable,2021-01-13 18:36:05 +0100E1A00AF40000,"Hungry Shark® World",,playable,2021-01-13 18:26:08 +0100EBA004726000,"Huntdown",,playable,2021-04-05 16:59:54 +010068000CAC0000,"Hunter's Legacy: Purrfect Edition",,playable,2022-08-02 10:33:31 +0100C460040EA000,"Hunting Simulator",UE4,playable,2022-08-02 10:54:08 +010061F010C3A000,"Hunting Simulator 2",UE4,playable,2022-10-10 14:25:51 +0100B3300B4AA000,"Hyper Jam",UE4;crash,boots,2020-12-15 22:52:11 +01003B200B372000,"Hyper Light Drifter - Special Edition",vulkan-backend-bug,playable,2023-01-13 15:44:48 +01006C500A29C000,"HyperBrawl Tournament",crash;services,boots,2020-12-04 23:03:27 +0100A8B00F0B4000,"HYPERCHARGE Unboxed",nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39 +010061400ED90000,"HyperParasite",nvdec;UE4,playable,2022-09-27 22:05:44 +0100959010466000,"Hypnospace Outlaw",nvdec,ingame,2023-08-02 22:46:49 +01002B00111A2000,"Hyrule Warriors: Age of Calamity",gpu;deadlock;slow;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00 +0100A2C01320E000,"Hyrule Warriors: Age of Calamity - Demo Version",slow,playable,2022-10-10 17:37:41 +0100AE00096EA000,"Hyrule Warriors: Definitive Edition",services-horizon;nvdec,ingame,2024-06-16 10:34:05 +0100849000BDA000,"I Am Setsuna",,playable,2021-11-28 11:06:11 +01001860140B0000,"I Saw Black Clouds",nvdec,playable,2021-04-19 17:22:16 +0100429006A06000,"I, Zombie",,playable,2021-01-13 14:53:44 +01004E5007E92000,"Ice Age Scrat's Nutty Adventure!",nvdec,playable,2022-09-13 22:22:29 +010053700A25A000,"Ice Cream Surfer",,playable,2020-07-29 12:04:07 +0100954014718000,"Ice Station Z",crash,menus,2021-11-21 20:02:15 +0100BE9007E7E000,"ICEY",,playable,2021-01-14 16:16:04 +0100BC60099FE000,"Iconoclasts",,playable,2021-08-30 21:11:04 +01001E700EB28000,"Idle Champions of the Forgotten Realms",online,boots,2020-12-17 18:24:57 +01002EC014BCA000,"IdolDays",gpu;crash,ingame,2021-12-19 15:31:28 +01006550129C6000,"If Found...",,playable,2020-12-11 13:43:14 +01001AC00ED72000,"If My Heart Had Wings",,playable,2022-09-29 14:54:57 +01009F20086A0000,"Ikaruga",,playable,2023-04-06 15:00:02 +010040900AF46000,"Ikenfell",,playable,2021-06-16 17:18:44 +01007BC00E55A000,"Immortal Planet",,playable,2022-09-20 13:40:43 +010079501025C000,"Immortal Realms: Vampire Wars",nvdec,playable,2021-06-17 17:41:46 +01000F400435A000,"Immortal Redneck",nvdec,playable,2021-01-27 18:36:28 +01004A600EC0A000,"Immortals Fenyx Rising™",gpu;crash,menus,2023-02-24 16:19:55 +0100737003190000,"IMPLOSION",nvdec,playable,2021-12-12 03:52:13 +0100A760129A0000,"In rays of the Light",,playable,2021-04-07 15:18:07 +0100A2101107C000,"Indie Puzzle Bundle Vol 1",,playable,2022-09-27 22:23:21 +010002A00CD68000,"Indiecalypse",nvdec,playable,2020-06-11 20:19:09 +01001D3003FDE000,"Indivisible",nvdec,playable,2022-09-29 15:20:57 +01002BD00F626000,"Inertial Drift",online-broken,playable,2022-10-11 12:22:19 +0100D4300A4CA000,"Infernium",UE4;regression,nothing,2021-01-13 16:36:07 +010039C001296000,"Infinite Minigolf",online,playable,2020-09-29 12:26:25 +01001CB00EFD6000,"Infliction: Extended Cut",nvdec;UE4,playable,2022-10-02 13:15:55 +0100F1401161E000,"INMOST",,playable,2022-10-05 11:27:40 +0100F200049C8000,"InnerSpace",,playable,2021-01-13 19:36:14 +0100D2D009028000,"INSIDE",,playable,2021-12-25 20:24:56 +0100EC7012D34000,"Inside Grass: A little adventure",,playable,2020-10-15 15:26:27 +010099700D750000,"Instant Sports",,playable,2022-09-09 12:59:40 +010099A011A46000,"Instant Sports Summer Games",gpu,menus,2020-09-02 13:39:28 +010031B0145B8000,"INSTANT SPORTS TENNIS",,playable,2022-10-28 16:42:17 +010041501005E000,"Interrogation: You will be deceived",,playable,2022-10-05 11:40:10 +01000F700DECE000,"Into the Dead 2",nvdec,playable,2022-09-14 12:36:14 +01001D0003B96000,"INVERSUS Deluxe",online-broken,playable,2022-08-02 14:35:36 +0100C5B00FADE000,"Invisible Fist",,playable,2020-08-08 13:25:52 +010031B00C48C000,"Invisible, Inc. Nintendo Switch Edition",crash,nothing,2021-01-29 16:28:13 +01005F400E644000,"Invisigun Reloaded",gpu;online,ingame,2021-06-10 12:13:24 +010041C00D086000,"Ion Fury",vulkan-backend-bug,ingame,2022-08-07 08:27:51 +010095C016C14000,"Iridium",,playable,2022-08-05 23:19:53 +0100AD300B786000,"Iris School of Wizardry -Vinculum Hearts-",,playable,2022-12-05 13:11:15 +0100945012168000,"Iris.Fall",nvdec,playable,2022-10-18 13:40:22 +01005270118D6000,"Iron Wings",slow,ingame,2022-08-07 08:32:57 +01004DB003E6A000,"IRONCAST",,playable,2021-01-13 13:54:29 +0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",,playable,2021-06-04 20:12:37 +010063E0104BE000,"Is It Wrong to Try to Pick Up Girls in a Dungeon? Familia Myth Infinite Combate",,playable,2020-08-31 13:52:21 +0100F06013710000,"ISLAND",,playable,2021-05-06 15:11:47 +010077900440A000,"Island Flight Simulator",,playable,2021-06-04 19:42:46 +0100A2600FCA0000,"Island Saver",nvdec,playable,2020-10-23 22:07:02 +010065200D192000,"Isoland",,playable,2020-07-26 13:48:16 +0100F5600D194000,"Isoland 2 - Ashes of Time",,playable,2020-07-26 14:29:05 +010001F0145A8000,"Isolomus",services,boots,2021-11-03 07:48:21 +010068700C70A000,"ITTA",,playable,2021-06-07 03:15:52 +01004070022F0000,"Ittle Dew 2+",,playable,2020-11-17 11:44:32 +0100DEB00F12A000,"IxSHE Tell",nvdec,playable,2022-12-02 18:00:42 +0100D8E00C874000,"izneo",online-broken,menus,2022-08-06 15:56:23 +0100CD5008D9E000,"James Pond Codename Robocod",,playable,2021-01-13 09:48:45 +01005F4010AF0000,"Japanese Rail Sim: Journey to Kyoto",nvdec,playable,2020-07-29 17:14:21 +010002D00EDD0000,"JDM Racing",,playable,2020-08-03 17:02:37 +0100C2700AEB8000,"Jenny LeClue - Detectivu",crash,nothing,2020-12-15 21:07:07 +01006E400AE2A000,"Jeopardy!®",audout;nvdec;online,playable,2021-02-22 13:53:46 +0100E4900D266000,"Jet Kave Adventure",nvdec,playable,2022-09-09 14:50:39 +0100F3500C70C000,"Jet Lancer",gpu,ingame,2021-02-15 18:15:47 +0100A5A00AF26000,"Jettomero: Hero of the Universe",,playable,2022-08-02 14:46:43 +01008330134DA000,"Jiffy",gpu;opengl,ingame,2024-02-03 23:11:24 +01001F5006DF6000,"Jim is Moving Out!",deadlock,ingame,2020-06-03 22:05:19 +0100F4D00D8BE000,"Jinrui no Ninasama he",crash,ingame,2023-03-07 02:04:17 +010038D011F08000,"Jisei: The First Case HD",audio,playable,2022-10-05 11:43:33 +01007CE00C960000,"Job the Leprechaun",,playable,2020-06-05 12:10:06 +01007090104EC000,"John Wick Hex",,playable,2022-08-07 08:29:12 +01006E4003832000,"Johnny Turbo's Arcade: Bad Dudes",,playable,2020-12-10 12:30:56 +010069B002CDE000,"Johnny Turbo's Arcade: Gate Of Doom",,playable,2022-07-29 12:17:50 +010080D002CC6000,"Johnny Turbo's Arcade: Two Crude Dudes",,playable,2022-08-02 20:29:50 +0100D230069CC000,"Johnny Turbo's Arcade: Wizard Fire",,playable,2022-08-02 20:39:15 +01008120128C2000,"JoJos Bizarre Adventure All-Star Battle R",,playable,2022-12-03 10:45:10 +01008B60117EC000,"Journey to the Savage Planet",nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12 +0100C7600F654000,"Juicy Realm",,playable,2023-02-21 19:16:20 +0100B4D00C76E000,"JUMANJI: The Video Game",UE4;crash,boots,2020-07-12 13:52:25 +0100183010F12000,"JUMP FORCE - Deluxe Edition",nvdec;online-broken;UE4,playable,2023-10-01 15:56:05 +01003D601014A000,"Jump King",,playable,2020-06-09 10:12:39 +0100B9C012706000,"Jump Rope Challenge",services;crash;Needs Update,boots,2023-02-27 01:24:28 +0100D87009954000,"Jumping Joe & Friends",,playable,2021-01-13 17:09:42 +010069800D2B4000,"JUNK PLANET",,playable,2020-11-09 12:38:33 +0100CE100A826000,"Jurassic Pinball",,playable,2021-06-04 19:02:37 +010050A011344000,"Jurassic World Evolution: Complete Edition",cpu;crash,menus,2023-08-04 18:06:54 +0100BCE000598000,"Just Dance 2017®",online,playable,2021-03-05 09:46:01 +0100BEE017FC0000,"Just Dance 2023",,nothing,2023-06-05 16:44:54 +010075600AE96000,"Just Dance® 2019",gpu;online,ingame,2021-02-27 17:21:27 +0100DDB00DB38000,"Just Dance® 2020",,playable,2022-01-24 13:31:57 +0100EA6014BB8000,"Just Dance® 2022",gpu;services;crash;Needs Update,ingame,2022-10-28 11:01:53 +0100AC600CF0A000,"Just Die Already",UE4,playable,2022-12-13 13:37:50 +01002C301033E000,"Just Glide",,playable,2020-08-07 17:38:10 +0100830008426000,"Just Shapes & Beats",ldn-untested;nvdec,playable,2021-02-09 12:18:36 +010035A0044E8000,"JYDGE",,playable,2022-08-02 21:20:13 +0100D58012FC2000,"Kagamihara/Justice",crash,nothing,2021-06-21 16:41:29 +0100D5F00EC52000,"Kairobotica",,playable,2021-05-06 12:17:56 +0100BDC00A664000,"KAMEN RIDER CLIMAX SCRAMBLE",nvdec;ldn-untested,playable,2024-07-03 08:51:11 +0100A9801180E000,"KAMEN RIDER memory of heroez / Premium Sound Edition",,playable,2022-12-06 03:14:26 +010085300314E000,"KAMIKO",,playable,2020-05-13 12:48:57 +,"Kangokuto Mary Skelter Finale",audio;crash,ingame,2021-01-09 22:39:28 +01007FD00DB20000,"Katakoi Contrast - collection of branch -",nvdec,playable,2022-12-09 09:41:26 +0100D7000C2C6000,"Katamari Damacy REROLL",,playable,2022-08-02 21:35:05 +0100F9800EDFA000,"KATANA KAMI: A Way of the Samurai Story",slow,playable,2022-04-09 10:40:16 +010029600D56A000,"Katana ZERO",,playable,2022-08-26 08:09:09 +010038B00F142000,"Kaze and the Wild Masks",,playable,2021-04-19 17:11:03 +0100D7C01115E000,"Keen: One Girl Army",,playable,2020-12-14 23:19:52 +01008D400A584000,"Keep Talking and Nobody Explodes",,playable,2021-02-15 18:05:21 +01004B100BDA2000,"KEMONO FRIENDS PICROSS",,playable,2023-02-08 15:54:34 +0100A8200B15C000,"Kentucky Robo Chicken",,playable,2020-05-12 20:54:17 +0100327005C94000,"Kentucky Route Zero: TV Edition",,playable,2024-04-09 23:22:46 +0100DA200A09A000,"Kero Blaster",,playable,2020-05-12 20:42:52 +0100F680116A2000,"Kholat",UE4;nvdec,playable,2021-06-17 11:52:48 +0100C0A004C2C000,"Kid Tripp",crash,nothing,2020-10-15 07:41:23 +0100FB400D832000,"KILL la KILL -IF",,playable,2020-06-09 14:47:08 +010011B00910C000,"Kill The Bad Guy",,playable,2020-05-12 22:16:10 +0100F2900B3E2000,"Killer Queen Black",ldn-untested;online,playable,2021-04-08 12:46:18 +,"Kin'iro no Corda Octave",,playable,2020-09-22 13:23:12 +010089000F0E8000,"Kine",UE4,playable,2022-09-14 14:28:37 +0100E6B00FFBA000,"King Lucas",,playable,2022-09-21 19:43:23 +0100B1300783E000,"King Oddball",,playable,2020-05-13 13:47:57 +01008D80148C8000,"King of Seas",nvdec;UE4,playable,2022-10-28 18:29:41 +0100515014A94000,"King of Seas Demo",nvdec;UE4,playable,2022-10-28 18:09:31 +01005D2011EA8000,"KINGDOM HEARTS Melody of Memory",crash;nvdec,ingame,2021-03-03 17:34:12 +0100A280121F6000,"Kingdom Rush",32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00 +01005EF003FF2000,"Kingdom Two Crowns",,playable,2020-05-16 19:36:21 +0100BD9004AB6000,"Kingdom: New Lands",,playable,2022-08-02 21:48:50 +0100EF50132BE000,"Kingdoms of Amalur: Re-Reckoning",,playable,2023-08-10 13:05:08 +010091201605A000,"Kirby and the Forgotten Land (Demo version)",demo,playable,2022-08-21 21:03:01 +0100227010460000,"Kirby Fighters™ 2",ldn-works;online,playable,2021-06-17 13:06:39 +0100A8E016236000,"Kirby’s Dream Buffet™",crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44 +010091D01A57E000,"Kirby’s Return to Dream Land Deluxe - Demo",demo,playable,2023-02-18 17:21:55 +01006B601380E000,"Kirby’s Return to Dream Land™ Deluxe",,playable,2024-05-16 19:58:04 +01004D300C5AE000,"Kirby™ and the Forgotten Land",gpu,ingame,2024-03-11 17:11:21 +01007E3006DDA000,"Kirby™ Star Allies",nvdec,playable,2023-11-15 17:06:19 +0100F3A00F4CA000,"Kissed by the Baddest Bidder",gpu;nvdec,ingame,2022-12-04 20:57:11 +01000C900A136000,"Kitten Squad",nvdec,playable,2022-08-03 12:01:59 +010079D00C8AE000,"Klondike Solitaire",,playable,2020-12-13 16:17:27 +0100A6800DE70000,"Knight Squad",,playable,2020-08-09 16:54:51 +010024B00E1D6000,"Knight Squad 2",nvdec;online-broken,playable,2022-10-28 18:38:09 +0100D51006AAC000,"Knight Terrors",,playable,2020-05-13 13:09:22 +01005F8010D98000,"Knightin'+",,playable,2020-08-31 18:18:21 +010004400B22A000,"Knights of Pen & Paper 2 Deluxiest Edition",,playable,2020-05-13 14:07:00 +0100D3F008746000,"Knights of Pen and Paper +1 Deluxier Edition",,playable,2020-05-11 21:46:32 +010001A00A1F6000,"Knock-Knock",nvdec,playable,2021-02-01 20:03:19 +01009EF00DDB4000,"Knockout City™",services;online-broken,boots,2022-12-09 09:48:58 +0100C57019BA2000,"Koa and the Five Pirates of Mara",gpu,ingame,2024-07-11 16:14:44 +01001E500401C000,"Koi DX",,playable,2020-05-11 21:37:51 +,"Koi no Hanasaku Hyakkaen",32-bit;gpu;nvdec,ingame,2020-10-03 14:17:10 +01005D200C9AA000,"Koloro",,playable,2022-08-03 12:34:02 +0100464009294000,"Kona",,playable,2022-08-03 12:48:19 +010016C011AAA000,"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",,playable,2023-04-26 09:51:08 +010088500D5EE000,"KORAL",UE4;crash;gpu,menus,2020-11-16 12:41:26 +0100EC8004762000,"KORG Gadget for Nintendo Switch",,playable,2020-05-13 13:57:24 +010046600CCA4000,"Kotodama: The 7 Mysteries of Fujisawa",audout,playable,2021-02-01 20:28:37 +010022801242C000,"KukkoroDays",crash,menus,2021-11-25 08:52:56 +010035A00DF62000,"KUNAI",nvdec,playable,2022-09-20 13:48:34 +010060400ADD2000,"Kunio-Kun: The World Classics Collection",online,playable,2021-01-29 20:21:46 +010037500F282000,"KUUKIYOMI 2: Consider It More! - New Era",crash;Needs Update,nothing,2021-11-02 09:34:40 +0100894011F62000,"Kwaidan ~Azuma manor story~",,playable,2022-10-05 12:50:44 +0100830004FB6000,"L.A. Noire",,playable,2022-08-03 16:49:35 +0100732009CAE000,"L.F.O. -Lost Future Omega-",UE4;deadlock,boots,2020-10-16 12:16:44 +0100F2B0123AE000,"L.O.L. Surprise! Remix: We Rule The World",,playable,2022-10-11 22:48:03 +010026000F662800,"LA-MULANA",gpu,ingame,2022-08-12 01:06:21 +0100E5D00F4AE000,"LA-MULANA 1 & 2",,playable,2022-09-22 17:56:36 +010038000F644000,"LA-MULANA 2",,playable,2022-09-03 13:45:57 +010058500B3E0000,"Labyrinth of Refrain: Coven of Dusk",,playable,2021-02-15 17:38:48 +010022D0089AE000,"Labyrinth of the Witch",,playable,2020-11-01 14:42:37 +0100BAB00E8C0000,"Langrisser I & II",,playable,2021-02-19 15:46:10 +0100E7200B272000,"Lanota",,playable,2019-09-04 01:58:14 +01005E000D3D8000,"Lapis x Labyrinth",,playable,2021-02-01 18:58:08 +0100AFE00E882000,"Laraan",,playable,2020-12-16 12:45:48 +0100DA700879C000,"Last Day of June",nvdec,playable,2021-06-08 11:35:32 +01009E100BDD6000,"LASTFIGHT",,playable,2022-09-20 13:54:55 +0100055007B86000,"Late Shift",nvdec,playable,2021-02-01 18:43:58 +01004EB00DACE000,"Later Daters Part One",,playable,2020-07-29 16:35:45 +01001730144DA000,"Layers of Fear 2",nvdec;UE4,playable,2022-10-28 18:49:52 +0100BF5006A7C000,"Layers of Fear: Legacy",nvdec,playable,2021-02-15 16:30:41 +0100CE500D226000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",nvdec;opengl,playable,2022-09-14 15:01:57 +0100FDB00AA80000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",gpu;nvdec;opengl,ingame,2022-09-14 15:15:55 +01009C100390E000,"League of Evil",online,playable,2021-06-08 11:23:27 +01002E900CD6E000,"Left-Right : The Mansion",,playable,2020-05-13 13:02:12 +010079901C898000,"Legacy of Kain™ Soul Reaver 1&2 Remastered",,playable,2025-01-07 05:50:01 +01002DB007A96000,"Legend of Kay Anniversary",nvdec,playable,2021-01-29 18:38:29 +0100ECC00EF3C000,"Legend of the Skyfish",,playable,2020-06-24 13:04:22 +01007E900DFB6000,"Legend of the Tetrarchs",deadlock,ingame,2020-07-10 07:54:03 +0100A73006E74000,"Legendary Eleven",,playable,2021-06-08 12:09:03 +0100A7700B46C000,"Legendary Fishing",online,playable,2021-04-14 15:08:46 +0100739018020000,"LEGO® 2K Drive",gpu;ldn-works,ingame,2024-04-09 02:05:12 +01003A30012C0000,"LEGO® CITY Undercover",nvdec,playable,2024-09-30 08:44:27 +010070D009FEC000,"LEGO® DC Super-Villains",,playable,2021-05-27 18:10:37 +010052A00B5D2000,"LEGO® Harry Potter™ Collection",crash,ingame,2024-01-31 10:28:07 +010073C01AF34000,"LEGO® Horizon Adventures™",vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56 +01001C100E772000,"LEGO® Jurassic World",,playable,2021-05-27 17:00:20 +0100D3A00409E000,"LEGO® Marvel Super Heroes 2",crash,nothing,2023-03-02 17:12:33 +01006F600FFC8000,"LEGO® Marvel™ Super Heroes",,playable,2024-09-10 19:02:19 +01007FC00206E000,"LEGO® NINJAGO® Movie Video Game",crash,nothing,2022-08-22 19:12:53 +010042D00D900000,"LEGO® Star Wars™: The Skywalker Saga",gpu;slow,ingame,2024-04-13 20:08:46 +0100A01006E00000,"LEGO® The Incredibles",crash,nothing,2022-08-03 18:36:59 +0100838002AEA000,"LEGO® Worlds",crash;slow,ingame,2020-07-17 13:35:39 +0100E7500BF84000,"LEGRAND LEGACY: Tale of the Fatebounds",nvdec,playable,2020-07-26 12:27:36 +0100A8E00CAA0000,"Leisure Suit Larry - Wet Dreams Don't Dry",,playable,2022-08-03 19:51:44 +010031A0135CA000,"Leisure Suit Larry - Wet Dreams Dry Twice",,playable,2022-10-28 19:00:57 +01003AB00983C000,"Lethal League Blaze",online,playable,2021-01-29 20:13:31 +01008C300648E000,"Letter Quest Remastered",,playable,2020-05-11 21:30:34 +0100CE301678E800,"Letters - a written adventure",gpu,ingame,2023-02-21 20:12:38 +01009A200BE42000,"Levelhead",online,ingame,2020-10-18 11:44:51 +0100C960041DC000,"Levels+ : Addictive Puzzle Game",,playable,2020-05-12 13:51:39 +0100C8000F146000,"Liberated",gpu;nvdec,ingame,2024-07-04 04:58:24 +01003A90133A6000,"Liberated: Enhanced Edition",gpu;nvdec,ingame,2024-07-04 04:48:48 +01004360045C8000,"Lichtspeer: Double Speer Edition",,playable,2020-05-12 16:43:09 +010041F0128AE000,"Liege Dragon",,playable,2022-10-12 10:27:03 +010006300AFFE000,"Life Goes On",,playable,2021-01-29 19:01:20 +0100FD101186C000,"Life is Strange 2",UE4,playable,2024-07-04 05:05:58 +0100DC301186A000,"Life is Strange Remastered",UE4,playable,2022-10-03 16:54:44 +010008501186E000,"Life is Strange: Before the Storm Remastered",,playable,2023-09-28 17:15:44 +0100500012AB4000,"Life is Strange: True Colors™",gpu;UE4,ingame,2024-04-08 16:11:52 +01003AB012F00000,"Life of Boris: Super Slav",,ingame,2020-12-17 11:40:05 +0100B3A0135D6000,"Life of Fly",,playable,2021-01-25 23:41:07 +010069A01506E000,"Life of Fly 2",slow,playable,2022-10-28 19:26:52 +01005B6008132000,"Lifeless Planet: Premiere Edition",,playable,2022-08-03 21:25:13 +010030A006F6E000,"Light Fall",nvdec,playable,2021-01-18 14:55:36 +010087700D07C000,"Light Tracer",nvdec,playable,2021-05-05 19:15:43 +01009C8009026000,"LIMBO",cpu;32-bit,boots,2023-06-28 15:39:19 +0100EDE012B58000,"Linelight",,playable,2020-12-17 12:18:07 +0100FAD00E65E000,"Lines X",,playable,2020-05-11 15:28:30 +010032F01096C000,"Lines XL",,playable,2020-08-31 17:48:23 +0100943010310000,"Little Busters! Converted Edition",nvdec,playable,2022-09-29 15:34:56 +0100A3F009142000,"Little Dragons Café",,playable,2020-05-12 00:00:52 +010079A00D9E8000,"Little Friends: Dogs & Cats",,playable,2020-11-12 12:45:51 +0100B18001D8E000,"Little Inferno",32-bit;gpu;nvdec,ingame,2020-12-17 21:43:56 +0100E7000E826000,"Little Misfortune",nvdec,playable,2021-02-23 20:39:44 +0100FE0014200000,"Little Mouse's Encyclopedia",,playable,2022-10-28 19:38:58 +01002FC00412C000,"Little Nightmares Complete Edition",nvdec;UE4,playable,2022-08-03 21:45:35 +010097100EDD6000,"Little Nightmares II",UE4,playable,2023-02-10 18:24:44 +010093A0135D6000,"Little Nightmares II DEMO",UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20 +0100535014D76000,"Little Noah: Scion of Paradise",opengl-backend-bug,playable,2022-09-14 04:17:13 +0100E6D00E81C000,"Little Racer",,playable,2022-10-18 16:41:13 +0100DD700D95E000,"Little Shopping",,playable,2020-10-03 16:34:35 +01000FB00AA90000,"Little Town Hero",,playable,2020-10-15 23:28:48 +01000690085BE000,"Little Triangle",,playable,2020-06-17 14:46:26 +0100CF801776C000,"LIVE A LIVE",UE4;amd-vendor-bug,playable,2023-02-05 15:12:07 +0100BA000FC9C000,"LocO-SportS",,playable,2022-09-20 14:09:30 +010016C009374000,"Lode Runner Legacy",,playable,2021-01-10 14:10:28 +0100D2C013288000,"Lofi Ping Pong",crash,ingame,2020-12-15 20:09:22 +0100B6D016EE6000,"Lone Ruin",crash;nvdec,ingame,2023-01-17 06:41:19 +0100A0C00E0DE000,"Lonely Mountains: Downhill",online-broken,playable,2024-07-04 05:08:11 +010062A0178A8000,"LOOPERS",gpu;slow;crash,ingame,2022-06-17 19:21:45 +010064200F7D8000,"Lost Horizon",,playable,2020-09-01 13:41:22 +01005ED010642000,"Lost Horizon 2",nvdec,playable,2020-06-16 12:02:12 +01005FE01291A000,"Lost in Random™",gpu,ingame,2022-12-18 07:09:28 +0100133014510000,"Lost Lands 2: The Four Horsemen",nvdec,playable,2022-10-24 16:41:00 +0100156014C6A000,"Lost Lands 3: The Golden Curse",nvdec,playable,2022-10-24 16:30:00 +0100BDD010AC8000,"Lost Lands: Dark Overlord",,playable,2022-10-03 11:52:58 +010054600AC74000,"LOST ORBIT: Terminal Velocity",,playable,2021-06-14 12:21:12 +010046600B76A000,"Lost Phone Stories",services,ingame,2020-04-05 23:17:33 +01008AD013A86800,"Lost Ruins",gpu,ingame,2023-02-19 14:09:00 +010077B0038B2000,"LOST SPHEAR",,playable,2021-01-10 06:01:21 +0100018013124000,"Lost Words: Beyond the Page",,playable,2022-10-24 17:03:21 +0100D36011AD4000,"Love Letter from Thief X",gpu;nvdec,ingame,2023-11-14 03:55:31 +0100F0300B7BE000,"Ludomania",crash;services,nothing,2020-04-03 00:33:47 +010048701995E000,"Luigi's Mansion™ 2 HD",ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27 +0100DCA0064A6000,"Luigi’s Mansion™ 3",gpu;slow;Needs Update;ldn-works,ingame,2024-09-27 22:17:36 +010052B00B194000,"Lumini",,playable,2020-08-09 20:45:09 +0100FF00042EE000,"Lumo",nvdec,playable,2022-02-11 18:20:30 +0100F3100EB44000,"Lust for Darkness",nvdec,playable,2020-07-26 12:09:15 +0100F0B00F68E000,"Lust for Darkness: Dawn Edition",nvdec,playable,2021-06-16 13:47:46 +0100EC2011A80000,"Luxar",,playable,2021-03-04 21:11:57 +0100F2400D434000,"MachiKnights -Blood bagos-",nvdec;UE4,playable,2022-09-14 15:08:04 +010024A009428000,"Mad Carnage",,playable,2021-01-10 13:00:07 +01005E7013476000,"Mad Father",,playable,2020-11-12 13:22:10 +010061E00EB1E000,"Mad Games Tycoon",,playable,2022-09-20 14:23:14 +01004A200E722000,"Magazine Mogul",loader-allocator,playable,2022-10-03 12:05:34 +01008E500BF62000,"MagiCat",,playable,2020-12-11 15:22:07 +010032C011356000,"Magicolors",,playable,2020-08-12 18:39:11 +01008C300B624000,"Mahjong Solitaire Refresh",crash,boots,2022-12-09 12:02:55 +010099A0145E8000,"Mahluk dark demon",,playable,2021-04-15 13:14:24 +01001C100D80E000,"Mainlining",,playable,2020-06-05 01:02:00 +0100D9900F220000,"Maitetsu:Pure Station",,playable,2022-09-20 15:12:49 +0100A78017BD6000,"Makai Senki Disgaea 7",,playable,2023-10-05 00:22:18 +01005A700CC3C000,"Mana Spark",,playable,2020-12-10 13:41:01 +010093D00CB22000,"Maneater",nvdec;UE4,playable,2024-05-21 16:11:57 +0100361009B1A000,"Manifold Garden",,playable,2020-10-13 20:27:13 +0100C9A00952A000,"Manticore - Galaxy on Fire",crash;nvdec,boots,2024-02-04 04:37:24 +0100E98002F6E000,"Mantis Burn Racing",online-broken;ldn-broken,playable,2024-09-02 02:13:04 +01008E800D1FE000,"Marble Power Blast",,playable,2021-06-04 16:00:02 +01001B2012D5E000,"Märchen Forest",,playable,2021-02-04 21:33:34 +0100DA7017C9E000,"Marco & The Galaxy Dragon Demo",gpu;demo,ingame,2023-06-03 13:05:33 +01006D0017F7A000,"Mario & Luigi: Brothership",crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00 +010002C00C270000,"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55 +0100317013770000,"MARIO + RABBIDS SPARKS OF HOPE",gpu;Needs Update,ingame,2024-06-20 19:56:19 +010067300059A000,"Mario + Rabbids® Kingdom Battle",slow;opengl-backend-bug,playable,2024-05-06 10:16:54 +0100C9C00E25C000,"Mario Golf™: Super Rush",gpu,ingame,2024-08-18 21:31:48 +0100ED100BA3A000,"Mario Kart Live: Home Circuit™",services;crash;Needs More Attention,nothing,2022-12-07 22:36:52 +0100152000022000,"Mario Kart™ 8 Deluxe",32-bit;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17 +01006FE013472000,"Mario Party™ Superstars",gpu;ldn-works;mac-bug,ingame,2024-05-16 11:23:34 +010019401051C000,"Mario Strikers™: Battle League",crash;nvdec,boots,2024-05-07 06:23:56 +0100BDE00862A000,"Mario Tennis™ Aces",gpu;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40 +0100B99019412000,"Mario vs. Donkey Kong™",,playable,2024-05-04 21:22:39 +0100D9E01DBB0000,"Mario vs. Donkey Kong™ Demo",,playable,2024-02-18 10:40:06 +01009A700A538000,"Mark of the Ninja: Remastered",,playable,2022-08-04 15:48:30 +010044600FDF0000,"Marooners",nvdec;online-broken,playable,2022-10-18 21:35:26 +010060700AC50000,"MARVEL ULTIMATE ALLIANCE 3: The Black Order",nvdec;ldn-untested,playable,2024-02-14 19:51:51 +01003DE00C95E000,"Mary Skelter 2",crash;regression,ingame,2023-09-12 07:37:28 +0100113008262000,"Masquerada: Songs and Shadows",,playable,2022-09-20 15:18:54 +01004800197F0000,"Master Detective Archives: Rain Code",gpu,ingame,2024-04-19 20:11:09 +0100CC7009196000,"Masters of Anima",nvdec,playable,2022-08-04 16:00:09 +01004B100A1C4000,"MathLand",,playable,2020-09-01 15:40:06 +0100A8C011F26000,"Max and the book of chaos",,playable,2020-09-02 12:24:43 +01001C9007614000,"Max: The Curse of Brotherhood",nvdec,playable,2022-08-04 16:33:04 +0100E8B012FBC000,"Maze",,playable,2020-12-17 16:13:58 +0100EEF00CBC0000,"MEANDERS",UE4;gpu,ingame,2021-06-11 19:19:33 +0100EC000CE24000,"Mech Rage",,playable,2020-11-18 12:30:16 +0100C4F005EB4000,"Mecho Tales",,playable,2022-08-04 17:03:19 +0100E4600D31A000,"Mechstermination Force",,playable,2024-07-04 05:39:15 +,"Medarot Classics Plus Kabuto Ver",,playable,2020-11-21 11:31:18 +,"Medarot Classics Plus Kuwagata Ver",,playable,2020-11-21 11:30:40 +0100BBC00CB9A000,"Mega Mall Story",slow,playable,2022-08-04 17:10:58 +0100B0C0086B0000,"Mega Man 11",,playable,2021-04-26 12:07:53 +010038E016264000,"Mega Man Battle Network Legacy Collection Vol. 1",,playable,2023-04-25 03:55:57 +0100734016266000,"Mega Man Battle Network Legacy Collection Vol. 2",,playable,2023-08-03 18:04:32 +01002D4007AE0000,"Mega Man Legacy Collection",gpu,ingame,2021-06-03 18:17:17 +0100842008EC4000,"Mega Man Legacy Collection 2",,playable,2021-01-06 08:47:59 +01005C60086BE000,"Mega Man X Legacy Collection",audio;crash;services,menus,2020-12-04 04:30:17 +010025C00D410000,"Mega Man Zero/ZX Legacy Collection",,playable,2021-06-14 16:17:32 +0100FC700F942000,"Megabyte Punch",,playable,2020-10-16 14:07:18 +010006F011220000,"Megadimension Neptunia VII",32-bit;nvdec,playable,2020-12-17 20:56:03 +010082B00E8B8000,"Megaquarium",,playable,2022-09-14 16:50:00 +010005A00B312000,"Megaton Rainfall",gpu;opengl,boots,2022-08-04 18:29:43 +0100EA100DF92000,"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",32-bit;nvdec,playable,2022-12-05 13:19:12 +0100B360068B2000,"Mekorama",gpu,boots,2021-06-17 16:37:21 +01000FA010340000,"Melbits World",nvdec;online,menus,2021-11-26 13:51:22 +0100F68019636000,"Melon Journey",,playable,2023-04-23 21:20:01 +,"Memories Off -Innocent Fille- for Dearest",,playable,2020-08-04 07:31:22 +010062F011E7C000,"Memory Lane",UE4,playable,2022-10-05 14:31:03 +0100EBE00D5B0000,"Meow Motors",UE4;gpu,ingame,2020-12-18 00:24:01 +0100273008FBC000,"Mercenaries Saga Chronicles",,playable,2021-01-10 12:48:19 +010094500C216000,"Mercenaries Wings: The False Phoenix",crash;services,nothing,2020-05-08 22:42:12 +0100F900046C4000,"Mercenary Kings: Reloaded Edition",online,playable,2020-10-16 13:05:58 +0100E5000D3CA000,"Merchants of Kaidan",,playable,2021-04-15 11:44:28 +01009A500D4A8000,"METAGAL",,playable,2020-06-05 00:05:48 +010047F01AA10000,"METAL GEAR SOLID 3: Snake Eater - Master Collection Version",services-horizon,menus,2024-07-24 06:34:06 +0100E8F00F6BE000,"METAL MAX Xeno Reborn",,playable,2022-12-05 15:33:53 +01002DE00E5D0000,"Metaloid: Origin",,playable,2020-06-04 20:26:35 +010055200E87E000,"Metamorphosis",UE4;audout;gpu;nvdec,ingame,2021-06-16 16:18:11 +0100D4900E82C000,"Metro 2033 Redux",gpu,ingame,2022-11-09 10:53:13 +0100F0400E850000,"Metro: Last Light Redux",slow;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52 +010012101468C000,"Metroid Prime™ Remastered",gpu;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15 +010093801237C000,"Metroid™ Dread",,playable,2023-11-13 04:02:36 +0100A1200F20C000,"Midnight Evil",,playable,2022-10-18 22:55:19 +0100C1E0135E0000,"Mighty Fight Federation",online,playable,2021-04-06 18:39:56 +0100AD701344C000,"Mighty Goose",nvdec,playable,2022-10-28 20:25:38 +01000E2003FA0000,"MIGHTY GUNVOLT BURST",,playable,2020-10-19 16:05:49 +010060D00AE36000,"Mighty Switch Force! Collection",,playable,2022-10-28 20:40:32 +01003DA010E8A000,"Miitopia™",gpu;services-horizon,ingame,2024-09-06 10:39:13 +01007DA0140E8000,"Miitopia™ Demo",services;crash;demo,menus,2023-02-24 11:50:58 +01004B7009F00000,"Miles & Kilo",,playable,2020-10-22 11:39:49 +0100976008FBE000,"Millie",,playable,2021-01-26 20:47:19 +0100F5700C9A8000,"MIND: Path to Thalamus",UE4,playable,2021-06-16 17:37:25 +0100D71004694000,"Minecraft",crash;ldn-broken,ingame,2024-09-29 12:08:59 +01006C100EC08000,"Minecraft Dungeons",nvdec;online-broken;UE4,playable,2024-06-26 22:10:43 +01007C6012CC8000,"Minecraft Legends",gpu;crash,ingame,2024-03-04 00:32:24 +01006BD001E06000,"Minecraft: Nintendo Switch Edition",ldn-broken,playable,2023-10-15 01:47:08 +01003EF007ABA000,"Minecraft: Story Mode - Season Two",online-broken,playable,2023-03-04 00:30:50 +010059C002AC2000,"Minecraft: Story Mode - The Complete Adventure",crash;online-broken,boots,2022-08-04 18:56:58 +0100B7500F756000,"Minefield",,playable,2022-10-05 15:03:29 +01003560119A6000,"Mini Motor Racing X",,playable,2021-04-13 17:54:49 +0100FB700DE1A000,"Mini Trains",,playable,2020-07-29 23:06:20 +010039200EC66000,"Miniature - The Story Puzzle",UE4,playable,2022-09-14 17:18:50 +010069200EB80000,"Ministry of Broadcast",,playable,2022-08-10 00:31:16 +0100C3F000BD8000,"Minna de Wai Wai! Spelunker",crash,nothing,2021-11-03 07:17:11 +0100FAE010864000,"Minoria",,playable,2022-08-06 18:50:50 +01005AB015994000,"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",gpu,playable,2022-03-28 02:22:24 +0100CFA0138C8000,"Missile Dancer",,playable,2021-01-31 12:22:03 +0100E3601495C000,"Missing Features: 2D",,playable,2022-10-28 20:52:54 +010059200CC40000,"Mist Hunter",,playable,2021-06-16 13:58:58 +0100F65011E52000,"Mittelborg: City of Mages",,playable,2020-08-12 19:58:06 +0100876015D74000,"MLB® The Show™ 22",gpu;slow,ingame,2023-04-25 06:28:43 +0100A9F01776A000,"MLB® The Show™ 22 Tech Test",services;crash;Needs Update;demo,nothing,2022-12-09 10:28:34 +0100913019170000,"MLB® The Show™ 23",gpu,ingame,2024-07-26 00:56:50 +0100E2E01C32E000,"MLB® The Show™ 24",services-horizon,nothing,2024-03-31 04:54:11 +010011300F74C000,"MO:Astray",crash,ingame,2020-12-11 21:45:44 +010020400BDD2000,"Moai VI: Unexpected Guests",slow,playable,2020-10-27 16:40:20 +0100D8700B712000,"Modern Combat Blackout",crash,nothing,2021-03-29 19:47:15 +010004900D772000,"Modern Tales: Age of Invention",slow,playable,2022-10-12 11:20:19 +0100B8500D570000,"Moero Chronicle™ Hyper",32-bit,playable,2022-08-11 07:21:56 +01004EB0119AC000,"Moero Crystal H",32-bit;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22 +0100B46017500000,"MOFUMOFUSENSEN",gpu,menus,2024-09-21 21:51:08 +01004A400C320000,"Momodora: Reverie Under the Moonlight",deadlock,nothing,2022-02-06 03:47:43 +01002CC00BC4C000,"Momonga Pinball Adventures",,playable,2022-09-20 16:00:40 +010093100DA04000,"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",gpu,ingame,2023-09-22 10:21:46 +0100FBD00ED24000,"MONKEY BARRELS",,playable,2022-09-14 17:28:52 +01004C500B8E0000,"Monkey King: Master of the Clouds",,playable,2020-09-28 22:35:48 +01003030161DC000,"Monomals",gpu,ingame,2024-08-06 22:02:51 +0100F3A00FB78000,"Mononoke Slashdown",crash,menus,2022-05-04 20:55:47 +01007430037F6000,"MONOPOLY® for Nintendo Switch™",nvdec;online-broken,playable,2024-02-06 23:13:01 +01005FF013DC2000,"MONOPOLY® Madness",,playable,2022-01-29 21:13:52 +0100E2D0128E6000,"Monster Blast",gpu,ingame,2023-09-02 20:02:32 +01006F7001D10000,"Monster Boy and the Cursed Kingdom",nvdec,playable,2022-08-04 20:06:32 +01005FC01000E000,"Monster Bugs Eat People",,playable,2020-07-26 02:05:34 +0100742007266000,"Monster Energy Supercross - The Official Videogame",nvdec;UE4,playable,2022-08-04 20:25:00 +0100F8100B982000,"Monster Energy Supercross - The Official Videogame 2",nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24 +010097800EA20000,"Monster Energy Supercross - The Official Videogame 3",UE4;audout;nvdec;online,playable,2021-06-14 12:37:54 +0100E9900ED74000,"Monster Farm",32-bit;nvdec,playable,2021-05-05 19:29:13 +0100770008DD8000,"Monster Hunter Generations Ultimate™",32-bit;online-broken;ldn-works,playable,2024-03-18 14:35:36 +0100B04011742000,"Monster Hunter Rise",gpu;slow;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59 +010093A01305C000,"Monster Hunter Rise Demo",online-broken;ldn-works;demo,playable,2022-10-18 23:04:17 +0100E21011446000,"Monster Hunter Stories 2: Wings of Ruin",services,ingame,2022-07-10 19:27:30 +010042501329E000,"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",demo,playable,2022-11-13 22:20:26 +,"Monster Hunter XX Demo",32-bit;cpu,nothing,2020-03-22 10:12:28 +0100C3800049C000,"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",,playable,2024-07-21 14:08:09 +010088400366E000,"Monster Jam Crush It!",UE4;nvdec;online,playable,2021-04-08 19:29:27 +010095C00F354000,"Monster Jam Steel Titans",crash;nvdec;UE4,menus,2021-11-14 09:45:38 +010051B0131F0000,"Monster Jam Steel Titans 2",nvdec;UE4,playable,2022-10-24 17:17:59 +01004DE00DD44000,"Monster Puzzle",,playable,2020-09-28 22:23:10 +0100A0F00DA68000,"Monster Sanctuary",crash,ingame,2021-04-04 05:06:41 +0100D30010C42000,"Monster Truck Championship",slow;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51 +01004E10142FE000,"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",crash,ingame,2021-07-23 10:56:44 +010039F00EF70000,"Monstrum",,playable,2021-01-31 11:07:26 +0100C2E00B494000,"Moonfall Ultimate",nvdec,playable,2021-01-17 14:01:25 +0100E3D014ABC000,"Moorhuhn Jump and Run 'Traps and Treasures'",,playable,2024-03-08 15:10:02 +010045C00F274000,"Moorhuhn Kart 2",online-broken,playable,2022-10-28 21:10:35 +010040E00F642000,"Morbid: The Seven Acolytes",,playable,2022-08-09 17:21:58 +01004230123E0000,"More Dark",,playable,2020-12-15 16:01:06 +01005DA003E6E000,"Morphies Law",UE4;crash;ldn-untested;nvdec;online,menus,2020-11-22 17:05:29 +0100776003F0C000,"Morphite",,playable,2021-01-05 19:40:55 +0100F2200C984000,"Mortal Kombat 11",slow;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17 +01006560184E6000,"Mortal Kombat™ 1",gpu,ingame,2024-09-04 15:45:47 +010032800D740000,"Mosaic",,playable,2020-08-11 13:07:35 +01002ED00B01C000,"Moto Racer 4",UE4;nvdec;online,playable,2021-04-08 19:09:11 +01003F200D0F2000,"Moto Rush GT",,playable,2022-08-05 11:23:55 +0100361007268000,"MotoGP™18",nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45 +01004B800D0E8000,"MotoGP™19",nvdec;online-broken;UE4,playable,2022-08-05 11:54:14 +01001FA00FBBC000,"MotoGP™20",ldn-untested,playable,2022-09-29 17:58:01 +01000F5013820000,"MotoGP™21",gpu;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08 +010040401D564000,"MotoGP™24",gpu,ingame,2024-05-10 23:41:00 +01002A900D6D6000,"Motorsport Manager for Nintendo Switch™",nvdec,playable,2022-08-05 12:48:14 +01009DB00D6E0000,"Mountain Rescue Simulator",,playable,2022-09-20 16:36:48 +0100C4C00E73E000,"Moving Out",nvdec,playable,2021-06-07 21:17:24 +0100D3300F110000,"Mr Blaster",,playable,2022-09-14 17:56:24 +0100DCA011262000,"Mr. DRILLER DrillLand",nvdec,playable,2020-07-24 13:56:48 +010031F002B66000,"Mr. Shifty",slow,playable,2020-05-08 15:28:16 +01005EF00B4BC000,"Ms. Splosion Man",online,playable,2020-05-09 20:45:43 +010087C009246000,"Muddledash",services,ingame,2020-05-08 16:46:14 +01009D200952E000,"MudRunner - American Wilds",gpu;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52 +010073E008E6E000,"Mugsters",,playable,2021-01-28 17:57:17 +0100A8400471A000,"MUJO",,playable,2020-05-08 16:31:04 +0100211005E94000,"Mulaka",,playable,2021-01-28 18:07:20 +010038B00B9AE000,"Mummy Pinball",,playable,2022-08-05 16:08:11 +01008E200C5C2000,"Muse Dash",,playable,2020-06-06 14:41:29 +010035901046C000,"Mushroom Quest",,playable,2020-05-17 13:07:08 +0100700006EF6000,"Mushroom Wars 2",nvdec,playable,2020-09-28 15:26:08 +010046400F310000,"Music Racer",,playable,2020-08-10 08:51:23 +,"Musou Orochi 2 Ultimate",crash;nvdec,boots,2021-04-09 19:39:16 +0100F6000EAA8000,"Must Dash Amigos",,playable,2022-09-20 16:45:56 +01007B6006092000,"MUSYNX",,playable,2020-05-08 14:24:43 +0100C3E00ACAA000,"Mutant Football League: Dynasty Edition",online-broken,playable,2022-08-05 17:01:51 +01004BE004A86000,"Mutant Mudds Collection",,playable,2022-08-05 17:11:38 +0100E6B00DEA4000,"Mutant Year Zero: Road to Eden - Deluxe Edition",nvdec;UE4,playable,2022-09-10 13:31:10 +0100161009E5C000,"MX Nitro: Unleashed",,playable,2022-09-27 22:34:33 +0100218011E7E000,"MX vs ATV All Out",nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46 +0100D940063A0000,"MXGP3 - The Official Motocross Videogame",UE4;gpu;nvdec,ingame,2020-12-16 14:00:20 +01002C6012334000,"My Aunt is a Witch",,playable,2022-10-19 09:21:17 +0100F6F0118B8000,"My Butler",,playable,2020-06-27 13:46:23 +010031200B94C000,"My Friend Pedro",nvdec,playable,2021-05-28 11:19:17 +01000D700BE88000,"My Girlfriend is a Mermaid!?",nvdec,playable,2020-05-08 13:32:55 +010039000B68E000,"MY HERO ONE'S JUSTICE",UE4;crash;gpu;online,menus,2020-12-10 13:11:04 +01007E700DBF6000,"MY HERO ONE'S JUSTICE 2",UE4;gpu;nvdec,ingame,2020-12-18 14:08:47 +0100E4701373E000,"My Hidden Things",,playable,2021-04-15 11:26:06 +0100872012B34000,"My Little Dog Adventure",gpu,ingame,2020-12-10 17:47:37 +01008C600395A000,"My Little Riding Champion",slow,playable,2020-05-08 17:00:53 +010086B00C784000,"My Lovely Daughter: ReBorn",,playable,2022-11-24 17:25:32 +0100E7700C284000,"My Memory of Us",,playable,2022-08-20 11:03:14 +010028F00ABAE000,"My Riding Stables - Life with Horses",,playable,2022-08-05 21:39:07 +010042A00FBF0000,"My Riding Stables 2: A New Adventure",,playable,2021-05-16 14:14:59 +0100E25008E68000,"My Time at Portia",,playable,2021-05-28 12:42:55 +0100158011A08000,"My Universe - Cooking Star Restaurant",,playable,2022-10-19 10:00:44 +0100F71011A0A000,"My Universe - Fashion Boutique",nvdec,playable,2022-10-12 14:54:19 +0100CD5011A02000,"My Universe - PET CLINIC CATS & DOGS",crash;nvdec,boots,2022-02-06 02:05:53 +01006C301199C000,"My Universe - School Teacher",nvdec,playable,2021-01-21 16:02:52 +01000D5005974000,"N++ (NPLUSPLUS)",,playable,2022-08-05 21:54:58 +0100A6F00AC70000,"NAIRI: Tower of Shirin",nvdec,playable,2020-08-09 19:49:12 +010002F001220000,"NAMCO MUSEUM",ldn-untested,playable,2024-08-13 07:52:21 +0100DAA00AEE6000,"NAMCO MUSEUM™ ARCADE PAC™",,playable,2021-06-07 21:44:50 +,"NAMCOT COLLECTION",audio,playable,2020-06-25 13:35:22 +010072B00BDDE000,"Narcos: Rise of the Cartels",UE4;crash;nvdec,boots,2021-03-22 13:18:47 +01006BB00800A000,"NARUTO SHIPPUDEN: Ultimate Ninja STORM 3 Full Burst",nvdec,playable,2024-06-16 14:58:05 +010084D00CF5E000,"NARUTO SHIPPUDEN™: Ultimate Ninja® STORM 4 ROAD TO BORUTO",,playable,2024-06-29 13:04:22 +0100D2D0190A4000,"NARUTO X BORUTO Ultimate Ninja STORM CONNECTIONS",services-horizon,nothing,2024-07-25 05:16:48 +0100715007354000,"NARUTO: Ultimate Ninja STORM",nvdec,playable,2022-08-06 14:10:31 +0100545016D5E000,"NASCAR Rivals",crash;Incomplete,ingame,2023-04-21 01:17:47 +0100103011894000,"Naught",UE4,playable,2021-04-26 13:31:45 +01001AE00C1B2000,"NBA 2K Playgrounds 2",nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38 +0100760002048000,"NBA 2K18",gpu;ldn-untested,ingame,2022-08-06 14:17:51 +01001FF00B544000,"NBA 2K19",crash;ldn-untested;services,nothing,2021-04-16 13:07:21 +0100E24011D1E000,"NBA 2K21",gpu,boots,2022-10-05 15:31:51 +0100ACA017E4E800,"NBA 2K23",,boots,2023-10-10 23:07:14 +010006501A8D8000,"NBA 2K24 Kobe Bryant Edition",cpu;gpu,boots,2024-08-11 18:23:08 +010002900294A000,"NBA Playgrounds",nvdec;online-broken;UE4,playable,2022-08-06 17:06:59 +0100F5A008126000,"NBA Playgrounds - Enhanced Edition",nvdec;online-broken;UE4,playable,2022-08-06 16:13:44 +0100BBC00E4F8000,"Need a packet?",,playable,2020-08-12 16:09:01 +010029B0118E8000,"Need for Speed™ Hot Pursuit Remastered",online-broken,playable,2024-03-20 21:58:02 +010023500B0BA000,"Nefarious",,playable,2020-12-17 03:20:33 +01008390136FC000,"Negative: The Way of Shinobi",nvdec,playable,2021-03-24 11:29:41 +010065F00F55A000,"Neighbours back From Hell",nvdec,playable,2022-10-12 15:36:48 +0100B4900AD3E000,"NEKOPARA Vol.1",nvdec,playable,2022-08-06 18:25:54 +010012900C782000,"NEKOPARA Vol.2",,playable,2020-12-16 11:04:47 +010045000E418000,"NEKOPARA Vol.3",,playable,2022-10-03 12:49:04 +010049F013656000,"NEKOPARA Vol.4",crash,ingame,2021-01-17 01:47:18 +01006ED00BC76000,"Nelke & the Legendary Alchemists ~Ateliers of the New World~",,playable,2021-01-28 19:39:42 +01005F000B784000,"Nelly Cootalot: The Fowl Fleet",,playable,2020-06-11 20:55:42 +01001AB0141A8000,"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",crash,ingame,2021-07-18 07:29:18 +0100EBB00D2F4000,"Neo Cab",,playable,2021-04-24 00:27:58 +010040000DB98000,"Neo Cab Demo",crash,boots,2020-06-16 00:14:00 +010006D0128B4000,"NEOGEO POCKET COLOR SELECTION Vol.1",,playable,2023-07-08 20:55:36 +0100BAB01113A000,"Neon Abyss",,playable,2022-10-05 15:59:44 +010075E0047F8000,"Neon Chrome",,playable,2022-08-06 18:38:34 +010032000EAC6000,"Neon Drive",,playable,2022-09-10 13:45:48 +0100B9201406A000,"Neon White",crash,ingame,2023-02-02 22:25:06 +0100743008694000,"Neonwall",nvdec,playable,2022-08-06 18:49:52 +01001A201331E000,"Neoverse Trinity Edition",,playable,2022-10-19 10:28:03 +01000B2011352000,"Nerdook Bundle Vol. 1",gpu;slow,ingame,2020-10-07 14:27:10 +01008B0010160000,"Nerved",UE4,playable,2022-09-20 17:14:03 +0100BA0004F38000,"NeuroVoider",,playable,2020-06-04 18:20:05 +0100C20012A54000,"Nevaeh",gpu;nvdec,ingame,2021-06-16 17:29:03 +010039801093A000,"Never Breakup",,playable,2022-10-05 16:12:12 +0100F79012600000,"Neverending Nightmares",crash;gpu,boots,2021-04-24 01:43:35 +0100A9600EDF8000,"Neverlast",slow,ingame,2020-07-13 23:55:19 +010013700DA4A000,"Neverwinter Nights: Enhanced Edition",gpu;nvdec,menus,2024-09-30 02:59:19 +01004C200100E000,"New Frontier Days ~Founding Pioneers~",,playable,2020-12-10 12:45:07 +0100F4300BF2C000,"New Pokémon Snap™",,playable,2023-01-15 23:26:57 +010017700B6C2000,"New Super Lucky's Tale",,playable,2024-03-11 14:14:10 +0100EA80032EA000,"New Super Mario Bros.™ U Deluxe",32-bit,playable,2023-10-08 02:06:37 +0100B9500E886000,"Newt One",,playable,2020-10-17 21:21:48 +01005A5011A44000,"Nexomon: Extinction",,playable,2020-11-30 15:02:22 +0100B69012EC6000,"Nexoria: Dungeon Rogue Heroes",gpu,ingame,2021-10-04 18:41:29 +0100271004570000,"Next Up Hero",online,playable,2021-01-04 22:39:36 +0100E5600D446000,"Ni no Kuni: Wrath of the White Witch",32-bit;nvdec,boots,2024-07-12 04:52:59 +0100EDD00D530000,"Nice Slice",nvdec,playable,2020-06-17 15:13:27 +01000EC010BF4000,"Niche - a genetics survival game",nvdec,playable,2020-11-27 14:01:11 +010010701AFB2000,"Nickelodeon All-Star Brawl 2",,playable,2024-06-03 14:15:01 +0100D6200933C000,"Nickelodeon Kart Racers",,playable,2021-01-07 12:16:49 +010058800F860000,"Nicky - The Home Alone Golf Ball",,playable,2020-08-08 13:45:39 +0100A95012668000,"Nicole",audout,playable,2022-10-05 16:41:44 +0100B8E016F76000,"NieR:Automata The End of YoRHa Edition",slow;crash,ingame,2024-05-17 01:06:34 +0100F3A0095A6000,"Night Call",nvdec,playable,2022-10-03 12:57:00 +0100921006A04000,"Night in the Woods",,playable,2022-12-03 20:17:54 +0100D8500A692000,"Night Trap - 25th Anniversary Edition",nvdec,playable,2022-08-08 13:16:14 +01005F4009112000,"Nightmare Boy: The New Horizons of Reigns of Dreams, a Metroidvania journey with little rusty nightmares, the empire of knight final boss",,playable,2021-01-05 15:52:29 +01006E700B702000,"Nightmares from the Deep 2: The Siren`s Call",nvdec,playable,2022-10-19 10:58:53 +0100628004BCE000,"Nights of Azure 2: Bride of the New Moon",crash;nvdec;regression,menus,2022-11-24 16:00:39 +010042300C4F6000,"Nightshade/百花百狼",nvdec,playable,2020-05-10 19:43:31 +0100AA0008736000,"Nihilumbra",,playable,2020-05-10 16:00:12 +0100D03003F0E000,"Nine Parchments",ldn-untested,playable,2022-08-07 12:32:08 +0100E2F014F46000,"NINJA GAIDEN Σ",nvdec,playable,2022-11-13 16:27:02 +0100696014F4A000,"NINJA GAIDEN Σ2",nvdec,playable,2024-07-31 21:53:48 +01002AF014F4C000,"NINJA GAIDEN: Master Collection",nvdec,playable,2023-08-11 08:25:31 +010088E003A76000,"Ninja Shodown",,playable,2020-05-11 12:31:21 +010081D00A480000,"Ninja Striker!",,playable,2020-12-08 19:33:29 +0100CCD0073EA000,"Ninjala",online-broken;UE4,boots,2024-07-03 20:04:49 +010003C00B868000,"Ninjin: Clash of Carrots",online-broken,playable,2024-07-10 05:12:26 +0100746010E4C000,"NinNinDays",,playable,2022-11-20 15:17:29 +0100C9A00ECE6000,"Nintendo 64™ – Nintendo Switch Online",gpu;vulkan,ingame,2024-04-23 20:21:07 +0100D870045B6000,"Nintendo Entertainment System™ - Nintendo Switch Online",online,playable,2022-07-01 15:45:06 +0100C4B0034B2000,"Nintendo Labo Toy-Con 01 Variety Kit",gpu,ingame,2022-08-07 12:56:07 +01001E9003502000,"Nintendo Labo Toy-Con 03 Vehicle Kit",services;crash,menus,2022-08-03 17:20:11 +0100165003504000,"Nintendo Labo Toy-Con 04 VR Kit",services;crash,boots,2023-01-17 22:30:24 +01009AB0034E0000,"Nintendo Labo™ Toy-Con 02: Robot Kit",gpu,ingame,2022-08-07 13:03:19 +0100D2F00D5C0000,"Nintendo Switch™ Sports",deadlock,boots,2024-09-10 14:20:24 +01000EE017182000,"Nintendo Switch™ Sports Online Play Test",gpu,ingame,2022-03-16 07:44:12 +010037200C72A000,"Nippon Marathon",nvdec,playable,2021-01-28 20:32:46 +010020901088A000,"Nirvana Pilot Yume",,playable,2022-10-29 11:49:49 +01009B400ACBA000,"No Heroes Here",online,playable,2020-05-10 02:41:57 +0100853015E86000,"No Man's Sky",gpu,ingame,2024-07-25 05:18:17 +0100F0400F202000,"No More Heroes",32-bit,playable,2022-09-13 07:44:27 +010071400F204000,"No More Heroes 2: Desperate Struggle",32-bit;nvdec,playable,2022-11-19 01:38:13 +01007C600EB42000,"No More Heroes 3",gpu;UE4,ingame,2024-03-11 17:06:19 +01009F3011004000,"No Straight Roads",nvdec,playable,2022-10-05 17:01:38 +0100F7D00A1BC000,"NO THING",,playable,2021-01-04 19:06:01 +0100542012884000,"Nongunz: Doppelganger Edition",,playable,2022-10-29 12:00:39 +010016E011EFA000,"Norman's Great Illusion",,playable,2020-12-15 19:28:24 +01001A500AD6A000,"Norn9 ~Norn + Nonette~ LOFN",nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16 +01004840086FE000,"NORTH",nvdec,playable,2021-01-05 16:17:44 +0100A9E00D97A000,"Northgard",crash,menus,2022-02-06 02:05:35 +01008AE019614000,"nOS new Operating System",,playable,2023-03-22 16:49:08 +0100CB800B07E000,"NOT A HERO: SUPER SNAZZY EDITION",,playable,2021-01-28 19:31:24 +01004D500D9BE000,"Not Not - A Brain Buster",,playable,2020-05-10 02:05:26 +0100DAF00D0E2000,"Not Tonight: Take Back Control Edition",nvdec,playable,2022-10-19 11:48:47 +0100343013248000,"Nubarron: The adventure of an unlucky gnome",,playable,2020-12-17 16:45:17 +01005140089F6000,"Nuclien",,playable,2020-05-10 05:32:55 +010002700C34C000,"Numbala",,playable,2020-05-11 12:01:07 +010020500C8C8000,"Number Place 10000",gpu,menus,2021-11-24 09:14:23 +010003701002C000,"Nurse Love Syndrome",,playable,2022-10-13 10:05:22 +0000000000000000,"nx-hbmenu",Needs Update;homebrew,boots,2024-04-06 22:05:32 +,"nxquake2",services;crash;homebrew,nothing,2022-08-04 23:14:04 +010049F00EC30000,"Nyan Cat: Lost in Space",online,playable,2021-06-12 13:22:03 +01002E6014FC4000,"O---O",,playable,2022-10-29 12:12:14 +010074600CC7A000,"OBAKEIDORO!",nvdec;online,playable,2020-10-16 16:57:34 +01002A000C478000,"Observer",UE4;gpu;nvdec,ingame,2021-03-03 20:19:45 +01007D7001D0E000,"Oceanhorn - Monster of Uncharted Seas",,playable,2021-01-05 13:55:22 +01006CB010840000,"Oceanhorn 2: Knights of the Lost Realm",,playable,2021-05-21 18:26:10 +010096B00A08E000,"Octocopter: Double or Squids",,playable,2021-01-06 01:30:16 +0100CAB006F54000,"Octodad: Dadliest Catch",crash,boots,2021-04-23 15:26:12 +0100A3501946E000,"OCTOPATH TRAVELER II",gpu;amd-vendor-bug,ingame,2024-09-22 11:39:20 +010057D006492000,"Octopath Traveler™",UE4;crash;gpu,ingame,2020-08-31 02:34:36 +010084300C816000,"Odallus: The Dark Call",,playable,2022-08-08 12:37:58 +0100BB500EE3C000,"Oddworld: Munch's Oddysee",gpu;nvdec,ingame,2021-06-17 12:11:50 +01005E700ABB8000,"Oddworld: New 'n' Tasty",nvdec,playable,2021-06-17 17:51:32 +0100D210177C6000,"ODDWORLD: SOULSTORM",services-horizon;crash,boots,2024-08-18 13:13:26 +01002EA00ABBA000,"Oddworld: Stranger's Wrath",crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21 +010029F00C876000,"Odium to the Core",gpu,ingame,2021-01-08 14:03:52 +01006F5013202000,"Off And On Again",,playable,2022-10-29 19:46:26 +01003CD00E8BC000,"Offroad Racing - Buggy X ATV X Moto",online-broken;UE4,playable,2022-09-14 18:53:22 +01003B900AE12000,"Oh My Godheads: Party Edition",,playable,2021-04-15 11:04:11 +0100F45006A00000,"Oh...Sir! The Hollywood Roast",,ingame,2020-12-06 00:42:30 +010030B00B2F6000,"OK K.O.! Let’s Play Heroes",nvdec,playable,2021-01-11 18:41:02 +0100276009872000,"OKAMI HD",nvdec,playable,2024-04-05 06:24:58 +01006AB00BD82000,"OkunoKA",online-broken,playable,2022-08-08 14:41:51 +0100CE2007A86000,"Old Man's Journey",nvdec,playable,2021-01-28 19:16:52 +0100C3D00923A000,"Old School Musical",,playable,2020-12-10 12:51:12 +010099000BA48000,"Old School Racer 2",,playable,2020-10-19 12:11:26 +0100E0200B980000,"OlliOlli: Switch Stance",gpu,boots,2024-04-25 08:36:37 +0100F9D00C186000,"Olympia Soiree",,playable,2022-12-04 21:07:12 +0100A8B00E14A000,"Olympic Games Tokyo 2020 – The Official Video Game™",ldn-untested;nvdec;online,playable,2021-01-06 01:20:24 +01001D600E51A000,"Omega Labyrinth Life",,playable,2021-02-23 21:03:03 +,"Omega Vampire",nvdec,playable,2020-10-17 19:15:35 +0100CDC00C40A000,"Omensight: Definitive Edition",UE4;crash;nvdec,ingame,2020-07-26 01:45:14 +01006DB00D970000,"OMG Zombies!",32-bit,playable,2021-04-12 18:04:45 +010014E017B14000,"OMORI",,playable,2023-01-07 20:21:02 +,"Once Upon A Coma",nvdec,playable,2020-08-01 12:09:39 +0100BD3006A02000,"One More Dungeon",,playable,2021-01-06 09:10:58 +010076600FD64000,"One Person Story",,playable,2020-07-14 11:51:02 +0100774009CF6000,"ONE PIECE Pirate Warriors 3 Deluxe Edition",nvdec,playable,2020-05-10 06:23:52 +01008FE00E2F6000,"ONE PIECE: PIRATE WARRIORS 4",online-broken;ldn-untested,playable,2022-09-27 22:55:46 +0100574002AF4000,"ONE PIECE: Unlimited World Red Deluxe Edition",,playable,2020-05-10 22:26:32 +0100EEA00E3EA000,"One-Way Ticket",UE4,playable,2020-06-20 17:20:49 +0100463013246000,"Oneiros",,playable,2022-10-13 10:17:22 +010057C00D374000,"Oniken",,playable,2022-09-10 14:22:38 +010037900C814000,"Oniken: Unstoppable Edition",,playable,2022-08-08 14:52:06 +0100416008A12000,"Onimusha: Warlords",nvdec,playable,2020-07-31 13:08:39 +0100CF4011B2A000,"OniNaki",nvdec,playable,2021-02-27 21:52:42 +010074000BE8E000,"oOo: Ascension",,playable,2021-01-25 14:13:34 +0100D5400BD90000,"Operación Triunfo 2017",services;nvdec,ingame,2022-08-08 15:06:42 +01006CF00CFA4000,"Operencia: The Stolen Sun",UE4;nvdec,playable,2021-06-08 13:51:07 +01004A200BE82000,"OPUS Collection",,playable,2021-01-25 15:24:04 +010049C0075F0000,"OPUS: The Day We Found Earth",nvdec,playable,2021-01-21 18:29:31 +0100F9A012892000,"Ord.",,playable,2020-12-14 11:59:06 +010061D00DB74000,"Ori and the Blind Forest: Definitive Edition",nvdec;online-broken,playable,2022-09-14 19:58:13 +010005800F46E000,"Ori and the Blind Forest: Definitive Edition Demo",,playable,2022-09-10 14:40:12 +01008DD013200000,"Ori and the Will of the Wisps",,playable,2023-03-07 00:47:13 +01006C70102EA000,"Orn: The Tiny Forest Sprite",UE4;gpu,ingame,2020-08-07 14:25:30 +0100E5900F49A000,"Othercide",nvdec,playable,2022-10-05 19:04:38 +01006AA00EE44000,"Otokomizu",,playable,2020-07-13 21:00:44 +01006AF013A9E000,"Otti: The House Keeper",,playable,2021-01-31 12:11:24 +01000320060AC000,"OTTTD: Over The Top Tower Defense",slow,ingame,2020-10-10 19:31:07 +010097F010FE6000,"Our Two Bedroom Story",gpu;nvdec,ingame,2023-10-10 17:41:20 +0100D5D00C6BE000,"Our World Is Ended.",nvdec,playable,2021-01-19 22:46:57 +01005A700A166000,"OUT OF THE BOX",,playable,2021-01-28 01:34:27 +0100D9F013102000,"Outbreak Lost Hope",crash,boots,2021-04-26 18:01:23 +01006EE013100000,"Outbreak The Nightmare Chronicles",,playable,2022-10-13 10:41:57 +0100A0D013464000,"Outbreak: Endless Nightmares",,playable,2022-10-29 12:35:49 +0100C850130FE000,"Outbreak: Epidemic",,playable,2022-10-13 10:27:31 +0100B450130FC000,"Outbreak: The New Nightmare",,playable,2022-10-19 15:42:07 +0100B8900EFA6000,"Outbuddies DX",gpu,ingame,2022-08-04 22:39:24 +0100DE70085E8000,"Outlast 2",crash;nvdec,ingame,2022-01-22 22:28:05 +01008D4007A1E000,"Outlast: Bundle of Terror",nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26 +01009B900401E000,"Overcooked Special Edition",,playable,2022-08-08 20:48:52 +01006FD0080B2000,"Overcooked! 2",ldn-untested,playable,2022-08-08 16:48:10 +0100F28011892000,"Overcooked! All You Can Eat",ldn-untested;online,playable,2021-04-15 10:33:52 +0100D7F00EC64000,"Overlanders",nvdec;UE4,playable,2022-09-14 20:15:06 +01008EA00E816000,"OVERPASS™",online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47 +0100647012F62000,"Override 2: Super Mech League",online-broken;UE4,playable,2022-10-19 15:56:04 +01008A700F7EE000,"Override: Mech City Brawl - Super Charged Mega Edition",nvdec;online-broken;UE4,playable,2022-09-20 17:33:32 +0100F8600E21E000,"Overwatch® 2",deadlock,boots,2022-09-14 20:22:22 +01005F000CC18000,"OVERWHELM",,playable,2021-01-21 18:37:18 +0100BC2004FF4000,"Owlboy",,playable,2020-10-19 14:24:45 +0100AD9012510000,"PAC-MAN™ 99",gpu;online-broken,ingame,2024-04-23 00:48:25 +010024C001224000,"PAC-MAN™ CHAMPIONSHIP EDITION 2 PLUS",,playable,2021-01-19 22:06:18 +011123900AEE0000,"Paladins",online,menus,2021-01-21 19:21:37 +0100F0D004CAE000,"PAN-PAN A tiny big adventure",audout,playable,2021-01-25 14:42:00 +010083700B730000,"Pang Adventures",,playable,2021-04-10 12:16:59 +010006E00DFAE000,"Pantsu Hunter: Back to the 90s",,playable,2021-02-19 15:12:27 +0100C6A00E94A000,"Panzer Dragoon: Remake",,playable,2020-10-04 04:03:55 +01004AE0108E0000,"Panzer Paladin",,playable,2021-05-05 18:26:00 +010004500DE50000,"Paper Dolls Original",UE4;crash,boots,2020-07-13 20:26:21 +0100A3900C3E2000,"Paper Mario™: The Origami King",audio;Needs Update,playable,2024-08-09 18:27:40 +0100ECD018EBE000,"Paper Mario™: The Thousand-Year Door",gpu;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35 +01006AD00B82C000,"Paperbound Brawlers",,playable,2021-01-25 14:32:15 +0100DC70174E0000,"Paradigm Paradox",vulkan-backend-bug,playable,2022-12-03 22:28:13 +01007FB010DC8000,"Paradise Killer",UE4,playable,2022-10-05 19:33:05 +010063400B2EC000,"Paranautical Activity",,playable,2021-01-25 13:49:19 +01006B5012B32000,"Part Time UFO™",crash,ingame,2023-03-03 03:13:05 +01007FC00A040000,"Party Arcade",online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53 +0100B8E00359E000,"Party Golf",nvdec,playable,2022-08-09 12:38:30 +010022801217E000,"Party Hard 2",nvdec,playable,2022-10-05 20:31:48 +010027D00F63C000,"Party Treats",,playable,2020-07-02 00:05:00 +01001E500EA16000,"Path of Sin: Greed",crash,menus,2021-11-24 08:00:00 +010031F006E76000,"Pato Box",,playable,2021-01-25 15:17:52 +01001F201121E000,"PAW Patrol Mighty Pups Save Adventure Bay",,playable,2022-10-13 12:17:55 +0100360016800000,"PAW Patrol: Grand Prix",gpu,ingame,2024-05-03 16:16:11 +0100CEC003A4A000,"PAW Patrol: On a Roll!",nvdec,playable,2021-01-28 21:14:49 +01000C4015030000,"Pawapoke R",services-horizon,nothing,2024-05-14 14:28:32 +0100A56006CEE000,"Pawarumi",online-broken,playable,2022-09-10 15:19:33 +0100274004052000,"PAYDAY 2",nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39 +010085700ABC8000,"PBA Pro Bowling",nvdec;online-broken;UE4,playable,2022-09-14 23:00:49 +0100F95013772000,"PBA Pro Bowling 2021",online-broken;UE4,playable,2022-10-19 16:46:40 +010072800CBE8000,"PC Building Simulator",,playable,2020-06-12 00:31:58 +010002100CDCC000,"Peaky Blinders: Mastermind",,playable,2022-10-19 16:56:35 +010028A0048A6000,"Peasant Knight",,playable,2020-12-22 09:30:50 +0100C510049E0000,"Penny-Punching Princess",,playable,2022-08-09 13:37:05 +0100CA901AA9C000,"Penny’s Big Breakaway",amd-vendor-bug,playable,2024-05-27 07:58:51 +0100563005B70000,"Perception",UE4;crash;nvdec,menus,2020-12-18 11:49:23 +010011700D1B2000,"Perchang",,playable,2021-01-25 14:19:52 +010089F00A3B4000,"Perfect Angle",,playable,2021-01-21 18:48:45 +01005CD012DC0000,"Perky Little Things",crash;vulkan,boots,2024-08-04 07:22:46 +01005EB013FBA000,"Persephone",,playable,2021-03-23 22:39:19 +0100A0300FC3E000,"Perseverance",,playable,2020-07-13 18:48:27 +010062B01525C000,"Persona 4 Golden",,playable,2024-08-07 17:48:07 +01005CA01580E000,"Persona 5 Royal",gpu,ingame,2024-08-17 21:45:15 +010087701B092000,"Persona 5 Tactica",,playable,2024-04-01 22:21:03 +,"Persona 5: Scramble",deadlock,boots,2020-10-04 03:22:29 +0100801011C3E000,"Persona® 5 Strikers",nvdec;mac-bug,playable,2023-09-26 09:36:01 +010044400EEAE000,"Petoons Party",nvdec,playable,2021-03-02 21:07:58 +010053401147C000,"PGA TOUR 2K21",deadlock;nvdec,ingame,2022-10-05 21:53:50 +0100DDD00C0EA000,"Phantaruk",,playable,2021-06-11 18:09:54 +0100063005C86000,"Phantom Breaker: Battle Grounds Overdrive",audio;nvdec,playable,2024-02-29 14:20:35 +010096F00E5B0000,"Phantom Doctrine",UE4,playable,2022-09-15 10:51:50 +0100C31005A50000,"Phantom Trigger",,playable,2022-08-09 14:27:30 +0100CB000A142000,"Phoenix Wright: Ace Attorney Trilogy",,playable,2023-09-15 22:03:12 +0100DA400F624000,"PHOGS!",online,playable,2021-01-18 15:18:37 +0100BF1003B9A000,"Physical Contact: 2048",slow,playable,2021-01-25 15:18:32 +01008110036FE000,"Physical Contact: SPEED",,playable,2022-08-09 14:40:46 +010077300A86C000,"PIANISTA",online-broken,playable,2022-08-09 14:52:56 +010012100E8DC000,"PICROSS LORD OF THE NAZARICK",,playable,2023-02-08 15:54:56 +0100C9600A88E000,"PICROSS S2",,playable,2020-10-15 12:01:40 +010079200D330000,"PICROSS S3",,playable,2020-10-15 11:55:27 +0100C250115DC000,"PICROSS S4",,playable,2020-10-15 12:33:46 +0100AC30133EC000,"PICROSS S5",,playable,2022-10-17 18:51:42 +010025901432A000,"PICROSS S6",,playable,2022-10-29 17:52:19 +01009B2016104000,"PICROSS S7",,playable,2022-02-16 12:51:25 +010043B00E1CE000,"PictoQuest",,playable,2021-02-27 15:03:16 +0100D06003056000,"Piczle Lines DX",UE4;crash;nvdec,menus,2020-11-16 04:21:31 +010017600B532000,"Piczle Lines DX 500 More Puzzles!",UE4,playable,2020-12-15 23:42:51 +01000FD00D5CC000,"Pig Eat Ball",services,ingame,2021-11-30 01:57:45 +01001CB0106F8000,"Pikmin 3 Deluxe Demo",32-bit;crash;demo;gpu,ingame,2021-06-16 18:38:07 +0100E0B019974000,"Pikmin 4 Demo",gpu;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08 +0100AA80194B0000,"Pikmin™ 1",audio,ingame,2024-05-28 18:56:11 +0100D680194B2000,"Pikmin™ 1+2",gpu,ingame,2023-07-31 08:53:41 +0100F4C009322000,"Pikmin™ 3 Deluxe",gpu;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26 +0100B7C00933A000,"Pikmin™ 4",gpu;crash;UE4,ingame,2024-08-26 03:39:08 +0100D6200E130000,"Pillars of Eternity: Complete Edition",,playable,2021-02-27 00:24:21 +01007A500B0B2000,"Pilot Sports",,playable,2021-01-20 15:04:17 +0100DA70186D4000,"Pinball FX",,playable,2024-05-03 17:09:11 +0100DB7003828000,"Pinball FX3",online-broken,playable,2022-11-11 23:49:07 +01002BA00D662000,"Pine",slow,ingame,2020-07-29 16:57:39 +010041100B148000,"Pinstripe",,playable,2020-11-26 10:40:40 +01002B20174EE000,"Piofiore: Episodio 1926",,playable,2022-11-23 18:36:05 +01009240117A2000,"Piofiore: Fated Memories",nvdec,playable,2020-11-30 14:27:50 +0100EA2013BCC000,"Pixel Game Maker Series Puzzle Pedestrians",,playable,2022-10-24 20:15:50 +0100859013CE6000,"Pixel Game Maker Series Werewolf Princess Kaguya",crash;services,nothing,2021-03-26 00:23:07 +010060A00F5E8000,"Pixel Gladiator",,playable,2020-07-08 02:41:26 +010000E00E612000,"Pixel Puzzle Makeout League",,playable,2022-10-13 12:34:00 +0100382011002000,"PixelJunk Eden 2",crash,ingame,2020-12-17 11:55:52 +0100E4D00A690000,"PixelJunk™ Monsters 2",,playable,2021-06-07 03:40:01 +01004A900C352000,"Pizza Titan Ultra",nvdec,playable,2021-01-20 15:58:42 +05000FD261232000,"Pizza Tower",crash,ingame,2024-09-16 00:21:56 +0100FF8005EB2000,"Plague Road",,playable,2022-08-09 15:27:14 +010030B00C316000,"Planescape: Torment and Icewind Dale: Enhanced Editions",cpu;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26 +010003C0099EE000,"PLANET ALPHA",UE4;gpu,ingame,2020-12-16 14:42:20 +01007EA019CFC000,"Planet Cube: Edge",,playable,2023-03-22 17:10:12 +0100F0A01F112000,"planetarian: The Reverie of a Little Planet & Snow Globe",,playable,2020-10-17 20:26:20 +010087000428E000,"Plantera Deluxe",,playable,2022-08-09 15:36:28 +0100C56010FD8000,"Plants vs. Zombies: Battle for Neighborville™ Complete Edition",gpu;audio;crash,boots,2024-09-02 12:58:14 +0100E5B011F48000,"PLOID SAGA",,playable,2021-04-19 16:58:45 +01009440095FE000,"Pode",nvdec,playable,2021-01-25 12:58:35 +010086F0064CE000,"Poi: Explorer Edition",nvdec,playable,2021-01-21 19:32:00 +0100EB6012FD2000,"Poison Control",,playable,2021-05-16 14:01:54 +010072400E04A000,"Pokémon Café ReMix",,playable,2021-08-17 20:00:04 +01003D200BAA2000,"Pokémon Mystery Dungeon™: Rescue Team DX",mac-bug,playable,2024-01-21 00:16:32 +01008DB008C2C000,"Pokémon Shield + Pokémon Shield Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22 +0100ABF008968000,"Pokémon Sword + Pokémon Sword Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37 +01009AD008C4C000,"Pokémon: Let's Go, Pikachu! demo",slow;demo,playable,2023-11-26 11:23:20 +0100000011D90000,"Pokémon™ Brilliant Diamond",gpu;ldn-works,ingame,2024-08-28 13:26:35 +010015F008C54000,"Pokémon™ HOME",Needs Update;crash;services,menus,2020-12-06 06:01:51 +01001F5010DFA000,"Pokémon™ Legends: Arceus",gpu;Needs Update;ldn-works,ingame,2024-09-19 10:02:02 +01005D100807A000,"Pokémon™ Quest",,playable,2022-02-22 16:12:32 +0100A3D008C5C000,"Pokémon™ Scarlet",gpu;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29 +01008F6008C5E000,"Pokémon™ Violet",gpu;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48 +0100187003A36000,"Pokémon™: Let’s Go, Eevee!",crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04 +010003F003A34000,"Pokémon™: Let’s Go, Pikachu!",crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41 +0100B3F000BE2000,"Pokkén Tournament™ DX",nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08 +010030D005AE6000,"Pokkén Tournament™ DX Demo",demo;opengl-backend-bug,playable,2022-08-10 12:03:19 +0100A3500B4EC000,"Polandball: Can Into Space",,playable,2020-06-25 15:13:26 +0100EAB00605C000,"Poly Bridge",services,playable,2020-06-08 23:32:41 +010017600B180000,"Polygod",slow;regression,ingame,2022-08-10 14:38:14 +010074B00ED32000,"Polyroll",gpu,boots,2021-07-01 16:16:50 +010096B01179A000,"Ponpu",,playable,2020-12-16 19:09:34 +01005C5011086000,"Pooplers",,playable,2020-11-02 11:52:10 +01007EF013CA0000,"Port Royale 4",crash;nvdec,menus,2022-10-30 14:34:06 +01007BB017812000,"Portal",,playable,2024-06-12 03:48:29 +0100ABD01785C000,"Portal 2",gpu,ingame,2023-02-20 22:44:15 +010050D00FE0C000,"Portal Dogs",,playable,2020-09-04 12:55:46 +0100437004170000,"Portal Knights",ldn-untested;online,playable,2021-05-27 19:29:04 +01005FC010EB2000,"Potata: Fairy Flower",nvdec,playable,2020-06-17 09:51:34 +01000A4014596000,"Potion Party",,playable,2021-05-06 14:26:54 +0100E1E00CF1A000,"Power Rangers: Battle for the Grid",,playable,2020-06-21 16:52:42 +0100D1C01C194000,"Powerful Pro Baseball 2024-2025",gpu,ingame,2024-08-25 06:40:48 +01008E100E416000,"PowerSlave Exhumed",gpu,ingame,2023-07-31 23:19:10 +010054F01266C000,"Prehistoric Dude",gpu,ingame,2020-10-12 12:38:48 +,"Pretty Princess Magical Coordinate",,playable,2020-10-15 11:43:41 +01007F00128CC000,"Pretty Princess Party",,playable,2022-10-19 17:23:58 +010009300D278000,"Preventive Strike",nvdec,playable,2022-10-06 10:55:51 +0100210019428000,"Prince of Persia The Lost Crown",crash,ingame,2024-06-08 21:31:58 +01007A3009184000,"Princess Peach™: Showtime!",UE4,playable,2024-09-21 13:39:45 +010024701DC2E000,"Princess Peach™: Showtime! Demo",UE4;demo,playable,2024-03-10 17:46:45 +01001FA01451C000,"Prinny Presents NIS Classics Volume 1: Phantom Brave: The Hermuda Triangle Remastered / Soul Nomad & the World Eaters",crash;Needs Update,boots,2023-02-02 07:23:09 +01008FA01187A000,"Prinny® 2: Dawn of Operation Panties, Dood!",32-bit,playable,2022-10-13 12:42:58 +01007A0011878000,"Prinny®: Can I Really Be the Hero?",32-bit;nvdec,playable,2023-10-22 09:25:25 +010007F00879E000,"PriPara: All Idol Perfect Stage",,playable,2022-11-22 16:35:52 +010029200AB1C000,"Prison Architect: Nintendo Switch™ Edition",,playable,2021-04-10 12:27:58 +0100C1801B914000,"Prison City",gpu,ingame,2024-03-01 08:19:33 +0100F4800F872000,"Prison Princess",,playable,2022-11-20 15:00:25 +0100A9800A1B6000,"Professional Construction – The Simulation",slow,playable,2022-08-10 15:15:45 +010077B00BDD8000,"Professional Farmer: Nintendo Switch™ Edition",slow,playable,2020-12-16 13:38:19 +010018300C83A000,"Professor Lupo and his Horrible Pets",,playable,2020-06-12 00:08:45 +0100D1F0132F6000,"Professor Lupo: Ocean",,playable,2021-04-14 16:33:33 +0100BBD00976C000,"Project Highrise: Architect's Edition",,playable,2022-08-10 17:19:12 +0100ACE00DAB6000,"Project Nimbus: Complete Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43 +01002980140F6000,"Project TRIANGLE STRATEGY™ Debut Demo",UE4;demo,playable,2022-10-24 21:40:27 +0100BDB01150E000,"Project Warlock",,playable,2020-06-16 10:50:41 +,"Psikyo Collection Vol 1",32-bit,playable,2020-10-11 13:18:47 +0100A2300DB78000,"Psikyo Collection Vol. 3",,ingame,2021-06-07 02:46:23 +01009D400C4A8000,"Psikyo Collection Vol.2",32-bit,playable,2021-06-07 03:22:07 +01007A200F2E2000,"Psikyo Shooting Stars Alpha",32-bit,playable,2021-04-13 12:03:43 +0100D7400F2E4000,"Psikyo Shooting Stars Bravo",32-bit,playable,2021-06-14 12:09:07 +0100EC100A790000,"PSYVARIAR DELTA",nvdec,playable,2021-01-20 13:01:46 +,"Puchitto kurasutā",Need-Update;crash;services,menus,2020-07-04 16:44:28 +0100D61010526000,"Pulstario",,playable,2022-10-06 11:02:01 +01009AE00B788000,"Pumped BMX Pro",nvdec;online-broken,playable,2022-09-20 17:40:50 +01006C10131F6000,"Pumpkin Jack",nvdec;UE4,playable,2022-10-13 12:52:32 +010016400F07E000,"Push the Crate",nvdec;UE4,playable,2022-09-15 13:28:41 +0100B60010432000,"Push the Crate 2",UE4;gpu;nvdec,ingame,2021-06-10 14:20:01 +0100F1200F6D8000,"Pushy and Pully in Blockland",,playable,2020-07-04 11:44:41 +0100AAE00CAB4000,"Puyo Puyo Champions",online,playable,2020-06-19 11:35:08 +010038E011940000,"Puyo Puyo™ Tetris® 2",ldn-untested,playable,2023-09-26 11:35:25 +0100C5700ECE0000,"Puzzle & Dragons GOLD",slow,playable,2020-05-13 15:09:34 +010079E01A1E0000,"Puzzle Bobble Everybubble!",audio;ldn-works,playable,2023-06-10 03:53:40 +010043100F0EA000,"Puzzle Book",,playable,2020-09-28 13:26:01 +0100476004A9E000,"Puzzle Box Maker",nvdec;online-broken,playable,2022-08-10 18:00:52 +0100A4E017372000,"Pyramid Quest",gpu,ingame,2023-08-16 21:14:52 +0100F1100E606000,"Q-YO Blaster",gpu,ingame,2020-06-07 22:36:53 +010023600AA34000,"Q.U.B.E. 2",UE4,playable,2021-03-03 21:38:57 +0100A8D003BAE000,"Qbics Paint",gpu;services,ingame,2021-06-07 10:54:09 +0100BA5012E54000,"QUAKE",gpu;crash,menus,2022-08-08 12:40:34 +010048F0195E8000,"Quake II",,playable,2023-08-15 03:42:14 +,"QuakespasmNX",crash;homebrew,nothing,2022-07-23 19:28:07 +010045101288A000,"Quantum Replica",nvdec;UE4,playable,2022-10-30 21:17:22 +0100F1400BA88000,"Quarantine Circular",,playable,2021-01-20 15:24:15 +0100DCF00F13A000,"Queen's Quest 4: Sacred Truce",nvdec,playable,2022-10-13 12:59:21 +0100492012378000,"Quell",gpu,ingame,2021-06-11 15:59:53 +01001DE005012000,"Quest of Dungeons",,playable,2021-06-07 10:29:22 +,"QuietMansion2",,playable,2020-09-03 14:59:35 +0100AF100EE76000,"Quiplash 2 InterLASHional: The Say Anything Party Game!",online-working,playable,2022-10-19 17:43:45 +0100E5400BE64000,"R-Type Dimensions EX",,playable,2020-10-09 12:04:43 +0100F930136B6000,"R-Type® Final 2",slow;nvdec;UE4,ingame,2022-10-30 21:46:29 +01007B0014300000,"R-Type® Final 2 Demo",slow;nvdec;UE4;demo,ingame,2022-10-24 21:57:42 +0100B5A004302000,"R.B.I. Baseball 17",online-working,playable,2022-08-11 11:55:47 +01005CC007616000,"R.B.I. Baseball 18",nvdec;online-working,playable,2022-08-11 11:27:52 +0100FCB00BF40000,"R.B.I. Baseball 19",nvdec;online-working,playable,2022-08-11 11:43:52 +010061400E7D4000,"R.B.I. Baseball 20",,playable,2021-06-15 21:16:29 +0100B4A0115CA000,"R.B.I. Baseball 21",online-working,playable,2022-10-24 22:31:45 +01005BF00E4DE000,"Rabi-Ribi",,playable,2022-08-06 17:02:44 +010075D00DD04000,"Race with Ryan",UE4;gpu;nvdec;slow,ingame,2020-11-16 04:35:33 +0100B8100C54A000,"Rack N Ruin",,playable,2020-09-04 15:20:26 +010024400C516000,"RAD",gpu;crash;UE4,menus,2021-11-29 02:01:56 +010000600CD54000,"Rad Rodgers Radical Edition",nvdec;online-broken,playable,2022-08-10 19:57:23 +0100DA400E07E000,"Radiation City",crash,ingame,2022-09-30 11:15:04 +01009E40095EE000,"Radiation Island",opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04 +0100C8B00D2BE000,"Radical Rabbit Stew",,playable,2020-08-03 12:02:56 +0100BAD013B6E000,"Radio Commander",nvdec,playable,2021-03-24 11:20:46 +01008FA00ACEC000,"RADIOHAMMER STATION",audout,playable,2021-02-26 20:20:06 +01003D00099EC000,"Raging Justice",,playable,2021-06-03 14:06:50 +01005CD013116000,"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",,playable,2022-07-29 15:50:13 +01002B000D97E000,"Raiden V: Director's Cut",deadlock;nvdec,boots,2024-07-12 07:31:46 +01002EE00DC02000,"Railway Empire - Nintendo Switch™ Edition",nvdec,playable,2022-10-03 13:53:50 +01003C700D0DE000,"Rain City",,playable,2020-10-08 16:59:03 +0100BDD014232000,"Rain on Your Parade",,playable,2021-05-06 19:32:04 +010047600BF72000,"Rain World",,playable,2023-05-10 23:34:08 +01009D9010B9E000,"Rainbows, toilets & unicorns",nvdec,playable,2020-10-03 18:08:18 +010010B00DDA2000,"Raji: An Ancient Epic",UE4;gpu;nvdec,ingame,2020-12-16 10:05:25 +010042A00A9CC000,"Rapala Fishing Pro Series",nvdec,playable,2020-12-16 13:26:53 +0100E73010754000,"Rascal Fight",,playable,2020-10-08 13:23:30 +010003F00C5C0000,"Rawr-Off",crash;nvdec,menus,2020-07-02 00:14:44 +01005FF002E2A000,"Rayman® Legends Definitive Edition",nvdec;ldn-works,playable,2023-05-27 18:33:07 +0100F03011616000,"Re:Turn - One Way Trip",,playable,2022-08-29 22:42:53 +01000B20117B8000,"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",gpu;crash;nvdec;vulkan,boots,2023-03-07 21:27:24 +0100A8A00E462000,"Real Drift Racing",,playable,2020-07-25 14:31:31 +010048600CC16000,"Real Heroes: Firefighter",,playable,2022-09-20 18:18:44 +0100E64010BAA000,"realMyst: Masterpiece Edition",nvdec,playable,2020-11-30 15:25:42 +01000F300F082000,"Reaper: Tale of a Pale Swordsman",,playable,2020-12-12 15:12:23 +0100D9B00E22C000,"Rebel Cops",,playable,2022-09-11 10:02:53 +0100CAA01084A000,"Rebel Galaxy Outlaw",nvdec,playable,2022-12-01 07:44:56 +0100EF0015A9A000,"Record of Lodoss War-Deedlit in Wonder Labyrinth-",deadlock;Needs Update;Incomplete,ingame,2022-01-19 10:00:59 +0100CF600FF7A000,"Red Bow",services,ingame,2021-11-29 03:51:34 +0100351013A06000,"Red Colony",,playable,2021-01-25 20:44:41 +01007820196A6000,"Red Dead Redemption",amd-vendor-bug,playable,2024-09-13 13:26:13 +0100069010592000,"Red Death",,playable,2020-08-30 13:07:37 +010075000C608000,"Red Faction Guerrilla Re-Mars-tered",ldn-untested;nvdec;online,playable,2021-06-07 03:02:13 +01002290070E4000,"Red Game Without a Great Name",,playable,2021-01-19 21:42:35 +010045400D73E000,"Red Siren: Space Defense",UE4,playable,2021-04-25 21:21:29 +0100D8A00E880000,"Red Wings: Aces of the Sky",,playable,2020-06-12 01:19:53 +01000D100DCF8000,"Redeemer: Enhanced Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24 +0100326010B98000,"Redout: Space Assault",UE4,playable,2022-10-19 23:04:35 +010007C00E558000,"Reel Fishing: Road Trip Adventure",,playable,2021-03-02 16:06:43 +010045D01273A000,"Reflection of Mine",audio,playable,2020-12-17 15:06:37 +01003AA00F5C4000,"Refreshing Sideways Puzzle Ghost Hammer",,playable,2020-10-18 12:08:54 +01007A800D520000,"Refunct",UE4,playable,2020-12-15 22:46:21 +0100FDF0083A6000,"Regalia: Of Men and Monarchs - Royal Edition",,playable,2022-08-11 12:24:01 +01005FD00F15A000,"Regions of Ruin",,playable,2020-08-05 11:38:58 +,"Reine des Fleurs",cpu;crash,boots,2020-09-27 18:50:39 +0100F1900B144000,"REKT! High Octane Stunts",online,playable,2020-09-28 12:33:56 +01002AD013C52000,"Relicta",nvdec;UE4,playable,2022-10-31 12:48:33 +010095900B436000,"RemiLore",,playable,2021-06-03 18:58:15 +0100FBD00F5F6000,"Remothered: Broken Porcelain",UE4;gpu;nvdec,ingame,2021-06-17 15:13:11 +01001F100E8AE000,"Remothered: Tormented Fathers",nvdec;UE4,playable,2022-10-19 23:26:50 +01008EE00B22C000,"Rento Fortune",ldn-untested;online,playable,2021-01-19 19:52:21 +01007CC0130C6000,"Renzo Racer",,playable,2021-03-23 22:28:05 +01003C400AD42000,"Rescue Tale",,playable,2022-09-20 18:40:18 +010099A00BC1E000,"resident evil 4",nvdec,playable,2022-11-16 21:16:04 +010018100CD46000,"Resident Evil 5",nvdec,playable,2024-02-18 17:15:29 +01002A000CD48000,"Resident Evil 6",nvdec,playable,2022-09-15 14:31:47 +0100643002136000,"Resident Evil Revelations",nvdec;ldn-untested,playable,2022-08-11 12:44:19 +010095300212A000,"Resident Evil Revelations 2",online-broken;ldn-untested,playable,2022-08-11 12:57:50 +0100E7F00FFB8000,"Resolutiion",crash,boots,2021-04-25 21:57:56 +0100FF201568E000,"Restless Night",crash,nothing,2022-02-09 10:54:49 +0100069000078000,"Retail Interactive Display Menu (DevQuestMenu)",services;crash,nothing,2022-08-11 13:19:41 +010086E00BCB2000,"Retimed",,playable,2022-08-11 13:32:39 +0100F17004156000,"Retro City Rampage DX",,playable,2021-01-05 17:04:17 +01000ED014A2C000,"Retro Machina",online-broken,playable,2022-10-31 13:38:58 +010032E00E6E2000,"Return of the Obra Dinn",,playable,2022-09-15 19:56:45 +010027400F708000,"Revenge of Justice",nvdec,playable,2022-11-20 15:43:23 +0100E2E00EA42000,"Reventure",,playable,2022-09-15 20:07:06 +010071D00F156000,"REZ PLZ",,playable,2020-10-24 13:26:12 +0100729012D18000,"Rhythm Fighter",crash,nothing,2021-02-16 18:51:30 +010081D0100F0000,"Rhythm of the Gods",UE4;crash,nothing,2020-10-03 17:39:59 +01009D5009234000,"RICO",nvdec;online-broken,playable,2022-08-11 20:16:40 +01002C700C326000,"Riddled Corpses EX",,playable,2021-06-06 16:02:44 +0100AC600D898000,"Rift Keeper",,playable,2022-09-20 19:48:20 +0100A62002042000,"RiME",UE4;crash;gpu,boots,2020-07-20 15:52:38 +01006AC00EE6E000,"Rimelands: Hammer of Thor",,playable,2022-10-13 13:32:56 +01002FF008C24000,"RingFit Adventure",crash;services,nothing,2021-04-14 19:00:01 +010088E00B816000,"RIOT - Civil Unrest",,playable,2022-08-11 20:27:56 +01002A6006AA4000,"Riptide GP: Renegade",online,playable,2021-04-13 23:33:02 +010065B00B0EC000,"Rise and Shine",,playable,2020-12-12 15:56:43 +0100E9C010EA8000,"Rise of Insanity",,playable,2020-08-30 15:42:14 +01006BA00E652000,"Rise: Race The Future",,playable,2021-02-27 13:29:06 +010020C012F48000,"Rising Hell",,playable,2022-10-31 13:54:02 +010076D00E4BA000,"Risk of Rain 2",online-broken,playable,2024-03-04 17:01:05 +0100E8300A67A000,"RISK® Global Domination",nvdec;online-broken,playable,2022-08-01 18:53:28 +010042500FABA000,"Ritual: Crown of Horns",,playable,2021-01-26 16:01:47 +0100BD300F0EC000,"Ritual: Sorcerer Angel",,playable,2021-03-02 13:51:19 +0100A7D008392000,"Rival Megagun",nvdec;online,playable,2021-01-19 14:01:46 +010069C00401A000,"RIVE: Ultimate Edition",,playable,2021-03-24 18:45:55 +01004E700DFE6000,"River City Girls",nvdec,playable,2020-06-10 23:44:09 +01002E80168F4000,"River City Girls 2",,playable,2022-12-07 00:46:27 +0100B2100767C000,"River City Melee Mach!!",online-broken,playable,2022-09-20 20:51:57 +01008AC0115C6000,"RMX Real Motocross",,playable,2020-10-08 21:06:15 +010053000B986000,"Road Redemption",online-broken,playable,2022-08-12 11:26:20 +010002F009A7A000,"Road to Ballhalla",UE4,playable,2021-06-07 02:22:36 +0100735010F58000,"Road To Guangdong",slow,playable,2020-10-12 12:15:32 +010068200C5BE000,"Roarr! Jurassic Edition",,playable,2022-10-19 23:57:45 +0100618004096000,"Robonauts",nvdec,playable,2022-08-12 11:33:23 +010039A0117C0000,"ROBOTICS;NOTES DaSH",,playable,2020-11-16 23:09:54 +01002A900EE8A000,"ROBOTICS;NOTES ELITE",,playable,2020-11-26 10:28:20 +010044A010BB8000,"Robozarro",,playable,2020-09-03 13:33:40 +01000CC012D74000,"Rock 'N Racing Bundle Grand Prix & Rally",,playable,2021-01-06 20:23:57 +0100A1B00DB36000,"Rock of Ages 3: Make & Break",UE4,playable,2022-10-06 12:18:29 +0100513005AF4000,"Rock'N Racing Off Road DX",,playable,2021-01-10 15:27:15 +01005EE0036EC000,"Rocket League®",gpu;online-broken;ldn-untested,ingame,2024-02-08 19:51:36 +0100E88009A34000,"Rocket Wars",,playable,2020-07-24 14:27:39 +0100EC7009348000,"Rogue Aces",gpu;services;nvdec,ingame,2021-11-30 02:18:30 +01009FA010848000,"Rogue Heroes: Ruins of Tasos",online,playable,2021-04-01 15:41:25 +010056500AD50000,"Rogue Legacy",,playable,2020-08-10 19:17:28 +0100F3B010F56000,"Rogue Robots",,playable,2020-06-16 12:16:11 +01001CC00416C000,"Rogue Trooper Redux",nvdec;online-broken,playable,2022-08-12 11:53:01 +0100C7300C0EC000,"RogueCube",,playable,2021-06-16 12:16:42 +0100B7200FC96000,"Roll'd",,playable,2020-07-04 20:24:01 +01004900113F8000,"RollerCoaster Tycoon 3 Complete Edition",32-bit,playable,2022-10-17 14:18:01 +0100E3900B598000,"RollerCoaster Tycoon Adventures",nvdec,playable,2021-01-05 18:14:18 +010076200CA16000,"Rolling Gunner",,playable,2021-05-26 12:54:18 +0100579011B40000,"Rolling Sky 2",,playable,2022-11-03 10:21:12 +010050400BD38000,"Roman Rumble in Las Vegum - Asterix & Obelix XXL 2",deadlock;nvdec,ingame,2022-07-21 17:54:14 +01001F600829A000,"Romancing SaGa 2",,playable,2022-08-12 12:02:24 +0100D0400D27A000,"Romancing SaGa 3",audio;gpu,ingame,2020-06-27 20:26:18 +010088100DD42000,"Roof Rage",crash;regression,boots,2023-11-12 03:47:18 +0100F3000FA58000,"Roombo: First Blood",nvdec,playable,2020-08-05 12:11:37 +0100936011556000,"Root Double -Before Crime * After Days- Xtend Edition",crash,nothing,2022-02-05 02:03:49 +010030A00DA3A000,"Root Letter: Last Answer",vulkan-backend-bug,playable,2022-09-17 10:25:57 +0100AFE00DDAC000,"Royal Roads",,playable,2020-11-17 12:54:38 +0100E2C00B414000,"RPG Maker MV",nvdec,playable,2021-01-05 20:12:01 +01005CD015986000,"rRootage Reloaded",,playable,2022-08-05 23:20:18 +0000000000000000,"RSDKv5u",homebrew,ingame,2024-04-01 16:25:34 +010009B00D33C000,"Rugby Challenge 4",slow;online-broken;UE4,playable,2022-10-06 12:45:53 +01006EC00F2CC000,"RUINER",UE4,playable,2022-10-03 14:11:33 +010074F00DE4A000,"Run the Fan",,playable,2021-02-27 13:36:28 +0100ADF00700E000,"Runbow",online,playable,2021-01-08 22:47:44 +0100D37009B8A000,"Runbow Deluxe Edition",online-broken,playable,2022-08-12 12:20:25 +010081C0191D8000,"Rune Factory 3 Special",,playable,2023-10-15 08:32:49 +010051D00E3A4000,"Rune Factory 4 Special",32-bit;crash;nvdec,ingame,2023-05-06 08:49:17 +010014D01216E000,"Rune Factory 5 (JP)",gpu,ingame,2021-06-01 12:00:36 +0100E21013908000,"RWBY: Grimm Eclipse - Definitive Edition",online-broken,playable,2022-11-03 10:44:01 +010012C0060F0000,"RXN -Raijin-",nvdec,playable,2021-01-10 16:05:43 +0100B8B012ECA000,"S.N.I.P.E.R. - Hunter Scope",,playable,2021-04-19 15:58:09 +010007700CFA2000,"Saboteur II: Avenging Angel",Needs Update;cpu;crash,nothing,2021-01-26 14:47:37 +0100D94012FE8000,"Saboteur SiO",slow,ingame,2020-12-17 16:59:49 +0100A5200C2E0000,"Safety First!",,playable,2021-01-06 09:05:23 +0100A51013530000,"SaGa Frontier Remastered",nvdec,playable,2022-11-03 13:54:56 +010003A00D0B4000,"SaGa SCARLET GRACE: AMBITIONS™",,playable,2022-10-06 13:20:31 +01008D100D43E000,"Saints Row IV®: Re-Elected™",ldn-untested;LAN,playable,2023-12-04 18:33:37 +0100DE600BEEE000,"SAINTS ROW®: THE THIRD™ - THE FULL PACKAGE",slow;LAN,playable,2023-08-24 02:40:58 +01007F000EB36000,"Sakai and...",nvdec,playable,2022-12-15 13:53:19 +0100B1400E8FE000,"Sakuna: Of Rice and Ruin",,playable,2023-07-24 13:47:13 +0100BBF0122B4000,"Sally Face",,playable,2022-06-06 18:41:24 +0100D250083B4000,"Salt and Sanctuary",,playable,2020-10-22 11:52:19 +0100CD301354E000,"Sam & Max Save the World",,playable,2020-12-12 13:11:51 +010014000C63C000,"Samsara: Deluxe Edition",,playable,2021-01-11 15:14:12 +0100ADF0096F2000,"Samurai Aces for Nintendo Switch",32-bit,playable,2020-11-24 20:26:55 +01006C600E46E000,"Samurai Jack: Battle Through Time",nvdec;UE4,playable,2022-10-06 13:33:59 +01002DF00F76C000,"SAMURAI SHODOWN",UE4;crash;nvdec,menus,2020-09-06 02:17:00 +0100F6800F48E000,"SAMURAI SHODOWN NEOGEO COLLECTION",nvdec,playable,2021-06-14 17:12:56 +0100B6501A360000,"Samurai Warrior",,playable,2023-02-27 18:42:38 +,"Sangoku Rensenki ~Otome no Heihou!~",gpu;nvdec,ingame,2020-10-17 19:13:14 +0100A4700BC98000,"Satsujin Tantei Jack the Ripper",,playable,2021-06-21 16:32:54 +0100F0000869C000,"Saturday Morning RPG",nvdec,playable,2022-08-12 12:41:50 +01006EE00380C000,"Sausage Sports Club",gpu,ingame,2021-01-10 05:37:17 +0100C8300FA90000,"Save Koch",,playable,2022-09-26 17:06:56 +0100D6E008700000,"Save the Ninja Clan",,playable,2021-01-11 13:56:37 +010091000F72C000,"Save Your Nuts",nvdec;online-broken;UE4,playable,2022-09-27 23:12:02 +0100AA00128BA000,"Saviors of Sapphire Wings / Stranger of Sword City Revisited",crash,menus,2022-10-24 23:00:46 +01001C3012912000,"Say No! More",,playable,2021-05-06 13:43:34 +010010A00A95E000,"Sayonara Wild Hearts",,playable,2023-10-23 03:20:01 +0100ACB004006000,"Schlag den Star",slow;nvdec,playable,2022-08-12 14:28:22 +0100394011C30000,"Scott Pilgrim vs. The World™: The Game – Complete Edition",services-horizon;crash,nothing,2024-07-12 08:13:03 +0100E7100B198000,"Scribblenauts Mega Pack",nvdec,playable,2020-12-17 22:56:14 +01001E40041BE000,"Scribblenauts Showdown",gpu;nvdec,ingame,2020-12-17 23:05:53 +0100829018568000,"SD GUNDAM BATTLE ALLIANCE Demo",audio;crash;demo,ingame,2022-08-01 23:01:20 +010055700CEA8000,"SD GUNDAM G GENERATION CROSS RAYS",nvdec,playable,2022-09-15 20:58:44 +010022900D3EC00,"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION",nvdec,playable,2022-09-15 20:45:57 +0100E4A00D066000,"Sea King",UE4;nvdec,playable,2021-06-04 15:49:22 +0100AFE012BA2000,"Sea of Solitude: The Director's Cut",gpu,ingame,2024-07-12 18:29:29 +01008C0016544000,"Sea of Stars",,playable,2024-03-15 20:27:12 +010036F0182C4000,"Sea of Stars Demo",demo,playable,2023-02-12 15:33:56 +0100C2400D68C000,"SeaBed",,playable,2020-05-17 13:25:37 +010077100CA6E000,"Season Match Bundle",,playable,2020-10-27 16:15:22 +010028F010644000,"Secret Files 3",nvdec,playable,2020-10-24 15:32:39 +010075D0101FA000,"Seek Hearts",,playable,2022-11-22 15:06:26 +0100394010844000,"Seers Isle",,playable,2020-11-17 12:28:50 +0100A8900AF04000,"SEGA AGES Alex Kidd in Miracle World",online,playable,2021-05-05 16:35:47 +01001E600AF08000,"SEGA AGES Gain Ground",online,playable,2021-05-05 16:16:27 +0100D4D00AC62000,"SEGA AGES Out Run",,playable,2021-01-11 13:13:59 +01005A300C9F6000,"SEGA AGES Phantasy Star",,playable,2021-01-11 12:49:48 +01005F600CB0E000,"SEGA AGES Puyo Puyo",online,playable,2021-05-05 16:09:28 +010051F00AC5E000,"SEGA AGES Sonic The Hedgehog",slow,playable,2023-03-05 20:16:31 +01000D200C614000,"SEGA AGES Sonic The Hedgehog 2",,playable,2022-09-21 20:26:35 +0100C3E00B700000,"SEGA AGES Space Harrier",,playable,2021-01-11 12:57:40 +010054400D2E6000,"SEGA AGES Virtua Racing",online-broken,playable,2023-01-29 17:08:39 +01001E700AC60000,"SEGA AGES Wonder Boy: Monster Land",online,playable,2021-05-05 16:28:25 +0100B3C014BDA000,"SEGA Genesis™ – Nintendo Switch Online",crash;regression,nothing,2022-04-11 07:27:21 +,"SEGA Mega Drive Classics",online,playable,2021-01-05 11:08:00 +01009840046BC000,"Semispheres",,playable,2021-01-06 23:08:31 +0100D1800D902000,"SENRAN KAGURA Peach Ball",,playable,2021-06-03 15:12:10 +0100E0C00ADAC000,"SENRAN KAGURA Reflexions",,playable,2020-03-23 19:15:23 +01009E500D29C000,"Sentinels of Freedom",,playable,2021-06-14 16:42:19 +0100A5D012DAC000,"SENTRY",,playable,2020-12-13 12:00:24 +010059700D4A0000,"Sephirothic Stories",services,menus,2021-11-25 08:52:17 +010007D00D43A000,"Serious Sam Collection",vulkan-backend-bug,boots,2022-10-13 13:53:34 +0100B2C00E4DA000,"Served!",nvdec,playable,2022-09-28 12:46:00 +010018400C24E000,"Seven Knights -Time Wanderer-",vulkan-backend-bug,playable,2022-10-13 22:08:54 +0100D6F016676000,"Seven Pirates H",,playable,2024-06-03 14:54:12 +0100157004512000,"Severed",,playable,2020-12-15 21:48:48 +0100D5500DA94000,"Shadow Blade: Reload",nvdec,playable,2021-06-11 18:40:43 +0100BE501382A000,"Shadow Gangs",cpu;gpu;crash;regression,ingame,2024-04-29 00:07:26 +0100C3A013840000,"Shadow Man Remastered",gpu,ingame,2024-05-20 06:01:39 +010073400B696000,"Shadowgate",,playable,2021-04-24 07:32:57 +0100371013B3E000,"Shadowrun Returns",gpu;Needs Update,ingame,2022-10-04 21:32:31 +01008310154C4000,"Shadowrun: Dragonfall - Director's Cut",gpu;Needs Update,ingame,2022-10-04 20:52:18 +0100C610154CA000,"Shadowrun: Hong Kong - Extended Edition",gpu;Needs Update,ingame,2022-10-04 20:53:09 +010000000EEF0000,"Shadows 2: Perfidia",,playable,2020-08-07 12:43:46 +0100AD700CBBE000,"Shadows of Adam",,playable,2021-01-11 13:35:58 +01002A800C064000,"Shadowverse Champions Battle",,playable,2022-10-02 22:59:29 +01003B90136DA000,"Shadowverse: Champion's Battle",crash,nothing,2023-03-06 00:31:50 +0100820013612000,"Shady Part of Me",,playable,2022-10-20 11:31:55 +0100B10002904000,"Shakedown: Hawaii",,playable,2021-01-07 09:44:36 +01008DA012EC0000,"Shakes on a Plane",crash,menus,2021-11-25 08:52:25 +0100B4900E008000,"Shalnor Legends: Sacred Lands",,playable,2021-06-11 14:57:11 +010006C00CC10000,"Shanky: The Vegan`s Nightmare",,playable,2021-01-26 15:03:55 +0100430013120000,"Shantae",,playable,2021-05-21 04:53:26 +0100EFD00A4FA000,"Shantae and the Pirate's Curse",,playable,2024-04-29 17:21:57 +0100EB901040A000,"Shantae and the Seven Sirens",nvdec,playable,2020-06-19 12:23:40 +01006A200936C000,"Shantae: Half- Genie Hero Ultimate Edition",,playable,2020-06-04 20:14:20 +0100ADA012370000,"Shantae: Risky's Revenge - Director's Cut",,playable,2022-10-06 20:47:39 +01003AB01062C000,"Shaolin vs Wutang",deadlock,nothing,2021-03-29 20:38:54 +0100B250009B9600,"Shape Of The World0",UE4,playable,2021-03-05 16:42:28 +01004F50085F2000,"She Remembered Caterpillars",,playable,2022-08-12 17:45:14 +01000320110C2000,"She Sees Red - Interactive Movie",nvdec,playable,2022-09-30 11:30:15 +01009EB004CB0000,"Shelter Generations",,playable,2021-06-04 16:52:39 +010020F014DBE000,"Sherlock Holmes: The Devil’s Daughter",gpu,ingame,2022-07-11 00:07:26 +0100B1000AC3A000,"Shift Happens",,playable,2021-01-05 21:24:18 +01000E8009E1C000,"Shift Quantum",UE4;crash,ingame,2020-11-06 21:54:08 +01000750084B2000,"Shiftlings - Enhanced Edition",nvdec,playable,2021-03-04 13:49:54 +01003B0012DC2000,"Shin Megami Tensei III Nocturne HD Remaster",,playable,2022-11-03 22:53:27 +010045800ED1E000,"Shin Megami Tensei III NOCTURNE HD REMASTER",gpu;Needs Update,ingame,2022-11-03 19:57:01 +010063B012DC6000,"Shin Megami Tensei V",UE4,playable,2024-02-21 06:30:07 +010069C01AB82000,"Shin Megami Tensei V: Vengeance",gpu;vulkan-backend-bug,ingame,2024-07-14 11:28:24 +01009050133B4000,"Shing! (サムライフォース:斬!)",nvdec,playable,2022-10-22 00:48:54 +01009A5009A9E000,"Shining Resonance Refrain",nvdec,playable,2022-08-12 18:03:01 +01004EE0104F6000,"Shinsekai Into the Depths™",,playable,2022-09-28 14:07:51 +0100C2F00A568000,"Shio",,playable,2021-02-22 16:25:09 +0100B2E00F13E000,"Shipped",,playable,2020-11-21 14:22:32 +01000E800FCB4000,"Ships",,playable,2021-06-11 16:14:37 +01007430122D0000,"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",nvdec,playable,2022-10-20 11:44:36 +,"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",cpu;crash,boots,2020-09-27 19:01:25 +01000244016BAE00,"Shiro0",gpu,ingame,2024-01-13 08:54:39 +0100CCE00DDB6000,"Shoot 1UP DX",,playable,2020-12-13 12:32:47 +01001180021FA000,"Shovel Knight: Specter of Torment",,playable,2020-05-30 08:34:17 +010057D0021E8000,"Shovel Knight: Treasure Trove",,playable,2021-02-14 18:24:39 +01003DD00BF0E000,"Shred! 2 - ft Sam Pilgrim",,playable,2020-05-30 14:34:09 +01001DE0076A4000,"Shu",nvdec,playable,2020-05-30 09:08:59 +0100A7900B936000,"Shut Eye",,playable,2020-07-23 18:08:35 +010044500C182000,"Sid Meier’s Civilization VI",ldn-untested,playable,2024-04-08 16:03:40 +01007FC00B674000,"Sigi - A Fart for Melusina",,playable,2021-02-22 16:46:58 +0100F1400B0D6000,"Silence",nvdec,playable,2021-06-03 14:46:17 +0100A32010618000,"Silent World",,playable,2020-08-28 13:45:13 +010045500DFE2000,"Silk",nvdec,playable,2021-06-10 15:34:37 +010016D00A964000,"SilverStarChess",,playable,2021-05-06 15:25:57 +0100E8C019B36000,"Simona's Requiem",gpu,ingame,2023-02-21 18:29:19 +01006FE010438000,"Sin Slayers",,playable,2022-10-20 11:53:52 +01002820036A8000,"Sine Mora EX",gpu;online-broken,ingame,2022-08-12 19:36:18 +0100F10012002000,"Singled Out",online,playable,2020-08-03 13:06:18 +0100B8800F858000,"Sinless",nvdec,playable,2020-08-09 20:18:55 +0100B16009C10000,"SINNER: Sacrifice for Redemption",nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33 +0100E9201410E000,"Sir Lovelot",,playable,2021-04-05 16:21:46 +0100134011E32000,"Skate City",,playable,2022-11-04 11:37:39 +0100B2F008BD8000,"Skee-Ball",,playable,2020-11-16 04:44:07 +01001A900F862000,"Skelattack",,playable,2021-06-09 15:26:26 +01008E700F952000,"Skelittle: A Giant Party!",,playable,2021-06-09 19:08:34 +01006C000DC8A000,"Skelly Selest",,playable,2020-05-30 15:38:18 +0100D67006F14000,"Skies of Fury DX",,playable,2020-05-30 16:40:54 +010046B00DE62000,"Skullgirls 2nd Encore",,playable,2022-09-15 21:21:25 +0100D1100BF9C000,"Skulls of the Shogun: Bone-A-Fide Edition",,playable,2020-08-31 18:58:12 +0100D7B011654000,"Skully",nvdec;UE4,playable,2022-10-06 13:52:59 +010083100B5CA000,"Sky Force Anniversary",online-broken,playable,2022-08-12 20:50:07 +01006FE005B6E000,"Sky Force Reloaded",,playable,2021-01-04 20:06:57 +010003F00CC98000,"Sky Gamblers - Afterburner",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55 +010093D00AC38000,"Sky Gamblers: Storm Raiders",gpu;audio;32-bit,ingame,2022-08-12 21:13:36 +010068200E96E000,"Sky Gamblers: Storm Raiders 2",gpu,ingame,2022-09-13 12:24:04 +01004F0010A02000,"Sky Racket",,playable,2020-09-07 12:22:24 +0100DDB004F30000,"Sky Ride",,playable,2021-02-22 16:53:07 +0100C5700434C000,"Sky Rogue",,playable,2020-05-30 08:26:28 +0100C52011460000,"Sky: Children of the Light",cpu;online-broken,nothing,2023-02-23 10:57:10 +010041C01014E000,"Skybolt Zack",,playable,2021-04-12 18:28:00 +0100A0A00D1AA000,"SKYHILL",,playable,2021-03-05 15:19:11 +,"Skylanders Imaginators",crash;services,boots,2020-05-30 18:49:18 +010021A00ABEE000,"SKYPEACE",,playable,2020-05-29 14:14:30 +0100EA400BF44000,"SkyScrappers",,playable,2020-05-28 22:11:25 +0100F3C00C400000,"SkyTime",slow,ingame,2020-05-30 09:24:51 +01003AD00DEAE000,"SlabWell: The Quest For Kaktun's Alpaca",,playable,2021-02-22 17:02:51 +0100224004004000,"Slain: Back from Hell",,playable,2022-08-12 23:36:19 +010026300BA4A000,"Slay the Spire",,playable,2023-01-20 15:09:26 +0100501006494000,"Slayaway Camp: Butcher's Cut",opengl-backend-bug,playable,2022-08-12 23:44:05 +01004E900EDDA000,"Slayin 2",gpu,ingame,2024-04-19 16:15:26 +01004AC0081DC000,"Sleep Tight",gpu;UE4,ingame,2022-08-13 00:17:32 +0100F4500AA4E000,"Slice, Dice & Rice",online,playable,2021-02-22 17:44:23 +010010D011E1C000,"Slide Stars",crash,menus,2021-11-25 08:53:43 +0100112003B8A000,"Slime-san",,playable,2020-05-30 16:15:12 +01002AA00C974000,"SMASHING THE BATTLE",,playable,2021-06-11 15:53:57 +0100C9100B06A000,"SmileBASIC 4",gpu,menus,2021-07-29 17:35:59 +0100207007EB2000,"Smoke And Sacrifice",,playable,2022-08-14 12:38:27 +01009790186FE000,"SMURFS KART",,playable,2023-10-18 00:55:00 +0100F2800D46E000,"Snack World The Dungeon Crawl Gold",gpu;slow;nvdec;audout,ingame,2022-05-01 21:12:44 +0100C0F0020E8000,"Snake Pass",nvdec;UE4,playable,2022-01-03 04:31:52 +010075A00BA14000,"Sniper Elite 3 Ultimate Edition",ldn-untested,playable,2024-04-18 07:47:49 +010007B010FCC000,"Sniper Elite 4",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15 +0100BB000A3AA000,"Sniper Elite V2 Remastered",slow;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13 +01008E20047DC000,"Snipperclips Plus: Cut It Out, Together!",,playable,2023-02-14 20:20:13 +0100704000B3A000,"Snipperclips™ – Cut it out, together!",,playable,2022-12-05 12:44:55 +01004AB00AEF8000,"SNK 40th ANNIVERSARY COLLECTION",,playable,2022-08-14 13:33:15 +010027F00AD6C000,"SNK HEROINES Tag Team Frenzy",nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25 +01008DA00CBBA000,"Snooker 19",nvdec;online-broken;UE4,playable,2022-09-11 17:43:22 +010045300516E000,"Snow Moto Racing Freedom",gpu;vulkan-backend-bug,ingame,2022-08-15 16:05:14 +0100BE200C34A000,"Snowboarding The Next Phase",nvdec,playable,2021-02-23 12:56:58 +0100FBD013AB6000,"SnowRunner",services;crash,boots,2023-10-07 00:01:16 +010017B012AFC000,"Soccer Club Life: Playing Manager",gpu,ingame,2022-10-25 11:59:22 +0100B5000E05C000,"Soccer Pinball",UE4;gpu,ingame,2021-06-15 20:56:51 +010011A00A9A8000,"Soccer Slammers",,playable,2020-05-30 07:48:14 +010095C00F9DE000,"Soccer, Tactics & Glory",gpu,ingame,2022-09-26 17:15:58 +0100590009C38000,"SOL DIVIDE -SWORD OF DARKNESS- for Nintendo Switch",32-bit,playable,2021-06-09 14:13:03 +0100A290048B0000,"Soldam: Drop, Connect, Erase",,playable,2020-05-30 09:18:54 +010008600D1AC000,"Solo: Islands of the Heart",gpu;nvdec,ingame,2022-09-11 17:54:43 +01009EE00E91E000,"Some Distant Memory",,playable,2022-09-15 21:48:19 +01004F401BEBE000,"Song of Nunu: A League of Legends Story",,ingame,2024-07-12 18:53:44 +0100E5400BF94000,"Songbird Symphony",,playable,2021-02-27 02:44:04 +010031D00A604000,"Songbringer",,playable,2020-06-22 10:42:02 +0000000000000000,"Sonic 1 (2013)",crash;homebrew,ingame,2024-04-06 18:31:20 +0000000000000000,"Sonic 2 (2013)",crash;homebrew,ingame,2024-04-01 16:25:30 +0000000000000000,"Sonic A.I.R",homebrew,ingame,2024-04-01 16:25:32 +0000000000000000,"Sonic CD",crash;homebrew,ingame,2024-04-01 16:25:31 +010040E0116B8000,"Sonic Colors: Ultimate",,playable,2022-11-12 21:24:26 +01001270012B6000,"SONIC FORCES™",,playable,2024-07-28 13:11:21 +01004AD014BF0000,"Sonic Frontiers",gpu;deadlock;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53 +01009AA000FAA000,"Sonic Mania",,playable,2020-06-08 17:30:57 +01009FB016286000,"Sonic Origins",crash,ingame,2024-06-02 07:20:15 +01008F701C074000,"SONIC SUPERSTARS",gpu;nvdec,ingame,2023-10-28 17:48:07 +010088801C150000,"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",,playable,2024-08-20 13:26:56 +01005EA01C0FC000,"SONIC X SHADOW GENERATIONS",crash,ingame,2025-01-07 04:20:45 +010064F00C212000,"Soul Axiom Rebooted",nvdec;slow,ingame,2020-09-04 12:41:01 +0100F2100F0B2000,"Soul Searching",,playable,2020-07-09 18:39:07 +01008F2005154000,"South Park™: The Fractured but Whole™ - Standard Edition",slow;online-broken,playable,2024-07-08 17:47:28 +0100B9F00C162000,"Space Blaze",,playable,2020-08-30 16:18:05 +010005500E81E000,"Space Cows",UE4;crash,menus,2020-06-15 11:33:20 +0100707011722000,"Space Elite Force",,playable,2020-11-27 15:21:05 +010047B010260000,"Space Pioneer",,playable,2022-10-20 12:24:37 +010010A009830000,"Space Ribbon",,playable,2022-08-15 17:17:10 +0000000000000000,"SpaceCadetPinball",homebrew,ingame,2024-04-18 19:30:04 +0100D9B0041CE000,"Spacecats with Lasers",,playable,2022-08-15 17:22:44 +010034800FB60000,"Spaceland",,playable,2020-11-01 14:31:56 +010028D0045CE000,"Sparkle 2",,playable,2020-10-19 11:51:39 +01000DC007E90000,"Sparkle Unleashed",,playable,2021-06-03 14:52:15 +0100E4F00AE14000,"Sparkle ZERO",gpu;slow,ingame,2020-03-23 18:19:18 +01007ED00C032000,"Sparklite",,playable,2022-08-06 11:35:41 +0100E6A009A26000,"Spartan",UE4;nvdec,playable,2021-03-05 15:53:19 +010020500E7A6000,"Speaking Simulator",,playable,2020-10-08 13:00:39 +01008B000A5AE000,"Spectrum",,playable,2022-08-16 11:15:59 +0100F18010BA0000,"Speed 3: Grand Prix",UE4,playable,2022-10-20 12:32:31 +010040F00AA9A000,"Speed Brawl",slow,playable,2020-09-18 22:08:16 +01000540139F6000,"Speed Limit",gpu,ingame,2022-09-02 18:37:40 +010061F013A0E000,"Speed Truck Racing",,playable,2022-10-20 12:57:04 +0100E74007EAC000,"Spellspire",,playable,2022-08-16 11:21:21 +010021F004270000,"Spelunker Party!",services,boots,2022-08-16 11:25:49 +0100710013ABA000,"Spelunky",,playable,2021-11-20 17:45:03 +0100BD500BA94000,"Sphinx and the Cursed Mummy",gpu;32-bit;opengl,ingame,2024-05-20 06:00:51 +010092A0102AE000,"Spider Solitaire",,playable,2020-12-16 16:19:30 +010076D0122A8000,"Spinch",,playable,2024-07-12 19:02:10 +01001E40136FE000,"Spinny's Journey",crash,ingame,2021-11-30 03:39:44 +010023E008702000,"Spiral Splatter",,playable,2020-06-04 14:03:57 +0100D1B00B6FA000,"Spirit Hunter: Death Mark",,playable,2020-12-13 10:56:25 +0100FAE00E19A000,"Spirit Hunter: NG",32-bit,playable,2020-12-17 20:38:47 +01005E101122E000,"Spirit of the North",UE4,playable,2022-09-30 11:40:47 +01000AC00F5EC000,"Spirit Roots",nvdec,playable,2020-07-10 13:33:32 +0100BD400DC52000,"Spiritfarer",gpu,ingame,2022-10-06 16:31:38 +01009D60080B4000,"SpiritSphere DX",,playable,2021-07-03 23:37:49 +010042700E3FC000,"Spitlings",online-broken,playable,2022-10-06 16:42:39 +01003BC0000A0000,"Splatoon™ 2",ldn-works;LAN,playable,2024-07-12 19:11:15 +0100C2500FC20000,"Splatoon™ 3",ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11 +0100BA0018500000,"Splatoon™ 3: Splatfest World Premiere",gpu;online-broken;demo,ingame,2022-09-19 03:17:12 +010062800D39C000,"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34 +01009FB0172F4000,"SpongeBob SquarePants: The Cosmic Shake",gpu;UE4,ingame,2023-08-01 19:29:53 +010097C01336A000,"Spooky Chase",,playable,2022-11-04 12:17:44 +0100C6100D75E000,"Spooky Ghosts Dot Com",,playable,2021-06-15 15:16:11 +0100DE9005170000,"Sports Party",nvdec,playable,2021-03-05 13:40:42 +0100E04009BD4000,"Spot The Difference",,playable,2022-08-16 11:49:52 +010052100D1B4000,"Spot The Differences: Party!",,playable,2022-08-16 11:55:26 +01000E6015350000,"Spy Alarm",services,ingame,2022-12-09 10:12:51 +01005D701264A000,"SpyHack",,playable,2021-04-15 10:53:51 +010077B00E046000,"Spyro™ Reignited Trilogy",nvdec;UE4,playable,2022-09-11 18:38:33 +0100085012A0E000,"Squeakers",,playable,2020-12-13 12:13:05 +010009300D31C000,"Squidgies Takeover",,playable,2020-07-20 22:28:08 +0100FCD0102EC000,"Squidlit",,playable,2020-08-06 12:38:32 +0100EBF00E702000,"STAR OCEAN First Departure R",nvdec,playable,2021-07-05 19:29:16 +010065301A2E0000,"STAR OCEAN THE SECOND STORY R",crash,ingame,2024-06-01 02:39:59 +010060D00F658000,"Star Renegades",nvdec,playable,2020-12-11 12:19:23 +0100D7000AE6A000,"Star Story: The Horizon Escape",,playable,2020-08-11 22:31:38 +01009DF015776000,"Star Trek Prodigy: Supernova",nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50 +0100BD100FFBE000,"STAR WARS™ Episode I Racer",slow;nvdec,playable,2022-10-03 16:08:36 +0100BB500EACA000,"STAR WARS™ Jedi Knight II: Jedi Outcast™",gpu,ingame,2022-09-15 22:51:00 +01008CA00FAE8000,"STAR WARS™ Jedi Knight: Jedi Academy",gpu,boots,2021-06-16 12:35:30 +01006DA00DEAC000,"Star Wars™ Pinball",online-broken,playable,2022-09-11 18:53:31 +0100FA10115F8000,"STAR WARS™ Republic Commando™",gpu;32-bit,ingame,2023-10-31 15:57:17 +010040701B948000,"STAR WARS™: Battlefront Classic Collection",gpu;vulkan,ingame,2024-07-12 19:24:21 +0100854015868000,"STAR WARS™: Knights of the Old Republic™",gpu;deadlock,boots,2024-02-12 10:13:51 +0100153014544000,"STAR WARS™: The Force Unleashed™",,playable,2024-05-01 17:41:28 +01005EB00EA10000,"Star-Crossed Myth - The Department of Wishes -",gpu,ingame,2021-06-04 19:34:36 +0100E6B0115FC000,"Star99",online,menus,2021-11-26 14:18:51 +01002100137BA000,"Stardash",,playable,2021-01-21 16:31:19 +0100E65002BB8000,"Stardew Valley",online-broken;ldn-untested,playable,2024-02-14 03:11:19 +01002CC003FE6000,"Starlink: Battle for Atlas™ Digital Edition",services-horizon;crash;Needs Update,nothing,2024-05-05 17:25:11 +010098E010FDA000,"Starlit Adventures Golden Stars",,playable,2020-11-21 12:14:43 +01001BB00AC26000,"STARSHIP AVENGER Operation: Take Back Earth",,playable,2021-01-12 15:52:55 +010000700A572000,"State of Anarchy: Master of Mayhem",nvdec,playable,2021-01-12 19:00:05 +0100844004CB6000,"State of Mind",UE4;crash,boots,2020-06-22 22:17:50 +0100616009082000,"STAY",crash;services,boots,2021-04-23 14:24:52 +0100B61009C60000,"STAY COOL, KOBAYASHI-SAN!: A RIVER CITY RANSOM STORY",,playable,2021-01-26 17:37:28 +01008010118CC000,"Steam Prison",nvdec,playable,2021-04-01 15:34:11 +0100AE100DAFA000,"Steam Tactics",,playable,2022-10-06 16:53:45 +01004DD00C87A000,"Steamburg",,playable,2021-01-13 08:42:01 +01009320084A4000,"SteamWorld Dig",,playable,2024-08-19 12:12:23 +0100CA9002322000,"SteamWorld Dig 2",,playable,2022-12-21 19:25:42 +0100F6D00D83E000,"SteamWorld Quest: Hand of Gilgamech",nvdec,playable,2020-11-09 13:10:04 +01001C6014772000,"Steel Assault",,playable,2022-12-06 14:48:30 +010042800B880000,"STEINS;GATE ELITE",,playable,2020-08-04 07:33:32 +0100CB400E9BC000,"STEINS;GATE: My Darling's Embrace",nvdec,playable,2022-11-20 16:48:34 +01002DE01043E000,"Stela",UE4,playable,2021-06-15 13:28:34 +01005A700C954000,"Stellar Interface",,playable,2022-10-20 13:44:33 +0100BC800EDA2000,"STELLATUM",gpu,playable,2021-03-07 16:30:23 +0100775004794000,"Steredenn: Binary Stars",,playable,2021-01-13 09:19:42 +0100AE0006474000,"Stern Pinball Arcade",,playable,2022-08-16 14:24:41 +0100E24006FA8000,"Stikbold! A Dodgeball Adventure DELUXE",,playable,2021-01-11 20:12:54 +010077B014518000,"Stitchy in Tooki Trouble",,playable,2021-05-06 16:25:53 +010070D00F640000,"STONE",UE4,playable,2022-09-30 11:53:32 +010074400F6A8000,"Stories Untold",nvdec,playable,2022-12-22 01:08:46 +010040D00BCF4000,"Storm Boy",,playable,2022-10-20 14:15:06 +0100B2300B932000,"Storm In A Teacup",gpu,ingame,2021-11-06 02:03:19 +0100D5D00DAF2000,"Story of a Gladiator",,playable,2020-07-29 15:08:18 +010017301007E000,"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",,playable,2021-03-18 11:42:19 +0100ED400EEC2000,"STORY OF SEASONS: Friends of Mineral Town",,playable,2022-10-03 16:40:31 +010078D00E8F4000,"Stranded Sails - Explorers of the Cursed Islands",slow;nvdec;UE4,playable,2022-09-16 11:58:38 +01000A6013F86000,"Strange Field Football",,playable,2022-11-04 12:25:57 +0100DD600DD48000,"Stranger Things 3: The Game",,playable,2021-01-11 17:44:09 +0100D7E011C64000,"Strawberry Vinegar",nvdec,playable,2022-12-05 16:25:40 +010075101EF84000,"Stray",crash,ingame,2025-01-07 04:03:00 +0100024008310000,"Street Fighter 30th Anniversary Collection",online-broken;ldn-partial,playable,2022-08-20 16:50:47 +010012400D202000,"Street Outlaws: The List",nvdec,playable,2021-06-11 12:15:32 +0100888011CB2000,"Street Power Soccer",UE4;crash,boots,2020-11-21 12:28:57 +0100EC9010258000,"Streets of Rage 4",nvdec;online,playable,2020-07-07 21:21:22 +0100BDE012928000,"Strife: Veteran Edition",gpu,ingame,2022-01-15 05:10:42 +010039100DACC000,"Strike Force - War on Terror",crash;Needs Update,menus,2021-11-24 08:08:20 +010038A00E6C6000,"Strike Force Kitty",nvdec,playable,2020-07-29 16:22:15 +010072500D52E000,"Strike Suit Zero: Director's Cut",crash,boots,2021-04-23 17:15:14 +0100FF5005B76000,"STRIKERS1945 for Nintendo Switch",32-bit,playable,2021-06-03 19:35:04 +0100720008ED2000,"STRIKERS1945 Ⅱ for Nintendo Switch",32-bit,playable,2021-06-03 19:43:00 +0100681011B56000,"Struggling",,playable,2020-10-15 20:37:03 +0100AF000B4AE000,"Stunt Kite Party",nvdec,playable,2021-01-25 17:16:56 +0100C5500E7AE000,"STURMWIND EX",audio;32-bit,playable,2022-09-16 12:01:39 +,"Subarashiki Kono Sekai -Final Remix-",services;slow,ingame,2020-02-10 16:21:51 +010001400E474000,"Subdivision Infinity DX",UE4;crash,boots,2021-03-03 14:26:46 +0100E6400BCE8000,"Sublevel Zero Redux",,playable,2022-09-16 12:30:03 +0100EDA00D866000,"Submerged",nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01 +0100429011144000,"Subnautica",vulkan-backend-bug,playable,2022-11-04 13:07:29 +010014C011146000,"Subnautica: Below Zero",,playable,2022-12-23 14:15:13 +0100BF9012AC6000,"Suguru Nature",crash,ingame,2021-07-29 11:36:27 +01005CD00A2A2000,"Suicide Guy",,playable,2021-01-26 13:13:54 +0100DE000C2E4000,"Suicide Guy: Sleepin' Deeply",Needs More Attention,ingame,2022-09-20 23:45:25 +01003D50126A4000,"Sumire",,playable,2022-11-12 13:40:43 +0100A130109B2000,"Summer in Mara",nvdec,playable,2021-03-06 14:10:38 +01004E500DB9E000,"Summer Sweetheart",nvdec,playable,2022-09-16 12:51:46 +0100BFE014476000,"Sunblaze",,playable,2022-11-12 13:59:23 +01002D3007962000,"Sundered: Eldritch Edition",gpu,ingame,2021-06-07 11:46:00 +0100F7000464A000,"Super Beat Sports™",ldn-untested,playable,2022-08-16 16:05:50 +010051A00D716000,"Super Blood Hockey",,playable,2020-12-11 20:01:41 +01007AD00013E000,"Super Bomberman R",nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14 +0100B87017D94000,"SUPER BOMBERMAN R 2",deadlock,boots,2023-09-29 13:19:51 +0100D9B00DB5E000,"Super Cane Magic ZERO",,playable,2022-09-12 15:33:46 +010065F004E5E000,"Super Chariot",,playable,2021-06-03 13:19:01 +0100E5E00C464000,"SUPER DRAGON BALL HEROES WORLD MISSION",nvdec;online-broken,playable,2022-08-17 12:56:30 +010023100B19A000,"Super Dungeon Tactics",,playable,2022-10-06 17:40:40 +010056800B534000,"Super Inefficient Golf",UE4,playable,2022-08-17 15:53:45 +010015700D5DC000,"Super Jumpy Ball",,playable,2020-07-04 18:40:36 +0100196009998000,"Super Kickers League Ultimate",,playable,2021-01-26 13:36:48 +01003FB00C5A8000,"Super Kirby Clash™",ldn-works,playable,2024-07-30 18:21:55 +010000D00F81A000,"Super Korotama",,playable,2021-06-06 19:06:22 +01003E300FCAE000,"Super Loop Drive",nvdec;UE4,playable,2022-09-22 10:58:05 +054507E0B7552000,"Super Mario 64",homebrew,ingame,2024-03-20 16:57:27 +0100277011F1A000,"Super Mario Bros.™ 35",online-broken,menus,2022-08-07 16:27:25 +010015100B514000,"Super Mario Bros.™ Wonder",amd-vendor-bug,playable,2024-09-06 13:21:21 +01009B90006DC000,"Super Mario Maker™ 2",online-broken;ldn-broken,playable,2024-08-25 11:05:19 +0100000000010000,"Super Mario Odyssey™",nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34 +010036B0034E4000,"Super Mario Party™",gpu;Needs Update;ldn-works,ingame,2024-06-21 05:10:16 +0100BC0018138000,"Super Mario RPG™",gpu;audio;nvdec,ingame,2024-06-19 17:43:42 +0000000000000000,"Super Mario World",homebrew,boots,2024-06-13 01:40:31 +010049900F546000,"Super Mario™ 3D All-Stars",services-horizon;slow;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16 +010028600EBDA000,"Super Mario™ 3D World + Bowser’s Fury",ldn-works,playable,2024-07-31 10:45:37 +01004F8006A78000,"Super Meat Boy",services,playable,2020-04-02 23:10:07 +01009C200D60E000,"Super Meat Boy Forever",gpu,boots,2021-04-26 14:25:39 +0100BDD00EC5C000,"Super Mega Space Blaster Special Turbo",online,playable,2020-08-06 12:13:25 +010031F019294000,"Super Monkey Ball Banana Rumble",,playable,2024-06-28 10:39:18 +0100B2A00E1E0000,"Super Monkey Ball: Banana Blitz HD",online-broken,playable,2022-09-16 13:16:25 +01006D000D2A0000,"Super Mutant Alien Assault",,playable,2020-06-07 23:32:45 +01004D600AC14000,"Super Neptunia RPG",nvdec,playable,2022-08-17 16:38:52 +01008D300C50C000,"Super Nintendo Entertainment System™ - Nintendo Switch Online",,playable,2021-01-05 00:29:48 +0100284007D6C000,"Super One More Jump",,playable,2022-08-17 16:47:47 +01001F90122B2000,"Super Punch Patrol",,playable,2024-07-12 19:49:02 +0100331005E8E000,"Super Putty Squad",gpu;32-bit,ingame,2024-04-29 15:51:54 +,"SUPER ROBOT WARS T",online,playable,2021-03-25 11:00:40 +,"SUPER ROBOT WARS V",online,playable,2020-06-23 12:56:37 +,"SUPER ROBOT WARS X",online,playable,2020-08-05 19:18:51 +01004CF00A60E000,"Super Saurio Fly",nvdec,playable,2020-08-06 13:12:14 +010039700D200000,"Super Skelemania",,playable,2020-06-07 22:59:50 +01006A800016E000,"Super Smash Bros.™ Ultimate",gpu;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21 +0100D61012270000,"Super Soccer Blast",gpu,ingame,2022-02-16 08:39:12 +0100A9300A4AE000,"Super Sportmatchen",,playable,2022-08-19 12:34:40 +0100FB400F54E000,"Super Street: Racer",UE4,playable,2022-09-16 13:43:14 +010000500DB50000,"Super Tennis Blast",,playable,2022-08-19 16:20:48 +0100C6800D770000,"Super Toy Cars 2",gpu;regression,ingame,2021-03-02 20:15:15 +010035B00B3F0000,"Super Volley Blast",,playable,2022-08-19 18:14:40 +0100FF60051E2000,"Superbeat: Xonic EX",crash;nvdec,ingame,2022-08-19 18:54:40 +0100630010252000,"SuperEpic: The Entertainment War",,playable,2022-10-13 23:02:48 +01001A500E8B4000,"SUPERHOT",,playable,2021-05-05 19:51:30 +010075701153A000,"Superliminal",,playable,2020-09-03 13:20:50 +0100C01012654000,"Supermarket Shriek",,playable,2022-10-13 23:19:20 +0100A6E01201C000,"Supraland",nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11 +010029A00AEB0000,"Survive! MR.CUBE",,playable,2022-10-20 14:44:47 +01005AB01119C000,"SUSHI REVERSI",,playable,2021-06-11 19:26:58 +0100DDD0085A4000,"Sushi Striker™: The Way of Sushido",nvdec,playable,2020-06-26 20:49:11 +0100D6D00EC2C000,"Sweet Witches",nvdec,playable,2022-10-20 14:56:37 +010049D00C8B0000,"Swimsanity!",online,menus,2021-11-26 14:27:16 +01005DF00DC26000,"SWORD ART ONLINE: FATAL BULLET Complete Edition",UE4;gpu;online,ingame,2021-06-09 16:58:50 +01001B600D1D6000,"SWORD ART ONLINE: Hollow Realization Deluxe Edition",nvdec,playable,2022-08-19 19:19:15 +01000D70049BE000,"Sword of the Guardian",,playable,2020-07-16 12:24:39 +0100E4701355C000,"Sword of the Necromancer",crash,ingame,2022-12-10 01:28:39 +01004BB00421E000,"Syberia 1 & 2",,playable,2021-12-24 12:06:25 +010028C003FD6000,"Syberia 2",gpu,ingame,2022-08-24 12:43:03 +0100CBE004E6C000,"Syberia 3",nvdec,playable,2021-01-25 16:15:12 +010007300C482000,"Sydney Hunter and the Curse of the Mayan",,playable,2020-06-15 12:15:57 +0100D8400DAF0000,"SYNAPTIC DRIVE",online,playable,2020-09-07 13:44:05 +01009E700F448000,"Synergia",,playable,2021-04-06 17:58:04 +01009BF00E7D2000,"SYNTHETIK: Ultimate",gpu;crash,ingame,2022-08-30 03:19:25 +010015B00BB00000,"Table Top Racing: World Tour - Nitro Edition",,playable,2020-04-05 23:21:30 +01000F20083A8000,"Tactical Mind",,playable,2021-01-25 18:05:00 +0100BD700F5F0000,"Tactical Mind 2",,playable,2020-07-01 23:11:07 +0100E12013C1A000,"Tactics Ogre: Reborn",vulkan-backend-bug,playable,2024-04-09 06:21:35 +01007C7006AEE000,"Tactics V: Obsidian Brigade",,playable,2021-02-28 15:09:42 +01002C000B552000,"Taiko no Tatsujin: Drum 'n' Fun!",online-broken;ldn-broken,playable,2023-05-20 15:10:12 +0100BCA0135A0000,"Taiko no Tatsujin: Rhythm Festival",,playable,2023-11-13 13:16:34 +0100DD6012644000,"Taiko no Tatsujin: Rhythmic Adventure Pack",,playable,2020-12-03 07:28:26 +0100346017304000,"Taiko Risshiden V DX",crash,nothing,2022-06-06 16:25:31 +010040A00EA26000,"Taimumari: Complete Edition",,playable,2022-12-06 13:34:49 +0100F0C011A68000,"Tales from the Borderlands",nvdec,playable,2022-10-25 18:44:14 +0100408007078000,"Tales of the Tiny Planet",,playable,2021-01-25 15:47:41 +01002C0008E52000,"Tales of Vesperia™: Definitive Edition",,playable,2024-09-28 03:20:47 +010012800EE3E000,"Tamashii",,playable,2021-06-10 15:26:20 +010008A0128C4000,"Tamiku",gpu,ingame,2021-06-15 20:06:55 +010048F007ADE000,"Tangledeep",crash,boots,2021-01-05 04:08:41 +01007DB010D2C000,"TaniNani",crash;kernel,nothing,2021-04-08 03:06:44 +0100E06012BB4000,"Tank Mechanic Simulator",,playable,2020-12-11 15:10:45 +01007A601318C000,"Tanuki Justice",opengl,playable,2023-02-21 18:28:10 +01004DF007564000,"Tanzia",,playable,2021-06-07 11:10:25 +01002D4011208000,"Task Force Kampas",,playable,2020-11-30 14:44:15 +0100B76011DAA000,"Taxi Chaos",slow;online-broken;UE4,playable,2022-10-25 19:13:00 +0100F43011E5A000,"Tcheco in the Castle of Lucio",,playable,2020-06-27 13:35:43 +010092B0091D0000,"Team Sonic Racing",online-broken;ldn-works,playable,2024-02-05 15:05:27 +0100FE701475A000,"Teenage Mutant Ninja Turtles: Shredder's Revenge",deadlock;crash,boots,2024-09-28 09:31:39 +01005CF01E784000,"Teenage Mutant Ninja Turtles: Splintered Fate",,playable,2024-08-03 13:50:42 +0100FDB0154E4000,"Teenage Mutant Ninja Turtles: The Cowabunga Collection",,playable,2024-01-22 19:39:04 +010021100DF22000,"Telling Lies",,playable,2020-10-23 21:14:51 +0100C8B012DEA000,"Temtem",online-broken,menus,2022-12-17 17:36:11 +0100B2600A398000,"TENGAI for Nintendo Switch",32-bit,playable,2020-11-25 19:52:26 +0100D7A005DFC000,"Tennis",,playable,2020-06-01 20:50:36 +01002970080AA000,"Tennis in the Face",,playable,2022-08-22 14:10:54 +0100092006814000,"Tennis World Tour",online-broken,playable,2022-08-22 14:27:10 +0100950012F66000,"Tennis World Tour 2",online-broken,playable,2022-10-14 10:43:16 +0100E46006708000,"Terraria",online-broken,playable,2022-09-12 16:14:57 +010070C00FB56000,"TERROR SQUID",online-broken,playable,2023-10-30 22:29:29 +010043700EB68000,"TERRORHYTHM (TRRT)",,playable,2021-02-27 13:18:14 +0100FBC007EAE000,"Tesla vs Lovecraft",,playable,2023-11-21 06:19:36 +01005C8005F34000,"Teslagrad",,playable,2021-02-23 14:41:02 +01006F701507A000,"Tested on Humans: Escape Room",,playable,2022-11-12 14:42:52 +0100671016432000,"TETRA for Nintendo Switch™ International Edition",,playable,2020-06-26 20:49:55 +01004E500A15C000,"TETRA's Escape",,playable,2020-06-03 18:21:14 +010040600C5CE000,"Tetris 99 Retail Bundle",gpu;online-broken;ldn-untested,ingame,2024-05-02 16:36:41 +0100EC000D39A000,"Tetsumo Party",,playable,2020-06-09 22:39:55 +01008ED0087A4000,"The Adventure Pals",,playable,2022-08-22 14:48:52 +0100137010152000,"The Adventures of 00 Dilly®",,playable,2020-12-30 19:32:29 +01003B400A00A000,"The Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",nvdec,playable,2022-09-17 11:07:56 +010035C00A4BC000,"The Adventures of Elena Temple",,playable,2020-06-03 23:15:35 +010045A00E038000,"The Alliance Alive HD Remastered",nvdec,playable,2021-03-07 15:43:45 +010079A0112BE000,"The Almost Gone",,playable,2020-07-05 12:33:07 +0100CD500DDAE000,"The Bard's Tale ARPG: Remastered and Resnarkled",gpu;nvdec;online-working,ingame,2024-07-18 12:52:01 +01001E50141BC000,"The Battle Cats Unite!",deadlock,ingame,2021-12-14 21:38:34 +010089600E66A000,"The Big Journey",,playable,2022-09-16 14:03:08 +010021C000B6A000,"The Binding of Isaac: Afterbirth+",,playable,2021-04-26 14:11:56 +0100A5A00B2AA000,"The Bluecoats North & South",nvdec,playable,2020-12-10 21:22:29 +010062500BFC0000,"The Book of Unwritten Tales 2",,playable,2021-06-09 14:42:53 +01002A2004530000,"The Bridge",,playable,2020-06-03 13:53:26 +01008D700AB14000,"The Bug Butcher",,playable,2020-06-03 12:02:04 +01001B40086E2000,"The Bunker",nvdec,playable,2022-09-16 14:24:05 +010069100B7F0000,"The Caligula Effect: Overdose",UE4;gpu,ingame,2021-01-04 11:07:50 +010066800E9F8000,"The Childs Sight",,playable,2021-06-11 19:04:56 +0100B7C01169C000,"The Coma 2: Vicious Sisters",gpu,ingame,2020-06-20 12:51:51 +010033100691A000,"The Coma: Recut",,playable,2020-06-03 15:11:23 +01004170113D4000,"The Complex",nvdec,playable,2022-09-28 14:35:41 +01000F20102AC000,"The Copper Canyon Dixie Dash",UE4,playable,2022-09-29 11:42:29 +01000850037C0000,"The Count Lucanor",nvdec,playable,2022-08-22 15:26:37 +0100EBA01548E000,"The Cruel King and the Great Hero",gpu;services,ingame,2022-12-02 07:02:08 +010051800E922000,"The Dark Crystal: Age of Resistance Tactics",,playable,2020-08-11 13:43:41 +01003DE00918E000,"The Darkside Detective",,playable,2020-06-03 22:16:18 +01000A10041EA000,"The Elder Scrolls V: Skyrim",gpu;crash,ingame,2024-07-14 03:21:31 +01004A9006B84000,"The End Is Nigh",,playable,2020-06-01 11:26:45 +0100CA100489C000,"The Escapists 2",nvdec,playable,2020-09-24 12:31:31 +01001B700BA7C000,"The Escapists: Complete Edition",,playable,2021-02-24 17:50:31 +0100C2E0129A6000,"The Executioner",nvdec,playable,2021-01-23 00:31:28 +01006050114D4000,"The Experiment: Escape Room",gpu,ingame,2022-09-30 13:20:35 +0100B5900DFB2000,"The Eyes of Ara",,playable,2022-09-16 14:44:06 +01002DD00AF9E000,"The Fall",gpu,ingame,2020-05-31 23:31:16 +01003E5002320000,"The Fall Part 2: Unbound",,playable,2021-11-06 02:18:08 +0100CDC00789E000,"The Final Station",nvdec,playable,2022-08-22 15:54:39 +010098800A1E4000,"The First Tree",,playable,2021-02-24 15:51:05 +0100C38004DCC000,"The Flame In The Flood: Complete Edition",gpu;nvdec;UE4,ingame,2022-08-22 16:23:49 +010007700D4AC000,"The Forbidden Arts",,playable,2021-01-26 16:26:24 +010030700CBBC000,"The friends of Ringo Ishikawa",,playable,2022-08-22 16:33:17 +01006350148DA000,"The Gardener and the Wild Vines",gpu,ingame,2024-04-29 16:32:10 +0100B13007A6A000,"The Gardens Between",,playable,2021-01-29 16:16:53 +010036E00FB20000,"The Great Ace Attorney Chronicles",,playable,2023-06-22 21:26:29 +010007B012514000,"The Great Perhaps",,playable,2020-09-02 15:57:04 +01003B300E4AA000,"THE GRISAIA TRILOGY",,playable,2021-01-31 15:53:59 +01001950137D8000,"The Hong Kong Massacre",crash,ingame,2021-01-21 12:06:56 +01004AD00E094000,"The House of Da Vinci",,playable,2021-01-05 14:17:19 +01005A80113D2000,"The House of Da Vinci 2",,playable,2020-10-23 20:47:17 +010088401495E000,"The House of the Dead: Remake",,playable,2025-01-11 00:36:01 +0100E24004510000,"The Hunt - Championship Edition",32-bit,menus,2022-07-21 20:21:25 +01008940086E0000,"The Infectious Madness of Doctor Dekker",nvdec,playable,2022-08-22 16:45:01 +0100B0B00B318000,"The Inner World",nvdec,playable,2020-06-03 21:22:29 +0100A9D00B31A000,"The Inner World - The Last Wind Monk",nvdec,playable,2020-11-16 13:09:40 +0100AE5003EE6000,"The Jackbox Party Pack",online-working,playable,2023-05-28 09:28:40 +010015D003EE4000,"The Jackbox Party Pack 2",online-working,playable,2022-08-22 18:23:40 +0100CC80013D6000,"The Jackbox Party Pack 3",slow;online-working,playable,2022-08-22 18:41:06 +0100E1F003EE8000,"The Jackbox Party Pack 4",online-working,playable,2022-08-22 18:56:34 +010052C00B184000,"The Journey Down: Chapter One",nvdec,playable,2021-02-24 13:32:41 +01006BC00B188000,"The Journey Down: Chapter Three",nvdec,playable,2021-02-24 13:45:27 +01009AB00B186000,"The Journey Down: Chapter Two",nvdec,playable,2021-02-24 13:32:13 +010020500BD98000,"The King's Bird",,playable,2022-08-22 19:07:46 +010031B00DB34000,"the Knight & the Dragon",gpu,ingame,2023-08-14 10:31:43 +01007AF012E16000,"The Language Of Love",Needs Update;crash,nothing,2020-12-03 17:54:00 +010079C017F5E000,"The Lara Croft Collection",services-horizon;deadlock,nothing,2024-07-12 22:45:51 +0100449011506000,"The Last Campfire",,playable,2022-10-20 16:44:19 +0100AAD011592000,"The Last Dead End",gpu;UE4,ingame,2022-10-20 16:59:44 +0100AC800D022000,"THE LAST REMNANT Remastered",nvdec;UE4,playable,2023-02-09 17:24:44 +0100B1900F0B6000,"The Legend of Dark Witch",,playable,2020-07-12 15:18:33 +01001920156C2000,"The Legend of Heroes: Trails from Zero",gpu;mac-bug,ingame,2024-09-14 21:41:41 +01005420101DA000,"The Legend of Heroes: Trails of Cold Steel III",,playable,2020-12-16 10:59:18 +01009B101044C000,"The Legend of Heroes: Trails of Cold Steel III Demo",demo;nvdec,playable,2021-04-23 01:07:32 +0100D3C010DE8000,"The Legend of Heroes: Trails of Cold Steel IV",nvdec,playable,2021-04-23 14:01:05 +01005E5013862000,"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",crash,nothing,2021-09-30 14:41:07 +01008CF01BAAC000,"The Legend of Zelda Echoes of Wisdom",nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01 +0100509005AF2000,"The Legend of Zelda: Breath of the Wild Demo",demo,ingame,2022-12-24 05:02:58 +01007EF00011E000,"The Legend of Zelda™: Breath of the Wild",gpu;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46 +01006BB00C6F0000,"The Legend of Zelda™: Link’s Awakening",gpu;nvdec;mac-bug,ingame,2023-08-09 17:37:40 +01002DA013484000,"The Legend of Zelda™: Skyward Sword HD",gpu,ingame,2024-06-14 16:48:29 +0100F2C0115B6000,"The Legend of Zelda™: Tears of the Kingdom",gpu;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30 +0100A4400BE74000,"The LEGO Movie 2 Videogame",,playable,2023-03-01 11:23:37 +010064B00B95C000,"The Liar Princess and the Blind Prince",audio;slow,playable,2020-06-08 21:23:28 +0100735004898000,"The Lion's Song",,playable,2021-06-09 15:07:16 +0100A5000D590000,"The Little Acre",nvdec,playable,2021-03-02 20:22:27 +01007A700A87C000,"The Long Dark",,playable,2021-02-21 14:19:52 +010052B003A38000,"The Long Reach",nvdec,playable,2021-02-24 14:09:48 +01003C3013300000,"The Long Return",slow,playable,2020-12-10 21:05:10 +0100CE1004E72000,"The Longest Five Minutes",gpu,boots,2023-02-19 18:33:11 +0100F3D0122C2000,"The Longing",gpu,ingame,2022-11-12 15:00:58 +010085A00C5E8000,"The Lord of the Rings: Adventure Card Game - Definitive Edition",online-broken,menus,2022-09-16 15:19:32 +01008A000A404000,"The Lost Child",nvdec,playable,2021-02-23 15:44:20 +0100BAB00A116000,"The Low Road",,playable,2021-02-26 13:23:22 +,"The Mahjong",Needs Update;crash;services,nothing,2021-04-01 22:06:22 +0100DC300AC78000,"The Messenger",,playable,2020-03-22 13:51:37 +0100DEC00B2BC000,"The Midnight Sanctuary",nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32 +0100F1B00B456000,"The MISSING: J.J. Macfield and the Island of Memories",,playable,2022-08-22 19:36:18 +010033300AC1A000,"The Mooseman",,playable,2021-02-24 12:58:57 +01005E9016BDE000,"The movie The Quintessential Bride -Five Memories Spent with You-",,playable,2023-12-14 14:43:43 +0100496004194000,"The Mummy Demastered",,playable,2021-02-23 13:11:27 +01004C500AAF6000,"The Mystery of the Hudson Case",,playable,2020-06-01 11:03:36 +01000CF0084BC000,"The Next Penelope",,playable,2021-01-29 16:26:11 +01001FB00E386000,"THE NINJA SAVIORS Return of the Warriors",online,playable,2021-03-25 23:48:07 +0100B080184BC000,"The Oregon Trail",gpu,ingame,2022-11-25 16:11:49 +0100B0101265C000,"The Otterman Empire",UE4;gpu,ingame,2021-06-17 12:27:15 +01000BC01801A000,"The Outbound Ghost",,nothing,2024-03-02 17:10:58 +0100626011656000,"The Outer Worlds",gpu;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32 +01005C500D690000,"The Park",UE4;crash;gpu,ingame,2020-12-18 12:50:07 +010050101127C000,"The Persistence",nvdec,playable,2021-06-06 19:15:40 +0100CD300880E000,"The Pinball Arcade",online-broken,playable,2022-08-22 19:49:46 +01006BD018B54000,"The Plucky Squire",crash,ingame,2024-09-27 22:32:33 +0100E6A00B960000,"The Princess Guide",,playable,2021-02-24 14:23:34 +010058A00BF1C000,"The Raven Remastered",nvdec,playable,2022-08-22 20:02:47 +0100EB100D17C000,"The Red Strings Club",,playable,2020-06-01 10:51:18 +010079400BEE0000,"The Room",,playable,2021-04-14 18:57:05 +010033100EE12000,"The Ryuo's Work is Never Done!",,playable,2022-03-29 00:35:37 +01002BA00C7CE000,"The Savior's Gang",gpu;nvdec;UE4,ingame,2022-09-21 12:37:48 +0100F3200E7CA000,"The Settlers®: New Allies",deadlock,nothing,2023-10-25 00:18:05 +0100F89003BC8000,"The Sexy Brutale",,playable,2021-01-06 17:48:28 +01001FF00BEE8000,"The Shapeshifting Detective",nvdec,playable,2021-01-10 13:10:49 +010028D00BA1A000,"The Sinking City",nvdec;UE4,playable,2022-09-12 16:41:55 +010041C00A68C000,"The Spectrum Retreat",,playable,2022-10-03 18:52:40 +010029300E5C4000,"The Stanley Parable: Ultra Deluxe",gpu,ingame,2024-07-12 23:18:26 +010007F00AF56000,"The Station",,playable,2022-09-28 18:15:27 +0100858010DC4000,"the StoryTale",,playable,2022-09-03 13:00:25 +0100AA400A238000,"The Stretchers™",nvdec;UE4,playable,2022-09-16 15:40:58 +0100E3100450E000,"The Strike - Championship Edition",gpu;32-bit,boots,2022-12-09 15:58:16 +0100EF200DA60000,"The Survivalists",,playable,2020-10-27 15:51:13 +010040D00B7CE000,"The Swindle",nvdec,playable,2022-08-22 20:53:52 +010037D00D568000,"The Swords of Ditto: Mormo's Curse",slow,ingame,2020-12-06 00:13:12 +01009B300D76A000,"The Tiny Bang Story",,playable,2021-03-05 15:39:05 +0100C3300D8C4000,"The Touryst",crash,ingame,2023-08-22 01:32:38 +010047300EBA6000,"The Tower of Beatrice",,playable,2022-09-12 16:51:42 +010058000A576000,"The Town of Light: Deluxe Edition",gpu,playable,2022-09-21 12:51:34 +0100B0E0086F6000,"The Trail: Frontier Challenge",slow,playable,2022-08-23 15:10:51 +0100EA100F516000,"The Turing Test",nvdec,playable,2022-09-21 13:24:07 +010064E00ECBC000,"The Unicorn Princess",,playable,2022-09-16 16:20:56 +0100BCF00E970000,"The Vanishing of Ethan Carter",UE4,playable,2021-06-09 17:14:47 +0100D0500B0A6000,"The VideoKid",nvdec,playable,2021-01-06 09:28:24 +,"The Voice",services,menus,2020-07-28 20:48:49 +010056E00B4F4000,"The Walking Dead: A New Frontier",,playable,2022-09-21 13:40:48 +010099100B6AC000,"The Walking Dead: Season Two",,playable,2020-08-09 12:57:06 +010029200B6AA000,"The Walking Dead: The Complete First Season",,playable,2021-06-04 13:10:56 +010060F00AA70000,"The Walking Dead: The Final Season - Season Pass",online-broken,playable,2022-08-23 17:22:32 +010095F010568000,"The Wanderer: Frankenstein's Creature",,playable,2020-07-11 12:49:51 +01008B200FC6C000,"The Wardrobe: Even Better Edition",,playable,2022-09-16 19:14:55 +01003D100E9C6000,"The Witcher 3: Wild Hunt",nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51 +0100B1300FF08000,"The Wonderful 101: Remastered",slow;nvdec,playable,2022-09-30 13:49:28 +0100C1500B82E000,"The World Ends with You®: Final Remix",ldn-untested,playable,2022-07-09 01:11:21 +0100E6200D56E000,"The World Next Door",,playable,2022-09-21 14:15:23 +010075900CD1C000,"Thea: The Awakening",,playable,2021-01-18 15:08:47 +010081B01777C000,"THEATRHYTHM FINAL BAR LINE",Incomplete,ingame,2024-08-05 14:24:55 +01001C2010D08000,"They Bleed Pixels",gpu,ingame,2024-08-09 05:52:18 +0100768010970000,"They Came From the Sky",,playable,2020-06-12 16:38:19 +0100CE700F62A000,"Thief of Thieves: Season One",crash;loader-allocator,nothing,2021-11-03 07:16:30 +0100CE400E34E000,"Thief Simulator",,playable,2023-04-22 04:39:11 +01009BD003B36000,"Thimbleweed Park",,playable,2022-08-24 11:15:31 +0100F2300A5DA000,"Think of the Children",deadlock,menus,2021-11-23 09:04:45 +0100066004D68000,"This Is the Police",,playable,2022-08-24 11:37:05 +01004C100A04C000,"This is the Police 2",,playable,2022-08-24 11:49:17 +0100C7C00F77C000,"This Strange Realm Of Mine",,playable,2020-08-28 12:07:24 +0100A8700BC2A000,"This War of Mine: Complete Edition",gpu;32-bit;nvdec,ingame,2022-08-24 12:00:44 +0100AC500EEE8000,"THOTH",,playable,2020-08-05 18:35:28 +0100E910103B4000,"Thronebreaker: The Witcher Tales",nvdec,playable,2021-06-03 16:40:15 +01006F6002840000,"Thumper",gpu,ingame,2024-08-12 02:41:07 +01000AC011588000,"Thy Sword",crash,ingame,2022-09-30 16:43:14 +0100E9000C42C000,"Tick Tock: A Tale for Two",,menus,2020-07-14 14:49:38 +0100B6D00C2DE000,"Tied Together",nvdec,playable,2021-04-10 14:03:46 +010074500699A000,"Timber Tennis: Versus",online,playable,2020-10-03 17:07:15 +01004C500B698000,"Time Carnage",,playable,2021-06-16 17:57:28 +0100F770045CA000,"Time Recoil",,playable,2022-08-24 12:44:03 +0100DD300CF3A000,"Timespinner",gpu,ingame,2022-08-09 09:39:11 +0100393013A10000,"Timothy and the Mysterious Forest",gpu;slow,ingame,2021-06-02 00:42:11 +0100F7C010AF6000,"Tin & Kuna",,playable,2020-11-17 12:16:12 +0100DF900FC52000,"Tiny Gladiators",,playable,2020-12-14 00:09:43 +010061A00AE64000,"Tiny Hands Adventure",,playable,2022-08-24 16:07:48 +010074800741A000,"TINY METAL",UE4;gpu;nvdec,ingame,2021-03-05 17:11:57 +01005D0011A40000,"Tiny Racer",,playable,2022-10-07 11:13:03 +010002401AE94000,"Tiny Thor",gpu,ingame,2024-07-26 08:37:35 +0100A73016576000,"Tinykin",gpu,ingame,2023-06-18 12:12:24 +0100FE801185E000,"Titan Glory",,boots,2022-10-07 11:36:40 +0100605008268000,"Titan Quest",nvdec;online-broken,playable,2022-08-19 21:54:15 +01009C400E93E000,"Titans Pinball",slow,playable,2020-06-09 16:53:52 +010019500DB1E000,"Tlicolity Eyes - twinkle showtime -",gpu,boots,2021-05-29 19:43:44 +010036700F83E000,"To the Moon",,playable,2021-03-20 15:33:38 +010014900865A000,"Toast Time: Smash Up!",crash;services,menus,2020-04-03 12:26:59 +0100A4A00B2E8000,"Toby: The Secret Mine",nvdec,playable,2021-01-06 09:22:33 +0100B5200BB7C000,"ToeJam & Earl: Back in the Groove!",,playable,2021-01-06 22:56:58 +0100B5E011920000,"TOHU",slow,playable,2021-02-08 15:40:44 +0100F3400A432000,"Toki",nvdec,playable,2021-01-06 19:59:23 +01003E500F962000,"Tokyo Dark – Remembrance –",nvdec,playable,2021-06-10 20:09:49 +0100A9400C9C2000,"Tokyo Mirage Sessions™ #FE Encore",32-bit;nvdec,playable,2022-07-07 09:41:07 +0100E2E00CB14000,"Tokyo School Life",,playable,2022-09-16 20:25:54 +010024601BB16000,"Tomb Raider I-III Remastered Starring Lara Croft",gpu;opengl,ingame,2024-09-27 12:32:04 +0100D7F01E49C000,"Tomba! Special Edition",services-horizon,nothing,2024-09-15 21:59:54 +0100D400100F8000,"Tonight We Riot",,playable,2021-02-26 15:55:09 +0100CC00102B4000,"Tony Hawk's™ Pro Skater™ 1 + 2",gpu;Needs Update,ingame,2024-09-24 08:18:14 +010093F00E818000,"Tools Up!",crash,ingame,2020-07-21 12:58:17 +01009EA00E2B8000,"Toon War",,playable,2021-06-11 16:41:53 +010090400D366000,"Torchlight II",,playable,2020-07-27 14:18:37 +010075400DDB8000,"Torchlight III",nvdec;online-broken;UE4,playable,2022-10-14 22:20:17 +01007AF011732000,"TORICKY-S",deadlock,menus,2021-11-25 08:53:36 +0100BEB010F2A000,"Torn Tales: Rebound Edition",,playable,2020-11-01 14:11:59 +0100A64010D48000,"Total Arcade Racing",,playable,2022-11-12 15:12:48 +0100512010728000,"Totally Reliable Delivery Service",online-broken,playable,2024-09-27 19:32:22 +01004E900B082000,"Touhou Genso Wanderer Reloaded",gpu;nvdec,ingame,2022-08-25 11:57:36 +010010F004022000,"Touhou Kobuto V: Burst Battle",,playable,2021-01-11 15:28:58 +0100E9D00D6C2000,"TOUHOU Spell Bubble",,playable,2020-10-18 11:43:43 +0100F7B00595C000,"Tower Of Babel",,playable,2021-01-06 17:05:15 +010094600DC86000,"Tower Of Time",gpu;nvdec,ingame,2020-07-03 11:11:12 +0100A1C00359C000,"TowerFall",,playable,2020-05-16 18:58:07 +0100F6200F77E000,"Towertale",,playable,2020-10-15 13:56:58 +010049E00BA34000,"Townsmen - A Kingdom Rebuilt",nvdec,playable,2022-10-14 22:48:59 +01009FF00A160000,"Toy Stunt Bike: Tiptop's Trials",UE4,playable,2021-04-10 13:56:34 +0100192010F5A000,"Tracks - Toybox Edition",UE4;crash,nothing,2021-02-08 15:19:18 +0100BCA00843A000,"Trailblazers",,playable,2021-03-02 20:40:49 +010009F004E66000,"Transcripted",,playable,2022-08-25 12:13:11 +01005E500E528000,"TRANSFORMERS: BATTLEGROUNDS",online,playable,2021-06-17 18:08:19 +0100BE500BEA2000,"Transistor",,playable,2020-10-22 11:28:02 +0100A8D010BFA000,"Travel Mosaics 2: Roman Holiday",,playable,2021-05-26 12:33:16 +0100102010BFC000,"Travel Mosaics 3: Tokyo Animated",,playable,2021-05-26 12:06:27 +010096D010BFE000,"Travel Mosaics 4: Adventures In Rio",,playable,2021-05-26 11:54:58 +01004C4010C00000,"Travel Mosaics 5: Waltzing Vienna",,playable,2021-05-26 11:49:35 +0100D520119D6000,"Travel Mosaics 6: Christmas Around the World",,playable,2021-05-26 00:52:47 +01000BD0119DE000,"Travel Mosaics 7: Fantastic Berlin",,playable,2021-05-22 18:37:34 +01007DB00A226000,"Travel Mosaics: A Paris Tour",,playable,2021-05-26 12:42:26 +010011600C946000,"Travis Strikes Again: No More Heroes",nvdec;UE4,playable,2022-08-25 12:36:38 +01006EB004B0E000,"Treadnauts",,playable,2021-01-10 14:57:41 +0100D7800E9E0000,"Trials of Mana",UE4,playable,2022-09-30 21:50:37 +0100E1D00FBDE000,"Trials of Mana Demo",nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02 +01003E800A102000,"Trials Rising Standard Edition",,playable,2024-02-11 01:36:39 +0100CC80140F8000,"TRIANGLE STRATEGY™",gpu;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37 +010064E00A932000,"Trine 2: Complete Story",nvdec,playable,2021-06-03 11:45:20 +0100DEC00A934000,"Trine 3: The Artifacts of Power",ldn-untested;online,playable,2021-06-03 12:01:24 +010055E00CA68000,"Trine 4: The Nightmare Prince",gpu,nothing,2025-01-07 05:47:46 +0100D9000A930000,"Trine Enchanted Edition",ldn-untested;nvdec,playable,2021-06-03 11:28:15 +01002D7010A54000,"Trinity Trigger",crash,ingame,2023-03-03 03:09:09 +0100868013FFC000,"TRIVIAL PURSUIT Live! 2",,boots,2022-12-19 00:04:33 +0100F78002040000,"Troll and I™",gpu;nvdec,ingame,2021-06-04 16:58:50 +0100145011008000,"Trollhunters: Defenders of Arcadia",gpu;nvdec,ingame,2020-11-30 13:27:09 +0100FBE0113CC000,"Tropico 6 - Nintendo Switch™ Edition",nvdec;UE4,playable,2022-10-14 23:21:03 +0100D06018DCA000,"Trouble Witches Final! Episode 01: Daughters of Amalgam",,playable,2024-04-08 15:08:11 +0100B5B0113CE000,"Troubleshooter",UE4;crash,nothing,2020-10-04 13:46:50 +010089600FB72000,"Trover Saves The Universe",UE4;crash,nothing,2020-10-03 10:25:27 +0100E6300D448000,"Trüberbrook",,playable,2021-06-04 17:08:00 +0100F2100AA5C000,"Truck and Logistics Simulator",,playable,2021-06-11 13:29:08 +0100CB50107BA000,"Truck Driver",online-broken,playable,2022-10-20 17:42:33 +0100E75004766000,"True Fear: Forsaken Souls - Part 1",nvdec,playable,2020-12-15 21:39:52 +010099900CAB2000,"TT Isle of Man",nvdec,playable,2020-06-22 12:25:13 +010000400F582000,"TT Isle of Man Ride on the Edge 2",gpu;nvdec;online-broken,ingame,2022-09-30 22:13:05 +0100752011628000,"TTV2",,playable,2020-11-27 13:21:36 +0100AFE00452E000,"Tumblestone",,playable,2021-01-07 17:49:20 +010085500D5F6000,"Turok",gpu,ingame,2021-06-04 13:16:24 +0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;vulkan,ingame,2022-09-12 17:50:05 +010004B0130C8000,"Turrican Flashback",audout,playable,2021-08-30 10:07:56 +0100B1F0090F2000,"TurtlePop: Journey to Freedom",,playable,2020-06-12 17:45:39 +0100047009742000,"Twin Robots: Ultimate Edition",nvdec,playable,2022-08-25 14:24:03 +010031200E044000,"Two Point Hospital™",crash;nvdec,ingame,2022-09-22 11:22:23 +010038400C2FE000,"TY the Tasmanian Tiger™ HD",32-bit;crash;nvdec,menus,2020-12-17 21:15:00 +010073A00C4B2000,"Tyd wag vir Niemand",,playable,2021-03-02 13:39:53 +0100D5B00D6DA000,"Type:Rider",,playable,2021-01-06 13:12:55 +010040D01222C000,"UBERMOSH: SANTICIDE",,playable,2020-11-27 15:05:01 +0100992010BF8000,"Ubongo",,playable,2021-02-04 21:15:01 +010079000B56C000,"UglyDolls: An Imperfect Adventure",nvdec;UE4,playable,2022-08-25 14:42:16 +010048901295C000,"Ultimate Fishing Simulator",,playable,2021-06-16 18:38:23 +01009D000FAE0000,"Ultimate Racing 2D",,playable,2020-08-05 17:27:09 +010045200A1C2000,"Ultimate Runner",,playable,2022-08-29 12:52:40 +01006B601117E000,"Ultimate Ski Jumping 2020",online,playable,2021-03-02 20:54:11 +01002D4012222000,"Ultra Hat Dimension",services;audio,menus,2021-11-18 09:05:20 +01009C000415A000,"Ultra Hyperball",,playable,2021-01-06 10:09:55 +01007330027EE000,"Ultra Street Fighter® II: The Final Challengers",ldn-untested,playable,2021-11-25 07:54:58 +01006A300BA2C000,"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",audout,playable,2023-05-04 17:25:23 +0100592005164000,"UNBOX: Newbie's Adventure",UE4,playable,2022-08-29 13:12:56 +01002D900C5E4000,"Uncanny Valley",nvdec,playable,2021-06-04 13:28:45 +010076F011F54000,"Undead & Beyond",nvdec,playable,2022-10-04 09:11:18 +01008F3013E4E000,"Under Leaves",,playable,2021-05-22 18:13:58 +010080B00AD66000,"Undertale",,playable,2022-08-31 17:31:46 +01008F80049C6000,"Unepic",,playable,2024-01-15 17:03:00 +01007820096FC000,"UnExplored",,playable,2021-01-06 10:02:16 +01007D1013512000,"Unhatched",,playable,2020-12-11 12:11:09 +010069401ADB8000,"Unicorn Overlord",,playable,2024-09-27 14:04:32 +0100B1400D92A000,"Unit 4",,playable,2020-12-16 18:54:13 +010045200D3A4000,"Unknown Fate",slow,ingame,2020-10-15 12:27:42 +0100AB2010B4C000,"Unlock The King",,playable,2020-09-01 13:58:27 +0100A3E011CB0000,"Unlock the King 2",,playable,2021-06-15 20:43:55 +01005AA00372A000,"UNO® for Nintendo Switch",nvdec;ldn-untested,playable,2022-07-28 14:49:47 +0100E5D00CC0C000,"Unravel Two",nvdec,playable,2024-05-23 15:45:05 +010001300CC4A000,"Unruly Heroes",,playable,2021-01-07 18:09:31 +0100B410138C0000,"Unspottable",,playable,2022-10-25 19:28:49 +010082400BCC6000,"Untitled Goose Game",,playable,2020-09-26 13:18:06 +0100E49013190000,"Unto The End",gpu,ingame,2022-10-21 11:13:29 +0100B110109F8000,"Urban Flow",services,playable,2020-07-05 12:51:47 +010054F014016000,"Urban Street Fighting",,playable,2021-02-20 19:16:36 +01001B10068EC000,"Urban Trial Playground",UE4;nvdec;online,playable,2021-03-25 20:56:51 +0100A2500EB92000,"Urban Trial Tricky",nvdec;UE4,playable,2022-12-06 13:07:56 +01007C0003AEC000,"Use Your Words",nvdec;online-broken,menus,2022-08-29 17:22:10 +0100D4300EBF8000,"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44 +010024200E00A000,"Uta no☆Prince-sama♪ Repeat Love",nvdec,playable,2022-12-09 09:21:51 +010029B00CC3E000,"UTOPIA 9 - A Volatile Vacation",nvdec,playable,2020-12-16 17:06:42 +010064400B138000,"V-Rally 4",gpu;nvdec,ingame,2021-06-07 19:37:31 +0100A6700D66E000,"VA-11 HALL-A",,playable,2021-02-26 15:05:34 +01009E2003FE2000,"Vaccine",nvdec,playable,2021-01-06 01:02:07 +010089700F30C000,"Valfaris",,playable,2022-09-16 21:37:24 +0100CAF00B744000,"Valkyria Chronicles",32-bit;crash;nvdec,ingame,2022-11-23 20:03:32 +01005C600AC68000,"Valkyria Chronicles 4",audout;nvdec,playable,2021-06-03 18:12:25 +0100FBD00B91E000,"Valkyria Chronicles 4 Demo",slow;demo,ingame,2022-08-29 20:39:07 +0100E0E00B108000,"Valley",nvdec,playable,2022-09-28 19:27:58 +010089A0197E4000,"Vampire Survivors",,ingame,2024-06-17 09:57:38 +010020C00FFB6000,"Vampire: The Masquerade - Coteries of New York",,playable,2020-10-04 14:55:22 +01000BD00CE64000,"VAMPYR",nvdec;UE4,playable,2022-09-16 22:15:51 +01007C500D650000,"Vandals",,playable,2021-01-27 21:45:46 +010030F00CA1E000,"Vaporum",nvdec,playable,2021-05-28 14:25:33 +010045C0109F2000,"VARIABLE BARRICADE NS",nvdec,playable,2022-02-26 15:50:13 +0100FE200AF48000,"VASARA Collection",nvdec,playable,2021-02-28 15:26:10 +0100AD300E4FA000,"Vasilis",,playable,2020-09-01 15:05:35 +01009CD003A0A000,"Vegas Party",,playable,2021-04-14 19:21:41 +010098400E39E000,"Vektor Wars",online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46 +01003A8018E60000,"Vengeful Guardian: Moonrider",deadlock,boots,2024-03-17 23:35:37 +010095B00DBC8000,"Venture Kid",crash;gpu,ingame,2021-04-18 16:33:17 +0100C850134A0000,"Vera Blanc: Full Moon",audio,playable,2020-12-17 12:09:30 +0100379013A62000,"Very Very Valet",nvdec,playable,2022-11-12 15:25:51 +01006C8014DDA000,"Very Very Valet Demo",crash;Needs Update;demo,boots,2022-11-12 15:26:13 +010057B00712C000,"Vesta",nvdec,playable,2022-08-29 21:03:39 +0100E81007A06000,"Victor Vran Overkill Edition",gpu;deadlock;nvdec;opengl,ingame,2022-08-30 11:46:56 +01005880063AA000,"Violett",nvdec,playable,2021-01-28 13:09:36 +010037900CB1C000,"Viviette",,playable,2021-06-11 15:33:40 +0100D010113A8000,"Void Bastards",,playable,2022-10-15 00:04:19 +0100FF7010E7E000,"void tRrLM(); //Void Terrarium",gpu;Needs Update;regression,ingame,2023-02-10 01:13:25 +010078D0175EE000,"void* tRrLM2(); //Void Terrarium 2",,playable,2023-12-21 11:00:41 +0100B1A0066DC000,"Volgarr the Viking",,playable,2020-12-18 15:25:50 +0100A7900E79C000,"Volta-X",online-broken,playable,2022-10-07 12:20:51 +01004D8007368000,"Vostok Inc.",,playable,2021-01-27 17:43:59 +0100B1E0100A4000,"Voxel Galaxy",,playable,2022-09-28 22:45:02 +0100AFA011068000,"Voxel Pirates",,playable,2022-09-28 22:55:02 +0100BFB00D1F4000,"Voxel Sword",,playable,2022-08-30 14:57:27 +01004E90028A2000,"Vroom in the night sky",Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29 +0100C7C00AE6C000,"VSR: Void Space Racing",,playable,2021-01-27 14:08:59 +0100B130119D0000,"Waifu Uncovered",crash,ingame,2023-02-27 01:17:46 +0100E29010A4A000,"Wanba Warriors",,playable,2020-10-04 17:56:22 +010078800825E000,"Wanderjahr TryAgainOrWalkAway",,playable,2020-12-16 09:46:04 +0100B27010436000,"Wanderlust Travel Stories",,playable,2021-04-07 16:09:12 +0100F8A00853C000,"Wandersong",nvdec,playable,2021-06-04 15:33:34 +0100D67013910000,"Wanna Survive",,playable,2022-11-12 21:15:43 +010056901285A000,"War Dogs: Red's Return",,playable,2022-11-13 15:29:01 +01004FA01391A000,"War Of Stealth - assassin",,playable,2021-05-22 17:34:38 +010035A00D4E6000,"War Party",nvdec,playable,2021-01-27 18:26:32 +010049500DE56000,"War Tech Fighters",nvdec,playable,2022-09-16 22:29:31 +010084D00A134000,"War Theatre",gpu,ingame,2021-06-07 19:42:45 +0100B6B013B8A000,"War Truck Simulator",,playable,2021-01-31 11:22:54 +0100563011B4A000,"War-Torn Dreams",crash,nothing,2020-10-21 11:36:16 +010054900F51A000,"WARBORN",,playable,2020-06-25 12:36:47 +01000F0002BB6000,"Wargroove",online-broken,playable,2022-08-31 10:30:45 +0100C6000EEA8000,"Warhammer 40,000: Mechanicus",nvdec,playable,2021-06-13 10:46:38 +0100E5600D7B2000,"WARHAMMER 40,000: SPACE WOLF",online-broken,playable,2022-09-20 21:11:20 +010031201307A000,"Warhammer Age of Sigmar: Storm Ground",nvdec;online-broken;UE4,playable,2022-11-13 15:46:14 +01002FF00F460000,"Warhammer Quest 2: The End Times",,playable,2020-08-04 15:28:03 +0100563010E0C000,"WarioWare™: Get It Together!",gpu;opengl-backend-bug,ingame,2024-04-23 01:04:56 +010045B018EC2000,"WarioWare™: Move It!",,playable,2023-11-14 00:23:51 +0100E0400E320000,"Warlocks 2: God Slayers",,playable,2020-12-16 17:36:50 +0100DB300A026000,"Warp Shift",nvdec,playable,2020-12-15 14:48:48 +010032700EAC4000,"WarriOrb",UE4,playable,2021-06-17 15:45:14 +0100E8500AD58000,"WARRIORS OROCHI 4 ULTIMATE",nvdec;online-broken,playable,2024-08-07 01:50:37 +0100CD900FB24000,"WARTILE",UE4;crash;gpu,menus,2020-12-11 21:56:10 +010039A00BC64000,"Wasteland 2: Director's Cut",nvdec,playable,2021-01-27 13:34:11 +0100B79011F06000,"Water Balloon Mania",,playable,2020-10-23 20:20:59 +0100BA200C378000,"Way of the Passive Fist",gpu,ingame,2021-02-26 21:07:06 +0100560010E3E000,"We should talk.",crash,nothing,2020-08-03 12:32:36 +010096000EEBA000,"Welcome to Hanwell",UE4;crash,boots,2020-08-03 11:54:57 +0100D7F010B94000,"Welcome to Primrose Lake",,playable,2022-10-21 11:30:57 +010035600EC94000,"Wenjia",,playable,2020-06-08 11:38:30 +010031B00A4E8000,"West of Loathing",,playable,2021-01-28 12:35:19 +010038900DFE0000,"What Remains of Edith Finch",slow;UE4,playable,2022-08-31 19:57:59 +010033600ADE6000,"Wheel of Fortune®",crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24 +0100DFC00405E000,"Wheels of Aurelia",,playable,2021-01-27 21:59:25 +010027D011C9C000,"Where Angels Cry",gpu;nvdec,ingame,2022-09-30 22:24:47 +0100FDB0092B4000,"Where Are My Friends?",,playable,2022-09-21 14:39:26 +01000C000C966000,"Where the Bees Make Honey",,playable,2020-07-15 12:40:49 +010017500E7E0000,"Whipseey and the Lost Atlas",,playable,2020-06-23 20:24:14 +010015A00AF1E000,"Whispering Willows",nvdec,playable,2022-09-30 22:33:05 +010027F0128EA000,"Who Wants to Be a Millionaire?",crash,nothing,2020-12-11 20:22:42 +0100C7800CA06000,"Widget Satchel",,playable,2022-09-16 22:41:07 +0100CFC00A1D8000,"Wild Guns™ Reloaded",,playable,2021-01-28 12:29:05 +010071F00D65A000,"Wilmot's Warehouse",audio;gpu,ingame,2021-06-02 17:24:32 +010048800B638000,"Windjammers",online,playable,2020-10-13 11:24:25 +010059900BA3C000,"Windscape",,playable,2022-10-21 11:49:42 +0100D6800CEAC000,"Windstorm: An Unexpected Arrival",UE4,playable,2021-06-07 19:33:19 +01005A100B314000,"Windstorm: Start of a Great Friendship",UE4;gpu;nvdec,ingame,2020-12-22 13:17:48 +010035B012F28000,"Wing of Darkness",UE4,playable,2022-11-13 16:03:51 +0100A4A015FF0000,"Winter Games 2023",deadlock,menus,2023-11-07 20:47:36 +010012A017F18800,"Witch On The Holy Night",,playable,2023-03-06 23:28:11 +0100454012E32000,"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",crash,ingame,2021-08-08 11:56:18 +01002FC00C6D0000,"Witch Thief",,playable,2021-01-27 18:16:07 +010061501904E000,"Witch's Garden",gpu;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24 +0100BD4011FFE000,"Witcheye",,playable,2020-12-14 22:56:08 +0100522007AAA000,"Wizard of Legend",,playable,2021-06-07 12:20:46 +010081900F9E2000,"Wizards of Brandel",,nothing,2020-10-14 15:52:33 +0100C7600E77E000,"Wizards: Wand of Epicosity",,playable,2022-10-07 12:32:06 +01009040091E0000,"Wolfenstein II®: The New Colossus™",gpu,ingame,2024-04-05 05:39:46 +01003BD00CAAE000,"Wolfenstein: Youngblood",online-broken,boots,2024-07-12 23:49:20 +010037A00F5E2000,"Wonder Blade",,playable,2020-12-11 17:55:31 +0100B49016FF0000,"Wonder Boy Anniversary Collection",deadlock,nothing,2023-04-20 16:01:48 +0100EB2012E36000,"Wonder Boy Asha in Monster World",crash,nothing,2021-11-03 08:45:06 +0100A6300150C000,"Wonder Boy: The Dragon's Trap",,playable,2021-06-25 04:53:21 +0100F5D00C812000,"Wondershot",,playable,2022-08-31 21:05:31 +0100E0300EB04000,"Woodle Tree 2: Deluxe",gpu;slow,ingame,2020-06-04 18:44:00 +0100288012966000,"Woodsalt",,playable,2021-04-06 17:01:48 +010083E011BC8000,"Wordify",,playable,2020-10-03 09:01:07 +01009D500A194000,"World Conqueror X",,playable,2020-12-22 16:10:29 +010072000BD32000,"WORLD OF FINAL FANTASY MAXIMA",,playable,2020-06-07 13:57:23 +010009E001D90000,"World of Goo",gpu;32-bit;crash;regression,boots,2024-04-12 05:52:14 +010061F01DB7C800,"World of Goo 2",,boots,2024-08-08 22:52:49 +01001E300B038000,"World Soccer Pinball",,playable,2021-01-06 00:37:02 +010048900CF64000,"Worldend Syndrome",,playable,2021-01-03 14:16:32 +01008E9007064000,"WorldNeverland - Elnea Kingdom",,playable,2021-01-28 17:44:23 +010000301025A000,"Worlds of Magic: Planar Conquest",,playable,2021-06-12 12:51:28 +01009CD012CC0000,"Worm Jazz",gpu;services;UE4;regression,ingame,2021-11-10 10:33:04 +01001AE005166000,"Worms W.M.D",gpu;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59 +010037500C4DE000,"Worse Than Death",,playable,2021-06-11 16:05:40 +01006F100EB16000,"Woven",nvdec,playable,2021-06-02 13:41:08 +010087800DCEA000,"WRC 8 FIA World Rally Championship",nvdec,playable,2022-09-16 23:03:36 +01001A0011798000,"WRC 9 The Official Game",gpu;slow;nvdec,ingame,2022-10-25 19:47:39 +0100DC0012E48000,"Wreckfest",,playable,2023-02-12 16:13:00 +0100C5D00EDB8000,"Wreckin' Ball Adventure",UE4,playable,2022-09-12 18:56:28 +010033700418A000,"Wulverblade",nvdec,playable,2021-01-27 22:29:05 +01001C400482C000,"Wunderling DX",audio;crash,ingame,2022-09-10 13:20:12 +01003B401148E000,"Wurroom",,playable,2020-10-07 22:46:21 +010081700EDF4000,"WWE 2K Battlegrounds",nvdec;online-broken;UE4,playable,2022-10-07 12:44:40 +010009800203E000,"WWE 2K18",nvdec,playable,2023-10-21 17:22:01 +0100DF100B97C000,"X-Morph: Defense",,playable,2020-06-22 11:05:31 +0100D0B00FB74000,"XCOM® 2 Collection",gpu;crash,ingame,2022-10-04 09:38:30 +0100CC9015360000,"XEL",gpu,ingame,2022-10-03 10:19:39 +0100C9F009F7A000,"Xenoblade Chronicles 2: Torna ~ The Golden Country",slow;nvdec,playable,2023-01-28 16:47:28 +0100E95004038000,"Xenoblade Chronicles™ 2",deadlock;amd-vendor-bug,ingame,2024-03-28 14:31:41 +010074F013262000,"Xenoblade Chronicles™ 3",gpu;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44 +0100FF500E34A000,"Xenoblade Chronicles™ Definitive Edition",nvdec,playable,2024-05-04 20:12:41 +010028600BA16000,"Xenon Racer",nvdec;UE4,playable,2022-08-31 22:05:30 +010064200C324000,"Xenon Valkyrie+",,playable,2021-06-07 20:25:53 +0100928005BD2000,"Xenoraid",,playable,2022-09-03 13:01:10 +01005B5009364000,"Xeodrifter",,playable,2022-09-03 13:18:39 +01006FB00DB02000,"Yaga",nvdec,playable,2022-09-16 23:17:17 +010076B0101A0000,"YesterMorrow",crash,ingame,2020-12-17 17:15:25 +010085500B29A000,"Yet Another Zombie Defense HD",,playable,2021-01-06 00:18:39 +0100725019978000,"YGGDRA UNION ~WE'LL NEVER FIGHT ALONE~",,playable,2020-04-03 02:20:47 +0100634008266000,"YIIK: A Postmodern RPG",,playable,2021-01-28 13:38:37 +0100C0000CEEA000,"Yo kai watch 1 for Nintendo Switch",gpu;opengl,ingame,2024-05-28 11:11:49 +010086C00AF7C000,"Yo-Kai Watch 4++",,playable,2024-06-18 20:21:44 +010002D00632E000,"Yoku's Island Express",nvdec,playable,2022-09-03 13:59:02 +0100F47016F26000,"Yomawari 3",,playable,2022-05-10 08:26:51 +010012F00B6F2000,"Yomawari: The Long Night Collection",,playable,2022-09-03 14:36:59 +0100CC600ABB2000,"Yonder: The Cloud Catcher Chronicles (Retail Only)",,playable,2021-01-28 14:06:25 +0100BE50042F6000,"Yono and the Celestial Elephants",,playable,2021-01-28 18:23:58 +0100F110029C8000,"Yooka-Laylee",,playable,2021-01-28 14:21:45 +010022F00DA66000,"Yooka-Laylee and the Impossible Lair",,playable,2021-03-05 17:32:21 +01006000040C2000,"Yoshi’s Crafted World™",gpu;audout,ingame,2021-08-30 13:25:51 +0100AE800C9C6000,"Yoshi’s Crafted World™ Demo",gpu,boots,2020-12-16 14:57:40 +,"Yoshiwara Higanbana Kuon no Chigiri",nvdec,playable,2020-10-17 19:14:46 +01003A400C3DA800,"YouTube",,playable,2024-06-08 05:24:10 +00100A7700CCAA40,"Youtubers Life00",nvdec,playable,2022-09-03 14:56:19 +0100E390124D8000,"Ys IX: Monstrum Nox",,playable,2022-06-12 04:14:42 +0100F90010882000,"Ys Origin",nvdec,playable,2024-04-17 05:07:33 +01007F200B0C0000,"Ys VIII: Lacrimosa of DANA",nvdec,playable,2023-08-05 09:26:41 +010022400BE5A000,"Yu-Gi-Oh! Legacy of the Duelist : Link Evolution",,playable,2024-09-27 21:48:43 +01002D60188DE000,"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",crash,ingame,2023-03-17 01:54:01 +010037D00DBDC000,"YU-NO: A girl who chants love at the bound of this world.",nvdec,playable,2021-01-26 17:03:52 +0100B56011502000,"Yumeutsutsu Re:After",,playable,2022-11-20 16:09:06 +,"Yunohana Spring! - Mellow Times -",audio;crash,menus,2020-09-27 19:27:40 +0100307011C44000,"Yuppie Psycho: Executive Edition",crash,ingame,2020-12-11 10:37:06 +0100FC900963E000,"Yuri",,playable,2021-06-11 13:08:50 +010092400A678000,"Zaccaria Pinball",online-broken,playable,2022-09-03 15:44:28 +0100E7900C4C0000,"Zarvot",,playable,2021-01-28 13:51:36 +01005F200F7C2000,"Zen Chess Collection",,playable,2020-07-01 22:28:27 +01008DD0114AE000,"Zenge",,playable,2020-10-22 13:23:57 +0100057011E50000,"Zengeon",services-horizon;crash,boots,2024-04-29 15:43:07 +0100AAC00E692000,"Zenith",,playable,2022-09-17 09:57:02 +0100A6A00894C000,"ZERO GUNNER 2- for Nintendo Switch",,playable,2021-01-04 20:17:14 +01004B001058C000,"Zero Strain",services;UE4,menus,2021-11-10 07:48:32 +,"Zettai kaikyu gakuen",gpu;nvdec,ingame,2020-08-25 15:15:54 +0100D7B013DD0000,"Ziggy the Chaser",,playable,2021-02-04 20:34:27 +010086700EF16000,"ZikSquare",gpu,ingame,2021-11-06 02:02:48 +010069C0123D8000,"Zoids Wild Blast Unleashed",nvdec,playable,2022-10-15 11:26:59 +0100C7300EEE4000,"Zombie Army Trilogy",ldn-untested;online,playable,2020-12-16 12:02:28 +01006CF00DA8C000,"Zombie Driver Immortal Edition",nvdec,playable,2020-12-14 23:15:10 +0100CFE003A64000,"ZOMBIE GOLD RUSH",online,playable,2020-09-24 12:56:08 +01001740116EC000,"Zombie's Cool",,playable,2020-12-17 12:41:26 +01000E5800D32C00,"Zombieland: Double Tap - Road Trip0",,playable,2022-09-17 10:08:45 +0100CD300A1BA000,"Zombillie",,playable,2020-07-23 17:42:23 +01001EE00A6B0000,"Zotrix: Solar Division",,playable,2021-06-07 20:34:05 +0100B9B00C6A4000,"この世の果てで恋を唄う少女YU-NO",audio,ingame,2021-01-22 07:00:16 +,"スーパーファミコン Nintendo Switch Online",slow,ingame,2020-03-14 05:48:38 +01000BB01CB8A000,"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",,nothing,2024-09-28 07:03:14 +010065500B218000,"メモリーズオフ - Innocent Fille",,playable,2022-12-02 17:36:48 +010032400E700000,"二ノ国 白き聖灰の女王",services;32-bit,menus,2023-04-16 17:11:06 +0100F3100DA46000,"初音ミク Project DIVA MEGA39's",audio;loader-allocator,playable,2022-07-29 11:45:52 +010047F012BE2000,"密室のサクリファイス/ABYSS OF THE SACRIFICE",nvdec,playable,2022-10-21 13:56:28 +0100BF401AF9C000,"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",slow,playable,2023-12-31 14:37:17 +0100AFA01750C000,"死神と少女/Shinigami to Shoujo",gpu;Incomplete,ingame,2024-03-22 01:06:45 +01001BA01EBFC000,"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",services-horizon,nothing,2024-09-28 12:22:55 +0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",crash,ingame,2023-04-25 19:43:52 +0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",crash,ingame,2024-02-12 20:58:31 +010064801A01C000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",crash,nothing,2023-10-30 22:37:40 -- 2.47.1 From 0dd789e8a506e3a6433923c7426bd9ec3e29ae31 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 11 Jan 2025 01:26:34 -0600 Subject: [PATCH 330/722] misc: chore: remove redundant trimming on CompatibilityEntry.GameName init --- src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index 676cf1a52..21b1f503c 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -57,7 +57,7 @@ namespace Ryujinx.Ava.Utilities.Compat ? titleIdRow : default(Optional); - GameName = ColStr(row[indices.GameName]).Trim().Trim('"'); + GameName = ColStr(row[indices.GameName]); Labels = ColStr(row[indices.Labels]).Split(';'); Status = ColStr(row[indices.Status]).ToLower() switch @@ -92,7 +92,6 @@ namespace Ryujinx.Ava.Utilities.Compat .OrElse(new string(' ', 16)); public string FormattedIssueLabels => Labels - .Where(it => !it.StartsWithIgnoreCase("status")) .Select(FormatLabelName) .JoinToString(", "); -- 2.47.1 From 7694c8c046c7749bdd3f431c91ed031284809928 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 11 Jan 2025 04:08:11 -0600 Subject: [PATCH 331/722] Do not auto release stable --- .github/workflows/release.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d8bbdd175..ab39634f7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,16 +3,6 @@ name: Release job on: workflow_dispatch: inputs: {} - push: - branches: [ release ] - paths-ignore: - - '.github/**' - - 'docs/**' - - 'assets/**' - - '*.yml' - - '*.json' - - '*.config' - - '*.md' concurrency: release -- 2.47.1 From f9e8f4bc296e28025369f010da856844bf263f31 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 11 Jan 2025 06:10:48 -0600 Subject: [PATCH 332/722] docs: compat: Ori and the Will of the Wisps is now ingame, not playable --- docs/compatibility.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index b12c7e500..f047355b2 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -2113,7 +2113,7 @@ 0100F9A012892000,"Ord.",,playable,2020-12-14 11:59:06 010061D00DB74000,"Ori and the Blind Forest: Definitive Edition",nvdec;online-broken,playable,2022-09-14 19:58:13 010005800F46E000,"Ori and the Blind Forest: Definitive Edition Demo",,playable,2022-09-10 14:40:12 -01008DD013200000,"Ori and the Will of the Wisps",,playable,2023-03-07 00:47:13 +01008DD013200000,"Ori and the Will of the Wisps",gpu,ingame,2025-01-11 06:09:54 01006C70102EA000,"Orn: The Tiny Forest Sprite",UE4;gpu,ingame,2020-08-07 14:25:30 0100E5900F49A000,"Othercide",nvdec,playable,2022-10-05 19:04:38 01006AA00EE44000,"Otokomizu",,playable,2020-07-13 21:00:44 -- 2.47.1 From 47c71966d0f7fa74d35c7b3183623748440dd8cc Mon Sep 17 00:00:00 2001 From: WilliamWsyHK Date: Mon, 13 Jan 2025 02:31:58 +0800 Subject: [PATCH 333/722] Add compat of Xenoblade 2 JP edition same as global edition (#517) --- docs/compatibility.csv | 6847 ++++++++++++++++++++-------------------- 1 file changed, 3424 insertions(+), 3423 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index f047355b2..0158a45cb 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -1,3423 +1,3424 @@ -"title_id","game_name","labels","status","last_updated" -010099F00EF3E000,"-KLAUS-",nvdec,playable,2020-06-27 13:27:30 -0100BA9014A02000,".hack//G.U. Last Recode",deadlock,boots,2022-03-12 19:15:47 -010098800C4B0000,"'n Verlore Verstand",slow,ingame,2020-12-10 18:00:28 -01009A500E3DA000,"'n Verlore Verstand - Demo",,playable,2021-02-09 00:13:32 -0100A5D01174C000,"/Connection Haunted ",slow,playable,2020-12-10 18:57:14 -01001E500F7FC000,"#Funtime",,playable,2020-12-10 16:54:35 -01000E50134A4000,"#Halloween, Super Puzzles Dream",nvdec,playable,2020-12-10 20:43:58 -01004D100C510000,"#KILLALLZOMBIES",slow,playable,2020-12-16 01:50:25 -0100325012C12000,"#NoLimitFantasy, Super Puzzles Dream",nvdec,playable,2020-12-12 17:21:32 -01005D400E5C8000,"#RaceDieRun",,playable,2020-07-04 20:23:16 -01003DB011AE8000,"#womenUp, Super Puzzles Dream",,playable,2020-12-12 16:57:25 -0100D87012A14000,"#womenUp, Super Puzzles Dream Demo",nvdec,playable,2021-02-09 00:03:31 -01000320000CC000,"1-2-Switch™",services,playable,2022-02-18 14:44:03 -01004D1007926000,"10 Second Run RETURNS",gpu,ingame,2022-07-17 13:06:18 -0100DC000A472000,"10 Second Run RETURNS Demo",gpu,ingame,2021-02-09 00:17:18 -0100D82015774000,"112 Operator",nvdec,playable,2022-11-13 22:42:50 -010051E012302000,"112th Seed",,playable,2020-10-03 10:32:38 -01007F600D1B8000,"12 is Better Than 6",,playable,2021-02-22 16:10:12 -0100B1A010014000,"12 Labours of Hercules II: The Cretan Bull",cpu;32-bit;crash,nothing,2022-12-07 13:43:10 -0100A840047C2000,"12 orbits",,playable,2020-05-28 16:13:26 -01003FC01670C000,"13 Sentinels: Aegis Rim",slow,ingame,2024-06-10 20:33:38 -0100C54015002000,"13 Sentinels: Aegis Rim Demo",demo,playable,2022-04-13 14:15:48 -01007E600EEE6000,"140",,playable,2020-08-05 20:01:33 -0100B94013D28000,"16-Bit Soccer Demo",,playable,2021-02-09 00:23:07 -01005CA0099AA000,"1917 - The Alien Invasion DX",,playable,2021-01-08 22:11:16 -0100829010F4A000,"1971 Project Helios",,playable,2021-04-14 13:50:19 -0100D1000B18C000,"1979 Revolution: Black Friday",nvdec,playable,2021-02-21 21:03:43 -01007BB00FC8A000,"198X",,playable,2020-08-07 13:24:38 -010075601150A000,"1993 Shenandoah",,playable,2020-10-24 13:55:42 -0100148012550000,"1993 Shenandoah Demo",,playable,2021-02-09 00:43:43 -010096500EA94000,"2048 Battles",,playable,2020-12-12 14:21:25 -010024C0067C4000,"2064: Read Only Memories INTEGRAL",deadlock,menus,2020-05-28 16:53:58 -0100749009844000,"20XX",gpu,ingame,2023-08-14 09:41:44 -01007550131EE000,"2URVIVE",,playable,2022-11-17 13:49:37 -0100E20012886000,"2weistein – The Curse of the Red Dragon",nvdec;UE4,playable,2022-11-18 14:47:07 -0100DAC013D0A000,"30 in 1 game collection vol. 2",online-broken,playable,2022-10-15 17:22:27 -010056D00E234000,"30-in-1 Game Collection",online-broken,playable,2022-10-15 17:47:09 -0100FB5010D2E000,"3000th Duel",,playable,2022-09-21 17:12:08 -01003670066DE000,"36 Fragments of Midnight",,playable,2020-05-28 15:12:59 -0100AF400C4CE000,"39 Days to Mars",,playable,2021-02-21 22:12:46 -010010C013F2A000,"3D Arcade Fishing",,playable,2022-10-25 21:50:51 -01006DA00707C000,"3D MiniGolf",,playable,2021-01-06 09:22:11 -01006890126E4000,"4x4 Dirt Track",,playable,2020-12-12 21:41:42 -010010100FF14000,"60 Parsecs!",,playable,2022-09-17 11:01:17 -0100969005E98000,"60 Seconds!",services,ingame,2021-11-30 01:04:14 -0100ECF008474000,"6180 the moon",,playable,2020-05-28 15:39:24 -0100EFE00E964000,"64.0",,playable,2020-12-12 21:31:58 -0100DA900B67A000,"7 Billion Humans",32-bit,playable,2020-12-17 21:04:58 -01004B200DF76000,"7th Sector",nvdec,playable,2020-08-10 14:22:14 -0100E9F00B882000,"8-BIT ADV STEINS;GATE",audio,ingame,2020-01-12 15:05:06 -0100B0700E944000,"80 DAYS",,playable,2020-06-22 21:43:01 -01006B1011B9E000,"80's OVERDRIVE",,playable,2020-10-16 14:33:32 -010006A0042F0000,"88 Heroes - 98 Heroes Edition",,playable,2020-05-28 14:13:02 -010005E00E2BC000,"9 Monkeys of Shaolin",UE4;gpu;slow,ingame,2020-11-17 11:58:43 -0100C5F012E3E000,"9 Monkeys of Shaolin Demo",UE4;gpu;nvdec,ingame,2021-02-09 01:03:30 -01000360107BC000,"911 Operator Deluxe Edition",,playable,2020-07-14 13:57:44 -0100B2C00682E000,"99Vidas - Definitive Edition",online,playable,2020-10-29 13:00:40 -010023500C2F0000,"99Vidas Demo",,playable,2021-02-09 12:51:31 -0100DB00117BA000,"9th Dawn III",,playable,2020-12-12 22:27:27 -010096A00CC80000,"A Ch'ti Bundle",nvdec,playable,2022-10-04 12:48:44 -010021D00D53E000,"A Dark Room",gpu,ingame,2020-12-14 16:14:28 -010026B006802000,"A Duel Hand Disaster: Trackher",nvdec;online-working,playable,2022-09-04 14:24:55 -0100582012B90000,"A Duel Hand Disaster: Trackher DEMO",crash;demo;nvdec,ingame,2021-03-24 18:45:27 -01006CE0134E6000,"A Frog Game",,playable,2020-12-14 16:09:53 -010056E00853A000,"A Hat in Time",,playable,2024-06-25 19:52:44 -01009E1011EC4000,"A HERO AND A GARDEN",,playable,2022-12-05 16:37:47 -01005EF00CFDA000,"A Knight's Quest",UE4,playable,2022-09-12 20:44:20 -01008DD006C52000,"A Magical High School Girl",,playable,2022-07-19 14:40:50 -01004890117B2000,"A Short Hike",,playable,2020-10-15 00:19:58 -0100F0901006C000,"A Sound Plan",crash,boots,2020-12-14 16:46:21 -01007DD011C4A000,"A Summer with the Shiba Inu",,playable,2021-06-10 20:51:16 -0100A3E010E56000,"A-Train: All Aboard! Tourism",nvdec,playable,2021-04-06 17:48:19 -010097A00CC0A000,"Aaero: Complete Edition",nvdec,playable,2022-07-19 14:49:55 -0100EFC010398000,"Aborigenus",,playable,2020-08-05 19:47:24 -0100A5B010A66000,"Absolute Drift",,playable,2020-12-10 14:02:44 -0100C1300BBC6000,"ABZÛ",UE4,playable,2022-07-19 15:02:52 -01003C400871E000,"ACA NEOGEO 2020 SUPER BASEBALL",online,playable,2021-04-12 13:23:51 -0100FC000AFC6000,"ACA NEOGEO 3 COUNT BOUT",online,playable,2021-04-12 13:16:42 -0100AC40038F4000,"ACA NEOGEO AERO FIGHTERS 2",online,playable,2021-04-08 15:44:09 -0100B91008780000,"ACA NEOGEO AERO FIGHTERS 3",online,playable,2021-04-12 13:11:17 -0100B4800AFBA000,"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",online,playable,2021-04-01 22:48:01 -01003FE00A2F6000,"ACA NEOGEO BASEBALL STARS PROFESSIONAL",online,playable,2021-04-01 21:23:05 -0100DFC003398000,"ACA NEOGEO BLAZING STAR",crash;services,menus,2020-05-26 17:29:02 -0100D2400AFB0000,"ACA NEOGEO CROSSED SWORDS",online,playable,2021-04-01 20:42:59 -0100EE6002B48000,"ACA NEOGEO FATAL FURY",online,playable,2021-04-01 20:36:23 -0100EEA00AFB2000,"ACA NEOGEO FOOTBALL FRENZY",,playable,2021-03-29 20:12:12 -0100CB2001DB8000,"ACA NEOGEO GAROU: MARK OF THE WOLVES",online,playable,2021-04-01 20:31:10 -01005D700A2F8000,"ACA NEOGEO GHOST PILOTS",online,playable,2021-04-01 20:26:45 -01000D10038E6000,"ACA NEOGEO LAST RESORT",online,playable,2021-04-01 19:51:22 -0100A2900AFA4000,"ACA NEOGEO LEAGUE BOWLING",crash;services,menus,2020-05-26 17:11:04 -0100A050038F2000,"ACA NEOGEO MAGICAL DROP II",crash;services,menus,2020-05-26 16:48:24 -01007920038F6000,"ACA NEOGEO MAGICIAN LORD",online,playable,2021-04-01 19:33:26 -0100EBE002B3E000,"ACA NEOGEO METAL SLUG",,playable,2021-02-21 13:56:48 -010086300486E000,"ACA NEOGEO METAL SLUG 2",online,playable,2021-04-01 19:25:52 -0100BA8001DC6000,"ACA NEOGEO METAL SLUG 3",crash;services,menus,2020-05-26 16:32:45 -01009CE00AFAE000,"ACA NEOGEO METAL SLUG 4",online,playable,2021-04-01 18:12:18 -01008FD004DB6000,"ACA NEOGEO METAL SLUG X",crash;services,menus,2020-05-26 14:07:20 -010038F00AFA0000,"ACA NEOGEO Money Puzzle Exchanger",online,playable,2021-04-01 17:59:56 -01002E70032E8000,"ACA NEOGEO NEO TURF MASTERS",,playable,2021-02-21 15:12:01 -010052A00A306000,"ACA NEOGEO NINJA COMBAT",,playable,2021-03-29 21:17:28 -01007E800AFB6000,"ACA NEOGEO NINJA COMMANDO",online,playable,2021-04-01 17:28:18 -01003A5001DBA000,"ACA NEOGEO OVER TOP",,playable,2021-02-21 13:16:25 -010088500878C000,"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",online,playable,2021-04-01 17:18:27 -01005C9002B42000,"ACA NEOGEO SAMURAI SHODOWN",online,playable,2021-04-01 17:11:35 -010047F001DBC000,"ACA NEOGEO SAMURAI SHODOWN IV",online,playable,2021-04-12 12:58:54 -010049F00AFE8000,"ACA NEOGEO SAMURAI SHODOWN V SPECIAL",online,playable,2021-04-10 18:07:13 -01009B300872A000,"ACA NEOGEO SENGOKU 2",online,playable,2021-04-10 17:36:44 -01008D000877C000,"ACA NEOGEO SENGOKU 3",online,playable,2021-04-10 16:11:53 -01008A9001DC2000,"ACA NEOGEO SHOCK TROOPERS",crash;services,menus,2020-05-26 15:29:34 -01007D1004DBA000,"ACA NEOGEO SPIN MASTER",online,playable,2021-04-10 15:50:19 -010055A00A300000,"ACA NEOGEO SUPER SIDEKICKS 2",online,playable,2021-04-10 16:05:58 -0100A4D00A308000,"ACA NEOGEO SUPER SIDEKICKS 3 : THE NEXT GLORY",online,playable,2021-04-10 15:39:22 -0100EB2001DCC000,"ACA NEOGEO THE KING OF FIGHTERS '94",crash;services,menus,2020-05-26 15:03:44 -01009DC001DB6000,"ACA NEOGEO THE KING OF FIGHTERS '95",,playable,2021-03-29 20:27:35 -01006F0004FB4000,"ACA NEOGEO THE KING OF FIGHTERS '96",online,playable,2021-04-10 14:49:10 -0100170008728000,"ACA NEOGEO THE KING OF FIGHTERS '97",online,playable,2021-04-10 14:43:27 -0100B42001DB4000,"ACA NEOGEO THE KING OF FIGHTERS '98",crash;services,menus,2020-05-26 14:54:20 -0100583001DCA000,"ACA NEOGEO THE KING OF FIGHTERS '99",online,playable,2021-04-10 14:36:56 -0100B97002B44000,"ACA NEOGEO THE KING OF FIGHTERS 2000",online,playable,2021-04-10 15:24:35 -010048200AFC2000,"ACA NEOGEO THE KING OF FIGHTERS 2001",online,playable,2021-04-10 15:16:23 -0100CFD00AFDE000,"ACA NEOGEO THE KING OF FIGHTERS 2002",online,playable,2021-04-10 15:01:55 -0100EF100AFE6000,"ACA NEOGEO THE KING OF FIGHTERS 2003",online,playable,2021-04-10 14:54:31 -0100699008792000,"ACA NEOGEO THE LAST BLADE 2",online,playable,2021-04-10 14:31:54 -0100F7F00AFA2000,"ACA NEOGEO THE SUPER SPY",online,playable,2021-04-10 14:26:33 -0100CEF001DC0000,"ACA NEOGEO WAKU WAKU 7",online,playable,2021-04-10 14:20:52 -01009D4001DC4000,"ACA NEOGEO WORLD HEROES PERFECT",crash;services,menus,2020-05-26 14:14:36 -01002E700AFC4000,"ACA NEOGEO ZUPAPA!",online,playable,2021-03-25 20:07:33 -0100A9900CB5C000,"Access Denied",,playable,2022-07-19 15:25:10 -01007C50132C8000,"Ace Angler: Fishing Spirits",crash,menus,2023-03-03 03:21:39 -010005501E68C000,"Ace Attorney Investigations Collection",,playable,2024-09-19 16:38:05 -010033401E68E000,"Ace Attorney Investigations Collection DEMO",,playable,2024-09-07 06:16:42 -010039301B7E0000,"Ace Combat 7 - Skies Unknown Deluxe Edition",gpu;UE4,ingame,2024-09-27 14:31:43 -0100FF1004D56000,"Ace of Seafood",,playable,2022-07-19 15:32:25 -0100B28003440000,"Aces of the Luftwaffe - Squadron",nvdec;slow,playable,2020-05-27 12:29:42 -010054300D822000,"Aces of the Luftwaffe - Squadron Demo",nvdec,playable,2021-02-09 13:12:28 -010079B00B3F4000,"Achtung! Cthulhu Tactics",,playable,2020-12-14 18:40:27 -0100DBC0081A4000,"ACORN Tactics",,playable,2021-02-22 12:57:40 -010043C010AEA000,"Across the Grooves",,playable,2020-06-27 12:29:51 -010039A010DA0000,"Active Neurons - Puzzle game",,playable,2021-01-27 21:31:21 -01000D1011EF0000,"Active Neurons 2",,playable,2022-10-07 16:21:42 -010031C0122B0000,"Active Neurons 2 Demo",,playable,2021-02-09 13:40:21 -0100EE1013E12000,"Active Neurons 3 - Wonders Of The World",,playable,2021-03-24 12:20:20 -0100CD40104DE000,"Actual Sunlight",gpu,ingame,2020-12-14 17:18:41 -0100C0C0040E4000,"Adam's Venture™: Origins",,playable,2021-03-04 18:43:57 -010029700EB76000,"Adrenaline Rush - Miami Drive",,playable,2020-12-12 22:49:50 -0100300012F2A000,"Advance Wars™ 1+2: Re-Boot Camp",,playable,2024-01-30 18:19:44 -010014B0130F2000,"Adventure Llama",,playable,2020-12-14 19:32:24 -0100C990102A0000,"Adventure Pinball Bundle",slow,playable,2020-12-14 20:31:53 -0100C4E004406000,"Adventure Time: Pirates of the Enchiridion",nvdec,playable,2022-07-21 21:49:01 -010021F00C1C0000,"Adventures of Bertram Fiddle Episode 2: A Bleaker Predicklement",nvdec,playable,2021-02-22 14:56:37 -010072601233C000,"Adventures of Chris",,playable,2020-12-12 23:00:02 -0100A0A0136E8000,"Adventures of Chris Demo",,playable,2021-02-09 13:49:21 -01002B5012004000,"Adventures of Pip",nvdec,playable,2020-12-12 22:11:55 -01008C901266E000,"ADVERSE",UE4,playable,2021-04-26 14:32:51 -01008E6006502000,"Aegis Defenders",,playable,2021-02-22 13:29:33 -010064500AF72000,"Aegis Defenders demo",,playable,2021-02-09 14:04:17 -010001C011354000,"Aeolis Tournament",online,playable,2020-12-12 22:02:14 -01006710122CE000,"Aeolis Tournament Demo",nvdec,playable,2021-02-09 14:22:30 -0100A0400DDE0000,"AER Memories of Old",nvdec,playable,2021-03-05 18:43:43 -0100E9B013D4A000,"Aerial_Knight's Never Yield",,playable,2022-10-25 22:05:00 -0100087012810000,"Aery - Broken Memories",,playable,2022-10-04 13:11:52 -01000A8015390000,"Aery - Calm Mind",,playable,2022-11-14 14:26:58 -0100875011D0C000,"Aery - Little Bird Adventure",,playable,2021-03-07 15:25:51 -010018E012914000,"Aery - Sky Castle",,playable,2022-10-21 17:58:49 -0100DF8014056000,"Aery – A Journey Beyond Time",,playable,2021-04-05 15:52:25 -01006C40086EA000,"AeternoBlade",nvdec,playable,2020-12-14 20:06:48 -0100B1C00949A000,"AeternoBlade Demo",nvdec,playable,2021-02-09 14:39:26 -01009D100EA28000,"AeternoBlade II",online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18 -,"AeternoBlade II Demo Version",gpu;nvdec,ingame,2021-02-09 15:10:19 -01001B400D334000,"AFL Evolution 2",slow;online-broken;UE4,playable,2022-12-07 12:45:56 -0100DB100BBCE000,"Afterparty",,playable,2022-09-22 12:23:19 -010087C011C4E000,"Agatha Christie - The ABC Murders",,playable,2020-10-27 17:08:23 -010093600A60C000,"Agatha Knife",,playable,2020-05-28 12:37:58 -010005400A45E000,"Agent A: A puzzle in disguise",,playable,2020-11-16 22:53:27 -01008E8012C02000,"Agent A: A puzzle in disguise (Demo)",,playable,2021-02-09 18:30:41 -0100E4700E040000,"Ages of Mages: The last keeper",vulkan-backend-bug,playable,2022-10-04 11:44:05 -010004D00A9C0000,"Aggelos",gpu,ingame,2023-02-19 13:24:23 -010072600D21C000,"Agony",UE4;crash,boots,2020-07-10 16:21:18 -010089B00D09C000,"AI: THE SOMNIUM FILES",nvdec,playable,2022-09-04 14:45:06 -0100C1700FB34000,"AI: THE SOMNIUM FILES Demo",nvdec,playable,2021-02-10 12:52:33 -01006E8011C1E000,"Ailment",,playable,2020-12-12 22:30:41 -0100C7600C7D6000,"Air Conflicts: Pacific Carriers",,playable,2021-01-04 10:52:50 -010005A00A4F4000,"Air Hockey",,playable,2020-05-28 16:44:37 -0100C9E00F54C000,"Air Missions: HIND",,playable,2020-12-13 10:16:45 -0100E95011FDC000,"Aircraft Evolution",nvdec,playable,2021-06-14 13:30:18 -010010A00DB72000,"Airfield Mania Demo",services;demo,boots,2022-04-10 03:43:02 -01003DD00BFEE000,"Airheart - Tales of broken Wings",,playable,2021-02-26 15:20:27 -01007F100DE52000,"Akane",nvdec,playable,2022-07-21 00:12:18 -01009A800F0C8000,"Akash: Path of the Five",gpu;nvdec,ingame,2020-12-14 22:33:12 -010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",,playable,2021-02-22 14:39:35 -0100D4C00EE0C000,"Akuarium",slow,playable,2020-12-12 23:43:36 -010026E00FEBE000,"Akuto: Showdown",,playable,2020-08-04 19:43:27 -0100F5400AB6C000,"Alchemic Jousts",gpu,ingame,2022-12-08 15:06:28 -010001E00F75A000,"Alchemist's Castle",,playable,2020-12-12 23:54:08 -01004510110C4000,"Alder's Blood Prologue",crash,ingame,2021-02-09 19:03:03 -0100D740110C0000,"Alder's Blood: Definitive Edition",,playable,2020-08-28 15:15:23 -01000E000EEF8000,"Aldred Knight",services,playable,2021-11-30 01:49:17 -010025D01221A000,"Alex Kidd in Miracle World DX",,playable,2022-11-14 15:01:34 -0100A2E00D0E0000,"Alien Cruise",,playable,2020-08-12 13:56:05 -0100C1500DBDE000,"Alien Escape",,playable,2020-06-03 23:43:18 -010075D00E8BA000,"Alien: Isolation",nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41 -0100CBD012FB6000,"All Walls Must Fall",UE4,playable,2022-10-15 19:16:30 -0100C1F00A9B8000,"All-Star Fruit Racing",nvdec;UE4,playable,2022-07-21 00:35:37 -0100AC501122A000,"Alluris",gpu;UE4,ingame,2023-08-02 23:13:50 -010063000C3CE000,"Almightree: The Last Dreamer",slow,playable,2020-12-15 13:59:03 -010083E010AE8000,"Along the Edge",,playable,2020-11-18 15:00:07 -010083E013188000,"Alpaca Ball: Allstars",nvdec,playable,2020-12-11 12:26:29 -01000A800B998000,"ALPHA",,playable,2020-12-13 12:17:45 -010053B0123DC000,"Alphaset by POWGI",,playable,2020-12-15 15:15:15 -01003E700FD66000,"Alt-Frequencies",,playable,2020-12-15 19:01:33 -01004DB00935A000,"Alteric",,playable,2020-11-08 13:53:22 -0100C3D00D1D4000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",,playable,2020-08-31 14:17:42 -0100A8A00D27E000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",,playable,2021-02-10 13:33:59 -010045201487C000,"Aluna: Sentinel of the Shards",nvdec,playable,2022-10-25 22:17:03 -01004C200B0B4000,"Alwa's Awakening",,playable,2020-10-13 11:52:01 -01001B7012214000,"Alwa's Legacy",,playable,2020-12-13 13:00:57 -010002B00C534000,"American Fugitive",nvdec,playable,2021-01-04 20:45:11 -010089D00A3FA000,"American Ninja Warrior: Challenge",nvdec,playable,2021-06-09 13:11:17 -01003CC00D0BE000,"Amnesia: Collection",,playable,2022-10-04 13:36:15 -010041D00DEB2000,"Amoeba Battle - Microscopic RTS Action",,playable,2021-05-06 13:33:41 -010046500C8D2000,"Among the Sleep - Enhanced Edition",nvdec,playable,2021-06-03 15:06:25 -0100B0C013912000,"Among Us",online;ldn-broken,menus,2021-09-22 15:20:17 -010050900E1C6000,"Anarcute",,playable,2021-02-22 13:17:59 -01009EE0111CC000,"Ancestors Legacy",nvdec;UE4,playable,2022-10-01 12:25:36 -010021700BC56000,"Ancient Rush 2",UE4;crash,menus,2020-07-14 14:58:47 -0100AE000AEBC000,"Angels of Death",nvdec,playable,2021-02-22 14:17:15 -010001E00A5F6000,"AngerForce: Reloaded for Nintendo Switch",,playable,2022-07-21 10:37:17 -0100F3500D05E000,"Angry Bunnies: Colossal Carrot Crusade",online-broken,playable,2022-09-04 14:53:26 -010084500C7DC000,"Angry Video Game Nerd I & II Deluxe",crash,ingame,2020-12-12 23:59:54 -0100706005B6A000,"Anima: Gate of Memories",nvdec,playable,2021-06-16 18:13:18 -010033F00B3FA000,"Anima: Gate of Memories - Arcane Edition",nvdec,playable,2021-01-26 16:55:51 -01007A400B3F8000,"Anima: Gate of Memories - The Nameless Chronicles",,playable,2021-06-14 14:33:06 -0100F38011CFE000,"Animal Crossing: New Horizons Island Transfer Tool",services;Needs Update;Incomplete,ingame,2022-12-07 13:51:19 -01006F8002326000,"Animal Crossing™: New Horizons",gpu;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49 -010019500E642000,"Animal Fight Club",gpu,ingame,2020-12-13 13:13:33 -01002F4011A8E000,"Animal Fun for Toddlers and Kids",services,boots,2020-12-15 16:45:29 -010035500CA0E000,"Animal Hunter Z",,playable,2020-12-13 12:50:35 -010033C0121DC000,"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",services,boots,2021-11-29 23:43:14 -010065B009B3A000,"Animal Rivals: Nintendo Switch Edition",,playable,2021-02-22 14:02:42 -0100EFE009424000,"Animal Super Squad",UE4,playable,2021-04-23 20:50:50 -0100A16010966000,"Animal Up!",,playable,2020-12-13 15:39:02 -010020D01AD24000,"ANIMAL WELL",,playable,2024-05-22 18:01:49 -0100451012492000,"Animals for Toddlers",services,boots,2020-12-15 17:27:27 -010098600CF06000,"Animated Jigsaws Collection",nvdec,playable,2020-12-15 15:58:34 -0100A1900B5B8000,"Animated Jigsaws: Beautiful Japanese Scenery Demo",nvdec,playable,2021-02-10 13:49:56 -010062500EB84000,"Anime Studio Story",,playable,2020-12-15 18:14:05 -01002B300EB86000,"Anime Studio Story Demo",,playable,2021-02-10 14:50:39 -010097600C322000,"ANIMUS",,playable,2020-12-13 15:11:47 -0100E5A00FD38000,"ANIMUS: Harbinger",,playable,2022-09-13 22:09:20 -010055500CCD2000,"Ankh Guardian - Treasure of the Demon's Temple",,playable,2020-12-13 15:55:49 -01009E600D78C000,"Anode",,playable,2020-12-15 17:18:58 -0100CB9018F5A000,"Another Code™: Recollection",gpu;crash,ingame,2024-09-06 05:58:52 -01001A900D312000,"Another Sight",UE4;gpu;nvdec,ingame,2020-12-03 16:49:59 -01003C300AAAE000,"Another World",slow,playable,2022-07-21 10:42:38 -01000FD00DF78000,"AnShi",nvdec;UE4,playable,2022-10-21 19:37:01 -010054C00D842000,"Anthill",services;nvdec,menus,2021-11-18 09:25:25 -0100596011E20000,"Anti Hero Bundle",nvdec,playable,2022-10-21 20:10:30 -0100016007154000,"Antiquia Lost",,playable,2020-05-28 11:57:32 -0100FE1011400000,"AntVentor",nvdec,playable,2020-12-15 20:09:27 -0100FA100620C000,"Ao no Kanata no Four Rhythm",,playable,2022-07-21 10:50:42 -010047000E9AA000,"AO Tennis 2",online-broken,playable,2022-09-17 12:05:07 -0100990011866000,"Aokana - Four Rhythms Across the Blue",,playable,2022-10-04 13:50:26 -01005B100C268000,"Ape Out",,playable,2022-09-26 19:04:47 -010054500E6D4000,"Ape Out DEMO",,playable,2021-02-10 14:33:06 -010051C003A08000,"Aperion Cyberstorm",,playable,2020-12-14 00:40:16 -01008CA00D71C000,"Aperion Cyberstorm [DEMO]",,playable,2021-02-10 15:53:21 -01008FC00C5BC000,"Apocalipsis Wormwood Edition",deadlock,menus,2020-05-27 12:56:37 -010045D009EFC000,"Apocryph: an old-school shooter",gpu,ingame,2020-12-13 23:24:10 -010020D01B890000,"Apollo Justice: Ace Attorney Trilogy",,playable,2024-06-21 21:54:27 -01005F20116A0000,"Apparition",nvdec;slow,ingame,2020-12-13 23:57:04 -0100AC10085CE000,"AQUA KITTY UDX",online,playable,2021-04-12 15:34:11 -0100FE0010886000,"Aqua Lungers",crash,ingame,2020-12-14 11:25:57 -0100D0D00516A000,"Aqua Moto Racing Utopia",,playable,2021-02-21 21:21:00 -010071800BA74000,"Aragami: Shadow Edition",nvdec,playable,2021-02-21 20:33:23 -0100C7D00E6A0000,"Arc of Alchemist",nvdec,playable,2022-10-07 19:15:54 -0100BE80097FA000,"Arcade Archives 10-Yard Fight",online,playable,2021-03-25 21:26:41 -01005DD00BE08000,"Arcade Archives ALPHA MISSION",online,playable,2021-04-15 09:20:43 -010083800DC70000,"Arcade Archives ALPINE SKI",online,playable,2021-04-15 09:28:46 -0100A5700AF32000,"Arcade Archives ARGUS",online,playable,2021-04-16 06:51:25 -010014F001DE2000,"Arcade Archives Armed F",online,playable,2021-04-16 07:00:17 -0100BEC00C7A2000,"Arcade Archives ATHENA",online,playable,2021-04-16 07:10:12 -0100426001DE4000,"Arcade Archives Atomic Robo-Kid",online,playable,2021-04-16 07:20:29 -0100192009824000,"Arcade Archives BOMB JACK",online,playable,2021-04-16 09:48:26 -010007A00980C000,"Arcade Archives City CONNECTION",online,playable,2021-03-25 22:16:15 -0100EDC00E35A000,"Arcade Archives CLU CLU LAND",online,playable,2021-04-16 10:00:42 -0100BB1001DD6000,"Arcade Archives CRAZY CLIMBER",online,playable,2021-03-25 22:24:15 -0100E9E00B052000,"Arcade Archives DONKEY KONG",Needs Update;crash;services,menus,2021-03-24 18:18:43 -0100F25001DD0000,"Arcade Archives DOUBLE DRAGON",online,playable,2021-03-25 22:44:34 -01009E3001DDE000,"Arcade Archives DOUBLE DRAGON II The Revenge",online,playable,2021-04-12 16:05:29 -0100496006EC8000,"Arcade Archives FRONT LINE",online,playable,2021-05-05 14:10:49 -01009A4008A30000,"Arcade Archives HEROIC EPISODE",online,playable,2021-03-25 23:01:26 -01007D200D3FC000,"Arcade Archives ICE CLIMBER",online,playable,2021-05-05 14:18:34 -010049400C7A8000,"Arcade Archives IKARI WARRIORS",online,playable,2021-05-05 14:24:46 -01000DB00980A000,"Arcade Archives Ikki",online,playable,2021-03-25 23:11:28 -010008300C978000,"Arcade Archives IMAGE FIGHT",online,playable,2021-05-05 14:31:21 -010010B008A36000,"Arcade Archives Kid Niki Radical Ninja",audio;online,ingame,2022-07-21 11:02:04 -0100E7C001DE0000,"Arcade Archives Kid's Horehore Daisakusen",online,playable,2021-04-12 16:21:29 -0100F380105A4000,"Arcade Archives LIFE FORCE",,playable,2020-09-04 13:26:25 -0100755004608000,"Arcade Archives Mario Bros.",online,playable,2021-03-26 11:31:32 -01000BE001DD8000,"Arcade Archives MOON CRESTA",online,playable,2021-05-05 14:39:29 -01003000097FE000,"Arcade Archives MOON PATROL",online,playable,2021-03-26 11:42:04 -01003EF00D3B4000,"Arcade Archives NINJA GAIDEN",audio;online,ingame,2021-04-12 16:27:53 -01002F300D2C6000,"Arcade Archives Ninja Spirit",online,playable,2021-05-05 14:45:31 -0100369001DDC000,"Arcade Archives Ninja-Kid",online,playable,2021-03-26 20:55:07 -01004A200BB48000,"Arcade Archives OMEGA FIGHTER",crash;services,menus,2020-08-18 20:50:54 -01007F8010C66000,"Arcade Archives PLUS ALPHA",audio,ingame,2020-07-04 20:47:55 -0100A6E00D3F8000,"Arcade Archives POOYAN",online,playable,2021-05-05 17:58:19 -01000D200C7A4000,"Arcade Archives PSYCHO SOLDIER",online,playable,2021-05-05 18:02:19 -01001530097F8000,"Arcade Archives PUNCH-OUT!!",online,playable,2021-03-25 22:10:55 -010081E001DD2000,"Arcade Archives Renegade",online,playable,2022-07-21 11:45:40 -0100FBA00E35C000,"Arcade Archives ROAD FIGHTER",online,playable,2021-05-05 18:09:17 -010060000BF7C000,"Arcade Archives ROUTE 16",online,playable,2021-05-05 18:40:41 -0100C2D00981E000,"Arcade Archives RYGAR",online,playable,2021-04-15 08:48:30 -01007A4009834000,"Arcade Archives Shusse Ozumo",online,playable,2021-05-05 17:52:25 -010008F00B054000,"Arcade Archives Sky Skipper",online,playable,2021-04-15 08:58:09 -01008C900982E000,"Arcade Archives Solomon's Key",online,playable,2021-04-19 16:27:18 -010069F008A38000,"Arcade Archives STAR FORCE",online,playable,2021-04-15 08:39:09 -0100422001DDA000,"Arcade Archives TERRA CRESTA",crash;services,menus,2020-08-18 20:20:55 -0100348001DE6000,"Arcade Archives TERRA FORCE",online,playable,2021-04-16 20:03:27 -0100DFD016B7A000,"Arcade Archives TETRIS® THE GRAND MASTER",,playable,2024-06-23 01:50:29 -0100DC000983A000,"Arcade Archives THE NINJA WARRIORS",online;slow,ingame,2021-04-16 19:54:56 -0100AF300D2E8000,"Arcade Archives TIME PILOT",online,playable,2021-04-16 19:22:31 -010029D006ED8000,"Arcade Archives Traverse USA",online,playable,2021-04-15 08:11:06 -010042200BE0C000,"Arcade Archives URBAN CHAMPION",online,playable,2021-04-16 10:20:03 -01004EC00E634000,"Arcade Archives VS. GRADIUS",online,playable,2021-04-12 14:53:58 -010021D00812A000,"Arcade Archives VS. SUPER MARIO BROS.",online,playable,2021-04-08 14:48:11 -01001B000D8B6000,"Arcade Archives WILD WESTERN",online,playable,2021-04-16 10:11:36 -010050000D6C4000,"Arcade Classics Anniversary Collection",,playable,2021-06-03 13:55:10 -01005A8010C7E000,"ARCADE FUZZ",,playable,2020-08-15 12:37:36 -010077000F620000,"Arcade Spirits",,playable,2020-06-21 11:45:03 -0100E680149DC000,"Arcaea",,playable,2023-03-16 19:31:21 -01003C2010C78000,"Archaica: The Path Of Light",crash,nothing,2020-10-16 13:22:26 -01004DA012976000,"Area 86",,playable,2020-12-16 16:45:52 -0100691013C46000,"ARIA CHRONICLE",,playable,2022-11-16 13:50:55 -0100D4A00B284000,"ARK: Survival Evolved",gpu;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56 -0100C56012C96000,"Arkanoid vs. Space Invaders",services,ingame,2021-01-21 12:50:30 -010069A010606000,"Arkham Horror: Mother's Embrace",nvdec,playable,2021-04-19 15:40:55 -0100C5B0113A0000,"Armed 7 DX",,playable,2020-12-14 11:49:56 -010070A00A5F4000,"Armello",nvdec,playable,2021-01-07 11:43:26 -0100A5400AC86000,"ARMS Demo",,playable,2021-02-10 16:30:13 -01009B500007C000,"ARMS™",ldn-works;LAN,playable,2024-08-28 07:49:24 -0100184011B32000,"Arrest of a stone Buddha",crash,nothing,2022-12-07 16:55:00 -01007AB012102000,"Arrog",,playable,2020-12-16 17:20:50 -01008EC006BE2000,"Art of Balance",gpu;ldn-works,ingame,2022-07-21 17:13:57 -010062F00CAE2000,"Art of Balance DEMO",gpu;slow,ingame,2021-02-10 17:17:12 -01006AA013086000,"Art Sqool",nvdec,playable,2022-10-16 20:42:37 -0100CDD00DA70000,"Artifact Adventure Gaiden DX",,playable,2020-12-16 17:49:25 -0100C2500CAB6000,"Ary and the Secret of Seasons",,playable,2022-10-07 20:45:09 -0100C9F00AAEE000,"ASCENDANCE",,playable,2021-01-05 10:54:40 -0100D5800DECA000,"Asemblance",UE4;gpu,ingame,2020-12-16 18:01:23 -0100E4C00DE30000,"Ash of Gods: Redemption",deadlock,nothing,2020-08-10 18:08:32 -010027B00E40E000,"Ashen",nvdec;online-broken;UE4,playable,2022-09-17 12:19:14 -01007B000C834000,"Asphalt Legends Unite",services;crash;online-broken,menus,2022-12-07 13:28:29 -01007F600B134000,"Assassin's Creed® III: Remastered",nvdec,boots,2024-06-25 20:12:11 -010044700DEB0000,"Assassin’s Creed®: The Rebel Collection",gpu,ingame,2024-05-19 07:58:56 -0100DF200B24C000,"Assault Android Cactus+",,playable,2021-06-03 13:23:55 -0100BF8012A30000,"Assault ChaingunS KM",crash;gpu,ingame,2020-12-14 12:48:34 -0100C5E00E540000,"Assault on Metaltron Demo",,playable,2021-02-10 19:48:06 -010057A00C1F6000,"Astebreed",,playable,2022-07-21 17:33:54 -010081500EA1E000,"Asterix & Obelix XXL 3 - The Crystal Menhir",gpu;nvdec;regression,ingame,2022-11-28 14:19:23 -0100F46011B50000,"Asterix & Obelix XXL: Romastered",gpu;nvdec;opengl,ingame,2023-08-16 21:22:06 -01007300020FA000,"ASTRAL CHAIN",,playable,2024-07-17 18:02:19 -0100E5F00643C000,"Astro Bears Party",,playable,2020-05-28 11:21:58 -0100F0400351C000,"Astro Duel Deluxe",32-bit,playable,2021-06-03 11:21:48 -0100B80010C48000,"Astrologaster",cpu;32-bit;crash,nothing,2023-06-28 15:39:31 -0100DF401249C000,"AstroWings: Space War",,playable,2020-12-14 13:10:44 -010099801870E000,"Atari 50: The Anniversary Celebration",slow,playable,2022-11-14 19:42:10 -010088600C66E000,"Atelier Arland series Deluxe Pack",nvdec,playable,2021-04-08 15:33:15 -0100D9D00EE8C000,"Atelier Ayesha: The Alchemist of Dusk DX",crash;nvdec;Needs Update,menus,2021-11-24 07:29:54 -0100E5600EE8E000,"Atelier Escha & Logy: Alchemists of the Dusk Sky DX",nvdec,playable,2022-11-20 16:01:41 -010023201421E000,"Atelier Firis: The Alchemist and the Mysterious Journey DX",gpu;nvdec,ingame,2022-10-25 22:46:19 -0100B1400CD50000,"Atelier Lulua ~The Scion of Arland~",nvdec,playable,2020-12-16 14:29:19 -010009900947A000,"Atelier Lydie & Suelle ~The Alchemists and the Mysterious Paintings~",nvdec,playable,2021-06-03 18:37:01 -01001A5014220000,"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings DX",,playable,2022-10-25 23:06:20 -0100ADD00C6FA000,"Atelier Meruru ~The Apprentice of Arland~ DX",nvdec,playable,2020-06-12 00:50:48 -01002D700B906000,"Atelier Rorona Arland no Renkinjutsushi DX (JP)",nvdec,playable,2022-12-02 17:26:54 -01009A9012022000,"Atelier Ryza 2: Lost Legends & the Secret Fairy",,playable,2022-10-16 21:06:06 -0100D1900EC80000,"Atelier Ryza: Ever Darkness & the Secret Hideout",,playable,2023-10-15 16:36:50 -010005C00EE90000,"Atelier Shallie: Alchemists of the Dusk Sea DX",nvdec,playable,2020-11-25 20:54:12 -010082A01538E000,"Atelier Sophie 2: The Alchemist of the Mysterious Dream",crash,ingame,2022-12-01 04:34:03 -01009BC00C6F6000,"Atelier Totori ~The Adventurer of Arland~ DX",nvdec,playable,2020-06-12 01:04:56 -0100B9400FA38000,"ATOM RPG",nvdec,playable,2022-10-22 10:11:48 -01005FE00EC4E000,"Atomic Heist",,playable,2022-10-16 21:24:32 -0100AD30095A4000,"Atomicrops",,playable,2022-08-06 10:05:07 -01000D1006CEC000,"ATOMIK: RunGunJumpGun",,playable,2020-12-14 13:19:24 -0100FB500631E000,"ATOMINE",gpu;nvdec;slow,playable,2020-12-14 18:56:50 -010039600E7AC000,"Attack of the Toy Tanks",slow,ingame,2020-12-14 12:59:12 -010034500641A000,"Attack on Titan 2",,playable,2021-01-04 11:40:01 -01000F600B01E000,"ATV Drift & Tricks",UE4;online,playable,2021-04-08 17:29:17 -0100AA800DA42000,"Automachef",,playable,2020-12-16 19:51:25 -01006B700EA6A000,"Automachef Demo",,playable,2021-02-10 20:35:37 -0100B280106A0000,"Aviary Attorney: Definitive Edition",,playable,2020-08-09 20:32:12 -010064600F982000,"AVICII Invector",,playable,2020-10-25 12:12:56 -0100E100128BA000,"AVICII Invector Demo",,playable,2021-02-10 21:04:58 -01008FB011248000,"AvoCuddle",,playable,2020-09-02 14:50:13 -0100085012D64000,"Awakening of Cthulhu",UE4,playable,2021-04-26 13:03:07 -01002F1005F3C000,"Away: Journey To The Unexpected",nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04 -0100B8C00CFCE000,"Awesome Pea",,playable,2020-10-11 12:39:23 -010023800D3F2000,"Awesome Pea (Demo)",,playable,2021-02-10 21:48:21 -0100B7D01147E000,"Awesome Pea 2",,playable,2022-10-01 12:34:19 -0100D2011E28000,"Awesome Pea 2 (Demo)",crash,nothing,2021-02-10 22:08:27 -0100DA3011174000,"AXES",,playable,2021-04-08 13:01:58 -0100052004384000,"Axiom Verge",,playable,2020-10-20 01:07:18 -010075400DEC6000,"Ayakashi Koi Gikyoku《Trial version》",,playable,2021-02-10 22:22:11 -01006AF012FC8000,"Azur Lane: Crosswave",UE4;nvdec,playable,2021-04-05 15:15:25 -0100C7D00DE24000,"Azuran Tales: TRIALS",,playable,2020-08-12 15:23:07 -01006FB00990E000,"Azure Reflections",nvdec;online,playable,2021-04-08 13:18:25 -01004E90149AA000,"Azure Striker GUNVOLT 3",,playable,2022-08-10 13:46:49 -0100192003FA4000,"Azure Striker GUNVOLT: STRIKER PACK",32-bit,playable,2024-02-10 23:51:21 -010031D012BA4000,"Azurebreak Heroes",,playable,2020-12-16 21:26:17 -01009B901145C000,"B.ARK",nvdec,playable,2022-11-17 13:35:02 -01002CD00A51C000,"Baba Is You",,playable,2022-07-17 05:36:54 -0100F4100AF16000,"Back to Bed",nvdec,playable,2020-12-16 20:52:04 -0100FEA014316000,"Backworlds",,playable,2022-10-25 23:20:34 -0100EAF00E32E000,"Bacon Man: An Adventure",crash;nvdec,menus,2021-11-20 02:36:21 -01000CB00D094000,"Bad Dream: Coma",deadlock,boots,2023-08-03 00:54:18 -0100B3B00D81C000,"Bad Dream: Fever",,playable,2021-06-04 18:33:12 -0100E98006F22000,"Bad North",,playable,2022-07-17 13:44:25 -010075000D092000,"Bad North Demo",,playable,2021-02-10 22:48:38 -01004C70086EC000,"BAFL - Brakes Are For Losers",,playable,2021-01-13 08:32:51 -010076B011EC8000,"Baila Latino",,playable,2021-04-14 16:40:24 -0100730011BDC000,"Bakugan: Champions of Vestroia",,playable,2020-11-06 19:07:39 -01008260138C4000,"Bakumatsu Renka SHINSENGUMI",,playable,2022-10-25 23:37:31 -0100438012EC8000,"BALAN WONDERWORLD",nvdec;UE4,playable,2022-10-22 13:08:43 -0100E48013A34000,"Balan Wonderworld Demo",gpu;services;UE4;demo,ingame,2023-02-16 20:05:07 -0100CD801CE5E000,"Balatro",,ingame,2024-04-21 02:01:53 -010010A00DA48000,"Baldur's Gate and Baldur's Gate II: Enhanced Editions",32-bit,playable,2022-09-12 23:52:15 -0100BC400FB64000,"Balthazar's Dream",,playable,2022-09-13 00:13:22 -01008D30128E0000,"Bamerang",,playable,2022-10-26 00:29:39 -010013C010C5C000,"Banner of the Maid",,playable,2021-06-14 15:23:37 -0100388008758000,"Banner Saga 2",crash,boots,2021-01-13 08:56:09 -010071E00875A000,"Banner Saga 3",slow,boots,2021-01-11 16:53:57 -0100CE800B94A000,"Banner Saga Trilogy",slow,playable,2024-03-06 11:25:20 -0100425009FB2000,"Baobabs Mausoleum Ep.1: Ovnifagos Don't Eat Flamingos",,playable,2020-07-15 05:06:29 -010079300E976000,"Baobabs Mausoleum Ep.2: 1313 Barnabas Dead End Drive",,playable,2020-12-17 11:22:50 -01006D300FFA6000,"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",nvdec,playable,2020-12-17 11:43:10 -0100D3000AEC2000,"Baobabs Mausoleum: DEMO",,playable,2021-02-10 22:59:25 -01003350102E2000,"Barbarous: Tavern of Emyr",,playable,2022-10-16 21:50:24 -0100F7E01308C000,"Barbearian",Needs Update;gpu,ingame,2021-06-28 16:27:50 -010039C0106C6000,"Baron: Fur Is Gonna Fly",crash,boots,2022-02-06 02:05:43 -0100FB000EB96000,"Barry Bradford's Putt Panic Party",nvdec,playable,2020-06-17 01:08:34 -01004860080A0000,"Baseball Riot",,playable,2021-06-04 18:07:27 -010038600B27E000,"Bastion",,playable,2022-02-15 14:15:24 -01005F3012748000,"Batbarian: Testament of the Primordials",,playable,2020-12-17 12:00:59 -0100C07018CA6000,"Baten Kaitos I & II HD Remaster (Europe/USA)",services;Needs Update,boots,2023-10-01 00:44:32 -0100F28018CA4000,"Baten Kaitos I & II HD Remaster (Japan)",services;Needs Update,boots,2023-10-24 23:11:54 -0100011005D92000,"Batman - The Telltale Series",nvdec;slow,playable,2021-01-11 18:19:35 -01003F00163CE000,"Batman: Arkham City",,playable,2024-09-11 00:30:19 -0100ACD0163D0000,"Batman: Arkham Knight",gpu;mac-bug,ingame,2024-06-25 20:24:42 -0100E6300AA3A000,"Batman: The Enemy Within",crash,nothing,2020-10-16 05:49:27 -0100747011890000,"Battle Axe",,playable,2022-10-26 00:38:01 -0100551001D88000,"Battle Chasers: Nightwar",nvdec;slow,playable,2021-01-12 12:27:34 -0100CC2001C6C000,"Battle Chef Brigade Deluxe",,playable,2021-01-11 14:16:28 -0100DBB00CAEE000,"Battle Chef Brigade Demo",,playable,2021-02-10 23:15:07 -0100A3B011EDE000,"Battle Hunters",gpu,ingame,2022-11-12 09:19:17 -010035E00C1AE000,"Battle of Kings",slow,playable,2020-12-17 12:45:23 -0100D2800EB40000,"Battle Planet - Judgement Day",,playable,2020-12-17 14:06:20 -0100C4D0093EA000,"Battle Princess Madelyn",,playable,2021-01-11 13:47:23 -0100A7500DF64000,"Battle Princess Madelyn Royal Edition",,playable,2022-09-26 19:14:49 -010099B00E898000,"Battle Supremacy - Evolution",gpu;nvdec,boots,2022-02-17 09:02:50 -0100DEB00D5A8000,"Battle Worlds: Kronos",nvdec,playable,2021-06-04 17:48:02 -0100650010DD4000,"Battleground",crash,ingame,2021-09-06 11:53:23 -010044E00D97C000,"BATTLESLOTHS",,playable,2020-10-03 08:32:22 -010059C00E39C000,"Battlestar Galactica Deadlock",nvdec,playable,2020-06-27 17:35:44 -01006D800A988000,"Battlezone Gold Edition",gpu;ldn-untested;online,boots,2021-06-04 18:36:05 -010048300D5C2000,"BATTLLOON",,playable,2020-12-17 15:48:23 -0100194010422000,"bayala - the game",,playable,2022-10-04 14:09:25 -0100CF5010FEC000,"Bayonetta Origins: Cereza and the Lost Demon™",gpu,ingame,2024-02-27 01:39:49 -010002801A3FA000,"Bayonetta Origins: Cereza and the Lost Demon™ Demo",gpu;demo,ingame,2024-02-17 06:06:28 -010076F0049A2000,"Bayonetta™",audout,playable,2022-11-20 15:51:59 -01007960049A0000,"Bayonetta™ 2",nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09 -01004A4010FEA000,"Bayonetta™ 3",gpu;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33 -01002FA00DE72000,"BDSM: Big Drunk Satanic Massacre",,playable,2021-03-04 21:28:22 -01003A1010E3C000,"BE-A Walker",slow,ingame,2020-09-02 15:00:31 -010095C00406C000,"Beach Buggy Racing",online,playable,2021-04-13 23:16:50 -010020700DE04000,"Bear With Me: The Lost Robots",nvdec,playable,2021-02-27 14:20:10 -010024200E97E800,"Bear With Me: The Lost Robots Demo",nvdec,playable,2021-02-12 22:38:12 -0100C0E014A4E000,"Bear's Restaurant",,playable,2024-08-11 21:26:59 -,"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",crash,menus,2020-10-04 06:12:08 -01009C300BB4C000,"Beat Cop",,playable,2021-01-06 19:26:48 -01002D20129FC000,"Beat Me!",online-broken,playable,2022-10-16 21:59:26 -01006B0014590000,"BEAUTIFUL DESOLATION",gpu;nvdec,ingame,2022-10-26 10:34:38 -01009E700DB2E000,"Bee Simulator",UE4;crash,boots,2020-07-15 12:13:13 -010018F007786000,"BeeFense BeeMastered",,playable,2022-11-17 15:38:12 -0100558010B26000,"Behold the Kickmen",,playable,2020-06-27 12:49:45 -0100D1300C1EA000,"Beholder: Complete Edition",,playable,2020-10-16 12:48:58 -01006E1004404000,"Ben 10",nvdec,playable,2021-02-26 14:08:35 -01009CD00E3AA000,"Ben 10: Power Trip!",nvdec,playable,2022-10-09 10:52:12 -010074500BBC4000,"Bendy and the Ink Machine",,playable,2023-05-06 20:35:39 -010068600AD16000,"Beyblade Burst Battle Zero",services;crash;Needs Update,menus,2022-11-20 15:48:32 -010056500CAD8000,"Beyond Enemy Lines: Covert Operations",UE4,playable,2022-10-01 13:11:50 -0100B8F00DACA000,"Beyond Enemy Lines: Essentials",nvdec;UE4,playable,2022-09-26 19:48:16 -0100BF400AF38000,"Bibi & Tina – Adventures with Horses",nvdec;slow,playable,2021-01-13 08:58:09 -010062400E69C000,"Bibi & Tina at the horse farm",,playable,2021-04-06 16:31:39 -01005FF00AF36000,"Bibi Blocksberg – Big Broom Race 3",,playable,2021-01-11 19:07:16 -010062B00A874000,"Big Buck Hunter Arcade",nvdec,playable,2021-01-12 20:31:39 -010088100C35E000,"Big Crown: Showdown",nvdec;online;ldn-untested,menus,2022-07-17 18:25:32 -0100A42011B28000,"Big Dipper",,playable,2021-06-14 15:08:19 -010077E00F30E000,"Big Pharma",,playable,2020-07-14 15:27:30 -010007401287E000,"BIG-Bobby-Car - The Big Race",slow,playable,2020-12-10 14:25:06 -010057700FF7C000,"Billion Road",,playable,2022-11-19 15:57:43 -010087D008D64000,"BINGO for Nintendo Switch",,playable,2020-07-23 16:17:36 -01004BA017CD6000,"Biomutant",crash,ingame,2024-05-16 15:46:36 -01002620102C6000,"BioShock 2 Remastered",services,nothing,2022-10-29 14:39:22 -0100D560102C8000,"BioShock Infinite: The Complete Edition",services-horizon;crash,nothing,2024-08-11 21:35:01 -0100AD10102B2000,"BioShock Remastered",services-horizon;crash;Needs Update,boots,2024-06-06 01:08:52 -010053B0117F8000,"Biped",nvdec,playable,2022-10-01 13:32:58 -01001B700B278000,"Bird Game +",online,playable,2022-07-17 18:41:57 -0100B6B012FF4000,"Birds and Blocks Demo",services;demo,boots,2022-04-10 04:53:03 -0100E62012D3C000,"BIT.TRIP RUNNER",,playable,2022-10-17 14:23:24 -01000AD012D3A000,"BIT.TRIP VOID",,playable,2022-10-17 14:31:23 -0100A0800EA9C000,"Bite the Bullet",,playable,2020-10-14 23:10:11 -010026E0141C8000,"Bitmaster",,playable,2022-12-13 14:05:51 -010061D00FD26000,"Biz Builder Delux",slow,playable,2020-12-15 21:36:25 -0100DD1014AB8000,"Black Book",nvdec,playable,2022-12-13 16:38:53 -010049000B69E000,"Black Future '88",nvdec,playable,2022-09-13 11:24:37 -01004BE00A682000,"Black Hole Demo",,playable,2021-02-12 23:02:17 -0100C3200E7E6000,"Black Legend",gpu;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48 -010043A012A32000,"Blackjack Hands",,playable,2020-11-30 14:04:51 -0100A0A00E660000,"Blackmoor 2",online-broken,playable,2022-09-26 20:26:34 -010032000EA2C000,"Blacksad: Under the Skin",,playable,2022-09-13 11:38:04 -01006B400C178000,"Blacksea Odyssey",nvdec,playable,2022-10-16 22:14:34 -010068E013450000,"Blacksmith of the Sand Kingdom",,playable,2022-10-16 22:37:44 -0100C4400CB7C000,"BLADE ARCUS Rebellion From Shining",,playable,2022-07-17 18:52:28 -0100EA1018A2E000,"Blade Assault",audio,nothing,2024-04-29 14:32:50 -01009CC00E224000,"Blade II - The Return Of Evil",audio;crash;UE4,ingame,2021-11-14 02:49:59 -01005950022EC000,"Blade Strangers",nvdec,playable,2022-07-17 19:02:43 -0100DF0011A6A000,"Bladed Fury",,playable,2022-10-26 11:36:26 -0100CFA00CC74000,"Blades of Time",deadlock;online,boots,2022-07-17 19:19:58 -01006CC01182C000,"Blair Witch",nvdec;UE4,playable,2022-10-01 14:06:16 -010039501405E000,"Blanc",gpu;slow,ingame,2023-02-22 14:00:13 -0100698009C6E000,"Blasphemous",nvdec,playable,2021-03-01 12:15:31 -0100302010338000,"Blasphemous Demo",,playable,2021-02-12 23:49:56 -0100225000FEE000,"Blaster Master Zero",32-bit,playable,2021-03-05 13:22:33 -01005AA00D676000,"Blaster Master Zero 2",,playable,2021-04-08 15:22:59 -010025B002E92000,"Blaster Master Zero Demo",,playable,2021-02-12 23:59:06 -0100E53013E1C000,"Blastoid Breakout",,playable,2021-01-25 23:28:02 -0100EE800C93E000,"BLAZBLUE CENTRALFICTION Special Edition",nvdec,playable,2020-12-15 23:50:04 -0100B61008208000,"BLAZBLUE CROSS TAG BATTLE",nvdec;online,playable,2021-01-05 20:29:37 -010021A00DE54000,"Blazing Beaks",,playable,2020-06-04 20:37:06 -0100C2700C252000,"Blazing Chrome",,playable,2020-11-16 04:56:54 -010091700EA2A000,"Bleep Bloop DEMO",nvdec,playable,2021-02-13 00:20:53 -010089D011310000,"Blind Men",audout,playable,2021-02-20 14:15:38 -0100743013D56000,"Blizzard® Arcade Collection",nvdec,playable,2022-08-03 19:37:26 -0100F3500A20C000,"BlobCat",,playable,2021-04-23 17:09:30 -0100E1C00DB6C000,"Block-a-Pix Deluxe Demo",,playable,2021-02-13 00:37:39 -0100C6A01AD56000,"Bloo Kid",,playable,2024-05-01 17:18:04 -010055900FADA000,"Bloo Kid 2",,playable,2024-05-01 17:16:57 -0100EE5011DB6000,"Blood and Guts Bundle",,playable,2020-06-27 12:57:35 -01007E700D17E000,"Blood Waves",gpu,ingame,2022-07-18 13:04:46 -0100E060102AA000,"Blood will be Spilled",nvdec,playable,2020-12-17 03:02:03 -01004B800AF5A000,"Bloodstained: Curse of the Moon",,playable,2020-09-04 10:42:17 -01004680124E6000,"Bloodstained: Curse of the Moon 2",,playable,2020-09-04 10:56:27 -010025A00DF2A000,"Bloodstained: Ritual of the Night",nvdec;UE4,playable,2022-07-18 14:27:35 -0100E510143EC000,"Bloody Bunny, The Game",nvdec;UE4,playable,2022-10-22 13:18:55 -0100B8400A1C6000,"Bloons TD 5",Needs Update;audio;gpu;services,boots,2021-04-18 23:02:46 -01000EB01023E000,"Blossom Tales Demo",,playable,2021-02-13 14:22:53 -0100C1000706C000,"Blossom Tales: The Sleeping King",,playable,2022-07-18 16:43:07 -010073B010F6E000,"Blue Fire",UE4,playable,2022-10-22 14:46:11 -0100721013510000,"Body of Evidence",,playable,2021-04-25 22:22:11 -0100AD1010CCE000,"Bohemian Killing",vulkan-backend-bug,playable,2022-09-26 22:41:37 -010093700ECEC000,"Boku to Nurse no Kenshuu Nisshi",,playable,2022-11-21 20:38:34 -01001D900D9AC000,"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",slow;crash;Needs Update,ingame,2022-04-24 22:46:04 -0100317014B7C000,"Bomb Rush Cyberfunk",,playable,2023-09-28 19:51:57 -01007900080B6000,"Bomber Crew",,playable,2021-06-03 14:21:28 -0100A1F012948000,"Bomber Fox",nvdec,playable,2021-04-19 17:58:13 -010087300445A000,"Bombslinger",services,menus,2022-07-19 12:53:15 -01007A200F452000,"Book of Demons",,playable,2022-09-29 12:03:43 -010054500F564000,"Bookbound Brigade",,playable,2020-10-09 14:30:29 -01002E6013ED8000,"Boom Blaster",,playable,2021-03-24 10:55:56 -010081A00EE62000,"Boomerang Fu",,playable,2024-07-28 01:12:41 -010069F0135C4000,"Boomerang Fu Demo Version",demo,playable,2021-02-13 14:38:13 -01009970122E4000,"Borderlands 3 Ultimate Edition",gpu,ingame,2024-07-15 04:38:14 -010064800F66A000,"Borderlands: Game of the Year Edition",slow;online-broken;ldn-untested,ingame,2023-07-23 21:10:36 -010096F00FF22000,"Borderlands: The Handsome Collection",,playable,2022-04-22 18:35:07 -010007400FF24000,"Borderlands: The Pre-Sequel",nvdec,playable,2021-06-09 20:17:10 -01008E500AFF6000,"Boreal Blade",gpu;ldn-untested;online,ingame,2021-06-11 15:37:14 -010092C013FB8000,"BORIS THE ROCKET",,playable,2022-10-26 13:23:09 -010076F00EBE4000,"BOSSGARD",online-broken,playable,2022-10-04 14:21:13 -010069B00EAC8000,"Bot Vice Demo",crash;demo,ingame,2021-02-13 14:52:42 -010081100FE08000,"Bouncy Bob 2",,playable,2020-07-14 16:51:53 -0100E1200DC1A000,"Bounty Battle",nvdec,playable,2022-10-04 14:40:51 -0100B4700C57E000,"Bow to Blood: Last Captain Standing",slow,playable,2020-10-23 10:51:21 -010040800BA8A000,"Box Align",crash;services,nothing,2020-04-03 17:26:56 -010018300D006000,"BOXBOY! + BOXGIRL!™",,playable,2020-11-08 01:11:54 -0100B7200E02E000,"BOXBOY! + BOXGIRL!™ Demo",demo,playable,2021-02-13 14:59:08 -0100CA400B6D0000,"BQM -BlockQuest Maker-",online,playable,2020-07-31 20:56:50 -0100E87017D0E000,"Bramble: The Mountain King",services-horizon,playable,2024-03-06 09:32:17 -01000F5003068000,"Brave Dungeon + Dark Witch Story:COMBAT",,playable,2021-01-12 21:06:34 -01006DC010326000,"BRAVELY DEFAULT™ II",gpu;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26 -0100B6801137E000,"Bravely Default™ II Demo",gpu;crash;UE4;demo,ingame,2022-09-27 05:39:47 -010081501371E000,"BraveMatch",UE4,playable,2022-10-26 13:32:15 -0100F60017D4E000,"Bravery and Greed",gpu;deadlock,boots,2022-12-04 02:23:47 -0100A42004718000,"BRAWL",nvdec;slow,playable,2020-06-04 14:23:18 -010068F00F444000,"Brawl Chess",nvdec,playable,2022-10-26 13:59:17 -0100C6800B934000,"Brawlhalla",online;opengl,playable,2021-06-03 18:26:09 -010060200A4BE000,"Brawlout",ldn-untested;online,playable,2021-06-04 17:35:35 -0100C1B00E1CA000,"Brawlout Demo",demo,playable,2021-02-13 22:46:53 -010022C016DC8000,"Breakout: Recharged",slow,ingame,2022-11-06 15:32:57 -01000AA013A5E000,"Breathedge",UE4;nvdec,playable,2021-05-06 15:44:28 -01003D50100F4000,"Breathing Fear",,playable,2020-07-14 15:12:29 -010026800BB06000,"Brick Breaker",nvdec;online,playable,2020-12-15 18:26:23 -01002AD0126AE000,"Bridge Constructor: The Walking Dead",gpu;slow,ingame,2020-12-11 17:31:32 -01000B1010D8E000,"Bridge! 3",,playable,2020-10-08 20:47:24 -010011000EA7A000,"BRIGANDINE The Legend of Runersia",,playable,2021-06-20 06:52:25 -0100703011258000,"BRIGANDINE The Legend of Runersia Demo",,playable,2021-02-14 14:44:10 -01000BF00BE40000,"Bring Them Home",UE4,playable,2021-04-12 14:14:43 -010060A00B53C000,"Broforce",ldn-untested;online,playable,2021-05-28 12:23:38 -0100EDD0068A6000,"Broken Age",,playable,2021-06-04 17:40:32 -0100A5800F6AC000,"Broken Lines",,playable,2020-10-16 00:01:37 -01001E60085E6000,"Broken Sword 5 - the Serpent's Curse",,playable,2021-06-04 17:28:59 -0100F19011226000,"Brotherhood United Demo",demo,playable,2021-02-14 21:10:57 -01000D500D08A000,"Brothers: A Tale of Two Sons",nvdec;UE4,playable,2022-07-19 14:02:22 -0100B2700E90E000,"Brunch Club",,playable,2020-06-24 13:54:07 -010010900F7B4000,"Bubble Bobble 4 Friends: The Baron is Back!",nvdec,playable,2021-06-04 15:27:55 -0100DBE00C554000,"Bubsy: Paws on Fire!",slow,ingame,2023-08-24 02:44:51 -0100089010A92000,"Bucket Knight",crash,ingame,2020-09-04 13:11:24 -0100F1B010A90000,"Bucket Knight demo",demo,playable,2021-02-14 21:23:09 -01000D200AC0C000,"Bud Spencer & Terence Hill - Slaps And Beans",,playable,2022-07-17 12:37:00 -010051A00E99E000,"Bug Fables: The Everlasting Sapling",,playable,2020-06-09 11:27:00 -01003DD00D658000,"Bulletstorm: Duke of Switch Edition",nvdec,playable,2022-03-03 08:30:24 -01006BB00E8FA000,"BurgerTime Party!",slow,playable,2020-11-21 14:11:53 -01005780106E8000,"BurgerTime Party! Demo",demo,playable,2021-02-14 21:34:16 -010078C00DB40000,"Buried Stars",,playable,2020-09-07 14:11:58 -0100DBF01000A000,"Burnout™ Paradise Remastered",nvdec;online,playable,2021-06-13 02:54:46 -010066F00C76A000,"Bury me, my Love",,playable,2020-11-07 12:47:37 -010030D012FF6000,"Bus Driver Simulator",,playable,2022-10-17 13:55:27 -0100A9101418C000,"BUSTAFELLOWS",nvdec,playable,2020-10-17 20:04:41 -0100177005C8A000,"BUTCHER",,playable,2021-01-11 18:50:17 -01000B900D8B0000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda",slow;nvdec,playable,2024-04-01 22:43:40 -010065700EE06000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda Demo",demo;gpu;nvdec,ingame,2021-02-14 21:48:15 -01005C00117A8000,"Café Enchanté",,playable,2020-11-13 14:54:25 -010060400D21C000,"Cafeteria Nipponica Demo",demo,playable,2021-02-14 22:11:35 -0100699012F82000,"Cake Bash Demo",crash;demo,ingame,2021-02-14 22:21:15 -01004FD00D66A000,"Caladrius Blaze",deadlock;nvdec,nothing,2022-12-07 16:44:37 -01004B500AB88000,"Calculation Castle : Greco's Ghostly Challenge Addition",32-bit,playable,2020-11-01 23:40:11 -010045500B212000,"Calculation Castle : Greco's Ghostly Challenge Division",32-bit,playable,2020-11-01 23:54:55 -0100ECE00B210000,"Calculation Castle : Greco's Ghostly Challenge Multiplication",32-bit,playable,2020-11-02 00:04:33 -0100A6500B176000,"Calculation Castle : Greco's Ghostly Challenge Subtraction",32-bit,playable,2020-11-01 23:47:42 -010004701504A000,"Calculator",,playable,2021-06-11 13:27:20 -010013A00E750000,"Calico",,playable,2022-10-17 14:44:28 -010046000EE40000,"Call of Cthulhu",nvdec;UE4,playable,2022-12-18 03:08:30 -0100B4700BFC6000,"Call of Juarez: Gunslinger",gpu;nvdec,ingame,2022-09-17 16:49:46 -0100593008BDC000,"Can't Drive This",,playable,2022-10-22 14:55:17 -0100E4600B166000,"Candle: The Power of the Flame",nvdec,playable,2020-05-26 12:10:20 -01001E0013208000,"Capcom Arcade Stadium",,playable,2021-03-17 05:45:14 -010094E00B52E000,"Capcom Beat 'Em Up Bundle",,playable,2020-03-23 18:31:24 -0100F6400A77E000,"CAPCOM BELT ACTION COLLECTION",online;ldn-untested,playable,2022-07-21 20:51:23 -01009BF0072D4000,"Captain Toad™: Treasure Tracker",32-bit,playable,2024-04-25 00:50:16 -01002C400B6B6000,"Captain Toad™: Treasure Tracker Demo",32-bit;demo,playable,2021-02-14 22:36:09 -0100EAE010560000,"Captain Tsubasa: Rise of New Champions",online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50 -01002320137CC000,"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",slow,playable,2021-02-14 22:45:35 -010048800D95C000,"Car Mechanic Manager",,playable,2020-07-23 18:50:17 -01007BD00AE70000,"Car Quest",deadlock,menus,2021-11-18 08:59:18 -0100DA70115E6000,"Caretaker",,playable,2022-10-04 14:52:24 -0100DD6014870000,"Cargo Crew Driver",,playable,2021-04-19 12:54:22 -010088C0092FE000,"Carnival Games®",nvdec,playable,2022-07-21 21:01:22 -01005F5011AC4000,"Carnivores: Dinosaur Hunt",,playable,2022-12-14 18:46:06 -0100B1600E9AE000,"CARRION",crash,nothing,2020-08-13 17:15:12 -01008D1001512000,"Cars 3: Driven to Win",gpu,ingame,2022-07-21 21:21:05 -0100810012A1A000,"Carto",,playable,2022-09-04 15:37:06 -0100085003A2A000,"Cartoon Network Battle Crashers",,playable,2022-07-21 21:55:40 -0100C4C0132F8000,"CASE 2: Animatronics Survival",nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03 -010066F01A0E0000,"Cassette Beasts",,playable,2024-07-22 20:38:43 -010001300D14A000,"Castle Crashers Remastered",gpu,boots,2024-08-10 09:21:20 -0100F6D01060E000,"Castle Crashers Remastered Demo",gpu;demo,boots,2022-04-10 10:57:10 -01003C100445C000,"Castle of Heart",nvdec,playable,2022-07-21 23:10:45 -0100F5500FA0E000,"Castle of no Escape 2",,playable,2022-09-13 13:51:42 -0100DA2011F18000,"Castle Pals",,playable,2021-03-04 21:00:33 -010097C00AB66000,"CastleStorm",nvdec,playable,2022-07-21 22:49:14 -010007400EB64000,"CastleStorm II",UE4;crash;nvdec,boots,2020-10-25 11:22:44 -01001A800D6BC000,"Castlevania Anniversary Collection",audio,playable,2020-05-23 11:40:29 -010076000C86E000,"Cat Girl Without Salad: Amuse-Bouche",,playable,2022-09-03 13:01:47 -0100A2F006FBE000,"Cat Quest",,playable,2020-04-02 23:09:32 -01008BE00E968000,"Cat Quest II",,playable,2020-07-06 23:52:09 -0100E86010220000,"Cat Quest II Demo",demo,playable,2021-02-15 14:11:57 -0100BAE0077E4000,"Catherine Full Body for Nintendo Switch (JP)",Needs Update;gpu,ingame,2021-02-21 18:06:11 -0100BF00112C0000,"Catherine: Full Body",nvdec,playable,2023-04-02 11:00:37 -010004400B28A000,"Cattails",,playable,2021-06-03 14:36:57 -0100B7D0022EE000,"Cave Story+",,playable,2020-05-22 09:57:25 -01001A100C0E8000,"Caveblazers",slow,ingame,2021-06-09 17:57:28 -01006DB004566000,"Caveman Warriors",,playable,2020-05-22 11:44:20 -010078700B2CC000,"Caveman Warriors Demo",demo,playable,2021-02-15 14:44:08 -01002B30028F6000,"Celeste",,playable,2020-06-17 10:14:40 -01006B000A666000,"Cendrillon palikA",gpu;nvdec,ingame,2022-07-21 22:52:24 -01007600115CE000,"CHAOS CODE -NEW SIGN OF CATASTROPHE-",crash;nvdec,boots,2022-04-04 12:24:21 -0100957016B90000,"CHAOS;HEAD NOAH",,playable,2022-06-02 22:57:19 -0100F52013A66000,"Charge Kid",gpu;audout,boots,2024-02-11 01:17:47 -0100DE200C350000,"Chasm",,playable,2020-10-23 11:03:43 -010034301A556000,"Chasm: The Rift",gpu,ingame,2024-04-29 19:02:48 -0100A5900472E000,"Chess Ultra",UE4,playable,2023-08-30 23:06:31 -0100E3C00A118000,"Chicken Assassin: Reloaded",,playable,2021-02-20 13:29:01 -0100713010E7A000,"Chicken Police – Paint it RED!",nvdec,playable,2020-12-10 15:10:11 -0100F6C00A016000,"Chicken Range",,playable,2021-04-23 12:14:23 -01002E500E3EE000,"Chicken Rider",,playable,2020-05-22 11:31:17 -0100CAC011C3A000,"Chickens Madness DEMO",UE4;demo;gpu;nvdec,ingame,2021-02-15 15:02:10 -01007D000AD8A000,"Child of Light® Ultimate Edition",nvdec,playable,2020-12-16 10:23:10 -01002DE00C250000,"Children of Morta",gpu;nvdec,ingame,2022-09-13 17:48:47 -0100C1A00AC3E000,"Children of Zodiarcs",,playable,2020-10-04 14:23:33 -010046F012A04000,"Chinese Parents",,playable,2021-04-08 12:56:41 -01005A001489A000,"Chiptune Arrange Sound(DoDonPachi Resurrection)",32-bit;crash,ingame,2024-01-25 14:37:32 -01006A30124CA000,"Chocobo GP",gpu;crash,ingame,2022-06-04 14:52:18 -0100BF600BF26000,"Chocobo's Mystery Dungeon EVERY BUDDY!",slow,playable,2020-05-26 13:53:13 -01000BA0132EA000,"Choices That Matter: And The Sun Went Out",,playable,2020-12-17 15:44:08 -,"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",gpu;nvdec,ingame,2020-09-28 17:58:04 -010039A008E76000,"ChromaGun",,playable,2020-05-26 12:56:42 -010006800E13A000,"Chronos: Before the Ashes",UE4;gpu;nvdec,ingame,2020-12-11 22:16:35 -010039700BA7E000,"Circle of Sumo",,playable,2020-05-22 12:45:21 -01008FA00D686000,"Circuits",,playable,2022-09-19 11:52:50 -0100D8800B87C000,"Cities: Skylines - Nintendo Switch™ Edition",,playable,2020-12-16 10:34:57 -0100E4200D84E000,"Citizens of Space",gpu,boots,2023-10-22 06:45:44 -0100D9C012900000,"Citizens Unite!: Earth x Space",gpu,ingame,2023-10-22 06:44:19 -01005E501284E000,"City Bus Driving Simulator",,playable,2021-06-15 21:25:59 -0100A3A00CC7E000,"CLANNAD",,playable,2021-06-03 17:01:02 -01007B501372C000,"CLANNAD Side Stories",,playable,2022-10-26 15:03:04 -01005ED0107F4000,"Clash Force",,playable,2022-10-01 23:45:48 -010009300AA6C000,"Claybook",slow;nvdec;online;UE4,playable,2022-07-22 11:11:34 -010058900F52E000,"Clea",crash,ingame,2020-12-15 16:22:56 -010045E0142A4000,"Clea 2",,playable,2021-04-18 14:25:18 -01008C100C572000,"Clock Zero ~Shuuen no Ichibyou~ Devote",nvdec,playable,2022-12-04 22:19:14 -0100DF9013AD4000,"Clocker",,playable,2021-04-05 15:05:13 -0100B7200DAC6000,"Close to the Sun",crash;nvdec;UE4,boots,2021-11-04 09:19:41 -010047700D540000,"Clubhouse Games™: 51 Worldwide Classics",ldn-works,playable,2024-05-21 16:12:57 -0100C1401CEDC000,"Clue",crash;online,menus,2020-11-10 09:23:48 -010085A00821A000,"ClusterPuck 99",,playable,2021-01-06 00:28:12 -010096900A4D2000,"Clustertruck",slow,ingame,2021-02-19 21:07:09 -01005790110F0000,"Cobra Kai: The Karate Kid Saga Continues",,playable,2021-06-17 15:59:13 -01002E700C366000,"COCOON",gpu,ingame,2024-03-06 11:33:08 -010034E005C9C000,"Code of Princess EX",nvdec;online,playable,2021-06-03 10:50:13 -010086100CDCA000,"CODE SHIFTER",,playable,2020-08-09 15:20:55 -010002400F408000,"Code: Realize ~Future Blessings~",nvdec,playable,2023-03-31 16:57:47 -0100CF800C810000,"Coffee Crisis",,playable,2021-02-20 12:34:52 -010066200E1E6000,"Coffee Talk",,playable,2020-08-10 09:48:44 -0100178009648000,"Coffin Dodgers",,playable,2021-02-20 14:57:41 -010035B01706E000,"Cold Silence",cpu;crash,nothing,2024-07-11 17:06:14 -010083E00F40E000,"Collar X Malice",nvdec,playable,2022-10-02 11:51:56 -0100E3B00F412000,"Collar X Malice -Unlimited-",nvdec,playable,2022-10-04 15:30:40 -01002A600D7FC000,"Collection of Mana",,playable,2020-10-19 19:29:45 -0100B77012266000,"COLLECTION of SaGa FINAL FANTASY LEGEND",,playable,2020-12-30 19:11:16 -010030800BC36000,"Collidalot",nvdec,playable,2022-09-13 14:09:27 -0100CA100C0BA000,"Color Zen",,playable,2020-05-22 10:56:17 -010039B011312000,"Colorgrid",,playable,2020-10-04 01:50:52 -0100A7000BD28000,"Coloring Book",,playable,2022-07-22 11:17:05 -010020500BD86000,"Colors Live",gpu;services;crash,boots,2023-02-26 02:51:07 -0100E2F0128B4000,"Colossus Down",,playable,2021-02-04 20:49:50 -0100C4D00D16A000,"Commander Keen in Keen Dreams",gpu,ingame,2022-08-04 20:34:20 -0100E400129EC000,"Commander Keen in Keen Dreams: Definitive Edition",,playable,2021-05-11 19:33:54 -010065A01158E000,"Commandos 2 - HD Remaster",gpu;nvdec,ingame,2022-08-10 21:52:27 -010015801308E000,"Conarium",UE4;nvdec,playable,2021-04-26 17:57:53 -0100971011224000,"Concept Destruction",,playable,2022-09-29 12:28:56 -010043700C9B0000,"Conduct TOGETHER!",nvdec,playable,2021-02-20 12:59:00 -01007EF00399C000,"Conga Master Party!",,playable,2020-05-22 13:22:24 -0100A5600FAC0000,"Construction Simulator 3 - Console Edition",,playable,2023-02-06 09:31:23 -0100A330022C2000,"Constructor Plus",,playable,2020-05-26 12:37:40 -0100DCA00DA7E000,"Contra Anniversary Collection",,playable,2022-07-22 11:30:12 -0100F2600D710000,"CONTRA: ROGUE CORPS",crash;nvdec;regression,menus,2021-01-07 13:23:35 -0100B8200ECA6000,"CONTRA: ROGUE CORPS Demo",gpu,ingame,2022-09-04 16:46:52 -01007D701298A000,"Contraptions",,playable,2021-02-08 18:40:50 -0100041013360000,"Control Ultimate Edition - Cloud Version",Needs Update;crash;services,nothing,2021-04-18 22:34:06 -010058800E90A000,"Convoy: A Tactical Roguelike",,playable,2020-10-15 14:43:50 -0100B82010B6C000,"Cook, Serve, Delicious! 3?!",,playable,2022-10-09 12:09:34 -010060700EFBA000,"Cooking Mama: Cookstar",crash;loader-allocator,menus,2021-11-20 03:19:35 -01001E400FD58000,"Cooking Simulator",,playable,2021-04-18 13:25:23 -0100DF9010206000,"Cooking Tycoons - 3 in 1 Bundle",,playable,2020-11-16 22:44:26 -01005350126E0000,"Cooking Tycoons 2 - 3 in 1 Bundle",,playable,2020-11-16 22:19:33 -0100C5A0115C4000,"CopperBell",,playable,2020-10-04 15:54:36 -010016400B1FE000,"Corpse Party: Blood Drive",nvdec,playable,2021-03-01 12:44:23 -0100CCB01B1A0000,"COSMIC FANTASY COLLECTION",,ingame,2024-05-21 17:56:37 -010067C00A776000,"Cosmic Star Heroine",,playable,2021-02-20 14:30:47 -01003DD00F94A000,"COTTOn Reboot! [ コットン リブート! ]",,playable,2022-05-24 16:29:24 -,"Cotton/Guardian Saturn Tribute Games",gpu,boots,2022-11-27 21:00:51 -01000E301107A000,"Couch Co-Op Bundle Vol. 2",nvdec,playable,2022-10-02 12:04:21 -0100C1E012A42000,"Country Tales",,playable,2021-06-17 16:45:39 -01003370136EA000,"Cozy Grove",gpu,ingame,2023-07-30 22:22:19 -010073401175E000,"Crash Bandicoot™ 4: It’s About Time",nvdec;UE4,playable,2024-03-17 07:13:45 -0100D1B006744000,"Crash Bandicoot™ N. Sane Trilogy",,playable,2024-02-11 11:38:14 -010007900FCE2000,"Crash Drive 2",online,playable,2020-12-17 02:45:46 -010046600BD0E000,"Crash Dummy",nvdec,playable,2020-05-23 11:12:43 -0100BF200CD74000,"Crashbots",,playable,2022-07-22 13:50:52 -010027100BD16000,"Crashlands",,playable,2021-05-27 20:30:06 -0100F9F00C696000,"Crash™ Team Racing Nitro-Fueled",gpu;nvdec;online-broken,ingame,2023-06-25 02:40:17 -0100BF7006BCA000,"Crawl",,playable,2020-05-22 10:16:05 -0100C66007E96000,"Crayola Scoot",nvdec,playable,2022-07-22 14:01:55 -01005BA00F486000,"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",,playable,2021-07-21 10:41:33 -0100D470106DC000,"CRAYON SHINCHAN The Storm Called FLAMING KASUKABE RUNNER!!",services,menus,2020-03-20 14:00:57 -01006BC00C27A000,"Crazy Strike Bowling EX",UE4;gpu;nvdec,ingame,2020-08-07 18:15:59 -0100F9900D8C8000,"Crazy Zen Mini Golf",,playable,2020-08-05 14:00:00 -0100B0E010CF8000,"Creaks",,playable,2020-08-15 12:20:52 -01007C600D778000,"Creature in the Well",UE4;gpu,ingame,2020-11-16 12:52:40 -0100A19011EEE000,"Creepy Tale",,playable,2020-12-15 21:58:03 -01005C2013B00000,"Cresteaju",gpu,ingame,2021-03-24 10:46:06 -010022D00D4F0000,"Cricket 19",gpu,ingame,2021-06-14 14:56:07 -0100387017100000,"Cricket 22 The Official Game Of The Ashes",crash,boots,2023-10-18 08:01:57 -01005640080B0000,"Crimsonland",,playable,2021-05-27 20:50:54 -0100B0400EBC4000,"Cris Tales",crash,ingame,2021-07-29 15:10:53 -01004BC0166CC000,"CRISIS CORE –FINAL FANTASY VII– REUNION",,playable,2022-12-19 15:53:59 -01004F800C4DA000,"Croc's World",,playable,2020-05-22 11:21:09 -01009DB00DE12000,"Croc's World 2",,playable,2020-12-16 20:01:40 -010025200FC54000,"Croc's World 3",,playable,2020-12-30 18:53:26 -01000F0007D92000,"Croixleur Sigma",online,playable,2022-07-22 14:26:54 -01003D90058FC000,"CrossCode",,playable,2024-02-17 10:23:19 -0100B1E00AA56000,"Crossing Souls",nvdec,playable,2021-02-20 15:42:54 -0100059012BAE000,"Crown Trick",,playable,2021-06-16 19:36:29 -0100B41013C82000,"Cruis'n Blast",gpu,ingame,2023-07-30 10:33:47 -01000CC01C108000,"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",demo,playable,2023-08-06 05:33:21 -0100CEA007D08000,"Crypt of the NecroDancer: Nintendo Switch Edition",nvdec,playable,2022-11-01 09:52:06 -0100582010AE0000,"Crysis 2 Remastered",deadlock,menus,2023-09-21 10:46:17 -0100CD3010AE2000,"Crysis 3 Remastered",deadlock,menus,2023-09-10 16:03:50 -0100E66010ADE000,"Crysis Remastered",nvdec,menus,2024-08-13 05:23:24 -0100972008234000,"Crystal Crisis",nvdec,playable,2021-02-20 13:52:44 -01006FA012FE0000,"Cthulhu Saves Christmas",,playable,2020-12-14 00:58:55 -010001600D1E8000,"Cube Creator X",crash,menus,2021-11-25 08:53:28 -010082E00F1CE000,"Cubers: Arena",nvdec;UE4,playable,2022-10-04 16:05:40 -010040D011D04000,"Cubicity",,playable,2021-06-14 14:19:51 -0100A5C00D162000,"Cuphead",,playable,2022-02-01 22:45:55 -0100F7E00DFC8000,"Cupid Parasite",gpu,ingame,2023-08-21 05:52:36 -010054501075C000,"Curious Cases",,playable,2020-08-10 09:30:48 -0100D4A0118EA000,"Curse of the Dead Gods",,playable,2022-08-30 12:25:38 -0100CE5014026000,"Curved Space",,playable,2023-01-14 22:03:50 -0100C1300DE74000,"Cyber Protocol",nvdec,playable,2020-09-28 14:47:40 -0100C1F0141AA000,"Cyber Shadow",,playable,2022-07-17 05:37:41 -01006B9013672000,"Cybxus Hearts",gpu;slow,ingame,2022-01-15 05:00:49 -010063100B2C2000,"Cytus α",nvdec,playable,2021-02-20 13:40:46 -0100B6400CA56000,"DAEMON X MACHINA™",UE4;audout;ldn-untested;nvdec,playable,2021-06-09 19:22:29 -010061300DF48000,"Dairoku: Ayakashimori",Needs Update;loader-allocator,nothing,2021-11-30 05:09:38 -0100BD2009A1C000,"Damsel",,playable,2022-09-06 11:54:39 -0100BFC002B4E000,"Dandara: Trials of Fear Edition",,playable,2020-05-26 12:42:33 -0100DFB00D808000,"Dandy Dungeon - Legend of Brave Yamada -",,playable,2021-01-06 09:48:47 -01003ED0099B0000,"Danger Mouse: The Danger Games",crash;online,boots,2022-07-22 15:49:45 -0100EFA013E7C000,"Danger Scavenger",nvdec,playable,2021-04-17 15:53:04 -0100417007F78000,"Danmaku Unlimited 3",,playable,2020-11-15 00:48:35 -,"Darius Cozmic Collection",,playable,2021-02-19 20:59:06 -010059C00BED4000,"Darius Cozmic Collection Special Edition",,playable,2022-07-22 16:26:50 -010015800F93C000,"Dariusburst - Another Chronicle EX+",online,playable,2021-04-05 14:21:43 -01003D301357A000,"Dark Arcana: The Carnival",gpu;slow,ingame,2022-02-19 08:52:28 -010083A00BF6C000,"Dark Devotion",nvdec,playable,2022-08-09 09:41:18 -0100BFF00D5AE000,"Dark Quest 2",,playable,2020-11-16 21:34:52 -01004AB00A260000,"DARK SOULS™: REMASTERED",gpu;nvdec;online-broken,ingame,2024-04-09 19:47:58 -01001FA0034E2000,"Dark Witch Music Episode: Rudymical",,playable,2020-05-22 09:44:44 -01008F1008DA6000,"Darkest Dungeon",nvdec,playable,2022-07-22 18:49:18 -0100F2300D4BA000,"Darksiders Genesis",nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25 -010071800BA98000,"Darksiders II Deathinitive Edition",gpu;nvdec;online-broken,ingame,2024-06-26 00:37:25 -0100E1400BA96000,"Darksiders Warmastered Edition",nvdec,playable,2023-03-02 18:08:09 -010033500B7B6000,"Darkwood",,playable,2021-01-08 21:24:06 -0100440012FFA000,"DARQ Complete Edition",audout,playable,2021-04-07 15:26:21 -0100BA500B660000,"Darts Up",,playable,2021-04-14 17:22:22 -0100F0B0081DA000,"Dawn of the Breakers",online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03 -0100FCF00F6CC000,"Day and Night",,playable,2020-12-17 12:30:51 -0100D0A009310000,"de Blob",nvdec,playable,2021-01-06 17:34:46 -010034E00A114000,"de Blob 2",nvdec,playable,2021-01-06 13:00:16 -01008E900471E000,"De Mambo",,playable,2021-04-10 12:39:40 -01004C400CF96000,"Dead by Daylight",nvdec;online-broken;UE4,boots,2022-09-13 14:32:13 -0100646009FBE000,"Dead Cells",,playable,2021-09-22 22:18:49 -01004C500BD40000,"Dead End Job",nvdec,playable,2022-09-19 12:48:44 -01009CC00C97C000,"DEAD OR ALIVE Xtreme 3 Scarlet",,playable,2022-07-23 17:05:06 -0100A5000F7AA000,"DEAD OR SCHOOL",nvdec,playable,2022-09-06 12:04:09 -0100A24011F52000,"Dead Z Meat",UE4;services,ingame,2021-04-14 16:50:16 -010095A011A14000,"Deadly Days",,playable,2020-11-27 13:38:55 -0100BAC011928000,"Deadly Premonition 2: A Blessing In Disguise",,playable,2021-06-15 14:12:36 -0100EBE00F22E000,"Deadly Premonition Origins",32-bit;nvdec,playable,2024-03-25 12:47:46 -,"Dear Magi - Mahou Shounen Gakka -",,playable,2020-11-22 16:45:16 -01000D60126B6000,"Death and Taxes",,playable,2020-12-15 20:27:49 -010012B011AB2000,"Death Come True",nvdec,playable,2021-06-10 22:30:49 -0100F3B00CF32000,"Death Coming",crash,nothing,2022-02-06 07:43:03 -0100AEC013DDA000,"Death end re;Quest",,playable,2023-07-09 12:19:54 -0100423009358000,"Death Road to Canada",gpu;audio;32-bit;crash,nothing,2023-06-28 15:39:26 -010085900337E000,"Death Squared",,playable,2020-12-04 13:00:15 -0100A51013550000,"Death Tales",,playable,2020-12-17 10:55:52 -0100492011A8A000,"Death's Hangover",gpu,boots,2023-08-01 22:38:06 -01009120119B4000,"Deathsmiles I・II",,playable,2024-04-08 19:29:00 -010034F00BFC8000,"Debris Infinity",nvdec;online,playable,2021-05-28 12:14:39 -010027700FD2E000,"Decay of Logos",nvdec,playable,2022-09-13 14:42:13 -01002CC0062B8000,"DEEMO",,playable,2022-07-24 11:34:33 -01008B10132A2000,"DEEMO -Reborn-",nvdec;online-broken,playable,2022-10-17 15:18:11 -010026800FA88000,"Deep Diving Adventures",,playable,2022-09-22 16:43:37 -0100FAF009562000,"Deep Ones",services,nothing,2020-04-03 02:54:19 -0100C3E00D68E000,"Deep Sky Derelicts: Definitive Edition",,playable,2022-09-27 11:21:08 -01000A700F956000,"Deep Space Rush",,playable,2020-07-07 23:30:33 -0100961011BE6000,"DeepOne",services-horizon;Needs Update,nothing,2024-01-18 15:01:05 -01008BB00F824000,"Defenders of Ekron: Definitive Edition",,playable,2021-06-11 16:31:03 -0100CDE0136E6000,"Defentron",,playable,2022-10-17 15:47:56 -010039300BDB2000,"Defunct",,playable,2021-01-08 21:33:46 -010067900B9C4000,"Degrees of Separation",,playable,2021-01-10 13:40:04 -010071C00CBA4000,"Dei Gratia no Rashinban",crash,nothing,2021-07-13 02:25:32 -010092E00E7F4000,"Deleveled",slow,playable,2020-12-15 21:02:29 -010023800D64A000,"DELTARUNE Chapter 1&2",,playable,2023-01-22 04:47:44 -010038B01D2CA000,"Dementium: The Ward",crash,boots,2024-09-02 08:28:14 -0100AB600ACB4000,"Demetrios - The BIG Cynical Adventure",,playable,2021-06-04 12:01:01 -010099D00D1A4000,"Demolish & Build 2018",,playable,2021-06-13 15:27:26 -010084600F51C000,"Demon Pit",nvdec,playable,2022-09-19 13:35:15 -0100309016E7A000,"Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",UE4,playable,2024-08-08 04:51:49 -0100A2B00BD88000,"Demon's Crystals",crash;regression,nothing,2022-12-07 16:33:17 -0100E29013818000,"Demon's Rise - Lords of Chaos",,playable,2021-04-06 16:20:06 -0100C3501094E000,"Demon's Rise - War for the Deep",,playable,2020-07-29 12:26:27 -0100161011458000,"Demon's Tier+",,playable,2021-06-09 17:25:36 -0100BE800E6D8000,"DEMON'S TILT",,playable,2022-09-19 13:22:46 -010000401313A000,"Demong Hunter",,playable,2020-12-12 15:27:08 -0100BC501355A000,"Densha de go!! Hashirou Yamanote Sen",nvdec;UE4,playable,2023-11-09 07:47:58 -0100C9100FAE2000,"Depixtion",,playable,2020-10-10 18:52:37 -01000BF00B6BC000,"Deployment",slow;online-broken,playable,2022-10-17 16:23:59 -010023600C704000,"Deponia",nvdec,playable,2021-01-26 17:17:19 -0100ED700469A000,"Deru - The Art of Cooperation",,playable,2021-01-07 16:59:59 -0100D4600D0E4000,"Descenders",gpu,ingame,2020-12-10 15:22:36 -,"Desire remaster ver.",crash,boots,2021-01-17 02:34:37 -010069500DD86000,"Destiny Connect: Tick-Tock Travelers",UE4;gpu;nvdec,ingame,2020-12-16 12:20:36 -01008BB011ED6000,"Destrobots",,playable,2021-03-06 14:37:05 -01009E701356A000,"Destroy All Humans!",gpu;nvdec;UE4,ingame,2023-01-14 22:23:53 -010030600E65A000,"Detective Dolittle",,playable,2021-03-02 14:03:59 -01009C0009842000,"Detective Gallo",nvdec,playable,2022-07-24 11:51:04 -,"Detective Jinguji Saburo Prism of Eyes",,playable,2020-10-02 21:54:41 -010007500F27C000,"Detective Pikachu™ Returns",,playable,2023-10-07 10:24:59 -010031B00CF66000,"Devil Engine",,playable,2021-06-04 11:54:30 -01002F000E8F2000,"Devil Kingdom",,playable,2023-01-31 08:58:44 -0100E8000D5B8000,"Devil May Cry",nvdec,playable,2021-01-04 19:43:08 -01007CF00D5BA000,"Devil May Cry 2",nvdec,playable,2023-01-24 23:03:20 -01007B600D5BC000,"Devil May Cry 3 Special Edition",nvdec,playable,2024-07-08 12:33:23 -01003C900EFF6000,"Devil Slayer Raksasi",,playable,2022-10-26 19:42:32 -01009EA00A320000,"Devious Dungeon",,playable,2021-03-04 13:03:06 -01003F601025E000,"Dex",nvdec,playable,2020-08-12 16:48:12 -010044000CBCA000,"Dexteritrip",,playable,2021-01-06 12:51:12 -0100AFC00E06A000,"Dezatopia",online,playable,2021-06-15 21:06:11 -01001B300B9BE000,"Diablo III: Eternal Collection",online-broken;ldn-works,playable,2023-08-21 23:48:03 -0100726014352000,"Diablo® II: Resurrected™",gpu;nvdec,ingame,2023-08-18 18:42:47 -0100F73011456000,"Diabolic",,playable,2021-06-11 14:45:08 -010027400BD24000,"DIABOLIK LOVERS CHAOS LINEAGE",gpu;Needs Update,ingame,2023-06-08 02:20:44 -0100BBF011394000,"Dicey Dungeons",gpu;audio;slow,ingame,2023-08-02 20:30:12 -0100D98005E8C000,"Die for Valhalla!",,playable,2021-01-06 16:09:14 -0100BB900B5B4000,"Dies irae Amantes amentes For Nintendo Switch",32-bit;crash,nothing,2022-02-16 07:09:05 -0100A5A00DBB0000,"Dig Dog",gpu,ingame,2021-06-02 17:17:51 -01004DE011076000,"Digerati Indie Darling Bundle Vol. 3",,playable,2022-10-02 13:01:57 -010035D0121EC000,"Digerati Presents: The Dungeon Crawl Vol. 1",slow,ingame,2021-04-18 14:04:55 -010014E00DB56000,"Digimon Story Cyber Sleuth: Complete Edition",nvdec;opengl,playable,2022-09-13 15:02:37 -0100F00014254000,"Digimon World: Next Order",,playable,2023-05-09 20:41:06 -0100B6D00DA6E000,"Ding Dong XL",,playable,2020-07-14 16:13:19 -01002E4011924000,"Dininho Adventures",,playable,2020-10-03 17:25:51 -010027E0158A6000,"Dininho Space Adventure",,playable,2023-01-14 22:43:04 -0100A8A013DA4000,"Dirt Bike Insanity",,playable,2021-01-31 13:27:38 -01004CB01378A000,"Dirt Trackin Sprint Cars",nvdec;online-broken,playable,2022-10-17 16:34:56 -0100918014B02000,"Disagaea 6: Defiance of Destiny Demo",demo,playable,2022-10-26 20:02:04 -010020700E2A2000,"Disaster Report 4: Summer Memories",nvdec;UE4,playable,2022-09-27 19:41:31 -0100510004D2C000,"Disc Jam",UE4;ldn-untested;nvdec;online,playable,2021-04-08 16:40:35 -0100C81004780000,"Disco Dodgeball - REMIX",online,playable,2020-09-28 23:24:49 -01004B100AF18000,"Disgaea 1 Complete",,playable,2023-01-30 21:45:23 -0100A9800E9B4000,"Disgaea 4 Complete+",gpu;slow,playable,2020-02-18 10:54:28 -010068C00F324000,"Disgaea 4 Complete+ Demo",nvdec,playable,2022-09-13 15:21:59 -01005700031AE000,"Disgaea 5 Complete",nvdec,playable,2021-03-04 15:32:54 -0100ABC013136000,"Disgaea 6: Defiance of Destiny",deadlock,ingame,2023-04-15 00:50:32 -0100307011D80000,"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",,playable,2021-06-08 13:20:33 -01005EE013888000,"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",gpu;demo,ingame,2022-12-06 15:27:59 -01000B70122A2000,"Disjunction",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24 -0100A2F00EEFC000,"Disney Classic Games Collection",online-broken,playable,2022-09-13 15:44:17 -0100DA201EBF8000,"Disney Epic Mickey: Rebrushed",crash,ingame,2024-09-26 22:11:51 -0100F0401435E000,"Disney Speedstorm",services,boots,2023-11-27 02:15:32 -010012800EBAE000,"Disney TSUM TSUM FESTIVAL",crash,menus,2020-07-14 14:05:28 -01009740120FE000,"DISTRAINT 2",,playable,2020-09-03 16:08:12 -010075B004DD2000,"DISTRAINT: Deluxe Edition",,playable,2020-06-15 23:42:24 -010027400CDC6000,"Divinity: Original Sin 2 - Definitive Edition",services;crash;online-broken;regression,menus,2023-08-13 17:20:03 -01001770115C8000,"Dodo Peak",nvdec;UE4,playable,2022-10-04 16:13:05 -010077B0100DA000,"Dogurai",,playable,2020-10-04 02:40:16 -010048100D51A000,"Dokapon Up! Mugen no Roulette",gpu;Needs Update,menus,2022-12-08 19:39:10 -01005EE00BC78000,"Dokuro (ドクロ)",nvdec,playable,2020-12-17 14:47:09 -010007200AC0E000,"Don't Die, Mr Robot!",nvdec,playable,2022-09-02 18:34:38 -0100E470067A8000,"Don't Knock Twice",,playable,2024-05-08 22:37:58 -0100C4D00B608000,"Don't Sink",gpu,ingame,2021-02-26 15:41:11 -0100751007ADA000,"Don't Starve: Nintendo Switch Edition",nvdec,playable,2022-02-05 20:43:34 -010088B010DD2000,"Dongo Adventure",,playable,2022-10-04 16:22:26 -0100C1F0051B6000,"Donkey Kong Country™: Tropical Freeze",,playable,2024-08-05 16:46:10 -0100F2C00F060000,"Doodle Derby",,boots,2020-12-04 22:51:48 -0100416004C00000,"DOOM",gpu;slow;nvdec;online-broken,ingame,2024-09-23 15:40:07 -010018900DD00000,"DOOM (1993)",nvdec;online-broken,menus,2022-09-06 13:32:19 -01008CB01E52E000,"DOOM + DOOM II",opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01 -010029D00E740000,"DOOM 3",crash,menus,2024-08-03 05:25:47 -01005D700E742000,"DOOM 64",nvdec;vulkan,playable,2020-10-13 23:47:28 -0100D4F00DD02000,"DOOM II (Classic)",nvdec;online,playable,2021-06-03 20:10:01 -0100B1A00D8CE000,"DOOM® Eternal",gpu;slow;nvdec;online-broken,ingame,2024-08-28 15:57:17 -01005ED00CD70000,"Door Kickers: Action Squad",online-broken;ldn-broken,playable,2022-09-13 16:28:53 -010073700E412000,"DORAEMON STORY OF SEASONS",nvdec,playable,2020-07-13 20:28:11 -0100F7300BD8E000,"Double Cross",,playable,2021-01-07 15:34:22 -0100B1500E9F2000,"Double Dragon & Kunio-kun: Retro Brawler Bundle",,playable,2020-09-01 12:48:46 -01001AD00E49A000,"DOUBLE DRAGON Ⅲ: The Sacred Stones",online,playable,2021-06-11 15:41:44 -01005B10132B2000,"Double Dragon Neon",gpu;audio;32-bit,ingame,2022-09-20 18:00:20 -01000F400C1A4000,"Double Kick Heroes",gpu,ingame,2020-10-03 14:33:59 -0100A5D00C7C0000,"Double Pug Switch",nvdec,playable,2022-10-10 10:59:35 -0100FC000EE10000,"Double Switch - 25th Anniversary Edition",nvdec,playable,2022-09-19 13:41:50 -0100B6600FE06000,"Down to Hell",gpu;nvdec,ingame,2022-09-19 14:01:26 -010093D00C726000,"Downwell",,playable,2021-04-25 20:05:24 -0100ED000D390000,"Dr Kawashima's Brain Training",services,ingame,2023-06-04 00:06:46 -01001B80099F6000,"Dracula's Legacy",nvdec,playable,2020-12-10 13:24:25 -0100566009238000,"DragoDino",gpu;nvdec,ingame,2020-08-03 20:49:16 -0100DBC00BD5A000,"Dragon Audit",crash,ingame,2021-05-16 14:24:46 -0100A250097F0000,"DRAGON BALL FighterZ",UE4;ldn-broken;nvdec;online,playable,2021-06-11 16:19:04 -010078D000F88000,"DRAGON BALL XENOVERSE 2 for Nintendo Switch",gpu;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01 -010051C0134F8000,"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",vulkan-backend-bug,playable,2024-08-28 00:03:50 -010099B00A2DC000,"Dragon Blaze for Nintendo Switch",32-bit,playable,2020-10-14 11:11:28 -010089700150E000,"Dragon Marked for Death: Advanced Attackers",ldn-untested;audout,playable,2022-03-10 06:44:34 -0100EFC00EFB2000,"DRAGON QUEST",gpu,boots,2021-11-09 03:31:32 -010008900705C000,"Dragon Quest Builders™",gpu;nvdec,ingame,2023-08-14 09:54:36 -010042000A986000,"DRAGON QUEST BUILDERS™ 2",,playable,2024-04-19 16:36:38 -0100CD3000BDC000,"Dragon Quest Heroes I + II (JP)",nvdec,playable,2021-04-08 14:27:16 -010062200EFB4000,"DRAGON QUEST II: Luminaries of the Legendary Line",,playable,2022-09-13 16:44:11 -01003E601E324000,"DRAGON QUEST III HD-2D Remake",vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27 -010015600EFB6000,"DRAGON QUEST III: The Seeds of Salvation",gpu,boots,2021-11-09 03:38:34 -0100A77018EA0000,"DRAGON QUEST MONSTERS: The Dark Prince",,playable,2023-12-29 16:10:05 -0100217014266000,"Dragon Quest Treasures",gpu;UE4,ingame,2023-05-09 11:16:52 -0100E2E0152E4000,"Dragon Quest X Awakening Five Races Offline",nvdec;UE4,playable,2024-08-20 10:04:24 -01006C300E9F0000,"DRAGON QUEST® XI S: Echoes of an Elusive Age – Definitive Edition",UE4,playable,2021-11-27 12:27:11 -010032C00AC58000,"Dragon's Dogma: Dark Arisen",,playable,2022-07-24 12:58:33 -010027100C544000,"Dragon's Lair Trilogy",nvdec,playable,2021-01-13 22:12:07 -0100DA0006F50000,"DragonFangZ - The Rose & Dungeon of Time",,playable,2020-09-28 21:35:18 -0100F7800A434000,"Drawful 2",,ingame,2022-07-24 13:50:21 -0100B7E0102E4000,"Drawngeon: Dungeons of Ink and Paper",gpu,ingame,2022-09-19 15:41:25 -01008B20129F2000,"Dream",,playable,2020-12-15 19:55:07 -01000AA0093DC000,"Dream Alone",nvdec,playable,2021-01-27 19:41:50 -010034D00F330000,"DreamBall",UE4;crash;gpu,ingame,2020-08-05 14:45:25 -010058B00F3C0000,"Dreaming Canvas",UE4;gpu,ingame,2021-06-13 22:50:07 -0100D24013466000,"DREAMO",UE4,playable,2022-10-17 18:25:28 -0100ED200B6FC000,"DreamWorks Dragons Dawn of New Riders",nvdec,playable,2021-01-27 20:05:26 -0100236011B4C000,"DreamWorks Spirit Lucky’s Big Adventure",,playable,2022-10-27 13:30:52 -010058C00A916000,"Drone Fight",,playable,2022-07-24 14:31:56 -010052000A574000,"Drowning",,playable,2022-07-25 14:28:26 -0100652012F58000,"Drums",,playable,2020-12-17 17:21:51 -01005BC012C66000,"Duck Life Adventure",,playable,2022-10-10 11:27:03 -01007EF00CB88000,"Duke Nukem 3D: 20th Anniversary World Tour",32-bit;ldn-untested,playable,2022-08-19 22:22:40 -010068D0141F2000,"Dull Grey",,playable,2022-10-27 13:40:38 -0100926013600000,"Dungeon Nightmares 1 + 2 Collection",,playable,2022-10-17 18:54:22 -010034300F0E2000,"Dungeon of the Endless",nvdec,playable,2021-05-27 19:16:26 -0100E79009A94000,"Dungeon Stars",,playable,2021-01-18 14:28:37 -0100BE801360E000,"Dungeons & Bombs",,playable,2021-04-06 12:46:22 -0100EC30140B6000,"Dunk Lords",,playable,2024-06-26 00:07:26 -010011C00E636000,"Dusk Diver",crash;UE4,boots,2021-11-06 09:01:30 -0100B6E00A420000,"Dust: An Elysian Tail",,playable,2022-07-25 15:28:12 -0100D7E012F2E000,"Dustoff Z",,playable,2020-12-04 23:22:29 -01008C8012920000,"Dying Light: Definitive Edition",services-horizon,boots,2024-03-11 10:43:32 -01007DD00DFDE000,"Dyna Bomb",,playable,2020-06-07 13:26:55 -0100E9A00CB30000,"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",nvdec,playable,2024-06-26 00:16:30 -010008900BC5A000,"DYSMANTLE",gpu,ingame,2024-07-15 16:24:12 -010054E01D878000,"EA SPORTS FC 25",crash,ingame,2024-09-25 21:07:50 -0100BDB01A0E6000,"EA SPORTS FC™ 24",,boots,2023-10-04 18:32:59 -01001C8016B4E000,"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",gpu;crash,ingame,2024-06-10 23:33:05 -01005DE00D05C000,"EA SPORTS™ FIFA 20 Nintendo Switch™ Legacy Edition",gpu;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20 -010037400C7DA000,"Eagle Island Twist",,playable,2021-04-10 13:15:42 -0100B9E012992000,"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",UE4,playable,2022-12-07 12:59:16 -0100298014030000,"Earth Defense Force: World Brothers",UE4,playable,2022-10-27 14:13:31 -01009B7006C88000,"EARTH WARS",,playable,2021-06-05 11:18:33 -0100DFC00E472000,"Earthfall: Alien Horde",nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37 -01006E50042EA000,"EARTHLOCK",,playable,2021-06-05 11:51:02 -0100A2E00BB0C000,"EarthNight",,playable,2022-09-19 21:02:20 -0100DCE00B756000,"Earthworms",,playable,2022-07-25 16:28:55 -0100E3500BD84000,"Earthworms Demo",,playable,2021-01-05 16:57:11 -0100ECF01800C000,"Easy Come Easy Golf",online-broken;regression,playable,2024-04-04 16:15:00 -0100A9B009678000,"EAT BEAT DEADSPIKE-san",audio;Needs Update,playable,2022-12-02 19:25:29 -0100BCA016636000,"eBaseball Powerful Pro Yakyuu 2022",gpu;services-horizon;crash,nothing,2024-05-26 23:07:19 -01001F20100B8000,"Eclipse: Edge of Light",,playable,2020-08-11 23:06:29 -0100E0A0110F4000,"eCrossminton",,playable,2020-07-11 18:24:27 -0100ABE00DB4E000,"Edna & Harvey: Harvey's New Eyes",nvdec,playable,2021-01-26 14:36:08 -01004F000B716000,"Edna & Harvey: The Breakout – Anniversary Edition",crash;nvdec,ingame,2022-08-01 16:59:56 -01002550129F0000,"Effie",,playable,2022-10-27 14:36:39 -0100CC0010A46000,"Ego Protocol: Remastered",nvdec,playable,2020-12-16 20:16:35 -,"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",,playable,2020-11-12 00:11:50 -01003AD013BD2000,"Eight Dragons",nvdec,playable,2022-10-27 14:47:28 -010020A01209C000,"El Hijo - A Wild West Tale",nvdec,playable,2021-04-19 17:44:08 -0100B5B00EF38000,"Elden: Path of the Forgotten",,playable,2020-12-15 00:33:19 -010068F012880000,"Eldrador® Creatures",slow,playable,2020-12-12 12:35:35 -010008E010012000,"ELEA: Paradigm Shift",UE4;crash,nothing,2020-10-04 19:07:43 -0100A6700AF10000,"Element",,playable,2022-07-25 17:17:16 -0100128003A24000,"Elliot Quest",,playable,2022-07-25 17:46:14 -010041A00FEC6000,"Ember",nvdec,playable,2022-09-19 21:16:11 -010071B012940000,"Embracelet",,playable,2020-12-04 23:45:00 -010017B0102A8000,"Emma: Lost in Memories",nvdec,playable,2021-01-28 16:19:10 -010068300E08E000,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo -",gpu;nvdec,ingame,2022-11-20 16:18:45 -01007A4008486000,"Enchanting Mahjong Match",gpu,ingame,2020-04-17 22:01:31 -01004F3011F92000,"Endless Fables: Dark Moor",gpu;nvdec,ingame,2021-03-07 15:31:03 -010067B017588000,"Endless Ocean™ Luminous",services-horizon;crash,ingame,2024-05-30 02:05:57 -0100B8700BD14000,"Energy Cycle Edge",services,ingame,2021-11-30 05:02:31 -0100A8E0090B0000,"Energy Invasion",,playable,2021-01-14 21:32:26 -0100C6200A0AA000,"Enigmatis 2: The Mists of Ravenwood",crash;regression,boots,2021-06-06 15:15:30 -01009D60076F6000,"Enter the Gungeon",,playable,2022-07-25 20:28:33 -0100262009626000,"Epic Loon",nvdec,playable,2022-07-25 22:06:13 -01000FA0149B6000,"EQI",nvdec;UE4,playable,2022-10-27 16:42:32 -0100E95010058000,"EQQO",UE4;nvdec,playable,2021-06-13 23:10:51 -01000E8010A98000,"Escape First",,playable,2020-10-20 22:46:53 -010021201296A000,"Escape First 2",,playable,2021-03-24 11:59:41 -0100FEF00F0AA000,"Escape from Chernobyl",crash,boots,2022-09-19 21:36:58 -010023E013244000,"Escape from Life Inc",,playable,2021-04-19 17:34:09 -010092901203A000,"Escape From Tethys",,playable,2020-10-14 22:38:25 -0100B0F011A84000,"Escape Game Fort Boyard",,playable,2020-07-12 12:45:43 -0100F9600E746000,"ESP Ra.De. Psi",audio;slow,ingame,2024-03-07 15:05:08 -010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;crash;Needs More Attention,ingame,2024-04-29 05:34:14 -01004F9012FD8000,"Estranged: The Departure",nvdec;UE4,playable,2022-10-24 10:37:58 -0100CB900B498000,"Eternum Ex",,playable,2021-01-13 20:28:32 -010092501EB2C000,"Europa (Demo)",gpu;crash;UE4,ingame,2024-04-23 10:47:12 -01007BE0160D6000,"EVE ghost enemies",gpu,ingame,2023-01-14 03:13:30 -010095E01581C000,"even if TEMPEST",gpu,ingame,2023-06-22 23:50:25 -010072C010002000,"Event Horizon: Space Defense",,playable,2020-07-31 20:31:24 -0100DCF0093EC000,"Everspace™ - Stellar Edition",UE4,playable,2022-08-14 01:16:24 -01006F900BF8E000,"Everybody 1-2-Switch!™",services;deadlock,nothing,2023-07-01 05:52:55 -010080600B53E000,"Evil Defenders",nvdec,playable,2020-09-28 17:11:00 -01006A800FA22000,"Evolution Board Game",online,playable,2021-01-20 22:37:56 -0100F2D00C7DE000,"Exception",online-broken,playable,2022-09-20 12:47:10 -0100DD30110CC000,"Exit the Gungeon",,playable,2022-09-22 17:04:43 -0100A82013976000,"Exodemon",,playable,2022-10-27 20:17:52 -0100FA800A1F4000,"EXORDER",nvdec,playable,2021-04-15 14:17:20 -01009B7010B42000,"Explosive Jake",crash,boots,2021-11-03 07:48:32 -0100EFE00A3C2000,"Eyes: The Horror Game",,playable,2021-01-20 21:59:46 -0100E3D0103CE000,"Fable of Fairy Stones",,playable,2021-05-05 21:04:54 -01004200189F4000,"Factorio",deadlock,boots,2024-06-11 19:26:16 -010073F0189B6000,"Fae Farm",,playable,2024-08-25 15:12:12 -010069100DB08000,"Faeria",nvdec;online-broken,menus,2022-10-04 16:44:41 -01008A6009758000,"Fairune Collection",,playable,2021-06-06 15:29:56 -0100F6D00B8F2000,"Fairy Fencer F™: Advent Dark Force",32-bit;crash;nvdec,ingame,2023-04-16 03:53:48 -0100CF900FA3E000,"FAIRY TAIL",nvdec,playable,2022-10-04 23:00:32 -01005A600BE60000,"Fall of Light: Darkest Edition",slow;nvdec,ingame,2024-07-24 04:19:26 -0100AA801258C000,"Fallen Legion Revenants",crash,menus,2021-11-25 08:53:20 -0100D670126F6000,"Famicom Detective Club™: The Girl Who Stands Behind",nvdec,playable,2022-10-27 20:41:40 -010033F0126F4000,"Famicom Detective Club™: The Missing Heir",nvdec,playable,2022-10-27 20:56:23 -010060200FC44000,"Family Feud®",online-broken,playable,2022-10-10 11:42:21 -0100034012606000,"Family Mysteries: Poisonous Promises",audio;crash,menus,2021-11-26 12:35:06 -010017C012726000,"Fantasy Friends",,playable,2022-10-17 19:42:39 -0100767008502000,"FANTASY HERO ~unsigned legacy~",,playable,2022-07-26 12:28:52 -0100944003820000,"Fantasy Strike",online,playable,2021-02-27 01:59:18 -01000E2012F6E000,"Fantasy Tavern Sextet -Vol.1 New World Days-",gpu;crash;Needs Update,ingame,2022-12-05 16:48:00 -01005C10136CA000,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;crash,ingame,2021-11-06 02:57:29 -010022700E7D6000,"FAR: Lone Sails",,playable,2022-09-06 16:33:05 -0100C9E00FD62000,"Farabel",,playable,2020-08-03 17:47:28 -,"Farm Expert 2019 for Nintendo Switch",,playable,2020-07-09 21:42:57 -01000E400ED98000,"Farm Mystery",nvdec,playable,2022-09-06 16:46:47 -010086B00BB50000,"Farm Together",,playable,2021-01-19 20:01:19 -0100EB600E914000,"Farming Simulator 20",nvdec,playable,2021-06-13 10:52:44 -0100D04004176000,"Farming Simulator Nintendo Switch Edition",nvdec,playable,2021-01-19 14:46:44 -0100E99019B3A000,"Fashion Dreamer",,playable,2023-11-12 06:42:52 -01009510001CA000,"FAST RMX",slow;crash;ldn-partial,ingame,2024-06-22 20:48:58 -0100BEB015604000,"FATAL FRAME: Maiden of Black Water",,playable,2023-07-05 16:01:40 -0100DAE019110000,"FATAL FRAME: Mask of the Lunar Eclipse",Incomplete,playable,2024-04-11 06:01:30 -010051400B17A000,"Fate/EXTELLA LINK",ldn-untested;nvdec,playable,2021-01-27 00:45:50 -010053E002EA2000,"Fate/EXTELLA: The Umbral Star",gpu;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55 -0100F6200B7D4000,"fault - milestone one",nvdec,playable,2021-03-24 10:41:49 -01005AC0068F6000,"Fear Effect Sedna",nvdec,playable,2021-01-19 13:10:33 -0100F5501CE12000,"Fearmonium",crash,boots,2024-03-06 11:26:11 -0100E4300CB3E000,"Feather",,playable,2021-06-03 14:11:27 -010003B00D3A2000,"Felix The Reaper",nvdec,playable,2020-10-20 23:43:03 -0100AA3009738000,"Feudal Alloy",,playable,2021-01-14 08:48:14 -01008D900B984000,"FEZ",gpu,ingame,2021-04-18 17:10:16 -01007510040E8000,"FIA European Truck Racing Championship",nvdec,playable,2022-09-06 17:51:59 -0100F7B002340000,"FIFA 18",gpu;online-broken;ldn-untested,ingame,2022-07-26 12:43:59 -0100FFA0093E8000,"FIFA 19",gpu;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07 -01000A001171A000,"FIFA 21 Nintendo Switch™ Legacy Edition",gpu;online-broken,ingame,2023-12-11 22:10:19 -0100216014472000,"FIFA 22 Nintendo Switch™ Legacy Edition",gpu,ingame,2024-03-02 14:13:48 -01006980127F0000,"Fight Crab",online-broken;ldn-untested,playable,2022-10-05 10:24:04 -010047E010B3E000,"Fight of Animals",online,playable,2020-10-15 15:08:28 -0100C7D00E730000,"Fight'N Rage",,playable,2020-06-16 23:35:19 -0100D02014048000,"FIGHTING EX LAYER ANOTHER DASH",online-broken;UE4,playable,2024-04-07 10:22:33 -0100118009C68000,"Figment",nvdec,playable,2021-01-27 19:36:05 -010095600AA36000,"Fill-a-Pix: Phil's Epic Adventure",,playable,2020-12-22 13:48:22 -0100C3A00BB76000,"Fimbul",nvdec,playable,2022-07-26 13:31:47 -0100C8200E942000,"Fin and the Ancient Mystery",nvdec,playable,2020-12-17 16:40:39 -01000EA014150000,"FINAL FANTASY",crash,nothing,2024-09-05 20:55:30 -01006B7014156000,"FINAL FANTASY II",crash,nothing,2024-04-13 19:18:04 -01006F000B056000,"FINAL FANTASY IX",audout;nvdec,playable,2021-06-05 11:35:00 -0100AA201415C000,"FINAL FANTASY V",,playable,2023-04-26 01:11:55 -0100A5B00BDC6000,"FINAL FANTASY VII",,playable,2022-12-09 17:03:30 -01008B900DC0A000,"FINAL FANTASY VIII Remastered",nvdec,playable,2023-02-15 10:57:48 -0100BC300CB48000,"FINAL FANTASY X/X-2 HD Remaster",gpu,ingame,2022-08-16 20:29:26 -0100EB100AB42000,"FINAL FANTASY XII THE ZODIAC AGE",opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54 -010068F00AA78000,"FINAL FANTASY XV POCKET EDITION HD",,playable,2021-01-05 17:52:08 -0100CE4010AAC000,"FINAL FANTASY® CRYSTAL CHRONICLES™ Remastered Edition",,playable,2023-04-02 23:39:12 -01001BA00AE4E000,"Final Light, The Prison",,playable,2020-07-31 21:48:44 -0100FF100FB68000,"Finding Teddy 2 : Definitive Edition",gpu,ingame,2024-04-19 16:51:33 -0100F4E013AAE000,"Fire & Water",,playable,2020-12-15 15:43:20 -0100F15003E64000,"Fire Emblem Warriors",nvdec,playable,2023-05-10 01:53:10 -010071F0143EA000,"Fire Emblem Warriors: Three Hopes",gpu;nvdec,ingame,2024-05-01 07:07:42 -0100A6301214E000,"Fire Emblem™ Engage",amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26 -0100A12011CC8000,"Fire Emblem™: Shadow Dragon & the Blade of Light",,playable,2022-10-17 19:49:14 -010055D009F78000,"Fire Emblem™: Three Houses",online-broken,playable,2024-09-14 23:53:50 -010025C014798000,"Fire: Ungh’s Quest",nvdec,playable,2022-10-27 21:41:26 -0100434003C58000,"Firefighters – The Simulation",,playable,2021-02-19 13:32:05 -0100BB1009E50000,"Firefighters: Airport Fire Department",,playable,2021-02-15 19:17:00 -0100AC300919A000,"Firewatch",,playable,2021-06-03 10:56:38 -0100BA9012B36000,"Firework",,playable,2020-12-04 20:20:09 -0100DEB00ACE2000,"Fishing Star World Tour",,playable,2022-09-13 19:08:51 -010069800D292000,"Fishing Universe Simulator",,playable,2021-04-15 14:00:43 -0100807008868000,"Fit Boxing",,playable,2022-07-26 19:24:55 -0100E7300AAD4000,"Fitness Boxing",,playable,2021-04-14 20:33:33 -0100073011382000,"Fitness Boxing 2: Rhythm & Exercise",crash,ingame,2021-04-14 20:40:48 -0100C7E0134BE000,"Five Dates",nvdec,playable,2020-12-11 15:17:11 -0100B6200D8D2000,"Five Nights at Freddy's",,playable,2022-09-13 19:26:36 -01004EB00E43A000,"Five Nights at Freddy's 2",,playable,2023-02-08 15:48:24 -010056100E43C000,"Five Nights at Freddy's 3",,playable,2022-09-13 20:58:07 -010083800E43E000,"Five Nights at Freddy's 4",,playable,2023-08-19 07:28:03 -0100F7901118C000,"Five Nights at Freddy's: Help Wanted",UE4,playable,2022-09-29 12:40:09 -01009060193C4000,"Five Nights at Freddy's: Security Breach",gpu;crash;mac-bug,ingame,2023-04-23 22:33:28 -01003B200E440000,"Five Nights at Freddy's: Sister Location",,playable,2023-10-06 09:00:58 -010038200E088000,"Flan",crash;regression,ingame,2021-11-17 07:39:28 -01000A0004C50000,"FLASHBACK™",nvdec,playable,2020-05-14 13:57:29 -0100C53004C52000,"Flat Heroes",gpu,ingame,2022-07-26 19:37:37 -0100B54012798000,"Flatland: Prologue",,playable,2020-12-11 20:41:12 -0100307004B4C000,"Flinthook",online,playable,2021-03-25 20:42:29 -010095A004040000,"Flip Wars",services;ldn-untested,ingame,2022-05-02 15:39:18 -01009FB002B2E000,"Flipping Death",,playable,2021-02-17 16:12:30 -0100D1700ACFC000,"Flood of Light",,playable,2020-05-15 14:15:25 -0100DF9005E7A000,"Floor Kids",nvdec,playable,2024-08-18 19:38:49 -010040700E8FC000,"Florence",,playable,2020-09-05 01:22:30 -0100F5D00CD58000,"Flowlines VS",,playable,2020-12-17 17:01:53 -010039C00E2CE000,"Flux8",nvdec,playable,2020-06-19 20:55:11 -0100EDA00BBBE000,"Fly O'Clock",,playable,2020-05-17 13:39:52 -0100FC300F4A4000,"Fly Punch Boom!",online,playable,2020-06-21 12:06:11 -0100419013A8A000,"Flying Hero X",crash,menus,2021-11-17 07:46:58 -010056000BA1C000,"Fobia",,playable,2020-12-14 21:05:23 -0100F3900D0F0000,"Food Truck Tycoon",,playable,2022-10-17 20:15:55 -01007CF013152000,"Football Manager 2021 Touch",gpu,ingame,2022-10-17 20:08:23 -0100EDC01990E000,"Football Manager 2023 Touch",gpu,ingame,2023-08-01 03:40:53 -010097F0099B4000,"Football Manager Touch 2018",,playable,2022-07-26 20:17:56 -010069400B6BE000,"For The King",nvdec,playable,2021-02-15 18:51:44 -01001D200BCC4000,"Forager",crash,menus,2021-11-24 07:10:17 -0100AE001256E000,"FORECLOSED",crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12 -010044B00E70A000,"Foregone",deadlock,ingame,2020-12-17 15:26:53 -010059E00B93C000,"Forgotton Anne",nvdec,playable,2021-02-15 18:28:07 -01008EA00405C000,"forma.8",nvdec,playable,2020-11-15 01:04:32 -010025400AECE000,"Fortnite",services-horizon,nothing,2024-04-06 18:23:25 -0100AAE01E39C000,"Fortress Challenge - Fort Boyard",nvdec;slow,playable,2020-05-15 13:22:53 -0100CA500756C000,"Fossil Hunters",nvdec,playable,2022-07-27 11:37:20 -01008A100A028000,"FOX n FORESTS",,playable,2021-02-16 14:27:49 -0100D2501001A000,"FoxyLand",,playable,2020-07-29 20:55:20 -01000AC010024000,"FoxyLand 2",,playable,2020-08-06 14:41:30 -01004200099F2000,"Fractured Minds",,playable,2022-09-13 21:21:40 -0100F1A00A5DC000,"FRAMED Collection",nvdec,playable,2022-07-27 11:48:15 -0100AC40108D8000,"Fred3ric",,playable,2021-04-15 13:30:31 -01000490067AE000,"Frederic 2: Evil Strikes Back",,playable,2020-07-23 16:44:37 -01005B1006988000,"Frederic: Resurrection of Music",nvdec,playable,2020-07-23 16:59:53 -010082B00EE50000,"Freedom Finger",nvdec,playable,2021-06-09 19:31:30 -0100EB800B614000,"Freedom Planet",,playable,2020-05-14 12:23:06 -010003F00BD48000,"Friday the 13th: Killer Puzzle",,playable,2021-01-28 01:33:38 -010092A00C4B6000,"Friday the 13th: The Game Ultimate Slasher Edition",nvdec;online-broken;UE4,playable,2022-09-06 17:33:27 -0100F200178F4000,"FRONT MISSION 1st: Remake",,playable,2023-06-09 07:44:24 -0100861012474000,"Frontline Zed",,playable,2020-10-03 12:55:59 -0100B5300B49A000,"Frost",,playable,2022-07-27 12:00:36 -010038A007AA4000,"FruitFall Crush",,playable,2020-10-20 11:33:33 -01008D800AE4A000,"FullBlast",,playable,2020-05-19 10:34:13 -010002F00CC20000,"FUN! FUN! Animal Park",,playable,2021-04-14 17:08:52 -0100A8F00B3D0000,"FunBox Party",,playable,2020-05-15 12:07:02 -0100E7B00BF24000,"Funghi Explosion",,playable,2020-11-23 14:17:41 -01008E10130F8000,"Funimation",gpu,boots,2021-04-08 13:08:17 -0100EA501033C000,"Funny Bunny Adventures",,playable,2020-08-05 13:46:56 -01000EC00AF98000,"Furi",,playable,2022-07-27 12:21:20 -0100A6B00D4EC000,"Furwind",,playable,2021-02-19 19:44:08 -0100ECE00C0C4000,"Fury Unleashed",crash;services,ingame,2020-10-18 11:52:40 -010070000ED9E000,"Fury Unleashed Demo",,playable,2020-10-08 20:09:21 -0100E1F013674000,"FUSER™",nvdec;UE4,playable,2022-10-17 20:58:32 -,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec,ingame,2021-01-20 15:30:02 -01003C300B274000,"Futari de! Nyanko Daisensou",,playable,2024-01-05 22:26:52 -010055801134E000,"FUZE Player",online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53 -0100EAD007E98000,"FUZE4 Nintendo Switch",vulkan-backend-bug,playable,2022-09-06 19:25:01 -010067600F1A0000,"FuzzBall",crash,nothing,2021-03-29 20:13:21 -,"G-MODE Archives 06 The strongest ever Julia Miyamoto",,playable,2020-10-15 13:06:26 -0100EB10108EA000,"G.I. Joe: Operation Blackout",UE4;crash,boots,2020-11-21 12:37:44 -010048600B14E000,"Gal Metal",,playable,2022-07-27 20:57:48 -010024700901A000,"Gal*Gun 2",nvdec;UE4,playable,2022-07-27 12:45:37 -0100047013378000,"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",nvdec,playable,2022-10-17 23:50:46 -0100C9800A454000,"GALAK-Z: Variant S",online-broken,boots,2022-07-29 11:59:12 -0100C62011050000,"Game Boy™ – Nintendo Switch Online",,playable,2023-03-21 12:43:48 -010012F017576000,"Game Boy™ Advance – Nintendo Switch Online",,playable,2023-02-16 20:38:15 -0100FA5010788000,"Game Builder Garage™",,ingame,2024-04-20 21:46:22 -0100AF700BCD2000,"Game Dev Story",,playable,2020-05-20 00:00:38 -01006BD00F8C0000,"Game Doraemon Nobita no Shin Kyoryu",gpu,ingame,2023-02-27 02:03:28 -01000FA00A4E4000,"Garage",,playable,2020-05-19 20:59:53 -010061E00E8BE000,"Garfield Kart Furious Racing",ldn-works;loader-allocator,playable,2022-09-13 21:40:25 -0100EA001069E000,"Gates Of Hell",slow,playable,2020-10-22 12:44:26 -010025500C098000,"Gato Roboto",,playable,2023-01-20 15:04:11 -010065E003FD8000,"Gear.Club Unlimited",,playable,2021-06-08 13:03:19 -010072900AFF0000,"Gear.Club Unlimited 2",nvdec;online-broken,playable,2022-07-29 12:52:16 -01000F000D9F0000,"Geki Yaba Runner Anniversary Edition",,playable,2021-02-19 18:59:07 -010052A00942A000,"Gekido Kintaro's Revenge",,playable,2020-10-27 12:44:05 -01009D000AF3A000,"Gelly Break Deluxe",UE4,playable,2021-03-03 16:04:02 -01001A4008192000,"Gem Smashers",nvdec,playable,2021-06-08 13:40:51 -010014901144C000,"Genetic Disaster",,playable,2020-06-19 21:41:12 -0100D7E0110B2000,"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",32-bit,playable,2022-06-06 00:42:09 -010000300C79C000,"GensokyoDefenders",online-broken;UE4,playable,2022-07-29 13:48:12 -0100AC600EB4C000,"Gensou Rougoku no Kaleidscope",crash,menus,2021-11-24 08:45:07 -01007FC012FD4000,"Georifters",UE4;crash;nvdec,menus,2020-12-04 22:30:50 -010058F010296000,"GERRRMS",,playable,2020-08-15 11:32:52 -01006F30129F8000,"Get 10 quest",,playable,2020-08-03 12:48:39 -0100B5B00E77C000,"Get Over Here",,playable,2022-10-28 11:53:52 -0100EEB005ACC000,"Ghost 1.0",,playable,2021-02-19 20:48:47 -010063200C588000,"Ghost Blade HD",online-broken,playable,2022-09-13 21:51:21 -010057500E744000,"Ghost Grab 3000",,playable,2020-07-11 18:09:52 -010094C00E180000,"Ghost Parade",,playable,2020-07-14 00:43:54 -01004B301108C000,"Ghost Sweeper",,playable,2022-10-10 12:45:36 -010029B018432000,"Ghost Trick: Phantom Detective",,playable,2023-08-23 14:50:12 -010008A00F632000,"Ghostbusters: The Video Game Remastered",nvdec,playable,2021-09-17 07:26:57 -010090F012916000,"Ghostrunner",UE4;crash;gpu;nvdec,ingame,2020-12-17 13:01:59 -0100D6200F2BA000,"Ghosts 'n Goblins Resurrection",,playable,2023-05-09 12:40:41 -01003830092B8000,"Giana Sisters: Twisted Dreams - Owltimate Edition",,playable,2022-07-29 14:06:12 -0100D95012C0A000,"Gibbous - A Cthulhu Adventure",nvdec,playable,2022-10-10 12:57:17 -010045F00BFC2000,"GIGA WRECKER ALT.",,playable,2022-07-29 14:13:54 -01002C400E526000,"Gigantosaurus The Game",UE4,playable,2022-09-27 21:20:00 -0100C50007070000,"Ginger: Beyond the Crystal",,playable,2021-02-17 16:27:00 -01006BA013990000,"Girabox",,playable,2020-12-12 13:55:05 -01007E90116CE000,"Giraffe and Annika",UE4;crash,ingame,2020-12-04 22:41:57 -01006DD00CC96000,"Girls und Panzer Dream Tank Match DX",ldn-untested,playable,2022-09-12 16:07:11 -01005CB009E20000,"Glaive: Brick Breaker",,playable,2020-05-20 12:15:59 -0100B6F01227C000,"Glitch's Trip",,playable,2020-12-17 16:00:57 -0100EB501130E000,"Glyph",,playable,2021-02-08 19:56:51 -0100EB8011B0C000,"Gnome More War",,playable,2020-12-17 16:33:07 -010008D00CCEC000,"Gnomes Garden 2",,playable,2021-02-19 20:08:13 -010036C00D0D6000,"Gnomes Garden: Lost King",deadlock,menus,2021-11-18 11:14:03 -01008EF013A7C000,"Gnosia",,playable,2021-04-05 17:20:30 -01000C800FADC000,"Go All Out!",online-broken,playable,2022-09-21 19:16:34 -010055A0161F4000,"Go Rally",gpu,ingame,2023-08-16 21:18:23 -0100C1800A9B6000,"Go Vacation™",nvdec;ldn-works,playable,2024-05-13 19:28:53 -0100E6300F854000,"Go! Fish Go!",,playable,2020-07-27 13:52:28 -010032600C8CE000,"Goat Simulator: The GOATY",32-bit,playable,2022-07-29 21:02:33 -01001C700873E000,"GOD EATER 3",gpu;nvdec,ingame,2022-07-29 21:33:21 -0100F3D00B032000,"GOD WARS The Complete Legend",nvdec,playable,2020-05-19 14:37:50 -0100CFA0111C8000,"Gods Will Fall",,playable,2021-02-08 16:49:59 -0100D82009024000,"Goetia",,playable,2020-05-19 12:55:39 -01004D501113C000,"Going Under",deadlock;nvdec,ingame,2020-12-11 22:29:46 -0100126006EF0000,"GOKEN",,playable,2020-08-05 20:22:38 -010013800F0A4000,"Golazo!",,playable,2022-09-13 21:58:37 -01003C000D84C000,"Golem Gates",crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11 -0100779004172000,"Golf Story",,playable,2020-05-14 14:56:17 -01006FB00EBE0000,"Golf With Your Friends",online-broken,playable,2022-09-29 12:55:11 -0100EEC00AA6E000,"Gone Home",,playable,2022-08-01 11:14:20 -01007C2002B3C000,"GoNNER",,playable,2020-05-19 12:05:02 -0100B0500FE4E000,"Good Job!™",,playable,2021-03-02 13:15:55 -01003AD0123A2000,"Good Night, Knight",crash,nothing,2023-07-30 23:38:13 -0100F610122F6000,"Good Pizza, Great Pizza",,playable,2020-12-04 22:59:18 -010014C0100C6000,"Goosebumps Dead of Night",gpu;nvdec,ingame,2020-12-10 20:02:16 -0100B8000B190000,"Goosebumps The Game",,playable,2020-05-19 11:56:52 -0100F2A005C98000,"Gorogoa",,playable,2022-08-01 11:55:08 -01000C7003FE8000,"GORSD",,playable,2020-12-04 22:15:21 -0100E8D007E16000,"Gotcha Racing 2nd",,playable,2020-07-23 17:14:04 -01001010121DE000,"Gothic Murder: Adventure That Changes Destiny",deadlock;crash,ingame,2022-09-30 23:16:53 -01003FF009E60000,"Grab the Bottle",,playable,2020-07-14 17:06:41 -01004D10020F2000,"Graceful Explosion Machine",,playable,2020-05-19 20:36:55 -010038D00EC88000,"Grand Brix Shooter",slow,playable,2020-06-24 13:23:54 -010038100D436000,"Grand Guilds",UE4;nvdec,playable,2021-04-26 12:49:05 -0100BE600D07A000,"Grand Prix Story",,playable,2022-08-01 12:42:23 -05B1D2ABD3D30000,"Grand Theft Auto 3",services;crash;homebrew,nothing,2023-05-01 22:01:58 -0100E0600BBC8000,"GRANDIA HD Collection",crash,boots,2024-08-19 04:29:48 -010028200E132000,"Grass Cutter - Mutated Lawns",slow,ingame,2020-05-19 18:27:42 -010074E0099FA000,"Grave Danger",,playable,2020-05-18 17:41:28 -010054A013E0C000,"GraviFire",,playable,2021-04-05 17:13:32 -01002C2011828000,"Gravity Rider Zero",gpu;vulkan-backend-bug,ingame,2022-09-29 13:56:13 -0100BD800DFA6000,"Greedroid",,playable,2020-12-14 11:14:32 -010068D00AE68000,"GREEN",,playable,2022-08-01 12:54:15 -0100CBB0070EE000,"Green Game: TimeSwapper",nvdec,playable,2021-02-19 18:51:55 -0100DFE00F002000,"GREEN The Life Algorithm",,playable,2022-09-27 21:37:13 -0100DA7013792000,"Grey Skies: A War of the Worlds Story",UE4,playable,2022-10-24 11:13:59 -010031200981C000,"Grid Mania",,playable,2020-05-19 14:11:05 -0100197008B52000,"GRIDD: Retroenhanced",,playable,2020-05-20 11:32:40 -0100DC800A602000,"GRID™ Autosport",nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45 -0100B7900B024000,"Grim Fandango Remastered",nvdec,playable,2022-08-01 13:55:58 -010078E012D80000,"Grim Legends 2: Song of the Dark Swan",nvdec,playable,2022-10-18 12:58:45 -010009F011F90000,"Grim Legends: The Forsaken Bride",nvdec,playable,2022-10-18 13:14:06 -01001E200F2F8000,"Grimshade",,playable,2022-10-02 12:44:20 -0100538012496000,"Grindstone",,playable,2023-02-08 15:54:06 -0100459009A2A000,"GRIP",nvdec;online-broken;UE4,playable,2022-08-01 15:00:22 -0100E1700C31C000,"GRIS",nvdec,playable,2021-06-03 13:33:44 -01009D7011B02000,"GRISAIA PHANTOM TRIGGER 01&02",nvdec,playable,2022-12-04 21:16:06 -01005250123B8000,"GRISAIA PHANTOM TRIGGER 03",audout,playable,2021-01-31 12:30:47 -0100D970123BA000,"GRISAIA PHANTOM TRIGGER 04",audout,playable,2021-01-31 12:40:37 -01002330123BC000,"GRISAIA PHANTOM TRIGGER 05",audout;nvdec,playable,2021-01-31 12:49:59 -0100CAF013AE6000,"GRISAIA PHANTOM TRIGGER 5.5",audout;nvdec,playable,2021-01-31 12:59:44 -010091300FFA0000,"Grizzland",gpu,ingame,2024-07-11 16:28:34 -0100EB500D92E000,"GROOVE COASTER WAI WAI PARTY!!!!",nvdec;ldn-broken,playable,2021-11-06 14:54:27 -01007E100456C000,"Guacamelee! 2",,playable,2020-05-15 14:56:59 -0100BAE00B470000,"Guacamelee! Super Turbo Championship Edition",,playable,2020-05-13 23:44:18 -010089900C9FA000,"Guess the Character",,playable,2020-05-20 13:14:19 -01005DC00D80C000,"Guess the word",,playable,2020-07-26 21:34:25 -01006F80082E4000,"GUILTY GEAR XX ACCENT CORE PLUS R",nvdec,playable,2021-01-13 09:28:33 -01003C6008940000,"GUNBIRD for Nintendo Switch",32-bit,playable,2021-06-04 19:16:01 -0100BCB00AE98000,"GUNBIRD2 for Nintendo Switch",,playable,2020-10-10 14:41:16 -,"Gunka o haita neko",gpu;nvdec,ingame,2020-08-25 12:37:56 -010061000D318000,"Gunman Clive HD Collection",,playable,2020-10-09 12:17:35 -01006D4003BCE000,"Guns, Gore and Cannoli 2",online,playable,2021-01-06 18:43:59 -01008C800E654000,"Gunvolt Chronicles Luminous Avenger iX - Retail Version",,playable,2020-06-16 22:47:07 -0100763015C2E000,"Gunvolt Chronicles: Luminous Avenger iX 2",crash;Needs Update,nothing,2022-04-29 15:34:34 -01002C8018554000,"Gurimugurimoa OnceMore Demo",,playable,2022-07-29 22:07:31 -0100AC601DCA8000,"GYLT",crash,ingame,2024-03-18 20:16:51 -0100822012D76000,"HAAK",gpu,ingame,2023-02-19 14:31:05 -01007E100EFA8000,"Habroxia",,playable,2020-06-16 23:04:42 -0100535012974000,"Hades",vulkan,playable,2022-10-05 10:45:21 -0100618010D76000,"Hakoniwa Explorer Plus",slow,ingame,2021-02-19 16:56:19 -0100E0D00C336000,"Halloween Pinball",,playable,2021-01-12 16:00:46 -01006FF014152000,"Hamidashi Creative",gpu,ingame,2021-12-19 15:30:51 -01003B9007E86000,"Hammerwatch",online-broken;ldn-broken,playable,2022-08-01 16:28:46 -01003620068EA000,"Hand of Fate 2",,playable,2022-08-01 15:44:16 -0100973011358000,"Hang The Kings",,playable,2020-07-28 22:56:59 -010066C018E50000,"Happy Animals Mini Golf",gpu,ingame,2022-12-04 19:24:28 -0100ECE00D13E000,"Hard West",regression,nothing,2022-02-09 07:45:56 -0100D55011D60000,"Hardcore Maze Cube",,playable,2020-12-04 20:01:24 -01002F0011DD4000,"HARDCORE MECHA",slow,playable,2020-11-01 15:06:33 -01000C90117FA000,"HardCube",,playable,2021-05-05 18:33:03 -0100BB600C096000,"Hardway Party",,playable,2020-07-26 12:35:07 -0100D0500AD30000,"Harvest Life",,playable,2022-08-01 16:51:45 -010016B010FDE000,"Harvest Moon®: One World",,playable,2023-05-26 09:17:19 -0100A280187BC000,"Harvestella",UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11 -0100E29001298000,"Has-Been Heroes",,playable,2021-01-13 13:31:48 -01001CC00FA1A000,"Hatsune Miku: Project DIVA Mega Mix",audio;online-broken,playable,2024-01-07 23:12:57 -01009E6014F18000,"Haunted Dawn: The Zombie Apocalypse",,playable,2022-10-28 12:31:51 -010023F008204000,"Haunted Dungeons:Hyakki Castle",,playable,2020-08-12 14:21:48 -0100E2600DBAA000,"Haven",,playable,2021-03-24 11:52:41 -0100EA900FB2C000,"Hayfever",loader-allocator,playable,2022-09-22 17:35:41 -0100EFE00E1DC000,"Headliner: NoviNews",online,playable,2021-03-01 11:36:00 -0100A8200C372000,"Headsnatchers",UE4;crash,menus,2020-07-14 13:29:14 -010067400EA5C000,"Headspun",,playable,2020-07-31 19:46:47 -0100D12008EE4000,"Heart&Slash",,playable,2021-01-13 20:56:32 -010059100D928000,"Heaven Dust",,playable,2020-05-17 14:02:41 -0100FD901000C000,"Heaven's Vault",crash,ingame,2021-02-08 18:22:01 -0100B9C012B66000,"Helheim Hassle",,playable,2020-10-14 11:38:36 -0100E4300C278000,"Hell is Other Demons",,playable,2021-01-13 13:23:02 -01000938017E5C00,"Hell Pie0",nvdec;UE4,playable,2022-11-03 16:48:46 -0100A4600E27A000,"Hell Warders",online,playable,2021-02-27 02:31:03 -010044500CF8E000,"Hellblade: Senua's Sacrifice",gpu;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50 -010087D0084A8000,"Hello Kitty Kruisers With Sanrio Friends",nvdec,playable,2021-06-04 19:08:46 -0100FAA00B168000,"Hello Neighbor",UE4,playable,2022-08-01 21:32:23 -010092B00C4F0000,"Hello Neighbor Hide and Seek",UE4;gpu;slow,ingame,2020-10-24 10:59:57 -010024600C794000,"Hellpoint",,menus,2021-11-26 13:24:20 -0100BEA00E63A000,"Hero Express",nvdec,playable,2020-08-06 13:23:43 -010077D01094C000,"Hero-U: Rogue to Redemption",nvdec,playable,2021-03-24 11:40:01 -0100D2B00BC54000,"Heroes of Hammerwatch - Ultimate Edition",,playable,2022-08-01 18:30:21 -01001B70080F0000,"HEROINE ANTHEM ZERO episode 1",vulkan-backend-bug,playable,2022-08-01 22:02:36 -010057300B0DC000,"Heroki",gpu,ingame,2023-07-30 19:30:01 -0100C2700E338000,"Heroland",,playable,2020-08-05 15:35:39 -01007AC00E012000,"HexaGravity",,playable,2021-05-28 13:47:48 -01004E800F03C000,"Hidden",slow,ingame,2022-10-05 10:56:53 -0100F6A00A684000,"Higurashi no Naku Koro ni Hō",audio,ingame,2021-09-18 14:40:28 -0100F8D0129F4000,"Himehibi 1 gakki - Princess Days",crash,nothing,2021-11-03 08:34:19 -0100F3D008436000,"Hiragana Pixel Party",,playable,2021-01-14 08:36:50 -01004990132AC000,"HITMAN 3 - Cloud Version",Needs Update;crash;services,nothing,2021-04-18 22:35:07 -010083A018262000,"Hitman: Blood Money — Reprisal",deadlock,ingame,2024-09-28 16:28:50 -01004B100A5CC000,"Hob: The Definitive Edition",,playable,2021-01-13 09:39:19 -0100F7300ED2C000,"Hoggy2",,playable,2022-10-10 13:53:35 -0100F7E00C70E000,"Hogwarts Legacy",slow,ingame,2024-09-03 19:53:58 -0100633007D48000,"Hollow Knight",nvdec,playable,2023-01-16 15:44:56 -0100F2100061E800,"Hollow0",UE4;gpu,ingame,2021-03-03 23:42:56 -0100342009E16000,"Holy Potatoes! What The Hell?!",,playable,2020-07-03 10:48:56 -010071B00C904000,"HoPiKo",,playable,2021-01-13 20:12:38 -010087800EE5A000,"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",crash,boots,2023-02-19 00:51:21 -010086D011EB8000,"Horace",,playable,2022-10-10 14:03:50 -0100001019F6E000,"Horizon Chase 2",deadlock;slow;crash;UE4,ingame,2024-08-19 04:24:06 -01009EA00B714000,"Horizon Chase Turbo",,playable,2021-02-19 19:40:56 -0100E4200FA82000,"Horror Pinball Bundle",crash,menus,2022-09-13 22:15:34 -0100017007980000,"Hotel Transylvania 3 Monsters Overboard",nvdec,playable,2021-01-27 18:55:31 -0100D0E00E51E000,"Hotline Miami Collection",nvdec,playable,2022-09-09 16:41:19 -0100BDE008218000,"Hotshot Racing",gpu;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17 -0100CAE00EB02000,"House Flipper",,playable,2021-06-16 18:28:32 -0100F6800910A000,"Hover",online-broken,playable,2022-09-20 12:54:46 -0100A66003384000,"Hulu",online-broken,boots,2022-12-09 10:05:00 -0100701001D92000,"Human Resource Machine",32-bit,playable,2020-12-17 21:47:09 -01000CA004DCA000,"Human: Fall Flat",,playable,2021-01-13 18:36:05 -0100E1A00AF40000,"Hungry Shark® World",,playable,2021-01-13 18:26:08 -0100EBA004726000,"Huntdown",,playable,2021-04-05 16:59:54 -010068000CAC0000,"Hunter's Legacy: Purrfect Edition",,playable,2022-08-02 10:33:31 -0100C460040EA000,"Hunting Simulator",UE4,playable,2022-08-02 10:54:08 -010061F010C3A000,"Hunting Simulator 2",UE4,playable,2022-10-10 14:25:51 -0100B3300B4AA000,"Hyper Jam",UE4;crash,boots,2020-12-15 22:52:11 -01003B200B372000,"Hyper Light Drifter - Special Edition",vulkan-backend-bug,playable,2023-01-13 15:44:48 -01006C500A29C000,"HyperBrawl Tournament",crash;services,boots,2020-12-04 23:03:27 -0100A8B00F0B4000,"HYPERCHARGE Unboxed",nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39 -010061400ED90000,"HyperParasite",nvdec;UE4,playable,2022-09-27 22:05:44 -0100959010466000,"Hypnospace Outlaw",nvdec,ingame,2023-08-02 22:46:49 -01002B00111A2000,"Hyrule Warriors: Age of Calamity",gpu;deadlock;slow;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00 -0100A2C01320E000,"Hyrule Warriors: Age of Calamity - Demo Version",slow,playable,2022-10-10 17:37:41 -0100AE00096EA000,"Hyrule Warriors: Definitive Edition",services-horizon;nvdec,ingame,2024-06-16 10:34:05 -0100849000BDA000,"I Am Setsuna",,playable,2021-11-28 11:06:11 -01001860140B0000,"I Saw Black Clouds",nvdec,playable,2021-04-19 17:22:16 -0100429006A06000,"I, Zombie",,playable,2021-01-13 14:53:44 -01004E5007E92000,"Ice Age Scrat's Nutty Adventure!",nvdec,playable,2022-09-13 22:22:29 -010053700A25A000,"Ice Cream Surfer",,playable,2020-07-29 12:04:07 -0100954014718000,"Ice Station Z",crash,menus,2021-11-21 20:02:15 -0100BE9007E7E000,"ICEY",,playable,2021-01-14 16:16:04 -0100BC60099FE000,"Iconoclasts",,playable,2021-08-30 21:11:04 -01001E700EB28000,"Idle Champions of the Forgotten Realms",online,boots,2020-12-17 18:24:57 -01002EC014BCA000,"IdolDays",gpu;crash,ingame,2021-12-19 15:31:28 -01006550129C6000,"If Found...",,playable,2020-12-11 13:43:14 -01001AC00ED72000,"If My Heart Had Wings",,playable,2022-09-29 14:54:57 -01009F20086A0000,"Ikaruga",,playable,2023-04-06 15:00:02 -010040900AF46000,"Ikenfell",,playable,2021-06-16 17:18:44 -01007BC00E55A000,"Immortal Planet",,playable,2022-09-20 13:40:43 -010079501025C000,"Immortal Realms: Vampire Wars",nvdec,playable,2021-06-17 17:41:46 -01000F400435A000,"Immortal Redneck",nvdec,playable,2021-01-27 18:36:28 -01004A600EC0A000,"Immortals Fenyx Rising™",gpu;crash,menus,2023-02-24 16:19:55 -0100737003190000,"IMPLOSION",nvdec,playable,2021-12-12 03:52:13 -0100A760129A0000,"In rays of the Light",,playable,2021-04-07 15:18:07 -0100A2101107C000,"Indie Puzzle Bundle Vol 1",,playable,2022-09-27 22:23:21 -010002A00CD68000,"Indiecalypse",nvdec,playable,2020-06-11 20:19:09 -01001D3003FDE000,"Indivisible",nvdec,playable,2022-09-29 15:20:57 -01002BD00F626000,"Inertial Drift",online-broken,playable,2022-10-11 12:22:19 -0100D4300A4CA000,"Infernium",UE4;regression,nothing,2021-01-13 16:36:07 -010039C001296000,"Infinite Minigolf",online,playable,2020-09-29 12:26:25 -01001CB00EFD6000,"Infliction: Extended Cut",nvdec;UE4,playable,2022-10-02 13:15:55 -0100F1401161E000,"INMOST",,playable,2022-10-05 11:27:40 -0100F200049C8000,"InnerSpace",,playable,2021-01-13 19:36:14 -0100D2D009028000,"INSIDE",,playable,2021-12-25 20:24:56 -0100EC7012D34000,"Inside Grass: A little adventure",,playable,2020-10-15 15:26:27 -010099700D750000,"Instant Sports",,playable,2022-09-09 12:59:40 -010099A011A46000,"Instant Sports Summer Games",gpu,menus,2020-09-02 13:39:28 -010031B0145B8000,"INSTANT SPORTS TENNIS",,playable,2022-10-28 16:42:17 -010041501005E000,"Interrogation: You will be deceived",,playable,2022-10-05 11:40:10 -01000F700DECE000,"Into the Dead 2",nvdec,playable,2022-09-14 12:36:14 -01001D0003B96000,"INVERSUS Deluxe",online-broken,playable,2022-08-02 14:35:36 -0100C5B00FADE000,"Invisible Fist",,playable,2020-08-08 13:25:52 -010031B00C48C000,"Invisible, Inc. Nintendo Switch Edition",crash,nothing,2021-01-29 16:28:13 -01005F400E644000,"Invisigun Reloaded",gpu;online,ingame,2021-06-10 12:13:24 -010041C00D086000,"Ion Fury",vulkan-backend-bug,ingame,2022-08-07 08:27:51 -010095C016C14000,"Iridium",,playable,2022-08-05 23:19:53 -0100AD300B786000,"Iris School of Wizardry -Vinculum Hearts-",,playable,2022-12-05 13:11:15 -0100945012168000,"Iris.Fall",nvdec,playable,2022-10-18 13:40:22 -01005270118D6000,"Iron Wings",slow,ingame,2022-08-07 08:32:57 -01004DB003E6A000,"IRONCAST",,playable,2021-01-13 13:54:29 -0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",,playable,2021-06-04 20:12:37 -010063E0104BE000,"Is It Wrong to Try to Pick Up Girls in a Dungeon? Familia Myth Infinite Combate",,playable,2020-08-31 13:52:21 -0100F06013710000,"ISLAND",,playable,2021-05-06 15:11:47 -010077900440A000,"Island Flight Simulator",,playable,2021-06-04 19:42:46 -0100A2600FCA0000,"Island Saver",nvdec,playable,2020-10-23 22:07:02 -010065200D192000,"Isoland",,playable,2020-07-26 13:48:16 -0100F5600D194000,"Isoland 2 - Ashes of Time",,playable,2020-07-26 14:29:05 -010001F0145A8000,"Isolomus",services,boots,2021-11-03 07:48:21 -010068700C70A000,"ITTA",,playable,2021-06-07 03:15:52 -01004070022F0000,"Ittle Dew 2+",,playable,2020-11-17 11:44:32 -0100DEB00F12A000,"IxSHE Tell",nvdec,playable,2022-12-02 18:00:42 -0100D8E00C874000,"izneo",online-broken,menus,2022-08-06 15:56:23 -0100CD5008D9E000,"James Pond Codename Robocod",,playable,2021-01-13 09:48:45 -01005F4010AF0000,"Japanese Rail Sim: Journey to Kyoto",nvdec,playable,2020-07-29 17:14:21 -010002D00EDD0000,"JDM Racing",,playable,2020-08-03 17:02:37 -0100C2700AEB8000,"Jenny LeClue - Detectivu",crash,nothing,2020-12-15 21:07:07 -01006E400AE2A000,"Jeopardy!®",audout;nvdec;online,playable,2021-02-22 13:53:46 -0100E4900D266000,"Jet Kave Adventure",nvdec,playable,2022-09-09 14:50:39 -0100F3500C70C000,"Jet Lancer",gpu,ingame,2021-02-15 18:15:47 -0100A5A00AF26000,"Jettomero: Hero of the Universe",,playable,2022-08-02 14:46:43 -01008330134DA000,"Jiffy",gpu;opengl,ingame,2024-02-03 23:11:24 -01001F5006DF6000,"Jim is Moving Out!",deadlock,ingame,2020-06-03 22:05:19 -0100F4D00D8BE000,"Jinrui no Ninasama he",crash,ingame,2023-03-07 02:04:17 -010038D011F08000,"Jisei: The First Case HD",audio,playable,2022-10-05 11:43:33 -01007CE00C960000,"Job the Leprechaun",,playable,2020-06-05 12:10:06 -01007090104EC000,"John Wick Hex",,playable,2022-08-07 08:29:12 -01006E4003832000,"Johnny Turbo's Arcade: Bad Dudes",,playable,2020-12-10 12:30:56 -010069B002CDE000,"Johnny Turbo's Arcade: Gate Of Doom",,playable,2022-07-29 12:17:50 -010080D002CC6000,"Johnny Turbo's Arcade: Two Crude Dudes",,playable,2022-08-02 20:29:50 -0100D230069CC000,"Johnny Turbo's Arcade: Wizard Fire",,playable,2022-08-02 20:39:15 -01008120128C2000,"JoJos Bizarre Adventure All-Star Battle R",,playable,2022-12-03 10:45:10 -01008B60117EC000,"Journey to the Savage Planet",nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12 -0100C7600F654000,"Juicy Realm",,playable,2023-02-21 19:16:20 -0100B4D00C76E000,"JUMANJI: The Video Game",UE4;crash,boots,2020-07-12 13:52:25 -0100183010F12000,"JUMP FORCE - Deluxe Edition",nvdec;online-broken;UE4,playable,2023-10-01 15:56:05 -01003D601014A000,"Jump King",,playable,2020-06-09 10:12:39 -0100B9C012706000,"Jump Rope Challenge",services;crash;Needs Update,boots,2023-02-27 01:24:28 -0100D87009954000,"Jumping Joe & Friends",,playable,2021-01-13 17:09:42 -010069800D2B4000,"JUNK PLANET",,playable,2020-11-09 12:38:33 -0100CE100A826000,"Jurassic Pinball",,playable,2021-06-04 19:02:37 -010050A011344000,"Jurassic World Evolution: Complete Edition",cpu;crash,menus,2023-08-04 18:06:54 -0100BCE000598000,"Just Dance 2017®",online,playable,2021-03-05 09:46:01 -0100BEE017FC0000,"Just Dance 2023",,nothing,2023-06-05 16:44:54 -010075600AE96000,"Just Dance® 2019",gpu;online,ingame,2021-02-27 17:21:27 -0100DDB00DB38000,"Just Dance® 2020",,playable,2022-01-24 13:31:57 -0100EA6014BB8000,"Just Dance® 2022",gpu;services;crash;Needs Update,ingame,2022-10-28 11:01:53 -0100AC600CF0A000,"Just Die Already",UE4,playable,2022-12-13 13:37:50 -01002C301033E000,"Just Glide",,playable,2020-08-07 17:38:10 -0100830008426000,"Just Shapes & Beats",ldn-untested;nvdec,playable,2021-02-09 12:18:36 -010035A0044E8000,"JYDGE",,playable,2022-08-02 21:20:13 -0100D58012FC2000,"Kagamihara/Justice",crash,nothing,2021-06-21 16:41:29 -0100D5F00EC52000,"Kairobotica",,playable,2021-05-06 12:17:56 -0100BDC00A664000,"KAMEN RIDER CLIMAX SCRAMBLE",nvdec;ldn-untested,playable,2024-07-03 08:51:11 -0100A9801180E000,"KAMEN RIDER memory of heroez / Premium Sound Edition",,playable,2022-12-06 03:14:26 -010085300314E000,"KAMIKO",,playable,2020-05-13 12:48:57 -,"Kangokuto Mary Skelter Finale",audio;crash,ingame,2021-01-09 22:39:28 -01007FD00DB20000,"Katakoi Contrast - collection of branch -",nvdec,playable,2022-12-09 09:41:26 -0100D7000C2C6000,"Katamari Damacy REROLL",,playable,2022-08-02 21:35:05 -0100F9800EDFA000,"KATANA KAMI: A Way of the Samurai Story",slow,playable,2022-04-09 10:40:16 -010029600D56A000,"Katana ZERO",,playable,2022-08-26 08:09:09 -010038B00F142000,"Kaze and the Wild Masks",,playable,2021-04-19 17:11:03 -0100D7C01115E000,"Keen: One Girl Army",,playable,2020-12-14 23:19:52 -01008D400A584000,"Keep Talking and Nobody Explodes",,playable,2021-02-15 18:05:21 -01004B100BDA2000,"KEMONO FRIENDS PICROSS",,playable,2023-02-08 15:54:34 -0100A8200B15C000,"Kentucky Robo Chicken",,playable,2020-05-12 20:54:17 -0100327005C94000,"Kentucky Route Zero: TV Edition",,playable,2024-04-09 23:22:46 -0100DA200A09A000,"Kero Blaster",,playable,2020-05-12 20:42:52 -0100F680116A2000,"Kholat",UE4;nvdec,playable,2021-06-17 11:52:48 -0100C0A004C2C000,"Kid Tripp",crash,nothing,2020-10-15 07:41:23 -0100FB400D832000,"KILL la KILL -IF",,playable,2020-06-09 14:47:08 -010011B00910C000,"Kill The Bad Guy",,playable,2020-05-12 22:16:10 -0100F2900B3E2000,"Killer Queen Black",ldn-untested;online,playable,2021-04-08 12:46:18 -,"Kin'iro no Corda Octave",,playable,2020-09-22 13:23:12 -010089000F0E8000,"Kine",UE4,playable,2022-09-14 14:28:37 -0100E6B00FFBA000,"King Lucas",,playable,2022-09-21 19:43:23 -0100B1300783E000,"King Oddball",,playable,2020-05-13 13:47:57 -01008D80148C8000,"King of Seas",nvdec;UE4,playable,2022-10-28 18:29:41 -0100515014A94000,"King of Seas Demo",nvdec;UE4,playable,2022-10-28 18:09:31 -01005D2011EA8000,"KINGDOM HEARTS Melody of Memory",crash;nvdec,ingame,2021-03-03 17:34:12 -0100A280121F6000,"Kingdom Rush",32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00 -01005EF003FF2000,"Kingdom Two Crowns",,playable,2020-05-16 19:36:21 -0100BD9004AB6000,"Kingdom: New Lands",,playable,2022-08-02 21:48:50 -0100EF50132BE000,"Kingdoms of Amalur: Re-Reckoning",,playable,2023-08-10 13:05:08 -010091201605A000,"Kirby and the Forgotten Land (Demo version)",demo,playable,2022-08-21 21:03:01 -0100227010460000,"Kirby Fighters™ 2",ldn-works;online,playable,2021-06-17 13:06:39 -0100A8E016236000,"Kirby’s Dream Buffet™",crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44 -010091D01A57E000,"Kirby’s Return to Dream Land Deluxe - Demo",demo,playable,2023-02-18 17:21:55 -01006B601380E000,"Kirby’s Return to Dream Land™ Deluxe",,playable,2024-05-16 19:58:04 -01004D300C5AE000,"Kirby™ and the Forgotten Land",gpu,ingame,2024-03-11 17:11:21 -01007E3006DDA000,"Kirby™ Star Allies",nvdec,playable,2023-11-15 17:06:19 -0100F3A00F4CA000,"Kissed by the Baddest Bidder",gpu;nvdec,ingame,2022-12-04 20:57:11 -01000C900A136000,"Kitten Squad",nvdec,playable,2022-08-03 12:01:59 -010079D00C8AE000,"Klondike Solitaire",,playable,2020-12-13 16:17:27 -0100A6800DE70000,"Knight Squad",,playable,2020-08-09 16:54:51 -010024B00E1D6000,"Knight Squad 2",nvdec;online-broken,playable,2022-10-28 18:38:09 -0100D51006AAC000,"Knight Terrors",,playable,2020-05-13 13:09:22 -01005F8010D98000,"Knightin'+",,playable,2020-08-31 18:18:21 -010004400B22A000,"Knights of Pen & Paper 2 Deluxiest Edition",,playable,2020-05-13 14:07:00 -0100D3F008746000,"Knights of Pen and Paper +1 Deluxier Edition",,playable,2020-05-11 21:46:32 -010001A00A1F6000,"Knock-Knock",nvdec,playable,2021-02-01 20:03:19 -01009EF00DDB4000,"Knockout City™",services;online-broken,boots,2022-12-09 09:48:58 -0100C57019BA2000,"Koa and the Five Pirates of Mara",gpu,ingame,2024-07-11 16:14:44 -01001E500401C000,"Koi DX",,playable,2020-05-11 21:37:51 -,"Koi no Hanasaku Hyakkaen",32-bit;gpu;nvdec,ingame,2020-10-03 14:17:10 -01005D200C9AA000,"Koloro",,playable,2022-08-03 12:34:02 -0100464009294000,"Kona",,playable,2022-08-03 12:48:19 -010016C011AAA000,"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",,playable,2023-04-26 09:51:08 -010088500D5EE000,"KORAL",UE4;crash;gpu,menus,2020-11-16 12:41:26 -0100EC8004762000,"KORG Gadget for Nintendo Switch",,playable,2020-05-13 13:57:24 -010046600CCA4000,"Kotodama: The 7 Mysteries of Fujisawa",audout,playable,2021-02-01 20:28:37 -010022801242C000,"KukkoroDays",crash,menus,2021-11-25 08:52:56 -010035A00DF62000,"KUNAI",nvdec,playable,2022-09-20 13:48:34 -010060400ADD2000,"Kunio-Kun: The World Classics Collection",online,playable,2021-01-29 20:21:46 -010037500F282000,"KUUKIYOMI 2: Consider It More! - New Era",crash;Needs Update,nothing,2021-11-02 09:34:40 -0100894011F62000,"Kwaidan ~Azuma manor story~",,playable,2022-10-05 12:50:44 -0100830004FB6000,"L.A. Noire",,playable,2022-08-03 16:49:35 -0100732009CAE000,"L.F.O. -Lost Future Omega-",UE4;deadlock,boots,2020-10-16 12:16:44 -0100F2B0123AE000,"L.O.L. Surprise! Remix: We Rule The World",,playable,2022-10-11 22:48:03 -010026000F662800,"LA-MULANA",gpu,ingame,2022-08-12 01:06:21 -0100E5D00F4AE000,"LA-MULANA 1 & 2",,playable,2022-09-22 17:56:36 -010038000F644000,"LA-MULANA 2",,playable,2022-09-03 13:45:57 -010058500B3E0000,"Labyrinth of Refrain: Coven of Dusk",,playable,2021-02-15 17:38:48 -010022D0089AE000,"Labyrinth of the Witch",,playable,2020-11-01 14:42:37 -0100BAB00E8C0000,"Langrisser I & II",,playable,2021-02-19 15:46:10 -0100E7200B272000,"Lanota",,playable,2019-09-04 01:58:14 -01005E000D3D8000,"Lapis x Labyrinth",,playable,2021-02-01 18:58:08 -0100AFE00E882000,"Laraan",,playable,2020-12-16 12:45:48 -0100DA700879C000,"Last Day of June",nvdec,playable,2021-06-08 11:35:32 -01009E100BDD6000,"LASTFIGHT",,playable,2022-09-20 13:54:55 -0100055007B86000,"Late Shift",nvdec,playable,2021-02-01 18:43:58 -01004EB00DACE000,"Later Daters Part One",,playable,2020-07-29 16:35:45 -01001730144DA000,"Layers of Fear 2",nvdec;UE4,playable,2022-10-28 18:49:52 -0100BF5006A7C000,"Layers of Fear: Legacy",nvdec,playable,2021-02-15 16:30:41 -0100CE500D226000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",nvdec;opengl,playable,2022-09-14 15:01:57 -0100FDB00AA80000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",gpu;nvdec;opengl,ingame,2022-09-14 15:15:55 -01009C100390E000,"League of Evil",online,playable,2021-06-08 11:23:27 -01002E900CD6E000,"Left-Right : The Mansion",,playable,2020-05-13 13:02:12 -010079901C898000,"Legacy of Kain™ Soul Reaver 1&2 Remastered",,playable,2025-01-07 05:50:01 -01002DB007A96000,"Legend of Kay Anniversary",nvdec,playable,2021-01-29 18:38:29 -0100ECC00EF3C000,"Legend of the Skyfish",,playable,2020-06-24 13:04:22 -01007E900DFB6000,"Legend of the Tetrarchs",deadlock,ingame,2020-07-10 07:54:03 -0100A73006E74000,"Legendary Eleven",,playable,2021-06-08 12:09:03 -0100A7700B46C000,"Legendary Fishing",online,playable,2021-04-14 15:08:46 -0100739018020000,"LEGO® 2K Drive",gpu;ldn-works,ingame,2024-04-09 02:05:12 -01003A30012C0000,"LEGO® CITY Undercover",nvdec,playable,2024-09-30 08:44:27 -010070D009FEC000,"LEGO® DC Super-Villains",,playable,2021-05-27 18:10:37 -010052A00B5D2000,"LEGO® Harry Potter™ Collection",crash,ingame,2024-01-31 10:28:07 -010073C01AF34000,"LEGO® Horizon Adventures™",vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56 -01001C100E772000,"LEGO® Jurassic World",,playable,2021-05-27 17:00:20 -0100D3A00409E000,"LEGO® Marvel Super Heroes 2",crash,nothing,2023-03-02 17:12:33 -01006F600FFC8000,"LEGO® Marvel™ Super Heroes",,playable,2024-09-10 19:02:19 -01007FC00206E000,"LEGO® NINJAGO® Movie Video Game",crash,nothing,2022-08-22 19:12:53 -010042D00D900000,"LEGO® Star Wars™: The Skywalker Saga",gpu;slow,ingame,2024-04-13 20:08:46 -0100A01006E00000,"LEGO® The Incredibles",crash,nothing,2022-08-03 18:36:59 -0100838002AEA000,"LEGO® Worlds",crash;slow,ingame,2020-07-17 13:35:39 -0100E7500BF84000,"LEGRAND LEGACY: Tale of the Fatebounds",nvdec,playable,2020-07-26 12:27:36 -0100A8E00CAA0000,"Leisure Suit Larry - Wet Dreams Don't Dry",,playable,2022-08-03 19:51:44 -010031A0135CA000,"Leisure Suit Larry - Wet Dreams Dry Twice",,playable,2022-10-28 19:00:57 -01003AB00983C000,"Lethal League Blaze",online,playable,2021-01-29 20:13:31 -01008C300648E000,"Letter Quest Remastered",,playable,2020-05-11 21:30:34 -0100CE301678E800,"Letters - a written adventure",gpu,ingame,2023-02-21 20:12:38 -01009A200BE42000,"Levelhead",online,ingame,2020-10-18 11:44:51 -0100C960041DC000,"Levels+ : Addictive Puzzle Game",,playable,2020-05-12 13:51:39 -0100C8000F146000,"Liberated",gpu;nvdec,ingame,2024-07-04 04:58:24 -01003A90133A6000,"Liberated: Enhanced Edition",gpu;nvdec,ingame,2024-07-04 04:48:48 -01004360045C8000,"Lichtspeer: Double Speer Edition",,playable,2020-05-12 16:43:09 -010041F0128AE000,"Liege Dragon",,playable,2022-10-12 10:27:03 -010006300AFFE000,"Life Goes On",,playable,2021-01-29 19:01:20 -0100FD101186C000,"Life is Strange 2",UE4,playable,2024-07-04 05:05:58 -0100DC301186A000,"Life is Strange Remastered",UE4,playable,2022-10-03 16:54:44 -010008501186E000,"Life is Strange: Before the Storm Remastered",,playable,2023-09-28 17:15:44 -0100500012AB4000,"Life is Strange: True Colors™",gpu;UE4,ingame,2024-04-08 16:11:52 -01003AB012F00000,"Life of Boris: Super Slav",,ingame,2020-12-17 11:40:05 -0100B3A0135D6000,"Life of Fly",,playable,2021-01-25 23:41:07 -010069A01506E000,"Life of Fly 2",slow,playable,2022-10-28 19:26:52 -01005B6008132000,"Lifeless Planet: Premiere Edition",,playable,2022-08-03 21:25:13 -010030A006F6E000,"Light Fall",nvdec,playable,2021-01-18 14:55:36 -010087700D07C000,"Light Tracer",nvdec,playable,2021-05-05 19:15:43 -01009C8009026000,"LIMBO",cpu;32-bit,boots,2023-06-28 15:39:19 -0100EDE012B58000,"Linelight",,playable,2020-12-17 12:18:07 -0100FAD00E65E000,"Lines X",,playable,2020-05-11 15:28:30 -010032F01096C000,"Lines XL",,playable,2020-08-31 17:48:23 -0100943010310000,"Little Busters! Converted Edition",nvdec,playable,2022-09-29 15:34:56 -0100A3F009142000,"Little Dragons Café",,playable,2020-05-12 00:00:52 -010079A00D9E8000,"Little Friends: Dogs & Cats",,playable,2020-11-12 12:45:51 -0100B18001D8E000,"Little Inferno",32-bit;gpu;nvdec,ingame,2020-12-17 21:43:56 -0100E7000E826000,"Little Misfortune",nvdec,playable,2021-02-23 20:39:44 -0100FE0014200000,"Little Mouse's Encyclopedia",,playable,2022-10-28 19:38:58 -01002FC00412C000,"Little Nightmares Complete Edition",nvdec;UE4,playable,2022-08-03 21:45:35 -010097100EDD6000,"Little Nightmares II",UE4,playable,2023-02-10 18:24:44 -010093A0135D6000,"Little Nightmares II DEMO",UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20 -0100535014D76000,"Little Noah: Scion of Paradise",opengl-backend-bug,playable,2022-09-14 04:17:13 -0100E6D00E81C000,"Little Racer",,playable,2022-10-18 16:41:13 -0100DD700D95E000,"Little Shopping",,playable,2020-10-03 16:34:35 -01000FB00AA90000,"Little Town Hero",,playable,2020-10-15 23:28:48 -01000690085BE000,"Little Triangle",,playable,2020-06-17 14:46:26 -0100CF801776C000,"LIVE A LIVE",UE4;amd-vendor-bug,playable,2023-02-05 15:12:07 -0100BA000FC9C000,"LocO-SportS",,playable,2022-09-20 14:09:30 -010016C009374000,"Lode Runner Legacy",,playable,2021-01-10 14:10:28 -0100D2C013288000,"Lofi Ping Pong",crash,ingame,2020-12-15 20:09:22 -0100B6D016EE6000,"Lone Ruin",crash;nvdec,ingame,2023-01-17 06:41:19 -0100A0C00E0DE000,"Lonely Mountains: Downhill",online-broken,playable,2024-07-04 05:08:11 -010062A0178A8000,"LOOPERS",gpu;slow;crash,ingame,2022-06-17 19:21:45 -010064200F7D8000,"Lost Horizon",,playable,2020-09-01 13:41:22 -01005ED010642000,"Lost Horizon 2",nvdec,playable,2020-06-16 12:02:12 -01005FE01291A000,"Lost in Random™",gpu,ingame,2022-12-18 07:09:28 -0100133014510000,"Lost Lands 2: The Four Horsemen",nvdec,playable,2022-10-24 16:41:00 -0100156014C6A000,"Lost Lands 3: The Golden Curse",nvdec,playable,2022-10-24 16:30:00 -0100BDD010AC8000,"Lost Lands: Dark Overlord",,playable,2022-10-03 11:52:58 -010054600AC74000,"LOST ORBIT: Terminal Velocity",,playable,2021-06-14 12:21:12 -010046600B76A000,"Lost Phone Stories",services,ingame,2020-04-05 23:17:33 -01008AD013A86800,"Lost Ruins",gpu,ingame,2023-02-19 14:09:00 -010077B0038B2000,"LOST SPHEAR",,playable,2021-01-10 06:01:21 -0100018013124000,"Lost Words: Beyond the Page",,playable,2022-10-24 17:03:21 -0100D36011AD4000,"Love Letter from Thief X",gpu;nvdec,ingame,2023-11-14 03:55:31 -0100F0300B7BE000,"Ludomania",crash;services,nothing,2020-04-03 00:33:47 -010048701995E000,"Luigi's Mansion™ 2 HD",ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27 -0100DCA0064A6000,"Luigi’s Mansion™ 3",gpu;slow;Needs Update;ldn-works,ingame,2024-09-27 22:17:36 -010052B00B194000,"Lumini",,playable,2020-08-09 20:45:09 -0100FF00042EE000,"Lumo",nvdec,playable,2022-02-11 18:20:30 -0100F3100EB44000,"Lust for Darkness",nvdec,playable,2020-07-26 12:09:15 -0100F0B00F68E000,"Lust for Darkness: Dawn Edition",nvdec,playable,2021-06-16 13:47:46 -0100EC2011A80000,"Luxar",,playable,2021-03-04 21:11:57 -0100F2400D434000,"MachiKnights -Blood bagos-",nvdec;UE4,playable,2022-09-14 15:08:04 -010024A009428000,"Mad Carnage",,playable,2021-01-10 13:00:07 -01005E7013476000,"Mad Father",,playable,2020-11-12 13:22:10 -010061E00EB1E000,"Mad Games Tycoon",,playable,2022-09-20 14:23:14 -01004A200E722000,"Magazine Mogul",loader-allocator,playable,2022-10-03 12:05:34 -01008E500BF62000,"MagiCat",,playable,2020-12-11 15:22:07 -010032C011356000,"Magicolors",,playable,2020-08-12 18:39:11 -01008C300B624000,"Mahjong Solitaire Refresh",crash,boots,2022-12-09 12:02:55 -010099A0145E8000,"Mahluk dark demon",,playable,2021-04-15 13:14:24 -01001C100D80E000,"Mainlining",,playable,2020-06-05 01:02:00 -0100D9900F220000,"Maitetsu:Pure Station",,playable,2022-09-20 15:12:49 -0100A78017BD6000,"Makai Senki Disgaea 7",,playable,2023-10-05 00:22:18 -01005A700CC3C000,"Mana Spark",,playable,2020-12-10 13:41:01 -010093D00CB22000,"Maneater",nvdec;UE4,playable,2024-05-21 16:11:57 -0100361009B1A000,"Manifold Garden",,playable,2020-10-13 20:27:13 -0100C9A00952A000,"Manticore - Galaxy on Fire",crash;nvdec,boots,2024-02-04 04:37:24 -0100E98002F6E000,"Mantis Burn Racing",online-broken;ldn-broken,playable,2024-09-02 02:13:04 -01008E800D1FE000,"Marble Power Blast",,playable,2021-06-04 16:00:02 -01001B2012D5E000,"Märchen Forest",,playable,2021-02-04 21:33:34 -0100DA7017C9E000,"Marco & The Galaxy Dragon Demo",gpu;demo,ingame,2023-06-03 13:05:33 -01006D0017F7A000,"Mario & Luigi: Brothership",crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00 -010002C00C270000,"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55 -0100317013770000,"MARIO + RABBIDS SPARKS OF HOPE",gpu;Needs Update,ingame,2024-06-20 19:56:19 -010067300059A000,"Mario + Rabbids® Kingdom Battle",slow;opengl-backend-bug,playable,2024-05-06 10:16:54 -0100C9C00E25C000,"Mario Golf™: Super Rush",gpu,ingame,2024-08-18 21:31:48 -0100ED100BA3A000,"Mario Kart Live: Home Circuit™",services;crash;Needs More Attention,nothing,2022-12-07 22:36:52 -0100152000022000,"Mario Kart™ 8 Deluxe",32-bit;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17 -01006FE013472000,"Mario Party™ Superstars",gpu;ldn-works;mac-bug,ingame,2024-05-16 11:23:34 -010019401051C000,"Mario Strikers™: Battle League",crash;nvdec,boots,2024-05-07 06:23:56 -0100BDE00862A000,"Mario Tennis™ Aces",gpu;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40 -0100B99019412000,"Mario vs. Donkey Kong™",,playable,2024-05-04 21:22:39 -0100D9E01DBB0000,"Mario vs. Donkey Kong™ Demo",,playable,2024-02-18 10:40:06 -01009A700A538000,"Mark of the Ninja: Remastered",,playable,2022-08-04 15:48:30 -010044600FDF0000,"Marooners",nvdec;online-broken,playable,2022-10-18 21:35:26 -010060700AC50000,"MARVEL ULTIMATE ALLIANCE 3: The Black Order",nvdec;ldn-untested,playable,2024-02-14 19:51:51 -01003DE00C95E000,"Mary Skelter 2",crash;regression,ingame,2023-09-12 07:37:28 -0100113008262000,"Masquerada: Songs and Shadows",,playable,2022-09-20 15:18:54 -01004800197F0000,"Master Detective Archives: Rain Code",gpu,ingame,2024-04-19 20:11:09 -0100CC7009196000,"Masters of Anima",nvdec,playable,2022-08-04 16:00:09 -01004B100A1C4000,"MathLand",,playable,2020-09-01 15:40:06 -0100A8C011F26000,"Max and the book of chaos",,playable,2020-09-02 12:24:43 -01001C9007614000,"Max: The Curse of Brotherhood",nvdec,playable,2022-08-04 16:33:04 -0100E8B012FBC000,"Maze",,playable,2020-12-17 16:13:58 -0100EEF00CBC0000,"MEANDERS",UE4;gpu,ingame,2021-06-11 19:19:33 -0100EC000CE24000,"Mech Rage",,playable,2020-11-18 12:30:16 -0100C4F005EB4000,"Mecho Tales",,playable,2022-08-04 17:03:19 -0100E4600D31A000,"Mechstermination Force",,playable,2024-07-04 05:39:15 -,"Medarot Classics Plus Kabuto Ver",,playable,2020-11-21 11:31:18 -,"Medarot Classics Plus Kuwagata Ver",,playable,2020-11-21 11:30:40 -0100BBC00CB9A000,"Mega Mall Story",slow,playable,2022-08-04 17:10:58 -0100B0C0086B0000,"Mega Man 11",,playable,2021-04-26 12:07:53 -010038E016264000,"Mega Man Battle Network Legacy Collection Vol. 1",,playable,2023-04-25 03:55:57 -0100734016266000,"Mega Man Battle Network Legacy Collection Vol. 2",,playable,2023-08-03 18:04:32 -01002D4007AE0000,"Mega Man Legacy Collection",gpu,ingame,2021-06-03 18:17:17 -0100842008EC4000,"Mega Man Legacy Collection 2",,playable,2021-01-06 08:47:59 -01005C60086BE000,"Mega Man X Legacy Collection",audio;crash;services,menus,2020-12-04 04:30:17 -010025C00D410000,"Mega Man Zero/ZX Legacy Collection",,playable,2021-06-14 16:17:32 -0100FC700F942000,"Megabyte Punch",,playable,2020-10-16 14:07:18 -010006F011220000,"Megadimension Neptunia VII",32-bit;nvdec,playable,2020-12-17 20:56:03 -010082B00E8B8000,"Megaquarium",,playable,2022-09-14 16:50:00 -010005A00B312000,"Megaton Rainfall",gpu;opengl,boots,2022-08-04 18:29:43 -0100EA100DF92000,"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",32-bit;nvdec,playable,2022-12-05 13:19:12 -0100B360068B2000,"Mekorama",gpu,boots,2021-06-17 16:37:21 -01000FA010340000,"Melbits World",nvdec;online,menus,2021-11-26 13:51:22 -0100F68019636000,"Melon Journey",,playable,2023-04-23 21:20:01 -,"Memories Off -Innocent Fille- for Dearest",,playable,2020-08-04 07:31:22 -010062F011E7C000,"Memory Lane",UE4,playable,2022-10-05 14:31:03 -0100EBE00D5B0000,"Meow Motors",UE4;gpu,ingame,2020-12-18 00:24:01 -0100273008FBC000,"Mercenaries Saga Chronicles",,playable,2021-01-10 12:48:19 -010094500C216000,"Mercenaries Wings: The False Phoenix",crash;services,nothing,2020-05-08 22:42:12 -0100F900046C4000,"Mercenary Kings: Reloaded Edition",online,playable,2020-10-16 13:05:58 -0100E5000D3CA000,"Merchants of Kaidan",,playable,2021-04-15 11:44:28 -01009A500D4A8000,"METAGAL",,playable,2020-06-05 00:05:48 -010047F01AA10000,"METAL GEAR SOLID 3: Snake Eater - Master Collection Version",services-horizon,menus,2024-07-24 06:34:06 -0100E8F00F6BE000,"METAL MAX Xeno Reborn",,playable,2022-12-05 15:33:53 -01002DE00E5D0000,"Metaloid: Origin",,playable,2020-06-04 20:26:35 -010055200E87E000,"Metamorphosis",UE4;audout;gpu;nvdec,ingame,2021-06-16 16:18:11 -0100D4900E82C000,"Metro 2033 Redux",gpu,ingame,2022-11-09 10:53:13 -0100F0400E850000,"Metro: Last Light Redux",slow;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52 -010012101468C000,"Metroid Prime™ Remastered",gpu;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15 -010093801237C000,"Metroid™ Dread",,playable,2023-11-13 04:02:36 -0100A1200F20C000,"Midnight Evil",,playable,2022-10-18 22:55:19 -0100C1E0135E0000,"Mighty Fight Federation",online,playable,2021-04-06 18:39:56 -0100AD701344C000,"Mighty Goose",nvdec,playable,2022-10-28 20:25:38 -01000E2003FA0000,"MIGHTY GUNVOLT BURST",,playable,2020-10-19 16:05:49 -010060D00AE36000,"Mighty Switch Force! Collection",,playable,2022-10-28 20:40:32 -01003DA010E8A000,"Miitopia™",gpu;services-horizon,ingame,2024-09-06 10:39:13 -01007DA0140E8000,"Miitopia™ Demo",services;crash;demo,menus,2023-02-24 11:50:58 -01004B7009F00000,"Miles & Kilo",,playable,2020-10-22 11:39:49 -0100976008FBE000,"Millie",,playable,2021-01-26 20:47:19 -0100F5700C9A8000,"MIND: Path to Thalamus",UE4,playable,2021-06-16 17:37:25 -0100D71004694000,"Minecraft",crash;ldn-broken,ingame,2024-09-29 12:08:59 -01006C100EC08000,"Minecraft Dungeons",nvdec;online-broken;UE4,playable,2024-06-26 22:10:43 -01007C6012CC8000,"Minecraft Legends",gpu;crash,ingame,2024-03-04 00:32:24 -01006BD001E06000,"Minecraft: Nintendo Switch Edition",ldn-broken,playable,2023-10-15 01:47:08 -01003EF007ABA000,"Minecraft: Story Mode - Season Two",online-broken,playable,2023-03-04 00:30:50 -010059C002AC2000,"Minecraft: Story Mode - The Complete Adventure",crash;online-broken,boots,2022-08-04 18:56:58 -0100B7500F756000,"Minefield",,playable,2022-10-05 15:03:29 -01003560119A6000,"Mini Motor Racing X",,playable,2021-04-13 17:54:49 -0100FB700DE1A000,"Mini Trains",,playable,2020-07-29 23:06:20 -010039200EC66000,"Miniature - The Story Puzzle",UE4,playable,2022-09-14 17:18:50 -010069200EB80000,"Ministry of Broadcast",,playable,2022-08-10 00:31:16 -0100C3F000BD8000,"Minna de Wai Wai! Spelunker",crash,nothing,2021-11-03 07:17:11 -0100FAE010864000,"Minoria",,playable,2022-08-06 18:50:50 -01005AB015994000,"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",gpu,playable,2022-03-28 02:22:24 -0100CFA0138C8000,"Missile Dancer",,playable,2021-01-31 12:22:03 -0100E3601495C000,"Missing Features: 2D",,playable,2022-10-28 20:52:54 -010059200CC40000,"Mist Hunter",,playable,2021-06-16 13:58:58 -0100F65011E52000,"Mittelborg: City of Mages",,playable,2020-08-12 19:58:06 -0100876015D74000,"MLB® The Show™ 22",gpu;slow,ingame,2023-04-25 06:28:43 -0100A9F01776A000,"MLB® The Show™ 22 Tech Test",services;crash;Needs Update;demo,nothing,2022-12-09 10:28:34 -0100913019170000,"MLB® The Show™ 23",gpu,ingame,2024-07-26 00:56:50 -0100E2E01C32E000,"MLB® The Show™ 24",services-horizon,nothing,2024-03-31 04:54:11 -010011300F74C000,"MO:Astray",crash,ingame,2020-12-11 21:45:44 -010020400BDD2000,"Moai VI: Unexpected Guests",slow,playable,2020-10-27 16:40:20 -0100D8700B712000,"Modern Combat Blackout",crash,nothing,2021-03-29 19:47:15 -010004900D772000,"Modern Tales: Age of Invention",slow,playable,2022-10-12 11:20:19 -0100B8500D570000,"Moero Chronicle™ Hyper",32-bit,playable,2022-08-11 07:21:56 -01004EB0119AC000,"Moero Crystal H",32-bit;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22 -0100B46017500000,"MOFUMOFUSENSEN",gpu,menus,2024-09-21 21:51:08 -01004A400C320000,"Momodora: Reverie Under the Moonlight",deadlock,nothing,2022-02-06 03:47:43 -01002CC00BC4C000,"Momonga Pinball Adventures",,playable,2022-09-20 16:00:40 -010093100DA04000,"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",gpu,ingame,2023-09-22 10:21:46 -0100FBD00ED24000,"MONKEY BARRELS",,playable,2022-09-14 17:28:52 -01004C500B8E0000,"Monkey King: Master of the Clouds",,playable,2020-09-28 22:35:48 -01003030161DC000,"Monomals",gpu,ingame,2024-08-06 22:02:51 -0100F3A00FB78000,"Mononoke Slashdown",crash,menus,2022-05-04 20:55:47 -01007430037F6000,"MONOPOLY® for Nintendo Switch™",nvdec;online-broken,playable,2024-02-06 23:13:01 -01005FF013DC2000,"MONOPOLY® Madness",,playable,2022-01-29 21:13:52 -0100E2D0128E6000,"Monster Blast",gpu,ingame,2023-09-02 20:02:32 -01006F7001D10000,"Monster Boy and the Cursed Kingdom",nvdec,playable,2022-08-04 20:06:32 -01005FC01000E000,"Monster Bugs Eat People",,playable,2020-07-26 02:05:34 -0100742007266000,"Monster Energy Supercross - The Official Videogame",nvdec;UE4,playable,2022-08-04 20:25:00 -0100F8100B982000,"Monster Energy Supercross - The Official Videogame 2",nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24 -010097800EA20000,"Monster Energy Supercross - The Official Videogame 3",UE4;audout;nvdec;online,playable,2021-06-14 12:37:54 -0100E9900ED74000,"Monster Farm",32-bit;nvdec,playable,2021-05-05 19:29:13 -0100770008DD8000,"Monster Hunter Generations Ultimate™",32-bit;online-broken;ldn-works,playable,2024-03-18 14:35:36 -0100B04011742000,"Monster Hunter Rise",gpu;slow;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59 -010093A01305C000,"Monster Hunter Rise Demo",online-broken;ldn-works;demo,playable,2022-10-18 23:04:17 -0100E21011446000,"Monster Hunter Stories 2: Wings of Ruin",services,ingame,2022-07-10 19:27:30 -010042501329E000,"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",demo,playable,2022-11-13 22:20:26 -,"Monster Hunter XX Demo",32-bit;cpu,nothing,2020-03-22 10:12:28 -0100C3800049C000,"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",,playable,2024-07-21 14:08:09 -010088400366E000,"Monster Jam Crush It!",UE4;nvdec;online,playable,2021-04-08 19:29:27 -010095C00F354000,"Monster Jam Steel Titans",crash;nvdec;UE4,menus,2021-11-14 09:45:38 -010051B0131F0000,"Monster Jam Steel Titans 2",nvdec;UE4,playable,2022-10-24 17:17:59 -01004DE00DD44000,"Monster Puzzle",,playable,2020-09-28 22:23:10 -0100A0F00DA68000,"Monster Sanctuary",crash,ingame,2021-04-04 05:06:41 -0100D30010C42000,"Monster Truck Championship",slow;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51 -01004E10142FE000,"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",crash,ingame,2021-07-23 10:56:44 -010039F00EF70000,"Monstrum",,playable,2021-01-31 11:07:26 -0100C2E00B494000,"Moonfall Ultimate",nvdec,playable,2021-01-17 14:01:25 -0100E3D014ABC000,"Moorhuhn Jump and Run 'Traps and Treasures'",,playable,2024-03-08 15:10:02 -010045C00F274000,"Moorhuhn Kart 2",online-broken,playable,2022-10-28 21:10:35 -010040E00F642000,"Morbid: The Seven Acolytes",,playable,2022-08-09 17:21:58 -01004230123E0000,"More Dark",,playable,2020-12-15 16:01:06 -01005DA003E6E000,"Morphies Law",UE4;crash;ldn-untested;nvdec;online,menus,2020-11-22 17:05:29 -0100776003F0C000,"Morphite",,playable,2021-01-05 19:40:55 -0100F2200C984000,"Mortal Kombat 11",slow;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17 -01006560184E6000,"Mortal Kombat™ 1",gpu,ingame,2024-09-04 15:45:47 -010032800D740000,"Mosaic",,playable,2020-08-11 13:07:35 -01002ED00B01C000,"Moto Racer 4",UE4;nvdec;online,playable,2021-04-08 19:09:11 -01003F200D0F2000,"Moto Rush GT",,playable,2022-08-05 11:23:55 -0100361007268000,"MotoGP™18",nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45 -01004B800D0E8000,"MotoGP™19",nvdec;online-broken;UE4,playable,2022-08-05 11:54:14 -01001FA00FBBC000,"MotoGP™20",ldn-untested,playable,2022-09-29 17:58:01 -01000F5013820000,"MotoGP™21",gpu;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08 -010040401D564000,"MotoGP™24",gpu,ingame,2024-05-10 23:41:00 -01002A900D6D6000,"Motorsport Manager for Nintendo Switch™",nvdec,playable,2022-08-05 12:48:14 -01009DB00D6E0000,"Mountain Rescue Simulator",,playable,2022-09-20 16:36:48 -0100C4C00E73E000,"Moving Out",nvdec,playable,2021-06-07 21:17:24 -0100D3300F110000,"Mr Blaster",,playable,2022-09-14 17:56:24 -0100DCA011262000,"Mr. DRILLER DrillLand",nvdec,playable,2020-07-24 13:56:48 -010031F002B66000,"Mr. Shifty",slow,playable,2020-05-08 15:28:16 -01005EF00B4BC000,"Ms. Splosion Man",online,playable,2020-05-09 20:45:43 -010087C009246000,"Muddledash",services,ingame,2020-05-08 16:46:14 -01009D200952E000,"MudRunner - American Wilds",gpu;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52 -010073E008E6E000,"Mugsters",,playable,2021-01-28 17:57:17 -0100A8400471A000,"MUJO",,playable,2020-05-08 16:31:04 -0100211005E94000,"Mulaka",,playable,2021-01-28 18:07:20 -010038B00B9AE000,"Mummy Pinball",,playable,2022-08-05 16:08:11 -01008E200C5C2000,"Muse Dash",,playable,2020-06-06 14:41:29 -010035901046C000,"Mushroom Quest",,playable,2020-05-17 13:07:08 -0100700006EF6000,"Mushroom Wars 2",nvdec,playable,2020-09-28 15:26:08 -010046400F310000,"Music Racer",,playable,2020-08-10 08:51:23 -,"Musou Orochi 2 Ultimate",crash;nvdec,boots,2021-04-09 19:39:16 -0100F6000EAA8000,"Must Dash Amigos",,playable,2022-09-20 16:45:56 -01007B6006092000,"MUSYNX",,playable,2020-05-08 14:24:43 -0100C3E00ACAA000,"Mutant Football League: Dynasty Edition",online-broken,playable,2022-08-05 17:01:51 -01004BE004A86000,"Mutant Mudds Collection",,playable,2022-08-05 17:11:38 -0100E6B00DEA4000,"Mutant Year Zero: Road to Eden - Deluxe Edition",nvdec;UE4,playable,2022-09-10 13:31:10 -0100161009E5C000,"MX Nitro: Unleashed",,playable,2022-09-27 22:34:33 -0100218011E7E000,"MX vs ATV All Out",nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46 -0100D940063A0000,"MXGP3 - The Official Motocross Videogame",UE4;gpu;nvdec,ingame,2020-12-16 14:00:20 -01002C6012334000,"My Aunt is a Witch",,playable,2022-10-19 09:21:17 -0100F6F0118B8000,"My Butler",,playable,2020-06-27 13:46:23 -010031200B94C000,"My Friend Pedro",nvdec,playable,2021-05-28 11:19:17 -01000D700BE88000,"My Girlfriend is a Mermaid!?",nvdec,playable,2020-05-08 13:32:55 -010039000B68E000,"MY HERO ONE'S JUSTICE",UE4;crash;gpu;online,menus,2020-12-10 13:11:04 -01007E700DBF6000,"MY HERO ONE'S JUSTICE 2",UE4;gpu;nvdec,ingame,2020-12-18 14:08:47 -0100E4701373E000,"My Hidden Things",,playable,2021-04-15 11:26:06 -0100872012B34000,"My Little Dog Adventure",gpu,ingame,2020-12-10 17:47:37 -01008C600395A000,"My Little Riding Champion",slow,playable,2020-05-08 17:00:53 -010086B00C784000,"My Lovely Daughter: ReBorn",,playable,2022-11-24 17:25:32 -0100E7700C284000,"My Memory of Us",,playable,2022-08-20 11:03:14 -010028F00ABAE000,"My Riding Stables - Life with Horses",,playable,2022-08-05 21:39:07 -010042A00FBF0000,"My Riding Stables 2: A New Adventure",,playable,2021-05-16 14:14:59 -0100E25008E68000,"My Time at Portia",,playable,2021-05-28 12:42:55 -0100158011A08000,"My Universe - Cooking Star Restaurant",,playable,2022-10-19 10:00:44 -0100F71011A0A000,"My Universe - Fashion Boutique",nvdec,playable,2022-10-12 14:54:19 -0100CD5011A02000,"My Universe - PET CLINIC CATS & DOGS",crash;nvdec,boots,2022-02-06 02:05:53 -01006C301199C000,"My Universe - School Teacher",nvdec,playable,2021-01-21 16:02:52 -01000D5005974000,"N++ (NPLUSPLUS)",,playable,2022-08-05 21:54:58 -0100A6F00AC70000,"NAIRI: Tower of Shirin",nvdec,playable,2020-08-09 19:49:12 -010002F001220000,"NAMCO MUSEUM",ldn-untested,playable,2024-08-13 07:52:21 -0100DAA00AEE6000,"NAMCO MUSEUM™ ARCADE PAC™",,playable,2021-06-07 21:44:50 -,"NAMCOT COLLECTION",audio,playable,2020-06-25 13:35:22 -010072B00BDDE000,"Narcos: Rise of the Cartels",UE4;crash;nvdec,boots,2021-03-22 13:18:47 -01006BB00800A000,"NARUTO SHIPPUDEN: Ultimate Ninja STORM 3 Full Burst",nvdec,playable,2024-06-16 14:58:05 -010084D00CF5E000,"NARUTO SHIPPUDEN™: Ultimate Ninja® STORM 4 ROAD TO BORUTO",,playable,2024-06-29 13:04:22 -0100D2D0190A4000,"NARUTO X BORUTO Ultimate Ninja STORM CONNECTIONS",services-horizon,nothing,2024-07-25 05:16:48 -0100715007354000,"NARUTO: Ultimate Ninja STORM",nvdec,playable,2022-08-06 14:10:31 -0100545016D5E000,"NASCAR Rivals",crash;Incomplete,ingame,2023-04-21 01:17:47 -0100103011894000,"Naught",UE4,playable,2021-04-26 13:31:45 -01001AE00C1B2000,"NBA 2K Playgrounds 2",nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38 -0100760002048000,"NBA 2K18",gpu;ldn-untested,ingame,2022-08-06 14:17:51 -01001FF00B544000,"NBA 2K19",crash;ldn-untested;services,nothing,2021-04-16 13:07:21 -0100E24011D1E000,"NBA 2K21",gpu,boots,2022-10-05 15:31:51 -0100ACA017E4E800,"NBA 2K23",,boots,2023-10-10 23:07:14 -010006501A8D8000,"NBA 2K24 Kobe Bryant Edition",cpu;gpu,boots,2024-08-11 18:23:08 -010002900294A000,"NBA Playgrounds",nvdec;online-broken;UE4,playable,2022-08-06 17:06:59 -0100F5A008126000,"NBA Playgrounds - Enhanced Edition",nvdec;online-broken;UE4,playable,2022-08-06 16:13:44 -0100BBC00E4F8000,"Need a packet?",,playable,2020-08-12 16:09:01 -010029B0118E8000,"Need for Speed™ Hot Pursuit Remastered",online-broken,playable,2024-03-20 21:58:02 -010023500B0BA000,"Nefarious",,playable,2020-12-17 03:20:33 -01008390136FC000,"Negative: The Way of Shinobi",nvdec,playable,2021-03-24 11:29:41 -010065F00F55A000,"Neighbours back From Hell",nvdec,playable,2022-10-12 15:36:48 -0100B4900AD3E000,"NEKOPARA Vol.1",nvdec,playable,2022-08-06 18:25:54 -010012900C782000,"NEKOPARA Vol.2",,playable,2020-12-16 11:04:47 -010045000E418000,"NEKOPARA Vol.3",,playable,2022-10-03 12:49:04 -010049F013656000,"NEKOPARA Vol.4",crash,ingame,2021-01-17 01:47:18 -01006ED00BC76000,"Nelke & the Legendary Alchemists ~Ateliers of the New World~",,playable,2021-01-28 19:39:42 -01005F000B784000,"Nelly Cootalot: The Fowl Fleet",,playable,2020-06-11 20:55:42 -01001AB0141A8000,"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",crash,ingame,2021-07-18 07:29:18 -0100EBB00D2F4000,"Neo Cab",,playable,2021-04-24 00:27:58 -010040000DB98000,"Neo Cab Demo",crash,boots,2020-06-16 00:14:00 -010006D0128B4000,"NEOGEO POCKET COLOR SELECTION Vol.1",,playable,2023-07-08 20:55:36 -0100BAB01113A000,"Neon Abyss",,playable,2022-10-05 15:59:44 -010075E0047F8000,"Neon Chrome",,playable,2022-08-06 18:38:34 -010032000EAC6000,"Neon Drive",,playable,2022-09-10 13:45:48 -0100B9201406A000,"Neon White",crash,ingame,2023-02-02 22:25:06 -0100743008694000,"Neonwall",nvdec,playable,2022-08-06 18:49:52 -01001A201331E000,"Neoverse Trinity Edition",,playable,2022-10-19 10:28:03 -01000B2011352000,"Nerdook Bundle Vol. 1",gpu;slow,ingame,2020-10-07 14:27:10 -01008B0010160000,"Nerved",UE4,playable,2022-09-20 17:14:03 -0100BA0004F38000,"NeuroVoider",,playable,2020-06-04 18:20:05 -0100C20012A54000,"Nevaeh",gpu;nvdec,ingame,2021-06-16 17:29:03 -010039801093A000,"Never Breakup",,playable,2022-10-05 16:12:12 -0100F79012600000,"Neverending Nightmares",crash;gpu,boots,2021-04-24 01:43:35 -0100A9600EDF8000,"Neverlast",slow,ingame,2020-07-13 23:55:19 -010013700DA4A000,"Neverwinter Nights: Enhanced Edition",gpu;nvdec,menus,2024-09-30 02:59:19 -01004C200100E000,"New Frontier Days ~Founding Pioneers~",,playable,2020-12-10 12:45:07 -0100F4300BF2C000,"New Pokémon Snap™",,playable,2023-01-15 23:26:57 -010017700B6C2000,"New Super Lucky's Tale",,playable,2024-03-11 14:14:10 -0100EA80032EA000,"New Super Mario Bros.™ U Deluxe",32-bit,playable,2023-10-08 02:06:37 -0100B9500E886000,"Newt One",,playable,2020-10-17 21:21:48 -01005A5011A44000,"Nexomon: Extinction",,playable,2020-11-30 15:02:22 -0100B69012EC6000,"Nexoria: Dungeon Rogue Heroes",gpu,ingame,2021-10-04 18:41:29 -0100271004570000,"Next Up Hero",online,playable,2021-01-04 22:39:36 -0100E5600D446000,"Ni no Kuni: Wrath of the White Witch",32-bit;nvdec,boots,2024-07-12 04:52:59 -0100EDD00D530000,"Nice Slice",nvdec,playable,2020-06-17 15:13:27 -01000EC010BF4000,"Niche - a genetics survival game",nvdec,playable,2020-11-27 14:01:11 -010010701AFB2000,"Nickelodeon All-Star Brawl 2",,playable,2024-06-03 14:15:01 -0100D6200933C000,"Nickelodeon Kart Racers",,playable,2021-01-07 12:16:49 -010058800F860000,"Nicky - The Home Alone Golf Ball",,playable,2020-08-08 13:45:39 -0100A95012668000,"Nicole",audout,playable,2022-10-05 16:41:44 -0100B8E016F76000,"NieR:Automata The End of YoRHa Edition",slow;crash,ingame,2024-05-17 01:06:34 -0100F3A0095A6000,"Night Call",nvdec,playable,2022-10-03 12:57:00 -0100921006A04000,"Night in the Woods",,playable,2022-12-03 20:17:54 -0100D8500A692000,"Night Trap - 25th Anniversary Edition",nvdec,playable,2022-08-08 13:16:14 -01005F4009112000,"Nightmare Boy: The New Horizons of Reigns of Dreams, a Metroidvania journey with little rusty nightmares, the empire of knight final boss",,playable,2021-01-05 15:52:29 -01006E700B702000,"Nightmares from the Deep 2: The Siren`s Call",nvdec,playable,2022-10-19 10:58:53 -0100628004BCE000,"Nights of Azure 2: Bride of the New Moon",crash;nvdec;regression,menus,2022-11-24 16:00:39 -010042300C4F6000,"Nightshade/百花百狼",nvdec,playable,2020-05-10 19:43:31 -0100AA0008736000,"Nihilumbra",,playable,2020-05-10 16:00:12 -0100D03003F0E000,"Nine Parchments",ldn-untested,playable,2022-08-07 12:32:08 -0100E2F014F46000,"NINJA GAIDEN Σ",nvdec,playable,2022-11-13 16:27:02 -0100696014F4A000,"NINJA GAIDEN Σ2",nvdec,playable,2024-07-31 21:53:48 -01002AF014F4C000,"NINJA GAIDEN: Master Collection",nvdec,playable,2023-08-11 08:25:31 -010088E003A76000,"Ninja Shodown",,playable,2020-05-11 12:31:21 -010081D00A480000,"Ninja Striker!",,playable,2020-12-08 19:33:29 -0100CCD0073EA000,"Ninjala",online-broken;UE4,boots,2024-07-03 20:04:49 -010003C00B868000,"Ninjin: Clash of Carrots",online-broken,playable,2024-07-10 05:12:26 -0100746010E4C000,"NinNinDays",,playable,2022-11-20 15:17:29 -0100C9A00ECE6000,"Nintendo 64™ – Nintendo Switch Online",gpu;vulkan,ingame,2024-04-23 20:21:07 -0100D870045B6000,"Nintendo Entertainment System™ - Nintendo Switch Online",online,playable,2022-07-01 15:45:06 -0100C4B0034B2000,"Nintendo Labo Toy-Con 01 Variety Kit",gpu,ingame,2022-08-07 12:56:07 -01001E9003502000,"Nintendo Labo Toy-Con 03 Vehicle Kit",services;crash,menus,2022-08-03 17:20:11 -0100165003504000,"Nintendo Labo Toy-Con 04 VR Kit",services;crash,boots,2023-01-17 22:30:24 -01009AB0034E0000,"Nintendo Labo™ Toy-Con 02: Robot Kit",gpu,ingame,2022-08-07 13:03:19 -0100D2F00D5C0000,"Nintendo Switch™ Sports",deadlock,boots,2024-09-10 14:20:24 -01000EE017182000,"Nintendo Switch™ Sports Online Play Test",gpu,ingame,2022-03-16 07:44:12 -010037200C72A000,"Nippon Marathon",nvdec,playable,2021-01-28 20:32:46 -010020901088A000,"Nirvana Pilot Yume",,playable,2022-10-29 11:49:49 -01009B400ACBA000,"No Heroes Here",online,playable,2020-05-10 02:41:57 -0100853015E86000,"No Man's Sky",gpu,ingame,2024-07-25 05:18:17 -0100F0400F202000,"No More Heroes",32-bit,playable,2022-09-13 07:44:27 -010071400F204000,"No More Heroes 2: Desperate Struggle",32-bit;nvdec,playable,2022-11-19 01:38:13 -01007C600EB42000,"No More Heroes 3",gpu;UE4,ingame,2024-03-11 17:06:19 -01009F3011004000,"No Straight Roads",nvdec,playable,2022-10-05 17:01:38 -0100F7D00A1BC000,"NO THING",,playable,2021-01-04 19:06:01 -0100542012884000,"Nongunz: Doppelganger Edition",,playable,2022-10-29 12:00:39 -010016E011EFA000,"Norman's Great Illusion",,playable,2020-12-15 19:28:24 -01001A500AD6A000,"Norn9 ~Norn + Nonette~ LOFN",nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16 -01004840086FE000,"NORTH",nvdec,playable,2021-01-05 16:17:44 -0100A9E00D97A000,"Northgard",crash,menus,2022-02-06 02:05:35 -01008AE019614000,"nOS new Operating System",,playable,2023-03-22 16:49:08 -0100CB800B07E000,"NOT A HERO: SUPER SNAZZY EDITION",,playable,2021-01-28 19:31:24 -01004D500D9BE000,"Not Not - A Brain Buster",,playable,2020-05-10 02:05:26 -0100DAF00D0E2000,"Not Tonight: Take Back Control Edition",nvdec,playable,2022-10-19 11:48:47 -0100343013248000,"Nubarron: The adventure of an unlucky gnome",,playable,2020-12-17 16:45:17 -01005140089F6000,"Nuclien",,playable,2020-05-10 05:32:55 -010002700C34C000,"Numbala",,playable,2020-05-11 12:01:07 -010020500C8C8000,"Number Place 10000",gpu,menus,2021-11-24 09:14:23 -010003701002C000,"Nurse Love Syndrome",,playable,2022-10-13 10:05:22 -0000000000000000,"nx-hbmenu",Needs Update;homebrew,boots,2024-04-06 22:05:32 -,"nxquake2",services;crash;homebrew,nothing,2022-08-04 23:14:04 -010049F00EC30000,"Nyan Cat: Lost in Space",online,playable,2021-06-12 13:22:03 -01002E6014FC4000,"O---O",,playable,2022-10-29 12:12:14 -010074600CC7A000,"OBAKEIDORO!",nvdec;online,playable,2020-10-16 16:57:34 -01002A000C478000,"Observer",UE4;gpu;nvdec,ingame,2021-03-03 20:19:45 -01007D7001D0E000,"Oceanhorn - Monster of Uncharted Seas",,playable,2021-01-05 13:55:22 -01006CB010840000,"Oceanhorn 2: Knights of the Lost Realm",,playable,2021-05-21 18:26:10 -010096B00A08E000,"Octocopter: Double or Squids",,playable,2021-01-06 01:30:16 -0100CAB006F54000,"Octodad: Dadliest Catch",crash,boots,2021-04-23 15:26:12 -0100A3501946E000,"OCTOPATH TRAVELER II",gpu;amd-vendor-bug,ingame,2024-09-22 11:39:20 -010057D006492000,"Octopath Traveler™",UE4;crash;gpu,ingame,2020-08-31 02:34:36 -010084300C816000,"Odallus: The Dark Call",,playable,2022-08-08 12:37:58 -0100BB500EE3C000,"Oddworld: Munch's Oddysee",gpu;nvdec,ingame,2021-06-17 12:11:50 -01005E700ABB8000,"Oddworld: New 'n' Tasty",nvdec,playable,2021-06-17 17:51:32 -0100D210177C6000,"ODDWORLD: SOULSTORM",services-horizon;crash,boots,2024-08-18 13:13:26 -01002EA00ABBA000,"Oddworld: Stranger's Wrath",crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21 -010029F00C876000,"Odium to the Core",gpu,ingame,2021-01-08 14:03:52 -01006F5013202000,"Off And On Again",,playable,2022-10-29 19:46:26 -01003CD00E8BC000,"Offroad Racing - Buggy X ATV X Moto",online-broken;UE4,playable,2022-09-14 18:53:22 -01003B900AE12000,"Oh My Godheads: Party Edition",,playable,2021-04-15 11:04:11 -0100F45006A00000,"Oh...Sir! The Hollywood Roast",,ingame,2020-12-06 00:42:30 -010030B00B2F6000,"OK K.O.! Let’s Play Heroes",nvdec,playable,2021-01-11 18:41:02 -0100276009872000,"OKAMI HD",nvdec,playable,2024-04-05 06:24:58 -01006AB00BD82000,"OkunoKA",online-broken,playable,2022-08-08 14:41:51 -0100CE2007A86000,"Old Man's Journey",nvdec,playable,2021-01-28 19:16:52 -0100C3D00923A000,"Old School Musical",,playable,2020-12-10 12:51:12 -010099000BA48000,"Old School Racer 2",,playable,2020-10-19 12:11:26 -0100E0200B980000,"OlliOlli: Switch Stance",gpu,boots,2024-04-25 08:36:37 -0100F9D00C186000,"Olympia Soiree",,playable,2022-12-04 21:07:12 -0100A8B00E14A000,"Olympic Games Tokyo 2020 – The Official Video Game™",ldn-untested;nvdec;online,playable,2021-01-06 01:20:24 -01001D600E51A000,"Omega Labyrinth Life",,playable,2021-02-23 21:03:03 -,"Omega Vampire",nvdec,playable,2020-10-17 19:15:35 -0100CDC00C40A000,"Omensight: Definitive Edition",UE4;crash;nvdec,ingame,2020-07-26 01:45:14 -01006DB00D970000,"OMG Zombies!",32-bit,playable,2021-04-12 18:04:45 -010014E017B14000,"OMORI",,playable,2023-01-07 20:21:02 -,"Once Upon A Coma",nvdec,playable,2020-08-01 12:09:39 -0100BD3006A02000,"One More Dungeon",,playable,2021-01-06 09:10:58 -010076600FD64000,"One Person Story",,playable,2020-07-14 11:51:02 -0100774009CF6000,"ONE PIECE Pirate Warriors 3 Deluxe Edition",nvdec,playable,2020-05-10 06:23:52 -01008FE00E2F6000,"ONE PIECE: PIRATE WARRIORS 4",online-broken;ldn-untested,playable,2022-09-27 22:55:46 -0100574002AF4000,"ONE PIECE: Unlimited World Red Deluxe Edition",,playable,2020-05-10 22:26:32 -0100EEA00E3EA000,"One-Way Ticket",UE4,playable,2020-06-20 17:20:49 -0100463013246000,"Oneiros",,playable,2022-10-13 10:17:22 -010057C00D374000,"Oniken",,playable,2022-09-10 14:22:38 -010037900C814000,"Oniken: Unstoppable Edition",,playable,2022-08-08 14:52:06 -0100416008A12000,"Onimusha: Warlords",nvdec,playable,2020-07-31 13:08:39 -0100CF4011B2A000,"OniNaki",nvdec,playable,2021-02-27 21:52:42 -010074000BE8E000,"oOo: Ascension",,playable,2021-01-25 14:13:34 -0100D5400BD90000,"Operación Triunfo 2017",services;nvdec,ingame,2022-08-08 15:06:42 -01006CF00CFA4000,"Operencia: The Stolen Sun",UE4;nvdec,playable,2021-06-08 13:51:07 -01004A200BE82000,"OPUS Collection",,playable,2021-01-25 15:24:04 -010049C0075F0000,"OPUS: The Day We Found Earth",nvdec,playable,2021-01-21 18:29:31 -0100F9A012892000,"Ord.",,playable,2020-12-14 11:59:06 -010061D00DB74000,"Ori and the Blind Forest: Definitive Edition",nvdec;online-broken,playable,2022-09-14 19:58:13 -010005800F46E000,"Ori and the Blind Forest: Definitive Edition Demo",,playable,2022-09-10 14:40:12 -01008DD013200000,"Ori and the Will of the Wisps",gpu,ingame,2025-01-11 06:09:54 -01006C70102EA000,"Orn: The Tiny Forest Sprite",UE4;gpu,ingame,2020-08-07 14:25:30 -0100E5900F49A000,"Othercide",nvdec,playable,2022-10-05 19:04:38 -01006AA00EE44000,"Otokomizu",,playable,2020-07-13 21:00:44 -01006AF013A9E000,"Otti: The House Keeper",,playable,2021-01-31 12:11:24 -01000320060AC000,"OTTTD: Over The Top Tower Defense",slow,ingame,2020-10-10 19:31:07 -010097F010FE6000,"Our Two Bedroom Story",gpu;nvdec,ingame,2023-10-10 17:41:20 -0100D5D00C6BE000,"Our World Is Ended.",nvdec,playable,2021-01-19 22:46:57 -01005A700A166000,"OUT OF THE BOX",,playable,2021-01-28 01:34:27 -0100D9F013102000,"Outbreak Lost Hope",crash,boots,2021-04-26 18:01:23 -01006EE013100000,"Outbreak The Nightmare Chronicles",,playable,2022-10-13 10:41:57 -0100A0D013464000,"Outbreak: Endless Nightmares",,playable,2022-10-29 12:35:49 -0100C850130FE000,"Outbreak: Epidemic",,playable,2022-10-13 10:27:31 -0100B450130FC000,"Outbreak: The New Nightmare",,playable,2022-10-19 15:42:07 -0100B8900EFA6000,"Outbuddies DX",gpu,ingame,2022-08-04 22:39:24 -0100DE70085E8000,"Outlast 2",crash;nvdec,ingame,2022-01-22 22:28:05 -01008D4007A1E000,"Outlast: Bundle of Terror",nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26 -01009B900401E000,"Overcooked Special Edition",,playable,2022-08-08 20:48:52 -01006FD0080B2000,"Overcooked! 2",ldn-untested,playable,2022-08-08 16:48:10 -0100F28011892000,"Overcooked! All You Can Eat",ldn-untested;online,playable,2021-04-15 10:33:52 -0100D7F00EC64000,"Overlanders",nvdec;UE4,playable,2022-09-14 20:15:06 -01008EA00E816000,"OVERPASS™",online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47 -0100647012F62000,"Override 2: Super Mech League",online-broken;UE4,playable,2022-10-19 15:56:04 -01008A700F7EE000,"Override: Mech City Brawl - Super Charged Mega Edition",nvdec;online-broken;UE4,playable,2022-09-20 17:33:32 -0100F8600E21E000,"Overwatch® 2",deadlock,boots,2022-09-14 20:22:22 -01005F000CC18000,"OVERWHELM",,playable,2021-01-21 18:37:18 -0100BC2004FF4000,"Owlboy",,playable,2020-10-19 14:24:45 -0100AD9012510000,"PAC-MAN™ 99",gpu;online-broken,ingame,2024-04-23 00:48:25 -010024C001224000,"PAC-MAN™ CHAMPIONSHIP EDITION 2 PLUS",,playable,2021-01-19 22:06:18 -011123900AEE0000,"Paladins",online,menus,2021-01-21 19:21:37 -0100F0D004CAE000,"PAN-PAN A tiny big adventure",audout,playable,2021-01-25 14:42:00 -010083700B730000,"Pang Adventures",,playable,2021-04-10 12:16:59 -010006E00DFAE000,"Pantsu Hunter: Back to the 90s",,playable,2021-02-19 15:12:27 -0100C6A00E94A000,"Panzer Dragoon: Remake",,playable,2020-10-04 04:03:55 -01004AE0108E0000,"Panzer Paladin",,playable,2021-05-05 18:26:00 -010004500DE50000,"Paper Dolls Original",UE4;crash,boots,2020-07-13 20:26:21 -0100A3900C3E2000,"Paper Mario™: The Origami King",audio;Needs Update,playable,2024-08-09 18:27:40 -0100ECD018EBE000,"Paper Mario™: The Thousand-Year Door",gpu;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35 -01006AD00B82C000,"Paperbound Brawlers",,playable,2021-01-25 14:32:15 -0100DC70174E0000,"Paradigm Paradox",vulkan-backend-bug,playable,2022-12-03 22:28:13 -01007FB010DC8000,"Paradise Killer",UE4,playable,2022-10-05 19:33:05 -010063400B2EC000,"Paranautical Activity",,playable,2021-01-25 13:49:19 -01006B5012B32000,"Part Time UFO™",crash,ingame,2023-03-03 03:13:05 -01007FC00A040000,"Party Arcade",online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53 -0100B8E00359E000,"Party Golf",nvdec,playable,2022-08-09 12:38:30 -010022801217E000,"Party Hard 2",nvdec,playable,2022-10-05 20:31:48 -010027D00F63C000,"Party Treats",,playable,2020-07-02 00:05:00 -01001E500EA16000,"Path of Sin: Greed",crash,menus,2021-11-24 08:00:00 -010031F006E76000,"Pato Box",,playable,2021-01-25 15:17:52 -01001F201121E000,"PAW Patrol Mighty Pups Save Adventure Bay",,playable,2022-10-13 12:17:55 -0100360016800000,"PAW Patrol: Grand Prix",gpu,ingame,2024-05-03 16:16:11 -0100CEC003A4A000,"PAW Patrol: On a Roll!",nvdec,playable,2021-01-28 21:14:49 -01000C4015030000,"Pawapoke R",services-horizon,nothing,2024-05-14 14:28:32 -0100A56006CEE000,"Pawarumi",online-broken,playable,2022-09-10 15:19:33 -0100274004052000,"PAYDAY 2",nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39 -010085700ABC8000,"PBA Pro Bowling",nvdec;online-broken;UE4,playable,2022-09-14 23:00:49 -0100F95013772000,"PBA Pro Bowling 2021",online-broken;UE4,playable,2022-10-19 16:46:40 -010072800CBE8000,"PC Building Simulator",,playable,2020-06-12 00:31:58 -010002100CDCC000,"Peaky Blinders: Mastermind",,playable,2022-10-19 16:56:35 -010028A0048A6000,"Peasant Knight",,playable,2020-12-22 09:30:50 -0100C510049E0000,"Penny-Punching Princess",,playable,2022-08-09 13:37:05 -0100CA901AA9C000,"Penny’s Big Breakaway",amd-vendor-bug,playable,2024-05-27 07:58:51 -0100563005B70000,"Perception",UE4;crash;nvdec,menus,2020-12-18 11:49:23 -010011700D1B2000,"Perchang",,playable,2021-01-25 14:19:52 -010089F00A3B4000,"Perfect Angle",,playable,2021-01-21 18:48:45 -01005CD012DC0000,"Perky Little Things",crash;vulkan,boots,2024-08-04 07:22:46 -01005EB013FBA000,"Persephone",,playable,2021-03-23 22:39:19 -0100A0300FC3E000,"Perseverance",,playable,2020-07-13 18:48:27 -010062B01525C000,"Persona 4 Golden",,playable,2024-08-07 17:48:07 -01005CA01580E000,"Persona 5 Royal",gpu,ingame,2024-08-17 21:45:15 -010087701B092000,"Persona 5 Tactica",,playable,2024-04-01 22:21:03 -,"Persona 5: Scramble",deadlock,boots,2020-10-04 03:22:29 -0100801011C3E000,"Persona® 5 Strikers",nvdec;mac-bug,playable,2023-09-26 09:36:01 -010044400EEAE000,"Petoons Party",nvdec,playable,2021-03-02 21:07:58 -010053401147C000,"PGA TOUR 2K21",deadlock;nvdec,ingame,2022-10-05 21:53:50 -0100DDD00C0EA000,"Phantaruk",,playable,2021-06-11 18:09:54 -0100063005C86000,"Phantom Breaker: Battle Grounds Overdrive",audio;nvdec,playable,2024-02-29 14:20:35 -010096F00E5B0000,"Phantom Doctrine",UE4,playable,2022-09-15 10:51:50 -0100C31005A50000,"Phantom Trigger",,playable,2022-08-09 14:27:30 -0100CB000A142000,"Phoenix Wright: Ace Attorney Trilogy",,playable,2023-09-15 22:03:12 -0100DA400F624000,"PHOGS!",online,playable,2021-01-18 15:18:37 -0100BF1003B9A000,"Physical Contact: 2048",slow,playable,2021-01-25 15:18:32 -01008110036FE000,"Physical Contact: SPEED",,playable,2022-08-09 14:40:46 -010077300A86C000,"PIANISTA",online-broken,playable,2022-08-09 14:52:56 -010012100E8DC000,"PICROSS LORD OF THE NAZARICK",,playable,2023-02-08 15:54:56 -0100C9600A88E000,"PICROSS S2",,playable,2020-10-15 12:01:40 -010079200D330000,"PICROSS S3",,playable,2020-10-15 11:55:27 -0100C250115DC000,"PICROSS S4",,playable,2020-10-15 12:33:46 -0100AC30133EC000,"PICROSS S5",,playable,2022-10-17 18:51:42 -010025901432A000,"PICROSS S6",,playable,2022-10-29 17:52:19 -01009B2016104000,"PICROSS S7",,playable,2022-02-16 12:51:25 -010043B00E1CE000,"PictoQuest",,playable,2021-02-27 15:03:16 -0100D06003056000,"Piczle Lines DX",UE4;crash;nvdec,menus,2020-11-16 04:21:31 -010017600B532000,"Piczle Lines DX 500 More Puzzles!",UE4,playable,2020-12-15 23:42:51 -01000FD00D5CC000,"Pig Eat Ball",services,ingame,2021-11-30 01:57:45 -01001CB0106F8000,"Pikmin 3 Deluxe Demo",32-bit;crash;demo;gpu,ingame,2021-06-16 18:38:07 -0100E0B019974000,"Pikmin 4 Demo",gpu;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08 -0100AA80194B0000,"Pikmin™ 1",audio,ingame,2024-05-28 18:56:11 -0100D680194B2000,"Pikmin™ 1+2",gpu,ingame,2023-07-31 08:53:41 -0100F4C009322000,"Pikmin™ 3 Deluxe",gpu;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26 -0100B7C00933A000,"Pikmin™ 4",gpu;crash;UE4,ingame,2024-08-26 03:39:08 -0100D6200E130000,"Pillars of Eternity: Complete Edition",,playable,2021-02-27 00:24:21 -01007A500B0B2000,"Pilot Sports",,playable,2021-01-20 15:04:17 -0100DA70186D4000,"Pinball FX",,playable,2024-05-03 17:09:11 -0100DB7003828000,"Pinball FX3",online-broken,playable,2022-11-11 23:49:07 -01002BA00D662000,"Pine",slow,ingame,2020-07-29 16:57:39 -010041100B148000,"Pinstripe",,playable,2020-11-26 10:40:40 -01002B20174EE000,"Piofiore: Episodio 1926",,playable,2022-11-23 18:36:05 -01009240117A2000,"Piofiore: Fated Memories",nvdec,playable,2020-11-30 14:27:50 -0100EA2013BCC000,"Pixel Game Maker Series Puzzle Pedestrians",,playable,2022-10-24 20:15:50 -0100859013CE6000,"Pixel Game Maker Series Werewolf Princess Kaguya",crash;services,nothing,2021-03-26 00:23:07 -010060A00F5E8000,"Pixel Gladiator",,playable,2020-07-08 02:41:26 -010000E00E612000,"Pixel Puzzle Makeout League",,playable,2022-10-13 12:34:00 -0100382011002000,"PixelJunk Eden 2",crash,ingame,2020-12-17 11:55:52 -0100E4D00A690000,"PixelJunk™ Monsters 2",,playable,2021-06-07 03:40:01 -01004A900C352000,"Pizza Titan Ultra",nvdec,playable,2021-01-20 15:58:42 -05000FD261232000,"Pizza Tower",crash,ingame,2024-09-16 00:21:56 -0100FF8005EB2000,"Plague Road",,playable,2022-08-09 15:27:14 -010030B00C316000,"Planescape: Torment and Icewind Dale: Enhanced Editions",cpu;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26 -010003C0099EE000,"PLANET ALPHA",UE4;gpu,ingame,2020-12-16 14:42:20 -01007EA019CFC000,"Planet Cube: Edge",,playable,2023-03-22 17:10:12 -0100F0A01F112000,"planetarian: The Reverie of a Little Planet & Snow Globe",,playable,2020-10-17 20:26:20 -010087000428E000,"Plantera Deluxe",,playable,2022-08-09 15:36:28 -0100C56010FD8000,"Plants vs. Zombies: Battle for Neighborville™ Complete Edition",gpu;audio;crash,boots,2024-09-02 12:58:14 -0100E5B011F48000,"PLOID SAGA",,playable,2021-04-19 16:58:45 -01009440095FE000,"Pode",nvdec,playable,2021-01-25 12:58:35 -010086F0064CE000,"Poi: Explorer Edition",nvdec,playable,2021-01-21 19:32:00 -0100EB6012FD2000,"Poison Control",,playable,2021-05-16 14:01:54 -010072400E04A000,"Pokémon Café ReMix",,playable,2021-08-17 20:00:04 -01003D200BAA2000,"Pokémon Mystery Dungeon™: Rescue Team DX",mac-bug,playable,2024-01-21 00:16:32 -01008DB008C2C000,"Pokémon Shield + Pokémon Shield Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22 -0100ABF008968000,"Pokémon Sword + Pokémon Sword Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37 -01009AD008C4C000,"Pokémon: Let's Go, Pikachu! demo",slow;demo,playable,2023-11-26 11:23:20 -0100000011D90000,"Pokémon™ Brilliant Diamond",gpu;ldn-works,ingame,2024-08-28 13:26:35 -010015F008C54000,"Pokémon™ HOME",Needs Update;crash;services,menus,2020-12-06 06:01:51 -01001F5010DFA000,"Pokémon™ Legends: Arceus",gpu;Needs Update;ldn-works,ingame,2024-09-19 10:02:02 -01005D100807A000,"Pokémon™ Quest",,playable,2022-02-22 16:12:32 -0100A3D008C5C000,"Pokémon™ Scarlet",gpu;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29 -01008F6008C5E000,"Pokémon™ Violet",gpu;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48 -0100187003A36000,"Pokémon™: Let’s Go, Eevee!",crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04 -010003F003A34000,"Pokémon™: Let’s Go, Pikachu!",crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41 -0100B3F000BE2000,"Pokkén Tournament™ DX",nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08 -010030D005AE6000,"Pokkén Tournament™ DX Demo",demo;opengl-backend-bug,playable,2022-08-10 12:03:19 -0100A3500B4EC000,"Polandball: Can Into Space",,playable,2020-06-25 15:13:26 -0100EAB00605C000,"Poly Bridge",services,playable,2020-06-08 23:32:41 -010017600B180000,"Polygod",slow;regression,ingame,2022-08-10 14:38:14 -010074B00ED32000,"Polyroll",gpu,boots,2021-07-01 16:16:50 -010096B01179A000,"Ponpu",,playable,2020-12-16 19:09:34 -01005C5011086000,"Pooplers",,playable,2020-11-02 11:52:10 -01007EF013CA0000,"Port Royale 4",crash;nvdec,menus,2022-10-30 14:34:06 -01007BB017812000,"Portal",,playable,2024-06-12 03:48:29 -0100ABD01785C000,"Portal 2",gpu,ingame,2023-02-20 22:44:15 -010050D00FE0C000,"Portal Dogs",,playable,2020-09-04 12:55:46 -0100437004170000,"Portal Knights",ldn-untested;online,playable,2021-05-27 19:29:04 -01005FC010EB2000,"Potata: Fairy Flower",nvdec,playable,2020-06-17 09:51:34 -01000A4014596000,"Potion Party",,playable,2021-05-06 14:26:54 -0100E1E00CF1A000,"Power Rangers: Battle for the Grid",,playable,2020-06-21 16:52:42 -0100D1C01C194000,"Powerful Pro Baseball 2024-2025",gpu,ingame,2024-08-25 06:40:48 -01008E100E416000,"PowerSlave Exhumed",gpu,ingame,2023-07-31 23:19:10 -010054F01266C000,"Prehistoric Dude",gpu,ingame,2020-10-12 12:38:48 -,"Pretty Princess Magical Coordinate",,playable,2020-10-15 11:43:41 -01007F00128CC000,"Pretty Princess Party",,playable,2022-10-19 17:23:58 -010009300D278000,"Preventive Strike",nvdec,playable,2022-10-06 10:55:51 -0100210019428000,"Prince of Persia The Lost Crown",crash,ingame,2024-06-08 21:31:58 -01007A3009184000,"Princess Peach™: Showtime!",UE4,playable,2024-09-21 13:39:45 -010024701DC2E000,"Princess Peach™: Showtime! Demo",UE4;demo,playable,2024-03-10 17:46:45 -01001FA01451C000,"Prinny Presents NIS Classics Volume 1: Phantom Brave: The Hermuda Triangle Remastered / Soul Nomad & the World Eaters",crash;Needs Update,boots,2023-02-02 07:23:09 -01008FA01187A000,"Prinny® 2: Dawn of Operation Panties, Dood!",32-bit,playable,2022-10-13 12:42:58 -01007A0011878000,"Prinny®: Can I Really Be the Hero?",32-bit;nvdec,playable,2023-10-22 09:25:25 -010007F00879E000,"PriPara: All Idol Perfect Stage",,playable,2022-11-22 16:35:52 -010029200AB1C000,"Prison Architect: Nintendo Switch™ Edition",,playable,2021-04-10 12:27:58 -0100C1801B914000,"Prison City",gpu,ingame,2024-03-01 08:19:33 -0100F4800F872000,"Prison Princess",,playable,2022-11-20 15:00:25 -0100A9800A1B6000,"Professional Construction – The Simulation",slow,playable,2022-08-10 15:15:45 -010077B00BDD8000,"Professional Farmer: Nintendo Switch™ Edition",slow,playable,2020-12-16 13:38:19 -010018300C83A000,"Professor Lupo and his Horrible Pets",,playable,2020-06-12 00:08:45 -0100D1F0132F6000,"Professor Lupo: Ocean",,playable,2021-04-14 16:33:33 -0100BBD00976C000,"Project Highrise: Architect's Edition",,playable,2022-08-10 17:19:12 -0100ACE00DAB6000,"Project Nimbus: Complete Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43 -01002980140F6000,"Project TRIANGLE STRATEGY™ Debut Demo",UE4;demo,playable,2022-10-24 21:40:27 -0100BDB01150E000,"Project Warlock",,playable,2020-06-16 10:50:41 -,"Psikyo Collection Vol 1",32-bit,playable,2020-10-11 13:18:47 -0100A2300DB78000,"Psikyo Collection Vol. 3",,ingame,2021-06-07 02:46:23 -01009D400C4A8000,"Psikyo Collection Vol.2",32-bit,playable,2021-06-07 03:22:07 -01007A200F2E2000,"Psikyo Shooting Stars Alpha",32-bit,playable,2021-04-13 12:03:43 -0100D7400F2E4000,"Psikyo Shooting Stars Bravo",32-bit,playable,2021-06-14 12:09:07 -0100EC100A790000,"PSYVARIAR DELTA",nvdec,playable,2021-01-20 13:01:46 -,"Puchitto kurasutā",Need-Update;crash;services,menus,2020-07-04 16:44:28 -0100D61010526000,"Pulstario",,playable,2022-10-06 11:02:01 -01009AE00B788000,"Pumped BMX Pro",nvdec;online-broken,playable,2022-09-20 17:40:50 -01006C10131F6000,"Pumpkin Jack",nvdec;UE4,playable,2022-10-13 12:52:32 -010016400F07E000,"Push the Crate",nvdec;UE4,playable,2022-09-15 13:28:41 -0100B60010432000,"Push the Crate 2",UE4;gpu;nvdec,ingame,2021-06-10 14:20:01 -0100F1200F6D8000,"Pushy and Pully in Blockland",,playable,2020-07-04 11:44:41 -0100AAE00CAB4000,"Puyo Puyo Champions",online,playable,2020-06-19 11:35:08 -010038E011940000,"Puyo Puyo™ Tetris® 2",ldn-untested,playable,2023-09-26 11:35:25 -0100C5700ECE0000,"Puzzle & Dragons GOLD",slow,playable,2020-05-13 15:09:34 -010079E01A1E0000,"Puzzle Bobble Everybubble!",audio;ldn-works,playable,2023-06-10 03:53:40 -010043100F0EA000,"Puzzle Book",,playable,2020-09-28 13:26:01 -0100476004A9E000,"Puzzle Box Maker",nvdec;online-broken,playable,2022-08-10 18:00:52 -0100A4E017372000,"Pyramid Quest",gpu,ingame,2023-08-16 21:14:52 -0100F1100E606000,"Q-YO Blaster",gpu,ingame,2020-06-07 22:36:53 -010023600AA34000,"Q.U.B.E. 2",UE4,playable,2021-03-03 21:38:57 -0100A8D003BAE000,"Qbics Paint",gpu;services,ingame,2021-06-07 10:54:09 -0100BA5012E54000,"QUAKE",gpu;crash,menus,2022-08-08 12:40:34 -010048F0195E8000,"Quake II",,playable,2023-08-15 03:42:14 -,"QuakespasmNX",crash;homebrew,nothing,2022-07-23 19:28:07 -010045101288A000,"Quantum Replica",nvdec;UE4,playable,2022-10-30 21:17:22 -0100F1400BA88000,"Quarantine Circular",,playable,2021-01-20 15:24:15 -0100DCF00F13A000,"Queen's Quest 4: Sacred Truce",nvdec,playable,2022-10-13 12:59:21 -0100492012378000,"Quell",gpu,ingame,2021-06-11 15:59:53 -01001DE005012000,"Quest of Dungeons",,playable,2021-06-07 10:29:22 -,"QuietMansion2",,playable,2020-09-03 14:59:35 -0100AF100EE76000,"Quiplash 2 InterLASHional: The Say Anything Party Game!",online-working,playable,2022-10-19 17:43:45 -0100E5400BE64000,"R-Type Dimensions EX",,playable,2020-10-09 12:04:43 -0100F930136B6000,"R-Type® Final 2",slow;nvdec;UE4,ingame,2022-10-30 21:46:29 -01007B0014300000,"R-Type® Final 2 Demo",slow;nvdec;UE4;demo,ingame,2022-10-24 21:57:42 -0100B5A004302000,"R.B.I. Baseball 17",online-working,playable,2022-08-11 11:55:47 -01005CC007616000,"R.B.I. Baseball 18",nvdec;online-working,playable,2022-08-11 11:27:52 -0100FCB00BF40000,"R.B.I. Baseball 19",nvdec;online-working,playable,2022-08-11 11:43:52 -010061400E7D4000,"R.B.I. Baseball 20",,playable,2021-06-15 21:16:29 -0100B4A0115CA000,"R.B.I. Baseball 21",online-working,playable,2022-10-24 22:31:45 -01005BF00E4DE000,"Rabi-Ribi",,playable,2022-08-06 17:02:44 -010075D00DD04000,"Race with Ryan",UE4;gpu;nvdec;slow,ingame,2020-11-16 04:35:33 -0100B8100C54A000,"Rack N Ruin",,playable,2020-09-04 15:20:26 -010024400C516000,"RAD",gpu;crash;UE4,menus,2021-11-29 02:01:56 -010000600CD54000,"Rad Rodgers Radical Edition",nvdec;online-broken,playable,2022-08-10 19:57:23 -0100DA400E07E000,"Radiation City",crash,ingame,2022-09-30 11:15:04 -01009E40095EE000,"Radiation Island",opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04 -0100C8B00D2BE000,"Radical Rabbit Stew",,playable,2020-08-03 12:02:56 -0100BAD013B6E000,"Radio Commander",nvdec,playable,2021-03-24 11:20:46 -01008FA00ACEC000,"RADIOHAMMER STATION",audout,playable,2021-02-26 20:20:06 -01003D00099EC000,"Raging Justice",,playable,2021-06-03 14:06:50 -01005CD013116000,"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",,playable,2022-07-29 15:50:13 -01002B000D97E000,"Raiden V: Director's Cut",deadlock;nvdec,boots,2024-07-12 07:31:46 -01002EE00DC02000,"Railway Empire - Nintendo Switch™ Edition",nvdec,playable,2022-10-03 13:53:50 -01003C700D0DE000,"Rain City",,playable,2020-10-08 16:59:03 -0100BDD014232000,"Rain on Your Parade",,playable,2021-05-06 19:32:04 -010047600BF72000,"Rain World",,playable,2023-05-10 23:34:08 -01009D9010B9E000,"Rainbows, toilets & unicorns",nvdec,playable,2020-10-03 18:08:18 -010010B00DDA2000,"Raji: An Ancient Epic",UE4;gpu;nvdec,ingame,2020-12-16 10:05:25 -010042A00A9CC000,"Rapala Fishing Pro Series",nvdec,playable,2020-12-16 13:26:53 -0100E73010754000,"Rascal Fight",,playable,2020-10-08 13:23:30 -010003F00C5C0000,"Rawr-Off",crash;nvdec,menus,2020-07-02 00:14:44 -01005FF002E2A000,"Rayman® Legends Definitive Edition",nvdec;ldn-works,playable,2023-05-27 18:33:07 -0100F03011616000,"Re:Turn - One Way Trip",,playable,2022-08-29 22:42:53 -01000B20117B8000,"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",gpu;crash;nvdec;vulkan,boots,2023-03-07 21:27:24 -0100A8A00E462000,"Real Drift Racing",,playable,2020-07-25 14:31:31 -010048600CC16000,"Real Heroes: Firefighter",,playable,2022-09-20 18:18:44 -0100E64010BAA000,"realMyst: Masterpiece Edition",nvdec,playable,2020-11-30 15:25:42 -01000F300F082000,"Reaper: Tale of a Pale Swordsman",,playable,2020-12-12 15:12:23 -0100D9B00E22C000,"Rebel Cops",,playable,2022-09-11 10:02:53 -0100CAA01084A000,"Rebel Galaxy Outlaw",nvdec,playable,2022-12-01 07:44:56 -0100EF0015A9A000,"Record of Lodoss War-Deedlit in Wonder Labyrinth-",deadlock;Needs Update;Incomplete,ingame,2022-01-19 10:00:59 -0100CF600FF7A000,"Red Bow",services,ingame,2021-11-29 03:51:34 -0100351013A06000,"Red Colony",,playable,2021-01-25 20:44:41 -01007820196A6000,"Red Dead Redemption",amd-vendor-bug,playable,2024-09-13 13:26:13 -0100069010592000,"Red Death",,playable,2020-08-30 13:07:37 -010075000C608000,"Red Faction Guerrilla Re-Mars-tered",ldn-untested;nvdec;online,playable,2021-06-07 03:02:13 -01002290070E4000,"Red Game Without a Great Name",,playable,2021-01-19 21:42:35 -010045400D73E000,"Red Siren: Space Defense",UE4,playable,2021-04-25 21:21:29 -0100D8A00E880000,"Red Wings: Aces of the Sky",,playable,2020-06-12 01:19:53 -01000D100DCF8000,"Redeemer: Enhanced Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24 -0100326010B98000,"Redout: Space Assault",UE4,playable,2022-10-19 23:04:35 -010007C00E558000,"Reel Fishing: Road Trip Adventure",,playable,2021-03-02 16:06:43 -010045D01273A000,"Reflection of Mine",audio,playable,2020-12-17 15:06:37 -01003AA00F5C4000,"Refreshing Sideways Puzzle Ghost Hammer",,playable,2020-10-18 12:08:54 -01007A800D520000,"Refunct",UE4,playable,2020-12-15 22:46:21 -0100FDF0083A6000,"Regalia: Of Men and Monarchs - Royal Edition",,playable,2022-08-11 12:24:01 -01005FD00F15A000,"Regions of Ruin",,playable,2020-08-05 11:38:58 -,"Reine des Fleurs",cpu;crash,boots,2020-09-27 18:50:39 -0100F1900B144000,"REKT! High Octane Stunts",online,playable,2020-09-28 12:33:56 -01002AD013C52000,"Relicta",nvdec;UE4,playable,2022-10-31 12:48:33 -010095900B436000,"RemiLore",,playable,2021-06-03 18:58:15 -0100FBD00F5F6000,"Remothered: Broken Porcelain",UE4;gpu;nvdec,ingame,2021-06-17 15:13:11 -01001F100E8AE000,"Remothered: Tormented Fathers",nvdec;UE4,playable,2022-10-19 23:26:50 -01008EE00B22C000,"Rento Fortune",ldn-untested;online,playable,2021-01-19 19:52:21 -01007CC0130C6000,"Renzo Racer",,playable,2021-03-23 22:28:05 -01003C400AD42000,"Rescue Tale",,playable,2022-09-20 18:40:18 -010099A00BC1E000,"resident evil 4",nvdec,playable,2022-11-16 21:16:04 -010018100CD46000,"Resident Evil 5",nvdec,playable,2024-02-18 17:15:29 -01002A000CD48000,"Resident Evil 6",nvdec,playable,2022-09-15 14:31:47 -0100643002136000,"Resident Evil Revelations",nvdec;ldn-untested,playable,2022-08-11 12:44:19 -010095300212A000,"Resident Evil Revelations 2",online-broken;ldn-untested,playable,2022-08-11 12:57:50 -0100E7F00FFB8000,"Resolutiion",crash,boots,2021-04-25 21:57:56 -0100FF201568E000,"Restless Night",crash,nothing,2022-02-09 10:54:49 -0100069000078000,"Retail Interactive Display Menu (DevQuestMenu)",services;crash,nothing,2022-08-11 13:19:41 -010086E00BCB2000,"Retimed",,playable,2022-08-11 13:32:39 -0100F17004156000,"Retro City Rampage DX",,playable,2021-01-05 17:04:17 -01000ED014A2C000,"Retro Machina",online-broken,playable,2022-10-31 13:38:58 -010032E00E6E2000,"Return of the Obra Dinn",,playable,2022-09-15 19:56:45 -010027400F708000,"Revenge of Justice",nvdec,playable,2022-11-20 15:43:23 -0100E2E00EA42000,"Reventure",,playable,2022-09-15 20:07:06 -010071D00F156000,"REZ PLZ",,playable,2020-10-24 13:26:12 -0100729012D18000,"Rhythm Fighter",crash,nothing,2021-02-16 18:51:30 -010081D0100F0000,"Rhythm of the Gods",UE4;crash,nothing,2020-10-03 17:39:59 -01009D5009234000,"RICO",nvdec;online-broken,playable,2022-08-11 20:16:40 -01002C700C326000,"Riddled Corpses EX",,playable,2021-06-06 16:02:44 -0100AC600D898000,"Rift Keeper",,playable,2022-09-20 19:48:20 -0100A62002042000,"RiME",UE4;crash;gpu,boots,2020-07-20 15:52:38 -01006AC00EE6E000,"Rimelands: Hammer of Thor",,playable,2022-10-13 13:32:56 -01002FF008C24000,"RingFit Adventure",crash;services,nothing,2021-04-14 19:00:01 -010088E00B816000,"RIOT - Civil Unrest",,playable,2022-08-11 20:27:56 -01002A6006AA4000,"Riptide GP: Renegade",online,playable,2021-04-13 23:33:02 -010065B00B0EC000,"Rise and Shine",,playable,2020-12-12 15:56:43 -0100E9C010EA8000,"Rise of Insanity",,playable,2020-08-30 15:42:14 -01006BA00E652000,"Rise: Race The Future",,playable,2021-02-27 13:29:06 -010020C012F48000,"Rising Hell",,playable,2022-10-31 13:54:02 -010076D00E4BA000,"Risk of Rain 2",online-broken,playable,2024-03-04 17:01:05 -0100E8300A67A000,"RISK® Global Domination",nvdec;online-broken,playable,2022-08-01 18:53:28 -010042500FABA000,"Ritual: Crown of Horns",,playable,2021-01-26 16:01:47 -0100BD300F0EC000,"Ritual: Sorcerer Angel",,playable,2021-03-02 13:51:19 -0100A7D008392000,"Rival Megagun",nvdec;online,playable,2021-01-19 14:01:46 -010069C00401A000,"RIVE: Ultimate Edition",,playable,2021-03-24 18:45:55 -01004E700DFE6000,"River City Girls",nvdec,playable,2020-06-10 23:44:09 -01002E80168F4000,"River City Girls 2",,playable,2022-12-07 00:46:27 -0100B2100767C000,"River City Melee Mach!!",online-broken,playable,2022-09-20 20:51:57 -01008AC0115C6000,"RMX Real Motocross",,playable,2020-10-08 21:06:15 -010053000B986000,"Road Redemption",online-broken,playable,2022-08-12 11:26:20 -010002F009A7A000,"Road to Ballhalla",UE4,playable,2021-06-07 02:22:36 -0100735010F58000,"Road To Guangdong",slow,playable,2020-10-12 12:15:32 -010068200C5BE000,"Roarr! Jurassic Edition",,playable,2022-10-19 23:57:45 -0100618004096000,"Robonauts",nvdec,playable,2022-08-12 11:33:23 -010039A0117C0000,"ROBOTICS;NOTES DaSH",,playable,2020-11-16 23:09:54 -01002A900EE8A000,"ROBOTICS;NOTES ELITE",,playable,2020-11-26 10:28:20 -010044A010BB8000,"Robozarro",,playable,2020-09-03 13:33:40 -01000CC012D74000,"Rock 'N Racing Bundle Grand Prix & Rally",,playable,2021-01-06 20:23:57 -0100A1B00DB36000,"Rock of Ages 3: Make & Break",UE4,playable,2022-10-06 12:18:29 -0100513005AF4000,"Rock'N Racing Off Road DX",,playable,2021-01-10 15:27:15 -01005EE0036EC000,"Rocket League®",gpu;online-broken;ldn-untested,ingame,2024-02-08 19:51:36 -0100E88009A34000,"Rocket Wars",,playable,2020-07-24 14:27:39 -0100EC7009348000,"Rogue Aces",gpu;services;nvdec,ingame,2021-11-30 02:18:30 -01009FA010848000,"Rogue Heroes: Ruins of Tasos",online,playable,2021-04-01 15:41:25 -010056500AD50000,"Rogue Legacy",,playable,2020-08-10 19:17:28 -0100F3B010F56000,"Rogue Robots",,playable,2020-06-16 12:16:11 -01001CC00416C000,"Rogue Trooper Redux",nvdec;online-broken,playable,2022-08-12 11:53:01 -0100C7300C0EC000,"RogueCube",,playable,2021-06-16 12:16:42 -0100B7200FC96000,"Roll'd",,playable,2020-07-04 20:24:01 -01004900113F8000,"RollerCoaster Tycoon 3 Complete Edition",32-bit,playable,2022-10-17 14:18:01 -0100E3900B598000,"RollerCoaster Tycoon Adventures",nvdec,playable,2021-01-05 18:14:18 -010076200CA16000,"Rolling Gunner",,playable,2021-05-26 12:54:18 -0100579011B40000,"Rolling Sky 2",,playable,2022-11-03 10:21:12 -010050400BD38000,"Roman Rumble in Las Vegum - Asterix & Obelix XXL 2",deadlock;nvdec,ingame,2022-07-21 17:54:14 -01001F600829A000,"Romancing SaGa 2",,playable,2022-08-12 12:02:24 -0100D0400D27A000,"Romancing SaGa 3",audio;gpu,ingame,2020-06-27 20:26:18 -010088100DD42000,"Roof Rage",crash;regression,boots,2023-11-12 03:47:18 -0100F3000FA58000,"Roombo: First Blood",nvdec,playable,2020-08-05 12:11:37 -0100936011556000,"Root Double -Before Crime * After Days- Xtend Edition",crash,nothing,2022-02-05 02:03:49 -010030A00DA3A000,"Root Letter: Last Answer",vulkan-backend-bug,playable,2022-09-17 10:25:57 -0100AFE00DDAC000,"Royal Roads",,playable,2020-11-17 12:54:38 -0100E2C00B414000,"RPG Maker MV",nvdec,playable,2021-01-05 20:12:01 -01005CD015986000,"rRootage Reloaded",,playable,2022-08-05 23:20:18 -0000000000000000,"RSDKv5u",homebrew,ingame,2024-04-01 16:25:34 -010009B00D33C000,"Rugby Challenge 4",slow;online-broken;UE4,playable,2022-10-06 12:45:53 -01006EC00F2CC000,"RUINER",UE4,playable,2022-10-03 14:11:33 -010074F00DE4A000,"Run the Fan",,playable,2021-02-27 13:36:28 -0100ADF00700E000,"Runbow",online,playable,2021-01-08 22:47:44 -0100D37009B8A000,"Runbow Deluxe Edition",online-broken,playable,2022-08-12 12:20:25 -010081C0191D8000,"Rune Factory 3 Special",,playable,2023-10-15 08:32:49 -010051D00E3A4000,"Rune Factory 4 Special",32-bit;crash;nvdec,ingame,2023-05-06 08:49:17 -010014D01216E000,"Rune Factory 5 (JP)",gpu,ingame,2021-06-01 12:00:36 -0100E21013908000,"RWBY: Grimm Eclipse - Definitive Edition",online-broken,playable,2022-11-03 10:44:01 -010012C0060F0000,"RXN -Raijin-",nvdec,playable,2021-01-10 16:05:43 -0100B8B012ECA000,"S.N.I.P.E.R. - Hunter Scope",,playable,2021-04-19 15:58:09 -010007700CFA2000,"Saboteur II: Avenging Angel",Needs Update;cpu;crash,nothing,2021-01-26 14:47:37 -0100D94012FE8000,"Saboteur SiO",slow,ingame,2020-12-17 16:59:49 -0100A5200C2E0000,"Safety First!",,playable,2021-01-06 09:05:23 -0100A51013530000,"SaGa Frontier Remastered",nvdec,playable,2022-11-03 13:54:56 -010003A00D0B4000,"SaGa SCARLET GRACE: AMBITIONS™",,playable,2022-10-06 13:20:31 -01008D100D43E000,"Saints Row IV®: Re-Elected™",ldn-untested;LAN,playable,2023-12-04 18:33:37 -0100DE600BEEE000,"SAINTS ROW®: THE THIRD™ - THE FULL PACKAGE",slow;LAN,playable,2023-08-24 02:40:58 -01007F000EB36000,"Sakai and...",nvdec,playable,2022-12-15 13:53:19 -0100B1400E8FE000,"Sakuna: Of Rice and Ruin",,playable,2023-07-24 13:47:13 -0100BBF0122B4000,"Sally Face",,playable,2022-06-06 18:41:24 -0100D250083B4000,"Salt and Sanctuary",,playable,2020-10-22 11:52:19 -0100CD301354E000,"Sam & Max Save the World",,playable,2020-12-12 13:11:51 -010014000C63C000,"Samsara: Deluxe Edition",,playable,2021-01-11 15:14:12 -0100ADF0096F2000,"Samurai Aces for Nintendo Switch",32-bit,playable,2020-11-24 20:26:55 -01006C600E46E000,"Samurai Jack: Battle Through Time",nvdec;UE4,playable,2022-10-06 13:33:59 -01002DF00F76C000,"SAMURAI SHODOWN",UE4;crash;nvdec,menus,2020-09-06 02:17:00 -0100F6800F48E000,"SAMURAI SHODOWN NEOGEO COLLECTION",nvdec,playable,2021-06-14 17:12:56 -0100B6501A360000,"Samurai Warrior",,playable,2023-02-27 18:42:38 -,"Sangoku Rensenki ~Otome no Heihou!~",gpu;nvdec,ingame,2020-10-17 19:13:14 -0100A4700BC98000,"Satsujin Tantei Jack the Ripper",,playable,2021-06-21 16:32:54 -0100F0000869C000,"Saturday Morning RPG",nvdec,playable,2022-08-12 12:41:50 -01006EE00380C000,"Sausage Sports Club",gpu,ingame,2021-01-10 05:37:17 -0100C8300FA90000,"Save Koch",,playable,2022-09-26 17:06:56 -0100D6E008700000,"Save the Ninja Clan",,playable,2021-01-11 13:56:37 -010091000F72C000,"Save Your Nuts",nvdec;online-broken;UE4,playable,2022-09-27 23:12:02 -0100AA00128BA000,"Saviors of Sapphire Wings / Stranger of Sword City Revisited",crash,menus,2022-10-24 23:00:46 -01001C3012912000,"Say No! More",,playable,2021-05-06 13:43:34 -010010A00A95E000,"Sayonara Wild Hearts",,playable,2023-10-23 03:20:01 -0100ACB004006000,"Schlag den Star",slow;nvdec,playable,2022-08-12 14:28:22 -0100394011C30000,"Scott Pilgrim vs. The World™: The Game – Complete Edition",services-horizon;crash,nothing,2024-07-12 08:13:03 -0100E7100B198000,"Scribblenauts Mega Pack",nvdec,playable,2020-12-17 22:56:14 -01001E40041BE000,"Scribblenauts Showdown",gpu;nvdec,ingame,2020-12-17 23:05:53 -0100829018568000,"SD GUNDAM BATTLE ALLIANCE Demo",audio;crash;demo,ingame,2022-08-01 23:01:20 -010055700CEA8000,"SD GUNDAM G GENERATION CROSS RAYS",nvdec,playable,2022-09-15 20:58:44 -010022900D3EC00,"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION",nvdec,playable,2022-09-15 20:45:57 -0100E4A00D066000,"Sea King",UE4;nvdec,playable,2021-06-04 15:49:22 -0100AFE012BA2000,"Sea of Solitude: The Director's Cut",gpu,ingame,2024-07-12 18:29:29 -01008C0016544000,"Sea of Stars",,playable,2024-03-15 20:27:12 -010036F0182C4000,"Sea of Stars Demo",demo,playable,2023-02-12 15:33:56 -0100C2400D68C000,"SeaBed",,playable,2020-05-17 13:25:37 -010077100CA6E000,"Season Match Bundle",,playable,2020-10-27 16:15:22 -010028F010644000,"Secret Files 3",nvdec,playable,2020-10-24 15:32:39 -010075D0101FA000,"Seek Hearts",,playable,2022-11-22 15:06:26 -0100394010844000,"Seers Isle",,playable,2020-11-17 12:28:50 -0100A8900AF04000,"SEGA AGES Alex Kidd in Miracle World",online,playable,2021-05-05 16:35:47 -01001E600AF08000,"SEGA AGES Gain Ground",online,playable,2021-05-05 16:16:27 -0100D4D00AC62000,"SEGA AGES Out Run",,playable,2021-01-11 13:13:59 -01005A300C9F6000,"SEGA AGES Phantasy Star",,playable,2021-01-11 12:49:48 -01005F600CB0E000,"SEGA AGES Puyo Puyo",online,playable,2021-05-05 16:09:28 -010051F00AC5E000,"SEGA AGES Sonic The Hedgehog",slow,playable,2023-03-05 20:16:31 -01000D200C614000,"SEGA AGES Sonic The Hedgehog 2",,playable,2022-09-21 20:26:35 -0100C3E00B700000,"SEGA AGES Space Harrier",,playable,2021-01-11 12:57:40 -010054400D2E6000,"SEGA AGES Virtua Racing",online-broken,playable,2023-01-29 17:08:39 -01001E700AC60000,"SEGA AGES Wonder Boy: Monster Land",online,playable,2021-05-05 16:28:25 -0100B3C014BDA000,"SEGA Genesis™ – Nintendo Switch Online",crash;regression,nothing,2022-04-11 07:27:21 -,"SEGA Mega Drive Classics",online,playable,2021-01-05 11:08:00 -01009840046BC000,"Semispheres",,playable,2021-01-06 23:08:31 -0100D1800D902000,"SENRAN KAGURA Peach Ball",,playable,2021-06-03 15:12:10 -0100E0C00ADAC000,"SENRAN KAGURA Reflexions",,playable,2020-03-23 19:15:23 -01009E500D29C000,"Sentinels of Freedom",,playable,2021-06-14 16:42:19 -0100A5D012DAC000,"SENTRY",,playable,2020-12-13 12:00:24 -010059700D4A0000,"Sephirothic Stories",services,menus,2021-11-25 08:52:17 -010007D00D43A000,"Serious Sam Collection",vulkan-backend-bug,boots,2022-10-13 13:53:34 -0100B2C00E4DA000,"Served!",nvdec,playable,2022-09-28 12:46:00 -010018400C24E000,"Seven Knights -Time Wanderer-",vulkan-backend-bug,playable,2022-10-13 22:08:54 -0100D6F016676000,"Seven Pirates H",,playable,2024-06-03 14:54:12 -0100157004512000,"Severed",,playable,2020-12-15 21:48:48 -0100D5500DA94000,"Shadow Blade: Reload",nvdec,playable,2021-06-11 18:40:43 -0100BE501382A000,"Shadow Gangs",cpu;gpu;crash;regression,ingame,2024-04-29 00:07:26 -0100C3A013840000,"Shadow Man Remastered",gpu,ingame,2024-05-20 06:01:39 -010073400B696000,"Shadowgate",,playable,2021-04-24 07:32:57 -0100371013B3E000,"Shadowrun Returns",gpu;Needs Update,ingame,2022-10-04 21:32:31 -01008310154C4000,"Shadowrun: Dragonfall - Director's Cut",gpu;Needs Update,ingame,2022-10-04 20:52:18 -0100C610154CA000,"Shadowrun: Hong Kong - Extended Edition",gpu;Needs Update,ingame,2022-10-04 20:53:09 -010000000EEF0000,"Shadows 2: Perfidia",,playable,2020-08-07 12:43:46 -0100AD700CBBE000,"Shadows of Adam",,playable,2021-01-11 13:35:58 -01002A800C064000,"Shadowverse Champions Battle",,playable,2022-10-02 22:59:29 -01003B90136DA000,"Shadowverse: Champion's Battle",crash,nothing,2023-03-06 00:31:50 -0100820013612000,"Shady Part of Me",,playable,2022-10-20 11:31:55 -0100B10002904000,"Shakedown: Hawaii",,playable,2021-01-07 09:44:36 -01008DA012EC0000,"Shakes on a Plane",crash,menus,2021-11-25 08:52:25 -0100B4900E008000,"Shalnor Legends: Sacred Lands",,playable,2021-06-11 14:57:11 -010006C00CC10000,"Shanky: The Vegan`s Nightmare",,playable,2021-01-26 15:03:55 -0100430013120000,"Shantae",,playable,2021-05-21 04:53:26 -0100EFD00A4FA000,"Shantae and the Pirate's Curse",,playable,2024-04-29 17:21:57 -0100EB901040A000,"Shantae and the Seven Sirens",nvdec,playable,2020-06-19 12:23:40 -01006A200936C000,"Shantae: Half- Genie Hero Ultimate Edition",,playable,2020-06-04 20:14:20 -0100ADA012370000,"Shantae: Risky's Revenge - Director's Cut",,playable,2022-10-06 20:47:39 -01003AB01062C000,"Shaolin vs Wutang",deadlock,nothing,2021-03-29 20:38:54 -0100B250009B9600,"Shape Of The World0",UE4,playable,2021-03-05 16:42:28 -01004F50085F2000,"She Remembered Caterpillars",,playable,2022-08-12 17:45:14 -01000320110C2000,"She Sees Red - Interactive Movie",nvdec,playable,2022-09-30 11:30:15 -01009EB004CB0000,"Shelter Generations",,playable,2021-06-04 16:52:39 -010020F014DBE000,"Sherlock Holmes: The Devil’s Daughter",gpu,ingame,2022-07-11 00:07:26 -0100B1000AC3A000,"Shift Happens",,playable,2021-01-05 21:24:18 -01000E8009E1C000,"Shift Quantum",UE4;crash,ingame,2020-11-06 21:54:08 -01000750084B2000,"Shiftlings - Enhanced Edition",nvdec,playable,2021-03-04 13:49:54 -01003B0012DC2000,"Shin Megami Tensei III Nocturne HD Remaster",,playable,2022-11-03 22:53:27 -010045800ED1E000,"Shin Megami Tensei III NOCTURNE HD REMASTER",gpu;Needs Update,ingame,2022-11-03 19:57:01 -010063B012DC6000,"Shin Megami Tensei V",UE4,playable,2024-02-21 06:30:07 -010069C01AB82000,"Shin Megami Tensei V: Vengeance",gpu;vulkan-backend-bug,ingame,2024-07-14 11:28:24 -01009050133B4000,"Shing! (サムライフォース:斬!)",nvdec,playable,2022-10-22 00:48:54 -01009A5009A9E000,"Shining Resonance Refrain",nvdec,playable,2022-08-12 18:03:01 -01004EE0104F6000,"Shinsekai Into the Depths™",,playable,2022-09-28 14:07:51 -0100C2F00A568000,"Shio",,playable,2021-02-22 16:25:09 -0100B2E00F13E000,"Shipped",,playable,2020-11-21 14:22:32 -01000E800FCB4000,"Ships",,playable,2021-06-11 16:14:37 -01007430122D0000,"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",nvdec,playable,2022-10-20 11:44:36 -,"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",cpu;crash,boots,2020-09-27 19:01:25 -01000244016BAE00,"Shiro0",gpu,ingame,2024-01-13 08:54:39 -0100CCE00DDB6000,"Shoot 1UP DX",,playable,2020-12-13 12:32:47 -01001180021FA000,"Shovel Knight: Specter of Torment",,playable,2020-05-30 08:34:17 -010057D0021E8000,"Shovel Knight: Treasure Trove",,playable,2021-02-14 18:24:39 -01003DD00BF0E000,"Shred! 2 - ft Sam Pilgrim",,playable,2020-05-30 14:34:09 -01001DE0076A4000,"Shu",nvdec,playable,2020-05-30 09:08:59 -0100A7900B936000,"Shut Eye",,playable,2020-07-23 18:08:35 -010044500C182000,"Sid Meier’s Civilization VI",ldn-untested,playable,2024-04-08 16:03:40 -01007FC00B674000,"Sigi - A Fart for Melusina",,playable,2021-02-22 16:46:58 -0100F1400B0D6000,"Silence",nvdec,playable,2021-06-03 14:46:17 -0100A32010618000,"Silent World",,playable,2020-08-28 13:45:13 -010045500DFE2000,"Silk",nvdec,playable,2021-06-10 15:34:37 -010016D00A964000,"SilverStarChess",,playable,2021-05-06 15:25:57 -0100E8C019B36000,"Simona's Requiem",gpu,ingame,2023-02-21 18:29:19 -01006FE010438000,"Sin Slayers",,playable,2022-10-20 11:53:52 -01002820036A8000,"Sine Mora EX",gpu;online-broken,ingame,2022-08-12 19:36:18 -0100F10012002000,"Singled Out",online,playable,2020-08-03 13:06:18 -0100B8800F858000,"Sinless",nvdec,playable,2020-08-09 20:18:55 -0100B16009C10000,"SINNER: Sacrifice for Redemption",nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33 -0100E9201410E000,"Sir Lovelot",,playable,2021-04-05 16:21:46 -0100134011E32000,"Skate City",,playable,2022-11-04 11:37:39 -0100B2F008BD8000,"Skee-Ball",,playable,2020-11-16 04:44:07 -01001A900F862000,"Skelattack",,playable,2021-06-09 15:26:26 -01008E700F952000,"Skelittle: A Giant Party!",,playable,2021-06-09 19:08:34 -01006C000DC8A000,"Skelly Selest",,playable,2020-05-30 15:38:18 -0100D67006F14000,"Skies of Fury DX",,playable,2020-05-30 16:40:54 -010046B00DE62000,"Skullgirls 2nd Encore",,playable,2022-09-15 21:21:25 -0100D1100BF9C000,"Skulls of the Shogun: Bone-A-Fide Edition",,playable,2020-08-31 18:58:12 -0100D7B011654000,"Skully",nvdec;UE4,playable,2022-10-06 13:52:59 -010083100B5CA000,"Sky Force Anniversary",online-broken,playable,2022-08-12 20:50:07 -01006FE005B6E000,"Sky Force Reloaded",,playable,2021-01-04 20:06:57 -010003F00CC98000,"Sky Gamblers - Afterburner",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55 -010093D00AC38000,"Sky Gamblers: Storm Raiders",gpu;audio;32-bit,ingame,2022-08-12 21:13:36 -010068200E96E000,"Sky Gamblers: Storm Raiders 2",gpu,ingame,2022-09-13 12:24:04 -01004F0010A02000,"Sky Racket",,playable,2020-09-07 12:22:24 -0100DDB004F30000,"Sky Ride",,playable,2021-02-22 16:53:07 -0100C5700434C000,"Sky Rogue",,playable,2020-05-30 08:26:28 -0100C52011460000,"Sky: Children of the Light",cpu;online-broken,nothing,2023-02-23 10:57:10 -010041C01014E000,"Skybolt Zack",,playable,2021-04-12 18:28:00 -0100A0A00D1AA000,"SKYHILL",,playable,2021-03-05 15:19:11 -,"Skylanders Imaginators",crash;services,boots,2020-05-30 18:49:18 -010021A00ABEE000,"SKYPEACE",,playable,2020-05-29 14:14:30 -0100EA400BF44000,"SkyScrappers",,playable,2020-05-28 22:11:25 -0100F3C00C400000,"SkyTime",slow,ingame,2020-05-30 09:24:51 -01003AD00DEAE000,"SlabWell: The Quest For Kaktun's Alpaca",,playable,2021-02-22 17:02:51 -0100224004004000,"Slain: Back from Hell",,playable,2022-08-12 23:36:19 -010026300BA4A000,"Slay the Spire",,playable,2023-01-20 15:09:26 -0100501006494000,"Slayaway Camp: Butcher's Cut",opengl-backend-bug,playable,2022-08-12 23:44:05 -01004E900EDDA000,"Slayin 2",gpu,ingame,2024-04-19 16:15:26 -01004AC0081DC000,"Sleep Tight",gpu;UE4,ingame,2022-08-13 00:17:32 -0100F4500AA4E000,"Slice, Dice & Rice",online,playable,2021-02-22 17:44:23 -010010D011E1C000,"Slide Stars",crash,menus,2021-11-25 08:53:43 -0100112003B8A000,"Slime-san",,playable,2020-05-30 16:15:12 -01002AA00C974000,"SMASHING THE BATTLE",,playable,2021-06-11 15:53:57 -0100C9100B06A000,"SmileBASIC 4",gpu,menus,2021-07-29 17:35:59 -0100207007EB2000,"Smoke And Sacrifice",,playable,2022-08-14 12:38:27 -01009790186FE000,"SMURFS KART",,playable,2023-10-18 00:55:00 -0100F2800D46E000,"Snack World The Dungeon Crawl Gold",gpu;slow;nvdec;audout,ingame,2022-05-01 21:12:44 -0100C0F0020E8000,"Snake Pass",nvdec;UE4,playable,2022-01-03 04:31:52 -010075A00BA14000,"Sniper Elite 3 Ultimate Edition",ldn-untested,playable,2024-04-18 07:47:49 -010007B010FCC000,"Sniper Elite 4",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15 -0100BB000A3AA000,"Sniper Elite V2 Remastered",slow;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13 -01008E20047DC000,"Snipperclips Plus: Cut It Out, Together!",,playable,2023-02-14 20:20:13 -0100704000B3A000,"Snipperclips™ – Cut it out, together!",,playable,2022-12-05 12:44:55 -01004AB00AEF8000,"SNK 40th ANNIVERSARY COLLECTION",,playable,2022-08-14 13:33:15 -010027F00AD6C000,"SNK HEROINES Tag Team Frenzy",nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25 -01008DA00CBBA000,"Snooker 19",nvdec;online-broken;UE4,playable,2022-09-11 17:43:22 -010045300516E000,"Snow Moto Racing Freedom",gpu;vulkan-backend-bug,ingame,2022-08-15 16:05:14 -0100BE200C34A000,"Snowboarding The Next Phase",nvdec,playable,2021-02-23 12:56:58 -0100FBD013AB6000,"SnowRunner",services;crash,boots,2023-10-07 00:01:16 -010017B012AFC000,"Soccer Club Life: Playing Manager",gpu,ingame,2022-10-25 11:59:22 -0100B5000E05C000,"Soccer Pinball",UE4;gpu,ingame,2021-06-15 20:56:51 -010011A00A9A8000,"Soccer Slammers",,playable,2020-05-30 07:48:14 -010095C00F9DE000,"Soccer, Tactics & Glory",gpu,ingame,2022-09-26 17:15:58 -0100590009C38000,"SOL DIVIDE -SWORD OF DARKNESS- for Nintendo Switch",32-bit,playable,2021-06-09 14:13:03 -0100A290048B0000,"Soldam: Drop, Connect, Erase",,playable,2020-05-30 09:18:54 -010008600D1AC000,"Solo: Islands of the Heart",gpu;nvdec,ingame,2022-09-11 17:54:43 -01009EE00E91E000,"Some Distant Memory",,playable,2022-09-15 21:48:19 -01004F401BEBE000,"Song of Nunu: A League of Legends Story",,ingame,2024-07-12 18:53:44 -0100E5400BF94000,"Songbird Symphony",,playable,2021-02-27 02:44:04 -010031D00A604000,"Songbringer",,playable,2020-06-22 10:42:02 -0000000000000000,"Sonic 1 (2013)",crash;homebrew,ingame,2024-04-06 18:31:20 -0000000000000000,"Sonic 2 (2013)",crash;homebrew,ingame,2024-04-01 16:25:30 -0000000000000000,"Sonic A.I.R",homebrew,ingame,2024-04-01 16:25:32 -0000000000000000,"Sonic CD",crash;homebrew,ingame,2024-04-01 16:25:31 -010040E0116B8000,"Sonic Colors: Ultimate",,playable,2022-11-12 21:24:26 -01001270012B6000,"SONIC FORCES™",,playable,2024-07-28 13:11:21 -01004AD014BF0000,"Sonic Frontiers",gpu;deadlock;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53 -01009AA000FAA000,"Sonic Mania",,playable,2020-06-08 17:30:57 -01009FB016286000,"Sonic Origins",crash,ingame,2024-06-02 07:20:15 -01008F701C074000,"SONIC SUPERSTARS",gpu;nvdec,ingame,2023-10-28 17:48:07 -010088801C150000,"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",,playable,2024-08-20 13:26:56 -01005EA01C0FC000,"SONIC X SHADOW GENERATIONS",crash,ingame,2025-01-07 04:20:45 -010064F00C212000,"Soul Axiom Rebooted",nvdec;slow,ingame,2020-09-04 12:41:01 -0100F2100F0B2000,"Soul Searching",,playable,2020-07-09 18:39:07 -01008F2005154000,"South Park™: The Fractured but Whole™ - Standard Edition",slow;online-broken,playable,2024-07-08 17:47:28 -0100B9F00C162000,"Space Blaze",,playable,2020-08-30 16:18:05 -010005500E81E000,"Space Cows",UE4;crash,menus,2020-06-15 11:33:20 -0100707011722000,"Space Elite Force",,playable,2020-11-27 15:21:05 -010047B010260000,"Space Pioneer",,playable,2022-10-20 12:24:37 -010010A009830000,"Space Ribbon",,playable,2022-08-15 17:17:10 -0000000000000000,"SpaceCadetPinball",homebrew,ingame,2024-04-18 19:30:04 -0100D9B0041CE000,"Spacecats with Lasers",,playable,2022-08-15 17:22:44 -010034800FB60000,"Spaceland",,playable,2020-11-01 14:31:56 -010028D0045CE000,"Sparkle 2",,playable,2020-10-19 11:51:39 -01000DC007E90000,"Sparkle Unleashed",,playable,2021-06-03 14:52:15 -0100E4F00AE14000,"Sparkle ZERO",gpu;slow,ingame,2020-03-23 18:19:18 -01007ED00C032000,"Sparklite",,playable,2022-08-06 11:35:41 -0100E6A009A26000,"Spartan",UE4;nvdec,playable,2021-03-05 15:53:19 -010020500E7A6000,"Speaking Simulator",,playable,2020-10-08 13:00:39 -01008B000A5AE000,"Spectrum",,playable,2022-08-16 11:15:59 -0100F18010BA0000,"Speed 3: Grand Prix",UE4,playable,2022-10-20 12:32:31 -010040F00AA9A000,"Speed Brawl",slow,playable,2020-09-18 22:08:16 -01000540139F6000,"Speed Limit",gpu,ingame,2022-09-02 18:37:40 -010061F013A0E000,"Speed Truck Racing",,playable,2022-10-20 12:57:04 -0100E74007EAC000,"Spellspire",,playable,2022-08-16 11:21:21 -010021F004270000,"Spelunker Party!",services,boots,2022-08-16 11:25:49 -0100710013ABA000,"Spelunky",,playable,2021-11-20 17:45:03 -0100BD500BA94000,"Sphinx and the Cursed Mummy",gpu;32-bit;opengl,ingame,2024-05-20 06:00:51 -010092A0102AE000,"Spider Solitaire",,playable,2020-12-16 16:19:30 -010076D0122A8000,"Spinch",,playable,2024-07-12 19:02:10 -01001E40136FE000,"Spinny's Journey",crash,ingame,2021-11-30 03:39:44 -010023E008702000,"Spiral Splatter",,playable,2020-06-04 14:03:57 -0100D1B00B6FA000,"Spirit Hunter: Death Mark",,playable,2020-12-13 10:56:25 -0100FAE00E19A000,"Spirit Hunter: NG",32-bit,playable,2020-12-17 20:38:47 -01005E101122E000,"Spirit of the North",UE4,playable,2022-09-30 11:40:47 -01000AC00F5EC000,"Spirit Roots",nvdec,playable,2020-07-10 13:33:32 -0100BD400DC52000,"Spiritfarer",gpu,ingame,2022-10-06 16:31:38 -01009D60080B4000,"SpiritSphere DX",,playable,2021-07-03 23:37:49 -010042700E3FC000,"Spitlings",online-broken,playable,2022-10-06 16:42:39 -01003BC0000A0000,"Splatoon™ 2",ldn-works;LAN,playable,2024-07-12 19:11:15 -0100C2500FC20000,"Splatoon™ 3",ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11 -0100BA0018500000,"Splatoon™ 3: Splatfest World Premiere",gpu;online-broken;demo,ingame,2022-09-19 03:17:12 -010062800D39C000,"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34 -01009FB0172F4000,"SpongeBob SquarePants: The Cosmic Shake",gpu;UE4,ingame,2023-08-01 19:29:53 -010097C01336A000,"Spooky Chase",,playable,2022-11-04 12:17:44 -0100C6100D75E000,"Spooky Ghosts Dot Com",,playable,2021-06-15 15:16:11 -0100DE9005170000,"Sports Party",nvdec,playable,2021-03-05 13:40:42 -0100E04009BD4000,"Spot The Difference",,playable,2022-08-16 11:49:52 -010052100D1B4000,"Spot The Differences: Party!",,playable,2022-08-16 11:55:26 -01000E6015350000,"Spy Alarm",services,ingame,2022-12-09 10:12:51 -01005D701264A000,"SpyHack",,playable,2021-04-15 10:53:51 -010077B00E046000,"Spyro™ Reignited Trilogy",nvdec;UE4,playable,2022-09-11 18:38:33 -0100085012A0E000,"Squeakers",,playable,2020-12-13 12:13:05 -010009300D31C000,"Squidgies Takeover",,playable,2020-07-20 22:28:08 -0100FCD0102EC000,"Squidlit",,playable,2020-08-06 12:38:32 -0100EBF00E702000,"STAR OCEAN First Departure R",nvdec,playable,2021-07-05 19:29:16 -010065301A2E0000,"STAR OCEAN THE SECOND STORY R",crash,ingame,2024-06-01 02:39:59 -010060D00F658000,"Star Renegades",nvdec,playable,2020-12-11 12:19:23 -0100D7000AE6A000,"Star Story: The Horizon Escape",,playable,2020-08-11 22:31:38 -01009DF015776000,"Star Trek Prodigy: Supernova",nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50 -0100BD100FFBE000,"STAR WARS™ Episode I Racer",slow;nvdec,playable,2022-10-03 16:08:36 -0100BB500EACA000,"STAR WARS™ Jedi Knight II: Jedi Outcast™",gpu,ingame,2022-09-15 22:51:00 -01008CA00FAE8000,"STAR WARS™ Jedi Knight: Jedi Academy",gpu,boots,2021-06-16 12:35:30 -01006DA00DEAC000,"Star Wars™ Pinball",online-broken,playable,2022-09-11 18:53:31 -0100FA10115F8000,"STAR WARS™ Republic Commando™",gpu;32-bit,ingame,2023-10-31 15:57:17 -010040701B948000,"STAR WARS™: Battlefront Classic Collection",gpu;vulkan,ingame,2024-07-12 19:24:21 -0100854015868000,"STAR WARS™: Knights of the Old Republic™",gpu;deadlock,boots,2024-02-12 10:13:51 -0100153014544000,"STAR WARS™: The Force Unleashed™",,playable,2024-05-01 17:41:28 -01005EB00EA10000,"Star-Crossed Myth - The Department of Wishes -",gpu,ingame,2021-06-04 19:34:36 -0100E6B0115FC000,"Star99",online,menus,2021-11-26 14:18:51 -01002100137BA000,"Stardash",,playable,2021-01-21 16:31:19 -0100E65002BB8000,"Stardew Valley",online-broken;ldn-untested,playable,2024-02-14 03:11:19 -01002CC003FE6000,"Starlink: Battle for Atlas™ Digital Edition",services-horizon;crash;Needs Update,nothing,2024-05-05 17:25:11 -010098E010FDA000,"Starlit Adventures Golden Stars",,playable,2020-11-21 12:14:43 -01001BB00AC26000,"STARSHIP AVENGER Operation: Take Back Earth",,playable,2021-01-12 15:52:55 -010000700A572000,"State of Anarchy: Master of Mayhem",nvdec,playable,2021-01-12 19:00:05 -0100844004CB6000,"State of Mind",UE4;crash,boots,2020-06-22 22:17:50 -0100616009082000,"STAY",crash;services,boots,2021-04-23 14:24:52 -0100B61009C60000,"STAY COOL, KOBAYASHI-SAN!: A RIVER CITY RANSOM STORY",,playable,2021-01-26 17:37:28 -01008010118CC000,"Steam Prison",nvdec,playable,2021-04-01 15:34:11 -0100AE100DAFA000,"Steam Tactics",,playable,2022-10-06 16:53:45 -01004DD00C87A000,"Steamburg",,playable,2021-01-13 08:42:01 -01009320084A4000,"SteamWorld Dig",,playable,2024-08-19 12:12:23 -0100CA9002322000,"SteamWorld Dig 2",,playable,2022-12-21 19:25:42 -0100F6D00D83E000,"SteamWorld Quest: Hand of Gilgamech",nvdec,playable,2020-11-09 13:10:04 -01001C6014772000,"Steel Assault",,playable,2022-12-06 14:48:30 -010042800B880000,"STEINS;GATE ELITE",,playable,2020-08-04 07:33:32 -0100CB400E9BC000,"STEINS;GATE: My Darling's Embrace",nvdec,playable,2022-11-20 16:48:34 -01002DE01043E000,"Stela",UE4,playable,2021-06-15 13:28:34 -01005A700C954000,"Stellar Interface",,playable,2022-10-20 13:44:33 -0100BC800EDA2000,"STELLATUM",gpu,playable,2021-03-07 16:30:23 -0100775004794000,"Steredenn: Binary Stars",,playable,2021-01-13 09:19:42 -0100AE0006474000,"Stern Pinball Arcade",,playable,2022-08-16 14:24:41 -0100E24006FA8000,"Stikbold! A Dodgeball Adventure DELUXE",,playable,2021-01-11 20:12:54 -010077B014518000,"Stitchy in Tooki Trouble",,playable,2021-05-06 16:25:53 -010070D00F640000,"STONE",UE4,playable,2022-09-30 11:53:32 -010074400F6A8000,"Stories Untold",nvdec,playable,2022-12-22 01:08:46 -010040D00BCF4000,"Storm Boy",,playable,2022-10-20 14:15:06 -0100B2300B932000,"Storm In A Teacup",gpu,ingame,2021-11-06 02:03:19 -0100D5D00DAF2000,"Story of a Gladiator",,playable,2020-07-29 15:08:18 -010017301007E000,"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",,playable,2021-03-18 11:42:19 -0100ED400EEC2000,"STORY OF SEASONS: Friends of Mineral Town",,playable,2022-10-03 16:40:31 -010078D00E8F4000,"Stranded Sails - Explorers of the Cursed Islands",slow;nvdec;UE4,playable,2022-09-16 11:58:38 -01000A6013F86000,"Strange Field Football",,playable,2022-11-04 12:25:57 -0100DD600DD48000,"Stranger Things 3: The Game",,playable,2021-01-11 17:44:09 -0100D7E011C64000,"Strawberry Vinegar",nvdec,playable,2022-12-05 16:25:40 -010075101EF84000,"Stray",crash,ingame,2025-01-07 04:03:00 -0100024008310000,"Street Fighter 30th Anniversary Collection",online-broken;ldn-partial,playable,2022-08-20 16:50:47 -010012400D202000,"Street Outlaws: The List",nvdec,playable,2021-06-11 12:15:32 -0100888011CB2000,"Street Power Soccer",UE4;crash,boots,2020-11-21 12:28:57 -0100EC9010258000,"Streets of Rage 4",nvdec;online,playable,2020-07-07 21:21:22 -0100BDE012928000,"Strife: Veteran Edition",gpu,ingame,2022-01-15 05:10:42 -010039100DACC000,"Strike Force - War on Terror",crash;Needs Update,menus,2021-11-24 08:08:20 -010038A00E6C6000,"Strike Force Kitty",nvdec,playable,2020-07-29 16:22:15 -010072500D52E000,"Strike Suit Zero: Director's Cut",crash,boots,2021-04-23 17:15:14 -0100FF5005B76000,"STRIKERS1945 for Nintendo Switch",32-bit,playable,2021-06-03 19:35:04 -0100720008ED2000,"STRIKERS1945 Ⅱ for Nintendo Switch",32-bit,playable,2021-06-03 19:43:00 -0100681011B56000,"Struggling",,playable,2020-10-15 20:37:03 -0100AF000B4AE000,"Stunt Kite Party",nvdec,playable,2021-01-25 17:16:56 -0100C5500E7AE000,"STURMWIND EX",audio;32-bit,playable,2022-09-16 12:01:39 -,"Subarashiki Kono Sekai -Final Remix-",services;slow,ingame,2020-02-10 16:21:51 -010001400E474000,"Subdivision Infinity DX",UE4;crash,boots,2021-03-03 14:26:46 -0100E6400BCE8000,"Sublevel Zero Redux",,playable,2022-09-16 12:30:03 -0100EDA00D866000,"Submerged",nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01 -0100429011144000,"Subnautica",vulkan-backend-bug,playable,2022-11-04 13:07:29 -010014C011146000,"Subnautica: Below Zero",,playable,2022-12-23 14:15:13 -0100BF9012AC6000,"Suguru Nature",crash,ingame,2021-07-29 11:36:27 -01005CD00A2A2000,"Suicide Guy",,playable,2021-01-26 13:13:54 -0100DE000C2E4000,"Suicide Guy: Sleepin' Deeply",Needs More Attention,ingame,2022-09-20 23:45:25 -01003D50126A4000,"Sumire",,playable,2022-11-12 13:40:43 -0100A130109B2000,"Summer in Mara",nvdec,playable,2021-03-06 14:10:38 -01004E500DB9E000,"Summer Sweetheart",nvdec,playable,2022-09-16 12:51:46 -0100BFE014476000,"Sunblaze",,playable,2022-11-12 13:59:23 -01002D3007962000,"Sundered: Eldritch Edition",gpu,ingame,2021-06-07 11:46:00 -0100F7000464A000,"Super Beat Sports™",ldn-untested,playable,2022-08-16 16:05:50 -010051A00D716000,"Super Blood Hockey",,playable,2020-12-11 20:01:41 -01007AD00013E000,"Super Bomberman R",nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14 -0100B87017D94000,"SUPER BOMBERMAN R 2",deadlock,boots,2023-09-29 13:19:51 -0100D9B00DB5E000,"Super Cane Magic ZERO",,playable,2022-09-12 15:33:46 -010065F004E5E000,"Super Chariot",,playable,2021-06-03 13:19:01 -0100E5E00C464000,"SUPER DRAGON BALL HEROES WORLD MISSION",nvdec;online-broken,playable,2022-08-17 12:56:30 -010023100B19A000,"Super Dungeon Tactics",,playable,2022-10-06 17:40:40 -010056800B534000,"Super Inefficient Golf",UE4,playable,2022-08-17 15:53:45 -010015700D5DC000,"Super Jumpy Ball",,playable,2020-07-04 18:40:36 -0100196009998000,"Super Kickers League Ultimate",,playable,2021-01-26 13:36:48 -01003FB00C5A8000,"Super Kirby Clash™",ldn-works,playable,2024-07-30 18:21:55 -010000D00F81A000,"Super Korotama",,playable,2021-06-06 19:06:22 -01003E300FCAE000,"Super Loop Drive",nvdec;UE4,playable,2022-09-22 10:58:05 -054507E0B7552000,"Super Mario 64",homebrew,ingame,2024-03-20 16:57:27 -0100277011F1A000,"Super Mario Bros.™ 35",online-broken,menus,2022-08-07 16:27:25 -010015100B514000,"Super Mario Bros.™ Wonder",amd-vendor-bug,playable,2024-09-06 13:21:21 -01009B90006DC000,"Super Mario Maker™ 2",online-broken;ldn-broken,playable,2024-08-25 11:05:19 -0100000000010000,"Super Mario Odyssey™",nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34 -010036B0034E4000,"Super Mario Party™",gpu;Needs Update;ldn-works,ingame,2024-06-21 05:10:16 -0100BC0018138000,"Super Mario RPG™",gpu;audio;nvdec,ingame,2024-06-19 17:43:42 -0000000000000000,"Super Mario World",homebrew,boots,2024-06-13 01:40:31 -010049900F546000,"Super Mario™ 3D All-Stars",services-horizon;slow;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16 -010028600EBDA000,"Super Mario™ 3D World + Bowser’s Fury",ldn-works,playable,2024-07-31 10:45:37 -01004F8006A78000,"Super Meat Boy",services,playable,2020-04-02 23:10:07 -01009C200D60E000,"Super Meat Boy Forever",gpu,boots,2021-04-26 14:25:39 -0100BDD00EC5C000,"Super Mega Space Blaster Special Turbo",online,playable,2020-08-06 12:13:25 -010031F019294000,"Super Monkey Ball Banana Rumble",,playable,2024-06-28 10:39:18 -0100B2A00E1E0000,"Super Monkey Ball: Banana Blitz HD",online-broken,playable,2022-09-16 13:16:25 -01006D000D2A0000,"Super Mutant Alien Assault",,playable,2020-06-07 23:32:45 -01004D600AC14000,"Super Neptunia RPG",nvdec,playable,2022-08-17 16:38:52 -01008D300C50C000,"Super Nintendo Entertainment System™ - Nintendo Switch Online",,playable,2021-01-05 00:29:48 -0100284007D6C000,"Super One More Jump",,playable,2022-08-17 16:47:47 -01001F90122B2000,"Super Punch Patrol",,playable,2024-07-12 19:49:02 -0100331005E8E000,"Super Putty Squad",gpu;32-bit,ingame,2024-04-29 15:51:54 -,"SUPER ROBOT WARS T",online,playable,2021-03-25 11:00:40 -,"SUPER ROBOT WARS V",online,playable,2020-06-23 12:56:37 -,"SUPER ROBOT WARS X",online,playable,2020-08-05 19:18:51 -01004CF00A60E000,"Super Saurio Fly",nvdec,playable,2020-08-06 13:12:14 -010039700D200000,"Super Skelemania",,playable,2020-06-07 22:59:50 -01006A800016E000,"Super Smash Bros.™ Ultimate",gpu;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21 -0100D61012270000,"Super Soccer Blast",gpu,ingame,2022-02-16 08:39:12 -0100A9300A4AE000,"Super Sportmatchen",,playable,2022-08-19 12:34:40 -0100FB400F54E000,"Super Street: Racer",UE4,playable,2022-09-16 13:43:14 -010000500DB50000,"Super Tennis Blast",,playable,2022-08-19 16:20:48 -0100C6800D770000,"Super Toy Cars 2",gpu;regression,ingame,2021-03-02 20:15:15 -010035B00B3F0000,"Super Volley Blast",,playable,2022-08-19 18:14:40 -0100FF60051E2000,"Superbeat: Xonic EX",crash;nvdec,ingame,2022-08-19 18:54:40 -0100630010252000,"SuperEpic: The Entertainment War",,playable,2022-10-13 23:02:48 -01001A500E8B4000,"SUPERHOT",,playable,2021-05-05 19:51:30 -010075701153A000,"Superliminal",,playable,2020-09-03 13:20:50 -0100C01012654000,"Supermarket Shriek",,playable,2022-10-13 23:19:20 -0100A6E01201C000,"Supraland",nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11 -010029A00AEB0000,"Survive! MR.CUBE",,playable,2022-10-20 14:44:47 -01005AB01119C000,"SUSHI REVERSI",,playable,2021-06-11 19:26:58 -0100DDD0085A4000,"Sushi Striker™: The Way of Sushido",nvdec,playable,2020-06-26 20:49:11 -0100D6D00EC2C000,"Sweet Witches",nvdec,playable,2022-10-20 14:56:37 -010049D00C8B0000,"Swimsanity!",online,menus,2021-11-26 14:27:16 -01005DF00DC26000,"SWORD ART ONLINE: FATAL BULLET Complete Edition",UE4;gpu;online,ingame,2021-06-09 16:58:50 -01001B600D1D6000,"SWORD ART ONLINE: Hollow Realization Deluxe Edition",nvdec,playable,2022-08-19 19:19:15 -01000D70049BE000,"Sword of the Guardian",,playable,2020-07-16 12:24:39 -0100E4701355C000,"Sword of the Necromancer",crash,ingame,2022-12-10 01:28:39 -01004BB00421E000,"Syberia 1 & 2",,playable,2021-12-24 12:06:25 -010028C003FD6000,"Syberia 2",gpu,ingame,2022-08-24 12:43:03 -0100CBE004E6C000,"Syberia 3",nvdec,playable,2021-01-25 16:15:12 -010007300C482000,"Sydney Hunter and the Curse of the Mayan",,playable,2020-06-15 12:15:57 -0100D8400DAF0000,"SYNAPTIC DRIVE",online,playable,2020-09-07 13:44:05 -01009E700F448000,"Synergia",,playable,2021-04-06 17:58:04 -01009BF00E7D2000,"SYNTHETIK: Ultimate",gpu;crash,ingame,2022-08-30 03:19:25 -010015B00BB00000,"Table Top Racing: World Tour - Nitro Edition",,playable,2020-04-05 23:21:30 -01000F20083A8000,"Tactical Mind",,playable,2021-01-25 18:05:00 -0100BD700F5F0000,"Tactical Mind 2",,playable,2020-07-01 23:11:07 -0100E12013C1A000,"Tactics Ogre: Reborn",vulkan-backend-bug,playable,2024-04-09 06:21:35 -01007C7006AEE000,"Tactics V: Obsidian Brigade",,playable,2021-02-28 15:09:42 -01002C000B552000,"Taiko no Tatsujin: Drum 'n' Fun!",online-broken;ldn-broken,playable,2023-05-20 15:10:12 -0100BCA0135A0000,"Taiko no Tatsujin: Rhythm Festival",,playable,2023-11-13 13:16:34 -0100DD6012644000,"Taiko no Tatsujin: Rhythmic Adventure Pack",,playable,2020-12-03 07:28:26 -0100346017304000,"Taiko Risshiden V DX",crash,nothing,2022-06-06 16:25:31 -010040A00EA26000,"Taimumari: Complete Edition",,playable,2022-12-06 13:34:49 -0100F0C011A68000,"Tales from the Borderlands",nvdec,playable,2022-10-25 18:44:14 -0100408007078000,"Tales of the Tiny Planet",,playable,2021-01-25 15:47:41 -01002C0008E52000,"Tales of Vesperia™: Definitive Edition",,playable,2024-09-28 03:20:47 -010012800EE3E000,"Tamashii",,playable,2021-06-10 15:26:20 -010008A0128C4000,"Tamiku",gpu,ingame,2021-06-15 20:06:55 -010048F007ADE000,"Tangledeep",crash,boots,2021-01-05 04:08:41 -01007DB010D2C000,"TaniNani",crash;kernel,nothing,2021-04-08 03:06:44 -0100E06012BB4000,"Tank Mechanic Simulator",,playable,2020-12-11 15:10:45 -01007A601318C000,"Tanuki Justice",opengl,playable,2023-02-21 18:28:10 -01004DF007564000,"Tanzia",,playable,2021-06-07 11:10:25 -01002D4011208000,"Task Force Kampas",,playable,2020-11-30 14:44:15 -0100B76011DAA000,"Taxi Chaos",slow;online-broken;UE4,playable,2022-10-25 19:13:00 -0100F43011E5A000,"Tcheco in the Castle of Lucio",,playable,2020-06-27 13:35:43 -010092B0091D0000,"Team Sonic Racing",online-broken;ldn-works,playable,2024-02-05 15:05:27 -0100FE701475A000,"Teenage Mutant Ninja Turtles: Shredder's Revenge",deadlock;crash,boots,2024-09-28 09:31:39 -01005CF01E784000,"Teenage Mutant Ninja Turtles: Splintered Fate",,playable,2024-08-03 13:50:42 -0100FDB0154E4000,"Teenage Mutant Ninja Turtles: The Cowabunga Collection",,playable,2024-01-22 19:39:04 -010021100DF22000,"Telling Lies",,playable,2020-10-23 21:14:51 -0100C8B012DEA000,"Temtem",online-broken,menus,2022-12-17 17:36:11 -0100B2600A398000,"TENGAI for Nintendo Switch",32-bit,playable,2020-11-25 19:52:26 -0100D7A005DFC000,"Tennis",,playable,2020-06-01 20:50:36 -01002970080AA000,"Tennis in the Face",,playable,2022-08-22 14:10:54 -0100092006814000,"Tennis World Tour",online-broken,playable,2022-08-22 14:27:10 -0100950012F66000,"Tennis World Tour 2",online-broken,playable,2022-10-14 10:43:16 -0100E46006708000,"Terraria",online-broken,playable,2022-09-12 16:14:57 -010070C00FB56000,"TERROR SQUID",online-broken,playable,2023-10-30 22:29:29 -010043700EB68000,"TERRORHYTHM (TRRT)",,playable,2021-02-27 13:18:14 -0100FBC007EAE000,"Tesla vs Lovecraft",,playable,2023-11-21 06:19:36 -01005C8005F34000,"Teslagrad",,playable,2021-02-23 14:41:02 -01006F701507A000,"Tested on Humans: Escape Room",,playable,2022-11-12 14:42:52 -0100671016432000,"TETRA for Nintendo Switch™ International Edition",,playable,2020-06-26 20:49:55 -01004E500A15C000,"TETRA's Escape",,playable,2020-06-03 18:21:14 -010040600C5CE000,"Tetris 99 Retail Bundle",gpu;online-broken;ldn-untested,ingame,2024-05-02 16:36:41 -0100EC000D39A000,"Tetsumo Party",,playable,2020-06-09 22:39:55 -01008ED0087A4000,"The Adventure Pals",,playable,2022-08-22 14:48:52 -0100137010152000,"The Adventures of 00 Dilly®",,playable,2020-12-30 19:32:29 -01003B400A00A000,"The Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",nvdec,playable,2022-09-17 11:07:56 -010035C00A4BC000,"The Adventures of Elena Temple",,playable,2020-06-03 23:15:35 -010045A00E038000,"The Alliance Alive HD Remastered",nvdec,playable,2021-03-07 15:43:45 -010079A0112BE000,"The Almost Gone",,playable,2020-07-05 12:33:07 -0100CD500DDAE000,"The Bard's Tale ARPG: Remastered and Resnarkled",gpu;nvdec;online-working,ingame,2024-07-18 12:52:01 -01001E50141BC000,"The Battle Cats Unite!",deadlock,ingame,2021-12-14 21:38:34 -010089600E66A000,"The Big Journey",,playable,2022-09-16 14:03:08 -010021C000B6A000,"The Binding of Isaac: Afterbirth+",,playable,2021-04-26 14:11:56 -0100A5A00B2AA000,"The Bluecoats North & South",nvdec,playable,2020-12-10 21:22:29 -010062500BFC0000,"The Book of Unwritten Tales 2",,playable,2021-06-09 14:42:53 -01002A2004530000,"The Bridge",,playable,2020-06-03 13:53:26 -01008D700AB14000,"The Bug Butcher",,playable,2020-06-03 12:02:04 -01001B40086E2000,"The Bunker",nvdec,playable,2022-09-16 14:24:05 -010069100B7F0000,"The Caligula Effect: Overdose",UE4;gpu,ingame,2021-01-04 11:07:50 -010066800E9F8000,"The Childs Sight",,playable,2021-06-11 19:04:56 -0100B7C01169C000,"The Coma 2: Vicious Sisters",gpu,ingame,2020-06-20 12:51:51 -010033100691A000,"The Coma: Recut",,playable,2020-06-03 15:11:23 -01004170113D4000,"The Complex",nvdec,playable,2022-09-28 14:35:41 -01000F20102AC000,"The Copper Canyon Dixie Dash",UE4,playable,2022-09-29 11:42:29 -01000850037C0000,"The Count Lucanor",nvdec,playable,2022-08-22 15:26:37 -0100EBA01548E000,"The Cruel King and the Great Hero",gpu;services,ingame,2022-12-02 07:02:08 -010051800E922000,"The Dark Crystal: Age of Resistance Tactics",,playable,2020-08-11 13:43:41 -01003DE00918E000,"The Darkside Detective",,playable,2020-06-03 22:16:18 -01000A10041EA000,"The Elder Scrolls V: Skyrim",gpu;crash,ingame,2024-07-14 03:21:31 -01004A9006B84000,"The End Is Nigh",,playable,2020-06-01 11:26:45 -0100CA100489C000,"The Escapists 2",nvdec,playable,2020-09-24 12:31:31 -01001B700BA7C000,"The Escapists: Complete Edition",,playable,2021-02-24 17:50:31 -0100C2E0129A6000,"The Executioner",nvdec,playable,2021-01-23 00:31:28 -01006050114D4000,"The Experiment: Escape Room",gpu,ingame,2022-09-30 13:20:35 -0100B5900DFB2000,"The Eyes of Ara",,playable,2022-09-16 14:44:06 -01002DD00AF9E000,"The Fall",gpu,ingame,2020-05-31 23:31:16 -01003E5002320000,"The Fall Part 2: Unbound",,playable,2021-11-06 02:18:08 -0100CDC00789E000,"The Final Station",nvdec,playable,2022-08-22 15:54:39 -010098800A1E4000,"The First Tree",,playable,2021-02-24 15:51:05 -0100C38004DCC000,"The Flame In The Flood: Complete Edition",gpu;nvdec;UE4,ingame,2022-08-22 16:23:49 -010007700D4AC000,"The Forbidden Arts",,playable,2021-01-26 16:26:24 -010030700CBBC000,"The friends of Ringo Ishikawa",,playable,2022-08-22 16:33:17 -01006350148DA000,"The Gardener and the Wild Vines",gpu,ingame,2024-04-29 16:32:10 -0100B13007A6A000,"The Gardens Between",,playable,2021-01-29 16:16:53 -010036E00FB20000,"The Great Ace Attorney Chronicles",,playable,2023-06-22 21:26:29 -010007B012514000,"The Great Perhaps",,playable,2020-09-02 15:57:04 -01003B300E4AA000,"THE GRISAIA TRILOGY",,playable,2021-01-31 15:53:59 -01001950137D8000,"The Hong Kong Massacre",crash,ingame,2021-01-21 12:06:56 -01004AD00E094000,"The House of Da Vinci",,playable,2021-01-05 14:17:19 -01005A80113D2000,"The House of Da Vinci 2",,playable,2020-10-23 20:47:17 -010088401495E000,"The House of the Dead: Remake",,playable,2025-01-11 00:36:01 -0100E24004510000,"The Hunt - Championship Edition",32-bit,menus,2022-07-21 20:21:25 -01008940086E0000,"The Infectious Madness of Doctor Dekker",nvdec,playable,2022-08-22 16:45:01 -0100B0B00B318000,"The Inner World",nvdec,playable,2020-06-03 21:22:29 -0100A9D00B31A000,"The Inner World - The Last Wind Monk",nvdec,playable,2020-11-16 13:09:40 -0100AE5003EE6000,"The Jackbox Party Pack",online-working,playable,2023-05-28 09:28:40 -010015D003EE4000,"The Jackbox Party Pack 2",online-working,playable,2022-08-22 18:23:40 -0100CC80013D6000,"The Jackbox Party Pack 3",slow;online-working,playable,2022-08-22 18:41:06 -0100E1F003EE8000,"The Jackbox Party Pack 4",online-working,playable,2022-08-22 18:56:34 -010052C00B184000,"The Journey Down: Chapter One",nvdec,playable,2021-02-24 13:32:41 -01006BC00B188000,"The Journey Down: Chapter Three",nvdec,playable,2021-02-24 13:45:27 -01009AB00B186000,"The Journey Down: Chapter Two",nvdec,playable,2021-02-24 13:32:13 -010020500BD98000,"The King's Bird",,playable,2022-08-22 19:07:46 -010031B00DB34000,"the Knight & the Dragon",gpu,ingame,2023-08-14 10:31:43 -01007AF012E16000,"The Language Of Love",Needs Update;crash,nothing,2020-12-03 17:54:00 -010079C017F5E000,"The Lara Croft Collection",services-horizon;deadlock,nothing,2024-07-12 22:45:51 -0100449011506000,"The Last Campfire",,playable,2022-10-20 16:44:19 -0100AAD011592000,"The Last Dead End",gpu;UE4,ingame,2022-10-20 16:59:44 -0100AC800D022000,"THE LAST REMNANT Remastered",nvdec;UE4,playable,2023-02-09 17:24:44 -0100B1900F0B6000,"The Legend of Dark Witch",,playable,2020-07-12 15:18:33 -01001920156C2000,"The Legend of Heroes: Trails from Zero",gpu;mac-bug,ingame,2024-09-14 21:41:41 -01005420101DA000,"The Legend of Heroes: Trails of Cold Steel III",,playable,2020-12-16 10:59:18 -01009B101044C000,"The Legend of Heroes: Trails of Cold Steel III Demo",demo;nvdec,playable,2021-04-23 01:07:32 -0100D3C010DE8000,"The Legend of Heroes: Trails of Cold Steel IV",nvdec,playable,2021-04-23 14:01:05 -01005E5013862000,"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",crash,nothing,2021-09-30 14:41:07 -01008CF01BAAC000,"The Legend of Zelda Echoes of Wisdom",nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01 -0100509005AF2000,"The Legend of Zelda: Breath of the Wild Demo",demo,ingame,2022-12-24 05:02:58 -01007EF00011E000,"The Legend of Zelda™: Breath of the Wild",gpu;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46 -01006BB00C6F0000,"The Legend of Zelda™: Link’s Awakening",gpu;nvdec;mac-bug,ingame,2023-08-09 17:37:40 -01002DA013484000,"The Legend of Zelda™: Skyward Sword HD",gpu,ingame,2024-06-14 16:48:29 -0100F2C0115B6000,"The Legend of Zelda™: Tears of the Kingdom",gpu;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30 -0100A4400BE74000,"The LEGO Movie 2 Videogame",,playable,2023-03-01 11:23:37 -010064B00B95C000,"The Liar Princess and the Blind Prince",audio;slow,playable,2020-06-08 21:23:28 -0100735004898000,"The Lion's Song",,playable,2021-06-09 15:07:16 -0100A5000D590000,"The Little Acre",nvdec,playable,2021-03-02 20:22:27 -01007A700A87C000,"The Long Dark",,playable,2021-02-21 14:19:52 -010052B003A38000,"The Long Reach",nvdec,playable,2021-02-24 14:09:48 -01003C3013300000,"The Long Return",slow,playable,2020-12-10 21:05:10 -0100CE1004E72000,"The Longest Five Minutes",gpu,boots,2023-02-19 18:33:11 -0100F3D0122C2000,"The Longing",gpu,ingame,2022-11-12 15:00:58 -010085A00C5E8000,"The Lord of the Rings: Adventure Card Game - Definitive Edition",online-broken,menus,2022-09-16 15:19:32 -01008A000A404000,"The Lost Child",nvdec,playable,2021-02-23 15:44:20 -0100BAB00A116000,"The Low Road",,playable,2021-02-26 13:23:22 -,"The Mahjong",Needs Update;crash;services,nothing,2021-04-01 22:06:22 -0100DC300AC78000,"The Messenger",,playable,2020-03-22 13:51:37 -0100DEC00B2BC000,"The Midnight Sanctuary",nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32 -0100F1B00B456000,"The MISSING: J.J. Macfield and the Island of Memories",,playable,2022-08-22 19:36:18 -010033300AC1A000,"The Mooseman",,playable,2021-02-24 12:58:57 -01005E9016BDE000,"The movie The Quintessential Bride -Five Memories Spent with You-",,playable,2023-12-14 14:43:43 -0100496004194000,"The Mummy Demastered",,playable,2021-02-23 13:11:27 -01004C500AAF6000,"The Mystery of the Hudson Case",,playable,2020-06-01 11:03:36 -01000CF0084BC000,"The Next Penelope",,playable,2021-01-29 16:26:11 -01001FB00E386000,"THE NINJA SAVIORS Return of the Warriors",online,playable,2021-03-25 23:48:07 -0100B080184BC000,"The Oregon Trail",gpu,ingame,2022-11-25 16:11:49 -0100B0101265C000,"The Otterman Empire",UE4;gpu,ingame,2021-06-17 12:27:15 -01000BC01801A000,"The Outbound Ghost",,nothing,2024-03-02 17:10:58 -0100626011656000,"The Outer Worlds",gpu;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32 -01005C500D690000,"The Park",UE4;crash;gpu,ingame,2020-12-18 12:50:07 -010050101127C000,"The Persistence",nvdec,playable,2021-06-06 19:15:40 -0100CD300880E000,"The Pinball Arcade",online-broken,playable,2022-08-22 19:49:46 -01006BD018B54000,"The Plucky Squire",crash,ingame,2024-09-27 22:32:33 -0100E6A00B960000,"The Princess Guide",,playable,2021-02-24 14:23:34 -010058A00BF1C000,"The Raven Remastered",nvdec,playable,2022-08-22 20:02:47 -0100EB100D17C000,"The Red Strings Club",,playable,2020-06-01 10:51:18 -010079400BEE0000,"The Room",,playable,2021-04-14 18:57:05 -010033100EE12000,"The Ryuo's Work is Never Done!",,playable,2022-03-29 00:35:37 -01002BA00C7CE000,"The Savior's Gang",gpu;nvdec;UE4,ingame,2022-09-21 12:37:48 -0100F3200E7CA000,"The Settlers®: New Allies",deadlock,nothing,2023-10-25 00:18:05 -0100F89003BC8000,"The Sexy Brutale",,playable,2021-01-06 17:48:28 -01001FF00BEE8000,"The Shapeshifting Detective",nvdec,playable,2021-01-10 13:10:49 -010028D00BA1A000,"The Sinking City",nvdec;UE4,playable,2022-09-12 16:41:55 -010041C00A68C000,"The Spectrum Retreat",,playable,2022-10-03 18:52:40 -010029300E5C4000,"The Stanley Parable: Ultra Deluxe",gpu,ingame,2024-07-12 23:18:26 -010007F00AF56000,"The Station",,playable,2022-09-28 18:15:27 -0100858010DC4000,"the StoryTale",,playable,2022-09-03 13:00:25 -0100AA400A238000,"The Stretchers™",nvdec;UE4,playable,2022-09-16 15:40:58 -0100E3100450E000,"The Strike - Championship Edition",gpu;32-bit,boots,2022-12-09 15:58:16 -0100EF200DA60000,"The Survivalists",,playable,2020-10-27 15:51:13 -010040D00B7CE000,"The Swindle",nvdec,playable,2022-08-22 20:53:52 -010037D00D568000,"The Swords of Ditto: Mormo's Curse",slow,ingame,2020-12-06 00:13:12 -01009B300D76A000,"The Tiny Bang Story",,playable,2021-03-05 15:39:05 -0100C3300D8C4000,"The Touryst",crash,ingame,2023-08-22 01:32:38 -010047300EBA6000,"The Tower of Beatrice",,playable,2022-09-12 16:51:42 -010058000A576000,"The Town of Light: Deluxe Edition",gpu,playable,2022-09-21 12:51:34 -0100B0E0086F6000,"The Trail: Frontier Challenge",slow,playable,2022-08-23 15:10:51 -0100EA100F516000,"The Turing Test",nvdec,playable,2022-09-21 13:24:07 -010064E00ECBC000,"The Unicorn Princess",,playable,2022-09-16 16:20:56 -0100BCF00E970000,"The Vanishing of Ethan Carter",UE4,playable,2021-06-09 17:14:47 -0100D0500B0A6000,"The VideoKid",nvdec,playable,2021-01-06 09:28:24 -,"The Voice",services,menus,2020-07-28 20:48:49 -010056E00B4F4000,"The Walking Dead: A New Frontier",,playable,2022-09-21 13:40:48 -010099100B6AC000,"The Walking Dead: Season Two",,playable,2020-08-09 12:57:06 -010029200B6AA000,"The Walking Dead: The Complete First Season",,playable,2021-06-04 13:10:56 -010060F00AA70000,"The Walking Dead: The Final Season - Season Pass",online-broken,playable,2022-08-23 17:22:32 -010095F010568000,"The Wanderer: Frankenstein's Creature",,playable,2020-07-11 12:49:51 -01008B200FC6C000,"The Wardrobe: Even Better Edition",,playable,2022-09-16 19:14:55 -01003D100E9C6000,"The Witcher 3: Wild Hunt",nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51 -0100B1300FF08000,"The Wonderful 101: Remastered",slow;nvdec,playable,2022-09-30 13:49:28 -0100C1500B82E000,"The World Ends with You®: Final Remix",ldn-untested,playable,2022-07-09 01:11:21 -0100E6200D56E000,"The World Next Door",,playable,2022-09-21 14:15:23 -010075900CD1C000,"Thea: The Awakening",,playable,2021-01-18 15:08:47 -010081B01777C000,"THEATRHYTHM FINAL BAR LINE",Incomplete,ingame,2024-08-05 14:24:55 -01001C2010D08000,"They Bleed Pixels",gpu,ingame,2024-08-09 05:52:18 -0100768010970000,"They Came From the Sky",,playable,2020-06-12 16:38:19 -0100CE700F62A000,"Thief of Thieves: Season One",crash;loader-allocator,nothing,2021-11-03 07:16:30 -0100CE400E34E000,"Thief Simulator",,playable,2023-04-22 04:39:11 -01009BD003B36000,"Thimbleweed Park",,playable,2022-08-24 11:15:31 -0100F2300A5DA000,"Think of the Children",deadlock,menus,2021-11-23 09:04:45 -0100066004D68000,"This Is the Police",,playable,2022-08-24 11:37:05 -01004C100A04C000,"This is the Police 2",,playable,2022-08-24 11:49:17 -0100C7C00F77C000,"This Strange Realm Of Mine",,playable,2020-08-28 12:07:24 -0100A8700BC2A000,"This War of Mine: Complete Edition",gpu;32-bit;nvdec,ingame,2022-08-24 12:00:44 -0100AC500EEE8000,"THOTH",,playable,2020-08-05 18:35:28 -0100E910103B4000,"Thronebreaker: The Witcher Tales",nvdec,playable,2021-06-03 16:40:15 -01006F6002840000,"Thumper",gpu,ingame,2024-08-12 02:41:07 -01000AC011588000,"Thy Sword",crash,ingame,2022-09-30 16:43:14 -0100E9000C42C000,"Tick Tock: A Tale for Two",,menus,2020-07-14 14:49:38 -0100B6D00C2DE000,"Tied Together",nvdec,playable,2021-04-10 14:03:46 -010074500699A000,"Timber Tennis: Versus",online,playable,2020-10-03 17:07:15 -01004C500B698000,"Time Carnage",,playable,2021-06-16 17:57:28 -0100F770045CA000,"Time Recoil",,playable,2022-08-24 12:44:03 -0100DD300CF3A000,"Timespinner",gpu,ingame,2022-08-09 09:39:11 -0100393013A10000,"Timothy and the Mysterious Forest",gpu;slow,ingame,2021-06-02 00:42:11 -0100F7C010AF6000,"Tin & Kuna",,playable,2020-11-17 12:16:12 -0100DF900FC52000,"Tiny Gladiators",,playable,2020-12-14 00:09:43 -010061A00AE64000,"Tiny Hands Adventure",,playable,2022-08-24 16:07:48 -010074800741A000,"TINY METAL",UE4;gpu;nvdec,ingame,2021-03-05 17:11:57 -01005D0011A40000,"Tiny Racer",,playable,2022-10-07 11:13:03 -010002401AE94000,"Tiny Thor",gpu,ingame,2024-07-26 08:37:35 -0100A73016576000,"Tinykin",gpu,ingame,2023-06-18 12:12:24 -0100FE801185E000,"Titan Glory",,boots,2022-10-07 11:36:40 -0100605008268000,"Titan Quest",nvdec;online-broken,playable,2022-08-19 21:54:15 -01009C400E93E000,"Titans Pinball",slow,playable,2020-06-09 16:53:52 -010019500DB1E000,"Tlicolity Eyes - twinkle showtime -",gpu,boots,2021-05-29 19:43:44 -010036700F83E000,"To the Moon",,playable,2021-03-20 15:33:38 -010014900865A000,"Toast Time: Smash Up!",crash;services,menus,2020-04-03 12:26:59 -0100A4A00B2E8000,"Toby: The Secret Mine",nvdec,playable,2021-01-06 09:22:33 -0100B5200BB7C000,"ToeJam & Earl: Back in the Groove!",,playable,2021-01-06 22:56:58 -0100B5E011920000,"TOHU",slow,playable,2021-02-08 15:40:44 -0100F3400A432000,"Toki",nvdec,playable,2021-01-06 19:59:23 -01003E500F962000,"Tokyo Dark – Remembrance –",nvdec,playable,2021-06-10 20:09:49 -0100A9400C9C2000,"Tokyo Mirage Sessions™ #FE Encore",32-bit;nvdec,playable,2022-07-07 09:41:07 -0100E2E00CB14000,"Tokyo School Life",,playable,2022-09-16 20:25:54 -010024601BB16000,"Tomb Raider I-III Remastered Starring Lara Croft",gpu;opengl,ingame,2024-09-27 12:32:04 -0100D7F01E49C000,"Tomba! Special Edition",services-horizon,nothing,2024-09-15 21:59:54 -0100D400100F8000,"Tonight We Riot",,playable,2021-02-26 15:55:09 -0100CC00102B4000,"Tony Hawk's™ Pro Skater™ 1 + 2",gpu;Needs Update,ingame,2024-09-24 08:18:14 -010093F00E818000,"Tools Up!",crash,ingame,2020-07-21 12:58:17 -01009EA00E2B8000,"Toon War",,playable,2021-06-11 16:41:53 -010090400D366000,"Torchlight II",,playable,2020-07-27 14:18:37 -010075400DDB8000,"Torchlight III",nvdec;online-broken;UE4,playable,2022-10-14 22:20:17 -01007AF011732000,"TORICKY-S",deadlock,menus,2021-11-25 08:53:36 -0100BEB010F2A000,"Torn Tales: Rebound Edition",,playable,2020-11-01 14:11:59 -0100A64010D48000,"Total Arcade Racing",,playable,2022-11-12 15:12:48 -0100512010728000,"Totally Reliable Delivery Service",online-broken,playable,2024-09-27 19:32:22 -01004E900B082000,"Touhou Genso Wanderer Reloaded",gpu;nvdec,ingame,2022-08-25 11:57:36 -010010F004022000,"Touhou Kobuto V: Burst Battle",,playable,2021-01-11 15:28:58 -0100E9D00D6C2000,"TOUHOU Spell Bubble",,playable,2020-10-18 11:43:43 -0100F7B00595C000,"Tower Of Babel",,playable,2021-01-06 17:05:15 -010094600DC86000,"Tower Of Time",gpu;nvdec,ingame,2020-07-03 11:11:12 -0100A1C00359C000,"TowerFall",,playable,2020-05-16 18:58:07 -0100F6200F77E000,"Towertale",,playable,2020-10-15 13:56:58 -010049E00BA34000,"Townsmen - A Kingdom Rebuilt",nvdec,playable,2022-10-14 22:48:59 -01009FF00A160000,"Toy Stunt Bike: Tiptop's Trials",UE4,playable,2021-04-10 13:56:34 -0100192010F5A000,"Tracks - Toybox Edition",UE4;crash,nothing,2021-02-08 15:19:18 -0100BCA00843A000,"Trailblazers",,playable,2021-03-02 20:40:49 -010009F004E66000,"Transcripted",,playable,2022-08-25 12:13:11 -01005E500E528000,"TRANSFORMERS: BATTLEGROUNDS",online,playable,2021-06-17 18:08:19 -0100BE500BEA2000,"Transistor",,playable,2020-10-22 11:28:02 -0100A8D010BFA000,"Travel Mosaics 2: Roman Holiday",,playable,2021-05-26 12:33:16 -0100102010BFC000,"Travel Mosaics 3: Tokyo Animated",,playable,2021-05-26 12:06:27 -010096D010BFE000,"Travel Mosaics 4: Adventures In Rio",,playable,2021-05-26 11:54:58 -01004C4010C00000,"Travel Mosaics 5: Waltzing Vienna",,playable,2021-05-26 11:49:35 -0100D520119D6000,"Travel Mosaics 6: Christmas Around the World",,playable,2021-05-26 00:52:47 -01000BD0119DE000,"Travel Mosaics 7: Fantastic Berlin",,playable,2021-05-22 18:37:34 -01007DB00A226000,"Travel Mosaics: A Paris Tour",,playable,2021-05-26 12:42:26 -010011600C946000,"Travis Strikes Again: No More Heroes",nvdec;UE4,playable,2022-08-25 12:36:38 -01006EB004B0E000,"Treadnauts",,playable,2021-01-10 14:57:41 -0100D7800E9E0000,"Trials of Mana",UE4,playable,2022-09-30 21:50:37 -0100E1D00FBDE000,"Trials of Mana Demo",nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02 -01003E800A102000,"Trials Rising Standard Edition",,playable,2024-02-11 01:36:39 -0100CC80140F8000,"TRIANGLE STRATEGY™",gpu;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37 -010064E00A932000,"Trine 2: Complete Story",nvdec,playable,2021-06-03 11:45:20 -0100DEC00A934000,"Trine 3: The Artifacts of Power",ldn-untested;online,playable,2021-06-03 12:01:24 -010055E00CA68000,"Trine 4: The Nightmare Prince",gpu,nothing,2025-01-07 05:47:46 -0100D9000A930000,"Trine Enchanted Edition",ldn-untested;nvdec,playable,2021-06-03 11:28:15 -01002D7010A54000,"Trinity Trigger",crash,ingame,2023-03-03 03:09:09 -0100868013FFC000,"TRIVIAL PURSUIT Live! 2",,boots,2022-12-19 00:04:33 -0100F78002040000,"Troll and I™",gpu;nvdec,ingame,2021-06-04 16:58:50 -0100145011008000,"Trollhunters: Defenders of Arcadia",gpu;nvdec,ingame,2020-11-30 13:27:09 -0100FBE0113CC000,"Tropico 6 - Nintendo Switch™ Edition",nvdec;UE4,playable,2022-10-14 23:21:03 -0100D06018DCA000,"Trouble Witches Final! Episode 01: Daughters of Amalgam",,playable,2024-04-08 15:08:11 -0100B5B0113CE000,"Troubleshooter",UE4;crash,nothing,2020-10-04 13:46:50 -010089600FB72000,"Trover Saves The Universe",UE4;crash,nothing,2020-10-03 10:25:27 -0100E6300D448000,"Trüberbrook",,playable,2021-06-04 17:08:00 -0100F2100AA5C000,"Truck and Logistics Simulator",,playable,2021-06-11 13:29:08 -0100CB50107BA000,"Truck Driver",online-broken,playable,2022-10-20 17:42:33 -0100E75004766000,"True Fear: Forsaken Souls - Part 1",nvdec,playable,2020-12-15 21:39:52 -010099900CAB2000,"TT Isle of Man",nvdec,playable,2020-06-22 12:25:13 -010000400F582000,"TT Isle of Man Ride on the Edge 2",gpu;nvdec;online-broken,ingame,2022-09-30 22:13:05 -0100752011628000,"TTV2",,playable,2020-11-27 13:21:36 -0100AFE00452E000,"Tumblestone",,playable,2021-01-07 17:49:20 -010085500D5F6000,"Turok",gpu,ingame,2021-06-04 13:16:24 -0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;vulkan,ingame,2022-09-12 17:50:05 -010004B0130C8000,"Turrican Flashback",audout,playable,2021-08-30 10:07:56 -0100B1F0090F2000,"TurtlePop: Journey to Freedom",,playable,2020-06-12 17:45:39 -0100047009742000,"Twin Robots: Ultimate Edition",nvdec,playable,2022-08-25 14:24:03 -010031200E044000,"Two Point Hospital™",crash;nvdec,ingame,2022-09-22 11:22:23 -010038400C2FE000,"TY the Tasmanian Tiger™ HD",32-bit;crash;nvdec,menus,2020-12-17 21:15:00 -010073A00C4B2000,"Tyd wag vir Niemand",,playable,2021-03-02 13:39:53 -0100D5B00D6DA000,"Type:Rider",,playable,2021-01-06 13:12:55 -010040D01222C000,"UBERMOSH: SANTICIDE",,playable,2020-11-27 15:05:01 -0100992010BF8000,"Ubongo",,playable,2021-02-04 21:15:01 -010079000B56C000,"UglyDolls: An Imperfect Adventure",nvdec;UE4,playable,2022-08-25 14:42:16 -010048901295C000,"Ultimate Fishing Simulator",,playable,2021-06-16 18:38:23 -01009D000FAE0000,"Ultimate Racing 2D",,playable,2020-08-05 17:27:09 -010045200A1C2000,"Ultimate Runner",,playable,2022-08-29 12:52:40 -01006B601117E000,"Ultimate Ski Jumping 2020",online,playable,2021-03-02 20:54:11 -01002D4012222000,"Ultra Hat Dimension",services;audio,menus,2021-11-18 09:05:20 -01009C000415A000,"Ultra Hyperball",,playable,2021-01-06 10:09:55 -01007330027EE000,"Ultra Street Fighter® II: The Final Challengers",ldn-untested,playable,2021-11-25 07:54:58 -01006A300BA2C000,"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",audout,playable,2023-05-04 17:25:23 -0100592005164000,"UNBOX: Newbie's Adventure",UE4,playable,2022-08-29 13:12:56 -01002D900C5E4000,"Uncanny Valley",nvdec,playable,2021-06-04 13:28:45 -010076F011F54000,"Undead & Beyond",nvdec,playable,2022-10-04 09:11:18 -01008F3013E4E000,"Under Leaves",,playable,2021-05-22 18:13:58 -010080B00AD66000,"Undertale",,playable,2022-08-31 17:31:46 -01008F80049C6000,"Unepic",,playable,2024-01-15 17:03:00 -01007820096FC000,"UnExplored",,playable,2021-01-06 10:02:16 -01007D1013512000,"Unhatched",,playable,2020-12-11 12:11:09 -010069401ADB8000,"Unicorn Overlord",,playable,2024-09-27 14:04:32 -0100B1400D92A000,"Unit 4",,playable,2020-12-16 18:54:13 -010045200D3A4000,"Unknown Fate",slow,ingame,2020-10-15 12:27:42 -0100AB2010B4C000,"Unlock The King",,playable,2020-09-01 13:58:27 -0100A3E011CB0000,"Unlock the King 2",,playable,2021-06-15 20:43:55 -01005AA00372A000,"UNO® for Nintendo Switch",nvdec;ldn-untested,playable,2022-07-28 14:49:47 -0100E5D00CC0C000,"Unravel Two",nvdec,playable,2024-05-23 15:45:05 -010001300CC4A000,"Unruly Heroes",,playable,2021-01-07 18:09:31 -0100B410138C0000,"Unspottable",,playable,2022-10-25 19:28:49 -010082400BCC6000,"Untitled Goose Game",,playable,2020-09-26 13:18:06 -0100E49013190000,"Unto The End",gpu,ingame,2022-10-21 11:13:29 -0100B110109F8000,"Urban Flow",services,playable,2020-07-05 12:51:47 -010054F014016000,"Urban Street Fighting",,playable,2021-02-20 19:16:36 -01001B10068EC000,"Urban Trial Playground",UE4;nvdec;online,playable,2021-03-25 20:56:51 -0100A2500EB92000,"Urban Trial Tricky",nvdec;UE4,playable,2022-12-06 13:07:56 -01007C0003AEC000,"Use Your Words",nvdec;online-broken,menus,2022-08-29 17:22:10 -0100D4300EBF8000,"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44 -010024200E00A000,"Uta no☆Prince-sama♪ Repeat Love",nvdec,playable,2022-12-09 09:21:51 -010029B00CC3E000,"UTOPIA 9 - A Volatile Vacation",nvdec,playable,2020-12-16 17:06:42 -010064400B138000,"V-Rally 4",gpu;nvdec,ingame,2021-06-07 19:37:31 -0100A6700D66E000,"VA-11 HALL-A",,playable,2021-02-26 15:05:34 -01009E2003FE2000,"Vaccine",nvdec,playable,2021-01-06 01:02:07 -010089700F30C000,"Valfaris",,playable,2022-09-16 21:37:24 -0100CAF00B744000,"Valkyria Chronicles",32-bit;crash;nvdec,ingame,2022-11-23 20:03:32 -01005C600AC68000,"Valkyria Chronicles 4",audout;nvdec,playable,2021-06-03 18:12:25 -0100FBD00B91E000,"Valkyria Chronicles 4 Demo",slow;demo,ingame,2022-08-29 20:39:07 -0100E0E00B108000,"Valley",nvdec,playable,2022-09-28 19:27:58 -010089A0197E4000,"Vampire Survivors",,ingame,2024-06-17 09:57:38 -010020C00FFB6000,"Vampire: The Masquerade - Coteries of New York",,playable,2020-10-04 14:55:22 -01000BD00CE64000,"VAMPYR",nvdec;UE4,playable,2022-09-16 22:15:51 -01007C500D650000,"Vandals",,playable,2021-01-27 21:45:46 -010030F00CA1E000,"Vaporum",nvdec,playable,2021-05-28 14:25:33 -010045C0109F2000,"VARIABLE BARRICADE NS",nvdec,playable,2022-02-26 15:50:13 -0100FE200AF48000,"VASARA Collection",nvdec,playable,2021-02-28 15:26:10 -0100AD300E4FA000,"Vasilis",,playable,2020-09-01 15:05:35 -01009CD003A0A000,"Vegas Party",,playable,2021-04-14 19:21:41 -010098400E39E000,"Vektor Wars",online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46 -01003A8018E60000,"Vengeful Guardian: Moonrider",deadlock,boots,2024-03-17 23:35:37 -010095B00DBC8000,"Venture Kid",crash;gpu,ingame,2021-04-18 16:33:17 -0100C850134A0000,"Vera Blanc: Full Moon",audio,playable,2020-12-17 12:09:30 -0100379013A62000,"Very Very Valet",nvdec,playable,2022-11-12 15:25:51 -01006C8014DDA000,"Very Very Valet Demo",crash;Needs Update;demo,boots,2022-11-12 15:26:13 -010057B00712C000,"Vesta",nvdec,playable,2022-08-29 21:03:39 -0100E81007A06000,"Victor Vran Overkill Edition",gpu;deadlock;nvdec;opengl,ingame,2022-08-30 11:46:56 -01005880063AA000,"Violett",nvdec,playable,2021-01-28 13:09:36 -010037900CB1C000,"Viviette",,playable,2021-06-11 15:33:40 -0100D010113A8000,"Void Bastards",,playable,2022-10-15 00:04:19 -0100FF7010E7E000,"void tRrLM(); //Void Terrarium",gpu;Needs Update;regression,ingame,2023-02-10 01:13:25 -010078D0175EE000,"void* tRrLM2(); //Void Terrarium 2",,playable,2023-12-21 11:00:41 -0100B1A0066DC000,"Volgarr the Viking",,playable,2020-12-18 15:25:50 -0100A7900E79C000,"Volta-X",online-broken,playable,2022-10-07 12:20:51 -01004D8007368000,"Vostok Inc.",,playable,2021-01-27 17:43:59 -0100B1E0100A4000,"Voxel Galaxy",,playable,2022-09-28 22:45:02 -0100AFA011068000,"Voxel Pirates",,playable,2022-09-28 22:55:02 -0100BFB00D1F4000,"Voxel Sword",,playable,2022-08-30 14:57:27 -01004E90028A2000,"Vroom in the night sky",Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29 -0100C7C00AE6C000,"VSR: Void Space Racing",,playable,2021-01-27 14:08:59 -0100B130119D0000,"Waifu Uncovered",crash,ingame,2023-02-27 01:17:46 -0100E29010A4A000,"Wanba Warriors",,playable,2020-10-04 17:56:22 -010078800825E000,"Wanderjahr TryAgainOrWalkAway",,playable,2020-12-16 09:46:04 -0100B27010436000,"Wanderlust Travel Stories",,playable,2021-04-07 16:09:12 -0100F8A00853C000,"Wandersong",nvdec,playable,2021-06-04 15:33:34 -0100D67013910000,"Wanna Survive",,playable,2022-11-12 21:15:43 -010056901285A000,"War Dogs: Red's Return",,playable,2022-11-13 15:29:01 -01004FA01391A000,"War Of Stealth - assassin",,playable,2021-05-22 17:34:38 -010035A00D4E6000,"War Party",nvdec,playable,2021-01-27 18:26:32 -010049500DE56000,"War Tech Fighters",nvdec,playable,2022-09-16 22:29:31 -010084D00A134000,"War Theatre",gpu,ingame,2021-06-07 19:42:45 -0100B6B013B8A000,"War Truck Simulator",,playable,2021-01-31 11:22:54 -0100563011B4A000,"War-Torn Dreams",crash,nothing,2020-10-21 11:36:16 -010054900F51A000,"WARBORN",,playable,2020-06-25 12:36:47 -01000F0002BB6000,"Wargroove",online-broken,playable,2022-08-31 10:30:45 -0100C6000EEA8000,"Warhammer 40,000: Mechanicus",nvdec,playable,2021-06-13 10:46:38 -0100E5600D7B2000,"WARHAMMER 40,000: SPACE WOLF",online-broken,playable,2022-09-20 21:11:20 -010031201307A000,"Warhammer Age of Sigmar: Storm Ground",nvdec;online-broken;UE4,playable,2022-11-13 15:46:14 -01002FF00F460000,"Warhammer Quest 2: The End Times",,playable,2020-08-04 15:28:03 -0100563010E0C000,"WarioWare™: Get It Together!",gpu;opengl-backend-bug,ingame,2024-04-23 01:04:56 -010045B018EC2000,"WarioWare™: Move It!",,playable,2023-11-14 00:23:51 -0100E0400E320000,"Warlocks 2: God Slayers",,playable,2020-12-16 17:36:50 -0100DB300A026000,"Warp Shift",nvdec,playable,2020-12-15 14:48:48 -010032700EAC4000,"WarriOrb",UE4,playable,2021-06-17 15:45:14 -0100E8500AD58000,"WARRIORS OROCHI 4 ULTIMATE",nvdec;online-broken,playable,2024-08-07 01:50:37 -0100CD900FB24000,"WARTILE",UE4;crash;gpu,menus,2020-12-11 21:56:10 -010039A00BC64000,"Wasteland 2: Director's Cut",nvdec,playable,2021-01-27 13:34:11 -0100B79011F06000,"Water Balloon Mania",,playable,2020-10-23 20:20:59 -0100BA200C378000,"Way of the Passive Fist",gpu,ingame,2021-02-26 21:07:06 -0100560010E3E000,"We should talk.",crash,nothing,2020-08-03 12:32:36 -010096000EEBA000,"Welcome to Hanwell",UE4;crash,boots,2020-08-03 11:54:57 -0100D7F010B94000,"Welcome to Primrose Lake",,playable,2022-10-21 11:30:57 -010035600EC94000,"Wenjia",,playable,2020-06-08 11:38:30 -010031B00A4E8000,"West of Loathing",,playable,2021-01-28 12:35:19 -010038900DFE0000,"What Remains of Edith Finch",slow;UE4,playable,2022-08-31 19:57:59 -010033600ADE6000,"Wheel of Fortune®",crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24 -0100DFC00405E000,"Wheels of Aurelia",,playable,2021-01-27 21:59:25 -010027D011C9C000,"Where Angels Cry",gpu;nvdec,ingame,2022-09-30 22:24:47 -0100FDB0092B4000,"Where Are My Friends?",,playable,2022-09-21 14:39:26 -01000C000C966000,"Where the Bees Make Honey",,playable,2020-07-15 12:40:49 -010017500E7E0000,"Whipseey and the Lost Atlas",,playable,2020-06-23 20:24:14 -010015A00AF1E000,"Whispering Willows",nvdec,playable,2022-09-30 22:33:05 -010027F0128EA000,"Who Wants to Be a Millionaire?",crash,nothing,2020-12-11 20:22:42 -0100C7800CA06000,"Widget Satchel",,playable,2022-09-16 22:41:07 -0100CFC00A1D8000,"Wild Guns™ Reloaded",,playable,2021-01-28 12:29:05 -010071F00D65A000,"Wilmot's Warehouse",audio;gpu,ingame,2021-06-02 17:24:32 -010048800B638000,"Windjammers",online,playable,2020-10-13 11:24:25 -010059900BA3C000,"Windscape",,playable,2022-10-21 11:49:42 -0100D6800CEAC000,"Windstorm: An Unexpected Arrival",UE4,playable,2021-06-07 19:33:19 -01005A100B314000,"Windstorm: Start of a Great Friendship",UE4;gpu;nvdec,ingame,2020-12-22 13:17:48 -010035B012F28000,"Wing of Darkness",UE4,playable,2022-11-13 16:03:51 -0100A4A015FF0000,"Winter Games 2023",deadlock,menus,2023-11-07 20:47:36 -010012A017F18800,"Witch On The Holy Night",,playable,2023-03-06 23:28:11 -0100454012E32000,"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",crash,ingame,2021-08-08 11:56:18 -01002FC00C6D0000,"Witch Thief",,playable,2021-01-27 18:16:07 -010061501904E000,"Witch's Garden",gpu;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24 -0100BD4011FFE000,"Witcheye",,playable,2020-12-14 22:56:08 -0100522007AAA000,"Wizard of Legend",,playable,2021-06-07 12:20:46 -010081900F9E2000,"Wizards of Brandel",,nothing,2020-10-14 15:52:33 -0100C7600E77E000,"Wizards: Wand of Epicosity",,playable,2022-10-07 12:32:06 -01009040091E0000,"Wolfenstein II®: The New Colossus™",gpu,ingame,2024-04-05 05:39:46 -01003BD00CAAE000,"Wolfenstein: Youngblood",online-broken,boots,2024-07-12 23:49:20 -010037A00F5E2000,"Wonder Blade",,playable,2020-12-11 17:55:31 -0100B49016FF0000,"Wonder Boy Anniversary Collection",deadlock,nothing,2023-04-20 16:01:48 -0100EB2012E36000,"Wonder Boy Asha in Monster World",crash,nothing,2021-11-03 08:45:06 -0100A6300150C000,"Wonder Boy: The Dragon's Trap",,playable,2021-06-25 04:53:21 -0100F5D00C812000,"Wondershot",,playable,2022-08-31 21:05:31 -0100E0300EB04000,"Woodle Tree 2: Deluxe",gpu;slow,ingame,2020-06-04 18:44:00 -0100288012966000,"Woodsalt",,playable,2021-04-06 17:01:48 -010083E011BC8000,"Wordify",,playable,2020-10-03 09:01:07 -01009D500A194000,"World Conqueror X",,playable,2020-12-22 16:10:29 -010072000BD32000,"WORLD OF FINAL FANTASY MAXIMA",,playable,2020-06-07 13:57:23 -010009E001D90000,"World of Goo",gpu;32-bit;crash;regression,boots,2024-04-12 05:52:14 -010061F01DB7C800,"World of Goo 2",,boots,2024-08-08 22:52:49 -01001E300B038000,"World Soccer Pinball",,playable,2021-01-06 00:37:02 -010048900CF64000,"Worldend Syndrome",,playable,2021-01-03 14:16:32 -01008E9007064000,"WorldNeverland - Elnea Kingdom",,playable,2021-01-28 17:44:23 -010000301025A000,"Worlds of Magic: Planar Conquest",,playable,2021-06-12 12:51:28 -01009CD012CC0000,"Worm Jazz",gpu;services;UE4;regression,ingame,2021-11-10 10:33:04 -01001AE005166000,"Worms W.M.D",gpu;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59 -010037500C4DE000,"Worse Than Death",,playable,2021-06-11 16:05:40 -01006F100EB16000,"Woven",nvdec,playable,2021-06-02 13:41:08 -010087800DCEA000,"WRC 8 FIA World Rally Championship",nvdec,playable,2022-09-16 23:03:36 -01001A0011798000,"WRC 9 The Official Game",gpu;slow;nvdec,ingame,2022-10-25 19:47:39 -0100DC0012E48000,"Wreckfest",,playable,2023-02-12 16:13:00 -0100C5D00EDB8000,"Wreckin' Ball Adventure",UE4,playable,2022-09-12 18:56:28 -010033700418A000,"Wulverblade",nvdec,playable,2021-01-27 22:29:05 -01001C400482C000,"Wunderling DX",audio;crash,ingame,2022-09-10 13:20:12 -01003B401148E000,"Wurroom",,playable,2020-10-07 22:46:21 -010081700EDF4000,"WWE 2K Battlegrounds",nvdec;online-broken;UE4,playable,2022-10-07 12:44:40 -010009800203E000,"WWE 2K18",nvdec,playable,2023-10-21 17:22:01 -0100DF100B97C000,"X-Morph: Defense",,playable,2020-06-22 11:05:31 -0100D0B00FB74000,"XCOM® 2 Collection",gpu;crash,ingame,2022-10-04 09:38:30 -0100CC9015360000,"XEL",gpu,ingame,2022-10-03 10:19:39 -0100C9F009F7A000,"Xenoblade Chronicles 2: Torna ~ The Golden Country",slow;nvdec,playable,2023-01-28 16:47:28 -0100E95004038000,"Xenoblade Chronicles™ 2",deadlock;amd-vendor-bug,ingame,2024-03-28 14:31:41 -010074F013262000,"Xenoblade Chronicles™ 3",gpu;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44 -0100FF500E34A000,"Xenoblade Chronicles™ Definitive Edition",nvdec,playable,2024-05-04 20:12:41 -010028600BA16000,"Xenon Racer",nvdec;UE4,playable,2022-08-31 22:05:30 -010064200C324000,"Xenon Valkyrie+",,playable,2021-06-07 20:25:53 -0100928005BD2000,"Xenoraid",,playable,2022-09-03 13:01:10 -01005B5009364000,"Xeodrifter",,playable,2022-09-03 13:18:39 -01006FB00DB02000,"Yaga",nvdec,playable,2022-09-16 23:17:17 -010076B0101A0000,"YesterMorrow",crash,ingame,2020-12-17 17:15:25 -010085500B29A000,"Yet Another Zombie Defense HD",,playable,2021-01-06 00:18:39 -0100725019978000,"YGGDRA UNION ~WE'LL NEVER FIGHT ALONE~",,playable,2020-04-03 02:20:47 -0100634008266000,"YIIK: A Postmodern RPG",,playable,2021-01-28 13:38:37 -0100C0000CEEA000,"Yo kai watch 1 for Nintendo Switch",gpu;opengl,ingame,2024-05-28 11:11:49 -010086C00AF7C000,"Yo-Kai Watch 4++",,playable,2024-06-18 20:21:44 -010002D00632E000,"Yoku's Island Express",nvdec,playable,2022-09-03 13:59:02 -0100F47016F26000,"Yomawari 3",,playable,2022-05-10 08:26:51 -010012F00B6F2000,"Yomawari: The Long Night Collection",,playable,2022-09-03 14:36:59 -0100CC600ABB2000,"Yonder: The Cloud Catcher Chronicles (Retail Only)",,playable,2021-01-28 14:06:25 -0100BE50042F6000,"Yono and the Celestial Elephants",,playable,2021-01-28 18:23:58 -0100F110029C8000,"Yooka-Laylee",,playable,2021-01-28 14:21:45 -010022F00DA66000,"Yooka-Laylee and the Impossible Lair",,playable,2021-03-05 17:32:21 -01006000040C2000,"Yoshi’s Crafted World™",gpu;audout,ingame,2021-08-30 13:25:51 -0100AE800C9C6000,"Yoshi’s Crafted World™ Demo",gpu,boots,2020-12-16 14:57:40 -,"Yoshiwara Higanbana Kuon no Chigiri",nvdec,playable,2020-10-17 19:14:46 -01003A400C3DA800,"YouTube",,playable,2024-06-08 05:24:10 -00100A7700CCAA40,"Youtubers Life00",nvdec,playable,2022-09-03 14:56:19 -0100E390124D8000,"Ys IX: Monstrum Nox",,playable,2022-06-12 04:14:42 -0100F90010882000,"Ys Origin",nvdec,playable,2024-04-17 05:07:33 -01007F200B0C0000,"Ys VIII: Lacrimosa of DANA",nvdec,playable,2023-08-05 09:26:41 -010022400BE5A000,"Yu-Gi-Oh! Legacy of the Duelist : Link Evolution",,playable,2024-09-27 21:48:43 -01002D60188DE000,"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",crash,ingame,2023-03-17 01:54:01 -010037D00DBDC000,"YU-NO: A girl who chants love at the bound of this world.",nvdec,playable,2021-01-26 17:03:52 -0100B56011502000,"Yumeutsutsu Re:After",,playable,2022-11-20 16:09:06 -,"Yunohana Spring! - Mellow Times -",audio;crash,menus,2020-09-27 19:27:40 -0100307011C44000,"Yuppie Psycho: Executive Edition",crash,ingame,2020-12-11 10:37:06 -0100FC900963E000,"Yuri",,playable,2021-06-11 13:08:50 -010092400A678000,"Zaccaria Pinball",online-broken,playable,2022-09-03 15:44:28 -0100E7900C4C0000,"Zarvot",,playable,2021-01-28 13:51:36 -01005F200F7C2000,"Zen Chess Collection",,playable,2020-07-01 22:28:27 -01008DD0114AE000,"Zenge",,playable,2020-10-22 13:23:57 -0100057011E50000,"Zengeon",services-horizon;crash,boots,2024-04-29 15:43:07 -0100AAC00E692000,"Zenith",,playable,2022-09-17 09:57:02 -0100A6A00894C000,"ZERO GUNNER 2- for Nintendo Switch",,playable,2021-01-04 20:17:14 -01004B001058C000,"Zero Strain",services;UE4,menus,2021-11-10 07:48:32 -,"Zettai kaikyu gakuen",gpu;nvdec,ingame,2020-08-25 15:15:54 -0100D7B013DD0000,"Ziggy the Chaser",,playable,2021-02-04 20:34:27 -010086700EF16000,"ZikSquare",gpu,ingame,2021-11-06 02:02:48 -010069C0123D8000,"Zoids Wild Blast Unleashed",nvdec,playable,2022-10-15 11:26:59 -0100C7300EEE4000,"Zombie Army Trilogy",ldn-untested;online,playable,2020-12-16 12:02:28 -01006CF00DA8C000,"Zombie Driver Immortal Edition",nvdec,playable,2020-12-14 23:15:10 -0100CFE003A64000,"ZOMBIE GOLD RUSH",online,playable,2020-09-24 12:56:08 -01001740116EC000,"Zombie's Cool",,playable,2020-12-17 12:41:26 -01000E5800D32C00,"Zombieland: Double Tap - Road Trip0",,playable,2022-09-17 10:08:45 -0100CD300A1BA000,"Zombillie",,playable,2020-07-23 17:42:23 -01001EE00A6B0000,"Zotrix: Solar Division",,playable,2021-06-07 20:34:05 -0100B9B00C6A4000,"この世の果てで恋を唄う少女YU-NO",audio,ingame,2021-01-22 07:00:16 -,"スーパーファミコン Nintendo Switch Online",slow,ingame,2020-03-14 05:48:38 -01000BB01CB8A000,"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",,nothing,2024-09-28 07:03:14 -010065500B218000,"メモリーズオフ - Innocent Fille",,playable,2022-12-02 17:36:48 -010032400E700000,"二ノ国 白き聖灰の女王",services;32-bit,menus,2023-04-16 17:11:06 -0100F3100DA46000,"初音ミク Project DIVA MEGA39's",audio;loader-allocator,playable,2022-07-29 11:45:52 -010047F012BE2000,"密室のサクリファイス/ABYSS OF THE SACRIFICE",nvdec,playable,2022-10-21 13:56:28 -0100BF401AF9C000,"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",slow,playable,2023-12-31 14:37:17 -0100AFA01750C000,"死神と少女/Shinigami to Shoujo",gpu;Incomplete,ingame,2024-03-22 01:06:45 -01001BA01EBFC000,"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",services-horizon,nothing,2024-09-28 12:22:55 -0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",crash,ingame,2023-04-25 19:43:52 -0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",crash,ingame,2024-02-12 20:58:31 -010064801A01C000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",crash,nothing,2023-10-30 22:37:40 +"title_id","game_name","labels","status","last_updated" +010099F00EF3E000,"-KLAUS-",nvdec,playable,2020-06-27 13:27:30 +0100BA9014A02000,".hack//G.U. Last Recode",deadlock,boots,2022-03-12 19:15:47 +010098800C4B0000,"'n Verlore Verstand",slow,ingame,2020-12-10 18:00:28 +01009A500E3DA000,"'n Verlore Verstand - Demo",,playable,2021-02-09 00:13:32 +0100A5D01174C000,"/Connection Haunted ",slow,playable,2020-12-10 18:57:14 +01001E500F7FC000,"#Funtime",,playable,2020-12-10 16:54:35 +01000E50134A4000,"#Halloween, Super Puzzles Dream",nvdec,playable,2020-12-10 20:43:58 +01004D100C510000,"#KILLALLZOMBIES",slow,playable,2020-12-16 01:50:25 +0100325012C12000,"#NoLimitFantasy, Super Puzzles Dream",nvdec,playable,2020-12-12 17:21:32 +01005D400E5C8000,"#RaceDieRun",,playable,2020-07-04 20:23:16 +01003DB011AE8000,"#womenUp, Super Puzzles Dream",,playable,2020-12-12 16:57:25 +0100D87012A14000,"#womenUp, Super Puzzles Dream Demo",nvdec,playable,2021-02-09 00:03:31 +01000320000CC000,"1-2-Switch™",services,playable,2022-02-18 14:44:03 +01004D1007926000,"10 Second Run RETURNS",gpu,ingame,2022-07-17 13:06:18 +0100DC000A472000,"10 Second Run RETURNS Demo",gpu,ingame,2021-02-09 00:17:18 +0100D82015774000,"112 Operator",nvdec,playable,2022-11-13 22:42:50 +010051E012302000,"112th Seed",,playable,2020-10-03 10:32:38 +01007F600D1B8000,"12 is Better Than 6",,playable,2021-02-22 16:10:12 +0100B1A010014000,"12 Labours of Hercules II: The Cretan Bull",cpu;32-bit;crash,nothing,2022-12-07 13:43:10 +0100A840047C2000,"12 orbits",,playable,2020-05-28 16:13:26 +01003FC01670C000,"13 Sentinels: Aegis Rim",slow,ingame,2024-06-10 20:33:38 +0100C54015002000,"13 Sentinels: Aegis Rim Demo",demo,playable,2022-04-13 14:15:48 +01007E600EEE6000,"140",,playable,2020-08-05 20:01:33 +0100B94013D28000,"16-Bit Soccer Demo",,playable,2021-02-09 00:23:07 +01005CA0099AA000,"1917 - The Alien Invasion DX",,playable,2021-01-08 22:11:16 +0100829010F4A000,"1971 Project Helios",,playable,2021-04-14 13:50:19 +0100D1000B18C000,"1979 Revolution: Black Friday",nvdec,playable,2021-02-21 21:03:43 +01007BB00FC8A000,"198X",,playable,2020-08-07 13:24:38 +010075601150A000,"1993 Shenandoah",,playable,2020-10-24 13:55:42 +0100148012550000,"1993 Shenandoah Demo",,playable,2021-02-09 00:43:43 +010096500EA94000,"2048 Battles",,playable,2020-12-12 14:21:25 +010024C0067C4000,"2064: Read Only Memories INTEGRAL",deadlock,menus,2020-05-28 16:53:58 +0100749009844000,"20XX",gpu,ingame,2023-08-14 09:41:44 +01007550131EE000,"2URVIVE",,playable,2022-11-17 13:49:37 +0100E20012886000,"2weistein – The Curse of the Red Dragon",nvdec;UE4,playable,2022-11-18 14:47:07 +0100DAC013D0A000,"30 in 1 game collection vol. 2",online-broken,playable,2022-10-15 17:22:27 +010056D00E234000,"30-in-1 Game Collection",online-broken,playable,2022-10-15 17:47:09 +0100FB5010D2E000,"3000th Duel",,playable,2022-09-21 17:12:08 +01003670066DE000,"36 Fragments of Midnight",,playable,2020-05-28 15:12:59 +0100AF400C4CE000,"39 Days to Mars",,playable,2021-02-21 22:12:46 +010010C013F2A000,"3D Arcade Fishing",,playable,2022-10-25 21:50:51 +01006DA00707C000,"3D MiniGolf",,playable,2021-01-06 09:22:11 +01006890126E4000,"4x4 Dirt Track",,playable,2020-12-12 21:41:42 +010010100FF14000,"60 Parsecs!",,playable,2022-09-17 11:01:17 +0100969005E98000,"60 Seconds!",services,ingame,2021-11-30 01:04:14 +0100ECF008474000,"6180 the moon",,playable,2020-05-28 15:39:24 +0100EFE00E964000,"64.0",,playable,2020-12-12 21:31:58 +0100DA900B67A000,"7 Billion Humans",32-bit,playable,2020-12-17 21:04:58 +01004B200DF76000,"7th Sector",nvdec,playable,2020-08-10 14:22:14 +0100E9F00B882000,"8-BIT ADV STEINS;GATE",audio,ingame,2020-01-12 15:05:06 +0100B0700E944000,"80 DAYS",,playable,2020-06-22 21:43:01 +01006B1011B9E000,"80's OVERDRIVE",,playable,2020-10-16 14:33:32 +010006A0042F0000,"88 Heroes - 98 Heroes Edition",,playable,2020-05-28 14:13:02 +010005E00E2BC000,"9 Monkeys of Shaolin",UE4;gpu;slow,ingame,2020-11-17 11:58:43 +0100C5F012E3E000,"9 Monkeys of Shaolin Demo",UE4;gpu;nvdec,ingame,2021-02-09 01:03:30 +01000360107BC000,"911 Operator Deluxe Edition",,playable,2020-07-14 13:57:44 +0100B2C00682E000,"99Vidas - Definitive Edition",online,playable,2020-10-29 13:00:40 +010023500C2F0000,"99Vidas Demo",,playable,2021-02-09 12:51:31 +0100DB00117BA000,"9th Dawn III",,playable,2020-12-12 22:27:27 +010096A00CC80000,"A Ch'ti Bundle",nvdec,playable,2022-10-04 12:48:44 +010021D00D53E000,"A Dark Room",gpu,ingame,2020-12-14 16:14:28 +010026B006802000,"A Duel Hand Disaster: Trackher",nvdec;online-working,playable,2022-09-04 14:24:55 +0100582012B90000,"A Duel Hand Disaster: Trackher DEMO",crash;demo;nvdec,ingame,2021-03-24 18:45:27 +01006CE0134E6000,"A Frog Game",,playable,2020-12-14 16:09:53 +010056E00853A000,"A Hat in Time",,playable,2024-06-25 19:52:44 +01009E1011EC4000,"A HERO AND A GARDEN",,playable,2022-12-05 16:37:47 +01005EF00CFDA000,"A Knight's Quest",UE4,playable,2022-09-12 20:44:20 +01008DD006C52000,"A Magical High School Girl",,playable,2022-07-19 14:40:50 +01004890117B2000,"A Short Hike",,playable,2020-10-15 00:19:58 +0100F0901006C000,"A Sound Plan",crash,boots,2020-12-14 16:46:21 +01007DD011C4A000,"A Summer with the Shiba Inu",,playable,2021-06-10 20:51:16 +0100A3E010E56000,"A-Train: All Aboard! Tourism",nvdec,playable,2021-04-06 17:48:19 +010097A00CC0A000,"Aaero: Complete Edition",nvdec,playable,2022-07-19 14:49:55 +0100EFC010398000,"Aborigenus",,playable,2020-08-05 19:47:24 +0100A5B010A66000,"Absolute Drift",,playable,2020-12-10 14:02:44 +0100C1300BBC6000,"ABZÛ",UE4,playable,2022-07-19 15:02:52 +01003C400871E000,"ACA NEOGEO 2020 SUPER BASEBALL",online,playable,2021-04-12 13:23:51 +0100FC000AFC6000,"ACA NEOGEO 3 COUNT BOUT",online,playable,2021-04-12 13:16:42 +0100AC40038F4000,"ACA NEOGEO AERO FIGHTERS 2",online,playable,2021-04-08 15:44:09 +0100B91008780000,"ACA NEOGEO AERO FIGHTERS 3",online,playable,2021-04-12 13:11:17 +0100B4800AFBA000,"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",online,playable,2021-04-01 22:48:01 +01003FE00A2F6000,"ACA NEOGEO BASEBALL STARS PROFESSIONAL",online,playable,2021-04-01 21:23:05 +0100DFC003398000,"ACA NEOGEO BLAZING STAR",crash;services,menus,2020-05-26 17:29:02 +0100D2400AFB0000,"ACA NEOGEO CROSSED SWORDS",online,playable,2021-04-01 20:42:59 +0100EE6002B48000,"ACA NEOGEO FATAL FURY",online,playable,2021-04-01 20:36:23 +0100EEA00AFB2000,"ACA NEOGEO FOOTBALL FRENZY",,playable,2021-03-29 20:12:12 +0100CB2001DB8000,"ACA NEOGEO GAROU: MARK OF THE WOLVES",online,playable,2021-04-01 20:31:10 +01005D700A2F8000,"ACA NEOGEO GHOST PILOTS",online,playable,2021-04-01 20:26:45 +01000D10038E6000,"ACA NEOGEO LAST RESORT",online,playable,2021-04-01 19:51:22 +0100A2900AFA4000,"ACA NEOGEO LEAGUE BOWLING",crash;services,menus,2020-05-26 17:11:04 +0100A050038F2000,"ACA NEOGEO MAGICAL DROP II",crash;services,menus,2020-05-26 16:48:24 +01007920038F6000,"ACA NEOGEO MAGICIAN LORD",online,playable,2021-04-01 19:33:26 +0100EBE002B3E000,"ACA NEOGEO METAL SLUG",,playable,2021-02-21 13:56:48 +010086300486E000,"ACA NEOGEO METAL SLUG 2",online,playable,2021-04-01 19:25:52 +0100BA8001DC6000,"ACA NEOGEO METAL SLUG 3",crash;services,menus,2020-05-26 16:32:45 +01009CE00AFAE000,"ACA NEOGEO METAL SLUG 4",online,playable,2021-04-01 18:12:18 +01008FD004DB6000,"ACA NEOGEO METAL SLUG X",crash;services,menus,2020-05-26 14:07:20 +010038F00AFA0000,"ACA NEOGEO Money Puzzle Exchanger",online,playable,2021-04-01 17:59:56 +01002E70032E8000,"ACA NEOGEO NEO TURF MASTERS",,playable,2021-02-21 15:12:01 +010052A00A306000,"ACA NEOGEO NINJA COMBAT",,playable,2021-03-29 21:17:28 +01007E800AFB6000,"ACA NEOGEO NINJA COMMANDO",online,playable,2021-04-01 17:28:18 +01003A5001DBA000,"ACA NEOGEO OVER TOP",,playable,2021-02-21 13:16:25 +010088500878C000,"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",online,playable,2021-04-01 17:18:27 +01005C9002B42000,"ACA NEOGEO SAMURAI SHODOWN",online,playable,2021-04-01 17:11:35 +010047F001DBC000,"ACA NEOGEO SAMURAI SHODOWN IV",online,playable,2021-04-12 12:58:54 +010049F00AFE8000,"ACA NEOGEO SAMURAI SHODOWN V SPECIAL",online,playable,2021-04-10 18:07:13 +01009B300872A000,"ACA NEOGEO SENGOKU 2",online,playable,2021-04-10 17:36:44 +01008D000877C000,"ACA NEOGEO SENGOKU 3",online,playable,2021-04-10 16:11:53 +01008A9001DC2000,"ACA NEOGEO SHOCK TROOPERS",crash;services,menus,2020-05-26 15:29:34 +01007D1004DBA000,"ACA NEOGEO SPIN MASTER",online,playable,2021-04-10 15:50:19 +010055A00A300000,"ACA NEOGEO SUPER SIDEKICKS 2",online,playable,2021-04-10 16:05:58 +0100A4D00A308000,"ACA NEOGEO SUPER SIDEKICKS 3 : THE NEXT GLORY",online,playable,2021-04-10 15:39:22 +0100EB2001DCC000,"ACA NEOGEO THE KING OF FIGHTERS '94",crash;services,menus,2020-05-26 15:03:44 +01009DC001DB6000,"ACA NEOGEO THE KING OF FIGHTERS '95",,playable,2021-03-29 20:27:35 +01006F0004FB4000,"ACA NEOGEO THE KING OF FIGHTERS '96",online,playable,2021-04-10 14:49:10 +0100170008728000,"ACA NEOGEO THE KING OF FIGHTERS '97",online,playable,2021-04-10 14:43:27 +0100B42001DB4000,"ACA NEOGEO THE KING OF FIGHTERS '98",crash;services,menus,2020-05-26 14:54:20 +0100583001DCA000,"ACA NEOGEO THE KING OF FIGHTERS '99",online,playable,2021-04-10 14:36:56 +0100B97002B44000,"ACA NEOGEO THE KING OF FIGHTERS 2000",online,playable,2021-04-10 15:24:35 +010048200AFC2000,"ACA NEOGEO THE KING OF FIGHTERS 2001",online,playable,2021-04-10 15:16:23 +0100CFD00AFDE000,"ACA NEOGEO THE KING OF FIGHTERS 2002",online,playable,2021-04-10 15:01:55 +0100EF100AFE6000,"ACA NEOGEO THE KING OF FIGHTERS 2003",online,playable,2021-04-10 14:54:31 +0100699008792000,"ACA NEOGEO THE LAST BLADE 2",online,playable,2021-04-10 14:31:54 +0100F7F00AFA2000,"ACA NEOGEO THE SUPER SPY",online,playable,2021-04-10 14:26:33 +0100CEF001DC0000,"ACA NEOGEO WAKU WAKU 7",online,playable,2021-04-10 14:20:52 +01009D4001DC4000,"ACA NEOGEO WORLD HEROES PERFECT",crash;services,menus,2020-05-26 14:14:36 +01002E700AFC4000,"ACA NEOGEO ZUPAPA!",online,playable,2021-03-25 20:07:33 +0100A9900CB5C000,"Access Denied",,playable,2022-07-19 15:25:10 +01007C50132C8000,"Ace Angler: Fishing Spirits",crash,menus,2023-03-03 03:21:39 +010005501E68C000,"Ace Attorney Investigations Collection",,playable,2024-09-19 16:38:05 +010033401E68E000,"Ace Attorney Investigations Collection DEMO",,playable,2024-09-07 06:16:42 +010039301B7E0000,"Ace Combat 7 - Skies Unknown Deluxe Edition",gpu;UE4,ingame,2024-09-27 14:31:43 +0100FF1004D56000,"Ace of Seafood",,playable,2022-07-19 15:32:25 +0100B28003440000,"Aces of the Luftwaffe - Squadron",nvdec;slow,playable,2020-05-27 12:29:42 +010054300D822000,"Aces of the Luftwaffe - Squadron Demo",nvdec,playable,2021-02-09 13:12:28 +010079B00B3F4000,"Achtung! Cthulhu Tactics",,playable,2020-12-14 18:40:27 +0100DBC0081A4000,"ACORN Tactics",,playable,2021-02-22 12:57:40 +010043C010AEA000,"Across the Grooves",,playable,2020-06-27 12:29:51 +010039A010DA0000,"Active Neurons - Puzzle game",,playable,2021-01-27 21:31:21 +01000D1011EF0000,"Active Neurons 2",,playable,2022-10-07 16:21:42 +010031C0122B0000,"Active Neurons 2 Demo",,playable,2021-02-09 13:40:21 +0100EE1013E12000,"Active Neurons 3 - Wonders Of The World",,playable,2021-03-24 12:20:20 +0100CD40104DE000,"Actual Sunlight",gpu,ingame,2020-12-14 17:18:41 +0100C0C0040E4000,"Adam's Venture™: Origins",,playable,2021-03-04 18:43:57 +010029700EB76000,"Adrenaline Rush - Miami Drive",,playable,2020-12-12 22:49:50 +0100300012F2A000,"Advance Wars™ 1+2: Re-Boot Camp",,playable,2024-01-30 18:19:44 +010014B0130F2000,"Adventure Llama",,playable,2020-12-14 19:32:24 +0100C990102A0000,"Adventure Pinball Bundle",slow,playable,2020-12-14 20:31:53 +0100C4E004406000,"Adventure Time: Pirates of the Enchiridion",nvdec,playable,2022-07-21 21:49:01 +010021F00C1C0000,"Adventures of Bertram Fiddle Episode 2: A Bleaker Predicklement",nvdec,playable,2021-02-22 14:56:37 +010072601233C000,"Adventures of Chris",,playable,2020-12-12 23:00:02 +0100A0A0136E8000,"Adventures of Chris Demo",,playable,2021-02-09 13:49:21 +01002B5012004000,"Adventures of Pip",nvdec,playable,2020-12-12 22:11:55 +01008C901266E000,"ADVERSE",UE4,playable,2021-04-26 14:32:51 +01008E6006502000,"Aegis Defenders",,playable,2021-02-22 13:29:33 +010064500AF72000,"Aegis Defenders demo",,playable,2021-02-09 14:04:17 +010001C011354000,"Aeolis Tournament",online,playable,2020-12-12 22:02:14 +01006710122CE000,"Aeolis Tournament Demo",nvdec,playable,2021-02-09 14:22:30 +0100A0400DDE0000,"AER Memories of Old",nvdec,playable,2021-03-05 18:43:43 +0100E9B013D4A000,"Aerial_Knight's Never Yield",,playable,2022-10-25 22:05:00 +0100087012810000,"Aery - Broken Memories",,playable,2022-10-04 13:11:52 +01000A8015390000,"Aery - Calm Mind",,playable,2022-11-14 14:26:58 +0100875011D0C000,"Aery - Little Bird Adventure",,playable,2021-03-07 15:25:51 +010018E012914000,"Aery - Sky Castle",,playable,2022-10-21 17:58:49 +0100DF8014056000,"Aery – A Journey Beyond Time",,playable,2021-04-05 15:52:25 +01006C40086EA000,"AeternoBlade",nvdec,playable,2020-12-14 20:06:48 +0100B1C00949A000,"AeternoBlade Demo",nvdec,playable,2021-02-09 14:39:26 +01009D100EA28000,"AeternoBlade II",online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18 +,"AeternoBlade II Demo Version",gpu;nvdec,ingame,2021-02-09 15:10:19 +01001B400D334000,"AFL Evolution 2",slow;online-broken;UE4,playable,2022-12-07 12:45:56 +0100DB100BBCE000,"Afterparty",,playable,2022-09-22 12:23:19 +010087C011C4E000,"Agatha Christie - The ABC Murders",,playable,2020-10-27 17:08:23 +010093600A60C000,"Agatha Knife",,playable,2020-05-28 12:37:58 +010005400A45E000,"Agent A: A puzzle in disguise",,playable,2020-11-16 22:53:27 +01008E8012C02000,"Agent A: A puzzle in disguise (Demo)",,playable,2021-02-09 18:30:41 +0100E4700E040000,"Ages of Mages: The last keeper",vulkan-backend-bug,playable,2022-10-04 11:44:05 +010004D00A9C0000,"Aggelos",gpu,ingame,2023-02-19 13:24:23 +010072600D21C000,"Agony",UE4;crash,boots,2020-07-10 16:21:18 +010089B00D09C000,"AI: THE SOMNIUM FILES",nvdec,playable,2022-09-04 14:45:06 +0100C1700FB34000,"AI: THE SOMNIUM FILES Demo",nvdec,playable,2021-02-10 12:52:33 +01006E8011C1E000,"Ailment",,playable,2020-12-12 22:30:41 +0100C7600C7D6000,"Air Conflicts: Pacific Carriers",,playable,2021-01-04 10:52:50 +010005A00A4F4000,"Air Hockey",,playable,2020-05-28 16:44:37 +0100C9E00F54C000,"Air Missions: HIND",,playable,2020-12-13 10:16:45 +0100E95011FDC000,"Aircraft Evolution",nvdec,playable,2021-06-14 13:30:18 +010010A00DB72000,"Airfield Mania Demo",services;demo,boots,2022-04-10 03:43:02 +01003DD00BFEE000,"Airheart - Tales of broken Wings",,playable,2021-02-26 15:20:27 +01007F100DE52000,"Akane",nvdec,playable,2022-07-21 00:12:18 +01009A800F0C8000,"Akash: Path of the Five",gpu;nvdec,ingame,2020-12-14 22:33:12 +010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",,playable,2021-02-22 14:39:35 +0100D4C00EE0C000,"Akuarium",slow,playable,2020-12-12 23:43:36 +010026E00FEBE000,"Akuto: Showdown",,playable,2020-08-04 19:43:27 +0100F5400AB6C000,"Alchemic Jousts",gpu,ingame,2022-12-08 15:06:28 +010001E00F75A000,"Alchemist's Castle",,playable,2020-12-12 23:54:08 +01004510110C4000,"Alder's Blood Prologue",crash,ingame,2021-02-09 19:03:03 +0100D740110C0000,"Alder's Blood: Definitive Edition",,playable,2020-08-28 15:15:23 +01000E000EEF8000,"Aldred Knight",services,playable,2021-11-30 01:49:17 +010025D01221A000,"Alex Kidd in Miracle World DX",,playable,2022-11-14 15:01:34 +0100A2E00D0E0000,"Alien Cruise",,playable,2020-08-12 13:56:05 +0100C1500DBDE000,"Alien Escape",,playable,2020-06-03 23:43:18 +010075D00E8BA000,"Alien: Isolation",nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41 +0100CBD012FB6000,"All Walls Must Fall",UE4,playable,2022-10-15 19:16:30 +0100C1F00A9B8000,"All-Star Fruit Racing",nvdec;UE4,playable,2022-07-21 00:35:37 +0100AC501122A000,"Alluris",gpu;UE4,ingame,2023-08-02 23:13:50 +010063000C3CE000,"Almightree: The Last Dreamer",slow,playable,2020-12-15 13:59:03 +010083E010AE8000,"Along the Edge",,playable,2020-11-18 15:00:07 +010083E013188000,"Alpaca Ball: Allstars",nvdec,playable,2020-12-11 12:26:29 +01000A800B998000,"ALPHA",,playable,2020-12-13 12:17:45 +010053B0123DC000,"Alphaset by POWGI",,playable,2020-12-15 15:15:15 +01003E700FD66000,"Alt-Frequencies",,playable,2020-12-15 19:01:33 +01004DB00935A000,"Alteric",,playable,2020-11-08 13:53:22 +0100C3D00D1D4000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",,playable,2020-08-31 14:17:42 +0100A8A00D27E000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",,playable,2021-02-10 13:33:59 +010045201487C000,"Aluna: Sentinel of the Shards",nvdec,playable,2022-10-25 22:17:03 +01004C200B0B4000,"Alwa's Awakening",,playable,2020-10-13 11:52:01 +01001B7012214000,"Alwa's Legacy",,playable,2020-12-13 13:00:57 +010002B00C534000,"American Fugitive",nvdec,playable,2021-01-04 20:45:11 +010089D00A3FA000,"American Ninja Warrior: Challenge",nvdec,playable,2021-06-09 13:11:17 +01003CC00D0BE000,"Amnesia: Collection",,playable,2022-10-04 13:36:15 +010041D00DEB2000,"Amoeba Battle - Microscopic RTS Action",,playable,2021-05-06 13:33:41 +010046500C8D2000,"Among the Sleep - Enhanced Edition",nvdec,playable,2021-06-03 15:06:25 +0100B0C013912000,"Among Us",online;ldn-broken,menus,2021-09-22 15:20:17 +010050900E1C6000,"Anarcute",,playable,2021-02-22 13:17:59 +01009EE0111CC000,"Ancestors Legacy",nvdec;UE4,playable,2022-10-01 12:25:36 +010021700BC56000,"Ancient Rush 2",UE4;crash,menus,2020-07-14 14:58:47 +0100AE000AEBC000,"Angels of Death",nvdec,playable,2021-02-22 14:17:15 +010001E00A5F6000,"AngerForce: Reloaded for Nintendo Switch",,playable,2022-07-21 10:37:17 +0100F3500D05E000,"Angry Bunnies: Colossal Carrot Crusade",online-broken,playable,2022-09-04 14:53:26 +010084500C7DC000,"Angry Video Game Nerd I & II Deluxe",crash,ingame,2020-12-12 23:59:54 +0100706005B6A000,"Anima: Gate of Memories",nvdec,playable,2021-06-16 18:13:18 +010033F00B3FA000,"Anima: Gate of Memories - Arcane Edition",nvdec,playable,2021-01-26 16:55:51 +01007A400B3F8000,"Anima: Gate of Memories - The Nameless Chronicles",,playable,2021-06-14 14:33:06 +0100F38011CFE000,"Animal Crossing: New Horizons Island Transfer Tool",services;Needs Update;Incomplete,ingame,2022-12-07 13:51:19 +01006F8002326000,"Animal Crossing™: New Horizons",gpu;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49 +010019500E642000,"Animal Fight Club",gpu,ingame,2020-12-13 13:13:33 +01002F4011A8E000,"Animal Fun for Toddlers and Kids",services,boots,2020-12-15 16:45:29 +010035500CA0E000,"Animal Hunter Z",,playable,2020-12-13 12:50:35 +010033C0121DC000,"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",services,boots,2021-11-29 23:43:14 +010065B009B3A000,"Animal Rivals: Nintendo Switch Edition",,playable,2021-02-22 14:02:42 +0100EFE009424000,"Animal Super Squad",UE4,playable,2021-04-23 20:50:50 +0100A16010966000,"Animal Up!",,playable,2020-12-13 15:39:02 +010020D01AD24000,"ANIMAL WELL",,playable,2024-05-22 18:01:49 +0100451012492000,"Animals for Toddlers",services,boots,2020-12-15 17:27:27 +010098600CF06000,"Animated Jigsaws Collection",nvdec,playable,2020-12-15 15:58:34 +0100A1900B5B8000,"Animated Jigsaws: Beautiful Japanese Scenery Demo",nvdec,playable,2021-02-10 13:49:56 +010062500EB84000,"Anime Studio Story",,playable,2020-12-15 18:14:05 +01002B300EB86000,"Anime Studio Story Demo",,playable,2021-02-10 14:50:39 +010097600C322000,"ANIMUS",,playable,2020-12-13 15:11:47 +0100E5A00FD38000,"ANIMUS: Harbinger",,playable,2022-09-13 22:09:20 +010055500CCD2000,"Ankh Guardian - Treasure of the Demon's Temple",,playable,2020-12-13 15:55:49 +01009E600D78C000,"Anode",,playable,2020-12-15 17:18:58 +0100CB9018F5A000,"Another Code™: Recollection",gpu;crash,ingame,2024-09-06 05:58:52 +01001A900D312000,"Another Sight",UE4;gpu;nvdec,ingame,2020-12-03 16:49:59 +01003C300AAAE000,"Another World",slow,playable,2022-07-21 10:42:38 +01000FD00DF78000,"AnShi",nvdec;UE4,playable,2022-10-21 19:37:01 +010054C00D842000,"Anthill",services;nvdec,menus,2021-11-18 09:25:25 +0100596011E20000,"Anti Hero Bundle",nvdec,playable,2022-10-21 20:10:30 +0100016007154000,"Antiquia Lost",,playable,2020-05-28 11:57:32 +0100FE1011400000,"AntVentor",nvdec,playable,2020-12-15 20:09:27 +0100FA100620C000,"Ao no Kanata no Four Rhythm",,playable,2022-07-21 10:50:42 +010047000E9AA000,"AO Tennis 2",online-broken,playable,2022-09-17 12:05:07 +0100990011866000,"Aokana - Four Rhythms Across the Blue",,playable,2022-10-04 13:50:26 +01005B100C268000,"Ape Out",,playable,2022-09-26 19:04:47 +010054500E6D4000,"Ape Out DEMO",,playable,2021-02-10 14:33:06 +010051C003A08000,"Aperion Cyberstorm",,playable,2020-12-14 00:40:16 +01008CA00D71C000,"Aperion Cyberstorm [DEMO]",,playable,2021-02-10 15:53:21 +01008FC00C5BC000,"Apocalipsis Wormwood Edition",deadlock,menus,2020-05-27 12:56:37 +010045D009EFC000,"Apocryph: an old-school shooter",gpu,ingame,2020-12-13 23:24:10 +010020D01B890000,"Apollo Justice: Ace Attorney Trilogy",,playable,2024-06-21 21:54:27 +01005F20116A0000,"Apparition",nvdec;slow,ingame,2020-12-13 23:57:04 +0100AC10085CE000,"AQUA KITTY UDX",online,playable,2021-04-12 15:34:11 +0100FE0010886000,"Aqua Lungers",crash,ingame,2020-12-14 11:25:57 +0100D0D00516A000,"Aqua Moto Racing Utopia",,playable,2021-02-21 21:21:00 +010071800BA74000,"Aragami: Shadow Edition",nvdec,playable,2021-02-21 20:33:23 +0100C7D00E6A0000,"Arc of Alchemist",nvdec,playable,2022-10-07 19:15:54 +0100BE80097FA000,"Arcade Archives 10-Yard Fight",online,playable,2021-03-25 21:26:41 +01005DD00BE08000,"Arcade Archives ALPHA MISSION",online,playable,2021-04-15 09:20:43 +010083800DC70000,"Arcade Archives ALPINE SKI",online,playable,2021-04-15 09:28:46 +0100A5700AF32000,"Arcade Archives ARGUS",online,playable,2021-04-16 06:51:25 +010014F001DE2000,"Arcade Archives Armed F",online,playable,2021-04-16 07:00:17 +0100BEC00C7A2000,"Arcade Archives ATHENA",online,playable,2021-04-16 07:10:12 +0100426001DE4000,"Arcade Archives Atomic Robo-Kid",online,playable,2021-04-16 07:20:29 +0100192009824000,"Arcade Archives BOMB JACK",online,playable,2021-04-16 09:48:26 +010007A00980C000,"Arcade Archives City CONNECTION",online,playable,2021-03-25 22:16:15 +0100EDC00E35A000,"Arcade Archives CLU CLU LAND",online,playable,2021-04-16 10:00:42 +0100BB1001DD6000,"Arcade Archives CRAZY CLIMBER",online,playable,2021-03-25 22:24:15 +0100E9E00B052000,"Arcade Archives DONKEY KONG",Needs Update;crash;services,menus,2021-03-24 18:18:43 +0100F25001DD0000,"Arcade Archives DOUBLE DRAGON",online,playable,2021-03-25 22:44:34 +01009E3001DDE000,"Arcade Archives DOUBLE DRAGON II The Revenge",online,playable,2021-04-12 16:05:29 +0100496006EC8000,"Arcade Archives FRONT LINE",online,playable,2021-05-05 14:10:49 +01009A4008A30000,"Arcade Archives HEROIC EPISODE",online,playable,2021-03-25 23:01:26 +01007D200D3FC000,"Arcade Archives ICE CLIMBER",online,playable,2021-05-05 14:18:34 +010049400C7A8000,"Arcade Archives IKARI WARRIORS",online,playable,2021-05-05 14:24:46 +01000DB00980A000,"Arcade Archives Ikki",online,playable,2021-03-25 23:11:28 +010008300C978000,"Arcade Archives IMAGE FIGHT",online,playable,2021-05-05 14:31:21 +010010B008A36000,"Arcade Archives Kid Niki Radical Ninja",audio;online,ingame,2022-07-21 11:02:04 +0100E7C001DE0000,"Arcade Archives Kid's Horehore Daisakusen",online,playable,2021-04-12 16:21:29 +0100F380105A4000,"Arcade Archives LIFE FORCE",,playable,2020-09-04 13:26:25 +0100755004608000,"Arcade Archives Mario Bros.",online,playable,2021-03-26 11:31:32 +01000BE001DD8000,"Arcade Archives MOON CRESTA",online,playable,2021-05-05 14:39:29 +01003000097FE000,"Arcade Archives MOON PATROL",online,playable,2021-03-26 11:42:04 +01003EF00D3B4000,"Arcade Archives NINJA GAIDEN",audio;online,ingame,2021-04-12 16:27:53 +01002F300D2C6000,"Arcade Archives Ninja Spirit",online,playable,2021-05-05 14:45:31 +0100369001DDC000,"Arcade Archives Ninja-Kid",online,playable,2021-03-26 20:55:07 +01004A200BB48000,"Arcade Archives OMEGA FIGHTER",crash;services,menus,2020-08-18 20:50:54 +01007F8010C66000,"Arcade Archives PLUS ALPHA",audio,ingame,2020-07-04 20:47:55 +0100A6E00D3F8000,"Arcade Archives POOYAN",online,playable,2021-05-05 17:58:19 +01000D200C7A4000,"Arcade Archives PSYCHO SOLDIER",online,playable,2021-05-05 18:02:19 +01001530097F8000,"Arcade Archives PUNCH-OUT!!",online,playable,2021-03-25 22:10:55 +010081E001DD2000,"Arcade Archives Renegade",online,playable,2022-07-21 11:45:40 +0100FBA00E35C000,"Arcade Archives ROAD FIGHTER",online,playable,2021-05-05 18:09:17 +010060000BF7C000,"Arcade Archives ROUTE 16",online,playable,2021-05-05 18:40:41 +0100C2D00981E000,"Arcade Archives RYGAR",online,playable,2021-04-15 08:48:30 +01007A4009834000,"Arcade Archives Shusse Ozumo",online,playable,2021-05-05 17:52:25 +010008F00B054000,"Arcade Archives Sky Skipper",online,playable,2021-04-15 08:58:09 +01008C900982E000,"Arcade Archives Solomon's Key",online,playable,2021-04-19 16:27:18 +010069F008A38000,"Arcade Archives STAR FORCE",online,playable,2021-04-15 08:39:09 +0100422001DDA000,"Arcade Archives TERRA CRESTA",crash;services,menus,2020-08-18 20:20:55 +0100348001DE6000,"Arcade Archives TERRA FORCE",online,playable,2021-04-16 20:03:27 +0100DFD016B7A000,"Arcade Archives TETRIS® THE GRAND MASTER",,playable,2024-06-23 01:50:29 +0100DC000983A000,"Arcade Archives THE NINJA WARRIORS",online;slow,ingame,2021-04-16 19:54:56 +0100AF300D2E8000,"Arcade Archives TIME PILOT",online,playable,2021-04-16 19:22:31 +010029D006ED8000,"Arcade Archives Traverse USA",online,playable,2021-04-15 08:11:06 +010042200BE0C000,"Arcade Archives URBAN CHAMPION",online,playable,2021-04-16 10:20:03 +01004EC00E634000,"Arcade Archives VS. GRADIUS",online,playable,2021-04-12 14:53:58 +010021D00812A000,"Arcade Archives VS. SUPER MARIO BROS.",online,playable,2021-04-08 14:48:11 +01001B000D8B6000,"Arcade Archives WILD WESTERN",online,playable,2021-04-16 10:11:36 +010050000D6C4000,"Arcade Classics Anniversary Collection",,playable,2021-06-03 13:55:10 +01005A8010C7E000,"ARCADE FUZZ",,playable,2020-08-15 12:37:36 +010077000F620000,"Arcade Spirits",,playable,2020-06-21 11:45:03 +0100E680149DC000,"Arcaea",,playable,2023-03-16 19:31:21 +01003C2010C78000,"Archaica: The Path Of Light",crash,nothing,2020-10-16 13:22:26 +01004DA012976000,"Area 86",,playable,2020-12-16 16:45:52 +0100691013C46000,"ARIA CHRONICLE",,playable,2022-11-16 13:50:55 +0100D4A00B284000,"ARK: Survival Evolved",gpu;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56 +0100C56012C96000,"Arkanoid vs. Space Invaders",services,ingame,2021-01-21 12:50:30 +010069A010606000,"Arkham Horror: Mother's Embrace",nvdec,playable,2021-04-19 15:40:55 +0100C5B0113A0000,"Armed 7 DX",,playable,2020-12-14 11:49:56 +010070A00A5F4000,"Armello",nvdec,playable,2021-01-07 11:43:26 +0100A5400AC86000,"ARMS Demo",,playable,2021-02-10 16:30:13 +01009B500007C000,"ARMS™",ldn-works;LAN,playable,2024-08-28 07:49:24 +0100184011B32000,"Arrest of a stone Buddha",crash,nothing,2022-12-07 16:55:00 +01007AB012102000,"Arrog",,playable,2020-12-16 17:20:50 +01008EC006BE2000,"Art of Balance",gpu;ldn-works,ingame,2022-07-21 17:13:57 +010062F00CAE2000,"Art of Balance DEMO",gpu;slow,ingame,2021-02-10 17:17:12 +01006AA013086000,"Art Sqool",nvdec,playable,2022-10-16 20:42:37 +0100CDD00DA70000,"Artifact Adventure Gaiden DX",,playable,2020-12-16 17:49:25 +0100C2500CAB6000,"Ary and the Secret of Seasons",,playable,2022-10-07 20:45:09 +0100C9F00AAEE000,"ASCENDANCE",,playable,2021-01-05 10:54:40 +0100D5800DECA000,"Asemblance",UE4;gpu,ingame,2020-12-16 18:01:23 +0100E4C00DE30000,"Ash of Gods: Redemption",deadlock,nothing,2020-08-10 18:08:32 +010027B00E40E000,"Ashen",nvdec;online-broken;UE4,playable,2022-09-17 12:19:14 +01007B000C834000,"Asphalt Legends Unite",services;crash;online-broken,menus,2022-12-07 13:28:29 +01007F600B134000,"Assassin's Creed® III: Remastered",nvdec,boots,2024-06-25 20:12:11 +010044700DEB0000,"Assassin’s Creed®: The Rebel Collection",gpu,ingame,2024-05-19 07:58:56 +0100DF200B24C000,"Assault Android Cactus+",,playable,2021-06-03 13:23:55 +0100BF8012A30000,"Assault ChaingunS KM",crash;gpu,ingame,2020-12-14 12:48:34 +0100C5E00E540000,"Assault on Metaltron Demo",,playable,2021-02-10 19:48:06 +010057A00C1F6000,"Astebreed",,playable,2022-07-21 17:33:54 +010081500EA1E000,"Asterix & Obelix XXL 3 - The Crystal Menhir",gpu;nvdec;regression,ingame,2022-11-28 14:19:23 +0100F46011B50000,"Asterix & Obelix XXL: Romastered",gpu;nvdec;opengl,ingame,2023-08-16 21:22:06 +01007300020FA000,"ASTRAL CHAIN",,playable,2024-07-17 18:02:19 +0100E5F00643C000,"Astro Bears Party",,playable,2020-05-28 11:21:58 +0100F0400351C000,"Astro Duel Deluxe",32-bit,playable,2021-06-03 11:21:48 +0100B80010C48000,"Astrologaster",cpu;32-bit;crash,nothing,2023-06-28 15:39:31 +0100DF401249C000,"AstroWings: Space War",,playable,2020-12-14 13:10:44 +010099801870E000,"Atari 50: The Anniversary Celebration",slow,playable,2022-11-14 19:42:10 +010088600C66E000,"Atelier Arland series Deluxe Pack",nvdec,playable,2021-04-08 15:33:15 +0100D9D00EE8C000,"Atelier Ayesha: The Alchemist of Dusk DX",crash;nvdec;Needs Update,menus,2021-11-24 07:29:54 +0100E5600EE8E000,"Atelier Escha & Logy: Alchemists of the Dusk Sky DX",nvdec,playable,2022-11-20 16:01:41 +010023201421E000,"Atelier Firis: The Alchemist and the Mysterious Journey DX",gpu;nvdec,ingame,2022-10-25 22:46:19 +0100B1400CD50000,"Atelier Lulua ~The Scion of Arland~",nvdec,playable,2020-12-16 14:29:19 +010009900947A000,"Atelier Lydie & Suelle ~The Alchemists and the Mysterious Paintings~",nvdec,playable,2021-06-03 18:37:01 +01001A5014220000,"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings DX",,playable,2022-10-25 23:06:20 +0100ADD00C6FA000,"Atelier Meruru ~The Apprentice of Arland~ DX",nvdec,playable,2020-06-12 00:50:48 +01002D700B906000,"Atelier Rorona Arland no Renkinjutsushi DX (JP)",nvdec,playable,2022-12-02 17:26:54 +01009A9012022000,"Atelier Ryza 2: Lost Legends & the Secret Fairy",,playable,2022-10-16 21:06:06 +0100D1900EC80000,"Atelier Ryza: Ever Darkness & the Secret Hideout",,playable,2023-10-15 16:36:50 +010005C00EE90000,"Atelier Shallie: Alchemists of the Dusk Sea DX",nvdec,playable,2020-11-25 20:54:12 +010082A01538E000,"Atelier Sophie 2: The Alchemist of the Mysterious Dream",crash,ingame,2022-12-01 04:34:03 +01009BC00C6F6000,"Atelier Totori ~The Adventurer of Arland~ DX",nvdec,playable,2020-06-12 01:04:56 +0100B9400FA38000,"ATOM RPG",nvdec,playable,2022-10-22 10:11:48 +01005FE00EC4E000,"Atomic Heist",,playable,2022-10-16 21:24:32 +0100AD30095A4000,"Atomicrops",,playable,2022-08-06 10:05:07 +01000D1006CEC000,"ATOMIK: RunGunJumpGun",,playable,2020-12-14 13:19:24 +0100FB500631E000,"ATOMINE",gpu;nvdec;slow,playable,2020-12-14 18:56:50 +010039600E7AC000,"Attack of the Toy Tanks",slow,ingame,2020-12-14 12:59:12 +010034500641A000,"Attack on Titan 2",,playable,2021-01-04 11:40:01 +01000F600B01E000,"ATV Drift & Tricks",UE4;online,playable,2021-04-08 17:29:17 +0100AA800DA42000,"Automachef",,playable,2020-12-16 19:51:25 +01006B700EA6A000,"Automachef Demo",,playable,2021-02-10 20:35:37 +0100B280106A0000,"Aviary Attorney: Definitive Edition",,playable,2020-08-09 20:32:12 +010064600F982000,"AVICII Invector",,playable,2020-10-25 12:12:56 +0100E100128BA000,"AVICII Invector Demo",,playable,2021-02-10 21:04:58 +01008FB011248000,"AvoCuddle",,playable,2020-09-02 14:50:13 +0100085012D64000,"Awakening of Cthulhu",UE4,playable,2021-04-26 13:03:07 +01002F1005F3C000,"Away: Journey To The Unexpected",nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04 +0100B8C00CFCE000,"Awesome Pea",,playable,2020-10-11 12:39:23 +010023800D3F2000,"Awesome Pea (Demo)",,playable,2021-02-10 21:48:21 +0100B7D01147E000,"Awesome Pea 2",,playable,2022-10-01 12:34:19 +0100D2011E28000,"Awesome Pea 2 (Demo)",crash,nothing,2021-02-10 22:08:27 +0100DA3011174000,"AXES",,playable,2021-04-08 13:01:58 +0100052004384000,"Axiom Verge",,playable,2020-10-20 01:07:18 +010075400DEC6000,"Ayakashi Koi Gikyoku《Trial version》",,playable,2021-02-10 22:22:11 +01006AF012FC8000,"Azur Lane: Crosswave",UE4;nvdec,playable,2021-04-05 15:15:25 +0100C7D00DE24000,"Azuran Tales: TRIALS",,playable,2020-08-12 15:23:07 +01006FB00990E000,"Azure Reflections",nvdec;online,playable,2021-04-08 13:18:25 +01004E90149AA000,"Azure Striker GUNVOLT 3",,playable,2022-08-10 13:46:49 +0100192003FA4000,"Azure Striker GUNVOLT: STRIKER PACK",32-bit,playable,2024-02-10 23:51:21 +010031D012BA4000,"Azurebreak Heroes",,playable,2020-12-16 21:26:17 +01009B901145C000,"B.ARK",nvdec,playable,2022-11-17 13:35:02 +01002CD00A51C000,"Baba Is You",,playable,2022-07-17 05:36:54 +0100F4100AF16000,"Back to Bed",nvdec,playable,2020-12-16 20:52:04 +0100FEA014316000,"Backworlds",,playable,2022-10-25 23:20:34 +0100EAF00E32E000,"Bacon Man: An Adventure",crash;nvdec,menus,2021-11-20 02:36:21 +01000CB00D094000,"Bad Dream: Coma",deadlock,boots,2023-08-03 00:54:18 +0100B3B00D81C000,"Bad Dream: Fever",,playable,2021-06-04 18:33:12 +0100E98006F22000,"Bad North",,playable,2022-07-17 13:44:25 +010075000D092000,"Bad North Demo",,playable,2021-02-10 22:48:38 +01004C70086EC000,"BAFL - Brakes Are For Losers",,playable,2021-01-13 08:32:51 +010076B011EC8000,"Baila Latino",,playable,2021-04-14 16:40:24 +0100730011BDC000,"Bakugan: Champions of Vestroia",,playable,2020-11-06 19:07:39 +01008260138C4000,"Bakumatsu Renka SHINSENGUMI",,playable,2022-10-25 23:37:31 +0100438012EC8000,"BALAN WONDERWORLD",nvdec;UE4,playable,2022-10-22 13:08:43 +0100E48013A34000,"Balan Wonderworld Demo",gpu;services;UE4;demo,ingame,2023-02-16 20:05:07 +0100CD801CE5E000,"Balatro",,ingame,2024-04-21 02:01:53 +010010A00DA48000,"Baldur's Gate and Baldur's Gate II: Enhanced Editions",32-bit,playable,2022-09-12 23:52:15 +0100BC400FB64000,"Balthazar's Dream",,playable,2022-09-13 00:13:22 +01008D30128E0000,"Bamerang",,playable,2022-10-26 00:29:39 +010013C010C5C000,"Banner of the Maid",,playable,2021-06-14 15:23:37 +0100388008758000,"Banner Saga 2",crash,boots,2021-01-13 08:56:09 +010071E00875A000,"Banner Saga 3",slow,boots,2021-01-11 16:53:57 +0100CE800B94A000,"Banner Saga Trilogy",slow,playable,2024-03-06 11:25:20 +0100425009FB2000,"Baobabs Mausoleum Ep.1: Ovnifagos Don't Eat Flamingos",,playable,2020-07-15 05:06:29 +010079300E976000,"Baobabs Mausoleum Ep.2: 1313 Barnabas Dead End Drive",,playable,2020-12-17 11:22:50 +01006D300FFA6000,"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",nvdec,playable,2020-12-17 11:43:10 +0100D3000AEC2000,"Baobabs Mausoleum: DEMO",,playable,2021-02-10 22:59:25 +01003350102E2000,"Barbarous: Tavern of Emyr",,playable,2022-10-16 21:50:24 +0100F7E01308C000,"Barbearian",Needs Update;gpu,ingame,2021-06-28 16:27:50 +010039C0106C6000,"Baron: Fur Is Gonna Fly",crash,boots,2022-02-06 02:05:43 +0100FB000EB96000,"Barry Bradford's Putt Panic Party",nvdec,playable,2020-06-17 01:08:34 +01004860080A0000,"Baseball Riot",,playable,2021-06-04 18:07:27 +010038600B27E000,"Bastion",,playable,2022-02-15 14:15:24 +01005F3012748000,"Batbarian: Testament of the Primordials",,playable,2020-12-17 12:00:59 +0100C07018CA6000,"Baten Kaitos I & II HD Remaster (Europe/USA)",services;Needs Update,boots,2023-10-01 00:44:32 +0100F28018CA4000,"Baten Kaitos I & II HD Remaster (Japan)",services;Needs Update,boots,2023-10-24 23:11:54 +0100011005D92000,"Batman - The Telltale Series",nvdec;slow,playable,2021-01-11 18:19:35 +01003F00163CE000,"Batman: Arkham City",,playable,2024-09-11 00:30:19 +0100ACD0163D0000,"Batman: Arkham Knight",gpu;mac-bug,ingame,2024-06-25 20:24:42 +0100E6300AA3A000,"Batman: The Enemy Within",crash,nothing,2020-10-16 05:49:27 +0100747011890000,"Battle Axe",,playable,2022-10-26 00:38:01 +0100551001D88000,"Battle Chasers: Nightwar",nvdec;slow,playable,2021-01-12 12:27:34 +0100CC2001C6C000,"Battle Chef Brigade Deluxe",,playable,2021-01-11 14:16:28 +0100DBB00CAEE000,"Battle Chef Brigade Demo",,playable,2021-02-10 23:15:07 +0100A3B011EDE000,"Battle Hunters",gpu,ingame,2022-11-12 09:19:17 +010035E00C1AE000,"Battle of Kings",slow,playable,2020-12-17 12:45:23 +0100D2800EB40000,"Battle Planet - Judgement Day",,playable,2020-12-17 14:06:20 +0100C4D0093EA000,"Battle Princess Madelyn",,playable,2021-01-11 13:47:23 +0100A7500DF64000,"Battle Princess Madelyn Royal Edition",,playable,2022-09-26 19:14:49 +010099B00E898000,"Battle Supremacy - Evolution",gpu;nvdec,boots,2022-02-17 09:02:50 +0100DEB00D5A8000,"Battle Worlds: Kronos",nvdec,playable,2021-06-04 17:48:02 +0100650010DD4000,"Battleground",crash,ingame,2021-09-06 11:53:23 +010044E00D97C000,"BATTLESLOTHS",,playable,2020-10-03 08:32:22 +010059C00E39C000,"Battlestar Galactica Deadlock",nvdec,playable,2020-06-27 17:35:44 +01006D800A988000,"Battlezone Gold Edition",gpu;ldn-untested;online,boots,2021-06-04 18:36:05 +010048300D5C2000,"BATTLLOON",,playable,2020-12-17 15:48:23 +0100194010422000,"bayala - the game",,playable,2022-10-04 14:09:25 +0100CF5010FEC000,"Bayonetta Origins: Cereza and the Lost Demon™",gpu,ingame,2024-02-27 01:39:49 +010002801A3FA000,"Bayonetta Origins: Cereza and the Lost Demon™ Demo",gpu;demo,ingame,2024-02-17 06:06:28 +010076F0049A2000,"Bayonetta™",audout,playable,2022-11-20 15:51:59 +01007960049A0000,"Bayonetta™ 2",nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09 +01004A4010FEA000,"Bayonetta™ 3",gpu;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33 +01002FA00DE72000,"BDSM: Big Drunk Satanic Massacre",,playable,2021-03-04 21:28:22 +01003A1010E3C000,"BE-A Walker",slow,ingame,2020-09-02 15:00:31 +010095C00406C000,"Beach Buggy Racing",online,playable,2021-04-13 23:16:50 +010020700DE04000,"Bear With Me: The Lost Robots",nvdec,playable,2021-02-27 14:20:10 +010024200E97E800,"Bear With Me: The Lost Robots Demo",nvdec,playable,2021-02-12 22:38:12 +0100C0E014A4E000,"Bear's Restaurant",,playable,2024-08-11 21:26:59 +,"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",crash,menus,2020-10-04 06:12:08 +01009C300BB4C000,"Beat Cop",,playable,2021-01-06 19:26:48 +01002D20129FC000,"Beat Me!",online-broken,playable,2022-10-16 21:59:26 +01006B0014590000,"BEAUTIFUL DESOLATION",gpu;nvdec,ingame,2022-10-26 10:34:38 +01009E700DB2E000,"Bee Simulator",UE4;crash,boots,2020-07-15 12:13:13 +010018F007786000,"BeeFense BeeMastered",,playable,2022-11-17 15:38:12 +0100558010B26000,"Behold the Kickmen",,playable,2020-06-27 12:49:45 +0100D1300C1EA000,"Beholder: Complete Edition",,playable,2020-10-16 12:48:58 +01006E1004404000,"Ben 10",nvdec,playable,2021-02-26 14:08:35 +01009CD00E3AA000,"Ben 10: Power Trip!",nvdec,playable,2022-10-09 10:52:12 +010074500BBC4000,"Bendy and the Ink Machine",,playable,2023-05-06 20:35:39 +010068600AD16000,"Beyblade Burst Battle Zero",services;crash;Needs Update,menus,2022-11-20 15:48:32 +010056500CAD8000,"Beyond Enemy Lines: Covert Operations",UE4,playable,2022-10-01 13:11:50 +0100B8F00DACA000,"Beyond Enemy Lines: Essentials",nvdec;UE4,playable,2022-09-26 19:48:16 +0100BF400AF38000,"Bibi & Tina – Adventures with Horses",nvdec;slow,playable,2021-01-13 08:58:09 +010062400E69C000,"Bibi & Tina at the horse farm",,playable,2021-04-06 16:31:39 +01005FF00AF36000,"Bibi Blocksberg – Big Broom Race 3",,playable,2021-01-11 19:07:16 +010062B00A874000,"Big Buck Hunter Arcade",nvdec,playable,2021-01-12 20:31:39 +010088100C35E000,"Big Crown: Showdown",nvdec;online;ldn-untested,menus,2022-07-17 18:25:32 +0100A42011B28000,"Big Dipper",,playable,2021-06-14 15:08:19 +010077E00F30E000,"Big Pharma",,playable,2020-07-14 15:27:30 +010007401287E000,"BIG-Bobby-Car - The Big Race",slow,playable,2020-12-10 14:25:06 +010057700FF7C000,"Billion Road",,playable,2022-11-19 15:57:43 +010087D008D64000,"BINGO for Nintendo Switch",,playable,2020-07-23 16:17:36 +01004BA017CD6000,"Biomutant",crash,ingame,2024-05-16 15:46:36 +01002620102C6000,"BioShock 2 Remastered",services,nothing,2022-10-29 14:39:22 +0100D560102C8000,"BioShock Infinite: The Complete Edition",services-horizon;crash,nothing,2024-08-11 21:35:01 +0100AD10102B2000,"BioShock Remastered",services-horizon;crash;Needs Update,boots,2024-06-06 01:08:52 +010053B0117F8000,"Biped",nvdec,playable,2022-10-01 13:32:58 +01001B700B278000,"Bird Game +",online,playable,2022-07-17 18:41:57 +0100B6B012FF4000,"Birds and Blocks Demo",services;demo,boots,2022-04-10 04:53:03 +0100E62012D3C000,"BIT.TRIP RUNNER",,playable,2022-10-17 14:23:24 +01000AD012D3A000,"BIT.TRIP VOID",,playable,2022-10-17 14:31:23 +0100A0800EA9C000,"Bite the Bullet",,playable,2020-10-14 23:10:11 +010026E0141C8000,"Bitmaster",,playable,2022-12-13 14:05:51 +010061D00FD26000,"Biz Builder Delux",slow,playable,2020-12-15 21:36:25 +0100DD1014AB8000,"Black Book",nvdec,playable,2022-12-13 16:38:53 +010049000B69E000,"Black Future '88",nvdec,playable,2022-09-13 11:24:37 +01004BE00A682000,"Black Hole Demo",,playable,2021-02-12 23:02:17 +0100C3200E7E6000,"Black Legend",gpu;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48 +010043A012A32000,"Blackjack Hands",,playable,2020-11-30 14:04:51 +0100A0A00E660000,"Blackmoor 2",online-broken,playable,2022-09-26 20:26:34 +010032000EA2C000,"Blacksad: Under the Skin",,playable,2022-09-13 11:38:04 +01006B400C178000,"Blacksea Odyssey",nvdec,playable,2022-10-16 22:14:34 +010068E013450000,"Blacksmith of the Sand Kingdom",,playable,2022-10-16 22:37:44 +0100C4400CB7C000,"BLADE ARCUS Rebellion From Shining",,playable,2022-07-17 18:52:28 +0100EA1018A2E000,"Blade Assault",audio,nothing,2024-04-29 14:32:50 +01009CC00E224000,"Blade II - The Return Of Evil",audio;crash;UE4,ingame,2021-11-14 02:49:59 +01005950022EC000,"Blade Strangers",nvdec,playable,2022-07-17 19:02:43 +0100DF0011A6A000,"Bladed Fury",,playable,2022-10-26 11:36:26 +0100CFA00CC74000,"Blades of Time",deadlock;online,boots,2022-07-17 19:19:58 +01006CC01182C000,"Blair Witch",nvdec;UE4,playable,2022-10-01 14:06:16 +010039501405E000,"Blanc",gpu;slow,ingame,2023-02-22 14:00:13 +0100698009C6E000,"Blasphemous",nvdec,playable,2021-03-01 12:15:31 +0100302010338000,"Blasphemous Demo",,playable,2021-02-12 23:49:56 +0100225000FEE000,"Blaster Master Zero",32-bit,playable,2021-03-05 13:22:33 +01005AA00D676000,"Blaster Master Zero 2",,playable,2021-04-08 15:22:59 +010025B002E92000,"Blaster Master Zero Demo",,playable,2021-02-12 23:59:06 +0100E53013E1C000,"Blastoid Breakout",,playable,2021-01-25 23:28:02 +0100EE800C93E000,"BLAZBLUE CENTRALFICTION Special Edition",nvdec,playable,2020-12-15 23:50:04 +0100B61008208000,"BLAZBLUE CROSS TAG BATTLE",nvdec;online,playable,2021-01-05 20:29:37 +010021A00DE54000,"Blazing Beaks",,playable,2020-06-04 20:37:06 +0100C2700C252000,"Blazing Chrome",,playable,2020-11-16 04:56:54 +010091700EA2A000,"Bleep Bloop DEMO",nvdec,playable,2021-02-13 00:20:53 +010089D011310000,"Blind Men",audout,playable,2021-02-20 14:15:38 +0100743013D56000,"Blizzard® Arcade Collection",nvdec,playable,2022-08-03 19:37:26 +0100F3500A20C000,"BlobCat",,playable,2021-04-23 17:09:30 +0100E1C00DB6C000,"Block-a-Pix Deluxe Demo",,playable,2021-02-13 00:37:39 +0100C6A01AD56000,"Bloo Kid",,playable,2024-05-01 17:18:04 +010055900FADA000,"Bloo Kid 2",,playable,2024-05-01 17:16:57 +0100EE5011DB6000,"Blood and Guts Bundle",,playable,2020-06-27 12:57:35 +01007E700D17E000,"Blood Waves",gpu,ingame,2022-07-18 13:04:46 +0100E060102AA000,"Blood will be Spilled",nvdec,playable,2020-12-17 03:02:03 +01004B800AF5A000,"Bloodstained: Curse of the Moon",,playable,2020-09-04 10:42:17 +01004680124E6000,"Bloodstained: Curse of the Moon 2",,playable,2020-09-04 10:56:27 +010025A00DF2A000,"Bloodstained: Ritual of the Night",nvdec;UE4,playable,2022-07-18 14:27:35 +0100E510143EC000,"Bloody Bunny, The Game",nvdec;UE4,playable,2022-10-22 13:18:55 +0100B8400A1C6000,"Bloons TD 5",Needs Update;audio;gpu;services,boots,2021-04-18 23:02:46 +01000EB01023E000,"Blossom Tales Demo",,playable,2021-02-13 14:22:53 +0100C1000706C000,"Blossom Tales: The Sleeping King",,playable,2022-07-18 16:43:07 +010073B010F6E000,"Blue Fire",UE4,playable,2022-10-22 14:46:11 +0100721013510000,"Body of Evidence",,playable,2021-04-25 22:22:11 +0100AD1010CCE000,"Bohemian Killing",vulkan-backend-bug,playable,2022-09-26 22:41:37 +010093700ECEC000,"Boku to Nurse no Kenshuu Nisshi",,playable,2022-11-21 20:38:34 +01001D900D9AC000,"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",slow;crash;Needs Update,ingame,2022-04-24 22:46:04 +0100317014B7C000,"Bomb Rush Cyberfunk",,playable,2023-09-28 19:51:57 +01007900080B6000,"Bomber Crew",,playable,2021-06-03 14:21:28 +0100A1F012948000,"Bomber Fox",nvdec,playable,2021-04-19 17:58:13 +010087300445A000,"Bombslinger",services,menus,2022-07-19 12:53:15 +01007A200F452000,"Book of Demons",,playable,2022-09-29 12:03:43 +010054500F564000,"Bookbound Brigade",,playable,2020-10-09 14:30:29 +01002E6013ED8000,"Boom Blaster",,playable,2021-03-24 10:55:56 +010081A00EE62000,"Boomerang Fu",,playable,2024-07-28 01:12:41 +010069F0135C4000,"Boomerang Fu Demo Version",demo,playable,2021-02-13 14:38:13 +01009970122E4000,"Borderlands 3 Ultimate Edition",gpu,ingame,2024-07-15 04:38:14 +010064800F66A000,"Borderlands: Game of the Year Edition",slow;online-broken;ldn-untested,ingame,2023-07-23 21:10:36 +010096F00FF22000,"Borderlands: The Handsome Collection",,playable,2022-04-22 18:35:07 +010007400FF24000,"Borderlands: The Pre-Sequel",nvdec,playable,2021-06-09 20:17:10 +01008E500AFF6000,"Boreal Blade",gpu;ldn-untested;online,ingame,2021-06-11 15:37:14 +010092C013FB8000,"BORIS THE ROCKET",,playable,2022-10-26 13:23:09 +010076F00EBE4000,"BOSSGARD",online-broken,playable,2022-10-04 14:21:13 +010069B00EAC8000,"Bot Vice Demo",crash;demo,ingame,2021-02-13 14:52:42 +010081100FE08000,"Bouncy Bob 2",,playable,2020-07-14 16:51:53 +0100E1200DC1A000,"Bounty Battle",nvdec,playable,2022-10-04 14:40:51 +0100B4700C57E000,"Bow to Blood: Last Captain Standing",slow,playable,2020-10-23 10:51:21 +010040800BA8A000,"Box Align",crash;services,nothing,2020-04-03 17:26:56 +010018300D006000,"BOXBOY! + BOXGIRL!™",,playable,2020-11-08 01:11:54 +0100B7200E02E000,"BOXBOY! + BOXGIRL!™ Demo",demo,playable,2021-02-13 14:59:08 +0100CA400B6D0000,"BQM -BlockQuest Maker-",online,playable,2020-07-31 20:56:50 +0100E87017D0E000,"Bramble: The Mountain King",services-horizon,playable,2024-03-06 09:32:17 +01000F5003068000,"Brave Dungeon + Dark Witch Story:COMBAT",,playable,2021-01-12 21:06:34 +01006DC010326000,"BRAVELY DEFAULT™ II",gpu;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26 +0100B6801137E000,"Bravely Default™ II Demo",gpu;crash;UE4;demo,ingame,2022-09-27 05:39:47 +010081501371E000,"BraveMatch",UE4,playable,2022-10-26 13:32:15 +0100F60017D4E000,"Bravery and Greed",gpu;deadlock,boots,2022-12-04 02:23:47 +0100A42004718000,"BRAWL",nvdec;slow,playable,2020-06-04 14:23:18 +010068F00F444000,"Brawl Chess",nvdec,playable,2022-10-26 13:59:17 +0100C6800B934000,"Brawlhalla",online;opengl,playable,2021-06-03 18:26:09 +010060200A4BE000,"Brawlout",ldn-untested;online,playable,2021-06-04 17:35:35 +0100C1B00E1CA000,"Brawlout Demo",demo,playable,2021-02-13 22:46:53 +010022C016DC8000,"Breakout: Recharged",slow,ingame,2022-11-06 15:32:57 +01000AA013A5E000,"Breathedge",UE4;nvdec,playable,2021-05-06 15:44:28 +01003D50100F4000,"Breathing Fear",,playable,2020-07-14 15:12:29 +010026800BB06000,"Brick Breaker",nvdec;online,playable,2020-12-15 18:26:23 +01002AD0126AE000,"Bridge Constructor: The Walking Dead",gpu;slow,ingame,2020-12-11 17:31:32 +01000B1010D8E000,"Bridge! 3",,playable,2020-10-08 20:47:24 +010011000EA7A000,"BRIGANDINE The Legend of Runersia",,playable,2021-06-20 06:52:25 +0100703011258000,"BRIGANDINE The Legend of Runersia Demo",,playable,2021-02-14 14:44:10 +01000BF00BE40000,"Bring Them Home",UE4,playable,2021-04-12 14:14:43 +010060A00B53C000,"Broforce",ldn-untested;online,playable,2021-05-28 12:23:38 +0100EDD0068A6000,"Broken Age",,playable,2021-06-04 17:40:32 +0100A5800F6AC000,"Broken Lines",,playable,2020-10-16 00:01:37 +01001E60085E6000,"Broken Sword 5 - the Serpent's Curse",,playable,2021-06-04 17:28:59 +0100F19011226000,"Brotherhood United Demo",demo,playable,2021-02-14 21:10:57 +01000D500D08A000,"Brothers: A Tale of Two Sons",nvdec;UE4,playable,2022-07-19 14:02:22 +0100B2700E90E000,"Brunch Club",,playable,2020-06-24 13:54:07 +010010900F7B4000,"Bubble Bobble 4 Friends: The Baron is Back!",nvdec,playable,2021-06-04 15:27:55 +0100DBE00C554000,"Bubsy: Paws on Fire!",slow,ingame,2023-08-24 02:44:51 +0100089010A92000,"Bucket Knight",crash,ingame,2020-09-04 13:11:24 +0100F1B010A90000,"Bucket Knight demo",demo,playable,2021-02-14 21:23:09 +01000D200AC0C000,"Bud Spencer & Terence Hill - Slaps And Beans",,playable,2022-07-17 12:37:00 +010051A00E99E000,"Bug Fables: The Everlasting Sapling",,playable,2020-06-09 11:27:00 +01003DD00D658000,"Bulletstorm: Duke of Switch Edition",nvdec,playable,2022-03-03 08:30:24 +01006BB00E8FA000,"BurgerTime Party!",slow,playable,2020-11-21 14:11:53 +01005780106E8000,"BurgerTime Party! Demo",demo,playable,2021-02-14 21:34:16 +010078C00DB40000,"Buried Stars",,playable,2020-09-07 14:11:58 +0100DBF01000A000,"Burnout™ Paradise Remastered",nvdec;online,playable,2021-06-13 02:54:46 +010066F00C76A000,"Bury me, my Love",,playable,2020-11-07 12:47:37 +010030D012FF6000,"Bus Driver Simulator",,playable,2022-10-17 13:55:27 +0100A9101418C000,"BUSTAFELLOWS",nvdec,playable,2020-10-17 20:04:41 +0100177005C8A000,"BUTCHER",,playable,2021-01-11 18:50:17 +01000B900D8B0000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda",slow;nvdec,playable,2024-04-01 22:43:40 +010065700EE06000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda Demo",demo;gpu;nvdec,ingame,2021-02-14 21:48:15 +01005C00117A8000,"Café Enchanté",,playable,2020-11-13 14:54:25 +010060400D21C000,"Cafeteria Nipponica Demo",demo,playable,2021-02-14 22:11:35 +0100699012F82000,"Cake Bash Demo",crash;demo,ingame,2021-02-14 22:21:15 +01004FD00D66A000,"Caladrius Blaze",deadlock;nvdec,nothing,2022-12-07 16:44:37 +01004B500AB88000,"Calculation Castle : Greco's Ghostly Challenge Addition",32-bit,playable,2020-11-01 23:40:11 +010045500B212000,"Calculation Castle : Greco's Ghostly Challenge Division",32-bit,playable,2020-11-01 23:54:55 +0100ECE00B210000,"Calculation Castle : Greco's Ghostly Challenge Multiplication",32-bit,playable,2020-11-02 00:04:33 +0100A6500B176000,"Calculation Castle : Greco's Ghostly Challenge Subtraction",32-bit,playable,2020-11-01 23:47:42 +010004701504A000,"Calculator",,playable,2021-06-11 13:27:20 +010013A00E750000,"Calico",,playable,2022-10-17 14:44:28 +010046000EE40000,"Call of Cthulhu",nvdec;UE4,playable,2022-12-18 03:08:30 +0100B4700BFC6000,"Call of Juarez: Gunslinger",gpu;nvdec,ingame,2022-09-17 16:49:46 +0100593008BDC000,"Can't Drive This",,playable,2022-10-22 14:55:17 +0100E4600B166000,"Candle: The Power of the Flame",nvdec,playable,2020-05-26 12:10:20 +01001E0013208000,"Capcom Arcade Stadium",,playable,2021-03-17 05:45:14 +010094E00B52E000,"Capcom Beat 'Em Up Bundle",,playable,2020-03-23 18:31:24 +0100F6400A77E000,"CAPCOM BELT ACTION COLLECTION",online;ldn-untested,playable,2022-07-21 20:51:23 +01009BF0072D4000,"Captain Toad™: Treasure Tracker",32-bit,playable,2024-04-25 00:50:16 +01002C400B6B6000,"Captain Toad™: Treasure Tracker Demo",32-bit;demo,playable,2021-02-14 22:36:09 +0100EAE010560000,"Captain Tsubasa: Rise of New Champions",online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50 +01002320137CC000,"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",slow,playable,2021-02-14 22:45:35 +010048800D95C000,"Car Mechanic Manager",,playable,2020-07-23 18:50:17 +01007BD00AE70000,"Car Quest",deadlock,menus,2021-11-18 08:59:18 +0100DA70115E6000,"Caretaker",,playable,2022-10-04 14:52:24 +0100DD6014870000,"Cargo Crew Driver",,playable,2021-04-19 12:54:22 +010088C0092FE000,"Carnival Games®",nvdec,playable,2022-07-21 21:01:22 +01005F5011AC4000,"Carnivores: Dinosaur Hunt",,playable,2022-12-14 18:46:06 +0100B1600E9AE000,"CARRION",crash,nothing,2020-08-13 17:15:12 +01008D1001512000,"Cars 3: Driven to Win",gpu,ingame,2022-07-21 21:21:05 +0100810012A1A000,"Carto",,playable,2022-09-04 15:37:06 +0100085003A2A000,"Cartoon Network Battle Crashers",,playable,2022-07-21 21:55:40 +0100C4C0132F8000,"CASE 2: Animatronics Survival",nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03 +010066F01A0E0000,"Cassette Beasts",,playable,2024-07-22 20:38:43 +010001300D14A000,"Castle Crashers Remastered",gpu,boots,2024-08-10 09:21:20 +0100F6D01060E000,"Castle Crashers Remastered Demo",gpu;demo,boots,2022-04-10 10:57:10 +01003C100445C000,"Castle of Heart",nvdec,playable,2022-07-21 23:10:45 +0100F5500FA0E000,"Castle of no Escape 2",,playable,2022-09-13 13:51:42 +0100DA2011F18000,"Castle Pals",,playable,2021-03-04 21:00:33 +010097C00AB66000,"CastleStorm",nvdec,playable,2022-07-21 22:49:14 +010007400EB64000,"CastleStorm II",UE4;crash;nvdec,boots,2020-10-25 11:22:44 +01001A800D6BC000,"Castlevania Anniversary Collection",audio,playable,2020-05-23 11:40:29 +010076000C86E000,"Cat Girl Without Salad: Amuse-Bouche",,playable,2022-09-03 13:01:47 +0100A2F006FBE000,"Cat Quest",,playable,2020-04-02 23:09:32 +01008BE00E968000,"Cat Quest II",,playable,2020-07-06 23:52:09 +0100E86010220000,"Cat Quest II Demo",demo,playable,2021-02-15 14:11:57 +0100BAE0077E4000,"Catherine Full Body for Nintendo Switch (JP)",Needs Update;gpu,ingame,2021-02-21 18:06:11 +0100BF00112C0000,"Catherine: Full Body",nvdec,playable,2023-04-02 11:00:37 +010004400B28A000,"Cattails",,playable,2021-06-03 14:36:57 +0100B7D0022EE000,"Cave Story+",,playable,2020-05-22 09:57:25 +01001A100C0E8000,"Caveblazers",slow,ingame,2021-06-09 17:57:28 +01006DB004566000,"Caveman Warriors",,playable,2020-05-22 11:44:20 +010078700B2CC000,"Caveman Warriors Demo",demo,playable,2021-02-15 14:44:08 +01002B30028F6000,"Celeste",,playable,2020-06-17 10:14:40 +01006B000A666000,"Cendrillon palikA",gpu;nvdec,ingame,2022-07-21 22:52:24 +01007600115CE000,"CHAOS CODE -NEW SIGN OF CATASTROPHE-",crash;nvdec,boots,2022-04-04 12:24:21 +0100957016B90000,"CHAOS;HEAD NOAH",,playable,2022-06-02 22:57:19 +0100F52013A66000,"Charge Kid",gpu;audout,boots,2024-02-11 01:17:47 +0100DE200C350000,"Chasm",,playable,2020-10-23 11:03:43 +010034301A556000,"Chasm: The Rift",gpu,ingame,2024-04-29 19:02:48 +0100A5900472E000,"Chess Ultra",UE4,playable,2023-08-30 23:06:31 +0100E3C00A118000,"Chicken Assassin: Reloaded",,playable,2021-02-20 13:29:01 +0100713010E7A000,"Chicken Police – Paint it RED!",nvdec,playable,2020-12-10 15:10:11 +0100F6C00A016000,"Chicken Range",,playable,2021-04-23 12:14:23 +01002E500E3EE000,"Chicken Rider",,playable,2020-05-22 11:31:17 +0100CAC011C3A000,"Chickens Madness DEMO",UE4;demo;gpu;nvdec,ingame,2021-02-15 15:02:10 +01007D000AD8A000,"Child of Light® Ultimate Edition",nvdec,playable,2020-12-16 10:23:10 +01002DE00C250000,"Children of Morta",gpu;nvdec,ingame,2022-09-13 17:48:47 +0100C1A00AC3E000,"Children of Zodiarcs",,playable,2020-10-04 14:23:33 +010046F012A04000,"Chinese Parents",,playable,2021-04-08 12:56:41 +01005A001489A000,"Chiptune Arrange Sound(DoDonPachi Resurrection)",32-bit;crash,ingame,2024-01-25 14:37:32 +01006A30124CA000,"Chocobo GP",gpu;crash,ingame,2022-06-04 14:52:18 +0100BF600BF26000,"Chocobo's Mystery Dungeon EVERY BUDDY!",slow,playable,2020-05-26 13:53:13 +01000BA0132EA000,"Choices That Matter: And The Sun Went Out",,playable,2020-12-17 15:44:08 +,"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",gpu;nvdec,ingame,2020-09-28 17:58:04 +010039A008E76000,"ChromaGun",,playable,2020-05-26 12:56:42 +010006800E13A000,"Chronos: Before the Ashes",UE4;gpu;nvdec,ingame,2020-12-11 22:16:35 +010039700BA7E000,"Circle of Sumo",,playable,2020-05-22 12:45:21 +01008FA00D686000,"Circuits",,playable,2022-09-19 11:52:50 +0100D8800B87C000,"Cities: Skylines - Nintendo Switch™ Edition",,playable,2020-12-16 10:34:57 +0100E4200D84E000,"Citizens of Space",gpu,boots,2023-10-22 06:45:44 +0100D9C012900000,"Citizens Unite!: Earth x Space",gpu,ingame,2023-10-22 06:44:19 +01005E501284E000,"City Bus Driving Simulator",,playable,2021-06-15 21:25:59 +0100A3A00CC7E000,"CLANNAD",,playable,2021-06-03 17:01:02 +01007B501372C000,"CLANNAD Side Stories",,playable,2022-10-26 15:03:04 +01005ED0107F4000,"Clash Force",,playable,2022-10-01 23:45:48 +010009300AA6C000,"Claybook",slow;nvdec;online;UE4,playable,2022-07-22 11:11:34 +010058900F52E000,"Clea",crash,ingame,2020-12-15 16:22:56 +010045E0142A4000,"Clea 2",,playable,2021-04-18 14:25:18 +01008C100C572000,"Clock Zero ~Shuuen no Ichibyou~ Devote",nvdec,playable,2022-12-04 22:19:14 +0100DF9013AD4000,"Clocker",,playable,2021-04-05 15:05:13 +0100B7200DAC6000,"Close to the Sun",crash;nvdec;UE4,boots,2021-11-04 09:19:41 +010047700D540000,"Clubhouse Games™: 51 Worldwide Classics",ldn-works,playable,2024-05-21 16:12:57 +0100C1401CEDC000,"Clue",crash;online,menus,2020-11-10 09:23:48 +010085A00821A000,"ClusterPuck 99",,playable,2021-01-06 00:28:12 +010096900A4D2000,"Clustertruck",slow,ingame,2021-02-19 21:07:09 +01005790110F0000,"Cobra Kai: The Karate Kid Saga Continues",,playable,2021-06-17 15:59:13 +01002E700C366000,"COCOON",gpu,ingame,2024-03-06 11:33:08 +010034E005C9C000,"Code of Princess EX",nvdec;online,playable,2021-06-03 10:50:13 +010086100CDCA000,"CODE SHIFTER",,playable,2020-08-09 15:20:55 +010002400F408000,"Code: Realize ~Future Blessings~",nvdec,playable,2023-03-31 16:57:47 +0100CF800C810000,"Coffee Crisis",,playable,2021-02-20 12:34:52 +010066200E1E6000,"Coffee Talk",,playable,2020-08-10 09:48:44 +0100178009648000,"Coffin Dodgers",,playable,2021-02-20 14:57:41 +010035B01706E000,"Cold Silence",cpu;crash,nothing,2024-07-11 17:06:14 +010083E00F40E000,"Collar X Malice",nvdec,playable,2022-10-02 11:51:56 +0100E3B00F412000,"Collar X Malice -Unlimited-",nvdec,playable,2022-10-04 15:30:40 +01002A600D7FC000,"Collection of Mana",,playable,2020-10-19 19:29:45 +0100B77012266000,"COLLECTION of SaGa FINAL FANTASY LEGEND",,playable,2020-12-30 19:11:16 +010030800BC36000,"Collidalot",nvdec,playable,2022-09-13 14:09:27 +0100CA100C0BA000,"Color Zen",,playable,2020-05-22 10:56:17 +010039B011312000,"Colorgrid",,playable,2020-10-04 01:50:52 +0100A7000BD28000,"Coloring Book",,playable,2022-07-22 11:17:05 +010020500BD86000,"Colors Live",gpu;services;crash,boots,2023-02-26 02:51:07 +0100E2F0128B4000,"Colossus Down",,playable,2021-02-04 20:49:50 +0100C4D00D16A000,"Commander Keen in Keen Dreams",gpu,ingame,2022-08-04 20:34:20 +0100E400129EC000,"Commander Keen in Keen Dreams: Definitive Edition",,playable,2021-05-11 19:33:54 +010065A01158E000,"Commandos 2 - HD Remaster",gpu;nvdec,ingame,2022-08-10 21:52:27 +010015801308E000,"Conarium",UE4;nvdec,playable,2021-04-26 17:57:53 +0100971011224000,"Concept Destruction",,playable,2022-09-29 12:28:56 +010043700C9B0000,"Conduct TOGETHER!",nvdec,playable,2021-02-20 12:59:00 +01007EF00399C000,"Conga Master Party!",,playable,2020-05-22 13:22:24 +0100A5600FAC0000,"Construction Simulator 3 - Console Edition",,playable,2023-02-06 09:31:23 +0100A330022C2000,"Constructor Plus",,playable,2020-05-26 12:37:40 +0100DCA00DA7E000,"Contra Anniversary Collection",,playable,2022-07-22 11:30:12 +0100F2600D710000,"CONTRA: ROGUE CORPS",crash;nvdec;regression,menus,2021-01-07 13:23:35 +0100B8200ECA6000,"CONTRA: ROGUE CORPS Demo",gpu,ingame,2022-09-04 16:46:52 +01007D701298A000,"Contraptions",,playable,2021-02-08 18:40:50 +0100041013360000,"Control Ultimate Edition - Cloud Version",Needs Update;crash;services,nothing,2021-04-18 22:34:06 +010058800E90A000,"Convoy: A Tactical Roguelike",,playable,2020-10-15 14:43:50 +0100B82010B6C000,"Cook, Serve, Delicious! 3?!",,playable,2022-10-09 12:09:34 +010060700EFBA000,"Cooking Mama: Cookstar",crash;loader-allocator,menus,2021-11-20 03:19:35 +01001E400FD58000,"Cooking Simulator",,playable,2021-04-18 13:25:23 +0100DF9010206000,"Cooking Tycoons - 3 in 1 Bundle",,playable,2020-11-16 22:44:26 +01005350126E0000,"Cooking Tycoons 2 - 3 in 1 Bundle",,playable,2020-11-16 22:19:33 +0100C5A0115C4000,"CopperBell",,playable,2020-10-04 15:54:36 +010016400B1FE000,"Corpse Party: Blood Drive",nvdec,playable,2021-03-01 12:44:23 +0100CCB01B1A0000,"COSMIC FANTASY COLLECTION",,ingame,2024-05-21 17:56:37 +010067C00A776000,"Cosmic Star Heroine",,playable,2021-02-20 14:30:47 +01003DD00F94A000,"COTTOn Reboot! [ コットン リブート! ]",,playable,2022-05-24 16:29:24 +,"Cotton/Guardian Saturn Tribute Games",gpu,boots,2022-11-27 21:00:51 +01000E301107A000,"Couch Co-Op Bundle Vol. 2",nvdec,playable,2022-10-02 12:04:21 +0100C1E012A42000,"Country Tales",,playable,2021-06-17 16:45:39 +01003370136EA000,"Cozy Grove",gpu,ingame,2023-07-30 22:22:19 +010073401175E000,"Crash Bandicoot™ 4: It’s About Time",nvdec;UE4,playable,2024-03-17 07:13:45 +0100D1B006744000,"Crash Bandicoot™ N. Sane Trilogy",,playable,2024-02-11 11:38:14 +010007900FCE2000,"Crash Drive 2",online,playable,2020-12-17 02:45:46 +010046600BD0E000,"Crash Dummy",nvdec,playable,2020-05-23 11:12:43 +0100BF200CD74000,"Crashbots",,playable,2022-07-22 13:50:52 +010027100BD16000,"Crashlands",,playable,2021-05-27 20:30:06 +0100F9F00C696000,"Crash™ Team Racing Nitro-Fueled",gpu;nvdec;online-broken,ingame,2023-06-25 02:40:17 +0100BF7006BCA000,"Crawl",,playable,2020-05-22 10:16:05 +0100C66007E96000,"Crayola Scoot",nvdec,playable,2022-07-22 14:01:55 +01005BA00F486000,"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",,playable,2021-07-21 10:41:33 +0100D470106DC000,"CRAYON SHINCHAN The Storm Called FLAMING KASUKABE RUNNER!!",services,menus,2020-03-20 14:00:57 +01006BC00C27A000,"Crazy Strike Bowling EX",UE4;gpu;nvdec,ingame,2020-08-07 18:15:59 +0100F9900D8C8000,"Crazy Zen Mini Golf",,playable,2020-08-05 14:00:00 +0100B0E010CF8000,"Creaks",,playable,2020-08-15 12:20:52 +01007C600D778000,"Creature in the Well",UE4;gpu,ingame,2020-11-16 12:52:40 +0100A19011EEE000,"Creepy Tale",,playable,2020-12-15 21:58:03 +01005C2013B00000,"Cresteaju",gpu,ingame,2021-03-24 10:46:06 +010022D00D4F0000,"Cricket 19",gpu,ingame,2021-06-14 14:56:07 +0100387017100000,"Cricket 22 The Official Game Of The Ashes",crash,boots,2023-10-18 08:01:57 +01005640080B0000,"Crimsonland",,playable,2021-05-27 20:50:54 +0100B0400EBC4000,"Cris Tales",crash,ingame,2021-07-29 15:10:53 +01004BC0166CC000,"CRISIS CORE –FINAL FANTASY VII– REUNION",,playable,2022-12-19 15:53:59 +01004F800C4DA000,"Croc's World",,playable,2020-05-22 11:21:09 +01009DB00DE12000,"Croc's World 2",,playable,2020-12-16 20:01:40 +010025200FC54000,"Croc's World 3",,playable,2020-12-30 18:53:26 +01000F0007D92000,"Croixleur Sigma",online,playable,2022-07-22 14:26:54 +01003D90058FC000,"CrossCode",,playable,2024-02-17 10:23:19 +0100B1E00AA56000,"Crossing Souls",nvdec,playable,2021-02-20 15:42:54 +0100059012BAE000,"Crown Trick",,playable,2021-06-16 19:36:29 +0100B41013C82000,"Cruis'n Blast",gpu,ingame,2023-07-30 10:33:47 +01000CC01C108000,"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",demo,playable,2023-08-06 05:33:21 +0100CEA007D08000,"Crypt of the NecroDancer: Nintendo Switch Edition",nvdec,playable,2022-11-01 09:52:06 +0100582010AE0000,"Crysis 2 Remastered",deadlock,menus,2023-09-21 10:46:17 +0100CD3010AE2000,"Crysis 3 Remastered",deadlock,menus,2023-09-10 16:03:50 +0100E66010ADE000,"Crysis Remastered",nvdec,menus,2024-08-13 05:23:24 +0100972008234000,"Crystal Crisis",nvdec,playable,2021-02-20 13:52:44 +01006FA012FE0000,"Cthulhu Saves Christmas",,playable,2020-12-14 00:58:55 +010001600D1E8000,"Cube Creator X",crash,menus,2021-11-25 08:53:28 +010082E00F1CE000,"Cubers: Arena",nvdec;UE4,playable,2022-10-04 16:05:40 +010040D011D04000,"Cubicity",,playable,2021-06-14 14:19:51 +0100A5C00D162000,"Cuphead",,playable,2022-02-01 22:45:55 +0100F7E00DFC8000,"Cupid Parasite",gpu,ingame,2023-08-21 05:52:36 +010054501075C000,"Curious Cases",,playable,2020-08-10 09:30:48 +0100D4A0118EA000,"Curse of the Dead Gods",,playable,2022-08-30 12:25:38 +0100CE5014026000,"Curved Space",,playable,2023-01-14 22:03:50 +0100C1300DE74000,"Cyber Protocol",nvdec,playable,2020-09-28 14:47:40 +0100C1F0141AA000,"Cyber Shadow",,playable,2022-07-17 05:37:41 +01006B9013672000,"Cybxus Hearts",gpu;slow,ingame,2022-01-15 05:00:49 +010063100B2C2000,"Cytus α",nvdec,playable,2021-02-20 13:40:46 +0100B6400CA56000,"DAEMON X MACHINA™",UE4;audout;ldn-untested;nvdec,playable,2021-06-09 19:22:29 +010061300DF48000,"Dairoku: Ayakashimori",Needs Update;loader-allocator,nothing,2021-11-30 05:09:38 +0100BD2009A1C000,"Damsel",,playable,2022-09-06 11:54:39 +0100BFC002B4E000,"Dandara: Trials of Fear Edition",,playable,2020-05-26 12:42:33 +0100DFB00D808000,"Dandy Dungeon - Legend of Brave Yamada -",,playable,2021-01-06 09:48:47 +01003ED0099B0000,"Danger Mouse: The Danger Games",crash;online,boots,2022-07-22 15:49:45 +0100EFA013E7C000,"Danger Scavenger",nvdec,playable,2021-04-17 15:53:04 +0100417007F78000,"Danmaku Unlimited 3",,playable,2020-11-15 00:48:35 +,"Darius Cozmic Collection",,playable,2021-02-19 20:59:06 +010059C00BED4000,"Darius Cozmic Collection Special Edition",,playable,2022-07-22 16:26:50 +010015800F93C000,"Dariusburst - Another Chronicle EX+",online,playable,2021-04-05 14:21:43 +01003D301357A000,"Dark Arcana: The Carnival",gpu;slow,ingame,2022-02-19 08:52:28 +010083A00BF6C000,"Dark Devotion",nvdec,playable,2022-08-09 09:41:18 +0100BFF00D5AE000,"Dark Quest 2",,playable,2020-11-16 21:34:52 +01004AB00A260000,"DARK SOULS™: REMASTERED",gpu;nvdec;online-broken,ingame,2024-04-09 19:47:58 +01001FA0034E2000,"Dark Witch Music Episode: Rudymical",,playable,2020-05-22 09:44:44 +01008F1008DA6000,"Darkest Dungeon",nvdec,playable,2022-07-22 18:49:18 +0100F2300D4BA000,"Darksiders Genesis",nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25 +010071800BA98000,"Darksiders II Deathinitive Edition",gpu;nvdec;online-broken,ingame,2024-06-26 00:37:25 +0100E1400BA96000,"Darksiders Warmastered Edition",nvdec,playable,2023-03-02 18:08:09 +010033500B7B6000,"Darkwood",,playable,2021-01-08 21:24:06 +0100440012FFA000,"DARQ Complete Edition",audout,playable,2021-04-07 15:26:21 +0100BA500B660000,"Darts Up",,playable,2021-04-14 17:22:22 +0100F0B0081DA000,"Dawn of the Breakers",online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03 +0100FCF00F6CC000,"Day and Night",,playable,2020-12-17 12:30:51 +0100D0A009310000,"de Blob",nvdec,playable,2021-01-06 17:34:46 +010034E00A114000,"de Blob 2",nvdec,playable,2021-01-06 13:00:16 +01008E900471E000,"De Mambo",,playable,2021-04-10 12:39:40 +01004C400CF96000,"Dead by Daylight",nvdec;online-broken;UE4,boots,2022-09-13 14:32:13 +0100646009FBE000,"Dead Cells",,playable,2021-09-22 22:18:49 +01004C500BD40000,"Dead End Job",nvdec,playable,2022-09-19 12:48:44 +01009CC00C97C000,"DEAD OR ALIVE Xtreme 3 Scarlet",,playable,2022-07-23 17:05:06 +0100A5000F7AA000,"DEAD OR SCHOOL",nvdec,playable,2022-09-06 12:04:09 +0100A24011F52000,"Dead Z Meat",UE4;services,ingame,2021-04-14 16:50:16 +010095A011A14000,"Deadly Days",,playable,2020-11-27 13:38:55 +0100BAC011928000,"Deadly Premonition 2: A Blessing In Disguise",,playable,2021-06-15 14:12:36 +0100EBE00F22E000,"Deadly Premonition Origins",32-bit;nvdec,playable,2024-03-25 12:47:46 +,"Dear Magi - Mahou Shounen Gakka -",,playable,2020-11-22 16:45:16 +01000D60126B6000,"Death and Taxes",,playable,2020-12-15 20:27:49 +010012B011AB2000,"Death Come True",nvdec,playable,2021-06-10 22:30:49 +0100F3B00CF32000,"Death Coming",crash,nothing,2022-02-06 07:43:03 +0100AEC013DDA000,"Death end re;Quest",,playable,2023-07-09 12:19:54 +0100423009358000,"Death Road to Canada",gpu;audio;32-bit;crash,nothing,2023-06-28 15:39:26 +010085900337E000,"Death Squared",,playable,2020-12-04 13:00:15 +0100A51013550000,"Death Tales",,playable,2020-12-17 10:55:52 +0100492011A8A000,"Death's Hangover",gpu,boots,2023-08-01 22:38:06 +01009120119B4000,"Deathsmiles I・II",,playable,2024-04-08 19:29:00 +010034F00BFC8000,"Debris Infinity",nvdec;online,playable,2021-05-28 12:14:39 +010027700FD2E000,"Decay of Logos",nvdec,playable,2022-09-13 14:42:13 +01002CC0062B8000,"DEEMO",,playable,2022-07-24 11:34:33 +01008B10132A2000,"DEEMO -Reborn-",nvdec;online-broken,playable,2022-10-17 15:18:11 +010026800FA88000,"Deep Diving Adventures",,playable,2022-09-22 16:43:37 +0100FAF009562000,"Deep Ones",services,nothing,2020-04-03 02:54:19 +0100C3E00D68E000,"Deep Sky Derelicts: Definitive Edition",,playable,2022-09-27 11:21:08 +01000A700F956000,"Deep Space Rush",,playable,2020-07-07 23:30:33 +0100961011BE6000,"DeepOne",services-horizon;Needs Update,nothing,2024-01-18 15:01:05 +01008BB00F824000,"Defenders of Ekron: Definitive Edition",,playable,2021-06-11 16:31:03 +0100CDE0136E6000,"Defentron",,playable,2022-10-17 15:47:56 +010039300BDB2000,"Defunct",,playable,2021-01-08 21:33:46 +010067900B9C4000,"Degrees of Separation",,playable,2021-01-10 13:40:04 +010071C00CBA4000,"Dei Gratia no Rashinban",crash,nothing,2021-07-13 02:25:32 +010092E00E7F4000,"Deleveled",slow,playable,2020-12-15 21:02:29 +010023800D64A000,"DELTARUNE Chapter 1&2",,playable,2023-01-22 04:47:44 +010038B01D2CA000,"Dementium: The Ward",crash,boots,2024-09-02 08:28:14 +0100AB600ACB4000,"Demetrios - The BIG Cynical Adventure",,playable,2021-06-04 12:01:01 +010099D00D1A4000,"Demolish & Build 2018",,playable,2021-06-13 15:27:26 +010084600F51C000,"Demon Pit",nvdec,playable,2022-09-19 13:35:15 +0100309016E7A000,"Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",UE4,playable,2024-08-08 04:51:49 +0100A2B00BD88000,"Demon's Crystals",crash;regression,nothing,2022-12-07 16:33:17 +0100E29013818000,"Demon's Rise - Lords of Chaos",,playable,2021-04-06 16:20:06 +0100C3501094E000,"Demon's Rise - War for the Deep",,playable,2020-07-29 12:26:27 +0100161011458000,"Demon's Tier+",,playable,2021-06-09 17:25:36 +0100BE800E6D8000,"DEMON'S TILT",,playable,2022-09-19 13:22:46 +010000401313A000,"Demong Hunter",,playable,2020-12-12 15:27:08 +0100BC501355A000,"Densha de go!! Hashirou Yamanote Sen",nvdec;UE4,playable,2023-11-09 07:47:58 +0100C9100FAE2000,"Depixtion",,playable,2020-10-10 18:52:37 +01000BF00B6BC000,"Deployment",slow;online-broken,playable,2022-10-17 16:23:59 +010023600C704000,"Deponia",nvdec,playable,2021-01-26 17:17:19 +0100ED700469A000,"Deru - The Art of Cooperation",,playable,2021-01-07 16:59:59 +0100D4600D0E4000,"Descenders",gpu,ingame,2020-12-10 15:22:36 +,"Desire remaster ver.",crash,boots,2021-01-17 02:34:37 +010069500DD86000,"Destiny Connect: Tick-Tock Travelers",UE4;gpu;nvdec,ingame,2020-12-16 12:20:36 +01008BB011ED6000,"Destrobots",,playable,2021-03-06 14:37:05 +01009E701356A000,"Destroy All Humans!",gpu;nvdec;UE4,ingame,2023-01-14 22:23:53 +010030600E65A000,"Detective Dolittle",,playable,2021-03-02 14:03:59 +01009C0009842000,"Detective Gallo",nvdec,playable,2022-07-24 11:51:04 +,"Detective Jinguji Saburo Prism of Eyes",,playable,2020-10-02 21:54:41 +010007500F27C000,"Detective Pikachu™ Returns",,playable,2023-10-07 10:24:59 +010031B00CF66000,"Devil Engine",,playable,2021-06-04 11:54:30 +01002F000E8F2000,"Devil Kingdom",,playable,2023-01-31 08:58:44 +0100E8000D5B8000,"Devil May Cry",nvdec,playable,2021-01-04 19:43:08 +01007CF00D5BA000,"Devil May Cry 2",nvdec,playable,2023-01-24 23:03:20 +01007B600D5BC000,"Devil May Cry 3 Special Edition",nvdec,playable,2024-07-08 12:33:23 +01003C900EFF6000,"Devil Slayer Raksasi",,playable,2022-10-26 19:42:32 +01009EA00A320000,"Devious Dungeon",,playable,2021-03-04 13:03:06 +01003F601025E000,"Dex",nvdec,playable,2020-08-12 16:48:12 +010044000CBCA000,"Dexteritrip",,playable,2021-01-06 12:51:12 +0100AFC00E06A000,"Dezatopia",online,playable,2021-06-15 21:06:11 +01001B300B9BE000,"Diablo III: Eternal Collection",online-broken;ldn-works,playable,2023-08-21 23:48:03 +0100726014352000,"Diablo® II: Resurrected™",gpu;nvdec,ingame,2023-08-18 18:42:47 +0100F73011456000,"Diabolic",,playable,2021-06-11 14:45:08 +010027400BD24000,"DIABOLIK LOVERS CHAOS LINEAGE",gpu;Needs Update,ingame,2023-06-08 02:20:44 +0100BBF011394000,"Dicey Dungeons",gpu;audio;slow,ingame,2023-08-02 20:30:12 +0100D98005E8C000,"Die for Valhalla!",,playable,2021-01-06 16:09:14 +0100BB900B5B4000,"Dies irae Amantes amentes For Nintendo Switch",32-bit;crash,nothing,2022-02-16 07:09:05 +0100A5A00DBB0000,"Dig Dog",gpu,ingame,2021-06-02 17:17:51 +01004DE011076000,"Digerati Indie Darling Bundle Vol. 3",,playable,2022-10-02 13:01:57 +010035D0121EC000,"Digerati Presents: The Dungeon Crawl Vol. 1",slow,ingame,2021-04-18 14:04:55 +010014E00DB56000,"Digimon Story Cyber Sleuth: Complete Edition",nvdec;opengl,playable,2022-09-13 15:02:37 +0100F00014254000,"Digimon World: Next Order",,playable,2023-05-09 20:41:06 +0100B6D00DA6E000,"Ding Dong XL",,playable,2020-07-14 16:13:19 +01002E4011924000,"Dininho Adventures",,playable,2020-10-03 17:25:51 +010027E0158A6000,"Dininho Space Adventure",,playable,2023-01-14 22:43:04 +0100A8A013DA4000,"Dirt Bike Insanity",,playable,2021-01-31 13:27:38 +01004CB01378A000,"Dirt Trackin Sprint Cars",nvdec;online-broken,playable,2022-10-17 16:34:56 +0100918014B02000,"Disagaea 6: Defiance of Destiny Demo",demo,playable,2022-10-26 20:02:04 +010020700E2A2000,"Disaster Report 4: Summer Memories",nvdec;UE4,playable,2022-09-27 19:41:31 +0100510004D2C000,"Disc Jam",UE4;ldn-untested;nvdec;online,playable,2021-04-08 16:40:35 +0100C81004780000,"Disco Dodgeball - REMIX",online,playable,2020-09-28 23:24:49 +01004B100AF18000,"Disgaea 1 Complete",,playable,2023-01-30 21:45:23 +0100A9800E9B4000,"Disgaea 4 Complete+",gpu;slow,playable,2020-02-18 10:54:28 +010068C00F324000,"Disgaea 4 Complete+ Demo",nvdec,playable,2022-09-13 15:21:59 +01005700031AE000,"Disgaea 5 Complete",nvdec,playable,2021-03-04 15:32:54 +0100ABC013136000,"Disgaea 6: Defiance of Destiny",deadlock,ingame,2023-04-15 00:50:32 +0100307011D80000,"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",,playable,2021-06-08 13:20:33 +01005EE013888000,"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",gpu;demo,ingame,2022-12-06 15:27:59 +01000B70122A2000,"Disjunction",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24 +0100A2F00EEFC000,"Disney Classic Games Collection",online-broken,playable,2022-09-13 15:44:17 +0100DA201EBF8000,"Disney Epic Mickey: Rebrushed",crash,ingame,2024-09-26 22:11:51 +0100F0401435E000,"Disney Speedstorm",services,boots,2023-11-27 02:15:32 +010012800EBAE000,"Disney TSUM TSUM FESTIVAL",crash,menus,2020-07-14 14:05:28 +01009740120FE000,"DISTRAINT 2",,playable,2020-09-03 16:08:12 +010075B004DD2000,"DISTRAINT: Deluxe Edition",,playable,2020-06-15 23:42:24 +010027400CDC6000,"Divinity: Original Sin 2 - Definitive Edition",services;crash;online-broken;regression,menus,2023-08-13 17:20:03 +01001770115C8000,"Dodo Peak",nvdec;UE4,playable,2022-10-04 16:13:05 +010077B0100DA000,"Dogurai",,playable,2020-10-04 02:40:16 +010048100D51A000,"Dokapon Up! Mugen no Roulette",gpu;Needs Update,menus,2022-12-08 19:39:10 +01005EE00BC78000,"Dokuro (ドクロ)",nvdec,playable,2020-12-17 14:47:09 +010007200AC0E000,"Don't Die, Mr Robot!",nvdec,playable,2022-09-02 18:34:38 +0100E470067A8000,"Don't Knock Twice",,playable,2024-05-08 22:37:58 +0100C4D00B608000,"Don't Sink",gpu,ingame,2021-02-26 15:41:11 +0100751007ADA000,"Don't Starve: Nintendo Switch Edition",nvdec,playable,2022-02-05 20:43:34 +010088B010DD2000,"Dongo Adventure",,playable,2022-10-04 16:22:26 +0100C1F0051B6000,"Donkey Kong Country™: Tropical Freeze",,playable,2024-08-05 16:46:10 +0100F2C00F060000,"Doodle Derby",,boots,2020-12-04 22:51:48 +0100416004C00000,"DOOM",gpu;slow;nvdec;online-broken,ingame,2024-09-23 15:40:07 +010018900DD00000,"DOOM (1993)",nvdec;online-broken,menus,2022-09-06 13:32:19 +01008CB01E52E000,"DOOM + DOOM II",opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01 +010029D00E740000,"DOOM 3",crash,menus,2024-08-03 05:25:47 +01005D700E742000,"DOOM 64",nvdec;vulkan,playable,2020-10-13 23:47:28 +0100D4F00DD02000,"DOOM II (Classic)",nvdec;online,playable,2021-06-03 20:10:01 +0100B1A00D8CE000,"DOOM® Eternal",gpu;slow;nvdec;online-broken,ingame,2024-08-28 15:57:17 +01005ED00CD70000,"Door Kickers: Action Squad",online-broken;ldn-broken,playable,2022-09-13 16:28:53 +010073700E412000,"DORAEMON STORY OF SEASONS",nvdec,playable,2020-07-13 20:28:11 +0100F7300BD8E000,"Double Cross",,playable,2021-01-07 15:34:22 +0100B1500E9F2000,"Double Dragon & Kunio-kun: Retro Brawler Bundle",,playable,2020-09-01 12:48:46 +01001AD00E49A000,"DOUBLE DRAGON Ⅲ: The Sacred Stones",online,playable,2021-06-11 15:41:44 +01005B10132B2000,"Double Dragon Neon",gpu;audio;32-bit,ingame,2022-09-20 18:00:20 +01000F400C1A4000,"Double Kick Heroes",gpu,ingame,2020-10-03 14:33:59 +0100A5D00C7C0000,"Double Pug Switch",nvdec,playable,2022-10-10 10:59:35 +0100FC000EE10000,"Double Switch - 25th Anniversary Edition",nvdec,playable,2022-09-19 13:41:50 +0100B6600FE06000,"Down to Hell",gpu;nvdec,ingame,2022-09-19 14:01:26 +010093D00C726000,"Downwell",,playable,2021-04-25 20:05:24 +0100ED000D390000,"Dr Kawashima's Brain Training",services,ingame,2023-06-04 00:06:46 +01001B80099F6000,"Dracula's Legacy",nvdec,playable,2020-12-10 13:24:25 +0100566009238000,"DragoDino",gpu;nvdec,ingame,2020-08-03 20:49:16 +0100DBC00BD5A000,"Dragon Audit",crash,ingame,2021-05-16 14:24:46 +0100A250097F0000,"DRAGON BALL FighterZ",UE4;ldn-broken;nvdec;online,playable,2021-06-11 16:19:04 +010078D000F88000,"DRAGON BALL XENOVERSE 2 for Nintendo Switch",gpu;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01 +010051C0134F8000,"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",vulkan-backend-bug,playable,2024-08-28 00:03:50 +010099B00A2DC000,"Dragon Blaze for Nintendo Switch",32-bit,playable,2020-10-14 11:11:28 +010089700150E000,"Dragon Marked for Death: Advanced Attackers",ldn-untested;audout,playable,2022-03-10 06:44:34 +0100EFC00EFB2000,"DRAGON QUEST",gpu,boots,2021-11-09 03:31:32 +010008900705C000,"Dragon Quest Builders™",gpu;nvdec,ingame,2023-08-14 09:54:36 +010042000A986000,"DRAGON QUEST BUILDERS™ 2",,playable,2024-04-19 16:36:38 +0100CD3000BDC000,"Dragon Quest Heroes I + II (JP)",nvdec,playable,2021-04-08 14:27:16 +010062200EFB4000,"DRAGON QUEST II: Luminaries of the Legendary Line",,playable,2022-09-13 16:44:11 +01003E601E324000,"DRAGON QUEST III HD-2D Remake",vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27 +010015600EFB6000,"DRAGON QUEST III: The Seeds of Salvation",gpu,boots,2021-11-09 03:38:34 +0100A77018EA0000,"DRAGON QUEST MONSTERS: The Dark Prince",,playable,2023-12-29 16:10:05 +0100217014266000,"Dragon Quest Treasures",gpu;UE4,ingame,2023-05-09 11:16:52 +0100E2E0152E4000,"Dragon Quest X Awakening Five Races Offline",nvdec;UE4,playable,2024-08-20 10:04:24 +01006C300E9F0000,"DRAGON QUEST® XI S: Echoes of an Elusive Age – Definitive Edition",UE4,playable,2021-11-27 12:27:11 +010032C00AC58000,"Dragon's Dogma: Dark Arisen",,playable,2022-07-24 12:58:33 +010027100C544000,"Dragon's Lair Trilogy",nvdec,playable,2021-01-13 22:12:07 +0100DA0006F50000,"DragonFangZ - The Rose & Dungeon of Time",,playable,2020-09-28 21:35:18 +0100F7800A434000,"Drawful 2",,ingame,2022-07-24 13:50:21 +0100B7E0102E4000,"Drawngeon: Dungeons of Ink and Paper",gpu,ingame,2022-09-19 15:41:25 +01008B20129F2000,"Dream",,playable,2020-12-15 19:55:07 +01000AA0093DC000,"Dream Alone",nvdec,playable,2021-01-27 19:41:50 +010034D00F330000,"DreamBall",UE4;crash;gpu,ingame,2020-08-05 14:45:25 +010058B00F3C0000,"Dreaming Canvas",UE4;gpu,ingame,2021-06-13 22:50:07 +0100D24013466000,"DREAMO",UE4,playable,2022-10-17 18:25:28 +0100ED200B6FC000,"DreamWorks Dragons Dawn of New Riders",nvdec,playable,2021-01-27 20:05:26 +0100236011B4C000,"DreamWorks Spirit Lucky’s Big Adventure",,playable,2022-10-27 13:30:52 +010058C00A916000,"Drone Fight",,playable,2022-07-24 14:31:56 +010052000A574000,"Drowning",,playable,2022-07-25 14:28:26 +0100652012F58000,"Drums",,playable,2020-12-17 17:21:51 +01005BC012C66000,"Duck Life Adventure",,playable,2022-10-10 11:27:03 +01007EF00CB88000,"Duke Nukem 3D: 20th Anniversary World Tour",32-bit;ldn-untested,playable,2022-08-19 22:22:40 +010068D0141F2000,"Dull Grey",,playable,2022-10-27 13:40:38 +0100926013600000,"Dungeon Nightmares 1 + 2 Collection",,playable,2022-10-17 18:54:22 +010034300F0E2000,"Dungeon of the Endless",nvdec,playable,2021-05-27 19:16:26 +0100E79009A94000,"Dungeon Stars",,playable,2021-01-18 14:28:37 +0100BE801360E000,"Dungeons & Bombs",,playable,2021-04-06 12:46:22 +0100EC30140B6000,"Dunk Lords",,playable,2024-06-26 00:07:26 +010011C00E636000,"Dusk Diver",crash;UE4,boots,2021-11-06 09:01:30 +0100B6E00A420000,"Dust: An Elysian Tail",,playable,2022-07-25 15:28:12 +0100D7E012F2E000,"Dustoff Z",,playable,2020-12-04 23:22:29 +01008C8012920000,"Dying Light: Definitive Edition",services-horizon,boots,2024-03-11 10:43:32 +01007DD00DFDE000,"Dyna Bomb",,playable,2020-06-07 13:26:55 +0100E9A00CB30000,"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",nvdec,playable,2024-06-26 00:16:30 +010008900BC5A000,"DYSMANTLE",gpu,ingame,2024-07-15 16:24:12 +010054E01D878000,"EA SPORTS FC 25",crash,ingame,2024-09-25 21:07:50 +0100BDB01A0E6000,"EA SPORTS FC™ 24",,boots,2023-10-04 18:32:59 +01001C8016B4E000,"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",gpu;crash,ingame,2024-06-10 23:33:05 +01005DE00D05C000,"EA SPORTS™ FIFA 20 Nintendo Switch™ Legacy Edition",gpu;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20 +010037400C7DA000,"Eagle Island Twist",,playable,2021-04-10 13:15:42 +0100B9E012992000,"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",UE4,playable,2022-12-07 12:59:16 +0100298014030000,"Earth Defense Force: World Brothers",UE4,playable,2022-10-27 14:13:31 +01009B7006C88000,"EARTH WARS",,playable,2021-06-05 11:18:33 +0100DFC00E472000,"Earthfall: Alien Horde",nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37 +01006E50042EA000,"EARTHLOCK",,playable,2021-06-05 11:51:02 +0100A2E00BB0C000,"EarthNight",,playable,2022-09-19 21:02:20 +0100DCE00B756000,"Earthworms",,playable,2022-07-25 16:28:55 +0100E3500BD84000,"Earthworms Demo",,playable,2021-01-05 16:57:11 +0100ECF01800C000,"Easy Come Easy Golf",online-broken;regression,playable,2024-04-04 16:15:00 +0100A9B009678000,"EAT BEAT DEADSPIKE-san",audio;Needs Update,playable,2022-12-02 19:25:29 +0100BCA016636000,"eBaseball Powerful Pro Yakyuu 2022",gpu;services-horizon;crash,nothing,2024-05-26 23:07:19 +01001F20100B8000,"Eclipse: Edge of Light",,playable,2020-08-11 23:06:29 +0100E0A0110F4000,"eCrossminton",,playable,2020-07-11 18:24:27 +0100ABE00DB4E000,"Edna & Harvey: Harvey's New Eyes",nvdec,playable,2021-01-26 14:36:08 +01004F000B716000,"Edna & Harvey: The Breakout – Anniversary Edition",crash;nvdec,ingame,2022-08-01 16:59:56 +01002550129F0000,"Effie",,playable,2022-10-27 14:36:39 +0100CC0010A46000,"Ego Protocol: Remastered",nvdec,playable,2020-12-16 20:16:35 +,"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",,playable,2020-11-12 00:11:50 +01003AD013BD2000,"Eight Dragons",nvdec,playable,2022-10-27 14:47:28 +010020A01209C000,"El Hijo - A Wild West Tale",nvdec,playable,2021-04-19 17:44:08 +0100B5B00EF38000,"Elden: Path of the Forgotten",,playable,2020-12-15 00:33:19 +010068F012880000,"Eldrador® Creatures",slow,playable,2020-12-12 12:35:35 +010008E010012000,"ELEA: Paradigm Shift",UE4;crash,nothing,2020-10-04 19:07:43 +0100A6700AF10000,"Element",,playable,2022-07-25 17:17:16 +0100128003A24000,"Elliot Quest",,playable,2022-07-25 17:46:14 +010041A00FEC6000,"Ember",nvdec,playable,2022-09-19 21:16:11 +010071B012940000,"Embracelet",,playable,2020-12-04 23:45:00 +010017B0102A8000,"Emma: Lost in Memories",nvdec,playable,2021-01-28 16:19:10 +010068300E08E000,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo -",gpu;nvdec,ingame,2022-11-20 16:18:45 +01007A4008486000,"Enchanting Mahjong Match",gpu,ingame,2020-04-17 22:01:31 +01004F3011F92000,"Endless Fables: Dark Moor",gpu;nvdec,ingame,2021-03-07 15:31:03 +010067B017588000,"Endless Ocean™ Luminous",services-horizon;crash,ingame,2024-05-30 02:05:57 +0100B8700BD14000,"Energy Cycle Edge",services,ingame,2021-11-30 05:02:31 +0100A8E0090B0000,"Energy Invasion",,playable,2021-01-14 21:32:26 +0100C6200A0AA000,"Enigmatis 2: The Mists of Ravenwood",crash;regression,boots,2021-06-06 15:15:30 +01009D60076F6000,"Enter the Gungeon",,playable,2022-07-25 20:28:33 +0100262009626000,"Epic Loon",nvdec,playable,2022-07-25 22:06:13 +01000FA0149B6000,"EQI",nvdec;UE4,playable,2022-10-27 16:42:32 +0100E95010058000,"EQQO",UE4;nvdec,playable,2021-06-13 23:10:51 +01000E8010A98000,"Escape First",,playable,2020-10-20 22:46:53 +010021201296A000,"Escape First 2",,playable,2021-03-24 11:59:41 +0100FEF00F0AA000,"Escape from Chernobyl",crash,boots,2022-09-19 21:36:58 +010023E013244000,"Escape from Life Inc",,playable,2021-04-19 17:34:09 +010092901203A000,"Escape From Tethys",,playable,2020-10-14 22:38:25 +0100B0F011A84000,"Escape Game Fort Boyard",,playable,2020-07-12 12:45:43 +0100F9600E746000,"ESP Ra.De. Psi",audio;slow,ingame,2024-03-07 15:05:08 +010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;crash;Needs More Attention,ingame,2024-04-29 05:34:14 +01004F9012FD8000,"Estranged: The Departure",nvdec;UE4,playable,2022-10-24 10:37:58 +0100CB900B498000,"Eternum Ex",,playable,2021-01-13 20:28:32 +010092501EB2C000,"Europa (Demo)",gpu;crash;UE4,ingame,2024-04-23 10:47:12 +01007BE0160D6000,"EVE ghost enemies",gpu,ingame,2023-01-14 03:13:30 +010095E01581C000,"even if TEMPEST",gpu,ingame,2023-06-22 23:50:25 +010072C010002000,"Event Horizon: Space Defense",,playable,2020-07-31 20:31:24 +0100DCF0093EC000,"Everspace™ - Stellar Edition",UE4,playable,2022-08-14 01:16:24 +01006F900BF8E000,"Everybody 1-2-Switch!™",services;deadlock,nothing,2023-07-01 05:52:55 +010080600B53E000,"Evil Defenders",nvdec,playable,2020-09-28 17:11:00 +01006A800FA22000,"Evolution Board Game",online,playable,2021-01-20 22:37:56 +0100F2D00C7DE000,"Exception",online-broken,playable,2022-09-20 12:47:10 +0100DD30110CC000,"Exit the Gungeon",,playable,2022-09-22 17:04:43 +0100A82013976000,"Exodemon",,playable,2022-10-27 20:17:52 +0100FA800A1F4000,"EXORDER",nvdec,playable,2021-04-15 14:17:20 +01009B7010B42000,"Explosive Jake",crash,boots,2021-11-03 07:48:32 +0100EFE00A3C2000,"Eyes: The Horror Game",,playable,2021-01-20 21:59:46 +0100E3D0103CE000,"Fable of Fairy Stones",,playable,2021-05-05 21:04:54 +01004200189F4000,"Factorio",deadlock,boots,2024-06-11 19:26:16 +010073F0189B6000,"Fae Farm",,playable,2024-08-25 15:12:12 +010069100DB08000,"Faeria",nvdec;online-broken,menus,2022-10-04 16:44:41 +01008A6009758000,"Fairune Collection",,playable,2021-06-06 15:29:56 +0100F6D00B8F2000,"Fairy Fencer F™: Advent Dark Force",32-bit;crash;nvdec,ingame,2023-04-16 03:53:48 +0100CF900FA3E000,"FAIRY TAIL",nvdec,playable,2022-10-04 23:00:32 +01005A600BE60000,"Fall of Light: Darkest Edition",slow;nvdec,ingame,2024-07-24 04:19:26 +0100AA801258C000,"Fallen Legion Revenants",crash,menus,2021-11-25 08:53:20 +0100D670126F6000,"Famicom Detective Club™: The Girl Who Stands Behind",nvdec,playable,2022-10-27 20:41:40 +010033F0126F4000,"Famicom Detective Club™: The Missing Heir",nvdec,playable,2022-10-27 20:56:23 +010060200FC44000,"Family Feud®",online-broken,playable,2022-10-10 11:42:21 +0100034012606000,"Family Mysteries: Poisonous Promises",audio;crash,menus,2021-11-26 12:35:06 +010017C012726000,"Fantasy Friends",,playable,2022-10-17 19:42:39 +0100767008502000,"FANTASY HERO ~unsigned legacy~",,playable,2022-07-26 12:28:52 +0100944003820000,"Fantasy Strike",online,playable,2021-02-27 01:59:18 +01000E2012F6E000,"Fantasy Tavern Sextet -Vol.1 New World Days-",gpu;crash;Needs Update,ingame,2022-12-05 16:48:00 +01005C10136CA000,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;crash,ingame,2021-11-06 02:57:29 +010022700E7D6000,"FAR: Lone Sails",,playable,2022-09-06 16:33:05 +0100C9E00FD62000,"Farabel",,playable,2020-08-03 17:47:28 +,"Farm Expert 2019 for Nintendo Switch",,playable,2020-07-09 21:42:57 +01000E400ED98000,"Farm Mystery",nvdec,playable,2022-09-06 16:46:47 +010086B00BB50000,"Farm Together",,playable,2021-01-19 20:01:19 +0100EB600E914000,"Farming Simulator 20",nvdec,playable,2021-06-13 10:52:44 +0100D04004176000,"Farming Simulator Nintendo Switch Edition",nvdec,playable,2021-01-19 14:46:44 +0100E99019B3A000,"Fashion Dreamer",,playable,2023-11-12 06:42:52 +01009510001CA000,"FAST RMX",slow;crash;ldn-partial,ingame,2024-06-22 20:48:58 +0100BEB015604000,"FATAL FRAME: Maiden of Black Water",,playable,2023-07-05 16:01:40 +0100DAE019110000,"FATAL FRAME: Mask of the Lunar Eclipse",Incomplete,playable,2024-04-11 06:01:30 +010051400B17A000,"Fate/EXTELLA LINK",ldn-untested;nvdec,playable,2021-01-27 00:45:50 +010053E002EA2000,"Fate/EXTELLA: The Umbral Star",gpu;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55 +0100F6200B7D4000,"fault - milestone one",nvdec,playable,2021-03-24 10:41:49 +01005AC0068F6000,"Fear Effect Sedna",nvdec,playable,2021-01-19 13:10:33 +0100F5501CE12000,"Fearmonium",crash,boots,2024-03-06 11:26:11 +0100E4300CB3E000,"Feather",,playable,2021-06-03 14:11:27 +010003B00D3A2000,"Felix The Reaper",nvdec,playable,2020-10-20 23:43:03 +0100AA3009738000,"Feudal Alloy",,playable,2021-01-14 08:48:14 +01008D900B984000,"FEZ",gpu,ingame,2021-04-18 17:10:16 +01007510040E8000,"FIA European Truck Racing Championship",nvdec,playable,2022-09-06 17:51:59 +0100F7B002340000,"FIFA 18",gpu;online-broken;ldn-untested,ingame,2022-07-26 12:43:59 +0100FFA0093E8000,"FIFA 19",gpu;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07 +01000A001171A000,"FIFA 21 Nintendo Switch™ Legacy Edition",gpu;online-broken,ingame,2023-12-11 22:10:19 +0100216014472000,"FIFA 22 Nintendo Switch™ Legacy Edition",gpu,ingame,2024-03-02 14:13:48 +01006980127F0000,"Fight Crab",online-broken;ldn-untested,playable,2022-10-05 10:24:04 +010047E010B3E000,"Fight of Animals",online,playable,2020-10-15 15:08:28 +0100C7D00E730000,"Fight'N Rage",,playable,2020-06-16 23:35:19 +0100D02014048000,"FIGHTING EX LAYER ANOTHER DASH",online-broken;UE4,playable,2024-04-07 10:22:33 +0100118009C68000,"Figment",nvdec,playable,2021-01-27 19:36:05 +010095600AA36000,"Fill-a-Pix: Phil's Epic Adventure",,playable,2020-12-22 13:48:22 +0100C3A00BB76000,"Fimbul",nvdec,playable,2022-07-26 13:31:47 +0100C8200E942000,"Fin and the Ancient Mystery",nvdec,playable,2020-12-17 16:40:39 +01000EA014150000,"FINAL FANTASY",crash,nothing,2024-09-05 20:55:30 +01006B7014156000,"FINAL FANTASY II",crash,nothing,2024-04-13 19:18:04 +01006F000B056000,"FINAL FANTASY IX",audout;nvdec,playable,2021-06-05 11:35:00 +0100AA201415C000,"FINAL FANTASY V",,playable,2023-04-26 01:11:55 +0100A5B00BDC6000,"FINAL FANTASY VII",,playable,2022-12-09 17:03:30 +01008B900DC0A000,"FINAL FANTASY VIII Remastered",nvdec,playable,2023-02-15 10:57:48 +0100BC300CB48000,"FINAL FANTASY X/X-2 HD Remaster",gpu,ingame,2022-08-16 20:29:26 +0100EB100AB42000,"FINAL FANTASY XII THE ZODIAC AGE",opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54 +010068F00AA78000,"FINAL FANTASY XV POCKET EDITION HD",,playable,2021-01-05 17:52:08 +0100CE4010AAC000,"FINAL FANTASY® CRYSTAL CHRONICLES™ Remastered Edition",,playable,2023-04-02 23:39:12 +01001BA00AE4E000,"Final Light, The Prison",,playable,2020-07-31 21:48:44 +0100FF100FB68000,"Finding Teddy 2 : Definitive Edition",gpu,ingame,2024-04-19 16:51:33 +0100F4E013AAE000,"Fire & Water",,playable,2020-12-15 15:43:20 +0100F15003E64000,"Fire Emblem Warriors",nvdec,playable,2023-05-10 01:53:10 +010071F0143EA000,"Fire Emblem Warriors: Three Hopes",gpu;nvdec,ingame,2024-05-01 07:07:42 +0100A6301214E000,"Fire Emblem™ Engage",amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26 +0100A12011CC8000,"Fire Emblem™: Shadow Dragon & the Blade of Light",,playable,2022-10-17 19:49:14 +010055D009F78000,"Fire Emblem™: Three Houses",online-broken,playable,2024-09-14 23:53:50 +010025C014798000,"Fire: Ungh’s Quest",nvdec,playable,2022-10-27 21:41:26 +0100434003C58000,"Firefighters – The Simulation",,playable,2021-02-19 13:32:05 +0100BB1009E50000,"Firefighters: Airport Fire Department",,playable,2021-02-15 19:17:00 +0100AC300919A000,"Firewatch",,playable,2021-06-03 10:56:38 +0100BA9012B36000,"Firework",,playable,2020-12-04 20:20:09 +0100DEB00ACE2000,"Fishing Star World Tour",,playable,2022-09-13 19:08:51 +010069800D292000,"Fishing Universe Simulator",,playable,2021-04-15 14:00:43 +0100807008868000,"Fit Boxing",,playable,2022-07-26 19:24:55 +0100E7300AAD4000,"Fitness Boxing",,playable,2021-04-14 20:33:33 +0100073011382000,"Fitness Boxing 2: Rhythm & Exercise",crash,ingame,2021-04-14 20:40:48 +0100C7E0134BE000,"Five Dates",nvdec,playable,2020-12-11 15:17:11 +0100B6200D8D2000,"Five Nights at Freddy's",,playable,2022-09-13 19:26:36 +01004EB00E43A000,"Five Nights at Freddy's 2",,playable,2023-02-08 15:48:24 +010056100E43C000,"Five Nights at Freddy's 3",,playable,2022-09-13 20:58:07 +010083800E43E000,"Five Nights at Freddy's 4",,playable,2023-08-19 07:28:03 +0100F7901118C000,"Five Nights at Freddy's: Help Wanted",UE4,playable,2022-09-29 12:40:09 +01009060193C4000,"Five Nights at Freddy's: Security Breach",gpu;crash;mac-bug,ingame,2023-04-23 22:33:28 +01003B200E440000,"Five Nights at Freddy's: Sister Location",,playable,2023-10-06 09:00:58 +010038200E088000,"Flan",crash;regression,ingame,2021-11-17 07:39:28 +01000A0004C50000,"FLASHBACK™",nvdec,playable,2020-05-14 13:57:29 +0100C53004C52000,"Flat Heroes",gpu,ingame,2022-07-26 19:37:37 +0100B54012798000,"Flatland: Prologue",,playable,2020-12-11 20:41:12 +0100307004B4C000,"Flinthook",online,playable,2021-03-25 20:42:29 +010095A004040000,"Flip Wars",services;ldn-untested,ingame,2022-05-02 15:39:18 +01009FB002B2E000,"Flipping Death",,playable,2021-02-17 16:12:30 +0100D1700ACFC000,"Flood of Light",,playable,2020-05-15 14:15:25 +0100DF9005E7A000,"Floor Kids",nvdec,playable,2024-08-18 19:38:49 +010040700E8FC000,"Florence",,playable,2020-09-05 01:22:30 +0100F5D00CD58000,"Flowlines VS",,playable,2020-12-17 17:01:53 +010039C00E2CE000,"Flux8",nvdec,playable,2020-06-19 20:55:11 +0100EDA00BBBE000,"Fly O'Clock",,playable,2020-05-17 13:39:52 +0100FC300F4A4000,"Fly Punch Boom!",online,playable,2020-06-21 12:06:11 +0100419013A8A000,"Flying Hero X",crash,menus,2021-11-17 07:46:58 +010056000BA1C000,"Fobia",,playable,2020-12-14 21:05:23 +0100F3900D0F0000,"Food Truck Tycoon",,playable,2022-10-17 20:15:55 +01007CF013152000,"Football Manager 2021 Touch",gpu,ingame,2022-10-17 20:08:23 +0100EDC01990E000,"Football Manager 2023 Touch",gpu,ingame,2023-08-01 03:40:53 +010097F0099B4000,"Football Manager Touch 2018",,playable,2022-07-26 20:17:56 +010069400B6BE000,"For The King",nvdec,playable,2021-02-15 18:51:44 +01001D200BCC4000,"Forager",crash,menus,2021-11-24 07:10:17 +0100AE001256E000,"FORECLOSED",crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12 +010044B00E70A000,"Foregone",deadlock,ingame,2020-12-17 15:26:53 +010059E00B93C000,"Forgotton Anne",nvdec,playable,2021-02-15 18:28:07 +01008EA00405C000,"forma.8",nvdec,playable,2020-11-15 01:04:32 +010025400AECE000,"Fortnite",services-horizon,nothing,2024-04-06 18:23:25 +0100AAE01E39C000,"Fortress Challenge - Fort Boyard",nvdec;slow,playable,2020-05-15 13:22:53 +0100CA500756C000,"Fossil Hunters",nvdec,playable,2022-07-27 11:37:20 +01008A100A028000,"FOX n FORESTS",,playable,2021-02-16 14:27:49 +0100D2501001A000,"FoxyLand",,playable,2020-07-29 20:55:20 +01000AC010024000,"FoxyLand 2",,playable,2020-08-06 14:41:30 +01004200099F2000,"Fractured Minds",,playable,2022-09-13 21:21:40 +0100F1A00A5DC000,"FRAMED Collection",nvdec,playable,2022-07-27 11:48:15 +0100AC40108D8000,"Fred3ric",,playable,2021-04-15 13:30:31 +01000490067AE000,"Frederic 2: Evil Strikes Back",,playable,2020-07-23 16:44:37 +01005B1006988000,"Frederic: Resurrection of Music",nvdec,playable,2020-07-23 16:59:53 +010082B00EE50000,"Freedom Finger",nvdec,playable,2021-06-09 19:31:30 +0100EB800B614000,"Freedom Planet",,playable,2020-05-14 12:23:06 +010003F00BD48000,"Friday the 13th: Killer Puzzle",,playable,2021-01-28 01:33:38 +010092A00C4B6000,"Friday the 13th: The Game Ultimate Slasher Edition",nvdec;online-broken;UE4,playable,2022-09-06 17:33:27 +0100F200178F4000,"FRONT MISSION 1st: Remake",,playable,2023-06-09 07:44:24 +0100861012474000,"Frontline Zed",,playable,2020-10-03 12:55:59 +0100B5300B49A000,"Frost",,playable,2022-07-27 12:00:36 +010038A007AA4000,"FruitFall Crush",,playable,2020-10-20 11:33:33 +01008D800AE4A000,"FullBlast",,playable,2020-05-19 10:34:13 +010002F00CC20000,"FUN! FUN! Animal Park",,playable,2021-04-14 17:08:52 +0100A8F00B3D0000,"FunBox Party",,playable,2020-05-15 12:07:02 +0100E7B00BF24000,"Funghi Explosion",,playable,2020-11-23 14:17:41 +01008E10130F8000,"Funimation",gpu,boots,2021-04-08 13:08:17 +0100EA501033C000,"Funny Bunny Adventures",,playable,2020-08-05 13:46:56 +01000EC00AF98000,"Furi",,playable,2022-07-27 12:21:20 +0100A6B00D4EC000,"Furwind",,playable,2021-02-19 19:44:08 +0100ECE00C0C4000,"Fury Unleashed",crash;services,ingame,2020-10-18 11:52:40 +010070000ED9E000,"Fury Unleashed Demo",,playable,2020-10-08 20:09:21 +0100E1F013674000,"FUSER™",nvdec;UE4,playable,2022-10-17 20:58:32 +,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec,ingame,2021-01-20 15:30:02 +01003C300B274000,"Futari de! Nyanko Daisensou",,playable,2024-01-05 22:26:52 +010055801134E000,"FUZE Player",online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53 +0100EAD007E98000,"FUZE4 Nintendo Switch",vulkan-backend-bug,playable,2022-09-06 19:25:01 +010067600F1A0000,"FuzzBall",crash,nothing,2021-03-29 20:13:21 +,"G-MODE Archives 06 The strongest ever Julia Miyamoto",,playable,2020-10-15 13:06:26 +0100EB10108EA000,"G.I. Joe: Operation Blackout",UE4;crash,boots,2020-11-21 12:37:44 +010048600B14E000,"Gal Metal",,playable,2022-07-27 20:57:48 +010024700901A000,"Gal*Gun 2",nvdec;UE4,playable,2022-07-27 12:45:37 +0100047013378000,"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",nvdec,playable,2022-10-17 23:50:46 +0100C9800A454000,"GALAK-Z: Variant S",online-broken,boots,2022-07-29 11:59:12 +0100C62011050000,"Game Boy™ – Nintendo Switch Online",,playable,2023-03-21 12:43:48 +010012F017576000,"Game Boy™ Advance – Nintendo Switch Online",,playable,2023-02-16 20:38:15 +0100FA5010788000,"Game Builder Garage™",,ingame,2024-04-20 21:46:22 +0100AF700BCD2000,"Game Dev Story",,playable,2020-05-20 00:00:38 +01006BD00F8C0000,"Game Doraemon Nobita no Shin Kyoryu",gpu,ingame,2023-02-27 02:03:28 +01000FA00A4E4000,"Garage",,playable,2020-05-19 20:59:53 +010061E00E8BE000,"Garfield Kart Furious Racing",ldn-works;loader-allocator,playable,2022-09-13 21:40:25 +0100EA001069E000,"Gates Of Hell",slow,playable,2020-10-22 12:44:26 +010025500C098000,"Gato Roboto",,playable,2023-01-20 15:04:11 +010065E003FD8000,"Gear.Club Unlimited",,playable,2021-06-08 13:03:19 +010072900AFF0000,"Gear.Club Unlimited 2",nvdec;online-broken,playable,2022-07-29 12:52:16 +01000F000D9F0000,"Geki Yaba Runner Anniversary Edition",,playable,2021-02-19 18:59:07 +010052A00942A000,"Gekido Kintaro's Revenge",,playable,2020-10-27 12:44:05 +01009D000AF3A000,"Gelly Break Deluxe",UE4,playable,2021-03-03 16:04:02 +01001A4008192000,"Gem Smashers",nvdec,playable,2021-06-08 13:40:51 +010014901144C000,"Genetic Disaster",,playable,2020-06-19 21:41:12 +0100D7E0110B2000,"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",32-bit,playable,2022-06-06 00:42:09 +010000300C79C000,"GensokyoDefenders",online-broken;UE4,playable,2022-07-29 13:48:12 +0100AC600EB4C000,"Gensou Rougoku no Kaleidscope",crash,menus,2021-11-24 08:45:07 +01007FC012FD4000,"Georifters",UE4;crash;nvdec,menus,2020-12-04 22:30:50 +010058F010296000,"GERRRMS",,playable,2020-08-15 11:32:52 +01006F30129F8000,"Get 10 quest",,playable,2020-08-03 12:48:39 +0100B5B00E77C000,"Get Over Here",,playable,2022-10-28 11:53:52 +0100EEB005ACC000,"Ghost 1.0",,playable,2021-02-19 20:48:47 +010063200C588000,"Ghost Blade HD",online-broken,playable,2022-09-13 21:51:21 +010057500E744000,"Ghost Grab 3000",,playable,2020-07-11 18:09:52 +010094C00E180000,"Ghost Parade",,playable,2020-07-14 00:43:54 +01004B301108C000,"Ghost Sweeper",,playable,2022-10-10 12:45:36 +010029B018432000,"Ghost Trick: Phantom Detective",,playable,2023-08-23 14:50:12 +010008A00F632000,"Ghostbusters: The Video Game Remastered",nvdec,playable,2021-09-17 07:26:57 +010090F012916000,"Ghostrunner",UE4;crash;gpu;nvdec,ingame,2020-12-17 13:01:59 +0100D6200F2BA000,"Ghosts 'n Goblins Resurrection",,playable,2023-05-09 12:40:41 +01003830092B8000,"Giana Sisters: Twisted Dreams - Owltimate Edition",,playable,2022-07-29 14:06:12 +0100D95012C0A000,"Gibbous - A Cthulhu Adventure",nvdec,playable,2022-10-10 12:57:17 +010045F00BFC2000,"GIGA WRECKER ALT.",,playable,2022-07-29 14:13:54 +01002C400E526000,"Gigantosaurus The Game",UE4,playable,2022-09-27 21:20:00 +0100C50007070000,"Ginger: Beyond the Crystal",,playable,2021-02-17 16:27:00 +01006BA013990000,"Girabox",,playable,2020-12-12 13:55:05 +01007E90116CE000,"Giraffe and Annika",UE4;crash,ingame,2020-12-04 22:41:57 +01006DD00CC96000,"Girls und Panzer Dream Tank Match DX",ldn-untested,playable,2022-09-12 16:07:11 +01005CB009E20000,"Glaive: Brick Breaker",,playable,2020-05-20 12:15:59 +0100B6F01227C000,"Glitch's Trip",,playable,2020-12-17 16:00:57 +0100EB501130E000,"Glyph",,playable,2021-02-08 19:56:51 +0100EB8011B0C000,"Gnome More War",,playable,2020-12-17 16:33:07 +010008D00CCEC000,"Gnomes Garden 2",,playable,2021-02-19 20:08:13 +010036C00D0D6000,"Gnomes Garden: Lost King",deadlock,menus,2021-11-18 11:14:03 +01008EF013A7C000,"Gnosia",,playable,2021-04-05 17:20:30 +01000C800FADC000,"Go All Out!",online-broken,playable,2022-09-21 19:16:34 +010055A0161F4000,"Go Rally",gpu,ingame,2023-08-16 21:18:23 +0100C1800A9B6000,"Go Vacation™",nvdec;ldn-works,playable,2024-05-13 19:28:53 +0100E6300F854000,"Go! Fish Go!",,playable,2020-07-27 13:52:28 +010032600C8CE000,"Goat Simulator: The GOATY",32-bit,playable,2022-07-29 21:02:33 +01001C700873E000,"GOD EATER 3",gpu;nvdec,ingame,2022-07-29 21:33:21 +0100F3D00B032000,"GOD WARS The Complete Legend",nvdec,playable,2020-05-19 14:37:50 +0100CFA0111C8000,"Gods Will Fall",,playable,2021-02-08 16:49:59 +0100D82009024000,"Goetia",,playable,2020-05-19 12:55:39 +01004D501113C000,"Going Under",deadlock;nvdec,ingame,2020-12-11 22:29:46 +0100126006EF0000,"GOKEN",,playable,2020-08-05 20:22:38 +010013800F0A4000,"Golazo!",,playable,2022-09-13 21:58:37 +01003C000D84C000,"Golem Gates",crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11 +0100779004172000,"Golf Story",,playable,2020-05-14 14:56:17 +01006FB00EBE0000,"Golf With Your Friends",online-broken,playable,2022-09-29 12:55:11 +0100EEC00AA6E000,"Gone Home",,playable,2022-08-01 11:14:20 +01007C2002B3C000,"GoNNER",,playable,2020-05-19 12:05:02 +0100B0500FE4E000,"Good Job!™",,playable,2021-03-02 13:15:55 +01003AD0123A2000,"Good Night, Knight",crash,nothing,2023-07-30 23:38:13 +0100F610122F6000,"Good Pizza, Great Pizza",,playable,2020-12-04 22:59:18 +010014C0100C6000,"Goosebumps Dead of Night",gpu;nvdec,ingame,2020-12-10 20:02:16 +0100B8000B190000,"Goosebumps The Game",,playable,2020-05-19 11:56:52 +0100F2A005C98000,"Gorogoa",,playable,2022-08-01 11:55:08 +01000C7003FE8000,"GORSD",,playable,2020-12-04 22:15:21 +0100E8D007E16000,"Gotcha Racing 2nd",,playable,2020-07-23 17:14:04 +01001010121DE000,"Gothic Murder: Adventure That Changes Destiny",deadlock;crash,ingame,2022-09-30 23:16:53 +01003FF009E60000,"Grab the Bottle",,playable,2020-07-14 17:06:41 +01004D10020F2000,"Graceful Explosion Machine",,playable,2020-05-19 20:36:55 +010038D00EC88000,"Grand Brix Shooter",slow,playable,2020-06-24 13:23:54 +010038100D436000,"Grand Guilds",UE4;nvdec,playable,2021-04-26 12:49:05 +0100BE600D07A000,"Grand Prix Story",,playable,2022-08-01 12:42:23 +05B1D2ABD3D30000,"Grand Theft Auto 3",services;crash;homebrew,nothing,2023-05-01 22:01:58 +0100E0600BBC8000,"GRANDIA HD Collection",crash,boots,2024-08-19 04:29:48 +010028200E132000,"Grass Cutter - Mutated Lawns",slow,ingame,2020-05-19 18:27:42 +010074E0099FA000,"Grave Danger",,playable,2020-05-18 17:41:28 +010054A013E0C000,"GraviFire",,playable,2021-04-05 17:13:32 +01002C2011828000,"Gravity Rider Zero",gpu;vulkan-backend-bug,ingame,2022-09-29 13:56:13 +0100BD800DFA6000,"Greedroid",,playable,2020-12-14 11:14:32 +010068D00AE68000,"GREEN",,playable,2022-08-01 12:54:15 +0100CBB0070EE000,"Green Game: TimeSwapper",nvdec,playable,2021-02-19 18:51:55 +0100DFE00F002000,"GREEN The Life Algorithm",,playable,2022-09-27 21:37:13 +0100DA7013792000,"Grey Skies: A War of the Worlds Story",UE4,playable,2022-10-24 11:13:59 +010031200981C000,"Grid Mania",,playable,2020-05-19 14:11:05 +0100197008B52000,"GRIDD: Retroenhanced",,playable,2020-05-20 11:32:40 +0100DC800A602000,"GRID™ Autosport",nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45 +0100B7900B024000,"Grim Fandango Remastered",nvdec,playable,2022-08-01 13:55:58 +010078E012D80000,"Grim Legends 2: Song of the Dark Swan",nvdec,playable,2022-10-18 12:58:45 +010009F011F90000,"Grim Legends: The Forsaken Bride",nvdec,playable,2022-10-18 13:14:06 +01001E200F2F8000,"Grimshade",,playable,2022-10-02 12:44:20 +0100538012496000,"Grindstone",,playable,2023-02-08 15:54:06 +0100459009A2A000,"GRIP",nvdec;online-broken;UE4,playable,2022-08-01 15:00:22 +0100E1700C31C000,"GRIS",nvdec,playable,2021-06-03 13:33:44 +01009D7011B02000,"GRISAIA PHANTOM TRIGGER 01&02",nvdec,playable,2022-12-04 21:16:06 +01005250123B8000,"GRISAIA PHANTOM TRIGGER 03",audout,playable,2021-01-31 12:30:47 +0100D970123BA000,"GRISAIA PHANTOM TRIGGER 04",audout,playable,2021-01-31 12:40:37 +01002330123BC000,"GRISAIA PHANTOM TRIGGER 05",audout;nvdec,playable,2021-01-31 12:49:59 +0100CAF013AE6000,"GRISAIA PHANTOM TRIGGER 5.5",audout;nvdec,playable,2021-01-31 12:59:44 +010091300FFA0000,"Grizzland",gpu,ingame,2024-07-11 16:28:34 +0100EB500D92E000,"GROOVE COASTER WAI WAI PARTY!!!!",nvdec;ldn-broken,playable,2021-11-06 14:54:27 +01007E100456C000,"Guacamelee! 2",,playable,2020-05-15 14:56:59 +0100BAE00B470000,"Guacamelee! Super Turbo Championship Edition",,playable,2020-05-13 23:44:18 +010089900C9FA000,"Guess the Character",,playable,2020-05-20 13:14:19 +01005DC00D80C000,"Guess the word",,playable,2020-07-26 21:34:25 +01006F80082E4000,"GUILTY GEAR XX ACCENT CORE PLUS R",nvdec,playable,2021-01-13 09:28:33 +01003C6008940000,"GUNBIRD for Nintendo Switch",32-bit,playable,2021-06-04 19:16:01 +0100BCB00AE98000,"GUNBIRD2 for Nintendo Switch",,playable,2020-10-10 14:41:16 +,"Gunka o haita neko",gpu;nvdec,ingame,2020-08-25 12:37:56 +010061000D318000,"Gunman Clive HD Collection",,playable,2020-10-09 12:17:35 +01006D4003BCE000,"Guns, Gore and Cannoli 2",online,playable,2021-01-06 18:43:59 +01008C800E654000,"Gunvolt Chronicles Luminous Avenger iX - Retail Version",,playable,2020-06-16 22:47:07 +0100763015C2E000,"Gunvolt Chronicles: Luminous Avenger iX 2",crash;Needs Update,nothing,2022-04-29 15:34:34 +01002C8018554000,"Gurimugurimoa OnceMore Demo",,playable,2022-07-29 22:07:31 +0100AC601DCA8000,"GYLT",crash,ingame,2024-03-18 20:16:51 +0100822012D76000,"HAAK",gpu,ingame,2023-02-19 14:31:05 +01007E100EFA8000,"Habroxia",,playable,2020-06-16 23:04:42 +0100535012974000,"Hades",vulkan,playable,2022-10-05 10:45:21 +0100618010D76000,"Hakoniwa Explorer Plus",slow,ingame,2021-02-19 16:56:19 +0100E0D00C336000,"Halloween Pinball",,playable,2021-01-12 16:00:46 +01006FF014152000,"Hamidashi Creative",gpu,ingame,2021-12-19 15:30:51 +01003B9007E86000,"Hammerwatch",online-broken;ldn-broken,playable,2022-08-01 16:28:46 +01003620068EA000,"Hand of Fate 2",,playable,2022-08-01 15:44:16 +0100973011358000,"Hang The Kings",,playable,2020-07-28 22:56:59 +010066C018E50000,"Happy Animals Mini Golf",gpu,ingame,2022-12-04 19:24:28 +0100ECE00D13E000,"Hard West",regression,nothing,2022-02-09 07:45:56 +0100D55011D60000,"Hardcore Maze Cube",,playable,2020-12-04 20:01:24 +01002F0011DD4000,"HARDCORE MECHA",slow,playable,2020-11-01 15:06:33 +01000C90117FA000,"HardCube",,playable,2021-05-05 18:33:03 +0100BB600C096000,"Hardway Party",,playable,2020-07-26 12:35:07 +0100D0500AD30000,"Harvest Life",,playable,2022-08-01 16:51:45 +010016B010FDE000,"Harvest Moon®: One World",,playable,2023-05-26 09:17:19 +0100A280187BC000,"Harvestella",UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11 +0100E29001298000,"Has-Been Heroes",,playable,2021-01-13 13:31:48 +01001CC00FA1A000,"Hatsune Miku: Project DIVA Mega Mix",audio;online-broken,playable,2024-01-07 23:12:57 +01009E6014F18000,"Haunted Dawn: The Zombie Apocalypse",,playable,2022-10-28 12:31:51 +010023F008204000,"Haunted Dungeons:Hyakki Castle",,playable,2020-08-12 14:21:48 +0100E2600DBAA000,"Haven",,playable,2021-03-24 11:52:41 +0100EA900FB2C000,"Hayfever",loader-allocator,playable,2022-09-22 17:35:41 +0100EFE00E1DC000,"Headliner: NoviNews",online,playable,2021-03-01 11:36:00 +0100A8200C372000,"Headsnatchers",UE4;crash,menus,2020-07-14 13:29:14 +010067400EA5C000,"Headspun",,playable,2020-07-31 19:46:47 +0100D12008EE4000,"Heart&Slash",,playable,2021-01-13 20:56:32 +010059100D928000,"Heaven Dust",,playable,2020-05-17 14:02:41 +0100FD901000C000,"Heaven's Vault",crash,ingame,2021-02-08 18:22:01 +0100B9C012B66000,"Helheim Hassle",,playable,2020-10-14 11:38:36 +0100E4300C278000,"Hell is Other Demons",,playable,2021-01-13 13:23:02 +01000938017E5C00,"Hell Pie0",nvdec;UE4,playable,2022-11-03 16:48:46 +0100A4600E27A000,"Hell Warders",online,playable,2021-02-27 02:31:03 +010044500CF8E000,"Hellblade: Senua's Sacrifice",gpu;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50 +010087D0084A8000,"Hello Kitty Kruisers With Sanrio Friends",nvdec,playable,2021-06-04 19:08:46 +0100FAA00B168000,"Hello Neighbor",UE4,playable,2022-08-01 21:32:23 +010092B00C4F0000,"Hello Neighbor Hide and Seek",UE4;gpu;slow,ingame,2020-10-24 10:59:57 +010024600C794000,"Hellpoint",,menus,2021-11-26 13:24:20 +0100BEA00E63A000,"Hero Express",nvdec,playable,2020-08-06 13:23:43 +010077D01094C000,"Hero-U: Rogue to Redemption",nvdec,playable,2021-03-24 11:40:01 +0100D2B00BC54000,"Heroes of Hammerwatch - Ultimate Edition",,playable,2022-08-01 18:30:21 +01001B70080F0000,"HEROINE ANTHEM ZERO episode 1",vulkan-backend-bug,playable,2022-08-01 22:02:36 +010057300B0DC000,"Heroki",gpu,ingame,2023-07-30 19:30:01 +0100C2700E338000,"Heroland",,playable,2020-08-05 15:35:39 +01007AC00E012000,"HexaGravity",,playable,2021-05-28 13:47:48 +01004E800F03C000,"Hidden",slow,ingame,2022-10-05 10:56:53 +0100F6A00A684000,"Higurashi no Naku Koro ni Hō",audio,ingame,2021-09-18 14:40:28 +0100F8D0129F4000,"Himehibi 1 gakki - Princess Days",crash,nothing,2021-11-03 08:34:19 +0100F3D008436000,"Hiragana Pixel Party",,playable,2021-01-14 08:36:50 +01004990132AC000,"HITMAN 3 - Cloud Version",Needs Update;crash;services,nothing,2021-04-18 22:35:07 +010083A018262000,"Hitman: Blood Money — Reprisal",deadlock,ingame,2024-09-28 16:28:50 +01004B100A5CC000,"Hob: The Definitive Edition",,playable,2021-01-13 09:39:19 +0100F7300ED2C000,"Hoggy2",,playable,2022-10-10 13:53:35 +0100F7E00C70E000,"Hogwarts Legacy",slow,ingame,2024-09-03 19:53:58 +0100633007D48000,"Hollow Knight",nvdec,playable,2023-01-16 15:44:56 +0100F2100061E800,"Hollow0",UE4;gpu,ingame,2021-03-03 23:42:56 +0100342009E16000,"Holy Potatoes! What The Hell?!",,playable,2020-07-03 10:48:56 +010071B00C904000,"HoPiKo",,playable,2021-01-13 20:12:38 +010087800EE5A000,"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",crash,boots,2023-02-19 00:51:21 +010086D011EB8000,"Horace",,playable,2022-10-10 14:03:50 +0100001019F6E000,"Horizon Chase 2",deadlock;slow;crash;UE4,ingame,2024-08-19 04:24:06 +01009EA00B714000,"Horizon Chase Turbo",,playable,2021-02-19 19:40:56 +0100E4200FA82000,"Horror Pinball Bundle",crash,menus,2022-09-13 22:15:34 +0100017007980000,"Hotel Transylvania 3 Monsters Overboard",nvdec,playable,2021-01-27 18:55:31 +0100D0E00E51E000,"Hotline Miami Collection",nvdec,playable,2022-09-09 16:41:19 +0100BDE008218000,"Hotshot Racing",gpu;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17 +0100CAE00EB02000,"House Flipper",,playable,2021-06-16 18:28:32 +0100F6800910A000,"Hover",online-broken,playable,2022-09-20 12:54:46 +0100A66003384000,"Hulu",online-broken,boots,2022-12-09 10:05:00 +0100701001D92000,"Human Resource Machine",32-bit,playable,2020-12-17 21:47:09 +01000CA004DCA000,"Human: Fall Flat",,playable,2021-01-13 18:36:05 +0100E1A00AF40000,"Hungry Shark® World",,playable,2021-01-13 18:26:08 +0100EBA004726000,"Huntdown",,playable,2021-04-05 16:59:54 +010068000CAC0000,"Hunter's Legacy: Purrfect Edition",,playable,2022-08-02 10:33:31 +0100C460040EA000,"Hunting Simulator",UE4,playable,2022-08-02 10:54:08 +010061F010C3A000,"Hunting Simulator 2",UE4,playable,2022-10-10 14:25:51 +0100B3300B4AA000,"Hyper Jam",UE4;crash,boots,2020-12-15 22:52:11 +01003B200B372000,"Hyper Light Drifter - Special Edition",vulkan-backend-bug,playable,2023-01-13 15:44:48 +01006C500A29C000,"HyperBrawl Tournament",crash;services,boots,2020-12-04 23:03:27 +0100A8B00F0B4000,"HYPERCHARGE Unboxed",nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39 +010061400ED90000,"HyperParasite",nvdec;UE4,playable,2022-09-27 22:05:44 +0100959010466000,"Hypnospace Outlaw",nvdec,ingame,2023-08-02 22:46:49 +01002B00111A2000,"Hyrule Warriors: Age of Calamity",gpu;deadlock;slow;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00 +0100A2C01320E000,"Hyrule Warriors: Age of Calamity - Demo Version",slow,playable,2022-10-10 17:37:41 +0100AE00096EA000,"Hyrule Warriors: Definitive Edition",services-horizon;nvdec,ingame,2024-06-16 10:34:05 +0100849000BDA000,"I Am Setsuna",,playable,2021-11-28 11:06:11 +01001860140B0000,"I Saw Black Clouds",nvdec,playable,2021-04-19 17:22:16 +0100429006A06000,"I, Zombie",,playable,2021-01-13 14:53:44 +01004E5007E92000,"Ice Age Scrat's Nutty Adventure!",nvdec,playable,2022-09-13 22:22:29 +010053700A25A000,"Ice Cream Surfer",,playable,2020-07-29 12:04:07 +0100954014718000,"Ice Station Z",crash,menus,2021-11-21 20:02:15 +0100BE9007E7E000,"ICEY",,playable,2021-01-14 16:16:04 +0100BC60099FE000,"Iconoclasts",,playable,2021-08-30 21:11:04 +01001E700EB28000,"Idle Champions of the Forgotten Realms",online,boots,2020-12-17 18:24:57 +01002EC014BCA000,"IdolDays",gpu;crash,ingame,2021-12-19 15:31:28 +01006550129C6000,"If Found...",,playable,2020-12-11 13:43:14 +01001AC00ED72000,"If My Heart Had Wings",,playable,2022-09-29 14:54:57 +01009F20086A0000,"Ikaruga",,playable,2023-04-06 15:00:02 +010040900AF46000,"Ikenfell",,playable,2021-06-16 17:18:44 +01007BC00E55A000,"Immortal Planet",,playable,2022-09-20 13:40:43 +010079501025C000,"Immortal Realms: Vampire Wars",nvdec,playable,2021-06-17 17:41:46 +01000F400435A000,"Immortal Redneck",nvdec,playable,2021-01-27 18:36:28 +01004A600EC0A000,"Immortals Fenyx Rising™",gpu;crash,menus,2023-02-24 16:19:55 +0100737003190000,"IMPLOSION",nvdec,playable,2021-12-12 03:52:13 +0100A760129A0000,"In rays of the Light",,playable,2021-04-07 15:18:07 +0100A2101107C000,"Indie Puzzle Bundle Vol 1",,playable,2022-09-27 22:23:21 +010002A00CD68000,"Indiecalypse",nvdec,playable,2020-06-11 20:19:09 +01001D3003FDE000,"Indivisible",nvdec,playable,2022-09-29 15:20:57 +01002BD00F626000,"Inertial Drift",online-broken,playable,2022-10-11 12:22:19 +0100D4300A4CA000,"Infernium",UE4;regression,nothing,2021-01-13 16:36:07 +010039C001296000,"Infinite Minigolf",online,playable,2020-09-29 12:26:25 +01001CB00EFD6000,"Infliction: Extended Cut",nvdec;UE4,playable,2022-10-02 13:15:55 +0100F1401161E000,"INMOST",,playable,2022-10-05 11:27:40 +0100F200049C8000,"InnerSpace",,playable,2021-01-13 19:36:14 +0100D2D009028000,"INSIDE",,playable,2021-12-25 20:24:56 +0100EC7012D34000,"Inside Grass: A little adventure",,playable,2020-10-15 15:26:27 +010099700D750000,"Instant Sports",,playable,2022-09-09 12:59:40 +010099A011A46000,"Instant Sports Summer Games",gpu,menus,2020-09-02 13:39:28 +010031B0145B8000,"INSTANT SPORTS TENNIS",,playable,2022-10-28 16:42:17 +010041501005E000,"Interrogation: You will be deceived",,playable,2022-10-05 11:40:10 +01000F700DECE000,"Into the Dead 2",nvdec,playable,2022-09-14 12:36:14 +01001D0003B96000,"INVERSUS Deluxe",online-broken,playable,2022-08-02 14:35:36 +0100C5B00FADE000,"Invisible Fist",,playable,2020-08-08 13:25:52 +010031B00C48C000,"Invisible, Inc. Nintendo Switch Edition",crash,nothing,2021-01-29 16:28:13 +01005F400E644000,"Invisigun Reloaded",gpu;online,ingame,2021-06-10 12:13:24 +010041C00D086000,"Ion Fury",vulkan-backend-bug,ingame,2022-08-07 08:27:51 +010095C016C14000,"Iridium",,playable,2022-08-05 23:19:53 +0100AD300B786000,"Iris School of Wizardry -Vinculum Hearts-",,playable,2022-12-05 13:11:15 +0100945012168000,"Iris.Fall",nvdec,playable,2022-10-18 13:40:22 +01005270118D6000,"Iron Wings",slow,ingame,2022-08-07 08:32:57 +01004DB003E6A000,"IRONCAST",,playable,2021-01-13 13:54:29 +0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",,playable,2021-06-04 20:12:37 +010063E0104BE000,"Is It Wrong to Try to Pick Up Girls in a Dungeon? Familia Myth Infinite Combate",,playable,2020-08-31 13:52:21 +0100F06013710000,"ISLAND",,playable,2021-05-06 15:11:47 +010077900440A000,"Island Flight Simulator",,playable,2021-06-04 19:42:46 +0100A2600FCA0000,"Island Saver",nvdec,playable,2020-10-23 22:07:02 +010065200D192000,"Isoland",,playable,2020-07-26 13:48:16 +0100F5600D194000,"Isoland 2 - Ashes of Time",,playable,2020-07-26 14:29:05 +010001F0145A8000,"Isolomus",services,boots,2021-11-03 07:48:21 +010068700C70A000,"ITTA",,playable,2021-06-07 03:15:52 +01004070022F0000,"Ittle Dew 2+",,playable,2020-11-17 11:44:32 +0100DEB00F12A000,"IxSHE Tell",nvdec,playable,2022-12-02 18:00:42 +0100D8E00C874000,"izneo",online-broken,menus,2022-08-06 15:56:23 +0100CD5008D9E000,"James Pond Codename Robocod",,playable,2021-01-13 09:48:45 +01005F4010AF0000,"Japanese Rail Sim: Journey to Kyoto",nvdec,playable,2020-07-29 17:14:21 +010002D00EDD0000,"JDM Racing",,playable,2020-08-03 17:02:37 +0100C2700AEB8000,"Jenny LeClue - Detectivu",crash,nothing,2020-12-15 21:07:07 +01006E400AE2A000,"Jeopardy!®",audout;nvdec;online,playable,2021-02-22 13:53:46 +0100E4900D266000,"Jet Kave Adventure",nvdec,playable,2022-09-09 14:50:39 +0100F3500C70C000,"Jet Lancer",gpu,ingame,2021-02-15 18:15:47 +0100A5A00AF26000,"Jettomero: Hero of the Universe",,playable,2022-08-02 14:46:43 +01008330134DA000,"Jiffy",gpu;opengl,ingame,2024-02-03 23:11:24 +01001F5006DF6000,"Jim is Moving Out!",deadlock,ingame,2020-06-03 22:05:19 +0100F4D00D8BE000,"Jinrui no Ninasama he",crash,ingame,2023-03-07 02:04:17 +010038D011F08000,"Jisei: The First Case HD",audio,playable,2022-10-05 11:43:33 +01007CE00C960000,"Job the Leprechaun",,playable,2020-06-05 12:10:06 +01007090104EC000,"John Wick Hex",,playable,2022-08-07 08:29:12 +01006E4003832000,"Johnny Turbo's Arcade: Bad Dudes",,playable,2020-12-10 12:30:56 +010069B002CDE000,"Johnny Turbo's Arcade: Gate Of Doom",,playable,2022-07-29 12:17:50 +010080D002CC6000,"Johnny Turbo's Arcade: Two Crude Dudes",,playable,2022-08-02 20:29:50 +0100D230069CC000,"Johnny Turbo's Arcade: Wizard Fire",,playable,2022-08-02 20:39:15 +01008120128C2000,"JoJos Bizarre Adventure All-Star Battle R",,playable,2022-12-03 10:45:10 +01008B60117EC000,"Journey to the Savage Planet",nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12 +0100C7600F654000,"Juicy Realm",,playable,2023-02-21 19:16:20 +0100B4D00C76E000,"JUMANJI: The Video Game",UE4;crash,boots,2020-07-12 13:52:25 +0100183010F12000,"JUMP FORCE - Deluxe Edition",nvdec;online-broken;UE4,playable,2023-10-01 15:56:05 +01003D601014A000,"Jump King",,playable,2020-06-09 10:12:39 +0100B9C012706000,"Jump Rope Challenge",services;crash;Needs Update,boots,2023-02-27 01:24:28 +0100D87009954000,"Jumping Joe & Friends",,playable,2021-01-13 17:09:42 +010069800D2B4000,"JUNK PLANET",,playable,2020-11-09 12:38:33 +0100CE100A826000,"Jurassic Pinball",,playable,2021-06-04 19:02:37 +010050A011344000,"Jurassic World Evolution: Complete Edition",cpu;crash,menus,2023-08-04 18:06:54 +0100BCE000598000,"Just Dance 2017®",online,playable,2021-03-05 09:46:01 +0100BEE017FC0000,"Just Dance 2023",,nothing,2023-06-05 16:44:54 +010075600AE96000,"Just Dance® 2019",gpu;online,ingame,2021-02-27 17:21:27 +0100DDB00DB38000,"Just Dance® 2020",,playable,2022-01-24 13:31:57 +0100EA6014BB8000,"Just Dance® 2022",gpu;services;crash;Needs Update,ingame,2022-10-28 11:01:53 +0100AC600CF0A000,"Just Die Already",UE4,playable,2022-12-13 13:37:50 +01002C301033E000,"Just Glide",,playable,2020-08-07 17:38:10 +0100830008426000,"Just Shapes & Beats",ldn-untested;nvdec,playable,2021-02-09 12:18:36 +010035A0044E8000,"JYDGE",,playable,2022-08-02 21:20:13 +0100D58012FC2000,"Kagamihara/Justice",crash,nothing,2021-06-21 16:41:29 +0100D5F00EC52000,"Kairobotica",,playable,2021-05-06 12:17:56 +0100BDC00A664000,"KAMEN RIDER CLIMAX SCRAMBLE",nvdec;ldn-untested,playable,2024-07-03 08:51:11 +0100A9801180E000,"KAMEN RIDER memory of heroez / Premium Sound Edition",,playable,2022-12-06 03:14:26 +010085300314E000,"KAMIKO",,playable,2020-05-13 12:48:57 +,"Kangokuto Mary Skelter Finale",audio;crash,ingame,2021-01-09 22:39:28 +01007FD00DB20000,"Katakoi Contrast - collection of branch -",nvdec,playable,2022-12-09 09:41:26 +0100D7000C2C6000,"Katamari Damacy REROLL",,playable,2022-08-02 21:35:05 +0100F9800EDFA000,"KATANA KAMI: A Way of the Samurai Story",slow,playable,2022-04-09 10:40:16 +010029600D56A000,"Katana ZERO",,playable,2022-08-26 08:09:09 +010038B00F142000,"Kaze and the Wild Masks",,playable,2021-04-19 17:11:03 +0100D7C01115E000,"Keen: One Girl Army",,playable,2020-12-14 23:19:52 +01008D400A584000,"Keep Talking and Nobody Explodes",,playable,2021-02-15 18:05:21 +01004B100BDA2000,"KEMONO FRIENDS PICROSS",,playable,2023-02-08 15:54:34 +0100A8200B15C000,"Kentucky Robo Chicken",,playable,2020-05-12 20:54:17 +0100327005C94000,"Kentucky Route Zero: TV Edition",,playable,2024-04-09 23:22:46 +0100DA200A09A000,"Kero Blaster",,playable,2020-05-12 20:42:52 +0100F680116A2000,"Kholat",UE4;nvdec,playable,2021-06-17 11:52:48 +0100C0A004C2C000,"Kid Tripp",crash,nothing,2020-10-15 07:41:23 +0100FB400D832000,"KILL la KILL -IF",,playable,2020-06-09 14:47:08 +010011B00910C000,"Kill The Bad Guy",,playable,2020-05-12 22:16:10 +0100F2900B3E2000,"Killer Queen Black",ldn-untested;online,playable,2021-04-08 12:46:18 +,"Kin'iro no Corda Octave",,playable,2020-09-22 13:23:12 +010089000F0E8000,"Kine",UE4,playable,2022-09-14 14:28:37 +0100E6B00FFBA000,"King Lucas",,playable,2022-09-21 19:43:23 +0100B1300783E000,"King Oddball",,playable,2020-05-13 13:47:57 +01008D80148C8000,"King of Seas",nvdec;UE4,playable,2022-10-28 18:29:41 +0100515014A94000,"King of Seas Demo",nvdec;UE4,playable,2022-10-28 18:09:31 +01005D2011EA8000,"KINGDOM HEARTS Melody of Memory",crash;nvdec,ingame,2021-03-03 17:34:12 +0100A280121F6000,"Kingdom Rush",32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00 +01005EF003FF2000,"Kingdom Two Crowns",,playable,2020-05-16 19:36:21 +0100BD9004AB6000,"Kingdom: New Lands",,playable,2022-08-02 21:48:50 +0100EF50132BE000,"Kingdoms of Amalur: Re-Reckoning",,playable,2023-08-10 13:05:08 +010091201605A000,"Kirby and the Forgotten Land (Demo version)",demo,playable,2022-08-21 21:03:01 +0100227010460000,"Kirby Fighters™ 2",ldn-works;online,playable,2021-06-17 13:06:39 +0100A8E016236000,"Kirby’s Dream Buffet™",crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44 +010091D01A57E000,"Kirby’s Return to Dream Land Deluxe - Demo",demo,playable,2023-02-18 17:21:55 +01006B601380E000,"Kirby’s Return to Dream Land™ Deluxe",,playable,2024-05-16 19:58:04 +01004D300C5AE000,"Kirby™ and the Forgotten Land",gpu,ingame,2024-03-11 17:11:21 +01007E3006DDA000,"Kirby™ Star Allies",nvdec,playable,2023-11-15 17:06:19 +0100F3A00F4CA000,"Kissed by the Baddest Bidder",gpu;nvdec,ingame,2022-12-04 20:57:11 +01000C900A136000,"Kitten Squad",nvdec,playable,2022-08-03 12:01:59 +010079D00C8AE000,"Klondike Solitaire",,playable,2020-12-13 16:17:27 +0100A6800DE70000,"Knight Squad",,playable,2020-08-09 16:54:51 +010024B00E1D6000,"Knight Squad 2",nvdec;online-broken,playable,2022-10-28 18:38:09 +0100D51006AAC000,"Knight Terrors",,playable,2020-05-13 13:09:22 +01005F8010D98000,"Knightin'+",,playable,2020-08-31 18:18:21 +010004400B22A000,"Knights of Pen & Paper 2 Deluxiest Edition",,playable,2020-05-13 14:07:00 +0100D3F008746000,"Knights of Pen and Paper +1 Deluxier Edition",,playable,2020-05-11 21:46:32 +010001A00A1F6000,"Knock-Knock",nvdec,playable,2021-02-01 20:03:19 +01009EF00DDB4000,"Knockout City™",services;online-broken,boots,2022-12-09 09:48:58 +0100C57019BA2000,"Koa and the Five Pirates of Mara",gpu,ingame,2024-07-11 16:14:44 +01001E500401C000,"Koi DX",,playable,2020-05-11 21:37:51 +,"Koi no Hanasaku Hyakkaen",32-bit;gpu;nvdec,ingame,2020-10-03 14:17:10 +01005D200C9AA000,"Koloro",,playable,2022-08-03 12:34:02 +0100464009294000,"Kona",,playable,2022-08-03 12:48:19 +010016C011AAA000,"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",,playable,2023-04-26 09:51:08 +010088500D5EE000,"KORAL",UE4;crash;gpu,menus,2020-11-16 12:41:26 +0100EC8004762000,"KORG Gadget for Nintendo Switch",,playable,2020-05-13 13:57:24 +010046600CCA4000,"Kotodama: The 7 Mysteries of Fujisawa",audout,playable,2021-02-01 20:28:37 +010022801242C000,"KukkoroDays",crash,menus,2021-11-25 08:52:56 +010035A00DF62000,"KUNAI",nvdec,playable,2022-09-20 13:48:34 +010060400ADD2000,"Kunio-Kun: The World Classics Collection",online,playable,2021-01-29 20:21:46 +010037500F282000,"KUUKIYOMI 2: Consider It More! - New Era",crash;Needs Update,nothing,2021-11-02 09:34:40 +0100894011F62000,"Kwaidan ~Azuma manor story~",,playable,2022-10-05 12:50:44 +0100830004FB6000,"L.A. Noire",,playable,2022-08-03 16:49:35 +0100732009CAE000,"L.F.O. -Lost Future Omega-",UE4;deadlock,boots,2020-10-16 12:16:44 +0100F2B0123AE000,"L.O.L. Surprise! Remix: We Rule The World",,playable,2022-10-11 22:48:03 +010026000F662800,"LA-MULANA",gpu,ingame,2022-08-12 01:06:21 +0100E5D00F4AE000,"LA-MULANA 1 & 2",,playable,2022-09-22 17:56:36 +010038000F644000,"LA-MULANA 2",,playable,2022-09-03 13:45:57 +010058500B3E0000,"Labyrinth of Refrain: Coven of Dusk",,playable,2021-02-15 17:38:48 +010022D0089AE000,"Labyrinth of the Witch",,playable,2020-11-01 14:42:37 +0100BAB00E8C0000,"Langrisser I & II",,playable,2021-02-19 15:46:10 +0100E7200B272000,"Lanota",,playable,2019-09-04 01:58:14 +01005E000D3D8000,"Lapis x Labyrinth",,playable,2021-02-01 18:58:08 +0100AFE00E882000,"Laraan",,playable,2020-12-16 12:45:48 +0100DA700879C000,"Last Day of June",nvdec,playable,2021-06-08 11:35:32 +01009E100BDD6000,"LASTFIGHT",,playable,2022-09-20 13:54:55 +0100055007B86000,"Late Shift",nvdec,playable,2021-02-01 18:43:58 +01004EB00DACE000,"Later Daters Part One",,playable,2020-07-29 16:35:45 +01001730144DA000,"Layers of Fear 2",nvdec;UE4,playable,2022-10-28 18:49:52 +0100BF5006A7C000,"Layers of Fear: Legacy",nvdec,playable,2021-02-15 16:30:41 +0100CE500D226000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",nvdec;opengl,playable,2022-09-14 15:01:57 +0100FDB00AA80000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",gpu;nvdec;opengl,ingame,2022-09-14 15:15:55 +01009C100390E000,"League of Evil",online,playable,2021-06-08 11:23:27 +01002E900CD6E000,"Left-Right : The Mansion",,playable,2020-05-13 13:02:12 +010079901C898000,"Legacy of Kain™ Soul Reaver 1&2 Remastered",,playable,2025-01-07 05:50:01 +01002DB007A96000,"Legend of Kay Anniversary",nvdec,playable,2021-01-29 18:38:29 +0100ECC00EF3C000,"Legend of the Skyfish",,playable,2020-06-24 13:04:22 +01007E900DFB6000,"Legend of the Tetrarchs",deadlock,ingame,2020-07-10 07:54:03 +0100A73006E74000,"Legendary Eleven",,playable,2021-06-08 12:09:03 +0100A7700B46C000,"Legendary Fishing",online,playable,2021-04-14 15:08:46 +0100739018020000,"LEGO® 2K Drive",gpu;ldn-works,ingame,2024-04-09 02:05:12 +01003A30012C0000,"LEGO® CITY Undercover",nvdec,playable,2024-09-30 08:44:27 +010070D009FEC000,"LEGO® DC Super-Villains",,playable,2021-05-27 18:10:37 +010052A00B5D2000,"LEGO® Harry Potter™ Collection",crash,ingame,2024-01-31 10:28:07 +010073C01AF34000,"LEGO® Horizon Adventures™",vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56 +01001C100E772000,"LEGO® Jurassic World",,playable,2021-05-27 17:00:20 +0100D3A00409E000,"LEGO® Marvel Super Heroes 2",crash,nothing,2023-03-02 17:12:33 +01006F600FFC8000,"LEGO® Marvel™ Super Heroes",,playable,2024-09-10 19:02:19 +01007FC00206E000,"LEGO® NINJAGO® Movie Video Game",crash,nothing,2022-08-22 19:12:53 +010042D00D900000,"LEGO® Star Wars™: The Skywalker Saga",gpu;slow,ingame,2024-04-13 20:08:46 +0100A01006E00000,"LEGO® The Incredibles",crash,nothing,2022-08-03 18:36:59 +0100838002AEA000,"LEGO® Worlds",crash;slow,ingame,2020-07-17 13:35:39 +0100E7500BF84000,"LEGRAND LEGACY: Tale of the Fatebounds",nvdec,playable,2020-07-26 12:27:36 +0100A8E00CAA0000,"Leisure Suit Larry - Wet Dreams Don't Dry",,playable,2022-08-03 19:51:44 +010031A0135CA000,"Leisure Suit Larry - Wet Dreams Dry Twice",,playable,2022-10-28 19:00:57 +01003AB00983C000,"Lethal League Blaze",online,playable,2021-01-29 20:13:31 +01008C300648E000,"Letter Quest Remastered",,playable,2020-05-11 21:30:34 +0100CE301678E800,"Letters - a written adventure",gpu,ingame,2023-02-21 20:12:38 +01009A200BE42000,"Levelhead",online,ingame,2020-10-18 11:44:51 +0100C960041DC000,"Levels+ : Addictive Puzzle Game",,playable,2020-05-12 13:51:39 +0100C8000F146000,"Liberated",gpu;nvdec,ingame,2024-07-04 04:58:24 +01003A90133A6000,"Liberated: Enhanced Edition",gpu;nvdec,ingame,2024-07-04 04:48:48 +01004360045C8000,"Lichtspeer: Double Speer Edition",,playable,2020-05-12 16:43:09 +010041F0128AE000,"Liege Dragon",,playable,2022-10-12 10:27:03 +010006300AFFE000,"Life Goes On",,playable,2021-01-29 19:01:20 +0100FD101186C000,"Life is Strange 2",UE4,playable,2024-07-04 05:05:58 +0100DC301186A000,"Life is Strange Remastered",UE4,playable,2022-10-03 16:54:44 +010008501186E000,"Life is Strange: Before the Storm Remastered",,playable,2023-09-28 17:15:44 +0100500012AB4000,"Life is Strange: True Colors™",gpu;UE4,ingame,2024-04-08 16:11:52 +01003AB012F00000,"Life of Boris: Super Slav",,ingame,2020-12-17 11:40:05 +0100B3A0135D6000,"Life of Fly",,playable,2021-01-25 23:41:07 +010069A01506E000,"Life of Fly 2",slow,playable,2022-10-28 19:26:52 +01005B6008132000,"Lifeless Planet: Premiere Edition",,playable,2022-08-03 21:25:13 +010030A006F6E000,"Light Fall",nvdec,playable,2021-01-18 14:55:36 +010087700D07C000,"Light Tracer",nvdec,playable,2021-05-05 19:15:43 +01009C8009026000,"LIMBO",cpu;32-bit,boots,2023-06-28 15:39:19 +0100EDE012B58000,"Linelight",,playable,2020-12-17 12:18:07 +0100FAD00E65E000,"Lines X",,playable,2020-05-11 15:28:30 +010032F01096C000,"Lines XL",,playable,2020-08-31 17:48:23 +0100943010310000,"Little Busters! Converted Edition",nvdec,playable,2022-09-29 15:34:56 +0100A3F009142000,"Little Dragons Café",,playable,2020-05-12 00:00:52 +010079A00D9E8000,"Little Friends: Dogs & Cats",,playable,2020-11-12 12:45:51 +0100B18001D8E000,"Little Inferno",32-bit;gpu;nvdec,ingame,2020-12-17 21:43:56 +0100E7000E826000,"Little Misfortune",nvdec,playable,2021-02-23 20:39:44 +0100FE0014200000,"Little Mouse's Encyclopedia",,playable,2022-10-28 19:38:58 +01002FC00412C000,"Little Nightmares Complete Edition",nvdec;UE4,playable,2022-08-03 21:45:35 +010097100EDD6000,"Little Nightmares II",UE4,playable,2023-02-10 18:24:44 +010093A0135D6000,"Little Nightmares II DEMO",UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20 +0100535014D76000,"Little Noah: Scion of Paradise",opengl-backend-bug,playable,2022-09-14 04:17:13 +0100E6D00E81C000,"Little Racer",,playable,2022-10-18 16:41:13 +0100DD700D95E000,"Little Shopping",,playable,2020-10-03 16:34:35 +01000FB00AA90000,"Little Town Hero",,playable,2020-10-15 23:28:48 +01000690085BE000,"Little Triangle",,playable,2020-06-17 14:46:26 +0100CF801776C000,"LIVE A LIVE",UE4;amd-vendor-bug,playable,2023-02-05 15:12:07 +0100BA000FC9C000,"LocO-SportS",,playable,2022-09-20 14:09:30 +010016C009374000,"Lode Runner Legacy",,playable,2021-01-10 14:10:28 +0100D2C013288000,"Lofi Ping Pong",crash,ingame,2020-12-15 20:09:22 +0100B6D016EE6000,"Lone Ruin",crash;nvdec,ingame,2023-01-17 06:41:19 +0100A0C00E0DE000,"Lonely Mountains: Downhill",online-broken,playable,2024-07-04 05:08:11 +010062A0178A8000,"LOOPERS",gpu;slow;crash,ingame,2022-06-17 19:21:45 +010064200F7D8000,"Lost Horizon",,playable,2020-09-01 13:41:22 +01005ED010642000,"Lost Horizon 2",nvdec,playable,2020-06-16 12:02:12 +01005FE01291A000,"Lost in Random™",gpu,ingame,2022-12-18 07:09:28 +0100133014510000,"Lost Lands 2: The Four Horsemen",nvdec,playable,2022-10-24 16:41:00 +0100156014C6A000,"Lost Lands 3: The Golden Curse",nvdec,playable,2022-10-24 16:30:00 +0100BDD010AC8000,"Lost Lands: Dark Overlord",,playable,2022-10-03 11:52:58 +010054600AC74000,"LOST ORBIT: Terminal Velocity",,playable,2021-06-14 12:21:12 +010046600B76A000,"Lost Phone Stories",services,ingame,2020-04-05 23:17:33 +01008AD013A86800,"Lost Ruins",gpu,ingame,2023-02-19 14:09:00 +010077B0038B2000,"LOST SPHEAR",,playable,2021-01-10 06:01:21 +0100018013124000,"Lost Words: Beyond the Page",,playable,2022-10-24 17:03:21 +0100D36011AD4000,"Love Letter from Thief X",gpu;nvdec,ingame,2023-11-14 03:55:31 +0100F0300B7BE000,"Ludomania",crash;services,nothing,2020-04-03 00:33:47 +010048701995E000,"Luigi's Mansion™ 2 HD",ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27 +0100DCA0064A6000,"Luigi’s Mansion™ 3",gpu;slow;Needs Update;ldn-works,ingame,2024-09-27 22:17:36 +010052B00B194000,"Lumini",,playable,2020-08-09 20:45:09 +0100FF00042EE000,"Lumo",nvdec,playable,2022-02-11 18:20:30 +0100F3100EB44000,"Lust for Darkness",nvdec,playable,2020-07-26 12:09:15 +0100F0B00F68E000,"Lust for Darkness: Dawn Edition",nvdec,playable,2021-06-16 13:47:46 +0100EC2011A80000,"Luxar",,playable,2021-03-04 21:11:57 +0100F2400D434000,"MachiKnights -Blood bagos-",nvdec;UE4,playable,2022-09-14 15:08:04 +010024A009428000,"Mad Carnage",,playable,2021-01-10 13:00:07 +01005E7013476000,"Mad Father",,playable,2020-11-12 13:22:10 +010061E00EB1E000,"Mad Games Tycoon",,playable,2022-09-20 14:23:14 +01004A200E722000,"Magazine Mogul",loader-allocator,playable,2022-10-03 12:05:34 +01008E500BF62000,"MagiCat",,playable,2020-12-11 15:22:07 +010032C011356000,"Magicolors",,playable,2020-08-12 18:39:11 +01008C300B624000,"Mahjong Solitaire Refresh",crash,boots,2022-12-09 12:02:55 +010099A0145E8000,"Mahluk dark demon",,playable,2021-04-15 13:14:24 +01001C100D80E000,"Mainlining",,playable,2020-06-05 01:02:00 +0100D9900F220000,"Maitetsu:Pure Station",,playable,2022-09-20 15:12:49 +0100A78017BD6000,"Makai Senki Disgaea 7",,playable,2023-10-05 00:22:18 +01005A700CC3C000,"Mana Spark",,playable,2020-12-10 13:41:01 +010093D00CB22000,"Maneater",nvdec;UE4,playable,2024-05-21 16:11:57 +0100361009B1A000,"Manifold Garden",,playable,2020-10-13 20:27:13 +0100C9A00952A000,"Manticore - Galaxy on Fire",crash;nvdec,boots,2024-02-04 04:37:24 +0100E98002F6E000,"Mantis Burn Racing",online-broken;ldn-broken,playable,2024-09-02 02:13:04 +01008E800D1FE000,"Marble Power Blast",,playable,2021-06-04 16:00:02 +01001B2012D5E000,"Märchen Forest",,playable,2021-02-04 21:33:34 +0100DA7017C9E000,"Marco & The Galaxy Dragon Demo",gpu;demo,ingame,2023-06-03 13:05:33 +01006D0017F7A000,"Mario & Luigi: Brothership",crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00 +010002C00C270000,"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55 +0100317013770000,"MARIO + RABBIDS SPARKS OF HOPE",gpu;Needs Update,ingame,2024-06-20 19:56:19 +010067300059A000,"Mario + Rabbids® Kingdom Battle",slow;opengl-backend-bug,playable,2024-05-06 10:16:54 +0100C9C00E25C000,"Mario Golf™: Super Rush",gpu,ingame,2024-08-18 21:31:48 +0100ED100BA3A000,"Mario Kart Live: Home Circuit™",services;crash;Needs More Attention,nothing,2022-12-07 22:36:52 +0100152000022000,"Mario Kart™ 8 Deluxe",32-bit;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17 +01006FE013472000,"Mario Party™ Superstars",gpu;ldn-works;mac-bug,ingame,2024-05-16 11:23:34 +010019401051C000,"Mario Strikers™: Battle League",crash;nvdec,boots,2024-05-07 06:23:56 +0100BDE00862A000,"Mario Tennis™ Aces",gpu;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40 +0100B99019412000,"Mario vs. Donkey Kong™",,playable,2024-05-04 21:22:39 +0100D9E01DBB0000,"Mario vs. Donkey Kong™ Demo",,playable,2024-02-18 10:40:06 +01009A700A538000,"Mark of the Ninja: Remastered",,playable,2022-08-04 15:48:30 +010044600FDF0000,"Marooners",nvdec;online-broken,playable,2022-10-18 21:35:26 +010060700AC50000,"MARVEL ULTIMATE ALLIANCE 3: The Black Order",nvdec;ldn-untested,playable,2024-02-14 19:51:51 +01003DE00C95E000,"Mary Skelter 2",crash;regression,ingame,2023-09-12 07:37:28 +0100113008262000,"Masquerada: Songs and Shadows",,playable,2022-09-20 15:18:54 +01004800197F0000,"Master Detective Archives: Rain Code",gpu,ingame,2024-04-19 20:11:09 +0100CC7009196000,"Masters of Anima",nvdec,playable,2022-08-04 16:00:09 +01004B100A1C4000,"MathLand",,playable,2020-09-01 15:40:06 +0100A8C011F26000,"Max and the book of chaos",,playable,2020-09-02 12:24:43 +01001C9007614000,"Max: The Curse of Brotherhood",nvdec,playable,2022-08-04 16:33:04 +0100E8B012FBC000,"Maze",,playable,2020-12-17 16:13:58 +0100EEF00CBC0000,"MEANDERS",UE4;gpu,ingame,2021-06-11 19:19:33 +0100EC000CE24000,"Mech Rage",,playable,2020-11-18 12:30:16 +0100C4F005EB4000,"Mecho Tales",,playable,2022-08-04 17:03:19 +0100E4600D31A000,"Mechstermination Force",,playable,2024-07-04 05:39:15 +,"Medarot Classics Plus Kabuto Ver",,playable,2020-11-21 11:31:18 +,"Medarot Classics Plus Kuwagata Ver",,playable,2020-11-21 11:30:40 +0100BBC00CB9A000,"Mega Mall Story",slow,playable,2022-08-04 17:10:58 +0100B0C0086B0000,"Mega Man 11",,playable,2021-04-26 12:07:53 +010038E016264000,"Mega Man Battle Network Legacy Collection Vol. 1",,playable,2023-04-25 03:55:57 +0100734016266000,"Mega Man Battle Network Legacy Collection Vol. 2",,playable,2023-08-03 18:04:32 +01002D4007AE0000,"Mega Man Legacy Collection",gpu,ingame,2021-06-03 18:17:17 +0100842008EC4000,"Mega Man Legacy Collection 2",,playable,2021-01-06 08:47:59 +01005C60086BE000,"Mega Man X Legacy Collection",audio;crash;services,menus,2020-12-04 04:30:17 +010025C00D410000,"Mega Man Zero/ZX Legacy Collection",,playable,2021-06-14 16:17:32 +0100FC700F942000,"Megabyte Punch",,playable,2020-10-16 14:07:18 +010006F011220000,"Megadimension Neptunia VII",32-bit;nvdec,playable,2020-12-17 20:56:03 +010082B00E8B8000,"Megaquarium",,playable,2022-09-14 16:50:00 +010005A00B312000,"Megaton Rainfall",gpu;opengl,boots,2022-08-04 18:29:43 +0100EA100DF92000,"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",32-bit;nvdec,playable,2022-12-05 13:19:12 +0100B360068B2000,"Mekorama",gpu,boots,2021-06-17 16:37:21 +01000FA010340000,"Melbits World",nvdec;online,menus,2021-11-26 13:51:22 +0100F68019636000,"Melon Journey",,playable,2023-04-23 21:20:01 +,"Memories Off -Innocent Fille- for Dearest",,playable,2020-08-04 07:31:22 +010062F011E7C000,"Memory Lane",UE4,playable,2022-10-05 14:31:03 +0100EBE00D5B0000,"Meow Motors",UE4;gpu,ingame,2020-12-18 00:24:01 +0100273008FBC000,"Mercenaries Saga Chronicles",,playable,2021-01-10 12:48:19 +010094500C216000,"Mercenaries Wings: The False Phoenix",crash;services,nothing,2020-05-08 22:42:12 +0100F900046C4000,"Mercenary Kings: Reloaded Edition",online,playable,2020-10-16 13:05:58 +0100E5000D3CA000,"Merchants of Kaidan",,playable,2021-04-15 11:44:28 +01009A500D4A8000,"METAGAL",,playable,2020-06-05 00:05:48 +010047F01AA10000,"METAL GEAR SOLID 3: Snake Eater - Master Collection Version",services-horizon,menus,2024-07-24 06:34:06 +0100E8F00F6BE000,"METAL MAX Xeno Reborn",,playable,2022-12-05 15:33:53 +01002DE00E5D0000,"Metaloid: Origin",,playable,2020-06-04 20:26:35 +010055200E87E000,"Metamorphosis",UE4;audout;gpu;nvdec,ingame,2021-06-16 16:18:11 +0100D4900E82C000,"Metro 2033 Redux",gpu,ingame,2022-11-09 10:53:13 +0100F0400E850000,"Metro: Last Light Redux",slow;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52 +010012101468C000,"Metroid Prime™ Remastered",gpu;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15 +010093801237C000,"Metroid™ Dread",,playable,2023-11-13 04:02:36 +0100A1200F20C000,"Midnight Evil",,playable,2022-10-18 22:55:19 +0100C1E0135E0000,"Mighty Fight Federation",online,playable,2021-04-06 18:39:56 +0100AD701344C000,"Mighty Goose",nvdec,playable,2022-10-28 20:25:38 +01000E2003FA0000,"MIGHTY GUNVOLT BURST",,playable,2020-10-19 16:05:49 +010060D00AE36000,"Mighty Switch Force! Collection",,playable,2022-10-28 20:40:32 +01003DA010E8A000,"Miitopia™",gpu;services-horizon,ingame,2024-09-06 10:39:13 +01007DA0140E8000,"Miitopia™ Demo",services;crash;demo,menus,2023-02-24 11:50:58 +01004B7009F00000,"Miles & Kilo",,playable,2020-10-22 11:39:49 +0100976008FBE000,"Millie",,playable,2021-01-26 20:47:19 +0100F5700C9A8000,"MIND: Path to Thalamus",UE4,playable,2021-06-16 17:37:25 +0100D71004694000,"Minecraft",crash;ldn-broken,ingame,2024-09-29 12:08:59 +01006C100EC08000,"Minecraft Dungeons",nvdec;online-broken;UE4,playable,2024-06-26 22:10:43 +01007C6012CC8000,"Minecraft Legends",gpu;crash,ingame,2024-03-04 00:32:24 +01006BD001E06000,"Minecraft: Nintendo Switch Edition",ldn-broken,playable,2023-10-15 01:47:08 +01003EF007ABA000,"Minecraft: Story Mode - Season Two",online-broken,playable,2023-03-04 00:30:50 +010059C002AC2000,"Minecraft: Story Mode - The Complete Adventure",crash;online-broken,boots,2022-08-04 18:56:58 +0100B7500F756000,"Minefield",,playable,2022-10-05 15:03:29 +01003560119A6000,"Mini Motor Racing X",,playable,2021-04-13 17:54:49 +0100FB700DE1A000,"Mini Trains",,playable,2020-07-29 23:06:20 +010039200EC66000,"Miniature - The Story Puzzle",UE4,playable,2022-09-14 17:18:50 +010069200EB80000,"Ministry of Broadcast",,playable,2022-08-10 00:31:16 +0100C3F000BD8000,"Minna de Wai Wai! Spelunker",crash,nothing,2021-11-03 07:17:11 +0100FAE010864000,"Minoria",,playable,2022-08-06 18:50:50 +01005AB015994000,"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",gpu,playable,2022-03-28 02:22:24 +0100CFA0138C8000,"Missile Dancer",,playable,2021-01-31 12:22:03 +0100E3601495C000,"Missing Features: 2D",,playable,2022-10-28 20:52:54 +010059200CC40000,"Mist Hunter",,playable,2021-06-16 13:58:58 +0100F65011E52000,"Mittelborg: City of Mages",,playable,2020-08-12 19:58:06 +0100876015D74000,"MLB® The Show™ 22",gpu;slow,ingame,2023-04-25 06:28:43 +0100A9F01776A000,"MLB® The Show™ 22 Tech Test",services;crash;Needs Update;demo,nothing,2022-12-09 10:28:34 +0100913019170000,"MLB® The Show™ 23",gpu,ingame,2024-07-26 00:56:50 +0100E2E01C32E000,"MLB® The Show™ 24",services-horizon,nothing,2024-03-31 04:54:11 +010011300F74C000,"MO:Astray",crash,ingame,2020-12-11 21:45:44 +010020400BDD2000,"Moai VI: Unexpected Guests",slow,playable,2020-10-27 16:40:20 +0100D8700B712000,"Modern Combat Blackout",crash,nothing,2021-03-29 19:47:15 +010004900D772000,"Modern Tales: Age of Invention",slow,playable,2022-10-12 11:20:19 +0100B8500D570000,"Moero Chronicle™ Hyper",32-bit,playable,2022-08-11 07:21:56 +01004EB0119AC000,"Moero Crystal H",32-bit;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22 +0100B46017500000,"MOFUMOFUSENSEN",gpu,menus,2024-09-21 21:51:08 +01004A400C320000,"Momodora: Reverie Under the Moonlight",deadlock,nothing,2022-02-06 03:47:43 +01002CC00BC4C000,"Momonga Pinball Adventures",,playable,2022-09-20 16:00:40 +010093100DA04000,"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",gpu,ingame,2023-09-22 10:21:46 +0100FBD00ED24000,"MONKEY BARRELS",,playable,2022-09-14 17:28:52 +01004C500B8E0000,"Monkey King: Master of the Clouds",,playable,2020-09-28 22:35:48 +01003030161DC000,"Monomals",gpu,ingame,2024-08-06 22:02:51 +0100F3A00FB78000,"Mononoke Slashdown",crash,menus,2022-05-04 20:55:47 +01007430037F6000,"MONOPOLY® for Nintendo Switch™",nvdec;online-broken,playable,2024-02-06 23:13:01 +01005FF013DC2000,"MONOPOLY® Madness",,playable,2022-01-29 21:13:52 +0100E2D0128E6000,"Monster Blast",gpu,ingame,2023-09-02 20:02:32 +01006F7001D10000,"Monster Boy and the Cursed Kingdom",nvdec,playable,2022-08-04 20:06:32 +01005FC01000E000,"Monster Bugs Eat People",,playable,2020-07-26 02:05:34 +0100742007266000,"Monster Energy Supercross - The Official Videogame",nvdec;UE4,playable,2022-08-04 20:25:00 +0100F8100B982000,"Monster Energy Supercross - The Official Videogame 2",nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24 +010097800EA20000,"Monster Energy Supercross - The Official Videogame 3",UE4;audout;nvdec;online,playable,2021-06-14 12:37:54 +0100E9900ED74000,"Monster Farm",32-bit;nvdec,playable,2021-05-05 19:29:13 +0100770008DD8000,"Monster Hunter Generations Ultimate™",32-bit;online-broken;ldn-works,playable,2024-03-18 14:35:36 +0100B04011742000,"Monster Hunter Rise",gpu;slow;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59 +010093A01305C000,"Monster Hunter Rise Demo",online-broken;ldn-works;demo,playable,2022-10-18 23:04:17 +0100E21011446000,"Monster Hunter Stories 2: Wings of Ruin",services,ingame,2022-07-10 19:27:30 +010042501329E000,"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",demo,playable,2022-11-13 22:20:26 +,"Monster Hunter XX Demo",32-bit;cpu,nothing,2020-03-22 10:12:28 +0100C3800049C000,"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",,playable,2024-07-21 14:08:09 +010088400366E000,"Monster Jam Crush It!",UE4;nvdec;online,playable,2021-04-08 19:29:27 +010095C00F354000,"Monster Jam Steel Titans",crash;nvdec;UE4,menus,2021-11-14 09:45:38 +010051B0131F0000,"Monster Jam Steel Titans 2",nvdec;UE4,playable,2022-10-24 17:17:59 +01004DE00DD44000,"Monster Puzzle",,playable,2020-09-28 22:23:10 +0100A0F00DA68000,"Monster Sanctuary",crash,ingame,2021-04-04 05:06:41 +0100D30010C42000,"Monster Truck Championship",slow;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51 +01004E10142FE000,"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",crash,ingame,2021-07-23 10:56:44 +010039F00EF70000,"Monstrum",,playable,2021-01-31 11:07:26 +0100C2E00B494000,"Moonfall Ultimate",nvdec,playable,2021-01-17 14:01:25 +0100E3D014ABC000,"Moorhuhn Jump and Run 'Traps and Treasures'",,playable,2024-03-08 15:10:02 +010045C00F274000,"Moorhuhn Kart 2",online-broken,playable,2022-10-28 21:10:35 +010040E00F642000,"Morbid: The Seven Acolytes",,playable,2022-08-09 17:21:58 +01004230123E0000,"More Dark",,playable,2020-12-15 16:01:06 +01005DA003E6E000,"Morphies Law",UE4;crash;ldn-untested;nvdec;online,menus,2020-11-22 17:05:29 +0100776003F0C000,"Morphite",,playable,2021-01-05 19:40:55 +0100F2200C984000,"Mortal Kombat 11",slow;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17 +01006560184E6000,"Mortal Kombat™ 1",gpu,ingame,2024-09-04 15:45:47 +010032800D740000,"Mosaic",,playable,2020-08-11 13:07:35 +01002ED00B01C000,"Moto Racer 4",UE4;nvdec;online,playable,2021-04-08 19:09:11 +01003F200D0F2000,"Moto Rush GT",,playable,2022-08-05 11:23:55 +0100361007268000,"MotoGP™18",nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45 +01004B800D0E8000,"MotoGP™19",nvdec;online-broken;UE4,playable,2022-08-05 11:54:14 +01001FA00FBBC000,"MotoGP™20",ldn-untested,playable,2022-09-29 17:58:01 +01000F5013820000,"MotoGP™21",gpu;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08 +010040401D564000,"MotoGP™24",gpu,ingame,2024-05-10 23:41:00 +01002A900D6D6000,"Motorsport Manager for Nintendo Switch™",nvdec,playable,2022-08-05 12:48:14 +01009DB00D6E0000,"Mountain Rescue Simulator",,playable,2022-09-20 16:36:48 +0100C4C00E73E000,"Moving Out",nvdec,playable,2021-06-07 21:17:24 +0100D3300F110000,"Mr Blaster",,playable,2022-09-14 17:56:24 +0100DCA011262000,"Mr. DRILLER DrillLand",nvdec,playable,2020-07-24 13:56:48 +010031F002B66000,"Mr. Shifty",slow,playable,2020-05-08 15:28:16 +01005EF00B4BC000,"Ms. Splosion Man",online,playable,2020-05-09 20:45:43 +010087C009246000,"Muddledash",services,ingame,2020-05-08 16:46:14 +01009D200952E000,"MudRunner - American Wilds",gpu;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52 +010073E008E6E000,"Mugsters",,playable,2021-01-28 17:57:17 +0100A8400471A000,"MUJO",,playable,2020-05-08 16:31:04 +0100211005E94000,"Mulaka",,playable,2021-01-28 18:07:20 +010038B00B9AE000,"Mummy Pinball",,playable,2022-08-05 16:08:11 +01008E200C5C2000,"Muse Dash",,playable,2020-06-06 14:41:29 +010035901046C000,"Mushroom Quest",,playable,2020-05-17 13:07:08 +0100700006EF6000,"Mushroom Wars 2",nvdec,playable,2020-09-28 15:26:08 +010046400F310000,"Music Racer",,playable,2020-08-10 08:51:23 +,"Musou Orochi 2 Ultimate",crash;nvdec,boots,2021-04-09 19:39:16 +0100F6000EAA8000,"Must Dash Amigos",,playable,2022-09-20 16:45:56 +01007B6006092000,"MUSYNX",,playable,2020-05-08 14:24:43 +0100C3E00ACAA000,"Mutant Football League: Dynasty Edition",online-broken,playable,2022-08-05 17:01:51 +01004BE004A86000,"Mutant Mudds Collection",,playable,2022-08-05 17:11:38 +0100E6B00DEA4000,"Mutant Year Zero: Road to Eden - Deluxe Edition",nvdec;UE4,playable,2022-09-10 13:31:10 +0100161009E5C000,"MX Nitro: Unleashed",,playable,2022-09-27 22:34:33 +0100218011E7E000,"MX vs ATV All Out",nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46 +0100D940063A0000,"MXGP3 - The Official Motocross Videogame",UE4;gpu;nvdec,ingame,2020-12-16 14:00:20 +01002C6012334000,"My Aunt is a Witch",,playable,2022-10-19 09:21:17 +0100F6F0118B8000,"My Butler",,playable,2020-06-27 13:46:23 +010031200B94C000,"My Friend Pedro",nvdec,playable,2021-05-28 11:19:17 +01000D700BE88000,"My Girlfriend is a Mermaid!?",nvdec,playable,2020-05-08 13:32:55 +010039000B68E000,"MY HERO ONE'S JUSTICE",UE4;crash;gpu;online,menus,2020-12-10 13:11:04 +01007E700DBF6000,"MY HERO ONE'S JUSTICE 2",UE4;gpu;nvdec,ingame,2020-12-18 14:08:47 +0100E4701373E000,"My Hidden Things",,playable,2021-04-15 11:26:06 +0100872012B34000,"My Little Dog Adventure",gpu,ingame,2020-12-10 17:47:37 +01008C600395A000,"My Little Riding Champion",slow,playable,2020-05-08 17:00:53 +010086B00C784000,"My Lovely Daughter: ReBorn",,playable,2022-11-24 17:25:32 +0100E7700C284000,"My Memory of Us",,playable,2022-08-20 11:03:14 +010028F00ABAE000,"My Riding Stables - Life with Horses",,playable,2022-08-05 21:39:07 +010042A00FBF0000,"My Riding Stables 2: A New Adventure",,playable,2021-05-16 14:14:59 +0100E25008E68000,"My Time at Portia",,playable,2021-05-28 12:42:55 +0100158011A08000,"My Universe - Cooking Star Restaurant",,playable,2022-10-19 10:00:44 +0100F71011A0A000,"My Universe - Fashion Boutique",nvdec,playable,2022-10-12 14:54:19 +0100CD5011A02000,"My Universe - PET CLINIC CATS & DOGS",crash;nvdec,boots,2022-02-06 02:05:53 +01006C301199C000,"My Universe - School Teacher",nvdec,playable,2021-01-21 16:02:52 +01000D5005974000,"N++ (NPLUSPLUS)",,playable,2022-08-05 21:54:58 +0100A6F00AC70000,"NAIRI: Tower of Shirin",nvdec,playable,2020-08-09 19:49:12 +010002F001220000,"NAMCO MUSEUM",ldn-untested,playable,2024-08-13 07:52:21 +0100DAA00AEE6000,"NAMCO MUSEUM™ ARCADE PAC™",,playable,2021-06-07 21:44:50 +,"NAMCOT COLLECTION",audio,playable,2020-06-25 13:35:22 +010072B00BDDE000,"Narcos: Rise of the Cartels",UE4;crash;nvdec,boots,2021-03-22 13:18:47 +01006BB00800A000,"NARUTO SHIPPUDEN: Ultimate Ninja STORM 3 Full Burst",nvdec,playable,2024-06-16 14:58:05 +010084D00CF5E000,"NARUTO SHIPPUDEN™: Ultimate Ninja® STORM 4 ROAD TO BORUTO",,playable,2024-06-29 13:04:22 +0100D2D0190A4000,"NARUTO X BORUTO Ultimate Ninja STORM CONNECTIONS",services-horizon,nothing,2024-07-25 05:16:48 +0100715007354000,"NARUTO: Ultimate Ninja STORM",nvdec,playable,2022-08-06 14:10:31 +0100545016D5E000,"NASCAR Rivals",crash;Incomplete,ingame,2023-04-21 01:17:47 +0100103011894000,"Naught",UE4,playable,2021-04-26 13:31:45 +01001AE00C1B2000,"NBA 2K Playgrounds 2",nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38 +0100760002048000,"NBA 2K18",gpu;ldn-untested,ingame,2022-08-06 14:17:51 +01001FF00B544000,"NBA 2K19",crash;ldn-untested;services,nothing,2021-04-16 13:07:21 +0100E24011D1E000,"NBA 2K21",gpu,boots,2022-10-05 15:31:51 +0100ACA017E4E800,"NBA 2K23",,boots,2023-10-10 23:07:14 +010006501A8D8000,"NBA 2K24 Kobe Bryant Edition",cpu;gpu,boots,2024-08-11 18:23:08 +010002900294A000,"NBA Playgrounds",nvdec;online-broken;UE4,playable,2022-08-06 17:06:59 +0100F5A008126000,"NBA Playgrounds - Enhanced Edition",nvdec;online-broken;UE4,playable,2022-08-06 16:13:44 +0100BBC00E4F8000,"Need a packet?",,playable,2020-08-12 16:09:01 +010029B0118E8000,"Need for Speed™ Hot Pursuit Remastered",online-broken,playable,2024-03-20 21:58:02 +010023500B0BA000,"Nefarious",,playable,2020-12-17 03:20:33 +01008390136FC000,"Negative: The Way of Shinobi",nvdec,playable,2021-03-24 11:29:41 +010065F00F55A000,"Neighbours back From Hell",nvdec,playable,2022-10-12 15:36:48 +0100B4900AD3E000,"NEKOPARA Vol.1",nvdec,playable,2022-08-06 18:25:54 +010012900C782000,"NEKOPARA Vol.2",,playable,2020-12-16 11:04:47 +010045000E418000,"NEKOPARA Vol.3",,playable,2022-10-03 12:49:04 +010049F013656000,"NEKOPARA Vol.4",crash,ingame,2021-01-17 01:47:18 +01006ED00BC76000,"Nelke & the Legendary Alchemists ~Ateliers of the New World~",,playable,2021-01-28 19:39:42 +01005F000B784000,"Nelly Cootalot: The Fowl Fleet",,playable,2020-06-11 20:55:42 +01001AB0141A8000,"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",crash,ingame,2021-07-18 07:29:18 +0100EBB00D2F4000,"Neo Cab",,playable,2021-04-24 00:27:58 +010040000DB98000,"Neo Cab Demo",crash,boots,2020-06-16 00:14:00 +010006D0128B4000,"NEOGEO POCKET COLOR SELECTION Vol.1",,playable,2023-07-08 20:55:36 +0100BAB01113A000,"Neon Abyss",,playable,2022-10-05 15:59:44 +010075E0047F8000,"Neon Chrome",,playable,2022-08-06 18:38:34 +010032000EAC6000,"Neon Drive",,playable,2022-09-10 13:45:48 +0100B9201406A000,"Neon White",crash,ingame,2023-02-02 22:25:06 +0100743008694000,"Neonwall",nvdec,playable,2022-08-06 18:49:52 +01001A201331E000,"Neoverse Trinity Edition",,playable,2022-10-19 10:28:03 +01000B2011352000,"Nerdook Bundle Vol. 1",gpu;slow,ingame,2020-10-07 14:27:10 +01008B0010160000,"Nerved",UE4,playable,2022-09-20 17:14:03 +0100BA0004F38000,"NeuroVoider",,playable,2020-06-04 18:20:05 +0100C20012A54000,"Nevaeh",gpu;nvdec,ingame,2021-06-16 17:29:03 +010039801093A000,"Never Breakup",,playable,2022-10-05 16:12:12 +0100F79012600000,"Neverending Nightmares",crash;gpu,boots,2021-04-24 01:43:35 +0100A9600EDF8000,"Neverlast",slow,ingame,2020-07-13 23:55:19 +010013700DA4A000,"Neverwinter Nights: Enhanced Edition",gpu;nvdec,menus,2024-09-30 02:59:19 +01004C200100E000,"New Frontier Days ~Founding Pioneers~",,playable,2020-12-10 12:45:07 +0100F4300BF2C000,"New Pokémon Snap™",,playable,2023-01-15 23:26:57 +010017700B6C2000,"New Super Lucky's Tale",,playable,2024-03-11 14:14:10 +0100EA80032EA000,"New Super Mario Bros.™ U Deluxe",32-bit,playable,2023-10-08 02:06:37 +0100B9500E886000,"Newt One",,playable,2020-10-17 21:21:48 +01005A5011A44000,"Nexomon: Extinction",,playable,2020-11-30 15:02:22 +0100B69012EC6000,"Nexoria: Dungeon Rogue Heroes",gpu,ingame,2021-10-04 18:41:29 +0100271004570000,"Next Up Hero",online,playable,2021-01-04 22:39:36 +0100E5600D446000,"Ni no Kuni: Wrath of the White Witch",32-bit;nvdec,boots,2024-07-12 04:52:59 +0100EDD00D530000,"Nice Slice",nvdec,playable,2020-06-17 15:13:27 +01000EC010BF4000,"Niche - a genetics survival game",nvdec,playable,2020-11-27 14:01:11 +010010701AFB2000,"Nickelodeon All-Star Brawl 2",,playable,2024-06-03 14:15:01 +0100D6200933C000,"Nickelodeon Kart Racers",,playable,2021-01-07 12:16:49 +010058800F860000,"Nicky - The Home Alone Golf Ball",,playable,2020-08-08 13:45:39 +0100A95012668000,"Nicole",audout,playable,2022-10-05 16:41:44 +0100B8E016F76000,"NieR:Automata The End of YoRHa Edition",slow;crash,ingame,2024-05-17 01:06:34 +0100F3A0095A6000,"Night Call",nvdec,playable,2022-10-03 12:57:00 +0100921006A04000,"Night in the Woods",,playable,2022-12-03 20:17:54 +0100D8500A692000,"Night Trap - 25th Anniversary Edition",nvdec,playable,2022-08-08 13:16:14 +01005F4009112000,"Nightmare Boy: The New Horizons of Reigns of Dreams, a Metroidvania journey with little rusty nightmares, the empire of knight final boss",,playable,2021-01-05 15:52:29 +01006E700B702000,"Nightmares from the Deep 2: The Siren`s Call",nvdec,playable,2022-10-19 10:58:53 +0100628004BCE000,"Nights of Azure 2: Bride of the New Moon",crash;nvdec;regression,menus,2022-11-24 16:00:39 +010042300C4F6000,"Nightshade/百花百狼",nvdec,playable,2020-05-10 19:43:31 +0100AA0008736000,"Nihilumbra",,playable,2020-05-10 16:00:12 +0100D03003F0E000,"Nine Parchments",ldn-untested,playable,2022-08-07 12:32:08 +0100E2F014F46000,"NINJA GAIDEN Σ",nvdec,playable,2022-11-13 16:27:02 +0100696014F4A000,"NINJA GAIDEN Σ2",nvdec,playable,2024-07-31 21:53:48 +01002AF014F4C000,"NINJA GAIDEN: Master Collection",nvdec,playable,2023-08-11 08:25:31 +010088E003A76000,"Ninja Shodown",,playable,2020-05-11 12:31:21 +010081D00A480000,"Ninja Striker!",,playable,2020-12-08 19:33:29 +0100CCD0073EA000,"Ninjala",online-broken;UE4,boots,2024-07-03 20:04:49 +010003C00B868000,"Ninjin: Clash of Carrots",online-broken,playable,2024-07-10 05:12:26 +0100746010E4C000,"NinNinDays",,playable,2022-11-20 15:17:29 +0100C9A00ECE6000,"Nintendo 64™ – Nintendo Switch Online",gpu;vulkan,ingame,2024-04-23 20:21:07 +0100D870045B6000,"Nintendo Entertainment System™ - Nintendo Switch Online",online,playable,2022-07-01 15:45:06 +0100C4B0034B2000,"Nintendo Labo Toy-Con 01 Variety Kit",gpu,ingame,2022-08-07 12:56:07 +01001E9003502000,"Nintendo Labo Toy-Con 03 Vehicle Kit",services;crash,menus,2022-08-03 17:20:11 +0100165003504000,"Nintendo Labo Toy-Con 04 VR Kit",services;crash,boots,2023-01-17 22:30:24 +01009AB0034E0000,"Nintendo Labo™ Toy-Con 02: Robot Kit",gpu,ingame,2022-08-07 13:03:19 +0100D2F00D5C0000,"Nintendo Switch™ Sports",deadlock,boots,2024-09-10 14:20:24 +01000EE017182000,"Nintendo Switch™ Sports Online Play Test",gpu,ingame,2022-03-16 07:44:12 +010037200C72A000,"Nippon Marathon",nvdec,playable,2021-01-28 20:32:46 +010020901088A000,"Nirvana Pilot Yume",,playable,2022-10-29 11:49:49 +01009B400ACBA000,"No Heroes Here",online,playable,2020-05-10 02:41:57 +0100853015E86000,"No Man's Sky",gpu,ingame,2024-07-25 05:18:17 +0100F0400F202000,"No More Heroes",32-bit,playable,2022-09-13 07:44:27 +010071400F204000,"No More Heroes 2: Desperate Struggle",32-bit;nvdec,playable,2022-11-19 01:38:13 +01007C600EB42000,"No More Heroes 3",gpu;UE4,ingame,2024-03-11 17:06:19 +01009F3011004000,"No Straight Roads",nvdec,playable,2022-10-05 17:01:38 +0100F7D00A1BC000,"NO THING",,playable,2021-01-04 19:06:01 +0100542012884000,"Nongunz: Doppelganger Edition",,playable,2022-10-29 12:00:39 +010016E011EFA000,"Norman's Great Illusion",,playable,2020-12-15 19:28:24 +01001A500AD6A000,"Norn9 ~Norn + Nonette~ LOFN",nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16 +01004840086FE000,"NORTH",nvdec,playable,2021-01-05 16:17:44 +0100A9E00D97A000,"Northgard",crash,menus,2022-02-06 02:05:35 +01008AE019614000,"nOS new Operating System",,playable,2023-03-22 16:49:08 +0100CB800B07E000,"NOT A HERO: SUPER SNAZZY EDITION",,playable,2021-01-28 19:31:24 +01004D500D9BE000,"Not Not - A Brain Buster",,playable,2020-05-10 02:05:26 +0100DAF00D0E2000,"Not Tonight: Take Back Control Edition",nvdec,playable,2022-10-19 11:48:47 +0100343013248000,"Nubarron: The adventure of an unlucky gnome",,playable,2020-12-17 16:45:17 +01005140089F6000,"Nuclien",,playable,2020-05-10 05:32:55 +010002700C34C000,"Numbala",,playable,2020-05-11 12:01:07 +010020500C8C8000,"Number Place 10000",gpu,menus,2021-11-24 09:14:23 +010003701002C000,"Nurse Love Syndrome",,playable,2022-10-13 10:05:22 +0000000000000000,"nx-hbmenu",Needs Update;homebrew,boots,2024-04-06 22:05:32 +,"nxquake2",services;crash;homebrew,nothing,2022-08-04 23:14:04 +010049F00EC30000,"Nyan Cat: Lost in Space",online,playable,2021-06-12 13:22:03 +01002E6014FC4000,"O---O",,playable,2022-10-29 12:12:14 +010074600CC7A000,"OBAKEIDORO!",nvdec;online,playable,2020-10-16 16:57:34 +01002A000C478000,"Observer",UE4;gpu;nvdec,ingame,2021-03-03 20:19:45 +01007D7001D0E000,"Oceanhorn - Monster of Uncharted Seas",,playable,2021-01-05 13:55:22 +01006CB010840000,"Oceanhorn 2: Knights of the Lost Realm",,playable,2021-05-21 18:26:10 +010096B00A08E000,"Octocopter: Double or Squids",,playable,2021-01-06 01:30:16 +0100CAB006F54000,"Octodad: Dadliest Catch",crash,boots,2021-04-23 15:26:12 +0100A3501946E000,"OCTOPATH TRAVELER II",gpu;amd-vendor-bug,ingame,2024-09-22 11:39:20 +010057D006492000,"Octopath Traveler™",UE4;crash;gpu,ingame,2020-08-31 02:34:36 +010084300C816000,"Odallus: The Dark Call",,playable,2022-08-08 12:37:58 +0100BB500EE3C000,"Oddworld: Munch's Oddysee",gpu;nvdec,ingame,2021-06-17 12:11:50 +01005E700ABB8000,"Oddworld: New 'n' Tasty",nvdec,playable,2021-06-17 17:51:32 +0100D210177C6000,"ODDWORLD: SOULSTORM",services-horizon;crash,boots,2024-08-18 13:13:26 +01002EA00ABBA000,"Oddworld: Stranger's Wrath",crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21 +010029F00C876000,"Odium to the Core",gpu,ingame,2021-01-08 14:03:52 +01006F5013202000,"Off And On Again",,playable,2022-10-29 19:46:26 +01003CD00E8BC000,"Offroad Racing - Buggy X ATV X Moto",online-broken;UE4,playable,2022-09-14 18:53:22 +01003B900AE12000,"Oh My Godheads: Party Edition",,playable,2021-04-15 11:04:11 +0100F45006A00000,"Oh...Sir! The Hollywood Roast",,ingame,2020-12-06 00:42:30 +010030B00B2F6000,"OK K.O.! Let’s Play Heroes",nvdec,playable,2021-01-11 18:41:02 +0100276009872000,"OKAMI HD",nvdec,playable,2024-04-05 06:24:58 +01006AB00BD82000,"OkunoKA",online-broken,playable,2022-08-08 14:41:51 +0100CE2007A86000,"Old Man's Journey",nvdec,playable,2021-01-28 19:16:52 +0100C3D00923A000,"Old School Musical",,playable,2020-12-10 12:51:12 +010099000BA48000,"Old School Racer 2",,playable,2020-10-19 12:11:26 +0100E0200B980000,"OlliOlli: Switch Stance",gpu,boots,2024-04-25 08:36:37 +0100F9D00C186000,"Olympia Soiree",,playable,2022-12-04 21:07:12 +0100A8B00E14A000,"Olympic Games Tokyo 2020 – The Official Video Game™",ldn-untested;nvdec;online,playable,2021-01-06 01:20:24 +01001D600E51A000,"Omega Labyrinth Life",,playable,2021-02-23 21:03:03 +,"Omega Vampire",nvdec,playable,2020-10-17 19:15:35 +0100CDC00C40A000,"Omensight: Definitive Edition",UE4;crash;nvdec,ingame,2020-07-26 01:45:14 +01006DB00D970000,"OMG Zombies!",32-bit,playable,2021-04-12 18:04:45 +010014E017B14000,"OMORI",,playable,2023-01-07 20:21:02 +,"Once Upon A Coma",nvdec,playable,2020-08-01 12:09:39 +0100BD3006A02000,"One More Dungeon",,playable,2021-01-06 09:10:58 +010076600FD64000,"One Person Story",,playable,2020-07-14 11:51:02 +0100774009CF6000,"ONE PIECE Pirate Warriors 3 Deluxe Edition",nvdec,playable,2020-05-10 06:23:52 +01008FE00E2F6000,"ONE PIECE: PIRATE WARRIORS 4",online-broken;ldn-untested,playable,2022-09-27 22:55:46 +0100574002AF4000,"ONE PIECE: Unlimited World Red Deluxe Edition",,playable,2020-05-10 22:26:32 +0100EEA00E3EA000,"One-Way Ticket",UE4,playable,2020-06-20 17:20:49 +0100463013246000,"Oneiros",,playable,2022-10-13 10:17:22 +010057C00D374000,"Oniken",,playable,2022-09-10 14:22:38 +010037900C814000,"Oniken: Unstoppable Edition",,playable,2022-08-08 14:52:06 +0100416008A12000,"Onimusha: Warlords",nvdec,playable,2020-07-31 13:08:39 +0100CF4011B2A000,"OniNaki",nvdec,playable,2021-02-27 21:52:42 +010074000BE8E000,"oOo: Ascension",,playable,2021-01-25 14:13:34 +0100D5400BD90000,"Operación Triunfo 2017",services;nvdec,ingame,2022-08-08 15:06:42 +01006CF00CFA4000,"Operencia: The Stolen Sun",UE4;nvdec,playable,2021-06-08 13:51:07 +01004A200BE82000,"OPUS Collection",,playable,2021-01-25 15:24:04 +010049C0075F0000,"OPUS: The Day We Found Earth",nvdec,playable,2021-01-21 18:29:31 +0100F9A012892000,"Ord.",,playable,2020-12-14 11:59:06 +010061D00DB74000,"Ori and the Blind Forest: Definitive Edition",nvdec;online-broken,playable,2022-09-14 19:58:13 +010005800F46E000,"Ori and the Blind Forest: Definitive Edition Demo",,playable,2022-09-10 14:40:12 +01008DD013200000,"Ori and the Will of the Wisps",gpu,ingame,2025-01-11 06:09:54 +01006C70102EA000,"Orn: The Tiny Forest Sprite",UE4;gpu,ingame,2020-08-07 14:25:30 +0100E5900F49A000,"Othercide",nvdec,playable,2022-10-05 19:04:38 +01006AA00EE44000,"Otokomizu",,playable,2020-07-13 21:00:44 +01006AF013A9E000,"Otti: The House Keeper",,playable,2021-01-31 12:11:24 +01000320060AC000,"OTTTD: Over The Top Tower Defense",slow,ingame,2020-10-10 19:31:07 +010097F010FE6000,"Our Two Bedroom Story",gpu;nvdec,ingame,2023-10-10 17:41:20 +0100D5D00C6BE000,"Our World Is Ended.",nvdec,playable,2021-01-19 22:46:57 +01005A700A166000,"OUT OF THE BOX",,playable,2021-01-28 01:34:27 +0100D9F013102000,"Outbreak Lost Hope",crash,boots,2021-04-26 18:01:23 +01006EE013100000,"Outbreak The Nightmare Chronicles",,playable,2022-10-13 10:41:57 +0100A0D013464000,"Outbreak: Endless Nightmares",,playable,2022-10-29 12:35:49 +0100C850130FE000,"Outbreak: Epidemic",,playable,2022-10-13 10:27:31 +0100B450130FC000,"Outbreak: The New Nightmare",,playable,2022-10-19 15:42:07 +0100B8900EFA6000,"Outbuddies DX",gpu,ingame,2022-08-04 22:39:24 +0100DE70085E8000,"Outlast 2",crash;nvdec,ingame,2022-01-22 22:28:05 +01008D4007A1E000,"Outlast: Bundle of Terror",nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26 +01009B900401E000,"Overcooked Special Edition",,playable,2022-08-08 20:48:52 +01006FD0080B2000,"Overcooked! 2",ldn-untested,playable,2022-08-08 16:48:10 +0100F28011892000,"Overcooked! All You Can Eat",ldn-untested;online,playable,2021-04-15 10:33:52 +0100D7F00EC64000,"Overlanders",nvdec;UE4,playable,2022-09-14 20:15:06 +01008EA00E816000,"OVERPASS™",online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47 +0100647012F62000,"Override 2: Super Mech League",online-broken;UE4,playable,2022-10-19 15:56:04 +01008A700F7EE000,"Override: Mech City Brawl - Super Charged Mega Edition",nvdec;online-broken;UE4,playable,2022-09-20 17:33:32 +0100F8600E21E000,"Overwatch® 2",deadlock,boots,2022-09-14 20:22:22 +01005F000CC18000,"OVERWHELM",,playable,2021-01-21 18:37:18 +0100BC2004FF4000,"Owlboy",,playable,2020-10-19 14:24:45 +0100AD9012510000,"PAC-MAN™ 99",gpu;online-broken,ingame,2024-04-23 00:48:25 +010024C001224000,"PAC-MAN™ CHAMPIONSHIP EDITION 2 PLUS",,playable,2021-01-19 22:06:18 +011123900AEE0000,"Paladins",online,menus,2021-01-21 19:21:37 +0100F0D004CAE000,"PAN-PAN A tiny big adventure",audout,playable,2021-01-25 14:42:00 +010083700B730000,"Pang Adventures",,playable,2021-04-10 12:16:59 +010006E00DFAE000,"Pantsu Hunter: Back to the 90s",,playable,2021-02-19 15:12:27 +0100C6A00E94A000,"Panzer Dragoon: Remake",,playable,2020-10-04 04:03:55 +01004AE0108E0000,"Panzer Paladin",,playable,2021-05-05 18:26:00 +010004500DE50000,"Paper Dolls Original",UE4;crash,boots,2020-07-13 20:26:21 +0100A3900C3E2000,"Paper Mario™: The Origami King",audio;Needs Update,playable,2024-08-09 18:27:40 +0100ECD018EBE000,"Paper Mario™: The Thousand-Year Door",gpu;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35 +01006AD00B82C000,"Paperbound Brawlers",,playable,2021-01-25 14:32:15 +0100DC70174E0000,"Paradigm Paradox",vulkan-backend-bug,playable,2022-12-03 22:28:13 +01007FB010DC8000,"Paradise Killer",UE4,playable,2022-10-05 19:33:05 +010063400B2EC000,"Paranautical Activity",,playable,2021-01-25 13:49:19 +01006B5012B32000,"Part Time UFO™",crash,ingame,2023-03-03 03:13:05 +01007FC00A040000,"Party Arcade",online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53 +0100B8E00359E000,"Party Golf",nvdec,playable,2022-08-09 12:38:30 +010022801217E000,"Party Hard 2",nvdec,playable,2022-10-05 20:31:48 +010027D00F63C000,"Party Treats",,playable,2020-07-02 00:05:00 +01001E500EA16000,"Path of Sin: Greed",crash,menus,2021-11-24 08:00:00 +010031F006E76000,"Pato Box",,playable,2021-01-25 15:17:52 +01001F201121E000,"PAW Patrol Mighty Pups Save Adventure Bay",,playable,2022-10-13 12:17:55 +0100360016800000,"PAW Patrol: Grand Prix",gpu,ingame,2024-05-03 16:16:11 +0100CEC003A4A000,"PAW Patrol: On a Roll!",nvdec,playable,2021-01-28 21:14:49 +01000C4015030000,"Pawapoke R",services-horizon,nothing,2024-05-14 14:28:32 +0100A56006CEE000,"Pawarumi",online-broken,playable,2022-09-10 15:19:33 +0100274004052000,"PAYDAY 2",nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39 +010085700ABC8000,"PBA Pro Bowling",nvdec;online-broken;UE4,playable,2022-09-14 23:00:49 +0100F95013772000,"PBA Pro Bowling 2021",online-broken;UE4,playable,2022-10-19 16:46:40 +010072800CBE8000,"PC Building Simulator",,playable,2020-06-12 00:31:58 +010002100CDCC000,"Peaky Blinders: Mastermind",,playable,2022-10-19 16:56:35 +010028A0048A6000,"Peasant Knight",,playable,2020-12-22 09:30:50 +0100C510049E0000,"Penny-Punching Princess",,playable,2022-08-09 13:37:05 +0100CA901AA9C000,"Penny’s Big Breakaway",amd-vendor-bug,playable,2024-05-27 07:58:51 +0100563005B70000,"Perception",UE4;crash;nvdec,menus,2020-12-18 11:49:23 +010011700D1B2000,"Perchang",,playable,2021-01-25 14:19:52 +010089F00A3B4000,"Perfect Angle",,playable,2021-01-21 18:48:45 +01005CD012DC0000,"Perky Little Things",crash;vulkan,boots,2024-08-04 07:22:46 +01005EB013FBA000,"Persephone",,playable,2021-03-23 22:39:19 +0100A0300FC3E000,"Perseverance",,playable,2020-07-13 18:48:27 +010062B01525C000,"Persona 4 Golden",,playable,2024-08-07 17:48:07 +01005CA01580E000,"Persona 5 Royal",gpu,ingame,2024-08-17 21:45:15 +010087701B092000,"Persona 5 Tactica",,playable,2024-04-01 22:21:03 +,"Persona 5: Scramble",deadlock,boots,2020-10-04 03:22:29 +0100801011C3E000,"Persona® 5 Strikers",nvdec;mac-bug,playable,2023-09-26 09:36:01 +010044400EEAE000,"Petoons Party",nvdec,playable,2021-03-02 21:07:58 +010053401147C000,"PGA TOUR 2K21",deadlock;nvdec,ingame,2022-10-05 21:53:50 +0100DDD00C0EA000,"Phantaruk",,playable,2021-06-11 18:09:54 +0100063005C86000,"Phantom Breaker: Battle Grounds Overdrive",audio;nvdec,playable,2024-02-29 14:20:35 +010096F00E5B0000,"Phantom Doctrine",UE4,playable,2022-09-15 10:51:50 +0100C31005A50000,"Phantom Trigger",,playable,2022-08-09 14:27:30 +0100CB000A142000,"Phoenix Wright: Ace Attorney Trilogy",,playable,2023-09-15 22:03:12 +0100DA400F624000,"PHOGS!",online,playable,2021-01-18 15:18:37 +0100BF1003B9A000,"Physical Contact: 2048",slow,playable,2021-01-25 15:18:32 +01008110036FE000,"Physical Contact: SPEED",,playable,2022-08-09 14:40:46 +010077300A86C000,"PIANISTA",online-broken,playable,2022-08-09 14:52:56 +010012100E8DC000,"PICROSS LORD OF THE NAZARICK",,playable,2023-02-08 15:54:56 +0100C9600A88E000,"PICROSS S2",,playable,2020-10-15 12:01:40 +010079200D330000,"PICROSS S3",,playable,2020-10-15 11:55:27 +0100C250115DC000,"PICROSS S4",,playable,2020-10-15 12:33:46 +0100AC30133EC000,"PICROSS S5",,playable,2022-10-17 18:51:42 +010025901432A000,"PICROSS S6",,playable,2022-10-29 17:52:19 +01009B2016104000,"PICROSS S7",,playable,2022-02-16 12:51:25 +010043B00E1CE000,"PictoQuest",,playable,2021-02-27 15:03:16 +0100D06003056000,"Piczle Lines DX",UE4;crash;nvdec,menus,2020-11-16 04:21:31 +010017600B532000,"Piczle Lines DX 500 More Puzzles!",UE4,playable,2020-12-15 23:42:51 +01000FD00D5CC000,"Pig Eat Ball",services,ingame,2021-11-30 01:57:45 +01001CB0106F8000,"Pikmin 3 Deluxe Demo",32-bit;crash;demo;gpu,ingame,2021-06-16 18:38:07 +0100E0B019974000,"Pikmin 4 Demo",gpu;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08 +0100AA80194B0000,"Pikmin™ 1",audio,ingame,2024-05-28 18:56:11 +0100D680194B2000,"Pikmin™ 1+2",gpu,ingame,2023-07-31 08:53:41 +0100F4C009322000,"Pikmin™ 3 Deluxe",gpu;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26 +0100B7C00933A000,"Pikmin™ 4",gpu;crash;UE4,ingame,2024-08-26 03:39:08 +0100D6200E130000,"Pillars of Eternity: Complete Edition",,playable,2021-02-27 00:24:21 +01007A500B0B2000,"Pilot Sports",,playable,2021-01-20 15:04:17 +0100DA70186D4000,"Pinball FX",,playable,2024-05-03 17:09:11 +0100DB7003828000,"Pinball FX3",online-broken,playable,2022-11-11 23:49:07 +01002BA00D662000,"Pine",slow,ingame,2020-07-29 16:57:39 +010041100B148000,"Pinstripe",,playable,2020-11-26 10:40:40 +01002B20174EE000,"Piofiore: Episodio 1926",,playable,2022-11-23 18:36:05 +01009240117A2000,"Piofiore: Fated Memories",nvdec,playable,2020-11-30 14:27:50 +0100EA2013BCC000,"Pixel Game Maker Series Puzzle Pedestrians",,playable,2022-10-24 20:15:50 +0100859013CE6000,"Pixel Game Maker Series Werewolf Princess Kaguya",crash;services,nothing,2021-03-26 00:23:07 +010060A00F5E8000,"Pixel Gladiator",,playable,2020-07-08 02:41:26 +010000E00E612000,"Pixel Puzzle Makeout League",,playable,2022-10-13 12:34:00 +0100382011002000,"PixelJunk Eden 2",crash,ingame,2020-12-17 11:55:52 +0100E4D00A690000,"PixelJunk™ Monsters 2",,playable,2021-06-07 03:40:01 +01004A900C352000,"Pizza Titan Ultra",nvdec,playable,2021-01-20 15:58:42 +05000FD261232000,"Pizza Tower",crash,ingame,2024-09-16 00:21:56 +0100FF8005EB2000,"Plague Road",,playable,2022-08-09 15:27:14 +010030B00C316000,"Planescape: Torment and Icewind Dale: Enhanced Editions",cpu;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26 +010003C0099EE000,"PLANET ALPHA",UE4;gpu,ingame,2020-12-16 14:42:20 +01007EA019CFC000,"Planet Cube: Edge",,playable,2023-03-22 17:10:12 +0100F0A01F112000,"planetarian: The Reverie of a Little Planet & Snow Globe",,playable,2020-10-17 20:26:20 +010087000428E000,"Plantera Deluxe",,playable,2022-08-09 15:36:28 +0100C56010FD8000,"Plants vs. Zombies: Battle for Neighborville™ Complete Edition",gpu;audio;crash,boots,2024-09-02 12:58:14 +0100E5B011F48000,"PLOID SAGA",,playable,2021-04-19 16:58:45 +01009440095FE000,"Pode",nvdec,playable,2021-01-25 12:58:35 +010086F0064CE000,"Poi: Explorer Edition",nvdec,playable,2021-01-21 19:32:00 +0100EB6012FD2000,"Poison Control",,playable,2021-05-16 14:01:54 +010072400E04A000,"Pokémon Café ReMix",,playable,2021-08-17 20:00:04 +01003D200BAA2000,"Pokémon Mystery Dungeon™: Rescue Team DX",mac-bug,playable,2024-01-21 00:16:32 +01008DB008C2C000,"Pokémon Shield + Pokémon Shield Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22 +0100ABF008968000,"Pokémon Sword + Pokémon Sword Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37 +01009AD008C4C000,"Pokémon: Let's Go, Pikachu! demo",slow;demo,playable,2023-11-26 11:23:20 +0100000011D90000,"Pokémon™ Brilliant Diamond",gpu;ldn-works,ingame,2024-08-28 13:26:35 +010015F008C54000,"Pokémon™ HOME",Needs Update;crash;services,menus,2020-12-06 06:01:51 +01001F5010DFA000,"Pokémon™ Legends: Arceus",gpu;Needs Update;ldn-works,ingame,2024-09-19 10:02:02 +01005D100807A000,"Pokémon™ Quest",,playable,2022-02-22 16:12:32 +0100A3D008C5C000,"Pokémon™ Scarlet",gpu;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29 +01008F6008C5E000,"Pokémon™ Violet",gpu;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48 +0100187003A36000,"Pokémon™: Let’s Go, Eevee!",crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04 +010003F003A34000,"Pokémon™: Let’s Go, Pikachu!",crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41 +0100B3F000BE2000,"Pokkén Tournament™ DX",nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08 +010030D005AE6000,"Pokkén Tournament™ DX Demo",demo;opengl-backend-bug,playable,2022-08-10 12:03:19 +0100A3500B4EC000,"Polandball: Can Into Space",,playable,2020-06-25 15:13:26 +0100EAB00605C000,"Poly Bridge",services,playable,2020-06-08 23:32:41 +010017600B180000,"Polygod",slow;regression,ingame,2022-08-10 14:38:14 +010074B00ED32000,"Polyroll",gpu,boots,2021-07-01 16:16:50 +010096B01179A000,"Ponpu",,playable,2020-12-16 19:09:34 +01005C5011086000,"Pooplers",,playable,2020-11-02 11:52:10 +01007EF013CA0000,"Port Royale 4",crash;nvdec,menus,2022-10-30 14:34:06 +01007BB017812000,"Portal",,playable,2024-06-12 03:48:29 +0100ABD01785C000,"Portal 2",gpu,ingame,2023-02-20 22:44:15 +010050D00FE0C000,"Portal Dogs",,playable,2020-09-04 12:55:46 +0100437004170000,"Portal Knights",ldn-untested;online,playable,2021-05-27 19:29:04 +01005FC010EB2000,"Potata: Fairy Flower",nvdec,playable,2020-06-17 09:51:34 +01000A4014596000,"Potion Party",,playable,2021-05-06 14:26:54 +0100E1E00CF1A000,"Power Rangers: Battle for the Grid",,playable,2020-06-21 16:52:42 +0100D1C01C194000,"Powerful Pro Baseball 2024-2025",gpu,ingame,2024-08-25 06:40:48 +01008E100E416000,"PowerSlave Exhumed",gpu,ingame,2023-07-31 23:19:10 +010054F01266C000,"Prehistoric Dude",gpu,ingame,2020-10-12 12:38:48 +,"Pretty Princess Magical Coordinate",,playable,2020-10-15 11:43:41 +01007F00128CC000,"Pretty Princess Party",,playable,2022-10-19 17:23:58 +010009300D278000,"Preventive Strike",nvdec,playable,2022-10-06 10:55:51 +0100210019428000,"Prince of Persia The Lost Crown",crash,ingame,2024-06-08 21:31:58 +01007A3009184000,"Princess Peach™: Showtime!",UE4,playable,2024-09-21 13:39:45 +010024701DC2E000,"Princess Peach™: Showtime! Demo",UE4;demo,playable,2024-03-10 17:46:45 +01001FA01451C000,"Prinny Presents NIS Classics Volume 1: Phantom Brave: The Hermuda Triangle Remastered / Soul Nomad & the World Eaters",crash;Needs Update,boots,2023-02-02 07:23:09 +01008FA01187A000,"Prinny® 2: Dawn of Operation Panties, Dood!",32-bit,playable,2022-10-13 12:42:58 +01007A0011878000,"Prinny®: Can I Really Be the Hero?",32-bit;nvdec,playable,2023-10-22 09:25:25 +010007F00879E000,"PriPara: All Idol Perfect Stage",,playable,2022-11-22 16:35:52 +010029200AB1C000,"Prison Architect: Nintendo Switch™ Edition",,playable,2021-04-10 12:27:58 +0100C1801B914000,"Prison City",gpu,ingame,2024-03-01 08:19:33 +0100F4800F872000,"Prison Princess",,playable,2022-11-20 15:00:25 +0100A9800A1B6000,"Professional Construction – The Simulation",slow,playable,2022-08-10 15:15:45 +010077B00BDD8000,"Professional Farmer: Nintendo Switch™ Edition",slow,playable,2020-12-16 13:38:19 +010018300C83A000,"Professor Lupo and his Horrible Pets",,playable,2020-06-12 00:08:45 +0100D1F0132F6000,"Professor Lupo: Ocean",,playable,2021-04-14 16:33:33 +0100BBD00976C000,"Project Highrise: Architect's Edition",,playable,2022-08-10 17:19:12 +0100ACE00DAB6000,"Project Nimbus: Complete Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43 +01002980140F6000,"Project TRIANGLE STRATEGY™ Debut Demo",UE4;demo,playable,2022-10-24 21:40:27 +0100BDB01150E000,"Project Warlock",,playable,2020-06-16 10:50:41 +,"Psikyo Collection Vol 1",32-bit,playable,2020-10-11 13:18:47 +0100A2300DB78000,"Psikyo Collection Vol. 3",,ingame,2021-06-07 02:46:23 +01009D400C4A8000,"Psikyo Collection Vol.2",32-bit,playable,2021-06-07 03:22:07 +01007A200F2E2000,"Psikyo Shooting Stars Alpha",32-bit,playable,2021-04-13 12:03:43 +0100D7400F2E4000,"Psikyo Shooting Stars Bravo",32-bit,playable,2021-06-14 12:09:07 +0100EC100A790000,"PSYVARIAR DELTA",nvdec,playable,2021-01-20 13:01:46 +,"Puchitto kurasutā",Need-Update;crash;services,menus,2020-07-04 16:44:28 +0100D61010526000,"Pulstario",,playable,2022-10-06 11:02:01 +01009AE00B788000,"Pumped BMX Pro",nvdec;online-broken,playable,2022-09-20 17:40:50 +01006C10131F6000,"Pumpkin Jack",nvdec;UE4,playable,2022-10-13 12:52:32 +010016400F07E000,"Push the Crate",nvdec;UE4,playable,2022-09-15 13:28:41 +0100B60010432000,"Push the Crate 2",UE4;gpu;nvdec,ingame,2021-06-10 14:20:01 +0100F1200F6D8000,"Pushy and Pully in Blockland",,playable,2020-07-04 11:44:41 +0100AAE00CAB4000,"Puyo Puyo Champions",online,playable,2020-06-19 11:35:08 +010038E011940000,"Puyo Puyo™ Tetris® 2",ldn-untested,playable,2023-09-26 11:35:25 +0100C5700ECE0000,"Puzzle & Dragons GOLD",slow,playable,2020-05-13 15:09:34 +010079E01A1E0000,"Puzzle Bobble Everybubble!",audio;ldn-works,playable,2023-06-10 03:53:40 +010043100F0EA000,"Puzzle Book",,playable,2020-09-28 13:26:01 +0100476004A9E000,"Puzzle Box Maker",nvdec;online-broken,playable,2022-08-10 18:00:52 +0100A4E017372000,"Pyramid Quest",gpu,ingame,2023-08-16 21:14:52 +0100F1100E606000,"Q-YO Blaster",gpu,ingame,2020-06-07 22:36:53 +010023600AA34000,"Q.U.B.E. 2",UE4,playable,2021-03-03 21:38:57 +0100A8D003BAE000,"Qbics Paint",gpu;services,ingame,2021-06-07 10:54:09 +0100BA5012E54000,"QUAKE",gpu;crash,menus,2022-08-08 12:40:34 +010048F0195E8000,"Quake II",,playable,2023-08-15 03:42:14 +,"QuakespasmNX",crash;homebrew,nothing,2022-07-23 19:28:07 +010045101288A000,"Quantum Replica",nvdec;UE4,playable,2022-10-30 21:17:22 +0100F1400BA88000,"Quarantine Circular",,playable,2021-01-20 15:24:15 +0100DCF00F13A000,"Queen's Quest 4: Sacred Truce",nvdec,playable,2022-10-13 12:59:21 +0100492012378000,"Quell",gpu,ingame,2021-06-11 15:59:53 +01001DE005012000,"Quest of Dungeons",,playable,2021-06-07 10:29:22 +,"QuietMansion2",,playable,2020-09-03 14:59:35 +0100AF100EE76000,"Quiplash 2 InterLASHional: The Say Anything Party Game!",online-working,playable,2022-10-19 17:43:45 +0100E5400BE64000,"R-Type Dimensions EX",,playable,2020-10-09 12:04:43 +0100F930136B6000,"R-Type® Final 2",slow;nvdec;UE4,ingame,2022-10-30 21:46:29 +01007B0014300000,"R-Type® Final 2 Demo",slow;nvdec;UE4;demo,ingame,2022-10-24 21:57:42 +0100B5A004302000,"R.B.I. Baseball 17",online-working,playable,2022-08-11 11:55:47 +01005CC007616000,"R.B.I. Baseball 18",nvdec;online-working,playable,2022-08-11 11:27:52 +0100FCB00BF40000,"R.B.I. Baseball 19",nvdec;online-working,playable,2022-08-11 11:43:52 +010061400E7D4000,"R.B.I. Baseball 20",,playable,2021-06-15 21:16:29 +0100B4A0115CA000,"R.B.I. Baseball 21",online-working,playable,2022-10-24 22:31:45 +01005BF00E4DE000,"Rabi-Ribi",,playable,2022-08-06 17:02:44 +010075D00DD04000,"Race with Ryan",UE4;gpu;nvdec;slow,ingame,2020-11-16 04:35:33 +0100B8100C54A000,"Rack N Ruin",,playable,2020-09-04 15:20:26 +010024400C516000,"RAD",gpu;crash;UE4,menus,2021-11-29 02:01:56 +010000600CD54000,"Rad Rodgers Radical Edition",nvdec;online-broken,playable,2022-08-10 19:57:23 +0100DA400E07E000,"Radiation City",crash,ingame,2022-09-30 11:15:04 +01009E40095EE000,"Radiation Island",opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04 +0100C8B00D2BE000,"Radical Rabbit Stew",,playable,2020-08-03 12:02:56 +0100BAD013B6E000,"Radio Commander",nvdec,playable,2021-03-24 11:20:46 +01008FA00ACEC000,"RADIOHAMMER STATION",audout,playable,2021-02-26 20:20:06 +01003D00099EC000,"Raging Justice",,playable,2021-06-03 14:06:50 +01005CD013116000,"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",,playable,2022-07-29 15:50:13 +01002B000D97E000,"Raiden V: Director's Cut",deadlock;nvdec,boots,2024-07-12 07:31:46 +01002EE00DC02000,"Railway Empire - Nintendo Switch™ Edition",nvdec,playable,2022-10-03 13:53:50 +01003C700D0DE000,"Rain City",,playable,2020-10-08 16:59:03 +0100BDD014232000,"Rain on Your Parade",,playable,2021-05-06 19:32:04 +010047600BF72000,"Rain World",,playable,2023-05-10 23:34:08 +01009D9010B9E000,"Rainbows, toilets & unicorns",nvdec,playable,2020-10-03 18:08:18 +010010B00DDA2000,"Raji: An Ancient Epic",UE4;gpu;nvdec,ingame,2020-12-16 10:05:25 +010042A00A9CC000,"Rapala Fishing Pro Series",nvdec,playable,2020-12-16 13:26:53 +0100E73010754000,"Rascal Fight",,playable,2020-10-08 13:23:30 +010003F00C5C0000,"Rawr-Off",crash;nvdec,menus,2020-07-02 00:14:44 +01005FF002E2A000,"Rayman® Legends Definitive Edition",nvdec;ldn-works,playable,2023-05-27 18:33:07 +0100F03011616000,"Re:Turn - One Way Trip",,playable,2022-08-29 22:42:53 +01000B20117B8000,"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",gpu;crash;nvdec;vulkan,boots,2023-03-07 21:27:24 +0100A8A00E462000,"Real Drift Racing",,playable,2020-07-25 14:31:31 +010048600CC16000,"Real Heroes: Firefighter",,playable,2022-09-20 18:18:44 +0100E64010BAA000,"realMyst: Masterpiece Edition",nvdec,playable,2020-11-30 15:25:42 +01000F300F082000,"Reaper: Tale of a Pale Swordsman",,playable,2020-12-12 15:12:23 +0100D9B00E22C000,"Rebel Cops",,playable,2022-09-11 10:02:53 +0100CAA01084A000,"Rebel Galaxy Outlaw",nvdec,playable,2022-12-01 07:44:56 +0100EF0015A9A000,"Record of Lodoss War-Deedlit in Wonder Labyrinth-",deadlock;Needs Update;Incomplete,ingame,2022-01-19 10:00:59 +0100CF600FF7A000,"Red Bow",services,ingame,2021-11-29 03:51:34 +0100351013A06000,"Red Colony",,playable,2021-01-25 20:44:41 +01007820196A6000,"Red Dead Redemption",amd-vendor-bug,playable,2024-09-13 13:26:13 +0100069010592000,"Red Death",,playable,2020-08-30 13:07:37 +010075000C608000,"Red Faction Guerrilla Re-Mars-tered",ldn-untested;nvdec;online,playable,2021-06-07 03:02:13 +01002290070E4000,"Red Game Without a Great Name",,playable,2021-01-19 21:42:35 +010045400D73E000,"Red Siren: Space Defense",UE4,playable,2021-04-25 21:21:29 +0100D8A00E880000,"Red Wings: Aces of the Sky",,playable,2020-06-12 01:19:53 +01000D100DCF8000,"Redeemer: Enhanced Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24 +0100326010B98000,"Redout: Space Assault",UE4,playable,2022-10-19 23:04:35 +010007C00E558000,"Reel Fishing: Road Trip Adventure",,playable,2021-03-02 16:06:43 +010045D01273A000,"Reflection of Mine",audio,playable,2020-12-17 15:06:37 +01003AA00F5C4000,"Refreshing Sideways Puzzle Ghost Hammer",,playable,2020-10-18 12:08:54 +01007A800D520000,"Refunct",UE4,playable,2020-12-15 22:46:21 +0100FDF0083A6000,"Regalia: Of Men and Monarchs - Royal Edition",,playable,2022-08-11 12:24:01 +01005FD00F15A000,"Regions of Ruin",,playable,2020-08-05 11:38:58 +,"Reine des Fleurs",cpu;crash,boots,2020-09-27 18:50:39 +0100F1900B144000,"REKT! High Octane Stunts",online,playable,2020-09-28 12:33:56 +01002AD013C52000,"Relicta",nvdec;UE4,playable,2022-10-31 12:48:33 +010095900B436000,"RemiLore",,playable,2021-06-03 18:58:15 +0100FBD00F5F6000,"Remothered: Broken Porcelain",UE4;gpu;nvdec,ingame,2021-06-17 15:13:11 +01001F100E8AE000,"Remothered: Tormented Fathers",nvdec;UE4,playable,2022-10-19 23:26:50 +01008EE00B22C000,"Rento Fortune",ldn-untested;online,playable,2021-01-19 19:52:21 +01007CC0130C6000,"Renzo Racer",,playable,2021-03-23 22:28:05 +01003C400AD42000,"Rescue Tale",,playable,2022-09-20 18:40:18 +010099A00BC1E000,"resident evil 4",nvdec,playable,2022-11-16 21:16:04 +010018100CD46000,"Resident Evil 5",nvdec,playable,2024-02-18 17:15:29 +01002A000CD48000,"Resident Evil 6",nvdec,playable,2022-09-15 14:31:47 +0100643002136000,"Resident Evil Revelations",nvdec;ldn-untested,playable,2022-08-11 12:44:19 +010095300212A000,"Resident Evil Revelations 2",online-broken;ldn-untested,playable,2022-08-11 12:57:50 +0100E7F00FFB8000,"Resolutiion",crash,boots,2021-04-25 21:57:56 +0100FF201568E000,"Restless Night",crash,nothing,2022-02-09 10:54:49 +0100069000078000,"Retail Interactive Display Menu (DevQuestMenu)",services;crash,nothing,2022-08-11 13:19:41 +010086E00BCB2000,"Retimed",,playable,2022-08-11 13:32:39 +0100F17004156000,"Retro City Rampage DX",,playable,2021-01-05 17:04:17 +01000ED014A2C000,"Retro Machina",online-broken,playable,2022-10-31 13:38:58 +010032E00E6E2000,"Return of the Obra Dinn",,playable,2022-09-15 19:56:45 +010027400F708000,"Revenge of Justice",nvdec,playable,2022-11-20 15:43:23 +0100E2E00EA42000,"Reventure",,playable,2022-09-15 20:07:06 +010071D00F156000,"REZ PLZ",,playable,2020-10-24 13:26:12 +0100729012D18000,"Rhythm Fighter",crash,nothing,2021-02-16 18:51:30 +010081D0100F0000,"Rhythm of the Gods",UE4;crash,nothing,2020-10-03 17:39:59 +01009D5009234000,"RICO",nvdec;online-broken,playable,2022-08-11 20:16:40 +01002C700C326000,"Riddled Corpses EX",,playable,2021-06-06 16:02:44 +0100AC600D898000,"Rift Keeper",,playable,2022-09-20 19:48:20 +0100A62002042000,"RiME",UE4;crash;gpu,boots,2020-07-20 15:52:38 +01006AC00EE6E000,"Rimelands: Hammer of Thor",,playable,2022-10-13 13:32:56 +01002FF008C24000,"RingFit Adventure",crash;services,nothing,2021-04-14 19:00:01 +010088E00B816000,"RIOT - Civil Unrest",,playable,2022-08-11 20:27:56 +01002A6006AA4000,"Riptide GP: Renegade",online,playable,2021-04-13 23:33:02 +010065B00B0EC000,"Rise and Shine",,playable,2020-12-12 15:56:43 +0100E9C010EA8000,"Rise of Insanity",,playable,2020-08-30 15:42:14 +01006BA00E652000,"Rise: Race The Future",,playable,2021-02-27 13:29:06 +010020C012F48000,"Rising Hell",,playable,2022-10-31 13:54:02 +010076D00E4BA000,"Risk of Rain 2",online-broken,playable,2024-03-04 17:01:05 +0100E8300A67A000,"RISK® Global Domination",nvdec;online-broken,playable,2022-08-01 18:53:28 +010042500FABA000,"Ritual: Crown of Horns",,playable,2021-01-26 16:01:47 +0100BD300F0EC000,"Ritual: Sorcerer Angel",,playable,2021-03-02 13:51:19 +0100A7D008392000,"Rival Megagun",nvdec;online,playable,2021-01-19 14:01:46 +010069C00401A000,"RIVE: Ultimate Edition",,playable,2021-03-24 18:45:55 +01004E700DFE6000,"River City Girls",nvdec,playable,2020-06-10 23:44:09 +01002E80168F4000,"River City Girls 2",,playable,2022-12-07 00:46:27 +0100B2100767C000,"River City Melee Mach!!",online-broken,playable,2022-09-20 20:51:57 +01008AC0115C6000,"RMX Real Motocross",,playable,2020-10-08 21:06:15 +010053000B986000,"Road Redemption",online-broken,playable,2022-08-12 11:26:20 +010002F009A7A000,"Road to Ballhalla",UE4,playable,2021-06-07 02:22:36 +0100735010F58000,"Road To Guangdong",slow,playable,2020-10-12 12:15:32 +010068200C5BE000,"Roarr! Jurassic Edition",,playable,2022-10-19 23:57:45 +0100618004096000,"Robonauts",nvdec,playable,2022-08-12 11:33:23 +010039A0117C0000,"ROBOTICS;NOTES DaSH",,playable,2020-11-16 23:09:54 +01002A900EE8A000,"ROBOTICS;NOTES ELITE",,playable,2020-11-26 10:28:20 +010044A010BB8000,"Robozarro",,playable,2020-09-03 13:33:40 +01000CC012D74000,"Rock 'N Racing Bundle Grand Prix & Rally",,playable,2021-01-06 20:23:57 +0100A1B00DB36000,"Rock of Ages 3: Make & Break",UE4,playable,2022-10-06 12:18:29 +0100513005AF4000,"Rock'N Racing Off Road DX",,playable,2021-01-10 15:27:15 +01005EE0036EC000,"Rocket League®",gpu;online-broken;ldn-untested,ingame,2024-02-08 19:51:36 +0100E88009A34000,"Rocket Wars",,playable,2020-07-24 14:27:39 +0100EC7009348000,"Rogue Aces",gpu;services;nvdec,ingame,2021-11-30 02:18:30 +01009FA010848000,"Rogue Heroes: Ruins of Tasos",online,playable,2021-04-01 15:41:25 +010056500AD50000,"Rogue Legacy",,playable,2020-08-10 19:17:28 +0100F3B010F56000,"Rogue Robots",,playable,2020-06-16 12:16:11 +01001CC00416C000,"Rogue Trooper Redux",nvdec;online-broken,playable,2022-08-12 11:53:01 +0100C7300C0EC000,"RogueCube",,playable,2021-06-16 12:16:42 +0100B7200FC96000,"Roll'd",,playable,2020-07-04 20:24:01 +01004900113F8000,"RollerCoaster Tycoon 3 Complete Edition",32-bit,playable,2022-10-17 14:18:01 +0100E3900B598000,"RollerCoaster Tycoon Adventures",nvdec,playable,2021-01-05 18:14:18 +010076200CA16000,"Rolling Gunner",,playable,2021-05-26 12:54:18 +0100579011B40000,"Rolling Sky 2",,playable,2022-11-03 10:21:12 +010050400BD38000,"Roman Rumble in Las Vegum - Asterix & Obelix XXL 2",deadlock;nvdec,ingame,2022-07-21 17:54:14 +01001F600829A000,"Romancing SaGa 2",,playable,2022-08-12 12:02:24 +0100D0400D27A000,"Romancing SaGa 3",audio;gpu,ingame,2020-06-27 20:26:18 +010088100DD42000,"Roof Rage",crash;regression,boots,2023-11-12 03:47:18 +0100F3000FA58000,"Roombo: First Blood",nvdec,playable,2020-08-05 12:11:37 +0100936011556000,"Root Double -Before Crime * After Days- Xtend Edition",crash,nothing,2022-02-05 02:03:49 +010030A00DA3A000,"Root Letter: Last Answer",vulkan-backend-bug,playable,2022-09-17 10:25:57 +0100AFE00DDAC000,"Royal Roads",,playable,2020-11-17 12:54:38 +0100E2C00B414000,"RPG Maker MV",nvdec,playable,2021-01-05 20:12:01 +01005CD015986000,"rRootage Reloaded",,playable,2022-08-05 23:20:18 +0000000000000000,"RSDKv5u",homebrew,ingame,2024-04-01 16:25:34 +010009B00D33C000,"Rugby Challenge 4",slow;online-broken;UE4,playable,2022-10-06 12:45:53 +01006EC00F2CC000,"RUINER",UE4,playable,2022-10-03 14:11:33 +010074F00DE4A000,"Run the Fan",,playable,2021-02-27 13:36:28 +0100ADF00700E000,"Runbow",online,playable,2021-01-08 22:47:44 +0100D37009B8A000,"Runbow Deluxe Edition",online-broken,playable,2022-08-12 12:20:25 +010081C0191D8000,"Rune Factory 3 Special",,playable,2023-10-15 08:32:49 +010051D00E3A4000,"Rune Factory 4 Special",32-bit;crash;nvdec,ingame,2023-05-06 08:49:17 +010014D01216E000,"Rune Factory 5 (JP)",gpu,ingame,2021-06-01 12:00:36 +0100E21013908000,"RWBY: Grimm Eclipse - Definitive Edition",online-broken,playable,2022-11-03 10:44:01 +010012C0060F0000,"RXN -Raijin-",nvdec,playable,2021-01-10 16:05:43 +0100B8B012ECA000,"S.N.I.P.E.R. - Hunter Scope",,playable,2021-04-19 15:58:09 +010007700CFA2000,"Saboteur II: Avenging Angel",Needs Update;cpu;crash,nothing,2021-01-26 14:47:37 +0100D94012FE8000,"Saboteur SiO",slow,ingame,2020-12-17 16:59:49 +0100A5200C2E0000,"Safety First!",,playable,2021-01-06 09:05:23 +0100A51013530000,"SaGa Frontier Remastered",nvdec,playable,2022-11-03 13:54:56 +010003A00D0B4000,"SaGa SCARLET GRACE: AMBITIONS™",,playable,2022-10-06 13:20:31 +01008D100D43E000,"Saints Row IV®: Re-Elected™",ldn-untested;LAN,playable,2023-12-04 18:33:37 +0100DE600BEEE000,"SAINTS ROW®: THE THIRD™ - THE FULL PACKAGE",slow;LAN,playable,2023-08-24 02:40:58 +01007F000EB36000,"Sakai and...",nvdec,playable,2022-12-15 13:53:19 +0100B1400E8FE000,"Sakuna: Of Rice and Ruin",,playable,2023-07-24 13:47:13 +0100BBF0122B4000,"Sally Face",,playable,2022-06-06 18:41:24 +0100D250083B4000,"Salt and Sanctuary",,playable,2020-10-22 11:52:19 +0100CD301354E000,"Sam & Max Save the World",,playable,2020-12-12 13:11:51 +010014000C63C000,"Samsara: Deluxe Edition",,playable,2021-01-11 15:14:12 +0100ADF0096F2000,"Samurai Aces for Nintendo Switch",32-bit,playable,2020-11-24 20:26:55 +01006C600E46E000,"Samurai Jack: Battle Through Time",nvdec;UE4,playable,2022-10-06 13:33:59 +01002DF00F76C000,"SAMURAI SHODOWN",UE4;crash;nvdec,menus,2020-09-06 02:17:00 +0100F6800F48E000,"SAMURAI SHODOWN NEOGEO COLLECTION",nvdec,playable,2021-06-14 17:12:56 +0100B6501A360000,"Samurai Warrior",,playable,2023-02-27 18:42:38 +,"Sangoku Rensenki ~Otome no Heihou!~",gpu;nvdec,ingame,2020-10-17 19:13:14 +0100A4700BC98000,"Satsujin Tantei Jack the Ripper",,playable,2021-06-21 16:32:54 +0100F0000869C000,"Saturday Morning RPG",nvdec,playable,2022-08-12 12:41:50 +01006EE00380C000,"Sausage Sports Club",gpu,ingame,2021-01-10 05:37:17 +0100C8300FA90000,"Save Koch",,playable,2022-09-26 17:06:56 +0100D6E008700000,"Save the Ninja Clan",,playable,2021-01-11 13:56:37 +010091000F72C000,"Save Your Nuts",nvdec;online-broken;UE4,playable,2022-09-27 23:12:02 +0100AA00128BA000,"Saviors of Sapphire Wings / Stranger of Sword City Revisited",crash,menus,2022-10-24 23:00:46 +01001C3012912000,"Say No! More",,playable,2021-05-06 13:43:34 +010010A00A95E000,"Sayonara Wild Hearts",,playable,2023-10-23 03:20:01 +0100ACB004006000,"Schlag den Star",slow;nvdec,playable,2022-08-12 14:28:22 +0100394011C30000,"Scott Pilgrim vs. The World™: The Game – Complete Edition",services-horizon;crash,nothing,2024-07-12 08:13:03 +0100E7100B198000,"Scribblenauts Mega Pack",nvdec,playable,2020-12-17 22:56:14 +01001E40041BE000,"Scribblenauts Showdown",gpu;nvdec,ingame,2020-12-17 23:05:53 +0100829018568000,"SD GUNDAM BATTLE ALLIANCE Demo",audio;crash;demo,ingame,2022-08-01 23:01:20 +010055700CEA8000,"SD GUNDAM G GENERATION CROSS RAYS",nvdec,playable,2022-09-15 20:58:44 +010022900D3EC00,"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION",nvdec,playable,2022-09-15 20:45:57 +0100E4A00D066000,"Sea King",UE4;nvdec,playable,2021-06-04 15:49:22 +0100AFE012BA2000,"Sea of Solitude: The Director's Cut",gpu,ingame,2024-07-12 18:29:29 +01008C0016544000,"Sea of Stars",,playable,2024-03-15 20:27:12 +010036F0182C4000,"Sea of Stars Demo",demo,playable,2023-02-12 15:33:56 +0100C2400D68C000,"SeaBed",,playable,2020-05-17 13:25:37 +010077100CA6E000,"Season Match Bundle",,playable,2020-10-27 16:15:22 +010028F010644000,"Secret Files 3",nvdec,playable,2020-10-24 15:32:39 +010075D0101FA000,"Seek Hearts",,playable,2022-11-22 15:06:26 +0100394010844000,"Seers Isle",,playable,2020-11-17 12:28:50 +0100A8900AF04000,"SEGA AGES Alex Kidd in Miracle World",online,playable,2021-05-05 16:35:47 +01001E600AF08000,"SEGA AGES Gain Ground",online,playable,2021-05-05 16:16:27 +0100D4D00AC62000,"SEGA AGES Out Run",,playable,2021-01-11 13:13:59 +01005A300C9F6000,"SEGA AGES Phantasy Star",,playable,2021-01-11 12:49:48 +01005F600CB0E000,"SEGA AGES Puyo Puyo",online,playable,2021-05-05 16:09:28 +010051F00AC5E000,"SEGA AGES Sonic The Hedgehog",slow,playable,2023-03-05 20:16:31 +01000D200C614000,"SEGA AGES Sonic The Hedgehog 2",,playable,2022-09-21 20:26:35 +0100C3E00B700000,"SEGA AGES Space Harrier",,playable,2021-01-11 12:57:40 +010054400D2E6000,"SEGA AGES Virtua Racing",online-broken,playable,2023-01-29 17:08:39 +01001E700AC60000,"SEGA AGES Wonder Boy: Monster Land",online,playable,2021-05-05 16:28:25 +0100B3C014BDA000,"SEGA Genesis™ – Nintendo Switch Online",crash;regression,nothing,2022-04-11 07:27:21 +,"SEGA Mega Drive Classics",online,playable,2021-01-05 11:08:00 +01009840046BC000,"Semispheres",,playable,2021-01-06 23:08:31 +0100D1800D902000,"SENRAN KAGURA Peach Ball",,playable,2021-06-03 15:12:10 +0100E0C00ADAC000,"SENRAN KAGURA Reflexions",,playable,2020-03-23 19:15:23 +01009E500D29C000,"Sentinels of Freedom",,playable,2021-06-14 16:42:19 +0100A5D012DAC000,"SENTRY",,playable,2020-12-13 12:00:24 +010059700D4A0000,"Sephirothic Stories",services,menus,2021-11-25 08:52:17 +010007D00D43A000,"Serious Sam Collection",vulkan-backend-bug,boots,2022-10-13 13:53:34 +0100B2C00E4DA000,"Served!",nvdec,playable,2022-09-28 12:46:00 +010018400C24E000,"Seven Knights -Time Wanderer-",vulkan-backend-bug,playable,2022-10-13 22:08:54 +0100D6F016676000,"Seven Pirates H",,playable,2024-06-03 14:54:12 +0100157004512000,"Severed",,playable,2020-12-15 21:48:48 +0100D5500DA94000,"Shadow Blade: Reload",nvdec,playable,2021-06-11 18:40:43 +0100BE501382A000,"Shadow Gangs",cpu;gpu;crash;regression,ingame,2024-04-29 00:07:26 +0100C3A013840000,"Shadow Man Remastered",gpu,ingame,2024-05-20 06:01:39 +010073400B696000,"Shadowgate",,playable,2021-04-24 07:32:57 +0100371013B3E000,"Shadowrun Returns",gpu;Needs Update,ingame,2022-10-04 21:32:31 +01008310154C4000,"Shadowrun: Dragonfall - Director's Cut",gpu;Needs Update,ingame,2022-10-04 20:52:18 +0100C610154CA000,"Shadowrun: Hong Kong - Extended Edition",gpu;Needs Update,ingame,2022-10-04 20:53:09 +010000000EEF0000,"Shadows 2: Perfidia",,playable,2020-08-07 12:43:46 +0100AD700CBBE000,"Shadows of Adam",,playable,2021-01-11 13:35:58 +01002A800C064000,"Shadowverse Champions Battle",,playable,2022-10-02 22:59:29 +01003B90136DA000,"Shadowverse: Champion's Battle",crash,nothing,2023-03-06 00:31:50 +0100820013612000,"Shady Part of Me",,playable,2022-10-20 11:31:55 +0100B10002904000,"Shakedown: Hawaii",,playable,2021-01-07 09:44:36 +01008DA012EC0000,"Shakes on a Plane",crash,menus,2021-11-25 08:52:25 +0100B4900E008000,"Shalnor Legends: Sacred Lands",,playable,2021-06-11 14:57:11 +010006C00CC10000,"Shanky: The Vegan`s Nightmare",,playable,2021-01-26 15:03:55 +0100430013120000,"Shantae",,playable,2021-05-21 04:53:26 +0100EFD00A4FA000,"Shantae and the Pirate's Curse",,playable,2024-04-29 17:21:57 +0100EB901040A000,"Shantae and the Seven Sirens",nvdec,playable,2020-06-19 12:23:40 +01006A200936C000,"Shantae: Half- Genie Hero Ultimate Edition",,playable,2020-06-04 20:14:20 +0100ADA012370000,"Shantae: Risky's Revenge - Director's Cut",,playable,2022-10-06 20:47:39 +01003AB01062C000,"Shaolin vs Wutang",deadlock,nothing,2021-03-29 20:38:54 +0100B250009B9600,"Shape Of The World0",UE4,playable,2021-03-05 16:42:28 +01004F50085F2000,"She Remembered Caterpillars",,playable,2022-08-12 17:45:14 +01000320110C2000,"She Sees Red - Interactive Movie",nvdec,playable,2022-09-30 11:30:15 +01009EB004CB0000,"Shelter Generations",,playable,2021-06-04 16:52:39 +010020F014DBE000,"Sherlock Holmes: The Devil’s Daughter",gpu,ingame,2022-07-11 00:07:26 +0100B1000AC3A000,"Shift Happens",,playable,2021-01-05 21:24:18 +01000E8009E1C000,"Shift Quantum",UE4;crash,ingame,2020-11-06 21:54:08 +01000750084B2000,"Shiftlings - Enhanced Edition",nvdec,playable,2021-03-04 13:49:54 +01003B0012DC2000,"Shin Megami Tensei III Nocturne HD Remaster",,playable,2022-11-03 22:53:27 +010045800ED1E000,"Shin Megami Tensei III NOCTURNE HD REMASTER",gpu;Needs Update,ingame,2022-11-03 19:57:01 +010063B012DC6000,"Shin Megami Tensei V",UE4,playable,2024-02-21 06:30:07 +010069C01AB82000,"Shin Megami Tensei V: Vengeance",gpu;vulkan-backend-bug,ingame,2024-07-14 11:28:24 +01009050133B4000,"Shing! (サムライフォース:斬!)",nvdec,playable,2022-10-22 00:48:54 +01009A5009A9E000,"Shining Resonance Refrain",nvdec,playable,2022-08-12 18:03:01 +01004EE0104F6000,"Shinsekai Into the Depths™",,playable,2022-09-28 14:07:51 +0100C2F00A568000,"Shio",,playable,2021-02-22 16:25:09 +0100B2E00F13E000,"Shipped",,playable,2020-11-21 14:22:32 +01000E800FCB4000,"Ships",,playable,2021-06-11 16:14:37 +01007430122D0000,"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",nvdec,playable,2022-10-20 11:44:36 +,"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",cpu;crash,boots,2020-09-27 19:01:25 +01000244016BAE00,"Shiro0",gpu,ingame,2024-01-13 08:54:39 +0100CCE00DDB6000,"Shoot 1UP DX",,playable,2020-12-13 12:32:47 +01001180021FA000,"Shovel Knight: Specter of Torment",,playable,2020-05-30 08:34:17 +010057D0021E8000,"Shovel Knight: Treasure Trove",,playable,2021-02-14 18:24:39 +01003DD00BF0E000,"Shred! 2 - ft Sam Pilgrim",,playable,2020-05-30 14:34:09 +01001DE0076A4000,"Shu",nvdec,playable,2020-05-30 09:08:59 +0100A7900B936000,"Shut Eye",,playable,2020-07-23 18:08:35 +010044500C182000,"Sid Meier’s Civilization VI",ldn-untested,playable,2024-04-08 16:03:40 +01007FC00B674000,"Sigi - A Fart for Melusina",,playable,2021-02-22 16:46:58 +0100F1400B0D6000,"Silence",nvdec,playable,2021-06-03 14:46:17 +0100A32010618000,"Silent World",,playable,2020-08-28 13:45:13 +010045500DFE2000,"Silk",nvdec,playable,2021-06-10 15:34:37 +010016D00A964000,"SilverStarChess",,playable,2021-05-06 15:25:57 +0100E8C019B36000,"Simona's Requiem",gpu,ingame,2023-02-21 18:29:19 +01006FE010438000,"Sin Slayers",,playable,2022-10-20 11:53:52 +01002820036A8000,"Sine Mora EX",gpu;online-broken,ingame,2022-08-12 19:36:18 +0100F10012002000,"Singled Out",online,playable,2020-08-03 13:06:18 +0100B8800F858000,"Sinless",nvdec,playable,2020-08-09 20:18:55 +0100B16009C10000,"SINNER: Sacrifice for Redemption",nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33 +0100E9201410E000,"Sir Lovelot",,playable,2021-04-05 16:21:46 +0100134011E32000,"Skate City",,playable,2022-11-04 11:37:39 +0100B2F008BD8000,"Skee-Ball",,playable,2020-11-16 04:44:07 +01001A900F862000,"Skelattack",,playable,2021-06-09 15:26:26 +01008E700F952000,"Skelittle: A Giant Party!",,playable,2021-06-09 19:08:34 +01006C000DC8A000,"Skelly Selest",,playable,2020-05-30 15:38:18 +0100D67006F14000,"Skies of Fury DX",,playable,2020-05-30 16:40:54 +010046B00DE62000,"Skullgirls 2nd Encore",,playable,2022-09-15 21:21:25 +0100D1100BF9C000,"Skulls of the Shogun: Bone-A-Fide Edition",,playable,2020-08-31 18:58:12 +0100D7B011654000,"Skully",nvdec;UE4,playable,2022-10-06 13:52:59 +010083100B5CA000,"Sky Force Anniversary",online-broken,playable,2022-08-12 20:50:07 +01006FE005B6E000,"Sky Force Reloaded",,playable,2021-01-04 20:06:57 +010003F00CC98000,"Sky Gamblers - Afterburner",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55 +010093D00AC38000,"Sky Gamblers: Storm Raiders",gpu;audio;32-bit,ingame,2022-08-12 21:13:36 +010068200E96E000,"Sky Gamblers: Storm Raiders 2",gpu,ingame,2022-09-13 12:24:04 +01004F0010A02000,"Sky Racket",,playable,2020-09-07 12:22:24 +0100DDB004F30000,"Sky Ride",,playable,2021-02-22 16:53:07 +0100C5700434C000,"Sky Rogue",,playable,2020-05-30 08:26:28 +0100C52011460000,"Sky: Children of the Light",cpu;online-broken,nothing,2023-02-23 10:57:10 +010041C01014E000,"Skybolt Zack",,playable,2021-04-12 18:28:00 +0100A0A00D1AA000,"SKYHILL",,playable,2021-03-05 15:19:11 +,"Skylanders Imaginators",crash;services,boots,2020-05-30 18:49:18 +010021A00ABEE000,"SKYPEACE",,playable,2020-05-29 14:14:30 +0100EA400BF44000,"SkyScrappers",,playable,2020-05-28 22:11:25 +0100F3C00C400000,"SkyTime",slow,ingame,2020-05-30 09:24:51 +01003AD00DEAE000,"SlabWell: The Quest For Kaktun's Alpaca",,playable,2021-02-22 17:02:51 +0100224004004000,"Slain: Back from Hell",,playable,2022-08-12 23:36:19 +010026300BA4A000,"Slay the Spire",,playable,2023-01-20 15:09:26 +0100501006494000,"Slayaway Camp: Butcher's Cut",opengl-backend-bug,playable,2022-08-12 23:44:05 +01004E900EDDA000,"Slayin 2",gpu,ingame,2024-04-19 16:15:26 +01004AC0081DC000,"Sleep Tight",gpu;UE4,ingame,2022-08-13 00:17:32 +0100F4500AA4E000,"Slice, Dice & Rice",online,playable,2021-02-22 17:44:23 +010010D011E1C000,"Slide Stars",crash,menus,2021-11-25 08:53:43 +0100112003B8A000,"Slime-san",,playable,2020-05-30 16:15:12 +01002AA00C974000,"SMASHING THE BATTLE",,playable,2021-06-11 15:53:57 +0100C9100B06A000,"SmileBASIC 4",gpu,menus,2021-07-29 17:35:59 +0100207007EB2000,"Smoke And Sacrifice",,playable,2022-08-14 12:38:27 +01009790186FE000,"SMURFS KART",,playable,2023-10-18 00:55:00 +0100F2800D46E000,"Snack World The Dungeon Crawl Gold",gpu;slow;nvdec;audout,ingame,2022-05-01 21:12:44 +0100C0F0020E8000,"Snake Pass",nvdec;UE4,playable,2022-01-03 04:31:52 +010075A00BA14000,"Sniper Elite 3 Ultimate Edition",ldn-untested,playable,2024-04-18 07:47:49 +010007B010FCC000,"Sniper Elite 4",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15 +0100BB000A3AA000,"Sniper Elite V2 Remastered",slow;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13 +01008E20047DC000,"Snipperclips Plus: Cut It Out, Together!",,playable,2023-02-14 20:20:13 +0100704000B3A000,"Snipperclips™ – Cut it out, together!",,playable,2022-12-05 12:44:55 +01004AB00AEF8000,"SNK 40th ANNIVERSARY COLLECTION",,playable,2022-08-14 13:33:15 +010027F00AD6C000,"SNK HEROINES Tag Team Frenzy",nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25 +01008DA00CBBA000,"Snooker 19",nvdec;online-broken;UE4,playable,2022-09-11 17:43:22 +010045300516E000,"Snow Moto Racing Freedom",gpu;vulkan-backend-bug,ingame,2022-08-15 16:05:14 +0100BE200C34A000,"Snowboarding The Next Phase",nvdec,playable,2021-02-23 12:56:58 +0100FBD013AB6000,"SnowRunner",services;crash,boots,2023-10-07 00:01:16 +010017B012AFC000,"Soccer Club Life: Playing Manager",gpu,ingame,2022-10-25 11:59:22 +0100B5000E05C000,"Soccer Pinball",UE4;gpu,ingame,2021-06-15 20:56:51 +010011A00A9A8000,"Soccer Slammers",,playable,2020-05-30 07:48:14 +010095C00F9DE000,"Soccer, Tactics & Glory",gpu,ingame,2022-09-26 17:15:58 +0100590009C38000,"SOL DIVIDE -SWORD OF DARKNESS- for Nintendo Switch",32-bit,playable,2021-06-09 14:13:03 +0100A290048B0000,"Soldam: Drop, Connect, Erase",,playable,2020-05-30 09:18:54 +010008600D1AC000,"Solo: Islands of the Heart",gpu;nvdec,ingame,2022-09-11 17:54:43 +01009EE00E91E000,"Some Distant Memory",,playable,2022-09-15 21:48:19 +01004F401BEBE000,"Song of Nunu: A League of Legends Story",,ingame,2024-07-12 18:53:44 +0100E5400BF94000,"Songbird Symphony",,playable,2021-02-27 02:44:04 +010031D00A604000,"Songbringer",,playable,2020-06-22 10:42:02 +0000000000000000,"Sonic 1 (2013)",crash;homebrew,ingame,2024-04-06 18:31:20 +0000000000000000,"Sonic 2 (2013)",crash;homebrew,ingame,2024-04-01 16:25:30 +0000000000000000,"Sonic A.I.R",homebrew,ingame,2024-04-01 16:25:32 +0000000000000000,"Sonic CD",crash;homebrew,ingame,2024-04-01 16:25:31 +010040E0116B8000,"Sonic Colors: Ultimate",,playable,2022-11-12 21:24:26 +01001270012B6000,"SONIC FORCES™",,playable,2024-07-28 13:11:21 +01004AD014BF0000,"Sonic Frontiers",gpu;deadlock;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53 +01009AA000FAA000,"Sonic Mania",,playable,2020-06-08 17:30:57 +01009FB016286000,"Sonic Origins",crash,ingame,2024-06-02 07:20:15 +01008F701C074000,"SONIC SUPERSTARS",gpu;nvdec,ingame,2023-10-28 17:48:07 +010088801C150000,"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",,playable,2024-08-20 13:26:56 +01005EA01C0FC000,"SONIC X SHADOW GENERATIONS",crash,ingame,2025-01-07 04:20:45 +010064F00C212000,"Soul Axiom Rebooted",nvdec;slow,ingame,2020-09-04 12:41:01 +0100F2100F0B2000,"Soul Searching",,playable,2020-07-09 18:39:07 +01008F2005154000,"South Park™: The Fractured but Whole™ - Standard Edition",slow;online-broken,playable,2024-07-08 17:47:28 +0100B9F00C162000,"Space Blaze",,playable,2020-08-30 16:18:05 +010005500E81E000,"Space Cows",UE4;crash,menus,2020-06-15 11:33:20 +0100707011722000,"Space Elite Force",,playable,2020-11-27 15:21:05 +010047B010260000,"Space Pioneer",,playable,2022-10-20 12:24:37 +010010A009830000,"Space Ribbon",,playable,2022-08-15 17:17:10 +0000000000000000,"SpaceCadetPinball",homebrew,ingame,2024-04-18 19:30:04 +0100D9B0041CE000,"Spacecats with Lasers",,playable,2022-08-15 17:22:44 +010034800FB60000,"Spaceland",,playable,2020-11-01 14:31:56 +010028D0045CE000,"Sparkle 2",,playable,2020-10-19 11:51:39 +01000DC007E90000,"Sparkle Unleashed",,playable,2021-06-03 14:52:15 +0100E4F00AE14000,"Sparkle ZERO",gpu;slow,ingame,2020-03-23 18:19:18 +01007ED00C032000,"Sparklite",,playable,2022-08-06 11:35:41 +0100E6A009A26000,"Spartan",UE4;nvdec,playable,2021-03-05 15:53:19 +010020500E7A6000,"Speaking Simulator",,playable,2020-10-08 13:00:39 +01008B000A5AE000,"Spectrum",,playable,2022-08-16 11:15:59 +0100F18010BA0000,"Speed 3: Grand Prix",UE4,playable,2022-10-20 12:32:31 +010040F00AA9A000,"Speed Brawl",slow,playable,2020-09-18 22:08:16 +01000540139F6000,"Speed Limit",gpu,ingame,2022-09-02 18:37:40 +010061F013A0E000,"Speed Truck Racing",,playable,2022-10-20 12:57:04 +0100E74007EAC000,"Spellspire",,playable,2022-08-16 11:21:21 +010021F004270000,"Spelunker Party!",services,boots,2022-08-16 11:25:49 +0100710013ABA000,"Spelunky",,playable,2021-11-20 17:45:03 +0100BD500BA94000,"Sphinx and the Cursed Mummy",gpu;32-bit;opengl,ingame,2024-05-20 06:00:51 +010092A0102AE000,"Spider Solitaire",,playable,2020-12-16 16:19:30 +010076D0122A8000,"Spinch",,playable,2024-07-12 19:02:10 +01001E40136FE000,"Spinny's Journey",crash,ingame,2021-11-30 03:39:44 +010023E008702000,"Spiral Splatter",,playable,2020-06-04 14:03:57 +0100D1B00B6FA000,"Spirit Hunter: Death Mark",,playable,2020-12-13 10:56:25 +0100FAE00E19A000,"Spirit Hunter: NG",32-bit,playable,2020-12-17 20:38:47 +01005E101122E000,"Spirit of the North",UE4,playable,2022-09-30 11:40:47 +01000AC00F5EC000,"Spirit Roots",nvdec,playable,2020-07-10 13:33:32 +0100BD400DC52000,"Spiritfarer",gpu,ingame,2022-10-06 16:31:38 +01009D60080B4000,"SpiritSphere DX",,playable,2021-07-03 23:37:49 +010042700E3FC000,"Spitlings",online-broken,playable,2022-10-06 16:42:39 +01003BC0000A0000,"Splatoon™ 2",ldn-works;LAN,playable,2024-07-12 19:11:15 +0100C2500FC20000,"Splatoon™ 3",ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11 +0100BA0018500000,"Splatoon™ 3: Splatfest World Premiere",gpu;online-broken;demo,ingame,2022-09-19 03:17:12 +010062800D39C000,"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34 +01009FB0172F4000,"SpongeBob SquarePants: The Cosmic Shake",gpu;UE4,ingame,2023-08-01 19:29:53 +010097C01336A000,"Spooky Chase",,playable,2022-11-04 12:17:44 +0100C6100D75E000,"Spooky Ghosts Dot Com",,playable,2021-06-15 15:16:11 +0100DE9005170000,"Sports Party",nvdec,playable,2021-03-05 13:40:42 +0100E04009BD4000,"Spot The Difference",,playable,2022-08-16 11:49:52 +010052100D1B4000,"Spot The Differences: Party!",,playable,2022-08-16 11:55:26 +01000E6015350000,"Spy Alarm",services,ingame,2022-12-09 10:12:51 +01005D701264A000,"SpyHack",,playable,2021-04-15 10:53:51 +010077B00E046000,"Spyro™ Reignited Trilogy",nvdec;UE4,playable,2022-09-11 18:38:33 +0100085012A0E000,"Squeakers",,playable,2020-12-13 12:13:05 +010009300D31C000,"Squidgies Takeover",,playable,2020-07-20 22:28:08 +0100FCD0102EC000,"Squidlit",,playable,2020-08-06 12:38:32 +0100EBF00E702000,"STAR OCEAN First Departure R",nvdec,playable,2021-07-05 19:29:16 +010065301A2E0000,"STAR OCEAN THE SECOND STORY R",crash,ingame,2024-06-01 02:39:59 +010060D00F658000,"Star Renegades",nvdec,playable,2020-12-11 12:19:23 +0100D7000AE6A000,"Star Story: The Horizon Escape",,playable,2020-08-11 22:31:38 +01009DF015776000,"Star Trek Prodigy: Supernova",nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50 +0100BD100FFBE000,"STAR WARS™ Episode I Racer",slow;nvdec,playable,2022-10-03 16:08:36 +0100BB500EACA000,"STAR WARS™ Jedi Knight II: Jedi Outcast™",gpu,ingame,2022-09-15 22:51:00 +01008CA00FAE8000,"STAR WARS™ Jedi Knight: Jedi Academy",gpu,boots,2021-06-16 12:35:30 +01006DA00DEAC000,"Star Wars™ Pinball",online-broken,playable,2022-09-11 18:53:31 +0100FA10115F8000,"STAR WARS™ Republic Commando™",gpu;32-bit,ingame,2023-10-31 15:57:17 +010040701B948000,"STAR WARS™: Battlefront Classic Collection",gpu;vulkan,ingame,2024-07-12 19:24:21 +0100854015868000,"STAR WARS™: Knights of the Old Republic™",gpu;deadlock,boots,2024-02-12 10:13:51 +0100153014544000,"STAR WARS™: The Force Unleashed™",,playable,2024-05-01 17:41:28 +01005EB00EA10000,"Star-Crossed Myth - The Department of Wishes -",gpu,ingame,2021-06-04 19:34:36 +0100E6B0115FC000,"Star99",online,menus,2021-11-26 14:18:51 +01002100137BA000,"Stardash",,playable,2021-01-21 16:31:19 +0100E65002BB8000,"Stardew Valley",online-broken;ldn-untested,playable,2024-02-14 03:11:19 +01002CC003FE6000,"Starlink: Battle for Atlas™ Digital Edition",services-horizon;crash;Needs Update,nothing,2024-05-05 17:25:11 +010098E010FDA000,"Starlit Adventures Golden Stars",,playable,2020-11-21 12:14:43 +01001BB00AC26000,"STARSHIP AVENGER Operation: Take Back Earth",,playable,2021-01-12 15:52:55 +010000700A572000,"State of Anarchy: Master of Mayhem",nvdec,playable,2021-01-12 19:00:05 +0100844004CB6000,"State of Mind",UE4;crash,boots,2020-06-22 22:17:50 +0100616009082000,"STAY",crash;services,boots,2021-04-23 14:24:52 +0100B61009C60000,"STAY COOL, KOBAYASHI-SAN!: A RIVER CITY RANSOM STORY",,playable,2021-01-26 17:37:28 +01008010118CC000,"Steam Prison",nvdec,playable,2021-04-01 15:34:11 +0100AE100DAFA000,"Steam Tactics",,playable,2022-10-06 16:53:45 +01004DD00C87A000,"Steamburg",,playable,2021-01-13 08:42:01 +01009320084A4000,"SteamWorld Dig",,playable,2024-08-19 12:12:23 +0100CA9002322000,"SteamWorld Dig 2",,playable,2022-12-21 19:25:42 +0100F6D00D83E000,"SteamWorld Quest: Hand of Gilgamech",nvdec,playable,2020-11-09 13:10:04 +01001C6014772000,"Steel Assault",,playable,2022-12-06 14:48:30 +010042800B880000,"STEINS;GATE ELITE",,playable,2020-08-04 07:33:32 +0100CB400E9BC000,"STEINS;GATE: My Darling's Embrace",nvdec,playable,2022-11-20 16:48:34 +01002DE01043E000,"Stela",UE4,playable,2021-06-15 13:28:34 +01005A700C954000,"Stellar Interface",,playable,2022-10-20 13:44:33 +0100BC800EDA2000,"STELLATUM",gpu,playable,2021-03-07 16:30:23 +0100775004794000,"Steredenn: Binary Stars",,playable,2021-01-13 09:19:42 +0100AE0006474000,"Stern Pinball Arcade",,playable,2022-08-16 14:24:41 +0100E24006FA8000,"Stikbold! A Dodgeball Adventure DELUXE",,playable,2021-01-11 20:12:54 +010077B014518000,"Stitchy in Tooki Trouble",,playable,2021-05-06 16:25:53 +010070D00F640000,"STONE",UE4,playable,2022-09-30 11:53:32 +010074400F6A8000,"Stories Untold",nvdec,playable,2022-12-22 01:08:46 +010040D00BCF4000,"Storm Boy",,playable,2022-10-20 14:15:06 +0100B2300B932000,"Storm In A Teacup",gpu,ingame,2021-11-06 02:03:19 +0100D5D00DAF2000,"Story of a Gladiator",,playable,2020-07-29 15:08:18 +010017301007E000,"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",,playable,2021-03-18 11:42:19 +0100ED400EEC2000,"STORY OF SEASONS: Friends of Mineral Town",,playable,2022-10-03 16:40:31 +010078D00E8F4000,"Stranded Sails - Explorers of the Cursed Islands",slow;nvdec;UE4,playable,2022-09-16 11:58:38 +01000A6013F86000,"Strange Field Football",,playable,2022-11-04 12:25:57 +0100DD600DD48000,"Stranger Things 3: The Game",,playable,2021-01-11 17:44:09 +0100D7E011C64000,"Strawberry Vinegar",nvdec,playable,2022-12-05 16:25:40 +010075101EF84000,"Stray",crash,ingame,2025-01-07 04:03:00 +0100024008310000,"Street Fighter 30th Anniversary Collection",online-broken;ldn-partial,playable,2022-08-20 16:50:47 +010012400D202000,"Street Outlaws: The List",nvdec,playable,2021-06-11 12:15:32 +0100888011CB2000,"Street Power Soccer",UE4;crash,boots,2020-11-21 12:28:57 +0100EC9010258000,"Streets of Rage 4",nvdec;online,playable,2020-07-07 21:21:22 +0100BDE012928000,"Strife: Veteran Edition",gpu,ingame,2022-01-15 05:10:42 +010039100DACC000,"Strike Force - War on Terror",crash;Needs Update,menus,2021-11-24 08:08:20 +010038A00E6C6000,"Strike Force Kitty",nvdec,playable,2020-07-29 16:22:15 +010072500D52E000,"Strike Suit Zero: Director's Cut",crash,boots,2021-04-23 17:15:14 +0100FF5005B76000,"STRIKERS1945 for Nintendo Switch",32-bit,playable,2021-06-03 19:35:04 +0100720008ED2000,"STRIKERS1945 Ⅱ for Nintendo Switch",32-bit,playable,2021-06-03 19:43:00 +0100681011B56000,"Struggling",,playable,2020-10-15 20:37:03 +0100AF000B4AE000,"Stunt Kite Party",nvdec,playable,2021-01-25 17:16:56 +0100C5500E7AE000,"STURMWIND EX",audio;32-bit,playable,2022-09-16 12:01:39 +,"Subarashiki Kono Sekai -Final Remix-",services;slow,ingame,2020-02-10 16:21:51 +010001400E474000,"Subdivision Infinity DX",UE4;crash,boots,2021-03-03 14:26:46 +0100E6400BCE8000,"Sublevel Zero Redux",,playable,2022-09-16 12:30:03 +0100EDA00D866000,"Submerged",nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01 +0100429011144000,"Subnautica",vulkan-backend-bug,playable,2022-11-04 13:07:29 +010014C011146000,"Subnautica: Below Zero",,playable,2022-12-23 14:15:13 +0100BF9012AC6000,"Suguru Nature",crash,ingame,2021-07-29 11:36:27 +01005CD00A2A2000,"Suicide Guy",,playable,2021-01-26 13:13:54 +0100DE000C2E4000,"Suicide Guy: Sleepin' Deeply",Needs More Attention,ingame,2022-09-20 23:45:25 +01003D50126A4000,"Sumire",,playable,2022-11-12 13:40:43 +0100A130109B2000,"Summer in Mara",nvdec,playable,2021-03-06 14:10:38 +01004E500DB9E000,"Summer Sweetheart",nvdec,playable,2022-09-16 12:51:46 +0100BFE014476000,"Sunblaze",,playable,2022-11-12 13:59:23 +01002D3007962000,"Sundered: Eldritch Edition",gpu,ingame,2021-06-07 11:46:00 +0100F7000464A000,"Super Beat Sports™",ldn-untested,playable,2022-08-16 16:05:50 +010051A00D716000,"Super Blood Hockey",,playable,2020-12-11 20:01:41 +01007AD00013E000,"Super Bomberman R",nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14 +0100B87017D94000,"SUPER BOMBERMAN R 2",deadlock,boots,2023-09-29 13:19:51 +0100D9B00DB5E000,"Super Cane Magic ZERO",,playable,2022-09-12 15:33:46 +010065F004E5E000,"Super Chariot",,playable,2021-06-03 13:19:01 +0100E5E00C464000,"SUPER DRAGON BALL HEROES WORLD MISSION",nvdec;online-broken,playable,2022-08-17 12:56:30 +010023100B19A000,"Super Dungeon Tactics",,playable,2022-10-06 17:40:40 +010056800B534000,"Super Inefficient Golf",UE4,playable,2022-08-17 15:53:45 +010015700D5DC000,"Super Jumpy Ball",,playable,2020-07-04 18:40:36 +0100196009998000,"Super Kickers League Ultimate",,playable,2021-01-26 13:36:48 +01003FB00C5A8000,"Super Kirby Clash™",ldn-works,playable,2024-07-30 18:21:55 +010000D00F81A000,"Super Korotama",,playable,2021-06-06 19:06:22 +01003E300FCAE000,"Super Loop Drive",nvdec;UE4,playable,2022-09-22 10:58:05 +054507E0B7552000,"Super Mario 64",homebrew,ingame,2024-03-20 16:57:27 +0100277011F1A000,"Super Mario Bros.™ 35",online-broken,menus,2022-08-07 16:27:25 +010015100B514000,"Super Mario Bros.™ Wonder",amd-vendor-bug,playable,2024-09-06 13:21:21 +01009B90006DC000,"Super Mario Maker™ 2",online-broken;ldn-broken,playable,2024-08-25 11:05:19 +0100000000010000,"Super Mario Odyssey™",nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34 +010036B0034E4000,"Super Mario Party™",gpu;Needs Update;ldn-works,ingame,2024-06-21 05:10:16 +0100BC0018138000,"Super Mario RPG™",gpu;audio;nvdec,ingame,2024-06-19 17:43:42 +0000000000000000,"Super Mario World",homebrew,boots,2024-06-13 01:40:31 +010049900F546000,"Super Mario™ 3D All-Stars",services-horizon;slow;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16 +010028600EBDA000,"Super Mario™ 3D World + Bowser’s Fury",ldn-works,playable,2024-07-31 10:45:37 +01004F8006A78000,"Super Meat Boy",services,playable,2020-04-02 23:10:07 +01009C200D60E000,"Super Meat Boy Forever",gpu,boots,2021-04-26 14:25:39 +0100BDD00EC5C000,"Super Mega Space Blaster Special Turbo",online,playable,2020-08-06 12:13:25 +010031F019294000,"Super Monkey Ball Banana Rumble",,playable,2024-06-28 10:39:18 +0100B2A00E1E0000,"Super Monkey Ball: Banana Blitz HD",online-broken,playable,2022-09-16 13:16:25 +01006D000D2A0000,"Super Mutant Alien Assault",,playable,2020-06-07 23:32:45 +01004D600AC14000,"Super Neptunia RPG",nvdec,playable,2022-08-17 16:38:52 +01008D300C50C000,"Super Nintendo Entertainment System™ - Nintendo Switch Online",,playable,2021-01-05 00:29:48 +0100284007D6C000,"Super One More Jump",,playable,2022-08-17 16:47:47 +01001F90122B2000,"Super Punch Patrol",,playable,2024-07-12 19:49:02 +0100331005E8E000,"Super Putty Squad",gpu;32-bit,ingame,2024-04-29 15:51:54 +,"SUPER ROBOT WARS T",online,playable,2021-03-25 11:00:40 +,"SUPER ROBOT WARS V",online,playable,2020-06-23 12:56:37 +,"SUPER ROBOT WARS X",online,playable,2020-08-05 19:18:51 +01004CF00A60E000,"Super Saurio Fly",nvdec,playable,2020-08-06 13:12:14 +010039700D200000,"Super Skelemania",,playable,2020-06-07 22:59:50 +01006A800016E000,"Super Smash Bros.™ Ultimate",gpu;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21 +0100D61012270000,"Super Soccer Blast",gpu,ingame,2022-02-16 08:39:12 +0100A9300A4AE000,"Super Sportmatchen",,playable,2022-08-19 12:34:40 +0100FB400F54E000,"Super Street: Racer",UE4,playable,2022-09-16 13:43:14 +010000500DB50000,"Super Tennis Blast",,playable,2022-08-19 16:20:48 +0100C6800D770000,"Super Toy Cars 2",gpu;regression,ingame,2021-03-02 20:15:15 +010035B00B3F0000,"Super Volley Blast",,playable,2022-08-19 18:14:40 +0100FF60051E2000,"Superbeat: Xonic EX",crash;nvdec,ingame,2022-08-19 18:54:40 +0100630010252000,"SuperEpic: The Entertainment War",,playable,2022-10-13 23:02:48 +01001A500E8B4000,"SUPERHOT",,playable,2021-05-05 19:51:30 +010075701153A000,"Superliminal",,playable,2020-09-03 13:20:50 +0100C01012654000,"Supermarket Shriek",,playable,2022-10-13 23:19:20 +0100A6E01201C000,"Supraland",nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11 +010029A00AEB0000,"Survive! MR.CUBE",,playable,2022-10-20 14:44:47 +01005AB01119C000,"SUSHI REVERSI",,playable,2021-06-11 19:26:58 +0100DDD0085A4000,"Sushi Striker™: The Way of Sushido",nvdec,playable,2020-06-26 20:49:11 +0100D6D00EC2C000,"Sweet Witches",nvdec,playable,2022-10-20 14:56:37 +010049D00C8B0000,"Swimsanity!",online,menus,2021-11-26 14:27:16 +01005DF00DC26000,"SWORD ART ONLINE: FATAL BULLET Complete Edition",UE4;gpu;online,ingame,2021-06-09 16:58:50 +01001B600D1D6000,"SWORD ART ONLINE: Hollow Realization Deluxe Edition",nvdec,playable,2022-08-19 19:19:15 +01000D70049BE000,"Sword of the Guardian",,playable,2020-07-16 12:24:39 +0100E4701355C000,"Sword of the Necromancer",crash,ingame,2022-12-10 01:28:39 +01004BB00421E000,"Syberia 1 & 2",,playable,2021-12-24 12:06:25 +010028C003FD6000,"Syberia 2",gpu,ingame,2022-08-24 12:43:03 +0100CBE004E6C000,"Syberia 3",nvdec,playable,2021-01-25 16:15:12 +010007300C482000,"Sydney Hunter and the Curse of the Mayan",,playable,2020-06-15 12:15:57 +0100D8400DAF0000,"SYNAPTIC DRIVE",online,playable,2020-09-07 13:44:05 +01009E700F448000,"Synergia",,playable,2021-04-06 17:58:04 +01009BF00E7D2000,"SYNTHETIK: Ultimate",gpu;crash,ingame,2022-08-30 03:19:25 +010015B00BB00000,"Table Top Racing: World Tour - Nitro Edition",,playable,2020-04-05 23:21:30 +01000F20083A8000,"Tactical Mind",,playable,2021-01-25 18:05:00 +0100BD700F5F0000,"Tactical Mind 2",,playable,2020-07-01 23:11:07 +0100E12013C1A000,"Tactics Ogre: Reborn",vulkan-backend-bug,playable,2024-04-09 06:21:35 +01007C7006AEE000,"Tactics V: Obsidian Brigade",,playable,2021-02-28 15:09:42 +01002C000B552000,"Taiko no Tatsujin: Drum 'n' Fun!",online-broken;ldn-broken,playable,2023-05-20 15:10:12 +0100BCA0135A0000,"Taiko no Tatsujin: Rhythm Festival",,playable,2023-11-13 13:16:34 +0100DD6012644000,"Taiko no Tatsujin: Rhythmic Adventure Pack",,playable,2020-12-03 07:28:26 +0100346017304000,"Taiko Risshiden V DX",crash,nothing,2022-06-06 16:25:31 +010040A00EA26000,"Taimumari: Complete Edition",,playable,2022-12-06 13:34:49 +0100F0C011A68000,"Tales from the Borderlands",nvdec,playable,2022-10-25 18:44:14 +0100408007078000,"Tales of the Tiny Planet",,playable,2021-01-25 15:47:41 +01002C0008E52000,"Tales of Vesperia™: Definitive Edition",,playable,2024-09-28 03:20:47 +010012800EE3E000,"Tamashii",,playable,2021-06-10 15:26:20 +010008A0128C4000,"Tamiku",gpu,ingame,2021-06-15 20:06:55 +010048F007ADE000,"Tangledeep",crash,boots,2021-01-05 04:08:41 +01007DB010D2C000,"TaniNani",crash;kernel,nothing,2021-04-08 03:06:44 +0100E06012BB4000,"Tank Mechanic Simulator",,playable,2020-12-11 15:10:45 +01007A601318C000,"Tanuki Justice",opengl,playable,2023-02-21 18:28:10 +01004DF007564000,"Tanzia",,playable,2021-06-07 11:10:25 +01002D4011208000,"Task Force Kampas",,playable,2020-11-30 14:44:15 +0100B76011DAA000,"Taxi Chaos",slow;online-broken;UE4,playable,2022-10-25 19:13:00 +0100F43011E5A000,"Tcheco in the Castle of Lucio",,playable,2020-06-27 13:35:43 +010092B0091D0000,"Team Sonic Racing",online-broken;ldn-works,playable,2024-02-05 15:05:27 +0100FE701475A000,"Teenage Mutant Ninja Turtles: Shredder's Revenge",deadlock;crash,boots,2024-09-28 09:31:39 +01005CF01E784000,"Teenage Mutant Ninja Turtles: Splintered Fate",,playable,2024-08-03 13:50:42 +0100FDB0154E4000,"Teenage Mutant Ninja Turtles: The Cowabunga Collection",,playable,2024-01-22 19:39:04 +010021100DF22000,"Telling Lies",,playable,2020-10-23 21:14:51 +0100C8B012DEA000,"Temtem",online-broken,menus,2022-12-17 17:36:11 +0100B2600A398000,"TENGAI for Nintendo Switch",32-bit,playable,2020-11-25 19:52:26 +0100D7A005DFC000,"Tennis",,playable,2020-06-01 20:50:36 +01002970080AA000,"Tennis in the Face",,playable,2022-08-22 14:10:54 +0100092006814000,"Tennis World Tour",online-broken,playable,2022-08-22 14:27:10 +0100950012F66000,"Tennis World Tour 2",online-broken,playable,2022-10-14 10:43:16 +0100E46006708000,"Terraria",online-broken,playable,2022-09-12 16:14:57 +010070C00FB56000,"TERROR SQUID",online-broken,playable,2023-10-30 22:29:29 +010043700EB68000,"TERRORHYTHM (TRRT)",,playable,2021-02-27 13:18:14 +0100FBC007EAE000,"Tesla vs Lovecraft",,playable,2023-11-21 06:19:36 +01005C8005F34000,"Teslagrad",,playable,2021-02-23 14:41:02 +01006F701507A000,"Tested on Humans: Escape Room",,playable,2022-11-12 14:42:52 +0100671016432000,"TETRA for Nintendo Switch™ International Edition",,playable,2020-06-26 20:49:55 +01004E500A15C000,"TETRA's Escape",,playable,2020-06-03 18:21:14 +010040600C5CE000,"Tetris 99 Retail Bundle",gpu;online-broken;ldn-untested,ingame,2024-05-02 16:36:41 +0100EC000D39A000,"Tetsumo Party",,playable,2020-06-09 22:39:55 +01008ED0087A4000,"The Adventure Pals",,playable,2022-08-22 14:48:52 +0100137010152000,"The Adventures of 00 Dilly®",,playable,2020-12-30 19:32:29 +01003B400A00A000,"The Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",nvdec,playable,2022-09-17 11:07:56 +010035C00A4BC000,"The Adventures of Elena Temple",,playable,2020-06-03 23:15:35 +010045A00E038000,"The Alliance Alive HD Remastered",nvdec,playable,2021-03-07 15:43:45 +010079A0112BE000,"The Almost Gone",,playable,2020-07-05 12:33:07 +0100CD500DDAE000,"The Bard's Tale ARPG: Remastered and Resnarkled",gpu;nvdec;online-working,ingame,2024-07-18 12:52:01 +01001E50141BC000,"The Battle Cats Unite!",deadlock,ingame,2021-12-14 21:38:34 +010089600E66A000,"The Big Journey",,playable,2022-09-16 14:03:08 +010021C000B6A000,"The Binding of Isaac: Afterbirth+",,playable,2021-04-26 14:11:56 +0100A5A00B2AA000,"The Bluecoats North & South",nvdec,playable,2020-12-10 21:22:29 +010062500BFC0000,"The Book of Unwritten Tales 2",,playable,2021-06-09 14:42:53 +01002A2004530000,"The Bridge",,playable,2020-06-03 13:53:26 +01008D700AB14000,"The Bug Butcher",,playable,2020-06-03 12:02:04 +01001B40086E2000,"The Bunker",nvdec,playable,2022-09-16 14:24:05 +010069100B7F0000,"The Caligula Effect: Overdose",UE4;gpu,ingame,2021-01-04 11:07:50 +010066800E9F8000,"The Childs Sight",,playable,2021-06-11 19:04:56 +0100B7C01169C000,"The Coma 2: Vicious Sisters",gpu,ingame,2020-06-20 12:51:51 +010033100691A000,"The Coma: Recut",,playable,2020-06-03 15:11:23 +01004170113D4000,"The Complex",nvdec,playable,2022-09-28 14:35:41 +01000F20102AC000,"The Copper Canyon Dixie Dash",UE4,playable,2022-09-29 11:42:29 +01000850037C0000,"The Count Lucanor",nvdec,playable,2022-08-22 15:26:37 +0100EBA01548E000,"The Cruel King and the Great Hero",gpu;services,ingame,2022-12-02 07:02:08 +010051800E922000,"The Dark Crystal: Age of Resistance Tactics",,playable,2020-08-11 13:43:41 +01003DE00918E000,"The Darkside Detective",,playable,2020-06-03 22:16:18 +01000A10041EA000,"The Elder Scrolls V: Skyrim",gpu;crash,ingame,2024-07-14 03:21:31 +01004A9006B84000,"The End Is Nigh",,playable,2020-06-01 11:26:45 +0100CA100489C000,"The Escapists 2",nvdec,playable,2020-09-24 12:31:31 +01001B700BA7C000,"The Escapists: Complete Edition",,playable,2021-02-24 17:50:31 +0100C2E0129A6000,"The Executioner",nvdec,playable,2021-01-23 00:31:28 +01006050114D4000,"The Experiment: Escape Room",gpu,ingame,2022-09-30 13:20:35 +0100B5900DFB2000,"The Eyes of Ara",,playable,2022-09-16 14:44:06 +01002DD00AF9E000,"The Fall",gpu,ingame,2020-05-31 23:31:16 +01003E5002320000,"The Fall Part 2: Unbound",,playable,2021-11-06 02:18:08 +0100CDC00789E000,"The Final Station",nvdec,playable,2022-08-22 15:54:39 +010098800A1E4000,"The First Tree",,playable,2021-02-24 15:51:05 +0100C38004DCC000,"The Flame In The Flood: Complete Edition",gpu;nvdec;UE4,ingame,2022-08-22 16:23:49 +010007700D4AC000,"The Forbidden Arts",,playable,2021-01-26 16:26:24 +010030700CBBC000,"The friends of Ringo Ishikawa",,playable,2022-08-22 16:33:17 +01006350148DA000,"The Gardener and the Wild Vines",gpu,ingame,2024-04-29 16:32:10 +0100B13007A6A000,"The Gardens Between",,playable,2021-01-29 16:16:53 +010036E00FB20000,"The Great Ace Attorney Chronicles",,playable,2023-06-22 21:26:29 +010007B012514000,"The Great Perhaps",,playable,2020-09-02 15:57:04 +01003B300E4AA000,"THE GRISAIA TRILOGY",,playable,2021-01-31 15:53:59 +01001950137D8000,"The Hong Kong Massacre",crash,ingame,2021-01-21 12:06:56 +01004AD00E094000,"The House of Da Vinci",,playable,2021-01-05 14:17:19 +01005A80113D2000,"The House of Da Vinci 2",,playable,2020-10-23 20:47:17 +010088401495E000,"The House of the Dead: Remake",,playable,2025-01-11 00:36:01 +0100E24004510000,"The Hunt - Championship Edition",32-bit,menus,2022-07-21 20:21:25 +01008940086E0000,"The Infectious Madness of Doctor Dekker",nvdec,playable,2022-08-22 16:45:01 +0100B0B00B318000,"The Inner World",nvdec,playable,2020-06-03 21:22:29 +0100A9D00B31A000,"The Inner World - The Last Wind Monk",nvdec,playable,2020-11-16 13:09:40 +0100AE5003EE6000,"The Jackbox Party Pack",online-working,playable,2023-05-28 09:28:40 +010015D003EE4000,"The Jackbox Party Pack 2",online-working,playable,2022-08-22 18:23:40 +0100CC80013D6000,"The Jackbox Party Pack 3",slow;online-working,playable,2022-08-22 18:41:06 +0100E1F003EE8000,"The Jackbox Party Pack 4",online-working,playable,2022-08-22 18:56:34 +010052C00B184000,"The Journey Down: Chapter One",nvdec,playable,2021-02-24 13:32:41 +01006BC00B188000,"The Journey Down: Chapter Three",nvdec,playable,2021-02-24 13:45:27 +01009AB00B186000,"The Journey Down: Chapter Two",nvdec,playable,2021-02-24 13:32:13 +010020500BD98000,"The King's Bird",,playable,2022-08-22 19:07:46 +010031B00DB34000,"the Knight & the Dragon",gpu,ingame,2023-08-14 10:31:43 +01007AF012E16000,"The Language Of Love",Needs Update;crash,nothing,2020-12-03 17:54:00 +010079C017F5E000,"The Lara Croft Collection",services-horizon;deadlock,nothing,2024-07-12 22:45:51 +0100449011506000,"The Last Campfire",,playable,2022-10-20 16:44:19 +0100AAD011592000,"The Last Dead End",gpu;UE4,ingame,2022-10-20 16:59:44 +0100AC800D022000,"THE LAST REMNANT Remastered",nvdec;UE4,playable,2023-02-09 17:24:44 +0100B1900F0B6000,"The Legend of Dark Witch",,playable,2020-07-12 15:18:33 +01001920156C2000,"The Legend of Heroes: Trails from Zero",gpu;mac-bug,ingame,2024-09-14 21:41:41 +01005420101DA000,"The Legend of Heroes: Trails of Cold Steel III",,playable,2020-12-16 10:59:18 +01009B101044C000,"The Legend of Heroes: Trails of Cold Steel III Demo",demo;nvdec,playable,2021-04-23 01:07:32 +0100D3C010DE8000,"The Legend of Heroes: Trails of Cold Steel IV",nvdec,playable,2021-04-23 14:01:05 +01005E5013862000,"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",crash,nothing,2021-09-30 14:41:07 +01008CF01BAAC000,"The Legend of Zelda Echoes of Wisdom",nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01 +0100509005AF2000,"The Legend of Zelda: Breath of the Wild Demo",demo,ingame,2022-12-24 05:02:58 +01007EF00011E000,"The Legend of Zelda™: Breath of the Wild",gpu;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46 +01006BB00C6F0000,"The Legend of Zelda™: Link’s Awakening",gpu;nvdec;mac-bug,ingame,2023-08-09 17:37:40 +01002DA013484000,"The Legend of Zelda™: Skyward Sword HD",gpu,ingame,2024-06-14 16:48:29 +0100F2C0115B6000,"The Legend of Zelda™: Tears of the Kingdom",gpu;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30 +0100A4400BE74000,"The LEGO Movie 2 Videogame",,playable,2023-03-01 11:23:37 +010064B00B95C000,"The Liar Princess and the Blind Prince",audio;slow,playable,2020-06-08 21:23:28 +0100735004898000,"The Lion's Song",,playable,2021-06-09 15:07:16 +0100A5000D590000,"The Little Acre",nvdec,playable,2021-03-02 20:22:27 +01007A700A87C000,"The Long Dark",,playable,2021-02-21 14:19:52 +010052B003A38000,"The Long Reach",nvdec,playable,2021-02-24 14:09:48 +01003C3013300000,"The Long Return",slow,playable,2020-12-10 21:05:10 +0100CE1004E72000,"The Longest Five Minutes",gpu,boots,2023-02-19 18:33:11 +0100F3D0122C2000,"The Longing",gpu,ingame,2022-11-12 15:00:58 +010085A00C5E8000,"The Lord of the Rings: Adventure Card Game - Definitive Edition",online-broken,menus,2022-09-16 15:19:32 +01008A000A404000,"The Lost Child",nvdec,playable,2021-02-23 15:44:20 +0100BAB00A116000,"The Low Road",,playable,2021-02-26 13:23:22 +,"The Mahjong",Needs Update;crash;services,nothing,2021-04-01 22:06:22 +0100DC300AC78000,"The Messenger",,playable,2020-03-22 13:51:37 +0100DEC00B2BC000,"The Midnight Sanctuary",nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32 +0100F1B00B456000,"The MISSING: J.J. Macfield and the Island of Memories",,playable,2022-08-22 19:36:18 +010033300AC1A000,"The Mooseman",,playable,2021-02-24 12:58:57 +01005E9016BDE000,"The movie The Quintessential Bride -Five Memories Spent with You-",,playable,2023-12-14 14:43:43 +0100496004194000,"The Mummy Demastered",,playable,2021-02-23 13:11:27 +01004C500AAF6000,"The Mystery of the Hudson Case",,playable,2020-06-01 11:03:36 +01000CF0084BC000,"The Next Penelope",,playable,2021-01-29 16:26:11 +01001FB00E386000,"THE NINJA SAVIORS Return of the Warriors",online,playable,2021-03-25 23:48:07 +0100B080184BC000,"The Oregon Trail",gpu,ingame,2022-11-25 16:11:49 +0100B0101265C000,"The Otterman Empire",UE4;gpu,ingame,2021-06-17 12:27:15 +01000BC01801A000,"The Outbound Ghost",,nothing,2024-03-02 17:10:58 +0100626011656000,"The Outer Worlds",gpu;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32 +01005C500D690000,"The Park",UE4;crash;gpu,ingame,2020-12-18 12:50:07 +010050101127C000,"The Persistence",nvdec,playable,2021-06-06 19:15:40 +0100CD300880E000,"The Pinball Arcade",online-broken,playable,2022-08-22 19:49:46 +01006BD018B54000,"The Plucky Squire",crash,ingame,2024-09-27 22:32:33 +0100E6A00B960000,"The Princess Guide",,playable,2021-02-24 14:23:34 +010058A00BF1C000,"The Raven Remastered",nvdec,playable,2022-08-22 20:02:47 +0100EB100D17C000,"The Red Strings Club",,playable,2020-06-01 10:51:18 +010079400BEE0000,"The Room",,playable,2021-04-14 18:57:05 +010033100EE12000,"The Ryuo's Work is Never Done!",,playable,2022-03-29 00:35:37 +01002BA00C7CE000,"The Savior's Gang",gpu;nvdec;UE4,ingame,2022-09-21 12:37:48 +0100F3200E7CA000,"The Settlers®: New Allies",deadlock,nothing,2023-10-25 00:18:05 +0100F89003BC8000,"The Sexy Brutale",,playable,2021-01-06 17:48:28 +01001FF00BEE8000,"The Shapeshifting Detective",nvdec,playable,2021-01-10 13:10:49 +010028D00BA1A000,"The Sinking City",nvdec;UE4,playable,2022-09-12 16:41:55 +010041C00A68C000,"The Spectrum Retreat",,playable,2022-10-03 18:52:40 +010029300E5C4000,"The Stanley Parable: Ultra Deluxe",gpu,ingame,2024-07-12 23:18:26 +010007F00AF56000,"The Station",,playable,2022-09-28 18:15:27 +0100858010DC4000,"the StoryTale",,playable,2022-09-03 13:00:25 +0100AA400A238000,"The Stretchers™",nvdec;UE4,playable,2022-09-16 15:40:58 +0100E3100450E000,"The Strike - Championship Edition",gpu;32-bit,boots,2022-12-09 15:58:16 +0100EF200DA60000,"The Survivalists",,playable,2020-10-27 15:51:13 +010040D00B7CE000,"The Swindle",nvdec,playable,2022-08-22 20:53:52 +010037D00D568000,"The Swords of Ditto: Mormo's Curse",slow,ingame,2020-12-06 00:13:12 +01009B300D76A000,"The Tiny Bang Story",,playable,2021-03-05 15:39:05 +0100C3300D8C4000,"The Touryst",crash,ingame,2023-08-22 01:32:38 +010047300EBA6000,"The Tower of Beatrice",,playable,2022-09-12 16:51:42 +010058000A576000,"The Town of Light: Deluxe Edition",gpu,playable,2022-09-21 12:51:34 +0100B0E0086F6000,"The Trail: Frontier Challenge",slow,playable,2022-08-23 15:10:51 +0100EA100F516000,"The Turing Test",nvdec,playable,2022-09-21 13:24:07 +010064E00ECBC000,"The Unicorn Princess",,playable,2022-09-16 16:20:56 +0100BCF00E970000,"The Vanishing of Ethan Carter",UE4,playable,2021-06-09 17:14:47 +0100D0500B0A6000,"The VideoKid",nvdec,playable,2021-01-06 09:28:24 +,"The Voice",services,menus,2020-07-28 20:48:49 +010056E00B4F4000,"The Walking Dead: A New Frontier",,playable,2022-09-21 13:40:48 +010099100B6AC000,"The Walking Dead: Season Two",,playable,2020-08-09 12:57:06 +010029200B6AA000,"The Walking Dead: The Complete First Season",,playable,2021-06-04 13:10:56 +010060F00AA70000,"The Walking Dead: The Final Season - Season Pass",online-broken,playable,2022-08-23 17:22:32 +010095F010568000,"The Wanderer: Frankenstein's Creature",,playable,2020-07-11 12:49:51 +01008B200FC6C000,"The Wardrobe: Even Better Edition",,playable,2022-09-16 19:14:55 +01003D100E9C6000,"The Witcher 3: Wild Hunt",nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51 +0100B1300FF08000,"The Wonderful 101: Remastered",slow;nvdec,playable,2022-09-30 13:49:28 +0100C1500B82E000,"The World Ends with You®: Final Remix",ldn-untested,playable,2022-07-09 01:11:21 +0100E6200D56E000,"The World Next Door",,playable,2022-09-21 14:15:23 +010075900CD1C000,"Thea: The Awakening",,playable,2021-01-18 15:08:47 +010081B01777C000,"THEATRHYTHM FINAL BAR LINE",Incomplete,ingame,2024-08-05 14:24:55 +01001C2010D08000,"They Bleed Pixels",gpu,ingame,2024-08-09 05:52:18 +0100768010970000,"They Came From the Sky",,playable,2020-06-12 16:38:19 +0100CE700F62A000,"Thief of Thieves: Season One",crash;loader-allocator,nothing,2021-11-03 07:16:30 +0100CE400E34E000,"Thief Simulator",,playable,2023-04-22 04:39:11 +01009BD003B36000,"Thimbleweed Park",,playable,2022-08-24 11:15:31 +0100F2300A5DA000,"Think of the Children",deadlock,menus,2021-11-23 09:04:45 +0100066004D68000,"This Is the Police",,playable,2022-08-24 11:37:05 +01004C100A04C000,"This is the Police 2",,playable,2022-08-24 11:49:17 +0100C7C00F77C000,"This Strange Realm Of Mine",,playable,2020-08-28 12:07:24 +0100A8700BC2A000,"This War of Mine: Complete Edition",gpu;32-bit;nvdec,ingame,2022-08-24 12:00:44 +0100AC500EEE8000,"THOTH",,playable,2020-08-05 18:35:28 +0100E910103B4000,"Thronebreaker: The Witcher Tales",nvdec,playable,2021-06-03 16:40:15 +01006F6002840000,"Thumper",gpu,ingame,2024-08-12 02:41:07 +01000AC011588000,"Thy Sword",crash,ingame,2022-09-30 16:43:14 +0100E9000C42C000,"Tick Tock: A Tale for Two",,menus,2020-07-14 14:49:38 +0100B6D00C2DE000,"Tied Together",nvdec,playable,2021-04-10 14:03:46 +010074500699A000,"Timber Tennis: Versus",online,playable,2020-10-03 17:07:15 +01004C500B698000,"Time Carnage",,playable,2021-06-16 17:57:28 +0100F770045CA000,"Time Recoil",,playable,2022-08-24 12:44:03 +0100DD300CF3A000,"Timespinner",gpu,ingame,2022-08-09 09:39:11 +0100393013A10000,"Timothy and the Mysterious Forest",gpu;slow,ingame,2021-06-02 00:42:11 +0100F7C010AF6000,"Tin & Kuna",,playable,2020-11-17 12:16:12 +0100DF900FC52000,"Tiny Gladiators",,playable,2020-12-14 00:09:43 +010061A00AE64000,"Tiny Hands Adventure",,playable,2022-08-24 16:07:48 +010074800741A000,"TINY METAL",UE4;gpu;nvdec,ingame,2021-03-05 17:11:57 +01005D0011A40000,"Tiny Racer",,playable,2022-10-07 11:13:03 +010002401AE94000,"Tiny Thor",gpu,ingame,2024-07-26 08:37:35 +0100A73016576000,"Tinykin",gpu,ingame,2023-06-18 12:12:24 +0100FE801185E000,"Titan Glory",,boots,2022-10-07 11:36:40 +0100605008268000,"Titan Quest",nvdec;online-broken,playable,2022-08-19 21:54:15 +01009C400E93E000,"Titans Pinball",slow,playable,2020-06-09 16:53:52 +010019500DB1E000,"Tlicolity Eyes - twinkle showtime -",gpu,boots,2021-05-29 19:43:44 +010036700F83E000,"To the Moon",,playable,2021-03-20 15:33:38 +010014900865A000,"Toast Time: Smash Up!",crash;services,menus,2020-04-03 12:26:59 +0100A4A00B2E8000,"Toby: The Secret Mine",nvdec,playable,2021-01-06 09:22:33 +0100B5200BB7C000,"ToeJam & Earl: Back in the Groove!",,playable,2021-01-06 22:56:58 +0100B5E011920000,"TOHU",slow,playable,2021-02-08 15:40:44 +0100F3400A432000,"Toki",nvdec,playable,2021-01-06 19:59:23 +01003E500F962000,"Tokyo Dark – Remembrance –",nvdec,playable,2021-06-10 20:09:49 +0100A9400C9C2000,"Tokyo Mirage Sessions™ #FE Encore",32-bit;nvdec,playable,2022-07-07 09:41:07 +0100E2E00CB14000,"Tokyo School Life",,playable,2022-09-16 20:25:54 +010024601BB16000,"Tomb Raider I-III Remastered Starring Lara Croft",gpu;opengl,ingame,2024-09-27 12:32:04 +0100D7F01E49C000,"Tomba! Special Edition",services-horizon,nothing,2024-09-15 21:59:54 +0100D400100F8000,"Tonight We Riot",,playable,2021-02-26 15:55:09 +0100CC00102B4000,"Tony Hawk's™ Pro Skater™ 1 + 2",gpu;Needs Update,ingame,2024-09-24 08:18:14 +010093F00E818000,"Tools Up!",crash,ingame,2020-07-21 12:58:17 +01009EA00E2B8000,"Toon War",,playable,2021-06-11 16:41:53 +010090400D366000,"Torchlight II",,playable,2020-07-27 14:18:37 +010075400DDB8000,"Torchlight III",nvdec;online-broken;UE4,playable,2022-10-14 22:20:17 +01007AF011732000,"TORICKY-S",deadlock,menus,2021-11-25 08:53:36 +0100BEB010F2A000,"Torn Tales: Rebound Edition",,playable,2020-11-01 14:11:59 +0100A64010D48000,"Total Arcade Racing",,playable,2022-11-12 15:12:48 +0100512010728000,"Totally Reliable Delivery Service",online-broken,playable,2024-09-27 19:32:22 +01004E900B082000,"Touhou Genso Wanderer Reloaded",gpu;nvdec,ingame,2022-08-25 11:57:36 +010010F004022000,"Touhou Kobuto V: Burst Battle",,playable,2021-01-11 15:28:58 +0100E9D00D6C2000,"TOUHOU Spell Bubble",,playable,2020-10-18 11:43:43 +0100F7B00595C000,"Tower Of Babel",,playable,2021-01-06 17:05:15 +010094600DC86000,"Tower Of Time",gpu;nvdec,ingame,2020-07-03 11:11:12 +0100A1C00359C000,"TowerFall",,playable,2020-05-16 18:58:07 +0100F6200F77E000,"Towertale",,playable,2020-10-15 13:56:58 +010049E00BA34000,"Townsmen - A Kingdom Rebuilt",nvdec,playable,2022-10-14 22:48:59 +01009FF00A160000,"Toy Stunt Bike: Tiptop's Trials",UE4,playable,2021-04-10 13:56:34 +0100192010F5A000,"Tracks - Toybox Edition",UE4;crash,nothing,2021-02-08 15:19:18 +0100BCA00843A000,"Trailblazers",,playable,2021-03-02 20:40:49 +010009F004E66000,"Transcripted",,playable,2022-08-25 12:13:11 +01005E500E528000,"TRANSFORMERS: BATTLEGROUNDS",online,playable,2021-06-17 18:08:19 +0100BE500BEA2000,"Transistor",,playable,2020-10-22 11:28:02 +0100A8D010BFA000,"Travel Mosaics 2: Roman Holiday",,playable,2021-05-26 12:33:16 +0100102010BFC000,"Travel Mosaics 3: Tokyo Animated",,playable,2021-05-26 12:06:27 +010096D010BFE000,"Travel Mosaics 4: Adventures In Rio",,playable,2021-05-26 11:54:58 +01004C4010C00000,"Travel Mosaics 5: Waltzing Vienna",,playable,2021-05-26 11:49:35 +0100D520119D6000,"Travel Mosaics 6: Christmas Around the World",,playable,2021-05-26 00:52:47 +01000BD0119DE000,"Travel Mosaics 7: Fantastic Berlin",,playable,2021-05-22 18:37:34 +01007DB00A226000,"Travel Mosaics: A Paris Tour",,playable,2021-05-26 12:42:26 +010011600C946000,"Travis Strikes Again: No More Heroes",nvdec;UE4,playable,2022-08-25 12:36:38 +01006EB004B0E000,"Treadnauts",,playable,2021-01-10 14:57:41 +0100D7800E9E0000,"Trials of Mana",UE4,playable,2022-09-30 21:50:37 +0100E1D00FBDE000,"Trials of Mana Demo",nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02 +01003E800A102000,"Trials Rising Standard Edition",,playable,2024-02-11 01:36:39 +0100CC80140F8000,"TRIANGLE STRATEGY™",gpu;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37 +010064E00A932000,"Trine 2: Complete Story",nvdec,playable,2021-06-03 11:45:20 +0100DEC00A934000,"Trine 3: The Artifacts of Power",ldn-untested;online,playable,2021-06-03 12:01:24 +010055E00CA68000,"Trine 4: The Nightmare Prince",gpu,nothing,2025-01-07 05:47:46 +0100D9000A930000,"Trine Enchanted Edition",ldn-untested;nvdec,playable,2021-06-03 11:28:15 +01002D7010A54000,"Trinity Trigger",crash,ingame,2023-03-03 03:09:09 +0100868013FFC000,"TRIVIAL PURSUIT Live! 2",,boots,2022-12-19 00:04:33 +0100F78002040000,"Troll and I™",gpu;nvdec,ingame,2021-06-04 16:58:50 +0100145011008000,"Trollhunters: Defenders of Arcadia",gpu;nvdec,ingame,2020-11-30 13:27:09 +0100FBE0113CC000,"Tropico 6 - Nintendo Switch™ Edition",nvdec;UE4,playable,2022-10-14 23:21:03 +0100D06018DCA000,"Trouble Witches Final! Episode 01: Daughters of Amalgam",,playable,2024-04-08 15:08:11 +0100B5B0113CE000,"Troubleshooter",UE4;crash,nothing,2020-10-04 13:46:50 +010089600FB72000,"Trover Saves The Universe",UE4;crash,nothing,2020-10-03 10:25:27 +0100E6300D448000,"Trüberbrook",,playable,2021-06-04 17:08:00 +0100F2100AA5C000,"Truck and Logistics Simulator",,playable,2021-06-11 13:29:08 +0100CB50107BA000,"Truck Driver",online-broken,playable,2022-10-20 17:42:33 +0100E75004766000,"True Fear: Forsaken Souls - Part 1",nvdec,playable,2020-12-15 21:39:52 +010099900CAB2000,"TT Isle of Man",nvdec,playable,2020-06-22 12:25:13 +010000400F582000,"TT Isle of Man Ride on the Edge 2",gpu;nvdec;online-broken,ingame,2022-09-30 22:13:05 +0100752011628000,"TTV2",,playable,2020-11-27 13:21:36 +0100AFE00452E000,"Tumblestone",,playable,2021-01-07 17:49:20 +010085500D5F6000,"Turok",gpu,ingame,2021-06-04 13:16:24 +0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;vulkan,ingame,2022-09-12 17:50:05 +010004B0130C8000,"Turrican Flashback",audout,playable,2021-08-30 10:07:56 +0100B1F0090F2000,"TurtlePop: Journey to Freedom",,playable,2020-06-12 17:45:39 +0100047009742000,"Twin Robots: Ultimate Edition",nvdec,playable,2022-08-25 14:24:03 +010031200E044000,"Two Point Hospital™",crash;nvdec,ingame,2022-09-22 11:22:23 +010038400C2FE000,"TY the Tasmanian Tiger™ HD",32-bit;crash;nvdec,menus,2020-12-17 21:15:00 +010073A00C4B2000,"Tyd wag vir Niemand",,playable,2021-03-02 13:39:53 +0100D5B00D6DA000,"Type:Rider",,playable,2021-01-06 13:12:55 +010040D01222C000,"UBERMOSH: SANTICIDE",,playable,2020-11-27 15:05:01 +0100992010BF8000,"Ubongo",,playable,2021-02-04 21:15:01 +010079000B56C000,"UglyDolls: An Imperfect Adventure",nvdec;UE4,playable,2022-08-25 14:42:16 +010048901295C000,"Ultimate Fishing Simulator",,playable,2021-06-16 18:38:23 +01009D000FAE0000,"Ultimate Racing 2D",,playable,2020-08-05 17:27:09 +010045200A1C2000,"Ultimate Runner",,playable,2022-08-29 12:52:40 +01006B601117E000,"Ultimate Ski Jumping 2020",online,playable,2021-03-02 20:54:11 +01002D4012222000,"Ultra Hat Dimension",services;audio,menus,2021-11-18 09:05:20 +01009C000415A000,"Ultra Hyperball",,playable,2021-01-06 10:09:55 +01007330027EE000,"Ultra Street Fighter® II: The Final Challengers",ldn-untested,playable,2021-11-25 07:54:58 +01006A300BA2C000,"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",audout,playable,2023-05-04 17:25:23 +0100592005164000,"UNBOX: Newbie's Adventure",UE4,playable,2022-08-29 13:12:56 +01002D900C5E4000,"Uncanny Valley",nvdec,playable,2021-06-04 13:28:45 +010076F011F54000,"Undead & Beyond",nvdec,playable,2022-10-04 09:11:18 +01008F3013E4E000,"Under Leaves",,playable,2021-05-22 18:13:58 +010080B00AD66000,"Undertale",,playable,2022-08-31 17:31:46 +01008F80049C6000,"Unepic",,playable,2024-01-15 17:03:00 +01007820096FC000,"UnExplored",,playable,2021-01-06 10:02:16 +01007D1013512000,"Unhatched",,playable,2020-12-11 12:11:09 +010069401ADB8000,"Unicorn Overlord",,playable,2024-09-27 14:04:32 +0100B1400D92A000,"Unit 4",,playable,2020-12-16 18:54:13 +010045200D3A4000,"Unknown Fate",slow,ingame,2020-10-15 12:27:42 +0100AB2010B4C000,"Unlock The King",,playable,2020-09-01 13:58:27 +0100A3E011CB0000,"Unlock the King 2",,playable,2021-06-15 20:43:55 +01005AA00372A000,"UNO® for Nintendo Switch",nvdec;ldn-untested,playable,2022-07-28 14:49:47 +0100E5D00CC0C000,"Unravel Two",nvdec,playable,2024-05-23 15:45:05 +010001300CC4A000,"Unruly Heroes",,playable,2021-01-07 18:09:31 +0100B410138C0000,"Unspottable",,playable,2022-10-25 19:28:49 +010082400BCC6000,"Untitled Goose Game",,playable,2020-09-26 13:18:06 +0100E49013190000,"Unto The End",gpu,ingame,2022-10-21 11:13:29 +0100B110109F8000,"Urban Flow",services,playable,2020-07-05 12:51:47 +010054F014016000,"Urban Street Fighting",,playable,2021-02-20 19:16:36 +01001B10068EC000,"Urban Trial Playground",UE4;nvdec;online,playable,2021-03-25 20:56:51 +0100A2500EB92000,"Urban Trial Tricky",nvdec;UE4,playable,2022-12-06 13:07:56 +01007C0003AEC000,"Use Your Words",nvdec;online-broken,menus,2022-08-29 17:22:10 +0100D4300EBF8000,"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44 +010024200E00A000,"Uta no☆Prince-sama♪ Repeat Love",nvdec,playable,2022-12-09 09:21:51 +010029B00CC3E000,"UTOPIA 9 - A Volatile Vacation",nvdec,playable,2020-12-16 17:06:42 +010064400B138000,"V-Rally 4",gpu;nvdec,ingame,2021-06-07 19:37:31 +0100A6700D66E000,"VA-11 HALL-A",,playable,2021-02-26 15:05:34 +01009E2003FE2000,"Vaccine",nvdec,playable,2021-01-06 01:02:07 +010089700F30C000,"Valfaris",,playable,2022-09-16 21:37:24 +0100CAF00B744000,"Valkyria Chronicles",32-bit;crash;nvdec,ingame,2022-11-23 20:03:32 +01005C600AC68000,"Valkyria Chronicles 4",audout;nvdec,playable,2021-06-03 18:12:25 +0100FBD00B91E000,"Valkyria Chronicles 4 Demo",slow;demo,ingame,2022-08-29 20:39:07 +0100E0E00B108000,"Valley",nvdec,playable,2022-09-28 19:27:58 +010089A0197E4000,"Vampire Survivors",,ingame,2024-06-17 09:57:38 +010020C00FFB6000,"Vampire: The Masquerade - Coteries of New York",,playable,2020-10-04 14:55:22 +01000BD00CE64000,"VAMPYR",nvdec;UE4,playable,2022-09-16 22:15:51 +01007C500D650000,"Vandals",,playable,2021-01-27 21:45:46 +010030F00CA1E000,"Vaporum",nvdec,playable,2021-05-28 14:25:33 +010045C0109F2000,"VARIABLE BARRICADE NS",nvdec,playable,2022-02-26 15:50:13 +0100FE200AF48000,"VASARA Collection",nvdec,playable,2021-02-28 15:26:10 +0100AD300E4FA000,"Vasilis",,playable,2020-09-01 15:05:35 +01009CD003A0A000,"Vegas Party",,playable,2021-04-14 19:21:41 +010098400E39E000,"Vektor Wars",online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46 +01003A8018E60000,"Vengeful Guardian: Moonrider",deadlock,boots,2024-03-17 23:35:37 +010095B00DBC8000,"Venture Kid",crash;gpu,ingame,2021-04-18 16:33:17 +0100C850134A0000,"Vera Blanc: Full Moon",audio,playable,2020-12-17 12:09:30 +0100379013A62000,"Very Very Valet",nvdec,playable,2022-11-12 15:25:51 +01006C8014DDA000,"Very Very Valet Demo",crash;Needs Update;demo,boots,2022-11-12 15:26:13 +010057B00712C000,"Vesta",nvdec,playable,2022-08-29 21:03:39 +0100E81007A06000,"Victor Vran Overkill Edition",gpu;deadlock;nvdec;opengl,ingame,2022-08-30 11:46:56 +01005880063AA000,"Violett",nvdec,playable,2021-01-28 13:09:36 +010037900CB1C000,"Viviette",,playable,2021-06-11 15:33:40 +0100D010113A8000,"Void Bastards",,playable,2022-10-15 00:04:19 +0100FF7010E7E000,"void tRrLM(); //Void Terrarium",gpu;Needs Update;regression,ingame,2023-02-10 01:13:25 +010078D0175EE000,"void* tRrLM2(); //Void Terrarium 2",,playable,2023-12-21 11:00:41 +0100B1A0066DC000,"Volgarr the Viking",,playable,2020-12-18 15:25:50 +0100A7900E79C000,"Volta-X",online-broken,playable,2022-10-07 12:20:51 +01004D8007368000,"Vostok Inc.",,playable,2021-01-27 17:43:59 +0100B1E0100A4000,"Voxel Galaxy",,playable,2022-09-28 22:45:02 +0100AFA011068000,"Voxel Pirates",,playable,2022-09-28 22:55:02 +0100BFB00D1F4000,"Voxel Sword",,playable,2022-08-30 14:57:27 +01004E90028A2000,"Vroom in the night sky",Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29 +0100C7C00AE6C000,"VSR: Void Space Racing",,playable,2021-01-27 14:08:59 +0100B130119D0000,"Waifu Uncovered",crash,ingame,2023-02-27 01:17:46 +0100E29010A4A000,"Wanba Warriors",,playable,2020-10-04 17:56:22 +010078800825E000,"Wanderjahr TryAgainOrWalkAway",,playable,2020-12-16 09:46:04 +0100B27010436000,"Wanderlust Travel Stories",,playable,2021-04-07 16:09:12 +0100F8A00853C000,"Wandersong",nvdec,playable,2021-06-04 15:33:34 +0100D67013910000,"Wanna Survive",,playable,2022-11-12 21:15:43 +010056901285A000,"War Dogs: Red's Return",,playable,2022-11-13 15:29:01 +01004FA01391A000,"War Of Stealth - assassin",,playable,2021-05-22 17:34:38 +010035A00D4E6000,"War Party",nvdec,playable,2021-01-27 18:26:32 +010049500DE56000,"War Tech Fighters",nvdec,playable,2022-09-16 22:29:31 +010084D00A134000,"War Theatre",gpu,ingame,2021-06-07 19:42:45 +0100B6B013B8A000,"War Truck Simulator",,playable,2021-01-31 11:22:54 +0100563011B4A000,"War-Torn Dreams",crash,nothing,2020-10-21 11:36:16 +010054900F51A000,"WARBORN",,playable,2020-06-25 12:36:47 +01000F0002BB6000,"Wargroove",online-broken,playable,2022-08-31 10:30:45 +0100C6000EEA8000,"Warhammer 40,000: Mechanicus",nvdec,playable,2021-06-13 10:46:38 +0100E5600D7B2000,"WARHAMMER 40,000: SPACE WOLF",online-broken,playable,2022-09-20 21:11:20 +010031201307A000,"Warhammer Age of Sigmar: Storm Ground",nvdec;online-broken;UE4,playable,2022-11-13 15:46:14 +01002FF00F460000,"Warhammer Quest 2: The End Times",,playable,2020-08-04 15:28:03 +0100563010E0C000,"WarioWare™: Get It Together!",gpu;opengl-backend-bug,ingame,2024-04-23 01:04:56 +010045B018EC2000,"WarioWare™: Move It!",,playable,2023-11-14 00:23:51 +0100E0400E320000,"Warlocks 2: God Slayers",,playable,2020-12-16 17:36:50 +0100DB300A026000,"Warp Shift",nvdec,playable,2020-12-15 14:48:48 +010032700EAC4000,"WarriOrb",UE4,playable,2021-06-17 15:45:14 +0100E8500AD58000,"WARRIORS OROCHI 4 ULTIMATE",nvdec;online-broken,playable,2024-08-07 01:50:37 +0100CD900FB24000,"WARTILE",UE4;crash;gpu,menus,2020-12-11 21:56:10 +010039A00BC64000,"Wasteland 2: Director's Cut",nvdec,playable,2021-01-27 13:34:11 +0100B79011F06000,"Water Balloon Mania",,playable,2020-10-23 20:20:59 +0100BA200C378000,"Way of the Passive Fist",gpu,ingame,2021-02-26 21:07:06 +0100560010E3E000,"We should talk.",crash,nothing,2020-08-03 12:32:36 +010096000EEBA000,"Welcome to Hanwell",UE4;crash,boots,2020-08-03 11:54:57 +0100D7F010B94000,"Welcome to Primrose Lake",,playable,2022-10-21 11:30:57 +010035600EC94000,"Wenjia",,playable,2020-06-08 11:38:30 +010031B00A4E8000,"West of Loathing",,playable,2021-01-28 12:35:19 +010038900DFE0000,"What Remains of Edith Finch",slow;UE4,playable,2022-08-31 19:57:59 +010033600ADE6000,"Wheel of Fortune®",crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24 +0100DFC00405E000,"Wheels of Aurelia",,playable,2021-01-27 21:59:25 +010027D011C9C000,"Where Angels Cry",gpu;nvdec,ingame,2022-09-30 22:24:47 +0100FDB0092B4000,"Where Are My Friends?",,playable,2022-09-21 14:39:26 +01000C000C966000,"Where the Bees Make Honey",,playable,2020-07-15 12:40:49 +010017500E7E0000,"Whipseey and the Lost Atlas",,playable,2020-06-23 20:24:14 +010015A00AF1E000,"Whispering Willows",nvdec,playable,2022-09-30 22:33:05 +010027F0128EA000,"Who Wants to Be a Millionaire?",crash,nothing,2020-12-11 20:22:42 +0100C7800CA06000,"Widget Satchel",,playable,2022-09-16 22:41:07 +0100CFC00A1D8000,"Wild Guns™ Reloaded",,playable,2021-01-28 12:29:05 +010071F00D65A000,"Wilmot's Warehouse",audio;gpu,ingame,2021-06-02 17:24:32 +010048800B638000,"Windjammers",online,playable,2020-10-13 11:24:25 +010059900BA3C000,"Windscape",,playable,2022-10-21 11:49:42 +0100D6800CEAC000,"Windstorm: An Unexpected Arrival",UE4,playable,2021-06-07 19:33:19 +01005A100B314000,"Windstorm: Start of a Great Friendship",UE4;gpu;nvdec,ingame,2020-12-22 13:17:48 +010035B012F28000,"Wing of Darkness",UE4,playable,2022-11-13 16:03:51 +0100A4A015FF0000,"Winter Games 2023",deadlock,menus,2023-11-07 20:47:36 +010012A017F18800,"Witch On The Holy Night",,playable,2023-03-06 23:28:11 +0100454012E32000,"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",crash,ingame,2021-08-08 11:56:18 +01002FC00C6D0000,"Witch Thief",,playable,2021-01-27 18:16:07 +010061501904E000,"Witch's Garden",gpu;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24 +0100BD4011FFE000,"Witcheye",,playable,2020-12-14 22:56:08 +0100522007AAA000,"Wizard of Legend",,playable,2021-06-07 12:20:46 +010081900F9E2000,"Wizards of Brandel",,nothing,2020-10-14 15:52:33 +0100C7600E77E000,"Wizards: Wand of Epicosity",,playable,2022-10-07 12:32:06 +01009040091E0000,"Wolfenstein II®: The New Colossus™",gpu,ingame,2024-04-05 05:39:46 +01003BD00CAAE000,"Wolfenstein: Youngblood",online-broken,boots,2024-07-12 23:49:20 +010037A00F5E2000,"Wonder Blade",,playable,2020-12-11 17:55:31 +0100B49016FF0000,"Wonder Boy Anniversary Collection",deadlock,nothing,2023-04-20 16:01:48 +0100EB2012E36000,"Wonder Boy Asha in Monster World",crash,nothing,2021-11-03 08:45:06 +0100A6300150C000,"Wonder Boy: The Dragon's Trap",,playable,2021-06-25 04:53:21 +0100F5D00C812000,"Wondershot",,playable,2022-08-31 21:05:31 +0100E0300EB04000,"Woodle Tree 2: Deluxe",gpu;slow,ingame,2020-06-04 18:44:00 +0100288012966000,"Woodsalt",,playable,2021-04-06 17:01:48 +010083E011BC8000,"Wordify",,playable,2020-10-03 09:01:07 +01009D500A194000,"World Conqueror X",,playable,2020-12-22 16:10:29 +010072000BD32000,"WORLD OF FINAL FANTASY MAXIMA",,playable,2020-06-07 13:57:23 +010009E001D90000,"World of Goo",gpu;32-bit;crash;regression,boots,2024-04-12 05:52:14 +010061F01DB7C800,"World of Goo 2",,boots,2024-08-08 22:52:49 +01001E300B038000,"World Soccer Pinball",,playable,2021-01-06 00:37:02 +010048900CF64000,"Worldend Syndrome",,playable,2021-01-03 14:16:32 +01008E9007064000,"WorldNeverland - Elnea Kingdom",,playable,2021-01-28 17:44:23 +010000301025A000,"Worlds of Magic: Planar Conquest",,playable,2021-06-12 12:51:28 +01009CD012CC0000,"Worm Jazz",gpu;services;UE4;regression,ingame,2021-11-10 10:33:04 +01001AE005166000,"Worms W.M.D",gpu;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59 +010037500C4DE000,"Worse Than Death",,playable,2021-06-11 16:05:40 +01006F100EB16000,"Woven",nvdec,playable,2021-06-02 13:41:08 +010087800DCEA000,"WRC 8 FIA World Rally Championship",nvdec,playable,2022-09-16 23:03:36 +01001A0011798000,"WRC 9 The Official Game",gpu;slow;nvdec,ingame,2022-10-25 19:47:39 +0100DC0012E48000,"Wreckfest",,playable,2023-02-12 16:13:00 +0100C5D00EDB8000,"Wreckin' Ball Adventure",UE4,playable,2022-09-12 18:56:28 +010033700418A000,"Wulverblade",nvdec,playable,2021-01-27 22:29:05 +01001C400482C000,"Wunderling DX",audio;crash,ingame,2022-09-10 13:20:12 +01003B401148E000,"Wurroom",,playable,2020-10-07 22:46:21 +010081700EDF4000,"WWE 2K Battlegrounds",nvdec;online-broken;UE4,playable,2022-10-07 12:44:40 +010009800203E000,"WWE 2K18",nvdec,playable,2023-10-21 17:22:01 +0100DF100B97C000,"X-Morph: Defense",,playable,2020-06-22 11:05:31 +0100D0B00FB74000,"XCOM® 2 Collection",gpu;crash,ingame,2022-10-04 09:38:30 +0100CC9015360000,"XEL",gpu,ingame,2022-10-03 10:19:39 +0100C9F009F7A000,"Xenoblade Chronicles 2: Torna ~ The Golden Country",slow;nvdec,playable,2023-01-28 16:47:28 +0100E95004038000,"Xenoblade Chronicles™ 2",deadlock;amd-vendor-bug,ingame,2024-03-28 14:31:41 +010074F013262000,"Xenoblade Chronicles™ 3",gpu;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44 +0100FF500E34A000,"Xenoblade Chronicles™ Definitive Edition",nvdec,playable,2024-05-04 20:12:41 +010028600BA16000,"Xenon Racer",nvdec;UE4,playable,2022-08-31 22:05:30 +010064200C324000,"Xenon Valkyrie+",,playable,2021-06-07 20:25:53 +0100928005BD2000,"Xenoraid",,playable,2022-09-03 13:01:10 +01005B5009364000,"Xeodrifter",,playable,2022-09-03 13:18:39 +01006FB00DB02000,"Yaga",nvdec,playable,2022-09-16 23:17:17 +010076B0101A0000,"YesterMorrow",crash,ingame,2020-12-17 17:15:25 +010085500B29A000,"Yet Another Zombie Defense HD",,playable,2021-01-06 00:18:39 +0100725019978000,"YGGDRA UNION ~WE'LL NEVER FIGHT ALONE~",,playable,2020-04-03 02:20:47 +0100634008266000,"YIIK: A Postmodern RPG",,playable,2021-01-28 13:38:37 +0100C0000CEEA000,"Yo kai watch 1 for Nintendo Switch",gpu;opengl,ingame,2024-05-28 11:11:49 +010086C00AF7C000,"Yo-Kai Watch 4++",,playable,2024-06-18 20:21:44 +010002D00632E000,"Yoku's Island Express",nvdec,playable,2022-09-03 13:59:02 +0100F47016F26000,"Yomawari 3",,playable,2022-05-10 08:26:51 +010012F00B6F2000,"Yomawari: The Long Night Collection",,playable,2022-09-03 14:36:59 +0100CC600ABB2000,"Yonder: The Cloud Catcher Chronicles (Retail Only)",,playable,2021-01-28 14:06:25 +0100BE50042F6000,"Yono and the Celestial Elephants",,playable,2021-01-28 18:23:58 +0100F110029C8000,"Yooka-Laylee",,playable,2021-01-28 14:21:45 +010022F00DA66000,"Yooka-Laylee and the Impossible Lair",,playable,2021-03-05 17:32:21 +01006000040C2000,"Yoshi’s Crafted World™",gpu;audout,ingame,2021-08-30 13:25:51 +0100AE800C9C6000,"Yoshi’s Crafted World™ Demo",gpu,boots,2020-12-16 14:57:40 +,"Yoshiwara Higanbana Kuon no Chigiri",nvdec,playable,2020-10-17 19:14:46 +01003A400C3DA800,"YouTube",,playable,2024-06-08 05:24:10 +00100A7700CCAA40,"Youtubers Life00",nvdec,playable,2022-09-03 14:56:19 +0100E390124D8000,"Ys IX: Monstrum Nox",,playable,2022-06-12 04:14:42 +0100F90010882000,"Ys Origin",nvdec,playable,2024-04-17 05:07:33 +01007F200B0C0000,"Ys VIII: Lacrimosa of DANA",nvdec,playable,2023-08-05 09:26:41 +010022400BE5A000,"Yu-Gi-Oh! Legacy of the Duelist : Link Evolution",,playable,2024-09-27 21:48:43 +01002D60188DE000,"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",crash,ingame,2023-03-17 01:54:01 +010037D00DBDC000,"YU-NO: A girl who chants love at the bound of this world.",nvdec,playable,2021-01-26 17:03:52 +0100B56011502000,"Yumeutsutsu Re:After",,playable,2022-11-20 16:09:06 +,"Yunohana Spring! - Mellow Times -",audio;crash,menus,2020-09-27 19:27:40 +0100307011C44000,"Yuppie Psycho: Executive Edition",crash,ingame,2020-12-11 10:37:06 +0100FC900963E000,"Yuri",,playable,2021-06-11 13:08:50 +010092400A678000,"Zaccaria Pinball",online-broken,playable,2022-09-03 15:44:28 +0100E7900C4C0000,"Zarvot",,playable,2021-01-28 13:51:36 +01005F200F7C2000,"Zen Chess Collection",,playable,2020-07-01 22:28:27 +01008DD0114AE000,"Zenge",,playable,2020-10-22 13:23:57 +0100057011E50000,"Zengeon",services-horizon;crash,boots,2024-04-29 15:43:07 +0100AAC00E692000,"Zenith",,playable,2022-09-17 09:57:02 +0100A6A00894C000,"ZERO GUNNER 2- for Nintendo Switch",,playable,2021-01-04 20:17:14 +01004B001058C000,"Zero Strain",services;UE4,menus,2021-11-10 07:48:32 +,"Zettai kaikyu gakuen",gpu;nvdec,ingame,2020-08-25 15:15:54 +0100D7B013DD0000,"Ziggy the Chaser",,playable,2021-02-04 20:34:27 +010086700EF16000,"ZikSquare",gpu,ingame,2021-11-06 02:02:48 +010069C0123D8000,"Zoids Wild Blast Unleashed",nvdec,playable,2022-10-15 11:26:59 +0100C7300EEE4000,"Zombie Army Trilogy",ldn-untested;online,playable,2020-12-16 12:02:28 +01006CF00DA8C000,"Zombie Driver Immortal Edition",nvdec,playable,2020-12-14 23:15:10 +0100CFE003A64000,"ZOMBIE GOLD RUSH",online,playable,2020-09-24 12:56:08 +01001740116EC000,"Zombie's Cool",,playable,2020-12-17 12:41:26 +01000E5800D32C00,"Zombieland: Double Tap - Road Trip0",,playable,2022-09-17 10:08:45 +0100CD300A1BA000,"Zombillie",,playable,2020-07-23 17:42:23 +01001EE00A6B0000,"Zotrix: Solar Division",,playable,2021-06-07 20:34:05 +0100B9B00C6A4000,"この世の果てで恋を唄う少女YU-NO",audio,ingame,2021-01-22 07:00:16 +,"スーパーファミコン Nintendo Switch Online",slow,ingame,2020-03-14 05:48:38 +01000BB01CB8A000,"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",,nothing,2024-09-28 07:03:14 +010065500B218000,"メモリーズオフ - Innocent Fille",,playable,2022-12-02 17:36:48 +010032400E700000,"二ノ国 白き聖灰の女王",services;32-bit,menus,2023-04-16 17:11:06 +0100F3100DA46000,"初音ミク Project DIVA MEGA39's",audio;loader-allocator,playable,2022-07-29 11:45:52 +010047F012BE2000,"密室のサクリファイス/ABYSS OF THE SACRIFICE",nvdec,playable,2022-10-21 13:56:28 +0100BF401AF9C000,"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",slow,playable,2023-12-31 14:37:17 +0100AFA01750C000,"死神と少女/Shinigami to Shoujo",gpu;Incomplete,ingame,2024-03-22 01:06:45 +01001BA01EBFC000,"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",services-horizon,nothing,2024-09-28 12:22:55 +0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",crash,ingame,2023-04-25 19:43:52 +0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",crash,ingame,2024-02-12 20:58:31 +010064801A01C000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",crash,nothing,2023-10-30 22:37:40 +0100F3400332C000,"ゼノブレイド2",deadlock;amd-vendor-bug,ingame,2024-03-28 14:31:41 \ No newline at end of file -- 2.47.1 From c2ae49eb47d91194cd98888108ff980476dd1c6f Mon Sep 17 00:00:00 2001 From: shinyoyo Date: Mon, 13 Jan 2025 02:33:27 +0800 Subject: [PATCH 334/722] Add some missing Simplified Chinese translations (#515) --- src/Ryujinx/Assets/locales.json | 36 ++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index b90e16855..221c898ea 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1243,7 +1243,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "问答与指南", "zh_TW": "" } }, @@ -4018,7 +4018,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "与 PC 日期和时间重新同步", "zh_TW": "" } }, @@ -14193,7 +14193,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Ryujinx — це емулятор для Nintendo Switch™.\nОтримуйте всі останні новини в нашому Discord.\nРозробники, які хочуть зробити внесок, можуть дізнатися більше на нашому GitHub або в Discord.", - "zh_CN": "", + "zh_CN": "Ryujinx 是一个 Nintendo Switch™ 模拟器。\n有兴趣做出贡献的开发者可以在我们的 GitHub 或 Discord 上了解更多信息。\n", "zh_TW": "" } }, @@ -17818,7 +17818,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "档案对话框", "zh_TW": "" } }, @@ -19543,7 +19543,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Необрізаних {0} тайтл(ів)...", - "zh_CN": "", + "zh_CN": "正在精简 {0} 个游戏", "zh_TW": "" } }, @@ -19718,7 +19718,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Заголовок", - "zh_CN": "", + "zh_CN": "标题", "zh_TW": "" } }, @@ -19743,7 +19743,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Економія місця", - "zh_CN": "", + "zh_CN": "节省空间", "zh_TW": "" } }, @@ -19793,7 +19793,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Зшивання", - "zh_CN": "", + "zh_CN": "取消精简", "zh_TW": "" } }, @@ -22618,7 +22618,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "最后更新于: {0}", "zh_TW": "" } }, @@ -22643,7 +22643,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "此兼容性列表可能包含过时的条目。\n不要只测试 \"进入游戏\" 状态的游戏。", "zh_TW": "" } }, @@ -22668,7 +22668,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "正在搜索兼容性条目...", "zh_TW": "" } }, @@ -22693,7 +22693,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "打开兼容性列表", "zh_TW": "" } }, @@ -22718,7 +22718,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "仅显示拥有的游戏", "zh_TW": "" } }, @@ -22743,7 +22743,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "可游玩", "zh_TW": "" } }, @@ -22768,7 +22768,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "进入游戏", "zh_TW": "" } }, @@ -22793,7 +22793,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "菜单", "zh_TW": "" } }, @@ -22818,7 +22818,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "启动", "zh_TW": "" } }, @@ -22843,7 +22843,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "什么都没有", "zh_TW": "" } } -- 2.47.1 From f1dee5027521f21cf9ebe94f18fc6c65c6876b0b Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Sun, 12 Jan 2025 21:57:57 +0100 Subject: [PATCH 335/722] infra: Update to LLVM 17 (#519) This fixes macos builds not building correctly because of a missing LLVM 14 package. --- .github/workflows/build.yml | 4 ++-- .github/workflows/canary.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- distribution/macos/bundle_fix_up.py | 2 +- distribution/macos/construct_universal_dylib.py | 2 +- distribution/macos/create_macos_build_ava.sh | 4 ++-- distribution/macos/create_macos_build_headless.sh | 4 ++-- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index aeb12a575..0472fd5f7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -129,11 +129,11 @@ jobs: with: global-json-file: global.json - - name: Setup LLVM 14 + - name: Setup LLVM 17 run: | wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh - sudo ./llvm.sh 14 + sudo ./llvm.sh 17 - name: Install rcodesign run: | diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index d93d4fbed..433e65cb2 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -210,11 +210,11 @@ jobs: with: global-json-file: global.json - - name: Setup LLVM 15 + - name: Setup LLVM 17 run: | wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh - sudo ./llvm.sh 15 + sudo ./llvm.sh 17 - name: Install rcodesign run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ab39634f7..7e11f6edf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -191,11 +191,11 @@ jobs: with: global-json-file: global.json - - name: Setup LLVM 15 + - name: Setup LLVM 17 run: | wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh - sudo ./llvm.sh 15 + sudo ./llvm.sh 17 - name: Install rcodesign run: | diff --git a/distribution/macos/bundle_fix_up.py b/distribution/macos/bundle_fix_up.py index a8e3ac760..273d7455d 100644 --- a/distribution/macos/bundle_fix_up.py +++ b/distribution/macos/bundle_fix_up.py @@ -19,7 +19,7 @@ if platform.system() == "Darwin": else: OTOOL = shutil.which("llvm-otool") if OTOOL is None: - for llvm_ver in [15, 14, 13]: + for llvm_ver in [17, 16, 15, 14, 13]: otool_path = shutil.which(f"llvm-otool-{llvm_ver}") if otool_path is not None: OTOOL = otool_path diff --git a/distribution/macos/construct_universal_dylib.py b/distribution/macos/construct_universal_dylib.py index b6c3770c6..5d9321860 100644 --- a/distribution/macos/construct_universal_dylib.py +++ b/distribution/macos/construct_universal_dylib.py @@ -26,7 +26,7 @@ else: LIPO = shutil.which("llvm-lipo") if LIPO is None: - for llvm_ver in [15, 14, 13]: + for llvm_ver in [17, 16, 15, 14, 13]: lipo_path = shutil.which(f"llvm-lipo-{llvm_ver}") if lipo_path is not None: LIPO = lipo_path diff --git a/distribution/macos/create_macos_build_ava.sh b/distribution/macos/create_macos_build_ava.sh index b19fa4863..de6fab358 100755 --- a/distribution/macos/create_macos_build_ava.sh +++ b/distribution/macos/create_macos_build_ava.sh @@ -67,11 +67,11 @@ python3 "$BASE_DIR/distribution/macos/construct_universal_dylib.py" "$ARM64_APP_ if ! [ -x "$(command -v lipo)" ]; then - if ! [ -x "$(command -v llvm-lipo-14)" ]; + if ! [ -x "$(command -v llvm-lipo-17)" ]; then LIPO=llvm-lipo else - LIPO=llvm-lipo-14 + LIPO=llvm-lipo-17 fi else LIPO=lipo diff --git a/distribution/macos/create_macos_build_headless.sh b/distribution/macos/create_macos_build_headless.sh index 01951d878..5de862a2f 100755 --- a/distribution/macos/create_macos_build_headless.sh +++ b/distribution/macos/create_macos_build_headless.sh @@ -62,11 +62,11 @@ python3 "$BASE_DIR/distribution/macos/construct_universal_dylib.py" "$ARM64_OUTP if ! [ -x "$(command -v lipo)" ]; then - if ! [ -x "$(command -v llvm-lipo-14)" ]; + if ! [ -x "$(command -v llvm-lipo-17)" ]; then LIPO=llvm-lipo else - LIPO=llvm-lipo-14 + LIPO=llvm-lipo-17 fi else LIPO=lipo -- 2.47.1 From fd4d801bfd0668de3bebb216caeb500f0a5baabc Mon Sep 17 00:00:00 2001 From: Keaton Date: Mon, 13 Jan 2025 11:15:05 -0600 Subject: [PATCH 336/722] Various NuGet package updates (#203) Updates the following packages: **nuget: bump the avalonia group with 7 updates** * Bump Avalonia, Avalonia.Controls.DataGrid, Avalonia.Desktop, Avalonia.Diagnostics, and Avalonia.Markup.Xaml.Loader from 11.0.10 to 11.0.13 * Bump Avalonia.Svg and Avalonia.Svg.Skia from 11.0.0.18 to 11.0.0.19 **nuget: bump non-avalonia packages** * Bump Concentus from 2.2.0 to 2.2.2 * Bump Microsoft.IdentityModel.JsonWebTokens from 8.1.2 to 8.3.0 * Bump Silk.NET.Vulkan group with 3 updates (2.21.0 to 2.22.0) * Bump SkiaSharp group with 2 updates (2.88.7 to 2.88.9) --- Directory.Packages.props | 28 +++++++++++++-------------- src/Ryujinx.Graphics.Vulkan/Vendor.cs | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index a480d3d29..c2ac358ed 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -3,13 +3,13 @@ true - - - - - - - + + + + + + + @@ -18,7 +18,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -48,11 +48,11 @@ - - - - - + + + + + diff --git a/src/Ryujinx.Graphics.Vulkan/Vendor.cs b/src/Ryujinx.Graphics.Vulkan/Vendor.cs index 55ae0cd81..6a2a76a88 100644 --- a/src/Ryujinx.Graphics.Vulkan/Vendor.cs +++ b/src/Ryujinx.Graphics.Vulkan/Vendor.cs @@ -92,7 +92,7 @@ namespace Ryujinx.Graphics.Vulkan DriverId.MesaDozen => "Dozen", DriverId.MesaNvk => "NVK", DriverId.ImaginationOpenSourceMesa => "Imagination (Open)", - DriverId.MesaAgxv => "Honeykrisp", + DriverId.MesaHoneykrisp => "Honeykrisp", _ => id.ToString(), }; } -- 2.47.1 From 017f46f31815262a79f6af1a168527a2b0154b38 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 15 Jan 2025 03:00:23 -0600 Subject: [PATCH 337/722] HLE: misc: throw a more descriptive error when the loaded processes doesn't contain _latestPid (likely missing FW) --- src/Ryujinx.Common/RyujinxException.cs | 10 +++++++ .../Loaders/Processes/ProcessLoader.cs | 12 +++++++- src/Ryujinx/Program.cs | 30 +++++++++++++++---- 3 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 src/Ryujinx.Common/RyujinxException.cs diff --git a/src/Ryujinx.Common/RyujinxException.cs b/src/Ryujinx.Common/RyujinxException.cs new file mode 100644 index 000000000..dbb5184e4 --- /dev/null +++ b/src/Ryujinx.Common/RyujinxException.cs @@ -0,0 +1,10 @@ +using System; + +namespace Ryujinx.Common +{ + public class RyujinxException : Exception + { + public RyujinxException(string message) : base(message) + { } + } +} diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs index ebbeb1398..6279ec3b4 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs @@ -26,7 +26,17 @@ namespace Ryujinx.HLE.Loaders.Processes private ulong _latestPid; - public ProcessResult ActiveApplication => _processesByPid[_latestPid]; + public ProcessResult ActiveApplication + { + get + { + if (!_processesByPid.TryGetValue(_latestPid, out ProcessResult value)) + throw new RyujinxException( + $"The HLE Process map did not have a process with ID {_latestPid}. Are you missing firmware?"); + + return value; + } + } public ProcessLoader(Switch device) { diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 6f0f3e12e..b9aa402c5 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -21,6 +21,7 @@ using Ryujinx.Graphics.Vulkan.MoltenVK; using Ryujinx.Headless; using Ryujinx.SDL2.Common; using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; @@ -243,16 +244,33 @@ namespace Ryujinx.Ava : $"Launch Mode: {AppDataManager.Mode}"); } - internal static void ProcessUnhandledException(object sender, Exception ex, bool isTerminating) + internal static void ProcessUnhandledException(object sender, Exception initialException, bool isTerminating) { Logger.Log log = Logger.Error ?? Logger.Notice; - string message = $"Unhandled exception caught: {ex}"; - // ReSharper disable once ConstantConditionalAccessQualifier - if (sender?.GetType()?.AsPrettyString() is { } senderName) - log.Print(LogClass.Application, message, senderName); + List exceptions = []; + + if (initialException is AggregateException ae) + { + exceptions.AddRange(ae.InnerExceptions); + } else - log.PrintMsg(LogClass.Application, message); + { + exceptions.Add(initialException); + } + + foreach (var e in exceptions) + { + string message = $"Unhandled exception caught: {e}"; + // ReSharper disable once ConstantConditionalAccessQualifier + if (sender?.GetType()?.AsPrettyString() is { } senderName) + log.Print(LogClass.Application, message, senderName); + else + log.PrintMsg(LogClass.Application, message); + } + + + if (isTerminating) Exit(); -- 2.47.1 From c17e3bfcdfbb46f2bc904964441a1503c72c73cc Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 15 Jan 2025 03:01:04 -0600 Subject: [PATCH 338/722] genuinely dont know how that was still there, i thought i got rid of UI.Common --- .../Ryujinx.UI.Common.csproj | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj diff --git a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj deleted file mode 100644 index 01efe04ba..000000000 --- a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj +++ /dev/null @@ -1,36 +0,0 @@ - - - - true - $(DefaultItemExcludes);._* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- 2.47.1 From a5a4ef38e6028aedf0e4bdffd2a61b8bcfa705f6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 16 Jan 2025 02:39:39 -0600 Subject: [PATCH 339/722] HLE: Stub IHidServer SetGestureOutputRanges (#524) Lets "Donkey Kong Country Returns HD" get into main gameplay. --- src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs index 556e35ea6..c1856535b 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs @@ -702,6 +702,18 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } + + [CommandCmif(92)] + // SetGestureOutputRanges(pid, ushort Unknown0) + public ResultCode SetGestureOutputRanges(ServiceCtx context) + { + ulong pid = context.Request.HandleDesc.PId; + ushort unknown0 = context.RequestData.ReadUInt16(); + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { pid, unknown0 }); + + return ResultCode.Success; + } [CommandCmif(100)] // SetSupportedNpadStyleSet(pid, nn::applet::AppletResourceUserId, nn::hid::NpadStyleTag) -- 2.47.1 From 814c0526d272d98699f66b74e82f0986fad863c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hack=E8=8C=B6=E3=82=93?= <120134269+Hackjjang@users.noreply.github.com> Date: Thu, 16 Jan 2025 19:57:32 +0900 Subject: [PATCH 340/722] Korean translations for compat list (#502) --- src/Ryujinx/Assets/locales.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 221c898ea..001e5aea9 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -22634,7 +22634,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "이 호환성 목록에는 오래된 항목이 포함되어 있을 수 있습니다.\n\"게임 내\" 상태에서 게임을 테스트하는 것을 반대하지 마십시오.", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -22659,7 +22659,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "호환성 항목 검색...", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -22684,7 +22684,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "호환성 목록 열기", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -22709,7 +22709,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "보유 게임만 표시", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -22734,7 +22734,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "플레이 가능", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -22759,7 +22759,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "게임 내", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -22784,7 +22784,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "메뉴", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -22809,7 +22809,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "부츠", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -22834,7 +22834,7 @@ "he_IL": "", "it_IT": "", "ja_JP": "", - "ko_KR": "", + "ko_KR": "없음", "no_NO": "", "pl_PL": "", "pt_BR": "", @@ -22848,4 +22848,4 @@ } } ] -} \ No newline at end of file +} -- 2.47.1 From 6a4bc02d7a8cb495f8d0c0cafd98a029b04f1c0f Mon Sep 17 00:00:00 2001 From: Francesco Saltori Date: Thu, 16 Jan 2025 13:38:36 +0100 Subject: [PATCH 341/722] Update Italian translation (#489) --- src/Ryujinx/Assets/locales.json | 310 ++++++++++++++++---------------- 1 file changed, 155 insertions(+), 155 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 001e5aea9..6bfb566fe 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -82,7 +82,7 @@ "es_ES": "Applet Editor Mii", "fr_FR": "Éditeur de Mii", "he_IL": "", - "it_IT": "", + "it_IT": "Applet Editor Mii", "ja_JP": "", "ko_KR": "Mii 편집 애플릿", "no_NO": "Mii-redigeringsapplet", @@ -107,7 +107,7 @@ "es_ES": "Abre el editor de Mii en modo autónomo", "fr_FR": "Ouvrir l'éditeur Mii en mode Standalone", "he_IL": "פתח את יישומון עורך ה- Mii במצב עצמאי", - "it_IT": "Apri l'applet Mii Editor in modalità Standalone", + "it_IT": "Apri l'applet Editor Mii in modalità Standalone", "ja_JP": "スタンドアロンモードで Mii エディタアプレットを開きます", "ko_KR": "독립 실행형 모드로 Mii 편집기 애플릿 열기", "no_NO": "Åpne Mii Redigerings program i eget vindu", @@ -332,7 +332,7 @@ "es_ES": "No se encontraron aplicaciones en el archivo seleccionado.", "fr_FR": "Aucun jeu trouvé dans le fichier sélectionné", "he_IL": "", - "it_IT": "Nessuna applicazione trovata nel file selezionato", + "it_IT": "Nessuna applicazione trovata nel file selezionato.", "ja_JP": "", "ko_KR": "선택한 파일에서 앱을 찾을 수 없습니다.", "no_NO": "Ingen apper ble funnet i valgt fil.", @@ -382,7 +382,7 @@ "es_ES": "Cargar DLC Desde Carpeta", "fr_FR": "Charger les DLC depuis le dossier des DLC", "he_IL": "", - "it_IT": "Carica DLC Da una Cartella", + "it_IT": "Carica DLC da una cartella", "ja_JP": "", "ko_KR": "폴더에서 DLC 불러오기", "no_NO": "Last inn DLC fra mappe", @@ -407,7 +407,7 @@ "es_ES": "Cargar Actualizaciones de Títulos Desde Carpeta", "fr_FR": "Charger les mises à jour depuis le dossier des mises à jour", "he_IL": "", - "it_IT": "Carica Aggiornamenti Da una Cartella", + "it_IT": "Carica aggiornamenti da una cartella", "ja_JP": "", "ko_KR": "폴더에서 타이틀 업데이트 불러오기", "no_NO": "Last inn titteloppdateringer fra mappe", @@ -732,7 +732,7 @@ "es_ES": "", "fr_FR": "Scanner un Amiibo (à partir d'un .bin)", "he_IL": "", - "it_IT": "", + "it_IT": "Scansiona un Amiibo (da file .bin)", "ja_JP": "", "ko_KR": "Amiibo 스캔(빈에서)", "no_NO": "Skann en Amiibo (fra bin fil)", @@ -832,7 +832,7 @@ "es_ES": "Instalar firmware desde una carpeta", "fr_FR": "Installer un firmware depuis un dossier", "he_IL": "התקן קושחה מתוך תקייה", - "it_IT": "Installa un firmare da una cartella", + "it_IT": "Installa un firmware da una cartella", "ja_JP": "ディレクトリからファームウェアをインストール", "ko_KR": "디렉터리에서 펌웨어 설치", "no_NO": "Installer en fastvare fra en mappe", @@ -857,7 +857,7 @@ "es_ES": "", "fr_FR": "Installer des clés", "he_IL": "", - "it_IT": "Installa Chiavi", + "it_IT": "Installa chiavi", "ja_JP": "", "ko_KR": "설치 키", "no_NO": "Installere nøkler", @@ -882,7 +882,7 @@ "es_ES": "Instalar keys de KEYS o ZIP", "fr_FR": "Installer des clés à partir de .KEYS or .ZIP", "he_IL": "", - "it_IT": "Installa Chiavi da file KEYS o ZIP", + "it_IT": "Installa chiavi da file KEYS o ZIP", "ja_JP": "", "ko_KR": "키나 ZIP에서 키 설치", "no_NO": "Installer nøkler fra KEYS eller ZIP", @@ -907,7 +907,7 @@ "es_ES": "Instalar keys de un directorio", "fr_FR": "Installer des clés à partir d'un dossier", "he_IL": "", - "it_IT": "Installa Chiavi da una Cartella", + "it_IT": "Installa chiavi da una cartella", "ja_JP": "", "ko_KR": "디렉터리에서 키 설치", "no_NO": "Installer nøkler fra en mappe", @@ -1007,7 +1007,7 @@ "es_ES": "Recortar archivos XCI", "fr_FR": "Réduire les fichiers XCI", "he_IL": "", - "it_IT": "", + "it_IT": "Riduci dimensioni dei file XCI", "ja_JP": "", "ko_KR": "XCI 파일 트리머", "no_NO": "Trim XCI-filer", @@ -1057,7 +1057,7 @@ "es_ES": "Tamaño Ventana", "fr_FR": "Taille de la fenêtre", "he_IL": "", - "it_IT": "Dimensione Finestra", + "it_IT": "Dimensione finestra", "ja_JP": "", "ko_KR": "윈도 창", "no_NO": "Vindu størrelse", @@ -1232,7 +1232,7 @@ "es_ES": "", "fr_FR": "", "he_IL": "", - "it_IT": "", + "it_IT": "Guide e domande frequenti", "ja_JP": "", "ko_KR": "자주 묻는 질문(FAQ) 및 안내", "no_NO": "Vanlige spørsmål og veiledninger", @@ -1257,7 +1257,7 @@ "es_ES": "", "fr_FR": "Page de FAQ et de dépannage", "he_IL": "", - "it_IT": "", + "it_IT": "Domande frequenti e risoluzione dei problemi", "ja_JP": "", "ko_KR": "자주 묻는 질문(FAQ) 및 문제해결 페이지", "no_NO": "FAQ- og feilsøkingsside", @@ -1282,7 +1282,7 @@ "es_ES": "", "fr_FR": "Ouvre la page de FAQ et de dépannage sur le wiki officiel de Ryujinx", "he_IL": "", - "it_IT": "", + "it_IT": "Apre la pagina della wiki ufficiale di Ryujinx relativa alle domande frequenti e alla risoluzione dei problemi", "ja_JP": "", "ko_KR": "공식 Ryujinx 위키에서 자주 묻는 질문(FAQ) 및 문제 해결 페이지 열기", "no_NO": "Åpner FAQ- og feilsøkingssiden på den offisielle Ryujinx-wikien", @@ -1307,7 +1307,7 @@ "es_ES": "", "fr_FR": "Guide d'Installation et de Configuration", "he_IL": "", - "it_IT": "", + "it_IT": "Guida all'installazione e alla configurazione", "ja_JP": "", "ko_KR": "설치 및 구성 안내", "no_NO": "Oppsett- og konfigurasjonsveiledning", @@ -1332,7 +1332,7 @@ "es_ES": "", "fr_FR": "Ouvre le guide d'installation et de configuration sur le wiki officiel de Ryujinx", "he_IL": "", - "it_IT": "", + "it_IT": "Apre la guida all'installazione e alla configurazione presente nella wiki ufficiale di Ryujinx", "ja_JP": "", "ko_KR": "공식 Ryujinx 위키에서 설정 및 구성 안내 열기", "no_NO": "Åpner oppsett- og konfigurasjonsveiledningen på den offisielle Ryujinx-wikien", @@ -1357,7 +1357,7 @@ "es_ES": "", "fr_FR": "Guide Multijoueur (LDN/LAN)", "he_IL": "", - "it_IT": "", + "it_IT": "Guida alla modalità multigiocatore (LDN/LAN)", "ja_JP": "", "ko_KR": "멀티플레이어(LDN/LAN) 안내", "no_NO": "Flerspillerveiledning (LDN/LAN)", @@ -1382,7 +1382,7 @@ "es_ES": "", "fr_FR": "Ouvre le guide de Multijoueur sur le wiki officiel de Ryujinx", "he_IL": "", - "it_IT": "", + "it_IT": "Apre la guida alla modalità multigiocatore presente nella wiki ufficiale di Ryujinx", "ja_JP": "", "ko_KR": "공식 Ryujinx 위키에서 멀티플레이어 안내 열기", "no_NO": "Åpner flerspillerveiledningen på den offisielle Ryujinx-wikien", @@ -2232,7 +2232,7 @@ "es_ES": "Extraer la sección ExeFS de la configuración actual de la aplicación (incluyendo actualizaciones)", "fr_FR": "Extrait la section ExeFS du jeu (mise à jour incluse)", "he_IL": "חלץ את קטע ה-ExeFS מתצורת היישום הנוכחית (כולל עדכונים)", - "it_IT": "Estrae la sezione ExeFS dall'attuale configurazione dell'applicazione (includendo aggiornamenti)", + "it_IT": "Estrae la sezione ExeFS dall'attuale configurazione dell'applicazione (inclusi gli aggiornamenti)", "ja_JP": "現在のアプリケーション設定(アップデート含む)から ExeFS セクションを展開します", "ko_KR": "앱의 현재 구성에서 ExeFS 추출(업데이트 포함)", "no_NO": "Pakk ut ExeFS seksjonen fra Programmets gjeldende konfigurasjon (inkludert oppdateringer)", @@ -2282,7 +2282,7 @@ "es_ES": "Extraer la sección RomFS de la configuración actual de la aplicación (incluyendo actualizaciones)", "fr_FR": "Extrait la section RomFS du jeu (mise à jour incluse)", "he_IL": "חלץ את קטע ה-RomFS מתצורת היישום הנוכחית (כולל עדכונים)", - "it_IT": "Estrae la sezione RomFS dall'attuale configurazione dell'applicazione (includendo aggiornamenti)", + "it_IT": "Estrae la sezione RomFS dall'attuale configurazione dell'applicazione (inclusi gli aggiornamenti)", "ja_JP": "現在のアプリケーション設定(アップデート含む)から RomFS セクションを展開します", "ko_KR": "앱의 현재 구성에서 RomFS 추출(업데이트 포함)", "no_NO": "Pakk ut RomFS seksjonen fra applikasjonens gjeldende konfigurasjon (inkludert oppdateringer)", @@ -2332,7 +2332,7 @@ "es_ES": "Extraer la sección Logo de la configuración actual de la aplicación (incluyendo actualizaciones)", "fr_FR": "Extrait la section Logo du jeu (mise à jour incluse)", "he_IL": "חלץ את קטע ה-Logo מתצורת היישום הנוכחית (כולל עדכונים)", - "it_IT": "Estrae la sezione Logo dall'attuale configurazione dell'applicazione (includendo aggiornamenti)", + "it_IT": "Estrae la sezione Logo dall'attuale configurazione dell'applicazione (inclusi gli aggiornamenti)", "ja_JP": "現在のアプリケーション設定(アップデート含む)からロゴセクションを展開します", "ko_KR": "앱의 현재 구성에서 로고 섹션 추출 (업데이트 포함)", "no_NO": "Pakk ut Logo-seksjonen fra applikasjonens gjeldende konfigurasjon (inkludert oppdateringer)", @@ -2532,7 +2532,7 @@ "es_ES": "Verificar y recortar archivo XCI", "fr_FR": "Vérifier et réduire les fichiers XCI", "he_IL": "", - "it_IT": "Controlla e Trimma i file XCI", + "it_IT": "Controlla e riduci la dimensione del file XCI", "ja_JP": "", "ko_KR": "XCI 파일 확인 및 트림", "no_NO": "Kontroller og trim XCI-filen", @@ -2557,7 +2557,7 @@ "es_ES": "Verificar y recortar archivo XCI para ahorrar espacio en disco", "fr_FR": "Vérifier et réduire les fichiers XCI pour économiser de l'espace", "he_IL": "", - "it_IT": "Controlla e Trimma i file XCI da Salvare Sullo Spazio del Disco", + "it_IT": "Controlla e riduci la dimensione del file XCI per risparmiare spazio su disco", "ja_JP": "", "ko_KR": "디스크 공간을 절약하기 위해 XCI 파일 확인 및 트림", "no_NO": "Kontroller og trimm XCI-filen for å spare diskplass", @@ -2582,7 +2582,7 @@ "es_ES": "{0}/{1} juegos cargados", "fr_FR": "{0}/{1} Jeux chargés", "he_IL": "{1}/{0} משחקים נטענו", - "it_IT": "{0}/{1} Giochi Caricati", + "it_IT": "{0}/{1} giochi caricati", "ja_JP": "{0}/{1} ゲーム", "ko_KR": "{0}/{1}개의 게임 불러옴", "no_NO": "{0}/{1} Spill Lastet", @@ -2607,7 +2607,7 @@ "es_ES": "", "fr_FR": "Version du Firmware: {0}", "he_IL": "", - "it_IT": "", + "it_IT": "Versione firmware: {0}", "ja_JP": "", "ko_KR": "펌웨어 버전 : {0}", "no_NO": "Fastvareversjon: {0}", @@ -2632,7 +2632,7 @@ "es_ES": "Recortando el siguiente archivo XCI: '{0}'", "fr_FR": "Réduction du fichier XCI '{0}'", "he_IL": "", - "it_IT": "Trimmando i file XCI '{0}'", + "it_IT": "Riduzione della dimensione del file XCI '{0}'", "ja_JP": "", "ko_KR": "XCI 파일 '{0}' 트리밍", "no_NO": "Trimming av XCI-filen '{0}'", @@ -2982,7 +2982,7 @@ "es_ES": "Recordar Tamaño/Posición de la Ventana", "fr_FR": "Mémoriser la taille/position de la fenêtre", "he_IL": "", - "it_IT": "Ricorda Dimensione/Posizione Finestra", + "it_IT": "Ricorda la dimensione e la posizione della finestra", "ja_JP": "", "ko_KR": "창 크기/위치 기억", "no_NO": "Husk vinduets størrelse/posisjon", @@ -3157,7 +3157,7 @@ "es_ES": "Carpetas de DLC/Actualizaciones para Carga Automática", "fr_FR": "Dossiers des mises à jour/DLC", "he_IL": "", - "it_IT": "Directory di Caricamento Automatico per DLC/Aggiornamenti", + "it_IT": "Cartelle di caricamento automatico di DLC/aggiornamenti", "ja_JP": "", "ko_KR": "DLC/업데이트 디렉터리 자동 불러오기", "no_NO": "Autoload DLC/Updates-mapper", @@ -3182,7 +3182,7 @@ "es_ES": "DLC y Actualizaciones que hacen referencia a archivos ausentes serán desactivado automáticamente", "fr_FR": "Les DLC et les mises à jour faisant référence aux fichiers manquants seront automatiquement déchargés.", "he_IL": "", - "it_IT": "Aggiornamenti e DLC che collegano a file mancanti verranno disabilitati automaticamente", + "it_IT": "Aggiornamenti e DLC che fanno riferimento a file mancanti verranno disabilitati automaticamente", "ja_JP": "", "ko_KR": "누락된 파일을 참조하는 DLC 및 업데이트가 자동으로 언로드", "no_NO": "DLC og oppdateringer som henviser til manglende filer, vil bli lastet ned automatisk", @@ -4007,7 +4007,7 @@ "es_ES": "", "fr_FR": "Resynchronier la Date à celle du PC", "he_IL": "", - "it_IT": "", + "it_IT": "Sincronizza data e ora con il PC", "ja_JP": "", "ko_KR": "PC 날짜와 시간에 동기화", "no_NO": "Resynkroniser til PC-dato og -klokkeslett", @@ -4057,7 +4057,7 @@ "es_ES": "Cache PPTC de bajo consumo", "fr_FR": "PPTC à faible puissance", "he_IL": "Low-power PPTC", - "it_IT": "Low-power PPTC", + "it_IT": "Caricamento PPTC a basso consumo energetico", "ja_JP": "Low-power PPTC", "ko_KR": "저전력 PPTC 캐시", "no_NO": "PPTC med lavt strømforbruk", @@ -4282,7 +4282,7 @@ "es_ES": "Tamaño DRAM:", "fr_FR": "Taille de la DRAM :", "he_IL": "השתמש בפריסת זיכרון חלופית (נועד למפתחים)", - "it_IT": "Usa layout di memoria alternativo (per sviluppatori)", + "it_IT": "Dimensione memoria DRAM:", "ja_JP": "DRAMサイズ:", "ko_KR": "DRAM 크기 :", "no_NO": "DRAM Mengde", @@ -4557,7 +4557,7 @@ "es_ES": "Automático", "fr_FR": "", "he_IL": "אוטומטי", - "it_IT": "", + "it_IT": "Automatico", "ja_JP": "自動", "ko_KR": "자동", "no_NO": "Automatisk", @@ -5357,7 +5357,7 @@ "es_ES": "ADVERTENCIA: Reducirá el rendimiento", "fr_FR": "ATTENTION : Réduira les performances", "he_IL": "אזהרה: יפחית ביצועים", - "it_IT": "ATTENZIONE: ridurrà le prestazioni", + "it_IT": "ATTENZIONE: ridurranno le prestazioni", "ja_JP": "警告: パフォーマンスを低下させます", "ko_KR": "경고 : 성능이 감소합니다.", "no_NO": "Advarsel: Vil redusere ytelsen", @@ -5532,7 +5532,7 @@ "es_ES": "Entrada", "fr_FR": "Contrôles", "he_IL": "קלט", - "it_IT": "", + "it_IT": "Comandi", "ja_JP": "入力", "ko_KR": "입력", "no_NO": "Inndata", @@ -9782,7 +9782,7 @@ "es_ES": "", "fr_FR": "", "he_IL": "", - "it_IT": "", + "it_IT": "Guida", "ja_JP": "", "ko_KR": "가이드", "no_NO": "Veiledning", @@ -9807,7 +9807,7 @@ "es_ES": "", "fr_FR": "Autre", "he_IL": "", - "it_IT": "", + "it_IT": "Altro", "ja_JP": "", "ko_KR": "기타", "no_NO": "Diverse", @@ -9832,7 +9832,7 @@ "es_ES": "", "fr_FR": "Palette 1", "he_IL": "", - "it_IT": "", + "it_IT": "Tasto extra 1", "ja_JP": "", "ko_KR": "패들 1", "no_NO": "", @@ -9857,7 +9857,7 @@ "es_ES": "", "fr_FR": "Palette 2", "he_IL": "", - "it_IT": "", + "it_IT": "Tasto extra 2", "ja_JP": "", "ko_KR": "패들 2", "no_NO": "", @@ -9882,7 +9882,7 @@ "es_ES": "", "fr_FR": "Palette 3", "he_IL": "", - "it_IT": "", + "it_IT": "Tasto extra 3", "ja_JP": "", "ko_KR": "패들 3", "no_NO": "", @@ -9907,7 +9907,7 @@ "es_ES": "", "fr_FR": "Palette 4", "he_IL": "", - "it_IT": "", + "it_IT": "Tasto extra 4", "ja_JP": "", "ko_KR": "패들 4", "no_NO": "", @@ -10507,7 +10507,7 @@ "es_ES": "", "fr_FR": "Annulation en cours", "he_IL": "", - "it_IT": "Cancellando", + "it_IT": "Annullamento in corso", "ja_JP": "", "ko_KR": "취소하기", "no_NO": "Kansellerer", @@ -11782,7 +11782,7 @@ "es_ES": "Renombrando actualización...", "fr_FR": "Renommage de la mise à jour...", "he_IL": "משנה את שם העדכון...", - "it_IT": "Rinominazione dell'aggiornamento...", + "it_IT": "Ridenominazione dell'aggiornamento...", "ja_JP": "アップデートをリネーム中...", "ko_KR": "이름 변경 업데이트...", "no_NO": "Endrer navn på oppdatering...", @@ -11832,7 +11832,7 @@ "es_ES": "", "fr_FR": "Afficher Changelog", "he_IL": "", - "it_IT": "", + "it_IT": "Mostra il changelog", "ja_JP": "", "ko_KR": "변경 로그 보기", "no_NO": "Vis endringslogg", @@ -12082,7 +12082,7 @@ "es_ES": "¿Quieres instalar el firmware incluido en este juego? (Firmware versión {0})", "fr_FR": "Voulez-vous installer le firmware intégré dans ce jeu ? (Firmware {0})", "he_IL": "האם תרצו להתקין את הקושחה המוטמעת במשחק הזה? (קושחה {0})", - "it_IT": "Vuoi installare il firmware incorporato in questo gioco? (Firmware {0})", + "it_IT": "Vuoi installare il firmware incluso in questo gioco? (Firmware {0})", "ja_JP": "このゲームに含まれるファームウェアをインストールしてよろしいですか? (ファームウェア {0})", "ko_KR": "이 게임에 포함된 펌웨어를 설치하시겠습니까?(Firmware {0})", "no_NO": "Ønsker du å installere fastvaren innebygd i dette spillet? (Firmware {0})", @@ -12307,7 +12307,7 @@ "es_ES": "Ventana recortador XCI", "fr_FR": "Fenêtre de réduction de fichiers XCI", "he_IL": "", - "it_IT": "Finestra XCI Trimmer", + "it_IT": "Riduci dimensioni dei file XCI", "ja_JP": "", "ko_KR": "XCI 트리머 창", "no_NO": "XCI Trimmervindu", @@ -12357,7 +12357,7 @@ "es_ES": "Error al mostrar cuadro de diálogo: {0}", "fr_FR": "Erreur lors de l'affichage de la boîte de dialogue : {0}", "he_IL": "שגיאה בהצגת דיאלוג ההודעה: {0}", - "it_IT": "Errore nella visualizzazione del Message Dialog: {0}", + "it_IT": "Errore nella visualizzazione della finestra di dialogo: {0}", "ja_JP": "メッセージダイアログ表示エラー: {0}", "ko_KR": "메시지 대화 상자 표시 오류 : {0}", "no_NO": "Feil ved visning av meldings-dialog: {0}", @@ -12407,7 +12407,7 @@ "es_ES": "Error al mostrar díalogo ErrorApplet: {0}", "fr_FR": "Erreur lors de l'affichage de la boîte de dialogue ErrorApplet: {0}", "he_IL": "שגיאה בהצגת דיאלוג ErrorApplet: {0}", - "it_IT": "Errore nella visualizzazione dell'ErrorApplet Dialog: {0}", + "it_IT": "Errore nella visualizzazione della finestra dell'ErrorApplet: {0}", "ja_JP": "エラーアプレットダイアログ表示エラー: {0}", "ko_KR": "애플릿 오류류 대화 상자 표시 오류 : {0}", "no_NO": "Feil ved visning av Feilmeldingsdialog: {0}", @@ -12507,7 +12507,7 @@ "es_ES": "", "fr_FR": "API Amiibo", "he_IL": "ממשק תכנות אמיבו", - "it_IT": "", + "it_IT": "API Amiibo", "ja_JP": "", "ko_KR": "", "no_NO": "", @@ -12557,7 +12557,7 @@ "es_ES": "No se pudo conectar al servidor de la API Amiibo. El servicio puede estar caído o tu conexión a internet puede haberse desconectado.", "fr_FR": "Impossible de se connecter au serveur API Amiibo. Le service est peut-être hors service ou vous devriez peut-être vérifier que votre connexion internet est connectée.", "he_IL": "לא ניתן להתחבר לממשק שרת האמיבו. ייתכן שהשירות מושבת או שתצטרך לוודא שהחיבור לאינטרנט שלך מקוון.", - "it_IT": "Impossibile connettersi al server Amiibo API. Il servizio potrebbe essere fuori uso o potresti dover verificare che la tua connessione internet sia online.", + "it_IT": "Impossibile connettersi al server dell'API Amiibo. Il servizio potrebbe non essere disponibile o potresti non essere connesso a Internet.", "ja_JP": "Amiibo API サーバに接続できませんでした. サーバがダウンしているか, インターネット接続に問題があるかもしれません.", "ko_KR": "Amiibo API 서버에 연결할 수 없습니다. 서비스가 다운되었거나 인터넷 연결이 온라인 상태인지 확인이 필요합니다.", "no_NO": "Kan ikke koble til Amiibo API server. Tjenesten kan være nede, eller du må kanskje verifisere at din internettforbindelse er tilkoblet.", @@ -12582,7 +12582,7 @@ "es_ES": "El perfil {0} no es compatible con el sistema actual de configuración de entrada.", "fr_FR": "Le profil {0} est incompatible avec le système de configuration de manette actuel.", "he_IL": "הפרופיל {0} אינו תואם למערכת תצורת הקלט הנוכחית.", - "it_IT": "Il profilo {0} è incompatibile con l'attuale sistema di configurazione input.", + "it_IT": "Il profilo {0} non è compatibile con l'attuale sistema di configurazione input.", "ja_JP": "プロファイル {0} は現在の入力設定システムと互換性がありません.", "ko_KR": "프로필 {0}은(는) 현재 입력 구성 시스템과 호환되지 않습니다.", "no_NO": "Profil {0} er ikke kompatibel med den gjeldende inndata konfigurasjonen", @@ -12932,7 +12932,7 @@ "es_ES": "\n\nEsto reemplazará la versión de sistema actual, {0}.", "fr_FR": "\n\nCela remplacera la version actuelle du système {0}.", "he_IL": "\n\nזה יחליף את גרסת המערכת הנוכחית {0}.", - "it_IT": "\n\nQuesta sostituirà l'attuale versione di sistema {0}.", + "it_IT": "\n\nQuesta sostituirà l'attuale versione del sistema ({0}).", "ja_JP": "\n\n現在のシステムバージョン {0} を置き換えます.", "ko_KR": "\n\n현재 시스템 버전 {0}을(를) 대체합니다.", "no_NO": "\n\nDette erstatter den gjeldende systemversjonen {0}.", @@ -13032,7 +13032,7 @@ "es_ES": "Se halló un archivo Keys inválido en {0}", "fr_FR": "Un fichier de clés invalide a été trouvé dans {0}", "he_IL": "", - "it_IT": "E' stato trovato un file di chiavi invalido ' {0}", + "it_IT": "È stato trovato un file di chiavi non valido in {0}", "ja_JP": "", "ko_KR": "{0}에서 잘못된 키 파일이 발견", "no_NO": "En ugyldig Keys-fil ble funnet i {0}.", @@ -13057,7 +13057,7 @@ "es_ES": "Instalar Keys", "fr_FR": "Installer des clés", "he_IL": "", - "it_IT": "Installa Chavi", + "it_IT": "Installa chiavi", "ja_JP": "", "ko_KR": "설치 키", "no_NO": "Installere nøkler", @@ -13082,7 +13082,7 @@ "es_ES": "Un nuevo archivo Keys será instalado.", "fr_FR": "Nouveau fichier de clés sera installé.", "he_IL": "", - "it_IT": "Un nuovo file di Chiavi sarà intallato.", + "it_IT": "Un nuovo file di chiavi sarà installato.", "ja_JP": "", "ko_KR": "새로운 키 파일이 설치됩니다.", "no_NO": "Ny Keys-fil vil bli installert.", @@ -13107,7 +13107,7 @@ "es_ES": "\n\nEsto puede reemplazar algunas de las Keys actualmente instaladas.", "fr_FR": "\n\nCela pourrait remplacer les clés qui sont installés.", "he_IL": "", - "it_IT": "\n\nQuesto potrebbe sovrascrivere alcune delle Chiavi già installate.", + "it_IT": "\n\nAlcune delle chiavi già installate potrebbero essere sovrascritte.", "ja_JP": "", "ko_KR": "\n\n이로 인해 현재 설치된 키 중 일부가 대체될 수 있습니다.", "no_NO": "\n\nDette kan erstatte noen av de nåværende installerte nøklene.", @@ -13157,7 +13157,7 @@ "es_ES": "Instalando Keys...", "fr_FR": "Installation des clés...", "he_IL": "", - "it_IT": "Installando le chiavi...", + "it_IT": "Installazione delle chiavi...", "ja_JP": "", "ko_KR": "키 설치 중...", "no_NO": "Installere nøkler...", @@ -13207,7 +13207,7 @@ "es_ES": "Si eliminas el perfil seleccionado no quedará ningún otro perfil", "fr_FR": "Il n'y aurait aucun autre profil à ouvrir si le profil sélectionné est supprimé", "he_IL": "לא יהיו פרופילים אחרים שייפתחו אם הפרופיל שנבחר יימחק", - "it_IT": "Non ci sarebbero altri profili da aprire se il profilo selezionato viene cancellato", + "it_IT": "Non ci sarebbero altri profili da aprire se il profilo selezionato venisse cancellato", "ja_JP": "選択されたプロファイルを削除すると,プロファイルがひとつも存在しなくなります", "ko_KR": "선택한 프로필을 삭제하면 다른 프로필을 열 수 없음", "no_NO": "Det vil ikke være noen profiler å åpnes hvis valgt profil blir slettet", @@ -13257,7 +13257,7 @@ "es_ES": "Advertencia - Cambios sin guardar", "fr_FR": "Avertissement - Modifications non enregistrées", "he_IL": "אזהרה - שינויים לא שמורים", - "it_IT": "Attenzione - Modifiche Non Salvate", + "it_IT": "Attenzione - Modifiche non salvate", "ja_JP": "警告 - 保存されていない変更", "ko_KR": "경고 - 저장되지 않은 변경 사항", "no_NO": "Advarsel - Ulagrede endringer", @@ -13382,7 +13382,7 @@ "es_ES": "{0}. Archivo con error: {1}", "fr_FR": "{0}. Fichier erroné : {1}", "he_IL": "{0}. קובץ שגוי: {1}", - "it_IT": "{0}. Errore File: {1}", + "it_IT": "{0}. Errore file: {1}", "ja_JP": "{0}. エラー発生ファイル: {1}", "ko_KR": "{0}. 오류 파일 : {1}", "no_NO": "{0}. Feilet fil: {1}", @@ -14182,7 +14182,7 @@ "es_ES": "", "fr_FR": "Ryujinx est un émulateur pour la Nintendo Switch™.\nObtenez le dernières nouvelles sur le Discord.\nLes développeurs qui veulent contribuer peuvent en savoir plus sur notre GitHub ou Discord.", "he_IL": "", - "it_IT": "", + "it_IT": "Ryujinx è un emulatore della console Nintendo Switch™.\nRimani aggiornato sulle ultime novità nel nostro server Discord.\nGli sviluppatori interessati a contribuire possono trovare maggiori informazioni su Discord o sulla nostra pagina GitHub.", "ja_JP": "", "ko_KR": "Ryujinx는 Nintendo Switch™용 에뮬레이터입니다.\n모든 최신 소식을 Discord에서 확인하세요.\n기여에 관심이 있는 개발자는 GitHub 또는 Discord에서 자세한 내용을 확인할 수 있습니다.", "no_NO": "Ryujinx er en emulator for Nintendo SwitchTM.\nVennligst støtt oss på Patreon.\nFå alle de siste nyhetene på vår Twitter eller Discord.\nUtviklere som er interessert i å bidra kan finne ut mer på GitHub eller Discord.", @@ -14232,7 +14232,7 @@ "es_ES": "", "fr_FR": "Anciennement Maintenu par :", "he_IL": "", - "it_IT": "", + "it_IT": "Mantenuto in precedenza da:", "ja_JP": "", "ko_KR": "이전 관리자 :", "no_NO": "Tidligere vedlikeholdt av:", @@ -14932,7 +14932,7 @@ "es_ES": "Elige un directorio de carga automática para agregar a la lista", "fr_FR": "Entrez un répertoire de mises à jour/DLC à ajouter à la liste", "he_IL": "", - "it_IT": "Inserisci una directory di \"autoload\" da aggiungere alla lista", + "it_IT": "Inserisci una cartella di caricamento automatico da aggiungere alla lista", "ja_JP": "", "ko_KR": "목록에 추가할 자동 불러오기 디렉터리를 입력", "no_NO": "Angi en autoload-mappe som skal legges til i listen", @@ -14957,7 +14957,7 @@ "es_ES": "Agregar un directorio de carga automática a la lista", "fr_FR": "Ajouter un répertoire de mises à jour/DLC à la liste", "he_IL": "", - "it_IT": "Aggiungi una directory di \"autoload\" alla lista", + "it_IT": "Aggiungi una cartella di caricamento automatico alla lista", "ja_JP": "", "ko_KR": "목록에 자동 불러오기 디렉터리 추가", "no_NO": "Legg til en autoload-mappe i listen", @@ -14982,7 +14982,7 @@ "es_ES": "Eliminar el directorio de carga automática seleccionado", "fr_FR": "Supprimer le répertoire de mises à jour/DLC sélectionné", "he_IL": "", - "it_IT": "Rimuovi la directory di autoload selezionata", + "it_IT": "Rimuovi la cartella di caricamento automatico selezionata", "ja_JP": "", "ko_KR": "선택한 자동 불러오기 디렉터리 제거", "no_NO": "Fjern valgt autoload-mappe", @@ -15007,7 +15007,7 @@ "es_ES": "Activa o desactiva los temas personalizados para la interfaz", "fr_FR": "Utilisez un thème personnalisé Avalonia pour modifier l'apparence des menus de l'émulateur", "he_IL": "השתמש בעיצוב מותאם אישית של אבלוניה עבור ה-ממשק הגראפי כדי לשנות את המראה של תפריטי האמולטור", - "it_IT": "Attiva o disattiva temi personalizzati nella GUI", + "it_IT": "Utilizza un tema di Avalonia personalizzato per cambiare l'aspetto dei menù dell'emulatore", "ja_JP": "エミュレータのメニュー外観を変更するためカスタム Avalonia テーマを使用します", "ko_KR": "GUI용 사용자 정의 Avalonia 테마를 사용하여 에뮬레이터 메뉴의 모양 변경", "no_NO": "Bruk et egendefinert Avalonia tema for GUI for å endre utseende til emulatormenyene", @@ -15032,7 +15032,7 @@ "es_ES": "Carpeta que contiene los temas personalizados para la interfaz", "fr_FR": "Chemin vers le thème personnalisé de l'interface utilisateur", "he_IL": "נתיב לערכת נושא לממשק גראפי מותאם אישית", - "it_IT": "Percorso al tema GUI personalizzato", + "it_IT": "Percorso al tema dell'interfaccia personalizzato", "ja_JP": "カスタム GUI テーマのパスです", "ko_KR": "사용자 정의 GUI 테마 경로", "no_NO": "Bane til egendefinert GUI-tema", @@ -15057,7 +15057,7 @@ "es_ES": "Busca un tema personalizado para la interfaz", "fr_FR": "Parcourir vers un thème personnalisé pour l'interface utilisateur", "he_IL": "חפש עיצוב ממשק גראפי מותאם אישית", - "it_IT": "Sfoglia per cercare un tema GUI personalizzato", + "it_IT": "Scegli un tema dell'interfaccia personalizzato", "ja_JP": "カスタム GUI テーマを参照します", "ko_KR": "사용자 정의 GUI 테마 찾아보기", "no_NO": "Søk etter et egendefinert GUI-tema", @@ -15257,7 +15257,7 @@ "es_ES": "", "fr_FR": "Resynchronise la Date du Système pour qu'elle soit la même que celle du PC.\n\nCeci n'est pas un paramètrage automatique, la date peut se désynchroniser; dans ce cas là, rappuyer sur le boutton.", "he_IL": "", - "it_IT": "", + "it_IT": "Sincronizza data e ora del sistema con quelle del PC.\n\nQuesta non è un'opzione attiva, perciò data e ora potrebbero tornare a non essere sincronizzate: in tal caso basterà cliccare nuovamente questo pulsante.", "ja_JP": "", "ko_KR": "시스템 시간을 PC의 현재 날짜 및 시간과 일치하도록 다시 동기화합니다.\n\n이 설정은 활성 설정이 아니므로 여전히 동기화되지 않을 수 있으며, 이 경우 이 버튼을 다시 클릭하면 됩니다.", "no_NO": "Resynkroniser systemtiden slik at den samsvarer med PC-ens gjeldende dato og klokkeslett. \\Dette er ikke en aktiv innstilling, men den kan likevel komme ut av synkronisering; i så fall er det bare å klikke på denne knappen igjen.", @@ -15282,7 +15282,7 @@ "es_ES": "Sincronización vertical de la consola emulada. En práctica un limitador del framerate para la mayoría de los juegos; desactivando puede causar que juegos corran a mayor velocidad o que las pantallas de carga tarden más o queden atascados.\n\nSe puede alternar en juego utilizando una tecla de acceso rápido configurable (F1 by default). Recomendamos hacer esto en caso de querer desactivar sincroniziación vertical.\n\nDesactívalo si no sabes qué hacer.", "fr_FR": "La synchronisation verticale de la console émulée. Essentiellement un limiteur de trame pour la majorité des jeux ; le désactiver peut entraîner un fonctionnement plus rapide des jeux ou prolonger ou bloquer les écrans de chargement.\n\nPeut être activé ou désactivé en jeu avec un raccourci clavier de votre choix (F1 par défaut). Nous recommandons de le faire si vous envisagez de le désactiver.\n\nLaissez activé si vous n'êtes pas sûr.", "he_IL": "", - "it_IT": "Sincronizzazione verticale della console Emulata. Essenzialmente un limitatore di frame per la maggior parte dei giochi; disabilitarlo può far girare giochi a velocità più alta, allungare le schermate di caricamento o farle bloccare.\n\nPuò essere attivata in gioco con un tasto di scelta rapida (F1 per impostazione predefinita). Ti consigliamo di farlo se hai intenzione di disabilitarlo.\n\nLascia ON se non sei sicuro.", + "it_IT": "Sincronizzazione verticale della console emulata. Funziona essenzialmente come un limitatore del framerate per la maggior parte dei giochi; disabilitarla può far girare giochi a velocità più alta, allungare le schermate di caricamento o farle bloccare.\n\nPuò essere attivata mentre giochi con un tasto di scelta rapida (F1 per impostazione predefinita). Ti consigliamo di farlo se hai intenzione di disabilitarla.\n\nNel dubbio, lascia l'opzione attiva.", "ja_JP": "エミュレートされたゲーム機の垂直同期です. 多くのゲームにおいて, フレームリミッタとして機能します. 無効にすると, ゲームが高速で実行されたり, ロード中に時間がかかったり, 止まったりすることがあります.\n\n設定したホットキー(デフォルトではF1)で, ゲーム内で切り替え可能です. 無効にする場合は, この操作を行うことをおすすめします.\n\nよくわからない場合はオンのままにしてください.", "ko_KR": "에뮬레이트된 콘솔의 수직 동기화입니다. 기본적으로 대부분의 게임에서 프레임 제한 기능으로, 비활성화하면 게임이 더 빠른 속도로 실행되거나 로딩 화면이 더 오래 걸리거나 멈출 수 있습니다.\n\n게임 내에서 원하는 단축키(기본값은 F1)로 전환할 수 있습니다. 비활성화하려면 이 작업을 수행하는 것이 좋습니다.\n\n모르면 켬으로 두세요.", "no_NO": "Emuler konsollens loddrett synkronisering. på ett vis en bildefrekvens begrensning for de fleste spill; deaktivering kan få spill til å kjøre med høyere hastighet, eller til å laste skjermene tar lengre tid eller sitter fast.\n\nkan byttes inn i spillet med en hurtigtast for preferansen (F1 som standard). Vi anbefaler å gjøre dette hvis du planlegger å deaktivere dette.\n\nLa være PÅ hvis du er usikker.", @@ -15332,7 +15332,7 @@ "es_ES": "Cargue el PPTC utilizando un tercio de la cantidad de núcleos.", "fr_FR": "Charger le PPTC en utilisant un tiers des coeurs.", "he_IL": "", - "it_IT": "Carica il PPTC usando un terzo dei core.", + "it_IT": "Carica la cache PPTC usando un terzo dei core del processore.", "ja_JP": "", "ko_KR": "코어의 3분의 1을 사용하여 PPTC를 불러옵니다.", "no_NO": "Last inn PPTC med en tredjedel av antall kjerner.", @@ -15607,7 +15607,7 @@ "es_ES": "Ejecuta los comandos del motor gráfico en un segundo hilo. Acelera la compilación de sombreadores, reduce los tirones, y mejora el rendimiento en controladores gráficos que no realicen su propio procesamiento con múltiples hilos. Rendimiento ligeramente superior en controladores gráficos que soporten múltiples hilos.\n\nSelecciona \"Auto\" si no sabes qué hacer.", "fr_FR": "Exécute des commandes du backend graphiques sur un second thread.\n\nAccélère la compilation des shaders, réduit les crashs et les lags, améliore les performances sur les pilotes GPU sans support de multithreading. Légère augementation des performances sur les pilotes avec multithreading intégrer.\n\nRéglez sur Auto en cas d'incertitude.", "he_IL": "מריץ פקודות גראפיקה בתהליך שני נפרד.\n\nמאיץ עיבוד הצללות, מפחית תקיעות ומשפר ביצועים של דרייבר כרטיסי מסך אשר לא תומכים בהרצה רב-תהליכית.\n\nמוטב להשאיר על אוטומטי אם לא בטוחים.", - "it_IT": "Esegue i comandi del backend grafico su un secondo thread.\n\nVelocizza la compilazione degli shader, riduce lo stuttering e migliora le prestazioni sui driver grafici senza il supporto integrato al multithreading. Migliora leggermente le prestazioni sui driver che supportano il multithreading.\n\nNel dubbio, imposta l'opzione su Auto.", + "it_IT": "Esegue i comandi del backend grafico su un secondo thread.\n\nVelocizza la compilazione degli shader, riduce lo stuttering e migliora le prestazioni sui driver grafici senza il supporto integrato al multithreading. Migliora leggermente le prestazioni sui driver che supportano il multithreading.\n\nNel dubbio, imposta l'opzione su Automatico.", "ja_JP": "グラフィックスバックエンドのコマンドを別スレッドで実行します.\n\nシェーダのコンパイルを高速化し, 遅延を軽減し, マルチスレッド非対応の GPU ドライバにおいてパフォーマンスを改善します. マルチスレッド対応のドライバでも若干パフォーマンス改善が見られます.\n\nよくわからない場合は自動に設定してください.", "ko_KR": "2번째 스레드에서 그래픽 후단부 명령을 실행합니다.\n\n셰이더 컴파일 속도를 높이고, 끊김 현상을 줄이며, 자체 다중 스레딩 지원 없이 GPU 드라이버의 성능을 향상시킵니다. 다중 스레딩이 있는 드라이버에서 성능이 좀 더 좋습니다.\n\n모르면 자동으로 설정합니다.", "no_NO": "Utfører grafikkbackend kommandoer på en annen tråd.\n\nØker hastigheten for shaderkomprimering, reduserer hakking og forbedrer ytelsen til GPU-drivere uten å spre støtten fra sine egne. Litt bedre ytelse på drivere med flertråd.\n\nSett for å AUTO hvis usikker.", @@ -15632,7 +15632,7 @@ "es_ES": "Ejecuta los comandos del motor gráfico en un segundo hilo. Acelera la compilación de sombreadores, reduce los tirones, y mejora el rendimiento en controladores gráficos que no realicen su propio procesamiento con múltiples hilos. Rendimiento ligeramente superior en controladores gráficos que soporten múltiples hilos.\n\nSelecciona \"Auto\" si no sabes qué hacer.", "fr_FR": "Exécute des commandes du backend graphiques sur un second thread.\n\nAccélère la compilation des shaders, réduit les crashs et les lags, améliore les performances sur les pilotes GPU sans support de multithreading. Légère augementation des performances sur les pilotes avec multithreading intégrer.\n\nRéglez sur Auto en cas d'incertitude.", "he_IL": "מריץ פקודות גראפיקה בתהליך שני נפרד.\n\nמאיץ עיבוד הצללות, מפחית תקיעות ומשפר ביצועים של דרייבר כרטיסי מסך אשר לא תומכים בהרצה רב-תהליכית.\n\nמוטב להשאיר על אוטומטי אם לא בטוחים.", - "it_IT": "Esegue i comandi del backend grafico su un secondo thread.\n\nVelocizza la compilazione degli shader, riduce lo stuttering e migliora le prestazioni sui driver grafici senza il supporto integrato al multithreading. Migliora leggermente le prestazioni sui driver che supportano il multithreading.\n\nNel dubbio, imposta l'opzione su Auto.", + "it_IT": "Esegue i comandi del backend grafico su un secondo thread.\n\nVelocizza la compilazione degli shader, riduce lo stuttering e migliora le prestazioni sui driver grafici senza il supporto integrato al multithreading. Migliora leggermente le prestazioni sui driver che supportano il multithreading.\n\nNel dubbio, imposta l'opzione su Automatico.", "ja_JP": "グラフィックスバックエンドのコマンドを別スレッドで実行します.\n\nシェーダのコンパイルを高速化し, 遅延を軽減し, マルチスレッド非対応の GPU ドライバにおいてパフォーマンスを改善します. マルチスレッド対応のドライバでも若干パフォーマンス改善が見られます.\n\nよくわからない場合は自動に設定してください.", "ko_KR": "2번째 스레드에서 그래픽 후단부 명령을 실행합니다.\n\n셰이더 컴파일 속도를 높이고 끊김 현상을 줄이며 자체 다중 스레딩 지원 없이 GPU 드라이버의 성능을 향상시킵니다. 다중 스레딩이 있는 드라이버에서 성능이 좀 더 좋습니다.\n\n모르면 자동으로 설정합니다.", "no_NO": "Utfører grafikkbackend kommandoer på en annen tråd.\n\nØker hastigheten for shaderkomprimering, reduserer hakking og forbedrer ytelsen til GPU-drivere uten flertråd støtte. Litt bedre ytelse på drivere med flertråd.\n\nSett for å AUTO hvis usikker.", @@ -15682,7 +15682,7 @@ "es_ES": "Multiplica la resolución de rendereo del juego.\n\nAlgunos juegos podrían no funcionar con esto y verse pixelado al aumentar la resolución; en esos casos, quizás sería necesario buscar mods que de anti-aliasing o que aumenten la resolución interna. Para usar este último, probablemente necesitarás seleccionar Nativa.\n\nEsta opción puede ser modificada mientras que un juego este corriendo haciendo click en \"Aplicar\" más abajo; simplemente puedes mover la ventana de configuración a un lado y experimentar hasta que encuentres tu estilo preferido para un juego.\n\nTener en cuenta que 4x es excesivo para prácticamente cualquier configuración.", "fr_FR": "Multiplie la résolution de rendu du jeu.\n\nQuelques jeux peuvent ne pas fonctionner avec cette fonctionnalité et sembler pixelisés même lorsque la résolution est augmentée ; pour ces jeux, vous devrez peut-être trouver des mods qui suppriment l'anti-aliasing ou qui augmentent leur résolution de rendu interne. Pour utiliser cette dernière option, vous voudrez probablement sélectionner \"Natif\".\n\nCette option peut être modifiée pendant qu'un jeu est en cours d'exécution en cliquant sur \"Appliquer\" ci-dessous ; vous pouvez simplement déplacer la fenêtre des paramètres sur le côté et expérimenter jusqu'à ce que vous trouviez l'apparence souhaitée pour un jeu.\n\nGardez à l'esprit que 4x est excessif pour pratiquement n'importe quelle configuration.", "he_IL": "", - "it_IT": "Moltiplica la risoluzione di rendering del gioco.\n\nAlcuni giochi potrebbero non funzionare con questa opzione e sembrare pixelati anche quando la risoluzione è aumentata; per quei giochi, potrebbe essere necessario trovare mod che rimuovono l'anti-aliasing o che aumentano la risoluzione di rendering interna. Per quest'ultimo caso, probabilmente dovrai selezionare Nativo (1x).\n\nQuesta opzione può essere modificata mentre un gioco è in esecuzione facendo clic su \"Applica\" qui sotto; puoi semplicemente spostare la finestra delle impostazioni da parte e sperimentare fino a quando non trovi il tuo look preferito per un gioco.\n\nTenete a mente che 4x è troppo per praticamente qualsiasi configurazione.", + "it_IT": "Moltiplica la risoluzione di rendering del gioco.\n\nAlcuni giochi potrebbero non funzionare con questa opzione e sembrare pixelati anche quando la risoluzione è aumentata; per quei giochi, potrebbe essere necessario trovare mod che rimuovono l'anti-aliasing o che aumentano la risoluzione di rendering interna. Per quest'ultimo caso, probabilmente dovrai selezionare Nativo (1x).\n\nQuesta opzione può essere modificata mentre un gioco è in esecuzione facendo clic su \"Applica\" qui sotto; puoi semplicemente spostare la finestra delle impostazioni da parte e sperimentare fino a quando non trovi il tuo look preferito.\n\nTieni presente che \"4x\" è eccessivo per praticamente qualsiasi configurazione.", "ja_JP": "ゲームのレンダリング解像度倍率を設定します.\n\n解像度を上げてもピクセルのように見えるゲームもあります. そのようなゲームでは, アンチエイリアスを削除するか, 内部レンダリング解像度を上げる mod を見つける必要があるかもしれません. その場合, ようなゲームでは、ネイティブを選択してください.\n\nこのオプションはゲーム実行中に下の「適用」をクリックすることで変更できます. 設定ウィンドウを脇に移動して, ゲームが好みの表示になるよう試してみてください.\n\nどのような設定でも, \"4x\" はやり過ぎであることを覚えておいてください.", "ko_KR": "게임의 렌더링 해상도를 배가시킵니다.\n\n일부 게임에서는 이 기능이 작동하지 않고 해상도가 높아져도 픽셀화되어 보일 수 있습니다. 해당 게임의 경우 앤티 앨리어싱을 제거하거나 내부 렌더링 해상도를 높이는 모드를 찾아야 할 수 있습니다. 후자를 사용하려면 기본을 선택하는 것이 좋습니다.\n\n이 옵션은 아래의 \"적용\"을 클릭하여 게임이 실행되는 동안 변경할 수 있습니다. 설정 창을 옆으로 옮기고 원하는 게임 모양을 찾을 때까지 실험해 보세요.\n\n4배는 거의 모든 설정에서 과하다는 점을 명심하세요.", "no_NO": "Dobler spillets gjengivelse.\n\nNoen få spill fungerer kanskje ikke med dette aktivert og kan se veldig pikselert ut selv når gjengivelsen er økt; for de spillene, så kan det hende du må bruke modifikasjoner som fjerner anti-aliasing eller som øker den interne gjengivelsen. For og bruke sistnenvte, så vil du helst bruke \"Native\".\n\nHa til tanke at 4x er unødig for virituelt alle maskiner.", @@ -15707,7 +15707,7 @@ "es_ES": "Escalado de resolución de coma flotante, como por ejemplo 1,5. Los valores no íntegros pueden causar errores gráficos o crashes.", "fr_FR": "Échelle de résolution à virgule, telle que : 1.5. Les échelles non intégrales sont plus susceptibles de causer des problèmes ou des crashs.", "he_IL": "שיפור רזולוציית נקודה צפה, כגון 1.5. הוא שיפור לא אינטגרלי הנוטה לגרום יותר בעיות או להקריס.", - "it_IT": "Scala della risoluzione in virgola mobile, come 1,5. Le scale non integrali hanno maggiori probabilità di causare problemi o crash.", + "it_IT": "Scala della risoluzione in virgola mobile, come 1,5. I valori non interi hanno maggiori probabilità di causare problemi o arresti anomali.", "ja_JP": "1.5 のような整数でない倍率を指定すると,問題が発生したりクラッシュしたりする場合があります.", "ko_KR": "부동 소수점 해상도 스케일(예: 1.5)입니다. 적분이 아닌 스케일은 문제나 충돌을 일으킬 가능성이 높습니다.", "no_NO": "Det er mer sannsynlig at flytende punktoppløsning skalaer som 1.5. Ikke-integrerte skalaer forårsaker problemer eller krasj.", @@ -15732,7 +15732,7 @@ "es_ES": "Nivel de filtrado anisotrópico. Setear en Auto para utilizar el valor solicitado por el juego.", "fr_FR": "Niveau de filtrage anisotrope. Réglez sur Auto pour utiliser la valeur demandée par le jeu.", "he_IL": "", - "it_IT": "Livello del filtro anisotropico. Imposta su Auto per usare il valore richiesto dal gioco.", + "it_IT": "Livello del filtro anisotropico. Imposta su Automatico per usare il valore richiesto dal gioco.", "ja_JP": "異方性フィルタリングのレベルです. ゲームが要求する値を使用する場合は「自動」を設定してください.", "ko_KR": "이방성 필터링 수준입니다. 게임에서 요청한 값을 사용하려면 자동으로 설정하세요.", "no_NO": "Nivå av Anisotropisk filtrering. Sett til Auto for å bruke verdien som kreves av spillet.", @@ -16032,7 +16032,7 @@ "es_ES": "Usar con cuidado", "fr_FR": "À utiliser avec précaution", "he_IL": "השתמש בזהירות", - "it_IT": "Usa con attenzione", + "it_IT": "Usa con cautela", "ja_JP": "使用上の注意", "ko_KR": "주의해서 사용", "no_NO": "Bruk med forsiktighet", @@ -16107,7 +16107,7 @@ "es_ES": "Abre el explorador de archivos para elegir un archivo compatible con Switch para cargar", "fr_FR": "Ouvre l'explorateur de fichiers pour choisir un fichier compatible Switch à charger", "he_IL": "פתח סייר קבצים כדי לבחור קובץ תואם סוויץ' לטעינה", - "it_IT": "Apri un file explorer per scegliere un file compatibile Switch da caricare", + "it_IT": "Apri un selettore file per scegliere un file compatibile con Switch da caricare", "ja_JP": "ロードする Switch 互換のファイルを選択するためファイルエクスプローラを開きます", "ko_KR": "파일 탐색기를 열어 불러올 Switch 호환 파일을 선택", "no_NO": "Åpne filutforsker for å velge en Switch kompatibel fil å laste", @@ -16132,7 +16132,7 @@ "es_ES": "Abre el explorador de archivos para elegir un archivo desempaquetado y compatible con Switch para cargar", "fr_FR": "Ouvre l'explorateur de fichiers pour choisir une application Switch compatible et décompressée à charger", "he_IL": "פתח סייר קבצים כדי לבחור יישום תואם סוויץ', לא ארוז לטעינה.", - "it_IT": "Apri un file explorer per scegliere un file compatibile Switch, applicazione sfusa da caricare", + "it_IT": "Apri un selettore file per scegliere un'applicazione estratta compatibile con Switch da caricare", "ja_JP": "ロードする Switch 互換の展開済みアプリケーションを選択するためファイルエクスプローラを開きます", "ko_KR": "Switch와 호환되는 압축 해제된 앱을 선택하여 불러오려면 파일 탐색기를 엽니다.", "no_NO": "Åpne en filutforsker for å velge en Switch kompatibel, upakket applikasjon for å laste", @@ -16157,7 +16157,7 @@ "es_ES": "Abrir un explorador de archivos para seleccionar una o más carpetas para cargar DLC de forma masiva", "fr_FR": "Ouvre l'explorateur de fichier pour choisir un ou plusieurs dossiers duquel charger les DLC", "he_IL": "", - "it_IT": "Apri un esploratore file per scegliere una o più cartelle dalle quali caricare DLC in massa", + "it_IT": "Apri un selettore file per scegliere una o più cartelle dalle quali caricare DLC in blocco", "ja_JP": "", "ko_KR": "파일 탐색기를 열어 DLC를 일괄 불러오기할 폴더를 하나 이상 선택", "no_NO": "Åpne en filutforsker for å velge en eller flere mapper å laste inn DLC fra", @@ -16182,7 +16182,7 @@ "es_ES": "Abrir un explorador de archivos para seleccionar una o más carpetas para cargar actualizaciones de título de forma masiva", "fr_FR": "Ouvre l'explorateur de fichier pour choisir un ou plusieurs dossiers duquel charger les mises à jour", "he_IL": "", - "it_IT": "Apri un esploratore file per scegliere una o più cartelle dalle quali caricare aggiornamenti in massa", + "it_IT": "Apri un selettore file per scegliere una o più cartelle dalle quali caricare aggiornamenti in blocco", "ja_JP": "", "ko_KR": "파일 탐색기를 열어 하나 이상의 폴더를 선택하여 대량으로 타이틀 업데이트 불러오기", "no_NO": "Åpne en filutforsker for å velge en eller flere mapper som du vil laste inn titteloppdateringer fra", @@ -17132,7 +17132,7 @@ "es_ES": "Error al analizar el firmware", "fr_FR": "Erreur d'analyse du firmware", "he_IL": "שגיאת ניתוח קושחה", - "it_IT": "Errori di analisi del firmware", + "it_IT": "Errore di analisi del firmware", "ja_JP": "ファームウェアのパーズエラー", "ko_KR": "펌웨어 구문 분석 오류", "no_NO": "Fastvare analysefeil", @@ -17457,7 +17457,7 @@ "es_ES": "Incorporado: Versión {0}", "fr_FR": "Inclus avec le jeu: Version {0}", "he_IL": "", - "it_IT": "In bundle: Versione {0}", + "it_IT": "Incluso: Versione {0}", "ja_JP": "", "ko_KR": "번들 : 버전 {0}", "no_NO": "Pakket: Versjon {0}", @@ -17482,7 +17482,7 @@ "es_ES": "Incorporado:", "fr_FR": "Inclus avec le jeu :", "he_IL": "", - "it_IT": "In bundle:", + "it_IT": "Incluso:", "ja_JP": "", "ko_KR": "번들 :", "no_NO": "Pakket:", @@ -17532,7 +17532,7 @@ "es_ES": "Sin recortar", "fr_FR": "Non réduit", "he_IL": "", - "it_IT": "Non Trimmato", + "it_IT": "Dim. originale", "ja_JP": "", "ko_KR": "트리밍되지 않음", "no_NO": "Ikke trimmet", @@ -17557,7 +17557,7 @@ "es_ES": "Recortado", "fr_FR": "Réduit", "he_IL": "", - "it_IT": "Trimmato", + "it_IT": "Dim. ridotta", "ja_JP": "", "ko_KR": "트리밍됨", "no_NO": "Trimmet", @@ -17607,7 +17607,7 @@ "es_ES": "Ahorra {0:n0} Mb", "fr_FR": "Sauvegarde de {0:n0} Mo", "he_IL": "", - "it_IT": "Salva {0:n0} Mb", + "it_IT": "Risparmia {0:n0} MB", "ja_JP": "", "ko_KR": "{0:n0} Mb 저장", "no_NO": "Spare {0:n0} Mb", @@ -17632,7 +17632,7 @@ "es_ES": "{0:n0} Mb ahorrado(s)", "fr_FR": "Sauvegardé {0:n0} Mo", "he_IL": "", - "it_IT": "Salva {0:n0} Mb", + "it_IT": "Risparmiati {0:n0} MB", "ja_JP": "", "ko_KR": "{0:n0}Mb 저장됨", "no_NO": "Spart {0:n0} Mb", @@ -17832,7 +17832,7 @@ "es_ES": "Ingresa el nuevo nombre de tu Amiibo", "fr_FR": "Entrer le nouveau nom de votre Amiibo", "he_IL": "", - "it_IT": "", + "it_IT": "Inserisci il nuovo nome del tuo Amiibo", "ja_JP": "", "ko_KR": "Amiibo의 새 이름 입력하기", "no_NO": "Skriv inn Amiiboens nye navn", @@ -17857,7 +17857,7 @@ "es_ES": "Escanea tu Amiibo ahora.", "fr_FR": "Veuillez scannez votre Amiibo.", "he_IL": "", - "it_IT": "", + "it_IT": "Scansiona ora il tuo Amiibo.", "ja_JP": "", "ko_KR": "지금 Amiibo를 스캔하세요.", "no_NO": "Vennligst skann Amiiboene dine nå.", @@ -17907,7 +17907,7 @@ "es_ES": "Debe ser sólo 0-9 o '.'", "fr_FR": "Doit être 0-9 ou '.' uniquement", "he_IL": "חייב להיות בין 0-9 או '.' בלבד", - "it_IT": "Deve essere solo 0-9 o '.'", + "it_IT": "Può contenere solo numeri o '.'", "ja_JP": "0-9 または '.' のみでなければなりません", "ko_KR": "0-9 또는 '.'만 가능", "no_NO": "Må kun være 0-9 eller '.'", @@ -17932,7 +17932,7 @@ "es_ES": "Solo deben ser caracteres no CJK", "fr_FR": "Doit être uniquement des caractères non CJK", "he_IL": "מחויב להיות ללא אותיות CJK", - "it_IT": "Deve essere solo caratteri non CJK", + "it_IT": "Può contenere solo caratteri non CJK", "ja_JP": "CJK文字以外のみ", "ko_KR": "CJK 문자가 아닌 문자만 가능", "no_NO": "Må kun være uten CJK-tegn", @@ -17957,7 +17957,7 @@ "es_ES": "Solo deben ser texto ASCII", "fr_FR": "Doit être uniquement du texte ASCII", "he_IL": "מחויב להיות טקסט אסקיי", - "it_IT": "Deve essere solo testo ASCII", + "it_IT": "Può contenere solo testo ASCII", "ja_JP": "ASCII文字列のみ", "ko_KR": "ASCII 텍스트만 가능", "no_NO": "Må være kun ASCII-tekst", @@ -18082,7 +18082,7 @@ "es_ES": "Renombrando archivos viejos...", "fr_FR": "Renommage des anciens fichiers...", "he_IL": "משנה שמות של קבצים ישנים...", - "it_IT": "Rinominazione dei vecchi files...", + "it_IT": "Ridenominazione dei vecchi file...", "ja_JP": "古いファイルをリネーム中...", "ko_KR": "오래된 파일 이름 바꾸기...", "no_NO": "Omdøper gamle filer...", @@ -18757,7 +18757,7 @@ "es_ES": "Archivo de tema Xaml", "fr_FR": "Fichier thème Xaml", "he_IL": "קובץ ערכת נושא Xaml", - "it_IT": "File del tema xaml", + "it_IT": "File del tema XAML", "ja_JP": "Xaml テーマファイル", "ko_KR": "Xaml 테마 파일", "no_NO": "Xaml tema-fil", @@ -18982,7 +18982,7 @@ "es_ES": "Verificar y recortar archivo XCI", "fr_FR": "Vérifier et Réduire le fichier XCI", "he_IL": "", - "it_IT": "Controlla e Trimma i file XCI ", + "it_IT": "Controlla e riduci la dimensione del file XCI", "ja_JP": "", "ko_KR": "XCI 파일 확인 및 정리", "no_NO": "Kontroller og trim XCI-filen", @@ -19007,7 +19007,7 @@ "es_ES": "Esta función verificará el espacio vacío y después recortará el archivo XCI para ahorrar espacio en disco", "fr_FR": "Cette fonction va vérifier l'espace vide, puis réduire le fichier XCI pour économiser de l'espace de disque dur.", "he_IL": "", - "it_IT": "Questa funzionalita controllerà prima lo spazio libero e poi trimmerà il file XCI per liberare dello spazio.", + "it_IT": "Questa funzionalità controllerà prima lo spazio libero e poi ridurrà la dimensione del file XCI per risparmiare spazio su disco.", "ja_JP": "", "ko_KR": "이 기능은 먼저 충분한 공간을 확보한 다음 XCI 파일을 트리밍하여 디스크 공간을 절약합니다.", "no_NO": "Denne funksjonen kontrollerer først hvor mye plass som er ledig, og trimmer deretter XCI-filen for å spare diskplass.", @@ -19032,7 +19032,7 @@ "es_ES": "Tamaño de archivo actual: {0:n} MB\nTamaño de datos de juego: {1:n} MB\nAhorro de espacio en disco: {2:n} MB", "fr_FR": "Taille actuelle du fichier: {0:n} MB\nTaille des données de jeux: {1:n} MB\nÉconomie d'espaces sur le disque: {2:n} MB", "he_IL": "", - "it_IT": "Dimensioni Attuali File: {0:n} MB\nDimensioni Dati Gioco: {1:n} MB\nRisparimio Spazio Disco: {2:n} MB", + "it_IT": "Dimensione attuale del file: {0:n} MB\nDimensione dei dati del gioco: {1:n} MB\nRisparmio spazio su disco: {2:n} MB", "ja_JP": "", "ko_KR": "현재 파일 크기 : {0:n}MB\n게임 데이터 크기 : {1:n}MB\n디스크 공간 절약 : {2:n}MB", "no_NO": "Nåværende filstørrelse: 0:n MB\nSpilldatastørrelse: {1:n} MB\nDiskplassbesparelse: {2:n} MB", @@ -19057,7 +19057,7 @@ "es_ES": "El archivo XCI no necesita ser recortado. Verifica los logs para más detalles.", "fr_FR": "Fichier XCI n'a pas besoin d'être réduit. Regarder les journaux pour plus de détails", "he_IL": "", - "it_IT": "Il file XCI non deve essere trimmato. Controlla i log per ulteriori dettagli", + "it_IT": "Non è necessario ridurre la dimensione del file XCI. Controlla i log per ulteriori dettagli", "ja_JP": "", "ko_KR": "XCI 파일은 트리밍할 필요가 없습니다. 자세한 내용은 로그를 확인", "no_NO": "XCI-filen trenger ikke å trimmes. Sjekk loggene for mer informasjon", @@ -19082,7 +19082,7 @@ "es_ES": "El recorte del archivo XCI no puede ser deshecho. Verifica los registros para más detalles.", "fr_FR": "Fichier XCI ne peut pas être dé-réduit. Regarder les journaux pour plus de détails", "he_IL": "", - "it_IT": "Il file XCI non può essere untrimmato. Controlla i log per ulteriori dettagli", + "it_IT": "Il file XCI non può essere riportato alla sua dimensione originale. Controlla i log per ulteriori dettagli", "ja_JP": "", "ko_KR": "XCI 파일은 트리밍을 해제할 수 없습니다. 자세한 내용은 로그를 확인", "no_NO": "XCI-filen kan ikke trimmes. Sjekk loggene for mer informasjon", @@ -19107,7 +19107,7 @@ "es_ES": "El archivo XCI es de solo Lectura y no se le puede escribir. Lee el registro para más información.", "fr_FR": "Fichier XCI est en Lecture Seule et n'a pas pu être rendu accessible en écriture. Regarder les journaux pour plus de détails", "he_IL": "", - "it_IT": "Il file XCI è in sola lettura e non può essere reso Scrivibile. Controlla i log per ulteriori dettagli", + "it_IT": "Il file XCI è in sola lettura e non può essere reso accessibile in scrittura. Controlla i log per ulteriori dettagli", "ja_JP": "", "ko_KR": "XCI 파일은 읽기 전용이므로 쓰기 가능하게 만들 수 없습니다. 자세한 내용은 로그를 확인", "no_NO": "XCI-filen er skrivebeskyttet og kunne ikke gjøres skrivbar. Sjekk loggene for mer informasjon", @@ -19132,7 +19132,7 @@ "es_ES": "El archivo XCI ha cambiado de tamaño desde que fue escaneado. Verifica que no se esté escribiendo al archivo y vuelve a intentarlo.", "fr_FR": "Fichier XCI a changé en taille depuis qu'il a été scanné. Vérifier que le fichier n'est pas en cours d'écriture et réessayer.", "he_IL": "", - "it_IT": "Il file XCI ha cambiato dimensioni da quando è stato scansionato. Controlla che il file non stia venendo scritto da qualche altro programma e poi riprova.", + "it_IT": "La dimensione del file XCI è cambiata da quando è stato scansionato. Controlla che il file non stia venendo scritto da qualche altro programma e poi riprova.", "ja_JP": "", "ko_KR": "XCI 파일이 스캔된 후 크기가 변경되었습니다. 파일이 쓰여지고 있지 않은지 확인하고 다시 시도하세요.", "no_NO": "XCI File har endret størrelse siden den ble skannet. Kontroller at det ikke skrives til filen, og prøv på nytt.", @@ -19157,7 +19157,7 @@ "es_ES": "El archivo XCI tiene datos en el área de espacio libre, no es seguro recortar.", "fr_FR": "Fichier XCI a des données dans la zone d'espace libre, ce n'est pas sûr de réduire", "he_IL": "", - "it_IT": "Il file XCI ha dati nello spazio libero, non è sicuro effettuare il trimming", + "it_IT": "Il file XCI contiene dei dati nello spazio libero, non è sicuro ridurne la dimensione", "ja_JP": "", "ko_KR": "XCI 파일에 여유 공간 영역에 데이터가 있으므로 트리밍하는 것이 안전하지 않음", "no_NO": "XCI-filen har data i ledig plass, og det er ikke trygt å trimme den", @@ -19182,7 +19182,7 @@ "es_ES": "El archivo XCI contiene datos inválidos. Lee el registro para más información.", "fr_FR": "Fichier XCI contient des données invalides. Regarder les journaux pour plus de détails", "he_IL": "", - "it_IT": "Il file XCI contiene dati invlidi. Controlla i log per ulteriori dettagli", + "it_IT": "Il file XCI contiene dei dati non validi. Controlla i log per ulteriori dettagli", "ja_JP": "", "ko_KR": "XCI 파일에 유효하지 않은 데이터가 포함되어 있습니다. 자세한 내용은 로그를 확인", "no_NO": "XCI-filen inneholder ugyldige data. Sjekk loggene for ytterligere detaljer", @@ -19207,7 +19207,7 @@ "es_ES": "El archivo XCI no se puede abrir para escribirlo. Lee el registro para más información.", "fr_FR": "Fichier XCI n'a pas pu été ouvert pour écriture. Regarder les journaux pour plus de détails", "he_IL": "", - "it_IT": "Il file XCI non può essere aperto per essere scritto. Controlla i log per ulteriori dettagli", + "it_IT": "Il file XCI non può essere aperto in scrittura. Controlla i log per ulteriori dettagli", "ja_JP": "", "ko_KR": "XCI 파일을 쓰기 위해 열 수 없습니다. 자세한 내용은 로그를 확인", "no_NO": "XCI-filen kunne ikke åpnes for skriving. Sjekk loggene for ytterligere detaljer", @@ -19232,7 +19232,7 @@ "es_ES": "El recorte del archivo XCI falló", "fr_FR": "Réduction du fichier XCI a échoué", "he_IL": "", - "it_IT": "Trimming del file XCI fallito", + "it_IT": "Riduzione della dimensione del file XCI fallita", "ja_JP": "", "ko_KR": "XCI 파일 트리밍에 실패", "no_NO": "Trimming av XCI-filen mislyktes", @@ -19257,7 +19257,7 @@ "es_ES": "La operación fue cancelada", "fr_FR": "L'opération a été annulée", "he_IL": "", - "it_IT": "Operazione Cancellata", + "it_IT": "L'operazione è stata annullata", "ja_JP": "", "ko_KR": "작업이 취소됨", "no_NO": "Operasjonen ble avlyst", @@ -19282,7 +19282,7 @@ "es_ES": "No se realizó ninguna operación", "fr_FR": "Aucune opération a été faite", "he_IL": "", - "it_IT": "Nessuna operazione è stata effettuata", + "it_IT": "Non è stata effettuata alcuna operazione", "ja_JP": "", "ko_KR": "작업이 수행되지 않음", "no_NO": "Ingen operasjon ble utført", @@ -19432,7 +19432,7 @@ "es_ES": "Recortador de archivos XCI", "fr_FR": "Rogneur de fichier XCI", "he_IL": "", - "it_IT": "", + "it_IT": "Riduci dimensioni dei file XCI", "ja_JP": "", "ko_KR": "XCI 파일 트리머", "no_NO": "", @@ -19457,7 +19457,7 @@ "es_ES": "{0} de {1} Título(s) seleccionado(s)", "fr_FR": "{0} sur {1} Fichier(s) Sélectionnés", "he_IL": "", - "it_IT": "{0} di {1} Titolo(i) Selezionati", + "it_IT": "{0} di {1} titoli selezionati", "ja_JP": "", "ko_KR": "{1}개 타이틀 중 {0}개 선택됨", "no_NO": "{0} av {1} Valgte tittel(er)", @@ -19482,7 +19482,7 @@ "es_ES": "{0} de {1} Título(s) seleccionado(s) ({2} mostrado(s))", "fr_FR": "{0} sur {1} Fichier(s) Sélectionnés ({2} affiché(s)", "he_IL": "", - "it_IT": "{0} of {1} Titolo(i) Selezionati ({2} visualizzato)", + "it_IT": "{0} di {1} titoli selezionati ({2} visualizzati)", "ja_JP": "", "ko_KR": "{1}개 타이틀 중 {0}개 선택됨({2}개 표시됨)", "no_NO": "{0} av {1} Tittel(er) valgt ({2} vises)", @@ -19507,7 +19507,7 @@ "es_ES": "Recortando {0} Título(s)...", "fr_FR": "Réduction de {0} Fichier(s)...", "he_IL": "", - "it_IT": "Trimming {0} Titolo(i)...", + "it_IT": "Riduzione delle dimensioni di {0} titolo/i...", "ja_JP": "", "ko_KR": "{0}개의 타이틀을 트리밍 중...", "no_NO": "Trimming av {0} tittel(er)...", @@ -19532,7 +19532,7 @@ "es_ES": "Deshaciendo recorte de {0} Título(s)...", "fr_FR": "Dé-Réduction de {0} Fichier(s)...", "he_IL": "", - "it_IT": "Untrimming {0} Titolo(i)...", + "it_IT": "Ripristino alle dimensioni originali di {0} titolo/i...", "ja_JP": "", "ko_KR": "{0}개의 타이틀을 트리밍 해제 중...", "no_NO": "Untrimming {0} Tittel(er)...", @@ -19582,7 +19582,7 @@ "es_ES": "Ahorro potencial", "fr_FR": "Économies potentielles d'espace de disque dur", "he_IL": "", - "it_IT": "Potenziali Salvataggi", + "it_IT": "Risparmio potenziale", "ja_JP": "", "ko_KR": "잠재적 비용 절감", "no_NO": "Potensielle besparelser", @@ -19607,7 +19607,7 @@ "es_ES": "Ahorro real", "fr_FR": "Économies actualles d'espace de disque dur", "he_IL": "", - "it_IT": "Effettivi Salvataggi", + "it_IT": "Risparmio effettivo", "ja_JP": "", "ko_KR": "실제 비용 절감", "no_NO": "Faktiske besparelser", @@ -19632,7 +19632,7 @@ "es_ES": "", "fr_FR": "{0:n0} Mo", "he_IL": "", - "it_IT": "", + "it_IT": "{0:n0} MB", "ja_JP": "", "ko_KR": "{0:n0}MB", "no_NO": "", @@ -19657,7 +19657,7 @@ "es_ES": "Seleccionar mostrado(s)", "fr_FR": "Sélectionner Affiché", "he_IL": "", - "it_IT": "Seleziona Visualizzati", + "it_IT": "Seleziona visualizzati", "ja_JP": "", "ko_KR": "표시됨 선택", "no_NO": "Velg vist", @@ -19682,7 +19682,7 @@ "es_ES": "Deseleccionar mostrado(s)", "fr_FR": "Désélectionner Affiché", "he_IL": "", - "it_IT": "Deselziona Visualizzati", + "it_IT": "Deseleziona visualizzati", "ja_JP": "", "ko_KR": "표시됨 선택 취소", "no_NO": "Opphev valg av Vist", @@ -19732,7 +19732,7 @@ "es_ES": "Ahorro de espacio", "fr_FR": "Économies de disque dur", "he_IL": "", - "it_IT": "Salvataggio Spazio", + "it_IT": "Spazio risparmiato", "ja_JP": "", "ko_KR": "공간 절약s", "no_NO": "Plassbesparelser", @@ -19757,7 +19757,7 @@ "es_ES": "Recortar", "fr_FR": "Réduire", "he_IL": "", - "it_IT": "", + "it_IT": "Riduci dimensioni", "ja_JP": "", "ko_KR": "트림", "no_NO": "", @@ -19782,7 +19782,7 @@ "es_ES": "Deshacer recorte", "fr_FR": "Dé-Réduire", "he_IL": "", - "it_IT": "", + "it_IT": "Riporta alle dimensioni originali", "ja_JP": "", "ko_KR": "언트림", "no_NO": "Utrim", @@ -19807,7 +19807,7 @@ "es_ES": "{0} nueva(s) actualización(es) agregada(s)", "fr_FR": "{0} nouvelle(s) mise(s) à jour ajoutée(s)", "he_IL": "", - "it_IT": "{0} aggiornamento/i aggiunto/i", + "it_IT": "{0} nuovo/i aggiornamento/i aggiunto/i", "ja_JP": "", "ko_KR": "{0}개의 새 업데이트가 추가됨", "no_NO": "{0} ny(e) oppdatering(er) lagt til", @@ -19832,7 +19832,7 @@ "es_ES": "Las actualizaciones agrupadas no pueden ser eliminadas, solamente deshabilitadas.", "fr_FR": "Les mises à jour incluses avec le jeu ne peuvent pas être supprimées mais peuvent être désactivées.", "he_IL": "", - "it_IT": "Gli aggiornamenti inclusi non possono essere eliminati, ma solo disattivati", + "it_IT": "Gli aggiornamenti inclusi non possono essere rimossi, ma solo disabilitati.", "ja_JP": "", "ko_KR": "번들 업데이트는 제거할 수 없으며, 비활성화만 가능합니다.", "no_NO": "Medfølgende oppdateringer kan ikke fjernes, bare deaktiveres.", @@ -19907,7 +19907,7 @@ "es_ES": "", "fr_FR": "Les DLC inclus avec le jeu ne peuvent pas être supprimés mais peuvent être désactivés.", "he_IL": "", - "it_IT": "i DLC \"impacchettati\" non possono essere rimossi, ma solo disabilitati.", + "it_IT": "I DLC inclusi non possono essere rimossi, ma solo disabilitati.", "ja_JP": "", "ko_KR": "번들 DLC는 제거할 수 없으며 비활성화만 가능합니다.", "no_NO": "Medfølgende DLC kan ikke fjernes, bare deaktiveres.", @@ -19932,7 +19932,7 @@ "es_ES": "", "fr_FR": "{0} DLC(s) disponibles", "he_IL": "{0} הרחבות משחק", - "it_IT": "", + "it_IT": "{0} DLC disponibile/i", "ja_JP": "", "ko_KR": "{0} DLC 사용 가능", "no_NO": "{0} Nedlastbare innhold(er)", @@ -19957,7 +19957,7 @@ "es_ES": "Se agregaron {0} nuevo(s) contenido(s) descargable(s)", "fr_FR": "{0} nouveau(x) contenu(s) téléchargeable(s) ajouté(s)", "he_IL": "", - "it_IT": "{0} nuovo/i contenuto/i scaricabile/i aggiunto/i", + "it_IT": "{0} nuovo/i DLC aggiunto/i", "ja_JP": "", "ko_KR": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨", "no_NO": "{0} nytt nedlastbart innhold lagt til", @@ -19982,7 +19982,7 @@ "es_ES": "Se agregaron {0} nuevo(s) contenido(s) descargable(s)", "fr_FR": "{0} nouveau(x) contenu(s) téléchargeable(s) ajouté(s)", "he_IL": "", - "it_IT": "{0} contenuto/i scaricabile/i aggiunto/i", + "it_IT": "{0} nuovo/i DLC aggiunto/i", "ja_JP": "", "ko_KR": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨", "no_NO": "{0} nytt nedlastbart innhold lagt til", @@ -20007,7 +20007,7 @@ "es_ES": "Se eliminaron {0} contenido(s) descargable(s) faltantes", "fr_FR": "{0} contenu(s) téléchargeable(s) manquant(s) supprimé(s)", "he_IL": "", - "it_IT": "{0} contenuto/i scaricabile/i mancante/i rimosso/i", + "it_IT": "{0} DLC mancante/i rimosso/i", "ja_JP": "", "ko_KR": "{0}개의 내려받기 가능한 콘텐츠가 제거됨", "no_NO": "{0} manglende nedlastbart innhold fjernet", @@ -20032,7 +20032,7 @@ "es_ES": "Se agregaron {0} nueva(s) actualización(es)", "fr_FR": "{0} nouvelle(s) mise(s) à jour ajoutée(s)", "he_IL": "", - "it_IT": "{0} aggiornamento/i aggiunto/i", + "it_IT": "{0} nuovo/i aggiornamento/i aggiunto/i", "ja_JP": "", "ko_KR": "{0}개의 새 업데이트가 추가됨", "no_NO": "{0} ny(e) oppdatering(er) lagt til", @@ -20507,7 +20507,7 @@ "es_ES": "", "fr_FR": "", "he_IL": "", - "it_IT": "", + "it_IT": "Automatico", "ja_JP": "", "ko_KR": "자동", "no_NO": "", @@ -20532,7 +20532,7 @@ "es_ES": "", "fr_FR": "", "he_IL": "", - "it_IT": "", + "it_IT": "Utilizza Vulkan.\nSu un Mac con processore ARM, utilizza il backend Metal nei giochi che funzionano bene con quest'ultimo.", "ja_JP": "", "ko_KR": "Vulkan을 사용합니다.\nARM 맥에서 해당 플랫폼에서 잘 실행되는 게임을 플레이하는 경우 Metal 후단부를 사용합니다.", "no_NO": "Bruker Vulkan \nPå en ARM Mac, og når du spiller et spill som kjører bra under den, bruker du Metal-backend.", @@ -20632,7 +20632,7 @@ "es_ES": "Selecciona la tarjeta gráfica que se utilizará con los back-end de gráficos Vulkan.\n\nNo afecta la GPU que utilizará OpenGL.\n\nFije a la GPU marcada como \"dGUP\" ante dudas. Si no hay una, no haga modificaciones.", "fr_FR": "Sélectionnez la carte graphique qui sera utilisée avec l'interface graphique Vulkan.\n\nCela ne change pas le GPU qu'OpenGL utilisera.\n\nChoisissez le GPU noté \"dGPU\" si vous n'êtes pas sûr. S'il n'y en a pas, ne pas modifier.", "he_IL": "בחר את הכרטיס הגראפי שישומש עם הגראפיקה של וולקאן.\n\nדבר זה לא משפיע על הכרטיס הגראפי שישומש עם OpenGL.\n\nמוטב לבחור את ה-GPU המסומן כ-\"dGPU\" אם אינכם בטוחים, אם זו לא אופצייה, אל תשנו דבר.", - "it_IT": "Seleziona la scheda grafica che verrà usata con la backend grafica Vulkan.\n\nNon influenza la GPU che userà OpenGL.\n\nImposta la GPU contrassegnata come \"dGPU\" se non sei sicuro. Se non ce n'è una, lascia intatta quest'impostazione.", + "it_IT": "Seleziona la scheda grafica che verrà usata con il backend grafico Vulkan.\n\nL'opzione non modifica la GPU usata da OpenGL.\n\nNel dubbio, seleziona la GPU contrassegnata come \"dGPU\". Se non ce n'è una, lascia intatta questa opzione.", "ja_JP": "Vulkanグラフィックスバックエンドで使用されるグラフィックスカードを選択します.\n\nOpenGLが使用するGPUには影響しません.\n\n不明な場合は, \"dGPU\" としてフラグが立っているGPUに設定します. ない場合はそのままにします.", "ko_KR": "Vulkan 그래픽 후단부와 함께 사용할 그래픽 카드를 선택하세요.\n\nOpenGL에서 사용할 GPU에는 영향을 미치지 않습니다.\n\n모르면 \"dGPU\"로 플래그가 지정된 GPU로 설정하세요. 없으면 그대로 두세요.", "no_NO": "Velg grafikkkortet som skal brukes sammen med Vulkan grafikkbackenden\n\nPåvirker ikke GPU-er som OpenGL skal bruke.\n\nSett til GPU-merket som \"dGPU\" hvis usikker. Hvis det ikke det er en, la være uberørt.", @@ -20682,7 +20682,7 @@ "es_ES": "La configuración de la GPU o del back-end de los gráficos fue modificada. Es necesario reiniciar para que se aplique.", "fr_FR": "Les paramètres de l'interface graphique ou du GPU ont été modifiés. Cela nécessitera un redémarrage pour être appliqué", "he_IL": "הגדרות אחראי גרפיקה או כרטיס גראפי שונו. זה ידרוש הפעלה מחדש כדי להחיל שינויים", - "it_IT": "Le impostazioni della backend grafica o della GPU sono state modificate. Questo richiederà un riavvio perché le modifiche siano applicate", + "it_IT": "Le impostazioni del backend grafico o della GPU sono state modificate. È necessario un riavvio per applicare le modifiche", "ja_JP": "グラフィックスバックエンドまたはGPUの設定が変更されました. 変更を適用するには再起動する必要があります", "ko_KR": "그래픽 후단부 또는 GPU 설정이 수정되었습니다. 이를 적용하려면 다시 시작이 필요", "no_NO": "Grafikk Backend eller GPU-innstillinger er endret. Dette krever en omstart for å aktiveres", @@ -21232,7 +21232,7 @@ "es_ES": "Aplica antia-aliasing al rendereo del juego.\n\nFXAA desenfocará la mayor parte del la iamgen, mientras que SMAA intentará encontrar bordes irregulares y suavizarlos.\n\nNo se recomienda usar en conjunto con filtro de escala FSR.\n\nEsta opción puede ser modificada mientras que esté corriendo el juego haciendo click en \"Aplicar\" más abajo; simplemente puedes mover la ventana de configuración a un lado y experimentar hasta que encuentres tu estilo preferido para un juego.\n\nDejar en NADA si no está seguro.", "fr_FR": "FXAA floute la plupart de l'image, tandis que SMAA tente de détecter les contours dentelés et de les lisser.\n\nIl n'est pas recommandé de l'utiliser en conjonction avec le filtre de mise à l'échelle FSR.\n\nCette option peut être modifiée pendant qu'un jeu est en cours d'exécution en cliquant sur \"Appliquer\" ci-dessous ; vous pouvez simplement déplacer la fenêtre des paramètres sur le côté et expérimenter jusqu'à ce que vous trouviez l'apparence souhaitée pour un jeu.\n\nLaissez sur AUCUN si vous n'êtes pas sûr.", "he_IL": "", - "it_IT": "Applica anti-aliasing al rendering del gioco.\n\nFXAA sfocerà la maggior parte dell'immagine, mentre SMAA tenterà di trovare bordi frastagliati e lisciarli.\n\nNon si consiglia di usarlo in combinazione con il filtro di scala FSR.\n\nQuesta opzione può essere modificata mentre un gioco è in esecuzione facendo clic su \"Applica\" qui sotto; puoi semplicemente spostare la finestra delle impostazioni da parte e sperimentare fino a quando non trovi il tuo look preferito per un gioco.\n\nLasciare su Nessuno se incerto.", + "it_IT": "Applica l'anti-aliasing al rendering del gioco.\n\nFXAA rende la maggior parte dell'immagine sfocata, mentre SMAA tenta di rilevare e smussare i bordi frastagliati.\n\nSi consiglia di non usarlo in combinazione con il filtro di scaling FSR.\n\nQuesta opzione può essere modificata mentre un gioco è in esecuzione facendo clic su \"Applica\" qui sotto; puoi semplicemente spostare la finestra delle impostazioni da parte e sperimentare fino a quando non trovi il tuo look preferito per un gioco.\n\nNel dubbio, lascia su Nessuno.", "ja_JP": "ゲームレンダリングにアンチエイリアスを適用します.\n\nFXAAは画像の大部分をぼかし, SMAAはギザギザのエッジを見つけて滑らかにします.\n\nFSRスケーリングフィルタとの併用は推奨しません.\n\nこのオプションは, ゲーム実行中に下の「適用」をクリックして変更できます. 設定ウィンドウを脇に移動し, ゲームが好みの表示になるように試してみてください.\n\n不明な場合は「なし」のままにしておいてください.", "ko_KR": "게임 렌더에 앤티 앨리어싱을 적용합니다.\n\nFXAA는 이미지 대부분을 흐리게 처리하지만 SMAA는 들쭉날쭉한 가장자리를 찾아 부드럽게 처리합니다.\n\nFSR 스케일링 필터와 함께 사용하지 않는 것이 좋습니다.\n\n이 옵션은 아래의 \"적용\"을 클릭하여 게임을 실행하는 동안 변경할 수 있습니다. 설정 창을 옆으로 옮겨 원하는 게임의 모습을 찾을 때까지 실험해 볼 수 있습니다.\n\n모르면 없음으로 두세요.", "no_NO": "Aktiverer anti-aliasing til spill render.\n\nFXAA vil gjøre det meste av bildet, mens SMAA vil forsøke å finne berørte kanter og glatte dem ut.\n\nAnbefales ikke til bruk i forbindelse med FSR-skaleringsfilteret.\n\nDette valget kan endres mens et spill kjører ved å klikke \"Apply\" nedenfor; du kan bare flytte innstillingsvinduet til du finner det foretrukne utseendet til et spill.\n\nForlat på NONE hvis usikker.", @@ -21257,7 +21257,7 @@ "es_ES": "Suavizado de bordes:", "fr_FR": "Anticrénelage :", "he_IL": "החלקת-עקומות:", - "it_IT": "", + "it_IT": "Anti-aliasing:", "ja_JP": "アンチエイリアス:", "ko_KR": "앤티 앨리어싱 :", "no_NO": "Kantutjevning:", @@ -21282,7 +21282,7 @@ "es_ES": "Filtro de escalado:", "fr_FR": "Filtre de mise à l'échelle :", "he_IL": "מסנן מידת איכות:", - "it_IT": "Filtro di scala:", + "it_IT": "Filtro di scaling:", "ja_JP": "スケーリングフィルタ:", "ko_KR": "크기 조정 필터 :", "no_NO": "Skaleringsfilter:", @@ -21307,7 +21307,7 @@ "es_ES": "Elija el filtro de escala que se aplicará al utilizar la escala de resolución.\n\nBilinear funciona bien para juegos 3D y es una opción predeterminada segura.\n\nSe recomienda el bilinear para juegos de pixel art.\n\nFSR 1.0 es simplemente un filtro de afilado, no se recomienda su uso con FXAA o SMAA.\n\nEsta opción se puede cambiar mientras se ejecuta un juego haciendo clic en \"Aplicar\" a continuación; simplemente puedes mover la ventana de configuración a un lado y experimentar hasta que encuentres tu estilo preferido para un juego.\n\nDéjelo en BILINEAR si no está seguro.", "fr_FR": "Choisissez le filtre de mise à l'échelle qui sera appliqué lors de l'utilisation de la mise à l'échelle de la résolution.\n\nLe filtre bilinéaire fonctionne bien pour les jeux en 3D et constitue une option par défaut sûre.\n\nLe filtre le plus proche est recommandé pour les jeux de pixel art.\n\nFSR 1.0 est simplement un filtre de netteté, non recommandé pour une utilisation avec FXAA ou SMAA.\n\nCette option peut être modifiée pendant qu'un jeu est en cours d'exécution en cliquant sur \"Appliquer\" ci-dessous ; vous pouvez simplement déplacer la fenêtre des paramètres de côté et expérimenter jusqu'à ce que vous trouviez l'aspect souhaité pour un jeu.\n\nLaissez sur BILINÉAIRE si vous n'êtes pas sûr.", "he_IL": "Choose the scaling filter that will be applied when using resolution scale.\n\nBilinear works well for 3D games and is a safe default option.\n\nNearest is recommended for pixel art games.\n\nFSR 1.0 is merely a sharpening filter, not recommended for use with FXAA or SMAA.\n\nThis option can be changed while a game is running by clicking \"Apply\" below; you can simply move the settings window aside and experiment until you find your preferred look for a game.\n\nLeave on BILINEAR if unsure.", - "it_IT": "Scegli il filtro di scaling che verrà applicato quando si utilizza o scaling di risoluzione.\n\nBilineare funziona bene per i giochi 3D ed è un'opzione predefinita affidabile.\n\nNearest è consigliato per i giochi in pixel art.\n\nFSR 1.0 è solo un filtro di nitidezza, non raccomandato per l'uso con FXAA o SMAA.\n\nQuesta opzione può essere modificata mentre un gioco è in esecuzione facendo clic su \"Applica\" qui sotto; puoi semplicemente spostare la finestra delle impostazioni da parte e sperimentare fino a quando non trovi il tuo look preferito per un gioco.\n\nLasciare su Bilineare se incerto.", + "it_IT": "Scegli il filtro di scaling che verrà applicato quando si utilizza lo scaling della risoluzione.\n\nBilineare funziona bene per i giochi 3D ed è un'opzione predefinita affidabile.\n\nNearest è consigliato per i giochi in pixel art.\n\nFSR 1.0 è solo un filtro di nitidezza, sconsigliato per l'uso con FXAA o SMAA.\n\nLo scaling ad area è consigliato quando si riducono delle risoluzioni che sono più grandi della finestra di output. Può essere usato per ottenere un effetto di anti-aliasing supercampionato quando si riduce di più di 2x.\n\nQuesta opzione può essere modificata mentre un gioco è in esecuzione facendo clic su \"Applica\" qui sotto; puoi semplicemente spostare la finestra delle impostazioni da parte e sperimentare fino a quando non trovi il tuo look preferito per un gioco.\n\nNel dubbio, lascia su Bilineare.", "ja_JP": "解像度変更時に適用されるスケーリングフィルタを選択します.\n\nBilinearは3Dゲームに適しており, 安全なデフォルトオプションです.\n\nピクセルアートゲームにはNearestを推奨します.\n\nFSR 1.0は単なるシャープニングフィルタであり, FXAAやSMAAとの併用は推奨されません.\n\nこのオプションは, ゲーム実行中に下の「適用」をクリックすることで変更できます. 設定ウィンドウを脇に移動し, ゲームが好みの表示になるように試してみてください.\n\n不明な場合はBilinearのままにしておいてください.", "ko_KR": "해상도 스케일을 사용할 때 적용될 스케일링 필터를 선택합니다.\n\n쌍선형은 3D 게임에 적합하며 안전한 기본 옵션입니다.\n\nNearest는 픽셀 아트 게임에 권장됩니다.\n\nFSR 1.0은 단순히 선명도 필터일 뿐이며 FXAA 또는 SMAA와 함께 사용하는 것은 권장되지 않습니다.\n\nArea 스케일링은 출력 창보다 큰 해상도를 다운스케일링할 때 권장됩니다. 2배 이상 다운스케일링할 때 슈퍼샘플링된 앤티앨리어싱 효과를 얻는 데 사용할 수 있습니다.\n\n이 옵션은 아래의 \"적용\"을 클릭하여 게임을 실행하는 동안 변경할 수 있습니다. 설정 창을 옆으로 옮겨 원하는 게임 모양을 찾을 때까지 실험하면 됩니다.\n\n모르면 쌍선형을 그대로 두세요.", "no_NO": "Velg det skaleringsfilteret som skal brukes når du bruker oppløsningsskalaen.\n\nBilinear fungerer godt for 3D-spill og er et trygt standardalternativ.\n\nNærmeste anbefales for pixel kunst-spill.\n\nFSR 1.0 er bare et skarpere filter, ikke anbefalt for bruk med FXAA eller SMAA.\n\nOmrådeskalering anbefales når nedskalering er større enn utgangsvinduet. Den kan brukes til å oppnå en superprøvetaket anti-aliasingseffekt når en nedskalerer med mer enn 2x.\n\nDette valget kan endres mens et spill kjører ved å klikke \"Apply\" nedenfor; du kan bare flytte innstillingsvinduet til du finner det foretrukne utseendet til et spill.\n\nLa være på BILINEAR hvis usikker.", @@ -21582,7 +21582,7 @@ "es_ES": "Editar usuario", "fr_FR": "Modifier Utilisateur", "he_IL": "ערוך משתמש", - "it_IT": "Modificare L'Utente", + "it_IT": "Modifica utente", "ja_JP": "ユーザを編集", "ko_KR": "사용자 편집", "no_NO": "Rediger bruker", @@ -21607,7 +21607,7 @@ "es_ES": "Crear Usuario", "fr_FR": "Créer Utilisateur", "he_IL": "צור משתמש", - "it_IT": "Crea Un Utente", + "it_IT": "Crea utente", "ja_JP": "ユーザを作成", "ko_KR": "사용자 만들기", "no_NO": "Opprett bruker", @@ -21757,7 +21757,7 @@ "es_ES": "Haga clic para abrir el registro de cambios para esta versión en su navegador predeterminado.", "fr_FR": "Cliquez pour ouvrir le changelog de cette version dans votre navigateur par défaut.", "he_IL": "לחץ כדי לפתוח את יומן השינויים עבור גרסה זו בדפדפן ברירת המחדל שלך.", - "it_IT": "Clicca per aprire il changelog per questa versione nel tuo browser predefinito.", + "it_IT": "Clicca per aprire il changelog di questa versione nel tuo browser predefinito.", "ja_JP": "クリックして, このバージョンの更新履歴をデフォルトのブラウザで開きます.", "ko_KR": "기본 브라우저에서 이 버전의 변경 내역을 열람하려면 클릭하세요.", "no_NO": "Klikk for å åpne endringsloggen for denne versjonen i din nettleser.", @@ -22232,7 +22232,7 @@ "es_ES": "", "fr_FR": "Activer le taux de rafraîchissement customisé (Expérimental)", "he_IL": "", - "it_IT": "", + "it_IT": "Attiva la frequenza di aggiornamento personalizzata (sperimentale)", "ja_JP": "", "ko_KR": "사용자 정의 주사율 활성화(실험적)", "no_NO": "Aktiver egendefinert oppdateringsfrekvens (eksperimentell)", @@ -22282,7 +22282,7 @@ "es_ES": "", "fr_FR": "Sans Limite", "he_IL": "", - "it_IT": "", + "it_IT": "Nessun limite", "ja_JP": "", "ko_KR": "무제한", "no_NO": "Ubegrenset", @@ -22307,7 +22307,7 @@ "es_ES": "", "fr_FR": "Taux de Rafraîchissement Customisé", "he_IL": "", - "it_IT": "", + "it_IT": "Frequenza di aggiornamento personalizzata", "ja_JP": "", "ko_KR": "사용자 정의 주사율", "no_NO": "Egendefinert oppdateringsfrekvens", @@ -22332,7 +22332,7 @@ "es_ES": "", "fr_FR": "VSync émulé. 'Switch' émule le taux de rafraîchissement de la Switch (60Hz). 'Sans Limite' est un taux de rafraîchissement qui n'est pas limité.", "he_IL": "", - "it_IT": "", + "it_IT": "Sincronizzazione verticale emulata. \"Switch\" emula la frequenza di aggiornamento di Nintendo Switch (60Hz). \"Nessun limite\" non impone alcun limite alla frequenza di aggiornamento.", "ja_JP": "", "ko_KR": "에뮬레이트된 수직 동기화. '스위치'는 스위치의 60Hz 주사율을 에뮬레이트합니다. '무한'은 무제한 주사율입니다.", "no_NO": "Emulert vertikal synkronisering. «Switch» emulerer Switchs oppdateringsfrekvens på 60 Hz. «Ubegrenset» er en ubegrenset oppdateringsfrekvens.", @@ -22357,7 +22357,7 @@ "es_ES": "", "fr_FR": "VSync émulé. 'Switch' émule le taux de rafraîchissement de la Switch (60Hz). 'Sans Limite' est un taux de rafraîchissement qui n'est pas limité. 'Taux de Rafraîchissement Customisé' émule le taux de rafraîchissement spécifié.", "he_IL": "", - "it_IT": "", + "it_IT": "Sincronizzazione verticale emulata. \"Switch\" emula la frequenza di aggiornamento di Nintendo Switch (60Hz). \"Nessun limite\" non impone alcun limite alla frequenza di aggiornamento. \"Frequenza di aggiornamento personalizzata\" emula la frequenza di aggiornamento specificata.", "ja_JP": "", "ko_KR": "에뮬레이트된 수직 동기화. '스위치'는 스위치의 60Hz 주사율을 에뮬레이트합니다. '무한'은 무제한 주사율입니다. '사용자 지정'은 지정된 사용자 지정 주사율을 에뮬레이트합니다.", "no_NO": "Emulert vertikal synkronisering. «Switch» emulerer Switchs oppdateringsfrekvens på 60 Hz. «Ubegrenset» er en ubegrenset oppdateringsfrekvens. «Egendefinert» emulerer den angitte egendefinerte oppdateringsfrekvensen.", @@ -22382,7 +22382,7 @@ "es_ES": "", "fr_FR": "Permet à l'utilisateur de spécifier un taux de rafraîchissement émulé. Dans certains jeux, ceci pourrait accélérer ou ralentir le taux de logique du gameplay. Dans d'autre titres, cela permettrait limiter le FPS à un multiple du taux de rafraîchissement, ou conduire à un comportement imprévisible. Ceci est une fonctionnalité expérimentale, avec aucune garanties pour comment le gameplay sera affecté. \n\nLaisser désactiver en cas de doute.", "he_IL": "", - "it_IT": "", + "it_IT": "Consente all'utente di specificare una frequenza di aggiornamento emulata. In alcuni titoli potrebbe aumentare o diminuire la velocità del gameplay, mentre in altri potrebbe consentire di limitare il framerate a un multiplo della frequenza di aggiornamento, o causare comportamenti imprevedibili. Questa funzionalità è sperimentale, e non ci sono certezze sul modo in cui influenzerà il gameplay.\n\nNel dubbio, lascia l'opzione disattivata.", "ja_JP": "", "ko_KR": "사용자가 에뮬레이트된 화면 주사율을 지정할 수 있습니다. 일부 타이틀에서는 게임플레이 로직 속도가 빨라지거나 느려질 수 있습니다. 다른 타이틀에서는 주사율의 배수로 FPS를 제한하거나 예측할 수 없는 동작으로 이어질 수 있습니다. 이는 실험적 기능으로 게임 플레이에 어떤 영향을 미칠지 보장할 수 없습니다. \n\n모르면 끔으로 두세요.", "no_NO": "Gjør det mulig for brukeren å angi en emulert oppdateringsfrekvens. I noen titler kan dette øke eller senke hastigheten på spillogikken. I andre titler kan det gjøre det mulig å begrense FPS til et multiplum av oppdateringsfrekvensen, eller føre til uforutsigbar oppførsel. Dette er en eksperimentell funksjon, og det gis ingen garantier for hvordan spillingen påvirkes. \n\nLa AV stå hvis du er usikker.", @@ -22407,7 +22407,7 @@ "es_ES": "", "fr_FR": "La valeur cible du taux de rafraîchissement customisé.", "he_IL": "", - "it_IT": "", + "it_IT": "Il valore desiderato della frequenza di aggiornamento personalizzata.", "ja_JP": "", "ko_KR": "사용자 정의 주사율 목표 값입니다.", "no_NO": "Den egendefinerte målverdien for oppdateringsfrekvens.", @@ -22432,7 +22432,7 @@ "es_ES": "", "fr_FR": "Le taux de rafraîchissement customisé, comme un pourcentage du taux de rafraîchissement normal de la Switch.", "he_IL": "", - "it_IT": "", + "it_IT": "La frequenza di aggiornamento personalizzata, espressa in percentuale della normale frequenza di aggiornamento di Switch.", "ja_JP": "", "ko_KR": "일반 스위치 주사율의 백분율로 나타낸 사용자 지정 주사율입니다.", "no_NO": "Den egendefinerte oppdateringsfrekvensen, i prosent av den normale oppdateringsfrekvensen for Switch-konsollen.", @@ -22457,7 +22457,7 @@ "es_ES": "", "fr_FR": "Pourcentage du Taux de Rafraîchissement Customisé :", "he_IL": "", - "it_IT": "", + "it_IT": "Frequenza di aggiornamento personalizzata (%):", "ja_JP": "", "ko_KR": "사용자 정의 주사율 % :", "no_NO": "Egendefinert oppdateringsfrekvens %:", @@ -22482,7 +22482,7 @@ "es_ES": "", "fr_FR": "Valeur du Taux de Rafraîchissement Customisé :", "he_IL": "", - "it_IT": "", + "it_IT": "Valore della frequenza di aggiornamento personalizzata:", "ja_JP": "", "ko_KR": "사용자 정의 주사율 값 :", "no_NO": "Egendefinert verdi for oppdateringsfrekvens:", @@ -22507,7 +22507,7 @@ "es_ES": "", "fr_FR": "Intervalle", "he_IL": "", - "it_IT": "", + "it_IT": "Intervallo", "ja_JP": "", "ko_KR": "간격", "no_NO": "Intervall", @@ -22532,7 +22532,7 @@ "es_ES": "", "fr_FR": "Activer/Désactiver mode VSync :", "he_IL": "", - "it_IT": "", + "it_IT": "Cambia modalità VSync:", "ja_JP": "", "ko_KR": "수직 동기화 모드 전환 :", "no_NO": "Veksle mellom VSync-modus:", @@ -22557,7 +22557,7 @@ "es_ES": "", "fr_FR": "Augmenter le taux de rafraîchissement customisé :", "he_IL": "", - "it_IT": "", + "it_IT": "Aumenta la frequenza di aggiornamento personalizzata:", "ja_JP": "", "ko_KR": "사용자 정의 주사율 증가", "no_NO": "Øk den egendefinerte oppdateringsfrekvensen", @@ -22582,7 +22582,7 @@ "es_ES": "", "fr_FR": "Baisser le taux de rafraîchissement customisé :", "he_IL": "", - "it_IT": "", + "it_IT": "Riduci la frequenza di aggiornamento personalizzata:", "ja_JP": "", "ko_KR": "사용자 정의 주사율 감소", "no_NO": "Lavere tilpasset oppdateringsfrekvens", -- 2.47.1 From abfbc6f4bce273b9d1b9fe7aa69310dc23a5863f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 16 Jan 2025 09:52:01 -0600 Subject: [PATCH 342/722] UI: Prevent desynced RPC when toggling it off/on while in-game --- src/Ryujinx/DiscordIntegrationModule.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs index ee00f2c0d..2b462c27f 100644 --- a/src/Ryujinx/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -1,4 +1,5 @@ using DiscordRPC; +using Gommon; using Humanizer; using Humanizer.Localisation; using Ryujinx.Ava.Utilities.AppLibrary; @@ -75,11 +76,23 @@ namespace Ryujinx.Ava _discordClient = new DiscordRpcClient(ApplicationId); _discordClient.Initialize(); - _discordClient.SetPresence(_discordPresenceMain); + + Use(TitleIDs.CurrentApplication); } } } + public static void Use(Optional titleId) + { + if (titleId.TryGet(out string tid)) + SwitchToPlayingState( + ApplicationLibrary.LoadAndSaveMetaData(tid), + Switch.Shared.Processes.ActiveApplication + ); + else + SwitchToMainState(); + } + private static void SwitchToPlayingState(ApplicationMetadata appMeta, ProcessResult procRes) { _discordClient?.SetPresence(new RichPresence -- 2.47.1 From 01ccd18726a127c513a24c832cd00791db9a5e32 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 16 Jan 2025 09:52:35 -0600 Subject: [PATCH 343/722] UI: Meant to use that method in another place [ci-skip] --- src/Ryujinx/DiscordIntegrationModule.cs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs index 2b462c27f..040d61ecf 100644 --- a/src/Ryujinx/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -46,16 +46,7 @@ namespace Ryujinx.Ava }; ConfigurationState.Instance.EnableDiscordIntegration.Event += Update; - TitleIDs.CurrentApplication.Event += (_, e) => - { - if (e.NewValue) - SwitchToPlayingState( - ApplicationLibrary.LoadAndSaveMetaData(e.NewValue), - Switch.Shared.Processes.ActiveApplication - ); - else - SwitchToMainState(); - }; + TitleIDs.CurrentApplication.Event += (_, e) => Use(e.NewValue); } private static void Update(object sender, ReactiveEventArgs evnt) -- 2.47.1 From 1018c9db8b02c94dcad69ef13f2144bf21793606 Mon Sep 17 00:00:00 2001 From: Daenorth Date: Thu, 16 Jan 2025 17:02:33 +0100 Subject: [PATCH 344/722] Update Norwegian Translation (#503) Norwegian translation updated with the Compatibility list addition --- src/Ryujinx/Assets/locales.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 6bfb566fe..194c79b21 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -10435,7 +10435,7 @@ "it_IT": "Finestra di input", "ja_JP": "入力ダイアログ", "ko_KR": "대화 상자 입력", - "no_NO": "", + "no_NO": "Dialogboksen Inndata", "pl_PL": "Okno Dialogowe Wprowadzania", "pt_BR": "Diálogo de texto", "ru_RU": "Диалоговое окно ввода", @@ -22635,7 +22635,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "이 호환성 목록에는 오래된 항목이 포함되어 있을 수 있습니다.\n\"게임 내\" 상태에서 게임을 테스트하는 것을 반대하지 마십시오.", - "no_NO": "", + "no_NO": "Denne kompatibilitetslisten kan inneholde oppføringer som er tomme for data.\nVær ikke imot å teste spill i statusen «Ingame».", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -22660,7 +22660,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "호환성 항목 검색...", - "no_NO": "", + "no_NO": "Søk i kompatibilitetsoppføringer...", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -22685,7 +22685,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "호환성 목록 열기", - "no_NO": "", + "no_NO": "Åpne kompatibilitetslisten", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -22710,7 +22710,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "보유 게임만 표시", - "no_NO": "", + "no_NO": "Vis bare eide spill", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -22735,7 +22735,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "플레이 가능", - "no_NO": "", + "no_NO": "Spillbar", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -22785,7 +22785,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "메뉴", - "no_NO": "", + "no_NO": "Menyer", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -22810,7 +22810,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "부츠", - "no_NO": "", + "no_NO": "Starter", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -22835,7 +22835,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "없음", - "no_NO": "", + "no_NO": "Ingenting", "pl_PL": "", "pt_BR": "", "ru_RU": "", -- 2.47.1 From 5aa071c59bcbf29f57dde11bb68dcde0b9016ca9 Mon Sep 17 00:00:00 2001 From: LotP1 <68976644+LotP1@users.noreply.github.com> Date: Fri, 17 Jan 2025 12:50:42 +0100 Subject: [PATCH 345/722] remove notice for unusual core counts (#531) --- src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs index 5c9f4f100..745d3edd8 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs @@ -176,9 +176,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process AllowedCpuCoresMask = GetMaskFromMinMax(lowestCpuCore, highestCpuCore); AllowedThreadPriosMask = GetMaskFromMinMax(lowestThreadPrio, highestThreadPrio); - if (isApplication && lowestCpuCore == 0 && highestCpuCore != 2) - Ryujinx.Common.Logging.Logger.Error?.Print(Ryujinx.Common.Logging.LogClass.Application, $"Application requested cores with index range {lowestCpuCore} to {highestCpuCore}! Report this to @LotP on the Ryujinx/Ryubing discord server (discord.gg/ryujinx)!"); - else if (isApplication) + if (isApplication) Ryujinx.Common.Logging.Logger.Info?.Print(Ryujinx.Common.Logging.LogClass.Application, $"Application requested cores with index range {lowestCpuCore} to {highestCpuCore}"); break; -- 2.47.1 From 1728b0f20c114edcaede61cc93674516fe8c3af6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 17 Jan 2025 11:37:08 -0600 Subject: [PATCH 346/722] WWE 2K18 is not playable. --- docs/compatibility.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 0158a45cb..44a8188a1 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -3348,7 +3348,7 @@ 01001C400482C000,"Wunderling DX",audio;crash,ingame,2022-09-10 13:20:12 01003B401148E000,"Wurroom",,playable,2020-10-07 22:46:21 010081700EDF4000,"WWE 2K Battlegrounds",nvdec;online-broken;UE4,playable,2022-10-07 12:44:40 -010009800203E000,"WWE 2K18",nvdec,playable,2023-10-21 17:22:01 +010009800203E000,"WWE 2K18",nvdec;online-broken,ingame,2025-01-17 11:36:56 0100DF100B97C000,"X-Morph: Defense",,playable,2020-06-22 11:05:31 0100D0B00FB74000,"XCOM® 2 Collection",gpu;crash,ingame,2022-10-04 09:38:30 0100CC9015360000,"XEL",gpu,ingame,2022-10-03 10:19:39 @@ -3421,4 +3421,4 @@ 0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",crash,ingame,2023-04-25 19:43:52 0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",crash,ingame,2024-02-12 20:58:31 010064801A01C000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",crash,nothing,2023-10-30 22:37:40 -0100F3400332C000,"ゼノブレイド2",deadlock;amd-vendor-bug,ingame,2024-03-28 14:31:41 \ No newline at end of file +0100F3400332C000,"ゼノブレイド2",deadlock;amd-vendor-bug,ingame,2024-03-28 14:31:41 -- 2.47.1 From a375faecc1c7a69baf78b134a82a174f46affe89 Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Fri, 17 Jan 2025 21:14:19 +0100 Subject: [PATCH 347/722] UI: Fix UpdateWaitWindow.axaml windows being too big on windows (#314) --- src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml b/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml index ba41ab6f0..a812cf70c 100644 --- a/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml +++ b/src/Ryujinx/UI/Controls/UpdateWaitWindow.axaml @@ -7,6 +7,7 @@ Title="Ryujinx - Waiting" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterOwner" + CanResize="False" mc:Ignorable="d" Focusable="True"> Date: Sat, 18 Jan 2025 07:35:34 +0800 Subject: [PATCH 348/722] Update Chinese translations (#375) --- src/Ryujinx/Assets/locales.json | 236 ++++++++++++++++---------------- 1 file changed, 118 insertions(+), 118 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 194c79b21..e3bb7cfb7 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -94,7 +94,7 @@ "tr_TR": "", "uk_UA": "Аплет для редагування Mii", "zh_CN": "Mii 小程序", - "zh_TW": "" + "zh_TW": "Mii 編輯器小程式" } }, { @@ -744,7 +744,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "从bin文件扫描 Amiibo", - "zh_TW": "" + "zh_TW": "掃瞄 Amiibo (從 Bin 檔案)" } }, { @@ -869,7 +869,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "安装密匙", - "zh_TW": "" + "zh_TW": "安裝金鑰" } }, { @@ -894,7 +894,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "从.KEYS文件或ZIP压缩包安装密匙", - "zh_TW": "" + "zh_TW": "從 .KEYS 或 .ZIP 安裝金鑰" } }, { @@ -919,7 +919,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "从一个文件夹安装密匙", - "zh_TW": "" + "zh_TW": "從資料夾安裝金鑰" } }, { @@ -1019,7 +1019,7 @@ "tr_TR": "", "uk_UA": "Обрізати XCI файли", "zh_CN": "XCI文件瘦身", - "zh_TW": "" + "zh_TW": "修剪 XCI 檔案" } }, { @@ -1244,7 +1244,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "问答与指南", - "zh_TW": "" + "zh_TW": "常見問題 (FAQ) 和指南" } }, { @@ -1269,7 +1269,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "常见问题和问题排除页面", - "zh_TW": "" + "zh_TW": "常見問題 (FAQ) 和疑難排解頁面" } }, { @@ -1294,7 +1294,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "打开Ryujinx官方wiki的常见问题和问题排除页面", - "zh_TW": "" + "zh_TW": "開啟官方 Ryujinx Wiki 常見問題 (FAQ) 和疑難排解頁面" } }, { @@ -1319,7 +1319,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "安装与配置指南", - "zh_TW": "" + "zh_TW": "設定和配置指南" } }, { @@ -1344,7 +1344,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "打开Ryujinx官方wiki的安装与配置指南", - "zh_TW": "" + "zh_TW": "開啟官方 Ryujinx Wiki 設定和配置指南" } }, { @@ -1369,7 +1369,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "多人游戏(LDN/LAN)指南", - "zh_TW": "" + "zh_TW": "多人遊戲 (LDN/LAN) 指南" } }, { @@ -1394,7 +1394,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "打开Ryujinx官方wiki的多人游戏指南", - "zh_TW": "" + "zh_TW": "開啟官方 Ryujinx Wiki 多人遊戲 (LDN/LAN) 指南" } }, { @@ -2319,7 +2319,7 @@ "tr_TR": "Simge", "uk_UA": "Логотип", "zh_CN": "图标", - "zh_TW": "" + "zh_TW": "圖示" } }, { @@ -2544,7 +2544,7 @@ "tr_TR": "", "uk_UA": "Перевірка та Нарізка XCI Файлів", "zh_CN": "检查并瘦身XCI文件", - "zh_TW": "" + "zh_TW": "檢查及修剪 XCI 檔案" } }, { @@ -2569,7 +2569,7 @@ "tr_TR": "", "uk_UA": "Перевірка та Нарізка XCI Файлів для збереження місця на диску", "zh_CN": "检查并瘦身XCI文件以节约磁盘空间", - "zh_TW": "" + "zh_TW": "檢查及修剪 XCI 檔案以節省儲存空間" } }, { @@ -2619,7 +2619,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "系统固件版本:{0}", - "zh_TW": "" + "zh_TW": "系統韌體版本: {0}" } }, { @@ -2644,7 +2644,7 @@ "tr_TR": "", "uk_UA": "Обрізано XCI Файлів '{0}'", "zh_CN": "XCI文件瘦身中'{0}'", - "zh_TW": "" + "zh_TW": "正在修剪 XCI 檔案 '{0}'" } }, { @@ -4019,7 +4019,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "与 PC 日期和时间重新同步", - "zh_TW": "" + "zh_TW": "重新同步至 PC 的日期和時間" } }, { @@ -4094,7 +4094,7 @@ "tr_TR": "FS Bütünlük Kontrolleri", "uk_UA": "Перевірка цілісності FS", "zh_CN": "启用文件系统完整性检查", - "zh_TW": "檔案系統完整性檢查" + "zh_TW": "啟用檔案系統完整性檢查" } }, { @@ -5119,7 +5119,7 @@ "tr_TR": "Logları Dosyaya Kaydetmeyi Etkinleştir", "uk_UA": "Увімкнути налагодження у файл", "zh_CN": "将日志写入文件", - "zh_TW": "啟用日誌到檔案" + "zh_TW": "啟用日誌寫入到檔案" } }, { @@ -6644,7 +6644,7 @@ "tr_TR": "Tuş", "uk_UA": "Кнопка", "zh_CN": "按下摇杆", - "zh_TW": "按鍵" + "zh_TW": "搖桿按鍵" } }, { @@ -7969,7 +7969,7 @@ "tr_TR": "Menü", "uk_UA": "", "zh_CN": "菜单键", - "zh_TW": "功能表" + "zh_TW": "功能表鍵" } }, { @@ -10519,7 +10519,7 @@ "tr_TR": "", "uk_UA": "Скасування", "zh_CN": "正在取消", - "zh_TW": "" + "zh_TW": "正在取消" } }, { @@ -10544,7 +10544,7 @@ "tr_TR": "", "uk_UA": "Закрити", "zh_CN": "关闭", - "zh_TW": "" + "zh_TW": "關閉" } }, { @@ -10744,7 +10744,7 @@ "tr_TR": "", "uk_UA": "Показати профіль", "zh_CN": "预览配置文件", - "zh_TW": "" + "zh_TW": "檢視設定檔" } }, { @@ -11844,7 +11844,7 @@ "tr_TR": "", "uk_UA": "Показати список змін", "zh_CN": "显示更新日志", - "zh_TW": "" + "zh_TW": "顯示更新日誌" } }, { @@ -12319,7 +12319,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "XCI文件瘦身窗口", - "zh_TW": "" + "zh_TW": "XCI 修剪器視窗" } }, { @@ -12919,7 +12919,7 @@ "tr_TR": "Sistem sürümü {0} yüklenecek.", "uk_UA": "Буде встановлено версію системи {0}.", "zh_CN": "即将安装系统固件版本 {0} 。", - "zh_TW": "將安裝系統版本 {0}。" + "zh_TW": "即將安裝系統韌體版本 {0}。" } }, { @@ -12944,7 +12944,7 @@ "tr_TR": "\n\nBu şimdiki sistem sürümünün yerini alacak {0}.", "uk_UA": "\n\nЦе замінить поточну версію системи {0}.", "zh_CN": "\n\n替换当前系统固件版本 {0} 。", - "zh_TW": "\n\n這將取代目前的系統版本 {0}。" + "zh_TW": "\n\n這將取代目前的系統韌體版本 {0}。" } }, { @@ -13019,7 +13019,7 @@ "tr_TR": "Sistem sürümü {0} başarıyla yüklendi.", "uk_UA": "Версію системи {0} успішно встановлено.", "zh_CN": "成功安装系统固件版本 {0} 。", - "zh_TW": "成功安裝系統版本 {0}。" + "zh_TW": "成功安裝系統韌體版本 {0}。" } }, { @@ -13044,7 +13044,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "在{0}发现了一个无效的密匙文件", - "zh_TW": "" + "zh_TW": "找到無效的金鑰檔案 {0}" } }, { @@ -13069,7 +13069,7 @@ "tr_TR": "", "uk_UA": "Встановлення Ключів", "zh_CN": "安装密匙", - "zh_TW": "" + "zh_TW": "安裝金鑰" } }, { @@ -13094,7 +13094,7 @@ "tr_TR": "", "uk_UA": "Новий файл Ключів буде встановлено", "zh_CN": "将会安装新密匙文件", - "zh_TW": "" + "zh_TW": "將會安裝新增的金鑰檔案。" } }, { @@ -13119,7 +13119,7 @@ "tr_TR": "", "uk_UA": "\n\nЦе замінить собою поточні файли Ключів.", "zh_CN": "\n\n这也许会替换掉一些当前已安装的密匙", - "zh_TW": "" + "zh_TW": "\n\n這將取代部分已安裝的金鑰。" } }, { @@ -13144,7 +13144,7 @@ "tr_TR": "", "uk_UA": "\n\nВи хочете продовжити?", "zh_CN": "\n\n你想要继续吗?", - "zh_TW": "" + "zh_TW": "\n\n是否繼續?" } }, { @@ -13169,7 +13169,7 @@ "tr_TR": "", "uk_UA": "Встановлення Ключів...", "zh_CN": "安装密匙中。。。", - "zh_TW": "" + "zh_TW": "正在安裝金鑰..." } }, { @@ -13194,7 +13194,7 @@ "tr_TR": "", "uk_UA": "Нові ключі встановлено.", "zh_CN": "已成功安装新密匙文件", - "zh_TW": "" + "zh_TW": "成功安裝新增的金鑰檔案。" } }, { @@ -14194,7 +14194,7 @@ "tr_TR": "", "uk_UA": "Ryujinx — це емулятор для Nintendo Switch™.\nОтримуйте всі останні новини в нашому Discord.\nРозробники, які хочуть зробити внесок, можуть дізнатися більше на нашому GitHub або в Discord.", "zh_CN": "Ryujinx 是一个 Nintendo Switch™ 模拟器。\n有兴趣做出贡献的开发者可以在我们的 GitHub 或 Discord 上了解更多信息。\n", - "zh_TW": "" + "zh_TW": "Ryujinx 是一款 Nintendo Switch™ 模擬器。\n關注我們的 Discord 取得所有最新消息。\n對於有興趣貢獻的開發者,可以在我們的 GitHub 或 Discord 上了解更多資訊。" } }, { @@ -14244,7 +14244,7 @@ "tr_TR": "", "uk_UA": "Минулі розробники:", "zh_CN": "曾经的维护者:", - "zh_TW": "" + "zh_TW": "過往的維護者:" } }, { @@ -15269,7 +15269,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "重新同步系统时间以匹配您电脑的当前日期和时间。\n\n这个操作不会实时同步系统时间与电脑时间,时间仍然可能不同步;在这种情况下,只需再次单击此按钮即可。", - "zh_TW": "" + "zh_TW": "重新同步系統韌體時間至 PC 目前的日期和時間。\n\n這不是一個主動設定,它仍然可能會失去同步;在這種情況下,只需再次點擊此按鈕。" } }, { @@ -17519,7 +17519,7 @@ "tr_TR": "", "uk_UA": "Часткові", "zh_CN": "分区", - "zh_TW": "" + "zh_TW": "部分" } }, { @@ -17544,7 +17544,7 @@ "tr_TR": "", "uk_UA": "Необрізані", "zh_CN": "没有瘦身的", - "zh_TW": "" + "zh_TW": "未修剪" } }, { @@ -17569,7 +17569,7 @@ "tr_TR": "", "uk_UA": "Обрізані", "zh_CN": "经过瘦身的", - "zh_TW": "" + "zh_TW": "已修剪" } }, { @@ -17594,7 +17594,7 @@ "tr_TR": "", "uk_UA": "(Невдача)", "zh_CN": "(失败)", - "zh_TW": "" + "zh_TW": "(失敗)" } }, { @@ -17619,7 +17619,7 @@ "tr_TR": "", "uk_UA": "Зберегти {0:n0} Мб", "zh_CN": "能节约 {0:n0} Mb", - "zh_TW": "" + "zh_TW": "可節省 {0:n0} Mb" } }, { @@ -17644,7 +17644,7 @@ "tr_TR": "", "uk_UA": "Збережено {0:n0} Мб", "zh_CN": "节约了 {0:n0} Mb", - "zh_TW": "" + "zh_TW": "已節省 {0:n0} Mb" } }, { @@ -17819,7 +17819,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "档案对话框", - "zh_TW": "" + "zh_TW": "Cabinet 對話方塊" } }, { @@ -17844,7 +17844,7 @@ "tr_TR": "", "uk_UA": "Вкажіть Ваше нове ім'я Amiibo", "zh_CN": "输入你的 Amiibo 的新名字", - "zh_TW": "" + "zh_TW": "輸入 Amiibo 的新名稱" } }, { @@ -17869,7 +17869,7 @@ "tr_TR": "", "uk_UA": "Будь ласка, проскануйте Ваш Amiibo.", "zh_CN": "请现在扫描你的 Amiibo", - "zh_TW": "" + "zh_TW": "請掃描你的 Amiibo。" } }, { @@ -18994,7 +18994,7 @@ "tr_TR": "", "uk_UA": "Перевірити та Обрізати XCI файл", "zh_CN": "检查并瘦身XCI文件", - "zh_TW": "" + "zh_TW": "檢查及修剪 XCI 檔案" } }, { @@ -19019,7 +19019,7 @@ "tr_TR": "", "uk_UA": "Ця функція спочатку перевірить вільний простір, а потім обрізатиме файл XCI для економії місця на диску.", "zh_CN": "这个功能将会先检查XCI文件,再对其执行瘦身操作以节约磁盘空间。", - "zh_TW": "" + "zh_TW": "此功能首先檢查 XCI 檔案是否有可修剪的字元,然後修剪檔案以節省儲存空間。" } }, { @@ -19044,7 +19044,7 @@ "tr_TR": "", "uk_UA": "Поточний розмір файла: {0:n} MB\nРозмір файлів гри: {1:n} MB\nЕкономія місця: {2:n} MB", "zh_CN": "当前文件大小: {0:n} MB\n游戏数据大小: {1:n} MB\n节约的磁盘空间: {2:n} MB", - "zh_TW": "" + "zh_TW": "現在的檔案大小: {0:n} MB\n遊戲資料大小: {1:n} MB\n節省的儲存空間: {2:n} MB" } }, { @@ -19069,7 +19069,7 @@ "tr_TR": "", "uk_UA": "XCI файл не потребує обрізання. Перевірте журнали для додаткової інформації", "zh_CN": "XCI文件不需要被瘦身。查看日志以获得更多细节。", - "zh_TW": "" + "zh_TW": "XCI 檔案不需要修剪。檢查日誌以取得更多資訊" } }, { @@ -19094,7 +19094,7 @@ "tr_TR": "", "uk_UA": "XCI файл не може бути обрізаний. Перевірте журнали для додаткової інформації", "zh_CN": "XCI文件不能被瘦身。查看日志以获得更多细节。", - "zh_TW": "" + "zh_TW": "XCI 檔案不能被修剪。檢查日誌以取得更多資訊" } }, { @@ -19119,7 +19119,7 @@ "tr_TR": "", "uk_UA": "XCI файл Тільки для Читання і не може бути прочитаним. Перевірте журнали додаткової інформації", "zh_CN": "XCI文件是只读的,且不可以被标记为可读取的。查看日志以获得更多细节。", - "zh_TW": "" + "zh_TW": "XCI 檔案是唯讀,並且無法改成可寫入。檢查日誌以取得更多資訊" } }, { @@ -19144,7 +19144,7 @@ "tr_TR": "", "uk_UA": "Розмір файлу XCI змінився з моменту сканування. Перевірте, чи не записується файл, та спробуйте знову", "zh_CN": "XCI文件在扫描后大小发生了变化。请检查文件是否未被写入,然后重试。", - "zh_TW": "" + "zh_TW": "XCI 檔案大小比較上次的掃瞄已經改變。請檢查檔案是否未被寫入,然後再嘗試。" } }, { @@ -19169,7 +19169,7 @@ "tr_TR": "", "uk_UA": "Файл XCI містить дані в зоні вільного простору, тому обрізка небезпечна", "zh_CN": "XCI文件的空闲区域内有数据,不能安全瘦身。", - "zh_TW": "" + "zh_TW": "XCI 檔案有數據儲存於可節省儲存空間的區域,所以試圖修剪並不安全" } }, { @@ -19194,7 +19194,7 @@ "tr_TR": "", "uk_UA": "XCI Файл містить недійсні дані. Перевірте журнали для додаткової інформації", "zh_CN": "XCI文件含有无效数据。查看日志以获得更多细节。", - "zh_TW": "" + "zh_TW": "XCI 檔案帶有無效的數據。檢查日誌以取得更多資訊" } }, { @@ -19219,7 +19219,7 @@ "tr_TR": "", "uk_UA": "XCI Файл файл не вдалося відкрити для запису. Перевірте журнали для додаткової інформації", "zh_CN": "XCI文件不能被读写。查看日志以获得更多细节。", - "zh_TW": "" + "zh_TW": "XCI 檔案不能被寫入。檢查日誌以取得更多資訊" } }, { @@ -19244,7 +19244,7 @@ "tr_TR": "", "uk_UA": "Не вдалося обрізати файл XCI", "zh_CN": "XCI文件瘦身失败", - "zh_TW": "" + "zh_TW": "修剪 XCI 檔案失敗" } }, { @@ -19269,7 +19269,7 @@ "tr_TR": "", "uk_UA": "Операція перервана", "zh_CN": "操作已取消", - "zh_TW": "" + "zh_TW": "修剪已取消" } }, { @@ -19294,7 +19294,7 @@ "tr_TR": "", "uk_UA": "Операція не проводилася", "zh_CN": "未执行操作", - "zh_TW": "" + "zh_TW": "沒有修剪" } }, { @@ -19444,7 +19444,7 @@ "tr_TR": "", "uk_UA": "Обрізка XCI Файлів", "zh_CN": "XCI文件瘦身器", - "zh_TW": "" + "zh_TW": "XCI 檔案修剪器" } }, { @@ -19469,7 +19469,7 @@ "tr_TR": "", "uk_UA": "{0} з {1} тайтл(ів) обрано", "zh_CN": "在 {1} 中选中了 {0} 个游戏 ", - "zh_TW": "" + "zh_TW": "已選擇 {1} 之 {0} 的遊戲" } }, { @@ -19494,7 +19494,7 @@ "tr_TR": "", "uk_UA": "{0} з {1} тайтл(ів) обрано ({2} відображається)", "zh_CN": "在 {1} 中选中了 {0} 个游戏 (显示了 {2} 个)", - "zh_TW": "" + "zh_TW": "已選擇 {1} 之 {0} 的遊戲 (已顯示 {2} 個)" } }, { @@ -19519,7 +19519,7 @@ "tr_TR": "", "uk_UA": "Обрізка {0} тайтл(ів)...", "zh_CN": "{0} 个游戏瘦身中。。。", - "zh_TW": "" + "zh_TW": "正在修剪 {0} 個遊戲..." } }, { @@ -19544,7 +19544,7 @@ "tr_TR": "", "uk_UA": "Необрізаних {0} тайтл(ів)...", "zh_CN": "正在精简 {0} 个游戏", - "zh_TW": "" + "zh_TW": "正在反修剪 {0} 個遊戲..." } }, { @@ -19569,7 +19569,7 @@ "tr_TR": "", "uk_UA": "Невдача", "zh_CN": "失败", - "zh_TW": "" + "zh_TW": "失敗" } }, { @@ -19594,7 +19594,7 @@ "tr_TR": "", "uk_UA": "Потенційна економія", "zh_CN": "潜在的储存空间节省", - "zh_TW": "" + "zh_TW": "潛在節省的儲存空間" } }, { @@ -19619,7 +19619,7 @@ "tr_TR": "", "uk_UA": "Зекономлено", "zh_CN": "实际的储存空间节省", - "zh_TW": "" + "zh_TW": "實際節省的儲存空間" } }, { @@ -19669,7 +19669,7 @@ "tr_TR": "", "uk_UA": "Вибрати показане", "zh_CN": "选定显示的", - "zh_TW": "" + "zh_TW": "選擇已顯示" } }, { @@ -19694,7 +19694,7 @@ "tr_TR": "", "uk_UA": "Скасувати вибір показаного", "zh_CN": "反选显示的", - "zh_TW": "" + "zh_TW": "取消選擇已顯示" } }, { @@ -19719,7 +19719,7 @@ "tr_TR": "", "uk_UA": "Заголовок", "zh_CN": "标题", - "zh_TW": "" + "zh_TW": "名稱" } }, { @@ -19744,7 +19744,7 @@ "tr_TR": "", "uk_UA": "Економія місця", "zh_CN": "节省空间", - "zh_TW": "" + "zh_TW": "節省的儲存空間" } }, { @@ -19769,7 +19769,7 @@ "tr_TR": "", "uk_UA": "Обрізка", "zh_CN": "瘦身", - "zh_TW": "" + "zh_TW": "修剪" } }, { @@ -19794,7 +19794,7 @@ "tr_TR": "", "uk_UA": "Зшивання", "zh_CN": "取消精简", - "zh_TW": "" + "zh_TW": "反修剪" } }, { @@ -19944,7 +19944,7 @@ "tr_TR": "", "uk_UA": "{0} DLC доступно", "zh_CN": "{0} 个 DLC", - "zh_TW": "" + "zh_TW": "{0} 個可下載內容" } }, { @@ -20144,7 +20144,7 @@ "tr_TR": "", "uk_UA": "Продовжити", "zh_CN": "继续", - "zh_TW": "" + "zh_TW": "繼續" } }, { @@ -20519,7 +20519,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "自动", - "zh_TW": "" + "zh_TW": "自動" } }, { @@ -20544,7 +20544,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "使用Vulkan。\n在ARM Mac上,当玩在其下运行良好的游戏时,使用Metal后端。", - "zh_TW": "" + "zh_TW": "使用Vulkan。\n在 ARM Mac 上,如果遊戲執行性能良好時,則將使用 Metal 後端。" } }, { @@ -21419,7 +21419,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "Area(区域过滤)", - "zh_TW": "" + "zh_TW": "區域" } }, { @@ -21944,7 +21944,7 @@ "tr_TR": "", "uk_UA": "Вимкнути хостинг P2P мережі (може збільшити затримку)", "zh_CN": "禁用P2P网络连接 (也许会增加延迟)", - "zh_TW": "" + "zh_TW": "停用對等網路代管 (P2P Network Hosting) (可能增加網路延遲)" } }, { @@ -21969,7 +21969,7 @@ "tr_TR": "", "uk_UA": "Вимкнути хостинг P2P мережі, піри будуть підключатися через майстер-сервер замість прямого з'єднання з вами.", "zh_CN": "禁用P2P网络连接,对方将通过主服务器进行连接,而不是直接连接到您。", - "zh_TW": "" + "zh_TW": "停用對等網路代管 (P2P Network Hosting), 用戶群會經過代理何服器而非直接連線至你的主機。" } }, { @@ -21994,7 +21994,7 @@ "tr_TR": "", "uk_UA": "Мережевий пароль:", "zh_CN": "网络密码:", - "zh_TW": "" + "zh_TW": "網路密碼片語 (passphrase):" } }, { @@ -22019,7 +22019,7 @@ "tr_TR": "", "uk_UA": "Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.", "zh_CN": "您只能看到与您使用相同密码的游戏房间。", - "zh_TW": "" + "zh_TW": "你只會看到與你的密碼片語 (passphrase) 相同的遊戲房間。" } }, { @@ -22044,7 +22044,7 @@ "tr_TR": "", "uk_UA": "Введіть пароль у форматі Ryujinx-<8 символів>. Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.", "zh_CN": "以Ryujinx-<8个十六进制字符>的格式输入密码。您只能看到与您使用相同密码的游戏房间。", - "zh_TW": "" + "zh_TW": "以「Ryujinx-<8 個十六進制數字>」的格式輸入密碼片語 (passphrase)。你只會看到與你的密碼片語 (passphrase) 相同的遊戲房間。" } }, { @@ -22069,7 +22069,7 @@ "tr_TR": "", "uk_UA": "(публічний)", "zh_CN": "(公开的)", - "zh_TW": "" + "zh_TW": "(公開模式)" } }, { @@ -22094,7 +22094,7 @@ "tr_TR": "", "uk_UA": "Згенерувати випадкову", "zh_CN": "随机生成", - "zh_TW": "" + "zh_TW": "隨機產生" } }, { @@ -22119,7 +22119,7 @@ "tr_TR": "", "uk_UA": "Генерує новий пароль, яким можна поділитися з іншими гравцями.", "zh_CN": "生成一个新的密码,可以与其他玩家共享。", - "zh_TW": "" + "zh_TW": "產生一組新的密碼片語 (passphrase), 以供分享給其他玩家。" } }, { @@ -22144,7 +22144,7 @@ "tr_TR": "", "uk_UA": "Очистити", "zh_CN": "清除", - "zh_TW": "" + "zh_TW": "清除" } }, { @@ -22169,7 +22169,7 @@ "tr_TR": "", "uk_UA": "Очищає поточну пароль, повертаючись до публічної мережі.", "zh_CN": "清除当前密码,返回公共网络。", - "zh_TW": "" + "zh_TW": "清除現有的密碼片語 (passphrase), 藉此公開網路連線。" } }, { @@ -22194,7 +22194,7 @@ "tr_TR": "", "uk_UA": "Невірний пароль! Має бути в форматі \"Ryujinx-<8 символів>\"", "zh_CN": "无效密码!密码的格式必须是\"Ryujinx-<8个十六进制字符>\"", - "zh_TW": "" + "zh_TW": "無效的密碼片語 (passphrase)! 密碼片語必須是以「Ryujinx-<8 個十六進制數字>」的格式輸入" } }, { @@ -22219,7 +22219,7 @@ "tr_TR": "", "uk_UA": "Вертикальна синхронізація (VSync):", "zh_CN": "垂直同步(VSync)", - "zh_TW": "" + "zh_TW": "垂直同步:" } }, { @@ -22244,7 +22244,7 @@ "tr_TR": "", "uk_UA": "Увімкнути користувацьку частоту оновлення (Експериментально)", "zh_CN": "启动自定义刷新率(实验性功能)", - "zh_TW": "" + "zh_TW": "啟用自訂的重新整理頻率 (實驗性功能)" } }, { @@ -22294,7 +22294,7 @@ "tr_TR": "", "uk_UA": "Безмежна", "zh_CN": "无限制", - "zh_TW": "" + "zh_TW": "沒有限制" } }, { @@ -22319,7 +22319,7 @@ "tr_TR": "", "uk_UA": "Користувацька", "zh_CN": "自定义刷新率", - "zh_TW": "" + "zh_TW": "自訂的重新整理頻率" } }, { @@ -22344,7 +22344,7 @@ "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень.", "zh_CN": "模拟垂直同步。“Switch”模拟了Switch的60Hz刷新率。“无限制”没有刷新率限制。", - "zh_TW": "" + "zh_TW": "模擬垂直同步。「Switch」 模擬 Nintendo Switch 的 60Hz 重新整理頻率。「沒有限制」是沒有限制的重新整理頻率。" } }, { @@ -22369,7 +22369,7 @@ "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень. 'Користувацька' емулює вказану користувацьку частоту оновлення.", "zh_CN": "模拟垂直同步。“Switch”模拟了Switch的60Hz刷新率。“无限制”没有刷新率限制。“自定义刷新率”模拟指定的自定义刷新率。", - "zh_TW": "" + "zh_TW": "模擬垂直同步。「Switch」 模擬 Nintendo Switch 的 60Hz 重新整理頻率。「沒有限制」是沒有限制的重新整理頻率。「自訂的重新整理頻率」模擬所自訂的重新整理頻率。" } }, { @@ -22394,7 +22394,7 @@ "tr_TR": "", "uk_UA": "Дозволяє користувачу вказати емульовану частоту оновлення. У деяких іграх це може прискорити або сповільнити логіку гри. У інших іграх це може дозволити обмежити FPS на певні кратні частоти оновлення або призвести до непередбачуваної поведінки. Це експериментальна функція, без гарантій того, як це вплине на ігровий процес. \n\nЗалиште ВИМКНЕНИМ, якщо не впевнені.", "zh_CN": "允许用户指定模拟刷新率。在某些游戏中,这可能会加快或减慢游戏逻辑的速度。在其他游戏中,它可能允许将FPS限制在刷新率的某个倍数,或者导致不可预测的行为。这是一个实验性功能,无法保证游戏会受到怎样的影响。\n\n如果不确定,请关闭。", - "zh_TW": "" + "zh_TW": "容許使用者自訂模擬的重新整理頻率。你可能會在某些遊戲裡感受到加快或減慢的遊戲速度;其他遊戲裡則可能會容許限制最高的 FPS 至重新整理頻率的倍數,或引起未知遊戲行為。這是實驗性功能,且沒有保證遊戲會穩定執行。\n\n如果不確定,請保持關閉狀態。" } }, { @@ -22419,7 +22419,7 @@ "tr_TR": "", "uk_UA": "Цільове значення користувацької частоти оновлення.", "zh_CN": "目标自定义刷新率值。", - "zh_TW": "" + "zh_TW": "自訂的重新整理頻率數值。" } }, { @@ -22444,7 +22444,7 @@ "tr_TR": "", "uk_UA": "Користувацька частота оновлення, як відсоток від стандартної частоти оновлення Switch.", "zh_CN": "自定义刷新率,占正常SWitch刷新率的百分比值。", - "zh_TW": "" + "zh_TW": "以 Nintendo Switch 重新整理頻率的百分比自訂重新整理頻率。" } }, { @@ -22469,7 +22469,7 @@ "tr_TR": "", "uk_UA": "Користувацька частота оновлення %:", "zh_CN": "自定义刷新率值 %:", - "zh_TW": "" + "zh_TW": "自訂重新整理頻率 %:" } }, { @@ -22494,7 +22494,7 @@ "tr_TR": "", "uk_UA": "Значення користувацька частота оновлення:", "zh_CN": "自定义刷新率值:", - "zh_TW": "" + "zh_TW": "自訂重新整理頻率數值:" } }, { @@ -22519,7 +22519,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "间隔", - "zh_TW": "" + "zh_TW": "間隔" } }, { @@ -22544,7 +22544,7 @@ "tr_TR": "", "uk_UA": "Перемкнути VSync режим:", "zh_CN": "设置 VSync 模式:", - "zh_TW": "" + "zh_TW": "切換 VSync 模式:" } }, { @@ -22569,7 +22569,7 @@ "tr_TR": "", "uk_UA": "Підвищити користувацьку частоту оновлення", "zh_CN": "提高自定义刷新率:", - "zh_TW": "" + "zh_TW": "提高自訂的重新整理頻率" } }, { @@ -22594,7 +22594,7 @@ "tr_TR": "", "uk_UA": "Понизити користувацьку частоту оновлення", "zh_CN": "降低自定义刷新率:", - "zh_TW": "" + "zh_TW": "降低自訂的重新整理頻率" } }, { @@ -22619,7 +22619,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "最后更新于: {0}", - "zh_TW": "" + "zh_TW": "上次更新時間: {0}" } }, { @@ -22644,7 +22644,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "此兼容性列表可能包含过时的条目。\n不要只测试 \"进入游戏\" 状态的游戏。", - "zh_TW": "" + "zh_TW": "這個相容性列表可能含有已過時的紀錄。\n敬請繼續測試「大致可遊玩 (Ingame)」狀態的遊戲並回報以更新紀錄。" } }, { @@ -22669,7 +22669,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "正在搜索兼容性条目...", - "zh_TW": "" + "zh_TW": "搜尋相容性列表紀錄..." } }, { @@ -22694,7 +22694,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "打开兼容性列表", - "zh_TW": "" + "zh_TW": "開啟相容性列表" } }, { @@ -22719,7 +22719,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "仅显示拥有的游戏", - "zh_TW": "" + "zh_TW": "只顯示已擁有的遊戲" } }, { @@ -22744,7 +22744,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "可游玩", - "zh_TW": "" + "zh_TW": "可暢順遊玩 (Playable)" } }, { @@ -22769,7 +22769,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "进入游戏", - "zh_TW": "" + "zh_TW": "大致可遊玩 (Ingame)" } }, { @@ -22794,7 +22794,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "菜单", - "zh_TW": "" + "zh_TW": "只開啟至遊戲開始功能表 (Menus)" } }, { @@ -22819,7 +22819,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "启动", - "zh_TW": "" + "zh_TW": "只能啟動 (Boots)" } }, { @@ -22844,7 +22844,7 @@ "tr_TR": "", "uk_UA": "", "zh_CN": "什么都没有", - "zh_TW": "" + "zh_TW": "無法啟動 (Nothing)" } } ] -- 2.47.1 From 6cd4866d76ba5c9b13cfea9fb2435bf0b302a36e Mon Sep 17 00:00:00 2001 From: Daniel Nylander Date: Sat, 18 Jan 2025 01:04:18 +0100 Subject: [PATCH 349/722] Updated sv_SE in locales.json (#513) --- src/Ryujinx/Assets/locales.json | 68 ++++++++++++++++--- .../Views/Settings/SettingsSystemView.axaml | 6 ++ 2 files changed, 64 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index e3bb7cfb7..1a42051b8 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -3946,6 +3946,54 @@ "zh_CN": "繁体中文(推荐)", "zh_TW": "正體中文 (建議)" } + }, { + "ID": "SettingsTabSystemSystemLanguageSwedish", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Swedish", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "Svenska", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { + "ID": "SettingsTabSystemSystemLanguageNorwegian", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Norwegian", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "Norsk", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "Norska", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } }, { "ID": "SettingsTabSystemSystemTimeZone", @@ -22614,7 +22662,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Senast uppdaterad: {0}", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22639,7 +22687,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Denna kompatibilitetslista kan innehålla utdaterade poster.\nTesta gärna spelen som listas med \"Spelproblem\"-status.", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22664,7 +22712,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Sök i kompatibilitetsposter...", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22689,7 +22737,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Öppna kompatibilitetslistan", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22714,7 +22762,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Visa endast ägda spel", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22739,7 +22787,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Spelbart", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22764,7 +22812,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Spelproblem", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22789,7 +22837,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Menyer", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22814,7 +22862,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Startar", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22839,7 +22887,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "", + "sv_SE": "Ingenting", "th_TH": "", "tr_TR": "", "uk_UA": "", diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml index 9295413ba..d7cf60787 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml @@ -136,6 +136,12 @@ + + + + + + Date: Sat, 18 Jan 2025 10:15:24 -0600 Subject: [PATCH 350/722] headless: collapse headless window definition into a "Windows" folder, change GetWindowFlags to an abstract property. --- src/Ryujinx/Headless/{Metal => Windows}/MetalWindow.cs | 2 +- src/Ryujinx/Headless/{OpenGL => Windows}/OpenGLWindow.cs | 2 +- src/Ryujinx/Headless/{Vulkan => Windows}/VulkanWindow.cs | 2 +- src/Ryujinx/Headless/{ => Windows}/WindowBase.cs | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) rename src/Ryujinx/Headless/{Metal => Windows}/MetalWindow.cs (93%) rename src/Ryujinx/Headless/{OpenGL => Windows}/OpenGLWindow.cs (98%) rename src/Ryujinx/Headless/{Vulkan => Windows}/VulkanWindow.cs (97%) rename src/Ryujinx/Headless/{ => Windows}/WindowBase.cs (99%) diff --git a/src/Ryujinx/Headless/Metal/MetalWindow.cs b/src/Ryujinx/Headless/Windows/MetalWindow.cs similarity index 93% rename from src/Ryujinx/Headless/Metal/MetalWindow.cs rename to src/Ryujinx/Headless/Windows/MetalWindow.cs index a2693c69d..d79bd7938 100644 --- a/src/Ryujinx/Headless/Metal/MetalWindow.cs +++ b/src/Ryujinx/Headless/Windows/MetalWindow.cs @@ -26,7 +26,7 @@ namespace Ryujinx.Headless bool ignoreControllerApplet) : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet) { } - public override SDL_WindowFlags GetWindowFlags() => SDL_WindowFlags.SDL_WINDOW_METAL; + public override SDL_WindowFlags WindowFlags => SDL_WindowFlags.SDL_WINDOW_METAL; protected override void InitializeWindowRenderer() { diff --git a/src/Ryujinx/Headless/OpenGL/OpenGLWindow.cs b/src/Ryujinx/Headless/Windows/OpenGLWindow.cs similarity index 98% rename from src/Ryujinx/Headless/OpenGL/OpenGLWindow.cs rename to src/Ryujinx/Headless/Windows/OpenGLWindow.cs index c00a0648f..23c64ad4f 100644 --- a/src/Ryujinx/Headless/OpenGL/OpenGLWindow.cs +++ b/src/Ryujinx/Headless/Windows/OpenGLWindow.cs @@ -124,7 +124,7 @@ namespace Ryujinx.Headless _glLogLevel = glLogLevel; } - public override SDL_WindowFlags GetWindowFlags() => SDL_WindowFlags.SDL_WINDOW_OPENGL; + public override SDL_WindowFlags WindowFlags => SDL_WindowFlags.SDL_WINDOW_OPENGL; protected override void InitializeWindowRenderer() { diff --git a/src/Ryujinx/Headless/Vulkan/VulkanWindow.cs b/src/Ryujinx/Headless/Windows/VulkanWindow.cs similarity index 97% rename from src/Ryujinx/Headless/Vulkan/VulkanWindow.cs rename to src/Ryujinx/Headless/Windows/VulkanWindow.cs index 92caad34e..5f6de94a5 100644 --- a/src/Ryujinx/Headless/Vulkan/VulkanWindow.cs +++ b/src/Ryujinx/Headless/Windows/VulkanWindow.cs @@ -24,7 +24,7 @@ namespace Ryujinx.Headless _glLogLevel = glLogLevel; } - public override SDL_WindowFlags GetWindowFlags() => SDL_WindowFlags.SDL_WINDOW_VULKAN; + public override SDL_WindowFlags WindowFlags => SDL_WindowFlags.SDL_WINDOW_VULKAN; protected override void InitializeWindowRenderer() { } diff --git a/src/Ryujinx/Headless/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs similarity index 99% rename from src/Ryujinx/Headless/WindowBase.cs rename to src/Ryujinx/Headless/Windows/WindowBase.cs index d89638cc1..b2d18fac1 100644 --- a/src/Ryujinx/Headless/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -191,7 +191,7 @@ namespace Ryujinx.Headless FullscreenFlag = SDL_WindowFlags.SDL_WINDOW_FULLSCREEN_DESKTOP; } - WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), Width, Height, DefaultFlags | FullscreenFlag | GetWindowFlags()); + WindowHandle = SDL_CreateWindow($"Ryujinx {Program.Version}{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}", SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), SDL_WINDOWPOS_CENTERED_DISPLAY(DisplayId), Width, Height, DefaultFlags | FullscreenFlag | WindowFlags); if (WindowHandle == nint.Zero) { @@ -246,7 +246,7 @@ namespace Ryujinx.Headless protected abstract void SwapBuffers(); - public abstract SDL_WindowFlags GetWindowFlags(); + public abstract SDL_WindowFlags WindowFlags { get; } private string GetGpuDriverName() { -- 2.47.1 From 6a291d41167d89d79c9df5ffda6fd7aa951c90a1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:26:12 -0600 Subject: [PATCH 351/722] Headless: Use main UI logo for window icon instead of separate bmp --- src/Ryujinx/Assets/locales.json | 8 +++++--- src/Ryujinx/Headless/Ryujinx.bmp | Bin 3978 -> 0 bytes src/Ryujinx/Headless/Windows/WindowBase.cs | 3 ++- src/Ryujinx/Ryujinx.csproj | 1 - 4 files changed, 7 insertions(+), 5 deletions(-) delete mode 100644 src/Ryujinx/Headless/Ryujinx.bmp diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 1a42051b8..d320c935e 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -3946,7 +3946,8 @@ "zh_CN": "繁体中文(推荐)", "zh_TW": "正體中文 (建議)" } - }, { + }, + { "ID": "SettingsTabSystemSystemLanguageSwedish", "Translations": { "ar_SA": "", @@ -3970,7 +3971,8 @@ "zh_CN": "", "zh_TW": "" } - }, { + }, + { "ID": "SettingsTabSystemSystemLanguageNorwegian", "Translations": { "ar_SA": "", @@ -22896,4 +22898,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/Ryujinx/Headless/Ryujinx.bmp b/src/Ryujinx/Headless/Ryujinx.bmp deleted file mode 100644 index 36bf2f8ac129d43565ea345df7bb33b3b86e251b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3978 zcmb`}dr(x@836E)i8v*#uV|(=srEUUO#X6Nz+k7flXlualy=f2{i8{cec#6}%kHv@ zCb*+1J`pCdF)>d5$%B}X1vMce0Txtr#z!QXaS{^{d?1<&q8Jr*&-wbDyL(|5xauFd zeE3^!&)jHelc0Wcjb^G@1S$}-+>jxfxp*nl){{u`({pClTM-V|BLGa#0 zi#*IVX^3GmxO|mqN*{Y)X=iz%BX_{l%ziXE;c`%K@@#pSjk#AC$`|4&9g3se%(|3T z_RsJ!Djq$3M}GkYu|068>PcvNJqNmK7Q?v@7sFYK^ROv>I9L1E%rkZQ`90CR(CNCI%AWe1s@^(l)rn93ytbyb z@X?Q2UxfEM{&Ro%USpb>soPOD(6=Wa&erA6?XAoE-|0H*V0SbdyP_8CrZ}-HAGgMq z4F!*cvsWAq!J1h4JzeiDo~`uL`li&@$Wx4-8iqxs9DAaR9_p>ntx0&o%+}4$`h2Wv zDMH`jkXCXuY$-V&hDa=8?)FeGf6Kx59l3|dO|Ivt*-YjKWCjom?TEegc`L}gZMY)O z&iX~V>Fo$&@!_BrxF5Hb_E9_8ZM2VC$W5-LK8`aB9f-7+Cxw{^s;zF?P?)}sK$^Sy z;07q9rd~qvkMF;S=X!ggdSnDdPeo$n9^l~J&(mFDirOag6sCyosP(p}?P;-|6DHSdYnWm*)^jp5;RdMAK}$(zIVjgyCdFK7 zFrGp0q^ZhHHrI~v3sCe?)cOpR98$)9z;4eV6h0u0K!@O>X**tw(SFDb05aEy@k5?;ZN? z8+;W-PUs@d5Aiihj6WgAILK{eQuq#Vi&Vq3qQJ!3iavG*E@7am3D?D3$=r+_#pp-h zv302Qb)h_r8ohHZ$}pRyUgN)2eqdqs67wscv0srHp>WGB{C70Yv&}(}Hgc=Yj|0L; zT~9H0mXKM!55sRnNBcIlwjxiJOlb(oWx`#c{=oCSH+iW#z$(=vY@gc3!xUS|YgF5L z8TD~t@r^r~b{FO@bK>9xQ{2A`zFlMH@#bhc?JWFb1Gsvo-Jag%tG?V6A zq*}h9@Hw1Dwas*R(p^#8;5c*4o!lICN0`O)I-f#@jl9*AXOv+I#ROfDH@m`FB(uO~yzMW3?U&vhRJ;kTn{rGR23;#>r zY`2VA_GG?yGlQFUpzrwRwDmMRNu1f|1KKV5jwUhx!Lodr0JGL}2|kRD6C^E?%G>;>KMlF(ysvpnf;eyzL2B zyn`JT9Gn|iro+$6D7W7fIWUXzT|@DxTHXVJ4V~7~*Y*vBw?#*-G4lYH~A%NPw) zoMm*jT&6veM|j44o;_&_P1RRm&*l|CzO?y(Y{BRH*cQansOrpddDv%`;_OM zL~T>gY{MR8S{p!L*J&+Md|Bi482O7rzK`+l>}{||ti B6odc( diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs index b2d18fac1..51bfcb214 100644 --- a/src/Ryujinx/Headless/Windows/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -1,6 +1,7 @@ using Humanizer; using LibHac.Tools.Fs; using Ryujinx.Ava; +using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Logging; @@ -137,7 +138,7 @@ namespace Ryujinx.Headless private void SetWindowIcon() { - Stream iconStream = typeof(Program).Assembly.GetManifestResourceStream("HeadlessLogo"); + Stream iconStream = EmbeddedResources.GetStream("Ryujinx/Assets/UIImages/Logo_Ryujinx.png"); byte[] iconBytes = new byte[iconStream!.Length]; if (iconStream.Read(iconBytes, 0, iconBytes.Length) != iconBytes.Length) diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index ab9a3696d..8929ba3eb 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -166,7 +166,6 @@ - -- 2.47.1 From b08e5db6d871da8bb8ee593ba9058443c91fe0c7 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:30:19 -0600 Subject: [PATCH 352/722] Headless: Dispose of inputmanager in a catch-all try --- src/Ryujinx/Headless/HeadlessRyujinx.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index 5730254f7..d5d6eb44d 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -301,7 +301,10 @@ namespace Ryujinx.Headless _userChannelPersistence.ShouldRestart = false; } - _inputManager.Dispose(); + try + { + _inputManager.Dispose(); + } catch {} return; -- 2.47.1 From 80f44d95473271269d01422517c0e8d530c8709c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:33:57 -0600 Subject: [PATCH 353/722] misc: chore: small cleanup --- src/Ryujinx/Headless/HeadlessRyujinx.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index d5d6eb44d..787aaca62 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -228,8 +228,6 @@ namespace Ryujinx.Headless _inputConfiguration ??= []; _enableKeyboard = option.EnableKeyboard; _enableMouse = option.EnableMouse; - - LoadPlayerConfiguration(option.InputProfile1Name, option.InputId1, PlayerIndex.Player1); LoadPlayerConfiguration(option.InputProfile2Name, option.InputId2, PlayerIndex.Player2); @@ -341,12 +339,12 @@ namespace Ryujinx.Headless { string label = state switch { - LoadState => $"PTC : {current}/{total}", - ShaderCacheState => $"Shaders : {current}/{total}", - _ => throw new ArgumentException($"Unknown Progress Handler type {typeof(T)}"), + LoadState => "PTC", + ShaderCacheState => "Shaders", + _ => throw new ArgumentException($"Unknown Progress Handler type {typeof(T)}") }; - Logger.Info?.Print(LogClass.Application, label); + Logger.Info?.Print(LogClass.Application, $"{label} : {current}/{total}"); } private static WindowBase CreateWindow(Options options) -- 2.47.1 From 2f93a0f706701e6b4c392ff1c1e64f20957402bb Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:38:29 -0600 Subject: [PATCH 354/722] infra: Conditionally compile Metal & OpenGL depending on if the target RuntimeIdentifier is mac --- src/Ryujinx/Ryujinx.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 8929ba3eb..682a08475 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -72,8 +72,8 @@ - - + + -- 2.47.1 From beda3206e0a17ff8807fff1bbe014b24c2683e3d Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:52:32 -0600 Subject: [PATCH 355/722] Only selectively compile Metal & fix some compilation issues --- src/Ryujinx/AppHost.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 6 ++---- src/Ryujinx/Ryujinx.csproj | 2 +- src/Ryujinx/UI/Renderer/EmbeddedWindow.cs | 3 +-- src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs | 2 ++ 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index a35a79e86..e3a35376c 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -897,7 +897,7 @@ namespace Ryujinx.Ava { #pragma warning disable CA1416 // This call site is reachable on all platforms // SelectGraphicsBackend does a check for Mac, on top of checking if it's an ARM Mac. This isn't a problem. - GraphicsBackend.Metal => new MetalRenderer((RendererHost.EmbeddedWindow as EmbeddedWindowMetal)!.CreateSurface), + GraphicsBackend.Metal => new MetalRenderer(() => new SharpMetal.QuartzCore.CAMetalLayer(((EmbeddedWindowMetal)RendererHost.EmbeddedWindow).MetalLayer)), #pragma warning restore CA1416 GraphicsBackend.Vulkan => VulkanRenderer.Create( ConfigurationState.Instance.Graphics.PreferredGpu, diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index 7d75ac7c1..e92a56833 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -12,8 +12,6 @@ using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; -using Ryujinx.Graphics.Metal; -using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.Input; @@ -312,10 +310,10 @@ namespace Ryujinx.Headless if (options.GraphicsBackend == GraphicsBackend.Metal && window is MetalWindow metalWindow && OperatingSystem.IsMacOS()) { - return new MetalRenderer(metalWindow.GetLayer); + return new Graphics.Metal.MetalRenderer(metalWindow.GetLayer); } - return new OpenGLRenderer(); + return new Graphics.OpenGL.OpenGLRenderer(); } private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 682a08475..c7cdef14c 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -72,7 +72,7 @@ - + diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs index eea9be283..87b66e4f3 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs @@ -1,6 +1,5 @@ using Avalonia; using Avalonia.Controls; -using Avalonia.Input; using Avalonia.Platform; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; @@ -28,7 +27,7 @@ namespace Ryujinx.Ava.UI.Renderer protected nint WindowHandle { get; set; } protected nint X11Display { get; set; } protected nint NsView { get; set; } - protected nint MetalLayer { get; set; } + public nint MetalLayer { get; protected set; } public delegate void UpdateBoundsCallbackDelegate(Rect rect); private UpdateBoundsCallbackDelegate _updateBoundsCallback; diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs index eaf6f7bdf..7a2932075 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs @@ -1,8 +1,10 @@ using SharpMetal.QuartzCore; using System; +using System.Runtime.Versioning; namespace Ryujinx.Ava.UI.Renderer { + [SupportedOSPlatform("macos")] public class EmbeddedWindowMetal : EmbeddedWindow { public CAMetalLayer CreateSurface() -- 2.47.1 From e6bad52945e7e35e9aee7bd5b49a0918dd28a0e0 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:56:58 -0600 Subject: [PATCH 356/722] Revert "Only selectively compile Metal & fix some compilation issues" This reverts commit beda3206e0a17ff8807fff1bbe014b24c2683e3d. --- src/Ryujinx/AppHost.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 6 ++++-- src/Ryujinx/Ryujinx.csproj | 2 +- src/Ryujinx/UI/Renderer/EmbeddedWindow.cs | 3 ++- src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs | 2 -- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index e3a35376c..a35a79e86 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -897,7 +897,7 @@ namespace Ryujinx.Ava { #pragma warning disable CA1416 // This call site is reachable on all platforms // SelectGraphicsBackend does a check for Mac, on top of checking if it's an ARM Mac. This isn't a problem. - GraphicsBackend.Metal => new MetalRenderer(() => new SharpMetal.QuartzCore.CAMetalLayer(((EmbeddedWindowMetal)RendererHost.EmbeddedWindow).MetalLayer)), + GraphicsBackend.Metal => new MetalRenderer((RendererHost.EmbeddedWindow as EmbeddedWindowMetal)!.CreateSurface), #pragma warning restore CA1416 GraphicsBackend.Vulkan => VulkanRenderer.Create( ConfigurationState.Instance.Graphics.PreferredGpu, diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index e92a56833..7d75ac7c1 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -12,6 +12,8 @@ using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; +using Ryujinx.Graphics.Metal; +using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.Input; @@ -310,10 +312,10 @@ namespace Ryujinx.Headless if (options.GraphicsBackend == GraphicsBackend.Metal && window is MetalWindow metalWindow && OperatingSystem.IsMacOS()) { - return new Graphics.Metal.MetalRenderer(metalWindow.GetLayer); + return new MetalRenderer(metalWindow.GetLayer); } - return new Graphics.OpenGL.OpenGLRenderer(); + return new OpenGLRenderer(); } private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index c7cdef14c..682a08475 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -72,7 +72,7 @@ - + diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs index 87b66e4f3..eea9be283 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs @@ -1,5 +1,6 @@ using Avalonia; using Avalonia.Controls; +using Avalonia.Input; using Avalonia.Platform; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; @@ -27,7 +28,7 @@ namespace Ryujinx.Ava.UI.Renderer protected nint WindowHandle { get; set; } protected nint X11Display { get; set; } protected nint NsView { get; set; } - public nint MetalLayer { get; protected set; } + protected nint MetalLayer { get; set; } public delegate void UpdateBoundsCallbackDelegate(Rect rect); private UpdateBoundsCallbackDelegate _updateBoundsCallback; diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs index 7a2932075..eaf6f7bdf 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs @@ -1,10 +1,8 @@ using SharpMetal.QuartzCore; using System; -using System.Runtime.Versioning; namespace Ryujinx.Ava.UI.Renderer { - [SupportedOSPlatform("macos")] public class EmbeddedWindowMetal : EmbeddedWindow { public CAMetalLayer CreateSurface() -- 2.47.1 From 580b150c9a1da8403f7e903caf47d7b775f9ff8e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 10:57:02 -0600 Subject: [PATCH 357/722] Revert "infra: Conditionally compile Metal & OpenGL depending on if the target RuntimeIdentifier is mac" This reverts commit 2f93a0f706701e6b4c392ff1c1e64f20957402bb. --- src/Ryujinx/Ryujinx.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 682a08475..8929ba3eb 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -72,8 +72,8 @@ - - + + -- 2.47.1 From ade2f256e0abd0064410e01c35b29b6f662c70b5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 11:19:38 -0600 Subject: [PATCH 358/722] misc: chore: remove duplicate graphics debug levels in headless windows --- src/Ryujinx/Headless/Windows/OpenGLWindow.cs | 6 ++---- src/Ryujinx/Headless/Windows/VulkanWindow.cs | 3 --- src/Ryujinx/Headless/Windows/WindowBase.cs | 6 +++--- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx/Headless/Windows/OpenGLWindow.cs b/src/Ryujinx/Headless/Windows/OpenGLWindow.cs index 23c64ad4f..117fe5780 100644 --- a/src/Ryujinx/Headless/Windows/OpenGLWindow.cs +++ b/src/Ryujinx/Headless/Windows/OpenGLWindow.cs @@ -108,8 +108,7 @@ namespace Ryujinx.Headless } } } - - private readonly GraphicsDebugLevel _glLogLevel; + private SDL2OpenGLContext _openGLContext; public OpenGLWindow( @@ -121,7 +120,6 @@ namespace Ryujinx.Headless bool ignoreControllerApplet) : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet) { - _glLogLevel = glLogLevel; } public override SDL_WindowFlags WindowFlags => SDL_WindowFlags.SDL_WINDOW_OPENGL; @@ -129,7 +127,7 @@ namespace Ryujinx.Headless protected override void InitializeWindowRenderer() { // Ensure to not share this context with other contexts before this point. - SetupOpenGLAttributes(false, _glLogLevel); + SetupOpenGLAttributes(false, GlLogLevel); nint context = SDL_GL_CreateContext(WindowHandle); CheckResult(SDL_GL_SetSwapInterval(1)); diff --git a/src/Ryujinx/Headless/Windows/VulkanWindow.cs b/src/Ryujinx/Headless/Windows/VulkanWindow.cs index 5f6de94a5..2abbbd1e9 100644 --- a/src/Ryujinx/Headless/Windows/VulkanWindow.cs +++ b/src/Ryujinx/Headless/Windows/VulkanWindow.cs @@ -10,8 +10,6 @@ namespace Ryujinx.Headless { class VulkanWindow : WindowBase { - private readonly GraphicsDebugLevel _glLogLevel; - public VulkanWindow( InputManager inputManager, GraphicsDebugLevel glLogLevel, @@ -21,7 +19,6 @@ namespace Ryujinx.Headless bool ignoreControllerApplet) : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet) { - _glLogLevel = glLogLevel; } public override SDL_WindowFlags WindowFlags => SDL_WindowFlags.SDL_WINDOW_VULKAN; diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs index 51bfcb214..eea01763a 100644 --- a/src/Ryujinx/Headless/Windows/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -73,7 +73,7 @@ namespace Ryujinx.Headless protected SDL2MouseDriver MouseDriver; private readonly InputManager _inputManager; private readonly IKeyboard _keyboardInterface; - private readonly GraphicsDebugLevel _glLogLevel; + protected readonly GraphicsDebugLevel GlLogLevel; private readonly Stopwatch _chrono; private readonly long _ticksPerFrame; private readonly CancellationTokenSource _gpuCancellationTokenSource; @@ -105,7 +105,7 @@ namespace Ryujinx.Headless NpadManager = _inputManager.CreateNpadManager(); TouchScreenManager = _inputManager.CreateTouchScreenManager(); _keyboardInterface = (IKeyboard)_inputManager.KeyboardDriver.GetGamepad("0"); - _glLogLevel = glLogLevel; + GlLogLevel = glLogLevel; _chrono = new Stopwatch(); _ticksPerFrame = Stopwatch.Frequency / TargetFps; _gpuCancellationTokenSource = new CancellationTokenSource(); @@ -269,7 +269,7 @@ namespace Ryujinx.Headless { InitializeWindowRenderer(); - Device.Gpu.Renderer.Initialize(_glLogLevel); + Device.Gpu.Renderer.Initialize(GlLogLevel); InitializeRenderer(); -- 2.47.1 From 6fca4492d04827df53a70984c43a1f29f8774423 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 15:15:08 -0600 Subject: [PATCH 359/722] misc: chore: Remove status update event stuff in Headless --- .../Headless/StatusUpdatedEventArgs.cs | 21 ------------------ src/Ryujinx/Headless/Windows/WindowBase.cs | 22 +++---------------- .../UI/Models/StatusUpdatedEventArgs.cs | 17 ++++++++++++++ 3 files changed, 20 insertions(+), 40 deletions(-) delete mode 100644 src/Ryujinx/Headless/StatusUpdatedEventArgs.cs diff --git a/src/Ryujinx/Headless/StatusUpdatedEventArgs.cs b/src/Ryujinx/Headless/StatusUpdatedEventArgs.cs deleted file mode 100644 index 6c76a43a1..000000000 --- a/src/Ryujinx/Headless/StatusUpdatedEventArgs.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; - -namespace Ryujinx.Headless -{ - class StatusUpdatedEventArgs( - string vSyncMode, - string dockedMode, - string aspectRatio, - string gameStatus, - string fifoStatus, - string gpuName) - : EventArgs - { - public string VSyncMode = vSyncMode; - public string DockedMode = dockedMode; - public string AspectRatio = aspectRatio; - public string GameStatus = gameStatus; - public string FifoStatus = fifoStatus; - public string GpuName = gpuName; - } -} diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs index eea01763a..2ce8ad82b 100644 --- a/src/Ryujinx/Headless/Windows/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -1,13 +1,12 @@ using Humanizer; -using LibHac.Tools.Fs; using Ryujinx.Ava; +using Ryujinx.Ava.UI.Models; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; -using Ryujinx.Graphics.Gpu; using Ryujinx.Graphics.OpenGL; using Ryujinx.HLE.HOS.Applets; using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types; @@ -54,8 +53,6 @@ namespace Ryujinx.Headless public Switch Device { get; private set; } public IRenderer Renderer { get; private set; } - public event EventHandler StatusUpdatedEvent; - protected nint WindowHandle { get; set; } public IHostUITheme HostUITheme { get; } @@ -164,6 +161,8 @@ namespace Ryujinx.Headless } } + private StatusUpdatedEventArgs _lastStatus; + private void InitializeWindow() { var activeProcess = Device.Processes.ActiveApplication; @@ -309,21 +308,6 @@ namespace Ryujinx.Headless if (_ticks >= _ticksPerFrame) { - string dockedMode = Device.System.State.DockedMode ? "Docked" : "Handheld"; - float scale = GraphicsConfig.ResScale; - if (scale != 1) - { - dockedMode += $" ({scale}x)"; - } - - StatusUpdatedEvent?.Invoke(this, new StatusUpdatedEventArgs( - Device.VSyncMode.ToString(), - dockedMode, - Device.Configuration.AspectRatio.ToText(), - $"{Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)", - $"FIFO: {Device.Statistics.GetFifoPercent():0.00} %", - $"GPU: {_gpuDriverName}")); - _ticks = Math.Min(_ticks - _ticksPerFrame, _ticksPerFrame); } } diff --git a/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs b/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs index 6f0f5ab5d..9755aad46 100644 --- a/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs +++ b/src/Ryujinx/UI/Models/StatusUpdatedEventArgs.cs @@ -22,5 +22,22 @@ namespace Ryujinx.Ava.UI.Models FifoStatus = fifoStatus; ShaderCount = shaderCount; } + + + public override bool Equals(object obj) + { + if (obj is not StatusUpdatedEventArgs suea) return false; + return + VSyncMode == suea.VSyncMode && + VolumeStatus == suea.VolumeStatus && + DockedMode == suea.DockedMode && + AspectRatio == suea.AspectRatio && + GameStatus == suea.GameStatus && + FifoStatus == suea.FifoStatus && + ShaderCount == suea.ShaderCount; + } + + public override int GetHashCode() + => HashCode.Combine(VSyncMode, VolumeStatus, AspectRatio, DockedMode, FifoStatus, GameStatus, ShaderCount); } } -- 2.47.1 From 4868fface808dfc3a71d032712d782cc3c7c6507 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 15:33:05 -0600 Subject: [PATCH 360/722] UI: Intel Mac warning Upon launch, shows a warning about using an Intel Mac. This will only show once every boot. You can only turn it off by getting a better system. --- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 2aaac4098..5a5fb502e 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Linq; +using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; @@ -136,6 +137,8 @@ namespace Ryujinx.Ava.UI.Windows base.OnApplyTemplate(e); NotificationHelper.SetNotificationManager(this); + + ShowIntelMacWarningAsync(); } private void OnScalingChanged(object sender, EventArgs e) @@ -731,5 +734,22 @@ namespace Ryujinx.Ava.UI.Windows (int)Symbol.Checkmark); }); } + + private static bool _intelMacWarningShown; + + public static async Task ShowIntelMacWarningAsync() + { + if (!_intelMacWarningShown && + (OperatingSystem.IsMacOS() && + (RuntimeInformation.OSArchitecture == Architecture.X64 || + RuntimeInformation.OSArchitecture == Architecture.X86))) + { + _intelMacWarningShown = true; + + await Dispatcher.UIThread.InvokeAsync(async () => await ContentDialogHelper.CreateWarningDialog( + "Intel Mac Warning", + "Intel Macs are not supported and will not work properly.\nIf you continue, do not come to our Discord asking for support.")); + } + } } } -- 2.47.1 From 1bc30bf3badd705bb38800a0af65a9f5481ff16e Mon Sep 17 00:00:00 2001 From: Daenorth Date: Sun, 19 Jan 2025 01:40:51 +0100 Subject: [PATCH 361/722] Update locales.json (#538) Added a missing translation line --- src/Ryujinx/Assets/locales.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index d320c935e..5569506a4 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -22660,7 +22660,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "Sist oppdatert: {0}", "pl_PL": "", "pt_BR": "", "ru_RU": "", @@ -22898,4 +22898,4 @@ } } ] -} \ No newline at end of file +} -- 2.47.1 From ccdddac8fc7838ee09fdff8950371ef85421a4f2 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 19:34:22 -0600 Subject: [PATCH 362/722] Fix compile warnings --- src/Ryujinx/Headless/Windows/WindowBase.cs | 2 -- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs index 2ce8ad82b..7017d1f59 100644 --- a/src/Ryujinx/Headless/Windows/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -161,8 +161,6 @@ namespace Ryujinx.Headless } } - private StatusUpdatedEventArgs _lastStatus; - private void InitializeWindow() { var activeProcess = Device.Processes.ActiveApplication; diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 5a5fb502e..6ac89b06c 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -138,7 +138,7 @@ namespace Ryujinx.Ava.UI.Windows NotificationHelper.SetNotificationManager(this); - ShowIntelMacWarningAsync(); + Executor.ExecuteBackgroundAsync(ShowIntelMacWarningAsync); } private void OnScalingChanged(object sender, EventArgs e) -- 2.47.1 From 52269964b60c0e9cee85b4ca3d658cefe451cabb Mon Sep 17 00:00:00 2001 From: Jacob <38381609+Jacobwasbeast@users.noreply.github.com> Date: Sat, 18 Jan 2025 20:40:33 -0600 Subject: [PATCH 363/722] Add the player select applet. (#537) This introduces the somewhat completed version of the Player Select Applet, allowing users to select either a user or a guest from the UI. Note: Selecting the guest more then once currently does not work. closes https://github.com/Ryubing/Ryujinx/issues/532 --- .../PlayerSelect/PlayerSelectApplet.cs | 44 +++++-- .../Services/Account/Acc/GuestUserImage.jpg | Bin 0 -> 8021 bytes src/Ryujinx.HLE/Ryujinx.HLE.csproj | 1 + src/Ryujinx.HLE/UI/IHostUIHandler.cs | 7 + src/Ryujinx/Headless/Windows/WindowBase.cs | 7 + src/Ryujinx/Ryujinx.csproj | 6 + src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 61 +++++++++ .../UI/Applet/UserSelectorDialog.axaml | 121 +++++++++++++++++ .../UI/Applet/UserSelectorDialog.axaml.cs | 123 ++++++++++++++++++ .../ViewModels/UserSelectorDialogViewModel.cs | 14 ++ 10 files changed, 376 insertions(+), 8 deletions(-) create mode 100644 src/Ryujinx.HLE/HOS/Services/Account/Acc/GuestUserImage.jpg create mode 100644 src/Ryujinx/UI/Applet/UserSelectorDialog.axaml create mode 100644 src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs create mode 100644 src/Ryujinx/UI/ViewModels/UserSelectorDialogViewModel.cs diff --git a/src/Ryujinx.HLE/HOS/Applets/PlayerSelect/PlayerSelectApplet.cs b/src/Ryujinx.HLE/HOS/Applets/PlayerSelect/PlayerSelectApplet.cs index 05bddc76f..cf99b0e7a 100644 --- a/src/Ryujinx.HLE/HOS/Applets/PlayerSelect/PlayerSelectApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/PlayerSelect/PlayerSelectApplet.cs @@ -26,10 +26,20 @@ namespace Ryujinx.HLE.HOS.Applets { _normalSession = normalSession; _interactiveSession = interactiveSession; - - // TODO(jduncanator): Parse PlayerSelectConfig from input data - _normalSession.Push(BuildResponse()); - + + UserProfile selected = _system.Device.UIHandler.ShowPlayerSelectDialog(); + if (selected == null) + { + _normalSession.Push(BuildResponse()); + } + else if (selected.UserId == new UserId("00000000000000000000000000000080")) + { + _normalSession.Push(BuildGuestResponse()); + } + else + { + _normalSession.Push(BuildResponse(selected)); + } AppletStateChanged?.Invoke(this, null); _system.ReturnFocus(); @@ -37,16 +47,34 @@ namespace Ryujinx.HLE.HOS.Applets return ResultCode.Success; } - private byte[] BuildResponse() + private byte[] BuildResponse(UserProfile selectedUser) { - UserProfile currentUser = _system.AccountManager.LastOpenedUser; - using MemoryStream stream = MemoryStreamManager.Shared.GetStream(); using BinaryWriter writer = new(stream); writer.Write((ulong)PlayerSelectResult.Success); - currentUser.UserId.Write(writer); + selectedUser.UserId.Write(writer); + + return stream.ToArray(); + } + + private byte[] BuildGuestResponse() + { + using MemoryStream stream = MemoryStreamManager.Shared.GetStream(); + using BinaryWriter writer = new(stream); + + writer.Write(new byte()); + + return stream.ToArray(); + } + + private byte[] BuildResponse() + { + using MemoryStream stream = MemoryStreamManager.Shared.GetStream(); + using BinaryWriter writer = new(stream); + + writer.Write((ulong)PlayerSelectResult.Failure); return stream.ToArray(); } diff --git a/src/Ryujinx.HLE/HOS/Services/Account/Acc/GuestUserImage.jpg b/src/Ryujinx.HLE/HOS/Services/Account/Acc/GuestUserImage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8310994de5167a3b6696849a127226e0a14b5159 GIT binary patch literal 8021 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 + diff --git a/src/Ryujinx.HLE/UI/IHostUIHandler.cs b/src/Ryujinx.HLE/UI/IHostUIHandler.cs index 88af83735..8ccb5cf89 100644 --- a/src/Ryujinx.HLE/UI/IHostUIHandler.cs +++ b/src/Ryujinx.HLE/UI/IHostUIHandler.cs @@ -1,4 +1,5 @@ using Ryujinx.HLE.HOS.Applets; +using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types; namespace Ryujinx.HLE.UI @@ -59,5 +60,11 @@ namespace Ryujinx.HLE.UI /// Gets fonts and colors used by the host. /// IHostUITheme HostUITheme { get; } + + + /// + /// Displays the player select dialog and returns the selected profile. + /// + UserProfile ShowPlayerSelectDialog(); } } diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs index 7017d1f59..068c32062 100644 --- a/src/Ryujinx/Headless/Windows/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -9,6 +9,7 @@ using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; using Ryujinx.Graphics.OpenGL; using Ryujinx.HLE.HOS.Applets; +using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types; using Ryujinx.HLE.UI; using Ryujinx.Input; @@ -26,6 +27,7 @@ using static SDL2.SDL; using AntiAliasing = Ryujinx.Common.Configuration.AntiAliasing; using ScalingFilter = Ryujinx.Common.Configuration.ScalingFilter; using Switch = Ryujinx.HLE.Switch; +using UserProfile = Ryujinx.HLE.HOS.Services.Account.Acc.UserProfile; namespace Ryujinx.Headless { @@ -555,5 +557,10 @@ namespace Ryujinx.Headless SDL2Driver.Instance.Dispose(); } } + + public UserProfile ShowPlayerSelectDialog() + { + return AccountSaveDataManager.GetLastUsedUser(); + } } } diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 8929ba3eb..8c72d5a3c 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -173,4 +173,10 @@ + + + UserSelectorDialog.axaml + Code + + diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index 65f4c7795..2c63f6af0 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -1,17 +1,24 @@ using Avalonia.Controls; using Avalonia.Threading; using FluentAvalonia.UI.Controls; +using Gommon; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.UI.ViewModels.Input; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Common; using Ryujinx.HLE; using Ryujinx.HLE.HOS.Applets; using Ryujinx.HLE.HOS.Applets.SoftwareKeyboard; +using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types; using Ryujinx.HLE.UI; using System; +using System.Collections.ObjectModel; +using System.Linq; using System.Threading; namespace Ryujinx.Ava.UI.Applet @@ -253,5 +260,59 @@ namespace Ryujinx.Ava.UI.Applet } public IDynamicTextInputHandler CreateDynamicTextInputHandler() => new AvaloniaDynamicTextInputHandler(_parent); + + public UserProfile ShowPlayerSelectDialog() + { + UserId selected = UserId.Null; + byte[] defaultGuestImage = EmbeddedResources.Read("Ryujinx.HLE/HOS/Services/Account/Acc/GuestUserImage.jpg"); + UserProfile guest = new UserProfile(new UserId("00000000000000000000000000000080"), "Guest", defaultGuestImage); + + ManualResetEvent dialogCloseEvent = new(false); + + Dispatcher.UIThread.InvokeAsync(async () => + { + ObservableCollection profiles = []; + NavigationDialogHost nav = new(); + + _parent.AccountManager.GetAllUsers() + .OrderBy(x => x.Name) + .ForEach(profile => profiles.Add(new Models.UserProfile(profile, nav))); + + profiles.Add(new Models.UserProfile(guest, nav)); + UserSelectorDialogViewModel viewModel = new(); + viewModel.Profiles = profiles; + viewModel.SelectedUserId = _parent.AccountManager.LastOpenedUser.UserId; + UserSelectorDialog content = new(viewModel); + (UserId id, _) = await UserSelectorDialog.ShowInputDialog(content); + + selected = id; + + dialogCloseEvent.Set(); + }); + + dialogCloseEvent.WaitOne(); + + UserProfile profile = _parent.AccountManager.LastOpenedUser; + if (selected == guest.UserId) + { + profile = guest; + } + else if (selected == UserId.Null) + { + profile = null; + } + else + { + foreach (UserProfile p in _parent.AccountManager.GetAllUsers()) + { + if (p.UserId == selected) + { + profile = p; + break; + } + } + } + return profile; + } } } diff --git a/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml new file mode 100644 index 000000000..ed22fb088 --- /dev/null +++ b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs new file mode 100644 index 000000000..6e25588ec --- /dev/null +++ b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs @@ -0,0 +1,123 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Input; +using FluentAvalonia.UI.Controls; +using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.Controls; +using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.UI.ViewModels.Input; +using Ryujinx.Common.Logging; +using Ryujinx.HLE.HOS.Services.Account.Acc; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using UserProfile = Ryujinx.Ava.UI.Models.UserProfile; +using UserProfileSft = Ryujinx.HLE.HOS.Services.Account.Acc.UserProfile; + +namespace Ryujinx.Ava.UI.Applet +{ + public partial class UserSelectorDialog : UserControl, INotifyPropertyChanged + { + public UserSelectorDialogViewModel ViewModel { get; set; } + + public UserSelectorDialog(UserSelectorDialogViewModel viewModel) + { + InitializeComponent(); + ViewModel = viewModel; + DataContext = ViewModel; + } + + private void Grid_PointerEntered(object sender, PointerEventArgs e) + { + if (sender is Grid { DataContext: UserProfile profile }) + { + profile.IsPointerOver = true; + } + } + + private void Grid_OnPointerExited(object sender, PointerEventArgs e) + { + if (sender is Grid { DataContext: UserProfile profile }) + { + profile.IsPointerOver = false; + } + } + + private void ProfilesList_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (sender is ListBox listBox) + { + int selectedIndex = listBox.SelectedIndex; + + if (selectedIndex >= 0 && selectedIndex < ViewModel.Profiles.Count) + { + if (ViewModel.Profiles[selectedIndex] is UserProfile userProfile) + { + ViewModel.SelectedUserId = userProfile.UserId; + Logger.Info?.Print(LogClass.UI, $"Selected user: {userProfile.UserId}"); + + ObservableCollection newProfiles = []; + + foreach (var item in ViewModel.Profiles) + { + if (item is UserProfile originalItem) + { + var profile = new UserProfileSft(originalItem.UserId, originalItem.Name, originalItem.Image); + + if (profile.UserId == ViewModel.SelectedUserId) + { + profile.AccountState = AccountState.Open; + } + + newProfiles.Add(new UserProfile(profile, new NavigationDialogHost())); + } + } + + ViewModel.Profiles = newProfiles; + } + } + } + } + + public static async Task<(UserId Id, bool Result)> ShowInputDialog(UserSelectorDialog content) + { + ContentDialog contentDialog = new() + { + Title = LocaleManager.Instance[LocaleKeys.UserProfileWindowTitle], + PrimaryButtonText = LocaleManager.Instance[LocaleKeys.Continue], + SecondaryButtonText = string.Empty, + CloseButtonText = LocaleManager.Instance[LocaleKeys.Cancel], + Content = content, + Padding = new Thickness(0) + }; + + UserId result = UserId.Null; + bool input = false; + + void Handler(ContentDialog sender, ContentDialogClosedEventArgs eventArgs) + { + if (eventArgs.Result == ContentDialogResult.Primary) + { + if (contentDialog.Content is UserSelectorDialog view) + { + result = view.ViewModel.SelectedUserId; + input = true; + } + } + else + { + result = UserId.Null; + input = false; + } + } + + contentDialog.Closed += Handler; + + await ContentDialogHelper.ShowAsync(contentDialog); + + return (result, input); + } + } +} diff --git a/src/Ryujinx/UI/ViewModels/UserSelectorDialogViewModel.cs b/src/Ryujinx/UI/ViewModels/UserSelectorDialogViewModel.cs new file mode 100644 index 000000000..094aed5cf --- /dev/null +++ b/src/Ryujinx/UI/ViewModels/UserSelectorDialogViewModel.cs @@ -0,0 +1,14 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using Ryujinx.HLE.HOS.Services.Account.Acc; +using System.Collections.ObjectModel; + +namespace Ryujinx.Ava.UI.ViewModels +{ + public partial class UserSelectorDialogViewModel : BaseModel + { + + [ObservableProperty] private UserId _selectedUserId; + + [ObservableProperty] private ObservableCollection _profiles = []; + } +} -- 2.47.1 From 25eb545409c06ecfb66a60903888f982c2330860 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 20:55:28 -0600 Subject: [PATCH 364/722] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index ffb5d5f8b..45f233dff 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -22,7 +22,7 @@ body: id: log attributes: label: Log file - description: A log file will help our developers to better diagnose and fix the issue. + description: "A log file will help our developers to better diagnose and fix the issue. UPLOAD THE FILE. DO NOT COPY AND PASTE THE FILE'S CONTENT." placeholder: Logs files can be found under "Logs" folder in Ryujinx program folder. They can also be accessed by opening Ryujinx, then going to File > Open Logs Folder. You can drag and drop the log on to the text area (do not copy paste). validations: required: true -- 2.47.1 From b612fc515572548cb28e6aa5c6747cff148f4ef1 Mon Sep 17 00:00:00 2001 From: Daenorth Date: Sun, 19 Jan 2025 05:19:28 +0100 Subject: [PATCH 365/722] Updated TitleIDs (#541) Added more games to the RPC list. Now alphabetical. --- src/Ryujinx.Common/TitleIDs.cs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx.Common/TitleIDs.cs b/src/Ryujinx.Common/TitleIDs.cs index 43a1f2393..dca634d9d 100644 --- a/src/Ryujinx.Common/TitleIDs.cs +++ b/src/Ryujinx.Common/TitleIDs.cs @@ -1,4 +1,4 @@ -using Gommon; +using Gommon; using Ryujinx.Common.Configuration; using System; using System.Linq; @@ -47,6 +47,9 @@ namespace Ryujinx.Common public static readonly string[] DiscordGameAssetKeys = [ + "010008900705c000", // Dragon Quest Builders + "010042000a986000", // Dragon Quest Builders 2 + "010055d009f78000", // Fire Emblem: Three Houses "0100a12011cc8000", // Fire Emblem: Shadow Dragon "0100a6301214e000", // Fire Emblem Engage @@ -105,17 +108,18 @@ namespace Ryujinx.Common "0100f4c009322000", // Pikmin 3 Deluxe "0100b7c00933a000", // Pikmin 4 + "0100f4300bf2c000", // New Pokémon Snap + "0100000011d90000", // Pokémon Brilliant Diamond + "01001f5010dfa000", // Pokémon Legends: Arceus "010003f003a34000", // Pokémon: Let's Go Pikachu! "0100187003a36000", // Pokémon: Let's Go Eevee! - "0100abf008968000", // Pokémon Sword - "01008db008c2c000", // Pokémon Shield - "0100000011d90000", // Pokémon Brilliant Diamond - "010018e011d92000", // Pokémon Shining Pearl - "01001f5010dfa000", // Pokémon Legends: Arceus + "01003d200baa2000", // Pokémon Mystery Dungeon - Rescue Team DX "0100a3d008c5c000", // Pokémon Scarlet + "01008db008c2c000", // Pokémon Shield + "010018e011d92000", // Pokémon Shining Pearl + "0100abf008968000", // Pokémon Sword "01008f6008c5e000", // Pokémon Violet "0100b3f000be2000", // Pokkén Tournament DX - "0100f4300bf2c000", // New Pokémon Snap "01003bc0000a0000", // Splatoon 2 (US) "0100f8f0000a2000", // Splatoon 2 (EU) @@ -165,13 +169,21 @@ namespace Ryujinx.Common "01005ea01c0fc000", // SONIC X SHADOW GENERATIONS "01005ea01c0fc001", // ^ + "0100ff500e34a000", // Xenoblade Chronicles - Definitive Edition + "0100e95004038000", // Xenoblade Chronicles 2 + "010074f013262000", // Xenoblade Chronicles 3 + "010056e00853a000", // A Hat in Time + "0100fd1014726000", // Baldurs Gate: Dark Alliance "0100dbf01000a000", // Burnout Paradise Remastered "0100744001588000", // Cars 3: Driven to Win "0100b41013c82000", // Cruis'n Blast + "010085900337e000", // Death Squared "01001b300b9be000", // Diablo III: Eternal Collection "01008c8012920000", // Dying Light Platinum Edition "01001cc01b2d4000", // Goat Simulator 3 + "01003620068ea000", // Hand of Fate 2 + "010085500130a000", // Lego City: Undercover "010073c01af34000", // LEGO Horizon Adventures "0100770008dd8000", // Monster Hunter Generations Ultimate "0100b04011742000", // Monster Hunter Rise @@ -190,6 +202,8 @@ namespace Ryujinx.Common "01000a10041ea000", // The Elder Scrolls V: Skyrim "010057a01e4d4000", // TSUKIHIME -A piece of blue glass moon- "010080b00ad66000", // Undertale + "010069401adb8000", // Unicorn Overlord + "0100534009ff2000", // Yonder - The cloud catcher chronicles ]; } } -- 2.47.1 From 2ecf999569f3f39ac2933a81065215b2dfd62b82 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 22:01:17 -0600 Subject: [PATCH 366/722] misc: chore: change ThemeManager ThemeChanged to a basic Action since both arguments are unused --- src/Ryujinx/Common/ThemeManager.cs | 4 ++-- src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx/Common/ThemeManager.cs b/src/Ryujinx/Common/ThemeManager.cs index 8c52c2a66..6da01bfa7 100644 --- a/src/Ryujinx/Common/ThemeManager.cs +++ b/src/Ryujinx/Common/ThemeManager.cs @@ -4,11 +4,11 @@ namespace Ryujinx.Ava.Common { public static class ThemeManager { - public static event EventHandler ThemeChanged; + public static event Action ThemeChanged; public static void OnThemeChanged() { - ThemeChanged?.Invoke(null, EventArgs.Empty); + ThemeChanged?.Invoke(); } } } diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index 979ae8253..10256babe 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Ava.UI.ViewModels ThemeManager.ThemeChanged += ThemeManager_ThemeChanged; } - private void ThemeManager_ThemeChanged(object sender, EventArgs e) + private void ThemeManager_ThemeChanged() { Dispatcher.UIThread.Post(() => UpdateLogoTheme(ConfigurationState.Instance.UI.BaseStyle.Value)); } -- 2.47.1 From 0cdf7cfe21c7f05109e51411c28927f3c6785665 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 18 Jan 2025 22:47:55 -0600 Subject: [PATCH 367/722] UI: Open cheat manager in catch-all try --- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 0885349f8..61dbf3a43 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -43,7 +43,13 @@ namespace Ryujinx.Ava.UI.Views.Main PauseEmulationMenuItem.Command = new RelayCommand(() => ViewModel.AppHost?.Pause()); ResumeEmulationMenuItem.Command = new RelayCommand(() => ViewModel.AppHost?.Resume()); StopEmulationMenuItem.Command = new AsyncRelayCommand(() => ViewModel.AppHost?.ShowExitPrompt().OrCompleted()); - CheatManagerMenuItem.Command = new AsyncRelayCommand(OpenCheatManagerForCurrentApp); + CheatManagerMenuItem.Command = new AsyncRelayCommand(async () => + { + try + { + await OpenCheatManagerForCurrentApp(); + } catch {} + }); InstallFileTypesMenuItem.Command = new AsyncRelayCommand(InstallFileTypes); UninstallFileTypesMenuItem.Command = new AsyncRelayCommand(UninstallFileTypes); XciTrimmerMenuItem.Command = new AsyncRelayCommand(() => XCITrimmerWindow.Show(ViewModel)); -- 2.47.1 From 2616dc57fb937080360977c55359141cad88cf61 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 19 Jan 2025 12:44:07 -0600 Subject: [PATCH 368/722] misc: chore: RelayCommand helper --- src/Ryujinx/UI/Helpers/Commands.cs | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/Ryujinx/UI/Helpers/Commands.cs diff --git a/src/Ryujinx/UI/Helpers/Commands.cs b/src/Ryujinx/UI/Helpers/Commands.cs new file mode 100644 index 000000000..7267ca75a --- /dev/null +++ b/src/Ryujinx/UI/Helpers/Commands.cs @@ -0,0 +1,48 @@ +using CommunityToolkit.Mvvm.Input; +using System; +using System.Threading.Tasks; + +namespace Ryujinx.Ava.UI.Helpers +{ +#nullable enable + public static class Commands + { + public static RelayCommand Create(Action action) + => new(action); + public static RelayCommand CreateConditional(Action action, Func canExecute) + => new(action, canExecute); + + public static RelayCommand CreateWithArg(Action action) + => new(action); + public static RelayCommand CreateConditionalWithArg(Action action, Predicate canExecute) + => new(action, canExecute); + + public static AsyncRelayCommand CreateAsync(Func action) + => new(action, AsyncRelayCommandOptions.None); + public static AsyncRelayCommand CreateConcurrentAsync(Func action) + => new(action, AsyncRelayCommandOptions.AllowConcurrentExecutions); + public static AsyncRelayCommand CreateSilentFailAsync(Func action) + => new(action, AsyncRelayCommandOptions.FlowExceptionsToTaskScheduler); + + public static AsyncRelayCommand CreateWithArgAsync(Func action) + => new(action, AsyncRelayCommandOptions.None); + public static AsyncRelayCommand CreateConcurrentWithArgAsync(Func action) + => new(action, AsyncRelayCommandOptions.AllowConcurrentExecutions); + public static AsyncRelayCommand CreateSilentFailWithArgAsync(Func action) + => new(action, AsyncRelayCommandOptions.FlowExceptionsToTaskScheduler); + + public static AsyncRelayCommand CreateConditionalAsync(Func action, Func canExecute) + => new(action, canExecute, AsyncRelayCommandOptions.None); + public static AsyncRelayCommand CreateConcurrentConditionalAsync(Func action, Func canExecute) + => new(action, canExecute, AsyncRelayCommandOptions.AllowConcurrentExecutions); + public static AsyncRelayCommand CreateSilentFailConditionalAsync(Func action, Func canExecute) + => new(action, canExecute, AsyncRelayCommandOptions.FlowExceptionsToTaskScheduler); + + public static AsyncRelayCommand CreateConditionalWithArgAsync(Func action, Predicate canExecute) + => new(action, canExecute, AsyncRelayCommandOptions.None); + public static AsyncRelayCommand CreateConcurrentConditionalWithArgAsync(Func action, Predicate canExecute) + => new(action, canExecute, AsyncRelayCommandOptions.AllowConcurrentExecutions); + public static AsyncRelayCommand CreateSilentFailConditionalWithArgAsync(Func action, Predicate canExecute) + => new(action, canExecute, AsyncRelayCommandOptions.FlowExceptionsToTaskScheduler); + } +} -- 2.47.1 From f2f099bddb946f785dbb1d2d2857c96d4633b0c8 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 19 Jan 2025 12:46:32 -0600 Subject: [PATCH 369/722] remove Async suffixes; they're factory methods not actual async methods. --- src/Ryujinx/UI/Helpers/Commands.cs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx/UI/Helpers/Commands.cs b/src/Ryujinx/UI/Helpers/Commands.cs index 7267ca75a..df24a7da1 100644 --- a/src/Ryujinx/UI/Helpers/Commands.cs +++ b/src/Ryujinx/UI/Helpers/Commands.cs @@ -17,32 +17,32 @@ namespace Ryujinx.Ava.UI.Helpers public static RelayCommand CreateConditionalWithArg(Action action, Predicate canExecute) => new(action, canExecute); - public static AsyncRelayCommand CreateAsync(Func action) + public static AsyncRelayCommand Create(Func action) => new(action, AsyncRelayCommandOptions.None); - public static AsyncRelayCommand CreateConcurrentAsync(Func action) + public static AsyncRelayCommand CreateConcurrent(Func action) => new(action, AsyncRelayCommandOptions.AllowConcurrentExecutions); - public static AsyncRelayCommand CreateSilentFailAsync(Func action) + public static AsyncRelayCommand CreateSilentFail(Func action) => new(action, AsyncRelayCommandOptions.FlowExceptionsToTaskScheduler); - public static AsyncRelayCommand CreateWithArgAsync(Func action) + public static AsyncRelayCommand CreateWithArg(Func action) => new(action, AsyncRelayCommandOptions.None); - public static AsyncRelayCommand CreateConcurrentWithArgAsync(Func action) + public static AsyncRelayCommand CreateConcurrentWithArg(Func action) => new(action, AsyncRelayCommandOptions.AllowConcurrentExecutions); - public static AsyncRelayCommand CreateSilentFailWithArgAsync(Func action) + public static AsyncRelayCommand CreateSilentFailWithArg(Func action) => new(action, AsyncRelayCommandOptions.FlowExceptionsToTaskScheduler); - public static AsyncRelayCommand CreateConditionalAsync(Func action, Func canExecute) + public static AsyncRelayCommand CreateConditional(Func action, Func canExecute) => new(action, canExecute, AsyncRelayCommandOptions.None); - public static AsyncRelayCommand CreateConcurrentConditionalAsync(Func action, Func canExecute) + public static AsyncRelayCommand CreateConcurrentConditional(Func action, Func canExecute) => new(action, canExecute, AsyncRelayCommandOptions.AllowConcurrentExecutions); - public static AsyncRelayCommand CreateSilentFailConditionalAsync(Func action, Func canExecute) + public static AsyncRelayCommand CreateSilentFailConditional(Func action, Func canExecute) => new(action, canExecute, AsyncRelayCommandOptions.FlowExceptionsToTaskScheduler); - public static AsyncRelayCommand CreateConditionalWithArgAsync(Func action, Predicate canExecute) + public static AsyncRelayCommand CreateConditionalWithArg(Func action, Predicate canExecute) => new(action, canExecute, AsyncRelayCommandOptions.None); - public static AsyncRelayCommand CreateConcurrentConditionalWithArgAsync(Func action, Predicate canExecute) + public static AsyncRelayCommand CreateConcurrentConditionalWithArg(Func action, Predicate canExecute) => new(action, canExecute, AsyncRelayCommandOptions.AllowConcurrentExecutions); - public static AsyncRelayCommand CreateSilentFailConditionalWithArgAsync(Func action, Predicate canExecute) + public static AsyncRelayCommand CreateSilentFailConditionalWithArg(Func action, Predicate canExecute) => new(action, canExecute, AsyncRelayCommandOptions.FlowExceptionsToTaskScheduler); } } -- 2.47.1 From 31e5f74e051618c4085fe605587586f4a115469e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 19 Jan 2025 13:05:20 -0600 Subject: [PATCH 370/722] UI: misc: Replace spaces in Title with newlines when using custom title bar (since the Title is in an Avalonia tooltip) --- src/Ryujinx/AppHost.cs | 6 +++--- src/Ryujinx/Assets/locales.json | 2 +- src/Ryujinx/DiscordIntegrationModule.cs | 3 ++- src/Ryujinx/Utilities/TitleHelper.cs | 6 ++++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index a35a79e86..2642f603b 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -489,7 +489,7 @@ namespace Ryujinx.Ava Dispatcher.UIThread.InvokeAsync(() => { - _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device.Processes.ActiveApplication, Program.Version); + _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowTitleBar); }); _viewModel.SetUiProgressHandlers(Device); @@ -872,7 +872,7 @@ namespace Ryujinx.Ava Device?.System.TogglePauseEmulation(false); _viewModel.IsPaused = false; - _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version); + _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowTitleBar); Logger.Info?.Print(LogClass.Emulation, "Emulation was resumed"); } @@ -881,7 +881,7 @@ namespace Ryujinx.Ava Device?.System.TogglePauseEmulation(true); _viewModel.IsPaused = true; - _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, LocaleManager.Instance[LocaleKeys.Paused]); + _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowTitleBar, LocaleManager.Instance[LocaleKeys.Paused]); Logger.Info?.Print(LogClass.Emulation, "Emulation was paused"); } diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 5569506a4..3940ac93f 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -22898,4 +22898,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs index 040d61ecf..18bdfaf17 100644 --- a/src/Ryujinx/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -2,6 +2,7 @@ using DiscordRPC; using Gommon; using Humanizer; using Humanizer.Localisation; +using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; @@ -97,7 +98,7 @@ namespace Ryujinx.Ava }, Details = TruncateToByteLength($"Playing {appMeta.Title}"), State = appMeta.LastPlayed.HasValue && appMeta.TimePlayed.TotalSeconds > 5 - ? $"Total play time: {appMeta.TimePlayed.Humanize(2, false, maxUnit: TimeUnit.Hour)}" + ? $"Total play time: {ValueFormatUtils.FormatTimeSpan(appMeta.TimePlayed)}" : "Never played", Timestamps = Timestamps.Now }); diff --git a/src/Ryujinx/Utilities/TitleHelper.cs b/src/Ryujinx/Utilities/TitleHelper.cs index be7a87f82..d255838b8 100644 --- a/src/Ryujinx/Utilities/TitleHelper.cs +++ b/src/Ryujinx/Utilities/TitleHelper.cs @@ -4,7 +4,7 @@ namespace Ryujinx.Ava.Utilities { public static class TitleHelper { - public static string ActiveApplicationTitle(ProcessResult activeProcess, string applicationVersion, string pauseString = "") + public static string ActiveApplicationTitle(ProcessResult activeProcess, string applicationVersion, bool customTitlebar, string pauseString = "") { if (activeProcess == null) return string.Empty; @@ -14,7 +14,9 @@ namespace Ryujinx.Ava.Utilities string titleIdSection = $" ({activeProcess.ProgramIdText.ToUpper()})"; string titleArchSection = activeProcess.Is64Bit ? " (64-bit)" : " (32-bit)"; - string appTitle = $"Ryujinx {applicationVersion} -{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}"; + string appTitle = customTitlebar + ? $"Ryujinx {applicationVersion}\n{titleNameSection.Trim()}\n{titleVersionSection.Trim()}\n{titleIdSection.Trim()}{titleArchSection}" + : $"Ryujinx {applicationVersion} -{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}"; return !string.IsNullOrEmpty(pauseString) ? appTitle + $" ({pauseString})" -- 2.47.1 From dd16e3cee15adb6a849460e1d7150cc5f81f0f86 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 19 Jan 2025 13:18:40 -0600 Subject: [PATCH 371/722] misc: chore: very small cleanup in AvaHostUIHandler --- src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index 2c63f6af0..a2cac35c7 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -279,13 +279,13 @@ namespace Ryujinx.Ava.UI.Applet .ForEach(profile => profiles.Add(new Models.UserProfile(profile, nav))); profiles.Add(new Models.UserProfile(guest, nav)); - UserSelectorDialogViewModel viewModel = new(); - viewModel.Profiles = profiles; - viewModel.SelectedUserId = _parent.AccountManager.LastOpenedUser.UserId; + UserSelectorDialogViewModel viewModel = new() + { + Profiles = profiles, + SelectedUserId = _parent.AccountManager.LastOpenedUser.UserId + }; UserSelectorDialog content = new(viewModel); - (UserId id, _) = await UserSelectorDialog.ShowInputDialog(content); - - selected = id; + (selected, _) = await UserSelectorDialog.ShowInputDialog(content); dialogCloseEvent.Set(); }); -- 2.47.1 From e676fd8b17c7bc89ebeaff07d4a316e662ea57ae Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 19 Jan 2025 14:42:15 -0600 Subject: [PATCH 372/722] UI: misc: simplify Intel Mac warning logic --- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 6ac89b06c..7d1b5e590 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -735,21 +735,19 @@ namespace Ryujinx.Ava.UI.Windows }); } - private static bool _intelMacWarningShown; + private static bool _intelMacWarningShown = !(OperatingSystem.IsMacOS() && + (RuntimeInformation.OSArchitecture == Architecture.X64 || + RuntimeInformation.OSArchitecture == Architecture.X86)); public static async Task ShowIntelMacWarningAsync() { - if (!_intelMacWarningShown && - (OperatingSystem.IsMacOS() && - (RuntimeInformation.OSArchitecture == Architecture.X64 || - RuntimeInformation.OSArchitecture == Architecture.X86))) - { - _intelMacWarningShown = true; + if (_intelMacWarningShown) return; + + await Dispatcher.UIThread.InvokeAsync(async () => await ContentDialogHelper.CreateWarningDialog( + "Intel Mac Warning", + "Intel Macs are not supported and will not work properly.\nIf you continue, do not come to our Discord asking for support;\nand do not report bugs on the GitHub. They will be closed.")); - await Dispatcher.UIThread.InvokeAsync(async () => await ContentDialogHelper.CreateWarningDialog( - "Intel Mac Warning", - "Intel Macs are not supported and will not work properly.\nIf you continue, do not come to our Discord asking for support.")); - } + _intelMacWarningShown = true; } } } -- 2.47.1 From 7fcd9b792eb81518bcb142f0e9789f489b84cade Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 19 Jan 2025 17:41:31 -0600 Subject: [PATCH 373/722] UI: Compat: Update owned game title IDs when ApplicationLibrary app count updates --- .../Compat/CompatibilityViewModel.cs | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs b/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs index 4bd97cc35..76f1457a8 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs @@ -1,19 +1,18 @@ using CommunityToolkit.Mvvm.ComponentModel; -using ExCSS; using Gommon; +using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Utilities.AppLibrary; using System.Collections.Generic; using System.Linq; namespace Ryujinx.Ava.Utilities.Compat { - public partial class CompatibilityViewModel : ObservableObject + public class CompatibilityViewModel : BaseModel { - [ObservableProperty] private bool _onlyShowOwnedGames = true; + private bool _onlyShowOwnedGames = true; private IEnumerable _currentEntries = CompatibilityCsv.Entries; - private readonly string[] _ownedGameTitleIds = []; - private readonly ApplicationLibrary _appLibrary; + private string[] _ownedGameTitleIds = []; public IEnumerable CurrentEntries => OnlyShowOwnedGames ? _currentEntries.Where(x => @@ -24,14 +23,23 @@ namespace Ryujinx.Ava.Utilities.Compat public CompatibilityViewModel(ApplicationLibrary appLibrary) { - _appLibrary = appLibrary; + appLibrary.ApplicationCountUpdated += (_, _) + => _ownedGameTitleIds = appLibrary.Applications.Keys.Select(x => x.ToString("X16")).ToArray(); + _ownedGameTitleIds = appLibrary.Applications.Keys.Select(x => x.ToString("X16")).ToArray(); + } - PropertyChanged += (_, args) => + public bool OnlyShowOwnedGames + { + get => _onlyShowOwnedGames; + set { - if (args.PropertyName is nameof(OnlyShowOwnedGames)) - OnPropertyChanged(nameof(CurrentEntries)); - }; + OnPropertyChanging(); + OnPropertyChanging(nameof(CurrentEntries)); + _onlyShowOwnedGames = value; + OnPropertyChanged(); + OnPropertyChanged(nameof(CurrentEntries)); + } } public void Search(string searchTerm) -- 2.47.1 From 6482e566abc065c5a03cb39e355124b97a73e819 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 19 Jan 2025 17:41:50 -0600 Subject: [PATCH 374/722] UI: Compat: Unload compatibility entries when the window closes. --- .../Utilities/Compat/CompatibilityCsv.cs | 26 ++++++++++++++++--- .../Compat/CompatibilityList.axaml.cs | 5 ++-- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index 21b1f503c..7c8e6909c 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -28,7 +28,9 @@ namespace Ryujinx.Ava.Utilities.Compat public class CompatibilityCsv { - static CompatibilityCsv() + static CompatibilityCsv() => Load(); + + public static void Load() { using Stream csvStream = Assembly.GetExecutingAssembly() .GetManifestResourceStream("RyujinxGameCompatibilityList")!; @@ -37,15 +39,31 @@ namespace Ryujinx.Ava.Utilities.Compat using SepReader reader = Sep.Reader().From(csvStream); ColumnIndices columnIndices = new(reader.Header.IndexOf); - Entries = reader + _entries = reader .Enumerate(row => new CompatibilityEntry(ref columnIndices, row)) .OrderBy(it => it.GameName) .ToArray(); - Logger.Debug?.Print(LogClass.UI, "Compatibility CSV loaded.", "LoadCompatCsv"); + Logger.Debug?.Print(LogClass.UI, "Compatibility CSV loaded.", "LoadCompatibility"); } - public static CompatibilityEntry[] Entries { get; private set; } + public static void Unload() + { + _entries = null; + } + + private static CompatibilityEntry[] _entries; + + public static CompatibilityEntry[] Entries + { + get + { + if (_entries == null) + Load(); + + return _entries; + } + } } public class CompatibilityEntry diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs index 841db23a8..7fc48b187 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -1,11 +1,8 @@ using Avalonia.Controls; using Avalonia.Styling; using FluentAvalonia.UI.Controls; -using nietras.SeparatedValues; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; -using System.IO; -using System.Reflection; using System.Threading.Tasks; namespace Ryujinx.Ava.Utilities.Compat @@ -35,6 +32,8 @@ namespace Ryujinx.Ava.Utilities.Compat contentDialog.Styles.Add(closeButtonParent); await ContentDialogHelper.ShowAsync(contentDialog); + + CompatibilityCsv.Unload(); } public CompatibilityList() -- 2.47.1 From 4f014a89cffe54b634c4646620dcb5c9dc224a73 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 19 Jan 2025 18:28:43 -0600 Subject: [PATCH 375/722] docs: compat: Donkey Kong Country Returns HD --- docs/compatibility.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 44a8188a1..88deb2f2b 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -965,6 +965,7 @@ 0100C4D00B608000,"Don't Sink",gpu,ingame,2021-02-26 15:41:11 0100751007ADA000,"Don't Starve: Nintendo Switch Edition",nvdec,playable,2022-02-05 20:43:34 010088B010DD2000,"Dongo Adventure",,playable,2022-10-04 16:22:26 +01009D901BC56000,"Donkey Kong Country™ Returns HD",gpu;crashes,ingame,2025-01-19 18:26:53 0100C1F0051B6000,"Donkey Kong Country™: Tropical Freeze",,playable,2024-08-05 16:46:10 0100F2C00F060000,"Doodle Derby",,boots,2020-12-04 22:51:48 0100416004C00000,"DOOM",gpu;slow;nvdec;online-broken,ingame,2024-09-23 15:40:07 -- 2.47.1 From 09446fd80e17d7e13e6c10d8c34d97ae57025a55 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 19 Jan 2025 18:57:05 -0600 Subject: [PATCH 376/722] [ci skip] infra: Update copyright year in shortcut plist --- distribution/macos/shortcut-template.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/macos/shortcut-template.plist b/distribution/macos/shortcut-template.plist index 27a9e46a9..c6368a08f 100644 --- a/distribution/macos/shortcut-template.plist +++ b/distribution/macos/shortcut-template.plist @@ -19,7 +19,7 @@ CSResourcesFileMapped NSHumanReadableCopyright - Copyright © 2018 - 2023 Ryujinx Team and Contributors. + Copyright © 2018 - 2025 Ryujinx Team and Contributors. LSApplicationCategoryType public.app-category.games LSMinimumSystemVersion -- 2.47.1 From bbd64fd5f06db51cbcdbbe5aa33f40bd3ffb093e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 19 Jan 2025 19:40:49 -0600 Subject: [PATCH 377/722] misc: chore: Cleanup AppletMetadata usage --- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 1 - src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs | 12 ++++++------ src/Ryujinx/Utilities/AppletMetadata.cs | 4 ++++ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 17b9ea98c..f88ed65d0 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -38,7 +38,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; using Ryujinx.HLE.UI; using Ryujinx.Input.HLE; -using Silk.NET.Vulkan; using SkiaSharp; using System; using System.Collections.Generic; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 61dbf3a43..521460012 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -144,14 +144,14 @@ namespace Ryujinx.Ava.UI.Views.Main ViewModel.LoadConfigurableHotKeys(); } - public static readonly AppletMetadata MiiApplet = new("miiEdit", 0x0100000000001009); - + public AppletMetadata MiiApplet => new(ViewModel.ContentManager, "miiEdit", 0x0100000000001009); + public async Task OpenMiiApplet() { - if (MiiApplet.CanStart(ViewModel.ContentManager, out var appData, out var nacpData)) - { - await ViewModel.LoadApplication(appData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen, nacpData); - } + if (!MiiApplet.CanStart(out var appData, out var nacpData)) + return; + + await ViewModel.LoadApplication(appData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen, nacpData); } public async Task OpenCheatManagerForCurrentApp() diff --git a/src/Ryujinx/Utilities/AppletMetadata.cs b/src/Ryujinx/Utilities/AppletMetadata.cs index 42c23ee12..a165487a3 100644 --- a/src/Ryujinx/Utilities/AppletMetadata.cs +++ b/src/Ryujinx/Utilities/AppletMetadata.cs @@ -54,5 +54,9 @@ namespace Ryujinx.Ava.Utilities appControl = new BlitStruct(0); return false; } + + public bool CanStart(out ApplicationData appData, + out BlitStruct appControl) + => CanStart(null, out appData, out appControl); } } -- 2.47.1 From 290ac405accbcb0797f3857a6fa6136298e867fc Mon Sep 17 00:00:00 2001 From: Daenorth Date: Mon, 20 Jan 2025 04:00:40 +0100 Subject: [PATCH 378/722] Updated Ukrainian translation by Rondo (#543) Co-authored-by: rrondo <46533574+rrondo@users.noreply.github.com> --- src/Ryujinx/Assets/locales.json | 298 ++++++++++++++++---------------- 1 file changed, 149 insertions(+), 149 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 3940ac93f..49ee5a01d 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -92,7 +92,7 @@ "sv_SE": "Redigera Mii-applet", "th_TH": "", "tr_TR": "", - "uk_UA": "Аплет для редагування Mii", + "uk_UA": "Аплет редагування Mii", "zh_CN": "Mii 小程序", "zh_TW": "Mii 編輯器小程式" } @@ -742,7 +742,7 @@ "sv_SE": "Skanna en Amiibo (från bin-fil)", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Сканувати Amiibo (з теки Bin)", "zh_CN": "从bin文件扫描 Amiibo", "zh_TW": "掃瞄 Amiibo (從 Bin 檔案)" } @@ -792,7 +792,7 @@ "sv_SE": "Installera firmware", "th_TH": "ติดตั้งเฟิร์มแวร์", "tr_TR": "Yazılım Yükle", - "uk_UA": "Установити прошивку", + "uk_UA": "Встановити прошивку (Firmware)", "zh_CN": "安装系统固件", "zh_TW": "安裝韌體" } @@ -817,7 +817,7 @@ "sv_SE": "Installera en firmware från XCI eller ZIP", "th_TH": "ติดตั้งเฟิร์มแวร์จาก ไฟล์ XCI หรือ ไฟล์ ZIP", "tr_TR": "XCI veya ZIP'ten Yazılım Yükle", - "uk_UA": "Установити прошивку з XCI або ZIP", + "uk_UA": "Встановити прошивку з XCI або ZIP", "zh_CN": "从 XCI 或 ZIP 文件中安装系统固件", "zh_TW": "從 XCI 或 ZIP 安裝韌體" } @@ -842,7 +842,7 @@ "sv_SE": "Installera en firmware från en katalog", "th_TH": "ติดตั้งเฟิร์มแวร์จากไดเร็กทอรี", "tr_TR": "Bir Dizin Üzerinden Yazılım Yükle", - "uk_UA": "Установити прошивку з теки", + "uk_UA": "Встановити прошивку з теки", "zh_CN": "从文件夹中安装系统固件", "zh_TW": "從資料夾安裝韌體" } @@ -867,7 +867,7 @@ "sv_SE": "Installera nycklar", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Встановити ключі", "zh_CN": "安装密匙", "zh_TW": "安裝金鑰" } @@ -892,7 +892,7 @@ "sv_SE": "Installera nycklar från KEYS eller ZIP", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Встановити ключі з файлу .KEYS або .ZIP", "zh_CN": "从.KEYS文件或ZIP压缩包安装密匙", "zh_TW": "從 .KEYS 或 .ZIP 安裝金鑰" } @@ -917,7 +917,7 @@ "sv_SE": "Installera nycklar från en katalog", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Встановити ключі з теки", "zh_CN": "从一个文件夹安装密匙", "zh_TW": "從資料夾安裝金鑰" } @@ -967,7 +967,7 @@ "sv_SE": "Installera filtyper", "th_TH": "ติดตั้งประเภทไฟล์", "tr_TR": "Dosya uzantılarını yükle", - "uk_UA": "Установити типи файлів", + "uk_UA": "Встановити типи файлів", "zh_CN": "关联文件扩展名", "zh_TW": "安裝檔案類型" } @@ -1242,7 +1242,7 @@ "sv_SE": "Frågor, svar och guider", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "FAQ та посібники", "zh_CN": "问答与指南", "zh_TW": "常見問題 (FAQ) 和指南" } @@ -1267,7 +1267,7 @@ "sv_SE": "Frågor, svar och felsökningssida", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "FAQ та усунення несправностей (eng)", "zh_CN": "常见问题和问题排除页面", "zh_TW": "常見問題 (FAQ) 和疑難排解頁面" } @@ -1292,7 +1292,7 @@ "sv_SE": "Öppnar Frågor, svar och felsökningssidan på den officiella Ryujinx-wikin", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Відкриває сторінку з Посібником по усуненню помилок та несправностей на офіційній вікі-сторінці Ryujinx (англійською)", "zh_CN": "打开Ryujinx官方wiki的常见问题和问题排除页面", "zh_TW": "開啟官方 Ryujinx Wiki 常見問題 (FAQ) 和疑難排解頁面" } @@ -1317,7 +1317,7 @@ "sv_SE": "Konfigurationsguide", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Посібник зі встановлення та налаштування (eng)", "zh_CN": "安装与配置指南", "zh_TW": "設定和配置指南" } @@ -1342,7 +1342,7 @@ "sv_SE": "Öppnar konfigurationsguiden på den officiella Ryujinx-wikin", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Відкриває посібник з Налаштування та конфігурації на офіційній вікі-сторінці Ryujinx (англійською)", "zh_CN": "打开Ryujinx官方wiki的安装与配置指南", "zh_TW": "開啟官方 Ryujinx Wiki 設定和配置指南" } @@ -1367,7 +1367,7 @@ "sv_SE": "Flerspelarguide (LDN/LAN)", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Посібник з мультиплеєру (LDN/LAN) (eng)", "zh_CN": "多人游戏(LDN/LAN)指南", "zh_TW": "多人遊戲 (LDN/LAN) 指南" } @@ -1392,7 +1392,7 @@ "sv_SE": "Öppnar flerspelarguiden på den officiella Ryujinx-wikin", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Відкриває посібник з налаштування Мультиплеєру на офіційній вікі-сторінці Ryujinx (англійською)", "zh_CN": "打开Ryujinx官方wiki的多人游戏指南", "zh_TW": "開啟官方 Ryujinx Wiki 多人遊戲 (LDN/LAN) 指南" } @@ -1717,7 +1717,7 @@ "sv_SE": "Öppna användarkatalog för sparningar", "th_TH": "เปิดไดเร็กทอรี่บันทึกของผู้ใช้", "tr_TR": "Kullanıcı Kayıt Dosyası Dizinini Aç", - "uk_UA": "Відкрити теку збереження користувача", + "uk_UA": "Відкрити теку збережень користувача", "zh_CN": "打开用户存档目录", "zh_TW": "開啟使用者存檔資料夾" } @@ -1742,7 +1742,7 @@ "sv_SE": "Öppnar katalogen som innehåller applikationens användarsparade spel", "th_TH": "เปิดไดเร็กทอรี่ซึ่งมีการบันทึกข้อมูลของผู้ใช้แอปพลิเคชัน", "tr_TR": "Uygulamanın Kullanıcı Kaydı'nın bulunduğu dizini açar", - "uk_UA": "Відкриває каталог, який містить збереження користувача програми", + "uk_UA": "Відкриває теку, яка містить збереження користувача", "zh_CN": "打开储存游戏用户存档的目录", "zh_TW": "開啟此應用程式的使用者存檔資料夾" } @@ -1767,7 +1767,7 @@ "sv_SE": "Öppna enhetens katalog för sparade spel", "th_TH": "เปิดไดเร็กทอรี่บันทึกของอุปกรณ์", "tr_TR": "Kullanıcı Cihaz Dizinini Aç", - "uk_UA": "Відкрити каталог пристроїв користувача", + "uk_UA": "Відкрити теку пристроїв користувача", "zh_CN": "打开系统数据目录", "zh_TW": "開啟裝置存檔資料夾" } @@ -1792,7 +1792,7 @@ "sv_SE": "Öppnar katalogen som innehåller applikationens sparade spel på enheten", "th_TH": "เปิดไดเรกทอรี่ซึ่งมีบันทึกข้อมูลของอุปกรณ์ในแอปพลิเคชัน", "tr_TR": "Uygulamanın Kullanıcı Cihaz Kaydı'nın bulunduğu dizini açar", - "uk_UA": "Відкриває каталог, який містить збереження пристрою програми", + "uk_UA": "Відкриває теку, яка містить збережені пристрої", "zh_CN": "打开储存游戏系统数据的目录", "zh_TW": "開啟此應用程式的裝置存檔資料夾" } @@ -1817,7 +1817,7 @@ "sv_SE": "Öppna katalog för BCAT-sparningar", "th_TH": "เปิดไดเรกทอรี่บันทึกของ BCAT", "tr_TR": "Kullanıcı BCAT Dizinini Aç", - "uk_UA": "Відкрити каталог користувача BCAT", + "uk_UA": "Відкрити теку збережень BCAT", "zh_CN": "打开 BCAT 数据目录", "zh_TW": "開啟 BCAT 存檔資料夾" } @@ -1842,7 +1842,7 @@ "sv_SE": "Öppnar katalogen som innehåller applikationens BCAT-sparningar", "th_TH": "เปิดไดเรกทอรี่ซึ่งมีการบันทึกข้อมูลของ BCAT ในแอปพลิเคชัน", "tr_TR": "Uygulamanın Kullanıcı BCAT Kaydı'nın bulunduğu dizini açar", - "uk_UA": "Відкриває каталог, який містить BCAT-збереження програми", + "uk_UA": "Відкриває теку, яка містить BCAT-збереження програми", "zh_CN": "打开储存游戏 BCAT 数据的目录", "zh_TW": "開啟此應用程式的 BCAT 存檔資料夾" } @@ -1867,7 +1867,7 @@ "sv_SE": "Hantera speluppdateringar", "th_TH": "จัดการเวอร์ชั่นอัปเดต", "tr_TR": "Oyun Güncellemelerini Yönet", - "uk_UA": "Керування оновленнями заголовків", + "uk_UA": "Керування оновленнями", "zh_CN": "管理游戏更新", "zh_TW": "管理遊戲更新" } @@ -1892,7 +1892,7 @@ "sv_SE": "Öppnar spelets hanteringsfönster för uppdateringar", "th_TH": "เปิดหน้าต่างการจัดการเวอร์ชั่นการอัพเดต", "tr_TR": "Oyun Güncelleme Yönetim Penceresini Açar", - "uk_UA": "Відкриває вікно керування оновленням заголовка", + "uk_UA": "Відкриває меню керування оновленнями до гри (застосунку)", "zh_CN": "打开游戏更新管理窗口", "zh_TW": "開啟遊戲更新管理視窗" } @@ -1942,7 +1942,7 @@ "sv_SE": "Öppnar DLC-hanteringsfönstret", "th_TH": "เปิดหน้าต่างจัดการ DLC", "tr_TR": "DLC yönetim penceresini açar", - "uk_UA": "Відкриває вікно керування DLC", + "uk_UA": "Відкриває меню керування DLC", "zh_CN": "打开 DLC 管理窗口", "zh_TW": "開啟 DLC 管理視窗" } @@ -1992,7 +1992,7 @@ "sv_SE": "Kölägg PPTC Rebuild", "th_TH": "เพิ่มคิวการสร้าง PPTC ใหม่", "tr_TR": "PPTC Yeniden Yapılandırmasını Başlat", - "uk_UA": "Очистити кеш PPTC", + "uk_UA": "Додати до черги перекомпіляцію PPTC", "zh_CN": "清除 PPTC 缓存文件", "zh_TW": "佇列 PPTC 重建" } @@ -2017,7 +2017,7 @@ "sv_SE": "Gör så att PPTC bygger om vid uppstart när nästa spel startas", "th_TH": "ให้ PPTC สร้างใหม่ในเวลาบูตเมื่อเปิดเกมครั้งถัดไป", "tr_TR": "Oyunun bir sonraki açılışında PPTC'yi yeniden yapılandır", - "uk_UA": "Видаляє кеш PPTC програми", + "uk_UA": "Видаляє кеш PPTC застосунку (гри)", "zh_CN": "删除游戏的 PPTC 缓存文件,下次启动游戏时重新编译生成 PPTC 缓存文件", "zh_TW": "下一次啟動遊戲時,觸發 PPTC 進行重建" } @@ -2067,7 +2067,7 @@ "sv_SE": "Tar bort applikationens shader cache", "th_TH": "ลบแคช แสงเงา ของแอปพลิเคชัน", "tr_TR": "Uygulamanın shader önbelleğini temizler", - "uk_UA": "Видаляє кеш шейдерів програми", + "uk_UA": "Видаляє кеш шейдерів застосунку (гри)", "zh_CN": "删除游戏的着色器缓存文件,下次启动游戏时重新生成着色器缓存文件", "zh_TW": "刪除應用程式的著色器快取" } @@ -2092,7 +2092,7 @@ "sv_SE": "Öppna PPTC-katalog", "th_TH": "เปิดไดเรกทอรี่ PPTC", "tr_TR": "PPTC Dizinini Aç", - "uk_UA": "Відкрити каталог PPTC", + "uk_UA": "Відкрити теку PPTC", "zh_CN": "打开 PPTC 缓存目录", "zh_TW": "開啟 PPTC 資料夾" } @@ -2117,7 +2117,7 @@ "sv_SE": "Öppnar katalogen som innehåller applikationens PPTC-cache", "th_TH": "เปิดไดเร็กทอรี่ของ แคช PPTC ในแอปพลิเคชัน", "tr_TR": "Uygulamanın PPTC Önbelleğinin bulunduğu dizini açar", - "uk_UA": "Відкриває каталог, який містить кеш PPTC програми", + "uk_UA": "Відкриває теку, яка містить PPTC кеш застосунку (гри)", "zh_CN": "打开储存游戏 PPTC 缓存文件的目录", "zh_TW": "開啟此應用程式的 PPTC 快取資料夾" } @@ -2142,7 +2142,7 @@ "sv_SE": "Öppna katalog för shader cache", "th_TH": "เปิดไดเรกทอรี่ แคช แสงเงา", "tr_TR": "Shader Önbelleği Dizinini Aç", - "uk_UA": "Відкрити каталог кешу шейдерів", + "uk_UA": "Відкрити теку з кешем шейдерів", "zh_CN": "打开着色器缓存目录", "zh_TW": "開啟著色器快取資料夾" } @@ -2167,7 +2167,7 @@ "sv_SE": "Öppnar katalogen som innehåller applikationens shader cache", "th_TH": "เปิดไดเรกทอรี่ของ แคช แสงเงา ในแอปพลิเคชัน", "tr_TR": "Uygulamanın shader önbelleğinin bulunduğu dizini açar", - "uk_UA": "Відкриває каталог, який містить кеш шейдерів програми", + "uk_UA": "Відкриває теку, яка містить кеш шейдерів застосунку (гри)", "zh_CN": "打开储存游戏着色器缓存文件的目录", "zh_TW": "開啟此應用程式的著色器快取資料夾" } @@ -2292,7 +2292,7 @@ "sv_SE": "Extrahera RomFS-sektionen från applikationens aktuella konfiguration (inkl uppdateringar)", "th_TH": "แยกส่วน RomFS ออกจากการตั้งค่าปัจจุบันของแอปพลิเคชัน (รวมถึงอัพเดต)", "tr_TR": "Uygulamanın geçerli yapılandırmasından RomFS kısmını ayıkla (Güncellemeler dahil)", - "uk_UA": "Видобуває розділ RomFS із поточної конфігурації програми (включаючи оновлення)", + "uk_UA": "Видобуває розділ RomFS із поточної конфігурації застосунку (включно з оновленнями)", "zh_CN": "从游戏的当前状态中提取 RomFS 分区 (包括更新)", "zh_TW": "從應用程式的目前配置中提取 RomFS 分區 (包含更新)" } @@ -2392,7 +2392,7 @@ "sv_SE": "Skapa en skrivbordsgenväg som startar vald applikation", "th_TH": "สร้างทางลัดบนเดสก์ท็อปสำหรับใช้แอปพลิเคชันที่เลือก", "tr_TR": "Seçilmiş uygulamayı çalıştıracak bir masaüstü kısayolu oluştur", - "uk_UA": "Створити ярлик на робочому столі, який запускає вибраний застосунок", + "uk_UA": "Створити ярлик на робочому столі, який запускатиме вибраний застосунок (гру)", "zh_CN": "创建一个直接启动此游戏的桌面快捷方式", "zh_TW": "建立桌面捷徑,啟動選取的應用程式" } @@ -2417,7 +2417,7 @@ "sv_SE": "Skapa en genväg i macOS-programmapp som startar vald applikation", "th_TH": "สร้างทางลัดในโฟลเดอร์ Applications ของ macOS สำหรับใช้แอปพลิเคชันที่เลือก", "tr_TR": "", - "uk_UA": "Створити ярлик у каталозі macOS програм, що запускає обраний Додаток", + "uk_UA": "Створити ярлик у каталозі програм macOS, що запускатиме обраний застосунок (гру)", "zh_CN": "在 macOS 的应用程序目录中创建一个直接启动此游戏的快捷方式", "zh_TW": "在 macOS 的應用程式資料夾中建立捷徑,啟動選取的應用程式" } @@ -2467,7 +2467,7 @@ "sv_SE": "Öppnar katalogen som innehåller applikationens Mods", "th_TH": "เปิดไดเร็กทอรี่ Mods ของแอปพลิเคชัน", "tr_TR": "", - "uk_UA": "Відкриває каталог, який містить модифікації Додатків", + "uk_UA": "Відкриває теку, яка містить модифікації застосунків (ігор)", "zh_CN": "打开存放游戏 MOD 的目录", "zh_TW": "開啟此應用程式模組的資料夾" } @@ -2492,7 +2492,7 @@ "sv_SE": "Öppna Atmosphere Mods-katalogen", "th_TH": "เปิดไดเร็กทอรี่ Mods Atmosphere", "tr_TR": "", - "uk_UA": "Відкрити каталог модифікацій Atmosphere", + "uk_UA": "Відкрити теку модифікацій Atmosphere", "zh_CN": "打开大气层系统 MOD 目录", "zh_TW": "開啟 Atmosphere 模組資料夾" } @@ -2517,7 +2517,7 @@ "sv_SE": "Öppnar den alternativa Atmosphere-katalogen på SD-kort som innehåller applikationens Mods. Användbart för Mods som är paketerade för riktig hårdvara.", "th_TH": "เปิดไดเร็กทอรี่ Atmosphere ของการ์ด SD สำรองซึ่งมี Mods ของแอปพลิเคชัน ซึ่งมีประโยชน์สำหรับ Mods ที่บรรจุมากับฮาร์ดแวร์จริง", "tr_TR": "", - "uk_UA": "Відкриває альтернативний каталог SD-карти Atmosphere, що містить модифікації Додатків. Корисно для модифікацій, зроблених для реального обладнання.", + "uk_UA": "Відкриває альтернативну теку SD-карти Atmosphere, що містить модифікації до застосунків або ігор. Корисно для модифікацій, зроблених для реального обладнання.", "zh_CN": "打开存放适用于大气层系统的游戏 MOD 的目录,对于为真实硬件打包的 MOD 非常有用", "zh_TW": "開啟此應用程式模組的另一個 SD 卡 Atmosphere 資料夾。適用於為真實硬體封裝的模組。" } @@ -2542,7 +2542,7 @@ "sv_SE": "Kontrollera och optimera XCI-fil", "th_TH": "", "tr_TR": "", - "uk_UA": "Перевірка та Нарізка XCI Файлів", + "uk_UA": "Перевірка та нарізка XCI Файлу", "zh_CN": "检查并瘦身XCI文件", "zh_TW": "檢查及修剪 XCI 檔案" } @@ -2567,7 +2567,7 @@ "sv_SE": "Kontrollera och optimera XCI-fil för att spara diskutrymme", "th_TH": "", "tr_TR": "", - "uk_UA": "Перевірка та Нарізка XCI Файлів для збереження місця на диску", + "uk_UA": "Перевірити та обрізати XCI Файл задля збереження місця на диску", "zh_CN": "检查并瘦身XCI文件以节约磁盘空间", "zh_TW": "檢查及修剪 XCI 檔案以節省儲存空間" } @@ -2617,7 +2617,7 @@ "sv_SE": "Firmware-version: {0}", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Версія прошивки: {0}", "zh_CN": "系统固件版本:{0}", "zh_TW": "系統韌體版本: {0}" } @@ -2642,7 +2642,7 @@ "sv_SE": "Optimerar XCI-filen '{0}'", "th_TH": "", "tr_TR": "", - "uk_UA": "Обрізано XCI Файлів '{0}'", + "uk_UA": "Обрізається XCI Файлів '{0}'", "zh_CN": "XCI文件瘦身中'{0}'", "zh_TW": "正在修剪 XCI 檔案 '{0}'" } @@ -2692,7 +2692,7 @@ "sv_SE": "Vill du öka värdet för vm.max_map_count till {0}", "th_TH": "คุณต้องเพิ่มค่า vm.max_map_count ไปยัง {0}", "tr_TR": "vm.max_map_count değerini {0} sayısına yükseltmek ister misiniz", - "uk_UA": "Бажаєте збільшити значення vm.max_map_count на {0}", + "uk_UA": "Бажаєте збільшити значення vm.max_map_count до {0}", "zh_CN": "你想要将操作系统 vm.max_map_count 的值增加到 {0} 吗", "zh_TW": "您是否要將 vm.max_map_count 的數值增至 {0}?" } @@ -2717,7 +2717,7 @@ "sv_SE": "Vissa spel kan försöka att skapa fler minnesmappningar än vad som tillåts. Ryujinx kommer att krascha så snart som denna gräns överstigs.", "th_TH": "บางเกมอาจพยายามใช้งานหน่วยความจำมากกว่าที่ได้รับอนุญาตในปัจจุบัน Ryujinx จะปิดตัวลงเมื่อเกินขีดจำกัดนี้", "tr_TR": "Bazı oyunlar şu an izin verilen bellek haritası limitinden daha fazlasını yaratmaya çalışabilir. Ryujinx bu limitin geçildiği takdirde kendini kapatıcaktır.", - "uk_UA": "Деякі ігри можуть спробувати створити більше відображень памʼяті, ніж дозволено наразі. Ryujinx завершить роботу, щойно цей ліміт буде перевищено.", + "uk_UA": "Деякі ігри можуть спробувати створити більше відображень памʼяті, ніж це дозволено зараз. Ryujinx закриється (крашнеться), щойно цей ліміт буде перевищено.", "zh_CN": "有些游戏可能会尝试创建超过当前系统允许的内存映射最大数量,若超过当前最大数量,Ryujinx 模拟器将会闪退。", "zh_TW": "某些遊戲可能會嘗試建立超過目前允許的記憶體映射。一旦超過此限制,Ryujinx 就會崩潰。" } @@ -2767,7 +2767,7 @@ "sv_SE": "Ja, permanent", "th_TH": "ใช่, อย่างถาวร", "tr_TR": "Evet, kalıcı olarak", - "uk_UA": "Так, назавжди", + "uk_UA": "Так, постійно", "zh_CN": "确定,永久保存", "zh_TW": "是的,永久設定" } @@ -2792,7 +2792,7 @@ "sv_SE": "Maximal mängd minnesmappningar är lägre än rekommenderat.", "th_TH": "จำนวนสูงสุดของการจัดการหน่วยความจำ ต่ำกว่าที่แนะนำ", "tr_TR": "İzin verilen maksimum bellek haritası değeri tavsiye edildiğinden daha düşük. ", - "uk_UA": "Максимальна кількість відображення памʼяті менша, ніж рекомендовано.", + "uk_UA": "Максимальний обсяг виділеної пам'яті менший за рекомендований.", "zh_CN": "内存映射的最大数量低于推荐值。", "zh_TW": "記憶體映射的最大值低於建議值。" } @@ -2817,7 +2817,7 @@ "sv_SE": "Det aktuella värdet för vm.max_map_count ({0}) är lägre än {1}. Vissa spel kan försöka att skapa fler minnesmappningar än vad som tillåts. Ryujinx kommer att krascha så snart som denna gräns överstigs.\n\nDu kanske vill manuellt öka gränsen eller installera pkexec, vilket tillåter att Ryujinx hjälper till med det.", "th_TH": "ค่าปัจจุบันของ vm.max_map_count ({0}) มีค่าต่ำกว่า {1} บางเกมอาจพยายามใช้หน่วยความจำมากกว่าที่ได้รับอนุญาตในปัจจุบัน Ryujinx จะปิดตัวลงเมื่อเกินขีดจำกัดนี้\n\nคุณอาจต้องการตั้งค่าเพิ่มขีดจำกัดด้วยตนเองหรือติดตั้ง pkexec ซึ่งอนุญาตให้ Ryujinx ช่วยเหลือคุณได้", "tr_TR": "Şu anki vm.max_map_count değeri {0}, bu {1} değerinden daha az. Bazı oyunlar şu an izin verilen bellek haritası limitinden daha fazlasını yaratmaya çalışabilir. Ryujinx bu limitin geçildiği takdirde kendini kapatıcaktır.\n\nManuel olarak bu limiti arttırmayı deneyebilir ya da pkexec'i yükleyebilirsiniz, bu da Ryujinx'in yardımcı olmasına izin verir.", - "uk_UA": "Поточне значення vm.max_map_count ({0}) менше за {1}. Деякі ігри можуть спробувати створити більше відображень пам’яті, ніж дозволено наразі. Ryujinx завершить роботу, щойно цей ліміт буде перевищено.\n\nВи можете збільшити ліміт вручну або встановити pkexec, який дозволяє Ryujinx допомогти з цим.", + "uk_UA": "Поточне значення vm.max_map_count ({0}) менше за {1}. Деякі ігри можуть спробувати створити більше відображень пам’яті, ніж дозволено наразі. Ryujinx закриється (крашнеться), щойно цей ліміт буде перевищено.\n\nВи можете збільшити ліміт власноруч або встановити pkexec, який допоможе Ryujinx впоратися з перевищенням ліміту.", "zh_CN": "vm.max_map_count ({0}) 的当前值小于 {1}。 有些游戏可能会尝试创建超过当前系统允许的内存映射最大数量,若超过当前最大数量,Ryujinx 模拟器将会闪退。\n\n你可以手动增加内存映射最大数量,或者安装 pkexec,它可以辅助 Ryujinx 完成内存映射最大数量的修改操作。", "zh_TW": "目前 vm.max_map_count ({0}) 的數值小於 {1}。某些遊戲可能會嘗試建立比目前允許值更多的記憶體映射。一旦超過此限制,Ryujinx 就會崩潰。\n\n您可能需要手動提高上限,或者安裝 pkexec,讓 Ryujinx 協助提高上限。" } @@ -3167,7 +3167,7 @@ "sv_SE": "Läs automatisk in DLC/speluppdateringar", "th_TH": "โหลดไดเรกทอรี DLC/ไฟล์อัปเดต อัตโนมัติ", "tr_TR": "", - "uk_UA": "Автозавантаження каталогів DLC/Оновлень", + "uk_UA": "Автозавантаження теки DLC/Оновлень", "zh_CN": "自动加载DLC/游戏更新目录", "zh_TW": "自動載入 DLC/遊戲更新資料夾" } @@ -4067,7 +4067,7 @@ "sv_SE": "Återsynka till datorns datum och tid", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Синхронізувати з датою та часом ПК", "zh_CN": "与 PC 日期和时间重新同步", "zh_TW": "重新同步至 PC 的日期和時間" } @@ -4192,7 +4192,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "Yapay", - "uk_UA": "", + "uk_UA": "Вимкнено", "zh_CN": "无", "zh_TW": "虛設 (Dummy)" } @@ -5417,7 +5417,7 @@ "sv_SE": "VARNING: Kommer att reducera prestandan", "th_TH": "คำเตือน: จะทำให้ประสิทธิภาพลดลง", "tr_TR": "UYARI: Oyun performansı azalacak", - "uk_UA": "УВАГА: Зміна параметрів нижче негативно впливає на продуктивність", + "uk_UA": "УВАГА: Зміна параметрів нижче має негативний вплив на продуктивність", "zh_CN": "警告:会降低模拟器性能", "zh_TW": "警告: 會降低效能" } @@ -5442,7 +5442,7 @@ "sv_SE": "Loggnivå för grafikbakände:", "th_TH": "ระดับการบันทึกประวัติ กราฟิกเบื้องหลัง:", "tr_TR": "Grafik Arka Uç Günlük Düzeyi", - "uk_UA": "Рівень журналу графічного сервера:", + "uk_UA": "Рівень журналу графічного бекенда:", "zh_CN": "图形引擎日志级别:", "zh_TW": "圖形後端日誌等級:" } @@ -5717,7 +5717,7 @@ "sv_SE": "", "th_TH": "ตกลง", "tr_TR": "Tamam", - "uk_UA": "Гаразд", + "uk_UA": "", "zh_CN": "确定", "zh_TW": "確定" } @@ -6167,7 +6167,7 @@ "sv_SE": "", "th_TH": "โปรคอนโทรลเลอร์", "tr_TR": "Profesyonel Kumanda", - "uk_UA": "Контролер Pro", + "uk_UA": "Геймпад Nintendo Switch Pro", "zh_CN": "Pro 手柄", "zh_TW": "Pro 控制器" } @@ -8017,7 +8017,7 @@ "sv_SE": "Meny", "th_TH": "", "tr_TR": "Menü", - "uk_UA": "", + "uk_UA": "Меню", "zh_CN": "菜单键", "zh_TW": "功能表鍵" } @@ -8042,7 +8042,7 @@ "sv_SE": "Upp", "th_TH": "", "tr_TR": "Yukarı", - "uk_UA": "", + "uk_UA": "Вгору ↑", "zh_CN": "上", "zh_TW": "上" } @@ -8067,7 +8067,7 @@ "sv_SE": "Ner", "th_TH": "", "tr_TR": "Aşağı", - "uk_UA": "", + "uk_UA": "Вниз ↓", "zh_CN": "下", "zh_TW": "下" } @@ -8092,7 +8092,7 @@ "sv_SE": "Vänster", "th_TH": "", "tr_TR": "Sol", - "uk_UA": "Вліво", + "uk_UA": "Вліво ←", "zh_CN": "左", "zh_TW": "左" } @@ -8117,7 +8117,7 @@ "sv_SE": "Höger", "th_TH": "", "tr_TR": "Sağ", - "uk_UA": "Вправо", + "uk_UA": "Вправо →", "zh_CN": "右", "zh_TW": "右" } @@ -8563,11 +8563,11 @@ "no_NO": "Numerisk 0", "pl_PL": "", "pt_BR": "", - "ru_RU": "Блок цифр 0", + "ru_RU": "0 (цифровий блок)", "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Блок цифр 0", "zh_CN": "小键盘0", "zh_TW": "數字鍵 0" } @@ -8588,11 +8588,11 @@ "no_NO": "Numerisk 1", "pl_PL": "", "pt_BR": "", - "ru_RU": "Блок цифр 1", + "ru_RU": "1 (цифровий блок)", "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Блок цифр 1", "zh_CN": "小键盘1", "zh_TW": "數字鍵 1" } @@ -8617,7 +8617,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "2 (цифровий блок)", "zh_CN": "小键盘2", "zh_TW": "數字鍵 2" } @@ -8642,7 +8642,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "3 (цифровий блок)", "zh_CN": "小键盘3", "zh_TW": "數字鍵 3" } @@ -8667,7 +8667,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "4 (цифровий блок)", "zh_CN": "小键盘4", "zh_TW": "數字鍵 4" } @@ -8692,7 +8692,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "5 (цифровий блок)", "zh_CN": "小键盘5", "zh_TW": "數字鍵 5" } @@ -8717,7 +8717,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "6 (цифровий блок)", "zh_CN": "小键盘6", "zh_TW": "數字鍵 6" } @@ -8742,7 +8742,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "7 (цифровий блок)", "zh_CN": "小键盘7", "zh_TW": "數字鍵 7" } @@ -8767,7 +8767,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "8 (цифровий блок)", "zh_CN": "小键盘8", "zh_TW": "數字鍵 8" } @@ -8792,7 +8792,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "9 (цифровий блок)", "zh_CN": "小键盘9", "zh_TW": "數字鍵 9" } @@ -8817,7 +8817,7 @@ "sv_SE": "Keypad /", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "/ (цифровий блок)", "zh_CN": "小键盘/", "zh_TW": "數字鍵除號" } @@ -8842,7 +8842,7 @@ "sv_SE": "Keypad *", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "* (цифровий блок)", "zh_CN": "小键盘*", "zh_TW": "數字鍵乘號" } @@ -8867,7 +8867,7 @@ "sv_SE": "Keypad -", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "- (цифровий блок)", "zh_CN": "小键盘-", "zh_TW": "數字鍵減號" } @@ -8892,7 +8892,7 @@ "sv_SE": "Keypad +", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "+ (цифровий блок)", "zh_CN": "小键盘+", "zh_TW": "數字鍵加號" } @@ -8917,7 +8917,7 @@ "sv_SE": "Keypad ,", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": ". (цифровий блок)", "zh_CN": "小键盘.", "zh_TW": "數字鍵小數點" } @@ -8942,7 +8942,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Enter (цифровий блок)", "zh_CN": "小键盘回车键", "zh_TW": "數字鍵 Enter" } @@ -9892,7 +9892,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "Pedal 1", - "uk_UA": "", + "uk_UA": "Додаткова кнопка 1", "zh_CN": "其他按键1", "zh_TW": "其他按鍵 1" } @@ -9917,7 +9917,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "Pedal 2", - "uk_UA": "", + "uk_UA": "Додаткова кнопка 2", "zh_CN": "其他按键2", "zh_TW": "其他按鍵 2" } @@ -9942,7 +9942,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "Pedal 3", - "uk_UA": "", + "uk_UA": "Додаткова кнопка 3", "zh_CN": "其他按键3", "zh_TW": "其他按鍵 3" } @@ -9967,7 +9967,7 @@ "sv_SE": "", "th_TH": "", "tr_TR": "Pedal 4", - "uk_UA": "", + "uk_UA": "Додаткова кнопка 4", "zh_CN": "其他按键4", "zh_TW": "其他按鍵 4" } @@ -10517,7 +10517,7 @@ "sv_SE": "Ok", "th_TH": "ตกลง", "tr_TR": "Tamam", - "uk_UA": "Гаразд", + "uk_UA": "", "zh_CN": "完成", "zh_TW": "確定" } @@ -10942,7 +10942,7 @@ "sv_SE": "Kör applikation", "th_TH": "เปิดใช้งานแอปพลิเคชัน", "tr_TR": "Uygulamayı Çalıştır", - "uk_UA": "Запустити додаток", + "uk_UA": "Запустити", "zh_CN": "启动游戏", "zh_TW": "執行應用程式" } @@ -10967,7 +10967,7 @@ "sv_SE": "Växla som favorit", "th_TH": "สลับรายการโปรด", "tr_TR": "Favori Ayarla", - "uk_UA": "Перемкнути вибране", + "uk_UA": "Додати в обрані", "zh_CN": "收藏", "zh_TW": "加入/移除為我的最愛" } @@ -10992,7 +10992,7 @@ "sv_SE": "Växla favoritstatus för spelet", "th_TH": "สลับสถานะเกมที่ชื่นชอบ", "tr_TR": "Oyunu Favorilere Ekle/Çıkar", - "uk_UA": "Перемкнути улюблений статус гри", + "uk_UA": "Додати або вилучити гру з обраних", "zh_CN": "切换游戏的收藏状态", "zh_TW": "切換遊戲的我的最愛狀態" } @@ -12367,7 +12367,7 @@ "sv_SE": "XCI-optimerare", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Вікно XCI Тримера", "zh_CN": "XCI文件瘦身窗口", "zh_TW": "XCI 修剪器視窗" } @@ -13492,7 +13492,7 @@ "sv_SE": "Den angivna katalogen innehåller inte en modd!", "th_TH": "ไดเร็กทอรีที่ระบุไม่มี ม็อดอยู่!", "tr_TR": "", - "uk_UA": "Вказаний каталог не містить модифікації!", + "uk_UA": "Вказана тека не містить модифікації!", "zh_CN": "指定的目录找不到 MOD 文件!", "zh_TW": "指定資料夾不包含模組!" } @@ -13517,7 +13517,7 @@ "sv_SE": "Misslyckades med att ta bort: Kunde inte hitta föräldrakatalogen för modden \"{0}\"!", "th_TH": "ไม่สามารถลบ: ไม่พบไดเร็กทอรีหลักสำหรับ ม็อด \"{0}\"!", "tr_TR": "Silme Başarısız: \"{0}\" Modu için üst dizin bulunamadı! ", - "uk_UA": "Не видалено: Не знайдено батьківський каталог для модифікації \"{0}\"!", + "uk_UA": "Не видалено: Не знайдено батьківський каталог (теку) для модифікації \"{0}\"!", "zh_CN": "删除失败:找不到 MOD 的父目录“{0}”!", "zh_TW": "刪除失敗: 無法找到模組「{0}」的父資料夾!" } @@ -13542,7 +13542,7 @@ "sv_SE": "Den angivna filen innehåller inte en DLC för angivet spel!", "th_TH": "ไฟล์ที่ระบุไม่มี DLC สำหรับชื่อที่เลือก!", "tr_TR": "Belirtilen dosya seçilen oyun için DLC içermiyor!", - "uk_UA": "Зазначений файл не містить DLC для вибраного заголовку!", + "uk_UA": "Зазначений файл не містить DLC для обраної гри!", "zh_CN": "选择的文件不是当前游戏的 DLC!", "zh_TW": "指定檔案不包含所選遊戲的 DLC!" } @@ -14167,7 +14167,7 @@ "sv_SE": "Klicka för att öppna Ryujinx GitHub-sida i din webbläsare.", "th_TH": "คลิกเพื่อเปิดหน้า Github ของ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", "tr_TR": "Ryujinx'in GitHub sayfasını varsayılan tarayıcınızda açmak için tıklayın.", - "uk_UA": "Натисніть, щоб відкрити сторінку GitHub Ryujinx у браузері за замовчуванням.", + "uk_UA": "Натисніть, щоб відкрити сторінку GitHub Ryujinx у браузері.", "zh_CN": "在浏览器中打开 Ryujinx 的 GitHub 代码库。", "zh_TW": "在預設瀏覽器中開啟 Ryujinx 的 GitHub 網頁。" } @@ -14192,7 +14192,7 @@ "sv_SE": "Klicka för att öppna en inbjudan till Ryujinx Discord-server i din webbläsare.", "th_TH": "คลิกเพื่อเปิดคำเชิญเข้าสู่เซิร์ฟเวอร์ Discord ของ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", "tr_TR": "Varsayılan tarayıcınızda Ryujinx'in Discord'una bir davet açmak için tıklayın.", - "uk_UA": "Натисніть, щоб відкрити запрошення на сервер Discord Ryujinx у браузері за замовчуванням.", + "uk_UA": "Натисніть, щоб відкрити запрошення на сервер Discord Ryujinx у браузері.", "zh_CN": "在浏览器中打开 Ryujinx 的 Discord 邀请链接。", "zh_TW": "在預設瀏覽器中開啟 Ryujinx 的 Discord 邀請連結。" } @@ -14242,7 +14242,7 @@ "sv_SE": "Ryujinx är en emulator för Nintendo Switch™.\nFå de senaste nyheterna via vår Discord.\nUtvecklare som är intresserade att bidra kan hitta mer info på vår GitHub eller Discord.", "th_TH": "", "tr_TR": "", - "uk_UA": "Ryujinx — це емулятор для Nintendo Switch™.\nОтримуйте всі останні новини в нашому Discord.\nРозробники, які хочуть зробити внесок, можуть дізнатися більше на нашому GitHub або в Discord.", + "uk_UA": "Ryujinx — це емулятор для Nintendo Switch™.\nОстанні новини можна отримати в нашому Discord.\nРозробники, що бажають долучитись до розробки та зробити свій внесок, можуть отримати більше інформації на нашому GitHub або в Discord.", "zh_CN": "Ryujinx 是一个 Nintendo Switch™ 模拟器。\n有兴趣做出贡献的开发者可以在我们的 GitHub 或 Discord 上了解更多信息。\n", "zh_TW": "Ryujinx 是一款 Nintendo Switch™ 模擬器。\n關注我們的 Discord 取得所有最新消息。\n對於有興趣貢獻的開發者,可以在我們的 GitHub 或 Discord 上了解更多資訊。" } @@ -14917,7 +14917,7 @@ "sv_SE": "Ange en spelkatalog att lägga till i listan", "th_TH": "ป้อนไดเรกทอรี่เกมที่จะทำการเพิ่มลงในรายการ", "tr_TR": "Listeye eklemek için oyun dizini seçin", - "uk_UA": "Введіть каталог ігор, щоб додати до списку", + "uk_UA": "Додайте теку з іграми, щоб додати їх до списку", "zh_CN": "输入要添加的游戏目录", "zh_TW": "輸入要新增到清單中的遊戲資料夾" } @@ -14942,7 +14942,7 @@ "sv_SE": "Lägg till en spelkatalog till listan", "th_TH": "เพิ่มไดเรกทอรี่เกมลงในรายการ", "tr_TR": "Listeye oyun dizini ekle", - "uk_UA": "Додати каталог гри до списку", + "uk_UA": "Додати теку з іграми до списку", "zh_CN": "添加游戏目录到列表中", "zh_TW": "新增遊戲資料夾到清單中" } @@ -14967,7 +14967,7 @@ "sv_SE": "Ta bort vald spelkatalog", "th_TH": "ลบไดเรกทอรี่เกมที่เลือก", "tr_TR": "Seçili oyun dizinini kaldır", - "uk_UA": "Видалити вибраний каталог гри", + "uk_UA": "Видалити вибрану теку гри", "zh_CN": "移除选中的目录", "zh_TW": "移除選取的遊戲資料夾" } @@ -15042,7 +15042,7 @@ "sv_SE": "Ta bort markerad katalog för automatisk inläsning", "th_TH": "ลบไดเรกทอรีสำหรับโหลดอัตโนมัติที่เลือก", "tr_TR": "", - "uk_UA": "Видалити вибраний каталог автозавантаження", + "uk_UA": "Видалити вибрану теку автозавантаження", "zh_CN": "移除被选中的自动加载目录", "zh_TW": "移除選取的「自動載入 DLC/遊戲更新資料夾」" } @@ -15192,7 +15192,7 @@ "sv_SE": "Stöd för direkt musåtkomst (HID). Ger spel åtkomst till din mus som pekdon.\n\nFungerar endast med spel som har inbyggt stöd för muskontroller på Switch-hårdvara, som är endast ett fåtal.\n\nViss pekskärmsfunktionalitet kanske inte fungerar när aktiverat.\n\nLämna AV om du är osäker.", "th_TH": "รองรับการเข้าถึงเมาส์โดยตรง (HID) ให้เกมเข้าถึงเมาส์ของคุณเป็นอุปกรณ์ชี้ตำแหน่ง\n\nใช้งานได้เฉพาะกับเกมที่รองรับการควบคุมเมาส์บนฮาร์ดแวร์ของ Switch เท่านั้น ซึ่งมีอยู่ไม่มากนัก\n\nเมื่อเปิดใช้งาน ฟังก์ชั่นหน้าจอสัมผัสอาจไม่ทำงาน\n\nหากคุณไม่แน่ใจให้ปิดใช้งานไว้", "tr_TR": "", - "uk_UA": "Підтримка прямого доступу до миші (HID). Надає іграм доступ до миші, як пристрій вказування.\n\nПрацює тільки з іграми, які підтримують мишу на обладнанні Switch, їх небагато.\n\nФункціонал сенсорного екрана може не працювати, якщо функція ввімкнена.\n\nЗалиште вимкненим, якщо не впевнені.", + "uk_UA": "Підтримка прямого доступу до миші (HID). Надає іграм доступ до миші, як пристрій вказування.\n\nПрацює тільки з іграми, які підтримують мишу на обладнанні Switch (таких небагато).\n\nФункціонал сенсорного екрану може не працювати, якщо ця функція ввімкнена.\n\nЗалиште вимкненим, якщо не впевнені.", "zh_CN": "直接鼠标访问(HID)支持,游戏可以直接访问鼠标作为指针输入设备。\n\n只适用于在 Switch 硬件上原生支持鼠标控制的游戏,这种游戏很少。\n\n启用后,触屏功能可能无法正常工作。\n\n如果不确定,请保持关闭状态。", "zh_TW": "支援滑鼠直接存取 (HID)。遊戲可將滑鼠作為指向裝置使用。\n\n僅適用於在 Switch 硬體上原生支援滑鼠控制的遊戲,這類遊戲很少。\n\n啟用後,觸控螢幕功能可能無法使用。\n\n如果不確定,請保持關閉狀態。" } @@ -15292,7 +15292,7 @@ "sv_SE": "Ändra systemtid", "th_TH": "เปลี่ยนเวลาของระบบ", "tr_TR": "Sistem Saatini Değiştir", - "uk_UA": "Змінити час системи", + "uk_UA": "Змінити системний час", "zh_CN": "更改系统时间", "zh_TW": "變更系統時鐘" } @@ -15317,7 +15317,7 @@ "sv_SE": "Återsynkronisera systemtiden för att matcha din dators aktuella datum och tid.\n\nDetta är inte en aktiv inställning och den kan tappa synken och om det händer så kan du klicka på denna knapp igen.", "th_TH": "", "tr_TR": "", - "uk_UA": "", + "uk_UA": "Синхронізувати системний час, щоб він відповідав поточній даті та часу вашого ПК.\n\nЦе не активне налаштування, тому синхронізація може збитися; у такому разі просто натискайте цю кнопку знову.", "zh_CN": "重新同步系统时间以匹配您电脑的当前日期和时间。\n\n这个操作不会实时同步系统时间与电脑时间,时间仍然可能不同步;在这种情况下,只需再次单击此按钮即可。", "zh_TW": "重新同步系統韌體時間至 PC 目前的日期和時間。\n\n這不是一個主動設定,它仍然可能會失去同步;在這種情況下,只需再次點擊此按鈕。" } @@ -15342,7 +15342,7 @@ "sv_SE": "Emulerade konsollens vertikala synk. I grund och botten en begränsare för bitrutor för de flesta spel; inaktivera den kan orsaka att spel kör på en högre hastighet eller gör att skärmar tar längre tid att läsa eller fastnar i dem.\n\nKan växlas inne i spelet med en snabbtangent som du väljer (F1 som standard). Vi rekommenderar att göra detta om du planerar att inaktivera den.\n\nLämna PÅ om du är osäker.", "th_TH": "Vertical Sync ของคอนโซลจำลอง โดยพื้นฐานแล้วเป็นตัวจำกัดเฟรมสำหรับเกมส่วนใหญ่ การปิดใช้งานอาจทำให้เกมทำงานด้วยความเร็วสูงขึ้น หรือทำให้หน้าจอการโหลดใช้เวลานานขึ้นหรือค้าง\n\nสามารถสลับได้ในเกมด้วยปุ่มลัดตามที่คุณต้องการ (F1 เป็นค่าเริ่มต้น) เราขอแนะนำให้ทำเช่นนี้หากคุณวางแผนที่จะปิดการใช้งาน\n\nเปิดทิ้งไว้หากคุณไม่แน่ใจ", "tr_TR": "", - "uk_UA": "Емульована вертикальна синхронізація консолі. По суті, обмежувач кадрів для більшості ігор; його вимкнення може призвести до того, що ігри працюватимуть на вищій швидкості, екрани завантаження триватимуть довше чи зупинятимуться.\n\nМожна перемикати в грі гарячою клавішею (За умовчанням F1). Якщо ви плануєте вимкнути функцію, рекомендуємо зробити це через гарячу клавішу.\n\nЗалиште увімкненим, якщо не впевнені.", + "uk_UA": "Емуляція Вертикальної Синхронізації консолі. По суті, це обмежувач кадрів для більшості ігор; його вимкнення може призвести до того, що ігри працюватимуть на вищій швидкості, екрани завантаження триватимуть довше чи зупинятимуться.\n\nМожна перемикати в грі гарячою клавішею (За умовчанням F1). Якщо ви плануєте вимкнути функцію, рекомендуємо зробити це через гарячу клавішу.\n\nЗалиште увімкненим, якщо не впевнені.", "zh_CN": "模拟控制台的垂直同步,开启后会降低大部分游戏的帧率。关闭后,可以获得更高的帧率,但也可能导致游戏画面加载耗时更长或卡住。\n\n在游戏中可以使用热键进行切换(默认为 F1 键)。\n\n如果不确定,请保持开启状态。", "zh_TW": "模擬遊戲機的垂直同步。對大多數遊戲來說,它本質上是一個幀率限制器;停用它可能會導致遊戲以更高的速度執行,或使載入畫面耗時更長或卡住。\n\n可以在遊戲中使用快速鍵進行切換 (預設為 F1)。如果您打算停用,我們建議您這樣做。\n\n如果不確定,請保持開啟狀態。" } @@ -15367,7 +15367,7 @@ "sv_SE": "Sparar översatta JIT-funktioner så att de inte behöver översättas varje gång som spelet läses in.\n\nMinskar stuttering och snabbare på uppstartstiden väsentligt efter första uppstarten av ett spel.\n\nLämna PÅ om du är osäker.", "th_TH": "บันทึกฟังก์ชั่น JIT ที่แปลแล้ว ดังนั้นจึงไม่จำเป็นต้องแปลทุกครั้งที่โหลดเกม\n\nลดอาการกระตุกและเร่งความเร็วการบูตได้อย่างมากหลังจากการบูตครั้งแรกของเกม\n\nเปิดทิ้งไว้หากคุณไม่แน่ใจ", "tr_TR": "Çevrilen JIT fonksiyonlarını oyun her açıldığında çevrilmek zorunda kalmaması için kaydeder.\n\nTeklemeyi azaltır ve ilk açılıştan sonra oyunların ilk açılış süresini ciddi biçimde hızlandırır.\n\nEmin değilseniz aktif halde bırakın.", - "uk_UA": "Зберігає перекладені функції JIT, щоб їх не потрібно було перекладати кожного разу, коли гра завантажується.\n\nЗменшує заїкання та значно прискорює час завантаження після першого завантаження гри.\n\nЗалиште увімкненим, якщо не впевнені.", + "uk_UA": "Зберігає перекладені функції JIT, щоб їх не потрібно було перекладати кожного разу, коли гра завантажується.\n\nЗменшує заїкання (stuttering) та значно прискорює наступні завантаження гри (після першого завантаження).\n\nЗалиште увімкненим, якщо не впевнені.", "zh_CN": "缓存已编译的游戏指令,这样每次游戏加载时就无需重新编译。\n\n可以减少卡顿和启动时间,提高游戏响应速度。\n\n如果不确定,请保持开启状态。", "zh_TW": "儲存已轉譯的 JIT 函數,這樣每次載入遊戲時就無需再轉譯這些函數。\n\n減少遊戲首次啟動後的卡頓現象,並大大加快啟動時間。\n\n如果不確定,請保持開啟狀態。" } @@ -15792,7 +15792,7 @@ "sv_SE": "Nivå av anisotropisk filtrering. Ställ in till Automatiskt för att använda det värde som begärts av spelet.", "th_TH": "ระดับของ Anisotropic ตั้งค่าเป็นอัตโนมัติเพื่อใช้ค่าพื้นฐานของเกม", "tr_TR": "", - "uk_UA": "Рівень анізотропної фільтрації. Встановіть на «Авто», щоб використовувати значення, яке вимагає гра.", + "uk_UA": "Рівень анізотропної фільтрації. Встановіть «Авто», щоб використовувати значення яке вимагає гра.", "zh_CN": "各向异性过滤等级,可以提高倾斜视角纹理的清晰度。\n当设置为“自动”时,使用游戏自身设定的等级。", "zh_TW": "各向異性過濾等級。設定為自動可使用遊戲要求的值。" } @@ -15817,7 +15817,7 @@ "sv_SE": "Bildförhållande att appliceras på renderarfönstret.\n\nÄndra endast detta om du använder en modd för bildförhållande till ditt spel, annars kommer grafiken att sträckas ut.\n\nLämna den till 16:9 om du är osäker.", "th_TH": "อัตราส่วนภาพที่ใช้กับหน้าต่างตัวแสดงภาพ\n\nเปลี่ยนสิ่งนี้หากคุณใช้ตัวดัดแปลงอัตราส่วนกว้างยาวสำหรับเกมของคุณ ไม่เช่นนั้นกราฟิกจะถูกยืดออก\n\nทิ้งไว้ที่ 16:9 หากไม่แน่ใจ", "tr_TR": "", - "uk_UA": "Співвідношення сторін застосовано до вікна рендера.\n\nМіняйте тільки, якщо використовуєте модифікацію співвідношення сторін для гри, інакше графіка буде розтягнута.\n\nЗалиште на \"16:9\", якщо не впевнені.", + "uk_UA": "Співвідношення сторін застосовано до вікна рендера.\n\nМіняйте тільки, якщо використовуєте модифікацію співвідношення сторін для гри, інакше зображення буде розтягнутим.\n\nЗалиште на \"16:9\", якщо не впевнені.", "zh_CN": "游戏渲染窗口的宽高比。\n\n只有当游戏使用了修改宽高比的 MOD 时才需要修改这个设置,否则图像会被拉伸。\n\n如果不确定,请保持为“16:9”。", "zh_TW": "套用於繪製器視窗的長寬比。\n\n只有在遊戲中使用長寬比模組時才可變更,否則圖形會被拉伸。\n\n如果不確定,請保持 16:9 狀態。" } @@ -15842,7 +15842,7 @@ "sv_SE": "Sökväg för Graphics Shaders Dump", "th_TH": "ที่เก็บ ดัมพ์ไฟล์เชเดอร์", "tr_TR": "Grafik Shader Döküm Yolu", - "uk_UA": "Шлях скидання графічних шейдерів", + "uk_UA": "Шлях до дампу графічних шейдерів", "zh_CN": "转储图形着色器的路径", "zh_TW": "圖形著色器傾印路徑" } @@ -15867,7 +15867,7 @@ "sv_SE": "Sparar konsolloggning till en loggfil på disk. Påverkar inte prestandan.", "th_TH": "บันทึกประวัติคอนโซลลงในไฟล์บันทึก จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Konsol loglarını diskte bir log dosyasına kaydeder. Performansı etkilemez.", - "uk_UA": "Зберігає журнал консолі у файл журналу на диску. Не впливає на продуктивність.", + "uk_UA": "Зберігає консольне ведення журналу у файл на диску. Не впливає на продуктивність.", "zh_CN": "将控制台日志保存到硬盘文件,不影响性能。", "zh_TW": "將控制台日誌儲存到磁碟上的日誌檔案中。不會影響效能。" } @@ -15892,7 +15892,7 @@ "sv_SE": "Skriver ut stubbloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความประวัติในคอนโซล จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Stub log mesajlarını konsola yazdırır. Performansı etkilemez.", - "uk_UA": "Друкує повідомлення журналу-заглушки на консолі. Не впливає на продуктивність.", + "uk_UA": "Відображає повідомлення журналу-заглушки (tub log) в консолі. Не впливає на продуктивність.", "zh_CN": "在控制台中显示存根日志,不影响性能。", "zh_TW": "在控制台中輸出日誌訊息。不會影響效能。" } @@ -15917,7 +15917,7 @@ "sv_SE": "Skriver ut informationsloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความบันทึกข้อมูลในคอนโซล จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Bilgi log mesajlarını konsola yazdırır. Performansı etkilemez.", - "uk_UA": "Друкує повідомлення інформаційного журналу на консолі. Не впливає на продуктивність.", + "uk_UA": "Виводить повідомлення журналу інформації (info log) в консоль. Не впливає на продуктивність.", "zh_CN": "在控制台中显示信息日志,不影响性能。", "zh_TW": "在控制台中輸出資訊日誌訊息。不會影響效能。" } @@ -15942,7 +15942,7 @@ "sv_SE": "Skriver ut varningsloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความประวัติการเตือนในคอนโซล จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Uyarı log mesajlarını konsola yazdırır. Performansı etkilemez.", - "uk_UA": "Друкує повідомлення журналу попереджень у консолі. Не впливає на продуктивність.", + "uk_UA": "Додає повідомлення журналу попереджень (warning log) до консолі. Не впливає на продуктивність.", "zh_CN": "在控制台中显示警告日志,不影响性能。", "zh_TW": "在控制台中輸出警告日誌訊息。不會影響效能。" } @@ -15967,7 +15967,7 @@ "sv_SE": "Skriver ut felloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความบันทึกข้อผิดพลาดในคอนโซล จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Hata log mesajlarını konsola yazdırır. Performansı etkilemez.", - "uk_UA": "Друкує повідомлення журналу помилок у консолі. Не впливає на продуктивність.", + "uk_UA": "Додає повідомлення журналу помилок (error log) до консолі. Не впливає на продуктивність.", "zh_CN": "在控制台中显示错误日志,不影响性能。", "zh_TW": "在控制台中輸出錯誤日誌訊息。不會影響效能。" } @@ -15992,7 +15992,7 @@ "sv_SE": "Skriver ut spårloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความประวัติการติดตามในคอนโซล ไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Trace log mesajlarını konsola yazdırır. Performansı etkilemez.", - "uk_UA": "Друкує повідомлення журналу трасування на консолі. Не впливає на продуктивність.", + "uk_UA": "Додає повідомлення журналу трасування (trace log) до консолі. Не впливає на продуктивність.", "zh_CN": "在控制台中显示跟踪日志。", "zh_TW": "在控制台中輸出追蹤日誌訊息。不會影響效能。" } @@ -16017,7 +16017,7 @@ "sv_SE": "Skriver ut gästloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความประวัติของผู้เยี่ยมชมในคอนโซล ไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Guest log mesajlarını konsola yazdırır. Performansı etkilemez.", - "uk_UA": "Друкує повідомлення журналу гостей у консолі. Не впливає на продуктивність.", + "uk_UA": "Додає повідомлення журналу гостей (guest log) до консолі. Не впливає на продуктивність.", "zh_CN": "在控制台中显示访客日志,不影响性能。", "zh_TW": "在控制台中輸出客體日誌訊息。不會影響效能。" } @@ -16042,7 +16042,7 @@ "sv_SE": "Skriver ut loggmeddelanden för filåtkomst i konsollen.", "th_TH": "พิมพ์ข้อความบันทึกการเข้าถึงไฟล์ในคอนโซล", "tr_TR": "Dosya sistemi erişim log mesajlarını konsola yazdırır.", - "uk_UA": "Друкує повідомлення журналу доступу до файлів у консолі.", + "uk_UA": "Виводить повідомлення журналу доступу (access log) до файлів в консоль.", "zh_CN": "在控制台中显示文件访问日志。", "zh_TW": "在控制台中輸出檔案存取日誌訊息。" } @@ -16067,7 +16067,7 @@ "sv_SE": "Aktiverar loggutdata för filsystemsåtkomst i konsollen. Möjliga lägen är 0-3", "th_TH": "เปิดใช้งาน เอาต์พุตประวัติการเข้าถึง FS ไปยังคอนโซล โหมดที่เป็นไปได้คือ 0-3", "tr_TR": "Konsola FS erişim loglarının yazılmasını etkinleştirir. Kullanılabilir modlar 0-3'tür", - "uk_UA": "Вмикає виведення журналу доступу до FS на консоль. Можливі режими 0-3", + "uk_UA": "Вмикає виведення журналу доступу (access log) до FS на консоль. Можливі режими 0-3", "zh_CN": "在控制台中显示文件系统访问日志,可选模式为 0-3。", "zh_TW": "啟用檔案系統存取日誌輸出到控制台中。可能的模式為 0 到 3" } @@ -16092,7 +16092,7 @@ "sv_SE": "Använd med försiktighet", "th_TH": "โปรดใช้ด้วยความระมัดระวัง", "tr_TR": "Dikkatli kullanın", - "uk_UA": "Використовуйте з обережністю", + "uk_UA": "Використовувати обережно", "zh_CN": "请谨慎使用", "zh_TW": "謹慎使用" } @@ -16117,7 +16117,7 @@ "sv_SE": "Kräver att lämpliga loggnivåer aktiveras", "th_TH": "จำเป็นต้องเปิดใช้งานระดับบันทึกที่เหมาะสม", "tr_TR": "Uygun log seviyesinin aktif olmasını gerektirir", - "uk_UA": "Потрібно увімкнути відповідні рівні журналу", + "uk_UA": "Потрібно увімкнути відповідні рівні журналу (log)", "zh_CN": "需要启用适当的日志级别", "zh_TW": "需要啟用適當的日誌等級" } @@ -16142,7 +16142,7 @@ "sv_SE": "Skriver ut felsökningsloggmeddelanden i konsolen.\n\nAnvänd endast detta om det är specifikt instruerat av en medarbetare, eftersom det kommer att göra loggar svåra att läsa och försämra emulatorprestanda.", "th_TH": "พิมพ์ข้อความประวัติการแก้ไขข้อบกพร่องในคอนโซล\n\nใช้สิ่งนี้เฉพาะเมื่อได้รับคำแนะนำจากผู้ดูแลเท่านั้น เนื่องจากจะทำให้บันทึกอ่านยากและทำให้ประสิทธิภาพของโปรแกรมจำลองแย่ลง", "tr_TR": "Debug log mesajlarını konsola yazdırır.\n\nBu seçeneği yalnızca geliştirici üyemiz belirtirse aktifleştirin, çünkü bu seçenek log dosyasını okumayı zorlaştırır ve emülatörün performansını düşürür.", - "uk_UA": "Друкує повідомлення журналу налагодження на консолі.\n\nВикористовуйте це лише за спеціальною вказівкою співробітника, оскільки це ускладнить читання журналів і погіршить роботу емулятора.", + "uk_UA": "Виводить повідомлення журналу налагодження в консолі.\n\nВикористовуйте лише за спеціальною вказівкою розробника, оскільки увімкнення цього параметру ускладнить читання журналів (logs) і погіршить роботу емулятора.", "zh_CN": "在控制台中显示调试日志。\n\n仅在特别需要时使用此功能,因为它会导致日志信息难以阅读,并降低模拟器性能。", "zh_TW": "在控制台中輸出偵錯日誌訊息。\n\n只有在人員特別指示的情況下才能使用,因為這會導致日誌難以閱讀,並降低模擬器效能。" } @@ -16167,7 +16167,7 @@ "sv_SE": "Öppna en filutforskare för att välja en Switch-kompatibel fil att läsa in", "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกไฟล์ที่เข้ากันได้กับ Switch ที่จะโหลด", "tr_TR": "Switch ile uyumlu bir dosya yüklemek için dosya tarayıcısını açar", - "uk_UA": "Відкриває файловий провідник, щоб вибрати для завантаження сумісний файл Switch", + "uk_UA": "Відкриває Файловий провідник, щоб обрати для завантаження сумісний зі Switch файл", "zh_CN": "选择 Switch 游戏文件并加载", "zh_TW": "開啟檔案總管,選擇與 Switch 相容的檔案來載入" } @@ -16192,7 +16192,7 @@ "sv_SE": "Öppna en filutforskare för att välja en Switch-kompatibel, uppackad applikation att läsa in", "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกไฟล์ที่เข้ากันได้กับ Switch ที่จะโหลด", "tr_TR": "Switch ile uyumlu ayrıştırılmamış bir uygulama yüklemek için dosya tarayıcısını açar", - "uk_UA": "Відкриває файловий провідник, щоб вибрати сумісну з комутатором розпаковану програму для завантаження", + "uk_UA": "Відкриває Файловий провідник, щоб обрати сумісну зі Switch розпаковану програму для завантаження", "zh_CN": "选择解包后的 Switch 游戏目录并加载", "zh_TW": "開啟檔案總管,選擇與 Switch 相容且未封裝的應用程式來載入" } @@ -16217,7 +16217,7 @@ "sv_SE": "Öppna en filutforskare för att välja en eller flera mappar att läsa in alla DLC från", "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกหนึ่งโฟลเดอร์ขึ้นไปเพื่อโหลด DLC จำนวนมาก", "tr_TR": "", - "uk_UA": "Відкрийте провідник файлів, щоб вибрати одну або кілька папок для масового завантаження DLC", + "uk_UA": "Відкриває Файловий провідник для обрання однієї або декількох тек для масового завантаження DLC", "zh_CN": "打开文件资源管理器以选择一个或多个文件夹来批量加载DLC。", "zh_TW": "開啟檔案總管,選擇一個或多個資料夾來大量載入 DLC" } @@ -16242,7 +16242,7 @@ "sv_SE": "Öppna en filutforskare för att välja en eller flera mappar att läsa in alla titeluppdateringar från", "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกหนึ่งโฟลเดอร์ขึ้นไปเพื่อโหลดไฟล์อัปเดตจำนวนมาก", "tr_TR": "", - "uk_UA": "Відкрийте провідник файлів, щоб вибрати одну або кілька папок для масового завантаження оновлень заголовків", + "uk_UA": "Відкриває Файловий провідник для обрання однієї або декількох тек для масового завантаження оновлень", "zh_CN": "打开文件资源管理器以选择一个或多个文件夹来批量加载游戏更新。", "zh_TW": "開啟檔案總管,選擇一個或多個資料夾來大量載入遊戲更新" } @@ -16267,7 +16267,7 @@ "sv_SE": "Öppna Ryujinx-filsystemsmappen", "th_TH": "เปิดโฟลเดอร์ระบบไฟล์ Ryujinx", "tr_TR": "Ryujinx dosya sistem klasörünü açar", - "uk_UA": "Відкриває теку файлової системи Ryujinx", + "uk_UA": "Відкриває теку з файлами Ryujinx", "zh_CN": "打开 Ryujinx 模拟器系统目录", "zh_TW": "開啟 Ryujinx 檔案系統資料夾" } @@ -16292,7 +16292,7 @@ "sv_SE": "Öppnar mappen där loggarna har skrivits till", "th_TH": "เปิดโฟลเดอร์ ที่เก็บไฟล์ประวัติ", "tr_TR": "Log dosyalarının bulunduğu klasörü açar", - "uk_UA": "Відкриває теку, куди записуються журнали", + "uk_UA": "Відкриває теку, куди записуються журнали (logs)", "zh_CN": "打开日志存放的目录", "zh_TW": "開啟日誌被寫入的資料夾" } @@ -16667,7 +16667,7 @@ "sv_SE": "Hantera fusk", "th_TH": "ฟังก์ชั่นจัดการสูตรโกง", "tr_TR": "Hileleri yönetmeyi sağlar", - "uk_UA": "Керування читами", + "uk_UA": "Відкриває меню керування чит-кодами (cheats)", "zh_CN": "管理当前游戏的金手指", "zh_TW": "管理密技" } @@ -16717,7 +16717,7 @@ "sv_SE": "Hantera moddar", "th_TH": "ฟังก์ชั่นจัดการม็อด", "tr_TR": "Modları Yönet", - "uk_UA": "Керування модами", + "uk_UA": "Відкриває меню керування модифікаціями (mods)", "zh_CN": "管理当前游戏的 MOD", "zh_TW": "管理模組" } @@ -16942,7 +16942,7 @@ "sv_SE": "CPU-cache", "th_TH": "แคชซีพียู", "tr_TR": "İşlemci Belleği", - "uk_UA": "Кеш ЦП", + "uk_UA": "Кеш CPU", "zh_CN": "CPU 缓存", "zh_TW": "CPU 快取" } @@ -16967,7 +16967,7 @@ "sv_SE": "CPU-läge", "th_TH": "โหมดซีพียู", "tr_TR": "CPU Hafızası", - "uk_UA": "Пам'ять ЦП", + "uk_UA": "Режим CPU", "zh_CN": "CPU 模式", "zh_TW": "CPU 模式" } @@ -17042,7 +17042,7 @@ "sv_SE": "Ikonstorlek", "th_TH": "ขนาดไอคอน", "tr_TR": "Ikon Boyutu", - "uk_UA": "Розмір значка", + "uk_UA": "Розмір обкладинки", "zh_CN": "图标尺寸", "zh_TW": "圖示大小" } @@ -17067,7 +17067,7 @@ "sv_SE": "Ändra storleken för spelikonerna", "th_TH": "เปลี่ยนขนาดของไอคอนเกม", "tr_TR": "Oyun ikonlarının boyutunu değiştirmeyi sağlar", - "uk_UA": "Змінити розмір значків гри", + "uk_UA": "Змінити розмір обкладинок (значків) ігор", "zh_CN": "更改游戏图标的显示尺寸", "zh_TW": "變更遊戲圖示的大小" } @@ -17217,7 +17217,7 @@ "sv_SE": "Applikationen hittades inte", "th_TH": "ไม่พบ แอปพลิเคชัน", "tr_TR": "Uygulama bulunamadı", - "uk_UA": "Додаток не знайдено", + "uk_UA": "Застосунок не знайдено", "zh_CN": "找不到游戏程序", "zh_TW": "找不到應用程式" } @@ -17367,7 +17367,7 @@ "sv_SE": "Ryujinx kunde inte hitta en giltig applikation i angiven sökväg.", "th_TH": "Ryujinx ไม่พบแอปพลิเคชันที่ถูกต้องในที่เก็บไฟล์ที่กำหนด", "tr_TR": "Ryujinx belirtilen yolda geçerli bir uygulama bulamadı.", - "uk_UA": "Ryujinx не вдалося знайти дійсний додаток за вказаним шляхом", + "uk_UA": "Ryujinx не вдалося знайти дійсний застосунок (гру) за вказаним шляхом", "zh_CN": "Ryujinx 模拟器在所选路径中找不到有效的游戏程序。", "zh_TW": "Ryujinx 無法在指定路徑下找到有效的應用程式。" } @@ -17417,7 +17417,7 @@ "sv_SE": "Ett odefinierat fel inträffade! Detta ska inte hända. Kontakta en utvecklare!", "th_TH": "เกิดข้อผิดพลาดที่ไม่สามารถระบุได้! สิ่งนี้ไม่ควรเกิดขึ้น โปรดติดต่อผู้พัฒนา!", "tr_TR": "Tanımlanmayan bir hata oluştu! Bu durum ile karşılaşılmamalıydı, lütfen bir geliştirici ile iletişime geçin!", - "uk_UA": "Сталася невизначена помилка! Цього не повинно статися, зверніться до розробника!", + "uk_UA": "Виникла невизначена помилка! Це не повинно було статися. Будь ласка, зверніться до розробника!", "zh_CN": "出现未定义错误!此类错误不应出现,请联系开发者!", "zh_TW": "發生未定義錯誤! 這種情況不應該發生,請聯絡開發人員!" } @@ -17467,7 +17467,7 @@ "sv_SE": "Ingen uppdatering", "th_TH": "ไม่มีการอัปเดต", "tr_TR": "Güncelleme Yok", - "uk_UA": "Немає оновлень", + "uk_UA": "НБез оновлень", "zh_CN": "无更新(默认版本)", "zh_TW": "沒有更新" } @@ -19067,7 +19067,7 @@ "sv_SE": "Denna funktion kommer först att kontrollera ledigt utrymme och sedan optimera XCI-filen för att spara diskutrymme.", "th_TH": "", "tr_TR": "", - "uk_UA": "Ця функція спочатку перевірить вільний простір, а потім обрізатиме файл XCI для економії місця на диску.", + "uk_UA": "Ця функція спочатку перевірить наявність порожнього місця, після чого обріже файл XCI для економії місця на диску.", "zh_CN": "这个功能将会先检查XCI文件,再对其执行瘦身操作以节约磁盘空间。", "zh_TW": "此功能首先檢查 XCI 檔案是否有可修剪的字元,然後修剪檔案以節省儲存空間。" } @@ -19117,7 +19117,7 @@ "sv_SE": "XCI-filen behöver inte optimeras. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", - "uk_UA": "XCI файл не потребує обрізання. Перевірте журнали для додаткової інформації", + "uk_UA": "XCI файл не потребує обрізання. Перевірте журнали (logs) для отримання додаткової інформації", "zh_CN": "XCI文件不需要被瘦身。查看日志以获得更多细节。", "zh_TW": "XCI 檔案不需要修剪。檢查日誌以取得更多資訊" } @@ -19142,7 +19142,7 @@ "sv_SE": "XCI-filen kan inte avoptimeras. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", - "uk_UA": "XCI файл не може бути обрізаний. Перевірте журнали для додаткової інформації", + "uk_UA": "XCI файл не може бути обрізаний. Перевірте журнали (logs) для отримання додаткової інформації", "zh_CN": "XCI文件不能被瘦身。查看日志以获得更多细节。", "zh_TW": "XCI 檔案不能被修剪。檢查日誌以取得更多資訊" } @@ -19167,7 +19167,7 @@ "sv_SE": "XCI-filen är skrivskyddad och kunde inte göras skrivbar. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", - "uk_UA": "XCI файл Тільки для Читання і не може бути прочитаним. Перевірте журнали додаткової інформації", + "uk_UA": "XCI файл Тільки для Читання і не може бути прочитаним. Перевірте журнали (logs) для отримання додаткової інформації", "zh_CN": "XCI文件是只读的,且不可以被标记为可读取的。查看日志以获得更多细节。", "zh_TW": "XCI 檔案是唯讀,並且無法改成可寫入。檢查日誌以取得更多資訊" } @@ -19242,7 +19242,7 @@ "sv_SE": "XCI-filen innehåller ogiltig data. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", - "uk_UA": "XCI Файл містить недійсні дані. Перевірте журнали для додаткової інформації", + "uk_UA": "XCI Файл містить недійсні дані. Перевірте журнали (logs) для отримання додаткової інформації", "zh_CN": "XCI文件含有无效数据。查看日志以获得更多细节。", "zh_TW": "XCI 檔案帶有無效的數據。檢查日誌以取得更多資訊" } @@ -19767,7 +19767,7 @@ "sv_SE": "Titel", "th_TH": "", "tr_TR": "", - "uk_UA": "Заголовок", + "uk_UA": "Назва", "zh_CN": "标题", "zh_TW": "名稱" } @@ -19867,7 +19867,7 @@ "sv_SE": "{0} nya uppdatering(ar) lades till", "th_TH": "{0} อัพเดตที่เพิ่มมาใหม่", "tr_TR": "", - "uk_UA": "{0} нове оновлення додано", + "uk_UA": "{0} нових оновлень додано", "zh_CN": "{0} 个更新被添加", "zh_TW": "已加入 {0} 個遊戲更新" } @@ -19917,7 +19917,7 @@ "sv_SE": "Fusk tillgängliga för {0} [{1}]", "th_TH": "สูตรโกงมีให้สำหรับ {0} [{1}]", "tr_TR": "{0} için Hile mevcut [{1}]", - "uk_UA": "Коди доступні для {0} [{1}]", + "uk_UA": "Чит-коди доступні для {0} [{1}]", "zh_CN": "适用于 {0} [{1}] 的金手指", "zh_TW": "可用於 {0} [{1}] 的密技" } @@ -19967,7 +19967,7 @@ "sv_SE": "Bundlade DLC kan inte tas bort, endast inaktiveras.", "th_TH": "แพ็ค DLC ไม่สามารถลบทิ้งได้ สามารถปิดใช้งานได้เท่านั้น", "tr_TR": "", - "uk_UA": "Вбудований DLC не може бути видаленим, лише вимкненим.", + "uk_UA": "Комплектні DLC (бандли) не можуть бути видаленими, лише вимкненими.", "zh_CN": "游戏整合的DLC无法移除,可尝试禁用。", "zh_TW": "附帶的 DLC 只能被停用而無法被刪除。" } @@ -20392,7 +20392,7 @@ "sv_SE": "Hantera uppdateringar för {0} ({1})", "th_TH": "จัดการอัพเดตสำหรับ {0} ({1})", "tr_TR": "{0} için güncellemeler mevcut [{1}]", - "uk_UA": "{0} Доступні оновлення для {1} ({2})", + "uk_UA": "Доступні оновлення для {0} ({1})", "zh_CN": "管理 {0} ({1}) 的更新", "zh_TW": "管理 {0} 的更新 ({1})" } @@ -21367,7 +21367,7 @@ "sv_SE": "Välj det skalfilter som ska tillämpas vid användning av upplösningsskala.\n\nBilinjär fungerar bra för 3D-spel och är ett säkert standardalternativ.\n\nNärmast rekommenderas för pixel art-spel.\n\nFSR 1.0 är bara ett skarpningsfilter, rekommenderas inte för FXAA eller SMAA.\n\nOmrådesskalning rekommenderas vid nedskalning av upplösning som är större än utdatafönstret. Det kan användas för att uppnå en supersamplad anti-alias-effekt vid nedskalning med mer än 2x.\n\nDetta alternativ kan ändras medan ett spel körs genom att klicka på \"Tillämpa\" nedan. du kan helt enkelt flytta inställningsfönstret åt sidan och experimentera tills du hittar ditt föredragna utseende för ett spel.\n\nLämna som BILINJÄR om du är osäker.", "th_TH": "เลือกตัวกรองสเกลที่จะใช้เมื่อใช้สเกลความละเอียด\n\nBilinear ทำงานได้ดีกับเกม 3D และเป็นตัวเลือกเริ่มต้นที่ปลอดภัย\n\nแนะนำให้ใช้เกมภาพพิกเซลที่ใกล้เคียงที่สุด\n\nFSR 1.0 เป็นเพียงตัวกรองความคมชัด ไม่แนะนำให้ใช้กับ FXAA หรือ SMAA\n\nตัวเลือกนี้สามารถเปลี่ยนแปลงได้ในขณะที่เกมกำลังทำงานอยู่โดยคลิก \"นำไปใช้\" ด้านล่าง คุณสามารถย้ายหน้าต่างการตั้งค่าไปด้านข้างและทดลองจนกว่าคุณจะพบรูปลักษณ์ที่คุณต้องการสำหรับเกม", "tr_TR": "Choose the scaling filter that will be applied when using resolution scale.\n\nBilinear works well for 3D games and is a safe default option.\n\nNearest is recommended for pixel art games.\n\nFSR 1.0 is merely a sharpening filter, not recommended for use with FXAA or SMAA.\n\nThis option can be changed while a game is running by clicking \"Apply\" below; you can simply move the settings window aside and experiment until you find your preferred look for a game.\n\nLeave on BILINEAR if unsure.", - "uk_UA": "Виберіть фільтр масштабування, що використається при збільшенні роздільної здатності.\n\n\"Білінійний\" добре виглядає в 3D іграх, і хороше налаштування за умовчуванням.\n\n\"Найближчий\" рекомендується для ігор з піксель-артом.\n\n\"FSR 1.0\" - це просто фільтр різкості, не рекомендується використовувати разом з FXAA або SMAA.\n\nЦю опцію можна міняти коли гра запущена кліком на \"Застосувати; ви можете відсунути вікно налаштувань і поекспериментувати з видом гри.\n\nЗалиште на \"Білінійний\", якщо не впевнені.", + "uk_UA": "Виберіть фільтр масштабування, що використається при збільшенні роздільної здатності.\n\n\"Білінійний\" добре виглядає в 3D іграх, і хороше налаштування за умовчуванням.\n\n\"Найближчий\" рекомендується для ігор з піксель-артом.\n\n\"FSR 1.0\" - фільтр різкості. Не варто використовувати разом з FXAA або SMAA.\n\nЦю опцію можна змінювати під час гри кліком на \"Застосувати\" нижче; ви можете відсунути вікно налаштувань і поекспериментувати з тим, як відображатиметься гра.\n\nЗалиште на \"Білінійний\", якщо не впевнені.", "zh_CN": "选择在分辨率缩放时将使用的缩放过滤器。\n\nBilinear(双线性过滤)对于3D游戏效果较好,是一个安全的默认选项。\n\nNearest(最近邻过滤)推荐用于像素艺术游戏。\n\nFSR(超级分辨率锐画)只是一个锐化过滤器,不推荐与 FXAA 或 SMAA 抗锯齿一起使用。\n\nArea(局部过滤),当渲染分辨率大于窗口实际分辨率,推荐该选项。该选项在渲染比例大于2.0的情况下,可以实现超采样的效果。\n\n在游戏运行时,通过点击下面的“应用”按钮可以使设置生效;你可以将设置窗口移开,并试验找到您喜欢的游戏画面效果。\n\n如果不确定,请保持为“Bilinear(双线性过滤)”。", "zh_TW": "選擇使用解析度縮放時套用的縮放過濾器。\n\n雙線性 (Bilinear) 濾鏡適用於 3D 遊戲,是一個安全的預設選項。\n\n建議像素美術遊戲使用近鄰性 (Nearest) 濾鏡。\n\nFSR 1.0 只是一個銳化濾鏡,不建議與 FXAA 或 SMAA 一起使用。\n\n此選項可在遊戲執行時透過點選下方的「套用」進行變更;您只需將設定視窗移到一旁,然後進行試驗,直到找到您喜歡的遊戲效果。\n\n如果不確定,請保持雙線性 (Bilinear) 狀態。" } @@ -21517,7 +21517,7 @@ "sv_SE": "Ställ in nivå för FSR 1.0 sharpening. Högre är skarpare.", "th_TH": "ตั้งค่าระดับความคมชัด FSR 1.0 ยิ่งสูงกว่าจะยิ่งคมชัดกว่า", "tr_TR": "", - "uk_UA": "Встановити рівень різкості в FSR 1.0. Чим вище - тим різкіше.", + "uk_UA": "Встановити рівень різкості FSR 1.0. Чим вище - тим різкіше.", "zh_CN": "设置 FSR 1.0 的锐化等级,数值越高,图像越锐利。", "zh_TW": "設定 FSR 1.0 銳化等級。越高越清晰。" } @@ -22392,7 +22392,7 @@ "sv_SE": "Emulerad vertikal synk. 'Switch' emulerar Switchens uppdateringsfrekvens på 60Hz. 'Obunden' är en obegränsad uppdateringsfrekvens.", "th_TH": "", "tr_TR": "", - "uk_UA": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень.", + "uk_UA": "Емульована вертикальна синхронізація кадрів. 'Switch' емулює частоту оновлення консолі Nintendo Switch (60 Гц). 'Необмежена' — частота оновлення не матиме обмежень.", "zh_CN": "模拟垂直同步。“Switch”模拟了Switch的60Hz刷新率。“无限制”没有刷新率限制。", "zh_TW": "模擬垂直同步。「Switch」 模擬 Nintendo Switch 的 60Hz 重新整理頻率。「沒有限制」是沒有限制的重新整理頻率。" } @@ -22417,7 +22417,7 @@ "sv_SE": "Emulerad vertikal synk. 'Switch' emulerar Switchens uppdateringsfrekvens på 60Hz. 'Obunden' är en obegränsad uppdateringsfrekvens. 'Anpassad uppdateringsfrekvens' emulerar den angivna anpassade uppdateringsfrekvensen.", "th_TH": "", "tr_TR": "", - "uk_UA": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень. 'Користувацька' емулює вказану користувацьку частоту оновлення.", + "uk_UA": "Емульована вертикальна синхронізація кадрів. 'Switch' емулює частоту оновлення консолі Nintendo Switch (60 Гц). 'Необмежена' — частота оновлення не матиме обмежень. 'Користувацька' емулює вказану користувацьку частоту оновлення.", "zh_CN": "模拟垂直同步。“Switch”模拟了Switch的60Hz刷新率。“无限制”没有刷新率限制。“自定义刷新率”模拟指定的自定义刷新率。", "zh_TW": "模擬垂直同步。「Switch」 模擬 Nintendo Switch 的 60Hz 重新整理頻率。「沒有限制」是沒有限制的重新整理頻率。「自訂的重新整理頻率」模擬所自訂的重新整理頻率。" } @@ -22442,7 +22442,7 @@ "sv_SE": "Låter användaren ange en emulerad uppdateringsfrekvens. För vissa spel så kan detta snabba upp eller ner frekvensen för spellogiken. I andra spel så kan detta tillåta att bildfrekvensen kapas för delar av uppdateringsfrekvensen eller leda till oväntat beteende. Detta är en experimentell funktion utan några garantier för hur spelet påverkas. \n\nLämna AV om du är osäker.", "th_TH": "", "tr_TR": "", - "uk_UA": "Дозволяє користувачу вказати емульовану частоту оновлення. У деяких іграх це може прискорити або сповільнити логіку гри. У інших іграх це може дозволити обмежити FPS на певні кратні частоти оновлення або призвести до непередбачуваної поведінки. Це експериментальна функція, без гарантій того, як це вплине на ігровий процес. \n\nЗалиште ВИМКНЕНИМ, якщо не впевнені.", + "uk_UA": "Дозволяє користувачу вказати емульовану частоту оновлення. У деяких іграх це може прискорити або сповільнити логіку гри. Натомість в інших іграх ця функція може дозволити обмежити FPS на певні кратні частоти оновлення або призвести до непередбачуваної поведінки. Це експериментальна функція, без гарантій того, як вона вплине на ігровий процес. \n\nЗалиште ВИМКНЕНИМ, якщо не впевнені.", "zh_CN": "允许用户指定模拟刷新率。在某些游戏中,这可能会加快或减慢游戏逻辑的速度。在其他游戏中,它可能允许将FPS限制在刷新率的某个倍数,或者导致不可预测的行为。这是一个实验性功能,无法保证游戏会受到怎样的影响。\n\n如果不确定,请关闭。", "zh_TW": "容許使用者自訂模擬的重新整理頻率。你可能會在某些遊戲裡感受到加快或減慢的遊戲速度;其他遊戲裡則可能會容許限制最高的 FPS 至重新整理頻率的倍數,或引起未知遊戲行為。這是實驗性功能,且沒有保證遊戲會穩定執行。\n\n如果不確定,請保持關閉狀態。" } @@ -22542,7 +22542,7 @@ "sv_SE": "Värde för anpassad uppdateringsfrekvens:", "th_TH": "", "tr_TR": "", - "uk_UA": "Значення користувацька частота оновлення:", + "uk_UA": "Значення користувацької частоти оновлення:", "zh_CN": "自定义刷新率值:", "zh_TW": "自訂重新整理頻率數值:" } @@ -22898,4 +22898,4 @@ } } ] -} \ No newline at end of file +} -- 2.47.1 From a1c0c70ec2932896d42680aab19c185f46b921de Mon Sep 17 00:00:00 2001 From: Daenorth Date: Mon, 20 Jan 2025 04:15:46 +0100 Subject: [PATCH 379/722] Added missing TitleIDs (#545) Added the remaining missing TitleIDs in the compat.csv list. Excluding Homebrew apps. --- docs/compatibility.csv | 89 +++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 45 deletions(-) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index 88deb2f2b..3528652c8 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -167,7 +167,7 @@ 01006C40086EA000,"AeternoBlade",nvdec,playable,2020-12-14 20:06:48 0100B1C00949A000,"AeternoBlade Demo",nvdec,playable,2021-02-09 14:39:26 01009D100EA28000,"AeternoBlade II",online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18 -,"AeternoBlade II Demo Version",gpu;nvdec,ingame,2021-02-09 15:10:19 +0100B1C00949A000,"AeternoBlade II Demo Version",gpu;nvdec,ingame,2021-02-09 15:10:19 01001B400D334000,"AFL Evolution 2",slow;online-broken;UE4,playable,2022-12-07 12:45:56 0100DB100BBCE000,"Afterparty",,playable,2022-09-22 12:23:19 010087C011C4E000,"Agatha Christie - The ABC Murders",,playable,2020-10-27 17:08:23 @@ -477,7 +477,7 @@ 010020700DE04000,"Bear With Me: The Lost Robots",nvdec,playable,2021-02-27 14:20:10 010024200E97E800,"Bear With Me: The Lost Robots Demo",nvdec,playable,2021-02-12 22:38:12 0100C0E014A4E000,"Bear's Restaurant",,playable,2024-08-11 21:26:59 -,"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",crash,menus,2020-10-04 06:12:08 +010045F00BF64000,"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",crash,menus,2020-10-04 06:12:08 01009C300BB4C000,"Beat Cop",,playable,2021-01-06 19:26:48 01002D20129FC000,"Beat Me!",online-broken,playable,2022-10-16 21:59:26 01006B0014590000,"BEAUTIFUL DESOLATION",gpu;nvdec,ingame,2022-10-26 10:34:38 @@ -703,7 +703,7 @@ 01006A30124CA000,"Chocobo GP",gpu;crash,ingame,2022-06-04 14:52:18 0100BF600BF26000,"Chocobo's Mystery Dungeon EVERY BUDDY!",slow,playable,2020-05-26 13:53:13 01000BA0132EA000,"Choices That Matter: And The Sun Went Out",,playable,2020-12-17 15:44:08 -,"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",gpu;nvdec,ingame,2020-09-28 17:58:04 +0100A1200CA3C000,"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",gpu;nvdec,ingame,2020-09-28 17:58:04 010039A008E76000,"ChromaGun",,playable,2020-05-26 12:56:42 010006800E13A000,"Chronos: Before the Ashes",UE4;gpu;nvdec,ingame,2020-12-11 22:16:35 010039700BA7E000,"Circle of Sumo",,playable,2020-05-22 12:45:21 @@ -769,7 +769,7 @@ 0100CCB01B1A0000,"COSMIC FANTASY COLLECTION",,ingame,2024-05-21 17:56:37 010067C00A776000,"Cosmic Star Heroine",,playable,2021-02-20 14:30:47 01003DD00F94A000,"COTTOn Reboot! [ コットン リブート! ]",,playable,2022-05-24 16:29:24 -,"Cotton/Guardian Saturn Tribute Games",gpu,boots,2022-11-27 21:00:51 +010077001526E000,"Cotton/Guardian Saturn Tribute Games",gpu,boots,2022-11-27 21:00:51 01000E301107A000,"Couch Co-Op Bundle Vol. 2",nvdec,playable,2022-10-02 12:04:21 0100C1E012A42000,"Country Tales",,playable,2021-06-17 16:45:39 01003370136EA000,"Cozy Grove",gpu,ingame,2023-07-30 22:22:19 @@ -830,7 +830,7 @@ 01003ED0099B0000,"Danger Mouse: The Danger Games",crash;online,boots,2022-07-22 15:49:45 0100EFA013E7C000,"Danger Scavenger",nvdec,playable,2021-04-17 15:53:04 0100417007F78000,"Danmaku Unlimited 3",,playable,2020-11-15 00:48:35 -,"Darius Cozmic Collection",,playable,2021-02-19 20:59:06 +01000330105BE000,"Darius Cozmic Collection",,playable,2021-02-19 20:59:06 010059C00BED4000,"Darius Cozmic Collection Special Edition",,playable,2022-07-22 16:26:50 010015800F93C000,"Dariusburst - Another Chronicle EX+",online,playable,2021-04-05 14:21:43 01003D301357A000,"Dark Arcana: The Carnival",gpu;slow,ingame,2022-02-19 08:52:28 @@ -859,7 +859,7 @@ 010095A011A14000,"Deadly Days",,playable,2020-11-27 13:38:55 0100BAC011928000,"Deadly Premonition 2: A Blessing In Disguise",,playable,2021-06-15 14:12:36 0100EBE00F22E000,"Deadly Premonition Origins",32-bit;nvdec,playable,2024-03-25 12:47:46 -,"Dear Magi - Mahou Shounen Gakka -",,playable,2020-11-22 16:45:16 +010015600D814000,"Dear Magi - Mahou Shounen Gakka -",,playable,2020-11-22 16:45:16 01000D60126B6000,"Death and Taxes",,playable,2020-12-15 20:27:49 010012B011AB2000,"Death Come True",nvdec,playable,2021-06-10 22:30:49 0100F3B00CF32000,"Death Coming",crash,nothing,2022-02-06 07:43:03 @@ -902,13 +902,13 @@ 010023600C704000,"Deponia",nvdec,playable,2021-01-26 17:17:19 0100ED700469A000,"Deru - The Art of Cooperation",,playable,2021-01-07 16:59:59 0100D4600D0E4000,"Descenders",gpu,ingame,2020-12-10 15:22:36 -,"Desire remaster ver.",crash,boots,2021-01-17 02:34:37 +0100D870102BC000,"Desire remaster ver.",crash,boots,2021-01-17 02:34:37 010069500DD86000,"Destiny Connect: Tick-Tock Travelers",UE4;gpu;nvdec,ingame,2020-12-16 12:20:36 01008BB011ED6000,"Destrobots",,playable,2021-03-06 14:37:05 01009E701356A000,"Destroy All Humans!",gpu;nvdec;UE4,ingame,2023-01-14 22:23:53 010030600E65A000,"Detective Dolittle",,playable,2021-03-02 14:03:59 01009C0009842000,"Detective Gallo",nvdec,playable,2022-07-24 11:51:04 -,"Detective Jinguji Saburo Prism of Eyes",,playable,2020-10-02 21:54:41 +01002D400B0F6000,"Detective Jinguji Saburo Prism of Eyes",,playable,2020-10-02 21:54:41 010007500F27C000,"Detective Pikachu™ Returns",,playable,2023-10-07 10:24:59 010031B00CF66000,"Devil Engine",,playable,2021-06-04 11:54:30 01002F000E8F2000,"Devil Kingdom",,playable,2023-01-31 08:58:44 @@ -965,7 +965,6 @@ 0100C4D00B608000,"Don't Sink",gpu,ingame,2021-02-26 15:41:11 0100751007ADA000,"Don't Starve: Nintendo Switch Edition",nvdec,playable,2022-02-05 20:43:34 010088B010DD2000,"Dongo Adventure",,playable,2022-10-04 16:22:26 -01009D901BC56000,"Donkey Kong Country™ Returns HD",gpu;crashes,ingame,2025-01-19 18:26:53 0100C1F0051B6000,"Donkey Kong Country™: Tropical Freeze",,playable,2024-08-05 16:46:10 0100F2C00F060000,"Doodle Derby",,boots,2020-12-04 22:51:48 0100416004C00000,"DOOM",gpu;slow;nvdec;online-broken,ingame,2024-09-23 15:40:07 @@ -1058,7 +1057,7 @@ 01004F000B716000,"Edna & Harvey: The Breakout – Anniversary Edition",crash;nvdec,ingame,2022-08-01 16:59:56 01002550129F0000,"Effie",,playable,2022-10-27 14:36:39 0100CC0010A46000,"Ego Protocol: Remastered",nvdec,playable,2020-12-16 20:16:35 -,"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",,playable,2020-11-12 00:11:50 +01004CC00B352000,"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",,playable,2020-11-12 00:11:50 01003AD013BD2000,"Eight Dragons",nvdec,playable,2022-10-27 14:47:28 010020A01209C000,"El Hijo - A Wild West Tale",nvdec,playable,2021-04-19 17:44:08 0100B5B00EF38000,"Elden: Path of the Forgotten",,playable,2020-12-15 00:33:19 @@ -1124,7 +1123,7 @@ 01005C10136CA000,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;crash,ingame,2021-11-06 02:57:29 010022700E7D6000,"FAR: Lone Sails",,playable,2022-09-06 16:33:05 0100C9E00FD62000,"Farabel",,playable,2020-08-03 17:47:28 -,"Farm Expert 2019 for Nintendo Switch",,playable,2020-07-09 21:42:57 +0100ECD00C806000,"Farm Expert 2019 for Nintendo Switch",,playable,2020-07-09 21:42:57 01000E400ED98000,"Farm Mystery",nvdec,playable,2022-09-06 16:46:47 010086B00BB50000,"Farm Together",,playable,2021-01-19 20:01:19 0100EB600E914000,"Farming Simulator 20",nvdec,playable,2021-06-13 10:52:44 @@ -1247,12 +1246,12 @@ 0100ECE00C0C4000,"Fury Unleashed",crash;services,ingame,2020-10-18 11:52:40 010070000ED9E000,"Fury Unleashed Demo",,playable,2020-10-08 20:09:21 0100E1F013674000,"FUSER™",nvdec;UE4,playable,2022-10-17 20:58:32 -,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec,ingame,2021-01-20 15:30:02 +0100A7A015E4C000,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec,ingame,2021-01-20 15:30:02 01003C300B274000,"Futari de! Nyanko Daisensou",,playable,2024-01-05 22:26:52 010055801134E000,"FUZE Player",online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53 0100EAD007E98000,"FUZE4 Nintendo Switch",vulkan-backend-bug,playable,2022-09-06 19:25:01 010067600F1A0000,"FuzzBall",crash,nothing,2021-03-29 20:13:21 -,"G-MODE Archives 06 The strongest ever Julia Miyamoto",,playable,2020-10-15 13:06:26 +0100275011e54000,"G-MODE Archives 06 The strongest ever Julia Miyamoto",,playable,2020-10-15 13:06:26 0100EB10108EA000,"G.I. Joe: Operation Blackout",UE4;crash,boots,2020-11-21 12:37:44 010048600B14E000,"Gal Metal",,playable,2022-07-27 20:57:48 010024700901A000,"Gal*Gun 2",nvdec;UE4,playable,2022-07-27 12:45:37 @@ -1371,7 +1370,7 @@ 01006F80082E4000,"GUILTY GEAR XX ACCENT CORE PLUS R",nvdec,playable,2021-01-13 09:28:33 01003C6008940000,"GUNBIRD for Nintendo Switch",32-bit,playable,2021-06-04 19:16:01 0100BCB00AE98000,"GUNBIRD2 for Nintendo Switch",,playable,2020-10-10 14:41:16 -,"Gunka o haita neko",gpu;nvdec,ingame,2020-08-25 12:37:56 +01003FF010312000,"Gunka o haita neko",gpu;nvdec,ingame,2020-08-25 12:37:56 010061000D318000,"Gunman Clive HD Collection",,playable,2020-10-09 12:17:35 01006D4003BCE000,"Guns, Gore and Cannoli 2",online,playable,2021-01-06 18:43:59 01008C800E654000,"Gunvolt Chronicles Luminous Avenger iX - Retail Version",,playable,2020-06-16 22:47:07 @@ -1565,7 +1564,7 @@ 0100BDC00A664000,"KAMEN RIDER CLIMAX SCRAMBLE",nvdec;ldn-untested,playable,2024-07-03 08:51:11 0100A9801180E000,"KAMEN RIDER memory of heroez / Premium Sound Edition",,playable,2022-12-06 03:14:26 010085300314E000,"KAMIKO",,playable,2020-05-13 12:48:57 -,"Kangokuto Mary Skelter Finale",audio;crash,ingame,2021-01-09 22:39:28 +010042C011736000,"Kangokuto Mary Skelter Finale",audio;crash,ingame,2021-01-09 22:39:28 01007FD00DB20000,"Katakoi Contrast - collection of branch -",nvdec,playable,2022-12-09 09:41:26 0100D7000C2C6000,"Katamari Damacy REROLL",,playable,2022-08-02 21:35:05 0100F9800EDFA000,"KATANA KAMI: A Way of the Samurai Story",slow,playable,2022-04-09 10:40:16 @@ -1582,7 +1581,7 @@ 0100FB400D832000,"KILL la KILL -IF",,playable,2020-06-09 14:47:08 010011B00910C000,"Kill The Bad Guy",,playable,2020-05-12 22:16:10 0100F2900B3E2000,"Killer Queen Black",ldn-untested;online,playable,2021-04-08 12:46:18 -,"Kin'iro no Corda Octave",,playable,2020-09-22 13:23:12 +010014A00C5E0000,"Kin'iro no Corda Octave",,playable,2020-09-22 13:23:12 010089000F0E8000,"Kine",UE4,playable,2022-09-14 14:28:37 0100E6B00FFBA000,"King Lucas",,playable,2022-09-21 19:43:23 0100B1300783E000,"King Oddball",,playable,2020-05-13 13:47:57 @@ -1613,7 +1612,7 @@ 01009EF00DDB4000,"Knockout City™",services;online-broken,boots,2022-12-09 09:48:58 0100C57019BA2000,"Koa and the Five Pirates of Mara",gpu,ingame,2024-07-11 16:14:44 01001E500401C000,"Koi DX",,playable,2020-05-11 21:37:51 -,"Koi no Hanasaku Hyakkaen",32-bit;gpu;nvdec,ingame,2020-10-03 14:17:10 +010052300F612000,"Koi no Hanasaku Hyakkaen",32-bit;gpu;nvdec,ingame,2020-10-03 14:17:10 01005D200C9AA000,"Koloro",,playable,2022-08-03 12:34:02 0100464009294000,"Kona",,playable,2022-08-03 12:48:19 010016C011AAA000,"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",,playable,2023-04-26 09:51:08 @@ -1780,8 +1779,8 @@ 0100EC000CE24000,"Mech Rage",,playable,2020-11-18 12:30:16 0100C4F005EB4000,"Mecho Tales",,playable,2022-08-04 17:03:19 0100E4600D31A000,"Mechstermination Force",,playable,2024-07-04 05:39:15 -,"Medarot Classics Plus Kabuto Ver",,playable,2020-11-21 11:31:18 -,"Medarot Classics Plus Kuwagata Ver",,playable,2020-11-21 11:30:40 +01007580124C0000,"Medarot Classics Plus Kabuto Ver",,playable,2020-11-21 11:31:18 +0100228012682000,"Medarot Classics Plus Kuwagata Ver",,playable,2020-11-21 11:30:40 0100BBC00CB9A000,"Mega Mall Story",slow,playable,2022-08-04 17:10:58 0100B0C0086B0000,"Mega Man 11",,playable,2021-04-26 12:07:53 010038E016264000,"Mega Man Battle Network Legacy Collection Vol. 1",,playable,2023-04-25 03:55:57 @@ -1798,7 +1797,7 @@ 0100B360068B2000,"Mekorama",gpu,boots,2021-06-17 16:37:21 01000FA010340000,"Melbits World",nvdec;online,menus,2021-11-26 13:51:22 0100F68019636000,"Melon Journey",,playable,2023-04-23 21:20:01 -,"Memories Off -Innocent Fille- for Dearest",,playable,2020-08-04 07:31:22 +010079C012896000,"Memories Off -Innocent Fille- for Dearest",,playable,2020-08-04 07:31:22 010062F011E7C000,"Memory Lane",UE4,playable,2022-10-05 14:31:03 0100EBE00D5B0000,"Meow Motors",UE4;gpu,ingame,2020-12-18 00:24:01 0100273008FBC000,"Mercenaries Saga Chronicles",,playable,2021-01-10 12:48:19 @@ -1874,7 +1873,7 @@ 010093A01305C000,"Monster Hunter Rise Demo",online-broken;ldn-works;demo,playable,2022-10-18 23:04:17 0100E21011446000,"Monster Hunter Stories 2: Wings of Ruin",services,ingame,2022-07-10 19:27:30 010042501329E000,"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",demo,playable,2022-11-13 22:20:26 -,"Monster Hunter XX Demo",32-bit;cpu,nothing,2020-03-22 10:12:28 +0100C51003B46000,"Monster Hunter XX Demo",32-bit;cpu,nothing,2020-03-22 10:12:28 0100C3800049C000,"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",,playable,2024-07-21 14:08:09 010088400366E000,"Monster Jam Crush It!",UE4;nvdec;online,playable,2021-04-08 19:29:27 010095C00F354000,"Monster Jam Steel Titans",crash;nvdec;UE4,menus,2021-11-14 09:45:38 @@ -1918,7 +1917,7 @@ 010035901046C000,"Mushroom Quest",,playable,2020-05-17 13:07:08 0100700006EF6000,"Mushroom Wars 2",nvdec,playable,2020-09-28 15:26:08 010046400F310000,"Music Racer",,playable,2020-08-10 08:51:23 -,"Musou Orochi 2 Ultimate",crash;nvdec,boots,2021-04-09 19:39:16 +0100153006300000,"Musou Orochi 2 Ultimate",crash;nvdec,boots,2021-04-09 19:39:16 0100F6000EAA8000,"Must Dash Amigos",,playable,2022-09-20 16:45:56 01007B6006092000,"MUSYNX",,playable,2020-05-08 14:24:43 0100C3E00ACAA000,"Mutant Football League: Dynasty Edition",online-broken,playable,2022-08-05 17:01:51 @@ -1949,7 +1948,7 @@ 0100A6F00AC70000,"NAIRI: Tower of Shirin",nvdec,playable,2020-08-09 19:49:12 010002F001220000,"NAMCO MUSEUM",ldn-untested,playable,2024-08-13 07:52:21 0100DAA00AEE6000,"NAMCO MUSEUM™ ARCADE PAC™",,playable,2021-06-07 21:44:50 -,"NAMCOT COLLECTION",audio,playable,2020-06-25 13:35:22 +010039F010E14000,"NAMCOT COLLECTION",audio,playable,2020-06-25 13:35:22 010072B00BDDE000,"Narcos: Rise of the Cartels",UE4;crash;nvdec,boots,2021-03-22 13:18:47 01006BB00800A000,"NARUTO SHIPPUDEN: Ultimate Ninja STORM 3 Full Burst",nvdec,playable,2024-06-16 14:58:05 010084D00CF5E000,"NARUTO SHIPPUDEN™: Ultimate Ninja® STORM 4 ROAD TO BORUTO",,playable,2024-06-29 13:04:22 @@ -2090,11 +2089,11 @@ 0100F9D00C186000,"Olympia Soiree",,playable,2022-12-04 21:07:12 0100A8B00E14A000,"Olympic Games Tokyo 2020 – The Official Video Game™",ldn-untested;nvdec;online,playable,2021-01-06 01:20:24 01001D600E51A000,"Omega Labyrinth Life",,playable,2021-02-23 21:03:03 -,"Omega Vampire",nvdec,playable,2020-10-17 19:15:35 +01005DE00CA34000,"Omega Vampire",nvdec,playable,2020-10-17 19:15:35 0100CDC00C40A000,"Omensight: Definitive Edition",UE4;crash;nvdec,ingame,2020-07-26 01:45:14 01006DB00D970000,"OMG Zombies!",32-bit,playable,2021-04-12 18:04:45 010014E017B14000,"OMORI",,playable,2023-01-07 20:21:02 -,"Once Upon A Coma",nvdec,playable,2020-08-01 12:09:39 +0100A5F011800000,"Once Upon A Coma",nvdec,playable,2020-08-01 12:09:39 0100BD3006A02000,"One More Dungeon",,playable,2021-01-06 09:10:58 010076600FD64000,"One Person Story",,playable,2020-07-14 11:51:02 0100774009CF6000,"ONE PIECE Pirate Warriors 3 Deluxe Edition",nvdec,playable,2020-05-10 06:23:52 @@ -2185,7 +2184,7 @@ 010062B01525C000,"Persona 4 Golden",,playable,2024-08-07 17:48:07 01005CA01580E000,"Persona 5 Royal",gpu,ingame,2024-08-17 21:45:15 010087701B092000,"Persona 5 Tactica",,playable,2024-04-01 22:21:03 -,"Persona 5: Scramble",deadlock,boots,2020-10-04 03:22:29 +0100E4F010D92000,"Persona 5: Scramble",deadlock,boots,2020-10-04 03:22:29 0100801011C3E000,"Persona® 5 Strikers",nvdec;mac-bug,playable,2023-09-26 09:36:01 010044400EEAE000,"Petoons Party",nvdec,playable,2021-03-02 21:07:58 010053401147C000,"PGA TOUR 2K21",deadlock;nvdec,ingame,2022-10-05 21:53:50 @@ -2274,7 +2273,7 @@ 0100D1C01C194000,"Powerful Pro Baseball 2024-2025",gpu,ingame,2024-08-25 06:40:48 01008E100E416000,"PowerSlave Exhumed",gpu,ingame,2023-07-31 23:19:10 010054F01266C000,"Prehistoric Dude",gpu,ingame,2020-10-12 12:38:48 -,"Pretty Princess Magical Coordinate",,playable,2020-10-15 11:43:41 +0100DB200D3E4000,"Pretty Princess Magical Coordinate",,playable,2020-10-15 11:43:41 01007F00128CC000,"Pretty Princess Party",,playable,2022-10-19 17:23:58 010009300D278000,"Preventive Strike",nvdec,playable,2022-10-06 10:55:51 0100210019428000,"Prince of Persia The Lost Crown",crash,ingame,2024-06-08 21:31:58 @@ -2295,13 +2294,13 @@ 0100ACE00DAB6000,"Project Nimbus: Complete Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43 01002980140F6000,"Project TRIANGLE STRATEGY™ Debut Demo",UE4;demo,playable,2022-10-24 21:40:27 0100BDB01150E000,"Project Warlock",,playable,2020-06-16 10:50:41 -,"Psikyo Collection Vol 1",32-bit,playable,2020-10-11 13:18:47 +01009F100BC52000,"Psikyo Collection Vol 1",32-bit,playable,2020-10-11 13:18:47 0100A2300DB78000,"Psikyo Collection Vol. 3",,ingame,2021-06-07 02:46:23 01009D400C4A8000,"Psikyo Collection Vol.2",32-bit,playable,2021-06-07 03:22:07 01007A200F2E2000,"Psikyo Shooting Stars Alpha",32-bit,playable,2021-04-13 12:03:43 0100D7400F2E4000,"Psikyo Shooting Stars Bravo",32-bit,playable,2021-06-14 12:09:07 0100EC100A790000,"PSYVARIAR DELTA",nvdec,playable,2021-01-20 13:01:46 -,"Puchitto kurasutā",Need-Update;crash;services,menus,2020-07-04 16:44:28 +0100AE700F184000,"Puchitto kurasutā",Need-Update;crash;services,menus,2020-07-04 16:44:28 0100D61010526000,"Pulstario",,playable,2022-10-06 11:02:01 01009AE00B788000,"Pumped BMX Pro",nvdec;online-broken,playable,2022-09-20 17:40:50 01006C10131F6000,"Pumpkin Jack",nvdec;UE4,playable,2022-10-13 12:52:32 @@ -2326,7 +2325,7 @@ 0100DCF00F13A000,"Queen's Quest 4: Sacred Truce",nvdec,playable,2022-10-13 12:59:21 0100492012378000,"Quell",gpu,ingame,2021-06-11 15:59:53 01001DE005012000,"Quest of Dungeons",,playable,2021-06-07 10:29:22 -,"QuietMansion2",,playable,2020-09-03 14:59:35 +010067D011E68000,"QuietMansion2",,playable,2020-09-03 14:59:35 0100AF100EE76000,"Quiplash 2 InterLASHional: The Say Anything Party Game!",online-working,playable,2022-10-19 17:43:45 0100E5400BE64000,"R-Type Dimensions EX",,playable,2020-10-09 12:04:43 0100F930136B6000,"R-Type® Final 2",slow;nvdec;UE4,ingame,2022-10-30 21:46:29 @@ -2384,7 +2383,7 @@ 01007A800D520000,"Refunct",UE4,playable,2020-12-15 22:46:21 0100FDF0083A6000,"Regalia: Of Men and Monarchs - Royal Edition",,playable,2022-08-11 12:24:01 01005FD00F15A000,"Regions of Ruin",,playable,2020-08-05 11:38:58 -,"Reine des Fleurs",cpu;crash,boots,2020-09-27 18:50:39 +0100B5800C0E4000,"Reine des Fleurs",cpu;crash,boots,2020-09-27 18:50:39 0100F1900B144000,"REKT! High Octane Stunts",online,playable,2020-09-28 12:33:56 01002AD013C52000,"Relicta",nvdec;UE4,playable,2022-10-31 12:48:33 010095900B436000,"RemiLore",,playable,2021-06-03 18:58:15 @@ -2496,7 +2495,7 @@ 01002DF00F76C000,"SAMURAI SHODOWN",UE4;crash;nvdec,menus,2020-09-06 02:17:00 0100F6800F48E000,"SAMURAI SHODOWN NEOGEO COLLECTION",nvdec,playable,2021-06-14 17:12:56 0100B6501A360000,"Samurai Warrior",,playable,2023-02-27 18:42:38 -,"Sangoku Rensenki ~Otome no Heihou!~",gpu;nvdec,ingame,2020-10-17 19:13:14 +01000EA00B23C000,"Sangoku Rensenki ~Otome no Heihou!~",gpu;nvdec,ingame,2020-10-17 19:13:14 0100A4700BC98000,"Satsujin Tantei Jack the Ripper",,playable,2021-06-21 16:32:54 0100F0000869C000,"Saturday Morning RPG",nvdec,playable,2022-08-12 12:41:50 01006EE00380C000,"Sausage Sports Club",gpu,ingame,2021-01-10 05:37:17 @@ -2533,7 +2532,7 @@ 010054400D2E6000,"SEGA AGES Virtua Racing",online-broken,playable,2023-01-29 17:08:39 01001E700AC60000,"SEGA AGES Wonder Boy: Monster Land",online,playable,2021-05-05 16:28:25 0100B3C014BDA000,"SEGA Genesis™ – Nintendo Switch Online",crash;regression,nothing,2022-04-11 07:27:21 -,"SEGA Mega Drive Classics",online,playable,2021-01-05 11:08:00 +0100F7300B24E000,"SEGA Mega Drive Classics",online,playable,2021-01-05 11:08:00 01009840046BC000,"Semispheres",,playable,2021-01-06 23:08:31 0100D1800D902000,"SENRAN KAGURA Peach Ball",,playable,2021-06-03 15:12:10 0100E0C00ADAC000,"SENRAN KAGURA Reflexions",,playable,2020-03-23 19:15:23 @@ -2586,7 +2585,7 @@ 0100B2E00F13E000,"Shipped",,playable,2020-11-21 14:22:32 01000E800FCB4000,"Ships",,playable,2021-06-11 16:14:37 01007430122D0000,"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",nvdec,playable,2022-10-20 11:44:36 -,"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",cpu;crash,boots,2020-09-27 19:01:25 +010027300A660000,"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",cpu;crash,boots,2020-09-27 19:01:25 01000244016BAE00,"Shiro0",gpu,ingame,2024-01-13 08:54:39 0100CCE00DDB6000,"Shoot 1UP DX",,playable,2020-12-13 12:32:47 01001180021FA000,"Shovel Knight: Specter of Torment",,playable,2020-05-30 08:34:17 @@ -2627,7 +2626,7 @@ 0100C52011460000,"Sky: Children of the Light",cpu;online-broken,nothing,2023-02-23 10:57:10 010041C01014E000,"Skybolt Zack",,playable,2021-04-12 18:28:00 0100A0A00D1AA000,"SKYHILL",,playable,2021-03-05 15:19:11 -,"Skylanders Imaginators",crash;services,boots,2020-05-30 18:49:18 +0100CCC0002E6000,"Skylanders Imaginators",crash;services,boots,2020-05-30 18:49:18 010021A00ABEE000,"SKYPEACE",,playable,2020-05-29 14:14:30 0100EA400BF44000,"SkyScrappers",,playable,2020-05-28 22:11:25 0100F3C00C400000,"SkyTime",slow,ingame,2020-05-30 09:24:51 @@ -2798,7 +2797,7 @@ 0100681011B56000,"Struggling",,playable,2020-10-15 20:37:03 0100AF000B4AE000,"Stunt Kite Party",nvdec,playable,2021-01-25 17:16:56 0100C5500E7AE000,"STURMWIND EX",audio;32-bit,playable,2022-09-16 12:01:39 -,"Subarashiki Kono Sekai -Final Remix-",services;slow,ingame,2020-02-10 16:21:51 +01001C1009892000,"Subarashiki Kono Sekai -Final Remix-",services;slow,ingame,2020-02-10 16:21:51 010001400E474000,"Subdivision Infinity DX",UE4;crash,boots,2021-03-03 14:26:46 0100E6400BCE8000,"Sublevel Zero Redux",,playable,2022-09-16 12:30:03 0100EDA00D866000,"Submerged",nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01 @@ -2847,9 +2846,9 @@ 0100284007D6C000,"Super One More Jump",,playable,2022-08-17 16:47:47 01001F90122B2000,"Super Punch Patrol",,playable,2024-07-12 19:49:02 0100331005E8E000,"Super Putty Squad",gpu;32-bit,ingame,2024-04-29 15:51:54 -,"SUPER ROBOT WARS T",online,playable,2021-03-25 11:00:40 -,"SUPER ROBOT WARS V",online,playable,2020-06-23 12:56:37 -,"SUPER ROBOT WARS X",online,playable,2020-08-05 19:18:51 +01006C900CC60000,"SUPER ROBOT WARS T",online,playable,2021-03-25 11:00:40 +0100CA400E300000,"SUPER ROBOT WARS V",online,playable,2020-06-23 12:56:37 +010026800E304000,"SUPER ROBOT WARS X",online,playable,2020-08-05 19:18:51 01004CF00A60E000,"Super Saurio Fly",nvdec,playable,2020-08-06 13:12:14 010039700D200000,"Super Skelemania",,playable,2020-06-07 22:59:50 01006A800016E000,"Super Smash Bros.™ Ultimate",gpu;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21 @@ -3015,7 +3014,7 @@ 010085A00C5E8000,"The Lord of the Rings: Adventure Card Game - Definitive Edition",online-broken,menus,2022-09-16 15:19:32 01008A000A404000,"The Lost Child",nvdec,playable,2021-02-23 15:44:20 0100BAB00A116000,"The Low Road",,playable,2021-02-26 13:23:22 -,"The Mahjong",Needs Update;crash;services,nothing,2021-04-01 22:06:22 +01005F3006AFE000,"The Mahjong",Needs Update;crash;services,nothing,2021-04-01 22:06:22 0100DC300AC78000,"The Messenger",,playable,2020-03-22 13:51:37 0100DEC00B2BC000,"The Midnight Sanctuary",nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32 0100F1B00B456000,"The MISSING: J.J. Macfield and the Island of Memories",,playable,2022-08-22 19:36:18 @@ -3061,7 +3060,7 @@ 010064E00ECBC000,"The Unicorn Princess",,playable,2022-09-16 16:20:56 0100BCF00E970000,"The Vanishing of Ethan Carter",UE4,playable,2021-06-09 17:14:47 0100D0500B0A6000,"The VideoKid",nvdec,playable,2021-01-06 09:28:24 -,"The Voice",services,menus,2020-07-28 20:48:49 +01008CF00BA38000,"The Voice",services,menus,2020-07-28 20:48:49 010056E00B4F4000,"The Walking Dead: A New Frontier",,playable,2022-09-21 13:40:48 010099100B6AC000,"The Walking Dead: Season Two",,playable,2020-08-09 12:57:06 010029200B6AA000,"The Walking Dead: The Complete First Season",,playable,2021-06-04 13:10:56 @@ -3377,7 +3376,7 @@ 010022F00DA66000,"Yooka-Laylee and the Impossible Lair",,playable,2021-03-05 17:32:21 01006000040C2000,"Yoshi’s Crafted World™",gpu;audout,ingame,2021-08-30 13:25:51 0100AE800C9C6000,"Yoshi’s Crafted World™ Demo",gpu,boots,2020-12-16 14:57:40 -,"Yoshiwara Higanbana Kuon no Chigiri",nvdec,playable,2020-10-17 19:14:46 +0100BBA00B23E000,"Yoshiwara Higanbana Kuon no Chigiri",nvdec,playable,2020-10-17 19:14:46 01003A400C3DA800,"YouTube",,playable,2024-06-08 05:24:10 00100A7700CCAA40,"Youtubers Life00",nvdec,playable,2022-09-03 14:56:19 0100E390124D8000,"Ys IX: Monstrum Nox",,playable,2022-06-12 04:14:42 @@ -3387,7 +3386,7 @@ 01002D60188DE000,"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",crash,ingame,2023-03-17 01:54:01 010037D00DBDC000,"YU-NO: A girl who chants love at the bound of this world.",nvdec,playable,2021-01-26 17:03:52 0100B56011502000,"Yumeutsutsu Re:After",,playable,2022-11-20 16:09:06 -,"Yunohana Spring! - Mellow Times -",audio;crash,menus,2020-09-27 19:27:40 +0100DE200C0DA000,"Yunohana Spring! - Mellow Times -",audio;crash,menus,2020-09-27 19:27:40 0100307011C44000,"Yuppie Psycho: Executive Edition",crash,ingame,2020-12-11 10:37:06 0100FC900963E000,"Yuri",,playable,2021-06-11 13:08:50 010092400A678000,"Zaccaria Pinball",online-broken,playable,2022-09-03 15:44:28 @@ -3398,7 +3397,7 @@ 0100AAC00E692000,"Zenith",,playable,2022-09-17 09:57:02 0100A6A00894C000,"ZERO GUNNER 2- for Nintendo Switch",,playable,2021-01-04 20:17:14 01004B001058C000,"Zero Strain",services;UE4,menus,2021-11-10 07:48:32 -,"Zettai kaikyu gakuen",gpu;nvdec,ingame,2020-08-25 15:15:54 +010021300F69E000,"Zettai kaikyu gakuen",gpu;nvdec,ingame,2020-08-25 15:15:54 0100D7B013DD0000,"Ziggy the Chaser",,playable,2021-02-04 20:34:27 010086700EF16000,"ZikSquare",gpu,ingame,2021-11-06 02:02:48 010069C0123D8000,"Zoids Wild Blast Unleashed",nvdec,playable,2022-10-15 11:26:59 @@ -3410,7 +3409,7 @@ 0100CD300A1BA000,"Zombillie",,playable,2020-07-23 17:42:23 01001EE00A6B0000,"Zotrix: Solar Division",,playable,2021-06-07 20:34:05 0100B9B00C6A4000,"この世の果てで恋を唄う少女YU-NO",audio,ingame,2021-01-22 07:00:16 -,"スーパーファミコン Nintendo Switch Online",slow,ingame,2020-03-14 05:48:38 +0100E8600C504000,"スーパーファミコン Nintendo Switch Online",slow,ingame,2020-03-14 05:48:38 01000BB01CB8A000,"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",,nothing,2024-09-28 07:03:14 010065500B218000,"メモリーズオフ - Innocent Fille",,playable,2022-12-02 17:36:48 010032400E700000,"二ノ国 白き聖灰の女王",services;32-bit,menus,2023-04-16 17:11:06 -- 2.47.1 From b360f4e72165811ee33588c50d4680b91ba06c28 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 20 Jan 2025 09:28:48 -0600 Subject: [PATCH 380/722] UI: Dump DLC RomFS. You can access this in the Manage DLC screen, it's the new button on each DLC line. Closes #548 --- src/Ryujinx/Common/ApplicationHelper.cs | 137 ++++++++++++++++++ .../DownloadableContentManagerWindow.axaml | 17 ++- .../DownloadableContentManagerWindow.axaml.cs | 15 ++ 3 files changed, 168 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx/Common/ApplicationHelper.cs b/src/Ryujinx/Common/ApplicationHelper.cs index 7db933ed6..88a991a3d 100644 --- a/src/Ryujinx/Common/ApplicationHelper.cs +++ b/src/Ryujinx/Common/ApplicationHelper.cs @@ -295,6 +295,143 @@ namespace Ryujinx.Ava.Common }; extractorThread.Start(); } + + public static void ExtractAoc(string destination, NcaSectionType ncaSectionType, string updateFilePath, string updateName) + { + var cancellationToken = new CancellationTokenSource(); + + UpdateWaitWindow waitingDialog = new( + RyujinxApp.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), + LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogNcaExtractionMessage, ncaSectionType, Path.GetFileName(updateFilePath)), + cancellationToken); + + Thread extractorThread = new(() => + { + Dispatcher.UIThread.Post(waitingDialog.Show); + + using FileStream file = new(updateFilePath, FileMode.Open, FileAccess.Read); + + Nca publicDataNca = null; + + string extension = Path.GetExtension(updateFilePath).ToLower(); + if (extension is ".nsp") + { + var pfsTemp = new PartitionFileSystem(); + pfsTemp.Initialize(file.AsStorage()).ThrowIfFailure(); + IFileSystem pfs = pfsTemp; + + foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) + { + using var ncaFile = new UniqueRef(); + + pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); + + Nca nca = new(_virtualFileSystem.KeySet, ncaFile.Get.AsStorage()); + if (nca.Header.ContentType is NcaContentType.PublicData && nca.SectionExists(NcaSectionType.Data)) + { + publicDataNca = nca; + } + } + } + + if (publicDataNca is null) + { + Logger.Error?.Print(LogClass.Application, "Extraction failure. The NCA was not present in the selected file"); + + Dispatcher.UIThread.InvokeAsync(async () => + { + waitingDialog.Close(); + + await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogNcaExtractionMainNcaNotFoundErrorMessage]); + }); + + return; + } + + IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks + ? IntegrityCheckLevel.ErrorOnInvalid + : IntegrityCheckLevel.None; + + int index = Nca.GetSectionIndexFromType(ncaSectionType, publicDataNca.Header.ContentType); + + try + { + IFileSystem ncaFileSystem = publicDataNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid); + + FileSystemClient fsClient = _horizonClient.Fs; + + string source = DateTime.Now.ToFileTime().ToString()[10..]; + string output = DateTime.Now.ToFileTime().ToString()[10..]; + + using var uniqueSourceFs = new UniqueRef(ncaFileSystem); + using var uniqueOutputFs = new UniqueRef(new LocalFileSystem(destination)); + + fsClient.Register(source.ToU8Span(), ref uniqueSourceFs.Ref); + fsClient.Register(output.ToU8Span(), ref uniqueOutputFs.Ref); + + (Result? resultCode, bool canceled) = CopyDirectory(fsClient, $"{source}:/", $"{output}:/", cancellationToken.Token); + + if (!canceled) + { + if (resultCode.Value.IsFailure()) + { + Logger.Error?.Print(LogClass.Application, $"LibHac returned error code: {resultCode.Value.ErrorCode}"); + + Dispatcher.UIThread.InvokeAsync(async () => + { + waitingDialog.Close(); + + await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogNcaExtractionCheckLogErrorMessage]); + }); + } + else if (resultCode.Value.IsSuccess()) + { + Dispatcher.UIThread.Post(waitingDialog.Close); + + NotificationHelper.ShowInformation( + RyujinxApp.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), + $"{updateName}\n\n{LocaleManager.Instance[LocaleKeys.DialogNcaExtractionSuccessMessage]}"); + } + } + + fsClient.Unmount(source.ToU8Span()); + fsClient.Unmount(output.ToU8Span()); + } + catch (ArgumentException ex) + { + Logger.Error?.Print(LogClass.Application, $"{ex.Message}"); + + Dispatcher.UIThread.InvokeAsync(async () => + { + waitingDialog.Close(); + + await ContentDialogHelper.CreateErrorDialog(ex.Message); + }); + } + }) + { + Name = "GUI.NcaSectionExtractorThread", + IsBackground = true, + }; + extractorThread.Start(); + } + + public static async Task ExtractAoc(IStorageProvider storageProvider, NcaSectionType ncaSectionType, + string updateFilePath, string updateName) + { + var result = await storageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + { + Title = LocaleManager.Instance[LocaleKeys.FolderDialogExtractTitle], + AllowMultiple = false, + }); + + if (result.Count == 0) + { + return; + } + + ExtractAoc(result[0].Path.LocalPath, ncaSectionType, updateFilePath, updateName); + } public static async Task ExtractSection(IStorageProvider storageProvider, NcaSectionType ncaSectionType, string titleFilePath, string titleName, int programIndex = 0) diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml index 8efcfcadc..ab057e856 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml +++ b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml @@ -7,6 +7,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" + xmlns:pi="using:Projektanker.Icons.Avalonia" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models" Width="500" @@ -89,7 +90,12 @@ - + + + + + + @@ -119,6 +125,15 @@ Spacing="10" Orientation="Horizontal" HorizontalAlignment="Right"> + @@ -168,8 +167,7 @@ Grid.Column="1" MinWidth="90" Margin="10,0,0,0" - ToolTip.Tip="{ext:Locale AddAutoloadDirTooltip}" - Click="AddAutoloadDirButton_OnClick"> + ToolTip.Tip="{ext:Locale AddAutoloadDirTooltip}"> diff --git a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs index 3532e1855..9707b3193 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml.cs @@ -1,12 +1,17 @@ +using Avalonia.Collections; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Platform.Storage; using Avalonia.VisualTree; +using Gommon; +using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.Utilities; using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Views.Settings { @@ -18,31 +23,39 @@ namespace Ryujinx.Ava.UI.Views.Settings { InitializeComponent(); ShowTitleBarBox.IsVisible = OperatingSystem.IsWindows(); + AddGameDirButton.Command = + Commands.Create(() => AddDirButton(GameDirPathBox, ViewModel.GameDirectories, true)); + AddAutoloadDirButton.Command = + Commands.Create(() => AddDirButton(AutoloadDirPathBox, ViewModel.AutoloadDirectories, false)); } - private async void AddGameDirButton_OnClick(object sender, RoutedEventArgs e) + private async Task AddDirButton(TextBox addDirBox, AvaloniaList directories, bool isGameList) { - string path = GameDirPathBox.Text; + string path = addDirBox.Text; - if (!string.IsNullOrWhiteSpace(path) && Directory.Exists(path) && !ViewModel.GameDirectories.Contains(path)) + if (!string.IsNullOrWhiteSpace(path) && Directory.Exists(path) && !directories.Contains(path)) { - ViewModel.GameDirectories.Add(path); - ViewModel.GameDirectoryChanged = true; + directories.Add(path); + + addDirBox.Clear(); + + if (isGameList) + ViewModel.GameDirectoryChanged = true; + else + ViewModel.AutoloadDirectoryChanged = true; } else { - if (this.GetVisualRoot() is Window window) - { - var result = await window.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions - { - AllowMultiple = false, - }); + Optional folder = await RyujinxApp.MainWindow.ViewModel.StorageProvider.OpenSingleFolderPickerAsync(); - if (result.Count > 0) - { - ViewModel.GameDirectories.Add(result[0].Path.LocalPath); + if (folder.HasValue) + { + directories.Add(folder.Value.Path.LocalPath); + + if (isGameList) ViewModel.GameDirectoryChanged = true; - } + else + ViewModel.AutoloadDirectoryChanged = true; } } } @@ -63,33 +76,6 @@ namespace Ryujinx.Ava.UI.Views.Settings } } - private async void AddAutoloadDirButton_OnClick(object sender, RoutedEventArgs e) - { - string path = AutoloadDirPathBox.Text; - - if (!string.IsNullOrWhiteSpace(path) && Directory.Exists(path) && !ViewModel.AutoloadDirectories.Contains(path)) - { - ViewModel.AutoloadDirectories.Add(path); - ViewModel.AutoloadDirectoryChanged = true; - } - else - { - if (this.GetVisualRoot() is Window window) - { - var result = await window.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions - { - AllowMultiple = false, - }); - - if (result.Count > 0) - { - ViewModel.AutoloadDirectories.Add(result[0].Path.LocalPath); - ViewModel.AutoloadDirectoryChanged = true; - } - } - } - } - private void RemoveAutoloadDirButton_OnClick(object sender, RoutedEventArgs e) { int oldIndex = AutoloadDirsList.SelectedIndex; -- 2.47.1 From 9f53b0749160ffdb93837f8a501416faf440ac49 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 22 Jan 2025 08:52:21 -0600 Subject: [PATCH 403/722] misc: chore: Fix shader cache & CPU cache being in different folders on non-Windows fixes #565 --- src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs index 3a02eb615..b50ea174d 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs @@ -118,7 +118,7 @@ namespace Ryujinx.Graphics.Gpu.Shader private static string GetDiskCachePath() { return GraphicsConfig.EnableShaderCache && GraphicsConfig.TitleId != null - ? Path.Combine(AppDataManager.GamesDirPath, GraphicsConfig.TitleId, "cache", "shader") + ? Path.Combine(AppDataManager.GamesDirPath, GraphicsConfig.TitleId.ToLower(), "cache", "shader") : null; } -- 2.47.1 From 13d411e4deae65c8ab3e155643037ddb86767594 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 22 Jan 2025 08:54:39 -0600 Subject: [PATCH 404/722] misc: chore: also ToLower the titleID for the OpenShaderDirectory button --- src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index 0d4b4133d..de95be387 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -251,7 +251,7 @@ namespace Ryujinx.Ava.UI.Controls { if (sender is MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel }) { - string shaderCacheDir = Path.Combine(AppDataManager.GamesDirPath, viewModel.SelectedApplication.IdString, "cache", "shader"); + string shaderCacheDir = Path.Combine(AppDataManager.GamesDirPath, viewModel.SelectedApplication.IdString.ToLower(), "cache", "shader"); if (!Directory.Exists(shaderCacheDir)) { -- 2.47.1 From 069f630776ca5c3a6bd1023eba42035a33dd7ba9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 22 Jan 2025 18:00:14 -0600 Subject: [PATCH 405/722] docs: compat: boots: ENDER MAGNOLIA: Bloom in the Mist --- docs/compatibility.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/compatibility.csv b/docs/compatibility.csv index e26d36ecc..570c93618 100644 --- a/docs/compatibility.csv +++ b/docs/compatibility.csv @@ -1070,6 +1070,7 @@ 010017B0102A8000,"Emma: Lost in Memories",nvdec,playable,2021-01-28 16:19:10 010068300E08E000,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo -",gpu;nvdec,ingame,2022-11-20 16:18:45 01007A4008486000,"Enchanting Mahjong Match",gpu,ingame,2020-04-17 22:01:31 +0100EF901E552000,"ENDER MAGNOLIA: Bloom in the Mist",deadlock,boots,2025-01-22 17:59:00 01004F3011F92000,"Endless Fables: Dark Moor",gpu;nvdec,ingame,2021-03-07 15:31:03 010067B017588000,"Endless Ocean™ Luminous",services-horizon;crash,ingame,2024-05-30 02:05:57 0100B8700BD14000,"Energy Cycle Edge",services,ingame,2021-11-30 05:02:31 -- 2.47.1 From c03cd50fa3823daf4188627d0172918244ffe107 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 22 Jan 2025 19:53:39 -0600 Subject: [PATCH 406/722] UI: Add the ability to change a DualSense/DualShock 4's LED color. Not functional yet. This is the UI & persistence side of #572. --- .../GenericControllerInputConfig.cs | 5 +++ .../Hid/Controller/LedConfigController.cs | 15 +++++++ src/Ryujinx.Input.SDL2/SDL2Gamepad.cs | 6 +++ src/Ryujinx.Input/GamepadFeaturesFlag.cs | 5 +++ .../UI/Models/Input/GamepadInputConfig.cs | 43 ++++++++++++++++++- .../Input/ControllerInputViewModel.cs | 2 +- .../UI/ViewModels/Input/InputViewModel.cs | 2 + .../UI/Views/Input/ControllerInputView.axaml | 32 ++++++++++++++ .../Views/Input/ControllerInputView.axaml.cs | 3 -- .../Configuration/ConfigurationFileFormat.cs | 2 +- .../ConfigurationState.Migration.cs | 24 +++++++---- 11 files changed, 125 insertions(+), 14 deletions(-) create mode 100644 src/Ryujinx.Common/Configuration/Hid/Controller/LedConfigController.cs diff --git a/src/Ryujinx.Common/Configuration/Hid/Controller/GenericControllerInputConfig.cs b/src/Ryujinx.Common/Configuration/Hid/Controller/GenericControllerInputConfig.cs index e6fe74d53..fbb19767c 100644 --- a/src/Ryujinx.Common/Configuration/Hid/Controller/GenericControllerInputConfig.cs +++ b/src/Ryujinx.Common/Configuration/Hid/Controller/GenericControllerInputConfig.cs @@ -78,5 +78,10 @@ namespace Ryujinx.Common.Configuration.Hid.Controller /// Controller Rumble Settings /// public RumbleConfigController Rumble { get; set; } + + /// + /// Controller LED Settings + /// + public LedConfigController Led { get; set; } } } diff --git a/src/Ryujinx.Common/Configuration/Hid/Controller/LedConfigController.cs b/src/Ryujinx.Common/Configuration/Hid/Controller/LedConfigController.cs new file mode 100644 index 000000000..21727d62e --- /dev/null +++ b/src/Ryujinx.Common/Configuration/Hid/Controller/LedConfigController.cs @@ -0,0 +1,15 @@ +namespace Ryujinx.Common.Configuration.Hid.Controller +{ + public class LedConfigController + { + /// + /// Packed RGB int of the color + /// + public uint LedColor { get; set; } + + /// + /// Enable LED color changing by the emulator + /// + public bool EnableLed { get; set; } + } +} diff --git a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs index 12bfab4bb..ed22c3661 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs @@ -1,6 +1,7 @@ using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.Logging; +using SDL2; using System; using System.Collections.Generic; using System.Numerics; @@ -118,6 +119,11 @@ namespace Ryujinx.Input.SDL2 result |= GamepadFeaturesFlag.Rumble; } + if (SDL_GameControllerHasLED(_gamepadHandle) == SDL_bool.SDL_TRUE) + { + result |= GamepadFeaturesFlag.Led; + } + return result; } diff --git a/src/Ryujinx.Input/GamepadFeaturesFlag.cs b/src/Ryujinx.Input/GamepadFeaturesFlag.cs index 69ec23686..52e8519d1 100644 --- a/src/Ryujinx.Input/GamepadFeaturesFlag.cs +++ b/src/Ryujinx.Input/GamepadFeaturesFlag.cs @@ -24,5 +24,10 @@ namespace Ryujinx.Input /// Also named sixaxis /// Motion, + + /// + /// The LED on the back of modern PlayStation controllers (DualSense & DualShock 4). + /// + Led, } } diff --git a/src/Ryujinx/UI/Models/Input/GamepadInputConfig.cs b/src/Ryujinx/UI/Models/Input/GamepadInputConfig.cs index 833670bdc..ea7dd34c3 100644 --- a/src/Ryujinx/UI/Models/Input/GamepadInputConfig.cs +++ b/src/Ryujinx/UI/Models/Input/GamepadInputConfig.cs @@ -1,3 +1,4 @@ +using Avalonia.Media; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; @@ -387,6 +388,30 @@ namespace Ryujinx.Ava.UI.Models.Input } } + private bool _enableLedChanging; + + public bool EnableLedChanging + { + get => _enableLedChanging; + set + { + _enableLedChanging = value; + OnPropertyChanged(); + } + } + + private Color _ledColor; + + public Color LedColor + { + get => _ledColor; + set + { + _ledColor = value; + OnPropertyChanged(); + } + } + private bool _enableMotion; public bool EnableMotion { @@ -483,12 +508,23 @@ namespace Ryujinx.Ava.UI.Models.Input WeakRumble = controllerInput.Rumble.WeakRumble; StrongRumble = controllerInput.Rumble.StrongRumble; } + + if (controllerInput.Led != null) + { + EnableLedChanging = controllerInput.Led.EnableLed; + uint rawColor = controllerInput.Led.LedColor; + byte alpha = (byte)(rawColor >> 24); + byte red = (byte)(rawColor >> 16); + byte green = (byte)(rawColor >> 8); + byte blue = (byte)(rawColor % 256); + LedColor = new Color(alpha, red, green, blue); + } } } public InputConfig GetConfig() { - var config = new StandardControllerInputConfig + StandardControllerInputConfig config = new() { Id = Id, Backend = InputBackendType.GamepadSDL2, @@ -540,6 +576,11 @@ namespace Ryujinx.Ava.UI.Models.Input WeakRumble = WeakRumble, StrongRumble = StrongRumble, }, + Led = new LedConfigController + { + EnableLed = EnableLedChanging, + LedColor = LedColor.ToUInt32() + }, Version = InputConfig.CurrentVersion, DeadzoneLeft = DeadzoneLeft, DeadzoneRight = DeadzoneRight, diff --git a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs index 482fe2981..0380ef598 100644 --- a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs @@ -37,7 +37,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input [ObservableProperty] private SvgImage _image; - public readonly InputViewModel ParentModel; + public InputViewModel ParentModel { get; } public ControllerInputViewModel(InputViewModel model, GamepadInputConfig config) { diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 05f479d9f..7fda4e2d0 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -68,6 +68,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool IsKeyboard => !IsController; public bool IsRight { get; set; } public bool IsLeft { get; set; } + + public bool HasLed => SelectedGamepad.Features.HasFlag(GamepadFeaturesFlag.Led); public bool IsModified { get; set; } public event Action NotifyChangesEvent; diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml index 7daf23eb6..73f74e36f 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml @@ -4,6 +4,7 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels.Input" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" @@ -486,6 +487,37 @@ + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs index ee84fbc37..52a6d51b9 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs @@ -4,14 +4,11 @@ using Avalonia.Controls.Primitives; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.LogicalTree; -using DiscordRPC; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels.Input; using Ryujinx.Common.Configuration.Hid.Controller; -using Ryujinx.Common.Logging; using Ryujinx.Input; using Ryujinx.Input.Assigner; -using System; using StickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId; namespace Ryujinx.Ava.UI.Views.Input diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs index 6d3570850..4bbc5e622 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Ava.Utilities.Configuration /// /// The current version of the file format /// - public const int CurrentVersion = 60; + public const int CurrentVersion = 61; /// /// Version of the configuration file format diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 943aab513..521780e94 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -263,15 +263,12 @@ namespace Ryujinx.Ava.Utilities.Configuration }), (30, static cff => { - foreach (InputConfig config in cff.InputConfig) + foreach (StandardControllerInputConfig config in cff.InputConfig.OfType()) { - if (config is StandardControllerInputConfig controllerConfig) + config.Rumble = new RumbleConfigController { - controllerConfig.Rumble = new RumbleConfigController - { - EnableRumble = false, StrongRumble = 1f, WeakRumble = 1f, - }; - } + EnableRumble = false, StrongRumble = 1f, WeakRumble = 1f, + }; } }), (31, static cff => cff.BackendThreading = BackendThreading.Auto), @@ -416,7 +413,18 @@ namespace Ryujinx.Ava.Utilities.Configuration // so as a compromise users who want to use it will simply need to re-enable it once after updating. cff.IgnoreApplet = false; }), - (60, static cff => cff.StartNoUI = false) + (60, static cff => cff.StartNoUI = false), + (61, static cff => + { + foreach (StandardControllerInputConfig config in cff.InputConfig.OfType()) + { + config.Led = new LedConfigController + { + EnableLed = false, + LedColor = 328189 + }; + } + }) ); } } -- 2.47.1 From 9c8055440e1f4eeaa6eeb6b3bfb107e1389f29ac Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 22 Jan 2025 23:58:11 -0600 Subject: [PATCH 407/722] HLE: TryAdd firmware NCAs --- src/Ryujinx.HLE/FileSystem/ContentManager.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.HLE/FileSystem/ContentManager.cs b/src/Ryujinx.HLE/FileSystem/ContentManager.cs index ec0f58b01..a87453d00 100644 --- a/src/Ryujinx.HLE/FileSystem/ContentManager.cs +++ b/src/Ryujinx.HLE/FileSystem/ContentManager.cs @@ -710,9 +710,8 @@ namespace Ryujinx.HLE.FileSystem { updateNcasItem.Add((nca.Header.ContentType, entry.FullName)); } - else + else if (updateNcas.TryAdd(nca.Header.TitleId, new List<(NcaContentType, string)>())) { - updateNcas.Add(nca.Header.TitleId, new List<(NcaContentType, string)>()); updateNcas[nca.Header.TitleId].Add((nca.Header.ContentType, entry.FullName)); } } @@ -898,9 +897,8 @@ namespace Ryujinx.HLE.FileSystem { updateNcasItem.Add((nca.Header.ContentType, entry.FullPath)); } - else + else if (updateNcas.TryAdd(nca.Header.TitleId, new List<(NcaContentType, string)>())) { - updateNcas.Add(nca.Header.TitleId, new List<(NcaContentType, string)>()); updateNcas[nca.Header.TitleId].Add((nca.Header.ContentType, entry.FullPath)); } -- 2.47.1 From c140e9b23cbd16b583a9c1bf2b1531a63d065367 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 23 Jan 2025 00:48:42 -0600 Subject: [PATCH 408/722] UI: Localize LED color & hide it until it's functional Also moved IgnoreApplet to the System config section object. --- src/Ryujinx/Assets/locales.json | 27 ++++++++++++++++++- src/Ryujinx/Headless/Options.cs | 2 +- src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 3 +-- .../UI/ViewModels/Input/InputViewModel.cs | 5 ++-- .../UI/ViewModels/SettingsViewModel.cs | 10 +++---- .../UI/Views/Input/ControllerInputView.axaml | 2 +- .../ConfigurationState.Migration.cs | 2 +- .../Configuration/ConfigurationState.Model.cs | 14 +++++----- .../Configuration/ConfigurationState.cs | 4 +-- 9 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 9117a553b..8a101d733 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -7622,6 +7622,31 @@ "zh_TW": "陀螺儀無感帶:" } }, + { + "ID": "ControllerSettingsLedColor", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Custom LED", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "ControllerSettingsSave", "Translations": { @@ -22973,4 +22998,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index 0d7e46285..f527e9811 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -149,7 +149,7 @@ namespace Ryujinx.Headless IgnoreMissingServices = configurationState.System.IgnoreMissingServices; if (NeedsOverride(nameof(IgnoreControllerApplet))) - IgnoreControllerApplet = configurationState.IgnoreApplet; + IgnoreControllerApplet = configurationState.System.IgnoreApplet; return; diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index a2cac35c7..d2fad58ac 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -6,7 +6,6 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.Ava.UI.ViewModels.Input; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; @@ -42,7 +41,7 @@ namespace Ryujinx.Ava.UI.Applet bool okPressed = false; - if (ConfigurationState.Instance.IgnoreApplet) + if (ConfigurationState.Instance.System.IgnoreApplet) return false; Dispatcher.UIThread.InvokeAsync(async () => diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 7fda4e2d0..3d1bd5f4a 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -68,8 +68,9 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool IsKeyboard => !IsController; public bool IsRight { get; set; } public bool IsLeft { get; set; } - - public bool HasLed => SelectedGamepad.Features.HasFlag(GamepadFeaturesFlag.Led); + + public bool HasLed => false; //temporary + //SelectedGamepad.Features.HasFlag(GamepadFeaturesFlag.Led); public bool IsModified { get; set; } public event Action NotifyChangesEvent; diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 2678bbf98..b2311cfc7 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -488,7 +488,6 @@ namespace Ryujinx.Ava.UI.ViewModels EnableDiscordIntegration = config.EnableDiscordIntegration; CheckUpdatesOnStart = config.CheckUpdatesOnStart; ShowConfirmExit = config.ShowConfirmExit; - IgnoreApplet = config.IgnoreApplet; RememberWindowState = config.RememberWindowState; ShowTitleBar = config.ShowTitleBar; HideCursor = (int)config.HideCursor.Value; @@ -532,6 +531,7 @@ namespace Ryujinx.Ava.UI.ViewModels EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks; DramSize = config.System.DramSize; IgnoreMissingServices = config.System.IgnoreMissingServices; + IgnoreApplet = config.System.IgnoreApplet; // CPU EnablePptc = config.System.EnablePtc; @@ -591,7 +591,6 @@ namespace Ryujinx.Ava.UI.ViewModels config.EnableDiscordIntegration.Value = EnableDiscordIntegration; config.CheckUpdatesOnStart.Value = CheckUpdatesOnStart; config.ShowConfirmExit.Value = ShowConfirmExit; - config.IgnoreApplet.Value = IgnoreApplet; config.RememberWindowState.Value = RememberWindowState; config.ShowTitleBar.Value = ShowTitleBar; config.HideCursor.Value = (HideCursorMode)HideCursor; @@ -632,12 +631,10 @@ namespace Ryujinx.Ava.UI.ViewModels } config.System.SystemTimeOffset.Value = Convert.ToInt64((CurrentDate.ToUnixTimeSeconds() + CurrentTime.TotalSeconds) - DateTimeOffset.Now.ToUnixTimeSeconds()); - config.Graphics.VSyncMode.Value = VSyncMode; - config.Graphics.EnableCustomVSyncInterval.Value = EnableCustomVSyncInterval; - config.Graphics.CustomVSyncInterval.Value = CustomVSyncInterval; config.System.EnableFsIntegrityChecks.Value = EnableFsIntegrityChecks; config.System.DramSize.Value = DramSize; config.System.IgnoreMissingServices.Value = IgnoreMissingServices; + config.System.IgnoreApplet.Value = IgnoreApplet; // CPU config.System.EnablePtc.Value = EnablePptc; @@ -646,6 +643,9 @@ namespace Ryujinx.Ava.UI.ViewModels config.System.UseHypervisor.Value = UseHypervisor; // Graphics + config.Graphics.VSyncMode.Value = VSyncMode; + config.Graphics.EnableCustomVSyncInterval.Value = EnableCustomVSyncInterval; + config.Graphics.CustomVSyncInterval.Value = CustomVSyncInterval; config.Graphics.GraphicsBackend.Value = (GraphicsBackend)GraphicsBackendIndex; config.Graphics.PreferredGpu.Value = _gpuIds.ElementAtOrDefault(PreferredGpuIndex); config.Graphics.EnableShaderCache.Value = EnableShaderCache; diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml index 73f74e36f..db7040f4b 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml @@ -503,7 +503,7 @@ MinWidth="0" Grid.Column="0" IsChecked="{Binding Config.EnableLedChanging, Mode=TwoWay}"> - + public ReactiveObject IgnoreMissingServices { get; private set; } + + /// + /// Ignore Controller Applet + /// + public ReactiveObject IgnoreApplet { get; private set; } /// /// Uses Hypervisor over JIT if available @@ -404,6 +409,8 @@ namespace Ryujinx.Ava.Utilities.Configuration DramSize.LogChangesToValue(nameof(DramSize)); IgnoreMissingServices = new ReactiveObject(); IgnoreMissingServices.LogChangesToValue(nameof(IgnoreMissingServices)); + IgnoreApplet = new ReactiveObject(); + IgnoreApplet.LogChangesToValue(nameof(IgnoreApplet)); AudioVolume = new ReactiveObject(); AudioVolume.LogChangesToValue(nameof(AudioVolume)); UseHypervisor = new ReactiveObject(); @@ -745,11 +752,6 @@ namespace Ryujinx.Ava.Utilities.Configuration /// public ReactiveObject ShowConfirmExit { get; private set; } - /// - /// Ignore Applet - /// - public ReactiveObject IgnoreApplet { get; private set; } - /// /// Enables or disables save window size, position and state on close. /// @@ -782,8 +784,6 @@ namespace Ryujinx.Ava.Utilities.Configuration EnableDiscordIntegration = new ReactiveObject(); CheckUpdatesOnStart = new ReactiveObject(); ShowConfirmExit = new ReactiveObject(); - IgnoreApplet = new ReactiveObject(); - IgnoreApplet.LogChangesToValue(nameof(IgnoreApplet)); RememberWindowState = new ReactiveObject(); ShowTitleBar = new ReactiveObject(); EnableHardwareAcceleration = new ReactiveObject(); diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs index 21210bb0e..80b3e5c03 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs @@ -56,7 +56,6 @@ namespace Ryujinx.Ava.Utilities.Configuration EnableDiscordIntegration = EnableDiscordIntegration, CheckUpdatesOnStart = CheckUpdatesOnStart, ShowConfirmExit = ShowConfirmExit, - IgnoreApplet = IgnoreApplet, RememberWindowState = RememberWindowState, ShowTitleBar = ShowTitleBar, EnableHardwareAcceleration = EnableHardwareAcceleration, @@ -78,6 +77,7 @@ namespace Ryujinx.Ava.Utilities.Configuration MemoryManagerMode = System.MemoryManagerMode, DramSize = System.DramSize, IgnoreMissingServices = System.IgnoreMissingServices, + IgnoreApplet = System.IgnoreApplet, UseHypervisor = System.UseHypervisor, GuiColumns = new GuiColumns { @@ -176,7 +176,6 @@ namespace Ryujinx.Ava.Utilities.Configuration EnableDiscordIntegration.Value = true; CheckUpdatesOnStart.Value = true; ShowConfirmExit.Value = true; - IgnoreApplet.Value = false; RememberWindowState.Value = true; ShowTitleBar.Value = !OperatingSystem.IsWindows(); EnableHardwareAcceleration.Value = true; @@ -200,6 +199,7 @@ namespace Ryujinx.Ava.Utilities.Configuration System.MemoryManagerMode.Value = MemoryManagerMode.HostMappedUnsafe; System.DramSize.Value = MemoryConfiguration.MemoryConfiguration4GiB; System.IgnoreMissingServices.Value = false; + System.IgnoreApplet.Value = false; System.UseHypervisor.Value = true; Multiplayer.LanInterfaceId.Value = "0"; Multiplayer.Mode.Value = MultiplayerMode.Disabled; -- 2.47.1 From 1fbee5a584e27426819d31721971918403c438a8 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 23 Jan 2025 14:39:36 -0600 Subject: [PATCH 409/722] infra: Metal label --- .github/labeler.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/labeler.yml b/.github/labeler.yml index ac3c77288..b80dbb1fb 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -18,6 +18,10 @@ gpu: - changed-files: - any-glob-to-any-file: ['src/Ryujinx.Graphics.Vulkan/**', 'src/Spv.Generator/**'] +'graphics-backend:metal': + - changed-files: + - any-glob-to-any-file: ['src/Ryujinx.Graphics.Metal/**', 'src/Ryujinx.Graphics.Metal.SharpMetalExtensions/**'] + gui: - changed-files: - any-glob-to-any-file: ['src/Ryujinx/**', 'src/Ryujinx.UI.Common/**', 'src/Ryujinx.UI.LocaleGenerator/**'] -- 2.47.1 From dc0c7a29122863e2e023d64d4ab79968d8c1fd70 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 23 Jan 2025 16:27:25 -0600 Subject: [PATCH 410/722] infra: clarify how stable builds are made now --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1532245f2..b8a788013 100644 --- a/README.md +++ b/README.md @@ -54,12 +54,13 @@ failing to meet this requirement may result in a poor gameplay experience or une ## Latest build -Stable builds are made every so often onto a separate "release" branch that then gets put into the releases you know and love. +Stable builds are made every so often, based on the `master` branch, that then gets put into the releases you know and love. These stable builds exist so that the end user can get a more **enjoyable and stable experience**. +They are released every month or so, to ensure consistent updates, while not being an annoying amount of individual updates to download over the course of that month. You can find the latest stable release [here](https://github.com/GreemDev/Ryujinx/releases/latest). -Canary builds are compiled automatically for each commit on the master branch. +Canary builds are compiled automatically for each commit on the `master` branch. While we strive to ensure optimal stability and performance prior to pushing an update, these builds **may be unstable or completely broken**. These canary builds are only recommended for experienced users. @@ -109,7 +110,7 @@ If you are planning to contribute or just want to learn more about this project - **Configuration** The emulator has settings for enabling or disabling some logging, remapping controllers, and more. - You can configure all of them through the graphical interface or manually through the config file, `Config.json`, found in the user folder which can be accessed by clicking `Open Ryujinx Folder` under the File menu in the GUI. + You can configure all of them through the graphical interface or manually through the config file, `Config.json`, found in the Ryujinx data folder which can be accessed by clicking `Open Ryujinx Folder` under the File menu in the GUI. ## License -- 2.47.1 From f81cb093fccb927c7faeb1ef388048184b563e01 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 23 Jan 2025 16:27:49 -0600 Subject: [PATCH 411/722] misc: chore: Change references of GreemDev/Ryujinx to Ryubing/Ryujinx --- .../ApplicationProxy/IApplicationFunctions.cs | 2 +- src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs | 2 +- src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs | 4 ++-- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml | 6 +++--- src/Ryujinx/UI/Windows/AboutWindow.axaml | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/Am/AppletOE/ApplicationProxyService/ApplicationProxy/IApplicationFunctions.cs b/src/Ryujinx.HLE/HOS/Services/Am/AppletOE/ApplicationProxyService/ApplicationProxy/IApplicationFunctions.cs index 12c046f56..c782340e8 100644 --- a/src/Ryujinx.HLE/HOS/Services/Am/AppletOE/ApplicationProxyService/ApplicationProxy/IApplicationFunctions.cs +++ b/src/Ryujinx.HLE/HOS/Services/Am/AppletOE/ApplicationProxyService/ApplicationProxy/IApplicationFunctions.cs @@ -659,7 +659,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati if (string.IsNullOrWhiteSpace(filePath)) { - throw new InvalidSystemResourceException("JIT (010000000000003B) system title not found! The JIT will not work, provide the system archive to fix this error. (See https://github.com/GreemDev/Ryujinx#requirements for more information)"); + throw new InvalidSystemResourceException("JIT (010000000000003B) system title not found! The JIT will not work, provide the system archive to fix this error. (See https://github.com/Ryubing/Ryujinx#requirements for more information)"); } context.Device.LoadNca(filePath); diff --git a/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs b/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs index ea3bd84df..0e02220a0 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs @@ -105,7 +105,7 @@ namespace Ryujinx.HLE.HOS.Services.Sdb.Pl titleName = "Unknown"; } - throw new InvalidSystemResourceException($"{titleName} ({fontTitle:x8}) system title not found! This font will not work, provide the system archive to fix this error. (See https://github.com/GreemDev/Ryujinx#requirements for more information)"); + throw new InvalidSystemResourceException($"{titleName} ({fontTitle:x8}) system title not found! This font will not work, provide the system archive to fix this error. (See https://github.com/Ryubing/Ryujinx#requirements for more information)"); } } else diff --git a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs index 01a5dadd3..afbc7882f 100644 --- a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs @@ -432,7 +432,7 @@ namespace Ryujinx.Ava.UI.ViewModels { try { - HttpResponseMessage response = await _httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Head, "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/Amiibo.json")); + HttpResponseMessage response = await _httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Head, "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/Amiibo.json")); if (response.IsSuccessStatusCode) { @@ -451,7 +451,7 @@ namespace Ryujinx.Ava.UI.ViewModels { try { - HttpResponseMessage response = await _httpClient.GetAsync($"https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/Amiibo.json"); + HttpResponseMessage response = await _httpClient.GetAsync($"https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/Amiibo.json"); if (response.IsSuccessStatusCode) { diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 3252aa5cf..cacb4b130 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -264,19 +264,19 @@ Name="FaqMenuItem" Header="{ext:Locale MenuBarHelpFaq}" Icon="{ext:Icon fa-github}" - CommandParameter="https://github.com/GreemDev/Ryujinx/wiki/FAQ-and-Troubleshooting" + CommandParameter="https://github.com/Ryubing/Ryujinx/wiki/FAQ-and-Troubleshooting" ToolTip.Tip="{ext:Locale MenuBarHelpFaqTooltip}" /> diff --git a/src/Ryujinx/UI/Windows/AboutWindow.axaml b/src/Ryujinx/UI/Windows/AboutWindow.axaml index 1b00ad23c..df880160f 100644 --- a/src/Ryujinx/UI/Windows/AboutWindow.axaml +++ b/src/Ryujinx/UI/Windows/AboutWindow.axaml @@ -182,7 +182,7 @@ HorizontalAlignment="Left" Background="Transparent" Click="Button_OnClick" - Tag="https://github.com/GreemDev/Ryujinx/graphs/contributors?type=a"> + Tag="https://github.com/Ryubing/Ryujinx/graphs/contributors?type=a"> Date: Thu, 23 Jan 2025 16:47:11 -0600 Subject: [PATCH 412/722] misc: chore: code cleanups --- src/Ryujinx.Common/TitleIDs.cs | 2 +- src/Ryujinx.HLE/PerformanceStatistics.cs | 15 +++++++++++++++ src/Ryujinx.HLE/Switch.cs | 4 ++-- src/Ryujinx/AppHost.cs | 4 ++-- src/Ryujinx/Assets/locales.json | 2 +- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx.Common/TitleIDs.cs b/src/Ryujinx.Common/TitleIDs.cs index e0cb12026..301dcdbf6 100644 --- a/src/Ryujinx.Common/TitleIDs.cs +++ b/src/Ryujinx.Common/TitleIDs.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Common { public static class TitleIDs { - public static ReactiveObject> CurrentApplication { get; set; } = new(); + public static ReactiveObject> CurrentApplication { get; } = new(); public static GraphicsBackend SelectGraphicsBackend(string titleId, GraphicsBackend currentBackend) { diff --git a/src/Ryujinx.HLE/PerformanceStatistics.cs b/src/Ryujinx.HLE/PerformanceStatistics.cs index 890bce8bc..e80faa7d2 100644 --- a/src/Ryujinx.HLE/PerformanceStatistics.cs +++ b/src/Ryujinx.HLE/PerformanceStatistics.cs @@ -161,5 +161,20 @@ namespace Ryujinx.HLE { return 1000 / _frameRate[FrameTypeGame]; } + + public string FormatGameFrameRate() + { + double frameRate = GetGameFrameRate(); + double frameTime = GetGameFrameTime(); + + return $"{frameRate:00.00} FPS ({frameTime:00.00}ms)"; + } + + public string FormatFifoPercent() + { + double fifoPercent = GetFifoPercent(); + + return $"FIFO: {fifoPercent:00.00}%"; + } } } diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index e15fab03a..86b04061e 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -34,8 +34,8 @@ namespace Ryujinx.HLE public int CpuCoresCount = 4; //Switch 1 has 4 cores - public VSyncMode VSyncMode { get; set; } = VSyncMode.Switch; - public bool CustomVSyncIntervalEnabled { get; set; } = false; + public VSyncMode VSyncMode { get; set; } + public bool CustomVSyncIntervalEnabled { get; set; } public int CustomVSyncInterval { get; set; } public long TargetVSyncInterval { get; set; } = 60; diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index b2cae2348..4df3eab0d 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -1151,8 +1151,8 @@ namespace Ryujinx.Ava LocaleManager.Instance[LocaleKeys.VolumeShort] + $": {(int)(Device.GetVolume() * 100)}%", dockedMode, ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(), - $"{Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)", - $"FIFO: {Device.Statistics.GetFifoPercent():00.00} %", + Device.Statistics.FormatGameFrameRate(), + Device.Statistics.FormatFifoPercent(), _displayCount)); } diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 8a101d733..8ceef5f67 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -22998,4 +22998,4 @@ } } ] -} +} \ No newline at end of file -- 2.47.1 From 7829fd8ee73bee023f276336854dd0fffc1aa8d3 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 23 Jan 2025 16:58:48 -0600 Subject: [PATCH 413/722] misc: chore: OS + CPU arch helpers --- src/Ryujinx.Common/Helpers/RunningPlatform.cs | 23 +++++++++++++++++++ src/Ryujinx.Common/TitleIDs.cs | 3 ++- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 4 +--- 3 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 src/Ryujinx.Common/Helpers/RunningPlatform.cs diff --git a/src/Ryujinx.Common/Helpers/RunningPlatform.cs b/src/Ryujinx.Common/Helpers/RunningPlatform.cs new file mode 100644 index 000000000..61f5bd614 --- /dev/null +++ b/src/Ryujinx.Common/Helpers/RunningPlatform.cs @@ -0,0 +1,23 @@ +using System; +using System.Runtime.InteropServices; +// ReSharper disable MemberCanBePrivate.Global +// ReSharper disable InconsistentNaming + +namespace Ryujinx.Common.Helper +{ + public static class RunningPlatform + { + public static bool IsMacOS => OperatingSystem.IsMacOS(); + public static bool IsWindows => OperatingSystem.IsWindows(); + public static bool IsLinux => OperatingSystem.IsLinux(); + + public static bool IsIntelMac => IsMacOS && RuntimeInformation.OSArchitecture is Architecture.X64; + public static bool IsArmMac => IsMacOS && RuntimeInformation.OSArchitecture is Architecture.Arm64; + + public static bool IsX64Windows => IsWindows && (RuntimeInformation.OSArchitecture is Architecture.X64); + public static bool IsArmWindows => IsWindows && (RuntimeInformation.OSArchitecture is Architecture.Arm64); + + public static bool IsX64Linux => IsLinux && (RuntimeInformation.OSArchitecture is Architecture.X64); + public static bool IsArmLinux => IsLinux && (RuntimeInformation.OSArchitecture is Architecture.Arm64); + } +} diff --git a/src/Ryujinx.Common/TitleIDs.cs b/src/Ryujinx.Common/TitleIDs.cs index 301dcdbf6..54241d053 100644 --- a/src/Ryujinx.Common/TitleIDs.cs +++ b/src/Ryujinx.Common/TitleIDs.cs @@ -1,5 +1,6 @@ using Gommon; using Ryujinx.Common.Configuration; +using Ryujinx.Common.Helper; using System; using System.Linq; using System.Runtime.InteropServices; @@ -21,7 +22,7 @@ namespace Ryujinx.Common return currentBackend; } - if (!(OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture is Architecture.Arm64)) + if (!RunningPlatform.IsArmMac) return GraphicsBackend.Vulkan; return GreatMetalTitles.ContainsIgnoreCase(titleId) ? GraphicsBackend.Metal : GraphicsBackend.Vulkan; diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index cdb177eb8..0ee59325a 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -736,9 +736,7 @@ namespace Ryujinx.Ava.UI.Windows }); } - private static bool _intelMacWarningShown = !(OperatingSystem.IsMacOS() && - (RuntimeInformation.OSArchitecture == Architecture.X64 || - RuntimeInformation.OSArchitecture == Architecture.X86)); + private static bool _intelMacWarningShown = !RunningPlatform.IsIntelMac; public static async Task ShowIntelMacWarningAsync() { -- 2.47.1 From c06f16c5e664813052a79dd432635e586b686d67 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 23 Jan 2025 17:39:34 -0600 Subject: [PATCH 414/722] infra: chore: Raise minimum required Windows 10 version Inspired by the breakages covered in #409 --- src/Ryujinx/Program.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index cf0e6f7e6..f1c5a301b 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -47,9 +47,9 @@ namespace Ryujinx.Ava { Version = ReleaseInformation.Version; - if (OperatingSystem.IsWindows() && !OperatingSystem.IsWindowsVersionAtLeast(10, 0, 17134)) + if (OperatingSystem.IsWindows() && !OperatingSystem.IsWindowsVersionAtLeast(10, 0, 19041)) { - _ = MessageBoxA(nint.Zero, "You are running an outdated version of Windows.\n\nRyujinx supports Windows 10 version 1803 and newer.\n", $"Ryujinx {Version}", MbIconwarning); + _ = MessageBoxA(nint.Zero, "You are running an outdated version of Windows.\n\nRyujinx supports Windows 10 version 20H1 and newer.\n", $"Ryujinx {Version}", MbIconwarning); } PreviewerDetached = true; -- 2.47.1 From 1ce37ec317d2a781fd9525634553ff621ae71e9a Mon Sep 17 00:00:00 2001 From: Otozinclus <58051309+Otozinclus@users.noreply.github.com> Date: Fri, 24 Jan 2025 21:47:36 +0100 Subject: [PATCH 415/722] Add option to change controller LED color (#572) This allows the user to change the controller LED while using Ryujinx. Useful for PS4 and PS5 controllers as an example. You can also use a spectrum-cycling Rainbow color option, or turn the LED off for DualSense controllers. --------- Co-authored-by: Evan Husted --- .../Hid/Controller/LedConfigController.cs | 20 +++-- src/Ryujinx.Common/Utilities/Rainbow.cs | 76 ++++++++++++++++++ src/Ryujinx.Input.SDL2/SDL2Gamepad.cs | 31 ++++++- src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs | 11 +++ src/Ryujinx.Input.SDL2/SDL2Keyboard.cs | 6 ++ src/Ryujinx.Input.SDL2/SDL2Mouse.cs | 6 ++ src/Ryujinx.Input.SDL2/SDL2MouseDriver.cs | 3 + src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs | 9 +++ src/Ryujinx.Input/IGamepad.cs | 9 +++ src/Ryujinx.Input/IGamepadDriver.cs | 6 ++ src/Ryujinx.SDL2.Common/SDL2Driver.cs | 3 + src/Ryujinx/AppHost.cs | 5 ++ src/Ryujinx/Assets/locales.json | 52 +++++++++++- src/Ryujinx/Input/AvaloniaKeyboard.cs | 6 ++ src/Ryujinx/Input/AvaloniaKeyboardDriver.cs | 2 + src/Ryujinx/Input/AvaloniaMouse.cs | 6 ++ src/Ryujinx/Input/AvaloniaMouseDriver.cs | 3 + .../UI/Models/Input/GamepadInputConfig.cs | 80 +++++++++++++------ .../Input/ControllerInputViewModel.cs | 13 +++ .../UI/ViewModels/Input/InputViewModel.cs | 18 ++++- .../UI/Views/Input/ControllerInputView.axaml | 30 ++++++- .../Views/Input/ControllerInputView.axaml.cs | 32 +++++++- .../UI/Windows/SettingsWindow.axaml.cs | 11 +++ .../ConfigurationState.Migration.cs | 5 +- 24 files changed, 399 insertions(+), 44 deletions(-) create mode 100644 src/Ryujinx.Common/Utilities/Rainbow.cs diff --git a/src/Ryujinx.Common/Configuration/Hid/Controller/LedConfigController.cs b/src/Ryujinx.Common/Configuration/Hid/Controller/LedConfigController.cs index 21727d62e..93b75d32c 100644 --- a/src/Ryujinx.Common/Configuration/Hid/Controller/LedConfigController.cs +++ b/src/Ryujinx.Common/Configuration/Hid/Controller/LedConfigController.cs @@ -2,14 +2,24 @@ { public class LedConfigController { - /// - /// Packed RGB int of the color - /// - public uint LedColor { get; set; } - /// /// Enable LED color changing by the emulator /// public bool EnableLed { get; set; } + + /// + /// Ignores the color and disables the LED entirely. + /// + public bool TurnOffLed { get; set; } + + /// + /// Ignores the color and uses the rainbow color functionality for the LED. + /// + public bool UseRainbow { get; set; } + + /// + /// Packed RGB int of the color + /// + public uint LedColor { get; set; } } } diff --git a/src/Ryujinx.Common/Utilities/Rainbow.cs b/src/Ryujinx.Common/Utilities/Rainbow.cs new file mode 100644 index 000000000..42222f157 --- /dev/null +++ b/src/Ryujinx.Common/Utilities/Rainbow.cs @@ -0,0 +1,76 @@ +using System; +using System.Drawing; + +namespace Ryujinx.Common.Utilities +{ + public class Rainbow + { + public const float Speed = 1; + + public static Color Color { get; private set; } = Color.Blue; + + public static void Tick() + { + Color = HsbToRgb( + (Color.GetHue() + Speed) / 360, + 1, + 1 + ); + + RainbowColorUpdated?.Invoke(Color.ToArgb()); + } + + public static event Action RainbowColorUpdated; + + private static Color HsbToRgb(float hue, float saturation, float brightness) + { + int r = 0, g = 0, b = 0; + if (saturation == 0) + { + r = g = b = (int)(brightness * 255.0f + 0.5f); + } + else + { + float h = (hue - (float)Math.Floor(hue)) * 6.0f; + float f = h - (float)Math.Floor(h); + float p = brightness * (1.0f - saturation); + float q = brightness * (1.0f - saturation * f); + float t = brightness * (1.0f - (saturation * (1.0f - f))); + switch ((int)h) + { + case 0: + r = (int)(brightness * 255.0f + 0.5f); + g = (int)(t * 255.0f + 0.5f); + b = (int)(p * 255.0f + 0.5f); + break; + case 1: + r = (int)(q * 255.0f + 0.5f); + g = (int)(brightness * 255.0f + 0.5f); + b = (int)(p * 255.0f + 0.5f); + break; + case 2: + r = (int)(p * 255.0f + 0.5f); + g = (int)(brightness * 255.0f + 0.5f); + b = (int)(t * 255.0f + 0.5f); + break; + case 3: + r = (int)(p * 255.0f + 0.5f); + g = (int)(q * 255.0f + 0.5f); + b = (int)(brightness * 255.0f + 0.5f); + break; + case 4: + r = (int)(t * 255.0f + 0.5f); + g = (int)(p * 255.0f + 0.5f); + b = (int)(brightness * 255.0f + 0.5f); + break; + case 5: + r = (int)(brightness * 255.0f + 0.5f); + g = (int)(p * 255.0f + 0.5f); + b = (int)(q * 255.0f + 0.5f); + break; + } + } + return Color.FromArgb(Convert.ToByte(255), Convert.ToByte(r), Convert.ToByte(g), Convert.ToByte(b)); + } + } +} diff --git a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs index ed22c3661..00d079a2b 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs @@ -1,6 +1,8 @@ using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.Logging; +using Ryujinx.Common.Utilities; +using Ryujinx.HLE.HOS.Services.Hid; using SDL2; using System; using System.Collections.Generic; @@ -86,7 +88,7 @@ namespace Ryujinx.Input.SDL2 Id = driverId; Features = GetFeaturesFlag(); _triggerThreshold = 0.0f; - + // Enable motion tracking if (Features.HasFlag(GamepadFeaturesFlag.Motion)) { @@ -102,6 +104,18 @@ namespace Ryujinx.Input.SDL2 } } + public void SetLed(uint packedRgb) + { + if (!Features.HasFlag(GamepadFeaturesFlag.Led)) return; + + byte red = packedRgb > 0 ? (byte)(packedRgb >> 16) : (byte)0; + byte green = packedRgb > 0 ? (byte)(packedRgb >> 8) : (byte)0; + byte blue = packedRgb > 0 ? (byte)(packedRgb % 256) : (byte)0; + + if (SDL_GameControllerSetLED(_gamepadHandle, red, green, blue) != 0) + Logger.Error?.Print(LogClass.Hid, "LED is not supported on this game controller."); + } + private GamepadFeaturesFlag GetFeaturesFlag() { GamepadFeaturesFlag result = GamepadFeaturesFlag.None; @@ -112,9 +126,7 @@ namespace Ryujinx.Input.SDL2 result |= GamepadFeaturesFlag.Motion; } - int error = SDL_GameControllerRumble(_gamepadHandle, 0, 0, 100); - - if (error == 0) + if (SDL_GameControllerHasRumble(_gamepadHandle) == SDL_bool.SDL_TRUE) { result |= GamepadFeaturesFlag.Rumble; } @@ -220,6 +232,17 @@ namespace Ryujinx.Input.SDL2 { _configuration = (StandardControllerInputConfig)configuration; + if (Features.HasFlag(GamepadFeaturesFlag.Led) && _configuration.Led.EnableLed) + { + if (_configuration.Led.TurnOffLed) + (this as IGamepad).ClearLed(); + else if (_configuration.Led.UseRainbow) + Rainbow.RainbowColorUpdated += clr => SetLed((uint)clr); + else + SetLed(_configuration.Led.LedColor); + + } + _buttonsUserMapping.Clear(); // First update sticks diff --git a/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs b/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs index c580e4e7d..251f53cba 100644 --- a/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs +++ b/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs @@ -173,5 +173,16 @@ namespace Ryujinx.Input.SDL2 return new SDL2Gamepad(gamepadHandle, id); } + + public IEnumerable GetGamepads() + { + lock (_gamepadsIds) + { + foreach (string gamepadId in _gamepadsIds) + { + yield return GetGamepad(gamepadId); + } + } + } } } diff --git a/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs b/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs index 8d6a30d11..270af5114 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs @@ -1,5 +1,6 @@ using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Keyboard; +using Ryujinx.Common.Logging; using System; using System.Collections.Generic; using System.Numerics; @@ -385,6 +386,11 @@ namespace Ryujinx.Input.SDL2 } } + public void SetLed(uint packedRgb) + { + Logger.Info?.Print(LogClass.UI, "SetLed called on an SDL2Keyboard"); + } + public void SetTriggerThreshold(float triggerThreshold) { // No operations diff --git a/src/Ryujinx.Input.SDL2/SDL2Mouse.cs b/src/Ryujinx.Input.SDL2/SDL2Mouse.cs index 37b356b76..eb86fa799 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Mouse.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Mouse.cs @@ -1,4 +1,5 @@ using Ryujinx.Common.Configuration.Hid; +using Ryujinx.Common.Logging; using System; using System.Drawing; using System.Numerics; @@ -76,6 +77,11 @@ namespace Ryujinx.Input.SDL2 throw new NotImplementedException(); } + public void SetLed(uint packedRgb) + { + Logger.Info?.Print(LogClass.UI, "SetLed called on an SDL2Mouse"); + } + public void SetTriggerThreshold(float triggerThreshold) { throw new NotImplementedException(); diff --git a/src/Ryujinx.Input.SDL2/SDL2MouseDriver.cs b/src/Ryujinx.Input.SDL2/SDL2MouseDriver.cs index 768ea8c62..7a9679901 100644 --- a/src/Ryujinx.Input.SDL2/SDL2MouseDriver.cs +++ b/src/Ryujinx.Input.SDL2/SDL2MouseDriver.cs @@ -1,6 +1,7 @@ using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using System; +using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Numerics; @@ -164,6 +165,8 @@ namespace Ryujinx.Input.SDL2 return new SDL2Mouse(this); } + public IEnumerable GetGamepads() => [GetGamepad("0")]; + public void Dispose() { if (_isDisposed) diff --git a/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs b/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs index 965f7935a..69e12bda0 100644 --- a/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs +++ b/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs @@ -1,5 +1,6 @@ using Ryujinx.SDL2.Common; using System; +using System.Collections.Generic; namespace Ryujinx.Input.SDL2 { @@ -51,5 +52,13 @@ namespace Ryujinx.Input.SDL2 return new SDL2Keyboard(this, _keyboardIdentifers[0], "All keyboards"); } + + public IEnumerable GetGamepads() + { + foreach (var keyboardId in _keyboardIdentifers) + { + yield return GetGamepad(keyboardId); + } + } } } diff --git a/src/Ryujinx.Input/IGamepad.cs b/src/Ryujinx.Input/IGamepad.cs index 3853f2819..832950660 100644 --- a/src/Ryujinx.Input/IGamepad.cs +++ b/src/Ryujinx.Input/IGamepad.cs @@ -65,6 +65,15 @@ namespace Ryujinx.Input /// The configuration of the gamepad void SetConfiguration(InputConfig configuration); + /// + /// Set the LED on the gamepad to a given color. + /// + /// Does nothing on a controller without LED functionality. + /// The packed RGB integer. + void SetLed(uint packedRgb); + + public void ClearLed() => SetLed(0); + /// /// Starts a rumble effect on the gamepad. /// diff --git a/src/Ryujinx.Input/IGamepadDriver.cs b/src/Ryujinx.Input/IGamepadDriver.cs index 625c3e694..25b2295db 100644 --- a/src/Ryujinx.Input/IGamepadDriver.cs +++ b/src/Ryujinx.Input/IGamepadDriver.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace Ryujinx.Input { @@ -33,6 +34,11 @@ namespace Ryujinx.Input /// The unique id of the gamepad /// An instance of associated to the gamepad id given or null if not found IGamepad GetGamepad(string id); + + /// + /// Returns an of the connected gamepads. + /// + IEnumerable GetGamepads(); /// /// Clear the internal state of the driver. diff --git a/src/Ryujinx.SDL2.Common/SDL2Driver.cs b/src/Ryujinx.SDL2.Common/SDL2Driver.cs index 851c07867..47c5e60c5 100644 --- a/src/Ryujinx.SDL2.Common/SDL2Driver.cs +++ b/src/Ryujinx.SDL2.Common/SDL2Driver.cs @@ -1,5 +1,6 @@ using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; +using Ryujinx.Common.Utilities; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -167,6 +168,8 @@ namespace Ryujinx.SDL2.Common HandleSDLEvent(ref evnt); } }); + + Rainbow.Tick(); waitHandle.Wait(WaitTimeMs); } diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 4df3eab0d..31f27a965 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -587,6 +587,11 @@ namespace Ryujinx.Ava return; } + foreach (IGamepad gamepad in RyujinxApp.MainWindow.InputManager.GamepadDriver.GetGamepads()) + { + gamepad?.ClearLed(); + } + _isStopped = true; Stop(); } diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 8ceef5f67..698af9d17 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -7628,7 +7628,57 @@ "ar_SA": "", "de_DE": "", "el_GR": "", - "en_US": "Custom LED", + "en_US": "LED", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "ControllerSettingsLedColorDisable", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Disable", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "ControllerSettingsLedColorRainbow", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Rainbow", "es_ES": "", "fr_FR": "", "he_IL": "", diff --git a/src/Ryujinx/Input/AvaloniaKeyboard.cs b/src/Ryujinx/Input/AvaloniaKeyboard.cs index 0b63af2d9..031d8b033 100644 --- a/src/Ryujinx/Input/AvaloniaKeyboard.cs +++ b/src/Ryujinx/Input/AvaloniaKeyboard.cs @@ -1,5 +1,6 @@ using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Keyboard; +using Ryujinx.Common.Logging; using Ryujinx.Input; using System; using System.Collections.Generic; @@ -143,6 +144,11 @@ namespace Ryujinx.Ava.Input } } + public void SetLed(uint packedRgb) + { + Logger.Info?.Print(LogClass.UI, "SetLed called on an AvaloniaKeyboard"); + } + public void SetTriggerThreshold(float triggerThreshold) { } public void Rumble(float lowFrequency, float highFrequency, uint durationMs) { } diff --git a/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs b/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs index 9f87e821a..214652265 100644 --- a/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs +++ b/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs @@ -59,6 +59,8 @@ namespace Ryujinx.Ava.Input return new AvaloniaKeyboard(this, _keyboardIdentifers[0], LocaleManager.Instance[LocaleKeys.AllKeyboards]); } + public IEnumerable GetGamepads() => [GetGamepad("0")]; + protected virtual void Dispose(bool disposing) { if (disposing) diff --git a/src/Ryujinx/Input/AvaloniaMouse.cs b/src/Ryujinx/Input/AvaloniaMouse.cs index 1aa2d586a..52a341a01 100644 --- a/src/Ryujinx/Input/AvaloniaMouse.cs +++ b/src/Ryujinx/Input/AvaloniaMouse.cs @@ -1,4 +1,5 @@ using Ryujinx.Common.Configuration.Hid; +using Ryujinx.Common.Logging; using Ryujinx.Input; using System; using System.Drawing; @@ -74,6 +75,11 @@ namespace Ryujinx.Ava.Input throw new NotImplementedException(); } + public void SetLed(uint packedRgb) + { + Logger.Info?.Print(LogClass.UI, "SetLed called on an AvaloniaMouse"); + } + public void SetTriggerThreshold(float triggerThreshold) { throw new NotImplementedException(); diff --git a/src/Ryujinx/Input/AvaloniaMouseDriver.cs b/src/Ryujinx/Input/AvaloniaMouseDriver.cs index e71bbf64a..be1441101 100644 --- a/src/Ryujinx/Input/AvaloniaMouseDriver.cs +++ b/src/Ryujinx/Input/AvaloniaMouseDriver.cs @@ -3,6 +3,7 @@ using Avalonia.Controls; using Avalonia.Input; using Ryujinx.Input; using System; +using System.Collections.Generic; using System.Numerics; using MouseButton = Ryujinx.Input.MouseButton; using Size = System.Drawing.Size; @@ -134,6 +135,8 @@ namespace Ryujinx.Ava.Input return new AvaloniaMouse(this); } + public IEnumerable GetGamepads() => [GetGamepad("0")]; + public void Dispose() { if (_isDisposed) diff --git a/src/Ryujinx/UI/Models/Input/GamepadInputConfig.cs b/src/Ryujinx/UI/Models/Input/GamepadInputConfig.cs index ea7dd34c3..6f0f7f47f 100644 --- a/src/Ryujinx/UI/Models/Input/GamepadInputConfig.cs +++ b/src/Ryujinx/UI/Models/Input/GamepadInputConfig.cs @@ -388,30 +388,6 @@ namespace Ryujinx.Ava.UI.Models.Input } } - private bool _enableLedChanging; - - public bool EnableLedChanging - { - get => _enableLedChanging; - set - { - _enableLedChanging = value; - OnPropertyChanged(); - } - } - - private Color _ledColor; - - public Color LedColor - { - get => _ledColor; - set - { - _ledColor = value; - OnPropertyChanged(); - } - } - private bool _enableMotion; public bool EnableMotion { @@ -433,6 +409,58 @@ namespace Ryujinx.Ava.UI.Models.Input OnPropertyChanged(); } } + + private bool _enableLedChanging; + + public bool EnableLedChanging + { + get => _enableLedChanging; + set + { + _enableLedChanging = value; + OnPropertyChanged(); + } + } + + public bool ShowLedColorPicker => !TurnOffLed && !UseRainbowLed; + + private bool _turnOffLed; + + public bool TurnOffLed + { + get => _turnOffLed; + set + { + _turnOffLed = value; + OnPropertyChanged(); + OnPropertyChanged(nameof(ShowLedColorPicker)); + } + } + + private bool _useRainbowLed; + + public bool UseRainbowLed + { + get => _useRainbowLed; + set + { + _useRainbowLed = value; + OnPropertyChanged(); + OnPropertyChanged(nameof(ShowLedColorPicker)); + } + } + + private Color _ledColor; + + public Color LedColor + { + get => _ledColor; + set + { + _ledColor = value; + OnPropertyChanged(); + } + } public GamepadInputConfig(InputConfig config) { @@ -512,6 +540,8 @@ namespace Ryujinx.Ava.UI.Models.Input if (controllerInput.Led != null) { EnableLedChanging = controllerInput.Led.EnableLed; + TurnOffLed = controllerInput.Led.TurnOffLed; + UseRainbowLed = controllerInput.Led.UseRainbow; uint rawColor = controllerInput.Led.LedColor; byte alpha = (byte)(rawColor >> 24); byte red = (byte)(rawColor >> 16); @@ -579,6 +609,8 @@ namespace Ryujinx.Ava.UI.Models.Input Led = new LedConfigController { EnableLed = EnableLedChanging, + TurnOffLed = this.TurnOffLed, + UseRainbow = UseRainbowLed, LedColor = LedColor.ToUInt32() }, Version = InputConfig.CurrentVersion, diff --git a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs index 0380ef598..d291f09a0 100644 --- a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs @@ -1,5 +1,8 @@ using Avalonia.Svg.Skia; using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using FluentAvalonia.UI.Controls; +using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Views.Input; @@ -57,6 +60,16 @@ namespace Ryujinx.Ava.UI.ViewModels.Input await RumbleInputView.Show(this); } + public RelayCommand LedDisabledChanged => Commands.Create(() => + { + if (!Config.EnableLedChanging) return; + + if (Config.TurnOffLed) + ParentModel.SelectedGamepad.ClearLed(); + else + ParentModel.SelectedGamepad.SetLed(Config.LedColor.ToUInt32()); + }); + public void OnParentModelChanged() { IsLeft = ParentModel.IsLeft; diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 3d1bd5f4a..c59ec540c 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -3,6 +3,7 @@ using Avalonia.Controls; using Avalonia.Svg.Skia; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; +using Gommon; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Input; using Ryujinx.Ava.UI.Helpers; @@ -54,7 +55,18 @@ namespace Ryujinx.Ava.UI.ViewModels.Input private static readonly InputConfigJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); public IGamepadDriver AvaloniaKeyboardDriver { get; } - public IGamepad SelectedGamepad { get; private set; } + + private IGamepad _selectedGamepad; + + public IGamepad SelectedGamepad + { + get => _selectedGamepad; + private set + { + _selectedGamepad = value; + OnPropertiesChanged(nameof(HasLed), nameof(CanClearLed)); + } + } public ObservableCollection PlayerIndexes { get; set; } public ObservableCollection<(DeviceType Type, string Id, string Name)> Devices { get; set; } @@ -69,8 +81,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public bool IsRight { get; set; } public bool IsLeft { get; set; } - public bool HasLed => false; //temporary - //SelectedGamepad.Features.HasFlag(GamepadFeaturesFlag.Led); + public bool HasLed => SelectedGamepad.Features.HasFlag(GamepadFeaturesFlag.Led); + public bool CanClearLed => SelectedGamepad.Name.ContainsIgnoreCase("DualSense"); public bool IsModified { get; set; } public event Action NotifyChangesEvent; diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml index db7040f4b..1662f4a3d 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml @@ -429,7 +429,7 @@ - + + + - + + + + + + diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs index 52a6d51b9..81483ce0e 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs @@ -4,11 +4,14 @@ using Avalonia.Controls.Primitives; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.LogicalTree; +using FluentAvalonia.UI.Controls; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.ViewModels.Input; using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Input; using Ryujinx.Input.Assigner; +using System.Linq; using StickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId; namespace Ryujinx.Ava.UI.Views.Input @@ -82,7 +85,7 @@ namespace Ryujinx.Ava.UI.Views.Input private void Button_IsCheckedChanged(object sender, RoutedEventArgs e) { - if (sender is ToggleButton button) + if (sender is ToggleButton button) { if (button.IsChecked is true) { @@ -103,7 +106,9 @@ namespace Ryujinx.Ava.UI.Views.Input var viewModel = (DataContext as ControllerInputViewModel); - IKeyboard keyboard = (IKeyboard)viewModel.ParentModel.AvaloniaKeyboardDriver.GetGamepad("0"); // Open Avalonia keyboard for cancel operations. + IKeyboard keyboard = + (IKeyboard)viewModel.ParentModel.AvaloniaKeyboardDriver + .GetGamepad("0"); // Open Avalonia keyboard for cancel operations. IButtonAssigner assigner = CreateButtonAssigner(isStick); _currentAssigner.ButtonAssigned += (sender, e) => @@ -231,8 +236,31 @@ namespace Ryujinx.Ava.UI.Views.Input protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e) { base.OnDetachedFromVisualTree(e); + + foreach (IGamepad gamepad in RyujinxApp.MainWindow.InputManager.GamepadDriver.GetGamepads()) + { + gamepad?.ClearLed(); + } + _currentAssigner?.Cancel(); _currentAssigner = null; } + + private void ColorPickerButton_OnColorChanged(ColorPickerButton sender, ColorButtonColorChangedEventArgs args) + { + if (!args.NewColor.HasValue) return; + if (DataContext is not ControllerInputViewModel cVm) return; + if (!cVm.Config.EnableLedChanging) return; + + cVm.ParentModel.SelectedGamepad.SetLed(args.NewColor.Value.ToUInt32()); + } + + private void ColorPickerButton_OnAttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e) + { + if (DataContext is not ControllerInputViewModel cVm) return; + if (!cVm.Config.EnableLedChanging) return; + + cVm.ParentModel.SelectedGamepad.SetLed(cVm.Config.LedColor.ToUInt32()); + } } } diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs b/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs index db8e0f6bb..67deb9723 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs @@ -4,9 +4,14 @@ using Avalonia.Input; using FluentAvalonia.Core; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.UI.ViewModels.Input; using Ryujinx.HLE.FileSystem; +using Ryujinx.Input; using System; +using System.Linq; +using Key = Avalonia.Input.Key; namespace Ryujinx.Ava.UI.Windows { @@ -106,6 +111,12 @@ namespace Ryujinx.Ava.UI.Windows protected override void OnClosing(WindowClosingEventArgs e) { HotkeysPage.Dispose(); + + foreach (IGamepad gamepad in RyujinxApp.MainWindow.InputManager.GamepadDriver.GetGamepads()) + { + gamepad?.ClearLed(); + } + InputPage.Dispose(); base.OnClosing(e); } diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 1b00a8fa4..3ccac2647 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -1,3 +1,4 @@ +using Avalonia.Media; using Gommon; using Ryujinx.Ava.Utilities.Configuration.System; using Ryujinx.Ava.Utilities.Configuration.UI; @@ -421,7 +422,9 @@ namespace Ryujinx.Ava.Utilities.Configuration config.Led = new LedConfigController { EnableLed = false, - LedColor = 328189 + TurnOffLed = false, + UseRainbow = false, + LedColor = new Color(255, 5, 1, 253).ToUInt32() }; } }) -- 2.47.1 From 3541e282eac61f07dac59962ae21605858ac5d65 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 24 Jan 2025 16:52:20 -0600 Subject: [PATCH 416/722] Fully disconnect gamepad handler for rainbow color if configuration is set with UseRainbowLed false Also check if its even enabled before setting the rainbow color Fixes strobing --- src/Ryujinx.Common/Utilities/Rainbow.cs | 16 ++++++++++++++-- src/Ryujinx.Input.SDL2/SDL2Gamepad.cs | 11 ++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx.Common/Utilities/Rainbow.cs b/src/Ryujinx.Common/Utilities/Rainbow.cs index 42222f157..2c2ea7bfd 100644 --- a/src/Ryujinx.Common/Utilities/Rainbow.cs +++ b/src/Ryujinx.Common/Utilities/Rainbow.cs @@ -5,17 +5,29 @@ namespace Ryujinx.Common.Utilities { public class Rainbow { - public const float Speed = 1; + public static float Speed { get; set; } = 1; public static Color Color { get; private set; } = Color.Blue; + private static float _lastHue; + public static void Tick() { + float currentHue = Color.GetHue(); + float nextHue = currentHue; + + if (currentHue >= 360) + nextHue = 0; + else + nextHue += Speed; + Color = HsbToRgb( - (Color.GetHue() + Speed) / 360, + nextHue / 360, 1, 1 ); + + _lastHue = currentHue; RainbowColorUpdated?.Invoke(Color.ToArgb()); } diff --git a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs index 00d079a2b..a73d7c730 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs @@ -226,6 +226,13 @@ namespace Ryujinx.Input.SDL2 private static Vector3 GsToMs2(Vector3 gs) => gs / SDL_STANDARD_GRAVITY; + private void RainbowColorChanged(int packedRgb) + { + if (!_configuration.Led.UseRainbow) return; + + SetLed((uint)packedRgb); + } + public void SetConfiguration(InputConfig configuration) { lock (_userMappingLock) @@ -237,10 +244,12 @@ namespace Ryujinx.Input.SDL2 if (_configuration.Led.TurnOffLed) (this as IGamepad).ClearLed(); else if (_configuration.Led.UseRainbow) - Rainbow.RainbowColorUpdated += clr => SetLed((uint)clr); + Rainbow.RainbowColorUpdated += RainbowColorChanged; else SetLed(_configuration.Led.LedColor); + if (!_configuration.Led.UseRainbow) + Rainbow.RainbowColorUpdated -= RainbowColorChanged; } _buttonsUserMapping.Clear(); -- 2.47.1 From 9b6afa0ea2d2b1af59037e155584552419f17243 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 24 Jan 2025 17:00:50 -0600 Subject: [PATCH 417/722] misc: chore: Add log line to the other parts of the Updater that represent "up to date" --- src/Ryujinx/Updater.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 88d0dfe36..f878e1af5 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -118,6 +118,8 @@ namespace Ryujinx.Ava OpenHelper.OpenUrl(ReleaseInformation.GetChangelogForVersion(currentVersion)); } } + + Logger.Info?.Print(LogClass.Application, "Up to date."); _running = false; @@ -188,6 +190,8 @@ namespace Ryujinx.Ava OpenHelper.OpenUrl(ReleaseInformation.GetChangelogForVersion(currentVersion)); } } + + Logger.Info?.Print(LogClass.Application, "Up to date."); _running = false; -- 2.47.1 From 3b5f6170d1a5db47ac94944af4a01e9c6955f8b1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 24 Jan 2025 23:06:59 -0600 Subject: [PATCH 418/722] misc: chore: move Rainbow updating to a separate task started/stopped as needed update gommon & use the Event class from it to allow easily clearing all handlers when the apphost exits to avoid leftover invalid event handlers in the rainbow event handler list. More robust config application logic to ensure what needs to happen only happens once --- Directory.Packages.props | 2 +- src/Ryujinx.Common/Utilities/Rainbow.cs | 66 ++++++++++++++++--------- src/Ryujinx.Input.SDL2/SDL2Gamepad.cs | 23 ++++++--- src/Ryujinx.SDL2.Common/SDL2Driver.cs | 2 - src/Ryujinx/AppHost.cs | 6 +++ 5 files changed, 68 insertions(+), 31 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index c2ac358ed..f1d7cac61 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -42,7 +42,7 @@ - + diff --git a/src/Ryujinx.Common/Utilities/Rainbow.cs b/src/Ryujinx.Common/Utilities/Rainbow.cs index 2c2ea7bfd..3b49872c2 100644 --- a/src/Ryujinx.Common/Utilities/Rainbow.cs +++ b/src/Ryujinx.Common/Utilities/Rainbow.cs @@ -1,40 +1,62 @@ -using System; +using Gommon; +using System; using System.Drawing; +using System.Threading.Tasks; namespace Ryujinx.Common.Utilities { - public class Rainbow + public static class Rainbow { + public static bool CyclingEnabled { get; set; } + + public static void Enable() + { + if (!CyclingEnabled) + { + CyclingEnabled = true; + Executor.ExecuteBackgroundAsync(async () => + { + while (CyclingEnabled) + { + await Task.Delay(15); + Tick(); + } + }); + } + } + + public static void Disable() + { + CyclingEnabled = false; + } + + public static float Speed { get; set; } = 1; public static Color Color { get; private set; } = Color.Blue; - private static float _lastHue; - public static void Tick() { - float currentHue = Color.GetHue(); - float nextHue = currentHue; - - if (currentHue >= 360) - nextHue = 0; - else - nextHue += Speed; + Color = HsbToRgb((Color.GetHue() + Speed) / 360); - Color = HsbToRgb( - nextHue / 360, - 1, - 1 - ); - - _lastHue = currentHue; - - RainbowColorUpdated?.Invoke(Color.ToArgb()); + UpdatedHandler.Call(Color.ToArgb()); } - public static event Action RainbowColorUpdated; + public static void Reset() + { + Color = Color.Blue; + UpdatedHandler.Clear(); + } - private static Color HsbToRgb(float hue, float saturation, float brightness) + public static event Action Updated + { + add => UpdatedHandler.Add(value); + remove => UpdatedHandler.Remove(value); + } + + internal static Event UpdatedHandler = new(); + + private static Color HsbToRgb(float hue, float saturation = 1, float brightness = 1) { int r = 0, g = 0, b = 0; if (saturation == 0) diff --git a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs index a73d7c730..3ed2880ce 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs @@ -148,6 +148,8 @@ namespace Ryujinx.Input.SDL2 { if (disposing && _gamepadHandle != nint.Zero) { + Rainbow.Updated -= RainbowColorChanged; + SDL_GameControllerClose(_gamepadHandle); _gamepadHandle = nint.Zero; @@ -232,6 +234,8 @@ namespace Ryujinx.Input.SDL2 SetLed((uint)packedRgb); } + + private bool _rainbowColorEnabled; public void SetConfiguration(InputConfig configuration) { @@ -243,13 +247,20 @@ namespace Ryujinx.Input.SDL2 { if (_configuration.Led.TurnOffLed) (this as IGamepad).ClearLed(); - else if (_configuration.Led.UseRainbow) - Rainbow.RainbowColorUpdated += RainbowColorChanged; - else - SetLed(_configuration.Led.LedColor); + else switch (_configuration.Led.UseRainbow) + { + case true when !_rainbowColorEnabled: + Rainbow.Updated += RainbowColorChanged; + _rainbowColorEnabled = true; + break; + case false when _rainbowColorEnabled: + Rainbow.Updated -= RainbowColorChanged; + _rainbowColorEnabled = false; + break; + } - if (!_configuration.Led.UseRainbow) - Rainbow.RainbowColorUpdated -= RainbowColorChanged; + if (!_configuration.Led.TurnOffLed && !_rainbowColorEnabled) + SetLed(_configuration.Led.LedColor); } _buttonsUserMapping.Clear(); diff --git a/src/Ryujinx.SDL2.Common/SDL2Driver.cs b/src/Ryujinx.SDL2.Common/SDL2Driver.cs index 47c5e60c5..047ccbebf 100644 --- a/src/Ryujinx.SDL2.Common/SDL2Driver.cs +++ b/src/Ryujinx.SDL2.Common/SDL2Driver.cs @@ -168,8 +168,6 @@ namespace Ryujinx.SDL2.Common HandleSDLEvent(ref evnt); } }); - - Rainbow.Tick(); waitHandle.Wait(WaitTimeMs); } diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 31f27a965..65c279fc4 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -501,6 +501,8 @@ namespace Ryujinx.Ava _renderingThread.Start(); _viewModel.Volume = ConfigurationState.Instance.System.AudioVolume.Value; + + Rainbow.Enable(); MainLoop(); @@ -590,7 +592,11 @@ namespace Ryujinx.Ava foreach (IGamepad gamepad in RyujinxApp.MainWindow.InputManager.GamepadDriver.GetGamepads()) { gamepad?.ClearLed(); + gamepad?.Dispose(); } + + Rainbow.Disable(); + Rainbow.Reset(); _isStopped = true; Stop(); -- 2.47.1 From be3bd0bcb5ee8c3f15a0c09feaddfe64b1eb6cb9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:00:23 -0600 Subject: [PATCH 419/722] misc: chore: Use explicit types in the Avalonia project --- src/Ryujinx/AppHost.cs | 30 +++--- src/Ryujinx/Common/ApplicationHelper.cs | 20 ++-- src/Ryujinx/Common/LocaleManager.cs | 12 +-- .../Common/Models/XCITrimmerFileModel.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 4 +- src/Ryujinx/Headless/HeadlessRyujinx.cs | 2 +- src/Ryujinx/Headless/Windows/WindowBase.cs | 6 +- src/Ryujinx/Input/AvaloniaKeyboardDriver.cs | 2 +- .../Input/AvaloniaKeyboardMappingHelper.cs | 6 +- src/Ryujinx/Program.cs | 2 +- src/Ryujinx/RyujinxApp.axaml.cs | 2 +- src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 2 +- .../Applet/AvaloniaDynamicTextInputHandler.cs | 4 +- .../UI/Applet/UserSelectorDialog.axaml.cs | 4 +- .../Controls/ApplicationContextMenu.axaml.cs | 14 +-- .../UI/Controls/ApplicationListView.axaml.cs | 5 +- .../UI/Controls/NavigationDialogHost.axaml.cs | 16 +-- .../UI/Helpers/AvaloniaListExtensions.cs | 6 +- src/Ryujinx/UI/Helpers/ContentDialogHelper.cs | 2 +- .../Helpers/Converters/GlyphValueConverter.cs | 2 +- .../Converters/TitleUpdateLabelConverter.cs | 2 +- src/Ryujinx/UI/Helpers/LoggerAdapter.cs | 6 +- src/Ryujinx/UI/Helpers/NotificationHelper.cs | 4 +- src/Ryujinx/UI/Models/CheatNode.cs | 2 +- .../UI/Models/Input/KeyboardInputConfig.cs | 2 +- src/Ryujinx/UI/Models/SaveModel.cs | 14 +-- src/Ryujinx/UI/Models/UserProfile.cs | 3 +- .../UI/Renderer/EmbeddedWindowOpenGL.cs | 4 +- src/Ryujinx/UI/ViewModels/BaseModel.cs | 2 +- .../DownloadableContentManagerViewModel.cs | 25 ++--- .../UI/ViewModels/Input/InputViewModel.cs | 22 ++--- .../UI/ViewModels/MainWindowViewModel.cs | 42 ++++---- .../UI/ViewModels/ModManagerViewModel.cs | 48 ++++----- .../UI/ViewModels/SettingsViewModel.cs | 5 +- .../UI/ViewModels/TitleUpdateViewModel.cs | 24 ++--- .../UserFirmwareAvatarSelectorViewModel.cs | 6 +- .../UI/ViewModels/UserSaveManagerViewModel.cs | 2 +- .../UI/ViewModels/XCITrimmerViewModel.cs | 21 ++-- .../Views/Input/ControllerInputView.axaml.cs | 7 +- src/Ryujinx/UI/Views/Input/InputView.axaml.cs | 2 +- .../UI/Views/Input/KeyboardInputView.axaml.cs | 3 +- .../UI/Views/Input/MotionInputView.axaml.cs | 5 +- .../UI/Views/Input/RumbleInputView.axaml.cs | 5 +- .../UI/Views/Main/MainMenuBarView.axaml.cs | 5 +- .../Settings/SettingsHotkeysView.axaml.cs | 7 +- .../UI/Views/User/UserEditorView.axaml.cs | 2 +- .../UserFirmwareAvatarSelectorView.axaml.cs | 12 +-- .../UserProfileImageSelectorView.axaml.cs | 12 +-- .../UI/Views/User/UserRecovererView.axaml.cs | 2 +- .../Views/User/UserSaveManagerView.axaml.cs | 14 +-- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 9 +- .../DownloadableContentManagerWindow.axaml.cs | 4 +- src/Ryujinx/UI/Windows/IconColorPicker.cs | 28 +++--- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 15 +-- .../UI/Windows/ModManagerWindow.axaml.cs | 12 +-- .../UI/Windows/XCITrimmerWindow.axaml.cs | 4 +- src/Ryujinx/Updater.cs | 14 +-- .../Utilities/AppLibrary/ApplicationData.cs | 6 +- .../AppLibrary/ApplicationLibrary.cs | 98 +++++++++---------- .../Utilities/Compat/CompatibilityCsv.cs | 2 +- .../Configuration/ConfigurationState.Model.cs | 2 +- .../Utilities/Configuration/LoggerModule.cs | 4 +- .../Utilities/DownloadableContentsHelper.cs | 10 +- src/Ryujinx/Utilities/ShortcutHelper.cs | 26 ++--- .../Utilities/SystemInfo/LinuxSystemInfo.cs | 4 +- .../Utilities/SystemInfo/MacOSSystemInfo.cs | 4 +- .../Utilities/SystemInfo/WindowsSystemInfo.cs | 2 +- src/Ryujinx/Utilities/TitleUpdatesHelper.cs | 14 +-- src/Ryujinx/Utilities/ValueFormatUtils.cs | 4 +- 69 files changed, 367 insertions(+), 348 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 65c279fc4..27c2d5b7a 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -238,10 +238,10 @@ namespace Ryujinx.Ava _lastCursorMoveTime = Stopwatch.GetTimestamp(); } - var point = e.GetCurrentPoint(window).Position; - var bounds = RendererHost.EmbeddedWindow.Bounds; - var windowYOffset = bounds.Y + window.MenuBarHeight; - var windowYLimit = (int)window.Bounds.Height - window.StatusBarHeight - 1; + Point point = e.GetCurrentPoint(window).Position; + Rect bounds = RendererHost.EmbeddedWindow.Bounds; + double windowYOffset = bounds.Y + window.MenuBarHeight; + double windowYLimit = (int)window.Bounds.Height - window.StatusBarHeight - 1; if (!_viewModel.ShowMenuAndStatusBar) { @@ -265,10 +265,10 @@ namespace Ryujinx.Ava if (sender is MainWindow window) { - var point = e.GetCurrentPoint(window).Position; - var bounds = RendererHost.EmbeddedWindow.Bounds; - var windowYOffset = bounds.Y + window.MenuBarHeight; - var windowYLimit = (int)window.Bounds.Height - window.StatusBarHeight - 1; + Point point = e.GetCurrentPoint(window).Position; + Rect bounds = RendererHost.EmbeddedWindow.Bounds; + double windowYOffset = bounds.Y + window.MenuBarHeight; + double windowYLimit = (int)window.Bounds.Height - window.StatusBarHeight - 1; if (!_viewModel.ShowMenuAndStatusBar) { @@ -435,7 +435,7 @@ namespace Ryujinx.Ava return; } - var colorType = e.IsBgra ? SKColorType.Bgra8888 : SKColorType.Rgba8888; + SKColorType colorType = e.IsBgra ? SKColorType.Bgra8888 : SKColorType.Rgba8888; using SKBitmap bitmap = new(new SKImageInfo(e.Width, e.Height, colorType, SKAlphaType.Premul)); Marshal.Copy(e.Data, 0, bitmap.GetPixels(), e.Data.Length); @@ -448,7 +448,7 @@ namespace Ryujinx.Ava float scaleX = e.FlipX ? -1 : 1; float scaleY = e.FlipY ? -1 : 1; - var matrix = SKMatrix.CreateScale(scaleX, scaleY, bitmap.Width / 2f, bitmap.Height / 2f); + SKMatrix matrix = SKMatrix.CreateScale(scaleX, scaleY, bitmap.Width / 2f, bitmap.Height / 2f); canvas.SetMatrix(matrix); canvas.DrawBitmap(bitmap, SKPoint.Empty); @@ -467,8 +467,8 @@ namespace Ryujinx.Ava private static void SaveBitmapAsPng(SKBitmap bitmap, string path) { - using var data = bitmap.Encode(SKEncodedImageFormat.Png, 100); - using var stream = File.OpenWrite(path); + using SKData data = bitmap.Encode(SKEncodedImageFormat.Png, 100); + using FileStream stream = File.OpenWrite(path); data.SaveTo(stream); } @@ -923,7 +923,7 @@ namespace Ryujinx.Ava BackendThreading threadingMode = ConfigurationState.Instance.Graphics.BackendThreading; - var isGALThreaded = threadingMode == BackendThreading.On || (threadingMode == BackendThreading.Auto && renderer.PreferThreading); + bool isGALThreaded = threadingMode == BackendThreading.On || (threadingMode == BackendThreading.Auto && renderer.PreferThreading); if (isGALThreaded) { renderer = new ThreadedRenderer(renderer); @@ -932,7 +932,7 @@ namespace Ryujinx.Ava Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({threadingMode}): {isGALThreaded}"); // Initialize Configuration. - var memoryConfiguration = ConfigurationState.Instance.System.DramSize.Value; + MemoryConfiguration memoryConfiguration = ConfigurationState.Instance.System.DramSize.Value; Device = new Switch(new HLEConfiguration( VirtualFileSystem, @@ -970,7 +970,7 @@ namespace Ryujinx.Ava private static IHardwareDeviceDriver InitializeAudio() { - var availableBackends = new List + List availableBackends = new List { AudioBackend.SDL2, AudioBackend.SoundIo, diff --git a/src/Ryujinx/Common/ApplicationHelper.cs b/src/Ryujinx/Common/ApplicationHelper.cs index e5b4da728..1c839aaaa 100644 --- a/src/Ryujinx/Common/ApplicationHelper.cs +++ b/src/Ryujinx/Common/ApplicationHelper.cs @@ -144,7 +144,7 @@ namespace Ryujinx.Ava.Common public static void ExtractSection(string destination, NcaSectionType ncaSectionType, string titleFilePath, string titleName, int programIndex = 0) { - var cancellationToken = new CancellationTokenSource(); + CancellationTokenSource cancellationToken = new CancellationTokenSource(); UpdateWaitWindow waitingDialog = new( RyujinxApp.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), @@ -171,14 +171,14 @@ namespace Ryujinx.Ava.Common } else { - var pfsTemp = new PartitionFileSystem(); + PartitionFileSystem pfsTemp = new PartitionFileSystem(); pfsTemp.Initialize(file.AsStorage()).ThrowIfFailure(); pfs = pfsTemp; } foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) { - using var ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new UniqueRef(); pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -244,8 +244,8 @@ namespace Ryujinx.Ava.Common string source = DateTime.Now.ToFileTime().ToString()[10..]; string output = DateTime.Now.ToFileTime().ToString()[10..]; - using var uniqueSourceFs = new UniqueRef(ncaFileSystem); - using var uniqueOutputFs = new UniqueRef(new LocalFileSystem(destination)); + using UniqueRef uniqueSourceFs = new UniqueRef(ncaFileSystem); + using UniqueRef uniqueOutputFs = new UniqueRef(new LocalFileSystem(destination)); fsClient.Register(source.ToU8Span(), ref uniqueSourceFs.Ref); fsClient.Register(output.ToU8Span(), ref uniqueOutputFs.Ref); @@ -299,7 +299,7 @@ namespace Ryujinx.Ava.Common public static void ExtractAoc(string destination, string updateFilePath, string updateName) { - var cancellationToken = new CancellationTokenSource(); + CancellationTokenSource cancellationToken = new CancellationTokenSource(); UpdateWaitWindow waitingDialog = new( RyujinxApp.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), @@ -317,13 +317,13 @@ namespace Ryujinx.Ava.Common string extension = Path.GetExtension(updateFilePath).ToLower(); if (extension is ".nsp") { - var pfsTemp = new PartitionFileSystem(); + PartitionFileSystem pfsTemp = new PartitionFileSystem(); pfsTemp.Initialize(file.AsStorage()).ThrowIfFailure(); IFileSystem pfs = pfsTemp; foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) { - using var ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new UniqueRef(); pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -364,8 +364,8 @@ namespace Ryujinx.Ava.Common string source = DateTime.Now.ToFileTime().ToString()[10..]; string output = DateTime.Now.ToFileTime().ToString()[10..]; - using var uniqueSourceFs = new UniqueRef(ncaFileSystem); - using var uniqueOutputFs = new UniqueRef(new LocalFileSystem(destination)); + using UniqueRef uniqueSourceFs = new UniqueRef(ncaFileSystem); + using UniqueRef uniqueOutputFs = new UniqueRef(new LocalFileSystem(destination)); fsClient.Register(source.ToU8Span(), ref uniqueSourceFs.Ref); fsClient.Register(output.ToU8Span(), ref uniqueOutputFs.Ref); diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index 9422cf7fb..72c2e04c4 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -32,7 +32,7 @@ namespace Ryujinx.Ava.Common.Locale private void Load() { - var localeLanguageCode = !string.IsNullOrEmpty(ConfigurationState.Instance.UI.LanguageCode.Value) ? + string localeLanguageCode = !string.IsNullOrEmpty(ConfigurationState.Instance.UI.LanguageCode.Value) ? ConfigurationState.Instance.UI.LanguageCode.Value : CultureInfo.CurrentCulture.Name.Replace('-', '_'); LoadLanguage(localeLanguageCode); @@ -54,7 +54,7 @@ namespace Ryujinx.Ava.Common.Locale if (_localeStrings.TryGetValue(key, out string value)) { // Check if the localized string needs to be formatted. - if (_dynamicValues.TryGetValue(key, out var dynamicValue)) + if (_dynamicValues.TryGetValue(key, out object[] dynamicValue)) try { return string.Format(value, dynamicValue); @@ -99,7 +99,7 @@ namespace Ryujinx.Ava.Common.Locale public void LoadLanguage(string languageCode) { - var locale = LoadJsonLanguage(languageCode); + Dictionary locale = LoadJsonLanguage(languageCode); if (locale == null) { @@ -125,7 +125,7 @@ namespace Ryujinx.Ava.Common.Locale private static Dictionary LoadJsonLanguage(string languageCode) { - var localeStrings = new Dictionary(); + Dictionary localeStrings = new Dictionary(); _localeData ??= EmbeddedResources.ReadAllText("Ryujinx/Assets/locales.json") .Into(it => JsonHelper.Deserialize(it, LocalesJsonContext.Default.LocalesJson)); @@ -142,10 +142,10 @@ namespace Ryujinx.Ava.Common.Locale throw new Exception($"Locale key {{{locale.ID}}} has too many languages! Has {locale.Translations.Count} translations, expected {_localeData.Value.Languages.Count}!"); } - if (!Enum.TryParse(locale.ID, out var localeKey)) + if (!Enum.TryParse(locale.ID, out LocaleKeys localeKey)) continue; - var str = locale.Translations.TryGetValue(languageCode, out string val) && !string.IsNullOrEmpty(val) + string str = locale.Translations.TryGetValue(languageCode, out string val) && !string.IsNullOrEmpty(val) ? val : locale.Translations[DefaultLanguageCode]; diff --git a/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs b/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs index 526bf230c..7286178e7 100644 --- a/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs +++ b/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Ava.Common.Models { public static XCITrimmerFileModel FromApplicationData(ApplicationData applicationData, XCIFileTrimmerLog logger) { - var trimmer = new XCIFileTrimmer(applicationData.Path, logger); + XCIFileTrimmer trimmer = new XCIFileTrimmer(applicationData.Path, logger); return new XCITrimmerFileModel( applicationData.Name, diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index 7d75ac7c1..7b29cd59c 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -291,9 +291,9 @@ namespace Ryujinx.Headless if (!string.IsNullOrEmpty(options.PreferredGPUVendor)) { string preferredGpuVendor = options.PreferredGPUVendor.ToLowerInvariant(); - var devices = VulkanRenderer.GetPhysicalDevices(api); + DeviceInfo[] devices = VulkanRenderer.GetPhysicalDevices(api); - foreach (var device in devices) + foreach (DeviceInfo device in devices) { if (device.Vendor.ToLowerInvariant() == preferredGpuVendor) { diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index 787aaca62..18efdceee 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -149,7 +149,7 @@ namespace Ryujinx.Headless AppDataManager.Initialize(option.BaseDataDir); - if (useLastUsedProfile && AccountSaveDataManager.GetLastUsedUser().TryGet(out var profile)) + if (useLastUsedProfile && AccountSaveDataManager.GetLastUsedUser().TryGet(out UserProfile profile)) option.UserProfile = profile.Name; // Check if keys exists. diff --git a/src/Ryujinx/Headless/Windows/WindowBase.cs b/src/Ryujinx/Headless/Windows/WindowBase.cs index 068c32062..8fd445199 100644 --- a/src/Ryujinx/Headless/Windows/WindowBase.cs +++ b/src/Ryujinx/Headless/Windows/WindowBase.cs @@ -1,4 +1,5 @@ using Humanizer; +using LibHac.Ns; using Ryujinx.Ava; using Ryujinx.Ava.UI.Models; using Ryujinx.Common; @@ -11,6 +12,7 @@ using Ryujinx.Graphics.OpenGL; using Ryujinx.HLE.HOS.Applets; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types; +using Ryujinx.HLE.Loaders.Processes; using Ryujinx.HLE.UI; using Ryujinx.Input; using Ryujinx.Input.HLE; @@ -165,8 +167,8 @@ namespace Ryujinx.Headless private void InitializeWindow() { - var activeProcess = Device.Processes.ActiveApplication; - var nacp = activeProcess.ApplicationControlProperties; + ProcessResult activeProcess = Device.Processes.ActiveApplication; + ApplicationControlProperty nacp = activeProcess.ApplicationControlProperties; int desiredLanguage = (int)Device.System.State.DesiredTitleLanguage; string titleNameSection = string.IsNullOrWhiteSpace(nacp.Title[desiredLanguage].NameString.ToString()) ? string.Empty : $" - {nacp.Title[desiredLanguage].NameString.ToString()}"; diff --git a/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs b/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs index 214652265..581d1db8e 100644 --- a/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs +++ b/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs @@ -91,7 +91,7 @@ namespace Ryujinx.Ava.Input return false; } - AvaloniaKeyboardMappingHelper.TryGetAvaKey(key, out var nativeKey); + AvaloniaKeyboardMappingHelper.TryGetAvaKey(key, out AvaKey nativeKey); return _pressedKeys.Contains(nativeKey); } diff --git a/src/Ryujinx/Input/AvaloniaKeyboardMappingHelper.cs b/src/Ryujinx/Input/AvaloniaKeyboardMappingHelper.cs index 97ebd721d..c3e653e5d 100644 --- a/src/Ryujinx/Input/AvaloniaKeyboardMappingHelper.cs +++ b/src/Ryujinx/Input/AvaloniaKeyboardMappingHelper.cs @@ -150,14 +150,14 @@ namespace Ryujinx.Ava.Input static AvaloniaKeyboardMappingHelper() { - var inputKeys = Enum.GetValues(); + Key[] inputKeys = Enum.GetValues(); // NOTE: Avalonia.Input.Key is not contiguous and quite large, so use a dictionary instead of an array. _avaKeyMapping = new Dictionary(); - foreach (var key in inputKeys) + foreach (Key key in inputKeys) { - if (TryGetAvaKey(key, out var index)) + if (TryGetAvaKey(key, out AvaKey index)) { _avaKeyMapping[index] = key; } diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index f1c5a301b..e7a4fde56 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -262,7 +262,7 @@ namespace Ryujinx.Ava exceptions.Add(initialException); } - foreach (var e in exceptions) + foreach (Exception e in exceptions) { string message = $"Unhandled exception caught: {e}"; // ReSharper disable once ConstantConditionalAccessQualifier diff --git a/src/Ryujinx/RyujinxApp.axaml.cs b/src/Ryujinx/RyujinxApp.axaml.cs index d950af3a9..95bc92c3d 100644 --- a/src/Ryujinx/RyujinxApp.axaml.cs +++ b/src/Ryujinx/RyujinxApp.axaml.cs @@ -79,7 +79,7 @@ namespace Ryujinx.Ava { if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { - var result = await ContentDialogHelper.CreateConfirmationDialog( + UserResult result = await ContentDialogHelper.CreateConfirmationDialog( LocaleManager.Instance[LocaleKeys.DialogThemeRestartMessage], LocaleManager.Instance[LocaleKeys.DialogThemeRestartSubMessage], LocaleManager.Instance[LocaleKeys.InputDialogYes], diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index d2fad58ac..86e9adcd5 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -46,7 +46,7 @@ namespace Ryujinx.Ava.UI.Applet Dispatcher.UIThread.InvokeAsync(async () => { - var response = await ControllerAppletDialog.ShowControllerAppletDialog(_parent, args); + UserResult response = await ControllerAppletDialog.ShowControllerAppletDialog(_parent, args); if (response == UserResult.Ok) { okPressed = true; diff --git a/src/Ryujinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs b/src/Ryujinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs index 0cd3f18e5..397eab72c 100644 --- a/src/Ryujinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaloniaDynamicTextInputHandler.cs @@ -65,7 +65,7 @@ namespace Ryujinx.Ava.UI.Applet private void AvaloniaDynamicTextInputHandler_KeyRelease(object sender, KeyEventArgs e) { - var key = (HidKey)AvaloniaKeyboardMappingHelper.ToInputKey(e.Key); + HidKey key = (HidKey)AvaloniaKeyboardMappingHelper.ToInputKey(e.Key); if (!(KeyReleasedEvent?.Invoke(key)).GetValueOrDefault(true)) { @@ -85,7 +85,7 @@ namespace Ryujinx.Ava.UI.Applet private void AvaloniaDynamicTextInputHandler_KeyPressed(object sender, KeyEventArgs e) { - var key = (HidKey)AvaloniaKeyboardMappingHelper.ToInputKey(e.Key); + HidKey key = (HidKey)AvaloniaKeyboardMappingHelper.ToInputKey(e.Key); if (!(KeyPressedEvent?.Invoke(key)).GetValueOrDefault(true)) { diff --git a/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs index 6e25588ec..4081de61e 100644 --- a/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs +++ b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs @@ -60,11 +60,11 @@ namespace Ryujinx.Ava.UI.Applet ObservableCollection newProfiles = []; - foreach (var item in ViewModel.Profiles) + foreach (BaseModel item in ViewModel.Profiles) { if (item is UserProfile originalItem) { - var profile = new UserProfileSft(originalItem.UserId, originalItem.Name, originalItem.Image); + UserProfileSft profile = new UserProfileSft(originalItem.UserId, originalItem.Name, originalItem.Image); if (profile.UserId == ViewModel.SelectedUserId) { diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index de95be387..13a1d3bf3 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -76,7 +76,7 @@ namespace Ryujinx.Ava.UI.Controls private static void OpenSaveDirectory(MainWindowViewModel viewModel, SaveDataType saveDataType, UserId userId) { - var saveDataFilter = SaveDataFilter.Make(viewModel.SelectedApplication.Id, saveDataType, userId, saveDataId: default, index: default); + SaveDataFilter saveDataFilter = SaveDataFilter.Make(viewModel.SelectedApplication.Id, saveDataType, userId, saveDataId: default, index: default); ApplicationHelper.OpenSaveDir(in saveDataFilter, viewModel.SelectedApplication.Id, viewModel.SelectedApplication.ControlHolder, viewModel.SelectedApplication.Name); } @@ -305,7 +305,7 @@ namespace Ryujinx.Ava.UI.Controls if (sender is not MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel }) return; - var result = await viewModel.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + IReadOnlyList result = await viewModel.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions { Title = LocaleManager.Instance[LocaleKeys.FolderDialogExtractTitle], AllowMultiple = false, @@ -320,13 +320,13 @@ namespace Ryujinx.Ava.UI.Controls viewModel.SelectedApplication.Path, viewModel.SelectedApplication.Name); - var iconFile = await result[0].CreateFileAsync($"{viewModel.SelectedApplication.IdString}.png"); - await using var fileStream = await iconFile.OpenWriteAsync(); + IStorageFile iconFile = await result[0].CreateFileAsync($"{viewModel.SelectedApplication.IdString}.png"); + await using Stream fileStream = await iconFile.OpenWriteAsync(); - using var bitmap = SKBitmap.Decode(viewModel.SelectedApplication.Icon) + using SKBitmap bitmap = SKBitmap.Decode(viewModel.SelectedApplication.Icon) .Resize(new SKSizeI(512, 512), SKFilterQuality.High); - using var png = bitmap.Encode(SKEncodedImageFormat.Png, 100); + using SKData png = bitmap.Encode(SKEncodedImageFormat.Png, 100); png.SaveTo(fileStream); } @@ -350,7 +350,7 @@ namespace Ryujinx.Ava.UI.Controls public async void TrimXCI_Click(object sender, RoutedEventArgs args) { - var viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel; + MainWindowViewModel viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel; if (viewModel?.SelectedApplication != null) { diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs index 1f63f43c8..41919ebf5 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs @@ -1,6 +1,7 @@ using Avalonia.Controls; using Avalonia.Controls.Notifications; using Avalonia.Input; +using Avalonia.Input.Platform; using Avalonia.Interactivity; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.UI.Helpers; @@ -38,10 +39,10 @@ namespace Ryujinx.Ava.UI.Controls if (sender is not Button { Content: TextBlock idText }) return; - if (!RyujinxApp.IsClipboardAvailable(out var clipboard)) + if (!RyujinxApp.IsClipboardAvailable(out IClipboard clipboard)) return; - var appData = mwvm.Applications.FirstOrDefault(it => it.IdString == idText.Text); + ApplicationData appData = mwvm.Applications.FirstOrDefault(it => it.IdString == idText.Text); if (appData is null) return; diff --git a/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs b/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs index 4d021655e..1c20aac74 100644 --- a/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs +++ b/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs @@ -106,9 +106,9 @@ namespace Ryujinx.Ava.UI.Controls .OrderBy(x => x.Name) .ForEach(profile => ViewModel.Profiles.Add(new UserProfile(profile, this))); - var saveDataFilter = SaveDataFilter.Make(programId: default, saveType: SaveDataType.Account, default, saveDataId: default, index: default); + SaveDataFilter saveDataFilter = SaveDataFilter.Make(programId: default, saveType: SaveDataType.Account, default, saveDataId: default, index: default); - using var saveDataIterator = new UniqueRef(); + using UniqueRef saveDataIterator = new UniqueRef(); HorizonClient.Fs.OpenSaveDataIterator(ref saveDataIterator.Ref, SaveDataSpaceId.User, in saveDataFilter).ThrowIfFailure(); @@ -127,8 +127,8 @@ namespace Ryujinx.Ava.UI.Controls for (int i = 0; i < readCount; i++) { - var save = saveDataInfo[i]; - var id = new UserId((long)save.UserId.Id.Low, (long)save.UserId.Id.High); + SaveDataInfo save = saveDataInfo[i]; + UserId id = new UserId((long)save.UserId.Id.Low, (long)save.UserId.Id.High); if (ViewModel.Profiles.Cast().FirstOrDefault(x => x.UserId == id) == null) { lostAccounts.Add(id); @@ -136,7 +136,7 @@ namespace Ryujinx.Ava.UI.Controls } } - foreach (var account in lostAccounts) + foreach (UserId account in lostAccounts) { ViewModel.LostProfiles.Add(new UserProfile(new HLE.HOS.Services.Account.Acc.UserProfile(account, string.Empty, null), this)); } @@ -146,12 +146,12 @@ namespace Ryujinx.Ava.UI.Controls public async void DeleteUser(UserProfile userProfile) { - var lastUserId = AccountManager.LastOpenedUser.UserId; + UserId lastUserId = AccountManager.LastOpenedUser.UserId; if (userProfile.UserId == lastUserId) { // If we are deleting the currently open profile, then we must open something else before deleting. - var profile = ViewModel.Profiles.Cast().FirstOrDefault(x => x.UserId != lastUserId); + UserProfile profile = ViewModel.Profiles.Cast().FirstOrDefault(x => x.UserId != lastUserId); if (profile == null) { @@ -165,7 +165,7 @@ namespace Ryujinx.Ava.UI.Controls AccountManager.OpenUser(profile.UserId); } - var result = await ContentDialogHelper.CreateConfirmationDialog( + UserResult result = await ContentDialogHelper.CreateConfirmationDialog( LocaleManager.Instance[LocaleKeys.DialogUserProfileDeletionConfirmMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogYes], diff --git a/src/Ryujinx/UI/Helpers/AvaloniaListExtensions.cs b/src/Ryujinx/UI/Helpers/AvaloniaListExtensions.cs index b3bb53bd0..f4a5dc0c1 100644 --- a/src/Ryujinx/UI/Helpers/AvaloniaListExtensions.cs +++ b/src/Ryujinx/UI/Helpers/AvaloniaListExtensions.cs @@ -21,7 +21,7 @@ namespace Ryujinx.Ava.UI.Helpers /// public static bool ReplaceWith(this AvaloniaList list, T item, bool addIfNotFound = true) { - var index = list.IndexOf(item); + int index = list.IndexOf(item); if (index != -1) { @@ -45,9 +45,9 @@ namespace Ryujinx.Ava.UI.Helpers /// The items to use as matching records to search for in the `sourceList', if not found this item will be added instead public static void AddOrReplaceMatching(this AvaloniaList list, IList sourceList, IList matchingList) { - foreach (var match in matchingList) + foreach (T match in matchingList) { - var index = sourceList.IndexOf(match); + int index = sourceList.IndexOf(match); if (index != -1) { list.ReplaceWith(sourceList[index]); diff --git a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs b/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs index 3f0f0f033..b5d085ba1 100644 --- a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs +++ b/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs @@ -121,7 +121,7 @@ namespace Ryujinx.Ava.UI.Helpers startedDeferring = true; - var deferral = args.GetDeferral(); + Deferral deferral = args.GetDeferral(); sender.PrimaryButtonClick -= DeferClose; diff --git a/src/Ryujinx/UI/Helpers/Converters/GlyphValueConverter.cs b/src/Ryujinx/UI/Helpers/Converters/GlyphValueConverter.cs index 6196421c8..fe50aab58 100644 --- a/src/Ryujinx/UI/Helpers/Converters/GlyphValueConverter.cs +++ b/src/Ryujinx/UI/Helpers/Converters/GlyphValueConverter.cs @@ -23,7 +23,7 @@ namespace Ryujinx.Ava.UI.Helpers } public string this[string key] => - _glyphs.TryGetValue(Enum.Parse(key), out var val) + _glyphs.TryGetValue(Enum.Parse(key), out string val) ? val : string.Empty; diff --git a/src/Ryujinx/UI/Helpers/Converters/TitleUpdateLabelConverter.cs b/src/Ryujinx/UI/Helpers/Converters/TitleUpdateLabelConverter.cs index cbb6edff1..d462b9463 100644 --- a/src/Ryujinx/UI/Helpers/Converters/TitleUpdateLabelConverter.cs +++ b/src/Ryujinx/UI/Helpers/Converters/TitleUpdateLabelConverter.cs @@ -30,7 +30,7 @@ namespace Ryujinx.Ava.UI.Helpers return null; } - var key = isBundled ? LocaleKeys.TitleBundledUpdateVersionLabel : LocaleKeys.TitleUpdateVersionLabel; + LocaleKeys key = isBundled ? LocaleKeys.TitleBundledUpdateVersionLabel : LocaleKeys.TitleUpdateVersionLabel; return LocaleManager.Instance.UpdateAndGetDynamicValue(key, label); } diff --git a/src/Ryujinx/UI/Helpers/LoggerAdapter.cs b/src/Ryujinx/UI/Helpers/LoggerAdapter.cs index 2d26bd090..1dc1adcc5 100644 --- a/src/Ryujinx/UI/Helpers/LoggerAdapter.cs +++ b/src/Ryujinx/UI/Helpers/LoggerAdapter.cs @@ -50,8 +50,8 @@ namespace Ryujinx.Ava.UI.Helpers private static string Format(AvaLogLevel level, string area, string template, object source, object[] v) { - var result = new StringBuilder(); - var r = new CharacterReader(template.AsSpan()); + StringBuilder result = new StringBuilder(); + CharacterReader r = new CharacterReader(template.AsSpan()); int i = 0; result.Append('['); @@ -64,7 +64,7 @@ namespace Ryujinx.Ava.UI.Helpers while (!r.End) { - var c = r.Take(); + char c = r.Take(); if (c != '{') { diff --git a/src/Ryujinx/UI/Helpers/NotificationHelper.cs b/src/Ryujinx/UI/Helpers/NotificationHelper.cs index 74029a4b1..aa071a2a1 100644 --- a/src/Ryujinx/UI/Helpers/NotificationHelper.cs +++ b/src/Ryujinx/UI/Helpers/NotificationHelper.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Ava.UI.Helpers Margin = new Thickness(0, 0, 15, 40), }; - var maybeAsyncWorkQueue = new Lazy>( + Lazy> maybeAsyncWorkQueue = new Lazy>( () => new AsyncWorkQueue(notification => { Dispatcher.UIThread.Post(() => @@ -57,7 +57,7 @@ namespace Ryujinx.Ava.UI.Helpers public static void Show(string title, string text, NotificationType type, bool waitingExit = false, Action onClick = null, Action onClose = null) { - var delay = waitingExit ? TimeSpan.FromMilliseconds(0) : TimeSpan.FromMilliseconds(NotificationDelayInMs); + TimeSpan delay = waitingExit ? TimeSpan.FromMilliseconds(0) : TimeSpan.FromMilliseconds(NotificationDelayInMs); _notifications.Add(new Notification(title, text, type, delay, onClick, onClose)); } diff --git a/src/Ryujinx/UI/Models/CheatNode.cs b/src/Ryujinx/UI/Models/CheatNode.cs index 8e9aee254..cce0f1d97 100644 --- a/src/Ryujinx/UI/Models/CheatNode.cs +++ b/src/Ryujinx/UI/Models/CheatNode.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Ava.UI.Models } set { - foreach (var cheat in SubNodes) + foreach (CheatNode cheat in SubNodes) { cheat.IsEnabled = value; cheat.OnPropertyChanged(); diff --git a/src/Ryujinx/UI/Models/Input/KeyboardInputConfig.cs b/src/Ryujinx/UI/Models/Input/KeyboardInputConfig.cs index 66f1f62a2..bf3864b93 100644 --- a/src/Ryujinx/UI/Models/Input/KeyboardInputConfig.cs +++ b/src/Ryujinx/UI/Models/Input/KeyboardInputConfig.cs @@ -367,7 +367,7 @@ namespace Ryujinx.Ava.UI.Models.Input public InputConfig GetConfig() { - var config = new StandardKeyboardInputConfig + StandardKeyboardInputConfig config = new StandardKeyboardInputConfig { Id = Id, Backend = InputBackendType.WindowKeyboard, diff --git a/src/Ryujinx/UI/Models/SaveModel.cs b/src/Ryujinx/UI/Models/SaveModel.cs index 3dc009b2a..81be5ee93 100644 --- a/src/Ryujinx/UI/Models/SaveModel.cs +++ b/src/Ryujinx/UI/Models/SaveModel.cs @@ -48,7 +48,7 @@ namespace Ryujinx.Ava.UI.Models TitleId = info.ProgramId; UserId = info.UserId; - var appData = RyujinxApp.MainWindow.ViewModel.Applications.FirstOrDefault(x => x.IdString.EqualsIgnoreCase(TitleIdString)); + ApplicationData appData = RyujinxApp.MainWindow.ViewModel.Applications.FirstOrDefault(x => x.IdString.EqualsIgnoreCase(TitleIdString)); InGameList = appData != null; @@ -59,13 +59,13 @@ namespace Ryujinx.Ava.UI.Models } else { - var appMetadata = ApplicationLibrary.LoadAndSaveMetaData(TitleIdString); + ApplicationMetadata appMetadata = ApplicationLibrary.LoadAndSaveMetaData(TitleIdString); Title = appMetadata.Title ?? TitleIdString; } Task.Run(() => { - var saveRoot = Path.Combine(VirtualFileSystem.GetNandPath(), $"user/save/{info.SaveDataId:x16}"); + string saveRoot = Path.Combine(VirtualFileSystem.GetNandPath(), $"user/save/{info.SaveDataId:x16}"); long totalSize = GetDirectorySize(saveRoot); @@ -74,14 +74,14 @@ namespace Ryujinx.Ava.UI.Models long size = 0; if (Directory.Exists(path)) { - var directories = Directory.GetDirectories(path); - foreach (var directory in directories) + string[] directories = Directory.GetDirectories(path); + foreach (string directory in directories) { size += GetDirectorySize(directory); } - var files = Directory.GetFiles(path); - foreach (var file in files) + string[] files = Directory.GetFiles(path); + foreach (string file in files) { size += new FileInfo(file).Length; } diff --git a/src/Ryujinx/UI/Models/UserProfile.cs b/src/Ryujinx/UI/Models/UserProfile.cs index 7a9237fe1..7aa365e36 100644 --- a/src/Ryujinx/UI/Models/UserProfile.cs +++ b/src/Ryujinx/UI/Models/UserProfile.cs @@ -1,3 +1,4 @@ +using Avalonia; using Avalonia.Media; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.ViewModels; @@ -87,7 +88,7 @@ namespace Ryujinx.Ava.UI.Models private void UpdateBackground() { - var currentApplication = Avalonia.Application.Current; + Application currentApplication = Avalonia.Application.Current; currentApplication.Styles.TryGetResource("ControlFillColorSecondary", currentApplication.ActualThemeVariant, out object color); if (color is not null) diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs index 4f59e2400..81a94d6c4 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs @@ -44,13 +44,13 @@ namespace Ryujinx.Ava.UI.Renderer throw new PlatformNotSupportedException(); } - var flags = OpenGLContextFlags.Compat; + OpenGLContextFlags flags = OpenGLContextFlags.Compat; if (ConfigurationState.Instance.Logger.GraphicsDebugLevel != GraphicsDebugLevel.None) { flags |= OpenGLContextFlags.Debug; } - var graphicsMode = Environment.OSVersion.Platform == PlatformID.Unix ? new FramebufferFormat(new ColorFormat(8, 8, 8, 0), 16, 0, ColorFormat.Zero, 0, 2, false) : FramebufferFormat.Default; + FramebufferFormat graphicsMode = Environment.OSVersion.Platform == PlatformID.Unix ? new FramebufferFormat(new ColorFormat(8, 8, 8, 0), 16, 0, ColorFormat.Zero, 0, 2, false) : FramebufferFormat.Default; Context = PlatformHelper.CreateOpenGLContext(graphicsMode, 3, 3, flags); diff --git a/src/Ryujinx/UI/ViewModels/BaseModel.cs b/src/Ryujinx/UI/ViewModels/BaseModel.cs index c0ccfcae1..94c5ddfdb 100644 --- a/src/Ryujinx/UI/ViewModels/BaseModel.cs +++ b/src/Ryujinx/UI/ViewModels/BaseModel.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Ava.UI.ViewModels protected void OnPropertiesChanged(string firstPropertyName, params ReadOnlySpan propertyNames) { OnPropertyChanged(firstPropertyName); - foreach (var propertyName in propertyNames) + foreach (string propertyName in propertyNames) { OnPropertyChanged(propertyName); } diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index 52f97cf02..169aeb41d 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -11,6 +11,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -71,7 +72,7 @@ namespace Ryujinx.Ava.UI.ViewModels private void LoadDownloadableContents() { - var dlcs = _applicationLibrary.DownloadableContents.Items + IEnumerable<(DownloadableContentModel Dlc, bool IsEnabled)> dlcs = _applicationLibrary.DownloadableContents.Items .Where(it => it.Dlc.TitleIdBase == _applicationData.IdBase); bool hasBundledContent = false; @@ -101,11 +102,11 @@ namespace Ryujinx.Ava.UI.ViewModels .ThenBy(it => it.TitleId) .AsObservableChangeSet() .Filter(Filter) - .Bind(out var view).AsObservableList(); + .Bind(out ReadOnlyObservableCollection view).AsObservableList(); // NOTE(jpr): this works around a bug where calling _views.Clear also clears SelectedDownloadableContents for // some reason. so we save the items here and add them back after - var items = SelectedDownloadableContents.ToArray(); + DownloadableContentModel[] items = SelectedDownloadableContents.ToArray(); Views.Clear(); Views.AddRange(view); @@ -130,7 +131,7 @@ namespace Ryujinx.Ava.UI.ViewModels public async void Add() { - var result = await _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + IReadOnlyList result = await _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { Title = LocaleManager.Instance[LocaleKeys.SelectDlcDialogTitle], AllowMultiple = true, @@ -145,10 +146,10 @@ namespace Ryujinx.Ava.UI.ViewModels }, }); - var totalDlcAdded = 0; - foreach (var file in result) + int totalDlcAdded = 0; + foreach (IStorageFile file in result) { - if (!AddDownloadableContent(file.Path.LocalPath, out var newDlcAdded)) + if (!AddDownloadableContent(file.Path.LocalPath, out int newDlcAdded)) { await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogDlcNoDlcErrorMessage]); } @@ -171,18 +172,18 @@ namespace Ryujinx.Ava.UI.ViewModels return false; } - if (!_applicationLibrary.TryGetDownloadableContentFromFile(path, out var dlcs) || dlcs.Count == 0) + if (!_applicationLibrary.TryGetDownloadableContentFromFile(path, out List dlcs) || dlcs.Count == 0) { return false; } - var dlcsForThisGame = dlcs.Where(it => it.TitleIdBase == _applicationData.IdBase).ToList(); + List dlcsForThisGame = dlcs.Where(it => it.TitleIdBase == _applicationData.IdBase).ToList(); if (dlcsForThisGame.Count == 0) { return false; } - foreach (var dlc in dlcsForThisGame) + foreach (DownloadableContentModel dlc in dlcsForThisGame) { if (!DownloadableContents.Contains(dlc)) { @@ -246,13 +247,13 @@ namespace Ryujinx.Ava.UI.ViewModels public void Save() { - var dlcs = DownloadableContents.Select(it => (it, SelectedDownloadableContents.Contains(it))).ToList(); + List<(DownloadableContentModel it, bool)> dlcs = DownloadableContents.Select(it => (it, SelectedDownloadableContents.Contains(it))).ToList(); _applicationLibrary.SaveDownloadableContentsForGame(_applicationData, dlcs); } private Task ShowNewDlcAddedDialog(int numAdded) { - var msg = string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowDlcAddedMessage], numAdded); + string msg = string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowDlcAddedMessage], numAdded); return Dispatcher.UIThread.InvokeAsync(async () => { await ContentDialogHelper.ShowTextDialog( diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index c59ec540c..cd0488f5f 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -215,7 +215,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input return; } - var selected = Devices[_device].Type; + DeviceType selected = Devices[_device].Type; if (selected != DeviceType.None) { @@ -299,7 +299,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input } else { - var type = DeviceType.None; + DeviceType type = DeviceType.None; if (Config is StandardKeyboardInputConfig) { @@ -311,7 +311,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input type = DeviceType.Controller; } - var item = Devices.FirstOrDefault(x => x.Type == type && x.Id == Config.Id); + (DeviceType Type, string Id, string Name) item = Devices.FirstOrDefault(x => x.Type == type && x.Id == Config.Id); if (item != default) { Device = Devices.ToList().FindIndex(x => x.Id == item.Id); @@ -331,7 +331,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input } string id = GetCurrentGamepadId(); - var type = Devices[Device].Type; + DeviceType type = Devices[Device].Type; if (type == DeviceType.None) { @@ -373,7 +373,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input return string.Empty; } - var device = Devices[Device]; + (DeviceType Type, string Id, string Name) device = Devices[Device]; if (device.Type == DeviceType.None) { @@ -485,7 +485,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input private string GetProfileBasePath() { string path = AppDataManager.ProfilesDirPath; - var type = Devices[Device == -1 ? 0 : Device].Type; + DeviceType type = Devices[Device == -1 ? 0 : Device].Type; if (type == DeviceType.Keyboard) { @@ -525,7 +525,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public InputConfig LoadDefaultConfiguration() { - var activeDevice = Devices.FirstOrDefault(); + (DeviceType Type, string Id, string Name) activeDevice = Devices.FirstOrDefault(); if (Devices.Count > 0 && Device < Devices.Count && Device >= 0) { @@ -822,20 +822,20 @@ namespace Ryujinx.Ava.UI.ViewModels.Input } else { - var device = Devices[Device]; + (DeviceType Type, string Id, string Name) device = Devices[Device]; if (device.Type == DeviceType.Keyboard) { - var inputConfig = (ConfigViewModel as KeyboardInputViewModel).Config; + KeyboardInputConfig inputConfig = (ConfigViewModel as KeyboardInputViewModel).Config; inputConfig.Id = device.Id; } else { - var inputConfig = (ConfigViewModel as ControllerInputViewModel).Config; + GamepadInputConfig inputConfig = (ConfigViewModel as ControllerInputViewModel).Config; inputConfig.Id = device.Id.Split(" ")[0]; } - var config = !IsController + InputConfig config = !IsController ? (ConfigViewModel as KeyboardInputViewModel).Config.GetConfig() : (ConfigViewModel as ControllerInputViewModel).Config.GetConfig(); config.ControllerType = Controllers[_controller].Type; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 07cad41c5..1f938d313 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -1046,9 +1046,9 @@ namespace Ryujinx.Ava.UI.ViewModels private void PrepareLoadScreen() { using MemoryStream stream = new(SelectedIcon); - using var gameIconBmp = SKBitmap.Decode(stream); + using SKBitmap gameIconBmp = SKBitmap.Decode(stream); - var dominantColor = IconColorPicker.GetFilteredColor(gameIconBmp); + SKColor dominantColor = IconColorPicker.GetFilteredColor(gameIconBmp); const float ColorMultiple = 0.5f; @@ -1132,7 +1132,7 @@ namespace Ryujinx.Ava.UI.ViewModels private async Task LoadContentFromFolder(LocaleKeys localeMessageAddedKey, LocaleKeys localeMessageRemovedKey, LoadContentFromFolderDelegate onDirsSelected) { - var result = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + IReadOnlyList result = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions { Title = LocaleManager.Instance[LocaleKeys.OpenFolderDialogTitle], AllowMultiple = true, @@ -1140,10 +1140,10 @@ namespace Ryujinx.Ava.UI.ViewModels if (result.Count > 0) { - var dirs = result.Select(it => it.Path.LocalPath).ToList(); - var numAdded = onDirsSelected(dirs, out int numRemoved); + List dirs = result.Select(it => it.Path.LocalPath).ToList(); + int numAdded = onDirsSelected(dirs, out int numRemoved); - var msg = String.Join("\r\n", new string[] { + string msg = String.Join("\r\n", new string[] { string.Format(LocaleManager.Instance[localeMessageRemovedKey], numRemoved), string.Format(LocaleManager.Instance[localeMessageAddedKey], numAdded) }); @@ -1180,17 +1180,17 @@ namespace Ryujinx.Ava.UI.ViewModels public void LoadConfigurableHotKeys() { - if (AvaloniaKeyboardMappingHelper.TryGetAvaKey((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.ShowUI, out var showUiKey)) + if (AvaloniaKeyboardMappingHelper.TryGetAvaKey((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.ShowUI, out Avalonia.Input.Key showUiKey)) { ShowUiKey = new KeyGesture(showUiKey); } - if (AvaloniaKeyboardMappingHelper.TryGetAvaKey((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Screenshot, out var screenshotKey)) + if (AvaloniaKeyboardMappingHelper.TryGetAvaKey((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Screenshot, out Avalonia.Input.Key screenshotKey)) { ScreenshotKey = new KeyGesture(screenshotKey); } - if (AvaloniaKeyboardMappingHelper.TryGetAvaKey((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Pause, out var pauseKey)) + if (AvaloniaKeyboardMappingHelper.TryGetAvaKey((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Pause, out Avalonia.Input.Key pauseKey)) { PauseKey = new KeyGesture(pauseKey); } @@ -1238,7 +1238,7 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task InstallFirmwareFromFile() { - var result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + IReadOnlyList result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { AllowMultiple = false, FileTypeFilter = new List @@ -1272,7 +1272,7 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task InstallFirmwareFromFolder() { - var result = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + IReadOnlyList result = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions { AllowMultiple = false, }); @@ -1285,7 +1285,7 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task InstallKeysFromFile() { - var result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + IReadOnlyList result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { AllowMultiple = false, FileTypeFilter = new List @@ -1319,7 +1319,7 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task InstallKeysFromFolder() { - var result = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + IReadOnlyList result = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions { AllowMultiple = false, }); @@ -1410,7 +1410,7 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task OpenFile() { - var result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + IReadOnlyList result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { Title = LocaleManager.Instance[LocaleKeys.OpenFileDialogTitle], AllowMultiple = false, @@ -1501,7 +1501,7 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task OpenFolder() { - var result = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + IReadOnlyList result = await StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions { Title = LocaleManager.Instance[LocaleKeys.OpenFolderDialogTitle], AllowMultiple = false, @@ -1682,7 +1682,7 @@ namespace Ryujinx.Ava.UI.ViewModels { if (AppHost.Device.System.SearchingForAmiibo(out _) && IsGameRunning) { - var result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + IReadOnlyList result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { Title = LocaleManager.Instance[LocaleKeys.OpenFileDialogTitle], AllowMultiple = false, @@ -1802,16 +1802,16 @@ namespace Ryujinx.Ava.UI.ViewModels return; } - var trimmer = new XCIFileTrimmer(filename, new XCITrimmerLog.MainWindow(this)); + XCIFileTrimmer trimmer = new XCIFileTrimmer(filename, new XCITrimmerLog.MainWindow(this)); if (trimmer.CanBeTrimmed) { - var savings = (double)trimmer.DiskSpaceSavingsB / 1024.0 / 1024.0; - var currentFileSize = (double)trimmer.FileSizeB / 1024.0 / 1024.0; - var cartDataSize = (double)trimmer.DataSizeB / 1024.0 / 1024.0; + double savings = (double)trimmer.DiskSpaceSavingsB / 1024.0 / 1024.0; + double currentFileSize = (double)trimmer.FileSizeB / 1024.0 / 1024.0; + double cartDataSize = (double)trimmer.DataSizeB / 1024.0 / 1024.0; string secondaryText = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.TrimXCIFileDialogSecondaryText, currentFileSize, cartDataSize, savings); - var result = await ContentDialogHelper.CreateConfirmationDialog( + UserResult result = await ContentDialogHelper.CreateConfirmationDialog( LocaleManager.Instance[LocaleKeys.TrimXCIFileDialogPrimaryText], secondaryText, LocaleManager.Instance[LocaleKeys.Continue], diff --git a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs index ce40ce16c..7c465572d 100644 --- a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs @@ -12,6 +12,8 @@ using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE.HOS; using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; using System.IO; using System.Linq; @@ -77,37 +79,37 @@ namespace Ryujinx.Ava.UI.ViewModels string[] modsBasePaths = [ModLoader.GetSdModsBasePath(), ModLoader.GetModsBasePath()]; - foreach (var path in modsBasePaths) + foreach (string path in modsBasePaths) { - var inSd = path == ModLoader.GetSdModsBasePath(); - var modCache = new ModLoader.ModCache(); + bool inSd = path == ModLoader.GetSdModsBasePath(); + ModLoader.ModCache modCache = new ModLoader.ModCache(); ModLoader.QueryContentsDir(modCache, new DirectoryInfo(Path.Combine(path, "contents")), applicationId); - foreach (var mod in modCache.RomfsDirs) + foreach (ModLoader.Mod mod in modCache.RomfsDirs) { - var modModel = new ModModel(mod.Path.Parent.FullName, mod.Name, mod.Enabled, inSd); + ModModel modModel = new ModModel(mod.Path.Parent.FullName, mod.Name, mod.Enabled, inSd); if (Mods.All(x => x.Path != mod.Path.Parent.FullName)) { Mods.Add(modModel); } } - foreach (var mod in modCache.RomfsContainers) + foreach (ModLoader.Mod mod in modCache.RomfsContainers) { Mods.Add(new ModModel(mod.Path.FullName, mod.Name, mod.Enabled, inSd)); } - foreach (var mod in modCache.ExefsDirs) + foreach (ModLoader.Mod mod in modCache.ExefsDirs) { - var modModel = new ModModel(mod.Path.Parent.FullName, mod.Name, mod.Enabled, inSd); + ModModel modModel = new ModModel(mod.Path.Parent.FullName, mod.Name, mod.Enabled, inSd); if (Mods.All(x => x.Path != mod.Path.Parent.FullName)) { Mods.Add(modModel); } } - foreach (var mod in modCache.ExefsContainers) + foreach (ModLoader.Mod mod in modCache.ExefsContainers) { Mods.Add(new ModModel(mod.Path.FullName, mod.Name, mod.Enabled, inSd)); } @@ -120,7 +122,7 @@ namespace Ryujinx.Ava.UI.ViewModels { Mods.AsObservableChangeSet() .Filter(Filter) - .Bind(out var view).AsObservableList(); + .Bind(out ReadOnlyObservableCollection view).AsObservableList(); #pragma warning disable MVVMTK0034 // Event to update is fired below _views.Clear(); @@ -163,10 +165,10 @@ namespace Ryujinx.Ava.UI.ViewModels public void Delete(ModModel model, bool removeFromList = true) { - var isSubdir = true; - var pathToDelete = model.Path; - var basePath = model.InSd ? ModLoader.GetSdModsBasePath() : ModLoader.GetModsBasePath(); - var modsDir = ModLoader.GetApplicationDir(basePath, _applicationId.ToString("x16")); + bool isSubdir = true; + string pathToDelete = model.Path; + string basePath = model.InSd ? ModLoader.GetSdModsBasePath() : ModLoader.GetModsBasePath(); + string modsDir = ModLoader.GetApplicationDir(basePath, _applicationId.ToString("x16")); if (new DirectoryInfo(model.Path).Parent?.FullName == modsDir) { @@ -175,9 +177,9 @@ namespace Ryujinx.Ava.UI.ViewModels if (isSubdir) { - var parentDir = String.Empty; + string parentDir = String.Empty; - foreach (var dir in Directory.GetDirectories(modsDir, "*", SearchOption.TopDirectoryOnly)) + foreach (string dir in Directory.GetDirectories(modsDir, "*", SearchOption.TopDirectoryOnly)) { if (Directory.GetDirectories(dir, "*", SearchOption.AllDirectories).Contains(model.Path)) { @@ -229,10 +231,10 @@ namespace Ryujinx.Ava.UI.ViewModels return; } - var destinationDir = ModLoader.GetApplicationDir(ModLoader.GetSdModsBasePath(), _applicationId.ToString("x16")); + string destinationDir = ModLoader.GetApplicationDir(ModLoader.GetSdModsBasePath(), _applicationId.ToString("x16")); // TODO: More robust checking for valid mod folders - var isDirectoryValid = true; + bool isDirectoryValid = true; if (directories.Length == 0) { @@ -248,7 +250,7 @@ namespace Ryujinx.Ava.UI.ViewModels return; } - foreach (var dir in directories) + foreach (string dir in directories) { string dirToCreate = dir.Replace(directory.Parent.ToString(), destinationDir); @@ -269,9 +271,9 @@ namespace Ryujinx.Ava.UI.ViewModels Directory.CreateDirectory(dirToCreate); } - var files = Directory.GetFiles(directory.ToString(), "*", SearchOption.AllDirectories); + string[] files = Directory.GetFiles(directory.ToString(), "*", SearchOption.AllDirectories); - foreach (var file in files) + foreach (string file in files) { File.Copy(file, file.Replace(directory.Parent.ToString(), destinationDir), true); } @@ -281,13 +283,13 @@ namespace Ryujinx.Ava.UI.ViewModels public async void Add() { - var result = await _storageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + IReadOnlyList result = await _storageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions { Title = LocaleManager.Instance[LocaleKeys.SelectModDialogTitle], AllowMultiple = true, }); - foreach (var folder in result) + foreach (IStorageFolder folder in result) { AddMod(new DirectoryInfo(folder.Path.LocalPath)); } diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index b2311cfc7..b2f94d7b6 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -17,6 +17,7 @@ using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.GraphicsDriver; using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.HLE.FileSystem; @@ -386,7 +387,7 @@ namespace Ryujinx.Ava.UI.ViewModels { AvailableGpus.Clear(); - var devices = VulkanRenderer.GetPhysicalDevices(); + DeviceInfo[] devices = VulkanRenderer.GetPhysicalDevices(); if (devices.Length == 0) { @@ -395,7 +396,7 @@ namespace Ryujinx.Ava.UI.ViewModels } else { - foreach (var device in devices) + foreach (DeviceInfo device in devices) { await Dispatcher.UIThread.InvokeAsync(() => { diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index 86d59d6b4..b01929291 100644 --- a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -41,7 +41,7 @@ namespace Ryujinx.Ava.UI.ViewModels private void LoadUpdates() { - var updates = ApplicationLibrary.TitleUpdates.Items + IEnumerable<(TitleUpdateModel TitleUpdate, bool IsSelected)> updates = ApplicationLibrary.TitleUpdates.Items .Where(it => it.TitleUpdate.TitleIdBase == ApplicationData.IdBase); bool hasBundledContent = false; @@ -64,11 +64,11 @@ namespace Ryujinx.Ava.UI.ViewModels public void SortUpdates() { - var sortedUpdates = TitleUpdates.OrderByDescending(update => update.Version); + IOrderedEnumerable sortedUpdates = TitleUpdates.OrderByDescending(update => update.Version); // NOTE(jpr): this works around a bug where calling Views.Clear also clears SelectedUpdate for // some reason. so we save the item here and restore it after - var selected = SelectedUpdate; + object selected = SelectedUpdate; Views.Clear(); Views.Add(new TitleUpdateViewModelNoUpdate()); @@ -96,18 +96,18 @@ namespace Ryujinx.Ava.UI.ViewModels return false; } - if (!ApplicationLibrary.TryGetTitleUpdatesFromFile(path, out var updates)) + if (!ApplicationLibrary.TryGetTitleUpdatesFromFile(path, out List updates)) { return false; } - var updatesForThisGame = updates.Where(it => it.TitleIdBase == ApplicationData.Id).ToList(); + List updatesForThisGame = updates.Where(it => it.TitleIdBase == ApplicationData.Id).ToList(); if (updatesForThisGame.Count == 0) { return false; } - foreach (var update in updatesForThisGame) + foreach (TitleUpdateModel update in updatesForThisGame) { if (!TitleUpdates.Contains(update)) { @@ -142,7 +142,7 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task Add() { - var result = await _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + IReadOnlyList result = await _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { AllowMultiple = true, FileTypeFilter = new List @@ -156,10 +156,10 @@ namespace Ryujinx.Ava.UI.ViewModels }, }); - var totalUpdatesAdded = 0; - foreach (var file in result) + int totalUpdatesAdded = 0; + foreach (IStorageFile file in result) { - if (!AddUpdate(file.Path.LocalPath, out var newUpdatesAdded)) + if (!AddUpdate(file.Path.LocalPath, out int newUpdatesAdded)) { await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogUpdateAddUpdateErrorMessage]); } @@ -175,13 +175,13 @@ namespace Ryujinx.Ava.UI.ViewModels public void Save() { - var updates = TitleUpdates.Select(it => (it, it == SelectedUpdate as TitleUpdateModel)).ToList(); + List<(TitleUpdateModel it, bool)> updates = TitleUpdates.Select(it => (it, it == SelectedUpdate as TitleUpdateModel)).ToList(); ApplicationLibrary.SaveTitleUpdatesForGame(ApplicationData, updates); } private Task ShowNewUpdatesAddedDialog(int numAdded) { - var msg = string.Format(LocaleManager.Instance[LocaleKeys.UpdateWindowUpdateAddedMessage], numAdded); + string msg = string.Format(LocaleManager.Instance[LocaleKeys.UpdateWindowUpdateAddedMessage], numAdded); return Dispatcher.UIThread.InvokeAsync(async () => await ContentDialogHelper.ShowTextDialog( LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle], diff --git a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs index 29c81308b..d0b178e41 100644 --- a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs @@ -68,7 +68,7 @@ namespace Ryujinx.Ava.UI.ViewModels { Images.Clear(); - foreach (var image in _avatarStore) + foreach (KeyValuePair image in _avatarStore) { Images.Add(new ProfileImageModel(image.Key, image.Value)); } @@ -76,7 +76,7 @@ namespace Ryujinx.Ava.UI.ViewModels private void ChangeImageBackground() { - foreach (var image in Images) + foreach (ProfileImageModel image in Images) { image.BackgroundColor = new SolidColorBrush(BackgroundColor); } @@ -104,7 +104,7 @@ namespace Ryujinx.Ava.UI.ViewModels // TODO: Parse DatabaseInfo.bin and table.bin files for more accuracy. if (item.Type == DirectoryEntryType.File && item.FullPath.Contains("chara") && item.FullPath.Contains("szs")) { - using var file = new UniqueRef(); + using UniqueRef file = new UniqueRef(); romfs.OpenFile(ref file.Ref, ("/" + item.FullPath).ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs index 187df0449..ac711089e 100644 --- a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs @@ -41,7 +41,7 @@ namespace Ryujinx.Ava.UI.ViewModels Saves.AsObservableChangeSet() .Filter(Filter) .Sort(GetComparer()) - .Bind(out var view).AsObservableList(); + .Bind(out ReadOnlyObservableCollection view).AsObservableList(); #pragma warning disable MVVMTK0034 _views.Clear(); diff --git a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs index 64965cd96..60ddb2040 100644 --- a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs @@ -9,6 +9,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common.Utilities; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Threading; using static Ryujinx.Common.Utilities.XCIFileTrimmer; @@ -54,10 +55,10 @@ namespace Ryujinx.Ava.UI.ViewModels private void LoadXCIApplications() { - var apps = ApplicationLibrary.Applications.Items + IEnumerable apps = ApplicationLibrary.Applications.Items .Where(app => app.FileExtension == _FileExtXCI); - foreach (var xciApp in apps) + foreach (ApplicationData xciApp in apps) AddOrUpdateXCITrimmerFile(CreateXCITrimmerFile(xciApp.Path)); ApplicationsChanged(); @@ -67,7 +68,7 @@ namespace Ryujinx.Ava.UI.ViewModels string path, OperationOutcome operationOutcome = OperationOutcome.Undetermined) { - var xciApp = ApplicationLibrary.Applications.Items.First(app => app.FileExtension == _FileExtXCI && app.Path == path); + ApplicationData xciApp = ApplicationLibrary.Applications.Items.First(app => app.FileExtension == _FileExtXCI && app.Path == path); return XCITrimmerFileModel.FromApplicationData(xciApp, _logger) with { ProcessingOutcome = operationOutcome }; } @@ -156,17 +157,17 @@ namespace Ryujinx.Ava.UI.ViewModels _processingMode = processingMode; Processing = true; - var cancellationToken = _cancellationTokenSource.Token; + CancellationToken cancellationToken = _cancellationTokenSource.Token; Thread XCIFileTrimThread = new(() => { - var toProcess = Sort(SelectedXCIFiles + List toProcess = Sort(SelectedXCIFiles .Where(xci => (processingMode == ProcessingMode.Untrimming && xci.Untrimmable) || (processingMode == ProcessingMode.Trimming && xci.Trimmable) )).ToList(); - var viewsSaved = DisplayedXCIFiles.ToList(); + List viewsSaved = DisplayedXCIFiles.ToList(); Dispatcher.UIThread.Post(() => { @@ -177,19 +178,19 @@ namespace Ryujinx.Ava.UI.ViewModels try { - foreach (var xciApp in toProcess) + foreach (XCITrimmerFileModel xciApp in toProcess) { if (cancellationToken.IsCancellationRequested) break; - var trimmer = new XCIFileTrimmer(xciApp.Path, _logger); + XCIFileTrimmer trimmer = new XCIFileTrimmer(xciApp.Path, _logger); Dispatcher.UIThread.Post(() => { ProcessingApplication = xciApp; }); - var outcome = OperationOutcome.Undetermined; + OperationOutcome outcome = OperationOutcome.Undetermined; try { @@ -347,7 +348,7 @@ namespace Ryujinx.Ava.UI.ViewModels Sort(AllXCIFiles) .AsObservableChangeSet() .Filter(Filter) - .Bind(out var view).AsObservableList(); + .Bind(out ReadOnlyObservableCollection view).AsObservableList(); _displayedXCIFiles.Clear(); _displayedXCIFiles.AddRange(view); diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs index 81483ce0e..4fdc84419 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs @@ -12,6 +12,7 @@ using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Input; using Ryujinx.Input.Assigner; using System.Linq; +using Button = Ryujinx.Input.Button; using StickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId; namespace Ryujinx.Ava.UI.Views.Input @@ -104,7 +105,7 @@ namespace Ryujinx.Ava.UI.Views.Input PointerPressed += MouseClick; - var viewModel = (DataContext as ControllerInputViewModel); + ControllerInputViewModel viewModel = (DataContext as ControllerInputViewModel); IKeyboard keyboard = (IKeyboard)viewModel.ParentModel.AvaloniaKeyboardDriver @@ -115,7 +116,7 @@ namespace Ryujinx.Ava.UI.Views.Input { if (e.ButtonValue.HasValue) { - var buttonValue = e.ButtonValue.Value; + Button buttonValue = e.ButtonValue.Value; viewModel.ParentModel.IsModified = true; switch (button.Name) @@ -223,7 +224,7 @@ namespace Ryujinx.Ava.UI.Views.Input { IButtonAssigner assigner; - var controllerInputViewModel = DataContext as ControllerInputViewModel; + ControllerInputViewModel controllerInputViewModel = DataContext as ControllerInputViewModel; assigner = new GamepadButtonAssigner( controllerInputViewModel.ParentModel.SelectedGamepad, diff --git a/src/Ryujinx/UI/Views/Input/InputView.axaml.cs b/src/Ryujinx/UI/Views/Input/InputView.axaml.cs index 3c9d4040f..b1061f70d 100644 --- a/src/Ryujinx/UI/Views/Input/InputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/InputView.axaml.cs @@ -37,7 +37,7 @@ namespace Ryujinx.Ava.UI.Views.Input { _dialogOpen = true; - var result = await ContentDialogHelper.CreateDeniableConfirmationDialog( + UserResult result = await ContentDialogHelper.CreateDeniableConfirmationDialog( LocaleManager.Instance[LocaleKeys.DialogControllerSettingsModifiedConfirmMessage], LocaleManager.Instance[LocaleKeys.DialogControllerSettingsModifiedConfirmSubMessage], LocaleManager.Instance[LocaleKeys.InputDialogYes], diff --git a/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs index 090d0335c..99e424d4f 100644 --- a/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/KeyboardInputView.axaml.cs @@ -8,6 +8,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels.Input; using Ryujinx.Input; using Ryujinx.Input.Assigner; +using Button = Ryujinx.Input.Button; using Key = Ryujinx.Common.Configuration.Hid.Key; namespace Ryujinx.Ava.UI.Views.Input @@ -71,7 +72,7 @@ namespace Ryujinx.Ava.UI.Views.Input { if (e.ButtonValue.HasValue) { - var buttonValue = e.ButtonValue.Value; + Button buttonValue = e.ButtonValue.Value; viewModel.ParentModel.IsModified = true; switch (button.Name) diff --git a/src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs index ca4a4e1cf..36068821f 100644 --- a/src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/MotionInputView.axaml.cs @@ -1,6 +1,7 @@ using Avalonia.Controls; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.ViewModels.Input; using System.Threading.Tasks; @@ -17,7 +18,7 @@ namespace Ryujinx.Ava.UI.Views.Input public MotionInputView(ControllerInputViewModel viewModel) { - var config = viewModel.Config; + GamepadInputConfig config = viewModel.Config; _viewModel = new MotionInputViewModel { @@ -49,7 +50,7 @@ namespace Ryujinx.Ava.UI.Views.Input }; contentDialog.PrimaryButtonClick += (sender, args) => { - var config = viewModel.Config; + GamepadInputConfig config = viewModel.Config; config.Slot = content._viewModel.Slot; config.Sensitivity = content._viewModel.Sensitivity; config.GyroDeadzone = content._viewModel.GyroDeadzone; diff --git a/src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs index 86a75e6eb..6a76ea59b 100644 --- a/src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/RumbleInputView.axaml.cs @@ -1,6 +1,7 @@ using Avalonia.Controls; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.ViewModels.Input; using System.Threading.Tasks; @@ -17,7 +18,7 @@ namespace Ryujinx.Ava.UI.Views.Input public RumbleInputView(ControllerInputViewModel viewModel) { - var config = viewModel.Config; + GamepadInputConfig config = viewModel.Config; _viewModel = new RumbleInputViewModel { @@ -45,7 +46,7 @@ namespace Ryujinx.Ava.UI.Views.Input contentDialog.PrimaryButtonClick += (sender, args) => { - var config = viewModel.Config; + GamepadInputConfig config = viewModel.Config; config.StrongRumble = content._viewModel.StrongRumble; config.WeakRumble = content._viewModel.WeakRumble; }; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 9a63c022d..113c77e15 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -4,11 +4,14 @@ using Avalonia.Layout; using Avalonia.Threading; using CommunityToolkit.Mvvm.Input; using Gommon; +using LibHac.Common; +using LibHac.Ns; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Ava.Utilities.Compat; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; @@ -142,7 +145,7 @@ namespace Ryujinx.Ava.UI.Views.Main public async Task OpenMiiApplet() { - if (!MiiApplet.CanStart(out var appData, out var nacpData)) + if (!MiiApplet.CanStart(out ApplicationData appData, out BlitStruct nacpData)) return; await ViewModel.LoadApplication(appData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen, nacpData); diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs index 609f61633..d3d1537e0 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsHotkeysView.axaml.cs @@ -8,6 +8,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Input; using Ryujinx.Input.Assigner; +using Button = Ryujinx.Input.Button; using Key = Ryujinx.Common.Configuration.Hid.Key; namespace Ryujinx.Ava.UI.Views.Settings @@ -70,15 +71,15 @@ namespace Ryujinx.Ava.UI.Views.Settings PointerPressed += MouseClick; - var keyboard = (IKeyboard)_avaloniaKeyboardDriver.GetGamepad("0"); + IKeyboard keyboard = (IKeyboard)_avaloniaKeyboardDriver.GetGamepad("0"); IButtonAssigner assigner = new KeyboardKeyAssigner(keyboard); _currentAssigner.ButtonAssigned += (sender, e) => { if (e.ButtonValue.HasValue) { - var viewModel = (DataContext) as SettingsViewModel; - var buttonValue = e.ButtonValue.Value; + SettingsViewModel viewModel = (DataContext) as SettingsViewModel; + Button buttonValue = e.ButtonValue.Value; switch (button.Name) { diff --git a/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs index 588fa471e..695586a36 100644 --- a/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserEditorView.axaml.cs @@ -39,7 +39,7 @@ namespace Ryujinx.Ava.UI.Views.User switch (arg.NavigationMode) { case NavigationMode.New: - var (parent, profile, isNewUser) = ((NavigationDialogHost parent, UserProfile profile, bool isNewUser))arg.Parameter; + (NavigationDialogHost parent, UserProfile profile, bool isNewUser) = ((NavigationDialogHost parent, UserProfile profile, bool isNewUser))arg.Parameter; _isNewUser = isNewUser; _profile = profile; TempProfile = new TempProfile(_profile); diff --git a/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs index 064b5e908..206926755 100644 --- a/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs @@ -66,11 +66,11 @@ namespace Ryujinx.Ava.UI.Views.User { if (ViewModel.SelectedImage != null) { - using var streamJpg = new MemoryStream(); - using var bitmap = SKBitmap.Decode(ViewModel.SelectedImage); - using var newBitmap = new SKBitmap(bitmap.Width, bitmap.Height); + using MemoryStream streamJpg = new MemoryStream(); + using SKBitmap bitmap = SKBitmap.Decode(ViewModel.SelectedImage); + using SKBitmap newBitmap = new SKBitmap(bitmap.Width, bitmap.Height); - using (var canvas = new SKCanvas(newBitmap)) + using (SKCanvas canvas = new SKCanvas(newBitmap)) { canvas.Clear(new SKColor( ViewModel.BackgroundColor.R, @@ -80,8 +80,8 @@ namespace Ryujinx.Ava.UI.Views.User canvas.DrawBitmap(bitmap, 0, 0); } - using (var image = SKImage.FromBitmap(newBitmap)) - using (var dataJpeg = image.Encode(SKEncodedImageFormat.Jpeg, 100)) + using (SKImage image = SKImage.FromBitmap(newBitmap)) + using (SKData dataJpeg = image.Encode(SKEncodedImageFormat.Jpeg, 100)) { dataJpeg.SaveTo(streamJpg); } diff --git a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs index dba762972..73656e881 100644 --- a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs @@ -63,7 +63,7 @@ namespace Ryujinx.Ava.UI.Views.User private async void Import_OnClick(object sender, RoutedEventArgs e) { - var result = await ((Window)this.GetVisualRoot()!).StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + IReadOnlyList result = await ((Window)this.GetVisualRoot()!).StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { AllowMultiple = false, FileTypeFilter = new List @@ -99,16 +99,16 @@ namespace Ryujinx.Ava.UI.Views.User private static byte[] ProcessProfileImage(byte[] buffer) { - using var bitmap = SKBitmap.Decode(buffer); + using SKBitmap bitmap = SKBitmap.Decode(buffer); - var resizedBitmap = bitmap.Resize(new SKImageInfo(256, 256), SKFilterQuality.High); + SKBitmap resizedBitmap = bitmap.Resize(new SKImageInfo(256, 256), SKFilterQuality.High); - using var streamJpg = new MemoryStream(); + using MemoryStream streamJpg = new MemoryStream(); if (resizedBitmap != null) { - using var image = SKImage.FromBitmap(resizedBitmap); - using var dataJpeg = image.Encode(SKEncodedImageFormat.Jpeg, 100); + using SKImage image = SKImage.FromBitmap(resizedBitmap); + using SKData dataJpeg = image.Encode(SKEncodedImageFormat.Jpeg, 100); dataJpeg.SaveTo(streamJpg); } diff --git a/src/Ryujinx/UI/Views/User/UserRecovererView.axaml.cs b/src/Ryujinx/UI/Views/User/UserRecovererView.axaml.cs index 31934349d..98d7ceac9 100644 --- a/src/Ryujinx/UI/Views/User/UserRecovererView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserRecovererView.axaml.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Ava.UI.Views.User switch (arg.NavigationMode) { case NavigationMode.New: - var parent = (NavigationDialogHost)arg.Parameter; + NavigationDialogHost parent = (NavigationDialogHost)arg.Parameter; _parent = parent; diff --git a/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs b/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs index 69986c014..1d9cb10cf 100644 --- a/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs @@ -48,7 +48,7 @@ namespace Ryujinx.Ava.UI.Views.User switch (arg.NavigationMode) { case NavigationMode.New: - var (parent, accountManager, client, virtualFileSystem) = ((NavigationDialogHost parent, AccountManager accountManager, HorizonClient client, VirtualFileSystem virtualFileSystem))arg.Parameter; + (NavigationDialogHost parent, AccountManager accountManager, HorizonClient client, VirtualFileSystem virtualFileSystem) = ((NavigationDialogHost parent, AccountManager accountManager, HorizonClient client, VirtualFileSystem virtualFileSystem))arg.Parameter; _accountManager = accountManager; _horizonClient = client; _virtualFileSystem = virtualFileSystem; @@ -67,15 +67,15 @@ namespace Ryujinx.Ava.UI.Views.User public void LoadSaves() { ViewModel.Saves.Clear(); - var saves = new ObservableCollection(); - var saveDataFilter = SaveDataFilter.Make( + ObservableCollection saves = new ObservableCollection(); + SaveDataFilter saveDataFilter = SaveDataFilter.Make( programId: default, saveType: SaveDataType.Account, new UserId((ulong)_accountManager.LastOpenedUser.UserId.High, (ulong)_accountManager.LastOpenedUser.UserId.Low), saveDataId: default, index: default); - using var saveDataIterator = new UniqueRef(); + using UniqueRef saveDataIterator = new UniqueRef(); _horizonClient.Fs.OpenSaveDataIterator(ref saveDataIterator.Ref, SaveDataSpaceId.User, in saveDataFilter).ThrowIfFailure(); @@ -92,10 +92,10 @@ namespace Ryujinx.Ava.UI.Views.User for (int i = 0; i < readCount; i++) { - var save = saveDataInfo[i]; + SaveDataInfo save = saveDataInfo[i]; if (save.ProgramId.Value != 0) { - var saveModel = new SaveModel(save); + SaveModel saveModel = new SaveModel(save); saves.Add(saveModel); } } @@ -130,7 +130,7 @@ namespace Ryujinx.Ava.UI.Views.User { if (button.DataContext is SaveModel saveModel) { - var result = await ContentDialogHelper.CreateConfirmationDialog(LocaleManager.Instance[LocaleKeys.DeleteUserSave], + UserResult result = await ContentDialogHelper.CreateConfirmationDialog(LocaleManager.Instance[LocaleKeys.DeleteUserSave], LocaleManager.Instance[LocaleKeys.IrreversibleActionNote], LocaleManager.Instance[LocaleKeys.InputDialogYes], LocaleManager.Instance[LocaleKeys.InputDialogNo], diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index c770a6f45..3ed27bfe7 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -6,6 +6,7 @@ using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; +using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; @@ -58,7 +59,7 @@ namespace Ryujinx.Ava.UI.Windows int cheatAdded = 0; - var mods = new ModLoader.ModCache(); + ModLoader.ModCache mods = new ModLoader.ModCache(); ModLoader.QueryContentsDir(mods, new DirectoryInfo(Path.Combine(modsBasePath, "contents")), titleIdValue); @@ -67,7 +68,7 @@ namespace Ryujinx.Ava.UI.Windows CheatNode currentGroup = null; - foreach (var cheat in mods.Cheats) + foreach (ModLoader.Cheat cheat in mods.Cheats) { if (cheat.Path.FullName != currentCheatFile) { @@ -80,7 +81,7 @@ namespace Ryujinx.Ava.UI.Windows LoadedCheats.Add(currentGroup); } - var model = new CheatNode(cheat.Name, buildId, string.Empty, false, enabled.Contains($"{buildId}-{cheat.Name}")); + CheatNode model = new CheatNode(cheat.Name, buildId, string.Empty, false, enabled.Contains($"{buildId}-{cheat.Name}")); currentGroup?.SubNodes.Add(model); cheatAdded++; @@ -101,7 +102,7 @@ namespace Ryujinx.Ava.UI.Windows if (NoCheatsFound) return; - var enabledCheats = LoadedCheats.SelectMany(it => it.SubNodes) + IEnumerable enabledCheats = LoadedCheats.SelectMany(it => it.SubNodes) .Where(it => it.IsEnabled) .Select(it => it.BuildIdKey); diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs index 3e8203e31..777b462b5 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs @@ -79,7 +79,7 @@ namespace Ryujinx.Ava.UI.Windows private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { - foreach (var content in e.AddedItems) + foreach (object content in e.AddedItems) { if (content is DownloadableContentModel model) { @@ -87,7 +87,7 @@ namespace Ryujinx.Ava.UI.Windows } } - foreach (var content in e.RemovedItems) + foreach (object content in e.RemovedItems) { if (content is DownloadableContentModel model) { diff --git a/src/Ryujinx/UI/Windows/IconColorPicker.cs b/src/Ryujinx/UI/Windows/IconColorPicker.cs index bfa33eb43..78ad8562f 100644 --- a/src/Ryujinx/UI/Windows/IconColorPicker.cs +++ b/src/Ryujinx/UI/Windows/IconColorPicker.cs @@ -29,7 +29,7 @@ namespace Ryujinx.Ava.UI.Windows public static SKColor GetFilteredColor(SKBitmap image) { - var color = GetColor(image); + SKColor color = GetColor(image); // We don't want colors that are too dark. @@ -49,10 +49,10 @@ namespace Ryujinx.Ava.UI.Windows public static SKColor GetColor(SKBitmap image) { - var colors = new PaletteColor[TotalColors]; - var dominantColorBin = new Dictionary(); + PaletteColor[] colors = new PaletteColor[TotalColors]; + Dictionary dominantColorBin = new Dictionary(); - var buffer = GetBuffer(image); + SKColor[] buffer = GetBuffer(image); int i = 0; int maxHitCount = 0; @@ -70,7 +70,7 @@ namespace Ryujinx.Ava.UI.Windows byte cg = pixel.Green; byte cb = pixel.Blue; - var qck = GetQuantizedColorKey(cr, cg, cb); + int qck = GetQuantizedColorKey(cr, cg, cb); if (dominantColorBin.TryGetValue(qck, out int hitCount)) { @@ -95,7 +95,7 @@ namespace Ryujinx.Ava.UI.Windows for (i = 0; i < TotalColors; i++) { - var score = GetColorScore(dominantColorBin, maxHitCount, colors[i]); + int score = GetColorScore(dominantColorBin, maxHitCount, colors[i]); if (highScore < score) { @@ -109,7 +109,7 @@ namespace Ryujinx.Ava.UI.Windows public static SKColor[] GetBuffer(SKBitmap image) { - var pixels = new SKColor[image.Width * image.Height]; + SKColor[] pixels = new SKColor[image.Width * image.Height]; for (int y = 0; y < image.Height; y++) { @@ -124,17 +124,17 @@ namespace Ryujinx.Ava.UI.Windows private static int GetColorScore(Dictionary dominantColorBin, int maxHitCount, PaletteColor color) { - var hitCount = dominantColorBin[color.Qck]; - var balancedHitCount = BalanceHitCount(hitCount, maxHitCount); - var quantSat = (GetColorSaturation(color) >> SatQuantShift) << SatQuantShift; - var value = GetColorValue(color); + int hitCount = dominantColorBin[color.Qck]; + int balancedHitCount = BalanceHitCount(hitCount, maxHitCount); + int quantSat = (GetColorSaturation(color) >> SatQuantShift) << SatQuantShift; + int value = GetColorValue(color); // If the color is rarely used on the image, // then chances are that there's a better candidate, even if the saturation value // is high. By multiplying the saturation value with a weight, we can lower // it if the color is almost never used (hit count is low). - var satWeighted = quantSat; - var satWeight = balancedHitCount << 5; + int satWeighted = quantSat; + int satWeight = balancedHitCount << 5; if (satWeight < 0x100) { satWeighted = (satWeighted * satWeight) >> 8; @@ -142,7 +142,7 @@ namespace Ryujinx.Ava.UI.Windows // Compute score from saturation and dominance of the color. // We prefer more vivid colors over dominant ones, so give more weight to the saturation. - var score = ((satWeighted << 1) + balancedHitCount) * value; + int score = ((satWeighted << 1) + balancedHitCount) * value; return score; } diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 0ee59325a..76002d1ab 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -8,6 +8,7 @@ using DynamicData; using FluentAvalonia.UI.Controls; using FluentAvalonia.UI.Windowing; using Gommon; +using LibHac.Ns; using LibHac.Tools.FsSystem; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; @@ -171,11 +172,11 @@ namespace Ryujinx.Ava.UI.Windows { Dispatcher.UIThread.Post(() => { - var ldnGameDataArray = e.LdnData.ToList(); + List ldnGameDataArray = e.LdnData.ToList(); ViewModel.LdnData.Clear(); - foreach (var application in ViewModel.Applications.Where(it => it.HasControlHolder)) + foreach (ApplicationData application in ViewModel.Applications.Where(it => it.HasControlHolder)) { - ref var controlHolder = ref application.ControlHolder.Value; + ref ApplicationControlProperty controlHolder = ref application.ControlHolder.Value; ViewModel.LdnData[application.IdString] = LdnGameData.GetArrayForApp( @@ -192,7 +193,7 @@ namespace Ryujinx.Ava.UI.Windows private void UpdateApplicationWithLdnData(ApplicationData application) { - if (application.HasControlHolder && ViewModel.LdnData.TryGetValue(application.IdString, out var ldnGameDatas)) + if (application.HasControlHolder && ViewModel.LdnData.TryGetValue(application.IdString, out LdnGameData.Array ldnGameDatas)) { application.PlayerCount = ldnGameDatas.PlayerCount; application.GameCount = ldnGameDatas.GameCount; @@ -690,12 +691,12 @@ namespace Ryujinx.Ava.UI.Windows ApplicationLibrary.LoadApplications(ConfigurationState.Instance.UI.GameDirs); - var autoloadDirs = ConfigurationState.Instance.UI.AutoloadDirs.Value; + List autoloadDirs = ConfigurationState.Instance.UI.AutoloadDirs.Value; autoloadDirs.ForEach(dir => Logger.Info?.Print(LogClass.Application, $"Auto loading DLC & updates from: {dir}")); if (autoloadDirs.Count > 0) { - var updatesLoaded = ApplicationLibrary.AutoLoadTitleUpdates(autoloadDirs, out int updatesRemoved); - var dlcLoaded = ApplicationLibrary.AutoLoadDownloadableContents(autoloadDirs, out int dlcRemoved); + int updatesLoaded = ApplicationLibrary.AutoLoadTitleUpdates(autoloadDirs, out int updatesRemoved); + int dlcLoaded = ApplicationLibrary.AutoLoadDownloadableContents(autoloadDirs, out int dlcRemoved); ShowNewContentAddedDialog(dlcLoaded, dlcRemoved, updatesLoaded, updatesRemoved); } diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs index 449aab554..3d70917f0 100644 --- a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs @@ -66,7 +66,7 @@ namespace Ryujinx.Ava.UI.Windows { if (button.DataContext is ModModel model) { - var result = await ContentDialogHelper.CreateConfirmationDialog( + UserResult result = await ContentDialogHelper.CreateConfirmationDialog( LocaleManager.Instance[LocaleKeys.DialogWarning], LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogModManagerDeletionWarningMessage, model.Name), LocaleManager.Instance[LocaleKeys.InputDialogYes], @@ -83,7 +83,7 @@ namespace Ryujinx.Ava.UI.Windows private async void DeleteAll(object sender, RoutedEventArgs e) { - var result = await ContentDialogHelper.CreateConfirmationDialog( + UserResult result = await ContentDialogHelper.CreateConfirmationDialog( LocaleManager.Instance[LocaleKeys.DialogWarning], LocaleManager.Instance[LocaleKeys.DialogModManagerDeletionAllWarningMessage], LocaleManager.Instance[LocaleKeys.InputDialogYes], @@ -109,11 +109,11 @@ namespace Ryujinx.Ava.UI.Windows private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { - foreach (var content in e.AddedItems) + foreach (object content in e.AddedItems) { if (content is ModModel model) { - var index = ViewModel.Mods.IndexOf(model); + int index = ViewModel.Mods.IndexOf(model); if (index != -1) { @@ -122,11 +122,11 @@ namespace Ryujinx.Ava.UI.Windows } } - foreach (var content in e.RemovedItems) + foreach (object content in e.RemovedItems) { if (content is ModModel model) { - var index = ViewModel.Mods.IndexOf(model); + int index = ViewModel.Mods.IndexOf(model); if (index != -1) { diff --git a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs index 03ccc06a7..e02ff6279 100644 --- a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml.cs @@ -81,7 +81,7 @@ namespace Ryujinx.Ava.UI.Windows private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { - foreach (var content in e.AddedItems) + foreach (object content in e.AddedItems) { if (content is XCITrimmerFileModel applicationData) { @@ -89,7 +89,7 @@ namespace Ryujinx.Ava.UI.Windows } } - foreach (var content in e.RemovedItems) + foreach (object content in e.RemovedItems) { if (content is XCITrimmerFileModel applicationData) { diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index f878e1af5..230840a9a 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -71,7 +71,7 @@ namespace Ryujinx.Ava } else if (OperatingSystem.IsLinux()) { - var arch = RuntimeInformation.OSArchitecture == Architecture.Arm64 ? "arm64" : "x64"; + string arch = RuntimeInformation.OSArchitecture == Architecture.Arm64 ? "arm64" : "x64"; _platformExt = $"linux_{arch}.tar.gz"; } @@ -96,10 +96,10 @@ namespace Ryujinx.Ava using HttpClient jsonClient = ConstructHttpClient(); string fetchedJson = await jsonClient.GetStringAsync(LatestReleaseUrl); - var fetched = JsonHelper.Deserialize(fetchedJson, _serializerContext.GithubReleasesJsonResponse); + GithubReleasesJsonResponse fetched = JsonHelper.Deserialize(fetchedJson, _serializerContext.GithubReleasesJsonResponse); _buildVer = fetched.TagName; - foreach (var asset in fetched.Assets) + foreach (GithubReleaseAssetJsonResponse asset in fetched.Assets) { if (asset.Name.StartsWith("ryujinx") && asset.Name.EndsWith(_platformExt)) { @@ -711,15 +711,15 @@ namespace Ryujinx.Ava // NOTE: This method should always reflect the latest build layout. private static IEnumerable EnumerateFilesToDelete() { - var files = Directory.EnumerateFiles(_homeDir); // All files directly in base dir. + IEnumerable files = Directory.EnumerateFiles(_homeDir); // All files directly in base dir. // Determine and exclude user files only when the updater is running, not when cleaning old files if (_running && !OperatingSystem.IsMacOS()) { // Compare the loose files in base directory against the loose files from the incoming update, and store foreign ones in a user list. - var oldFiles = Directory.EnumerateFiles(_homeDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName); - var newFiles = Directory.EnumerateFiles(_updatePublishDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName); - var userFiles = oldFiles.Except(newFiles).Select(filename => Path.Combine(_homeDir, filename)); + IEnumerable oldFiles = Directory.EnumerateFiles(_homeDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName); + IEnumerable newFiles = Directory.EnumerateFiles(_updatePublishDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName); + IEnumerable userFiles = oldFiles.Except(newFiles).Select(filename => Path.Combine(_homeDir, filename)); // Remove user files from the paths in files. files = files.Except(userFiles); diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs index a9610d7b2..5649addab 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs @@ -76,14 +76,14 @@ namespace Ryujinx.Ava.Utilities.AppLibrary } else { - var pfsTemp = new PartitionFileSystem(); + PartitionFileSystem pfsTemp = new PartitionFileSystem(); pfsTemp.Initialize(file.AsStorage()).ThrowIfFailure(); pfs = pfsTemp; } foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) { - using var ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new UniqueRef(); pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -158,7 +158,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return string.Empty; } - using var nsoFile = new UniqueRef(); + using UniqueRef nsoFile = new UniqueRef(); codeFs.OpenFile(ref nsoFile.Ref, $"/{MainExeFs}".ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index d5a4ac83c..7a66fe44d 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -190,7 +190,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary /// An error occured while reading PFS data. private List GetApplicationsFromPfs(IFileSystem pfs, string filePath) { - var applications = new List(); + List applications = new List(); string extension = Path.GetExtension(filePath).ToLower(); foreach ((ulong titleId, ContentMetaData content) in pfs.GetContentData(ContentMetaType.Application, _virtualFileSystem, _checkLevel)) @@ -245,7 +245,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary continue; } - using var icon = new UniqueRef(); + using UniqueRef icon = new UniqueRef(); controlFs.OpenFile(ref icon.Ref, entry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -313,7 +313,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary case ".nsp": case ".pfs0": { - var pfs = new PartitionFileSystem(); + PartitionFileSystem pfs = new PartitionFileSystem(); pfs.Initialize(file.AsStorage()).ThrowIfFailure(); ApplicationData result = GetApplicationFromNsp(pfs, applicationPath); @@ -438,7 +438,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return false; } - foreach (var data in applications) + foreach (ApplicationData data in applications) { // Only load metadata for applications with an ID if (data.Id != 0) @@ -501,7 +501,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) { - using var ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new UniqueRef(); pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -588,8 +588,8 @@ namespace Ryujinx.Ava.Utilities.AppLibrary nacpFile.Get.Read(out _, 0, LibHac.Common.SpanHelpers.AsByteSpan(ref controlData), ReadOption.None).ThrowIfFailure(); - var displayVersion = controlData.DisplayVersionString.ToString(); - var update = new TitleUpdateModel(content.ApplicationId, content.Version.Version, + string displayVersion = controlData.DisplayVersionString.ToString(); + TitleUpdateModel update = new TitleUpdateModel(content.ApplicationId, content.Version.Version, displayVersion, filePath); titleUpdates.Add(update); @@ -685,11 +685,11 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return; } - var fileInfo = new FileInfo(app); + FileInfo fileInfo = new FileInfo(app); try { - var fullPath = fileInfo.ResolveLinkTarget(true)?.FullName ?? fileInfo.FullName; + string fullPath = fileInfo.ResolveLinkTarget(true)?.FullName ?? fileInfo.FullName; applicationPaths.Add(fullPath); numApplicationsFound++; @@ -719,7 +719,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary { _applications.Edit(it => { - foreach (var application in applications) + foreach (ApplicationData application in applications) { it.AddOrUpdate(application); LoadDlcForApplication(application); @@ -840,7 +840,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary try { // Remove any downloadable content which can no longer be located on disk - var dlcToRemove = _downloadableContents.Items + List<(DownloadableContentModel Dlc, bool IsEnabled)> dlcToRemove = _downloadableContents.Items .Where(dlc => !File.Exists(dlc.Dlc.ContainerPath)) .ToList(); dlcToRemove.ForEach(dlc => @@ -882,11 +882,11 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return newDlcLoaded; } - var fileInfo = new FileInfo(app); + FileInfo fileInfo = new FileInfo(app); try { - var fullPath = fileInfo.ResolveLinkTarget(true)?.FullName ?? fileInfo.FullName; + string fullPath = fileInfo.ResolveLinkTarget(true)?.FullName ?? fileInfo.FullName; dlcPaths.Add(fullPath); } @@ -904,7 +904,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary } } - var appIdLookup = Applications.Items.Select(it => it.IdBase).ToHashSet(); + HashSet appIdLookup = Applications.Items.Select(it => it.IdBase).ToHashSet(); foreach (string dlcPath in dlcPaths) { @@ -913,9 +913,9 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return newDlcLoaded; } - if (TryGetDownloadableContentFromFile(dlcPath, out var foundDlcs)) + if (TryGetDownloadableContentFromFile(dlcPath, out List foundDlcs)) { - foreach (var dlc in foundDlcs.Where(it => appIdLookup.Contains(it.TitleIdBase))) + foreach (DownloadableContentModel dlc in foundDlcs.Where(it => appIdLookup.Contains(it.TitleIdBase))) { if (!_downloadableContents.Lookup(dlc).HasValue) { @@ -949,11 +949,11 @@ namespace Ryujinx.Ava.Utilities.AppLibrary try { - var titleIdsToSave = new HashSet(); - var titleIdsToRefresh = new HashSet(); + HashSet titleIdsToSave = new HashSet(); + HashSet titleIdsToRefresh = new HashSet(); // Remove any updates which can no longer be located on disk - var updatesToRemove = _titleUpdates.Items + List<(TitleUpdateModel TitleUpdate, bool IsSelected)> updatesToRemove = _titleUpdates.Items .Where(it => !File.Exists(it.TitleUpdate.Path)) .ToList(); @@ -998,11 +998,11 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return numUpdatesLoaded; } - var fileInfo = new FileInfo(app); + FileInfo fileInfo = new FileInfo(app); try { - var fullPath = fileInfo.ResolveLinkTarget(true)?.FullName ?? fileInfo.FullName; + string fullPath = fileInfo.ResolveLinkTarget(true)?.FullName ?? fileInfo.FullName; updatePaths.Add(fullPath); } @@ -1020,7 +1020,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary } } - var appIdLookup = Applications.Items.Select(it => it.IdBase).ToHashSet(); + HashSet appIdLookup = Applications.Items.Select(it => it.IdBase).ToHashSet(); foreach (string updatePath in updatePaths) { @@ -1029,9 +1029,9 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return numUpdatesLoaded; } - if (TryGetTitleUpdatesFromFile(updatePath, out var foundUpdates)) + if (TryGetTitleUpdatesFromFile(updatePath, out List foundUpdates)) { - foreach (var update in foundUpdates.Where(it => appIdLookup.Contains(it.TitleIdBase))) + foreach (TitleUpdateModel update in foundUpdates.Where(it => appIdLookup.Contains(it.TitleIdBase))) { if (!_titleUpdates.Lookup(update).HasValue) { @@ -1063,12 +1063,12 @@ namespace Ryujinx.Ava.Utilities.AppLibrary private bool AddAndAutoSelectUpdate(TitleUpdateModel update) { if (update == null) return false; - - var currentlySelected = TitleUpdates.Items.FirstOrOptional(it => + + DynamicData.Kernel.Optional<(TitleUpdateModel TitleUpdate, bool IsSelected)> currentlySelected = TitleUpdates.Items.FirstOrOptional(it => it.TitleUpdate.TitleIdBase == update.TitleIdBase && it.IsSelected); - var shouldSelect = !currentlySelected.HasValue || - currentlySelected.Value.TitleUpdate.Version < update.Version; + bool shouldSelect = !currentlySelected.HasValue || + currentlySelected.Value.TitleUpdate.Version < update.Version; _titleUpdates.AddOrUpdate((update, shouldSelect)); @@ -1170,7 +1170,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary } else { - var pfsTemp = new PartitionFileSystem(); + PartitionFileSystem pfsTemp = new PartitionFileSystem(); pfsTemp.Initialize(file.AsStorage()).ThrowIfFailure(); pfs = pfsTemp; @@ -1204,7 +1204,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary // Read the icon from the ControlFS and store it as a byte array try { - using var icon = new UniqueRef(); + using UniqueRef icon = new UniqueRef(); controlFs.OpenFile(ref icon.Ref, $"/icon_{desiredTitleLanguage}.dat".ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -1222,7 +1222,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary continue; } - using var icon = new UniqueRef(); + using UniqueRef icon = new UniqueRef(); controlFs.OpenFile(ref icon.Ref, entry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -1330,7 +1330,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary if (string.IsNullOrWhiteSpace(data.Name)) { - foreach (ref readonly var controlTitle in controlData.Title.ItemsRo) + foreach (ref readonly ApplicationControlProperty.ApplicationTitle controlTitle in controlData.Title.ItemsRo) { if (!controlTitle.NameString.IsEmpty()) { @@ -1343,7 +1343,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary if (string.IsNullOrWhiteSpace(data.Developer)) { - foreach (ref readonly var controlTitle in controlData.Title.ItemsRo) + foreach (ref readonly ApplicationControlProperty.ApplicationTitle controlTitle in controlData.Title.ItemsRo) { if (!controlTitle.PublisherString.IsEmpty()) { @@ -1419,16 +1419,16 @@ namespace Ryujinx.Ava.Utilities.AppLibrary { _downloadableContents.Edit(it => { - var savedDlc = + List<(DownloadableContentModel, bool IsEnabled)> savedDlc = DownloadableContentsHelper.LoadDownloadableContentsJson(_virtualFileSystem, application.IdBase); it.AddOrUpdate(savedDlc); - if (TryGetDownloadableContentFromFile(application.Path, out var bundledDlc)) + if (TryGetDownloadableContentFromFile(application.Path, out List bundledDlc)) { - var savedDlcLookup = savedDlc.Select(dlc => dlc.Item1).ToHashSet(); + HashSet savedDlcLookup = savedDlc.Select(dlc => dlc.Item1).ToHashSet(); bool addedNewDlc = false; - foreach (var dlc in bundledDlc) + foreach (DownloadableContentModel dlc in bundledDlc) { if (!savedDlcLookup.Contains(dlc)) { @@ -1439,7 +1439,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary if (addedNewDlc) { - var gameDlcs = it.Items.Where(dlc => dlc.Dlc.TitleIdBase == application.IdBase).ToList(); + List<(DownloadableContentModel Dlc, bool IsEnabled)> gameDlcs = it.Items.Where(dlc => dlc.Dlc.TitleIdBase == application.IdBase).ToList(); DownloadableContentsHelper.SaveDownloadableContentsJson(application.IdBase, gameDlcs); } @@ -1451,22 +1451,22 @@ namespace Ryujinx.Ava.Utilities.AppLibrary // file itself private bool LoadTitleUpdatesForApplication(ApplicationData application) { - var modifiedVersion = false; + bool modifiedVersion = false; _titleUpdates.Edit(it => { - var savedUpdates = + List<(TitleUpdateModel Update, bool IsSelected)> savedUpdates = TitleUpdatesHelper.LoadTitleUpdatesJson(_virtualFileSystem, application.IdBase); it.AddOrUpdate(savedUpdates); - var selectedUpdate = savedUpdates.FirstOrOptional(update => update.IsSelected); + DynamicData.Kernel.Optional<(TitleUpdateModel Update, bool IsSelected)> selectedUpdate = savedUpdates.FirstOrOptional(update => update.IsSelected); - if (TryGetTitleUpdatesFromFile(application.Path, out var bundledUpdates)) + if (TryGetTitleUpdatesFromFile(application.Path, out List bundledUpdates)) { - var savedUpdateLookup = savedUpdates.Select(update => update.Update).ToHashSet(); + HashSet savedUpdateLookup = savedUpdates.Select(update => update.Update).ToHashSet(); bool updatesChanged = false; - foreach (var update in bundledUpdates.OrderByDescending(bundled => bundled.Version)) + foreach (TitleUpdateModel update in bundledUpdates.OrderByDescending(bundled => bundled.Version)) { if (!savedUpdateLookup.Contains(update)) { @@ -1488,7 +1488,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary if (updatesChanged) { - var gameUpdates = it.Items.Where(update => update.TitleUpdate.TitleIdBase == application.IdBase).ToList(); + List<(TitleUpdateModel TitleUpdate, bool IsSelected)> gameUpdates = it.Items.Where(update => update.TitleUpdate.TitleIdBase == application.IdBase).ToList(); TitleUpdatesHelper.SaveTitleUpdatesJson(application.IdBase, gameUpdates); } } @@ -1500,14 +1500,14 @@ namespace Ryujinx.Ava.Utilities.AppLibrary // Save the _currently tracked_ DLC state for the game private void SaveDownloadableContentsForGame(ulong titleIdBase) { - var dlcs = DownloadableContents.Items.Where(dlc => dlc.Dlc.TitleIdBase == titleIdBase).ToList(); + List<(DownloadableContentModel Dlc, bool IsEnabled)> dlcs = DownloadableContents.Items.Where(dlc => dlc.Dlc.TitleIdBase == titleIdBase).ToList(); DownloadableContentsHelper.SaveDownloadableContentsJson(titleIdBase, dlcs); } // Save the _currently tracked_ update state for the game private void SaveTitleUpdatesForGame(ulong titleIdBase) { - var updates = TitleUpdates.Items.Where(update => update.TitleUpdate.TitleIdBase == titleIdBase).ToList(); + List<(TitleUpdateModel TitleUpdate, bool IsSelected)> updates = TitleUpdates.Items.Where(update => update.TitleUpdate.TitleIdBase == titleIdBase).ToList(); TitleUpdatesHelper.SaveTitleUpdatesJson(titleIdBase, updates); } @@ -1515,7 +1515,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary // of its state private void RefreshApplicationInfo(ulong appIdBase) { - var application = _applications.Lookup(appIdBase); + DynamicData.Kernel.Optional application = _applications.Lookup(appIdBase); if (!application.HasValue) return; @@ -1523,7 +1523,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary if (!TryGetApplicationsFromFile(application.Value.Path, out List newApplications)) return; - var newApplication = newApplications.First(it => it.IdBase == appIdBase); + ApplicationData newApplication = newApplications.First(it => it.IdBase == appIdBase); _applications.AddOrUpdate(newApplication); } } diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index 7c8e6909c..af80c5a28 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -88,7 +88,7 @@ namespace Ryujinx.Ava.Utilities.Compat _ => null }; - if (DateTime.TryParse(ColStr(row[indices.LastUpdated]), out var dt)) + if (DateTime.TryParse(ColStr(row[indices.LastUpdated]), out DateTime dt)) LastUpdated = dt; return; diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index 0d08536d7..2d77c139d 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -661,7 +661,7 @@ namespace Ryujinx.Ava.Utilities.Configuration if (!ShowDirtyHacks) return; - var newHacks = EnabledHacks.Select(x => x.Hack) + string newHacks = EnabledHacks.Select(x => x.Hack) .JoinToString(", "); if (newHacks != _lastHackCollection) diff --git a/src/Ryujinx/Utilities/Configuration/LoggerModule.cs b/src/Ryujinx/Utilities/Configuration/LoggerModule.cs index 663ad607f..f6c1be082 100644 --- a/src/Ryujinx/Utilities/Configuration/LoggerModule.cs +++ b/src/Ryujinx/Utilities/Configuration/LoggerModule.cs @@ -31,12 +31,12 @@ namespace Ryujinx.Ava.Utilities.Configuration { bool noFilter = e.NewValue.Length == 0; - foreach (var logClass in Enum.GetValues()) + foreach (LogClass logClass in Enum.GetValues()) { Logger.SetEnable(logClass, noFilter); } - foreach (var logClass in e.NewValue) + foreach (LogClass logClass in e.NewValue) { Logger.SetEnable(logClass, true); } diff --git a/src/Ryujinx/Utilities/DownloadableContentsHelper.cs b/src/Ryujinx/Utilities/DownloadableContentsHelper.cs index b6d2420a3..b8af11527 100644 --- a/src/Ryujinx/Utilities/DownloadableContentsHelper.cs +++ b/src/Ryujinx/Utilities/DownloadableContentsHelper.cs @@ -22,7 +22,7 @@ namespace Ryujinx.Ava.Utilities public static List<(DownloadableContentModel, bool IsEnabled)> LoadDownloadableContentsJson(VirtualFileSystem vfs, ulong applicationIdBase) { - var downloadableContentJsonPath = PathToGameDLCJson(applicationIdBase); + string downloadableContentJsonPath = PathToGameDLCJson(applicationIdBase); if (!File.Exists(downloadableContentJsonPath)) { @@ -31,7 +31,7 @@ namespace Ryujinx.Ava.Utilities try { - var downloadableContentContainerList = JsonHelper.DeserializeFromFile(downloadableContentJsonPath, + List downloadableContentContainerList = JsonHelper.DeserializeFromFile(downloadableContentJsonPath, _serializerContext.ListDownloadableContentContainer); return LoadDownloadableContents(vfs, downloadableContentContainerList); } @@ -76,13 +76,13 @@ namespace Ryujinx.Ava.Utilities downloadableContentContainerList.Add(container); } - var downloadableContentJsonPath = PathToGameDLCJson(applicationIdBase); + string downloadableContentJsonPath = PathToGameDLCJson(applicationIdBase); JsonHelper.SerializeToFile(downloadableContentJsonPath, downloadableContentContainerList, _serializerContext.ListDownloadableContentContainer); } private static List<(DownloadableContentModel, bool IsEnabled)> LoadDownloadableContents(VirtualFileSystem vfs, List downloadableContentContainers) { - var result = new List<(DownloadableContentModel, bool IsEnabled)>(); + List<(DownloadableContentModel, bool IsEnabled)> result = new List<(DownloadableContentModel, bool IsEnabled)>(); foreach (DownloadableContentContainer downloadableContentContainer in downloadableContentContainers) { @@ -105,7 +105,7 @@ namespace Ryujinx.Ava.Utilities continue; } - var content = new DownloadableContentModel(nca.Header.TitleId, + DownloadableContentModel content = new DownloadableContentModel(nca.Header.TitleId, downloadableContentContainer.ContainerPath, downloadableContentNca.FullPath); diff --git a/src/Ryujinx/Utilities/ShortcutHelper.cs b/src/Ryujinx/Utilities/ShortcutHelper.cs index fed6a5c46..5a5f92773 100644 --- a/src/Ryujinx/Utilities/ShortcutHelper.cs +++ b/src/Ryujinx/Utilities/ShortcutHelper.cs @@ -18,11 +18,11 @@ namespace Ryujinx.Ava.Utilities iconPath += ".ico"; MemoryStream iconDataStream = new(iconData); - using var image = SKBitmap.Decode(iconDataStream); + using SKBitmap image = SKBitmap.Decode(iconDataStream); image.Resize(new SKImageInfo(128, 128), SKFilterQuality.High); SaveBitmapAsIcon(image, iconPath); - var shortcut = Shortcut.CreateShortcut(basePath, GetArgsString(applicationFilePath, applicationId), iconPath, 0); + Shortcut shortcut = Shortcut.CreateShortcut(basePath, GetArgsString(applicationFilePath, applicationId), iconPath, 0); shortcut.StringData.NameString = cleanedAppName; shortcut.WriteToFile(Path.Combine(desktopPath, cleanedAppName + ".lnk")); } @@ -31,12 +31,12 @@ namespace Ryujinx.Ava.Utilities private static void CreateShortcutLinux(string applicationFilePath, string applicationId, byte[] iconData, string iconPath, string desktopPath, string cleanedAppName) { string basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx.sh"); - var desktopFile = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-template.desktop"); + string desktopFile = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-template.desktop"); iconPath += ".png"; - var image = SKBitmap.Decode(iconData); - using var data = image.Encode(SKEncodedImageFormat.Png, 100); - using var file = File.OpenWrite(iconPath); + SKBitmap image = SKBitmap.Decode(iconData); + using SKData data = image.Encode(SKEncodedImageFormat.Png, 100); + using FileStream file = File.OpenWrite(iconPath); data.SaveTo(file); using StreamWriter outputFile = new(Path.Combine(desktopPath, cleanedAppName + ".desktop")); @@ -47,8 +47,8 @@ namespace Ryujinx.Ava.Utilities private static void CreateShortcutMacos(string appFilePath, string applicationId, byte[] iconData, string desktopPath, string cleanedAppName) { string basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx"); - var plistFile = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-template.plist"); - var shortcutScript = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-launch-script.sh"); + string plistFile = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-template.plist"); + string shortcutScript = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-launch-script.sh"); // Macos .App folder string contentFolderPath = Path.Combine("/Applications", cleanedAppName + ".app", "Contents"); string scriptFolderPath = Path.Combine(contentFolderPath, "MacOS"); @@ -77,9 +77,9 @@ namespace Ryujinx.Ava.Utilities } const string IconName = "icon.png"; - var image = SKBitmap.Decode(iconData); - using var data = image.Encode(SKEncodedImageFormat.Png, 100); - using var file = File.OpenWrite(Path.Combine(resourceFolderPath, IconName)); + SKBitmap image = SKBitmap.Decode(iconData); + using SKData data = image.Encode(SKEncodedImageFormat.Png, 100); + using FileStream file = File.OpenWrite(Path.Combine(resourceFolderPath, IconName)); data.SaveTo(file); // plist file @@ -124,7 +124,7 @@ namespace Ryujinx.Ava.Utilities private static string GetArgsString(string appFilePath, string applicationId) { // args are first defined as a list, for easier adjustments in the future - var argsList = new List(); + List argsList = new List(); if (!string.IsNullOrEmpty(CommandLineState.BaseDirPathArg)) { @@ -157,7 +157,7 @@ namespace Ryujinx.Ava.Utilities fs.Write(header); // Writing actual data - using var data = source.Encode(SKEncodedImageFormat.Png, 100); + using SKData data = source.Encode(SKEncodedImageFormat.Png, 100); data.SaveTo(fs); // Getting data length (file length minus header) long dataLength = fs.Length - header.Length; diff --git a/src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs b/src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs index 6ca38aa36..fa2f8bf71 100644 --- a/src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs +++ b/src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Ava.Utilities.SystemInfo if (cpuName == null) { - var cpuDict = new Dictionary(StringComparer.Ordinal) + Dictionary cpuDict = new Dictionary(StringComparer.Ordinal) { ["model name"] = null, ["Processor"] = null, @@ -28,7 +28,7 @@ namespace Ryujinx.Ava.Utilities.SystemInfo cpuName = cpuDict["model name"] ?? cpuDict["Processor"] ?? cpuDict["Hardware"] ?? "Unknown"; } - var memDict = new Dictionary(StringComparer.Ordinal) + Dictionary memDict = new Dictionary(StringComparer.Ordinal) { ["MemTotal"] = null, ["MemAvailable"] = null, diff --git a/src/Ryujinx/Utilities/SystemInfo/MacOSSystemInfo.cs b/src/Ryujinx/Utilities/SystemInfo/MacOSSystemInfo.cs index 6b0beacf8..ab8102711 100644 --- a/src/Ryujinx/Utilities/SystemInfo/MacOSSystemInfo.cs +++ b/src/Ryujinx/Utilities/SystemInfo/MacOSSystemInfo.cs @@ -40,10 +40,10 @@ namespace Ryujinx.Ava.Utilities.SystemInfo static ulong GetVMInfoAvailableMemory() { - var port = mach_host_self(); + uint port = mach_host_self(); uint pageSize = 0; - var result = host_page_size(port, ref pageSize); + int result = host_page_size(port, ref pageSize); if (result != 0) { diff --git a/src/Ryujinx/Utilities/SystemInfo/WindowsSystemInfo.cs b/src/Ryujinx/Utilities/SystemInfo/WindowsSystemInfo.cs index 73845be11..c6e8894e2 100644 --- a/src/Ryujinx/Utilities/SystemInfo/WindowsSystemInfo.cs +++ b/src/Ryujinx/Utilities/SystemInfo/WindowsSystemInfo.cs @@ -34,7 +34,7 @@ namespace Ryujinx.Ava.Utilities.SystemInfo if (cpuObjs != null) { - foreach (var cpuObj in cpuObjs) + foreach (ManagementBaseObject cpuObj in cpuObjs) { return cpuObj["Name"].ToString().Trim(); } diff --git a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs index 9fc9bbf6b..805d6a46a 100644 --- a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs +++ b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs @@ -30,7 +30,7 @@ namespace Ryujinx.Ava.Utilities public static List<(TitleUpdateModel Update, bool IsSelected)> LoadTitleUpdatesJson(VirtualFileSystem vfs, ulong applicationIdBase) { - var titleUpdatesJsonPath = PathToGameUpdatesJson(applicationIdBase); + string titleUpdatesJsonPath = PathToGameUpdatesJson(applicationIdBase); if (!File.Exists(titleUpdatesJsonPath)) { @@ -39,7 +39,7 @@ namespace Ryujinx.Ava.Utilities try { - var titleUpdateWindowData = JsonHelper.DeserializeFromFile(titleUpdatesJsonPath, _serializerContext.TitleUpdateMetadata); + TitleUpdateMetadata titleUpdateWindowData = JsonHelper.DeserializeFromFile(titleUpdatesJsonPath, _serializerContext.TitleUpdateMetadata); return LoadTitleUpdates(vfs, titleUpdateWindowData, applicationIdBase); } catch @@ -51,7 +51,7 @@ namespace Ryujinx.Ava.Utilities public static void SaveTitleUpdatesJson(ulong applicationIdBase, List<(TitleUpdateModel, bool IsSelected)> updates) { - var titleUpdateWindowData = new TitleUpdateMetadata + TitleUpdateMetadata titleUpdateWindowData = new TitleUpdateMetadata { Selected = string.Empty, Paths = [], @@ -73,13 +73,13 @@ namespace Ryujinx.Ava.Utilities } } - var titleUpdatesJsonPath = PathToGameUpdatesJson(applicationIdBase); + string titleUpdatesJsonPath = PathToGameUpdatesJson(applicationIdBase); JsonHelper.SerializeToFile(titleUpdatesJsonPath, titleUpdateWindowData, _serializerContext.TitleUpdateMetadata); } private static List<(TitleUpdateModel Update, bool IsSelected)> LoadTitleUpdates(VirtualFileSystem vfs, TitleUpdateMetadata titleUpdateMetadata, ulong applicationIdBase) { - var result = new List<(TitleUpdateModel, bool IsSelected)>(); + List<(TitleUpdateModel, bool IsSelected)> result = new List<(TitleUpdateModel, bool IsSelected)>(); IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid @@ -115,8 +115,8 @@ namespace Ryujinx.Ava.Utilities nacpFile.Get.Read(out _, 0, SpanHelpers.AsByteSpan(ref controlData), ReadOption.None) .ThrowIfFailure(); - var displayVersion = controlData.DisplayVersionString.ToString(); - var update = new TitleUpdateModel(content.ApplicationId, content.Version.Version, + string displayVersion = controlData.DisplayVersionString.ToString(); + TitleUpdateModel update = new TitleUpdateModel(content.ApplicationId, content.Version.Version, displayVersion, path); result.Add((update, path == titleUpdateMetadata.Selected)); diff --git a/src/Ryujinx/Utilities/ValueFormatUtils.cs b/src/Ryujinx/Utilities/ValueFormatUtils.cs index f5cdb4125..e0a8b0457 100644 --- a/src/Ryujinx/Utilities/ValueFormatUtils.cs +++ b/src/Ryujinx/Utilities/ValueFormatUtils.cs @@ -139,10 +139,10 @@ namespace Ryujinx.Ava.Utilities // An input string can either look like "01:23:45" or "1d, 01:23:45" if the timespan represents a duration of more than a day. // Here, we split the input string to check if it's the former or the latter. - var valueSplit = timeSpanString.Split(", "); + string[] valueSplit = timeSpanString.Split(", "); if (valueSplit.Length > 1) { - var dayPart = valueSplit[0].Split("d")[0]; + string dayPart = valueSplit[0].Split("d")[0]; if (int.TryParse(dayPart, out int days)) { returnTimeSpan = returnTimeSpan.Add(TimeSpan.FromDays(days)); -- 2.47.1 From e0567c5ce95fe228c3099b286955d71fefa656ee Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:01:13 -0600 Subject: [PATCH 420/722] misc: chore: Use explicit types in ARMeilleure project --- .../CodeGen/Arm64/Arm64Optimizer.cs | 4 +- src/ARMeilleure/CodeGen/Arm64/Assembler.cs | 2 +- .../CodeGen/Arm64/CodeGenContext.cs | 4 +- .../CodeGen/Arm64/CodeGenerator.cs | 4 +- src/ARMeilleure/CodeGen/Arm64/PreAllocator.cs | 2 +- .../RegisterAllocators/LinearScanAllocator.cs | 2 +- .../RegisterAllocators/LiveIntervalList.cs | 4 +- .../CodeGen/RegisterAllocators/UseList.cs | 4 +- src/ARMeilleure/CodeGen/X86/Assembler.cs | 15 ++++---- src/ARMeilleure/CodeGen/X86/CodeGenerator.cs | 4 +- .../CodeGen/X86/HardwareCapabilities.cs | 2 +- src/ARMeilleure/CodeGen/X86/PreAllocator.cs | 2 +- src/ARMeilleure/CodeGen/X86/X86Optimizer.cs | 4 +- src/ARMeilleure/Common/BitMap.cs | 6 +-- src/ARMeilleure/Common/EntryTable.cs | 8 ++-- .../Decoders/OpCode32SimdDupElem.cs | 2 +- .../Decoders/OpCode32SimdMovGpElem.cs | 2 +- src/ARMeilleure/Decoders/OpCodeAluImm.cs | 2 +- src/ARMeilleure/Decoders/OpCodeBfm.cs | 2 +- .../Decoders/Optimizations/TailCallRemover.cs | 2 +- src/ARMeilleure/Diagnostics/IRDumper.cs | 4 +- src/ARMeilleure/Instructions/InstEmitAlu32.cs | 4 +- .../Instructions/InstEmitFlowHelper.cs | 5 ++- .../Instructions/InstEmitMemoryEx32.cs | 4 +- .../Instructions/InstEmitSimdCmp32.cs | 2 +- .../Instructions/InstEmitSimdCvt32.cs | 8 ++-- .../Instructions/InstEmitSimdMemory32.cs | 2 +- src/ARMeilleure/Instructions/SoftFloat.cs | 4 +- .../IntermediateRepresentation/Operand.cs | 8 ++-- src/ARMeilleure/Signal/TestMethods.cs | 4 +- .../Translation/Cache/JitUnwindWindows.cs | 4 +- .../Translation/ControlFlowGraph.cs | 8 ++-- src/ARMeilleure/Translation/PTC/Ptc.cs | 19 +++++----- .../Translation/PTC/PtcProfiler.cs | 4 +- .../Translation/SsaConstruction.cs | 6 +-- src/ARMeilleure/Translation/Translator.cs | 14 +++---- .../Translation/TranslatorStubs.cs | 38 +++++++++---------- 37 files changed, 109 insertions(+), 106 deletions(-) diff --git a/src/ARMeilleure/CodeGen/Arm64/Arm64Optimizer.cs b/src/ARMeilleure/CodeGen/Arm64/Arm64Optimizer.cs index 00ffd1958..979b471ac 100644 --- a/src/ARMeilleure/CodeGen/Arm64/Arm64Optimizer.cs +++ b/src/ARMeilleure/CodeGen/Arm64/Arm64Optimizer.cs @@ -13,13 +13,13 @@ namespace ARMeilleure.CodeGen.Arm64 public static void RunPass(ControlFlowGraph cfg) { - var constants = new Dictionary(); + Dictionary constants = new Dictionary(); Operand GetConstantCopy(BasicBlock block, Operation operation, Operand source) { // If the constant has many uses, we also force a new constant mov to be added, in order // to avoid overflow of the counts field (that is limited to 16 bits). - if (!constants.TryGetValue(source.Value, out var constant) || constant.UsesCount > MaxConstantUses) + if (!constants.TryGetValue(source.Value, out Operand constant) || constant.UsesCount > MaxConstantUses) { constant = Local(source.Type); diff --git a/src/ARMeilleure/CodeGen/Arm64/Assembler.cs b/src/ARMeilleure/CodeGen/Arm64/Assembler.cs index 41684faf2..47902ddc8 100644 --- a/src/ARMeilleure/CodeGen/Arm64/Assembler.cs +++ b/src/ARMeilleure/CodeGen/Arm64/Assembler.cs @@ -123,7 +123,7 @@ namespace ARMeilleure.CodeGen.Arm64 public void Cset(Operand rd, ArmCondition condition) { - var zr = Factory.Register(ZrRegister, RegisterType.Integer, rd.Type); + Operand zr = Factory.Register(ZrRegister, RegisterType.Integer, rd.Type); Csinc(rd, zr, zr, (ArmCondition)((int)condition ^ 1)); } diff --git a/src/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs b/src/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs index 89b1e9e6b..ed271d24e 100644 --- a/src/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs +++ b/src/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs @@ -91,7 +91,7 @@ namespace ARMeilleure.CodeGen.Arm64 long target = _stream.Position; - if (_pendingBranches.TryGetValue(block, out var list)) + if (_pendingBranches.TryGetValue(block, out List<(ArmCondition Condition, long BranchPos)> list)) { foreach ((ArmCondition condition, long branchPos) in list) { @@ -119,7 +119,7 @@ namespace ARMeilleure.CodeGen.Arm64 } else { - if (!_pendingBranches.TryGetValue(target, out var list)) + if (!_pendingBranches.TryGetValue(target, out List<(ArmCondition Condition, long BranchPos)> list)) { list = new List<(ArmCondition, long)>(); _pendingBranches.Add(target, list); diff --git a/src/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs b/src/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs index 2df86671a..6c422a5bb 100644 --- a/src/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs +++ b/src/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs @@ -322,7 +322,7 @@ namespace ARMeilleure.CodeGen.Arm64 Debug.Assert(comp.Kind == OperandKind.Constant); - var cond = ((Comparison)comp.AsInt32()).ToArmCondition(); + ArmCondition cond = ((Comparison)comp.AsInt32()).ToArmCondition(); GenerateCompareCommon(context, operation); @@ -354,7 +354,7 @@ namespace ARMeilleure.CodeGen.Arm64 Debug.Assert(dest.Type == OperandType.I32); Debug.Assert(comp.Kind == OperandKind.Constant); - var cond = ((Comparison)comp.AsInt32()).ToArmCondition(); + ArmCondition cond = ((Comparison)comp.AsInt32()).ToArmCondition(); GenerateCompareCommon(context, operation); diff --git a/src/ARMeilleure/CodeGen/Arm64/PreAllocator.cs b/src/ARMeilleure/CodeGen/Arm64/PreAllocator.cs index f66bb66e6..e8193a9ab 100644 --- a/src/ARMeilleure/CodeGen/Arm64/PreAllocator.cs +++ b/src/ARMeilleure/CodeGen/Arm64/PreAllocator.cs @@ -847,7 +847,7 @@ namespace ARMeilleure.CodeGen.Arm64 Debug.Assert(comp.Kind == OperandKind.Constant); - var compType = (Comparison)comp.AsInt32(); + Comparison compType = (Comparison)comp.AsInt32(); return compType == Comparison.Equal || compType == Comparison.NotEqual; } diff --git a/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs b/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs index 16feeb914..fa0b8aa24 100644 --- a/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs +++ b/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs @@ -115,7 +115,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators { NumberLocals(cfg, regMasks.RegistersCount); - var context = new AllocationContext(stackAlloc, regMasks, _intervals.Count); + AllocationContext context = new AllocationContext(stackAlloc, regMasks, _intervals.Count); BuildIntervals(cfg, context); diff --git a/src/ARMeilleure/CodeGen/RegisterAllocators/LiveIntervalList.cs b/src/ARMeilleure/CodeGen/RegisterAllocators/LiveIntervalList.cs index 84b892f42..b31d8fa78 100644 --- a/src/ARMeilleure/CodeGen/RegisterAllocators/LiveIntervalList.cs +++ b/src/ARMeilleure/CodeGen/RegisterAllocators/LiveIntervalList.cs @@ -15,12 +15,12 @@ namespace ARMeilleure.CodeGen.RegisterAllocators { if (_count + 1 > _capacity) { - var oldSpan = Span; + Span oldSpan = Span; _capacity = Math.Max(4, _capacity * 2); _items = Allocators.References.Allocate((uint)_capacity); - var newSpan = Span; + Span newSpan = Span; oldSpan.CopyTo(newSpan); } diff --git a/src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs b/src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs index 806002f83..c78201785 100644 --- a/src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs +++ b/src/ARMeilleure/CodeGen/RegisterAllocators/UseList.cs @@ -16,12 +16,12 @@ namespace ARMeilleure.CodeGen.RegisterAllocators { if (Count + 1 > _capacity) { - var oldSpan = Span; + Span oldSpan = Span; _capacity = Math.Max(4, _capacity * 2); _items = Allocators.Default.Allocate((uint)_capacity); - var newSpan = Span; + Span newSpan = Span; oldSpan.CopyTo(newSpan); } diff --git a/src/ARMeilleure/CodeGen/X86/Assembler.cs b/src/ARMeilleure/CodeGen/X86/Assembler.cs index 96f4de049..74774a8cf 100644 --- a/src/ARMeilleure/CodeGen/X86/Assembler.cs +++ b/src/ARMeilleure/CodeGen/X86/Assembler.cs @@ -1,5 +1,6 @@ using ARMeilleure.CodeGen.Linking; using ARMeilleure.IntermediateRepresentation; +using Microsoft.IO; using Ryujinx.Common.Memory; using System; using System.Collections.Generic; @@ -1324,8 +1325,8 @@ namespace ARMeilleure.CodeGen.X86 public (byte[], RelocInfo) GetCode() { - var jumps = CollectionsMarshal.AsSpan(_jumps); - var relocs = CollectionsMarshal.AsSpan(_relocs); + Span jumps = CollectionsMarshal.AsSpan(_jumps); + Span relocs = CollectionsMarshal.AsSpan(_relocs); // Write jump relative offsets. bool modified; @@ -1410,13 +1411,13 @@ namespace ARMeilleure.CodeGen.X86 // Write the code, ignoring the dummy bytes after jumps, into a new stream. _stream.Seek(0, SeekOrigin.Begin); - using var codeStream = MemoryStreamManager.Shared.GetStream(); - var assembler = new Assembler(codeStream, HasRelocs); + using RecyclableMemoryStream codeStream = MemoryStreamManager.Shared.GetStream(); + Assembler assembler = new Assembler(codeStream, HasRelocs); bool hasRelocs = HasRelocs; int relocIndex = 0; int relocOffset = 0; - var relocEntries = hasRelocs + RelocEntry[] relocEntries = hasRelocs ? new RelocEntry[relocs.Length] : Array.Empty(); @@ -1469,8 +1470,8 @@ namespace ARMeilleure.CodeGen.X86 _stream.CopyTo(codeStream); - var code = codeStream.ToArray(); - var relocInfo = new RelocInfo(relocEntries); + byte[] code = codeStream.ToArray(); + RelocInfo relocInfo = new RelocInfo(relocEntries); return (code, relocInfo); } diff --git a/src/ARMeilleure/CodeGen/X86/CodeGenerator.cs b/src/ARMeilleure/CodeGen/X86/CodeGenerator.cs index 9e94a077f..ab8612133 100644 --- a/src/ARMeilleure/CodeGen/X86/CodeGenerator.cs +++ b/src/ARMeilleure/CodeGen/X86/CodeGenerator.cs @@ -623,7 +623,7 @@ namespace ARMeilleure.CodeGen.X86 Debug.Assert(comp.Kind == OperandKind.Constant); - var cond = ((Comparison)comp.AsInt32()).ToX86Condition(); + X86Condition cond = ((Comparison)comp.AsInt32()).ToX86Condition(); GenerateCompareCommon(context, operation); @@ -661,7 +661,7 @@ namespace ARMeilleure.CodeGen.X86 Debug.Assert(dest.Type == OperandType.I32); Debug.Assert(comp.Kind == OperandKind.Constant); - var cond = ((Comparison)comp.AsInt32()).ToX86Condition(); + X86Condition cond = ((Comparison)comp.AsInt32()).ToX86Condition(); GenerateCompareCommon(context, operation); diff --git a/src/ARMeilleure/CodeGen/X86/HardwareCapabilities.cs b/src/ARMeilleure/CodeGen/X86/HardwareCapabilities.cs index 4f6f1e87b..03a747071 100644 --- a/src/ARMeilleure/CodeGen/X86/HardwareCapabilities.cs +++ b/src/ARMeilleure/CodeGen/X86/HardwareCapabilities.cs @@ -53,7 +53,7 @@ namespace ARMeilleure.CodeGen.X86 memGetXcr0.Reprotect(0, (ulong)asmGetXcr0.Length, MemoryPermission.ReadAndExecute); - var fGetXcr0 = Marshal.GetDelegateForFunctionPointer(memGetXcr0.Pointer); + GetXcr0 fGetXcr0 = Marshal.GetDelegateForFunctionPointer(memGetXcr0.Pointer); return fGetXcr0(); } diff --git a/src/ARMeilleure/CodeGen/X86/PreAllocator.cs b/src/ARMeilleure/CodeGen/X86/PreAllocator.cs index 590c35c7b..ded3f866c 100644 --- a/src/ARMeilleure/CodeGen/X86/PreAllocator.cs +++ b/src/ARMeilleure/CodeGen/X86/PreAllocator.cs @@ -759,7 +759,7 @@ namespace ARMeilleure.CodeGen.X86 Debug.Assert(comp.Kind == OperandKind.Constant); - var compType = (Comparison)comp.AsInt32(); + Comparison compType = (Comparison)comp.AsInt32(); return compType == Comparison.Equal || compType == Comparison.NotEqual; } diff --git a/src/ARMeilleure/CodeGen/X86/X86Optimizer.cs b/src/ARMeilleure/CodeGen/X86/X86Optimizer.cs index 690ca5043..8fcc41bc4 100644 --- a/src/ARMeilleure/CodeGen/X86/X86Optimizer.cs +++ b/src/ARMeilleure/CodeGen/X86/X86Optimizer.cs @@ -13,13 +13,13 @@ namespace ARMeilleure.CodeGen.X86 public static void RunPass(ControlFlowGraph cfg) { - var constants = new Dictionary(); + Dictionary constants = new Dictionary(); Operand GetConstantCopy(BasicBlock block, Operation operation, Operand source) { // If the constant has many uses, we also force a new constant mov to be added, in order // to avoid overflow of the counts field (that is limited to 16 bits). - if (!constants.TryGetValue(source.Value, out var constant) || constant.UsesCount > MaxConstantUses) + if (!constants.TryGetValue(source.Value, out Operand constant) || constant.UsesCount > MaxConstantUses) { constant = Local(source.Type); diff --git a/src/ARMeilleure/Common/BitMap.cs b/src/ARMeilleure/Common/BitMap.cs index 94d47ea59..a7bc69238 100644 --- a/src/ARMeilleure/Common/BitMap.cs +++ b/src/ARMeilleure/Common/BitMap.cs @@ -129,13 +129,13 @@ namespace ARMeilleure.Common if (count > _count) { - var oldMask = _masks; - var oldSpan = new Span(_masks, _count); + long* oldMask = _masks; + Span oldSpan = new Span(_masks, _count); _masks = _allocator.Allocate((uint)count); _count = count; - var newSpan = new Span(_masks, _count); + Span newSpan = new Span(_masks, _count); oldSpan.CopyTo(newSpan); newSpan[oldSpan.Length..].Clear(); diff --git a/src/ARMeilleure/Common/EntryTable.cs b/src/ARMeilleure/Common/EntryTable.cs index e49a0989e..7b8c1e134 100644 --- a/src/ARMeilleure/Common/EntryTable.cs +++ b/src/ARMeilleure/Common/EntryTable.cs @@ -63,7 +63,7 @@ namespace ARMeilleure.Common } int index = _freeHint++; - var page = GetPage(index); + Span page = GetPage(index); _allocated.Set(index); @@ -111,7 +111,7 @@ namespace ARMeilleure.Common throw new ArgumentException("Entry at the specified index was not allocated", nameof(index)); } - var page = GetPage(index); + Span page = GetPage(index); return ref GetValue(page, index); } @@ -136,7 +136,7 @@ namespace ARMeilleure.Common /// Page for the specified private unsafe Span GetPage(int index) { - var pageIndex = (int)((uint)(index & ~(_pageCapacity - 1)) >> _pageLogCapacity); + int pageIndex = (int)((uint)(index & ~(_pageCapacity - 1)) >> _pageLogCapacity); if (!_pages.TryGetValue(pageIndex, out nint page)) { @@ -168,7 +168,7 @@ namespace ARMeilleure.Common { _allocated.Dispose(); - foreach (var page in _pages.Values) + foreach (IntPtr page in _pages.Values) { NativeAllocator.Instance.Free((void*)page); } diff --git a/src/ARMeilleure/Decoders/OpCode32SimdDupElem.cs b/src/ARMeilleure/Decoders/OpCode32SimdDupElem.cs index b6cdff088..fbb14056d 100644 --- a/src/ARMeilleure/Decoders/OpCode32SimdDupElem.cs +++ b/src/ARMeilleure/Decoders/OpCode32SimdDupElem.cs @@ -9,7 +9,7 @@ namespace ARMeilleure.Decoders public OpCode32SimdDupElem(InstDescriptor inst, ulong address, int opCode, bool isThumb) : base(inst, address, opCode, isThumb) { - var opc = (opCode >> 16) & 0xf; + int opc = (opCode >> 16) & 0xf; if ((opc & 0b1) == 1) { diff --git a/src/ARMeilleure/Decoders/OpCode32SimdMovGpElem.cs b/src/ARMeilleure/Decoders/OpCode32SimdMovGpElem.cs index f6fce7d99..3b9431da4 100644 --- a/src/ARMeilleure/Decoders/OpCode32SimdMovGpElem.cs +++ b/src/ARMeilleure/Decoders/OpCode32SimdMovGpElem.cs @@ -21,7 +21,7 @@ namespace ARMeilleure.Decoders Op = (opCode >> 20) & 0x1; U = ((opCode >> 23) & 1) != 0; - var opc = (((opCode >> 23) & 1) << 4) | (((opCode >> 21) & 0x3) << 2) | ((opCode >> 5) & 0x3); + int opc = (((opCode >> 23) & 1) << 4) | (((opCode >> 21) & 0x3) << 2) | ((opCode >> 5) & 0x3); if ((opc & 0b01000) == 0b01000) { diff --git a/src/ARMeilleure/Decoders/OpCodeAluImm.cs b/src/ARMeilleure/Decoders/OpCodeAluImm.cs index 0d2f7202f..41a12e474 100644 --- a/src/ARMeilleure/Decoders/OpCodeAluImm.cs +++ b/src/ARMeilleure/Decoders/OpCodeAluImm.cs @@ -20,7 +20,7 @@ namespace ARMeilleure.Decoders } else if (DataOp == DataOp.Logical) { - var bm = DecoderHelper.DecodeBitMask(opCode, true); + DecoderHelper.BitMask bm = DecoderHelper.DecodeBitMask(opCode, true); if (bm.IsUndefined) { diff --git a/src/ARMeilleure/Decoders/OpCodeBfm.cs b/src/ARMeilleure/Decoders/OpCodeBfm.cs index d51efade2..969c782f8 100644 --- a/src/ARMeilleure/Decoders/OpCodeBfm.cs +++ b/src/ARMeilleure/Decoders/OpCodeBfm.cs @@ -11,7 +11,7 @@ namespace ARMeilleure.Decoders public OpCodeBfm(InstDescriptor inst, ulong address, int opCode) : base(inst, address, opCode) { - var bm = DecoderHelper.DecodeBitMask(opCode, false); + DecoderHelper.BitMask bm = DecoderHelper.DecodeBitMask(opCode, false); if (bm.IsUndefined) { diff --git a/src/ARMeilleure/Decoders/Optimizations/TailCallRemover.cs b/src/ARMeilleure/Decoders/Optimizations/TailCallRemover.cs index 9d988f0c9..361a7f0d0 100644 --- a/src/ARMeilleure/Decoders/Optimizations/TailCallRemover.cs +++ b/src/ARMeilleure/Decoders/Optimizations/TailCallRemover.cs @@ -69,7 +69,7 @@ namespace ARMeilleure.Decoders.Optimizations } } - var newBlocks = new List(blocks.Count); + List newBlocks = new List(blocks.Count); // Finally, rebuild decoded block list, ignoring blocks outside the contiguous range. for (int i = 0; i < blocks.Count; i++) diff --git a/src/ARMeilleure/Diagnostics/IRDumper.cs b/src/ARMeilleure/Diagnostics/IRDumper.cs index 16833d085..9d6a708b6 100644 --- a/src/ARMeilleure/Diagnostics/IRDumper.cs +++ b/src/ARMeilleure/Diagnostics/IRDumper.cs @@ -141,7 +141,7 @@ namespace ARMeilleure.Diagnostics break; case OperandKind.Memory: - var memOp = operand.GetMemory(); + MemoryOperand memOp = operand.GetMemory(); _builder.Append('['); @@ -285,7 +285,7 @@ namespace ARMeilleure.Diagnostics public static string GetDump(ControlFlowGraph cfg) { - var dumper = new IRDumper(1); + IRDumper dumper = new IRDumper(1); for (BasicBlock block = cfg.Blocks.First; block != null; block = block.ListNext) { diff --git a/src/ARMeilleure/Instructions/InstEmitAlu32.cs b/src/ARMeilleure/Instructions/InstEmitAlu32.cs index 8eabe093e..2e659fd5f 100644 --- a/src/ARMeilleure/Instructions/InstEmitAlu32.cs +++ b/src/ARMeilleure/Instructions/InstEmitAlu32.cs @@ -415,7 +415,7 @@ namespace ARMeilleure.Instructions { IOpCode32AluBf op = (IOpCode32AluBf)context.CurrOp; - var msb = op.Lsb + op.Msb; // For this instruction, the msb is actually a width. + int msb = op.Lsb + op.Msb; // For this instruction, the msb is actually a width. Operand n = GetIntA32(context, op.Rn); Operand res = context.ShiftRightSI(context.ShiftLeft(n, Const(31 - msb)), Const(31 - op.Msb)); @@ -547,7 +547,7 @@ namespace ARMeilleure.Instructions { IOpCode32AluBf op = (IOpCode32AluBf)context.CurrOp; - var msb = op.Lsb + op.Msb; // For this instruction, the msb is actually a width. + int msb = op.Lsb + op.Msb; // For this instruction, the msb is actually a width. Operand n = GetIntA32(context, op.Rn); Operand res = context.ShiftRightUI(context.ShiftLeft(n, Const(31 - msb)), Const(31 - op.Msb)); diff --git a/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs b/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs index a602ea49e..f67668da4 100644 --- a/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs +++ b/src/ARMeilleure/Instructions/InstEmitFlowHelper.cs @@ -1,4 +1,5 @@ using ARMeilleure.CodeGen.Linking; +using ARMeilleure.Common; using ARMeilleure.Decoders; using ARMeilleure.IntermediateRepresentation; using ARMeilleure.State; @@ -193,7 +194,7 @@ namespace ARMeilleure.Instructions Operand hostAddress; - var table = context.FunctionTable; + IAddressTable table = context.FunctionTable; // If address is mapped onto the function table, we can skip the table walk. Otherwise we fallback // onto the dispatch stub. @@ -218,7 +219,7 @@ namespace ARMeilleure.Instructions for (int i = 0; i < table.Levels.Length; i++) { - var level = table.Levels[i]; + AddressTableLevel level = table.Levels[i]; int clearBits = 64 - (level.Index + level.Length); Operand index = context.ShiftLeft( diff --git a/src/ARMeilleure/Instructions/InstEmitMemoryEx32.cs b/src/ARMeilleure/Instructions/InstEmitMemoryEx32.cs index 150218827..ea9e33f26 100644 --- a/src/ARMeilleure/Instructions/InstEmitMemoryEx32.cs +++ b/src/ARMeilleure/Instructions/InstEmitMemoryEx32.cs @@ -143,8 +143,8 @@ namespace ARMeilleure.Instructions Operand address = context.Copy(GetIntA32(context, op.Rn)); - var exclusive = (accType & AccessType.Exclusive) != 0; - var ordered = (accType & AccessType.Ordered) != 0; + bool exclusive = (accType & AccessType.Exclusive) != 0; + bool ordered = (accType & AccessType.Ordered) != 0; if ((accType & AccessType.Load) != 0) { diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCmp32.cs b/src/ARMeilleure/Instructions/InstEmitSimdCmp32.cs index 1d68bce6b..6ec2b58f9 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdCmp32.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdCmp32.cs @@ -229,7 +229,7 @@ namespace ARMeilleure.Instructions private static Operand ZerosOrOnes(ArmEmitterContext context, Operand fromBool, OperandType baseType) { - var ones = (baseType == OperandType.I64) ? Const(-1L) : Const(-1); + Operand ones = (baseType == OperandType.I64) ? Const(-1L) : Const(-1); return context.ConditionalSelect(fromBool, ones, Const(baseType, 0L)); } diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs b/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs index 216726df9..d3fafc856 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs @@ -118,15 +118,15 @@ namespace ARMeilleure.Instructions { OpCode32SimdCvtFFixed op = (OpCode32SimdCvtFFixed)context.CurrOp; - var toFixed = op.Opc == 1; + bool toFixed = op.Opc == 1; int fracBits = op.Fbits; - var unsigned = op.U; + bool unsigned = op.U; if (toFixed) // F32 to S32 or U32 (fixed) { EmitVectorUnaryOpF32(context, (op1) => { - var scaledValue = context.Multiply(op1, ConstF(MathF.Pow(2f, fracBits))); + Operand scaledValue = context.Multiply(op1, ConstF(MathF.Pow(2f, fracBits))); MethodInfo info = unsigned ? typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToU32)) : typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToS32)); return context.Call(info, scaledValue); @@ -136,7 +136,7 @@ namespace ARMeilleure.Instructions { EmitVectorUnaryOpI32(context, (op1) => { - var floatValue = unsigned ? context.ConvertToFPUI(OperandType.FP32, op1) : context.ConvertToFP(OperandType.FP32, op1); + Operand floatValue = unsigned ? context.ConvertToFPUI(OperandType.FP32, op1) : context.ConvertToFP(OperandType.FP32, op1); return context.Multiply(floatValue, ConstF(1f / MathF.Pow(2f, fracBits))); }, !unsigned); diff --git a/src/ARMeilleure/Instructions/InstEmitSimdMemory32.cs b/src/ARMeilleure/Instructions/InstEmitSimdMemory32.cs index 35c6dd328..3808ef929 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdMemory32.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdMemory32.cs @@ -87,7 +87,7 @@ namespace ARMeilleure.Instructions { if (op.Replicate) { - var regs = (count > 1) ? 1 : op.Increment; + int regs = (count > 1) ? 1 : op.Increment; for (int reg = 0; reg < regs; reg++) { int dreg = reg + d; diff --git a/src/ARMeilleure/Instructions/SoftFloat.cs b/src/ARMeilleure/Instructions/SoftFloat.cs index 7895ca1dc..a2bb23be8 100644 --- a/src/ARMeilleure/Instructions/SoftFloat.cs +++ b/src/ARMeilleure/Instructions/SoftFloat.cs @@ -1538,7 +1538,7 @@ namespace ARMeilleure.Instructions } else if (MathF.Abs(value) < MathF.Pow(2f, -128)) { - var overflowToInf = fpcr.GetRoundingMode() switch + bool overflowToInf = fpcr.GetRoundingMode() switch { FPRoundingMode.ToNearest => true, FPRoundingMode.TowardsPlusInfinity => !sign, @@ -3073,7 +3073,7 @@ namespace ARMeilleure.Instructions } else if (Math.Abs(value) < Math.Pow(2d, -1024)) { - var overflowToInf = fpcr.GetRoundingMode() switch + bool overflowToInf = fpcr.GetRoundingMode() switch { FPRoundingMode.ToNearest => true, FPRoundingMode.TowardsPlusInfinity => !sign, diff --git a/src/ARMeilleure/IntermediateRepresentation/Operand.cs b/src/ARMeilleure/IntermediateRepresentation/Operand.cs index 89aefacb1..495a9d04a 100644 --- a/src/ARMeilleure/IntermediateRepresentation/Operand.cs +++ b/src/ARMeilleure/IntermediateRepresentation/Operand.cs @@ -304,7 +304,7 @@ namespace ARMeilleure.IntermediateRepresentation ushort newCount = checked((ushort)(count + 1)); ushort newCapacity = (ushort)Math.Min(capacity * 2, ushort.MaxValue); - var oldSpan = new Span(data, count); + Span oldSpan = new Span(data, count); capacity = newCapacity; data = Allocators.References.Allocate(capacity); @@ -338,7 +338,7 @@ namespace ARMeilleure.IntermediateRepresentation throw new OverflowException(); } - var oldSpan = new Span(data, (int)count); + Span oldSpan = new Span(data, (int)count); capacity = newCapacity; data = Allocators.References.Allocate(capacity); @@ -352,7 +352,7 @@ namespace ARMeilleure.IntermediateRepresentation private static void Remove(in T item, ref T* data, ref ushort count) where T : unmanaged { - var span = new Span(data, count); + Span span = new Span(data, count); for (int i = 0; i < span.Length; i++) { @@ -372,7 +372,7 @@ namespace ARMeilleure.IntermediateRepresentation private static void Remove(in T item, ref T* data, ref uint count) where T : unmanaged { - var span = new Span(data, (int)count); + Span span = new Span(data, (int)count); for (int i = 0; i < span.Length; i++) { diff --git a/src/ARMeilleure/Signal/TestMethods.cs b/src/ARMeilleure/Signal/TestMethods.cs index 9d11ab183..714bcc01b 100644 --- a/src/ARMeilleure/Signal/TestMethods.cs +++ b/src/ARMeilleure/Signal/TestMethods.cs @@ -22,7 +22,7 @@ namespace ARMeilleure.Signal { EmitterContext context = new(); - var result = WindowsPartialUnmapHandler.EmitRetryFromAccessViolation(context); + Operand result = WindowsPartialUnmapHandler.EmitRetryFromAccessViolation(context); context.Return(result); @@ -39,7 +39,7 @@ namespace ARMeilleure.Signal { EmitterContext context = new(); - var result = WindowsPartialUnmapHandler.EmitThreadLocalMapIntGetOrReserve(context, structPtr, context.LoadArgument(OperandType.I32, 0), context.LoadArgument(OperandType.I32, 1)); + Operand result = WindowsPartialUnmapHandler.EmitThreadLocalMapIntGetOrReserve(context, structPtr, context.LoadArgument(OperandType.I32, 0), context.LoadArgument(OperandType.I32, 1)); context.Return(result); diff --git a/src/ARMeilleure/Translation/Cache/JitUnwindWindows.cs b/src/ARMeilleure/Translation/Cache/JitUnwindWindows.cs index 642794188..01b2aa8ed 100644 --- a/src/ARMeilleure/Translation/Cache/JitUnwindWindows.cs +++ b/src/ARMeilleure/Translation/Cache/JitUnwindWindows.cs @@ -100,13 +100,13 @@ namespace ARMeilleure.Translation.Cache return null; // Not found. } - var unwindInfo = funcEntry.UnwindInfo; + CodeGen.Unwinding.UnwindInfo unwindInfo = funcEntry.UnwindInfo; int codeIndex = 0; for (int index = unwindInfo.PushEntries.Length - 1; index >= 0; index--) { - var entry = unwindInfo.PushEntries[index]; + UnwindPushEntry entry = unwindInfo.PushEntries[index]; switch (entry.PseudoOp) { diff --git a/src/ARMeilleure/Translation/ControlFlowGraph.cs b/src/ARMeilleure/Translation/ControlFlowGraph.cs index 45b092ec5..03ef6f461 100644 --- a/src/ARMeilleure/Translation/ControlFlowGraph.cs +++ b/src/ARMeilleure/Translation/ControlFlowGraph.cs @@ -47,8 +47,8 @@ namespace ARMeilleure.Translation { RemoveUnreachableBlocks(Blocks); - var visited = new HashSet(); - var blockStack = new Stack(); + HashSet visited = new HashSet(); + Stack blockStack = new Stack(); Array.Resize(ref _postOrderBlocks, Blocks.Count); Array.Resize(ref _postOrderMap, Blocks.Count); @@ -88,8 +88,8 @@ namespace ARMeilleure.Translation private void RemoveUnreachableBlocks(IntrusiveList blocks) { - var visited = new HashSet(); - var workQueue = new Queue(); + HashSet visited = new HashSet(); + Queue workQueue = new Queue(); visited.Add(Entry); workQueue.Enqueue(Entry); diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index 894e825cf..10f8f3043 100644 --- a/src/ARMeilleure/Translation/PTC/Ptc.cs +++ b/src/ARMeilleure/Translation/PTC/Ptc.cs @@ -9,6 +9,7 @@ using Ryujinx.Common.Logging; using Ryujinx.Common.Memory; using System; using System.Buffers.Binary; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; @@ -562,7 +563,7 @@ namespace ARMeilleure.Translation.PTC bool isEntryChanged = infoEntry.Hash != ComputeHash(translator.Memory, infoEntry.Address, infoEntry.GuestSize); - if (isEntryChanged || (!infoEntry.HighCq && Profiler.ProfiledFuncs.TryGetValue(infoEntry.Address, out var value) && value.HighCq)) + if (isEntryChanged || (!infoEntry.HighCq && Profiler.ProfiledFuncs.TryGetValue(infoEntry.Address, out PtcProfiler.FuncProfile value) && value.HighCq)) { infoEntry.Stubbed = true; infoEntry.CodeLength = 0; @@ -749,8 +750,8 @@ namespace ARMeilleure.Translation.PTC UnwindInfo unwindInfo, bool highCq) { - var cFunc = new CompiledFunction(code, unwindInfo, RelocInfo.Empty); - var gFunc = cFunc.MapWithPointer(out nint gFuncPointer); + CompiledFunction cFunc = new CompiledFunction(code, unwindInfo, RelocInfo.Empty); + GuestFunction gFunc = cFunc.MapWithPointer(out nint gFuncPointer); return new TranslatedFunction(gFunc, gFuncPointer, callCounter, guestSize, highCq); } @@ -787,7 +788,7 @@ namespace ARMeilleure.Translation.PTC public void MakeAndSaveTranslations(Translator translator) { - var profiledFuncsToTranslate = Profiler.GetProfiledFuncsToTranslate(translator.Functions); + ConcurrentQueue<(ulong address, PtcProfiler.FuncProfile funcProfile)> profiledFuncsToTranslate = Profiler.GetProfiledFuncsToTranslate(translator.Functions); _translateCount = 0; _translateTotalCount = profiledFuncsToTranslate.Count; @@ -831,7 +832,7 @@ namespace ARMeilleure.Translation.PTC void TranslateFuncs() { - while (profiledFuncsToTranslate.TryDequeue(out var item)) + while (profiledFuncsToTranslate.TryDequeue(out (ulong address, PtcProfiler.FuncProfile funcProfile) item)) { ulong address = item.address; @@ -866,11 +867,11 @@ namespace ARMeilleure.Translation.PTC Stopwatch sw = Stopwatch.StartNew(); - foreach (var thread in threads) + foreach (Thread thread in threads) { thread.Start(); } - foreach (var thread in threads) + foreach (Thread thread in threads) { thread.Join(); } @@ -944,7 +945,7 @@ namespace ARMeilleure.Translation.PTC WriteCode(code.AsSpan()); // WriteReloc. - using var relocInfoWriter = new BinaryWriter(_relocsStream, EncodingCache.UTF8NoBOM, true); + using BinaryWriter relocInfoWriter = new BinaryWriter(_relocsStream, EncodingCache.UTF8NoBOM, true); foreach (RelocEntry entry in relocInfo.Entries) { @@ -954,7 +955,7 @@ namespace ARMeilleure.Translation.PTC } // WriteUnwindInfo. - using var unwindInfoWriter = new BinaryWriter(_unwindInfosStream, EncodingCache.UTF8NoBOM, true); + using BinaryWriter unwindInfoWriter = new BinaryWriter(_unwindInfosStream, EncodingCache.UTF8NoBOM, true); unwindInfoWriter.Write(unwindInfo.PushEntries.Length); diff --git a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs index bdb9abd05..250ef70bb 100644 --- a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs +++ b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs @@ -111,9 +111,9 @@ namespace ARMeilleure.Translation.PTC public ConcurrentQueue<(ulong address, FuncProfile funcProfile)> GetProfiledFuncsToTranslate(TranslatorCache funcs) { - var profiledFuncsToTranslate = new ConcurrentQueue<(ulong address, FuncProfile funcProfile)>(); + ConcurrentQueue<(ulong address, FuncProfile funcProfile)> profiledFuncsToTranslate = new ConcurrentQueue<(ulong address, FuncProfile funcProfile)>(); - foreach (var profiledFunc in ProfiledFuncs) + foreach (KeyValuePair profiledFunc in ProfiledFuncs) { if (!funcs.ContainsKey(profiledFunc.Key)) { diff --git a/src/ARMeilleure/Translation/SsaConstruction.cs b/src/ARMeilleure/Translation/SsaConstruction.cs index cddcfcd4f..3819340c6 100644 --- a/src/ARMeilleure/Translation/SsaConstruction.cs +++ b/src/ARMeilleure/Translation/SsaConstruction.cs @@ -44,10 +44,10 @@ namespace ARMeilleure.Translation public static void Construct(ControlFlowGraph cfg) { - var globalDefs = new DefMap[cfg.Blocks.Count]; - var localDefs = new Operand[cfg.LocalsCount + RegisterConsts.TotalCount]; + DefMap[] globalDefs = new DefMap[cfg.Blocks.Count]; + Operand[] localDefs = new Operand[cfg.LocalsCount + RegisterConsts.TotalCount]; - var dfPhiBlocks = new Queue(); + Queue dfPhiBlocks = new Queue(); for (BasicBlock block = cfg.Blocks.First; block != null; block = block.ListNext) { diff --git a/src/ARMeilleure/Translation/Translator.cs b/src/ARMeilleure/Translation/Translator.cs index 162368782..8e1a437db 100644 --- a/src/ARMeilleure/Translation/Translator.cs +++ b/src/ARMeilleure/Translation/Translator.cs @@ -222,7 +222,7 @@ namespace ARMeilleure.Translation internal TranslatedFunction Translate(ulong address, ExecutionMode mode, bool highCq, bool singleStep = false) { - var context = new ArmEmitterContext( + ArmEmitterContext context = new ArmEmitterContext( Memory, CountTable, FunctionTable, @@ -259,10 +259,10 @@ namespace ARMeilleure.Translation Logger.EndPass(PassName.RegisterUsage); - var retType = OperandType.I64; - var argTypes = new OperandType[] { OperandType.I64 }; + OperandType retType = OperandType.I64; + OperandType[] argTypes = new OperandType[] { OperandType.I64 }; - var options = highCq ? CompilerOptions.HighCq : CompilerOptions.None; + CompilerOptions options = highCq ? CompilerOptions.HighCq : CompilerOptions.None; if (context.HasPtc && !singleStep) { @@ -521,7 +521,7 @@ namespace ARMeilleure.Translation List functions = Functions.AsList(); - foreach (var func in functions) + foreach (TranslatedFunction func in functions) { JitCache.Unmap(func.FuncPointer); @@ -530,7 +530,7 @@ namespace ARMeilleure.Translation Functions.Clear(); - while (_oldFuncs.TryDequeue(out var kv)) + while (_oldFuncs.TryDequeue(out KeyValuePair kv)) { JitCache.Unmap(kv.Value.FuncPointer); @@ -551,7 +551,7 @@ namespace ARMeilleure.Translation { while (Queue.Count > 0 && Queue.TryDequeue(out RejitRequest request)) { - if (Functions.TryGetValue(request.Address, out var func) && func.CallCounter != null) + if (Functions.TryGetValue(request.Address, out TranslatedFunction func) && func.CallCounter != null) { Volatile.Write(ref func.CallCounter.Value, 0); } diff --git a/src/ARMeilleure/Translation/TranslatorStubs.cs b/src/ARMeilleure/Translation/TranslatorStubs.cs index bd9aed8d4..e48349963 100644 --- a/src/ARMeilleure/Translation/TranslatorStubs.cs +++ b/src/ARMeilleure/Translation/TranslatorStubs.cs @@ -142,7 +142,7 @@ namespace ARMeilleure.Translation /// Generated private nint GenerateDispatchStub() { - var context = new EmitterContext(); + EmitterContext context = new EmitterContext(); Operand lblFallback = Label(); Operand lblEnd = Label(); @@ -161,7 +161,7 @@ namespace ARMeilleure.Translation for (int i = 0; i < _functionTable.Levels.Length; i++) { - ref var level = ref _functionTable.Levels[i]; + ref AddressTableLevel level = ref _functionTable.Levels[i]; // level.Mask is not used directly because it is more often bigger than 32-bits, so it will not // be encoded as an immediate on x86's bitwise and operation. @@ -185,11 +185,11 @@ namespace ARMeilleure.Translation hostAddress = context.Call(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetFunctionAddress)), guestAddress); context.Tailcall(hostAddress, nativeContext); - var cfg = context.GetControlFlowGraph(); - var retType = OperandType.I64; - var argTypes = new[] { OperandType.I64 }; + ControlFlowGraph cfg = context.GetControlFlowGraph(); + OperandType retType = OperandType.I64; + OperandType[] argTypes = new[] { OperandType.I64 }; - var func = Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); + GuestFunction func = Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); return Marshal.GetFunctionPointerForDelegate(func); } @@ -200,7 +200,7 @@ namespace ARMeilleure.Translation /// Generated private nint GenerateSlowDispatchStub() { - var context = new EmitterContext(); + EmitterContext context = new EmitterContext(); // Load the target guest address from the native context. Operand nativeContext = context.LoadArgument(OperandType.I64, 0); @@ -210,11 +210,11 @@ namespace ARMeilleure.Translation Operand hostAddress = context.Call(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetFunctionAddress)), guestAddress); context.Tailcall(hostAddress, nativeContext); - var cfg = context.GetControlFlowGraph(); - var retType = OperandType.I64; - var argTypes = new[] { OperandType.I64 }; + ControlFlowGraph cfg = context.GetControlFlowGraph(); + OperandType retType = OperandType.I64; + OperandType[] argTypes = new[] { OperandType.I64 }; - var func = Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); + GuestFunction func = Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); return Marshal.GetFunctionPointerForDelegate(func); } @@ -251,7 +251,7 @@ namespace ARMeilleure.Translation /// function private DispatcherFunction GenerateDispatchLoop() { - var context = new EmitterContext(); + EmitterContext context = new EmitterContext(); Operand beginLbl = Label(); Operand endLbl = Label(); @@ -279,9 +279,9 @@ namespace ARMeilleure.Translation context.Return(); - var cfg = context.GetControlFlowGraph(); - var retType = OperandType.None; - var argTypes = new[] { OperandType.I64, OperandType.I64 }; + ControlFlowGraph cfg = context.GetControlFlowGraph(); + OperandType retType = OperandType.None; + OperandType[] argTypes = new[] { OperandType.I64, OperandType.I64 }; return Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); } @@ -292,7 +292,7 @@ namespace ARMeilleure.Translation /// function private WrapperFunction GenerateContextWrapper() { - var context = new EmitterContext(); + EmitterContext context = new EmitterContext(); Operand nativeContext = context.LoadArgument(OperandType.I64, 0); Operand guestMethod = context.LoadArgument(OperandType.I64, 1); @@ -303,9 +303,9 @@ namespace ARMeilleure.Translation context.Return(returnValue); - var cfg = context.GetControlFlowGraph(); - var retType = OperandType.I64; - var argTypes = new[] { OperandType.I64, OperandType.I64 }; + ControlFlowGraph cfg = context.GetControlFlowGraph(); + OperandType retType = OperandType.I64; + OperandType[] argTypes = new[] { OperandType.I64, OperandType.I64 }; return Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); } -- 2.47.1 From 97188556d8ce508c097107a98ce29b6578a23783 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:03:38 -0600 Subject: [PATCH 421/722] misc: chore: Use explicit types in audio projects --- src/Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs | 2 +- .../Native/SoundIoOutStreamContext.cs | 6 +++--- src/Ryujinx.Audio/Renderer/Utils/FileHardwareDevice.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs b/src/Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs index acd1582ec..2d04073d7 100644 --- a/src/Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs +++ b/src/Ryujinx.Audio.Backends.SDL2/SDL2HardwareDeviceDriver.cs @@ -37,7 +37,7 @@ namespace Ryujinx.Audio.Backends.SDL2 SDL2Driver.Instance.Initialize(); - int res = SDL_GetDefaultAudioInfo(nint.Zero, out var spec, 0); + int res = SDL_GetDefaultAudioInfo(nint.Zero, out SDL_AudioSpec spec, 0); if (res != 0) { diff --git a/src/Ryujinx.Audio.Backends.SoundIo/Native/SoundIoOutStreamContext.cs b/src/Ryujinx.Audio.Backends.SoundIo/Native/SoundIoOutStreamContext.cs index b1823a074..072e49d8c 100644 --- a/src/Ryujinx.Audio.Backends.SoundIo/Native/SoundIoOutStreamContext.cs +++ b/src/Ryujinx.Audio.Backends.SoundIo/Native/SoundIoOutStreamContext.cs @@ -38,7 +38,7 @@ namespace Ryujinx.Audio.Backends.SoundIo.Native get => Marshal.PtrToStringAnsi(GetOutContext().Name); set { - var context = GetOutContext(); + SoundIoOutStream context = GetOutContext(); if (_nameStored != nint.Zero && context.Name == _nameStored) { @@ -129,8 +129,8 @@ namespace Ryujinx.Audio.Backends.SoundIo.Native unsafe { - var frameCountPtr = &nativeFrameCount; - var arenasPtr = &arenas; + int* frameCountPtr = &nativeFrameCount; + IntPtr* arenasPtr = &arenas; CheckError(soundio_outstream_begin_write(_context, (nint)arenasPtr, (nint)frameCountPtr)); frameCount = *frameCountPtr; diff --git a/src/Ryujinx.Audio/Renderer/Utils/FileHardwareDevice.cs b/src/Ryujinx.Audio/Renderer/Utils/FileHardwareDevice.cs index bc2313ccf..008a067f1 100644 --- a/src/Ryujinx.Audio/Renderer/Utils/FileHardwareDevice.cs +++ b/src/Ryujinx.Audio/Renderer/Utils/FileHardwareDevice.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Audio.Renderer.Utils private void UpdateHeader() { - var writer = new BinaryWriter(_stream); + BinaryWriter writer = new(_stream); long currentPos = writer.Seek(0, SeekOrigin.Current); -- 2.47.1 From a97fd4beb1a8cdb0eb7919ff781f3cb4f12adafe Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:04:12 -0600 Subject: [PATCH 422/722] misc: chore: Use explicit types in common project --- src/Ryujinx.Common/AsyncWorkQueue.cs | 2 +- src/Ryujinx.Common/Configuration/DirtyHack.cs | 4 +-- .../Extensions/SequenceReaderExtensions.cs | 7 ++-- .../Helpers/FileAssociationHelper.cs | 6 ++-- src/Ryujinx.Common/Helpers/LinuxHelper.cs | 2 +- src/Ryujinx.Common/Helpers/OpenHelper.cs | 4 +-- .../Formatters/DynamicObjectFormatter.cs | 4 +-- src/Ryujinx.Common/Logging/Logger.cs | 6 ++-- .../Logging/Targets/JsonLogTarget.cs | 2 +- .../Utilities/EmbeddedResources.cs | 36 +++++++++---------- .../Utilities/FileSystemUtils.cs | 4 +-- .../Utilities/MessagePackObjectFormatter.cs | 17 ++++----- src/Ryujinx.Common/Utilities/StreamUtils.cs | 3 +- .../Utilities/TypedStringEnumConverter.cs | 2 +- .../Utilities/XCIFileTrimmer.cs | 16 ++++----- 15 files changed, 59 insertions(+), 56 deletions(-) diff --git a/src/Ryujinx.Common/AsyncWorkQueue.cs b/src/Ryujinx.Common/AsyncWorkQueue.cs index abb5867b0..e3f91c891 100644 --- a/src/Ryujinx.Common/AsyncWorkQueue.cs +++ b/src/Ryujinx.Common/AsyncWorkQueue.cs @@ -34,7 +34,7 @@ namespace Ryujinx.Common { try { - foreach (var item in _queue.GetConsumingEnumerable(_cts.Token)) + foreach (T item in _queue.GetConsumingEnumerable(_cts.Token)) { _workerAction(item); } diff --git a/src/Ryujinx.Common/Configuration/DirtyHack.cs b/src/Ryujinx.Common/Configuration/DirtyHack.cs index 9ab9a26a5..6564f8567 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHack.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHack.cs @@ -23,7 +23,7 @@ namespace Ryujinx.Common.Configuration public static EnabledDirtyHack Unpack(ulong packedHack) { - var unpackedFields = packedHack.UnpackBitFields(PackedFormat); + uint[] unpackedFields = packedHack.UnpackBitFields(PackedFormat); if (unpackedFields is not [var hack, var value]) throw new Exception("The unpack operation on the integer resulted in an invalid unpacked result."); @@ -53,7 +53,7 @@ namespace Ryujinx.Common.Configuration public static implicit operator DirtyHacks(EnabledDirtyHack[] hacks) => new(hacks); public static implicit operator DirtyHacks(ulong[] packedHacks) => new(packedHacks); - public new int this[DirtyHack hack] => TryGetValue(hack, out var value) ? value : -1; + public new int this[DirtyHack hack] => TryGetValue(hack, out int value) ? value : -1; public bool IsEnabled(DirtyHack hack) => ContainsKey(hack); } diff --git a/src/Ryujinx.Common/Extensions/SequenceReaderExtensions.cs b/src/Ryujinx.Common/Extensions/SequenceReaderExtensions.cs index 79b5d743b..df2b82aa6 100644 --- a/src/Ryujinx.Common/Extensions/SequenceReaderExtensions.cs +++ b/src/Ryujinx.Common/Extensions/SequenceReaderExtensions.cs @@ -1,6 +1,7 @@ using System; using System.Buffers; using System.Diagnostics; +using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -16,15 +17,15 @@ namespace Ryujinx.Common.Extensions /// The path and name of the file to create and dump to public static void DumpToFile(this ref SequenceReader reader, string fileFullName) { - var initialConsumed = reader.Consumed; + long initialConsumed = reader.Consumed; reader.Rewind(initialConsumed); - using (var fileStream = System.IO.File.Create(fileFullName, 4096, System.IO.FileOptions.None)) + using (FileStream fileStream = System.IO.File.Create(fileFullName, 4096, System.IO.FileOptions.None)) { while (reader.End == false) { - var span = reader.CurrentSpan; + ReadOnlySpan span = reader.CurrentSpan; fileStream.Write(span); reader.Advance(span.Length); } diff --git a/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs b/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs index 476aee228..7ed5e869a 100644 --- a/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs +++ b/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs @@ -101,7 +101,7 @@ namespace Ryujinx.Common.Helper { RegistryKey key = Registry.CurrentUser.OpenSubKey(@$"Software\Classes\{ext}"); - var openCmd = key?.OpenSubKey(@"shell\open\command"); + RegistryKey openCmd = key?.OpenSubKey(@"shell\open\command"); if (openCmd is null) { @@ -143,7 +143,7 @@ namespace Ryujinx.Common.Helper } else { - using var key = Registry.CurrentUser.CreateSubKey(keyString); + using RegistryKey key = Registry.CurrentUser.CreateSubKey(keyString); if (key is null) { @@ -151,7 +151,7 @@ namespace Ryujinx.Common.Helper } Logger.Debug?.Print(LogClass.Application, $"Adding type association {ext}"); - using var openCmd = key.CreateSubKey(@"shell\open\command"); + using RegistryKey openCmd = key.CreateSubKey(@"shell\open\command"); openCmd.SetValue(string.Empty, $"\"{Environment.ProcessPath}\" \"%1\""); Logger.Debug?.Print(LogClass.Application, $"Added type association {ext}"); diff --git a/src/Ryujinx.Common/Helpers/LinuxHelper.cs b/src/Ryujinx.Common/Helpers/LinuxHelper.cs index 2adfd20f8..e342b2151 100644 --- a/src/Ryujinx.Common/Helpers/LinuxHelper.cs +++ b/src/Ryujinx.Common/Helpers/LinuxHelper.cs @@ -24,7 +24,7 @@ namespace Ryujinx.Common.Helper return null; } - foreach (var searchPath in pathVar.Split(":", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)) + foreach (string searchPath in pathVar.Split(":", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)) { string binaryPath = Path.Combine(searchPath, binary); diff --git a/src/Ryujinx.Common/Helpers/OpenHelper.cs b/src/Ryujinx.Common/Helpers/OpenHelper.cs index 6a54b69f3..402e6bcc1 100644 --- a/src/Ryujinx.Common/Helpers/OpenHelper.cs +++ b/src/Ryujinx.Common/Helpers/OpenHelper.cs @@ -60,7 +60,7 @@ namespace Ryujinx.Common.Helper { ObjectiveC.NSString nsStringPath = new(path); ObjectiveC.Object nsUrl = new("NSURL"); - var urlPtr = nsUrl.GetFromMessage("fileURLWithPath:", nsStringPath); + ObjectiveC.Object urlPtr = nsUrl.GetFromMessage("fileURLWithPath:", nsStringPath); ObjectiveC.Object nsArray = new("NSArray"); ObjectiveC.Object urlArray = nsArray.GetFromMessage("arrayWithObject:", urlPtr); @@ -99,7 +99,7 @@ namespace Ryujinx.Common.Helper { ObjectiveC.NSString nsStringPath = new(url); ObjectiveC.Object nsUrl = new("NSURL"); - var urlPtr = nsUrl.GetFromMessage("URLWithString:", nsStringPath); + ObjectiveC.Object urlPtr = nsUrl.GetFromMessage("URLWithString:", nsStringPath); ObjectiveC.Object nsWorkspace = new("NSWorkspace"); ObjectiveC.Object sharedWorkspace = nsWorkspace.GetFromMessage("sharedWorkspace"); diff --git a/src/Ryujinx.Common/Logging/Formatters/DynamicObjectFormatter.cs b/src/Ryujinx.Common/Logging/Formatters/DynamicObjectFormatter.cs index b1cc0eae3..a7b4da40f 100644 --- a/src/Ryujinx.Common/Logging/Formatters/DynamicObjectFormatter.cs +++ b/src/Ryujinx.Common/Logging/Formatters/DynamicObjectFormatter.cs @@ -41,7 +41,7 @@ namespace Ryujinx.Common.Logging.Formatters sb.Append('{'); - foreach (var prop in props) + foreach (PropertyInfo prop in props) { sb.Append(prop.Name); sb.Append(": "); @@ -52,7 +52,7 @@ namespace Ryujinx.Common.Logging.Formatters if (array is not null) { - foreach (var item in array) + foreach (object? item in array) { sb.Append(item); sb.Append(", "); diff --git a/src/Ryujinx.Common/Logging/Logger.cs b/src/Ryujinx.Common/Logging/Logger.cs index 6ea6b7ac3..0ac96c7d3 100644 --- a/src/Ryujinx.Common/Logging/Logger.cs +++ b/src/Ryujinx.Common/Logging/Logger.cs @@ -193,7 +193,7 @@ namespace Ryujinx.Common.Logging _stdErrAdapter.Dispose(); - foreach (var target in _logTargets) + foreach (ILogTarget target in _logTargets) { target.Dispose(); } @@ -203,9 +203,9 @@ namespace Ryujinx.Common.Logging public static IReadOnlyCollection GetEnabledLevels() { - var logs = new[] { Debug, Info, Warning, Error, Guest, AccessLog, Stub, Trace }; + Log?[] logs = new[] { Debug, Info, Warning, Error, Guest, AccessLog, Stub, Trace }; List levels = new(logs.Length); - foreach (var log in logs) + foreach (Log? log in logs) { if (log.HasValue) levels.Add(log.Value.Level); diff --git a/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs b/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs index c5bf23cdb..88b324a36 100644 --- a/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs +++ b/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs @@ -26,7 +26,7 @@ namespace Ryujinx.Common.Logging.Targets public void Log(object sender, LogEventArgs e) { - var logEventArgsJson = LogEventArgsJson.FromLogEventArgs(e); + LogEventArgsJson logEventArgsJson = LogEventArgsJson.FromLogEventArgs(e); JsonHelper.SerializeToStream(_stream, logEventArgsJson, LogEventJsonSerializerContext.Default.LogEventArgsJson); } diff --git a/src/Ryujinx.Common/Utilities/EmbeddedResources.cs b/src/Ryujinx.Common/Utilities/EmbeddedResources.cs index 7530c012a..107b4b584 100644 --- a/src/Ryujinx.Common/Utilities/EmbeddedResources.cs +++ b/src/Ryujinx.Common/Utilities/EmbeddedResources.cs @@ -19,21 +19,21 @@ namespace Ryujinx.Common public static byte[] Read(string filename) { - var (assembly, path) = ResolveManifestPath(filename); + (Assembly assembly, string path) = ResolveManifestPath(filename); return Read(assembly, path); } public static Task ReadAsync(string filename) { - var (assembly, path) = ResolveManifestPath(filename); + (Assembly assembly, string path) = ResolveManifestPath(filename); return ReadAsync(assembly, path); } public static byte[] Read(Assembly assembly, string filename) { - using var stream = GetStream(assembly, filename); + using Stream stream = GetStream(assembly, filename); if (stream == null) { return null; @@ -44,14 +44,14 @@ namespace Ryujinx.Common public static MemoryOwner ReadFileToRentedMemory(string filename) { - var (assembly, path) = ResolveManifestPath(filename); + (Assembly assembly, string path) = ResolveManifestPath(filename); return ReadFileToRentedMemory(assembly, path); } public static MemoryOwner ReadFileToRentedMemory(Assembly assembly, string filename) { - using var stream = GetStream(assembly, filename); + using Stream stream = GetStream(assembly, filename); return stream is null ? null @@ -60,7 +60,7 @@ namespace Ryujinx.Common public async static Task ReadAsync(Assembly assembly, string filename) { - using var stream = GetStream(assembly, filename); + using Stream stream = GetStream(assembly, filename); if (stream == null) { return null; @@ -71,55 +71,55 @@ namespace Ryujinx.Common public static string ReadAllText(string filename) { - var (assembly, path) = ResolveManifestPath(filename); + (Assembly assembly, string path) = ResolveManifestPath(filename); return ReadAllText(assembly, path); } public static Task ReadAllTextAsync(string filename) { - var (assembly, path) = ResolveManifestPath(filename); + (Assembly assembly, string path) = ResolveManifestPath(filename); return ReadAllTextAsync(assembly, path); } public static string ReadAllText(Assembly assembly, string filename) { - using var stream = GetStream(assembly, filename); + using Stream stream = GetStream(assembly, filename); if (stream == null) { return null; } - using var reader = new StreamReader(stream); + using StreamReader reader = new StreamReader(stream); return reader.ReadToEnd(); } public async static Task ReadAllTextAsync(Assembly assembly, string filename) { - using var stream = GetStream(assembly, filename); + using Stream stream = GetStream(assembly, filename); if (stream == null) { return null; } - using var reader = new StreamReader(stream); + using StreamReader reader = new StreamReader(stream); return await reader.ReadToEndAsync(); } public static Stream GetStream(string filename) { - var (assembly, path) = ResolveManifestPath(filename); + (Assembly assembly, string path) = ResolveManifestPath(filename); return GetStream(assembly, path); } public static Stream GetStream(Assembly assembly, string filename) { - var @namespace = assembly.GetName().Name; - var manifestUri = @namespace + "." + filename.Replace('/', '.'); + string @namespace = assembly.GetName().Name; + string manifestUri = @namespace + "." + filename.Replace('/', '.'); - var stream = assembly.GetManifestResourceStream(manifestUri); + Stream stream = assembly.GetManifestResourceStream(manifestUri); return stream; } @@ -133,11 +133,11 @@ namespace Ryujinx.Common private static (Assembly, string) ResolveManifestPath(string filename) { - var segments = filename.Split('/', 2, StringSplitOptions.RemoveEmptyEntries); + string[] segments = filename.Split('/', 2, StringSplitOptions.RemoveEmptyEntries); if (segments.Length >= 2) { - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) { if (assembly.GetName().Name == segments[0]) { diff --git a/src/Ryujinx.Common/Utilities/FileSystemUtils.cs b/src/Ryujinx.Common/Utilities/FileSystemUtils.cs index a57fa8a78..58bc80147 100644 --- a/src/Ryujinx.Common/Utilities/FileSystemUtils.cs +++ b/src/Ryujinx.Common/Utilities/FileSystemUtils.cs @@ -9,7 +9,7 @@ namespace Ryujinx.Common.Utilities public static void CopyDirectory(string sourceDir, string destinationDir, bool recursive) { // Get information about the source directory - var dir = new DirectoryInfo(sourceDir); + DirectoryInfo dir = new DirectoryInfo(sourceDir); // Check if the source directory exists if (!dir.Exists) @@ -49,7 +49,7 @@ namespace Ryujinx.Common.Utilities public static string SanitizeFileName(string fileName) { - var reservedChars = new HashSet(Path.GetInvalidFileNameChars()); + HashSet reservedChars = new HashSet(Path.GetInvalidFileNameChars()); return string.Concat(fileName.Select(c => reservedChars.Contains(c) ? '_' : c)); } } diff --git a/src/Ryujinx.Common/Utilities/MessagePackObjectFormatter.cs b/src/Ryujinx.Common/Utilities/MessagePackObjectFormatter.cs index 426cd46b7..6d5be656f 100644 --- a/src/Ryujinx.Common/Utilities/MessagePackObjectFormatter.cs +++ b/src/Ryujinx.Common/Utilities/MessagePackObjectFormatter.cs @@ -1,5 +1,6 @@ using MsgPack; using System; +using System.Collections.Generic; using System.Text; namespace Ryujinx.Common.Utilities @@ -18,7 +19,7 @@ namespace Ryujinx.Common.Utilities public static string Format(MessagePackObject obj) { - var builder = new IndentedStringBuilder(); + IndentedStringBuilder builder = new IndentedStringBuilder(); FormatMsgPackObj(obj, builder); @@ -41,7 +42,7 @@ namespace Ryujinx.Common.Utilities } else { - var literal = obj.ToObject(); + object literal = obj.ToObject(); if (literal is String) { @@ -88,7 +89,7 @@ namespace Ryujinx.Common.Utilities { builder.Append("[ "); - foreach (var b in arr) + foreach (byte b in arr) { builder.Append("0x"); builder.Append(ToHexChar(b >> 4)); @@ -111,7 +112,7 @@ namespace Ryujinx.Common.Utilities builder.Append("0x"); } - foreach (var b in arr) + foreach (byte b in arr) { builder.Append(ToHexChar(b >> 4)); builder.Append(ToHexChar(b & 0xF)); @@ -122,7 +123,7 @@ namespace Ryujinx.Common.Utilities private static void FormatMsgPackMap(MessagePackObject obj, IndentedStringBuilder builder) { - var map = obj.AsDictionary(); + MessagePackObjectDictionary map = obj.AsDictionary(); builder.Append('{'); @@ -130,7 +131,7 @@ namespace Ryujinx.Common.Utilities builder.IncreaseIndent() .AppendLine(); - foreach (var item in map) + foreach (KeyValuePair item in map) { FormatMsgPackObj(item.Key, builder); @@ -154,11 +155,11 @@ namespace Ryujinx.Common.Utilities private static void FormatMsgPackArray(MessagePackObject obj, IndentedStringBuilder builder) { - var arr = obj.AsList(); + IList arr = obj.AsList(); builder.Append("[ "); - foreach (var item in arr) + foreach (MessagePackObject item in arr) { FormatMsgPackObj(item, builder); diff --git a/src/Ryujinx.Common/Utilities/StreamUtils.cs b/src/Ryujinx.Common/Utilities/StreamUtils.cs index aeb6e0d52..60391a902 100644 --- a/src/Ryujinx.Common/Utilities/StreamUtils.cs +++ b/src/Ryujinx.Common/Utilities/StreamUtils.cs @@ -1,5 +1,6 @@ using Microsoft.IO; using Ryujinx.Common.Memory; +using System; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -27,7 +28,7 @@ namespace Ryujinx.Common.Utilities MemoryOwner ownedMemory = MemoryOwner.Rent(checked((int)bytesExpected)); - var destSpan = ownedMemory.Span; + Span destSpan = ownedMemory.Span; int totalBytesRead = 0; diff --git a/src/Ryujinx.Common/Utilities/TypedStringEnumConverter.cs b/src/Ryujinx.Common/Utilities/TypedStringEnumConverter.cs index 9d3944c15..d7eb3d556 100644 --- a/src/Ryujinx.Common/Utilities/TypedStringEnumConverter.cs +++ b/src/Ryujinx.Common/Utilities/TypedStringEnumConverter.cs @@ -18,7 +18,7 @@ namespace Ryujinx.Common.Utilities { public override TEnum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { - var enumValue = reader.GetString(); + string? enumValue = reader.GetString(); if (Enum.TryParse(enumValue, out TEnum value)) { diff --git a/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs b/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs index 050e78d1e..e92b5fe60 100644 --- a/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs +++ b/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs @@ -46,7 +46,7 @@ namespace Ryujinx.Common.Utilities { if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase)) { - var trimmer = new XCIFileTrimmer(filename, log); + XCIFileTrimmer trimmer = new XCIFileTrimmer(filename, log); return trimmer.CanBeTrimmed; } @@ -57,7 +57,7 @@ namespace Ryujinx.Common.Utilities { if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase)) { - var trimmer = new XCIFileTrimmer(filename, log); + XCIFileTrimmer trimmer = new XCIFileTrimmer(filename, log); return trimmer.CanBeUntrimmed; } @@ -201,7 +201,7 @@ namespace Ryujinx.Common.Utilities { long maxReads = readSizeB / XCIFileTrimmer.BufferSize; long read = 0; - var buffer = new byte[BufferSize]; + byte[] buffer = new byte[BufferSize]; while (true) { @@ -267,7 +267,7 @@ namespace Ryujinx.Common.Utilities try { - var info = new FileInfo(Filename); + FileInfo info = new FileInfo(Filename); if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { try @@ -288,7 +288,7 @@ namespace Ryujinx.Common.Utilities return OperationOutcome.FileSizeChanged; } - var outfileStream = new FileStream(_filename, FileMode.Open, FileAccess.Write, FileShare.Write); + FileStream outfileStream = new FileStream(_filename, FileMode.Open, FileAccess.Write, FileShare.Write); try { @@ -327,7 +327,7 @@ namespace Ryujinx.Common.Utilities { Log?.Write(LogType.Info, "Untrimming..."); - var info = new FileInfo(Filename); + FileInfo info = new FileInfo(Filename); if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { try @@ -348,7 +348,7 @@ namespace Ryujinx.Common.Utilities return OperationOutcome.FileSizeChanged; } - var outfileStream = new FileStream(_filename, FileMode.Append, FileAccess.Write, FileShare.Write); + FileStream outfileStream = new FileStream(_filename, FileMode.Append, FileAccess.Write, FileShare.Write); long bytesToWriteB = UntrimmedFileSizeB - FileSizeB; try @@ -393,7 +393,7 @@ namespace Ryujinx.Common.Utilities try { - var buffer = new byte[BufferSize]; + byte[] buffer = new byte[BufferSize]; Array.Fill(buffer, XCIFileTrimmer.PaddingByte); while (bytesLeftToWriteB > 0) -- 2.47.1 From 5099548856181f839a7c3daee8c533d4fd2a9370 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:04:43 -0600 Subject: [PATCH 423/722] misc: chore: Use explicit types in CPU project --- src/Ryujinx.Cpu/AddressTable.cs | 14 +++++++------- src/Ryujinx.Cpu/AppleHv/HvAddressSpace.cs | 2 +- src/Ryujinx.Cpu/AppleHv/HvMemoryBlockAllocator.cs | 2 +- src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs | 6 +++--- src/Ryujinx.Cpu/AppleHv/HvVcpu.cs | 2 +- src/Ryujinx.Cpu/AppleHv/HvVm.cs | 2 +- .../Jit/HostTracked/AddressSpacePartition.cs | 2 +- src/Ryujinx.Cpu/Jit/MemoryManager.cs | 6 +++--- src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs | 2 +- src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs | 4 ++-- .../Arm32/Target/Arm64/InstEmitFlow.cs | 2 +- .../Arm64/Target/Arm64/InstEmitSystem.cs | 2 +- src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs | 2 +- .../LightningJit/CodeGen/Arm64/Assembler.cs | 10 +++++----- src/Ryujinx.Cpu/LightningJit/Translator.cs | 4 ++-- src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs | 2 +- src/Ryujinx.Cpu/PrivateMemoryAllocator.cs | 14 +++++++------- src/Ryujinx.Cpu/Signal/NativeSignalHandler.cs | 2 +- 18 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/Ryujinx.Cpu/AddressTable.cs b/src/Ryujinx.Cpu/AddressTable.cs index 038a2009c..4015e0801 100644 --- a/src/Ryujinx.Cpu/AddressTable.cs +++ b/src/Ryujinx.Cpu/AddressTable.cs @@ -49,7 +49,7 @@ namespace ARMeilleure.Common public TableSparseBlock(ulong size, Action ensureMapped, PageInitDelegate pageInit) { - var block = new SparseMemoryBlock(size, pageInit, null); + SparseMemoryBlock block = new SparseMemoryBlock(size, pageInit, null); _trackingEvent = (ulong address, ulong size, bool write) => { @@ -146,7 +146,7 @@ namespace ARMeilleure.Common Levels = levels; Mask = 0; - foreach (var level in Levels) + foreach (AddressTableLevel level in Levels) { Mask |= level.Mask; } @@ -363,7 +363,7 @@ namespace ARMeilleure.Common /// The new sparse block that was added private TableSparseBlock ReserveNewSparseBlock() { - var block = new TableSparseBlock(_sparseBlockSize, EnsureMapped, InitLeafPage); + TableSparseBlock block = new TableSparseBlock(_sparseBlockSize, EnsureMapped, InitLeafPage); _sparseReserved.Add(block); _sparseReservedOffset = 0; @@ -381,7 +381,7 @@ namespace ARMeilleure.Common /// Allocated block private IntPtr Allocate(int length, T fill, bool leaf) where T : unmanaged { - var size = sizeof(T) * length; + int size = sizeof(T) * length; AddressTablePage page; @@ -413,10 +413,10 @@ namespace ARMeilleure.Common } else { - var address = (IntPtr)NativeAllocator.Instance.Allocate((uint)size); + IntPtr address = (IntPtr)NativeAllocator.Instance.Allocate((uint)size); page = new AddressTablePage(false, address); - var span = new Span((void*)page.Address, length); + Span span = new Span((void*)page.Address, length); span.Fill(fill); } @@ -445,7 +445,7 @@ namespace ARMeilleure.Common { if (!_disposed) { - foreach (var page in _pages) + foreach (AddressTablePage page in _pages) { if (!page.IsSparse) { diff --git a/src/Ryujinx.Cpu/AppleHv/HvAddressSpace.cs b/src/Ryujinx.Cpu/AppleHv/HvAddressSpace.cs index eb7c0ef08..662e50793 100644 --- a/src/Ryujinx.Cpu/AppleHv/HvAddressSpace.cs +++ b/src/Ryujinx.Cpu/AppleHv/HvAddressSpace.cs @@ -29,7 +29,7 @@ namespace Ryujinx.Cpu.AppleHv public HvAddressSpace(MemoryBlock backingMemory, ulong asSize) { - (_asBase, var ipaAllocator) = HvVm.CreateAddressSpace(backingMemory); + (_asBase, HvIpaAllocator ipaAllocator) = HvVm.CreateAddressSpace(backingMemory); _backingSize = backingMemory.Size; _userRange = new HvAddressSpaceRange(ipaAllocator); diff --git a/src/Ryujinx.Cpu/AppleHv/HvMemoryBlockAllocator.cs b/src/Ryujinx.Cpu/AppleHv/HvMemoryBlockAllocator.cs index 86936c592..779579e6a 100644 --- a/src/Ryujinx.Cpu/AppleHv/HvMemoryBlockAllocator.cs +++ b/src/Ryujinx.Cpu/AppleHv/HvMemoryBlockAllocator.cs @@ -45,7 +45,7 @@ namespace Ryujinx.Cpu.AppleHv public HvMemoryBlockAllocation Allocate(ulong size, ulong alignment) { - var allocation = Allocate(size, alignment, CreateBlock); + Allocation allocation = Allocate(size, alignment, CreateBlock); return new HvMemoryBlockAllocation(this, allocation.Block, allocation.Offset, allocation.Size); } diff --git a/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs b/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs index 74c39d6a8..28c78074d 100644 --- a/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs +++ b/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs @@ -233,13 +233,13 @@ namespace Ryujinx.Cpu.AppleHv yield break; } - var guestRegions = GetPhysicalRegionsImpl(va, size); + IEnumerable guestRegions = GetPhysicalRegionsImpl(va, size); if (guestRegions == null) { yield break; } - foreach (var guestRegion in guestRegions) + foreach (MemoryRange guestRegion in guestRegions) { nint pointer = _backingMemory.GetPointer(guestRegion.Address, guestRegion.Size); yield return new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size); @@ -254,7 +254,7 @@ namespace Ryujinx.Cpu.AppleHv yield break; } - foreach (var physicalRegion in GetPhysicalRegionsImpl(va, size)) + foreach (MemoryRange physicalRegion in GetPhysicalRegionsImpl(va, size)) { yield return physicalRegion; } diff --git a/src/Ryujinx.Cpu/AppleHv/HvVcpu.cs b/src/Ryujinx.Cpu/AppleHv/HvVcpu.cs index ee91c478b..c4eec31a6 100644 --- a/src/Ryujinx.Cpu/AppleHv/HvVcpu.cs +++ b/src/Ryujinx.Cpu/AppleHv/HvVcpu.cs @@ -41,7 +41,7 @@ namespace Ryujinx.Cpu.AppleHv { // Calculate our time delta in ticks based on the current clock frequency. - int result = TimeApi.mach_timebase_info(out var timeBaseInfo); + int result = TimeApi.mach_timebase_info(out MachTimebaseInfo timeBaseInfo); Debug.Assert(result == 0); diff --git a/src/Ryujinx.Cpu/AppleHv/HvVm.cs b/src/Ryujinx.Cpu/AppleHv/HvVm.cs index b4d45f36d..dc115f515 100644 --- a/src/Ryujinx.Cpu/AppleHv/HvVm.cs +++ b/src/Ryujinx.Cpu/AppleHv/HvVm.cs @@ -39,7 +39,7 @@ namespace Ryujinx.Cpu.AppleHv baseAddress = ipaAllocator.Allocate(block.Size, AsIpaAlignment); } - var rwx = HvMemoryFlags.Read | HvMemoryFlags.Write | HvMemoryFlags.Exec; + HvMemoryFlags rwx = HvMemoryFlags.Read | HvMemoryFlags.Write | HvMemoryFlags.Exec; HvApi.hv_vm_map((ulong)block.Pointer, baseAddress, block.Size, rwx).ThrowOnError(); diff --git a/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartition.cs b/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartition.cs index f9743a0a1..9ee2d58e6 100644 --- a/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartition.cs +++ b/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartition.cs @@ -127,7 +127,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked Debug.Assert(leftSize > 0); Debug.Assert(rightSize > 0); - (var leftAllocation, PrivateAllocation) = PrivateAllocation.Split(leftSize); + (PrivateMemoryAllocation leftAllocation, PrivateAllocation) = PrivateAllocation.Split(leftSize); PrivateMapping left = new(Address, leftSize, leftAllocation); diff --git a/src/Ryujinx.Cpu/Jit/MemoryManager.cs b/src/Ryujinx.Cpu/Jit/MemoryManager.cs index 076fb6ad8..2635a2c7d 100644 --- a/src/Ryujinx.Cpu/Jit/MemoryManager.cs +++ b/src/Ryujinx.Cpu/Jit/MemoryManager.cs @@ -253,13 +253,13 @@ namespace Ryujinx.Cpu.Jit yield break; } - var guestRegions = GetPhysicalRegionsImpl(va, size); + IEnumerable guestRegions = GetPhysicalRegionsImpl(va, size); if (guestRegions == null) { yield break; } - foreach (var guestRegion in guestRegions) + foreach (MemoryRange guestRegion in guestRegions) { nint pointer = _backingMemory.GetPointer(guestRegion.Address, guestRegion.Size); yield return new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size); @@ -274,7 +274,7 @@ namespace Ryujinx.Cpu.Jit yield break; } - foreach (var physicalRegion in GetPhysicalRegionsImpl(va, size)) + foreach (MemoryRange physicalRegion in GetPhysicalRegionsImpl(va, size)) { yield return physicalRegion; } diff --git a/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs b/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs index 0fe8b344f..146805982 100644 --- a/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs +++ b/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs @@ -340,7 +340,7 @@ namespace Ryujinx.Cpu.Jit { int pages = GetPagesCount(va, (uint)size, out va); - var regions = new List(); + List regions = new List(); ulong regionStart = GetPhysicalAddressChecked(va); ulong regionSize = PageSize; diff --git a/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs b/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs index 499f991f2..d802f5046 100644 --- a/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs +++ b/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs @@ -240,7 +240,7 @@ namespace Ryujinx.Cpu.Jit if (TryGetVirtualContiguous(va, data.Length, out MemoryBlock memoryBlock, out ulong offset)) { - var target = memoryBlock.GetSpan(offset, data.Length); + Span target = memoryBlock.GetSpan(offset, data.Length); bool changed = !data.SequenceEqual(target); @@ -443,7 +443,7 @@ namespace Ryujinx.Cpu.Jit return null; } - var regions = new List(); + List regions = new List(); ulong endVa = va + size; try diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs index 48bdbb573..6a8c2abdd 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitFlow.cs @@ -205,7 +205,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64 for (int i = 0; i < funcTable.Levels.Length; i++) { - var level = funcTable.Levels[i]; + AddressTableLevel level = funcTable.Levels[i]; asm.Ubfx(indexReg, guestAddress, level.Index, level.Length); asm.Lsl(indexReg, indexReg, Const(3)); diff --git a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs index bf9338400..98939839c 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs @@ -370,7 +370,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 for (int i = 0; i < funcTable.Levels.Length; i++) { - var level = funcTable.Levels[i]; + AddressTableLevel level = funcTable.Levels[i]; asm.Ubfx(indexReg, guestAddress, level.Index, level.Length); asm.Lsl(indexReg, indexReg, Const(3)); diff --git a/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs b/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs index e9a342aba..a743710e9 100644 --- a/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs +++ b/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs @@ -190,7 +190,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache private bool TryGetThreadLocalFunction(ulong guestAddress, out nint funcPtr) { - if ((_threadLocalCache ??= new()).TryGetValue(guestAddress, out var entry)) + if ((_threadLocalCache ??= new()).TryGetValue(guestAddress, out ThreadLocalCacheEntry entry)) { if (entry.IncrementUseCount() >= MinCallsForPad) { diff --git a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs index 28539707f..340ae43d1 100644 --- a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs +++ b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs @@ -41,7 +41,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 { int targetIndex = _code.Count; - var state = _labels[label.AsInt32()]; + LabelState state = _labels[label.AsInt32()]; state.TargetIndex = targetIndex; state.HasTarget = true; @@ -68,7 +68,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 { int branchIndex = _code.Count; - var state = _labels[label.AsInt32()]; + LabelState state = _labels[label.AsInt32()]; state.BranchIndex = branchIndex; state.HasBranch = true; @@ -94,7 +94,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 { int branchIndex = _code.Count; - var state = _labels[label.AsInt32()]; + LabelState state = _labels[label.AsInt32()]; state.BranchIndex = branchIndex; state.HasBranch = true; @@ -113,7 +113,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 { int branchIndex = _code.Count; - var state = _labels[label.AsInt32()]; + LabelState state = _labels[label.AsInt32()]; state.BranchIndex = branchIndex; state.HasBranch = true; @@ -342,7 +342,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 public readonly void Cset(Operand rd, ArmCondition condition) { - var zr = new Operand(ZrRegister, RegisterType.Integer, rd.Type); + Operand zr = new Operand(ZrRegister, RegisterType.Integer, rd.Type); Csinc(rd, zr, zr, (ArmCondition)((int)condition ^ 1)); } diff --git a/src/Ryujinx.Cpu/LightningJit/Translator.cs b/src/Ryujinx.Cpu/LightningJit/Translator.cs index 4c4011f11..22a38ca99 100644 --- a/src/Ryujinx.Cpu/LightningJit/Translator.cs +++ b/src/Ryujinx.Cpu/LightningJit/Translator.cs @@ -163,14 +163,14 @@ namespace Ryujinx.Cpu.LightningJit { List functions = Functions.AsList(); - foreach (var func in functions) + foreach (TranslatedFunction func in functions) { JitCache.Unmap(func.FuncPointer); } Functions.Clear(); - while (_oldFuncs.TryDequeue(out var kv)) + while (_oldFuncs.TryDequeue(out KeyValuePair kv)) { JitCache.Unmap(kv.Value.FuncPointer); } diff --git a/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs b/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs index c5231e506..6ef653a37 100644 --- a/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs +++ b/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs @@ -174,7 +174,7 @@ namespace Ryujinx.Cpu.LightningJit for (int i = 0; i < _functionTable.Levels.Length; i++) { - ref var level = ref _functionTable.Levels[i]; + ref AddressTableLevel level = ref _functionTable.Levels[i]; asm.Mov(mask, level.Mask >> level.Index); asm.And(index, mask, guestAddress, ArmShiftType.Lsr, level.Index); diff --git a/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs b/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs index 8db74f1e9..99528b576 100644 --- a/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs +++ b/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs @@ -48,7 +48,7 @@ namespace Ryujinx.Cpu { for (int i = 0; i < _freeRanges.Count; i++) { - var range = _freeRanges[i]; + Range range = _freeRanges[i]; ulong alignedOffset = BitUtils.AlignUp(range.Offset, alignment); ulong sizeDelta = alignedOffset - range.Offset; @@ -84,7 +84,7 @@ namespace Ryujinx.Cpu private void InsertFreeRange(ulong offset, ulong size) { - var range = new Range(offset, size); + Range range = new Range(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { @@ -97,7 +97,7 @@ namespace Ryujinx.Cpu private void InsertFreeRangeComingled(ulong offset, ulong size) { ulong endOffset = offset + size; - var range = new Range(offset, size); + Range range = new Range(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { @@ -149,7 +149,7 @@ namespace Ryujinx.Cpu public PrivateMemoryAllocation Allocate(ulong size, ulong alignment) { - var allocation = Allocate(size, alignment, CreateBlock); + Allocation allocation = Allocate(size, alignment, CreateBlock); return new PrivateMemoryAllocation(this, allocation.Block, allocation.Offset, allocation.Size); } @@ -200,7 +200,7 @@ namespace Ryujinx.Cpu for (int i = 0; i < _blocks.Count; i++) { - var block = _blocks[i]; + T block = _blocks[i]; if (block.Size >= size) { @@ -214,8 +214,8 @@ namespace Ryujinx.Cpu ulong blockAlignedSize = BitUtils.AlignUp(size, _blockAlignment); - var memory = new MemoryBlock(blockAlignedSize, _allocationFlags); - var newBlock = createBlock(memory, blockAlignedSize); + MemoryBlock memory = new MemoryBlock(blockAlignedSize, _allocationFlags); + T newBlock = createBlock(memory, blockAlignedSize); InsertBlock(newBlock); diff --git a/src/Ryujinx.Cpu/Signal/NativeSignalHandler.cs b/src/Ryujinx.Cpu/Signal/NativeSignalHandler.cs index 75a6d3bf8..299adfbbd 100644 --- a/src/Ryujinx.Cpu/Signal/NativeSignalHandler.cs +++ b/src/Ryujinx.Cpu/Signal/NativeSignalHandler.cs @@ -98,7 +98,7 @@ namespace Ryujinx.Cpu.Signal _signalHandlerPtr = customSignalHandlerFactory(UnixSignalHandlerRegistration.GetSegfaultExceptionHandler().sa_handler, _signalHandlerPtr); } - var old = UnixSignalHandlerRegistration.RegisterExceptionHandler(_signalHandlerPtr); + UnixSignalHandlerRegistration.SigAction old = UnixSignalHandlerRegistration.RegisterExceptionHandler(_signalHandlerPtr); config.UnixOldSigaction = (nuint)(ulong)old.sa_handler; config.UnixOldSigaction3Arg = old.sa_flags & 4; -- 2.47.1 From 1ae349efb15dbde21affcfa8f2648f38a87eb238 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:05:44 -0600 Subject: [PATCH 424/722] misc: chore: Use explicit types in GPU, Device, and Host1x projects --- src/Ryujinx.Graphics.Device/DeviceState.cs | 15 ++-- .../Engine/Compute/ComputeClass.cs | 5 +- .../Engine/DeviceStateWithShadow.cs | 2 +- .../Engine/Dma/DmaClass.cs | 16 ++-- .../Engine/GPFifo/GPFifoProcessor.cs | 2 +- .../InlineToMemory/InlineToMemoryClass.cs | 11 +-- .../Engine/MME/MacroHLE.cs | 64 +++++++-------- .../Engine/MME/MacroHLETable.cs | 6 +- .../Engine/MME/MacroInterpreter.cs | 2 +- .../Engine/MME/MacroJitContext.cs | 2 +- .../Threed/Blender/AdvancedBlendFunctions.cs | 2 +- .../Threed/Blender/AdvancedBlendManager.cs | 2 +- .../Threed/ComputeDraw/VtgAsComputeContext.cs | 4 +- .../Threed/ComputeDraw/VtgAsComputeState.cs | 8 +- .../Engine/Threed/ConstantBufferUpdater.cs | 9 ++- .../Engine/Threed/DrawManager.cs | 16 ++-- .../Threed/SpecializationStateUpdater.cs | 2 +- .../Engine/Threed/StateUpdateTracker.cs | 15 ++-- .../Engine/Threed/StateUpdater.cs | 77 ++++++++++--------- .../Engine/Threed/ThreedClass.cs | 40 +++++----- .../Engine/Twod/TwodClass.cs | 21 ++--- src/Ryujinx.Graphics.Gpu/GpuChannel.cs | 6 +- src/Ryujinx.Graphics.Gpu/GpuContext.cs | 18 ++--- .../Image/AutoDeleteCache.cs | 12 +-- src/Ryujinx.Graphics.Gpu/Image/FormatTable.cs | 2 +- src/Ryujinx.Graphics.Gpu/Image/Texture.cs | 10 +-- .../Image/TextureCache.cs | 10 +-- .../Image/TextureGroup.cs | 44 +++++------ src/Ryujinx.Graphics.Gpu/Image/TexturePool.cs | 6 +- src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs | 8 +- .../Memory/BufferBackingState.cs | 4 +- .../Memory/BufferCache.cs | 4 +- .../Memory/BufferManager.cs | 38 ++++----- .../Memory/BufferModifiedRangeList.cs | 10 +-- .../Memory/BufferUpdater.cs | 2 +- .../Memory/GpuRegionHandle.cs | 12 +-- .../Memory/MemoryManager.cs | 2 +- .../Memory/MultiRangeBuffer.cs | 4 +- .../Memory/PhysicalMemory.cs | 18 ++--- .../Memory/SupportBufferUpdater.cs | 2 +- .../Shader/CachedShaderBindings.cs | 4 +- .../Shader/ComputeShaderCacheHashTable.cs | 6 +- .../Shader/DiskCache/DiskCacheGuestStorage.cs | 14 ++-- .../Shader/DiskCache/DiskCacheHostStorage.cs | 44 +++++------ .../DiskCache/ParallelDiskCacheLoader.cs | 4 +- .../Shader/GpuAccessor.cs | 3 +- .../Shader/ShaderCache.cs | 22 +++--- .../Shader/ShaderCacheHashTable.cs | 8 +- .../Shader/ShaderInfoBuilder.cs | 4 +- .../Shader/ShaderSpecializationList.cs | 4 +- .../Shader/ShaderSpecializationState.cs | 34 ++++---- .../Synchronization/SynchronizationManager.cs | 2 +- src/Ryujinx.Graphics.Gpu/Window.cs | 3 +- src/Ryujinx.Graphics.Host1x/Devices.cs | 2 +- src/Ryujinx.Graphics.Host1x/Host1xDevice.cs | 2 +- 55 files changed, 350 insertions(+), 339 deletions(-) diff --git a/src/Ryujinx.Graphics.Device/DeviceState.cs b/src/Ryujinx.Graphics.Device/DeviceState.cs index 0dd4f5904..11d8e3ac2 100644 --- a/src/Ryujinx.Graphics.Device/DeviceState.cs +++ b/src/Ryujinx.Graphics.Device/DeviceState.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -32,15 +33,15 @@ namespace Ryujinx.Graphics.Device _debugLogCallback = debugLogCallback; } - var fields = typeof(TState).GetFields(); + FieldInfo[] fields = typeof(TState).GetFields(); int offset = 0; for (int fieldIndex = 0; fieldIndex < fields.Length; fieldIndex++) { - var field = fields[fieldIndex]; + FieldInfo field = fields[fieldIndex]; - var currentFieldOffset = (int)Marshal.OffsetOf(field.Name); - var nextFieldOffset = fieldIndex + 1 == fields.Length ? Unsafe.SizeOf() : (int)Marshal.OffsetOf(fields[fieldIndex + 1].Name); + int currentFieldOffset = (int)Marshal.OffsetOf(field.Name); + int nextFieldOffset = fieldIndex + 1 == fields.Length ? Unsafe.SizeOf() : (int)Marshal.OffsetOf(fields[fieldIndex + 1].Name); int sizeOfField = nextFieldOffset - currentFieldOffset; @@ -48,7 +49,7 @@ namespace Ryujinx.Graphics.Device { int index = (offset + i) / RegisterSize; - if (callbacks != null && callbacks.TryGetValue(field.Name, out var cb)) + if (callbacks != null && callbacks.TryGetValue(field.Name, out RwCallback cb)) { if (cb.Read != null) { @@ -81,7 +82,7 @@ namespace Ryujinx.Graphics.Device { uint alignedOffset = index * RegisterSize; - var readCallback = Unsafe.Add(ref MemoryMarshal.GetArrayDataReference(_readCallbacks), (nint)index); + Func readCallback = Unsafe.Add(ref MemoryMarshal.GetArrayDataReference(_readCallbacks), (nint)index); if (readCallback != null) { return readCallback(); @@ -119,7 +120,7 @@ namespace Ryujinx.Graphics.Device uint alignedOffset = index * RegisterSize; DebugWrite(alignedOffset, data); - ref var storage = ref GetRefIntAlignedUncheck(index); + ref int storage = ref GetRefIntAlignedUncheck(index); changed = storage != data; storage = data; diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Compute/ComputeClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/Compute/ComputeClass.cs index cd8144724..0784fdca8 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Compute/ComputeClass.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Compute/ComputeClass.cs @@ -2,6 +2,7 @@ using Ryujinx.Graphics.Device; using Ryujinx.Graphics.Gpu.Engine.InlineToMemory; using Ryujinx.Graphics.Gpu.Engine.Threed; using Ryujinx.Graphics.Gpu.Engine.Types; +using Ryujinx.Graphics.Gpu.Memory; using Ryujinx.Graphics.Gpu.Shader; using Ryujinx.Graphics.Shader; using System; @@ -90,7 +91,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Compute /// Method call argument private void SendSignalingPcasB(int argument) { - var memoryManager = _channel.MemoryManager; + MemoryManager memoryManager = _channel.MemoryManager; // Since we're going to change the state, make sure any pending instanced draws are done. _3dEngine.PerformDeferredDraws(); @@ -100,7 +101,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Compute uint qmdAddress = _state.State.SendPcasA; - var qmd = _channel.MemoryManager.Read((ulong)qmdAddress << 8); + ComputeQmd qmd = _channel.MemoryManager.Read((ulong)qmdAddress << 8); ulong shaderGpuVa = ((ulong)_state.State.SetProgramRegionAAddressUpper << 32) | _state.State.SetProgramRegionB; diff --git a/src/Ryujinx.Graphics.Gpu/Engine/DeviceStateWithShadow.cs b/src/Ryujinx.Graphics.Gpu/Engine/DeviceStateWithShadow.cs index a2e5b1164..ccfba79a4 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/DeviceStateWithShadow.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/DeviceStateWithShadow.cs @@ -80,7 +80,7 @@ namespace Ryujinx.Graphics.Gpu.Engine [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteWithRedundancyCheck(int offset, int value, out bool changed) { - var shadowRamControl = _state.State.SetMmeShadowRamControlMode; + SetMmeShadowRamControlMode shadowRamControl = _state.State.SetMmeShadowRamControlMode; if (shadowRamControl == SetMmeShadowRamControlMode.MethodPassthrough || offset < 0x200) { _state.WriteWithRedundancyCheck(offset, value, out changed); diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs index cdeae0040..4ee15dfef 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs @@ -190,7 +190,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma /// The LaunchDma call argument private void DmaCopy(int argument) { - var memoryManager = _channel.MemoryManager; + MemoryManager memoryManager = _channel.MemoryManager; CopyFlags copyFlags = (CopyFlags)argument; @@ -225,8 +225,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma int srcBpp = remap ? srcComponents * componentSize : 1; int dstBpp = remap ? dstComponents * componentSize : 1; - var dst = Unsafe.As(ref _state.State.SetDstBlockSize); - var src = Unsafe.As(ref _state.State.SetSrcBlockSize); + DmaTexture dst = Unsafe.As(ref _state.State.SetDstBlockSize); + DmaTexture src = Unsafe.As(ref _state.State.SetSrcBlockSize); int srcRegionX = 0, srcRegionY = 0, dstRegionX = 0, dstRegionY = 0; @@ -245,7 +245,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma int srcStride = (int)_state.State.PitchIn; int dstStride = (int)_state.State.PitchOut; - var srcCalculator = new OffsetCalculator( + OffsetCalculator srcCalculator = new OffsetCalculator( src.Width, src.Height, srcStride, @@ -254,7 +254,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma src.MemoryLayout.UnpackGobBlocksInZ(), srcBpp); - var dstCalculator = new OffsetCalculator( + OffsetCalculator dstCalculator = new OffsetCalculator( dst.Width, dst.Height, dstStride, @@ -293,7 +293,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma if (completeSource && completeDest && !srcLinear && isIdentityRemap) { - var source = memoryManager.Physical.TextureCache.FindTexture( + Image.Texture source = memoryManager.Physical.TextureCache.FindTexture( memoryManager, srcGpuVa, srcBpp, @@ -309,7 +309,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma { source.SynchronizeMemory(); - var target = memoryManager.Physical.TextureCache.FindOrCreateTexture( + Image.Texture target = memoryManager.Physical.TextureCache.FindOrCreateTexture( memoryManager, source.Info.FormatInfo, dstGpuVa, @@ -339,7 +339,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma if (completeSource && completeDest && !(dstLinear && !srcLinear) && isIdentityRemap) { - var target = memoryManager.Physical.TextureCache.FindTexture( + Image.Texture target = memoryManager.Physical.TextureCache.FindTexture( memoryManager, dstGpuVa, dstBpp, diff --git a/src/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs b/src/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs index 984a9cff8..c0f8ccf76 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs @@ -159,7 +159,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo int availableCount = commandBuffer.Length - offset; int consumeCount = Math.Min(_state.MethodCount, availableCount); - var data = commandBuffer.Slice(offset, consumeCount); + ReadOnlySpan data = commandBuffer.Slice(offset, consumeCount); if (_state.SubChannel == 0) { diff --git a/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs index 78099f74a..aad97ad81 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs @@ -1,6 +1,7 @@ using Ryujinx.Common; using Ryujinx.Common.Memory; using Ryujinx.Graphics.Device; +using Ryujinx.Graphics.Gpu.Memory; using Ryujinx.Graphics.Texture; using System; using System.Collections.Generic; @@ -168,9 +169,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.InlineToMemory /// private void FinishTransfer() { - var memoryManager = _channel.MemoryManager; + MemoryManager memoryManager = _channel.MemoryManager; - var data = MemoryMarshal.Cast(_buffer)[.._size]; + Span data = MemoryMarshal.Cast(_buffer)[.._size]; if (_isLinear && _lineCount == 1) { @@ -184,7 +185,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.InlineToMemory // Right now the copy code at the bottom assumes that it is used on both which might be incorrect. if (!_isLinear) { - var target = memoryManager.Physical.TextureCache.FindTexture( + Image.Texture target = memoryManager.Physical.TextureCache.FindTexture( memoryManager, _dstGpuVa, 1, @@ -199,7 +200,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.InlineToMemory if (target != null) { target.SynchronizeMemory(); - var dataCopy = MemoryOwner.RentCopy(data); + MemoryOwner dataCopy = MemoryOwner.RentCopy(data); target.SetData(dataCopy, 0, 0, new GAL.Rectangle(_dstX, _dstY, _lineLengthIn / target.Info.FormatInfo.BytesPerPixel, _lineCount)); target.SignalModified(); @@ -207,7 +208,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.InlineToMemory } } - var dstCalculator = new OffsetCalculator( + OffsetCalculator dstCalculator = new OffsetCalculator( _dstWidth, _dstHeight, _dstStride, diff --git a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLE.cs b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLE.cs index 475d1ee4e..f62a4c01a 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLE.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLE.cs @@ -285,12 +285,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// First argument of the call private void DrawArraysInstanced(IDeviceState state, int arg0) { - var topology = (PrimitiveTopology)arg0; + PrimitiveTopology topology = (PrimitiveTopology)arg0; - var count = FetchParam(); - var instanceCount = FetchParam(); - var firstVertex = FetchParam(); - var firstInstance = FetchParam(); + FifoWord count = FetchParam(); + FifoWord instanceCount = FetchParam(); + FifoWord firstVertex = FetchParam(); + FifoWord firstInstance = FetchParam(); if (ShouldSkipDraw(state, instanceCount.Word)) { @@ -314,13 +314,13 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// First argument of the call private void DrawElements(IDeviceState state, int arg0) { - var topology = (PrimitiveTopology)arg0; + PrimitiveTopology topology = (PrimitiveTopology)arg0; - var indexAddressHigh = FetchParam(); - var indexAddressLow = FetchParam(); - var indexType = FetchParam(); - var firstIndex = 0; - var indexCount = FetchParam(); + FifoWord indexAddressHigh = FetchParam(); + FifoWord indexAddressLow = FetchParam(); + FifoWord indexType = FetchParam(); + int firstIndex = 0; + FifoWord indexCount = FetchParam(); _processor.ThreedClass.UpdateIndexBuffer( (uint)indexAddressHigh.Word, @@ -344,13 +344,13 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// First argument of the call private void DrawElementsInstanced(IDeviceState state, int arg0) { - var topology = (PrimitiveTopology)arg0; + PrimitiveTopology topology = (PrimitiveTopology)arg0; - var count = FetchParam(); - var instanceCount = FetchParam(); - var firstIndex = FetchParam(); - var firstVertex = FetchParam(); - var firstInstance = FetchParam(); + FifoWord count = FetchParam(); + FifoWord instanceCount = FetchParam(); + FifoWord firstIndex = FetchParam(); + FifoWord firstVertex = FetchParam(); + FifoWord firstInstance = FetchParam(); if (ShouldSkipDraw(state, instanceCount.Word)) { @@ -374,17 +374,17 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// First argument of the call private void DrawElementsIndirect(IDeviceState state, int arg0) { - var topology = (PrimitiveTopology)arg0; + PrimitiveTopology topology = (PrimitiveTopology)arg0; - var count = FetchParam(); - var instanceCount = FetchParam(); - var firstIndex = FetchParam(); - var firstVertex = FetchParam(); - var firstInstance = FetchParam(); + FifoWord count = FetchParam(); + FifoWord instanceCount = FetchParam(); + FifoWord firstIndex = FetchParam(); + FifoWord firstVertex = FetchParam(); + FifoWord firstInstance = FetchParam(); ulong indirectBufferGpuVa = count.GpuVa; - var bufferCache = _processor.MemoryManager.Physical.BufferCache; + BufferCache bufferCache = _processor.MemoryManager.Physical.BufferCache; bool useBuffer = bufferCache.CheckModified(_processor.MemoryManager, indirectBufferGpuVa, IndirectIndexedDataEntrySize, out ulong indirectBufferAddress); @@ -432,7 +432,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME int startDraw = arg0; int endDraw = arg1; - var topology = (PrimitiveTopology)arg2; + PrimitiveTopology topology = (PrimitiveTopology)arg2; int paddingWords = arg3; int stride = paddingWords * 4 + 0x14; @@ -468,12 +468,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME for (int i = 0; i < maxDrawCount; i++) { - var count = FetchParam(); + FifoWord count = FetchParam(); #pragma warning disable IDE0059 // Remove unnecessary value assignment - var instanceCount = FetchParam(); - var firstIndex = FetchParam(); - var firstVertex = FetchParam(); - var firstInstance = FetchParam(); + FifoWord instanceCount = FetchParam(); + FifoWord firstIndex = FetchParam(); + FifoWord firstVertex = FetchParam(); + FifoWord firstInstance = FetchParam(); #pragma warning restore IDE0059 if (i == 0) @@ -492,7 +492,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME } } - var bufferCache = _processor.MemoryManager.Physical.BufferCache; + BufferCache bufferCache = _processor.MemoryManager.Physical.BufferCache; ulong indirectBufferSize = (ulong)maxDrawCount * (ulong)stride; @@ -526,7 +526,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// The call argument, or a 0 value with null address if the FIFO is empty private FifoWord FetchParam() { - if (!Fifo.TryDequeue(out var value)) + if (!Fifo.TryDequeue(out FifoWord value)) { Logger.Warning?.Print(LogClass.Gpu, "Macro attempted to fetch an inexistent argument."); diff --git a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLETable.cs b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLETable.cs index e3080228e..1df68a50f 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLETable.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLETable.cs @@ -90,13 +90,13 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// True if there is a implementation available and supported, false otherwise public static bool TryGetMacroHLEFunction(ReadOnlySpan code, Capabilities caps, out MacroHLEFunctionName name) { - var mc = MemoryMarshal.Cast(code); + ReadOnlySpan mc = MemoryMarshal.Cast(code); for (int i = 0; i < _table.Length; i++) { - ref var entry = ref _table[i]; + ref TableEntry entry = ref _table[i]; - var hash = Hash128.ComputeHash(mc[..entry.Length]); + Hash128 hash = Hash128.ComputeHash(mc[..entry.Length]); if (hash == entry.Hash) { if (IsMacroHLESupported(caps, entry.Name)) diff --git a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroInterpreter.cs b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroInterpreter.cs index dd60688d6..707265184 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroInterpreter.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroInterpreter.cs @@ -369,7 +369,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// The call argument, or 0 if the FIFO is empty private int FetchParam() { - if (!Fifo.TryDequeue(out var value)) + if (!Fifo.TryDequeue(out FifoWord value)) { Logger.Warning?.Print(LogClass.Gpu, "Macro attempted to fetch an inexistent argument."); diff --git a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroJitContext.cs b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroJitContext.cs index 01bff8e89..174af9739 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroJitContext.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroJitContext.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// The call argument, or 0 if the FIFO is empty public int FetchParam() { - if (!Fifo.TryDequeue(out var value)) + if (!Fifo.TryDequeue(out FifoWord value)) { Logger.Warning?.Print(LogClass.Gpu, "Macro attempted to fetch an inexistent argument."); diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs index 13e5d2a86..020db62be 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs @@ -221,7 +221,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.Blender sb.AppendLine($"private static Dictionary _entries = new()"); sb.AppendLine("{"); - foreach (var entry in Table) + foreach (AdvancedBlendUcode entry in Table) { Hash128 hash = Hash128.ComputeHash(MemoryMarshal.Cast(entry.Code)); diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendManager.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendManager.cs index ce3d2c236..18428eda9 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendManager.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendManager.cs @@ -66,7 +66,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.Blender descriptor = default; - if (!AdvancedBlendPreGenTable.Entries.TryGetValue(hash, out var entry)) + if (!AdvancedBlendPreGenTable.Entries.TryGetValue(hash, out AdvancedBlendEntry entry)) { return false; } diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeContext.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeContext.cs index 34f2cfcad..15f1a4a33 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeContext.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeContext.cs @@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw { if (disposing) { - foreach (var texture in _cache.Values) + foreach (ITexture texture in _cache.Values) { texture.Release(); } @@ -603,7 +603,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw DestroyIfNotNull(ref _geometryIndexDataBuffer.Handle); DestroyIfNotNull(ref _sequentialIndexBuffer); - foreach (var indexBuffer in _topologyRemapBuffers.Values) + foreach (IndexBuffer indexBuffer in _topologyRemapBuffers.Values) { _context.Renderer.DeleteBuffer(indexBuffer.Handle); } diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs index 2de324392..8a667b408 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs @@ -127,7 +127,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw for (int index = 0; index < Constants.TotalVertexAttribs; index++) { - var vertexAttrib = _state.State.VertexAttribState[index]; + VertexAttribState vertexAttrib = _state.State.VertexAttribState[index]; if (!FormatTable.TryGetSingleComponentAttribFormat(vertexAttrib.UnpackFormat(), out Format format, out int componentsCount)) { @@ -153,7 +153,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw int bufferIndex = vertexAttrib.UnpackBufferIndex(); GpuVa endAddress = _state.State.VertexBufferEndAddress[bufferIndex]; - var vertexBuffer = _state.State.VertexBufferState[bufferIndex]; + VertexBufferState vertexBuffer = _state.State.VertexBufferState[bufferIndex]; bool instanced = _state.State.VertexBufferInstanced[bufferIndex]; ulong address = vertexBuffer.Address.Pack(); @@ -351,7 +351,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw /// Size of the buffer in bytes private readonly void SetBufferTexture(ResourceReservations reservations, int index, Format format, ulong address, ulong size) { - var memoryManager = _channel.MemoryManager; + MemoryManager memoryManager = _channel.MemoryManager; BufferRange range = memoryManager.Physical.BufferCache.GetBufferRange(memoryManager.GetPhysicalRegions(address, size), BufferStage.VertexBuffer); @@ -392,7 +392,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw indexOffset <<= shift; size <<= shift; - var memoryManager = _channel.MemoryManager; + MemoryManager memoryManager = _channel.MemoryManager; ulong misalign = address & ((ulong)_context.Capabilities.TextureBufferOffsetAlignment - 1); BufferRange range = memoryManager.Physical.BufferCache.GetBufferRange( diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ConstantBufferUpdater.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ConstantBufferUpdater.cs index 2095fcd7a..6fc49fc8d 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ConstantBufferUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ConstantBufferUpdater.cs @@ -1,3 +1,4 @@ +using Ryujinx.Graphics.Gpu.Memory; using System; using System.Runtime.InteropServices; @@ -92,7 +93,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed if (enable) { - var uniformBuffer = _state.State.UniformBufferState; + UniformBufferState uniformBuffer = _state.State.UniformBufferState; ulong address = uniformBuffer.Address.Pack(); @@ -111,7 +112,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed { if (_ubFollowUpAddress != 0) { - var memoryManager = _channel.MemoryManager; + MemoryManager memoryManager = _channel.MemoryManager; Span data = MemoryMarshal.Cast(_ubData.AsSpan(0, (int)(_ubByteCount / 4))); @@ -131,7 +132,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// New uniform buffer data word public void Update(int argument) { - var uniformBuffer = _state.State.UniformBufferState; + UniformBufferState uniformBuffer = _state.State.UniformBufferState; ulong address = uniformBuffer.Address.Pack() + (uint)uniformBuffer.Offset; @@ -157,7 +158,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// Data to be written to the uniform buffer public void Update(ReadOnlySpan data) { - var uniformBuffer = _state.State.UniformBufferState; + UniformBufferState uniformBuffer = _state.State.UniformBufferState; ulong address = uniformBuffer.Address.Pack() + (uint)uniformBuffer.Offset; diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/DrawManager.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/DrawManager.cs index 56ef64c6e..2537b79b7 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/DrawManager.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/DrawManager.cs @@ -471,7 +471,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed int textureId = _state.State.DrawTextureTextureId; int samplerId = _state.State.DrawTextureSamplerId; - (var texture, var sampler) = _channel.TextureManager.GetGraphicsTextureAndSampler(textureId, samplerId); + (Image.Texture texture, Sampler sampler) = _channel.TextureManager.GetGraphicsTextureAndSampler(textureId, samplerId); srcX0 *= texture.ScaleFactor; srcY0 *= texture.ScaleFactor; @@ -684,8 +684,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed if (hasCount) { - var indirectBuffer = memory.BufferCache.GetBufferRange(indirectBufferRange, BufferStage.Indirect); - var parameterBuffer = memory.BufferCache.GetBufferRange(parameterBufferRange, BufferStage.Indirect); + BufferRange indirectBuffer = memory.BufferCache.GetBufferRange(indirectBufferRange, BufferStage.Indirect); + BufferRange parameterBuffer = memory.BufferCache.GetBufferRange(parameterBufferRange, BufferStage.Indirect); if (indexed) { @@ -698,7 +698,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed } else { - var indirectBuffer = memory.BufferCache.GetBufferRange(indirectBufferRange, BufferStage.Indirect); + BufferRange indirectBuffer = memory.BufferCache.GetBufferRange(indirectBufferRange, BufferStage.Indirect); if (indexed) { @@ -820,7 +820,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed // If there is a mismatch on the host clip region and the one explicitly defined by the guest // on the screen scissor state, then we need to force only one texture to be bound to avoid // host clipping. - var screenScissorState = _state.State.ScreenScissorState; + ScreenScissorState screenScissorState = _state.State.ScreenScissorState; bool clearAffectedByStencilMask = (_state.State.ClearFlags & 1) != 0; bool clearAffectedByScissor = (_state.State.ClearFlags & 0x100) != 0; @@ -833,7 +833,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed if (fullClear && clearAffectedByScissor && _state.State.ScissorState[0].Enable) { - ref var scissorState = ref _state.State.ScissorState[0]; + ref ScissorState scissorState = ref _state.State.ScissorState[0]; fullClear = scissorState.X1 == screenScissorState.X && scissorState.Y1 == screenScissorState.Y && @@ -894,7 +894,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed if (clearAffectedByScissor && _state.State.ScissorState[0].Enable) { - ref var scissorState = ref _state.State.ScissorState[0]; + ref ScissorState scissorState = ref _state.State.ScissorState[0]; scissorX = Math.Max(scissorX, scissorState.X1); scissorY = Math.Max(scissorY, scissorState.Y1); @@ -923,7 +923,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed if (componentMask != 0) { - var clearColor = _state.State.ClearColors; + ClearColors clearColor = _state.State.ClearColors; ColorF color = new(clearColor.Red, clearColor.Green, clearColor.Blue, clearColor.Alpha); diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs index dbd4efc8f..4eea80687 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/SpecializationStateUpdater.cs @@ -288,7 +288,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed { int rtIndex = rtControl.UnpackPermutationIndex(index); - var colorState = state[rtIndex]; + RtColorState colorState = state[rtIndex]; if (index < count && StateUpdater.IsRtEnabled(colorState)) { diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdateTracker.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdateTracker.cs index ea9fc9e31..4f9e57f76 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdateTracker.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdateTracker.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Numerics; +using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -58,13 +59,13 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed _registerToGroupMapping = new byte[BlockSize]; _callbacks = new Action[entries.Length]; - var fieldToDelegate = new Dictionary(); + Dictionary fieldToDelegate = new Dictionary(); for (int entryIndex = 0; entryIndex < entries.Length; entryIndex++) { - var entry = entries[entryIndex]; + StateUpdateCallbackEntry entry = entries[entryIndex]; - foreach (var fieldName in entry.FieldNames) + foreach (string fieldName in entry.FieldNames) { fieldToDelegate.Add(fieldName, entryIndex); } @@ -72,15 +73,15 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed _callbacks[entryIndex] = entry.Callback; } - var fields = typeof(TState).GetFields(); + FieldInfo[] fields = typeof(TState).GetFields(); int offset = 0; for (int fieldIndex = 0; fieldIndex < fields.Length; fieldIndex++) { - var field = fields[fieldIndex]; + FieldInfo field = fields[fieldIndex]; - var currentFieldOffset = (int)Marshal.OffsetOf(field.Name); - var nextFieldOffset = fieldIndex + 1 == fields.Length ? Unsafe.SizeOf() : (int)Marshal.OffsetOf(fields[fieldIndex + 1].Name); + int currentFieldOffset = (int)Marshal.OffsetOf(field.Name); + int nextFieldOffset = fieldIndex + 1 == fields.Length ? Unsafe.SizeOf() : (int)Marshal.OffsetOf(fields[fieldIndex + 1].Name); int sizeOfField = nextFieldOffset - currentFieldOffset; diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs index 1dc77b52d..d8e53124b 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs @@ -3,6 +3,7 @@ using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Gpu.Engine.Threed.Blender; using Ryujinx.Graphics.Gpu.Engine.Types; using Ryujinx.Graphics.Gpu.Image; +using Ryujinx.Graphics.Gpu.Memory; using Ryujinx.Graphics.Gpu.Shader; using Ryujinx.Graphics.Shader; using Ryujinx.Graphics.Texture; @@ -463,8 +464,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// If this is not -1, it indicates that only the given indexed target will be used. public void UpdateRenderTargetState(RenderTargetUpdateFlags updateFlags, int singleUse = -1) { - var memoryManager = _channel.MemoryManager; - var rtControl = _state.State.RtControl; + MemoryManager memoryManager = _channel.MemoryManager; + RtControl rtControl = _state.State.RtControl; bool useControl = updateFlags.HasFlag(RenderTargetUpdateFlags.UseControl); bool layered = updateFlags.HasFlag(RenderTargetUpdateFlags.Layered); @@ -473,12 +474,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed int count = useControl ? rtControl.UnpackCount() : Constants.TotalRenderTargets; - var msaaMode = _state.State.RtMsaaMode; + TextureMsaaMode msaaMode = _state.State.RtMsaaMode; int samplesInX = msaaMode.SamplesInX(); int samplesInY = msaaMode.SamplesInY(); - var scissor = _state.State.ScreenScissorState; + ScreenScissorState scissor = _state.State.ScreenScissorState; Size sizeHint = new((scissor.X + scissor.Width) * samplesInX, (scissor.Y + scissor.Height) * samplesInY, 1); int clipRegionWidth = int.MaxValue; @@ -491,7 +492,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed { int rtIndex = useControl ? rtControl.UnpackPermutationIndex(index) : index; - var colorState = _state.State.RtColorState[rtIndex]; + RtColorState colorState = _state.State.RtColorState[rtIndex]; if (index >= count || !IsRtEnabled(colorState) || (singleColor && index != singleUse)) { @@ -541,8 +542,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed if (dsEnable && updateFlags.HasFlag(RenderTargetUpdateFlags.UpdateDepthStencil)) { - var dsState = _state.State.RtDepthStencilState; - var dsSize = _state.State.RtDepthStencilSize; + RtDepthStencilState dsState = _state.State.RtDepthStencilState; + Size3D dsSize = _state.State.RtDepthStencilSize; depthStencil = memoryManager.Physical.TextureCache.FindOrCreateTexture( memoryManager, @@ -643,7 +644,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed if (_state.State.YControl.HasFlag(YControl.NegateY)) { - ref var screenScissor = ref _state.State.ScreenScissorState; + ref ScreenScissorState screenScissor = ref _state.State.ScreenScissorState; y = screenScissor.Height - height - y; if (y < 0) @@ -721,8 +722,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// private void UpdateViewportTransform() { - var yControl = _state.State.YControl; - var face = _state.State.FaceState; + YControl yControl = _state.State.YControl; + FaceState face = _state.State.FaceState; bool disableTransform = _state.State.ViewportTransformEnable == 0; bool yNegate = yControl.HasFlag(YControl.NegateY); @@ -736,17 +737,17 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed { if (disableTransform) { - ref var scissor = ref _state.State.ScreenScissorState; + ref ScreenScissorState scissor = ref _state.State.ScreenScissorState; float rScale = _channel.TextureManager.RenderTargetScale; - var scissorRect = new Rectangle(0, 0, (scissor.X + scissor.Width) * rScale, (scissor.Y + scissor.Height) * rScale); + Rectangle scissorRect = new Rectangle(0, 0, (scissor.X + scissor.Width) * rScale, (scissor.Y + scissor.Height) * rScale); viewports[index] = new Viewport(scissorRect, ViewportSwizzle.PositiveX, ViewportSwizzle.PositiveY, ViewportSwizzle.PositiveZ, ViewportSwizzle.PositiveW, 0, 1); continue; } - ref var transform = ref _state.State.ViewportTransform[index]; - ref var extents = ref _state.State.ViewportExtents[index]; + ref ViewportTransform transform = ref _state.State.ViewportTransform[index]; + ref ViewportExtents extents = ref _state.State.ViewportExtents[index]; float scaleX = MathF.Abs(transform.ScaleX); float scaleY = transform.ScaleY; @@ -841,7 +842,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// private void UpdateDepthBiasState() { - var depthBias = _state.State.DepthBiasState; + DepthBiasState depthBias = _state.State.DepthBiasState; float factor = _state.State.DepthBiasFactor; float units = _state.State.DepthBiasUnits; @@ -862,9 +863,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// private void UpdateStencilTestState() { - var backMasks = _state.State.StencilBackMasks; - var test = _state.State.StencilTestState; - var backTest = _state.State.StencilBackTestState; + StencilBackMasks backMasks = _state.State.StencilBackMasks; + StencilTestState test = _state.State.StencilTestState; + StencilBackTestState backTest = _state.State.StencilBackTestState; CompareOp backFunc; StencilOp backSFail; @@ -934,10 +935,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// private void UpdateSamplerPoolState() { - var texturePool = _state.State.TexturePoolState; - var samplerPool = _state.State.SamplerPoolState; + PoolState texturePool = _state.State.TexturePoolState; + PoolState samplerPool = _state.State.SamplerPoolState; - var samplerIndex = _state.State.SamplerIndex; + SamplerIndex samplerIndex = _state.State.SamplerIndex; int maximumId = samplerIndex == SamplerIndex.ViaHeaderIndex ? texturePool.MaximumId @@ -951,7 +952,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// private void UpdateTexturePoolState() { - var texturePool = _state.State.TexturePoolState; + PoolState texturePool = _state.State.TexturePoolState; _channel.TextureManager.SetGraphicsTexturePool(texturePool.Address.Pack(), texturePool.MaximumId); _channel.TextureManager.SetGraphicsTextureBufferIndex((int)_state.State.TextureBufferIndex); @@ -971,7 +972,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed for (int index = 0; index < Constants.TotalVertexAttribs; index++) { - var vertexAttrib = _state.State.VertexAttribState[index]; + VertexAttribState vertexAttrib = _state.State.VertexAttribState[index]; int bufferIndex = vertexAttrib.UnpackBufferIndex(); @@ -1065,7 +1066,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// private void UpdateIndexBufferState() { - var indexBuffer = _state.State.IndexBufferState; + IndexBufferState indexBuffer = _state.State.IndexBufferState; if (_drawState.IndexCount == 0) { @@ -1109,7 +1110,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed for (int index = 0; index < Constants.TotalVertexBuffers; index++) { - var vertexBuffer = _state.State.VertexBufferState[index]; + VertexBufferState vertexBuffer = _state.State.VertexBufferState[index]; if (!vertexBuffer.UnpackEnable()) { @@ -1193,8 +1194,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// private void UpdateFaceState() { - var yControl = _state.State.YControl; - var face = _state.State.FaceState; + YControl yControl = _state.State.YControl; + FaceState face = _state.State.FaceState; _pipeline.CullEnable = face.CullEnable; _pipeline.CullMode = face.CullFace; @@ -1233,7 +1234,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed for (int index = 0; index < Constants.TotalRenderTargets; index++) { - var colorMask = _state.State.RtColorMask[rtColorMaskShared ? 0 : index]; + RtColorMask colorMask = _state.State.RtColorMask[rtColorMaskShared ? 0 : index]; uint componentMask; @@ -1256,7 +1257,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed { if (_state.State.BlendUcodeEnable != BlendUcodeEnable.Disabled) { - if (_context.Capabilities.SupportsBlendEquationAdvanced && _blendManager.TryGetAdvancedBlend(out var blendDescriptor)) + if (_context.Capabilities.SupportsBlendEquationAdvanced && _blendManager.TryGetAdvancedBlend(out AdvancedBlendDescriptor blendDescriptor)) { // Try to HLE it using advanced blend on the host if we can. _context.Renderer.Pipeline.SetBlendState(blendDescriptor); @@ -1278,9 +1279,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed for (int index = 0; index < Constants.TotalRenderTargets; index++) { bool enable = _state.State.BlendEnable[index]; - var blend = _state.State.BlendState[index]; + BlendState blend = _state.State.BlendState[index]; - var descriptor = new BlendDescriptor( + BlendDescriptor descriptor = new BlendDescriptor( enable, blendConstant, blend.ColorOp, @@ -1306,9 +1307,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed else { bool enable = _state.State.BlendEnable[0]; - var blend = _state.State.BlendStateCommon; + BlendStateCommon blend = _state.State.BlendStateCommon; - var descriptor = new BlendDescriptor( + BlendDescriptor descriptor = new BlendDescriptor( enable, blendConstant, blend.ColorOp, @@ -1409,7 +1410,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// private void UpdateShaderState() { - var shaderCache = _channel.MemoryManager.Physical.ShaderCache; + ShaderCache shaderCache = _channel.MemoryManager.Physical.ShaderCache; _vtgWritesRtLayer = false; @@ -1420,7 +1421,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed for (int index = 0; index < 6; index++) { - var shader = _state.State.ShaderState[index]; + ShaderState shader = _state.State.ShaderState[index]; if (!shader.UnpackEnable() && index != 1) { continue; @@ -1525,7 +1526,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// private void UpdateSupportBufferViewportSize() { - ref var transform = ref _state.State.ViewportTransform[0]; + ref ViewportTransform transform = ref _state.State.ViewportTransform[0]; float scaleX = MathF.Abs(transform.ScaleX); float scaleY = transform.ScaleY; @@ -1564,8 +1565,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// Current depth mode private DepthMode GetDepthMode() { - ref var transform = ref _state.State.ViewportTransform[0]; - ref var extents = ref _state.State.ViewportExtents[0]; + ref ViewportTransform transform = ref _state.State.ViewportTransform[0]; + ref ViewportExtents extents = ref _state.State.ViewportExtents[0]; DepthMode depthMode; diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs index ab1d27a1c..618743018 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs @@ -82,8 +82,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed _i2mClass = new InlineToMemoryClass(context, channel, initializeState: false); - var spec = new SpecializationStateUpdater(context); - var drawState = new DrawState(); + SpecializationStateUpdater spec = new SpecializationStateUpdater(context); + DrawState drawState = new DrawState(); _drawManager = new DrawManager(context, channel, _state, drawState, spec); _blendManager = new AdvancedBlendManager(_state); @@ -253,8 +253,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed } else { - ref var lhsVec = ref Unsafe.As>(ref lhs); - ref var rhsVec = ref Unsafe.As>(ref rhs); + ref Vector128 lhsVec = ref Unsafe.As>(ref lhs); + ref Vector128 rhsVec = ref Unsafe.As>(ref rhs); return Vector128.EqualsAll(lhsVec, rhsVec) && Vector128.EqualsAll(Unsafe.Add(ref lhsVec, 1), Unsafe.Add(ref rhsVec, 1)); @@ -267,8 +267,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// Blend enable public void UpdateBlendEnable(ref Array8 enable) { - var shadow = ShadowMode; - ref var state = ref _state.State.BlendEnable; + SetMmeShadowRamControlMode shadow = ShadowMode; + ref Array8 state = ref _state.State.BlendEnable; if (shadow.IsReplay()) { @@ -294,8 +294,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// Color masks public void UpdateColorMasks(ref Array8 masks) { - var shadow = ShadowMode; - ref var state = ref _state.State.RtColorMask; + SetMmeShadowRamControlMode shadow = ShadowMode; + ref Array8 state = ref _state.State.RtColorMask; if (shadow.IsReplay()) { @@ -323,12 +323,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// Type of the binding public void UpdateIndexBuffer(uint addrHigh, uint addrLow, IndexType type) { - var shadow = ShadowMode; - ref var state = ref _state.State.IndexBufferState; + SetMmeShadowRamControlMode shadow = ShadowMode; + ref IndexBufferState state = ref _state.State.IndexBufferState; if (shadow.IsReplay()) { - ref var shadowState = ref _state.ShadowState.IndexBufferState; + ref IndexBufferState shadowState = ref _state.ShadowState.IndexBufferState; addrHigh = shadowState.Address.High; addrLow = shadowState.Address.Low; type = shadowState.Type; @@ -345,7 +345,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed if (shadow.IsTrack()) { - ref var shadowState = ref _state.ShadowState.IndexBufferState; + ref IndexBufferState shadowState = ref _state.ShadowState.IndexBufferState; shadowState.Address.High = addrHigh; shadowState.Address.Low = addrLow; shadowState.Type = type; @@ -360,12 +360,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// Low part of the address public void UpdateUniformBufferState(int size, uint addrHigh, uint addrLow) { - var shadow = ShadowMode; - ref var state = ref _state.State.UniformBufferState; + SetMmeShadowRamControlMode shadow = ShadowMode; + ref UniformBufferState state = ref _state.State.UniformBufferState; if (shadow.IsReplay()) { - ref var shadowState = ref _state.ShadowState.UniformBufferState; + ref UniformBufferState shadowState = ref _state.ShadowState.UniformBufferState; size = shadowState.Size; addrHigh = shadowState.Address.High; addrLow = shadowState.Address.Low; @@ -377,7 +377,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed if (shadow.IsTrack()) { - ref var shadowState = ref _state.ShadowState.UniformBufferState; + ref UniformBufferState shadowState = ref _state.ShadowState.UniformBufferState; shadowState.Size = size; shadowState.Address.High = addrHigh; shadowState.Address.Low = addrLow; @@ -391,8 +391,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// Offset to update with public void SetShaderOffset(int index, uint offset) { - var shadow = ShadowMode; - ref var shaderState = ref _state.State.ShaderState[index]; + SetMmeShadowRamControlMode shadow = ShadowMode; + ref ShaderState shaderState = ref _state.State.ShaderState[index]; if (shadow.IsReplay()) { @@ -418,8 +418,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed /// Uniform buffer state public void UpdateUniformBufferState(UniformBufferState ubState) { - var shadow = ShadowMode; - ref var state = ref _state.State.UniformBufferState; + SetMmeShadowRamControlMode shadow = ShadowMode; + ref UniformBufferState state = ref _state.State.UniformBufferState; if (shadow.IsReplay()) { diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Twod/TwodClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/Twod/TwodClass.cs index 0dd9481df..60a558d56 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Twod/TwodClass.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Twod/TwodClass.cs @@ -3,6 +3,7 @@ using Ryujinx.Graphics.Device; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Gpu.Engine.Types; using Ryujinx.Graphics.Gpu.Image; +using Ryujinx.Graphics.Gpu.Memory; using Ryujinx.Graphics.Texture; using Ryujinx.Memory; using System; @@ -123,7 +124,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod /// Bytes per pixel private void UnscaledFullCopy(TwodTexture src, TwodTexture dst, int w, int h, int bpp) { - var srcCalculator = new OffsetCalculator( + OffsetCalculator srcCalculator = new OffsetCalculator( w, h, src.Stride, @@ -134,7 +135,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod (int _, int srcSize) = srcCalculator.GetRectangleRange(0, 0, w, h); - var memoryManager = _channel.MemoryManager; + MemoryManager memoryManager = _channel.MemoryManager; ulong srcGpuVa = src.Address.Pack(); ulong dstGpuVa = dst.Address.Pack(); @@ -228,10 +229,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod /// Method call argument private void PixelsFromMemorySrcY0Int(int argument) { - var memoryManager = _channel.MemoryManager; + MemoryManager memoryManager = _channel.MemoryManager; - var dstCopyTexture = Unsafe.As(ref _state.State.SetDstFormat); - var srcCopyTexture = Unsafe.As(ref _state.State.SetSrcFormat); + TwodTexture dstCopyTexture = Unsafe.As(ref _state.State.SetDstFormat); + TwodTexture srcCopyTexture = Unsafe.As(ref _state.State.SetSrcFormat); long srcX = ((long)_state.State.SetPixelsFromMemorySrcX0Int << 32) | (long)(ulong)_state.State.SetPixelsFromMemorySrcX0Frac; long srcY = ((long)_state.State.PixelsFromMemorySrcY0Int << 32) | (long)(ulong)_state.State.SetPixelsFromMemorySrcY0Frac; @@ -268,10 +269,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod // The source and destination textures should at least be as big as the region being requested. // The hints will only resize within alignment constraints, so out of bound copies won't resize in most cases. - var srcHint = new Size(srcX2, srcY2, 1); - var dstHint = new Size(dstX2, dstY2, 1); + Size srcHint = new Size(srcX2, srcY2, 1); + Size dstHint = new Size(dstX2, dstY2, 1); - var srcCopyTextureFormat = srcCopyTexture.Format.Convert(); + FormatInfo srcCopyTextureFormat = srcCopyTexture.Format.Convert(); int srcWidthAligned = srcCopyTexture.Stride / srcCopyTextureFormat.BytesPerPixel; @@ -304,7 +305,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod // are the same, as we can't blit between different depth formats. bool srcDepthAlias = srcCopyTexture.Format == dstCopyTexture.Format; - var srcTexture = memoryManager.Physical.TextureCache.FindOrCreateTexture( + Image.Texture srcTexture = memoryManager.Physical.TextureCache.FindOrCreateTexture( memoryManager, srcCopyTexture, offset, @@ -341,7 +342,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod dstCopyTextureFormat = dstCopyTexture.Format.Convert(); } - var dstTexture = memoryManager.Physical.TextureCache.FindOrCreateTexture( + Image.Texture dstTexture = memoryManager.Physical.TextureCache.FindOrCreateTexture( memoryManager, dstCopyTexture, 0, diff --git a/src/Ryujinx.Graphics.Gpu/GpuChannel.cs b/src/Ryujinx.Graphics.Gpu/GpuChannel.cs index 33618a15b..047cbcca6 100644 --- a/src/Ryujinx.Graphics.Gpu/GpuChannel.cs +++ b/src/Ryujinx.Graphics.Gpu/GpuChannel.cs @@ -57,7 +57,7 @@ namespace Ryujinx.Graphics.Gpu /// The new memory manager to be bound public void BindMemory(MemoryManager memoryManager) { - var oldMemoryManager = Interlocked.Exchange(ref _memoryManager, memoryManager ?? throw new ArgumentNullException(nameof(memoryManager))); + MemoryManager oldMemoryManager = Interlocked.Exchange(ref _memoryManager, memoryManager ?? throw new ArgumentNullException(nameof(memoryManager))); memoryManager.Physical.IncrementReferenceCount(); @@ -85,7 +85,7 @@ namespace Ryujinx.Graphics.Gpu { TextureManager.ReloadPools(); - var memoryManager = Volatile.Read(ref _memoryManager); + MemoryManager memoryManager = Volatile.Read(ref _memoryManager); memoryManager?.Physical.BufferCache.QueuePrune(); } @@ -138,7 +138,7 @@ namespace Ryujinx.Graphics.Gpu _processor.Dispose(); TextureManager.Dispose(); - var oldMemoryManager = Interlocked.Exchange(ref _memoryManager, null); + MemoryManager oldMemoryManager = Interlocked.Exchange(ref _memoryManager, null); if (oldMemoryManager != null) { oldMemoryManager.Physical.BufferCache.NotifyBuffersModified -= BufferManager.Rebind; diff --git a/src/Ryujinx.Graphics.Gpu/GpuContext.cs b/src/Ryujinx.Graphics.Gpu/GpuContext.cs index f7e8f1bf8..fa877cf8a 100644 --- a/src/Ryujinx.Graphics.Gpu/GpuContext.cs +++ b/src/Ryujinx.Graphics.Gpu/GpuContext.cs @@ -167,7 +167,7 @@ namespace Ryujinx.Graphics.Gpu /// Thrown when is invalid public MemoryManager CreateMemoryManager(ulong pid, ulong cpuMemorySize) { - if (!PhysicalMemoryRegistry.TryGetValue(pid, out var physicalMemory)) + if (!PhysicalMemoryRegistry.TryGetValue(pid, out PhysicalMemory physicalMemory)) { throw new ArgumentException("The PID is invalid or the process was not registered", nameof(pid)); } @@ -183,7 +183,7 @@ namespace Ryujinx.Graphics.Gpu /// Thrown when is invalid public DeviceMemoryManager CreateDeviceMemoryManager(ulong pid) { - if (!PhysicalMemoryRegistry.TryGetValue(pid, out var physicalMemory)) + if (!PhysicalMemoryRegistry.TryGetValue(pid, out PhysicalMemory physicalMemory)) { throw new ArgumentException("The PID is invalid or the process was not registered", nameof(pid)); } @@ -199,7 +199,7 @@ namespace Ryujinx.Graphics.Gpu /// Thrown if was already registered public void RegisterProcess(ulong pid, Cpu.IVirtualMemoryManagerTracked cpuMemory) { - var physicalMemory = new PhysicalMemory(this, cpuMemory); + PhysicalMemory physicalMemory = new PhysicalMemory(this, cpuMemory); if (!PhysicalMemoryRegistry.TryAdd(pid, physicalMemory)) { throw new ArgumentException("The PID was already registered", nameof(pid)); @@ -214,7 +214,7 @@ namespace Ryujinx.Graphics.Gpu /// ID of the process public void UnregisterProcess(ulong pid) { - if (PhysicalMemoryRegistry.TryRemove(pid, out var physicalMemory)) + if (PhysicalMemoryRegistry.TryRemove(pid, out PhysicalMemory physicalMemory)) { physicalMemory.ShaderCache.ShaderCacheStateChanged -= ShaderCacheStateUpdate; physicalMemory.Dispose(); @@ -289,7 +289,7 @@ namespace Ryujinx.Graphics.Gpu { HostInitalized.WaitOne(); - foreach (var physicalMemory in PhysicalMemoryRegistry.Values) + foreach (PhysicalMemory physicalMemory in PhysicalMemoryRegistry.Values) { physicalMemory.ShaderCache.Initialize(cancellationToken); } @@ -329,7 +329,7 @@ namespace Ryujinx.Graphics.Gpu /// public void ProcessShaderCacheQueue() { - foreach (var physicalMemory in PhysicalMemoryRegistry.Values) + foreach (PhysicalMemory physicalMemory in PhysicalMemoryRegistry.Values) { physicalMemory.ShaderCache.ProcessShaderCacheQueue(); } @@ -404,12 +404,12 @@ namespace Ryujinx.Graphics.Gpu if (force || _pendingSync || (syncpoint && SyncpointActions.Count > 0)) { - foreach (var action in SyncActions) + foreach (ISyncActionHandler action in SyncActions) { action.SyncPreAction(syncpoint); } - foreach (var action in SyncpointActions) + foreach (ISyncActionHandler action in SyncpointActions) { action.SyncPreAction(syncpoint); } @@ -450,7 +450,7 @@ namespace Ryujinx.Graphics.Gpu _gpuReadyEvent.Dispose(); // Has to be disposed before processing deferred actions, as it will produce some. - foreach (var physicalMemory in PhysicalMemoryRegistry.Values) + foreach (PhysicalMemory physicalMemory in PhysicalMemoryRegistry.Values) { physicalMemory.Dispose(); } diff --git a/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs b/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs index 74967b190..b1a416e23 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs @@ -80,7 +80,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// The amount of physical CPU Memory Avaiable on the device. public void Initialize(GpuContext context, ulong cpuMemorySize) { - var cpuMemorySizeGiB = cpuMemorySize / GiB; + ulong cpuMemorySizeGiB = cpuMemorySize / GiB; if (cpuMemorySizeGiB < 6 || context.Capabilities.MaximumGpuMemory == 0) { @@ -100,7 +100,7 @@ namespace Ryujinx.Graphics.Gpu.Image MaxTextureSizeCapacity = TextureSizeCapacity12GiB; } - var cacheMemory = (ulong)(context.Capabilities.MaximumGpuMemory * MemoryScaleFactor); + ulong cacheMemory = (ulong)(context.Capabilities.MaximumGpuMemory * MemoryScaleFactor); _maxCacheMemoryUsage = Math.Clamp(cacheMemory, MinTextureSizeCapacity, MaxTextureSizeCapacity); @@ -232,7 +232,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// The texture if found, null otherwise public Texture FindShortCache(in TextureDescriptor descriptor) { - if (_shortCacheLookup.Count > 0 && _shortCacheLookup.TryGetValue(descriptor, out var entry)) + if (_shortCacheLookup.Count > 0 && _shortCacheLookup.TryGetValue(descriptor, out ShortTextureCacheEntry entry)) { if (entry.InvalidatedSequence == entry.Texture.InvalidatedSequence) { @@ -277,7 +277,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// Last used texture descriptor public void AddShortCache(Texture texture, ref TextureDescriptor descriptor) { - var entry = new ShortTextureCacheEntry(descriptor, texture); + ShortTextureCacheEntry entry = new ShortTextureCacheEntry(descriptor, texture); _shortCacheBuilder.Add(entry); _shortCacheLookup.Add(entry.Descriptor, entry); @@ -296,7 +296,7 @@ namespace Ryujinx.Graphics.Gpu.Image { if (texture.ShortCacheEntry != null) { - var entry = new ShortTextureCacheEntry(texture); + ShortTextureCacheEntry entry = new ShortTextureCacheEntry(texture); _shortCacheBuilder.Add(entry); @@ -314,7 +314,7 @@ namespace Ryujinx.Graphics.Gpu.Image { HashSet toRemove = _shortCache; - foreach (var entry in toRemove) + foreach (ShortTextureCacheEntry entry in toRemove) { entry.Texture.DecrementReferenceCount(); diff --git a/src/Ryujinx.Graphics.Gpu/Image/FormatTable.cs b/src/Ryujinx.Graphics.Gpu/Image/FormatTable.cs index da9e5c3a9..45e1971a8 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/FormatTable.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/FormatTable.cs @@ -704,7 +704,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// True if the format is valid, false otherwise public static bool TryGetSingleComponentAttribFormat(uint encoded, out Format format, out int componentsCount) { - bool result = _singleComponentAttribFormats.TryGetValue((VertexAttributeFormat)encoded, out var tuple); + bool result = _singleComponentAttribFormats.TryGetValue((VertexAttributeFormat)encoded, out (Format, int) tuple); format = tuple.Item1; componentsCount = tuple.Item2; diff --git a/src/Ryujinx.Graphics.Gpu/Image/Texture.cs b/src/Ryujinx.Graphics.Gpu/Image/Texture.cs index 7ee2e5cf0..51ce195f4 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/Texture.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/Texture.cs @@ -536,7 +536,7 @@ namespace Ryujinx.Graphics.Gpu.Image // All views must be recreated against the new storage. - foreach (var view in _views) + foreach (Texture view in _views) { Logger.Debug?.Print(LogClass.Gpu, $" Recreating view {Info.Width}x{Info.Height} {Info.FormatInfo.Format}."); view.ScaleFactor = scale; @@ -553,7 +553,7 @@ namespace Ryujinx.Graphics.Gpu.Image { ScaleMode = newScaleMode; - foreach (var view in _views) + foreach (Texture view in _views) { view.ScaleMode = newScaleMode; } @@ -899,7 +899,7 @@ namespace Ryujinx.Graphics.Gpu.Image { using (result) { - var converted = PixelConverter.ConvertR4G4ToR4G4B4A4(result.Span, width); + MemoryOwner converted = PixelConverter.ConvertR4G4ToR4G4B4A4(result.Span, width); if (_context.Capabilities.SupportsR4G4B4A4Format) { @@ -1650,7 +1650,7 @@ namespace Ryujinx.Graphics.Gpu.Image { lock (_poolOwners) { - foreach (var owner in _poolOwners) + foreach (TexturePoolOwner owner in _poolOwners) { owner.Pool.ForceRemove(this, owner.ID, deferred); } @@ -1680,7 +1680,7 @@ namespace Ryujinx.Graphics.Gpu.Image { ulong address = 0; - foreach (var owner in _poolOwners) + foreach (TexturePoolOwner owner in _poolOwners) { if (address == 0 || address == owner.GpuAddress) { diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs index ff7f11142..71de06e2c 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs @@ -128,7 +128,7 @@ namespace Ryujinx.Graphics.Gpu.Image // Any texture that has been unmapped at any point or is partially unmapped // should update their pool references after the remap completes. - foreach (var texture in _partiallyMappedTextures) + foreach (Texture texture in _partiallyMappedTextures) { texture.UpdatePoolMappings(); } @@ -253,7 +253,7 @@ namespace Ryujinx.Graphics.Gpu.Image for (int i = 0; i < overlapCount; i++) { - var other = _textureOverlaps[i]; + Texture other = _textureOverlaps[i]; if (texture != other && (texture.IsViewCompatible(other.Info, other.Range, true, other.LayerSize, _context.Capabilities, out _, out _) != TextureViewCompatibility.Incompatible || @@ -486,7 +486,7 @@ namespace Ryujinx.Graphics.Gpu.Image int layerSize = !isLinear ? colorState.LayerSize * 4 : 0; - var flags = TextureSearchFlags.WithUpscale; + TextureSearchFlags flags = TextureSearchFlags.WithUpscale; if (discard) { @@ -560,7 +560,7 @@ namespace Ryujinx.Graphics.Gpu.Image target, formatInfo); - var flags = TextureSearchFlags.WithUpscale; + TextureSearchFlags flags = TextureSearchFlags.WithUpscale; if (discard) { @@ -947,7 +947,7 @@ namespace Ryujinx.Graphics.Gpu.Image bool hasLayerViews = false; bool hasMipViews = false; - var incompatibleOverlaps = new List(); + List incompatibleOverlaps = new List(); for (int index = 0; index < overlapsCount; index++) { diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs index 2db5c6290..47a66747b 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs @@ -231,7 +231,7 @@ namespace Ryujinx.Graphics.Gpu.Image { bool flushed = false; - foreach (var overlap in _incompatibleOverlaps) + foreach (TextureIncompatibleOverlap overlap in _incompatibleOverlaps) { flushed |= overlap.Group.Storage.FlushModified(true); } @@ -403,7 +403,7 @@ namespace Ryujinx.Graphics.Gpu.Image { if (_loadNeeded[baseHandle + i]) { - var info = GetHandleInformation(baseHandle + i); + (int BaseLayer, int BaseLevel, int Levels, int Layers, int Index) info = GetHandleInformation(baseHandle + i); // Ensure the data for this handle is loaded in the span. if (spanEndIndex <= i - 1) @@ -426,7 +426,7 @@ namespace Ryujinx.Graphics.Gpu.Image } } - var endInfo = spanEndIndex == i ? info : GetHandleInformation(baseHandle + spanEndIndex); + (int BaseLayer, int BaseLevel, int Levels, int Layers, int Index) endInfo = spanEndIndex == i ? info : GetHandleInformation(baseHandle + spanEndIndex); spanBase = _allOffsets[info.Index]; int spanLast = _allOffsets[endInfo.Index + endInfo.Layers * endInfo.Levels - 1]; @@ -479,7 +479,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// True if flushes should be tracked, false otherwise private bool ShouldFlushTriggerTracking() { - foreach (var overlap in _incompatibleOverlaps) + foreach (TextureIncompatibleOverlap overlap in _incompatibleOverlaps) { if (overlap.Group._flushIncompatibleOverlaps) { @@ -637,7 +637,7 @@ namespace Ryujinx.Graphics.Gpu.Image bool canImport = Storage.Info.IsLinear && Storage.Info.Stride >= Storage.Info.Width * Storage.Info.FormatInfo.BytesPerPixel; - var hostPointer = canImport ? _physicalMemory.GetHostPointer(Storage.Range) : 0; + IntPtr hostPointer = canImport ? _physicalMemory.GetHostPointer(Storage.Range) : 0; if (hostPointer != 0 && _context.Renderer.PrepareHostMapping(hostPointer, Storage.Size)) { @@ -1019,7 +1019,7 @@ namespace Ryujinx.Graphics.Gpu.Image int endOffset = _allOffsets[viewEnd] + _sliceSizes[lastLevel]; int size = endOffset - offset; - var result = new List(); + List result = new List(); for (int i = 0; i < TextureRange.Count; i++) { @@ -1053,7 +1053,7 @@ namespace Ryujinx.Graphics.Gpu.Image offset = _allOffsets[viewStart]; ulong maxSize = Storage.Size - (ulong)offset; - var groupHandle = new TextureGroupHandle( + TextureGroupHandle groupHandle = new TextureGroupHandle( this, offset, Math.Min(maxSize, (ulong)size), @@ -1160,17 +1160,17 @@ namespace Ryujinx.Graphics.Gpu.Image /// The offset of the old handles in relation to the new ones private void InheritHandles(TextureGroupHandle[] oldHandles, TextureGroupHandle[] handles, int relativeOffset) { - foreach (var group in handles) + foreach (TextureGroupHandle group in handles) { - foreach (var handle in group.Handles) + foreach (RegionHandle handle in group.Handles) { bool dirty = false; - foreach (var oldGroup in oldHandles) + foreach (TextureGroupHandle oldGroup in oldHandles) { if (group.OverlapsWith(oldGroup.Offset + relativeOffset, oldGroup.Size)) { - foreach (var oldHandle in oldGroup.Handles) + foreach (RegionHandle oldHandle in oldGroup.Handles) { if (handle.OverlapsWith(oldHandle.Address, oldHandle.Size)) { @@ -1194,7 +1194,7 @@ namespace Ryujinx.Graphics.Gpu.Image } } - foreach (var oldGroup in oldHandles) + foreach (TextureGroupHandle oldGroup in oldHandles) { oldGroup.Modified = false; } @@ -1254,7 +1254,7 @@ namespace Ryujinx.Graphics.Gpu.Image continue; } - foreach (var oldGroup in _handles) + foreach (TextureGroupHandle oldGroup in _handles) { if (!groupHandle.OverlapsWith(oldGroup.Offset, oldGroup.Size)) { @@ -1265,7 +1265,7 @@ namespace Ryujinx.Graphics.Gpu.Image { bool hasMatch = false; - foreach (var oldHandle in oldGroup.Handles) + foreach (RegionHandle oldHandle in oldGroup.Handles) { if (oldHandle.RangeEquals(handle)) { @@ -1292,9 +1292,9 @@ namespace Ryujinx.Graphics.Gpu.Image InheritHandles(_handles, handles, 0); - foreach (var oldGroup in _handles) + foreach (TextureGroupHandle oldGroup in _handles) { - foreach (var oldHandle in oldGroup.Handles) + foreach (RegionHandle oldHandle in oldGroup.Handles) { oldHandle.Dispose(); } @@ -1320,12 +1320,12 @@ namespace Ryujinx.Graphics.Gpu.Image else if (!(_hasMipViews || _hasLayerViews)) { // Single dirty region. - var cpuRegionHandles = new RegionHandle[TextureRange.Count]; + RegionHandle[] cpuRegionHandles = new RegionHandle[TextureRange.Count]; int count = 0; for (int i = 0; i < TextureRange.Count; i++) { - var currentRange = TextureRange.GetSubRange(i); + MemoryRange currentRange = TextureRange.GetSubRange(i); if (currentRange.Address != MemoryManager.PteUnmapped) { cpuRegionHandles[count++] = GenerateHandle(currentRange.Address, currentRange.Size); @@ -1337,7 +1337,7 @@ namespace Ryujinx.Graphics.Gpu.Image Array.Resize(ref cpuRegionHandles, count); } - var groupHandle = new TextureGroupHandle(this, 0, Storage.Size, _views, 0, 0, 0, _allOffsets.Length, cpuRegionHandles); + TextureGroupHandle groupHandle = new TextureGroupHandle(this, 0, Storage.Size, _views, 0, 0, 0, _allOffsets.Length, cpuRegionHandles); handles = new TextureGroupHandle[] { groupHandle }; } @@ -1355,7 +1355,7 @@ namespace Ryujinx.Graphics.Gpu.Image if (_is3D) { - var handlesList = new List(); + List handlesList = new List(); for (int i = 0; i < levelHandles; i++) { @@ -1438,8 +1438,8 @@ namespace Ryujinx.Graphics.Gpu.Image // Get the location of each texture within its storage, so we can find the handles to apply the dependency to. // This can consist of multiple disjoint regions, for example if this is a mip slice of an array texture. - var targetRange = new List<(int BaseHandle, int RegionCount)>(); - var otherRange = new List<(int BaseHandle, int RegionCount)>(); + List<(int BaseHandle, int RegionCount)> targetRange = new List<(int BaseHandle, int RegionCount)>(); + List<(int BaseHandle, int RegionCount)> otherRange = new List<(int BaseHandle, int RegionCount)>(); EvaluateRelevantHandles(firstLayer, firstLevel, other.Info.GetSlices(), other.Info.Levels, (baseHandle, regionCount, split) => targetRange.Add((baseHandle, regionCount))); otherGroup.EvaluateRelevantHandles(other, (baseHandle, regionCount, split) => otherRange.Add((baseHandle, regionCount))); diff --git a/src/Ryujinx.Graphics.Gpu/Image/TexturePool.cs b/src/Ryujinx.Graphics.Gpu/Image/TexturePool.cs index 3bf122412..3effc39b1 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TexturePool.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TexturePool.cs @@ -118,7 +118,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// Texture with the requested format, or null if not found public Texture Find(Format format) { - foreach (var alias in _aliases) + foreach (Alias alias in _aliases) { if (alias.Format == format) { @@ -134,7 +134,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// public void Destroy() { - foreach (var entry in _aliases) + foreach (Alias entry in _aliases) { entry.Texture.DecrementReferenceCount(); } @@ -361,7 +361,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// If true, queue the dereference to happen on the render thread, otherwise dereference immediately public void ForceRemove(Texture texture, int id, bool deferred) { - var previous = Interlocked.Exchange(ref Items[id], null); + Texture previous = Interlocked.Exchange(ref Items[id], null); if (deferred) { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs b/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs index e060e0b4f..6cc603b76 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs @@ -735,7 +735,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { _context.Renderer.BackgroundContextAction(() => { - var ranges = _modifiedRanges; + BufferModifiedRangeList ranges = _modifiedRanges; if (ranges != null) { @@ -850,7 +850,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { if (_virtualDependencies != null) { - foreach (var virtualBuffer in _virtualDependencies) + foreach (MultiRangeBuffer virtualBuffer in _virtualDependencies) { CopyToDependantVirtualBuffer(virtualBuffer, address, size); } @@ -875,7 +875,7 @@ namespace Ryujinx.Graphics.Gpu.Memory [MethodImpl(MethodImplOptions.NoInlining)] private void CopyFromDependantVirtualBuffersImpl() { - foreach (var virtualBuffer in _virtualDependencies.OrderBy(x => x.ModificationSequenceNumber)) + foreach (MultiRangeBuffer virtualBuffer in _virtualDependencies.OrderBy(x => x.ModificationSequenceNumber)) { virtualBuffer.ConsumeModifiedRegion(this, (mAddress, mSize) => { @@ -914,7 +914,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { byte[] storage = dataSpan.ToArray(); - foreach (var virtualBuffer in _virtualDependencies.OrderBy(x => x.ModificationSequenceNumber)) + foreach (MultiRangeBuffer virtualBuffer in _virtualDependencies.OrderBy(x => x.ModificationSequenceNumber)) { virtualBuffer.ConsumeModifiedRegion(address, size, (mAddress, mSize) => { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferBackingState.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferBackingState.cs index 3f65131e6..56bc9143f 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferBackingState.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferBackingState.cs @@ -81,7 +81,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { // Storage buffer bindings may require special treatment. - var rawStage = stage & BufferStage.StageMask; + BufferStage rawStage = stage & BufferStage.StageMask; if (rawStage == BufferStage.Fragment) { @@ -225,7 +225,7 @@ namespace Ryujinx.Graphics.Gpu.Memory // Storage write. _writeCount++; - var rawStage = stage & BufferStage.StageMask; + BufferStage rawStage = stage & BufferStage.StageMask; if (rawStage == BufferStage.Fragment) { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs index 66d2cdb62..2368da90f 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs @@ -412,7 +412,7 @@ namespace Ryujinx.Graphics.Gpu.Memory dstOffset += subRange.Size; } - foreach (var buffer in physicalBuffers) + foreach (Buffer buffer in physicalBuffers) { buffer.CopyToDependantVirtualBuffer(virtualBuffer); } @@ -1037,7 +1037,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// List used to track entries to delete private static void Prune(Dictionary dictionary, ref List toDelete) { - foreach (var entry in dictionary) + foreach (KeyValuePair entry in dictionary) { if (entry.Value.UnmappedSequence != entry.Value.Buffer.UnmappedSequence) { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs index 409867e09..a07e3445b 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs @@ -478,7 +478,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// public void CommitComputeBindings() { - var bufferCache = _channel.MemoryManager.Physical.BufferCache; + BufferCache bufferCache = _channel.MemoryManager.Physical.BufferCache; BindBuffers(bufferCache, _cpStorageBuffers, isStorage: true); BindBuffers(bufferCache, _cpUniformBuffers, isStorage: false); @@ -499,10 +499,10 @@ namespace Ryujinx.Graphics.Gpu.Memory { if (_bufferTextures.Count > 0) { - foreach (var binding in _bufferTextures) + foreach (BufferTextureBinding binding in _bufferTextures) { - var isStore = binding.BindingInfo.Flags.HasFlag(TextureUsageFlags.ImageStore); - var range = bufferCache.GetBufferRange(binding.Range, BufferStageUtils.TextureBuffer(binding.Stage, binding.BindingInfo.Flags), isStore); + bool isStore = binding.BindingInfo.Flags.HasFlag(TextureUsageFlags.ImageStore); + BufferRange range = bufferCache.GetBufferRange(binding.Range, BufferStageUtils.TextureBuffer(binding.Stage, binding.BindingInfo.Flags), isStore); binding.Texture.SetStorage(range); // The texture must be rebound to use the new storage if it was updated. @@ -524,19 +524,19 @@ namespace Ryujinx.Graphics.Gpu.Memory { ITexture[] textureArray = new ITexture[1]; - foreach (var binding in _bufferTextureArrays) + foreach (BufferTextureArrayBinding binding in _bufferTextureArrays) { - var range = bufferCache.GetBufferRange(binding.Range, BufferStage.None); + BufferRange range = bufferCache.GetBufferRange(binding.Range, BufferStage.None); binding.Texture.SetStorage(range); textureArray[0] = binding.Texture; binding.Array.SetTextures(binding.Index, textureArray); } - foreach (var binding in _bufferImageArrays) + foreach (BufferTextureArrayBinding binding in _bufferImageArrays) { - var isStore = binding.BindingInfo.Flags.HasFlag(TextureUsageFlags.ImageStore); - var range = bufferCache.GetBufferRange(binding.Range, BufferStage.None, isStore); + bool isStore = binding.BindingInfo.Flags.HasFlag(TextureUsageFlags.ImageStore); + BufferRange range = bufferCache.GetBufferRange(binding.Range, BufferStage.None, isStore); binding.Texture.SetStorage(range); textureArray[0] = binding.Texture; @@ -555,7 +555,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// True if the index buffer is in use public void CommitGraphicsBindings(bool indexed) { - var bufferCache = _channel.MemoryManager.Physical.BufferCache; + BufferCache bufferCache = _channel.MemoryManager.Physical.BufferCache; if (indexed) { @@ -750,19 +750,19 @@ namespace Ryujinx.Graphics.Gpu.Memory for (ShaderStage stage = ShaderStage.Vertex; stage <= ShaderStage.Fragment; stage++) { - ref var buffers = ref bindings[(int)stage - 1]; + ref BuffersPerStage buffers = ref bindings[(int)stage - 1]; BufferStage bufferStage = BufferStageUtils.FromShaderStage(stage); for (int index = 0; index < buffers.Count; index++) { - ref var bindingInfo = ref buffers.Bindings[index]; + ref BufferDescriptor bindingInfo = ref buffers.Bindings[index]; BufferBounds bounds = buffers.Buffers[bindingInfo.Slot]; if (!bounds.IsUnmapped) { - var isWrite = bounds.Flags.HasFlag(BufferUsageFlags.Write); - var range = isStorage + bool isWrite = bounds.Flags.HasFlag(BufferUsageFlags.Write); + BufferRange range = isStorage ? bufferCache.GetBufferRangeAligned(bounds.Range, bufferStage | BufferStageUtils.FromUsage(bounds.Flags), isWrite) : bufferCache.GetBufferRange(bounds.Range, bufferStage); @@ -792,14 +792,14 @@ namespace Ryujinx.Graphics.Gpu.Memory for (int index = 0; index < buffers.Count; index++) { - ref var bindingInfo = ref buffers.Bindings[index]; + ref BufferDescriptor bindingInfo = ref buffers.Bindings[index]; BufferBounds bounds = buffers.Buffers[bindingInfo.Slot]; if (!bounds.IsUnmapped) { - var isWrite = bounds.Flags.HasFlag(BufferUsageFlags.Write); - var range = isStorage + bool isWrite = bounds.Flags.HasFlag(BufferUsageFlags.Write); + BufferRange range = isStorage ? bufferCache.GetBufferRangeAligned(bounds.Range, BufferStageUtils.ComputeStorage(bounds.Flags), isWrite) : bufferCache.GetBufferRange(bounds.Range, BufferStage.Compute); @@ -841,11 +841,11 @@ namespace Ryujinx.Graphics.Gpu.Memory { for (ShaderStage stage = ShaderStage.Vertex; stage <= ShaderStage.Fragment; stage++) { - ref var buffers = ref bindings[(int)stage - 1]; + ref BuffersPerStage buffers = ref bindings[(int)stage - 1]; for (int index = 0; index < buffers.Count; index++) { - ref var binding = ref buffers.Bindings[index]; + ref BufferDescriptor binding = ref buffers.Bindings[index]; BufferBounds bounds = buffers.Buffers[binding.Slot]; diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs index c5a12c1fc..105082f31 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs @@ -117,7 +117,7 @@ namespace Ryujinx.Graphics.Gpu.Memory lock (_lock) { // Slices a given region using the modified regions in the list. Calls the action for the new slices. - ref var overlaps = ref ThreadStaticArray.Get(); + ref BufferModifiedRange[] overlaps = ref ThreadStaticArray.Get(); int count = FindOverlapsNonOverlapping(address, size, ref overlaps); @@ -156,7 +156,7 @@ namespace Ryujinx.Graphics.Gpu.Memory lock (_lock) { // We may overlap with some existing modified regions. They must be cut into by the new entry. - ref var overlaps = ref ThreadStaticArray.Get(); + ref BufferModifiedRange[] overlaps = ref ThreadStaticArray.Get(); int count = FindOverlapsNonOverlapping(address, size, ref overlaps); @@ -210,7 +210,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { int count = 0; - ref var overlaps = ref ThreadStaticArray.Get(); + ref BufferModifiedRange[] overlaps = ref ThreadStaticArray.Get(); // Range list must be consistent for this operation. lock (_lock) @@ -239,7 +239,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { int count = 0; - ref var overlaps = ref ThreadStaticArray.Get(); + ref BufferModifiedRange[] overlaps = ref ThreadStaticArray.Get(); // Range list must be consistent for this operation. lock (_lock) @@ -355,7 +355,7 @@ namespace Ryujinx.Graphics.Gpu.Memory int rangeCount = 0; - ref var overlaps = ref ThreadStaticArray.Get(); + ref BufferModifiedRange[] overlaps = ref ThreadStaticArray.Get(); // Range list must be consistent for this operation lock (_lock) diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs index 02090c04f..a5ee3ab70 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs @@ -73,7 +73,7 @@ namespace Ryujinx.Graphics.Gpu.Memory if (binding >= 0) { - var range = new BufferRange(_handle, 0, data.Length); + BufferRange range = new BufferRange(_handle, 0, data.Length); _renderer.Pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, range) }); } }; diff --git a/src/Ryujinx.Graphics.Gpu/Memory/GpuRegionHandle.cs b/src/Ryujinx.Graphics.Gpu/Memory/GpuRegionHandle.cs index bdb7cf2c2..77eb7c4a4 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/GpuRegionHandle.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/GpuRegionHandle.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { get { - foreach (var regionHandle in _cpuRegionHandles) + foreach (RegionHandle regionHandle in _cpuRegionHandles) { if (regionHandle.Dirty) { @@ -44,7 +44,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// public void Dispose() { - foreach (var regionHandle in _cpuRegionHandles) + foreach (RegionHandle regionHandle in _cpuRegionHandles) { regionHandle.Dispose(); } @@ -57,7 +57,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// Action to call on read or write public void RegisterAction(RegionSignal action) { - foreach (var regionHandle in _cpuRegionHandles) + foreach (RegionHandle regionHandle in _cpuRegionHandles) { regionHandle.RegisterAction(action); } @@ -70,7 +70,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// Action to call on read or write public void RegisterPreciseAction(PreciseRegionSignal action) { - foreach (var regionHandle in _cpuRegionHandles) + foreach (RegionHandle regionHandle in _cpuRegionHandles) { regionHandle.RegisterPreciseAction(action); } @@ -81,7 +81,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// public void Reprotect(bool asDirty = false) { - foreach (var regionHandle in _cpuRegionHandles) + foreach (RegionHandle regionHandle in _cpuRegionHandles) { regionHandle.Reprotect(asDirty); } @@ -92,7 +92,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// public void ForceDirty() { - foreach (var regionHandle in _cpuRegionHandles) + foreach (RegionHandle regionHandle in _cpuRegionHandles) { regionHandle.ForceDirty(); } diff --git a/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs b/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs index 59e618c02..5ee5ce456 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs @@ -458,7 +458,7 @@ namespace Ryujinx.Graphics.Gpu.Memory int pages = (int)((endVaRounded - va) / PageSize); - var regions = new List(); + List regions = new List(); for (int page = 0; page < pages - 1; page++) { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/MultiRangeBuffer.cs b/src/Ryujinx.Graphics.Gpu/Memory/MultiRangeBuffer.cs index d92b0836e..19ef56bb1 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/MultiRangeBuffer.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/MultiRangeBuffer.cs @@ -149,7 +149,7 @@ namespace Ryujinx.Graphics.Gpu.Memory if (_dependencies != null) { - foreach (var dependency in _dependencies) + foreach (PhysicalDependency dependency in _dependencies) { if (dependency.PhysicalBuffer == buffer && dependency.VirtualOffset >= minimumVirtOffset) { @@ -231,7 +231,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { if (_dependencies != null) { - foreach (var dependency in _dependencies) + foreach (PhysicalDependency dependency in _dependencies) { dependency.PhysicalBuffer.RemoveVirtualDependency(this); } diff --git a/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs b/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs index b22cc01b8..d9dd7f1d9 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/PhysicalMemory.cs @@ -102,10 +102,10 @@ namespace Ryujinx.Graphics.Gpu.Memory { if (range.Count == 1) { - var singleRange = range.GetSubRange(0); + MemoryRange singleRange = range.GetSubRange(0); if (singleRange.Address != MemoryManager.PteUnmapped) { - var regions = _cpuMemory.GetHostRegions(singleRange.Address, singleRange.Size); + IEnumerable regions = _cpuMemory.GetHostRegions(singleRange.Address, singleRange.Size); if (regions != null && regions.Count() == 1) { @@ -139,7 +139,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { if (range.Count == 1) { - var singleRange = range.GetSubRange(0); + MemoryRange singleRange = range.GetSubRange(0); if (singleRange.Address != MemoryManager.PteUnmapped) { return _cpuMemory.GetSpan(singleRange.Address, (int)singleRange.Size, tracked); @@ -152,7 +152,7 @@ namespace Ryujinx.Graphics.Gpu.Memory for (int i = 0; i < range.Count; i++) { - var currentRange = range.GetSubRange(i); + MemoryRange currentRange = range.GetSubRange(i); int size = (int)currentRange.Size; if (currentRange.Address != MemoryManager.PteUnmapped) { @@ -199,7 +199,7 @@ namespace Ryujinx.Graphics.Gpu.Memory int offset = 0; for (int i = 0; i < range.Count; i++) { - var currentRange = range.GetSubRange(i); + MemoryRange currentRange = range.GetSubRange(i); int size = (int)currentRange.Size; if (currentRange.Address != MemoryManager.PteUnmapped) { @@ -322,7 +322,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { if (range.Count == 1) { - var singleRange = range.GetSubRange(0); + MemoryRange singleRange = range.GetSubRange(0); if (singleRange.Address != MemoryManager.PteUnmapped) { writeCallback(singleRange.Address, data); @@ -334,7 +334,7 @@ namespace Ryujinx.Graphics.Gpu.Memory for (int i = 0; i < range.Count; i++) { - var currentRange = range.GetSubRange(i); + MemoryRange currentRange = range.GetSubRange(i); int size = (int)currentRange.Size; if (currentRange.Address != MemoryManager.PteUnmapped) { @@ -382,12 +382,12 @@ namespace Ryujinx.Graphics.Gpu.Memory /// The memory tracking handle public GpuRegionHandle BeginTracking(MultiRange range, ResourceKind kind) { - var cpuRegionHandles = new RegionHandle[range.Count]; + RegionHandle[] cpuRegionHandles = new RegionHandle[range.Count]; int count = 0; for (int i = 0; i < range.Count; i++) { - var currentRange = range.GetSubRange(i); + MemoryRange currentRange = range.GetSubRange(i); if (currentRange.Address != MemoryManager.PteUnmapped) { cpuRegionHandles[count++] = _cpuMemory.BeginTracking(currentRange.Address, currentRange.Size, (int)kind); diff --git a/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs b/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs index fc444f49c..20831fa99 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs @@ -19,7 +19,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// Renderer that the support buffer will be used with public SupportBufferUpdater(IRenderer renderer) : base(renderer) { - var defaultScale = new Vector4 { X = 1f, Y = 0f, Z = 0f, W = 0f }; + Vector4 defaultScale = new Vector4 { X = 1f, Y = 0f, Z = 0f, W = 0f }; _data.RenderScale.AsSpan().Fill(defaultScale); DirtyRenderScale(0, SupportBuffer.RenderScaleMaxCount); } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs b/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs index 018c5fdc0..a4bcbc6f5 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs @@ -60,7 +60,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { Target target = descriptor.Type != SamplerType.None ? ShaderTexture.GetTarget(descriptor.Type) : default; - var result = new TextureBindingInfo( + TextureBindingInfo result = new TextureBindingInfo( target, descriptor.Set, descriptor.Binding, @@ -88,7 +88,7 @@ namespace Ryujinx.Graphics.Gpu.Shader Target target = ShaderTexture.GetTarget(descriptor.Type); FormatInfo formatInfo = ShaderTexture.GetFormatInfo(descriptor.Format); - var result = new TextureBindingInfo( + TextureBindingInfo result = new TextureBindingInfo( target, formatInfo, descriptor.Set, diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ComputeShaderCacheHashTable.cs b/src/Ryujinx.Graphics.Gpu/Shader/ComputeShaderCacheHashTable.cs index 0119a6a33..49516b310 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ComputeShaderCacheHashTable.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ComputeShaderCacheHashTable.cs @@ -26,7 +26,7 @@ namespace Ryujinx.Graphics.Gpu.Shader /// Program to be added public void Add(CachedShaderProgram program) { - var specList = _cache.GetOrAdd(program.Shaders[0].Code, new ShaderSpecializationList()); + ShaderSpecializationList specList = _cache.GetOrAdd(program.Shaders[0].Code, new ShaderSpecializationList()); specList.Add(program); _shaderPrograms.Add(program); } @@ -51,7 +51,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { program = null; ShaderCodeAccessor codeAccessor = new(channel.MemoryManager, gpuVa); - bool hasSpecList = _cache.TryFindItem(codeAccessor, out var specList, out cachedGuestCode); + bool hasSpecList = _cache.TryFindItem(codeAccessor, out ShaderSpecializationList specList, out cachedGuestCode); return hasSpecList && specList.TryFindForCompute(channel, poolState, computeState, out program); } @@ -62,7 +62,7 @@ namespace Ryujinx.Graphics.Gpu.Shader /// Programs added to the table public IEnumerable GetPrograms() { - foreach (var program in _shaderPrograms) + foreach (CachedShaderProgram program in _shaderPrograms) { yield return program; } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs index 22af88d31..237ae18ec 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs @@ -180,8 +180,8 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache /// public void ClearCache() { - using var tocFileStream = DiskCacheCommon.OpenFile(_basePath, TocFileName, writable: true); - using var dataFileStream = DiskCacheCommon.OpenFile(_basePath, DataFileName, writable: true); + using FileStream tocFileStream = DiskCacheCommon.OpenFile(_basePath, TocFileName, writable: true); + using FileStream dataFileStream = DiskCacheCommon.OpenFile(_basePath, DataFileName, writable: true); tocFileStream.SetLength(0); dataFileStream.SetLength(0); @@ -258,8 +258,8 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache /// Index of the shader on the cache public int AddShader(ReadOnlySpan data, ReadOnlySpan cb1Data) { - using var tocFileStream = DiskCacheCommon.OpenFile(_basePath, TocFileName, writable: true); - using var dataFileStream = DiskCacheCommon.OpenFile(_basePath, DataFileName, writable: true); + using FileStream tocFileStream = DiskCacheCommon.OpenFile(_basePath, TocFileName, writable: true); + using FileStream dataFileStream = DiskCacheCommon.OpenFile(_basePath, DataFileName, writable: true); TocHeader header = new(); @@ -267,9 +267,9 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache uint hash = CalcHash(data, cb1Data); - if (_toc.TryGetValue(hash, out var list)) + if (_toc.TryGetValue(hash, out List list)) { - foreach (var entry in list) + foreach (TocMemoryEntry entry in list) { if (data.Length != entry.CodeSize || cb1Data.Length != entry.Cb1DataSize) { @@ -427,7 +427,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache /// Index of the data on the cache private void AddTocMemoryEntry(uint dataOffset, uint codeSize, uint cb1DataSize, uint hash, int index) { - if (!_toc.TryGetValue(hash, out var list)) + if (!_toc.TryGetValue(hash, out List list)) { _toc.Add(hash, list = new List()); } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs index b6b811389..4ef0caced 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs @@ -301,11 +301,11 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache try { - using var tocFileStream = DiskCacheCommon.OpenFile(_basePath, SharedTocFileName, writable: false); - using var dataFileStream = DiskCacheCommon.OpenFile(_basePath, SharedDataFileName, writable: false); + using FileStream tocFileStream = DiskCacheCommon.OpenFile(_basePath, SharedTocFileName, writable: false); + using FileStream dataFileStream = DiskCacheCommon.OpenFile(_basePath, SharedDataFileName, writable: false); - using var guestTocFileStream = _guestStorage.OpenTocFileStream(); - using var guestDataFileStream = _guestStorage.OpenDataFileStream(); + using Stream guestTocFileStream = _guestStorage.OpenTocFileStream(); + using Stream guestDataFileStream = _guestStorage.OpenDataFileStream(); BinarySerializer tocReader = new(tocFileStream); BinarySerializer dataReader = new(dataFileStream); @@ -547,11 +547,11 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache /// A collection of disk cache output streams public DiskCacheOutputStreams GetOutputStreams(GpuContext context) { - var tocFileStream = DiskCacheCommon.OpenFile(_basePath, SharedTocFileName, writable: true); - var dataFileStream = DiskCacheCommon.OpenFile(_basePath, SharedDataFileName, writable: true); + FileStream tocFileStream = DiskCacheCommon.OpenFile(_basePath, SharedTocFileName, writable: true); + FileStream dataFileStream = DiskCacheCommon.OpenFile(_basePath, SharedDataFileName, writable: true); - var hostTocFileStream = DiskCacheCommon.OpenFile(_basePath, GetHostTocFileName(context), writable: true); - var hostDataFileStream = DiskCacheCommon.OpenFile(_basePath, GetHostDataFileName(context), writable: true); + FileStream hostTocFileStream = DiskCacheCommon.OpenFile(_basePath, GetHostTocFileName(context), writable: true); + FileStream hostDataFileStream = DiskCacheCommon.OpenFile(_basePath, GetHostDataFileName(context), writable: true); return new DiskCacheOutputStreams(tocFileStream, dataFileStream, hostTocFileStream, hostDataFileStream); } @@ -569,7 +569,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache for (int index = 0; index < program.Shaders.Length; index++) { - var shader = program.Shaders[index]; + CachedShaderStage shader = program.Shaders[index]; if (shader == null || (shader.Info != null && shader.Info.Stage == ShaderStage.Compute)) { continue; @@ -578,8 +578,8 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache stagesBitMask |= 1u << index; } - var tocFileStream = streams != null ? streams.TocFileStream : DiskCacheCommon.OpenFile(_basePath, SharedTocFileName, writable: true); - var dataFileStream = streams != null ? streams.DataFileStream : DiskCacheCommon.OpenFile(_basePath, SharedDataFileName, writable: true); + FileStream tocFileStream = streams != null ? streams.TocFileStream : DiskCacheCommon.OpenFile(_basePath, SharedTocFileName, writable: true); + FileStream dataFileStream = streams != null ? streams.DataFileStream : DiskCacheCommon.OpenFile(_basePath, SharedDataFileName, writable: true); ulong timestamp = (ulong)DateTime.UtcNow.Subtract(DateTime.UnixEpoch).TotalSeconds; @@ -610,7 +610,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache for (int index = 0; index < program.Shaders.Length; index++) { - var shader = program.Shaders[index]; + CachedShaderStage shader = program.Shaders[index]; if (shader == null) { continue; @@ -655,8 +655,8 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache /// GPU context public void ClearSharedCache() { - using var tocFileStream = DiskCacheCommon.OpenFile(_basePath, SharedTocFileName, writable: true); - using var dataFileStream = DiskCacheCommon.OpenFile(_basePath, SharedDataFileName, writable: true); + using FileStream tocFileStream = DiskCacheCommon.OpenFile(_basePath, SharedTocFileName, writable: true); + using FileStream dataFileStream = DiskCacheCommon.OpenFile(_basePath, SharedDataFileName, writable: true); tocFileStream.SetLength(0); dataFileStream.SetLength(0); @@ -668,8 +668,8 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache /// GPU context public void ClearHostCache(GpuContext context) { - using var tocFileStream = DiskCacheCommon.OpenFile(_basePath, GetHostTocFileName(context), writable: true); - using var dataFileStream = DiskCacheCommon.OpenFile(_basePath, GetHostDataFileName(context), writable: true); + using FileStream tocFileStream = DiskCacheCommon.OpenFile(_basePath, GetHostTocFileName(context), writable: true); + using FileStream dataFileStream = DiskCacheCommon.OpenFile(_basePath, GetHostDataFileName(context), writable: true); tocFileStream.SetLength(0); dataFileStream.SetLength(0); @@ -690,8 +690,8 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache DiskCacheOutputStreams streams, ulong timestamp) { - var tocFileStream = streams != null ? streams.HostTocFileStream : DiskCacheCommon.OpenFile(_basePath, GetHostTocFileName(context), writable: true); - var dataFileStream = streams != null ? streams.HostDataFileStream : DiskCacheCommon.OpenFile(_basePath, GetHostDataFileName(context), writable: true); + FileStream tocFileStream = streams != null ? streams.HostTocFileStream : DiskCacheCommon.OpenFile(_basePath, GetHostTocFileName(context), writable: true); + FileStream dataFileStream = streams != null ? streams.HostDataFileStream : DiskCacheCommon.OpenFile(_basePath, GetHostDataFileName(context), writable: true); if (tocFileStream.Length == 0) { @@ -853,25 +853,25 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache for (int index = 0; index < info.CBuffers.Count; index++) { - var entry = info.CBuffers[index]; + BufferDescriptor entry = info.CBuffers[index]; dataWriter.WriteWithMagicAndSize(ref entry, BufdMagic); } for (int index = 0; index < info.SBuffers.Count; index++) { - var entry = info.SBuffers[index]; + BufferDescriptor entry = info.SBuffers[index]; dataWriter.WriteWithMagicAndSize(ref entry, BufdMagic); } for (int index = 0; index < info.Textures.Count; index++) { - var entry = info.Textures[index]; + TextureDescriptor entry = info.Textures[index]; dataWriter.WriteWithMagicAndSize(ref entry, TexdMagic); } for (int index = 0; index < info.Images.Count; index++) { - var entry = info.Images[index]; + TextureDescriptor entry = info.Images[index]; dataWriter.WriteWithMagicAndSize(ref entry, TexdMagic); } } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index eb0f72af1..9424a1084 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -303,10 +303,10 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache Logger.Info?.Print(LogClass.Gpu, $"Rebuilding {_programList.Count} shaders..."); - using var streams = _hostStorage.GetOutputStreams(_context); + using DiskCacheOutputStreams streams = _hostStorage.GetOutputStreams(_context); int packagedShaders = 0; - foreach (var kv in _programList) + foreach (KeyValuePair kv in _programList) { if (!Active) { diff --git a/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs b/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs index 4e9134291..c7d86a47e 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs @@ -4,6 +4,7 @@ using Ryujinx.Graphics.Shader; using Ryujinx.Graphics.Shader.Translation; using System; using System.Runtime.InteropServices; +using TextureDescriptor = Ryujinx.Graphics.Gpu.Image.TextureDescriptor; namespace Ryujinx.Graphics.Gpu.Shader { @@ -177,7 +178,7 @@ namespace Ryujinx.Graphics.Gpu.Shader public TextureFormat QueryTextureFormat(int handle, int cbufSlot) { _state.SpecializationState?.RecordTextureFormat(_stageIndex, handle, cbufSlot); - var descriptor = GetTextureDescriptor(handle, cbufSlot); + TextureDescriptor descriptor = GetTextureDescriptor(handle, cbufSlot); return ConvertToTextureFormat(descriptor.UnpackFormat(), descriptor.UnpackSrgb()); } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs index b50ea174d..3ff92896b 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs @@ -205,7 +205,7 @@ namespace Ryujinx.Graphics.Gpu.Shader GpuChannelComputeState computeState, ulong gpuVa) { - if (_cpPrograms.TryGetValue(gpuVa, out var cpShader) && IsShaderEqual(channel, poolState, computeState, cpShader, gpuVa)) + if (_cpPrograms.TryGetValue(gpuVa, out CachedShaderProgram cpShader) && IsShaderEqual(channel, poolState, computeState, cpShader, gpuVa)) { return cpShader; } @@ -255,8 +255,8 @@ namespace Ryujinx.Graphics.Gpu.Shader { channel.TextureManager.UpdateRenderTargets(); - var rtControl = state.RtControl; - var msaaMode = state.RtMsaaMode; + RtControl rtControl = state.RtControl; + TextureMsaaMode msaaMode = state.RtMsaaMode; pipeline.SamplesCount = msaaMode.SamplesInX() * msaaMode.SamplesInY(); @@ -266,7 +266,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { int rtIndex = rtControl.UnpackPermutationIndex(index); - var colorState = state.RtColorState[rtIndex]; + RtColorState colorState = state.RtColorState[rtIndex]; if (index >= count || colorState.Format == 0 || colorState.WidthOrStride == 0) { @@ -311,12 +311,12 @@ namespace Ryujinx.Graphics.Gpu.Shader ref GpuChannelGraphicsState graphicsState, ShaderAddresses addresses) { - if (_gpPrograms.TryGetValue(addresses, out var gpShaders) && IsShaderEqual(channel, ref poolState, ref graphicsState, gpShaders, addresses)) + if (_gpPrograms.TryGetValue(addresses, out CachedShaderProgram gpShaders) && IsShaderEqual(channel, ref poolState, ref graphicsState, gpShaders, addresses)) { return gpShaders; } - if (_graphicsShaderCache.TryFind(channel, ref poolState, ref graphicsState, addresses, out gpShaders, out var cachedGuestCode)) + if (_graphicsShaderCache.TryFind(channel, ref poolState, ref graphicsState, addresses, out gpShaders, out CachedGraphicsGuestCode cachedGuestCode)) { _gpPrograms[addresses] = gpShaders; return gpShaders; @@ -587,7 +587,7 @@ namespace Ryujinx.Graphics.Gpu.Shader for (int i = 0; i < Constants.TotalTransformFeedbackBuffers; i++) { - var tf = state.TfState[i]; + TfState tf = state.TfState[i]; descs[i] = new TransformFeedbackDescriptor( tf.BufferIndex, @@ -693,7 +693,7 @@ namespace Ryujinx.Graphics.Gpu.Shader /// The generated translator context public static TranslatorContext DecodeComputeShader(IGpuAccessor gpuAccessor, TargetApi api, ulong gpuVa) { - var options = CreateTranslationOptions(api, DefaultFlags | TranslationFlags.Compute); + TranslationOptions options = CreateTranslationOptions(api, DefaultFlags | TranslationFlags.Compute); return Translator.CreateContext(gpuVa, gpuAccessor, options); } @@ -710,7 +710,7 @@ namespace Ryujinx.Graphics.Gpu.Shader /// The generated translator context public static TranslatorContext DecodeGraphicsShader(IGpuAccessor gpuAccessor, TargetApi api, TranslationFlags flags, ulong gpuVa) { - var options = CreateTranslationOptions(api, flags); + TranslationOptions options = CreateTranslationOptions(api, flags); return Translator.CreateContext(gpuVa, gpuAccessor, options); } @@ -736,7 +736,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { ulong cb1DataAddress = channel.BufferManager.GetGraphicsUniformBufferAddress(0, 1); - var memoryManager = channel.MemoryManager; + MemoryManager memoryManager = channel.MemoryManager; codeA ??= memoryManager.GetSpan(vertexA.Address, vertexA.Size).ToArray(); codeB ??= memoryManager.GetSpan(currentStage.Address, currentStage.Size).ToArray(); @@ -774,7 +774,7 @@ namespace Ryujinx.Graphics.Gpu.Shader /// Compiled graphics shader code private static TranslatedShader TranslateShader(ShaderDumper dumper, GpuChannel channel, TranslatorContext context, byte[] code, bool asCompute) { - var memoryManager = channel.MemoryManager; + MemoryManager memoryManager = channel.MemoryManager; ulong cb1DataAddress = context.Stage == ShaderStage.Compute ? channel.BufferManager.GetComputeUniformBufferAddress(1) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCacheHashTable.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCacheHashTable.cs index e65a1dec9..562837791 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCacheHashTable.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCacheHashTable.cs @@ -156,7 +156,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { IdTable idTable = new(); - foreach (var shader in program.Shaders) + foreach (CachedShaderStage shader in program.Shaders) { if (shader == null) { @@ -221,7 +221,7 @@ namespace Ryujinx.Graphics.Gpu.Shader out CachedShaderProgram program, out CachedGraphicsGuestCode guestCode) { - var memoryManager = channel.MemoryManager; + MemoryManager memoryManager = channel.MemoryManager; IdTable idTable = new(); guestCode = new CachedGraphicsGuestCode(); @@ -270,9 +270,9 @@ namespace Ryujinx.Graphics.Gpu.Shader /// Programs added to the table public IEnumerable GetPrograms() { - foreach (var specList in _shaderPrograms.Values) + foreach (ShaderSpecializationList specList in _shaderPrograms.Values) { - foreach (var program in specList) + foreach (CachedShaderProgram program in specList) { yield return program; } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs index e283d0832..50061db60 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs @@ -372,8 +372,8 @@ namespace Ryujinx.Graphics.Gpu.Shader { int totalSets = _resourceDescriptors.Length; - var descriptors = new ResourceDescriptorCollection[totalSets]; - var usages = new ResourceUsageCollection[totalSets]; + ResourceDescriptorCollection[] descriptors = new ResourceDescriptorCollection[totalSets]; + ResourceUsageCollection[] usages = new ResourceUsageCollection[totalSets]; for (int index = 0; index < totalSets; index++) { diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationList.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationList.cs index 3c2f0b9be..25ed6e7ef 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationList.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationList.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Graphics.Gpu.Shader ref GpuChannelGraphicsState graphicsState, out CachedShaderProgram program) { - foreach (var entry in _entries) + foreach (CachedShaderProgram entry in _entries) { bool vertexAsCompute = entry.VertexAsCompute != null; bool usesDrawParameters = entry.Shaders[1]?.Info.UsesDrawParameters ?? false; @@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Gpu.Shader /// True if a compatible program is found, false otherwise public bool TryFindForCompute(GpuChannel channel, GpuChannelPoolState poolState, GpuChannelComputeState computeState, out CachedShaderProgram program) { - foreach (var entry in _entries) + foreach (CachedShaderProgram entry in _entries) { if (entry.SpecializationState.MatchesCompute(channel, ref poolState, computeState, true)) { diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationState.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationState.cs index 1230c0580..4bb4392e1 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationState.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationState.cs @@ -6,10 +6,12 @@ using Ryujinx.Graphics.Gpu.Shader.DiskCache; using Ryujinx.Graphics.Shader; using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Numerics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using TextureDescriptor = Ryujinx.Graphics.Shader.TextureDescriptor; namespace Ryujinx.Graphics.Gpu.Shader { @@ -214,23 +216,23 @@ namespace Ryujinx.Graphics.Gpu.Shader CachedShaderStage stage = stages[i]; if (stage?.Info != null) { - var textures = stage.Info.Textures; - var images = stage.Info.Images; + ReadOnlyCollection textures = stage.Info.Textures; + ReadOnlyCollection images = stage.Info.Images; - var texBindings = new Box[textures.Count]; - var imageBindings = new Box[images.Count]; + Box[] texBindings = new Box[textures.Count]; + Box[] imageBindings = new Box[images.Count]; int stageIndex = Math.Max(i - 1, 0); // Don't count VertexA for looking up spec state. No-Op for compute. for (int j = 0; j < textures.Count; j++) { - var texture = textures[j]; + TextureDescriptor texture = textures[j]; texBindings[j] = GetTextureSpecState(stageIndex, texture.HandleIndex, texture.CbufSlot); } for (int j = 0; j < images.Count; j++) { - var image = images[j]; + TextureDescriptor image = images[j]; imageBindings[j] = GetTextureSpecState(stageIndex, image.HandleIndex, image.CbufSlot); } @@ -753,7 +755,7 @@ namespace Ryujinx.Graphics.Gpu.Shader ReadOnlySpan cachedTextureBuffer = Span.Empty; ReadOnlySpan cachedSamplerBuffer = Span.Empty; - foreach (var kv in _allTextures) + foreach (KeyValuePair> kv in _allTextures) { TextureKey textureKey = kv.Key; @@ -1009,10 +1011,10 @@ namespace Ryujinx.Graphics.Gpu.Shader ushort count = (ushort)_textureSpecialization.Count; dataWriter.Write(ref count); - foreach (var kv in _textureSpecialization) + foreach (KeyValuePair> kv in _textureSpecialization) { - var textureKey = kv.Key; - var textureState = kv.Value; + TextureKey textureKey = kv.Key; + Box textureState = kv.Value; dataWriter.WriteWithMagicAndSize(ref textureKey, TexkMagic); dataWriter.WriteWithMagicAndSize(ref textureState.Value, TexsMagic); @@ -1023,10 +1025,10 @@ namespace Ryujinx.Graphics.Gpu.Shader count = (ushort)_textureArrayFromBufferSpecialization.Count; dataWriter.Write(ref count); - foreach (var kv in _textureArrayFromBufferSpecialization) + foreach (KeyValuePair kv in _textureArrayFromBufferSpecialization) { - var textureKey = kv.Key; - var length = kv.Value; + TextureKey textureKey = kv.Key; + int length = kv.Value; dataWriter.WriteWithMagicAndSize(ref textureKey, TexkMagic); dataWriter.Write(ref length); @@ -1038,10 +1040,10 @@ namespace Ryujinx.Graphics.Gpu.Shader count = (ushort)_textureArrayFromPoolSpecialization.Count; dataWriter.Write(ref count); - foreach (var kv in _textureArrayFromPoolSpecialization) + foreach (KeyValuePair kv in _textureArrayFromPoolSpecialization) { - var textureKey = kv.Key; - var length = kv.Value; + bool textureKey = kv.Key; + int length = kv.Value; dataWriter.WriteWithMagicAndSize(ref textureKey, TexkMagic); dataWriter.Write(ref length); diff --git a/src/Ryujinx.Graphics.Gpu/Synchronization/SynchronizationManager.cs b/src/Ryujinx.Graphics.Gpu/Synchronization/SynchronizationManager.cs index 1042a4db8..b68a64a47 100644 --- a/src/Ryujinx.Graphics.Gpu/Synchronization/SynchronizationManager.cs +++ b/src/Ryujinx.Graphics.Gpu/Synchronization/SynchronizationManager.cs @@ -87,7 +87,7 @@ namespace Ryujinx.Graphics.Gpu.Synchronization } using ManualResetEvent waitEvent = new(false); - var info = _syncpoints[id].RegisterCallback(threshold, (x) => waitEvent.Set()); + SyncpointWaiterHandle info = _syncpoints[id].RegisterCallback(threshold, (x) => waitEvent.Set()); if (info == null) { diff --git a/src/Ryujinx.Graphics.Gpu/Window.cs b/src/Ryujinx.Graphics.Gpu/Window.cs index 59cd4c8a6..5c3463f2a 100644 --- a/src/Ryujinx.Graphics.Gpu/Window.cs +++ b/src/Ryujinx.Graphics.Gpu/Window.cs @@ -1,5 +1,6 @@ using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Gpu.Image; +using Ryujinx.Graphics.Gpu.Memory; using Ryujinx.Graphics.Texture; using Ryujinx.Memory.Range; using System; @@ -137,7 +138,7 @@ namespace Ryujinx.Graphics.Gpu Action releaseCallback, object userObj) { - if (!_context.PhysicalMemoryRegistry.TryGetValue(pid, out var physicalMemory)) + if (!_context.PhysicalMemoryRegistry.TryGetValue(pid, out PhysicalMemory physicalMemory)) { return false; } diff --git a/src/Ryujinx.Graphics.Host1x/Devices.cs b/src/Ryujinx.Graphics.Host1x/Devices.cs index 9de2b81a9..984a5abd6 100644 --- a/src/Ryujinx.Graphics.Host1x/Devices.cs +++ b/src/Ryujinx.Graphics.Host1x/Devices.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Graphics.Host1x public void Dispose() { - foreach (var device in _devices.Values) + foreach (IDeviceState device in _devices.Values) { if (device is ThiDevice thi) { diff --git a/src/Ryujinx.Graphics.Host1x/Host1xDevice.cs b/src/Ryujinx.Graphics.Host1x/Host1xDevice.cs index 2db74ce5e..62fcef348 100644 --- a/src/Ryujinx.Graphics.Host1x/Host1xDevice.cs +++ b/src/Ryujinx.Graphics.Host1x/Host1xDevice.cs @@ -46,7 +46,7 @@ namespace Ryujinx.Graphics.Host1x public void RegisterDevice(ClassId classId, IDeviceState device) { - var thi = new ThiDevice(classId, device ?? throw new ArgumentNullException(nameof(device)), _syncptIncrMgr); + ThiDevice thi = new ThiDevice(classId, device ?? throw new ArgumentNullException(nameof(device)), _syncptIncrMgr); _devices.RegisterDevice(classId, thi); } -- 2.47.1 From 76ec047eb77f2d3ea33a720e49772ad9904d0b0e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:06:26 -0600 Subject: [PATCH 425/722] misc: chore: Use explicit types in Metal project --- src/Ryujinx.Graphics.Host1x/Host1xDevice.cs | 2 +- .../BackgroundResources.cs | 2 +- src/Ryujinx.Graphics.Metal/BufferHolder.cs | 18 +- src/Ryujinx.Graphics.Metal/BufferManager.cs | 24 +-- .../CommandBufferEncoder.cs | 8 +- .../CommandBufferPool.cs | 22 +-- .../DepthStencilCache.cs | 6 +- src/Ryujinx.Graphics.Metal/EncoderState.cs | 4 +- .../EncoderStateManager.cs | 169 +++++++++--------- src/Ryujinx.Graphics.Metal/FormatTable.cs | 2 +- src/Ryujinx.Graphics.Metal/HardwareInfo.cs | 22 +-- src/Ryujinx.Graphics.Metal/HashTableSlim.cs | 14 +- src/Ryujinx.Graphics.Metal/HelperShader.cs | 104 +++++------ .../IndexBufferState.cs | 2 +- src/Ryujinx.Graphics.Metal/MetalRenderer.cs | 8 +- .../MultiFenceHolder.cs | 8 +- .../PersistentFlushBuffer.cs | 25 +-- src/Ryujinx.Graphics.Metal/Pipeline.cs | 58 +++--- src/Ryujinx.Graphics.Metal/Program.cs | 10 +- .../ResourceLayoutBuilder.cs | 4 +- src/Ryujinx.Graphics.Metal/SamplerHolder.cs | 4 +- src/Ryujinx.Graphics.Metal/StagingBuffer.cs | 14 +- .../State/PipelineState.cs | 26 +-- .../State/PipelineUid.cs | 2 +- src/Ryujinx.Graphics.Metal/StateCache.cs | 4 +- src/Ryujinx.Graphics.Metal/Texture.cs | 60 +++---- .../VertexBufferState.cs | 2 +- src/Ryujinx.Graphics.Metal/Window.cs | 4 +- 28 files changed, 315 insertions(+), 313 deletions(-) diff --git a/src/Ryujinx.Graphics.Host1x/Host1xDevice.cs b/src/Ryujinx.Graphics.Host1x/Host1xDevice.cs index 62fcef348..bf9b14f89 100644 --- a/src/Ryujinx.Graphics.Host1x/Host1xDevice.cs +++ b/src/Ryujinx.Graphics.Host1x/Host1xDevice.cs @@ -46,7 +46,7 @@ namespace Ryujinx.Graphics.Host1x public void RegisterDevice(ClassId classId, IDeviceState device) { - ThiDevice thi = new ThiDevice(classId, device ?? throw new ArgumentNullException(nameof(device)), _syncptIncrMgr); + ThiDevice thi = new(classId, device ?? throw new ArgumentNullException(nameof(device)), _syncptIncrMgr); _devices.RegisterDevice(classId, thi); } diff --git a/src/Ryujinx.Graphics.Metal/BackgroundResources.cs b/src/Ryujinx.Graphics.Metal/BackgroundResources.cs index 8bf6b92bd..e38b877a6 100644 --- a/src/Ryujinx.Graphics.Metal/BackgroundResources.cs +++ b/src/Ryujinx.Graphics.Metal/BackgroundResources.cs @@ -97,7 +97,7 @@ namespace Ryujinx.Graphics.Metal { lock (_resources) { - foreach (var resource in _resources.Values) + foreach (BackgroundResource resource in _resources.Values) { resource.Dispose(); } diff --git a/src/Ryujinx.Graphics.Metal/BufferHolder.cs b/src/Ryujinx.Graphics.Metal/BufferHolder.cs index cc86a403f..5a44dc1fe 100644 --- a/src/Ryujinx.Graphics.Metal/BufferHolder.cs +++ b/src/Ryujinx.Graphics.Metal/BufferHolder.cs @@ -103,7 +103,7 @@ namespace Ryujinx.Graphics.Metal if (_flushFence != null) { - var fence = _flushFence; + FenceHolder fence = _flushFence; Interlocked.Increment(ref _flushWaiting); // Don't wait in the lock. @@ -219,8 +219,8 @@ namespace Ryujinx.Graphics.Metal BufferHolder srcHolder = _renderer.BufferManager.Create(dataSize); srcHolder.SetDataUnchecked(0, data); - var srcBuffer = srcHolder.GetBuffer(); - var dstBuffer = this.GetBuffer(true); + Auto srcBuffer = srcHolder.GetBuffer(); + Auto dstBuffer = this.GetBuffer(true); Copy(cbs.Value, srcBuffer, dstBuffer, 0, offset, dataSize); @@ -262,8 +262,8 @@ namespace Ryujinx.Graphics.Metal int size, bool registerSrcUsage = true) { - var srcBuffer = registerSrcUsage ? src.Get(cbs, srcOffset, size).Value : src.GetUnsafe().Value; - var dstbuffer = dst.Get(cbs, dstOffset, size, true).Value; + MTLBuffer srcBuffer = registerSrcUsage ? src.Get(cbs, srcOffset, size).Value : src.GetUnsafe().Value; + MTLBuffer dstbuffer = dst.Get(cbs, dstOffset, size, true).Value; cbs.Encoders.EnsureBlitEncoder().CopyFromBuffer( srcBuffer, @@ -302,9 +302,9 @@ namespace Ryujinx.Graphics.Metal return null; } - var key = new I8ToI16CacheKey(_renderer); + I8ToI16CacheKey key = new I8ToI16CacheKey(_renderer); - if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out var holder)) + if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder)) { holder = _renderer.BufferManager.Create((size * 2 + 3) & ~3); @@ -325,9 +325,9 @@ namespace Ryujinx.Graphics.Metal return null; } - var key = new TopologyConversionCacheKey(_renderer, pattern, indexSize); + TopologyConversionCacheKey key = new TopologyConversionCacheKey(_renderer, pattern, indexSize); - if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out var holder)) + if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder)) { // The destination index size is always I32. diff --git a/src/Ryujinx.Graphics.Metal/BufferManager.cs b/src/Ryujinx.Graphics.Metal/BufferManager.cs index 07a686223..166f5b4f2 100644 --- a/src/Ryujinx.Graphics.Metal/BufferManager.cs +++ b/src/Ryujinx.Graphics.Metal/BufferManager.cs @@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Metal public BufferHandle Create(nint pointer, int size) { // TODO: This is the wrong Metal method, we need no-copy which SharpMetal isn't giving us. - var buffer = _device.NewBuffer(pointer, (ulong)size, MTLResourceOptions.ResourceStorageModeShared); + MTLBuffer buffer = _device.NewBuffer(pointer, (ulong)size, MTLResourceOptions.ResourceStorageModeShared); if (buffer == IntPtr.Zero) { @@ -74,7 +74,7 @@ namespace Ryujinx.Graphics.Metal return BufferHandle.Null; } - var holder = new BufferHolder(_renderer, _pipeline, buffer, size); + BufferHolder holder = new BufferHolder(_renderer, _pipeline, buffer, size); BufferCount++; @@ -123,7 +123,7 @@ namespace Ryujinx.Graphics.Metal public BufferHolder Create(int size) { - var buffer = _device.NewBuffer((ulong)size, MTLResourceOptions.ResourceStorageModeShared); + MTLBuffer buffer = _device.NewBuffer((ulong)size, MTLResourceOptions.ResourceStorageModeShared); if (buffer != IntPtr.Zero) { @@ -137,7 +137,7 @@ namespace Ryujinx.Graphics.Metal public Auto GetBuffer(BufferHandle handle, bool isWrite, out int size) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { size = holder.Size; return holder.GetBuffer(isWrite); @@ -149,7 +149,7 @@ namespace Ryujinx.Graphics.Metal public Auto GetBuffer(BufferHandle handle, int offset, int size, bool isWrite) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetBuffer(offset, size, isWrite); } @@ -159,7 +159,7 @@ namespace Ryujinx.Graphics.Metal public Auto GetBuffer(BufferHandle handle, bool isWrite) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetBuffer(isWrite); } @@ -169,7 +169,7 @@ namespace Ryujinx.Graphics.Metal public Auto GetBufferI8ToI16(CommandBufferScoped cbs, BufferHandle handle, int offset, int size) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetBufferI8ToI16(cbs, offset, size); } @@ -179,7 +179,7 @@ namespace Ryujinx.Graphics.Metal public Auto GetBufferTopologyConversion(CommandBufferScoped cbs, BufferHandle handle, int offset, int size, IndexBufferPattern pattern, int indexSize) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetBufferTopologyConversion(cbs, offset, size, pattern, indexSize); } @@ -189,7 +189,7 @@ namespace Ryujinx.Graphics.Metal public PinnedSpan GetData(BufferHandle handle, int offset, int size) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetData(offset, size); } @@ -204,7 +204,7 @@ namespace Ryujinx.Graphics.Metal public void SetData(BufferHandle handle, int offset, ReadOnlySpan data, CommandBufferScoped? cbs) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { holder.SetData(offset, data, cbs); } @@ -212,7 +212,7 @@ namespace Ryujinx.Graphics.Metal public void Delete(BufferHandle handle) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { holder.Dispose(); _buffers.Remove((int)Unsafe.As(ref handle)); @@ -228,7 +228,7 @@ namespace Ryujinx.Graphics.Metal { StagingBuffer.Dispose(); - foreach (var buffer in _buffers) + foreach (BufferHolder buffer in _buffers) { buffer.Dispose(); } diff --git a/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs b/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs index ec4150030..c9a337bb0 100644 --- a/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs +++ b/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs @@ -137,7 +137,7 @@ class CommandBufferEncoder { EndCurrentPass(); - var renderCommandEncoder = _encoderFactory.CreateRenderCommandEncoder(); + MTLRenderCommandEncoder renderCommandEncoder = _encoderFactory.CreateRenderCommandEncoder(); CurrentEncoder = renderCommandEncoder; CurrentEncoderType = EncoderType.Render; @@ -149,8 +149,8 @@ class CommandBufferEncoder { EndCurrentPass(); - using var descriptor = new MTLBlitPassDescriptor(); - var blitCommandEncoder = _commandBuffer.BlitCommandEncoder(descriptor); + using MTLBlitPassDescriptor descriptor = new MTLBlitPassDescriptor(); + MTLBlitCommandEncoder blitCommandEncoder = _commandBuffer.BlitCommandEncoder(descriptor); CurrentEncoder = blitCommandEncoder; CurrentEncoderType = EncoderType.Blit; @@ -161,7 +161,7 @@ class CommandBufferEncoder { EndCurrentPass(); - var computeCommandEncoder = _encoderFactory.CreateComputeCommandEncoder(); + MTLComputeCommandEncoder computeCommandEncoder = _encoderFactory.CreateComputeCommandEncoder(); CurrentEncoder = computeCommandEncoder; CurrentEncoderType = EncoderType.Compute; diff --git a/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs b/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs index 5e7576b37..53f11dd08 100644 --- a/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs +++ b/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs @@ -101,7 +101,7 @@ namespace Ryujinx.Graphics.Metal { for (int i = 0; i < _totalCommandBuffers; i++) { - ref var entry = ref _commandBuffers[i]; + ref ReservedCommandBuffer entry = ref _commandBuffers[i]; if (entry.InConsumption) { @@ -117,7 +117,7 @@ namespace Ryujinx.Graphics.Metal { for (int i = 0; i < _totalCommandBuffers; i++) { - ref var entry = ref _commandBuffers[i]; + ref ReservedCommandBuffer entry = ref _commandBuffers[i]; if (entry.InUse) { @@ -129,7 +129,7 @@ namespace Ryujinx.Graphics.Metal public void AddWaitable(int cbIndex, MultiFenceHolder waitable) { - ref var entry = ref _commandBuffers[cbIndex]; + ref ReservedCommandBuffer entry = ref _commandBuffers[cbIndex]; if (waitable.AddFence(cbIndex, entry.Fence)) { entry.Waitables.Add(waitable); @@ -142,7 +142,7 @@ namespace Ryujinx.Graphics.Metal { for (int i = 0; i < _totalCommandBuffers; i++) { - ref var entry = ref _commandBuffers[i]; + ref ReservedCommandBuffer entry = ref _commandBuffers[i]; if (entry.InUse && entry.Fence == fence) { @@ -172,7 +172,7 @@ namespace Ryujinx.Graphics.Metal { int index = _queuedIndexes[_queuedIndexesPtr]; - ref var entry = ref _commandBuffers[index]; + ref ReservedCommandBuffer entry = ref _commandBuffers[index]; if (wait || !entry.InConsumption || entry.Fence.IsSignaled()) { @@ -207,7 +207,7 @@ namespace Ryujinx.Graphics.Metal for (int i = 0; i < _totalCommandBuffers; i++) { - ref var entry = ref _commandBuffers[cursor]; + ref ReservedCommandBuffer entry = ref _commandBuffers[cursor]; if (!entry.InUse && !entry.InConsumption) { @@ -234,7 +234,7 @@ namespace Ryujinx.Graphics.Metal { int cbIndex = cbs.CommandBufferIndex; - ref var entry = ref _commandBuffers[cbIndex]; + ref ReservedCommandBuffer entry = ref _commandBuffers[cbIndex]; Debug.Assert(entry.InUse); Debug.Assert(entry.CommandBuffer.NativePtr == cbs.CommandBuffer.NativePtr); @@ -243,7 +243,7 @@ namespace Ryujinx.Graphics.Metal entry.SubmissionCount++; _inUseCount--; - var commandBuffer = entry.CommandBuffer; + MTLCommandBuffer commandBuffer = entry.CommandBuffer; commandBuffer.Commit(); int ptr = (_queuedIndexesPtr + _queuedCount) % _totalCommandBuffers; @@ -254,7 +254,7 @@ namespace Ryujinx.Graphics.Metal private void WaitAndDecrementRef(int cbIndex) { - ref var entry = ref _commandBuffers[cbIndex]; + ref ReservedCommandBuffer entry = ref _commandBuffers[cbIndex]; if (entry.InConsumption) { @@ -262,12 +262,12 @@ namespace Ryujinx.Graphics.Metal entry.InConsumption = false; } - foreach (var dependant in entry.Dependants) + foreach (IAuto dependant in entry.Dependants) { dependant.DecrementReferenceCount(cbIndex); } - foreach (var waitable in entry.Waitables) + foreach (MultiFenceHolder waitable in entry.Waitables) { waitable.RemoveFence(cbIndex); waitable.RemoveBufferUses(cbIndex); diff --git a/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs b/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs index bb6e4c180..92a24b99d 100644 --- a/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs +++ b/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs @@ -25,7 +25,7 @@ namespace Ryujinx.Graphics.Metal ref StencilUid frontUid = ref descriptor.FrontFace; - using var frontFaceStencil = new MTLStencilDescriptor + using MTLStencilDescriptor frontFaceStencil = new MTLStencilDescriptor { StencilFailureOperation = frontUid.StencilFailureOperation, DepthFailureOperation = frontUid.DepthFailureOperation, @@ -37,7 +37,7 @@ namespace Ryujinx.Graphics.Metal ref StencilUid backUid = ref descriptor.BackFace; - using var backFaceStencil = new MTLStencilDescriptor + using MTLStencilDescriptor backFaceStencil = new MTLStencilDescriptor { StencilFailureOperation = backUid.StencilFailureOperation, DepthFailureOperation = backUid.DepthFailureOperation, @@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.Metal WriteMask = backUid.WriteMask }; - var mtlDescriptor = new MTLDepthStencilDescriptor + MTLDepthStencilDescriptor mtlDescriptor = new MTLDepthStencilDescriptor { DepthCompareFunction = descriptor.DepthCompareFunction, DepthWriteEnabled = descriptor.DepthWriteEnabled diff --git a/src/Ryujinx.Graphics.Metal/EncoderState.cs b/src/Ryujinx.Graphics.Metal/EncoderState.cs index 34de168a6..28b59736a 100644 --- a/src/Ryujinx.Graphics.Metal/EncoderState.cs +++ b/src/Ryujinx.Graphics.Metal/EncoderState.cs @@ -165,7 +165,7 @@ namespace Ryujinx.Graphics.Metal { // Inherit render target related information without causing a render encoder split. - var oldState = new RenderTargetCopy + RenderTargetCopy oldState = new RenderTargetCopy { Scissors = other.Scissors, RenderTargets = other.RenderTargets, @@ -180,7 +180,7 @@ namespace Ryujinx.Graphics.Metal Pipeline.Internal.ColorBlendState = other.Pipeline.Internal.ColorBlendState; Pipeline.DepthStencilFormat = other.Pipeline.DepthStencilFormat; - ref var blendStates = ref Pipeline.Internal.ColorBlendState; + ref Array8 blendStates = ref Pipeline.Internal.ColorBlendState; // Mask out irrelevant attachments. for (int i = 0; i < blendStates.Length; i++) diff --git a/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs b/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs index 169e0142d..bfd9a0348 100644 --- a/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs +++ b/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs @@ -1,4 +1,5 @@ using Ryujinx.Common.Logging; +using Ryujinx.Common.Memory; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Metal.State; using Ryujinx.Graphics.Shader; @@ -124,21 +125,21 @@ namespace Ryujinx.Graphics.Metal public readonly MTLRenderCommandEncoder CreateRenderCommandEncoder() { // Initialise Pass & State - using var renderPassDescriptor = new MTLRenderPassDescriptor(); + using MTLRenderPassDescriptor renderPassDescriptor = new MTLRenderPassDescriptor(); for (int i = 0; i < Constants.MaxColorAttachments; i++) { if (_currentState.RenderTargets[i] is Texture tex) { - var passAttachment = renderPassDescriptor.ColorAttachments.Object((ulong)i); + MTLRenderPassColorAttachmentDescriptor passAttachment = renderPassDescriptor.ColorAttachments.Object((ulong)i); tex.PopulateRenderPassAttachment(passAttachment); passAttachment.LoadAction = _currentState.ClearLoadAction ? MTLLoadAction.Clear : MTLLoadAction.Load; passAttachment.StoreAction = MTLStoreAction.Store; } } - var depthAttachment = renderPassDescriptor.DepthAttachment; - var stencilAttachment = renderPassDescriptor.StencilAttachment; + MTLRenderPassDepthAttachmentDescriptor depthAttachment = renderPassDescriptor.DepthAttachment; + MTLRenderPassStencilAttachmentDescriptor stencilAttachment = renderPassDescriptor.StencilAttachment; if (_currentState.DepthStencil != null) { @@ -177,15 +178,15 @@ namespace Ryujinx.Graphics.Metal } // Initialise Encoder - var renderCommandEncoder = _pipeline.CommandBuffer.RenderCommandEncoder(renderPassDescriptor); + MTLRenderCommandEncoder renderCommandEncoder = _pipeline.CommandBuffer.RenderCommandEncoder(renderPassDescriptor); return renderCommandEncoder; } public readonly MTLComputeCommandEncoder CreateComputeCommandEncoder() { - using var descriptor = new MTLComputePassDescriptor(); - var computeCommandEncoder = _pipeline.CommandBuffer.ComputeCommandEncoder(descriptor); + using MTLComputePassDescriptor descriptor = new MTLComputePassDescriptor(); + MTLComputeCommandEncoder computeCommandEncoder = _pipeline.CommandBuffer.ComputeCommandEncoder(descriptor); return computeCommandEncoder; } @@ -292,17 +293,17 @@ namespace Ryujinx.Graphics.Metal SetScissors(renderCommandEncoder); } - foreach (var resource in _currentState.RenderEncoderBindings.Resources) + foreach (Resource resource in _currentState.RenderEncoderBindings.Resources) { renderCommandEncoder.UseResource(resource.MtlResource, resource.ResourceUsage, resource.Stages); } - foreach (var buffer in _currentState.RenderEncoderBindings.VertexBuffers) + foreach (BufferResource buffer in _currentState.RenderEncoderBindings.VertexBuffers) { renderCommandEncoder.SetVertexBuffer(buffer.Buffer, buffer.Offset, buffer.Binding); } - foreach (var buffer in _currentState.RenderEncoderBindings.FragmentBuffers) + foreach (BufferResource buffer in _currentState.RenderEncoderBindings.FragmentBuffers) { renderCommandEncoder.SetFragmentBuffer(buffer.Buffer, buffer.Offset, buffer.Binding); } @@ -317,12 +318,12 @@ namespace Ryujinx.Graphics.Metal SetComputePipelineState(computeCommandEncoder); } - foreach (var resource in _currentState.ComputeEncoderBindings.Resources) + foreach (Resource resource in _currentState.ComputeEncoderBindings.Resources) { computeCommandEncoder.UseResource(resource.MtlResource, resource.ResourceUsage); } - foreach (var buffer in _currentState.ComputeEncoderBindings.Buffers) + foreach (BufferResource buffer in _currentState.ComputeEncoderBindings.Buffers) { computeCommandEncoder.SetBuffer(buffer.Buffer, buffer.Offset, buffer.Binding); } @@ -350,7 +351,7 @@ namespace Ryujinx.Graphics.Metal return; } - var pipelineState = PipelineState.CreateComputePipeline(_device, _currentState.ComputeProgram); + MTLComputePipelineState pipelineState = PipelineState.CreateComputePipeline(_device, _currentState.ComputeProgram); computeCommandEncoder.SetComputePipelineState(pipelineState); } @@ -418,7 +419,7 @@ namespace Ryujinx.Graphics.Metal public readonly void UpdateRenderTargetColorMasks(ReadOnlySpan componentMask) { - ref var blendState = ref _currentState.Pipeline.Internal.ColorBlendState; + ref Array8 blendState = ref _currentState.Pipeline.Internal.ColorBlendState; for (int i = 0; i < componentMask.Length; i++) { @@ -427,7 +428,7 @@ namespace Ryujinx.Graphics.Metal bool blue = (componentMask[i] & (0x1 << 2)) != 0; bool alpha = (componentMask[i] & (0x1 << 3)) != 0; - var mask = MTLColorWriteMask.None; + MTLColorWriteMask mask = MTLColorWriteMask.None; mask |= red ? MTLColorWriteMask.Red : 0; mask |= green ? MTLColorWriteMask.Green : 0; @@ -480,7 +481,7 @@ namespace Ryujinx.Graphics.Metal // Look for textures that are masked out. ref PipelineState pipeline = ref _currentState.Pipeline; - ref var blendState = ref pipeline.Internal.ColorBlendState; + ref Array8 blendState = ref pipeline.Internal.ColorBlendState; pipeline.ColorBlendAttachmentStateCount = (uint)colors.Length; @@ -491,7 +492,7 @@ namespace Ryujinx.Graphics.Metal continue; } - var mtlMask = blendState[i].WriteMask; + MTLColorWriteMask mtlMask = blendState[i].WriteMask; for (int j = 0; j < i; j++) { @@ -501,7 +502,7 @@ namespace Ryujinx.Graphics.Metal { // Prefer the binding with no write mask. - var mtlMask2 = blendState[j].WriteMask; + MTLColorWriteMask mtlMask2 = blendState[j].WriteMask; if (mtlMask == 0) { @@ -574,7 +575,7 @@ namespace Ryujinx.Graphics.Metal public readonly void UpdateBlendDescriptors(int index, BlendDescriptor blend) { - ref var blendState = ref _currentState.Pipeline.Internal.ColorBlendState[index]; + ref ColorBlendStateUid blendState = ref _currentState.Pipeline.Internal.ColorBlendState[index]; blendState.Enable = blend.Enable; blendState.AlphaBlendOperation = blend.AlphaOp.Convert(); @@ -687,7 +688,7 @@ namespace Ryujinx.Graphics.Metal { for (int i = 0; i < regions.Length; i++) { - var region = regions[i]; + Rectangle region = regions[i]; _currentState.Scissors[i] = new MTLScissorRect { @@ -717,7 +718,7 @@ namespace Ryujinx.Graphics.Metal for (int i = 0; i < viewports.Length; i++) { - var viewport = viewports[i]; + Viewport viewport = viewports[i]; // Y coordinate is inverted _currentState.Viewports[i] = new MTLViewport { @@ -746,7 +747,7 @@ namespace Ryujinx.Graphics.Metal { if (i < vertexBuffers.Length) { - var vertexBuffer = vertexBuffers[i]; + VertexBufferDescriptor vertexBuffer = vertexBuffers[i]; _currentState.VertexBuffers[i] = new VertexBufferState( vertexBuffer.Buffer.Handle, @@ -771,7 +772,7 @@ namespace Ryujinx.Graphics.Metal { foreach (BufferAssignment assignment in buffers) { - var buffer = assignment.Range; + BufferRange buffer = assignment.Range; int index = assignment.Binding; Auto mtlBuffer = buffer.Handle == BufferHandle.Null @@ -788,7 +789,7 @@ namespace Ryujinx.Graphics.Metal { foreach (BufferAssignment assignment in buffers) { - var buffer = assignment.Range; + BufferRange buffer = assignment.Range; int index = assignment.Binding; Auto mtlBuffer = buffer.Handle == BufferHandle.Null @@ -805,7 +806,7 @@ namespace Ryujinx.Graphics.Metal { for (int i = 0; i < buffers.Length; i++) { - var mtlBuffer = buffers[i]; + Auto mtlBuffer = buffers[i]; int index = first + i; _currentState.StorageBufferRefs[index] = new BufferRef(mtlBuffer); @@ -816,7 +817,7 @@ namespace Ryujinx.Graphics.Metal public void UpdateCullMode(bool enable, Face face) { - var dirtyScissor = (face == Face.FrontAndBack) != _currentState.CullBoth; + bool dirtyScissor = (face == Face.FrontAndBack) != _currentState.CullBoth; _currentState.CullMode = enable ? face.Convert() : MTLCullMode.None; _currentState.CullBoth = face == Face.FrontAndBack; @@ -980,8 +981,8 @@ namespace Ryujinx.Graphics.Metal private unsafe void SetScissors(MTLRenderCommandEncoder renderCommandEncoder) { - var isTriangles = (_currentState.Topology == PrimitiveTopology.Triangles) || - (_currentState.Topology == PrimitiveTopology.TriangleStrip); + bool isTriangles = (_currentState.Topology == PrimitiveTopology.Triangles) || + (_currentState.Topology == PrimitiveTopology.TriangleStrip); if (_currentState.CullBoth && isTriangles) { @@ -1017,7 +1018,7 @@ namespace Ryujinx.Graphics.Metal for (int i = 0; i < attribDescriptors.Length; i++) { - ref var attrib = ref pipeline.Internal.VertexAttributes[i]; + ref VertexInputAttributeUid attrib = ref pipeline.Internal.VertexAttributes[i]; if (attribDescriptors[i].IsZero) { @@ -1037,7 +1038,7 @@ namespace Ryujinx.Graphics.Metal for (int i = 0; i < bufferDescriptors.Length; i++) { - ref var layout = ref pipeline.Internal.VertexBindings[i]; + ref VertexInputLayoutUid layout = ref pipeline.Internal.VertexBindings[i]; if ((indexMask & (1u << i)) != 0) { @@ -1069,7 +1070,7 @@ namespace Ryujinx.Graphics.Metal } } - ref var zeroBufLayout = ref pipeline.Internal.VertexBindings[(int)Constants.ZeroBufferIndex]; + ref VertexInputLayoutUid zeroBufLayout = ref pipeline.Internal.VertexBindings[(int)Constants.ZeroBufferIndex]; // Zero buffer if ((indexMask & (1u << (int)Constants.ZeroBufferIndex)) != 0) @@ -1108,7 +1109,7 @@ namespace Ryujinx.Graphics.Metal return; } - var zeroMtlBuffer = autoZeroBuffer.Get(_pipeline.Cbs).Value; + MTLBuffer zeroMtlBuffer = autoZeroBuffer.Get(_pipeline.Cbs).Value; bindings.VertexBuffers.Add(new BufferResource(zeroMtlBuffer, 0, Constants.ZeroBufferIndex)); } @@ -1117,12 +1118,12 @@ namespace Ryujinx.Graphics.Metal ulong gpuAddress = 0; IntPtr nativePtr = IntPtr.Zero; - var range = buffer.Range; - var autoBuffer = buffer.Buffer; + BufferRange? range = buffer.Range; + Auto autoBuffer = buffer.Buffer; if (autoBuffer != null) { - var offset = 0; + int offset = 0; MTLBuffer mtlBuffer; if (range.HasValue) @@ -1144,7 +1145,7 @@ namespace Ryujinx.Graphics.Metal private readonly (ulong gpuAddress, IntPtr nativePtr) AddressForTexture(ref TextureRef texture) { - var storage = texture.Storage; + TextureBase storage = texture.Storage; ulong gpuAddress = 0; IntPtr nativePtr = IntPtr.Zero; @@ -1156,7 +1157,7 @@ namespace Ryujinx.Graphics.Metal textureBuffer.RebuildStorage(false); } - var mtlTexture = storage.GetHandle(); + MTLTexture mtlTexture = storage.GetHandle(); gpuAddress = mtlTexture.GpuResourceID._impl; nativePtr = mtlTexture.NativePtr; @@ -1167,14 +1168,14 @@ namespace Ryujinx.Graphics.Metal private readonly (ulong gpuAddress, IntPtr nativePtr) AddressForImage(ref ImageRef image) { - var storage = image.Storage; + Texture storage = image.Storage; ulong gpuAddress = 0; IntPtr nativePtr = IntPtr.Zero; if (storage != null) { - var mtlTexture = storage.GetHandle(); + MTLTexture mtlTexture = storage.GetHandle(); gpuAddress = mtlTexture.GpuResourceID._impl; nativePtr = mtlTexture.NativePtr; @@ -1192,7 +1193,7 @@ namespace Ryujinx.Graphics.Metal { bufferTexture.RebuildStorage(false); - var mtlTexture = bufferTexture.GetHandle(); + MTLTexture mtlTexture = bufferTexture.GetHandle(); gpuAddress = mtlTexture.GpuResourceID._impl; nativePtr = mtlTexture.NativePtr; @@ -1221,7 +1222,7 @@ namespace Ryujinx.Graphics.Metal private readonly void UpdateAndBind(Program program, uint setIndex, ref readonly RenderEncoderBindings bindings) { - var bindingSegments = program.BindingSegments[setIndex]; + ResourceBindingSegment[] bindingSegments = program.BindingSegments[setIndex]; if (bindingSegments.Length == 0) { @@ -1244,8 +1245,8 @@ namespace Ryujinx.Graphics.Metal Span vertResourceIds = stackalloc ulong[program.ArgumentBufferSizes[setIndex]]; Span fragResourceIds = stackalloc ulong[program.FragArgumentBufferSizes[setIndex]]; - var vertResourceIdIndex = 0; - var fragResourceIdIndex = 0; + int vertResourceIdIndex = 0; + int fragResourceIdIndex = 0; foreach (ResourceBindingSegment segment in bindingSegments) { @@ -1260,7 +1261,7 @@ namespace Ryujinx.Graphics.Metal int index = binding + i; ref BufferRef buffer = ref _currentState.UniformBufferRefs[index]; - var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer); + (ulong gpuAddress, IntPtr nativePtr) = AddressForBuffer(ref buffer); MTLRenderStages renderStages = 0; @@ -1289,7 +1290,7 @@ namespace Ryujinx.Graphics.Metal int index = binding + i; ref BufferRef buffer = ref _currentState.StorageBufferRefs[index]; - var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer); + (ulong gpuAddress, IntPtr nativePtr) = AddressForBuffer(ref buffer); MTLRenderStages renderStages = 0; @@ -1319,8 +1320,8 @@ namespace Ryujinx.Graphics.Metal { int index = binding + i; - ref var texture = ref _currentState.TextureRefs[index]; - var (gpuAddress, nativePtr) = AddressForTexture(ref texture); + ref TextureRef texture = ref _currentState.TextureRefs[index]; + (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref texture); MTLRenderStages renderStages = 0; @@ -1357,17 +1358,17 @@ namespace Ryujinx.Graphics.Metal } else { - var textureArray = _currentState.TextureArrayRefs[binding].Array; + TextureArray textureArray = _currentState.TextureArrayRefs[binding].Array; if (segment.Type != ResourceType.BufferTexture) { - var textures = textureArray.GetTextureRefs(); - var samplers = new Auto[textures.Length]; + TextureRef[] textures = textureArray.GetTextureRefs(); + Auto[] samplers = new Auto[textures.Length]; for (int i = 0; i < textures.Length; i++) { TextureRef texture = textures[i]; - var (gpuAddress, nativePtr) = AddressForTexture(ref texture); + (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref texture); samplers[i] = texture.Sampler; @@ -1392,7 +1393,7 @@ namespace Ryujinx.Graphics.Metal AddResource(nativePtr, MTLResourceUsage.Read, renderStages, in bindings); } - foreach (var sampler in samplers) + foreach (Auto sampler in samplers) { ulong gpuAddress = 0; @@ -1416,12 +1417,12 @@ namespace Ryujinx.Graphics.Metal } else { - var bufferTextures = textureArray.GetBufferTextureRefs(); + TextureBuffer[] bufferTextures = textureArray.GetBufferTextureRefs(); for (int i = 0; i < bufferTextures.Length; i++) { TextureBuffer bufferTexture = bufferTextures[i]; - var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref bufferTexture); + (ulong gpuAddress, IntPtr nativePtr) = AddressForTextureBuffer(ref bufferTexture); MTLRenderStages renderStages = 0; @@ -1453,8 +1454,8 @@ namespace Ryujinx.Graphics.Metal { int index = binding + i; - ref var image = ref _currentState.ImageRefs[index]; - var (gpuAddress, nativePtr) = AddressForImage(ref image); + ref ImageRef image = ref _currentState.ImageRefs[index]; + (ulong gpuAddress, IntPtr nativePtr) = AddressForImage(ref image); MTLRenderStages renderStages = 0; @@ -1477,16 +1478,16 @@ namespace Ryujinx.Graphics.Metal } else { - var imageArray = _currentState.ImageArrayRefs[binding].Array; + ImageArray imageArray = _currentState.ImageArrayRefs[binding].Array; if (segment.Type != ResourceType.BufferImage) { - var images = imageArray.GetTextureRefs(); + TextureRef[] images = imageArray.GetTextureRefs(); for (int i = 0; i < images.Length; i++) { TextureRef image = images[i]; - var (gpuAddress, nativePtr) = AddressForTexture(ref image); + (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref image); MTLRenderStages renderStages = 0; @@ -1509,12 +1510,12 @@ namespace Ryujinx.Graphics.Metal } else { - var bufferImages = imageArray.GetBufferTextureRefs(); + TextureBuffer[] bufferImages = imageArray.GetBufferTextureRefs(); for (int i = 0; i < bufferImages.Length; i++) { TextureBuffer image = bufferImages[i]; - var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref image); + (ulong gpuAddress, IntPtr nativePtr) = AddressForTextureBuffer(ref image); MTLRenderStages renderStages = 0; @@ -1543,21 +1544,21 @@ namespace Ryujinx.Graphics.Metal if (program.ArgumentBufferSizes[setIndex] > 0) { vertArgBuffer.Holder.SetDataUnchecked(vertArgBuffer.Offset, MemoryMarshal.AsBytes(vertResourceIds)); - var mtlVertArgBuffer = _bufferManager.GetBuffer(vertArgBuffer.Handle, false).Get(_pipeline.Cbs).Value; + MTLBuffer mtlVertArgBuffer = _bufferManager.GetBuffer(vertArgBuffer.Handle, false).Get(_pipeline.Cbs).Value; bindings.VertexBuffers.Add(new BufferResource(mtlVertArgBuffer, (uint)vertArgBuffer.Range.Offset, SetIndexToBindingIndex(setIndex))); } if (program.FragArgumentBufferSizes[setIndex] > 0) { fragArgBuffer.Holder.SetDataUnchecked(fragArgBuffer.Offset, MemoryMarshal.AsBytes(fragResourceIds)); - var mtlFragArgBuffer = _bufferManager.GetBuffer(fragArgBuffer.Handle, false).Get(_pipeline.Cbs).Value; + MTLBuffer mtlFragArgBuffer = _bufferManager.GetBuffer(fragArgBuffer.Handle, false).Get(_pipeline.Cbs).Value; bindings.FragmentBuffers.Add(new BufferResource(mtlFragArgBuffer, (uint)fragArgBuffer.Range.Offset, SetIndexToBindingIndex(setIndex))); } } private readonly void UpdateAndBind(Program program, uint setIndex, ref readonly ComputeEncoderBindings bindings) { - var bindingSegments = program.BindingSegments[setIndex]; + ResourceBindingSegment[] bindingSegments = program.BindingSegments[setIndex]; if (bindingSegments.Length == 0) { @@ -1572,7 +1573,7 @@ namespace Ryujinx.Graphics.Metal } Span resourceIds = stackalloc ulong[program.ArgumentBufferSizes[setIndex]]; - var resourceIdIndex = 0; + int resourceIdIndex = 0; foreach (ResourceBindingSegment segment in bindingSegments) { @@ -1587,7 +1588,7 @@ namespace Ryujinx.Graphics.Metal int index = binding + i; ref BufferRef buffer = ref _currentState.UniformBufferRefs[index]; - var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer); + (ulong gpuAddress, IntPtr nativePtr) = AddressForBuffer(ref buffer); if ((segment.Stages & ResourceStages.Compute) != 0) { @@ -1604,7 +1605,7 @@ namespace Ryujinx.Graphics.Metal int index = binding + i; ref BufferRef buffer = ref _currentState.StorageBufferRefs[index]; - var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer); + (ulong gpuAddress, IntPtr nativePtr) = AddressForBuffer(ref buffer); if ((segment.Stages & ResourceStages.Compute) != 0) { @@ -1621,8 +1622,8 @@ namespace Ryujinx.Graphics.Metal { int index = binding + i; - ref var texture = ref _currentState.TextureRefs[index]; - var (gpuAddress, nativePtr) = AddressForTexture(ref texture); + ref TextureRef texture = ref _currentState.TextureRefs[index]; + (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref texture); if ((segment.Stages & ResourceStages.Compute) != 0) { @@ -1640,17 +1641,17 @@ namespace Ryujinx.Graphics.Metal } else { - var textureArray = _currentState.TextureArrayRefs[binding].Array; + TextureArray textureArray = _currentState.TextureArrayRefs[binding].Array; if (segment.Type != ResourceType.BufferTexture) { - var textures = textureArray.GetTextureRefs(); - var samplers = new Auto[textures.Length]; + TextureRef[] textures = textureArray.GetTextureRefs(); + Auto[] samplers = new Auto[textures.Length]; for (int i = 0; i < textures.Length; i++) { TextureRef texture = textures[i]; - var (gpuAddress, nativePtr) = AddressForTexture(ref texture); + (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref texture); if ((segment.Stages & ResourceStages.Compute) != 0) { @@ -1662,7 +1663,7 @@ namespace Ryujinx.Graphics.Metal } } - foreach (var sampler in samplers) + foreach (Auto sampler in samplers) { if (sampler != null) { @@ -1673,12 +1674,12 @@ namespace Ryujinx.Graphics.Metal } else { - var bufferTextures = textureArray.GetBufferTextureRefs(); + TextureBuffer[] bufferTextures = textureArray.GetBufferTextureRefs(); for (int i = 0; i < bufferTextures.Length; i++) { TextureBuffer bufferTexture = bufferTextures[i]; - var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref bufferTexture); + (ulong gpuAddress, IntPtr nativePtr) = AddressForTextureBuffer(ref bufferTexture); if ((segment.Stages & ResourceStages.Compute) != 0) { @@ -1697,8 +1698,8 @@ namespace Ryujinx.Graphics.Metal { int index = binding + i; - ref var image = ref _currentState.ImageRefs[index]; - var (gpuAddress, nativePtr) = AddressForImage(ref image); + ref ImageRef image = ref _currentState.ImageRefs[index]; + (ulong gpuAddress, IntPtr nativePtr) = AddressForImage(ref image); if ((segment.Stages & ResourceStages.Compute) != 0) { @@ -1710,16 +1711,16 @@ namespace Ryujinx.Graphics.Metal } else { - var imageArray = _currentState.ImageArrayRefs[binding].Array; + ImageArray imageArray = _currentState.ImageArrayRefs[binding].Array; if (segment.Type != ResourceType.BufferImage) { - var images = imageArray.GetTextureRefs(); + TextureRef[] images = imageArray.GetTextureRefs(); for (int i = 0; i < images.Length; i++) { TextureRef image = images[i]; - var (gpuAddress, nativePtr) = AddressForTexture(ref image); + (ulong gpuAddress, IntPtr nativePtr) = AddressForTexture(ref image); if ((segment.Stages & ResourceStages.Compute) != 0) { @@ -1731,12 +1732,12 @@ namespace Ryujinx.Graphics.Metal } else { - var bufferImages = imageArray.GetBufferTextureRefs(); + TextureBuffer[] bufferImages = imageArray.GetBufferTextureRefs(); for (int i = 0; i < bufferImages.Length; i++) { TextureBuffer image = bufferImages[i]; - var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref image); + (ulong gpuAddress, IntPtr nativePtr) = AddressForTextureBuffer(ref image); if ((segment.Stages & ResourceStages.Compute) != 0) { @@ -1754,7 +1755,7 @@ namespace Ryujinx.Graphics.Metal if (program.ArgumentBufferSizes[setIndex] > 0) { argBuffer.Holder.SetDataUnchecked(argBuffer.Offset, MemoryMarshal.AsBytes(resourceIds)); - var mtlArgBuffer = _bufferManager.GetBuffer(argBuffer.Handle, false).Get(_pipeline.Cbs).Value; + MTLBuffer mtlArgBuffer = _bufferManager.GetBuffer(argBuffer.Handle, false).Get(_pipeline.Cbs).Value; bindings.Buffers.Add(new BufferResource(mtlArgBuffer, (uint)argBuffer.Range.Offset, SetIndexToBindingIndex(setIndex))); } } diff --git a/src/Ryujinx.Graphics.Metal/FormatTable.cs b/src/Ryujinx.Graphics.Metal/FormatTable.cs index c1f8923f9..10c8b435c 100644 --- a/src/Ryujinx.Graphics.Metal/FormatTable.cs +++ b/src/Ryujinx.Graphics.Metal/FormatTable.cs @@ -170,7 +170,7 @@ namespace Ryujinx.Graphics.Metal public static MTLPixelFormat GetFormat(Format format) { - var mtlFormat = _table[(int)format]; + MTLPixelFormat mtlFormat = _table[(int)format]; if (IsD24S8(format)) { diff --git a/src/Ryujinx.Graphics.Metal/HardwareInfo.cs b/src/Ryujinx.Graphics.Metal/HardwareInfo.cs index 4b3b710f8..413fabf09 100644 --- a/src/Ryujinx.Graphics.Metal/HardwareInfo.cs +++ b/src/Ryujinx.Graphics.Metal/HardwareInfo.cs @@ -45,33 +45,33 @@ namespace Ryujinx.Graphics.Metal public static string GetVendor() { - var serviceDict = IOServiceMatching("IOGPU"); - var service = IOServiceGetMatchingService(IntPtr.Zero, serviceDict); - var cfString = CFStringCreateWithCString(_kCFAllocatorDefault, "vendor-id", _kCFStringEncodingASCII); - var cfProperty = IORegistryEntryCreateCFProperty(service, cfString, _kCFAllocatorDefault, 0); + IntPtr serviceDict = IOServiceMatching("IOGPU"); + IntPtr service = IOServiceGetMatchingService(IntPtr.Zero, serviceDict); + IntPtr cfString = CFStringCreateWithCString(_kCFAllocatorDefault, "vendor-id", _kCFStringEncodingASCII); + IntPtr cfProperty = IORegistryEntryCreateCFProperty(service, cfString, _kCFAllocatorDefault, 0); byte[] buffer = new byte[4]; - var bufferPtr = CFDataGetBytePtr(cfProperty); + IntPtr bufferPtr = CFDataGetBytePtr(cfProperty); Marshal.Copy(bufferPtr, buffer, 0, buffer.Length); - var vendorId = BitConverter.ToUInt32(buffer); + uint vendorId = BitConverter.ToUInt32(buffer); return GetNameFromId(vendorId); } public static string GetModel() { - var serviceDict = IOServiceMatching("IOGPU"); - var service = IOServiceGetMatchingService(IntPtr.Zero, serviceDict); - var cfString = CFStringCreateWithCString(_kCFAllocatorDefault, "model", _kCFStringEncodingASCII); - var cfProperty = IORegistryEntryCreateCFProperty(service, cfString, _kCFAllocatorDefault, 0); + IntPtr serviceDict = IOServiceMatching("IOGPU"); + IntPtr service = IOServiceGetMatchingService(IntPtr.Zero, serviceDict); + IntPtr cfString = CFStringCreateWithCString(_kCFAllocatorDefault, "model", _kCFStringEncodingASCII); + IntPtr cfProperty = IORegistryEntryCreateCFProperty(service, cfString, _kCFAllocatorDefault, 0); char[] buffer = new char[64]; IntPtr bufferPtr = Marshal.AllocHGlobal(buffer.Length); if (CFStringGetCString(cfProperty, bufferPtr, buffer.Length, _kCFStringEncodingASCII)) { - var model = Marshal.PtrToStringUTF8(bufferPtr); + string model = Marshal.PtrToStringUTF8(bufferPtr); Marshal.FreeHGlobal(bufferPtr); return model; } diff --git a/src/Ryujinx.Graphics.Metal/HashTableSlim.cs b/src/Ryujinx.Graphics.Metal/HashTableSlim.cs index a27a53d47..34f38ee24 100644 --- a/src/Ryujinx.Graphics.Metal/HashTableSlim.cs +++ b/src/Ryujinx.Graphics.Metal/HashTableSlim.cs @@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Metal public void Add(ref TKey key, TValue value) { - var entry = new Entry + Entry entry = new() { Hash = key.GetHashCode(), Key = key, @@ -75,7 +75,7 @@ namespace Ryujinx.Graphics.Metal int hashCode = key.GetHashCode(); int bucketIndex = hashCode & TotalBucketsMask; - ref var bucket = ref _hashTable[bucketIndex]; + ref Bucket bucket = ref _hashTable[bucketIndex]; if (bucket.Entries != null) { int index = bucket.Length; @@ -102,11 +102,11 @@ namespace Ryujinx.Graphics.Metal { int hashCode = key.GetHashCode(); - ref var bucket = ref _hashTable[hashCode & TotalBucketsMask]; - var entries = bucket.AsSpan(); + ref Bucket bucket = ref _hashTable[hashCode & TotalBucketsMask]; + Span entries = bucket.AsSpan(); for (int i = 0; i < entries.Length; i++) { - ref var entry = ref entries[i]; + ref Entry entry = ref entries[i]; if (entry.Hash == hashCode && entry.Key.Equals(ref key)) { @@ -124,10 +124,10 @@ namespace Ryujinx.Graphics.Metal { int hashCode = key.GetHashCode(); - var entries = _hashTable[hashCode & TotalBucketsMask].AsSpan(); + Span entries = _hashTable[hashCode & TotalBucketsMask].AsSpan(); for (int i = 0; i < entries.Length; i++) { - ref var entry = ref entries[i]; + ref Entry entry = ref entries[i]; if (entry.Hash == hashCode && entry.Key.Equals(ref key)) { diff --git a/src/Ryujinx.Graphics.Metal/HelperShader.cs b/src/Ryujinx.Graphics.Metal/HelperShader.cs index 53f503207..e72ab6991 100644 --- a/src/Ryujinx.Graphics.Metal/HelperShader.cs +++ b/src/Ryujinx.Graphics.Metal/HelperShader.cs @@ -50,58 +50,58 @@ namespace Ryujinx.Graphics.Metal _samplerNearest = new SamplerHolder(renderer, _device, SamplerCreateInfo.Create(MinFilter.Nearest, MagFilter.Nearest)); _samplerLinear = new SamplerHolder(renderer, _device, SamplerCreateInfo.Create(MinFilter.Linear, MagFilter.Linear)); - var blitResourceLayout = new ResourceLayoutBuilder() + ResourceLayout blitResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Vertex, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Fragment, ResourceType.TextureAndSampler, 0).Build(); - var blitSource = ReadMsl("Blit.metal"); + string blitSource = ReadMsl("Blit.metal"); - var blitSourceF = blitSource.Replace("FORMAT", "float", StringComparison.Ordinal); + string blitSourceF = blitSource.Replace("FORMAT", "float", StringComparison.Ordinal); _programColorBlitF = new Program(renderer, device, [ new ShaderSource(blitSourceF, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl) ], blitResourceLayout); - var blitSourceI = blitSource.Replace("FORMAT", "int"); + string blitSourceI = blitSource.Replace("FORMAT", "int"); _programColorBlitI = new Program(renderer, device, [ new ShaderSource(blitSourceI, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(blitSourceI, ShaderStage.Vertex, TargetLanguage.Msl) ], blitResourceLayout); - var blitSourceU = blitSource.Replace("FORMAT", "uint"); + string blitSourceU = blitSource.Replace("FORMAT", "uint"); _programColorBlitU = new Program(renderer, device, [ new ShaderSource(blitSourceU, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(blitSourceU, ShaderStage.Vertex, TargetLanguage.Msl) ], blitResourceLayout); - var blitMsSource = ReadMsl("BlitMs.metal"); + string blitMsSource = ReadMsl("BlitMs.metal"); - var blitMsSourceF = blitMsSource.Replace("FORMAT", "float"); + string blitMsSourceF = blitMsSource.Replace("FORMAT", "float"); _programColorBlitMsF = new Program(renderer, device, [ new ShaderSource(blitMsSourceF, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(blitMsSourceF, ShaderStage.Vertex, TargetLanguage.Msl) ], blitResourceLayout); - var blitMsSourceI = blitMsSource.Replace("FORMAT", "int"); + string blitMsSourceI = blitMsSource.Replace("FORMAT", "int"); _programColorBlitMsI = new Program(renderer, device, [ new ShaderSource(blitMsSourceI, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(blitMsSourceI, ShaderStage.Vertex, TargetLanguage.Msl) ], blitResourceLayout); - var blitMsSourceU = blitMsSource.Replace("FORMAT", "uint"); + string blitMsSourceU = blitMsSource.Replace("FORMAT", "uint"); _programColorBlitMsU = new Program(renderer, device, [ new ShaderSource(blitMsSourceU, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(blitMsSourceU, ShaderStage.Vertex, TargetLanguage.Msl) ], blitResourceLayout); - var colorClearResourceLayout = new ResourceLayoutBuilder() + ResourceLayout colorClearResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Fragment, ResourceType.UniformBuffer, 0).Build(); - var colorClearSource = ReadMsl("ColorClear.metal"); + string colorClearSource = ReadMsl("ColorClear.metal"); for (int i = 0; i < Constants.MaxColorAttachments; i++) { - var crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "float"); + string crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "float"); _programsColorClearF.Add(new Program(renderer, device, [ new ShaderSource(crntSource, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(crntSource, ShaderStage.Vertex, TargetLanguage.Msl) @@ -110,7 +110,7 @@ namespace Ryujinx.Graphics.Metal for (int i = 0; i < Constants.MaxColorAttachments; i++) { - var crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "int"); + string crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "int"); _programsColorClearI.Add(new Program(renderer, device, [ new ShaderSource(crntSource, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(crntSource, ShaderStage.Vertex, TargetLanguage.Msl) @@ -119,68 +119,68 @@ namespace Ryujinx.Graphics.Metal for (int i = 0; i < Constants.MaxColorAttachments; i++) { - var crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "uint"); + string crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "uint"); _programsColorClearU.Add(new Program(renderer, device, [ new ShaderSource(crntSource, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(crntSource, ShaderStage.Vertex, TargetLanguage.Msl) ], colorClearResourceLayout)); } - var depthStencilClearSource = ReadMsl("DepthStencilClear.metal"); + string depthStencilClearSource = ReadMsl("DepthStencilClear.metal"); _programDepthStencilClear = new Program(renderer, device, [ new ShaderSource(depthStencilClearSource, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(depthStencilClearSource, ShaderStage.Vertex, TargetLanguage.Msl) ], colorClearResourceLayout); - var strideChangeResourceLayout = new ResourceLayoutBuilder() + ResourceLayout strideChangeResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build(); - var strideChangeSource = ReadMsl("ChangeBufferStride.metal"); + string strideChangeSource = ReadMsl("ChangeBufferStride.metal"); _programStrideChange = new Program(renderer, device, [ new ShaderSource(strideChangeSource, ShaderStage.Compute, TargetLanguage.Msl) ], strideChangeResourceLayout, new ComputeSize(64, 1, 1)); - var convertD32S8ToD24S8ResourceLayout = new ResourceLayoutBuilder() + ResourceLayout convertD32S8ToD24S8ResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build(); - var convertD32S8ToD24S8Source = ReadMsl("ConvertD32S8ToD24S8.metal"); + string convertD32S8ToD24S8Source = ReadMsl("ConvertD32S8ToD24S8.metal"); _programConvertD32S8ToD24S8 = new Program(renderer, device, [ new ShaderSource(convertD32S8ToD24S8Source, ShaderStage.Compute, TargetLanguage.Msl) ], convertD32S8ToD24S8ResourceLayout, new ComputeSize(64, 1, 1)); - var convertIndexBufferLayout = new ResourceLayoutBuilder() + ResourceLayout convertIndexBufferLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 3).Build(); - var convertIndexBufferSource = ReadMsl("ConvertIndexBuffer.metal"); + string convertIndexBufferSource = ReadMsl("ConvertIndexBuffer.metal"); _programConvertIndexBuffer = new Program(renderer, device, [ new ShaderSource(convertIndexBufferSource, ShaderStage.Compute, TargetLanguage.Msl) ], convertIndexBufferLayout, new ComputeSize(16, 1, 1)); - var depthBlitSource = ReadMsl("DepthBlit.metal"); + string depthBlitSource = ReadMsl("DepthBlit.metal"); _programDepthBlit = new Program(renderer, device, [ new ShaderSource(depthBlitSource, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl) ], blitResourceLayout); - var depthBlitMsSource = ReadMsl("DepthBlitMs.metal"); + string depthBlitMsSource = ReadMsl("DepthBlitMs.metal"); _programDepthBlitMs = new Program(renderer, device, [ new ShaderSource(depthBlitMsSource, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl) ], blitResourceLayout); - var stencilBlitSource = ReadMsl("StencilBlit.metal"); + string stencilBlitSource = ReadMsl("StencilBlit.metal"); _programStencilBlit = new Program(renderer, device, [ new ShaderSource(stencilBlitSource, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl) ], blitResourceLayout); - var stencilBlitMsSource = ReadMsl("StencilBlitMs.metal"); + string stencilBlitMsSource = ReadMsl("StencilBlitMs.metal"); _programStencilBlitMs = new Program(renderer, device, [ new ShaderSource(stencilBlitMsSource, ShaderStage.Fragment, TargetLanguage.Msl), new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl) @@ -189,7 +189,7 @@ namespace Ryujinx.Graphics.Metal private static string ReadMsl(string fileName) { - var msl = EmbeddedResources.ReadAllText(string.Join('/', ShadersSourcePath, fileName)); + string msl = EmbeddedResources.ReadAllText(string.Join('/', ShadersSourcePath, fileName)); #pragma warning disable IDE0055 // Disable formatting msl = msl.Replace("CONSTANT_BUFFERS_INDEX", $"{Constants.ConstantBuffersIndex}") @@ -214,7 +214,7 @@ namespace Ryujinx.Graphics.Metal const int RegionBufferSize = 16; - var sampler = linearFilter ? _samplerLinear : _samplerNearest; + ISampler sampler = linearFilter ? _samplerLinear : _samplerNearest; _pipeline.SetTextureAndSampler(ShaderStage.Fragment, 0, src, sampler); @@ -235,11 +235,11 @@ namespace Ryujinx.Graphics.Metal (region[2], region[3]) = (region[3], region[2]); } - using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, RegionBufferSize); + using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(cbs, RegionBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, region); _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); - var rect = new Rectangle( + Rectangle rect = new Rectangle( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -266,7 +266,7 @@ namespace Ryujinx.Graphics.Metal return; } - var debugGroupName = "Blit Color "; + string debugGroupName = "Blit Color "; if (src.Info.Target.IsMultisample()) { @@ -359,13 +359,13 @@ namespace Ryujinx.Graphics.Metal (region[2], region[3]) = (region[3], region[2]); } - using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, RegionBufferSize); + using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(cbs, RegionBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, region); _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); Span viewports = stackalloc Viewport[16]; - var rect = new Rectangle( + Rectangle rect = new Rectangle( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -400,7 +400,7 @@ namespace Ryujinx.Graphics.Metal Format.D32FloatS8Uint or Format.S8UintD24Unorm) { - var depthTexture = CreateDepthOrStencilView(src, DepthStencilMode.Depth); + Texture depthTexture = CreateDepthOrStencilView(src, DepthStencilMode.Depth); BlitDepthStencilDraw(depthTexture, isDepth: true); @@ -416,7 +416,7 @@ namespace Ryujinx.Graphics.Metal Format.D32FloatS8Uint or Format.S8UintD24Unorm) { - var stencilTexture = CreateDepthOrStencilView(src, DepthStencilMode.Stencil); + Texture stencilTexture = CreateDepthOrStencilView(src, DepthStencilMode.Stencil); BlitDepthStencilDraw(stencilTexture, isDepth: false); @@ -494,7 +494,7 @@ namespace Ryujinx.Graphics.Metal Extents2DF dstRegion) { // Save current state - var state = _pipeline.SavePredrawState(); + PredrawState state = _pipeline.SavePredrawState(); _pipeline.SetFaceCulling(false, Face.Front); _pipeline.SetStencilTest(new StencilTestDescriptor()); @@ -521,13 +521,13 @@ namespace Ryujinx.Graphics.Metal (region[2], region[3]) = (region[3], region[2]); } - var bufferHandle = _renderer.BufferManager.CreateWithHandle(RegionBufferSize); + BufferHandle bufferHandle = _renderer.BufferManager.CreateWithHandle(RegionBufferSize); _renderer.BufferManager.SetData(bufferHandle, 0, region); _pipeline.SetUniformBuffers([new BufferAssignment(0, new BufferRange(bufferHandle, 0, RegionBufferSize))]); Span viewports = stackalloc Viewport[16]; - var rect = new Rectangle( + Rectangle rect = new Rectangle( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -569,8 +569,8 @@ namespace Ryujinx.Graphics.Metal { int elems = size / stride; - var srcBuffer = src.GetBuffer(); - var dstBuffer = dst.GetBuffer(); + Auto srcBuffer = src.GetBuffer(); + Auto dstBuffer = dst.GetBuffer(); const int ParamsBufferSize = 4 * sizeof(int); @@ -584,7 +584,7 @@ namespace Ryujinx.Graphics.Metal shaderParams[2] = size; shaderParams[3] = srcOffset; - using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize); + using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, shaderParams); _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); @@ -605,7 +605,7 @@ namespace Ryujinx.Graphics.Metal { int inSize = pixelCount * 2 * sizeof(int); - var srcBuffer = src.GetBuffer(); + Auto srcBuffer = src.GetBuffer(); const int ParamsBufferSize = sizeof(int) * 2; @@ -617,7 +617,7 @@ namespace Ryujinx.Graphics.Metal shaderParams[0] = pixelCount; shaderParams[1] = dstOffset; - using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize); + using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, shaderParams); _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); @@ -648,8 +648,8 @@ namespace Ryujinx.Graphics.Metal int primitiveCount = pattern.GetPrimitiveCount(indexCount); int outputIndexSize = 4; - var srcBuffer = src.GetBuffer(); - var dstBuffer = dst.GetBuffer(); + Auto srcBuffer = src.GetBuffer(); + Auto dstBuffer = dst.GetBuffer(); const int ParamsBufferSize = 16 * sizeof(int); @@ -669,7 +669,7 @@ namespace Ryujinx.Graphics.Metal pattern.OffsetIndex.CopyTo(shaderParams[..pattern.OffsetIndex.Length]); - using var patternScoped = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize); + using ScopedTemporaryBuffer patternScoped = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize); patternScoped.Holder.SetDataUnchecked(patternScoped.Offset, shaderParams); Span> sbRanges = new Auto[2]; @@ -707,7 +707,7 @@ namespace Ryujinx.Graphics.Metal // TODO: Flush - using var buffer = _renderer.BufferManager.ReserveOrCreate(_pipeline.Cbs, ClearColorBufferSize); + using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_pipeline.Cbs, ClearColorBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, clearColor); _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); @@ -726,7 +726,7 @@ namespace Ryujinx.Graphics.Metal Span componentMasks = stackalloc uint[index + 1]; componentMasks[index] = componentMask; - var debugGroupName = "Clear Color "; + string debugGroupName = "Clear Color "; if (format.IsSint()) { @@ -768,7 +768,7 @@ namespace Ryujinx.Graphics.Metal { // Keep original scissor DirtyFlags clearFlags = DirtyFlags.All & (~DirtyFlags.Scissors); - var helperScissors = _helperShaderState.Scissors; + MTLScissorRect[] helperScissors = _helperShaderState.Scissors; // Save current state EncoderState originalState = _pipeline.SwapState(_helperShaderState, clearFlags, false); @@ -778,7 +778,7 @@ namespace Ryujinx.Graphics.Metal const int ClearDepthBufferSize = 16; - using var buffer = _renderer.BufferManager.ReserveOrCreate(_pipeline.Cbs, ClearDepthBufferSize); + using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_pipeline.Cbs, ClearDepthBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, new ReadOnlySpan(ref depthValue)); _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); @@ -844,17 +844,17 @@ namespace Ryujinx.Graphics.Metal _programColorBlitMsI.Dispose(); _programColorBlitMsU.Dispose(); - foreach (var programColorClear in _programsColorClearF) + foreach (IProgram programColorClear in _programsColorClearF) { programColorClear.Dispose(); } - foreach (var programColorClear in _programsColorClearU) + foreach (IProgram programColorClear in _programsColorClearU) { programColorClear.Dispose(); } - foreach (var programColorClear in _programsColorClearI) + foreach (IProgram programColorClear in _programsColorClearI) { programColorClear.Dispose(); } diff --git a/src/Ryujinx.Graphics.Metal/IndexBufferState.cs b/src/Ryujinx.Graphics.Metal/IndexBufferState.cs index 411df9685..02c9ff9ef 100644 --- a/src/Ryujinx.Graphics.Metal/IndexBufferState.cs +++ b/src/Ryujinx.Graphics.Metal/IndexBufferState.cs @@ -76,7 +76,7 @@ namespace Ryujinx.Graphics.Metal int firstIndexOffset = firstIndex * indexSize; - var autoBuffer = renderer.BufferManager.GetBufferTopologyConversion(cbs, _handle, _offset + firstIndexOffset, indexCount * indexSize, pattern, indexSize); + Auto autoBuffer = renderer.BufferManager.GetBufferTopologyConversion(cbs, _handle, _offset + firstIndexOffset, indexCount * indexSize, pattern, indexSize); int size = convertedCount * 4; diff --git a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs index 7afd30886..cfda31e66 100644 --- a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs +++ b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs @@ -61,7 +61,7 @@ namespace Ryujinx.Graphics.Metal public void Initialize(GraphicsDebugLevel logLevel) { - var layer = _getMetalLayer(); + CAMetalLayer layer = _getMetalLayer(); layer.Device = _device; layer.FramebufferOnly = false; @@ -253,7 +253,7 @@ namespace Ryujinx.Graphics.Metal public ICounterEvent ReportCounter(CounterType type, EventHandler resultHandler, float divisor, bool hostReserved) { // https://developer.apple.com/documentation/metal/gpu_counters_and_counter_sample_buffers/creating_a_counter_sample_buffer_to_store_a_gpu_s_counter_data_during_a_pass?language=objc - var counterEvent = new CounterEvent(); + CounterEvent counterEvent = new CounterEvent(); resultHandler?.Invoke(counterEvent, type == CounterType.SamplesPassed ? (ulong)1 : 0); return counterEvent; } @@ -295,12 +295,12 @@ namespace Ryujinx.Graphics.Metal { BackgroundResources.Dispose(); - foreach (var program in Programs) + foreach (Program program in Programs) { program.Dispose(); } - foreach (var sampler in Samplers) + foreach (SamplerHolder sampler in Samplers) { sampler.Dispose(); } diff --git a/src/Ryujinx.Graphics.Metal/MultiFenceHolder.cs b/src/Ryujinx.Graphics.Metal/MultiFenceHolder.cs index cd5ad08ba..89ae1fa77 100644 --- a/src/Ryujinx.Graphics.Metal/MultiFenceHolder.cs +++ b/src/Ryujinx.Graphics.Metal/MultiFenceHolder.cs @@ -189,14 +189,14 @@ namespace Ryujinx.Graphics.Metal if (indefinite) { - foreach (var fence in fences) + foreach (MTLCommandBuffer fence in fences) { fence.WaitUntilCompleted(); } } else { - foreach (var fence in fences) + foreach (MTLCommandBuffer fence in fences) { if (fence.Status != MTLCommandBufferStatus.Completed) { @@ -224,7 +224,7 @@ namespace Ryujinx.Graphics.Metal for (int i = 0; i < _fences.Length; i++) { - var fence = _fences[i]; + FenceHolder fence = _fences[i]; if (fence != null) { @@ -248,7 +248,7 @@ namespace Ryujinx.Graphics.Metal for (int i = 0; i < _fences.Length; i++) { - var fence = _fences[i]; + FenceHolder fence = _fences[i]; if (fence != null && _bufferUsageBitmap.OverlapsWith(i, offset, size)) { diff --git a/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs b/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs index fa3df47db..fc79a40a9 100644 --- a/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs +++ b/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs @@ -1,4 +1,5 @@ using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; using System; using System.Runtime.Versioning; @@ -18,7 +19,7 @@ namespace Ryujinx.Graphics.Metal private BufferHolder ResizeIfNeeded(int size) { - var flushStorage = _flushStorage; + BufferHolder flushStorage = _flushStorage; if (flushStorage == null || size > _flushStorage.Size) { @@ -33,13 +34,13 @@ namespace Ryujinx.Graphics.Metal public Span GetBufferData(CommandBufferPool cbp, BufferHolder buffer, int offset, int size) { - var flushStorage = ResizeIfNeeded(size); + BufferHolder flushStorage = ResizeIfNeeded(size); Auto srcBuffer; - using (var cbs = cbp.Rent()) + using (CommandBufferScoped cbs = cbp.Rent()) { srcBuffer = buffer.GetBuffer(); - var dstBuffer = flushStorage.GetBuffer(); + Auto dstBuffer = flushStorage.GetBuffer(); if (srcBuffer.TryIncrementReferenceCount()) { @@ -61,12 +62,12 @@ namespace Ryujinx.Graphics.Metal { TextureCreateInfo info = view.Info; - var flushStorage = ResizeIfNeeded(size); + BufferHolder flushStorage = ResizeIfNeeded(size); - using (var cbs = cbp.Rent()) + using (CommandBufferScoped cbs = cbp.Rent()) { - var buffer = flushStorage.GetBuffer().Get(cbs).Value; - var image = view.GetHandle(); + MTLBuffer buffer = flushStorage.GetBuffer().Get(cbs).Value; + MTLTexture image = view.GetHandle(); view.CopyFromOrToBuffer(cbs, buffer, image, size, true, 0, 0, info.GetLayers(), info.Levels, singleSlice: false); } @@ -77,12 +78,12 @@ namespace Ryujinx.Graphics.Metal public Span GetTextureData(CommandBufferPool cbp, Texture view, int size, int layer, int level) { - var flushStorage = ResizeIfNeeded(size); + BufferHolder flushStorage = ResizeIfNeeded(size); - using (var cbs = cbp.Rent()) + using (CommandBufferScoped cbs = cbp.Rent()) { - var buffer = flushStorage.GetBuffer().Get(cbs).Value; - var image = view.GetHandle(); + MTLBuffer buffer = flushStorage.GetBuffer().Get(cbs).Value; + MTLTexture image = view.GetHandle(); view.CopyFromOrToBuffer(cbs, buffer, image, size, true, layer, level, 1, 1, singleSlice: true); } diff --git a/src/Ryujinx.Graphics.Metal/Pipeline.cs b/src/Ryujinx.Graphics.Metal/Pipeline.cs index 113974061..d7fbebada 100644 --- a/src/Ryujinx.Graphics.Metal/Pipeline.cs +++ b/src/Ryujinx.Graphics.Metal/Pipeline.cs @@ -149,8 +149,8 @@ namespace Ryujinx.Graphics.Metal public void Present(CAMetalDrawable drawable, Texture src, Extents2D srcRegion, Extents2D dstRegion, bool isLinear) { // TODO: Clean this up - var textureInfo = new TextureCreateInfo((int)drawable.Texture.Width, (int)drawable.Texture.Height, (int)drawable.Texture.Depth, (int)drawable.Texture.MipmapLevelCount, (int)drawable.Texture.SampleCount, 0, 0, 0, Format.B8G8R8A8Unorm, 0, Target.Texture2D, SwizzleComponent.Red, SwizzleComponent.Green, SwizzleComponent.Blue, SwizzleComponent.Alpha); - var dst = new Texture(_device, _renderer, this, textureInfo, drawable.Texture, 0, 0); + TextureCreateInfo textureInfo = new TextureCreateInfo((int)drawable.Texture.Width, (int)drawable.Texture.Height, (int)drawable.Texture.Depth, (int)drawable.Texture.MipmapLevelCount, (int)drawable.Texture.SampleCount, 0, 0, 0, Format.B8G8R8A8Unorm, 0, Target.Texture2D, SwizzleComponent.Red, SwizzleComponent.Green, SwizzleComponent.Blue, SwizzleComponent.Alpha); + Texture dst = new Texture(_device, _renderer, this, textureInfo, drawable.Texture, 0, 0); _renderer.HelperShader.BlitColor(Cbs, src, dst, srcRegion, dstRegion, isLinear, true); @@ -248,14 +248,14 @@ namespace Ryujinx.Graphics.Metal { case EncoderType.Render: { - var scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets; + MTLBarrierScope scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets; MTLRenderStages stages = MTLRenderStages.RenderStageVertex | MTLRenderStages.RenderStageFragment; Encoders.RenderEncoder.MemoryBarrier(scope, stages, stages); break; } case EncoderType.Compute: { - var scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets; + MTLBarrierScope scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets; Encoders.ComputeEncoder.MemoryBarrier(scope); break; } @@ -264,9 +264,9 @@ namespace Ryujinx.Graphics.Metal public void ClearBuffer(BufferHandle destination, int offset, int size, uint value) { - var blitCommandEncoder = GetOrCreateBlitEncoder(); + MTLBlitCommandEncoder blitCommandEncoder = GetOrCreateBlitEncoder(); - var mtlBuffer = _renderer.BufferManager.GetBuffer(destination, offset, size, true).Get(Cbs, offset, size, true).Value; + MTLBuffer mtlBuffer = _renderer.BufferManager.GetBuffer(destination, offset, size, true).Get(Cbs, offset, size, true).Value; // Might need a closer look, range's count, lower, and upper bound // must be a multiple of 4 @@ -282,7 +282,7 @@ namespace Ryujinx.Graphics.Metal public void ClearRenderTargetColor(int index, int layer, int layerCount, uint componentMask, ColorF color) { float[] colors = [color.Red, color.Green, color.Blue, color.Alpha]; - var dst = _encoderStateManager.RenderTargets[index]; + Texture dst = _encoderStateManager.RenderTargets[index]; // TODO: Remove workaround for Wonder which has an invalid texture due to unsupported format if (dst == null) @@ -296,7 +296,7 @@ namespace Ryujinx.Graphics.Metal public void ClearRenderTargetDepthStencil(int layer, int layerCount, float depthValue, bool depthMask, int stencilValue, int stencilMask) { - var depthStencil = _encoderStateManager.DepthStencil; + Texture depthStencil = _encoderStateManager.DepthStencil; if (depthStencil == null) { @@ -313,16 +313,16 @@ namespace Ryujinx.Graphics.Metal public void CopyBuffer(BufferHandle src, BufferHandle dst, int srcOffset, int dstOffset, int size) { - var srcBuffer = _renderer.BufferManager.GetBuffer(src, srcOffset, size, false); - var dstBuffer = _renderer.BufferManager.GetBuffer(dst, dstOffset, size, true); + Auto srcBuffer = _renderer.BufferManager.GetBuffer(src, srcOffset, size, false); + Auto dstBuffer = _renderer.BufferManager.GetBuffer(dst, dstOffset, size, true); BufferHolder.Copy(Cbs, srcBuffer, dstBuffer, srcOffset, dstOffset, size); } public void PushDebugGroup(string name) { - var encoder = Encoders.CurrentEncoder; - var debugGroupName = StringHelper.NSString(name); + MTLCommandEncoder? encoder = Encoders.CurrentEncoder; + NSString debugGroupName = StringHelper.NSString(name); if (encoder == null) { @@ -345,7 +345,7 @@ namespace Ryujinx.Graphics.Metal public void PopDebugGroup() { - var encoder = Encoders.CurrentEncoder; + MTLCommandEncoder? encoder = Encoders.CurrentEncoder; if (encoder == null) { @@ -373,7 +373,7 @@ namespace Ryujinx.Graphics.Metal public void DispatchCompute(int groupsX, int groupsY, int groupsZ, string debugGroupName) { - var computeCommandEncoder = GetOrCreateComputeEncoder(true); + MTLComputeCommandEncoder computeCommandEncoder = GetOrCreateComputeEncoder(true); ComputeSize localSize = _encoderStateManager.ComputeLocalSize; @@ -404,17 +404,17 @@ namespace Ryujinx.Graphics.Metal return; } - var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); + MTLPrimitiveType primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); if (TopologyUnsupported(_encoderStateManager.Topology)) { - var pattern = GetIndexBufferPattern(); + IndexBufferPattern pattern = GetIndexBufferPattern(); BufferHandle handle = pattern.GetRepeatingBuffer(vertexCount, out int indexCount); - var buffer = _renderer.BufferManager.GetBuffer(handle, false); - var mtlBuffer = buffer.Get(Cbs, 0, indexCount * sizeof(int)).Value; + Auto buffer = _renderer.BufferManager.GetBuffer(handle, false); + MTLBuffer mtlBuffer = buffer.Get(Cbs, 0, indexCount * sizeof(int)).Value; - var renderCommandEncoder = GetOrCreateRenderEncoder(true); + MTLRenderCommandEncoder renderCommandEncoder = GetOrCreateRenderEncoder(true); renderCommandEncoder.DrawIndexedPrimitives( primitiveType, @@ -425,7 +425,7 @@ namespace Ryujinx.Graphics.Metal } else { - var renderCommandEncoder = GetOrCreateRenderEncoder(true); + MTLRenderCommandEncoder renderCommandEncoder = GetOrCreateRenderEncoder(true); if (debugGroupName != String.Empty) { @@ -488,11 +488,11 @@ namespace Ryujinx.Graphics.Metal MTLIndexType type; int finalIndexCount = indexCount; - var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); + MTLPrimitiveType primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); if (TopologyUnsupported(_encoderStateManager.Topology)) { - var pattern = GetIndexBufferPattern(); + IndexBufferPattern pattern = GetIndexBufferPattern(); int convertedCount = pattern.GetConvertedCount(indexCount); finalIndexCount = convertedCount; @@ -506,7 +506,7 @@ namespace Ryujinx.Graphics.Metal if (mtlBuffer.NativePtr != IntPtr.Zero) { - var renderCommandEncoder = GetOrCreateRenderEncoder(true); + MTLRenderCommandEncoder renderCommandEncoder = GetOrCreateRenderEncoder(true); renderCommandEncoder.DrawIndexedPrimitives( primitiveType, @@ -533,17 +533,17 @@ namespace Ryujinx.Graphics.Metal Logger.Warning?.Print(LogClass.Gpu, $"Drawing indexed with unsupported topology: {_encoderStateManager.Topology}"); } - var buffer = _renderer.BufferManager + MTLBuffer buffer = _renderer.BufferManager .GetBuffer(indirectBuffer.Handle, indirectBuffer.Offset, indirectBuffer.Size, false) .Get(Cbs, indirectBuffer.Offset, indirectBuffer.Size).Value; - var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); + MTLPrimitiveType primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); (MTLBuffer indexBuffer, int indexOffset, MTLIndexType type) = _encoderStateManager.IndexBuffer.GetIndexBuffer(_renderer, Cbs); if (indexBuffer.NativePtr != IntPtr.Zero && buffer.NativePtr != IntPtr.Zero) { - var renderCommandEncoder = GetOrCreateRenderEncoder(true); + MTLRenderCommandEncoder renderCommandEncoder = GetOrCreateRenderEncoder(true); renderCommandEncoder.DrawIndexedPrimitives( primitiveType, @@ -576,12 +576,12 @@ namespace Ryujinx.Graphics.Metal Logger.Warning?.Print(LogClass.Gpu, $"Drawing indirect with unsupported topology: {_encoderStateManager.Topology}"); } - var buffer = _renderer.BufferManager + MTLBuffer buffer = _renderer.BufferManager .GetBuffer(indirectBuffer.Handle, indirectBuffer.Offset, indirectBuffer.Size, false) .Get(Cbs, indirectBuffer.Offset, indirectBuffer.Size).Value; - var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); - var renderCommandEncoder = GetOrCreateRenderEncoder(true); + MTLPrimitiveType primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); + MTLRenderCommandEncoder renderCommandEncoder = GetOrCreateRenderEncoder(true); renderCommandEncoder.DrawPrimitives( primitiveType, diff --git a/src/Ryujinx.Graphics.Metal/Program.cs b/src/Ryujinx.Graphics.Metal/Program.cs index 37bae5817..780725400 100644 --- a/src/Ryujinx.Graphics.Metal/Program.cs +++ b/src/Ryujinx.Graphics.Metal/Program.cs @@ -56,12 +56,12 @@ namespace Ryujinx.Graphics.Metal { ShaderSource shader = _shaders[i]; - using var compileOptions = new MTLCompileOptions + using MTLCompileOptions compileOptions = new MTLCompileOptions { PreserveInvariance = true, LanguageVersion = MTLLanguageVersion.Version31, }; - var index = i; + int index = i; _handles[i] = device.NewLibrary(StringHelper.NSString(shader.Code), compileOptions, (library, error) => CompilationResultHandler(library, error, index)); } @@ -71,7 +71,7 @@ namespace Ryujinx.Graphics.Metal public void CompilationResultHandler(MTLLibrary library, NSError error, int index) { - var shader = _shaders[index]; + ShaderSource shader = _shaders[index]; if (_handles[index].IsAllocated) { @@ -142,7 +142,7 @@ namespace Ryujinx.Graphics.Metal currentUsage.Stages, currentUsage.ArrayLength > 1)); - var size = currentCount * ResourcePointerSize(currentUsage.Type); + int size = currentCount * ResourcePointerSize(currentUsage.Type); if (currentUsage.Stages.HasFlag(ResourceStages.Fragment)) { fragArgBufferSizes[setIndex] += size; @@ -173,7 +173,7 @@ namespace Ryujinx.Graphics.Metal currentUsage.Stages, currentUsage.ArrayLength > 1)); - var size = currentCount * ResourcePointerSize(currentUsage.Type); + int size = currentCount * ResourcePointerSize(currentUsage.Type); if (currentUsage.Stages.HasFlag(ResourceStages.Fragment)) { fragArgBufferSizes[setIndex] += size; diff --git a/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs b/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs index 36ae9bac6..6f6000f69 100644 --- a/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs +++ b/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs @@ -44,8 +44,8 @@ namespace Ryujinx.Graphics.Metal public ResourceLayout Build() { - var descriptors = new ResourceDescriptorCollection[TotalSets]; - var usages = new ResourceUsageCollection[TotalSets]; + ResourceDescriptorCollection[] descriptors = new ResourceDescriptorCollection[TotalSets]; + ResourceUsageCollection[] usages = new ResourceUsageCollection[TotalSets]; for (int index = 0; index < TotalSets; index++) { diff --git a/src/Ryujinx.Graphics.Metal/SamplerHolder.cs b/src/Ryujinx.Graphics.Metal/SamplerHolder.cs index 3241efa6d..f1270443b 100644 --- a/src/Ryujinx.Graphics.Metal/SamplerHolder.cs +++ b/src/Ryujinx.Graphics.Metal/SamplerHolder.cs @@ -21,7 +21,7 @@ namespace Ryujinx.Graphics.Metal MTLSamplerBorderColor borderColor = GetConstrainedBorderColor(info.BorderColor, out _); - using var descriptor = new MTLSamplerDescriptor + using MTLSamplerDescriptor descriptor = new MTLSamplerDescriptor { BorderColor = borderColor, MinFilter = minFilter, @@ -38,7 +38,7 @@ namespace Ryujinx.Graphics.Metal SupportArgumentBuffers = true }; - var sampler = device.NewSamplerState(descriptor); + MTLSamplerState sampler = device.NewSamplerState(descriptor); _sampler = new Auto(new DisposableSampler(sampler)); } diff --git a/src/Ryujinx.Graphics.Metal/StagingBuffer.cs b/src/Ryujinx.Graphics.Metal/StagingBuffer.cs index b250b87f2..b4838ee33 100644 --- a/src/Ryujinx.Graphics.Metal/StagingBuffer.cs +++ b/src/Ryujinx.Graphics.Metal/StagingBuffer.cs @@ -108,8 +108,8 @@ namespace Ryujinx.Graphics.Metal private void PushDataImpl(CommandBufferScoped cbs, BufferHolder dst, int dstOffset, ReadOnlySpan data) { - var srcBuffer = _buffer.GetBuffer(); - var dstBuffer = dst.GetBuffer(dstOffset, data.Length, true); + Auto srcBuffer = _buffer.GetBuffer(); + Auto dstBuffer = dst.GetBuffer(dstOffset, data.Length, true); int offset = _freeOffset; int capacity = BufferSize - offset; @@ -241,7 +241,7 @@ namespace Ryujinx.Graphics.Metal private bool WaitFreeCompleted(CommandBufferPool cbp) { - if (_pendingCopies.TryPeek(out var pc)) + if (_pendingCopies.TryPeek(out PendingCopy pc)) { if (!pc.Fence.IsSignaled()) { @@ -253,7 +253,7 @@ namespace Ryujinx.Graphics.Metal pc.Fence.Wait(); } - var dequeued = _pendingCopies.Dequeue(); + PendingCopy dequeued = _pendingCopies.Dequeue(); Debug.Assert(dequeued.Fence == pc.Fence); _freeSize += pc.Size; pc.Fence.Put(); @@ -265,10 +265,10 @@ namespace Ryujinx.Graphics.Metal public void FreeCompleted() { FenceHolder signalledFence = null; - while (_pendingCopies.TryPeek(out var pc) && (pc.Fence == signalledFence || pc.Fence.IsSignaled())) + while (_pendingCopies.TryPeek(out PendingCopy pc) && (pc.Fence == signalledFence || pc.Fence.IsSignaled())) { signalledFence = pc.Fence; // Already checked - don't need to do it again. - var dequeued = _pendingCopies.Dequeue(); + PendingCopy dequeued = _pendingCopies.Dequeue(); Debug.Assert(dequeued.Fence == pc.Fence); _freeSize += pc.Size; pc.Fence.Put(); @@ -279,7 +279,7 @@ namespace Ryujinx.Graphics.Metal { _renderer.BufferManager.Delete(Handle); - while (_pendingCopies.TryDequeue(out var pc)) + while (_pendingCopies.TryDequeue(out PendingCopy pc)) { pc.Fence.Put(); } diff --git a/src/Ryujinx.Graphics.Metal/State/PipelineState.cs b/src/Ryujinx.Graphics.Metal/State/PipelineState.cs index 9f88f3061..1fa83e8d7 100644 --- a/src/Ryujinx.Graphics.Metal/State/PipelineState.cs +++ b/src/Ryujinx.Graphics.Metal/State/PipelineState.cs @@ -118,13 +118,13 @@ namespace Ryujinx.Graphics.Metal private readonly MTLVertexDescriptor BuildVertexDescriptor() { - var vertexDescriptor = new MTLVertexDescriptor(); + MTLVertexDescriptor vertexDescriptor = new MTLVertexDescriptor(); for (int i = 0; i < VertexAttributeDescriptionsCount; i++) { VertexInputAttributeUid uid = Internal.VertexAttributes[i]; - var attrib = vertexDescriptor.Attributes.Object((ulong)i); + MTLVertexAttributeDescriptor attrib = vertexDescriptor.Attributes.Object((ulong)i); attrib.Format = uid.Format; attrib.Offset = uid.Offset; attrib.BufferIndex = uid.BufferIndex; @@ -134,7 +134,7 @@ namespace Ryujinx.Graphics.Metal { VertexInputLayoutUid uid = Internal.VertexBindings[i]; - var layout = vertexDescriptor.Layouts.Object((ulong)i); + MTLVertexBufferLayoutDescriptor layout = vertexDescriptor.Layouts.Object((ulong)i); layout.StepFunction = uid.StepFunction; layout.StepRate = uid.StepRate; @@ -146,15 +146,15 @@ namespace Ryujinx.Graphics.Metal private MTLRenderPipelineDescriptor CreateRenderDescriptor(Program program) { - var renderPipelineDescriptor = new MTLRenderPipelineDescriptor(); + MTLRenderPipelineDescriptor renderPipelineDescriptor = new MTLRenderPipelineDescriptor(); for (int i = 0; i < Constants.MaxColorAttachments; i++) { - var blendState = Internal.ColorBlendState[i]; + ColorBlendStateUid blendState = Internal.ColorBlendState[i]; if (blendState.PixelFormat != MTLPixelFormat.Invalid) { - var pipelineAttachment = renderPipelineDescriptor.ColorAttachments.Object((ulong)i); + MTLRenderPipelineColorAttachmentDescriptor pipelineAttachment = renderPipelineDescriptor.ColorAttachments.Object((ulong)i); BuildColorAttachment(pipelineAttachment, blendState); } @@ -195,7 +195,7 @@ namespace Ryujinx.Graphics.Metal renderPipelineDescriptor.RasterizationEnabled = !RasterizerDiscardEnable; renderPipelineDescriptor.SampleCount = Math.Max(1, SamplesCount); - var vertexDescriptor = BuildVertexDescriptor(); + MTLVertexDescriptor vertexDescriptor = BuildVertexDescriptor(); renderPipelineDescriptor.VertexDescriptor = vertexDescriptor; renderPipelineDescriptor.VertexFunction = program.VertexFunction; @@ -210,14 +210,14 @@ namespace Ryujinx.Graphics.Metal public MTLRenderPipelineState CreateRenderPipeline(MTLDevice device, Program program) { - if (program.TryGetGraphicsPipeline(ref Internal, out var pipelineState)) + if (program.TryGetGraphicsPipeline(ref Internal, out MTLRenderPipelineState pipelineState)) { return pipelineState; } - using var descriptor = CreateRenderDescriptor(program); + using MTLRenderPipelineDescriptor descriptor = CreateRenderDescriptor(program); - var error = new NSError(IntPtr.Zero); + NSError error = new NSError(IntPtr.Zero); pipelineState = device.NewRenderPipelineState(descriptor, ref error); if (error != IntPtr.Zero) { @@ -240,7 +240,7 @@ namespace Ryujinx.Graphics.Metal throw new InvalidOperationException($"Local thread size for compute cannot be 0 in any dimension."); } - var descriptor = new MTLComputePipelineDescriptor + MTLComputePipelineDescriptor descriptor = new MTLComputePipelineDescriptor { ComputeFunction = program.ComputeFunction, MaxTotalThreadsPerThreadgroup = maxThreads, @@ -252,14 +252,14 @@ namespace Ryujinx.Graphics.Metal public static MTLComputePipelineState CreateComputePipeline(MTLDevice device, Program program) { - if (program.TryGetComputePipeline(out var pipelineState)) + if (program.TryGetComputePipeline(out MTLComputePipelineState pipelineState)) { return pipelineState; } using MTLComputePipelineDescriptor descriptor = CreateComputeDescriptor(program); - var error = new NSError(IntPtr.Zero); + NSError error = new NSError(IntPtr.Zero); pipelineState = device.NewComputePipelineState(descriptor, MTLPipelineOption.None, 0, ref error); if (error != IntPtr.Zero) { diff --git a/src/Ryujinx.Graphics.Metal/State/PipelineUid.cs b/src/Ryujinx.Graphics.Metal/State/PipelineUid.cs index c986a7e23..5b514c2c9 100644 --- a/src/Ryujinx.Graphics.Metal/State/PipelineUid.cs +++ b/src/Ryujinx.Graphics.Metal/State/PipelineUid.cs @@ -114,7 +114,7 @@ namespace Ryujinx.Graphics.Metal public void Swap(ColorBlendStateUid uid) { - var format = PixelFormat; + MTLPixelFormat format = PixelFormat; this = uid; PixelFormat = format; diff --git a/src/Ryujinx.Graphics.Metal/StateCache.cs b/src/Ryujinx.Graphics.Metal/StateCache.cs index 9b8391ffc..8a9d175f1 100644 --- a/src/Ryujinx.Graphics.Metal/StateCache.cs +++ b/src/Ryujinx.Graphics.Metal/StateCache.cs @@ -25,14 +25,14 @@ namespace Ryujinx.Graphics.Metal public T GetOrCreate(TDescriptor descriptor) { - var hash = GetHash(descriptor); + THash hash = GetHash(descriptor); if (_cache.TryGetValue(hash, out T value)) { return value; } else { - var newValue = CreateValue(descriptor); + T newValue = CreateValue(descriptor); _cache.Add(hash, newValue); return newValue; diff --git a/src/Ryujinx.Graphics.Metal/Texture.cs b/src/Ryujinx.Graphics.Metal/Texture.cs index 4566d65d8..749da7d48 100644 --- a/src/Ryujinx.Graphics.Metal/Texture.cs +++ b/src/Ryujinx.Graphics.Metal/Texture.cs @@ -18,7 +18,7 @@ namespace Ryujinx.Graphics.Metal { MTLPixelFormat pixelFormat = FormatTable.GetFormat(Info.Format); - var descriptor = new MTLTextureDescriptor + MTLTextureDescriptor descriptor = new MTLTextureDescriptor { PixelFormat = pixelFormat, Usage = MTLTextureUsage.Unknown, @@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Metal public Texture(MTLDevice device, MetalRenderer renderer, Pipeline pipeline, TextureCreateInfo info, MTLTexture sourceTexture, int firstLayer, int firstLevel) : base(device, renderer, pipeline, info) { - var pixelFormat = FormatTable.GetFormat(Info.Format); + MTLPixelFormat pixelFormat = FormatTable.GetFormat(Info.Format); if (info.DepthStencilMode == DepthStencilMode.Stencil) { @@ -77,7 +77,7 @@ namespace Ryujinx.Graphics.Metal }; } - var textureType = Info.Target.Convert(); + MTLTextureType textureType = Info.Target.Convert(); NSRange levels; levels.location = (ulong)firstLevel; levels.length = (ulong)Info.Levels; @@ -85,7 +85,7 @@ namespace Ryujinx.Graphics.Metal slices.location = (ulong)firstLayer; slices.length = textureType == MTLTextureType.Type3D ? 1 : (ulong)info.GetDepthOrLayers(); - var swizzle = GetSwizzle(info, pixelFormat); + MTLTextureSwizzleChannels swizzle = GetSwizzle(info, pixelFormat); _identitySwizzleHandle = sourceTexture.NewTextureView(pixelFormat, textureType, levels, slices); @@ -131,10 +131,10 @@ namespace Ryujinx.Graphics.Metal private MTLTextureSwizzleChannels GetSwizzle(TextureCreateInfo info, MTLPixelFormat pixelFormat) { - var swizzleR = Info.SwizzleR.Convert(); - var swizzleG = Info.SwizzleG.Convert(); - var swizzleB = Info.SwizzleB.Convert(); - var swizzleA = Info.SwizzleA.Convert(); + MTLTextureSwizzle swizzleR = Info.SwizzleR.Convert(); + MTLTextureSwizzle swizzleG = Info.SwizzleG.Convert(); + MTLTextureSwizzle swizzleB = Info.SwizzleB.Convert(); + MTLTextureSwizzle swizzleA = Info.SwizzleA.Convert(); if (info.Format == Format.R5G5B5A1Unorm || info.Format == Format.R5G5B5X1Unorm || @@ -144,8 +144,8 @@ namespace Ryujinx.Graphics.Metal } else if (pixelFormat == MTLPixelFormat.ABGR4Unorm || info.Format == Format.A1B5G5R5Unorm) { - var tempB = swizzleB; - var tempA = swizzleA; + MTLTextureSwizzle tempB = swizzleB; + MTLTextureSwizzle tempA = swizzleA; swizzleB = swizzleG; swizzleA = swizzleR; @@ -174,8 +174,8 @@ namespace Ryujinx.Graphics.Metal return; } - var srcImage = GetHandle(); - var dstImage = dst.GetHandle(); + MTLTexture srcImage = GetHandle(); + MTLTexture dstImage = dst.GetHandle(); if (!dst.Info.Target.IsMultisample() && Info.Target.IsMultisample()) { @@ -231,8 +231,8 @@ namespace Ryujinx.Graphics.Metal return; } - var srcImage = GetHandle(); - var dstImage = dst.GetHandle(); + MTLTexture srcImage = GetHandle(); + MTLTexture dstImage = dst.GetHandle(); if (!dst.Info.Target.IsMultisample() && Info.Target.IsMultisample()) { @@ -276,7 +276,7 @@ namespace Ryujinx.Graphics.Metal return; } - var dst = (Texture)destination; + Texture dst = (Texture)destination; bool isDepthOrStencil = dst.Info.Format.IsDepthOrStencil(); @@ -285,15 +285,15 @@ namespace Ryujinx.Graphics.Metal public void CopyTo(BufferRange range, int layer, int level, int stride) { - var cbs = Pipeline.Cbs; + CommandBufferScoped cbs = Pipeline.Cbs; int outSize = Info.GetMipSize(level); int hostSize = GetBufferDataLength(outSize); int offset = range.Offset; - var autoBuffer = Renderer.BufferManager.GetBuffer(range.Handle, true); - var mtlBuffer = autoBuffer.Get(cbs, range.Offset, outSize).Value; + Auto autoBuffer = Renderer.BufferManager.GetBuffer(range.Handle, true); + MTLBuffer mtlBuffer = autoBuffer.Get(cbs, range.Offset, outSize).Value; if (PrepareOutputBuffer(cbs, hostSize, mtlBuffer, out MTLBuffer copyToBuffer, out BufferHolder tempCopyHolder)) { @@ -511,13 +511,13 @@ namespace Ryujinx.Graphics.Metal public void SetData(MemoryOwner data) { - var blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder(); + MTLBlitCommandEncoder blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder(); - var dataSpan = data.Memory.Span; + Span dataSpan = data.Memory.Span; - var buffer = Renderer.BufferManager.Create(dataSpan.Length); + BufferHolder buffer = Renderer.BufferManager.Create(dataSpan.Length); buffer.SetDataUnchecked(0, dataSpan); - var mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value; + MTLBuffer mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value; int width = Info.Width; int height = Info.Height; @@ -572,16 +572,16 @@ namespace Ryujinx.Graphics.Metal { int bufferDataLength = GetBufferDataLength(data.Length); - using var bufferHolder = Renderer.BufferManager.Create(bufferDataLength); + using BufferHolder bufferHolder = Renderer.BufferManager.Create(bufferDataLength); // TODO: loadInline logic - var cbs = Pipeline.Cbs; + CommandBufferScoped cbs = Pipeline.Cbs; CopyDataToBuffer(bufferHolder.GetDataStorage(0, bufferDataLength), data); - var buffer = bufferHolder.GetBuffer().Get(cbs).Value; - var image = GetHandle(); + MTLBuffer buffer = bufferHolder.GetBuffer().Get(cbs).Value; + MTLTexture image = GetHandle(); CopyFromOrToBuffer(cbs, buffer, image, bufferDataLength, false, layer, level, layers, levels, singleSlice); } @@ -595,7 +595,7 @@ namespace Ryujinx.Graphics.Metal public void SetData(MemoryOwner data, int layer, int level, Rectangle region) { - var blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder(); + MTLBlitCommandEncoder blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder(); ulong bytesPerRow = (ulong)Info.GetMipStride(level); ulong bytesPerImage = 0; @@ -604,11 +604,11 @@ namespace Ryujinx.Graphics.Metal bytesPerImage = bytesPerRow * (ulong)Info.Height; } - var dataSpan = data.Memory.Span; + Span dataSpan = data.Memory.Span; - var buffer = Renderer.BufferManager.Create(dataSpan.Length); + BufferHolder buffer = Renderer.BufferManager.Create(dataSpan.Length); buffer.SetDataUnchecked(0, dataSpan); - var mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value; + MTLBuffer mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value; blitCommandEncoder.CopyFromBuffer( mtlBuffer, diff --git a/src/Ryujinx.Graphics.Metal/VertexBufferState.cs b/src/Ryujinx.Graphics.Metal/VertexBufferState.cs index 6591fe6d6..8fb48ef79 100644 --- a/src/Ryujinx.Graphics.Metal/VertexBufferState.cs +++ b/src/Ryujinx.Graphics.Metal/VertexBufferState.cs @@ -49,7 +49,7 @@ namespace Ryujinx.Graphics.Metal if (autoBuffer != null) { int offset = _offset; - var buffer = autoBuffer.Get(cbs, offset, _size).Value; + MTLBuffer buffer = autoBuffer.Get(cbs, offset, _size).Value; return (buffer, offset); } diff --git a/src/Ryujinx.Graphics.Metal/Window.cs b/src/Ryujinx.Graphics.Metal/Window.cs index 1823c0b9a..f3c9133ab 100644 --- a/src/Ryujinx.Graphics.Metal/Window.cs +++ b/src/Ryujinx.Graphics.Metal/Window.cs @@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.Metal if (_requestedWidth != 0 && _requestedHeight != 0) { // TODO: This is actually a CGSize, but there is no overload for that, so fill the first two fields of rect with the size. - var rect = new NSRect(_requestedWidth, _requestedHeight, 0, 0); + NSRect rect = new NSRect(_requestedWidth, _requestedHeight, 0, 0); ObjectiveC.objc_msgSend(_metalLayer, "setDrawableSize:", rect); @@ -62,7 +62,7 @@ namespace Ryujinx.Graphics.Metal { ResizeIfNeeded(); - var drawable = new CAMetalDrawable(ObjectiveC.IntPtr_objc_msgSend(_metalLayer, "nextDrawable")); + CAMetalDrawable drawable = new CAMetalDrawable(ObjectiveC.IntPtr_objc_msgSend(_metalLayer, "nextDrawable")); _width = (int)drawable.Texture.Width; _height = (int)drawable.Texture.Height; -- 2.47.1 From 68bbb29be6d387d0ddc5a023988105d1d2db3684 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:07:20 -0600 Subject: [PATCH 426/722] misc: chore: Use explicit types in NVDEC projects (except VP9 because there's an open PR and I don't want to cause conflicts) --- .../Native/FFmpegApi.cs | 2 +- src/Ryujinx.Graphics.Nvdec/Image/SurfaceWriter.cs | 13 +++++++------ src/Ryujinx.Graphics.Nvdec/NvdecDevice.cs | 4 ++-- src/Ryujinx.Graphics.Nvdec/Vp9Decoder.cs | 7 ++++--- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx.Graphics.Nvdec.FFmpeg/Native/FFmpegApi.cs b/src/Ryujinx.Graphics.Nvdec.FFmpeg/Native/FFmpegApi.cs index 7b0c2a8ad..c31d3034e 100644 --- a/src/Ryujinx.Graphics.Nvdec.FFmpeg/Native/FFmpegApi.cs +++ b/src/Ryujinx.Graphics.Nvdec.FFmpeg/Native/FFmpegApi.cs @@ -41,7 +41,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native { handle = nint.Zero; - if (_librariesWhitelist.TryGetValue(libraryName, out var value)) + if (_librariesWhitelist.TryGetValue(libraryName, out (int, int) value)) { (int minVersion, int maxVersion) = value; diff --git a/src/Ryujinx.Graphics.Nvdec/Image/SurfaceWriter.cs b/src/Ryujinx.Graphics.Nvdec/Image/SurfaceWriter.cs index 043be1f2b..e9927c0f8 100644 --- a/src/Ryujinx.Graphics.Nvdec/Image/SurfaceWriter.cs +++ b/src/Ryujinx.Graphics.Nvdec/Image/SurfaceWriter.cs @@ -2,6 +2,7 @@ using Ryujinx.Common; using Ryujinx.Graphics.Device; using Ryujinx.Graphics.Texture; using Ryujinx.Graphics.Video; +using Ryujinx.Memory; using System; using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; @@ -16,7 +17,7 @@ namespace Ryujinx.Graphics.Nvdec.Image { int lumaSize = GetBlockLinearSize(surface.Width, surface.Height, 1); - using var luma = mm.GetWritableRegion(ExtendOffset(lumaOffset), lumaSize); + using WritableRegion luma = mm.GetWritableRegion(ExtendOffset(lumaOffset), lumaSize); WriteLuma( luma.Memory.Span, @@ -27,7 +28,7 @@ namespace Ryujinx.Graphics.Nvdec.Image int chromaSize = GetBlockLinearSize(surface.UvWidth, surface.UvHeight, 2); - using var chroma = mm.GetWritableRegion(ExtendOffset(chromaOffset), chromaSize); + using WritableRegion chroma = mm.GetWritableRegion(ExtendOffset(chromaOffset), chromaSize); WriteChroma( chroma.Memory.Span, @@ -48,8 +49,8 @@ namespace Ryujinx.Graphics.Nvdec.Image { int lumaSize = GetBlockLinearSize(surface.Width, surface.Height / 2, 1); - using var lumaTop = mm.GetWritableRegion(ExtendOffset(lumaTopOffset), lumaSize); - using var lumaBottom = mm.GetWritableRegion(ExtendOffset(lumaBottomOffset), lumaSize); + using WritableRegion lumaTop = mm.GetWritableRegion(ExtendOffset(lumaTopOffset), lumaSize); + using WritableRegion lumaBottom = mm.GetWritableRegion(ExtendOffset(lumaBottomOffset), lumaSize); WriteLuma( lumaTop.Memory.Span, @@ -67,8 +68,8 @@ namespace Ryujinx.Graphics.Nvdec.Image int chromaSize = GetBlockLinearSize(surface.UvWidth, surface.UvHeight / 2, 2); - using var chromaTop = mm.GetWritableRegion(ExtendOffset(chromaTopOffset), chromaSize); - using var chromaBottom = mm.GetWritableRegion(ExtendOffset(chromaBottomOffset), chromaSize); + using WritableRegion chromaTop = mm.GetWritableRegion(ExtendOffset(chromaTopOffset), chromaSize); + using WritableRegion chromaBottom = mm.GetWritableRegion(ExtendOffset(chromaBottomOffset), chromaSize); WriteChroma( chromaTop.Memory.Span, diff --git a/src/Ryujinx.Graphics.Nvdec/NvdecDevice.cs b/src/Ryujinx.Graphics.Nvdec/NvdecDevice.cs index 29e260d63..7a8fbf9b6 100644 --- a/src/Ryujinx.Graphics.Nvdec/NvdecDevice.cs +++ b/src/Ryujinx.Graphics.Nvdec/NvdecDevice.cs @@ -36,7 +36,7 @@ namespace Ryujinx.Graphics.Nvdec public void DestroyContext(long id) { - if (_contexts.TryRemove(id, out var context)) + if (_contexts.TryRemove(id, out NvdecDecoderContext context)) { context.Dispose(); } @@ -46,7 +46,7 @@ namespace Ryujinx.Graphics.Nvdec public void BindContext(long id) { - if (_contexts.TryGetValue(id, out var context)) + if (_contexts.TryGetValue(id, out NvdecDecoderContext context)) { _currentContext = context; } diff --git a/src/Ryujinx.Graphics.Nvdec/Vp9Decoder.cs b/src/Ryujinx.Graphics.Nvdec/Vp9Decoder.cs index 5ed508647..6c294adf6 100644 --- a/src/Ryujinx.Graphics.Nvdec/Vp9Decoder.cs +++ b/src/Ryujinx.Graphics.Nvdec/Vp9Decoder.cs @@ -4,6 +4,7 @@ using Ryujinx.Graphics.Nvdec.Image; using Ryujinx.Graphics.Nvdec.Types.Vp9; using Ryujinx.Graphics.Nvdec.Vp9; using Ryujinx.Graphics.Video; +using Ryujinx.Memory; using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -50,7 +51,7 @@ namespace Ryujinx.Graphics.Nvdec int miCols = BitUtils.DivRoundUp(pictureInfo.CurrentFrameSize.Width, 8); int miRows = BitUtils.DivRoundUp(pictureInfo.CurrentFrameSize.Height, 8); - using var mvsRegion = rm.MemoryManager.GetWritableRegion(ExtendOffset(state.Vp9SetColMvWriteBufOffset), miRows * miCols * 16); + using WritableRegion mvsRegion = rm.MemoryManager.GetWritableRegion(ExtendOffset(state.Vp9SetColMvWriteBufOffset), miRows * miCols * 16); Span mvsOut = MemoryMarshal.Cast(mvsRegion.Memory.Span); @@ -80,9 +81,9 @@ namespace Ryujinx.Graphics.Nvdec private static void WriteBackwardUpdates(DeviceMemoryManager mm, uint offset, ref Vp9BackwardUpdates counts) { - using var backwardUpdatesRegion = mm.GetWritableRegion(ExtendOffset(offset), Unsafe.SizeOf()); + using WritableRegion backwardUpdatesRegion = mm.GetWritableRegion(ExtendOffset(offset), Unsafe.SizeOf()); - ref var backwardUpdates = ref MemoryMarshal.Cast(backwardUpdatesRegion.Memory.Span)[0]; + ref BackwardUpdates backwardUpdates = ref MemoryMarshal.Cast(backwardUpdatesRegion.Memory.Span)[0]; backwardUpdates = new BackwardUpdates(ref counts); } -- 2.47.1 From f2aa6b3a5bd3609d3d65bb7bb7709b848fcb554e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:07:59 -0600 Subject: [PATCH 427/722] misc: chore: Use explicit types in Shader project --- .../CodeGen/Glsl/Declarations.cs | 18 +- .../CodeGen/Glsl/Instructions/InstGenCall.cs | 2 +- .../Glsl/Instructions/InstGenMemory.cs | 2 +- .../CodeGen/Msl/Declarations.cs | 62 ++-- .../CodeGen/Msl/Instructions/InstGen.cs | 4 +- .../Msl/Instructions/InstGenBarrier.cs | 2 +- .../CodeGen/Msl/Instructions/InstGenCall.cs | 2 +- .../CodeGen/Msl/Instructions/InstGenMemory.cs | 16 +- .../CodeGen/Msl/Instructions/IoMap.cs | 2 +- .../CodeGen/Msl/MslGenerator.cs | 10 +- .../CodeGen/Spirv/CodeGenContext.cs | 18 +- .../CodeGen/Spirv/Declarations.cs | 96 ++--- .../CodeGen/Spirv/Instructions.cs | 338 +++++++++--------- .../CodeGen/Spirv/SpirvGenerator.cs | 38 +- .../Decoders/Decoder.cs | 14 +- .../Instructions/AttributeMap.cs | 4 +- .../Instructions/InstEmitAttribute.cs | 2 +- .../Instructions/InstEmitBitfield.cs | 36 +- .../Instructions/InstEmitConversion.cs | 24 +- .../Instructions/InstEmitFloatArithmetic.cs | 172 ++++----- .../Instructions/InstEmitFloatComparison.cs | 98 ++--- .../Instructions/InstEmitFloatMinMax.cs | 36 +- .../Instructions/InstEmitFlowControl.cs | 12 +- .../Instructions/InstEmitIntegerArithmetic.cs | 146 ++++---- .../Instructions/InstEmitIntegerComparison.cs | 50 +-- .../Instructions/InstEmitIntegerLogical.cs | 34 +- .../Instructions/InstEmitIntegerMinMax.cs | 18 +- .../Instructions/InstEmitShift.cs | 36 +- .../Instructions/InstEmitTexture.cs | 12 +- src/Ryujinx.Graphics.Shader/SamplerType.cs | 2 +- .../StructuredIr/ShaderProperties.cs | 4 +- .../Translation/EmitterContext.cs | 5 +- .../Translation/FunctionMatch.cs | 32 +- .../Optimizations/GlobalToStorage.cs | 4 +- .../Translation/RegisterUsage.cs | 2 +- .../Translation/ResourceManager.cs | 38 +- .../Translation/ShaderDefinitions.cs | 8 +- .../Translation/Translator.cs | 4 +- .../Translation/TranslatorContext.cs | 48 +-- 39 files changed, 726 insertions(+), 725 deletions(-) diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs index eb6c689b8..2677cba07 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs @@ -149,7 +149,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl if (context.Definitions.TransformFeedbackEnabled && context.Definitions.LastInVertexPipeline) { - var tfOutput = context.Definitions.GetTransformFeedbackOutput(AttributeConsts.PositionX); + TransformFeedbackOutput tfOutput = context.Definitions.GetTransformFeedbackOutput(AttributeConsts.PositionX); if (tfOutput.Valid) { context.AppendLine($"layout (xfb_buffer = {tfOutput.Buffer}, xfb_offset = {tfOutput.Offset}, xfb_stride = {tfOutput.Stride}) out gl_PerVertex"); @@ -338,7 +338,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl private static void DeclareSamplers(CodeGenContext context, IEnumerable definitions) { - foreach (var definition in definitions) + foreach (TextureDefinition definition in definitions) { string arrayDecl = string.Empty; @@ -366,7 +366,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl private static void DeclareImages(CodeGenContext context, IEnumerable definitions) { - foreach (var definition in definitions) + foreach (TextureDefinition definition in definitions) { string arrayDecl = string.Empty; @@ -413,7 +413,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl } else { - foreach (var ioDefinition in inputs.OrderBy(x => x.Location)) + foreach (IoDefinition ioDefinition in inputs.OrderBy(x => x.Location)) { DeclareInputAttribute(context, ioDefinition.Location, ioDefinition.Component); } @@ -427,7 +427,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl private static void DeclareInputAttributesPerPatch(CodeGenContext context, IEnumerable inputs) { - foreach (var ioDefinition in inputs.OrderBy(x => x.Location)) + foreach (IoDefinition ioDefinition in inputs.OrderBy(x => x.Location)) { DeclareInputAttributePerPatch(context, ioDefinition.Location); } @@ -521,7 +521,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl } } - foreach (var ioDefinition in outputs) + foreach (IoDefinition ioDefinition in outputs) { DeclareOutputAttribute(context, ioDefinition.Location, ioDefinition.Component); } @@ -548,7 +548,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl string xfb = string.Empty; - var tfOutput = context.Definitions.GetTransformFeedbackOutput(location, component); + TransformFeedbackOutput tfOutput = context.Definitions.GetTransformFeedbackOutput(location, component); if (tfOutput.Valid) { xfb = $", xfb_buffer = {tfOutput.Buffer}, xfb_offset = {tfOutput.Offset}, xfb_stride = {tfOutput.Stride}"; @@ -570,7 +570,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl string xfb = string.Empty; - var tfOutput = context.Definitions.GetTransformFeedbackOutput(location, 0); + TransformFeedbackOutput tfOutput = context.Definitions.GetTransformFeedbackOutput(location, 0); if (tfOutput.Valid) { xfb = $", xfb_buffer = {tfOutput.Buffer}, xfb_offset = {tfOutput.Offset}, xfb_stride = {tfOutput.Stride}"; @@ -606,7 +606,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl private static void DeclareOutputAttributesPerPatch(CodeGenContext context, IEnumerable outputs) { - foreach (var ioDefinition in outputs) + foreach (IoDefinition ioDefinition in outputs) { DeclareOutputAttributePerPatch(context, ioDefinition.Location); } diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenCall.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenCall.cs index d5448856d..9d4ea5348 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenCall.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenCall.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions Debug.Assert(funcId.Type == OperandType.Constant); - var function = context.GetFunction(funcId.Value); + StructuredFunction function = context.GetFunction(funcId.Value); string[] args = new string[operation.SourcesCount - 1]; diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs index 56507a2a4..2eeaaa9bc 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions bool isArray = (texOp.Type & SamplerType.Array) != 0; - var texCallBuilder = new StringBuilder(); + StringBuilder texCallBuilder = new StringBuilder(); if (texOp.Inst == Instruction.ImageAtomic) { diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Declarations.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Declarations.cs index 912b162d2..c779f5e8d 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Declarations.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Declarations.cs @@ -69,7 +69,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl context.AppendLine("using namespace metal;"); context.AppendLine(); - var fsi = (info.HelperFunctionsMask & HelperFunctionsMask.FSI) != 0; + bool fsi = (info.HelperFunctionsMask & HelperFunctionsMask.FSI) != 0; DeclareInputAttributes(context, info.IoDefinitions.Where(x => IsUserDefined(x, StorageKind.Input))); context.AppendLine(); @@ -79,25 +79,25 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl DeclareBufferStructures(context, context.Properties.StorageBuffers.Values.OrderBy(x => x.Binding).ToArray(), false, fsi); // We need to declare each set as a new struct - var textureDefinitions = context.Properties.Textures.Values + Dictionary textureDefinitions = context.Properties.Textures.Values .GroupBy(x => x.Set) .ToDictionary(x => x.Key, x => x.OrderBy(y => y.Binding).ToArray()); - var imageDefinitions = context.Properties.Images.Values + Dictionary imageDefinitions = context.Properties.Images.Values .GroupBy(x => x.Set) .ToDictionary(x => x.Key, x => x.OrderBy(y => y.Binding).ToArray()); - var textureSets = textureDefinitions.Keys.ToArray(); - var imageSets = imageDefinitions.Keys.ToArray(); + int[] textureSets = textureDefinitions.Keys.ToArray(); + int[] imageSets = imageDefinitions.Keys.ToArray(); - var sets = textureSets.Union(imageSets).ToArray(); + int[] sets = textureSets.Union(imageSets).ToArray(); - foreach (var set in textureDefinitions) + foreach (KeyValuePair set in textureDefinitions) { DeclareTextures(context, set.Value, set.Key); } - foreach (var set in imageDefinitions) + foreach (KeyValuePair set in imageDefinitions) { DeclareImages(context, set.Value, set.Key, fsi); } @@ -186,8 +186,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl public static string GetVarTypeName(AggregateType type, bool atomic = false) { - var s32 = atomic ? "atomic_int" : "int"; - var u32 = atomic ? "atomic_uint" : "uint"; + string s32 = atomic ? "atomic_int" : "int"; + string u32 = atomic ? "atomic_uint" : "uint"; return type switch { @@ -216,22 +216,22 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl { string prefix = isShared ? "threadgroup " : string.Empty; - foreach (var memory in memories) + foreach (MemoryDefinition memory in memories) { string arraySize = ""; if ((memory.Type & AggregateType.Array) != 0) { arraySize = $"[{memory.ArrayLength}]"; } - var typeName = GetVarTypeName(memory.Type & ~AggregateType.Array); + string typeName = GetVarTypeName(memory.Type & ~AggregateType.Array); context.AppendLine($"{prefix}{typeName} {memory.Name}{arraySize};"); } } private static void DeclareBufferStructures(CodeGenContext context, BufferDefinition[] buffers, bool constant, bool fsi) { - var name = constant ? "ConstantBuffers" : "StorageBuffers"; - var addressSpace = constant ? "constant" : "device"; + string name = constant ? "ConstantBuffers" : "StorageBuffers"; + string addressSpace = constant ? "constant" : "device"; string[] bufferDec = new string[buffers.Length]; @@ -239,7 +239,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl { BufferDefinition buffer = buffers[i]; - var needsPadding = buffer.Layout == BufferLayout.Std140; + bool needsPadding = buffer.Layout == BufferLayout.Std140; string fsiSuffix = !constant && fsi ? " [[raster_order_group(0)]]" : ""; bufferDec[i] = $"{addressSpace} {Defaults.StructPrefix}_{buffer.Name}* {buffer.Name}{fsiSuffix};"; @@ -249,7 +249,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl foreach (StructureField field in buffer.Type.Fields) { - var type = field.Type; + AggregateType type = field.Type; type |= (needsPadding && (field.Type & AggregateType.Array) != 0) ? AggregateType.Vector4 : AggregateType.Invalid; @@ -282,7 +282,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl context.AppendLine($"struct {name}"); context.EnterScope(); - foreach (var declaration in bufferDec) + foreach (string declaration in bufferDec) { context.AppendLine(declaration); } @@ -293,7 +293,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl private static void DeclareTextures(CodeGenContext context, TextureDefinition[] textures, int set) { - var setName = GetNameForSet(set); + string setName = GetNameForSet(set); context.AppendLine($"struct {setName}"); context.EnterScope(); @@ -303,7 +303,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl { if (texture.Type != SamplerType.None) { - var textureTypeName = texture.Type.ToMslTextureType(texture.Format.GetComponentType()); + string textureTypeName = texture.Type.ToMslTextureType(texture.Format.GetComponentType()); if (texture.ArrayLength > 1) { @@ -315,7 +315,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl if (!texture.Separate && texture.Type != SamplerType.TextureBuffer) { - var samplerType = "sampler"; + string samplerType = "sampler"; if (texture.ArrayLength > 1) { @@ -326,7 +326,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl } } - foreach (var declaration in textureDec) + foreach (string declaration in textureDec) { context.AppendLine(declaration); } @@ -337,7 +337,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl private static void DeclareImages(CodeGenContext context, TextureDefinition[] images, int set, bool fsi) { - var setName = GetNameForSet(set); + string setName = GetNameForSet(set); context.AppendLine($"struct {setName}"); context.EnterScope(); @@ -347,7 +347,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl { TextureDefinition image = images[i]; - var imageTypeName = image.Type.ToMslTextureType(image.Format.GetComponentType(), true); + string imageTypeName = image.Type.ToMslTextureType(image.Format.GetComponentType(), true); if (image.ArrayLength > 1) { imageTypeName = $"array<{imageTypeName}, {image.ArrayLength}>"; @@ -358,7 +358,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl imageDec[i] = $"{imageTypeName} {image.Name}{fsiSuffix};"; } - foreach (var declaration in imageDec) + foreach (string declaration in imageDec) { context.AppendLine(declaration); } @@ -401,14 +401,14 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl // We need to use the SPIRV-Cross workaround for (int i = 0; i < Constants.MaxAttributes; i++) { - var suffix = context.Definitions.Stage == ShaderStage.Fragment ? $"[[user(loc{i})]]" : $"[[attribute({i})]]"; + string suffix = context.Definitions.Stage == ShaderStage.Fragment ? $"[[user(loc{i})]]" : $"[[attribute({i})]]"; context.AppendLine($"float4 {Defaults.IAttributePrefix}{i} {suffix};"); } } if (inputs.Any()) { - foreach (var ioDefinition in inputs.OrderBy(x => x.Location)) + foreach (IoDefinition ioDefinition in inputs.OrderBy(x => x.Location)) { if (context.Definitions.IaIndexing && ioDefinition.IoVariable == IoVariable.UserDefined) { @@ -500,11 +500,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl IoDefinition firstOutput = outputs.ElementAtOrDefault(0); IoDefinition secondOutput = outputs.ElementAtOrDefault(1); - var type1 = GetVarTypeName(context.Definitions.GetFragmentOutputColorType(firstOutput.Location)); - var type2 = GetVarTypeName(context.Definitions.GetFragmentOutputColorType(secondOutput.Location)); + string type1 = GetVarTypeName(context.Definitions.GetFragmentOutputColorType(firstOutput.Location)); + string type2 = GetVarTypeName(context.Definitions.GetFragmentOutputColorType(secondOutput.Location)); - var name1 = $"color{firstOutput.Location}"; - var name2 = $"color{firstOutput.Location + 1}"; + string name1 = $"color{firstOutput.Location}"; + string name2 = $"color{firstOutput.Location + 1}"; context.AppendLine($"{type1} {name1} [[color({firstOutput.Location}), index(0)]];"); context.AppendLine($"{type2} {name2} [[color({firstOutput.Location}), index(1)]];"); @@ -512,7 +512,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl outputs = outputs.Skip(2); } - foreach (var ioDefinition in outputs) + foreach (IoDefinition ioDefinition in outputs) { if (context.Definitions.OaIndexing && ioDefinition.IoVariable == IoVariable.UserDefined) { diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs index 57177e402..0be6035b6 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs @@ -49,7 +49,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions ? AggregateType.S32 : AggregateType.U32; - var shared = operation.StorageKind == StorageKind.SharedMemory; + bool shared = operation.StorageKind == StorageKind.SharedMemory; builder.Append($"({(shared ? "threadgroup" : "device")} {Declarations.GetVarTypeName(dstType, true)}*)&{GenerateLoadOrStore(context, operation, isStore: false)}"); @@ -120,7 +120,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions case 2: if (operation.ForcePrecise) { - var func = (inst & Instruction.Mask) switch + string func = (inst & Instruction.Mask) switch { Instruction.Add => "PreciseFAdd", Instruction.Subtract => "PreciseFSub", diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBarrier.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBarrier.cs index 77f05defc..198b701d6 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBarrier.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBarrier.cs @@ -7,7 +7,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions { public static string Barrier(CodeGenContext context, AstOperation operation) { - var device = (operation.Inst & Instruction.Mask) == Instruction.MemoryBarrier; + bool device = (operation.Inst & Instruction.Mask) == Instruction.MemoryBarrier; return $"threadgroup_barrier(mem_flags::mem_{(device ? "device" : "threadgroup")})"; } diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenCall.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenCall.cs index 44881deee..98a8a140e 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenCall.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenCall.cs @@ -10,7 +10,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions { AstOperand funcId = (AstOperand)operation.GetSource(0); - var function = context.GetFunction(funcId.Value); + StructuredFunction function = context.GetFunction(funcId.Value); int argCount = operation.SourcesCount - 1; int additionalArgCount = CodeGenContext.AdditionalArgCount + (context.Definitions.Stage != ShaderStage.Compute ? 1 : 0); diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs index 6ccacc1c4..2cdee1478 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs @@ -157,7 +157,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions bool isArray = (texOp.Type & SamplerType.Array) != 0; - var texCallBuilder = new StringBuilder(); + StringBuilder texCallBuilder = new StringBuilder(); int srcIndex = 0; @@ -194,7 +194,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions texCallBuilder.Append('('); - var coordsBuilder = new StringBuilder(); + StringBuilder coordsBuilder = new StringBuilder(); int coordsCount = texOp.Type.GetDimensions(); @@ -326,8 +326,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions coordsExpr = GetSourceExpr(context, texOp.GetSource(coordsIndex), AggregateType.FP32); } - var clamped = $"{textureName}.calculate_clamped_lod({samplerName}, {coordsExpr})"; - var unclamped = $"{textureName}.calculate_unclamped_lod({samplerName}, {coordsExpr})"; + string clamped = $"{textureName}.calculate_clamped_lod({samplerName}, {coordsExpr})"; + string unclamped = $"{textureName}.calculate_unclamped_lod({samplerName}, {coordsExpr})"; return $"float2({clamped}, {unclamped}){GetMask(texOp.Index)}"; } @@ -352,7 +352,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions bool isArray = (texOp.Type & SamplerType.Array) != 0; bool isShadow = (texOp.Type & SamplerType.Shadow) != 0; - var texCallBuilder = new StringBuilder(); + StringBuilder texCallBuilder = new StringBuilder(); bool colorIsVector = isGather || !isShadow; @@ -525,8 +525,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions private static string GetSamplerName(CodeGenContext context, AstTextureOperation texOp, ref int srcIndex) { - var index = texOp.IsSeparate ? texOp.GetSamplerSetAndBinding() : texOp.GetTextureSetAndBinding(); - var sourceIndex = texOp.IsSeparate ? srcIndex++ : srcIndex + 1; + SetBindingPair index = texOp.IsSeparate ? texOp.GetSamplerSetAndBinding() : texOp.GetTextureSetAndBinding(); + int sourceIndex = texOp.IsSeparate ? srcIndex++ : srcIndex + 1; TextureDefinition samplerDefinition = context.Properties.Textures[index]; string name = samplerDefinition.Name; @@ -589,7 +589,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions { AstTextureOperation texOp = (AstTextureOperation)operation; - var texCallBuilder = new StringBuilder(); + StringBuilder texCallBuilder = new StringBuilder(); int srcIndex = 0; diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/IoMap.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/IoMap.cs index e02d0a61f..118612c66 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/IoMap.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/IoMap.cs @@ -15,7 +15,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions bool isOutput, bool isPerPatch) { - var returnValue = ioVariable switch + (string, AggregateType) returnValue = ioVariable switch { IoVariable.BaseInstance => ("base_instance", AggregateType.U32), IoVariable.BaseVertex => ("base_vertex", AggregateType.U32), diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs index 7de6ee5dd..ddb013c05 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl CodeGenContext context = new(info, parameters); - var sets = Declarations.Declare(context, info); + int[] sets = Declarations.Declare(context, info); if (info.Functions.Count != 0) { @@ -168,15 +168,15 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl args = args.Append($"constant ConstantBuffers &constant_buffers [[buffer({Defaults.ConstantBuffersIndex})]]").ToArray(); args = args.Append($"device StorageBuffers &storage_buffers [[buffer({Defaults.StorageBuffersIndex})]]").ToArray(); - foreach (var set in sets) + foreach (int set in sets) { - var bindingIndex = set + Defaults.BaseSetIndex; + long bindingIndex = set + Defaults.BaseSetIndex; args = args.Append($"constant {Declarations.GetNameForSet(set)} &{Declarations.GetNameForSet(set, true)} [[buffer({bindingIndex})]]").ToArray(); } } - var funcPrefix = $"{funcKeyword} {returnType} {funcName ?? function.Name}("; - var indent = new string(' ', funcPrefix.Length); + string funcPrefix = $"{funcKeyword} {returnType} {funcName ?? function.Name}("; + string indent = new string(' ', funcPrefix.Length); return $"{funcPrefix}{string.Join($", \n{indent}", args)})"; } diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs index cc7977f84..d573fe39a 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs @@ -127,7 +127,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private BlockState GetBlockStateLazy(AstBlock block) { - if (!_labels.TryGetValue(block, out var blockState)) + if (!_labels.TryGetValue(block, out BlockState blockState)) { blockState = new BlockState(); @@ -139,7 +139,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv public Instruction NewBlock() { - var label = Label(); + Instruction label = Label(); Branch(label); AddLabel(label); return label; @@ -147,7 +147,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv public Instruction[] GetMainInterface() { - var mainInterface = new List(); + List mainInterface = new List(); mainInterface.AddRange(Inputs.Values); mainInterface.AddRange(Outputs.Values); @@ -196,7 +196,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { if (node is AstOperation operation) { - var opResult = Instructions.Generate(this, operation); + OperationResult opResult = Instructions.Generate(this, operation); return BitcastIfNeeded(type, opResult.Type, opResult.Value); } else if (node is AstOperand operand) @@ -218,7 +218,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { if (node is AstOperation operation) { - var opResult = Instructions.Generate(this, operation); + OperationResult opResult = Instructions.Generate(this, operation); type = opResult.Type; return opResult.Value; } @@ -273,13 +273,13 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv public Instruction GetLocal(AggregateType dstType, AstOperand local) { - var srcType = local.VarType; + AggregateType srcType = local.VarType; return BitcastIfNeeded(dstType, srcType, Load(GetType(srcType), GetLocalPointer(local))); } public Instruction GetArgument(AggregateType dstType, AstOperand funcArg) { - var srcType = funcArg.VarType; + AggregateType srcType = funcArg.VarType; return BitcastIfNeeded(dstType, srcType, Load(GetType(srcType), GetArgumentPointer(funcArg))); } @@ -339,8 +339,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } else if (srcType == AggregateType.Bool) { - var intTrue = Constant(TypeS32(), IrConsts.True); - var intFalse = Constant(TypeS32(), IrConsts.False); + Instruction intTrue = Constant(TypeS32(), IrConsts.True); + Instruction intFalse = Constant(TypeS32(), IrConsts.False); return BitcastIfNeeded(dstType, AggregateType.S32, Select(TypeS32(), value, intTrue, intFalse)); } diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs index 55d35bf0d..0b2ad41fb 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs @@ -20,10 +20,10 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static void DeclareParameters(CodeGenContext context, IEnumerable argTypes, int argIndex) { - foreach (var argType in argTypes) + foreach (AggregateType argType in argTypes) { - var argPointerType = context.TypePointer(StorageClass.Function, context.GetType(argType)); - var spvArg = context.FunctionParameter(argPointerType); + SpvInstruction argPointerType = context.TypePointer(StorageClass.Function, context.GetType(argType)); + SpvInstruction spvArg = context.FunctionParameter(argPointerType); context.DeclareArgument(argIndex++, spvArg); } @@ -33,8 +33,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { foreach (AstOperand local in function.Locals) { - var localPointerType = context.TypePointer(StorageClass.Function, context.GetType(local.VarType)); - var spvLocal = context.Variable(localPointerType, StorageClass.Function); + SpvInstruction localPointerType = context.TypePointer(StorageClass.Function, context.GetType(local.VarType)); + SpvInstruction spvLocal = context.Variable(localPointerType, StorageClass.Function); context.AddLocalVariable(spvLocal); context.DeclareLocal(local, spvLocal); @@ -60,8 +60,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { foreach ((int id, MemoryDefinition memory) in memories) { - var pointerType = context.TypePointer(storage, context.GetType(memory.Type, memory.ArrayLength)); - var variable = context.Variable(pointerType, storage); + SpvInstruction pointerType = context.TypePointer(storage, context.GetType(memory.Type, memory.ArrayLength)); + SpvInstruction variable = context.Variable(pointerType, storage); context.AddGlobalVariable(variable); @@ -123,7 +123,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } } - var structType = context.TypeStruct(false, structFieldTypes); + SpvInstruction structType = context.TypeStruct(false, structFieldTypes); if (decoratedTypes.Add(structType)) { @@ -135,8 +135,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } } - var pointerType = context.TypePointer(StorageClass.Uniform, structType); - var variable = context.Variable(pointerType, StorageClass.Uniform); + SpvInstruction pointerType = context.TypePointer(StorageClass.Uniform, structType); + SpvInstruction variable = context.Variable(pointerType, StorageClass.Uniform); context.Name(variable, buffer.Name); context.Decorate(variable, Decoration.DescriptorSet, (LiteralInteger)setIndex); @@ -156,7 +156,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static void DeclareSamplers(CodeGenContext context, IEnumerable samplers) { - foreach (var sampler in samplers) + foreach (TextureDefinition sampler in samplers) { int setIndex = context.TargetApi == TargetApi.Vulkan ? sampler.Set : 0; @@ -165,7 +165,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv if (sampler.Type != SamplerType.None) { - var dim = (sampler.Type & SamplerType.Mask) switch + Dim dim = (sampler.Type & SamplerType.Mask) switch { SamplerType.Texture1D => Dim.Dim1D, SamplerType.Texture2D => Dim.Dim2D, @@ -191,22 +191,22 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv imageType = sampledImageType = context.TypeSampler(); } - var sampledOrSeparateImageType = sampler.Separate ? imageType : sampledImageType; - var sampledImagePointerType = context.TypePointer(StorageClass.UniformConstant, sampledOrSeparateImageType); - var sampledImageArrayPointerType = sampledImagePointerType; + SpvInstruction sampledOrSeparateImageType = sampler.Separate ? imageType : sampledImageType; + SpvInstruction sampledImagePointerType = context.TypePointer(StorageClass.UniformConstant, sampledOrSeparateImageType); + SpvInstruction sampledImageArrayPointerType = sampledImagePointerType; if (sampler.ArrayLength == 0) { - var sampledImageArrayType = context.TypeRuntimeArray(sampledOrSeparateImageType); + SpvInstruction sampledImageArrayType = context.TypeRuntimeArray(sampledOrSeparateImageType); sampledImageArrayPointerType = context.TypePointer(StorageClass.UniformConstant, sampledImageArrayType); } else if (sampler.ArrayLength != 1) { - var sampledImageArrayType = context.TypeArray(sampledOrSeparateImageType, context.Constant(context.TypeU32(), sampler.ArrayLength)); + SpvInstruction sampledImageArrayType = context.TypeArray(sampledOrSeparateImageType, context.Constant(context.TypeU32(), sampler.ArrayLength)); sampledImageArrayPointerType = context.TypePointer(StorageClass.UniformConstant, sampledImageArrayType); } - var sampledImageVariable = context.Variable(sampledImageArrayPointerType, StorageClass.UniformConstant); + SpvInstruction sampledImageVariable = context.Variable(sampledImageArrayPointerType, StorageClass.UniformConstant); context.Samplers.Add(new(sampler.Set, sampler.Binding), new SamplerDeclaration( imageType, @@ -225,13 +225,13 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static void DeclareImages(CodeGenContext context, IEnumerable images) { - foreach (var image in images) + foreach (TextureDefinition image in images) { int setIndex = context.TargetApi == TargetApi.Vulkan ? image.Set : 0; - var dim = GetDim(image.Type); + Dim dim = GetDim(image.Type); - var imageType = context.TypeImage( + SpvInstruction imageType = context.TypeImage( context.GetType(image.Format.GetComponentType()), dim, image.Type.HasFlag(SamplerType.Shadow), @@ -240,21 +240,21 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AccessQualifier.ReadWrite, GetImageFormat(image.Format)); - var imagePointerType = context.TypePointer(StorageClass.UniformConstant, imageType); - var imageArrayPointerType = imagePointerType; + SpvInstruction imagePointerType = context.TypePointer(StorageClass.UniformConstant, imageType); + SpvInstruction imageArrayPointerType = imagePointerType; if (image.ArrayLength == 0) { - var imageArrayType = context.TypeRuntimeArray(imageType); + SpvInstruction imageArrayType = context.TypeRuntimeArray(imageType); imageArrayPointerType = context.TypePointer(StorageClass.UniformConstant, imageArrayType); } else if (image.ArrayLength != 1) { - var imageArrayType = context.TypeArray(imageType, context.Constant(context.TypeU32(), image.ArrayLength)); + SpvInstruction imageArrayType = context.TypeArray(imageType, context.Constant(context.TypeU32(), image.ArrayLength)); imageArrayPointerType = context.TypePointer(StorageClass.UniformConstant, imageArrayType); } - var imageVariable = context.Variable(imageArrayPointerType, StorageClass.UniformConstant); + SpvInstruction imageVariable = context.Variable(imageArrayPointerType, StorageClass.UniformConstant); context.Images.Add(new(image.Set, image.Binding), new ImageDeclaration(imageType, imagePointerType, imageVariable, image.ArrayLength != 1)); @@ -338,7 +338,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv if (context.Definitions.Stage == ShaderStage.Fragment && context.Definitions.DualSourceBlend) { - foreach (var ioDefinition in info.IoDefinitions) + foreach (IoDefinition ioDefinition in info.IoDefinitions) { if (ioDefinition.IoVariable == IoVariable.FragmentOutputColor && ioDefinition.Location < firstLocation) { @@ -347,13 +347,13 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } } - foreach (var ioDefinition in info.IoDefinitions) + foreach (IoDefinition ioDefinition in info.IoDefinitions) { PixelImap iq = PixelImap.Unused; if (context.Definitions.Stage == ShaderStage.Fragment) { - var ioVariable = ioDefinition.IoVariable; + IoVariable ioVariable = ioDefinition.IoVariable; if (ioVariable == IoVariable.UserDefined) { iq = context.Definitions.ImapTypes[ioDefinition.Location].GetFirstUsedType(); @@ -389,11 +389,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { if (context.Definitions.Stage != ShaderStage.Vertex) { - var perVertexInputStructType = CreatePerVertexStructType(context); + SpvInstruction perVertexInputStructType = CreatePerVertexStructType(context); int arraySize = context.Definitions.Stage == ShaderStage.Geometry ? context.Definitions.InputTopology.ToInputVertices() : 32; - var perVertexInputArrayType = context.TypeArray(perVertexInputStructType, context.Constant(context.TypeU32(), arraySize)); - var perVertexInputPointerType = context.TypePointer(StorageClass.Input, perVertexInputArrayType); - var perVertexInputVariable = context.Variable(perVertexInputPointerType, StorageClass.Input); + SpvInstruction perVertexInputArrayType = context.TypeArray(perVertexInputStructType, context.Constant(context.TypeU32(), arraySize)); + SpvInstruction perVertexInputPointerType = context.TypePointer(StorageClass.Input, perVertexInputArrayType); + SpvInstruction perVertexInputVariable = context.Variable(perVertexInputPointerType, StorageClass.Input); context.Name(perVertexInputVariable, "gl_in"); @@ -411,11 +411,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } } - var perVertexOutputStructType = CreatePerVertexStructType(context); + SpvInstruction perVertexOutputStructType = CreatePerVertexStructType(context); void DecorateTfo(IoVariable ioVariable, int fieldIndex) { - if (context.Definitions.TryGetTransformFeedbackOutput(ioVariable, 0, 0, out var transformFeedbackOutput)) + if (context.Definitions.TryGetTransformFeedbackOutput(ioVariable, 0, 0, out TransformFeedbackOutput transformFeedbackOutput)) { context.MemberDecorate(perVertexOutputStructType, fieldIndex, Decoration.XfbBuffer, (LiteralInteger)transformFeedbackOutput.Buffer); context.MemberDecorate(perVertexOutputStructType, fieldIndex, Decoration.XfbStride, (LiteralInteger)transformFeedbackOutput.Stride); @@ -439,8 +439,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv perVertexOutputArrayType = perVertexOutputStructType; } - var perVertexOutputPointerType = context.TypePointer(StorageClass.Output, perVertexOutputArrayType); - var perVertexOutputVariable = context.Variable(perVertexOutputPointerType, StorageClass.Output); + SpvInstruction perVertexOutputPointerType = context.TypePointer(StorageClass.Output, perVertexOutputArrayType); + SpvInstruction perVertexOutputVariable = context.Variable(perVertexOutputPointerType, StorageClass.Output); context.AddGlobalVariable(perVertexOutputVariable); context.Outputs.Add(new IoDefinition(StorageKind.Output, IoVariable.Position), perVertexOutputVariable); @@ -449,12 +449,12 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static SpvInstruction CreatePerVertexStructType(CodeGenContext context) { - var vec4FloatType = context.TypeVector(context.TypeFP32(), 4); - var floatType = context.TypeFP32(); - var array8FloatType = context.TypeArray(context.TypeFP32(), context.Constant(context.TypeU32(), 8)); - var array1FloatType = context.TypeArray(context.TypeFP32(), context.Constant(context.TypeU32(), 1)); + SpvInstruction vec4FloatType = context.TypeVector(context.TypeFP32(), 4); + SpvInstruction floatType = context.TypeFP32(); + SpvInstruction array8FloatType = context.TypeArray(context.TypeFP32(), context.Constant(context.TypeU32(), 8)); + SpvInstruction array1FloatType = context.TypeArray(context.TypeFP32(), context.Constant(context.TypeU32(), 1)); - var perVertexStructType = context.TypeStruct(true, vec4FloatType, floatType, array8FloatType, array1FloatType); + SpvInstruction perVertexStructType = context.TypeStruct(true, vec4FloatType, floatType, array8FloatType, array1FloatType); context.Name(perVertexStructType, "gl_PerVertex"); @@ -487,7 +487,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv int firstLocation = 0) { IoVariable ioVariable = ioDefinition.IoVariable; - var storageClass = isOutput ? StorageClass.Output : StorageClass.Input; + StorageClass storageClass = isOutput ? StorageClass.Output : StorageClass.Input; bool isBuiltIn; BuiltIn builtIn = default; @@ -532,7 +532,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv }; } - var spvType = context.GetType(varType, IoMap.GetSpirvBuiltInArrayLength(ioVariable)); + SpvInstruction spvType = context.GetType(varType, IoMap.GetSpirvBuiltInArrayLength(ioVariable)); bool builtInPassthrough = false; if (!isPerPatch && IoMap.IsPerVertex(ioVariable, context.Definitions.Stage, isOutput)) @@ -551,8 +551,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv spvType = context.TypeArray(spvType, context.Constant(context.TypeU32(), context.Definitions.ThreadsPerInputPrimitive)); } - var spvPointerType = context.TypePointer(storageClass, spvType); - var spvVar = context.Variable(spvPointerType, storageClass); + SpvInstruction spvPointerType = context.TypePointer(storageClass, spvType); + SpvInstruction spvVar = context.Variable(spvPointerType, storageClass); if (builtInPassthrough) { @@ -641,7 +641,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv ioVariable, ioDefinition.Location, ioDefinition.Component, - out var transformFeedbackOutput)) + out TransformFeedbackOutput transformFeedbackOutput)) { context.Decorate(spvVar, Decoration.XfbBuffer, (LiteralInteger)transformFeedbackOutput.Buffer); context.Decorate(spvVar, Decoration.XfbStride, (LiteralInteger)transformFeedbackOutput.Stride); @@ -650,7 +650,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv context.AddGlobalVariable(spvVar); - var dict = isPerPatch + Dictionary dict = isPerPatch ? (isOutput ? context.OutputsPerPatch : context.InputsPerPatch) : (isOutput ? context.Outputs : context.Inputs); dict.Add(ioDefinition, spvVar); diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs index 6206985d8..7796bccbe 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs @@ -153,7 +153,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv public static OperationResult Generate(CodeGenContext context, AstOperation operation) { - var handler = _instTable[(int)(operation.Inst & Instruction.Mask)]; + Func handler = _instTable[(int)(operation.Inst & Instruction.Mask)]; if (handler != null) { return handler(context, operation); @@ -226,13 +226,13 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateBallot(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); - var uvec4Type = context.TypeVector(context.TypeU32(), 4); - var execution = context.Constant(context.TypeU32(), Scope.Subgroup); + SpvInstruction uvec4Type = context.TypeVector(context.TypeU32(), 4); + SpvInstruction execution = context.Constant(context.TypeU32(), Scope.Subgroup); - var maskVector = context.GroupNonUniformBallot(uvec4Type, execution, context.Get(AggregateType.Bool, source)); - var mask = context.CompositeExtract(context.TypeU32(), maskVector, (SpvLiteralInteger)operation.Index); + SpvInstruction maskVector = context.GroupNonUniformBallot(uvec4Type, execution, context.Get(AggregateType.Bool, source)); + SpvInstruction mask = context.CompositeExtract(context.TypeU32(), maskVector, (SpvLiteralInteger)operation.Index); return new OperationResult(AggregateType.U32, mask); } @@ -308,21 +308,21 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv Debug.Assert(funcId.Type == OperandType.Constant); - var (function, spvFunc) = context.GetFunction(funcId.Value); + (StructuredFunction function, SpvInstruction spvFunc) = context.GetFunction(funcId.Value); - var args = new SpvInstruction[operation.SourcesCount - 1]; + SpvInstruction[] args = new SpvInstruction[operation.SourcesCount - 1]; for (int i = 0; i < args.Length; i++) { - var operand = operation.GetSource(i + 1); + IAstNode operand = operation.GetSource(i + 1); AstOperand local = (AstOperand)operand; Debug.Assert(local.Type == OperandType.LocalVariable); args[i] = context.GetLocalPointer(local); } - var retType = function.ReturnType; - var result = context.FunctionCall(context.GetType(retType), spvFunc, args); + AggregateType retType = function.ReturnType; + SpvInstruction result = context.FunctionCall(context.GetType(retType), spvFunc, args); return new OperationResult(retType, result); } @@ -398,11 +398,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateConditionalSelect(CodeGenContext context, AstOperation operation) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); - var src3 = operation.GetSource(2); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); + IAstNode src3 = operation.GetSource(2); - var cond = context.Get(AggregateType.Bool, src1); + SpvInstruction cond = context.Get(AggregateType.Bool, src1); if (operation.Inst.HasFlag(Instruction.FP64)) { @@ -420,70 +420,70 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateConvertFP32ToFP64(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.FP64, context.FConvert(context.TypeFP64(), context.GetFP32(source))); } private static OperationResult GenerateConvertFP32ToS32(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.S32, context.ConvertFToS(context.TypeS32(), context.GetFP32(source))); } private static OperationResult GenerateConvertFP32ToU32(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.U32, context.ConvertFToU(context.TypeU32(), context.GetFP32(source))); } private static OperationResult GenerateConvertFP64ToFP32(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.FP32, context.FConvert(context.TypeFP32(), context.GetFP64(source))); } private static OperationResult GenerateConvertFP64ToS32(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.S32, context.ConvertFToS(context.TypeS32(), context.GetFP64(source))); } private static OperationResult GenerateConvertFP64ToU32(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.U32, context.ConvertFToU(context.TypeU32(), context.GetFP64(source))); } private static OperationResult GenerateConvertS32ToFP32(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.FP32, context.ConvertSToF(context.TypeFP32(), context.GetS32(source))); } private static OperationResult GenerateConvertS32ToFP64(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.FP64, context.ConvertSToF(context.TypeFP64(), context.GetS32(source))); } private static OperationResult GenerateConvertU32ToFP32(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.FP32, context.ConvertUToF(context.TypeFP32(), context.GetU32(source))); } private static OperationResult GenerateConvertU32ToFP64(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.FP64, context.ConvertUToF(context.TypeFP64(), context.GetU32(source))); } @@ -555,19 +555,19 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateFindLSB(CodeGenContext context, AstOperation operation) { - var source = context.GetU32(operation.GetSource(0)); + SpvInstruction source = context.GetU32(operation.GetSource(0)); return new OperationResult(AggregateType.U32, context.GlslFindILsb(context.TypeU32(), source)); } private static OperationResult GenerateFindMSBS32(CodeGenContext context, AstOperation operation) { - var source = context.GetS32(operation.GetSource(0)); + SpvInstruction source = context.GetS32(operation.GetSource(0)); return new OperationResult(AggregateType.U32, context.GlslFindSMsb(context.TypeU32(), source)); } private static OperationResult GenerateFindMSBU32(CodeGenContext context, AstOperation operation) { - var source = context.GetU32(operation.GetSource(0)); + SpvInstruction source = context.GetU32(operation.GetSource(0)); return new OperationResult(AggregateType.U32, context.GlslFindUMsb(context.TypeU32(), source)); } @@ -591,7 +591,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { AstTextureOperation texOp = (AstTextureOperation)operation; - var componentType = texOp.Format.GetComponentType(); + AggregateType componentType = texOp.Format.GetComponentType(); bool isArray = (texOp.Type & SamplerType.Array) != 0; @@ -630,7 +630,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv elems[i] = Src(AggregateType.S32); } - var vectorType = context.TypeVector(context.TypeS32(), pCount); + SpvInstruction vectorType = context.TypeVector(context.TypeS32(), pCount); pCoords = context.CompositeConstruct(vectorType, elems); } else @@ -640,11 +640,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv SpvInstruction value = Src(componentType); - var pointer = context.ImageTexelPointer(imagePointerType, image, pCoords, context.Constant(context.TypeU32(), 0)); - var one = context.Constant(context.TypeU32(), 1); - var zero = context.Constant(context.TypeU32(), 0); + SpvInstruction pointer = context.ImageTexelPointer(imagePointerType, image, pCoords, context.Constant(context.TypeU32(), 0)); + SpvInstruction one = context.Constant(context.TypeU32(), 1); + SpvInstruction zero = context.Constant(context.TypeU32(), 0); - var result = (texOp.Flags & TextureFlags.AtomicMask) switch + SpvInstruction result = (texOp.Flags & TextureFlags.AtomicMask) switch { TextureFlags.Add => context.AtomicIAdd(resultType, pointer, one, zero, value), TextureFlags.Minimum => componentType == AggregateType.S32 @@ -670,7 +670,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { AstTextureOperation texOp = (AstTextureOperation)operation; - var componentType = texOp.Format.GetComponentType(); + AggregateType componentType = texOp.Format.GetComponentType(); bool isArray = (texOp.Type & SamplerType.Array) != 0; @@ -708,7 +708,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv elems[i] = Src(AggregateType.S32); } - var vectorType = context.TypeVector(context.TypeS32(), pCount); + SpvInstruction vectorType = context.TypeVector(context.TypeS32(), pCount); pCoords = context.CompositeConstruct(vectorType, elems); } else @@ -716,11 +716,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv pCoords = Src(AggregateType.S32); } - var imageComponentType = context.GetType(componentType); - var swizzledResultType = texOp.GetVectorType(componentType); + SpvInstruction imageComponentType = context.GetType(componentType); + AggregateType swizzledResultType = texOp.GetVectorType(componentType); - var texel = context.ImageRead(context.TypeVector(imageComponentType, 4), image, pCoords, ImageOperandsMask.MaskNone); - var result = GetSwizzledResult(context, texel, swizzledResultType, texOp.Index); + SpvInstruction texel = context.ImageRead(context.TypeVector(imageComponentType, 4), image, pCoords, ImageOperandsMask.MaskNone); + SpvInstruction result = GetSwizzledResult(context, texel, swizzledResultType, texOp.Index); return new OperationResult(componentType, result); } @@ -765,7 +765,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv elems[i] = Src(AggregateType.S32); } - var vectorType = context.TypeVector(context.TypeS32(), pCount); + SpvInstruction vectorType = context.TypeVector(context.TypeS32(), pCount); pCoords = context.CompositeConstruct(vectorType, elems); } else @@ -773,7 +773,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv pCoords = Src(AggregateType.S32); } - var componentType = texOp.Format.GetComponentType(); + AggregateType componentType = texOp.Format.GetComponentType(); const int ComponentsCount = 4; @@ -796,7 +796,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } } - var texel = context.CompositeConstruct(context.TypeVector(context.GetType(componentType), ComponentsCount), cElems); + SpvInstruction texel = context.CompositeConstruct(context.TypeVector(context.GetType(componentType), ComponentsCount), cElems); context.ImageWrite(image, pCoords, texel, ImageOperandsMask.MaskNone); @@ -805,7 +805,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateIsNan(CodeGenContext context, AstOperation operation) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); SpvInstruction result; @@ -853,7 +853,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv elems[i] = Src(AggregateType.FP32); } - var vectorType = context.TypeVector(context.TypeFP32(), pCount); + SpvInstruction vectorType = context.TypeVector(context.TypeFP32(), pCount); pCoords = context.CompositeConstruct(vectorType, elems); } else @@ -861,9 +861,9 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv pCoords = Src(AggregateType.FP32); } - var resultType = context.TypeVector(context.TypeFP32(), 2); - var packed = context.ImageQueryLod(resultType, image, pCoords); - var result = context.CompositeExtract(context.TypeFP32(), packed, (SpvLiteralInteger)texOp.Index); + SpvInstruction resultType = context.TypeVector(context.TypeFP32(), 2); + SpvInstruction packed = context.ImageQueryLod(resultType, image, pCoords); + SpvInstruction result = context.CompositeExtract(context.TypeFP32(), packed, (SpvLiteralInteger)texOp.Index); return new OperationResult(AggregateType.FP32, result); } @@ -959,11 +959,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateMultiplyHighS32(CodeGenContext context, AstOperation operation) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); - var resultType = context.TypeStruct(false, context.TypeS32(), context.TypeS32()); - var result = context.SMulExtended(resultType, context.GetS32(src1), context.GetS32(src2)); + SpvInstruction resultType = context.TypeStruct(false, context.TypeS32(), context.TypeS32()); + SpvInstruction result = context.SMulExtended(resultType, context.GetS32(src1), context.GetS32(src2)); result = context.CompositeExtract(context.TypeS32(), result, 1); return new OperationResult(AggregateType.S32, result); @@ -971,11 +971,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateMultiplyHighU32(CodeGenContext context, AstOperation operation) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); - var resultType = context.TypeStruct(false, context.TypeU32(), context.TypeU32()); - var result = context.UMulExtended(resultType, context.GetU32(src1), context.GetU32(src2)); + SpvInstruction resultType = context.TypeStruct(false, context.TypeU32(), context.TypeU32()); + SpvInstruction result = context.UMulExtended(resultType, context.GetU32(src1), context.GetU32(src2)); result = context.CompositeExtract(context.TypeU32(), result, 1); return new OperationResult(AggregateType.U32, result); @@ -988,20 +988,20 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GeneratePackDouble2x32(CodeGenContext context, AstOperation operation) { - var value0 = context.GetU32(operation.GetSource(0)); - var value1 = context.GetU32(operation.GetSource(1)); - var vector = context.CompositeConstruct(context.TypeVector(context.TypeU32(), 2), value0, value1); - var result = context.GlslPackDouble2x32(context.TypeFP64(), vector); + SpvInstruction value0 = context.GetU32(operation.GetSource(0)); + SpvInstruction value1 = context.GetU32(operation.GetSource(1)); + SpvInstruction vector = context.CompositeConstruct(context.TypeVector(context.TypeU32(), 2), value0, value1); + SpvInstruction result = context.GlslPackDouble2x32(context.TypeFP64(), vector); return new OperationResult(AggregateType.FP64, result); } private static OperationResult GeneratePackHalf2x16(CodeGenContext context, AstOperation operation) { - var value0 = context.GetFP32(operation.GetSource(0)); - var value1 = context.GetFP32(operation.GetSource(1)); - var vector = context.CompositeConstruct(context.TypeVector(context.TypeFP32(), 2), value0, value1); - var result = context.GlslPackHalf2x16(context.TypeU32(), vector); + SpvInstruction value0 = context.GetFP32(operation.GetSource(0)); + SpvInstruction value1 = context.GetFP32(operation.GetSource(1)); + SpvInstruction vector = context.CompositeConstruct(context.TypeVector(context.TypeFP32(), 2), value0, value1); + SpvInstruction result = context.GlslPackHalf2x16(context.TypeU32(), vector); return new OperationResult(AggregateType.U32, result); } @@ -1049,40 +1049,40 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateShuffle(CodeGenContext context, AstOperation operation) { - var value = context.GetFP32(operation.GetSource(0)); - var index = context.GetU32(operation.GetSource(1)); + SpvInstruction value = context.GetFP32(operation.GetSource(0)); + SpvInstruction index = context.GetU32(operation.GetSource(1)); - var result = context.GroupNonUniformShuffle(context.TypeFP32(), context.Constant(context.TypeU32(), (int)Scope.Subgroup), value, index); + SpvInstruction result = context.GroupNonUniformShuffle(context.TypeFP32(), context.Constant(context.TypeU32(), (int)Scope.Subgroup), value, index); return new OperationResult(AggregateType.FP32, result); } private static OperationResult GenerateShuffleDown(CodeGenContext context, AstOperation operation) { - var value = context.GetFP32(operation.GetSource(0)); - var index = context.GetU32(operation.GetSource(1)); + SpvInstruction value = context.GetFP32(operation.GetSource(0)); + SpvInstruction index = context.GetU32(operation.GetSource(1)); - var result = context.GroupNonUniformShuffleDown(context.TypeFP32(), context.Constant(context.TypeU32(), (int)Scope.Subgroup), value, index); + SpvInstruction result = context.GroupNonUniformShuffleDown(context.TypeFP32(), context.Constant(context.TypeU32(), (int)Scope.Subgroup), value, index); return new OperationResult(AggregateType.FP32, result); } private static OperationResult GenerateShuffleUp(CodeGenContext context, AstOperation operation) { - var value = context.GetFP32(operation.GetSource(0)); - var index = context.GetU32(operation.GetSource(1)); + SpvInstruction value = context.GetFP32(operation.GetSource(0)); + SpvInstruction index = context.GetU32(operation.GetSource(1)); - var result = context.GroupNonUniformShuffleUp(context.TypeFP32(), context.Constant(context.TypeU32(), (int)Scope.Subgroup), value, index); + SpvInstruction result = context.GroupNonUniformShuffleUp(context.TypeFP32(), context.Constant(context.TypeU32(), (int)Scope.Subgroup), value, index); return new OperationResult(AggregateType.FP32, result); } private static OperationResult GenerateShuffleXor(CodeGenContext context, AstOperation operation) { - var value = context.GetFP32(operation.GetSource(0)); - var index = context.GetU32(operation.GetSource(1)); + SpvInstruction value = context.GetFP32(operation.GetSource(0)); + SpvInstruction index = context.GetU32(operation.GetSource(1)); - var result = context.GroupNonUniformShuffleXor(context.TypeFP32(), context.Constant(context.TypeU32(), (int)Scope.Subgroup), value, index); + SpvInstruction result = context.GroupNonUniformShuffleXor(context.TypeFP32(), context.Constant(context.TypeU32(), (int)Scope.Subgroup), value, index); return new OperationResult(AggregateType.FP32, result); } @@ -1109,31 +1109,31 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateSwizzleAdd(CodeGenContext context, AstOperation operation) { - var x = context.Get(AggregateType.FP32, operation.GetSource(0)); - var y = context.Get(AggregateType.FP32, operation.GetSource(1)); - var mask = context.Get(AggregateType.U32, operation.GetSource(2)); + SpvInstruction x = context.Get(AggregateType.FP32, operation.GetSource(0)); + SpvInstruction y = context.Get(AggregateType.FP32, operation.GetSource(1)); + SpvInstruction mask = context.Get(AggregateType.U32, operation.GetSource(2)); - var v4float = context.TypeVector(context.TypeFP32(), 4); - var one = context.Constant(context.TypeFP32(), 1.0f); - var minusOne = context.Constant(context.TypeFP32(), -1.0f); - var zero = context.Constant(context.TypeFP32(), 0.0f); - var xLut = context.ConstantComposite(v4float, one, minusOne, one, zero); - var yLut = context.ConstantComposite(v4float, one, one, minusOne, one); + SpvInstruction v4float = context.TypeVector(context.TypeFP32(), 4); + SpvInstruction one = context.Constant(context.TypeFP32(), 1.0f); + SpvInstruction minusOne = context.Constant(context.TypeFP32(), -1.0f); + SpvInstruction zero = context.Constant(context.TypeFP32(), 0.0f); + SpvInstruction xLut = context.ConstantComposite(v4float, one, minusOne, one, zero); + SpvInstruction yLut = context.ConstantComposite(v4float, one, one, minusOne, one); - var three = context.Constant(context.TypeU32(), 3); + SpvInstruction three = context.Constant(context.TypeU32(), 3); - var threadId = GetScalarInput(context, IoVariable.SubgroupLaneId); - var shift = context.BitwiseAnd(context.TypeU32(), threadId, three); + SpvInstruction threadId = GetScalarInput(context, IoVariable.SubgroupLaneId); + SpvInstruction shift = context.BitwiseAnd(context.TypeU32(), threadId, three); shift = context.ShiftLeftLogical(context.TypeU32(), shift, context.Constant(context.TypeU32(), 1)); - var lutIdx = context.ShiftRightLogical(context.TypeU32(), mask, shift); + SpvInstruction lutIdx = context.ShiftRightLogical(context.TypeU32(), mask, shift); lutIdx = context.BitwiseAnd(context.TypeU32(), lutIdx, three); - var xLutValue = context.VectorExtractDynamic(context.TypeFP32(), xLut, lutIdx); - var yLutValue = context.VectorExtractDynamic(context.TypeFP32(), yLut, lutIdx); + SpvInstruction xLutValue = context.VectorExtractDynamic(context.TypeFP32(), xLut, lutIdx); + SpvInstruction yLutValue = context.VectorExtractDynamic(context.TypeFP32(), yLut, lutIdx); - var xResult = context.FMul(context.TypeFP32(), x, xLutValue); - var yResult = context.FMul(context.TypeFP32(), y, yLutValue); - var result = context.FAdd(context.TypeFP32(), xResult, yResult); + SpvInstruction xResult = context.FMul(context.TypeFP32(), x, xLutValue); + SpvInstruction yResult = context.FMul(context.TypeFP32(), y, yLutValue); + SpvInstruction result = context.FAdd(context.TypeFP32(), xResult, yResult); return new OperationResult(AggregateType.FP32, result); } @@ -1200,7 +1200,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } } - var vectorType = context.TypeVector(intCoords ? context.TypeS32() : context.TypeFP32(), count); + SpvInstruction vectorType = context.TypeVector(intCoords ? context.TypeS32() : context.TypeFP32(), count); return context.CompositeConstruct(vectorType, elems); } else @@ -1222,7 +1222,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv elems[index] = Src(AggregateType.FP32); } - var vectorType = context.TypeVector(context.TypeFP32(), count); + SpvInstruction vectorType = context.TypeVector(context.TypeFP32(), count); return context.CompositeConstruct(vectorType, elems); } else @@ -1272,7 +1272,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv elems[index] = Src(AggregateType.S32); } - var vectorType = context.TypeVector(context.TypeS32(), count); + SpvInstruction vectorType = context.TypeVector(context.TypeS32(), count); return context.ConstantComposite(vectorType, elems); } @@ -1327,8 +1327,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv compIdx = Src(AggregateType.S32); } - var operandsList = new List(); - var operandsMask = ImageOperandsMask.MaskNone; + List operandsList = new List(); + ImageOperandsMask operandsMask = ImageOperandsMask.MaskNone; if (hasLodBias) { @@ -1369,14 +1369,14 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv bool colorIsVector = isGather || !isShadow; - var resultType = colorIsVector ? context.TypeVector(context.TypeFP32(), 4) : context.TypeFP32(); + SpvInstruction resultType = colorIsVector ? context.TypeVector(context.TypeFP32(), 4) : context.TypeFP32(); if (intCoords) { image = context.Image(declaration.ImageType, image); } - var operands = operandsList.ToArray(); + SpvInstruction[] operands = operandsList.ToArray(); SpvInstruction result; @@ -1415,7 +1415,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv result = context.ImageSampleImplicitLod(resultType, image, pCoords, operandsMask, operands); } - var swizzledResultType = AggregateType.FP32; + AggregateType swizzledResultType = AggregateType.FP32; if (colorIsVector) { @@ -1460,7 +1460,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } else { - var type = context.SamplersTypes[texOp.GetTextureSetAndBinding()]; + SamplerType type = context.SamplersTypes[texOp.GetTextureSetAndBinding()]; bool hasLod = !type.HasFlag(SamplerType.Multisample) && type != SamplerType.TextureBuffer; int dimensions = (type & SamplerType.Mask) == SamplerType.TextureCube ? 2 : type.GetDimensions(); @@ -1470,13 +1470,13 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv dimensions++; } - var resultType = dimensions == 1 ? context.TypeS32() : context.TypeVector(context.TypeS32(), dimensions); + SpvInstruction resultType = dimensions == 1 ? context.TypeS32() : context.TypeVector(context.TypeS32(), dimensions); SpvInstruction result; if (hasLod) { - var lod = context.GetS32(operation.GetSource(srcIndex)); + SpvInstruction lod = context.GetS32(operation.GetSource(srcIndex)); result = context.ImageQuerySizeLod(resultType, image, lod); } else @@ -1500,27 +1500,27 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateUnpackDouble2x32(CodeGenContext context, AstOperation operation) { - var value = context.GetFP64(operation.GetSource(0)); - var vector = context.GlslUnpackDouble2x32(context.TypeVector(context.TypeU32(), 2), value); - var result = context.CompositeExtract(context.TypeU32(), vector, operation.Index); + SpvInstruction value = context.GetFP64(operation.GetSource(0)); + SpvInstruction vector = context.GlslUnpackDouble2x32(context.TypeVector(context.TypeU32(), 2), value); + SpvInstruction result = context.CompositeExtract(context.TypeU32(), vector, operation.Index); return new OperationResult(AggregateType.U32, result); } private static OperationResult GenerateUnpackHalf2x16(CodeGenContext context, AstOperation operation) { - var value = context.GetU32(operation.GetSource(0)); - var vector = context.GlslUnpackHalf2x16(context.TypeVector(context.TypeFP32(), 2), value); - var result = context.CompositeExtract(context.TypeFP32(), vector, operation.Index); + SpvInstruction value = context.GetU32(operation.GetSource(0)); + SpvInstruction vector = context.GlslUnpackHalf2x16(context.TypeVector(context.TypeFP32(), 2), value); + SpvInstruction result = context.CompositeExtract(context.TypeFP32(), vector, operation.Index); return new OperationResult(AggregateType.FP32, result); } private static OperationResult GenerateVectorExtract(CodeGenContext context, AstOperation operation) { - var vector = context.GetWithType(operation.GetSource(0), out AggregateType vectorType); - var scalarType = vectorType & ~AggregateType.ElementCountMask; - var resultType = context.GetType(scalarType); + SpvInstruction vector = context.GetWithType(operation.GetSource(0), out AggregateType vectorType); + AggregateType scalarType = vectorType & ~AggregateType.ElementCountMask; + SpvInstruction resultType = context.GetType(scalarType); SpvInstruction result; if (operation.GetSource(1) is AstOperand indexOperand && indexOperand.Type == OperandType.Constant) @@ -1529,7 +1529,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } else { - var index = context.Get(AggregateType.S32, operation.GetSource(1)); + SpvInstruction index = context.Get(AggregateType.S32, operation.GetSource(1)); result = context.VectorExtractDynamic(resultType, vector, index); } @@ -1538,22 +1538,22 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static OperationResult GenerateVoteAll(CodeGenContext context, AstOperation operation) { - var execution = context.Constant(context.TypeU32(), Scope.Subgroup); - var result = context.GroupNonUniformAll(context.TypeBool(), execution, context.Get(AggregateType.Bool, operation.GetSource(0))); + SpvInstruction execution = context.Constant(context.TypeU32(), Scope.Subgroup); + SpvInstruction result = context.GroupNonUniformAll(context.TypeBool(), execution, context.Get(AggregateType.Bool, operation.GetSource(0))); return new OperationResult(AggregateType.Bool, result); } private static OperationResult GenerateVoteAllEqual(CodeGenContext context, AstOperation operation) { - var execution = context.Constant(context.TypeU32(), Scope.Subgroup); - var result = context.GroupNonUniformAllEqual(context.TypeBool(), execution, context.Get(AggregateType.Bool, operation.GetSource(0))); + SpvInstruction execution = context.Constant(context.TypeU32(), Scope.Subgroup); + SpvInstruction result = context.GroupNonUniformAllEqual(context.TypeBool(), execution, context.Get(AggregateType.Bool, operation.GetSource(0))); return new OperationResult(AggregateType.Bool, result); } private static OperationResult GenerateVoteAny(CodeGenContext context, AstOperation operation) { - var execution = context.Constant(context.TypeU32(), Scope.Subgroup); - var result = context.GroupNonUniformAny(context.TypeBool(), execution, context.Get(AggregateType.Bool, operation.GetSource(0))); + SpvInstruction execution = context.Constant(context.TypeU32(), Scope.Subgroup); + SpvInstruction result = context.GroupNonUniformAny(context.TypeBool(), execution, context.Get(AggregateType.Bool, operation.GetSource(0))); return new OperationResult(AggregateType.Bool, result); } @@ -1563,8 +1563,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv Func emitF, Func emitI) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); SpvInstruction result; @@ -1589,10 +1589,10 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AstOperation operation, Func emitU) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); - var result = emitU(context.TypeBool(), context.GetU32(src1), context.GetU32(src2)); + SpvInstruction result = emitU(context.TypeBool(), context.GetU32(src1), context.GetU32(src2)); return new OperationResult(AggregateType.Bool, result); } @@ -1604,10 +1604,10 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { SpvInstruction elemPointer = GetStoragePointer(context, operation, out AggregateType varType); - var value = context.Get(varType, operation.GetSource(operation.SourcesCount - 1)); + SpvInstruction value = context.Get(varType, operation.GetSource(operation.SourcesCount - 1)); - var one = context.Constant(context.TypeU32(), 1); - var zero = context.Constant(context.TypeU32(), 0); + SpvInstruction one = context.Constant(context.TypeU32(), 1); + SpvInstruction zero = context.Constant(context.TypeU32(), 0); return new OperationResult(varType, emitU(context.GetType(varType), elemPointer, one, zero, value)); } @@ -1616,11 +1616,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { SpvInstruction elemPointer = GetStoragePointer(context, operation, out AggregateType varType); - var value0 = context.Get(varType, operation.GetSource(operation.SourcesCount - 2)); - var value1 = context.Get(varType, operation.GetSource(operation.SourcesCount - 1)); + SpvInstruction value0 = context.Get(varType, operation.GetSource(operation.SourcesCount - 2)); + SpvInstruction value1 = context.Get(varType, operation.GetSource(operation.SourcesCount - 1)); - var one = context.Constant(context.TypeU32(), 1); - var zero = context.Constant(context.TypeU32(), 0); + SpvInstruction one = context.Constant(context.TypeU32(), 1); + SpvInstruction zero = context.Constant(context.TypeU32(), 0); return new OperationResult(varType, context.AtomicCompareExchange(context.GetType(varType), elemPointer, one, zero, zero, value1, value0)); } @@ -1636,7 +1636,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } else { - var result = context.Load(context.GetType(varType), pointer); + SpvInstruction result = context.Load(context.GetType(varType), pointer); return new OperationResult(varType, result); } } @@ -1754,8 +1754,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv storageClass = isOutput ? StorageClass.Output : StorageClass.Input; - var ioDefinition = new IoDefinition(storageKind, ioVariable, location, component); - var dict = isPerPatch + IoDefinition ioDefinition = new IoDefinition(storageKind, ioVariable, location, component); + Dictionary dict = isPerPatch ? (isOutput ? context.OutputsPerPatch : context.InputsPerPatch) : (isOutput ? context.Outputs : context.Inputs); @@ -1773,7 +1773,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { int fieldIndex = IoMap.GetPerVertexStructFieldIndex(perVertexBuiltIn.Value); - var indexes = new SpvInstruction[inputsCount + 1]; + SpvInstruction[] indexes = new SpvInstruction[inputsCount + 1]; int index = 0; if (IoMap.IsPerVertexArrayBuiltIn(storageKind, context.Definitions.Stage)) @@ -1823,7 +1823,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv pointer = context.AccessChain(context.TypePointer(storageClass, context.GetType(varType)), baseObj, e0, e1, e2); break; default: - var indexes = new SpvInstruction[inputsCount]; + SpvInstruction[] indexes = new SpvInstruction[inputsCount]; int index = 0; for (; index < inputsCount; srcIndex++, index++) @@ -1840,10 +1840,10 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static SpvInstruction GetScalarInput(CodeGenContext context, IoVariable ioVariable) { - var (_, varType) = IoMap.GetSpirvBuiltIn(ioVariable); + (_, AggregateType varType) = IoMap.GetSpirvBuiltIn(ioVariable); varType &= AggregateType.ElementTypeMask; - var ioDefinition = new IoDefinition(StorageKind.Input, ioVariable); + IoDefinition ioDefinition = new IoDefinition(StorageKind.Input, ioVariable); return context.Load(context.GetType(varType), context.Inputs[ioDefinition]); } @@ -1917,7 +1917,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv Func emitF, Func emitI) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); if (operation.Inst.HasFlag(Instruction.FP64)) { @@ -1938,7 +1938,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AstOperation operation, Func emitB) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.Bool, emitB(context.TypeBool(), context.Get(AggregateType.Bool, source))); } @@ -1947,7 +1947,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AstOperation operation, Func emit) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.FP32, emit(context.TypeFP32(), context.GetFP32(source))); } @@ -1956,7 +1956,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AstOperation operation, Func emitS) { - var source = operation.GetSource(0); + IAstNode source = operation.GetSource(0); return new OperationResult(AggregateType.S32, emitS(context.TypeS32(), context.GetS32(source))); } @@ -1966,12 +1966,12 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv Func emitF, Func emitI) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); if (operation.Inst.HasFlag(Instruction.FP64)) { - var result = emitF(context.TypeFP64(), context.GetFP64(src1), context.GetFP64(src2)); + SpvInstruction result = emitF(context.TypeFP64(), context.GetFP64(src1), context.GetFP64(src2)); if (!context.HostCapabilities.ReducedPrecision || operation.ForcePrecise) { @@ -1982,7 +1982,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } else if (operation.Inst.HasFlag(Instruction.FP32)) { - var result = emitF(context.TypeFP32(), context.GetFP32(src1), context.GetFP32(src2)); + SpvInstruction result = emitF(context.TypeFP32(), context.GetFP32(src1), context.GetFP32(src2)); if (!context.HostCapabilities.ReducedPrecision || operation.ForcePrecise) { @@ -2002,8 +2002,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AstOperation operation, Func emitB) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); return new OperationResult(AggregateType.Bool, emitB(context.TypeBool(), context.Get(AggregateType.Bool, src1), context.Get(AggregateType.Bool, src2))); } @@ -2013,8 +2013,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AstOperation operation, Func emitS) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); return new OperationResult(AggregateType.S32, emitS(context.TypeS32(), context.GetS32(src1), context.GetS32(src2))); } @@ -2024,8 +2024,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AstOperation operation, Func emitU) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); return new OperationResult(AggregateType.U32, emitU(context.TypeU32(), context.GetU32(src1), context.GetU32(src2))); } @@ -2036,13 +2036,13 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv Func emitF, Func emitI) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); - var src3 = operation.GetSource(2); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); + IAstNode src3 = operation.GetSource(2); if (operation.Inst.HasFlag(Instruction.FP64)) { - var result = emitF(context.TypeFP64(), context.GetFP64(src1), context.GetFP64(src2), context.GetFP64(src3)); + SpvInstruction result = emitF(context.TypeFP64(), context.GetFP64(src1), context.GetFP64(src2), context.GetFP64(src3)); if (!context.HostCapabilities.ReducedPrecision || operation.ForcePrecise) { @@ -2053,7 +2053,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } else if (operation.Inst.HasFlag(Instruction.FP32)) { - var result = emitF(context.TypeFP32(), context.GetFP32(src1), context.GetFP32(src2), context.GetFP32(src3)); + SpvInstruction result = emitF(context.TypeFP32(), context.GetFP32(src1), context.GetFP32(src2), context.GetFP32(src3)); if (!context.HostCapabilities.ReducedPrecision || operation.ForcePrecise) { @@ -2073,9 +2073,9 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AstOperation operation, Func emitU) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); - var src3 = operation.GetSource(2); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); + IAstNode src3 = operation.GetSource(2); return new OperationResult(AggregateType.U32, emitU( context.TypeU32(), @@ -2089,9 +2089,9 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AstOperation operation, Func emitS) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); - var src3 = operation.GetSource(2); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); + IAstNode src3 = operation.GetSource(2); return new OperationResult(AggregateType.S32, emitS( context.TypeS32(), @@ -2105,10 +2105,10 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv AstOperation operation, Func emitS) { - var src1 = operation.GetSource(0); - var src2 = operation.GetSource(1); - var src3 = operation.GetSource(2); - var src4 = operation.GetSource(3); + IAstNode src1 = operation.GetSource(0); + IAstNode src2 = operation.GetSource(1); + IAstNode src3 = operation.GetSource(2); + IAstNode src4 = operation.GetSource(3); return new OperationResult(AggregateType.U32, emitS( context.TypeU32(), diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvGenerator.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvGenerator.cs index 105812ebf..73af3b850 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvGenerator.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvGenerator.cs @@ -124,20 +124,20 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv for (int funcIndex = 0; funcIndex < info.Functions.Count; funcIndex++) { - var function = info.Functions[funcIndex]; - var retType = context.GetType(function.ReturnType); + StructuredFunction function = info.Functions[funcIndex]; + SpvInstruction retType = context.GetType(function.ReturnType); - var funcArgs = new SpvInstruction[function.InArguments.Length + function.OutArguments.Length]; + SpvInstruction[] funcArgs = new SpvInstruction[function.InArguments.Length + function.OutArguments.Length]; for (int argIndex = 0; argIndex < funcArgs.Length; argIndex++) { - var argType = context.GetType(function.GetArgumentType(argIndex)); - var argPointerType = context.TypePointer(StorageClass.Function, argType); + SpvInstruction argType = context.GetType(function.GetArgumentType(argIndex)); + SpvInstruction argPointerType = context.TypePointer(StorageClass.Function, argType); funcArgs[argIndex] = argPointerType; } - var funcType = context.TypeFunction(retType, false, funcArgs); - var spvFunc = context.Function(retType, FunctionControlMask.MaskNone, funcType); + SpvInstruction funcType = context.TypeFunction(retType, false, funcArgs); + SpvInstruction spvFunc = context.Function(retType, FunctionControlMask.MaskNone, funcType); context.DeclareFunction(funcIndex, function, spvFunc); } @@ -160,7 +160,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static void Generate(CodeGenContext context, StructuredProgramInfo info, int funcIndex) { - var (function, spvFunc) = context.GetFunction(funcIndex); + (StructuredFunction function, SpvInstruction spvFunc) = context.GetFunction(funcIndex); context.CurrentFunction = function; context.AddFunction(spvFunc); @@ -284,9 +284,9 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv } else if (context.Definitions.Stage == ShaderStage.Compute) { - var localSizeX = (SpvLiteralInteger)context.Definitions.ComputeLocalSizeX; - var localSizeY = (SpvLiteralInteger)context.Definitions.ComputeLocalSizeY; - var localSizeZ = (SpvLiteralInteger)context.Definitions.ComputeLocalSizeZ; + SpvLiteralInteger localSizeX = (SpvLiteralInteger)context.Definitions.ComputeLocalSizeX; + SpvLiteralInteger localSizeY = (SpvLiteralInteger)context.Definitions.ComputeLocalSizeY; + SpvLiteralInteger localSizeZ = (SpvLiteralInteger)context.Definitions.ComputeLocalSizeZ; context.AddExecutionMode( spvFunc, @@ -307,7 +307,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { AstBlockVisitor visitor = new(block); - var loopTargets = new Dictionary(); + Dictionary loopTargets = new Dictionary(); context.LoopTargets = loopTargets; @@ -329,14 +329,14 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv ifFalseBlock = mergeBlock; } - var condition = context.Get(AggregateType.Bool, e.Block.Condition); + SpvInstruction condition = context.Get(AggregateType.Bool, e.Block.Condition); context.SelectionMerge(context.GetNextLabel(mergeBlock), SelectionControlMask.MaskNone); context.BranchConditional(condition, context.GetNextLabel(ifTrueBlock), context.GetNextLabel(ifFalseBlock)); } else if (e.Block.Type == AstBlockType.DoWhile) { - var continueTarget = context.Label(); + SpvInstruction continueTarget = context.Label(); loopTargets.Add(e.Block, (context.NewBlock(), continueTarget)); @@ -357,12 +357,12 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv // if the condition is true. AstBlock mergeBlock = e.Block.Parent; - var (loopTarget, continueTarget) = loopTargets[e.Block]; + (SpvInstruction loopTarget, SpvInstruction continueTarget) = loopTargets[e.Block]; context.Branch(continueTarget); context.AddLabel(continueTarget); - var condition = context.Get(AggregateType.Bool, e.Block.Condition); + SpvInstruction condition = context.Get(AggregateType.Bool, e.Block.Condition); context.BranchConditional(condition, loopTarget, context.GetNextLabel(mergeBlock)); } @@ -398,16 +398,16 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { if (node is AstAssignment assignment) { - var dest = (AstOperand)assignment.Destination; + AstOperand dest = (AstOperand)assignment.Destination; if (dest.Type == OperandType.LocalVariable) { - var source = context.Get(dest.VarType, assignment.Source); + SpvInstruction source = context.Get(dest.VarType, assignment.Source); context.Store(context.GetLocalPointer(dest), source); } else if (dest.Type == OperandType.Argument) { - var source = context.Get(dest.VarType, assignment.Source); + SpvInstruction source = context.Get(dest.VarType, assignment.Source); context.Store(context.GetArgumentPointer(dest), source); } else diff --git a/src/Ryujinx.Graphics.Shader/Decoders/Decoder.cs b/src/Ryujinx.Graphics.Shader/Decoders/Decoder.cs index 1211e561f..d9f4dd5eb 100644 --- a/src/Ryujinx.Graphics.Shader/Decoders/Decoder.cs +++ b/src/Ryujinx.Graphics.Shader/Decoders/Decoder.cs @@ -568,39 +568,39 @@ namespace Ryujinx.Graphics.Shader.Decoders HashSet visited = new(); - var ldcLocation = FindFirstRegWrite(visited, new BlockLocation(block, block.OpCodes.Count - 1), brxReg); + BlockLocation ldcLocation = FindFirstRegWrite(visited, new BlockLocation(block, block.OpCodes.Count - 1), brxReg); if (ldcLocation.Block == null || ldcLocation.Block.OpCodes[ldcLocation.Index].Name != InstName.Ldc) { return (0, 0); } - GetOp(ldcLocation, out var opLdc); + GetOp(ldcLocation, out InstLdc opLdc); if (opLdc.CbufSlot != 1 || opLdc.AddressMode != 0) { return (0, 0); } - var shlLocation = FindFirstRegWrite(visited, ldcLocation, opLdc.SrcA); + BlockLocation shlLocation = FindFirstRegWrite(visited, ldcLocation, opLdc.SrcA); if (shlLocation.Block == null || !shlLocation.IsImmInst(InstName.Shl)) { return (0, 0); } - GetOp(shlLocation, out var opShl); + GetOp(shlLocation, out InstShlI opShl); if (opShl.Imm20 != 2) { return (0, 0); } - var imnmxLocation = FindFirstRegWrite(visited, shlLocation, opShl.SrcA); + BlockLocation imnmxLocation = FindFirstRegWrite(visited, shlLocation, opShl.SrcA); if (imnmxLocation.Block == null || !imnmxLocation.IsImmInst(InstName.Imnmx)) { return (0, 0); } - GetOp(imnmxLocation, out var opImnmx); + GetOp(imnmxLocation, out InstImnmxI opImnmx); if (opImnmx.Signed || opImnmx.SrcPred != RegisterConsts.PredicateTrueIndex || opImnmx.SrcPredInv) { @@ -640,7 +640,7 @@ namespace Ryujinx.Graphics.Shader.Decoders toVisit.Enqueue(location); visited.Add(location.Block); - while (toVisit.TryDequeue(out var currentLocation)) + while (toVisit.TryDequeue(out BlockLocation currentLocation)) { Block block = currentLocation.Block; for (int i = currentLocation.Index - 1; i >= 0; i--) diff --git a/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs b/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs index 54705acaf..b4ecf9abe 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs @@ -57,7 +57,7 @@ namespace Ryujinx.Graphics.Shader.Instructions private static IReadOnlyDictionary CreateMap() { - var map = new Dictionary(); + Dictionary map = new Dictionary(); Add(map, 0x060, AggregateType.S32, IoVariable.PrimitiveId, StagesMask.TessellationGeometryFragment, StagesMask.Geometry); Add(map, 0x064, AggregateType.S32, IoVariable.Layer, StagesMask.Fragment, StagesMask.VertexTessellationGeometry); @@ -84,7 +84,7 @@ namespace Ryujinx.Graphics.Shader.Instructions private static IReadOnlyDictionary CreatePerPatchMap() { - var map = new Dictionary(); + Dictionary map = new Dictionary(); Add(map, 0x000, AggregateType.Vector4 | AggregateType.FP32, IoVariable.TessellationLevelOuter, StagesMask.TessellationEvaluation, StagesMask.TessellationControl); Add(map, 0x010, AggregateType.Vector2 | AggregateType.FP32, IoVariable.TessellationLevelInner, StagesMask.TessellationEvaluation, StagesMask.TessellationControl); diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitAttribute.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitAttribute.cs index c704156bc..89b7e9831 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitAttribute.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitAttribute.cs @@ -261,7 +261,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { if (context.TranslatorContext.Definitions.LastInVertexPipeline) { - context.PrepareForVertexReturn(out var tempXLocal, out var tempYLocal, out var tempZLocal); + context.PrepareForVertexReturn(out Operand tempXLocal, out Operand tempYLocal, out Operand tempZLocal); context.EmitVertex(); diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitBitfield.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitBitfield.cs index 3a8419698..97b08aefd 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitBitfield.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitBitfield.cs @@ -13,8 +13,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstBfeR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitBfe(context, srcA, srcB, op.Dest, op.Brev, op.Signed); } @@ -23,8 +23,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstBfeI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitBfe(context, srcA, srcB, op.Dest, op.Brev, op.Signed); } @@ -33,8 +33,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstBfeC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitBfe(context, srcA, srcB, op.Dest, op.Brev, op.Signed); } @@ -43,9 +43,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstBfiR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitBfi(context, srcA, srcB, srcC, op.Dest); } @@ -54,9 +54,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstBfiI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcC = GetSrcReg(context, op.SrcC); EmitBfi(context, srcA, srcB, srcC, op.Dest); } @@ -65,9 +65,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstBfiC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcC = GetSrcReg(context, op.SrcC); EmitBfi(context, srcA, srcB, srcC, op.Dest); } @@ -76,9 +76,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstBfiRc op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcC); - var srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcC); + Operand srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitBfi(context, srcA, srcB, srcC, op.Dest); } diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitConversion.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitConversion.cs index e7e0fba92..198c9077a 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitConversion.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitConversion.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstF2fR op = context.GetOp(); - var src = UnpackReg(context, op.SrcFmt, op.Sh, op.SrcB); + Operand src = UnpackReg(context, op.SrcFmt, op.Sh, op.SrcB); EmitF2F(context, op.SrcFmt, op.DstFmt, op.RoundMode, src, op.Dest, op.AbsB, op.NegB, op.Sat); } @@ -23,7 +23,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstF2fI op = context.GetOp(); - var src = UnpackImm(context, op.SrcFmt, op.Sh, Imm20ToFloat(op.Imm20)); + Operand src = UnpackImm(context, op.SrcFmt, op.Sh, Imm20ToFloat(op.Imm20)); EmitF2F(context, op.SrcFmt, op.DstFmt, op.RoundMode, src, op.Dest, op.AbsB, op.NegB, op.Sat); } @@ -32,7 +32,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstF2fC op = context.GetOp(); - var src = UnpackCbuf(context, op.SrcFmt, op.Sh, op.CbufSlot, op.CbufOffset); + Operand src = UnpackCbuf(context, op.SrcFmt, op.Sh, op.CbufSlot, op.CbufOffset); EmitF2F(context, op.SrcFmt, op.DstFmt, op.RoundMode, src, op.Dest, op.AbsB, op.NegB, op.Sat); } @@ -41,7 +41,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstF2iR op = context.GetOp(); - var src = UnpackReg(context, op.SrcFmt, op.Sh, op.SrcB); + Operand src = UnpackReg(context, op.SrcFmt, op.Sh, op.SrcB); EmitF2I(context, op.SrcFmt, op.IDstFmt, op.RoundMode, src, op.Dest, op.AbsB, op.NegB); } @@ -50,7 +50,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstF2iI op = context.GetOp(); - var src = UnpackImm(context, op.SrcFmt, op.Sh, Imm20ToFloat(op.Imm20)); + Operand src = UnpackImm(context, op.SrcFmt, op.Sh, Imm20ToFloat(op.Imm20)); EmitF2I(context, op.SrcFmt, op.IDstFmt, op.RoundMode, src, op.Dest, op.AbsB, op.NegB); } @@ -59,7 +59,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstF2iC op = context.GetOp(); - var src = UnpackCbuf(context, op.SrcFmt, op.Sh, op.CbufSlot, op.CbufOffset); + Operand src = UnpackCbuf(context, op.SrcFmt, op.Sh, op.CbufSlot, op.CbufOffset); EmitF2I(context, op.SrcFmt, op.IDstFmt, op.RoundMode, src, op.Dest, op.AbsB, op.NegB); } @@ -68,7 +68,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstI2fR op = context.GetOp(); - var src = GetSrcReg(context, op.SrcB); + Operand src = GetSrcReg(context, op.SrcB); EmitI2F(context, op.ISrcFmt, op.DstFmt, src, op.ByteSel, op.Dest, op.AbsB, op.NegB); } @@ -77,7 +77,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstI2fI op = context.GetOp(); - var src = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand src = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitI2F(context, op.ISrcFmt, op.DstFmt, src, op.ByteSel, op.Dest, op.AbsB, op.NegB); } @@ -86,7 +86,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstI2fC op = context.GetOp(); - var src = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand src = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitI2F(context, op.ISrcFmt, op.DstFmt, src, op.ByteSel, op.Dest, op.AbsB, op.NegB); } @@ -95,7 +95,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstI2iR op = context.GetOp(); - var src = GetSrcReg(context, op.SrcB); + Operand src = GetSrcReg(context, op.SrcB); EmitI2I(context, op.ISrcFmt, op.IDstFmt, src, op.ByteSel, op.Dest, op.AbsB, op.NegB, op.Sat, op.WriteCC); } @@ -104,7 +104,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstI2iI op = context.GetOp(); - var src = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand src = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitI2I(context, op.ISrcFmt, op.IDstFmt, src, op.ByteSel, op.Dest, op.AbsB, op.NegB, op.Sat, op.WriteCC); } @@ -113,7 +113,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstI2iC op = context.GetOp(); - var src = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand src = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitI2I(context, op.ISrcFmt, op.IDstFmt, src, op.ByteSel, op.Dest, op.AbsB, op.NegB, op.Sat, op.WriteCC); } diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatArithmetic.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatArithmetic.cs index 04dbd20eb..7d974a370 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatArithmetic.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatArithmetic.cs @@ -13,8 +13,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDaddR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcReg(context, op.SrcB, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcReg(context, op.SrcB, isFP64: true); EmitFadd(context, Instruction.FP64, srcA, srcB, op.Dest, op.NegA, op.NegB, op.AbsA, op.AbsB, false, op.WriteCC); } @@ -23,8 +23,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDaddI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); EmitFadd(context, Instruction.FP64, srcA, srcB, op.Dest, op.NegA, op.NegB, op.AbsA, op.AbsB, false, op.WriteCC); } @@ -33,8 +33,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDaddC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); EmitFadd(context, Instruction.FP64, srcA, srcB, op.Dest, op.NegA, op.NegB, op.AbsA, op.AbsB, false, op.WriteCC); } @@ -43,9 +43,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDfmaR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcReg(context, op.SrcB, isFP64: true); - var srcC = GetSrcReg(context, op.SrcC, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcReg(context, op.SrcB, isFP64: true); + Operand srcC = GetSrcReg(context, op.SrcC, isFP64: true); EmitFfma(context, Instruction.FP64, srcA, srcB, srcC, op.Dest, op.NegA, op.NegC, false, op.WriteCC); } @@ -54,9 +54,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDfmaI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); - var srcC = GetSrcReg(context, op.SrcC, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); + Operand srcC = GetSrcReg(context, op.SrcC, isFP64: true); EmitFfma(context, Instruction.FP64, srcA, srcB, srcC, op.Dest, op.NegA, op.NegC, false, op.WriteCC); } @@ -65,9 +65,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDfmaC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); - var srcC = GetSrcReg(context, op.SrcC, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); + Operand srcC = GetSrcReg(context, op.SrcC, isFP64: true); EmitFfma(context, Instruction.FP64, srcA, srcB, srcC, op.Dest, op.NegA, op.NegC, false, op.WriteCC); } @@ -76,9 +76,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDfmaRc op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcReg(context, op.SrcC, isFP64: true); - var srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcReg(context, op.SrcC, isFP64: true); + Operand srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); EmitFfma(context, Instruction.FP64, srcA, srcB, srcC, op.Dest, op.NegA, op.NegC, false, op.WriteCC); } @@ -87,8 +87,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDmulR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcReg(context, op.SrcB, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcReg(context, op.SrcB, isFP64: true); EmitFmul(context, Instruction.FP64, MultiplyScale.NoScale, srcA, srcB, op.Dest, op.NegA, false, op.WriteCC); } @@ -97,8 +97,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDmulI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); EmitFmul(context, Instruction.FP64, MultiplyScale.NoScale, srcA, srcB, op.Dest, op.NegA, false, op.WriteCC); } @@ -107,8 +107,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDmulC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); EmitFmul(context, Instruction.FP64, MultiplyScale.NoScale, srcA, srcB, op.Dest, op.NegA, false, op.WriteCC); } @@ -117,8 +117,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFaddR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitFadd(context, Instruction.FP32, srcA, srcB, op.Dest, op.NegA, op.NegB, op.AbsA, op.AbsB, op.Sat, op.WriteCC); } @@ -127,8 +127,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFaddI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); EmitFadd(context, Instruction.FP32, srcA, srcB, op.Dest, op.NegA, op.NegB, op.AbsA, op.AbsB, op.Sat, op.WriteCC); } @@ -137,8 +137,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFaddC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitFadd(context, Instruction.FP32, srcA, srcB, op.Dest, op.NegA, op.NegB, op.AbsA, op.AbsB, op.Sat, op.WriteCC); } @@ -147,8 +147,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFadd32i op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, op.Imm32); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, op.Imm32); EmitFadd(context, Instruction.FP32, srcA, srcB, op.Dest, op.NegA, op.NegB, op.AbsA, op.AbsB, false, op.WriteCC); } @@ -157,9 +157,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFfmaR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitFfma(context, Instruction.FP32, srcA, srcB, srcC, op.Dest, op.NegA, op.NegC, op.Sat, op.WriteCC); } @@ -168,9 +168,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFfmaI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); + Operand srcC = GetSrcReg(context, op.SrcC); EmitFfma(context, Instruction.FP32, srcA, srcB, srcC, op.Dest, op.NegA, op.NegC, op.Sat, op.WriteCC); } @@ -179,9 +179,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFfmaC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcC = GetSrcReg(context, op.SrcC); EmitFfma(context, Instruction.FP32, srcA, srcB, srcC, op.Dest, op.NegA, op.NegC, op.Sat, op.WriteCC); } @@ -190,9 +190,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFfmaRc op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcC); - var srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcC); + Operand srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitFfma(context, Instruction.FP32, srcA, srcB, srcC, op.Dest, op.NegA, op.NegC, op.Sat, op.WriteCC); } @@ -201,9 +201,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFfma32i op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, op.Imm32); - var srcC = GetSrcReg(context, op.Dest); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, op.Imm32); + Operand srcC = GetSrcReg(context, op.Dest); EmitFfma(context, Instruction.FP32, srcA, srcB, srcC, op.Dest, op.NegA, op.NegC, op.Sat, op.WriteCC); } @@ -212,8 +212,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFmulR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitFmul(context, Instruction.FP32, op.Scale, srcA, srcB, op.Dest, op.NegA, op.Sat, op.WriteCC); } @@ -222,8 +222,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFmulI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); EmitFmul(context, Instruction.FP32, op.Scale, srcA, srcB, op.Dest, op.NegA, op.Sat, op.WriteCC); } @@ -232,8 +232,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFmulC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitFmul(context, Instruction.FP32, op.Scale, srcA, srcB, op.Dest, op.NegA, op.Sat, op.WriteCC); } @@ -242,8 +242,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFmul32i op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, op.Imm32); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, op.Imm32); EmitFmul(context, Instruction.FP32, MultiplyScale.NoScale, srcA, srcB, op.Dest, false, op.Sat, op.WriteCC); } @@ -252,8 +252,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHadd2R op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); - var srcB = GetHalfSrc(context, op.BSwizzle, op.SrcB, op.NegB, op.AbsB); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); + Operand[] srcB = GetHalfSrc(context, op.BSwizzle, op.SrcB, op.NegB, op.AbsB); EmitHadd2Hmul2(context, op.OFmt, srcA, srcB, isAdd: true, op.Dest, op.Sat); } @@ -262,8 +262,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHadd2I op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); - var srcB = GetHalfSrc(context, op.BimmH0, op.BimmH1); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); + Operand[] srcB = GetHalfSrc(context, op.BimmH0, op.BimmH1); EmitHadd2Hmul2(context, op.OFmt, srcA, srcB, isAdd: true, op.Dest, op.Sat); } @@ -272,8 +272,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHadd2C op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); - var srcB = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegB, op.AbsB); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); + Operand[] srcB = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegB, op.AbsB); EmitHadd2Hmul2(context, op.OFmt, srcA, srcB, isAdd: true, op.Dest, op.Sat); } @@ -282,8 +282,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHadd232i op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, false); - var srcB = GetHalfSrc(context, op.Imm); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, false); + Operand[] srcB = GetHalfSrc(context, op.Imm); EmitHadd2Hmul2(context, OFmt.F16, srcA, srcB, isAdd: true, op.Dest, op.Sat); } @@ -292,9 +292,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHfma2R op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); - var srcB = GetHalfSrc(context, op.BSwizzle, op.SrcB, op.NegA, false); - var srcC = GetHalfSrc(context, op.CSwizzle, op.SrcC, op.NegC, false); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); + Operand[] srcB = GetHalfSrc(context, op.BSwizzle, op.SrcB, op.NegA, false); + Operand[] srcC = GetHalfSrc(context, op.CSwizzle, op.SrcC, op.NegC, false); EmitHfma2(context, op.OFmt, srcA, srcB, srcC, op.Dest, op.Sat); } @@ -303,9 +303,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHfma2I op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); - var srcB = GetHalfSrc(context, op.BimmH0, op.BimmH1); - var srcC = GetHalfSrc(context, op.CSwizzle, op.SrcC, op.NegC, false); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); + Operand[] srcB = GetHalfSrc(context, op.BimmH0, op.BimmH1); + Operand[] srcC = GetHalfSrc(context, op.CSwizzle, op.SrcC, op.NegC, false); EmitHfma2(context, op.OFmt, srcA, srcB, srcC, op.Dest, op.Sat); } @@ -314,9 +314,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHfma2C op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); - var srcB = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegA, false); - var srcC = GetHalfSrc(context, op.CSwizzle, op.SrcC, op.NegC, false); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); + Operand[] srcB = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegA, false); + Operand[] srcC = GetHalfSrc(context, op.CSwizzle, op.SrcC, op.NegC, false); EmitHfma2(context, op.OFmt, srcA, srcB, srcC, op.Dest, op.Sat); } @@ -325,9 +325,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHfma2Rc op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); - var srcB = GetHalfSrc(context, op.CSwizzle, op.SrcC, op.NegA, false); - var srcC = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegC, false); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); + Operand[] srcB = GetHalfSrc(context, op.CSwizzle, op.SrcC, op.NegA, false); + Operand[] srcC = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegC, false); EmitHfma2(context, op.OFmt, srcA, srcB, srcC, op.Dest, op.Sat); } @@ -336,9 +336,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHfma232i op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); - var srcB = GetHalfSrc(context, op.Imm); - var srcC = GetHalfSrc(context, HalfSwizzle.F16, op.Dest, op.NegC, false); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); + Operand[] srcB = GetHalfSrc(context, op.Imm); + Operand[] srcC = GetHalfSrc(context, HalfSwizzle.F16, op.Dest, op.NegC, false); EmitHfma2(context, OFmt.F16, srcA, srcB, srcC, op.Dest, saturate: false); } @@ -347,8 +347,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHmul2R op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, op.AbsA); - var srcB = GetHalfSrc(context, op.BSwizzle, op.SrcB, op.NegA, op.AbsB); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, op.AbsA); + Operand[] srcB = GetHalfSrc(context, op.BSwizzle, op.SrcB, op.NegA, op.AbsB); EmitHadd2Hmul2(context, op.OFmt, srcA, srcB, isAdd: false, op.Dest, op.Sat); } @@ -357,8 +357,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHmul2I op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); - var srcB = GetHalfSrc(context, op.BimmH0, op.BimmH1); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); + Operand[] srcB = GetHalfSrc(context, op.BimmH0, op.BimmH1); EmitHadd2Hmul2(context, op.OFmt, srcA, srcB, isAdd: false, op.Dest, op.Sat); } @@ -367,8 +367,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHmul2C op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, op.AbsA); - var srcB = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegA, op.AbsB); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, op.AbsA); + Operand[] srcB = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegA, op.AbsB); EmitHadd2Hmul2(context, op.OFmt, srcA, srcB, isAdd: false, op.Dest, op.Sat); } @@ -377,8 +377,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHmul232i op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); - var srcB = GetHalfSrc(context, op.Imm32); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, false, false); + Operand[] srcB = GetHalfSrc(context, op.Imm32); EmitHadd2Hmul2(context, OFmt.F16, srcA, srcB, isAdd: false, op.Dest, op.Sat); } diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatComparison.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatComparison.cs index 59ad7a5de..314ab917c 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatComparison.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatComparison.cs @@ -14,8 +14,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDsetR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcReg(context, op.SrcB, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcReg(context, op.SrcB, isFP64: true); EmitFset( context, @@ -39,8 +39,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDsetI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); EmitFset( context, @@ -64,8 +64,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDsetC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); EmitFset( context, @@ -89,8 +89,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDsetpR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcReg(context, op.SrcB, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcReg(context, op.SrcB, isFP64: true); EmitFsetp( context, @@ -114,8 +114,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDsetpI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); EmitFsetp( context, @@ -139,8 +139,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDsetpC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); EmitFsetp( context, @@ -164,9 +164,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFcmpR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitFcmp(context, op.FComp, srcA, srcB, srcC, op.Dest); } @@ -175,9 +175,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFcmpI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); + Operand srcC = GetSrcReg(context, op.SrcC); EmitFcmp(context, op.FComp, srcA, srcB, srcC, op.Dest); } @@ -186,9 +186,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFcmpC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcC = GetSrcReg(context, op.SrcC); EmitFcmp(context, op.FComp, srcA, srcB, srcC, op.Dest); } @@ -197,9 +197,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFcmpRc op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcC); - var srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcC); + Operand srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitFcmp(context, op.FComp, srcA, srcB, srcC, op.Dest); } @@ -208,8 +208,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFsetR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitFset(context, op.FComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.Dest, op.AbsA, op.AbsB, op.NegA, op.NegB, op.BVal, op.WriteCC); } @@ -218,8 +218,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFsetC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitFset(context, op.FComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.Dest, op.AbsA, op.AbsB, op.NegA, op.NegB, op.BVal, op.WriteCC); } @@ -228,8 +228,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFsetI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); EmitFset(context, op.FComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.Dest, op.AbsA, op.AbsB, op.NegA, op.NegB, op.BVal, op.WriteCC); } @@ -238,8 +238,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFsetpR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitFsetp( context, @@ -262,8 +262,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFsetpI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); EmitFsetp( context, @@ -286,8 +286,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFsetpC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitFsetp( context, @@ -310,8 +310,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHset2R op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); - var srcB = GetHalfSrc(context, op.BSwizzle, op.SrcB, op.NegB, op.AbsB); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); + Operand[] srcB = GetHalfSrc(context, op.BSwizzle, op.SrcB, op.NegB, op.AbsB); EmitHset2(context, op.Cmp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.Dest, op.Bval); } @@ -320,8 +320,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHset2I op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); - var srcB = GetHalfSrc(context, op.BimmH0, op.BimmH1); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); + Operand[] srcB = GetHalfSrc(context, op.BimmH0, op.BimmH1); EmitHset2(context, op.Cmp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.Dest, op.Bval); } @@ -330,8 +330,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHset2C op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); - var srcB = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegB, false); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); + Operand[] srcB = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegB, false); EmitHset2(context, op.Cmp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.Dest, op.Bval); } @@ -340,8 +340,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHsetp2R op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); - var srcB = GetHalfSrc(context, op.BSwizzle, op.SrcB, op.NegB, op.AbsB); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); + Operand[] srcB = GetHalfSrc(context, op.BSwizzle, op.SrcB, op.NegB, op.AbsB); EmitHsetp2(context, op.FComp2, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.DestPred, op.DestPredInv, op.HAnd); } @@ -350,8 +350,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHsetp2I op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); - var srcB = GetHalfSrc(context, op.BimmH0, op.BimmH1); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); + Operand[] srcB = GetHalfSrc(context, op.BimmH0, op.BimmH1); EmitHsetp2(context, op.FComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.DestPred, op.DestPredInv, op.HAnd); } @@ -360,8 +360,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstHsetp2C op = context.GetOp(); - var srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); - var srcB = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegB, op.AbsB); + Operand[] srcA = GetHalfSrc(context, op.ASwizzle, op.SrcA, op.NegA, op.AbsA); + Operand[] srcB = GetHalfSrc(context, HalfSwizzle.F32, op.CbufSlot, op.CbufOffset, op.NegB, op.AbsB); EmitHsetp2(context, op.FComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.DestPred, op.DestPredInv, op.HAnd); } @@ -545,7 +545,7 @@ namespace Ryujinx.Graphics.Shader.Instructions } else { - var inst = (cond & ~FComp.Nan) switch + Instruction inst = (cond & ~FComp.Nan) switch { FComp.Lt => Instruction.CompareLess, FComp.Eq => Instruction.CompareEqual, diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatMinMax.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatMinMax.cs index 5757e4fb0..4a3337bca 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatMinMax.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFloatMinMax.cs @@ -13,9 +13,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDmnmxR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcReg(context, op.SrcB, isFP64: true); - var srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcReg(context, op.SrcB, isFP64: true); + Operand srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); EmitFmnmx(context, srcA, srcB, srcPred, op.Dest, op.AbsA, op.AbsB, op.NegA, op.NegB, op.WriteCC, isFP64: true); } @@ -24,9 +24,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDmnmxI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); - var srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20), isFP64: true); + Operand srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); EmitFmnmx(context, srcA, srcB, srcPred, op.Dest, op.AbsA, op.AbsB, op.NegA, op.NegB, op.WriteCC, isFP64: true); } @@ -35,9 +35,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstDmnmxC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA, isFP64: true); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); - var srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); + Operand srcA = GetSrcReg(context, op.SrcA, isFP64: true); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset, isFP64: true); + Operand srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); EmitFmnmx(context, srcA, srcB, srcPred, op.Dest, op.AbsA, op.AbsB, op.NegA, op.NegB, op.WriteCC, isFP64: true); } @@ -46,9 +46,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFmnmxR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); EmitFmnmx(context, srcA, srcB, srcPred, op.Dest, op.AbsA, op.AbsB, op.NegA, op.NegB, op.WriteCC); } @@ -57,9 +57,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFmnmxI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); - var srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToFloat(op.Imm20)); + Operand srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); EmitFmnmx(context, srcA, srcB, srcPred, op.Dest, op.AbsA, op.AbsB, op.NegA, op.NegB, op.WriteCC); } @@ -68,9 +68,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstFmnmxC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); EmitFmnmx(context, srcA, srcB, srcPred, op.Dest, op.AbsA, op.AbsB, op.NegA, op.NegB, op.WriteCC); } diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs index 803aaa62d..e86328868 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs @@ -39,13 +39,13 @@ namespace Ryujinx.Graphics.Shader.Instructions Operand address = context.IAdd(Register(op.SrcA, RegisterType.Gpr), Const(offset)); - var targets = context.CurrBlock.Successors.Skip(startIndex); + IEnumerable targets = context.CurrBlock.Successors.Skip(startIndex); bool allTargetsSinglePred = true; int total = context.CurrBlock.Successors.Count - startIndex; int count = 0; - foreach (var target in targets.OrderBy(x => x.Address)) + foreach (Block target in targets.OrderBy(x => x.Address)) { if (++count < total && (target.Predecessors.Count > 1 || target.Address <= context.CurrBlock.Address)) { @@ -64,7 +64,7 @@ namespace Ryujinx.Graphics.Shader.Instructions // since it will be too late to insert a label, but this is something that can be improved // in the future if necessary. - var sortedTargets = targets.OrderBy(x => x.Address); + IOrderedEnumerable sortedTargets = targets.OrderBy(x => x.Address); Block currentTarget = null; ulong firstTargetAddress = 0; @@ -93,7 +93,7 @@ namespace Ryujinx.Graphics.Shader.Instructions // Emit the branches sequentially. // This generates slightly worse code, but should work for all cases. - var sortedTargets = targets.OrderByDescending(x => x.Address); + IOrderedEnumerable sortedTargets = targets.OrderByDescending(x => x.Address); ulong lastTargetAddress = ulong.MaxValue; count = 0; @@ -238,7 +238,7 @@ namespace Ryujinx.Graphics.Shader.Instructions private static void EmitPbkPcntSsy(EmitterContext context) { - var consumers = context.CurrBlock.PushOpCodes.First(x => x.Op.Address == context.CurrOp.Address).Consumers; + Dictionary consumers = context.CurrBlock.PushOpCodes.First(x => x.Op.Address == context.CurrOp.Address).Consumers; foreach (KeyValuePair kv in consumers) { @@ -253,7 +253,7 @@ namespace Ryujinx.Graphics.Shader.Instructions private static void EmitBrkContSync(EmitterContext context) { - var targets = context.CurrBlock.SyncTargets; + Dictionary targets = context.CurrBlock.SyncTargets; if (targets.Count == 1) { diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerArithmetic.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerArithmetic.cs index 99922f7a1..2f3988119 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerArithmetic.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerArithmetic.cs @@ -14,8 +14,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIaddR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitIadd(context, srcA, srcB, op.Dest, op.AvgMode, op.X, op.WriteCC); } @@ -24,8 +24,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIaddI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitIadd(context, srcA, srcB, op.Dest, op.AvgMode, op.X, op.WriteCC); } @@ -34,8 +34,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIaddC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitIadd(context, srcA, srcB, op.Dest, op.AvgMode, op.X, op.WriteCC); } @@ -44,8 +44,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIadd32i op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, op.Imm32); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, op.Imm32); EmitIadd(context, srcA, srcB, op.Dest, op.AvgMode, op.X, op.WriteCC); } @@ -54,9 +54,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIadd3R op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitIadd3(context, op.Lrs, srcA, srcB, srcC, op.Apart, op.Bpart, op.Cpart, op.Dest, op.NegA, op.NegB, op.NegC); } @@ -65,9 +65,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIadd3I op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcC = GetSrcReg(context, op.SrcC); EmitIadd3(context, Lrs.None, srcA, srcB, srcC, HalfSelect.B32, HalfSelect.B32, HalfSelect.B32, op.Dest, op.NegA, op.NegB, op.NegC); } @@ -76,9 +76,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIadd3C op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcC = GetSrcReg(context, op.SrcC); EmitIadd3(context, Lrs.None, srcA, srcB, srcC, HalfSelect.B32, HalfSelect.B32, HalfSelect.B32, op.Dest, op.NegA, op.NegB, op.NegC); } @@ -87,9 +87,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImadR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitImad(context, srcA, srcB, srcC, op.Dest, op.AvgMode, op.ASigned, op.BSigned, op.Hilo); } @@ -98,9 +98,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImadI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcC = GetSrcReg(context, op.SrcC); EmitImad(context, srcA, srcB, srcC, op.Dest, op.AvgMode, op.ASigned, op.BSigned, op.Hilo); } @@ -109,9 +109,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImadC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcC = GetSrcReg(context, op.SrcC); EmitImad(context, srcA, srcB, srcC, op.Dest, op.AvgMode, op.ASigned, op.BSigned, op.Hilo); } @@ -120,9 +120,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImadRc op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcC); - var srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcC); + Operand srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitImad(context, srcA, srcB, srcC, op.Dest, op.AvgMode, op.ASigned, op.BSigned, op.Hilo); } @@ -131,9 +131,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImad32i op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, op.Imm32); - var srcC = GetSrcReg(context, op.Dest); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, op.Imm32); + Operand srcC = GetSrcReg(context, op.Dest); EmitImad(context, srcA, srcB, srcC, op.Dest, op.AvgMode, op.ASigned, op.BSigned, op.Hilo); } @@ -142,8 +142,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImulR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitImad(context, srcA, srcB, Const(0), op.Dest, AvgMode.NoNeg, op.ASigned, op.BSigned, op.Hilo); } @@ -152,8 +152,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImulI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitImad(context, srcA, srcB, Const(0), op.Dest, AvgMode.NoNeg, op.ASigned, op.BSigned, op.Hilo); } @@ -162,8 +162,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImulC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitImad(context, srcA, srcB, Const(0), op.Dest, AvgMode.NoNeg, op.ASigned, op.BSigned, op.Hilo); } @@ -172,8 +172,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImul32i op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, op.Imm32); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, op.Imm32); EmitImad(context, srcA, srcB, Const(0), op.Dest, AvgMode.NoNeg, op.ASigned, op.BSigned, op.Hilo); } @@ -182,8 +182,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIscaddR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitIscadd(context, srcA, srcB, op.Dest, op.Imm5, op.AvgMode, op.WriteCC); } @@ -192,8 +192,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIscaddI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitIscadd(context, srcA, srcB, op.Dest, op.Imm5, op.AvgMode, op.WriteCC); } @@ -202,8 +202,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIscaddC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitIscadd(context, srcA, srcB, op.Dest, op.Imm5, op.AvgMode, op.WriteCC); } @@ -212,8 +212,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIscadd32i op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, op.Imm32); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, op.Imm32); EmitIscadd(context, srcA, srcB, op.Dest, op.Imm5, AvgMode.NoNeg, op.WriteCC); } @@ -222,8 +222,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLeaR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitLea(context, srcA, srcB, op.Dest, op.NegA, op.ImmU5); } @@ -232,8 +232,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLeaI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitLea(context, srcA, srcB, op.Dest, op.NegA, op.ImmU5); } @@ -242,8 +242,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLeaC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitLea(context, srcA, srcB, op.Dest, op.NegA, op.ImmU5); } @@ -252,9 +252,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLeaHiR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitLeaHi(context, srcA, srcB, srcC, op.Dest, op.NegA, op.ImmU5); } @@ -263,9 +263,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLeaHiC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcC = GetSrcReg(context, op.SrcC); EmitLeaHi(context, srcA, srcB, srcC, op.Dest, op.NegA, op.ImmU5); } @@ -274,9 +274,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstXmadR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitXmad(context, op.XmadCop, srcA, srcB, srcC, op.Dest, op.ASigned, op.BSigned, op.HiloA, op.HiloB, op.Psl, op.Mrg, op.X, op.WriteCC); } @@ -285,9 +285,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstXmadI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, op.Imm16); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, op.Imm16); + Operand srcC = GetSrcReg(context, op.SrcC); EmitXmad(context, op.XmadCop, srcA, srcB, srcC, op.Dest, op.ASigned, op.BSigned, op.HiloA, false, op.Psl, op.Mrg, op.X, op.WriteCC); } @@ -296,9 +296,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstXmadC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcC = GetSrcReg(context, op.SrcC); EmitXmad(context, op.XmadCop, srcA, srcB, srcC, op.Dest, op.ASigned, op.BSigned, op.HiloA, op.HiloB, op.Psl, op.Mrg, op.X, op.WriteCC); } @@ -307,9 +307,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstXmadRc op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcC); - var srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcC); + Operand srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitXmad(context, op.XmadCop, srcA, srcB, srcC, op.Dest, op.ASigned, op.BSigned, op.HiloA, op.HiloB, false, false, op.X, op.WriteCC); } @@ -578,7 +578,7 @@ namespace Ryujinx.Graphics.Shader.Instructions bool extended, bool writeCC) { - var srcBUnmodified = srcB; + Operand srcBUnmodified = srcB; Operand Extend16To32(Operand src, bool high, bool signed) { diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerComparison.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerComparison.cs index 18d4e3d19..c97e53bfe 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerComparison.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerComparison.cs @@ -14,9 +14,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIcmpR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitIcmp(context, op.IComp, srcA, srcB, srcC, op.Dest, op.Signed); } @@ -25,9 +25,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIcmpI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcC = GetSrcReg(context, op.SrcC); EmitIcmp(context, op.IComp, srcA, srcB, srcC, op.Dest, op.Signed); } @@ -36,9 +36,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIcmpC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcC = GetSrcReg(context, op.SrcC); EmitIcmp(context, op.IComp, srcA, srcB, srcC, op.Dest, op.Signed); } @@ -47,9 +47,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIcmpRc op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcC); - var srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcC); + Operand srcC = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitIcmp(context, op.IComp, srcA, srcB, srcC, op.Dest, op.Signed); } @@ -58,8 +58,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIsetR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitIset(context, op.IComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.Dest, op.BVal, op.Signed, op.X, op.WriteCC); } @@ -68,8 +68,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIsetI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitIset(context, op.IComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.Dest, op.BVal, op.Signed, op.X, op.WriteCC); } @@ -78,8 +78,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIsetC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitIset(context, op.IComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.Dest, op.BVal, op.Signed, op.X, op.WriteCC); } @@ -88,8 +88,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIsetpR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitIsetp(context, op.IComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.DestPred, op.DestPredInv, op.Signed, op.X); } @@ -98,8 +98,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIsetpI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitIsetp(context, op.IComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.DestPred, op.DestPredInv, op.Signed, op.X); } @@ -108,8 +108,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstIsetpC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitIsetp(context, op.IComp, op.Bop, srcA, srcB, op.SrcPred, op.SrcPredInv, op.DestPred, op.DestPredInv, op.Signed, op.X); } @@ -280,7 +280,7 @@ namespace Ryujinx.Graphics.Shader.Instructions } else { - var inst = cond switch + Instruction inst = cond switch { IComp.Lt => Instruction.CompareLessU32, IComp.Eq => Instruction.CompareEqual, diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerLogical.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerLogical.cs index 5993c93dd..2e2d951d2 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerLogical.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerLogical.cs @@ -15,8 +15,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLopR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitLop(context, op.Lop, op.PredicateOp, srcA, srcB, op.Dest, op.DestPred, op.NegA, op.NegB, op.X, op.WriteCC); } @@ -25,8 +25,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLopI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitLop(context, op.LogicOp, op.PredicateOp, srcA, srcB, op.Dest, op.DestPred, op.NegA, op.NegB, op.X, op.WriteCC); } @@ -35,8 +35,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLopC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitLop(context, op.LogicOp, op.PredicateOp, srcA, srcB, op.Dest, op.DestPred, op.NegA, op.NegB, op.X, op.WriteCC); } @@ -45,8 +45,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLop32i op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, op.Imm32); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, op.Imm32); EmitLop(context, op.LogicOp, PredicateOp.F, srcA, srcB, op.Dest, PT, op.NegA, op.NegB, op.X, op.WriteCC); } @@ -55,9 +55,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLop3R op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitLop3(context, op.Imm, op.PredicateOp, srcA, srcB, srcC, op.Dest, op.DestPred, op.X, op.WriteCC); } @@ -66,9 +66,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLop3I op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcC = GetSrcReg(context, op.SrcC); EmitLop3(context, op.Imm, PredicateOp.F, srcA, srcB, srcC, op.Dest, PT, false, op.WriteCC); } @@ -77,9 +77,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstLop3C op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcC = GetSrcReg(context, op.SrcC); EmitLop3(context, op.Imm, PredicateOp.F, srcA, srcB, srcC, op.Dest, PT, false, op.WriteCC); } diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerMinMax.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerMinMax.cs index 739e94413..f34efc6f3 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerMinMax.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitIntegerMinMax.cs @@ -13,9 +13,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImnmxR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); EmitImnmx(context, srcA, srcB, srcPred, op.Dest, op.Signed, op.WriteCC); } @@ -24,9 +24,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImnmxI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); - var srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); EmitImnmx(context, srcA, srcB, srcPred, op.Dest, op.Signed, op.WriteCC); } @@ -35,9 +35,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstImnmxC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); - var srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcPred = GetPredicate(context, op.SrcPred, op.SrcPredInv); EmitImnmx(context, srcA, srcB, srcPred, op.Dest, op.Signed, op.WriteCC); } diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitShift.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitShift.cs index ee0dac155..7e2145c37 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitShift.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitShift.cs @@ -13,9 +13,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstShfLR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitShf(context, op.MaxShift, srcA, srcB, srcC, op.Dest, op.M, left: true, op.WriteCC); } @@ -24,9 +24,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstShfRR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); + Operand srcC = GetSrcReg(context, op.SrcC); EmitShf(context, op.MaxShift, srcA, srcB, srcC, op.Dest, op.M, left: false, op.WriteCC); } @@ -35,9 +35,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstShfLI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = Const(op.Imm6); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = Const(op.Imm6); + Operand srcC = GetSrcReg(context, op.SrcC); EmitShf(context, op.MaxShift, srcA, srcB, srcC, op.Dest, op.M, left: true, op.WriteCC); } @@ -46,9 +46,9 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstShfRI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = Const(op.Imm6); - var srcC = GetSrcReg(context, op.SrcC); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = Const(op.Imm6); + Operand srcC = GetSrcReg(context, op.SrcC); EmitShf(context, op.MaxShift, srcA, srcB, srcC, op.Dest, op.M, left: false, op.WriteCC); } @@ -78,8 +78,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstShrR op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcReg(context, op.SrcB); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcReg(context, op.SrcB); EmitShr(context, srcA, srcB, op.Dest, op.M, op.Brev, op.Signed); } @@ -88,8 +88,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstShrI op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcImm(context, Imm20ToSInt(op.Imm20)); EmitShr(context, srcA, srcB, op.Dest, op.M, op.Brev, op.Signed); } @@ -98,8 +98,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstShrC op = context.GetOp(); - var srcA = GetSrcReg(context, op.SrcA); - var srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); + Operand srcA = GetSrcReg(context, op.SrcA); + Operand srcB = GetSrcCbuf(context, op.CbufSlot, op.CbufOffset); EmitShr(context, srcA, srcB, op.Dest, op.M, op.Brev, op.Signed); } diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitTexture.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitTexture.cs index 2076262da..52a004c0e 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitTexture.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitTexture.cs @@ -57,7 +57,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstTld op = context.GetOp(); - var lod = op.Lod ? Lod.Ll : Lod.Lz; + Lod lod = op.Lod ? Lod.Ll : Lod.Lz; EmitTex(context, TextureFlags.IntCoords, op.Dim, lod, op.TidB, op.WMask, op.SrcA, op.SrcB, op.Dest, op.Ms, false, op.Toff); } @@ -66,8 +66,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstTldB op = context.GetOp(); - var flags = TextureFlags.IntCoords | TextureFlags.Bindless; - var lod = op.Lod ? Lod.Ll : Lod.Lz; + TextureFlags flags = TextureFlags.IntCoords | TextureFlags.Bindless; + Lod lod = op.Lod ? Lod.Ll : Lod.Lz; EmitTex(context, flags, op.Dim, lod, 0, op.WMask, op.SrcA, op.SrcB, op.Dest, op.Ms, false, op.Toff); } @@ -376,7 +376,7 @@ namespace Ryujinx.Graphics.Shader.Instructions if (texsType == TexsType.Texs) { - var texsOp = context.GetOp(); + InstTexs texsOp = context.GetOp(); type = ConvertSamplerType(texsOp.Target); @@ -468,7 +468,7 @@ namespace Ryujinx.Graphics.Shader.Instructions } else if (texsType == TexsType.Tlds) { - var tldsOp = context.GetOp(); + InstTlds tldsOp = context.GetOp(); type = ConvertSamplerType(tldsOp.Target); @@ -562,7 +562,7 @@ namespace Ryujinx.Graphics.Shader.Instructions } else if (texsType == TexsType.Tld4s) { - var tld4sOp = context.GetOp(); + InstTld4s tld4sOp = context.GetOp(); if (!(tld4sOp.Dc || tld4sOp.Aoffi)) { diff --git a/src/Ryujinx.Graphics.Shader/SamplerType.cs b/src/Ryujinx.Graphics.Shader/SamplerType.cs index 18285cd70..20352d13e 100644 --- a/src/Ryujinx.Graphics.Shader/SamplerType.cs +++ b/src/Ryujinx.Graphics.Shader/SamplerType.cs @@ -192,7 +192,7 @@ namespace Ryujinx.Graphics.Shader typeName += "_array"; } - var format = aggregateType switch + string format = aggregateType switch { AggregateType.S32 => "int", AggregateType.U32 => "uint", diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/ShaderProperties.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/ShaderProperties.cs index 53ed6bfcc..f56d7bff3 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/ShaderProperties.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/ShaderProperties.cs @@ -73,7 +73,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr return TextureFormat.Unknown; } - var format = gpuAccessor.QueryTextureFormat(handle, cbufSlot); + TextureFormat format = gpuAccessor.QueryTextureFormat(handle, cbufSlot); if (format == TextureFormat.Unknown) { @@ -95,7 +95,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr // Atomic image instructions do not support GL_EXT_shader_image_load_formatted, // and must have a type specified. Default to R32Sint if not available. - var format = gpuAccessor.QueryTextureFormat(handle, cbufSlot); + TextureFormat format = gpuAccessor.QueryTextureFormat(handle, cbufSlot); if (!FormatSupportsAtomic(format)) { diff --git a/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs b/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs index 5e07b39f1..25ecb8621 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs @@ -1,5 +1,6 @@ using Ryujinx.Graphics.Shader.Decoders; using Ryujinx.Graphics.Shader.IntermediateRepresentation; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Numerics; @@ -256,8 +257,8 @@ namespace Ryujinx.Graphics.Shader.Translation for (int tfbIndex = 0; tfbIndex < ResourceReservations.TfeBuffersCount; tfbIndex++) { - var locations = TranslatorContext.GpuAccessor.QueryTransformFeedbackVaryingLocations(tfbIndex); - var stride = TranslatorContext.GpuAccessor.QueryTransformFeedbackStride(tfbIndex); + ReadOnlySpan locations = TranslatorContext.GpuAccessor.QueryTransformFeedbackVaryingLocations(tfbIndex); + int stride = TranslatorContext.GpuAccessor.QueryTransformFeedbackStride(tfbIndex); Operand baseOffset = this.Load(StorageKind.ConstantBuffer, SupportBuffer.Binding, Const((int)SupportBufferField.TfeOffset), Const(tfbIndex)); Operand baseVertex = this.Load(StorageKind.Input, IoVariable.BaseVertex); diff --git a/src/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs b/src/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs index b792776df..ba9685433 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs @@ -490,8 +490,8 @@ namespace Ryujinx.Graphics.Shader.Translation for (int index = 0; index < pTreeNode.Uses.Count; index++) { - var pUse = pTreeNode.Uses[index]; - var cUse = cTreeNode.Uses[index]; + PatternTreeNodeUse pUse = pTreeNode.Uses[index]; + TreeNodeUse cUse = cTreeNode.Uses[index]; if (pUse.Index <= -2) { @@ -524,8 +524,8 @@ namespace Ryujinx.Graphics.Shader.Translation { public static IPatternTreeNode[] GetFsiGetAddress() { - var affinityValue = S2r(SReg.Affinity).Use(PT).Out; - var orderingTicketValue = S2r(SReg.OrderingTicket).Use(PT).Out; + PatternTreeNodeUse affinityValue = S2r(SReg.Affinity).Use(PT).Out; + PatternTreeNodeUse orderingTicketValue = S2r(SReg.OrderingTicket).Use(PT).Out; return new IPatternTreeNode[] { @@ -554,8 +554,8 @@ namespace Ryujinx.Graphics.Shader.Translation public static IPatternTreeNode[] GetFsiGetAddressV2() { - var affinityValue = S2r(SReg.Affinity).Use(PT).Out; - var orderingTicketValue = S2r(SReg.OrderingTicket).Use(PT).Out; + PatternTreeNodeUse affinityValue = S2r(SReg.Affinity).Use(PT).Out; + PatternTreeNodeUse orderingTicketValue = S2r(SReg.OrderingTicket).Use(PT).Out; return new IPatternTreeNode[] { @@ -582,8 +582,8 @@ namespace Ryujinx.Graphics.Shader.Translation public static IPatternTreeNode[] GetFsiIsLastWarpThread() { - var threadKillValue = S2r(SReg.ThreadKill).Use(PT).Out; - var laneIdValue = S2r(SReg.LaneId).Use(PT).Out; + PatternTreeNodeUse threadKillValue = S2r(SReg.ThreadKill).Use(PT).Out; + PatternTreeNodeUse laneIdValue = S2r(SReg.LaneId).Use(PT).Out; return new IPatternTreeNode[] { @@ -609,11 +609,11 @@ namespace Ryujinx.Graphics.Shader.Translation public static IPatternTreeNode[] GetFsiBeginPattern() { - var addressLowValue = CallArg(1); + PatternTreeNodeUse addressLowValue = CallArg(1); static PatternTreeNodeUse HighU16Equals(PatternTreeNodeUse x) { - var expectedValue = CallArg(3); + PatternTreeNodeUse expectedValue = CallArg(3); return IsetpU32(IComp.Eq) .Use(PT) @@ -644,13 +644,13 @@ namespace Ryujinx.Graphics.Shader.Translation public static IPatternTreeNode[] GetFsiEndPattern() { - var voteResult = Vote(VoteMode.All).Use(PT).Use(PT).OutAt(1); - var popcResult = Popc().Use(PT).Use(voteResult).Out; - var threadKillValue = S2r(SReg.ThreadKill).Use(PT).Out; - var laneIdValue = S2r(SReg.LaneId).Use(PT).Out; + PatternTreeNodeUse voteResult = Vote(VoteMode.All).Use(PT).Use(PT).OutAt(1); + PatternTreeNodeUse popcResult = Popc().Use(PT).Use(voteResult).Out; + PatternTreeNodeUse threadKillValue = S2r(SReg.ThreadKill).Use(PT).Out; + PatternTreeNodeUse laneIdValue = S2r(SReg.LaneId).Use(PT).Out; - var addressLowValue = CallArg(1); - var incrementValue = CallArg(2); + PatternTreeNodeUse addressLowValue = CallArg(1); + PatternTreeNodeUse incrementValue = CallArg(2); return new IPatternTreeNode[] { diff --git a/src/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs b/src/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs index 8a730ef74..8628b3236 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs @@ -267,7 +267,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations { Operand value = operation.GetSource(operation.SourcesCount - 1); - var result = FindUniqueBaseAddressCb(gtsContext, block, value, needsOffset: false); + SearchResult result = FindUniqueBaseAddressCb(gtsContext, block, value, needsOffset: false); if (result.Found) { uint targetCb = PackCbSlotAndOffset(result.SbCbSlot, result.SbCbOffset); @@ -1018,7 +1018,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations offset = src1; } - var result = GetBaseAddressCbWithOffset(baseAddr, offset, 0); + SearchResult result = GetBaseAddressCbWithOffset(baseAddr, offset, 0); if (result.Found) { return result; diff --git a/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs b/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs index 1c724223c..2851381ae 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs @@ -302,7 +302,7 @@ namespace Ryujinx.Graphics.Shader.Translation Debug.Assert(funcId.Type == OperandType.Constant); - var fru = frus[funcId.Value]; + FunctionRegisterUsage fru = frus[funcId.Value]; Operand[] inRegs = new Operand[fru.InArguments.Length]; diff --git a/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs b/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs index 83e4dc0ac..c733e5b55 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs @@ -103,7 +103,7 @@ namespace Ryujinx.Graphics.Shader.Translation size = DefaultLocalMemorySize; } - var lmem = new MemoryDefinition("local_memory", AggregateType.Array | AggregateType.U32, BitUtils.DivRoundUp(size, sizeof(uint))); + MemoryDefinition lmem = new MemoryDefinition("local_memory", AggregateType.Array | AggregateType.U32, BitUtils.DivRoundUp(size, sizeof(uint))); LocalMemoryId = Properties.AddLocalMemory(lmem); } @@ -122,7 +122,7 @@ namespace Ryujinx.Graphics.Shader.Translation size = DefaultSharedMemorySize; } - var smem = new MemoryDefinition("shared_memory", AggregateType.Array | AggregateType.U32, BitUtils.DivRoundUp(size, sizeof(uint))); + MemoryDefinition smem = new MemoryDefinition("shared_memory", AggregateType.Array | AggregateType.U32, BitUtils.DivRoundUp(size, sizeof(uint))); SharedMemoryId = Properties.AddSharedMemory(smem); } @@ -283,16 +283,16 @@ namespace Ryujinx.Graphics.Shader.Translation bool coherent, bool separate) { - var dimensions = type == SamplerType.None ? 0 : type.GetDimensions(); - var dict = isImage ? _usedImages : _usedTextures; + int dimensions = type == SamplerType.None ? 0 : type.GetDimensions(); + Dictionary dict = isImage ? _usedImages : _usedTextures; - var usageFlags = TextureUsageFlags.None; + TextureUsageFlags usageFlags = TextureUsageFlags.None; if (intCoords) { usageFlags |= TextureUsageFlags.NeedsScaleValue; - var canScale = _stage.SupportsRenderScale() && arrayLength == 1 && !write && dimensions == 2; + bool canScale = _stage.SupportsRenderScale() && arrayLength == 1 && !write && dimensions == 2; if (!canScale) { @@ -314,9 +314,9 @@ namespace Ryujinx.Graphics.Shader.Translation // For array textures, we also want to use type as key, // since we may have texture handles stores in the same buffer, but for textures with different types. - var keyType = arrayLength > 1 ? type : SamplerType.None; - var info = new TextureInfo(cbufSlot, handle, arrayLength, separate, keyType, format); - var meta = new TextureMeta() + SamplerType keyType = arrayLength > 1 ? type : SamplerType.None; + TextureInfo info = new TextureInfo(cbufSlot, handle, arrayLength, separate, keyType, format); + TextureMeta meta = new TextureMeta() { AccurateType = accurateType, Type = type, @@ -326,7 +326,7 @@ namespace Ryujinx.Graphics.Shader.Translation int setIndex; int binding; - if (dict.TryGetValue(info, out var existingMeta)) + if (dict.TryGetValue(info, out TextureMeta existingMeta)) { dict[info] = MergeTextureMeta(meta, existingMeta); setIndex = existingMeta.Set; @@ -383,7 +383,7 @@ namespace Ryujinx.Graphics.Shader.Translation nameSuffix = cbufSlot < 0 ? $"{prefix}_tcb_{handle:X}" : $"{prefix}_cb{cbufSlot}_{handle:X}"; } - var definition = new TextureDefinition( + TextureDefinition definition = new TextureDefinition( setIndex, binding, arrayLength, @@ -443,8 +443,8 @@ namespace Ryujinx.Graphics.Shader.Translation { selectedMeta.UsageFlags |= TextureUsageFlags.NeedsScaleValue; - var dimensions = type.GetDimensions(); - var canScale = _stage.SupportsRenderScale() && selectedInfo.ArrayLength == 1 && dimensions == 2; + int dimensions = type.GetDimensions(); + bool canScale = _stage.SupportsRenderScale() && selectedInfo.ArrayLength == 1 && dimensions == 2; if (!canScale) { @@ -464,7 +464,7 @@ namespace Ryujinx.Graphics.Shader.Translation public BufferDescriptor[] GetConstantBufferDescriptors() { - var descriptors = new BufferDescriptor[_usedConstantBufferBindings.Count]; + BufferDescriptor[] descriptors = new BufferDescriptor[_usedConstantBufferBindings.Count]; int descriptorIndex = 0; @@ -488,7 +488,7 @@ namespace Ryujinx.Graphics.Shader.Translation public BufferDescriptor[] GetStorageBufferDescriptors() { - var descriptors = new BufferDescriptor[_sbSlots.Count]; + BufferDescriptor[] descriptors = new BufferDescriptor[_sbSlots.Count]; int descriptorIndex = 0; @@ -575,7 +575,7 @@ namespace Ryujinx.Graphics.Shader.Translation public ShaderProgramInfo GetVertexAsComputeInfo(bool isVertex = false) { - var cbDescriptors = new BufferDescriptor[_vacConstantBuffers.Count]; + BufferDescriptor[] cbDescriptors = new BufferDescriptor[_vacConstantBuffers.Count]; int cbDescriptorIndex = 0; foreach (BufferDefinition definition in _vacConstantBuffers) @@ -583,7 +583,7 @@ namespace Ryujinx.Graphics.Shader.Translation cbDescriptors[cbDescriptorIndex++] = new BufferDescriptor(definition.Set, definition.Binding, 0, 0, 0, BufferUsageFlags.None); } - var sbDescriptors = new BufferDescriptor[_vacStorageBuffers.Count]; + BufferDescriptor[] sbDescriptors = new BufferDescriptor[_vacStorageBuffers.Count]; int sbDescriptorIndex = 0; foreach (BufferDefinition definition in _vacStorageBuffers) @@ -591,7 +591,7 @@ namespace Ryujinx.Graphics.Shader.Translation sbDescriptors[sbDescriptorIndex++] = new BufferDescriptor(definition.Set, definition.Binding, 0, 0, 0, BufferUsageFlags.Write); } - var tDescriptors = new TextureDescriptor[_vacTextures.Count]; + TextureDescriptor[] tDescriptors = new TextureDescriptor[_vacTextures.Count]; int tDescriptorIndex = 0; foreach (TextureDefinition definition in _vacTextures) @@ -608,7 +608,7 @@ namespace Ryujinx.Graphics.Shader.Translation definition.Flags); } - var iDescriptors = new TextureDescriptor[_vacImages.Count]; + TextureDescriptor[] iDescriptors = new TextureDescriptor[_vacImages.Count]; int iDescriptorIndex = 0; foreach (TextureDefinition definition in _vacImages) diff --git a/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs b/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs index f831ec940..5cb900df7 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs @@ -192,7 +192,7 @@ namespace Ryujinx.Graphics.Shader.Translation component = subIndex; } - var transformFeedbackVariable = new TransformFeedbackVariable(ioVariable, location, component); + TransformFeedbackVariable transformFeedbackVariable = new TransformFeedbackVariable(ioVariable, location, component); _transformFeedbackDefinitions.TryAdd(transformFeedbackVariable, transformFeedbackOutputs[wordOffset]); } } @@ -219,7 +219,7 @@ namespace Ryujinx.Graphics.Shader.Translation return false; } - var transformFeedbackVariable = new TransformFeedbackVariable(ioVariable, location, component); + TransformFeedbackVariable transformFeedbackVariable = new TransformFeedbackVariable(ioVariable, location, component); return _transformFeedbackDefinitions.TryGetValue(transformFeedbackVariable, out transformFeedbackOutput); } @@ -271,8 +271,8 @@ namespace Ryujinx.Graphics.Shader.Translation for (; count < 4; count++) { - ref var prev = ref _transformFeedbackOutputs[baseIndex + count - 1]; - ref var curr = ref _transformFeedbackOutputs[baseIndex + count]; + ref TransformFeedbackOutput prev = ref _transformFeedbackOutputs[baseIndex + count - 1]; + ref TransformFeedbackOutput curr = ref _transformFeedbackOutputs[baseIndex + count]; int prevOffset = prev.Offset; int currOffset = curr.Offset; diff --git a/src/Ryujinx.Graphics.Shader/Translation/Translator.cs b/src/Ryujinx.Graphics.Shader/Translation/Translator.cs index d1fbca0eb..7f276044a 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -110,8 +110,8 @@ namespace Ryujinx.Graphics.Shader.Translation for (int tfbIndex = 0; tfbIndex < 4; tfbIndex++) { - var locations = gpuAccessor.QueryTransformFeedbackVaryingLocations(tfbIndex); - var stride = gpuAccessor.QueryTransformFeedbackStride(tfbIndex); + ReadOnlySpan locations = gpuAccessor.QueryTransformFeedbackVaryingLocations(tfbIndex); + int stride = gpuAccessor.QueryTransformFeedbackStride(tfbIndex); for (int i = 0; i < locations.Length; i++) { diff --git a/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs b/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs index bec20bc2c..40cf62231 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs @@ -243,8 +243,8 @@ namespace Ryujinx.Graphics.Shader.Translation usedFeatures |= FeatureFlags.VtgAsCompute; } - var cfgs = new ControlFlowGraph[functions.Length]; - var frus = new RegisterUsage.FunctionRegisterUsage[functions.Length]; + ControlFlowGraph[] cfgs = new ControlFlowGraph[functions.Length]; + RegisterUsage.FunctionRegisterUsage[] frus = new RegisterUsage.FunctionRegisterUsage[functions.Length]; for (int i = 0; i < functions.Length; i++) { @@ -267,14 +267,14 @@ namespace Ryujinx.Graphics.Shader.Translation for (int i = 0; i < functions.Length; i++) { - var cfg = cfgs[i]; + ControlFlowGraph cfg = cfgs[i]; int inArgumentsCount = 0; int outArgumentsCount = 0; if (i != 0) { - var fru = frus[i]; + RegisterUsage.FunctionRegisterUsage fru = frus[i]; inArgumentsCount = fru.InArguments.Length; outArgumentsCount = fru.OutArguments.Length; @@ -326,7 +326,7 @@ namespace Ryujinx.Graphics.Shader.Translation FeatureFlags usedFeatures, byte clipDistancesWritten) { - var sInfo = StructuredProgram.MakeStructuredProgram( + StructuredProgramInfo sInfo = StructuredProgram.MakeStructuredProgram( funcs, attributeUsage, definitions, @@ -342,7 +342,7 @@ namespace Ryujinx.Graphics.Shader.Translation _ => 1 }; - var info = new ShaderProgramInfo( + ShaderProgramInfo info = new ShaderProgramInfo( resourceManager.GetConstantBufferDescriptors(), resourceManager.GetStorageBufferDescriptors(), resourceManager.GetTextureDescriptors(), @@ -358,7 +358,7 @@ namespace Ryujinx.Graphics.Shader.Translation clipDistancesWritten, originalDefinitions.OmapTargets); - var hostCapabilities = new HostCapabilities( + HostCapabilities hostCapabilities = new HostCapabilities( GpuAccessor.QueryHostReducedPrecision(), GpuAccessor.QueryHostSupportsFragmentShaderInterlock(), GpuAccessor.QueryHostSupportsFragmentShaderOrderingIntel(), @@ -369,7 +369,7 @@ namespace Ryujinx.Graphics.Shader.Translation GpuAccessor.QueryHostSupportsTextureShadowLod(), GpuAccessor.QueryHostSupportsViewportMask()); - var parameters = new CodeGenParameters(attributeUsage, definitions, resourceManager.Properties, hostCapabilities, GpuAccessor, Options.TargetApi); + CodeGenParameters parameters = new CodeGenParameters(attributeUsage, definitions, resourceManager.Properties, hostCapabilities, GpuAccessor, Options.TargetApi); return Options.TargetLanguage switch { @@ -494,10 +494,10 @@ namespace Ryujinx.Graphics.Shader.Translation public (ShaderProgram, ShaderProgramInfo) GenerateVertexPassthroughForCompute() { - var attributeUsage = new AttributeUsage(GpuAccessor); - var resourceManager = new ResourceManager(ShaderStage.Vertex, GpuAccessor); + AttributeUsage attributeUsage = new AttributeUsage(GpuAccessor); + ResourceManager resourceManager = new ResourceManager(ShaderStage.Vertex, GpuAccessor); - var reservations = GetResourceReservations(); + ResourceReservations reservations = GetResourceReservations(); int vertexInfoCbBinding = reservations.VertexInfoConstantBufferBinding; @@ -516,7 +516,7 @@ namespace Ryujinx.Graphics.Shader.Translation BufferDefinition vertexOutputBuffer = new(BufferLayout.Std430, 1, vertexDataSbBinding, "vb_input", vertexInputStruct); resourceManager.AddVertexAsComputeStorageBuffer(vertexOutputBuffer); - var context = new EmitterContext(); + EmitterContext context = new EmitterContext(); Operand vertexIndex = Options.TargetApi == TargetApi.OpenGL ? context.Load(StorageKind.Input, IoVariable.VertexId) @@ -561,13 +561,13 @@ namespace Ryujinx.Graphics.Shader.Translation } } - var operations = context.GetOperations(); - var cfg = ControlFlowGraph.Create(operations); - var function = new Function(cfg.Blocks, "main", false, 0, 0); + Operation[] operations = context.GetOperations(); + ControlFlowGraph cfg = ControlFlowGraph.Create(operations); + Function function = new Function(cfg.Blocks, "main", false, 0, 0); - var transformFeedbackOutputs = GetTransformFeedbackOutputs(GpuAccessor, out ulong transformFeedbackVecMap); + TransformFeedbackOutput[] transformFeedbackOutputs = GetTransformFeedbackOutputs(GpuAccessor, out ulong transformFeedbackVecMap); - var definitions = new ShaderDefinitions(ShaderStage.Vertex, transformFeedbackVecMap, transformFeedbackOutputs) + ShaderDefinitions definitions = new ShaderDefinitions(ShaderStage.Vertex, transformFeedbackVecMap, transformFeedbackOutputs) { LastInVertexPipeline = true }; @@ -612,10 +612,10 @@ namespace Ryujinx.Graphics.Shader.Translation break; } - var attributeUsage = new AttributeUsage(GpuAccessor); - var resourceManager = new ResourceManager(ShaderStage.Geometry, GpuAccessor); + AttributeUsage attributeUsage = new AttributeUsage(GpuAccessor); + ResourceManager resourceManager = new ResourceManager(ShaderStage.Geometry, GpuAccessor); - var context = new EmitterContext(); + EmitterContext context = new EmitterContext(); for (int v = 0; v < maxOutputVertices; v++) { @@ -656,11 +656,11 @@ namespace Ryujinx.Graphics.Shader.Translation context.EndPrimitive(); - var operations = context.GetOperations(); - var cfg = ControlFlowGraph.Create(operations); - var function = new Function(cfg.Blocks, "main", false, 0, 0); + Operation[] operations = context.GetOperations(); + ControlFlowGraph cfg = ControlFlowGraph.Create(operations); + Function function = new Function(cfg.Blocks, "main", false, 0, 0); - var definitions = new ShaderDefinitions( + ShaderDefinitions definitions = new ShaderDefinitions( ShaderStage.Geometry, GpuAccessor.QueryGraphicsState(), false, -- 2.47.1 From 1712d69dcdc94438d37ec8fbeb827dacbb0fb53e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:08:35 -0600 Subject: [PATCH 428/722] misc: chore: Use explicit types in Texture & Vic --- src/Ryujinx.Graphics.Texture/Encoders/BC7Encoder.cs | 2 +- src/Ryujinx.Graphics.Vic/VicDevice.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.Graphics.Texture/Encoders/BC7Encoder.cs b/src/Ryujinx.Graphics.Texture/Encoders/BC7Encoder.cs index 5fdc9e917..5b333f91f 100644 --- a/src/Ryujinx.Graphics.Texture/Encoders/BC7Encoder.cs +++ b/src/Ryujinx.Graphics.Texture/Encoders/BC7Encoder.cs @@ -67,7 +67,7 @@ namespace Ryujinx.Graphics.Texture.Encoders int w = Math.Min(4, width - x); int h = Math.Min(4, height - y); - var dataUint = MemoryMarshal.Cast(data); + ReadOnlySpan dataUint = MemoryMarshal.Cast(data); int baseOffset = y * width + x; diff --git a/src/Ryujinx.Graphics.Vic/VicDevice.cs b/src/Ryujinx.Graphics.Vic/VicDevice.cs index 2b25a74c8..7cc5dda54 100644 --- a/src/Ryujinx.Graphics.Vic/VicDevice.cs +++ b/src/Ryujinx.Graphics.Vic/VicDevice.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common.Memory; using Ryujinx.Graphics.Device; using Ryujinx.Graphics.Vic.Image; using Ryujinx.Graphics.Vic.Types; @@ -43,7 +44,7 @@ namespace Ryujinx.Graphics.Vic continue; } - ref var offsets = ref _state.State.SetSurfacexSlotx[i]; + ref Array8 offsets = ref _state.State.SetSurfacexSlotx[i]; using Surface src = SurfaceReader.Read(_rm, ref slot.SlotConfig, ref slot.SlotSurfaceConfig, ref offsets); -- 2.47.1 From ac401034d75b9056766b4d723eace2228a30e1aa Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:09:05 -0600 Subject: [PATCH 429/722] misc: chore: Use explicit types in input projects --- src/Ryujinx.Input.SDL2/SDL2Gamepad.cs | 2 +- src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs | 2 +- src/Ryujinx.Input/Assigner/GamepadButtonAssigner.cs | 2 +- src/Ryujinx.Input/GamepadStateSnapshot.cs | 2 +- src/Ryujinx.Input/HLE/NpadController.cs | 4 ++-- src/Ryujinx.Input/HLE/NpadManager.cs | 11 ++++++----- src/Ryujinx.Input/HLE/TouchScreenManager.cs | 5 +++-- src/Ryujinx.Input/Motion/CemuHook/Client.cs | 10 +++++----- 8 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs index 3ed2880ce..8809c83f0 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs @@ -373,7 +373,7 @@ namespace Ryujinx.Input.SDL2 if (HasConfiguration) { - var joyconStickConfig = GetLogicalJoyStickConfig(inputId); + JoyconConfigControllerStick joyconStickConfig = GetLogicalJoyStickConfig(inputId); if (joyconStickConfig != null) { diff --git a/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs b/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs index 69e12bda0..fef6de788 100644 --- a/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs +++ b/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs @@ -55,7 +55,7 @@ namespace Ryujinx.Input.SDL2 public IEnumerable GetGamepads() { - foreach (var keyboardId in _keyboardIdentifers) + foreach (string keyboardId in _keyboardIdentifers) { yield return GetGamepad(keyboardId); } diff --git a/src/Ryujinx.Input/Assigner/GamepadButtonAssigner.cs b/src/Ryujinx.Input/Assigner/GamepadButtonAssigner.cs index 80fed2b82..4c8682da5 100644 --- a/src/Ryujinx.Input/Assigner/GamepadButtonAssigner.cs +++ b/src/Ryujinx.Input/Assigner/GamepadButtonAssigner.cs @@ -144,7 +144,7 @@ namespace Ryujinx.Input.Assigner { StringWriter writer = new(); - foreach (var kvp in _stats) + foreach (KeyValuePair kvp in _stats) { writer.WriteLine($"Button {kvp.Key} -> {kvp.Value}"); } diff --git a/src/Ryujinx.Input/GamepadStateSnapshot.cs b/src/Ryujinx.Input/GamepadStateSnapshot.cs index 3de08f574..ed1bf5fe8 100644 --- a/src/Ryujinx.Input/GamepadStateSnapshot.cs +++ b/src/Ryujinx.Input/GamepadStateSnapshot.cs @@ -49,7 +49,7 @@ namespace Ryujinx.Input [MethodImpl(MethodImplOptions.AggressiveInlining)] public (float, float) GetStick(StickInputId inputId) { - var result = _joysticksState[(int)inputId]; + Array2 result = _joysticksState[(int)inputId]; return (result[0], result[1]); } diff --git a/src/Ryujinx.Input/HLE/NpadController.cs b/src/Ryujinx.Input/HLE/NpadController.cs index 380745283..357299fdd 100644 --- a/src/Ryujinx.Input/HLE/NpadController.cs +++ b/src/Ryujinx.Input/HLE/NpadController.cs @@ -276,7 +276,7 @@ namespace Ryujinx.Input.HLE public void Update() { // _gamepad may be altered by other threads - var gamepad = _gamepad; + IGamepad gamepad = _gamepad; if (gamepad != null && GamepadDriver != null) { @@ -489,7 +489,7 @@ namespace Ryujinx.Input.HLE public static KeyboardInput GetHLEKeyboardInput(IGamepadDriver KeyboardDriver) { - var keyboard = KeyboardDriver.GetGamepad("0") as IKeyboard; + IKeyboard keyboard = KeyboardDriver.GetGamepad("0") as IKeyboard; KeyboardStateSnapshot keyboardState = keyboard.GetKeyboardStateSnapshot(); diff --git a/src/Ryujinx.Input/HLE/NpadManager.cs b/src/Ryujinx.Input/HLE/NpadManager.cs index 08f222a91..0b3278be5 100644 --- a/src/Ryujinx.Input/HLE/NpadManager.cs +++ b/src/Ryujinx.Input/HLE/NpadManager.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Numerics; using System.Runtime.CompilerServices; using System.Threading; using CemuHookClient = Ryujinx.Input.Motion.CemuHook.Client; @@ -56,7 +57,7 @@ namespace Ryujinx.Input.HLE lock (_lock) { List validInputs = new(); - foreach (var inputConfigEntry in _inputConfig) + foreach (InputConfig inputConfigEntry in _inputConfig) { if (_controllers[(int)inputConfigEntry.PlayerIndex] != null) { @@ -234,7 +235,7 @@ namespace Ryujinx.Input.HLE isJoyconPair = inputConfig.ControllerType == ControllerType.JoyconPair; - var altMotionState = isJoyconPair ? controller.GetHLEMotionState(true) : default; + SixAxisInput altMotionState = isJoyconPair ? controller.GetHLEMotionState(true) : default; motionState = (controller.GetHLEMotionState(), altMotionState); } @@ -273,9 +274,9 @@ namespace Ryujinx.Input.HLE if (_enableMouse) { - var mouse = _mouseDriver.GetGamepad("0") as IMouse; + IMouse mouse = _mouseDriver.GetGamepad("0") as IMouse; - var mouseInput = IMouse.GetMouseStateSnapshot(mouse); + MouseStateSnapshot mouseInput = IMouse.GetMouseStateSnapshot(mouse); uint buttons = 0; @@ -304,7 +305,7 @@ namespace Ryujinx.Input.HLE buttons |= 1 << 4; } - var position = IMouse.GetScreenPosition(mouseInput.Position, mouse.ClientSize, aspectRatio); + Vector2 position = IMouse.GetScreenPosition(mouseInput.Position, mouse.ClientSize, aspectRatio); _device.Hid.Mouse.Update((int)position.X, (int)position.Y, buttons, (int)mouseInput.Scroll.X, (int)mouseInput.Scroll.Y, true); } diff --git a/src/Ryujinx.Input/HLE/TouchScreenManager.cs b/src/Ryujinx.Input/HLE/TouchScreenManager.cs index c613f9281..28d800d18 100644 --- a/src/Ryujinx.Input/HLE/TouchScreenManager.cs +++ b/src/Ryujinx.Input/HLE/TouchScreenManager.cs @@ -2,6 +2,7 @@ using Ryujinx.HLE; using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen; using System; +using System.Numerics; namespace Ryujinx.Input.HLE { @@ -29,7 +30,7 @@ namespace Ryujinx.Input.HLE if (_wasClicking && !isClicking) { MouseStateSnapshot snapshot = IMouse.GetMouseStateSnapshot(_mouse); - var touchPosition = IMouse.GetScreenPosition(snapshot.Position, _mouse.ClientSize, aspectRatio); + Vector2 touchPosition = IMouse.GetScreenPosition(snapshot.Position, _mouse.ClientSize, aspectRatio); TouchPoint currentPoint = new() { @@ -58,7 +59,7 @@ namespace Ryujinx.Input.HLE if (aspectRatio > 0) { MouseStateSnapshot snapshot = IMouse.GetMouseStateSnapshot(_mouse); - var touchPosition = IMouse.GetScreenPosition(snapshot.Position, _mouse.ClientSize, aspectRatio); + Vector2 touchPosition = IMouse.GetScreenPosition(snapshot.Position, _mouse.ClientSize, aspectRatio); TouchAttribute attribute = TouchAttribute.None; diff --git a/src/Ryujinx.Input/Motion/CemuHook/Client.cs b/src/Ryujinx.Input/Motion/CemuHook/Client.cs index e19f3d847..d07ae6431 100644 --- a/src/Ryujinx.Input/Motion/CemuHook/Client.cs +++ b/src/Ryujinx.Input/Motion/CemuHook/Client.cs @@ -48,7 +48,7 @@ namespace Ryujinx.Input.Motion.CemuHook lock (_clients) { - foreach (var client in _clients) + foreach (KeyValuePair client in _clients) { try { @@ -209,7 +209,7 @@ namespace Ryujinx.Input.Motion.CemuHook { client.Client.ReceiveTimeout = timeout; - var result = client?.Receive(ref endPoint); + byte[] result = client?.Receive(ref endPoint); if (result.Length > 0) { @@ -225,7 +225,7 @@ namespace Ryujinx.Input.Motion.CemuHook private void SetRetryTimer(int clientId) { - var elapsedMs = PerformanceCounter.ElapsedMilliseconds; + long elapsedMs = PerformanceCounter.ElapsedMilliseconds; _clientRetryTimer[clientId] = elapsedMs; } @@ -338,9 +338,9 @@ namespace Ryujinx.Input.Motion.CemuHook { int slot = inputData.Shared.Slot; - if (_motionData.TryGetValue(clientId, out var motionDataItem)) + if (_motionData.TryGetValue(clientId, out Dictionary motionDataItem)) { - if (motionDataItem.TryGetValue(slot, out var previousData)) + if (motionDataItem.TryGetValue(slot, out MotionInput previousData)) { previousData.Update(accelerometer, gyroscrope, timestamp, cemuHookConfig.Sensitivity, (float)cemuHookConfig.GyroDeadzone); } -- 2.47.1 From fe661dc750e2eb6712d476572ecc73b915e71651 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:09:36 -0600 Subject: [PATCH 430/722] misc: chore: Use explicit types in Memory project --- src/Ryujinx.Memory/AddressSpaceManager.cs | 6 ++-- .../BytesReadOnlySequenceSegment.cs | 6 ++-- src/Ryujinx.Memory/IVirtualMemoryManager.cs | 2 +- src/Ryujinx.Memory/MemoryManagementWindows.cs | 2 +- src/Ryujinx.Memory/Range/MultiRange.cs | 2 +- src/Ryujinx.Memory/Range/MultiRangeList.cs | 10 +++--- .../Range/NonOverlappingRangeList.cs | 2 +- src/Ryujinx.Memory/Tracking/MemoryTracking.cs | 10 +++--- .../Tracking/MultiRegionHandle.cs | 4 +-- src/Ryujinx.Memory/Tracking/RegionHandle.cs | 6 ++-- .../Tracking/SmartMultiRegionHandle.cs | 8 ++--- src/Ryujinx.Memory/Tracking/VirtualRegion.cs | 4 +-- .../VirtualMemoryManagerBase.cs | 2 +- .../WindowsShared/PlaceholderManager.cs | 32 +++++++++---------- 14 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/Ryujinx.Memory/AddressSpaceManager.cs b/src/Ryujinx.Memory/AddressSpaceManager.cs index 7bd572d7a..76c679d41 100644 --- a/src/Ryujinx.Memory/AddressSpaceManager.cs +++ b/src/Ryujinx.Memory/AddressSpaceManager.cs @@ -109,7 +109,7 @@ namespace Ryujinx.Memory yield break; } - foreach (var hostRegion in GetHostRegionsImpl(va, size)) + foreach (HostMemoryRange hostRegion in GetHostRegionsImpl(va, size)) { yield return hostRegion; } @@ -123,7 +123,7 @@ namespace Ryujinx.Memory yield break; } - var hostRegions = GetHostRegionsImpl(va, size); + IEnumerable hostRegions = GetHostRegionsImpl(va, size); if (hostRegions == null) { yield break; @@ -132,7 +132,7 @@ namespace Ryujinx.Memory ulong backingStart = (ulong)_backingMemory.Pointer; ulong backingEnd = backingStart + _backingMemory.Size; - foreach (var hostRegion in hostRegions) + foreach (HostMemoryRange hostRegion in hostRegions) { if (hostRegion.Address >= backingStart && hostRegion.Address < backingEnd) { diff --git a/src/Ryujinx.Memory/BytesReadOnlySequenceSegment.cs b/src/Ryujinx.Memory/BytesReadOnlySequenceSegment.cs index 5fe8d936c..6ac83464c 100644 --- a/src/Ryujinx.Memory/BytesReadOnlySequenceSegment.cs +++ b/src/Ryujinx.Memory/BytesReadOnlySequenceSegment.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Memory public BytesReadOnlySequenceSegment Append(Memory memory) { - var nextSegment = new BytesReadOnlySequenceSegment(memory) + BytesReadOnlySequenceSegment nextSegment = new BytesReadOnlySequenceSegment(memory) { RunningIndex = RunningIndex + Memory.Length }; @@ -34,8 +34,8 @@ namespace Ryujinx.Memory /// True if the segments are contiguous, otherwise false public unsafe bool IsContiguousWith(Memory other, out nuint contiguousStart, out int contiguousSize) { - if (MemoryMarshal.TryGetMemoryManager>(Memory, out var thisMemoryManager) && - MemoryMarshal.TryGetMemoryManager>(other, out var otherMemoryManager) && + if (MemoryMarshal.TryGetMemoryManager>(Memory, out NativeMemoryManager thisMemoryManager) && + MemoryMarshal.TryGetMemoryManager>(other, out NativeMemoryManager otherMemoryManager) && thisMemoryManager.Pointer + thisMemoryManager.Length == otherMemoryManager.Pointer) { contiguousStart = (nuint)thisMemoryManager.Pointer; diff --git a/src/Ryujinx.Memory/IVirtualMemoryManager.cs b/src/Ryujinx.Memory/IVirtualMemoryManager.cs index 102cedc94..1f8ca37aa 100644 --- a/src/Ryujinx.Memory/IVirtualMemoryManager.cs +++ b/src/Ryujinx.Memory/IVirtualMemoryManager.cs @@ -118,7 +118,7 @@ namespace Ryujinx.Memory { int copySize = (int)Math.Min(MaxChunkSize, size - subOffset); - using var writableRegion = GetWritableRegion(va + subOffset, copySize); + using WritableRegion writableRegion = GetWritableRegion(va + subOffset, copySize); writableRegion.Memory.Span.Fill(value); } diff --git a/src/Ryujinx.Memory/MemoryManagementWindows.cs b/src/Ryujinx.Memory/MemoryManagementWindows.cs index 468355dd0..e5a50f866 100644 --- a/src/Ryujinx.Memory/MemoryManagementWindows.cs +++ b/src/Ryujinx.Memory/MemoryManagementWindows.cs @@ -102,7 +102,7 @@ namespace Ryujinx.Memory public static nint CreateSharedMemory(nint size, bool reserve) { - var prot = reserve ? FileMapProtection.SectionReserve : FileMapProtection.SectionCommit; + FileMapProtection prot = reserve ? FileMapProtection.SectionReserve : FileMapProtection.SectionCommit; nint handle = WindowsApi.CreateFileMapping( WindowsApi.InvalidHandleValue, diff --git a/src/Ryujinx.Memory/Range/MultiRange.cs b/src/Ryujinx.Memory/Range/MultiRange.cs index 093e21903..c3bb99f35 100644 --- a/src/Ryujinx.Memory/Range/MultiRange.cs +++ b/src/Ryujinx.Memory/Range/MultiRange.cs @@ -73,7 +73,7 @@ namespace Ryujinx.Memory.Range } else { - var ranges = new List(); + List ranges = []; foreach (MemoryRange range in _ranges) { diff --git a/src/Ryujinx.Memory/Range/MultiRangeList.cs b/src/Ryujinx.Memory/Range/MultiRangeList.cs index c3c6ae797..f5fd6164d 100644 --- a/src/Ryujinx.Memory/Range/MultiRangeList.cs +++ b/src/Ryujinx.Memory/Range/MultiRangeList.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Memory.Range for (int i = 0; i < range.Count; i++) { - var subrange = range.GetSubRange(i); + MemoryRange subrange = range.GetSubRange(i); if (MemoryRange.IsInvalid(ref subrange)) { @@ -54,7 +54,7 @@ namespace Ryujinx.Memory.Range for (int i = 0; i < range.Count; i++) { - var subrange = range.GetSubRange(i); + MemoryRange subrange = range.GetSubRange(i); if (MemoryRange.IsInvalid(ref subrange)) { @@ -97,7 +97,7 @@ namespace Ryujinx.Memory.Range for (int i = 0; i < range.Count; i++) { - var subrange = range.GetSubRange(i); + MemoryRange subrange = range.GetSubRange(i); if (MemoryRange.IsInvalid(ref subrange)) { @@ -172,8 +172,8 @@ namespace Ryujinx.Memory.Range private List GetList() { - var items = _items.AsList(); - var result = new List(); + List> items = _items.AsList(); + List result = new List(); foreach (RangeNode item in items) { diff --git a/src/Ryujinx.Memory/Range/NonOverlappingRangeList.cs b/src/Ryujinx.Memory/Range/NonOverlappingRangeList.cs index 511589176..894078aee 100644 --- a/src/Ryujinx.Memory/Range/NonOverlappingRangeList.cs +++ b/src/Ryujinx.Memory/Range/NonOverlappingRangeList.cs @@ -26,7 +26,7 @@ namespace Ryujinx.Memory.Range // For instance, while a virtual mapping could cover 0-2 in physical space, the space 0-1 may have already been reserved... // So we need to return both the split 0-1 and 1-2 ranges. - var results = new T[1]; + T[] results = new T[1]; int count = FindOverlapsNonOverlapping(address, size, ref results); if (count == 0) diff --git a/src/Ryujinx.Memory/Tracking/MemoryTracking.cs b/src/Ryujinx.Memory/Tracking/MemoryTracking.cs index 96cb2c5f5..d60a3bd8f 100644 --- a/src/Ryujinx.Memory/Tracking/MemoryTracking.cs +++ b/src/Ryujinx.Memory/Tracking/MemoryTracking.cs @@ -76,7 +76,7 @@ namespace Ryujinx.Memory.Tracking lock (TrackingLock) { - ref var overlaps = ref ThreadStaticArray.Get(); + ref VirtualRegion[] overlaps = ref ThreadStaticArray.Get(); for (int type = 0; type < 2; type++) { @@ -114,7 +114,7 @@ namespace Ryujinx.Memory.Tracking lock (TrackingLock) { - ref var overlaps = ref ThreadStaticArray.Get(); + ref VirtualRegion[] overlaps = ref ThreadStaticArray.Get(); for (int type = 0; type < 2; type++) { @@ -228,7 +228,7 @@ namespace Ryujinx.Memory.Tracking /// The memory tracking handle public RegionHandle BeginTracking(ulong address, ulong size, int id, RegionFlags flags = RegionFlags.None) { - var (paAddress, paSize) = PageAlign(address, size); + (ulong paAddress, ulong paSize) = PageAlign(address, size); lock (TrackingLock) { @@ -251,7 +251,7 @@ namespace Ryujinx.Memory.Tracking /// The memory tracking handle internal RegionHandle BeginTrackingBitmap(ulong address, ulong size, ConcurrentBitmap bitmap, int bit, int id, RegionFlags flags = RegionFlags.None) { - var (paAddress, paSize) = PageAlign(address, size); + (ulong paAddress, ulong paSize) = PageAlign(address, size); lock (TrackingLock) { @@ -296,7 +296,7 @@ namespace Ryujinx.Memory.Tracking lock (TrackingLock) { - ref var overlaps = ref ThreadStaticArray.Get(); + ref VirtualRegion[] overlaps = ref ThreadStaticArray.Get(); NonOverlappingRangeList regions = guest ? _guestVirtualRegions : _virtualRegions; diff --git a/src/Ryujinx.Memory/Tracking/MultiRegionHandle.cs b/src/Ryujinx.Memory/Tracking/MultiRegionHandle.cs index 6fdca69f5..a9b79ab3e 100644 --- a/src/Ryujinx.Memory/Tracking/MultiRegionHandle.cs +++ b/src/Ryujinx.Memory/Tracking/MultiRegionHandle.cs @@ -320,7 +320,7 @@ namespace Ryujinx.Memory.Tracking if (startHandle == lastHandle) { - var handle = _handles[startHandle]; + RegionHandle handle = _handles[startHandle]; if (_sequenceNumberBitmap.Set(startHandle)) { _uncheckedHandles--; @@ -410,7 +410,7 @@ namespace Ryujinx.Memory.Tracking { GC.SuppressFinalize(this); - foreach (var handle in _handles) + foreach (RegionHandle handle in _handles) { handle.Dispose(); } diff --git a/src/Ryujinx.Memory/Tracking/RegionHandle.cs b/src/Ryujinx.Memory/Tracking/RegionHandle.cs index 4e81a9723..b938c6ea9 100644 --- a/src/Ryujinx.Memory/Tracking/RegionHandle.cs +++ b/src/Ryujinx.Memory/Tracking/RegionHandle.cs @@ -199,7 +199,7 @@ namespace Ryujinx.Memory.Tracking _allRegions.AddRange(_regions); _allRegions.AddRange(_guestRegions); - foreach (var region in _allRegions) + foreach (VirtualRegion region in _allRegions) { region.Handles.Add(this); } @@ -217,8 +217,8 @@ namespace Ryujinx.Memory.Tracking { // Assumes the tracking lock is held, so nothing else can signal right now. - var oldBitmap = Bitmap; - var oldBit = DirtyBit; + ConcurrentBitmap oldBitmap = Bitmap; + int oldBit = DirtyBit; bitmap.Set(bit, Dirty); diff --git a/src/Ryujinx.Memory/Tracking/SmartMultiRegionHandle.cs b/src/Ryujinx.Memory/Tracking/SmartMultiRegionHandle.cs index 57129a182..1e44c0916 100644 --- a/src/Ryujinx.Memory/Tracking/SmartMultiRegionHandle.cs +++ b/src/Ryujinx.Memory/Tracking/SmartMultiRegionHandle.cs @@ -45,7 +45,7 @@ namespace Ryujinx.Memory.Tracking public void ForceDirty(ulong address, ulong size) { - foreach (var handle in _handles) + foreach (RegionHandle handle in _handles) { if (handle != null && handle.OverlapsWith(address, size)) { @@ -56,7 +56,7 @@ namespace Ryujinx.Memory.Tracking public void RegisterAction(RegionSignal action) { - foreach (var handle in _handles) + foreach (RegionHandle handle in _handles) { if (handle != null) { @@ -67,7 +67,7 @@ namespace Ryujinx.Memory.Tracking public void RegisterPreciseAction(PreciseRegionSignal action) { - foreach (var handle in _handles) + foreach (RegionHandle handle in _handles) { if (handle != null) { @@ -273,7 +273,7 @@ namespace Ryujinx.Memory.Tracking { GC.SuppressFinalize(this); - foreach (var handle in _handles) + foreach (RegionHandle handle in _handles) { handle?.Dispose(); } diff --git a/src/Ryujinx.Memory/Tracking/VirtualRegion.cs b/src/Ryujinx.Memory/Tracking/VirtualRegion.cs index 35e9c2d9b..7f5eb9b11 100644 --- a/src/Ryujinx.Memory/Tracking/VirtualRegion.cs +++ b/src/Ryujinx.Memory/Tracking/VirtualRegion.cs @@ -90,7 +90,7 @@ namespace Ryujinx.Memory.Tracking MemoryPermission result = MemoryPermission.ReadAndWrite; - foreach (var handle in Handles) + foreach (RegionHandle handle in Handles) { result &= handle.RequiredPermission; if (result == 0) @@ -143,7 +143,7 @@ namespace Ryujinx.Memory.Tracking // The new region inherits all of our parents. newRegion.Handles = new List(Handles); - foreach (var parent in Handles) + foreach (RegionHandle parent in Handles) { parent.AddChild(newRegion); } diff --git a/src/Ryujinx.Memory/VirtualMemoryManagerBase.cs b/src/Ryujinx.Memory/VirtualMemoryManagerBase.cs index f41072244..eb5d66829 100644 --- a/src/Ryujinx.Memory/VirtualMemoryManagerBase.cs +++ b/src/Ryujinx.Memory/VirtualMemoryManagerBase.cs @@ -234,7 +234,7 @@ namespace Ryujinx.Memory nuint pa = TranslateVirtualAddressChecked(va); - var target = GetPhysicalAddressSpan(pa, data.Length); + Span target = GetPhysicalAddressSpan(pa, data.Length); bool changed = !data.SequenceEqual(target); diff --git a/src/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs b/src/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs index 2a294bba9..f1bbf2f41 100644 --- a/src/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs +++ b/src/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs @@ -128,7 +128,7 @@ namespace Ryujinx.Memory.WindowsShared /// Memory block that owns the mapping public void MapView(nint sharedMemory, ulong srcOffset, nint location, nint size, MemoryBlock owner) { - ref var partialUnmapLock = ref GetPartialUnmapState().PartialUnmapLock; + ref NativeReaderWriterLock partialUnmapLock = ref GetPartialUnmapState().PartialUnmapLock; partialUnmapLock.AcquireReaderLock(); try @@ -155,7 +155,7 @@ namespace Ryujinx.Memory.WindowsShared { SplitForMap((ulong)location, (ulong)size, srcOffset); - var ptr = WindowsApi.MapViewOfFile3( + IntPtr ptr = WindowsApi.MapViewOfFile3( sharedMemory, WindowsApi.CurrentProcessHandle, location, @@ -187,7 +187,7 @@ namespace Ryujinx.Memory.WindowsShared { ulong endAddress = address + size; - var overlaps = new RangeNode[InitialOverlapsSize]; + RangeNode[] overlaps = new RangeNode[InitialOverlapsSize]; lock (_mappings) { @@ -196,7 +196,7 @@ namespace Ryujinx.Memory.WindowsShared Debug.Assert(count == 1); Debug.Assert(!IsMapped(overlaps[0].Value)); - var overlap = overlaps[0]; + RangeNode overlap = overlaps[0]; ulong overlapStart = overlap.Start; ulong overlapEnd = overlap.End; @@ -257,7 +257,7 @@ namespace Ryujinx.Memory.WindowsShared /// Memory block that owns the mapping public void UnmapView(nint sharedMemory, nint location, nint size, MemoryBlock owner) { - ref var partialUnmapLock = ref GetPartialUnmapState().PartialUnmapLock; + ref NativeReaderWriterLock partialUnmapLock = ref GetPartialUnmapState().PartialUnmapLock; partialUnmapLock.AcquireReaderLock(); try @@ -289,7 +289,7 @@ namespace Ryujinx.Memory.WindowsShared ulong unmapSize = (ulong)size; ulong endAddress = startAddress + unmapSize; - var overlaps = new RangeNode[InitialOverlapsSize]; + RangeNode[] overlaps = new RangeNode[InitialOverlapsSize]; int count; lock (_mappings) @@ -299,7 +299,7 @@ namespace Ryujinx.Memory.WindowsShared for (int index = 0; index < count; index++) { - var overlap = overlaps[index]; + RangeNode overlap = overlaps[index]; if (IsMapped(overlap.Value)) { @@ -319,8 +319,8 @@ namespace Ryujinx.Memory.WindowsShared // This is necessary because Windows does not support partial view unmaps. // That is, you can only fully unmap a view that was previously mapped, you can't just unmap a chunck of it. - ref var partialUnmapState = ref GetPartialUnmapState(); - ref var partialUnmapLock = ref partialUnmapState.PartialUnmapLock; + ref PartialUnmapState partialUnmapState = ref GetPartialUnmapState(); + ref NativeReaderWriterLock partialUnmapLock = ref partialUnmapState.PartialUnmapLock; partialUnmapLock.UpgradeToWriterLock(); try @@ -400,7 +400,7 @@ namespace Ryujinx.Memory.WindowsShared for (; node != null; node = successor) { successor = node.Successor; - var overlap = node; + RangeNode overlap = node; if (!IsMapped(overlap.Value)) { @@ -456,7 +456,7 @@ namespace Ryujinx.Memory.WindowsShared /// True if the reprotection was successful, false otherwise public bool ReprotectView(nint address, nint size, MemoryPermission permission) { - ref var partialUnmapLock = ref GetPartialUnmapState().PartialUnmapLock; + ref NativeReaderWriterLock partialUnmapLock = ref GetPartialUnmapState().PartialUnmapLock; partialUnmapLock.AcquireReaderLock(); try @@ -494,7 +494,7 @@ namespace Ryujinx.Memory.WindowsShared for (; node != null; node = successorNode) { successorNode = node.Successor; - var overlap = node; + RangeNode overlap = node; ulong mappedAddress = overlap.Start; ulong mappedSize = overlap.End - overlap.Start; @@ -604,7 +604,7 @@ namespace Ryujinx.Memory.WindowsShared for (; node != null; node = successorNode) { successorNode = node.Successor; - var protection = node; + RangeNode protection = node; ulong protAddress = protection.Start; ulong protEndAddress = protection.End; @@ -664,7 +664,7 @@ namespace Ryujinx.Memory.WindowsShared for (; node != null; node = successorNode) { successorNode = node.Successor; - var protection = node; + RangeNode protection = node; ulong protAddress = protection.Start; ulong protEndAddress = protection.End; @@ -698,7 +698,7 @@ namespace Ryujinx.Memory.WindowsShared private void RestoreRangeProtection(ulong address, ulong size) { ulong endAddress = address + size; - var overlaps = new RangeNode[InitialOverlapsSize]; + RangeNode[] overlaps = new RangeNode[InitialOverlapsSize]; int count; lock (_protections) @@ -708,7 +708,7 @@ namespace Ryujinx.Memory.WindowsShared for (int index = 0; index < count; index++) { - var protection = overlaps[index]; + RangeNode protection = overlaps[index]; // If protection is R/W we don't need to reprotect as views are initially mapped as R/W. if (protection.Value == MemoryPermission.ReadAndWrite) -- 2.47.1 From e6b393e4208166dc04c1ccbcb549f29c7dbc8b6f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:11:46 -0600 Subject: [PATCH 431/722] misc: chore: Use explicit types in Generator projects --- .../IpcServiceGenerator.cs | 20 ++++++------- .../Hipc/HipcGenerator.cs | 28 +++++++++---------- .../Hipc/HipcSyntaxReceiver.cs | 6 ++-- .../SyscallGenerator.cs | 8 +++--- .../SyscallSyntaxReceiver.cs | 2 +- .../LocaleGenerator.cs | 7 +++-- src/Spv.Generator/Instruction.cs | 4 +-- src/Spv.Generator/InstructionOperands.cs | 6 ++-- src/Spv.Generator/Module.cs | 8 +++--- 9 files changed, 45 insertions(+), 44 deletions(-) diff --git a/src/Ryujinx.HLE.Generators/IpcServiceGenerator.cs b/src/Ryujinx.HLE.Generators/IpcServiceGenerator.cs index 5cac4d13a..4de100cf8 100644 --- a/src/Ryujinx.HLE.Generators/IpcServiceGenerator.cs +++ b/src/Ryujinx.HLE.Generators/IpcServiceGenerator.cs @@ -10,8 +10,8 @@ namespace Ryujinx.HLE.Generators { public void Execute(GeneratorExecutionContext context) { - var syntaxReceiver = (ServiceSyntaxReceiver)context.SyntaxReceiver; - CodeGenerator generator = new CodeGenerator(); + ServiceSyntaxReceiver syntaxReceiver = (ServiceSyntaxReceiver)context.SyntaxReceiver; + CodeGenerator generator = new(); generator.AppendLine("#nullable enable"); generator.AppendLine("using System;"); @@ -19,14 +19,14 @@ namespace Ryujinx.HLE.Generators generator.EnterScope($"partial class IUserInterface"); generator.EnterScope($"public IpcService? GetServiceInstance(Type type, ServiceCtx context, object? parameter = null)"); - foreach (var className in syntaxReceiver.Types) + foreach (ClassDeclarationSyntax className in syntaxReceiver.Types) { if (className.Modifiers.Any(SyntaxKind.AbstractKeyword) || className.Modifiers.Any(SyntaxKind.PrivateKeyword) || !className.AttributeLists.Any(x => x.Attributes.Any(y => y.ToString().StartsWith("Service")))) continue; - var name = GetFullName(className, context).Replace("global::", string.Empty); + string name = GetFullName(className, context).Replace("global::", string.Empty); if (!name.StartsWith("Ryujinx.HLE.HOS.Services")) continue; - var constructors = className.ChildNodes().Where(x => x.IsKind(SyntaxKind.ConstructorDeclaration)).Select(y => y as ConstructorDeclarationSyntax).ToArray(); + ConstructorDeclarationSyntax[] constructors = className.ChildNodes().Where(x => x.IsKind(SyntaxKind.ConstructorDeclaration)).Select(y => y as ConstructorDeclarationSyntax).ToArray(); if (!constructors.Any(x => x.ParameterList.Parameters.Count >= 1)) continue; @@ -36,10 +36,10 @@ namespace Ryujinx.HLE.Generators generator.EnterScope($"if (type == typeof({GetFullName(className, context)}))"); if (constructors.Any(x => x.ParameterList.Parameters.Count == 2)) { - var type = constructors.Where(x => x.ParameterList.Parameters.Count == 2).FirstOrDefault().ParameterList.Parameters[1].Type; - var model = context.Compilation.GetSemanticModel(type.SyntaxTree); - var typeSymbol = model.GetSymbolInfo(type).Symbol as INamedTypeSymbol; - var fullName = typeSymbol.ToString(); + TypeSyntax type = constructors.Where(x => x.ParameterList.Parameters.Count == 2).FirstOrDefault().ParameterList.Parameters[1].Type; + SemanticModel model = context.Compilation.GetSemanticModel(type.SyntaxTree); + INamedTypeSymbol typeSymbol = model.GetSymbolInfo(type).Symbol as INamedTypeSymbol; + string fullName = typeSymbol.ToString(); generator.EnterScope("if (parameter != null)"); generator.AppendLine($"return new {GetFullName(className, context)}(context, ({fullName})parameter);"); generator.LeaveScope(); @@ -65,7 +65,7 @@ namespace Ryujinx.HLE.Generators private string GetFullName(ClassDeclarationSyntax syntaxNode, GeneratorExecutionContext context) { - var typeSymbol = context.Compilation.GetSemanticModel(syntaxNode.SyntaxTree).GetDeclaredSymbol(syntaxNode); + INamedTypeSymbol typeSymbol = context.Compilation.GetSemanticModel(syntaxNode.SyntaxTree).GetDeclaredSymbol(syntaxNode); return typeSymbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat); } diff --git a/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs b/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs index d1be8298d..e66a3efa9 100644 --- a/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs +++ b/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs @@ -61,7 +61,7 @@ namespace Ryujinx.Horizon.Generators.Hipc { HipcSyntaxReceiver syntaxReceiver = (HipcSyntaxReceiver)context.SyntaxReceiver; - foreach (var commandInterface in syntaxReceiver.CommandInterfaces) + foreach (CommandInterface commandInterface in syntaxReceiver.CommandInterfaces) { if (!NeedsIServiceObjectImplementation(context.Compilation, commandInterface.ClassDeclarationSyntax)) { @@ -86,7 +86,7 @@ namespace Ryujinx.Horizon.Generators.Hipc GenerateMethodTable(generator, context.Compilation, commandInterface); - foreach (var method in commandInterface.CommandImplementations) + foreach (MethodDeclarationSyntax method in commandInterface.CommandImplementations) { generator.AppendLine(); @@ -127,9 +127,9 @@ namespace Ryujinx.Horizon.Generators.Hipc { generator.EnterScope($"return FrozenDictionary.ToFrozenDictionary(new []"); - foreach (var method in commandInterface.CommandImplementations) + foreach (MethodDeclarationSyntax method in commandInterface.CommandImplementations) { - foreach (var commandId in GetAttributeArguments(compilation, method, TypeCommandAttribute, 0)) + foreach (string commandId in GetAttributeArguments(compilation, method, TypeCommandAttribute, 0)) { string[] args = new string[method.ParameterList.Parameters.Count]; @@ -141,7 +141,7 @@ namespace Ryujinx.Horizon.Generators.Hipc { int index = 0; - foreach (var parameter in method.ParameterList.Parameters) + foreach (ParameterSyntax parameter in method.ParameterList.Parameters) { string canonicalTypeName = GetCanonicalTypeNameWithGenericArguments(compilation, parameter.Type); CommandArgType argType = GetCommandArgType(compilation, parameter); @@ -191,7 +191,7 @@ namespace Ryujinx.Horizon.Generators.Hipc { ISymbol symbol = compilation.GetSemanticModel(syntaxNode.SyntaxTree).GetDeclaredSymbol(syntaxNode); - foreach (var attribute in symbol.GetAttributes()) + foreach (AttributeData attribute in symbol.GetAttributes()) { if (attribute.AttributeClass.ToDisplayString() == attributeName && (uint)argIndex < (uint)attribute.ConstructorArguments.Length) { @@ -211,7 +211,7 @@ namespace Ryujinx.Horizon.Generators.Hipc int outObjectsCount = 0; int buffersCount = 0; - foreach (var parameter in method.ParameterList.Parameters) + foreach (ParameterSyntax parameter in method.ParameterList.Parameters) { if (IsObject(compilation, parameter)) { @@ -285,7 +285,7 @@ namespace Ryujinx.Horizon.Generators.Hipc int inMoveHandleIndex = 0; int inObjectIndex = 0; - foreach (var parameter in method.ParameterList.Parameters) + foreach (ParameterSyntax parameter in method.ParameterList.Parameters) { string name = parameter.Identifier.Text; string argName = GetPrefixedArgName(name); @@ -555,11 +555,11 @@ namespace Ryujinx.Horizon.Generators.Hipc { ISymbol symbol = compilation.GetSemanticModel(syntaxNode.SyntaxTree).GetTypeInfo(syntaxNode).Type; - foreach (var attribute in symbol.GetAttributes()) + foreach (AttributeData attribute in symbol.GetAttributes()) { if (attribute.AttributeClass.ToDisplayString() == attributeName) { - foreach (var kv in attribute.NamedArguments) + foreach (KeyValuePair kv in attribute.NamedArguments) { if (kv.Key == argName) { @@ -764,9 +764,9 @@ namespace Ryujinx.Horizon.Generators.Hipc private static bool HasAttribute(Compilation compilation, ParameterSyntax parameterSyntax, string fullAttributeName) { - foreach (var attributeList in parameterSyntax.AttributeLists) + foreach (AttributeListSyntax attributeList in parameterSyntax.AttributeLists) { - foreach (var attribute in attributeList.Attributes) + foreach (AttributeSyntax attribute in attributeList.Attributes) { if (GetCanonicalTypeName(compilation, attribute) == fullAttributeName) { @@ -781,8 +781,8 @@ namespace Ryujinx.Horizon.Generators.Hipc private static bool NeedsIServiceObjectImplementation(Compilation compilation, ClassDeclarationSyntax classDeclarationSyntax) { ITypeSymbol type = compilation.GetSemanticModel(classDeclarationSyntax.SyntaxTree).GetDeclaredSymbol(classDeclarationSyntax); - var serviceObjectInterface = type.AllInterfaces.FirstOrDefault(x => x.ToDisplayString() == TypeIServiceObject); - var interfaceMember = serviceObjectInterface?.GetMembers().FirstOrDefault(x => x.Name == "GetCommandHandlers"); + INamedTypeSymbol serviceObjectInterface = type.AllInterfaces.FirstOrDefault(x => x.ToDisplayString() == TypeIServiceObject); + ISymbol interfaceMember = serviceObjectInterface?.GetMembers().FirstOrDefault(x => x.Name == "GetCommandHandlers"); // Return true only if the class implements IServiceObject but does not actually implement the method // that the interface defines, since this is the only case we want to handle, if the method already exists diff --git a/src/Ryujinx.Horizon.Generators/Hipc/HipcSyntaxReceiver.cs b/src/Ryujinx.Horizon.Generators/Hipc/HipcSyntaxReceiver.cs index 9b3421076..5eced63ec 100644 --- a/src/Ryujinx.Horizon.Generators/Hipc/HipcSyntaxReceiver.cs +++ b/src/Ryujinx.Horizon.Generators/Hipc/HipcSyntaxReceiver.cs @@ -24,9 +24,9 @@ namespace Ryujinx.Horizon.Generators.Hipc return; } - CommandInterface commandInterface = new CommandInterface(classDeclaration); + CommandInterface commandInterface = new(classDeclaration); - foreach (var memberDeclaration in classDeclaration.Members) + foreach (MemberDeclarationSyntax memberDeclaration in classDeclaration.Members) { if (memberDeclaration is MethodDeclarationSyntax methodDeclaration) { @@ -44,7 +44,7 @@ namespace Ryujinx.Horizon.Generators.Hipc if (methodDeclaration.AttributeLists.Count != 0) { - foreach (var attributeList in methodDeclaration.AttributeLists) + foreach (AttributeListSyntax attributeList in methodDeclaration.AttributeLists) { if (attributeList.Attributes.Any(x => x.Name.ToString().Contains(attributeName))) { diff --git a/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs b/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs index 06b98e09d..91eb08c77 100644 --- a/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs +++ b/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs @@ -147,7 +147,7 @@ namespace Ryujinx.Horizon.Kernel.Generators List syscalls = new List(); - foreach (var method in syntaxReceiver.SvcImplementations) + foreach (MethodDeclarationSyntax method in syntaxReceiver.SvcImplementations) { GenerateMethod32(generator, context.Compilation, method); GenerateMethod64(generator, context.Compilation, method); @@ -206,7 +206,7 @@ namespace Ryujinx.Horizon.Kernel.Generators List logInArgs = new List(); List logOutArgs = new List(); - foreach (var methodParameter in method.ParameterList.Parameters) + foreach (ParameterSyntax methodParameter in method.ParameterList.Parameters) { string name = methodParameter.Identifier.Text; string argName = GetPrefixedArgName(name); @@ -325,7 +325,7 @@ namespace Ryujinx.Horizon.Kernel.Generators List logInArgs = new List(); List logOutArgs = new List(); - foreach (var methodParameter in method.ParameterList.Parameters) + foreach (ParameterSyntax methodParameter in method.ParameterList.Parameters) { string name = methodParameter.Identifier.Text; string argName = GetPrefixedArgName(name); @@ -468,7 +468,7 @@ namespace Ryujinx.Horizon.Kernel.Generators generator.EnterScope($"public static void Dispatch{suffix}(Syscall syscall, {TypeExecutionContext} context, int id)"); generator.EnterScope("switch (id)"); - foreach (var syscall in syscalls) + foreach (SyscallIdAndName syscall in syscalls) { generator.AppendLine($"case {syscall.Id}:"); generator.IncreaseIndentation(); diff --git a/src/Ryujinx.Horizon.Kernel.Generators/SyscallSyntaxReceiver.cs b/src/Ryujinx.Horizon.Kernel.Generators/SyscallSyntaxReceiver.cs index 1542fed6a..76200713d 100644 --- a/src/Ryujinx.Horizon.Kernel.Generators/SyscallSyntaxReceiver.cs +++ b/src/Ryujinx.Horizon.Kernel.Generators/SyscallSyntaxReceiver.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Horizon.Kernel.Generators return; } - foreach (var memberDeclaration in classDeclaration.Members) + foreach (MemberDeclarationSyntax memberDeclaration in classDeclaration.Members) { if (memberDeclaration is MethodDeclarationSyntax methodDeclaration) { diff --git a/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs b/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs index 2ba0b60a3..a3d16c660 100644 --- a/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs +++ b/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs @@ -1,4 +1,5 @@ using Microsoft.CodeAnalysis; +using System.Collections.Generic; using System.Linq; using System.Text; @@ -9,19 +10,19 @@ namespace Ryujinx.UI.LocaleGenerator { public void Initialize(IncrementalGeneratorInitializationContext context) { - var localeFile = context.AdditionalTextsProvider.Where(static x => x.Path.EndsWith("locales.json")); + IncrementalValuesProvider localeFile = context.AdditionalTextsProvider.Where(static x => x.Path.EndsWith("locales.json")); IncrementalValuesProvider contents = localeFile.Select((text, cancellationToken) => text.GetText(cancellationToken)!.ToString()); context.RegisterSourceOutput(contents, (spc, content) => { - var lines = content.Split('\n').Where(x => x.Trim().StartsWith("\"ID\":")).Select(x => x.Split(':')[1].Trim().Replace("\"", string.Empty).Replace(",", string.Empty)); + IEnumerable lines = content.Split('\n').Where(x => x.Trim().StartsWith("\"ID\":")).Select(x => x.Split(':')[1].Trim().Replace("\"", string.Empty).Replace(",", string.Empty)); StringBuilder enumSourceBuilder = new(); enumSourceBuilder.AppendLine("namespace Ryujinx.Ava.Common.Locale;"); enumSourceBuilder.AppendLine("public enum LocaleKeys"); enumSourceBuilder.AppendLine("{"); - foreach (var line in lines) + foreach (string? line in lines) { enumSourceBuilder.AppendLine($" {line},"); } diff --git a/src/Spv.Generator/Instruction.cs b/src/Spv.Generator/Instruction.cs index 741b30d6d..a19677a93 100644 --- a/src/Spv.Generator/Instruction.cs +++ b/src/Spv.Generator/Instruction.cs @@ -239,8 +239,8 @@ namespace Spv.Generator public override string ToString() { - var labels = _operandLabels.TryGetValue(Opcode, out var opLabels) ? opLabels : Array.Empty(); - var result = _resultType == null ? string.Empty : $"{_resultType} "; + string[] labels = _operandLabels.TryGetValue(Opcode, out string[] opLabels) ? opLabels : Array.Empty(); + string result = _resultType == null ? string.Empty : $"{_resultType} "; return $"{result}{Opcode}{_operands.ToString(labels)}"; } } diff --git a/src/Spv.Generator/InstructionOperands.cs b/src/Spv.Generator/InstructionOperands.cs index de74f1127..06feb300f 100644 --- a/src/Spv.Generator/InstructionOperands.cs +++ b/src/Spv.Generator/InstructionOperands.cs @@ -63,9 +63,9 @@ namespace Spv.Generator public readonly string ToString(string[] labels) { - var labeledParams = AllOperands.Zip(labels, (op, label) => $"{label}: {op}"); - var unlabeledParams = AllOperands.Skip(labels.Length).Select(op => op.ToString()); - var paramsToPrint = labeledParams.Concat(unlabeledParams); + IEnumerable labeledParams = AllOperands.Zip(labels, (op, label) => $"{label}: {op}"); + IEnumerable unlabeledParams = AllOperands.Skip(labels.Length).Select(op => op.ToString()); + IEnumerable paramsToPrint = labeledParams.Concat(unlabeledParams); return $"({string.Join(", ", paramsToPrint)})"; } } diff --git a/src/Spv.Generator/Module.cs b/src/Spv.Generator/Module.cs index fdcd62752..5945d9b6d 100644 --- a/src/Spv.Generator/Module.cs +++ b/src/Spv.Generator/Module.cs @@ -85,7 +85,7 @@ namespace Spv.Generator public Instruction NewInstruction(Op opcode, uint id = Instruction.InvalidId, Instruction resultType = null) { - var result = _instPool.Allocate(); + Instruction result = _instPool.Allocate(); result.Set(opcode, id, resultType); return result; @@ -93,7 +93,7 @@ namespace Spv.Generator public Instruction AddExtInstImport(string import) { - var key = new DeterministicStringKey(import); + DeterministicStringKey key = new DeterministicStringKey(import); if (_extInstImports.TryGetValue(key, out Instruction extInstImport)) { @@ -113,7 +113,7 @@ namespace Spv.Generator private void AddTypeDeclaration(Instruction instruction, bool forceIdAllocation) { - var key = new TypeDeclarationKey(instruction); + TypeDeclarationKey key = new TypeDeclarationKey(instruction); if (!forceIdAllocation) { @@ -214,7 +214,7 @@ namespace Spv.Generator constant.Opcode == Op.OpConstantNull || constant.Opcode == Op.OpConstantComposite); - var key = new ConstantKey(constant); + ConstantKey key = new ConstantKey(constant); if (_constants.TryGetValue(key, out Instruction global)) { -- 2.47.1 From 2d1a4c3ce5c0d0b2a820a62064ff1fcfc30060eb Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:12:17 -0600 Subject: [PATCH 432/722] misc: chore: Use explicit types in Vulkan project --- src/Ryujinx.Graphics.Vulkan/Auto.cs | 2 +- .../BackgroundResources.cs | 2 +- src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs | 4 +- src/Ryujinx.Graphics.Vulkan/BitMapStruct.cs | 8 +- src/Ryujinx.Graphics.Vulkan/BufferHolder.cs | 48 +++--- src/Ryujinx.Graphics.Vulkan/BufferManager.cs | 84 ++++----- .../BufferMirrorRangeList.cs | 20 +-- src/Ryujinx.Graphics.Vulkan/BufferState.cs | 3 +- .../CommandBufferPool.cs | 30 ++-- .../DescriptorSetCollection.cs | 14 +- .../DescriptorSetManager.cs | 14 +- .../DescriptorSetTemplate.cs | 4 +- .../DescriptorSetUpdater.cs | 63 +++---- .../Effects/AreaScalingFilter.cs | 6 +- .../Effects/FsrScalingFilter.cs | 16 +- .../Effects/FxaaPostProcessingEffect.cs | 10 +- .../Effects/SmaaPostProcessingEffect.cs | 29 ++-- src/Ryujinx.Graphics.Vulkan/FenceHolder.cs | 2 +- .../FormatCapabilities.cs | 20 +-- .../FramebufferParams.cs | 19 ++- src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs | 14 +- src/Ryujinx.Graphics.Vulkan/HelperShader.cs | 161 +++++++++--------- .../HostMemoryAllocator.cs | 14 +- src/Ryujinx.Graphics.Vulkan/ImageArray.cs | 4 +- .../IndexBufferState.cs | 2 +- .../MemoryAllocator.cs | 6 +- .../MemoryAllocatorBlockList.cs | 14 +- .../MoltenVK/MVKInitialization.cs | 2 +- .../MultiFenceHolder.cs | 4 +- .../PersistentFlushBuffer.cs | 26 +-- src/Ryujinx.Graphics.Vulkan/PipelineBase.cs | 115 +++++++------ .../PipelineConverter.cs | 22 +-- src/Ryujinx.Graphics.Vulkan/PipelineFull.cs | 10 +- .../PipelineLayoutCache.cs | 6 +- .../PipelineLayoutCacheEntry.cs | 32 ++-- .../PipelineLayoutFactory.cs | 4 +- src/Ryujinx.Graphics.Vulkan/PipelineState.cs | 38 ++--- .../Queries/BufferedQuery.cs | 7 +- .../Queries/Counters.cs | 6 +- .../RenderPassCacheKey.cs | 2 +- .../RenderPassHolder.cs | 20 +-- src/Ryujinx.Graphics.Vulkan/ResourceArray.cs | 2 +- .../ResourceLayoutBuilder.cs | 4 +- src/Ryujinx.Graphics.Vulkan/SamplerHolder.cs | 8 +- src/Ryujinx.Graphics.Vulkan/Shader.cs | 7 +- .../ShaderCollection.cs | 22 +-- src/Ryujinx.Graphics.Vulkan/SpecInfo.cs | 4 +- src/Ryujinx.Graphics.Vulkan/StagingBuffer.cs | 14 +- src/Ryujinx.Graphics.Vulkan/TextureArray.cs | 4 +- src/Ryujinx.Graphics.Vulkan/TextureCopy.cs | 58 +++---- src/Ryujinx.Graphics.Vulkan/TextureStorage.cs | 48 +++--- src/Ryujinx.Graphics.Vulkan/TextureView.cs | 120 ++++++------- .../VertexBufferState.cs | 7 +- .../VulkanDebugMessenger.cs | 8 +- .../VulkanInitialization.cs | 49 +++--- .../VulkanPhysicalDevice.cs | 2 +- src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | 29 ++-- src/Ryujinx.Graphics.Vulkan/Window.cs | 56 +++--- 58 files changed, 682 insertions(+), 667 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/Auto.cs b/src/Ryujinx.Graphics.Vulkan/Auto.cs index 606c088e9..7ce309a5d 100644 --- a/src/Ryujinx.Graphics.Vulkan/Auto.cs +++ b/src/Ryujinx.Graphics.Vulkan/Auto.cs @@ -62,7 +62,7 @@ namespace Ryujinx.Graphics.Vulkan public T GetMirrorable(CommandBufferScoped cbs, ref int offset, int size, out bool mirrored) { - var mirror = _mirrorable.GetMirrorable(cbs, ref offset, size, out mirrored); + Auto mirror = _mirrorable.GetMirrorable(cbs, ref offset, size, out mirrored); mirror._waitable?.AddBufferUse(cbs.CommandBufferIndex, offset, size, false); return mirror.Get(cbs); } diff --git a/src/Ryujinx.Graphics.Vulkan/BackgroundResources.cs b/src/Ryujinx.Graphics.Vulkan/BackgroundResources.cs index e4b68fa40..5260c5d8b 100644 --- a/src/Ryujinx.Graphics.Vulkan/BackgroundResources.cs +++ b/src/Ryujinx.Graphics.Vulkan/BackgroundResources.cs @@ -110,7 +110,7 @@ namespace Ryujinx.Graphics.Vulkan { lock (_resources) { - foreach (var resource in _resources.Values) + foreach (BackgroundResource resource in _resources.Values) { resource.Dispose(); } diff --git a/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs b/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs index bcfb3dbfe..38517bfd9 100644 --- a/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs +++ b/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs @@ -350,7 +350,7 @@ namespace Ryujinx.Graphics.Vulkan { // Generic pipeline memory barriers will work for desktop GPUs. // They do require a few more access flags on the subpass dependency, though. - foreach (var barrier in _imageBarriers) + foreach (BarrierWithStageFlags barrier in _imageBarriers) { _memoryBarriers.Add(new BarrierWithStageFlags( barrier.Flags, @@ -370,7 +370,7 @@ namespace Ryujinx.Graphics.Vulkan { PipelineStageFlags allFlags = PipelineStageFlags.None; - foreach (var barrier in _memoryBarriers) + foreach (BarrierWithStageFlags barrier in _memoryBarriers) { allFlags |= barrier.Flags.Dest; } diff --git a/src/Ryujinx.Graphics.Vulkan/BitMapStruct.cs b/src/Ryujinx.Graphics.Vulkan/BitMapStruct.cs index 43107427c..7af8c42f6 100644 --- a/src/Ryujinx.Graphics.Vulkan/BitMapStruct.cs +++ b/src/Ryujinx.Graphics.Vulkan/BitMapStruct.cs @@ -220,11 +220,11 @@ namespace Ryujinx.Graphics.Vulkan public BitMapStruct Union(BitMapStruct other) { - var result = new BitMapStruct(); + BitMapStruct result = new BitMapStruct(); - ref var masks = ref _masks; - ref var otherMasks = ref other._masks; - ref var newMasks = ref result._masks; + ref T masks = ref _masks; + ref T otherMasks = ref other._masks; + ref T newMasks = ref result._masks; for (int i = 0; i < masks.Length; i++) { diff --git a/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs b/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs index 6dce6abb5..df5b96637 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs @@ -113,7 +113,7 @@ namespace Ryujinx.Graphics.Vulkan public unsafe Auto CreateView(VkFormat format, int offset, int size, Action invalidateView) { - var bufferViewCreateInfo = new BufferViewCreateInfo + BufferViewCreateInfo bufferViewCreateInfo = new BufferViewCreateInfo { SType = StructureType.BufferViewCreateInfo, Buffer = new VkBuffer(_bufferHandle), @@ -122,7 +122,7 @@ namespace Ryujinx.Graphics.Vulkan Range = (uint)size, }; - _gd.Api.CreateBufferView(_device, in bufferViewCreateInfo, null, out var bufferView).ThrowOnError(); + _gd.Api.CreateBufferView(_device, in bufferViewCreateInfo, null, out BufferView bufferView).ThrowOnError(); return new Auto(new DisposableBufferView(_gd.Api, _device, bufferView), this, _waitable, _buffer); } @@ -183,7 +183,7 @@ namespace Ryujinx.Graphics.Vulkan return false; } - var key = ToMirrorKey(offset, size); + ulong key = ToMirrorKey(offset, size); if (_mirrors.TryGetValue(key, out StagingBufferReserved reserved)) { @@ -205,14 +205,14 @@ namespace Ryujinx.Graphics.Vulkan // Build data for the new mirror. - var baseData = new Span((void*)(_map + offset), size); - var modData = _pendingData.AsSpan(offset, size); + Span baseData = new Span((void*)(_map + offset), size); + Span modData = _pendingData.AsSpan(offset, size); StagingBufferReserved? newMirror = _gd.BufferManager.StagingBuffer.TryReserveData(cbs, size); if (newMirror != null) { - var mirror = newMirror.Value; + StagingBufferReserved mirror = newMirror.Value; _pendingDataRanges.FillData(baseData, modData, offset, new Span((void*)(mirror.Buffer._map + mirror.Offset), size)); if (_mirrors.Count == 0) @@ -319,13 +319,13 @@ namespace Ryujinx.Graphics.Vulkan private void UploadPendingData(CommandBufferScoped cbs, int offset, int size) { - var ranges = _pendingDataRanges.FindOverlaps(offset, size); + List ranges = _pendingDataRanges.FindOverlaps(offset, size); if (ranges != null) { _pendingDataRanges.Remove(offset, size); - foreach (var range in ranges) + foreach (BufferMirrorRangeList.Range range in ranges) { int rangeOffset = Math.Max(offset, range.Offset); int rangeSize = Math.Min(offset + size, range.End) - rangeOffset; @@ -366,7 +366,7 @@ namespace Ryujinx.Graphics.Vulkan public BufferHandle GetHandle() { - var handle = _bufferHandle; + ulong handle = _bufferHandle; return Unsafe.As(ref handle); } @@ -403,7 +403,7 @@ namespace Ryujinx.Graphics.Vulkan if (_flushFence != null) { - var fence = _flushFence; + FenceHolder fence = _flushFence; Interlocked.Increment(ref _flushWaiting); // Don't wait in the lock. @@ -481,7 +481,7 @@ namespace Ryujinx.Graphics.Vulkan public bool RemoveOverlappingMirrors(int offset, int size) { List toRemove = null; - foreach (var key in _mirrors.Keys) + foreach (ulong key in _mirrors.Keys) { (int keyOffset, int keySize) = FromMirrorKey(key); if (!(offset + size <= keyOffset || offset >= keyOffset + keySize)) @@ -494,7 +494,7 @@ namespace Ryujinx.Graphics.Vulkan if (toRemove != null) { - foreach (var key in toRemove) + foreach (ulong key in toRemove) { _mirrors.Remove(key); } @@ -606,8 +606,8 @@ namespace Ryujinx.Graphics.Vulkan BufferHolder srcHolder = _gd.BufferManager.Create(_gd, dataSize, baseType: BufferAllocationType.HostMapped); srcHolder.SetDataUnchecked(0, data); - var srcBuffer = srcHolder.GetBuffer(); - var dstBuffer = this.GetBuffer(cbs.Value.CommandBuffer, true); + Auto srcBuffer = srcHolder.GetBuffer(); + Auto dstBuffer = this.GetBuffer(cbs.Value.CommandBuffer, true); Copy(_gd, cbs.Value, srcBuffer, dstBuffer, 0, offset, dataSize); @@ -662,7 +662,7 @@ namespace Ryujinx.Graphics.Vulkan endRenderPass?.Invoke(); - var dstBuffer = GetBuffer(cbs.CommandBuffer, dstOffset, data.Length, true).Get(cbs, dstOffset, data.Length, true).Value; + VkBuffer dstBuffer = GetBuffer(cbs.CommandBuffer, dstOffset, data.Length, true).Get(cbs, dstOffset, data.Length, true).Value; InsertBufferBarrier( _gd, @@ -709,8 +709,8 @@ namespace Ryujinx.Graphics.Vulkan int size, bool registerSrcUsage = true) { - var srcBuffer = registerSrcUsage ? src.Get(cbs, srcOffset, size).Value : src.GetUnsafe().Value; - var dstBuffer = dst.Get(cbs, dstOffset, size, true).Value; + VkBuffer srcBuffer = registerSrcUsage ? src.Get(cbs, srcOffset, size).Value : src.GetUnsafe().Value; + VkBuffer dstBuffer = dst.Get(cbs, dstOffset, size, true).Value; InsertBufferBarrier( gd, @@ -723,7 +723,7 @@ namespace Ryujinx.Graphics.Vulkan dstOffset, size); - var region = new BufferCopy((ulong)srcOffset, (ulong)dstOffset, (ulong)size); + BufferCopy region = new BufferCopy((ulong)srcOffset, (ulong)dstOffset, (ulong)size); gd.Api.CmdCopyBuffer(cbs.CommandBuffer, srcBuffer, dstBuffer, 1, ®ion); @@ -804,9 +804,9 @@ namespace Ryujinx.Graphics.Vulkan return null; } - var key = new I8ToI16CacheKey(_gd); + I8ToI16CacheKey key = new I8ToI16CacheKey(_gd); - if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out var holder)) + if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder)) { holder = _gd.BufferManager.Create(_gd, (size * 2 + 3) & ~3, baseType: BufferAllocationType.DeviceLocal); @@ -828,9 +828,9 @@ namespace Ryujinx.Graphics.Vulkan return null; } - var key = new AlignedVertexBufferCacheKey(_gd, stride, alignment); + AlignedVertexBufferCacheKey key = new AlignedVertexBufferCacheKey(_gd, stride, alignment); - if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out var holder)) + if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder)) { int alignedStride = (stride + (alignment - 1)) & -alignment; @@ -854,9 +854,9 @@ namespace Ryujinx.Graphics.Vulkan return null; } - var key = new TopologyConversionCacheKey(_gd, pattern, indexSize); + TopologyConversionCacheKey key = new TopologyConversionCacheKey(_gd, pattern, indexSize); - if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out var holder)) + if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder)) { // The destination index size is always I32. diff --git a/src/Ryujinx.Graphics.Vulkan/BufferManager.cs b/src/Ryujinx.Graphics.Vulkan/BufferManager.cs index 7523913ec..e2c33ce65 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferManager.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferManager.cs @@ -96,20 +96,20 @@ namespace Ryujinx.Graphics.Vulkan public unsafe BufferHandle CreateHostImported(VulkanRenderer gd, nint pointer, int size) { - var usage = HostImportedBufferUsageFlags; + BufferUsageFlags usage = HostImportedBufferUsageFlags; if (gd.Capabilities.SupportsIndirectParameters) { usage |= BufferUsageFlags.IndirectBufferBit; } - var externalMemoryBuffer = new ExternalMemoryBufferCreateInfo + ExternalMemoryBufferCreateInfo externalMemoryBuffer = new ExternalMemoryBufferCreateInfo { SType = StructureType.ExternalMemoryBufferCreateInfo, HandleTypes = ExternalMemoryHandleTypeFlags.HostAllocationBitExt, }; - var bufferCreateInfo = new BufferCreateInfo + BufferCreateInfo bufferCreateInfo = new BufferCreateInfo { SType = StructureType.BufferCreateInfo, Size = (ulong)size, @@ -118,13 +118,13 @@ namespace Ryujinx.Graphics.Vulkan PNext = &externalMemoryBuffer, }; - gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out var buffer).ThrowOnError(); + gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer buffer).ThrowOnError(); (Auto allocation, ulong offset) = gd.HostMemoryAllocator.GetExistingAllocation(pointer, (ulong)size); gd.Api.BindBufferMemory(_device, buffer, allocation.GetUnsafe().Memory, allocation.GetUnsafe().Offset + offset); - var holder = new BufferHolder(gd, _device, buffer, allocation, size, BufferAllocationType.HostMapped, BufferAllocationType.HostMapped, (int)offset); + BufferHolder holder = new BufferHolder(gd, _device, buffer, allocation, size, BufferAllocationType.HostMapped, BufferAllocationType.HostMapped, (int)offset); BufferCount++; @@ -135,7 +135,7 @@ namespace Ryujinx.Graphics.Vulkan public unsafe BufferHandle CreateSparse(VulkanRenderer gd, ReadOnlySpan storageBuffers) { - var usage = DefaultBufferUsageFlags; + BufferUsageFlags usage = DefaultBufferUsageFlags; if (gd.Capabilities.SupportsIndirectParameters) { @@ -149,7 +149,7 @@ namespace Ryujinx.Graphics.Vulkan size += (ulong)range.Size; } - var bufferCreateInfo = new BufferCreateInfo() + BufferCreateInfo bufferCreateInfo = new BufferCreateInfo() { SType = StructureType.BufferCreateInfo, Size = size, @@ -158,10 +158,10 @@ namespace Ryujinx.Graphics.Vulkan Flags = BufferCreateFlags.SparseBindingBit | BufferCreateFlags.SparseAliasedBit }; - gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out var buffer).ThrowOnError(); + gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer buffer).ThrowOnError(); - var memoryBinds = new SparseMemoryBind[storageBuffers.Length]; - var storageAllocations = new Auto[storageBuffers.Length]; + SparseMemoryBind[] memoryBinds = new SparseMemoryBind[storageBuffers.Length]; + Auto[] storageAllocations = new Auto[storageBuffers.Length]; int storageAllocationsCount = 0; ulong dstOffset = 0; @@ -170,9 +170,9 @@ namespace Ryujinx.Graphics.Vulkan { BufferRange range = storageBuffers[index]; - if (TryGetBuffer(range.Handle, out var existingHolder)) + if (TryGetBuffer(range.Handle, out BufferHolder existingHolder)) { - (var memory, var offset) = existingHolder.GetDeviceMemoryAndOffset(); + (DeviceMemory memory, ulong offset) = existingHolder.GetDeviceMemoryAndOffset(); memoryBinds[index] = new SparseMemoryBind() { @@ -224,7 +224,7 @@ namespace Ryujinx.Graphics.Vulkan gd.Api.QueueBindSparse(gd.Queue, 1, in bindSparseInfo, default).ThrowOnError(); } - var holder = new BufferHolder(gd, _device, buffer, (int)size, storageAllocations); + BufferHolder holder = new BufferHolder(gd, _device, buffer, (int)size, storageAllocations); BufferCount++; @@ -288,14 +288,14 @@ namespace Ryujinx.Graphics.Vulkan public unsafe MemoryRequirements GetHostImportedUsageRequirements(VulkanRenderer gd) { - var usage = HostImportedBufferUsageFlags; + BufferUsageFlags usage = HostImportedBufferUsageFlags; if (gd.Capabilities.SupportsIndirectParameters) { usage |= BufferUsageFlags.IndirectBufferBit; } - var bufferCreateInfo = new BufferCreateInfo + BufferCreateInfo bufferCreateInfo = new BufferCreateInfo { SType = StructureType.BufferCreateInfo, Size = (ulong)Environment.SystemPageSize, @@ -303,9 +303,9 @@ namespace Ryujinx.Graphics.Vulkan SharingMode = SharingMode.Exclusive, }; - gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out var buffer).ThrowOnError(); + gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer buffer).ThrowOnError(); - gd.Api.GetBufferMemoryRequirements(_device, buffer, out var requirements); + gd.Api.GetBufferMemoryRequirements(_device, buffer, out MemoryRequirements requirements); gd.Api.DestroyBuffer(_device, buffer, null); @@ -320,7 +320,7 @@ namespace Ryujinx.Graphics.Vulkan bool sparseCompatible = false, BufferAllocationType fallbackType = BufferAllocationType.Auto) { - var usage = DefaultBufferUsageFlags; + BufferUsageFlags usage = DefaultBufferUsageFlags; if (forConditionalRendering && gd.Capabilities.SupportsConditionalRendering) { @@ -331,7 +331,7 @@ namespace Ryujinx.Graphics.Vulkan usage |= BufferUsageFlags.IndirectBufferBit; } - var bufferCreateInfo = new BufferCreateInfo + BufferCreateInfo bufferCreateInfo = new BufferCreateInfo { SType = StructureType.BufferCreateInfo, Size = (ulong)size, @@ -339,8 +339,8 @@ namespace Ryujinx.Graphics.Vulkan SharingMode = SharingMode.Exclusive, }; - gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out var buffer).ThrowOnError(); - gd.Api.GetBufferMemoryRequirements(_device, buffer, out var requirements); + gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out VkBuffer buffer).ThrowOnError(); + gd.Api.GetBufferMemoryRequirements(_device, buffer, out MemoryRequirements requirements); if (sparseCompatible) { @@ -351,7 +351,7 @@ namespace Ryujinx.Graphics.Vulkan do { - var allocateFlags = type switch + MemoryPropertyFlags allocateFlags = type switch { BufferAllocationType.HostMappedNoCache => DefaultBufferMemoryNoCacheFlags, BufferAllocationType.HostMapped => DefaultBufferMemoryFlags, @@ -402,7 +402,7 @@ namespace Ryujinx.Graphics.Vulkan if (buffer.Handle != 0) { - var holder = new BufferHolder(gd, _device, buffer, allocation, size, baseType, resultType); + BufferHolder holder = new BufferHolder(gd, _device, buffer, allocation, size, baseType, resultType); return holder; } @@ -414,7 +414,7 @@ namespace Ryujinx.Graphics.Vulkan public Auto CreateView(BufferHandle handle, VkFormat format, int offset, int size, Action invalidateView) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.CreateView(format, offset, size, invalidateView); } @@ -424,7 +424,7 @@ namespace Ryujinx.Graphics.Vulkan public Auto GetBuffer(CommandBuffer commandBuffer, BufferHandle handle, bool isWrite, bool isSSBO = false) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetBuffer(commandBuffer, isWrite, isSSBO); } @@ -434,7 +434,7 @@ namespace Ryujinx.Graphics.Vulkan public Auto GetBuffer(CommandBuffer commandBuffer, BufferHandle handle, int offset, int size, bool isWrite) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetBuffer(commandBuffer, offset, size, isWrite); } @@ -444,7 +444,7 @@ namespace Ryujinx.Graphics.Vulkan public Auto GetBufferI8ToI16(CommandBufferScoped cbs, BufferHandle handle, int offset, int size) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetBufferI8ToI16(cbs, offset, size); } @@ -454,7 +454,7 @@ namespace Ryujinx.Graphics.Vulkan public Auto GetAlignedVertexBuffer(CommandBufferScoped cbs, BufferHandle handle, int offset, int size, int stride, int alignment) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetAlignedVertexBuffer(cbs, offset, size, stride, alignment); } @@ -464,7 +464,7 @@ namespace Ryujinx.Graphics.Vulkan public Auto GetBufferTopologyConversion(CommandBufferScoped cbs, BufferHandle handle, int offset, int size, IndexBufferPattern pattern, int indexSize) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetBufferTopologyConversion(cbs, offset, size, pattern, indexSize); } @@ -486,14 +486,14 @@ namespace Ryujinx.Graphics.Vulkan { BufferHolder drawCountBufferHolder = null; - if (!TryGetBuffer(indexBuffer.Handle, out var indexBufferHolder) || - !TryGetBuffer(indirectBuffer.Handle, out var indirectBufferHolder) || + if (!TryGetBuffer(indexBuffer.Handle, out BufferHolder indexBufferHolder) || + !TryGetBuffer(indirectBuffer.Handle, out BufferHolder indirectBufferHolder) || (hasDrawCount && !TryGetBuffer(drawCountBuffer.Handle, out drawCountBufferHolder))) { return (null, null); } - var indexBufferKey = new TopologyConversionIndirectCacheKey( + TopologyConversionIndirectCacheKey indexBufferKey = new TopologyConversionIndirectCacheKey( gd, pattern, indexSize, @@ -505,16 +505,16 @@ namespace Ryujinx.Graphics.Vulkan indexBuffer.Offset, indexBuffer.Size, indexBufferKey, - out var convertedIndexBuffer); + out BufferHolder convertedIndexBuffer); - var indirectBufferKey = new IndirectDataCacheKey(pattern); + IndirectDataCacheKey indirectBufferKey = new IndirectDataCacheKey(pattern); bool hasConvertedIndirectBuffer = indirectBufferHolder.TryGetCachedConvertedBuffer( indirectBuffer.Offset, indirectBuffer.Size, indirectBufferKey, - out var convertedIndirectBuffer); + out BufferHolder convertedIndirectBuffer); - var drawCountBufferKey = new DrawCountCacheKey(); + DrawCountCacheKey drawCountBufferKey = new DrawCountCacheKey(); bool hasCachedDrawCount = true; if (hasDrawCount) @@ -568,7 +568,7 @@ namespace Ryujinx.Graphics.Vulkan // Any modification of the indirect buffer should invalidate the index buffers that are associated with it, // since we used the indirect data to find the range of the index buffer that is used. - var indexBufferDependency = new Dependency( + Dependency indexBufferDependency = new Dependency( indexBufferHolder, indexBuffer.Offset, indexBuffer.Size, @@ -590,7 +590,7 @@ namespace Ryujinx.Graphics.Vulkan // If we have a draw count, any modification of the draw count should invalidate all indirect buffers // where we used it to find the range of indirect data that is actually used. - var indirectBufferDependency = new Dependency( + Dependency indirectBufferDependency = new Dependency( indirectBufferHolder, indirectBuffer.Offset, indirectBuffer.Size, @@ -609,7 +609,7 @@ namespace Ryujinx.Graphics.Vulkan public Auto GetBuffer(CommandBuffer commandBuffer, BufferHandle handle, bool isWrite, out int size) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { size = holder.Size; return holder.GetBuffer(commandBuffer, isWrite); @@ -621,7 +621,7 @@ namespace Ryujinx.Graphics.Vulkan public PinnedSpan GetData(BufferHandle handle, int offset, int size) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { return holder.GetData(offset, size); } @@ -636,7 +636,7 @@ namespace Ryujinx.Graphics.Vulkan public void SetData(BufferHandle handle, int offset, ReadOnlySpan data, CommandBufferScoped? cbs, Action endRenderPass) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { holder.SetData(offset, data, cbs, endRenderPass); } @@ -644,7 +644,7 @@ namespace Ryujinx.Graphics.Vulkan public void Delete(BufferHandle handle) { - if (TryGetBuffer(handle, out var holder)) + if (TryGetBuffer(handle, out BufferHolder holder)) { holder.Dispose(); _buffers.Remove((int)Unsafe.As(ref handle)); diff --git a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs index f7f78b613..022880b53 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs @@ -38,7 +38,7 @@ namespace Ryujinx.Graphics.Vulkan public readonly bool Remove(int offset, int size) { - var list = _ranges; + List list = _ranges; bool removedAny = false; if (list != null) { @@ -56,7 +56,7 @@ namespace Ryujinx.Graphics.Vulkan int endOffset = offset + size; int startIndex = overlapIndex; - var currentOverlap = list[overlapIndex]; + Range currentOverlap = list[overlapIndex]; // Orphan the start of the overlap. if (currentOverlap.Offset < offset) @@ -102,7 +102,7 @@ namespace Ryujinx.Graphics.Vulkan public void Add(int offset, int size) { - var list = _ranges; + List list = _ranges; if (list != null) { int overlapIndex = BinarySearch(list, offset, size); @@ -118,8 +118,8 @@ namespace Ryujinx.Graphics.Vulkan while (overlapIndex < list.Count && list[overlapIndex].OverlapsWith(offset, size)) { - var currentOverlap = list[overlapIndex]; - var currentOverlapEndOffset = currentOverlap.Offset + currentOverlap.Size; + Range currentOverlap = list[overlapIndex]; + int currentOverlapEndOffset = currentOverlap.Offset + currentOverlap.Size; if (offset > currentOverlap.Offset) { @@ -159,7 +159,7 @@ namespace Ryujinx.Graphics.Vulkan public readonly bool OverlapsWith(int offset, int size) { - var list = _ranges; + List list = _ranges; if (list == null) { return false; @@ -170,7 +170,7 @@ namespace Ryujinx.Graphics.Vulkan public readonly List FindOverlaps(int offset, int size) { - var list = _ranges; + List list = _ranges; if (list == null) { return null; @@ -208,7 +208,7 @@ namespace Ryujinx.Graphics.Vulkan int middle = left + (range >> 1); - var item = list[middle]; + Range item = list[middle]; if (item.OverlapsWith(offset, size)) { @@ -233,7 +233,7 @@ namespace Ryujinx.Graphics.Vulkan int size = baseData.Length; int endOffset = offset + size; - var list = _ranges; + List list = _ranges; if (list == null) { baseData.CopyTo(result); @@ -245,7 +245,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < list.Count; i++) { - var range = list[i]; + Range range = list[i]; int rangeEnd = range.Offset + range.Size; diff --git a/src/Ryujinx.Graphics.Vulkan/BufferState.cs b/src/Ryujinx.Graphics.Vulkan/BufferState.cs index e49df765d..bc7c847f1 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferState.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferState.cs @@ -1,4 +1,5 @@ using System; +using Buffer = Silk.NET.Vulkan.Buffer; namespace Ryujinx.Graphics.Vulkan { @@ -23,7 +24,7 @@ namespace Ryujinx.Graphics.Vulkan { if (_buffer != null) { - var buffer = _buffer.Get(cbs, _offset, _size, true).Value; + Buffer buffer = _buffer.Get(cbs, _offset, _size, true).Value; ulong offset = (ulong)_offset; ulong size = (ulong)_size; diff --git a/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs b/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs index ed76c6566..255277ff6 100644 --- a/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs +++ b/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs @@ -37,7 +37,7 @@ namespace Ryujinx.Graphics.Vulkan public void Initialize(Vk api, Device device, CommandPool pool) { - var allocateInfo = new CommandBufferAllocateInfo + CommandBufferAllocateInfo allocateInfo = new CommandBufferAllocateInfo { SType = StructureType.CommandBufferAllocateInfo, CommandBufferCount = 1, @@ -75,7 +75,7 @@ namespace Ryujinx.Graphics.Vulkan _concurrentFenceWaitUnsupported = concurrentFenceWaitUnsupported; _owner = Thread.CurrentThread; - var commandPoolCreateInfo = new CommandPoolCreateInfo + CommandPoolCreateInfo commandPoolCreateInfo = new CommandPoolCreateInfo { SType = StructureType.CommandPoolCreateInfo, QueueFamilyIndex = queueFamilyIndex, @@ -114,7 +114,7 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < _totalCommandBuffers; i++) { - ref var entry = ref _commandBuffers[i]; + ref ReservedCommandBuffer entry = ref _commandBuffers[i]; if (entry.InConsumption) { @@ -130,7 +130,7 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < _totalCommandBuffers; i++) { - ref var entry = ref _commandBuffers[i]; + ref ReservedCommandBuffer entry = ref _commandBuffers[i]; if (entry.InUse) { @@ -142,7 +142,7 @@ namespace Ryujinx.Graphics.Vulkan public void AddWaitable(int cbIndex, MultiFenceHolder waitable) { - ref var entry = ref _commandBuffers[cbIndex]; + ref ReservedCommandBuffer entry = ref _commandBuffers[cbIndex]; if (waitable.AddFence(cbIndex, entry.Fence)) { entry.Waitables.Add(waitable); @@ -155,7 +155,7 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < _totalCommandBuffers; i++) { - ref var entry = ref _commandBuffers[i]; + ref ReservedCommandBuffer entry = ref _commandBuffers[i]; if (entry.InUse && waitable.HasFence(i) && @@ -175,7 +175,7 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < _totalCommandBuffers; i++) { - ref var entry = ref _commandBuffers[i]; + ref ReservedCommandBuffer entry = ref _commandBuffers[i]; if (entry.InUse && entry.Fence == fence) { @@ -205,7 +205,7 @@ namespace Ryujinx.Graphics.Vulkan { int index = _queuedIndexes[_queuedIndexesPtr]; - ref var entry = ref _commandBuffers[index]; + ref ReservedCommandBuffer entry = ref _commandBuffers[index]; if (wait || !entry.InConsumption || entry.Fence.IsSignaled()) { @@ -240,7 +240,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < _totalCommandBuffers; i++) { - ref var entry = ref _commandBuffers[cursor]; + ref ReservedCommandBuffer entry = ref _commandBuffers[cursor]; if (!entry.InUse && !entry.InConsumption) { @@ -248,7 +248,7 @@ namespace Ryujinx.Graphics.Vulkan _inUseCount++; - var commandBufferBeginInfo = new CommandBufferBeginInfo + CommandBufferBeginInfo commandBufferBeginInfo = new CommandBufferBeginInfo { SType = StructureType.CommandBufferBeginInfo, }; @@ -280,7 +280,7 @@ namespace Ryujinx.Graphics.Vulkan { int cbIndex = cbs.CommandBufferIndex; - ref var entry = ref _commandBuffers[cbIndex]; + ref ReservedCommandBuffer entry = ref _commandBuffers[cbIndex]; Debug.Assert(entry.InUse); Debug.Assert(entry.CommandBuffer.Handle == cbs.CommandBuffer.Handle); @@ -289,7 +289,7 @@ namespace Ryujinx.Graphics.Vulkan entry.SubmissionCount++; _inUseCount--; - var commandBuffer = entry.CommandBuffer; + CommandBuffer commandBuffer = entry.CommandBuffer; _api.EndCommandBuffer(commandBuffer).ThrowOnError(); @@ -324,7 +324,7 @@ namespace Ryujinx.Graphics.Vulkan private void WaitAndDecrementRef(int cbIndex, bool refreshFence = true) { - ref var entry = ref _commandBuffers[cbIndex]; + ref ReservedCommandBuffer entry = ref _commandBuffers[cbIndex]; if (entry.InConsumption) { @@ -332,12 +332,12 @@ namespace Ryujinx.Graphics.Vulkan entry.InConsumption = false; } - foreach (var dependant in entry.Dependants) + foreach (IAuto dependant in entry.Dependants) { dependant.DecrementReferenceCount(cbIndex); } - foreach (var waitable in entry.Waitables) + foreach (MultiFenceHolder waitable in entry.Waitables) { waitable.RemoveFence(cbIndex); waitable.RemoveBufferUses(cbIndex); diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs index 40fc01b24..439f58815 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Graphics.Vulkan { if (bufferInfo.Buffer.Handle != 0UL) { - var writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -56,7 +56,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (DescriptorBufferInfo* pBufferInfo = bufferInfo) { - var writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -74,7 +74,7 @@ namespace Ryujinx.Graphics.Vulkan { if (imageInfo.ImageView.Handle != 0UL) { - var writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -97,7 +97,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (DescriptorImageInfo* pImageInfo = imageInfo) { - var writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -134,7 +134,7 @@ namespace Ryujinx.Graphics.Vulkan count++; } - var writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -156,7 +156,7 @@ namespace Ryujinx.Graphics.Vulkan { if (texelBufferView.Handle != 0UL) { - var writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -190,7 +190,7 @@ namespace Ryujinx.Graphics.Vulkan count++; } - var writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetManager.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetManager.cs index 97669942c..1d68407b9 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetManager.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetManager.cs @@ -24,14 +24,14 @@ namespace Ryujinx.Graphics.Vulkan Api = api; Device = device; - foreach (var poolSize in poolSizes) + foreach (DescriptorPoolSize poolSize in poolSizes) { _freeDescriptors += (int)poolSize.DescriptorCount; } fixed (DescriptorPoolSize* pPoolsSize = poolSizes) { - var descriptorPoolCreateInfo = new DescriptorPoolCreateInfo + DescriptorPoolCreateInfo descriptorPoolCreateInfo = new DescriptorPoolCreateInfo { SType = StructureType.DescriptorPoolCreateInfo, Flags = updateAfterBind ? DescriptorPoolCreateFlags.UpdateAfterBindBit : DescriptorPoolCreateFlags.None, @@ -46,7 +46,7 @@ namespace Ryujinx.Graphics.Vulkan public unsafe DescriptorSetCollection AllocateDescriptorSets(ReadOnlySpan layouts, int consumedDescriptors) { - TryAllocateDescriptorSets(layouts, consumedDescriptors, isTry: false, out var dsc); + TryAllocateDescriptorSets(layouts, consumedDescriptors, isTry: false, out DescriptorSetCollection dsc); return dsc; } @@ -69,7 +69,7 @@ namespace Ryujinx.Graphics.Vulkan { fixed (DescriptorSetLayout* pLayouts = layouts) { - var descriptorSetAllocateInfo = new DescriptorSetAllocateInfo + DescriptorSetAllocateInfo descriptorSetAllocateInfo = new DescriptorSetAllocateInfo { SType = StructureType.DescriptorSetAllocateInfo, DescriptorPool = _pool, @@ -77,7 +77,7 @@ namespace Ryujinx.Graphics.Vulkan PSetLayouts = pLayouts, }; - var result = Api.AllocateDescriptorSets(Device, &descriptorSetAllocateInfo, pDescriptorSets); + Result result = Api.AllocateDescriptorSets(Device, &descriptorSetAllocateInfo, pDescriptorSets); if (isTry && result == Result.ErrorOutOfPoolMemory) { _totalSets = (int)MaxSets; @@ -182,8 +182,8 @@ namespace Ryujinx.Graphics.Vulkan { // If we fail the first time, just create a new pool and try again. - var pool = GetPool(api, poolSizes, poolIndex, layouts.Length, consumedDescriptors, updateAfterBind); - if (!pool.TryAllocateDescriptorSets(layouts, consumedDescriptors, out var dsc)) + DescriptorPoolHolder pool = GetPool(api, poolSizes, poolIndex, layouts.Length, consumedDescriptors, updateAfterBind); + if (!pool.TryAllocateDescriptorSets(layouts, consumedDescriptors, out DescriptorSetCollection dsc)) { pool = GetPool(api, poolSizes, poolIndex, layouts.Length, consumedDescriptors, updateAfterBind); dsc = pool.AllocateDescriptorSets(layouts, consumedDescriptors); diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetTemplate.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetTemplate.cs index 117f79bb4..5dc7afb48 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetTemplate.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetTemplate.cs @@ -86,7 +86,7 @@ namespace Ryujinx.Graphics.Vulkan Size = (int)structureOffset; - var info = new DescriptorUpdateTemplateCreateInfo() + DescriptorUpdateTemplateCreateInfo info = new DescriptorUpdateTemplateCreateInfo() { SType = StructureType.DescriptorUpdateTemplateCreateInfo, DescriptorUpdateEntryCount = (uint)segments.Length, @@ -173,7 +173,7 @@ namespace Ryujinx.Graphics.Vulkan Size = (int)structureOffset; - var info = new DescriptorUpdateTemplateCreateInfo() + DescriptorUpdateTemplateCreateInfo info = new DescriptorUpdateTemplateCreateInfo() { SType = StructureType.DescriptorUpdateTemplateCreateInfo, DescriptorUpdateEntryCount = (uint)entry, diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs index 3780dc174..2c98b80c7 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs @@ -7,6 +7,7 @@ using System.Buffers; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using Buffer = Silk.NET.Vulkan.Buffer; using CompareOp = Ryujinx.Graphics.GAL.CompareOp; using Format = Ryujinx.Graphics.GAL.Format; using SamplerCreateInfo = Ryujinx.Graphics.GAL.SamplerCreateInfo; @@ -156,7 +157,7 @@ namespace Ryujinx.Graphics.Vulkan _uniformSetPd = new int[Constants.MaxUniformBufferBindings]; - var initialImageInfo = new DescriptorImageInfo + DescriptorImageInfo initialImageInfo = new DescriptorImageInfo { ImageLayout = ImageLayout.General, }; @@ -301,13 +302,13 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < segment.Count; i++) { - ref var texture = ref _textureRefs[segment.Binding + i]; + ref TextureRef texture = ref _textureRefs[segment.Binding + i]; texture.View?.PrepareForUsage(cbs, texture.Stage.ConvertToPipelineStageFlags(), FeedbackLoopHazards); } } else { - ref var arrayRef = ref _textureArrayRefs[segment.Binding]; + ref ArrayRef arrayRef = ref _textureArrayRefs[segment.Binding]; PipelineStageFlags stageFlags = arrayRef.Stage.ConvertToPipelineStageFlags(); arrayRef.Array?.QueueWriteToReadBarriers(cbs, stageFlags); } @@ -322,13 +323,13 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < segment.Count; i++) { - ref var image = ref _imageRefs[segment.Binding + i]; + ref ImageRef image = ref _imageRefs[segment.Binding + i]; image.View?.PrepareForUsage(cbs, image.Stage.ConvertToPipelineStageFlags(), FeedbackLoopHazards); } } else { - ref var arrayRef = ref _imageArrayRefs[segment.Binding]; + ref ArrayRef arrayRef = ref _imageArrayRefs[segment.Binding]; PipelineStageFlags stageFlags = arrayRef.Stage.ConvertToPipelineStageFlags(); arrayRef.Array?.QueueWriteToReadBarriers(cbs, stageFlags); } @@ -337,7 +338,7 @@ namespace Ryujinx.Graphics.Vulkan for (int setIndex = PipelineBase.DescriptorSetLayouts; setIndex < _program.BindingSegments.Length; setIndex++) { - var bindingSegments = _program.BindingSegments[setIndex]; + ResourceBindingSegment[] bindingSegments = _program.BindingSegments[setIndex]; if (bindingSegments.Length == 0) { @@ -353,13 +354,13 @@ namespace Ryujinx.Graphics.Vulkan segment.Type == ResourceType.TextureAndSampler || segment.Type == ResourceType.BufferTexture) { - ref var arrayRef = ref _textureArrayExtraRefs[setIndex - PipelineBase.DescriptorSetLayouts]; + ref ArrayRef arrayRef = ref _textureArrayExtraRefs[setIndex - PipelineBase.DescriptorSetLayouts]; PipelineStageFlags stageFlags = arrayRef.Stage.ConvertToPipelineStageFlags(); arrayRef.Array?.QueueWriteToReadBarriers(cbs, stageFlags); } else if (segment.Type == ResourceType.Image || segment.Type == ResourceType.BufferImage) { - ref var arrayRef = ref _imageArrayExtraRefs[setIndex - PipelineBase.DescriptorSetLayouts]; + ref ArrayRef arrayRef = ref _imageArrayExtraRefs[setIndex - PipelineBase.DescriptorSetLayouts]; PipelineStageFlags stageFlags = arrayRef.Stage.ConvertToPipelineStageFlags(); arrayRef.Array?.QueueWriteToReadBarriers(cbs, stageFlags); } @@ -424,8 +425,8 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < buffers.Length; i++) { - var assignment = buffers[i]; - var buffer = assignment.Range; + BufferAssignment assignment = buffers[i]; + BufferRange buffer = assignment.Range; int index = assignment.Binding; Auto vkBuffer = buffer.Handle == BufferHandle.Null @@ -440,7 +441,7 @@ namespace Ryujinx.Graphics.Vulkan Range = (ulong)buffer.Size, }; - var newRef = new BufferRef(vkBuffer, ref buffer); + BufferRef newRef = new BufferRef(vkBuffer, ref buffer); ref DescriptorBufferInfo currentInfo = ref _storageBuffers[index]; @@ -460,7 +461,7 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < buffers.Length; i++) { - var vkBuffer = buffers[i]; + Auto vkBuffer = buffers[i]; int index = first + i; ref BufferRef currentBufferRef = ref _storageBufferRefs[index]; @@ -633,8 +634,8 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < buffers.Length; i++) { - var assignment = buffers[i]; - var buffer = assignment.Range; + BufferAssignment assignment = buffers[i]; + BufferRange buffer = assignment.Range; int index = assignment.Binding; Auto vkBuffer = buffer.Handle == BufferHandle.Null @@ -678,7 +679,7 @@ namespace Ryujinx.Graphics.Vulkan return; } - var program = _program; + ShaderCollection program = _program; if (_dirty.HasFlag(DirtyFlags.Uniform)) { @@ -760,14 +761,14 @@ namespace Ryujinx.Graphics.Vulkan [MethodImpl(MethodImplOptions.AggressiveInlining)] private void UpdateAndBind(CommandBufferScoped cbs, ShaderCollection program, int setIndex, PipelineBindPoint pbp) { - var bindingSegments = program.BindingSegments[setIndex]; + ResourceBindingSegment[] bindingSegments = program.BindingSegments[setIndex]; if (bindingSegments.Length == 0) { return; } - var dummyBuffer = _dummyBuffer?.GetBuffer(); + Auto dummyBuffer = _dummyBuffer?.GetBuffer(); if (_updateDescriptorCacheCbIndex) { @@ -775,7 +776,7 @@ namespace Ryujinx.Graphics.Vulkan program.UpdateDescriptorCacheCommandBufferIndex(cbs.CommandBufferIndex); } - var dsc = program.GetNewDescriptorSetCollection(setIndex, out var isNew).Get(cbs); + DescriptorSetCollection dsc = program.GetNewDescriptorSetCollection(setIndex, out bool isNew).Get(cbs); if (!program.HasMinimalLayout) { @@ -824,7 +825,7 @@ namespace Ryujinx.Graphics.Vulkan if (_storageSet.Set(index)) { - ref var info = ref _storageBuffers[index]; + ref DescriptorBufferInfo info = ref _storageBuffers[index]; bool mirrored = UpdateBuffer(cbs, ref info, @@ -850,8 +851,8 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < count; i++) { - ref var texture = ref textures[i]; - ref var refs = ref _textureRefs[binding + i]; + ref DescriptorImageInfo texture = ref textures[i]; + ref TextureRef refs = ref _textureRefs[binding + i]; texture.ImageView = refs.ImageView?.Get(cbs).Value ?? default; texture.Sampler = refs.Sampler?.Get(cbs).Value ?? default; @@ -934,7 +935,7 @@ namespace Ryujinx.Graphics.Vulkan } } - var sets = dsc.GetSets(); + DescriptorSet[] sets = dsc.GetSets(); _templateUpdater.Commit(_gd, _device, sets[0]); _gd.Api.CmdBindDescriptorSets(cbs.CommandBuffer, pbp, _program.PipelineLayout, (uint)setIndex, 1, sets, 0, ReadOnlySpan.Empty); @@ -943,7 +944,7 @@ namespace Ryujinx.Graphics.Vulkan private void UpdateAndBindTexturesWithoutTemplate(CommandBufferScoped cbs, ShaderCollection program, PipelineBindPoint pbp) { int setIndex = PipelineBase.TextureSetIndex; - var bindingSegments = program.BindingSegments[setIndex]; + ResourceBindingSegment[] bindingSegments = program.BindingSegments[setIndex]; if (bindingSegments.Length == 0) { @@ -956,7 +957,7 @@ namespace Ryujinx.Graphics.Vulkan program.UpdateDescriptorCacheCommandBufferIndex(cbs.CommandBufferIndex); } - var dsc = program.GetNewDescriptorSetCollection(setIndex, out _).Get(cbs); + DescriptorSetCollection dsc = program.GetNewDescriptorSetCollection(setIndex, out _).Get(cbs); foreach (ResourceBindingSegment segment in bindingSegments) { @@ -971,8 +972,8 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < count; i++) { - ref var texture = ref textures[i]; - ref var refs = ref _textureRefs[binding + i]; + ref DescriptorImageInfo texture = ref textures[i]; + ref TextureRef refs = ref _textureRefs[binding + i]; texture.ImageView = refs.ImageView?.Get(cbs).Value ?? default; texture.Sampler = refs.Sampler?.Get(cbs).Value ?? default; @@ -1015,7 +1016,7 @@ namespace Ryujinx.Graphics.Vulkan } } - var sets = dsc.GetSets(); + DescriptorSet[] sets = dsc.GetSets(); _gd.Api.CmdBindDescriptorSets(cbs.CommandBuffer, pbp, _program.PipelineLayout, (uint)setIndex, 1, sets, 0, ReadOnlySpan.Empty); } @@ -1024,8 +1025,8 @@ namespace Ryujinx.Graphics.Vulkan private void UpdateAndBindUniformBufferPd(CommandBufferScoped cbs) { int sequence = _pdSequence; - var bindingSegments = _program.BindingSegments[PipelineBase.UniformSetIndex]; - var dummyBuffer = _dummyBuffer?.GetBuffer(); + ResourceBindingSegment[] bindingSegments = _program.BindingSegments[PipelineBase.UniformSetIndex]; + Auto dummyBuffer = _dummyBuffer?.GetBuffer(); long updatedBindings = 0; DescriptorSetTemplateWriter writer = _templateUpdater.Begin(32 * Unsafe.SizeOf()); @@ -1077,7 +1078,7 @@ namespace Ryujinx.Graphics.Vulkan return; } - var dummyBuffer = _dummyBuffer?.GetBuffer().Get(cbs).Value ?? default; + Buffer dummyBuffer = _dummyBuffer?.GetBuffer().Get(cbs).Value ?? default; foreach (ResourceBindingSegment segment in _program.ClearSegments[setIndex]) { @@ -1089,7 +1090,7 @@ namespace Ryujinx.Graphics.Vulkan { for (int setIndex = PipelineBase.DescriptorSetLayouts; setIndex < program.BindingSegments.Length; setIndex++) { - var bindingSegments = program.BindingSegments[setIndex]; + ResourceBindingSegment[] bindingSegments = program.BindingSegments[setIndex]; if (bindingSegments.Length == 0) { diff --git a/src/Ryujinx.Graphics.Vulkan/Effects/AreaScalingFilter.cs b/src/Ryujinx.Graphics.Vulkan/Effects/AreaScalingFilter.cs index 87b46df80..695a5d706 100644 --- a/src/Ryujinx.Graphics.Vulkan/Effects/AreaScalingFilter.cs +++ b/src/Ryujinx.Graphics.Vulkan/Effects/AreaScalingFilter.cs @@ -41,9 +41,9 @@ namespace Ryujinx.Graphics.Vulkan.Effects _pipeline.Initialize(); - var scalingShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/AreaScaling.spv"); + byte[] scalingShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/AreaScaling.spv"); - var scalingResourceLayout = new ResourceLayoutBuilder() + ResourceLayout scalingResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 2) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 1) .Add(ResourceStages.Compute, ResourceType.Image, 0, true).Build(); @@ -83,7 +83,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects }; int rangeSize = dimensionsBuffer.Length * sizeof(float); - using var buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); + using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); buffer.Holder.SetDataUnchecked(buffer.Offset, dimensionsBuffer); int threadGroupWorkRegionDim = 16; diff --git a/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs b/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs index 080dde5e5..5834b63a3 100644 --- a/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs +++ b/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs @@ -53,15 +53,15 @@ namespace Ryujinx.Graphics.Vulkan.Effects _pipeline.Initialize(); - var scalingShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/FsrScaling.spv"); - var sharpeningShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/FsrSharpening.spv"); + byte[] scalingShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/FsrScaling.spv"); + byte[] sharpeningShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/FsrSharpening.spv"); - var scalingResourceLayout = new ResourceLayoutBuilder() + ResourceLayout scalingResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 2) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 1) .Add(ResourceStages.Compute, ResourceType.Image, 0, true).Build(); - var sharpeningResourceLayout = new ResourceLayoutBuilder() + ResourceLayout sharpeningResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 2) .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 3) .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 4) @@ -96,9 +96,9 @@ namespace Ryujinx.Graphics.Vulkan.Effects || _intermediaryTexture.Info.Height != height || !_intermediaryTexture.Info.Equals(view.Info)) { - var originalInfo = view.Info; + TextureCreateInfo originalInfo = view.Info; - var info = new TextureCreateInfo( + TextureCreateInfo info = new TextureCreateInfo( width, height, originalInfo.Depth, @@ -142,11 +142,11 @@ namespace Ryujinx.Graphics.Vulkan.Effects }; int rangeSize = dimensionsBuffer.Length * sizeof(float); - using var buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); + using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); buffer.Holder.SetDataUnchecked(buffer.Offset, dimensionsBuffer); ReadOnlySpan sharpeningBufferData = stackalloc float[] { 1.5f - (Level * 0.01f * 1.5f) }; - using var sharpeningBuffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, sizeof(float)); + using ScopedTemporaryBuffer sharpeningBuffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, sizeof(float)); sharpeningBuffer.Holder.SetDataUnchecked(sharpeningBuffer.Offset, sharpeningBufferData); int threadGroupWorkRegionDim = 16; diff --git a/src/Ryujinx.Graphics.Vulkan/Effects/FxaaPostProcessingEffect.cs b/src/Ryujinx.Graphics.Vulkan/Effects/FxaaPostProcessingEffect.cs index 26314b7bf..ad436371e 100644 --- a/src/Ryujinx.Graphics.Vulkan/Effects/FxaaPostProcessingEffect.cs +++ b/src/Ryujinx.Graphics.Vulkan/Effects/FxaaPostProcessingEffect.cs @@ -37,9 +37,9 @@ namespace Ryujinx.Graphics.Vulkan.Effects { _pipeline.Initialize(); - var shader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/Fxaa.spv"); + byte[] shader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/Fxaa.spv"); - var resourceLayout = new ResourceLayoutBuilder() + ResourceLayout resourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 2) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 1) .Add(ResourceStages.Compute, ResourceType.Image, 0, true).Build(); @@ -66,14 +66,14 @@ namespace Ryujinx.Graphics.Vulkan.Effects ReadOnlySpan resolutionBuffer = stackalloc float[] { view.Width, view.Height }; int rangeSize = resolutionBuffer.Length * sizeof(float); - using var buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); + using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); buffer.Holder.SetDataUnchecked(buffer.Offset, resolutionBuffer); _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, buffer.Range) }); - var dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize); - var dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize); + int dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize); + int dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize); _pipeline.SetImage(ShaderStage.Compute, 0, _texture.GetView(FormatTable.ConvertRgba8SrgbToUnorm(view.Info.Format))); _pipeline.DispatchCompute(dispatchX, dispatchY, 1); diff --git a/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs b/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs index a8e68f429..23c265d13 100644 --- a/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs +++ b/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs @@ -1,4 +1,5 @@ using Ryujinx.Common; +using Ryujinx.Common.Memory; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Shader; using Ryujinx.Graphics.Shader.Translation; @@ -74,23 +75,23 @@ namespace Ryujinx.Graphics.Vulkan.Effects _pipeline.Initialize(); - var edgeShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/SmaaEdge.spv"); - var blendShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/SmaaBlend.spv"); - var neighbourShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/SmaaNeighbour.spv"); + byte[] edgeShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/SmaaEdge.spv"); + byte[] blendShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/SmaaBlend.spv"); + byte[] neighbourShader = EmbeddedResources.Read("Ryujinx.Graphics.Vulkan/Effects/Shaders/SmaaNeighbour.spv"); - var edgeResourceLayout = new ResourceLayoutBuilder() + ResourceLayout edgeResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 2) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 1) .Add(ResourceStages.Compute, ResourceType.Image, 0, true).Build(); - var blendResourceLayout = new ResourceLayoutBuilder() + ResourceLayout blendResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 2) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 1) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 3) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 4) .Add(ResourceStages.Compute, ResourceType.Image, 0, true).Build(); - var neighbourResourceLayout = new ResourceLayoutBuilder() + ResourceLayout neighbourResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 2) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 1) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 3) @@ -108,7 +109,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects QualityUltra = Quality == 3 ? 1 : 0, }; - var specInfo = new SpecDescription( + SpecDescription specInfo = new SpecDescription( (0, SpecConstType.Int32), (1, SpecConstType.Int32), (2, SpecConstType.Int32), @@ -142,7 +143,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects private void Initialize() { - var areaInfo = new TextureCreateInfo(AreaWidth, + TextureCreateInfo areaInfo = new TextureCreateInfo(AreaWidth, AreaHeight, 1, 1, @@ -158,7 +159,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects SwizzleComponent.Blue, SwizzleComponent.Alpha); - var searchInfo = new TextureCreateInfo(SearchWidth, + TextureCreateInfo searchInfo = new TextureCreateInfo(SearchWidth, SearchHeight, 1, 1, @@ -174,8 +175,8 @@ namespace Ryujinx.Graphics.Vulkan.Effects SwizzleComponent.Blue, SwizzleComponent.Alpha); - var areaTexture = EmbeddedResources.ReadFileToRentedMemory("Ryujinx.Graphics.Vulkan/Effects/Textures/SmaaAreaTexture.bin"); - var searchTexture = EmbeddedResources.ReadFileToRentedMemory("Ryujinx.Graphics.Vulkan/Effects/Textures/SmaaSearchTexture.bin"); + MemoryOwner areaTexture = EmbeddedResources.ReadFileToRentedMemory("Ryujinx.Graphics.Vulkan/Effects/Textures/SmaaAreaTexture.bin"); + MemoryOwner searchTexture = EmbeddedResources.ReadFileToRentedMemory("Ryujinx.Graphics.Vulkan/Effects/Textures/SmaaSearchTexture.bin"); _areaTexture = _renderer.CreateTexture(areaInfo) as TextureView; _searchTexture = _renderer.CreateTexture(searchInfo) as TextureView; @@ -205,8 +206,8 @@ namespace Ryujinx.Graphics.Vulkan.Effects _renderer.Pipeline.TextureBarrier(); - var dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize); - var dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize); + int dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize); + int dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize); // Edge pass _pipeline.SetProgram(_edgeProgram); @@ -215,7 +216,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects ReadOnlySpan resolutionBuffer = stackalloc float[] { view.Width, view.Height }; int rangeSize = resolutionBuffer.Length * sizeof(float); - using var buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); + using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); buffer.Holder.SetDataUnchecked(buffer.Offset, resolutionBuffer); _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, buffer.Range) }); diff --git a/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs b/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs index 0cdb93f20..a26d1a767 100644 --- a/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Graphics.Vulkan _device = device; _concurrentWaitUnsupported = concurrentWaitUnsupported; - var fenceCreateInfo = new FenceCreateInfo + FenceCreateInfo fenceCreateInfo = new FenceCreateInfo { SType = StructureType.FenceCreateInfo, }; diff --git a/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs b/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs index 09f22889c..2b567709e 100644 --- a/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs +++ b/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs @@ -96,11 +96,11 @@ namespace Ryujinx.Graphics.Vulkan public bool BufferFormatSupports(FormatFeatureFlags flags, Format format) { - var formatFeatureFlags = _bufferTable[(int)format]; + FormatFeatureFlags formatFeatureFlags = _bufferTable[(int)format]; if (formatFeatureFlags == 0) { - _api.GetPhysicalDeviceFormatProperties(_physicalDevice, FormatTable.GetFormat(format), out var fp); + _api.GetPhysicalDeviceFormatProperties(_physicalDevice, FormatTable.GetFormat(format), out FormatProperties fp); formatFeatureFlags = fp.BufferFeatures; _bufferTable[(int)format] = formatFeatureFlags; } @@ -129,18 +129,18 @@ namespace Ryujinx.Graphics.Vulkan public bool BufferFormatSupports(FormatFeatureFlags flags, VkFormat format) { - _api.GetPhysicalDeviceFormatProperties(_physicalDevice, format, out var fp); + _api.GetPhysicalDeviceFormatProperties(_physicalDevice, format, out FormatProperties fp); return (fp.BufferFeatures & flags) == flags; } public bool OptimalFormatSupports(FormatFeatureFlags flags, Format format) { - var formatFeatureFlags = _optimalTable[(int)format]; + FormatFeatureFlags formatFeatureFlags = _optimalTable[(int)format]; if (formatFeatureFlags == 0) { - _api.GetPhysicalDeviceFormatProperties(_physicalDevice, FormatTable.GetFormat(format), out var fp); + _api.GetPhysicalDeviceFormatProperties(_physicalDevice, FormatTable.GetFormat(format), out FormatProperties fp); formatFeatureFlags = fp.OptimalTilingFeatures; _optimalTable[(int)format] = formatFeatureFlags; } @@ -150,11 +150,11 @@ namespace Ryujinx.Graphics.Vulkan public VkFormat ConvertToVkFormat(Format srcFormat, bool storageFeatureFlagRequired) { - var format = FormatTable.GetFormat(srcFormat); + VkFormat format = FormatTable.GetFormat(srcFormat); - var requiredFeatures = FormatFeatureFlags.SampledImageBit | - FormatFeatureFlags.TransferSrcBit | - FormatFeatureFlags.TransferDstBit; + FormatFeatureFlags requiredFeatures = FormatFeatureFlags.SampledImageBit | + FormatFeatureFlags.TransferSrcBit | + FormatFeatureFlags.TransferDstBit; if (srcFormat.IsDepthOrStencil()) { @@ -192,7 +192,7 @@ namespace Ryujinx.Graphics.Vulkan public VkFormat ConvertToVertexVkFormat(Format srcFormat) { - var format = FormatTable.GetFormat(srcFormat); + VkFormat format = FormatTable.GetFormat(srcFormat); if (!BufferFormatSupports(FormatFeatureFlags.VertexBufferBit, srcFormat) || (IsRGB16IntFloat(srcFormat) && VulkanConfiguration.ForceRGB16IntFloatUnsupported)) diff --git a/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs b/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs index 8d80e9d05..3aa495bd7 100644 --- a/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs +++ b/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs @@ -2,6 +2,7 @@ using Ryujinx.Graphics.GAL; using Silk.NET.Vulkan; using System; using System.Linq; +using Format = Ryujinx.Graphics.GAL.Format; using VkFormat = Silk.NET.Vulkan.Format; namespace Ryujinx.Graphics.Vulkan @@ -33,7 +34,7 @@ namespace Ryujinx.Graphics.Vulkan public FramebufferParams(Device device, TextureView view, uint width, uint height) { - var format = view.Info.Format; + Format format = view.Info.Format; bool isDepthStencil = format.IsDepthOrStencil(); @@ -96,7 +97,7 @@ namespace Ryujinx.Graphics.Vulkan { if (IsValidTextureView(color)) { - var texture = (TextureView)color; + TextureView texture = (TextureView)color; _attachments[index] = texture.GetImageViewForAttachment(); _colors[index] = texture; @@ -107,7 +108,7 @@ namespace Ryujinx.Graphics.Vulkan AttachmentFormats[index] = texture.VkFormat; AttachmentIndices[index] = bindIndex; - var format = texture.Info.Format; + Format format = texture.Info.Format; if (format.IsInteger()) { @@ -184,7 +185,7 @@ namespace Ryujinx.Graphics.Vulkan { if (_colors != null && (uint)index < _colors.Length) { - var format = _colors[index].Info.Format; + Format format = _colors[index].Info.Format; if (format.IsSint()) { @@ -239,7 +240,7 @@ namespace Ryujinx.Graphics.Vulkan attachments[i] = _attachments[i].Get(cbs).Value; } - var framebufferCreateInfo = new FramebufferCreateInfo + FramebufferCreateInfo framebufferCreateInfo = new FramebufferCreateInfo { SType = StructureType.FramebufferCreateInfo, RenderPass = renderPass.Get(cbs).Value, @@ -250,13 +251,13 @@ namespace Ryujinx.Graphics.Vulkan Layers = Layers, }; - api.CreateFramebuffer(_device, in framebufferCreateInfo, null, out var framebuffer).ThrowOnError(); + api.CreateFramebuffer(_device, in framebufferCreateInfo, null, out Framebuffer framebuffer).ThrowOnError(); return new Auto(new DisposableFramebuffer(api, _device, framebuffer), null, _attachments); } public TextureView[] GetAttachmentViews() { - var result = new TextureView[_attachments.Length]; + TextureView[] result = new TextureView[_attachments.Length]; _colors?.CopyTo(result, 0); @@ -277,7 +278,7 @@ namespace Ryujinx.Graphics.Vulkan { if (_colors != null) { - foreach (var color in _colors) + foreach (TextureView color in _colors) { // If Clear or DontCare were used, this would need to be write bit. color.Storage?.QueueLoadOpBarrier(cbs, false); @@ -293,7 +294,7 @@ namespace Ryujinx.Graphics.Vulkan { if (_colors != null) { - foreach (var color in _colors) + foreach (TextureView color in _colors) { color.Storage?.AddStoreOpUsage(false); } diff --git a/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs b/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs index 3796e3c52..798682962 100644 --- a/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs +++ b/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs @@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Vulkan public void Add(ref TKey key, TValue value) { - var entry = new Entry + Entry entry = new Entry { Hash = key.GetHashCode(), Key = key, @@ -75,7 +75,7 @@ namespace Ryujinx.Graphics.Vulkan int hashCode = key.GetHashCode(); int bucketIndex = hashCode & TotalBucketsMask; - ref var bucket = ref _hashTable[bucketIndex]; + ref Bucket bucket = ref _hashTable[bucketIndex]; if (bucket.Entries != null) { int index = bucket.Length; @@ -102,11 +102,11 @@ namespace Ryujinx.Graphics.Vulkan { int hashCode = key.GetHashCode(); - ref var bucket = ref _hashTable[hashCode & TotalBucketsMask]; - var entries = bucket.AsSpan(); + ref Bucket bucket = ref _hashTable[hashCode & TotalBucketsMask]; + Span entries = bucket.AsSpan(); for (int i = 0; i < entries.Length; i++) { - ref var entry = ref entries[i]; + ref Entry entry = ref entries[i]; if (entry.Hash == hashCode && entry.Key.Equals(ref key)) { @@ -124,10 +124,10 @@ namespace Ryujinx.Graphics.Vulkan { int hashCode = key.GetHashCode(); - var entries = _hashTable[hashCode & TotalBucketsMask].AsSpan(); + Span entries = _hashTable[hashCode & TotalBucketsMask].AsSpan(); for (int i = 0; i < entries.Length; i++) { - ref var entry = ref entries[i]; + ref Entry entry = ref entries[i]; if (entry.Hash == hashCode && entry.Key.Equals(ref key)) { diff --git a/src/Ryujinx.Graphics.Vulkan/HelperShader.cs b/src/Ryujinx.Graphics.Vulkan/HelperShader.cs index b7c42aff0..9cbb931ac 100644 --- a/src/Ryujinx.Graphics.Vulkan/HelperShader.cs +++ b/src/Ryujinx.Graphics.Vulkan/HelperShader.cs @@ -6,6 +6,7 @@ using Silk.NET.Vulkan; using System; using System.Collections.Generic; using System.Numerics; +using Buffer = Silk.NET.Vulkan.Buffer; using CompareOp = Ryujinx.Graphics.GAL.CompareOp; using Format = Ryujinx.Graphics.GAL.Format; using PrimitiveTopology = Ryujinx.Graphics.GAL.PrimitiveTopology; @@ -64,7 +65,7 @@ namespace Ryujinx.Graphics.Vulkan _samplerLinear = gd.CreateSampler(SamplerCreateInfo.Create(MinFilter.Linear, MagFilter.Linear)); _samplerNearest = gd.CreateSampler(SamplerCreateInfo.Create(MinFilter.Nearest, MagFilter.Nearest)); - var blitResourceLayout = new ResourceLayoutBuilder() + ResourceLayout blitResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Vertex, ResourceType.UniformBuffer, 1) .Add(ResourceStages.Fragment, ResourceType.TextureAndSampler, 0).Build(); @@ -86,7 +87,7 @@ namespace Ryujinx.Graphics.Vulkan new ShaderSource(ReadSpirv("ColorBlitClearAlphaFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), }, blitResourceLayout); - var colorClearResourceLayout = new ResourceLayoutBuilder().Add(ResourceStages.Vertex, ResourceType.UniformBuffer, 1).Build(); + ResourceLayout colorClearResourceLayout = new ResourceLayoutBuilder().Add(ResourceStages.Vertex, ResourceType.UniformBuffer, 1).Build(); _programColorClearF = gd.CreateProgramWithMinimalLayout(new[] { @@ -112,7 +113,7 @@ namespace Ryujinx.Graphics.Vulkan new ShaderSource(ReadSpirv("DepthStencilClearFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), }, colorClearResourceLayout); - var strideChangeResourceLayout = new ResourceLayoutBuilder() + ResourceLayout strideChangeResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build(); @@ -122,7 +123,7 @@ namespace Ryujinx.Graphics.Vulkan new ShaderSource(ReadSpirv("ChangeBufferStride.spv"), ShaderStage.Compute, TargetLanguage.Spirv), }, strideChangeResourceLayout); - var colorCopyResourceLayout = new ResourceLayoutBuilder() + ResourceLayout colorCopyResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 0) .Add(ResourceStages.Compute, ResourceType.Image, 0, true).Build(); @@ -142,7 +143,7 @@ namespace Ryujinx.Graphics.Vulkan new ShaderSource(ReadSpirv("ColorCopyWideningCompute.spv"), ShaderStage.Compute, TargetLanguage.Spirv), }, colorCopyResourceLayout); - var colorDrawToMsResourceLayout = new ResourceLayoutBuilder() + ResourceLayout colorDrawToMsResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Fragment, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Fragment, ResourceType.TextureAndSampler, 0).Build(); @@ -152,7 +153,7 @@ namespace Ryujinx.Graphics.Vulkan new ShaderSource(ReadSpirv("ColorDrawToMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), }, colorDrawToMsResourceLayout); - var convertD32S8ToD24S8ResourceLayout = new ResourceLayoutBuilder() + ResourceLayout convertD32S8ToD24S8ResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build(); @@ -162,7 +163,7 @@ namespace Ryujinx.Graphics.Vulkan new ShaderSource(ReadSpirv("ConvertD32S8ToD24S8.spv"), ShaderStage.Compute, TargetLanguage.Spirv), }, convertD32S8ToD24S8ResourceLayout); - var convertIndexBufferResourceLayout = new ResourceLayoutBuilder() + ResourceLayout convertIndexBufferResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build(); @@ -172,7 +173,7 @@ namespace Ryujinx.Graphics.Vulkan new ShaderSource(ReadSpirv("ConvertIndexBuffer.spv"), ShaderStage.Compute, TargetLanguage.Spirv), }, convertIndexBufferResourceLayout); - var convertIndirectDataResourceLayout = new ResourceLayoutBuilder() + ResourceLayout convertIndirectDataResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true) @@ -254,17 +255,17 @@ namespace Ryujinx.Graphics.Vulkan { gd.FlushAllCommands(); - using var cbs = gd.CommandBufferPool.Rent(); + using CommandBufferScoped cbs = gd.CommandBufferPool.Rent(); for (int l = 0; l < levels; l++) { - var mipSrcRegion = new Extents2D( + Extents2D mipSrcRegion = new Extents2D( srcRegion.X1 >> l, srcRegion.Y1 >> l, srcRegion.X2 >> l, srcRegion.Y2 >> l); - var mipDstRegion = new Extents2D( + Extents2D mipDstRegion = new Extents2D( dstRegion.X1 >> l, dstRegion.Y1 >> l, dstRegion.X2 >> l, @@ -272,8 +273,8 @@ namespace Ryujinx.Graphics.Vulkan for (int z = 0; z < layers; z++) { - var srcView = Create2DLayerView(src, z, l); - var dstView = Create2DLayerView(dst, z, l); + TextureView srcView = Create2DLayerView(src, z, l); + TextureView dstView = Create2DLayerView(dst, z, l); if (isDepthOrStencil) { @@ -334,7 +335,7 @@ namespace Ryujinx.Graphics.Vulkan int dstWidth = Math.Max(1, dst.Width >> mipDstLevel); int dstHeight = Math.Max(1, dst.Height >> mipDstLevel); - var extents = new Extents2D( + Extents2D extents = new Extents2D( 0, 0, Math.Min(srcWidth, dstWidth), @@ -342,8 +343,8 @@ namespace Ryujinx.Graphics.Vulkan for (int z = 0; z < depth; z++) { - var srcView = Create2DLayerView(src, srcLayer + z, mipSrcLevel); - var dstView = Create2DLayerView(dst, dstLayer + z, mipDstLevel); + TextureView srcView = Create2DLayerView(src, srcLayer + z, mipSrcLevel); + TextureView dstView = Create2DLayerView(dst, dstLayer + z, mipDstLevel); BlitColor( gd, @@ -381,7 +382,7 @@ namespace Ryujinx.Graphics.Vulkan const int RegionBufferSize = 16; - var sampler = linearFilter ? _samplerLinear : _samplerNearest; + ISampler sampler = linearFilter ? _samplerLinear : _samplerNearest; _pipeline.SetTextureAndSamplerIdentitySwizzle(ShaderStage.Fragment, 0, src, sampler); @@ -402,7 +403,7 @@ namespace Ryujinx.Graphics.Vulkan (region[2], region[3]) = (region[3], region[2]); } - using var buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, RegionBufferSize); + using ScopedTemporaryBuffer buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, RegionBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, region); @@ -410,7 +411,7 @@ namespace Ryujinx.Graphics.Vulkan Span viewports = stackalloc Viewport[1]; - var rect = new Rectangle( + Rectangle rect = new Rectangle( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -498,7 +499,7 @@ namespace Ryujinx.Graphics.Vulkan (region[2], region[3]) = (region[3], region[2]); } - using var buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, RegionBufferSize); + using ScopedTemporaryBuffer buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, RegionBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, region); @@ -506,7 +507,7 @@ namespace Ryujinx.Graphics.Vulkan Span viewports = stackalloc Viewport[1]; - var rect = new Rectangle( + Rectangle rect = new Rectangle( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -529,11 +530,11 @@ namespace Ryujinx.Graphics.Vulkan _pipeline.SetViewports(viewports); _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); - var aspectFlags = src.Info.Format.ConvertAspectFlags(); + ImageAspectFlags aspectFlags = src.Info.Format.ConvertAspectFlags(); if (aspectFlags.HasFlag(ImageAspectFlags.DepthBit)) { - var depthTexture = CreateDepthOrStencilView(src, DepthStencilMode.Depth); + TextureView depthTexture = CreateDepthOrStencilView(src, DepthStencilMode.Depth); BlitDepthStencilDraw(depthTexture, isDepth: true); @@ -545,7 +546,7 @@ namespace Ryujinx.Graphics.Vulkan if (aspectFlags.HasFlag(ImageAspectFlags.StencilBit) && _programStencilBlit != null) { - var stencilTexture = CreateDepthOrStencilView(src, DepthStencilMode.Stencil); + TextureView stencilTexture = CreateDepthOrStencilView(src, DepthStencilMode.Stencil); BlitDepthStencilDraw(stencilTexture, isDepth: false); @@ -648,11 +649,11 @@ namespace Ryujinx.Graphics.Vulkan gd.FlushAllCommands(); - using var cbs = gd.CommandBufferPool.Rent(); + using CommandBufferScoped cbs = gd.CommandBufferPool.Rent(); _pipeline.SetCommandBuffer(cbs); - using var buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ClearColorBufferSize); + using ScopedTemporaryBuffer buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ClearColorBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, clearColor); @@ -710,11 +711,11 @@ namespace Ryujinx.Graphics.Vulkan gd.FlushAllCommands(); - using var cbs = gd.CommandBufferPool.Rent(); + using CommandBufferScoped cbs = gd.CommandBufferPool.Rent(); _pipeline.SetCommandBuffer(cbs); - using var buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ClearColorBufferSize); + using ScopedTemporaryBuffer buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ClearColorBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, stackalloc float[] { depthValue }); @@ -771,7 +772,7 @@ namespace Ryujinx.Graphics.Vulkan (region[2], region[3]) = (region[3], region[2]); } - var bufferHandle = gd.BufferManager.CreateWithHandle(gd, RegionBufferSize); + BufferHandle bufferHandle = gd.BufferManager.CreateWithHandle(gd, RegionBufferSize); gd.BufferManager.SetData(bufferHandle, 0, region); @@ -779,7 +780,7 @@ namespace Ryujinx.Graphics.Vulkan Span viewports = stackalloc Viewport[1]; - var rect = new Rectangle( + Rectangle rect = new Rectangle( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -814,14 +815,14 @@ namespace Ryujinx.Graphics.Vulkan int elems = size / stride; int newSize = elems * newStride; - var srcBufferAuto = src.GetBuffer(); - var dstBufferAuto = dst.GetBuffer(); + Auto srcBufferAuto = src.GetBuffer(); + Auto dstBufferAuto = dst.GetBuffer(); - var srcBuffer = srcBufferAuto.Get(cbs, srcOffset, size).Value; - var dstBuffer = dstBufferAuto.Get(cbs, 0, newSize).Value; + Buffer srcBuffer = srcBufferAuto.Get(cbs, srcOffset, size).Value; + Buffer dstBuffer = dstBufferAuto.Get(cbs, 0, newSize).Value; - var access = supportsUint8 ? AccessFlags.ShaderWriteBit : AccessFlags.TransferWriteBit; - var stage = supportsUint8 ? PipelineStageFlags.ComputeShaderBit : PipelineStageFlags.TransferBit; + AccessFlags access = supportsUint8 ? AccessFlags.ShaderWriteBit : AccessFlags.TransferWriteBit; + PipelineStageFlags stage = supportsUint8 ? PipelineStageFlags.ComputeShaderBit : PipelineStageFlags.TransferBit; BufferHolder.InsertBufferBarrier( gd, @@ -845,7 +846,7 @@ namespace Ryujinx.Graphics.Vulkan shaderParams[2] = size; shaderParams[3] = srcOffset; - using var buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); + using ScopedTemporaryBuffer buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, shaderParams); @@ -869,7 +870,7 @@ namespace Ryujinx.Graphics.Vulkan { gd.Api.CmdFillBuffer(cbs.CommandBuffer, dstBuffer, 0, Vk.WholeSize, 0); - var bufferCopy = new BufferCopy[elems]; + BufferCopy[] bufferCopy = new BufferCopy[elems]; for (ulong i = 0; i < (ulong)elems; i++) { @@ -909,19 +910,19 @@ namespace Ryujinx.Graphics.Vulkan int convertedCount = pattern.GetConvertedCount(indexCount); int outputIndexSize = 4; - var srcBuffer = src.GetBuffer().Get(cbs, srcOffset, indexCount * indexSize).Value; - var dstBuffer = dst.GetBuffer().Get(cbs, 0, convertedCount * outputIndexSize).Value; + Buffer srcBuffer = src.GetBuffer().Get(cbs, srcOffset, indexCount * indexSize).Value; + Buffer dstBuffer = dst.GetBuffer().Get(cbs, 0, convertedCount * outputIndexSize).Value; gd.Api.CmdFillBuffer(cbs.CommandBuffer, dstBuffer, 0, Vk.WholeSize, 0); - var bufferCopy = new List(); + List bufferCopy = new List(); int outputOffset = 0; // Try to merge copies of adjacent indices to reduce copy count. int sequenceStart = 0; int sequenceLength = 0; - foreach (var index in pattern.GetIndexMapping(indexCount)) + foreach (int index in pattern.GetIndexMapping(indexCount)) { if (sequenceLength > 0) { @@ -946,7 +947,7 @@ namespace Ryujinx.Graphics.Vulkan bufferCopy.Add(new BufferCopy((ulong)(srcOffset + sequenceStart * indexSize), (ulong)outputOffset, (ulong)(indexSize * sequenceLength))); } - var bufferCopyArray = bufferCopy.ToArray(); + BufferCopy[] bufferCopyArray = bufferCopy.ToArray(); BufferHolder.InsertBufferBarrier( gd, @@ -999,7 +1000,7 @@ namespace Ryujinx.Graphics.Vulkan shaderParams[0] = BitOperations.Log2((uint)ratio); - using var buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); + using ScopedTemporaryBuffer buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, shaderParams); @@ -1026,8 +1027,8 @@ namespace Ryujinx.Graphics.Vulkan // - Maximum component size is 4 (R32). int componentSize = Math.Min(Math.Min(srcBpp, dstBpp), 4); - var srcFormat = GetFormat(componentSize, srcBpp / componentSize); - var dstFormat = GetFormat(componentSize, dstBpp / componentSize); + Format srcFormat = GetFormat(componentSize, srcBpp / componentSize); + Format dstFormat = GetFormat(componentSize, dstBpp / componentSize); _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, buffer.Range) }); @@ -1035,8 +1036,8 @@ namespace Ryujinx.Graphics.Vulkan { for (int z = 0; z < depth; z++) { - var srcView = Create2DLayerView(src, srcLayer + z, srcLevel + l, srcFormat); - var dstView = Create2DLayerView(dst, dstLayer + z, dstLevel + l); + TextureView srcView = Create2DLayerView(src, srcLayer + z, srcLevel + l, srcFormat); + TextureView dstView = Create2DLayerView(dst, dstLayer + z, dstLevel + l); _pipeline.SetTextureAndSamplerIdentitySwizzle(ShaderStage.Compute, 0, srcView, null); _pipeline.SetImage(ShaderStage.Compute, 0, dstView.GetView(dstFormat)); @@ -1083,7 +1084,7 @@ namespace Ryujinx.Graphics.Vulkan int samples = src.Info.Samples; bool isDepthOrStencil = src.Info.Format.IsDepthOrStencil(); - var aspectFlags = src.Info.Format.ConvertAspectFlags(); + ImageAspectFlags aspectFlags = src.Info.Format.ConvertAspectFlags(); // X and Y are the expected texture samples. // Z and W are the actual texture samples used. @@ -1091,7 +1092,7 @@ namespace Ryujinx.Graphics.Vulkan (shaderParams[0], shaderParams[1]) = GetSampleCountXYLog2(samples); (shaderParams[2], shaderParams[3]) = GetSampleCountXYLog2((int)TextureStorage.ConvertToSampleCountFlags(gd.Capabilities.SupportedSampleCounts, (uint)samples)); - using var buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); + using ScopedTemporaryBuffer buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, shaderParams); @@ -1118,7 +1119,7 @@ namespace Ryujinx.Graphics.Vulkan Span viewports = stackalloc Viewport[1]; - var rect = new Rectangle(0, 0, dst.Width, dst.Height); + Rectangle rect = new Rectangle(0, 0, dst.Width, dst.Height); viewports[0] = new Viewport( rect, @@ -1135,8 +1136,8 @@ namespace Ryujinx.Graphics.Vulkan for (int z = 0; z < depth; z++) { - var srcView = Create2DLayerView(src, srcLayer + z, 0); - var dstView = Create2DLayerView(dst, dstLayer + z, 0); + TextureView srcView = Create2DLayerView(src, srcLayer + z, 0); + TextureView dstView = Create2DLayerView(dst, dstLayer + z, 0); _pipeline.SetRenderTarget(dstView, (uint)dst.Width, (uint)dst.Height); @@ -1155,7 +1156,7 @@ namespace Ryujinx.Graphics.Vulkan } else { - var format = GetFormat(src.Info.BytesPerPixel); + Format format = GetFormat(src.Info.BytesPerPixel); int dispatchX = (dst.Info.Width + 31) / 32; int dispatchY = (dst.Info.Height + 31) / 32; @@ -1164,8 +1165,8 @@ namespace Ryujinx.Graphics.Vulkan for (int z = 0; z < depth; z++) { - var srcView = Create2DLayerView(src, srcLayer + z, 0, format); - var dstView = Create2DLayerView(dst, dstLayer + z, 0); + TextureView srcView = Create2DLayerView(src, srcLayer + z, 0, format); + TextureView dstView = Create2DLayerView(dst, dstLayer + z, 0); _pipeline.SetTextureAndSamplerIdentitySwizzle(ShaderStage.Compute, 0, srcView, null); _pipeline.SetImage(ShaderStage.Compute, 0, dstView.GetView(format)); @@ -1209,7 +1210,7 @@ namespace Ryujinx.Graphics.Vulkan int samples = dst.Info.Samples; bool isDepthOrStencil = src.Info.Format.IsDepthOrStencil(); - var aspectFlags = src.Info.Format.ConvertAspectFlags(); + ImageAspectFlags aspectFlags = src.Info.Format.ConvertAspectFlags(); // X and Y are the expected texture samples. // Z and W are the actual texture samples used. @@ -1217,7 +1218,7 @@ namespace Ryujinx.Graphics.Vulkan (shaderParams[0], shaderParams[1]) = GetSampleCountXYLog2(samples); (shaderParams[2], shaderParams[3]) = GetSampleCountXYLog2((int)TextureStorage.ConvertToSampleCountFlags(gd.Capabilities.SupportedSampleCounts, (uint)samples)); - using var buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); + using ScopedTemporaryBuffer buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, shaderParams); @@ -1239,7 +1240,7 @@ namespace Ryujinx.Graphics.Vulkan Span viewports = stackalloc Viewport[1]; - var rect = new Rectangle(0, 0, dst.Width, dst.Height); + Rectangle rect = new Rectangle(0, 0, dst.Width, dst.Height); viewports[0] = new Viewport( rect, @@ -1261,8 +1262,8 @@ namespace Ryujinx.Graphics.Vulkan { for (int z = 0; z < depth; z++) { - var srcView = Create2DLayerView(src, srcLayer + z, 0); - var dstView = Create2DLayerView(dst, dstLayer + z, 0); + TextureView srcView = Create2DLayerView(src, srcLayer + z, 0); + TextureView dstView = Create2DLayerView(dst, dstLayer + z, 0); _pipeline.SetRenderTarget(dstView, (uint)dst.Width, (uint)dst.Height); @@ -1283,13 +1284,13 @@ namespace Ryujinx.Graphics.Vulkan { _pipeline.SetProgram(_programColorDrawToMs); - var format = GetFormat(src.Info.BytesPerPixel); - var vkFormat = FormatTable.GetFormat(format); + Format format = GetFormat(src.Info.BytesPerPixel); + VkFormat vkFormat = FormatTable.GetFormat(format); for (int z = 0; z < depth; z++) { - var srcView = Create2DLayerView(src, srcLayer + z, 0, format); - var dstView = Create2DLayerView(dst, dstLayer + z, 0); + TextureView srcView = Create2DLayerView(src, srcLayer + z, 0, format); + TextureView dstView = Create2DLayerView(dst, dstLayer + z, 0); _pipeline.SetTextureAndSamplerIdentitySwizzle(ShaderStage.Fragment, 0, srcView, null); _pipeline.SetRenderTarget(dstView.GetView(format), (uint)dst.Width, (uint)dst.Height); @@ -1329,7 +1330,7 @@ namespace Ryujinx.Graphics.Vulkan { if (aspectFlags.HasFlag(ImageAspectFlags.DepthBit)) { - var depthTexture = CreateDepthOrStencilView(src, DepthStencilMode.Depth); + TextureView depthTexture = CreateDepthOrStencilView(src, DepthStencilMode.Depth); CopyMSAspectDraw(depthTexture, fromMS, isDepth: true); @@ -1341,7 +1342,7 @@ namespace Ryujinx.Graphics.Vulkan if (aspectFlags.HasFlag(ImageAspectFlags.StencilBit) && _programStencilDrawToMs != null) { - var stencilTexture = CreateDepthOrStencilView(src, DepthStencilMode.Stencil); + TextureView stencilTexture = CreateDepthOrStencilView(src, DepthStencilMode.Stencil); CopyMSAspectDraw(stencilTexture, fromMS, isDepth: false); @@ -1421,14 +1422,14 @@ namespace Ryujinx.Graphics.Vulkan return from; } - var target = from.Info.Target switch + Target target = from.Info.Target switch { Target.Texture1DArray => Target.Texture1D, Target.Texture2DMultisampleArray => Target.Texture2DMultisample, _ => Target.Texture2D, }; - var info = new TextureCreateInfo( + TextureCreateInfo info = new TextureCreateInfo( Math.Max(1, from.Info.Width >> level), Math.Max(1, from.Info.Height >> level), 1, @@ -1530,8 +1531,8 @@ namespace Ryujinx.Graphics.Vulkan int convertedCount = pattern.GetConvertedCount(indexCount); int outputIndexSize = 4; - var srcBuffer = srcIndexBuffer.GetBuffer().Get(cbs, srcIndexBufferOffset, indexCount * indexSize).Value; - var dstBuffer = dstIndexBuffer.GetBuffer().Get(cbs, 0, convertedCount * outputIndexSize).Value; + Buffer srcBuffer = srcIndexBuffer.GetBuffer().Get(cbs, srcIndexBufferOffset, indexCount * indexSize).Value; + Buffer dstBuffer = dstIndexBuffer.GetBuffer().Get(cbs, 0, convertedCount * outputIndexSize).Value; const int ParamsBufferSize = 24 * sizeof(int); const int ParamsIndirectDispatchOffset = 16 * sizeof(int); @@ -1558,9 +1559,9 @@ namespace Ryujinx.Graphics.Vulkan pattern.OffsetIndex.CopyTo(shaderParams[..pattern.OffsetIndex.Length]); - using var patternScoped = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); - var patternBuffer = patternScoped.Holder; - var patternBufferAuto = patternBuffer.GetBuffer(); + using ScopedTemporaryBuffer patternScoped = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); + BufferHolder patternBuffer = patternScoped.Holder; + Auto patternBufferAuto = patternBuffer.GetBuffer(); patternBuffer.SetDataUnchecked(patternScoped.Offset, shaderParams); @@ -1631,13 +1632,13 @@ namespace Ryujinx.Graphics.Vulkan int inSize = pixelCount * 2 * sizeof(int); int outSize = pixelCount * sizeof(int); - var srcBufferAuto = src.GetBuffer(); + Auto srcBufferAuto = src.GetBuffer(); - var srcBuffer = srcBufferAuto.Get(cbs, 0, inSize).Value; - var dstBuffer = dstBufferAuto.Get(cbs, dstOffset, outSize).Value; + Buffer srcBuffer = srcBufferAuto.Get(cbs, 0, inSize).Value; + Buffer dstBuffer = dstBufferAuto.Get(cbs, dstOffset, outSize).Value; - var access = AccessFlags.ShaderWriteBit; - var stage = PipelineStageFlags.ComputeShaderBit; + AccessFlags access = AccessFlags.ShaderWriteBit; + PipelineStageFlags stage = PipelineStageFlags.ComputeShaderBit; BufferHolder.InsertBufferBarrier( gd, @@ -1668,7 +1669,7 @@ namespace Ryujinx.Graphics.Vulkan shaderParams[0] = pixelCount; shaderParams[1] = dstOffset; - using var buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); + using ScopedTemporaryBuffer buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ParamsBufferSize); buffer.Holder.SetDataUnchecked(buffer.Offset, shaderParams); diff --git a/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs b/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs index 5c8b2a761..23273b811 100644 --- a/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs +++ b/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs @@ -57,7 +57,7 @@ namespace Ryujinx.Graphics.Vulkan lock (_lock) { // Does a compatible allocation exist in the tree? - var allocations = new HostMemoryAllocation[10]; + HostMemoryAllocation[] allocations = new HostMemoryAllocation[10]; ulong start = (ulong)pointer; ulong end = start + size; @@ -108,7 +108,7 @@ namespace Ryujinx.Graphics.Vulkan PHostPointer = (void*)pageAlignedPointer, }; - var memoryAllocateInfo = new MemoryAllocateInfo + MemoryAllocateInfo memoryAllocateInfo = new MemoryAllocateInfo { SType = StructureType.MemoryAllocateInfo, AllocationSize = pageAlignedSize, @@ -116,7 +116,7 @@ namespace Ryujinx.Graphics.Vulkan PNext = &importInfo, }; - Result result = _api.AllocateMemory(_device, in memoryAllocateInfo, null, out var deviceMemory); + Result result = _api.AllocateMemory(_device, in memoryAllocateInfo, null, out DeviceMemory deviceMemory); if (result < Result.Success) { @@ -124,9 +124,9 @@ namespace Ryujinx.Graphics.Vulkan return false; } - var allocation = new MemoryAllocation(this, deviceMemory, pageAlignedPointer, 0, pageAlignedSize); - var allocAuto = new Auto(allocation); - var hostAlloc = new HostMemoryAllocation(allocAuto, pageAlignedPointer, pageAlignedSize); + MemoryAllocation allocation = new MemoryAllocation(this, deviceMemory, pageAlignedPointer, 0, pageAlignedSize); + Auto allocAuto = new Auto(allocation); + HostMemoryAllocation hostAlloc = new HostMemoryAllocation(allocAuto, pageAlignedPointer, pageAlignedSize); allocAuto.IncrementReferenceCount(); allocAuto.Dispose(); // Kept alive by ref count only. @@ -145,7 +145,7 @@ namespace Ryujinx.Graphics.Vulkan lock (_lock) { // Does a compatible allocation exist in the tree? - var allocations = new HostMemoryAllocation[10]; + HostMemoryAllocation[] allocations = new HostMemoryAllocation[10]; ulong start = (ulong)pointer; ulong end = start + size; diff --git a/src/Ryujinx.Graphics.Vulkan/ImageArray.cs b/src/Ryujinx.Graphics.Vulkan/ImageArray.cs index 019286d28..40ef32769 100644 --- a/src/Ryujinx.Graphics.Vulkan/ImageArray.cs +++ b/src/Ryujinx.Graphics.Vulkan/ImageArray.cs @@ -128,8 +128,8 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < textures.Length; i++) { - ref var texture = ref textures[i]; - ref var refs = ref _textureRefs[i]; + ref DescriptorImageInfo texture = ref textures[i]; + ref TextureRef refs = ref _textureRefs[i]; if (i > 0 && _textureRefs[i - 1].View == refs.View) { diff --git a/src/Ryujinx.Graphics.Vulkan/IndexBufferState.cs b/src/Ryujinx.Graphics.Vulkan/IndexBufferState.cs index d26fea307..88976e8bb 100644 --- a/src/Ryujinx.Graphics.Vulkan/IndexBufferState.cs +++ b/src/Ryujinx.Graphics.Vulkan/IndexBufferState.cs @@ -115,7 +115,7 @@ namespace Ryujinx.Graphics.Vulkan // Convert the index buffer using the given pattern. int indexSize = GetIndexSize(); - (var indexBufferAuto, var indirectBufferAuto) = gd.BufferManager.GetBufferTopologyConversionIndirect( + (Auto indexBufferAuto, Auto indirectBufferAuto) = gd.BufferManager.GetBufferTopologyConversionIndirect( gd, cbs, new BufferRange(_handle, _offset, _size), diff --git a/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs b/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs index a28322a25..2fb7aaea0 100644 --- a/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs +++ b/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs @@ -49,7 +49,7 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < _blockLists.Count; i++) { - var bl = _blockLists[i]; + MemoryAllocatorBlockList bl = _blockLists[i]; if (bl.MemoryTypeIndex == memoryTypeIndex && bl.ForBuffer == isBuffer) { return bl.Allocate(size, alignment, map); @@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Vulkan try { - var newBl = new MemoryAllocatorBlockList(_api, _device, memoryTypeIndex, _blockAlignment, isBuffer); + MemoryAllocatorBlockList newBl = new MemoryAllocatorBlockList(_api, _device, memoryTypeIndex, _blockAlignment, isBuffer); _blockLists.Add(newBl); return newBl.Allocate(size, alignment, map); @@ -80,7 +80,7 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < _physicalDevice.PhysicalDeviceMemoryProperties.MemoryTypeCount; i++) { - var type = _physicalDevice.PhysicalDeviceMemoryProperties.MemoryTypes[i]; + MemoryType type = _physicalDevice.PhysicalDeviceMemoryProperties.MemoryTypes[i]; if ((memoryTypeBits & (1 << i)) != 0) { diff --git a/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs b/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs index 4a0cb2a74..cbf6bdad5 100644 --- a/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs +++ b/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs @@ -52,7 +52,7 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < _freeRanges.Count; i++) { - var range = _freeRanges[i]; + Range range = _freeRanges[i]; ulong alignedOffset = BitUtils.AlignUp(range.Offset, alignment); ulong sizeDelta = alignedOffset - range.Offset; @@ -88,7 +88,7 @@ namespace Ryujinx.Graphics.Vulkan private void InsertFreeRange(ulong offset, ulong size) { - var range = new Range(offset, size); + Range range = new Range(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { @@ -101,7 +101,7 @@ namespace Ryujinx.Graphics.Vulkan private void InsertFreeRangeComingled(ulong offset, ulong size) { ulong endOffset = offset + size; - var range = new Range(offset, size); + Range range = new Range(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { @@ -194,7 +194,7 @@ namespace Ryujinx.Graphics.Vulkan { for (int i = 0; i < _blocks.Count; i++) { - var block = _blocks[i]; + Block block = _blocks[i]; if (block.Mapped == map && block.Size >= size) { @@ -213,14 +213,14 @@ namespace Ryujinx.Graphics.Vulkan ulong blockAlignedSize = BitUtils.AlignUp(size, (ulong)_blockAlignment); - var memoryAllocateInfo = new MemoryAllocateInfo + MemoryAllocateInfo memoryAllocateInfo = new MemoryAllocateInfo { SType = StructureType.MemoryAllocateInfo, AllocationSize = blockAlignedSize, MemoryTypeIndex = (uint)MemoryTypeIndex, }; - _api.AllocateMemory(_device, in memoryAllocateInfo, null, out var deviceMemory).ThrowOnError(); + _api.AllocateMemory(_device, in memoryAllocateInfo, null, out DeviceMemory deviceMemory).ThrowOnError(); nint hostPointer = nint.Zero; @@ -231,7 +231,7 @@ namespace Ryujinx.Graphics.Vulkan hostPointer = (nint)pointer; } - var newBlock = new Block(deviceMemory, hostPointer, blockAlignedSize); + Block newBlock = new Block(deviceMemory, hostPointer, blockAlignedSize); InsertBlock(newBlock); diff --git a/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs index 086c4e1df..3af2cae26 100644 --- a/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs +++ b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs @@ -19,7 +19,7 @@ namespace Ryujinx.Graphics.Vulkan.MoltenVK public static void Initialize() { - var configSize = (nint)Marshal.SizeOf(); + IntPtr configSize = (nint)Marshal.SizeOf(); vkGetMoltenVKConfigurationMVK(nint.Zero, out MVKConfiguration config, configSize); diff --git a/src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs b/src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs index b42524712..e9ef39cda 100644 --- a/src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/MultiFenceHolder.cs @@ -229,7 +229,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < _fences.Length; i++) { - var fence = _fences[i]; + FenceHolder fence = _fences[i]; if (fence != null) { @@ -253,7 +253,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < _fences.Length; i++) { - var fence = _fences[i]; + FenceHolder fence = _fences[i]; if (fence != null && _bufferUsageBitmap.OverlapsWith(i, offset, size)) { diff --git a/src/Ryujinx.Graphics.Vulkan/PersistentFlushBuffer.cs b/src/Ryujinx.Graphics.Vulkan/PersistentFlushBuffer.cs index 5e0ed077b..79879e04e 100644 --- a/src/Ryujinx.Graphics.Vulkan/PersistentFlushBuffer.cs +++ b/src/Ryujinx.Graphics.Vulkan/PersistentFlushBuffer.cs @@ -1,5 +1,7 @@ using Ryujinx.Graphics.GAL; +using Silk.NET.Vulkan; using System; +using Buffer = Silk.NET.Vulkan.Buffer; namespace Ryujinx.Graphics.Vulkan { @@ -16,7 +18,7 @@ namespace Ryujinx.Graphics.Vulkan private BufferHolder ResizeIfNeeded(int size) { - var flushStorage = _flushStorage; + BufferHolder flushStorage = _flushStorage; if (flushStorage == null || size > _flushStorage.Size) { @@ -31,13 +33,13 @@ namespace Ryujinx.Graphics.Vulkan public Span GetBufferData(CommandBufferPool cbp, BufferHolder buffer, int offset, int size) { - var flushStorage = ResizeIfNeeded(size); + BufferHolder flushStorage = ResizeIfNeeded(size); Auto srcBuffer; - using (var cbs = cbp.Rent()) + using (CommandBufferScoped cbs = cbp.Rent()) { srcBuffer = buffer.GetBuffer(cbs.CommandBuffer); - var dstBuffer = flushStorage.GetBuffer(cbs.CommandBuffer); + Auto dstBuffer = flushStorage.GetBuffer(cbs.CommandBuffer); if (srcBuffer.TryIncrementReferenceCount()) { @@ -59,12 +61,12 @@ namespace Ryujinx.Graphics.Vulkan { TextureCreateInfo info = view.Info; - var flushStorage = ResizeIfNeeded(size); + BufferHolder flushStorage = ResizeIfNeeded(size); - using (var cbs = cbp.Rent()) + using (CommandBufferScoped cbs = cbp.Rent()) { - var buffer = flushStorage.GetBuffer(cbs.CommandBuffer).Get(cbs).Value; - var image = view.GetImage().Get(cbs).Value; + Buffer buffer = flushStorage.GetBuffer(cbs.CommandBuffer).Get(cbs).Value; + Image image = view.GetImage().Get(cbs).Value; view.CopyFromOrToBuffer(cbs.CommandBuffer, buffer, image, size, true, 0, 0, info.GetLayers(), info.Levels, singleSlice: false); } @@ -75,12 +77,12 @@ namespace Ryujinx.Graphics.Vulkan public Span GetTextureData(CommandBufferPool cbp, TextureView view, int size, int layer, int level) { - var flushStorage = ResizeIfNeeded(size); + BufferHolder flushStorage = ResizeIfNeeded(size); - using (var cbs = cbp.Rent()) + using (CommandBufferScoped cbs = cbp.Rent()) { - var buffer = flushStorage.GetBuffer(cbs.CommandBuffer).Get(cbs).Value; - var image = view.GetImage().Get(cbs).Value; + Buffer buffer = flushStorage.GetBuffer(cbs.CommandBuffer).Get(cbs).Value; + Image image = view.GetImage().Get(cbs).Value; view.CopyFromOrToBuffer(cbs.CommandBuffer, buffer, image, size, true, layer, level, 1, 1, singleSlice: true); } diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs index addad83fd..803712591 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common.Memory; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Shader; using Silk.NET.Vulkan; @@ -7,6 +8,8 @@ using System.Linq; using System.Numerics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using BlendOp = Silk.NET.Vulkan.BlendOp; +using Buffer = Silk.NET.Vulkan.Buffer; using CompareOp = Ryujinx.Graphics.GAL.CompareOp; using Format = Ryujinx.Graphics.GAL.Format; using FrontFace = Ryujinx.Graphics.GAL.FrontFace; @@ -102,7 +105,7 @@ namespace Ryujinx.Graphics.Vulkan AutoFlush = new AutoFlushCounter(gd); EndRenderPassDelegate = EndRenderPass; - var pipelineCacheCreateInfo = new PipelineCacheCreateInfo + PipelineCacheCreateInfo pipelineCacheCreateInfo = new PipelineCacheCreateInfo { SType = StructureType.PipelineCacheCreateInfo, }; @@ -117,7 +120,7 @@ namespace Ryujinx.Graphics.Vulkan const int EmptyVbSize = 16; - using var emptyVb = gd.BufferManager.Create(gd, EmptyVbSize); + using BufferHolder emptyVb = gd.BufferManager.Create(gd, EmptyVbSize); emptyVb.SetData(0, new byte[EmptyVbSize]); _vertexBuffers[0] = new VertexBufferState(emptyVb.GetBuffer(), 0, 0, EmptyVbSize); _vertexBuffersDirty = ulong.MaxValue >> (64 - _vertexBuffers.Length); @@ -174,7 +177,7 @@ namespace Ryujinx.Graphics.Vulkan { EndRenderPass(); - var dst = Gd.BufferManager.GetBuffer(CommandBuffer, destination, offset, size, true).Get(Cbs, offset, size, true).Value; + Buffer dst = Gd.BufferManager.GetBuffer(CommandBuffer, destination, offset, size, true).Get(Cbs, offset, size, true).Value; BufferHolder.InsertBufferBarrier( Gd, @@ -217,9 +220,9 @@ namespace Ryujinx.Graphics.Vulkan BeginRenderPass(); - var clearValue = new ClearValue(new ClearColorValue(color.Red, color.Green, color.Blue, color.Alpha)); - var attachment = new ClearAttachment(ImageAspectFlags.ColorBit, (uint)index, clearValue); - var clearRect = FramebufferParams.GetClearRect(ClearScissor, layer, layerCount); + ClearValue clearValue = new ClearValue(new ClearColorValue(color.Red, color.Green, color.Blue, color.Alpha)); + ClearAttachment attachment = new ClearAttachment(ImageAspectFlags.ColorBit, (uint)index, clearValue); + ClearRect clearRect = FramebufferParams.GetClearRect(ClearScissor, layer, layerCount); Gd.Api.CmdClearAttachments(CommandBuffer, 1, &attachment, 1, &clearRect); } @@ -231,8 +234,8 @@ namespace Ryujinx.Graphics.Vulkan return; } - var clearValue = new ClearValue(null, new ClearDepthStencilValue(depthValue, (uint)stencilValue)); - var flags = depthMask ? ImageAspectFlags.DepthBit : 0; + ClearValue clearValue = new ClearValue(null, new ClearDepthStencilValue(depthValue, (uint)stencilValue)); + ImageAspectFlags flags = depthMask ? ImageAspectFlags.DepthBit : 0; if (stencilMask) { @@ -255,8 +258,8 @@ namespace Ryujinx.Graphics.Vulkan BeginRenderPass(); - var attachment = new ClearAttachment(flags, 0, clearValue); - var clearRect = FramebufferParams.GetClearRect(ClearScissor, layer, layerCount); + ClearAttachment attachment = new ClearAttachment(flags, 0, clearValue); + ClearRect clearRect = FramebufferParams.GetClearRect(ClearScissor, layer, layerCount); Gd.Api.CmdClearAttachments(CommandBuffer, 1, &attachment, 1, &clearRect); } @@ -270,8 +273,8 @@ namespace Ryujinx.Graphics.Vulkan { EndRenderPass(); - var src = Gd.BufferManager.GetBuffer(CommandBuffer, source, srcOffset, size, false); - var dst = Gd.BufferManager.GetBuffer(CommandBuffer, destination, dstOffset, size, true); + Auto src = Gd.BufferManager.GetBuffer(CommandBuffer, source, srcOffset, size, false); + Auto dst = Gd.BufferManager.GetBuffer(CommandBuffer, destination, dstOffset, size, true); BufferHolder.Copy(Gd, Cbs, src, dst, srcOffset, dstOffset, size); } @@ -350,7 +353,7 @@ namespace Ryujinx.Graphics.Vulkan }; BufferHandle handle = pattern.GetRepeatingBuffer(vertexCount, out int indexCount); - var buffer = Gd.BufferManager.GetBuffer(CommandBuffer, handle, false); + Auto buffer = Gd.BufferManager.GetBuffer(CommandBuffer, handle, false); Gd.Api.CmdBindIndexBuffer(CommandBuffer, buffer.Get(Cbs, 0, indexCount * sizeof(int)).Value, 0, Silk.NET.Vulkan.IndexType.Uint32); @@ -435,7 +438,7 @@ namespace Ryujinx.Graphics.Vulkan public void DrawIndexedIndirect(BufferRange indirectBuffer) { - var buffer = Gd.BufferManager + Buffer buffer = Gd.BufferManager .GetBuffer(CommandBuffer, indirectBuffer.Handle, indirectBuffer.Offset, indirectBuffer.Size, false) .Get(Cbs, indirectBuffer.Offset, indirectBuffer.Size).Value; @@ -481,11 +484,11 @@ namespace Ryujinx.Graphics.Vulkan public void DrawIndexedIndirectCount(BufferRange indirectBuffer, BufferRange parameterBuffer, int maxDrawCount, int stride) { - var countBuffer = Gd.BufferManager + Buffer countBuffer = Gd.BufferManager .GetBuffer(CommandBuffer, parameterBuffer.Handle, parameterBuffer.Offset, parameterBuffer.Size, false) .Get(Cbs, parameterBuffer.Offset, parameterBuffer.Size).Value; - var buffer = Gd.BufferManager + Buffer buffer = Gd.BufferManager .GetBuffer(CommandBuffer, indirectBuffer.Handle, indirectBuffer.Offset, indirectBuffer.Size, false) .Get(Cbs, indirectBuffer.Offset, indirectBuffer.Size).Value; @@ -575,7 +578,7 @@ namespace Ryujinx.Graphics.Vulkan { // TODO: Support quads and other unsupported topologies. - var buffer = Gd.BufferManager + Buffer buffer = Gd.BufferManager .GetBuffer(CommandBuffer, indirectBuffer.Handle, indirectBuffer.Offset, indirectBuffer.Size, false) .Get(Cbs, indirectBuffer.Offset, indirectBuffer.Size, false).Value; @@ -599,11 +602,11 @@ namespace Ryujinx.Graphics.Vulkan throw new NotSupportedException(); } - var buffer = Gd.BufferManager + Buffer buffer = Gd.BufferManager .GetBuffer(CommandBuffer, indirectBuffer.Handle, indirectBuffer.Offset, indirectBuffer.Size, false) .Get(Cbs, indirectBuffer.Offset, indirectBuffer.Size, false).Value; - var countBuffer = Gd.BufferManager + Buffer countBuffer = Gd.BufferManager .GetBuffer(CommandBuffer, parameterBuffer.Handle, parameterBuffer.Offset, parameterBuffer.Size, false) .Get(Cbs, parameterBuffer.Offset, parameterBuffer.Size, false).Value; @@ -632,13 +635,13 @@ namespace Ryujinx.Graphics.Vulkan { if (texture is TextureView srcTexture) { - var oldCullMode = _newState.CullMode; - var oldStencilTestEnable = _newState.StencilTestEnable; - var oldDepthTestEnable = _newState.DepthTestEnable; - var oldDepthWriteEnable = _newState.DepthWriteEnable; - var oldViewports = DynamicState.Viewports; - var oldViewportsCount = _newState.ViewportsCount; - var oldTopology = _topology; + CullModeFlags oldCullMode = _newState.CullMode; + bool oldStencilTestEnable = _newState.StencilTestEnable; + bool oldDepthTestEnable = _newState.DepthTestEnable; + bool oldDepthWriteEnable = _newState.DepthWriteEnable; + Array16 oldViewports = DynamicState.Viewports; + uint oldViewportsCount = _newState.ViewportsCount; + PrimitiveTopology oldTopology = _topology; _newState.CullMode = CullModeFlags.None; _newState.StencilTestEnable = false; @@ -710,11 +713,11 @@ namespace Ryujinx.Graphics.Vulkan { for (int index = 0; index < Constants.MaxRenderTargets; index++) { - ref var vkBlend = ref _newState.Internal.ColorBlendAttachmentState[index]; + ref PipelineColorBlendAttachmentState vkBlend = ref _newState.Internal.ColorBlendAttachmentState[index]; if (index == 0) { - var blendOp = blend.Op.Convert(); + BlendOp blendOp = blend.Op.Convert(); vkBlend = new PipelineColorBlendAttachmentState( blendEnable: true, @@ -751,7 +754,7 @@ namespace Ryujinx.Graphics.Vulkan public void SetBlendState(int index, BlendDescriptor blend) { - ref var vkBlend = ref _newState.Internal.ColorBlendAttachmentState[index]; + ref PipelineColorBlendAttachmentState vkBlend = ref _newState.Internal.ColorBlendAttachmentState[index]; if (blend.Enable) { @@ -919,7 +922,7 @@ namespace Ryujinx.Graphics.Vulkan { _topology = topology; - var vkTopology = Gd.TopologyRemap(topology).Convert(); + Silk.NET.Vulkan.PrimitiveTopology vkTopology = Gd.TopologyRemap(topology).Convert(); _newState.Topology = vkTopology; @@ -928,8 +931,8 @@ namespace Ryujinx.Graphics.Vulkan public void SetProgram(IProgram program) { - var internalProgram = (ShaderCollection)program; - var stages = internalProgram.GetInfos(); + ShaderCollection internalProgram = (ShaderCollection)program; + PipelineShaderStageCreateInfo[] stages = internalProgram.GetInfos(); _program = internalProgram; @@ -952,7 +955,7 @@ namespace Ryujinx.Graphics.Vulkan public void Specialize(in T data) where T : unmanaged { - var dataSpan = MemoryMarshal.AsBytes(MemoryMarshal.CreateReadOnlySpan(ref Unsafe.AsRef(in data), 1)); + ReadOnlySpan dataSpan = MemoryMarshal.AsBytes(MemoryMarshal.CreateReadOnlySpan(ref Unsafe.AsRef(in data), 1)); if (!dataSpan.SequenceEqual(_newState.SpecializationData.Span)) { @@ -986,8 +989,8 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < count; i++) { - ref var vkBlend = ref _newState.Internal.ColorBlendAttachmentState[i]; - var newMask = (ColorComponentFlags)componentMask[i]; + ref PipelineColorBlendAttachmentState vkBlend = ref _newState.Internal.ColorBlendAttachmentState[i]; + ColorComponentFlags newMask = (ColorComponentFlags)componentMask[i]; // When color write mask is 0, remove all blend state to help the pipeline cache. // Restore it when the mask becomes non-zero. @@ -1054,9 +1057,9 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < count; i++) { - var region = regions[i]; - var offset = new Offset2D(region.X, region.Y); - var extent = new Extent2D((uint)region.Width, (uint)region.Height); + Rectangle region = regions[i]; + Offset2D offset = new Offset2D(region.X, region.Y); + Extent2D extent = new Extent2D((uint)region.Width, (uint)region.Height); DynamicState.SetScissor(i, new Rect2D(offset, extent)); } @@ -1129,7 +1132,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < count; i++) { - var range = buffers[i]; + BufferRange range = buffers[i]; _transformFeedbackBuffers[i].Dispose(); @@ -1158,7 +1161,7 @@ namespace Ryujinx.Graphics.Vulkan public void SetVertexAttribs(ReadOnlySpan vertexAttribs) { - var formatCapabilities = Gd.FormatCapabilities; + FormatCapabilities formatCapabilities = Gd.FormatCapabilities; Span newVbScalarSizes = stackalloc int[Constants.MaxVertexBuffers]; @@ -1167,9 +1170,9 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < count; i++) { - var attribute = vertexAttribs[i]; - var rawIndex = attribute.BufferIndex; - var bufferIndex = attribute.IsZero ? 0 : rawIndex + 1; + VertexAttribDescriptor attribute = vertexAttribs[i]; + int rawIndex = attribute.BufferIndex; + int bufferIndex = attribute.IsZero ? 0 : rawIndex + 1; if (!attribute.IsZero) { @@ -1188,7 +1191,7 @@ namespace Ryujinx.Graphics.Vulkan { int dirtyBit = BitOperations.TrailingZeroCount(dirtyVbSizes); - ref var buffer = ref _vertexBuffers[dirtyBit + 1]; + ref VertexBufferState buffer = ref _vertexBuffers[dirtyBit + 1]; if (buffer.AttributeScalarAlignment != newVbScalarSizes[dirtyBit]) { @@ -1216,10 +1219,10 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < count; i++) { - var vertexBuffer = vertexBuffers[i]; + VertexBufferDescriptor vertexBuffer = vertexBuffers[i]; // TODO: Support divisor > 1 - var inputRate = vertexBuffer.Divisor != 0 ? VertexInputRate.Instance : VertexInputRate.Vertex; + VertexInputRate inputRate = vertexBuffer.Divisor != 0 ? VertexInputRate.Instance : VertexInputRate.Vertex; if (vertexBuffer.Buffer.Handle != BufferHandle.Null) { @@ -1253,7 +1256,7 @@ namespace Ryujinx.Graphics.Vulkan } } - ref var buffer = ref _vertexBuffers[binding]; + ref VertexBufferState buffer = ref _vertexBuffers[binding]; int oldScalarAlign = buffer.AttributeScalarAlignment; if (Gd.Capabilities.VertexBufferAlignment < 2 && @@ -1314,7 +1317,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < count; i++) { - var viewport = viewports[i]; + Viewport viewport = viewports[i]; DynamicState.SetViewport(i, new Silk.NET.Vulkan.Viewport( viewport.Region.X, @@ -1410,7 +1413,7 @@ namespace Ryujinx.Graphics.Vulkan continue; } - ref var vkBlend = ref _newState.Internal.ColorBlendAttachmentState[i]; + ref PipelineColorBlendAttachmentState vkBlend = ref _newState.Internal.ColorBlendAttachmentState[i]; for (int j = 0; j < i; j++) { @@ -1419,7 +1422,7 @@ namespace Ryujinx.Graphics.Vulkan if (colors[i] == colors[j]) { // Prefer the binding with no write mask. - ref var vkBlend2 = ref _newState.Internal.ColorBlendAttachmentState[j]; + ref PipelineColorBlendAttachmentState vkBlend2 = ref _newState.Internal.ColorBlendAttachmentState[j]; if (vkBlend.ColorWriteMask == 0) { colors[i] = null; @@ -1457,7 +1460,7 @@ namespace Ryujinx.Graphics.Vulkan protected void UpdatePipelineAttachmentFormats() { - var dstAttachmentFormats = _newState.Internal.AttachmentFormats.AsSpan(); + Span dstAttachmentFormats = _newState.Internal.AttachmentFormats.AsSpan(); FramebufferParams.AttachmentFormats.CopyTo(dstAttachmentFormats); _newState.Internal.AttachmentIntegerFormatMask = FramebufferParams.AttachmentIntegerFormatMask; _newState.Internal.LogicOpsAllowed = FramebufferParams.LogicOpsAllowed; @@ -1474,7 +1477,7 @@ namespace Ryujinx.Graphics.Vulkan protected unsafe void CreateRenderPass() { - var hasFramebuffer = FramebufferParams != null; + bool hasFramebuffer = FramebufferParams != null; EndRenderPass(); @@ -1679,7 +1682,7 @@ namespace Ryujinx.Graphics.Vulkan return false; } - var pipeline = pbp == PipelineBindPoint.Compute + Auto pipeline = pbp == PipelineBindPoint.Compute ? _newState.CreateComputePipeline(Gd, Device, _program, PipelineCache) : _newState.CreateGraphicsPipeline(Gd, Device, _program, PipelineCache, _renderPass.Get(Cbs).Value); @@ -1711,10 +1714,10 @@ namespace Ryujinx.Graphics.Vulkan { FramebufferParams.InsertLoadOpBarriers(Gd, Cbs); - var renderArea = new Rect2D(null, new Extent2D(FramebufferParams.Width, FramebufferParams.Height)); - var clearValue = new ClearValue(); + Rect2D renderArea = new Rect2D(null, new Extent2D(FramebufferParams.Width, FramebufferParams.Height)); + ClearValue clearValue = new ClearValue(); - var renderPassBeginInfo = new RenderPassBeginInfo + RenderPassBeginInfo renderPassBeginInfo = new RenderPassBeginInfo { SType = StructureType.RenderPassBeginInfo, RenderPass = _renderPass.Get(Cbs).Value, diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs b/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs index 8a895f927..69544e433 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs @@ -15,7 +15,7 @@ namespace Ryujinx.Graphics.Vulkan AttachmentDescription[] attachmentDescs = null; - var subpass = new SubpassDescription + SubpassDescription subpass = new SubpassDescription { PipelineBindPoint = PipelineBindPoint.Graphics, }; @@ -107,11 +107,11 @@ namespace Ryujinx.Graphics.Vulkan } } - var subpassDependency = CreateSubpassDependency(gd); + SubpassDependency subpassDependency = CreateSubpassDependency(gd); fixed (AttachmentDescription* pAttachmentDescs = attachmentDescs) { - var renderPassCreateInfo = new RenderPassCreateInfo + RenderPassCreateInfo renderPassCreateInfo = new RenderPassCreateInfo { SType = StructureType.RenderPassCreateInfo, PAttachments = pAttachmentDescs, @@ -122,7 +122,7 @@ namespace Ryujinx.Graphics.Vulkan DependencyCount = 1, }; - gd.Api.CreateRenderPass(device, in renderPassCreateInfo, null, out var renderPass).ThrowOnError(); + gd.Api.CreateRenderPass(device, in renderPassCreateInfo, null, out RenderPass renderPass).ThrowOnError(); return new DisposableRenderPass(gd.Api, device, renderPass); } @@ -130,7 +130,7 @@ namespace Ryujinx.Graphics.Vulkan public static SubpassDependency CreateSubpassDependency(VulkanRenderer gd) { - var (access, stages) = BarrierBatch.GetSubpassAccessSuperset(gd); + (AccessFlags access, PipelineStageFlags stages) = BarrierBatch.GetSubpassAccessSuperset(gd); return new SubpassDependency( 0, @@ -144,7 +144,7 @@ namespace Ryujinx.Graphics.Vulkan public unsafe static SubpassDependency2 CreateSubpassDependency2(VulkanRenderer gd) { - var (access, stages) = BarrierBatch.GetSubpassAccessSuperset(gd); + (AccessFlags access, PipelineStageFlags stages) = BarrierBatch.GetSubpassAccessSuperset(gd); return new SubpassDependency2( StructureType.SubpassDependency2, @@ -225,8 +225,8 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < vaCount; i++) { - var attribute = state.VertexAttribs[i]; - var bufferIndex = attribute.IsZero ? 0 : attribute.BufferIndex + 1; + VertexAttribDescriptor attribute = state.VertexAttribs[i]; + int bufferIndex = attribute.IsZero ? 0 : attribute.BufferIndex + 1; pipeline.Internal.VertexAttributeDescriptions[i] = new VertexInputAttributeDescription( (uint)i, @@ -245,11 +245,11 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < vbCount; i++) { - var vertexBuffer = state.VertexBuffers[i]; + BufferPipelineDescriptor vertexBuffer = state.VertexBuffers[i]; if (vertexBuffer.Enable) { - var inputRate = vertexBuffer.Divisor != 0 ? VertexInputRate.Instance : VertexInputRate.Vertex; + VertexInputRate inputRate = vertexBuffer.Divisor != 0 ? VertexInputRate.Instance : VertexInputRate.Vertex; int alignedStride = vertexBuffer.Stride; @@ -272,7 +272,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < Constants.MaxRenderTargets; i++) { - var blend = state.BlendDescriptors[i]; + BlendDescriptor blend = state.BlendDescriptors[i]; if (blend.Enable && state.ColorWriteMask[i] != 0) { diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineFull.cs b/src/Ryujinx.Graphics.Vulkan/PipelineFull.cs index 54d43bdba..965e131ee 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineFull.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineFull.cs @@ -34,7 +34,7 @@ namespace Ryujinx.Graphics.Vulkan private void CopyPendingQuery() { - foreach (var query in _pendingQueryCopies) + foreach (BufferedQuery query in _pendingQueryCopies) { query.PoolCopy(Cbs); } @@ -54,7 +54,7 @@ namespace Ryujinx.Graphics.Vulkan // We can't use CmdClearAttachments if not writing all components, // because on Vulkan, the pipeline state does not affect clears. // On proprietary Adreno drivers, CmdClearAttachments appears to execute out of order, so it's better to not use it at all. - var dstTexture = FramebufferParams.GetColorView(index); + TextureView dstTexture = FramebufferParams.GetColorView(index); if (dstTexture == null) { return; @@ -95,7 +95,7 @@ namespace Ryujinx.Graphics.Vulkan // We can't use CmdClearAttachments if not clearing all (mask is all ones, 0xFF) or none (mask is 0) of the stencil bits, // because on Vulkan, the pipeline state does not affect clears. // On proprietary Adreno drivers, CmdClearAttachments appears to execute out of order, so it's better to not use it at all. - var dstTexture = FramebufferParams.GetDepthStencilView(); + TextureView dstTexture = FramebufferParams.GetDepthStencilView(); if (dstTexture == null) { return; @@ -246,7 +246,7 @@ namespace Ryujinx.Graphics.Vulkan AutoFlush.RegisterFlush(DrawCount); EndRenderPass(); - foreach ((var queryPool, _) in _activeQueries) + foreach ((QueryPool queryPool, _) in _activeQueries) { Gd.Api.CmdEndQuery(CommandBuffer, queryPool, 0); } @@ -271,7 +271,7 @@ namespace Ryujinx.Graphics.Vulkan _activeBufferMirrors.Clear(); - foreach ((var queryPool, var isOcclusion) in _activeQueries) + foreach ((QueryPool queryPool, bool isOcclusion) in _activeQueries) { bool isPrecise = Gd.Capabilities.SupportsPreciseOcclusionQueries && isOcclusion; diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCache.cs b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCache.cs index 5d0cada96..8f1b34b0c 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCache.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCache.cs @@ -25,7 +25,7 @@ namespace Ryujinx.Graphics.Vulkan if (SetDescriptors != null) { - foreach (var setDescriptor in SetDescriptors) + foreach (ResourceDescriptorCollection setDescriptor in SetDescriptors) { hasher.Add(setDescriptor); } @@ -81,7 +81,7 @@ namespace Ryujinx.Graphics.Vulkan ReadOnlyCollection setDescriptors, bool usePushDescriptors) { - var key = new PlceKey(setDescriptors, usePushDescriptors); + PlceKey key = new PlceKey(setDescriptors, usePushDescriptors); return _plces.GetOrAdd(key, newKey => new PipelineLayoutCacheEntry(gd, device, setDescriptors, usePushDescriptors)); } @@ -90,7 +90,7 @@ namespace Ryujinx.Graphics.Vulkan { if (disposing) { - foreach (var plce in _plces.Values) + foreach (PipelineLayoutCacheEntry plce in _plces.Values) { plce.Dispose(); } diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCacheEntry.cs b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCacheEntry.cs index ae296b033..3c78a3ec1 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCacheEntry.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCacheEntry.cs @@ -114,7 +114,7 @@ namespace Ryujinx.Graphics.Vulkan { int count = 0; - foreach (var descriptor in setDescriptors[setIndex].Descriptors) + foreach (ResourceDescriptor descriptor in setDescriptors[setIndex].Descriptors) { count += descriptor.Count; } @@ -148,11 +148,11 @@ namespace Ryujinx.Graphics.Vulkan public Auto GetNewDescriptorSetCollection(int setIndex, out bool isNew) { - var list = _currentDsCache[setIndex]; + List> list = _currentDsCache[setIndex]; int index = _dsCacheCursor[setIndex]++; if (index == list.Count) { - var dsc = _descriptorSetManager.AllocateDescriptorSet( + Auto dsc = _descriptorSetManager.AllocateDescriptorSet( _gd.Api, DescriptorSetLayouts[setIndex], _poolSizes[setIndex], @@ -173,8 +173,8 @@ namespace Ryujinx.Graphics.Vulkan { FreeCompletedManualDescriptorSets(); - var list = _manualDsCache[setIndex] ??= new(); - var span = CollectionsMarshal.AsSpan(list); + List list = _manualDsCache[setIndex] ??= new(); + Span span = CollectionsMarshal.AsSpan(list); Queue freeQueue = _freeManualDsCacheEntries[setIndex]; @@ -195,7 +195,7 @@ namespace Ryujinx.Graphics.Vulkan } // Otherwise create a new descriptor set, and add to our pending queue for command buffer consumption tracking. - var dsc = _descriptorSetManager.AllocateDescriptorSet( + Auto dsc = _descriptorSetManager.AllocateDescriptorSet( _gd.Api, DescriptorSetLayouts[setIndex], _poolSizes[setIndex], @@ -214,9 +214,9 @@ namespace Ryujinx.Graphics.Vulkan { FreeCompletedManualDescriptorSets(); - var list = _manualDsCache[setIndex]; - var span = CollectionsMarshal.AsSpan(list); - ref var entry = ref span[cacheIndex]; + List list = _manualDsCache[setIndex]; + Span span = CollectionsMarshal.AsSpan(list); + ref ManualDescriptorSetEntry entry = ref span[cacheIndex]; uint cbMask = 1u << cbs.CommandBufferIndex; @@ -231,15 +231,15 @@ namespace Ryujinx.Graphics.Vulkan private void FreeCompletedManualDescriptorSets() { FenceHolder signalledFence = null; - while (_pendingManualDsConsumptions.TryPeek(out var pds) && (pds.Fence == signalledFence || pds.Fence.IsSignaled())) + while (_pendingManualDsConsumptions.TryPeek(out PendingManualDsConsumption pds) && (pds.Fence == signalledFence || pds.Fence.IsSignaled())) { signalledFence = pds.Fence; // Already checked - don't need to do it again. - var dequeued = _pendingManualDsConsumptions.Dequeue(); + PendingManualDsConsumption dequeued = _pendingManualDsConsumptions.Dequeue(); Debug.Assert(dequeued.Fence == pds.Fence); pds.Fence.Put(); - var span = CollectionsMarshal.AsSpan(_manualDsCache[dequeued.SetIndex]); - ref var entry = ref span[dequeued.CacheIndex]; + Span span = CollectionsMarshal.AsSpan(_manualDsCache[dequeued.SetIndex]); + ref ManualDescriptorSetEntry entry = ref span[dequeued.CacheIndex]; entry.CbRefMask &= ~(1u << dequeued.CommandBufferIndex); if (!entry.InUse && entry.CbRefMask == 0) @@ -252,8 +252,8 @@ namespace Ryujinx.Graphics.Vulkan public void ReleaseManualDescriptorSetCollection(int setIndex, int cacheIndex) { - var list = _manualDsCache[setIndex]; - var span = CollectionsMarshal.AsSpan(list); + List list = _manualDsCache[setIndex]; + Span span = CollectionsMarshal.AsSpan(list); span[cacheIndex].InUse = false; @@ -366,7 +366,7 @@ namespace Ryujinx.Graphics.Vulkan _gd.Api.DestroyDescriptorSetLayout(_device, DescriptorSetLayouts[i], null); } - while (_pendingManualDsConsumptions.TryDequeue(out var pds)) + while (_pendingManualDsConsumptions.TryDequeue(out PendingManualDsConsumption pds)) { pds.Fence.Put(); } diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs index 8d7815616..ce2d90e6b 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs @@ -83,7 +83,7 @@ namespace Ryujinx.Graphics.Vulkan updateAfterBindFlags[setIndex] = true; } - var descriptorSetLayoutCreateInfo = new DescriptorSetLayoutCreateInfo + DescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo = new DescriptorSetLayoutCreateInfo { SType = StructureType.DescriptorSetLayoutCreateInfo, PBindings = pLayoutBindings, @@ -99,7 +99,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (DescriptorSetLayout* pLayouts = layouts) { - var pipelineLayoutCreateInfo = new PipelineLayoutCreateInfo + PipelineLayoutCreateInfo pipelineLayoutCreateInfo = new PipelineLayoutCreateInfo { SType = StructureType.PipelineLayoutCreateInfo, PSetLayouts = pLayouts, diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs index a726b9edb..5512e7b1d 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs @@ -333,12 +333,12 @@ namespace Ryujinx.Graphics.Vulkan ShaderCollection program, PipelineCache cache) { - if (program.TryGetComputePipeline(ref SpecializationData, out var pipeline)) + if (program.TryGetComputePipeline(ref SpecializationData, out Auto pipeline)) { return pipeline; } - var pipelineCreateInfo = new ComputePipelineCreateInfo + ComputePipelineCreateInfo pipelineCreateInfo = new ComputePipelineCreateInfo { SType = StructureType.ComputePipelineCreateInfo, Stage = Stages[0], @@ -350,7 +350,7 @@ namespace Ryujinx.Graphics.Vulkan bool hasSpec = program.SpecDescriptions != null; - var desc = hasSpec ? program.SpecDescriptions[0] : SpecDescription.Empty; + SpecDescription desc = hasSpec ? program.SpecDescriptions[0] : SpecDescription.Empty; if (hasSpec && SpecializationData.Length < (int)desc.Info.DataSize) { @@ -386,7 +386,7 @@ namespace Ryujinx.Graphics.Vulkan RenderPass renderPass, bool throwOnError = false) { - if (program.TryGetGraphicsPipeline(ref Internal, out var pipeline)) + if (program.TryGetGraphicsPipeline(ref Internal, out Auto pipeline)) { return pipeline; } @@ -405,7 +405,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (VertexInputBindingDescription* pVertexBindingDescriptions = &Internal.VertexBindingDescriptions[0]) fixed (PipelineColorBlendAttachmentState* pColorBlendAttachmentState = &Internal.ColorBlendAttachmentState[0]) { - var vertexInputState = new PipelineVertexInputStateCreateInfo + PipelineVertexInputStateCreateInfo vertexInputState = new PipelineVertexInputStateCreateInfo { SType = StructureType.PipelineVertexInputStateCreateInfo, VertexAttributeDescriptionCount = VertexAttributeDescriptionsCount, @@ -442,20 +442,20 @@ namespace Ryujinx.Graphics.Vulkan primitiveRestartEnable &= topologySupportsRestart; - var inputAssemblyState = new PipelineInputAssemblyStateCreateInfo + PipelineInputAssemblyStateCreateInfo inputAssemblyState = new PipelineInputAssemblyStateCreateInfo { SType = StructureType.PipelineInputAssemblyStateCreateInfo, PrimitiveRestartEnable = primitiveRestartEnable, Topology = HasTessellationControlShader ? PrimitiveTopology.PatchList : Topology, }; - var tessellationState = new PipelineTessellationStateCreateInfo + PipelineTessellationStateCreateInfo tessellationState = new PipelineTessellationStateCreateInfo { SType = StructureType.PipelineTessellationStateCreateInfo, PatchControlPoints = PatchControlPoints, }; - var rasterizationState = new PipelineRasterizationStateCreateInfo + PipelineRasterizationStateCreateInfo rasterizationState = new PipelineRasterizationStateCreateInfo { SType = StructureType.PipelineRasterizationStateCreateInfo, DepthClampEnable = DepthClampEnable, @@ -467,7 +467,7 @@ namespace Ryujinx.Graphics.Vulkan DepthBiasEnable = DepthBiasEnable, }; - var viewportState = new PipelineViewportStateCreateInfo + PipelineViewportStateCreateInfo viewportState = new PipelineViewportStateCreateInfo { SType = StructureType.PipelineViewportStateCreateInfo, ViewportCount = ViewportsCount, @@ -476,7 +476,7 @@ namespace Ryujinx.Graphics.Vulkan if (gd.Capabilities.SupportsDepthClipControl) { - var viewportDepthClipControlState = new PipelineViewportDepthClipControlCreateInfoEXT + PipelineViewportDepthClipControlCreateInfoEXT viewportDepthClipControlState = new PipelineViewportDepthClipControlCreateInfoEXT { SType = StructureType.PipelineViewportDepthClipControlCreateInfoExt, NegativeOneToOne = DepthMode, @@ -485,7 +485,7 @@ namespace Ryujinx.Graphics.Vulkan viewportState.PNext = &viewportDepthClipControlState; } - var multisampleState = new PipelineMultisampleStateCreateInfo + PipelineMultisampleStateCreateInfo multisampleState = new PipelineMultisampleStateCreateInfo { SType = StructureType.PipelineMultisampleStateCreateInfo, SampleShadingEnable = false, @@ -495,19 +495,19 @@ namespace Ryujinx.Graphics.Vulkan AlphaToOneEnable = AlphaToOneEnable, }; - var stencilFront = new StencilOpState( + StencilOpState stencilFront = new StencilOpState( StencilFrontFailOp, StencilFrontPassOp, StencilFrontDepthFailOp, StencilFrontCompareOp); - var stencilBack = new StencilOpState( + StencilOpState stencilBack = new StencilOpState( StencilBackFailOp, StencilBackPassOp, StencilBackDepthFailOp, StencilBackCompareOp); - var depthStencilState = new PipelineDepthStencilStateCreateInfo + PipelineDepthStencilStateCreateInfo depthStencilState = new PipelineDepthStencilStateCreateInfo { SType = StructureType.PipelineDepthStencilStateCreateInfo, DepthTestEnable = DepthTestEnable, @@ -544,7 +544,7 @@ namespace Ryujinx.Graphics.Vulkan // so we need to force disable them here. bool logicOpEnable = LogicOpEnable && (gd.Vendor == Vendor.Nvidia || Internal.LogicOpsAllowed); - var colorBlendState = new PipelineColorBlendStateCreateInfo + PipelineColorBlendStateCreateInfo colorBlendState = new PipelineColorBlendStateCreateInfo { SType = StructureType.PipelineColorBlendStateCreateInfo, LogicOpEnable = logicOpEnable, @@ -595,7 +595,7 @@ namespace Ryujinx.Graphics.Vulkan dynamicStates[dynamicStatesCount++] = DynamicState.AttachmentFeedbackLoopEnableExt; } - var pipelineDynamicStateCreateInfo = new PipelineDynamicStateCreateInfo + PipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo = new PipelineDynamicStateCreateInfo { SType = StructureType.PipelineDynamicStateCreateInfo, DynamicStateCount = (uint)dynamicStatesCount, @@ -619,7 +619,7 @@ namespace Ryujinx.Graphics.Vulkan } } - var pipelineCreateInfo = new GraphicsPipelineCreateInfo + GraphicsPipelineCreateInfo pipelineCreateInfo = new GraphicsPipelineCreateInfo { SType = StructureType.GraphicsPipelineCreateInfo, Flags = flags, @@ -677,12 +677,12 @@ namespace Ryujinx.Graphics.Vulkan for (int index = 0; index < VertexAttributeDescriptionsCount; index++) { - var attribute = Internal.VertexAttributeDescriptions[index]; + VertexInputAttributeDescription attribute = Internal.VertexAttributeDescriptions[index]; int vbIndex = GetVertexBufferIndex(attribute.Binding); if (vbIndex >= 0) { - ref var vb = ref Internal.VertexBindingDescriptions[vbIndex]; + ref VertexInputBindingDescription vb = ref Internal.VertexBindingDescriptions[vbIndex]; Format format = attribute.Format; diff --git a/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs b/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs index 5d48a6622..06e14a9d9 100644 --- a/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs +++ b/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs @@ -4,6 +4,7 @@ using Silk.NET.Vulkan; using System; using System.Runtime.InteropServices; using System.Threading; +using Buffer = Silk.NET.Vulkan.Buffer; namespace Ryujinx.Graphics.Vulkan.Queries { @@ -44,7 +45,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries QueryPipelineStatisticFlags flags = type == CounterType.PrimitivesGenerated ? QueryPipelineStatisticFlags.GeometryShaderPrimitivesBit : 0; - var queryPoolCreateInfo = new QueryPoolCreateInfo + QueryPoolCreateInfo queryPoolCreateInfo = new QueryPoolCreateInfo { SType = StructureType.QueryPoolCreateInfo, QueryCount = 1, @@ -55,7 +56,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries gd.Api.CreateQueryPool(device, in queryPoolCreateInfo, null, out _queryPool).ThrowOnError(); } - var buffer = gd.BufferManager.Create(gd, sizeof(long), forConditionalRendering: true); + BufferHolder buffer = gd.BufferManager.Create(gd, sizeof(long), forConditionalRendering: true); _bufferMap = buffer.Map(0, sizeof(long)); _defaultValue = result32Bit ? DefaultValueInt : DefaultValue; @@ -183,7 +184,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries public void PoolCopy(CommandBufferScoped cbs) { - var buffer = _buffer.GetBuffer(cbs.CommandBuffer, true).Get(cbs, 0, sizeof(long), true).Value; + Buffer buffer = _buffer.GetBuffer(cbs.CommandBuffer, true).Get(cbs, 0, sizeof(long), true).Value; QueryResultFlags flags = QueryResultFlags.ResultWaitBit; diff --git a/src/Ryujinx.Graphics.Vulkan/Queries/Counters.cs b/src/Ryujinx.Graphics.Vulkan/Queries/Counters.cs index c07e1c09c..c0e848f03 100644 --- a/src/Ryujinx.Graphics.Vulkan/Queries/Counters.cs +++ b/src/Ryujinx.Graphics.Vulkan/Queries/Counters.cs @@ -26,7 +26,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries public void ResetCounterPool() { - foreach (var queue in _counterQueues) + foreach (CounterQueue queue in _counterQueues) { queue.ResetCounterPool(); } @@ -49,7 +49,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries public void Update() { - foreach (var queue in _counterQueues) + foreach (CounterQueue queue in _counterQueues) { queue.Flush(false); } @@ -62,7 +62,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries public void Dispose() { - foreach (var queue in _counterQueues) + foreach (CounterQueue queue in _counterQueues) { queue.Dispose(); } diff --git a/src/Ryujinx.Graphics.Vulkan/RenderPassCacheKey.cs b/src/Ryujinx.Graphics.Vulkan/RenderPassCacheKey.cs index 7c57b8feb..c3c3c2c61 100644 --- a/src/Ryujinx.Graphics.Vulkan/RenderPassCacheKey.cs +++ b/src/Ryujinx.Graphics.Vulkan/RenderPassCacheKey.cs @@ -22,7 +22,7 @@ namespace Ryujinx.Graphics.Vulkan if (_colors != null) { - foreach (var color in _colors) + foreach (TextureView color in _colors) { hc.Add(color); } diff --git a/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs b/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs index a364c5716..bca18e0ee 100644 --- a/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs @@ -47,14 +47,14 @@ namespace Ryujinx.Graphics.Vulkan AttachmentDescription[] attachmentDescs = null; - var subpass = new SubpassDescription + SubpassDescription subpass = new SubpassDescription { PipelineBindPoint = PipelineBindPoint.Graphics, }; AttachmentReference* attachmentReferences = stackalloc AttachmentReference[MaxAttachments]; - var hasFramebuffer = fb != null; + bool hasFramebuffer = fb != null; if (hasFramebuffer && fb.AttachmentsCount != 0) { @@ -110,11 +110,11 @@ namespace Ryujinx.Graphics.Vulkan } } - var subpassDependency = PipelineConverter.CreateSubpassDependency(gd); + SubpassDependency subpassDependency = PipelineConverter.CreateSubpassDependency(gd); fixed (AttachmentDescription* pAttachmentDescs = attachmentDescs) { - var renderPassCreateInfo = new RenderPassCreateInfo + RenderPassCreateInfo renderPassCreateInfo = new RenderPassCreateInfo { SType = StructureType.RenderPassCreateInfo, PAttachments = pAttachmentDescs, @@ -125,7 +125,7 @@ namespace Ryujinx.Graphics.Vulkan DependencyCount = 1, }; - gd.Api.CreateRenderPass(device, in renderPassCreateInfo, null, out var renderPass).ThrowOnError(); + gd.Api.CreateRenderPass(device, in renderPassCreateInfo, null, out RenderPass renderPass).ThrowOnError(); _renderPass = new Auto(new DisposableRenderPass(gd.Api, device, renderPass)); } @@ -134,9 +134,9 @@ namespace Ryujinx.Graphics.Vulkan // Register this render pass with all render target views. - var textures = fb.GetAttachmentViews(); + TextureView[] textures = fb.GetAttachmentViews(); - foreach (var texture in textures) + foreach (TextureView texture in textures) { texture.AddRenderPass(key, this); } @@ -149,7 +149,7 @@ namespace Ryujinx.Graphics.Vulkan public Auto GetFramebuffer(VulkanRenderer gd, CommandBufferScoped cbs, FramebufferParams fb) { - var key = new FramebufferCacheKey(fb.Width, fb.Height, fb.Layers); + FramebufferCacheKey key = new FramebufferCacheKey(fb.Width, fb.Height, fb.Layers); if (!_framebuffers.TryGetValue(ref key, out Auto result)) { @@ -201,14 +201,14 @@ namespace Ryujinx.Graphics.Vulkan { // Dispose all framebuffers. - foreach (var fb in _framebuffers.Values) + foreach (Auto fb in _framebuffers.Values) { fb.Dispose(); } // Notify all texture views that this render pass has been disposed. - foreach (var texture in _textures) + foreach (TextureView texture in _textures) { texture.RemoveRenderPass(_key); } diff --git a/src/Ryujinx.Graphics.Vulkan/ResourceArray.cs b/src/Ryujinx.Graphics.Vulkan/ResourceArray.cs index f96b4a845..c97676858 100644 --- a/src/Ryujinx.Graphics.Vulkan/ResourceArray.cs +++ b/src/Ryujinx.Graphics.Vulkan/ResourceArray.cs @@ -42,7 +42,7 @@ namespace Ryujinx.Graphics.Vulkan return true; } - var dsc = program.GetNewManualDescriptorSetCollection(cbs, setIndex, out _cachedDscIndex).Get(cbs); + DescriptorSetCollection dsc = program.GetNewManualDescriptorSetCollection(cbs, setIndex, out _cachedDscIndex).Get(cbs); sets = dsc.GetSets(); diff --git a/src/Ryujinx.Graphics.Vulkan/ResourceLayoutBuilder.cs b/src/Ryujinx.Graphics.Vulkan/ResourceLayoutBuilder.cs index 730a0a2f9..ff0ed30af 100644 --- a/src/Ryujinx.Graphics.Vulkan/ResourceLayoutBuilder.cs +++ b/src/Ryujinx.Graphics.Vulkan/ResourceLayoutBuilder.cs @@ -42,8 +42,8 @@ namespace Ryujinx.Graphics.Vulkan public ResourceLayout Build() { - var descriptors = new ResourceDescriptorCollection[TotalSets]; - var usages = new ResourceUsageCollection[TotalSets]; + ResourceDescriptorCollection[] descriptors = new ResourceDescriptorCollection[TotalSets]; + ResourceUsageCollection[] usages = new ResourceUsageCollection[TotalSets]; for (int index = 0; index < TotalSets; index++) { diff --git a/src/Ryujinx.Graphics.Vulkan/SamplerHolder.cs b/src/Ryujinx.Graphics.Vulkan/SamplerHolder.cs index 7f37ab139..cf8874e1a 100644 --- a/src/Ryujinx.Graphics.Vulkan/SamplerHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/SamplerHolder.cs @@ -26,9 +26,9 @@ namespace Ryujinx.Graphics.Vulkan maxLod = 0.25f; } - var borderColor = GetConstrainedBorderColor(info.BorderColor, out var cantConstrain); + BorderColor borderColor = GetConstrainedBorderColor(info.BorderColor, out bool cantConstrain); - var samplerCreateInfo = new Silk.NET.Vulkan.SamplerCreateInfo + Silk.NET.Vulkan.SamplerCreateInfo samplerCreateInfo = new Silk.NET.Vulkan.SamplerCreateInfo { SType = StructureType.SamplerCreateInfo, MagFilter = info.MagFilter.Convert(), @@ -52,7 +52,7 @@ namespace Ryujinx.Graphics.Vulkan if (cantConstrain && gd.Capabilities.SupportsCustomBorderColor) { - var color = new ClearColorValue( + ClearColorValue color = new ClearColorValue( info.BorderColor.Red, info.BorderColor.Green, info.BorderColor.Blue, @@ -68,7 +68,7 @@ namespace Ryujinx.Graphics.Vulkan samplerCreateInfo.BorderColor = BorderColor.FloatCustomExt; } - gd.Api.CreateSampler(device, in samplerCreateInfo, null, out var sampler).ThrowOnError(); + gd.Api.CreateSampler(device, in samplerCreateInfo, null, out Sampler sampler).ThrowOnError(); _sampler = new Auto(new DisposableSampler(gd.Api, device, sampler)); } diff --git a/src/Ryujinx.Graphics.Vulkan/Shader.cs b/src/Ryujinx.Graphics.Vulkan/Shader.cs index 79e2f712a..524939311 100644 --- a/src/Ryujinx.Graphics.Vulkan/Shader.cs +++ b/src/Ryujinx.Graphics.Vulkan/Shader.cs @@ -7,6 +7,7 @@ using System; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; +using Result = shaderc.Result; namespace Ryujinx.Graphics.Vulkan { @@ -58,7 +59,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (byte* pCode = spirv) { - var shaderModuleCreateInfo = new ShaderModuleCreateInfo + ShaderModuleCreateInfo shaderModuleCreateInfo = new ShaderModuleCreateInfo { SType = StructureType.ShaderModuleCreateInfo, CodeSize = (uint)spirv.Length, @@ -87,7 +88,7 @@ namespace Ryujinx.Graphics.Vulkan options.SetTargetEnvironment(TargetEnvironment.Vulkan, EnvironmentVersion.Vulkan_1_2); Compiler compiler = new(options); - var scr = compiler.Compile(glsl, "Ryu", GetShaderCShaderStage(stage)); + Result scr = compiler.Compile(glsl, "Ryu", GetShaderCShaderStage(stage)); lock (_shaderOptionsLock) { @@ -101,7 +102,7 @@ namespace Ryujinx.Graphics.Vulkan return null; } - var spirvBytes = new Span((void*)scr.CodePointer, (int)scr.CodeLength); + Span spirvBytes = new Span((void*)scr.CodePointer, (int)scr.CodeLength); byte[] code = new byte[(scr.CodeLength + 3) & ~3]; diff --git a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs index 436914330..5d35bbbed 100644 --- a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs +++ b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs @@ -81,7 +81,7 @@ namespace Ryujinx.Graphics.Vulkan gd.Shaders.Add(this); - var internalShaders = new Shader[shaders.Length]; + Shader[] internalShaders = new Shader[shaders.Length]; _infos = new PipelineShaderStageCreateInfo[shaders.Length]; @@ -93,7 +93,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < shaders.Length; i++) { - var shader = new Shader(gd.Api, device, shaders[i]); + Shader shader = new Shader(gd.Api, device, shaders[i]); stages |= 1u << shader.StageFlags switch { @@ -173,7 +173,7 @@ namespace Ryujinx.Graphics.Vulkan // Can't use any of the reserved usages. for (int i = 0; i < uniformUsage.Count; i++) { - var binding = uniformUsage[i].Binding; + int binding = uniformUsage[i].Binding; if (reserved.Contains(binding) || binding >= Constants.MaxPushDescriptorBinding || @@ -203,7 +203,7 @@ namespace Ryujinx.Graphics.Vulkan // The reserved bindings were selected when determining if push descriptors could be used. int[] reserved = gd.GetPushDescriptorReservedBindings(false); - var result = new ResourceDescriptorCollection[sets.Count]; + ResourceDescriptorCollection[] result = new ResourceDescriptorCollection[sets.Count]; for (int i = 0; i < sets.Count; i++) { @@ -212,7 +212,7 @@ namespace Ryujinx.Graphics.Vulkan // Push descriptors apply here. Remove reserved bindings. ResourceDescriptorCollection original = sets[i]; - var pdUniforms = new ResourceDescriptor[original.Descriptors.Count]; + ResourceDescriptor[] pdUniforms = new ResourceDescriptor[original.Descriptors.Count]; int j = 0; foreach (ResourceDescriptor descriptor in original.Descriptors) @@ -364,7 +364,7 @@ namespace Ryujinx.Graphics.Vulkan private DescriptorSetTemplate[] BuildTemplates(bool usePushDescriptors) { - var templates = new DescriptorSetTemplate[BindingSegments.Length]; + DescriptorSetTemplate[] templates = new DescriptorSetTemplate[BindingSegments.Length]; for (int setIndex = 0; setIndex < BindingSegments.Length; setIndex++) { @@ -433,9 +433,9 @@ namespace Ryujinx.Graphics.Vulkan PipelineStageFlags buffer = PipelineStageFlags.None; PipelineStageFlags texture = PipelineStageFlags.None; - foreach (var set in setUsages) + foreach (ResourceUsageCollection set in setUsages) { - foreach (var range in set.Usages) + foreach (ResourceUsage range in set.Usages) { if (range.Write) { @@ -498,7 +498,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < _shaders.Length; i++) { - var shader = _shaders[i]; + Shader shader = _shaders[i]; if (shader.CompileStatus != ProgramLinkStatus.Success) { @@ -557,12 +557,12 @@ namespace Ryujinx.Graphics.Vulkan // First, we need to create a render pass object compatible with the one that will be used at runtime. // The active attachment formats have been provided by the abstraction layer. - var renderPass = CreateDummyRenderPass(); + DisposableRenderPass renderPass = CreateDummyRenderPass(); PipelineState pipeline = _state.ToVulkanPipelineState(_gd); // Copy the shader stage info to the pipeline. - var stages = pipeline.Stages.AsSpan(); + Span stages = pipeline.Stages.AsSpan(); for (int i = 0; i < _shaders.Length; i++) { diff --git a/src/Ryujinx.Graphics.Vulkan/SpecInfo.cs b/src/Ryujinx.Graphics.Vulkan/SpecInfo.cs index ecb2abfc6..200fe658b 100644 --- a/src/Ryujinx.Graphics.Vulkan/SpecInfo.cs +++ b/src/Ryujinx.Graphics.Vulkan/SpecInfo.cs @@ -29,7 +29,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < Map.Length; ++i) { - var typeSize = SizeOf(description[i].Type); + uint typeSize = SizeOf(description[i].Type); Map[i] = new SpecializationMapEntry(description[i].Id, structSize, typeSize); structSize += typeSize; } @@ -89,7 +89,7 @@ namespace Ryujinx.Graphics.Vulkan _data = new byte[data.Length]; data.CopyTo(_data); - var hc = new HashCode(); + HashCode hc = new HashCode(); hc.AddBytes(data); _hash = hc.ToHashCode(); } diff --git a/src/Ryujinx.Graphics.Vulkan/StagingBuffer.cs b/src/Ryujinx.Graphics.Vulkan/StagingBuffer.cs index 90a47bb67..6470354cf 100644 --- a/src/Ryujinx.Graphics.Vulkan/StagingBuffer.cs +++ b/src/Ryujinx.Graphics.Vulkan/StagingBuffer.cs @@ -107,8 +107,8 @@ namespace Ryujinx.Graphics.Vulkan private void PushDataImpl(CommandBufferScoped cbs, BufferHolder dst, int dstOffset, ReadOnlySpan data) { - var srcBuffer = _buffer.GetBuffer(); - var dstBuffer = dst.GetBuffer(cbs.CommandBuffer, dstOffset, data.Length, true); + Auto srcBuffer = _buffer.GetBuffer(); + Auto dstBuffer = dst.GetBuffer(cbs.CommandBuffer, dstOffset, data.Length, true); int offset = _freeOffset; int capacity = BufferSize - offset; @@ -242,7 +242,7 @@ namespace Ryujinx.Graphics.Vulkan private bool WaitFreeCompleted(CommandBufferPool cbp) { - if (_pendingCopies.TryPeek(out var pc)) + if (_pendingCopies.TryPeek(out PendingCopy pc)) { if (!pc.Fence.IsSignaled()) { @@ -254,7 +254,7 @@ namespace Ryujinx.Graphics.Vulkan pc.Fence.Wait(); } - var dequeued = _pendingCopies.Dequeue(); + PendingCopy dequeued = _pendingCopies.Dequeue(); Debug.Assert(dequeued.Fence == pc.Fence); _freeSize += pc.Size; pc.Fence.Put(); @@ -266,10 +266,10 @@ namespace Ryujinx.Graphics.Vulkan public void FreeCompleted() { FenceHolder signalledFence = null; - while (_pendingCopies.TryPeek(out var pc) && (pc.Fence == signalledFence || pc.Fence.IsSignaled())) + while (_pendingCopies.TryPeek(out PendingCopy pc) && (pc.Fence == signalledFence || pc.Fence.IsSignaled())) { signalledFence = pc.Fence; // Already checked - don't need to do it again. - var dequeued = _pendingCopies.Dequeue(); + PendingCopy dequeued = _pendingCopies.Dequeue(); Debug.Assert(dequeued.Fence == pc.Fence); _freeSize += pc.Size; pc.Fence.Put(); @@ -282,7 +282,7 @@ namespace Ryujinx.Graphics.Vulkan { _gd.BufferManager.Delete(Handle); - while (_pendingCopies.TryDequeue(out var pc)) + while (_pendingCopies.TryDequeue(out PendingCopy pc)) { pc.Fence.Put(); } diff --git a/src/Ryujinx.Graphics.Vulkan/TextureArray.cs b/src/Ryujinx.Graphics.Vulkan/TextureArray.cs index 99238b1f5..74129da92 100644 --- a/src/Ryujinx.Graphics.Vulkan/TextureArray.cs +++ b/src/Ryujinx.Graphics.Vulkan/TextureArray.cs @@ -148,8 +148,8 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < textures.Length; i++) { - ref var texture = ref textures[i]; - ref var refs = ref _textureRefs[i]; + ref DescriptorImageInfo texture = ref textures[i]; + ref TextureRef refs = ref _textureRefs[i]; if (i > 0 && _textureRefs[i - 1].View == refs.View && _textureRefs[i - 1].Sampler == refs.Sampler) { diff --git a/src/Ryujinx.Graphics.Vulkan/TextureCopy.cs b/src/Ryujinx.Graphics.Vulkan/TextureCopy.cs index 45cddd772..ee306e9fa 100644 --- a/src/Ryujinx.Graphics.Vulkan/TextureCopy.cs +++ b/src/Ryujinx.Graphics.Vulkan/TextureCopy.cs @@ -34,8 +34,8 @@ namespace Ryujinx.Graphics.Vulkan return Math.Clamp(value, 0, max); } - var xy1 = new Offset3D(Clamp(extents.X1, width) >> level, Clamp(extents.Y1, height) >> level, 0); - var xy2 = new Offset3D(Clamp(extents.X2, width) >> level, Clamp(extents.Y2, height) >> level, 1); + Offset3D xy1 = new Offset3D(Clamp(extents.X1, width) >> level, Clamp(extents.Y1, height) >> level, 0); + Offset3D xy2 = new Offset3D(Clamp(extents.X2, width) >> level, Clamp(extents.Y2, height) >> level, 1); return (xy1, xy2); } @@ -50,10 +50,10 @@ namespace Ryujinx.Graphics.Vulkan dstAspectFlags = dstInfo.Format.ConvertAspectFlags(); } - var srcOffsets = new ImageBlit.SrcOffsetsBuffer(); - var dstOffsets = new ImageBlit.DstOffsetsBuffer(); + ImageBlit.SrcOffsetsBuffer srcOffsets = new ImageBlit.SrcOffsetsBuffer(); + ImageBlit.DstOffsetsBuffer dstOffsets = new ImageBlit.DstOffsetsBuffer(); - var filter = linearFilter && !dstInfo.Format.IsDepthOrStencil() ? Filter.Linear : Filter.Nearest; + Filter filter = linearFilter && !dstInfo.Format.IsDepthOrStencil() ? Filter.Linear : Filter.Nearest; TextureView.InsertImageBarrier( api, @@ -74,13 +74,13 @@ namespace Ryujinx.Graphics.Vulkan for (int level = 0; level < levels; level++) { - var srcSl = new ImageSubresourceLayers(srcAspectFlags, copySrcLevel, (uint)srcLayer, (uint)layers); - var dstSl = new ImageSubresourceLayers(dstAspectFlags, copyDstLevel, (uint)dstLayer, (uint)layers); + ImageSubresourceLayers srcSl = new ImageSubresourceLayers(srcAspectFlags, copySrcLevel, (uint)srcLayer, (uint)layers); + ImageSubresourceLayers dstSl = new ImageSubresourceLayers(dstAspectFlags, copyDstLevel, (uint)dstLayer, (uint)layers); (srcOffsets.Element0, srcOffsets.Element1) = ExtentsToOffset3D(srcRegion, srcInfo.Width, srcInfo.Height, level); (dstOffsets.Element0, dstOffsets.Element1) = ExtentsToOffset3D(dstRegion, dstInfo.Width, dstInfo.Height, level); - var region = new ImageBlit + ImageBlit region = new ImageBlit { SrcSubresource = srcSl, SrcOffsets = srcOffsets, @@ -299,13 +299,13 @@ namespace Ryujinx.Graphics.Vulkan break; } - var srcSl = new ImageSubresourceLayers( + ImageSubresourceLayers srcSl = new ImageSubresourceLayers( srcAspect, (uint)(srcViewLevel + srcLevel + level), (uint)(srcViewLayer + srcLayer), (uint)srcLayers); - var dstSl = new ImageSubresourceLayers( + ImageSubresourceLayers dstSl = new ImageSubresourceLayers( dstAspect, (uint)(dstViewLevel + dstLevel + level), (uint)(dstViewLayer + dstLayer), @@ -314,17 +314,17 @@ namespace Ryujinx.Graphics.Vulkan int copyWidth = sizeInBlocks ? BitUtils.DivRoundUp(width, blockWidth) : width; int copyHeight = sizeInBlocks ? BitUtils.DivRoundUp(height, blockHeight) : height; - var extent = new Extent3D((uint)copyWidth, (uint)copyHeight, (uint)srcDepth); + Extent3D extent = new Extent3D((uint)copyWidth, (uint)copyHeight, (uint)srcDepth); if (srcInfo.Samples > 1 && srcInfo.Samples != dstInfo.Samples) { - var region = new ImageResolve(srcSl, new Offset3D(0, 0, srcZ), dstSl, new Offset3D(0, 0, dstZ), extent); + ImageResolve region = new ImageResolve(srcSl, new Offset3D(0, 0, srcZ), dstSl, new Offset3D(0, 0, dstZ), extent); api.CmdResolveImage(commandBuffer, srcImage, ImageLayout.General, dstImage, ImageLayout.General, 1, in region); } else { - var region = new ImageCopy(srcSl, new Offset3D(0, 0, srcZ), dstSl, new Offset3D(0, 0, dstZ), extent); + ImageCopy region = new ImageCopy(srcSl, new Offset3D(0, 0, srcZ), dstSl, new Offset3D(0, 0, dstZ), extent); api.CmdCopyImage(commandBuffer, srcImage, ImageLayout.General, dstImage, ImageLayout.General, 1, in region); } @@ -360,10 +360,10 @@ namespace Ryujinx.Graphics.Vulkan TextureView src, TextureView dst) { - var dsAttachmentReference = new AttachmentReference2(StructureType.AttachmentReference2, null, 0, ImageLayout.General); - var dsResolveAttachmentReference = new AttachmentReference2(StructureType.AttachmentReference2, null, 1, ImageLayout.General); + AttachmentReference2 dsAttachmentReference = new AttachmentReference2(StructureType.AttachmentReference2, null, 0, ImageLayout.General); + AttachmentReference2 dsResolveAttachmentReference = new AttachmentReference2(StructureType.AttachmentReference2, null, 1, ImageLayout.General); - var subpassDsResolve = new SubpassDescriptionDepthStencilResolve + SubpassDescriptionDepthStencilResolve subpassDsResolve = new SubpassDescriptionDepthStencilResolve { SType = StructureType.SubpassDescriptionDepthStencilResolve, PDepthStencilResolveAttachment = &dsResolveAttachmentReference, @@ -371,7 +371,7 @@ namespace Ryujinx.Graphics.Vulkan StencilResolveMode = ResolveModeFlags.SampleZeroBit, }; - var subpass = new SubpassDescription2 + SubpassDescription2 subpass = new SubpassDescription2 { SType = StructureType.SubpassDescription2, PipelineBindPoint = PipelineBindPoint.Graphics, @@ -407,11 +407,11 @@ namespace Ryujinx.Graphics.Vulkan ImageLayout.General, ImageLayout.General); - var subpassDependency = PipelineConverter.CreateSubpassDependency2(gd); + SubpassDependency2 subpassDependency = PipelineConverter.CreateSubpassDependency2(gd); fixed (AttachmentDescription2* pAttachmentDescs = attachmentDescs) { - var renderPassCreateInfo = new RenderPassCreateInfo2 + RenderPassCreateInfo2 renderPassCreateInfo = new RenderPassCreateInfo2 { SType = StructureType.RenderPassCreateInfo2, PAttachments = pAttachmentDescs, @@ -422,19 +422,19 @@ namespace Ryujinx.Graphics.Vulkan DependencyCount = 1, }; - gd.Api.CreateRenderPass2(device, in renderPassCreateInfo, null, out var renderPass).ThrowOnError(); + gd.Api.CreateRenderPass2(device, in renderPassCreateInfo, null, out RenderPass renderPass).ThrowOnError(); - using var rp = new Auto(new DisposableRenderPass(gd.Api, device, renderPass)); + using Auto rp = new Auto(new DisposableRenderPass(gd.Api, device, renderPass)); ImageView* attachments = stackalloc ImageView[2]; - var srcView = src.GetImageViewForAttachment(); - var dstView = dst.GetImageViewForAttachment(); + Auto srcView = src.GetImageViewForAttachment(); + Auto dstView = dst.GetImageViewForAttachment(); attachments[0] = srcView.Get(cbs).Value; attachments[1] = dstView.Get(cbs).Value; - var framebufferCreateInfo = new FramebufferCreateInfo + FramebufferCreateInfo framebufferCreateInfo = new FramebufferCreateInfo { SType = StructureType.FramebufferCreateInfo, RenderPass = rp.Get(cbs).Value, @@ -445,13 +445,13 @@ namespace Ryujinx.Graphics.Vulkan Layers = (uint)src.Layers, }; - gd.Api.CreateFramebuffer(device, in framebufferCreateInfo, null, out var framebuffer).ThrowOnError(); - using var fb = new Auto(new DisposableFramebuffer(gd.Api, device, framebuffer), null, srcView, dstView); + gd.Api.CreateFramebuffer(device, in framebufferCreateInfo, null, out Framebuffer framebuffer).ThrowOnError(); + using Auto fb = new Auto(new DisposableFramebuffer(gd.Api, device, framebuffer), null, srcView, dstView); - var renderArea = new Rect2D(null, new Extent2D((uint)src.Info.Width, (uint)src.Info.Height)); - var clearValue = new ClearValue(); + Rect2D renderArea = new Rect2D(null, new Extent2D((uint)src.Info.Width, (uint)src.Info.Height)); + ClearValue clearValue = new ClearValue(); - var renderPassBeginInfo = new RenderPassBeginInfo + RenderPassBeginInfo renderPassBeginInfo = new RenderPassBeginInfo { SType = StructureType.RenderPassBeginInfo, RenderPass = rp.Get(cbs).Value, diff --git a/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs b/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs index 51ef528d4..53a80051f 100644 --- a/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs +++ b/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs @@ -79,23 +79,23 @@ namespace Ryujinx.Graphics.Vulkan bool isMsImageStorageSupported = gd.Capabilities.SupportsShaderStorageImageMultisample || !info.Target.IsMultisample(); - var format = _gd.FormatCapabilities.ConvertToVkFormat(info.Format, isMsImageStorageSupported); - var levels = (uint)info.Levels; - var layers = (uint)info.GetLayers(); - var depth = (uint)(info.Target == Target.Texture3D ? info.Depth : 1); + VkFormat format = _gd.FormatCapabilities.ConvertToVkFormat(info.Format, isMsImageStorageSupported); + uint levels = (uint)info.Levels; + uint layers = (uint)info.GetLayers(); + uint depth = (uint)(info.Target == Target.Texture3D ? info.Depth : 1); VkFormat = format; _depthOrLayers = info.GetDepthOrLayers(); - var type = info.Target.Convert(); + ImageType type = info.Target.Convert(); - var extent = new Extent3D((uint)info.Width, (uint)info.Height, depth); + Extent3D extent = new Extent3D((uint)info.Width, (uint)info.Height, depth); - var sampleCountFlags = ConvertToSampleCountFlags(gd.Capabilities.SupportedSampleCounts, (uint)info.Samples); + SampleCountFlags sampleCountFlags = ConvertToSampleCountFlags(gd.Capabilities.SupportedSampleCounts, (uint)info.Samples); - var usage = GetImageUsage(info.Format, gd.Capabilities, isMsImageStorageSupported, true); + ImageUsageFlags usage = GetImageUsage(info.Format, gd.Capabilities, isMsImageStorageSupported, true); - var flags = ImageCreateFlags.CreateMutableFormatBit | ImageCreateFlags.CreateExtendedUsageBit; + ImageCreateFlags flags = ImageCreateFlags.CreateMutableFormatBit | ImageCreateFlags.CreateExtendedUsageBit; // This flag causes mipmapped texture arrays to break on AMD GCN, so for that copy dependencies are forced for aliasing as cube. bool isCube = info.Target == Target.Cubemap || info.Target == Target.CubemapArray; @@ -111,7 +111,7 @@ namespace Ryujinx.Graphics.Vulkan flags |= ImageCreateFlags.Create2DArrayCompatibleBit; } - var imageCreateInfo = new ImageCreateInfo + ImageCreateInfo imageCreateInfo = new ImageCreateInfo { SType = StructureType.ImageCreateInfo, ImageType = type, @@ -131,8 +131,8 @@ namespace Ryujinx.Graphics.Vulkan if (foreignAllocation == null) { - gd.Api.GetImageMemoryRequirements(device, _image, out var requirements); - var allocation = gd.MemoryAllocator.AllocateDeviceMemory(requirements, DefaultImageMemoryFlags); + gd.Api.GetImageMemoryRequirements(device, _image, out MemoryRequirements requirements); + MemoryAllocation allocation = gd.MemoryAllocator.AllocateDeviceMemory(requirements, DefaultImageMemoryFlags); if (allocation.Memory.Handle == 0UL) { @@ -153,7 +153,7 @@ namespace Ryujinx.Graphics.Vulkan { _foreignAllocationAuto = foreignAllocation; foreignAllocation.IncrementReferenceCount(); - var allocation = foreignAllocation.GetUnsafe(); + MemoryAllocation allocation = foreignAllocation.GetUnsafe(); gd.Api.BindImageMemory(device, _image, allocation.Memory, allocation.Offset).ThrowOnError(); @@ -167,7 +167,7 @@ namespace Ryujinx.Graphics.Vulkan public TextureStorage CreateAliasedColorForDepthStorageUnsafe(Format format) { - var colorFormat = format switch + Format colorFormat = format switch { Format.S8Uint => Format.R8Unorm, Format.D16Unorm => Format.R16Unorm, @@ -182,11 +182,11 @@ namespace Ryujinx.Graphics.Vulkan public TextureStorage CreateAliasedStorageUnsafe(Format format) { - if (_aliasedStorages == null || !_aliasedStorages.TryGetValue(format, out var storage)) + if (_aliasedStorages == null || !_aliasedStorages.TryGetValue(format, out TextureStorage storage)) { _aliasedStorages ??= new Dictionary(); - var info = NewCreateInfoWith(ref _info, format, _info.BytesPerPixel); + TextureCreateInfo info = NewCreateInfoWith(ref _info, format, _info.BytesPerPixel); storage = new TextureStorage(_gd, _device, info, _allocationAuto); @@ -272,11 +272,11 @@ namespace Ryujinx.Graphics.Vulkan } } - var aspectFlags = _info.Format.ConvertAspectFlags(); + ImageAspectFlags aspectFlags = _info.Format.ConvertAspectFlags(); - var subresourceRange = new ImageSubresourceRange(aspectFlags, 0, (uint)_info.Levels, 0, (uint)_info.GetLayers()); + ImageSubresourceRange subresourceRange = new ImageSubresourceRange(aspectFlags, 0, (uint)_info.Levels, 0, (uint)_info.GetLayers()); - var barrier = new ImageMemoryBarrier + ImageMemoryBarrier barrier = new ImageMemoryBarrier { SType = StructureType.ImageMemoryBarrier, SrcAccessMask = 0, @@ -309,7 +309,7 @@ namespace Ryujinx.Graphics.Vulkan public static ImageUsageFlags GetImageUsage(Format format, in HardwareCapabilities capabilities, bool isMsImageStorageSupported, bool extendedUsage) { - var usage = DefaultUsageFlags; + ImageUsageFlags usage = DefaultUsageFlags; if (format.IsDepthOrStencil()) { @@ -402,17 +402,17 @@ namespace Ryujinx.Graphics.Vulkan int rowLength = (Info.GetMipStride(level) / Info.BytesPerPixel) * Info.BlockWidth; - var sl = new ImageSubresourceLayers( + ImageSubresourceLayers sl = new ImageSubresourceLayers( aspectFlags, (uint)(dstLevel + level), (uint)layer, (uint)layers); - var extent = new Extent3D((uint)width, (uint)height, (uint)depth); + Extent3D extent = new Extent3D((uint)width, (uint)height, (uint)depth); int z = is3D ? dstLayer : 0; - var region = new BufferImageCopy( + BufferImageCopy region = new BufferImageCopy( (ulong)offset, (uint)BitUtils.AlignUp(rowLength, Info.BlockWidth), (uint)BitUtils.AlignUp(height, Info.BlockHeight), @@ -601,7 +601,7 @@ namespace Ryujinx.Graphics.Vulkan if (_aliasedStorages != null) { - foreach (var storage in _aliasedStorages.Values) + foreach (TextureStorage storage in _aliasedStorages.Values) { storage.Dispose(); } diff --git a/src/Ryujinx.Graphics.Vulkan/TextureView.cs b/src/Ryujinx.Graphics.Vulkan/TextureView.cs index 64d976a45..45328b73f 100644 --- a/src/Ryujinx.Graphics.Vulkan/TextureView.cs +++ b/src/Ryujinx.Graphics.Vulkan/TextureView.cs @@ -63,20 +63,20 @@ namespace Ryujinx.Graphics.Vulkan bool isMsImageStorageSupported = gd.Capabilities.SupportsShaderStorageImageMultisample || !info.Target.IsMultisample(); - var format = _gd.FormatCapabilities.ConvertToVkFormat(info.Format, isMsImageStorageSupported); - var usage = TextureStorage.GetImageUsage(info.Format, gd.Capabilities, isMsImageStorageSupported, false); + VkFormat format = _gd.FormatCapabilities.ConvertToVkFormat(info.Format, isMsImageStorageSupported); + ImageUsageFlags usage = TextureStorage.GetImageUsage(info.Format, gd.Capabilities, isMsImageStorageSupported, false); - var levels = (uint)info.Levels; - var layers = (uint)info.GetLayers(); + uint levels = (uint)info.Levels; + uint layers = (uint)info.GetLayers(); VkFormat = format; - var type = info.Target.ConvertView(); + ImageViewType type = info.Target.ConvertView(); - var swizzleR = info.SwizzleR.Convert(); - var swizzleG = info.SwizzleG.Convert(); - var swizzleB = info.SwizzleB.Convert(); - var swizzleA = info.SwizzleA.Convert(); + ComponentSwizzle swizzleR = info.SwizzleR.Convert(); + ComponentSwizzle swizzleG = info.SwizzleG.Convert(); + ComponentSwizzle swizzleB = info.SwizzleB.Convert(); + ComponentSwizzle swizzleA = info.SwizzleA.Convert(); if (info.Format == Format.R5G5B5A1Unorm || info.Format == Format.R5G5B5X1Unorm || @@ -86,8 +86,8 @@ namespace Ryujinx.Graphics.Vulkan } else if (VkFormat == VkFormat.R4G4B4A4UnormPack16 || info.Format == Format.A1B5G5R5Unorm) { - var tempB = swizzleB; - var tempA = swizzleA; + ComponentSwizzle tempB = swizzleB; + ComponentSwizzle tempA = swizzleA; swizzleB = swizzleG; swizzleA = swizzleR; @@ -95,23 +95,23 @@ namespace Ryujinx.Graphics.Vulkan swizzleG = tempB; } - var componentMapping = new ComponentMapping(swizzleR, swizzleG, swizzleB, swizzleA); + ComponentMapping componentMapping = new ComponentMapping(swizzleR, swizzleG, swizzleB, swizzleA); - var aspectFlags = info.Format.ConvertAspectFlags(info.DepthStencilMode); - var aspectFlagsDepth = info.Format.ConvertAspectFlags(); + ImageAspectFlags aspectFlags = info.Format.ConvertAspectFlags(info.DepthStencilMode); + ImageAspectFlags aspectFlagsDepth = info.Format.ConvertAspectFlags(); - var subresourceRange = new ImageSubresourceRange(aspectFlags, (uint)firstLevel, levels, (uint)firstLayer, layers); - var subresourceRangeDepth = new ImageSubresourceRange(aspectFlagsDepth, (uint)firstLevel, levels, (uint)firstLayer, layers); + ImageSubresourceRange subresourceRange = new ImageSubresourceRange(aspectFlags, (uint)firstLevel, levels, (uint)firstLayer, layers); + ImageSubresourceRange subresourceRangeDepth = new ImageSubresourceRange(aspectFlagsDepth, (uint)firstLevel, levels, (uint)firstLayer, layers); unsafe Auto CreateImageView(ComponentMapping cm, ImageSubresourceRange sr, ImageViewType viewType, ImageUsageFlags usageFlags) { - var imageViewUsage = new ImageViewUsageCreateInfo + ImageViewUsageCreateInfo imageViewUsage = new ImageViewUsageCreateInfo { SType = StructureType.ImageViewUsageCreateInfo, Usage = usageFlags, }; - var imageCreateInfo = new ImageViewCreateInfo + ImageViewCreateInfo imageCreateInfo = new ImageViewCreateInfo { SType = StructureType.ImageViewCreateInfo, Image = storage.GetImageForViewCreation(), @@ -122,7 +122,7 @@ namespace Ryujinx.Graphics.Vulkan PNext = &imageViewUsage, }; - gd.Api.CreateImageView(device, in imageCreateInfo, null, out var imageView).ThrowOnError(); + gd.Api.CreateImageView(device, in imageCreateInfo, null, out ImageView imageView).ThrowOnError(); return new Auto(new DisposableImageView(gd.Api, device, imageView), null, storage.GetImage()); } @@ -136,7 +136,7 @@ namespace Ryujinx.Graphics.Vulkan _imageView = CreateImageView(componentMapping, subresourceRange, type, shaderUsage); // Framebuffer attachments and storage images requires a identity component mapping. - var identityComponentMapping = new ComponentMapping( + ComponentMapping identityComponentMapping = new ComponentMapping( ComponentSwizzle.R, ComponentSwizzle.G, ComponentSwizzle.B, @@ -210,8 +210,8 @@ namespace Ryujinx.Graphics.Vulkan public void CopyTo(ITexture destination, int firstLayer, int firstLevel) { - var src = this; - var dst = (TextureView)destination; + TextureView src = this; + TextureView dst = (TextureView)destination; if (!Valid || !dst.Valid) { @@ -220,10 +220,10 @@ namespace Ryujinx.Graphics.Vulkan _gd.PipelineInternal.EndRenderPass(); - var cbs = _gd.PipelineInternal.CurrentCommandBuffer; + CommandBufferScoped cbs = _gd.PipelineInternal.CurrentCommandBuffer; - var srcImage = src.GetImage().Get(cbs).Value; - var dstImage = dst.GetImage().Get(cbs).Value; + Image srcImage = src.GetImage().Get(cbs).Value; + Image dstImage = dst.GetImage().Get(cbs).Value; if (!dst.Info.Target.IsMultisample() && Info.Target.IsMultisample()) { @@ -270,8 +270,8 @@ namespace Ryujinx.Graphics.Vulkan public void CopyTo(ITexture destination, int srcLayer, int dstLayer, int srcLevel, int dstLevel) { - var src = this; - var dst = (TextureView)destination; + TextureView src = this; + TextureView dst = (TextureView)destination; if (!Valid || !dst.Valid) { @@ -280,10 +280,10 @@ namespace Ryujinx.Graphics.Vulkan _gd.PipelineInternal.EndRenderPass(); - var cbs = _gd.PipelineInternal.CurrentCommandBuffer; + CommandBufferScoped cbs = _gd.PipelineInternal.CurrentCommandBuffer; - var srcImage = src.GetImage().Get(cbs).Value; - var dstImage = dst.GetImage().Get(cbs).Value; + Image srcImage = src.GetImage().Get(cbs).Value; + Image dstImage = dst.GetImage().Get(cbs).Value; if (!dst.Info.Target.IsMultisample() && Info.Target.IsMultisample()) { @@ -325,21 +325,21 @@ namespace Ryujinx.Graphics.Vulkan public void CopyTo(ITexture destination, Extents2D srcRegion, Extents2D dstRegion, bool linearFilter) { - var dst = (TextureView)destination; + TextureView dst = (TextureView)destination; if (_gd.CommandBufferPool.OwnedByCurrentThread) { _gd.PipelineInternal.EndRenderPass(); - var cbs = _gd.PipelineInternal.CurrentCommandBuffer; + CommandBufferScoped cbs = _gd.PipelineInternal.CurrentCommandBuffer; CopyToImpl(cbs, dst, srcRegion, dstRegion, linearFilter); } else { - var cbp = _gd.BackgroundResources.Get().GetPool(); + CommandBufferPool cbp = _gd.BackgroundResources.Get().GetPool(); - using var cbs = cbp.Rent(); + using CommandBufferScoped cbs = cbp.Rent(); CopyToImpl(cbs, dst, srcRegion, dstRegion, linearFilter); } @@ -347,10 +347,10 @@ namespace Ryujinx.Graphics.Vulkan private void CopyToImpl(CommandBufferScoped cbs, TextureView dst, Extents2D srcRegion, Extents2D dstRegion, bool linearFilter) { - var src = this; + TextureView src = this; - var srcFormat = GetCompatibleGalFormat(src.Info.Format); - var dstFormat = GetCompatibleGalFormat(dst.Info.Format); + Format srcFormat = GetCompatibleGalFormat(src.Info.Format); + Format dstFormat = GetCompatibleGalFormat(dst.Info.Format); bool srcUsesStorageFormat = src.VkFormat == src.Storage.VkFormat; bool dstUsesStorageFormat = dst.VkFormat == dst.Storage.VkFormat; @@ -572,7 +572,7 @@ namespace Ryujinx.Graphics.Vulkan return this; } - if (_selfManagedViews != null && _selfManagedViews.TryGetValue(format, out var view)) + if (_selfManagedViews != null && _selfManagedViews.TryGetValue(format, out TextureView view)) { return view; } @@ -612,12 +612,12 @@ namespace Ryujinx.Graphics.Vulkan public byte[] GetData(int x, int y, int width, int height) { int size = width * height * Info.BytesPerPixel; - using var bufferHolder = _gd.BufferManager.Create(_gd, size); + using BufferHolder bufferHolder = _gd.BufferManager.Create(_gd, size); - using (var cbs = _gd.CommandBufferPool.Rent()) + using (CommandBufferScoped cbs = _gd.CommandBufferPool.Rent()) { - var buffer = bufferHolder.GetBuffer(cbs.CommandBuffer).Get(cbs).Value; - var image = GetImage().Get(cbs).Value; + VkBuffer buffer = bufferHolder.GetBuffer(cbs.CommandBuffer).Get(cbs).Value; + Image image = GetImage().Get(cbs).Value; CopyFromOrToBuffer(cbs.CommandBuffer, buffer, image, size, true, 0, 0, x, y, width, height); } @@ -659,12 +659,12 @@ namespace Ryujinx.Graphics.Vulkan public void CopyTo(BufferRange range, int layer, int level, int stride) { _gd.PipelineInternal.EndRenderPass(); - var cbs = _gd.PipelineInternal.CurrentCommandBuffer; + CommandBufferScoped cbs = _gd.PipelineInternal.CurrentCommandBuffer; int outSize = Info.GetMipSize(level); int hostSize = GetBufferDataLength(outSize); - var image = GetImage().Get(cbs).Value; + Image image = GetImage().Get(cbs).Value; int offset = range.Offset; Auto autoBuffer = _gd.BufferManager.GetBuffer(cbs.CommandBuffer, range.Handle, true); @@ -773,7 +773,7 @@ namespace Ryujinx.Graphics.Vulkan { int bufferDataLength = GetBufferDataLength(data.Length); - using var bufferHolder = _gd.BufferManager.Create(_gd, bufferDataLength); + using BufferHolder bufferHolder = _gd.BufferManager.Create(_gd, bufferDataLength); Auto imageAuto = GetImage(); @@ -781,7 +781,7 @@ namespace Ryujinx.Graphics.Vulkan bool loadInline = Storage.HasCommandBufferDependency(_gd.PipelineInternal.CurrentCommandBuffer); - var cbs = loadInline ? _gd.PipelineInternal.CurrentCommandBuffer : _gd.PipelineInternal.GetPreloadCommandBuffer(); + CommandBufferScoped cbs = loadInline ? _gd.PipelineInternal.CurrentCommandBuffer : _gd.PipelineInternal.GetPreloadCommandBuffer(); if (loadInline) { @@ -790,8 +790,8 @@ namespace Ryujinx.Graphics.Vulkan CopyDataToBuffer(bufferHolder.GetDataStorage(0, bufferDataLength), data); - var buffer = bufferHolder.GetBuffer(cbs.CommandBuffer).Get(cbs).Value; - var image = imageAuto.Get(cbs).Value; + VkBuffer buffer = bufferHolder.GetBuffer(cbs.CommandBuffer).Get(cbs).Value; + Image image = imageAuto.Get(cbs).Value; if (region.HasValue) { @@ -927,24 +927,24 @@ namespace Ryujinx.Graphics.Vulkan int rowLength = ((stride == 0 ? Info.GetMipStride(dstLevel + level) : stride) / Info.BytesPerPixel) * Info.BlockWidth; - var aspectFlags = Info.Format.ConvertAspectFlags(); + ImageAspectFlags aspectFlags = Info.Format.ConvertAspectFlags(); if (aspectFlags == (ImageAspectFlags.DepthBit | ImageAspectFlags.StencilBit)) { aspectFlags = ImageAspectFlags.DepthBit; } - var sl = new ImageSubresourceLayers( + ImageSubresourceLayers sl = new ImageSubresourceLayers( aspectFlags, (uint)(FirstLevel + dstLevel + level), (uint)(FirstLayer + layer), (uint)layers); - var extent = new Extent3D((uint)width, (uint)height, (uint)depth); + Extent3D extent = new Extent3D((uint)width, (uint)height, (uint)depth); int z = is3D ? dstLayer : 0; - var region = new BufferImageCopy( + BufferImageCopy region = new BufferImageCopy( (ulong)offset, (uint)AlignUpNpot(rowLength, Info.BlockWidth), (uint)AlignUpNpot(height, Info.BlockHeight), @@ -986,16 +986,16 @@ namespace Ryujinx.Graphics.Vulkan int width, int height) { - var aspectFlags = Info.Format.ConvertAspectFlags(); + ImageAspectFlags aspectFlags = Info.Format.ConvertAspectFlags(); if (aspectFlags == (ImageAspectFlags.DepthBit | ImageAspectFlags.StencilBit)) { aspectFlags = ImageAspectFlags.DepthBit; } - var sl = new ImageSubresourceLayers(aspectFlags, (uint)(FirstLevel + dstLevel), (uint)(FirstLayer + dstLayer), 1); + ImageSubresourceLayers sl = new ImageSubresourceLayers(aspectFlags, (uint)(FirstLevel + dstLevel), (uint)(FirstLayer + dstLayer), 1); - var extent = new Extent3D((uint)width, (uint)height, 1); + Extent3D extent = new Extent3D((uint)width, (uint)height, 1); int rowLengthAlignment = Info.BlockWidth; @@ -1005,7 +1005,7 @@ namespace Ryujinx.Graphics.Vulkan rowLengthAlignment = 4 / Info.BytesPerPixel; } - var region = new BufferImageCopy( + BufferImageCopy region = new BufferImageCopy( 0, (uint)AlignUpNpot(width, rowLengthAlignment), (uint)AlignUpNpot(height, Info.BlockHeight), @@ -1073,7 +1073,7 @@ namespace Ryujinx.Graphics.Vulkan CommandBufferScoped cbs, FramebufferParams fb) { - var key = fb.GetRenderPassCacheKey(); + RenderPassCacheKey key = fb.GetRenderPassCacheKey(); if (_renderPasses == null || !_renderPasses.TryGetValue(ref key, out RenderPassHolder rpHolder)) { @@ -1121,9 +1121,9 @@ namespace Ryujinx.Graphics.Vulkan if (_renderPasses != null) { - var renderPasses = _renderPasses.Values.ToArray(); + RenderPassHolder[] renderPasses = _renderPasses.Values.ToArray(); - foreach (var pass in renderPasses) + foreach (RenderPassHolder pass in renderPasses) { pass.Dispose(); } @@ -1131,7 +1131,7 @@ namespace Ryujinx.Graphics.Vulkan if (_selfManagedViews != null) { - foreach (var view in _selfManagedViews.Values) + foreach (TextureView view in _selfManagedViews.Values) { view.Dispose(); } diff --git a/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs b/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs index ce1293589..236ab8721 100644 --- a/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs +++ b/src/Ryujinx.Graphics.Vulkan/VertexBufferState.cs @@ -1,4 +1,5 @@ using Ryujinx.Graphics.GAL; +using Silk.NET.Vulkan; namespace Ryujinx.Graphics.Vulkan { @@ -50,7 +51,7 @@ namespace Ryujinx.Graphics.Vulkan public void BindVertexBuffer(VulkanRenderer gd, CommandBufferScoped cbs, uint binding, ref PipelineState state, VertexBufferUpdater updater) { - var autoBuffer = _buffer; + Auto autoBuffer = _buffer; if (_handle != BufferHandle.Null) { @@ -67,7 +68,7 @@ namespace Ryujinx.Graphics.Vulkan int stride = (_stride + (alignment - 1)) & -alignment; int newSize = (_size / _stride) * stride; - var buffer = autoBuffer.Get(cbs, 0, newSize).Value; + Buffer buffer = autoBuffer.Get(cbs, 0, newSize).Value; updater.BindVertexBuffer(cbs, binding, buffer, 0, (ulong)newSize, (ulong)stride); @@ -94,7 +95,7 @@ namespace Ryujinx.Graphics.Vulkan { int offset = _offset; bool mirrorable = _size <= VertexBufferMaxMirrorable; - var buffer = mirrorable ? autoBuffer.GetMirrorable(cbs, ref offset, _size, out _).Value : autoBuffer.Get(cbs, offset, _size).Value; + Buffer buffer = mirrorable ? autoBuffer.GetMirrorable(cbs, ref offset, _size, out _).Value : autoBuffer.Get(cbs, offset, _size).Value; updater.BindVertexBuffer(cbs, binding, buffer, (ulong)offset, (ulong)_size, (ulong)_stride); } diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanDebugMessenger.cs b/src/Ryujinx.Graphics.Vulkan/VulkanDebugMessenger.cs index 6dfcd8b6e..0e48e0200 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanDebugMessenger.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanDebugMessenger.cs @@ -39,7 +39,7 @@ namespace Ryujinx.Graphics.Vulkan if (_debugUtils != null && _logLevel != GraphicsDebugLevel.None) { - var messageType = _logLevel switch + DebugUtilsMessageTypeFlagsEXT messageType = _logLevel switch { GraphicsDebugLevel.Error => DebugUtilsMessageTypeFlagsEXT.ValidationBitExt, GraphicsDebugLevel.Slowdowns => DebugUtilsMessageTypeFlagsEXT.ValidationBitExt | @@ -50,7 +50,7 @@ namespace Ryujinx.Graphics.Vulkan _ => throw new ArgumentException($"Invalid log level \"{_logLevel}\"."), }; - var messageSeverity = _logLevel switch + DebugUtilsMessageSeverityFlagsEXT messageSeverity = _logLevel switch { GraphicsDebugLevel.Error => DebugUtilsMessageSeverityFlagsEXT.ErrorBitExt, GraphicsDebugLevel.Slowdowns => DebugUtilsMessageSeverityFlagsEXT.ErrorBitExt | @@ -62,7 +62,7 @@ namespace Ryujinx.Graphics.Vulkan _ => throw new ArgumentException($"Invalid log level \"{_logLevel}\"."), }; - var debugUtilsMessengerCreateInfo = new DebugUtilsMessengerCreateInfoEXT + DebugUtilsMessengerCreateInfoEXT debugUtilsMessengerCreateInfo = new DebugUtilsMessengerCreateInfoEXT { SType = StructureType.DebugUtilsMessengerCreateInfoExt, MessageType = messageType, @@ -95,7 +95,7 @@ namespace Ryujinx.Graphics.Vulkan DebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) { - var msg = Marshal.PtrToStringAnsi((nint)pCallbackData->PMessage); + string msg = Marshal.PtrToStringAnsi((nint)pCallbackData->PMessage); if (messageSeverity.HasFlag(DebugUtilsMessageSeverityFlagsEXT.ErrorBitExt)) { diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs b/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs index 352f271cc..83450bc0a 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs @@ -1,6 +1,7 @@ using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; +using Silk.NET.Core; using Silk.NET.Vulkan; using Silk.NET.Vulkan.Extensions.EXT; using Silk.NET.Vulkan.Extensions.KHR; @@ -54,10 +55,10 @@ namespace Ryujinx.Graphics.Vulkan internal static VulkanInstance CreateInstance(Vk api, GraphicsDebugLevel logLevel, string[] requiredExtensions) { - var enabledLayers = new List(); + List enabledLayers = new List(); - var instanceExtensions = VulkanInstance.GetInstanceExtensions(api); - var instanceLayers = VulkanInstance.GetInstanceLayers(api); + IReadOnlySet instanceExtensions = VulkanInstance.GetInstanceExtensions(api); + IReadOnlySet instanceLayers = VulkanInstance.GetInstanceLayers(api); void AddAvailableLayer(string layerName) { @@ -76,16 +77,16 @@ namespace Ryujinx.Graphics.Vulkan AddAvailableLayer("VK_LAYER_KHRONOS_validation"); } - var enabledExtensions = requiredExtensions; + string[] enabledExtensions = requiredExtensions; if (instanceExtensions.Contains("VK_EXT_debug_utils")) { enabledExtensions = enabledExtensions.Append(ExtDebugUtils.ExtensionName).ToArray(); } - var appName = Marshal.StringToHGlobalAnsi(AppName); + IntPtr appName = Marshal.StringToHGlobalAnsi(AppName); - var applicationInfo = new ApplicationInfo + ApplicationInfo applicationInfo = new ApplicationInfo { PApplicationName = (byte*)appName, ApplicationVersion = 1, @@ -107,7 +108,7 @@ namespace Ryujinx.Graphics.Vulkan ppEnabledLayers[i] = Marshal.StringToHGlobalAnsi(enabledLayers[i]); } - var instanceCreateInfo = new InstanceCreateInfo + InstanceCreateInfo instanceCreateInfo = new InstanceCreateInfo { SType = StructureType.InstanceCreateInfo, PApplicationInfo = &applicationInfo, @@ -117,7 +118,7 @@ namespace Ryujinx.Graphics.Vulkan EnabledLayerCount = (uint)enabledLayers.Count, }; - Result result = VulkanInstance.Create(api, ref instanceCreateInfo, out var instance); + Result result = VulkanInstance.Create(api, ref instanceCreateInfo, out VulkanInstance instance); Marshal.FreeHGlobal(appName); @@ -138,7 +139,7 @@ namespace Ryujinx.Graphics.Vulkan internal static VulkanPhysicalDevice FindSuitablePhysicalDevice(Vk api, VulkanInstance instance, SurfaceKHR surface, string preferredGpuId) { - instance.EnumeratePhysicalDevices(out var physicalDevices).ThrowOnError(); + instance.EnumeratePhysicalDevices(out VulkanPhysicalDevice[] physicalDevices).ThrowOnError(); // First we try to pick the user preferred GPU. for (int i = 0; i < physicalDevices.Length; i++) @@ -163,9 +164,9 @@ namespace Ryujinx.Graphics.Vulkan internal static DeviceInfo[] GetSuitablePhysicalDevices(Vk api) { - var appName = Marshal.StringToHGlobalAnsi(AppName); + IntPtr appName = Marshal.StringToHGlobalAnsi(AppName); - var applicationInfo = new ApplicationInfo + ApplicationInfo applicationInfo = new ApplicationInfo { PApplicationName = (byte*)appName, ApplicationVersion = 1, @@ -174,7 +175,7 @@ namespace Ryujinx.Graphics.Vulkan ApiVersion = _maximumVulkanVersion, }; - var instanceCreateInfo = new InstanceCreateInfo + InstanceCreateInfo instanceCreateInfo = new InstanceCreateInfo { SType = StructureType.InstanceCreateInfo, PApplicationInfo = &applicationInfo, @@ -184,7 +185,7 @@ namespace Ryujinx.Graphics.Vulkan EnabledLayerCount = 0, }; - Result result = VulkanInstance.Create(api, ref instanceCreateInfo, out var rawInstance); + Result result = VulkanInstance.Create(api, ref instanceCreateInfo, out VulkanInstance rawInstance); Marshal.FreeHGlobal(appName); @@ -245,13 +246,13 @@ namespace Ryujinx.Graphics.Vulkan { const QueueFlags RequiredFlags = QueueFlags.GraphicsBit | QueueFlags.ComputeBit; - var khrSurface = new KhrSurface(api.Context); + KhrSurface khrSurface = new KhrSurface(api.Context); for (uint index = 0; index < physicalDevice.QueueFamilyProperties.Length; index++) { ref QueueFamilyProperties property = ref physicalDevice.QueueFamilyProperties[index]; - khrSurface.GetPhysicalDeviceSurfaceSupport(physicalDevice.PhysicalDevice, index, surface, out var surfaceSupported).ThrowOnError(); + khrSurface.GetPhysicalDeviceSurfaceSupport(physicalDevice.PhysicalDevice, index, surface, out Bool32 surfaceSupported).ThrowOnError(); if (property.QueueFlags.HasFlag(RequiredFlags) && surfaceSupported) { @@ -280,7 +281,7 @@ namespace Ryujinx.Graphics.Vulkan queuePriorities[i] = 1f; } - var queueCreateInfo = new DeviceQueueCreateInfo + DeviceQueueCreateInfo queueCreateInfo = new DeviceQueueCreateInfo { SType = StructureType.DeviceQueueCreateInfo, QueueFamilyIndex = queueFamilyIndex, @@ -391,9 +392,9 @@ namespace Ryujinx.Graphics.Vulkan api.GetPhysicalDeviceFeatures2(physicalDevice.PhysicalDevice, &features2); - var supportedFeatures = features2.Features; + PhysicalDeviceFeatures supportedFeatures = features2.Features; - var features = new PhysicalDeviceFeatures + PhysicalDeviceFeatures features = new PhysicalDeviceFeatures { DepthBiasClamp = supportedFeatures.DepthBiasClamp, DepthClamp = supportedFeatures.DepthClamp, @@ -464,7 +465,7 @@ namespace Ryujinx.Graphics.Vulkan pExtendedFeatures = &featuresRobustness2; } - var featuresExtendedDynamicState = new PhysicalDeviceExtendedDynamicStateFeaturesEXT + PhysicalDeviceExtendedDynamicStateFeaturesEXT featuresExtendedDynamicState = new PhysicalDeviceExtendedDynamicStateFeaturesEXT { SType = StructureType.PhysicalDeviceExtendedDynamicStateFeaturesExt, PNext = pExtendedFeatures, @@ -473,7 +474,7 @@ namespace Ryujinx.Graphics.Vulkan pExtendedFeatures = &featuresExtendedDynamicState; - var featuresVk11 = new PhysicalDeviceVulkan11Features + PhysicalDeviceVulkan11Features featuresVk11 = new PhysicalDeviceVulkan11Features { SType = StructureType.PhysicalDeviceVulkan11Features, PNext = pExtendedFeatures, @@ -482,7 +483,7 @@ namespace Ryujinx.Graphics.Vulkan pExtendedFeatures = &featuresVk11; - var featuresVk12 = new PhysicalDeviceVulkan12Features + PhysicalDeviceVulkan12Features featuresVk12 = new PhysicalDeviceVulkan12Features { SType = StructureType.PhysicalDeviceVulkan12Features, PNext = pExtendedFeatures, @@ -585,7 +586,7 @@ namespace Ryujinx.Graphics.Vulkan pExtendedFeatures = &featuresDynamicAttachmentFeedbackLoopLayout; } - var enabledExtensions = _requiredExtensions.Union(_desirableExtensions.Intersect(physicalDevice.DeviceExtensions)).ToArray(); + string[] enabledExtensions = _requiredExtensions.Union(_desirableExtensions.Intersect(physicalDevice.DeviceExtensions)).ToArray(); nint* ppEnabledExtensions = stackalloc nint[enabledExtensions.Length]; @@ -594,7 +595,7 @@ namespace Ryujinx.Graphics.Vulkan ppEnabledExtensions[i] = Marshal.StringToHGlobalAnsi(enabledExtensions[i]); } - var deviceCreateInfo = new DeviceCreateInfo + DeviceCreateInfo deviceCreateInfo = new DeviceCreateInfo { SType = StructureType.DeviceCreateInfo, PNext = pExtendedFeatures, @@ -605,7 +606,7 @@ namespace Ryujinx.Graphics.Vulkan PEnabledFeatures = &features, }; - api.CreateDevice(physicalDevice.PhysicalDevice, in deviceCreateInfo, null, out var device).ThrowOnError(); + api.CreateDevice(physicalDevice.PhysicalDevice, in deviceCreateInfo, null, out Device device).ThrowOnError(); for (int i = 0; i < enabledExtensions.Length; i++) { diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanPhysicalDevice.cs b/src/Ryujinx.Graphics.Vulkan/VulkanPhysicalDevice.cs index b3f8fd756..8ede84100 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanPhysicalDevice.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanPhysicalDevice.cs @@ -24,7 +24,7 @@ namespace Ryujinx.Graphics.Vulkan PhysicalDevice = physicalDevice; PhysicalDeviceFeatures = api.GetPhysicalDeviceFeature(PhysicalDevice); - api.GetPhysicalDeviceProperties(PhysicalDevice, out var physicalDeviceProperties); + api.GetPhysicalDeviceProperties(PhysicalDevice, out PhysicalDeviceProperties physicalDeviceProperties); PhysicalDeviceProperties = physicalDeviceProperties; api.GetPhysicalDeviceMemoryProperties(PhysicalDevice, out PhysicalDeviceMemoryProperties); diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs index a4fcf5353..d164c5cb6 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs @@ -12,6 +12,7 @@ using Silk.NET.Vulkan.Extensions.KHR; using System; using System.Collections.Generic; using System.Runtime.InteropServices; +using System.Text.RegularExpressions; using System.Threading; using Format = Ryujinx.Graphics.GAL.Format; using PrimitiveTopology = Ryujinx.Graphics.GAL.PrimitiveTopology; @@ -163,7 +164,7 @@ namespace Ryujinx.Graphics.Vulkan if (maxQueueCount >= 2) { - Api.GetDeviceQueue(_device, queueFamilyIndex, 1, out var backgroundQueue); + Api.GetDeviceQueue(_device, queueFamilyIndex, 1, out Queue backgroundQueue); BackgroundQueue = backgroundQueue; BackgroundQueueLock = new(); } @@ -331,7 +332,7 @@ namespace Ryujinx.Graphics.Vulkan Api.GetPhysicalDeviceProperties2(_physicalDevice.PhysicalDevice, &properties2); Api.GetPhysicalDeviceFeatures2(_physicalDevice.PhysicalDevice, &features2); - var portabilityFlags = PortabilitySubsetFlags.None; + PortabilitySubsetFlags portabilityFlags = PortabilitySubsetFlags.None; uint vertexBufferAlignment = 1; if (usePortability) @@ -348,9 +349,9 @@ namespace Ryujinx.Graphics.Vulkan featuresCustomBorderColor.CustomBorderColors && featuresCustomBorderColor.CustomBorderColorWithoutFormat; - ref var properties = ref properties2.Properties; + ref PhysicalDeviceProperties properties = ref properties2.Properties; - var hasDriverProperties = _physicalDevice.TryGetPhysicalDeviceDriverPropertiesKHR(Api, out var driverProperties); + bool hasDriverProperties = _physicalDevice.TryGetPhysicalDeviceDriverPropertiesKHR(Api, out PhysicalDeviceDriverPropertiesKHR driverProperties); Vendor = VendorUtils.FromId(properties.VendorID); @@ -378,7 +379,7 @@ namespace Ryujinx.Graphics.Vulkan if (Vendor == Vendor.Nvidia) { - var match = VendorUtils.NvidiaConsumerClassRegex().Match(GpuRenderer); + Match match = VendorUtils.NvidiaConsumerClassRegex().Match(GpuRenderer); if (match != null && int.TryParse(match.Groups[2].Value, out int gpuNumber)) { @@ -487,7 +488,7 @@ namespace Ryujinx.Graphics.Vulkan _surface = _getSurface(_instance.Instance, Api); _physicalDevice = VulkanInitialization.FindSuitablePhysicalDevice(Api, _instance, _surface, _preferredGpuId); - var queueFamilyIndex = VulkanInitialization.FindSuitableQueueFamily(Api, _physicalDevice, _surface, out uint maxQueueCount); + uint queueFamilyIndex = VulkanInitialization.FindSuitableQueueFamily(Api, _physicalDevice, _surface, out uint maxQueueCount); _device = VulkanInitialization.CreateDevice(Api, _physicalDevice, queueFamilyIndex, maxQueueCount); @@ -496,7 +497,7 @@ namespace Ryujinx.Graphics.Vulkan SwapchainApi = swapchainApi; } - Api.GetDeviceQueue(_device, queueFamilyIndex, 0, out var queue); + Api.GetDeviceQueue(_device, queueFamilyIndex, 0, out Queue queue); Queue = queue; QueueLock = new(); @@ -590,7 +591,7 @@ namespace Ryujinx.Graphics.Vulkan internal TextureView CreateTextureView(TextureCreateInfo info) { // This should be disposed when all views are destroyed. - var storage = CreateTextureStorage(info); + TextureStorage storage = CreateTextureStorage(info); return storage.CreateView(info, 0, 0); } @@ -713,8 +714,8 @@ namespace Ryujinx.Graphics.Vulkan Api.GetPhysicalDeviceFeatures2(_physicalDevice.PhysicalDevice, &features2); - var limits = _physicalDevice.PhysicalDeviceProperties.Limits; - var mainQueueProperties = _physicalDevice.QueueFamilyProperties[QueueFamilyIndex]; + PhysicalDeviceLimits limits = _physicalDevice.PhysicalDeviceProperties.Limits; + QueueFamilyProperties mainQueueProperties = _physicalDevice.QueueFamilyProperties[QueueFamilyIndex]; SystemMemoryType memoryType; @@ -801,7 +802,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < memoryProperties.MemoryHeapCount; i++) { - var heap = memoryProperties.MemoryHeaps[i]; + MemoryHeap heap = memoryProperties.MemoryHeaps[i]; if ((heap.Flags & MemoryHeapFlags.DeviceLocalBit) == MemoryHeapFlags.DeviceLocalBit) { totalMemory += heap.Size; @@ -1030,17 +1031,17 @@ namespace Ryujinx.Graphics.Vulkan MemoryAllocator.Dispose(); - foreach (var shader in Shaders) + foreach (ShaderCollection shader in Shaders) { shader.Dispose(); } - foreach (var texture in Textures) + foreach (ITexture texture in Textures) { texture.Release(); } - foreach (var sampler in Samplers) + foreach (SamplerHolder sampler in Samplers) { sampler.Dispose(); } diff --git a/src/Ryujinx.Graphics.Vulkan/Window.cs b/src/Ryujinx.Graphics.Vulkan/Window.cs index 8e53e7f7e..b45d59c3a 100644 --- a/src/Ryujinx.Graphics.Vulkan/Window.cs +++ b/src/Ryujinx.Graphics.Vulkan/Window.cs @@ -55,7 +55,7 @@ namespace Ryujinx.Graphics.Vulkan private void RecreateSwapchain() { - var oldSwapchain = _swapchain; + SwapchainKHR oldSwapchain = _swapchain; _swapchainIsDirty = false; for (int i = 0; i < _swapchainImageViews.Length; i++) @@ -87,13 +87,13 @@ namespace Ryujinx.Graphics.Vulkan private unsafe void CreateSwapchain() { - _gd.SurfaceApi.GetPhysicalDeviceSurfaceCapabilities(_physicalDevice, _surface, out var capabilities); + _gd.SurfaceApi.GetPhysicalDeviceSurfaceCapabilities(_physicalDevice, _surface, out SurfaceCapabilitiesKHR capabilities); uint surfaceFormatsCount; _gd.SurfaceApi.GetPhysicalDeviceSurfaceFormats(_physicalDevice, _surface, &surfaceFormatsCount, null); - var surfaceFormats = new SurfaceFormatKHR[surfaceFormatsCount]; + SurfaceFormatKHR[] surfaceFormats = new SurfaceFormatKHR[surfaceFormatsCount]; fixed (SurfaceFormatKHR* pSurfaceFormats = surfaceFormats) { @@ -104,7 +104,7 @@ namespace Ryujinx.Graphics.Vulkan _gd.SurfaceApi.GetPhysicalDeviceSurfacePresentModes(_physicalDevice, _surface, &presentModesCount, null); - var presentModes = new PresentModeKHR[presentModesCount]; + PresentModeKHR[] presentModes = new PresentModeKHR[presentModesCount]; fixed (PresentModeKHR* pPresentModes = presentModes) { @@ -117,17 +117,17 @@ namespace Ryujinx.Graphics.Vulkan imageCount = capabilities.MaxImageCount; } - var surfaceFormat = ChooseSwapSurfaceFormat(surfaceFormats, _colorSpacePassthroughEnabled); + SurfaceFormatKHR surfaceFormat = ChooseSwapSurfaceFormat(surfaceFormats, _colorSpacePassthroughEnabled); - var extent = ChooseSwapExtent(capabilities); + Extent2D extent = ChooseSwapExtent(capabilities); _width = (int)extent.Width; _height = (int)extent.Height; _format = surfaceFormat.Format; - var oldSwapchain = _swapchain; + SwapchainKHR oldSwapchain = _swapchain; - var swapchainCreateInfo = new SwapchainCreateInfoKHR + SwapchainCreateInfoKHR swapchainCreateInfo = new SwapchainCreateInfoKHR { SType = StructureType.SwapchainCreateInfoKhr, Surface = _surface, @@ -144,7 +144,7 @@ namespace Ryujinx.Graphics.Vulkan Clipped = true, }; - var textureCreateInfo = new TextureCreateInfo( + TextureCreateInfo textureCreateInfo = new TextureCreateInfo( _width, _height, 1, @@ -179,7 +179,7 @@ namespace Ryujinx.Graphics.Vulkan _swapchainImageViews[i] = CreateSwapchainImageView(_swapchainImages[i], surfaceFormat.Format, textureCreateInfo); } - var semaphoreCreateInfo = new SemaphoreCreateInfo + SemaphoreCreateInfo semaphoreCreateInfo = new SemaphoreCreateInfo { SType = StructureType.SemaphoreCreateInfo, }; @@ -201,17 +201,17 @@ namespace Ryujinx.Graphics.Vulkan private unsafe TextureView CreateSwapchainImageView(Image swapchainImage, VkFormat format, TextureCreateInfo info) { - var componentMapping = new ComponentMapping( + ComponentMapping componentMapping = new ComponentMapping( ComponentSwizzle.R, ComponentSwizzle.G, ComponentSwizzle.B, ComponentSwizzle.A); - var aspectFlags = ImageAspectFlags.ColorBit; + ImageAspectFlags aspectFlags = ImageAspectFlags.ColorBit; - var subresourceRange = new ImageSubresourceRange(aspectFlags, 0, 1, 0, 1); + ImageSubresourceRange subresourceRange = new ImageSubresourceRange(aspectFlags, 0, 1, 0, 1); - var imageCreateInfo = new ImageViewCreateInfo + ImageViewCreateInfo imageCreateInfo = new ImageViewCreateInfo { SType = StructureType.ImageViewCreateInfo, Image = swapchainImage, @@ -221,7 +221,7 @@ namespace Ryujinx.Graphics.Vulkan SubresourceRange = subresourceRange, }; - _gd.Api.CreateImageView(_device, in imageCreateInfo, null, out var imageView).ThrowOnError(); + _gd.Api.CreateImageView(_device, in imageCreateInfo, null, out ImageView imageView).ThrowOnError(); return new TextureView(_gd, _device, new DisposableImageView(_gd.Api, _device, imageView), info, format); } @@ -233,10 +233,10 @@ namespace Ryujinx.Graphics.Vulkan return new SurfaceFormatKHR(VkFormat.B8G8R8A8Unorm, ColorSpaceKHR.PaceSrgbNonlinearKhr); } - var formatToReturn = availableFormats[0]; + SurfaceFormatKHR formatToReturn = availableFormats[0]; if (colorSpacePassthroughEnabled) { - foreach (var format in availableFormats) + foreach (SurfaceFormatKHR format in availableFormats) { if (format.Format == VkFormat.B8G8R8A8Unorm && format.ColorSpace == ColorSpaceKHR.SpacePassThroughExt) { @@ -251,7 +251,7 @@ namespace Ryujinx.Graphics.Vulkan } else { - foreach (var format in availableFormats) + foreach (SurfaceFormatKHR format in availableFormats) { if (format.Format == VkFormat.B8G8R8A8Unorm && format.ColorSpace == ColorSpaceKHR.PaceSrgbNonlinearKhr) { @@ -318,7 +318,7 @@ namespace Ryujinx.Graphics.Vulkan while (true) { - var acquireResult = _gd.SwapchainApi.AcquireNextImage( + Result acquireResult = _gd.SwapchainApi.AcquireNextImage( _device, _swapchain, ulong.MaxValue, @@ -340,11 +340,11 @@ namespace Ryujinx.Graphics.Vulkan } } - var swapchainImage = _swapchainImages[nextImage]; + Image swapchainImage = _swapchainImages[nextImage]; _gd.FlushAllCommands(); - var cbs = _gd.CommandBufferPool.Rent(); + CommandBufferScoped cbs = _gd.CommandBufferPool.Rent(); Transition( cbs.CommandBuffer, @@ -354,7 +354,7 @@ namespace Ryujinx.Graphics.Vulkan ImageLayout.Undefined, ImageLayout.General); - var view = (TextureView)texture; + TextureView view = (TextureView)texture; UpdateEffect(); @@ -462,12 +462,12 @@ namespace Ryujinx.Graphics.Vulkan stackalloc[] { _renderFinishedSemaphores[semaphoreIndex] }); // TODO: Present queue. - var semaphore = _renderFinishedSemaphores[semaphoreIndex]; - var swapchain = _swapchain; + Semaphore semaphore = _renderFinishedSemaphores[semaphoreIndex]; + SwapchainKHR swapchain = _swapchain; Result result; - var presentInfo = new PresentInfoKHR + PresentInfoKHR presentInfo = new PresentInfoKHR { SType = StructureType.PresentInfoKhr, WaitSemaphoreCount = 1, @@ -534,7 +534,7 @@ namespace Ryujinx.Graphics.Vulkan case AntiAliasing.SmaaMedium: case AntiAliasing.SmaaHigh: case AntiAliasing.SmaaUltra: - var quality = _currentAntiAliasing - AntiAliasing.SmaaLow; + int quality = _currentAntiAliasing - AntiAliasing.SmaaLow; if (_effect is SmaaPostProcessingEffect smaa) { smaa.Quality = quality; @@ -594,9 +594,9 @@ namespace Ryujinx.Graphics.Vulkan ImageLayout srcLayout, ImageLayout dstLayout) { - var subresourceRange = new ImageSubresourceRange(ImageAspectFlags.ColorBit, 0, 1, 0, 1); + ImageSubresourceRange subresourceRange = new ImageSubresourceRange(ImageAspectFlags.ColorBit, 0, 1, 0, 1); - var barrier = new ImageMemoryBarrier + ImageMemoryBarrier barrier = new ImageMemoryBarrier { SType = StructureType.ImageMemoryBarrier, SrcAccessMask = srcAccess, -- 2.47.1 From 58c1ab79893a95a4c76c6fcd76cc96f6e90061c3 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:12:37 -0600 Subject: [PATCH 433/722] misc: chore: Use explicit types in OpenGL project --- .../Effects/AreaScalingFilter.cs | 2 +- .../Effects/FsrScalingFilter.cs | 14 +++--- .../Effects/FxaaPostProcessingEffect.cs | 6 +-- .../Effects/ShaderHelper.cs | 4 +- .../Effects/SmaaPostProcessingEffect.cs | 49 ++++++++++--------- .../Image/FormatConverter.cs | 24 ++++----- .../Image/TextureBuffer.cs | 2 +- .../Image/TextureCopyIncompatible.cs | 4 +- .../Image/TextureView.cs | 2 +- src/Ryujinx.Graphics.OpenGL/OpenGLRenderer.cs | 3 +- src/Ryujinx.Graphics.OpenGL/Pipeline.cs | 2 +- .../Queries/Counters.cs | 4 +- src/Ryujinx.Graphics.OpenGL/VertexArray.cs | 4 +- src/Ryujinx.Graphics.OpenGL/Window.cs | 8 +-- 14 files changed, 65 insertions(+), 63 deletions(-) diff --git a/src/Ryujinx.Graphics.OpenGL/Effects/AreaScalingFilter.cs b/src/Ryujinx.Graphics.OpenGL/Effects/AreaScalingFilter.cs index 9b19f2f26..927f4cbfe 100644 --- a/src/Ryujinx.Graphics.OpenGL/Effects/AreaScalingFilter.cs +++ b/src/Ryujinx.Graphics.OpenGL/Effects/AreaScalingFilter.cs @@ -41,7 +41,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects private void Initialize() { - var scalingShader = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/area_scaling.glsl"); + string scalingShader = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/area_scaling.glsl"); _scalingShaderProgram = CompileProgram(scalingShader, ShaderType.ComputeShader); diff --git a/src/Ryujinx.Graphics.OpenGL/Effects/FsrScalingFilter.cs b/src/Ryujinx.Graphics.OpenGL/Effects/FsrScalingFilter.cs index 0522e28e0..c1275eb80 100644 --- a/src/Ryujinx.Graphics.OpenGL/Effects/FsrScalingFilter.cs +++ b/src/Ryujinx.Graphics.OpenGL/Effects/FsrScalingFilter.cs @@ -57,10 +57,10 @@ namespace Ryujinx.Graphics.OpenGL.Effects private void Initialize() { - var scalingShader = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/fsr_scaling.glsl"); - var sharpeningShader = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/fsr_sharpening.glsl"); - var fsrA = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/ffx_a.h"); - var fsr1 = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/ffx_fsr1.h"); + string scalingShader = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/fsr_scaling.glsl"); + string sharpeningShader = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/fsr_sharpening.glsl"); + string fsrA = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/ffx_a.h"); + string fsr1 = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/ffx_fsr1.h"); scalingShader = scalingShader.Replace("#include \"ffx_a.h\"", fsrA); scalingShader = scalingShader.Replace("#include \"ffx_fsr1.h\"", fsr1); @@ -97,8 +97,8 @@ namespace Ryujinx.Graphics.OpenGL.Effects if (_intermediaryTexture == null || _intermediaryTexture.Info.Width != width || _intermediaryTexture.Info.Height != height) { _intermediaryTexture?.Dispose(); - var originalInfo = view.Info; - var info = new TextureCreateInfo(width, + TextureCreateInfo originalInfo = view.Info; + TextureCreateInfo info = new TextureCreateInfo(width, height, originalInfo.Depth, originalInfo.Levels, @@ -118,7 +118,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects _intermediaryTexture.CreateDefaultView(); } - var textureView = _intermediaryTexture.CreateView(_intermediaryTexture.Info, 0, 0) as TextureView; + TextureView textureView = _intermediaryTexture.CreateView(_intermediaryTexture.Info, 0, 0) as TextureView; int previousProgram = GL.GetInteger(GetPName.CurrentProgram); int previousUnit = GL.GetInteger(GetPName.ActiveTexture); diff --git a/src/Ryujinx.Graphics.OpenGL/Effects/FxaaPostProcessingEffect.cs b/src/Ryujinx.Graphics.OpenGL/Effects/FxaaPostProcessingEffect.cs index 4e92efe6d..26be5b3ae 100644 --- a/src/Ryujinx.Graphics.OpenGL/Effects/FxaaPostProcessingEffect.cs +++ b/src/Ryujinx.Graphics.OpenGL/Effects/FxaaPostProcessingEffect.cs @@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects _textureStorage.CreateDefaultView(); } - var textureView = _textureStorage.CreateView(view.Info, 0, 0) as TextureView; + TextureView textureView = _textureStorage.CreateView(view.Info, 0, 0) as TextureView; int previousProgram = GL.GetInteger(GetPName.CurrentProgram); int previousUnit = GL.GetInteger(GetPName.ActiveTexture); @@ -57,8 +57,8 @@ namespace Ryujinx.Graphics.OpenGL.Effects GL.BindImageTexture(0, textureView.Handle, 0, false, 0, TextureAccess.ReadWrite, SizedInternalFormat.Rgba8); GL.UseProgram(_shaderProgram); - var dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize); - var dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize); + int dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize); + int dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize); view.Bind(0); GL.Uniform1(_inputUniform, 0); diff --git a/src/Ryujinx.Graphics.OpenGL/Effects/ShaderHelper.cs b/src/Ryujinx.Graphics.OpenGL/Effects/ShaderHelper.cs index 637b2fba8..021388f81 100644 --- a/src/Ryujinx.Graphics.OpenGL/Effects/ShaderHelper.cs +++ b/src/Ryujinx.Graphics.OpenGL/Effects/ShaderHelper.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects public static int CompileProgram(string[] shaders, ShaderType shaderType) { - var shader = GL.CreateShader(shaderType); + int shader = GL.CreateShader(shaderType); GL.ShaderSource(shader, shaders.Length, shaders, (int[])null); GL.CompileShader(shader); @@ -25,7 +25,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects return 0; } - var program = GL.CreateProgram(); + int program = GL.CreateProgram(); GL.AttachShader(program, shader); GL.LinkProgram(program); diff --git a/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs b/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs index a6c5e4aca..bb320fcec 100644 --- a/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs +++ b/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs @@ -1,5 +1,6 @@ using OpenTK.Graphics.OpenGL; using Ryujinx.Common; +using Ryujinx.Common.Memory; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.OpenGL.Image; using System; @@ -78,7 +79,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa private unsafe void RecreateShaders(int width, int height) { string baseShader = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/smaa.hlsl"); - var pixelSizeDefine = $"#define SMAA_RT_METRICS float4(1.0 / {width}.0, 1.0 / {height}.0, {width}, {height}) \n"; + string pixelSizeDefine = $"#define SMAA_RT_METRICS float4(1.0 / {width}.0, 1.0 / {height}.0, {width}, {height}) \n"; _edgeShaderPrograms = new int[_qualities.Length]; _blendShaderPrograms = new int[_qualities.Length]; @@ -86,20 +87,20 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa for (int i = 0; i < +_edgeShaderPrograms.Length; i++) { - var presets = $"#version 430 core \n#define {_qualities[i]} 1 \n{pixelSizeDefine}#define SMAA_GLSL_4 1 \nlayout (local_size_x = 16, local_size_y = 16) in;\n{baseShader}"; + string presets = $"#version 430 core \n#define {_qualities[i]} 1 \n{pixelSizeDefine}#define SMAA_GLSL_4 1 \nlayout (local_size_x = 16, local_size_y = 16) in;\n{baseShader}"; - var edgeShaderData = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/smaa_edge.glsl"); - var blendShaderData = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/smaa_blend.glsl"); - var neighbourShaderData = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/smaa_neighbour.glsl"); + string edgeShaderData = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/smaa_edge.glsl"); + string blendShaderData = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/smaa_blend.glsl"); + string neighbourShaderData = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/smaa_neighbour.glsl"); - var shaders = new string[] { presets, edgeShaderData }; - var edgeProgram = ShaderHelper.CompileProgram(shaders, ShaderType.ComputeShader); + string[] shaders = new string[] { presets, edgeShaderData }; + int edgeProgram = ShaderHelper.CompileProgram(shaders, ShaderType.ComputeShader); shaders[1] = blendShaderData; - var blendProgram = ShaderHelper.CompileProgram(shaders, ShaderType.ComputeShader); + int blendProgram = ShaderHelper.CompileProgram(shaders, ShaderType.ComputeShader); shaders[1] = neighbourShaderData; - var neighbourProgram = ShaderHelper.CompileProgram(shaders, ShaderType.ComputeShader); + int neighbourProgram = ShaderHelper.CompileProgram(shaders, ShaderType.ComputeShader); _edgeShaderPrograms[i] = edgeProgram; _blendShaderPrograms[i] = blendProgram; @@ -116,7 +117,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa private void Initialize() { - var areaInfo = new TextureCreateInfo(AreaWidth, + TextureCreateInfo areaInfo = new TextureCreateInfo(AreaWidth, AreaHeight, 1, 1, @@ -132,7 +133,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa SwizzleComponent.Blue, SwizzleComponent.Alpha); - var searchInfo = new TextureCreateInfo(SearchWidth, + TextureCreateInfo searchInfo = new TextureCreateInfo(SearchWidth, SearchHeight, 1, 1, @@ -151,11 +152,11 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa _areaTexture = new TextureStorage(_renderer, areaInfo); _searchTexture = new TextureStorage(_renderer, searchInfo); - var areaTexture = EmbeddedResources.ReadFileToRentedMemory("Ryujinx.Graphics.OpenGL/Effects/Textures/SmaaAreaTexture.bin"); - var searchTexture = EmbeddedResources.ReadFileToRentedMemory("Ryujinx.Graphics.OpenGL/Effects/Textures/SmaaSearchTexture.bin"); + MemoryOwner areaTexture = EmbeddedResources.ReadFileToRentedMemory("Ryujinx.Graphics.OpenGL/Effects/Textures/SmaaAreaTexture.bin"); + MemoryOwner searchTexture = EmbeddedResources.ReadFileToRentedMemory("Ryujinx.Graphics.OpenGL/Effects/Textures/SmaaSearchTexture.bin"); - var areaView = _areaTexture.CreateDefaultView(); - var searchView = _searchTexture.CreateDefaultView(); + ITexture areaView = _areaTexture.CreateDefaultView(); + ITexture searchView = _searchTexture.CreateDefaultView(); areaView.SetData(areaTexture); searchView.SetData(searchTexture); @@ -178,13 +179,13 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa RecreateShaders(view.Width, view.Height); } - var textureView = _outputTexture.CreateView(view.Info, 0, 0) as TextureView; - var edgeOutput = _edgeOutputTexture.DefaultView as TextureView; - var blendOutput = _blendOutputTexture.DefaultView as TextureView; - var areaTexture = _areaTexture.DefaultView as TextureView; - var searchTexture = _searchTexture.DefaultView as TextureView; + TextureView textureView = _outputTexture.CreateView(view.Info, 0, 0) as TextureView; + TextureView edgeOutput = _edgeOutputTexture.DefaultView as TextureView; + TextureView blendOutput = _blendOutputTexture.DefaultView as TextureView; + TextureView areaTexture = _areaTexture.DefaultView as TextureView; + TextureView searchTexture = _searchTexture.DefaultView as TextureView; - var previousFramebuffer = GL.GetInteger(GetPName.FramebufferBinding); + int previousFramebuffer = GL.GetInteger(GetPName.FramebufferBinding); int previousUnit = GL.GetInteger(GetPName.ActiveTexture); GL.ActiveTexture(TextureUnit.Texture0); int previousTextureBinding0 = GL.GetInteger(GetPName.TextureBinding2D); @@ -193,7 +194,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa GL.ActiveTexture(TextureUnit.Texture2); int previousTextureBinding2 = GL.GetInteger(GetPName.TextureBinding2D); - var framebuffer = new Framebuffer(); + Framebuffer framebuffer = new Framebuffer(); framebuffer.Bind(); framebuffer.AttachColor(0, edgeOutput); GL.Clear(ClearBufferMask.ColorBufferBit); @@ -206,8 +207,8 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa framebuffer.Dispose(); - var dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize); - var dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize); + int dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize); + int dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize); int previousProgram = GL.GetInteger(GetPName.CurrentProgram); GL.BindImageTexture(0, edgeOutput.Handle, 0, false, 0, TextureAccess.ReadWrite, SizedInternalFormat.Rgba8); diff --git a/src/Ryujinx.Graphics.OpenGL/Image/FormatConverter.cs b/src/Ryujinx.Graphics.OpenGL/Image/FormatConverter.cs index 490c0c585..64e4fe36d 100644 --- a/src/Ryujinx.Graphics.OpenGL/Image/FormatConverter.cs +++ b/src/Ryujinx.Graphics.OpenGL/Image/FormatConverter.cs @@ -19,7 +19,7 @@ namespace Ryujinx.Graphics.OpenGL.Image if (Avx2.IsSupported) { - var mask = Vector256.Create( + Vector256 mask = Vector256.Create( (byte)3, (byte)0, (byte)1, (byte)2, (byte)7, (byte)4, (byte)5, (byte)6, (byte)11, (byte)8, (byte)9, (byte)10, @@ -35,7 +35,7 @@ namespace Ryujinx.Graphics.OpenGL.Image { for (uint i = 0; i < sizeAligned; i += 32) { - var dataVec = Avx.LoadVector256(pInput + i); + Vector256 dataVec = Avx.LoadVector256(pInput + i); dataVec = Avx2.Shuffle(dataVec, mask); @@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.OpenGL.Image } else if (Ssse3.IsSupported) { - var mask = Vector128.Create( + Vector128 mask = Vector128.Create( (byte)3, (byte)0, (byte)1, (byte)2, (byte)7, (byte)4, (byte)5, (byte)6, (byte)11, (byte)8, (byte)9, (byte)10, @@ -59,7 +59,7 @@ namespace Ryujinx.Graphics.OpenGL.Image { for (uint i = 0; i < sizeAligned; i += 16) { - var dataVec = Sse2.LoadVector128(pInput + i); + Vector128 dataVec = Sse2.LoadVector128(pInput + i); dataVec = Ssse3.Shuffle(dataVec, mask); @@ -70,8 +70,8 @@ namespace Ryujinx.Graphics.OpenGL.Image start = sizeAligned; } - var outSpan = MemoryMarshal.Cast(output); - var dataSpan = MemoryMarshal.Cast(data); + Span outSpan = MemoryMarshal.Cast(output); + ReadOnlySpan dataSpan = MemoryMarshal.Cast(data); for (int i = start / sizeof(uint); i < dataSpan.Length; i++) { outSpan[i] = BitOperations.RotateLeft(dataSpan[i], 8); @@ -88,7 +88,7 @@ namespace Ryujinx.Graphics.OpenGL.Image if (Avx2.IsSupported) { - var mask = Vector256.Create( + Vector256 mask = Vector256.Create( (byte)1, (byte)2, (byte)3, (byte)0, (byte)5, (byte)6, (byte)7, (byte)4, (byte)9, (byte)10, (byte)11, (byte)8, @@ -104,7 +104,7 @@ namespace Ryujinx.Graphics.OpenGL.Image { for (uint i = 0; i < sizeAligned; i += 32) { - var dataVec = Avx.LoadVector256(pInput + i); + Vector256 dataVec = Avx.LoadVector256(pInput + i); dataVec = Avx2.Shuffle(dataVec, mask); @@ -116,7 +116,7 @@ namespace Ryujinx.Graphics.OpenGL.Image } else if (Ssse3.IsSupported) { - var mask = Vector128.Create( + Vector128 mask = Vector128.Create( (byte)1, (byte)2, (byte)3, (byte)0, (byte)5, (byte)6, (byte)7, (byte)4, (byte)9, (byte)10, (byte)11, (byte)8, @@ -128,7 +128,7 @@ namespace Ryujinx.Graphics.OpenGL.Image { for (uint i = 0; i < sizeAligned; i += 16) { - var dataVec = Sse2.LoadVector128(pInput + i); + Vector128 dataVec = Sse2.LoadVector128(pInput + i); dataVec = Ssse3.Shuffle(dataVec, mask); @@ -139,8 +139,8 @@ namespace Ryujinx.Graphics.OpenGL.Image start = sizeAligned; } - var outSpan = MemoryMarshal.Cast(output); - var dataSpan = MemoryMarshal.Cast(data); + Span outSpan = MemoryMarshal.Cast(output); + ReadOnlySpan dataSpan = MemoryMarshal.Cast(data); for (int i = start / sizeof(uint); i < dataSpan.Length; i++) { outSpan[i] = BitOperations.RotateRight(dataSpan[i], 8); diff --git a/src/Ryujinx.Graphics.OpenGL/Image/TextureBuffer.cs b/src/Ryujinx.Graphics.OpenGL/Image/TextureBuffer.cs index 8e728a2bb..231d9c97b 100644 --- a/src/Ryujinx.Graphics.OpenGL/Image/TextureBuffer.cs +++ b/src/Ryujinx.Graphics.OpenGL/Image/TextureBuffer.cs @@ -57,7 +57,7 @@ namespace Ryujinx.Graphics.OpenGL.Image /// public void SetData(MemoryOwner data) { - var dataSpan = data.Span; + Span dataSpan = data.Span; Buffer.SetData(_buffer, _bufferOffset, dataSpan[..Math.Min(dataSpan.Length, _bufferSize)]); diff --git a/src/Ryujinx.Graphics.OpenGL/Image/TextureCopyIncompatible.cs b/src/Ryujinx.Graphics.OpenGL/Image/TextureCopyIncompatible.cs index 082e6ccf8..1a94660b5 100644 --- a/src/Ryujinx.Graphics.OpenGL/Image/TextureCopyIncompatible.cs +++ b/src/Ryujinx.Graphics.OpenGL/Image/TextureCopyIncompatible.cs @@ -91,8 +91,8 @@ void main() int srcComponentsCount = srcBpp / componentSize; int dstComponentsCount = dstBpp / componentSize; - var srcFormat = GetFormat(componentSize, srcComponentsCount); - var dstFormat = GetFormat(componentSize, dstComponentsCount); + SizedInternalFormat srcFormat = GetFormat(componentSize, srcComponentsCount); + SizedInternalFormat dstFormat = GetFormat(componentSize, dstComponentsCount); GL.UseProgram(srcBpp < dstBpp ? GetWideningShader(componentSize, srcComponentsCount, dstComponentsCount) diff --git a/src/Ryujinx.Graphics.OpenGL/Image/TextureView.cs b/src/Ryujinx.Graphics.OpenGL/Image/TextureView.cs index a89dd5131..2c7b8f98c 100644 --- a/src/Ryujinx.Graphics.OpenGL/Image/TextureView.cs +++ b/src/Ryujinx.Graphics.OpenGL/Image/TextureView.cs @@ -454,7 +454,7 @@ namespace Ryujinx.Graphics.OpenGL.Image { unsafe { - var dataSpan = data.Span; + Span dataSpan = data.Span; fixed (byte* ptr = dataSpan) { ReadFrom((nint)ptr, dataSpan.Length); diff --git a/src/Ryujinx.Graphics.OpenGL/OpenGLRenderer.cs b/src/Ryujinx.Graphics.OpenGL/OpenGLRenderer.cs index 6ead314fd..af1494bbe 100644 --- a/src/Ryujinx.Graphics.OpenGL/OpenGLRenderer.cs +++ b/src/Ryujinx.Graphics.OpenGL/OpenGLRenderer.cs @@ -6,6 +6,7 @@ using Ryujinx.Graphics.OpenGL.Image; using Ryujinx.Graphics.OpenGL.Queries; using Ryujinx.Graphics.Shader.Translation; using System; +using BufferAccess = Ryujinx.Graphics.GAL.BufferAccess; namespace Ryujinx.Graphics.OpenGL { @@ -63,7 +64,7 @@ namespace Ryujinx.Graphics.OpenGL { BufferCount++; - var memType = access & GAL.BufferAccess.MemoryTypeMask; + BufferAccess memType = access & GAL.BufferAccess.MemoryTypeMask; if (memType == GAL.BufferAccess.HostMemory) { diff --git a/src/Ryujinx.Graphics.OpenGL/Pipeline.cs b/src/Ryujinx.Graphics.OpenGL/Pipeline.cs index 096e2e5eb..83319ea6d 100644 --- a/src/Ryujinx.Graphics.OpenGL/Pipeline.cs +++ b/src/Ryujinx.Graphics.OpenGL/Pipeline.cs @@ -1205,7 +1205,7 @@ namespace Ryujinx.Graphics.OpenGL { int vIndex = index * 4; - var region = regions[index]; + Rectangle region = regions[index]; bool enabled = (region.X | region.Y) != 0 || region.Width != 0xffff || region.Height != 0xffff; uint mask = 1u << index; diff --git a/src/Ryujinx.Graphics.OpenGL/Queries/Counters.cs b/src/Ryujinx.Graphics.OpenGL/Queries/Counters.cs index 1530c9d26..436f03756 100644 --- a/src/Ryujinx.Graphics.OpenGL/Queries/Counters.cs +++ b/src/Ryujinx.Graphics.OpenGL/Queries/Counters.cs @@ -35,7 +35,7 @@ namespace Ryujinx.Graphics.OpenGL.Queries public void Update() { - foreach (var queue in _counterQueues) + foreach (CounterQueue queue in _counterQueues) { queue.Flush(false); } @@ -48,7 +48,7 @@ namespace Ryujinx.Graphics.OpenGL.Queries public void Dispose() { - foreach (var queue in _counterQueues) + foreach (CounterQueue queue in _counterQueues) { queue.Dispose(); } diff --git a/src/Ryujinx.Graphics.OpenGL/VertexArray.cs b/src/Ryujinx.Graphics.OpenGL/VertexArray.cs index 2db84421f..bd8e9eafa 100644 --- a/src/Ryujinx.Graphics.OpenGL/VertexArray.cs +++ b/src/Ryujinx.Graphics.OpenGL/VertexArray.cs @@ -177,7 +177,7 @@ namespace Ryujinx.Graphics.OpenGL { int vbIndex = BitOperations.TrailingZeroCount(buffersInUse); - ref var vb = ref _vertexBuffers[vbIndex]; + ref VertexBufferDescriptor vb = ref _vertexBuffers[vbIndex]; int requiredSize = vertexCount * vb.Stride; @@ -232,7 +232,7 @@ namespace Ryujinx.Graphics.OpenGL { int vbIndex = BitOperations.TrailingZeroCount(buffersLimited); - ref var vb = ref _vertexBuffers[vbIndex]; + ref VertexBufferDescriptor vb = ref _vertexBuffers[vbIndex]; GL.BindVertexBuffer(vbIndex, vb.Buffer.Handle.ToInt32(), (nint)vb.Buffer.Offset, vb.Stride); diff --git a/src/Ryujinx.Graphics.OpenGL/Window.cs b/src/Ryujinx.Graphics.OpenGL/Window.cs index f161be506..c75fa5078 100644 --- a/src/Ryujinx.Graphics.OpenGL/Window.cs +++ b/src/Ryujinx.Graphics.OpenGL/Window.cs @@ -76,13 +76,13 @@ namespace Ryujinx.Graphics.OpenGL if (_antiAliasing != null) { - var oldView = viewConverted; + TextureView oldView = viewConverted; viewConverted = _antiAliasing.Run(viewConverted, _width, _height); if (viewConverted.Format.IsBgr()) { - var swappedView = _renderer.TextureCopy.BgraSwap(viewConverted); + TextureView swappedView = _renderer.TextureCopy.BgraSwap(viewConverted); viewConverted?.Dispose(); @@ -330,7 +330,7 @@ namespace Ryujinx.Graphics.OpenGL case AntiAliasing.SmaaMedium: case AntiAliasing.SmaaHigh: case AntiAliasing.SmaaUltra: - var quality = _currentAntiAliasing - AntiAliasing.SmaaLow; + int quality = _currentAntiAliasing - AntiAliasing.SmaaLow; if (_antiAliasing is SmaaPostProcessingEffect smaa) { smaa.Quality = quality; @@ -394,7 +394,7 @@ namespace Ryujinx.Graphics.OpenGL { _upscaledTexture?.Dispose(); - var info = new TextureCreateInfo( + TextureCreateInfo info = new TextureCreateInfo( _width, _height, 1, -- 2.47.1 From 5eba42fa06d83b980019f3b164f87ff73ffd4ec8 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:13:18 -0600 Subject: [PATCH 434/722] misc: chore: Use explicit types in HLE project --- .../ServiceNotImplementedException.cs | 23 ++--- src/Ryujinx.HLE/FileSystem/ContentManager.cs | 96 +++++++++---------- src/Ryujinx.HLE/FileSystem/ContentMetaData.cs | 2 +- .../FileSystem/VirtualFileSystem.cs | 26 ++--- .../HOS/Applets/Error/ErrorApplet.cs | 2 +- .../SoftwareKeyboardApplet.cs | 16 ++-- .../SoftwareKeyboardRenderer.cs | 4 +- .../SoftwareKeyboardRendererBase.cs | 80 ++++++++-------- .../Applets/SoftwareKeyboard/TimedAction.cs | 10 +- .../HOS/ArmProcessContextFactory.cs | 10 +- .../HOS/Diagnostics/Demangler/Demangler.cs | 2 +- src/Ryujinx.HLE/HOS/Horizon.cs | 16 ++-- src/Ryujinx.HLE/HOS/HorizonFsClient.cs | 6 +- .../HOS/Kernel/Memory/KMemoryManager.cs | 4 +- .../HOS/Kernel/Memory/KMemoryRegionManager.cs | 2 +- .../HOS/Kernel/Memory/KPageBitmap.cs | 2 +- .../HOS/Kernel/Memory/KPageHeap.cs | 2 +- .../HOS/Kernel/Memory/KPageList.cs | 4 +- .../HOS/Kernel/Memory/KPageTable.cs | 18 ++-- .../HOS/Kernel/Memory/KPageTableBase.cs | 12 +-- .../HOS/Kernel/Process/HleProcessDebugger.cs | 9 +- .../HOS/Kernel/SupervisorCall/Syscall.cs | 6 +- .../HOS/Kernel/Threading/KAddressArbiter.cs | 4 +- .../HOS/Kernel/Threading/KPriorityQueue.cs | 4 +- .../HOS/Kernel/Threading/KThread.cs | 2 +- src/Ryujinx.HLE/HOS/LibHacHorizonManager.cs | 2 +- src/Ryujinx.HLE/HOS/ModLoader.cs | 95 +++++++++--------- .../Services/Account/Acc/AccountManager.cs | 4 +- .../Account/Acc/AccountSaveDataManager.cs | 4 +- .../Acc/AccountService/ManagerServer.cs | 2 +- .../SystemAppletProxy/ICommonStateGetter.cs | 2 +- .../HOS/Services/Caps/CaptureManager.cs | 6 +- .../FileSystemProxy/FileSystemProxyHelper.cs | 10 +- .../Services/Fs/FileSystemProxy/IDirectory.cs | 3 +- .../HOS/Services/Fs/FileSystemProxy/IFile.cs | 3 +- .../Fs/FileSystemProxy/IFileSystem.cs | 4 +- .../Services/Fs/FileSystemProxy/IStorage.cs | 3 +- .../HOS/Services/Fs/IFileSystemProxy.cs | 89 ++++++++--------- .../HOS/Services/Fs/ISaveDataInfoReader.cs | 3 +- .../HOS/Services/Hid/Irs/IIrSensorServer.cs | 8 +- .../IUserLocalCommunicationService.cs | 2 +- .../LdnMitm/LanDiscovery.cs | 2 +- .../LdnMitm/Proxy/LdnProxyUdpServer.cs | 4 +- .../LdnRyu/LdnMasterProxyClient.cs | 4 +- .../LdnRyu/Proxy/LdnProxySocket.cs | 2 +- .../HOS/Services/Mii/Types/CoreData.cs | 24 ++--- .../Nfc/AmiiboDecryption/AmiiboDecryptor.cs | 4 +- .../Nfc/AmiiboDecryption/AmiiboDump.cs | 20 ++-- .../HOS/Services/Nv/Host1xContext.cs | 4 +- .../NvHostAsGpu/NvHostAsGpuDeviceFile.cs | 6 +- .../NvHostChannel/NvHostChannelDeviceFile.cs | 2 +- .../QueryPlayStatisticsManager.cs | 2 +- .../HOS/Services/Sdb/Pl/SharedFontManager.cs | 2 +- src/Ryujinx.HLE/HOS/Services/ServerBase.cs | 9 +- .../Settings/ISystemSettingsServer.cs | 2 +- .../HOS/Services/Sockets/Bsd/IClient.cs | 6 +- .../Sockets/Bsd/Impl/WinSockHelper.cs | 4 +- .../Sockets/Bsd/Proxy/SocketHelpers.cs | 6 +- .../Sockets/Sfdnsres/Proxy/DnsMitmResolver.cs | 2 +- .../Services/Ssl/BuiltInCertificateManager.cs | 2 +- .../Services/Ssl/SslService/ISslConnection.cs | 2 +- .../Time/TimeZone/TimeZoneContentManager.cs | 12 +-- .../CodeEmitters/EndConditionalBlock.cs | 2 +- .../HOS/Tamper/InstructionHelper.cs | 2 +- src/Ryujinx.HLE/HOS/TamperMachine.cs | 6 +- .../Loaders/Executables/KipExecutable.cs | 2 +- .../Loaders/Executables/NsoExecutable.cs | 2 +- src/Ryujinx.HLE/Loaders/Mods/IPSPatcher.cs | 4 +- .../Loaders/Mods/IPSwitchPatcher.cs | 8 +- src/Ryujinx.HLE/Loaders/Mods/MemPatch.cs | 4 +- .../Extensions/FileSystemExtensions.cs | 2 +- .../Extensions/LocalFileSystemExtensions.cs | 2 +- .../Extensions/MetaLoaderExtensions.cs | 8 +- .../Processes/Extensions/NcaExtensions.cs | 8 +- .../PartitionFileSystemExtensions.cs | 4 +- .../Loaders/Processes/ProcessLoader.cs | 2 +- .../Loaders/Processes/ProcessLoaderHelper.cs | 10 +- src/Ryujinx.HLE/StructHelpers.cs | 2 +- src/Ryujinx.HLE/UI/Input/NpadReader.cs | 14 +-- .../Utilities/PartitionFileSystemUtils.cs | 2 +- 80 files changed, 410 insertions(+), 397 deletions(-) diff --git a/src/Ryujinx.HLE/Exceptions/ServiceNotImplementedException.cs b/src/Ryujinx.HLE/Exceptions/ServiceNotImplementedException.cs index 408b5baa4..17aab8105 100644 --- a/src/Ryujinx.HLE/Exceptions/ServiceNotImplementedException.cs +++ b/src/Ryujinx.HLE/Exceptions/ServiceNotImplementedException.cs @@ -3,6 +3,7 @@ using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.HOS.Services; using System; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; @@ -53,12 +54,12 @@ namespace Ryujinx.HLE.Exceptions if (callingType != null && callingMethod != null) { // If the type is past 0xF, we are using TIPC - var ipcCommands = Request.Type > IpcMessageType.TipcCloseSession ? Service.TipcCommands : Service.CmifCommands; + IReadOnlyDictionary ipcCommands = Request.Type > IpcMessageType.TipcCloseSession ? Service.TipcCommands : Service.CmifCommands; // Find the handler for the method called - var ipcHandler = ipcCommands.FirstOrDefault(x => x.Value == callingMethod); - var ipcCommandId = ipcHandler.Key; - var ipcMethod = ipcHandler.Value; + KeyValuePair ipcHandler = ipcCommands.FirstOrDefault(x => x.Value == callingMethod); + int ipcCommandId = ipcHandler.Key; + MethodInfo ipcMethod = ipcHandler.Value; if (ipcMethod != null) { @@ -83,7 +84,7 @@ namespace Ryujinx.HLE.Exceptions { sb.AppendLine("\tPtrBuff:"); - foreach (var buff in Request.PtrBuff) + foreach (IpcPtrBuffDesc buff in Request.PtrBuff) { sb.AppendLine($"\t[{buff.Index}] Position: 0x{buff.Position:x16} Size: 0x{buff.Size:x16}"); } @@ -93,7 +94,7 @@ namespace Ryujinx.HLE.Exceptions { sb.AppendLine("\tSendBuff:"); - foreach (var buff in Request.SendBuff) + foreach (IpcBuffDesc buff in Request.SendBuff) { sb.AppendLine($"\tPosition: 0x{buff.Position:x16} Size: 0x{buff.Size:x16} Flags: {buff.Flags}"); } @@ -103,7 +104,7 @@ namespace Ryujinx.HLE.Exceptions { sb.AppendLine("\tReceiveBuff:"); - foreach (var buff in Request.ReceiveBuff) + foreach (IpcBuffDesc buff in Request.ReceiveBuff) { sb.AppendLine($"\tPosition: 0x{buff.Position:x16} Size: 0x{buff.Size:x16} Flags: {buff.Flags}"); } @@ -113,7 +114,7 @@ namespace Ryujinx.HLE.Exceptions { sb.AppendLine("\tExchangeBuff:"); - foreach (var buff in Request.ExchangeBuff) + foreach (IpcBuffDesc buff in Request.ExchangeBuff) { sb.AppendLine($"\tPosition: 0x{buff.Position:x16} Size: 0x{buff.Size:x16} Flags: {buff.Flags}"); } @@ -123,7 +124,7 @@ namespace Ryujinx.HLE.Exceptions { sb.AppendLine("\tRecvListBuff:"); - foreach (var buff in Request.RecvListBuff) + foreach (IpcRecvListBuffDesc buff in Request.RecvListBuff) { sb.AppendLine($"\tPosition: 0x{buff.Position:x16} Size: 0x{buff.Size:x16}"); } @@ -147,8 +148,8 @@ namespace Ryujinx.HLE.Exceptions // Find the IIpcService method that threw this exception while ((frame = trace.GetFrame(i++)) != null) { - var method = frame.GetMethod(); - var declType = method.DeclaringType; + MethodBase method = frame.GetMethod(); + Type declType = method.DeclaringType; if (typeof(IpcService).IsAssignableFrom(declType)) { diff --git a/src/Ryujinx.HLE/FileSystem/ContentManager.cs b/src/Ryujinx.HLE/FileSystem/ContentManager.cs index a87453d00..bce896ea1 100644 --- a/src/Ryujinx.HLE/FileSystem/ContentManager.cs +++ b/src/Ryujinx.HLE/FileSystem/ContentManager.cs @@ -107,15 +107,15 @@ namespace Ryujinx.HLE.FileSystem foreach (StorageId storageId in Enum.GetValues()) { - if (!ContentPath.TryGetContentPath(storageId, out var contentPathString)) + if (!ContentPath.TryGetContentPath(storageId, out string contentPathString)) { continue; } - if (!ContentPath.TryGetRealPath(contentPathString, out var contentDirectory)) + if (!ContentPath.TryGetRealPath(contentPathString, out string contentDirectory)) { continue; } - var registeredDirectory = Path.Combine(contentDirectory, "registered"); + string registeredDirectory = Path.Combine(contentDirectory, "registered"); Directory.CreateDirectory(registeredDirectory); @@ -170,7 +170,7 @@ namespace Ryujinx.HLE.FileSystem } } - if (_locationEntries.TryGetValue(storageId, out var locationEntriesItem) && locationEntriesItem?.Count == 0) + if (_locationEntries.TryGetValue(storageId, out LinkedList locationEntriesItem) && locationEntriesItem?.Count == 0) { _locationEntries.Remove(storageId); } @@ -200,7 +200,7 @@ namespace Ryujinx.HLE.FileSystem if (!mergedToContainer) { - using var pfs = PartitionFileSystemUtils.OpenApplicationFileSystem(containerPath, _virtualFileSystem); + using IFileSystem pfs = PartitionFileSystemUtils.OpenApplicationFileSystem(containerPath, _virtualFileSystem); } } } @@ -217,17 +217,17 @@ namespace Ryujinx.HLE.FileSystem if (AocData.TryGetValue(aocTitleId, out AocItem aoc)) { - var file = new FileStream(aoc.ContainerPath, FileMode.Open, FileAccess.Read); - using var ncaFile = new UniqueRef(); + FileStream file = new FileStream(aoc.ContainerPath, FileMode.Open, FileAccess.Read); + using UniqueRef ncaFile = new UniqueRef(); switch (Path.GetExtension(aoc.ContainerPath)) { case ".xci": - var xci = new Xci(_virtualFileSystem.KeySet, file.AsStorage()).OpenPartition(XciPartitionType.Secure); + XciPartition xci = new Xci(_virtualFileSystem.KeySet, file.AsStorage()).OpenPartition(XciPartitionType.Secure); xci.OpenFile(ref ncaFile.Ref, aoc.NcaPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); break; case ".nsp": - var pfs = new PartitionFileSystem(); + PartitionFileSystem pfs = new PartitionFileSystem(); pfs.Initialize(file.AsStorage()); pfs.OpenFile(ref ncaFile.Ref, aoc.NcaPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); break; @@ -278,7 +278,7 @@ namespace Ryujinx.HLE.FileSystem { if (_contentDictionary.ContainsValue(ncaId)) { - var content = _contentDictionary.FirstOrDefault(x => x.Value == ncaId); + KeyValuePair<(ulong titleId, NcaContentType type), string> content = _contentDictionary.FirstOrDefault(x => x.Value == ncaId); ulong titleId = content.Key.titleId; NcaContentType contentType = content.Key.type; @@ -295,7 +295,7 @@ namespace Ryujinx.HLE.FileSystem { lock (_lock) { - if (_contentDictionary.TryGetValue((titleId, contentType), out var contentDictionaryItem)) + if (_contentDictionary.TryGetValue((titleId, contentType), out string contentDictionaryItem)) { return UInt128Utils.FromHex(contentDictionaryItem); } @@ -430,8 +430,8 @@ namespace Ryujinx.HLE.FileSystem public void InstallFirmware(string firmwareSource) { - ContentPath.TryGetContentPath(StorageId.BuiltInSystem, out var contentPathString); - ContentPath.TryGetRealPath(contentPathString, out var contentDirectory); + ContentPath.TryGetContentPath(StorageId.BuiltInSystem, out string contentPathString); + ContentPath.TryGetRealPath(contentPathString, out string contentDirectory); string registeredDirectory = Path.Combine(contentDirectory, "registered"); string temporaryDirectory = Path.Combine(contentDirectory, "temp"); @@ -480,7 +480,7 @@ namespace Ryujinx.HLE.FileSystem { if (Directory.Exists(keysSource)) { - foreach (var filePath in Directory.EnumerateFiles(keysSource, "*.keys")) + foreach (string filePath in Directory.EnumerateFiles(keysSource, "*.keys")) { VerifyKeysFile(filePath); File.Copy(filePath, Path.Combine(installDirectory, Path.GetFileName(filePath)), true); @@ -523,7 +523,7 @@ namespace Ryujinx.HLE.FileSystem Directory.Delete(temporaryDirectory, true); } Directory.CreateDirectory(temporaryDirectory); - foreach (var entry in archive.Entries) + foreach (ZipArchiveEntry entry in archive.Entries) { if (Path.GetExtension(entry.FullName).Equals(".keys", StringComparison.OrdinalIgnoreCase)) { @@ -563,7 +563,7 @@ namespace Ryujinx.HLE.FileSystem private void InstallFromPartition(IFileSystem filesystem, string temporaryDirectory) { - foreach (var entry in filesystem.EnumerateEntries("/", "*.nca")) + foreach (DirectoryEntryEx entry in filesystem.EnumerateEntries("/", "*.nca")) { Nca nca = new(_virtualFileSystem.KeySet, OpenPossibleFragmentedFile(filesystem, entry.FullPath, OpenMode.Read).AsStorage()); @@ -587,7 +587,7 @@ namespace Ryujinx.HLE.FileSystem private static void InstallFromZip(ZipArchive archive, string temporaryDirectory) { - foreach (var entry in archive.Entries) + foreach (ZipArchiveEntry entry in archive.Entries) { if (entry.FullName.EndsWith(".nca") || entry.FullName.EndsWith(".nca/00")) { @@ -627,7 +627,7 @@ namespace Ryujinx.HLE.FileSystem private static IFile OpenPossibleFragmentedFile(IFileSystem filesystem, string path, OpenMode mode) { - using var file = new UniqueRef(); + using UniqueRef file = new UniqueRef(); if (filesystem.FileExists($"{path}/00")) { @@ -697,7 +697,7 @@ namespace Ryujinx.HLE.FileSystem { SystemVersion systemVersion = null; - foreach (var entry in archive.Entries) + foreach (ZipArchiveEntry entry in archive.Entries) { if (entry.FullName.EndsWith(".nca") || entry.FullName.EndsWith(".nca/00")) { @@ -706,7 +706,7 @@ namespace Ryujinx.HLE.FileSystem Nca nca = new(_virtualFileSystem.KeySet, storage); - if (updateNcas.TryGetValue(nca.Header.TitleId, out var updateNcasItem)) + if (updateNcas.TryGetValue(nca.Header.TitleId, out List<(NcaContentType type, string path)> updateNcasItem)) { updateNcasItem.Add((nca.Header.ContentType, entry.FullName)); } @@ -717,13 +717,13 @@ namespace Ryujinx.HLE.FileSystem } } - if (updateNcas.TryGetValue(SystemUpdateTitleId, out var ncaEntry)) + if (updateNcas.TryGetValue(SystemUpdateTitleId, out List<(NcaContentType type, string path)> ncaEntry)) { string metaPath = ncaEntry.FirstOrDefault(x => x.type == NcaContentType.Meta).path; CnmtContentMetaEntry[] metaEntries = null; - var fileEntry = archive.GetEntry(metaPath); + ZipArchiveEntry fileEntry = archive.GetEntry(metaPath); using (Stream ncaStream = GetZipStream(fileEntry)) { @@ -733,11 +733,11 @@ namespace Ryujinx.HLE.FileSystem string cnmtPath = fs.EnumerateEntries("/", "*.cnmt").Single().FullPath; - using var metaFile = new UniqueRef(); + using UniqueRef metaFile = new UniqueRef(); if (fs.OpenFile(ref metaFile.Ref, cnmtPath.ToU8Span(), OpenMode.Read).IsSuccess()) { - var meta = new Cnmt(metaFile.Get.AsStream()); + Cnmt meta = new Cnmt(metaFile.Get.AsStream()); if (meta.Type == ContentMetaType.SystemUpdate) { @@ -753,16 +753,16 @@ namespace Ryujinx.HLE.FileSystem throw new FileNotFoundException("System update title was not found in the firmware package."); } - if (updateNcas.TryGetValue(SystemVersionTitleId, out var updateNcasItem)) + if (updateNcas.TryGetValue(SystemVersionTitleId, out List<(NcaContentType type, string path)> updateNcasItem)) { string versionEntry = updateNcasItem.FirstOrDefault(x => x.type != NcaContentType.Meta).path; using Stream ncaStream = GetZipStream(archive.GetEntry(versionEntry)); Nca nca = new(_virtualFileSystem.KeySet, ncaStream.AsStorage()); - var romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid); + IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid); - using var systemVersionFile = new UniqueRef(); + using UniqueRef systemVersionFile = new UniqueRef(); if (romfs.OpenFile(ref systemVersionFile.Ref, "/file".ToU8Span(), OpenMode.Read).IsSuccess()) { @@ -798,11 +798,11 @@ namespace Ryujinx.HLE.FileSystem string cnmtPath = fs.EnumerateEntries("/", "*.cnmt").Single().FullPath; - using var metaFile = new UniqueRef(); + using UniqueRef metaFile = new UniqueRef(); if (fs.OpenFile(ref metaFile.Ref, cnmtPath.ToU8Span(), OpenMode.Read).IsSuccess()) { - var meta = new Cnmt(metaFile.Get.AsStream()); + Cnmt meta = new Cnmt(metaFile.Get.AsStream()); IStorage contentStorage = contentNcaStream.AsStorage(); if (contentStorage.GetSize(out long size).IsSuccess()) @@ -830,9 +830,9 @@ namespace Ryujinx.HLE.FileSystem { StringBuilder extraNcas = new(); - foreach (var entry in updateNcas) + foreach (KeyValuePair> entry in updateNcas) { - foreach (var (type, path) in entry.Value) + foreach ((NcaContentType type, string path) in entry.Value) { extraNcas.AppendLine(path); } @@ -855,7 +855,7 @@ namespace Ryujinx.HLE.FileSystem CnmtContentMetaEntry[] metaEntries = null; - foreach (var entry in filesystem.EnumerateEntries("/", "*.nca")) + foreach (DirectoryEntryEx entry in filesystem.EnumerateEntries("/", "*.nca")) { IStorage ncaStorage = OpenPossibleFragmentedFile(filesystem, entry.FullPath, OpenMode.Read).AsStorage(); @@ -867,11 +867,11 @@ namespace Ryujinx.HLE.FileSystem string cnmtPath = fs.EnumerateEntries("/", "*.cnmt").Single().FullPath; - using var metaFile = new UniqueRef(); + using UniqueRef metaFile = new UniqueRef(); if (fs.OpenFile(ref metaFile.Ref, cnmtPath.ToU8Span(), OpenMode.Read).IsSuccess()) { - var meta = new Cnmt(metaFile.Get.AsStream()); + Cnmt meta = new Cnmt(metaFile.Get.AsStream()); if (meta.Type == ContentMetaType.SystemUpdate) { @@ -883,9 +883,9 @@ namespace Ryujinx.HLE.FileSystem } else if (nca.Header.TitleId == SystemVersionTitleId && nca.Header.ContentType == NcaContentType.Data) { - var romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid); + IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid); - using var systemVersionFile = new UniqueRef(); + using UniqueRef systemVersionFile = new UniqueRef(); if (romfs.OpenFile(ref systemVersionFile.Ref, "/file".ToU8Span(), OpenMode.Read).IsSuccess()) { @@ -893,7 +893,7 @@ namespace Ryujinx.HLE.FileSystem } } - if (updateNcas.TryGetValue(nca.Header.TitleId, out var updateNcasItem)) + if (updateNcas.TryGetValue(nca.Header.TitleId, out List<(NcaContentType type, string path)> updateNcasItem)) { updateNcasItem.Add((nca.Header.ContentType, entry.FullPath)); } @@ -912,7 +912,7 @@ namespace Ryujinx.HLE.FileSystem foreach (CnmtContentMetaEntry metaEntry in metaEntries) { - if (updateNcas.TryGetValue(metaEntry.TitleId, out var ncaEntry)) + if (updateNcas.TryGetValue(metaEntry.TitleId, out List<(NcaContentType type, string path)> ncaEntry)) { string metaNcaPath = ncaEntry.FirstOrDefault(x => x.type == NcaContentType.Meta).path; string contentPath = ncaEntry.FirstOrDefault(x => x.type != NcaContentType.Meta).path; @@ -935,11 +935,11 @@ namespace Ryujinx.HLE.FileSystem string cnmtPath = fs.EnumerateEntries("/", "*.cnmt").Single().FullPath; - using var metaFile = new UniqueRef(); + using UniqueRef metaFile = new UniqueRef(); if (fs.OpenFile(ref metaFile.Ref, cnmtPath.ToU8Span(), OpenMode.Read).IsSuccess()) { - var meta = new Cnmt(metaFile.Get.AsStream()); + Cnmt meta = new Cnmt(metaFile.Get.AsStream()); if (contentStorage.GetSize(out long size).IsSuccess()) { @@ -966,9 +966,9 @@ namespace Ryujinx.HLE.FileSystem { StringBuilder extraNcas = new(); - foreach (var entry in updateNcas) + foreach (KeyValuePair> entry in updateNcas) { - foreach (var (type, path) in entry.Value) + foreach ((NcaContentType type, string path) in entry.Value) { extraNcas.AppendLine(path); } @@ -987,22 +987,22 @@ namespace Ryujinx.HLE.FileSystem lock (_lock) { - var locationEnties = _locationEntries[StorageId.BuiltInSystem]; + LinkedList locationEnties = _locationEntries[StorageId.BuiltInSystem]; - foreach (var entry in locationEnties) + foreach (LocationEntry entry in locationEnties) { if (entry.ContentType == NcaContentType.Data) { - var path = VirtualFileSystem.SwitchPathToSystemPath(entry.ContentPath); + string path = VirtualFileSystem.SwitchPathToSystemPath(entry.ContentPath); using FileStream fileStream = File.OpenRead(path); Nca nca = new(_virtualFileSystem.KeySet, fileStream.AsStorage()); if (nca.Header.TitleId == SystemVersionTitleId && nca.Header.ContentType == NcaContentType.Data) { - var romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid); + IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid); - using var systemVersionFile = new UniqueRef(); + using UniqueRef systemVersionFile = new UniqueRef(); if (romfs.OpenFile(ref systemVersionFile.Ref, "/file".ToU8Span(), OpenMode.Read).IsSuccess()) { @@ -1073,7 +1073,7 @@ namespace Ryujinx.HLE.FileSystem public bool AreKeysAlredyPresent(string pathToCheck) { string[] fileNames = { "prod.keys", "title.keys", "console.keys", "dev.keys" }; - foreach (var file in fileNames) + foreach (string file in fileNames) { if (File.Exists(Path.Combine(pathToCheck, file))) { diff --git a/src/Ryujinx.HLE/FileSystem/ContentMetaData.cs b/src/Ryujinx.HLE/FileSystem/ContentMetaData.cs index 8cdb889be..a1f29bd13 100644 --- a/src/Ryujinx.HLE/FileSystem/ContentMetaData.cs +++ b/src/Ryujinx.HLE/FileSystem/ContentMetaData.cs @@ -39,7 +39,7 @@ namespace Ryujinx.HLE.FileSystem // TODO: Replace this with a check for IdOffset as soon as LibHac supports it: // && entry.IdOffset == programIndex - foreach (var entry in _cnmt.ContentEntries) + foreach (CnmtContentEntry entry in _cnmt.ContentEntries) { if (entry.Type != type) { diff --git a/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs b/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs index ef9c493a8..789caee4c 100644 --- a/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs +++ b/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs @@ -61,7 +61,7 @@ namespace Ryujinx.HLE.FileSystem public void LoadRomFs(ulong pid, string fileName) { - var romfsStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); + FileStream romfsStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); _romFsByPid.AddOrUpdate(pid, romfsStream, (pid, oldStream) => { @@ -140,8 +140,8 @@ namespace Ryujinx.HLE.FileSystem return $"{rawPath}:/"; } - var basePath = rawPath.AsSpan(0, firstSeparatorOffset); - var fileName = rawPath.AsSpan(firstSeparatorOffset + 1); + ReadOnlySpan basePath = rawPath.AsSpan(0, firstSeparatorOffset); + ReadOnlySpan fileName = rawPath.AsSpan(firstSeparatorOffset + 1); return $"{basePath}:/{fileName}"; } @@ -194,7 +194,7 @@ namespace Ryujinx.HLE.FileSystem } fsServerClient = horizon.CreatePrivilegedHorizonClient(); - var fsServer = new FileSystemServer(fsServerClient); + FileSystemServer fsServer = new FileSystemServer(fsServerClient); RandomDataGenerator randomGenerator = Random.Shared.NextBytes; @@ -208,7 +208,7 @@ namespace Ryujinx.HLE.FileSystem SdCard.SetSdCardInserted(true); - var fsServerConfig = new FileSystemServerConfig + FileSystemServerConfig fsServerConfig = new FileSystemServerConfig { ExternalKeySet = KeySet.ExternalKeySet, FsCreators = fsServerObjects.FsCreators, @@ -270,7 +270,7 @@ namespace Ryujinx.HLE.FileSystem { foreach (DirectoryEntryEx ticketEntry in fs.EnumerateEntries("/", "*.tik")) { - using var ticketFile = new UniqueRef(); + using UniqueRef ticketFile = new UniqueRef(); Result result = fs.OpenFile(ref ticketFile.Ref, ticketEntry.FullPath.ToU8Span(), OpenMode.Read); @@ -286,7 +286,7 @@ namespace Ryujinx.HLE.FileSystem continue; Ticket ticket = new(new MemoryStream(ticketData)); - var titleKey = ticket.GetTitleKey(KeySet); + byte[] titleKey = ticket.GetTitleKey(KeySet); if (titleKey != null) { @@ -334,7 +334,7 @@ namespace Ryujinx.HLE.FileSystem { Span info = stackalloc SaveDataInfo[8]; - using var iterator = new UniqueRef(); + using UniqueRef iterator = new UniqueRef(); Result rc = hos.Fs.OpenSaveDataIterator(ref iterator.Ref, spaceId); if (rc.IsFailure()) @@ -398,7 +398,7 @@ namespace Ryujinx.HLE.FileSystem } const string MountName = "SaveDir"; - var mountNameU8 = MountName.ToU8Span(); + U8Span mountNameU8 = MountName.ToU8Span(); BisPartitionId partitionId = info.SpaceId switch { @@ -415,7 +415,7 @@ namespace Ryujinx.HLE.FileSystem try { - var path = $"{MountName}:/save/{info.SaveDataId:x16}".ToU8Span(); + U8Span path = $"{MountName}:/save/{info.SaveDataId:x16}".ToU8Span(); rc = hos.Fs.GetEntryType(out _, path); @@ -437,7 +437,7 @@ namespace Ryujinx.HLE.FileSystem { list = null; - var mountName = "system".ToU8Span(); + U8Span mountName = "system".ToU8Span(); DirectoryHandle handle = default; List localList = new(); @@ -498,7 +498,7 @@ namespace Ryujinx.HLE.FileSystem // Only save data IDs added to SystemExtraDataFixInfo will be fixed. private static Result FixUnindexedSystemSaves(HorizonClient hos, List existingSaveIds) { - foreach (var fixInfo in _systemExtraDataFixInfo) + foreach (ExtraDataFixInfo fixInfo in _systemExtraDataFixInfo) { if (!existingSaveIds.Contains(fixInfo.StaticSaveDataId)) { @@ -665,7 +665,7 @@ namespace Ryujinx.HLE.FileSystem { if (disposing) { - foreach (var stream in _romFsByPid.Values) + foreach (Stream stream in _romFsByPid.Values) { stream.Close(); } diff --git a/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs index 0e043cc45..a7917a157 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs @@ -122,7 +122,7 @@ namespace Ryujinx.HLE.HOS.Applets.Error if (romfs.FileExists(filePath)) { - using var binaryFile = new UniqueRef(); + using UniqueRef binaryFile = new UniqueRef(); romfs.OpenFile(ref binaryFile.Ref, filePath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); StreamReader reader = new(binaryFile.Get.AsStream(), Encoding.Unicode); diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs index 8fda00a7d..ea906659f 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs @@ -81,8 +81,8 @@ namespace Ryujinx.HLE.HOS.Applets _interactiveSession.DataAvailable += OnInteractiveData; - var launchParams = _normalSession.Pop(); - var keyboardConfig = _normalSession.Pop(); + byte[] launchParams = _normalSession.Pop(); + byte[] keyboardConfig = _normalSession.Pop(); _isBackground = keyboardConfig.Length == Unsafe.SizeOf(); @@ -205,7 +205,7 @@ namespace Ryujinx.HLE.HOS.Applets else { // Call the configured GUI handler to get user's input. - var args = new SoftwareKeyboardUIArgs + SoftwareKeyboardUIArgs args = new SoftwareKeyboardUIArgs { KeyboardMode = _keyboardForegroundConfig.Mode, HeaderText = StripUnicodeControlCodes(_keyboardForegroundConfig.HeaderText), @@ -265,7 +265,7 @@ namespace Ryujinx.HLE.HOS.Applets private void OnInteractiveData(object sender, EventArgs e) { // Obtain the validation status response. - var data = _interactiveSession.Pop(); + byte[] data = _interactiveSession.Pop(); if (_isBackground) { @@ -320,7 +320,7 @@ namespace Ryujinx.HLE.HOS.Applets using MemoryStream stream = new(data); using BinaryReader reader = new(stream); - var request = (InlineKeyboardRequest)reader.ReadUInt32(); + InlineKeyboardRequest request = (InlineKeyboardRequest)reader.ReadUInt32(); long remaining; @@ -400,14 +400,14 @@ namespace Ryujinx.HLE.HOS.Applets remaining = stream.Length - stream.Position; if (remaining == Marshal.SizeOf()) { - var keyboardCalcData = reader.ReadBytes((int)remaining); - var keyboardCalc = ReadStruct(keyboardCalcData); + byte[] keyboardCalcData = reader.ReadBytes((int)remaining); + SoftwareKeyboardCalc keyboardCalc = ReadStruct(keyboardCalcData); newCalc = keyboardCalc.ToExtended(); } else if (remaining == Marshal.SizeOf() || remaining == SoftwareKeyboardCalcEx.AlternativeSize) { - var keyboardCalcData = reader.ReadBytes((int)remaining); + byte[] keyboardCalcData = reader.ReadBytes((int)remaining); newCalc = ReadStruct(keyboardCalcData); } diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRenderer.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRenderer.cs index 239535ad5..f65d6a018 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRenderer.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRenderer.cs @@ -117,8 +117,8 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard _state.OverwriteMode = overwriteMode.GetValueOrDefault(_state.OverwriteMode); _state.TypingEnabled = typingEnabled.GetValueOrDefault(_state.TypingEnabled); - var begin = _state.CursorBegin; - var end = _state.CursorEnd; + int begin = _state.CursorBegin; + int end = _state.CursorEnd; _state.CursorBegin = Math.Min(begin, end); _state.CursorEnd = Math.Max(begin, end); diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs index e17b36911..9e861ad10 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs @@ -75,10 +75,10 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard _padCancelIcon = LoadResource(typeof(SoftwareKeyboardRendererBase).Assembly, padCancelIconPath, 0, 0); _keyModeIcon = LoadResource(typeof(SoftwareKeyboardRendererBase).Assembly, keyModeIconPath, 0, 0); - var panelColor = ToColor(uiTheme.DefaultBackgroundColor, 255); - var panelTransparentColor = ToColor(uiTheme.DefaultBackgroundColor, 150); - var borderColor = ToColor(uiTheme.DefaultBorderColor); - var selectionBackgroundColor = ToColor(uiTheme.SelectionBackgroundColor); + SKColor panelColor = ToColor(uiTheme.DefaultBackgroundColor, 255); + SKColor panelTransparentColor = ToColor(uiTheme.DefaultBackgroundColor, 150); + SKColor borderColor = ToColor(uiTheme.DefaultBorderColor); + SKColor selectionBackgroundColor = ToColor(uiTheme.SelectionBackgroundColor); _textNormalColor = ToColor(uiTheme.DefaultForegroundColor); _textSelectedColor = ToColor(uiTheme.SelectionForegroundColor); @@ -134,7 +134,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard { try { - using var typeface = SKTypeface.FromFamilyName(fontFamily, SKFontStyle.Normal); + using SKTypeface typeface = SKTypeface.FromFamilyName(fontFamily, SKFontStyle.Normal); _messageFont = new SKFont(typeface, 26); _inputTextFont = new SKFont(typeface, _inputTextFontSize); _labelsTextFont = new SKFont(typeface, 24); @@ -151,10 +151,10 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard private static SKColor ToColor(ThemeColor color, byte? overrideAlpha = null, bool flipRgb = false) { - var a = (byte)(color.A * 255); - var r = (byte)(color.R * 255); - var g = (byte)(color.G * 255); - var b = (byte)(color.B * 255); + byte a = (byte)(color.A * 255); + byte r = (byte)(color.R * 255); + byte g = (byte)(color.G * 255); + byte b = (byte)(color.B * 255); if (flipRgb) { @@ -177,11 +177,11 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard { Debug.Assert(resourceStream != null); - var bitmap = SKBitmap.Decode(resourceStream); + SKBitmap bitmap = SKBitmap.Decode(resourceStream); if (newHeight != 0 && newWidth != 0) { - var resized = bitmap.Resize(new SKImageInfo(newWidth, newHeight), SKFilterQuality.High); + SKBitmap resized = bitmap.Resize(new SKImageInfo(newWidth, newHeight), SKFilterQuality.High); if (resized != null) { bitmap.Dispose(); @@ -198,7 +198,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard { return; } - var canvas = _surface.Canvas; + SKCanvas canvas = _surface.Canvas; canvas.Clear(SKColors.Transparent); canvas.DrawRect(_panelRectangle, _panelBrush); @@ -219,18 +219,18 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard return; } - using var paint = new SKPaint(_messageFont) + using SKPaint paint = new SKPaint(_messageFont) { Color = _textNormalColor, IsAntialias = true }; - var canvas = _surface.Canvas; - var messageRectangle = MeasureString(MessageText, paint); + SKCanvas canvas = _surface.Canvas; + SKRect messageRectangle = MeasureString(MessageText, paint); float messagePositionX = (_panelRectangle.Width - messageRectangle.Width) / 2 - messageRectangle.Left; float messagePositionY = _messagePositionY - messageRectangle.Top; - var messagePosition = new SKPoint(messagePositionX, messagePositionY); - var messageBoundRectangle = SKRect.Create(messagePositionX, messagePositionY, messageRectangle.Width, messageRectangle.Height); + SKPoint messagePosition = new SKPoint(messagePositionX, messagePositionY); + SKRect messageBoundRectangle = SKRect.Create(messagePositionX, messagePositionY, messageRectangle.Width, messageRectangle.Height); canvas.DrawRect(messageBoundRectangle, _panelBrush); @@ -336,12 +336,12 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard private void DrawTextBox(SKCanvas canvas, SoftwareKeyboardUIState state) { - using var textPaint = new SKPaint(_labelsTextFont) + using SKPaint textPaint = new SKPaint(_labelsTextFont) { IsAntialias = true, Color = _textNormalColor }; - var inputTextRectangle = MeasureString(state.InputText, textPaint); + SKRect inputTextRectangle = MeasureString(state.InputText, textPaint); float boxWidth = (int)(Math.Max(300, inputTextRectangle.Width + inputTextRectangle.Left + 8)); float boxHeight = 32; @@ -360,7 +360,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard float inputTextX = (_panelRectangle.Width - inputTextRectangle.Width) / 2 - inputTextRectangle.Left; float inputTextY = boxY + 5; - var inputTextPosition = new SKPoint(inputTextX, inputTextY); + SKPoint inputTextPosition = new SKPoint(inputTextX, inputTextY); canvas.DrawText(state.InputText, inputTextPosition.X, inputTextPosition.Y + (_labelsTextFont.Metrics.XHeight + _labelsTextFont.Metrics.Descent), textPaint); // Draw the cursor on top of the text and redraw the text with a different color if necessary. @@ -387,8 +387,8 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard ReadOnlySpan textUntilBegin = state.InputText.AsSpan(0, state.CursorBegin); ReadOnlySpan textUntilEnd = state.InputText.AsSpan(0, state.CursorEnd); - var selectionBeginRectangle = MeasureString(textUntilBegin, textPaint); - var selectionEndRectangle = MeasureString(textUntilEnd, textPaint); + SKRect selectionBeginRectangle = MeasureString(textUntilBegin, textPaint); + SKRect selectionEndRectangle = MeasureString(textUntilEnd, textPaint); cursorVisible = true; cursorPositionXLeft = inputTextX + selectionBeginRectangle.Width + selectionBeginRectangle.Left; @@ -406,7 +406,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard int cursorBegin = Math.Min(state.InputText.Length, state.CursorBegin); ReadOnlySpan textUntilCursor = state.InputText.AsSpan(0, cursorBegin); - var cursorTextRectangle = MeasureString(textUntilCursor, textPaint); + SKRect cursorTextRectangle = MeasureString(textUntilCursor, textPaint); cursorVisible = true; cursorPositionXLeft = inputTextX + cursorTextRectangle.Width + cursorTextRectangle.Left; @@ -452,16 +452,16 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard } else { - var cursorRectangle = SKRect.Create(cursorPositionXLeft, cursorPositionYTop, cursorWidth, cursorHeight); + SKRect cursorRectangle = SKRect.Create(cursorPositionXLeft, cursorPositionYTop, cursorWidth, cursorHeight); canvas.DrawRect(cursorRectangle, cursorPen); canvas.DrawRect(cursorRectangle, cursorBrush); - using var textOverCursor = SKSurface.Create(new SKImageInfo((int)cursorRectangle.Width, (int)cursorRectangle.Height, SKColorType.Rgba8888)); - var textOverCanvas = textOverCursor.Canvas; - var textRelativePosition = new SKPoint(inputTextPosition.X - cursorRectangle.Left, inputTextPosition.Y - cursorRectangle.Top); + using SKSurface textOverCursor = SKSurface.Create(new SKImageInfo((int)cursorRectangle.Width, (int)cursorRectangle.Height, SKColorType.Rgba8888)); + SKCanvas textOverCanvas = textOverCursor.Canvas; + SKPoint textRelativePosition = new SKPoint(inputTextPosition.X - cursorRectangle.Left, inputTextPosition.Y - cursorRectangle.Top); - using var cursorPaint = new SKPaint(_inputTextFont) + using SKPaint cursorPaint = new SKPaint(_inputTextFont) { Color = cursorTextColor, IsAntialias = true @@ -469,7 +469,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard textOverCanvas.DrawText(state.InputText, textRelativePosition.X, textRelativePosition.Y + _inputTextFont.Metrics.XHeight + _inputTextFont.Metrics.Descent, cursorPaint); - var cursorPosition = new SKPoint((int)cursorRectangle.Left, (int)cursorRectangle.Top); + SKPoint cursorPosition = new SKPoint((int)cursorRectangle.Left, (int)cursorRectangle.Top); textOverCursor.Flush(); canvas.DrawSurface(textOverCursor, cursorPosition); } @@ -492,13 +492,13 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard float iconWidth = icon.Width; float iconHeight = icon.Height; - using var paint = new SKPaint(_labelsTextFont) + using SKPaint paint = new SKPaint(_labelsTextFont) { Color = _textNormalColor, IsAntialias = true }; - var labelRectangle = MeasureString(label, paint); + SKRect labelRectangle = MeasureString(label, paint); float labelPositionX = iconWidth + 8 - labelRectangle.Left; float labelPositionY = 3; @@ -514,13 +514,13 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard iconX += originX; iconY += originY; - var iconPosition = new SKPoint((int)iconX, (int)iconY); - var labelPosition = new SKPoint(labelPositionX + originX, labelPositionY + originY); + SKPoint iconPosition = new SKPoint((int)iconX, (int)iconY); + SKPoint labelPosition = new SKPoint(labelPositionX + originX, labelPositionY + originY); - var selectedRectangle = SKRect.Create(originX - 2 * _padPressedPenWidth, originY - 2 * _padPressedPenWidth, + SKRect selectedRectangle = SKRect.Create(originX - 2 * _padPressedPenWidth, originY - 2 * _padPressedPenWidth, fullWidth + 4 * _padPressedPenWidth, fullHeight + 4 * _padPressedPenWidth); - var boundRectangle = SKRect.Create(originX, originY, fullWidth, fullHeight); + SKRect boundRectangle = SKRect.Create(originX, originY, fullWidth, fullHeight); boundRectangle.Inflate(4 * _padPressedPenWidth, 4 * _padPressedPenWidth); canvas.DrawRect(boundRectangle, _panelBrush); @@ -545,12 +545,12 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard private void DrawControllerToggle(SKCanvas canvas, SKPoint point) { - using var paint = new SKPaint(_labelsTextFont) + using SKPaint paint = new SKPaint(_labelsTextFont) { IsAntialias = true, Color = _textNormalColor }; - var labelRectangle = MeasureString(ControllerToggleText, paint); + SKRect labelRectangle = MeasureString(ControllerToggleText, paint); // Use relative positions so we can center the entire drawing later. @@ -574,8 +574,8 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard keyX += originX; keyY += originY; - var labelPosition = new SKPoint(labelPositionX + originX, labelPositionY + originY); - var overlayPosition = new SKPoint((int)keyX, (int)keyY); + SKPoint labelPosition = new SKPoint(labelPositionX + originX, labelPositionY + originY); + SKPoint overlayPosition = new SKPoint((int)keyX, (int)keyY); canvas.DrawBitmap(_keyModeIcon, overlayPosition); canvas.DrawText(ControllerToggleText, labelPosition.X, labelPosition.Y + _labelsTextFont.Metrics.XHeight, paint); @@ -593,7 +593,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard // Convert the pixel format used in the image to the one used in the Switch surface. _surface.Flush(); - var buffer = new byte[_imageInfo.BytesSize]; + byte[] buffer = new byte[_imageInfo.BytesSize]; fixed (byte* bufferPtr = buffer) { if (!_surface.ReadPixels(_imageInfo, (nint)bufferPtr, _imageInfo.RowBytes, 0, 0)) diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TimedAction.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TimedAction.cs index a8b137df2..e98dadb77 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TimedAction.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TimedAction.cs @@ -79,11 +79,11 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard public void Reset(Action action, int totalMilliseconds, int sleepMilliseconds) { // Create a dedicated cancel token for each task. - var cancelled = new TRef(false); + TRef cancelled = new TRef(false); Reset(new Thread(() => { - var substepData = new SleepSubstepData(sleepMilliseconds); + SleepSubstepData substepData = new SleepSubstepData(sleepMilliseconds); int totalCount = totalMilliseconds / sleepMilliseconds; int totalRemainder = totalMilliseconds - totalCount * sleepMilliseconds; @@ -126,11 +126,11 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard public void Reset(Action action, int sleepMilliseconds) { // Create a dedicated cancel token for each task. - var cancelled = new TRef(false); + TRef cancelled = new TRef(false); Reset(new Thread(() => { - var substepData = new SleepSubstepData(sleepMilliseconds); + SleepSubstepData substepData = new SleepSubstepData(sleepMilliseconds); while (!Volatile.Read(ref cancelled.Value)) { @@ -147,7 +147,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard public void Reset(Action action) { // Create a dedicated cancel token for each task. - var cancelled = new TRef(false); + TRef cancelled = new TRef(false); Reset(new Thread(() => { diff --git a/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs b/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs index 14775fb1d..621a081fd 100644 --- a/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs +++ b/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs @@ -51,8 +51,8 @@ namespace Ryujinx.HLE.HOS if (OperatingSystem.IsMacOS() && isArm64Host && for64Bit && context.Device.Configuration.UseHypervisor) { - var cpuEngine = new HvEngine(_tickSource); - var memoryManager = new HvMemoryManager(context.Memory, addressSpaceSize, invalidAccessHandler); + HvEngine cpuEngine = new HvEngine(_tickSource); + HvMemoryManager memoryManager = new HvMemoryManager(context.Memory, addressSpaceSize, invalidAccessHandler); processContext = new ArmProcessContext(pid, cpuEngine, _gpu, memoryManager, addressSpaceSize, for64Bit); } else @@ -86,7 +86,7 @@ namespace Ryujinx.HLE.HOS switch (mode) { case MemoryManagerMode.SoftwarePageTable: - var memoryManager = new MemoryManager(context.Memory, addressSpaceSize, invalidAccessHandler); + MemoryManager memoryManager = new MemoryManager(context.Memory, addressSpaceSize, invalidAccessHandler); processContext = new ArmProcessContext(pid, cpuEngine, _gpu, memoryManager, addressSpaceSize, for64Bit); break; @@ -94,7 +94,7 @@ namespace Ryujinx.HLE.HOS case MemoryManagerMode.HostMappedUnsafe: if (addressSpace == null) { - var memoryManagerHostTracked = new MemoryManagerHostTracked(context.Memory, addressSpaceSize, mode == MemoryManagerMode.HostMappedUnsafe, invalidAccessHandler); + MemoryManagerHostTracked memoryManagerHostTracked = new MemoryManagerHostTracked(context.Memory, addressSpaceSize, mode == MemoryManagerMode.HostMappedUnsafe, invalidAccessHandler); processContext = new ArmProcessContext(pid, cpuEngine, _gpu, memoryManagerHostTracked, addressSpaceSize, for64Bit); } else @@ -104,7 +104,7 @@ namespace Ryujinx.HLE.HOS Logger.Warning?.Print(LogClass.Emulation, $"Allocated address space (0x{addressSpace.AddressSpaceSize:X}) is smaller than guest application requirements (0x{addressSpaceSize:X})"); } - var memoryManagerHostMapped = new MemoryManagerHostMapped(addressSpace, mode == MemoryManagerMode.HostMappedUnsafe, invalidAccessHandler); + MemoryManagerHostMapped memoryManagerHostMapped = new MemoryManagerHostMapped(addressSpace, mode == MemoryManagerMode.HostMappedUnsafe, invalidAccessHandler); processContext = new ArmProcessContext(pid, cpuEngine, _gpu, memoryManagerHostMapped, addressSpace.AddressSpaceSize, for64Bit); } break; diff --git a/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs b/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs index 2e7b8ee76..59ce69b73 100644 --- a/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs +++ b/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs @@ -32,7 +32,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler private bool ConsumeIf(string toConsume) { - var mangledPart = Mangled.AsSpan(_position); + ReadOnlySpan mangledPart = Mangled.AsSpan(_position); if (mangledPart.StartsWith(toConsume.AsSpan())) { diff --git a/src/Ryujinx.HLE/HOS/Horizon.cs b/src/Ryujinx.HLE/HOS/Horizon.cs index 627b649df..e0dd0f1c9 100644 --- a/src/Ryujinx.HLE/HOS/Horizon.cs +++ b/src/Ryujinx.HLE/HOS/Horizon.cs @@ -154,11 +154,11 @@ namespace Ryujinx.HLE.HOS timePageList.AddRange(timePa, TimeSize / KPageTableBase.PageSize); appletCaptureBufferPageList.AddRange(appletCaptureBufferPa, AppletCaptureBufferSize / KPageTableBase.PageSize); - var hidStorage = new SharedMemoryStorage(KernelContext, hidPageList); - var fontStorage = new SharedMemoryStorage(KernelContext, fontPageList); - var iirsStorage = new SharedMemoryStorage(KernelContext, iirsPageList); - var timeStorage = new SharedMemoryStorage(KernelContext, timePageList); - var appletCaptureBufferStorage = new SharedMemoryStorage(KernelContext, appletCaptureBufferPageList); + SharedMemoryStorage hidStorage = new SharedMemoryStorage(KernelContext, hidPageList); + SharedMemoryStorage fontStorage = new SharedMemoryStorage(KernelContext, fontPageList); + SharedMemoryStorage iirsStorage = new SharedMemoryStorage(KernelContext, iirsPageList); + SharedMemoryStorage timeStorage = new SharedMemoryStorage(KernelContext, timePageList); + SharedMemoryStorage appletCaptureBufferStorage = new SharedMemoryStorage(KernelContext, appletCaptureBufferPageList); HidStorage = hidStorage; @@ -265,7 +265,7 @@ namespace Ryujinx.HLE.HOS HorizonFsClient fsClient = new(this); ServiceTable = new ServiceTable(); - var services = ServiceTable.GetServices(new HorizonOptions + IEnumerable services = ServiceTable.GetServices(new HorizonOptions (Device.Configuration.IgnoreMissingServices, LibHacHorizonManager.BcatClient, fsClient, @@ -273,7 +273,7 @@ namespace Ryujinx.HLE.HOS Device.AudioDeviceDriver, TickSource)); - foreach (var service in services) + foreach (ServiceEntry service in services) { const ProcessCreationFlags Flags = ProcessCreationFlags.EnableAslr | @@ -304,7 +304,7 @@ namespace Ryujinx.HLE.HOS public bool LoadKip(string kipPath) { - using var kipFile = new SharedRef(new LocalStorage(kipPath, FileAccess.Read)); + using SharedRef kipFile = new SharedRef(new LocalStorage(kipPath, FileAccess.Read)); return ProcessLoaderHelper.LoadKip(KernelContext, new KipExecutable(in kipFile)); } diff --git a/src/Ryujinx.HLE/HOS/HorizonFsClient.cs b/src/Ryujinx.HLE/HOS/HorizonFsClient.cs index 3dbafa88b..67b3d9b14 100644 --- a/src/Ryujinx.HLE/HOS/HorizonFsClient.cs +++ b/src/Ryujinx.HLE/HOS/HorizonFsClient.cs @@ -55,8 +55,8 @@ namespace Ryujinx.HLE.HOS Nca nca = new(_system.KeySet, ncaStorage); - using var ncaFileSystem = nca.OpenFileSystem(NcaSectionType.Data, _system.FsIntegrityCheckLevel); - using var ncaFsRef = new UniqueRef(ncaFileSystem); + using IFileSystem ncaFileSystem = nca.OpenFileSystem(NcaSectionType.Data, _system.FsIntegrityCheckLevel); + using UniqueRef ncaFsRef = new UniqueRef(ncaFileSystem); Result result = _fsClient.Register(mountName.ToU8Span(), ref ncaFsRef.Ref).ToHorizonResult(); if (result.IsFailure) @@ -86,7 +86,7 @@ namespace Ryujinx.HLE.HOS public Result OpenFile(out FileHandle handle, string path, OpenMode openMode) { - var result = _fsClient.OpenFile(out var libhacHandle, path.ToU8Span(), (LibHac.Fs.OpenMode)openMode); + LibHac.Result result = _fsClient.OpenFile(out LibHac.Fs.FileHandle libhacHandle, path.ToU8Span(), (LibHac.Fs.OpenMode)openMode); handle = new(libhacHandle); return result.ToHorizonResult(); diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryManager.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryManager.cs index e56304d9d..a27bb0074 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryManager.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryManager.cs @@ -16,7 +16,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { for (int i = 0; i < MemoryRegions.Length; i++) { - var region = MemoryRegions[i]; + KMemoryRegionManager region = MemoryRegions[i]; if (address >= region.Address && address < region.EndAddr) { @@ -41,7 +41,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { while (pagesCount != 0) { - var region = GetMemoryRegion(address); + KMemoryRegionManager region = GetMemoryRegion(address); ulong countToProcess = Math.Min(pagesCount, region.GetPageOffsetFromEnd(address)); diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs index 2eff616c4..270c4ff32 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KMemoryRegionManager.cs @@ -40,7 +40,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory if (result == Result.Success) { - foreach (var node in pageList) + foreach (KPageNode node in pageList) { IncrementPagesReferenceCount(node.Address, node.PagesCount); } diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageBitmap.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageBitmap.cs index 947983d61..a044ba8b3 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageBitmap.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageBitmap.cs @@ -162,7 +162,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory public bool ClearRange(ulong offset, int count) { int depth = HighestDepthIndex; - var bits = _bitStorages[depth]; + ArraySegment bits = _bitStorages[depth]; int bitInd = (int)(offset / UInt64BitSize); diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs index ee5d6e2b6..3c3c83bb9 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs @@ -105,7 +105,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blocksCount = blockShifts.Length; _blocks = new Block[_memoryBlockPageShifts.Length]; - var currBitmapStorage = new ArraySegment(new ulong[CalculateManagementOverheadSize(size, blockShifts)]); + ArraySegment currBitmapStorage = new ArraySegment(new ulong[CalculateManagementOverheadSize(size, blockShifts)]); for (int i = 0; i < blockShifts.Length; i++) { diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs index 60514824a..38e2b6f95 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs @@ -70,7 +70,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory public void IncrementPagesReferenceCount(KMemoryManager manager) { - foreach (var node in this) + foreach (KPageNode node in this) { manager.IncrementPagesReferenceCount(node.Address, node.PagesCount); } @@ -78,7 +78,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory public void DecrementPagesReferenceCount(KMemoryManager manager) { - foreach (var node in this) + foreach (KPageNode node in this) { manager.DecrementPagesReferenceCount(node.Address, node.PagesCount); } diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs index 4ffa447dd..8258c16c8 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs @@ -28,8 +28,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory /// protected override void GetPhysicalRegions(ulong va, ulong size, KPageList pageList) { - var ranges = _cpuMemory.GetPhysicalRegions(va, size); - foreach (var range in ranges) + IEnumerable ranges = _cpuMemory.GetPhysicalRegions(va, size); + foreach (MemoryRange range in ranges) { pageList.AddRange(range.Address + DramMemoryMap.DramBase, range.Size / PageSize); } @@ -143,11 +143,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory bool shouldFillPages, byte fillValue) { - using var scopedPageList = new KScopedPageList(Context.MemoryManager, pageList); + using KScopedPageList scopedPageList = new KScopedPageList(Context.MemoryManager, pageList); ulong currentVa = address; - foreach (var pageNode in pageList) + foreach (KPageNode pageNode in pageList) { ulong addr = pageNode.Address - DramMemoryMap.DramBase; ulong size = pageNode.PagesCount * PageSize; @@ -188,16 +188,16 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - using var scopedPageList = new KScopedPageList(Context.MemoryManager, pageList); + using KScopedPageList scopedPageList = new KScopedPageList(Context.MemoryManager, pageList); - foreach (var pageNode in pageList) + foreach (KPageNode pageNode in pageList) { Context.CommitMemory(pageNode.Address - DramMemoryMap.DramBase, pageNode.PagesCount * PageSize); } ulong offset = 0; - foreach (var region in regions) + foreach (HostMemoryRange region in regions) { _cpuMemory.MapForeign(va + offset, region.Address, region.Size); @@ -214,9 +214,9 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { KPageList pagesToClose = new(); - var regions = _cpuMemory.GetPhysicalRegions(address, pagesCount * PageSize); + IEnumerable regions = _cpuMemory.GetPhysicalRegions(address, pagesCount * PageSize); - foreach (var region in regions) + foreach (MemoryRange region in regions) { ulong pa = region.Address + DramMemoryMap.DramBase; if (DramMemoryMap.IsHeapPhysicalAddress(pa)) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs index bf2bbb97b..1b7cd7cad 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs @@ -617,7 +617,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return result; } - using var _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); + using OnScopeExit _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); return MapPages(address, pageList, permission, MemoryMapFlags.Private); } @@ -769,7 +769,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory Result result = region.AllocatePages(out KPageList pageList, pagesCount); - using var _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); + using OnScopeExit _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); void CleanUpForError() { @@ -1341,7 +1341,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory Result result = region.AllocatePages(out KPageList pageList, remainingPages); - using var _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); + using OnScopeExit _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); void CleanUpForError() { @@ -1867,7 +1867,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong dstLastPagePa = 0; ulong currentVa = va; - using var _ = new OnScopeExit(() => + using OnScopeExit _ = new OnScopeExit(() => { if (dstFirstPagePa != 0) { @@ -1928,7 +1928,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory Context.Memory.Fill(GetDramAddressFromPa(dstFirstPagePa), unusedSizeBefore, (byte)_ipcFillValue); ulong copySize = addressRounded <= endAddr ? addressRounded - address : size; - var data = srcPageTable.GetReadOnlySequence(addressTruncated + unusedSizeBefore, (int)copySize); + ReadOnlySequence data = srcPageTable.GetReadOnlySequence(addressTruncated + unusedSizeBefore, (int)copySize); ((IWritableBlock)Context.Memory).Write(GetDramAddressFromPa(dstFirstPagePa + unusedSizeBefore), data); @@ -1994,7 +1994,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory if (send) { ulong copySize = endAddr - endAddrTruncated; - var data = srcPageTable.GetReadOnlySequence(endAddrTruncated, (int)copySize); + ReadOnlySequence data = srcPageTable.GetReadOnlySequence(endAddrTruncated, (int)copySize); ((IWritableBlock)Context.Memory).Write(GetDramAddressFromPa(dstLastPagePa), data); diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs index ff3de4a17..a9f87f2ca 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs @@ -1,3 +1,4 @@ +using Ryujinx.Cpu; using Ryujinx.HLE.HOS.Diagnostics.Demangler; using Ryujinx.HLE.HOS.Kernel.Memory; using Ryujinx.HLE.HOS.Kernel.Threading; @@ -47,7 +48,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process { EnsureLoaded(); - var context = thread.Context; + IExecutionContext context = thread.Context; StringBuilder trace = new(); @@ -109,13 +110,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Process { EnsureLoaded(); - var context = thread.Context; + IExecutionContext context = thread.Context; StringBuilder sb = new(); string GetReg(int x) { - var v = x == 32 ? context.Pc : context.GetX(x); + ulong v = x == 32 ? context.Pc : context.GetX(x); if (!AnalyzePointer(out PointerInfo info, v, thread)) { return $"0x{v:x16}"; @@ -251,7 +252,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process info = default; ulong sp = thread.Context.GetX(31); - var memoryInfo = _owner.MemoryManager.QueryMemory(address); + KMemoryInfo memoryInfo = _owner.MemoryManager.QueryMemory(address); MemoryState memoryState = memoryInfo.State; if (!memoryState.HasFlag(MemoryState.Stack)) // Is this pointer within the stack? diff --git a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs index 1b6433af6..c439a8fff 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs @@ -105,7 +105,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall KProcess process = new(_context); - using var _ = new OnScopeExit(process.DecrementReferenceCount); + using OnScopeExit _ = new OnScopeExit(process.DecrementReferenceCount); KResourceLimit resourceLimit; @@ -1425,7 +1425,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall KCodeMemory codeMemory = new(_context); - using var _ = new OnScopeExit(codeMemory.DecrementReferenceCount); + using OnScopeExit _ = new OnScopeExit(codeMemory.DecrementReferenceCount); KProcess currentProcess = KernelStatic.GetCurrentProcess(); @@ -2854,7 +2854,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall KThread currentThread = KernelStatic.GetCurrentThread(); - var syncObjs = new Span(currentThread.WaitSyncObjects)[..handles.Length]; + Span syncObjs = new Span(currentThread.WaitSyncObjects)[..handles.Length]; if (handles.Length != 0) { diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs index 0c63c7e0e..ca4aedb7a 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs @@ -562,8 +562,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading Action removeCallback, Func predicate) { - var candidates = threads.Where(predicate).OrderBy(x => x.DynamicPriority); - var toSignal = (count > 0 ? candidates.Take(count) : candidates).ToArray(); + IOrderedEnumerable candidates = threads.Where(predicate).OrderBy(x => x.DynamicPriority); + KThread[] toSignal = (count > 0 ? candidates.Take(count) : candidates).ToArray(); foreach (KThread thread in toSignal) { diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs index 1608db095..7951fab5b 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs @@ -127,7 +127,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading public KThread ScheduledThreadsElementAtOrDefault(int core, int index) { int currentIndex = 0; - foreach (var scheduledThread in ScheduledThreads(core)) + foreach (KThread scheduledThread in ScheduledThreads(core)) { if (currentIndex == index) { @@ -144,7 +144,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading public KThread ScheduledThreadsWithDynamicPriorityFirstOrDefault(int core, int dynamicPriority) { - foreach (var scheduledThread in ScheduledThreads(core)) + foreach (KThread scheduledThread in ScheduledThreads(core)) { if (scheduledThread.DynamicPriority == dynamicPriority) { diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs index 35ff74cb3..ce0810990 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs @@ -1232,7 +1232,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading { if (_schedulerWaitEvent == null) { - var schedulerWaitEvent = new ManualResetEvent(false); + ManualResetEvent schedulerWaitEvent = new ManualResetEvent(false); if (Interlocked.Exchange(ref _schedulerWaitEvent, schedulerWaitEvent) == null) { diff --git a/src/Ryujinx.HLE/HOS/LibHacHorizonManager.cs b/src/Ryujinx.HLE/HOS/LibHacHorizonManager.cs index e8ef15dce..46c27da40 100644 --- a/src/Ryujinx.HLE/HOS/LibHacHorizonManager.cs +++ b/src/Ryujinx.HLE/HOS/LibHacHorizonManager.cs @@ -54,7 +54,7 @@ namespace Ryujinx.HLE.HOS public void InitializeFsServer(VirtualFileSystem virtualFileSystem) { - virtualFileSystem.InitializeFsServer(Server, out var fsClient); + virtualFileSystem.InitializeFsServer(Server, out HorizonClient fsClient); FsClient = fsClient; } diff --git a/src/Ryujinx.HLE/HOS/ModLoader.cs b/src/Ryujinx.HLE/HOS/ModLoader.cs index 4bd695ae5..76edcc322 100644 --- a/src/Ryujinx.HLE/HOS/ModLoader.cs +++ b/src/Ryujinx.HLE/HOS/ModLoader.cs @@ -3,6 +3,7 @@ using LibHac.Fs; using LibHac.Fs.Fsa; using LibHac.FsSystem; using LibHac.Loader; +using LibHac.Tools.Fs; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.RomFs; using Ryujinx.Common.Configuration; @@ -143,7 +144,7 @@ namespace Ryujinx.HLE.HOS private static string EnsureBaseDirStructure(string modsBasePath) { - var modsDir = new DirectoryInfo(modsBasePath); + DirectoryInfo modsDir = new DirectoryInfo(modsBasePath); modsDir.CreateSubdirectory(AmsContentsDir); modsDir.CreateSubdirectory(AmsNsoPatchDir); @@ -161,23 +162,23 @@ namespace Ryujinx.HLE.HOS { System.Text.StringBuilder types = new(); - foreach (var modDir in dir.EnumerateDirectories()) + foreach (DirectoryInfo modDir in dir.EnumerateDirectories()) { types.Clear(); Mod mod = new(string.Empty, null, true); if (StrEquals(RomfsDir, modDir.Name)) { - var modData = modMetadata.Mods.FirstOrDefault(x => modDir.FullName.Contains(x.Path)); - var enabled = modData?.Enabled ?? true; + Mod modData = modMetadata.Mods.FirstOrDefault(x => modDir.FullName.Contains(x.Path)); + bool enabled = modData?.Enabled ?? true; mods.RomfsDirs.Add(mod = new Mod(dir.Name, modDir, enabled)); types.Append('R'); } else if (StrEquals(ExefsDir, modDir.Name)) { - var modData = modMetadata.Mods.FirstOrDefault(x => modDir.FullName.Contains(x.Path)); - var enabled = modData?.Enabled ?? true; + Mod modData = modMetadata.Mods.FirstOrDefault(x => modDir.FullName.Contains(x.Path)); + bool enabled = modData?.Enabled ?? true; mods.ExefsDirs.Add(mod = new Mod(dir.Name, modDir, enabled)); types.Append('E'); @@ -200,8 +201,8 @@ namespace Ryujinx.HLE.HOS public static string GetApplicationDir(string modsBasePath, string applicationId) { - var contentsDir = new DirectoryInfo(Path.Combine(modsBasePath, AmsContentsDir)); - var applicationModsPath = FindApplicationDir(contentsDir, applicationId); + DirectoryInfo contentsDir = new DirectoryInfo(Path.Combine(modsBasePath, AmsContentsDir)); + DirectoryInfo applicationModsPath = FindApplicationDir(contentsDir, applicationId); if (applicationModsPath == null) { @@ -243,7 +244,7 @@ namespace Ryujinx.HLE.HOS return; } - foreach (var modDir in patchDir.EnumerateDirectories()) + foreach (DirectoryInfo modDir in patchDir.EnumerateDirectories()) { patches.Add(new Mod(modDir.Name, modDir, true)); Logger.Info?.Print(LogClass.ModLoader, $"Found {type} patch '{modDir.Name}'"); @@ -272,11 +273,11 @@ namespace Ryujinx.HLE.HOS } } - var fsFile = new FileInfo(Path.Combine(applicationDir.FullName, RomfsContainer)); + FileInfo fsFile = new FileInfo(Path.Combine(applicationDir.FullName, RomfsContainer)); if (fsFile.Exists) { - var modData = modMetadata.Mods.FirstOrDefault(x => fsFile.FullName.Contains(x.Path)); - var enabled = modData == null || modData.Enabled; + Mod modData = modMetadata.Mods.FirstOrDefault(x => fsFile.FullName.Contains(x.Path)); + bool enabled = modData == null || modData.Enabled; mods.RomfsContainers.Add(new Mod($"<{applicationDir.Name} RomFs>", fsFile, enabled)); } @@ -284,8 +285,8 @@ namespace Ryujinx.HLE.HOS fsFile = new FileInfo(Path.Combine(applicationDir.FullName, ExefsContainer)); if (fsFile.Exists) { - var modData = modMetadata.Mods.FirstOrDefault(x => fsFile.FullName.Contains(x.Path)); - var enabled = modData == null || modData.Enabled; + Mod modData = modMetadata.Mods.FirstOrDefault(x => fsFile.FullName.Contains(x.Path)); + bool enabled = modData == null || modData.Enabled; mods.ExefsContainers.Add(new Mod($"<{applicationDir.Name} ExeFs>", fsFile, enabled)); } @@ -302,7 +303,7 @@ namespace Ryujinx.HLE.HOS Logger.Info?.Print(LogClass.ModLoader, $"Searching mods for {((applicationId & 0x1000) != 0 ? "DLC" : "Application")} {applicationId:X16} in \"{contentsDir.FullName}\""); - var applicationDir = FindApplicationDir(contentsDir, $"{applicationId:x16}"); + DirectoryInfo applicationDir = FindApplicationDir(contentsDir, $"{applicationId:x16}"); if (applicationDir != null) { @@ -429,9 +430,9 @@ namespace Ryujinx.HLE.HOS return false; } - foreach (var path in searchDirPaths) + foreach (string path in searchDirPaths) { - var searchDir = new DirectoryInfo(path); + DirectoryInfo searchDir = new DirectoryInfo(path); if (!searchDir.Exists) { Logger.Warning?.Print(LogClass.ModLoader, $"Mod Search Dir '{searchDir.FullName}' doesn't exist"); @@ -440,7 +441,7 @@ namespace Ryujinx.HLE.HOS if (!TryQuery(searchDir, patches, modCaches)) { - foreach (var subdir in searchDir.EnumerateDirectories()) + foreach (DirectoryInfo subdir in searchDir.EnumerateDirectories()) { TryQuery(subdir, patches, modCaches); } @@ -469,14 +470,14 @@ namespace Ryujinx.HLE.HOS return baseStorage; } - var fileSet = new HashSet(); - var builder = new RomFsBuilder(); + HashSet fileSet = new HashSet(); + RomFsBuilder builder = new RomFsBuilder(); int count = 0; Logger.Info?.Print(LogClass.ModLoader, $"Applying RomFS mods for Application {applicationId:X16}"); // Prioritize loose files first - foreach (var mod in mods.RomfsDirs) + foreach (Mod mod in mods.RomfsDirs) { if (!mod.Enabled) { @@ -491,7 +492,7 @@ namespace Ryujinx.HLE.HOS } // Then files inside images - foreach (var mod in mods.RomfsContainers) + foreach (Mod mod in mods.RomfsContainers) { if (!mod.Enabled) { @@ -516,12 +517,12 @@ namespace Ryujinx.HLE.HOS Logger.Info?.Print(LogClass.ModLoader, $"Replaced {fileSet.Count} file(s) over {count} mod(s). Processing base storage..."); // And finally, the base romfs - var baseRom = new RomFsFileSystem(baseStorage); - foreach (var entry in baseRom.EnumerateEntries() + RomFsFileSystem baseRom = new RomFsFileSystem(baseStorage); + foreach (DirectoryEntryEx entry in baseRom.EnumerateEntries() .Where(f => f.Type == DirectoryEntryType.File && !fileSet.Contains(f.FullPath)) .OrderBy(f => f.FullPath, StringComparer.Ordinal)) { - using var file = new UniqueRef(); + using UniqueRef file = new UniqueRef(); baseRom.OpenFile(ref file.Ref, entry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); builder.AddFile(entry.FullPath, file.Release()); @@ -536,12 +537,12 @@ namespace Ryujinx.HLE.HOS private static void AddFiles(IFileSystem fs, string modName, string rootPath, ISet fileSet, RomFsBuilder builder) { - foreach (var entry in fs.EnumerateEntries() + foreach (DirectoryEntryEx entry in fs.EnumerateEntries() .AsParallel() .Where(f => f.Type == DirectoryEntryType.File) .OrderBy(f => f.FullPath, StringComparer.Ordinal)) { - var file = new LazyFile(entry.FullPath, rootPath, fs); + LazyFile file = new LazyFile(entry.FullPath, rootPath, fs); if (fileSet.Add(entry.FullPath)) { @@ -568,7 +569,7 @@ namespace Ryujinx.HLE.HOS Logger.Info?.Print(LogClass.ModLoader, "Using replacement ExeFS partition"); - var pfs = new PartitionFileSystem(); + PartitionFileSystem pfs = new PartitionFileSystem(); pfs.Initialize(mods.ExefsContainers[0].Path.OpenRead().AsStorage()).ThrowIfFailure(); exefs = pfs; @@ -602,9 +603,9 @@ namespace Ryujinx.HLE.HOS throw new ArgumentOutOfRangeException(nameof(nsos), nsos.Length, "NSO Count is incorrect"); } - var exeMods = mods.ExefsDirs; + List> exeMods = mods.ExefsDirs; - foreach (var mod in exeMods) + foreach (Mod mod in exeMods) { if (!mod.Enabled) { @@ -613,7 +614,7 @@ namespace Ryujinx.HLE.HOS for (int i = 0; i < ProcessConst.ExeFsPrefixes.Length; ++i) { - var nsoName = ProcessConst.ExeFsPrefixes[i]; + string nsoName = ProcessConst.ExeFsPrefixes[i]; FileInfo nsoFile = new(Path.Combine(mod.Path.FullName, nsoName)); if (nsoFile.Exists) @@ -665,7 +666,7 @@ namespace Ryujinx.HLE.HOS internal void ApplyNroPatches(NroExecutable nro) { - var nroPatches = _patches.NroPatches; + List> nroPatches = _patches.NroPatches; if (nroPatches.Count == 0) { @@ -707,11 +708,11 @@ namespace Ryujinx.HLE.HOS return; } - var cheats = mods.Cheats; - var processExes = tamperInfo.BuildIds.Zip(tamperInfo.CodeAddresses, (k, v) => new { k, v }) + List cheats = mods.Cheats; + Dictionary processExes = tamperInfo.BuildIds.Zip(tamperInfo.CodeAddresses, (k, v) => new { k, v }) .ToDictionary(x => x.k[..Math.Min(Cheat.CheatIdSize, x.k.Length)], x => x.v); - foreach (var cheat in cheats) + foreach (Cheat cheat in cheats) { string cheatId = Path.GetFileNameWithoutExtension(cheat.Path.Name).ToUpper(); @@ -732,7 +733,7 @@ namespace Ryujinx.HLE.HOS internal static void EnableCheats(ulong applicationId, TamperMachine tamperMachine) { - var contentDirectory = FindApplicationDir(new DirectoryInfo(Path.Combine(GetModsBasePath(), AmsContentsDir)), $"{applicationId:x16}"); + DirectoryInfo contentDirectory = FindApplicationDir(new DirectoryInfo(Path.Combine(GetModsBasePath(), AmsContentsDir)), $"{applicationId:x16}"); string enabledCheatsPath = Path.Combine(contentDirectory.FullName, CheatDir, "enabled.txt"); if (File.Exists(enabledCheatsPath)) @@ -752,11 +753,11 @@ namespace Ryujinx.HLE.HOS patches[i] = new MemPatch(); } - var buildIds = new List(programs.Length); + List buildIds = new List(programs.Length); foreach (IExecutable p in programs) { - var buildId = p switch + string buildId = p switch { NsoExecutable nso => Convert.ToHexString(nso.BuildId.ItemsRo.ToArray()).TrimEnd('0'), NroExecutable nro => Convert.ToHexString(nro.Header.BuildId).TrimEnd('0'), @@ -768,15 +769,15 @@ namespace Ryujinx.HLE.HOS int GetIndex(string buildId) => buildIds.FindIndex(id => id == buildId); // O(n) but list is small // Collect patches - foreach (var mod in mods) + foreach (Mod mod in mods) { if (!mod.Enabled) { continue; } - var patchDir = mod.Path; - foreach (var patchFile in patchDir.EnumerateFiles()) + DirectoryInfo patchDir = mod.Path; + foreach (FileInfo patchFile in patchDir.EnumerateFiles()) { if (StrEquals(".ips", patchFile.Extension)) // IPS|IPS32 { @@ -791,18 +792,18 @@ namespace Ryujinx.HLE.HOS Logger.Info?.Print(LogClass.ModLoader, $"Matching IPS patch '{patchFile.Name}' in '{mod.Name}' bid={buildId}"); - using var fs = patchFile.OpenRead(); - using var reader = new BinaryReader(fs); + using FileStream fs = patchFile.OpenRead(); + using BinaryReader reader = new BinaryReader(fs); - var patcher = new IpsPatcher(reader); + IpsPatcher patcher = new IpsPatcher(reader); patcher.AddPatches(patches[index]); } else if (StrEquals(".pchtxt", patchFile.Extension)) // IPSwitch { - using var fs = patchFile.OpenRead(); - using var reader = new StreamReader(fs); + using FileStream fs = patchFile.OpenRead(); + using StreamReader reader = new StreamReader(fs); - var patcher = new IPSwitchPatcher(reader); + IPSwitchPatcher patcher = new IPSwitchPatcher(reader); int index = GetIndex(patcher.BuildId); if (index == -1) diff --git a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs index d2da9e248..279e696be 100644 --- a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs @@ -191,10 +191,10 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc private void DeleteSaveData(UserId userId) { - var saveDataFilter = SaveDataFilter.Make(programId: default, saveType: default, + SaveDataFilter saveDataFilter = SaveDataFilter.Make(programId: default, saveType: default, new LibHac.Fs.UserId((ulong)userId.High, (ulong)userId.Low), saveDataId: default, index: default); - using var saveDataIterator = new UniqueRef(); + using UniqueRef saveDataIterator = new UniqueRef(); _horizonClient.Fs.OpenSaveDataIterator(ref saveDataIterator.Ref, SaveDataSpaceId.User, in saveDataFilter).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs index 6fdfe1398..aa6fa57c4 100644 --- a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs @@ -29,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc { ProfilesJson profilesJson = JsonHelper.DeserializeFromFile(_profilesJsonPath, _serializerContext.ProfilesJson); - foreach (var profile in profilesJson.Profiles) + foreach (UserProfileJson profile in profilesJson.Profiles) { UserProfile addedProfile = new(new UserId(profile.UserId), profile.Name, profile.Image, profile.LastModifiedTimestamp); @@ -69,7 +69,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc LastOpened = LastOpened.ToString(), }; - foreach (var profile in profiles) + foreach (KeyValuePair profile in profiles) { profilesJson.Profiles.Add(new UserProfileJson() { diff --git a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs index 75bad0e3f..7f98b0044 100644 --- a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs @@ -51,7 +51,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService byte[] deviceAccountId = new byte[0x10]; RandomNumberGenerator.Fill(deviceId); - var descriptor = new SecurityTokenDescriptor + SecurityTokenDescriptor descriptor = new SecurityTokenDescriptor { Subject = new GenericIdentity(Convert.ToHexString(rawUserId).ToLower()), SigningCredentials = credentials, diff --git a/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ICommonStateGetter.cs b/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ICommonStateGetter.cs index 602fc2c4d..f58e5b891 100644 --- a/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ICommonStateGetter.cs +++ b/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ICommonStateGetter.cs @@ -214,7 +214,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys _vrModeEnabled = vrModeEnabled; - using var lblApi = new LblApi(); + using LblApi lblApi = new LblApi(); if (vrModeEnabled) { diff --git a/src/Ryujinx.HLE/HOS/Services/Caps/CaptureManager.cs b/src/Ryujinx.HLE/HOS/Services/Caps/CaptureManager.cs index bf0c7e9dc..67cbb81ac 100644 --- a/src/Ryujinx.HLE/HOS/Services/Caps/CaptureManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Caps/CaptureManager.cs @@ -118,10 +118,10 @@ namespace Ryujinx.HLE.HOS.Services.Caps } // NOTE: The saved JPEG file doesn't have the limitation in the extra EXIF data. - using var bitmap = new SKBitmap(new SKImageInfo(1280, 720, SKColorType.Rgba8888)); + using SKBitmap bitmap = new SKBitmap(new SKImageInfo(1280, 720, SKColorType.Rgba8888)); Marshal.Copy(screenshotData, 0, bitmap.GetPixels(), screenshotData.Length); - using var data = bitmap.Encode(SKEncodedImageFormat.Jpeg, 80); - using var file = File.OpenWrite(filePath); + using SKData data = bitmap.Encode(SKEncodedImageFormat.Jpeg, 80); + using FileStream file = File.OpenWrite(filePath); data.SaveTo(file); return ResultCode.Success; diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs index 20ffb996d..796ece16c 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs @@ -26,7 +26,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy try { LocalStorage storage = new(pfsPath, FileAccess.Read, FileMode.Open); - var pfs = new PartitionFileSystem(); + PartitionFileSystem pfs = new PartitionFileSystem(); using SharedRef nsp = new(pfs); pfs.Initialize(storage).ThrowIfFailure(); @@ -58,7 +58,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy } LibHac.Fs.Fsa.IFileSystem fileSystem = nca.OpenFileSystem(NcaSectionType.Data, context.Device.System.FsIntegrityCheckLevel); - using var sharedFs = new SharedRef(fileSystem); + using SharedRef sharedFs = new SharedRef(fileSystem); using SharedRef adapter = FileSystemInterfaceAdapter.CreateShared(ref sharedFs.Ref, true); @@ -99,7 +99,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy string filename = fullPath.Replace(archivePath.FullName, string.Empty).TrimStart('\\'); - using var ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new UniqueRef(); Result result = nsp.OpenFile(ref ncaFile.Ref, filename.ToU8Span(), OpenMode.Read); if (result.IsFailure()) @@ -122,14 +122,14 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy { foreach (DirectoryEntryEx ticketEntry in nsp.EnumerateEntries("/", "*.tik")) { - using var ticketFile = new UniqueRef(); + using UniqueRef ticketFile = new UniqueRef(); Result result = nsp.OpenFile(ref ticketFile.Ref, ticketEntry.FullPath.ToU8Span(), OpenMode.Read); if (result.IsSuccess()) { Ticket ticket = new(ticketFile.Get.AsStream()); - var titleKey = ticket.GetTitleKey(keySet); + byte[] titleKey = ticket.GetTitleKey(keySet); if (titleKey != null) { diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs index 70d3a6bd8..0fe7bcdd6 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IDirectory.cs @@ -1,6 +1,7 @@ using LibHac; using LibHac.Common; using LibHac.Sf; +using Ryujinx.Memory; namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy { @@ -20,7 +21,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy ulong bufferAddress = context.Request.ReceiveBuff[0].Position; ulong bufferLen = context.Request.ReceiveBuff[0].Size; - using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); + using WritableRegion region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseDirectory.Get.Read(out long entriesRead, new OutBuffer(region.Memory.Span)); context.ResponseData.Write(entriesRead); diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFile.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFile.cs index dcc34a754..0ea57f5a4 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFile.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFile.cs @@ -3,6 +3,7 @@ using LibHac.Common; using LibHac.Fs; using LibHac.Sf; using Ryujinx.Common; +using Ryujinx.Memory; namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy { @@ -28,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy long offset = context.RequestData.ReadInt64(); long size = context.RequestData.ReadInt64(); - using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); + using WritableRegion region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseFile.Get.Read(out long bytesRead, offset, new OutBuffer(region.Memory.Span), size, readOption); context.ResponseData.Write(bytesRead); diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFileSystem.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFileSystem.cs index e19d17912..ff0cb7aed 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFileSystem.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFileSystem.cs @@ -111,7 +111,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy uint mode = context.RequestData.ReadUInt32(); ref readonly Path name = ref FileSystemProxyHelper.GetSfPath(context); - using var file = new SharedRef(); + using SharedRef file = new SharedRef(); Result result = _fileSystem.Get.OpenFile(ref file.Ref, in name, mode); @@ -132,7 +132,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy uint mode = context.RequestData.ReadUInt32(); ref readonly Path name = ref FileSystemProxyHelper.GetSfPath(context); - using var dir = new SharedRef(); + using SharedRef dir = new SharedRef(); Result result = _fileSystem.Get.OpenDirectory(ref dir.Ref, name, mode); diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs index ad4cccc44..04dc6c688 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs @@ -3,6 +3,7 @@ using LibHac.Common; using LibHac.Sf; using Ryujinx.Common; using Ryujinx.Common.Configuration; +using Ryujinx.Memory; using System.Threading; namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy @@ -38,7 +39,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy size = bufferLen; } - using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); + using WritableRegion region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseStorage.Get.Read((long)offset, new OutBuffer(region.Memory.Span), (long)size); if (context.Device.DirtyHacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix) && IsXc2) diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs b/src/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs index 24dd1e9be..4ccc7cc92 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs @@ -3,6 +3,7 @@ using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Shim; using LibHac.FsSrv.Impl; +using LibHac.FsSrv.Sf; using LibHac.FsSystem; using LibHac.Ncm; using LibHac.Sf; @@ -12,10 +13,12 @@ using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy; +using Ryujinx.Memory; using System; using System.IO; using static Ryujinx.HLE.Utilities.StringUtils; using GameCardHandle = System.UInt32; +using IFile = Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy.IFile; using IFileSystem = LibHac.FsSrv.Sf.IFileSystem; using IStorage = LibHac.FsSrv.Sf.IStorage; @@ -29,7 +32,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public IFileSystemProxy(ServiceCtx context) : base(context.Device.System.FsServer) { - var applicationClient = context.Device.System.LibHacHorizonManager.ApplicationClient; + HorizonClient applicationClient = context.Device.System.LibHacHorizonManager.ApplicationClient; _baseFileSystemProxy = applicationClient.Fs.Impl.GetFileSystemProxyServiceObject(); } @@ -106,8 +109,8 @@ namespace Ryujinx.HLE.HOS.Services.Fs { BisPartitionId bisPartitionId = (BisPartitionId)context.RequestData.ReadInt32(); - ref readonly var path = ref FileSystemProxyHelper.GetFspPath(context); - using var fileSystem = new SharedRef(); + ref readonly FspPath path = ref FileSystemProxyHelper.GetFspPath(context); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenBisFileSystem(ref fileSystem.Ref, in path, bisPartitionId); if (result.IsFailure()) @@ -125,7 +128,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenBisStorage(ServiceCtx context) { BisPartitionId bisPartitionId = (BisPartitionId)context.RequestData.ReadInt32(); - using var storage = new SharedRef(); + using SharedRef storage = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenBisStorage(ref storage.Ref, bisPartitionId); if (result.IsFailure()) @@ -149,7 +152,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenSdCardFileSystem() -> object public ResultCode OpenSdCardFileSystem(ServiceCtx context) { - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenSdCardFileSystem(ref fileSystem.Ref); if (result.IsFailure()) @@ -257,7 +260,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { GameCardHandle handle = context.RequestData.ReadUInt32(); GameCardPartitionRaw partitionId = (GameCardPartitionRaw)context.RequestData.ReadInt32(); - using var storage = new SharedRef(); + using SharedRef storage = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenGameCardStorage(ref storage.Ref, handle, partitionId); if (result.IsFailure()) @@ -276,7 +279,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { GameCardHandle handle = context.RequestData.ReadUInt32(); GameCardPartition partitionId = (GameCardPartition)context.RequestData.ReadInt32(); - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenGameCardFileSystem(ref fileSystem.Ref, handle, partitionId); if (result.IsFailure()) @@ -357,7 +360,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt64(); SaveDataAttribute attribute = context.RequestData.ReadStruct(); - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenSaveDataFileSystem(ref fileSystem.Ref, spaceId, in attribute); if (result.IsFailure()) @@ -376,7 +379,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt64(); SaveDataAttribute attribute = context.RequestData.ReadStruct(); - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenSaveDataFileSystemBySystemSaveDataId(ref fileSystem.Ref, spaceId, in attribute); if (result.IsFailure()) @@ -395,7 +398,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt64(); SaveDataAttribute attribute = context.RequestData.ReadStruct(); - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenReadOnlySaveDataFileSystem(ref fileSystem.Ref, spaceId, in attribute); if (result.IsFailure()) @@ -466,7 +469,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenSaveDataInfoReader() -> object public ResultCode OpenSaveDataInfoReader(ServiceCtx context) { - using var infoReader = new SharedRef(); + using SharedRef infoReader = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenSaveDataInfoReader(ref infoReader.Ref); if (result.IsFailure()) @@ -484,7 +487,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenSaveDataInfoReaderBySaveDataSpaceId(ServiceCtx context) { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadByte(); - using var infoReader = new SharedRef(); + using SharedRef infoReader = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenSaveDataInfoReaderBySaveDataSpaceId(ref infoReader.Ref, spaceId); if (result.IsFailure()) @@ -501,7 +504,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenSaveDataInfoReaderOnlyCacheStorage() -> object public ResultCode OpenSaveDataInfoReaderOnlyCacheStorage(ServiceCtx context) { - using var infoReader = new SharedRef(); + using SharedRef infoReader = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenSaveDataInfoReaderOnlyCacheStorage(ref infoReader.Ref); if (result.IsFailure()) @@ -520,7 +523,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt64(); ulong saveDataId = context.RequestData.ReadUInt64(); - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenSaveDataInternalStorageFileSystem(ref fileSystem.Ref, spaceId, saveDataId); if (result.IsFailure()) @@ -567,7 +570,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs ulong bufferAddress = context.Request.ReceiveBuff[0].Position; ulong bufferLen = context.Request.ReceiveBuff[0].Size; - using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); + using WritableRegion region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseFileSystemProxy.Get.FindSaveDataWithFilter(out long count, new OutBuffer(region.Memory.Span), spaceId, in filter); if (result.IsFailure()) { @@ -584,7 +587,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt64(); SaveDataFilter filter = context.RequestData.ReadStruct(); - using var infoReader = new SharedRef(); + using SharedRef infoReader = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenSaveDataInfoReaderWithFilter(ref infoReader.Ref, spaceId, in filter); if (result.IsFailure()) @@ -661,7 +664,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt32(); SaveDataMetaType metaType = (SaveDataMetaType)context.RequestData.ReadInt32(); SaveDataAttribute attribute = context.RequestData.ReadStruct(); - using var file = new SharedRef(); + using SharedRef file = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenSaveDataMetaFile(ref file.Ref, spaceId, in attribute, metaType); if (result.IsFailure()) @@ -699,7 +702,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenImageDirectoryFileSystem(ServiceCtx context) { ImageDirectoryId directoryId = (ImageDirectoryId)context.RequestData.ReadInt32(); - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenImageDirectoryFileSystem(ref fileSystem.Ref, directoryId); if (result.IsFailure()) @@ -716,7 +719,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenBaseFileSystem(ServiceCtx context) { BaseFileSystemId fileSystemId = (BaseFileSystemId)context.RequestData.ReadInt32(); - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenBaseFileSystem(ref fileSystem.Ref, fileSystemId); if (result.IsFailure()) @@ -733,7 +736,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenContentStorageFileSystem(ServiceCtx context) { ContentStorageId contentStorageId = (ContentStorageId)context.RequestData.ReadInt32(); - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenContentStorageFileSystem(ref fileSystem.Ref, contentStorageId); if (result.IsFailure()) @@ -750,7 +753,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenCloudBackupWorkStorageFileSystem(ServiceCtx context) { CloudBackupWorkStorageId storageId = (CloudBackupWorkStorageId)context.RequestData.ReadInt32(); - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenCloudBackupWorkStorageFileSystem(ref fileSystem.Ref, storageId); if (result.IsFailure()) @@ -767,7 +770,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenCustomStorageFileSystem(ServiceCtx context) { CustomStorageId customStorageId = (CustomStorageId)context.RequestData.ReadInt32(); - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenCustomStorageFileSystem(ref fileSystem.Ref, customStorageId); if (result.IsFailure()) @@ -784,9 +787,9 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenDataStorageByCurrentProcess() -> object dataStorage public ResultCode OpenDataStorageByCurrentProcess(ServiceCtx context) { - var storage = context.Device.FileSystem.GetRomFs(_pid).AsStorage(true); - using var sharedStorage = new SharedRef(storage); - using var sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); + LibHac.Fs.IStorage storage = context.Device.FileSystem.GetRomFs(_pid).AsStorage(true); + using SharedRef sharedStorage = new SharedRef(storage); + using SharedRef sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref)); @@ -809,9 +812,9 @@ namespace Ryujinx.HLE.HOS.Services.Fs { Logger.Info?.Print(LogClass.Loader, $"Opened AddOnContent Data TitleID={titleId:X16}"); - var storage = context.Device.FileSystem.ModLoader.ApplyRomFsMods(titleId, aocStorage); - using var sharedStorage = new SharedRef(storage); - using var sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); + LibHac.Fs.IStorage storage = context.Device.FileSystem.ModLoader.ApplyRomFsMods(titleId, aocStorage); + using SharedRef sharedStorage = new SharedRef(storage); + using SharedRef sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref)); @@ -845,8 +848,8 @@ namespace Ryujinx.HLE.HOS.Services.Fs LibHac.Fs.IStorage ncaStorage = new LocalStorage(ncaPath, FileAccess.Read, FileMode.Open); Nca nca = new(context.Device.System.KeySet, ncaStorage); LibHac.Fs.IStorage romfsStorage = nca.OpenStorage(NcaSectionType.Data, context.Device.System.FsIntegrityCheckLevel); - using var sharedStorage = new SharedRef(romfsStorage); - using var sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); + using SharedRef sharedStorage = new SharedRef(romfsStorage); + using SharedRef sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref)); } @@ -875,9 +878,9 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenPatchDataStorageByCurrentProcess() -> object public ResultCode OpenPatchDataStorageByCurrentProcess(ServiceCtx context) { - var storage = context.Device.FileSystem.GetRomFs(_pid).AsStorage(true); - using var sharedStorage = new SharedRef(storage); - using var sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); + LibHac.Fs.IStorage storage = context.Device.FileSystem.GetRomFs(_pid).AsStorage(true); + using SharedRef sharedStorage = new SharedRef(storage); + using SharedRef sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref)); @@ -895,9 +898,9 @@ namespace Ryujinx.HLE.HOS.Services.Fs throw new NotImplementedException($"Accessing storage from other programs is not supported (program index = {programIndex})."); } - var storage = context.Device.FileSystem.GetRomFs(_pid).AsStorage(true); - using var sharedStorage = new SharedRef(storage); - using var sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); + LibHac.Fs.IStorage storage = context.Device.FileSystem.GetRomFs(_pid).AsStorage(true); + using SharedRef sharedStorage = new SharedRef(storage); + using SharedRef sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref)); @@ -908,7 +911,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenDataStorageByCurrentProcess() -> object dataStorage public ResultCode OpenDeviceOperator(ServiceCtx context) { - using var deviceOperator = new SharedRef(); + using SharedRef deviceOperator = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenDeviceOperator(ref deviceOperator.Ref); if (result.IsFailure()) @@ -1023,7 +1026,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs [CommandCmif(609)] public ResultCode GetRightsIdByPath(ServiceCtx context) { - ref readonly var path = ref FileSystemProxyHelper.GetFspPath(context); + ref readonly FspPath path = ref FileSystemProxyHelper.GetFspPath(context); Result result = _baseFileSystemProxy.Get.GetRightsIdByPath(out RightsId rightsId, in path); if (result.IsFailure()) @@ -1039,7 +1042,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs [CommandCmif(610)] public ResultCode GetRightsIdAndKeyGenerationByPath(ServiceCtx context) { - ref readonly var path = ref FileSystemProxyHelper.GetFspPath(context); + ref readonly FspPath path = ref FileSystemProxyHelper.GetFspPath(context); Result result = _baseFileSystemProxy.Get.GetRightsIdAndKeyGenerationByPath(out RightsId rightsId, out byte keyGeneration, in path); if (result.IsFailure()) @@ -1236,7 +1239,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode SetBisRootForHost(ServiceCtx context) { BisPartitionId partitionId = (BisPartitionId)context.RequestData.ReadInt32(); - ref readonly var path = ref FileSystemProxyHelper.GetFspPath(context); + ref readonly FspPath path = ref FileSystemProxyHelper.GetFspPath(context); return (ResultCode)_baseFileSystemProxy.Get.SetBisRootForHost(partitionId, in path).Value; } @@ -1253,7 +1256,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs [CommandCmif(1002)] public ResultCode SetSaveDataRootPath(ServiceCtx context) { - ref readonly var path = ref FileSystemProxyHelper.GetFspPath(context); + ref readonly FspPath path = ref FileSystemProxyHelper.GetFspPath(context); return (ResultCode)_baseFileSystemProxy.Get.SetSaveDataRootPath(in path).Value; } @@ -1307,7 +1310,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs [CommandCmif(1008)] public ResultCode OpenRegisteredUpdatePartition(ServiceCtx context) { - using var fileSystem = new SharedRef(); + using SharedRef fileSystem = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenRegisteredUpdatePartition(ref fileSystem.Ref); if (result.IsFailure()) @@ -1417,7 +1420,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenMultiCommitManager() -> object public ResultCode OpenMultiCommitManager(ServiceCtx context) { - using var commitManager = new SharedRef(); + using SharedRef commitManager = new SharedRef(); Result result = _baseFileSystemProxy.Get.OpenMultiCommitManager(ref commitManager.Ref); if (result.IsFailure()) diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/ISaveDataInfoReader.cs b/src/Ryujinx.HLE/HOS/Services/Fs/ISaveDataInfoReader.cs index 7ed6dadc2..b86eb1fa1 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/ISaveDataInfoReader.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/ISaveDataInfoReader.cs @@ -1,6 +1,7 @@ using LibHac; using LibHac.Common; using LibHac.Sf; +using Ryujinx.Memory; namespace Ryujinx.HLE.HOS.Services.Fs { @@ -20,7 +21,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs ulong bufferAddress = context.Request.ReceiveBuff[0].Position; ulong bufferLen = context.Request.ReceiveBuff[0].Size; - using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); + using WritableRegion region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseReader.Get.Read(out long readCount, new OutBuffer(region.Memory.Span)); context.ResponseData.Write(readCount); diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs index a13e77e72..28caf4459 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs @@ -81,7 +81,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs { IrCameraHandle irCameraHandle = context.RequestData.ReadStruct(); ulong appletResourceUserId = context.RequestData.ReadUInt64(); - var packedMomentProcessorConfig = context.RequestData.ReadStruct(); + PackedMomentProcessorConfig packedMomentProcessorConfig = context.RequestData.ReadStruct(); CheckCameraHandle(irCameraHandle); @@ -96,7 +96,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs { IrCameraHandle irCameraHandle = context.RequestData.ReadStruct(); ulong appletResourceUserId = context.RequestData.ReadUInt64(); - var packedClusteringProcessorConfig = context.RequestData.ReadStruct(); + PackedClusteringProcessorConfig packedClusteringProcessorConfig = context.RequestData.ReadStruct(); CheckCameraHandle(irCameraHandle); @@ -111,7 +111,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs { IrCameraHandle irCameraHandle = context.RequestData.ReadStruct(); ulong appletResourceUserId = context.RequestData.ReadUInt64(); - var packedImageTransferProcessorConfig = context.RequestData.ReadStruct(); + PackedImageTransferProcessorConfig packedImageTransferProcessorConfig = context.RequestData.ReadStruct(); CheckCameraHandle(irCameraHandle); @@ -157,7 +157,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs { IrCameraHandle irCameraHandle = context.RequestData.ReadStruct(); ulong appletResourceUserId = context.RequestData.ReadUInt64(); - var packedTeraPluginProcessorConfig = context.RequestData.ReadStruct(); + PackedTeraPluginProcessorConfig packedTeraPluginProcessorConfig = context.RequestData.ReadStruct(); CheckCameraHandle(irCameraHandle); diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs index b8b3014f1..438f532ee 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs @@ -65,7 +65,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator // TODO: Call nn::arp::GetApplicationControlProperty here when implemented. ApplicationControlProperty controlProperty = context.Device.Processes.ActiveApplication.ApplicationControlProperties; - foreach (var localCommunicationId in controlProperty.LocalCommunicationId.ItemsRo) + foreach (ulong localCommunicationId in controlProperty.LocalCommunicationId.ItemsRo) { if (localCommunicationId == localCommunicationIdChecked) { diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs index 8b7af42a0..e6b8ab1ec 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs @@ -244,7 +244,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm byte[] ip = address.GetAddressBytes(); - var macAddress = new Array6(); + Array6 macAddress = new Array6(); new byte[] { 0x02, 0x00, ip[0], ip[1], ip[2], ip[3] }.CopyTo(macAddress.AsSpan()); return macAddress; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/Proxy/LdnProxyUdpServer.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/Proxy/LdnProxyUdpServer.cs index 536ae476d..b1040e646 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/Proxy/LdnProxyUdpServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/Proxy/LdnProxyUdpServer.cs @@ -112,7 +112,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm.Proxy lock (_scanLock) { - var newResults = _scanResultsLast; + Dictionary newResults = _scanResultsLast; newResults.Clear(); _scanResultsLast = _scanResults; @@ -138,7 +138,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm.Proxy lock (_scanLock) { - var results = new Dictionary(); + Dictionary results = new Dictionary(); foreach (KeyValuePair last in _scanResultsLast) { diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs index 4c7814b8e..a21fb190a 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs @@ -490,7 +490,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu SendAsync(_protocol.Encode(PacketId.CreateAccessPoint, request, advertiseData)); // Send a network change event with dummy data immediately. Necessary to avoid crashes in some games - var networkChangeEvent = new NetworkChangeEventArgs(new NetworkInfo() + NetworkChangeEventArgs networkChangeEvent = new NetworkChangeEventArgs(new NetworkInfo() { Common = new CommonNetworkInfo() { @@ -610,7 +610,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu SendAsync(_protocol.Encode(PacketId.Connect, request)); - var networkChangeEvent = new NetworkChangeEventArgs(new NetworkInfo() + NetworkChangeEventArgs networkChangeEvent = new NetworkChangeEventArgs(new NetworkInfo() { Common = request.NetworkInfo.Common, Ldn = request.NetworkInfo.Ldn diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs index ed7a9c751..705e67ecd 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs @@ -256,7 +256,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy { _proxy.ReturnEphemeralPort(ProtocolType, (ushort)((IPEndPoint)LocalEndPoint).Port); } - var asIPEndpoint = (IPEndPoint)localEP; + IPEndPoint asIPEndpoint = (IPEndPoint)localEP; if (asIPEndpoint.Port == 0) { asIPEndpoint.Port = (ushort)_proxy.GetEphemeralPort(ProtocolType); diff --git a/src/Ryujinx.HLE/HOS/Services/Mii/Types/CoreData.cs b/src/Ryujinx.HLE/HOS/Services/Mii/Types/CoreData.cs index aaeb8aa10..bbef717ae 100644 --- a/src/Ryujinx.HLE/HOS/Services/Mii/Types/CoreData.cs +++ b/src/Ryujinx.HLE/HOS/Services/Mii/Types/CoreData.cs @@ -440,18 +440,18 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types int indexFor4 = 3 * (int)age + 9 * (int)gender + (int)race; - var facelineTypeInfo = RandomMiiFacelineArray[indexFor4]; - var facelineColorInfo = RandomMiiFacelineColorArray[3 * (int)gender + (int)race]; - var facelineWrinkleInfo = RandomMiiFacelineWrinkleArray[indexFor4]; - var facelineMakeInfo = RandomMiiFacelineMakeArray[indexFor4]; - var hairTypeInfo = RandomMiiHairTypeArray[indexFor4]; - var hairColorInfo = RandomMiiHairColorArray[3 * (int)race + (int)age]; - var eyeTypeInfo = RandomMiiEyeTypeArray[indexFor4]; - var eyeColorInfo = RandomMiiEyeColorArray[(int)race]; - var eyebrowTypeInfo = RandomMiiEyebrowTypeArray[indexFor4]; - var noseTypeInfo = RandomMiiNoseTypeArray[indexFor4]; - var mouthTypeInfo = RandomMiiMouthTypeArray[indexFor4]; - var glassTypeInfo = RandomMiiGlassTypeArray[(int)age]; + RandomMiiData4 facelineTypeInfo = RandomMiiFacelineArray[indexFor4]; + RandomMiiData3 facelineColorInfo = RandomMiiFacelineColorArray[3 * (int)gender + (int)race]; + RandomMiiData4 facelineWrinkleInfo = RandomMiiFacelineWrinkleArray[indexFor4]; + RandomMiiData4 facelineMakeInfo = RandomMiiFacelineMakeArray[indexFor4]; + RandomMiiData4 hairTypeInfo = RandomMiiHairTypeArray[indexFor4]; + RandomMiiData3 hairColorInfo = RandomMiiHairColorArray[3 * (int)race + (int)age]; + RandomMiiData4 eyeTypeInfo = RandomMiiEyeTypeArray[indexFor4]; + RandomMiiData2 eyeColorInfo = RandomMiiEyeColorArray[(int)race]; + RandomMiiData4 eyebrowTypeInfo = RandomMiiEyebrowTypeArray[indexFor4]; + RandomMiiData4 noseTypeInfo = RandomMiiNoseTypeArray[indexFor4]; + RandomMiiData4 mouthTypeInfo = RandomMiiMouthTypeArray[indexFor4]; + RandomMiiData2 glassTypeInfo = RandomMiiGlassTypeArray[(int)age]; // Faceline coreData.FacelineType = (FacelineType)facelineTypeInfo.Values[utilImpl.GetRandom(facelineTypeInfo.ValuesCount)]; diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDecryptor.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDecryptor.cs index cc6d02ea2..245c37742 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDecryptor.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDecryptor.cs @@ -9,8 +9,8 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption public AmiiboDecryptor(string keyRetailBinPath) { - var combinedKeys = File.ReadAllBytes(keyRetailBinPath); - var keys = AmiiboMasterKey.FromCombinedBin(combinedKeys); + byte[] combinedKeys = File.ReadAllBytes(keyRetailBinPath); + (AmiiboMasterKey DataKey, AmiiboMasterKey TagKey) keys = AmiiboMasterKey.FromCombinedBin(combinedKeys); DataKey = keys.DataKey; TagKey = keys.TagKey; } diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDump.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDump.cs index 37d587dac..c5788a4b9 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDump.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDump.cs @@ -85,13 +85,13 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption if (deriveAes) { // Derive AES Key and IV - var dataForAes = new byte[2 + seedBytes.Length]; + byte[] dataForAes = new byte[2 + seedBytes.Length]; dataForAes[0] = 0x00; dataForAes[1] = 0x00; // Counter (0) Array.Copy(seedBytes, 0, dataForAes, 2, seedBytes.Length); byte[] derivedBytes; - using (var hmac = new HMACSHA256(key.HmacKey)) + using (HMACSHA256 hmac = new HMACSHA256(key.HmacKey)) { derivedBytes = hmac.ComputeHash(dataForAes); } @@ -100,12 +100,12 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption derivedAesIv = derivedBytes.Skip(16).Take(16).ToArray(); // Derive HMAC Key - var dataForHmacKey = new byte[2 + seedBytes.Length]; + byte[] dataForHmacKey = new byte[2 + seedBytes.Length]; dataForHmacKey[0] = 0x00; dataForHmacKey[1] = 0x01; // Counter (1) Array.Copy(seedBytes, 0, dataForHmacKey, 2, seedBytes.Length); - using (var hmac = new HMACSHA256(key.HmacKey)) + using (HMACSHA256 hmac = new HMACSHA256(key.HmacKey)) { derivedBytes = hmac.ComputeHash(dataForHmacKey); } @@ -115,13 +115,13 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption else { // Derive HMAC Key only - var dataForHmacKey = new byte[2 + seedBytes.Length]; + byte[] dataForHmacKey = new byte[2 + seedBytes.Length]; dataForHmacKey[0] = 0x00; dataForHmacKey[1] = 0x01; // Counter (1) Array.Copy(seedBytes, 0, dataForHmacKey, 2, seedBytes.Length); byte[] derivedBytes; - using (var hmac = new HMACSHA256(key.HmacKey)) + using (HMACSHA256 hmac = new HMACSHA256(key.HmacKey)) { derivedBytes = hmac.ComputeHash(dataForHmacKey); } @@ -229,7 +229,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption Array.Copy(data, 0x054, tagHmacData, 8, 44); byte[] tagHmac; - using (var hmac = new HMACSHA256(hmacTagKey)) + using (HMACSHA256 hmac = new HMACSHA256(hmacTagKey)) { tagHmac = hmac.ComputeHash(tagHmacData); } @@ -258,7 +258,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption Array.Copy(data, 0x054, dataHmacData, offset, len5); byte[] dataHmac; - using (var hmac = new HMACSHA256(hmacDataKey)) + using (HMACSHA256 hmac = new HMACSHA256(hmacDataKey)) { dataHmac = hmac.ComputeHash(dataHmacData); } @@ -278,7 +278,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption Array.Copy(data, 0x054, tagHmacData, 8, 44); byte[] calculatedTagHmac; - using (var hmac = new HMACSHA256(hmacTagKey)) + using (HMACSHA256 hmac = new HMACSHA256(hmacTagKey)) { calculatedTagHmac = hmac.ComputeHash(tagHmacData); } @@ -312,7 +312,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption Array.Copy(data, 0x054, dataHmacData, offset, len5); byte[] calculatedDataHmac; - using (var hmac = new HMACSHA256(hmacDataKey)) + using (HMACSHA256 hmac = new HMACSHA256(hmacDataKey)) { calculatedDataHmac = hmac.ComputeHash(dataHmacData); } diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/Host1xContext.cs b/src/Ryujinx.HLE/HOS/Services/Nv/Host1xContext.cs index 7c7ebf22d..57b31e662 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nv/Host1xContext.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nv/Host1xContext.cs @@ -18,8 +18,8 @@ namespace Ryujinx.HLE.HOS.Services.Nv MemoryAllocator = new NvMemoryAllocator(); Host1x = new Host1xDevice(gpu.Synchronization); Smmu = gpu.CreateDeviceMemoryManager(pid); - var nvdec = new NvdecDevice(Smmu); - var vic = new VicDevice(Smmu); + NvdecDevice nvdec = new NvdecDevice(Smmu); + VicDevice vic = new VicDevice(Smmu); Host1x.RegisterDevice(ClassId.Nvdec, nvdec); Host1x.RegisterDevice(ClassId.Vic, vic); } diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs index 0f5d7547c..3422343fd 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs @@ -104,7 +104,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostAsGpu private NvInternalResult BindChannel(ref BindChannelArguments arguments) { - var channelDeviceFile = INvDrvServices.DeviceFileIdRegistry.GetData(arguments.Fd); + NvHostChannelDeviceFile channelDeviceFile = INvDrvServices.DeviceFileIdRegistry.GetData(arguments.Fd); if (channelDeviceFile == null) { // TODO: Return invalid Fd error. @@ -336,9 +336,9 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostAsGpu for (uint i = 0; i < writeEntries; i++) { - ref var region = ref arguments.Regions[(int)i]; + ref VaRegion region = ref arguments.Regions[(int)i]; - var vmRegion = _vmRegions[i]; + VmRegion vmRegion = _vmRegions[i]; uint pageSize = _pageSizes[i]; region.PageSize = pageSize; diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostChannel/NvHostChannelDeviceFile.cs b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostChannel/NvHostChannelDeviceFile.cs index bc70b05cf..f81c2edef 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostChannel/NvHostChannelDeviceFile.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostChannel/NvHostChannelDeviceFile.cs @@ -169,7 +169,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostChannel { NvMapHandle map = NvMapDeviceFile.GetMapFromHandle(Owner, commandBuffer.Mem); - var data = _memory.GetSpan(map.Address + commandBuffer.Offset, commandBuffer.WordsCount * 4); + ReadOnlySpan data = _memory.GetSpan(map.Address + commandBuffer.Offset, commandBuffer.WordsCount * 4); _host1xContext.Host1x.Submit(MemoryMarshal.Cast(data), _contextId); } diff --git a/src/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs b/src/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs index 56d389cd2..25666c2fd 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs @@ -55,7 +55,7 @@ namespace Ryujinx.HLE.HOS.Services.Sdb.Pdm.QueryService MemoryHelper.FillWithZeros(context.Memory, outputPosition, (int)outputSize); // Return ResultCode.ServiceUnavailable if data is locked by another process. - var filteredApplicationPlayStatistics = _applicationPlayStatistics.AsEnumerable(); + IEnumerable> filteredApplicationPlayStatistics = _applicationPlayStatistics.AsEnumerable(); if (queryCapability == PlayLogQueryCapability.None) { diff --git a/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs b/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs index 0e02220a0..3cc43a551 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs @@ -76,7 +76,7 @@ namespace Ryujinx.HLE.HOS.Services.Sdb.Pl Nca nca = new(_device.System.KeySet, ncaFileStream); IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _device.System.FsIntegrityCheckLevel); - using var fontFile = new UniqueRef(); + using UniqueRef fontFile = new UniqueRef(); romfs.OpenFile(ref fontFile.Ref, ("/" + fontFilename).ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/HOS/Services/ServerBase.cs b/src/Ryujinx.HLE/HOS/Services/ServerBase.cs index 40329aa36..0fd5ab670 100644 --- a/src/Ryujinx.HLE/HOS/Services/ServerBase.cs +++ b/src/Ryujinx.HLE/HOS/Services/ServerBase.cs @@ -1,3 +1,4 @@ +using Microsoft.IO; using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.Common.Memory; @@ -235,7 +236,7 @@ namespace Ryujinx.HLE.HOS.Services } } - var rc = _context.Syscall.ReplyAndReceive(out int signaledIndex, handles.AsSpan(0, handleCount), replyTargetHandle, -1); + Result rc = _context.Syscall.ReplyAndReceive(out int signaledIndex, handles.AsSpan(0, handleCount), replyTargetHandle, -1); _selfThread.HandlePostSyscall(); @@ -307,7 +308,7 @@ namespace Ryujinx.HLE.HOS.Services { _context.Syscall.CloseHandle(serverSessionHandle); - if (RemoveSessionObj(serverSessionHandle, out var session)) + if (RemoveSessionObj(serverSessionHandle, out IpcService session)) { (session as IDisposable)?.Dispose(); } @@ -453,7 +454,7 @@ namespace Ryujinx.HLE.HOS.Services response.RawData = _responseDataStream.ToArray(); - using var responseStream = response.GetStreamTipc(); + using RecyclableMemoryStream responseStream = response.GetStreamTipc(); _selfProcess.CpuMemory.Write(_selfThread.TlsAddress, responseStream.GetReadOnlySequence()); } else @@ -463,7 +464,7 @@ namespace Ryujinx.HLE.HOS.Services if (!isTipcCommunication) { - using var responseStream = response.GetStream((long)_selfThread.TlsAddress, recvListAddr | ((ulong)PointerBufferSize << 48)); + using RecyclableMemoryStream responseStream = response.GetStream((long)_selfThread.TlsAddress, recvListAddr | ((ulong)PointerBufferSize << 48)); _selfProcess.CpuMemory.Write(_selfThread.TlsAddress, responseStream.GetReadOnlySequence()); } diff --git a/src/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs b/src/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs index 846c4dc4f..df2f76563 100644 --- a/src/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs @@ -326,7 +326,7 @@ namespace Ryujinx.HLE.HOS.Services.Settings IFileSystem firmwareRomFs = firmwareContent.OpenFileSystem(NcaSectionType.Data, device.System.FsIntegrityCheckLevel); - using var firmwareFile = new UniqueRef(); + using UniqueRef firmwareFile = new UniqueRef(); Result result = firmwareRomFs.OpenFile(ref firmwareFile.Ref, "/file".ToU8Span(), OpenMode.Read); if (result.IsFailure()) diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs index 3a40a4ac5..273f6c5ca 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs @@ -315,9 +315,9 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd } } - using var readFdsOut = context.Memory.GetWritableRegion(readFdsOutBufferPosition, (int)readFdsOutBufferSize); - using var writeFdsOut = context.Memory.GetWritableRegion(writeFdsOutBufferPosition, (int)writeFdsOutBufferSize); - using var errorFdsOut = context.Memory.GetWritableRegion(errorFdsOutBufferPosition, (int)errorFdsOutBufferSize); + using WritableRegion readFdsOut = context.Memory.GetWritableRegion(readFdsOutBufferPosition, (int)readFdsOutBufferSize); + using WritableRegion writeFdsOut = context.Memory.GetWritableRegion(writeFdsOutBufferPosition, (int)writeFdsOutBufferSize); + using WritableRegion errorFdsOut = context.Memory.GetWritableRegion(errorFdsOutBufferPosition, (int)errorFdsOutBufferSize); _context.BuildMask(readFds, readFdsOut.Memory.Span); _context.BuildMask(writeFds, writeFdsOut.Memory.Span); diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/WinSockHelper.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/WinSockHelper.cs index e2ef75f80..3db2712f3 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/WinSockHelper.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/WinSockHelper.cs @@ -303,7 +303,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl public static bool TryConvertSocketOption(BsdSocketOption option, SocketOptionLevel level, out SocketOptionName name) { - var table = level switch + Dictionary table = level switch { SocketOptionLevel.Socket => _soSocketOptionMap, SocketOptionLevel.IP => _ipSocketOptionMap, @@ -322,7 +322,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl public static LinuxError ValidateSocketOption(BsdSocketOption option, SocketOptionLevel level, bool write) { - var table = level switch + Dictionary table = level switch { SocketOptionLevel.Socket => _validSoSocketOptionMap, SocketOptionLevel.IP => _validIpSocketOptionMap, diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs index 485a7f86b..9f206176d 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Proxy/SocketHelpers.cs @@ -12,9 +12,9 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Proxy public static void Select(List readEvents, List writeEvents, List errorEvents, int timeout) { - var readDefault = readEvents.Select(x => (x as DefaultSocket)?.BaseSocket).Where(x => x != null).ToList(); - var writeDefault = writeEvents.Select(x => (x as DefaultSocket)?.BaseSocket).Where(x => x != null).ToList(); - var errorDefault = errorEvents.Select(x => (x as DefaultSocket)?.BaseSocket).Where(x => x != null).ToList(); + List readDefault = readEvents.Select(x => (x as DefaultSocket)?.BaseSocket).Where(x => x != null).ToList(); + List writeDefault = writeEvents.Select(x => (x as DefaultSocket)?.BaseSocket).Where(x => x != null).ToList(); + List errorDefault = errorEvents.Select(x => (x as DefaultSocket)?.BaseSocket).Where(x => x != null).ToList(); if (readDefault.Count != 0 || writeDefault.Count != 0 || errorDefault.Count != 0) { diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsMitmResolver.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsMitmResolver.cs index d17a999dc..b0e282031 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsMitmResolver.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsMitmResolver.cs @@ -82,7 +82,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres.Proxy public IPHostEntry ResolveAddress(string host) { - foreach (var hostEntry in _mitmHostEntries) + foreach (KeyValuePair hostEntry in _mitmHostEntries) { // Check for AMS hosts file extension: "*" // NOTE: MatchesSimpleExpression also allows "?" as a wildcard diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs index 622b62c16..adde15b32 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs @@ -129,7 +129,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel); - using var trustedCertsFileRef = new UniqueRef(); + using UniqueRef trustedCertsFileRef = new UniqueRef(); Result result = romfs.OpenFile(ref trustedCertsFileRef.Ref, "/ssl_TrustedCerts.bdf".ToU8Span(), OpenMode.Read); diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnection.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnection.cs index b5c608d3d..92e73f9f1 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnection.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnection.cs @@ -145,7 +145,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService ulong bufferAddress = context.Request.ReceiveBuff[0].Position; ulong bufferLen = context.Request.ReceiveBuff[0].Size; - using (var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true)) + using (WritableRegion region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true)) { Encoding.ASCII.GetBytes(_hostName, region.Memory.Span); } diff --git a/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs b/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs index 222698a7f..82d33578e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs @@ -94,7 +94,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone Nca nca = new(_virtualFileSystem.KeySet, ncaFileStream); IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel); - using var binaryListFile = new UniqueRef(); + using UniqueRef binaryListFile = new UniqueRef(); romfs.OpenFile(ref binaryListFile.Ref, "/binaryList.txt".ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -120,7 +120,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone public IEnumerable<(int Offset, string Location, string Abbr)> ParseTzOffsets() { - var tzBinaryContentPath = GetTimeZoneBinaryTitleContentPath(); + string tzBinaryContentPath = GetTimeZoneBinaryTitleContentPath(); if (string.IsNullOrEmpty(tzBinaryContentPath)) { @@ -128,7 +128,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone } List<(int Offset, string Location, string Abbr)> outList = new(); - var now = DateTimeOffset.Now.ToUnixTimeSeconds(); + long now = DateTimeOffset.Now.ToUnixTimeSeconds(); using (IStorage ncaStorage = new LocalStorage(VirtualFileSystem.SwitchPathToSystemPath(tzBinaryContentPath), FileAccess.Read, FileMode.Open)) using (IFileSystem romfs = new Nca(_virtualFileSystem.KeySet, ncaStorage).OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel)) { @@ -139,7 +139,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone continue; } - using var tzif = new UniqueRef(); + using UniqueRef tzif = new UniqueRef(); if (romfs.OpenFile(ref tzif.Ref, $"/zoneinfo/{locName}".ToU8Span(), OpenMode.Read).IsFailure()) { @@ -176,7 +176,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone continue; } - var abbrStart = tzRule.Chars[ttInfo.AbbreviationListIndex..]; + Span abbrStart = tzRule.Chars[ttInfo.AbbreviationListIndex..]; int abbrEnd = abbrStart.IndexOf((byte)0); outList.Add((ttInfo.GmtOffset, locName, Encoding.UTF8.GetString(abbrStart[..abbrEnd]))); @@ -269,7 +269,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone Nca nca = new(_virtualFileSystem.KeySet, ncaFile); IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel); - using var timeZoneBinaryFile = new UniqueRef(); + using UniqueRef timeZoneBinaryFile = new UniqueRef(); Result result = romfs.OpenFile(ref timeZoneBinaryFile.Ref, $"/zoneinfo/{locationName}".ToU8Span(), OpenMode.Read); diff --git a/src/Ryujinx.HLE/HOS/Tamper/CodeEmitters/EndConditionalBlock.cs b/src/Ryujinx.HLE/HOS/Tamper/CodeEmitters/EndConditionalBlock.cs index fc7edd62b..5eaed6530 100644 --- a/src/Ryujinx.HLE/HOS/Tamper/CodeEmitters/EndConditionalBlock.cs +++ b/src/Ryujinx.HLE/HOS/Tamper/CodeEmitters/EndConditionalBlock.cs @@ -40,7 +40,7 @@ namespace Ryujinx.HLE.HOS.Tamper.CodeEmitters } // Use the conditional begin instruction stored in the stack. - var upperInstruction = context.CurrentBlock.BaseInstruction; + byte[] upperInstruction = context.CurrentBlock.BaseInstruction; CodeType codeType = InstructionHelper.GetCodeType(upperInstruction); // Pop the current block of operations from the stack so control instructions diff --git a/src/Ryujinx.HLE/HOS/Tamper/InstructionHelper.cs b/src/Ryujinx.HLE/HOS/Tamper/InstructionHelper.cs index 759ba5f90..46e4fd9f7 100644 --- a/src/Ryujinx.HLE/HOS/Tamper/InstructionHelper.cs +++ b/src/Ryujinx.HLE/HOS/Tamper/InstructionHelper.cs @@ -96,7 +96,7 @@ namespace Ryujinx.HLE.HOS.Tamper // Instructions are multi-word, with 32bit words. Split the raw instruction // and parse each word into individual nybbles of bits. - var words = rawInstruction.Split((char[])null, StringSplitOptions.RemoveEmptyEntries); + string[] words = rawInstruction.Split((char[])null, StringSplitOptions.RemoveEmptyEntries); byte[] instruction = new byte[WordSize * words.Length]; diff --git a/src/Ryujinx.HLE/HOS/TamperMachine.cs b/src/Ryujinx.HLE/HOS/TamperMachine.cs index 609221535..d9f4fb157 100644 --- a/src/Ryujinx.HLE/HOS/TamperMachine.cs +++ b/src/Ryujinx.HLE/HOS/TamperMachine.cs @@ -70,14 +70,14 @@ namespace Ryujinx.HLE.HOS public void EnableCheats(string[] enabledCheats) { - foreach (var program in _programDictionary.Values) + foreach (ITamperProgram program in _programDictionary.Values) { program.IsEnabled = false; } - foreach (var cheat in enabledCheats) + foreach (string cheat in enabledCheats) { - if (_programDictionary.TryGetValue(cheat, out var program)) + if (_programDictionary.TryGetValue(cheat, out ITamperProgram program)) { program.IsEnabled = true; } diff --git a/src/Ryujinx.HLE/Loaders/Executables/KipExecutable.cs b/src/Ryujinx.HLE/Loaders/Executables/KipExecutable.cs index 83380ff45..293e5f846 100644 --- a/src/Ryujinx.HLE/Loaders/Executables/KipExecutable.cs +++ b/src/Ryujinx.HLE/Loaders/Executables/KipExecutable.cs @@ -76,7 +76,7 @@ namespace Ryujinx.HLE.Loaders.Executables { reader.GetSegmentSize(segmentType, out int uncompressedSize).ThrowIfFailure(); - var span = program.AsSpan((int)offset, uncompressedSize); + Span span = program.AsSpan((int)offset, uncompressedSize); reader.ReadSegment(segmentType, span).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/Loaders/Executables/NsoExecutable.cs b/src/Ryujinx.HLE/Loaders/Executables/NsoExecutable.cs index 1caedb51e..5217612b9 100644 --- a/src/Ryujinx.HLE/Loaders/Executables/NsoExecutable.cs +++ b/src/Ryujinx.HLE/Loaders/Executables/NsoExecutable.cs @@ -65,7 +65,7 @@ namespace Ryujinx.HLE.Loaders.Executables { reader.GetSegmentSize(segmentType, out uint uncompressedSize).ThrowIfFailure(); - var span = Program.AsSpan((int)offset, (int)uncompressedSize); + Span span = Program.AsSpan((int)offset, (int)uncompressedSize); reader.ReadSegment(segmentType, span).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/Loaders/Mods/IPSPatcher.cs b/src/Ryujinx.HLE/Loaders/Mods/IPSPatcher.cs index cf316b565..d457682cf 100644 --- a/src/Ryujinx.HLE/Loaders/Mods/IPSPatcher.cs +++ b/src/Ryujinx.HLE/Loaders/Mods/IPSPatcher.cs @@ -25,7 +25,7 @@ namespace Ryujinx.HLE.Loaders.Mods ReadOnlySpan ips32TailMagic = "EEOF"u8; MemPatch patches = new(); - var header = reader.ReadBytes(ipsHeaderMagic.Length).AsSpan(); + Span header = reader.ReadBytes(ipsHeaderMagic.Length).AsSpan(); if (header.Length != ipsHeaderMagic.Length) { @@ -94,7 +94,7 @@ namespace Ryujinx.HLE.Loaders.Mods } else // Copy mode { - var patch = reader.ReadBytes(patchSize); + byte[] patch = reader.ReadBytes(patchSize); if (patch.Length != patchSize) { diff --git a/src/Ryujinx.HLE/Loaders/Mods/IPSwitchPatcher.cs b/src/Ryujinx.HLE/Loaders/Mods/IPSwitchPatcher.cs index 693e03888..b6b2c9759 100644 --- a/src/Ryujinx.HLE/Loaders/Mods/IPSwitchPatcher.cs +++ b/src/Ryujinx.HLE/Loaders/Mods/IPSwitchPatcher.cs @@ -200,7 +200,7 @@ namespace Ryujinx.HLE.Loaders.Mods } else if (line.StartsWith("@flag")) { - var tokens = line.Split(' ', 3, StringSplitOptions.RemoveEmptyEntries); + string[] tokens = line.Split(' ', 3, StringSplitOptions.RemoveEmptyEntries); if (tokens.Length < 2) { @@ -234,7 +234,7 @@ namespace Ryujinx.HLE.Loaders.Mods continue; } - var tokens = line.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries); + string[] tokens = line.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries); if (tokens.Length < 2) { @@ -259,12 +259,12 @@ namespace Ryujinx.HLE.Loaders.Mods if (tokens[1][0] == '"') { - var patch = Encoding.ASCII.GetBytes(tokens[1].Trim('"') + "\0"); + byte[] patch = Encoding.ASCII.GetBytes(tokens[1].Trim('"') + "\0"); patches.Add((uint)offset, patch); } else { - var patch = Hex2ByteArrayBE(tokens[1]); + byte[] patch = Hex2ByteArrayBE(tokens[1]); patches.Add((uint)offset, patch); } } diff --git a/src/Ryujinx.HLE/Loaders/Mods/MemPatch.cs b/src/Ryujinx.HLE/Loaders/Mods/MemPatch.cs index 0a1f12b18..9a1931433 100644 --- a/src/Ryujinx.HLE/Loaders/Mods/MemPatch.cs +++ b/src/Ryujinx.HLE/Loaders/Mods/MemPatch.cs @@ -46,7 +46,7 @@ namespace Ryujinx.HLE.Loaders.Mods return; } - foreach (var (patchOffset, patch) in patches._patches) + foreach ((uint patchOffset, byte[] patch) in patches._patches) { _patches[patchOffset] = patch; } @@ -66,7 +66,7 @@ namespace Ryujinx.HLE.Loaders.Mods public int Patch(Span memory, int protectedOffset = 0) { int count = 0; - foreach (var (offset, patch) in _patches.OrderBy(item => item.Key)) + foreach ((uint offset, byte[] patch) in _patches.OrderBy(item => item.Key)) { int patchOffset = (int)offset; int patchSize = patch.Length; diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs index d1d13b00f..d68b1e200 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs @@ -62,7 +62,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions Logger.Info?.Print(LogClass.Loader, $"Loading {name}..."); - using var nsoFile = new UniqueRef(); + using UniqueRef nsoFile = new UniqueRef(); exeFs.OpenFile(ref nsoFile.Ref, $"/{name}".ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs index e3ae9bf5f..a5c22177f 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs @@ -12,7 +12,7 @@ namespace Ryujinx.HLE.Loaders.Processes public static ProcessResult Load(this LocalFileSystem exeFs, Switch device, string romFsPath = "") { MetaLoader metaLoader = exeFs.GetNpdm(); - var nacpData = new BlitStruct(1); + BlitStruct nacpData = new BlitStruct(1); ulong programId = metaLoader.GetProgramId(); device.Configuration.VirtualFileSystem.ModLoader.CollectMods([programId]); diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs index 92e71cb5a..eed7a1be5 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs @@ -12,21 +12,21 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions { public static ulong GetProgramId(this MetaLoader metaLoader) { - metaLoader.GetNpdm(out var npdm).ThrowIfFailure(); + metaLoader.GetNpdm(out LibHac.Loader.Npdm npdm).ThrowIfFailure(); return npdm.Aci.ProgramId.Value; } public static string GetProgramName(this MetaLoader metaLoader) { - metaLoader.GetNpdm(out var npdm).ThrowIfFailure(); + metaLoader.GetNpdm(out LibHac.Loader.Npdm npdm).ThrowIfFailure(); return StringUtils.Utf8ZToString(npdm.Meta.ProgramName); } public static bool IsProgram64Bit(this MetaLoader metaLoader) { - metaLoader.GetNpdm(out var npdm).ThrowIfFailure(); + metaLoader.GetNpdm(out LibHac.Loader.Npdm npdm).ThrowIfFailure(); return (npdm.Meta.Flags & 1) != 0; } @@ -45,7 +45,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions path = ProcessConst.MainNpdmPath; } - using var npdmFile = new UniqueRef(); + using UniqueRef npdmFile = new UniqueRef(); fileSystem.OpenFile(ref npdmFile.Ref, path.ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs index 361a9159e..c4d47d5bd 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs @@ -49,7 +49,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions ModLoader.GetSdModsBasePath()); // Load Nacp file. - var nacpData = new BlitStruct(1); + BlitStruct nacpData = new BlitStruct(1); if (controlNca != null) { @@ -214,9 +214,9 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions public static BlitStruct GetNacp(this Nca controlNca, Switch device) { - var nacpData = new BlitStruct(1); + BlitStruct nacpData = new BlitStruct(1); - using var controlFile = new UniqueRef(); + using UniqueRef controlFile = new UniqueRef(); Result result = controlNca.OpenFileSystem(NcaSectionType.Data, device.System.FsIntegrityCheckLevel) .OpenFile(ref controlFile.Ref, "/control.nacp".ToU8Span(), OpenMode.Read); @@ -236,7 +236,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions public static Cnmt GetCnmt(this Nca cnmtNca, IntegrityCheckLevel checkLevel, ContentMetaType metaType) { string path = $"/{metaType}_{cnmtNca.Header.TitleId:x16}.cnmt"; - using var cnmtFile = new UniqueRef(); + using UniqueRef cnmtFile = new UniqueRef(); try { diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs index b3590d9bd..4a9eafea1 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs @@ -28,7 +28,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions { fileSystem.ImportTickets(partitionFileSystem); - var programs = new Dictionary(); + Dictionary programs = new Dictionary(); foreach (DirectoryEntryEx fileEntry in partitionFileSystem.EnumerateEntries("/", "*.cnmt.nca")) { @@ -152,7 +152,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions public static Nca GetNca(this IFileSystem fileSystem, KeySet keySet, string path) { - using var ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new UniqueRef(); fileSystem.OpenFile(ref ncaFile.Ref, path.ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs index 6279ec3b4..b9746da16 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs @@ -161,7 +161,7 @@ namespace Ryujinx.HLE.Loaders.Processes public bool LoadNxo(string path) { - var nacpData = new BlitStruct(1); + BlitStruct nacpData = new BlitStruct(1); IFileSystem dummyExeFs = null; Stream romfsStream = null; diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs index e4286ae90..32266d5ca 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs @@ -180,7 +180,7 @@ namespace Ryujinx.HLE.Loaders.Processes KProcess process = new(context); - var processContextFactory = new ArmProcessContextFactory( + ArmProcessContextFactory processContextFactory = new ArmProcessContextFactory( context.Device.System.TickSource, context.Device.Gpu, string.Empty, @@ -235,7 +235,7 @@ namespace Ryujinx.HLE.Loaders.Processes { context.Device.System.ServiceTable.WaitServicesReady(); - LibHac.Result resultCode = metaLoader.GetNpdm(out var npdm); + LibHac.Result resultCode = metaLoader.GetNpdm(out LibHac.Loader.Npdm npdm); if (resultCode.IsFailure()) { @@ -244,14 +244,14 @@ namespace Ryujinx.HLE.Loaders.Processes return ProcessResult.Failed; } - ref readonly var meta = ref npdm.Meta; + ref readonly Meta meta = ref npdm.Meta; ulong argsStart = 0; uint argsSize = 0; ulong codeStart = ((meta.Flags & 1) != 0 ? 0x8000000UL : 0x200000UL) + CodeStartOffset; uint codeSize = 0; - var buildIds = new string[executables.Length]; + string[] buildIds = new string[executables.Length]; for (int i = 0; i < executables.Length; i++) { @@ -373,7 +373,7 @@ namespace Ryujinx.HLE.Loaders.Processes displayVersion = device.System.ContentManager.GetCurrentFirmwareVersion()?.VersionString ?? string.Empty; } - var processContextFactory = new ArmProcessContextFactory( + ArmProcessContextFactory processContextFactory = new ArmProcessContextFactory( context.Device.System.TickSource, context.Device.Gpu, $"{programId:x16}", diff --git a/src/Ryujinx.HLE/StructHelpers.cs b/src/Ryujinx.HLE/StructHelpers.cs index 6e6af8cea..f573f0eb6 100644 --- a/src/Ryujinx.HLE/StructHelpers.cs +++ b/src/Ryujinx.HLE/StructHelpers.cs @@ -18,7 +18,7 @@ namespace Ryujinx.HLE const int OffsetOfApplicationPublisherStrings = 0x200; - var nacpData = new BlitStruct(1); + BlitStruct nacpData = new BlitStruct(1); // name and publisher buffer // repeat once for each locale (the ApplicationControlProperty has 16 locales) diff --git a/src/Ryujinx.HLE/UI/Input/NpadReader.cs b/src/Ryujinx.HLE/UI/Input/NpadReader.cs index 8276d6160..8b4888a26 100644 --- a/src/Ryujinx.HLE/UI/Input/NpadReader.cs +++ b/src/Ryujinx.HLE/UI/Input/NpadReader.cs @@ -1,5 +1,7 @@ +using Ryujinx.Common.Memory; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; +using System; namespace Ryujinx.HLE.UI.Input { @@ -29,7 +31,7 @@ namespace Ryujinx.HLE.UI.Input { NpadButton buttons = 0; - foreach (var state in _lastStates) + foreach (NpadCommonState state in _lastStates) { buttons |= state.Buttons; } @@ -60,7 +62,7 @@ namespace Ryujinx.HLE.UI.Input public void Update(bool supressEvents = false) { - ref var npads = ref _device.Hid.SharedMemory.Npads; + ref Array10 npads = ref _device.Hid.SharedMemory.Npads; // Process each input individually. for (int npadIndex = 0; npadIndex < npads.Length; npadIndex++) @@ -73,10 +75,10 @@ namespace Ryujinx.HLE.UI.Input { const int MaxEntries = 1024; - ref var npadState = ref _device.Hid.SharedMemory.Npads[npadIndex]; - ref var lastEntry = ref _lastStates[npadIndex]; + ref NpadState npadState = ref _device.Hid.SharedMemory.Npads[npadIndex]; + ref NpadCommonState lastEntry = ref _lastStates[npadIndex]; - var fullKeyEntries = GetCommonStateLifo(ref npadState.InternalState).ReadEntries(MaxEntries); + ReadOnlySpan> fullKeyEntries = GetCommonStateLifo(ref npadState.InternalState).ReadEntries(MaxEntries); int firstEntryNum; @@ -94,7 +96,7 @@ namespace Ryujinx.HLE.UI.Input for (; firstEntryNum >= 0; firstEntryNum--) { - var entry = fullKeyEntries[firstEntryNum]; + AtomicStorage entry = fullKeyEntries[firstEntryNum]; // The interval of valid entries should be contiguous. if (entry.SamplingNumber < lastEntry.SamplingNumber) diff --git a/src/Ryujinx.HLE/Utilities/PartitionFileSystemUtils.cs b/src/Ryujinx.HLE/Utilities/PartitionFileSystemUtils.cs index 3c4ce0850..1bd6e0ff7 100644 --- a/src/Ryujinx.HLE/Utilities/PartitionFileSystemUtils.cs +++ b/src/Ryujinx.HLE/Utilities/PartitionFileSystemUtils.cs @@ -22,7 +22,7 @@ namespace Ryujinx.HLE.Utilities } else { - var pfsTemp = new PartitionFileSystem(); + PartitionFileSystem pfsTemp = new PartitionFileSystem(); Result initResult = pfsTemp.Initialize(file.AsStorage()); if (throwOnFailure) -- 2.47.1 From 69e0b79bd9cd2667769ed907f411d9d244d2fde6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:14:13 -0600 Subject: [PATCH 435/722] misc: chore: Use explicit types in Horizon project --- .../Bcat/Ipc/ServiceCreator.cs | 8 +++--- .../DeliveryCacheStorageService.cs | 8 +++--- src/Ryujinx.Horizon/HeapAllocator.cs | 6 ++--- src/Ryujinx.Horizon/Sdk/Arp/ArpApi.cs | 2 +- .../Sdk/Audio/Detail/AudioInManager.cs | 3 ++- .../Sdk/Audio/Detail/AudioOutManager.cs | 3 ++- .../Sdk/Audio/Detail/AudioRendererManager.cs | 9 ++++--- src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs | 2 +- .../Sdk/Ngc/Detail/CompressedArray.cs | 4 +-- .../Sdk/OsTypes/OsSystemEvent.cs | 2 +- src/Ryujinx.Horizon/Sdk/ServiceUtil.cs | 5 ++-- .../Cmif/DomainServiceObjectDispatchTable.cs | 6 ++--- .../Sf/Cmif/DomainServiceObjectProcessor.cs | 4 +-- .../Sdk/Sf/Cmif/ServerDomainManager.cs | 16 ++++++------ .../Sdk/Sf/Cmif/ServiceDispatchTableBase.cs | 6 ++--- src/Ryujinx.Horizon/Sdk/Sf/CommandHandler.cs | 2 +- .../Sdk/Sf/CommandSerialization.cs | 2 +- src/Ryujinx.Horizon/Sdk/Sf/Hipc/Api.cs | 4 +-- .../Sdk/Sf/Hipc/HipcManager.cs | 6 ++--- .../Sdk/Sf/Hipc/ServerManagerBase.cs | 5 ++-- .../Sdk/Sf/Hipc/ServerSessionManager.cs | 6 ++--- .../Sdk/Sf/HipcCommandProcessor.cs | 26 +++++++++---------- src/Ryujinx.Horizon/Sm/Impl/ServiceManager.cs | 2 +- 23 files changed, 71 insertions(+), 66 deletions(-) diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator.cs index 78114c51f..6984d69c4 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator.cs @@ -39,9 +39,9 @@ namespace Ryujinx.Horizon.Bcat.Ipc [CmifCommand(1)] public Result CreateDeliveryCacheStorageService(out IDeliveryCacheStorageService service, [ClientProcessId] ulong pid) { - using var libHacService = new SharedRef(); + using SharedRef libHacService = new SharedRef(); - var resultCode = _libHacService.Get.CreateDeliveryCacheStorageService(ref libHacService.Ref, pid); + LibHac.Result resultCode = _libHacService.Get.CreateDeliveryCacheStorageService(ref libHacService.Ref, pid); if (resultCode.IsSuccess()) { @@ -58,9 +58,9 @@ namespace Ryujinx.Horizon.Bcat.Ipc [CmifCommand(2)] public Result CreateDeliveryCacheStorageServiceWithApplicationId(out IDeliveryCacheStorageService service, ApplicationId applicationId) { - using var libHacService = new SharedRef(); + using SharedRef libHacService = new SharedRef(); - var resultCode = _libHacService.Get.CreateDeliveryCacheStorageServiceWithApplicationId(ref libHacService.Ref, new LibHac.ApplicationId(applicationId.Id)); + LibHac.Result resultCode = _libHacService.Get.CreateDeliveryCacheStorageServiceWithApplicationId(ref libHacService.Ref, new LibHac.ApplicationId(applicationId.Id)); if (resultCode.IsSuccess()) { diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs index ecbc4bdb7..4142c14f8 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs @@ -22,9 +22,9 @@ namespace Ryujinx.Horizon.Bcat.Ipc [CmifCommand(0)] public Result CreateFileService(out IDeliveryCacheFileService service) { - using var libHacService = new SharedRef(); + using SharedRef libHacService = new SharedRef(); - var resultCode = _libHacService.Get.CreateFileService(ref libHacService.Ref); + LibHac.Result resultCode = _libHacService.Get.CreateFileService(ref libHacService.Ref); if (resultCode.IsSuccess()) { @@ -41,9 +41,9 @@ namespace Ryujinx.Horizon.Bcat.Ipc [CmifCommand(1)] public Result CreateDirectoryService(out IDeliveryCacheDirectoryService service) { - using var libHacService = new SharedRef(); + using SharedRef libHacService = new SharedRef(); - var resultCode = _libHacService.Get.CreateDirectoryService(ref libHacService.Ref); + LibHac.Result resultCode = _libHacService.Get.CreateDirectoryService(ref libHacService.Ref); if (resultCode.IsSuccess()) { diff --git a/src/Ryujinx.Horizon/HeapAllocator.cs b/src/Ryujinx.Horizon/HeapAllocator.cs index fc125387e..838e505d3 100644 --- a/src/Ryujinx.Horizon/HeapAllocator.cs +++ b/src/Ryujinx.Horizon/HeapAllocator.cs @@ -67,7 +67,7 @@ namespace Ryujinx.Horizon { for (int i = 0; i < _freeRanges.Count; i++) { - var range = _freeRanges[i]; + Range range = _freeRanges[i]; ulong alignedOffset = BitUtils.AlignUp(range.Offset, alignment); ulong sizeDelta = alignedOffset - range.Offset; @@ -103,7 +103,7 @@ namespace Ryujinx.Horizon private void InsertFreeRange(ulong offset, ulong size) { - var range = new Range(offset, size); + Range range = new Range(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { @@ -116,7 +116,7 @@ namespace Ryujinx.Horizon private void InsertFreeRangeComingled(ulong offset, ulong size) { ulong endOffset = offset + size; - var range = new Range(offset, size); + Range range = new Range(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { diff --git a/src/Ryujinx.Horizon/Sdk/Arp/ArpApi.cs b/src/Ryujinx.Horizon/Sdk/Arp/ArpApi.cs index b0acc0062..496de62ff 100644 --- a/src/Ryujinx.Horizon/Sdk/Arp/ArpApi.cs +++ b/src/Ryujinx.Horizon/Sdk/Arp/ArpApi.cs @@ -25,7 +25,7 @@ namespace Ryujinx.Horizon.Sdk.Arp { if (_sessionHandle == 0) { - using var smApi = new SmApi(); + using SmApi smApi = new(); smApi.Initialize(); smApi.GetServiceHandle(out _sessionHandle, ServiceName.Encode(ArpRName)).AbortOnFailure(); diff --git a/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioInManager.cs b/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioInManager.cs index d5d047201..b190cb8ae 100644 --- a/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioInManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioInManager.cs @@ -5,6 +5,7 @@ using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.Applet; using Ryujinx.Horizon.Sdk.Sf; using Ryujinx.Horizon.Sdk.Sf.Hipc; +using Ryujinx.Memory; using System; namespace Ryujinx.Horizon.Sdk.Audio.Detail @@ -49,7 +50,7 @@ namespace Ryujinx.Horizon.Sdk.Audio.Detail [Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias)] ReadOnlySpan name, [ClientProcessId] ulong pid) { - var clientMemoryManager = HorizonStatic.Syscall.GetMemoryManagerByProcessHandle(processHandle); + IVirtualMemoryManager clientMemoryManager = HorizonStatic.Syscall.GetMemoryManagerByProcessHandle(processHandle); ResultCode rc = _impl.OpenAudioIn( out string outputDeviceName, diff --git a/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioOutManager.cs b/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioOutManager.cs index 3d129470c..facfbbc03 100644 --- a/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioOutManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioOutManager.cs @@ -5,6 +5,7 @@ using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.Applet; using Ryujinx.Horizon.Sdk.Sf; using Ryujinx.Horizon.Sdk.Sf.Hipc; +using Ryujinx.Memory; using System; namespace Ryujinx.Horizon.Sdk.Audio.Detail @@ -49,7 +50,7 @@ namespace Ryujinx.Horizon.Sdk.Audio.Detail [Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias)] ReadOnlySpan name, [ClientProcessId] ulong pid) { - var clientMemoryManager = HorizonStatic.Syscall.GetMemoryManagerByProcessHandle(processHandle); + IVirtualMemoryManager clientMemoryManager = HorizonStatic.Syscall.GetMemoryManagerByProcessHandle(processHandle); ResultCode rc = _impl.OpenAudioOut( out string outputDeviceName, diff --git a/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRendererManager.cs b/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRendererManager.cs index 7138d27ce..c1c7453a1 100644 --- a/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRendererManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRendererManager.cs @@ -4,6 +4,7 @@ using Ryujinx.Common.Logging; using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.Applet; using Ryujinx.Horizon.Sdk.Sf; +using Ryujinx.Memory; namespace Ryujinx.Horizon.Sdk.Audio.Detail { @@ -30,11 +31,11 @@ namespace Ryujinx.Horizon.Sdk.Audio.Detail AppletResourceUserId appletResourceId, [ClientProcessId] ulong pid) { - var clientMemoryManager = HorizonStatic.Syscall.GetMemoryManagerByProcessHandle(processHandle); + IVirtualMemoryManager clientMemoryManager = HorizonStatic.Syscall.GetMemoryManagerByProcessHandle(processHandle); ulong workBufferAddress = HorizonStatic.Syscall.GetTransferMemoryAddress(workBufferHandle); Result result = new Result((int)_impl.OpenAudioRenderer( - out var renderSystem, + out AudioRenderSystem renderSystem, clientMemoryManager, ref parameter.Configuration, appletResourceId.Id, @@ -96,10 +97,10 @@ namespace Ryujinx.Horizon.Sdk.Audio.Detail AppletResourceUserId appletResourceId, [ClientProcessId] ulong pid) { - var clientMemoryManager = HorizonStatic.Syscall.GetMemoryManagerByProcessHandle(processHandle); + IVirtualMemoryManager clientMemoryManager = HorizonStatic.Syscall.GetMemoryManagerByProcessHandle(processHandle); Result result = new Result((int)_impl.OpenAudioRenderer( - out var renderSystem, + out AudioRenderSystem renderSystem, clientMemoryManager, ref parameter.Configuration, appletResourceId.Id, diff --git a/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs b/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs index a5622d4aa..ef42d777f 100644 --- a/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs +++ b/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Horizon.Sdk.Lbl public LblApi() { - using var smApi = new SmApi(); + using SmApi smApi = new SmApi(); smApi.Initialize(); smApi.GetServiceHandle(out _sessionHandle, ServiceName.Encode(LblName)).AbortOnFailure(); diff --git a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/CompressedArray.cs b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/CompressedArray.cs index fc5cd683d..899ea57f5 100644 --- a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/CompressedArray.cs +++ b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/CompressedArray.cs @@ -35,13 +35,13 @@ namespace Ryujinx.Horizon.Sdk.Ngc.Detail { get { - var ranges = GetBitfieldRanges(); + ReadOnlySpan ranges = GetBitfieldRanges(); int rangeBlockIndex = index / CompressedEntriesPerBlock; if (rangeBlockIndex < ranges.Length) { - var range = ranges[rangeBlockIndex]; + BitfieldRange range = ranges[rangeBlockIndex]; int bitfieldLength = range.BitfieldLength; int bitfieldOffset = (index % CompressedEntriesPerBlock) * bitfieldLength; diff --git a/src/Ryujinx.Horizon/Sdk/OsTypes/OsSystemEvent.cs b/src/Ryujinx.Horizon/Sdk/OsTypes/OsSystemEvent.cs index 8fac94abe..701db76e0 100644 --- a/src/Ryujinx.Horizon/Sdk/OsTypes/OsSystemEvent.cs +++ b/src/Ryujinx.Horizon/Sdk/OsTypes/OsSystemEvent.cs @@ -31,7 +31,7 @@ namespace Ryujinx.Horizon.Sdk.OsTypes public static void DestroySystemEvent(ref SystemEventType sysEvent) { - var oldState = sysEvent.State; + SystemEventType.InitializationState oldState = sysEvent.State; sysEvent.State = SystemEventType.InitializationState.NotInitialized; switch (oldState) diff --git a/src/Ryujinx.Horizon/Sdk/ServiceUtil.cs b/src/Ryujinx.Horizon/Sdk/ServiceUtil.cs index 5527c1e35..b5bf853b3 100644 --- a/src/Ryujinx.Horizon/Sdk/ServiceUtil.cs +++ b/src/Ryujinx.Horizon/Sdk/ServiceUtil.cs @@ -1,6 +1,7 @@ using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.Sf.Cmif; using Ryujinx.Horizon.Sdk.Sf.Hipc; +using Ryujinx.Memory; using System; namespace Ryujinx.Horizon.Sdk @@ -12,7 +13,7 @@ namespace Ryujinx.Horizon.Sdk ulong tlsAddress = HorizonStatic.ThreadContext.TlsAddress; int tlsSize = Api.TlsMessageBufferSize; - using (var tlsRegion = HorizonStatic.AddressSpace.GetWritableRegion(tlsAddress, tlsSize)) + using (WritableRegion tlsRegion = HorizonStatic.AddressSpace.GetWritableRegion(tlsAddress, tlsSize)) { CmifRequest request = CmifMessage.CreateRequest(tlsRegion.Memory.Span, new CmifRequestFormat { @@ -48,7 +49,7 @@ namespace Ryujinx.Horizon.Sdk ulong tlsAddress = HorizonStatic.ThreadContext.TlsAddress; int tlsSize = Api.TlsMessageBufferSize; - using (var tlsRegion = HorizonStatic.AddressSpace.GetWritableRegion(tlsAddress, tlsSize)) + using (WritableRegion tlsRegion = HorizonStatic.AddressSpace.GetWritableRegion(tlsAddress, tlsSize)) { CmifRequestFormat format = new() { diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectDispatchTable.cs b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectDispatchTable.cs index 58957a701..1a14164c3 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectDispatchTable.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectDispatchTable.cs @@ -19,7 +19,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif return SfResult.InvalidHeaderSize; } - var inHeader = MemoryMarshal.Cast(inRawData)[0]; + CmifDomainInHeader inHeader = MemoryMarshal.Cast(inRawData)[0]; ReadOnlySpan inDomainRawData = inRawData[Unsafe.SizeOf()..]; @@ -28,7 +28,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif switch (inHeader.Type) { case CmifDomainRequestType.SendMessage: - var targetObject = domain.GetObject(targetObjectId); + ServiceObjectHolder targetObject = domain.GetObject(targetObjectId); if (targetObject == null) { return SfResult.TargetNotFound; @@ -48,7 +48,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif int[] inObjectIds = new int[inHeader.ObjectsCount]; - var domainProcessor = new DomainServiceObjectProcessor(domain, inObjectIds); + DomainServiceObjectProcessor domainProcessor = new DomainServiceObjectProcessor(domain, inObjectIds); if (context.Processor == null) { diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectProcessor.cs b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectProcessor.cs index f677e0598..f99584610 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectProcessor.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectProcessor.cs @@ -44,7 +44,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif public override ServerMessageRuntimeMetadata GetRuntimeMetadata() { - var runtimeMetadata = _implProcessor.GetRuntimeMetadata(); + ServerMessageRuntimeMetadata runtimeMetadata = _implProcessor.GetRuntimeMetadata(); return new ServerMessageRuntimeMetadata( (ushort)(runtimeMetadata.InDataSize + runtimeMetadata.InObjectsCount * sizeof(int)), @@ -84,7 +84,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif public override HipcMessageData PrepareForReply(scoped ref ServiceDispatchContext context, out Span outRawData, ServerMessageRuntimeMetadata runtimeMetadata) { - var response = _implProcessor.PrepareForReply(ref context, out outRawData, runtimeMetadata); + HipcMessageData response = _implProcessor.PrepareForReply(ref context, out outRawData, runtimeMetadata); int outHeaderSize = Unsafe.SizeOf(); int implOutDataTotalSize = ImplOutDataTotalSize; diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs index 13f9fb7a9..ae909c9b7 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs @@ -45,7 +45,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif return null; } - var entry = _freeList.First.Value; + Entry entry = _freeList.First.Value; _freeList.RemoveFirst(); return entry; } @@ -92,7 +92,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif public override ServiceObjectHolder GetObject(int id) { - var entry = _manager._entryManager.GetEntry(id); + EntryManager.Entry entry = _manager._entryManager.GetEntry(id); if (entry == null) { return null; @@ -116,7 +116,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif public override void RegisterObject(int id, ServiceObjectHolder obj) { - var entry = _manager._entryManager.GetEntry(id); + EntryManager.Entry entry = _manager._entryManager.GetEntry(id); DebugUtil.Assert(entry != null); lock (_manager._entryOwnerLock) @@ -133,7 +133,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif { for (int i = 0; i < outIds.Length; i++) { - var entry = _manager._entryManager.AllocateEntry(); + EntryManager.Entry entry = _manager._entryManager.AllocateEntry(); if (entry == null) { return SfResult.OutOfDomainEntries; @@ -149,7 +149,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif public override ServiceObjectHolder UnregisterObject(int id) { - var entry = _manager._entryManager.GetEntry(id); + EntryManager.Entry entry = _manager._entryManager.GetEntry(id); if (entry == null) { return null; @@ -186,7 +186,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif { for (int i = 0; i < ids.Length; i++) { - var entry = _manager._entryManager.GetEntry(ids[i]); + EntryManager.Entry entry = _manager._entryManager.GetEntry(ids[i]); DebugUtil.Assert(entry != null); DebugUtil.Assert(entry.Owner == null); @@ -197,7 +197,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif public void Dispose() { - foreach (var entry in _entries) + foreach (EntryManager.Entry entry in _entries) { if (entry.Obj.ServiceObject is IDisposable disposableObj) { @@ -230,7 +230,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif return null; } - var domain = new Domain(this); + Domain domain = new Domain(this); _domains.Add(domain); return domain; } diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServiceDispatchTableBase.cs b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServiceDispatchTableBase.cs index 2625a4c3e..f2292feff 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServiceDispatchTableBase.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServiceDispatchTableBase.cs @@ -35,9 +35,9 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif ReadOnlySpan inMessageRawData = inRawData[Unsafe.SizeOf()..]; uint commandId = inHeader.CommandId; - var outHeader = Span.Empty; + Span outHeader = Span.Empty; - if (!entries.TryGetValue((int)commandId, out var commandHandler)) + if (!entries.TryGetValue((int)commandId, out CommandHandler commandHandler)) { if (HorizonStatic.Options.IgnoreMissingServices) { @@ -87,7 +87,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif private static void PrepareForStubReply(scoped ref ServiceDispatchContext context, out Span outRawData) { - var response = HipcMessage.WriteResponse(context.OutMessageBuffer, 0, 0x20 / sizeof(uint), 0, 0); + HipcMessageData response = HipcMessage.WriteResponse(context.OutMessageBuffer, 0, 0x20 / sizeof(uint), 0, 0); outRawData = MemoryMarshal.Cast(response.DataWords); } } diff --git a/src/Ryujinx.Horizon/Sdk/Sf/CommandHandler.cs b/src/Ryujinx.Horizon/Sdk/Sf/CommandHandler.cs index d0efe0d4b..3dcf4a263 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/CommandHandler.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/CommandHandler.cs @@ -37,7 +37,7 @@ namespace Ryujinx.Horizon.Sdk.Sf context.Processor.SetImplementationProcessor(_processor); } - var runtimeMetadata = context.Processor.GetRuntimeMetadata(); + ServerMessageRuntimeMetadata runtimeMetadata = context.Processor.GetRuntimeMetadata(); Result result = context.Processor.PrepareForProcess(ref context, runtimeMetadata); return result.IsFailure ? result : _invoke(ref context, _processor, runtimeMetadata, inRawData, ref outHeader); diff --git a/src/Ryujinx.Horizon/Sdk/Sf/CommandSerialization.cs b/src/Ryujinx.Horizon/Sdk/Sf/CommandSerialization.cs index 7f5284648..53bbe56f9 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/CommandSerialization.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/CommandSerialization.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Horizon.Sdk.Sf public static ref T GetRef(PointerAndSize bufferRange) where T : unmanaged { - var writableRegion = GetWritableRegion(bufferRange); + WritableRegion writableRegion = GetWritableRegion(bufferRange); return ref MemoryMarshal.Cast(writableRegion.Memory.Span)[0]; } diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/Api.cs b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/Api.cs index 5f3f67061..4c8dacb8f 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/Api.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/Api.cs @@ -35,7 +35,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc handles[0] = sessionHandle; - var tlsSpan = HorizonStatic.AddressSpace.GetSpan(HorizonStatic.ThreadContext.TlsAddress, TlsMessageBufferSize); + ReadOnlySpan tlsSpan = HorizonStatic.AddressSpace.GetSpan(HorizonStatic.ThreadContext.TlsAddress, TlsMessageBufferSize); if (messageBuffer == tlsSpan) { @@ -56,7 +56,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc private static Result ReplyImpl(int sessionHandle, ReadOnlySpan messageBuffer) { - var tlsSpan = HorizonStatic.AddressSpace.GetSpan(HorizonStatic.ThreadContext.TlsAddress, TlsMessageBufferSize); + ReadOnlySpan tlsSpan = HorizonStatic.AddressSpace.GetSpan(HorizonStatic.ThreadContext.TlsAddress, TlsMessageBufferSize); if (messageBuffer == tlsSpan) { diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/HipcManager.cs b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/HipcManager.cs index 4f0bbb014..953f9e755 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/HipcManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/HipcManager.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc { objectId = 0; - var domain = _manager.Domain.AllocateDomainServiceObject(); + DomainServiceObject domain = _manager.Domain.AllocateDomainServiceObject(); if (domain == null) { return HipcResult.OutOfDomains; @@ -66,7 +66,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc return HipcResult.TargetNotDomain; } - var obj = domain.GetObject(objectId); + ServiceObjectHolder obj = domain.GetObject(objectId); if (obj == null) { return HipcResult.DomainObjectNotFound; @@ -100,7 +100,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc { clientHandle = 0; - var clone = _session.ServiceObjectHolder.Clone(); + ServiceObjectHolder clone = _session.ServiceObjectHolder.Clone(); if (clone == null) { return HipcResult.DomainObjectNotFound; diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs index 31ca264e3..669dc5ee3 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs @@ -2,6 +2,7 @@ using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.OsTypes; using Ryujinx.Horizon.Sdk.Sf.Cmif; using Ryujinx.Horizon.Sdk.Sm; +using Ryujinx.Memory; using System; using System.Linq; using System.Threading; @@ -257,14 +258,14 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc ServerSession session = (ServerSession)holder; - using var tlsMessage = HorizonStatic.AddressSpace.GetWritableRegion(HorizonStatic.ThreadContext.TlsAddress, Api.TlsMessageBufferSize); + using WritableRegion tlsMessage = HorizonStatic.AddressSpace.GetWritableRegion(HorizonStatic.ThreadContext.TlsAddress, Api.TlsMessageBufferSize); Result result; if (_canDeferInvokeRequest) { // If the request is deferred, we save the message on a temporary buffer to process it later. - using var savedMessage = HorizonStatic.AddressSpace.GetWritableRegion(session.SavedMessage.Address, (int)session.SavedMessage.Size); + using WritableRegion savedMessage = HorizonStatic.AddressSpace.GetWritableRegion(session.SavedMessage.Address, (int)session.SavedMessage.Size); DebugUtil.Assert(tlsMessage.Memory.Length == savedMessage.Memory.Length); diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerSessionManager.cs b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerSessionManager.cs index bd5a48444..f902768cc 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerSessionManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerSessionManager.cs @@ -186,7 +186,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc { CommandType commandType = GetCmifCommandType(inMessage); - using var _ = new ScopedInlineContextChange(GetInlineContext(commandType, inMessage)); + using ScopedInlineContextChange _ = new ScopedInlineContextChange(GetInlineContext(commandType, inMessage)); return commandType switch { @@ -282,7 +282,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc return HipcResult.InvalidRequestSize; } - var dispatchCtx = new ServiceDispatchContext + ServiceDispatchContext dispatchCtx = new ServiceDispatchContext { ServiceObject = objectHolder.ServiceObject, Manager = this, @@ -312,7 +312,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc result = Api.Reply(session.SessionHandle, outMessage); - ref var handlesToClose = ref dispatchCtx.HandlesToClose; + ref HandlesToClose handlesToClose = ref dispatchCtx.HandlesToClose; for (int i = 0; i < handlesToClose.Count; i++) { diff --git a/src/Ryujinx.Horizon/Sdk/Sf/HipcCommandProcessor.cs b/src/Ryujinx.Horizon/Sdk/Sf/HipcCommandProcessor.cs index dc34f791a..b553115eb 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/HipcCommandProcessor.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/HipcCommandProcessor.cs @@ -46,7 +46,7 @@ namespace Ryujinx.Horizon.Sdk.Sf switch (argInfo.Type) { case CommandArgType.Buffer: - var flags = argInfo.BufferFlags; + HipcBufferFlags flags = argInfo.BufferFlags; if (flags.HasFlag(HipcBufferFlags.In)) { @@ -146,7 +146,7 @@ namespace Ryujinx.Horizon.Sdk.Sf continue; } - var flags = _args[i].BufferFlags; + HipcBufferFlags flags = _args[i].BufferFlags; bool isMapAlias; if (flags.HasFlag(HipcBufferFlags.MapAlias)) @@ -159,7 +159,7 @@ namespace Ryujinx.Horizon.Sdk.Sf } else /* if (flags.HasFlag(HipcBufferFlags.HipcAutoSelect)) */ { - var descriptor = flags.HasFlag(HipcBufferFlags.In) + HipcBufferDescriptor descriptor = flags.HasFlag(HipcBufferFlags.In) ? context.Request.Data.SendBuffers[sendMapAliasIndex] : context.Request.Data.ReceiveBuffers[recvMapAliasIndex]; @@ -170,7 +170,7 @@ namespace Ryujinx.Horizon.Sdk.Sf if (isMapAlias) { - var descriptor = flags.HasFlag(HipcBufferFlags.In) + HipcBufferDescriptor descriptor = flags.HasFlag(HipcBufferFlags.In) ? context.Request.Data.SendBuffers[sendMapAliasIndex++] : context.Request.Data.ReceiveBuffers[recvMapAliasIndex++]; @@ -185,7 +185,7 @@ namespace Ryujinx.Horizon.Sdk.Sf { if (flags.HasFlag(HipcBufferFlags.In)) { - var descriptor = context.Request.Data.SendStatics[sendPointerIndex++]; + HipcStaticDescriptor descriptor = context.Request.Data.SendStatics[sendPointerIndex++]; ulong address = descriptor.Address; ulong size = descriptor.Size; @@ -206,8 +206,8 @@ namespace Ryujinx.Horizon.Sdk.Sf } else { - var data = MemoryMarshal.Cast(context.Request.Data.DataWordsPadded); - var recvPointerSizes = MemoryMarshal.Cast(data[runtimeMetadata.UnfixedOutPointerSizeOffset..]); + Span data = MemoryMarshal.Cast(context.Request.Data.DataWordsPadded); + Span recvPointerSizes = MemoryMarshal.Cast(data[runtimeMetadata.UnfixedOutPointerSizeOffset..]); size = recvPointerSizes[unfixedRecvPointerIndex++]; } @@ -257,13 +257,13 @@ namespace Ryujinx.Horizon.Sdk.Sf continue; } - var flags = _args[i].BufferFlags; + HipcBufferFlags flags = _args[i].BufferFlags; if (!flags.HasFlag(HipcBufferFlags.Out)) { continue; } - var buffer = _bufferRanges[i]; + PointerAndSize buffer = _bufferRanges[i]; if (flags.HasFlag(HipcBufferFlags.Pointer)) { @@ -303,7 +303,7 @@ namespace Ryujinx.Horizon.Sdk.Sf public override Result PrepareForProcess(ref ServiceDispatchContext context, ServerMessageRuntimeMetadata runtimeMetadata) { - ref var meta = ref context.Request.Meta; + ref HipcMetadata meta = ref context.Request.Meta; bool requestValid = true; requestValid &= meta.SendPid == _hasInProcessIdHolder; requestValid &= meta.SendStaticsCount == _inPointerBuffersCount; @@ -346,7 +346,7 @@ namespace Ryujinx.Horizon.Sdk.Sf } int index = inObjectIndex++; - var inObject = inObjects[index]; + ServiceObjectHolder inObject = inObjects[index]; objects[index] = inObject?.ServiceObject; } @@ -362,7 +362,7 @@ namespace Ryujinx.Horizon.Sdk.Sf public override HipcMessageData PrepareForReply(scoped ref ServiceDispatchContext context, out Span outRawData, ServerMessageRuntimeMetadata runtimeMetadata) { int rawDataSize = OutRawDataSize + runtimeMetadata.OutHeadersSize; - var response = HipcMessage.WriteResponse( + HipcMessageData response = HipcMessage.WriteResponse( context.OutMessageBuffer, _outPointerBuffersCount, (BitUtils.AlignUp(rawDataSize, 4) + 0x10) / sizeof(uint), @@ -376,7 +376,7 @@ namespace Ryujinx.Horizon.Sdk.Sf public override void PrepareForErrorReply(scoped ref ServiceDispatchContext context, out Span outRawData, ServerMessageRuntimeMetadata runtimeMetadata) { int rawDataSize = runtimeMetadata.OutHeadersSize; - var response = HipcMessage.WriteResponse( + HipcMessageData response = HipcMessage.WriteResponse( context.OutMessageBuffer, 0, (BitUtils.AlignUp(rawDataSize, 4) + 0x10) / sizeof(uint), diff --git a/src/Ryujinx.Horizon/Sm/Impl/ServiceManager.cs b/src/Ryujinx.Horizon/Sm/Impl/ServiceManager.cs index 177cc0d3d..c13b85c4c 100644 --- a/src/Ryujinx.Horizon/Sm/Impl/ServiceManager.cs +++ b/src/Ryujinx.Horizon/Sm/Impl/ServiceManager.cs @@ -120,7 +120,7 @@ namespace Ryujinx.Horizon.Sm.Impl return SmResult.NotRegistered; } - ref var serviceInfo = ref _services[serviceIndex]; + ref ServiceInfo serviceInfo = ref _services[serviceIndex]; if (serviceInfo.OwnerProcessId != processId) { return SmResult.NotAllowed; -- 2.47.1 From 93539e7d45caae8dae3c86a756bd77b2e526200d Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:14:40 -0600 Subject: [PATCH 436/722] misc: chore: Use explicit types in GAL --- .../Multithreading/ThreadedPipeline.cs | 2 +- .../Multithreading/ThreadedRenderer.cs | 14 +++++++------- src/Ryujinx.Graphics.GAL/ResourceLayout.cs | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedPipeline.cs b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedPipeline.cs index deec36648..c999ad789 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedPipeline.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedPipeline.cs @@ -359,7 +359,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading public bool TryHostConditionalRendering(ICounterEvent value, ulong compare, bool isEqual) { - var evt = value as ThreadedCounterEvent; + ThreadedCounterEvent evt = value as ThreadedCounterEvent; if (evt != null) { if (compare == 0 && evt.Type == CounterType.SamplesPassed && evt.ClearCounter) diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs index 6375d290c..676cbe8fc 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs @@ -294,7 +294,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading public IImageArray CreateImageArray(int size, bool isBuffer) { - var imageArray = new ThreadedImageArray(this); + ThreadedImageArray imageArray = new(this); New().Set(Ref(imageArray), size, isBuffer); QueueCommand(); @@ -303,7 +303,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading public IProgram CreateProgram(ShaderSource[] shaders, ShaderInfo info) { - var program = new ThreadedProgram(this); + ThreadedProgram program = new(this); SourceProgramRequest request = new(program, shaders, info); @@ -319,7 +319,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading public ISampler CreateSampler(SamplerCreateInfo info) { - var sampler = new ThreadedSampler(this); + ThreadedSampler sampler = new(this); New().Set(Ref(sampler), info); QueueCommand(); @@ -337,7 +337,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading { if (IsGpuThread()) { - var texture = new ThreadedTexture(this, info); + ThreadedTexture texture = new ThreadedTexture(this, info); New().Set(Ref(texture), info); QueueCommand(); @@ -345,7 +345,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading } else { - var texture = new ThreadedTexture(this, info) + ThreadedTexture texture = new ThreadedTexture(this, info) { Base = _baseRenderer.CreateTexture(info), }; @@ -355,7 +355,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading } public ITextureArray CreateTextureArray(int size, bool isBuffer) { - var textureArray = new ThreadedTextureArray(this); + ThreadedTextureArray textureArray = new ThreadedTextureArray(this); New().Set(Ref(textureArray), size, isBuffer); QueueCommand(); @@ -414,7 +414,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading public IProgram LoadProgramBinary(byte[] programBinary, bool hasFragmentShader, ShaderInfo info) { - var program = new ThreadedProgram(this); + ThreadedProgram program = new ThreadedProgram(this); BinaryProgramRequest request = new(program, programBinary, hasFragmentShader, info); Programs.Add(request); diff --git a/src/Ryujinx.Graphics.GAL/ResourceLayout.cs b/src/Ryujinx.Graphics.GAL/ResourceLayout.cs index b7464ee12..c91eed3d2 100644 --- a/src/Ryujinx.Graphics.GAL/ResourceLayout.cs +++ b/src/Ryujinx.Graphics.GAL/ResourceLayout.cs @@ -126,7 +126,7 @@ namespace Ryujinx.Graphics.GAL if (Descriptors != null) { - foreach (var descriptor in Descriptors) + foreach (ResourceDescriptor descriptor in Descriptors) { hasher.Add(descriptor); } -- 2.47.1 From 250acab7a7c5562451eba80b1c1a04b6883e184c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 14:15:47 -0600 Subject: [PATCH 437/722] misc: chore: Use explicit types in Tests projects --- src/Ryujinx.Common/Configuration/DirtyHack.cs | 3 +- .../SequenceReaderExtensionsTests.cs | 42 +++++++++--------- src/Ryujinx.Tests/Cpu/CpuTest32.cs | 2 +- src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs | 4 +- src/Ryujinx.Tests/Cpu/CpuTestSimdMemory32.cs | 18 ++++---- src/Ryujinx.Tests/Cpu/CpuTestSimdMov32.cs | 3 +- src/Ryujinx.Tests/Cpu/EnvironmentTests.cs | 2 +- src/Ryujinx.Tests/Memory/PartialUnmaps.cs | 43 ++++++++++--------- 8 files changed, 60 insertions(+), 57 deletions(-) diff --git a/src/Ryujinx.Common/Configuration/DirtyHack.cs b/src/Ryujinx.Common/Configuration/DirtyHack.cs index 6564f8567..3959c0a99 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHack.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHack.cs @@ -24,7 +24,8 @@ namespace Ryujinx.Common.Configuration public static EnabledDirtyHack Unpack(ulong packedHack) { uint[] unpackedFields = packedHack.UnpackBitFields(PackedFormat); - if (unpackedFields is not [var hack, var value]) + // ReSharper disable once PatternAlwaysMatches + if (unpackedFields is not [uint hack, uint value]) throw new Exception("The unpack operation on the integer resulted in an invalid unpacked result."); return new EnabledDirtyHack((DirtyHack)hack, (int)value); diff --git a/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs b/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs index c0127530a..de81ec303 100644 --- a/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs +++ b/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs @@ -23,9 +23,9 @@ namespace Ryujinx.Tests.Common.Extensions ReadOnlySequence sequence = CreateSegmentedByteSequence(originalStructs, maxSegmentSize ?? Unsafe.SizeOf()); - var sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new SequenceReader(sequence); - foreach (var original in originalStructs) + foreach (MyUnmanagedStruct original in originalStructs) { // Act ref readonly MyUnmanagedStruct read = ref sequenceReader.GetRefOrRefToCopy(out _); @@ -43,12 +43,12 @@ namespace Ryujinx.Tests.Common.Extensions ReadOnlySequence sequence = CreateSegmentedByteSequence(originalStructs, 3); - var sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new SequenceReader(sequence); - foreach (var original in originalStructs) + foreach (MyUnmanagedStruct original in originalStructs) { // Act - ref readonly MyUnmanagedStruct read = ref sequenceReader.GetRefOrRefToCopy(out var copy); + ref readonly MyUnmanagedStruct read = ref sequenceReader.GetRefOrRefToCopy(out MyUnmanagedStruct copy); // Assert MyUnmanagedStruct.Assert(Assert.AreEqual, original, read); @@ -64,12 +64,12 @@ namespace Ryujinx.Tests.Common.Extensions ReadOnlySequence sequence = CreateSegmentedByteSequence(originalStructs, int.MaxValue); - var sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new SequenceReader(sequence); - foreach (var original in originalStructs) + foreach (MyUnmanagedStruct original in originalStructs) { // Act - ref readonly MyUnmanagedStruct read = ref sequenceReader.GetRefOrRefToCopy(out var copy); + ref readonly MyUnmanagedStruct read = ref sequenceReader.GetRefOrRefToCopy(out MyUnmanagedStruct copy); // Assert MyUnmanagedStruct.Assert(Assert.AreEqual, original, read); @@ -88,7 +88,7 @@ namespace Ryujinx.Tests.Common.Extensions // Act/Assert Assert.Throws(() => { - var sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new SequenceReader(sequence); sequenceReader.Advance(1); @@ -106,7 +106,7 @@ namespace Ryujinx.Tests.Common.Extensions BinaryPrimitives.WriteInt32LittleEndian(buffer.AsSpan(), TestValue); - var sequenceReader = new SequenceReader(new ReadOnlySequence(buffer)); + SequenceReader sequenceReader = new SequenceReader(new ReadOnlySequence(buffer)); // Act sequenceReader.ReadLittleEndian(out int roundTrippedValue); @@ -125,7 +125,7 @@ namespace Ryujinx.Tests.Common.Extensions BinaryPrimitives.WriteInt32BigEndian(buffer.AsSpan(), TestValue); - var sequenceReader = new SequenceReader(new ReadOnlySequence(buffer)); + SequenceReader sequenceReader = new SequenceReader(new ReadOnlySequence(buffer)); // Act sequenceReader.ReadLittleEndian(out int roundTrippedValue); @@ -147,7 +147,7 @@ namespace Ryujinx.Tests.Common.Extensions // Act/Assert Assert.Throws(() => { - var sequenceReader = new SequenceReader(new ReadOnlySequence(buffer)); + SequenceReader sequenceReader = new SequenceReader(new ReadOnlySequence(buffer)); sequenceReader.Advance(1); sequenceReader.ReadLittleEndian(out int roundTrippedValue); @@ -173,7 +173,7 @@ namespace Ryujinx.Tests.Common.Extensions // Act/Assert Assert.Throws(() => { - var sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new SequenceReader(sequence); sequenceReader.Advance(1); @@ -200,7 +200,7 @@ namespace Ryujinx.Tests.Common.Extensions Assert.Throws(() => { - var sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new SequenceReader(sequence); sequenceReader.SetConsumed(MyUnmanagedStruct.SizeOf * StructCount + 1); }); @@ -213,9 +213,9 @@ namespace Ryujinx.Tests.Common.Extensions ReadOnlySequence sequence = CreateSegmentedByteSequence(originalStructs, maxSegmentLength); - var sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new SequenceReader(sequence); - foreach (var original in originalStructs) + foreach (MyUnmanagedStruct original in originalStructs) { // Act sequenceReader.ReadUnmanaged(out MyUnmanagedStruct read); @@ -232,7 +232,7 @@ namespace Ryujinx.Tests.Common.Extensions ReadOnlySequence sequence = CreateSegmentedByteSequence(originalStructs, maxSegmentLength); - var sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new SequenceReader(sequence); static void SetConsumedAndAssert(scoped ref SequenceReader sequenceReader, long consumed) { @@ -283,7 +283,7 @@ namespace Ryujinx.Tests.Common.Extensions const int BaseInt32Value = 0x1234abcd; const short BaseInt16Value = 0x5678; - var result = new MyUnmanagedStruct + MyUnmanagedStruct result = new MyUnmanagedStruct { BehaviourSize = BaseInt32Value ^ rng.Next(), MemoryPoolsSize = BaseInt32Value ^ rng.Next(), @@ -320,7 +320,7 @@ namespace Ryujinx.Tests.Common.Extensions private static IEnumerable EnumerateNewUnmanagedStructs() { - var rng = new Random(0); + Random rng = new Random(0); while (true) { @@ -331,7 +331,7 @@ namespace Ryujinx.Tests.Common.Extensions private static ReadOnlySequence CreateSegmentedByteSequence(T[] array, int maxSegmentLength) where T : unmanaged { byte[] arrayBytes = MemoryMarshal.AsBytes(array.AsSpan()).ToArray(); - var memory = new Memory(arrayBytes); + Memory memory = new Memory(arrayBytes); int index = 0; BytesReadOnlySequenceSegment first = null, last = null; @@ -339,7 +339,7 @@ namespace Ryujinx.Tests.Common.Extensions while (index < memory.Length) { int nextSegmentLength = Math.Min(maxSegmentLength, memory.Length - index); - var nextSegment = memory.Slice(index, nextSegmentLength); + Memory nextSegment = memory.Slice(index, nextSegmentLength); if (first == null) { diff --git a/src/Ryujinx.Tests/Cpu/CpuTest32.cs b/src/Ryujinx.Tests/Cpu/CpuTest32.cs index 6a690834f..81ed9bcc9 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTest32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTest32.cs @@ -296,7 +296,7 @@ namespace Ryujinx.Tests.Cpu FinalRegs = test.FinalRegs, }); - foreach (var (address, value) in test.MemoryDelta) + foreach ((ulong address, ushort value) in test.MemoryDelta) { testMem[address - DataBaseAddress + 0] = (byte)(value >> 0); testMem[address - DataBaseAddress + 1] = (byte)(value >> 8); diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs index ba201a480..8768d6bd6 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs @@ -465,7 +465,7 @@ namespace Ryujinx.Tests.Cpu opcode |= (fixImm & 0x3f) << 16; - var v0 = new V128((uint)s0, (uint)s1, (uint)s2, (uint)s3); + V128 v0 = new V128((uint)s0, (uint)s1, (uint)s2, (uint)s3); SingleOpcode(opcode, v0: v0); @@ -505,7 +505,7 @@ namespace Ryujinx.Tests.Cpu opcode |= (fixImm & 0x3f) << 16; - var v0 = new V128(s0, s1, s2, s3); + V128 v0 = new V128(s0, s1, s2, s3); SingleOpcode(opcode, v0: v0); diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdMemory32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdMemory32.cs index d59e963b5..441b09c29 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdMemory32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdMemory32.cs @@ -44,7 +44,7 @@ namespace Ryujinx.Tests.Cpu [Range(0u, 3u)] uint n, [Values(0x0u)] uint offset) { - var data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); + byte[] data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); SetWorkingMemory(0, data); uint opcode = 0xf4a00000u; // VLD1.8 {D0[0]}, [R0], R0 @@ -74,7 +74,7 @@ namespace Ryujinx.Tests.Cpu [Values] bool t, [Values(0x0u)] uint offset) { - var data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); + byte[] data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); SetWorkingMemory(0, data); uint opcode = 0xf4a00c00u; // VLD1.8 {D0[0]}, [R0], R0 @@ -103,7 +103,7 @@ namespace Ryujinx.Tests.Cpu [Range(0u, 10u)] uint mode, [Values(0x0u)] uint offset) { - var data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); + byte[] data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); SetWorkingMemory(0, data); uint opcode = 0xf4200000u; // VLD4.8 {D0, D1, D2, D3}, [R0], R0 @@ -133,7 +133,7 @@ namespace Ryujinx.Tests.Cpu [Range(0u, 3u)] uint n, [Values(0x0u)] uint offset) { - var data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); + byte[] data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); SetWorkingMemory(0, data); (V128 vec1, V128 vec2, V128 vec3, V128 vec4) = GenerateTestVectors(); @@ -164,7 +164,7 @@ namespace Ryujinx.Tests.Cpu [Range(0u, 10u)] uint mode, [Values(0x0u)] uint offset) { - var data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); + byte[] data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); SetWorkingMemory(0, data); (V128 vec1, V128 vec2, V128 vec3, V128 vec4) = GenerateTestVectors(); @@ -194,7 +194,7 @@ namespace Ryujinx.Tests.Cpu [Values(0x1u, 0x32u)] uint regs, [Values] bool single) { - var data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); + byte[] data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); SetWorkingMemory(0, data); uint opcode = 0xec100a00u; // VST4.8 {D0, D1, D2, D3}, [R0], R0 @@ -246,7 +246,7 @@ namespace Ryujinx.Tests.Cpu [Values(0x0u)] uint imm, [Values] bool sub) { - var data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); + byte[] data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); SetWorkingMemory(0, data); uint opcode = 0xed900a00u; // VLDR.32 S0, [R0, #0] @@ -281,7 +281,7 @@ namespace Ryujinx.Tests.Cpu [Values(0x0u)] uint imm, [Values] bool sub) { - var data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); + byte[] data = GenerateVectorSequence((int)MemoryBlock.GetPageSize()); SetWorkingMemory(0, data); uint opcode = 0xed800a00u; // VSTR.32 S0, [R0, #0] @@ -331,7 +331,7 @@ namespace Ryujinx.Tests.Cpu data[i] = i + (i / 9f); } - var result = new byte[length]; + byte[] result = new byte[length]; Buffer.BlockCopy(data, 0, result, 0, result.Length); return result; } diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdMov32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdMov32.cs index 85f77fff1..5cc993e5e 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdMov32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdMov32.cs @@ -2,6 +2,7 @@ using ARMeilleure.State; using NUnit.Framework; +using NUnit.Framework.Internal; namespace Ryujinx.Tests.Cpu { @@ -467,7 +468,7 @@ namespace Ryujinx.Tests.Cpu opcode |= (vn & 0xf) << 16; opcode |= (length & 0x3) << 8; - var rnd = TestContext.CurrentContext.Random; + Randomizer rnd = TestContext.CurrentContext.Random; V128 v2 = new(TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong()); V128 v3 = new(TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong()); V128 v4 = new(TestContext.CurrentContext.Random.NextULong(), TestContext.CurrentContext.Random.NextULong()); diff --git a/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs b/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs index 43c84c193..da4997e26 100644 --- a/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs +++ b/src/Ryujinx.Tests/Cpu/EnvironmentTests.cs @@ -53,7 +53,7 @@ namespace Ryujinx.Tests.Cpu bool methodCalled = false; bool isFz = false; - var method = TranslatorTestMethods.GenerateFpFlagsPInvokeTest(); + TranslatorTestMethods.FpFlagsPInvokeTest method = TranslatorTestMethods.GenerateFpFlagsPInvokeTest(); // This method sets flush-to-zero and then calls the managed method. // Before and after setting the flags, it ensures subnormal addition works as expected. diff --git a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs index 3e5b47423..d120a39e1 100644 --- a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs +++ b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs @@ -3,6 +3,7 @@ using ARMeilleure.Memory; using ARMeilleure.Signal; using ARMeilleure.Translation; using NUnit.Framework; +using Ryujinx.Common.Memory; using Ryujinx.Common.Memory.PartialUnmaps; using Ryujinx.Cpu; using Ryujinx.Cpu.Jit; @@ -26,11 +27,11 @@ namespace Ryujinx.Tests.Memory { MemoryAllocationFlags asFlags = MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible; - var addressSpace = new MemoryBlock(asSize, asFlags); - var addressSpaceMirror = new MemoryBlock(asSize, asFlags); + MemoryBlock addressSpace = new MemoryBlock(asSize, asFlags); + MemoryBlock addressSpaceMirror = new MemoryBlock(asSize, asFlags); - var tracking = new MemoryTracking(new MockVirtualMemoryManager(asSize, 0x1000), 0x1000); - var exceptionHandler = new MemoryEhMeilleure(addressSpace, addressSpaceMirror, tracking); + MemoryTracking tracking = new MemoryTracking(new MockVirtualMemoryManager(asSize, 0x1000), 0x1000); + MemoryEhMeilleure exceptionHandler = new MemoryEhMeilleure(addressSpace, addressSpaceMirror, tracking); return (addressSpace, addressSpaceMirror, exceptionHandler); } @@ -39,7 +40,7 @@ namespace Ryujinx.Tests.Memory { int count = 0; - ref var ids = ref state.LocalCounts.ThreadIds; + ref Array20 ids = ref state.LocalCounts.ThreadIds; for (int i = 0; i < ids.Length; i++) { @@ -71,13 +72,13 @@ namespace Ryujinx.Tests.Memory ulong vaSize = 0x100000; // The first 0x100000 is mapped to start. It is replaced from the center with the 0x200000 mapping. - var backing = new MemoryBlock(vaSize * 2, MemoryAllocationFlags.Mirrorable); + MemoryBlock backing = new MemoryBlock(vaSize * 2, MemoryAllocationFlags.Mirrorable); (MemoryBlock unusedMainMemory, MemoryBlock memory, MemoryEhMeilleure exceptionHandler) = GetVirtual(vaSize * 2); EnsureTranslator(); - ref var state = ref PartialUnmapState.GetRef(); + ref PartialUnmapState state = ref PartialUnmapState.GetRef(); Thread testThread = null; bool shouldAccess = true; @@ -216,17 +217,17 @@ namespace Ryujinx.Tests.Memory ulong vaSize = 0x100000; // The first 0x100000 is mapped to start. It is replaced from the center with the 0x200000 mapping. - var backing = new MemoryBlock(vaSize * 2, MemoryAllocationFlags.Mirrorable); + MemoryBlock backing = new MemoryBlock(vaSize * 2, MemoryAllocationFlags.Mirrorable); (MemoryBlock mainMemory, MemoryBlock unusedMirror, MemoryEhMeilleure exceptionHandler) = GetVirtual(vaSize * 2); EnsureTranslator(); - ref var state = ref PartialUnmapState.GetRef(); + ref PartialUnmapState state = ref PartialUnmapState.GetRef(); // Create some state to be used for managing the native writing loop. int stateSize = Unsafe.SizeOf(); - var statePtr = Marshal.AllocHGlobal(stateSize); + IntPtr statePtr = Marshal.AllocHGlobal(stateSize); Unsafe.InitBlockUnaligned((void*)statePtr, 0, (uint)stateSize); ref NativeWriteLoopState writeLoopState = ref Unsafe.AsRef((void*)statePtr); @@ -241,7 +242,7 @@ namespace Ryujinx.Tests.Memory // Create a large mapping. mainMemory.MapView(backing, 0, 0, vaSize); - var writeFunc = TestMethods.GenerateDebugNativeWriteLoop(); + TestMethods.DebugNativeWriteLoop writeFunc = TestMethods.GenerateDebugNativeWriteLoop(); nint writePtr = mainMemory.GetPointer(vaSize - 0x1000, 4); Thread testThread = new(() => @@ -292,10 +293,10 @@ namespace Ryujinx.Tests.Memory public void ThreadLocalMap() { PartialUnmapState.Reset(); - ref var state = ref PartialUnmapState.GetRef(); + ref PartialUnmapState state = ref PartialUnmapState.GetRef(); bool running = true; - var testThread = new Thread(() => + Thread testThread = new Thread(() => { PartialUnmapState.GetRef().RetryFromAccessViolation(); while (running) @@ -331,11 +332,11 @@ namespace Ryujinx.Tests.Memory PartialUnmapState.Reset(); - ref var state = ref PartialUnmapState.GetRef(); + ref PartialUnmapState state = ref PartialUnmapState.GetRef(); fixed (void* localMap = &state.LocalCounts) { - var getOrReserve = TestMethods.GenerateDebugThreadLocalMapGetOrReserve((nint)localMap); + TestMethods.DebugThreadLocalMapGetOrReserve getOrReserve = TestMethods.GenerateDebugThreadLocalMapGetOrReserve((nint)localMap); for (int i = 0; i < ThreadLocalMap.MapSize; i++) { @@ -375,8 +376,8 @@ namespace Ryujinx.Tests.Memory [Test] public void NativeReaderWriterLock() { - var rwLock = new NativeReaderWriterLock(); - var threads = new List(); + NativeReaderWriterLock rwLock = new NativeReaderWriterLock(); + List threads = new List(); int value = 0; @@ -386,7 +387,7 @@ namespace Ryujinx.Tests.Memory for (int i = 0; i < 5; i++) { - var readThread = new Thread(() => + Thread readThread = new Thread(() => { int count = 0; while (running) @@ -423,7 +424,7 @@ namespace Ryujinx.Tests.Memory for (int i = 0; i < 2; i++) { - var writeThread = new Thread(() => + Thread writeThread = new Thread(() => { int count = 0; while (running) @@ -453,7 +454,7 @@ namespace Ryujinx.Tests.Memory threads.Add(writeThread); } - foreach (var thread in threads) + foreach (Thread thread in threads) { thread.Start(); } @@ -462,7 +463,7 @@ namespace Ryujinx.Tests.Memory running = false; - foreach (var thread in threads) + foreach (Thread thread in threads) { thread.Join(); } -- 2.47.1 From f15aa8fba0d7a1685da45f071793efaaf15c9ef6 Mon Sep 17 00:00:00 2001 From: Otozinclus <58051309+Otozinclus@users.noreply.github.com> Date: Sun, 26 Jan 2025 00:15:17 +0100 Subject: [PATCH 438/722] Fix LED turning on in input settings, despite TurnOffLed being set to true (#583) The ColorPicker auotmatically sets the LED to the selected Color whenever the Input Settings are opened. Therefore it now checks if the setting is turned off before changing the color. --- src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs index 4fdc84419..99ac3f008 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs @@ -252,7 +252,8 @@ namespace Ryujinx.Ava.UI.Views.Input if (!args.NewColor.HasValue) return; if (DataContext is not ControllerInputViewModel cVm) return; if (!cVm.Config.EnableLedChanging) return; - + if (cVm.Config.TurnOffLed) return; + cVm.ParentModel.SelectedGamepad.SetLed(args.NewColor.Value.ToUInt32()); } @@ -260,7 +261,8 @@ namespace Ryujinx.Ava.UI.Views.Input { if (DataContext is not ControllerInputViewModel cVm) return; if (!cVm.Config.EnableLedChanging) return; - + if (cVm.Config.TurnOffLed) return; + cVm.ParentModel.SelectedGamepad.SetLed(cVm.Config.LedColor.ToUInt32()); } } -- 2.47.1 From a1291f1061a48db2401afd0393cae131976995d2 Mon Sep 17 00:00:00 2001 From: Dehunc <72704610+Dehunc@users.noreply.github.com> Date: Sun, 26 Jan 2025 11:59:06 +0800 Subject: [PATCH 439/722] Improved Simplified Chinese translation (#568) Co-authored-by: Cwood --- src/Ryujinx/Assets/locales.json | 86 ++++++++++++++++----------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 698af9d17..b570cdaf3 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -393,7 +393,7 @@ "th_TH": "โหลด DLC จากโฟลเดอร์", "tr_TR": "", "uk_UA": "Завантажити DLC з теки", - "zh_CN": "从文件夹加载DLC", + "zh_CN": "从文件夹加载 DLC", "zh_TW": "從資料夾中載入 DLC" } }, @@ -768,7 +768,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Сканувати Amiibo (з теки Bin)", - "zh_CN": "从bin文件扫描 Amiibo", + "zh_CN": "扫描 Amiibo (从 bin 文件)", "zh_TW": "掃瞄 Amiibo (從 Bin 檔案)" } }, @@ -818,7 +818,7 @@ "th_TH": "ติดตั้งเฟิร์มแวร์จาก ไฟล์ XCI หรือ ไฟล์ ZIP", "tr_TR": "XCI veya ZIP'ten Yazılım Yükle", "uk_UA": "Встановити прошивку з XCI або ZIP", - "zh_CN": "从 XCI 或 ZIP 文件中安装系统固件", + "zh_CN": "从 XCI 或 ZIP 文件安装系统固件", "zh_TW": "從 XCI 或 ZIP 安裝韌體" } }, @@ -843,7 +843,7 @@ "th_TH": "ติดตั้งเฟิร์มแวร์จากไดเร็กทอรี", "tr_TR": "Bir Dizin Üzerinden Yazılım Yükle", "uk_UA": "Встановити прошивку з теки", - "zh_CN": "从文件夹中安装系统固件", + "zh_CN": "从文件夹安装系统固件", "zh_TW": "從資料夾安裝韌體" } }, @@ -893,7 +893,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Встановити ключі з файлу .KEYS або .ZIP", - "zh_CN": "从.KEYS文件或ZIP压缩包安装密匙", + "zh_CN": "从 .KEYS 文件或 .ZIP 压缩包安装密匙", "zh_TW": "從 .KEYS 或 .ZIP 安裝金鑰" } }, @@ -1018,7 +1018,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Обрізати XCI файли", - "zh_CN": "XCI文件瘦身", + "zh_CN": "瘦身 XCI 文件", "zh_TW": "修剪 XCI 檔案" } }, @@ -1293,7 +1293,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Відкриває сторінку з Посібником по усуненню помилок та несправностей на офіційній вікі-сторінці Ryujinx (англійською)", - "zh_CN": "打开Ryujinx官方wiki的常见问题和问题排除页面", + "zh_CN": "打开 Ryujinx 官方 Wiki 的常见问题和问题排除页面", "zh_TW": "開啟官方 Ryujinx Wiki 常見問題 (FAQ) 和疑難排解頁面" } }, @@ -1343,7 +1343,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Відкриває посібник з Налаштування та конфігурації на офіційній вікі-сторінці Ryujinx (англійською)", - "zh_CN": "打开Ryujinx官方wiki的安装与配置指南", + "zh_CN": "打开 Ryujinx 官方 Wiki 的安装与配置指南", "zh_TW": "開啟官方 Ryujinx Wiki 設定和配置指南" } }, @@ -1393,7 +1393,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Відкриває посібник з налаштування Мультиплеєру на офіційній вікі-сторінці Ryujinx (англійською)", - "zh_CN": "打开Ryujinx官方wiki的多人游戏指南", + "zh_CN": "打开 Ryujinx 官方 Wiki 的多人游戏指南", "zh_TW": "開啟官方 Ryujinx Wiki 多人遊戲 (LDN/LAN) 指南" } }, @@ -1443,7 +1443,7 @@ "th_TH": "กำลังค้นหา...", "tr_TR": "Ara...", "uk_UA": "Пошук...", - "zh_CN": "搜索…", + "zh_CN": "搜索...", "zh_TW": "搜尋..." } }, @@ -2593,7 +2593,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Перевірка та нарізка XCI Файлу", - "zh_CN": "检查并瘦身XCI文件", + "zh_CN": "检查并瘦身 XCI 文件", "zh_TW": "檢查及修剪 XCI 檔案" } }, @@ -2618,7 +2618,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Перевірити та обрізати XCI Файл задля збереження місця на диску", - "zh_CN": "检查并瘦身XCI文件以节约磁盘空间", + "zh_CN": "检查并瘦身 XCI 文件以节约磁盘空间", "zh_TW": "檢查及修剪 XCI 檔案以節省儲存空間" } }, @@ -2693,7 +2693,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Обрізається XCI Файлів '{0}'", - "zh_CN": "XCI文件瘦身中'{0}'", + "zh_CN": "正在瘦身 XCI 文件 '{0}'", "zh_TW": "正在修剪 XCI 檔案 '{0}'" } }, @@ -3218,7 +3218,7 @@ "th_TH": "โหลดไดเรกทอรี DLC/ไฟล์อัปเดต อัตโนมัติ", "tr_TR": "", "uk_UA": "Автозавантаження теки DLC/Оновлень", - "zh_CN": "自动加载DLC/游戏更新目录", + "zh_CN": "自动加载 DLC 及 游戏更新 的目录", "zh_TW": "自動載入 DLC/遊戲更新資料夾" } }, @@ -3243,7 +3243,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "DLC та Оновлення, які посилаються на відсутні файли, будуть автоматично вимкнуті.", - "zh_CN": "DLC/游戏更新可自动加载和卸载", + "zh_CN": "DLC 及 游戏更新 可自动加载和卸载", "zh_TW": "遺失的 DLC 及遊戲更新檔案將會在自動載入中移除" } }, @@ -11343,7 +11343,7 @@ "th_TH": "ไม่มีข้อมูลบันทึกไว้สำหรับ {0} [{1:x16}]", "tr_TR": "{0} [{1:x16}] için kayıt verisi bulunamadı", "uk_UA": "Немає збережених даних для {0} [{1:x16}]", - "zh_CN": "没有{0} [{1:x16}]的游戏存档", + "zh_CN": "没有 {0} [{1:x16}] 的游戏存档", "zh_TW": "沒有 {0} [{1:x16}] 的存檔" } }, @@ -12493,7 +12493,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Вікно XCI Тримера", - "zh_CN": "XCI文件瘦身窗口", + "zh_CN": "XCI 文件瘦身窗口", "zh_TW": "XCI 修剪器視窗" } }, @@ -13218,7 +13218,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "在{0}发现了一个无效的密匙文件", + "zh_CN": "在 {0} 发现了一个无效的密匙文件", "zh_TW": "找到無效的金鑰檔案 {0}" } }, @@ -14568,7 +14568,7 @@ "th_TH": "แฮ็ค: สุ่มแท็ก Uuid", "tr_TR": "Hack: Rastgele bir Uuid kullan", "uk_UA": "Хитрість: Використовувати випадковий тег Uuid", - "zh_CN": "修改:使用随机生成的Amiibo ID", + "zh_CN": "修改:使用随机生成的 Amiibo ID", "zh_TW": "補釘修正:使用隨機標記的 Uuid" } }, @@ -15518,7 +15518,7 @@ "th_TH": "โหลด PPTC โดยใช้หนึ่งในสามของจำนวนคอร์", "tr_TR": "", "uk_UA": "Завантажувати PPTC використовуючи третину від кількості ядер.", - "zh_CN": "使用三分之一的核心数加载PPTC.", + "zh_CN": "使用三分之一的核心数加载 PPTC.", "zh_TW": "使用 CPU 核心數量的三分之一載入 PPTC。" } }, @@ -16343,7 +16343,7 @@ "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกหนึ่งโฟลเดอร์ขึ้นไปเพื่อโหลด DLC จำนวนมาก", "tr_TR": "", "uk_UA": "Відкриває Файловий провідник для обрання однієї або декількох тек для масового завантаження DLC", - "zh_CN": "打开文件资源管理器以选择一个或多个文件夹来批量加载DLC。", + "zh_CN": "打开文件资源管理器以选择一个或多个文件夹来批量加载 DLC。", "zh_TW": "開啟檔案總管,選擇一個或多個資料夾來大量載入 DLC" } }, @@ -19168,7 +19168,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Перевірити та Обрізати XCI файл", - "zh_CN": "检查并瘦身XCI文件", + "zh_CN": "检查并瘦身 XCI 文件", "zh_TW": "檢查及修剪 XCI 檔案" } }, @@ -19193,7 +19193,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Ця функція спочатку перевірить наявність порожнього місця, після чого обріже файл XCI для економії місця на диску.", - "zh_CN": "这个功能将会先检查XCI文件,再对其执行瘦身操作以节约磁盘空间。", + "zh_CN": "这个功能将会先检查 XCI 文件,再对其执行瘦身操作以节约磁盘空间。", "zh_TW": "此功能首先檢查 XCI 檔案是否有可修剪的字元,然後修剪檔案以節省儲存空間。" } }, @@ -19243,7 +19243,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "XCI файл не потребує обрізання. Перевірте журнали (logs) для отримання додаткової інформації", - "zh_CN": "XCI文件不需要被瘦身。查看日志以获得更多细节。", + "zh_CN": "XCI 文件不需要被瘦身。查看日志以获得更多细节。", "zh_TW": "XCI 檔案不需要修剪。檢查日誌以取得更多資訊" } }, @@ -19268,7 +19268,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "XCI файл не може бути обрізаний. Перевірте журнали (logs) для отримання додаткової інформації", - "zh_CN": "XCI文件不能被瘦身。查看日志以获得更多细节。", + "zh_CN": "XCI 文件不能被瘦身。查看日志以获得更多细节。", "zh_TW": "XCI 檔案不能被修剪。檢查日誌以取得更多資訊" } }, @@ -19293,7 +19293,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "XCI файл Тільки для Читання і не може бути прочитаним. Перевірте журнали (logs) для отримання додаткової інформації", - "zh_CN": "XCI文件是只读的,且不可以被标记为可读取的。查看日志以获得更多细节。", + "zh_CN": "XCI 文件是只读的,且不可以被标记为可读取的。查看日志以获得更多细节。", "zh_TW": "XCI 檔案是唯讀,並且無法改成可寫入。檢查日誌以取得更多資訊" } }, @@ -19318,7 +19318,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Розмір файлу XCI змінився з моменту сканування. Перевірте, чи не записується файл, та спробуйте знову", - "zh_CN": "XCI文件在扫描后大小发生了变化。请检查文件是否未被写入,然后重试。", + "zh_CN": "XCI 文件在扫描后大小发生了变化。请检查文件是否未被写入,然后重试。", "zh_TW": "XCI 檔案大小比較上次的掃瞄已經改變。請檢查檔案是否未被寫入,然後再嘗試。" } }, @@ -19343,7 +19343,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Файл XCI містить дані в зоні вільного простору, тому обрізка небезпечна", - "zh_CN": "XCI文件的空闲区域内有数据,不能安全瘦身。", + "zh_CN": "XCI 文件的空闲区域内有数据,不能安全瘦身。", "zh_TW": "XCI 檔案有數據儲存於可節省儲存空間的區域,所以試圖修剪並不安全" } }, @@ -19368,7 +19368,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "XCI Файл містить недійсні дані. Перевірте журнали (logs) для отримання додаткової інформації", - "zh_CN": "XCI文件含有无效数据。查看日志以获得更多细节。", + "zh_CN": "XCI 文件含有无效数据。查看日志以获得更多细节。", "zh_TW": "XCI 檔案帶有無效的數據。檢查日誌以取得更多資訊" } }, @@ -19393,7 +19393,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "XCI Файл файл не вдалося відкрити для запису. Перевірте журнали для додаткової інформації", - "zh_CN": "XCI文件不能被读写。查看日志以获得更多细节。", + "zh_CN": "XCI 文件不能被读写。查看日志以获得更多细节。", "zh_TW": "XCI 檔案不能被寫入。檢查日誌以取得更多資訊" } }, @@ -19418,7 +19418,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Не вдалося обрізати файл XCI", - "zh_CN": "XCI文件瘦身失败", + "zh_CN": "XCI 文件瘦身失败", "zh_TW": "修剪 XCI 檔案失敗" } }, @@ -19618,7 +19618,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Обрізка XCI Файлів", - "zh_CN": "XCI文件瘦身器", + "zh_CN": "XCI 文件瘦身器", "zh_TW": "XCI 檔案修剪器" } }, @@ -20093,7 +20093,7 @@ "th_TH": "แพ็ค DLC ไม่สามารถลบทิ้งได้ สามารถปิดใช้งานได้เท่านั้น", "tr_TR": "", "uk_UA": "Комплектні DLC (бандли) не можуть бути видаленими, лише вимкненими.", - "zh_CN": "游戏整合的DLC无法移除,可尝试禁用。", + "zh_CN": "游戏整合的 DLC 无法移除,可尝试禁用。", "zh_TW": "附帶的 DLC 只能被停用而無法被刪除。" } }, @@ -20143,7 +20143,7 @@ "th_TH": "{0} DLC ใหม่ที่เพิ่มเข้ามา", "tr_TR": "", "uk_UA": "{0} нового завантажувального вмісту додано", - "zh_CN": "{0} 个DLC被添加", + "zh_CN": "{0} 个 DLC 被添加", "zh_TW": "已加入 {0} 個 DLC" } }, @@ -20168,7 +20168,7 @@ "th_TH": "{0} ใหม่ที่เพิ่มเข้ามา", "tr_TR": "", "uk_UA": "{0} нового завантажувального вмісту додано", - "zh_CN": "{0} 个DLC被添加", + "zh_CN": "{0} 个 DLC 被添加", "zh_TW": "已加入 {0} 個 DLC" } }, @@ -20193,7 +20193,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "{0} відсутнього завантажувального вмісту видалено", - "zh_CN": "{0} 个失效的DLC已移除", + "zh_CN": "{0} 个失效的 DLC 已移除", "zh_TW": "已刪除 {0} 個遺失的 DLC" } }, @@ -20718,7 +20718,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "使用Vulkan。\n在ARM Mac上,当玩在其下运行良好的游戏时,使用Metal后端。", + "zh_CN": "使用 Vulkan。\n在 ARM Mac 上,当玩在其下运行良好的游戏时,使用 Metal 后端。", "zh_TW": "使用Vulkan。\n在 ARM Mac 上,如果遊戲執行性能良好時,則將使用 Metal 後端。" } }, @@ -22118,7 +22118,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Вимкнути хостинг P2P мережі (може збільшити затримку)", - "zh_CN": "禁用P2P网络连接 (也许会增加延迟)", + "zh_CN": "禁用 P2P 网络连接 (也许会增加延迟)", "zh_TW": "停用對等網路代管 (P2P Network Hosting) (可能增加網路延遲)" } }, @@ -22143,7 +22143,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Вимкнути хостинг P2P мережі, піри будуть підключатися через майстер-сервер замість прямого з'єднання з вами.", - "zh_CN": "禁用P2P网络连接,对方将通过主服务器进行连接,而不是直接连接到您。", + "zh_CN": "禁用 P2P 网络连接,对方将通过主服务器进行连接,而不是直接连接到您。", "zh_TW": "停用對等網路代管 (P2P Network Hosting), 用戶群會經過代理何服器而非直接連線至你的主機。" } }, @@ -22218,7 +22218,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Введіть пароль у форматі Ryujinx-<8 символів>. Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.", - "zh_CN": "以Ryujinx-<8个十六进制字符>的格式输入密码。您只能看到与您使用相同密码的游戏房间。", + "zh_CN": "以 Ryujinx-<8个十六进制字符> 的格式输入密码。您只能看到与您使用相同密码的游戏房间。", "zh_TW": "以「Ryujinx-<8 個十六進制數字>」的格式輸入密碼片語 (passphrase)。你只會看到與你的密碼片語 (passphrase) 相同的遊戲房間。" } }, @@ -22518,7 +22518,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація кадрів. 'Switch' емулює частоту оновлення консолі Nintendo Switch (60 Гц). 'Необмежена' — частота оновлення не матиме обмежень.", - "zh_CN": "模拟垂直同步。“Switch”模拟了Switch的60Hz刷新率。“无限制”没有刷新率限制。", + "zh_CN": "模拟垂直同步。“Switch”模拟了 Switch 的 60Hz 刷新率。“无限制”没有刷新率限制。", "zh_TW": "模擬垂直同步。「Switch」 模擬 Nintendo Switch 的 60Hz 重新整理頻率。「沒有限制」是沒有限制的重新整理頻率。" } }, @@ -22543,7 +22543,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація кадрів. 'Switch' емулює частоту оновлення консолі Nintendo Switch (60 Гц). 'Необмежена' — частота оновлення не матиме обмежень. 'Користувацька' емулює вказану користувацьку частоту оновлення.", - "zh_CN": "模拟垂直同步。“Switch”模拟了Switch的60Hz刷新率。“无限制”没有刷新率限制。“自定义刷新率”模拟指定的自定义刷新率。", + "zh_CN": "模拟垂直同步。“Switch”模拟了 Switch 的 60Hz 刷新率。“无限制”没有刷新率限制。“自定义刷新率”模拟指定的自定义刷新率。", "zh_TW": "模擬垂直同步。「Switch」 模擬 Nintendo Switch 的 60Hz 重新整理頻率。「沒有限制」是沒有限制的重新整理頻率。「自訂的重新整理頻率」模擬所自訂的重新整理頻率。" } }, @@ -22568,7 +22568,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Дозволяє користувачу вказати емульовану частоту оновлення. У деяких іграх це може прискорити або сповільнити логіку гри. Натомість в інших іграх ця функція може дозволити обмежити FPS на певні кратні частоти оновлення або призвести до непередбачуваної поведінки. Це експериментальна функція, без гарантій того, як вона вплине на ігровий процес. \n\nЗалиште ВИМКНЕНИМ, якщо не впевнені.", - "zh_CN": "允许用户指定模拟刷新率。在某些游戏中,这可能会加快或减慢游戏逻辑的速度。在其他游戏中,它可能允许将FPS限制在刷新率的某个倍数,或者导致不可预测的行为。这是一个实验性功能,无法保证游戏会受到怎样的影响。\n\n如果不确定,请关闭。", + "zh_CN": "允许用户指定模拟刷新率。在某些游戏中,这可能会加快或减慢游戏逻辑的速度。在其他游戏中,它可能允许将 FPS 限制在刷新率的某个倍数,或者导致不可预测的行为。这是一个实验性功能,无法保证游戏会受到怎样的影响。\n\n如果不确定,请关闭。", "zh_TW": "容許使用者自訂模擬的重新整理頻率。你可能會在某些遊戲裡感受到加快或減慢的遊戲速度;其他遊戲裡則可能會容許限制最高的 FPS 至重新整理頻率的倍數,或引起未知遊戲行為。這是實驗性功能,且沒有保證遊戲會穩定執行。\n\n如果不確定,請保持關閉狀態。" } }, -- 2.47.1 From 050b9a0da4f6d09700fbf0bb9f980e353aa08e73 Mon Sep 17 00:00:00 2001 From: shinyoyo Date: Sun, 26 Jan 2025 11:59:20 +0800 Subject: [PATCH 440/722] Updated Zh_CN Simplified Chinese (#578) --- src/Ryujinx/Assets/locales.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index b570cdaf3..ff12ca1f3 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -593,7 +593,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "启动游戏时隐藏 UI", "zh_TW": "" } }, @@ -2343,7 +2343,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "从选定的 DLC 文件中解压 RomFS", "zh_TW": "" } }, @@ -7668,7 +7668,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "关闭", "zh_TW": "" } }, @@ -7693,7 +7693,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "彩虹", "zh_TW": "" } }, @@ -23043,7 +23043,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "选择一个要解压的 DLC", "zh_TW": "" } } -- 2.47.1 From 0c36bcd7d4c8666d3a114cb7db0a0d9c66c0bb90 Mon Sep 17 00:00:00 2001 From: Daenorth Date: Sun, 26 Jan 2025 05:02:24 +0100 Subject: [PATCH 441/722] Added more titles to RPC (#569) Added some more titles to the RPC environment -Brawlhalla -Minecraft -Risk -Stardew Vallet -Valkyria Chronicles 4 -Super bomberman R -Arcade archives Super mario bros -Divinity Original sin 2 DE -Monopoly -titan Quest --- src/Ryujinx.Common/TitleIDs.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Ryujinx.Common/TitleIDs.cs b/src/Ryujinx.Common/TitleIDs.cs index 54241d053..72262c6a0 100644 --- a/src/Ryujinx.Common/TitleIDs.cs +++ b/src/Ryujinx.Common/TitleIDs.cs @@ -105,6 +105,7 @@ namespace Ryujinx.Common "0100b04011742000", // Monster Hunter Rise //Mario Franchise + "010021d00812a000", // Arcade Archives VS. SUPER MARIO BROS. "01006d0017f7a000", // Mario & Luigi: Brothership "010003000e146000", // Mario & Sonic at the Olympic Games Tokyo 2020 "010067300059a000", // Mario + Rabbids: Kingdom Battle @@ -212,32 +213,41 @@ namespace Ryujinx.Common //Misc Games "010056e00853a000", // A Hat in Time "0100fd1014726000", // Baldurs Gate: Dark Alliance + "0100c6800b934000", // Brawlhalla "0100dbf01000a000", // Burnout Paradise Remastered "0100744001588000", // Cars 3: Driven to Win "0100b41013c82000", // Cruis'n Blast "010085900337e000", // Death Squared "01001b300b9be000", // Diablo III: Eternal Collection + "010027400cdc6000", // Divinity Original 2 - Definitive Edition "01008c8012920000", // Dying Light Platinum Edition "01001cc01b2d4000", // Goat Simulator 3 "01003620068ea000", // Hand of Fate 2 "010085500130a000", // Lego City: Undercover "010073c01af34000", // LEGO Horizon Adventures + "0100d71004694000", // Minecraft + "01007430037f6000", // Monopoly "0100853015e86000", // No Man's Sky "01007bb017812000", // Portal "0100abd01785c000", // Portal 2 "01008e200c5c2000", // Muse Dash "01007820196a6000", // Red Dead Redemption + "0100e8300a67a000", // Risk "01002f7013224000", // Rune Factory 5 "01008d100d43e000", // Saints Row IV "0100de600beee000", // Saints Row: The Third - The Full Package "01001180021fa000", // Shovel Knight: Specter of Torment + "0100e65002bb8000", // Stardew Valley "0100d7a01b7a2000", // Star Wars: Bounty Hunter "0100800015926000", // Suika Game + "01007ad00013e000", // Super Bomberman R "0100e46006708000", // Terraria + "0100605008268000", // Titan Quest "01000a10041ea000", // The Elder Scrolls V: Skyrim "010057a01e4d4000", // TSUKIHIME -A piece of blue glass moon- "010080b00ad66000", // Undertale "010069401adb8000", // Unicorn Overlord + "01005c600ac68000", // Valkyria Chronicles 4 "0100534009ff2000", // Yonder - The cloud catcher chronicles ]; } -- 2.47.1 From e3f20abd2316d953f3cbccbbc0604de299655f9e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 22:44:16 -0600 Subject: [PATCH 442/722] UI: RPC: Maintain game started timestamp for the duration of the AppHost --- src/Ryujinx/AppHost.cs | 5 +++++ src/Ryujinx/DiscordIntegrationModule.cs | 7 ++++--- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 2 +- src/Ryujinx/Program.cs | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 27c2d5b7a..d161644c0 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -3,6 +3,7 @@ using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input; using Avalonia.Threading; +using DiscordRPC; using LibHac.Common; using LibHac.Ns; using LibHac.Tools.FsSystem; @@ -594,6 +595,8 @@ namespace Ryujinx.Ava gamepad?.ClearLed(); gamepad?.Dispose(); } + + DiscordIntegrationModule.GuestAppStartedAt = null; Rainbow.Disable(); Rainbow.Reset(); @@ -685,6 +688,8 @@ namespace Ryujinx.Ava public async Task LoadGuestApplication(BlitStruct? customNacpData = null) { + DiscordIntegrationModule.GuestAppStartedAt = Timestamps.Now; + InitEmulatedSwitch(); MainWindow.UpdateGraphicsConfig(); diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs index 18bdfaf17..5d23bda2b 100644 --- a/src/Ryujinx/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -14,7 +14,8 @@ namespace Ryujinx.Ava { public static class DiscordIntegrationModule { - public static Timestamps StartedAt { get; set; } + public static Timestamps EmulatorStartedAt { get; set; } + public static Timestamps GuestAppStartedAt { get; set; } private static string VersionString => (ReleaseInformation.IsCanaryBuild ? "Canary " : string.Empty) + $"v{ReleaseInformation.Version}"; @@ -43,7 +44,7 @@ namespace Ryujinx.Ava }, Details = "Main Menu", State = "Idling", - Timestamps = StartedAt + Timestamps = EmulatorStartedAt }; ConfigurationState.Instance.EnableDiscordIntegration.Event += Update; @@ -100,7 +101,7 @@ namespace Ryujinx.Ava State = appMeta.LastPlayed.HasValue && appMeta.TimePlayed.TotalSeconds > 5 ? $"Total play time: {ValueFormatUtils.FormatTimeSpan(appMeta.TimePlayed)}" : "Never played", - Timestamps = Timestamps.Now + Timestamps = GuestAppStartedAt ??= Timestamps.Now }); } diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index 7b29cd59c..aa8238fc6 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Headless public static void Initialize() { // Ensure Discord presence timestamp begins at the absolute start of when Ryujinx is launched - DiscordIntegrationModule.StartedAt = Timestamps.Now; + DiscordIntegrationModule.EmulatorStartedAt = Timestamps.Now; // Delete backup files after updating. Task.Run(Updater.CleanupUpdate); diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index e7a4fde56..1f0df9b2f 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -94,7 +94,7 @@ namespace Ryujinx.Ava private static void Initialize(string[] args) { // Ensure Discord presence timestamp begins at the absolute start of when Ryujinx is launched - DiscordIntegrationModule.StartedAt = Timestamps.Now; + DiscordIntegrationModule.EmulatorStartedAt = Timestamps.Now; // Parse arguments CommandLineState.ParseArguments(args); -- 2.47.1 From 3f12727ef89e4afc96c3dd7c7d301e436b04bec1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 25 Jan 2025 23:13:51 -0600 Subject: [PATCH 443/722] input: LED rainbow now updates the LED with the normal gamepad update loop instead of subscribing to an updated event for the rainbow color in SetConfiguration. --- src/Ryujinx.Common/Utilities/Rainbow.cs | 37 +++++++++++++++++++------ src/Ryujinx.Input.SDL2/SDL2Gamepad.cs | 26 ++--------------- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/Ryujinx.Common/Utilities/Rainbow.cs b/src/Ryujinx.Common/Utilities/Rainbow.cs index 3b49872c2..a3db94925 100644 --- a/src/Ryujinx.Common/Utilities/Rainbow.cs +++ b/src/Ryujinx.Common/Utilities/Rainbow.cs @@ -1,6 +1,7 @@ using Gommon; using System; using System.Drawing; +using System.Threading; using System.Threading.Tasks; namespace Ryujinx.Common.Utilities @@ -18,7 +19,7 @@ namespace Ryujinx.Common.Utilities { while (CyclingEnabled) { - await Task.Delay(15); + await Task.Delay(20); Tick(); } }); @@ -32,29 +33,47 @@ namespace Ryujinx.Common.Utilities public static float Speed { get; set; } = 1; + + private static readonly Lock _lock = new(); - public static Color Color { get; private set; } = Color.Blue; + private static Color _color = Color.Blue; + + public static ref Color Color + { + get + { + lock (_lock) + { + return ref _color; + } + } + } public static void Tick() { - Color = HsbToRgb((Color.GetHue() + Speed) / 360); + lock (_lock) + { + _color = HsbToRgb((_color.GetHue() + Speed) / 360); - UpdatedHandler.Call(Color.ToArgb()); + _updatedHandler.Call(_color.ToArgb()); + } } public static void Reset() { - Color = Color.Blue; - UpdatedHandler.Clear(); + _updatedHandler.Clear(); + + lock (_lock) + _color = Color.Blue; } public static event Action Updated { - add => UpdatedHandler.Add(value); - remove => UpdatedHandler.Remove(value); + add => _updatedHandler.Add(value); + remove => _updatedHandler.Remove(value); } - internal static Event UpdatedHandler = new(); + private static readonly Event _updatedHandler = new(); private static Color HsbToRgb(float hue, float saturation = 1, float brightness = 1) { diff --git a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs index 8809c83f0..7d40bac66 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs @@ -148,8 +148,6 @@ namespace Ryujinx.Input.SDL2 { if (disposing && _gamepadHandle != nint.Zero) { - Rainbow.Updated -= RainbowColorChanged; - SDL_GameControllerClose(_gamepadHandle); _gamepadHandle = nint.Zero; @@ -227,15 +225,6 @@ namespace Ryujinx.Input.SDL2 private static Vector3 RadToDegree(Vector3 rad) => rad * (180 / MathF.PI); private static Vector3 GsToMs2(Vector3 gs) => gs / SDL_STANDARD_GRAVITY; - - private void RainbowColorChanged(int packedRgb) - { - if (!_configuration.Led.UseRainbow) return; - - SetLed((uint)packedRgb); - } - - private bool _rainbowColorEnabled; public void SetConfiguration(InputConfig configuration) { @@ -247,19 +236,10 @@ namespace Ryujinx.Input.SDL2 { if (_configuration.Led.TurnOffLed) (this as IGamepad).ClearLed(); - else switch (_configuration.Led.UseRainbow) - { - case true when !_rainbowColorEnabled: - Rainbow.Updated += RainbowColorChanged; - _rainbowColorEnabled = true; - break; - case false when _rainbowColorEnabled: - Rainbow.Updated -= RainbowColorChanged; - _rainbowColorEnabled = false; - break; - } + else if (_configuration.Led.UseRainbow) + SetLed((uint)Rainbow.Color.ToArgb()); - if (!_configuration.Led.TurnOffLed && !_rainbowColorEnabled) + if (!_configuration.Led.TurnOffLed && !_configuration.Led.UseRainbow) SetLed(_configuration.Led.LedColor); } -- 2.47.1 From 5396327ac15d3c4ace0211e377b90f1384bdd036 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 14:22:59 -0600 Subject: [PATCH 444/722] misc: chore: Replace GreemDev/Ryujinx with Ryubing/Ryujinx in Amiibo.json --- assets/amiibo/Amiibo.json | 1706 ++++++++++++++++++------------------- 1 file changed, 853 insertions(+), 853 deletions(-) diff --git a/assets/amiibo/Amiibo.json b/assets/amiibo/Amiibo.json index 03c2c020e..e3c01c1c3 100644 --- a/assets/amiibo/Amiibo.json +++ b/assets/amiibo/Amiibo.json @@ -43,7 +43,7 @@ } ], "head": "04380001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04380001-03000502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04380001-03000502.png", "name": "Sandy", "release": { "au": "2016-11-10", @@ -109,7 +109,7 @@ } ], "head": "01810101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810101-00b40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810101-00b40502.png", "name": "Isabelle - Winter", "release": { "au": "2015-11-21", @@ -151,7 +151,7 @@ } ], "head": "32000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_32000000-00300002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_32000000-00300002.png", "name": "Sonic", "release": { "au": "2015-01-29", @@ -205,7 +205,7 @@ } ], "head": "029e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_029e0001-013d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_029e0001-013d0502.png", "name": "Ava", "release": { "au": "2016-03-19", @@ -259,7 +259,7 @@ } ], "head": "01b30001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b30001-00b50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b30001-00b50502.png", "name": "Blanca", "release": { "au": "2015-11-21", @@ -313,7 +313,7 @@ } ], "head": "02f80001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f80001-01380502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f80001-01380502.png", "name": "Mac", "release": { "au": "2016-03-19", @@ -367,7 +367,7 @@ } ], "head": "023c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_023c0001-00bd0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_023c0001-00bd0502.png", "name": "Lucha", "release": { "au": "2015-11-21", @@ -421,7 +421,7 @@ } ], "head": "02630001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02630001-00750502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02630001-00750502.png", "name": "Punchy", "release": { "au": "2015-10-03", @@ -475,7 +475,7 @@ } ], "head": "03700001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03700001-015d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03700001-015d0502.png", "name": "Violet", "release": { "au": "2016-03-19", @@ -505,7 +505,7 @@ } ], "head": "07c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07c00000-00210002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07c00000-00210002.png", "name": "Mii Brawler", "release": { "au": "2015-09-26", @@ -522,7 +522,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c50201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c50201-02830e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c50201-02830e02.png", "name": "Wario - Baseball", "release": { "au": "2017-03-11", @@ -576,7 +576,7 @@ } ], "head": "026c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026c0001-00c30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026c0001-00c30502.png", "name": "Tom", "release": { "au": "2015-11-21", @@ -726,7 +726,7 @@ } ], "head": "01010300", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010300-04140902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010300-04140902.png", "name": "Zelda & Loftwing", "release": { "au": "2021-07-16", @@ -780,7 +780,7 @@ } ], "head": "04e60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e60001-00820502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e60001-00820502.png", "name": "Mint", "release": { "au": "2015-10-03", @@ -834,7 +834,7 @@ } ], "head": "04e30001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e30001-01650502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e30001-01650502.png", "name": "Caroline", "release": { "au": "2016-03-19", @@ -888,7 +888,7 @@ } ], "head": "01880001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01880001-01120502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01880001-01120502.png", "name": "Mabel", "release": { "au": "2016-03-19", @@ -966,7 +966,7 @@ } ], "head": "08000100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000100-04150402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000100-04150402.png", "name": "Inkling - Yellow", "release": { "au": "2022-11-11", @@ -1020,7 +1020,7 @@ } ], "head": "08070000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08070000-04330402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08070000-04330402.png", "name": "Shiver", "release": { "au": "2023-11-17", @@ -1074,7 +1074,7 @@ } ], "head": "08080000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08080000-04340402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08080000-04340402.png", "name": "Frye", "release": { "au": "2023-11-17", @@ -1128,7 +1128,7 @@ } ], "head": "08090000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08090000-04350402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08090000-04350402.png", "name": "Big Man", "release": { "au": "2023-11-17", @@ -1170,7 +1170,7 @@ } ], "head": "0a1d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1d0001-03d40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1d0001-03d40502.png", "name": "Frett", "release": { "au": "2021-11-05", @@ -1224,7 +1224,7 @@ } ], "head": "035d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_035d0001-00c90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_035d0001-00c90502.png", "name": "Kidd", "release": { "au": "2015-11-21", @@ -1302,7 +1302,7 @@ } ], "head": "1f400000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f400000-035e1002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f400000-035e1002.png", "name": "Qbby", "release": { "au": null, @@ -1319,7 +1319,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c60101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c60101-02870e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c60101-02870e02.png", "name": "Waluigi - Soccer", "release": { "au": "2017-03-11", @@ -1373,7 +1373,7 @@ } ], "head": "02640001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02640001-01ac0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02640001-01ac0502.png", "name": "Purrl", "release": { "au": "2016-06-18", @@ -1427,7 +1427,7 @@ } ], "head": "025e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_025e0001-01250502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_025e0001-01250502.png", "name": "Mitzi", "release": { "au": "2016-03-19", @@ -1469,7 +1469,7 @@ } ], "head": "0a100001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a100001-03c70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a100001-03c70502.png", "name": "Reneigh", "release": { "au": "2021-11-05", @@ -1523,7 +1523,7 @@ } ], "head": "047a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_047a0001-00600502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_047a0001-00600502.png", "name": "Rasher", "release": { "au": "2015-10-03", @@ -1577,7 +1577,7 @@ } ], "head": "04a10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a10001-016f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a10001-016f0502.png", "name": "Chrissy", "release": { "au": "2016-03-19", @@ -1594,7 +1594,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09d00301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d00301-02bb0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d00301-02bb0e02.png", "name": "Metal Mario - Tennis", "release": { "au": "2017-03-11", @@ -1648,7 +1648,7 @@ } ], "head": "01910001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01910001-004e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01910001-004e0502.png", "name": "Harriet", "release": { "au": "2015-10-03", @@ -1702,7 +1702,7 @@ } ], "head": "02f10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f10001-01450502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f10001-01450502.png", "name": "Daisy", "release": { "au": "2016-03-19", @@ -1756,7 +1756,7 @@ } ], "head": "02d70001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02d70001-01300502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02d70001-01300502.png", "name": "Bam", "release": { "au": "2016-03-19", @@ -1810,7 +1810,7 @@ } ], "head": "02030001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02030001-019a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02030001-019a0502.png", "name": "Anabelle", "release": { "au": "2016-06-18", @@ -1864,7 +1864,7 @@ } ], "head": "01890001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01890001-00ab0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01890001-00ab0502.png", "name": "Labelle", "release": { "au": "2015-11-21", @@ -1894,7 +1894,7 @@ } ], "head": "38410001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38410001-04251902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38410001-04251902.png", "name": "Tatsuhisa \u201cLuke\u201d Kamij\u014d", "release": { "au": null, @@ -1948,7 +1948,7 @@ } ], "head": "08060100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08060100-041c0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08060100-041c0402.png", "name": "Smallfry", "release": { "au": "2022-11-11", @@ -2026,7 +2026,7 @@ } ], "head": "08000100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000100-03820002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000100-03820002.png", "name": "Inkling", "release": { "au": "2018-12-07", @@ -2080,7 +2080,7 @@ } ], "head": "018d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018d0001-010c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018d0001-010c0502.png", "name": "Rover", "release": { "au": "2016-03-19", @@ -2134,7 +2134,7 @@ } ], "head": "01a70001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a70001-01140502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a70001-01140502.png", "name": "Wendell", "release": { "au": "2016-03-19", @@ -2188,7 +2188,7 @@ } ], "head": "04ba0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ba0001-005d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ba0001-005d0502.png", "name": "Ren\u00e9e", "release": { "au": "2015-10-03", @@ -2242,7 +2242,7 @@ } ], "head": "04890001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04890001-00ef0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04890001-00ef0502.png", "name": "Agnes", "release": { "au": "2015-11-21", @@ -2296,7 +2296,7 @@ } ], "head": "018e0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018e0101-01780502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018e0101-01780502.png", "name": "Resetti - Without Hat", "release": { "au": "2016-06-18", @@ -2338,7 +2338,7 @@ } ], "head": "0a040001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a040001-03b50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a040001-03b50502.png", "name": "Daisy Mae", "release": { "au": "2021-11-05", @@ -2392,7 +2392,7 @@ } ], "head": "026d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026d0001-013f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026d0001-013f0502.png", "name": "Merry", "release": { "au": "2016-03-19", @@ -2446,7 +2446,7 @@ } ], "head": "03250001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03250001-010a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03250001-010a0502.png", "name": "Big Top", "release": { "au": "2015-11-21", @@ -2500,7 +2500,7 @@ } ], "head": "01b40001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b40001-01130502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b40001-01130502.png", "name": "Leif", "release": { "au": "2016-03-19", @@ -2554,7 +2554,7 @@ } ], "head": "03900001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03900001-01850502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03900001-01850502.png", "name": "Rocco", "release": { "au": "2016-06-18", @@ -2571,7 +2571,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c70501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c70501-02900e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c70501-02900e02.png", "name": "Donkey Kong - Horse Racing", "release": { "au": "2017-03-11", @@ -2625,7 +2625,7 @@ } ], "head": "04370001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04370001-01050502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04370001-01050502.png", "name": "Gladys", "release": { "au": "2015-11-21", @@ -2679,7 +2679,7 @@ } ], "head": "02300001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02300001-01d20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02300001-01d20502.png", "name": "Twiggy", "release": { "au": "2016-06-18", @@ -2733,7 +2733,7 @@ } ], "head": "033b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033b0001-00fa0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033b0001-00fa0502.png", "name": "Camofrog", "release": { "au": "2015-11-21", @@ -2799,7 +2799,7 @@ } ], "head": "01c10000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01c10000-02440502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01c10000-02440502.png", "name": "Lottie", "release": { "au": "2015-11-21", @@ -2829,7 +2829,7 @@ } ], "head": "00c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00c00000-037b0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00c00000-037b0002.png", "name": "King K. Rool", "release": { "au": "2019-02-15", @@ -2859,7 +2859,7 @@ } ], "head": "38450001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38450001-04291902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38450001-04291902.png", "name": "Nail Saionji", "release": { "au": null, @@ -2889,7 +2889,7 @@ } ], "head": "36010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_36010000-04210002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_36010000-04210002.png", "name": "Sephiroth", "release": { "au": "2023-01-13", @@ -2943,7 +2943,7 @@ } ], "head": "02da0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02da0001-01330502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02da0001-01330502.png", "name": "Deirdre", "release": { "au": "2016-03-19", @@ -2985,7 +2985,7 @@ } ], "head": "0a030001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a030001-03b40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a030001-03b40502.png", "name": "Flick", "release": { "au": "2021-11-05", @@ -3063,7 +3063,7 @@ } ], "head": "21020000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21020000-00290002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21020000-00290002.png", "name": "Lucina", "release": { "au": "2015-04-25", @@ -3117,7 +3117,7 @@ } ], "head": "02b80001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02b80001-019c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02b80001-019c0502.png", "name": "Naomi", "release": { "au": "2016-06-18", @@ -3171,7 +3171,7 @@ } ], "head": "03470001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03470001-03020502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03470001-03020502.png", "name": "Raddle", "release": { "au": "2016-11-10", @@ -3225,7 +3225,7 @@ } ], "head": "01b00001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b00001-00520502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b00001-00520502.png", "name": "Tortimer", "release": { "au": "2015-10-03", @@ -3291,7 +3291,7 @@ } ], "head": "018c0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018c0000-02430502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018c0000-02430502.png", "name": "Digby", "release": { "au": "2015-11-21", @@ -3345,7 +3345,7 @@ } ], "head": "033e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033e0001-01a20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033e0001-01a20502.png", "name": "Puddles", "release": { "au": "2016-06-18", @@ -3423,7 +3423,7 @@ } ], "head": "08050200", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08050200-038f0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08050200-038f0402.png", "name": "Octoling Boy", "release": { "au": "2018-11-11", @@ -3561,7 +3561,7 @@ } ], "head": "01400000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01400000-03550902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01400000-03550902.png", "name": "Guardian", "release": { "au": "2017-03-03", @@ -3591,7 +3591,7 @@ } ], "head": "19070000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19070000-03840002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19070000-03840002.png", "name": "Squirtle", "release": { "au": "2019-09-20", @@ -3717,7 +3717,7 @@ } ], "head": "00020003", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00020003-039dff02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00020003-039dff02.png", "name": "Peach - Power Up Band", "release": { "au": null, @@ -3771,7 +3771,7 @@ } ], "head": "02380001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02380001-02f80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02380001-02f80502.png", "name": "Jacob", "release": { "au": "2016-11-10", @@ -3849,7 +3849,7 @@ } ], "head": "00170000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00170000-02680102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00170000-02680102.png", "name": "Boo", "release": { "au": "2016-10-08", @@ -3903,7 +3903,7 @@ } ], "head": "035e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_035e0001-018e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_035e0001-018e0502.png", "name": "Pashmina", "release": { "au": "2016-06-18", @@ -3957,7 +3957,7 @@ } ], "head": "03280001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03280001-02eb0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03280001-02eb0502.png", "name": "Paolo", "release": { "au": "2016-11-10", @@ -4011,7 +4011,7 @@ } ], "head": "028a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028a0001-02e90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028a0001-02e90502.png", "name": "June", "release": { "au": "2016-11-10", @@ -4041,7 +4041,7 @@ } ], "head": "37400001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_37400001-03741402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_37400001-03741402.png", "name": "Super Mario Cereal", "release": { "au": null, @@ -4211,7 +4211,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-00040002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-00040002.png", "name": "Link", "release": { "au": "2014-11-29", @@ -4241,7 +4241,7 @@ } ], "head": "36000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_36000000-02590002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_36000000-02590002.png", "name": "Cloud", "release": { "au": "2017-07-22", @@ -4295,7 +4295,7 @@ } ], "head": "02710001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02710001-019b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02710001-019b0502.png", "name": "Rudy", "release": { "au": "2016-06-18", @@ -4349,7 +4349,7 @@ } ], "head": "03840001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03840001-00860502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03840001-00860502.png", "name": "Flurry", "release": { "au": "2015-10-03", @@ -4403,7 +4403,7 @@ } ], "head": "028e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028e0001-019e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028e0001-019e0502.png", "name": "Tammy", "release": { "au": "2016-06-18", @@ -4457,7 +4457,7 @@ } ], "head": "02140001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02140001-00e40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02140001-00e40502.png", "name": "Teddy", "release": { "au": "2015-11-21", @@ -4511,7 +4511,7 @@ } ], "head": "04510001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04510001-015e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04510001-015e0502.png", "name": "Frank", "release": { "au": "2016-03-19", @@ -4528,7 +4528,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c20501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c20501-02770e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c20501-02770e02.png", "name": "Peach - Horse Racing", "release": { "au": "2017-03-11", @@ -4582,7 +4582,7 @@ } ], "head": "024d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_024d0001-02f60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_024d0001-02f60502.png", "name": "Stu", "release": { "au": "2016-11-10", @@ -4636,7 +4636,7 @@ } ], "head": "03a80001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a80001-00910502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a80001-00910502.png", "name": "Roscoe", "release": { "au": "2015-10-03", @@ -4714,7 +4714,7 @@ } ], "head": "21010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21010000-00180002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21010000-00180002.png", "name": "Ike", "release": { "au": "2015-01-29", @@ -4731,7 +4731,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c10401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c10401-02710e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c10401-02710e02.png", "name": "Luigi - Golf", "release": { "au": "2017-03-11", @@ -4785,7 +4785,7 @@ } ], "head": "03810001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03810001-00d50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03810001-00d50502.png", "name": "Rodney", "release": { "au": "2015-11-21", @@ -4802,7 +4802,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cc0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cc0101-02a50e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cc0101-02a50e02.png", "name": "Baby Mario - Soccer", "release": { "au": "2017-03-11", @@ -4832,7 +4832,7 @@ } ], "head": "38050001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38050001-03981702.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38050001-03981702.png", "name": "Daijobu", "release": { "au": null, @@ -4886,7 +4886,7 @@ } ], "head": "02d90001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02d90001-01c80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02d90001-01c80502.png", "name": "Bruce", "release": { "au": "2016-06-18", @@ -4940,7 +4940,7 @@ } ], "head": "040f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_040f0001-01500502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_040f0001-01500502.png", "name": "Bree", "release": { "au": "2016-03-19", @@ -4994,7 +4994,7 @@ } ], "head": "04fd0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04fd0001-007b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04fd0001-007b0502.png", "name": "Bangle", "release": { "au": "2015-10-03", @@ -5048,7 +5048,7 @@ } ], "head": "02820001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02820001-01810502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02820001-01810502.png", "name": "Stitches", "release": { "au": "2016-06-18", @@ -5102,7 +5102,7 @@ } ], "head": "045f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_045f0001-01a80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_045f0001-01a80502.png", "name": "Aurora", "release": { "au": "2016-06-18", @@ -5156,7 +5156,7 @@ } ], "head": "046a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_046a0001-01d00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_046a0001-01d00502.png", "name": "Iggly", "release": { "au": "2016-06-18", @@ -5210,7 +5210,7 @@ } ], "head": "02520001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02520001-00fe0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02520001-00fe0502.png", "name": "Vic", "release": { "au": "2015-11-21", @@ -5252,7 +5252,7 @@ } ], "head": "35090100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35090100-042b1802.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35090100-042b1802.png", "name": "Palico", "release": { "au": "2022-06-30", @@ -5370,7 +5370,7 @@ } ], "head": "00000003", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000003-0430ff02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000003-0430ff02.png", "name": "Golden - Power Up Band", "release": { "au": null, @@ -5424,7 +5424,7 @@ } ], "head": "044c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_044c0001-008e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_044c0001-008e0502.png", "name": "Amelia", "release": { "au": "2015-10-03", @@ -5478,7 +5478,7 @@ } ], "head": "03130001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03130001-01210502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03130001-01210502.png", "name": "Miranda", "release": { "au": "2016-03-19", @@ -5532,7 +5532,7 @@ } ], "head": "01a50001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a50001-01720502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a50001-01720502.png", "name": "Katrina", "release": { "au": "2016-06-18", @@ -5574,7 +5574,7 @@ } ], "head": "0a0c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0c0001-03c30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0c0001-03c30502.png", "name": "Audie", "release": { "au": "2021-11-05", @@ -5591,7 +5591,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c80501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c80501-02950e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c80501-02950e02.png", "name": "Diddy Kong - Horse Racing", "release": { "au": "2017-03-11", @@ -5645,7 +5645,7 @@ } ], "head": "03070001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03070001-00640502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03070001-00640502.png", "name": "Bill", "release": { "au": "2015-10-03", @@ -5699,7 +5699,7 @@ } ], "head": "022f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_022f0001-011e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_022f0001-011e0502.png", "name": "Anchovy", "release": { "au": "2016-03-19", @@ -5741,7 +5741,7 @@ } ], "head": "0a050001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a050001-03b80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a050001-03b80502.png", "name": "Harvey", "release": { "au": "2021-11-05", @@ -5915,7 +5915,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-03530902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-03530902.png", "name": "Link - Archer", "release": { "au": "2017-03-03", @@ -5969,7 +5969,7 @@ } ], "head": "01860101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01860101-00af0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01860101-00af0502.png", "name": "Tommy - Uniform", "release": { "au": "2015-11-21", @@ -6047,7 +6047,7 @@ } ], "head": "08050100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08050100-038e0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08050100-038e0402.png", "name": "Octoling Girl", "release": { "au": "2018-11-11", @@ -6209,7 +6209,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-034f0902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-034f0902.png", "name": "8-Bit Link", "release": { "au": "2016-12-03", @@ -6263,7 +6263,7 @@ } ], "head": "04820001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04820001-02fd0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04820001-02fd0502.png", "name": "Maggie", "release": { "au": "2016-11-10", @@ -6365,7 +6365,7 @@ } ], "head": "34800000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_34800000-03791502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_34800000-03791502.png", "name": "Mega Man", "release": { "au": null, @@ -6407,7 +6407,7 @@ } ], "head": "0a000001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a000001-03ab0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a000001-03ab0502.png", "name": "Orville", "release": { "au": "2021-11-05", @@ -6465,7 +6465,7 @@ } ], "head": "032e0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_032e0101-031c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_032e0101-031c0502.png", "name": "Chai", "release": { "au": null, @@ -6507,7 +6507,7 @@ } ], "head": "0a0b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0b0001-03c20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0b0001-03c20502.png", "name": "Dom", "release": { "au": "2021-11-05", @@ -6573,7 +6573,7 @@ } ], "head": "01960000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01960000-024e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01960000-024e0502.png", "name": "Kapp'n", "release": { "au": "2016-03-19", @@ -6627,7 +6627,7 @@ } ], "head": "040d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_040d0001-00780502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_040d0001-00780502.png", "name": "Limberg", "release": { "au": "2015-10-03", @@ -6681,7 +6681,7 @@ } ], "head": "03120001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03120001-03090502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03120001-03090502.png", "name": "Weber", "release": { "au": "2016-11-10", @@ -6735,7 +6735,7 @@ } ], "head": "04940001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04940001-009a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04940001-009a0502.png", "name": "Bunnie", "release": { "au": "2015-10-03", @@ -6789,7 +6789,7 @@ } ], "head": "00800102", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00800102-035d0302.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00800102-035d0302.png", "name": "Poochy", "release": { "au": "2017-02-04", @@ -6806,7 +6806,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c60301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c60301-02890e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c60301-02890e02.png", "name": "Waluigi - Tennis", "release": { "au": "2017-03-11", @@ -6860,7 +6860,7 @@ } ], "head": "01a00001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a00001-010f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a00001-010f0502.png", "name": "Pelly", "release": { "au": "2016-03-19", @@ -6914,7 +6914,7 @@ } ], "head": "033a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033a0001-01cc0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033a0001-01cc0502.png", "name": "Frobert", "release": { "au": "2016-06-18", @@ -6931,7 +6931,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09ce0501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ce0501-02b30e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ce0501-02b30e02.png", "name": "Birdo - Horse Racing", "release": { "au": "2017-03-11", @@ -6985,7 +6985,7 @@ } ], "head": "04ea0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ea0001-03180502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ea0001-03180502.png", "name": "Tasha", "release": { "au": "2016-11-10", @@ -7039,7 +7039,7 @@ } ], "head": "022e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_022e0001-01d30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_022e0001-01d30502.png", "name": "Robin", "release": { "au": "2016-06-18", @@ -7093,7 +7093,7 @@ } ], "head": "02c30001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02c30001-00dc0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02c30001-00dc0502.png", "name": "Alfonso", "release": { "au": "2015-11-21", @@ -7147,7 +7147,7 @@ } ], "head": "023e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_023e0001-00d10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_023e0001-00d10502.png", "name": "Peck", "release": { "au": "2015-11-21", @@ -7164,7 +7164,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cd0201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cd0201-02ab0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cd0201-02ab0e02.png", "name": "Baby Luigi - Baseball", "release": { "au": "2017-03-11", @@ -7254,7 +7254,7 @@ } ], "head": "00040000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00040000-02620102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00040000-02620102.png", "name": "Rosalina", "release": { "au": "2016-10-08", @@ -7320,7 +7320,7 @@ } ], "head": "018b0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018b0000-02460502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018b0000-02460502.png", "name": "Cyrus", "release": { "au": "2015-11-21", @@ -7374,7 +7374,7 @@ } ], "head": "04d00001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04d00001-01960502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04d00001-01960502.png", "name": "Frita", "release": { "au": "2016-06-18", @@ -7428,7 +7428,7 @@ } ], "head": "046d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_046d0001-00f30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_046d0001-00f30502.png", "name": "Sprinkle", "release": { "au": "2015-11-21", @@ -7482,7 +7482,7 @@ } ], "head": "040e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_040e0001-00880502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_040e0001-00880502.png", "name": "Bella", "release": { "au": "2015-10-03", @@ -7536,7 +7536,7 @@ } ], "head": "02cb0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02cb0001-01360502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02cb0001-01360502.png", "name": "Drago", "release": { "au": "2016-03-19", @@ -7590,7 +7590,7 @@ } ], "head": "01990001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01990001-01160502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01990001-01160502.png", "name": "Grams", "release": { "au": "2016-03-19", @@ -7656,7 +7656,7 @@ } ], "head": "21050000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21050000-025a0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21050000-025a0002.png", "name": "Corrin", "release": { "au": "2017-07-22", @@ -7710,7 +7710,7 @@ } ], "head": "04a30001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a30001-01c90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a30001-01c90502.png", "name": "OHare", "release": { "au": "2016-06-18", @@ -7740,7 +7740,7 @@ } ], "head": "07410000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07410000-00200002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07410000-00200002.png", "name": "Dark Pit", "release": { "au": "2015-07-04", @@ -7818,7 +7818,7 @@ } ], "head": "00040100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00040100-00130002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00040100-00130002.png", "name": "Rosalina & Luma", "release": { "au": "2015-01-29", @@ -7872,7 +7872,7 @@ } ], "head": "01a80001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a80001-004f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a80001-004f0502.png", "name": "Redd", "release": { "au": "2015-10-03", @@ -7938,7 +7938,7 @@ } ], "head": "01880000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01880000-02410502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01880000-02410502.png", "name": "Mabel", "release": { "au": "2015-11-21", @@ -7992,7 +7992,7 @@ } ], "head": "03850001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03850001-01060502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03850001-01060502.png", "name": "Hamphrey", "release": { "au": "2015-11-21", @@ -8046,7 +8046,7 @@ } ], "head": "01ab0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01ab0001-017c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01ab0001-017c0502.png", "name": "Pave", "release": { "au": "2016-06-18", @@ -8063,7 +8063,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c50101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c50101-02820e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c50101-02820e02.png", "name": "Wario - Soccer", "release": { "au": "2017-03-11", @@ -8117,7 +8117,7 @@ } ], "head": "02c40001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02c40001-00670502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02c40001-00670502.png", "name": "Alli", "release": { "au": "2015-10-03", @@ -8134,7 +8134,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c40401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c40401-02800e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c40401-02800e02.png", "name": "Yoshi - Golf", "release": { "au": "2017-03-11", @@ -8188,7 +8188,7 @@ } ], "head": "02ee0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ee0001-01990502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ee0001-01990502.png", "name": "Bones", "release": { "au": "2016-06-18", @@ -8266,7 +8266,7 @@ } ], "head": "05c40000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c40000-04131302.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c40000-04131302.png", "name": "E.M.M.I.", "release": { "au": "2021-10-08", @@ -8440,7 +8440,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-03540902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-03540902.png", "name": "Link - Rider", "release": { "au": "2017-03-03", @@ -8494,7 +8494,7 @@ } ], "head": "04980001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04980001-014a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04980001-014a0502.png", "name": "Gaston", "release": { "au": "2016-03-19", @@ -8548,7 +8548,7 @@ } ], "head": "03180001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03180001-006c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03180001-006c0502.png", "name": "Quillson", "release": { "au": "2015-10-03", @@ -8565,7 +8565,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09d10101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d10101-02be0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d10101-02be0e02.png", "name": "Pink Gold Peach - Soccer", "release": { "au": "2017-03-11", @@ -8595,7 +8595,7 @@ } ], "head": "07000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07000000-00070002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07000000-00070002.png", "name": "Wii Fit Trainer", "release": { "au": "2014-11-29", @@ -8673,7 +8673,7 @@ } ], "head": "00070000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00070000-001a0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00070000-001a0002.png", "name": "Wario", "release": { "au": "2015-04-25", @@ -8703,7 +8703,7 @@ } ], "head": "22c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22c00000-003a0202.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22c00000-003a0202.png", "name": "Chibi Robo", "release": { "au": "2015-11-07", @@ -8769,7 +8769,7 @@ } ], "head": "00090000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00090000-000d0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00090000-000d0002.png", "name": "Diddy Kong", "release": { "au": "2014-12-12", @@ -8823,7 +8823,7 @@ } ], "head": "35050000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35050000-040c0f02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35050000-040c0f02.png", "name": "Razewing Ratha", "release": { "au": "2021-07-09", @@ -8877,7 +8877,7 @@ } ], "head": "01ac0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01ac0001-017f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01ac0001-017f0502.png", "name": "Zipper", "release": { "au": "2016-06-18", @@ -8931,7 +8931,7 @@ } ], "head": "044d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_044d0001-01930502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_044d0001-01930502.png", "name": "Pierce", "release": { "au": "2016-06-18", @@ -8961,7 +8961,7 @@ } ], "head": "38010001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38010001-03941702.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38010001-03941702.png", "name": "Ikari", "release": { "au": null, @@ -9135,7 +9135,7 @@ } ], "head": "01000100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000100-03500902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000100-03500902.png", "name": "Toon Link - The Wind Waker", "release": { "au": "2016-12-03", @@ -9165,7 +9165,7 @@ } ], "head": "36400000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_36400000-03a20002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_36400000-03a20002.png", "name": "Hero", "release": { "au": "2020-09-25", @@ -9219,7 +9219,7 @@ } ], "head": "01960001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01960001-00480502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01960001-00480502.png", "name": "Kapp'n", "release": { "au": "2015-10-03", @@ -9321,7 +9321,7 @@ } ], "head": "00010003", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00010003-039cff02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00010003-039cff02.png", "name": "Luigi - Power Up Band", "release": { "au": null, @@ -9411,7 +9411,7 @@ } ], "head": "08000100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000100-003e0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000100-003e0402.png", "name": "Inkling Girl", "release": { "au": "2015-05-30", @@ -9465,7 +9465,7 @@ } ], "head": "050c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_050c0001-01c10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_050c0001-01c10502.png", "name": "Lobo", "release": { "au": "2016-06-18", @@ -9627,7 +9627,7 @@ } ], "head": "01010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010000-03560902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010000-03560902.png", "name": "Zelda", "release": { "au": "2017-03-03", @@ -9705,7 +9705,7 @@ } ], "head": "35020100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35020100-02e40f02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35020100-02e40f02.png", "name": "Rathian and Cheval", "release": { "au": null, @@ -9722,7 +9722,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c60501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c60501-028b0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c60501-028b0e02.png", "name": "Waluigi - Horse Racing", "release": { "au": "2017-03-11", @@ -9764,7 +9764,7 @@ } ], "head": "0a180001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a180001-03cf0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a180001-03cf0502.png", "name": "Quinn", "release": { "au": "2021-11-05", @@ -9818,7 +9818,7 @@ } ], "head": "018c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018c0001-004c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018c0001-004c0502.png", "name": "Digby", "release": { "au": "2015-10-03", @@ -9980,7 +9980,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-037c0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-037c0002.png", "name": "Young Link", "release": { "au": "2019-04-12", @@ -10034,7 +10034,7 @@ } ], "head": "03430001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03430001-02ef0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03430001-02ef0502.png", "name": "Huck", "release": { "au": "2016-11-10", @@ -10088,7 +10088,7 @@ } ], "head": "04500001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04500001-00cf0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04500001-00cf0502.png", "name": "Avery", "release": { "au": "2015-11-21", @@ -10142,7 +10142,7 @@ } ], "head": "03d30001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d30001-02f30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d30001-02f30502.png", "name": "Carrie", "release": { "au": "2016-11-10", @@ -10196,7 +10196,7 @@ } ], "head": "02610001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02610001-00650502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02610001-00650502.png", "name": "Kiki", "release": { "au": "2015-10-03", @@ -10274,7 +10274,7 @@ } ], "head": "01810000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810000-024b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810000-024b0502.png", "name": "Isabelle - Summer Outfit", "release": { "au": "2016-03-19", @@ -10328,7 +10328,7 @@ } ], "head": "03da0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03da0001-01510502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03da0001-01510502.png", "name": "Rooney", "release": { "au": "2016-03-19", @@ -10382,7 +10382,7 @@ } ], "head": "02190001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02190001-007e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02190001-007e0502.png", "name": "Nate", "release": { "au": "2015-10-03", @@ -10399,7 +10399,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09d00101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d00101-02b90e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d00101-02b90e02.png", "name": "Metal Mario - Soccer", "release": { "au": "2017-03-11", @@ -10453,7 +10453,7 @@ } ], "head": "049a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049a0001-014e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049a0001-014e0502.png", "name": "Pippy", "release": { "au": "2016-03-19", @@ -10555,7 +10555,7 @@ } ], "head": "00030000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030000-00020002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030000-00020002.png", "name": "Yoshi", "release": { "au": "2014-11-29", @@ -10572,7 +10572,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09ce0301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ce0301-02b10e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ce0301-02b10e02.png", "name": "Birdo - Tennis", "release": { "au": "2017-03-11", @@ -10614,7 +10614,7 @@ } ], "head": "22420000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22420000-041f0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22420000-041f0002.png", "name": "Mythra", "release": { "au": "2023-07-21", @@ -10668,7 +10668,7 @@ } ], "head": "03720001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03720001-010b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03720001-010b0502.png", "name": "Rocket", "release": { "au": "2015-11-21", @@ -10722,7 +10722,7 @@ } ], "head": "03ac0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ac0001-01880502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ac0001-01880502.png", "name": "Peaches", "release": { "au": "2016-06-18", @@ -10776,7 +10776,7 @@ } ], "head": "02a60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02a60001-01240502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02a60001-01240502.png", "name": "Ken", "release": { "au": "2016-03-19", @@ -10854,7 +10854,7 @@ } ], "head": "08000200", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000200-003f0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000200-003f0402.png", "name": "Inkling Boy", "release": { "au": "2015-05-30", @@ -10980,7 +10980,7 @@ } ], "head": "00010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00010000-00350102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00010000-00350102.png", "name": "Luigi", "release": { "au": "2015-03-21", @@ -11034,7 +11034,7 @@ } ], "head": "019a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019a0001-00b70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019a0001-00b70502.png", "name": "Chip", "release": { "au": "2015-11-21", @@ -11088,7 +11088,7 @@ } ], "head": "04ff0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ff0001-01620502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ff0001-01620502.png", "name": "Claudia", "release": { "au": "2016-03-19", @@ -11142,7 +11142,7 @@ } ], "head": "041c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_041c0001-01410502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_041c0001-01410502.png", "name": "Greta", "release": { "au": "2016-03-19", @@ -11220,7 +11220,7 @@ } ], "head": "21070000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21070000-03611202.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21070000-03611202.png", "name": "Celica", "release": { "au": "2017-05-20", @@ -11274,7 +11274,7 @@ } ], "head": "030b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030b0001-00790502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030b0001-00790502.png", "name": "Deena", "release": { "au": "2015-10-03", @@ -11304,7 +11304,7 @@ } ], "head": "19020000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19020000-03830002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19020000-03830002.png", "name": "Ivysaur", "release": { "au": "2019-09-20", @@ -11358,7 +11358,7 @@ } ], "head": "04df0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04df0001-00e80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04df0001-00e80502.png", "name": "Filbert", "release": { "au": "2015-11-21", @@ -11412,7 +11412,7 @@ } ], "head": "035c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_035c0001-01290502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_035c0001-01290502.png", "name": "Velma", "release": { "au": "2016-03-19", @@ -11466,7 +11466,7 @@ } ], "head": "02210001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02210001-013c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02210001-013c0502.png", "name": "Beardo", "release": { "au": "2016-03-19", @@ -11508,7 +11508,7 @@ } ], "head": "0a1e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1e0001-03d50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1e0001-03d50502.png", "name": "Azalea", "release": { "au": "2021-11-05", @@ -11586,7 +11586,7 @@ } ], "head": "05c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c00000-00060002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c00000-00060002.png", "name": "Samus", "release": { "au": "2014-11-29", @@ -11616,7 +11616,7 @@ } ], "head": "37c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_37c00000-038b0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_37c00000-038b0002.png", "name": "Simon", "release": { "au": "2019-11-15", @@ -11658,7 +11658,7 @@ } ], "head": "35080000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35080000-040f1802.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35080000-040f1802.png", "name": "Magnamalo", "release": { "au": "2021-03-26", @@ -11675,7 +11675,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cf0301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cf0301-02b60e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cf0301-02b60e02.png", "name": "Rosalina - Tennis", "release": { "au": "2017-03-11", @@ -11692,7 +11692,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cb0401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cb0401-02a30e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cb0401-02a30e02.png", "name": "Boo - Golf", "release": { "au": "2017-03-11", @@ -11746,7 +11746,7 @@ } ], "head": "03ff0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ff0001-00f40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ff0001-00f40502.png", "name": "Flip", "release": { "au": "2015-11-21", @@ -11800,7 +11800,7 @@ } ], "head": "04ef0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ef0001-013b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ef0001-013b0502.png", "name": "Hazel", "release": { "au": "2016-03-19", @@ -11854,7 +11854,7 @@ } ], "head": "03920001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03920001-01270502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03920001-01270502.png", "name": "Bubbles", "release": { "au": "2016-03-19", @@ -11908,7 +11908,7 @@ } ], "head": "03a70001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a70001-01a10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a70001-01a10502.png", "name": "Elmer", "release": { "au": "2016-06-18", @@ -11962,7 +11962,7 @@ } ], "head": "02c50001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02c50001-03080502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02c50001-03080502.png", "name": "Boots", "release": { "au": "2016-11-10", @@ -12068,7 +12068,7 @@ } ], "head": "0005ff00", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0005ff00-023a0702.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0005ff00-023a0702.png", "name": "Hammer Slam Bowser", "release": { "au": "2015-09-24", @@ -12122,7 +12122,7 @@ } ], "head": "02f40001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f40001-03050502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f40001-03050502.png", "name": "Bea", "release": { "au": "2016-11-10", @@ -12176,7 +12176,7 @@ } ], "head": "036b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_036b0001-018b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_036b0001-018b0502.png", "name": "Boone", "release": { "au": "2016-06-18", @@ -12218,7 +12218,7 @@ } ], "head": "0a080001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a080001-03bd0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a080001-03bd0502.png", "name": "Wardell", "release": { "au": "2021-11-05", @@ -12260,7 +12260,7 @@ } ], "head": "0a160001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a160001-03cd0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a160001-03cd0502.png", "name": "Petri", "release": { "au": "2021-11-05", @@ -12302,7 +12302,7 @@ } ], "head": "0a1b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1b0001-03d20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1b0001-03d20502.png", "name": "Ace", "release": { "au": "2021-11-05", @@ -12332,7 +12332,7 @@ } ], "head": "07c00100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07c00100-00220002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07c00100-00220002.png", "name": "Mii Swordfighter", "release": { "au": "2015-09-26", @@ -12362,7 +12362,7 @@ } ], "head": "38420001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38420001-04261902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38420001-04261902.png", "name": "Gakuto S\u014dgetsu", "release": { "au": null, @@ -12392,7 +12392,7 @@ } ], "head": "3c800000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3c800000-03a40002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3c800000-03a40002.png", "name": "Terry", "release": { "au": "2021-03-26", @@ -12409,7 +12409,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c30501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c30501-027c0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c30501-027c0e02.png", "name": "Daisy - Horse Racing", "release": { "au": "2017-03-11", @@ -12439,7 +12439,7 @@ } ], "head": "37800000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_37800000-038a0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_37800000-038a0002.png", "name": "Snake", "release": { "au": "2019-09-20", @@ -12493,7 +12493,7 @@ } ], "head": "01ae0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01ae0001-011b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01ae0001-011b0502.png", "name": "Franklin", "release": { "au": "2016-03-19", @@ -12523,7 +12523,7 @@ } ], "head": "1d010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1d010000-03750d02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1d010000-03750d02.png", "name": "Detective Pikachu", "release": { "au": "2018-03-24", @@ -12577,7 +12577,7 @@ } ], "head": "04620001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04620001-00f60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04620001-00f60502.png", "name": "Hopper", "release": { "au": "2015-11-21", @@ -12619,7 +12619,7 @@ } ], "head": "350a0100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_350a0100-042c1802.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_350a0100-042c1802.png", "name": "Palamute", "release": { "au": "2022-06-30", @@ -12673,7 +12673,7 @@ } ], "head": "03af0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03af0001-012c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03af0001-012c0502.png", "name": "Colton", "release": { "au": "2016-03-19", @@ -12727,7 +12727,7 @@ } ], "head": "04400001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04400001-00ca0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04400001-00ca0502.png", "name": "Phoebe", "release": { "au": "2015-11-21", @@ -12781,7 +12781,7 @@ } ], "head": "021c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021c0001-02f70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021c0001-02f70502.png", "name": "Ursala", "release": { "au": "2016-11-10", @@ -12835,7 +12835,7 @@ } ], "head": "02ca0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ca0001-01ca0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ca0001-01ca0502.png", "name": "Gayle", "release": { "au": "2016-06-18", @@ -12925,7 +12925,7 @@ } ], "head": "00130000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00130000-037a0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00130000-037a0002.png", "name": "Daisy", "release": { "au": "2019-04-12", @@ -12979,7 +12979,7 @@ } ], "head": "047c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_047c0001-01a00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_047c0001-01a00502.png", "name": "Lucy", "release": { "au": "2016-06-18", @@ -13033,7 +13033,7 @@ } ], "head": "04eb0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04eb0001-02f00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04eb0001-02f00502.png", "name": "Sylvana", "release": { "au": "2016-11-10", @@ -13087,7 +13087,7 @@ } ], "head": "03580001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03580001-02fa0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03580001-02fa0502.png", "name": "Billy", "release": { "au": "2016-11-10", @@ -13141,7 +13141,7 @@ } ], "head": "021b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021b0001-00800502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021b0001-00800502.png", "name": "Tutu", "release": { "au": "2015-10-03", @@ -13183,7 +13183,7 @@ } ], "head": "0a070001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a070001-03bc0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a070001-03bc0502.png", "name": "Niko", "release": { "au": "2021-11-05", @@ -13237,7 +13237,7 @@ } ], "head": "021d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021d0001-01cd0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021d0001-01cd0502.png", "name": "Grizzly", "release": { "au": "2016-06-18", @@ -13303,7 +13303,7 @@ } ], "head": "01810001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810001-00440502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810001-00440502.png", "name": "Isabelle", "release": { "au": "2015-10-03", @@ -13357,7 +13357,7 @@ } ], "head": "04a20001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a20001-02e80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a20001-02e80502.png", "name": "Hopkins", "release": { "au": "2016-11-10", @@ -13411,7 +13411,7 @@ } ], "head": "03110001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03110001-00d60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03110001-00d60502.png", "name": "Scoot", "release": { "au": "2015-11-21", @@ -13465,7 +13465,7 @@ } ], "head": "03bf0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03bf0001-01bc0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03bf0001-01bc0502.png", "name": "Sydney", "release": { "au": "2016-06-18", @@ -13519,7 +13519,7 @@ } ], "head": "04140001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04140001-030a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04140001-030a0502.png", "name": "Candi", "release": { "au": "2016-11-10", @@ -13577,7 +13577,7 @@ } ], "head": "04d30101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04d30101-031b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04d30101-031b0502.png", "name": "\u00c9toile", "release": { "au": null, @@ -13631,7 +13631,7 @@ } ], "head": "03290001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03290001-009d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03290001-009d0502.png", "name": "Axel", "release": { "au": "2015-10-03", @@ -13685,7 +13685,7 @@ } ], "head": "04fb0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04fb0001-01c60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04fb0001-01c60502.png", "name": "Rowan", "release": { "au": "2016-06-18", @@ -13739,7 +13739,7 @@ } ], "head": "025f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_025f0001-01d70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_025f0001-01d70502.png", "name": "Rosie - Amiibo Festival", "release": { "au": "2015-11-21", @@ -13805,7 +13805,7 @@ } ], "head": "01940000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01940000-024a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01940000-024a0502.png", "name": "Kicks", "release": { "au": "2016-01-30", @@ -13883,7 +13883,7 @@ } ], "head": "35000200", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35000200-02e20f02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35000200-02e20f02.png", "name": "One-Eyed Rathalos and Rider - Female", "release": { "au": null, @@ -13937,7 +13937,7 @@ } ], "head": "019d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019d0001-00ac0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019d0001-00ac0502.png", "name": "Copper", "release": { "au": "2015-11-21", @@ -13979,7 +13979,7 @@ } ], "head": "02330001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02330001-03060502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02330001-03060502.png", "name": "Admiral", "release": { "au": "2016-11-10", @@ -14033,7 +14033,7 @@ } ], "head": "043c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_043c0001-01cb0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_043c0001-01cb0502.png", "name": "Cranston", "release": { "au": "2016-06-18", @@ -14063,7 +14063,7 @@ } ], "head": "05840000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05840000-037e0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05840000-037e0002.png", "name": "Wolf", "release": { "au": "2018-12-07", @@ -14117,7 +14117,7 @@ } ], "head": "037f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_037f0001-01aa0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_037f0001-01aa0502.png", "name": "Apple", "release": { "au": "2016-06-18", @@ -14195,7 +14195,7 @@ } ], "head": "018e0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018e0000-02490502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018e0000-02490502.png", "name": "Resetti", "release": { "au": "2016-01-30", @@ -14212,7 +14212,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c30101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c30101-02780e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c30101-02780e02.png", "name": "Daisy - Soccer", "release": { "au": "2017-03-11", @@ -14242,7 +14242,7 @@ } ], "head": "19190000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19190000-00090002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19190000-00090002.png", "name": "Pikachu", "release": { "au": "2014-11-29", @@ -14296,7 +14296,7 @@ } ], "head": "03fd0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03fd0001-01580502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03fd0001-01580502.png", "name": "Monty", "release": { "au": "2016-03-19", @@ -14350,7 +14350,7 @@ } ], "head": "02060001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02060001-03120502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02060001-03120502.png", "name": "Snooty", "release": { "au": "2016-11-10", @@ -14464,7 +14464,7 @@ } ], "head": "00030102", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030102-023e0302.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030102-023e0302.png", "name": "Mega Yarn Yoshi", "release": { "au": "2015-11-28", @@ -14518,7 +14518,7 @@ } ], "head": "02a30001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02a30001-02ff0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02a30001-02ff0502.png", "name": "Plucky", "release": { "au": "2016-11-10", @@ -14572,7 +14572,7 @@ } ], "head": "049c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049c0001-01400502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049c0001-01400502.png", "name": "Genji", "release": { "au": "2016-03-19", @@ -14626,7 +14626,7 @@ } ], "head": "01850001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01850001-004b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01850001-004b0502.png", "name": "Timmy", "release": { "au": "2015-10-03", @@ -14680,7 +14680,7 @@ } ], "head": "03140001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03140001-02f40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03140001-02f40502.png", "name": "Ketchup", "release": { "au": "2016-11-10", @@ -14830,7 +14830,7 @@ } ], "head": "01030000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01030000-024f0902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01030000-024f0902.png", "name": "Midna & Wolf Link", "release": { "au": "2016-03-05", @@ -14944,7 +14944,7 @@ } ], "head": "00010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00010000-000c0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00010000-000c0002.png", "name": "Luigi", "release": { "au": "2014-12-12", @@ -14998,7 +14998,7 @@ } ], "head": "01890101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01890101-03b10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01890101-03b10502.png", "name": "Label", "release": { "au": "2021-11-05", @@ -15028,7 +15028,7 @@ } ], "head": "3dc00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3dc00000-04220002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3dc00000-04220002.png", "name": "Steve", "release": { "au": "2022-09-09", @@ -15098,7 +15098,7 @@ } ], "head": "01840000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01840000-024d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01840000-024d0502.png", "name": "Timmy & Tommy", "release": { "au": "2016-03-19", @@ -15176,7 +15176,7 @@ } ], "head": "21000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21000000-000b0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21000000-000b0002.png", "name": "Marth", "release": { "au": "2014-11-29", @@ -15230,7 +15230,7 @@ } ], "head": "01950001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01950001-00b00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01950001-00b00502.png", "name": "Porter", "release": { "au": "2015-11-21", @@ -15344,7 +15344,7 @@ } ], "head": "00030000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030000-00370102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030000-00370102.png", "name": "Yoshi", "release": { "au": "2015-03-21", @@ -15398,7 +15398,7 @@ } ], "head": "030f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030f0001-016d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030f0001-016d0502.png", "name": "Derwin", "release": { "au": "2016-03-19", @@ -15428,7 +15428,7 @@ } ], "head": "07810000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07810000-002e0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07810000-002e0002.png", "name": "R.O.B. - Famicom", "release": { "au": "2016-03-19", @@ -15458,7 +15458,7 @@ } ], "head": "36000100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_36000100-03620002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_36000100-03620002.png", "name": "Cloud - Player 2", "release": { "au": "2017-07-22", @@ -15512,7 +15512,7 @@ } ], "head": "02090001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02090001-019f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02090001-019f0502.png", "name": "Olaf", "release": { "au": "2016-06-18", @@ -15566,7 +15566,7 @@ } ], "head": "04b30001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04b30001-00dd0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04b30001-00dd0502.png", "name": "Rhonda", "release": { "au": "2015-11-21", @@ -15583,7 +15583,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c60401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c60401-028a0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c60401-028a0e02.png", "name": "Waluigi - Golf", "release": { "au": "2017-03-11", @@ -15665,7 +15665,7 @@ } ], "head": "21080000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21080000-036f1202.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21080000-036f1202.png", "name": "Chrom", "release": { "au": "2017-10-20", @@ -15682,7 +15682,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09ce0401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ce0401-02b20e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ce0401-02b20e02.png", "name": "Birdo - Golf", "release": { "au": "2017-03-11", @@ -15699,7 +15699,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c50401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c50401-02850e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c50401-02850e02.png", "name": "Wario - Golf", "release": { "au": "2017-03-11", @@ -15753,7 +15753,7 @@ } ], "head": "03690001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03690001-00d30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03690001-00d30502.png", "name": "Cesar", "release": { "au": "2015-11-21", @@ -15783,7 +15783,7 @@ } ], "head": "33800000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_33800000-03781402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_33800000-03781402.png", "name": "Solaire of Astora", "release": { "au": "2018-10-19", @@ -15813,7 +15813,7 @@ } ], "head": "38440001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38440001-04281902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38440001-04281902.png", "name": "Roa Kirishima", "release": { "au": null, @@ -15867,7 +15867,7 @@ } ], "head": "02150001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02150001-01820502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02150001-01820502.png", "name": "Pinky", "release": { "au": "2016-06-18", @@ -15921,7 +15921,7 @@ } ], "head": "02860001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02860001-03130502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02860001-03130502.png", "name": "Olive", "release": { "au": "2016-11-10", @@ -15951,7 +15951,7 @@ } ], "head": "078f0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_078f0000-03810002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_078f0000-03810002.png", "name": "Ice Climbers", "release": { "au": "2019-02-15", @@ -15981,7 +15981,7 @@ } ], "head": "38460001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38460001-042a1902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38460001-042a1902.png", "name": "Asana Mutsuba", "release": { "au": null, @@ -16035,7 +16035,7 @@ } ], "head": "01830101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01830101-010e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01830101-010e0502.png", "name": "Tom Nook - Jacket", "release": { "au": "2016-03-19", @@ -16089,7 +16089,7 @@ } ], "head": "04160001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04160001-00fb0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04160001-00fb0502.png", "name": "Anicotti", "release": { "au": "2015-11-21", @@ -16106,7 +16106,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c00101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c00101-02690e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c00101-02690e02.png", "name": "Mario - Soccer", "release": { "au": "2017-03-11", @@ -16160,7 +16160,7 @@ } ], "head": "03490001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03490001-018d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03490001-018d0502.png", "name": "Croque", "release": { "au": "2016-06-18", @@ -16298,7 +16298,7 @@ } ], "head": "01050000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01050000-03580902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01050000-03580902.png", "name": "Daruk", "release": { "au": "2017-11-10", @@ -16352,7 +16352,7 @@ } ], "head": "04860001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04860001-00fc0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04860001-00fc0502.png", "name": "Chops", "release": { "au": "2015-11-21", @@ -16446,7 +16446,7 @@ } ], "head": "35c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35c00000-03920a02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35c00000-03920a02.png", "name": "Shovel Knight - Gold Edition", "release": { "au": null, @@ -16612,7 +16612,7 @@ } ], "head": "00050000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00050000-03730102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00050000-03730102.png", "name": "Bowser - Wedding", "release": { "au": "2017-10-27", @@ -16666,7 +16666,7 @@ } ], "head": "01820101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01820101-00460502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01820101-00460502.png", "name": "DJ KK", "release": { "au": "2015-10-03", @@ -16720,7 +16720,7 @@ } ], "head": "01a60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a60001-03b70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a60001-03b70502.png", "name": "Saharah", "release": { "au": "2021-11-05", @@ -16774,7 +16774,7 @@ } ], "head": "02310001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02310001-006a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02310001-006a0502.png", "name": "Jitters", "release": { "au": "2015-10-03", @@ -16912,7 +16912,7 @@ } ], "head": "01070000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01070000-035a0902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01070000-035a0902.png", "name": "Mipha", "release": { "au": "2017-11-10", @@ -16966,7 +16966,7 @@ } ], "head": "35070000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35070000-040e0f02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35070000-040e0f02.png", "name": "Tsukino", "release": { "au": "2021-07-09", @@ -17020,7 +17020,7 @@ } ], "head": "02510001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02510001-00c10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02510001-00c10502.png", "name": "Coach", "release": { "au": "2015-11-21", @@ -17074,7 +17074,7 @@ } ], "head": "02df0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02df0001-01910502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02df0001-01910502.png", "name": "Erik", "release": { "au": "2016-06-18", @@ -17128,7 +17128,7 @@ } ], "head": "03fc0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03fc0001-01470502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03fc0001-01470502.png", "name": "Tammi", "release": { "au": "2016-03-19", @@ -17182,7 +17182,7 @@ } ], "head": "03480001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03480001-006b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03480001-006b0502.png", "name": "Gigi", "release": { "au": "2015-10-03", @@ -17236,7 +17236,7 @@ } ], "head": "02ed0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ed0001-015a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ed0001-015a0502.png", "name": "Biskit", "release": { "au": "2016-03-19", @@ -17266,7 +17266,7 @@ } ], "head": "34c10000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_34c10000-03890002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_34c10000-03890002.png", "name": "Ken", "release": { "au": "2019-04-12", @@ -17320,7 +17320,7 @@ } ], "head": "01870001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01870001-00470502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01870001-00470502.png", "name": "Sable", "release": { "au": "2015-10-03", @@ -17374,7 +17374,7 @@ } ], "head": "01900001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01900001-01710502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01900001-01710502.png", "name": "Brewster", "release": { "au": "2016-06-18", @@ -17428,7 +17428,7 @@ } ], "head": "03c50001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03c50001-015c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03c50001-015c0502.png", "name": "Lyman", "release": { "au": "2016-03-19", @@ -17482,7 +17482,7 @@ } ], "head": "02000001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02000001-00a10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02000001-00a10502.png", "name": "Cyrano", "release": { "au": "2015-10-03", @@ -17536,7 +17536,7 @@ } ], "head": "04180001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04180001-00d80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04180001-00d80502.png", "name": "Broccolo", "release": { "au": "2015-11-21", @@ -17590,7 +17590,7 @@ } ], "head": "03a90001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a90001-00710502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a90001-00710502.png", "name": "Winnie", "release": { "au": "2015-10-03", @@ -17644,7 +17644,7 @@ } ], "head": "02350001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02350001-00840502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02350001-00840502.png", "name": "Midge", "release": { "au": "2015-10-03", @@ -17698,7 +17698,7 @@ } ], "head": "04e80001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e80001-01ce0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e80001-01ce0502.png", "name": "Cally", "release": { "au": "2016-06-18", @@ -17776,7 +17776,7 @@ } ], "head": "35040100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35040100-02e60f02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35040100-02e60f02.png", "name": "Qurupeco and Dan", "release": { "au": null, @@ -17830,7 +17830,7 @@ } ], "head": "02830001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02830001-00c70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02830001-00c70502.png", "name": "Vladimir", "release": { "au": "2015-11-21", @@ -17884,7 +17884,7 @@ } ], "head": "03ea0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ea0001-030b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ea0001-030b0502.png", "name": "Leopold", "release": { "au": "2016-11-10", @@ -17938,7 +17938,7 @@ } ], "head": "030a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030a0001-01c70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030a0001-01c70502.png", "name": "Maelle", "release": { "au": "2016-06-18", @@ -18028,7 +18028,7 @@ } ], "head": "08010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08010000-025d0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08010000-025d0402.png", "name": "Callie", "release": { "au": "2016-07-09", @@ -18106,7 +18106,7 @@ } ], "head": "08010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08010000-04360402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08010000-04360402.png", "name": "Callie - Alterna", "release": { "au": "2024-09-05", @@ -18164,7 +18164,7 @@ } ], "head": "04a80101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a80101-031e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a80101-031e0502.png", "name": "Toby", "release": { "au": null, @@ -18218,7 +18218,7 @@ } ], "head": "04960001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04960001-00d90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04960001-00d90502.png", "name": "Coco", "release": { "au": "2015-11-21", @@ -18272,7 +18272,7 @@ } ], "head": "04390001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04390001-03110502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04390001-03110502.png", "name": "Sprocket", "release": { "au": "2016-11-10", @@ -18326,7 +18326,7 @@ } ], "head": "01ad0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01ad0001-00b80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01ad0001-00b80502.png", "name": "Jack", "release": { "au": "2015-11-21", @@ -18356,7 +18356,7 @@ } ], "head": "38000001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38000001-03931702.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38000001-03931702.png", "name": "Pawapuro", "release": { "au": null, @@ -18386,7 +18386,7 @@ } ], "head": "3b400000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3b400000-03a30002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3b400000-03a30002.png", "name": "Banjo & Kazooie", "release": { "au": "2021-03-26", @@ -18440,7 +18440,7 @@ } ], "head": "03d70001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d70001-01b40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d70001-01b40502.png", "name": "Sylvia", "release": { "au": "2016-06-18", @@ -18494,7 +18494,7 @@ } ], "head": "050e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_050e0001-00d70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_050e0001-00d70502.png", "name": "Whitney", "release": { "au": "2015-11-21", @@ -18548,7 +18548,7 @@ } ], "head": "01a80101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a80101-017e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a80101-017e0502.png", "name": "Redd - Shirt", "release": { "au": "2016-06-18", @@ -18578,7 +18578,7 @@ } ], "head": "0a400000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a400000-041d0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a400000-041d0002.png", "name": "Min Min", "release": { "au": "2022-04-29", @@ -18595,7 +18595,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c20101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c20101-02730e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c20101-02730e02.png", "name": "Peach - Soccer", "release": { "au": "2017-03-11", @@ -18637,7 +18637,7 @@ } ], "head": "0a090001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a090001-03c00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a090001-03c00502.png", "name": "Sherb", "release": { "au": "2021-11-05", @@ -18691,7 +18691,7 @@ } ], "head": "026a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026a0001-01460502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026a0001-01460502.png", "name": "Stinky", "release": { "au": "2016-03-19", @@ -18745,7 +18745,7 @@ } ], "head": "04a00001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a00001-016e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a00001-016e0502.png", "name": "Francine", "release": { "au": "2016-03-19", @@ -18799,7 +18799,7 @@ } ], "head": "04600001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04600001-00a50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04600001-00a50502.png", "name": "Roald", "release": { "au": "2015-10-03", @@ -18816,7 +18816,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cb0501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cb0501-02a40e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cb0501-02a40e02.png", "name": "Boo - Horse Racing", "release": { "au": "2017-03-11", @@ -18870,7 +18870,7 @@ } ], "head": "02680001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02680001-007d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02680001-007d0502.png", "name": "Monique", "release": { "au": "2015-10-03", @@ -18924,7 +18924,7 @@ } ], "head": "04fc0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04fc0001-02ee0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04fc0001-02ee0502.png", "name": "Tybalt", "release": { "au": "2016-11-10", @@ -18978,7 +18978,7 @@ } ], "head": "03be0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03be0001-01980502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03be0001-01980502.png", "name": "Melba", "release": { "au": "2016-06-18", @@ -18995,7 +18995,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c10101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c10101-026e0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c10101-026e0e02.png", "name": "Luigi - Soccer", "release": { "au": "2017-03-11", @@ -19077,7 +19077,7 @@ } ], "head": "21080000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21080000-03880002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21080000-03880002.png", "name": "Chrom", "release": { "au": "2019-11-15", @@ -19167,7 +19167,7 @@ } ], "head": "1f010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f010000-00270002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f010000-00270002.png", "name": "Meta Knight", "release": { "au": "2015-01-29", @@ -19221,7 +19221,7 @@ } ], "head": "04e10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e10001-01be0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e10001-01be0502.png", "name": "Nibbles", "release": { "au": "2016-06-18", @@ -19311,7 +19311,7 @@ } ], "head": "08020000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08020000-025e0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08020000-025e0402.png", "name": "Marie", "release": { "au": "2016-07-09", @@ -19389,7 +19389,7 @@ } ], "head": "08020000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08020000-04370402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08020000-04370402.png", "name": "Marie - Alterna", "release": { "au": "2024-09-05", @@ -19447,7 +19447,7 @@ } ], "head": "028f0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028f0101-031a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028f0101-031a0502.png", "name": "Marty", "release": { "au": null, @@ -19501,7 +19501,7 @@ } ], "head": "047d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_047d0001-012e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_047d0001-012e0502.png", "name": "Spork/Crackle", "release": { "au": "2016-03-19", @@ -19518,7 +19518,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cb0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cb0101-02a00e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cb0101-02a00e02.png", "name": "Boo - Soccer", "release": { "au": "2017-03-11", @@ -19608,7 +19608,7 @@ } ], "head": "35c30000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35c30000-036e0a02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35c30000-036e0a02.png", "name": "King Knight", "release": { "au": null, @@ -19698,7 +19698,7 @@ } ], "head": "08000300", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000300-00400402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000300-00400402.png", "name": "Inkling Squid", "release": { "au": "2015-05-30", @@ -19752,7 +19752,7 @@ } ], "head": "034b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_034b0001-009f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_034b0001-009f0502.png", "name": "Henry", "release": { "au": "2015-10-03", @@ -19818,7 +19818,7 @@ } ], "head": "01920000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01920000-02470502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01920000-02470502.png", "name": "Blathers", "release": { "au": "2016-01-30", @@ -19956,7 +19956,7 @@ } ], "head": "01080000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01080000-035b0902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01080000-035b0902.png", "name": "Revali", "release": { "au": "2017-11-10", @@ -20010,7 +20010,7 @@ } ], "head": "04cf0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04cf0001-00e10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04cf0001-00e10502.png", "name": "Timbra", "release": { "au": "2015-11-21", @@ -20064,7 +20064,7 @@ } ], "head": "03aa0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03aa0001-00e60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03aa0001-00e60502.png", "name": "Ed", "release": { "au": "2015-11-21", @@ -20118,7 +20118,7 @@ } ], "head": "01870001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01870001-03b00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01870001-03b00502.png", "name": "Sable", "release": { "au": "2021-11-05", @@ -20172,7 +20172,7 @@ } ], "head": "04530001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04530001-01040502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04530001-01040502.png", "name": "Keaton", "release": { "au": "2015-11-21", @@ -20226,7 +20226,7 @@ } ], "head": "047b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_047b0001-00f50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_047b0001-00f50502.png", "name": "Hugh", "release": { "au": "2015-11-21", @@ -20280,7 +20280,7 @@ } ], "head": "033d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033d0001-013a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033d0001-013a0502.png", "name": "Wart Jr.", "release": { "au": "2016-03-19", @@ -20322,7 +20322,7 @@ } ], "head": "01940001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01940001-00aa0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01940001-00aa0502.png", "name": "Kicks", "release": { "au": "2015-11-21", @@ -20376,7 +20376,7 @@ } ], "head": "01b10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b10001-00b20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b10001-00b20502.png", "name": "Shrunk", "release": { "au": "2015-11-21", @@ -20430,7 +20430,7 @@ } ], "head": "03c60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03c60001-00930502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03c60001-00930502.png", "name": "Eugene", "release": { "au": "2015-10-03", @@ -20484,7 +20484,7 @@ } ], "head": "04e00001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e00001-00f70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e00001-00f70502.png", "name": "Pecan", "release": { "au": "2015-11-21", @@ -20514,7 +20514,7 @@ } ], "head": "1ac00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1ac00000-00110002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1ac00000-00110002.png", "name": "Lucario", "release": { "au": "2015-01-29", @@ -20568,7 +20568,7 @@ } ], "head": "023f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_023f0001-01660502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_023f0001-01660502.png", "name": "Sparro", "release": { "au": "2016-03-19", @@ -20730,7 +20730,7 @@ } ], "head": "01010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010000-03520902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010000-03520902.png", "name": "Toon Zelda - The Wind Waker", "release": { "au": "2016-12-03", @@ -20796,7 +20796,7 @@ } ], "head": "01810301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810301-01700502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810301-01700502.png", "name": "Isabelle - Dress", "release": { "au": "2016-06-18", @@ -20850,7 +20850,7 @@ } ], "head": "02660001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02660001-00680502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02660001-00680502.png", "name": "Kabuki", "release": { "au": "2015-10-03", @@ -20904,7 +20904,7 @@ } ], "head": "03260001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03260001-01390502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03260001-01390502.png", "name": "Eloise", "release": { "au": "2016-03-19", @@ -20958,7 +20958,7 @@ } ], "head": "04850001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04850001-014c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04850001-014c0502.png", "name": "Gala", "release": { "au": "2016-03-19", @@ -21012,7 +21012,7 @@ } ], "head": "046b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_046b0001-01970502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_046b0001-01970502.png", "name": "Tex", "release": { "au": "2016-06-18", @@ -21078,7 +21078,7 @@ } ], "head": "018a0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018a0000-02450502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018a0000-02450502.png", "name": "Reese", "release": { "au": "2015-11-21", @@ -21132,7 +21132,7 @@ } ], "head": "05000001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05000001-00e70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05000001-00e70502.png", "name": "Bianca", "release": { "au": "2015-11-21", @@ -21262,7 +21262,7 @@ } ], "head": "00000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-00340102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-00340102.png", "name": "Mario", "release": { "au": "2015-03-21", @@ -21292,7 +21292,7 @@ } ], "head": "07c00200", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07c00200-00230002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07c00200-00230002.png", "name": "Mii Gunner", "release": { "au": "2015-09-26", @@ -21466,7 +21466,7 @@ } ], "head": "00020000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00020000-03720102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00020000-03720102.png", "name": "Peach - Wedding", "release": { "au": "2017-10-27", @@ -21508,7 +21508,7 @@ } ], "head": "0a170001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a170001-03ce0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a170001-03ce0502.png", "name": "Cephalobot", "release": { "au": "2021-11-05", @@ -21562,7 +21562,7 @@ } ], "head": "04640001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04640001-00c00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04640001-00c00502.png", "name": "Gwen", "release": { "au": "2015-11-21", @@ -21579,7 +21579,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c70101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c70101-028c0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c70101-028c0e02.png", "name": "Donkey Kong - Soccer", "release": { "au": "2017-03-11", @@ -21633,7 +21633,7 @@ } ], "head": "04870001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04870001-01bf0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04870001-01bf0502.png", "name": "Kevin", "release": { "au": "2016-06-18", @@ -21687,7 +21687,7 @@ } ], "head": "04de0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04de0001-00ce0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04de0001-00ce0502.png", "name": "Blaire", "release": { "au": "2015-11-21", @@ -21741,7 +21741,7 @@ } ], "head": "050d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_050d0001-01420502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_050d0001-01420502.png", "name": "Wolfgang", "release": { "au": "2016-03-19", @@ -21758,7 +21758,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c40301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c40301-027f0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c40301-027f0e02.png", "name": "Yoshi - Tennis", "release": { "au": "2017-03-11", @@ -21812,7 +21812,7 @@ } ], "head": "018e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018e0001-00490502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018e0001-00490502.png", "name": "Resetti", "release": { "au": "2015-10-03", @@ -21866,7 +21866,7 @@ } ], "head": "04830001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04830001-01b00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04830001-01b00502.png", "name": "Peggy", "release": { "au": "2016-06-18", @@ -22048,7 +22048,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-034d0902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-034d0902.png", "name": "Link - Twilight Princess", "release": { "au": "2017-06-24", @@ -22090,7 +22090,7 @@ } ], "head": "036e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_036e0001-02fb0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_036e0001-02fb0502.png", "name": "Boyd", "release": { "au": "2016-11-10", @@ -22168,7 +22168,7 @@ } ], "head": "35000100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35000100-02e10f02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35000100-02e10f02.png", "name": "One-Eyed Rathalos and Rider - Male", "release": { "au": null, @@ -22222,7 +22222,7 @@ } ], "head": "04990001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04990001-00df0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04990001-00df0502.png", "name": "Gabi", "release": { "au": "2015-11-21", @@ -22276,7 +22276,7 @@ } ], "head": "024f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_024f0001-00810502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_024f0001-00810502.png", "name": "T-Bone", "release": { "au": "2015-10-03", @@ -22293,7 +22293,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c50301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c50301-02840e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c50301-02840e02.png", "name": "Wario - Tennis", "release": { "au": "2017-03-11", @@ -22347,7 +22347,7 @@ } ], "head": "05800000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05800000-00050002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05800000-00050002.png", "name": "Fox", "release": { "au": "2014-11-29", @@ -22437,7 +22437,7 @@ } ], "head": "08000300", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000300-02610402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000300-02610402.png", "name": "Inkling Squid - Orange", "release": { "au": "2016-07-09", @@ -22599,7 +22599,7 @@ } ], "head": "01020100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01020100-041a0902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01020100-041a0902.png", "name": "Ganondorf - Tears of the Kingdom", "release": { "au": "2023-11-03", @@ -22653,7 +22653,7 @@ } ], "head": "04810001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04810001-02f10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04810001-02f10502.png", "name": "Boris", "release": { "au": "2016-11-10", @@ -22707,7 +22707,7 @@ } ], "head": "02010001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02010001-016a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02010001-016a0502.png", "name": "Antonio", "release": { "au": "2016-03-19", @@ -22761,7 +22761,7 @@ } ], "head": "02840001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02840001-02fe0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02840001-02fe0502.png", "name": "Murphy", "release": { "au": "2016-11-10", @@ -22815,7 +22815,7 @@ } ], "head": "04680001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04680001-02f20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04680001-02f20502.png", "name": "Wade", "release": { "au": "2016-11-10", @@ -22869,7 +22869,7 @@ } ], "head": "02820001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02820001-01d60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02820001-01d60502.png", "name": "Stitches - Amiibo Festival", "release": { "au": "2015-11-21", @@ -22923,7 +22923,7 @@ } ], "head": "01a40001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a40001-004d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a40001-004d0502.png", "name": "Pascal", "release": { "au": "2015-10-03", @@ -22965,7 +22965,7 @@ } ], "head": "0a060001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a060001-03ba0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a060001-03ba0502.png", "name": "Wisp", "release": { "au": "2021-11-05", @@ -23019,7 +23019,7 @@ } ], "head": "02dc0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02dc0001-00be0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02dc0001-00be0502.png", "name": "Fuchsia", "release": { "au": "2015-11-21", @@ -23049,7 +23049,7 @@ } ], "head": "19270000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19270000-00260002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19270000-00260002.png", "name": "Jigglypuff", "release": { "au": "2015-05-30", @@ -23103,7 +23103,7 @@ } ], "head": "032c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_032c0001-01480502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_032c0001-01480502.png", "name": "Tucker", "release": { "au": "2016-03-19", @@ -23265,7 +23265,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-034b0902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-034b0902.png", "name": "Link - Ocarina of Time", "release": { "au": "2016-12-03", @@ -23282,7 +23282,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cb0201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cb0201-02a10e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cb0201-02a10e02.png", "name": "Boo - Baseball", "release": { "au": "2017-03-11", @@ -23299,7 +23299,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c20401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c20401-02760e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c20401-02760e02.png", "name": "Peach - Golf", "release": { "au": "2017-03-11", @@ -23353,7 +23353,7 @@ } ], "head": "03e70001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03e70001-012a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03e70001-012a0502.png", "name": "Elvis", "release": { "au": "2016-03-19", @@ -23383,7 +23383,7 @@ } ], "head": "19ac0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19ac0000-03850002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19ac0000-03850002.png", "name": "Pichu", "release": { "au": "2019-07-19", @@ -23461,7 +23461,7 @@ } ], "head": "08030000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08030000-03760402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08030000-03760402.png", "name": "Pearl", "release": { "au": "2018-07-13", @@ -23527,7 +23527,7 @@ } ], "head": "08030000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08030000-04380402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08030000-04380402.png", "name": "Pearl - Side Order", "release": { "au": "2024-09-05", @@ -23569,7 +23569,7 @@ } ], "head": "0a140001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a140001-03cb0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a140001-03cb0502.png", "name": "Shino", "release": { "au": "2021-11-05", @@ -23731,7 +23731,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-034c0902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-034c0902.png", "name": "Link - Majora's Mask", "release": { "au": "2017-06-24", @@ -23785,7 +23785,7 @@ } ], "head": "01c10101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01c10101-017a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01c10101-017a0502.png", "name": "Lottie - Black Skirt And Bow", "release": { "au": "2016-06-18", @@ -23839,7 +23839,7 @@ } ], "head": "05130001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05130001-02e70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05130001-02e70502.png", "name": "Vivian", "release": { "au": "2016-11-10", @@ -23893,7 +23893,7 @@ } ], "head": "041b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_041b0001-00f10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_041b0001-00f10502.png", "name": "Bettina", "release": { "au": "2015-11-21", @@ -23923,7 +23923,7 @@ } ], "head": "3dc10000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3dc10000-04230002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3dc10000-04230002.png", "name": "Alex", "release": { "au": "2022-09-09", @@ -23977,7 +23977,7 @@ } ], "head": "01aa0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01aa0001-00530502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01aa0001-00530502.png", "name": "Lyle", "release": { "au": "2015-10-03", @@ -24031,7 +24031,7 @@ } ], "head": "02f00001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f00001-00a70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f00001-00a70502.png", "name": "Walker", "release": { "au": "2015-10-03", @@ -24085,7 +24085,7 @@ } ], "head": "03c10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03c10001-00bb0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03c10001-00bb0502.png", "name": "Ozzie", "release": { "au": "2015-11-21", @@ -24163,7 +24163,7 @@ } ], "head": "0008ff00", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0008ff00-023b0702.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0008ff00-023b0702.png", "name": "Turbo Charge Donkey Kong", "release": { "au": "2015-09-24", @@ -24217,7 +24217,7 @@ } ], "head": "04520001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04520001-00730502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04520001-00730502.png", "name": "Sterling", "release": { "au": "2015-10-03", @@ -24283,7 +24283,7 @@ } ], "head": "01810001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810001-01d40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810001-01d40502.png", "name": "Isabelle - Character Parfait", "release": { "au": null, @@ -24337,7 +24337,7 @@ } ], "head": "049f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049f0001-03010502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049f0001-03010502.png", "name": "Claude", "release": { "au": "2016-11-10", @@ -24391,7 +24391,7 @@ } ], "head": "02ea0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ea0001-01d50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ea0001-01d50502.png", "name": "Goldie - Amiibo Festival", "release": { "au": "2015-11-21", @@ -24445,7 +24445,7 @@ } ], "head": "02d60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02d60001-00560502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02d60001-00560502.png", "name": "Fauna", "release": { "au": "2015-10-03", @@ -24499,7 +24499,7 @@ } ], "head": "02700001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02700001-00ff0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02700001-00ff0502.png", "name": "Ankha", "release": { "au": "2015-11-21", @@ -24553,7 +24553,7 @@ } ], "head": "01a20001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a20001-03b90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a20001-03b90502.png", "name": "Gulliver", "release": { "au": "2021-11-05", @@ -24607,7 +24607,7 @@ } ], "head": "02670001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02670001-01080502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02670001-01080502.png", "name": "Kid Cat", "release": { "au": "2015-11-21", @@ -24637,7 +24637,7 @@ } ], "head": "38430001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38430001-04271902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38430001-04271902.png", "name": "Romin Kirishima", "release": { "au": null, @@ -24691,7 +24691,7 @@ } ], "head": "02720001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02720001-01860502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02720001-01860502.png", "name": "Katt", "release": { "au": "2016-06-18", @@ -24733,7 +24733,7 @@ } ], "head": "00240000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00240000-038d0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00240000-038d0002.png", "name": "Piranha Plant", "release": { "au": "2019-02-15", @@ -24787,7 +24787,7 @@ } ], "head": "03e80001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03e80001-02f50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03e80001-02f50502.png", "name": "Rex", "release": { "au": "2016-11-10", @@ -24841,7 +24841,7 @@ } ], "head": "02dd0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02dd0001-00ea0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02dd0001-00ea0502.png", "name": "Beau", "release": { "au": "2015-11-21", @@ -24967,7 +24967,7 @@ } ], "head": "01410000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01410000-035c0902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01410000-035c0902.png", "name": "Bokoblin", "release": { "au": "2017-03-03", @@ -24984,7 +24984,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cf0201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cf0201-02b50e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cf0201-02b50e02.png", "name": "Rosalina - Baseball", "release": { "au": "2017-03-11", @@ -25014,7 +25014,7 @@ } ], "head": "19960000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19960000-023d0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19960000-023d0002.png", "name": "Mewtwo", "release": { "au": "2015-10-24", @@ -25068,7 +25068,7 @@ } ], "head": "03930001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03930001-00a00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03930001-00a00502.png", "name": "Bertha", "release": { "au": "2015-10-03", @@ -25085,7 +25085,7 @@ "gameSeries": "Pokemon", "gamesSwitch": [], "head": "1d000001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1d000001-025c0d02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1d000001-025c0d02.png", "name": "Shadow Mewtwo", "release": { "au": "2016-03-19", @@ -25139,7 +25139,7 @@ } ], "head": "04650001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04650001-006e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04650001-006e0502.png", "name": "Puck", "release": { "au": "2015-10-03", @@ -25277,7 +25277,7 @@ } ], "head": "01060000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01060000-03590902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01060000-03590902.png", "name": "Urbosa", "release": { "au": "2017-11-10", @@ -25331,7 +25331,7 @@ } ], "head": "025f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_025f0001-01c50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_025f0001-01c50502.png", "name": "Rosie", "release": { "au": "2016-06-18", @@ -25385,7 +25385,7 @@ } ], "head": "210b0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_210b0000-03a50002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_210b0000-03a50002.png", "name": "Byleth", "release": { "au": "2021-03-26", @@ -25439,7 +25439,7 @@ } ], "head": "04b40001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04b40001-030c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04b40001-030c0502.png", "name": "Spike", "release": { "au": "2016-11-10", @@ -25625,7 +25625,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-03990902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-03990902.png", "name": "Link - Link's Awakening", "release": { "au": "2019-09-20", @@ -25679,7 +25679,7 @@ } ], "head": "041a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_041a0001-00e00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_041a0001-00e00502.png", "name": "Moose", "release": { "au": "2015-11-21", @@ -25809,7 +25809,7 @@ } ], "head": "00000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-02390602.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-02390602.png", "name": "8-Bit Mario Modern Color", "release": { "au": "2015-10-24", @@ -25863,7 +25863,7 @@ } ], "head": "04800001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04800001-008d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04800001-008d0502.png", "name": "Cobb", "release": { "au": "2015-10-03", @@ -25880,7 +25880,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c80101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c80101-02910e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c80101-02910e02.png", "name": "Diddy Kong - Soccer", "release": { "au": "2017-03-11", @@ -25934,7 +25934,7 @@ } ], "head": "02ef0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ef0001-00580502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ef0001-00580502.png", "name": "Portia", "release": { "au": "2015-10-03", @@ -25988,7 +25988,7 @@ } ], "head": "029a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_029a0001-00ee0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_029a0001-00ee0502.png", "name": "Benedict", "release": { "au": "2015-11-21", @@ -26042,7 +26042,7 @@ } ], "head": "02800001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02800001-00830502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02800001-00830502.png", "name": "Pudge", "release": { "au": "2015-10-03", @@ -26096,7 +26096,7 @@ } ], "head": "022d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_022d0001-00f20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_022d0001-00f20502.png", "name": "Jay", "release": { "au": "2015-11-21", @@ -26202,7 +26202,7 @@ } ], "head": "35c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35c00000-02500a02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35c00000-02500a02.png", "name": "Shovel Knight", "release": { "au": "2015-12-11", @@ -26232,7 +26232,7 @@ } ], "head": "38c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38c00000-03911602.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38c00000-03911602.png", "name": "Loot Goblin", "release": { "au": null, @@ -26286,7 +26286,7 @@ } ], "head": "02690001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02690001-011f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02690001-011f0502.png", "name": "Tabby", "release": { "au": "2016-03-19", @@ -26340,7 +26340,7 @@ } ], "head": "02810001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02810001-01200502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02810001-01200502.png", "name": "Kody", "release": { "au": "2016-03-19", @@ -26357,7 +26357,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09ca0501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ca0501-029f0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ca0501-029f0e02.png", "name": "Bowser Jr. - Horse Racing", "release": { "au": "2017-03-11", @@ -26411,7 +26411,7 @@ } ], "head": "044b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_044b0001-016c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_044b0001-016c0502.png", "name": "Apollo", "release": { "au": "2016-03-19", @@ -26465,7 +26465,7 @@ } ], "head": "01840501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01840501-03a90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01840501-03a90502.png", "name": "Timmy & Tommy", "release": { "au": "2021-10-05", @@ -26519,7 +26519,7 @@ } ], "head": "027e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_027e0001-01690502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_027e0001-01690502.png", "name": "Maple", "release": { "au": "2016-03-19", @@ -26637,7 +26637,7 @@ } ], "head": "00000100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000100-00190002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000100-00190002.png", "name": "Dr. Mario", "release": { "au": "2015-07-23", @@ -26654,7 +26654,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cc0501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cc0501-02a90e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cc0501-02a90e02.png", "name": "Baby Mario - Horse Racing", "release": { "au": "2017-03-11", @@ -26671,7 +26671,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cd0301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cd0301-02ac0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cd0301-02ac0e02.png", "name": "Baby Luigi - Tennis", "release": { "au": "2017-03-11", @@ -26725,7 +26725,7 @@ } ], "head": "02080001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02080001-00960502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02080001-00960502.png", "name": "Annalisa", "release": { "au": "2015-10-03", @@ -26779,7 +26779,7 @@ } ], "head": "032d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_032d0001-00bc0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_032d0001-00bc0502.png", "name": "Tia", "release": { "au": "2015-11-21", @@ -26833,7 +26833,7 @@ } ], "head": "03bc0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03bc0001-008a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03bc0001-008a0502.png", "name": "Yuka", "release": { "au": "2015-10-03", @@ -26911,7 +26911,7 @@ } ], "head": "01830000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01830000-02420502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01830000-02420502.png", "name": "Tom Nook", "release": { "au": "2015-11-21", @@ -26965,7 +26965,7 @@ } ], "head": "03090001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03090001-00c60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03090001-00c60502.png", "name": "Pate", "release": { "au": "2015-11-21", @@ -27067,7 +27067,7 @@ } ], "head": "1f000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f000000-000a0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f000000-000a0002.png", "name": "Kirby", "release": { "au": "2014-11-29", @@ -27121,7 +27121,7 @@ } ], "head": "04a40001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a40001-00d40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a40001-00d40502.png", "name": "Carmen", "release": { "au": "2015-11-21", @@ -27163,7 +27163,7 @@ } ], "head": "019c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019c0001-01730502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019c0001-01730502.png", "name": "Phineas", "release": { "au": "2016-06-18", @@ -27217,7 +27217,7 @@ } ], "head": "03380001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03380001-011d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03380001-011d0502.png", "name": "Lily", "release": { "au": "2016-03-19", @@ -27271,7 +27271,7 @@ } ], "head": "025d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_025d0001-00550502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_025d0001-00550502.png", "name": "Bob", "release": { "au": "2015-10-03", @@ -27349,7 +27349,7 @@ } ], "head": "35010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35010000-02e30f02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35010000-02e30f02.png", "name": "Nabiru", "release": { "au": null, @@ -27403,7 +27403,7 @@ } ], "head": "018b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018b0001-01150502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018b0001-01150502.png", "name": "Cyrus", "release": { "au": "2016-03-19", @@ -27445,7 +27445,7 @@ } ], "head": "350a0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_350a0000-04111802.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_350a0000-04111802.png", "name": "Palamute", "release": { "au": "2021-03-26", @@ -27511,7 +27511,7 @@ } ], "head": "01810401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810401-03aa0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810401-03aa0502.png", "name": "Isabelle", "release": { "au": "2021-11-05", @@ -27541,7 +27541,7 @@ } ], "head": "33c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_33c00000-04200002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_33c00000-04200002.png", "name": "Kazuya", "release": { "au": "2023-01-13", @@ -27583,7 +27583,7 @@ } ], "head": "05810000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05810000-001c0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05810000-001c0002.png", "name": "Falco", "release": { "au": "2015-11-21", @@ -27637,7 +27637,7 @@ } ], "head": "03a60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a60001-00c80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a60001-00c80502.png", "name": "Savannah", "release": { "au": "2015-11-21", @@ -27667,7 +27667,7 @@ } ], "head": "22810000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22810000-02510002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22810000-02510002.png", "name": "Lucas", "release": { "au": "2016-01-30", @@ -27721,7 +27721,7 @@ } ], "head": "043d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_043d0001-007c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_043d0001-007c0502.png", "name": "Phil", "release": { "au": "2015-10-03", @@ -27775,7 +27775,7 @@ } ], "head": "019f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019f0001-01110502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019f0001-01110502.png", "name": "Pete", "release": { "au": "2016-03-19", @@ -27829,7 +27829,7 @@ } ], "head": "03800001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03800001-01870502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03800001-01870502.png", "name": "Graham", "release": { "au": "2016-06-18", @@ -27907,7 +27907,7 @@ } ], "head": "35030100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35030100-02e50f02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35030100-02e50f02.png", "name": "Barioth and Ayuria", "release": { "au": null, @@ -27961,7 +27961,7 @@ } ], "head": "030e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030e0001-012f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030e0001-012f0502.png", "name": "Freckles", "release": { "au": "2016-03-19", @@ -28003,7 +28003,7 @@ } ], "head": "0a1f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1f0001-03d60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1f0001-03d60502.png", "name": "Roswell", "release": { "au": "2021-11-05", @@ -28121,7 +28121,7 @@ } ], "head": "00050000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00050000-00140002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00050000-00140002.png", "name": "Bowser", "release": { "au": "2015-01-29", @@ -28175,7 +28175,7 @@ } ], "head": "02fa0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02fa0001-00970502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02fa0001-00970502.png", "name": "Benjamin", "release": { "au": "2015-10-03", @@ -28289,7 +28289,7 @@ } ], "head": "05c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c00000-04121302.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c00000-04121302.png", "name": "Samus - Metroid Dread", "release": { "au": "2021-10-08", @@ -28343,7 +28343,7 @@ } ], "head": "02db0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02db0001-005e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02db0001-005e0502.png", "name": "Lopez", "release": { "au": "2015-10-03", @@ -28397,7 +28397,7 @@ } ], "head": "04cc0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04cc0001-00a40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04cc0001-00a40502.png", "name": "Willow", "release": { "au": "2015-10-03", @@ -28451,7 +28451,7 @@ } ], "head": "03450001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03450001-005f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03450001-005f0502.png", "name": "Jambette", "release": { "au": "2015-10-03", @@ -28481,7 +28481,7 @@ } ], "head": "19060000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19060000-00240002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_19060000-00240002.png", "name": "Charizard", "release": { "au": "2015-04-25", @@ -28535,7 +28535,7 @@ } ], "head": "04a70001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a70001-01a60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a70001-01a60502.png", "name": "Mira", "release": { "au": "2016-06-18", @@ -28649,7 +28649,7 @@ } ], "head": "00000300", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000300-03a60102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000300-03a60102.png", "name": "Mario - Cat", "release": { "au": "2021-02-12", @@ -28703,7 +28703,7 @@ } ], "head": "01b10101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b10101-017b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b10101-017b0502.png", "name": "Shrunk - Loud Jacket", "release": { "au": "2016-06-18", @@ -28745,7 +28745,7 @@ } ], "head": "0a0f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0f0001-03c60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0f0001-03c60502.png", "name": "Raymond", "release": { "au": "2021-11-05", @@ -28799,7 +28799,7 @@ } ], "head": "0a120001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a120001-03c90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a120001-03c90502.png", "name": "Ione", "release": { "au": "2021-11-05", @@ -28853,7 +28853,7 @@ } ], "head": "03170001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03170001-00a60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03170001-00a60502.png", "name": "Molly", "release": { "au": "2015-10-03", @@ -28907,7 +28907,7 @@ } ], "head": "01a90001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a90001-01760502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a90001-01760502.png", "name": "Gracie", "release": { "au": "2016-06-18", @@ -28989,7 +28989,7 @@ } ], "head": "21090000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21090000-03701202.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21090000-03701202.png", "name": "Tiki", "release": { "au": "2017-10-20", @@ -29043,7 +29043,7 @@ } ], "head": "03730001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03730001-01340502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03730001-01340502.png", "name": "Hans", "release": { "au": "2016-03-19", @@ -29097,7 +29097,7 @@ } ], "head": "019b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019b0001-00b60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019b0001-00b60502.png", "name": "Nat", "release": { "au": "2015-11-21", @@ -29151,7 +29151,7 @@ } ], "head": "01860301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01860301-01750502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01860301-01750502.png", "name": "Tommy - Suit", "release": { "au": "2016-06-18", @@ -29253,7 +29253,7 @@ } ], "head": "34800000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_34800000-02580002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_34800000-02580002.png", "name": "Mega Man - Gold Edition", "release": { "au": null, @@ -29307,7 +29307,7 @@ } ], "head": "01850201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01850201-01170502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01850201-01170502.png", "name": "Timmy - Full Apron", "release": { "au": "2016-03-19", @@ -29469,7 +29469,7 @@ } ], "head": "01010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010000-04190902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010000-04190902.png", "name": "Zelda - Tears of the Kingdom", "release": { "au": "2023-11-03", @@ -29523,7 +29523,7 @@ } ], "head": "026e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026e0001-00ba0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026e0001-00ba0502.png", "name": "Felicity", "release": { "au": "2015-11-21", @@ -29577,7 +29577,7 @@ } ], "head": "01a20001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a20001-017d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a20001-017d0502.png", "name": "Gulliver", "release": { "au": "2016-06-18", @@ -29594,7 +29594,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c60201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c60201-02880e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c60201-02880e02.png", "name": "Waluigi - Baseball", "release": { "au": "2017-03-11", @@ -29648,7 +29648,7 @@ } ], "head": "01920001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01920001-010d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01920001-010d0502.png", "name": "Blathers", "release": { "au": "2016-03-19", @@ -29750,7 +29750,7 @@ } ], "head": "1f000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f000000-02540c02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f000000-02540c02.png", "name": "Kirby", "release": { "au": "2016-06-11", @@ -29804,7 +29804,7 @@ } ], "head": "024b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_024b0001-01260502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_024b0001-01260502.png", "name": "Rodeo", "release": { "au": "2016-03-19", @@ -29821,7 +29821,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cc0401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cc0401-02a80e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cc0401-02a80e02.png", "name": "Baby Mario - Golf", "release": { "au": "2017-03-11", @@ -29875,7 +29875,7 @@ } ], "head": "03d10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d10001-00c20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d10001-00c20502.png", "name": "Kitt", "release": { "au": "2015-11-21", @@ -29929,7 +29929,7 @@ } ], "head": "03440001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03440001-00c50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03440001-00c50502.png", "name": "Prince", "release": { "au": "2015-11-21", @@ -29983,7 +29983,7 @@ } ], "head": "01820001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01820001-01d80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01820001-01d80502.png", "name": "K. K. Slider - Pikopuri", "release": { "au": null, @@ -30025,7 +30025,7 @@ } ], "head": "06400100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_06400100-001e0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_06400100-001e0002.png", "name": "Olimar", "release": { "au": "2015-07-23", @@ -30079,7 +30079,7 @@ } ], "head": "03ae0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ae0001-00870502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ae0001-00870502.png", "name": "Clyde", "release": { "au": "2015-10-03", @@ -30133,7 +30133,7 @@ } ], "head": "049d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049d0001-00ed0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049d0001-00ed0502.png", "name": "Ruby", "release": { "au": "2015-11-21", @@ -30187,7 +30187,7 @@ } ], "head": "021a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021a0001-00da0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021a0001-00da0502.png", "name": "Groucho", "release": { "au": "2015-11-21", @@ -30277,7 +30277,7 @@ } ], "head": "1f020000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f020000-00280002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f020000-00280002.png", "name": "King Dedede", "release": { "au": "2015-01-29", @@ -30355,7 +30355,7 @@ } ], "head": "21040000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21040000-02520002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21040000-02520002.png", "name": "Roy", "release": { "au": "2016-03-19", @@ -30385,7 +30385,7 @@ } ], "head": "350b0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_350b0000-042d1802.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_350b0000-042d1802.png", "name": "Malzeno", "release": { "au": "2022-06-30", @@ -30547,7 +30547,7 @@ } ], "head": "00000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-03710102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-03710102.png", "name": "Mario - Wedding", "release": { "au": "2017-10-27", @@ -30661,7 +30661,7 @@ } ], "head": "00030102", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030102-00430302.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030102-00430302.png", "name": "Light Blue Yarn Yoshi", "release": { "au": "2015-06-25", @@ -30715,7 +30715,7 @@ } ], "head": "04c60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04c60001-01670502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04c60001-01670502.png", "name": "Baabara", "release": { "au": "2016-03-19", @@ -30745,7 +30745,7 @@ } ], "head": "07800000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07800000-002d0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07800000-002d0002.png", "name": "Mr. Game & Watch", "release": { "au": "2015-09-26", @@ -30787,7 +30787,7 @@ } ], "head": "06000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_06000000-00120002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_06000000-00120002.png", "name": "Captain Falcon", "release": { "au": "2014-12-12", @@ -30841,7 +30841,7 @@ } ], "head": "04e50001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e50001-01ad0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e50001-01ad0502.png", "name": "Static", "release": { "au": "2016-06-18", @@ -30895,7 +30895,7 @@ } ], "head": "04110001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04110001-01ab0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04110001-01ab0502.png", "name": "Rod", "release": { "au": "2016-06-18", @@ -30949,7 +30949,7 @@ } ], "head": "03950001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03950001-02fc0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03950001-02fc0502.png", "name": "Bitty", "release": { "au": "2016-11-10", @@ -31075,7 +31075,7 @@ } ], "head": "00020100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00020100-03a70102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00020100-03a70102.png", "name": "Peach - Cat", "release": { "au": "2021-02-12", @@ -31129,7 +31129,7 @@ } ], "head": "044e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_044e0001-03150502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_044e0001-03150502.png", "name": "Buzz", "release": { "au": "2016-11-10", @@ -31183,7 +31183,7 @@ } ], "head": "01920001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01920001-03ad0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01920001-03ad0502.png", "name": "Blathers", "release": { "au": "2021-11-05", @@ -31237,7 +31237,7 @@ } ], "head": "04a50001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a50001-00740502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a50001-00740502.png", "name": "Bonbon", "release": { "au": "2015-10-03", @@ -31291,7 +31291,7 @@ } ], "head": "04fa0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04fa0001-01680502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04fa0001-01680502.png", "name": "Rolf", "release": { "au": "2016-03-19", @@ -31345,7 +31345,7 @@ } ], "head": "04360001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04360001-01940502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04360001-01940502.png", "name": "Queenie", "release": { "au": "2016-06-18", @@ -31399,7 +31399,7 @@ } ], "head": "02de0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02de0001-009c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02de0001-009c0502.png", "name": "Diana", "release": { "au": "2015-10-03", @@ -31429,7 +31429,7 @@ } ], "head": "38030001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38030001-03961702.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38030001-03961702.png", "name": "Hayakawa", "release": { "au": null, @@ -31483,7 +31483,7 @@ } ], "head": "03bd0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03bd0001-00f90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03bd0001-00f90502.png", "name": "Alice", "release": { "au": "2015-11-21", @@ -31573,7 +31573,7 @@ } ], "head": "00070000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00070000-02630102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00070000-02630102.png", "name": "Wario", "release": { "au": "2016-10-08", @@ -31627,7 +31627,7 @@ } ], "head": "021e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021e0001-01230502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021e0001-01230502.png", "name": "Paula", "release": { "au": "2016-03-19", @@ -31644,7 +31644,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09d00401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d00401-02bc0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d00401-02bc0e02.png", "name": "Metal Mario - Golf", "release": { "au": "2017-03-11", @@ -31698,7 +31698,7 @@ } ], "head": "02320001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02320001-02ea0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02320001-02ea0502.png", "name": "Piper", "release": { "au": "2016-11-10", @@ -31788,7 +31788,7 @@ } ], "head": "1f010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f010000-02550c02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f010000-02550c02.png", "name": "Meta Knight", "release": { "au": "2016-06-11", @@ -31842,7 +31842,7 @@ } ], "head": "03390001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03390001-01b10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03390001-01b10502.png", "name": "Ribbot", "release": { "au": "2016-06-18", @@ -31896,7 +31896,7 @@ } ], "head": "04b60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04b60001-02ec0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04b60001-02ec0502.png", "name": "Hornsby", "release": { "au": "2016-11-10", @@ -31950,7 +31950,7 @@ } ], "head": "01850401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01850401-01790502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01850401-01790502.png", "name": "Timmy - Suit", "release": { "au": "2016-06-18", @@ -31992,7 +31992,7 @@ } ], "head": "0a010001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a010001-03ac0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a010001-03ac0502.png", "name": "Wilbur", "release": { "au": "2021-11-05", @@ -32046,7 +32046,7 @@ } ], "head": "032a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_032a0001-03070502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_032a0001-03070502.png", "name": "Ellie", "release": { "au": "2016-11-10", @@ -32100,7 +32100,7 @@ } ], "head": "027d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_027d0001-00630502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_027d0001-00630502.png", "name": "Bluebear", "release": { "au": "2015-10-03", @@ -32170,7 +32170,7 @@ } ], "head": "00060000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00060000-00150002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00060000-00150002.png", "name": "Bowser Jr.", "release": { "au": "2015-07-23", @@ -32212,7 +32212,7 @@ } ], "head": "22400000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22400000-002b0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22400000-002b0002.png", "name": "Shulk", "release": { "au": "2015-01-29", @@ -32302,7 +32302,7 @@ } ], "head": "00130000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00130000-02660102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00130000-02660102.png", "name": "Daisy", "release": { "au": "2016-11-05", @@ -32319,7 +32319,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c90101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c90101-02960e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c90101-02960e02.png", "name": "Bowser - Soccer", "release": { "au": "2017-03-11", @@ -32373,7 +32373,7 @@ } ], "head": "04e40001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e40001-01b60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e40001-01b60502.png", "name": "Sally", "release": { "au": "2016-06-18", @@ -32415,7 +32415,7 @@ } ], "head": "0a110001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a110001-03c80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a110001-03c80502.png", "name": "Sasha", "release": { "au": "2021-11-05", @@ -32493,7 +32493,7 @@ } ], "head": "21030000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21030000-002a0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21030000-002a0002.png", "name": "Robin", "release": { "au": "2015-04-25", @@ -32547,7 +32547,7 @@ } ], "head": "02b10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02b10001-00690502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02b10001-00690502.png", "name": "Patty", "release": { "au": "2015-10-03", @@ -32601,7 +32601,7 @@ } ], "head": "03160001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03160001-01c00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03160001-01c00502.png", "name": "Gloria", "release": { "au": "2016-06-18", @@ -32655,7 +32655,7 @@ } ], "head": "01820001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01820001-00a80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01820001-00a80502.png", "name": "K.K. Slider", "release": { "au": "2015-11-21", @@ -32709,7 +32709,7 @@ } ], "head": "03fb0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03fb0001-01cf0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03fb0001-01cf0502.png", "name": "Simon", "release": { "au": "2016-06-18", @@ -32883,7 +32883,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-04180902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-04180902.png", "name": "Link - Tears of the Kingdom", "release": { "au": "2023-05-12", @@ -32937,7 +32937,7 @@ } ], "head": "03b00001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03b00001-01a90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03b00001-01a90502.png", "name": "Papi", "release": { "au": "2016-06-18", @@ -32991,7 +32991,7 @@ } ], "head": "03240001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03240001-01890502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03240001-01890502.png", "name": "Dizzy", "release": { "au": "2016-06-18", @@ -33045,7 +33045,7 @@ } ], "head": "02170001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02170001-01b30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02170001-01b30502.png", "name": "Chow", "release": { "au": "2016-06-18", @@ -33099,7 +33099,7 @@ } ], "head": "02b20001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02b20001-00c40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02b20001-00c40502.png", "name": "Tipper", "release": { "au": "2015-11-21", @@ -33153,7 +33153,7 @@ } ], "head": "04fe0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04fe0001-00590502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04fe0001-00590502.png", "name": "Leonardo", "release": { "au": "2015-10-03", @@ -33315,7 +33315,7 @@ } ], "head": "01000100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000100-00160002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000100-00160002.png", "name": "Toon Link", "release": { "au": "2015-01-29", @@ -33369,7 +33369,7 @@ } ], "head": "02020001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02020001-01030502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02020001-01030502.png", "name": "Pango", "release": { "au": "2015-11-21", @@ -33399,7 +33399,7 @@ } ], "head": "07810000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07810000-00330002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07810000-00330002.png", "name": "R.O.B. - NES", "release": { "au": "2015-09-26", @@ -33416,7 +33416,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09d10201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d10201-02bf0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d10201-02bf0e02.png", "name": "Pink Gold Peach - Baseball", "release": { "au": "2017-03-11", @@ -33470,7 +33470,7 @@ } ], "head": "33400000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_33400000-00320002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_33400000-00320002.png", "name": "Pac-Man", "release": { "au": "2015-04-25", @@ -33512,7 +33512,7 @@ } ], "head": "0a150001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a150001-03cc0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a150001-03cc0502.png", "name": "Marlo", "release": { "au": "2021-11-05", @@ -33529,7 +33529,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c10301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c10301-02700e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c10301-02700e02.png", "name": "Luigi - Tennis", "release": { "au": "2017-03-11", @@ -33583,7 +33583,7 @@ } ], "head": "01c10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01c10001-00540502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01c10001-00540502.png", "name": "Lottie", "release": { "au": "2015-10-03", @@ -33600,7 +33600,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c20301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c20301-02750e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c20301-02750e02.png", "name": "Peach - Tennis", "release": { "au": "2017-03-11", @@ -33654,7 +33654,7 @@ } ], "head": "027f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_027f0001-00b90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_027f0001-00b90502.png", "name": "Poncho", "release": { "au": "2015-11-21", @@ -33708,7 +33708,7 @@ } ], "head": "03ec0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ec0001-01830502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ec0001-01830502.png", "name": "Mott", "release": { "au": "2016-06-18", @@ -33762,7 +33762,7 @@ } ], "head": "042b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_042b0001-01af0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_042b0001-01af0502.png", "name": "Zucker", "release": { "au": "2016-06-18", @@ -33840,7 +33840,7 @@ } ], "head": "00130003", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00130003-039eff02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00130003-039eff02.png", "name": "Daisy - Power Up Band", "release": { "au": null, @@ -33942,7 +33942,7 @@ } ], "head": "34800000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_34800000-00310002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_34800000-00310002.png", "name": "Mega Man", "release": { "au": "2015-01-29", @@ -33996,7 +33996,7 @@ } ], "head": "035a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_035a0001-00850502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_035a0001-00850502.png", "name": "Gruff", "release": { "au": "2015-10-03", @@ -34062,7 +34062,7 @@ } ], "head": "05c10000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c10000-03661302.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c10000-03661302.png", "name": "Metroid", "release": { "au": "2017-09-16", @@ -34116,7 +34116,7 @@ } ], "head": "030c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030c0001-01b80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030c0001-01b80502.png", "name": "Pompom", "release": { "au": "2016-06-18", @@ -34170,7 +34170,7 @@ } ], "head": "01930001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01930001-03ae0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01930001-03ae0502.png", "name": "Celeste", "release": { "au": "2021-11-05", @@ -34224,7 +34224,7 @@ } ], "head": "04c90001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04c90001-030d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04c90001-030d0502.png", "name": "Cashmere", "release": { "au": "2016-11-10", @@ -34278,7 +34278,7 @@ } ], "head": "034a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_034a0001-01430502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_034a0001-01430502.png", "name": "Diva", "release": { "au": "2016-03-19", @@ -34332,7 +34332,7 @@ } ], "head": "04790001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04790001-00920502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04790001-00920502.png", "name": "Truffles", "release": { "au": "2015-10-03", @@ -34386,7 +34386,7 @@ } ], "head": "042a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_042a0001-012d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_042a0001-012d0502.png", "name": "Marina", "release": { "au": "2016-03-19", @@ -34440,7 +34440,7 @@ } ], "head": "03fa0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03fa0001-00d00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03fa0001-00d00502.png", "name": "Nana", "release": { "au": "2015-11-21", @@ -34457,7 +34457,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09ca0301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ca0301-029d0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ca0301-029d0e02.png", "name": "Bowser Jr. - Tennis", "release": { "au": "2017-03-11", @@ -34547,7 +34547,7 @@ } ], "head": "08000200", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000200-02600402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000200-02600402.png", "name": "Inkling Boy - Purple", "release": { "au": "2016-07-09", @@ -34601,7 +34601,7 @@ } ], "head": "04c70001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04c70001-00940502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04c70001-00940502.png", "name": "Eunice", "release": { "au": "2015-10-03", @@ -34618,7 +34618,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c90501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c90501-029a0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c90501-029a0e02.png", "name": "Bowser - Horse Racing", "release": { "au": "2017-03-11", @@ -34696,7 +34696,7 @@ } ], "head": "00080000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00080000-00030002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00080000-00030002.png", "name": "Donkey Kong", "release": { "au": "2014-11-29", @@ -34786,7 +34786,7 @@ } ], "head": "000a0003", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_000a0003-03a0ff02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_000a0003-03a0ff02.png", "name": "Toad - Power Up Band", "release": { "au": null, @@ -34840,7 +34840,7 @@ } ], "head": "03ed0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ed0001-01a30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ed0001-01a30502.png", "name": "Rory", "release": { "au": "2016-06-18", @@ -34894,7 +34894,7 @@ } ], "head": "029b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_029b0001-00cb0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_029b0001-00cb0502.png", "name": "Egbert", "release": { "au": "2015-11-21", @@ -35012,7 +35012,7 @@ } ], "head": "00000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-00000002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-00000002.png", "name": "Mario", "release": { "au": "2014-11-29", @@ -35029,7 +35029,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cf0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cf0101-02b40e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cf0101-02b40e02.png", "name": "Rosalina - Soccer", "release": { "au": "2017-03-11", @@ -35203,7 +35203,7 @@ } ], "head": "01000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-034e0902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01000000-034e0902.png", "name": "Link - Skyward Sword", "release": { "au": "2017-06-24", @@ -35257,7 +35257,7 @@ } ], "head": "02870001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02870001-005a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02870001-005a0502.png", "name": "Cheri", "release": { "au": "2015-10-03", @@ -35311,7 +35311,7 @@ } ], "head": "01830201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01830201-03a80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01830201-03a80502.png", "name": "Tom Nook", "release": { "au": "2021-11-05", @@ -35328,7 +35328,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c10501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c10501-02720e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c10501-02720e02.png", "name": "Luigi - Horse Racing", "release": { "au": "2017-03-11", @@ -35345,7 +35345,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c40101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c40101-027d0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c40101-027d0e02.png", "name": "Yoshi - Soccer", "release": { "au": "2017-03-11", @@ -35399,7 +35399,7 @@ } ], "head": "03d20001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d20001-00e50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d20001-00e50502.png", "name": "Mathilda", "release": { "au": "2015-11-21", @@ -35416,7 +35416,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c00301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c00301-026b0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c00301-026b0e02.png", "name": "Mario - Tennis", "release": { "au": "2017-03-11", @@ -35506,7 +35506,7 @@ } ], "head": "08000300", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000300-036b0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000300-036b0402.png", "name": "Inkling Squid - Neon Purple", "release": { "au": "2017-07-21", @@ -35560,7 +35560,7 @@ } ], "head": "04d20001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04d20001-01a70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04d20001-01a70502.png", "name": "Pietro", "release": { "au": "2016-06-18", @@ -35577,7 +35577,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cc0301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cc0301-02a70e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cc0301-02a70e02.png", "name": "Baby Mario - Tennis", "release": { "au": "2017-03-11", @@ -35594,7 +35594,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c80201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c80201-02920e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c80201-02920e02.png", "name": "Diddy Kong - Baseball", "release": { "au": "2017-03-11", @@ -35648,7 +35648,7 @@ } ], "head": "03100001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03100001-00f80502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03100001-00f80502.png", "name": "Drake", "release": { "au": "2015-11-21", @@ -35702,7 +35702,7 @@ } ], "head": "050f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_050f0001-03140502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_050f0001-03140502.png", "name": "Dobie", "release": { "au": "2016-11-10", @@ -35840,7 +35840,7 @@ } ], "head": "00020000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00020000-00360102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00020000-00360102.png", "name": "Peach", "release": { "au": "2015-03-21", @@ -35857,7 +35857,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c70201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c70201-028d0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c70201-028d0e02.png", "name": "Donkey Kong - Baseball", "release": { "au": "2017-03-11", @@ -35899,7 +35899,7 @@ } ], "head": "0a1a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1a0001-03d10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1a0001-03d10502.png", "name": "Zoe", "release": { "au": "2021-11-05", @@ -35953,7 +35953,7 @@ } ], "head": "01830001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01830001-00450502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01830001-00450502.png", "name": "Tom Nook", "release": { "au": "2015-10-03", @@ -36007,7 +36007,7 @@ } ], "head": "03570001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03570001-00eb0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03570001-00eb0502.png", "name": "Nan", "release": { "au": "2015-11-21", @@ -36024,7 +36024,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c40201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c40201-027e0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c40201-027e0e02.png", "name": "Yoshi - Baseball", "release": { "au": "2017-03-11", @@ -36150,7 +36150,7 @@ } ], "head": "00020000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00020000-00010002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00020000-00010002.png", "name": "Peach", "release": { "au": "2014-11-29", @@ -36228,7 +36228,7 @@ } ], "head": "00140000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00140000-02670102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00140000-02670102.png", "name": "Waluigi", "release": { "au": "2016-11-05", @@ -36282,7 +36282,7 @@ } ], "head": "01820001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01820001-03b20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01820001-03b20502.png", "name": "K.K. Slider", "release": { "au": "2021-11-05", @@ -36336,7 +36336,7 @@ } ], "head": "03a50001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a50001-015b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a50001-015b0502.png", "name": "Victoria", "release": { "au": "2016-03-19", @@ -36390,7 +36390,7 @@ } ], "head": "026b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026b0001-00e90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026b0001-00e90502.png", "name": "Kitty", "release": { "au": "2015-11-21", @@ -36444,7 +36444,7 @@ } ], "head": "04150001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04150001-01bb0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04150001-01bb0502.png", "name": "Rizzo", "release": { "au": "2016-06-18", @@ -36461,7 +36461,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c80401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c80401-02940e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c80401-02940e02.png", "name": "Diddy Kong - Golf", "release": { "au": "2017-03-11", @@ -36515,7 +36515,7 @@ } ], "head": "04e20001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e20001-01090502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e20001-01090502.png", "name": "Agent S", "release": { "au": "2015-11-21", @@ -36545,7 +36545,7 @@ } ], "head": "1b920000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1b920000-00250002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1b920000-00250002.png", "name": "Greninja", "release": { "au": "2015-05-30", @@ -36562,7 +36562,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c20201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c20201-02740e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c20201-02740e02.png", "name": "Peach - Baseball", "release": { "au": "2017-03-11", @@ -36616,7 +36616,7 @@ } ], "head": "043f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_043f0001-01550502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_043f0001-01550502.png", "name": "Flora", "release": { "au": "2016-03-19", @@ -36670,7 +36670,7 @@ } ], "head": "04a60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a60001-00a30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04a60001-00a30502.png", "name": "Cole", "release": { "au": "2015-10-03", @@ -36724,7 +36724,7 @@ } ], "head": "04290001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04290001-00700502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04290001-00700502.png", "name": "Octavian", "release": { "au": "2015-10-03", @@ -36814,7 +36814,7 @@ } ], "head": "00230000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00230000-03680102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00230000-03680102.png", "name": "Koopa Troopa", "release": { "au": "2017-10-07", @@ -36868,7 +36868,7 @@ } ], "head": "04630001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04630001-01310502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04630001-01310502.png", "name": "Friga", "release": { "au": "2016-03-19", @@ -36922,7 +36922,7 @@ } ], "head": "03420001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03420001-01280502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03420001-01280502.png", "name": "Cousteau", "release": { "au": "2016-03-19", @@ -36976,7 +36976,7 @@ } ], "head": "018f0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018f0101-01190502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018f0101-01190502.png", "name": "Don Resetti - Without Hat", "release": { "au": "2016-03-19", @@ -37018,7 +37018,7 @@ } ], "head": "0a130001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a130001-03ca0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a130001-03ca0502.png", "name": "Tiansheng", "release": { "au": "2021-11-05", @@ -37072,7 +37072,7 @@ } ], "head": "02a20001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02a20001-01ba0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02a20001-01ba0502.png", "name": "Becky", "release": { "au": "2016-06-18", @@ -37126,7 +37126,7 @@ } ], "head": "02220001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02220001-01440502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02220001-01440502.png", "name": "Klaus", "release": { "au": "2016-03-19", @@ -37180,7 +37180,7 @@ } ], "head": "041e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_041e0001-015f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_041e0001-015f0502.png", "name": "Chadder", "release": { "au": "2016-03-19", @@ -37270,7 +37270,7 @@ } ], "head": "08000100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000100-03690402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000100-03690402.png", "name": "Inkling Girl - Neon Pink", "release": { "au": "2017-07-21", @@ -37348,7 +37348,7 @@ } ], "head": "00150000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00150000-03670102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00150000-03670102.png", "name": "Goomba", "release": { "au": "2017-10-07", @@ -37390,7 +37390,7 @@ } ], "head": "32400100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_32400100-03640002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_32400100-03640002.png", "name": "Bayonetta - Player 2", "release": { "au": "2017-07-22", @@ -37528,7 +37528,7 @@ } ], "head": "00000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-003c0102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-003c0102.png", "name": "Mario - Gold Edition", "release": { "au": "2015-06-25", @@ -37606,7 +37606,7 @@ } ], "head": "05c00100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c00100-001d0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c00100-001d0002.png", "name": "Zero Suit Samus", "release": { "au": "2015-07-04", @@ -37700,7 +37700,7 @@ } ], "head": "00000003", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000003-039bff02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000003-039bff02.png", "name": "Mario - Power Up Band", "release": { "au": null, @@ -37730,7 +37730,7 @@ } ], "head": "07400000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07400000-00100002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07400000-00100002.png", "name": "Pit", "release": { "au": "2014-12-12", @@ -37784,7 +37784,7 @@ } ], "head": "04950001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04950001-01920502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04950001-01920502.png", "name": "Dotty", "release": { "au": "2016-06-18", @@ -37838,7 +37838,7 @@ } ], "head": "01b60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b60001-00ae0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b60001-00ae0502.png", "name": "Katie", "release": { "au": "2015-11-21", @@ -37988,7 +37988,7 @@ } ], "head": "01010100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010100-00170002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010100-00170002.png", "name": "Sheik", "release": { "au": "2015-01-29", @@ -38005,7 +38005,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09d10501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d10501-02c20e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d10501-02c20e02.png", "name": "Pink Gold Peach - Horse Racing", "release": { "au": "2017-03-11", @@ -38059,7 +38059,7 @@ } ], "head": "01af0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01af0001-011c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01af0001-011c0502.png", "name": "Jingle", "release": { "au": "2016-03-19", @@ -38113,7 +38113,7 @@ } ], "head": "026f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026f0001-01900502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_026f0001-01900502.png", "name": "Lolly", "release": { "au": "2016-06-18", @@ -38203,7 +38203,7 @@ } ], "head": "08000100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000100-025f0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000100-025f0402.png", "name": "Inkling Girl - Lime Green", "release": { "au": "2016-07-09", @@ -38220,7 +38220,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09d00501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d00501-02bd0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d00501-02bd0e02.png", "name": "Metal Mario - Horse Racing", "release": { "au": "2017-03-11", @@ -38286,7 +38286,7 @@ } ], "head": "08050200", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08050200-041b0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08050200-041b0402.png", "name": "Octoling - Blue", "release": { "au": "2022-11-11", @@ -38352,7 +38352,7 @@ } ], "head": "21060000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21060000-03601202.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21060000-03601202.png", "name": "Alm", "release": { "au": "2017-05-20", @@ -38382,7 +38382,7 @@ } ], "head": "37c10000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_37c10000-038c0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_37c10000-038c0002.png", "name": "Richter", "release": { "au": "2020-01-17", @@ -38436,7 +38436,7 @@ } ], "head": "033f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033f0001-008f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033f0001-008f0502.png", "name": "Jeremiah", "release": { "au": "2015-10-03", @@ -38453,7 +38453,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c90401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c90401-02990e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c90401-02990e02.png", "name": "Bowser - Golf", "release": { "au": "2017-03-11", @@ -38507,7 +38507,7 @@ } ], "head": "019e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019e0001-00ad0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_019e0001-00ad0502.png", "name": "Booker", "release": { "au": "2015-11-21", @@ -38561,7 +38561,7 @@ } ], "head": "02ec0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ec0001-01c40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ec0001-01c40502.png", "name": "Lucky", "release": { "au": "2016-06-18", @@ -38639,7 +38639,7 @@ } ], "head": "01820000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01820000-02400502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01820000-02400502.png", "name": "K. K. Slider", "release": { "au": "2015-11-21", @@ -38693,7 +38693,7 @@ } ], "head": "01b50001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b50001-00510502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01b50001-00510502.png", "name": "Luna", "release": { "au": "2015-10-03", @@ -38747,7 +38747,7 @@ } ], "head": "049e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049e0001-01b70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049e0001-01b70502.png", "name": "Doc", "release": { "au": "2016-06-18", @@ -38801,7 +38801,7 @@ } ], "head": "04540001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04540001-01ae0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04540001-01ae0502.png", "name": "Celia", "release": { "au": "2016-06-18", @@ -38855,7 +38855,7 @@ } ], "head": "03990001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03990001-01c20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03990001-01c20502.png", "name": "Hippeux", "release": { "au": "2016-06-18", @@ -38872,7 +38872,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cd0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cd0101-02aa0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cd0101-02aa0e02.png", "name": "Baby Luigi - Soccer", "release": { "au": "2017-03-11", @@ -38926,7 +38926,7 @@ } ], "head": "04ec0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ec0001-00770502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ec0001-00770502.png", "name": "Poppy", "release": { "au": "2015-10-03", @@ -38980,7 +38980,7 @@ } ], "head": "04b20001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04b20001-01b90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04b20001-01b90502.png", "name": "Tank", "release": { "au": "2016-06-18", @@ -39022,7 +39022,7 @@ } ], "head": "01c10201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01c10201-03bb0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01c10201-03bb0502.png", "name": "Lottie - Island", "release": { "au": "2021-11-05", @@ -39076,7 +39076,7 @@ } ], "head": "02f90001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f90001-01020502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f90001-01020502.png", "name": "Marcel", "release": { "au": "2015-11-21", @@ -39130,7 +39130,7 @@ } ], "head": "018a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018a0001-00a90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018a0001-00a90502.png", "name": "Reese", "release": { "au": "2015-11-21", @@ -39172,7 +39172,7 @@ } ], "head": "06420000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_06420000-035f1102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_06420000-035f1102.png", "name": "Pikmin", "release": { "au": "2017-07-29", @@ -39226,7 +39226,7 @@ } ], "head": "03a40001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a40001-014f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03a40001-014f0502.png", "name": "Buck", "release": { "au": "2016-03-19", @@ -39280,7 +39280,7 @@ } ], "head": "04e70001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e70001-01320502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04e70001-01320502.png", "name": "Ricky", "release": { "au": "2016-03-19", @@ -39334,7 +39334,7 @@ } ], "head": "04610001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04610001-01610502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04610001-01610502.png", "name": "Cube", "release": { "au": "2016-03-19", @@ -39364,7 +39364,7 @@ } ], "head": "38400001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38400001-04241902.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38400001-04241902.png", "name": "Yuga Ohdo", "release": { "au": null, @@ -39381,7 +39381,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09ce0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ce0101-02af0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ce0101-02af0e02.png", "name": "Birdo - Soccer", "release": { "au": "2017-03-11", @@ -39398,7 +39398,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c30301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c30301-027a0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c30301-027a0e02.png", "name": "Daisy - Tennis", "release": { "au": "2017-03-11", @@ -39452,7 +39452,7 @@ } ], "head": "03d60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d60001-01570502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d60001-01570502.png", "name": "Astrid", "release": { "au": "2016-03-19", @@ -39530,7 +39530,7 @@ } ], "head": "01810100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810100-023f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810100-023f0502.png", "name": "Isabelle - Winter Outfit", "release": { "au": "2015-11-21", @@ -39596,7 +39596,7 @@ } ], "head": "01930000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01930000-02480502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01930000-02480502.png", "name": "Celeste", "release": { "au": "2016-01-30", @@ -39710,7 +39710,7 @@ } ], "head": "00030102", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030102-00420302.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030102-00420302.png", "name": "Pink Yarn Yoshi", "release": { "au": "2015-06-25", @@ -39740,7 +39740,7 @@ } ], "head": "38040001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38040001-03971702.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38040001-03971702.png", "name": "Ganda", "release": { "au": null, @@ -39757,7 +39757,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c30201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c30201-02790e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c30201-02790e02.png", "name": "Daisy - Baseball", "release": { "au": "2017-03-11", @@ -39774,7 +39774,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c90301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c90301-02980e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c90301-02980e02.png", "name": "Bowser - Tennis", "release": { "au": "2017-03-11", @@ -39828,7 +39828,7 @@ } ], "head": "04690001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04690001-01640502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04690001-01640502.png", "name": "Boomer", "release": { "au": "2016-03-19", @@ -39906,7 +39906,7 @@ } ], "head": "00090000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00090000-02650102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00090000-02650102.png", "name": "Diddy Kong", "release": { "au": "2016-11-05", @@ -39960,7 +39960,7 @@ } ], "head": "03c40001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03c40001-012b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03c40001-012b0502.png", "name": "Canberra", "release": { "au": "2016-03-19", @@ -39977,7 +39977,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09d10401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d10401-02c10e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d10401-02c10e02.png", "name": "Pink Gold Peach - Golf", "release": { "au": "2017-03-11", @@ -40031,7 +40031,7 @@ } ], "head": "050b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_050b0001-00990502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_050b0001-00990502.png", "name": "Chief", "release": { "au": "2015-10-03", @@ -40121,7 +40121,7 @@ } ], "head": "08000200", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000200-036a0402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08000200-036a0402.png", "name": "Inkling Boy - Neon Green", "release": { "au": "2017-07-21", @@ -40175,7 +40175,7 @@ } ], "head": "03940001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03940001-00890502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03940001-00890502.png", "name": "Biff", "release": { "au": "2015-10-03", @@ -40205,7 +40205,7 @@ } ], "head": "06c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_06c00000-000f0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_06c00000-000f0002.png", "name": "Little Mac", "release": { "au": "2014-12-12", @@ -40259,7 +40259,7 @@ } ], "head": "03b10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03b10001-00f00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03b10001-00f00502.png", "name": "Julian", "release": { "au": "2015-11-21", @@ -40313,7 +40313,7 @@ } ], "head": "02650001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02650001-01540502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02650001-01540502.png", "name": "Moe", "release": { "au": "2016-03-19", @@ -40330,7 +40330,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cc0201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cc0201-02a60e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cc0201-02a60e02.png", "name": "Baby Mario - Baseball", "release": { "au": "2017-03-11", @@ -40384,7 +40384,7 @@ } ], "head": "01a10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a10001-01100502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a10001-01100502.png", "name": "Phyllis", "release": { "au": "2016-03-19", @@ -40426,7 +40426,7 @@ } ], "head": "0a0a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0a0001-03c10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0a0001-03c10502.png", "name": "Megan", "release": { "au": "2021-11-05", @@ -40540,7 +40540,7 @@ } ], "head": "00030102", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030102-00410302.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030102-00410302.png", "name": "Green Yarn Yoshi", "release": { "au": "2015-06-25", @@ -40594,7 +40594,7 @@ } ], "head": "02f30001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f30001-02f90502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f30001-02f90502.png", "name": "Maddie", "release": { "au": "2016-11-10", @@ -40648,7 +40648,7 @@ } ], "head": "04ce0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ce0001-00db0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ce0001-00db0502.png", "name": "Wendy", "release": { "au": "2015-11-21", @@ -40702,7 +40702,7 @@ } ], "head": "04dd0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04dd0001-00a20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04dd0001-00a20502.png", "name": "Peanut", "release": { "au": "2015-10-03", @@ -40744,7 +40744,7 @@ } ], "head": "0a190001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a190001-03d00502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a190001-03d00502.png", "name": "Chabwick", "release": { "au": "2021-11-05", @@ -40798,7 +40798,7 @@ } ], "head": "01980001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01980001-00b10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01980001-00b10502.png", "name": "Leila", "release": { "au": "2015-11-21", @@ -40840,7 +40840,7 @@ } ], "head": "22410000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22410000-041e0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22410000-041e0002.png", "name": "Pyra", "release": { "au": "2023-07-21", @@ -40898,7 +40898,7 @@ } ], "head": "03740101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03740101-03190502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03740101-03190502.png", "name": "Rilla", "release": { "au": null, @@ -40952,7 +40952,7 @@ } ], "head": "01800000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01800000-00080002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01800000-00080002.png", "name": "Villager", "release": { "au": "2014-11-29", @@ -41006,7 +41006,7 @@ } ], "head": "01880001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01880001-03af0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01880001-03af0502.png", "name": "Mabel", "release": { "au": "2021-11-05", @@ -41060,7 +41060,7 @@ } ], "head": "049b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049b0001-00610502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_049b0001-00610502.png", "name": "Tiffany", "release": { "au": "2015-10-03", @@ -41077,7 +41077,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09ca0401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ca0401-029e0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ca0401-029e0e02.png", "name": "Bowser Jr. - Golf", "release": { "au": "2017-03-11", @@ -41167,7 +41167,7 @@ } ], "head": "1f030000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f030000-02570c02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f030000-02570c02.png", "name": "Waddle Dee", "release": { "au": "2016-06-11", @@ -41221,7 +41221,7 @@ } ], "head": "02c70001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02c70001-01220502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02c70001-01220502.png", "name": "Del", "release": { "au": "2016-03-19", @@ -41275,7 +41275,7 @@ } ], "head": "02f20001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f20001-00cc0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02f20001-00cc0502.png", "name": "Cookie", "release": { "au": "2015-11-21", @@ -41292,7 +41292,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c70301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c70301-028e0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c70301-028e0e02.png", "name": "Donkey Kong - Tennis", "release": { "au": "2017-03-11", @@ -41358,7 +41358,7 @@ } ], "head": "01810000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810000-037d0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810000-037d0002.png", "name": "Isabelle", "release": { "au": "2019-07-19", @@ -41412,7 +41412,7 @@ } ], "head": "34c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_34c00000-02530002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_34c00000-02530002.png", "name": "Ryu", "release": { "au": "2016-03-19", @@ -41466,7 +41466,7 @@ } ], "head": "03980001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03980001-00bf0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03980001-00bf0502.png", "name": "Harry", "release": { "au": "2015-11-21", @@ -41520,7 +41520,7 @@ } ], "head": "04010001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04010001-00660502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04010001-00660502.png", "name": "Deli", "release": { "au": "2015-10-03", @@ -41578,7 +41578,7 @@ } ], "head": "02e00101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02e00101-031d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02e00101-031d0502.png", "name": "Chelsea", "release": { "au": null, @@ -41728,7 +41728,7 @@ } ], "head": "01020100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01020100-001b0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01020100-001b0002.png", "name": "Ganondorf", "release": { "au": "2015-07-04", @@ -41745,7 +41745,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c30401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c30401-027b0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c30401-027b0e02.png", "name": "Daisy - Golf", "release": { "au": "2017-03-11", @@ -41762,7 +41762,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09d10301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d10301-02c00e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d10301-02c00e02.png", "name": "Pink Gold Peach - Tennis", "release": { "au": "2017-03-11", @@ -41816,7 +41816,7 @@ } ], "head": "03e60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03e60001-00ec0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03e60001-00ec0502.png", "name": "Bud", "release": { "au": "2015-11-21", @@ -41846,7 +41846,7 @@ } ], "head": "3a000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3a000000-03a10002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3a000000-03a10002.png", "name": "Joker", "release": { "au": "2020-09-25", @@ -41912,7 +41912,7 @@ } ], "head": "03710001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03710001-005c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03710001-005c0502.png", "name": "Al", "release": { "au": "2015-10-03", @@ -41966,7 +41966,7 @@ } ], "head": "03fe0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03fe0001-01a40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03fe0001-01a40502.png", "name": "Elise", "release": { "au": "2016-06-18", @@ -42020,7 +42020,7 @@ } ], "head": "05c30000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c30000-03800002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c30000-03800002.png", "name": "Dark Samus", "release": { "au": "2020-01-17", @@ -42074,7 +42074,7 @@ } ], "head": "03db0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03db0001-006d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03db0001-006d0502.png", "name": "Marcie", "release": { "au": "2015-10-03", @@ -42128,7 +42128,7 @@ } ], "head": "02160001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02160001-00570502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02160001-00570502.png", "name": "Curt", "release": { "au": "2015-10-03", @@ -42182,7 +42182,7 @@ } ], "head": "05150001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05150001-005b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05150001-005b0502.png", "name": "Kyle", "release": { "au": "2015-10-03", @@ -42260,7 +42260,7 @@ } ], "head": "21050100", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21050100-03630002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_21050100-03630002.png", "name": "Corrin - Player 2", "release": { "au": "2017-07-22", @@ -42314,7 +42314,7 @@ } ], "head": "024a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_024a0001-01d10502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_024a0001-01d10502.png", "name": "Angus", "release": { "au": "2016-06-18", @@ -42368,7 +42368,7 @@ } ], "head": "04780001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04780001-01630502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04780001-01630502.png", "name": "Curly", "release": { "au": "2016-03-19", @@ -42458,7 +42458,7 @@ } ], "head": "00030003", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030003-039fff02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00030003-039fff02.png", "name": "Yoshi - Power Up Band", "release": { "au": null, @@ -42475,7 +42475,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c00401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c00401-026c0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c00401-026c0e02.png", "name": "Mario - Golf", "release": { "au": "2017-03-11", @@ -42492,7 +42492,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cd0401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cd0401-02ad0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cd0401-02ad0e02.png", "name": "Baby Luigi - Golf", "release": { "au": "2017-03-11", @@ -42509,7 +42509,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c50501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c50501-02860e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c50501-02860e02.png", "name": "Wario - Horse Racing", "release": { "au": "2017-03-11", @@ -42526,7 +42526,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09ca0201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ca0201-029c0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ca0201-029c0e02.png", "name": "Bowser Jr. - Baseball", "release": { "au": "2017-03-11", @@ -42592,7 +42592,7 @@ } ], "head": "01810201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810201-011a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810201-011a0502.png", "name": "Isabelle - Kimono", "release": { "au": "2016-03-19", @@ -42646,7 +42646,7 @@ } ], "head": "033c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033c0001-01000502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_033c0001-01000502.png", "name": "Drift", "release": { "au": "2015-11-21", @@ -42700,7 +42700,7 @@ } ], "head": "03270001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03270001-01c30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03270001-01c30502.png", "name": "Margie", "release": { "au": "2016-06-18", @@ -42754,7 +42754,7 @@ } ], "head": "030d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030d0001-01840502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_030d0001-01840502.png", "name": "Mallary", "release": { "au": "2016-06-18", @@ -42771,7 +42771,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c90201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c90201-02970e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c90201-02970e02.png", "name": "Bowser - Baseball", "release": { "au": "2017-03-11", @@ -42861,7 +42861,7 @@ } ], "head": "1f020000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f020000-02560c02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1f020000-02560c02.png", "name": "King Dedede", "release": { "au": "2016-06-11", @@ -42915,7 +42915,7 @@ } ], "head": "35060000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35060000-040d0f02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35060000-040d0f02.png", "name": "Ena", "release": { "au": "2021-07-09", @@ -42932,7 +42932,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c10201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c10201-026f0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c10201-026f0e02.png", "name": "Luigi - Baseball", "release": { "au": "2017-03-11", @@ -42962,7 +42962,7 @@ } ], "head": "07820000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07820000-002f0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07820000-002f0002.png", "name": "Duck Hunt", "release": { "au": "2015-09-26", @@ -43016,7 +43016,7 @@ } ], "head": "03ab0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ab0001-03160502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ab0001-03160502.png", "name": "Cleo", "release": { "au": "2016-11-10", @@ -43070,7 +43070,7 @@ } ], "head": "018c0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018c0101-01180502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018c0101-01180502.png", "name": "Digby - Raincoat", "release": { "au": "2016-03-19", @@ -43087,7 +43087,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cf0501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cf0501-02b80e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cf0501-02b80e02.png", "name": "Rosalina - Horse Racing", "release": { "au": "2017-03-11", @@ -43129,7 +43129,7 @@ } ], "head": "0a0d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0d0001-03c40502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0d0001-03c40502.png", "name": "Cyd", "release": { "au": "2021-11-05", @@ -43259,7 +43259,7 @@ } ], "head": "00050000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00050000-00390102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00050000-00390102.png", "name": "Bowser", "release": { "au": "2015-03-21", @@ -43301,7 +43301,7 @@ } ], "head": "0a200001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a200001-03d70502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a200001-03d70502.png", "name": "Faith", "release": { "au": "2021-11-05", @@ -43355,7 +43355,7 @@ } ], "head": "03ad0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ad0001-01b20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ad0001-01b20502.png", "name": "Annalise", "release": { "au": "2016-06-18", @@ -43493,7 +43493,7 @@ } ], "head": "00000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-003d0102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-003d0102.png", "name": "Mario - Silver Edition", "release": { "au": "2015-05-30", @@ -43523,7 +43523,7 @@ } ], "head": "1bd70000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1bd70000-03860002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1bd70000-03860002.png", "name": "Incineroar", "release": { "au": "2019-11-15", @@ -43540,7 +43540,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c40501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c40501-02810e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c40501-02810e02.png", "name": "Yoshi - Horse Racing", "release": { "au": "2017-03-11", @@ -43594,7 +43594,7 @@ } ], "head": "02c90001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02c90001-00cd0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02c90001-00cd0502.png", "name": "Sly", "release": { "au": "2015-11-21", @@ -43648,7 +43648,7 @@ } ], "head": "02990001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02990001-00950502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02990001-00950502.png", "name": "Goose", "release": { "au": "2015-10-03", @@ -43726,7 +43726,7 @@ } ], "head": "08040000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08040000-03770402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08040000-03770402.png", "name": "Marina", "release": { "au": "2018-07-13", @@ -43792,7 +43792,7 @@ } ], "head": "08040000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08040000-04390402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08040000-04390402.png", "name": "Marina - Side Order", "release": { "au": "2024-09-05", @@ -43834,7 +43834,7 @@ } ], "head": "32400000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_32400000-025b0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_32400000-025b0002.png", "name": "Bayonetta", "release": { "au": "2017-07-22", @@ -43888,7 +43888,7 @@ } ], "head": "03080001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03080001-014d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03080001-014d0502.png", "name": "Joey", "release": { "au": "2016-03-19", @@ -43918,7 +43918,7 @@ } ], "head": "1d400000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1d400000-03870002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_1d400000-03870002.png", "name": "Pokemon Trainer", "release": { "au": "2019-07-19", @@ -43972,7 +43972,7 @@ } ], "head": "02620001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02620001-01370502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02620001-01370502.png", "name": "Tangy", "release": { "au": "2016-03-19", @@ -44026,7 +44026,7 @@ } ], "head": "04880001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04880001-00980502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04880001-00980502.png", "name": "Pancetti", "release": { "au": "2015-10-03", @@ -44080,7 +44080,7 @@ } ], "head": "05c20000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c20000-037f0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c20000-037f0002.png", "name": "Ridley", "release": { "au": "2018-12-07", @@ -44097,7 +44097,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c70401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c70401-028f0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c70401-028f0e02.png", "name": "Donkey Kong - Golf", "release": { "au": "2017-03-11", @@ -44151,7 +44151,7 @@ } ], "head": "036d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_036d0001-03040502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_036d0001-03040502.png", "name": "Louie", "release": { "au": "2016-11-10", @@ -44205,7 +44205,7 @@ } ], "head": "040c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_040c0001-01590502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_040c0001-01590502.png", "name": "Dora", "release": { "au": "2016-03-19", @@ -44259,7 +44259,7 @@ } ], "head": "02a50001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02a50001-018c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02a50001-018c0502.png", "name": "Broffina", "release": { "au": "2016-06-18", @@ -44313,7 +44313,7 @@ } ], "head": "043e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_043e0001-01490502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_043e0001-01490502.png", "name": "Blanche", "release": { "au": "2016-03-19", @@ -44330,7 +44330,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c00501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c00501-026d0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c00501-026d0e02.png", "name": "Mario - Horse Racing", "release": { "au": "2017-03-11", @@ -44384,7 +44384,7 @@ } ], "head": "03ee0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ee0001-008b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03ee0001-008b0502.png", "name": "Lionel", "release": { "au": "2015-10-03", @@ -44438,7 +44438,7 @@ } ], "head": "023d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_023d0001-01b50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_023d0001-01b50502.png", "name": "Jacques", "release": { "au": "2016-06-18", @@ -44492,7 +44492,7 @@ } ], "head": "04c50001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04c50001-01010502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04c50001-01010502.png", "name": "Vesta", "release": { "au": "2015-11-21", @@ -44546,7 +44546,7 @@ } ], "head": "03560001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03560001-01350502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03560001-01350502.png", "name": "Chevre", "release": { "au": "2016-03-19", @@ -44600,7 +44600,7 @@ } ], "head": "02fc0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02fc0001-018f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02fc0001-018f0502.png", "name": "Shep", "release": { "au": "2016-06-18", @@ -44690,7 +44690,7 @@ } ], "head": "35c20000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35c20000-036d0a02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35c20000-036d0a02.png", "name": "Specter Knight", "release": { "au": null, @@ -44744,7 +44744,7 @@ } ], "head": "05110001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05110001-01950502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05110001-01950502.png", "name": "Fang", "release": { "au": "2016-06-18", @@ -44810,7 +44810,7 @@ } ], "head": "01810501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810501-03bf0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01810501-03bf0502.png", "name": "Isabelle - Sweater", "release": { "au": "2021-11-05", @@ -44864,7 +44864,7 @@ } ], "head": "04970001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04970001-007a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04970001-007a0502.png", "name": "Snake", "release": { "au": "2015-10-03", @@ -44922,7 +44922,7 @@ } ], "head": "0a1c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1c0001-03d30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a1c0001-03d30502.png", "name": "Rio", "release": { "au": "2021-11-05", @@ -44976,7 +44976,7 @@ } ], "head": "028b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028b0001-00e30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028b0001-00e30502.png", "name": "Pekoe", "release": { "au": "2015-11-21", @@ -45030,7 +45030,7 @@ } ], "head": "01930001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01930001-01740502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01930001-01740502.png", "name": "Celeste", "release": { "au": "2016-06-18", @@ -45084,7 +45084,7 @@ } ], "head": "02b70001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02b70001-030f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02b70001-030f0502.png", "name": "Norma", "release": { "au": "2016-11-10", @@ -45138,7 +45138,7 @@ } ], "head": "02eb0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02eb0001-00de0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02eb0001-00de0502.png", "name": "Butch", "release": { "au": "2015-11-21", @@ -45192,7 +45192,7 @@ } ], "head": "04ee0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ee0001-014b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ee0001-014b0502.png", "name": "Marshal", "release": { "au": "2016-03-19", @@ -45270,7 +45270,7 @@ } ], "head": "08050300", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08050300-03900402.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_08050300-03900402.png", "name": "Octoling Octopus", "release": { "au": "2018-11-11", @@ -45400,7 +45400,7 @@ } ], "head": "00000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-02380602.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00000000-02380602.png", "name": "8-Bit Mario Classic Color", "release": { "au": "2015-09-12", @@ -45454,7 +45454,7 @@ } ], "head": "02600001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02600001-00d20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02600001-00d20502.png", "name": "Olivia", "release": { "au": "2015-11-21", @@ -45604,7 +45604,7 @@ } ], "head": "01010000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010000-000e0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01010000-000e0002.png", "name": "Zelda", "release": { "au": "2014-12-12", @@ -45694,7 +45694,7 @@ } ], "head": "05c00000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c00000-03651302.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05c00000-03651302.png", "name": "Samus Aran", "release": { "au": "2017-09-16", @@ -45748,7 +45748,7 @@ } ], "head": "02d80001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02d80001-00e20502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02d80001-00e20502.png", "name": "Zell", "release": { "au": "2015-11-21", @@ -45802,7 +45802,7 @@ } ], "head": "03830001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03830001-009b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03830001-009b0502.png", "name": "Clay", "release": { "au": "2015-10-03", @@ -45819,7 +45819,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cb0301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cb0301-02a20e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cb0301-02a20e02.png", "name": "Boo - Tennis", "release": { "au": "2017-03-11", @@ -45873,7 +45873,7 @@ } ], "head": "02ea0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ea0001-01800502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02ea0001-01800502.png", "name": "Goldie", "release": { "au": "2016-06-18", @@ -45903,7 +45903,7 @@ } ], "head": "38020001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38020001-03951702.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_38020001-03951702.png", "name": "Yabe", "release": { "au": null, @@ -45945,7 +45945,7 @@ } ], "head": "22800000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22800000-002c0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22800000-002c0002.png", "name": "Ness", "release": { "au": "2015-04-25", @@ -46035,7 +46035,7 @@ } ], "head": "35c10000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35c10000-036c0a02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35c10000-036c0a02.png", "name": "Plague Knight", "release": { "au": null, @@ -46089,7 +46089,7 @@ } ], "head": "03410001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03410001-030e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03410001-030e0502.png", "name": "Tad", "release": { "au": "2016-11-10", @@ -46143,7 +46143,7 @@ } ], "head": "041d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_041d0001-018a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_041d0001-018a0502.png", "name": "Penelope", "release": { "au": "2016-06-18", @@ -46160,7 +46160,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cf0401", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cf0401-02b70e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cf0401-02b70e02.png", "name": "Rosalina - Golf", "release": { "au": "2017-03-11", @@ -46190,7 +46190,7 @@ } ], "head": "07420000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07420000-001f0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_07420000-001f0002.png", "name": "Palutena", "release": { "au": "2015-07-04", @@ -46244,7 +46244,7 @@ } ], "head": "04cd0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04cd0001-01520502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04cd0001-01520502.png", "name": "Curlos", "release": { "au": "2016-03-19", @@ -46298,7 +46298,7 @@ } ], "head": "04100001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04100001-007f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04100001-007f0502.png", "name": "Samson", "release": { "au": "2015-10-03", @@ -46352,7 +46352,7 @@ } ], "head": "01a60001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a60001-00500502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a60001-00500502.png", "name": "Saharah", "release": { "au": "2015-10-03", @@ -46406,7 +46406,7 @@ } ], "head": "03d90001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d90001-01a50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03d90001-01a50502.png", "name": "Walt", "release": { "au": "2016-06-18", @@ -46460,7 +46460,7 @@ } ], "head": "043b0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_043b0001-03030502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_043b0001-03030502.png", "name": "Julia", "release": { "au": "2016-11-10", @@ -46514,7 +46514,7 @@ } ], "head": "037e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_037e0001-01560502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_037e0001-01560502.png", "name": "Hamlet", "release": { "au": "2016-03-19", @@ -46568,7 +46568,7 @@ } ], "head": "02200001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02200001-00fd0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02200001-00fd0502.png", "name": "Charlise", "release": { "au": "2015-11-21", @@ -46622,7 +46622,7 @@ } ], "head": "03c00001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03c00001-03100502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03c00001-03100502.png", "name": "Gonzo", "release": { "au": "2016-11-10", @@ -46676,7 +46676,7 @@ } ], "head": "03230001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03230001-00760502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03230001-00760502.png", "name": "Opal", "release": { "au": "2015-10-03", @@ -46730,7 +46730,7 @@ } ], "head": "046c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_046c0001-008c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_046c0001-008c0502.png", "name": "Flo", "release": { "au": "2015-10-03", @@ -46784,7 +46784,7 @@ } ], "head": "02a40001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02a40001-00720502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02a40001-00720502.png", "name": "Knox", "release": { "au": "2015-10-03", @@ -46874,7 +46874,7 @@ } ], "head": "00080000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00080000-02640102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_00080000-02640102.png", "name": "Donkey Kong", "release": { "au": "2016-10-08", @@ -46928,7 +46928,7 @@ } ], "head": "02fb0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02fb0001-00900502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_02fb0001-00900502.png", "name": "Cherry", "release": { "au": "2015-10-03", @@ -46994,7 +46994,7 @@ } ], "head": "018d0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018d0000-024c0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018d0000-024c0502.png", "name": "Rover", "release": { "au": "2016-03-19", @@ -47048,7 +47048,7 @@ } ], "head": "03820001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03820001-016b0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_03820001-016b0502.png", "name": "Soleil", "release": { "au": "2016-03-19", @@ -47102,7 +47102,7 @@ } ], "head": "028d0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028d0001-01bd0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028d0001-01bd0502.png", "name": "Barold", "release": { "au": "2016-06-18", @@ -47119,7 +47119,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09ce0201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ce0201-02b00e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ce0201-02b00e02.png", "name": "Birdo - Baseball", "release": { "au": "2017-03-11", @@ -47221,7 +47221,7 @@ } ], "head": "000a0000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_000a0000-00380102.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_000a0000-00380102.png", "name": "Toad", "release": { "au": "2015-03-21", @@ -47275,7 +47275,7 @@ } ], "head": "04000001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04000001-006f0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04000001-006f0502.png", "name": "Shari", "release": { "au": "2015-10-03", @@ -47329,7 +47329,7 @@ } ], "head": "01a30001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a30001-004a0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01a30001-004a0502.png", "name": "Joan", "release": { "au": "2015-10-03", @@ -47346,7 +47346,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09ca0101", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ca0101-029b0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09ca0101-029b0e02.png", "name": "Bowser Jr. - Soccer", "release": { "au": "2017-03-11", @@ -47400,7 +47400,7 @@ } ], "head": "04ed0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ed0001-00620502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04ed0001-00620502.png", "name": "Sheldon", "release": { "au": "2015-10-03", @@ -47454,7 +47454,7 @@ } ], "head": "028c0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028c0001-013e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_028c0001-013e0502.png", "name": "Chester", "release": { "au": "2016-03-19", @@ -47471,7 +47471,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09cd0501", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cd0501-02ae0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09cd0501-02ae0e02.png", "name": "Baby Luigi - Horse Racing", "release": { "au": "2017-03-11", @@ -47525,7 +47525,7 @@ } ], "head": "021f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021f0001-03170502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_021f0001-03170502.png", "name": "Ike", "release": { "au": "2016-11-10", @@ -47579,7 +47579,7 @@ } ], "head": "01970001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01970001-01770502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01970001-01770502.png", "name": "Leilani", "release": { "au": "2016-06-18", @@ -47633,7 +47633,7 @@ } ], "head": "05140001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05140001-01530502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05140001-01530502.png", "name": "Skye", "release": { "au": "2016-03-19", @@ -47675,7 +47675,7 @@ } ], "head": "0a020001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a020001-03b30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a020001-03b30502.png", "name": "C.J.", "release": { "au": "2021-11-05", @@ -47692,7 +47692,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09d00201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d00201-02ba0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09d00201-02ba0e02.png", "name": "Metal Mario - Baseball", "release": { "au": "2017-03-11", @@ -47734,7 +47734,7 @@ } ], "head": "35090000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35090000-04101802.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_35090000-04101802.png", "name": "Palico", "release": { "au": "2021-03-26", @@ -47751,7 +47751,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c00201", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c00201-026a0e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c00201-026a0e02.png", "name": "Mario - Baseball", "release": { "au": "2017-03-11", @@ -47805,7 +47805,7 @@ } ], "head": "01940001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01940001-03b60502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01940001-03b60502.png", "name": "Kicks", "release": { "au": "2021-11-05", @@ -47859,7 +47859,7 @@ } ], "head": "04c80001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04c80001-02ed0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04c80001-02ed0502.png", "name": "Stella", "release": { "au": "2016-11-10", @@ -47913,7 +47913,7 @@ } ], "head": "05100001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05100001-01070502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_05100001-01070502.png", "name": "Freya", "release": { "au": "2015-11-21", @@ -47955,7 +47955,7 @@ } ], "head": "0a0e0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0e0001-03c50502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_0a0e0001-03c50502.png", "name": "Judy", "release": { "au": "2021-11-05", @@ -48009,7 +48009,7 @@ } ], "head": "036a0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_036a0001-019d0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_036a0001-019d0502.png", "name": "Peewee", "release": { "au": "2016-06-18", @@ -48063,7 +48063,7 @@ } ], "head": "01830301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01830301-03be0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_01830301-03be0502.png", "name": "Tom Nook - Coat", "release": { "au": "2021-11-05", @@ -48080,7 +48080,7 @@ "gameSeries": "Mario Sports Superstars", "gamesSwitch": [], "head": "09c80301", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c80301-02930e02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_09c80301-02930e02.png", "name": "Diddy Kong - Tennis", "release": { "au": "2017-03-11", @@ -48134,7 +48134,7 @@ } ], "head": "018f0001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018f0001-00b30502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_018f0001-00b30502.png", "name": "Don Resetti", "release": { "au": "2015-11-21", @@ -48188,7 +48188,7 @@ } ], "head": "04b90001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04b90001-01600502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04b90001-01600502.png", "name": "Merengue", "release": { "au": "2016-03-19", @@ -48242,7 +48242,7 @@ } ], "head": "04d10001", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04d10001-009e0502.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_04d10001-009e0502.png", "name": "Muffy", "release": { "au": "2015-10-03", @@ -48272,7 +48272,7 @@ } ], "head": "22430000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22430000-043d1b02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22430000-043d1b02.png", "name": "Noah", "release": { "au": "2024-01-19", @@ -48302,7 +48302,7 @@ } ], "head": "22440000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22440000-043e1b02.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_22440000-043e1b02.png", "name": "Mio", "release": { "au": "2024-01-19", @@ -48332,7 +48332,7 @@ } ], "head": "3f000000", - "image": "https://raw.githubusercontent.com/GreemDev/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3f000000-042e0002.png", + "image": "https://raw.githubusercontent.com/Ryubing/Ryujinx/refs/heads/master/assets/amiibo/images/icon_3f000000-042e0002.png", "name": "Sora", "release": { "au": "2024-02-16", -- 2.47.1 From f1fd5c9366b3145d60c9f75e48e21cc382cb2dec Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 14:28:55 -0600 Subject: [PATCH 445/722] misc: chore: Link to Ryubing/Ryujinx in markdown docs --- COMPILING.md | 2 +- CONTRIBUTING.md | 18 +++++++++--------- README.md | 16 ++++++++-------- docs/workflow/pr-guide.md | 6 +++--- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/COMPILING.md b/COMPILING.md index 64f7e4e1b..c989a50eb 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -10,7 +10,7 @@ Make sure your SDK version is higher or equal to the required version specified ### Step 2 -Either use `git clone https://github.com/GreemDev/Ryujinx` on the command line to clone the repository or use Code --> Download zip button to get the files. +Either use `git clone https://github.com/Ryubing/Ryujinx` on the command line to clone the repository or use Code --> Download zip button to get the files. ### Step 3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 686ea3994..f2f3c3af2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,13 +14,13 @@ We always welcome bug reports, feature proposals and overall feedback. Here are ### Finding Existing Issues -Before filing a new issue, please search our [open issues](https://github.com/GreemDev/Ryujinx/issues) to check if it already exists. +Before filing a new issue, please search our [open issues](https://github.com/Ryubing/Ryujinx/issues) to check if it already exists. If you do find an existing issue, please include your own feedback in the discussion. Do consider upvoting (👍 reaction) the original post, as this helps us prioritize popular issues in our backlog. ### Writing a Good Feature Request -Please review any feature requests already opened to both check it has not already been suggested, and to familiarize yourself with the format. When ready to submit a proposal, please use the [Feature Request issue template](https://github.com/GreemDev/Ryujinx/issues/new?assignees=&labels=&projects=&template=feature_request.yml&title=%5BFeature+Request%5D). +Please review any feature requests already opened to both check it has not already been suggested, and to familiarize yourself with the format. When ready to submit a proposal, please use the [Feature Request issue template](https://github.com/Ryubing/Ryujinx/issues/new?assignees=&labels=&projects=&template=feature_request.yml&title=%5BFeature+Request%5D). ### Writing a Good Bug Report @@ -34,13 +34,13 @@ Ideally, a bug report should contain the following information: * A Ryujinx log file of the run instance where the issue occurred. Log files can be found in `[Executable Folder]/Logs` and are named chronologically. * Additional information, e.g. is it a regression from previous versions? Are there any known workarounds? -When ready to submit a bug report, please use the [Bug Report issue template](https://github.com/GreemDev/Ryujinx/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D). +When ready to submit a bug report, please use the [Bug Report issue template](https://github.com/Ryubing/Ryujinx/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D). ## Contributing Changes Project maintainers will merge changes that both improve the project and meet our standards for code quality. -The [Pull Request Guide](docs/workflow/pr-guide.md) and [License](https://github.com/GreemDev/Ryujinx/blob/master/LICENSE.txt) docs define additional guidance. +The [Pull Request Guide](docs/workflow/pr-guide.md) and [License](https://github.com/Ryubing/Ryujinx/blob/master/LICENSE.txt) docs define additional guidance. ### DOs and DON'Ts @@ -74,14 +74,14 @@ We use and recommend the following workflow: 3. In your fork, create a branch off of main (`git checkout -b mybranch`). - Branches are useful since they isolate your changes from incoming changes from upstream. They also enable you to create multiple PRs from the same fork. 4. Make and commit your changes to your branch. - - [Build Instructions](https://github.com/GreemDev/Ryujinx/blob/master/COMPILING.md) explains how to build and test. + - [Build Instructions](https://github.com/Ryubing/Ryujinx/blob/master/COMPILING.md) explains how to build and test. - Commit messages should be clear statements of action and intent. 6. Build the repository with your changes. - Make sure that the builds are clean. - Make sure that `dotnet format` has been run and any corrections tested and committed. 7. Create a pull request (PR) against the Ryujinx/Ryujinx repository's **main** branch. - State in the description what issue or improvement your change is addressing. - - Check if all the Continuous Integration checks are passing. Refer to [Actions](https://github.com/GreemDev/Ryujinx/actions) to check for outstanding errors. + - Check if all the Continuous Integration checks are passing. Refer to [Actions](https://github.com/Ryubing/Ryujinx/actions) to check for outstanding errors. 8. Wait for feedback or approval of your changes from the core development team - Details about the pull request [review procedure](docs/workflow/pr-guide.md). 9. When the team members have signed off, and all checks are green, your PR will be merged. @@ -90,7 +90,7 @@ We use and recommend the following workflow: ### Good First Issues -The team marks the most straightforward issues as [good first issues](https://github.com/GreemDev/Ryujinx/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). This set of issues is the place to start if you are interested in contributing but new to the codebase. +The team marks the most straightforward issues as [good first issues](https://github.com/Ryubing/Ryujinx/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). This set of issues is the place to start if you are interested in contributing but new to the codebase. ### Commit Messages @@ -113,7 +113,7 @@ Also do your best to factor commits appropriately, not too large with unrelated ### PR - CI Process -The [Ryujinx continuous integration](https://github.com/GreemDev/Ryujinx/actions) (CI) system will automatically perform the required builds and run tests (including the ones you are expected to run) for PRs. Builds and test runs must be clean or have bugs properly filed against flaky/unexpected failures that are unrelated to your change. +The [Ryujinx continuous integration](https://github.com/Ryubing/Ryujinx/actions) (CI) system will automatically perform the required builds and run tests (including the ones you are expected to run) for PRs. Builds and test runs must be clean or have bugs properly filed against flaky/unexpected failures that are unrelated to your change. If the CI build fails for any reason, the PR actions tab should be consulted for further information on the failure. There are a few usual suspects for such a failure: * `dotnet format` has not been run on the PR and has outstanding stylistic issues. @@ -134,5 +134,5 @@ Ryujinx uses some implementations and frameworks from other projects. The follow - The license of the file is [permissive](https://en.wikipedia.org/wiki/Permissive_free_software_licence). - The license of the file is left in-tact. -- The contribution is correctly attributed in the [3rd party notices](https://github.com/GreemDev/Ryujinx/blob/master/distribution/legal/THIRDPARTY.md) file in the repository, as needed. +- The contribution is correctly attributed in the [3rd party notices](https://github.com/Ryubing/Ryujinx/blob/master/distribution/legal/THIRDPARTY.md) file in the repository, as needed. diff --git a/README.md b/README.md index b8a788013..ce8cc9a61 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,11 @@ # Ryujinx -[![Release workflow](https://github.com/GreemDev/Ryujinx/actions/workflows/release.yml/badge.svg)](https://github.com/GreemDev/Ryujinx/actions/workflows/release.yml) -[![Latest release](https://img.shields.io/github/v/release/GreemDev/Ryujinx)](https://github.com/GreemDev/Ryujinx/releases/latest) +[![Release workflow](https://github.com/Ryubing/Ryujinx/actions/workflows/release.yml/badge.svg)](https://github.com/Ryubing/Ryujinx/actions/workflows/release.yml) +[![Latest release](https://img.shields.io/github/v/release/GreemDev/Ryujinx)](https://github.com/Ryubing/Ryujinx/releases/latest)
-[![Canary workflow](https://github.com/GreemDev/Ryujinx/actions/workflows/canary.yml/badge.svg)](https://github.com/GreemDev/Ryujinx/actions/workflows/canary.yml) -[![Latest canary release](https://img.shields.io/github/v/release/GreemDev/Ryujinx-Canary?label=canary)](https://github.com/GreemDev/Ryujinx-Canary/releases/latest) +[![Canary workflow](https://github.com/Ryubing/Ryujinx/actions/workflows/canary.yml/badge.svg)](https://github.com/Ryubing/Ryujinx/actions/workflows/canary.yml) +[![Latest canary release](https://img.shields.io/github/v/release/GreemDev/Ryujinx-Canary?label=canary)](https://github.com/Ryubing/Ryujinx-Canary/releases/latest) @@ -20,7 +20,7 @@ Ryujinx is an open-source Nintendo Switch emulator, originally created by gdkchan, written in C#. This emulator aims at providing excellent accuracy and performance, a user-friendly interface and consistent builds. It was written from scratch and development on the project began in September 2017. - Ryujinx is available on GitHub under the MIT license. + Ryujinx is available on GitHub under the MIT license.

@@ -30,7 +30,7 @@
This is not a Ryujinx revival project. This is not a Phoenix project.
- Guides and documentation can be found on the Wiki tab. + Guides and documentation can be found on the Wiki tab.

If you would like a more preservative fork of Ryujinx, check out ryujinx-mirror. @@ -58,13 +58,13 @@ Stable builds are made every so often, based on the `master` branch, that then g These stable builds exist so that the end user can get a more **enjoyable and stable experience**. They are released every month or so, to ensure consistent updates, while not being an annoying amount of individual updates to download over the course of that month. -You can find the latest stable release [here](https://github.com/GreemDev/Ryujinx/releases/latest). +You can find the latest stable release [here](https://github.com/Ryubing/Ryujinx/releases/latest). Canary builds are compiled automatically for each commit on the `master` branch. While we strive to ensure optimal stability and performance prior to pushing an update, these builds **may be unstable or completely broken**. These canary builds are only recommended for experienced users. -You can find the latest canary release [here](https://github.com/GreemDev/Ryujinx-Canary/releases/latest). +You can find the latest canary release [here](https://github.com/Ryubing/Ryujinx-Canary/releases/latest). ## Documentation diff --git a/docs/workflow/pr-guide.md b/docs/workflow/pr-guide.md index 50f44d87f..5616b0a0b 100644 --- a/docs/workflow/pr-guide.md +++ b/docs/workflow/pr-guide.md @@ -18,13 +18,13 @@ To merge pull requests, you must have write permissions in the repository. ## Pull Request Ownership -Every pull request will have automatically have labels and reviewers assigned. The label not only indicates the code segment which the change touches but also the area reviewers to be assigned. +Every pull request will automatically have labels and reviewers assigned. The label not only indicates the code segment which the change touches but also the area reviewers to be assigned. If during the code review process a merge conflict occurs, the PR author is responsible for its resolution. Help will be provided if necessary although GitHub makes this easier by allowing simple conflict resolution using the [conflict-editor](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/resolving-a-merge-conflict-on-github). ## Pull Request Builds -When submitting a PR to the `GreemDev/Ryujinx` repository, various builds will run validating many areas to ensure we keep developer productivity and product quality high. These various workflows can be tracked in the [Actions](https://github.com/GreemDev/Ryujinx/actions) tab of the repository. If the job continues to completion, the build artifacts will be uploaded and posted as a comment in the PR discussion. +When submitting a PR to the `Ryubing/Ryujinx` repository, various builds will run validating many areas to ensure we keep developer productivity and product quality high. These various workflows can be tracked in the [Actions](https://github.com/Ryubing/Ryujinx/actions) tab of the repository. If the job continues to completion, the build artifacts will be uploaded and posted as a comment in the PR discussion. ## Review Turnaround Times @@ -42,7 +42,7 @@ Anyone with write access can merge a pull request manually when the following co * The PR has been approved by two reviewers and any other objections are addressed. * You can request follow up reviews from the original reviewers if they requested changes. -* The PR successfully builds and passes all tests in the Continuous Integration (CI) system. In case of failures, refer to the [Actions](https://github.com/GreemDev/Ryujinx/actions) tab of your PR. +* The PR successfully builds and passes all tests in the Continuous Integration (CI) system. In case of failures, refer to the [Actions](https://github.com/Ryubing/Ryujinx/actions) tab of your PR. Typically, PRs are merged as one commit (squash merges). It creates a simpler history than a Merge Commit. "Special circumstances" are rare, and typically mean that there are a series of cleanly separated changes that will be too hard to understand if squashed together, or for some reason we want to preserve the ability to dissect them. -- 2.47.1 From beab133c8de8a33882927a79ab789d6c66612743 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:15:26 -0600 Subject: [PATCH 446/722] misc: chore: Fix object creation in HLE project --- src/Ryujinx.HLE/FileSystem/ContentManager.cs | 30 ++++----- .../FileSystem/VirtualFileSystem.cs | 10 +-- .../HOS/Applets/Cabinet/CabinetApplet.cs | 2 +- .../HOS/Applets/Error/ErrorApplet.cs | 2 +- .../SoftwareKeyboardApplet.cs | 2 +- .../SoftwareKeyboardRendererBase.cs | 26 ++++---- .../Applets/SoftwareKeyboard/TimedAction.cs | 10 +-- .../HOS/ArmProcessContextFactory.cs | 10 +-- src/Ryujinx.HLE/HOS/Horizon.cs | 12 ++-- src/Ryujinx.HLE/HOS/HorizonFsClient.cs | 2 +- .../HOS/Kernel/Memory/KPageHeap.cs | 2 +- .../HOS/Kernel/Memory/KPageTable.cs | 4 +- .../HOS/Kernel/Memory/KPageTableBase.cs | 8 +-- .../HOS/Kernel/SupervisorCall/Syscall.cs | 4 +- .../HOS/Kernel/Threading/KThread.cs | 2 +- src/Ryujinx.HLE/HOS/ModLoader.cs | 30 ++++----- .../Services/Account/Acc/AccountManager.cs | 4 +- .../Acc/AccountService/ManagerServer.cs | 2 +- .../SystemAppletProxy/ICommonStateGetter.cs | 2 +- .../HOS/Services/Caps/CaptureManager.cs | 2 +- .../FileSystemProxy/FileSystemProxyHelper.cs | 8 +-- .../Fs/FileSystemProxy/IFileSystem.cs | 4 +- .../HOS/Services/Fs/IFileSystemProxy.cs | 64 +++++++++---------- .../LdnMitm/LanDiscovery.cs | 2 +- .../LdnMitm/Proxy/LdnProxyUdpServer.cs | 2 +- .../LdnRyu/LdnMasterProxyClient.cs | 18 +++--- .../LdnRyu/Proxy/EphemeralPortPool.cs | 2 +- .../LdnRyu/Proxy/LdnProxy.cs | 14 ++-- .../LdnRyu/Proxy/LdnProxySocket.cs | 18 +++--- .../LdnRyu/Proxy/P2pProxyClient.cs | 6 +- .../LdnRyu/Proxy/P2pProxyServer.cs | 16 ++--- .../Nfc/AmiiboDecryption/AmiiboBinReader.cs | 6 +- .../Nfc/AmiiboDecryption/AmiiboDump.cs | 14 ++-- .../HOS/Services/Nv/Host1xContext.cs | 4 +- .../NvHostAsGpu/NvHostAsGpuDeviceFile.cs | 4 +- .../HOS/Services/Sdb/Pl/SharedFontManager.cs | 2 +- .../Settings/ISystemSettingsServer.cs | 2 +- .../Services/Ssl/BuiltInCertificateManager.cs | 2 +- .../Time/TimeZone/TimeZoneContentManager.cs | 6 +- .../Extensions/FileSystemExtensions.cs | 2 +- .../Extensions/LocalFileSystemExtensions.cs | 2 +- .../Extensions/MetaLoaderExtensions.cs | 2 +- .../Processes/Extensions/NcaExtensions.cs | 8 +-- .../PartitionFileSystemExtensions.cs | 4 +- .../Loaders/Processes/ProcessLoader.cs | 2 +- .../Loaders/Processes/ProcessLoaderHelper.cs | 4 +- src/Ryujinx.HLE/StructHelpers.cs | 2 +- .../Utilities/PartitionFileSystemUtils.cs | 2 +- 48 files changed, 194 insertions(+), 194 deletions(-) diff --git a/src/Ryujinx.HLE/FileSystem/ContentManager.cs b/src/Ryujinx.HLE/FileSystem/ContentManager.cs index bce896ea1..08c4f4eb4 100644 --- a/src/Ryujinx.HLE/FileSystem/ContentManager.cs +++ b/src/Ryujinx.HLE/FileSystem/ContentManager.cs @@ -217,8 +217,8 @@ namespace Ryujinx.HLE.FileSystem if (AocData.TryGetValue(aocTitleId, out AocItem aoc)) { - FileStream file = new FileStream(aoc.ContainerPath, FileMode.Open, FileAccess.Read); - using UniqueRef ncaFile = new UniqueRef(); + FileStream file = new(aoc.ContainerPath, FileMode.Open, FileAccess.Read); + using UniqueRef ncaFile = new(); switch (Path.GetExtension(aoc.ContainerPath)) { @@ -227,7 +227,7 @@ namespace Ryujinx.HLE.FileSystem xci.OpenFile(ref ncaFile.Ref, aoc.NcaPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); break; case ".nsp": - PartitionFileSystem pfs = new PartitionFileSystem(); + PartitionFileSystem pfs = new(); pfs.Initialize(file.AsStorage()); pfs.OpenFile(ref ncaFile.Ref, aoc.NcaPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); break; @@ -627,7 +627,7 @@ namespace Ryujinx.HLE.FileSystem private static IFile OpenPossibleFragmentedFile(IFileSystem filesystem, string path, OpenMode mode) { - using UniqueRef file = new UniqueRef(); + using UniqueRef file = new(); if (filesystem.FileExists($"{path}/00")) { @@ -733,11 +733,11 @@ namespace Ryujinx.HLE.FileSystem string cnmtPath = fs.EnumerateEntries("/", "*.cnmt").Single().FullPath; - using UniqueRef metaFile = new UniqueRef(); + using UniqueRef metaFile = new(); if (fs.OpenFile(ref metaFile.Ref, cnmtPath.ToU8Span(), OpenMode.Read).IsSuccess()) { - Cnmt meta = new Cnmt(metaFile.Get.AsStream()); + Cnmt meta = new(metaFile.Get.AsStream()); if (meta.Type == ContentMetaType.SystemUpdate) { @@ -762,7 +762,7 @@ namespace Ryujinx.HLE.FileSystem IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid); - using UniqueRef systemVersionFile = new UniqueRef(); + using UniqueRef systemVersionFile = new(); if (romfs.OpenFile(ref systemVersionFile.Ref, "/file".ToU8Span(), OpenMode.Read).IsSuccess()) { @@ -798,11 +798,11 @@ namespace Ryujinx.HLE.FileSystem string cnmtPath = fs.EnumerateEntries("/", "*.cnmt").Single().FullPath; - using UniqueRef metaFile = new UniqueRef(); + using UniqueRef metaFile = new(); if (fs.OpenFile(ref metaFile.Ref, cnmtPath.ToU8Span(), OpenMode.Read).IsSuccess()) { - Cnmt meta = new Cnmt(metaFile.Get.AsStream()); + Cnmt meta = new(metaFile.Get.AsStream()); IStorage contentStorage = contentNcaStream.AsStorage(); if (contentStorage.GetSize(out long size).IsSuccess()) @@ -867,11 +867,11 @@ namespace Ryujinx.HLE.FileSystem string cnmtPath = fs.EnumerateEntries("/", "*.cnmt").Single().FullPath; - using UniqueRef metaFile = new UniqueRef(); + using UniqueRef metaFile = new(); if (fs.OpenFile(ref metaFile.Ref, cnmtPath.ToU8Span(), OpenMode.Read).IsSuccess()) { - Cnmt meta = new Cnmt(metaFile.Get.AsStream()); + Cnmt meta = new(metaFile.Get.AsStream()); if (meta.Type == ContentMetaType.SystemUpdate) { @@ -885,7 +885,7 @@ namespace Ryujinx.HLE.FileSystem { IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid); - using UniqueRef systemVersionFile = new UniqueRef(); + using UniqueRef systemVersionFile = new(); if (romfs.OpenFile(ref systemVersionFile.Ref, "/file".ToU8Span(), OpenMode.Read).IsSuccess()) { @@ -935,11 +935,11 @@ namespace Ryujinx.HLE.FileSystem string cnmtPath = fs.EnumerateEntries("/", "*.cnmt").Single().FullPath; - using UniqueRef metaFile = new UniqueRef(); + using UniqueRef metaFile = new(); if (fs.OpenFile(ref metaFile.Ref, cnmtPath.ToU8Span(), OpenMode.Read).IsSuccess()) { - Cnmt meta = new Cnmt(metaFile.Get.AsStream()); + Cnmt meta = new(metaFile.Get.AsStream()); if (contentStorage.GetSize(out long size).IsSuccess()) { @@ -1002,7 +1002,7 @@ namespace Ryujinx.HLE.FileSystem { IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid); - using UniqueRef systemVersionFile = new UniqueRef(); + using UniqueRef systemVersionFile = new(); if (romfs.OpenFile(ref systemVersionFile.Ref, "/file".ToU8Span(), OpenMode.Read).IsSuccess()) { diff --git a/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs b/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs index 789caee4c..249d3f8d7 100644 --- a/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs +++ b/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs @@ -61,7 +61,7 @@ namespace Ryujinx.HLE.FileSystem public void LoadRomFs(ulong pid, string fileName) { - FileStream romfsStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); + FileStream romfsStream = new(fileName, FileMode.Open, FileAccess.Read); _romFsByPid.AddOrUpdate(pid, romfsStream, (pid, oldStream) => { @@ -194,7 +194,7 @@ namespace Ryujinx.HLE.FileSystem } fsServerClient = horizon.CreatePrivilegedHorizonClient(); - FileSystemServer fsServer = new FileSystemServer(fsServerClient); + FileSystemServer fsServer = new(fsServerClient); RandomDataGenerator randomGenerator = Random.Shared.NextBytes; @@ -208,7 +208,7 @@ namespace Ryujinx.HLE.FileSystem SdCard.SetSdCardInserted(true); - FileSystemServerConfig fsServerConfig = new FileSystemServerConfig + FileSystemServerConfig fsServerConfig = new() { ExternalKeySet = KeySet.ExternalKeySet, FsCreators = fsServerObjects.FsCreators, @@ -270,7 +270,7 @@ namespace Ryujinx.HLE.FileSystem { foreach (DirectoryEntryEx ticketEntry in fs.EnumerateEntries("/", "*.tik")) { - using UniqueRef ticketFile = new UniqueRef(); + using UniqueRef ticketFile = new(); Result result = fs.OpenFile(ref ticketFile.Ref, ticketEntry.FullPath.ToU8Span(), OpenMode.Read); @@ -334,7 +334,7 @@ namespace Ryujinx.HLE.FileSystem { Span info = stackalloc SaveDataInfo[8]; - using UniqueRef iterator = new UniqueRef(); + using UniqueRef iterator = new(); Result rc = hos.Fs.OpenSaveDataIterator(ref iterator.Ref, spaceId); if (rc.IsFailure()) diff --git a/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs index 294b8d1f6..04843deb0 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Cabinet/CabinetApplet.cs @@ -85,7 +85,7 @@ namespace Ryujinx.HLE.HOS.Applets.Cabinet { _system.Device.UIHandler.DisplayCabinetDialog(out string newName); byte[] nameBytes = Encoding.UTF8.GetBytes(newName); - Array41 nickName = new Array41(); + Array41 nickName = new(); nameBytes.CopyTo(nickName.AsSpan()); startParam.RegisterInfo.Nickname = nickName; NfpDevice devicePlayer1 = new() diff --git a/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs index a7917a157..ad841c0df 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs @@ -122,7 +122,7 @@ namespace Ryujinx.HLE.HOS.Applets.Error if (romfs.FileExists(filePath)) { - using UniqueRef binaryFile = new UniqueRef(); + using UniqueRef binaryFile = new(); romfs.OpenFile(ref binaryFile.Ref, filePath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); StreamReader reader = new(binaryFile.Get.AsStream(), Encoding.Unicode); diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs index ea906659f..7e88db51d 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs @@ -205,7 +205,7 @@ namespace Ryujinx.HLE.HOS.Applets else { // Call the configured GUI handler to get user's input. - SoftwareKeyboardUIArgs args = new SoftwareKeyboardUIArgs + SoftwareKeyboardUIArgs args = new() { KeyboardMode = _keyboardForegroundConfig.Mode, HeaderText = StripUnicodeControlCodes(_keyboardForegroundConfig.HeaderText), diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs index 9e861ad10..cc00a6392 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs @@ -219,7 +219,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard return; } - using SKPaint paint = new SKPaint(_messageFont) + using SKPaint paint = new(_messageFont) { Color = _textNormalColor, IsAntialias = true @@ -229,7 +229,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard SKRect messageRectangle = MeasureString(MessageText, paint); float messagePositionX = (_panelRectangle.Width - messageRectangle.Width) / 2 - messageRectangle.Left; float messagePositionY = _messagePositionY - messageRectangle.Top; - SKPoint messagePosition = new SKPoint(messagePositionX, messagePositionY); + SKPoint messagePosition = new(messagePositionX, messagePositionY); SKRect messageBoundRectangle = SKRect.Create(messagePositionX, messagePositionY, messageRectangle.Width, messageRectangle.Height); canvas.DrawRect(messageBoundRectangle, _panelBrush); @@ -336,7 +336,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard private void DrawTextBox(SKCanvas canvas, SoftwareKeyboardUIState state) { - using SKPaint textPaint = new SKPaint(_labelsTextFont) + using SKPaint textPaint = new(_labelsTextFont) { IsAntialias = true, Color = _textNormalColor @@ -360,7 +360,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard float inputTextX = (_panelRectangle.Width - inputTextRectangle.Width) / 2 - inputTextRectangle.Left; float inputTextY = boxY + 5; - SKPoint inputTextPosition = new SKPoint(inputTextX, inputTextY); + SKPoint inputTextPosition = new(inputTextX, inputTextY); canvas.DrawText(state.InputText, inputTextPosition.X, inputTextPosition.Y + (_labelsTextFont.Metrics.XHeight + _labelsTextFont.Metrics.Descent), textPaint); // Draw the cursor on top of the text and redraw the text with a different color if necessary. @@ -459,9 +459,9 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard using SKSurface textOverCursor = SKSurface.Create(new SKImageInfo((int)cursorRectangle.Width, (int)cursorRectangle.Height, SKColorType.Rgba8888)); SKCanvas textOverCanvas = textOverCursor.Canvas; - SKPoint textRelativePosition = new SKPoint(inputTextPosition.X - cursorRectangle.Left, inputTextPosition.Y - cursorRectangle.Top); + SKPoint textRelativePosition = new(inputTextPosition.X - cursorRectangle.Left, inputTextPosition.Y - cursorRectangle.Top); - using SKPaint cursorPaint = new SKPaint(_inputTextFont) + using SKPaint cursorPaint = new(_inputTextFont) { Color = cursorTextColor, IsAntialias = true @@ -469,7 +469,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard textOverCanvas.DrawText(state.InputText, textRelativePosition.X, textRelativePosition.Y + _inputTextFont.Metrics.XHeight + _inputTextFont.Metrics.Descent, cursorPaint); - SKPoint cursorPosition = new SKPoint((int)cursorRectangle.Left, (int)cursorRectangle.Top); + SKPoint cursorPosition = new((int)cursorRectangle.Left, (int)cursorRectangle.Top); textOverCursor.Flush(); canvas.DrawSurface(textOverCursor, cursorPosition); } @@ -492,7 +492,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard float iconWidth = icon.Width; float iconHeight = icon.Height; - using SKPaint paint = new SKPaint(_labelsTextFont) + using SKPaint paint = new(_labelsTextFont) { Color = _textNormalColor, IsAntialias = true @@ -514,8 +514,8 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard iconX += originX; iconY += originY; - SKPoint iconPosition = new SKPoint((int)iconX, (int)iconY); - SKPoint labelPosition = new SKPoint(labelPositionX + originX, labelPositionY + originY); + SKPoint iconPosition = new((int)iconX, (int)iconY); + SKPoint labelPosition = new(labelPositionX + originX, labelPositionY + originY); SKRect selectedRectangle = SKRect.Create(originX - 2 * _padPressedPenWidth, originY - 2 * _padPressedPenWidth, fullWidth + 4 * _padPressedPenWidth, fullHeight + 4 * _padPressedPenWidth); @@ -545,7 +545,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard private void DrawControllerToggle(SKCanvas canvas, SKPoint point) { - using SKPaint paint = new SKPaint(_labelsTextFont) + using SKPaint paint = new(_labelsTextFont) { IsAntialias = true, Color = _textNormalColor @@ -574,8 +574,8 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard keyX += originX; keyY += originY; - SKPoint labelPosition = new SKPoint(labelPositionX + originX, labelPositionY + originY); - SKPoint overlayPosition = new SKPoint((int)keyX, (int)keyY); + SKPoint labelPosition = new(labelPositionX + originX, labelPositionY + originY); + SKPoint overlayPosition = new((int)keyX, (int)keyY); canvas.DrawBitmap(_keyModeIcon, overlayPosition); canvas.DrawText(ControllerToggleText, labelPosition.X, labelPosition.Y + _labelsTextFont.Metrics.XHeight, paint); diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TimedAction.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TimedAction.cs index e98dadb77..7a6ce8f32 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TimedAction.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/TimedAction.cs @@ -79,11 +79,11 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard public void Reset(Action action, int totalMilliseconds, int sleepMilliseconds) { // Create a dedicated cancel token for each task. - TRef cancelled = new TRef(false); + TRef cancelled = new(false); Reset(new Thread(() => { - SleepSubstepData substepData = new SleepSubstepData(sleepMilliseconds); + SleepSubstepData substepData = new(sleepMilliseconds); int totalCount = totalMilliseconds / sleepMilliseconds; int totalRemainder = totalMilliseconds - totalCount * sleepMilliseconds; @@ -126,11 +126,11 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard public void Reset(Action action, int sleepMilliseconds) { // Create a dedicated cancel token for each task. - TRef cancelled = new TRef(false); + TRef cancelled = new(false); Reset(new Thread(() => { - SleepSubstepData substepData = new SleepSubstepData(sleepMilliseconds); + SleepSubstepData substepData = new(sleepMilliseconds); while (!Volatile.Read(ref cancelled.Value)) { @@ -147,7 +147,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard public void Reset(Action action) { // Create a dedicated cancel token for each task. - TRef cancelled = new TRef(false); + TRef cancelled = new(false); Reset(new Thread(() => { diff --git a/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs b/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs index 621a081fd..95b6167f3 100644 --- a/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs +++ b/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs @@ -51,8 +51,8 @@ namespace Ryujinx.HLE.HOS if (OperatingSystem.IsMacOS() && isArm64Host && for64Bit && context.Device.Configuration.UseHypervisor) { - HvEngine cpuEngine = new HvEngine(_tickSource); - HvMemoryManager memoryManager = new HvMemoryManager(context.Memory, addressSpaceSize, invalidAccessHandler); + HvEngine cpuEngine = new(_tickSource); + HvMemoryManager memoryManager = new(context.Memory, addressSpaceSize, invalidAccessHandler); processContext = new ArmProcessContext(pid, cpuEngine, _gpu, memoryManager, addressSpaceSize, for64Bit); } else @@ -86,7 +86,7 @@ namespace Ryujinx.HLE.HOS switch (mode) { case MemoryManagerMode.SoftwarePageTable: - MemoryManager memoryManager = new MemoryManager(context.Memory, addressSpaceSize, invalidAccessHandler); + MemoryManager memoryManager = new(context.Memory, addressSpaceSize, invalidAccessHandler); processContext = new ArmProcessContext(pid, cpuEngine, _gpu, memoryManager, addressSpaceSize, for64Bit); break; @@ -94,7 +94,7 @@ namespace Ryujinx.HLE.HOS case MemoryManagerMode.HostMappedUnsafe: if (addressSpace == null) { - MemoryManagerHostTracked memoryManagerHostTracked = new MemoryManagerHostTracked(context.Memory, addressSpaceSize, mode == MemoryManagerMode.HostMappedUnsafe, invalidAccessHandler); + MemoryManagerHostTracked memoryManagerHostTracked = new(context.Memory, addressSpaceSize, mode == MemoryManagerMode.HostMappedUnsafe, invalidAccessHandler); processContext = new ArmProcessContext(pid, cpuEngine, _gpu, memoryManagerHostTracked, addressSpaceSize, for64Bit); } else @@ -104,7 +104,7 @@ namespace Ryujinx.HLE.HOS Logger.Warning?.Print(LogClass.Emulation, $"Allocated address space (0x{addressSpace.AddressSpaceSize:X}) is smaller than guest application requirements (0x{addressSpaceSize:X})"); } - MemoryManagerHostMapped memoryManagerHostMapped = new MemoryManagerHostMapped(addressSpace, mode == MemoryManagerMode.HostMappedUnsafe, invalidAccessHandler); + MemoryManagerHostMapped memoryManagerHostMapped = new(addressSpace, mode == MemoryManagerMode.HostMappedUnsafe, invalidAccessHandler); processContext = new ArmProcessContext(pid, cpuEngine, _gpu, memoryManagerHostMapped, addressSpace.AddressSpaceSize, for64Bit); } break; diff --git a/src/Ryujinx.HLE/HOS/Horizon.cs b/src/Ryujinx.HLE/HOS/Horizon.cs index e0dd0f1c9..85f06ceba 100644 --- a/src/Ryujinx.HLE/HOS/Horizon.cs +++ b/src/Ryujinx.HLE/HOS/Horizon.cs @@ -154,11 +154,11 @@ namespace Ryujinx.HLE.HOS timePageList.AddRange(timePa, TimeSize / KPageTableBase.PageSize); appletCaptureBufferPageList.AddRange(appletCaptureBufferPa, AppletCaptureBufferSize / KPageTableBase.PageSize); - SharedMemoryStorage hidStorage = new SharedMemoryStorage(KernelContext, hidPageList); - SharedMemoryStorage fontStorage = new SharedMemoryStorage(KernelContext, fontPageList); - SharedMemoryStorage iirsStorage = new SharedMemoryStorage(KernelContext, iirsPageList); - SharedMemoryStorage timeStorage = new SharedMemoryStorage(KernelContext, timePageList); - SharedMemoryStorage appletCaptureBufferStorage = new SharedMemoryStorage(KernelContext, appletCaptureBufferPageList); + SharedMemoryStorage hidStorage = new(KernelContext, hidPageList); + SharedMemoryStorage fontStorage = new(KernelContext, fontPageList); + SharedMemoryStorage iirsStorage = new(KernelContext, iirsPageList); + SharedMemoryStorage timeStorage = new(KernelContext, timePageList); + SharedMemoryStorage appletCaptureBufferStorage = new(KernelContext, appletCaptureBufferPageList); HidStorage = hidStorage; @@ -304,7 +304,7 @@ namespace Ryujinx.HLE.HOS public bool LoadKip(string kipPath) { - using SharedRef kipFile = new SharedRef(new LocalStorage(kipPath, FileAccess.Read)); + using SharedRef kipFile = new(new LocalStorage(kipPath, FileAccess.Read)); return ProcessLoaderHelper.LoadKip(KernelContext, new KipExecutable(in kipFile)); } diff --git a/src/Ryujinx.HLE/HOS/HorizonFsClient.cs b/src/Ryujinx.HLE/HOS/HorizonFsClient.cs index 67b3d9b14..56bc3bec3 100644 --- a/src/Ryujinx.HLE/HOS/HorizonFsClient.cs +++ b/src/Ryujinx.HLE/HOS/HorizonFsClient.cs @@ -56,7 +56,7 @@ namespace Ryujinx.HLE.HOS Nca nca = new(_system.KeySet, ncaStorage); using IFileSystem ncaFileSystem = nca.OpenFileSystem(NcaSectionType.Data, _system.FsIntegrityCheckLevel); - using UniqueRef ncaFsRef = new UniqueRef(ncaFileSystem); + using UniqueRef ncaFsRef = new(ncaFileSystem); Result result = _fsClient.Register(mountName.ToU8Span(), ref ncaFsRef.Ref).ToHorizonResult(); if (result.IsFailure) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs index 3c3c83bb9..ec2eda97d 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs @@ -105,7 +105,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory _blocksCount = blockShifts.Length; _blocks = new Block[_memoryBlockPageShifts.Length]; - ArraySegment currBitmapStorage = new ArraySegment(new ulong[CalculateManagementOverheadSize(size, blockShifts)]); + ArraySegment currBitmapStorage = new(new ulong[CalculateManagementOverheadSize(size, blockShifts)]); for (int i = 0; i < blockShifts.Length; i++) { diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs index 8258c16c8..8985a4244 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTable.cs @@ -143,7 +143,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory bool shouldFillPages, byte fillValue) { - using KScopedPageList scopedPageList = new KScopedPageList(Context.MemoryManager, pageList); + using KScopedPageList scopedPageList = new(Context.MemoryManager, pageList); ulong currentVa = address; @@ -188,7 +188,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - using KScopedPageList scopedPageList = new KScopedPageList(Context.MemoryManager, pageList); + using KScopedPageList scopedPageList = new(Context.MemoryManager, pageList); foreach (KPageNode pageNode in pageList) { diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs index 1b7cd7cad..122845725 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs @@ -617,7 +617,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory return result; } - using OnScopeExit _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); + using OnScopeExit _ = new(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); return MapPages(address, pageList, permission, MemoryMapFlags.Private); } @@ -769,7 +769,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory Result result = region.AllocatePages(out KPageList pageList, pagesCount); - using OnScopeExit _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); + using OnScopeExit _ = new(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); void CleanUpForError() { @@ -1341,7 +1341,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory Result result = region.AllocatePages(out KPageList pageList, remainingPages); - using OnScopeExit _ = new OnScopeExit(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); + using OnScopeExit _ = new(() => pageList.DecrementPagesReferenceCount(Context.MemoryManager)); void CleanUpForError() { @@ -1867,7 +1867,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory ulong dstLastPagePa = 0; ulong currentVa = va; - using OnScopeExit _ = new OnScopeExit(() => + using OnScopeExit _ = new(() => { if (dstFirstPagePa != 0) { diff --git a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs index c439a8fff..9bcaf9538 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs @@ -105,7 +105,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall KProcess process = new(_context); - using OnScopeExit _ = new OnScopeExit(process.DecrementReferenceCount); + using OnScopeExit _ = new(process.DecrementReferenceCount); KResourceLimit resourceLimit; @@ -1425,7 +1425,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall KCodeMemory codeMemory = new(_context); - using OnScopeExit _ = new OnScopeExit(codeMemory.DecrementReferenceCount); + using OnScopeExit _ = new(codeMemory.DecrementReferenceCount); KProcess currentProcess = KernelStatic.GetCurrentProcess(); diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs index ce0810990..38599b5fa 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs @@ -1232,7 +1232,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading { if (_schedulerWaitEvent == null) { - ManualResetEvent schedulerWaitEvent = new ManualResetEvent(false); + ManualResetEvent schedulerWaitEvent = new(false); if (Interlocked.Exchange(ref _schedulerWaitEvent, schedulerWaitEvent) == null) { diff --git a/src/Ryujinx.HLE/HOS/ModLoader.cs b/src/Ryujinx.HLE/HOS/ModLoader.cs index 76edcc322..289a493a2 100644 --- a/src/Ryujinx.HLE/HOS/ModLoader.cs +++ b/src/Ryujinx.HLE/HOS/ModLoader.cs @@ -144,7 +144,7 @@ namespace Ryujinx.HLE.HOS private static string EnsureBaseDirStructure(string modsBasePath) { - DirectoryInfo modsDir = new DirectoryInfo(modsBasePath); + DirectoryInfo modsDir = new(modsBasePath); modsDir.CreateSubdirectory(AmsContentsDir); modsDir.CreateSubdirectory(AmsNsoPatchDir); @@ -201,7 +201,7 @@ namespace Ryujinx.HLE.HOS public static string GetApplicationDir(string modsBasePath, string applicationId) { - DirectoryInfo contentsDir = new DirectoryInfo(Path.Combine(modsBasePath, AmsContentsDir)); + DirectoryInfo contentsDir = new(Path.Combine(modsBasePath, AmsContentsDir)); DirectoryInfo applicationModsPath = FindApplicationDir(contentsDir, applicationId); if (applicationModsPath == null) @@ -273,7 +273,7 @@ namespace Ryujinx.HLE.HOS } } - FileInfo fsFile = new FileInfo(Path.Combine(applicationDir.FullName, RomfsContainer)); + FileInfo fsFile = new(Path.Combine(applicationDir.FullName, RomfsContainer)); if (fsFile.Exists) { Mod modData = modMetadata.Mods.FirstOrDefault(x => fsFile.FullName.Contains(x.Path)); @@ -432,7 +432,7 @@ namespace Ryujinx.HLE.HOS foreach (string path in searchDirPaths) { - DirectoryInfo searchDir = new DirectoryInfo(path); + DirectoryInfo searchDir = new(path); if (!searchDir.Exists) { Logger.Warning?.Print(LogClass.ModLoader, $"Mod Search Dir '{searchDir.FullName}' doesn't exist"); @@ -470,8 +470,8 @@ namespace Ryujinx.HLE.HOS return baseStorage; } - HashSet fileSet = new HashSet(); - RomFsBuilder builder = new RomFsBuilder(); + HashSet fileSet = new(); + RomFsBuilder builder = new(); int count = 0; Logger.Info?.Print(LogClass.ModLoader, $"Applying RomFS mods for Application {applicationId:X16}"); @@ -517,12 +517,12 @@ namespace Ryujinx.HLE.HOS Logger.Info?.Print(LogClass.ModLoader, $"Replaced {fileSet.Count} file(s) over {count} mod(s). Processing base storage..."); // And finally, the base romfs - RomFsFileSystem baseRom = new RomFsFileSystem(baseStorage); + RomFsFileSystem baseRom = new(baseStorage); foreach (DirectoryEntryEx entry in baseRom.EnumerateEntries() .Where(f => f.Type == DirectoryEntryType.File && !fileSet.Contains(f.FullPath)) .OrderBy(f => f.FullPath, StringComparer.Ordinal)) { - using UniqueRef file = new UniqueRef(); + using UniqueRef file = new(); baseRom.OpenFile(ref file.Ref, entry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); builder.AddFile(entry.FullPath, file.Release()); @@ -542,7 +542,7 @@ namespace Ryujinx.HLE.HOS .Where(f => f.Type == DirectoryEntryType.File) .OrderBy(f => f.FullPath, StringComparer.Ordinal)) { - LazyFile file = new LazyFile(entry.FullPath, rootPath, fs); + LazyFile file = new(entry.FullPath, rootPath, fs); if (fileSet.Add(entry.FullPath)) { @@ -569,7 +569,7 @@ namespace Ryujinx.HLE.HOS Logger.Info?.Print(LogClass.ModLoader, "Using replacement ExeFS partition"); - PartitionFileSystem pfs = new PartitionFileSystem(); + PartitionFileSystem pfs = new(); pfs.Initialize(mods.ExefsContainers[0].Path.OpenRead().AsStorage()).ThrowIfFailure(); exefs = pfs; @@ -753,7 +753,7 @@ namespace Ryujinx.HLE.HOS patches[i] = new MemPatch(); } - List buildIds = new List(programs.Length); + List buildIds = new(programs.Length); foreach (IExecutable p in programs) { @@ -793,17 +793,17 @@ namespace Ryujinx.HLE.HOS Logger.Info?.Print(LogClass.ModLoader, $"Matching IPS patch '{patchFile.Name}' in '{mod.Name}' bid={buildId}"); using FileStream fs = patchFile.OpenRead(); - using BinaryReader reader = new BinaryReader(fs); + using BinaryReader reader = new(fs); - IpsPatcher patcher = new IpsPatcher(reader); + IpsPatcher patcher = new(reader); patcher.AddPatches(patches[index]); } else if (StrEquals(".pchtxt", patchFile.Extension)) // IPSwitch { using FileStream fs = patchFile.OpenRead(); - using StreamReader reader = new StreamReader(fs); + using StreamReader reader = new(fs); - IPSwitchPatcher patcher = new IPSwitchPatcher(reader); + IPSwitchPatcher patcher = new(reader); int index = GetIndex(patcher.BuildId); if (index == -1) diff --git a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs index 279e696be..e97fb15a4 100644 --- a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs @@ -60,7 +60,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc } } - public void AddUser(string name, byte[] image, UserId userId = new UserId()) + public void AddUser(string name, byte[] image, UserId userId = new()) { if (userId.IsNull) { @@ -194,7 +194,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc SaveDataFilter saveDataFilter = SaveDataFilter.Make(programId: default, saveType: default, new LibHac.Fs.UserId((ulong)userId.High, (ulong)userId.Low), saveDataId: default, index: default); - using UniqueRef saveDataIterator = new UniqueRef(); + using UniqueRef saveDataIterator = new(); _horizonClient.Fs.OpenSaveDataIterator(ref saveDataIterator.Ref, SaveDataSpaceId.User, in saveDataFilter).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs index 7f98b0044..2f0454a89 100644 --- a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountService/ManagerServer.cs @@ -51,7 +51,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc.AccountService byte[] deviceAccountId = new byte[0x10]; RandomNumberGenerator.Fill(deviceId); - SecurityTokenDescriptor descriptor = new SecurityTokenDescriptor + SecurityTokenDescriptor descriptor = new() { Subject = new GenericIdentity(Convert.ToHexString(rawUserId).ToLower()), SigningCredentials = credentials, diff --git a/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ICommonStateGetter.cs b/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ICommonStateGetter.cs index f58e5b891..ad776fe6e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ICommonStateGetter.cs +++ b/src/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ICommonStateGetter.cs @@ -214,7 +214,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys _vrModeEnabled = vrModeEnabled; - using LblApi lblApi = new LblApi(); + using LblApi lblApi = new(); if (vrModeEnabled) { diff --git a/src/Ryujinx.HLE/HOS/Services/Caps/CaptureManager.cs b/src/Ryujinx.HLE/HOS/Services/Caps/CaptureManager.cs index 67cbb81ac..2dd86b436 100644 --- a/src/Ryujinx.HLE/HOS/Services/Caps/CaptureManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Caps/CaptureManager.cs @@ -118,7 +118,7 @@ namespace Ryujinx.HLE.HOS.Services.Caps } // NOTE: The saved JPEG file doesn't have the limitation in the extra EXIF data. - using SKBitmap bitmap = new SKBitmap(new SKImageInfo(1280, 720, SKColorType.Rgba8888)); + using SKBitmap bitmap = new(new SKImageInfo(1280, 720, SKColorType.Rgba8888)); Marshal.Copy(screenshotData, 0, bitmap.GetPixels(), screenshotData.Length); using SKData data = bitmap.Encode(SKEncodedImageFormat.Jpeg, 80); using FileStream file = File.OpenWrite(filePath); diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs index 796ece16c..53904369b 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs @@ -26,7 +26,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy try { LocalStorage storage = new(pfsPath, FileAccess.Read, FileMode.Open); - PartitionFileSystem pfs = new PartitionFileSystem(); + PartitionFileSystem pfs = new(); using SharedRef nsp = new(pfs); pfs.Initialize(storage).ThrowIfFailure(); @@ -58,7 +58,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy } LibHac.Fs.Fsa.IFileSystem fileSystem = nca.OpenFileSystem(NcaSectionType.Data, context.Device.System.FsIntegrityCheckLevel); - using SharedRef sharedFs = new SharedRef(fileSystem); + using SharedRef sharedFs = new(fileSystem); using SharedRef adapter = FileSystemInterfaceAdapter.CreateShared(ref sharedFs.Ref, true); @@ -99,7 +99,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy string filename = fullPath.Replace(archivePath.FullName, string.Empty).TrimStart('\\'); - using UniqueRef ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new(); Result result = nsp.OpenFile(ref ncaFile.Ref, filename.ToU8Span(), OpenMode.Read); if (result.IsFailure()) @@ -122,7 +122,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy { foreach (DirectoryEntryEx ticketEntry in nsp.EnumerateEntries("/", "*.tik")) { - using UniqueRef ticketFile = new UniqueRef(); + using UniqueRef ticketFile = new(); Result result = nsp.OpenFile(ref ticketFile.Ref, ticketEntry.FullPath.ToU8Span(), OpenMode.Read); diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFileSystem.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFileSystem.cs index ff0cb7aed..0ed56ea4e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFileSystem.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IFileSystem.cs @@ -111,7 +111,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy uint mode = context.RequestData.ReadUInt32(); ref readonly Path name = ref FileSystemProxyHelper.GetSfPath(context); - using SharedRef file = new SharedRef(); + using SharedRef file = new(); Result result = _fileSystem.Get.OpenFile(ref file.Ref, in name, mode); @@ -132,7 +132,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy uint mode = context.RequestData.ReadUInt32(); ref readonly Path name = ref FileSystemProxyHelper.GetSfPath(context); - using SharedRef dir = new SharedRef(); + using SharedRef dir = new(); Result result = _fileSystem.Get.OpenDirectory(ref dir.Ref, name, mode); diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs b/src/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs index 4ccc7cc92..d353ce64f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs @@ -110,7 +110,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs BisPartitionId bisPartitionId = (BisPartitionId)context.RequestData.ReadInt32(); ref readonly FspPath path = ref FileSystemProxyHelper.GetFspPath(context); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenBisFileSystem(ref fileSystem.Ref, in path, bisPartitionId); if (result.IsFailure()) @@ -128,7 +128,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenBisStorage(ServiceCtx context) { BisPartitionId bisPartitionId = (BisPartitionId)context.RequestData.ReadInt32(); - using SharedRef storage = new SharedRef(); + using SharedRef storage = new(); Result result = _baseFileSystemProxy.Get.OpenBisStorage(ref storage.Ref, bisPartitionId); if (result.IsFailure()) @@ -152,7 +152,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenSdCardFileSystem() -> object public ResultCode OpenSdCardFileSystem(ServiceCtx context) { - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenSdCardFileSystem(ref fileSystem.Ref); if (result.IsFailure()) @@ -260,7 +260,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { GameCardHandle handle = context.RequestData.ReadUInt32(); GameCardPartitionRaw partitionId = (GameCardPartitionRaw)context.RequestData.ReadInt32(); - using SharedRef storage = new SharedRef(); + using SharedRef storage = new(); Result result = _baseFileSystemProxy.Get.OpenGameCardStorage(ref storage.Ref, handle, partitionId); if (result.IsFailure()) @@ -279,7 +279,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { GameCardHandle handle = context.RequestData.ReadUInt32(); GameCardPartition partitionId = (GameCardPartition)context.RequestData.ReadInt32(); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenGameCardFileSystem(ref fileSystem.Ref, handle, partitionId); if (result.IsFailure()) @@ -360,7 +360,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt64(); SaveDataAttribute attribute = context.RequestData.ReadStruct(); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenSaveDataFileSystem(ref fileSystem.Ref, spaceId, in attribute); if (result.IsFailure()) @@ -379,7 +379,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt64(); SaveDataAttribute attribute = context.RequestData.ReadStruct(); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenSaveDataFileSystemBySystemSaveDataId(ref fileSystem.Ref, spaceId, in attribute); if (result.IsFailure()) @@ -398,7 +398,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt64(); SaveDataAttribute attribute = context.RequestData.ReadStruct(); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenReadOnlySaveDataFileSystem(ref fileSystem.Ref, spaceId, in attribute); if (result.IsFailure()) @@ -469,7 +469,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenSaveDataInfoReader() -> object public ResultCode OpenSaveDataInfoReader(ServiceCtx context) { - using SharedRef infoReader = new SharedRef(); + using SharedRef infoReader = new(); Result result = _baseFileSystemProxy.Get.OpenSaveDataInfoReader(ref infoReader.Ref); if (result.IsFailure()) @@ -487,7 +487,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenSaveDataInfoReaderBySaveDataSpaceId(ServiceCtx context) { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadByte(); - using SharedRef infoReader = new SharedRef(); + using SharedRef infoReader = new(); Result result = _baseFileSystemProxy.Get.OpenSaveDataInfoReaderBySaveDataSpaceId(ref infoReader.Ref, spaceId); if (result.IsFailure()) @@ -504,7 +504,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenSaveDataInfoReaderOnlyCacheStorage() -> object public ResultCode OpenSaveDataInfoReaderOnlyCacheStorage(ServiceCtx context) { - using SharedRef infoReader = new SharedRef(); + using SharedRef infoReader = new(); Result result = _baseFileSystemProxy.Get.OpenSaveDataInfoReaderOnlyCacheStorage(ref infoReader.Ref); if (result.IsFailure()) @@ -523,7 +523,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt64(); ulong saveDataId = context.RequestData.ReadUInt64(); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenSaveDataInternalStorageFileSystem(ref fileSystem.Ref, spaceId, saveDataId); if (result.IsFailure()) @@ -587,7 +587,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs { SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt64(); SaveDataFilter filter = context.RequestData.ReadStruct(); - using SharedRef infoReader = new SharedRef(); + using SharedRef infoReader = new(); Result result = _baseFileSystemProxy.Get.OpenSaveDataInfoReaderWithFilter(ref infoReader.Ref, spaceId, in filter); if (result.IsFailure()) @@ -664,7 +664,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs SaveDataSpaceId spaceId = (SaveDataSpaceId)context.RequestData.ReadInt32(); SaveDataMetaType metaType = (SaveDataMetaType)context.RequestData.ReadInt32(); SaveDataAttribute attribute = context.RequestData.ReadStruct(); - using SharedRef file = new SharedRef(); + using SharedRef file = new(); Result result = _baseFileSystemProxy.Get.OpenSaveDataMetaFile(ref file.Ref, spaceId, in attribute, metaType); if (result.IsFailure()) @@ -702,7 +702,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenImageDirectoryFileSystem(ServiceCtx context) { ImageDirectoryId directoryId = (ImageDirectoryId)context.RequestData.ReadInt32(); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenImageDirectoryFileSystem(ref fileSystem.Ref, directoryId); if (result.IsFailure()) @@ -719,7 +719,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenBaseFileSystem(ServiceCtx context) { BaseFileSystemId fileSystemId = (BaseFileSystemId)context.RequestData.ReadInt32(); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenBaseFileSystem(ref fileSystem.Ref, fileSystemId); if (result.IsFailure()) @@ -736,7 +736,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenContentStorageFileSystem(ServiceCtx context) { ContentStorageId contentStorageId = (ContentStorageId)context.RequestData.ReadInt32(); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenContentStorageFileSystem(ref fileSystem.Ref, contentStorageId); if (result.IsFailure()) @@ -753,7 +753,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenCloudBackupWorkStorageFileSystem(ServiceCtx context) { CloudBackupWorkStorageId storageId = (CloudBackupWorkStorageId)context.RequestData.ReadInt32(); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenCloudBackupWorkStorageFileSystem(ref fileSystem.Ref, storageId); if (result.IsFailure()) @@ -770,7 +770,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenCustomStorageFileSystem(ServiceCtx context) { CustomStorageId customStorageId = (CustomStorageId)context.RequestData.ReadInt32(); - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenCustomStorageFileSystem(ref fileSystem.Ref, customStorageId); if (result.IsFailure()) @@ -788,8 +788,8 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenDataStorageByCurrentProcess(ServiceCtx context) { LibHac.Fs.IStorage storage = context.Device.FileSystem.GetRomFs(_pid).AsStorage(true); - using SharedRef sharedStorage = new SharedRef(storage); - using SharedRef sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); + using SharedRef sharedStorage = new(storage); + using SharedRef sfStorage = new(new StorageInterfaceAdapter(ref sharedStorage.Ref)); MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref)); @@ -813,8 +813,8 @@ namespace Ryujinx.HLE.HOS.Services.Fs Logger.Info?.Print(LogClass.Loader, $"Opened AddOnContent Data TitleID={titleId:X16}"); LibHac.Fs.IStorage storage = context.Device.FileSystem.ModLoader.ApplyRomFsMods(titleId, aocStorage); - using SharedRef sharedStorage = new SharedRef(storage); - using SharedRef sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); + using SharedRef sharedStorage = new(storage); + using SharedRef sfStorage = new(new StorageInterfaceAdapter(ref sharedStorage.Ref)); MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref)); @@ -848,8 +848,8 @@ namespace Ryujinx.HLE.HOS.Services.Fs LibHac.Fs.IStorage ncaStorage = new LocalStorage(ncaPath, FileAccess.Read, FileMode.Open); Nca nca = new(context.Device.System.KeySet, ncaStorage); LibHac.Fs.IStorage romfsStorage = nca.OpenStorage(NcaSectionType.Data, context.Device.System.FsIntegrityCheckLevel); - using SharedRef sharedStorage = new SharedRef(romfsStorage); - using SharedRef sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); + using SharedRef sharedStorage = new(romfsStorage); + using SharedRef sfStorage = new(new StorageInterfaceAdapter(ref sharedStorage.Ref)); MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref)); } @@ -879,8 +879,8 @@ namespace Ryujinx.HLE.HOS.Services.Fs public ResultCode OpenPatchDataStorageByCurrentProcess(ServiceCtx context) { LibHac.Fs.IStorage storage = context.Device.FileSystem.GetRomFs(_pid).AsStorage(true); - using SharedRef sharedStorage = new SharedRef(storage); - using SharedRef sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); + using SharedRef sharedStorage = new(storage); + using SharedRef sfStorage = new(new StorageInterfaceAdapter(ref sharedStorage.Ref)); MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref)); @@ -899,8 +899,8 @@ namespace Ryujinx.HLE.HOS.Services.Fs } LibHac.Fs.IStorage storage = context.Device.FileSystem.GetRomFs(_pid).AsStorage(true); - using SharedRef sharedStorage = new SharedRef(storage); - using SharedRef sfStorage = new SharedRef(new StorageInterfaceAdapter(ref sharedStorage.Ref)); + using SharedRef sharedStorage = new(storage); + using SharedRef sfStorage = new(new StorageInterfaceAdapter(ref sharedStorage.Ref)); MakeObject(context, new FileSystemProxy.IStorage(ref sfStorage.Ref)); @@ -911,7 +911,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenDataStorageByCurrentProcess() -> object dataStorage public ResultCode OpenDeviceOperator(ServiceCtx context) { - using SharedRef deviceOperator = new SharedRef(); + using SharedRef deviceOperator = new(); Result result = _baseFileSystemProxy.Get.OpenDeviceOperator(ref deviceOperator.Ref); if (result.IsFailure()) @@ -1310,7 +1310,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs [CommandCmif(1008)] public ResultCode OpenRegisteredUpdatePartition(ServiceCtx context) { - using SharedRef fileSystem = new SharedRef(); + using SharedRef fileSystem = new(); Result result = _baseFileSystemProxy.Get.OpenRegisteredUpdatePartition(ref fileSystem.Ref); if (result.IsFailure()) @@ -1420,7 +1420,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs // OpenMultiCommitManager() -> object public ResultCode OpenMultiCommitManager(ServiceCtx context) { - using SharedRef commitManager = new SharedRef(); + using SharedRef commitManager = new(); Result result = _baseFileSystemProxy.Get.OpenMultiCommitManager(ref commitManager.Ref); if (result.IsFailure()) diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs index e6b8ab1ec..1f93cd1d9 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs @@ -244,7 +244,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm byte[] ip = address.GetAddressBytes(); - Array6 macAddress = new Array6(); + Array6 macAddress = new(); new byte[] { 0x02, 0x00, ip[0], ip[1], ip[2], ip[3] }.CopyTo(macAddress.AsSpan()); return macAddress; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/Proxy/LdnProxyUdpServer.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/Proxy/LdnProxyUdpServer.cs index b1040e646..374871311 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/Proxy/LdnProxyUdpServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/Proxy/LdnProxyUdpServer.cs @@ -138,7 +138,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm.Proxy lock (_scanLock) { - Dictionary results = new Dictionary(); + Dictionary results = new(); foreach (KeyValuePair last in _scanResultsLast) { diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs index a21fb190a..2277420f6 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs @@ -22,7 +22,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu { public bool NeedsRealId => true; - private static InitializeMessage InitializeMemory = new InitializeMessage(); + private static InitializeMessage InitializeMemory = new(); private const int InactiveTimeout = 6000; private const int FailureTimeout = 4000; @@ -31,16 +31,16 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu private bool _useP2pProxy; private NetworkError _lastError; - private readonly ManualResetEvent _connected = new ManualResetEvent(false); - private readonly ManualResetEvent _error = new ManualResetEvent(false); - private readonly ManualResetEvent _scan = new ManualResetEvent(false); - private readonly ManualResetEvent _reject = new ManualResetEvent(false); - private readonly AutoResetEvent _apConnected = new AutoResetEvent(false); + private readonly ManualResetEvent _connected = new(false); + private readonly ManualResetEvent _error = new(false); + private readonly ManualResetEvent _scan = new(false); + private readonly ManualResetEvent _reject = new(false); + private readonly AutoResetEvent _apConnected = new(false); private readonly RyuLdnProtocol _protocol; private readonly NetworkTimeout _timeout; - private readonly List _availableGames = new List(); + private readonly List _availableGames = new(); private DisconnectReason _disconnectReason; private P2pProxyServer _hostedProxy; @@ -490,7 +490,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu SendAsync(_protocol.Encode(PacketId.CreateAccessPoint, request, advertiseData)); // Send a network change event with dummy data immediately. Necessary to avoid crashes in some games - NetworkChangeEventArgs networkChangeEvent = new NetworkChangeEventArgs(new NetworkInfo() + NetworkChangeEventArgs networkChangeEvent = new(new NetworkInfo() { Common = new CommonNetworkInfo() { @@ -610,7 +610,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu SendAsync(_protocol.Encode(PacketId.Connect, request)); - NetworkChangeEventArgs networkChangeEvent = new NetworkChangeEventArgs(new NetworkInfo() + NetworkChangeEventArgs networkChangeEvent = new(new NetworkInfo() { Common = request.NetworkInfo.Common, Ldn = request.NetworkInfo.Ldn diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs index 9ea56d050..01579e78f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs @@ -7,7 +7,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy { private const ushort EphemeralBase = 49152; - private readonly List _ephemeralPorts = new List(); + private readonly List _ephemeralPorts = new(); private readonly Lock _lock = new(); diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs index bb390d49a..540ef9104 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs @@ -13,8 +13,8 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy public EndPoint LocalEndpoint { get; } public IPAddress LocalAddress { get; } - private readonly List _sockets = new List(); - private readonly Dictionary _ephemeralPorts = new Dictionary(); + private readonly List _sockets = new(); + private readonly Dictionary _ephemeralPorts = new(); private readonly IProxyClient _parent; private RyuLdnProtocol _protocol; @@ -132,7 +132,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy public void HandleData(LdnHeader header, ProxyDataHeader proxyHeader, byte[] data) { - ProxyDataPacket packet = new ProxyDataPacket() { Header = proxyHeader, Data = data }; + ProxyDataPacket packet = new() { Header = proxyHeader, Data = data }; ForRoutedSockets(proxyHeader.Info, (socket) => { @@ -179,7 +179,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy { // We must ask the other side to initialize a connection, so they can accept a socket for us. - ProxyConnectRequest request = new ProxyConnectRequest + ProxyConnectRequest request = new() { Info = MakeInfo(localEp, remoteEp, type) }; @@ -191,7 +191,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy { // We must tell the other side that we have accepted their request for connection. - ProxyConnectResponse request = new ProxyConnectResponse + ProxyConnectResponse request = new() { Info = MakeInfo(localEp, remoteEp, type) }; @@ -203,7 +203,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy { // We must tell the other side that our connection is dropped. - ProxyDisconnectMessage request = new ProxyDisconnectMessage + ProxyDisconnectMessage request = new() { Info = MakeInfo(localEp, remoteEp, type), DisconnectReason = 0 // TODO @@ -217,7 +217,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy // We send exactly as much as the user wants us to, currently instantly. // TODO: handle over "virtual mtu" (we have a max packet size to worry about anyways). fragment if tcp? throw if udp? - ProxyDataHeader request = new ProxyDataHeader + ProxyDataHeader request = new() { Info = MakeInfo(localEp, remoteEp, type), DataLength = (uint)buffer.Length diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs index 705e67ecd..bb93bcb45 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs @@ -18,21 +18,21 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy private readonly LdnProxy _proxy; private bool _isListening; - private readonly List _listenSockets = new List(); + private readonly List _listenSockets = new(); - private readonly Queue _connectRequests = new Queue(); + private readonly Queue _connectRequests = new(); - private readonly AutoResetEvent _acceptEvent = new AutoResetEvent(false); + private readonly AutoResetEvent _acceptEvent = new(false); private readonly int _acceptTimeout = -1; - private readonly Queue _errors = new Queue(); + private readonly Queue _errors = new(); - private readonly AutoResetEvent _connectEvent = new AutoResetEvent(false); + private readonly AutoResetEvent _connectEvent = new(false); private ProxyConnectResponse _connectResponse; private int _receiveTimeout = -1; - private readonly AutoResetEvent _receiveEvent = new AutoResetEvent(false); - private readonly Queue _receiveQueue = new Queue(); + private readonly AutoResetEvent _receiveEvent = new(false); + private readonly Queue _receiveQueue = new(); // private int _sendTimeout = -1; // Sends are techically instant right now, so not _really_ used. @@ -42,7 +42,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy // private bool _writeShutdown; private bool _closed; - private readonly Dictionary _socketOptions = new Dictionary() + private readonly Dictionary _socketOptions = new() { { SocketOptionName.Broadcast, 0 }, //TODO: honor this value { SocketOptionName.DontLinger, 0 }, @@ -147,7 +147,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy } } - IPEndPoint localEp = new IPEndPoint(_proxy.LocalAddress, _proxy.GetEphemeralPort(ProtocolType)); + IPEndPoint localEp = new(_proxy.LocalAddress, _proxy.GetEphemeralPort(ProtocolType)); LocalEndPoint = localEp; return localEp; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyClient.cs index 7da1aa998..7392ef62b 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyClient.cs @@ -16,9 +16,9 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy private readonly RyuLdnProtocol _protocol; - private readonly ManualResetEvent _connected = new ManualResetEvent(false); - private readonly ManualResetEvent _ready = new ManualResetEvent(false); - private readonly AutoResetEvent _error = new AutoResetEvent(false); + private readonly ManualResetEvent _connected = new(false); + private readonly ManualResetEvent _ready = new(false); + private readonly AutoResetEvent _error = new(false); public P2pProxyClient(string address, int port) : base(address, port) { diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs index fbce5c10c..26aba483c 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs @@ -29,22 +29,22 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy private const ushort AuthWaitSeconds = 1; - private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); + private readonly ReaderWriterLockSlim _lock = new(LockRecursionPolicy.SupportsRecursion); public ushort PrivatePort { get; } private ushort _publicPort; private bool _disposed; - private readonly CancellationTokenSource _disposedCancellation = new CancellationTokenSource(); + private readonly CancellationTokenSource _disposedCancellation = new(); private NatDevice _natDevice; private Mapping _portMapping; - private readonly List _players = new List(); + private readonly List _players = new(); - private readonly List _waitingTokens = new List(); - private readonly AutoResetEvent _tokenEvent = new AutoResetEvent(false); + private readonly List _waitingTokens = new(); + private readonly AutoResetEvent _tokenEvent = new(false); private uint _broadcastAddress; @@ -112,8 +112,8 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy public async Task NatPunch() { - NatDiscoverer discoverer = new NatDiscoverer(); - CancellationTokenSource cts = new CancellationTokenSource(1000); + NatDiscoverer discoverer = new(); + CancellationTokenSource cts = new(1000); NatDevice device; @@ -300,7 +300,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy session.SetIpv4(waitToken.VirtualIp); - ProxyConfig pconfig = new ProxyConfig + ProxyConfig pconfig = new() { ProxyIp = session.VirtualIpAddress, ProxySubnetMask = 0xFFFF0000 // TODO: Use from server. diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs index dffcf9c3f..44d164eba 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs @@ -131,7 +131,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption string nickName = amiiboDump.AmiiboNickname; LogFinalData(titleId, appId, head, tail, finalID, nickName, initDateTime, writeDateTime, settingsValue, writeCounterValue, applicationAreas); - VirtualAmiiboFile virtualAmiiboFile = new VirtualAmiiboFile + VirtualAmiiboFile virtualAmiiboFile = new() { FileVersion = 1, TagUuid = uid, @@ -182,7 +182,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption readBytes = newFileBytes; } - AmiiboDecryptor amiiboDecryptor = new AmiiboDecryptor(keyRetailBinPath); + AmiiboDecryptor amiiboDecryptor = new(keyRetailBinPath); AmiiboDump amiiboDump = amiiboDecryptor.DecryptAmiiboDump(readBytes); byte[] oldData = amiiboDump.GetData(); @@ -250,7 +250,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption readBytes = newFileBytes; } - AmiiboDecryptor amiiboDecryptor = new AmiiboDecryptor(keyRetailBinPath); + AmiiboDecryptor amiiboDecryptor = new(keyRetailBinPath); AmiiboDump amiiboDump = amiiboDecryptor.DecryptAmiiboDump(readBytes); amiiboDump.AmiiboNickname = newNickName; byte[] oldData = amiiboDump.GetData(); diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDump.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDump.cs index c5788a4b9..9873ae1be 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDump.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDump.cs @@ -91,7 +91,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption Array.Copy(seedBytes, 0, dataForAes, 2, seedBytes.Length); byte[] derivedBytes; - using (HMACSHA256 hmac = new HMACSHA256(key.HmacKey)) + using (HMACSHA256 hmac = new(key.HmacKey)) { derivedBytes = hmac.ComputeHash(dataForAes); } @@ -105,7 +105,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption dataForHmacKey[1] = 0x01; // Counter (1) Array.Copy(seedBytes, 0, dataForHmacKey, 2, seedBytes.Length); - using (HMACSHA256 hmac = new HMACSHA256(key.HmacKey)) + using (HMACSHA256 hmac = new(key.HmacKey)) { derivedBytes = hmac.ComputeHash(dataForHmacKey); } @@ -121,7 +121,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption Array.Copy(seedBytes, 0, dataForHmacKey, 2, seedBytes.Length); byte[] derivedBytes; - using (HMACSHA256 hmac = new HMACSHA256(key.HmacKey)) + using (HMACSHA256 hmac = new(key.HmacKey)) { derivedBytes = hmac.ComputeHash(dataForHmacKey); } @@ -229,7 +229,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption Array.Copy(data, 0x054, tagHmacData, 8, 44); byte[] tagHmac; - using (HMACSHA256 hmac = new HMACSHA256(hmacTagKey)) + using (HMACSHA256 hmac = new(hmacTagKey)) { tagHmac = hmac.ComputeHash(tagHmacData); } @@ -258,7 +258,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption Array.Copy(data, 0x054, dataHmacData, offset, len5); byte[] dataHmac; - using (HMACSHA256 hmac = new HMACSHA256(hmacDataKey)) + using (HMACSHA256 hmac = new(hmacDataKey)) { dataHmac = hmac.ComputeHash(dataHmacData); } @@ -278,7 +278,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption Array.Copy(data, 0x054, tagHmacData, 8, 44); byte[] calculatedTagHmac; - using (HMACSHA256 hmac = new HMACSHA256(hmacTagKey)) + using (HMACSHA256 hmac = new(hmacTagKey)) { calculatedTagHmac = hmac.ComputeHash(tagHmacData); } @@ -312,7 +312,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption Array.Copy(data, 0x054, dataHmacData, offset, len5); byte[] calculatedDataHmac; - using (HMACSHA256 hmac = new HMACSHA256(hmacDataKey)) + using (HMACSHA256 hmac = new(hmacDataKey)) { calculatedDataHmac = hmac.ComputeHash(dataHmacData); } diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/Host1xContext.cs b/src/Ryujinx.HLE/HOS/Services/Nv/Host1xContext.cs index 57b31e662..b8495f643 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nv/Host1xContext.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nv/Host1xContext.cs @@ -18,8 +18,8 @@ namespace Ryujinx.HLE.HOS.Services.Nv MemoryAllocator = new NvMemoryAllocator(); Host1x = new Host1xDevice(gpu.Synchronization); Smmu = gpu.CreateDeviceMemoryManager(pid); - NvdecDevice nvdec = new NvdecDevice(Smmu); - VicDevice vic = new VicDevice(Smmu); + NvdecDevice nvdec = new(Smmu); + VicDevice vic = new(Smmu); Host1x.RegisterDevice(ClassId.Nvdec, nvdec); Host1x.RegisterDevice(ClassId.Vic, vic); } diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs index 3422343fd..6ce45de88 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs @@ -33,8 +33,8 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostAsGpu } private static readonly VmRegion[] _vmRegions = { - new VmRegion((ulong)BigPageSize << 16, SmallRegionLimit), - new VmRegion(SmallRegionLimit, DefaultUserSize), + new((ulong)BigPageSize << 16, SmallRegionLimit), + new(SmallRegionLimit, DefaultUserSize), }; private readonly AddressSpaceContext _asContext; diff --git a/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs b/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs index 3cc43a551..d0e3a7a44 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs @@ -76,7 +76,7 @@ namespace Ryujinx.HLE.HOS.Services.Sdb.Pl Nca nca = new(_device.System.KeySet, ncaFileStream); IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _device.System.FsIntegrityCheckLevel); - using UniqueRef fontFile = new UniqueRef(); + using UniqueRef fontFile = new(); romfs.OpenFile(ref fontFile.Ref, ("/" + fontFilename).ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs b/src/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs index df2f76563..cfad2884a 100644 --- a/src/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs @@ -326,7 +326,7 @@ namespace Ryujinx.HLE.HOS.Services.Settings IFileSystem firmwareRomFs = firmwareContent.OpenFileSystem(NcaSectionType.Data, device.System.FsIntegrityCheckLevel); - using UniqueRef firmwareFile = new UniqueRef(); + using UniqueRef firmwareFile = new(); Result result = firmwareRomFs.OpenFile(ref firmwareFile.Ref, "/file".ToU8Span(), OpenMode.Read); if (result.IsFailure()) diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs index adde15b32..763ab8d60 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs @@ -129,7 +129,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel); - using UniqueRef trustedCertsFileRef = new UniqueRef(); + using UniqueRef trustedCertsFileRef = new(); Result result = romfs.OpenFile(ref trustedCertsFileRef.Ref, "/ssl_TrustedCerts.bdf".ToU8Span(), OpenMode.Read); diff --git a/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs b/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs index 82d33578e..e00af70f5 100644 --- a/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs @@ -94,7 +94,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone Nca nca = new(_virtualFileSystem.KeySet, ncaFileStream); IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel); - using UniqueRef binaryListFile = new UniqueRef(); + using UniqueRef binaryListFile = new(); romfs.OpenFile(ref binaryListFile.Ref, "/binaryList.txt".ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -139,7 +139,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone continue; } - using UniqueRef tzif = new UniqueRef(); + using UniqueRef tzif = new(); if (romfs.OpenFile(ref tzif.Ref, $"/zoneinfo/{locName}".ToU8Span(), OpenMode.Read).IsFailure()) { @@ -269,7 +269,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone Nca nca = new(_virtualFileSystem.KeySet, ncaFile); IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel); - using UniqueRef timeZoneBinaryFile = new UniqueRef(); + using UniqueRef timeZoneBinaryFile = new(); Result result = romfs.OpenFile(ref timeZoneBinaryFile.Ref, $"/zoneinfo/{locationName}".ToU8Span(), OpenMode.Read); diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs index d68b1e200..5874636e7 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs @@ -62,7 +62,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions Logger.Info?.Print(LogClass.Loader, $"Loading {name}..."); - using UniqueRef nsoFile = new UniqueRef(); + using UniqueRef nsoFile = new(); exeFs.OpenFile(ref nsoFile.Ref, $"/{name}".ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs index a5c22177f..140be91b5 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/LocalFileSystemExtensions.cs @@ -12,7 +12,7 @@ namespace Ryujinx.HLE.Loaders.Processes public static ProcessResult Load(this LocalFileSystem exeFs, Switch device, string romFsPath = "") { MetaLoader metaLoader = exeFs.GetNpdm(); - BlitStruct nacpData = new BlitStruct(1); + BlitStruct nacpData = new(1); ulong programId = metaLoader.GetProgramId(); device.Configuration.VirtualFileSystem.ModLoader.CollectMods([programId]); diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs index eed7a1be5..f6dab1583 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/MetaLoaderExtensions.cs @@ -45,7 +45,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions path = ProcessConst.MainNpdmPath; } - using UniqueRef npdmFile = new UniqueRef(); + using UniqueRef npdmFile = new(); fileSystem.OpenFile(ref npdmFile.Ref, path.ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs index c4d47d5bd..be37078f5 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/NcaExtensions.cs @@ -49,7 +49,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions ModLoader.GetSdModsBasePath()); // Load Nacp file. - BlitStruct nacpData = new BlitStruct(1); + BlitStruct nacpData = new(1); if (controlNca != null) { @@ -214,9 +214,9 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions public static BlitStruct GetNacp(this Nca controlNca, Switch device) { - BlitStruct nacpData = new BlitStruct(1); + BlitStruct nacpData = new(1); - using UniqueRef controlFile = new UniqueRef(); + using UniqueRef controlFile = new(); Result result = controlNca.OpenFileSystem(NcaSectionType.Data, device.System.FsIntegrityCheckLevel) .OpenFile(ref controlFile.Ref, "/control.nacp".ToU8Span(), OpenMode.Read); @@ -236,7 +236,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions public static Cnmt GetCnmt(this Nca cnmtNca, IntegrityCheckLevel checkLevel, ContentMetaType metaType) { string path = $"/{metaType}_{cnmtNca.Header.TitleId:x16}.cnmt"; - using UniqueRef cnmtFile = new UniqueRef(); + using UniqueRef cnmtFile = new(); try { diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs index 4a9eafea1..798b1f86f 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/PartitionFileSystemExtensions.cs @@ -28,7 +28,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions { fileSystem.ImportTickets(partitionFileSystem); - Dictionary programs = new Dictionary(); + Dictionary programs = new(); foreach (DirectoryEntryEx fileEntry in partitionFileSystem.EnumerateEntries("/", "*.cnmt.nca")) { @@ -152,7 +152,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions public static Nca GetNca(this IFileSystem fileSystem, KeySet keySet, string path) { - using UniqueRef ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new(); fileSystem.OpenFile(ref ncaFile.Ref, path.ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs index b9746da16..726b017b6 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs @@ -161,7 +161,7 @@ namespace Ryujinx.HLE.Loaders.Processes public bool LoadNxo(string path) { - BlitStruct nacpData = new BlitStruct(1); + BlitStruct nacpData = new(1); IFileSystem dummyExeFs = null; Stream romfsStream = null; diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs index 32266d5ca..b11057da2 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs @@ -180,7 +180,7 @@ namespace Ryujinx.HLE.Loaders.Processes KProcess process = new(context); - ArmProcessContextFactory processContextFactory = new ArmProcessContextFactory( + ArmProcessContextFactory processContextFactory = new( context.Device.System.TickSource, context.Device.Gpu, string.Empty, @@ -373,7 +373,7 @@ namespace Ryujinx.HLE.Loaders.Processes displayVersion = device.System.ContentManager.GetCurrentFirmwareVersion()?.VersionString ?? string.Empty; } - ArmProcessContextFactory processContextFactory = new ArmProcessContextFactory( + ArmProcessContextFactory processContextFactory = new( context.Device.System.TickSource, context.Device.Gpu, $"{programId:x16}", diff --git a/src/Ryujinx.HLE/StructHelpers.cs b/src/Ryujinx.HLE/StructHelpers.cs index f573f0eb6..a9a00c2d7 100644 --- a/src/Ryujinx.HLE/StructHelpers.cs +++ b/src/Ryujinx.HLE/StructHelpers.cs @@ -18,7 +18,7 @@ namespace Ryujinx.HLE const int OffsetOfApplicationPublisherStrings = 0x200; - BlitStruct nacpData = new BlitStruct(1); + BlitStruct nacpData = new(1); // name and publisher buffer // repeat once for each locale (the ApplicationControlProperty has 16 locales) diff --git a/src/Ryujinx.HLE/Utilities/PartitionFileSystemUtils.cs b/src/Ryujinx.HLE/Utilities/PartitionFileSystemUtils.cs index 1bd6e0ff7..671bcaa06 100644 --- a/src/Ryujinx.HLE/Utilities/PartitionFileSystemUtils.cs +++ b/src/Ryujinx.HLE/Utilities/PartitionFileSystemUtils.cs @@ -22,7 +22,7 @@ namespace Ryujinx.HLE.Utilities } else { - PartitionFileSystem pfsTemp = new PartitionFileSystem(); + PartitionFileSystem pfsTemp = new(); Result initResult = pfsTemp.Initialize(file.AsStorage()); if (throwOnFailure) -- 2.47.1 From 94b65aec02fdaaf5f4bee80f27e803148074ccde Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:15:48 -0600 Subject: [PATCH 447/722] misc: chore: Fix object creation in Cpu project --- src/Ryujinx.Cpu/AddressTable.cs | 6 +++--- src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs | 2 +- src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs | 2 +- src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs | 6 +++--- src/Ryujinx.Cpu/PrivateMemoryAllocator.cs | 8 ++++---- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx.Cpu/AddressTable.cs b/src/Ryujinx.Cpu/AddressTable.cs index 4015e0801..5dc72a7c8 100644 --- a/src/Ryujinx.Cpu/AddressTable.cs +++ b/src/Ryujinx.Cpu/AddressTable.cs @@ -49,7 +49,7 @@ namespace ARMeilleure.Common public TableSparseBlock(ulong size, Action ensureMapped, PageInitDelegate pageInit) { - SparseMemoryBlock block = new SparseMemoryBlock(size, pageInit, null); + SparseMemoryBlock block = new(size, pageInit, null); _trackingEvent = (ulong address, ulong size, bool write) => { @@ -363,7 +363,7 @@ namespace ARMeilleure.Common /// The new sparse block that was added private TableSparseBlock ReserveNewSparseBlock() { - TableSparseBlock block = new TableSparseBlock(_sparseBlockSize, EnsureMapped, InitLeafPage); + TableSparseBlock block = new(_sparseBlockSize, EnsureMapped, InitLeafPage); _sparseReserved.Add(block); _sparseReservedOffset = 0; @@ -416,7 +416,7 @@ namespace ARMeilleure.Common IntPtr address = (IntPtr)NativeAllocator.Instance.Allocate((uint)size); page = new AddressTablePage(false, address); - Span span = new Span((void*)page.Address, length); + Span span = new((void*)page.Address, length); span.Fill(fill); } diff --git a/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs b/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs index 146805982..308e5f0d2 100644 --- a/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs +++ b/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs @@ -340,7 +340,7 @@ namespace Ryujinx.Cpu.Jit { int pages = GetPagesCount(va, (uint)size, out va); - List regions = new List(); + List regions = new(); ulong regionStart = GetPhysicalAddressChecked(va); ulong regionSize = PageSize; diff --git a/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs b/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs index d802f5046..98b00ca0b 100644 --- a/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs +++ b/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs @@ -443,7 +443,7 @@ namespace Ryujinx.Cpu.Jit return null; } - List regions = new List(); + List regions = new(); ulong endVa = va + size; try diff --git a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs index 340ae43d1..fb30be2b6 100644 --- a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs +++ b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs @@ -342,7 +342,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 public readonly void Cset(Operand rd, ArmCondition condition) { - Operand zr = new Operand(ZrRegister, RegisterType.Integer, rd.Type); + Operand zr = new(ZrRegister, RegisterType.Integer, rd.Type); Csinc(rd, zr, zr, (ArmCondition)((int)condition ^ 1)); } @@ -857,7 +857,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 public readonly void PrfmI(Operand rn, int imm, uint type, uint target, uint policy) { - Operand rt = new Operand((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32); + Operand rt = new((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32); WriteInstruction(0xf9800000u | (EncodeUImm12(imm, 3) << 10), rt, rn); } @@ -868,7 +868,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 public readonly void Prfum(Operand rn, int imm, uint type, uint target, uint policy) { - Operand rt = new Operand((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32); + Operand rt = new((int)EncodeTypeTargetPolicy(type, target, policy), RegisterType.Integer, OperandType.I32); WriteInstruction(0xf8800000u | (EncodeSImm9(imm) << 12), rt, rn); } diff --git a/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs b/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs index 99528b576..6ed3be524 100644 --- a/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs +++ b/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs @@ -40,7 +40,7 @@ namespace Ryujinx.Cpu Size = size; _freeRanges = new List { - new Range(0, size), + new(0, size), }; } @@ -84,7 +84,7 @@ namespace Ryujinx.Cpu private void InsertFreeRange(ulong offset, ulong size) { - Range range = new Range(offset, size); + Range range = new(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { @@ -97,7 +97,7 @@ namespace Ryujinx.Cpu private void InsertFreeRangeComingled(ulong offset, ulong size) { ulong endOffset = offset + size; - Range range = new Range(offset, size); + Range range = new(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { @@ -214,7 +214,7 @@ namespace Ryujinx.Cpu ulong blockAlignedSize = BitUtils.AlignUp(size, _blockAlignment); - MemoryBlock memory = new MemoryBlock(blockAlignedSize, _allocationFlags); + MemoryBlock memory = new(blockAlignedSize, _allocationFlags); T newBlock = createBlock(memory, blockAlignedSize); InsertBlock(newBlock); -- 2.47.1 From eae6dba61016ed521af40e71c3325b514c1e522c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:16:12 -0600 Subject: [PATCH 448/722] misc: chore: Fix object creation in OpenGL project --- src/Ryujinx.Graphics.OpenGL/Effects/FsrScalingFilter.cs | 2 +- .../Effects/SmaaPostProcessingEffect.cs | 6 +++--- src/Ryujinx.Graphics.OpenGL/Window.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx.Graphics.OpenGL/Effects/FsrScalingFilter.cs b/src/Ryujinx.Graphics.OpenGL/Effects/FsrScalingFilter.cs index c1275eb80..0bc9d6f45 100644 --- a/src/Ryujinx.Graphics.OpenGL/Effects/FsrScalingFilter.cs +++ b/src/Ryujinx.Graphics.OpenGL/Effects/FsrScalingFilter.cs @@ -98,7 +98,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects { _intermediaryTexture?.Dispose(); TextureCreateInfo originalInfo = view.Info; - TextureCreateInfo info = new TextureCreateInfo(width, + TextureCreateInfo info = new(width, height, originalInfo.Depth, originalInfo.Levels, diff --git a/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs b/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs index bb320fcec..a31c10891 100644 --- a/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs +++ b/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs @@ -117,7 +117,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa private void Initialize() { - TextureCreateInfo areaInfo = new TextureCreateInfo(AreaWidth, + TextureCreateInfo areaInfo = new(AreaWidth, AreaHeight, 1, 1, @@ -133,7 +133,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa SwizzleComponent.Blue, SwizzleComponent.Alpha); - TextureCreateInfo searchInfo = new TextureCreateInfo(SearchWidth, + TextureCreateInfo searchInfo = new(SearchWidth, SearchHeight, 1, 1, @@ -194,7 +194,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa GL.ActiveTexture(TextureUnit.Texture2); int previousTextureBinding2 = GL.GetInteger(GetPName.TextureBinding2D); - Framebuffer framebuffer = new Framebuffer(); + Framebuffer framebuffer = new(); framebuffer.Bind(); framebuffer.AttachColor(0, edgeOutput); GL.Clear(ClearBufferMask.ColorBufferBit); diff --git a/src/Ryujinx.Graphics.OpenGL/Window.cs b/src/Ryujinx.Graphics.OpenGL/Window.cs index c75fa5078..2813e03bc 100644 --- a/src/Ryujinx.Graphics.OpenGL/Window.cs +++ b/src/Ryujinx.Graphics.OpenGL/Window.cs @@ -394,7 +394,7 @@ namespace Ryujinx.Graphics.OpenGL { _upscaledTexture?.Dispose(); - TextureCreateInfo info = new TextureCreateInfo( + TextureCreateInfo info = new( _width, _height, 1, -- 2.47.1 From 5f023ca49bbcb45fa92a4059e0a1c58285bf486a Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:16:32 -0600 Subject: [PATCH 449/722] misc: chore: Fix object creation in Vulkan project --- src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs | 4 +- src/Ryujinx.Graphics.Vulkan/BitMapStruct.cs | 2 +- src/Ryujinx.Graphics.Vulkan/BufferHolder.cs | 12 ++--- src/Ryujinx.Graphics.Vulkan/BufferManager.cs | 30 ++++++------ .../BufferMirrorRangeList.cs | 2 +- .../CommandBufferPool.cs | 6 +-- .../DescriptorSetCollection.cs | 14 +++--- .../DescriptorSetManager.cs | 4 +- .../DescriptorSetTemplate.cs | 4 +- .../DescriptorSetUpdater.cs | 4 +- .../Effects/FsrScalingFilter.cs | 2 +- .../Effects/SmaaPostProcessingEffect.cs | 6 +-- src/Ryujinx.Graphics.Vulkan/FenceHolder.cs | 2 +- .../FramebufferParams.cs | 2 +- src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs | 2 +- src/Ryujinx.Graphics.Vulkan/HelperShader.cs | 20 ++++---- .../HostMemoryAllocator.cs | 8 ++-- .../MemoryAllocator.cs | 2 +- .../MemoryAllocatorBlockList.cs | 10 ++-- src/Ryujinx.Graphics.Vulkan/PipelineBase.cs | 20 ++++---- .../PipelineConverter.cs | 4 +- .../PipelineLayoutCache.cs | 2 +- .../PipelineLayoutFactory.cs | 4 +- src/Ryujinx.Graphics.Vulkan/PipelineState.cs | 28 +++++------ .../Queries/BufferedQuery.cs | 2 +- .../RenderPassHolder.cs | 6 +-- src/Ryujinx.Graphics.Vulkan/SamplerHolder.cs | 4 +- src/Ryujinx.Graphics.Vulkan/Shader.cs | 4 +- .../ShaderCollection.cs | 2 +- src/Ryujinx.Graphics.Vulkan/SpecInfo.cs | 2 +- src/Ryujinx.Graphics.Vulkan/TextureCopy.cs | 46 +++++++++---------- src/Ryujinx.Graphics.Vulkan/TextureStorage.cs | 14 +++--- src/Ryujinx.Graphics.Vulkan/TextureView.cs | 24 +++++----- .../VulkanDebugMessenger.cs | 2 +- .../VulkanInitialization.cs | 24 +++++----- src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | 2 +- src/Ryujinx.Graphics.Vulkan/Window.cs | 18 ++++---- 37 files changed, 172 insertions(+), 172 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs b/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs index 38517bfd9..75398b877 100644 --- a/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs +++ b/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs @@ -145,7 +145,7 @@ namespace Ryujinx.Graphics.Vulkan stages |= PipelineStageFlags.DrawIndirectBit; } - MemoryBarrier barrier = new MemoryBarrier() + MemoryBarrier barrier = new() { SType = StructureType.MemoryBarrier, SrcAccessMask = access, @@ -175,7 +175,7 @@ namespace Ryujinx.Graphics.Vulkan { // Feedback loop barrier. - MemoryBarrier barrier = new MemoryBarrier() + MemoryBarrier barrier = new() { SType = StructureType.MemoryBarrier, SrcAccessMask = AccessFlags.ShaderWriteBit, diff --git a/src/Ryujinx.Graphics.Vulkan/BitMapStruct.cs b/src/Ryujinx.Graphics.Vulkan/BitMapStruct.cs index 7af8c42f6..3ec2c7f59 100644 --- a/src/Ryujinx.Graphics.Vulkan/BitMapStruct.cs +++ b/src/Ryujinx.Graphics.Vulkan/BitMapStruct.cs @@ -220,7 +220,7 @@ namespace Ryujinx.Graphics.Vulkan public BitMapStruct Union(BitMapStruct other) { - BitMapStruct result = new BitMapStruct(); + BitMapStruct result = new(); ref T masks = ref _masks; ref T otherMasks = ref other._masks; diff --git a/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs b/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs index df5b96637..5db0ee304 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs @@ -113,7 +113,7 @@ namespace Ryujinx.Graphics.Vulkan public unsafe Auto CreateView(VkFormat format, int offset, int size, Action invalidateView) { - BufferViewCreateInfo bufferViewCreateInfo = new BufferViewCreateInfo + BufferViewCreateInfo bufferViewCreateInfo = new() { SType = StructureType.BufferViewCreateInfo, Buffer = new VkBuffer(_bufferHandle), @@ -205,7 +205,7 @@ namespace Ryujinx.Graphics.Vulkan // Build data for the new mirror. - Span baseData = new Span((void*)(_map + offset), size); + Span baseData = new((void*)(_map + offset), size); Span modData = _pendingData.AsSpan(offset, size); StagingBufferReserved? newMirror = _gd.BufferManager.StagingBuffer.TryReserveData(cbs, size); @@ -723,7 +723,7 @@ namespace Ryujinx.Graphics.Vulkan dstOffset, size); - BufferCopy region = new BufferCopy((ulong)srcOffset, (ulong)dstOffset, (ulong)size); + BufferCopy region = new((ulong)srcOffset, (ulong)dstOffset, (ulong)size); gd.Api.CmdCopyBuffer(cbs.CommandBuffer, srcBuffer, dstBuffer, 1, ®ion); @@ -804,7 +804,7 @@ namespace Ryujinx.Graphics.Vulkan return null; } - I8ToI16CacheKey key = new I8ToI16CacheKey(_gd); + I8ToI16CacheKey key = new(_gd); if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder)) { @@ -828,7 +828,7 @@ namespace Ryujinx.Graphics.Vulkan return null; } - AlignedVertexBufferCacheKey key = new AlignedVertexBufferCacheKey(_gd, stride, alignment); + AlignedVertexBufferCacheKey key = new(_gd, stride, alignment); if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder)) { @@ -854,7 +854,7 @@ namespace Ryujinx.Graphics.Vulkan return null; } - TopologyConversionCacheKey key = new TopologyConversionCacheKey(_gd, pattern, indexSize); + TopologyConversionCacheKey key = new(_gd, pattern, indexSize); if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder)) { diff --git a/src/Ryujinx.Graphics.Vulkan/BufferManager.cs b/src/Ryujinx.Graphics.Vulkan/BufferManager.cs index e2c33ce65..5b420e620 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferManager.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferManager.cs @@ -103,13 +103,13 @@ namespace Ryujinx.Graphics.Vulkan usage |= BufferUsageFlags.IndirectBufferBit; } - ExternalMemoryBufferCreateInfo externalMemoryBuffer = new ExternalMemoryBufferCreateInfo + ExternalMemoryBufferCreateInfo externalMemoryBuffer = new() { SType = StructureType.ExternalMemoryBufferCreateInfo, HandleTypes = ExternalMemoryHandleTypeFlags.HostAllocationBitExt, }; - BufferCreateInfo bufferCreateInfo = new BufferCreateInfo + BufferCreateInfo bufferCreateInfo = new() { SType = StructureType.BufferCreateInfo, Size = (ulong)size, @@ -124,7 +124,7 @@ namespace Ryujinx.Graphics.Vulkan gd.Api.BindBufferMemory(_device, buffer, allocation.GetUnsafe().Memory, allocation.GetUnsafe().Offset + offset); - BufferHolder holder = new BufferHolder(gd, _device, buffer, allocation, size, BufferAllocationType.HostMapped, BufferAllocationType.HostMapped, (int)offset); + BufferHolder holder = new(gd, _device, buffer, allocation, size, BufferAllocationType.HostMapped, BufferAllocationType.HostMapped, (int)offset); BufferCount++; @@ -149,7 +149,7 @@ namespace Ryujinx.Graphics.Vulkan size += (ulong)range.Size; } - BufferCreateInfo bufferCreateInfo = new BufferCreateInfo() + BufferCreateInfo bufferCreateInfo = new() { SType = StructureType.BufferCreateInfo, Size = size, @@ -207,14 +207,14 @@ namespace Ryujinx.Graphics.Vulkan fixed (SparseMemoryBind* pMemoryBinds = memoryBinds) { - SparseBufferMemoryBindInfo bufferBind = new SparseBufferMemoryBindInfo() + SparseBufferMemoryBindInfo bufferBind = new() { Buffer = buffer, BindCount = (uint)memoryBinds.Length, PBinds = pMemoryBinds }; - BindSparseInfo bindSparseInfo = new BindSparseInfo() + BindSparseInfo bindSparseInfo = new() { SType = StructureType.BindSparseInfo, BufferBindCount = 1, @@ -224,7 +224,7 @@ namespace Ryujinx.Graphics.Vulkan gd.Api.QueueBindSparse(gd.Queue, 1, in bindSparseInfo, default).ThrowOnError(); } - BufferHolder holder = new BufferHolder(gd, _device, buffer, (int)size, storageAllocations); + BufferHolder holder = new(gd, _device, buffer, (int)size, storageAllocations); BufferCount++; @@ -295,7 +295,7 @@ namespace Ryujinx.Graphics.Vulkan usage |= BufferUsageFlags.IndirectBufferBit; } - BufferCreateInfo bufferCreateInfo = new BufferCreateInfo + BufferCreateInfo bufferCreateInfo = new() { SType = StructureType.BufferCreateInfo, Size = (ulong)Environment.SystemPageSize, @@ -331,7 +331,7 @@ namespace Ryujinx.Graphics.Vulkan usage |= BufferUsageFlags.IndirectBufferBit; } - BufferCreateInfo bufferCreateInfo = new BufferCreateInfo + BufferCreateInfo bufferCreateInfo = new() { SType = StructureType.BufferCreateInfo, Size = (ulong)size, @@ -402,7 +402,7 @@ namespace Ryujinx.Graphics.Vulkan if (buffer.Handle != 0) { - BufferHolder holder = new BufferHolder(gd, _device, buffer, allocation, size, baseType, resultType); + BufferHolder holder = new(gd, _device, buffer, allocation, size, baseType, resultType); return holder; } @@ -493,7 +493,7 @@ namespace Ryujinx.Graphics.Vulkan return (null, null); } - TopologyConversionIndirectCacheKey indexBufferKey = new TopologyConversionIndirectCacheKey( + TopologyConversionIndirectCacheKey indexBufferKey = new( gd, pattern, indexSize, @@ -507,14 +507,14 @@ namespace Ryujinx.Graphics.Vulkan indexBufferKey, out BufferHolder convertedIndexBuffer); - IndirectDataCacheKey indirectBufferKey = new IndirectDataCacheKey(pattern); + IndirectDataCacheKey indirectBufferKey = new(pattern); bool hasConvertedIndirectBuffer = indirectBufferHolder.TryGetCachedConvertedBuffer( indirectBuffer.Offset, indirectBuffer.Size, indirectBufferKey, out BufferHolder convertedIndirectBuffer); - DrawCountCacheKey drawCountBufferKey = new DrawCountCacheKey(); + DrawCountCacheKey drawCountBufferKey = new(); bool hasCachedDrawCount = true; if (hasDrawCount) @@ -568,7 +568,7 @@ namespace Ryujinx.Graphics.Vulkan // Any modification of the indirect buffer should invalidate the index buffers that are associated with it, // since we used the indirect data to find the range of the index buffer that is used. - Dependency indexBufferDependency = new Dependency( + Dependency indexBufferDependency = new( indexBufferHolder, indexBuffer.Offset, indexBuffer.Size, @@ -590,7 +590,7 @@ namespace Ryujinx.Graphics.Vulkan // If we have a draw count, any modification of the draw count should invalidate all indirect buffers // where we used it to find the range of indirect data that is actually used. - Dependency indirectBufferDependency = new Dependency( + Dependency indirectBufferDependency = new( indirectBufferHolder, indirectBuffer.Offset, indirectBuffer.Size, diff --git a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs index 022880b53..ba7cebe35 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs @@ -152,7 +152,7 @@ namespace Ryujinx.Graphics.Vulkan { _ranges = new List { - new Range(offset, size) + new(offset, size) }; } } diff --git a/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs b/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs index 255277ff6..c77853f3d 100644 --- a/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs +++ b/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs @@ -37,7 +37,7 @@ namespace Ryujinx.Graphics.Vulkan public void Initialize(Vk api, Device device, CommandPool pool) { - CommandBufferAllocateInfo allocateInfo = new CommandBufferAllocateInfo + CommandBufferAllocateInfo allocateInfo = new() { SType = StructureType.CommandBufferAllocateInfo, CommandBufferCount = 1, @@ -75,7 +75,7 @@ namespace Ryujinx.Graphics.Vulkan _concurrentFenceWaitUnsupported = concurrentFenceWaitUnsupported; _owner = Thread.CurrentThread; - CommandPoolCreateInfo commandPoolCreateInfo = new CommandPoolCreateInfo + CommandPoolCreateInfo commandPoolCreateInfo = new() { SType = StructureType.CommandPoolCreateInfo, QueueFamilyIndex = queueFamilyIndex, @@ -248,7 +248,7 @@ namespace Ryujinx.Graphics.Vulkan _inUseCount++; - CommandBufferBeginInfo commandBufferBeginInfo = new CommandBufferBeginInfo + CommandBufferBeginInfo commandBufferBeginInfo = new() { SType = StructureType.CommandBufferBeginInfo, }; diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs index 439f58815..a39a8d9a2 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetCollection.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Graphics.Vulkan { if (bufferInfo.Buffer.Handle != 0UL) { - WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new() { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -56,7 +56,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (DescriptorBufferInfo* pBufferInfo = bufferInfo) { - WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new() { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -74,7 +74,7 @@ namespace Ryujinx.Graphics.Vulkan { if (imageInfo.ImageView.Handle != 0UL) { - WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new() { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -97,7 +97,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (DescriptorImageInfo* pImageInfo = imageInfo) { - WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new() { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -134,7 +134,7 @@ namespace Ryujinx.Graphics.Vulkan count++; } - WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new() { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -156,7 +156,7 @@ namespace Ryujinx.Graphics.Vulkan { if (texelBufferView.Handle != 0UL) { - WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new() { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], @@ -190,7 +190,7 @@ namespace Ryujinx.Graphics.Vulkan count++; } - WriteDescriptorSet writeDescriptorSet = new WriteDescriptorSet + WriteDescriptorSet writeDescriptorSet = new() { SType = StructureType.WriteDescriptorSet, DstSet = _descriptorSets[setIndex], diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetManager.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetManager.cs index 1d68407b9..04a36a3ba 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetManager.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetManager.cs @@ -31,7 +31,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (DescriptorPoolSize* pPoolsSize = poolSizes) { - DescriptorPoolCreateInfo descriptorPoolCreateInfo = new DescriptorPoolCreateInfo + DescriptorPoolCreateInfo descriptorPoolCreateInfo = new() { SType = StructureType.DescriptorPoolCreateInfo, Flags = updateAfterBind ? DescriptorPoolCreateFlags.UpdateAfterBindBit : DescriptorPoolCreateFlags.None, @@ -69,7 +69,7 @@ namespace Ryujinx.Graphics.Vulkan { fixed (DescriptorSetLayout* pLayouts = layouts) { - DescriptorSetAllocateInfo descriptorSetAllocateInfo = new DescriptorSetAllocateInfo + DescriptorSetAllocateInfo descriptorSetAllocateInfo = new() { SType = StructureType.DescriptorSetAllocateInfo, DescriptorPool = _pool, diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetTemplate.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetTemplate.cs index 5dc7afb48..02d3ae88f 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetTemplate.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetTemplate.cs @@ -86,7 +86,7 @@ namespace Ryujinx.Graphics.Vulkan Size = (int)structureOffset; - DescriptorUpdateTemplateCreateInfo info = new DescriptorUpdateTemplateCreateInfo() + DescriptorUpdateTemplateCreateInfo info = new() { SType = StructureType.DescriptorUpdateTemplateCreateInfo, DescriptorUpdateEntryCount = (uint)segments.Length, @@ -173,7 +173,7 @@ namespace Ryujinx.Graphics.Vulkan Size = (int)structureOffset; - DescriptorUpdateTemplateCreateInfo info = new DescriptorUpdateTemplateCreateInfo() + DescriptorUpdateTemplateCreateInfo info = new() { SType = StructureType.DescriptorUpdateTemplateCreateInfo, DescriptorUpdateEntryCount = (uint)entry, diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs index 2c98b80c7..9086b9e66 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs @@ -157,7 +157,7 @@ namespace Ryujinx.Graphics.Vulkan _uniformSetPd = new int[Constants.MaxUniformBufferBindings]; - DescriptorImageInfo initialImageInfo = new DescriptorImageInfo + DescriptorImageInfo initialImageInfo = new() { ImageLayout = ImageLayout.General, }; @@ -441,7 +441,7 @@ namespace Ryujinx.Graphics.Vulkan Range = (ulong)buffer.Size, }; - BufferRef newRef = new BufferRef(vkBuffer, ref buffer); + BufferRef newRef = new(vkBuffer, ref buffer); ref DescriptorBufferInfo currentInfo = ref _storageBuffers[index]; diff --git a/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs b/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs index 5834b63a3..2fe6a588b 100644 --- a/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs +++ b/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs @@ -98,7 +98,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects { TextureCreateInfo originalInfo = view.Info; - TextureCreateInfo info = new TextureCreateInfo( + TextureCreateInfo info = new( width, height, originalInfo.Depth, diff --git a/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs b/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs index 23c265d13..22b578ffc 100644 --- a/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs +++ b/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs @@ -109,7 +109,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects QualityUltra = Quality == 3 ? 1 : 0, }; - SpecDescription specInfo = new SpecDescription( + SpecDescription specInfo = new( (0, SpecConstType.Int32), (1, SpecConstType.Int32), (2, SpecConstType.Int32), @@ -143,7 +143,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects private void Initialize() { - TextureCreateInfo areaInfo = new TextureCreateInfo(AreaWidth, + TextureCreateInfo areaInfo = new(AreaWidth, AreaHeight, 1, 1, @@ -159,7 +159,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects SwizzleComponent.Blue, SwizzleComponent.Alpha); - TextureCreateInfo searchInfo = new TextureCreateInfo(SearchWidth, + TextureCreateInfo searchInfo = new(SearchWidth, SearchHeight, 1, 1, diff --git a/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs b/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs index a26d1a767..31ba74b16 100644 --- a/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Graphics.Vulkan _device = device; _concurrentWaitUnsupported = concurrentWaitUnsupported; - FenceCreateInfo fenceCreateInfo = new FenceCreateInfo + FenceCreateInfo fenceCreateInfo = new() { SType = StructureType.FenceCreateInfo, }; diff --git a/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs b/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs index 3aa495bd7..a10398517 100644 --- a/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs +++ b/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs @@ -240,7 +240,7 @@ namespace Ryujinx.Graphics.Vulkan attachments[i] = _attachments[i].Get(cbs).Value; } - FramebufferCreateInfo framebufferCreateInfo = new FramebufferCreateInfo + FramebufferCreateInfo framebufferCreateInfo = new() { SType = StructureType.FramebufferCreateInfo, RenderPass = renderPass.Get(cbs).Value, diff --git a/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs b/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs index 798682962..b8a7ddc0f 100644 --- a/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs +++ b/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs @@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Vulkan public void Add(ref TKey key, TValue value) { - Entry entry = new Entry + Entry entry = new() { Hash = key.GetHashCode(), Key = key, diff --git a/src/Ryujinx.Graphics.Vulkan/HelperShader.cs b/src/Ryujinx.Graphics.Vulkan/HelperShader.cs index 9cbb931ac..d0262d2e1 100644 --- a/src/Ryujinx.Graphics.Vulkan/HelperShader.cs +++ b/src/Ryujinx.Graphics.Vulkan/HelperShader.cs @@ -259,13 +259,13 @@ namespace Ryujinx.Graphics.Vulkan for (int l = 0; l < levels; l++) { - Extents2D mipSrcRegion = new Extents2D( + Extents2D mipSrcRegion = new( srcRegion.X1 >> l, srcRegion.Y1 >> l, srcRegion.X2 >> l, srcRegion.Y2 >> l); - Extents2D mipDstRegion = new Extents2D( + Extents2D mipDstRegion = new( dstRegion.X1 >> l, dstRegion.Y1 >> l, dstRegion.X2 >> l, @@ -335,7 +335,7 @@ namespace Ryujinx.Graphics.Vulkan int dstWidth = Math.Max(1, dst.Width >> mipDstLevel); int dstHeight = Math.Max(1, dst.Height >> mipDstLevel); - Extents2D extents = new Extents2D( + Extents2D extents = new( 0, 0, Math.Min(srcWidth, dstWidth), @@ -411,7 +411,7 @@ namespace Ryujinx.Graphics.Vulkan Span viewports = stackalloc Viewport[1]; - Rectangle rect = new Rectangle( + Rectangle rect = new( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -507,7 +507,7 @@ namespace Ryujinx.Graphics.Vulkan Span viewports = stackalloc Viewport[1]; - Rectangle rect = new Rectangle( + Rectangle rect = new( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -780,7 +780,7 @@ namespace Ryujinx.Graphics.Vulkan Span viewports = stackalloc Viewport[1]; - Rectangle rect = new Rectangle( + Rectangle rect = new( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -915,7 +915,7 @@ namespace Ryujinx.Graphics.Vulkan gd.Api.CmdFillBuffer(cbs.CommandBuffer, dstBuffer, 0, Vk.WholeSize, 0); - List bufferCopy = new List(); + List bufferCopy = new(); int outputOffset = 0; // Try to merge copies of adjacent indices to reduce copy count. @@ -1119,7 +1119,7 @@ namespace Ryujinx.Graphics.Vulkan Span viewports = stackalloc Viewport[1]; - Rectangle rect = new Rectangle(0, 0, dst.Width, dst.Height); + Rectangle rect = new(0, 0, dst.Width, dst.Height); viewports[0] = new Viewport( rect, @@ -1240,7 +1240,7 @@ namespace Ryujinx.Graphics.Vulkan Span viewports = stackalloc Viewport[1]; - Rectangle rect = new Rectangle(0, 0, dst.Width, dst.Height); + Rectangle rect = new(0, 0, dst.Width, dst.Height); viewports[0] = new Viewport( rect, @@ -1429,7 +1429,7 @@ namespace Ryujinx.Graphics.Vulkan _ => Target.Texture2D, }; - TextureCreateInfo info = new TextureCreateInfo( + TextureCreateInfo info = new( Math.Max(1, from.Info.Width >> level), Math.Max(1, from.Info.Height >> level), 1, diff --git a/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs b/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs index 23273b811..c4ae56999 100644 --- a/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs +++ b/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs @@ -108,7 +108,7 @@ namespace Ryujinx.Graphics.Vulkan PHostPointer = (void*)pageAlignedPointer, }; - MemoryAllocateInfo memoryAllocateInfo = new MemoryAllocateInfo + MemoryAllocateInfo memoryAllocateInfo = new() { SType = StructureType.MemoryAllocateInfo, AllocationSize = pageAlignedSize, @@ -124,9 +124,9 @@ namespace Ryujinx.Graphics.Vulkan return false; } - MemoryAllocation allocation = new MemoryAllocation(this, deviceMemory, pageAlignedPointer, 0, pageAlignedSize); - Auto allocAuto = new Auto(allocation); - HostMemoryAllocation hostAlloc = new HostMemoryAllocation(allocAuto, pageAlignedPointer, pageAlignedSize); + MemoryAllocation allocation = new(this, deviceMemory, pageAlignedPointer, 0, pageAlignedSize); + Auto allocAuto = new(allocation); + HostMemoryAllocation hostAlloc = new(allocAuto, pageAlignedPointer, pageAlignedSize); allocAuto.IncrementReferenceCount(); allocAuto.Dispose(); // Kept alive by ref count only. diff --git a/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs b/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs index 2fb7aaea0..83959998d 100644 --- a/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs +++ b/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs @@ -65,7 +65,7 @@ namespace Ryujinx.Graphics.Vulkan try { - MemoryAllocatorBlockList newBl = new MemoryAllocatorBlockList(_api, _device, memoryTypeIndex, _blockAlignment, isBuffer); + MemoryAllocatorBlockList newBl = new(_api, _device, memoryTypeIndex, _blockAlignment, isBuffer); _blockLists.Add(newBl); return newBl.Allocate(size, alignment, map); diff --git a/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs b/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs index cbf6bdad5..8f65e7e14 100644 --- a/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs +++ b/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs @@ -44,7 +44,7 @@ namespace Ryujinx.Graphics.Vulkan Size = size; _freeRanges = new List { - new Range(0, size), + new(0, size), }; } @@ -88,7 +88,7 @@ namespace Ryujinx.Graphics.Vulkan private void InsertFreeRange(ulong offset, ulong size) { - Range range = new Range(offset, size); + Range range = new(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { @@ -101,7 +101,7 @@ namespace Ryujinx.Graphics.Vulkan private void InsertFreeRangeComingled(ulong offset, ulong size) { ulong endOffset = offset + size; - Range range = new Range(offset, size); + Range range = new(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { @@ -213,7 +213,7 @@ namespace Ryujinx.Graphics.Vulkan ulong blockAlignedSize = BitUtils.AlignUp(size, (ulong)_blockAlignment); - MemoryAllocateInfo memoryAllocateInfo = new MemoryAllocateInfo + MemoryAllocateInfo memoryAllocateInfo = new() { SType = StructureType.MemoryAllocateInfo, AllocationSize = blockAlignedSize, @@ -231,7 +231,7 @@ namespace Ryujinx.Graphics.Vulkan hostPointer = (nint)pointer; } - Block newBlock = new Block(deviceMemory, hostPointer, blockAlignedSize); + Block newBlock = new(deviceMemory, hostPointer, blockAlignedSize); InsertBlock(newBlock); diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs index 803712591..f20530fb1 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs @@ -105,7 +105,7 @@ namespace Ryujinx.Graphics.Vulkan AutoFlush = new AutoFlushCounter(gd); EndRenderPassDelegate = EndRenderPass; - PipelineCacheCreateInfo pipelineCacheCreateInfo = new PipelineCacheCreateInfo + PipelineCacheCreateInfo pipelineCacheCreateInfo = new() { SType = StructureType.PipelineCacheCreateInfo, }; @@ -220,8 +220,8 @@ namespace Ryujinx.Graphics.Vulkan BeginRenderPass(); - ClearValue clearValue = new ClearValue(new ClearColorValue(color.Red, color.Green, color.Blue, color.Alpha)); - ClearAttachment attachment = new ClearAttachment(ImageAspectFlags.ColorBit, (uint)index, clearValue); + ClearValue clearValue = new(new ClearColorValue(color.Red, color.Green, color.Blue, color.Alpha)); + ClearAttachment attachment = new(ImageAspectFlags.ColorBit, (uint)index, clearValue); ClearRect clearRect = FramebufferParams.GetClearRect(ClearScissor, layer, layerCount); Gd.Api.CmdClearAttachments(CommandBuffer, 1, &attachment, 1, &clearRect); @@ -234,7 +234,7 @@ namespace Ryujinx.Graphics.Vulkan return; } - ClearValue clearValue = new ClearValue(null, new ClearDepthStencilValue(depthValue, (uint)stencilValue)); + ClearValue clearValue = new(null, new ClearDepthStencilValue(depthValue, (uint)stencilValue)); ImageAspectFlags flags = depthMask ? ImageAspectFlags.DepthBit : 0; if (stencilMask) @@ -258,7 +258,7 @@ namespace Ryujinx.Graphics.Vulkan BeginRenderPass(); - ClearAttachment attachment = new ClearAttachment(flags, 0, clearValue); + ClearAttachment attachment = new(flags, 0, clearValue); ClearRect clearRect = FramebufferParams.GetClearRect(ClearScissor, layer, layerCount); Gd.Api.CmdClearAttachments(CommandBuffer, 1, &attachment, 1, &clearRect); @@ -1058,8 +1058,8 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < count; i++) { Rectangle region = regions[i]; - Offset2D offset = new Offset2D(region.X, region.Y); - Extent2D extent = new Extent2D((uint)region.Width, (uint)region.Height); + Offset2D offset = new(region.X, region.Y); + Extent2D extent = new((uint)region.Width, (uint)region.Height); DynamicState.SetScissor(i, new Rect2D(offset, extent)); } @@ -1714,10 +1714,10 @@ namespace Ryujinx.Graphics.Vulkan { FramebufferParams.InsertLoadOpBarriers(Gd, Cbs); - Rect2D renderArea = new Rect2D(null, new Extent2D(FramebufferParams.Width, FramebufferParams.Height)); - ClearValue clearValue = new ClearValue(); + Rect2D renderArea = new(null, new Extent2D(FramebufferParams.Width, FramebufferParams.Height)); + ClearValue clearValue = new(); - RenderPassBeginInfo renderPassBeginInfo = new RenderPassBeginInfo + RenderPassBeginInfo renderPassBeginInfo = new() { SType = StructureType.RenderPassBeginInfo, RenderPass = _renderPass.Get(Cbs).Value, diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs b/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs index 69544e433..372577cac 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineConverter.cs @@ -15,7 +15,7 @@ namespace Ryujinx.Graphics.Vulkan AttachmentDescription[] attachmentDescs = null; - SubpassDescription subpass = new SubpassDescription + SubpassDescription subpass = new() { PipelineBindPoint = PipelineBindPoint.Graphics, }; @@ -111,7 +111,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (AttachmentDescription* pAttachmentDescs = attachmentDescs) { - RenderPassCreateInfo renderPassCreateInfo = new RenderPassCreateInfo + RenderPassCreateInfo renderPassCreateInfo = new() { SType = StructureType.RenderPassCreateInfo, PAttachments = pAttachmentDescs, diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCache.cs b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCache.cs index 8f1b34b0c..9a9a703b5 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCache.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCache.cs @@ -81,7 +81,7 @@ namespace Ryujinx.Graphics.Vulkan ReadOnlyCollection setDescriptors, bool usePushDescriptors) { - PlceKey key = new PlceKey(setDescriptors, usePushDescriptors); + PlceKey key = new(setDescriptors, usePushDescriptors); return _plces.GetOrAdd(key, newKey => new PipelineLayoutCacheEntry(gd, device, setDescriptors, usePushDescriptors)); } diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs index ce2d90e6b..1cf569290 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutFactory.cs @@ -83,7 +83,7 @@ namespace Ryujinx.Graphics.Vulkan updateAfterBindFlags[setIndex] = true; } - DescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo = new DescriptorSetLayoutCreateInfo + DescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo = new() { SType = StructureType.DescriptorSetLayoutCreateInfo, PBindings = pLayoutBindings, @@ -99,7 +99,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (DescriptorSetLayout* pLayouts = layouts) { - PipelineLayoutCreateInfo pipelineLayoutCreateInfo = new PipelineLayoutCreateInfo + PipelineLayoutCreateInfo pipelineLayoutCreateInfo = new() { SType = StructureType.PipelineLayoutCreateInfo, PSetLayouts = pLayouts, diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs index 5512e7b1d..eec3b8395 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs @@ -338,7 +338,7 @@ namespace Ryujinx.Graphics.Vulkan return pipeline; } - ComputePipelineCreateInfo pipelineCreateInfo = new ComputePipelineCreateInfo + ComputePipelineCreateInfo pipelineCreateInfo = new() { SType = StructureType.ComputePipelineCreateInfo, Stage = Stages[0], @@ -405,7 +405,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (VertexInputBindingDescription* pVertexBindingDescriptions = &Internal.VertexBindingDescriptions[0]) fixed (PipelineColorBlendAttachmentState* pColorBlendAttachmentState = &Internal.ColorBlendAttachmentState[0]) { - PipelineVertexInputStateCreateInfo vertexInputState = new PipelineVertexInputStateCreateInfo + PipelineVertexInputStateCreateInfo vertexInputState = new() { SType = StructureType.PipelineVertexInputStateCreateInfo, VertexAttributeDescriptionCount = VertexAttributeDescriptionsCount, @@ -442,20 +442,20 @@ namespace Ryujinx.Graphics.Vulkan primitiveRestartEnable &= topologySupportsRestart; - PipelineInputAssemblyStateCreateInfo inputAssemblyState = new PipelineInputAssemblyStateCreateInfo + PipelineInputAssemblyStateCreateInfo inputAssemblyState = new() { SType = StructureType.PipelineInputAssemblyStateCreateInfo, PrimitiveRestartEnable = primitiveRestartEnable, Topology = HasTessellationControlShader ? PrimitiveTopology.PatchList : Topology, }; - PipelineTessellationStateCreateInfo tessellationState = new PipelineTessellationStateCreateInfo + PipelineTessellationStateCreateInfo tessellationState = new() { SType = StructureType.PipelineTessellationStateCreateInfo, PatchControlPoints = PatchControlPoints, }; - PipelineRasterizationStateCreateInfo rasterizationState = new PipelineRasterizationStateCreateInfo + PipelineRasterizationStateCreateInfo rasterizationState = new() { SType = StructureType.PipelineRasterizationStateCreateInfo, DepthClampEnable = DepthClampEnable, @@ -467,7 +467,7 @@ namespace Ryujinx.Graphics.Vulkan DepthBiasEnable = DepthBiasEnable, }; - PipelineViewportStateCreateInfo viewportState = new PipelineViewportStateCreateInfo + PipelineViewportStateCreateInfo viewportState = new() { SType = StructureType.PipelineViewportStateCreateInfo, ViewportCount = ViewportsCount, @@ -476,7 +476,7 @@ namespace Ryujinx.Graphics.Vulkan if (gd.Capabilities.SupportsDepthClipControl) { - PipelineViewportDepthClipControlCreateInfoEXT viewportDepthClipControlState = new PipelineViewportDepthClipControlCreateInfoEXT + PipelineViewportDepthClipControlCreateInfoEXT viewportDepthClipControlState = new() { SType = StructureType.PipelineViewportDepthClipControlCreateInfoExt, NegativeOneToOne = DepthMode, @@ -485,7 +485,7 @@ namespace Ryujinx.Graphics.Vulkan viewportState.PNext = &viewportDepthClipControlState; } - PipelineMultisampleStateCreateInfo multisampleState = new PipelineMultisampleStateCreateInfo + PipelineMultisampleStateCreateInfo multisampleState = new() { SType = StructureType.PipelineMultisampleStateCreateInfo, SampleShadingEnable = false, @@ -495,19 +495,19 @@ namespace Ryujinx.Graphics.Vulkan AlphaToOneEnable = AlphaToOneEnable, }; - StencilOpState stencilFront = new StencilOpState( + StencilOpState stencilFront = new( StencilFrontFailOp, StencilFrontPassOp, StencilFrontDepthFailOp, StencilFrontCompareOp); - StencilOpState stencilBack = new StencilOpState( + StencilOpState stencilBack = new( StencilBackFailOp, StencilBackPassOp, StencilBackDepthFailOp, StencilBackCompareOp); - PipelineDepthStencilStateCreateInfo depthStencilState = new PipelineDepthStencilStateCreateInfo + PipelineDepthStencilStateCreateInfo depthStencilState = new() { SType = StructureType.PipelineDepthStencilStateCreateInfo, DepthTestEnable = DepthTestEnable, @@ -544,7 +544,7 @@ namespace Ryujinx.Graphics.Vulkan // so we need to force disable them here. bool logicOpEnable = LogicOpEnable && (gd.Vendor == Vendor.Nvidia || Internal.LogicOpsAllowed); - PipelineColorBlendStateCreateInfo colorBlendState = new PipelineColorBlendStateCreateInfo + PipelineColorBlendStateCreateInfo colorBlendState = new() { SType = StructureType.PipelineColorBlendStateCreateInfo, LogicOpEnable = logicOpEnable, @@ -595,7 +595,7 @@ namespace Ryujinx.Graphics.Vulkan dynamicStates[dynamicStatesCount++] = DynamicState.AttachmentFeedbackLoopEnableExt; } - PipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo = new PipelineDynamicStateCreateInfo + PipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo = new() { SType = StructureType.PipelineDynamicStateCreateInfo, DynamicStateCount = (uint)dynamicStatesCount, @@ -619,7 +619,7 @@ namespace Ryujinx.Graphics.Vulkan } } - GraphicsPipelineCreateInfo pipelineCreateInfo = new GraphicsPipelineCreateInfo + GraphicsPipelineCreateInfo pipelineCreateInfo = new() { SType = StructureType.GraphicsPipelineCreateInfo, Flags = flags, diff --git a/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs b/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs index 06e14a9d9..5377c8a1e 100644 --- a/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs +++ b/src/Ryujinx.Graphics.Vulkan/Queries/BufferedQuery.cs @@ -45,7 +45,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries QueryPipelineStatisticFlags flags = type == CounterType.PrimitivesGenerated ? QueryPipelineStatisticFlags.GeometryShaderPrimitivesBit : 0; - QueryPoolCreateInfo queryPoolCreateInfo = new QueryPoolCreateInfo + QueryPoolCreateInfo queryPoolCreateInfo = new() { SType = StructureType.QueryPoolCreateInfo, QueryCount = 1, diff --git a/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs b/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs index bca18e0ee..79df2b459 100644 --- a/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs @@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.Vulkan AttachmentDescription[] attachmentDescs = null; - SubpassDescription subpass = new SubpassDescription + SubpassDescription subpass = new() { PipelineBindPoint = PipelineBindPoint.Graphics, }; @@ -114,7 +114,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (AttachmentDescription* pAttachmentDescs = attachmentDescs) { - RenderPassCreateInfo renderPassCreateInfo = new RenderPassCreateInfo + RenderPassCreateInfo renderPassCreateInfo = new() { SType = StructureType.RenderPassCreateInfo, PAttachments = pAttachmentDescs, @@ -149,7 +149,7 @@ namespace Ryujinx.Graphics.Vulkan public Auto GetFramebuffer(VulkanRenderer gd, CommandBufferScoped cbs, FramebufferParams fb) { - FramebufferCacheKey key = new FramebufferCacheKey(fb.Width, fb.Height, fb.Layers); + FramebufferCacheKey key = new(fb.Width, fb.Height, fb.Layers); if (!_framebuffers.TryGetValue(ref key, out Auto result)) { diff --git a/src/Ryujinx.Graphics.Vulkan/SamplerHolder.cs b/src/Ryujinx.Graphics.Vulkan/SamplerHolder.cs index cf8874e1a..eae003686 100644 --- a/src/Ryujinx.Graphics.Vulkan/SamplerHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/SamplerHolder.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Graphics.Vulkan BorderColor borderColor = GetConstrainedBorderColor(info.BorderColor, out bool cantConstrain); - Silk.NET.Vulkan.SamplerCreateInfo samplerCreateInfo = new Silk.NET.Vulkan.SamplerCreateInfo + Silk.NET.Vulkan.SamplerCreateInfo samplerCreateInfo = new() { SType = StructureType.SamplerCreateInfo, MagFilter = info.MagFilter.Convert(), @@ -52,7 +52,7 @@ namespace Ryujinx.Graphics.Vulkan if (cantConstrain && gd.Capabilities.SupportsCustomBorderColor) { - ClearColorValue color = new ClearColorValue( + ClearColorValue color = new( info.BorderColor.Red, info.BorderColor.Green, info.BorderColor.Blue, diff --git a/src/Ryujinx.Graphics.Vulkan/Shader.cs b/src/Ryujinx.Graphics.Vulkan/Shader.cs index 524939311..886371032 100644 --- a/src/Ryujinx.Graphics.Vulkan/Shader.cs +++ b/src/Ryujinx.Graphics.Vulkan/Shader.cs @@ -59,7 +59,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (byte* pCode = spirv) { - ShaderModuleCreateInfo shaderModuleCreateInfo = new ShaderModuleCreateInfo + ShaderModuleCreateInfo shaderModuleCreateInfo = new() { SType = StructureType.ShaderModuleCreateInfo, CodeSize = (uint)spirv.Length, @@ -102,7 +102,7 @@ namespace Ryujinx.Graphics.Vulkan return null; } - Span spirvBytes = new Span((void*)scr.CodePointer, (int)scr.CodeLength); + Span spirvBytes = new((void*)scr.CodePointer, (int)scr.CodeLength); byte[] code = new byte[(scr.CodeLength + 3) & ~3]; diff --git a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs index 5d35bbbed..e97fc3003 100644 --- a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs +++ b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs @@ -93,7 +93,7 @@ namespace Ryujinx.Graphics.Vulkan for (int i = 0; i < shaders.Length; i++) { - Shader shader = new Shader(gd.Api, device, shaders[i]); + Shader shader = new(gd.Api, device, shaders[i]); stages |= 1u << shader.StageFlags switch { diff --git a/src/Ryujinx.Graphics.Vulkan/SpecInfo.cs b/src/Ryujinx.Graphics.Vulkan/SpecInfo.cs index 200fe658b..73303685b 100644 --- a/src/Ryujinx.Graphics.Vulkan/SpecInfo.cs +++ b/src/Ryujinx.Graphics.Vulkan/SpecInfo.cs @@ -89,7 +89,7 @@ namespace Ryujinx.Graphics.Vulkan _data = new byte[data.Length]; data.CopyTo(_data); - HashCode hc = new HashCode(); + HashCode hc = new(); hc.AddBytes(data); _hash = hc.ToHashCode(); } diff --git a/src/Ryujinx.Graphics.Vulkan/TextureCopy.cs b/src/Ryujinx.Graphics.Vulkan/TextureCopy.cs index ee306e9fa..e0de5692c 100644 --- a/src/Ryujinx.Graphics.Vulkan/TextureCopy.cs +++ b/src/Ryujinx.Graphics.Vulkan/TextureCopy.cs @@ -34,8 +34,8 @@ namespace Ryujinx.Graphics.Vulkan return Math.Clamp(value, 0, max); } - Offset3D xy1 = new Offset3D(Clamp(extents.X1, width) >> level, Clamp(extents.Y1, height) >> level, 0); - Offset3D xy2 = new Offset3D(Clamp(extents.X2, width) >> level, Clamp(extents.Y2, height) >> level, 1); + Offset3D xy1 = new(Clamp(extents.X1, width) >> level, Clamp(extents.Y1, height) >> level, 0); + Offset3D xy2 = new(Clamp(extents.X2, width) >> level, Clamp(extents.Y2, height) >> level, 1); return (xy1, xy2); } @@ -50,8 +50,8 @@ namespace Ryujinx.Graphics.Vulkan dstAspectFlags = dstInfo.Format.ConvertAspectFlags(); } - ImageBlit.SrcOffsetsBuffer srcOffsets = new ImageBlit.SrcOffsetsBuffer(); - ImageBlit.DstOffsetsBuffer dstOffsets = new ImageBlit.DstOffsetsBuffer(); + ImageBlit.SrcOffsetsBuffer srcOffsets = new(); + ImageBlit.DstOffsetsBuffer dstOffsets = new(); Filter filter = linearFilter && !dstInfo.Format.IsDepthOrStencil() ? Filter.Linear : Filter.Nearest; @@ -74,13 +74,13 @@ namespace Ryujinx.Graphics.Vulkan for (int level = 0; level < levels; level++) { - ImageSubresourceLayers srcSl = new ImageSubresourceLayers(srcAspectFlags, copySrcLevel, (uint)srcLayer, (uint)layers); - ImageSubresourceLayers dstSl = new ImageSubresourceLayers(dstAspectFlags, copyDstLevel, (uint)dstLayer, (uint)layers); + ImageSubresourceLayers srcSl = new(srcAspectFlags, copySrcLevel, (uint)srcLayer, (uint)layers); + ImageSubresourceLayers dstSl = new(dstAspectFlags, copyDstLevel, (uint)dstLayer, (uint)layers); (srcOffsets.Element0, srcOffsets.Element1) = ExtentsToOffset3D(srcRegion, srcInfo.Width, srcInfo.Height, level); (dstOffsets.Element0, dstOffsets.Element1) = ExtentsToOffset3D(dstRegion, dstInfo.Width, dstInfo.Height, level); - ImageBlit region = new ImageBlit + ImageBlit region = new() { SrcSubresource = srcSl, SrcOffsets = srcOffsets, @@ -299,13 +299,13 @@ namespace Ryujinx.Graphics.Vulkan break; } - ImageSubresourceLayers srcSl = new ImageSubresourceLayers( + ImageSubresourceLayers srcSl = new( srcAspect, (uint)(srcViewLevel + srcLevel + level), (uint)(srcViewLayer + srcLayer), (uint)srcLayers); - ImageSubresourceLayers dstSl = new ImageSubresourceLayers( + ImageSubresourceLayers dstSl = new( dstAspect, (uint)(dstViewLevel + dstLevel + level), (uint)(dstViewLayer + dstLayer), @@ -314,17 +314,17 @@ namespace Ryujinx.Graphics.Vulkan int copyWidth = sizeInBlocks ? BitUtils.DivRoundUp(width, blockWidth) : width; int copyHeight = sizeInBlocks ? BitUtils.DivRoundUp(height, blockHeight) : height; - Extent3D extent = new Extent3D((uint)copyWidth, (uint)copyHeight, (uint)srcDepth); + Extent3D extent = new((uint)copyWidth, (uint)copyHeight, (uint)srcDepth); if (srcInfo.Samples > 1 && srcInfo.Samples != dstInfo.Samples) { - ImageResolve region = new ImageResolve(srcSl, new Offset3D(0, 0, srcZ), dstSl, new Offset3D(0, 0, dstZ), extent); + ImageResolve region = new(srcSl, new Offset3D(0, 0, srcZ), dstSl, new Offset3D(0, 0, dstZ), extent); api.CmdResolveImage(commandBuffer, srcImage, ImageLayout.General, dstImage, ImageLayout.General, 1, in region); } else { - ImageCopy region = new ImageCopy(srcSl, new Offset3D(0, 0, srcZ), dstSl, new Offset3D(0, 0, dstZ), extent); + ImageCopy region = new(srcSl, new Offset3D(0, 0, srcZ), dstSl, new Offset3D(0, 0, dstZ), extent); api.CmdCopyImage(commandBuffer, srcImage, ImageLayout.General, dstImage, ImageLayout.General, 1, in region); } @@ -360,10 +360,10 @@ namespace Ryujinx.Graphics.Vulkan TextureView src, TextureView dst) { - AttachmentReference2 dsAttachmentReference = new AttachmentReference2(StructureType.AttachmentReference2, null, 0, ImageLayout.General); - AttachmentReference2 dsResolveAttachmentReference = new AttachmentReference2(StructureType.AttachmentReference2, null, 1, ImageLayout.General); + AttachmentReference2 dsAttachmentReference = new(StructureType.AttachmentReference2, null, 0, ImageLayout.General); + AttachmentReference2 dsResolveAttachmentReference = new(StructureType.AttachmentReference2, null, 1, ImageLayout.General); - SubpassDescriptionDepthStencilResolve subpassDsResolve = new SubpassDescriptionDepthStencilResolve + SubpassDescriptionDepthStencilResolve subpassDsResolve = new() { SType = StructureType.SubpassDescriptionDepthStencilResolve, PDepthStencilResolveAttachment = &dsResolveAttachmentReference, @@ -371,7 +371,7 @@ namespace Ryujinx.Graphics.Vulkan StencilResolveMode = ResolveModeFlags.SampleZeroBit, }; - SubpassDescription2 subpass = new SubpassDescription2 + SubpassDescription2 subpass = new() { SType = StructureType.SubpassDescription2, PipelineBindPoint = PipelineBindPoint.Graphics, @@ -411,7 +411,7 @@ namespace Ryujinx.Graphics.Vulkan fixed (AttachmentDescription2* pAttachmentDescs = attachmentDescs) { - RenderPassCreateInfo2 renderPassCreateInfo = new RenderPassCreateInfo2 + RenderPassCreateInfo2 renderPassCreateInfo = new() { SType = StructureType.RenderPassCreateInfo2, PAttachments = pAttachmentDescs, @@ -424,7 +424,7 @@ namespace Ryujinx.Graphics.Vulkan gd.Api.CreateRenderPass2(device, in renderPassCreateInfo, null, out RenderPass renderPass).ThrowOnError(); - using Auto rp = new Auto(new DisposableRenderPass(gd.Api, device, renderPass)); + using Auto rp = new(new DisposableRenderPass(gd.Api, device, renderPass)); ImageView* attachments = stackalloc ImageView[2]; @@ -434,7 +434,7 @@ namespace Ryujinx.Graphics.Vulkan attachments[0] = srcView.Get(cbs).Value; attachments[1] = dstView.Get(cbs).Value; - FramebufferCreateInfo framebufferCreateInfo = new FramebufferCreateInfo + FramebufferCreateInfo framebufferCreateInfo = new() { SType = StructureType.FramebufferCreateInfo, RenderPass = rp.Get(cbs).Value, @@ -446,12 +446,12 @@ namespace Ryujinx.Graphics.Vulkan }; gd.Api.CreateFramebuffer(device, in framebufferCreateInfo, null, out Framebuffer framebuffer).ThrowOnError(); - using Auto fb = new Auto(new DisposableFramebuffer(gd.Api, device, framebuffer), null, srcView, dstView); + using Auto fb = new(new DisposableFramebuffer(gd.Api, device, framebuffer), null, srcView, dstView); - Rect2D renderArea = new Rect2D(null, new Extent2D((uint)src.Info.Width, (uint)src.Info.Height)); - ClearValue clearValue = new ClearValue(); + Rect2D renderArea = new(null, new Extent2D((uint)src.Info.Width, (uint)src.Info.Height)); + ClearValue clearValue = new(); - RenderPassBeginInfo renderPassBeginInfo = new RenderPassBeginInfo + RenderPassBeginInfo renderPassBeginInfo = new() { SType = StructureType.RenderPassBeginInfo, RenderPass = rp.Get(cbs).Value, diff --git a/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs b/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs index 53a80051f..190ada27b 100644 --- a/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs +++ b/src/Ryujinx.Graphics.Vulkan/TextureStorage.cs @@ -89,7 +89,7 @@ namespace Ryujinx.Graphics.Vulkan ImageType type = info.Target.Convert(); - Extent3D extent = new Extent3D((uint)info.Width, (uint)info.Height, depth); + Extent3D extent = new((uint)info.Width, (uint)info.Height, depth); SampleCountFlags sampleCountFlags = ConvertToSampleCountFlags(gd.Capabilities.SupportedSampleCounts, (uint)info.Samples); @@ -111,7 +111,7 @@ namespace Ryujinx.Graphics.Vulkan flags |= ImageCreateFlags.Create2DArrayCompatibleBit; } - ImageCreateInfo imageCreateInfo = new ImageCreateInfo + ImageCreateInfo imageCreateInfo = new() { SType = StructureType.ImageCreateInfo, ImageType = type, @@ -274,9 +274,9 @@ namespace Ryujinx.Graphics.Vulkan ImageAspectFlags aspectFlags = _info.Format.ConvertAspectFlags(); - ImageSubresourceRange subresourceRange = new ImageSubresourceRange(aspectFlags, 0, (uint)_info.Levels, 0, (uint)_info.GetLayers()); + ImageSubresourceRange subresourceRange = new(aspectFlags, 0, (uint)_info.Levels, 0, (uint)_info.GetLayers()); - ImageMemoryBarrier barrier = new ImageMemoryBarrier + ImageMemoryBarrier barrier = new() { SType = StructureType.ImageMemoryBarrier, SrcAccessMask = 0, @@ -402,17 +402,17 @@ namespace Ryujinx.Graphics.Vulkan int rowLength = (Info.GetMipStride(level) / Info.BytesPerPixel) * Info.BlockWidth; - ImageSubresourceLayers sl = new ImageSubresourceLayers( + ImageSubresourceLayers sl = new( aspectFlags, (uint)(dstLevel + level), (uint)layer, (uint)layers); - Extent3D extent = new Extent3D((uint)width, (uint)height, (uint)depth); + Extent3D extent = new((uint)width, (uint)height, (uint)depth); int z = is3D ? dstLayer : 0; - BufferImageCopy region = new BufferImageCopy( + BufferImageCopy region = new( (ulong)offset, (uint)BitUtils.AlignUp(rowLength, Info.BlockWidth), (uint)BitUtils.AlignUp(height, Info.BlockHeight), diff --git a/src/Ryujinx.Graphics.Vulkan/TextureView.cs b/src/Ryujinx.Graphics.Vulkan/TextureView.cs index 45328b73f..7583b7e5c 100644 --- a/src/Ryujinx.Graphics.Vulkan/TextureView.cs +++ b/src/Ryujinx.Graphics.Vulkan/TextureView.cs @@ -95,23 +95,23 @@ namespace Ryujinx.Graphics.Vulkan swizzleG = tempB; } - ComponentMapping componentMapping = new ComponentMapping(swizzleR, swizzleG, swizzleB, swizzleA); + ComponentMapping componentMapping = new(swizzleR, swizzleG, swizzleB, swizzleA); ImageAspectFlags aspectFlags = info.Format.ConvertAspectFlags(info.DepthStencilMode); ImageAspectFlags aspectFlagsDepth = info.Format.ConvertAspectFlags(); - ImageSubresourceRange subresourceRange = new ImageSubresourceRange(aspectFlags, (uint)firstLevel, levels, (uint)firstLayer, layers); - ImageSubresourceRange subresourceRangeDepth = new ImageSubresourceRange(aspectFlagsDepth, (uint)firstLevel, levels, (uint)firstLayer, layers); + ImageSubresourceRange subresourceRange = new(aspectFlags, (uint)firstLevel, levels, (uint)firstLayer, layers); + ImageSubresourceRange subresourceRangeDepth = new(aspectFlagsDepth, (uint)firstLevel, levels, (uint)firstLayer, layers); unsafe Auto CreateImageView(ComponentMapping cm, ImageSubresourceRange sr, ImageViewType viewType, ImageUsageFlags usageFlags) { - ImageViewUsageCreateInfo imageViewUsage = new ImageViewUsageCreateInfo + ImageViewUsageCreateInfo imageViewUsage = new() { SType = StructureType.ImageViewUsageCreateInfo, Usage = usageFlags, }; - ImageViewCreateInfo imageCreateInfo = new ImageViewCreateInfo + ImageViewCreateInfo imageCreateInfo = new() { SType = StructureType.ImageViewCreateInfo, Image = storage.GetImageForViewCreation(), @@ -136,7 +136,7 @@ namespace Ryujinx.Graphics.Vulkan _imageView = CreateImageView(componentMapping, subresourceRange, type, shaderUsage); // Framebuffer attachments and storage images requires a identity component mapping. - ComponentMapping identityComponentMapping = new ComponentMapping( + ComponentMapping identityComponentMapping = new( ComponentSwizzle.R, ComponentSwizzle.G, ComponentSwizzle.B, @@ -934,17 +934,17 @@ namespace Ryujinx.Graphics.Vulkan aspectFlags = ImageAspectFlags.DepthBit; } - ImageSubresourceLayers sl = new ImageSubresourceLayers( + ImageSubresourceLayers sl = new( aspectFlags, (uint)(FirstLevel + dstLevel + level), (uint)(FirstLayer + layer), (uint)layers); - Extent3D extent = new Extent3D((uint)width, (uint)height, (uint)depth); + Extent3D extent = new((uint)width, (uint)height, (uint)depth); int z = is3D ? dstLayer : 0; - BufferImageCopy region = new BufferImageCopy( + BufferImageCopy region = new( (ulong)offset, (uint)AlignUpNpot(rowLength, Info.BlockWidth), (uint)AlignUpNpot(height, Info.BlockHeight), @@ -993,9 +993,9 @@ namespace Ryujinx.Graphics.Vulkan aspectFlags = ImageAspectFlags.DepthBit; } - ImageSubresourceLayers sl = new ImageSubresourceLayers(aspectFlags, (uint)(FirstLevel + dstLevel), (uint)(FirstLayer + dstLayer), 1); + ImageSubresourceLayers sl = new(aspectFlags, (uint)(FirstLevel + dstLevel), (uint)(FirstLayer + dstLayer), 1); - Extent3D extent = new Extent3D((uint)width, (uint)height, 1); + Extent3D extent = new((uint)width, (uint)height, 1); int rowLengthAlignment = Info.BlockWidth; @@ -1005,7 +1005,7 @@ namespace Ryujinx.Graphics.Vulkan rowLengthAlignment = 4 / Info.BytesPerPixel; } - BufferImageCopy region = new BufferImageCopy( + BufferImageCopy region = new( 0, (uint)AlignUpNpot(width, rowLengthAlignment), (uint)AlignUpNpot(height, Info.BlockHeight), diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanDebugMessenger.cs b/src/Ryujinx.Graphics.Vulkan/VulkanDebugMessenger.cs index 0e48e0200..1a566478e 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanDebugMessenger.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanDebugMessenger.cs @@ -62,7 +62,7 @@ namespace Ryujinx.Graphics.Vulkan _ => throw new ArgumentException($"Invalid log level \"{_logLevel}\"."), }; - DebugUtilsMessengerCreateInfoEXT debugUtilsMessengerCreateInfo = new DebugUtilsMessengerCreateInfoEXT + DebugUtilsMessengerCreateInfoEXT debugUtilsMessengerCreateInfo = new() { SType = StructureType.DebugUtilsMessengerCreateInfoExt, MessageType = messageType, diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs b/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs index 83450bc0a..24a86343a 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs @@ -55,7 +55,7 @@ namespace Ryujinx.Graphics.Vulkan internal static VulkanInstance CreateInstance(Vk api, GraphicsDebugLevel logLevel, string[] requiredExtensions) { - List enabledLayers = new List(); + List enabledLayers = new(); IReadOnlySet instanceExtensions = VulkanInstance.GetInstanceExtensions(api); IReadOnlySet instanceLayers = VulkanInstance.GetInstanceLayers(api); @@ -86,7 +86,7 @@ namespace Ryujinx.Graphics.Vulkan IntPtr appName = Marshal.StringToHGlobalAnsi(AppName); - ApplicationInfo applicationInfo = new ApplicationInfo + ApplicationInfo applicationInfo = new() { PApplicationName = (byte*)appName, ApplicationVersion = 1, @@ -108,7 +108,7 @@ namespace Ryujinx.Graphics.Vulkan ppEnabledLayers[i] = Marshal.StringToHGlobalAnsi(enabledLayers[i]); } - InstanceCreateInfo instanceCreateInfo = new InstanceCreateInfo + InstanceCreateInfo instanceCreateInfo = new() { SType = StructureType.InstanceCreateInfo, PApplicationInfo = &applicationInfo, @@ -166,7 +166,7 @@ namespace Ryujinx.Graphics.Vulkan { IntPtr appName = Marshal.StringToHGlobalAnsi(AppName); - ApplicationInfo applicationInfo = new ApplicationInfo + ApplicationInfo applicationInfo = new() { PApplicationName = (byte*)appName, ApplicationVersion = 1, @@ -175,7 +175,7 @@ namespace Ryujinx.Graphics.Vulkan ApiVersion = _maximumVulkanVersion, }; - InstanceCreateInfo instanceCreateInfo = new InstanceCreateInfo + InstanceCreateInfo instanceCreateInfo = new() { SType = StructureType.InstanceCreateInfo, PApplicationInfo = &applicationInfo, @@ -246,7 +246,7 @@ namespace Ryujinx.Graphics.Vulkan { const QueueFlags RequiredFlags = QueueFlags.GraphicsBit | QueueFlags.ComputeBit; - KhrSurface khrSurface = new KhrSurface(api.Context); + KhrSurface khrSurface = new(api.Context); for (uint index = 0; index < physicalDevice.QueueFamilyProperties.Length; index++) { @@ -281,7 +281,7 @@ namespace Ryujinx.Graphics.Vulkan queuePriorities[i] = 1f; } - DeviceQueueCreateInfo queueCreateInfo = new DeviceQueueCreateInfo + DeviceQueueCreateInfo queueCreateInfo = new() { SType = StructureType.DeviceQueueCreateInfo, QueueFamilyIndex = queueFamilyIndex, @@ -394,7 +394,7 @@ namespace Ryujinx.Graphics.Vulkan PhysicalDeviceFeatures supportedFeatures = features2.Features; - PhysicalDeviceFeatures features = new PhysicalDeviceFeatures + PhysicalDeviceFeatures features = new() { DepthBiasClamp = supportedFeatures.DepthBiasClamp, DepthClamp = supportedFeatures.DepthClamp, @@ -465,7 +465,7 @@ namespace Ryujinx.Graphics.Vulkan pExtendedFeatures = &featuresRobustness2; } - PhysicalDeviceExtendedDynamicStateFeaturesEXT featuresExtendedDynamicState = new PhysicalDeviceExtendedDynamicStateFeaturesEXT + PhysicalDeviceExtendedDynamicStateFeaturesEXT featuresExtendedDynamicState = new() { SType = StructureType.PhysicalDeviceExtendedDynamicStateFeaturesExt, PNext = pExtendedFeatures, @@ -474,7 +474,7 @@ namespace Ryujinx.Graphics.Vulkan pExtendedFeatures = &featuresExtendedDynamicState; - PhysicalDeviceVulkan11Features featuresVk11 = new PhysicalDeviceVulkan11Features + PhysicalDeviceVulkan11Features featuresVk11 = new() { SType = StructureType.PhysicalDeviceVulkan11Features, PNext = pExtendedFeatures, @@ -483,7 +483,7 @@ namespace Ryujinx.Graphics.Vulkan pExtendedFeatures = &featuresVk11; - PhysicalDeviceVulkan12Features featuresVk12 = new PhysicalDeviceVulkan12Features + PhysicalDeviceVulkan12Features featuresVk12 = new() { SType = StructureType.PhysicalDeviceVulkan12Features, PNext = pExtendedFeatures, @@ -595,7 +595,7 @@ namespace Ryujinx.Graphics.Vulkan ppEnabledExtensions[i] = Marshal.StringToHGlobalAnsi(enabledExtensions[i]); } - DeviceCreateInfo deviceCreateInfo = new DeviceCreateInfo + DeviceCreateInfo deviceCreateInfo = new() { SType = StructureType.DeviceCreateInfo, PNext = pExtendedFeatures, diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs index d164c5cb6..a70ca21df 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs @@ -215,7 +215,7 @@ namespace Ryujinx.Graphics.Vulkan bool supportsPushDescriptors = _physicalDevice.IsDeviceExtensionPresent(KhrPushDescriptor.ExtensionName); - PhysicalDevicePushDescriptorPropertiesKHR propertiesPushDescriptor = new PhysicalDevicePushDescriptorPropertiesKHR() + PhysicalDevicePushDescriptorPropertiesKHR propertiesPushDescriptor = new() { SType = StructureType.PhysicalDevicePushDescriptorPropertiesKhr }; diff --git a/src/Ryujinx.Graphics.Vulkan/Window.cs b/src/Ryujinx.Graphics.Vulkan/Window.cs index b45d59c3a..c572effd8 100644 --- a/src/Ryujinx.Graphics.Vulkan/Window.cs +++ b/src/Ryujinx.Graphics.Vulkan/Window.cs @@ -127,7 +127,7 @@ namespace Ryujinx.Graphics.Vulkan SwapchainKHR oldSwapchain = _swapchain; - SwapchainCreateInfoKHR swapchainCreateInfo = new SwapchainCreateInfoKHR + SwapchainCreateInfoKHR swapchainCreateInfo = new() { SType = StructureType.SwapchainCreateInfoKhr, Surface = _surface, @@ -144,7 +144,7 @@ namespace Ryujinx.Graphics.Vulkan Clipped = true, }; - TextureCreateInfo textureCreateInfo = new TextureCreateInfo( + TextureCreateInfo textureCreateInfo = new( _width, _height, 1, @@ -179,7 +179,7 @@ namespace Ryujinx.Graphics.Vulkan _swapchainImageViews[i] = CreateSwapchainImageView(_swapchainImages[i], surfaceFormat.Format, textureCreateInfo); } - SemaphoreCreateInfo semaphoreCreateInfo = new SemaphoreCreateInfo + SemaphoreCreateInfo semaphoreCreateInfo = new() { SType = StructureType.SemaphoreCreateInfo, }; @@ -201,7 +201,7 @@ namespace Ryujinx.Graphics.Vulkan private unsafe TextureView CreateSwapchainImageView(Image swapchainImage, VkFormat format, TextureCreateInfo info) { - ComponentMapping componentMapping = new ComponentMapping( + ComponentMapping componentMapping = new( ComponentSwizzle.R, ComponentSwizzle.G, ComponentSwizzle.B, @@ -209,9 +209,9 @@ namespace Ryujinx.Graphics.Vulkan ImageAspectFlags aspectFlags = ImageAspectFlags.ColorBit; - ImageSubresourceRange subresourceRange = new ImageSubresourceRange(aspectFlags, 0, 1, 0, 1); + ImageSubresourceRange subresourceRange = new(aspectFlags, 0, 1, 0, 1); - ImageViewCreateInfo imageCreateInfo = new ImageViewCreateInfo + ImageViewCreateInfo imageCreateInfo = new() { SType = StructureType.ImageViewCreateInfo, Image = swapchainImage, @@ -467,7 +467,7 @@ namespace Ryujinx.Graphics.Vulkan Result result; - PresentInfoKHR presentInfo = new PresentInfoKHR + PresentInfoKHR presentInfo = new() { SType = StructureType.PresentInfoKhr, WaitSemaphoreCount = 1, @@ -594,9 +594,9 @@ namespace Ryujinx.Graphics.Vulkan ImageLayout srcLayout, ImageLayout dstLayout) { - ImageSubresourceRange subresourceRange = new ImageSubresourceRange(ImageAspectFlags.ColorBit, 0, 1, 0, 1); + ImageSubresourceRange subresourceRange = new(ImageAspectFlags.ColorBit, 0, 1, 0, 1); - ImageMemoryBarrier barrier = new ImageMemoryBarrier + ImageMemoryBarrier barrier = new() { SType = StructureType.ImageMemoryBarrier, SrcAccessMask = srcAccess, -- 2.47.1 From 3cdaaa0b696141764fc9d78fe5f92fcc31516881 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:16:50 -0600 Subject: [PATCH 450/722] misc: chore: Fix object creation in Avalonia project --- src/Ryujinx/AppHost.cs | 2 +- src/Ryujinx/Common/ApplicationHelper.cs | 20 ++++++------- src/Ryujinx/Common/LocaleManager.cs | 2 +- .../Common/Models/XCITrimmerFileModel.cs | 2 +- src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 4 +-- .../UI/Applet/UserSelectorDialog.axaml.cs | 2 +- .../UI/Controls/NavigationDialogHost.axaml.cs | 4 +-- src/Ryujinx/UI/Helpers/LoggerAdapter.cs | 4 +-- src/Ryujinx/UI/Helpers/NotificationHelper.cs | 2 +- .../UI/Models/Input/KeyboardInputConfig.cs | 2 +- .../UI/ViewModels/MainWindowViewModel.cs | 2 +- .../UI/ViewModels/ModManagerViewModel.cs | 6 ++-- .../UserFirmwareAvatarSelectorViewModel.cs | 2 +- .../UI/ViewModels/XCITrimmerViewModel.cs | 2 +- .../UserFirmwareAvatarSelectorView.axaml.cs | 6 ++-- .../UserProfileImageSelectorView.axaml.cs | 2 +- .../Views/User/UserSaveManagerView.axaml.cs | 6 ++-- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 4 +-- src/Ryujinx/UI/Windows/IconColorPicker.cs | 2 +- .../Utilities/AppLibrary/ApplicationData.cs | 6 ++-- .../AppLibrary/ApplicationLibrary.cs | 28 +++++++++---------- .../Utilities/DownloadableContentsHelper.cs | 4 +-- src/Ryujinx/Utilities/ShortcutHelper.cs | 2 +- .../Utilities/SystemInfo/LinuxSystemInfo.cs | 4 +-- src/Ryujinx/Utilities/TitleUpdatesHelper.cs | 6 ++-- 25 files changed, 63 insertions(+), 63 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index d161644c0..61beda154 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -975,7 +975,7 @@ namespace Ryujinx.Ava private static IHardwareDeviceDriver InitializeAudio() { - List availableBackends = new List + List availableBackends = new() { AudioBackend.SDL2, AudioBackend.SoundIo, diff --git a/src/Ryujinx/Common/ApplicationHelper.cs b/src/Ryujinx/Common/ApplicationHelper.cs index 1c839aaaa..d9870196e 100644 --- a/src/Ryujinx/Common/ApplicationHelper.cs +++ b/src/Ryujinx/Common/ApplicationHelper.cs @@ -144,7 +144,7 @@ namespace Ryujinx.Ava.Common public static void ExtractSection(string destination, NcaSectionType ncaSectionType, string titleFilePath, string titleName, int programIndex = 0) { - CancellationTokenSource cancellationToken = new CancellationTokenSource(); + CancellationTokenSource cancellationToken = new(); UpdateWaitWindow waitingDialog = new( RyujinxApp.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), @@ -171,14 +171,14 @@ namespace Ryujinx.Ava.Common } else { - PartitionFileSystem pfsTemp = new PartitionFileSystem(); + PartitionFileSystem pfsTemp = new(); pfsTemp.Initialize(file.AsStorage()).ThrowIfFailure(); pfs = pfsTemp; } foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) { - using UniqueRef ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new(); pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -244,8 +244,8 @@ namespace Ryujinx.Ava.Common string source = DateTime.Now.ToFileTime().ToString()[10..]; string output = DateTime.Now.ToFileTime().ToString()[10..]; - using UniqueRef uniqueSourceFs = new UniqueRef(ncaFileSystem); - using UniqueRef uniqueOutputFs = new UniqueRef(new LocalFileSystem(destination)); + using UniqueRef uniqueSourceFs = new(ncaFileSystem); + using UniqueRef uniqueOutputFs = new(new LocalFileSystem(destination)); fsClient.Register(source.ToU8Span(), ref uniqueSourceFs.Ref); fsClient.Register(output.ToU8Span(), ref uniqueOutputFs.Ref); @@ -299,7 +299,7 @@ namespace Ryujinx.Ava.Common public static void ExtractAoc(string destination, string updateFilePath, string updateName) { - CancellationTokenSource cancellationToken = new CancellationTokenSource(); + CancellationTokenSource cancellationToken = new(); UpdateWaitWindow waitingDialog = new( RyujinxApp.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), @@ -317,13 +317,13 @@ namespace Ryujinx.Ava.Common string extension = Path.GetExtension(updateFilePath).ToLower(); if (extension is ".nsp") { - PartitionFileSystem pfsTemp = new PartitionFileSystem(); + PartitionFileSystem pfsTemp = new(); pfsTemp.Initialize(file.AsStorage()).ThrowIfFailure(); IFileSystem pfs = pfsTemp; foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) { - using UniqueRef ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new(); pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -364,8 +364,8 @@ namespace Ryujinx.Ava.Common string source = DateTime.Now.ToFileTime().ToString()[10..]; string output = DateTime.Now.ToFileTime().ToString()[10..]; - using UniqueRef uniqueSourceFs = new UniqueRef(ncaFileSystem); - using UniqueRef uniqueOutputFs = new UniqueRef(new LocalFileSystem(destination)); + using UniqueRef uniqueSourceFs = new(ncaFileSystem); + using UniqueRef uniqueOutputFs = new(new LocalFileSystem(destination)); fsClient.Register(source.ToU8Span(), ref uniqueSourceFs.Ref); fsClient.Register(output.ToU8Span(), ref uniqueOutputFs.Ref); diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index 72c2e04c4..e3ff7c78c 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -125,7 +125,7 @@ namespace Ryujinx.Ava.Common.Locale private static Dictionary LoadJsonLanguage(string languageCode) { - Dictionary localeStrings = new Dictionary(); + Dictionary localeStrings = new(); _localeData ??= EmbeddedResources.ReadAllText("Ryujinx/Assets/locales.json") .Into(it => JsonHelper.Deserialize(it, LocalesJsonContext.Default.LocalesJson)); diff --git a/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs b/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs index 7286178e7..da59a5d52 100644 --- a/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs +++ b/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Ava.Common.Models { public static XCITrimmerFileModel FromApplicationData(ApplicationData applicationData, XCIFileTrimmerLog logger) { - XCIFileTrimmer trimmer = new XCIFileTrimmer(applicationData.Path, logger); + XCIFileTrimmer trimmer = new(applicationData.Path, logger); return new XCITrimmerFileModel( applicationData.Name, diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index 86e9adcd5..c75e532ec 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -172,7 +172,7 @@ namespace Ryujinx.Ava.UI.Applet try { _parent.ViewModel.AppHost.NpadManager.BlockInputUpdates(); - SoftwareKeyboardUIArgs args = new SoftwareKeyboardUIArgs(); + SoftwareKeyboardUIArgs args = new(); args.KeyboardMode = KeyboardMode.Default; args.InitialText = "Ryujinx"; args.StringLengthMin = 1; @@ -264,7 +264,7 @@ namespace Ryujinx.Ava.UI.Applet { UserId selected = UserId.Null; byte[] defaultGuestImage = EmbeddedResources.Read("Ryujinx.HLE/HOS/Services/Account/Acc/GuestUserImage.jpg"); - UserProfile guest = new UserProfile(new UserId("00000000000000000000000000000080"), "Guest", defaultGuestImage); + UserProfile guest = new(new UserId("00000000000000000000000000000080"), "Guest", defaultGuestImage); ManualResetEvent dialogCloseEvent = new(false); diff --git a/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs index 4081de61e..e27355b9b 100644 --- a/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs +++ b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml.cs @@ -64,7 +64,7 @@ namespace Ryujinx.Ava.UI.Applet { if (item is UserProfile originalItem) { - UserProfileSft profile = new UserProfileSft(originalItem.UserId, originalItem.Name, originalItem.Image); + UserProfileSft profile = new(originalItem.UserId, originalItem.Name, originalItem.Image); if (profile.UserId == ViewModel.SelectedUserId) { diff --git a/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs b/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs index 1c20aac74..44cd84433 100644 --- a/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs +++ b/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs @@ -108,7 +108,7 @@ namespace Ryujinx.Ava.UI.Controls SaveDataFilter saveDataFilter = SaveDataFilter.Make(programId: default, saveType: SaveDataType.Account, default, saveDataId: default, index: default); - using UniqueRef saveDataIterator = new UniqueRef(); + using UniqueRef saveDataIterator = new(); HorizonClient.Fs.OpenSaveDataIterator(ref saveDataIterator.Ref, SaveDataSpaceId.User, in saveDataFilter).ThrowIfFailure(); @@ -128,7 +128,7 @@ namespace Ryujinx.Ava.UI.Controls for (int i = 0; i < readCount; i++) { SaveDataInfo save = saveDataInfo[i]; - UserId id = new UserId((long)save.UserId.Id.Low, (long)save.UserId.Id.High); + UserId id = new((long)save.UserId.Id.Low, (long)save.UserId.Id.High); if (ViewModel.Profiles.Cast().FirstOrDefault(x => x.UserId == id) == null) { lostAccounts.Add(id); diff --git a/src/Ryujinx/UI/Helpers/LoggerAdapter.cs b/src/Ryujinx/UI/Helpers/LoggerAdapter.cs index 1dc1adcc5..928d1fc31 100644 --- a/src/Ryujinx/UI/Helpers/LoggerAdapter.cs +++ b/src/Ryujinx/UI/Helpers/LoggerAdapter.cs @@ -50,8 +50,8 @@ namespace Ryujinx.Ava.UI.Helpers private static string Format(AvaLogLevel level, string area, string template, object source, object[] v) { - StringBuilder result = new StringBuilder(); - CharacterReader r = new CharacterReader(template.AsSpan()); + StringBuilder result = new(); + CharacterReader r = new(template.AsSpan()); int i = 0; result.Append('['); diff --git a/src/Ryujinx/UI/Helpers/NotificationHelper.cs b/src/Ryujinx/UI/Helpers/NotificationHelper.cs index aa071a2a1..d4d898687 100644 --- a/src/Ryujinx/UI/Helpers/NotificationHelper.cs +++ b/src/Ryujinx/UI/Helpers/NotificationHelper.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Ava.UI.Helpers Margin = new Thickness(0, 0, 15, 40), }; - Lazy> maybeAsyncWorkQueue = new Lazy>( + Lazy> maybeAsyncWorkQueue = new( () => new AsyncWorkQueue(notification => { Dispatcher.UIThread.Post(() => diff --git a/src/Ryujinx/UI/Models/Input/KeyboardInputConfig.cs b/src/Ryujinx/UI/Models/Input/KeyboardInputConfig.cs index bf3864b93..a71c85eba 100644 --- a/src/Ryujinx/UI/Models/Input/KeyboardInputConfig.cs +++ b/src/Ryujinx/UI/Models/Input/KeyboardInputConfig.cs @@ -367,7 +367,7 @@ namespace Ryujinx.Ava.UI.Models.Input public InputConfig GetConfig() { - StandardKeyboardInputConfig config = new StandardKeyboardInputConfig + StandardKeyboardInputConfig config = new() { Id = Id, Backend = InputBackendType.WindowKeyboard, diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 1f938d313..53e476f59 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -1802,7 +1802,7 @@ namespace Ryujinx.Ava.UI.ViewModels return; } - XCIFileTrimmer trimmer = new XCIFileTrimmer(filename, new XCITrimmerLog.MainWindow(this)); + XCIFileTrimmer trimmer = new(filename, new XCITrimmerLog.MainWindow(this)); if (trimmer.CanBeTrimmed) { diff --git a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs index 7c465572d..9d817ea0d 100644 --- a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs @@ -82,13 +82,13 @@ namespace Ryujinx.Ava.UI.ViewModels foreach (string path in modsBasePaths) { bool inSd = path == ModLoader.GetSdModsBasePath(); - ModLoader.ModCache modCache = new ModLoader.ModCache(); + ModLoader.ModCache modCache = new(); ModLoader.QueryContentsDir(modCache, new DirectoryInfo(Path.Combine(path, "contents")), applicationId); foreach (ModLoader.Mod mod in modCache.RomfsDirs) { - ModModel modModel = new ModModel(mod.Path.Parent.FullName, mod.Name, mod.Enabled, inSd); + ModModel modModel = new(mod.Path.Parent.FullName, mod.Name, mod.Enabled, inSd); if (Mods.All(x => x.Path != mod.Path.Parent.FullName)) { Mods.Add(modModel); @@ -102,7 +102,7 @@ namespace Ryujinx.Ava.UI.ViewModels foreach (ModLoader.Mod mod in modCache.ExefsDirs) { - ModModel modModel = new ModModel(mod.Path.Parent.FullName, mod.Name, mod.Enabled, inSd); + ModModel modModel = new(mod.Path.Parent.FullName, mod.Name, mod.Enabled, inSd); if (Mods.All(x => x.Path != mod.Path.Parent.FullName)) { Mods.Add(modModel); diff --git a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs index d0b178e41..33f30dbb0 100644 --- a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs @@ -104,7 +104,7 @@ namespace Ryujinx.Ava.UI.ViewModels // TODO: Parse DatabaseInfo.bin and table.bin files for more accuracy. if (item.Type == DirectoryEntryType.File && item.FullPath.Contains("chara") && item.FullPath.Contains("szs")) { - using UniqueRef file = new UniqueRef(); + using UniqueRef file = new(); romfs.OpenFile(ref file.Ref, ("/" + item.FullPath).ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs index 60ddb2040..72905ed1b 100644 --- a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs @@ -183,7 +183,7 @@ namespace Ryujinx.Ava.UI.ViewModels if (cancellationToken.IsCancellationRequested) break; - XCIFileTrimmer trimmer = new XCIFileTrimmer(xciApp.Path, _logger); + XCIFileTrimmer trimmer = new(xciApp.Path, _logger); Dispatcher.UIThread.Post(() => { diff --git a/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs index 206926755..fced8dc6f 100644 --- a/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserFirmwareAvatarSelectorView.axaml.cs @@ -66,11 +66,11 @@ namespace Ryujinx.Ava.UI.Views.User { if (ViewModel.SelectedImage != null) { - using MemoryStream streamJpg = new MemoryStream(); + using MemoryStream streamJpg = new(); using SKBitmap bitmap = SKBitmap.Decode(ViewModel.SelectedImage); - using SKBitmap newBitmap = new SKBitmap(bitmap.Width, bitmap.Height); + using SKBitmap newBitmap = new(bitmap.Width, bitmap.Height); - using (SKCanvas canvas = new SKCanvas(newBitmap)) + using (SKCanvas canvas = new(newBitmap)) { canvas.Clear(new SKColor( ViewModel.BackgroundColor.R, diff --git a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs index 73656e881..5740ffe77 100644 --- a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs @@ -103,7 +103,7 @@ namespace Ryujinx.Ava.UI.Views.User SKBitmap resizedBitmap = bitmap.Resize(new SKImageInfo(256, 256), SKFilterQuality.High); - using MemoryStream streamJpg = new MemoryStream(); + using MemoryStream streamJpg = new(); if (resizedBitmap != null) { diff --git a/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs b/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs index 1d9cb10cf..7a221e7b3 100644 --- a/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs @@ -67,7 +67,7 @@ namespace Ryujinx.Ava.UI.Views.User public void LoadSaves() { ViewModel.Saves.Clear(); - ObservableCollection saves = new ObservableCollection(); + ObservableCollection saves = new(); SaveDataFilter saveDataFilter = SaveDataFilter.Make( programId: default, saveType: SaveDataType.Account, @@ -75,7 +75,7 @@ namespace Ryujinx.Ava.UI.Views.User saveDataId: default, index: default); - using UniqueRef saveDataIterator = new UniqueRef(); + using UniqueRef saveDataIterator = new(); _horizonClient.Fs.OpenSaveDataIterator(ref saveDataIterator.Ref, SaveDataSpaceId.User, in saveDataFilter).ThrowIfFailure(); @@ -95,7 +95,7 @@ namespace Ryujinx.Ava.UI.Views.User SaveDataInfo save = saveDataInfo[i]; if (save.ProgramId.Value != 0) { - SaveModel saveModel = new SaveModel(save); + SaveModel saveModel = new(save); saves.Add(saveModel); } } diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index 3ed27bfe7..71d864c99 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -59,7 +59,7 @@ namespace Ryujinx.Ava.UI.Windows int cheatAdded = 0; - ModLoader.ModCache mods = new ModLoader.ModCache(); + ModLoader.ModCache mods = new(); ModLoader.QueryContentsDir(mods, new DirectoryInfo(Path.Combine(modsBasePath, "contents")), titleIdValue); @@ -81,7 +81,7 @@ namespace Ryujinx.Ava.UI.Windows LoadedCheats.Add(currentGroup); } - CheatNode model = new CheatNode(cheat.Name, buildId, string.Empty, false, enabled.Contains($"{buildId}-{cheat.Name}")); + CheatNode model = new(cheat.Name, buildId, string.Empty, false, enabled.Contains($"{buildId}-{cheat.Name}")); currentGroup?.SubNodes.Add(model); cheatAdded++; diff --git a/src/Ryujinx/UI/Windows/IconColorPicker.cs b/src/Ryujinx/UI/Windows/IconColorPicker.cs index 78ad8562f..ca9ac2c05 100644 --- a/src/Ryujinx/UI/Windows/IconColorPicker.cs +++ b/src/Ryujinx/UI/Windows/IconColorPicker.cs @@ -50,7 +50,7 @@ namespace Ryujinx.Ava.UI.Windows public static SKColor GetColor(SKBitmap image) { PaletteColor[] colors = new PaletteColor[TotalColors]; - Dictionary dominantColorBin = new Dictionary(); + Dictionary dominantColorBin = new(); SKColor[] buffer = GetBuffer(image); diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs index 5649addab..98c879df3 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs @@ -76,14 +76,14 @@ namespace Ryujinx.Ava.Utilities.AppLibrary } else { - PartitionFileSystem pfsTemp = new PartitionFileSystem(); + PartitionFileSystem pfsTemp = new(); pfsTemp.Initialize(file.AsStorage()).ThrowIfFailure(); pfs = pfsTemp; } foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) { - using UniqueRef ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new(); pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -158,7 +158,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return string.Empty; } - using UniqueRef nsoFile = new UniqueRef(); + using UniqueRef nsoFile = new(); codeFs.OpenFile(ref nsoFile.Ref, $"/{MainExeFs}".ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index 7a66fe44d..1720cd7f5 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -190,7 +190,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary /// An error occured while reading PFS data. private List GetApplicationsFromPfs(IFileSystem pfs, string filePath) { - List applications = new List(); + List applications = new(); string extension = Path.GetExtension(filePath).ToLower(); foreach ((ulong titleId, ContentMetaData content) in pfs.GetContentData(ContentMetaType.Application, _virtualFileSystem, _checkLevel)) @@ -245,7 +245,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary continue; } - using UniqueRef icon = new UniqueRef(); + using UniqueRef icon = new(); controlFs.OpenFile(ref icon.Ref, entry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -313,7 +313,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary case ".nsp": case ".pfs0": { - PartitionFileSystem pfs = new PartitionFileSystem(); + PartitionFileSystem pfs = new(); pfs.Initialize(file.AsStorage()).ThrowIfFailure(); ApplicationData result = GetApplicationFromNsp(pfs, applicationPath); @@ -501,7 +501,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) { - using UniqueRef ncaFile = new UniqueRef(); + using UniqueRef ncaFile = new(); pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -589,7 +589,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary ReadOption.None).ThrowIfFailure(); string displayVersion = controlData.DisplayVersionString.ToString(); - TitleUpdateModel update = new TitleUpdateModel(content.ApplicationId, content.Version.Version, + TitleUpdateModel update = new(content.ApplicationId, content.Version.Version, displayVersion, filePath); titleUpdates.Add(update); @@ -685,7 +685,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return; } - FileInfo fileInfo = new FileInfo(app); + FileInfo fileInfo = new(app); try { @@ -776,7 +776,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary ldnWebHost = DefaultLanPlayWebHost; } IEnumerable ldnGameDataArray = Array.Empty(); - using HttpClient httpClient = new HttpClient(); + using HttpClient httpClient = new(); string ldnGameDataArrayString = await httpClient.GetStringAsync($"https://{ldnWebHost}/api/public_games"); ldnGameDataArray = JsonHelper.Deserialize(ldnGameDataArrayString, _ldnDataSerializerContext.IEnumerableLdnGameData); LdnGameDataReceived?.Invoke(new LdnGameDataReceivedEventArgs @@ -882,7 +882,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return newDlcLoaded; } - FileInfo fileInfo = new FileInfo(app); + FileInfo fileInfo = new(app); try { @@ -949,8 +949,8 @@ namespace Ryujinx.Ava.Utilities.AppLibrary try { - HashSet titleIdsToSave = new HashSet(); - HashSet titleIdsToRefresh = new HashSet(); + HashSet titleIdsToSave = new(); + HashSet titleIdsToRefresh = new(); // Remove any updates which can no longer be located on disk List<(TitleUpdateModel TitleUpdate, bool IsSelected)> updatesToRemove = _titleUpdates.Items @@ -998,7 +998,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return numUpdatesLoaded; } - FileInfo fileInfo = new FileInfo(app); + FileInfo fileInfo = new(app); try { @@ -1170,7 +1170,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary } else { - PartitionFileSystem pfsTemp = new PartitionFileSystem(); + PartitionFileSystem pfsTemp = new(); pfsTemp.Initialize(file.AsStorage()).ThrowIfFailure(); pfs = pfsTemp; @@ -1204,7 +1204,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary // Read the icon from the ControlFS and store it as a byte array try { - using UniqueRef icon = new UniqueRef(); + using UniqueRef icon = new(); controlFs.OpenFile(ref icon.Ref, $"/icon_{desiredTitleLanguage}.dat".ToU8Span(), OpenMode.Read).ThrowIfFailure(); @@ -1222,7 +1222,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary continue; } - using UniqueRef icon = new UniqueRef(); + using UniqueRef icon = new(); controlFs.OpenFile(ref icon.Ref, entry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); diff --git a/src/Ryujinx/Utilities/DownloadableContentsHelper.cs b/src/Ryujinx/Utilities/DownloadableContentsHelper.cs index b8af11527..e46d1498a 100644 --- a/src/Ryujinx/Utilities/DownloadableContentsHelper.cs +++ b/src/Ryujinx/Utilities/DownloadableContentsHelper.cs @@ -82,7 +82,7 @@ namespace Ryujinx.Ava.Utilities private static List<(DownloadableContentModel, bool IsEnabled)> LoadDownloadableContents(VirtualFileSystem vfs, List downloadableContentContainers) { - List<(DownloadableContentModel, bool IsEnabled)> result = new List<(DownloadableContentModel, bool IsEnabled)>(); + List<(DownloadableContentModel, bool IsEnabled)> result = new(); foreach (DownloadableContentContainer downloadableContentContainer in downloadableContentContainers) { @@ -105,7 +105,7 @@ namespace Ryujinx.Ava.Utilities continue; } - DownloadableContentModel content = new DownloadableContentModel(nca.Header.TitleId, + DownloadableContentModel content = new(nca.Header.TitleId, downloadableContentContainer.ContainerPath, downloadableContentNca.FullPath); diff --git a/src/Ryujinx/Utilities/ShortcutHelper.cs b/src/Ryujinx/Utilities/ShortcutHelper.cs index 5a5f92773..ff89725d8 100644 --- a/src/Ryujinx/Utilities/ShortcutHelper.cs +++ b/src/Ryujinx/Utilities/ShortcutHelper.cs @@ -124,7 +124,7 @@ namespace Ryujinx.Ava.Utilities private static string GetArgsString(string appFilePath, string applicationId) { // args are first defined as a list, for easier adjustments in the future - List argsList = new List(); + List argsList = new(); if (!string.IsNullOrEmpty(CommandLineState.BaseDirPathArg)) { diff --git a/src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs b/src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs index fa2f8bf71..4fa09e925 100644 --- a/src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs +++ b/src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Ava.Utilities.SystemInfo if (cpuName == null) { - Dictionary cpuDict = new Dictionary(StringComparer.Ordinal) + Dictionary cpuDict = new(StringComparer.Ordinal) { ["model name"] = null, ["Processor"] = null, @@ -28,7 +28,7 @@ namespace Ryujinx.Ava.Utilities.SystemInfo cpuName = cpuDict["model name"] ?? cpuDict["Processor"] ?? cpuDict["Hardware"] ?? "Unknown"; } - Dictionary memDict = new Dictionary(StringComparer.Ordinal) + Dictionary memDict = new(StringComparer.Ordinal) { ["MemTotal"] = null, ["MemAvailable"] = null, diff --git a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs index 805d6a46a..fd3bb641c 100644 --- a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs +++ b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs @@ -51,7 +51,7 @@ namespace Ryujinx.Ava.Utilities public static void SaveTitleUpdatesJson(ulong applicationIdBase, List<(TitleUpdateModel, bool IsSelected)> updates) { - TitleUpdateMetadata titleUpdateWindowData = new TitleUpdateMetadata + TitleUpdateMetadata titleUpdateWindowData = new() { Selected = string.Empty, Paths = [], @@ -79,7 +79,7 @@ namespace Ryujinx.Ava.Utilities private static List<(TitleUpdateModel Update, bool IsSelected)> LoadTitleUpdates(VirtualFileSystem vfs, TitleUpdateMetadata titleUpdateMetadata, ulong applicationIdBase) { - List<(TitleUpdateModel, bool IsSelected)> result = new List<(TitleUpdateModel, bool IsSelected)>(); + List<(TitleUpdateModel, bool IsSelected)> result = new(); IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid @@ -116,7 +116,7 @@ namespace Ryujinx.Ava.Utilities .ThrowIfFailure(); string displayVersion = controlData.DisplayVersionString.ToString(); - TitleUpdateModel update = new TitleUpdateModel(content.ApplicationId, content.Version.Version, + TitleUpdateModel update = new(content.ApplicationId, content.Version.Version, displayVersion, path); result.Add((update, path == titleUpdateMetadata.Selected)); -- 2.47.1 From 15d1528774b7acade9a269536846f4c1361acb6b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:17:12 -0600 Subject: [PATCH 451/722] misc: chore: Fix object creation in ARMeilleure --- src/ARMeilleure/CodeGen/Arm64/Arm64Optimizer.cs | 2 +- src/ARMeilleure/CodeGen/Linking/RelocInfo.cs | 2 +- .../CodeGen/RegisterAllocators/LinearScanAllocator.cs | 4 ++-- src/ARMeilleure/CodeGen/X86/Assembler.cs | 4 ++-- src/ARMeilleure/CodeGen/X86/X86Optimizer.cs | 2 +- src/ARMeilleure/Common/BitMap.cs | 4 ++-- src/ARMeilleure/Decoders/Optimizations/TailCallRemover.cs | 2 +- src/ARMeilleure/Diagnostics/IRDumper.cs | 2 +- src/ARMeilleure/IntermediateRepresentation/Operand.cs | 8 ++++---- src/ARMeilleure/Translation/ControlFlowGraph.cs | 8 ++++---- src/ARMeilleure/Translation/PTC/Ptc.cs | 6 +++--- src/ARMeilleure/Translation/PTC/PtcProfiler.cs | 2 +- src/ARMeilleure/Translation/RegisterUsage.cs | 2 +- src/ARMeilleure/Translation/SsaConstruction.cs | 2 +- src/ARMeilleure/Translation/Translator.cs | 2 +- src/ARMeilleure/Translation/TranslatorStubs.cs | 8 ++++---- 16 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/ARMeilleure/CodeGen/Arm64/Arm64Optimizer.cs b/src/ARMeilleure/CodeGen/Arm64/Arm64Optimizer.cs index 979b471ac..a433cea65 100644 --- a/src/ARMeilleure/CodeGen/Arm64/Arm64Optimizer.cs +++ b/src/ARMeilleure/CodeGen/Arm64/Arm64Optimizer.cs @@ -13,7 +13,7 @@ namespace ARMeilleure.CodeGen.Arm64 public static void RunPass(ControlFlowGraph cfg) { - Dictionary constants = new Dictionary(); + Dictionary constants = new(); Operand GetConstantCopy(BasicBlock block, Operation operation, Operand source) { diff --git a/src/ARMeilleure/CodeGen/Linking/RelocInfo.cs b/src/ARMeilleure/CodeGen/Linking/RelocInfo.cs index 01ff0347b..fb8b449a7 100644 --- a/src/ARMeilleure/CodeGen/Linking/RelocInfo.cs +++ b/src/ARMeilleure/CodeGen/Linking/RelocInfo.cs @@ -10,7 +10,7 @@ namespace ARMeilleure.CodeGen.Linking ///

/// Gets an empty . /// - public static RelocInfo Empty { get; } = new RelocInfo(null); + public static RelocInfo Empty { get; } = new(null); private readonly RelocEntry[] _entries; diff --git a/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs b/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs index fa0b8aa24..99e231a67 100644 --- a/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs +++ b/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs @@ -115,7 +115,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators { NumberLocals(cfg, regMasks.RegistersCount); - AllocationContext context = new AllocationContext(stackAlloc, regMasks, _intervals.Count); + AllocationContext context = new(stackAlloc, regMasks, _intervals.Count); BuildIntervals(cfg, context); @@ -839,7 +839,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators { dest.NumberLocal(_intervals.Count); - LiveInterval interval = new LiveInterval(dest); + LiveInterval interval = new(dest); _intervals.Add(interval); SetVisited(dest); diff --git a/src/ARMeilleure/CodeGen/X86/Assembler.cs b/src/ARMeilleure/CodeGen/X86/Assembler.cs index 74774a8cf..a81976a09 100644 --- a/src/ARMeilleure/CodeGen/X86/Assembler.cs +++ b/src/ARMeilleure/CodeGen/X86/Assembler.cs @@ -1412,7 +1412,7 @@ namespace ARMeilleure.CodeGen.X86 _stream.Seek(0, SeekOrigin.Begin); using RecyclableMemoryStream codeStream = MemoryStreamManager.Shared.GetStream(); - Assembler assembler = new Assembler(codeStream, HasRelocs); + Assembler assembler = new(codeStream, HasRelocs); bool hasRelocs = HasRelocs; int relocIndex = 0; @@ -1471,7 +1471,7 @@ namespace ARMeilleure.CodeGen.X86 _stream.CopyTo(codeStream); byte[] code = codeStream.ToArray(); - RelocInfo relocInfo = new RelocInfo(relocEntries); + RelocInfo relocInfo = new(relocEntries); return (code, relocInfo); } diff --git a/src/ARMeilleure/CodeGen/X86/X86Optimizer.cs b/src/ARMeilleure/CodeGen/X86/X86Optimizer.cs index 8fcc41bc4..d72442c5a 100644 --- a/src/ARMeilleure/CodeGen/X86/X86Optimizer.cs +++ b/src/ARMeilleure/CodeGen/X86/X86Optimizer.cs @@ -13,7 +13,7 @@ namespace ARMeilleure.CodeGen.X86 public static void RunPass(ControlFlowGraph cfg) { - Dictionary constants = new Dictionary(); + Dictionary constants = new(); Operand GetConstantCopy(BasicBlock block, Operation operation, Operand source) { diff --git a/src/ARMeilleure/Common/BitMap.cs b/src/ARMeilleure/Common/BitMap.cs index a7bc69238..52e192699 100644 --- a/src/ARMeilleure/Common/BitMap.cs +++ b/src/ARMeilleure/Common/BitMap.cs @@ -130,12 +130,12 @@ namespace ARMeilleure.Common if (count > _count) { long* oldMask = _masks; - Span oldSpan = new Span(_masks, _count); + Span oldSpan = new(_masks, _count); _masks = _allocator.Allocate((uint)count); _count = count; - Span newSpan = new Span(_masks, _count); + Span newSpan = new(_masks, _count); oldSpan.CopyTo(newSpan); newSpan[oldSpan.Length..].Clear(); diff --git a/src/ARMeilleure/Decoders/Optimizations/TailCallRemover.cs b/src/ARMeilleure/Decoders/Optimizations/TailCallRemover.cs index 361a7f0d0..15ab3e6b8 100644 --- a/src/ARMeilleure/Decoders/Optimizations/TailCallRemover.cs +++ b/src/ARMeilleure/Decoders/Optimizations/TailCallRemover.cs @@ -69,7 +69,7 @@ namespace ARMeilleure.Decoders.Optimizations } } - List newBlocks = new List(blocks.Count); + List newBlocks = new(blocks.Count); // Finally, rebuild decoded block list, ignoring blocks outside the contiguous range. for (int i = 0; i < blocks.Count; i++) diff --git a/src/ARMeilleure/Diagnostics/IRDumper.cs b/src/ARMeilleure/Diagnostics/IRDumper.cs index 9d6a708b6..dcde1e360 100644 --- a/src/ARMeilleure/Diagnostics/IRDumper.cs +++ b/src/ARMeilleure/Diagnostics/IRDumper.cs @@ -285,7 +285,7 @@ namespace ARMeilleure.Diagnostics public static string GetDump(ControlFlowGraph cfg) { - IRDumper dumper = new IRDumper(1); + IRDumper dumper = new(1); for (BasicBlock block = cfg.Blocks.First; block != null; block = block.ListNext) { diff --git a/src/ARMeilleure/IntermediateRepresentation/Operand.cs b/src/ARMeilleure/IntermediateRepresentation/Operand.cs index 495a9d04a..9966308e6 100644 --- a/src/ARMeilleure/IntermediateRepresentation/Operand.cs +++ b/src/ARMeilleure/IntermediateRepresentation/Operand.cs @@ -304,7 +304,7 @@ namespace ARMeilleure.IntermediateRepresentation ushort newCount = checked((ushort)(count + 1)); ushort newCapacity = (ushort)Math.Min(capacity * 2, ushort.MaxValue); - Span oldSpan = new Span(data, count); + Span oldSpan = new(data, count); capacity = newCapacity; data = Allocators.References.Allocate(capacity); @@ -338,7 +338,7 @@ namespace ARMeilleure.IntermediateRepresentation throw new OverflowException(); } - Span oldSpan = new Span(data, (int)count); + Span oldSpan = new(data, (int)count); capacity = newCapacity; data = Allocators.References.Allocate(capacity); @@ -352,7 +352,7 @@ namespace ARMeilleure.IntermediateRepresentation private static void Remove(in T item, ref T* data, ref ushort count) where T : unmanaged { - Span span = new Span(data, count); + Span span = new(data, count); for (int i = 0; i < span.Length; i++) { @@ -372,7 +372,7 @@ namespace ARMeilleure.IntermediateRepresentation private static void Remove(in T item, ref T* data, ref uint count) where T : unmanaged { - Span span = new Span(data, (int)count); + Span span = new(data, (int)count); for (int i = 0; i < span.Length; i++) { diff --git a/src/ARMeilleure/Translation/ControlFlowGraph.cs b/src/ARMeilleure/Translation/ControlFlowGraph.cs index 03ef6f461..c9946d392 100644 --- a/src/ARMeilleure/Translation/ControlFlowGraph.cs +++ b/src/ARMeilleure/Translation/ControlFlowGraph.cs @@ -47,8 +47,8 @@ namespace ARMeilleure.Translation { RemoveUnreachableBlocks(Blocks); - HashSet visited = new HashSet(); - Stack blockStack = new Stack(); + HashSet visited = new(); + Stack blockStack = new(); Array.Resize(ref _postOrderBlocks, Blocks.Count); Array.Resize(ref _postOrderMap, Blocks.Count); @@ -88,8 +88,8 @@ namespace ARMeilleure.Translation private void RemoveUnreachableBlocks(IntrusiveList blocks) { - HashSet visited = new HashSet(); - Queue workQueue = new Queue(); + HashSet visited = new(); + Queue workQueue = new(); visited.Add(Entry); workQueue.Enqueue(Entry); diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index 10f8f3043..7a0bb750e 100644 --- a/src/ARMeilleure/Translation/PTC/Ptc.cs +++ b/src/ARMeilleure/Translation/PTC/Ptc.cs @@ -750,7 +750,7 @@ namespace ARMeilleure.Translation.PTC UnwindInfo unwindInfo, bool highCq) { - CompiledFunction cFunc = new CompiledFunction(code, unwindInfo, RelocInfo.Empty); + CompiledFunction cFunc = new(code, unwindInfo, RelocInfo.Empty); GuestFunction gFunc = cFunc.MapWithPointer(out nint gFuncPointer); return new TranslatedFunction(gFunc, gFuncPointer, callCounter, guestSize, highCq); @@ -945,7 +945,7 @@ namespace ARMeilleure.Translation.PTC WriteCode(code.AsSpan()); // WriteReloc. - using BinaryWriter relocInfoWriter = new BinaryWriter(_relocsStream, EncodingCache.UTF8NoBOM, true); + using BinaryWriter relocInfoWriter = new(_relocsStream, EncodingCache.UTF8NoBOM, true); foreach (RelocEntry entry in relocInfo.Entries) { @@ -955,7 +955,7 @@ namespace ARMeilleure.Translation.PTC } // WriteUnwindInfo. - using BinaryWriter unwindInfoWriter = new BinaryWriter(_unwindInfosStream, EncodingCache.UTF8NoBOM, true); + using BinaryWriter unwindInfoWriter = new(_unwindInfosStream, EncodingCache.UTF8NoBOM, true); unwindInfoWriter.Write(unwindInfo.PushEntries.Length); diff --git a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs index 250ef70bb..051f8a5d0 100644 --- a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs +++ b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs @@ -111,7 +111,7 @@ namespace ARMeilleure.Translation.PTC public ConcurrentQueue<(ulong address, FuncProfile funcProfile)> GetProfiledFuncsToTranslate(TranslatorCache funcs) { - ConcurrentQueue<(ulong address, FuncProfile funcProfile)> profiledFuncsToTranslate = new ConcurrentQueue<(ulong address, FuncProfile funcProfile)>(); + ConcurrentQueue<(ulong address, FuncProfile funcProfile)> profiledFuncsToTranslate = new(); foreach (KeyValuePair profiledFunc in ProfiledFuncs) { diff --git a/src/ARMeilleure/Translation/RegisterUsage.cs b/src/ARMeilleure/Translation/RegisterUsage.cs index 472b0f67b..03d4a96e7 100644 --- a/src/ARMeilleure/Translation/RegisterUsage.cs +++ b/src/ARMeilleure/Translation/RegisterUsage.cs @@ -95,7 +95,7 @@ namespace ARMeilleure.Translation // This is required because we have a implicit context load at the start of the function, // but if there is a jump to the start of the function, the context load would trash the modified values. // Here we insert a new entry block that will jump to the existing entry block. - BasicBlock newEntry = new BasicBlock(cfg.Blocks.Count); + BasicBlock newEntry = new(cfg.Blocks.Count); cfg.UpdateEntry(newEntry); } diff --git a/src/ARMeilleure/Translation/SsaConstruction.cs b/src/ARMeilleure/Translation/SsaConstruction.cs index 3819340c6..e63cdc775 100644 --- a/src/ARMeilleure/Translation/SsaConstruction.cs +++ b/src/ARMeilleure/Translation/SsaConstruction.cs @@ -47,7 +47,7 @@ namespace ARMeilleure.Translation DefMap[] globalDefs = new DefMap[cfg.Blocks.Count]; Operand[] localDefs = new Operand[cfg.LocalsCount + RegisterConsts.TotalCount]; - Queue dfPhiBlocks = new Queue(); + Queue dfPhiBlocks = new(); for (BasicBlock block = cfg.Blocks.First; block != null; block = block.ListNext) { diff --git a/src/ARMeilleure/Translation/Translator.cs b/src/ARMeilleure/Translation/Translator.cs index 8e1a437db..77fdf949c 100644 --- a/src/ARMeilleure/Translation/Translator.cs +++ b/src/ARMeilleure/Translation/Translator.cs @@ -222,7 +222,7 @@ namespace ARMeilleure.Translation internal TranslatedFunction Translate(ulong address, ExecutionMode mode, bool highCq, bool singleStep = false) { - ArmEmitterContext context = new ArmEmitterContext( + ArmEmitterContext context = new( Memory, CountTable, FunctionTable, diff --git a/src/ARMeilleure/Translation/TranslatorStubs.cs b/src/ARMeilleure/Translation/TranslatorStubs.cs index e48349963..f149c1397 100644 --- a/src/ARMeilleure/Translation/TranslatorStubs.cs +++ b/src/ARMeilleure/Translation/TranslatorStubs.cs @@ -142,7 +142,7 @@ namespace ARMeilleure.Translation /// Generated private nint GenerateDispatchStub() { - EmitterContext context = new EmitterContext(); + EmitterContext context = new(); Operand lblFallback = Label(); Operand lblEnd = Label(); @@ -200,7 +200,7 @@ namespace ARMeilleure.Translation /// Generated private nint GenerateSlowDispatchStub() { - EmitterContext context = new EmitterContext(); + EmitterContext context = new(); // Load the target guest address from the native context. Operand nativeContext = context.LoadArgument(OperandType.I64, 0); @@ -251,7 +251,7 @@ namespace ARMeilleure.Translation /// function private DispatcherFunction GenerateDispatchLoop() { - EmitterContext context = new EmitterContext(); + EmitterContext context = new(); Operand beginLbl = Label(); Operand endLbl = Label(); @@ -292,7 +292,7 @@ namespace ARMeilleure.Translation /// function private WrapperFunction GenerateContextWrapper() { - EmitterContext context = new EmitterContext(); + EmitterContext context = new(); Operand nativeContext = context.LoadArgument(OperandType.I64, 0); Operand guestMethod = context.LoadArgument(OperandType.I64, 1); -- 2.47.1 From 4e47c86f90c329e80d7a76281f609b0509bdb71f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:17:37 -0600 Subject: [PATCH 452/722] misc: chore: Fix object creation in GAL --- src/Ryujinx.Graphics.GAL/ComputeSize.cs | 2 +- .../Multithreading/ThreadedRenderer.cs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx.Graphics.GAL/ComputeSize.cs b/src/Ryujinx.Graphics.GAL/ComputeSize.cs index ce9c2531c..c8d89c0fe 100644 --- a/src/Ryujinx.Graphics.GAL/ComputeSize.cs +++ b/src/Ryujinx.Graphics.GAL/ComputeSize.cs @@ -2,7 +2,7 @@ namespace Ryujinx.Graphics.GAL { public readonly struct ComputeSize { - public readonly static ComputeSize VtgAsCompute = new ComputeSize(32, 32, 1); + public readonly static ComputeSize VtgAsCompute = new(32, 32, 1); public readonly int X; public readonly int Y; diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs index 676cbe8fc..74a345ffa 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs @@ -337,7 +337,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading { if (IsGpuThread()) { - ThreadedTexture texture = new ThreadedTexture(this, info); + ThreadedTexture texture = new(this, info); New().Set(Ref(texture), info); QueueCommand(); @@ -345,7 +345,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading } else { - ThreadedTexture texture = new ThreadedTexture(this, info) + ThreadedTexture texture = new(this, info) { Base = _baseRenderer.CreateTexture(info), }; @@ -355,7 +355,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading } public ITextureArray CreateTextureArray(int size, bool isBuffer) { - ThreadedTextureArray textureArray = new ThreadedTextureArray(this); + ThreadedTextureArray textureArray = new(this); New().Set(Ref(textureArray), size, isBuffer); QueueCommand(); @@ -414,7 +414,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading public IProgram LoadProgramBinary(byte[] programBinary, bool hasFragmentShader, ShaderInfo info) { - ThreadedProgram program = new ThreadedProgram(this); + ThreadedProgram program = new(this); BinaryProgramRequest request = new(program, programBinary, hasFragmentShader, info); Programs.Add(request); -- 2.47.1 From 929a16dd26b4528a4123d31faadafc7f7f6b5e26 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:18:04 -0600 Subject: [PATCH 453/722] misc: chore: Fix object creation in Gpu project --- .../Engine/Dma/DmaClass.cs | 4 +- .../InlineToMemory/InlineToMemoryClass.cs | 2 +- .../Threed/Blender/AdvancedBlendFunctions.cs | 400 +++++++++--------- .../Engine/Threed/StateUpdateTracker.cs | 2 +- .../Engine/Threed/StateUpdater.cs | 6 +- .../Engine/Threed/ThreedClass.cs | 4 +- .../Engine/Twod/TwodClass.cs | 6 +- src/Ryujinx.Graphics.Gpu/GpuContext.cs | 2 +- .../Image/AutoDeleteCache.cs | 4 +- .../Image/TextureBindingsArrayCache.cs | 4 +- .../Image/TextureCache.cs | 2 +- .../Image/TextureGroup.cs | 12 +- .../Memory/BufferCache.cs | 2 +- .../Memory/BufferModifiedRangeList.cs | 2 +- .../Memory/BufferUpdater.cs | 2 +- .../Memory/MemoryManager.cs | 2 +- .../Memory/SupportBufferUpdater.cs | 2 +- .../Shader/CachedShaderBindings.cs | 4 +- 18 files changed, 231 insertions(+), 231 deletions(-) diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs index 4ee15dfef..19b90c59a 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs @@ -245,7 +245,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma int srcStride = (int)_state.State.PitchIn; int dstStride = (int)_state.State.PitchOut; - OffsetCalculator srcCalculator = new OffsetCalculator( + OffsetCalculator srcCalculator = new( src.Width, src.Height, srcStride, @@ -254,7 +254,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma src.MemoryLayout.UnpackGobBlocksInZ(), srcBpp); - OffsetCalculator dstCalculator = new OffsetCalculator( + OffsetCalculator dstCalculator = new( dst.Width, dst.Height, dstStride, diff --git a/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs index aad97ad81..37d7457fc 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/InlineToMemory/InlineToMemoryClass.cs @@ -208,7 +208,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.InlineToMemory } } - OffsetCalculator dstCalculator = new OffsetCalculator( + OffsetCalculator dstCalculator = new( _dstWidth, _dstHeight, _dstStride, diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs index 020db62be..f5fad66ea 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs @@ -10,206 +10,206 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.Blender { public static readonly AdvancedBlendUcode[] Table = new AdvancedBlendUcode[] { - new AdvancedBlendUcode(AdvancedBlendOp.PlusClamped, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPlusClampedPremul), - new AdvancedBlendUcode(AdvancedBlendOp.PlusClampedAlpha, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPlusClampedAlphaPremul), - new AdvancedBlendUcode(AdvancedBlendOp.PlusDarker, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPlusDarkerPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedMultiplyPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedScreenPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedOverlayPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedDarkenPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedLightenPremul), - new AdvancedBlendUcode(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedColorDodgePremul), - new AdvancedBlendUcode(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedColorBurnPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHardLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedSoftLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedDifferencePremul), - new AdvancedBlendUcode(AdvancedBlendOp.Minus, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedMinusPremul), - new AdvancedBlendUcode(AdvancedBlendOp.MinusClamped, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedMinusClampedPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedExclusionPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Contrast, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedContrastPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedInvertPremul), - new AdvancedBlendUcode(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedInvertRGBPremul), - new AdvancedBlendUcode(AdvancedBlendOp.InvertOvg, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedInvertOvgPremul), - new AdvancedBlendUcode(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedLinearDodgePremul), - new AdvancedBlendUcode(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedLinearBurnPremul), - new AdvancedBlendUcode(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedVividLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedLinearLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPinLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHardMixPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Red, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedRedPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Green, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedGreenPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Blue, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedBluePremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHslHuePremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHslSaturationPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHslColorPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHslLuminosityPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Src, AdvancedBlendOverlap.Disjoint, true, GenDisjointSrcPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Dst, AdvancedBlendOverlap.Disjoint, true, GenDisjointDstPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Disjoint, true, GenDisjointSrcOverPremul), - new AdvancedBlendUcode(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Disjoint, true, GenDisjointDstOverPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Disjoint, true, GenDisjointSrcInPremul), - new AdvancedBlendUcode(AdvancedBlendOp.DstIn, AdvancedBlendOverlap.Disjoint, true, GenDisjointDstInPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Disjoint, true, GenDisjointSrcOutPremul), - new AdvancedBlendUcode(AdvancedBlendOp.DstOut, AdvancedBlendOverlap.Disjoint, true, GenDisjointDstOutPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Disjoint, true, GenDisjointSrcAtopPremul), - new AdvancedBlendUcode(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Disjoint, true, GenDisjointDstAtopPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Disjoint, true, GenDisjointXorPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Plus, AdvancedBlendOverlap.Disjoint, true, GenDisjointPlusPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Disjoint, true, GenDisjointMultiplyPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Disjoint, true, GenDisjointScreenPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Disjoint, true, GenDisjointOverlayPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Disjoint, true, GenDisjointDarkenPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Disjoint, true, GenDisjointLightenPremul), - new AdvancedBlendUcode(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Disjoint, true, GenDisjointColorDodgePremul), - new AdvancedBlendUcode(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Disjoint, true, GenDisjointColorBurnPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Disjoint, true, GenDisjointHardLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Disjoint, true, GenDisjointSoftLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Disjoint, true, GenDisjointDifferencePremul), - new AdvancedBlendUcode(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Disjoint, true, GenDisjointExclusionPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Disjoint, true, GenDisjointInvertPremul), - new AdvancedBlendUcode(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Disjoint, true, GenDisjointInvertRGBPremul), - new AdvancedBlendUcode(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Disjoint, true, GenDisjointLinearDodgePremul), - new AdvancedBlendUcode(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Disjoint, true, GenDisjointLinearBurnPremul), - new AdvancedBlendUcode(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Disjoint, true, GenDisjointVividLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Disjoint, true, GenDisjointLinearLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Disjoint, true, GenDisjointPinLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Disjoint, true, GenDisjointHardMixPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Disjoint, true, GenDisjointHslHuePremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Disjoint, true, GenDisjointHslSaturationPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Disjoint, true, GenDisjointHslColorPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Disjoint, true, GenDisjointHslLuminosityPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Src, AdvancedBlendOverlap.Conjoint, true, GenConjointSrcPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Dst, AdvancedBlendOverlap.Conjoint, true, GenConjointDstPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Conjoint, true, GenConjointSrcOverPremul), - new AdvancedBlendUcode(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Conjoint, true, GenConjointDstOverPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Conjoint, true, GenConjointSrcInPremul), - new AdvancedBlendUcode(AdvancedBlendOp.DstIn, AdvancedBlendOverlap.Conjoint, true, GenConjointDstInPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Conjoint, true, GenConjointSrcOutPremul), - new AdvancedBlendUcode(AdvancedBlendOp.DstOut, AdvancedBlendOverlap.Conjoint, true, GenConjointDstOutPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Conjoint, true, GenConjointSrcAtopPremul), - new AdvancedBlendUcode(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Conjoint, true, GenConjointDstAtopPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Conjoint, true, GenConjointXorPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Conjoint, true, GenConjointMultiplyPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Conjoint, true, GenConjointScreenPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Conjoint, true, GenConjointOverlayPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Conjoint, true, GenConjointDarkenPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Conjoint, true, GenConjointLightenPremul), - new AdvancedBlendUcode(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Conjoint, true, GenConjointColorDodgePremul), - new AdvancedBlendUcode(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Conjoint, true, GenConjointColorBurnPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Conjoint, true, GenConjointHardLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Conjoint, true, GenConjointSoftLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Conjoint, true, GenConjointDifferencePremul), - new AdvancedBlendUcode(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Conjoint, true, GenConjointExclusionPremul), - new AdvancedBlendUcode(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Conjoint, true, GenConjointInvertPremul), - new AdvancedBlendUcode(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Conjoint, true, GenConjointInvertRGBPremul), - new AdvancedBlendUcode(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Conjoint, true, GenConjointLinearDodgePremul), - new AdvancedBlendUcode(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Conjoint, true, GenConjointLinearBurnPremul), - new AdvancedBlendUcode(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Conjoint, true, GenConjointVividLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Conjoint, true, GenConjointLinearLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Conjoint, true, GenConjointPinLightPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Conjoint, true, GenConjointHardMixPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Conjoint, true, GenConjointHslHuePremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Conjoint, true, GenConjointHslSaturationPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Conjoint, true, GenConjointHslColorPremul), - new AdvancedBlendUcode(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Conjoint, true, GenConjointHslLuminosityPremul), - new AdvancedBlendUcode(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedDstOver), - new AdvancedBlendUcode(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedSrcIn), - new AdvancedBlendUcode(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedSrcOut), - new AdvancedBlendUcode(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedSrcAtop), - new AdvancedBlendUcode(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedDstAtop), - new AdvancedBlendUcode(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedXor), - new AdvancedBlendUcode(AdvancedBlendOp.PlusClamped, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedPlusClamped), - new AdvancedBlendUcode(AdvancedBlendOp.PlusClampedAlpha, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedPlusClampedAlpha), - new AdvancedBlendUcode(AdvancedBlendOp.PlusDarker, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedPlusDarker), - new AdvancedBlendUcode(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedMultiply), - new AdvancedBlendUcode(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedScreen), - new AdvancedBlendUcode(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedOverlay), - new AdvancedBlendUcode(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedDarken), - new AdvancedBlendUcode(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedLighten), - new AdvancedBlendUcode(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedColorDodge), - new AdvancedBlendUcode(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedColorBurn), - new AdvancedBlendUcode(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHardLight), - new AdvancedBlendUcode(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedSoftLight), - new AdvancedBlendUcode(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedDifference), - new AdvancedBlendUcode(AdvancedBlendOp.Minus, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedMinus), - new AdvancedBlendUcode(AdvancedBlendOp.MinusClamped, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedMinusClamped), - new AdvancedBlendUcode(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedExclusion), - new AdvancedBlendUcode(AdvancedBlendOp.Contrast, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedContrast), - new AdvancedBlendUcode(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedInvertRGB), - new AdvancedBlendUcode(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedLinearDodge), - new AdvancedBlendUcode(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedLinearBurn), - new AdvancedBlendUcode(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedVividLight), - new AdvancedBlendUcode(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedLinearLight), - new AdvancedBlendUcode(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedPinLight), - new AdvancedBlendUcode(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHardMix), - new AdvancedBlendUcode(AdvancedBlendOp.Red, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedRed), - new AdvancedBlendUcode(AdvancedBlendOp.Green, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedGreen), - new AdvancedBlendUcode(AdvancedBlendOp.Blue, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedBlue), - new AdvancedBlendUcode(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHslHue), - new AdvancedBlendUcode(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHslSaturation), - new AdvancedBlendUcode(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHslColor), - new AdvancedBlendUcode(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHslLuminosity), - new AdvancedBlendUcode(AdvancedBlendOp.Src, AdvancedBlendOverlap.Disjoint, false, GenDisjointSrc), - new AdvancedBlendUcode(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Disjoint, false, GenDisjointSrcOver), - new AdvancedBlendUcode(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Disjoint, false, GenDisjointDstOver), - new AdvancedBlendUcode(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Disjoint, false, GenDisjointSrcIn), - new AdvancedBlendUcode(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Disjoint, false, GenDisjointSrcOut), - new AdvancedBlendUcode(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Disjoint, false, GenDisjointSrcAtop), - new AdvancedBlendUcode(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Disjoint, false, GenDisjointDstAtop), - new AdvancedBlendUcode(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Disjoint, false, GenDisjointXor), - new AdvancedBlendUcode(AdvancedBlendOp.Plus, AdvancedBlendOverlap.Disjoint, false, GenDisjointPlus), - new AdvancedBlendUcode(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Disjoint, false, GenDisjointMultiply), - new AdvancedBlendUcode(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Disjoint, false, GenDisjointScreen), - new AdvancedBlendUcode(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Disjoint, false, GenDisjointOverlay), - new AdvancedBlendUcode(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Disjoint, false, GenDisjointDarken), - new AdvancedBlendUcode(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Disjoint, false, GenDisjointLighten), - new AdvancedBlendUcode(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Disjoint, false, GenDisjointColorDodge), - new AdvancedBlendUcode(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Disjoint, false, GenDisjointColorBurn), - new AdvancedBlendUcode(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Disjoint, false, GenDisjointHardLight), - new AdvancedBlendUcode(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Disjoint, false, GenDisjointSoftLight), - new AdvancedBlendUcode(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Disjoint, false, GenDisjointDifference), - new AdvancedBlendUcode(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Disjoint, false, GenDisjointExclusion), - new AdvancedBlendUcode(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Disjoint, false, GenDisjointInvertRGB), - new AdvancedBlendUcode(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Disjoint, false, GenDisjointLinearDodge), - new AdvancedBlendUcode(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Disjoint, false, GenDisjointLinearBurn), - new AdvancedBlendUcode(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Disjoint, false, GenDisjointVividLight), - new AdvancedBlendUcode(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Disjoint, false, GenDisjointLinearLight), - new AdvancedBlendUcode(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Disjoint, false, GenDisjointPinLight), - new AdvancedBlendUcode(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Disjoint, false, GenDisjointHardMix), - new AdvancedBlendUcode(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Disjoint, false, GenDisjointHslHue), - new AdvancedBlendUcode(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Disjoint, false, GenDisjointHslSaturation), - new AdvancedBlendUcode(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Disjoint, false, GenDisjointHslColor), - new AdvancedBlendUcode(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Disjoint, false, GenDisjointHslLuminosity), - new AdvancedBlendUcode(AdvancedBlendOp.Src, AdvancedBlendOverlap.Conjoint, false, GenConjointSrc), - new AdvancedBlendUcode(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Conjoint, false, GenConjointSrcOver), - new AdvancedBlendUcode(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Conjoint, false, GenConjointDstOver), - new AdvancedBlendUcode(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Conjoint, false, GenConjointSrcIn), - new AdvancedBlendUcode(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Conjoint, false, GenConjointSrcOut), - new AdvancedBlendUcode(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Conjoint, false, GenConjointSrcAtop), - new AdvancedBlendUcode(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Conjoint, false, GenConjointDstAtop), - new AdvancedBlendUcode(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Conjoint, false, GenConjointXor), - new AdvancedBlendUcode(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Conjoint, false, GenConjointMultiply), - new AdvancedBlendUcode(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Conjoint, false, GenConjointScreen), - new AdvancedBlendUcode(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Conjoint, false, GenConjointOverlay), - new AdvancedBlendUcode(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Conjoint, false, GenConjointDarken), - new AdvancedBlendUcode(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Conjoint, false, GenConjointLighten), - new AdvancedBlendUcode(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Conjoint, false, GenConjointColorDodge), - new AdvancedBlendUcode(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Conjoint, false, GenConjointColorBurn), - new AdvancedBlendUcode(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Conjoint, false, GenConjointHardLight), - new AdvancedBlendUcode(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Conjoint, false, GenConjointSoftLight), - new AdvancedBlendUcode(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Conjoint, false, GenConjointDifference), - new AdvancedBlendUcode(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Conjoint, false, GenConjointExclusion), - new AdvancedBlendUcode(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Conjoint, false, GenConjointInvertRGB), - new AdvancedBlendUcode(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Conjoint, false, GenConjointLinearDodge), - new AdvancedBlendUcode(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Conjoint, false, GenConjointLinearBurn), - new AdvancedBlendUcode(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Conjoint, false, GenConjointVividLight), - new AdvancedBlendUcode(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Conjoint, false, GenConjointLinearLight), - new AdvancedBlendUcode(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Conjoint, false, GenConjointPinLight), - new AdvancedBlendUcode(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Conjoint, false, GenConjointHardMix), - new AdvancedBlendUcode(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Conjoint, false, GenConjointHslHue), - new AdvancedBlendUcode(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Conjoint, false, GenConjointHslSaturation), - new AdvancedBlendUcode(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Conjoint, false, GenConjointHslColor), - new AdvancedBlendUcode(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Conjoint, false, GenConjointHslLuminosity), + new(AdvancedBlendOp.PlusClamped, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPlusClampedPremul), + new(AdvancedBlendOp.PlusClampedAlpha, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPlusClampedAlphaPremul), + new(AdvancedBlendOp.PlusDarker, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPlusDarkerPremul), + new(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedMultiplyPremul), + new(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedScreenPremul), + new(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedOverlayPremul), + new(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedDarkenPremul), + new(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedLightenPremul), + new(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedColorDodgePremul), + new(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedColorBurnPremul), + new(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHardLightPremul), + new(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedSoftLightPremul), + new(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedDifferencePremul), + new(AdvancedBlendOp.Minus, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedMinusPremul), + new(AdvancedBlendOp.MinusClamped, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedMinusClampedPremul), + new(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedExclusionPremul), + new(AdvancedBlendOp.Contrast, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedContrastPremul), + new(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedInvertPremul), + new(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedInvertRGBPremul), + new(AdvancedBlendOp.InvertOvg, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedInvertOvgPremul), + new(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedLinearDodgePremul), + new(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedLinearBurnPremul), + new(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedVividLightPremul), + new(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedLinearLightPremul), + new(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPinLightPremul), + new(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHardMixPremul), + new(AdvancedBlendOp.Red, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedRedPremul), + new(AdvancedBlendOp.Green, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedGreenPremul), + new(AdvancedBlendOp.Blue, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedBluePremul), + new(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHslHuePremul), + new(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHslSaturationPremul), + new(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHslColorPremul), + new(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedHslLuminosityPremul), + new(AdvancedBlendOp.Src, AdvancedBlendOverlap.Disjoint, true, GenDisjointSrcPremul), + new(AdvancedBlendOp.Dst, AdvancedBlendOverlap.Disjoint, true, GenDisjointDstPremul), + new(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Disjoint, true, GenDisjointSrcOverPremul), + new(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Disjoint, true, GenDisjointDstOverPremul), + new(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Disjoint, true, GenDisjointSrcInPremul), + new(AdvancedBlendOp.DstIn, AdvancedBlendOverlap.Disjoint, true, GenDisjointDstInPremul), + new(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Disjoint, true, GenDisjointSrcOutPremul), + new(AdvancedBlendOp.DstOut, AdvancedBlendOverlap.Disjoint, true, GenDisjointDstOutPremul), + new(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Disjoint, true, GenDisjointSrcAtopPremul), + new(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Disjoint, true, GenDisjointDstAtopPremul), + new(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Disjoint, true, GenDisjointXorPremul), + new(AdvancedBlendOp.Plus, AdvancedBlendOverlap.Disjoint, true, GenDisjointPlusPremul), + new(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Disjoint, true, GenDisjointMultiplyPremul), + new(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Disjoint, true, GenDisjointScreenPremul), + new(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Disjoint, true, GenDisjointOverlayPremul), + new(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Disjoint, true, GenDisjointDarkenPremul), + new(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Disjoint, true, GenDisjointLightenPremul), + new(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Disjoint, true, GenDisjointColorDodgePremul), + new(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Disjoint, true, GenDisjointColorBurnPremul), + new(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Disjoint, true, GenDisjointHardLightPremul), + new(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Disjoint, true, GenDisjointSoftLightPremul), + new(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Disjoint, true, GenDisjointDifferencePremul), + new(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Disjoint, true, GenDisjointExclusionPremul), + new(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Disjoint, true, GenDisjointInvertPremul), + new(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Disjoint, true, GenDisjointInvertRGBPremul), + new(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Disjoint, true, GenDisjointLinearDodgePremul), + new(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Disjoint, true, GenDisjointLinearBurnPremul), + new(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Disjoint, true, GenDisjointVividLightPremul), + new(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Disjoint, true, GenDisjointLinearLightPremul), + new(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Disjoint, true, GenDisjointPinLightPremul), + new(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Disjoint, true, GenDisjointHardMixPremul), + new(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Disjoint, true, GenDisjointHslHuePremul), + new(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Disjoint, true, GenDisjointHslSaturationPremul), + new(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Disjoint, true, GenDisjointHslColorPremul), + new(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Disjoint, true, GenDisjointHslLuminosityPremul), + new(AdvancedBlendOp.Src, AdvancedBlendOverlap.Conjoint, true, GenConjointSrcPremul), + new(AdvancedBlendOp.Dst, AdvancedBlendOverlap.Conjoint, true, GenConjointDstPremul), + new(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Conjoint, true, GenConjointSrcOverPremul), + new(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Conjoint, true, GenConjointDstOverPremul), + new(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Conjoint, true, GenConjointSrcInPremul), + new(AdvancedBlendOp.DstIn, AdvancedBlendOverlap.Conjoint, true, GenConjointDstInPremul), + new(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Conjoint, true, GenConjointSrcOutPremul), + new(AdvancedBlendOp.DstOut, AdvancedBlendOverlap.Conjoint, true, GenConjointDstOutPremul), + new(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Conjoint, true, GenConjointSrcAtopPremul), + new(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Conjoint, true, GenConjointDstAtopPremul), + new(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Conjoint, true, GenConjointXorPremul), + new(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Conjoint, true, GenConjointMultiplyPremul), + new(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Conjoint, true, GenConjointScreenPremul), + new(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Conjoint, true, GenConjointOverlayPremul), + new(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Conjoint, true, GenConjointDarkenPremul), + new(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Conjoint, true, GenConjointLightenPremul), + new(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Conjoint, true, GenConjointColorDodgePremul), + new(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Conjoint, true, GenConjointColorBurnPremul), + new(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Conjoint, true, GenConjointHardLightPremul), + new(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Conjoint, true, GenConjointSoftLightPremul), + new(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Conjoint, true, GenConjointDifferencePremul), + new(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Conjoint, true, GenConjointExclusionPremul), + new(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Conjoint, true, GenConjointInvertPremul), + new(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Conjoint, true, GenConjointInvertRGBPremul), + new(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Conjoint, true, GenConjointLinearDodgePremul), + new(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Conjoint, true, GenConjointLinearBurnPremul), + new(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Conjoint, true, GenConjointVividLightPremul), + new(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Conjoint, true, GenConjointLinearLightPremul), + new(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Conjoint, true, GenConjointPinLightPremul), + new(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Conjoint, true, GenConjointHardMixPremul), + new(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Conjoint, true, GenConjointHslHuePremul), + new(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Conjoint, true, GenConjointHslSaturationPremul), + new(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Conjoint, true, GenConjointHslColorPremul), + new(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Conjoint, true, GenConjointHslLuminosityPremul), + new(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedDstOver), + new(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedSrcIn), + new(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedSrcOut), + new(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedSrcAtop), + new(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedDstAtop), + new(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedXor), + new(AdvancedBlendOp.PlusClamped, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedPlusClamped), + new(AdvancedBlendOp.PlusClampedAlpha, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedPlusClampedAlpha), + new(AdvancedBlendOp.PlusDarker, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedPlusDarker), + new(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedMultiply), + new(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedScreen), + new(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedOverlay), + new(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedDarken), + new(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedLighten), + new(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedColorDodge), + new(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedColorBurn), + new(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHardLight), + new(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedSoftLight), + new(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedDifference), + new(AdvancedBlendOp.Minus, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedMinus), + new(AdvancedBlendOp.MinusClamped, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedMinusClamped), + new(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedExclusion), + new(AdvancedBlendOp.Contrast, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedContrast), + new(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedInvertRGB), + new(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedLinearDodge), + new(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedLinearBurn), + new(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedVividLight), + new(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedLinearLight), + new(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedPinLight), + new(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHardMix), + new(AdvancedBlendOp.Red, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedRed), + new(AdvancedBlendOp.Green, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedGreen), + new(AdvancedBlendOp.Blue, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedBlue), + new(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHslHue), + new(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHslSaturation), + new(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHslColor), + new(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Uncorrelated, false, GenUncorrelatedHslLuminosity), + new(AdvancedBlendOp.Src, AdvancedBlendOverlap.Disjoint, false, GenDisjointSrc), + new(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Disjoint, false, GenDisjointSrcOver), + new(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Disjoint, false, GenDisjointDstOver), + new(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Disjoint, false, GenDisjointSrcIn), + new(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Disjoint, false, GenDisjointSrcOut), + new(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Disjoint, false, GenDisjointSrcAtop), + new(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Disjoint, false, GenDisjointDstAtop), + new(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Disjoint, false, GenDisjointXor), + new(AdvancedBlendOp.Plus, AdvancedBlendOverlap.Disjoint, false, GenDisjointPlus), + new(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Disjoint, false, GenDisjointMultiply), + new(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Disjoint, false, GenDisjointScreen), + new(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Disjoint, false, GenDisjointOverlay), + new(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Disjoint, false, GenDisjointDarken), + new(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Disjoint, false, GenDisjointLighten), + new(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Disjoint, false, GenDisjointColorDodge), + new(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Disjoint, false, GenDisjointColorBurn), + new(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Disjoint, false, GenDisjointHardLight), + new(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Disjoint, false, GenDisjointSoftLight), + new(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Disjoint, false, GenDisjointDifference), + new(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Disjoint, false, GenDisjointExclusion), + new(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Disjoint, false, GenDisjointInvertRGB), + new(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Disjoint, false, GenDisjointLinearDodge), + new(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Disjoint, false, GenDisjointLinearBurn), + new(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Disjoint, false, GenDisjointVividLight), + new(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Disjoint, false, GenDisjointLinearLight), + new(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Disjoint, false, GenDisjointPinLight), + new(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Disjoint, false, GenDisjointHardMix), + new(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Disjoint, false, GenDisjointHslHue), + new(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Disjoint, false, GenDisjointHslSaturation), + new(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Disjoint, false, GenDisjointHslColor), + new(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Disjoint, false, GenDisjointHslLuminosity), + new(AdvancedBlendOp.Src, AdvancedBlendOverlap.Conjoint, false, GenConjointSrc), + new(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Conjoint, false, GenConjointSrcOver), + new(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Conjoint, false, GenConjointDstOver), + new(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Conjoint, false, GenConjointSrcIn), + new(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Conjoint, false, GenConjointSrcOut), + new(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Conjoint, false, GenConjointSrcAtop), + new(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Conjoint, false, GenConjointDstAtop), + new(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Conjoint, false, GenConjointXor), + new(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Conjoint, false, GenConjointMultiply), + new(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Conjoint, false, GenConjointScreen), + new(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Conjoint, false, GenConjointOverlay), + new(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Conjoint, false, GenConjointDarken), + new(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Conjoint, false, GenConjointLighten), + new(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Conjoint, false, GenConjointColorDodge), + new(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Conjoint, false, GenConjointColorBurn), + new(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Conjoint, false, GenConjointHardLight), + new(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Conjoint, false, GenConjointSoftLight), + new(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Conjoint, false, GenConjointDifference), + new(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Conjoint, false, GenConjointExclusion), + new(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Conjoint, false, GenConjointInvertRGB), + new(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Conjoint, false, GenConjointLinearDodge), + new(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Conjoint, false, GenConjointLinearBurn), + new(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Conjoint, false, GenConjointVividLight), + new(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Conjoint, false, GenConjointLinearLight), + new(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Conjoint, false, GenConjointPinLight), + new(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Conjoint, false, GenConjointHardMix), + new(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Conjoint, false, GenConjointHslHue), + new(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Conjoint, false, GenConjointHslSaturation), + new(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Conjoint, false, GenConjointHslColor), + new(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Conjoint, false, GenConjointHslLuminosity), }; public static string GenTable() diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdateTracker.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdateTracker.cs index 4f9e57f76..d1a1cc35c 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdateTracker.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdateTracker.cs @@ -59,7 +59,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed _registerToGroupMapping = new byte[BlockSize]; _callbacks = new Action[entries.Length]; - Dictionary fieldToDelegate = new Dictionary(); + Dictionary fieldToDelegate = new(); for (int entryIndex = 0; entryIndex < entries.Length; entryIndex++) { diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs index d8e53124b..c77f1b896 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs @@ -740,7 +740,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed ref ScreenScissorState scissor = ref _state.State.ScreenScissorState; float rScale = _channel.TextureManager.RenderTargetScale; - Rectangle scissorRect = new Rectangle(0, 0, (scissor.X + scissor.Width) * rScale, (scissor.Y + scissor.Height) * rScale); + Rectangle scissorRect = new(0, 0, (scissor.X + scissor.Width) * rScale, (scissor.Y + scissor.Height) * rScale); viewports[index] = new Viewport(scissorRect, ViewportSwizzle.PositiveX, ViewportSwizzle.PositiveY, ViewportSwizzle.PositiveZ, ViewportSwizzle.PositiveW, 0, 1); continue; @@ -1281,7 +1281,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed bool enable = _state.State.BlendEnable[index]; BlendState blend = _state.State.BlendState[index]; - BlendDescriptor descriptor = new BlendDescriptor( + BlendDescriptor descriptor = new( enable, blendConstant, blend.ColorOp, @@ -1309,7 +1309,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed bool enable = _state.State.BlendEnable[0]; BlendStateCommon blend = _state.State.BlendStateCommon; - BlendDescriptor descriptor = new BlendDescriptor( + BlendDescriptor descriptor = new( enable, blendConstant, blend.ColorOp, diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs index 618743018..a96979cb2 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ThreedClass.cs @@ -82,8 +82,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed _i2mClass = new InlineToMemoryClass(context, channel, initializeState: false); - SpecializationStateUpdater spec = new SpecializationStateUpdater(context); - DrawState drawState = new DrawState(); + SpecializationStateUpdater spec = new(context); + DrawState drawState = new(); _drawManager = new DrawManager(context, channel, _state, drawState, spec); _blendManager = new AdvancedBlendManager(_state); diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Twod/TwodClass.cs b/src/Ryujinx.Graphics.Gpu/Engine/Twod/TwodClass.cs index 60a558d56..5ab58d7d1 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Twod/TwodClass.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Twod/TwodClass.cs @@ -124,7 +124,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod /// Bytes per pixel private void UnscaledFullCopy(TwodTexture src, TwodTexture dst, int w, int h, int bpp) { - OffsetCalculator srcCalculator = new OffsetCalculator( + OffsetCalculator srcCalculator = new( w, h, src.Stride, @@ -269,8 +269,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod // The source and destination textures should at least be as big as the region being requested. // The hints will only resize within alignment constraints, so out of bound copies won't resize in most cases. - Size srcHint = new Size(srcX2, srcY2, 1); - Size dstHint = new Size(dstX2, dstY2, 1); + Size srcHint = new(srcX2, srcY2, 1); + Size dstHint = new(dstX2, dstY2, 1); FormatInfo srcCopyTextureFormat = srcCopyTexture.Format.Convert(); diff --git a/src/Ryujinx.Graphics.Gpu/GpuContext.cs b/src/Ryujinx.Graphics.Gpu/GpuContext.cs index fa877cf8a..2833d836c 100644 --- a/src/Ryujinx.Graphics.Gpu/GpuContext.cs +++ b/src/Ryujinx.Graphics.Gpu/GpuContext.cs @@ -199,7 +199,7 @@ namespace Ryujinx.Graphics.Gpu /// Thrown if was already registered public void RegisterProcess(ulong pid, Cpu.IVirtualMemoryManagerTracked cpuMemory) { - PhysicalMemory physicalMemory = new PhysicalMemory(this, cpuMemory); + PhysicalMemory physicalMemory = new(this, cpuMemory); if (!PhysicalMemoryRegistry.TryAdd(pid, physicalMemory)) { throw new ArgumentException("The PID was already registered", nameof(pid)); diff --git a/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs b/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs index b1a416e23..bd77e3c8c 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs @@ -277,7 +277,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// Last used texture descriptor public void AddShortCache(Texture texture, ref TextureDescriptor descriptor) { - ShortTextureCacheEntry entry = new ShortTextureCacheEntry(descriptor, texture); + ShortTextureCacheEntry entry = new(descriptor, texture); _shortCacheBuilder.Add(entry); _shortCacheLookup.Add(entry.Descriptor, entry); @@ -296,7 +296,7 @@ namespace Ryujinx.Graphics.Gpu.Image { if (texture.ShortCacheEntry != null) { - ShortTextureCacheEntry entry = new ShortTextureCacheEntry(texture); + ShortTextureCacheEntry entry = new(texture); _shortCacheBuilder.Add(entry); diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsArrayCache.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsArrayCache.cs index 72bac75e5..88c87979c 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsArrayCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsArrayCache.cs @@ -992,7 +992,7 @@ namespace Ryujinx.Graphics.Gpu.Image bool isImage, out bool isNew) { - CacheEntryFromPoolKey key = new CacheEntryFromPoolKey(isImage, bindingInfo, texturePool, samplerPool); + CacheEntryFromPoolKey key = new(isImage, bindingInfo, texturePool, samplerPool); isNew = !_cacheFromPool.TryGetValue(key, out CacheEntry entry); @@ -1035,7 +1035,7 @@ namespace Ryujinx.Graphics.Gpu.Image ref BufferBounds textureBufferBounds, out bool isNew) { - CacheEntryFromBufferKey key = new CacheEntryFromBufferKey( + CacheEntryFromBufferKey key = new( isImage, bindingInfo, texturePool, diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs index 71de06e2c..754bfead8 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs @@ -947,7 +947,7 @@ namespace Ryujinx.Graphics.Gpu.Image bool hasLayerViews = false; bool hasMipViews = false; - List incompatibleOverlaps = new List(); + List incompatibleOverlaps = new(); for (int index = 0; index < overlapsCount; index++) { diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs index 47a66747b..00e4ac027 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs @@ -1019,7 +1019,7 @@ namespace Ryujinx.Graphics.Gpu.Image int endOffset = _allOffsets[viewEnd] + _sliceSizes[lastLevel]; int size = endOffset - offset; - List result = new List(); + List result = new(); for (int i = 0; i < TextureRange.Count; i++) { @@ -1053,7 +1053,7 @@ namespace Ryujinx.Graphics.Gpu.Image offset = _allOffsets[viewStart]; ulong maxSize = Storage.Size - (ulong)offset; - TextureGroupHandle groupHandle = new TextureGroupHandle( + TextureGroupHandle groupHandle = new( this, offset, Math.Min(maxSize, (ulong)size), @@ -1337,7 +1337,7 @@ namespace Ryujinx.Graphics.Gpu.Image Array.Resize(ref cpuRegionHandles, count); } - TextureGroupHandle groupHandle = new TextureGroupHandle(this, 0, Storage.Size, _views, 0, 0, 0, _allOffsets.Length, cpuRegionHandles); + TextureGroupHandle groupHandle = new(this, 0, Storage.Size, _views, 0, 0, 0, _allOffsets.Length, cpuRegionHandles); handles = new TextureGroupHandle[] { groupHandle }; } @@ -1355,7 +1355,7 @@ namespace Ryujinx.Graphics.Gpu.Image if (_is3D) { - List handlesList = new List(); + List handlesList = new(); for (int i = 0; i < levelHandles; i++) { @@ -1438,8 +1438,8 @@ namespace Ryujinx.Graphics.Gpu.Image // Get the location of each texture within its storage, so we can find the handles to apply the dependency to. // This can consist of multiple disjoint regions, for example if this is a mip slice of an array texture. - List<(int BaseHandle, int RegionCount)> targetRange = new List<(int BaseHandle, int RegionCount)>(); - List<(int BaseHandle, int RegionCount)> otherRange = new List<(int BaseHandle, int RegionCount)>(); + List<(int BaseHandle, int RegionCount)> targetRange = new(); + List<(int BaseHandle, int RegionCount)> otherRange = new(); EvaluateRelevantHandles(firstLayer, firstLevel, other.Info.GetSlices(), other.Info.Levels, (baseHandle, regionCount, split) => targetRange.Add((baseHandle, regionCount))); otherGroup.EvaluateRelevantHandles(other, (baseHandle, regionCount, split) => otherRange.Add((baseHandle, regionCount))); diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs index 2368da90f..e75495385 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs @@ -663,7 +663,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// Total of overlaps private void CreateBufferAligned(ulong address, ulong size, BufferStage stage, bool sparseCompatible, Buffer[] overlaps, int overlapsCount) { - Buffer newBuffer = new Buffer(_context, _physicalMemory, address, size, stage, sparseCompatible, overlaps.Take(overlapsCount)); + Buffer newBuffer = new(_context, _physicalMemory, address, size, stage, sparseCompatible, overlaps.Take(overlapsCount)); lock (_buffers) { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs index 105082f31..a800f7000 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs @@ -431,7 +431,7 @@ namespace Ryujinx.Graphics.Gpu.Memory BufferMigration oldMigration = ranges._source; - BufferMigrationSpan span = new BufferMigrationSpan(ranges._parent, ranges._flushAction, oldMigration); + BufferMigrationSpan span = new(ranges._parent, ranges._flushAction, oldMigration); ranges._parent.IncrementReferenceCount(); if (_source == null) diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs index a5ee3ab70..30a6fafbf 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs @@ -73,7 +73,7 @@ namespace Ryujinx.Graphics.Gpu.Memory if (binding >= 0) { - BufferRange range = new BufferRange(_handle, 0, data.Length); + BufferRange range = new(_handle, 0, data.Length); _renderer.Pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, range) }); } }; diff --git a/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs b/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs index 5ee5ce456..f080f0e35 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs @@ -458,7 +458,7 @@ namespace Ryujinx.Graphics.Gpu.Memory int pages = (int)((endVaRounded - va) / PageSize); - List regions = new List(); + List regions = new(); for (int page = 0; page < pages - 1; page++) { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs b/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs index 20831fa99..beaad0579 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/SupportBufferUpdater.cs @@ -19,7 +19,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// Renderer that the support buffer will be used with public SupportBufferUpdater(IRenderer renderer) : base(renderer) { - Vector4 defaultScale = new Vector4 { X = 1f, Y = 0f, Z = 0f, W = 0f }; + Vector4 defaultScale = new() { X = 1f, Y = 0f, Z = 0f, W = 0f }; _data.RenderScale.AsSpan().Fill(defaultScale); DirtyRenderScale(0, SupportBuffer.RenderScaleMaxCount); } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs b/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs index a4bcbc6f5..5eebf85ad 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs @@ -60,7 +60,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { Target target = descriptor.Type != SamplerType.None ? ShaderTexture.GetTarget(descriptor.Type) : default; - TextureBindingInfo result = new TextureBindingInfo( + TextureBindingInfo result = new( target, descriptor.Set, descriptor.Binding, @@ -88,7 +88,7 @@ namespace Ryujinx.Graphics.Gpu.Shader Target target = ShaderTexture.GetTarget(descriptor.Type); FormatInfo formatInfo = ShaderTexture.GetFormatInfo(descriptor.Format); - TextureBindingInfo result = new TextureBindingInfo( + TextureBindingInfo result = new( target, formatInfo, descriptor.Set, -- 2.47.1 From 5fad45002727425d2dca3ccb311eac28ada02289 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:19:01 -0600 Subject: [PATCH 454/722] misc: chore: Fix object creation in Tests project --- .../SequenceReaderExtensionsTests.cs | 28 +++++++++---------- src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs | 4 +-- src/Ryujinx.Tests/Memory/PartialUnmaps.cs | 22 +++++++-------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs b/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs index de81ec303..5aa088e78 100644 --- a/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs +++ b/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs @@ -23,7 +23,7 @@ namespace Ryujinx.Tests.Common.Extensions ReadOnlySequence sequence = CreateSegmentedByteSequence(originalStructs, maxSegmentSize ?? Unsafe.SizeOf()); - SequenceReader sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new(sequence); foreach (MyUnmanagedStruct original in originalStructs) { @@ -43,7 +43,7 @@ namespace Ryujinx.Tests.Common.Extensions ReadOnlySequence sequence = CreateSegmentedByteSequence(originalStructs, 3); - SequenceReader sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new(sequence); foreach (MyUnmanagedStruct original in originalStructs) { @@ -64,7 +64,7 @@ namespace Ryujinx.Tests.Common.Extensions ReadOnlySequence sequence = CreateSegmentedByteSequence(originalStructs, int.MaxValue); - SequenceReader sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new(sequence); foreach (MyUnmanagedStruct original in originalStructs) { @@ -88,7 +88,7 @@ namespace Ryujinx.Tests.Common.Extensions // Act/Assert Assert.Throws(() => { - SequenceReader sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new(sequence); sequenceReader.Advance(1); @@ -106,7 +106,7 @@ namespace Ryujinx.Tests.Common.Extensions BinaryPrimitives.WriteInt32LittleEndian(buffer.AsSpan(), TestValue); - SequenceReader sequenceReader = new SequenceReader(new ReadOnlySequence(buffer)); + SequenceReader sequenceReader = new(new ReadOnlySequence(buffer)); // Act sequenceReader.ReadLittleEndian(out int roundTrippedValue); @@ -125,7 +125,7 @@ namespace Ryujinx.Tests.Common.Extensions BinaryPrimitives.WriteInt32BigEndian(buffer.AsSpan(), TestValue); - SequenceReader sequenceReader = new SequenceReader(new ReadOnlySequence(buffer)); + SequenceReader sequenceReader = new(new ReadOnlySequence(buffer)); // Act sequenceReader.ReadLittleEndian(out int roundTrippedValue); @@ -147,7 +147,7 @@ namespace Ryujinx.Tests.Common.Extensions // Act/Assert Assert.Throws(() => { - SequenceReader sequenceReader = new SequenceReader(new ReadOnlySequence(buffer)); + SequenceReader sequenceReader = new(new ReadOnlySequence(buffer)); sequenceReader.Advance(1); sequenceReader.ReadLittleEndian(out int roundTrippedValue); @@ -173,7 +173,7 @@ namespace Ryujinx.Tests.Common.Extensions // Act/Assert Assert.Throws(() => { - SequenceReader sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new(sequence); sequenceReader.Advance(1); @@ -200,7 +200,7 @@ namespace Ryujinx.Tests.Common.Extensions Assert.Throws(() => { - SequenceReader sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new(sequence); sequenceReader.SetConsumed(MyUnmanagedStruct.SizeOf * StructCount + 1); }); @@ -213,7 +213,7 @@ namespace Ryujinx.Tests.Common.Extensions ReadOnlySequence sequence = CreateSegmentedByteSequence(originalStructs, maxSegmentLength); - SequenceReader sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new(sequence); foreach (MyUnmanagedStruct original in originalStructs) { @@ -232,7 +232,7 @@ namespace Ryujinx.Tests.Common.Extensions ReadOnlySequence sequence = CreateSegmentedByteSequence(originalStructs, maxSegmentLength); - SequenceReader sequenceReader = new SequenceReader(sequence); + SequenceReader sequenceReader = new(sequence); static void SetConsumedAndAssert(scoped ref SequenceReader sequenceReader, long consumed) { @@ -283,7 +283,7 @@ namespace Ryujinx.Tests.Common.Extensions const int BaseInt32Value = 0x1234abcd; const short BaseInt16Value = 0x5678; - MyUnmanagedStruct result = new MyUnmanagedStruct + MyUnmanagedStruct result = new() { BehaviourSize = BaseInt32Value ^ rng.Next(), MemoryPoolsSize = BaseInt32Value ^ rng.Next(), @@ -320,7 +320,7 @@ namespace Ryujinx.Tests.Common.Extensions private static IEnumerable EnumerateNewUnmanagedStructs() { - Random rng = new Random(0); + Random rng = new(0); while (true) { @@ -331,7 +331,7 @@ namespace Ryujinx.Tests.Common.Extensions private static ReadOnlySequence CreateSegmentedByteSequence(T[] array, int maxSegmentLength) where T : unmanaged { byte[] arrayBytes = MemoryMarshal.AsBytes(array.AsSpan()).ToArray(); - Memory memory = new Memory(arrayBytes); + Memory memory = new(arrayBytes); int index = 0; BytesReadOnlySequenceSegment first = null, last = null; diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs index 8768d6bd6..715bd404a 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs @@ -465,7 +465,7 @@ namespace Ryujinx.Tests.Cpu opcode |= (fixImm & 0x3f) << 16; - V128 v0 = new V128((uint)s0, (uint)s1, (uint)s2, (uint)s3); + V128 v0 = new((uint)s0, (uint)s1, (uint)s2, (uint)s3); SingleOpcode(opcode, v0: v0); @@ -505,7 +505,7 @@ namespace Ryujinx.Tests.Cpu opcode |= (fixImm & 0x3f) << 16; - V128 v0 = new V128(s0, s1, s2, s3); + V128 v0 = new(s0, s1, s2, s3); SingleOpcode(opcode, v0: v0); diff --git a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs index d120a39e1..b197dee20 100644 --- a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs +++ b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs @@ -27,11 +27,11 @@ namespace Ryujinx.Tests.Memory { MemoryAllocationFlags asFlags = MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible; - MemoryBlock addressSpace = new MemoryBlock(asSize, asFlags); - MemoryBlock addressSpaceMirror = new MemoryBlock(asSize, asFlags); + MemoryBlock addressSpace = new(asSize, asFlags); + MemoryBlock addressSpaceMirror = new(asSize, asFlags); - MemoryTracking tracking = new MemoryTracking(new MockVirtualMemoryManager(asSize, 0x1000), 0x1000); - MemoryEhMeilleure exceptionHandler = new MemoryEhMeilleure(addressSpace, addressSpaceMirror, tracking); + MemoryTracking tracking = new(new MockVirtualMemoryManager(asSize, 0x1000), 0x1000); + MemoryEhMeilleure exceptionHandler = new(addressSpace, addressSpaceMirror, tracking); return (addressSpace, addressSpaceMirror, exceptionHandler); } @@ -72,7 +72,7 @@ namespace Ryujinx.Tests.Memory ulong vaSize = 0x100000; // The first 0x100000 is mapped to start. It is replaced from the center with the 0x200000 mapping. - MemoryBlock backing = new MemoryBlock(vaSize * 2, MemoryAllocationFlags.Mirrorable); + MemoryBlock backing = new(vaSize * 2, MemoryAllocationFlags.Mirrorable); (MemoryBlock unusedMainMemory, MemoryBlock memory, MemoryEhMeilleure exceptionHandler) = GetVirtual(vaSize * 2); @@ -217,7 +217,7 @@ namespace Ryujinx.Tests.Memory ulong vaSize = 0x100000; // The first 0x100000 is mapped to start. It is replaced from the center with the 0x200000 mapping. - MemoryBlock backing = new MemoryBlock(vaSize * 2, MemoryAllocationFlags.Mirrorable); + MemoryBlock backing = new(vaSize * 2, MemoryAllocationFlags.Mirrorable); (MemoryBlock mainMemory, MemoryBlock unusedMirror, MemoryEhMeilleure exceptionHandler) = GetVirtual(vaSize * 2); @@ -296,7 +296,7 @@ namespace Ryujinx.Tests.Memory ref PartialUnmapState state = ref PartialUnmapState.GetRef(); bool running = true; - Thread testThread = new Thread(() => + Thread testThread = new(() => { PartialUnmapState.GetRef().RetryFromAccessViolation(); while (running) @@ -376,8 +376,8 @@ namespace Ryujinx.Tests.Memory [Test] public void NativeReaderWriterLock() { - NativeReaderWriterLock rwLock = new NativeReaderWriterLock(); - List threads = new List(); + NativeReaderWriterLock rwLock = new(); + List threads = new(); int value = 0; @@ -387,7 +387,7 @@ namespace Ryujinx.Tests.Memory for (int i = 0; i < 5; i++) { - Thread readThread = new Thread(() => + Thread readThread = new(() => { int count = 0; while (running) @@ -424,7 +424,7 @@ namespace Ryujinx.Tests.Memory for (int i = 0; i < 2; i++) { - Thread writeThread = new Thread(() => + Thread writeThread = new(() => { int count = 0; while (running) -- 2.47.1 From 742083ae3d3f5d27e9a106e39ea8951bf82f4f73 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:19:33 -0600 Subject: [PATCH 455/722] misc: chore: Fix object creation in Horizon --- src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator.cs | 4 ++-- .../Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs | 4 ++-- src/Ryujinx.Horizon/HeapAllocator.cs | 4 ++-- src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRenderer.cs | 2 +- src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRendererManager.cs | 4 ++-- src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs | 2 +- .../Sdk/Sf/Cmif/DomainServiceObjectDispatchTable.cs | 2 +- src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs | 2 +- src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerSessionManager.cs | 4 ++-- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator.cs index 6984d69c4..35967d274 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator.cs @@ -39,7 +39,7 @@ namespace Ryujinx.Horizon.Bcat.Ipc [CmifCommand(1)] public Result CreateDeliveryCacheStorageService(out IDeliveryCacheStorageService service, [ClientProcessId] ulong pid) { - using SharedRef libHacService = new SharedRef(); + using SharedRef libHacService = new(); LibHac.Result resultCode = _libHacService.Get.CreateDeliveryCacheStorageService(ref libHacService.Ref, pid); @@ -58,7 +58,7 @@ namespace Ryujinx.Horizon.Bcat.Ipc [CmifCommand(2)] public Result CreateDeliveryCacheStorageServiceWithApplicationId(out IDeliveryCacheStorageService service, ApplicationId applicationId) { - using SharedRef libHacService = new SharedRef(); + using SharedRef libHacService = new(); LibHac.Result resultCode = _libHacService.Get.CreateDeliveryCacheStorageServiceWithApplicationId(ref libHacService.Ref, new LibHac.ApplicationId(applicationId.Id)); diff --git a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs index 4142c14f8..356156fc1 100644 --- a/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs +++ b/src/Ryujinx.Horizon/Bcat/Ipc/ServiceCreator/DeliveryCacheStorageService.cs @@ -22,7 +22,7 @@ namespace Ryujinx.Horizon.Bcat.Ipc [CmifCommand(0)] public Result CreateFileService(out IDeliveryCacheFileService service) { - using SharedRef libHacService = new SharedRef(); + using SharedRef libHacService = new(); LibHac.Result resultCode = _libHacService.Get.CreateFileService(ref libHacService.Ref); @@ -41,7 +41,7 @@ namespace Ryujinx.Horizon.Bcat.Ipc [CmifCommand(1)] public Result CreateDirectoryService(out IDeliveryCacheDirectoryService service) { - using SharedRef libHacService = new SharedRef(); + using SharedRef libHacService = new(); LibHac.Result resultCode = _libHacService.Get.CreateDirectoryService(ref libHacService.Ref); diff --git a/src/Ryujinx.Horizon/HeapAllocator.cs b/src/Ryujinx.Horizon/HeapAllocator.cs index 838e505d3..764f00a2f 100644 --- a/src/Ryujinx.Horizon/HeapAllocator.cs +++ b/src/Ryujinx.Horizon/HeapAllocator.cs @@ -103,7 +103,7 @@ namespace Ryujinx.Horizon private void InsertFreeRange(ulong offset, ulong size) { - Range range = new Range(offset, size); + Range range = new(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { @@ -116,7 +116,7 @@ namespace Ryujinx.Horizon private void InsertFreeRangeComingled(ulong offset, ulong size) { ulong endOffset = offset + size; - Range range = new Range(offset, size); + Range range = new(offset, size); int index = _freeRanges.BinarySearch(range); if (index < 0) { diff --git a/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRenderer.cs b/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRenderer.cs index 4d446bba7..168d58619 100644 --- a/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRenderer.cs +++ b/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRenderer.cs @@ -64,7 +64,7 @@ namespace Ryujinx.Horizon.Sdk.Audio.Detail using MemoryHandle outputHandle = output.Pin(); using MemoryHandle performanceOutputHandle = performanceOutput.Pin(); - Result result = new Result((int)_renderSystem.Update(output, performanceOutput, input)); + Result result = new((int)_renderSystem.Update(output, performanceOutput, input)); return result; } diff --git a/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRendererManager.cs b/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRendererManager.cs index c1c7453a1..40cbecc40 100644 --- a/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRendererManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Audio/Detail/AudioRendererManager.cs @@ -34,7 +34,7 @@ namespace Ryujinx.Horizon.Sdk.Audio.Detail IVirtualMemoryManager clientMemoryManager = HorizonStatic.Syscall.GetMemoryManagerByProcessHandle(processHandle); ulong workBufferAddress = HorizonStatic.Syscall.GetTransferMemoryAddress(workBufferHandle); - Result result = new Result((int)_impl.OpenAudioRenderer( + Result result = new((int)_impl.OpenAudioRenderer( out AudioRenderSystem renderSystem, clientMemoryManager, ref parameter.Configuration, @@ -99,7 +99,7 @@ namespace Ryujinx.Horizon.Sdk.Audio.Detail { IVirtualMemoryManager clientMemoryManager = HorizonStatic.Syscall.GetMemoryManagerByProcessHandle(processHandle); - Result result = new Result((int)_impl.OpenAudioRenderer( + Result result = new((int)_impl.OpenAudioRenderer( out AudioRenderSystem renderSystem, clientMemoryManager, ref parameter.Configuration, diff --git a/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs b/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs index ef42d777f..e55dd75be 100644 --- a/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs +++ b/src/Ryujinx.Horizon/Sdk/Lbl/LblApi.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Horizon.Sdk.Lbl public LblApi() { - using SmApi smApi = new SmApi(); + using SmApi smApi = new(); smApi.Initialize(); smApi.GetServiceHandle(out _sessionHandle, ServiceName.Encode(LblName)).AbortOnFailure(); diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectDispatchTable.cs b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectDispatchTable.cs index 1a14164c3..2e7879f2d 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectDispatchTable.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/DomainServiceObjectDispatchTable.cs @@ -48,7 +48,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif int[] inObjectIds = new int[inHeader.ObjectsCount]; - DomainServiceObjectProcessor domainProcessor = new DomainServiceObjectProcessor(domain, inObjectIds); + DomainServiceObjectProcessor domainProcessor = new(domain, inObjectIds); if (context.Processor == null) { diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs index ae909c9b7..631f2360a 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs @@ -230,7 +230,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif return null; } - Domain domain = new Domain(this); + Domain domain = new(this); _domains.Add(domain); return domain; } diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerSessionManager.cs b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerSessionManager.cs index f902768cc..f51e0811e 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerSessionManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerSessionManager.cs @@ -186,7 +186,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc { CommandType commandType = GetCmifCommandType(inMessage); - using ScopedInlineContextChange _ = new ScopedInlineContextChange(GetInlineContext(commandType, inMessage)); + using ScopedInlineContextChange _ = new(GetInlineContext(commandType, inMessage)); return commandType switch { @@ -282,7 +282,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc return HipcResult.InvalidRequestSize; } - ServiceDispatchContext dispatchCtx = new ServiceDispatchContext + ServiceDispatchContext dispatchCtx = new() { ServiceObject = objectHolder.ServiceObject, Manager = this, -- 2.47.1 From 56d373a0115c2a2c00a7c8a8d0144f34aa844be8 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:19:53 -0600 Subject: [PATCH 456/722] misc: chore: Fix object creation in SPIRV generator --- src/Spv.Generator/Module.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Spv.Generator/Module.cs b/src/Spv.Generator/Module.cs index 5945d9b6d..951494619 100644 --- a/src/Spv.Generator/Module.cs +++ b/src/Spv.Generator/Module.cs @@ -93,7 +93,7 @@ namespace Spv.Generator public Instruction AddExtInstImport(string import) { - DeterministicStringKey key = new DeterministicStringKey(import); + DeterministicStringKey key = new(import); if (_extInstImports.TryGetValue(key, out Instruction extInstImport)) { @@ -113,7 +113,7 @@ namespace Spv.Generator private void AddTypeDeclaration(Instruction instruction, bool forceIdAllocation) { - TypeDeclarationKey key = new TypeDeclarationKey(instruction); + TypeDeclarationKey key = new(instruction); if (!forceIdAllocation) { @@ -214,7 +214,7 @@ namespace Spv.Generator constant.Opcode == Op.OpConstantNull || constant.Opcode == Op.OpConstantComposite); - ConstantKey key = new ConstantKey(constant); + ConstantKey key = new(constant); if (_constants.TryGetValue(key, out Instruction global)) { -- 2.47.1 From ae92fbf539ab4c04cc0573d33e1e949c448a0147 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:20:28 -0600 Subject: [PATCH 457/722] misc: chore: Fix object creation in Memory project --- src/Ryujinx.Memory/AddressSpaceManager.cs | 3 +-- src/Ryujinx.Memory/BytesReadOnlySequenceSegment.cs | 2 +- src/Ryujinx.Memory/Range/MultiRangeList.cs | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx.Memory/AddressSpaceManager.cs b/src/Ryujinx.Memory/AddressSpaceManager.cs index 76c679d41..150e538fe 100644 --- a/src/Ryujinx.Memory/AddressSpaceManager.cs +++ b/src/Ryujinx.Memory/AddressSpaceManager.cs @@ -234,8 +234,7 @@ namespace Ryujinx.Memory protected unsafe override Memory GetPhysicalAddressMemory(nuint pa, int size) => new NativeMemoryManager((byte*)pa, size).Memory; - protected override unsafe Span GetPhysicalAddressSpan(nuint pa, int size) - => new Span((void*)pa, size); + protected override unsafe Span GetPhysicalAddressSpan(nuint pa, int size) => new((void*)pa, size); protected override nuint TranslateVirtualAddressChecked(ulong va) => GetHostAddress(va); diff --git a/src/Ryujinx.Memory/BytesReadOnlySequenceSegment.cs b/src/Ryujinx.Memory/BytesReadOnlySequenceSegment.cs index 6ac83464c..f759b2d98 100644 --- a/src/Ryujinx.Memory/BytesReadOnlySequenceSegment.cs +++ b/src/Ryujinx.Memory/BytesReadOnlySequenceSegment.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Memory public BytesReadOnlySequenceSegment Append(Memory memory) { - BytesReadOnlySequenceSegment nextSegment = new BytesReadOnlySequenceSegment(memory) + BytesReadOnlySequenceSegment nextSegment = new(memory) { RunningIndex = RunningIndex + Memory.Length }; diff --git a/src/Ryujinx.Memory/Range/MultiRangeList.cs b/src/Ryujinx.Memory/Range/MultiRangeList.cs index f5fd6164d..3ca26c892 100644 --- a/src/Ryujinx.Memory/Range/MultiRangeList.cs +++ b/src/Ryujinx.Memory/Range/MultiRangeList.cs @@ -173,7 +173,7 @@ namespace Ryujinx.Memory.Range private List GetList() { List> items = _items.AsList(); - List result = new List(); + List result = new(); foreach (RangeNode item in items) { -- 2.47.1 From 7f5a356c3d16aabb5ec3e51358d7460812972038 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:21:47 -0600 Subject: [PATCH 458/722] misc: chore: Fix object creation in Common project --- .../Extensions/SequenceReaderExtensions.cs | 2 +- src/Ryujinx.Common/Utilities/EmbeddedResources.cs | 4 ++-- src/Ryujinx.Common/Utilities/FileSystemUtils.cs | 4 ++-- .../Utilities/MessagePackObjectFormatter.cs | 2 +- src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs | 12 ++++++------ 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx.Common/Extensions/SequenceReaderExtensions.cs b/src/Ryujinx.Common/Extensions/SequenceReaderExtensions.cs index df2b82aa6..c4b33ab0d 100644 --- a/src/Ryujinx.Common/Extensions/SequenceReaderExtensions.cs +++ b/src/Ryujinx.Common/Extensions/SequenceReaderExtensions.cs @@ -164,7 +164,7 @@ namespace Ryujinx.Common.Extensions // Not enough data in the current segment, try to peek for the data we need. T buffer = default; - Span tempSpan = new Span(&buffer, sizeof(T)); + Span tempSpan = new(&buffer, sizeof(T)); if (!reader.TryCopyTo(tempSpan)) { diff --git a/src/Ryujinx.Common/Utilities/EmbeddedResources.cs b/src/Ryujinx.Common/Utilities/EmbeddedResources.cs index 107b4b584..45bb7d537 100644 --- a/src/Ryujinx.Common/Utilities/EmbeddedResources.cs +++ b/src/Ryujinx.Common/Utilities/EmbeddedResources.cs @@ -91,7 +91,7 @@ namespace Ryujinx.Common return null; } - using StreamReader reader = new StreamReader(stream); + using StreamReader reader = new(stream); return reader.ReadToEnd(); } @@ -103,7 +103,7 @@ namespace Ryujinx.Common return null; } - using StreamReader reader = new StreamReader(stream); + using StreamReader reader = new(stream); return await reader.ReadToEndAsync(); } diff --git a/src/Ryujinx.Common/Utilities/FileSystemUtils.cs b/src/Ryujinx.Common/Utilities/FileSystemUtils.cs index 58bc80147..97510fd9d 100644 --- a/src/Ryujinx.Common/Utilities/FileSystemUtils.cs +++ b/src/Ryujinx.Common/Utilities/FileSystemUtils.cs @@ -9,7 +9,7 @@ namespace Ryujinx.Common.Utilities public static void CopyDirectory(string sourceDir, string destinationDir, bool recursive) { // Get information about the source directory - DirectoryInfo dir = new DirectoryInfo(sourceDir); + DirectoryInfo dir = new(sourceDir); // Check if the source directory exists if (!dir.Exists) @@ -49,7 +49,7 @@ namespace Ryujinx.Common.Utilities public static string SanitizeFileName(string fileName) { - HashSet reservedChars = new HashSet(Path.GetInvalidFileNameChars()); + HashSet reservedChars = new(Path.GetInvalidFileNameChars()); return string.Concat(fileName.Select(c => reservedChars.Contains(c) ? '_' : c)); } } diff --git a/src/Ryujinx.Common/Utilities/MessagePackObjectFormatter.cs b/src/Ryujinx.Common/Utilities/MessagePackObjectFormatter.cs index 6d5be656f..fa04ee347 100644 --- a/src/Ryujinx.Common/Utilities/MessagePackObjectFormatter.cs +++ b/src/Ryujinx.Common/Utilities/MessagePackObjectFormatter.cs @@ -19,7 +19,7 @@ namespace Ryujinx.Common.Utilities public static string Format(MessagePackObject obj) { - IndentedStringBuilder builder = new IndentedStringBuilder(); + IndentedStringBuilder builder = new(); FormatMsgPackObj(obj, builder); diff --git a/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs b/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs index e92b5fe60..5b233d1e0 100644 --- a/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs +++ b/src/Ryujinx.Common/Utilities/XCIFileTrimmer.cs @@ -46,7 +46,7 @@ namespace Ryujinx.Common.Utilities { if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase)) { - XCIFileTrimmer trimmer = new XCIFileTrimmer(filename, log); + XCIFileTrimmer trimmer = new(filename, log); return trimmer.CanBeTrimmed; } @@ -57,7 +57,7 @@ namespace Ryujinx.Common.Utilities { if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase)) { - XCIFileTrimmer trimmer = new XCIFileTrimmer(filename, log); + XCIFileTrimmer trimmer = new(filename, log); return trimmer.CanBeUntrimmed; } @@ -267,7 +267,7 @@ namespace Ryujinx.Common.Utilities try { - FileInfo info = new FileInfo(Filename); + FileInfo info = new(Filename); if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { try @@ -288,7 +288,7 @@ namespace Ryujinx.Common.Utilities return OperationOutcome.FileSizeChanged; } - FileStream outfileStream = new FileStream(_filename, FileMode.Open, FileAccess.Write, FileShare.Write); + FileStream outfileStream = new(_filename, FileMode.Open, FileAccess.Write, FileShare.Write); try { @@ -327,7 +327,7 @@ namespace Ryujinx.Common.Utilities { Log?.Write(LogType.Info, "Untrimming..."); - FileInfo info = new FileInfo(Filename); + FileInfo info = new(Filename); if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { try @@ -348,7 +348,7 @@ namespace Ryujinx.Common.Utilities return OperationOutcome.FileSizeChanged; } - FileStream outfileStream = new FileStream(_filename, FileMode.Append, FileAccess.Write, FileShare.Write); + FileStream outfileStream = new(_filename, FileMode.Append, FileAccess.Write, FileShare.Write); long bytesToWriteB = UntrimmedFileSizeB - FileSizeB; try -- 2.47.1 From ccef0b49eb6ab52bd52cccc5829cf6a79c3311c1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:22:30 -0600 Subject: [PATCH 459/722] misc: chore: Fix object creation in Shader project --- .../Glsl/Instructions/InstGenMemory.cs | 2 +- .../CodeGen/Msl/Instructions/InstGenMemory.cs | 8 ++--- .../CodeGen/Msl/MslGenerator.cs | 2 +- .../CodeGen/Spirv/CodeGenContext.cs | 2 +- .../CodeGen/Spirv/Instructions.cs | 6 ++-- .../CodeGen/Spirv/SpirvGenerator.cs | 2 +- .../Instructions/AttributeMap.cs | 4 +-- .../Translation/ResourceManager.cs | 10 +++--- .../Translation/ShaderDefinitions.cs | 4 +-- .../Translation/TranslatorContext.cs | 34 +++++++++---------- 10 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs index 2eeaaa9bc..634f9364a 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions bool isArray = (texOp.Type & SamplerType.Array) != 0; - StringBuilder texCallBuilder = new StringBuilder(); + StringBuilder texCallBuilder = new(); if (texOp.Inst == Instruction.ImageAtomic) { diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs index 2cdee1478..b3a995c6a 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs @@ -157,7 +157,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions bool isArray = (texOp.Type & SamplerType.Array) != 0; - StringBuilder texCallBuilder = new StringBuilder(); + StringBuilder texCallBuilder = new(); int srcIndex = 0; @@ -194,7 +194,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions texCallBuilder.Append('('); - StringBuilder coordsBuilder = new StringBuilder(); + StringBuilder coordsBuilder = new(); int coordsCount = texOp.Type.GetDimensions(); @@ -352,7 +352,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions bool isArray = (texOp.Type & SamplerType.Array) != 0; bool isShadow = (texOp.Type & SamplerType.Shadow) != 0; - StringBuilder texCallBuilder = new StringBuilder(); + StringBuilder texCallBuilder = new(); bool colorIsVector = isGather || !isShadow; @@ -589,7 +589,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions { AstTextureOperation texOp = (AstTextureOperation)operation; - StringBuilder texCallBuilder = new StringBuilder(); + StringBuilder texCallBuilder = new(); int srcIndex = 0; diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs index ddb013c05..bc38ea26b 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs @@ -176,7 +176,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl } string funcPrefix = $"{funcKeyword} {returnType} {funcName ?? function.Name}("; - string indent = new string(' ', funcPrefix.Length); + string indent = new(' ', funcPrefix.Length); return $"{funcPrefix}{string.Join($", \n{indent}", args)})"; } diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs index d573fe39a..f623f2451 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs @@ -147,7 +147,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv public Instruction[] GetMainInterface() { - List mainInterface = new List(); + List mainInterface = new(); mainInterface.AddRange(Inputs.Values); mainInterface.AddRange(Outputs.Values); diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs index 7796bccbe..9b00f7edb 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs @@ -1327,7 +1327,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv compIdx = Src(AggregateType.S32); } - List operandsList = new List(); + List operandsList = new(); ImageOperandsMask operandsMask = ImageOperandsMask.MaskNone; if (hasLodBias) @@ -1754,7 +1754,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv storageClass = isOutput ? StorageClass.Output : StorageClass.Input; - IoDefinition ioDefinition = new IoDefinition(storageKind, ioVariable, location, component); + IoDefinition ioDefinition = new(storageKind, ioVariable, location, component); Dictionary dict = isPerPatch ? (isOutput ? context.OutputsPerPatch : context.InputsPerPatch) : (isOutput ? context.Outputs : context.Inputs); @@ -1843,7 +1843,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv (_, AggregateType varType) = IoMap.GetSpirvBuiltIn(ioVariable); varType &= AggregateType.ElementTypeMask; - IoDefinition ioDefinition = new IoDefinition(StorageKind.Input, ioVariable); + IoDefinition ioDefinition = new(StorageKind.Input, ioVariable); return context.Load(context.GetType(varType), context.Inputs[ioDefinition]); } diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvGenerator.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvGenerator.cs index 73af3b850..db4de586a 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvGenerator.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/SpirvGenerator.cs @@ -307,7 +307,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv { AstBlockVisitor visitor = new(block); - Dictionary loopTargets = new Dictionary(); + Dictionary loopTargets = new(); context.LoopTargets = loopTargets; diff --git a/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs b/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs index b4ecf9abe..572cc513d 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/AttributeMap.cs @@ -57,7 +57,7 @@ namespace Ryujinx.Graphics.Shader.Instructions private static IReadOnlyDictionary CreateMap() { - Dictionary map = new Dictionary(); + Dictionary map = new(); Add(map, 0x060, AggregateType.S32, IoVariable.PrimitiveId, StagesMask.TessellationGeometryFragment, StagesMask.Geometry); Add(map, 0x064, AggregateType.S32, IoVariable.Layer, StagesMask.Fragment, StagesMask.VertexTessellationGeometry); @@ -84,7 +84,7 @@ namespace Ryujinx.Graphics.Shader.Instructions private static IReadOnlyDictionary CreatePerPatchMap() { - Dictionary map = new Dictionary(); + Dictionary map = new(); Add(map, 0x000, AggregateType.Vector4 | AggregateType.FP32, IoVariable.TessellationLevelOuter, StagesMask.TessellationEvaluation, StagesMask.TessellationControl); Add(map, 0x010, AggregateType.Vector2 | AggregateType.FP32, IoVariable.TessellationLevelInner, StagesMask.TessellationEvaluation, StagesMask.TessellationControl); diff --git a/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs b/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs index c733e5b55..dee5174f2 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs @@ -103,7 +103,7 @@ namespace Ryujinx.Graphics.Shader.Translation size = DefaultLocalMemorySize; } - MemoryDefinition lmem = new MemoryDefinition("local_memory", AggregateType.Array | AggregateType.U32, BitUtils.DivRoundUp(size, sizeof(uint))); + MemoryDefinition lmem = new("local_memory", AggregateType.Array | AggregateType.U32, BitUtils.DivRoundUp(size, sizeof(uint))); LocalMemoryId = Properties.AddLocalMemory(lmem); } @@ -122,7 +122,7 @@ namespace Ryujinx.Graphics.Shader.Translation size = DefaultSharedMemorySize; } - MemoryDefinition smem = new MemoryDefinition("shared_memory", AggregateType.Array | AggregateType.U32, BitUtils.DivRoundUp(size, sizeof(uint))); + MemoryDefinition smem = new("shared_memory", AggregateType.Array | AggregateType.U32, BitUtils.DivRoundUp(size, sizeof(uint))); SharedMemoryId = Properties.AddSharedMemory(smem); } @@ -315,8 +315,8 @@ namespace Ryujinx.Graphics.Shader.Translation // For array textures, we also want to use type as key, // since we may have texture handles stores in the same buffer, but for textures with different types. SamplerType keyType = arrayLength > 1 ? type : SamplerType.None; - TextureInfo info = new TextureInfo(cbufSlot, handle, arrayLength, separate, keyType, format); - TextureMeta meta = new TextureMeta() + TextureInfo info = new(cbufSlot, handle, arrayLength, separate, keyType, format); + TextureMeta meta = new() { AccurateType = accurateType, Type = type, @@ -383,7 +383,7 @@ namespace Ryujinx.Graphics.Shader.Translation nameSuffix = cbufSlot < 0 ? $"{prefix}_tcb_{handle:X}" : $"{prefix}_cb{cbufSlot}_{handle:X}"; } - TextureDefinition definition = new TextureDefinition( + TextureDefinition definition = new( setIndex, binding, arrayLength, diff --git a/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs b/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs index 5cb900df7..656ad6c5e 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/ShaderDefinitions.cs @@ -192,7 +192,7 @@ namespace Ryujinx.Graphics.Shader.Translation component = subIndex; } - TransformFeedbackVariable transformFeedbackVariable = new TransformFeedbackVariable(ioVariable, location, component); + TransformFeedbackVariable transformFeedbackVariable = new(ioVariable, location, component); _transformFeedbackDefinitions.TryAdd(transformFeedbackVariable, transformFeedbackOutputs[wordOffset]); } } @@ -219,7 +219,7 @@ namespace Ryujinx.Graphics.Shader.Translation return false; } - TransformFeedbackVariable transformFeedbackVariable = new TransformFeedbackVariable(ioVariable, location, component); + TransformFeedbackVariable transformFeedbackVariable = new(ioVariable, location, component); return _transformFeedbackDefinitions.TryGetValue(transformFeedbackVariable, out transformFeedbackOutput); } diff --git a/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs b/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs index 40cf62231..441d1f77a 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs @@ -342,7 +342,7 @@ namespace Ryujinx.Graphics.Shader.Translation _ => 1 }; - ShaderProgramInfo info = new ShaderProgramInfo( + ShaderProgramInfo info = new( resourceManager.GetConstantBufferDescriptors(), resourceManager.GetStorageBufferDescriptors(), resourceManager.GetTextureDescriptors(), @@ -358,7 +358,7 @@ namespace Ryujinx.Graphics.Shader.Translation clipDistancesWritten, originalDefinitions.OmapTargets); - HostCapabilities hostCapabilities = new HostCapabilities( + HostCapabilities hostCapabilities = new( GpuAccessor.QueryHostReducedPrecision(), GpuAccessor.QueryHostSupportsFragmentShaderInterlock(), GpuAccessor.QueryHostSupportsFragmentShaderOrderingIntel(), @@ -369,7 +369,7 @@ namespace Ryujinx.Graphics.Shader.Translation GpuAccessor.QueryHostSupportsTextureShadowLod(), GpuAccessor.QueryHostSupportsViewportMask()); - CodeGenParameters parameters = new CodeGenParameters(attributeUsage, definitions, resourceManager.Properties, hostCapabilities, GpuAccessor, Options.TargetApi); + CodeGenParameters parameters = new(attributeUsage, definitions, resourceManager.Properties, hostCapabilities, GpuAccessor, Options.TargetApi); return Options.TargetLanguage switch { @@ -388,7 +388,7 @@ namespace Ryujinx.Graphics.Shader.Translation { StructureType tfeDataStruct = new(new StructureField[] { - new StructureField(AggregateType.Array | AggregateType.U32, "data", 0) + new(AggregateType.Array | AggregateType.U32, "data", 0) }); for (int i = 0; i < ResourceReservations.TfeBuffersCount; i++) @@ -407,7 +407,7 @@ namespace Ryujinx.Graphics.Shader.Translation StructureType vertexOutputStruct = new(new StructureField[] { - new StructureField(AggregateType.Array | AggregateType.FP32, "data", 0) + new(AggregateType.Array | AggregateType.FP32, "data", 0) }); int vertexOutputSbBinding = resourceManager.Reservations.VertexOutputStorageBufferBinding; @@ -444,7 +444,7 @@ namespace Ryujinx.Graphics.Shader.Translation StructureType geometryIbOutputStruct = new(new StructureField[] { - new StructureField(AggregateType.Array | AggregateType.U32, "data", 0) + new(AggregateType.Array | AggregateType.U32, "data", 0) }); int geometryIbOutputSbBinding = resourceManager.Reservations.GeometryIndexOutputStorageBufferBinding; @@ -494,8 +494,8 @@ namespace Ryujinx.Graphics.Shader.Translation public (ShaderProgram, ShaderProgramInfo) GenerateVertexPassthroughForCompute() { - AttributeUsage attributeUsage = new AttributeUsage(GpuAccessor); - ResourceManager resourceManager = new ResourceManager(ShaderStage.Vertex, GpuAccessor); + AttributeUsage attributeUsage = new(GpuAccessor); + ResourceManager resourceManager = new(ShaderStage.Vertex, GpuAccessor); ResourceReservations reservations = GetResourceReservations(); @@ -509,14 +509,14 @@ namespace Ryujinx.Graphics.Shader.Translation StructureType vertexInputStruct = new(new StructureField[] { - new StructureField(AggregateType.Array | AggregateType.FP32, "data", 0) + new(AggregateType.Array | AggregateType.FP32, "data", 0) }); int vertexDataSbBinding = reservations.VertexOutputStorageBufferBinding; BufferDefinition vertexOutputBuffer = new(BufferLayout.Std430, 1, vertexDataSbBinding, "vb_input", vertexInputStruct); resourceManager.AddVertexAsComputeStorageBuffer(vertexOutputBuffer); - EmitterContext context = new EmitterContext(); + EmitterContext context = new(); Operand vertexIndex = Options.TargetApi == TargetApi.OpenGL ? context.Load(StorageKind.Input, IoVariable.VertexId) @@ -563,11 +563,11 @@ namespace Ryujinx.Graphics.Shader.Translation Operation[] operations = context.GetOperations(); ControlFlowGraph cfg = ControlFlowGraph.Create(operations); - Function function = new Function(cfg.Blocks, "main", false, 0, 0); + Function function = new(cfg.Blocks, "main", false, 0, 0); TransformFeedbackOutput[] transformFeedbackOutputs = GetTransformFeedbackOutputs(GpuAccessor, out ulong transformFeedbackVecMap); - ShaderDefinitions definitions = new ShaderDefinitions(ShaderStage.Vertex, transformFeedbackVecMap, transformFeedbackOutputs) + ShaderDefinitions definitions = new(ShaderStage.Vertex, transformFeedbackVecMap, transformFeedbackOutputs) { LastInVertexPipeline = true }; @@ -612,10 +612,10 @@ namespace Ryujinx.Graphics.Shader.Translation break; } - AttributeUsage attributeUsage = new AttributeUsage(GpuAccessor); - ResourceManager resourceManager = new ResourceManager(ShaderStage.Geometry, GpuAccessor); + AttributeUsage attributeUsage = new(GpuAccessor); + ResourceManager resourceManager = new(ShaderStage.Geometry, GpuAccessor); - EmitterContext context = new EmitterContext(); + EmitterContext context = new(); for (int v = 0; v < maxOutputVertices; v++) { @@ -658,9 +658,9 @@ namespace Ryujinx.Graphics.Shader.Translation Operation[] operations = context.GetOperations(); ControlFlowGraph cfg = ControlFlowGraph.Create(operations); - Function function = new Function(cfg.Blocks, "main", false, 0, 0); + Function function = new(cfg.Blocks, "main", false, 0, 0); - ShaderDefinitions definitions = new ShaderDefinitions( + ShaderDefinitions definitions = new( ShaderStage.Geometry, GpuAccessor.QueryGraphicsState(), false, -- 2.47.1 From e859bd5aa244df6c78f3cc8c19ac9105a0b1791e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:26:01 -0600 Subject: [PATCH 460/722] misc: chore: Fix object creation in Horizon generators --- .../Hipc/HipcGenerator.cs | 4 ++-- .../SyscallGenerator.cs | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs b/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs index e66a3efa9..54ac9ccdd 100644 --- a/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs +++ b/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs @@ -68,7 +68,7 @@ namespace Ryujinx.Horizon.Generators.Hipc continue; } - CodeGenerator generator = new CodeGenerator(); + CodeGenerator generator = new(); string className = commandInterface.ClassDeclarationSyntax.Identifier.ToString(); generator.AppendLine("using Ryujinx.Horizon.Common;"); @@ -257,7 +257,7 @@ namespace Ryujinx.Horizon.Generators.Hipc generator.AppendLine(); } - List outParameters = new List(); + List outParameters = new(); string[] args = new string[method.ParameterList.Parameters.Count]; diff --git a/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs b/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs index 91eb08c77..5a81d8d80 100644 --- a/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs +++ b/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs @@ -128,7 +128,7 @@ namespace Ryujinx.Horizon.Kernel.Generators { SyscallSyntaxReceiver syntaxReceiver = (SyscallSyntaxReceiver)context.SyntaxReceiver; - CodeGenerator generator = new CodeGenerator(); + CodeGenerator generator = new(); generator.AppendLine("using Ryujinx.Common.Logging;"); generator.AppendLine("using Ryujinx.Cpu;"); @@ -145,7 +145,7 @@ namespace Ryujinx.Horizon.Kernel.Generators GenerateResultCheckHelper(generator); generator.AppendLine(); - List syscalls = new List(); + List syscalls = new(); foreach (MethodDeclarationSyntax method in syntaxReceiver.SvcImplementations) { @@ -200,11 +200,11 @@ namespace Ryujinx.Horizon.Kernel.Generators string[] args = new string[method.ParameterList.Parameters.Count]; int index = 0; - RegisterAllocatorA32 regAlloc = new RegisterAllocatorA32(); + RegisterAllocatorA32 regAlloc = new(); - List outParameters = new List(); - List logInArgs = new List(); - List logOutArgs = new List(); + List outParameters = new(); + List logInArgs = new(); + List logOutArgs = new(); foreach (ParameterSyntax methodParameter in method.ParameterList.Parameters) { @@ -321,9 +321,9 @@ namespace Ryujinx.Horizon.Kernel.Generators int registerIndex = 0; int index = 0; - List outParameters = new List(); - List logInArgs = new List(); - List logOutArgs = new List(); + List outParameters = new(); + List logInArgs = new(); + List logOutArgs = new(); foreach (ParameterSyntax methodParameter in method.ParameterList.Parameters) { -- 2.47.1 From d95f724d178568b8d214a0e5f21cf80cf45110e0 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:26:11 -0600 Subject: [PATCH 461/722] misc: chore: Fix object creation in Metal --- src/Ryujinx.Graphics.Metal/BufferHolder.cs | 4 ++-- src/Ryujinx.Graphics.Metal/BufferManager.cs | 2 +- src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs | 2 +- src/Ryujinx.Graphics.Metal/DepthStencilCache.cs | 6 +++--- src/Ryujinx.Graphics.Metal/EncoderState.cs | 2 +- src/Ryujinx.Graphics.Metal/EncoderStateManager.cs | 4 ++-- src/Ryujinx.Graphics.Metal/HelperShader.cs | 6 +++--- src/Ryujinx.Graphics.Metal/MetalRenderer.cs | 2 +- src/Ryujinx.Graphics.Metal/Pipeline.cs | 4 ++-- src/Ryujinx.Graphics.Metal/Program.cs | 2 +- src/Ryujinx.Graphics.Metal/SamplerHolder.cs | 2 +- src/Ryujinx.Graphics.Metal/State/PipelineState.cs | 10 +++++----- src/Ryujinx.Graphics.Metal/Texture.cs | 2 +- src/Ryujinx.Graphics.Metal/TextureCopy.cs | 4 ++-- src/Ryujinx.Graphics.Metal/Window.cs | 4 ++-- 15 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/Ryujinx.Graphics.Metal/BufferHolder.cs b/src/Ryujinx.Graphics.Metal/BufferHolder.cs index 5a44dc1fe..630571658 100644 --- a/src/Ryujinx.Graphics.Metal/BufferHolder.cs +++ b/src/Ryujinx.Graphics.Metal/BufferHolder.cs @@ -302,7 +302,7 @@ namespace Ryujinx.Graphics.Metal return null; } - I8ToI16CacheKey key = new I8ToI16CacheKey(_renderer); + I8ToI16CacheKey key = new(_renderer); if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder)) { @@ -325,7 +325,7 @@ namespace Ryujinx.Graphics.Metal return null; } - TopologyConversionCacheKey key = new TopologyConversionCacheKey(_renderer, pattern, indexSize); + TopologyConversionCacheKey key = new(_renderer, pattern, indexSize); if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out BufferHolder holder)) { diff --git a/src/Ryujinx.Graphics.Metal/BufferManager.cs b/src/Ryujinx.Graphics.Metal/BufferManager.cs index 166f5b4f2..73a8d6fe7 100644 --- a/src/Ryujinx.Graphics.Metal/BufferManager.cs +++ b/src/Ryujinx.Graphics.Metal/BufferManager.cs @@ -74,7 +74,7 @@ namespace Ryujinx.Graphics.Metal return BufferHandle.Null; } - BufferHolder holder = new BufferHolder(_renderer, _pipeline, buffer, size); + BufferHolder holder = new(_renderer, _pipeline, buffer, size); BufferCount++; diff --git a/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs b/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs index c9a337bb0..3bc30e239 100644 --- a/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs +++ b/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs @@ -149,7 +149,7 @@ class CommandBufferEncoder { EndCurrentPass(); - using MTLBlitPassDescriptor descriptor = new MTLBlitPassDescriptor(); + using MTLBlitPassDescriptor descriptor = new(); MTLBlitCommandEncoder blitCommandEncoder = _commandBuffer.BlitCommandEncoder(descriptor); CurrentEncoder = blitCommandEncoder; diff --git a/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs b/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs index 92a24b99d..47d996010 100644 --- a/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs +++ b/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs @@ -25,7 +25,7 @@ namespace Ryujinx.Graphics.Metal ref StencilUid frontUid = ref descriptor.FrontFace; - using MTLStencilDescriptor frontFaceStencil = new MTLStencilDescriptor + using MTLStencilDescriptor frontFaceStencil = new() { StencilFailureOperation = frontUid.StencilFailureOperation, DepthFailureOperation = frontUid.DepthFailureOperation, @@ -37,7 +37,7 @@ namespace Ryujinx.Graphics.Metal ref StencilUid backUid = ref descriptor.BackFace; - using MTLStencilDescriptor backFaceStencil = new MTLStencilDescriptor + using MTLStencilDescriptor backFaceStencil = new() { StencilFailureOperation = backUid.StencilFailureOperation, DepthFailureOperation = backUid.DepthFailureOperation, @@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.Metal WriteMask = backUid.WriteMask }; - MTLDepthStencilDescriptor mtlDescriptor = new MTLDepthStencilDescriptor + MTLDepthStencilDescriptor mtlDescriptor = new() { DepthCompareFunction = descriptor.DepthCompareFunction, DepthWriteEnabled = descriptor.DepthWriteEnabled diff --git a/src/Ryujinx.Graphics.Metal/EncoderState.cs b/src/Ryujinx.Graphics.Metal/EncoderState.cs index 28b59736a..64c50d71b 100644 --- a/src/Ryujinx.Graphics.Metal/EncoderState.cs +++ b/src/Ryujinx.Graphics.Metal/EncoderState.cs @@ -165,7 +165,7 @@ namespace Ryujinx.Graphics.Metal { // Inherit render target related information without causing a render encoder split. - RenderTargetCopy oldState = new RenderTargetCopy + RenderTargetCopy oldState = new() { Scissors = other.Scissors, RenderTargets = other.RenderTargets, diff --git a/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs b/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs index bfd9a0348..7901e5a52 100644 --- a/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs +++ b/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs @@ -125,7 +125,7 @@ namespace Ryujinx.Graphics.Metal public readonly MTLRenderCommandEncoder CreateRenderCommandEncoder() { // Initialise Pass & State - using MTLRenderPassDescriptor renderPassDescriptor = new MTLRenderPassDescriptor(); + using MTLRenderPassDescriptor renderPassDescriptor = new(); for (int i = 0; i < Constants.MaxColorAttachments; i++) { @@ -185,7 +185,7 @@ namespace Ryujinx.Graphics.Metal public readonly MTLComputeCommandEncoder CreateComputeCommandEncoder() { - using MTLComputePassDescriptor descriptor = new MTLComputePassDescriptor(); + using MTLComputePassDescriptor descriptor = new(); MTLComputeCommandEncoder computeCommandEncoder = _pipeline.CommandBuffer.ComputeCommandEncoder(descriptor); return computeCommandEncoder; diff --git a/src/Ryujinx.Graphics.Metal/HelperShader.cs b/src/Ryujinx.Graphics.Metal/HelperShader.cs index e72ab6991..48b9b9f3a 100644 --- a/src/Ryujinx.Graphics.Metal/HelperShader.cs +++ b/src/Ryujinx.Graphics.Metal/HelperShader.cs @@ -239,7 +239,7 @@ namespace Ryujinx.Graphics.Metal buffer.Holder.SetDataUnchecked(buffer.Offset, region); _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); - Rectangle rect = new Rectangle( + Rectangle rect = new( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -365,7 +365,7 @@ namespace Ryujinx.Graphics.Metal Span viewports = stackalloc Viewport[16]; - Rectangle rect = new Rectangle( + Rectangle rect = new( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), @@ -527,7 +527,7 @@ namespace Ryujinx.Graphics.Metal Span viewports = stackalloc Viewport[16]; - Rectangle rect = new Rectangle( + Rectangle rect = new( MathF.Min(dstRegion.X1, dstRegion.X2), MathF.Min(dstRegion.Y1, dstRegion.Y2), MathF.Abs(dstRegion.X2 - dstRegion.X1), diff --git a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs index cfda31e66..3ed60103e 100644 --- a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs +++ b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs @@ -253,7 +253,7 @@ namespace Ryujinx.Graphics.Metal public ICounterEvent ReportCounter(CounterType type, EventHandler resultHandler, float divisor, bool hostReserved) { // https://developer.apple.com/documentation/metal/gpu_counters_and_counter_sample_buffers/creating_a_counter_sample_buffer_to_store_a_gpu_s_counter_data_during_a_pass?language=objc - CounterEvent counterEvent = new CounterEvent(); + CounterEvent counterEvent = new(); resultHandler?.Invoke(counterEvent, type == CounterType.SamplesPassed ? (ulong)1 : 0); return counterEvent; } diff --git a/src/Ryujinx.Graphics.Metal/Pipeline.cs b/src/Ryujinx.Graphics.Metal/Pipeline.cs index d7fbebada..aebcb5493 100644 --- a/src/Ryujinx.Graphics.Metal/Pipeline.cs +++ b/src/Ryujinx.Graphics.Metal/Pipeline.cs @@ -149,8 +149,8 @@ namespace Ryujinx.Graphics.Metal public void Present(CAMetalDrawable drawable, Texture src, Extents2D srcRegion, Extents2D dstRegion, bool isLinear) { // TODO: Clean this up - TextureCreateInfo textureInfo = new TextureCreateInfo((int)drawable.Texture.Width, (int)drawable.Texture.Height, (int)drawable.Texture.Depth, (int)drawable.Texture.MipmapLevelCount, (int)drawable.Texture.SampleCount, 0, 0, 0, Format.B8G8R8A8Unorm, 0, Target.Texture2D, SwizzleComponent.Red, SwizzleComponent.Green, SwizzleComponent.Blue, SwizzleComponent.Alpha); - Texture dst = new Texture(_device, _renderer, this, textureInfo, drawable.Texture, 0, 0); + TextureCreateInfo textureInfo = new((int)drawable.Texture.Width, (int)drawable.Texture.Height, (int)drawable.Texture.Depth, (int)drawable.Texture.MipmapLevelCount, (int)drawable.Texture.SampleCount, 0, 0, 0, Format.B8G8R8A8Unorm, 0, Target.Texture2D, SwizzleComponent.Red, SwizzleComponent.Green, SwizzleComponent.Blue, SwizzleComponent.Alpha); + Texture dst = new(_device, _renderer, this, textureInfo, drawable.Texture, 0, 0); _renderer.HelperShader.BlitColor(Cbs, src, dst, srcRegion, dstRegion, isLinear, true); diff --git a/src/Ryujinx.Graphics.Metal/Program.cs b/src/Ryujinx.Graphics.Metal/Program.cs index 780725400..a24ad754d 100644 --- a/src/Ryujinx.Graphics.Metal/Program.cs +++ b/src/Ryujinx.Graphics.Metal/Program.cs @@ -56,7 +56,7 @@ namespace Ryujinx.Graphics.Metal { ShaderSource shader = _shaders[i]; - using MTLCompileOptions compileOptions = new MTLCompileOptions + using MTLCompileOptions compileOptions = new() { PreserveInvariance = true, LanguageVersion = MTLLanguageVersion.Version31, diff --git a/src/Ryujinx.Graphics.Metal/SamplerHolder.cs b/src/Ryujinx.Graphics.Metal/SamplerHolder.cs index f1270443b..a448b26fe 100644 --- a/src/Ryujinx.Graphics.Metal/SamplerHolder.cs +++ b/src/Ryujinx.Graphics.Metal/SamplerHolder.cs @@ -21,7 +21,7 @@ namespace Ryujinx.Graphics.Metal MTLSamplerBorderColor borderColor = GetConstrainedBorderColor(info.BorderColor, out _); - using MTLSamplerDescriptor descriptor = new MTLSamplerDescriptor + using MTLSamplerDescriptor descriptor = new() { BorderColor = borderColor, MinFilter = minFilter, diff --git a/src/Ryujinx.Graphics.Metal/State/PipelineState.cs b/src/Ryujinx.Graphics.Metal/State/PipelineState.cs index 1fa83e8d7..14073dbe1 100644 --- a/src/Ryujinx.Graphics.Metal/State/PipelineState.cs +++ b/src/Ryujinx.Graphics.Metal/State/PipelineState.cs @@ -118,7 +118,7 @@ namespace Ryujinx.Graphics.Metal private readonly MTLVertexDescriptor BuildVertexDescriptor() { - MTLVertexDescriptor vertexDescriptor = new MTLVertexDescriptor(); + MTLVertexDescriptor vertexDescriptor = new(); for (int i = 0; i < VertexAttributeDescriptionsCount; i++) { @@ -146,7 +146,7 @@ namespace Ryujinx.Graphics.Metal private MTLRenderPipelineDescriptor CreateRenderDescriptor(Program program) { - MTLRenderPipelineDescriptor renderPipelineDescriptor = new MTLRenderPipelineDescriptor(); + MTLRenderPipelineDescriptor renderPipelineDescriptor = new(); for (int i = 0; i < Constants.MaxColorAttachments; i++) { @@ -217,7 +217,7 @@ namespace Ryujinx.Graphics.Metal using MTLRenderPipelineDescriptor descriptor = CreateRenderDescriptor(program); - NSError error = new NSError(IntPtr.Zero); + NSError error = new(IntPtr.Zero); pipelineState = device.NewRenderPipelineState(descriptor, ref error); if (error != IntPtr.Zero) { @@ -240,7 +240,7 @@ namespace Ryujinx.Graphics.Metal throw new InvalidOperationException($"Local thread size for compute cannot be 0 in any dimension."); } - MTLComputePipelineDescriptor descriptor = new MTLComputePipelineDescriptor + MTLComputePipelineDescriptor descriptor = new() { ComputeFunction = program.ComputeFunction, MaxTotalThreadsPerThreadgroup = maxThreads, @@ -259,7 +259,7 @@ namespace Ryujinx.Graphics.Metal using MTLComputePipelineDescriptor descriptor = CreateComputeDescriptor(program); - NSError error = new NSError(IntPtr.Zero); + NSError error = new(IntPtr.Zero); pipelineState = device.NewComputePipelineState(descriptor, MTLPipelineOption.None, 0, ref error); if (error != IntPtr.Zero) { diff --git a/src/Ryujinx.Graphics.Metal/Texture.cs b/src/Ryujinx.Graphics.Metal/Texture.cs index 749da7d48..754bf1742 100644 --- a/src/Ryujinx.Graphics.Metal/Texture.cs +++ b/src/Ryujinx.Graphics.Metal/Texture.cs @@ -18,7 +18,7 @@ namespace Ryujinx.Graphics.Metal { MTLPixelFormat pixelFormat = FormatTable.GetFormat(Info.Format); - MTLTextureDescriptor descriptor = new MTLTextureDescriptor + MTLTextureDescriptor descriptor = new() { PixelFormat = pixelFormat, Usage = MTLTextureUsage.Unknown, diff --git a/src/Ryujinx.Graphics.Metal/TextureCopy.cs b/src/Ryujinx.Graphics.Metal/TextureCopy.cs index b91a3cd89..afd3e961f 100644 --- a/src/Ryujinx.Graphics.Metal/TextureCopy.cs +++ b/src/Ryujinx.Graphics.Metal/TextureCopy.cs @@ -33,8 +33,8 @@ namespace Ryujinx.Graphics.Metal ulong bytesPerRow = (ulong)BitUtils.AlignUp(blockWidth * info.BytesPerPixel, 4); ulong bytesPerImage = bytesPerRow * (ulong)blockHeight; - MTLOrigin origin = new MTLOrigin { x = (ulong)x, y = (ulong)y, z = is3D ? (ulong)dstLayer : 0 }; - MTLSize region = new MTLSize { width = (ulong)width, height = (ulong)height, depth = 1 }; + MTLOrigin origin = new() { x = (ulong)x, y = (ulong)y, z = is3D ? (ulong)dstLayer : 0 }; + MTLSize region = new() { width = (ulong)width, height = (ulong)height, depth = 1 }; uint layer = is3D ? 0 : (uint)dstLayer; diff --git a/src/Ryujinx.Graphics.Metal/Window.cs b/src/Ryujinx.Graphics.Metal/Window.cs index f3c9133ab..0b6c6c4d2 100644 --- a/src/Ryujinx.Graphics.Metal/Window.cs +++ b/src/Ryujinx.Graphics.Metal/Window.cs @@ -47,7 +47,7 @@ namespace Ryujinx.Graphics.Metal if (_requestedWidth != 0 && _requestedHeight != 0) { // TODO: This is actually a CGSize, but there is no overload for that, so fill the first two fields of rect with the size. - NSRect rect = new NSRect(_requestedWidth, _requestedHeight, 0, 0); + NSRect rect = new(_requestedWidth, _requestedHeight, 0, 0); ObjectiveC.objc_msgSend(_metalLayer, "setDrawableSize:", rect); @@ -62,7 +62,7 @@ namespace Ryujinx.Graphics.Metal { ResizeIfNeeded(); - CAMetalDrawable drawable = new CAMetalDrawable(ObjectiveC.IntPtr_objc_msgSend(_metalLayer, "nextDrawable")); + CAMetalDrawable drawable = new(ObjectiveC.IntPtr_objc_msgSend(_metalLayer, "nextDrawable")); _width = (int)drawable.Texture.Width; _height = (int)drawable.Texture.Height; -- 2.47.1 From 9e1a13b2ee7644e4518be2d2942658453b8d3667 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:26:51 -0600 Subject: [PATCH 462/722] misc: chore: Fix object creation in Audio project --- src/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs b/src/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs index 65a134af1..33082225a 100644 --- a/src/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs +++ b/src/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs @@ -436,7 +436,7 @@ namespace Ryujinx.Audio.Renderer.Server return result; } - PoolMapper poolMapper = new PoolMapper(_processHandle, _memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled()); + PoolMapper poolMapper = new(_processHandle, _memoryPools, _behaviourContext.IsMemoryPoolForceMappingEnabled()); result = stateUpdater.UpdateVoices(_voiceContext, poolMapper); -- 2.47.1 From c7db948fb338440c1d67c74c4fab31a67b127cc1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:28:18 -0600 Subject: [PATCH 463/722] misc: chore: Fix object creation everywhere else --- .../LocalesValidationTask.cs | 2 +- src/Ryujinx.Graphics.Texture/Utils/BC67Tables.cs | 16 ++++++++-------- .../ServiceSyntaxReceiver.cs | 2 +- src/Ryujinx.Horizon.Common/Result.cs | 2 +- .../MockVirtualMemoryManager.cs | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs index 1f2c39e95..b8e14cd30 100644 --- a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs +++ b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs @@ -83,7 +83,7 @@ namespace Ryujinx.BuildValidationTasks if (isGitRunner && encounteredIssue) throw new JsonException("1 or more locales are invalid!"); - JsonSerializerOptions jsonOptions = new JsonSerializerOptions() + JsonSerializerOptions jsonOptions = new() { WriteIndented = true, NewLine = "\n", diff --git a/src/Ryujinx.Graphics.Texture/Utils/BC67Tables.cs b/src/Ryujinx.Graphics.Texture/Utils/BC67Tables.cs index 522538559..50102faf4 100644 --- a/src/Ryujinx.Graphics.Texture/Utils/BC67Tables.cs +++ b/src/Ryujinx.Graphics.Texture/Utils/BC67Tables.cs @@ -4,14 +4,14 @@ namespace Ryujinx.Graphics.Texture.Utils { public static readonly BC7ModeInfo[] BC7ModeInfos = new BC7ModeInfo[] { - new BC7ModeInfo(3, 4, 6, 0, 0, 3, 0, 4, 0), - new BC7ModeInfo(2, 6, 2, 0, 0, 3, 0, 6, 0), - new BC7ModeInfo(3, 6, 0, 0, 0, 2, 0, 5, 0), - new BC7ModeInfo(2, 6, 4, 0, 0, 2, 0, 7, 0), - new BC7ModeInfo(1, 0, 0, 2, 1, 2, 3, 5, 6), - new BC7ModeInfo(1, 0, 0, 2, 0, 2, 2, 7, 8), - new BC7ModeInfo(1, 0, 2, 0, 0, 4, 0, 7, 7), - new BC7ModeInfo(2, 6, 4, 0, 0, 2, 0, 5, 5), + new(3, 4, 6, 0, 0, 3, 0, 4, 0), + new(2, 6, 2, 0, 0, 3, 0, 6, 0), + new(3, 6, 0, 0, 0, 2, 0, 5, 0), + new(2, 6, 4, 0, 0, 2, 0, 7, 0), + new(1, 0, 0, 2, 1, 2, 3, 5, 6), + new(1, 0, 0, 2, 0, 2, 2, 7, 8), + new(1, 0, 2, 0, 0, 4, 0, 7, 7), + new(2, 6, 4, 0, 0, 2, 0, 5, 5), }; public static readonly byte[][] Weights = diff --git a/src/Ryujinx.HLE.Generators/ServiceSyntaxReceiver.cs b/src/Ryujinx.HLE.Generators/ServiceSyntaxReceiver.cs index e4269cb9a..b7ca5dfd2 100644 --- a/src/Ryujinx.HLE.Generators/ServiceSyntaxReceiver.cs +++ b/src/Ryujinx.HLE.Generators/ServiceSyntaxReceiver.cs @@ -6,7 +6,7 @@ namespace Ryujinx.HLE.Generators { internal class ServiceSyntaxReceiver : ISyntaxReceiver { - public HashSet Types = new HashSet(); + public HashSet Types = new(); public void OnVisitSyntaxNode(SyntaxNode syntaxNode) { diff --git a/src/Ryujinx.Horizon.Common/Result.cs b/src/Ryujinx.Horizon.Common/Result.cs index 4b120b847..bcbfbecd2 100644 --- a/src/Ryujinx.Horizon.Common/Result.cs +++ b/src/Ryujinx.Horizon.Common/Result.cs @@ -9,7 +9,7 @@ namespace Ryujinx.Horizon.Common private const int ModuleMax = 1 << ModuleBits; private const int DescriptionMax = 1 << DescriptionBits; - public static Result Success { get; } = new Result(0, 0); + public static Result Success { get; } = new(0, 0); public int ErrorCode { get; } diff --git a/src/Ryujinx.Tests.Memory/MockVirtualMemoryManager.cs b/src/Ryujinx.Tests.Memory/MockVirtualMemoryManager.cs index 3fe44db21..a01521c8f 100644 --- a/src/Ryujinx.Tests.Memory/MockVirtualMemoryManager.cs +++ b/src/Ryujinx.Tests.Memory/MockVirtualMemoryManager.cs @@ -85,7 +85,7 @@ namespace Ryujinx.Tests.Memory IEnumerable IVirtualMemoryManager.GetPhysicalRegions(ulong va, ulong size) { - return NoMappings ? Array.Empty() : new MemoryRange[] { new MemoryRange(va, size) }; + return NoMappings ? Array.Empty() : new MemoryRange[] { new(va, size) }; } public bool IsMapped(ulong va) -- 2.47.1 From 9cb3b40ffc817668f5332455956b960682608277 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:31:44 -0600 Subject: [PATCH 464/722] misc: chore: Use collection expressions in ARMeilleure --- .../CodeGen/Arm64/CodeGenContext.cs | 4 +- .../CodeGen/Arm64/CodeGenerator.cs | 2 +- .../CodeGen/Arm64/HardwareCapabilities.cs | 8 +- src/ARMeilleure/CodeGen/Arm64/PreAllocator.cs | 22 +-- .../RegisterAllocators/CopyResolver.cs | 4 +- .../RegisterAllocators/LinearScanAllocator.cs | 6 +- src/ARMeilleure/CodeGen/X86/Assembler.cs | 6 +- src/ARMeilleure/CodeGen/X86/CodeGenerator.cs | 2 +- .../CodeGen/X86/HardwareCapabilities.cs | 8 +- src/ARMeilleure/CodeGen/X86/PreAllocator.cs | 14 +- .../CodeGen/X86/PreAllocatorSystemV.cs | 16 +- .../CodeGen/X86/PreAllocatorWindows.cs | 2 +- src/ARMeilleure/Common/AddressTablePresets.cs | 54 +++---- src/ARMeilleure/Common/BitUtils.cs | 2 +- src/ARMeilleure/Decoders/Block.cs | 2 +- src/ARMeilleure/Decoders/Decoder.cs | 2 +- .../Decoders/OpCode32SimdMemPair.cs | 6 +- src/ARMeilleure/Decoders/OpCodeT16IfThen.cs | 2 +- src/ARMeilleure/Decoders/OpCodeTable.cs | 8 +- src/ARMeilleure/Diagnostics/Symbols.cs | 2 +- src/ARMeilleure/Instructions/CryptoHelper.cs | 80 +++++----- .../Instructions/InstEmitSimdCvt32.cs | 4 +- .../Instructions/InstEmitSimdHelper.cs | 144 +++++++++--------- .../Instructions/InstEmitSimdMove.cs | 18 +-- .../Instructions/InstEmitSimdMove32.cs | 16 +- .../Instructions/InstEmitSimdShift.cs | 8 +- src/ARMeilleure/Instructions/SoftFallback.cs | 2 +- .../IntermediateRepresentation/BasicBlock.cs | 4 +- .../Signal/NativeSignalHandlerGenerator.cs | 4 +- src/ARMeilleure/Signal/TestMethods.cs | 6 +- .../Translation/ArmEmitterContext.cs | 2 +- .../Translation/Cache/CacheMemoryAllocator.cs | 2 +- src/ARMeilleure/Translation/Cache/JitCache.cs | 2 +- .../Translation/Cache/JitCacheInvalidation.cs | 8 +- .../Translation/ControlFlowGraph.cs | 4 +- src/ARMeilleure/Translation/IntervalTree.cs | 2 +- src/ARMeilleure/Translation/PTC/Ptc.cs | 4 +- .../Translation/PTC/PtcFormatter.cs | 2 +- .../Translation/PTC/PtcProfiler.cs | 7 +- src/ARMeilleure/Translation/Translator.cs | 4 +- .../Translation/TranslatorQueue.cs | 2 +- .../Translation/TranslatorStubs.cs | 8 +- .../Translation/TranslatorTestMethods.cs | 2 +- 43 files changed, 251 insertions(+), 256 deletions(-) diff --git a/src/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs b/src/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs index ed271d24e..46cd863cf 100644 --- a/src/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs +++ b/src/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs @@ -42,7 +42,7 @@ namespace ARMeilleure.CodeGen.Arm64 { Offset = offset; Symbol = symbol; - LdrOffsets = new List<(Operand, int)>(); + LdrOffsets = []; } } @@ -266,7 +266,7 @@ namespace ARMeilleure.CodeGen.Arm64 } else { - relocInfo = new RelocInfo(Array.Empty()); + relocInfo = new RelocInfo([]); } return (code, relocInfo); diff --git a/src/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs b/src/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs index 6c422a5bb..8f88f2e27 100644 --- a/src/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs +++ b/src/ARMeilleure/CodeGen/Arm64/CodeGenerator.cs @@ -1079,7 +1079,7 @@ namespace ARMeilleure.CodeGen.Arm64 private static UnwindInfo WritePrologue(CodeGenContext context) { - List pushEntries = new(); + List pushEntries = []; Operand rsp = Register(SpRegister); diff --git a/src/ARMeilleure/CodeGen/Arm64/HardwareCapabilities.cs b/src/ARMeilleure/CodeGen/Arm64/HardwareCapabilities.cs index 639e4476b..fbaf16d04 100644 --- a/src/ARMeilleure/CodeGen/Arm64/HardwareCapabilities.cs +++ b/src/ARMeilleure/CodeGen/Arm64/HardwareCapabilities.cs @@ -140,8 +140,8 @@ namespace ARMeilleure.CodeGen.Arm64 return false; } - private static readonly string[] _sysctlNames = new string[] - { + private static readonly string[] _sysctlNames = + [ "hw.optional.floatingpoint", "hw.optional.AdvSIMD", "hw.optional.arm.FEAT_FP16", @@ -150,8 +150,8 @@ namespace ARMeilleure.CodeGen.Arm64 "hw.optional.arm.FEAT_LSE", "hw.optional.armv8_crc32", "hw.optional.arm.FEAT_SHA1", - "hw.optional.arm.FEAT_SHA256", - }; + "hw.optional.arm.FEAT_SHA256" + ]; [Flags] public enum MacOsFeatureFlags diff --git a/src/ARMeilleure/CodeGen/Arm64/PreAllocator.cs b/src/ARMeilleure/CodeGen/Arm64/PreAllocator.cs index e8193a9ab..a82c6939f 100644 --- a/src/ARMeilleure/CodeGen/Arm64/PreAllocator.cs +++ b/src/ARMeilleure/CodeGen/Arm64/PreAllocator.cs @@ -261,10 +261,10 @@ namespace ARMeilleure.CodeGen.Arm64 Operand dest = operation.Destination; - List sources = new() - { - operation.GetSource(0), - }; + List sources = + [ + operation.GetSource(0) + ]; int argsCount = operation.SourcesCount - 1; @@ -365,10 +365,10 @@ namespace ARMeilleure.CodeGen.Arm64 Operation node, Operation operation) { - List sources = new() - { - operation.GetSource(0), - }; + List sources = + [ + operation.GetSource(0) + ]; int argsCount = operation.SourcesCount - 1; @@ -468,8 +468,8 @@ namespace ARMeilleure.CodeGen.Arm64 // Update the sources and destinations with split 64-bit halfs of the whole 128-bit values. // We also need a additional registers that will be used to store temporary information. - operation.SetDestinations(new[] { actualLow, actualHigh, Local(OperandType.I64), Local(OperandType.I64) }); - operation.SetSources(new[] { address, expectedLow, expectedHigh, desiredLow, desiredHigh }); + operation.SetDestinations([actualLow, actualHigh, Local(OperandType.I64), Local(OperandType.I64)]); + operation.SetSources([address, expectedLow, expectedHigh, desiredLow, desiredHigh]); // Add some dummy uses of the input operands, as the CAS operation will be a loop, // so they can't be used as destination operand. @@ -486,7 +486,7 @@ namespace ARMeilleure.CodeGen.Arm64 else { // We need a additional register where the store result will be written to. - node.SetDestinations(new[] { node.Destination, Local(OperandType.I32) }); + node.SetDestinations([node.Destination, Local(OperandType.I32)]); // Add some dummy uses of the input operands, as the CAS operation will be a loop, // so they can't be used as destination operand. diff --git a/src/ARMeilleure/CodeGen/RegisterAllocators/CopyResolver.cs b/src/ARMeilleure/CodeGen/RegisterAllocators/CopyResolver.cs index af10330ba..8b135afab 100644 --- a/src/ARMeilleure/CodeGen/RegisterAllocators/CopyResolver.cs +++ b/src/ARMeilleure/CodeGen/RegisterAllocators/CopyResolver.cs @@ -31,7 +31,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators public ParallelCopy() { - _copies = new List(); + _copies = []; } public void AddCopy(Register dest, Register source, OperandType type) @@ -218,7 +218,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators public Operation[] Sequence() { - List sequence = new(); + List sequence = []; if (_spillQueue != null) { diff --git a/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs b/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs index 99e231a67..76c636b55 100644 --- a/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs +++ b/src/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs @@ -799,8 +799,8 @@ namespace ARMeilleure.CodeGen.RegisterAllocators private void NumberLocals(ControlFlowGraph cfg, int registersCount) { - _operationNodes = new List<(IntrusiveList, Operation)>(); - _intervals = new List(); + _operationNodes = []; + _intervals = []; for (int index = 0; index < registersCount; index++) { @@ -980,7 +980,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators _blockLiveIn = blkLiveIn; - _blockEdges = new HashSet(); + _blockEdges = []; // Compute lifetime intervals. int operationPos = _operationsCount; diff --git a/src/ARMeilleure/CodeGen/X86/Assembler.cs b/src/ARMeilleure/CodeGen/X86/Assembler.cs index a81976a09..46dadbfce 100644 --- a/src/ARMeilleure/CodeGen/X86/Assembler.cs +++ b/src/ARMeilleure/CodeGen/X86/Assembler.cs @@ -75,9 +75,9 @@ namespace ARMeilleure.CodeGen.X86 { _stream = stream; _labels = new Dictionary(); - _jumps = new List(); + _jumps = []; - _relocs = relocatable ? new List() : null; + _relocs = relocatable ? [] : null; } public void MarkLabel(Operand label) @@ -1419,7 +1419,7 @@ namespace ARMeilleure.CodeGen.X86 int relocOffset = 0; RelocEntry[] relocEntries = hasRelocs ? new RelocEntry[relocs.Length] - : Array.Empty(); + : []; for (int i = 0; i < jumps.Length; i++) { diff --git a/src/ARMeilleure/CodeGen/X86/CodeGenerator.cs b/src/ARMeilleure/CodeGen/X86/CodeGenerator.cs index ab8612133..1122c6940 100644 --- a/src/ARMeilleure/CodeGen/X86/CodeGenerator.cs +++ b/src/ARMeilleure/CodeGen/X86/CodeGenerator.cs @@ -1748,7 +1748,7 @@ namespace ARMeilleure.CodeGen.X86 private static UnwindInfo WritePrologue(CodeGenContext context) { - List pushEntries = new(); + List pushEntries = []; Operand rsp = Register(X86Register.Rsp); diff --git a/src/ARMeilleure/CodeGen/X86/HardwareCapabilities.cs b/src/ARMeilleure/CodeGen/X86/HardwareCapabilities.cs index 03a747071..02c0b79f2 100644 --- a/src/ARMeilleure/CodeGen/X86/HardwareCapabilities.cs +++ b/src/ARMeilleure/CodeGen/X86/HardwareCapabilities.cs @@ -40,12 +40,12 @@ namespace ARMeilleure.CodeGen.X86 return 0; } - ReadOnlySpan asmGetXcr0 = new byte[] - { + ReadOnlySpan asmGetXcr0 = + [ 0x31, 0xc9, // xor ecx, ecx 0xf, 0x01, 0xd0, // xgetbv - 0xc3, // ret - }; + 0xc3 // ret + ]; using MemoryBlock memGetXcr0 = new((ulong)asmGetXcr0.Length); diff --git a/src/ARMeilleure/CodeGen/X86/PreAllocator.cs b/src/ARMeilleure/CodeGen/X86/PreAllocator.cs index ded3f866c..915f283c7 100644 --- a/src/ARMeilleure/CodeGen/X86/PreAllocator.cs +++ b/src/ARMeilleure/CodeGen/X86/PreAllocator.cs @@ -124,13 +124,13 @@ namespace ARMeilleure.CodeGen.X86 { int stackOffset = stackAlloc.Allocate(OperandType.I32); - node.SetSources(new Operand[] { Const(stackOffset), node.GetSource(0) }); + node.SetSources([Const(stackOffset), node.GetSource(0)]); } else if (node.Intrinsic == Intrinsic.X86Stmxcsr) { int stackOffset = stackAlloc.Allocate(OperandType.I32); - node.SetSources(new Operand[] { Const(stackOffset) }); + node.SetSources([Const(stackOffset)]); } break; } @@ -253,8 +253,8 @@ namespace ARMeilleure.CodeGen.X86 node = nodes.AddAfter(node, Operation(Instruction.VectorCreateScalar, dest, rax)); nodes.AddAfter(node, Operation(Instruction.VectorInsert, dest, dest, rdx, Const(1))); - operation.SetDestinations(new Operand[] { rdx, rax }); - operation.SetSources(new Operand[] { operation.GetSource(0), rdx, rax, rcx, rbx }); + operation.SetDestinations([rdx, rax]); + operation.SetSources([operation.GetSource(0), rdx, rax, rcx, rbx]); } else { @@ -274,7 +274,7 @@ namespace ARMeilleure.CodeGen.X86 nodes.AddBefore(node, Operation(Instruction.Copy, temp, newValue)); - node.SetSources(new Operand[] { node.GetSource(0), rax, temp }); + node.SetSources([node.GetSource(0), rax, temp]); nodes.AddAfter(node, Operation(Instruction.Copy, dest, rax)); @@ -303,7 +303,7 @@ namespace ARMeilleure.CodeGen.X86 nodes.AddAfter(node, Operation(Instruction.Copy, dest, rax)); - node.SetSources(new Operand[] { rdx, rax, node.GetSource(1) }); + node.SetSources([rdx, rax, node.GetSource(1)]); node.Destination = rax; } @@ -348,7 +348,7 @@ namespace ARMeilleure.CodeGen.X86 nodes.AddAfter(node, Operation(Instruction.Copy, dest, rdx)); - node.SetDestinations(new Operand[] { rdx, rax }); + node.SetDestinations([rdx, rax]); break; } diff --git a/src/ARMeilleure/CodeGen/X86/PreAllocatorSystemV.cs b/src/ARMeilleure/CodeGen/X86/PreAllocatorSystemV.cs index e754cb09b..cff1c7240 100644 --- a/src/ARMeilleure/CodeGen/X86/PreAllocatorSystemV.cs +++ b/src/ARMeilleure/CodeGen/X86/PreAllocatorSystemV.cs @@ -14,10 +14,10 @@ namespace ARMeilleure.CodeGen.X86 { Operand dest = node.Destination; - List sources = new() - { - node.GetSource(0), - }; + List sources = + [ + node.GetSource(0) + ]; int argsCount = node.SourcesCount - 1; @@ -117,10 +117,10 @@ namespace ARMeilleure.CodeGen.X86 public static void InsertTailcallCopies(IntrusiveList nodes, Operation node) { - List sources = new() - { - node.GetSource(0), - }; + List sources = + [ + node.GetSource(0) + ]; int argsCount = node.SourcesCount - 1; diff --git a/src/ARMeilleure/CodeGen/X86/PreAllocatorWindows.cs b/src/ARMeilleure/CodeGen/X86/PreAllocatorWindows.cs index 10a2bd129..52f72ac69 100644 --- a/src/ARMeilleure/CodeGen/X86/PreAllocatorWindows.cs +++ b/src/ARMeilleure/CodeGen/X86/PreAllocatorWindows.cs @@ -321,7 +321,7 @@ namespace ARMeilleure.CodeGen.X86 nodes.AddBefore(node, retCopyOp); } - node.SetSources(Array.Empty()); + node.SetSources([]); } } } diff --git a/src/ARMeilleure/Common/AddressTablePresets.cs b/src/ARMeilleure/Common/AddressTablePresets.cs index 977e84a36..fd786fc7e 100644 --- a/src/ARMeilleure/Common/AddressTablePresets.cs +++ b/src/ARMeilleure/Common/AddressTablePresets.cs @@ -3,52 +3,46 @@ namespace ARMeilleure.Common public static class AddressTablePresets { private static readonly AddressTableLevel[] _levels64Bit = - new AddressTableLevel[] - { - new(31, 17), + [ + new(31, 17), new(23, 8), new(15, 8), new( 7, 8), - new( 2, 5), - }; + new( 2, 5) + ]; private static readonly AddressTableLevel[] _levels32Bit = - new AddressTableLevel[] - { - new(31, 17), + [ + new(31, 17), new(23, 8), new(15, 8), new( 7, 8), - new( 1, 6), - }; + new( 1, 6) + ]; private static readonly AddressTableLevel[] _levels64BitSparseTiny = - new AddressTableLevel[] - { - new( 11, 28), - new( 2, 9), - }; + [ + new( 11, 28), + new( 2, 9) + ]; private static readonly AddressTableLevel[] _levels32BitSparseTiny = - new AddressTableLevel[] - { - new( 10, 22), - new( 1, 9), - }; + [ + new( 10, 22), + new( 1, 9) + ]; private static readonly AddressTableLevel[] _levels64BitSparseGiant = - new AddressTableLevel[] - { - new( 38, 1), - new( 2, 36), - }; + [ + new( 38, 1), + new( 2, 36) + ]; private static readonly AddressTableLevel[] _levels32BitSparseGiant = - new AddressTableLevel[] - { - new( 31, 1), - new( 1, 30), - }; + [ + new( 31, 1), + new( 1, 30) + ]; //high power will run worse on DDR3 systems and some DDR4 systems due to the higher ram utilization //low power will never run worse than non-sparse, but for most systems it won't be necessary diff --git a/src/ARMeilleure/Common/BitUtils.cs b/src/ARMeilleure/Common/BitUtils.cs index e7697ff31..7e2ed7f60 100644 --- a/src/ARMeilleure/Common/BitUtils.cs +++ b/src/ARMeilleure/Common/BitUtils.cs @@ -5,7 +5,7 @@ namespace ARMeilleure.Common { static class BitUtils { - private static ReadOnlySpan HbsNibbleLut => new sbyte[] { -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 }; + private static ReadOnlySpan HbsNibbleLut => [-1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3]; public static long FillWithOnes(int bits) { diff --git a/src/ARMeilleure/Decoders/Block.cs b/src/ARMeilleure/Decoders/Block.cs index bb88170da..3ece552ec 100644 --- a/src/ARMeilleure/Decoders/Block.cs +++ b/src/ARMeilleure/Decoders/Block.cs @@ -17,7 +17,7 @@ namespace ARMeilleure.Decoders public Block() { - OpCodes = new List(); + OpCodes = []; } public Block(ulong address) : this() diff --git a/src/ARMeilleure/Decoders/Decoder.cs b/src/ARMeilleure/Decoders/Decoder.cs index 66d286928..3946e2f2e 100644 --- a/src/ARMeilleure/Decoders/Decoder.cs +++ b/src/ARMeilleure/Decoders/Decoder.cs @@ -20,7 +20,7 @@ namespace ARMeilleure.Decoders public static Block[] Decode(IMemoryManager memory, ulong address, ExecutionMode mode, bool highCq, DecoderMode dMode) { - List blocks = new(); + List blocks = []; Queue workQueue = new(); diff --git a/src/ARMeilleure/Decoders/OpCode32SimdMemPair.cs b/src/ARMeilleure/Decoders/OpCode32SimdMemPair.cs index 6a18211c6..b35ac039b 100644 --- a/src/ARMeilleure/Decoders/OpCode32SimdMemPair.cs +++ b/src/ARMeilleure/Decoders/OpCode32SimdMemPair.cs @@ -5,12 +5,12 @@ namespace ARMeilleure.Decoders class OpCode32SimdMemPair : OpCode32, IOpCode32Simd { private static readonly int[] _regsMap = - { + [ 1, 1, 4, 2, 1, 1, 3, 1, 1, 1, 2, 1, - 1, 1, 1, 1, - }; + 1, 1, 1, 1 + ]; public int Vd { get; } public int Rn { get; } diff --git a/src/ARMeilleure/Decoders/OpCodeT16IfThen.cs b/src/ARMeilleure/Decoders/OpCodeT16IfThen.cs index ea435a79b..2aa22a431 100644 --- a/src/ARMeilleure/Decoders/OpCodeT16IfThen.cs +++ b/src/ARMeilleure/Decoders/OpCodeT16IfThen.cs @@ -12,7 +12,7 @@ namespace ARMeilleure.Decoders public OpCodeT16IfThen(InstDescriptor inst, ulong address, int opCode) : base(inst, address, opCode) { - List conds = new(); + List conds = []; int cond = (opCode >> 4) & 0xf; int mask = opCode & 0xf; diff --git a/src/ARMeilleure/Decoders/OpCodeTable.cs b/src/ARMeilleure/Decoders/OpCodeTable.cs index 20d567fe5..d5e630f9b 100644 --- a/src/ARMeilleure/Decoders/OpCodeTable.cs +++ b/src/ARMeilleure/Decoders/OpCodeTable.cs @@ -29,9 +29,9 @@ namespace ARMeilleure.Decoders } } - private static readonly List _allInstA32 = new(); - private static readonly List _allInstT32 = new(); - private static readonly List _allInstA64 = new(); + private static readonly List _allInstA32 = []; + private static readonly List _allInstT32 = []; + private static readonly List _allInstA64 = []; private static readonly InstInfo[][] _instA32FastLookup = new InstInfo[FastLookupSize][]; private static readonly InstInfo[][] _instT32FastLookup = new InstInfo[FastLookupSize][]; @@ -1330,7 +1330,7 @@ namespace ARMeilleure.Decoders for (int index = 0; index < temp.Length; index++) { - temp[index] = new List(); + temp[index] = []; } foreach (InstInfo inst in allInsts) diff --git a/src/ARMeilleure/Diagnostics/Symbols.cs b/src/ARMeilleure/Diagnostics/Symbols.cs index be74d2b5b..c2ff06e6c 100644 --- a/src/ARMeilleure/Diagnostics/Symbols.cs +++ b/src/ARMeilleure/Diagnostics/Symbols.cs @@ -29,7 +29,7 @@ namespace ARMeilleure.Diagnostics static Symbols() { _symbols = new ConcurrentDictionary(); - _rangedSymbols = new List(); + _rangedSymbols = []; } public static string Get(ulong address) diff --git a/src/ARMeilleure/Instructions/CryptoHelper.cs b/src/ARMeilleure/Instructions/CryptoHelper.cs index ba68cebb3..046a9bb6d 100644 --- a/src/ARMeilleure/Instructions/CryptoHelper.cs +++ b/src/ARMeilleure/Instructions/CryptoHelper.cs @@ -9,8 +9,8 @@ namespace ARMeilleure.Instructions { #region "LookUp Tables" #pragma warning disable IDE1006 // Naming rule violation - private static ReadOnlySpan _sBox => new byte[] - { + private static ReadOnlySpan _sBox => + [ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, @@ -26,11 +26,11 @@ namespace ARMeilleure.Instructions 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, - 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16, - }; + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 + ]; - private static ReadOnlySpan _invSBox => new byte[] - { + private static ReadOnlySpan _invSBox => + [ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, @@ -46,11 +46,11 @@ namespace ARMeilleure.Instructions 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, - 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d, - }; + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d + ]; - private static ReadOnlySpan _gfMul02 => new byte[] - { + private static ReadOnlySpan _gfMul02 => + [ 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, @@ -66,11 +66,11 @@ namespace ARMeilleure.Instructions 0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85, 0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, 0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5, - 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5, - }; + 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5 + ]; - private static ReadOnlySpan _gfMul03 => new byte[] - { + private static ReadOnlySpan _gfMul03 => + [ 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, @@ -86,11 +86,11 @@ namespace ARMeilleure.Instructions 0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a, 0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62, 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a, 0x3b, 0x38, 0x3d, 0x3e, 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a, - 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a, - }; + 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a + ]; - private static ReadOnlySpan _gfMul09 => new byte[] - { + private static ReadOnlySpan _gfMul09 => + [ 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, @@ -106,11 +106,11 @@ namespace ARMeilleure.Instructions 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, 0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, - 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46, - }; + 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46 + ]; - private static ReadOnlySpan _gfMul0B => new byte[] - { + private static ReadOnlySpan _gfMul0B => + [ 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, @@ -126,11 +126,11 @@ namespace ARMeilleure.Instructions 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, 0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, - 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3, - }; + 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3 + ]; - private static ReadOnlySpan _gfMul0D => new byte[] - { + private static ReadOnlySpan _gfMul0D => + [ 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, 0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, @@ -146,11 +146,11 @@ namespace ARMeilleure.Instructions 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, 0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, - 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97, - }; + 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97 + ]; - private static ReadOnlySpan _gfMul0E => new byte[] - { + private static ReadOnlySpan _gfMul0E => + [ 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, 0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, @@ -166,18 +166,18 @@ namespace ARMeilleure.Instructions 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, - 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d, - }; + 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d + ]; - private static ReadOnlySpan _srPerm => new byte[] - { - 0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3, - }; + private static ReadOnlySpan _srPerm => + [ + 0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3 + ]; - private static ReadOnlySpan _isrPerm => new byte[] - { - 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11, - }; + private static ReadOnlySpan _isrPerm => + [ + 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11 + ]; #pragma warning restore IDE1006 #endregion diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs b/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs index d3fafc856..c35ffede4 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs @@ -245,8 +245,8 @@ namespace ARMeilleure.Instructions string name = nameof(Math.Round); MethodInfo info = (op.Size & 1) == 0 - ? typeof(MathF).GetMethod(name, new Type[] { typeof(float), typeof(MidpointRounding) }) - : typeof(Math).GetMethod(name, new Type[] { typeof(double), typeof(MidpointRounding) }); + ? typeof(MathF).GetMethod(name, [typeof(float), typeof(MidpointRounding)]) + : typeof(Math).GetMethod(name, [typeof(double), typeof(MidpointRounding)]); return context.Call(info, n, Const((int)roundMode)); } diff --git a/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs b/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs index 634e5c18b..d86830f70 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs @@ -18,19 +18,19 @@ namespace ARMeilleure.Instructions static class InstEmitSimdHelper { #region "Masks" - public static readonly long[] EvenMasks = new long[] - { + public static readonly long[] EvenMasks = + [ 14L << 56 | 12L << 48 | 10L << 40 | 08L << 32 | 06L << 24 | 04L << 16 | 02L << 8 | 00L << 0, // B 13L << 56 | 12L << 48 | 09L << 40 | 08L << 32 | 05L << 24 | 04L << 16 | 01L << 8 | 00L << 0, // H - 11L << 56 | 10L << 48 | 09L << 40 | 08L << 32 | 03L << 24 | 02L << 16 | 01L << 8 | 00L << 0, // S - }; + 11L << 56 | 10L << 48 | 09L << 40 | 08L << 32 | 03L << 24 | 02L << 16 | 01L << 8 | 00L << 0 // S + ]; - public static readonly long[] OddMasks = new long[] - { + public static readonly long[] OddMasks = + [ 15L << 56 | 13L << 48 | 11L << 40 | 09L << 32 | 07L << 24 | 05L << 16 | 03L << 8 | 01L << 0, // B 15L << 56 | 14L << 48 | 11L << 40 | 10L << 32 | 07L << 24 | 06L << 16 | 03L << 8 | 02L << 0, // H - 15L << 56 | 14L << 48 | 13L << 40 | 12L << 32 | 07L << 24 | 06L << 16 | 05L << 8 | 04L << 0, // S - }; + 15L << 56 | 14L << 48 | 13L << 40 | 12L << 32 | 07L << 24 | 06L << 16 | 05L << 8 | 04L << 0 // S + ]; public const long ZeroMask = 128L << 56 | 128L << 48 | 128L << 40 | 128L << 32 | 128L << 24 | 128L << 16 | 128L << 8 | 128L << 0; @@ -44,118 +44,118 @@ namespace ARMeilleure.Instructions #endregion #region "X86 SSE Intrinsics" - public static readonly Intrinsic[] X86PaddInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PaddInstruction = + [ Intrinsic.X86Paddb, Intrinsic.X86Paddw, Intrinsic.X86Paddd, - Intrinsic.X86Paddq, - }; + Intrinsic.X86Paddq + ]; - public static readonly Intrinsic[] X86PcmpeqInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PcmpeqInstruction = + [ Intrinsic.X86Pcmpeqb, Intrinsic.X86Pcmpeqw, Intrinsic.X86Pcmpeqd, - Intrinsic.X86Pcmpeqq, - }; + Intrinsic.X86Pcmpeqq + ]; - public static readonly Intrinsic[] X86PcmpgtInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PcmpgtInstruction = + [ Intrinsic.X86Pcmpgtb, Intrinsic.X86Pcmpgtw, Intrinsic.X86Pcmpgtd, - Intrinsic.X86Pcmpgtq, - }; + Intrinsic.X86Pcmpgtq + ]; - public static readonly Intrinsic[] X86PmaxsInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PmaxsInstruction = + [ Intrinsic.X86Pmaxsb, Intrinsic.X86Pmaxsw, - Intrinsic.X86Pmaxsd, - }; + Intrinsic.X86Pmaxsd + ]; - public static readonly Intrinsic[] X86PmaxuInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PmaxuInstruction = + [ Intrinsic.X86Pmaxub, Intrinsic.X86Pmaxuw, - Intrinsic.X86Pmaxud, - }; + Intrinsic.X86Pmaxud + ]; - public static readonly Intrinsic[] X86PminsInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PminsInstruction = + [ Intrinsic.X86Pminsb, Intrinsic.X86Pminsw, - Intrinsic.X86Pminsd, - }; + Intrinsic.X86Pminsd + ]; - public static readonly Intrinsic[] X86PminuInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PminuInstruction = + [ Intrinsic.X86Pminub, Intrinsic.X86Pminuw, - Intrinsic.X86Pminud, - }; + Intrinsic.X86Pminud + ]; - public static readonly Intrinsic[] X86PmovsxInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PmovsxInstruction = + [ Intrinsic.X86Pmovsxbw, Intrinsic.X86Pmovsxwd, - Intrinsic.X86Pmovsxdq, - }; + Intrinsic.X86Pmovsxdq + ]; - public static readonly Intrinsic[] X86PmovzxInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PmovzxInstruction = + [ Intrinsic.X86Pmovzxbw, Intrinsic.X86Pmovzxwd, - Intrinsic.X86Pmovzxdq, - }; + Intrinsic.X86Pmovzxdq + ]; - public static readonly Intrinsic[] X86PsllInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PsllInstruction = + [ 0, Intrinsic.X86Psllw, Intrinsic.X86Pslld, - Intrinsic.X86Psllq, - }; + Intrinsic.X86Psllq + ]; - public static readonly Intrinsic[] X86PsraInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PsraInstruction = + [ 0, Intrinsic.X86Psraw, - Intrinsic.X86Psrad, - }; + Intrinsic.X86Psrad + ]; - public static readonly Intrinsic[] X86PsrlInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PsrlInstruction = + [ 0, Intrinsic.X86Psrlw, Intrinsic.X86Psrld, - Intrinsic.X86Psrlq, - }; + Intrinsic.X86Psrlq + ]; - public static readonly Intrinsic[] X86PsubInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PsubInstruction = + [ Intrinsic.X86Psubb, Intrinsic.X86Psubw, Intrinsic.X86Psubd, - Intrinsic.X86Psubq, - }; + Intrinsic.X86Psubq + ]; - public static readonly Intrinsic[] X86PunpckhInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PunpckhInstruction = + [ Intrinsic.X86Punpckhbw, Intrinsic.X86Punpckhwd, Intrinsic.X86Punpckhdq, - Intrinsic.X86Punpckhqdq, - }; + Intrinsic.X86Punpckhqdq + ]; - public static readonly Intrinsic[] X86PunpcklInstruction = new Intrinsic[] - { + public static readonly Intrinsic[] X86PunpcklInstruction = + [ Intrinsic.X86Punpcklbw, Intrinsic.X86Punpcklwd, Intrinsic.X86Punpckldq, - Intrinsic.X86Punpcklqdq, - }; + Intrinsic.X86Punpcklqdq + ]; #endregion public static void EnterArmFpMode(EmitterContext context, Func getFpFlag) @@ -460,8 +460,8 @@ namespace ARMeilleure.Instructions IOpCodeSimd op = (IOpCodeSimd)context.CurrOp; MethodInfo info = (op.Size & 1) == 0 - ? typeof(MathHelperF).GetMethod(name, new Type[] { typeof(float) }) - : typeof(MathHelper).GetMethod(name, new Type[] { typeof(double) }); + ? typeof(MathHelperF).GetMethod(name, [typeof(float)]) + : typeof(MathHelper).GetMethod(name, [typeof(double)]); return context.Call(info, n); } @@ -473,8 +473,8 @@ namespace ARMeilleure.Instructions string name = nameof(MathHelper.Round); MethodInfo info = (op.Size & 1) == 0 - ? typeof(MathHelperF).GetMethod(name, new Type[] { typeof(float), typeof(int) }) - : typeof(MathHelper).GetMethod(name, new Type[] { typeof(double), typeof(int) }); + ? typeof(MathHelperF).GetMethod(name, [typeof(float), typeof(int)]) + : typeof(MathHelper).GetMethod(name, [typeof(double), typeof(int)]); return context.Call(info, n, Const((int)roundMode)); } diff --git a/src/ARMeilleure/Instructions/InstEmitSimdMove.cs b/src/ARMeilleure/Instructions/InstEmitSimdMove.cs index 85c98fe3a..8b243d498 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdMove.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdMove.cs @@ -12,17 +12,17 @@ namespace ARMeilleure.Instructions static partial class InstEmit { #region "Masks" - private static readonly long[] _masksE0_Uzp = new long[] - { + private static readonly long[] _masksE0_Uzp = + [ 13L << 56 | 09L << 48 | 05L << 40 | 01L << 32 | 12L << 24 | 08L << 16 | 04L << 8 | 00L << 0, - 11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0, - }; + 11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0 + ]; - private static readonly long[] _masksE1_Uzp = new long[] - { + private static readonly long[] _masksE1_Uzp = + [ 15L << 56 | 11L << 48 | 07L << 40 | 03L << 32 | 14L << 24 | 10L << 16 | 06L << 8 | 02L << 0, - 15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0, - }; + 15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0 + ]; #endregion public static void Dup_Gp(ArmEmitterContext context) @@ -601,7 +601,7 @@ namespace ARMeilleure.Instructions { Operand d = GetVec(op.Rd); - List args = new(); + List args = []; if (!isTbl) { diff --git a/src/ARMeilleure/Instructions/InstEmitSimdMove32.cs b/src/ARMeilleure/Instructions/InstEmitSimdMove32.cs index fb2641f66..3e869bcff 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdMove32.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdMove32.cs @@ -13,17 +13,17 @@ namespace ARMeilleure.Instructions { #region "Masks" // Same as InstEmitSimdMove, as the instructions do the same thing. - private static readonly long[] _masksE0_Uzp = new long[] - { + private static readonly long[] _masksE0_Uzp = + [ 13L << 56 | 09L << 48 | 05L << 40 | 01L << 32 | 12L << 24 | 08L << 16 | 04L << 8 | 00L << 0, - 11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0, - }; + 11L << 56 | 10L << 48 | 03L << 40 | 02L << 32 | 09L << 24 | 08L << 16 | 01L << 8 | 00L << 0 + ]; - private static readonly long[] _masksE1_Uzp = new long[] - { + private static readonly long[] _masksE1_Uzp = + [ 15L << 56 | 11L << 48 | 07L << 40 | 03L << 32 | 14L << 24 | 10L << 16 | 06L << 8 | 02L << 0, - 15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0, - }; + 15L << 56 | 14L << 48 | 07L << 40 | 06L << 32 | 13L << 24 | 12L << 16 | 05L << 8 | 04L << 0 + ]; #endregion public static void Vmov_I(ArmEmitterContext context) diff --git a/src/ARMeilleure/Instructions/InstEmitSimdShift.cs b/src/ARMeilleure/Instructions/InstEmitSimdShift.cs index 94e912579..ee7340adb 100644 --- a/src/ARMeilleure/Instructions/InstEmitSimdShift.cs +++ b/src/ARMeilleure/Instructions/InstEmitSimdShift.cs @@ -17,10 +17,10 @@ namespace ARMeilleure.Instructions static partial class InstEmit { #region "Masks" - private static readonly long[] _masks_SliSri = new long[] // Replication masks. - { - 0x0101010101010101L, 0x0001000100010001L, 0x0000000100000001L, 0x0000000000000001L, - }; + private static readonly long[] _masks_SliSri = + [ + 0x0101010101010101L, 0x0001000100010001L, 0x0000000100000001L, 0x0000000000000001L + ]; #endregion public static void Rshrn_V(ArmEmitterContext context) diff --git a/src/ARMeilleure/Instructions/SoftFallback.cs b/src/ARMeilleure/Instructions/SoftFallback.cs index 178be6f79..c227156e5 100644 --- a/src/ARMeilleure/Instructions/SoftFallback.cs +++ b/src/ARMeilleure/Instructions/SoftFallback.cs @@ -211,7 +211,7 @@ namespace ARMeilleure.Instructions return (ulong)(size - 1); } - private static ReadOnlySpan ClzNibbleTbl => new byte[] { 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }; + private static ReadOnlySpan ClzNibbleTbl => [4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]; [UnmanagedCallersOnly] public static ulong CountLeadingZeros(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.). diff --git a/src/ARMeilleure/IntermediateRepresentation/BasicBlock.cs b/src/ARMeilleure/IntermediateRepresentation/BasicBlock.cs index 810461d7c..c0548f4cb 100644 --- a/src/ARMeilleure/IntermediateRepresentation/BasicBlock.cs +++ b/src/ARMeilleure/IntermediateRepresentation/BasicBlock.cs @@ -27,7 +27,7 @@ namespace ARMeilleure.IntermediateRepresentation { get { - _domFrontiers ??= new HashSet(); + _domFrontiers ??= []; return _domFrontiers; } @@ -38,7 +38,7 @@ namespace ARMeilleure.IntermediateRepresentation public BasicBlock(int index) { Operations = new IntrusiveList(); - Predecessors = new List(); + Predecessors = []; Index = index; } diff --git a/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs b/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs index 35747d7a4..0b90252bc 100644 --- a/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs +++ b/src/ARMeilleure/Signal/NativeSignalHandlerGenerator.cs @@ -198,7 +198,7 @@ namespace ARMeilleure.Signal ControlFlowGraph cfg = context.GetControlFlowGraph(); - OperandType[] argTypes = new OperandType[] { OperandType.I32, OperandType.I64, OperandType.I64 }; + OperandType[] argTypes = [OperandType.I32, OperandType.I64, OperandType.I64]; return Compiler.Compile(cfg, argTypes, OperandType.None, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Code; } @@ -252,7 +252,7 @@ namespace ARMeilleure.Signal ControlFlowGraph cfg = context.GetControlFlowGraph(); - OperandType[] argTypes = new OperandType[] { OperandType.I64 }; + OperandType[] argTypes = [OperandType.I64]; return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Code; } diff --git a/src/ARMeilleure/Signal/TestMethods.cs b/src/ARMeilleure/Signal/TestMethods.cs index 714bcc01b..5f9f456bc 100644 --- a/src/ARMeilleure/Signal/TestMethods.cs +++ b/src/ARMeilleure/Signal/TestMethods.cs @@ -30,7 +30,7 @@ namespace ARMeilleure.Signal ControlFlowGraph cfg = context.GetControlFlowGraph(); - OperandType[] argTypes = new OperandType[] { OperandType.I64 }; + OperandType[] argTypes = [OperandType.I64]; return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); } @@ -47,7 +47,7 @@ namespace ARMeilleure.Signal ControlFlowGraph cfg = context.GetControlFlowGraph(); - OperandType[] argTypes = new OperandType[] { OperandType.I64 }; + OperandType[] argTypes = [OperandType.I64]; return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); } @@ -76,7 +76,7 @@ namespace ARMeilleure.Signal ControlFlowGraph cfg = context.GetControlFlowGraph(); - OperandType[] argTypes = new OperandType[] { OperandType.I64 }; + OperandType[] argTypes = [OperandType.I64]; return Compiler.Compile(cfg, argTypes, OperandType.None, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); } diff --git a/src/ARMeilleure/Translation/ArmEmitterContext.cs b/src/ARMeilleure/Translation/ArmEmitterContext.cs index 82f12bb02..5d09783ff 100644 --- a/src/ARMeilleure/Translation/ArmEmitterContext.cs +++ b/src/ARMeilleure/Translation/ArmEmitterContext.cs @@ -55,7 +55,7 @@ namespace ARMeilleure.Translation public Aarch32Mode Mode { get; } private int _ifThenBlockStateIndex = 0; - private Condition[] _ifThenBlockState = Array.Empty(); + private Condition[] _ifThenBlockState = []; public bool IsInIfThenBlock => _ifThenBlockStateIndex < _ifThenBlockState.Length; public Condition CurrentIfThenBlockCond => _ifThenBlockState[_ifThenBlockStateIndex]; diff --git a/src/ARMeilleure/Translation/Cache/CacheMemoryAllocator.cs b/src/ARMeilleure/Translation/Cache/CacheMemoryAllocator.cs index f36bf7a3d..9c5ca29df 100644 --- a/src/ARMeilleure/Translation/Cache/CacheMemoryAllocator.cs +++ b/src/ARMeilleure/Translation/Cache/CacheMemoryAllocator.cs @@ -23,7 +23,7 @@ namespace ARMeilleure.Translation.Cache } } - private readonly List _blocks = new(); + private readonly List _blocks = []; public CacheMemoryAllocator(int capacity) { diff --git a/src/ARMeilleure/Translation/Cache/JitCache.cs b/src/ARMeilleure/Translation/Cache/JitCache.cs index 3bbec482c..d7e8201d8 100644 --- a/src/ARMeilleure/Translation/Cache/JitCache.cs +++ b/src/ARMeilleure/Translation/Cache/JitCache.cs @@ -25,7 +25,7 @@ namespace ARMeilleure.Translation.Cache private static CacheMemoryAllocator _cacheAllocator; - private static readonly List _cacheEntries = new(); + private static readonly List _cacheEntries = []; private static readonly Lock _lock = new(); private static bool _initialized; diff --git a/src/ARMeilleure/Translation/Cache/JitCacheInvalidation.cs b/src/ARMeilleure/Translation/Cache/JitCacheInvalidation.cs index 6f9c22b4a..e24f5e864 100644 --- a/src/ARMeilleure/Translation/Cache/JitCacheInvalidation.cs +++ b/src/ARMeilleure/Translation/Cache/JitCacheInvalidation.cs @@ -6,8 +6,8 @@ namespace ARMeilleure.Translation.Cache { class JitCacheInvalidation { - private static readonly int[] _invalidationCode = new int[] - { + private static readonly int[] _invalidationCode = + [ unchecked((int)0xd53b0022), // mrs x2, ctr_el0 unchecked((int)0xd3504c44), // ubfx x4, x2, #16, #4 unchecked((int)0x52800083), // mov w3, #0x4 @@ -35,8 +35,8 @@ namespace ARMeilleure.Translation.Cache unchecked((int)0x54ffffa8), // b.hi 54 unchecked((int)0xd5033b9f), // dsb ish unchecked((int)0xd5033fdf), // isb - unchecked((int)0xd65f03c0), // ret - }; + unchecked((int)0xd65f03c0) // ret + ]; private delegate void InvalidateCache(ulong start, ulong end); diff --git a/src/ARMeilleure/Translation/ControlFlowGraph.cs b/src/ARMeilleure/Translation/ControlFlowGraph.cs index c9946d392..b1255e810 100644 --- a/src/ARMeilleure/Translation/ControlFlowGraph.cs +++ b/src/ARMeilleure/Translation/ControlFlowGraph.cs @@ -47,7 +47,7 @@ namespace ARMeilleure.Translation { RemoveUnreachableBlocks(Blocks); - HashSet visited = new(); + HashSet visited = []; Stack blockStack = new(); Array.Resize(ref _postOrderBlocks, Blocks.Count); @@ -88,7 +88,7 @@ namespace ARMeilleure.Translation private void RemoveUnreachableBlocks(IntrusiveList blocks) { - HashSet visited = new(); + HashSet visited = []; Queue workQueue = new(); visited.Add(Entry); diff --git a/src/ARMeilleure/Translation/IntervalTree.cs b/src/ARMeilleure/Translation/IntervalTree.cs index a5f9b5d5e..2fa431a8b 100644 --- a/src/ARMeilleure/Translation/IntervalTree.cs +++ b/src/ARMeilleure/Translation/IntervalTree.cs @@ -108,7 +108,7 @@ namespace ARMeilleure.Translation /// A list of all values sorted by Key Order public List AsList() { - List list = new(); + List list = []; AddToList(_root, list); diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index 7a0bb750e..b53fdd4df 100644 --- a/src/ARMeilleure/Translation/PTC/Ptc.cs +++ b/src/ARMeilleure/Translation/PTC/Ptc.cs @@ -154,7 +154,7 @@ namespace ARMeilleure.Translation.PTC private void InitializeCarriers() { _infosStream = MemoryStreamManager.Shared.GetStream(); - _codesList = new List(); + _codesList = []; _relocsStream = MemoryStreamManager.Shared.GetStream(); _unwindInfosStream = MemoryStreamManager.Shared.GetStream(); } @@ -765,7 +765,7 @@ namespace ARMeilleure.Translation.PTC private void StubCode(int index) { - _codesList[index] = Array.Empty(); + _codesList[index] = []; } private void StubReloc(int relocEntriesCount) diff --git a/src/ARMeilleure/Translation/PTC/PtcFormatter.cs b/src/ARMeilleure/Translation/PTC/PtcFormatter.cs index 60953dcd9..92b3248c6 100644 --- a/src/ARMeilleure/Translation/PTC/PtcFormatter.cs +++ b/src/ARMeilleure/Translation/PTC/PtcFormatter.cs @@ -50,7 +50,7 @@ namespace ARMeilleure.Translation.PTC [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List DeserializeList(Stream stream) where T : struct { - List list = new(); + List list = []; int count = DeserializeStructure(stream); diff --git a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs index 051f8a5d0..21987f72d 100644 --- a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs +++ b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs @@ -26,9 +26,10 @@ namespace ARMeilleure.Translation.PTC private const uint InternalVersion = 5518; //! Not to be incremented manually for each change to the ARMeilleure project. - private static readonly uint[] _migrateInternalVersions = { - 1866, - }; + private static readonly uint[] _migrateInternalVersions = + [ + 1866 + ]; private const int SaveInterval = 30; // Seconds. diff --git a/src/ARMeilleure/Translation/Translator.cs b/src/ARMeilleure/Translation/Translator.cs index 77fdf949c..0f18c8045 100644 --- a/src/ARMeilleure/Translation/Translator.cs +++ b/src/ARMeilleure/Translation/Translator.cs @@ -260,7 +260,7 @@ namespace ARMeilleure.Translation Logger.EndPass(PassName.RegisterUsage); OperandType retType = OperandType.I64; - OperandType[] argTypes = new OperandType[] { OperandType.I64 }; + OperandType[] argTypes = [OperandType.I64]; CompilerOptions options = highCq ? CompilerOptions.HighCq : CompilerOptions.None; @@ -478,7 +478,7 @@ namespace ARMeilleure.Translation public void InvalidateJitCacheRegion(ulong address, ulong size) { - ulong[] overlapAddresses = Array.Empty(); + ulong[] overlapAddresses = []; int overlapsCount = Functions.GetOverlaps(address, size, ref overlapAddresses); diff --git a/src/ARMeilleure/Translation/TranslatorQueue.cs b/src/ARMeilleure/Translation/TranslatorQueue.cs index 831522bc1..ba261eaa5 100644 --- a/src/ARMeilleure/Translation/TranslatorQueue.cs +++ b/src/ARMeilleure/Translation/TranslatorQueue.cs @@ -36,7 +36,7 @@ namespace ARMeilleure.Translation Sync = new object(); _requests = new Stack(); - _requestAddresses = new HashSet(); + _requestAddresses = []; } /// diff --git a/src/ARMeilleure/Translation/TranslatorStubs.cs b/src/ARMeilleure/Translation/TranslatorStubs.cs index f149c1397..f719dba31 100644 --- a/src/ARMeilleure/Translation/TranslatorStubs.cs +++ b/src/ARMeilleure/Translation/TranslatorStubs.cs @@ -187,7 +187,7 @@ namespace ARMeilleure.Translation ControlFlowGraph cfg = context.GetControlFlowGraph(); OperandType retType = OperandType.I64; - OperandType[] argTypes = new[] { OperandType.I64 }; + OperandType[] argTypes = [OperandType.I64]; GuestFunction func = Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); @@ -212,7 +212,7 @@ namespace ARMeilleure.Translation ControlFlowGraph cfg = context.GetControlFlowGraph(); OperandType retType = OperandType.I64; - OperandType[] argTypes = new[] { OperandType.I64 }; + OperandType[] argTypes = [OperandType.I64]; GuestFunction func = Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); @@ -281,7 +281,7 @@ namespace ARMeilleure.Translation ControlFlowGraph cfg = context.GetControlFlowGraph(); OperandType retType = OperandType.None; - OperandType[] argTypes = new[] { OperandType.I64, OperandType.I64 }; + OperandType[] argTypes = [OperandType.I64, OperandType.I64]; return Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); } @@ -305,7 +305,7 @@ namespace ARMeilleure.Translation ControlFlowGraph cfg = context.GetControlFlowGraph(); OperandType retType = OperandType.I64; - OperandType[] argTypes = new[] { OperandType.I64, OperandType.I64 }; + OperandType[] argTypes = [OperandType.I64, OperandType.I64]; return Compiler.Compile(cfg, argTypes, retType, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); } diff --git a/src/ARMeilleure/Translation/TranslatorTestMethods.cs b/src/ARMeilleure/Translation/TranslatorTestMethods.cs index 186780daa..5f15cf550 100644 --- a/src/ARMeilleure/Translation/TranslatorTestMethods.cs +++ b/src/ARMeilleure/Translation/TranslatorTestMethods.cs @@ -139,7 +139,7 @@ namespace ARMeilleure.Translation ControlFlowGraph cfg = context.GetControlFlowGraph(); - OperandType[] argTypes = new OperandType[] { OperandType.I64 }; + OperandType[] argTypes = [OperandType.I64]; return Compiler.Compile(cfg, argTypes, OperandType.I32, CompilerOptions.HighCq, RuntimeInformation.ProcessArchitecture).Map(); } -- 2.47.1 From ed2590a8ac54060ab172de17a63a02fe2c302ddc Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:32:25 -0600 Subject: [PATCH 465/722] misc: chore: Use collection expressions in Vulkan project --- src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs | 6 +- src/Ryujinx.Graphics.Vulkan/BufferHolder.cs | 2 +- .../BufferMirrorRangeList.cs | 5 +- src/Ryujinx.Graphics.Vulkan/CacheByRange.cs | 6 +- .../CommandBufferPool.cs | 4 +- .../DescriptorSetUpdater.cs | 10 +- .../Effects/AreaScalingFilter.cs | 17 +- .../Effects/FsrScalingFilter.cs | 28 ++- .../Effects/FxaaPostProcessingEffect.cs | 11 +- .../Effects/SmaaPostProcessingEffect.cs | 25 +-- src/Ryujinx.Graphics.Vulkan/FenceHolder.cs | 8 +- .../FormatCapabilities.cs | 14 +- .../FramebufferParams.cs | 10 +- src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs | 8 +- src/Ryujinx.Graphics.Vulkan/HelperShader.cs | 208 ++++++++---------- .../HostMemoryAllocator.cs | 2 +- src/Ryujinx.Graphics.Vulkan/IdList.cs | 2 +- src/Ryujinx.Graphics.Vulkan/ImageArray.cs | 2 +- .../MemoryAllocator.cs | 2 +- .../MemoryAllocatorBlockList.cs | 10 +- .../MoltenVK/MVKInitialization.cs | 2 +- src/Ryujinx.Graphics.Vulkan/PipelineBase.cs | 4 +- src/Ryujinx.Graphics.Vulkan/PipelineFull.cs | 8 +- .../PipelineLayoutCacheEntry.cs | 4 +- .../RenderPassHolder.cs | 2 +- .../ResourceLayoutBuilder.cs | 4 +- .../ShaderCollection.cs | 6 +- src/Ryujinx.Graphics.Vulkan/SyncManager.cs | 2 +- src/Ryujinx.Graphics.Vulkan/TextureArray.cs | 2 +- .../VulkanInitialization.cs | 20 +- src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | 10 +- src/Ryujinx.Graphics.Vulkan/Window.cs | 8 +- 32 files changed, 212 insertions(+), 240 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs b/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs index 75398b877..251f74319 100644 --- a/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs +++ b/src/Ryujinx.Graphics.Vulkan/BarrierBatch.cs @@ -19,9 +19,9 @@ namespace Ryujinx.Graphics.Vulkan private readonly NativeArray _bufferBarrierBatch = new(MaxBarriersPerCall); private readonly NativeArray _imageBarrierBatch = new(MaxBarriersPerCall); - private readonly List> _memoryBarriers = new(); - private readonly List> _bufferBarriers = new(); - private readonly List> _imageBarriers = new(); + private readonly List> _memoryBarriers = []; + private readonly List> _bufferBarriers = []; + private readonly List> _imageBarriers = []; private int _queuedBarrierCount; private enum IncoherentBarrierType diff --git a/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs b/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs index 5db0ee304..3b2fce34a 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferHolder.cs @@ -486,7 +486,7 @@ namespace Ryujinx.Graphics.Vulkan (int keyOffset, int keySize) = FromMirrorKey(key); if (!(offset + size <= keyOffset || offset >= keyOffset + keySize)) { - toRemove ??= new List(); + toRemove ??= []; toRemove.Add(key); } diff --git a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs index ba7cebe35..b643e55f1 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs @@ -150,10 +150,7 @@ namespace Ryujinx.Graphics.Vulkan } else { - _ranges = new List - { - new(offset, size) - }; + _ranges = [new(offset, size)]; } } diff --git a/src/Ryujinx.Graphics.Vulkan/CacheByRange.cs b/src/Ryujinx.Graphics.Vulkan/CacheByRange.cs index 16954d21b..30414b4df 100644 --- a/src/Ryujinx.Graphics.Vulkan/CacheByRange.cs +++ b/src/Ryujinx.Graphics.Vulkan/CacheByRange.cs @@ -249,7 +249,7 @@ namespace Ryujinx.Graphics.Vulkan { if (entry.DependencyList == null) { - entry.DependencyList = new List(); + entry.DependencyList = []; entries[i] = entry; } @@ -340,7 +340,7 @@ namespace Ryujinx.Graphics.Vulkan DestroyEntry(entry); } - (toRemove ??= new List()).Add(range.Key); + (toRemove ??= []).Add(range.Key); } } @@ -362,7 +362,7 @@ namespace Ryujinx.Graphics.Vulkan if (!_ranges.TryGetValue(key, out List value)) { - value = new List(); + value = []; _ranges.Add(key, value); } diff --git a/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs b/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs index c77853f3d..311cc2397 100644 --- a/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs +++ b/src/Ryujinx.Graphics.Vulkan/CommandBufferPool.cs @@ -47,8 +47,8 @@ namespace Ryujinx.Graphics.Vulkan api.AllocateCommandBuffers(device, in allocateInfo, out CommandBuffer); - Dependants = new List(); - Waitables = new List(); + Dependants = []; + Waitables = []; } } diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs index 9086b9e66..5e3bf39db 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs @@ -142,11 +142,11 @@ namespace Ryujinx.Graphics.Vulkan _bufferTextureRefs = new TextureBuffer[Constants.MaxTextureBindings * 2]; _bufferImageRefs = new TextureBuffer[Constants.MaxImageBindings * 2]; - _textureArrayRefs = Array.Empty>(); - _imageArrayRefs = Array.Empty>(); + _textureArrayRefs = []; + _imageArrayRefs = []; - _textureArrayExtraRefs = Array.Empty>(); - _imageArrayExtraRefs = Array.Empty>(); + _textureArrayExtraRefs = []; + _imageArrayExtraRefs = []; _uniformBuffers = new DescriptorBufferInfo[Constants.MaxUniformBufferBindings]; _storageBuffers = new DescriptorBufferInfo[Constants.MaxStorageBufferBindings]; @@ -218,7 +218,7 @@ namespace Ryujinx.Graphics.Vulkan if (isMainPipeline) { - FeedbackLoopHazards = new(); + FeedbackLoopHazards = []; } } diff --git a/src/Ryujinx.Graphics.Vulkan/Effects/AreaScalingFilter.cs b/src/Ryujinx.Graphics.Vulkan/Effects/AreaScalingFilter.cs index 695a5d706..b8992c652 100644 --- a/src/Ryujinx.Graphics.Vulkan/Effects/AreaScalingFilter.cs +++ b/src/Ryujinx.Graphics.Vulkan/Effects/AreaScalingFilter.cs @@ -50,10 +50,9 @@ namespace Ryujinx.Graphics.Vulkan.Effects _sampler = _renderer.CreateSampler(SamplerCreateInfo.Create(MinFilter.Linear, MagFilter.Linear)); - _scalingProgram = _renderer.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(scalingShader, ShaderStage.Compute, TargetLanguage.Spirv), - }, scalingResourceLayout); + _scalingProgram = _renderer.CreateProgramWithMinimalLayout([ + new ShaderSource(scalingShader, ShaderStage.Compute, TargetLanguage.Spirv) + ], scalingResourceLayout); } public void Run( @@ -70,8 +69,8 @@ namespace Ryujinx.Graphics.Vulkan.Effects _pipeline.SetProgram(_scalingProgram); _pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _sampler); - ReadOnlySpan dimensionsBuffer = stackalloc float[] - { + ReadOnlySpan dimensionsBuffer = + [ source.X1, source.X2, source.Y1, @@ -79,8 +78,8 @@ namespace Ryujinx.Graphics.Vulkan.Effects destination.X1, destination.X2, destination.Y1, - destination.Y2, - }; + destination.Y2 + ]; int rangeSize = dimensionsBuffer.Length * sizeof(float); using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); @@ -90,7 +89,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects int dispatchX = (width + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; int dispatchY = (height + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(2, buffer.Range)]); _pipeline.SetImage(0, destinationTexture); _pipeline.DispatchCompute(dispatchX, dispatchY, 1); _pipeline.ComputeBarrier(); diff --git a/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs b/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs index 2fe6a588b..64b6c3b37 100644 --- a/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs +++ b/src/Ryujinx.Graphics.Vulkan/Effects/FsrScalingFilter.cs @@ -70,15 +70,13 @@ namespace Ryujinx.Graphics.Vulkan.Effects _sampler = _renderer.CreateSampler(SamplerCreateInfo.Create(MinFilter.Linear, MagFilter.Linear)); - _scalingProgram = _renderer.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(scalingShader, ShaderStage.Compute, TargetLanguage.Spirv), - }, scalingResourceLayout); + _scalingProgram = _renderer.CreateProgramWithMinimalLayout([ + new ShaderSource(scalingShader, ShaderStage.Compute, TargetLanguage.Spirv) + ], scalingResourceLayout); - _sharpeningProgram = _renderer.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(sharpeningShader, ShaderStage.Compute, TargetLanguage.Spirv), - }, sharpeningResourceLayout); + _sharpeningProgram = _renderer.CreateProgramWithMinimalLayout([ + new ShaderSource(sharpeningShader, ShaderStage.Compute, TargetLanguage.Spirv) + ], sharpeningResourceLayout); } public void Run( @@ -127,8 +125,8 @@ namespace Ryujinx.Graphics.Vulkan.Effects float scaleX = srcWidth / view.Width; float scaleY = srcHeight / view.Height; - ReadOnlySpan dimensionsBuffer = stackalloc float[] - { + ReadOnlySpan dimensionsBuffer = + [ source.X1, source.X2, source.Y1, @@ -138,14 +136,14 @@ namespace Ryujinx.Graphics.Vulkan.Effects destination.Y1, destination.Y2, scaleX, - scaleY, - }; + scaleY + ]; int rangeSize = dimensionsBuffer.Length * sizeof(float); using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); buffer.Holder.SetDataUnchecked(buffer.Offset, dimensionsBuffer); - ReadOnlySpan sharpeningBufferData = stackalloc float[] { 1.5f - (Level * 0.01f * 1.5f) }; + ReadOnlySpan sharpeningBufferData = [1.5f - (Level * 0.01f * 1.5f)]; using ScopedTemporaryBuffer sharpeningBuffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, sizeof(float)); sharpeningBuffer.Holder.SetDataUnchecked(sharpeningBuffer.Offset, sharpeningBufferData); @@ -153,7 +151,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects int dispatchX = (width + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; int dispatchY = (height + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(2, buffer.Range)]); _pipeline.SetImage(ShaderStage.Compute, 0, _intermediaryTexture.GetView(FormatTable.ConvertRgba8SrgbToUnorm(view.Info.Format))); _pipeline.DispatchCompute(dispatchX, dispatchY, 1); _pipeline.ComputeBarrier(); @@ -161,7 +159,7 @@ namespace Ryujinx.Graphics.Vulkan.Effects // Sharpening pass _pipeline.SetProgram(_sharpeningProgram); _pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, _intermediaryTexture, _sampler); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(4, sharpeningBuffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(4, sharpeningBuffer.Range)]); _pipeline.SetImage(0, destinationTexture); _pipeline.DispatchCompute(dispatchX, dispatchY, 1); _pipeline.ComputeBarrier(); diff --git a/src/Ryujinx.Graphics.Vulkan/Effects/FxaaPostProcessingEffect.cs b/src/Ryujinx.Graphics.Vulkan/Effects/FxaaPostProcessingEffect.cs index ad436371e..e57018624 100644 --- a/src/Ryujinx.Graphics.Vulkan/Effects/FxaaPostProcessingEffect.cs +++ b/src/Ryujinx.Graphics.Vulkan/Effects/FxaaPostProcessingEffect.cs @@ -46,10 +46,9 @@ namespace Ryujinx.Graphics.Vulkan.Effects _samplerLinear = _renderer.CreateSampler(SamplerCreateInfo.Create(MinFilter.Linear, MagFilter.Linear)); - _shaderProgram = _renderer.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(shader, ShaderStage.Compute, TargetLanguage.Spirv), - }, resourceLayout); + _shaderProgram = _renderer.CreateProgramWithMinimalLayout([ + new ShaderSource(shader, ShaderStage.Compute, TargetLanguage.Spirv) + ], resourceLayout); } public TextureView Run(TextureView view, CommandBufferScoped cbs, int width, int height) @@ -64,13 +63,13 @@ namespace Ryujinx.Graphics.Vulkan.Effects _pipeline.SetProgram(_shaderProgram); _pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _samplerLinear); - ReadOnlySpan resolutionBuffer = stackalloc float[] { view.Width, view.Height }; + ReadOnlySpan resolutionBuffer = [view.Width, view.Height]; int rangeSize = resolutionBuffer.Length * sizeof(float); using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); buffer.Holder.SetDataUnchecked(buffer.Offset, resolutionBuffer); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(2, buffer.Range)]); int dispatchX = BitUtils.DivRoundUp(view.Width, IPostProcessingEffect.LocalGroupSize); int dispatchY = BitUtils.DivRoundUp(view.Height, IPostProcessingEffect.LocalGroupSize); diff --git a/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs b/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs index 22b578ffc..968e800cf 100644 --- a/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs +++ b/src/Ryujinx.Graphics.Vulkan/Effects/SmaaPostProcessingEffect.cs @@ -117,20 +117,17 @@ namespace Ryujinx.Graphics.Vulkan.Effects (4, SpecConstType.Float32), (5, SpecConstType.Float32)); - _edgeProgram = _renderer.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(edgeShader, ShaderStage.Compute, TargetLanguage.Spirv), - }, edgeResourceLayout, new[] { specInfo }); + _edgeProgram = _renderer.CreateProgramWithMinimalLayout([ + new ShaderSource(edgeShader, ShaderStage.Compute, TargetLanguage.Spirv) + ], edgeResourceLayout, [specInfo]); - _blendProgram = _renderer.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(blendShader, ShaderStage.Compute, TargetLanguage.Spirv), - }, blendResourceLayout, new[] { specInfo }); + _blendProgram = _renderer.CreateProgramWithMinimalLayout([ + new ShaderSource(blendShader, ShaderStage.Compute, TargetLanguage.Spirv) + ], blendResourceLayout, [specInfo]); - _neighbourProgram = _renderer.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(neighbourShader, ShaderStage.Compute, TargetLanguage.Spirv), - }, neighbourResourceLayout, new[] { specInfo }); + _neighbourProgram = _renderer.CreateProgramWithMinimalLayout([ + new ShaderSource(neighbourShader, ShaderStage.Compute, TargetLanguage.Spirv) + ], neighbourResourceLayout, [specInfo]); } public void DeletePipelines() @@ -214,12 +211,12 @@ namespace Ryujinx.Graphics.Vulkan.Effects _pipeline.SetTextureAndSampler(ShaderStage.Compute, 1, view, _samplerLinear); _pipeline.Specialize(_specConstants); - ReadOnlySpan resolutionBuffer = stackalloc float[] { view.Width, view.Height }; + ReadOnlySpan resolutionBuffer = [view.Width, view.Height]; int rangeSize = resolutionBuffer.Length * sizeof(float); using ScopedTemporaryBuffer buffer = _renderer.BufferManager.ReserveOrCreate(_renderer, cbs, rangeSize); buffer.Holder.SetDataUnchecked(buffer.Offset, resolutionBuffer); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(2, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(2, buffer.Range)]); _pipeline.SetImage(ShaderStage.Compute, 0, _edgeOutputTexture.GetView(FormatTable.ConvertRgba8SrgbToUnorm(view.Info.Format))); _pipeline.DispatchCompute(dispatchX, dispatchY, 1); _pipeline.ComputeBarrier(); diff --git a/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs b/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs index 31ba74b16..63737f355 100644 --- a/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/FenceHolder.cs @@ -110,7 +110,7 @@ namespace Ryujinx.Graphics.Vulkan try { - FenceHelper.WaitAllIndefinitely(_api, _device, stackalloc Fence[] { _fence }); + FenceHelper.WaitAllIndefinitely(_api, _device, [_fence]); } finally { @@ -119,7 +119,7 @@ namespace Ryujinx.Graphics.Vulkan } else { - FenceHelper.WaitAllIndefinitely(_api, _device, stackalloc Fence[] { _fence }); + FenceHelper.WaitAllIndefinitely(_api, _device, [_fence]); } } @@ -134,7 +134,7 @@ namespace Ryujinx.Graphics.Vulkan try { - return FenceHelper.AllSignaled(_api, _device, stackalloc Fence[] { _fence }); + return FenceHelper.AllSignaled(_api, _device, [_fence]); } finally { @@ -143,7 +143,7 @@ namespace Ryujinx.Graphics.Vulkan } else { - return FenceHelper.AllSignaled(_api, _device, stackalloc Fence[] { _fence }); + return FenceHelper.AllSignaled(_api, _device, [_fence]); } } diff --git a/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs b/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs index 2b567709e..18e5472db 100644 --- a/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs +++ b/src/Ryujinx.Graphics.Vulkan/FormatCapabilities.cs @@ -9,7 +9,8 @@ namespace Ryujinx.Graphics.Vulkan { class FormatCapabilities { - private static readonly GAL.Format[] _scaledFormats = { + private static readonly GAL.Format[] _scaledFormats = + [ GAL.Format.R8Uscaled, GAL.Format.R8Sscaled, GAL.Format.R16Uscaled, @@ -27,10 +28,11 @@ namespace Ryujinx.Graphics.Vulkan GAL.Format.R16G16B16A16Uscaled, GAL.Format.R16G16B16A16Sscaled, GAL.Format.R10G10B10A2Uscaled, - GAL.Format.R10G10B10A2Sscaled, - }; + GAL.Format.R10G10B10A2Sscaled + ]; - private static readonly GAL.Format[] _intFormats = { + private static readonly GAL.Format[] _intFormats = + [ GAL.Format.R8Uint, GAL.Format.R8Sint, GAL.Format.R16Uint, @@ -48,8 +50,8 @@ namespace Ryujinx.Graphics.Vulkan GAL.Format.R16G16B16A16Uint, GAL.Format.R16G16B16A16Sint, GAL.Format.R10G10B10A2Uint, - GAL.Format.R10G10B10A2Sint, - }; + GAL.Format.R10G10B10A2Sint + ]; private readonly FormatFeatureFlags[] _bufferTable; private readonly FormatFeatureFlags[] _optimalTable; diff --git a/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs b/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs index a10398517..a2384c08e 100644 --- a/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs +++ b/src/Ryujinx.Graphics.Vulkan/FramebufferParams.cs @@ -39,7 +39,7 @@ namespace Ryujinx.Graphics.Vulkan bool isDepthStencil = format.IsDepthOrStencil(); _device = device; - _attachments = new[] { view.GetImageViewForAttachment() }; + _attachments = [view.GetImageViewForAttachment()]; _validColorAttachments = isDepthStencil ? 0u : 1u; _baseAttachment = view; @@ -49,7 +49,7 @@ namespace Ryujinx.Graphics.Vulkan } else { - _colors = new TextureView[] { view }; + _colors = [view]; _colorsCanonical = _colors; } @@ -57,9 +57,9 @@ namespace Ryujinx.Graphics.Vulkan Height = height; Layers = 1; - AttachmentSamples = new[] { (uint)view.Info.Samples }; - AttachmentFormats = new[] { view.VkFormat }; - AttachmentIndices = isDepthStencil ? Array.Empty() : new[] { 0 }; + AttachmentSamples = [(uint)view.Info.Samples]; + AttachmentFormats = [view.VkFormat]; + AttachmentIndices = isDepthStencil ? [] : [0]; AttachmentIntegerFormatMask = format.IsInteger() ? 1u : 0u; LogicOpsAllowed = !format.IsFloatOrSrgb(); diff --git a/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs b/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs index b8a7ddc0f..c811907e5 100644 --- a/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs +++ b/src/Ryujinx.Graphics.Vulkan/HashTableSlim.cs @@ -89,10 +89,10 @@ namespace Ryujinx.Graphics.Vulkan } else { - bucket.Entries = new[] - { - entry, - }; + bucket.Entries = + [ + entry + ]; } bucket.Length++; diff --git a/src/Ryujinx.Graphics.Vulkan/HelperShader.cs b/src/Ryujinx.Graphics.Vulkan/HelperShader.cs index d0262d2e1..8c7c074f4 100644 --- a/src/Ryujinx.Graphics.Vulkan/HelperShader.cs +++ b/src/Ryujinx.Graphics.Vulkan/HelperShader.cs @@ -69,109 +69,95 @@ namespace Ryujinx.Graphics.Vulkan .Add(ResourceStages.Vertex, ResourceType.UniformBuffer, 1) .Add(ResourceStages.Fragment, ResourceType.TextureAndSampler, 0).Build(); - _programColorBlit = gd.CreateProgramWithMinimalLayout(new[] - { + _programColorBlit = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorBlitVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("ColorBlitFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, blitResourceLayout); + new ShaderSource(ReadSpirv("ColorBlitFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], blitResourceLayout); - _programColorBlitMs = gd.CreateProgramWithMinimalLayout(new[] - { + _programColorBlitMs = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorBlitVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("ColorBlitMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, blitResourceLayout); + new ShaderSource(ReadSpirv("ColorBlitMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], blitResourceLayout); - _programColorBlitClearAlpha = gd.CreateProgramWithMinimalLayout(new[] - { + _programColorBlitClearAlpha = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorBlitVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("ColorBlitClearAlphaFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, blitResourceLayout); + new ShaderSource(ReadSpirv("ColorBlitClearAlphaFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], blitResourceLayout); ResourceLayout colorClearResourceLayout = new ResourceLayoutBuilder().Add(ResourceStages.Vertex, ResourceType.UniformBuffer, 1).Build(); - _programColorClearF = gd.CreateProgramWithMinimalLayout(new[] - { + _programColorClearF = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorClearVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("ColorClearFFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, colorClearResourceLayout); + new ShaderSource(ReadSpirv("ColorClearFFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], colorClearResourceLayout); - _programColorClearSI = gd.CreateProgramWithMinimalLayout(new[] - { + _programColorClearSI = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorClearVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("ColorClearSIFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, colorClearResourceLayout); + new ShaderSource(ReadSpirv("ColorClearSIFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], colorClearResourceLayout); - _programColorClearUI = gd.CreateProgramWithMinimalLayout(new[] - { + _programColorClearUI = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorClearVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("ColorClearUIFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, colorClearResourceLayout); + new ShaderSource(ReadSpirv("ColorClearUIFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], colorClearResourceLayout); - _programDepthStencilClear = gd.CreateProgramWithMinimalLayout(new[] - { + _programDepthStencilClear = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorClearVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("DepthStencilClearFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, colorClearResourceLayout); + new ShaderSource(ReadSpirv("DepthStencilClearFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], colorClearResourceLayout); ResourceLayout strideChangeResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build(); - _programStrideChange = gd.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(ReadSpirv("ChangeBufferStride.spv"), ShaderStage.Compute, TargetLanguage.Spirv), - }, strideChangeResourceLayout); + _programStrideChange = gd.CreateProgramWithMinimalLayout([ + new ShaderSource(ReadSpirv("ChangeBufferStride.spv"), ShaderStage.Compute, TargetLanguage.Spirv) + ], strideChangeResourceLayout); ResourceLayout colorCopyResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.TextureAndSampler, 0) .Add(ResourceStages.Compute, ResourceType.Image, 0, true).Build(); - _programColorCopyShortening = gd.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(ReadSpirv("ColorCopyShorteningCompute.spv"), ShaderStage.Compute, TargetLanguage.Spirv), - }, colorCopyResourceLayout); + _programColorCopyShortening = gd.CreateProgramWithMinimalLayout([ + new ShaderSource(ReadSpirv("ColorCopyShorteningCompute.spv"), ShaderStage.Compute, TargetLanguage.Spirv) + ], colorCopyResourceLayout); - _programColorCopyToNonMs = gd.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(ReadSpirv("ColorCopyToNonMsCompute.spv"), ShaderStage.Compute, TargetLanguage.Spirv), - }, colorCopyResourceLayout); + _programColorCopyToNonMs = gd.CreateProgramWithMinimalLayout([ + new ShaderSource(ReadSpirv("ColorCopyToNonMsCompute.spv"), ShaderStage.Compute, TargetLanguage.Spirv) + ], colorCopyResourceLayout); - _programColorCopyWidening = gd.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(ReadSpirv("ColorCopyWideningCompute.spv"), ShaderStage.Compute, TargetLanguage.Spirv), - }, colorCopyResourceLayout); + _programColorCopyWidening = gd.CreateProgramWithMinimalLayout([ + new ShaderSource(ReadSpirv("ColorCopyWideningCompute.spv"), ShaderStage.Compute, TargetLanguage.Spirv) + ], colorCopyResourceLayout); ResourceLayout colorDrawToMsResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Fragment, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Fragment, ResourceType.TextureAndSampler, 0).Build(); - _programColorDrawToMs = gd.CreateProgramWithMinimalLayout(new[] - { + _programColorDrawToMs = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorDrawToMsVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("ColorDrawToMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, colorDrawToMsResourceLayout); + new ShaderSource(ReadSpirv("ColorDrawToMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], colorDrawToMsResourceLayout); ResourceLayout convertD32S8ToD24S8ResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build(); - _programConvertD32S8ToD24S8 = gd.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(ReadSpirv("ConvertD32S8ToD24S8.spv"), ShaderStage.Compute, TargetLanguage.Spirv), - }, convertD32S8ToD24S8ResourceLayout); + _programConvertD32S8ToD24S8 = gd.CreateProgramWithMinimalLayout([ + new ShaderSource(ReadSpirv("ConvertD32S8ToD24S8.spv"), ShaderStage.Compute, TargetLanguage.Spirv) + ], convertD32S8ToD24S8ResourceLayout); ResourceLayout convertIndexBufferResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build(); - _programConvertIndexBuffer = gd.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(ReadSpirv("ConvertIndexBuffer.spv"), ShaderStage.Compute, TargetLanguage.Spirv), - }, convertIndexBufferResourceLayout); + _programConvertIndexBuffer = gd.CreateProgramWithMinimalLayout([ + new ShaderSource(ReadSpirv("ConvertIndexBuffer.spv"), ShaderStage.Compute, TargetLanguage.Spirv) + ], convertIndexBufferResourceLayout); ResourceLayout convertIndirectDataResourceLayout = new ResourceLayoutBuilder() .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) @@ -179,60 +165,51 @@ namespace Ryujinx.Graphics.Vulkan .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true) .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 3).Build(); - _programConvertIndirectData = gd.CreateProgramWithMinimalLayout(new[] - { - new ShaderSource(ReadSpirv("ConvertIndirectData.spv"), ShaderStage.Compute, TargetLanguage.Spirv), - }, convertIndirectDataResourceLayout); + _programConvertIndirectData = gd.CreateProgramWithMinimalLayout([ + new ShaderSource(ReadSpirv("ConvertIndirectData.spv"), ShaderStage.Compute, TargetLanguage.Spirv) + ], convertIndirectDataResourceLayout); - _programDepthBlit = gd.CreateProgramWithMinimalLayout(new[] - { + _programDepthBlit = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorBlitVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("DepthBlitFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, blitResourceLayout); + new ShaderSource(ReadSpirv("DepthBlitFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], blitResourceLayout); - _programDepthBlitMs = gd.CreateProgramWithMinimalLayout(new[] - { + _programDepthBlitMs = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorBlitVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("DepthBlitMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, blitResourceLayout); + new ShaderSource(ReadSpirv("DepthBlitMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], blitResourceLayout); - _programDepthDrawToMs = gd.CreateProgramWithMinimalLayout(new[] - { + _programDepthDrawToMs = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorDrawToMsVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("DepthDrawToMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, colorDrawToMsResourceLayout); + new ShaderSource(ReadSpirv("DepthDrawToMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], colorDrawToMsResourceLayout); - _programDepthDrawToNonMs = gd.CreateProgramWithMinimalLayout(new[] - { + _programDepthDrawToNonMs = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorDrawToMsVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("DepthDrawToNonMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, colorDrawToMsResourceLayout); + new ShaderSource(ReadSpirv("DepthDrawToNonMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], colorDrawToMsResourceLayout); if (gd.Capabilities.SupportsShaderStencilExport) { - _programStencilBlit = gd.CreateProgramWithMinimalLayout(new[] - { + _programStencilBlit = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorBlitVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("StencilBlitFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, blitResourceLayout); + new ShaderSource(ReadSpirv("StencilBlitFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], blitResourceLayout); - _programStencilBlitMs = gd.CreateProgramWithMinimalLayout(new[] - { + _programStencilBlitMs = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorBlitVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("StencilBlitMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, blitResourceLayout); + new ShaderSource(ReadSpirv("StencilBlitMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], blitResourceLayout); - _programStencilDrawToMs = gd.CreateProgramWithMinimalLayout(new[] - { + _programStencilDrawToMs = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorDrawToMsVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("StencilDrawToMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, colorDrawToMsResourceLayout); + new ShaderSource(ReadSpirv("StencilDrawToMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], colorDrawToMsResourceLayout); - _programStencilDrawToNonMs = gd.CreateProgramWithMinimalLayout(new[] - { + _programStencilDrawToNonMs = gd.CreateProgramWithMinimalLayout([ new ShaderSource(ReadSpirv("ColorDrawToMsVertex.spv"), ShaderStage.Vertex, TargetLanguage.Spirv), - new ShaderSource(ReadSpirv("StencilDrawToNonMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv), - }, colorDrawToMsResourceLayout); + new ShaderSource(ReadSpirv("StencilDrawToNonMsFragment.spv"), ShaderStage.Fragment, TargetLanguage.Spirv) + ], colorDrawToMsResourceLayout); } } @@ -407,7 +384,7 @@ namespace Ryujinx.Graphics.Vulkan buffer.Holder.SetDataUnchecked(buffer.Offset, region); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(1, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(1, buffer.Range)]); Span viewports = stackalloc Viewport[1]; @@ -450,8 +427,8 @@ namespace Ryujinx.Graphics.Vulkan int dstHeight = dst.Height; _pipeline.SetRenderTarget(dst, (uint)dstWidth, (uint)dstHeight); - _pipeline.SetRenderTargetColorMasks(new uint[] { 0xf }); - _pipeline.SetScissors(stackalloc Rectangle[] { new Rectangle(0, 0, dstWidth, dstHeight) }); + _pipeline.SetRenderTargetColorMasks([0xf]); + _pipeline.SetScissors([new Rectangle(0, 0, dstWidth, dstHeight)]); if (clearAlpha) { @@ -503,7 +480,7 @@ namespace Ryujinx.Graphics.Vulkan buffer.Holder.SetDataUnchecked(buffer.Offset, region); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(1, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(1, buffer.Range)]); Span viewports = stackalloc Viewport[1]; @@ -526,7 +503,7 @@ namespace Ryujinx.Graphics.Vulkan int dstHeight = dst.Height; _pipeline.SetRenderTarget(dst, (uint)dstWidth, (uint)dstHeight); - _pipeline.SetScissors(stackalloc Rectangle[] { new Rectangle(0, 0, dstWidth, dstHeight) }); + _pipeline.SetScissors([new Rectangle(0, 0, dstWidth, dstHeight)]); _pipeline.SetViewports(viewports); _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); @@ -657,7 +634,7 @@ namespace Ryujinx.Graphics.Vulkan buffer.Holder.SetDataUnchecked(buffer.Offset, clearColor); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(1, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(1, buffer.Range)]); Span viewports = stackalloc Viewport[1]; @@ -689,7 +666,7 @@ namespace Ryujinx.Graphics.Vulkan _pipeline.SetRenderTarget(dst, (uint)dstWidth, (uint)dstHeight); _pipeline.SetRenderTargetColorMasks(new[] { componentMask }); _pipeline.SetViewports(viewports); - _pipeline.SetScissors(stackalloc Rectangle[] { scissor }); + _pipeline.SetScissors([scissor]); _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); _pipeline.Draw(4, 1, 0, 0); _pipeline.Finish(); @@ -717,9 +694,9 @@ namespace Ryujinx.Graphics.Vulkan using ScopedTemporaryBuffer buffer = gd.BufferManager.ReserveOrCreate(gd, cbs, ClearColorBufferSize); - buffer.Holder.SetDataUnchecked(buffer.Offset, stackalloc float[] { depthValue }); + buffer.Holder.SetDataUnchecked(buffer.Offset, [depthValue]); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(1, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(1, buffer.Range)]); Span viewports = stackalloc Viewport[1]; @@ -735,7 +712,7 @@ namespace Ryujinx.Graphics.Vulkan _pipeline.SetProgram(_programDepthStencilClear); _pipeline.SetRenderTarget(dst, (uint)dstWidth, (uint)dstHeight); _pipeline.SetViewports(viewports); - _pipeline.SetScissors(stackalloc Rectangle[] { scissor }); + _pipeline.SetScissors([scissor]); _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); _pipeline.SetDepthTest(new DepthTestDescriptor(true, depthMask, CompareOp.Always)); _pipeline.SetStencilTest(CreateStencilTestDescriptor(stencilMask != 0, stencilValue, 0xff, stencilMask)); @@ -776,7 +753,7 @@ namespace Ryujinx.Graphics.Vulkan gd.BufferManager.SetData(bufferHandle, 0, region); - pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(1, new BufferRange(bufferHandle, 0, RegionBufferSize)) }); + pipeline.SetUniformBuffers([new BufferAssignment(1, new BufferRange(bufferHandle, 0, RegionBufferSize))]); Span viewports = stackalloc Viewport[1]; @@ -852,7 +829,7 @@ namespace Ryujinx.Graphics.Vulkan _pipeline.SetCommandBuffer(cbs); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); Span> sbRanges = new Auto[2]; @@ -915,7 +892,7 @@ namespace Ryujinx.Graphics.Vulkan gd.Api.CmdFillBuffer(cbs.CommandBuffer, dstBuffer, 0, Vk.WholeSize, 0); - List bufferCopy = new(); + List bufferCopy = []; int outputOffset = 0; // Try to merge copies of adjacent indices to reduce copy count. @@ -1030,7 +1007,7 @@ namespace Ryujinx.Graphics.Vulkan Format srcFormat = GetFormat(componentSize, srcBpp / componentSize); Format dstFormat = GetFormat(componentSize, dstBpp / componentSize); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); for (int l = 0; l < levels; l++) { @@ -1111,7 +1088,7 @@ namespace Ryujinx.Graphics.Vulkan 1); _pipeline.SetCommandBuffer(cbs); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); if (isDepthOrStencil) { @@ -1130,7 +1107,7 @@ namespace Ryujinx.Graphics.Vulkan 0f, 1f); - _pipeline.SetScissors(stackalloc Rectangle[] { new Rectangle(0, 0, dst.Width, dst.Height) }); + _pipeline.SetScissors([new Rectangle(0, 0, dst.Width, dst.Height)]); _pipeline.SetViewports(viewports); _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); @@ -1251,12 +1228,12 @@ namespace Ryujinx.Graphics.Vulkan 0f, 1f); - _pipeline.SetRenderTargetColorMasks(new uint[] { 0xf }); - _pipeline.SetScissors(stackalloc Rectangle[] { new Rectangle(0, 0, dst.Width, dst.Height) }); + _pipeline.SetRenderTargetColorMasks([0xf]); + _pipeline.SetScissors([new Rectangle(0, 0, dst.Width, dst.Height)]); _pipeline.SetViewports(viewports); _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); if (isDepthOrStencil) { @@ -1578,9 +1555,9 @@ namespace Ryujinx.Graphics.Vulkan srcIndirectBufferOffset, indirectDataSize); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, drawCountBufferAligned) }); + _pipeline.SetUniformBuffers([new BufferAssignment(0, drawCountBufferAligned)]); _pipeline.SetStorageBuffers(1, new[] { srcIndirectBuffer.GetBuffer(), dstIndirectBuffer.GetBuffer() }); - _pipeline.SetStorageBuffers(stackalloc[] { new BufferAssignment(3, patternScoped.Range) }); + _pipeline.SetStorageBuffers([new BufferAssignment(3, patternScoped.Range)]); _pipeline.SetProgram(_programConvertIndirectData); _pipeline.DispatchCompute(1, 1, 1); @@ -1607,7 +1584,8 @@ namespace Ryujinx.Graphics.Vulkan 0, convertedCount * outputIndexSize); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, new BufferRange(patternScoped.Handle, patternScoped.Offset, ParamsBufferSize)) }); + _pipeline.SetUniformBuffers([new BufferAssignment(0, new BufferRange(patternScoped.Handle, patternScoped.Offset, ParamsBufferSize)) + ]); _pipeline.SetStorageBuffers(1, new[] { srcIndexBuffer.GetBuffer(), dstIndexBuffer.GetBuffer() }); _pipeline.SetProgram(_programConvertIndexBuffer); @@ -1675,7 +1653,7 @@ namespace Ryujinx.Graphics.Vulkan _pipeline.SetCommandBuffer(cbs); - _pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, buffer.Range) }); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); Span> sbRanges = new Auto[2]; diff --git a/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs b/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs index c4ae56999..d8f8851b3 100644 --- a/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs +++ b/src/Ryujinx.Graphics.Vulkan/HostMemoryAllocator.cs @@ -44,7 +44,7 @@ namespace Ryujinx.Graphics.Vulkan _hostMemoryApi = hostMemoryApi; _device = device; - _allocations = new List(); + _allocations = []; _allocationTree = new IntervalTree(); } diff --git a/src/Ryujinx.Graphics.Vulkan/IdList.cs b/src/Ryujinx.Graphics.Vulkan/IdList.cs index 598d68584..ced33e39e 100644 --- a/src/Ryujinx.Graphics.Vulkan/IdList.cs +++ b/src/Ryujinx.Graphics.Vulkan/IdList.cs @@ -10,7 +10,7 @@ namespace Ryujinx.Graphics.Vulkan public IdList() { - _list = new List(); + _list = []; _freeMin = 0; } diff --git a/src/Ryujinx.Graphics.Vulkan/ImageArray.cs b/src/Ryujinx.Graphics.Vulkan/ImageArray.cs index 40ef32769..47c180696 100644 --- a/src/Ryujinx.Graphics.Vulkan/ImageArray.cs +++ b/src/Ryujinx.Graphics.Vulkan/ImageArray.cs @@ -93,7 +93,7 @@ namespace Ryujinx.Graphics.Vulkan if (storages == null) { - storages = new HashSet(); + storages = []; for (int index = 0; index < _textureRefs.Length; index++) { diff --git a/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs b/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs index 83959998d..5d7d291fb 100644 --- a/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs +++ b/src/Ryujinx.Graphics.Vulkan/MemoryAllocator.cs @@ -21,7 +21,7 @@ namespace Ryujinx.Graphics.Vulkan _api = api; _physicalDevice = physicalDevice; _device = device; - _blockLists = new List(); + _blockLists = []; _blockAlignment = (int)Math.Min(int.MaxValue, MaxDeviceMemoryUsageEstimate / _physicalDevice.PhysicalDeviceProperties.Limits.MaxMemoryAllocationCount); _lock = new(LockRecursionPolicy.NoRecursion); } diff --git a/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs b/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs index 8f65e7e14..acd791559 100644 --- a/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs +++ b/src/Ryujinx.Graphics.Vulkan/MemoryAllocatorBlockList.cs @@ -42,10 +42,10 @@ namespace Ryujinx.Graphics.Vulkan Memory = memory; HostPointer = hostPointer; Size = size; - _freeRanges = new List - { - new(0, size), - }; + _freeRanges = + [ + new(0, size) + ]; } public ulong Allocate(ulong size, ulong alignment) @@ -171,7 +171,7 @@ namespace Ryujinx.Graphics.Vulkan public MemoryAllocatorBlockList(Vk api, Device device, int memoryTypeIndex, int blockAlignment, bool forBuffer) { - _blocks = new List(); + _blocks = []; _api = api; _device = device; MemoryTypeIndex = memoryTypeIndex; diff --git a/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs index 3af2cae26..c3efcc8da 100644 --- a/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs +++ b/src/Ryujinx.Graphics.Vulkan/MoltenVK/MVKInitialization.cs @@ -40,7 +40,7 @@ namespace Ryujinx.Graphics.Vulkan.MoltenVK path = path[..^VulkanLib.Length] + "libMoltenVK.dylib"; return [path]; } - return Array.Empty(); + return []; } public static void InitializeResolver() diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs index f20530fb1..ba8b3e499 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineBase.cs @@ -136,8 +136,8 @@ namespace Ryujinx.Graphics.Vulkan { _descriptorSetUpdater.Initialize(IsMainPipeline); - QuadsToTrisPattern = new IndexBufferPattern(Gd, 4, 6, 0, new[] { 0, 1, 2, 0, 2, 3 }, 4, false); - TriFanToTrisPattern = new IndexBufferPattern(Gd, 3, 3, 2, new[] { int.MinValue, -1, 0 }, 1, true); + QuadsToTrisPattern = new IndexBufferPattern(Gd, 4, 6, 0, [0, 1, 2, 0, 2, 3], 4, false); + TriFanToTrisPattern = new IndexBufferPattern(Gd, 3, 3, 2, [int.MinValue, -1, 0], 1, true); } public unsafe void Barrier() diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineFull.cs b/src/Ryujinx.Graphics.Vulkan/PipelineFull.cs index 965e131ee..b948f8f0b 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineFull.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineFull.cs @@ -22,10 +22,10 @@ namespace Ryujinx.Graphics.Vulkan public PipelineFull(VulkanRenderer gd, Device device) : base(gd, device) { - _activeQueries = new List<(QueryPool, bool)>(); - _pendingQueryCopies = new(); - _backingSwaps = new(); - _activeBufferMirrors = new(); + _activeQueries = []; + _pendingQueryCopies = []; + _backingSwaps = []; + _activeBufferMirrors = []; CommandBuffer = (Cbs = gd.CommandBufferPool.Rent()).CommandBuffer; diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCacheEntry.cs b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCacheEntry.cs index 3c78a3ec1..5beca2efb 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCacheEntry.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineLayoutCacheEntry.cs @@ -83,7 +83,7 @@ namespace Ryujinx.Graphics.Vulkan for (int j = 0; j < _dsCache[i].Length; j++) { - _dsCache[i][j] = new List>(); + _dsCache[i][j] = []; } } @@ -173,7 +173,7 @@ namespace Ryujinx.Graphics.Vulkan { FreeCompletedManualDescriptorSets(); - List list = _manualDsCache[setIndex] ??= new(); + List list = _manualDsCache[setIndex] ??= []; Span span = CollectionsMarshal.AsSpan(list); Queue freeQueue = _freeManualDsCacheEntries[setIndex]; diff --git a/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs b/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs index 79df2b459..2c2d381a9 100644 --- a/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs +++ b/src/Ryujinx.Graphics.Vulkan/RenderPassHolder.cs @@ -144,7 +144,7 @@ namespace Ryujinx.Graphics.Vulkan _textures = textures; _key = key; - _forcedFences = new List(); + _forcedFences = []; } public Auto GetFramebuffer(VulkanRenderer gd, CommandBufferScoped cbs, FramebufferParams fb) diff --git a/src/Ryujinx.Graphics.Vulkan/ResourceLayoutBuilder.cs b/src/Ryujinx.Graphics.Vulkan/ResourceLayoutBuilder.cs index ff0ed30af..57de355e9 100644 --- a/src/Ryujinx.Graphics.Vulkan/ResourceLayoutBuilder.cs +++ b/src/Ryujinx.Graphics.Vulkan/ResourceLayoutBuilder.cs @@ -18,8 +18,8 @@ namespace Ryujinx.Graphics.Vulkan for (int index = 0; index < TotalSets; index++) { - _resourceDescriptors[index] = new(); - _resourceUsages[index] = new(); + _resourceDescriptors[index] = []; + _resourceUsages[index] = []; } } diff --git a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs index e97fc3003..78cd15a39 100644 --- a/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs +++ b/src/Ryujinx.Graphics.Vulkan/ShaderCollection.cs @@ -168,7 +168,7 @@ namespace Ryujinx.Graphics.Vulkan // If binding 3 is immediately used, use an alternate set of reserved bindings. ReadOnlyCollection uniformUsage = layout.SetUsages[0].Usages; bool hasBinding3 = uniformUsage.Any(x => x.Binding == 3); - int[] reserved = isCompute ? Array.Empty() : gd.GetPushDescriptorReservedBindings(hasBinding3); + int[] reserved = isCompute ? [] : gd.GetPushDescriptorReservedBindings(hasBinding3); // Can't use any of the reserved usages. for (int i = 0; i < uniformUsage.Count; i++) @@ -249,7 +249,7 @@ namespace Ryujinx.Graphics.Vulkan for (int setIndex = 0; setIndex < sets.Count; setIndex++) { - List currentSegments = new(); + List currentSegments = []; ResourceDescriptor currentDescriptor = default; int currentCount = 0; @@ -307,7 +307,7 @@ namespace Ryujinx.Graphics.Vulkan for (int setIndex = 0; setIndex < setUsages.Count; setIndex++) { - List currentSegments = new(); + List currentSegments = []; ResourceUsage currentUsage = default; int currentCount = 0; diff --git a/src/Ryujinx.Graphics.Vulkan/SyncManager.cs b/src/Ryujinx.Graphics.Vulkan/SyncManager.cs index 35e9ab971..5f6214a4f 100644 --- a/src/Ryujinx.Graphics.Vulkan/SyncManager.cs +++ b/src/Ryujinx.Graphics.Vulkan/SyncManager.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Graphics.Vulkan { _gd = gd; _device = device; - _handles = new List(); + _handles = []; } public void RegisterFlush() diff --git a/src/Ryujinx.Graphics.Vulkan/TextureArray.cs b/src/Ryujinx.Graphics.Vulkan/TextureArray.cs index 74129da92..2511f5711 100644 --- a/src/Ryujinx.Graphics.Vulkan/TextureArray.cs +++ b/src/Ryujinx.Graphics.Vulkan/TextureArray.cs @@ -113,7 +113,7 @@ namespace Ryujinx.Graphics.Vulkan if (storages == null) { - storages = new HashSet(); + storages = []; for (int index = 0; index < _textureRefs.Length; index++) { diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs b/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs index 24a86343a..c4dbf41f6 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanInitialization.cs @@ -21,7 +21,8 @@ namespace Ryujinx.Graphics.Vulkan private const string AppName = "Ryujinx.Graphics.Vulkan"; private const int QueuesCount = 2; - private static readonly string[] _desirableExtensions = { + private static readonly string[] _desirableExtensions = + [ ExtConditionalRendering.ExtensionName, ExtExtendedDynamicState.ExtensionName, ExtTransformFeedback.ExtensionName, @@ -46,16 +47,17 @@ namespace Ryujinx.Graphics.Vulkan "VK_KHR_8bit_storage", "VK_KHR_maintenance2", "VK_EXT_attachment_feedback_loop_layout", - "VK_EXT_attachment_feedback_loop_dynamic_state", - }; + "VK_EXT_attachment_feedback_loop_dynamic_state" + ]; - private static readonly string[] _requiredExtensions = { - KhrSwapchain.ExtensionName, - }; + private static readonly string[] _requiredExtensions = + [ + KhrSwapchain.ExtensionName + ]; internal static VulkanInstance CreateInstance(Vk api, GraphicsDebugLevel logLevel, string[] requiredExtensions) { - List enabledLayers = new(); + List enabledLayers = []; IReadOnlySet instanceExtensions = VulkanInstance.GetInstanceExtensions(api); IReadOnlySet instanceLayers = VulkanInstance.GetInstanceLayers(api); @@ -197,12 +199,12 @@ namespace Ryujinx.Graphics.Vulkan // TODO: Remove this once we relax our initialization codepaths. if (instance.InstanceVersion < _minimalInstanceVulkanVersion) { - return Array.Empty(); + return []; } instance.EnumeratePhysicalDevices(out VulkanPhysicalDevice[] physicalDevices).ThrowOnError(); - List deviceInfos = new(); + List deviceInfos = []; foreach (VulkanPhysicalDevice physicalDevice in physicalDevices) { diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs index a70ca21df..986baf91b 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs @@ -84,8 +84,8 @@ namespace Ryujinx.Graphics.Vulkan private readonly string _preferredGpuId; private int[] _pdReservedBindings; - private readonly static int[] _pdReservedBindingsNvn = { 3, 18, 21, 36, 30 }; - private readonly static int[] _pdReservedBindingsOgl = { 17, 18, 34, 35, 36 }; + private readonly static int[] _pdReservedBindingsNvn = [3, 18, 21, 36, 30]; + private readonly static int[] _pdReservedBindingsOgl = [17, 18, 34, 35, 36]; internal Vendor Vendor { get; private set; } internal bool IsAmdWindows { get; private set; } @@ -522,7 +522,7 @@ namespace Ryujinx.Graphics.Vulkan } else { - _pdReservedBindings = Array.Empty(); + _pdReservedBindings = []; } } @@ -832,7 +832,7 @@ namespace Ryujinx.Graphics.Vulkan { Logger.Error?.PrintMsg(LogClass.Gpu, $"Error querying Vulkan devices: {ex.Message}"); - return Array.Empty(); + return []; } } @@ -845,7 +845,7 @@ namespace Ryujinx.Graphics.Vulkan catch (Exception) { // If we got an exception here, Vulkan is most likely not supported. - return Array.Empty(); + return []; } } diff --git a/src/Ryujinx.Graphics.Vulkan/Window.cs b/src/Ryujinx.Graphics.Vulkan/Window.cs index c572effd8..ab39cbd7d 100644 --- a/src/Ryujinx.Graphics.Vulkan/Window.cs +++ b/src/Ryujinx.Graphics.Vulkan/Window.cs @@ -394,7 +394,7 @@ namespace Ryujinx.Graphics.Vulkan _gd.CommandBufferPool.Return( cbs, null, - stackalloc[] { PipelineStageFlags.ColorAttachmentOutputBit }, + [PipelineStageFlags.ColorAttachmentOutputBit], null); _gd.FlushAllCommands(); cbs.GetFence().Wait(); @@ -457,9 +457,9 @@ namespace Ryujinx.Graphics.Vulkan _gd.CommandBufferPool.Return( cbs, - stackalloc[] { _imageAvailableSemaphores[semaphoreIndex] }, - stackalloc[] { PipelineStageFlags.ColorAttachmentOutputBit }, - stackalloc[] { _renderFinishedSemaphores[semaphoreIndex] }); + [_imageAvailableSemaphores[semaphoreIndex]], + [PipelineStageFlags.ColorAttachmentOutputBit], + [_renderFinishedSemaphores[semaphoreIndex]]); // TODO: Present queue. Semaphore semaphore = _renderFinishedSemaphores[semaphoreIndex]; -- 2.47.1 From 3e12865f5143dcd7dacf8fd823b4d9e771d466b9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:41:05 -0600 Subject: [PATCH 466/722] misc: chore: Use collection expressions in Cpu --- src/Ryujinx.Cpu/AddressTable.cs | 2 +- .../HostTracked/AddressSpacePartitioned.cs | 2 +- .../Jit/MemoryManagerHostMapped.cs | 2 +- .../Jit/MemoryManagerHostTracked.cs | 2 +- .../LightningJit/Arm32/CodeGenContext.cs | 2 +- src/Ryujinx.Cpu/LightningJit/Arm32/Decoder.cs | 6 +- .../LightningJit/Arm32/InstTableA32.cs | 594 ++++++++-------- .../LightningJit/Arm32/InstTableT16.cs | 65 +- .../LightningJit/Arm32/InstTableT32.cs | 650 +++++++++--------- src/Ryujinx.Cpu/LightningJit/Arm64/Block.cs | 4 +- .../LightningJit/Arm64/MultiBlock.cs | 4 +- .../Arm64/Target/Arm64/Compiler.cs | 2 +- .../Arm64/Target/Arm64/Decoder.cs | 6 +- .../Arm64/Target/Arm64/InstTable.cs | 484 ++++++------- .../Cache/CacheMemoryAllocator.cs | 2 +- .../LightningJit/Cache/JitCache.cs | 2 +- .../Cache/JitCacheInvalidation.cs | 8 +- .../LightningJit/Cache/NoWxCache.cs | 2 +- .../Cache/PageAlignedRangeList.cs | 4 +- .../LightningJit/CodeGen/Arm64/Assembler.cs | 2 +- .../LightningJit/CodeGen/Arm64/TailMerger.cs | 2 +- src/Ryujinx.Cpu/LightningJit/CodeWriter.cs | 2 +- .../LightningJit/Table/InstTableLevel.cs | 2 +- src/Ryujinx.Cpu/LightningJit/Translator.cs | 2 +- .../LightningJit/TranslatorStubs.cs | 2 +- src/Ryujinx.Cpu/PrivateMemoryAllocator.cs | 10 +- 26 files changed, 934 insertions(+), 931 deletions(-) diff --git a/src/Ryujinx.Cpu/AddressTable.cs b/src/Ryujinx.Cpu/AddressTable.cs index 5dc72a7c8..3310f7ddd 100644 --- a/src/Ryujinx.Cpu/AddressTable.cs +++ b/src/Ryujinx.Cpu/AddressTable.cs @@ -164,7 +164,7 @@ namespace ARMeilleure.Common _fillBottomLevel = new SparseMemoryBlock(bottomLevelSize, null, _sparseFill); _fillBottomLevelPtr = (TEntry*)_fillBottomLevel.Block.Pointer; - _sparseReserved = new List(); + _sparseReserved = []; _sparseLock = new ReaderWriterLockSlim(); _sparseBlockSize = bottomLevelSize; diff --git a/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartitioned.cs b/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartitioned.cs index e3cb75f64..1cfb37258 100644 --- a/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartitioned.cs +++ b/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartitioned.cs @@ -21,7 +21,7 @@ namespace Ryujinx.Cpu.Jit.HostTracked public AddressSpacePartitioned(MemoryTracking tracking, MemoryBlock backingMemory, NativePageTable nativePageTable, bool useProtectionMirrors) { _backingMemory = backingMemory; - _partitions = new(); + _partitions = []; _asAllocator = new(tracking, nativePageTable.Read, _partitions); _updatePtCallback = nativePageTable.Update; _useProtectionMirrors = useProtectionMirrors; diff --git a/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs b/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs index 308e5f0d2..e27a2e173 100644 --- a/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs +++ b/src/Ryujinx.Cpu/Jit/MemoryManagerHostMapped.cs @@ -340,7 +340,7 @@ namespace Ryujinx.Cpu.Jit { int pages = GetPagesCount(va, (uint)size, out va); - List regions = new(); + List regions = []; ulong regionStart = GetPhysicalAddressChecked(va); ulong regionSize = PageSize; diff --git a/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs b/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs index 98b00ca0b..c2f7d3f4b 100644 --- a/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs +++ b/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs @@ -443,7 +443,7 @@ namespace Ryujinx.Cpu.Jit return null; } - List regions = new(); + List regions = []; ulong endVa = va + size; try diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/CodeGenContext.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/CodeGenContext.cs index f55e2bb99..d0490a8a6 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/CodeGenContext.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/CodeGenContext.cs @@ -36,7 +36,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 RegisterAllocator = registerAllocator; MemoryManagerType = mmType; _itConditions = new ArmCondition[4]; - _pendingBranches = new(); + _pendingBranches = []; IsThumb = isThumb; } diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/Decoder.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/Decoder.cs index 8a2b389ad..1add34f89 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/Decoder.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/Decoder.cs @@ -10,8 +10,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 { public static MultiBlock DecodeMulti(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address, bool isThumb) { - List blocks = new(); - List branchTargets = new(); + List blocks = []; + List branchTargets = []; while (true) { @@ -202,7 +202,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 { ulong startAddress = address; - List insts = new(); + List insts = []; uint encoding; InstMeta meta; diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableA32.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableA32.cs index 2168c0b9f..5a6a3c194 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableA32.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableA32.cs @@ -9,494 +9,494 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 static InstTableA32() { - InstEncoding[] condConstraints = new InstEncoding[] - { - new(0xF0000000, 0xF0000000), - }; + InstEncoding[] condConstraints = + [ + new(0xF0000000, 0xF0000000) + ]; - InstEncoding[] condRnsRnConstraints = new InstEncoding[] - { + InstEncoding[] condRnsRnConstraints = + [ new(0xF0000000, 0xF0000000), new(0x000F0000, 0x001F0000), - new(0x000D0000, 0x000F0000), - }; + new(0x000D0000, 0x000F0000) + ]; - InstEncoding[] condRnConstraints = new InstEncoding[] - { + InstEncoding[] condRnConstraints = + [ new(0xF0000000, 0xF0000000), - new(0x000D0000, 0x000F0000), - }; + new(0x000D0000, 0x000F0000) + ]; - InstEncoding[] vdVmConstraints = new InstEncoding[] - { + InstEncoding[] vdVmConstraints = + [ new(0x00001000, 0x00001000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] condRnConstraints2 = new InstEncoding[] - { + InstEncoding[] condRnConstraints2 = + [ new(0xF0000000, 0xF0000000), - new(0x0000000F, 0x0000000F), - }; + new(0x0000000F, 0x0000000F) + ]; - InstEncoding[] optionConstraints = new InstEncoding[] - { - new(0x00000000, 0x0000000F), - }; + InstEncoding[] optionConstraints = + [ + new(0x00000000, 0x0000000F) + ]; - InstEncoding[] condPuwPwPuwPuwConstraints = new InstEncoding[] - { + InstEncoding[] condPuwPwPuwPuwConstraints = + [ new(0xF0000000, 0xF0000000), new(0x00000000, 0x01A00000), new(0x01000000, 0x01200000), new(0x00200000, 0x01A00000), - new(0x01A00000, 0x01A00000), - }; + new(0x01A00000, 0x01A00000) + ]; - InstEncoding[] condRnPuwConstraints = new InstEncoding[] - { + InstEncoding[] condRnPuwConstraints = + [ new(0xF0000000, 0xF0000000), new(0x000F0000, 0x000F0000), - new(0x00000000, 0x01A00000), - }; + new(0x00000000, 0x01A00000) + ]; - InstEncoding[] condPuwConstraints = new InstEncoding[] - { + InstEncoding[] condPuwConstraints = + [ new(0xF0000000, 0xF0000000), - new(0x00000000, 0x01A00000), - }; + new(0x00000000, 0x01A00000) + ]; - InstEncoding[] condRnPwConstraints = new InstEncoding[] - { + InstEncoding[] condRnPwConstraints = + [ new(0xF0000000, 0xF0000000), new(0x000F0000, 0x000F0000), - new(0x00200000, 0x01200000), - }; + new(0x00200000, 0x01200000) + ]; - InstEncoding[] condPwConstraints = new InstEncoding[] - { + InstEncoding[] condPwConstraints = + [ new(0xF0000000, 0xF0000000), - new(0x00200000, 0x01200000), - }; + new(0x00200000, 0x01200000) + ]; - InstEncoding[] condRnConstraints3 = new InstEncoding[] - { + InstEncoding[] condRnConstraints3 = + [ new(0xF0000000, 0xF0000000), - new(0x000F0000, 0x000F0000), - }; + new(0x000F0000, 0x000F0000) + ]; - InstEncoding[] condMaskrConstraints = new InstEncoding[] - { + InstEncoding[] condMaskrConstraints = + [ new(0xF0000000, 0xF0000000), - new(0x00000000, 0x004F0000), - }; + new(0x00000000, 0x004F0000) + ]; - InstEncoding[] rnConstraints = new InstEncoding[] - { - new(0x000F0000, 0x000F0000), - }; + InstEncoding[] rnConstraints = + [ + new(0x000F0000, 0x000F0000) + ]; - InstEncoding[] vdVnVmConstraints = new InstEncoding[] - { + InstEncoding[] vdVnVmConstraints = + [ new(0x00001000, 0x00001000), new(0x00010000, 0x00010000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] condRaConstraints = new InstEncoding[] - { + InstEncoding[] condRaConstraints = + [ new(0xF0000000, 0xF0000000), - new(0x0000F000, 0x0000F000), - }; + new(0x0000F000, 0x0000F000) + ]; - InstEncoding[] sizeQvdQvnQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeQvdQvnQvmConstraints = + [ new(0x00300000, 0x00300000), new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] sizeVdConstraints = new InstEncoding[] - { + InstEncoding[] sizeVdConstraints = + [ new(0x00300000, 0x00300000), - new(0x00001000, 0x00001000), - }; + new(0x00001000, 0x00001000) + ]; - InstEncoding[] qvdQvnQvmConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvnQvmConstraints = + [ new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] sizeQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeQvdQvmConstraints = + [ new(0x000C0000, 0x000C0000), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] sizeVnVmConstraints = new InstEncoding[] - { + InstEncoding[] sizeVnVmConstraints = + [ new(0x00300000, 0x00300000), new(0x00010000, 0x00010000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] sizeVdOpvnConstraints = new InstEncoding[] - { + InstEncoding[] sizeVdOpvnConstraints = + [ new(0x00300000, 0x00300000), new(0x00001000, 0x00001000), - new(0x00010100, 0x00010100), - }; + new(0x00010100, 0x00010100) + ]; - InstEncoding[] cmodeCmodeQvdConstraints = new InstEncoding[] - { + InstEncoding[] cmodeCmodeQvdConstraints = + [ new(0x00000000, 0x00000100), new(0x00000C00, 0x00000C00), - new(0x00001040, 0x00001040), - }; + new(0x00001040, 0x00001040) + ]; - InstEncoding[] qvdQvnQvmOpConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvnQvmOpConstraints = + [ new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), new(0x00000041, 0x00000041), - new(0x00000000, 0x00300000), - }; + new(0x00000000, 0x00300000) + ]; - InstEncoding[] qvdQvnQvmSizeConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvnQvmSizeConstraints = + [ new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), new(0x00000041, 0x00000041), - new(0x00300000, 0x00300000), - }; + new(0x00300000, 0x00300000) + ]; - InstEncoding[] qvdQvnConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvnConstraints = + [ new(0x00001040, 0x00001040), - new(0x00010040, 0x00010040), - }; + new(0x00010040, 0x00010040) + ]; - InstEncoding[] qvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvmConstraints = + [ new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] sizeConstraints = new InstEncoding[] - { - new(0x00000000, 0x00000300), - }; + InstEncoding[] sizeConstraints = + [ + new(0x00000000, 0x00000300) + ]; - InstEncoding[] vmConstraints = new InstEncoding[] - { - new(0x00000001, 0x00000001), - }; + InstEncoding[] vmConstraints = + [ + new(0x00000001, 0x00000001) + ]; - InstEncoding[] opvdOpvmConstraints = new InstEncoding[] - { + InstEncoding[] opvdOpvmConstraints = + [ new(0x00001100, 0x00001100), - new(0x00000001, 0x00000101), - }; + new(0x00000001, 0x00000101) + ]; - InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints = + [ new(0x00000000, 0x00380000), new(0x00200000, 0x00300200), new(0x00000000, 0x00200000), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] condQvdEbConstraints = new InstEncoding[] - { + InstEncoding[] condQvdEbConstraints = + [ new(0xF0000000, 0xF0000000), new(0x00210000, 0x00210000), - new(0x00400020, 0x00400020), - }; + new(0x00400020, 0x00400020) + ]; - InstEncoding[] imm4QvdConstraints = new InstEncoding[] - { + InstEncoding[] imm4QvdConstraints = + [ new(0x00000000, 0x00070000), - new(0x00001040, 0x00001040), - }; + new(0x00001040, 0x00001040) + ]; - InstEncoding[] qvdQvnQvmQimm4Constraints = new InstEncoding[] - { + InstEncoding[] qvdQvnQvmQimm4Constraints = + [ new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), new(0x00000041, 0x00000041), - new(0x00000800, 0x00000840), - }; + new(0x00000800, 0x00000840) + ]; - InstEncoding[] qvdConstraints = new InstEncoding[] - { - new(0x00001040, 0x00001040), - }; + InstEncoding[] qvdConstraints = + [ + new(0x00001040, 0x00001040) + ]; - InstEncoding[] vdVnConstraints = new InstEncoding[] - { + InstEncoding[] vdVnConstraints = + [ new(0x00001000, 0x00001000), - new(0x00010000, 0x00010000), - }; + new(0x00010000, 0x00010000) + ]; - InstEncoding[] sizeConstraints2 = new InstEncoding[] - { - new(0x00000C00, 0x00000C00), - }; + InstEncoding[] sizeConstraints2 = + [ + new(0x00000C00, 0x00000C00) + ]; - InstEncoding[] sizeIndexAlignIndexAlignConstraints = new InstEncoding[] - { + InstEncoding[] sizeIndexAlignIndexAlignConstraints = + [ new(0x00000C00, 0x00000C00), new(0x00000010, 0x00000030), - new(0x00000020, 0x00000030), - }; + new(0x00000020, 0x00000030) + ]; - InstEncoding[] sizeSizeaConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeaConstraints = + [ new(0x000000C0, 0x000000C0), - new(0x00000010, 0x000000D0), - }; + new(0x00000010, 0x000000D0) + ]; - InstEncoding[] alignConstraints = new InstEncoding[] - { - new(0x00000020, 0x00000020), - }; + InstEncoding[] alignConstraints = + [ + new(0x00000020, 0x00000020) + ]; - InstEncoding[] alignConstraints2 = new InstEncoding[] - { + InstEncoding[] alignConstraints2 = + [ + new(0x00000030, 0x00000030) + ]; + + InstEncoding[] sizeConstraints3 = + [ + new(0x000000C0, 0x000000C0) + ]; + + InstEncoding[] alignSizeConstraints = + [ new(0x00000030, 0x00000030), - }; + new(0x000000C0, 0x000000C0) + ]; - InstEncoding[] sizeConstraints3 = new InstEncoding[] - { + InstEncoding[] sizeAConstraints = + [ new(0x000000C0, 0x000000C0), - }; + new(0x00000010, 0x00000010) + ]; - InstEncoding[] alignSizeConstraints = new InstEncoding[] - { - new(0x00000030, 0x00000030), + InstEncoding[] sizeAlignConstraints = + [ new(0x000000C0, 0x000000C0), - }; + new(0x00000020, 0x00000020) + ]; - InstEncoding[] sizeAConstraints = new InstEncoding[] - { - new(0x000000C0, 0x000000C0), - new(0x00000010, 0x00000010), - }; - - InstEncoding[] sizeAlignConstraints = new InstEncoding[] - { - new(0x000000C0, 0x000000C0), - new(0x00000020, 0x00000020), - }; - - InstEncoding[] sizeIndexAlignConstraints = new InstEncoding[] - { + InstEncoding[] sizeIndexAlignConstraints = + [ new(0x00000C00, 0x00000C00), - new(0x00000030, 0x00000030), - }; + new(0x00000030, 0x00000030) + ]; - InstEncoding[] sizeaConstraints = new InstEncoding[] - { - new(0x000000C0, 0x000000D0), - }; + InstEncoding[] sizeaConstraints = + [ + new(0x000000C0, 0x000000D0) + ]; - InstEncoding[] sizeSizeVdConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeVdConstraints = + [ new(0x00300000, 0x00300000), new(0x00000000, 0x00300000), - new(0x00001000, 0x00001000), - }; + new(0x00001000, 0x00001000) + ]; - InstEncoding[] sizeQvdQvnConstraints = new InstEncoding[] - { + InstEncoding[] sizeQvdQvnConstraints = + [ new(0x00300000, 0x00300000), new(0x01001000, 0x01001000), - new(0x01010000, 0x01010000), - }; + new(0x01010000, 0x01010000) + ]; - InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints = new InstEncoding[] - { + InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints = + [ new(0x00000000, 0x00380000), new(0x00180000, 0x00380000), new(0x00280000, 0x00380000), new(0x00300000, 0x00380000), new(0x00380000, 0x00380000), - new(0x00001000, 0x00001000), - }; + new(0x00001000, 0x00001000) + ]; - InstEncoding[] sizeVmConstraints = new InstEncoding[] - { + InstEncoding[] sizeVmConstraints = + [ new(0x000C0000, 0x000C0000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] condOpc1opc2Constraints = new InstEncoding[] - { + InstEncoding[] condOpc1opc2Constraints = + [ new(0xF0000000, 0xF0000000), - new(0x00000040, 0x00400060), - }; + new(0x00000040, 0x00400060) + ]; - InstEncoding[] condUopc1opc2Uopc1opc2Constraints = new InstEncoding[] - { + InstEncoding[] condUopc1opc2Uopc1opc2Constraints = + [ new(0xF0000000, 0xF0000000), new(0x00800000, 0x00C00060), - new(0x00000040, 0x00400060), - }; + new(0x00000040, 0x00400060) + ]; - InstEncoding[] sizeOpuOpsizeVdConstraints = new InstEncoding[] - { + InstEncoding[] sizeOpuOpsizeVdConstraints = + [ new(0x00300000, 0x00300000), new(0x01000200, 0x01000200), new(0x00100200, 0x00300200), - new(0x00001000, 0x00001000), - }; + new(0x00001000, 0x00001000) + ]; - InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints = + [ new(0x00300000, 0x00300000), new(0x01100000, 0x01300000), new(0x01200000, 0x01300000), new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] cmodeQvdConstraints = new InstEncoding[] - { + InstEncoding[] cmodeQvdConstraints = + [ new(0x00000E00, 0x00000E00), - new(0x00001040, 0x00001040), - }; + new(0x00001040, 0x00001040) + ]; - InstEncoding[] qConstraints = new InstEncoding[] - { - new(0x00000040, 0x00000040), - }; + InstEncoding[] qConstraints = + [ + new(0x00000040, 0x00000040) + ]; - InstEncoding[] sizeQConstraints = new InstEncoding[] - { + InstEncoding[] sizeQConstraints = + [ new(0x00300000, 0x00300000), - new(0x00000040, 0x00000040), - }; + new(0x00000040, 0x00000040) + ]; - InstEncoding[] sizeConstraints4 = new InstEncoding[] - { - new(0x00300000, 0x00300000), - }; + InstEncoding[] sizeConstraints4 = + [ + new(0x00300000, 0x00300000) + ]; - InstEncoding[] qvdQvnQvmSizeSizeConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvnQvmSizeSizeConstraints = + [ new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), new(0x00000041, 0x00000041), new(0x00000000, 0x00300000), - new(0x00300000, 0x00300000), - }; + new(0x00300000, 0x00300000) + ]; - InstEncoding[] sizeSizeQvdQvnConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeQvdQvnConstraints = + [ new(0x00300000, 0x00300000), new(0x00000000, 0x00300000), new(0x01001000, 0x01001000), - new(0x01010000, 0x01010000), - }; + new(0x01010000, 0x01010000) + ]; - InstEncoding[] opSizeVmConstraints = new InstEncoding[] - { + InstEncoding[] opSizeVmConstraints = + [ new(0x00000000, 0x000000C0), new(0x000C0000, 0x000C0000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] qvdQvmQvnConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvmQvnConstraints = + [ new(0x00001040, 0x00001040), new(0x00000041, 0x00000041), - new(0x00010040, 0x00010040), - }; + new(0x00010040, 0x00010040) + ]; - InstEncoding[] imm6UopVmConstraints = new InstEncoding[] - { + InstEncoding[] imm6UopVmConstraints = + [ new(0x00000000, 0x00380000), new(0x00000000, 0x01000100), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] imm6lUopQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] imm6lUopQvdQvmConstraints = + [ new(0x00000000, 0x00380080), new(0x00000000, 0x01000100), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] qvdQvmSizeSizeConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvmSizeSizeConstraints = + [ new(0x00001040, 0x00001040), new(0x00000041, 0x00000041), new(0x00000000, 0x000C0000), - new(0x000C0000, 0x000C0000), - }; + new(0x000C0000, 0x000C0000) + ]; - InstEncoding[] sizeSizeSizeQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeSizeQvdQvmConstraints = + [ new(0x00040000, 0x000C0000), new(0x00080000, 0x000C0000), new(0x000C0000, 0x000C0000), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] sizeSizeQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeQvdQvmConstraints = + [ new(0x00080000, 0x000C0000), new(0x000C0000, 0x000C0000), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] imm6lQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] imm6lQvdQvmConstraints = + [ new(0x00000000, 0x00380080), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] imm6VmConstraints = new InstEncoding[] - { + InstEncoding[] imm6VmConstraints = + [ new(0x00000000, 0x00380000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] imm6VdImm6Imm6Imm6Constraints = new InstEncoding[] - { + InstEncoding[] imm6VdImm6Imm6Imm6Constraints = + [ new(0x00000000, 0x00380000), new(0x00001000, 0x00001000), new(0x00080000, 0x003F0000), new(0x00100000, 0x003F0000), - new(0x00200000, 0x003F0000), - }; + new(0x00200000, 0x003F0000) + ]; - InstEncoding[] sizeVdConstraints2 = new InstEncoding[] - { + InstEncoding[] sizeVdConstraints2 = + [ new(0x000C0000, 0x000C0000), - new(0x00001000, 0x00001000), - }; + new(0x00001000, 0x00001000) + ]; - InstEncoding[] sizeQsizeQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeQsizeQvdQvmConstraints = + [ new(0x000C0000, 0x000C0000), new(0x00080000, 0x000C0040), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - List insts = new() - { + List insts = + [ new(0x02A00000, 0x0FE00000, condConstraints, InstName.AdcI, T.AdcIA1, IsaVersion.v80, InstFlags.CondRd), new(0x00A00000, 0x0FE00010, condConstraints, InstName.AdcR, T.AdcRA1, IsaVersion.v80, InstFlags.CondRd), new(0x00A00010, 0x0FE00090, condConstraints, InstName.AdcRr, T.AdcRrA1, IsaVersion.v80, InstFlags.CondRd), @@ -1176,7 +1176,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 new(0x0320F002, 0x0FFFFFFF, condConstraints, InstName.Wfe, T.WfeA1, IsaVersion.v80, InstFlags.Cond), new(0x0320F003, 0x0FFFFFFF, condConstraints, InstName.Wfi, T.WfiA1, IsaVersion.v80, InstFlags.Cond), new(0x0320F001, 0x0FFFFFFF, condConstraints, InstName.Yield, T.YieldA1, IsaVersion.v80, InstFlags.Cond), - }; + ]; _table = new(insts); } diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableT16.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableT16.cs index 7ff5f6c90..f660cdcec 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableT16.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableT16.cs @@ -9,48 +9,49 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 static InstTableT16() { - InstEncoding[] rmRdndnConstraints = new InstEncoding[] - { + InstEncoding[] rmRdndnConstraints = + [ new(0x00680000, 0x00780000), - new(0x00850000, 0x00870000), - }; + new(0x00850000, 0x00870000) + ]; - InstEncoding[] rmConstraints = new InstEncoding[] - { - new(0x00680000, 0x00780000), - }; + InstEncoding[] rmConstraints = + [ + new(0x00680000, 0x00780000) + ]; - InstEncoding[] condCondConstraints = new InstEncoding[] - { + InstEncoding[] condCondConstraints = + [ new(0x0E000000, 0x0F000000), - new(0x0F000000, 0x0F000000), - }; + new(0x0F000000, 0x0F000000) + ]; - InstEncoding[] maskConstraints = new InstEncoding[] - { - new(0x00000000, 0x000F0000), - }; + InstEncoding[] maskConstraints = + [ + new(0x00000000, 0x000F0000) + ]; - InstEncoding[] opConstraints = new InstEncoding[] - { - new(0x18000000, 0x18000000), - }; + InstEncoding[] opConstraints = + [ + new(0x18000000, 0x18000000) + ]; - InstEncoding[] opOpOpOpConstraints = new InstEncoding[] - { + InstEncoding[] opOpOpOpConstraints = + [ new(0x00000000, 0x03C00000), new(0x00400000, 0x03C00000), new(0x01400000, 0x03C00000), - new(0x01800000, 0x03C00000), - }; + new(0x01800000, 0x03C00000) + ]; - List insts = new() - { + List insts = + [ new(0x41400000, 0xFFC00000, InstName.AdcR, T.AdcRT1, IsaVersion.v80, InstFlags.Rdn), new(0x1C000000, 0xFE000000, InstName.AddI, T.AddIT1, IsaVersion.v80, InstFlags.Rd), new(0x30000000, 0xF8000000, InstName.AddI, T.AddIT2, IsaVersion.v80, InstFlags.Rdn), new(0x18000000, 0xFE000000, InstName.AddR, T.AddRT1, IsaVersion.v80, InstFlags.Rd), - new(0x44000000, 0xFF000000, rmRdndnConstraints, InstName.AddR, T.AddRT2, IsaVersion.v80, InstFlags.RdnDn), + new(0x44000000, 0xFF000000, rmRdndnConstraints, InstName.AddR, T.AddRT2, IsaVersion.v80, + InstFlags.RdnDn), new(0xA8000000, 0xF8000000, InstName.AddSpI, T.AddSpIT1, IsaVersion.v80, InstFlags.RdRd16), new(0xB0000000, 0xFF800000, InstName.AddSpI, T.AddSpIT2, IsaVersion.v80, InstFlags.None), new(0x44680000, 0xFF780000, InstName.AddSpR, T.AddSpRT1, IsaVersion.v80, InstFlags.None), @@ -86,7 +87,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 new(0x20000000, 0xF8000000, InstName.MovI, T.MovIT1, IsaVersion.v80, InstFlags.RdRd16), new(0x46000000, 0xFF000000, InstName.MovR, T.MovRT1, IsaVersion.v80, InstFlags.Rd), new(0x00000000, 0xE0000000, opConstraints, InstName.MovR, T.MovRT2, IsaVersion.v80, InstFlags.Rd), - new(0x40000000, 0xFE000000, opOpOpOpConstraints, InstName.MovRr, T.MovRrT1, IsaVersion.v80, InstFlags.None), + new(0x40000000, 0xFE000000, opOpOpOpConstraints, InstName.MovRr, T.MovRrT1, IsaVersion.v80, + InstFlags.None), new(0x43400000, 0xFFC00000, InstName.Mul, T.MulT1, IsaVersion.v80, InstFlags.None), new(0x43C00000, 0xFFC00000, InstName.MvnR, T.MvnRT1, IsaVersion.v80, InstFlags.Rd), new(0xBF000000, 0xFFFF0000, InstName.Nop, T.NopT1, IsaVersion.v80, InstFlags.None), @@ -99,7 +101,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 new(0x42400000, 0xFFC00000, InstName.RsbI, T.RsbIT1, IsaVersion.v80, InstFlags.Rd), new(0x41800000, 0xFFC00000, InstName.SbcR, T.SbcRT1, IsaVersion.v80, InstFlags.Rdn), new(0xB6500000, 0xFFF70000, InstName.Setend, T.SetendT1, IsaVersion.v80, InstFlags.None), - new(0xB6100000, 0xFFF70000, InstName.Setpan, T.SetpanT1, IsaVersion.v81, IsaFeature.FeatPan, InstFlags.None), + new(0xB6100000, 0xFFF70000, InstName.Setpan, T.SetpanT1, IsaVersion.v81, IsaFeature.FeatPan, + InstFlags.None), new(0xBF400000, 0xFFFF0000, InstName.Sev, T.SevT1, IsaVersion.v80, InstFlags.None), new(0xBF500000, 0xFFFF0000, InstName.Sevl, T.SevlT1, IsaVersion.v80, InstFlags.None), new(0xC0000000, 0xF8000000, InstName.Stm, T.StmT1, IsaVersion.v80, InstFlags.RlistRead), @@ -123,8 +126,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 new(0xB2800000, 0xFFC00000, InstName.Uxth, T.UxthT1, IsaVersion.v80, InstFlags.Rd), new(0xBF200000, 0xFFFF0000, InstName.Wfe, T.WfeT1, IsaVersion.v80, InstFlags.None), new(0xBF300000, 0xFFFF0000, InstName.Wfi, T.WfiT1, IsaVersion.v80, InstFlags.None), - new(0xBF100000, 0xFFFF0000, InstName.Yield, T.YieldT1, IsaVersion.v80, InstFlags.None), - }; + new(0xBF100000, 0xFFFF0000, InstName.Yield, T.YieldT1, IsaVersion.v80, InstFlags.None) + ]; _table = new(insts); } diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableT32.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableT32.cs index 4a11effdb..09222f43e 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableT32.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm32/InstTableT32.cs @@ -9,525 +9,525 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 static InstTableT32() { - InstEncoding[] rnRdsConstraints = new InstEncoding[] - { + InstEncoding[] rnRdsConstraints = + [ new(0x000D0000, 0x000F0000), - new(0x00100F00, 0x00100F00), - }; + new(0x00100F00, 0x00100F00) + ]; - InstEncoding[] rnRnConstraints = new InstEncoding[] - { + InstEncoding[] rnRnConstraints = + [ new(0x000D0000, 0x000F0000), - new(0x000F0000, 0x000F0000), - }; + new(0x000F0000, 0x000F0000) + ]; - InstEncoding[] rdsConstraints = new InstEncoding[] - { - new(0x00100F00, 0x00100F00), - }; + InstEncoding[] rdsConstraints = + [ + new(0x00100F00, 0x00100F00) + ]; - InstEncoding[] vdVmConstraints = new InstEncoding[] - { + InstEncoding[] vdVmConstraints = + [ new(0x00001000, 0x00001000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] condCondCondConstraints = new InstEncoding[] - { + InstEncoding[] condCondCondConstraints = + [ new(0x03800000, 0x03C00000), new(0x03C00000, 0x03C00000), - new(0x03800000, 0x03800000), - }; + new(0x03800000, 0x03800000) + ]; - InstEncoding[] rnConstraints = new InstEncoding[] - { - new(0x000F0000, 0x000F0000), - }; + InstEncoding[] rnConstraints = + [ + new(0x000F0000, 0x000F0000) + ]; - InstEncoding[] hConstraints = new InstEncoding[] - { - new(0x00000001, 0x00000001), - }; + InstEncoding[] hConstraints = + [ + new(0x00000001, 0x00000001) + ]; - InstEncoding[] imodmConstraints = new InstEncoding[] - { - new(0x00000000, 0x00000700), - }; + InstEncoding[] imodmConstraints = + [ + new(0x00000000, 0x00000700) + ]; - InstEncoding[] optionConstraints = new InstEncoding[] - { - new(0x00000000, 0x0000000F), - }; + InstEncoding[] optionConstraints = + [ + new(0x00000000, 0x0000000F) + ]; - InstEncoding[] puwPwPuwPuwConstraints = new InstEncoding[] - { + InstEncoding[] puwPwPuwPuwConstraints = + [ new(0x00000000, 0x01A00000), new(0x01000000, 0x01200000), new(0x00200000, 0x01A00000), - new(0x01A00000, 0x01A00000), - }; + new(0x01A00000, 0x01A00000) + ]; - InstEncoding[] rnPuwConstraints = new InstEncoding[] - { + InstEncoding[] rnPuwConstraints = + [ new(0x000F0000, 0x000F0000), - new(0x00000000, 0x01A00000), - }; + new(0x00000000, 0x01A00000) + ]; - InstEncoding[] puwConstraints = new InstEncoding[] - { - new(0x00000000, 0x01A00000), - }; + InstEncoding[] puwConstraints = + [ + new(0x00000000, 0x01A00000) + ]; - InstEncoding[] rnRtConstraints = new InstEncoding[] - { + InstEncoding[] rnRtConstraints = + [ new(0x000F0000, 0x000F0000), - new(0x0000F000, 0x0000F000), - }; + new(0x0000F000, 0x0000F000) + ]; - InstEncoding[] rnRtpuwPuwPwConstraints = new InstEncoding[] - { + InstEncoding[] rnRtpuwPuwPwConstraints = + [ new(0x000F0000, 0x000F0000), new(0x0000F400, 0x0000F700), new(0x00000600, 0x00000700), - new(0x00000000, 0x00000500), - }; + new(0x00000000, 0x00000500) + ]; - InstEncoding[] rtConstraints = new InstEncoding[] - { - new(0x0000F000, 0x0000F000), - }; + InstEncoding[] rtConstraints = + [ + new(0x0000F000, 0x0000F000) + ]; - InstEncoding[] rnPwConstraints = new InstEncoding[] - { + InstEncoding[] rnPwConstraints = + [ new(0x000F0000, 0x000F0000), - new(0x00000000, 0x01200000), - }; + new(0x00000000, 0x01200000) + ]; - InstEncoding[] pwConstraints = new InstEncoding[] - { - new(0x00000000, 0x01200000), - }; + InstEncoding[] pwConstraints = + [ + new(0x00000000, 0x01200000) + ]; - InstEncoding[] rnPuwPwConstraints = new InstEncoding[] - { + InstEncoding[] rnPuwPwConstraints = + [ new(0x000F0000, 0x000F0000), new(0x00000600, 0x00000700), - new(0x00000000, 0x00000500), - }; + new(0x00000000, 0x00000500) + ]; - InstEncoding[] raConstraints = new InstEncoding[] - { - new(0x0000F000, 0x0000F000), - }; + InstEncoding[] raConstraints = + [ + new(0x0000F000, 0x0000F000) + ]; - InstEncoding[] sTConstraints = new InstEncoding[] - { + InstEncoding[] sTConstraints = + [ new(0x00100000, 0x00100000), - new(0x00000010, 0x00000010), - }; + new(0x00000010, 0x00000010) + ]; - InstEncoding[] vdVnVmConstraints = new InstEncoding[] - { + InstEncoding[] vdVnVmConstraints = + [ new(0x00001000, 0x00001000), new(0x00010000, 0x00010000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] shimm2imm3Constraints = new InstEncoding[] - { - new(0x00200000, 0x002070C0), - }; + InstEncoding[] shimm2imm3Constraints = + [ + new(0x00200000, 0x002070C0) + ]; - InstEncoding[] rnimm8Constraints = new InstEncoding[] - { - new(0x000E0000, 0x000F00FF), - }; + InstEncoding[] rnimm8Constraints = + [ + new(0x000E0000, 0x000F00FF) + ]; - InstEncoding[] sizeQvdQvnQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeQvdQvnQvmConstraints = + [ new(0x00300000, 0x00300000), new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] sizeVdConstraints = new InstEncoding[] - { + InstEncoding[] sizeVdConstraints = + [ new(0x00300000, 0x00300000), - new(0x00001000, 0x00001000), - }; + new(0x00001000, 0x00001000) + ]; - InstEncoding[] qvdQvnQvmConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvnQvmConstraints = + [ new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] sizeQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeQvdQvmConstraints = + [ new(0x000C0000, 0x000C0000), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] sizeVnVmConstraints = new InstEncoding[] - { + InstEncoding[] sizeVnVmConstraints = + [ new(0x00300000, 0x00300000), new(0x00010000, 0x00010000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] sizeVdOpvnConstraints = new InstEncoding[] - { + InstEncoding[] sizeVdOpvnConstraints = + [ new(0x00300000, 0x00300000), new(0x00001000, 0x00001000), - new(0x00010100, 0x00010100), - }; + new(0x00010100, 0x00010100) + ]; - InstEncoding[] cmodeCmodeQvdConstraints = new InstEncoding[] - { + InstEncoding[] cmodeCmodeQvdConstraints = + [ new(0x00000000, 0x00000100), new(0x00000C00, 0x00000C00), - new(0x00001040, 0x00001040), - }; + new(0x00001040, 0x00001040) + ]; - InstEncoding[] qvdQvnQvmOpConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvnQvmOpConstraints = + [ new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), new(0x00000041, 0x00000041), - new(0x00000000, 0x00300000), - }; + new(0x00000000, 0x00300000) + ]; - InstEncoding[] qvdQvnQvmSizeConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvnQvmSizeConstraints = + [ new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), new(0x00000041, 0x00000041), - new(0x00300000, 0x00300000), - }; + new(0x00300000, 0x00300000) + ]; - InstEncoding[] qvdQvnConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvnConstraints = + [ new(0x00001040, 0x00001040), - new(0x00010040, 0x00010040), - }; + new(0x00010040, 0x00010040) + ]; - InstEncoding[] qvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvmConstraints = + [ new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] sizeConstraints = new InstEncoding[] - { - new(0x00000000, 0x00000300), - }; + InstEncoding[] sizeConstraints = + [ + new(0x00000000, 0x00000300) + ]; - InstEncoding[] vmConstraints = new InstEncoding[] - { - new(0x00000001, 0x00000001), - }; + InstEncoding[] vmConstraints = + [ + new(0x00000001, 0x00000001) + ]; - InstEncoding[] opvdOpvmConstraints = new InstEncoding[] - { + InstEncoding[] opvdOpvmConstraints = + [ new(0x00001100, 0x00001100), - new(0x00000001, 0x00000101), - }; + new(0x00000001, 0x00000101) + ]; - InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] imm6Opimm6Imm6QvdQvmConstraints = + [ new(0x00000000, 0x00380000), new(0x00200000, 0x00300200), new(0x00000000, 0x00200000), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] qvdEbConstraints = new InstEncoding[] - { + InstEncoding[] qvdEbConstraints = + [ new(0x00210000, 0x00210000), - new(0x00400020, 0x00400020), - }; + new(0x00400020, 0x00400020) + ]; - InstEncoding[] imm4QvdConstraints = new InstEncoding[] - { + InstEncoding[] imm4QvdConstraints = + [ new(0x00000000, 0x00070000), - new(0x00001040, 0x00001040), - }; + new(0x00001040, 0x00001040) + ]; - InstEncoding[] qvdQvnQvmQimm4Constraints = new InstEncoding[] - { + InstEncoding[] qvdQvnQvmQimm4Constraints = + [ new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), new(0x00000041, 0x00000041), - new(0x00000800, 0x00000840), - }; + new(0x00000800, 0x00000840) + ]; - InstEncoding[] qvdConstraints = new InstEncoding[] - { - new(0x00001040, 0x00001040), - }; + InstEncoding[] qvdConstraints = + [ + new(0x00001040, 0x00001040) + ]; - InstEncoding[] vdVnConstraints = new InstEncoding[] - { + InstEncoding[] vdVnConstraints = + [ new(0x00001000, 0x00001000), - new(0x00010000, 0x00010000), - }; + new(0x00010000, 0x00010000) + ]; - InstEncoding[] sizeConstraints2 = new InstEncoding[] - { - new(0x00000C00, 0x00000C00), - }; + InstEncoding[] sizeConstraints2 = + [ + new(0x00000C00, 0x00000C00) + ]; - InstEncoding[] sizeIndexAlignIndexAlignConstraints = new InstEncoding[] - { + InstEncoding[] sizeIndexAlignIndexAlignConstraints = + [ new(0x00000C00, 0x00000C00), new(0x00000010, 0x00000030), - new(0x00000020, 0x00000030), - }; + new(0x00000020, 0x00000030) + ]; - InstEncoding[] sizeSizeaConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeaConstraints = + [ new(0x000000C0, 0x000000C0), - new(0x00000010, 0x000000D0), - }; + new(0x00000010, 0x000000D0) + ]; - InstEncoding[] alignConstraints = new InstEncoding[] - { - new(0x00000020, 0x00000020), - }; + InstEncoding[] alignConstraints = + [ + new(0x00000020, 0x00000020) + ]; - InstEncoding[] alignConstraints2 = new InstEncoding[] - { + InstEncoding[] alignConstraints2 = + [ + new(0x00000030, 0x00000030) + ]; + + InstEncoding[] sizeConstraints3 = + [ + new(0x000000C0, 0x000000C0) + ]; + + InstEncoding[] alignSizeConstraints = + [ new(0x00000030, 0x00000030), - }; + new(0x000000C0, 0x000000C0) + ]; - InstEncoding[] sizeConstraints3 = new InstEncoding[] - { + InstEncoding[] sizeAConstraints = + [ new(0x000000C0, 0x000000C0), - }; + new(0x00000010, 0x00000010) + ]; - InstEncoding[] alignSizeConstraints = new InstEncoding[] - { - new(0x00000030, 0x00000030), + InstEncoding[] sizeAlignConstraints = + [ new(0x000000C0, 0x000000C0), - }; + new(0x00000020, 0x00000020) + ]; - InstEncoding[] sizeAConstraints = new InstEncoding[] - { - new(0x000000C0, 0x000000C0), - new(0x00000010, 0x00000010), - }; - - InstEncoding[] sizeAlignConstraints = new InstEncoding[] - { - new(0x000000C0, 0x000000C0), - new(0x00000020, 0x00000020), - }; - - InstEncoding[] sizeIndexAlignConstraints = new InstEncoding[] - { + InstEncoding[] sizeIndexAlignConstraints = + [ new(0x00000C00, 0x00000C00), - new(0x00000030, 0x00000030), - }; + new(0x00000030, 0x00000030) + ]; - InstEncoding[] sizeaConstraints = new InstEncoding[] - { - new(0x000000C0, 0x000000D0), - }; + InstEncoding[] sizeaConstraints = + [ + new(0x000000C0, 0x000000D0) + ]; - InstEncoding[] sizeSizeVdConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeVdConstraints = + [ new(0x00300000, 0x00300000), new(0x00000000, 0x00300000), - new(0x00001000, 0x00001000), - }; + new(0x00001000, 0x00001000) + ]; - InstEncoding[] sizeQvdQvnConstraints = new InstEncoding[] - { + InstEncoding[] sizeQvdQvnConstraints = + [ new(0x00300000, 0x00300000), new(0x10001000, 0x10001000), - new(0x10010000, 0x10010000), - }; + new(0x10010000, 0x10010000) + ]; - InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints = new InstEncoding[] - { + InstEncoding[] imm3hImm3hImm3hImm3hImm3hVdConstraints = + [ new(0x00000000, 0x00380000), new(0x00180000, 0x00380000), new(0x00280000, 0x00380000), new(0x00300000, 0x00380000), new(0x00380000, 0x00380000), - new(0x00001000, 0x00001000), - }; + new(0x00001000, 0x00001000) + ]; - InstEncoding[] sizeVmConstraints = new InstEncoding[] - { + InstEncoding[] sizeVmConstraints = + [ new(0x000C0000, 0x000C0000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] opc1opc2Constraints = new InstEncoding[] - { - new(0x00000040, 0x00400060), - }; + InstEncoding[] opc1opc2Constraints = + [ + new(0x00000040, 0x00400060) + ]; - InstEncoding[] uopc1opc2Uopc1opc2Constraints = new InstEncoding[] - { + InstEncoding[] uopc1opc2Uopc1opc2Constraints = + [ new(0x00800000, 0x00C00060), - new(0x00000040, 0x00400060), - }; + new(0x00000040, 0x00400060) + ]; - InstEncoding[] sizeOpuOpsizeVdConstraints = new InstEncoding[] - { + InstEncoding[] sizeOpuOpsizeVdConstraints = + [ new(0x00300000, 0x00300000), new(0x10000200, 0x10000200), new(0x00100200, 0x00300200), - new(0x00001000, 0x00001000), - }; + new(0x00001000, 0x00001000) + ]; - InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeOpsizeOpsizeQvdQvnQvmConstraints = + [ new(0x00300000, 0x00300000), new(0x10100000, 0x10300000), new(0x10200000, 0x10300000), new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] cmodeQvdConstraints = new InstEncoding[] - { + InstEncoding[] cmodeQvdConstraints = + [ new(0x00000E00, 0x00000E00), - new(0x00001040, 0x00001040), - }; + new(0x00001040, 0x00001040) + ]; - InstEncoding[] qConstraints = new InstEncoding[] - { - new(0x00000040, 0x00000040), - }; + InstEncoding[] qConstraints = + [ + new(0x00000040, 0x00000040) + ]; - InstEncoding[] sizeQConstraints = new InstEncoding[] - { + InstEncoding[] sizeQConstraints = + [ new(0x00300000, 0x00300000), - new(0x00000040, 0x00000040), - }; + new(0x00000040, 0x00000040) + ]; - InstEncoding[] sizeConstraints4 = new InstEncoding[] - { - new(0x00300000, 0x00300000), - }; + InstEncoding[] sizeConstraints4 = + [ + new(0x00300000, 0x00300000) + ]; - InstEncoding[] qvdQvnQvmSizeSizeConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvnQvmSizeSizeConstraints = + [ new(0x00001040, 0x00001040), new(0x00010040, 0x00010040), new(0x00000041, 0x00000041), new(0x00000000, 0x00300000), - new(0x00300000, 0x00300000), - }; + new(0x00300000, 0x00300000) + ]; - InstEncoding[] sizeSizeQvdQvnConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeQvdQvnConstraints = + [ new(0x00300000, 0x00300000), new(0x00000000, 0x00300000), new(0x10001000, 0x10001000), - new(0x10010000, 0x10010000), - }; + new(0x10010000, 0x10010000) + ]; - InstEncoding[] opSizeVmConstraints = new InstEncoding[] - { + InstEncoding[] opSizeVmConstraints = + [ new(0x00000000, 0x000000C0), new(0x000C0000, 0x000C0000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] qvdQvmQvnConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvmQvnConstraints = + [ new(0x00001040, 0x00001040), new(0x00000041, 0x00000041), - new(0x00010040, 0x00010040), - }; + new(0x00010040, 0x00010040) + ]; - InstEncoding[] imm6UopVmConstraints = new InstEncoding[] - { + InstEncoding[] imm6UopVmConstraints = + [ new(0x00000000, 0x00380000), new(0x00000000, 0x10000100), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] imm6lUopQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] imm6lUopQvdQvmConstraints = + [ new(0x00000000, 0x00380080), new(0x00000000, 0x10000100), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] qvdQvmSizeSizeConstraints = new InstEncoding[] - { + InstEncoding[] qvdQvmSizeSizeConstraints = + [ new(0x00001040, 0x00001040), new(0x00000041, 0x00000041), new(0x00000000, 0x000C0000), - new(0x000C0000, 0x000C0000), - }; + new(0x000C0000, 0x000C0000) + ]; - InstEncoding[] sizeSizeSizeQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeSizeQvdQvmConstraints = + [ new(0x00040000, 0x000C0000), new(0x00080000, 0x000C0000), new(0x000C0000, 0x000C0000), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] sizeSizeQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeQvdQvmConstraints = + [ new(0x00080000, 0x000C0000), new(0x000C0000, 0x000C0000), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] imm6lQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] imm6lQvdQvmConstraints = + [ new(0x00000000, 0x00380080), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - InstEncoding[] imm6VmConstraints = new InstEncoding[] - { + InstEncoding[] imm6VmConstraints = + [ new(0x00000000, 0x00380000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] imm6VdImm6Imm6Imm6Constraints = new InstEncoding[] - { + InstEncoding[] imm6VdImm6Imm6Imm6Constraints = + [ new(0x00000000, 0x00380000), new(0x00001000, 0x00001000), new(0x00080000, 0x003F0000), new(0x00100000, 0x003F0000), - new(0x00200000, 0x003F0000), - }; + new(0x00200000, 0x003F0000) + ]; - InstEncoding[] sizeVdConstraints2 = new InstEncoding[] - { + InstEncoding[] sizeVdConstraints2 = + [ new(0x000C0000, 0x000C0000), - new(0x00001000, 0x00001000), - }; + new(0x00001000, 0x00001000) + ]; - InstEncoding[] sizeQsizeQvdQvmConstraints = new InstEncoding[] - { + InstEncoding[] sizeQsizeQvdQvmConstraints = + [ new(0x000C0000, 0x000C0000), new(0x00080000, 0x000C0040), new(0x00001040, 0x00001040), - new(0x00000041, 0x00000041), - }; + new(0x00000041, 0x00000041) + ]; - List insts = new() - { + List insts = + [ new(0xF1400000, 0xFBE08000, InstName.AdcI, T.AdcIT1, IsaVersion.v80, InstFlags.Rd), new(0xEB400000, 0xFFE08000, InstName.AdcR, T.AdcRT2, IsaVersion.v80, InstFlags.Rd), new(0xF1000000, 0xFBE08000, rnRdsConstraints, InstName.AddI, T.AddIT3, IsaVersion.v80, InstFlags.Rd), @@ -1190,7 +1190,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32 new(0xF3AF8002, 0xFFFFFFFF, InstName.Wfe, T.WfeT2, IsaVersion.v80, InstFlags.None), new(0xF3AF8003, 0xFFFFFFFF, InstName.Wfi, T.WfiT2, IsaVersion.v80, InstFlags.None), new(0xF3AF8001, 0xFFFFFFFF, InstName.Yield, T.YieldT2, IsaVersion.v80, InstFlags.None), - }; + ]; _table = new(insts); } diff --git a/src/Ryujinx.Cpu/LightningJit/Arm64/Block.cs b/src/Ryujinx.Cpu/LightningJit/Arm64/Block.cs index 188630a1c..405126357 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm64/Block.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm64/Block.cs @@ -25,8 +25,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64 { Debug.Assert((int)((endAddress - address) / 4) == instructions.Count); - _predecessors = new(); - _successors = new(); + _predecessors = []; + _successors = []; Address = address; EndAddress = endAddress; Instructions = instructions; diff --git a/src/Ryujinx.Cpu/LightningJit/Arm64/MultiBlock.cs b/src/Ryujinx.Cpu/LightningJit/Arm64/MultiBlock.cs index 8ac65059a..42fd24ec9 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm64/MultiBlock.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm64/MultiBlock.cs @@ -36,8 +36,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64 { Console.WriteLine($"bb {block.Index}"); - List predList = new(); - List succList = new(); + List predList = []; + List succList = []; for (int index = 0; index < block.PredecessorsCount; index++) { diff --git a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/Compiler.cs b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/Compiler.cs index 4a3c507df..2900cbda4 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/Compiler.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/Compiler.cs @@ -309,7 +309,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 MultiBlock multiBlock = Decoder.DecodeMulti(cpuPreset, memoryManager, address); Dictionary targets = new(); - List pendingBranches = new(); + List pendingBranches = []; uint gprUseMask = multiBlock.GlobalUseMask.GprMask; uint fpSimdUseMask = multiBlock.GlobalUseMask.FpSimdMask; diff --git a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/Decoder.cs b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/Decoder.cs index d5e1eb19c..33d319668 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/Decoder.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/Decoder.cs @@ -15,8 +15,8 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 public static MultiBlock DecodeMulti(CpuPreset cpuPreset, IMemoryManager memoryManager, ulong address) { - List blocks = new(); - List branchTargets = new(); + List blocks = []; + List branchTargets = []; RegisterMask useMask = RegisterMask.Zero; @@ -238,7 +238,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 { ulong startAddress = address; - List insts = new(); + List insts = []; uint gprUseMask = useMask.GprMask; uint fpSimdUseMask = useMask.FpSimdMask; diff --git a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstTable.cs b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstTable.cs index 88718afb1..b1dc9b30c 100644 --- a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstTable.cs +++ b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstTable.cs @@ -94,37 +94,37 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 static InstTable() { - InstEncoding[] qsizeConstraints = new InstEncoding[] - { - new(0x00C00000, 0x40C00000), - }; + InstEncoding[] qsizeConstraints = + [ + new(0x00C00000, 0x40C00000) + ]; - InstEncoding[] sizeConstraints = new InstEncoding[] - { - new(0x00C00000, 0x00C00000), - }; + InstEncoding[] sizeConstraints = + [ + new(0x00C00000, 0x00C00000) + ]; - InstEncoding[] opuOpuOpuConstraints = new InstEncoding[] - { + InstEncoding[] opuOpuOpuConstraints = + [ new(0x00001400, 0x00001C00), new(0x00001800, 0x00001C00), - new(0x00001C00, 0x00001C00), - }; + new(0x00001C00, 0x00001C00) + ]; - InstEncoding[] shiftSfimm6Constraints = new InstEncoding[] - { + InstEncoding[] shiftSfimm6Constraints = + [ new(0x00C00000, 0x00C00000), - new(0x00008000, 0x80008000), - }; + new(0x00008000, 0x80008000) + ]; - InstEncoding[] qsizeSizeConstraints = new InstEncoding[] - { + InstEncoding[] qsizeSizeConstraints = + [ new(0x00800000, 0x40C00000), - new(0x00C00000, 0x00C00000), - }; + new(0x00C00000, 0x00C00000) + ]; - InstEncoding[] nimmsNimmsNimmsNimmsNimmsNimmsNimmsNimmsSfnConstraints = new InstEncoding[] - { + InstEncoding[] nimmsNimmsNimmsNimmsNimmsNimmsNimmsNimmsSfnConstraints = + [ new(0x0040FC00, 0x0040FC00), new(0x00007C00, 0x0040FC00), new(0x0000BC00, 0x0040FC00), @@ -133,326 +133,326 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 new(0x0000F400, 0x0040FC00), new(0x0000F800, 0x0040FC00), new(0x0000FC00, 0x0040FC00), - new(0x00400000, 0x80400000), - }; + new(0x00400000, 0x80400000) + ]; - InstEncoding[] sfimm6Constraints = new InstEncoding[] - { - new(0x00008000, 0x80008000), - }; + InstEncoding[] sfimm6Constraints = + [ + new(0x00008000, 0x80008000) + ]; - InstEncoding[] sfnSfnSfimmr5Sfimms5Constraints = new InstEncoding[] - { + InstEncoding[] sfnSfnSfimmr5Sfimms5Constraints = + [ new(0x80000000, 0x80400000), new(0x00400000, 0x80400000), new(0x00200000, 0x80200000), - new(0x00008000, 0x80008000), - }; + new(0x00008000, 0x80008000) + ]; - InstEncoding[] cmodeopqConstraints = new InstEncoding[] - { - new(0x2000F000, 0x6000F000), - }; + InstEncoding[] cmodeopqConstraints = + [ + new(0x2000F000, 0x6000F000) + ]; - InstEncoding[] rsRtConstraints = new InstEncoding[] - { + InstEncoding[] rsRtConstraints = + [ new(0x00010000, 0x00010000), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] sfszSfszSfszSfszConstraints = new InstEncoding[] - { + InstEncoding[] sfszSfszSfszSfszConstraints = + [ new(0x80000000, 0x80000C00), new(0x80000400, 0x80000C00), new(0x80000800, 0x80000C00), - new(0x00000C00, 0x80000C00), - }; + new(0x00000C00, 0x80000C00) + ]; - InstEncoding[] imm5Constraints = new InstEncoding[] - { + InstEncoding[] imm5Constraints = + [ + new(0x00000000, 0x000F0000) + ]; + + InstEncoding[] imm5Imm5qConstraints = + [ new(0x00000000, 0x000F0000), - }; + new(0x00080000, 0x400F0000) + ]; - InstEncoding[] imm5Imm5qConstraints = new InstEncoding[] - { - new(0x00000000, 0x000F0000), - new(0x00080000, 0x400F0000), - }; - - InstEncoding[] nsfNsfSfimmsConstraints = new InstEncoding[] - { + InstEncoding[] nsfNsfSfimmsConstraints = + [ new(0x00400000, 0x80400000), new(0x80000000, 0x80400000), - new(0x00008000, 0x80008000), - }; + new(0x00008000, 0x80008000) + ]; - InstEncoding[] qimm4Constraints = new InstEncoding[] - { - new(0x00004000, 0x40004000), - }; + InstEncoding[] qimm4Constraints = + [ + new(0x00004000, 0x40004000) + ]; - InstEncoding[] qszConstraints = new InstEncoding[] - { - new(0x00400000, 0x40400000), - }; + InstEncoding[] qszConstraints = + [ + new(0x00400000, 0x40400000) + ]; - InstEncoding[] euacEuacEuacConstraints = new InstEncoding[] - { + InstEncoding[] euacEuacEuacConstraints = + [ new(0x00000800, 0x20800800), new(0x00800000, 0x20800800), - new(0x00800800, 0x20800800), - }; + new(0x00800800, 0x20800800) + ]; - InstEncoding[] qszEuacEuacEuacConstraints = new InstEncoding[] - { + InstEncoding[] qszEuacEuacEuacConstraints = + [ new(0x00400000, 0x40400000), new(0x00000800, 0x20800800), new(0x00800000, 0x20800800), - new(0x00800800, 0x20800800), - }; + new(0x00800800, 0x20800800) + ]; - InstEncoding[] szConstraints = new InstEncoding[] - { - new(0x00400000, 0x00400000), - }; + InstEncoding[] szConstraints = + [ + new(0x00400000, 0x00400000) + ]; - InstEncoding[] sizeQsizeConstraints = new InstEncoding[] - { + InstEncoding[] sizeQsizeConstraints = + [ new(0x00000000, 0x00C00000), - new(0x00C00000, 0x40C00000), - }; + new(0x00C00000, 0x40C00000) + ]; - InstEncoding[] sizeSizeSizelSizeqSizehqConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeSizelSizeqSizehqConstraints = + [ new(0x00000000, 0x00C00000), new(0x00C00000, 0x00C00000), new(0x00A00000, 0x00E00000), new(0x00800000, 0x40C00000), - new(0x00400800, 0x40C00800), - }; + new(0x00400800, 0x40C00800) + ]; - InstEncoding[] szConstraints2 = new InstEncoding[] - { - new(0x00000000, 0x00400000), - }; + InstEncoding[] szConstraints2 = + [ + new(0x00000000, 0x00400000) + ]; - InstEncoding[] immhConstraints = new InstEncoding[] - { + InstEncoding[] immhConstraints = + [ + new(0x00000000, 0x00780000) + ]; + + InstEncoding[] immhQimmhConstraints = + [ new(0x00000000, 0x00780000), - }; + new(0x00400000, 0x40400000) + ]; - InstEncoding[] immhQimmhConstraints = new InstEncoding[] - { - new(0x00000000, 0x00780000), - new(0x00400000, 0x40400000), - }; + InstEncoding[] sfscaleConstraints = + [ + new(0x00000000, 0x80008000) + ]; - InstEncoding[] sfscaleConstraints = new InstEncoding[] - { - new(0x00000000, 0x80008000), - }; - - InstEncoding[] ftypeopcFtypeopcFtypeopcFtypeopcFtypeOpcConstraints = new InstEncoding[] - { + InstEncoding[] ftypeopcFtypeopcFtypeopcFtypeopcFtypeOpcConstraints = + [ new(0x00000000, 0x00C18000), new(0x00408000, 0x00C18000), new(0x00810000, 0x00C18000), new(0x00C18000, 0x00C18000), new(0x00800000, 0x00C00000), - new(0x00010000, 0x00018000), - }; + new(0x00010000, 0x00018000) + ]; - InstEncoding[] szlConstraints = new InstEncoding[] - { + InstEncoding[] szlConstraints = + [ + new(0x00600000, 0x00600000) + ]; + + InstEncoding[] szlQszConstraints = + [ new(0x00600000, 0x00600000), - }; + new(0x00400000, 0x40400000) + ]; - InstEncoding[] szlQszConstraints = new InstEncoding[] - { - new(0x00600000, 0x00600000), - new(0x00400000, 0x40400000), - }; + InstEncoding[] qConstraints = + [ + new(0x00000000, 0x40000000) + ]; - InstEncoding[] qConstraints = new InstEncoding[] - { - new(0x00000000, 0x40000000), - }; - - InstEncoding[] sfftypermodeSfftypermodeConstraints = new InstEncoding[] - { + InstEncoding[] sfftypermodeSfftypermodeConstraints = + [ new(0x00400000, 0x80C80000), - new(0x80000000, 0x80C80000), - }; + new(0x80000000, 0x80C80000) + ]; - InstEncoding[] uo1o2Constraints = new InstEncoding[] - { - new(0x20800000, 0x20801000), - }; + InstEncoding[] uo1o2Constraints = + [ + new(0x20800000, 0x20801000) + ]; - InstEncoding[] qszUo1o2Constraints = new InstEncoding[] - { + InstEncoding[] qszUo1o2Constraints = + [ new(0x00400000, 0x40400000), - new(0x20800000, 0x20801000), - }; + new(0x20800000, 0x20801000) + ]; - InstEncoding[] sConstraints = new InstEncoding[] - { - new(0x00001000, 0x00001000), - }; + InstEncoding[] sConstraints = + [ + new(0x00001000, 0x00001000) + ]; - InstEncoding[] opcodesizeOpcodesizeOpcodesizesOpcodesizeConstraints = new InstEncoding[] - { + InstEncoding[] opcodesizeOpcodesizeOpcodesizesOpcodesizeConstraints = + [ new(0x00004400, 0x0000C400), new(0x00008800, 0x0000C800), new(0x00009400, 0x0000D400), - new(0x0000C000, 0x0000C000), - }; + new(0x0000C000, 0x0000C000) + ]; - InstEncoding[] qsizeConstraints2 = new InstEncoding[] - { - new(0x00000C00, 0x40000C00), - }; + InstEncoding[] qsizeConstraints2 = + [ + new(0x00000C00, 0x40000C00) + ]; - InstEncoding[] rtRtConstraints = new InstEncoding[] - { + InstEncoding[] rtRtConstraints = + [ new(0x00000018, 0x00000018), - new(0x00000001, 0x00000001), - }; + new(0x00000001, 0x00000001) + ]; - InstEncoding[] opc1sizeOpc1sizeOpc1sizeConstraints = new InstEncoding[] - { + InstEncoding[] opc1sizeOpc1sizeOpc1sizeConstraints = + [ new(0x40800000, 0xC0800000), new(0x80800000, 0xC0800000), - new(0xC0800000, 0xC0800000), - }; + new(0xC0800000, 0xC0800000) + ]; - InstEncoding[] rtRt2Constraints = new InstEncoding[] - { + InstEncoding[] rtRt2Constraints = + [ new(0x0000001F, 0x0000001F), - new(0x001F0000, 0x001F0000), - }; + new(0x001F0000, 0x001F0000) + ]; - InstEncoding[] opcConstraints = new InstEncoding[] - { - new(0xC0000000, 0xC0000000), - }; + InstEncoding[] opcConstraints = + [ + new(0xC0000000, 0xC0000000) + ]; - InstEncoding[] opcConstraints2 = new InstEncoding[] - { - new(0x40000000, 0x40000000), - }; + InstEncoding[] opcConstraints2 = + [ + new(0x40000000, 0x40000000) + ]; - InstEncoding[] opclOpcConstraints = new InstEncoding[] - { + InstEncoding[] opclOpcConstraints = + [ new(0x40000000, 0x40400000), - new(0xC0000000, 0xC0000000), - }; + new(0xC0000000, 0xC0000000) + ]; - InstEncoding[] optionConstraints = new InstEncoding[] - { - new(0x00000000, 0x00004000), - }; + InstEncoding[] optionConstraints = + [ + new(0x00000000, 0x00004000) + ]; - InstEncoding[] opc1sizeOpc1sizeOpc1sizeOptionConstraints = new InstEncoding[] - { + InstEncoding[] opc1sizeOpc1sizeOpc1sizeOptionConstraints = + [ new(0x40800000, 0xC0800000), new(0x80800000, 0xC0800000), new(0xC0800000, 0xC0800000), - new(0x00000000, 0x00004000), - }; + new(0x00000000, 0x00004000) + ]; - InstEncoding[] sizeSizeConstraints = new InstEncoding[] - { + InstEncoding[] sizeSizeConstraints = + [ new(0x00000000, 0x00C00000), - new(0x00C00000, 0x00C00000), - }; + new(0x00C00000, 0x00C00000) + ]; - InstEncoding[] sfhwConstraints = new InstEncoding[] - { - new(0x00400000, 0x80400000), - }; + InstEncoding[] sfhwConstraints = + [ + new(0x00400000, 0x80400000) + ]; - InstEncoding[] rtConstraints = new InstEncoding[] - { - new(0x00000001, 0x00000001), - }; + InstEncoding[] rtConstraints = + [ + new(0x00000001, 0x00000001) + ]; - InstEncoding[] usizeUsizeUsizeSizeConstraints = new InstEncoding[] - { + InstEncoding[] usizeUsizeUsizeSizeConstraints = + [ new(0x20400000, 0x20C00000), new(0x20800000, 0x20C00000), new(0x20C00000, 0x20C00000), - new(0x00C00000, 0x00C00000), - }; + new(0x00C00000, 0x00C00000) + ]; - InstEncoding[] sizeSizeConstraints2 = new InstEncoding[] - { + InstEncoding[] sizeSizeConstraints2 = + [ + new(0x00400000, 0x00C00000), + new(0x00800000, 0x00C00000) + ]; + + InstEncoding[] rtConstraints2 = + [ + new(0x00000018, 0x00000018) + ]; + + InstEncoding[] sfopcConstraints = + [ + new(0x00000400, 0x80000400) + ]; + + InstEncoding[] sizeSizeSizeConstraints = + [ new(0x00400000, 0x00C00000), new(0x00800000, 0x00C00000), - }; + new(0x00C00000, 0x00C00000) + ]; - InstEncoding[] rtConstraints2 = new InstEncoding[] - { - new(0x00000018, 0x00000018), - }; - - InstEncoding[] sfopcConstraints = new InstEncoding[] - { - new(0x00000400, 0x80000400), - }; - - InstEncoding[] sizeSizeSizeConstraints = new InstEncoding[] - { - new(0x00400000, 0x00C00000), + InstEncoding[] sizeSizeConstraints3 = + [ new(0x00800000, 0x00C00000), - new(0x00C00000, 0x00C00000), - }; + new(0x00C00000, 0x00C00000) + ]; - InstEncoding[] sizeSizeConstraints3 = new InstEncoding[] - { - new(0x00800000, 0x00C00000), - new(0x00C00000, 0x00C00000), - }; + InstEncoding[] sfConstraints = + [ + new(0x00000000, 0x80000000) + ]; - InstEncoding[] sfConstraints = new InstEncoding[] - { - new(0x00000000, 0x80000000), - }; - - InstEncoding[] immhImmhConstraints = new InstEncoding[] - { + InstEncoding[] immhImmhConstraints = + [ new(0x00000000, 0x00780000), - new(0x00400000, 0x00400000), - }; + new(0x00400000, 0x00400000) + ]; - InstEncoding[] sizeSizeConstraints4 = new InstEncoding[] - { + InstEncoding[] sizeSizeConstraints4 = + [ new(0x00C00000, 0x00C00000), - new(0x00000000, 0x00C00000), - }; + new(0x00000000, 0x00C00000) + ]; - InstEncoding[] ssizeSsizeSsizeConstraints = new InstEncoding[] - { + InstEncoding[] ssizeSsizeSsizeConstraints = + [ new(0x00000000, 0x00C00800), new(0x00400000, 0x00C00800), - new(0x00800000, 0x00C00800), - }; + new(0x00800000, 0x00C00800) + ]; - InstEncoding[] immhOpuConstraints = new InstEncoding[] - { + InstEncoding[] immhOpuConstraints = + [ new(0x00000000, 0x00780000), - new(0x00000000, 0x20001000), - }; + new(0x00000000, 0x20001000) + ]; - InstEncoding[] immhQimmhOpuConstraints = new InstEncoding[] - { + InstEncoding[] immhQimmhOpuConstraints = + [ new(0x00000000, 0x00780000), new(0x00400000, 0x40400000), - new(0x00000000, 0x20001000), - }; + new(0x00000000, 0x20001000) + ]; - List insts = new() - { + List insts = + [ new(0x5AC02000, 0x7FFFFC00, InstName.Abs, IsaVersion.v89, InstFlags.RdRn), new(0x5EE0B800, 0xFFFFFC00, InstName.AbsAdvsimdS, IsaVersion.v80, InstFlags.RdRnFpSimd), new(0x0E20B800, 0xBF3FFC00, qsizeConstraints, InstName.AbsAdvsimdV, IsaVersion.v80, InstFlags.RdRnFpSimd), @@ -1587,7 +1587,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64 new(0xD503203F, 0xFFFFFFFF, InstName.Yield, IsaVersion.v80, InstFlags.None), new(0x0E003800, 0xBF20FC00, qsizeConstraints, InstName.Zip1Advsimd, IsaVersion.v80, InstFlags.RdRnRmFpSimd), new(0x0E007800, 0xBF20FC00, qsizeConstraints, InstName.Zip2Advsimd, IsaVersion.v80, InstFlags.RdRnRmFpSimd), - }; + ]; _table = new(insts); } diff --git a/src/Ryujinx.Cpu/LightningJit/Cache/CacheMemoryAllocator.cs b/src/Ryujinx.Cpu/LightningJit/Cache/CacheMemoryAllocator.cs index 8ba3a6dcd..05c889922 100644 --- a/src/Ryujinx.Cpu/LightningJit/Cache/CacheMemoryAllocator.cs +++ b/src/Ryujinx.Cpu/LightningJit/Cache/CacheMemoryAllocator.cs @@ -24,7 +24,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache } } - private readonly List _blocks = new(); + private readonly List _blocks = []; public CacheMemoryAllocator(int capacity) { diff --git a/src/Ryujinx.Cpu/LightningJit/Cache/JitCache.cs b/src/Ryujinx.Cpu/LightningJit/Cache/JitCache.cs index 10ae050b6..5849401ab 100644 --- a/src/Ryujinx.Cpu/LightningJit/Cache/JitCache.cs +++ b/src/Ryujinx.Cpu/LightningJit/Cache/JitCache.cs @@ -22,7 +22,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache private static CacheMemoryAllocator _cacheAllocator; - private static readonly List _cacheEntries = new(); + private static readonly List _cacheEntries = []; private static readonly Lock _lock = new(); private static bool _initialized; diff --git a/src/Ryujinx.Cpu/LightningJit/Cache/JitCacheInvalidation.cs b/src/Ryujinx.Cpu/LightningJit/Cache/JitCacheInvalidation.cs index d0a5e4ac8..e851327d4 100644 --- a/src/Ryujinx.Cpu/LightningJit/Cache/JitCacheInvalidation.cs +++ b/src/Ryujinx.Cpu/LightningJit/Cache/JitCacheInvalidation.cs @@ -6,8 +6,8 @@ namespace Ryujinx.Cpu.LightningJit.Cache { class JitCacheInvalidation { - private static readonly int[] _invalidationCode = new int[] - { + private static readonly int[] _invalidationCode = + [ unchecked((int)0xd53b0022), // mrs x2, ctr_el0 unchecked((int)0xd3504c44), // ubfx x4, x2, #16, #4 unchecked((int)0x52800083), // mov w3, #0x4 @@ -35,8 +35,8 @@ namespace Ryujinx.Cpu.LightningJit.Cache unchecked((int)0x54ffffa8), // b.hi 54 unchecked((int)0xd5033b9f), // dsb ish unchecked((int)0xd5033fdf), // isb - unchecked((int)0xd65f03c0), // ret - }; + unchecked((int)0xd65f03c0) // ret + ]; private delegate void InvalidateCache(ulong start, ulong end); diff --git a/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs b/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs index a743710e9..1bbf70182 100644 --- a/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs +++ b/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs @@ -231,7 +231,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache _sharedCache.Pointer, SharedCacheSize); - List<(ulong, ThreadLocalCacheEntry)> toDelete = new(); + List<(ulong, ThreadLocalCacheEntry)> toDelete = []; foreach ((ulong address, ThreadLocalCacheEntry entry) in _threadLocalCache) { diff --git a/src/Ryujinx.Cpu/LightningJit/Cache/PageAlignedRangeList.cs b/src/Ryujinx.Cpu/LightningJit/Cache/PageAlignedRangeList.cs index b6b386714..dd53dcbf7 100644 --- a/src/Ryujinx.Cpu/LightningJit/Cache/PageAlignedRangeList.cs +++ b/src/Ryujinx.Cpu/LightningJit/Cache/PageAlignedRangeList.cs @@ -35,8 +35,8 @@ namespace Ryujinx.Cpu.LightningJit.Cache { _alignedRangeAction = alignedRangeAction; _alignedFunctionAction = alignedFunctionAction; - _pendingFunctions = new(); - _ranges = new(); + _pendingFunctions = []; + _ranges = []; } public bool Has(ulong address) diff --git a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs index fb30be2b6..dd130dbeb 100644 --- a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs +++ b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/Assembler.cs @@ -26,7 +26,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 public Assembler(CodeWriter writer) { _code = writer.GetList(); - _labels = new List(); + _labels = []; } public readonly Operand CreateLabel() diff --git a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/TailMerger.cs b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/TailMerger.cs index e042af126..18204977e 100644 --- a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/TailMerger.cs +++ b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/TailMerger.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64 public TailMerger() { - _branchPointers = new(); + _branchPointers = []; } public void AddConditionalReturn(CodeWriter writer, in Assembler asm, ArmCondition returnCondition) diff --git a/src/Ryujinx.Cpu/LightningJit/CodeWriter.cs b/src/Ryujinx.Cpu/LightningJit/CodeWriter.cs index ac4b22ff1..b2927908a 100644 --- a/src/Ryujinx.Cpu/LightningJit/CodeWriter.cs +++ b/src/Ryujinx.Cpu/LightningJit/CodeWriter.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Cpu.LightningJit public CodeWriter() { - _instructions = new(); + _instructions = []; } public void WriteInstruction(uint instruction) diff --git a/src/Ryujinx.Cpu/LightningJit/Table/InstTableLevel.cs b/src/Ryujinx.Cpu/LightningJit/Table/InstTableLevel.cs index 6567efeef..cdad9a9fe 100644 --- a/src/Ryujinx.Cpu/LightningJit/Table/InstTableLevel.cs +++ b/src/Ryujinx.Cpu/LightningJit/Table/InstTableLevel.cs @@ -34,7 +34,7 @@ namespace Ryujinx.Cpu.LightningJit.Table { int splitIndex = (int)((insts[index].Encoding >> _shift) & _mask); - (splitList[splitIndex] ??= new()).Add(insts[index]); + (splitList[splitIndex] ??= []).Add(insts[index]); } for (int index = 0; index < count; index++) diff --git a/src/Ryujinx.Cpu/LightningJit/Translator.cs b/src/Ryujinx.Cpu/LightningJit/Translator.cs index 22a38ca99..cb3957490 100644 --- a/src/Ryujinx.Cpu/LightningJit/Translator.cs +++ b/src/Ryujinx.Cpu/LightningJit/Translator.cs @@ -134,7 +134,7 @@ namespace Ryujinx.Cpu.LightningJit public void InvalidateJitCacheRegion(ulong address, ulong size) { - ulong[] overlapAddresses = Array.Empty(); + ulong[] overlapAddresses = []; int overlapsCount = Functions.GetOverlaps(address, size, ref overlapAddresses); diff --git a/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs b/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs index 6ef653a37..d0eec7eff 100644 --- a/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs +++ b/src/Ryujinx.Cpu/LightningJit/TranslatorStubs.cs @@ -140,7 +140,7 @@ namespace Ryujinx.Cpu.LightningJit /// Generated private nint GenerateDispatchStub() { - List branchToFallbackOffsets = new(); + List branchToFallbackOffsets = []; CodeWriter writer = new(); diff --git a/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs b/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs index 6ed3be524..83e9c01fe 100644 --- a/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs +++ b/src/Ryujinx.Cpu/PrivateMemoryAllocator.cs @@ -38,10 +38,10 @@ namespace Ryujinx.Cpu { Memory = memory; Size = size; - _freeRanges = new List - { - new(0, size), - }; + _freeRanges = + [ + new(0, size) + ]; } public ulong Allocate(ulong size, ulong alignment) @@ -185,7 +185,7 @@ namespace Ryujinx.Cpu public PrivateMemoryAllocatorImpl(ulong blockAlignment, MemoryAllocationFlags allocationFlags) { - _blocks = new List(); + _blocks = []; _blockAlignment = blockAlignment; _allocationFlags = allocationFlags; } -- 2.47.1 From 3c2f283ec7020f2722dc66f872be83f7d93cd46f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:41:47 -0600 Subject: [PATCH 467/722] misc: chore: Use collection expressions in Audio project --- .../Backends/CompatLayer/Downmixing.cs | 16 +++---- src/Ryujinx.Audio/Constants.cs | 8 ++-- src/Ryujinx.Audio/Input/AudioInputManager.cs | 2 +- .../Output/AudioOutputManager.cs | 2 +- .../Renderer/Device/VirtualDevice.cs | 8 ++-- .../Renderer/Dsp/Command/CommandList.cs | 2 +- .../Renderer/Dsp/Command/Reverb3dCommand.cs | 32 ++++++++------ .../Renderer/Dsp/Command/ReverbCommand.cs | 34 ++++++++------- .../Renderer/Dsp/ResamplerHelper.cs | 42 +++++++++++-------- .../Renderer/Dsp/State/Reverb3dState.cs | 14 ++++--- .../Renderer/Dsp/State/ReverbState.cs | 40 +++++++++--------- 11 files changed, 109 insertions(+), 91 deletions(-) diff --git a/src/Ryujinx.Audio/Backends/CompatLayer/Downmixing.cs b/src/Ryujinx.Audio/Backends/CompatLayer/Downmixing.cs index 7a5ea0deb..32a85cd76 100644 --- a/src/Ryujinx.Audio/Backends/CompatLayer/Downmixing.cs +++ b/src/Ryujinx.Audio/Backends/CompatLayer/Downmixing.cs @@ -31,19 +31,19 @@ namespace Ryujinx.Audio.Backends.CompatLayer private const int Minus6dBInQ15 = (int)(0.501f * RawQ15One); private const int Minus12dBInQ15 = (int)(0.251f * RawQ15One); - private static readonly long[] _defaultSurroundToStereoCoefficients = new long[4] - { + private static readonly long[] _defaultSurroundToStereoCoefficients = + [ RawQ15One, Minus3dBInQ15, Minus12dBInQ15, - Minus3dBInQ15, - }; + Minus3dBInQ15 + ]; - private static readonly long[] _defaultStereoToMonoCoefficients = new long[2] - { + private static readonly long[] _defaultStereoToMonoCoefficients = + [ Minus6dBInQ15, - Minus6dBInQ15, - }; + Minus6dBInQ15 + ]; private const int SurroundChannelCount = 6; private const int StereoChannelCount = 2; diff --git a/src/Ryujinx.Audio/Constants.cs b/src/Ryujinx.Audio/Constants.cs index eb5b39013..a2d2c7156 100644 --- a/src/Ryujinx.Audio/Constants.cs +++ b/src/Ryujinx.Audio/Constants.cs @@ -164,12 +164,12 @@ namespace Ryujinx.Audio /// /// The default coefficients used for standard 5.1 surround to stereo downmixing. /// - public static readonly float[] DefaultSurroundToStereoCoefficients = new float[4] - { + public static readonly float[] DefaultSurroundToStereoCoefficients = + [ 1.0f, 0.707f, 0.251f, - 0.707f, - }; + 0.707f + ]; } } diff --git a/src/Ryujinx.Audio/Input/AudioInputManager.cs b/src/Ryujinx.Audio/Input/AudioInputManager.cs index ffc3e6da2..5defef0f7 100644 --- a/src/Ryujinx.Audio/Input/AudioInputManager.cs +++ b/src/Ryujinx.Audio/Input/AudioInputManager.cs @@ -173,7 +173,7 @@ namespace Ryujinx.Audio.Input // TODO: Detect if the driver supports audio input } - return new[] { Constants.DefaultDeviceInputName }; + return [Constants.DefaultDeviceInputName]; } /// diff --git a/src/Ryujinx.Audio/Output/AudioOutputManager.cs b/src/Ryujinx.Audio/Output/AudioOutputManager.cs index 13e169a24..556088bc2 100644 --- a/src/Ryujinx.Audio/Output/AudioOutputManager.cs +++ b/src/Ryujinx.Audio/Output/AudioOutputManager.cs @@ -167,7 +167,7 @@ namespace Ryujinx.Audio.Output /// The list of all audio outputs name public string[] ListAudioOuts() { - return new[] { Constants.DefaultDeviceOutputName }; + return [Constants.DefaultDeviceOutputName]; } /// diff --git a/src/Ryujinx.Audio/Renderer/Device/VirtualDevice.cs b/src/Ryujinx.Audio/Renderer/Device/VirtualDevice.cs index 91956fda6..439be6bd8 100644 --- a/src/Ryujinx.Audio/Renderer/Device/VirtualDevice.cs +++ b/src/Ryujinx.Audio/Renderer/Device/VirtualDevice.cs @@ -10,14 +10,14 @@ namespace Ryujinx.Audio.Renderer.Device /// /// All the defined virtual devices. /// - public static readonly VirtualDevice[] Devices = new VirtualDevice[5] - { + public static readonly VirtualDevice[] Devices = + [ new("AudioStereoJackOutput", 2, true), new("AudioBuiltInSpeakerOutput", 2, false), new("AudioTvOutput", 6, false), new("AudioUsbDeviceOutput", 2, true), - new("AudioExternalOutput", 6, true), - }; + new("AudioExternalOutput", 6, true) + ]; /// /// The name of the . diff --git a/src/Ryujinx.Audio/Renderer/Dsp/Command/CommandList.cs b/src/Ryujinx.Audio/Renderer/Dsp/Command/CommandList.cs index ba19330b6..185d169f0 100644 --- a/src/Ryujinx.Audio/Renderer/Dsp/Command/CommandList.cs +++ b/src/Ryujinx.Audio/Renderer/Dsp/Command/CommandList.cs @@ -46,7 +46,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command SampleRate = sampleRate; BufferCount = mixBufferCount + voiceChannelCountMax; Buffers = mixBuffer; - Commands = new List(); + Commands = []; MemoryManager = memoryManager; _buffersEntryCount = Buffers.Length; diff --git a/src/Ryujinx.Audio/Renderer/Dsp/Command/Reverb3dCommand.cs b/src/Ryujinx.Audio/Renderer/Dsp/Command/Reverb3dCommand.cs index 58023ac9d..5a65c650d 100644 --- a/src/Ryujinx.Audio/Renderer/Dsp/Command/Reverb3dCommand.cs +++ b/src/Ryujinx.Audio/Renderer/Dsp/Command/Reverb3dCommand.cs @@ -9,21 +9,29 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command { public class Reverb3dCommand : ICommand { - private static readonly int[] _outputEarlyIndicesTableMono = new int[20] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - private static readonly int[] _targetEarlyDelayLineIndicesTableMono = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }; - private static readonly int[] _targetOutputFeedbackIndicesTableMono = new int[1] { 0 }; + private static readonly int[] _outputEarlyIndicesTableMono = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ]; + private static readonly int[] _targetEarlyDelayLineIndicesTableMono = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + ]; + private static readonly int[] _targetOutputFeedbackIndicesTableMono = [0]; - private static readonly int[] _outputEarlyIndicesTableStereo = new int[20] { 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1 }; - private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }; - private static readonly int[] _targetOutputFeedbackIndicesTableStereo = new int[2] { 0, 1 }; + private static readonly int[] _outputEarlyIndicesTableStereo = [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1 + ]; + private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + ]; + private static readonly int[] _targetOutputFeedbackIndicesTableStereo = [0, 1]; - private static readonly int[] _outputEarlyIndicesTableQuadraphonic = new int[20] { 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 3, 3, 3 }; - private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }; - private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 }; + private static readonly int[] _outputEarlyIndicesTableQuadraphonic = [0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 3, 3, 3 + ]; + private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + ]; + private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = [0, 1, 2, 3]; - private static readonly int[] _outputEarlyIndicesTableSurround = new int[40] { 4, 5, 0, 5, 0, 5, 1, 5, 1, 5, 1, 5, 1, 5, 2, 5, 2, 5, 2, 5, 1, 5, 1, 5, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 3, 5, 3, 5, 3, 5 }; - private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = new int[40] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19 }; - private static readonly int[] _targetOutputFeedbackIndicesTableSurround = new int[6] { 0, 1, 2, 3, -1, 3 }; + private static readonly int[] _outputEarlyIndicesTableSurround = [4, 5, 0, 5, 0, 5, 1, 5, 1, 5, 1, 5, 1, 5, 2, 5, 2, 5, 2, 5, 1, 5, 1, 5, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 3, 5, 3, 5, 3, 5 + ]; + private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19 + ]; + private static readonly int[] _targetOutputFeedbackIndicesTableSurround = [0, 1, 2, 3, -1, 3]; public bool Enabled { get; set; } diff --git a/src/Ryujinx.Audio/Renderer/Dsp/Command/ReverbCommand.cs b/src/Ryujinx.Audio/Renderer/Dsp/Command/ReverbCommand.cs index 204570cec..c3d746994 100644 --- a/src/Ryujinx.Audio/Renderer/Dsp/Command/ReverbCommand.cs +++ b/src/Ryujinx.Audio/Renderer/Dsp/Command/ReverbCommand.cs @@ -9,25 +9,27 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command { public class ReverbCommand : ICommand { - private static readonly int[] _outputEarlyIndicesTableMono = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - private static readonly int[] _targetEarlyDelayLineIndicesTableMono = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; - private static readonly int[] _outputIndicesTableMono = new int[4] { 0, 0, 0, 0 }; - private static readonly int[] _targetOutputFeedbackIndicesTableMono = new int[4] { 0, 1, 2, 3 }; + private static readonly int[] _outputEarlyIndicesTableMono = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + private static readonly int[] _targetEarlyDelayLineIndicesTableMono = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + private static readonly int[] _outputIndicesTableMono = [0, 0, 0, 0]; + private static readonly int[] _targetOutputFeedbackIndicesTableMono = [0, 1, 2, 3]; - private static readonly int[] _outputEarlyIndicesTableStereo = new int[10] { 0, 0, 1, 1, 0, 1, 0, 0, 1, 1 }; - private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; - private static readonly int[] _outputIndicesTableStereo = new int[4] { 0, 0, 1, 1 }; - private static readonly int[] _targetOutputFeedbackIndicesTableStereo = new int[4] { 2, 0, 3, 1 }; + private static readonly int[] _outputEarlyIndicesTableStereo = [0, 0, 1, 1, 0, 1, 0, 0, 1, 1]; + private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + private static readonly int[] _outputIndicesTableStereo = [0, 0, 1, 1]; + private static readonly int[] _targetOutputFeedbackIndicesTableStereo = [2, 0, 3, 1]; - private static readonly int[] _outputEarlyIndicesTableQuadraphonic = new int[10] { 0, 0, 1, 1, 0, 1, 2, 2, 3, 3 }; - private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; - private static readonly int[] _outputIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 }; - private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 }; + private static readonly int[] _outputEarlyIndicesTableQuadraphonic = [0, 0, 1, 1, 0, 1, 2, 2, 3, 3]; + private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + private static readonly int[] _outputIndicesTableQuadraphonic = [0, 1, 2, 3]; + private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = [0, 1, 2, 3]; - private static readonly int[] _outputEarlyIndicesTableSurround = new int[20] { 0, 5, 0, 5, 1, 5, 1, 5, 4, 5, 4, 5, 2, 5, 2, 5, 3, 5, 3, 5 }; - private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = new int[20] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 }; - private static readonly int[] _outputIndicesTableSurround = new int[Constants.ChannelCountMax] { 0, 1, 2, 3, 4, 5 }; - private static readonly int[] _targetOutputFeedbackIndicesTableSurround = new int[Constants.ChannelCountMax] { 0, 1, 2, 3, -1, 3 }; + private static readonly int[] _outputEarlyIndicesTableSurround = [0, 5, 0, 5, 1, 5, 1, 5, 4, 5, 4, 5, 2, 5, 2, 5, 3, 5, 3, 5 + ]; + private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 + ]; + private static readonly int[] _outputIndicesTableSurround = [0, 1, 2, 3, 4, 5]; + private static readonly int[] _targetOutputFeedbackIndicesTableSurround = [0, 1, 2, 3, -1, 3]; public bool Enabled { get; set; } diff --git a/src/Ryujinx.Audio/Renderer/Dsp/ResamplerHelper.cs b/src/Ryujinx.Audio/Renderer/Dsp/ResamplerHelper.cs index e44e9f41e..16048d7ff 100644 --- a/src/Ryujinx.Audio/Renderer/Dsp/ResamplerHelper.cs +++ b/src/Ryujinx.Audio/Renderer/Dsp/ResamplerHelper.cs @@ -10,7 +10,8 @@ namespace Ryujinx.Audio.Renderer.Dsp public static class ResamplerHelper { #region "Default Quality Lookup Tables" - private static readonly short[] _normalCurveLut0 = { + private static readonly short[] _normalCurveLut0 = + [ 6600, 19426, 6722, 3, 6479, 19424, 6845, 9, 6359, 19419, 6968, 15, 6239, 19412, 7093, 22, 6121, 19403, 7219, 28, 6004, 19391, 7345, 34, 5888, 19377, 7472, 41, 5773, 19361, 7600, 48, 5659, 19342, 7728, 55, 5546, 19321, 7857, 62, 5434, 19298, 7987, 69, 5323, 19273, 8118, 77, @@ -42,10 +43,11 @@ namespace Ryujinx.Audio.Renderer.Dsp 109, 8646, 19148, 4890, 101, 8513, 19183, 4997, 92, 8381, 19215, 5104, 84, 8249, 19245, 5213, 77, 8118, 19273, 5323, 69, 7987, 19298, 5434, 62, 7857, 19321, 5546, 55, 7728, 19342, 5659, 48, 7600, 19361, 5773, 41, 7472, 19377, 5888, 34, 7345, 19391, 6004, 28, 7219, 19403, 6121, - 22, 7093, 19412, 6239, 15, 6968, 19419, 6359, 9, 6845, 19424, 6479, 3, 6722, 19426, 6600, - }; + 22, 7093, 19412, 6239, 15, 6968, 19419, 6359, 9, 6845, 19424, 6479, 3, 6722, 19426, 6600 + ]; - private static readonly short[] _normalCurveLut1 = { + private static readonly short[] _normalCurveLut1 = + [ -68, 32639, 69, -5, -200, 32630, 212, -15, -328, 32613, 359, -26, -450, 32586, 512, -36, -568, 32551, 669, -47, -680, 32507, 832, -58, -788, 32454, 1000, -69, -891, 32393, 1174, -80, -990, 32323, 1352, -92, -1084, 32244, 1536, -103, -1173, 32157, 1724, -115, -1258, 32061, 1919, -128, @@ -77,10 +79,11 @@ namespace Ryujinx.Audio.Renderer.Dsp -180, 2747, 31593, -1554, -167, 2532, 31723, -1486, -153, 2322, 31844, -1414, -140, 2118, 31956, -1338, -128, 1919, 32061, -1258, -115, 1724, 32157, -1173, -103, 1536, 32244, -1084, -92, 1352, 32323, -990, -80, 1174, 32393, -891, -69, 1000, 32454, -788, -58, 832, 32507, -680, -47, 669, 32551, -568, - -36, 512, 32586, -450, -26, 359, 32613, -328, -15, 212, 32630, -200, -5, 69, 32639, -68, - }; + -36, 512, 32586, -450, -26, 359, 32613, -328, -15, 212, 32630, -200, -5, 69, 32639, -68 + ]; - private static readonly short[] _normalCurveLut2 = { + private static readonly short[] _normalCurveLut2 = + [ 3195, 26287, 3329, -32, 3064, 26281, 3467, -34, 2936, 26270, 3608, -38, 2811, 26253, 3751, -42, 2688, 26230, 3897, -46, 2568, 26202, 4046, -50, 2451, 26169, 4199, -54, 2338, 26130, 4354, -58, 2227, 26085, 4512, -63, 2120, 26035, 4673, -67, 2015, 25980, 4837, -72, 1912, 25919, 5004, -76, @@ -112,12 +115,13 @@ namespace Ryujinx.Audio.Renderer.Dsp -98, 5701, 25621, 1531, -92, 5522, 25704, 1622, -87, 5347, 25780, 1716, -81, 5174, 25852, 1813, -76, 5004, 25919, 1912, -72, 4837, 25980, 2015, -67, 4673, 26035, 2120, -63, 4512, 26085, 2227, -58, 4354, 26130, 2338, -54, 4199, 26169, 2451, -50, 4046, 26202, 2568, -46, 3897, 26230, 2688, - -42, 3751, 26253, 2811, -38, 3608, 26270, 2936, -34, 3467, 26281, 3064, -32, 3329, 26287, 3195, - }; + -42, 3751, 26253, 2811, -38, 3608, 26270, 2936, -34, 3467, 26281, 3064, -32, 3329, 26287, 3195 + ]; #endregion #region "High Quality Lookup Tables" - private static readonly short[] _highCurveLut0 = { + private static readonly short[] _highCurveLut0 = + [ -582, -23, 8740, 16386, 8833, 8, -590, 0, -573, -54, 8647, 16385, 8925, 40, -598, -1, -565, -84, 8555, 16383, 9018, 72, -606, -1, -557, -113, 8462, 16379, 9110, 105, -614, -2, -549, -142, 8370, 16375, 9203, 139, -622, -2, -541, -170, 8277, 16369, 9295, 173, -630, -3, @@ -181,10 +185,11 @@ namespace Ryujinx.Audio.Renderer.Dsp -5, -646, 244, 9480, 16354, 8093, -225, -525, -4, -638, 208, 9387, 16362, 8185, -198, -533, -3, -630, 173, 9295, 16369, 8277, -170, -541, -2, -622, 139, 9203, 16375, 8370, -142, -549, -2, -614, 105, 9110, 16379, 8462, -113, -557, -1, -606, 72, 9018, 16383, 8555, -84, -565, - -1, -598, 40, 8925, 16385, 8647, -54, -573, 0, -590, 8, 8833, 16386, 8740, -23, -582, - }; + -1, -598, 40, 8925, 16385, 8647, -54, -573, 0, -590, 8, 8833, 16386, 8740, -23, -582 + ]; - private static readonly short[] _highCurveLut1 = { + private static readonly short[] _highCurveLut1 = + [ -12, 47, -134, 32767, 81, -16, 2, 0, -26, 108, -345, 32760, 301, -79, 17, -1, -40, 168, -552, 32745, 526, -144, 32, -2, -53, 226, -753, 32723, 755, -210, 47, -3, -66, 284, -950, 32694, 989, -277, 63, -5, -78, 340, -1143, 32658, 1226, -346, 79, -6, @@ -248,10 +253,11 @@ namespace Ryujinx.Audio.Renderer.Dsp -9, 113, -486, 1715, 32564, -1514, 447, -101, -8, 96, -415, 1469, 32615, -1331, 394, -90, -6, 79, -346, 1226, 32658, -1143, 340, -78, -5, 63, -277, 989, 32694, -950, 284, -66, -3, 47, -210, 755, 32723, -753, 226, -53, -2, 32, -144, 526, 32745, -552, 168, -40, - -1, 17, -79, 301, 32760, -345, 108, -26, 0, 2, -16, 81, 32767, -134, 47, -12, - }; + -1, 17, -79, 301, 32760, -345, 108, -26, 0, 2, -16, 81, 32767, -134, 47, -12 + ]; - private static readonly short[] _highCurveLut2 = { + private static readonly short[] _highCurveLut2 = + [ 418, -2538, 6118, 24615, 6298, -2563, 417, 0, 420, -2512, 5939, 24611, 6479, -2588, 415, 1, 421, -2485, 5761, 24605, 6662, -2612, 412, 2, 422, -2458, 5585, 24595, 6846, -2635, 409, 3, 423, -2430, 5410, 24582, 7030, -2658, 406, 4, 423, -2402, 5236, 24565, 7216, -2680, 403, 5, @@ -315,8 +321,8 @@ namespace Ryujinx.Audio.Renderer.Dsp 7, 395, -2721, 7591, 24523, 4893, -2343, 423, 6, 399, -2701, 7403, 24546, 5064, -2373, 423, 5, 403, -2680, 7216, 24565, 5236, -2402, 423, 4, 406, -2658, 7030, 24582, 5410, -2430, 423, 3, 409, -2635, 6846, 24595, 5585, -2458, 422, 2, 412, -2612, 6662, 24605, 5761, -2485, 421, - 1, 415, -2588, 6479, 24611, 5939, -2512, 420, 0, 417, -2563, 6298, 24615, 6118, -2538, 418, - }; + 1, 415, -2588, 6479, 24611, 5939, -2512, 420, 0, 417, -2563, 6298, 24615, 6118, -2538, 418 + ]; #endregion private static readonly float[] _normalCurveLut0F; diff --git a/src/Ryujinx.Audio/Renderer/Dsp/State/Reverb3dState.cs b/src/Ryujinx.Audio/Renderer/Dsp/State/Reverb3dState.cs index e83e0d5fc..c7e9b8984 100644 --- a/src/Ryujinx.Audio/Renderer/Dsp/State/Reverb3dState.cs +++ b/src/Ryujinx.Audio/Renderer/Dsp/State/Reverb3dState.cs @@ -6,12 +6,14 @@ namespace Ryujinx.Audio.Renderer.Dsp.State { public struct Reverb3dState { - private readonly float[] _fdnDelayMinTimes = new float[4] { 5.0f, 6.0f, 13.0f, 14.0f }; - private readonly float[] _fdnDelayMaxTimes = new float[4] { 45.704f, 82.782f, 149.94f, 271.58f }; - private readonly float[] _decayDelayMaxTimes1 = new float[4] { 17.0f, 13.0f, 9.0f, 7.0f }; - private readonly float[] _decayDelayMaxTimes2 = new float[4] { 19.0f, 11.0f, 10.0f, 6.0f }; - private readonly float[] _earlyDelayTimes = new float[20] { 0.017136f, 0.059154f, 0.16173f, 0.39019f, 0.42526f, 0.45541f, 0.68974f, 0.74591f, 0.83384f, 0.8595f, 0.0f, 0.075024f, 0.16879f, 0.2999f, 0.33744f, 0.3719f, 0.59901f, 0.71674f, 0.81786f, 0.85166f }; - public readonly float[] EarlyGain = new float[20] { 0.67096f, 0.61027f, 1.0f, 0.35680f, 0.68361f, 0.65978f, 0.51939f, 0.24712f, 0.45945f, 0.45021f, 0.64196f, 0.54879f, 0.92925f, 0.38270f, 0.72867f, 0.69794f, 0.5464f, 0.24563f, 0.45214f, 0.44042f }; + private readonly float[] _fdnDelayMinTimes = [5.0f, 6.0f, 13.0f, 14.0f]; + private readonly float[] _fdnDelayMaxTimes = [45.704f, 82.782f, 149.94f, 271.58f]; + private readonly float[] _decayDelayMaxTimes1 = [17.0f, 13.0f, 9.0f, 7.0f]; + private readonly float[] _decayDelayMaxTimes2 = [19.0f, 11.0f, 10.0f, 6.0f]; + private readonly float[] _earlyDelayTimes = [0.017136f, 0.059154f, 0.16173f, 0.39019f, 0.42526f, 0.45541f, 0.68974f, 0.74591f, 0.83384f, 0.8595f, 0.0f, 0.075024f, 0.16879f, 0.2999f, 0.33744f, 0.3719f, 0.59901f, 0.71674f, 0.81786f, 0.85166f + ]; + public readonly float[] EarlyGain = [0.67096f, 0.61027f, 1.0f, 0.35680f, 0.68361f, 0.65978f, 0.51939f, 0.24712f, 0.45945f, 0.45021f, 0.64196f, 0.54879f, 0.92925f, 0.38270f, 0.72867f, 0.69794f, 0.5464f, 0.24563f, 0.45214f, 0.44042f + ]; public IDelayLine[] FdnDelayLines { get; } public DecayDelay[] DecayDelays1 { get; } diff --git a/src/Ryujinx.Audio/Renderer/Dsp/State/ReverbState.cs b/src/Ryujinx.Audio/Renderer/Dsp/State/ReverbState.cs index f1927b718..db935a325 100644 --- a/src/Ryujinx.Audio/Renderer/Dsp/State/ReverbState.cs +++ b/src/Ryujinx.Audio/Renderer/Dsp/State/ReverbState.cs @@ -7,8 +7,8 @@ namespace Ryujinx.Audio.Renderer.Dsp.State { public struct ReverbState { - private static readonly float[] _fdnDelayTimes = new float[20] - { + private static readonly float[] _fdnDelayTimes = + [ // Room 53.953247f, 79.192566f, 116.238770f, 130.615295f, // Hall @@ -18,11 +18,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State // Cathedral 47.03f, 71f, 103f, 170f, // Max delay (Hall is the one with the highest values so identical to Hall) - 53.953247f, 79.192566f, 116.238770f, 170.615295f, - }; + 53.953247f, 79.192566f, 116.238770f, 170.615295f + ]; - private static readonly float[] _decayDelayTimes = new float[20] - { + private static readonly float[] _decayDelayTimes = + [ // Room 7f, 9f, 13f, 17f, // Hall @@ -32,11 +32,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State // Cathedral 7f, 7f, 13f, 9f, // Max delay (Hall is the one with the highest values so identical to Hall) - 7f, 9f, 13f, 17f, - }; + 7f, 9f, 13f, 17f + ]; - private static readonly float[] _earlyDelayTimes = new float[50] - { + private static readonly float[] _earlyDelayTimes = + [ // Room 0.0f, 3.5f, 2.8f, 3.9f, 2.7f, 13.4f, 7.9f, 8.4f, 9.9f, 12.0f, // Chamber @@ -46,11 +46,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State // Cathedral 33.1f, 43.3f, 22.8f, 37.9f, 14.9f, 35.3f, 17.9f, 34.2f, 0.0f, 43.3f, // Disabled - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - }; + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f + ]; - private static readonly float[] _earlyGainBase = new float[50] - { + private static readonly float[] _earlyGainBase = + [ // Room 0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.68f, 0.68f, // Chamber @@ -60,11 +60,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State // Cathedral 0.93f, 0.92f, 0.87f, 0.86f, 0.94f, 0.81f, 0.80f, 0.77f, 0.76f, 0.65f, // Disabled - 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, - }; + 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f + ]; - private static readonly float[] _preDelayTimes = new float[5] - { + private static readonly float[] _preDelayTimes = + [ // Room 12.5f, // Chamber @@ -74,8 +74,8 @@ namespace Ryujinx.Audio.Renderer.Dsp.State // Cathedral 50.0f, // Disabled - 0.0f, - }; + 0.0f + ]; public DelayLine[] FdnDelayLines { get; } public DecayDelay[] DecayDelays { get; } -- 2.47.1 From 70b767ef6089f0dcbda7f8e09ed1a15e14d57038 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:43:02 -0600 Subject: [PATCH 468/722] misc: chore: Use collection expressions in HLE project --- src/Ryujinx.HLE/FileSystem/ContentManager.cs | 2 +- .../FileSystem/VirtualFileSystem.cs | 2 +- .../HOS/Applets/Browser/BrowserApplet.cs | 8 +- .../HOS/Applets/Browser/BrowserArgument.cs | 2 +- .../HOS/Applets/Error/ErrorApplet.cs | 2 +- .../SoftwareKeyboardRendererBase.cs | 7 +- .../HOS/Diagnostics/Demangler/Demangler.cs | 30 ++--- src/Ryujinx.HLE/HOS/Horizon.cs | 13 ++- src/Ryujinx.HLE/HOS/Ipc/IpcHandleDesc.cs | 8 +- src/Ryujinx.HLE/HOS/Ipc/IpcMessage.cs | 14 +-- .../HOS/Kernel/Common/KResourceLimit.cs | 2 +- .../Kernel/Common/KSynchronizationObject.cs | 2 +- .../HOS/Kernel/Common/KTimeManager.cs | 2 +- .../HOS/Kernel/Common/KernelInit.cs | 8 +- src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs | 4 +- .../HOS/Kernel/Ipc/KServerSession.cs | 9 +- .../HOS/Kernel/Memory/KPageHeap.cs | 2 +- .../HOS/Kernel/Memory/KPageList.cs | 2 +- .../HOS/Kernel/Memory/KPageTableBase.cs | 7 +- .../HOS/Kernel/Memory/KSlabHeap.cs | 2 +- .../HOS/Kernel/Process/HleProcessDebugger.cs | 4 +- .../HOS/Kernel/Process/KProcess.cs | 2 +- .../HOS/Kernel/Threading/KAddressArbiter.cs | 4 +- .../HOS/Kernel/Threading/KPriorityQueue.cs | 4 +- .../HOS/Kernel/Threading/KThread.cs | 4 +- src/Ryujinx.HLE/HOS/LibHacHorizonManager.cs | 16 +-- src/Ryujinx.HLE/HOS/ModLoader.cs | 22 ++-- .../Services/Account/Acc/AccountManager.cs | 2 +- .../Account/Acc/AccountSaveDataManager.cs | 2 +- .../HOS/Services/Hid/IHidServer.cs | 4 +- src/Ryujinx.HLE/HOS/Services/IpcService.cs | 4 +- .../Ldn/UserServiceCreator/AccessPoint.cs | 2 +- .../IUserLocalCommunicationService.cs | 2 +- .../UserServiceCreator/LdnDisabledClient.cs | 2 +- .../LdnMitm/LanDiscovery.cs | 6 +- .../UserServiceCreator/LdnMitm/LanProtocol.cs | 6 +- .../LdnRyu/LdnMasterProxyClient.cs | 10 +- .../LdnRyu/Proxy/EphemeralPortPool.cs | 2 +- .../LdnRyu/Proxy/LdnProxy.cs | 2 +- .../LdnRyu/Proxy/LdnProxySocket.cs | 2 +- .../LdnRyu/Proxy/P2pProxyServer.cs | 4 +- src/Ryujinx.HLE/HOS/Services/Mii/Helper.cs | 10 +- .../HOS/Services/Mii/Types/CoreData.cs | 8 +- .../HOS/Services/Mii/Types/DefaultMii.cs | 10 +- .../Services/Mii/Types/RandomMiiConstants.cs | 110 +++++++++--------- .../HOS/Services/Nfc/Nfp/VirtualAmiibo.cs | 10 +- .../GeneralService/GeneralServiceManager.cs | 2 +- .../Services/Ns/Aoc/IAddOnContentManager.cs | 2 +- .../HOS/Services/Nv/INvDrvServices.cs | 13 ++- .../NvHostAsGpu/NvHostAsGpuDeviceFile.cs | 9 +- .../HOS/Services/Nv/NvMemoryAllocator.cs | 2 +- .../Clkrst/ClkrstManager/IClkrstSession.cs | 7 +- .../HOS/Services/Ro/IRoInterface.cs | 2 +- .../QueryPlayStatisticsManager.cs | 2 +- .../HOS/Services/Settings/KeyCodeMaps.cs | 84 ++++++------- .../HOS/Services/Sockets/Bsd/BsdContext.cs | 4 +- .../HOS/Services/Sockets/Bsd/IClient.cs | 14 +-- .../Impl/EventFileDescriptorPollManager.cs | 2 +- .../Bsd/Impl/ManagedSocketPollManager.cs | 12 +- .../Services/Sockets/Sfdnsres/IResolver.cs | 2 +- .../Sockets/Sfdnsres/Proxy/DnsBlacklist.cs | 7 +- .../Sockets/Sfdnsres/Proxy/DnsMitmResolver.cs | 6 +- .../SurfaceFlinger/BufferQueueCore.cs | 2 +- .../Clock/SystemClockContextUpdateCallback.cs | 2 +- .../HOS/Services/Time/TimeZone/TimeZone.cs | 11 +- .../Time/TimeZone/TimeZoneContentManager.cs | 12 +- .../RootService/IApplicationDisplayService.cs | 2 +- .../HOS/SystemState/SystemStateMgr.cs | 7 +- .../HOS/Tamper/AtmosphereCompiler.cs | 7 +- .../HOS/Tamper/CodeEmitters/Arithmetic.cs | 8 +- src/Ryujinx.HLE/HOS/Tamper/OperationBlock.cs | 2 +- .../Loaders/Processes/ProcessConst.cs | 6 +- 72 files changed, 312 insertions(+), 299 deletions(-) diff --git a/src/Ryujinx.HLE/FileSystem/ContentManager.cs b/src/Ryujinx.HLE/FileSystem/ContentManager.cs index 08c4f4eb4..1c2a7351d 100644 --- a/src/Ryujinx.HLE/FileSystem/ContentManager.cs +++ b/src/Ryujinx.HLE/FileSystem/ContentManager.cs @@ -1072,7 +1072,7 @@ namespace Ryujinx.HLE.FileSystem public bool AreKeysAlredyPresent(string pathToCheck) { - string[] fileNames = { "prod.keys", "title.keys", "console.keys", "dev.keys" }; + string[] fileNames = ["prod.keys", "title.keys", "console.keys", "dev.keys"]; foreach (string file in fileNames) { if (File.Exists(Path.Combine(pathToCheck, file))) diff --git a/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs b/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs index 249d3f8d7..067b7d4a8 100644 --- a/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs +++ b/src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs @@ -439,7 +439,7 @@ namespace Ryujinx.HLE.FileSystem U8Span mountName = "system".ToU8Span(); DirectoryHandle handle = default; - List localList = new(); + List localList = []; try { diff --git a/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserApplet.cs index c5f13dab3..33d00cf34 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserApplet.cs @@ -39,10 +39,10 @@ namespace Ryujinx.HLE.HOS.Applets.Browser if ((_commonArguments.AppletVersion >= 0x80000 && _shimKind == ShimKind.Web) || (_commonArguments.AppletVersion >= 0x30000 && _shimKind == ShimKind.Share)) { - List result = new() - { - new BrowserOutput(BrowserOutputType.ExitReason, (uint)WebExitReason.ExitButton), - }; + List result = + [ + new BrowserOutput(BrowserOutputType.ExitReason, (uint)WebExitReason.ExitButton) + ]; _normalSession.Push(BuildResponseNew(result)); } diff --git a/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserArgument.cs b/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserArgument.cs index d2e1d55ca..24a043358 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserArgument.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Browser/BrowserArgument.cs @@ -64,7 +64,7 @@ namespace Ryujinx.HLE.HOS.Applets.Browser public static (ShimKind, List) ParseArguments(ReadOnlySpan data) { - List browserArguments = new(); + List browserArguments = []; WebArgHeader header = IApplet.ReadStruct(data[..8]); diff --git a/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs index ad841c0df..54b5721c1 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs @@ -184,7 +184,7 @@ namespace Ryujinx.HLE.HOS.Applets.Error string messageText = Encoding.ASCII.GetString(messageTextBuffer.TakeWhile(b => !b.Equals(0)).ToArray()); string detailsText = Encoding.ASCII.GetString(detailsTextBuffer.TakeWhile(b => !b.Equals(0)).ToArray()); - List buttons = new(); + List buttons = []; // TODO: Handle the LanguageCode to return the translated "OK" and "Details". diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs index cc00a6392..4d4ef8996 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardRendererBase.cs @@ -122,13 +122,14 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard { // Try a list of fonts in case any of them is not available in the system. - string[] availableFonts = { + string[] availableFonts = + [ uiThemeFontFamily, "Liberation Sans", "FreeSans", "DejaVu Sans", - "Lucida Grande", - }; + "Lucida Grande" + ]; foreach (string fontFamily in availableFonts) { diff --git a/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs b/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs index 59ce69b73..9413ed9ff 100644 --- a/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs +++ b/src/Ryujinx.HLE/HOS/Diagnostics/Demangler/Demangler.cs @@ -9,10 +9,10 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler class Demangler { private const string Base36 = "0123456789abcdefghijklmnopqrstuvwxyz"; - private readonly List _substitutionList = new(); - private List _templateParamList = new(); + private readonly List _substitutionList = []; + private List _templateParamList = []; - private readonly List _forwardTemplateReferenceList = new(); + private readonly List _forwardTemplateReferenceList = []; public string Mangled { get; private set; } @@ -274,7 +274,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler } else if (ConsumeIf("Dw")) { - List types = new(); + List types = []; while (!ConsumeIf("E")) { @@ -308,7 +308,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler } Reference referenceQualifier = Reference.None; - List paramsList = new(); + List paramsList = []; while (true) { @@ -1588,7 +1588,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler return null; } - List expressions = new(); + List expressions = []; if (ConsumeIf("_")) { while (!ConsumeIf("E")) @@ -1730,8 +1730,8 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler return null; } - List expressions = new(); - List initializers = new(); + List expressions = []; + List initializers = []; while (!ConsumeIf("_")) { @@ -1899,7 +1899,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler return null; } - List names = new(); + List names = []; while (!ConsumeIf("E")) { expression = ParseExpression(); @@ -2048,7 +2048,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler case 'l': _position += 2; - List bracedExpressions = new(); + List bracedExpressions = []; while (!ConsumeIf("E")) { expression = ParseBracedExpression(); @@ -2327,7 +2327,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler return null; case 'P': _position += 2; - List arguments = new(); + List arguments = []; while (!ConsumeIf("E")) { BaseNode argument = ParseTemplateArgument(); @@ -2368,7 +2368,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler return null; } - List bracedExpressions = new(); + List bracedExpressions = []; while (!ConsumeIf("E")) { expression = ParseBracedExpression(); @@ -2600,7 +2600,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler _templateParamList.Clear(); } - List args = new(); + List args = []; while (!ConsumeIf("E")) { if (hasContext) @@ -2659,7 +2659,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler // J * E case 'J': _position++; - List templateArguments = new(); + List templateArguments = []; while (!ConsumeIf("E")) { BaseNode templateArgument = ParseTemplateArgument(); @@ -3298,7 +3298,7 @@ namespace Ryujinx.HLE.HOS.Diagnostics.Demangler return new EncodedFunction(name, null, context.Cv, context.Ref, null, returnType); } - List paramsList = new(); + List paramsList = []; // backup because that can be destroyed by parseType CvType cv = context.Cv; diff --git a/src/Ryujinx.HLE/HOS/Horizon.cs b/src/Ryujinx.HLE/HOS/Horizon.cs index 85f06ceba..7af8711c7 100644 --- a/src/Ryujinx.HLE/HOS/Horizon.cs +++ b/src/Ryujinx.HLE/HOS/Horizon.cs @@ -130,7 +130,7 @@ namespace Ryujinx.HLE.HOS PerformanceState = new PerformanceState(); - NfpDevices = new List(); + NfpDevices = []; // Note: This is not really correct, but with HLE of services, the only memory // region used that is used is Application, so we can use the other ones for anything. @@ -283,14 +283,15 @@ namespace Ryujinx.HLE.HOS ProcessCreationInfo creationInfo = new("Service", 1, 0, 0x8000000, 1, Flags, 0, 0); - uint[] defaultCapabilities = { + uint[] defaultCapabilities = + [ (((uint)KScheduler.CpuCoresCount - 1) << 24) + (((uint)KScheduler.CpuCoresCount - 1) << 16) + 0x63F7u, 0x1FFFFFCF, 0x207FFFEF, 0x47E0060F, 0x0048BFFF, - 0x01007FFF, - }; + 0x01007FFF + ]; // TODO: // - Pass enough information (capabilities, process creation info, etc) on ServiceEntry for proper initialization. @@ -341,7 +342,7 @@ namespace Ryujinx.HLE.HOS { if (VirtualAmiibo.ApplicationBytes.Length > 0) { - VirtualAmiibo.ApplicationBytes = Array.Empty(); + VirtualAmiibo.ApplicationBytes = []; VirtualAmiibo.InputBin = string.Empty; } if (NfpDevices[nfpDeviceId].State == NfpDeviceState.SearchingForTag) @@ -356,7 +357,7 @@ namespace Ryujinx.HLE.HOS VirtualAmiibo.InputBin = path; if (VirtualAmiibo.ApplicationBytes.Length > 0) { - VirtualAmiibo.ApplicationBytes = Array.Empty(); + VirtualAmiibo.ApplicationBytes = []; } byte[] encryptedData = File.ReadAllBytes(path); VirtualAmiiboFile newFile = AmiiboBinReader.ReadBinFile(encryptedData); diff --git a/src/Ryujinx.HLE/HOS/Ipc/IpcHandleDesc.cs b/src/Ryujinx.HLE/HOS/Ipc/IpcHandleDesc.cs index 887fe28e6..0ed5b74a2 100644 --- a/src/Ryujinx.HLE/HOS/Ipc/IpcHandleDesc.cs +++ b/src/Ryujinx.HLE/HOS/Ipc/IpcHandleDesc.cs @@ -24,7 +24,7 @@ namespace Ryujinx.HLE.HOS.Ipc PId = HasPId ? reader.ReadUInt64() : 0; int toCopySize = (word >> 1) & 0xf; - int[] toCopy = toCopySize == 0 ? Array.Empty() : new int[toCopySize]; + int[] toCopy = toCopySize == 0 ? [] : new int[toCopySize]; for (int index = 0; index < toCopy.Length; index++) { @@ -34,7 +34,7 @@ namespace Ryujinx.HLE.HOS.Ipc ToCopy = toCopy; int toMoveSize = (word >> 5) & 0xf; - int[] toMove = toMoveSize == 0 ? Array.Empty() : new int[toMoveSize]; + int[] toMove = toMoveSize == 0 ? [] : new int[toMoveSize]; for (int index = 0; index < toMove.Length; index++) { @@ -59,12 +59,12 @@ namespace Ryujinx.HLE.HOS.Ipc public static IpcHandleDesc MakeCopy(params int[] handles) { - return new IpcHandleDesc(handles, Array.Empty()); + return new IpcHandleDesc(handles, []); } public static IpcHandleDesc MakeMove(params int[] handles) { - return new IpcHandleDesc(Array.Empty(), handles); + return new IpcHandleDesc([], handles); } public RecyclableMemoryStream GetStream() diff --git a/src/Ryujinx.HLE/HOS/Ipc/IpcMessage.cs b/src/Ryujinx.HLE/HOS/Ipc/IpcMessage.cs index feba09fe3..7df2b778f 100644 --- a/src/Ryujinx.HLE/HOS/Ipc/IpcMessage.cs +++ b/src/Ryujinx.HLE/HOS/Ipc/IpcMessage.cs @@ -26,13 +26,13 @@ namespace Ryujinx.HLE.HOS.Ipc public IpcMessage() { - PtrBuff = new List(0); - SendBuff = new List(0); - ReceiveBuff = new List(0); - ExchangeBuff = new List(0); - RecvListBuff = new List(0); + PtrBuff = []; + SendBuff = []; + ReceiveBuff = []; + ExchangeBuff = []; + RecvListBuff = []; - ObjectIds = new List(0); + ObjectIds = []; } public IpcMessage(ReadOnlySpan data, long cmdPtr) @@ -122,7 +122,7 @@ namespace Ryujinx.HLE.HOS.Ipc RecvListBuff.Add(new IpcRecvListBuffDesc(reader.ReadUInt64())); } - ObjectIds = new List(0); + ObjectIds = []; } public RecyclableMemoryStream GetStream(long cmdPtr, ulong recvListAddr) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs index 1763edce2..e036f366b 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KResourceLimit.cs @@ -29,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common _current2 = new long[(int)LimitableResource.Count]; _peak = new long[(int)LimitableResource.Count]; - _waitingThreads = new LinkedList(); + _waitingThreads = []; } public bool Reserve(LimitableResource resource, ulong amount) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KSynchronizationObject.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KSynchronizationObject.cs index 7e725e747..50fe01069 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Common/KSynchronizationObject.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KSynchronizationObject.cs @@ -9,7 +9,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common public KSynchronizationObject(KernelContext context) : base(context) { - WaitingThreads = new LinkedList(); + WaitingThreads = []; } public LinkedListNode AddWaitingThread(KThread thread) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KTimeManager.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KTimeManager.cs index 3c5fa067f..c24648c65 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Common/KTimeManager.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KTimeManager.cs @@ -34,7 +34,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common public KTimeManager(KernelContext context) { _context = context; - _waitingObjects = new List(); + _waitingObjects = []; _keepRunning = true; Thread work = new(WaitAndCheckScheduledObjects) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Common/KernelInit.cs b/src/Ryujinx.HLE/HOS/Kernel/Common/KernelInit.cs index 8021d8da0..53ceb5b91 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Common/KernelInit.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Common/KernelInit.cs @@ -72,13 +72,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Common servicePool = new MemoryRegion(DramMemoryMap.SlabHeapEnd, servicePoolSize); - return new[] - { + return + [ GetMemoryRegion(applicationPool), GetMemoryRegion(appletPool), GetMemoryRegion(servicePool), - GetMemoryRegion(nvServicesPool), - }; + GetMemoryRegion(nvServicesPool) + ]; } private static KMemoryRegionManager GetMemoryRegion(MemoryRegion region) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs index 08efa8d94..d4e0dbfb5 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerPort.cs @@ -16,8 +16,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { _parent = parent; - _incomingConnections = new LinkedList(); - _lightIncomingConnections = new LinkedList(); + _incomingConnections = []; + _lightIncomingConnections = []; } public void EnqueueIncomingSession(KServerSession session) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs index 3b4280855..6c1586cb9 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Ipc/KServerSession.cs @@ -10,12 +10,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { class KServerSession : KSynchronizationObject { - private static readonly MemoryState[] _ipcMemoryStates = { + private static readonly MemoryState[] _ipcMemoryStates = + [ MemoryState.IpcBuffer3, MemoryState.IpcBuffer0, MemoryState.IpcBuffer1, - (MemoryState)0xfffce5d4, //This is invalid, shouldn't be accessed. - }; + (MemoryState)0xfffce5d4 //This is invalid, shouldn't be accessed. + ]; private readonly struct Message { @@ -176,7 +177,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc { _parent = parent; - _requests = new LinkedList(); + _requests = []; } public Result EnqueueRequest(KSessionRequest request) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs index ec2eda97d..58d79c31f 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageHeap.cs @@ -84,7 +84,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory } } - private static readonly int[] _memoryBlockPageShifts = { 12, 16, 21, 22, 25, 29, 30 }; + private static readonly int[] _memoryBlockPageShifts = [12, 16, 21, 22, 25, 29, 30]; #pragma warning disable IDE0052 // Remove unread private member private readonly ulong _heapAddress; diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs index 38e2b6f95..8255a38bf 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageList.cs @@ -10,7 +10,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory public KPageList() { - Nodes = new LinkedList(); + Nodes = []; } public Result AddRange(ulong address, ulong pagesCount) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs index 122845725..db190e6a9 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs @@ -13,14 +13,15 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory { abstract class KPageTableBase { - private static readonly int[] _mappingUnitSizes = { + private static readonly int[] _mappingUnitSizes = + [ 0x1000, 0x10000, 0x200000, 0x400000, 0x2000000, - 0x40000000, - }; + 0x40000000 + ]; private const ulong RegionAlignment = 0x200000; diff --git a/src/Ryujinx.HLE/HOS/Kernel/Memory/KSlabHeap.cs b/src/Ryujinx.HLE/HOS/Kernel/Memory/KSlabHeap.cs index cd8c2e470..bdac2c1ce 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Memory/KSlabHeap.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Memory/KSlabHeap.cs @@ -8,7 +8,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory public KSlabHeap(ulong pa, ulong itemSize, ulong size) { - _items = new LinkedList(); + _items = []; int itemsCount = (int)(size / itemSize); diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs index a9f87f2ca..bb12bd384 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Process/HleProcessDebugger.cs @@ -41,7 +41,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process { _owner = owner; - _images = new List(); + _images = []; } public string GetGuestStackTrace(KThread thread) @@ -414,7 +414,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process ulong strTblAddr = textOffset + strTab; ulong symTblAddr = textOffset + symTab; - List symbols = new(); + List symbols = []; while (symTblAddr < strTblAddr) { diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs index 82c3d2e70..32dca1512 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs @@ -107,7 +107,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process // TODO: Remove once we no longer need to initialize it externally. HandleTable = new KHandleTable(); - _threads = new LinkedList(); + _threads = []; Debugger = new HleProcessDebugger(this); } diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs index ca4aedb7a..62b57da04 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KAddressArbiter.cs @@ -21,8 +21,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading { _context = context; - _condVarThreads = new List(); - _arbiterThreads = new List(); + _condVarThreads = []; + _arbiterThreads = []; } public Result ArbitrateLock(int ownerHandle, ulong mutexAddress, int requesterHandle) diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs index 7951fab5b..e4b4a370a 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KPriorityQueue.cs @@ -23,8 +23,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading for (int core = 0; core < KScheduler.CpuCoresCount; core++) { - _suggestedThreadsPerPrioPerCore[prio][core] = new LinkedList(); - _scheduledThreadsPerPrioPerCore[prio][core] = new LinkedList(); + _suggestedThreadsPerPrioPerCore[prio][core] = []; + _scheduledThreadsPerPrioPerCore[prio][core] = []; } } diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs index 38599b5fa..f1745eb44 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs @@ -121,8 +121,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading SiblingsPerCore = new LinkedListNode[KScheduler.CpuCoresCount]; - _mutexWaiters = new LinkedList(); - _pinnedWaiters = new LinkedList(); + _mutexWaiters = []; + _pinnedWaiters = []; } public Result Initialize( diff --git a/src/Ryujinx.HLE/HOS/LibHacHorizonManager.cs b/src/Ryujinx.HLE/HOS/LibHacHorizonManager.cs index 46c27da40..41911183f 100644 --- a/src/Ryujinx.HLE/HOS/LibHacHorizonManager.cs +++ b/src/Ryujinx.HLE/HOS/LibHacHorizonManager.cs @@ -100,20 +100,20 @@ namespace Ryujinx.HLE.HOS AccessControlBits.Bits.MoveCacheStorage; // Sdb has save data access control info so we can't store just its access control bits - private static ReadOnlySpan SdbFacData => new byte[] - { + private static ReadOnlySpan SdbFacData => + [ 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, - }; + 0x00, 0x00, 0x00, 0x01 + ]; - private static ReadOnlySpan SdbFacDescriptor => new byte[] - { + private static ReadOnlySpan SdbFacDescriptor => + [ 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - }; + 0x01, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 + ]; } } diff --git a/src/Ryujinx.HLE/HOS/ModLoader.cs b/src/Ryujinx.HLE/HOS/ModLoader.cs index 289a493a2..ff691914c 100644 --- a/src/Ryujinx.HLE/HOS/ModLoader.cs +++ b/src/Ryujinx.HLE/HOS/ModLoader.cs @@ -87,11 +87,11 @@ namespace Ryujinx.HLE.HOS public ModCache() { - RomfsContainers = new List>(); - ExefsContainers = new List>(); - RomfsDirs = new List>(); - ExefsDirs = new List>(); - Cheats = new List(); + RomfsContainers = []; + ExefsContainers = []; + RomfsDirs = []; + ExefsDirs = []; + Cheats = []; } } @@ -106,9 +106,9 @@ namespace Ryujinx.HLE.HOS public PatchCache() { - NsoPatches = new List>(); - NroPatches = new List>(); - KipPatches = new List>(); + NsoPatches = []; + NroPatches = []; + KipPatches = []; Initialized = false; } @@ -357,7 +357,7 @@ namespace Ryujinx.HLE.HOS private static IEnumerable GetCheatsInFile(FileInfo cheatFile) { string cheatName = DefaultCheatName; - List instructions = new(); + List instructions = []; using StreamReader cheatData = cheatFile.OpenText(); while (cheatData.ReadLine() is { } line) @@ -384,7 +384,7 @@ namespace Ryujinx.HLE.HOS // Start a new cheat section. cheatName = line[1..^1]; - instructions = new List(); + instructions = []; } else if (line.Length > 0) { @@ -470,7 +470,7 @@ namespace Ryujinx.HLE.HOS return baseStorage; } - HashSet fileSet = new(); + HashSet fileSet = []; RomFsBuilder builder = new(); int count = 0; diff --git a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs index e97fb15a4..7364b2d40 100644 --- a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountManager.cs @@ -33,7 +33,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc _horizonClient = horizonClient; _profiles = new ConcurrentDictionary(); - _storedOpenedUsers = Array.Empty(); + _storedOpenedUsers = []; _accountSaveDataManager = new AccountSaveDataManager(_profiles); diff --git a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs index aa6fa57c4..87d275ef4 100644 --- a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs @@ -65,7 +65,7 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc { ProfilesJson profilesJson = new() { - Profiles = new List(), + Profiles = [], LastOpened = LastOpened.ToString(), }; diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs index c1856535b..21288429f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs @@ -872,8 +872,8 @@ namespace Ryujinx.HLE.HOS.Services.Hid // Initialize entries to avoid issues with some games. - List emptyGamepadInputs = new(); - List emptySixAxisInputs = new(); + List emptyGamepadInputs = []; + List emptySixAxisInputs = []; for (int player = 0; player < NpadDevices.MaxControllers; player++) { diff --git a/src/Ryujinx.HLE/HOS/Services/IpcService.cs b/src/Ryujinx.HLE/HOS/Services/IpcService.cs index cd3df4edf..1b95b6712 100644 --- a/src/Ryujinx.HLE/HOS/Services/IpcService.cs +++ b/src/Ryujinx.HLE/HOS/Services/IpcService.cs @@ -123,7 +123,7 @@ namespace Ryujinx.HLE.HOS.Services { Logger.Trace?.Print(LogClass.KernelIpc, $"{service.GetType().Name}: {processRequest.Name}"); - result = (ResultCode)processRequest.Invoke(service, new object[] { context }); + result = (ResultCode)processRequest.Invoke(service, [context]); } else { @@ -176,7 +176,7 @@ namespace Ryujinx.HLE.HOS.Services { Logger.Debug?.Print(LogClass.KernelIpc, $"{GetType().Name}: {processRequest.Name}"); - result = (ResultCode)processRequest.Invoke(this, new object[] { context }); + result = (ResultCode)processRequest.Invoke(this, [context]); } else { diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/AccessPoint.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/AccessPoint.cs index bd00a3139..d416ef233 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/AccessPoint.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/AccessPoint.cs @@ -84,7 +84,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator NetworkConfig = networkConfig, }; - bool success = _parent.NetworkClient.CreateNetwork(request, _advertiseData ?? Array.Empty()); + bool success = _parent.NetworkClient.CreateNetwork(request, _advertiseData ?? []); return success ? ResultCode.Success : ResultCode.InvalidState; } diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs index 438f532ee..5c6ee7732 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/IUserLocalCommunicationService.cs @@ -163,7 +163,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator } else { - return Array.Empty(); + return []; } } diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnDisabledClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnDisabledClient.cs index 2e8bb8d83..cb9f47359 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnDisabledClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnDisabledClient.cs @@ -56,7 +56,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator public NetworkInfo[] Scan(ushort channel, ScanFilter scanFilter) { Logger.Warning?.PrintMsg(LogClass.ServiceLdn, "Attempted to scan for networks, but Multiplayer is disabled!"); - return Array.Empty(); + return []; } public void SetAdvertiseData(byte[] data) { } diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs index 1f93cd1d9..b34772219 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanDiscovery.cs @@ -28,7 +28,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm private readonly Ssid _fakeSsid; private ILdnTcpSocket _tcp; private LdnProxyUdpServer _udp, _udp2; - private readonly List _stations = new(); + private readonly List _stations = []; private readonly Lock _lock = new(); private readonly AutoResetEvent _apConnected = new(false); @@ -340,10 +340,10 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm if (_protocol.SendBroadcast(_udp, LanPacketType.Scan, DefaultPort) < 0) { - return Array.Empty(); + return []; } - List outNetworkInfo = new(); + List outNetworkInfo = []; foreach (KeyValuePair item in _udp.GetScanResults()) { diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanProtocol.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanProtocol.cs index b60b70d80..14142cc4e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanProtocol.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LanProtocol.cs @@ -162,7 +162,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm public int SendBroadcast(ILdnSocket s, LanPacketType type, int port) { - return SendPacket(s, type, Array.Empty(), new IPEndPoint(_discovery.LocalBroadcastAddr, port)); + return SendPacket(s, type, [], new IPEndPoint(_discovery.LocalBroadcastAddr, port)); } public int SendPacket(ILdnSocket s, LanPacketType type, byte[] data, EndPoint endPoint = null) @@ -231,7 +231,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm private int Compress(byte[] input, out byte[] output) { - List outputList = new(); + List outputList = []; int i = 0; int maxCount = 0xFF; @@ -275,7 +275,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm private int Decompress(byte[] input, out byte[] output) { - List outputList = new(); + List outputList = []; int i = 0; while (i < input.Length && outputList.Count < BufferSize) diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs index 2277420f6..517359e70 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs @@ -40,7 +40,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu private readonly RyuLdnProtocol _protocol; private readonly NetworkTimeout _timeout; - private readonly List _availableGames = new(); + private readonly List _availableGames = []; private DisconnectReason _disconnectReason; private P2pProxyServer _hostedProxy; @@ -109,7 +109,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu ConnectAsync(); - int index = WaitHandle.WaitAny(new WaitHandle[] { _connected, _error }, FailureTimeout); + int index = WaitHandle.WaitAny([_connected, _error], FailureTimeout); if (IsConnected) { @@ -326,7 +326,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu SendAsync(_protocol.Encode(PacketId.Reject, new RejectRequest(disconnectReason, nodeId))); - int index = WaitHandle.WaitAny(new WaitHandle[] { _reject, _error }, InactiveTimeout); + int index = WaitHandle.WaitAny([_reject, _error], InactiveTimeout); if (index == 0) { @@ -566,13 +566,13 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu SendAsync(_protocol.Encode(PacketId.Scan, scanFilter)); - index = WaitHandle.WaitAny(new WaitHandle[] { _scan, _error }, ScanTimeout); + index = WaitHandle.WaitAny([_scan, _error], ScanTimeout); } if (index != 0) { // An error occurred or timeout. Write 0 games. - return Array.Empty(); + return []; } return _availableGames.ToArray(); diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs index 01579e78f..75cc15a98 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/EphemeralPortPool.cs @@ -7,7 +7,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy { private const ushort EphemeralBase = 49152; - private readonly List _ephemeralPorts = new(); + private readonly List _ephemeralPorts = []; private readonly Lock _lock = new(); diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs index 540ef9104..fa9cbda67 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxy.cs @@ -13,7 +13,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy public EndPoint LocalEndpoint { get; } public IPAddress LocalAddress { get; } - private readonly List _sockets = new(); + private readonly List _sockets = []; private readonly Dictionary _ephemeralPorts = new(); private readonly IProxyClient _parent; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs index bb93bcb45..e792bb91e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/LdnProxySocket.cs @@ -18,7 +18,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy private readonly LdnProxy _proxy; private bool _isListening; - private readonly List _listenSockets = new(); + private readonly List _listenSockets = []; private readonly Queue _connectRequests = new(); diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs index 26aba483c..d2121c047 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs @@ -41,9 +41,9 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy private NatDevice _natDevice; private Mapping _portMapping; - private readonly List _players = new(); + private readonly List _players = []; - private readonly List _waitingTokens = new(); + private readonly List _waitingTokens = []; private readonly AutoResetEvent _tokenEvent = new(false); private uint _broadcastAddress; diff --git a/src/Ryujinx.HLE/HOS/Services/Mii/Helper.cs b/src/Ryujinx.HLE/HOS/Services/Mii/Helper.cs index f4d288e9c..c1dd76800 100644 --- a/src/Ryujinx.HLE/HOS/Services/Mii/Helper.cs +++ b/src/Ryujinx.HLE/HOS/Services/Mii/Helper.cs @@ -40,11 +40,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii } #pragma warning disable IDE0055 // Disable formatting - public static ReadOnlySpan Ver3FacelineColorTable => new byte[] { 0, 1, 2, 3, 4, 5 }; - public static ReadOnlySpan Ver3HairColorTable => new byte[] { 8, 1, 2, 3, 4, 5, 6, 7 }; - public static ReadOnlySpan Ver3EyeColorTable => new byte[] { 8, 9, 10, 11, 12, 13 }; - public static ReadOnlySpan Ver3MouthColorTable => new byte[] { 19, 20, 21, 22, 23 }; - public static ReadOnlySpan Ver3GlassColorTable => new byte[] { 8, 14, 15, 16, 17, 18, 0 }; + public static ReadOnlySpan Ver3FacelineColorTable => [0, 1, 2, 3, 4, 5]; + public static ReadOnlySpan Ver3HairColorTable => [8, 1, 2, 3, 4, 5, 6, 7]; + public static ReadOnlySpan Ver3EyeColorTable => [8, 9, 10, 11, 12, 13]; + public static ReadOnlySpan Ver3MouthColorTable => [19, 20, 21, 22, 23]; + public static ReadOnlySpan Ver3GlassColorTable => [8, 14, 15, 16, 17, 18, 0]; #pragma warning restore IDE0055 } } diff --git a/src/Ryujinx.HLE/HOS/Services/Mii/Types/CoreData.cs b/src/Ryujinx.HLE/HOS/Services/Mii/Types/CoreData.cs index bbef717ae..5053cd5ca 100644 --- a/src/Ryujinx.HLE/HOS/Services/Mii/Types/CoreData.cs +++ b/src/Ryujinx.HLE/HOS/Services/Mii/Types/CoreData.cs @@ -830,8 +830,8 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types } #region "Element Info Array" - private readonly ReadOnlySpan ElementInfoArray => new byte[] - { + private readonly ReadOnlySpan ElementInfoArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -905,8 +905,8 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - }; + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + ]; #endregion } } diff --git a/src/Ryujinx.HLE/HOS/Services/Mii/Types/DefaultMii.cs b/src/Ryujinx.HLE/HOS/Services/Mii/Types/DefaultMii.cs index b7a63d16b..5ad7013e4 100644 --- a/src/Ryujinx.HLE/HOS/Services/Mii/Types/DefaultMii.cs +++ b/src/Ryujinx.HLE/HOS/Services/Mii/Types/DefaultMii.cs @@ -73,7 +73,7 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types // The first 2 Mii in the default table are used as base for Male/Female in editor but not exposed via IPC. public static int TableLength => _fromIndex.Length; - private static readonly int[] _fromIndex = { 2, 3, 4, 5, 6, 7 }; + private static readonly int[] _fromIndex = [2, 3, 4, 5, 6, 7]; public static DefaultMii GetDefaultMii(uint index) { @@ -81,8 +81,8 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types } #region "Raw Table Array" - private static ReadOnlySpan TableRawArray => new byte[] - { + private static ReadOnlySpan TableRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, @@ -190,8 +190,8 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6f, 0x00, - 0x20, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x20, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; #endregion } } diff --git a/src/Ryujinx.HLE/HOS/Services/Mii/Types/RandomMiiConstants.cs b/src/Ryujinx.HLE/HOS/Services/Mii/Types/RandomMiiConstants.cs index 092733f7e..e465a80b2 100644 --- a/src/Ryujinx.HLE/HOS/Services/Mii/Types/RandomMiiConstants.cs +++ b/src/Ryujinx.HLE/HOS/Services/Mii/Types/RandomMiiConstants.cs @@ -6,17 +6,19 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types { static class RandomMiiConstants { - public static readonly int[] EyeRotateTable = { + public static readonly int[] EyeRotateTable = + [ 0x03, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x03, 0x03, 0x04, 0x03, 0x04, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04, - }; + 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x03, 0x04, 0x04 + ]; - public static readonly int[] EyebrowRotateTable = { + public static readonly int[] EyebrowRotateTable = + [ 0x06, 0x06, 0x05, 0x07, 0x06, 0x07, 0x06, 0x07, 0x04, 0x07, 0x06, 0x08, 0x05, 0x05, 0x06, 0x06, - 0x07, 0x07, 0x06, 0x06, 0x05, 0x06, 0x07, 0x05, - }; + 0x07, 0x07, 0x06, 0x06, 0x05, 0x06, 0x07, 0x05 + ]; [Flags] public enum BeardAndMustacheFlag @@ -89,8 +91,8 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types #region "Random Mii Data Arrays" - private static ReadOnlySpan RandomMiiFacelineRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiFacelineRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, @@ -320,11 +322,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiFacelineColorRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiFacelineColorRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, @@ -399,11 +401,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiFacelineWrinkleRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiFacelineWrinkleRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -633,11 +635,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiFacelineMakeRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiFacelineMakeRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -867,11 +869,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiHairTypeRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiHairTypeRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, @@ -1101,11 +1103,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiHairColorRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiHairColorRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1218,11 +1220,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiEyeTypeRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiEyeTypeRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, @@ -1452,11 +1454,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x2e, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiEyeColorRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiEyeColorRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, @@ -1493,11 +1495,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiEyebrowTypeRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiEyebrowTypeRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, @@ -1727,11 +1729,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiNoseTypeRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiNoseTypeRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, @@ -1961,11 +1963,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiMouthTypeRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiMouthTypeRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, @@ -2195,11 +2197,11 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; - private static ReadOnlySpan RandomMiiGlassTypeRawArray => new byte[] - { + private static ReadOnlySpan RandomMiiGlassTypeRawArray => + [ 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2236,8 +2238,8 @@ namespace Ryujinx.HLE.HOS.Services.Mii.Types 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ]; #endregion } } diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs index 2cb35472f..36a89070d 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs @@ -16,7 +16,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp static class VirtualAmiibo { public static uint OpenedApplicationAreaId; - public static byte[] ApplicationBytes = Array.Empty(); + public static byte[] ApplicationBytes = []; public static string InputBin = string.Empty; public static string NickName = string.Empty; private static readonly AmiiboJsonSerializerContext _serializerContext = AmiiboJsonSerializerContext.Default; @@ -137,7 +137,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp if (ApplicationBytes.Length > 0) { byte[] bytes = ApplicationBytes; - ApplicationBytes = Array.Empty(); + ApplicationBytes = []; return bytes; } VirtualAmiiboFile virtualAmiiboFile = LoadAmiiboFile(amiiboId); @@ -150,7 +150,7 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp } } - return Array.Empty(); + return []; } public static bool CreateApplicationArea(string amiiboId, uint applicationAreaId, byte[] applicationAreaData) @@ -219,12 +219,12 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp virtualAmiiboFile = new VirtualAmiiboFile() { FileVersion = 0, - TagUuid = Array.Empty(), + TagUuid = [], AmiiboId = amiiboId, FirstWriteDate = DateTime.Now, LastWriteDate = DateTime.Now, WriteCounter = 0, - ApplicationAreas = new List(), + ApplicationAreas = [], }; SaveAmiiboFile(virtualAmiiboFile); diff --git a/src/Ryujinx.HLE/HOS/Services/Nifm/StaticService/GeneralService/GeneralServiceManager.cs b/src/Ryujinx.HLE/HOS/Services/Nifm/StaticService/GeneralService/GeneralServiceManager.cs index 16eefc87d..5ad241e0f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nifm/StaticService/GeneralService/GeneralServiceManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nifm/StaticService/GeneralService/GeneralServiceManager.cs @@ -5,7 +5,7 @@ namespace Ryujinx.HLE.HOS.Services.Nifm.StaticService.GeneralService { static class GeneralServiceManager { - private static readonly List _generalServices = new(); + private static readonly List _generalServices = []; public static int Count { diff --git a/src/Ryujinx.HLE/HOS/Services/Ns/Aoc/IAddOnContentManager.cs b/src/Ryujinx.HLE/HOS/Services/Ns/Aoc/IAddOnContentManager.cs index 083a83214..c77358803 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ns/Aoc/IAddOnContentManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ns/Aoc/IAddOnContentManager.cs @@ -15,7 +15,7 @@ namespace Ryujinx.HLE.HOS.Services.Ns.Aoc private ulong _addOnContentBaseId; - private readonly List _mountedAocTitleIds = new(); + private readonly List _mountedAocTitleIds = []; public IAddOnContentManager(ServiceCtx context) { diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs b/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs index a0df66d00..fea09ef47 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nv/INvDrvServices.cs @@ -25,11 +25,11 @@ namespace Ryujinx.HLE.HOS.Services.Nv [Service("nvdrv:t")] class INvDrvServices : IpcService { - private static readonly List _deviceFileDebugRegistry = new() - { + private static readonly List _deviceFileDebugRegistry = + [ "/dev/nvhost-dbg-gpu", - "/dev/nvhost-prof-gpu", - }; + "/dev/nvhost-prof-gpu" + ]; private static readonly Dictionary _deviceFileRegistry = new() { @@ -73,9 +73,10 @@ namespace Ryujinx.HLE.HOS.Services.Nv if (_deviceFileRegistry.TryGetValue(path, out Type deviceFileClass)) { - ConstructorInfo constructor = deviceFileClass.GetConstructor(new[] { typeof(ServiceCtx), typeof(IVirtualMemoryManager), typeof(ulong) }); + ConstructorInfo constructor = deviceFileClass.GetConstructor([typeof(ServiceCtx), typeof(IVirtualMemoryManager), typeof(ulong) + ]); - NvDeviceFile deviceFile = (NvDeviceFile)constructor.Invoke(new object[] { context, _clientMemory, _owner }); + NvDeviceFile deviceFile = (NvDeviceFile)constructor.Invoke([context, _clientMemory, _owner]); deviceFile.Path = path; diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs index 6ce45de88..9d0104a01 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs @@ -15,7 +15,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostAsGpu private const uint SmallPageSize = 0x1000; private const uint BigPageSize = 0x10000; - private static readonly uint[] _pageSizes = { SmallPageSize, BigPageSize }; + private static readonly uint[] _pageSizes = [SmallPageSize, BigPageSize]; private const ulong SmallRegionLimit = 0x400000000UL; // 16 GiB private const ulong DefaultUserSize = 1UL << 37; @@ -32,10 +32,11 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostAsGpu } } - private static readonly VmRegion[] _vmRegions = { + private static readonly VmRegion[] _vmRegions = + [ new((ulong)BigPageSize << 16, SmallRegionLimit), - new(SmallRegionLimit, DefaultUserSize), - }; + new(SmallRegionLimit, DefaultUserSize) + ]; private readonly AddressSpaceContext _asContext; private readonly NvMemoryAllocator _memoryAllocator; diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/NvMemoryAllocator.cs b/src/Ryujinx.HLE/HOS/Services/Nv/NvMemoryAllocator.cs index 4e8193302..3b8840a3d 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nv/NvMemoryAllocator.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nv/NvMemoryAllocator.cs @@ -23,7 +23,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv private readonly TreeDictionary _tree = new(); private readonly Dictionary> _dictionary = new(); - private readonly LinkedList _list = new(); + private readonly LinkedList _list = []; public NvMemoryAllocator() { diff --git a/src/Ryujinx.HLE/HOS/Services/Pcv/Clkrst/ClkrstManager/IClkrstSession.cs b/src/Ryujinx.HLE/HOS/Services/Pcv/Clkrst/ClkrstManager/IClkrstSession.cs index ddc4e5c7d..5d90fcbe2 100644 --- a/src/Ryujinx.HLE/HOS/Services/Pcv/Clkrst/ClkrstManager/IClkrstSession.cs +++ b/src/Ryujinx.HLE/HOS/Services/Pcv/Clkrst/ClkrstManager/IClkrstSession.cs @@ -12,15 +12,16 @@ namespace Ryujinx.HLE.HOS.Services.Pcv.Clkrst.ClkrstManager #pragma warning restore IDE0052 private uint _clockRate; - private readonly DeviceCode[] _allowedDeviceCodeTable = { + private readonly DeviceCode[] _allowedDeviceCodeTable = + [ DeviceCode.Cpu, DeviceCode.Gpu, DeviceCode.Disp1, DeviceCode.Disp2, DeviceCode.Tsec, DeviceCode.Mselect, DeviceCode.Sor1, DeviceCode.Host1x, DeviceCode.Vic, DeviceCode.Nvenc, DeviceCode.Nvjpg, DeviceCode.Nvdec, DeviceCode.Ape, DeviceCode.AudioDsp, DeviceCode.Emc, DeviceCode.Dsi, DeviceCode.SysBus, DeviceCode.XusbSs, DeviceCode.XusbHost, DeviceCode.XusbDevice, DeviceCode.Gpuaux, DeviceCode.Pcie, DeviceCode.Apbdma, DeviceCode.Sdmmc1, - DeviceCode.Sdmmc2, DeviceCode.Sdmmc4, - }; + DeviceCode.Sdmmc2, DeviceCode.Sdmmc4 + ]; public IClkrstSession(DeviceCode deviceCode, uint unknown) { diff --git a/src/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs b/src/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs index 5b5b3bf84..17d0b96ef 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs @@ -64,7 +64,7 @@ namespace Ryujinx.HLE.HOS.Services.Ro return ResultCode.InvalidSize; } - List hashes = new(); + List hashes = []; for (int i = 0; i < header.HashesCount; i++) { diff --git a/src/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs b/src/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs index 25666c2fd..701cdd94e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs @@ -33,7 +33,7 @@ namespace Ryujinx.HLE.HOS.Services.Sdb.Pdm.QueryService PlayLogQueryCapability queryCapability = (PlayLogQueryCapability)context.Device.Processes.ActiveApplication.ApplicationControlProperties.PlayLogQueryCapability; - List titleIds = new(); + List titleIds = []; for (ulong i = 0; i < inputSize / sizeof(ulong); i++) { diff --git a/src/Ryujinx.HLE/HOS/Services/Settings/KeyCodeMaps.cs b/src/Ryujinx.HLE/HOS/Services/Settings/KeyCodeMaps.cs index 981fc18ea..870d226b5 100644 --- a/src/Ryujinx.HLE/HOS/Services/Settings/KeyCodeMaps.cs +++ b/src/Ryujinx.HLE/HOS/Services/Settings/KeyCodeMaps.cs @@ -3,7 +3,7 @@ namespace Ryujinx.HLE.HOS.Services.Settings static class KeyCodeMaps { public static byte[] Default = - { + [ 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -345,11 +345,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] EnglishUsInternational = - { + [ 0x01, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -691,11 +691,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] EnglishUk = - { + [ 0x01, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1037,11 +1037,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] French = - { + [ 0x01, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1383,11 +1383,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] FrenchCa = - { + [ 0x01, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -1729,11 +1729,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] Spanish = - { + [ 0x01, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2075,11 +2075,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] SpanishLatin = - { + [ 0x01, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2421,11 +2421,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] German = - { + [ 0x01, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -2767,11 +2767,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] Italian = - { + [ 0x01, 0x00, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -3113,11 +3113,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] Portuguese = - { + [ 0x01, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -3459,11 +3459,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] Russian = - { + [ 0x09, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -3805,11 +3805,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] Korean = - { + [ 0x11, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -4151,11 +4151,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] ChineseSimplified = - { + [ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -4497,11 +4497,11 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; public static byte[] ChineseTraditional = - { + [ 0x61, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -4843,7 +4843,7 @@ namespace Ryujinx.HLE.HOS.Services.Settings 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; + 0x00, 0x00, 0x00, 0x00 + ]; }; } diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/BsdContext.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/BsdContext.cs index 9d5bb8d01..d3a88998f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/BsdContext.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/BsdContext.cs @@ -17,7 +17,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd private BsdContext() { - _fds = new List(); + _fds = []; } public ISocket RetrieveSocket(int socketFd) @@ -47,7 +47,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd public List RetrieveFileDescriptorsFromMask(ReadOnlySpan mask) { - List fds = new(); + List fds = []; for (int i = 0; i < mask.Length; i++) { diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs index 273f6c5ca..8475424ce 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs @@ -16,11 +16,11 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd [Service("bsd:u", false)] class IClient : IpcService { - private static readonly List _pollManagers = new() - { + private static readonly List _pollManagers = + [ EventFileDescriptorPollManager.Instance, - ManagedSocketPollManager.Instance, - }; + ManagedSocketPollManager.Instance + ]; private BsdContext _context; private readonly bool _isPrivileged; @@ -265,7 +265,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd for (int i = 0; i < eventsByPollManager.Length; i++) { - eventsByPollManager[i] = new List(); + eventsByPollManager[i] = []; foreach (PollEvent evnt in events) { @@ -361,12 +361,12 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd events[i] = new PollEvent(pollEventData, fileDescriptor); } - List discoveredEvents = new(); + List discoveredEvents = []; List[] eventsByPollManager = new List[_pollManagers.Count]; for (int i = 0; i < eventsByPollManager.Length; i++) { - eventsByPollManager[i] = new List(); + eventsByPollManager[i] = []; foreach (PollEvent evnt in events) { diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/EventFileDescriptorPollManager.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/EventFileDescriptorPollManager.cs index a29554c35..99e3abdf8 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/EventFileDescriptorPollManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/EventFileDescriptorPollManager.cs @@ -28,7 +28,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl { updatedCount = 0; - List waiters = new(); + List waiters = []; for (int i = 0; i < events.Count; i++) { diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs index e870e8aea..a1daa87c0 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Bsd/Impl/ManagedSocketPollManager.cs @@ -27,9 +27,9 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl public LinuxError Poll(List events, int timeoutMilliseconds, out int updatedCount) { - List readEvents = new(); - List writeEvents = new(); - List errorEvents = new(); + List readEvents = []; + List writeEvents = []; + List errorEvents = []; updatedCount = 0; @@ -123,9 +123,9 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd.Impl public LinuxError Select(List events, int timeout, out int updatedCount) { - List readEvents = new(); - List writeEvents = new(); - List errorEvents = new(); + List readEvents = []; + List writeEvents = []; + List errorEvents = []; updatedCount = 0; diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs index 5b2de13f0..80bdbec8a 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/IResolver.cs @@ -604,7 +604,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres private static List DeserializeAddrInfos(IVirtualMemoryManager memory, ulong address, ulong size) { - List result = new(); + List result = []; ReadOnlySpan data = memory.GetSpan(address, (int)size); diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsBlacklist.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsBlacklist.cs index 608ea2f51..78c6be164 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsBlacklist.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsBlacklist.cs @@ -19,14 +19,15 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres.Proxy [GeneratedRegex(@"^accounts\.nintendo\.com$", RegexOpts)] private static partial Regex BlockedHost6(); - private static readonly Regex[] _blockedHosts = { + private static readonly Regex[] _blockedHosts = + [ BlockedHost1(), BlockedHost2(), BlockedHost3(), BlockedHost4(), BlockedHost5(), - BlockedHost6(), - }; + BlockedHost6() + ]; public static bool IsHostBlocked(string host) { diff --git a/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsMitmResolver.cs b/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsMitmResolver.cs index b0e282031..820a4ab48 100644 --- a/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsMitmResolver.cs +++ b/src/Ryujinx.HLE/HOS/Services/Sockets/Sfdnsres/Proxy/DnsMitmResolver.cs @@ -44,7 +44,7 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres.Proxy continue; } - string[] entry = line.Split(new[] { ' ', '\t' }, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); + string[] entry = line.Split([' ', '\t'], StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries); // Hosts file example entry: // 127.0.0.1 localhost loopback @@ -92,9 +92,9 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Sfdnsres.Proxy return new IPHostEntry { - AddressList = new[] { hostEntry.Value }, + AddressList = [hostEntry.Value], HostName = hostEntry.Key, - Aliases = Array.Empty(), + Aliases = [], }; } } diff --git a/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueCore.cs b/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueCore.cs index 5dc02a07e..770149489 100644 --- a/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueCore.cs +++ b/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/BufferQueueCore.cs @@ -66,7 +66,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger ConsumerListener = null; ConsumerUsageBits = 0; - Queue = new List(); + Queue = []; // TODO: CreateGraphicBufferAlloc? diff --git a/src/Ryujinx.HLE/HOS/Services/Time/Clock/SystemClockContextUpdateCallback.cs b/src/Ryujinx.HLE/HOS/Services/Time/Clock/SystemClockContextUpdateCallback.cs index 119096dcf..781f72ead 100644 --- a/src/Ryujinx.HLE/HOS/Services/Time/Clock/SystemClockContextUpdateCallback.cs +++ b/src/Ryujinx.HLE/HOS/Services/Time/Clock/SystemClockContextUpdateCallback.cs @@ -12,7 +12,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.Clock public SystemClockContextUpdateCallback() { - _operationEventList = new List(); + _operationEventList = []; Context = new SystemClockContext(); _hasContext = false; } diff --git a/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZone.cs b/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZone.cs index cdd11b58d..819599171 100644 --- a/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZone.cs +++ b/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZone.cs @@ -32,11 +32,12 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone private const long AverageSecondsPerYear = 31556952; private const long SecondsPerRepeat = YearsPerRepeat * AverageSecondsPerYear; - private static readonly int[] _yearLengths = { DaysPerNYear, DaysPerLYear }; - private static readonly int[][] _monthsLengths = { - new[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, - new[] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, - }; + private static readonly int[] _yearLengths = [DaysPerNYear, DaysPerLYear]; + private static readonly int[][] _monthsLengths = + [ + [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] + ]; private static ReadOnlySpan TimeZoneDefaultRule => ",M4.1.0,M10.5.0"u8; diff --git a/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs b/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs index e00af70f5..7ca367106 100644 --- a/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs @@ -100,7 +100,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone StreamReader reader = new(binaryListFile.Get.AsStream()); - List locationNameList = new(); + List locationNameList = []; string locationName; while ((locationName = reader.ReadLine()) != null) @@ -112,7 +112,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone } else { - LocationNameCache = new[] { "UTC" }; + LocationNameCache = ["UTC"]; Logger.Error?.Print(LogClass.ServiceTime, TimeZoneSystemTitleMissingErrorMessage); } @@ -124,10 +124,10 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone if (string.IsNullOrEmpty(tzBinaryContentPath)) { - return new[] { (0, "UTC", "UTC") }; + return [(0, "UTC", "UTC")]; } - List<(int Offset, string Location, string Abbr)> outList = new(); + List<(int Offset, string Location, string Abbr)> outList = []; long now = DateTimeOffset.Now.ToUnixTimeSeconds(); using (IStorage ncaStorage = new LocalStorage(VirtualFileSystem.SwitchPathToSystemPath(tzBinaryContentPath), FileAccess.Read, FileMode.Open)) using (IFileSystem romfs = new Nca(_virtualFileSystem.KeySet, ncaStorage).OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel)) @@ -217,7 +217,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone public ResultCode LoadLocationNameList(uint index, out string[] outLocationNameArray, uint maxLength) { - List locationNameList = new(); + List locationNameList = []; for (int i = 0; i < LocationNameCache.Length && i < maxLength; i++) { @@ -231,7 +231,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone // If the location name is too long, error out. if (locationName.Length > 0x24) { - outLocationNameArray = Array.Empty(); + outLocationNameArray = []; return ResultCode.LocationNameTooLong; } diff --git a/src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs b/src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs index edb441a0a..9fe247e8a 100644 --- a/src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs +++ b/src/Ryujinx.HLE/HOS/Services/Vi/RootService/IApplicationDisplayService.cs @@ -34,7 +34,7 @@ namespace Ryujinx.HLE.HOS.Services.Vi.RootService public IApplicationDisplayService(ViServiceType serviceType) { _serviceType = serviceType; - _displayInfo = new List(); + _displayInfo = []; _openDisplays = new Dictionary(); void AddDisplayInfo(string name, bool layerLimitEnabled, ulong layerLimitMax, ulong width, ulong height) diff --git a/src/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs b/src/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs index c650fe036..91277232c 100644 --- a/src/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs +++ b/src/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs @@ -4,7 +4,8 @@ namespace Ryujinx.HLE.HOS.SystemState { public class SystemStateMgr { - internal static string[] LanguageCodes = { + internal static string[] LanguageCodes = + [ "ja", "en-US", "fr", @@ -22,8 +23,8 @@ namespace Ryujinx.HLE.HOS.SystemState "es-419", "zh-Hans", "zh-Hant", - "pt-BR", - }; + "pt-BR" + ]; internal long DesiredKeyboardLayout { get; private set; } diff --git a/src/Ryujinx.HLE/HOS/Tamper/AtmosphereCompiler.cs b/src/Ryujinx.HLE/HOS/Tamper/AtmosphereCompiler.cs index e25ba7a55..c5b228fc8 100644 --- a/src/Ryujinx.HLE/HOS/Tamper/AtmosphereCompiler.cs +++ b/src/Ryujinx.HLE/HOS/Tamper/AtmosphereCompiler.cs @@ -26,12 +26,13 @@ namespace Ryujinx.HLE.HOS.Tamper public ITamperProgram Compile(string name, IEnumerable rawInstructions) { - string[] addresses = { + string[] addresses = + [ $" Executable address: 0x{_exeAddress:X16}", $" Heap address : 0x{_heapAddress:X16}", $" Alias address : 0x{_aliasAddress:X16}", - $" Aslr address : 0x{_aslrAddress:X16}", - }; + $" Aslr address : 0x{_aslrAddress:X16}" + ]; Logger.Debug?.Print(LogClass.TamperMachine, $"Compiling Atmosphere cheat {name}...\n{string.Join('\n', addresses)}"); diff --git a/src/Ryujinx.HLE/HOS/Tamper/CodeEmitters/Arithmetic.cs b/src/Ryujinx.HLE/HOS/Tamper/CodeEmitters/Arithmetic.cs index 5b296def0..ce1b91cec 100644 --- a/src/Ryujinx.HLE/HOS/Tamper/CodeEmitters/Arithmetic.cs +++ b/src/Ryujinx.HLE/HOS/Tamper/CodeEmitters/Arithmetic.cs @@ -73,11 +73,11 @@ namespace Ryujinx.HLE.HOS.Tamper.CodeEmitters void Emit(Type operationType, IOperand rhs = null) { - List operandList = new() - { + List operandList = + [ destinationRegister, - leftHandSideRegister, - }; + leftHandSideRegister + ]; if (rhs != null) { diff --git a/src/Ryujinx.HLE/HOS/Tamper/OperationBlock.cs b/src/Ryujinx.HLE/HOS/Tamper/OperationBlock.cs index 5a0bccc5d..1e856294a 100644 --- a/src/Ryujinx.HLE/HOS/Tamper/OperationBlock.cs +++ b/src/Ryujinx.HLE/HOS/Tamper/OperationBlock.cs @@ -11,7 +11,7 @@ namespace Ryujinx.HLE.HOS.Tamper public OperationBlock(byte[] baseInstruction) { BaseInstruction = baseInstruction; - Operations = new List(); + Operations = []; } } } diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessConst.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessConst.cs index 778f9ce68..6fc6ece0a 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessConst.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessConst.cs @@ -4,7 +4,7 @@ namespace Ryujinx.HLE.Loaders.Processes { // Binaries from exefs are loaded into mem in this order. Do not change. public static readonly string[] ExeFsPrefixes = - { + [ "rtld", "main", "subsdk0", @@ -17,8 +17,8 @@ namespace Ryujinx.HLE.Loaders.Processes "subsdk7", "subsdk8", "subsdk9", - "sdk", - }; + "sdk" + ]; public const string MainNpdmPath = "/main.npdm"; -- 2.47.1 From 9f3eac7f260640ff6038b1387fe7d86d8a72c05e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:43:27 -0600 Subject: [PATCH 469/722] misc: chore: Use collection expressions in Horizon project --- src/Ryujinx.Horizon/HeapAllocator.cs | 2 +- src/Ryujinx.Horizon/MmNv/Ipc/Request.cs | 2 +- src/Ryujinx.Horizon/Sdk/Arp/ArpApi.cs | 4 +- .../Friends/Detail/Ipc/NotificationService.cs | 2 +- .../Sdk/Ngc/Detail/EmbeddedTries.cs | 8 +- .../Sdk/Ngc/Detail/MatchRangeList.cs | 2 +- .../Sdk/Ngc/Detail/ProfanityFilterBase.cs | 165 +++++++++--------- .../Sdk/Ngc/Detail/Utf8Text.cs | 4 +- .../Sdk/OsTypes/Impl/MultiWaitImpl.cs | 2 +- src/Ryujinx.Horizon/Sdk/OsTypes/OsEvent.cs | 2 +- .../Sdk/Settings/LanguageCode.cs | 6 +- .../Sdk/Sf/Cmif/ServerDomainManager.cs | 6 +- .../Sdk/Sf/Hipc/ServerManager.cs | 4 +- src/Ryujinx.Horizon/ServiceTable.cs | 2 +- 14 files changed, 106 insertions(+), 105 deletions(-) diff --git a/src/Ryujinx.Horizon/HeapAllocator.cs b/src/Ryujinx.Horizon/HeapAllocator.cs index 764f00a2f..522387631 100644 --- a/src/Ryujinx.Horizon/HeapAllocator.cs +++ b/src/Ryujinx.Horizon/HeapAllocator.cs @@ -31,7 +31,7 @@ namespace Ryujinx.Horizon public HeapAllocator() { - _freeRanges = new List(); + _freeRanges = []; _currentHeapSize = 0; } diff --git a/src/Ryujinx.Horizon/MmNv/Ipc/Request.cs b/src/Ryujinx.Horizon/MmNv/Ipc/Request.cs index c53ca1866..a3b4e0f83 100644 --- a/src/Ryujinx.Horizon/MmNv/Ipc/Request.cs +++ b/src/Ryujinx.Horizon/MmNv/Ipc/Request.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Horizon.MmNv.Ipc { partial class Request : IRequest { - private readonly List _sessionList = new(); + private readonly List _sessionList = []; private uint _uniqueId = 1; diff --git a/src/Ryujinx.Horizon/Sdk/Arp/ArpApi.cs b/src/Ryujinx.Horizon/Sdk/Arp/ArpApi.cs index 496de62ff..d8a79cbc8 100644 --- a/src/Ryujinx.Horizon/Sdk/Arp/ArpApi.cs +++ b/src/Ryujinx.Horizon/Sdk/Arp/ArpApi.cs @@ -100,8 +100,8 @@ namespace Ryujinx.Horizon.Sdk.Arp 1, sendPid: false, data, - stackalloc[] { HipcBufferFlags.Out | HipcBufferFlags.MapAlias | HipcBufferFlags.FixedSize }, - stackalloc[] { new PointerAndSize(bufferAddress, bufferSize) }); + [HipcBufferFlags.Out | HipcBufferFlags.MapAlias | HipcBufferFlags.FixedSize], + [new PointerAndSize(bufferAddress, bufferSize)]); if (result.IsFailure) { diff --git a/src/Ryujinx.Horizon/Sdk/Friends/Detail/Ipc/NotificationService.cs b/src/Ryujinx.Horizon/Sdk/Friends/Detail/Ipc/NotificationService.cs index 585b40df3..d9ad40c94 100644 --- a/src/Ryujinx.Horizon/Sdk/Friends/Detail/Ipc/NotificationService.cs +++ b/src/Ryujinx.Horizon/Sdk/Friends/Detail/Ipc/NotificationService.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Horizon.Sdk.Friends.Detail.Ipc _notificationEventHandler = notificationEventHandler; _userId = userId; _permissionLevel = permissionLevel; - _notifications = new LinkedList(); + _notifications = []; Os.CreateSystemEvent(out _notificationEvent, EventClearMode.AutoClear, interProcess: true).AbortOnFailure(); _hasNewFriendRequest = false; diff --git a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/EmbeddedTries.cs b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/EmbeddedTries.cs index 37ee43fa3..4f987cca8 100644 --- a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/EmbeddedTries.cs +++ b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/EmbeddedTries.cs @@ -4,8 +4,8 @@ namespace Ryujinx.Horizon.Sdk.Ngc.Detail { static class EmbeddedTries { - public static ReadOnlySpan NotSeparatorTrie => new byte[] - { + public static ReadOnlySpan NotSeparatorTrie => + [ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, @@ -260,7 +260,7 @@ namespace Ryujinx.Horizon.Sdk.Ngc.Detail 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, - 0x0C, 0x0E, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x00, 0x02, 0x04, 0x06, 0x08, - }; + 0x0C, 0x0E, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x00, 0x02, 0x04, 0x06, 0x08 + ]; } } diff --git a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/MatchRangeList.cs b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/MatchRangeList.cs index 91600f981..23e4997db 100644 --- a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/MatchRangeList.cs +++ b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/MatchRangeList.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Horizon.Sdk.Ngc.Detail { _capacity = 0; _count = 0; - _ranges = Array.Empty(); + _ranges = []; } public void Add(int startOffset, int endOffset) diff --git a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/ProfanityFilterBase.cs b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/ProfanityFilterBase.cs index acfdd9041..9f3c6b449 100644 --- a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/ProfanityFilterBase.cs +++ b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/ProfanityFilterBase.cs @@ -9,88 +9,89 @@ namespace Ryujinx.Horizon.Sdk.Ngc.Detail abstract class ProfanityFilterBase { #pragma warning disable IDE0230 // Use UTF-8 string literal - private static readonly byte[][] _wordSeparators = { - new byte[] { 0x0D }, - new byte[] { 0x0A }, - new byte[] { 0xC2, 0x85 }, - new byte[] { 0xE2, 0x80, 0xA8 }, - new byte[] { 0xE2, 0x80, 0xA9 }, - new byte[] { 0x09 }, - new byte[] { 0x0B }, - new byte[] { 0x0C }, - new byte[] { 0x20 }, - new byte[] { 0xEF, 0xBD, 0xA1 }, - new byte[] { 0xEF, 0xBD, 0xA4 }, - new byte[] { 0x2E }, - new byte[] { 0x2C }, - new byte[] { 0x5B }, - new byte[] { 0x21 }, - new byte[] { 0x22 }, - new byte[] { 0x23 }, - new byte[] { 0x24 }, - new byte[] { 0x25 }, - new byte[] { 0x26 }, - new byte[] { 0x27 }, - new byte[] { 0x28 }, - new byte[] { 0x29 }, - new byte[] { 0x2A }, - new byte[] { 0x2B }, - new byte[] { 0x2F }, - new byte[] { 0x3A }, - new byte[] { 0x3B }, - new byte[] { 0x3C }, - new byte[] { 0x3D }, - new byte[] { 0x3E }, - new byte[] { 0x3F }, - new byte[] { 0x5C }, - new byte[] { 0x40 }, - new byte[] { 0x5E }, - new byte[] { 0x5F }, - new byte[] { 0x60 }, - new byte[] { 0x7B }, - new byte[] { 0x7C }, - new byte[] { 0x7D }, - new byte[] { 0x7E }, - new byte[] { 0x2D }, - new byte[] { 0x5D }, - new byte[] { 0xE3, 0x80, 0x80 }, - new byte[] { 0xE3, 0x80, 0x82 }, - new byte[] { 0xE3, 0x80, 0x81 }, - new byte[] { 0xEF, 0xBC, 0x8E }, - new byte[] { 0xEF, 0xBC, 0x8C }, - new byte[] { 0xEF, 0xBC, 0xBB }, - new byte[] { 0xEF, 0xBC, 0x81 }, - new byte[] { 0xE2, 0x80, 0x9C }, - new byte[] { 0xE2, 0x80, 0x9D }, - new byte[] { 0xEF, 0xBC, 0x83 }, - new byte[] { 0xEF, 0xBC, 0x84 }, - new byte[] { 0xEF, 0xBC, 0x85 }, - new byte[] { 0xEF, 0xBC, 0x86 }, - new byte[] { 0xE2, 0x80, 0x98 }, - new byte[] { 0xE2, 0x80, 0x99 }, - new byte[] { 0xEF, 0xBC, 0x88 }, - new byte[] { 0xEF, 0xBC, 0x89 }, - new byte[] { 0xEF, 0xBC, 0x8A }, - new byte[] { 0xEF, 0xBC, 0x8B }, - new byte[] { 0xEF, 0xBC, 0x8F }, - new byte[] { 0xEF, 0xBC, 0x9A }, - new byte[] { 0xEF, 0xBC, 0x9B }, - new byte[] { 0xEF, 0xBC, 0x9C }, - new byte[] { 0xEF, 0xBC, 0x9D }, - new byte[] { 0xEF, 0xBC, 0x9E }, - new byte[] { 0xEF, 0xBC, 0x9F }, - new byte[] { 0xEF, 0xBC, 0xA0 }, - new byte[] { 0xEF, 0xBF, 0xA5 }, - new byte[] { 0xEF, 0xBC, 0xBE }, - new byte[] { 0xEF, 0xBC, 0xBF }, - new byte[] { 0xEF, 0xBD, 0x80 }, - new byte[] { 0xEF, 0xBD, 0x9B }, - new byte[] { 0xEF, 0xBD, 0x9C }, - new byte[] { 0xEF, 0xBD, 0x9D }, - new byte[] { 0xEF, 0xBD, 0x9E }, - new byte[] { 0xEF, 0xBC, 0x8D }, - new byte[] { 0xEF, 0xBC, 0xBD }, - }; + private static readonly byte[][] _wordSeparators = + [ + [0x0D], + [0x0A], + [0xC2, 0x85], + [0xE2, 0x80, 0xA8], + [0xE2, 0x80, 0xA9], + [0x09], + [0x0B], + [0x0C], + [0x20], + [0xEF, 0xBD, 0xA1], + [0xEF, 0xBD, 0xA4], + [0x2E], + [0x2C], + [0x5B], + [0x21], + [0x22], + [0x23], + [0x24], + [0x25], + [0x26], + [0x27], + [0x28], + [0x29], + [0x2A], + [0x2B], + [0x2F], + [0x3A], + [0x3B], + [0x3C], + [0x3D], + [0x3E], + [0x3F], + [0x5C], + [0x40], + [0x5E], + [0x5F], + [0x60], + [0x7B], + [0x7C], + [0x7D], + [0x7E], + [0x2D], + [0x5D], + [0xE3, 0x80, 0x80], + [0xE3, 0x80, 0x82], + [0xE3, 0x80, 0x81], + [0xEF, 0xBC, 0x8E], + [0xEF, 0xBC, 0x8C], + [0xEF, 0xBC, 0xBB], + [0xEF, 0xBC, 0x81], + [0xE2, 0x80, 0x9C], + [0xE2, 0x80, 0x9D], + [0xEF, 0xBC, 0x83], + [0xEF, 0xBC, 0x84], + [0xEF, 0xBC, 0x85], + [0xEF, 0xBC, 0x86], + [0xE2, 0x80, 0x98], + [0xE2, 0x80, 0x99], + [0xEF, 0xBC, 0x88], + [0xEF, 0xBC, 0x89], + [0xEF, 0xBC, 0x8A], + [0xEF, 0xBC, 0x8B], + [0xEF, 0xBC, 0x8F], + [0xEF, 0xBC, 0x9A], + [0xEF, 0xBC, 0x9B], + [0xEF, 0xBC, 0x9C], + [0xEF, 0xBC, 0x9D], + [0xEF, 0xBC, 0x9E], + [0xEF, 0xBC, 0x9F], + [0xEF, 0xBC, 0xA0], + [0xEF, 0xBF, 0xA5], + [0xEF, 0xBC, 0xBE], + [0xEF, 0xBC, 0xBF], + [0xEF, 0xBD, 0x80], + [0xEF, 0xBD, 0x9B], + [0xEF, 0xBD, 0x9C], + [0xEF, 0xBD, 0x9D], + [0xEF, 0xBD, 0x9E], + [0xEF, 0xBC, 0x8D], + [0xEF, 0xBC, 0xBD] + ]; #pragma warning restore IDE0230 private enum SignFilterStep diff --git a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/Utf8Text.cs b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/Utf8Text.cs index 34978fdce..458d0a87b 100644 --- a/src/Ryujinx.Horizon/Sdk/Ngc/Detail/Utf8Text.cs +++ b/src/Ryujinx.Horizon/Sdk/Ngc/Detail/Utf8Text.cs @@ -12,8 +12,8 @@ namespace Ryujinx.Horizon.Sdk.Ngc.Detail public Utf8Text() { - _text = Array.Empty(); - _charOffsets = Array.Empty(); + _text = []; + _charOffsets = []; } public Utf8Text(byte[] text) diff --git a/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs b/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs index 879a3a58f..2fbcfdc88 100644 --- a/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs +++ b/src/Ryujinx.Horizon/Sdk/OsTypes/Impl/MultiWaitImpl.cs @@ -26,7 +26,7 @@ namespace Ryujinx.Horizon.Sdk.OsTypes.Impl public MultiWaitImpl() { - _multiWaits = new List(); + _multiWaits = []; } public void LinkMultiWaitHolder(MultiWaitHolderBase multiWaitHolder) diff --git a/src/Ryujinx.Horizon/Sdk/OsTypes/OsEvent.cs b/src/Ryujinx.Horizon/Sdk/OsTypes/OsEvent.cs index 8efe614f2..422f756e4 100644 --- a/src/Ryujinx.Horizon/Sdk/OsTypes/OsEvent.cs +++ b/src/Ryujinx.Horizon/Sdk/OsTypes/OsEvent.cs @@ -10,7 +10,7 @@ namespace Ryujinx.Horizon.Sdk.OsTypes { evnt = new EventType { - MultiWaitHolders = new LinkedList(), + MultiWaitHolders = [], Signaled = signaled, InitiallySignaled = signaled, ClearMode = clearMode, diff --git a/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs b/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs index dc9712692..384dac755 100644 --- a/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs +++ b/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs @@ -8,8 +8,8 @@ namespace Ryujinx.Horizon.Sdk.Settings [StructLayout(LayoutKind.Sequential, Size = 0x8, Pack = 0x1)] struct LanguageCode { - private static readonly string[] _languageCodes = new string[] - { + private static readonly string[] _languageCodes = + [ "ja", "en-US", "fr", @@ -28,7 +28,7 @@ namespace Ryujinx.Horizon.Sdk.Settings "zh-Hans", "zh-Hant", "pt-BR" - }; + ]; public Array8 Value; diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs index 631f2360a..cdb493a0e 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Cmif/ServerDomainManager.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif public EntryManager(int count) { - _freeList = new LinkedList(); + _freeList = []; _entries = new Entry[count]; for (int i = 0; i < count; i++) @@ -87,7 +87,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif public Domain(ServerDomainManager manager) { _manager = manager; - _entries = new LinkedList(); + _entries = []; } public override ServiceObjectHolder GetObject(int id) @@ -217,7 +217,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Cmif public ServerDomainManager(int entryCount, int maxDomains) { _entryManager = new EntryManager(entryCount); - _domains = new HashSet(); + _domains = []; _maxDomains = maxDomains; } diff --git a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManager.cs b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManager.cs index 6aa32faee..df121164f 100644 --- a/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManager.cs +++ b/src/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManager.cs @@ -44,8 +44,8 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc } _sessionAllocationBitmap = new ulong[(maxSessions + 63) / 64]; - _sessions = new HashSet(); - _servers = new HashSet(); + _sessions = []; + _servers = []; } private static PointerAndSize GetObjectBySessionIndex(ServerSession session, ulong baseAddress, ulong size) diff --git a/src/Ryujinx.Horizon/ServiceTable.cs b/src/Ryujinx.Horizon/ServiceTable.cs index 28c43a716..db24c193d 100644 --- a/src/Ryujinx.Horizon/ServiceTable.cs +++ b/src/Ryujinx.Horizon/ServiceTable.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Horizon public IEnumerable GetServices(HorizonOptions options) { - List entries = new(); + List entries = []; void RegisterService() where T : IService { -- 2.47.1 From 45125c16cfbf716b8b7d19ae035963baec03d131 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:43:58 -0600 Subject: [PATCH 470/722] misc: chore: Use collection expressions in Input projects --- src/Ryujinx.Input.SDL2/SDL2Gamepad.cs | 16 ++++++++-------- src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs | 2 +- src/Ryujinx.Input.SDL2/SDL2Keyboard.cs | 10 +++++----- src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs | 2 +- src/Ryujinx.Input/HLE/NpadController.cs | 21 ++++++++++++--------- src/Ryujinx.Input/HLE/NpadManager.cs | 8 ++++---- 6 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs index 7d40bac66..a473d7042 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs @@ -23,8 +23,8 @@ namespace Ryujinx.Input.SDL2 private StandardControllerInputConfig _configuration; - private static readonly SDL_GameControllerButton[] _buttonsDriverMapping = new SDL_GameControllerButton[(int)GamepadButtonInputId.Count] - { + private static readonly SDL_GameControllerButton[] _buttonsDriverMapping = + [ // Unbound, ignored. SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_INVALID, @@ -59,19 +59,19 @@ namespace Ryujinx.Input.SDL2 SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_INVALID, SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_INVALID, SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_INVALID, - SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_INVALID, - }; + SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_INVALID + ]; private readonly Lock _userMappingLock = new(); private readonly List _buttonsUserMapping; - private readonly StickInputId[] _stickUserMapping = new StickInputId[(int)StickInputId.Count] - { + private readonly StickInputId[] _stickUserMapping = + [ StickInputId.Unbound, StickInputId.Left, - StickInputId.Right, - }; + StickInputId.Right + ]; public GamepadFeaturesFlag Features { get; } diff --git a/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs b/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs index 251f53cba..67c68d8ec 100644 --- a/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs +++ b/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs @@ -31,7 +31,7 @@ namespace Ryujinx.Input.SDL2 public SDL2GamepadDriver() { _gamepadsInstanceIdsMapping = new Dictionary(); - _gamepadsIds = new List(); + _gamepadsIds = []; SDL2Driver.Instance.Initialize(); SDL2Driver.Instance.OnJoyStickConnected += HandleJoyStickConnected; diff --git a/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs b/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs index 270af5114..6f4f839a5 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs @@ -27,8 +27,8 @@ namespace Ryujinx.Input.SDL2 private StandardKeyboardInputConfig _configuration; private readonly List _buttonsUserMapping; - private static readonly SDL_Keycode[] _keysDriverMapping = new SDL_Keycode[(int)Key.Count] - { + private static readonly SDL_Keycode[] _keysDriverMapping = + [ // INVALID SDL_Keycode.SDLK_0, // Presented as modifiers, so invalid here. @@ -166,15 +166,15 @@ namespace Ryujinx.Input.SDL2 SDL_Keycode.SDLK_BACKSLASH, // Invalids - SDL_Keycode.SDLK_0, - }; + SDL_Keycode.SDLK_0 + ]; public SDL2Keyboard(SDL2KeyboardDriver driver, string id, string name) { _driver = driver; Id = id; Name = name; - _buttonsUserMapping = new List(); + _buttonsUserMapping = []; } private bool HasConfiguration => _configuration != null; diff --git a/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs b/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs index fef6de788..25c6f4fe6 100644 --- a/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs +++ b/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs @@ -13,7 +13,7 @@ namespace Ryujinx.Input.SDL2 public string DriverName => "SDL2"; - private static readonly string[] _keyboardIdentifers = new string[1] { "0" }; + private static readonly string[] _keyboardIdentifers = ["0"]; public ReadOnlySpan GamepadsIds => _keyboardIdentifers; diff --git a/src/Ryujinx.Input/HLE/NpadController.cs b/src/Ryujinx.Input/HLE/NpadController.cs index 357299fdd..b77ae5662 100644 --- a/src/Ryujinx.Input/HLE/NpadController.cs +++ b/src/Ryujinx.Input/HLE/NpadController.cs @@ -27,7 +27,8 @@ namespace Ryujinx.Input.HLE } } - private static readonly HLEButtonMappingEntry[] _hleButtonMapping = { + private static readonly HLEButtonMappingEntry[] _hleButtonMapping = + [ new(GamepadButtonInputId.A, ControllerKeys.A), new(GamepadButtonInputId.B, ControllerKeys.B), new(GamepadButtonInputId.X, ControllerKeys.X), @@ -48,8 +49,8 @@ namespace Ryujinx.Input.HLE new(GamepadButtonInputId.SingleLeftTrigger0, ControllerKeys.SlLeft), new(GamepadButtonInputId.SingleRightTrigger0, ControllerKeys.SrLeft), new(GamepadButtonInputId.SingleLeftTrigger1, ControllerKeys.SlRight), - new(GamepadButtonInputId.SingleRightTrigger1, ControllerKeys.SrRight), - }; + new(GamepadButtonInputId.SingleRightTrigger1, ControllerKeys.SrRight) + ]; private class HLEKeyboardMappingEntry { @@ -63,7 +64,8 @@ namespace Ryujinx.Input.HLE } } - private static readonly HLEKeyboardMappingEntry[] _keyMapping = { + private static readonly HLEKeyboardMappingEntry[] _keyMapping = + [ new(Key.A, 0x4), new(Key.B, 0x5), new(Key.C, 0x6), @@ -186,10 +188,11 @@ namespace Ryujinx.Input.HLE new(Key.ControlRight, 0xE4), new(Key.ShiftRight, 0xE5), new(Key.AltRight, 0xE6), - new(Key.WinRight, 0xE7), - }; + new(Key.WinRight, 0xE7) + ]; - private static readonly HLEKeyboardMappingEntry[] _keyModifierMapping = { + private static readonly HLEKeyboardMappingEntry[] _keyModifierMapping = + [ new(Key.ControlLeft, 0), new(Key.ShiftLeft, 1), new(Key.AltLeft, 2), @@ -200,8 +203,8 @@ namespace Ryujinx.Input.HLE new(Key.WinRight, 7), new(Key.CapsLock, 8), new(Key.ScrollLock, 9), - new(Key.NumLock, 10), - }; + new(Key.NumLock, 10) + ]; private MotionInput _leftMotionInput; private MotionInput _rightMotionInput; diff --git a/src/Ryujinx.Input/HLE/NpadManager.cs b/src/Ryujinx.Input/HLE/NpadManager.cs index 0b3278be5..4a54b7ead 100644 --- a/src/Ryujinx.Input/HLE/NpadManager.cs +++ b/src/Ryujinx.Input/HLE/NpadManager.cs @@ -46,7 +46,7 @@ namespace Ryujinx.Input.HLE _keyboardDriver = keyboardDriver; _gamepadDriver = gamepadDriver; _mouseDriver = mouseDriver; - _inputConfig = new List(); + _inputConfig = []; _gamepadDriver.OnGamepadConnected += HandleOnGamepadConnected; _gamepadDriver.OnGamepadDisconnected += HandleOnGamepadDisconnected; @@ -56,7 +56,7 @@ namespace Ryujinx.Input.HLE { lock (_lock) { - List validInputs = new(); + List validInputs = []; foreach (InputConfig inputConfigEntry in _inputConfig) { if (_controllers[(int)inputConfigEntry.PlayerIndex] != null) @@ -124,7 +124,7 @@ namespace Ryujinx.Input.HLE { NpadController[] oldControllers = _controllers.ToArray(); - List validInputs = new(); + List validInputs = []; foreach (InputConfig inputConfigEntry in inputConfig) { @@ -205,7 +205,7 @@ namespace Ryujinx.Input.HLE { lock (_lock) { - List hleInputStates = new(); + List hleInputStates = []; List hleMotionStates = new(NpadDevices.MaxControllers); KeyboardInput? hleKeyboardInput = null; -- 2.47.1 From 2853f5b42673c228d8ca3c9836982d07df3fd3e1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:45:43 -0600 Subject: [PATCH 471/722] misc: chore: Use collection expressions in Generator projects --- .../Hipc/CommandInterface.cs | 2 +- .../Hipc/HipcGenerator.cs | 2 +- .../Hipc/HipcSyntaxReceiver.cs | 2 +- .../SyscallGenerator.cs | 14 ++++++------ .../SyscallSyntaxReceiver.cs | 2 +- src/Spv.Generator/Instruction.cs | 8 +++---- src/Spv.Generator/InstructionOperands.cs | 2 +- src/Spv.Generator/Module.cs | 22 +++++++++---------- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/Ryujinx.Horizon.Generators/Hipc/CommandInterface.cs b/src/Ryujinx.Horizon.Generators/Hipc/CommandInterface.cs index 2dcdfe5a2..8ed9669ba 100644 --- a/src/Ryujinx.Horizon.Generators/Hipc/CommandInterface.cs +++ b/src/Ryujinx.Horizon.Generators/Hipc/CommandInterface.cs @@ -11,7 +11,7 @@ namespace Ryujinx.Horizon.Generators.Hipc public CommandInterface(ClassDeclarationSyntax classDeclarationSyntax) { ClassDeclarationSyntax = classDeclarationSyntax; - CommandImplementations = new List(); + CommandImplementations = []; } } } diff --git a/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs b/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs index 54ac9ccdd..b68e05681 100644 --- a/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs +++ b/src/Ryujinx.Horizon.Generators/Hipc/HipcGenerator.cs @@ -257,7 +257,7 @@ namespace Ryujinx.Horizon.Generators.Hipc generator.AppendLine(); } - List outParameters = new(); + List outParameters = []; string[] args = new string[method.ParameterList.Parameters.Count]; diff --git a/src/Ryujinx.Horizon.Generators/Hipc/HipcSyntaxReceiver.cs b/src/Ryujinx.Horizon.Generators/Hipc/HipcSyntaxReceiver.cs index 5eced63ec..858b4a2a5 100644 --- a/src/Ryujinx.Horizon.Generators/Hipc/HipcSyntaxReceiver.cs +++ b/src/Ryujinx.Horizon.Generators/Hipc/HipcSyntaxReceiver.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Horizon.Generators.Hipc public HipcSyntaxReceiver() { - CommandInterfaces = new List(); + CommandInterfaces = []; } public void OnVisitSyntaxNode(SyntaxNode syntaxNode) diff --git a/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs b/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs index 5a81d8d80..b4063eda2 100644 --- a/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs +++ b/src/Ryujinx.Horizon.Kernel.Generators/SyscallGenerator.cs @@ -145,7 +145,7 @@ namespace Ryujinx.Horizon.Kernel.Generators GenerateResultCheckHelper(generator); generator.AppendLine(); - List syscalls = new(); + List syscalls = []; foreach (MethodDeclarationSyntax method in syntaxReceiver.SvcImplementations) { @@ -202,9 +202,9 @@ namespace Ryujinx.Horizon.Kernel.Generators RegisterAllocatorA32 regAlloc = new(); - List outParameters = new(); - List logInArgs = new(); - List logOutArgs = new(); + List outParameters = []; + List logInArgs = []; + List logOutArgs = []; foreach (ParameterSyntax methodParameter in method.ParameterList.Parameters) { @@ -321,9 +321,9 @@ namespace Ryujinx.Horizon.Kernel.Generators int registerIndex = 0; int index = 0; - List outParameters = new(); - List logInArgs = new(); - List logOutArgs = new(); + List outParameters = []; + List logInArgs = []; + List logOutArgs = []; foreach (ParameterSyntax methodParameter in method.ParameterList.Parameters) { diff --git a/src/Ryujinx.Horizon.Kernel.Generators/SyscallSyntaxReceiver.cs b/src/Ryujinx.Horizon.Kernel.Generators/SyscallSyntaxReceiver.cs index 76200713d..abeea4020 100644 --- a/src/Ryujinx.Horizon.Kernel.Generators/SyscallSyntaxReceiver.cs +++ b/src/Ryujinx.Horizon.Kernel.Generators/SyscallSyntaxReceiver.cs @@ -11,7 +11,7 @@ namespace Ryujinx.Horizon.Kernel.Generators public SyscallSyntaxReceiver() { - SvcImplementations = new List(); + SvcImplementations = []; } public void OnVisitSyntaxNode(SyntaxNode syntaxNode) diff --git a/src/Spv.Generator/Instruction.cs b/src/Spv.Generator/Instruction.cs index a19677a93..49c9c2d90 100644 --- a/src/Spv.Generator/Instruction.cs +++ b/src/Spv.Generator/Instruction.cs @@ -232,14 +232,14 @@ namespace Spv.Generator private static readonly Dictionary _operandLabels = new() { - { Specification.Op.OpConstant, new [] { "Value" } }, - { Specification.Op.OpTypeInt, new [] { "Width", "Signed" } }, - { Specification.Op.OpTypeFloat, new [] { "Width" } }, + { Specification.Op.OpConstant, ["Value"] }, + { Specification.Op.OpTypeInt, ["Width", "Signed"] }, + { Specification.Op.OpTypeFloat, ["Width"] }, }; public override string ToString() { - string[] labels = _operandLabels.TryGetValue(Opcode, out string[] opLabels) ? opLabels : Array.Empty(); + string[] labels = _operandLabels.TryGetValue(Opcode, out string[] opLabels) ? opLabels : []; string result = _resultType == null ? string.Empty : $"{_resultType} "; return $"{result}{Opcode}{_operands.ToString(labels)}"; } diff --git a/src/Spv.Generator/InstructionOperands.cs b/src/Spv.Generator/InstructionOperands.cs index 06feb300f..38c2b1f2c 100644 --- a/src/Spv.Generator/InstructionOperands.cs +++ b/src/Spv.Generator/InstructionOperands.cs @@ -53,7 +53,7 @@ namespace Spv.Generator } private readonly IEnumerable AllOperands => new[] { Operand1, Operand2, Operand3, Operand4, Operand5 } - .Concat(Overflow ?? Array.Empty()) + .Concat(Overflow ?? []) .Take(Count); public readonly override string ToString() diff --git a/src/Spv.Generator/Module.cs b/src/Spv.Generator/Module.cs index 951494619..cb63633be 100644 --- a/src/Spv.Generator/Module.cs +++ b/src/Spv.Generator/Module.cs @@ -46,21 +46,21 @@ namespace Spv.Generator { _version = version; _bound = 1; - _capabilities = new List(); - _extensions = new List(); + _capabilities = []; + _extensions = []; _extInstImports = new Dictionary(); _addressingModel = AddressingModel.Logical; _memoryModel = MemoryModel.Simple; - _entrypoints = new List(); - _executionModes = new List(); - _debug = new List(); - _annotations = new List(); + _entrypoints = []; + _executionModes = []; + _debug = []; + _annotations = []; _typeDeclarations = new Dictionary(); - _typeDeclarationsList = new List(); + _typeDeclarationsList = []; _constants = new Dictionary(); - _globals = new List(); - _functionsDeclarations = new List(); - _functionsDefinitions = new List(); + _globals = []; + _functionsDeclarations = []; + _functionsDefinitions = []; _instPool = instPool ?? new GeneratorPool(); _integerPool = integerPool ?? new GeneratorPool(); @@ -333,7 +333,7 @@ namespace Spv.Generator } // Ensure that everything is in the right order in the declarations section. - List declarations = new(); + List declarations = []; declarations.AddRange(_typeDeclarationsList); declarations.AddRange(_globals); declarations.AddRange(_constants.Values); -- 2.47.1 From 46a5cafaa8e428c0417489f37941e62c50f0c941 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:46:58 -0600 Subject: [PATCH 472/722] misc: chore: Use collection expressions in Memory project --- src/Ryujinx.Memory/Range/MultiRangeList.cs | 2 +- src/Ryujinx.Memory/SparseMemoryBlock.cs | 2 +- src/Ryujinx.Memory/Tracking/MemoryTracking.cs | 6 +++--- src/Ryujinx.Memory/Tracking/VirtualRegion.cs | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx.Memory/Range/MultiRangeList.cs b/src/Ryujinx.Memory/Range/MultiRangeList.cs index 3ca26c892..2204033d9 100644 --- a/src/Ryujinx.Memory/Range/MultiRangeList.cs +++ b/src/Ryujinx.Memory/Range/MultiRangeList.cs @@ -173,7 +173,7 @@ namespace Ryujinx.Memory.Range private List GetList() { List> items = _items.AsList(); - List result = new(); + List result = []; foreach (RangeNode item in items) { diff --git a/src/Ryujinx.Memory/SparseMemoryBlock.cs b/src/Ryujinx.Memory/SparseMemoryBlock.cs index 5717d7b64..7e46370d0 100644 --- a/src/Ryujinx.Memory/SparseMemoryBlock.cs +++ b/src/Ryujinx.Memory/SparseMemoryBlock.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Memory { _pageSize = MemoryBlock.GetPageSize(); _reservedBlock = new MemoryBlock(size, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible); - _mappedBlocks = new List(); + _mappedBlocks = []; _pageInit = pageInit; int pages = (int)BitUtils.DivRoundUp(size, _pageSize); diff --git a/src/Ryujinx.Memory/Tracking/MemoryTracking.cs b/src/Ryujinx.Memory/Tracking/MemoryTracking.cs index d60a3bd8f..e7791fec3 100644 --- a/src/Ryujinx.Memory/Tracking/MemoryTracking.cs +++ b/src/Ryujinx.Memory/Tracking/MemoryTracking.cs @@ -51,8 +51,8 @@ namespace Ryujinx.Memory.Tracking _invalidAccessHandler = invalidAccessHandler; _singleByteGuestTracking = singleByteGuestTracking; - _virtualRegions = new NonOverlappingRangeList(); - _guestVirtualRegions = new NonOverlappingRangeList(); + _virtualRegions = []; + _guestVirtualRegions = []; } private (ulong address, ulong size) PageAlign(ulong address, ulong size) @@ -165,7 +165,7 @@ namespace Ryujinx.Memory.Tracking /// A list of virtual regions within the given range internal List GetVirtualRegionsForHandle(ulong va, ulong size, bool guest) { - List result = new(); + List result = []; NonOverlappingRangeList regions = guest ? _guestVirtualRegions : _virtualRegions; regions.GetOrAddRegions(result, va, size, (va, size) => new VirtualRegion(this, va, size, guest)); diff --git a/src/Ryujinx.Memory/Tracking/VirtualRegion.cs b/src/Ryujinx.Memory/Tracking/VirtualRegion.cs index 7f5eb9b11..f9267d85b 100644 --- a/src/Ryujinx.Memory/Tracking/VirtualRegion.cs +++ b/src/Ryujinx.Memory/Tracking/VirtualRegion.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Memory.Tracking /// class VirtualRegion : AbstractRegion { - public List Handles = new(); + public List Handles = []; private readonly MemoryTracking _tracking; private MemoryPermission _lastPermission; -- 2.47.1 From ae90db2040eccef35cb77d18be03854cf991c862 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:47:11 -0600 Subject: [PATCH 473/722] misc: chore: Use collection expressions in Avalonia project --- src/Ryujinx/AppHost.cs | 8 +- src/Ryujinx/Input/AvaloniaKeyboardDriver.cs | 4 +- .../Input/AvaloniaKeyboardMappingHelper.cs | 7 +- .../Controls/ApplicationContextMenu.axaml.cs | 6 +- .../UI/Controls/NavigationDialogHost.axaml.cs | 2 +- src/Ryujinx/UI/Models/CheatNode.cs | 2 +- .../UI/ViewModels/AmiiboWindowViewModel.cs | 6 +- .../DownloadableContentManagerViewModel.cs | 12 +-- .../UI/ViewModels/Input/InputViewModel.cs | 12 +-- .../UI/ViewModels/MainWindowViewModel.cs | 86 +++++++++---------- .../UI/ViewModels/ModManagerViewModel.cs | 6 +- .../UI/ViewModels/SettingsViewModel.cs | 2 +- .../UI/ViewModels/TitleUpdateViewModel.cs | 10 +-- .../UserFirmwareAvatarSelectorViewModel.cs | 2 +- .../UI/ViewModels/UserProfileViewModel.cs | 4 +- .../UI/ViewModels/UserSaveManagerViewModel.cs | 4 +- .../UI/ViewModels/XCITrimmerViewModel.cs | 6 +- .../UserProfileImageSelectorView.axaml.cs | 6 +- .../Views/User/UserSaveManagerView.axaml.cs | 2 +- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 5 +- src/Ryujinx/Updater.cs | 2 +- .../AppLibrary/ApplicationLibrary.cs | 12 +-- src/Ryujinx/Utilities/CommandLineState.cs | 2 +- .../Utilities/DownloadableContentsHelper.cs | 4 +- src/Ryujinx/Utilities/ShortcutHelper.cs | 4 +- src/Ryujinx/Utilities/TitleUpdatesHelper.cs | 2 +- src/Ryujinx/Utilities/ValueFormatUtils.cs | 6 +- 28 files changed, 114 insertions(+), 112 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 61beda154..b85b17b89 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -975,13 +975,13 @@ namespace Ryujinx.Ava private static IHardwareDeviceDriver InitializeAudio() { - List availableBackends = new() - { + List availableBackends = + [ AudioBackend.SDL2, AudioBackend.SoundIo, AudioBackend.OpenAl, - AudioBackend.Dummy, - }; + AudioBackend.Dummy + ]; AudioBackend preferredBackend = ConfigurationState.Instance.System.AudioBackend.Value; diff --git a/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs b/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs index 581d1db8e..89b2c29ce 100644 --- a/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs +++ b/src/Ryujinx/Input/AvaloniaKeyboardDriver.cs @@ -11,7 +11,7 @@ namespace Ryujinx.Ava.Input { internal class AvaloniaKeyboardDriver : IGamepadDriver { - private static readonly string[] _keyboardIdentifers = new string[1] { "0" }; + private static readonly string[] _keyboardIdentifers = ["0"]; private readonly Control _control; private readonly HashSet _pressedKeys; @@ -25,7 +25,7 @@ namespace Ryujinx.Ava.Input public AvaloniaKeyboardDriver(Control control) { _control = control; - _pressedKeys = new HashSet(); + _pressedKeys = []; _control.KeyDown += OnKeyPress; _control.KeyUp += OnKeyRelease; diff --git a/src/Ryujinx/Input/AvaloniaKeyboardMappingHelper.cs b/src/Ryujinx/Input/AvaloniaKeyboardMappingHelper.cs index c3e653e5d..48e49a7fa 100644 --- a/src/Ryujinx/Input/AvaloniaKeyboardMappingHelper.cs +++ b/src/Ryujinx/Input/AvaloniaKeyboardMappingHelper.cs @@ -7,7 +7,8 @@ namespace Ryujinx.Ava.Input { internal static class AvaloniaKeyboardMappingHelper { - private static readonly AvaKey[] _keyMapping = { + private static readonly AvaKey[] _keyMapping = + [ // NOTE: Invalid AvaKey.None, @@ -143,8 +144,8 @@ namespace Ryujinx.Ava.Input AvaKey.OemBackslash, // NOTE: invalid - AvaKey.None, - }; + AvaKey.None + ]; private static readonly Dictionary _avaKeyMapping; diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index 13a1d3bf3..b98649a11 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -146,7 +146,7 @@ namespace Ryujinx.Ava.UI.Controls DirectoryInfo mainDir = new(Path.Combine(AppDataManager.GamesDirPath, viewModel.SelectedApplication.IdString, "cache", "cpu", "0")); DirectoryInfo backupDir = new(Path.Combine(AppDataManager.GamesDirPath, viewModel.SelectedApplication.IdString, "cache", "cpu", "1")); - List cacheFiles = new(); + List cacheFiles = []; if (mainDir.Exists) { @@ -189,8 +189,8 @@ namespace Ryujinx.Ava.UI.Controls { DirectoryInfo shaderCacheDir = new(Path.Combine(AppDataManager.GamesDirPath, viewModel.SelectedApplication.IdString, "cache", "shader")); - List oldCacheDirectories = new(); - List newCacheFiles = new(); + List oldCacheDirectories = []; + List newCacheFiles = []; if (shaderCacheDir.Exists) { diff --git a/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs b/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs index 44cd84433..fdfc588e2 100644 --- a/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs +++ b/src/Ryujinx/UI/Controls/NavigationDialogHost.axaml.cs @@ -114,7 +114,7 @@ namespace Ryujinx.Ava.UI.Controls Span saveDataInfo = stackalloc SaveDataInfo[10]; - HashSet lostAccounts = new(); + HashSet lostAccounts = []; while (true) { diff --git a/src/Ryujinx/UI/Models/CheatNode.cs b/src/Ryujinx/UI/Models/CheatNode.cs index cce0f1d97..4fc249e20 100644 --- a/src/Ryujinx/UI/Models/CheatNode.cs +++ b/src/Ryujinx/UI/Models/CheatNode.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Ava.UI.Models public class CheatNode : BaseModel { private bool _isEnabled = false; - public ObservableCollection SubNodes { get; } = new(); + public ObservableCollection SubNodes { get; } = []; public string CleanName => Name[1..^7]; public string BuildIdKey => $"{BuildId}-{Name}"; public bool IsRootNode { get; } diff --git a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs index afbc7882f..e8869c475 100644 --- a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs @@ -64,9 +64,9 @@ namespace Ryujinx.Ava.UI.ViewModels Directory.CreateDirectory(Path.Join(AppDataManager.BaseDirPath, "system", "amiibo")); _amiiboJsonPath = Path.Join(AppDataManager.BaseDirPath, "system", "amiibo", "Amiibo.json"); - _amiiboList = new List(); - _amiiboSeries = new ObservableCollection(); - _amiibos = new AvaloniaList(); + _amiiboList = []; + _amiiboSeries = []; + _amiibos = []; _amiiboLogoBytes = EmbeddedResources.Read("Ryujinx/Assets/UIImages/Logo_Amiibo.png"); diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index 169aeb41d..d1358e658 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -22,9 +22,9 @@ namespace Ryujinx.Ava.UI.ViewModels public partial class DownloadableContentManagerViewModel : BaseModel { private readonly ApplicationLibrary _applicationLibrary; - private AvaloniaList _downloadableContents = new(); - [ObservableProperty] private AvaloniaList _selectedDownloadableContents = new(); - [ObservableProperty] private AvaloniaList _views = new(); + private AvaloniaList _downloadableContents = []; + [ObservableProperty] private AvaloniaList _selectedDownloadableContents = []; + [ObservableProperty] private AvaloniaList _views = []; [ObservableProperty] private bool _showBundledContentNotice = false; private string _search; @@ -139,9 +139,9 @@ namespace Ryujinx.Ava.UI.ViewModels { new("NSP") { - Patterns = new[] { "*.nsp" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.nsp" }, - MimeTypes = new[] { "application/x-nx-nsp" }, + Patterns = ["*.nsp"], + AppleUniformTypeIdentifiers = ["com.ryujinx.nsp"], + MimeTypes = ["application/x-nx-nsp"], }, }, }); diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index cd0488f5f..83cead1ac 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -257,11 +257,11 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public InputViewModel() { - PlayerIndexes = new ObservableCollection(); - Controllers = new ObservableCollection(); - Devices = new ObservableCollection<(DeviceType Type, string Id, string Name)>(); - ProfilesList = new AvaloniaList(); - DeviceList = new AvaloniaList(); + PlayerIndexes = []; + Controllers = []; + Devices = []; + ProfilesList = []; + DeviceList = []; ControllerImage = ProControllerResource; @@ -810,7 +810,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input { IsModified = false; - List newConfig = new(); + List newConfig = []; newConfig.AddRange(ConfigurationState.Instance.Hid.InputConfig.Value); diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 53e476f59..3a6fc8d2f 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -1245,21 +1245,21 @@ namespace Ryujinx.Ava.UI.ViewModels { new(LocaleManager.Instance[LocaleKeys.FileDialogAllTypes]) { - Patterns = new[] { "*.xci", "*.zip" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.xci", "public.zip-archive" }, - MimeTypes = new[] { "application/x-nx-xci", "application/zip" }, + Patterns = ["*.xci", "*.zip"], + AppleUniformTypeIdentifiers = ["com.ryujinx.xci", "public.zip-archive"], + MimeTypes = ["application/x-nx-xci", "application/zip"], }, new("XCI") { - Patterns = new[] { "*.xci" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.xci" }, - MimeTypes = new[] { "application/x-nx-xci" }, + Patterns = ["*.xci"], + AppleUniformTypeIdentifiers = ["com.ryujinx.xci"], + MimeTypes = ["application/x-nx-xci"], }, new("ZIP") { - Patterns = new[] { "*.zip" }, - AppleUniformTypeIdentifiers = new[] { "public.zip-archive" }, - MimeTypes = new[] { "application/zip" }, + Patterns = ["*.zip"], + AppleUniformTypeIdentifiers = ["public.zip-archive"], + MimeTypes = ["application/zip"], }, }, }); @@ -1292,21 +1292,21 @@ namespace Ryujinx.Ava.UI.ViewModels { new(LocaleManager.Instance[LocaleKeys.FileDialogAllTypes]) { - Patterns = new[] { "*.keys", "*.zip" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.xci", "public.zip-archive" }, - MimeTypes = new[] { "application/keys", "application/zip" }, + Patterns = ["*.keys", "*.zip"], + AppleUniformTypeIdentifiers = ["com.ryujinx.xci", "public.zip-archive"], + MimeTypes = ["application/keys", "application/zip"], }, new("KEYS") { - Patterns = new[] { "*.keys" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.xci" }, - MimeTypes = new[] { "application/keys" }, + Patterns = ["*.keys"], + AppleUniformTypeIdentifiers = ["com.ryujinx.xci"], + MimeTypes = ["application/keys"], }, new("ZIP") { - Patterns = new[] { "*.zip" }, - AppleUniformTypeIdentifiers = new[] { "public.zip-archive" }, - MimeTypes = new[] { "application/zip" }, + Patterns = ["*.zip"], + AppleUniformTypeIdentifiers = ["public.zip-archive"], + MimeTypes = ["application/zip"], }, }, }); @@ -1418,53 +1418,53 @@ namespace Ryujinx.Ava.UI.ViewModels { new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats]) { - Patterns = new[] { "*.nsp", "*.xci", "*.nca", "*.nro", "*.nso" }, - AppleUniformTypeIdentifiers = new[] - { + Patterns = ["*.nsp", "*.xci", "*.nca", "*.nro", "*.nso"], + AppleUniformTypeIdentifiers = + [ "com.ryujinx.nsp", "com.ryujinx.xci", "com.ryujinx.nca", "com.ryujinx.nro", - "com.ryujinx.nso", - }, - MimeTypes = new[] - { + "com.ryujinx.nso" + ], + MimeTypes = + [ "application/x-nx-nsp", "application/x-nx-xci", "application/x-nx-nca", "application/x-nx-nro", - "application/x-nx-nso", - }, + "application/x-nx-nso" + ], }, new("NSP") { - Patterns = new[] { "*.nsp" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.nsp" }, - MimeTypes = new[] { "application/x-nx-nsp" }, + Patterns = ["*.nsp"], + AppleUniformTypeIdentifiers = ["com.ryujinx.nsp"], + MimeTypes = ["application/x-nx-nsp"], }, new("XCI") { - Patterns = new[] { "*.xci" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.xci" }, - MimeTypes = new[] { "application/x-nx-xci" }, + Patterns = ["*.xci"], + AppleUniformTypeIdentifiers = ["com.ryujinx.xci"], + MimeTypes = ["application/x-nx-xci"], }, new("NCA") { - Patterns = new[] { "*.nca" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.nca" }, - MimeTypes = new[] { "application/x-nx-nca" }, + Patterns = ["*.nca"], + AppleUniformTypeIdentifiers = ["com.ryujinx.nca"], + MimeTypes = ["application/x-nx-nca"], }, new("NRO") { - Patterns = new[] { "*.nro" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.nro" }, - MimeTypes = new[] { "application/x-nx-nro" }, + Patterns = ["*.nro"], + AppleUniformTypeIdentifiers = ["com.ryujinx.nro"], + MimeTypes = ["application/x-nx-nro"], }, new("NSO") { - Patterns = new[] { "*.nso" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.nso" }, - MimeTypes = new[] { "application/x-nx-nso" }, + Patterns = ["*.nso"], + AppleUniformTypeIdentifiers = ["com.ryujinx.nso"], + MimeTypes = ["application/x-nx-nso"], }, }, }); @@ -1690,7 +1690,7 @@ namespace Ryujinx.Ava.UI.ViewModels { new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats]) { - Patterns = new[] { "*.bin" }, + Patterns = ["*.bin"], } } }); diff --git a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs index 9d817ea0d..603d8f7c5 100644 --- a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs @@ -23,9 +23,9 @@ namespace Ryujinx.Ava.UI.ViewModels { private readonly string _modJsonPath; - private AvaloniaList _mods = new(); - [ObservableProperty] private AvaloniaList _views = new(); - [ObservableProperty] private AvaloniaList _selectedMods = new(); + private AvaloniaList _mods = []; + [ObservableProperty] private AvaloniaList _views = []; + [ObservableProperty] private AvaloniaList _selectedMods = []; private string _search; private readonly ulong _applicationId; diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index b2f94d7b6..5a73dd574 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -51,7 +51,7 @@ namespace Ryujinx.Ava.UI.ViewModels [ObservableProperty] private bool _isVulkanAvailable = true; [ObservableProperty] private bool _gameDirectoryChanged; [ObservableProperty] private bool _autoloadDirectoryChanged; - private readonly List _gpuIds = new(); + private readonly List _gpuIds = []; private int _graphicsBackendIndex; private int _scalingFilter; private int _scalingFilterLevel; diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index b01929291..aaafc3913 100644 --- a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -21,8 +21,8 @@ namespace Ryujinx.Ava.UI.ViewModels private ApplicationLibrary ApplicationLibrary { get; } private ApplicationData ApplicationData { get; } - [ObservableProperty] private AvaloniaList _titleUpdates = new(); - [ObservableProperty] private AvaloniaList _views = new(); + [ObservableProperty] private AvaloniaList _titleUpdates = []; + [ObservableProperty] private AvaloniaList _views = []; [ObservableProperty] private object _selectedUpdate = new TitleUpdateViewModelNoUpdate(); [ObservableProperty] private bool _showBundledContentNotice; @@ -149,9 +149,9 @@ namespace Ryujinx.Ava.UI.ViewModels { new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats]) { - Patterns = new[] { "*.nsp" }, - AppleUniformTypeIdentifiers = new[] { "com.ryujinx.nsp" }, - MimeTypes = new[] { "application/x-nx-nsp" }, + Patterns = ["*.nsp"], + AppleUniformTypeIdentifiers = ["com.ryujinx.nsp"], + MimeTypes = ["application/x-nx-nsp"], }, }, }); diff --git a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs index 33f30dbb0..cc5b35dc6 100644 --- a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs @@ -32,7 +32,7 @@ namespace Ryujinx.Ava.UI.ViewModels public UserFirmwareAvatarSelectorViewModel() { - _images = new ObservableCollection(); + _images = []; LoadImagesFromStore(); PropertyChanged += (_, args) => diff --git a/src/Ryujinx/UI/ViewModels/UserProfileViewModel.cs b/src/Ryujinx/UI/ViewModels/UserProfileViewModel.cs index 0b65e6d13..f3a9e432a 100644 --- a/src/Ryujinx/UI/ViewModels/UserProfileViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserProfileViewModel.cs @@ -9,8 +9,8 @@ namespace Ryujinx.Ava.UI.ViewModels { public UserProfileViewModel() { - Profiles = new ObservableCollection(); - LostProfiles = new ObservableCollection(); + Profiles = []; + LostProfiles = []; IsEmpty = !LostProfiles.Any(); } diff --git a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs index ac711089e..0b3f89556 100644 --- a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs @@ -14,8 +14,8 @@ namespace Ryujinx.Ava.UI.ViewModels [ObservableProperty] private int _sortIndex; [ObservableProperty] private int _orderIndex; [ObservableProperty] private string _search; - [ObservableProperty] private ObservableCollection _saves = new(); - [ObservableProperty] private ObservableCollection _views = new(); + [ObservableProperty] private ObservableCollection _saves = []; + [ObservableProperty] private ObservableCollection _views = []; private readonly AccountManager _accountManager; public string SaveManagerHeading => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.SaveManagerHeading, _accountManager.LastOpenedUser.Name, _accountManager.LastOpenedUser.UserId); diff --git a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs index 72905ed1b..560f852db 100644 --- a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs @@ -36,9 +36,9 @@ namespace Ryujinx.Ava.UI.ViewModels private readonly Ryujinx.Common.Logging.XCIFileTrimmerLog _logger; private ApplicationLibrary ApplicationLibrary => _mainWindowViewModel.ApplicationLibrary; private Optional _processingApplication = null; - private AvaloniaList _allXCIFiles = new(); - private AvaloniaList _selectedXCIFiles = new(); - private AvaloniaList _displayedXCIFiles = new(); + private AvaloniaList _allXCIFiles = []; + private AvaloniaList _selectedXCIFiles = []; + private AvaloniaList _displayedXCIFiles = []; private MainWindowViewModel _mainWindowViewModel; private CancellationTokenSource _cancellationTokenSource; private string _search; diff --git a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs b/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs index 5740ffe77..bd328b0c7 100644 --- a/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserProfileImageSelectorView.axaml.cs @@ -70,9 +70,9 @@ namespace Ryujinx.Ava.UI.Views.User { new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats]) { - Patterns = new[] { "*.jpg", "*.jpeg", "*.png", "*.bmp" }, - AppleUniformTypeIdentifiers = new[] { "public.jpeg", "public.png", "com.microsoft.bmp" }, - MimeTypes = new[] { "image/jpeg", "image/png", "image/bmp" }, + Patterns = ["*.jpg", "*.jpeg", "*.png", "*.bmp"], + AppleUniformTypeIdentifiers = ["public.jpeg", "public.png", "com.microsoft.bmp"], + MimeTypes = ["image/jpeg", "image/png", "image/bmp"], }, }, }); diff --git a/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs b/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs index 7a221e7b3..bf11e878c 100644 --- a/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs +++ b/src/Ryujinx/UI/Views/User/UserSaveManagerView.axaml.cs @@ -67,7 +67,7 @@ namespace Ryujinx.Ava.UI.Views.User public void LoadSaves() { ViewModel.Saves.Clear(); - ObservableCollection saves = new(); + ObservableCollection saves = []; SaveDataFilter saveDataFilter = SaveDataFilter.Make( programId: default, saveType: SaveDataType.Account, diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index 71d864c99..ba384359a 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -34,7 +34,7 @@ namespace Ryujinx.Ava.UI.Windows public CheatWindow(VirtualFileSystem virtualFileSystem, string titleId, string titleName, string titlePath) { - LoadedCheats = new AvaloniaList(); + LoadedCheats = []; IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None; diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 76002d1ab..14ec80019 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -712,12 +712,13 @@ namespace Ryujinx.Ava.UI.Windows private void ShowNewContentAddedDialog(int numDlcAdded, int numDlcRemoved, int numUpdatesAdded, int numUpdatesRemoved) { - string[] messages = { + string[] messages = + [ numDlcRemoved > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadDlcRemovedMessage], numDlcRemoved): null, numDlcAdded > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadDlcAddedMessage], numDlcAdded): null, numUpdatesRemoved > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadUpdateRemovedMessage], numUpdatesRemoved): null, numUpdatesAdded > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadUpdateAddedMessage], numUpdatesAdded) : null - }; + ]; string msg = String.Join("\r\n", messages); diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 230840a9a..3dc62f3d9 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -372,7 +372,7 @@ namespace Ryujinx.Ava for (int i = 0; i < ConnectionCount; i++) { - list.Add(Array.Empty()); + list.Add([]); } for (int i = 0; i < ConnectionCount; i++) diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index 1720cd7f5..7577b9f74 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -190,7 +190,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary /// An error occured while reading PFS data. private List GetApplicationsFromPfs(IFileSystem pfs, string filePath) { - List applications = new(); + List applications = []; string extension = Path.GetExtension(filePath).ToLower(); foreach ((ulong titleId, ContentMetaData content) in pfs.GetContentData(ContentMetaType.Application, _virtualFileSystem, _checkLevel)) @@ -642,7 +642,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary _applications.Clear(); // Builds the applications list with paths to found applications - List applicationPaths = new(); + List applicationPaths = []; try { @@ -833,7 +833,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary { _cancellationToken = new CancellationTokenSource(); - List dlcPaths = new(); + List dlcPaths = []; int newDlcLoaded = 0; numDlcRemoved = 0; @@ -943,14 +943,14 @@ namespace Ryujinx.Ava.Utilities.AppLibrary { _cancellationToken = new CancellationTokenSource(); - List updatePaths = new(); + List updatePaths = []; int numUpdatesLoaded = 0; numUpdatesRemoved = 0; try { - HashSet titleIdsToSave = new(); - HashSet titleIdsToRefresh = new(); + HashSet titleIdsToSave = []; + HashSet titleIdsToRefresh = []; // Remove any updates which can no longer be located on disk List<(TitleUpdateModel TitleUpdate, bool IsSelected)> updatesToRemove = _titleUpdates.Items diff --git a/src/Ryujinx/Utilities/CommandLineState.cs b/src/Ryujinx/Utilities/CommandLineState.cs index 6fb8e92d6..96b5d1b86 100644 --- a/src/Ryujinx/Utilities/CommandLineState.cs +++ b/src/Ryujinx/Utilities/CommandLineState.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Ava.Utilities public static void ParseArguments(string[] args) { - List arguments = new(); + List arguments = []; // Parse Arguments. for (int i = 0; i < args.Length; ++i) diff --git a/src/Ryujinx/Utilities/DownloadableContentsHelper.cs b/src/Ryujinx/Utilities/DownloadableContentsHelper.cs index e46d1498a..0bafff9aa 100644 --- a/src/Ryujinx/Utilities/DownloadableContentsHelper.cs +++ b/src/Ryujinx/Utilities/DownloadableContentsHelper.cs @@ -45,7 +45,7 @@ namespace Ryujinx.Ava.Utilities public static void SaveDownloadableContentsJson(ulong applicationIdBase, List<(DownloadableContentModel, bool IsEnabled)> dlcs) { DownloadableContentContainer container = default; - List downloadableContentContainerList = new(); + List downloadableContentContainerList = []; foreach ((DownloadableContentModel dlc, bool isEnabled) in dlcs) { @@ -82,7 +82,7 @@ namespace Ryujinx.Ava.Utilities private static List<(DownloadableContentModel, bool IsEnabled)> LoadDownloadableContents(VirtualFileSystem vfs, List downloadableContentContainers) { - List<(DownloadableContentModel, bool IsEnabled)> result = new(); + List<(DownloadableContentModel, bool IsEnabled)> result = []; foreach (DownloadableContentContainer downloadableContentContainer in downloadableContentContainers) { diff --git a/src/Ryujinx/Utilities/ShortcutHelper.cs b/src/Ryujinx/Utilities/ShortcutHelper.cs index ff89725d8..db843959f 100644 --- a/src/Ryujinx/Utilities/ShortcutHelper.cs +++ b/src/Ryujinx/Utilities/ShortcutHelper.cs @@ -124,7 +124,7 @@ namespace Ryujinx.Ava.Utilities private static string GetArgsString(string appFilePath, string applicationId) { // args are first defined as a list, for easier adjustments in the future - List argsList = new(); + List argsList = []; if (!string.IsNullOrEmpty(CommandLineState.BaseDirPathArg)) { @@ -152,7 +152,7 @@ namespace Ryujinx.Ava.Utilities private static void SaveBitmapAsIcon(SKBitmap source, string filePath) { // Code Modified From https://stackoverflow.com/a/11448060/368354 by Benlitz - byte[] header = { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 32, 0, 0, 0, 0, 0, 22, 0, 0, 0 }; + byte[] header = [0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 32, 0, 0, 0, 0, 0, 22, 0, 0, 0]; using FileStream fs = new(filePath, FileMode.Create); fs.Write(header); diff --git a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs index fd3bb641c..12dd234d7 100644 --- a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs +++ b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs @@ -79,7 +79,7 @@ namespace Ryujinx.Ava.Utilities private static List<(TitleUpdateModel Update, bool IsSelected)> LoadTitleUpdates(VirtualFileSystem vfs, TitleUpdateMetadata titleUpdateMetadata, ulong applicationIdBase) { - List<(TitleUpdateModel, bool IsSelected)> result = new(); + List<(TitleUpdateModel, bool IsSelected)> result = []; IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid diff --git a/src/Ryujinx/Utilities/ValueFormatUtils.cs b/src/Ryujinx/Utilities/ValueFormatUtils.cs index e0a8b0457..535518409 100644 --- a/src/Ryujinx/Utilities/ValueFormatUtils.cs +++ b/src/Ryujinx/Utilities/ValueFormatUtils.cs @@ -10,10 +10,10 @@ namespace Ryujinx.Ava.Utilities public static class ValueFormatUtils { private static readonly string[] _fileSizeUnitStrings = - { + [ "B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", // Base 10 units, used for formatting and parsing - "KB", "MB", "GB", "TB", "PB", "EB", // Base 2 units, used for parsing legacy values - }; + "KB", "MB", "GB", "TB", "PB", "EB" // Base 2 units, used for parsing legacy values + ]; /// /// Used by . -- 2.47.1 From aa0cb50c5db07e50efe6aafc14d00cb3e41106c9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:49:22 -0600 Subject: [PATCH 474/722] misc: chore: Use collection expressions in Gpu project --- .../Engine/MME/MacroHLETable.cs | 6 +- .../Engine/MME/MacroJitCompiler.cs | 3 +- .../Threed/Blender/AdvancedBlendFunctions.cs | 8 +- .../Blender/AdvancedBlendPreGenTable.cs | 462 ++++++++++-------- .../Engine/Threed/Blender/UcodeAssembler.cs | 2 +- .../Threed/ComputeDraw/VtgAsComputeState.cs | 17 +- .../Engine/Threed/DrawManager.cs | 8 +- .../Engine/Threed/StateUpdater.cs | 7 +- src/Ryujinx.Graphics.Gpu/GpuContext.cs | 6 +- .../Image/AutoDeleteCache.cs | 6 +- src/Ryujinx.Graphics.Gpu/Image/PoolCache.cs | 2 +- .../Image/SamplerDescriptor.cs | 16 +- src/Ryujinx.Graphics.Gpu/Image/Texture.cs | 4 +- .../Image/TextureBindingsArrayCache.cs | 4 +- .../Image/TextureBindingsManager.cs | 6 +- .../Image/TextureCache.cs | 10 +- .../Image/TextureGroup.cs | 12 +- .../Image/TextureGroupHandle.cs | 4 +- src/Ryujinx.Graphics.Gpu/Image/TexturePool.cs | 2 +- src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs | 2 +- .../Memory/BufferCache.cs | 8 +- .../Memory/BufferManager.cs | 6 +- .../Memory/BufferModifiedRangeList.cs | 4 +- .../Memory/BufferUpdater.cs | 2 +- .../Memory/CounterCache.cs | 2 +- .../Memory/MemoryManager.cs | 2 +- .../Memory/MultiRangeBuffer.cs | 2 +- .../Memory/UnmapEventArgs.cs | 2 +- .../Memory/VirtualRangeCache.cs | 2 +- .../Shader/CachedShaderBindings.cs | 8 +- .../Shader/ComputeShaderCacheHashTable.cs | 4 +- .../Shader/DiskCache/DiskCacheGuestStorage.cs | 2 +- .../DiskCache/ParallelDiskCacheLoader.cs | 6 +- .../DiskCache/ShaderBinarySerializer.cs | 2 +- .../Shader/HashTable/PartitionHashTable.cs | 4 +- .../Shader/HashTable/PartitionedHashTable.cs | 2 +- .../Shader/ShaderCache.cs | 8 +- .../Shader/ShaderCacheHashTable.cs | 2 +- .../Shader/ShaderInfoBuilder.cs | 8 +- .../Shader/ShaderSpecializationList.cs | 2 +- .../Synchronization/Syncpoint.cs | 4 +- 41 files changed, 365 insertions(+), 304 deletions(-) diff --git a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLETable.cs b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLETable.cs index 1df68a50f..de88fe2e5 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLETable.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroHLETable.cs @@ -44,8 +44,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME } } - private static readonly TableEntry[] _table = new TableEntry[] - { + private static readonly TableEntry[] _table = + [ new(MacroHLEFunctionName.BindShaderProgram, new Hash128(0x5d5efb912369f60b, 0x69131ed5019f08ef), 0x68), new(MacroHLEFunctionName.ClearColor, new Hash128(0xA9FB28D1DC43645A, 0xB177E5D2EAE67FB0), 0x28), new(MacroHLEFunctionName.ClearDepthStencil, new Hash128(0x1B96CB77D4879F4F, 0x8557032FE0C965FB), 0x24), @@ -59,7 +59,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME new(MacroHLEFunctionName.UpdateUniformBufferState, new Hash128(0x8EE66706049CB0B0, 0x51C1CF906EC86F7C), 0x20), new(MacroHLEFunctionName.UpdateUniformBufferStateCbu, new Hash128(0xA4592676A3E581A0, 0xA39E77FE19FE04AC), 0x18), new(MacroHLEFunctionName.UpdateUniformBufferStateCbuV2, new Hash128(0x392FA750489983D4, 0x35BACE455155D2C3), 0x18) - }; + ]; /// /// Checks if the host supports all features required by the HLE macro. diff --git a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroJitCompiler.cs b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroJitCompiler.cs index d5229970f..ea8bb2d61 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroJitCompiler.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/MME/MacroJitCompiler.cs @@ -22,7 +22,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME /// public MacroJitCompiler() { - _meth = new DynamicMethod("Macro", typeof(void), new Type[] { typeof(MacroJitContext), typeof(IDeviceState), typeof(int) }); + _meth = new DynamicMethod("Macro", typeof(void), [typeof(MacroJitContext), typeof(IDeviceState), typeof(int) + ]); _ilGen = _meth.GetILGenerator(); _gprs = new LocalBuilder[8]; diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs index f5fad66ea..d8d23bf43 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendFunctions.cs @@ -8,8 +8,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.Blender { static class AdvancedBlendFunctions { - public static readonly AdvancedBlendUcode[] Table = new AdvancedBlendUcode[] - { + public static readonly AdvancedBlendUcode[] Table = + [ new(AdvancedBlendOp.PlusClamped, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPlusClampedPremul), new(AdvancedBlendOp.PlusClampedAlpha, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPlusClampedAlphaPremul), new(AdvancedBlendOp.PlusDarker, AdvancedBlendOverlap.Uncorrelated, true, GenUncorrelatedPlusDarkerPremul), @@ -209,8 +209,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.Blender new(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Conjoint, false, GenConjointHslHue), new(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Conjoint, false, GenConjointHslSaturation), new(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Conjoint, false, GenConjointHslColor), - new(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Conjoint, false, GenConjointHslLuminosity), - }; + new(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Conjoint, false, GenConjointHslLuminosity) + ]; public static string GenTable() { diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendPreGenTable.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendPreGenTable.cs index b6cd9def9..c2276480b 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendPreGenTable.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/AdvancedBlendPreGenTable.cs @@ -68,206 +68,268 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.Blender /// public static readonly IReadOnlyDictionary Entries = new Dictionary() { - { new Hash128(0x19ECF57B83DE31F7, 0x5BAE759246F264C0), new AdvancedBlendEntry(AdvancedBlendOp.PlusClamped, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xDE1B14A356A1A9ED, 0x59D803593C607C1D), new AdvancedBlendEntry(AdvancedBlendOp.PlusClampedAlpha, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x1A3C3A6D32DEC368, 0xBCAE519EC6AAA045), new AdvancedBlendEntry(AdvancedBlendOp.PlusDarker, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x6FD380261A63B240, 0x17C3B335DBB9E3DB), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x1D39164823D3A2D1, 0xC45350959CE1C8FB), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x18DF09FF53B129FE, 0xC02EDA33C36019F6), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Uncorrelated, true, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x5973E583271EBF06, 0x711497D75D1272E0), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x4759E0E5DA54D5E8, 0x1FDD57C0C38AFA1F), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x337684D43CCE97FA, 0x0139E30CC529E1C9), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xDA59E85D8428992D, 0x1D3D7C64C9EF0132), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x9455B949298CE805, 0xE73D3301518BE98A), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Uncorrelated, true, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xBDD3B4DEDBE336AA, 0xBFA4DCD50D535DEE), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Uncorrelated, true, new[] { new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x22D4E970A028649A, 0x4F3FCB055FCED965), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xA346A91311D72114, 0x151A27A3FB0A1904), new AdvancedBlendEntry(AdvancedBlendOp.Minus, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.ReverseSubtractGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x8A307241061FACD6, 0xA39D1826440B8EE7), new AdvancedBlendEntry(AdvancedBlendOp.MinusClamped, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xB3BE569485EFFFE0, 0x0BA4E269B3CFB165), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x36FCA3277DC11822, 0x2BC0F6CAC2029672), new AdvancedBlendEntry(AdvancedBlendOp.Contrast, AdvancedBlendOverlap.Uncorrelated, true, new[] { new RgbFloat(2f, 2f, 2f), new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x4A6226AF2DE9BD7F, 0xEB890D7DA716F73A), new AdvancedBlendEntry(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0xF364CAA94E160FEB, 0xBF364512C72A3797), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x6BF791AB4AC19C87, 0x6FA17A994EA0FCDE), new AdvancedBlendEntry(AdvancedBlendOp.InvertOvg, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x053C75A0AE0BB222, 0x03C791FEEB59754C), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x25762AB40B6CBDE9, 0x595E9A968AC4F01C), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xC2D05E2DBE16955D, 0xB8659C7A3FCFA7CE), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Uncorrelated, true, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x223F220B8F74CBFB, 0xD3DD19D7C39209A5), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Uncorrelated, true, new[] { new RgbFloat(2f, 2f, 2f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xD0DAE57A9F1FE78A, 0x353796BCFB8CE30B), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x601C8CBEC07FF8FF, 0xB8E22882360E8695), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x3A55B7B78C76A7A8, 0x206F503B2D9FFEAA), new AdvancedBlendEntry(AdvancedBlendOp.Red, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x80BC65C7831388E5, 0xC652457B2C766AEC), new AdvancedBlendEntry(AdvancedBlendOp.Green, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x3D3A912E5833EE13, 0x307895951349EE33), new AdvancedBlendEntry(AdvancedBlendOp.Blue, AdvancedBlendOverlap.Uncorrelated, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x289105BE92E81803, 0xFD8F1F03D15C53B4), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Uncorrelated, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x007AE3BD140764EB, 0x0EE05A0D2E80BBAE), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Uncorrelated, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x77F7EE0DB3FDDB96, 0xDEA47C881306DB3E), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Uncorrelated, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x66F4E9A7D73CA157, 0x1486058A177DB11C), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Uncorrelated, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x593E9F331612D618, 0x9D217BEFA4EB919A), new AdvancedBlendEntry(AdvancedBlendOp.Src, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, - { new Hash128(0x0A5194C5E6891106, 0xDD8EC6586106557C), new AdvancedBlendEntry(AdvancedBlendOp.Dst, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x8D77173D5E06E916, 0x06AB190E7D10F4D4), new AdvancedBlendEntry(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x655B4EBC148981DA, 0x455999EF2B9BD28A), new AdvancedBlendEntry(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x98F5437D5F518929, 0xBFF4A6E83183DB63), new AdvancedBlendEntry(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x6ADDEFE3B9CEF2FD, 0xB6F6272AFECB1AAB), new AdvancedBlendEntry(AdvancedBlendOp.DstIn, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x80953F0953BF05B1, 0xD59ABFAA34F8196F), new AdvancedBlendEntry(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xA401D9AA2A39C121, 0xFC0C8005C22AD7E3), new AdvancedBlendEntry(AdvancedBlendOp.DstOut, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x06274FB7CA9CDD22, 0x6CE8188B1A9AB6EF), new AdvancedBlendEntry(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x0B079BE7F7F70817, 0xB72E7736CA51E321), new AdvancedBlendEntry(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, - { new Hash128(0x66215C99403CEDDE, 0x900B733D62204C48), new AdvancedBlendEntry(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x12DEF2AD900CAD6C, 0x58CF5CC3004910DF), new AdvancedBlendEntry(AdvancedBlendOp.Plus, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x272BA3A49F64DAE4, 0xAC70B96C00A99EAF), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x206C34AAA7D3F545, 0xDA4B30CACAA483A0), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x3D93494920D257BE, 0xDCC573BE1F5F4449), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Disjoint, true, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x0D7417D80191107B, 0xEAF40547827E005F), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xEC1B03E8C883F9C9, 0x2D3CA044C58C01B4), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x58A19A0135D68B31, 0x82F35B97AED068E5), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x20489F9AB36CC0E3, 0x20499874219E35EE), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xBB176935E5EE05BF, 0x95B26D4D30EA7A14), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Disjoint, true, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x5FF9393C908ACFED, 0x068B0BD875773ABF), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Disjoint, true, new[] { new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x03181F8711C9802C, 0x6B02C7C6B224FE7B), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x2EE2209021F6B977, 0xF3AFA1491B8B89FC), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xD8BA4DD2EDE4DC9E, 0x01006114977CF715), new AdvancedBlendEntry(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0xD156B99835A2D8ED, 0x2D0BEE9E135EA7A7), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x20CE8C898ED4BE27, 0x1514900B6F5E8F66), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xCDE5F743820BA2D9, 0x917845FE2ECB083D), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xEB03DF4A0C1D14CD, 0xBAE2E831C6E8FFE4), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Disjoint, true, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x1DC9E49AABC779AC, 0x4053A1441EB713D3), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Disjoint, true, new[] { new RgbFloat(2f, 2f, 2f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xFBDEF776248F7B3E, 0xE05EEFD65AC47CB7), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x415A1A48E03AA6E7, 0x046D7EE33CA46B9A), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Disjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x59A6901EC9BB2041, 0x2F3E19CE5EEC3EBE), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Disjoint, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x044B2B6E105221DA, 0x3089BBC033F994AF), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Disjoint, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x374A5A24AA8E6CC5, 0x29930FAA6215FA2B), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Disjoint, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x30CD0F7AF0CF26F9, 0x06CCA6744DE7DCF5), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Disjoint, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x1A6C9A1F6FE494A5, 0xA0CFAF77617E54DD), new AdvancedBlendEntry(AdvancedBlendOp.Src, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, - { new Hash128(0x081AF6DAAB1C8717, 0xBFEDCE59AE3DC9AC), new AdvancedBlendEntry(AdvancedBlendOp.Dst, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x3518E44573AB68BA, 0xC96EE71AF9F8F546), new AdvancedBlendEntry(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xF89E81FE8D73C96F, 0x4583A04577A0F21C), new AdvancedBlendEntry(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xDF4026421CB61119, 0x14115A1F5139AFC7), new AdvancedBlendEntry(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MinimumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x91A20262C3E3A695, 0x0B3A102BFCDC6B1C), new AdvancedBlendEntry(AdvancedBlendOp.DstIn, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MinimumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x44F4C7CCFEB9EBFA, 0xF68394E6D56E5C2F), new AdvancedBlendEntry(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xB89F17C7021E9760, 0x430357EE0F7188EF), new AdvancedBlendEntry(AdvancedBlendOp.DstOut, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xDA2D20EA4242B8A0, 0x0D1EC05B72E3838F), new AdvancedBlendEntry(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x855DFEE1208D11B9, 0x77C6E3DDCFE30B85), new AdvancedBlendEntry(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, - { new Hash128(0x9B3808439683FD58, 0x123DCBE4705AB25E), new AdvancedBlendEntry(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xA42CF045C248A00A, 0x0C6C63C24EA0B0C1), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x320A83B6D00C8059, 0x796EDAB3EB7314BC), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x45253AC9ABFFC613, 0x8F92EA70195FB573), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Conjoint, true, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x1A5D263B588274B6, 0x167D305F6C794179), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x709C1A837FE966AC, 0x75D8CE49E8A78EDB), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x8265C26F85E4145F, 0x932E6CCBF37CB600), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x3F252B3FEF983F27, 0x9370D7EEFEFA1A9E), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x66A334A4AEA41078, 0xCB52254E1E395231), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Conjoint, true, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xFDD05C53B25F0035, 0xB7E3ECEE166C222F), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Conjoint, true, new[] { new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x25D932A77FFED81A, 0xA50D797B0FCA94E8), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x4A953B6F5F7D341C, 0xDC05CFB50DDB5DC1), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x838CB660C4F41F6D, 0x9E7D958697543495), new AdvancedBlendEntry(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x4DF6EC1348A8F797, 0xA128E0CD69DB5A64), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x178CDFAB9A015295, 0x2BF40EA72E596D57), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x338FC99050E56AFD, 0x2AF41CF82BE602BF), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x62E02ED60D1E978E, 0xBF726B3E68C11E4D), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Conjoint, true, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xFBAF92DD4C101502, 0x7AF2EDA6596B819D), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Conjoint, true, new[] { new RgbFloat(2f, 2f, 2f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x0EF1241F65D4B50A, 0xE8D85DFA6AEDDB84), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x77FE024B5C9D4A18, 0xF19D48A932F6860F), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Conjoint, true, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x9C88CBFA2E09D857, 0x0A0361704CBEEE1D), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Conjoint, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x5B94127FA190E640, 0x8D1FEFF837A91268), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Conjoint, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xB9C9105B7E063DDB, 0xF6A70E1D511B96FD), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Conjoint, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xF0751AAE332B3ED1, 0xC40146F5C83C2533), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Conjoint, true, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x579EB12F595F75AD, 0x151BF0504703B81B), new AdvancedBlendEntry(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xF9CA152C03AC8C62, 0x1581336205E5CF47), new AdvancedBlendEntry(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.DstAlphaGl, BlendFactor.ZeroGl)) }, - { new Hash128(0x98ACD8BB5E195D0F, 0x91F937672BE899F0), new AdvancedBlendEntry(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneMinusDstAlphaGl, BlendFactor.ZeroGl)) }, - { new Hash128(0xBF97F10FC301F44C, 0x75721789F0D48548), new AdvancedBlendEntry(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x1B982263B8B08A10, 0x3350C76E2E1B27DF), new AdvancedBlendEntry(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, - { new Hash128(0xFF20AC79F64EDED8, 0xAF9025B2D97B9273), new AdvancedBlendEntry(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneMinusDstAlphaGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x9FFD986600FB112F, 0x384FDDF4E060139A), new AdvancedBlendEntry(AdvancedBlendOp.PlusClamped, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x0425E40B5B8B3B52, 0x5880CBED7CAB631C), new AdvancedBlendEntry(AdvancedBlendOp.PlusClampedAlpha, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x16DAC8593F28623A, 0x233DBC82325B8AED), new AdvancedBlendEntry(AdvancedBlendOp.PlusDarker, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xB37E5F234B9F0948, 0xD5F957A2ECD98FD6), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xCA0FDADD1D20DBE3, 0x1A5C15CCBF1AC538), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x1C48304D73A9DF3A, 0x891DB93FA36E3450), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Uncorrelated, false, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x53200F2279B7FA39, 0x051C2462EBF6789C), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xB88BFB80714DCD5C, 0xEBD6938D744E6A41), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xE33DC2A25FC1A976, 0x08B3DBB1F3027D45), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xCE97E71615370316, 0xE131AE49D3A4D62B), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xE059FD265149B256, 0x94AF817AC348F61F), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Uncorrelated, false, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x16D31333D477E231, 0x9A98AAC84F72CC62), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Uncorrelated, false, new[] { new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x47FC3B0776366D3C, 0xE96D9BD83B277874), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x7230401E3FEA1F3B, 0xF0D15F05D3D1E309), new AdvancedBlendEntry(AdvancedBlendOp.Minus, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.ReverseSubtractGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x188212F9303742F5, 0x100C51CB96E03591), new AdvancedBlendEntry(AdvancedBlendOp.MinusClamped, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x52B755D296B44DC5, 0x4003B87275625973), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xD873ED973ADF7EAD, 0x73E68B57D92034E7), new AdvancedBlendEntry(AdvancedBlendOp.Contrast, AdvancedBlendOverlap.Uncorrelated, false, new[] { new RgbFloat(2f, 2f, 2f), new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x471F9FA34B945ACB, 0x10524D1410B3C402), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x99F569454EA0EF32, 0x6FC70A8B3A07DC8B), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x5AD55F950067AC7E, 0x4BA60A4FBABDD0AC), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x03FF2C858C9C4C5B, 0xE95AE7F561FB60E9), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Uncorrelated, false, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x6DC0E510C7BCF9D2, 0xAE805D7CECDCB5C1), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Uncorrelated, false, new[] { new RgbFloat(2f, 2f, 2f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x44832332CED5C054, 0x2F8D5536C085B30A), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x4AB4D387618AC51F, 0x495B46E0555F4B32), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x99282B49405A01A8, 0xD6FA93F864F24A8E), new AdvancedBlendEntry(AdvancedBlendOp.Red, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x37B30C1064FBD23E, 0x5D068366F42317C2), new AdvancedBlendEntry(AdvancedBlendOp.Green, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x760FAE9D59E04BC2, 0xA40AD483EA01435E), new AdvancedBlendEntry(AdvancedBlendOp.Blue, AdvancedBlendOverlap.Uncorrelated, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0xE786950FD9D1C6EF, 0xF9FDD5AF6451D239), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Uncorrelated, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x052458BB4788B0CA, 0x8AC58FDCA1F45EF5), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Uncorrelated, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x6AFC3837D1D31920, 0xB9D49C2FE49642C6), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Uncorrelated, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0xAFC2911949317E01, 0xD5B63636F5CB3422), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Uncorrelated, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, - { new Hash128(0x13B46DF507CC2C53, 0x86DE26517E6BF0A7), new AdvancedBlendEntry(AdvancedBlendOp.Src, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, - { new Hash128(0x5C372442474BE410, 0x79ECD3C0C496EF2E), new AdvancedBlendEntry(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x74AAB45DBF5336E9, 0x01BFC4E181DAD442), new AdvancedBlendEntry(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x43239E282A36C85C, 0x36FB65560E46AD0F), new AdvancedBlendEntry(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x1A3BA8A7583B8F7A, 0xE64E41D548033180), new AdvancedBlendEntry(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x32BBB9859E9B565D, 0x3D5CE94FE55F18B5), new AdvancedBlendEntry(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0xD947A0766AE3C0FC, 0x391E5D53E86F4ED6), new AdvancedBlendEntry(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, - { new Hash128(0xBD9A7C08BDFD8CE6, 0x905407634901355E), new AdvancedBlendEntry(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x8395475BCB0D7A8C, 0x48AF5DD501D44A70), new AdvancedBlendEntry(AdvancedBlendOp.Plus, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x80AAC23FEBD4A3E5, 0xEA8C70F0B4DE52DE), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x2F3AD1B0F1B3FD09, 0xC0EBC784BFAB8EA3), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x52B54032F2F70BFF, 0xC941D6FDED674765), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Disjoint, false, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xCA7B86F72EC6A99B, 0x55868A131AFE359E), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x377919B60BD133CA, 0x0FD611627664EF40), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x9D4A0C5EE1153887, 0x7B869EBA218C589B), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x311F2A858545D123, 0xB4D09C802480AD62), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xCF78AA6A83AFA689, 0x9DC48B0C2182A3E1), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Disjoint, false, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xC3018CD6F1CF62D1, 0x016E32DD9087B1BB), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Disjoint, false, new[] { new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x9CB62CE0E956EE29, 0x0FB67F503E60B3AD), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x3589A13C16EF3BFA, 0x15B29BFC91F3BDFB), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x3502CA5FB7529917, 0xFA51BFD0D1688071), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x62ADC25AD6D0A923, 0x76CB6D238276D3A3), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x09FDEB1116A9D52C, 0x85BB8627CD5C2733), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x0709FED1B65E18EB, 0x5BC3AA4D99EC19CF), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Disjoint, false, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xB18D28AE5DE4C723, 0xE820AA2B75C9C02E), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Disjoint, false, new[] { new RgbFloat(2f, 2f, 2f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x6743C51621497480, 0x4B164E40858834AE), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x63D1E181E34A2944, 0x1AE292C9D9F12819), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Disjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x079523298250BFF6, 0xC0C793510603CDB5), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Disjoint, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x4C9D0A973C805EA6, 0xD1FF59AD5156B93C), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Disjoint, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x1E914678F3057BCD, 0xD503AE389C12D229), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Disjoint, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0x9FDBADE5556C5311, 0x03F0CBC798FC5C94), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Disjoint, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xE39451534635403C, 0x606CC1CA1F452388), new AdvancedBlendEntry(AdvancedBlendOp.Src, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, - { new Hash128(0x1D39F0F0A1008AA6, 0xBFDF2B97E6C3F125), new AdvancedBlendEntry(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xDB81BED30D5BDBEA, 0xAF0B2856EB93AD2C), new AdvancedBlendEntry(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x83F69CCF1D0A79B6, 0x70D31332797430AC), new AdvancedBlendEntry(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MinimumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x7B87F807AB7A8F5C, 0x1241A2A01FB31771), new AdvancedBlendEntry(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xF557172E20D5272D, 0xC1961F8C7A5D2820), new AdvancedBlendEntry(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0xA8476B3944DBBC9B, 0x84A2F6AF97B15FDF), new AdvancedBlendEntry(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, - { new Hash128(0x3259602B55414DA3, 0x72AACCC00B5A9D10), new AdvancedBlendEntry(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, - { new Hash128(0xC0CB8C10F36EDCD6, 0x8C2D088AD8191E1C), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x81806C451C6255EF, 0x5AA8AC9A08941A15), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xE55A6537F4568198, 0xCA8735390B799B19), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Conjoint, false, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x5C044BA14536DDA3, 0xBCE0123ED7D510EC), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x6788346C405BE130, 0x372A4BB199C01F9F), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x510EDC2A34E2856B, 0xE1727A407E294254), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x4B7BE01BD398C7A8, 0x5BFF79BC00672C18), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x213B43845540CFEC, 0xDA857411CF1CCFCE), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Conjoint, false, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x765AFA6732E783F1, 0x8F1CABF1BC78A014), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Conjoint, false, new[] { new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xA4A5DE1CC06F6CB1, 0xA0634A0011001709), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x81F32BD8816EA796, 0x697EE86683165170), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xB870C209EAA5F092, 0xAF5FD923909CAA1F), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, - { new Hash128(0x3649A9F5C936FB83, 0xDD7C834897AA182A), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xD72A2B1097A5995C, 0x3D41B2763A913654), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x551E212B9F6C454A, 0xB0DFA05BEB3C37FA), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Conjoint, false, new[] { new RgbFloat(0.5f, 0.5f, 0.5f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x681B5A313B7416BF, 0xCB1CBAEEB4D81500), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Conjoint, false, new[] { new RgbFloat(2f, 2f, 2f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x9343A18BD4B16777, 0xEDB4AC1C8972C3A4), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xC960BF6D8519DE28, 0x78D8557FD405D119), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Conjoint, false, Array.Empty(), new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x65A7B01FDC73A46C, 0x297E096ED5CC4D8A), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Conjoint, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0xD9C99BA4A6CDC13B, 0x3CFF0ACEDC2EE150), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Conjoint, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x6BC00DA6EB922BD1, 0x5FD4C11F2A685234), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Conjoint, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, - { new Hash128(0x8652300E32D93050, 0x9460E7B449132371), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Conjoint, false, new[] { new RgbFloat(0.3f, 0.59f, 0.11f) }, new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x19ECF57B83DE31F7, 0x5BAE759246F264C0), new AdvancedBlendEntry(AdvancedBlendOp.PlusClamped, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xDE1B14A356A1A9ED, 0x59D803593C607C1D), new AdvancedBlendEntry(AdvancedBlendOp.PlusClampedAlpha, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x1A3C3A6D32DEC368, 0xBCAE519EC6AAA045), new AdvancedBlendEntry(AdvancedBlendOp.PlusDarker, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x6FD380261A63B240, 0x17C3B335DBB9E3DB), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x1D39164823D3A2D1, 0xC45350959CE1C8FB), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x18DF09FF53B129FE, 0xC02EDA33C36019F6), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Uncorrelated, true, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x5973E583271EBF06, 0x711497D75D1272E0), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x4759E0E5DA54D5E8, 0x1FDD57C0C38AFA1F), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x337684D43CCE97FA, 0x0139E30CC529E1C9), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xDA59E85D8428992D, 0x1D3D7C64C9EF0132), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x9455B949298CE805, 0xE73D3301518BE98A), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Uncorrelated, true, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xBDD3B4DEDBE336AA, 0xBFA4DCD50D535DEE), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Uncorrelated, true, + [new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) + ], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x22D4E970A028649A, 0x4F3FCB055FCED965), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xA346A91311D72114, 0x151A27A3FB0A1904), new AdvancedBlendEntry(AdvancedBlendOp.Minus, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.ReverseSubtractGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x8A307241061FACD6, 0xA39D1826440B8EE7), new AdvancedBlendEntry(AdvancedBlendOp.MinusClamped, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xB3BE569485EFFFE0, 0x0BA4E269B3CFB165), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x36FCA3277DC11822, 0x2BC0F6CAC2029672), new AdvancedBlendEntry(AdvancedBlendOp.Contrast, AdvancedBlendOverlap.Uncorrelated, true, + [new RgbFloat(2f, 2f, 2f), new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x4A6226AF2DE9BD7F, 0xEB890D7DA716F73A), new AdvancedBlendEntry(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0xF364CAA94E160FEB, 0xBF364512C72A3797), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x6BF791AB4AC19C87, 0x6FA17A994EA0FCDE), new AdvancedBlendEntry(AdvancedBlendOp.InvertOvg, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x053C75A0AE0BB222, 0x03C791FEEB59754C), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x25762AB40B6CBDE9, 0x595E9A968AC4F01C), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xC2D05E2DBE16955D, 0xB8659C7A3FCFA7CE), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Uncorrelated, true, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x223F220B8F74CBFB, 0xD3DD19D7C39209A5), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Uncorrelated, true, + [new RgbFloat(2f, 2f, 2f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xD0DAE57A9F1FE78A, 0x353796BCFB8CE30B), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x601C8CBEC07FF8FF, 0xB8E22882360E8695), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x3A55B7B78C76A7A8, 0x206F503B2D9FFEAA), new AdvancedBlendEntry(AdvancedBlendOp.Red, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x80BC65C7831388E5, 0xC652457B2C766AEC), new AdvancedBlendEntry(AdvancedBlendOp.Green, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x3D3A912E5833EE13, 0x307895951349EE33), new AdvancedBlendEntry(AdvancedBlendOp.Blue, AdvancedBlendOverlap.Uncorrelated, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x289105BE92E81803, 0xFD8F1F03D15C53B4), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Uncorrelated, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x007AE3BD140764EB, 0x0EE05A0D2E80BBAE), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Uncorrelated, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x77F7EE0DB3FDDB96, 0xDEA47C881306DB3E), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Uncorrelated, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x66F4E9A7D73CA157, 0x1486058A177DB11C), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Uncorrelated, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x593E9F331612D618, 0x9D217BEFA4EB919A), new AdvancedBlendEntry(AdvancedBlendOp.Src, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, + { new Hash128(0x0A5194C5E6891106, 0xDD8EC6586106557C), new AdvancedBlendEntry(AdvancedBlendOp.Dst, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x8D77173D5E06E916, 0x06AB190E7D10F4D4), new AdvancedBlendEntry(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x655B4EBC148981DA, 0x455999EF2B9BD28A), new AdvancedBlendEntry(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x98F5437D5F518929, 0xBFF4A6E83183DB63), new AdvancedBlendEntry(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x6ADDEFE3B9CEF2FD, 0xB6F6272AFECB1AAB), new AdvancedBlendEntry(AdvancedBlendOp.DstIn, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x80953F0953BF05B1, 0xD59ABFAA34F8196F), new AdvancedBlendEntry(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xA401D9AA2A39C121, 0xFC0C8005C22AD7E3), new AdvancedBlendEntry(AdvancedBlendOp.DstOut, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x06274FB7CA9CDD22, 0x6CE8188B1A9AB6EF), new AdvancedBlendEntry(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x0B079BE7F7F70817, 0xB72E7736CA51E321), new AdvancedBlendEntry(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, + { new Hash128(0x66215C99403CEDDE, 0x900B733D62204C48), new AdvancedBlendEntry(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x12DEF2AD900CAD6C, 0x58CF5CC3004910DF), new AdvancedBlendEntry(AdvancedBlendOp.Plus, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x272BA3A49F64DAE4, 0xAC70B96C00A99EAF), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x206C34AAA7D3F545, 0xDA4B30CACAA483A0), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x3D93494920D257BE, 0xDCC573BE1F5F4449), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Disjoint, true, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x0D7417D80191107B, 0xEAF40547827E005F), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xEC1B03E8C883F9C9, 0x2D3CA044C58C01B4), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x58A19A0135D68B31, 0x82F35B97AED068E5), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x20489F9AB36CC0E3, 0x20499874219E35EE), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xBB176935E5EE05BF, 0x95B26D4D30EA7A14), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Disjoint, true, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x5FF9393C908ACFED, 0x068B0BD875773ABF), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Disjoint, true, + [new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) + ], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x03181F8711C9802C, 0x6B02C7C6B224FE7B), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x2EE2209021F6B977, 0xF3AFA1491B8B89FC), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xD8BA4DD2EDE4DC9E, 0x01006114977CF715), new AdvancedBlendEntry(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0xD156B99835A2D8ED, 0x2D0BEE9E135EA7A7), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x20CE8C898ED4BE27, 0x1514900B6F5E8F66), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xCDE5F743820BA2D9, 0x917845FE2ECB083D), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xEB03DF4A0C1D14CD, 0xBAE2E831C6E8FFE4), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Disjoint, true, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x1DC9E49AABC779AC, 0x4053A1441EB713D3), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Disjoint, true, + [new RgbFloat(2f, 2f, 2f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xFBDEF776248F7B3E, 0xE05EEFD65AC47CB7), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x415A1A48E03AA6E7, 0x046D7EE33CA46B9A), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Disjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x59A6901EC9BB2041, 0x2F3E19CE5EEC3EBE), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Disjoint, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x044B2B6E105221DA, 0x3089BBC033F994AF), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Disjoint, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x374A5A24AA8E6CC5, 0x29930FAA6215FA2B), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Disjoint, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x30CD0F7AF0CF26F9, 0x06CCA6744DE7DCF5), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Disjoint, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x1A6C9A1F6FE494A5, 0xA0CFAF77617E54DD), new AdvancedBlendEntry(AdvancedBlendOp.Src, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, + { new Hash128(0x081AF6DAAB1C8717, 0xBFEDCE59AE3DC9AC), new AdvancedBlendEntry(AdvancedBlendOp.Dst, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x3518E44573AB68BA, 0xC96EE71AF9F8F546), new AdvancedBlendEntry(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xF89E81FE8D73C96F, 0x4583A04577A0F21C), new AdvancedBlendEntry(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xDF4026421CB61119, 0x14115A1F5139AFC7), new AdvancedBlendEntry(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MinimumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x91A20262C3E3A695, 0x0B3A102BFCDC6B1C), new AdvancedBlendEntry(AdvancedBlendOp.DstIn, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MinimumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x44F4C7CCFEB9EBFA, 0xF68394E6D56E5C2F), new AdvancedBlendEntry(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xB89F17C7021E9760, 0x430357EE0F7188EF), new AdvancedBlendEntry(AdvancedBlendOp.DstOut, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xDA2D20EA4242B8A0, 0x0D1EC05B72E3838F), new AdvancedBlendEntry(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x855DFEE1208D11B9, 0x77C6E3DDCFE30B85), new AdvancedBlendEntry(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, + { new Hash128(0x9B3808439683FD58, 0x123DCBE4705AB25E), new AdvancedBlendEntry(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xA42CF045C248A00A, 0x0C6C63C24EA0B0C1), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x320A83B6D00C8059, 0x796EDAB3EB7314BC), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x45253AC9ABFFC613, 0x8F92EA70195FB573), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Conjoint, true, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x1A5D263B588274B6, 0x167D305F6C794179), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x709C1A837FE966AC, 0x75D8CE49E8A78EDB), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x8265C26F85E4145F, 0x932E6CCBF37CB600), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x3F252B3FEF983F27, 0x9370D7EEFEFA1A9E), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x66A334A4AEA41078, 0xCB52254E1E395231), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Conjoint, true, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xFDD05C53B25F0035, 0xB7E3ECEE166C222F), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Conjoint, true, + [new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) + ], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x25D932A77FFED81A, 0xA50D797B0FCA94E8), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x4A953B6F5F7D341C, 0xDC05CFB50DDB5DC1), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x838CB660C4F41F6D, 0x9E7D958697543495), new AdvancedBlendEntry(AdvancedBlendOp.Invert, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x4DF6EC1348A8F797, 0xA128E0CD69DB5A64), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x178CDFAB9A015295, 0x2BF40EA72E596D57), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x338FC99050E56AFD, 0x2AF41CF82BE602BF), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x62E02ED60D1E978E, 0xBF726B3E68C11E4D), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Conjoint, true, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xFBAF92DD4C101502, 0x7AF2EDA6596B819D), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Conjoint, true, + [new RgbFloat(2f, 2f, 2f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x0EF1241F65D4B50A, 0xE8D85DFA6AEDDB84), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x77FE024B5C9D4A18, 0xF19D48A932F6860F), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Conjoint, true, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x9C88CBFA2E09D857, 0x0A0361704CBEEE1D), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Conjoint, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x5B94127FA190E640, 0x8D1FEFF837A91268), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Conjoint, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xB9C9105B7E063DDB, 0xF6A70E1D511B96FD), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Conjoint, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xF0751AAE332B3ED1, 0xC40146F5C83C2533), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Conjoint, true, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x579EB12F595F75AD, 0x151BF0504703B81B), new AdvancedBlendEntry(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xF9CA152C03AC8C62, 0x1581336205E5CF47), new AdvancedBlendEntry(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.DstAlphaGl, BlendFactor.ZeroGl)) }, + { new Hash128(0x98ACD8BB5E195D0F, 0x91F937672BE899F0), new AdvancedBlendEntry(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneMinusDstAlphaGl, BlendFactor.ZeroGl)) }, + { new Hash128(0xBF97F10FC301F44C, 0x75721789F0D48548), new AdvancedBlendEntry(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x1B982263B8B08A10, 0x3350C76E2E1B27DF), new AdvancedBlendEntry(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, + { new Hash128(0xFF20AC79F64EDED8, 0xAF9025B2D97B9273), new AdvancedBlendEntry(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneMinusDstAlphaGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x9FFD986600FB112F, 0x384FDDF4E060139A), new AdvancedBlendEntry(AdvancedBlendOp.PlusClamped, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x0425E40B5B8B3B52, 0x5880CBED7CAB631C), new AdvancedBlendEntry(AdvancedBlendOp.PlusClampedAlpha, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x16DAC8593F28623A, 0x233DBC82325B8AED), new AdvancedBlendEntry(AdvancedBlendOp.PlusDarker, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xB37E5F234B9F0948, 0xD5F957A2ECD98FD6), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xCA0FDADD1D20DBE3, 0x1A5C15CCBF1AC538), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x1C48304D73A9DF3A, 0x891DB93FA36E3450), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Uncorrelated, false, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x53200F2279B7FA39, 0x051C2462EBF6789C), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xB88BFB80714DCD5C, 0xEBD6938D744E6A41), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xE33DC2A25FC1A976, 0x08B3DBB1F3027D45), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xCE97E71615370316, 0xE131AE49D3A4D62B), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xE059FD265149B256, 0x94AF817AC348F61F), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Uncorrelated, false, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x16D31333D477E231, 0x9A98AAC84F72CC62), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Uncorrelated, false, + [new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) + ], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x47FC3B0776366D3C, 0xE96D9BD83B277874), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x7230401E3FEA1F3B, 0xF0D15F05D3D1E309), new AdvancedBlendEntry(AdvancedBlendOp.Minus, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.ReverseSubtractGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x188212F9303742F5, 0x100C51CB96E03591), new AdvancedBlendEntry(AdvancedBlendOp.MinusClamped, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x52B755D296B44DC5, 0x4003B87275625973), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xD873ED973ADF7EAD, 0x73E68B57D92034E7), new AdvancedBlendEntry(AdvancedBlendOp.Contrast, AdvancedBlendOverlap.Uncorrelated, false, + [new RgbFloat(2f, 2f, 2f), new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x471F9FA34B945ACB, 0x10524D1410B3C402), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x99F569454EA0EF32, 0x6FC70A8B3A07DC8B), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x5AD55F950067AC7E, 0x4BA60A4FBABDD0AC), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x03FF2C858C9C4C5B, 0xE95AE7F561FB60E9), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Uncorrelated, false, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x6DC0E510C7BCF9D2, 0xAE805D7CECDCB5C1), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Uncorrelated, false, + [new RgbFloat(2f, 2f, 2f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x44832332CED5C054, 0x2F8D5536C085B30A), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x4AB4D387618AC51F, 0x495B46E0555F4B32), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x99282B49405A01A8, 0xD6FA93F864F24A8E), new AdvancedBlendEntry(AdvancedBlendOp.Red, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x37B30C1064FBD23E, 0x5D068366F42317C2), new AdvancedBlendEntry(AdvancedBlendOp.Green, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x760FAE9D59E04BC2, 0xA40AD483EA01435E), new AdvancedBlendEntry(AdvancedBlendOp.Blue, AdvancedBlendOverlap.Uncorrelated, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0xE786950FD9D1C6EF, 0xF9FDD5AF6451D239), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Uncorrelated, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x052458BB4788B0CA, 0x8AC58FDCA1F45EF5), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Uncorrelated, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x6AFC3837D1D31920, 0xB9D49C2FE49642C6), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Uncorrelated, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0xAFC2911949317E01, 0xD5B63636F5CB3422), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Uncorrelated, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneMinusSrcAlphaGl)) }, + { new Hash128(0x13B46DF507CC2C53, 0x86DE26517E6BF0A7), new AdvancedBlendEntry(AdvancedBlendOp.Src, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, + { new Hash128(0x5C372442474BE410, 0x79ECD3C0C496EF2E), new AdvancedBlendEntry(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x74AAB45DBF5336E9, 0x01BFC4E181DAD442), new AdvancedBlendEntry(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x43239E282A36C85C, 0x36FB65560E46AD0F), new AdvancedBlendEntry(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x1A3BA8A7583B8F7A, 0xE64E41D548033180), new AdvancedBlendEntry(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x32BBB9859E9B565D, 0x3D5CE94FE55F18B5), new AdvancedBlendEntry(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0xD947A0766AE3C0FC, 0x391E5D53E86F4ED6), new AdvancedBlendEntry(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, + { new Hash128(0xBD9A7C08BDFD8CE6, 0x905407634901355E), new AdvancedBlendEntry(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x8395475BCB0D7A8C, 0x48AF5DD501D44A70), new AdvancedBlendEntry(AdvancedBlendOp.Plus, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x80AAC23FEBD4A3E5, 0xEA8C70F0B4DE52DE), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x2F3AD1B0F1B3FD09, 0xC0EBC784BFAB8EA3), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x52B54032F2F70BFF, 0xC941D6FDED674765), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Disjoint, false, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xCA7B86F72EC6A99B, 0x55868A131AFE359E), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x377919B60BD133CA, 0x0FD611627664EF40), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x9D4A0C5EE1153887, 0x7B869EBA218C589B), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x311F2A858545D123, 0xB4D09C802480AD62), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xCF78AA6A83AFA689, 0x9DC48B0C2182A3E1), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Disjoint, false, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xC3018CD6F1CF62D1, 0x016E32DD9087B1BB), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Disjoint, false, + [new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) + ], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x9CB62CE0E956EE29, 0x0FB67F503E60B3AD), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x3589A13C16EF3BFA, 0x15B29BFC91F3BDFB), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x3502CA5FB7529917, 0xFA51BFD0D1688071), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x62ADC25AD6D0A923, 0x76CB6D238276D3A3), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x09FDEB1116A9D52C, 0x85BB8627CD5C2733), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x0709FED1B65E18EB, 0x5BC3AA4D99EC19CF), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Disjoint, false, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xB18D28AE5DE4C723, 0xE820AA2B75C9C02E), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Disjoint, false, + [new RgbFloat(2f, 2f, 2f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x6743C51621497480, 0x4B164E40858834AE), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x63D1E181E34A2944, 0x1AE292C9D9F12819), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Disjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x079523298250BFF6, 0xC0C793510603CDB5), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Disjoint, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x4C9D0A973C805EA6, 0xD1FF59AD5156B93C), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Disjoint, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x1E914678F3057BCD, 0xD503AE389C12D229), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Disjoint, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0x9FDBADE5556C5311, 0x03F0CBC798FC5C94), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Disjoint, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xE39451534635403C, 0x606CC1CA1F452388), new AdvancedBlendEntry(AdvancedBlendOp.Src, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, + { new Hash128(0x1D39F0F0A1008AA6, 0xBFDF2B97E6C3F125), new AdvancedBlendEntry(AdvancedBlendOp.SrcOver, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xDB81BED30D5BDBEA, 0xAF0B2856EB93AD2C), new AdvancedBlendEntry(AdvancedBlendOp.DstOver, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x83F69CCF1D0A79B6, 0x70D31332797430AC), new AdvancedBlendEntry(AdvancedBlendOp.SrcIn, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MinimumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x7B87F807AB7A8F5C, 0x1241A2A01FB31771), new AdvancedBlendEntry(AdvancedBlendOp.SrcOut, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xF557172E20D5272D, 0xC1961F8C7A5D2820), new AdvancedBlendEntry(AdvancedBlendOp.SrcAtop, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0xA8476B3944DBBC9B, 0x84A2F6AF97B15FDF), new AdvancedBlendEntry(AdvancedBlendOp.DstAtop, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.OneGl, BlendFactor.ZeroGl)) }, + { new Hash128(0x3259602B55414DA3, 0x72AACCC00B5A9D10), new AdvancedBlendEntry(AdvancedBlendOp.Xor, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGBA, 0, 0, 0)) }, + { new Hash128(0xC0CB8C10F36EDCD6, 0x8C2D088AD8191E1C), new AdvancedBlendEntry(AdvancedBlendOp.Multiply, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x81806C451C6255EF, 0x5AA8AC9A08941A15), new AdvancedBlendEntry(AdvancedBlendOp.Screen, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xE55A6537F4568198, 0xCA8735390B799B19), new AdvancedBlendEntry(AdvancedBlendOp.Overlay, AdvancedBlendOverlap.Conjoint, false, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x5C044BA14536DDA3, 0xBCE0123ED7D510EC), new AdvancedBlendEntry(AdvancedBlendOp.Darken, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x6788346C405BE130, 0x372A4BB199C01F9F), new AdvancedBlendEntry(AdvancedBlendOp.Lighten, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x510EDC2A34E2856B, 0xE1727A407E294254), new AdvancedBlendEntry(AdvancedBlendOp.ColorDodge, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x4B7BE01BD398C7A8, 0x5BFF79BC00672C18), new AdvancedBlendEntry(AdvancedBlendOp.ColorBurn, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x213B43845540CFEC, 0xDA857411CF1CCFCE), new AdvancedBlendEntry(AdvancedBlendOp.HardLight, AdvancedBlendOverlap.Conjoint, false, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x765AFA6732E783F1, 0x8F1CABF1BC78A014), new AdvancedBlendEntry(AdvancedBlendOp.SoftLight, AdvancedBlendOverlap.Conjoint, false, + [new RgbFloat(0.2605f, 0.2605f, 0.2605f), new RgbFloat(-0.7817f, -0.7817f, -0.7817f), new RgbFloat(0.3022f, 0.3022f, 0.3022f), new RgbFloat(0.2192f, 0.2192f, 0.2192f), new RgbFloat(0.25f, 0.25f, 0.25f), new RgbFloat(16f, 16f, 16f), new RgbFloat(12f, 12f, 12f), new RgbFloat(3f, 3f, 3f) + ], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xA4A5DE1CC06F6CB1, 0xA0634A0011001709), new AdvancedBlendEntry(AdvancedBlendOp.Difference, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x81F32BD8816EA796, 0x697EE86683165170), new AdvancedBlendEntry(AdvancedBlendOp.Exclusion, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xB870C209EAA5F092, 0xAF5FD923909CAA1F), new AdvancedBlendEntry(AdvancedBlendOp.InvertRGB, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.AddGl, BlendFactor.ZeroGl, BlendFactor.OneGl)) }, + { new Hash128(0x3649A9F5C936FB83, 0xDD7C834897AA182A), new AdvancedBlendEntry(AdvancedBlendOp.LinearDodge, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xD72A2B1097A5995C, 0x3D41B2763A913654), new AdvancedBlendEntry(AdvancedBlendOp.LinearBurn, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x551E212B9F6C454A, 0xB0DFA05BEB3C37FA), new AdvancedBlendEntry(AdvancedBlendOp.VividLight, AdvancedBlendOverlap.Conjoint, false, + [new RgbFloat(0.5f, 0.5f, 0.5f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x681B5A313B7416BF, 0xCB1CBAEEB4D81500), new AdvancedBlendEntry(AdvancedBlendOp.LinearLight, AdvancedBlendOverlap.Conjoint, false, + [new RgbFloat(2f, 2f, 2f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x9343A18BD4B16777, 0xEDB4AC1C8972C3A4), new AdvancedBlendEntry(AdvancedBlendOp.PinLight, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xC960BF6D8519DE28, 0x78D8557FD405D119), new AdvancedBlendEntry(AdvancedBlendOp.HardMix, AdvancedBlendOverlap.Conjoint, false, [], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x65A7B01FDC73A46C, 0x297E096ED5CC4D8A), new AdvancedBlendEntry(AdvancedBlendOp.HslHue, AdvancedBlendOverlap.Conjoint, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0xD9C99BA4A6CDC13B, 0x3CFF0ACEDC2EE150), new AdvancedBlendEntry(AdvancedBlendOp.HslSaturation, AdvancedBlendOverlap.Conjoint, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x6BC00DA6EB922BD1, 0x5FD4C11F2A685234), new AdvancedBlendEntry(AdvancedBlendOp.HslColor, AdvancedBlendOverlap.Conjoint, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, + { new Hash128(0x8652300E32D93050, 0x9460E7B449132371), new AdvancedBlendEntry(AdvancedBlendOp.HslLuminosity, AdvancedBlendOverlap.Conjoint, false, + [new RgbFloat(0.3f, 0.59f, 0.11f)], new FixedFunctionAlpha(BlendUcodeEnable.EnableRGB, BlendOp.MaximumGl, BlendFactor.OneGl, BlendFactor.OneGl)) }, }; } } diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/UcodeAssembler.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/UcodeAssembler.cs index 8e0209062..138a83440 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/UcodeAssembler.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/Blender/UcodeAssembler.cs @@ -274,7 +274,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.Blender private void Assemble(CC cc, Instruction inst, Dest dest, OpAC srcA, OpBD srcB, OpAC srcC, OpBD srcD) { - (_code ??= new List()).Add(new UcodeOp(cc, inst, _constantIndex, dest, srcA, srcB, srcC, srcD).Word); + (_code ??= []).Add(new UcodeOp(cc, inst, _constantIndex, dest, srcA, srcB, srcC, srcD).Word); } public void SetConstant(int index, float r, float g, float b) diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs index 8a667b408..16a19debe 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs @@ -196,11 +196,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw int vertexInfoBinding = _vertexAsCompute.Reservations.VertexInfoConstantBufferBinding; BufferRange vertexInfoRange = new(_vacContext.VertexInfoBufferUpdater.Handle, 0, VertexInfoBuffer.RequiredSize); - _context.Renderer.Pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(vertexInfoBinding, vertexInfoRange) }); + _context.Renderer.Pipeline.SetUniformBuffers([new BufferAssignment(vertexInfoBinding, vertexInfoRange)]); int vertexDataBinding = _vertexAsCompute.Reservations.VertexOutputStorageBufferBinding; BufferRange vertexDataRange = _vacContext.GetVertexDataBufferRange(_vertexDataOffset, _vertexDataSize, write: true); - _context.Renderer.Pipeline.SetStorageBuffers(stackalloc[] { new BufferAssignment(vertexDataBinding, vertexDataRange) }); + _context.Renderer.Pipeline.SetStorageBuffers([new BufferAssignment(vertexDataBinding, vertexDataRange)]); _vacContext.VertexInfoBufferUpdater.Commit(); @@ -228,7 +228,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw int vertexInfoBinding = _vertexAsCompute.Reservations.VertexInfoConstantBufferBinding; BufferRange vertexInfoRange = new(_vacContext.VertexInfoBufferUpdater.Handle, 0, VertexInfoBuffer.RequiredSize); - _context.Renderer.Pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(vertexInfoBinding, vertexInfoRange) }); + _context.Renderer.Pipeline.SetUniformBuffers([new BufferAssignment(vertexInfoBinding, vertexInfoRange)]); int vertexDataBinding = _vertexAsCompute.Reservations.VertexOutputStorageBufferBinding; @@ -246,12 +246,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw BufferRange vertexBuffer = _vacContext.GetGeometryVertexDataBufferRange(_geometryVertexDataOffset, _geometryVertexDataSize, write: true); BufferRange indexBuffer = _vacContext.GetGeometryIndexDataBufferRange(_geometryIndexDataOffset, _geometryIndexDataSize, write: true); - _context.Renderer.Pipeline.SetStorageBuffers(stackalloc[] - { + _context.Renderer.Pipeline.SetStorageBuffers([ new BufferAssignment(vertexDataBinding, vertexDataRange), new BufferAssignment(geometryVbBinding, vertexBuffer), - new BufferAssignment(geometryIbBinding, indexBuffer), - }); + new BufferAssignment(geometryIbBinding, indexBuffer) + ]); _context.Renderer.Pipeline.DispatchCompute( BitUtils.DivRoundUp(primitivesCount, ComputeLocalSize), @@ -295,7 +294,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw _context.Renderer.Pipeline.SetProgram(_vertexPassthroughProgram); _context.Renderer.Pipeline.SetIndexBuffer(indexBuffer, IndexType.UInt); - _context.Renderer.Pipeline.SetStorageBuffers(stackalloc[] { new BufferAssignment(vertexDataBinding, vertexBuffer) }); + _context.Renderer.Pipeline.SetStorageBuffers([new BufferAssignment(vertexDataBinding, vertexBuffer)]); _context.Renderer.Pipeline.SetPrimitiveRestart(true, -1); _context.Renderer.Pipeline.SetPrimitiveTopology(GetGeometryOutputTopology(_geometryAsCompute.Info.GeometryVerticesPerPrimitive)); @@ -310,7 +309,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw BufferRange vertexDataRange = _vacContext.GetVertexDataBufferRange(_vertexDataOffset, _vertexDataSize, write: false); _context.Renderer.Pipeline.SetProgram(_vertexPassthroughProgram); - _context.Renderer.Pipeline.SetStorageBuffers(stackalloc[] { new BufferAssignment(vertexDataBinding, vertexDataRange) }); + _context.Renderer.Pipeline.SetStorageBuffers([new BufferAssignment(vertexDataBinding, vertexDataRange)]); _context.Renderer.Pipeline.Draw(_count, _instanceCount, 0, 0); } } diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/DrawManager.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/DrawManager.cs index 2537b79b7..a2f391f25 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/DrawManager.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/DrawManager.cs @@ -911,10 +911,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed scissorH = (int)MathF.Ceiling(scissorH * scale); } - Span> scissors = stackalloc Rectangle[] - { - new Rectangle(scissorX, scissorY, scissorW, scissorH), - }; + Span> scissors = + [ + new Rectangle(scissorX, scissorY, scissorW, scissorH) + ]; _context.Renderer.Pipeline.SetScissors(scissors); } diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs index c77f1b896..f50ec852e 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/StateUpdater.cs @@ -91,8 +91,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed // The vertex buffer state may be forced dirty when a indexed draw starts, the "VertexBufferStateIndex" // constant must be updated if modified. // The order of the other state updates doesn't matter. - _updateTracker = new StateUpdateTracker(new[] - { + _updateTracker = new StateUpdateTracker([ new StateUpdateCallbackEntry(UpdateVertexBufferState, nameof(ThreedClassState.VertexBufferDrawState), nameof(ThreedClassState.VertexBufferInstanced), @@ -207,8 +206,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed nameof(ThreedClassState.RtDepthStencilState), nameof(ThreedClassState.RtControl), nameof(ThreedClassState.RtDepthStencilSize), - nameof(ThreedClassState.RtDepthStencilEnable)), - }); + nameof(ThreedClassState.RtDepthStencilEnable)) + ]); } /// diff --git a/src/Ryujinx.Graphics.Gpu/GpuContext.cs b/src/Ryujinx.Graphics.Gpu/GpuContext.cs index 2833d836c..d1c608dd6 100644 --- a/src/Ryujinx.Graphics.Gpu/GpuContext.cs +++ b/src/Ryujinx.Graphics.Gpu/GpuContext.cs @@ -134,9 +134,9 @@ namespace Ryujinx.Graphics.Gpu HostInitalized = new ManualResetEvent(false); _gpuReadyEvent = new ManualResetEvent(false); - SyncActions = new List(); - SyncpointActions = new List(); - BufferMigrations = new List(); + SyncActions = []; + SyncpointActions = []; + BufferMigrations = []; DeferredActions = new Queue(); diff --git a/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs b/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs index bd77e3c8c..afdbcbd3e 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/AutoDeleteCache.cs @@ -112,10 +112,10 @@ namespace Ryujinx.Graphics.Gpu.Image /// public AutoDeleteCache() { - _textures = new LinkedList(); + _textures = []; - _shortCacheBuilder = new HashSet(); - _shortCache = new HashSet(); + _shortCacheBuilder = []; + _shortCache = []; _shortCacheLookup = new Dictionary(); } diff --git a/src/Ryujinx.Graphics.Gpu/Image/PoolCache.cs b/src/Ryujinx.Graphics.Gpu/Image/PoolCache.cs index 50872ab63..b9aa37fed 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/PoolCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/PoolCache.cs @@ -45,7 +45,7 @@ namespace Ryujinx.Graphics.Gpu.Image public PoolCache(GpuContext context) { _context = context; - _pools = new LinkedList(); + _pools = []; } /// diff --git a/src/Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs b/src/Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs index 836a3260c..c742e1796 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/SamplerDescriptor.cs @@ -10,8 +10,8 @@ namespace Ryujinx.Graphics.Gpu.Image /// struct SamplerDescriptor { - private static readonly float[] _f5ToF32ConversionLut = new float[] - { + private static readonly float[] _f5ToF32ConversionLut = + [ 0.0f, 0.055555556f, 0.1f, @@ -43,13 +43,13 @@ namespace Ryujinx.Graphics.Gpu.Image 0.45833334f, 0.46153846f, 0.4642857f, - 0.46666667f, - }; + 0.46666667f + ]; - private static readonly float[] _maxAnisotropyLut = new float[] - { - 1, 2, 4, 6, 8, 10, 12, 16, - }; + private static readonly float[] _maxAnisotropyLut = + [ + 1, 2, 4, 6, 8, 10, 12, 16 + ]; private const float Frac8ToF32 = 1.0f / 256.0f; diff --git a/src/Ryujinx.Graphics.Gpu/Image/Texture.cs b/src/Ryujinx.Graphics.Gpu/Image/Texture.cs index 51ce195f4..984d614d4 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/Texture.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/Texture.cs @@ -260,8 +260,8 @@ namespace Ryujinx.Graphics.Gpu.Image _viewStorage = this; - _views = new List(); - _poolOwners = new List(); + _views = []; + _poolOwners = []; } /// diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsArrayCache.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsArrayCache.cs index 88c87979c..17ed57d96 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsArrayCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsArrayCache.cs @@ -549,7 +549,7 @@ namespace Ryujinx.Graphics.Gpu.Image _channel = channel; _cacheFromBuffer = new Dictionary(); _cacheFromPool = new Dictionary(); - _lruCache = new LinkedList(); + _lruCache = []; } /// @@ -1116,7 +1116,7 @@ namespace Ryujinx.Graphics.Gpu.Image { if (key.MatchesPool(pool)) { - (keysToRemove ??= new()).Add(key); + (keysToRemove ??= []).Add(key); if (key.IsImage) { diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs index f96ddfb1b..aa1ac1d57 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureBindingsManager.cs @@ -103,11 +103,11 @@ namespace Ryujinx.Graphics.Gpu.Image for (int stage = 0; stage < stages; stage++) { - _textureBindings[stage] = Array.Empty(); - _imageBindings[stage] = Array.Empty(); + _textureBindings[stage] = []; + _imageBindings[stage] = []; } - _textureCounts = Array.Empty(); + _textureCounts = []; } /// diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs index 754bfead8..f3df8b072 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureCache.cs @@ -58,15 +58,15 @@ namespace Ryujinx.Graphics.Gpu.Image _context = context; _physicalMemory = physicalMemory; - _textures = new MultiRangeList(); - _partiallyMappedTextures = new HashSet(); + _textures = []; + _partiallyMappedTextures = []; _texturesLock = new ReaderWriterLockSlim(); _textureOverlaps = new Texture[OverlapsBufferInitialCapacity]; _overlapInfo = new OverlapInfo[OverlapsBufferInitialCapacity]; - _cache = new AutoDeleteCache(); + _cache = []; } /// @@ -892,7 +892,7 @@ namespace Ryujinx.Graphics.Gpu.Image // otherwise we only need the data that is copied from the existing texture, without loading the CPU data. bool updateNewTexture = texture.Width > overlap.Width || texture.Height > overlap.Height; - texture.InitializeGroup(true, true, new List()); + texture.InitializeGroup(true, true, []); texture.InitializeData(false, updateNewTexture); overlap.SynchronizeMemory(); @@ -947,7 +947,7 @@ namespace Ryujinx.Graphics.Gpu.Image bool hasLayerViews = false; bool hasMipViews = false; - List incompatibleOverlaps = new(); + List incompatibleOverlaps = []; for (int index = 0; index < overlapsCount; index++) { diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs index 00e4ac027..8c27e286a 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureGroup.cs @@ -1019,7 +1019,7 @@ namespace Ryujinx.Graphics.Gpu.Image int endOffset = _allOffsets[viewEnd] + _sliceSizes[lastLevel]; int size = endOffset - offset; - List result = new(); + List result = []; for (int i = 0; i < TextureRange.Count; i++) { @@ -1315,7 +1315,7 @@ namespace Ryujinx.Graphics.Gpu.Image if (_isBuffer) { - handles = Array.Empty(); + handles = []; } else if (!(_hasMipViews || _hasLayerViews)) { @@ -1339,7 +1339,7 @@ namespace Ryujinx.Graphics.Gpu.Image TextureGroupHandle groupHandle = new(this, 0, Storage.Size, _views, 0, 0, 0, _allOffsets.Length, cpuRegionHandles); - handles = new TextureGroupHandle[] { groupHandle }; + handles = [groupHandle]; } else { @@ -1355,7 +1355,7 @@ namespace Ryujinx.Graphics.Gpu.Image if (_is3D) { - List handlesList = new(); + List handlesList = []; for (int i = 0; i < levelHandles; i++) { @@ -1438,8 +1438,8 @@ namespace Ryujinx.Graphics.Gpu.Image // Get the location of each texture within its storage, so we can find the handles to apply the dependency to. // This can consist of multiple disjoint regions, for example if this is a mip slice of an array texture. - List<(int BaseHandle, int RegionCount)> targetRange = new(); - List<(int BaseHandle, int RegionCount)> otherRange = new(); + List<(int BaseHandle, int RegionCount)> targetRange = []; + List<(int BaseHandle, int RegionCount)> otherRange = []; EvaluateRelevantHandles(firstLayer, firstLevel, other.Info.GetSlices(), other.Info.Levels, (baseHandle, regionCount, split) => targetRange.Add((baseHandle, regionCount))); otherGroup.EvaluateRelevantHandles(other, (baseHandle, regionCount, split) => otherRange.Add((baseHandle, regionCount))); diff --git a/src/Ryujinx.Graphics.Gpu/Image/TextureGroupHandle.cs b/src/Ryujinx.Graphics.Gpu/Image/TextureGroupHandle.cs index 860922d59..fe22b9e63 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TextureGroupHandle.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TextureGroupHandle.cs @@ -134,8 +134,8 @@ namespace Ryujinx.Graphics.Gpu.Image Offset = offset; Size = (int)size; - Overlaps = new List(); - Dependencies = new List(); + Overlaps = []; + Dependencies = []; BaseSlice = baseSlice; SliceCount = sliceCount; diff --git a/src/Ryujinx.Graphics.Gpu/Image/TexturePool.cs b/src/Ryujinx.Graphics.Gpu/Image/TexturePool.cs index 3effc39b1..4a16fa90a 100644 --- a/src/Ryujinx.Graphics.Gpu/Image/TexturePool.cs +++ b/src/Ryujinx.Graphics.Gpu/Image/TexturePool.cs @@ -97,7 +97,7 @@ namespace Ryujinx.Graphics.Gpu.Image /// public TextureAliasList() { - _aliases = new List(); + _aliases = []; } /// diff --git a/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs b/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs index 6cc603b76..227ff1253 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs @@ -799,7 +799,7 @@ namespace Ryujinx.Graphics.Gpu.Memory try { - (_virtualDependencies ??= new()).Add(virtualBuffer); + (_virtualDependencies ??= []).Add(virtualBuffer); } finally { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs index e75495385..d02efcb29 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferCache.cs @@ -61,8 +61,8 @@ namespace Ryujinx.Graphics.Gpu.Memory _context = context; _physicalMemory = physicalMemory; - _buffers = new RangeList(); - _multiRangeBuffers = new MultiRangeList(); + _buffers = []; + _multiRangeBuffers = []; _bufferOverlaps = new Buffer[OverlapsBufferInitialCapacity]; @@ -395,7 +395,7 @@ namespace Ryujinx.Graphics.Gpu.Memory ulong dstOffset = 0; - HashSet physicalBuffers = new(); + HashSet physicalBuffers = []; for (int i = 0; i < virtualBuffer.Range.Count; i++) { @@ -1041,7 +1041,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { if (entry.Value.UnmappedSequence != entry.Value.Buffer.UnmappedSequence) { - (toDelete ??= new()).Add(entry.Key); + (toDelete ??= []).Add(entry.Key); } } diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs index a07e3445b..cb99b455b 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs @@ -141,9 +141,9 @@ namespace Ryujinx.Graphics.Gpu.Memory _gpUniformBuffers[index] = new BuffersPerStage(Constants.TotalGpUniformBuffers); } - _bufferTextures = new List(); - _bufferTextureArrays = new List>(); - _bufferImageArrays = new List>(); + _bufferTextures = []; + _bufferTextureArrays = []; + _bufferImageArrays = []; _ranges = new BufferAssignment[Constants.TotalGpUniformBuffers * Constants.ShaderStages]; } diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs index a800f7000..bccbdfd31 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs @@ -437,7 +437,7 @@ namespace Ryujinx.Graphics.Gpu.Memory if (_source == null) { // Create a new migration. - _source = new BufferMigration(new BufferMigrationSpan[] { span }, this, _context.SyncNumber); + _source = new BufferMigration([span], this, _context.SyncNumber); _context.RegisterBufferMigration(_source); } @@ -476,7 +476,7 @@ namespace Ryujinx.Graphics.Gpu.Memory lock (_lock) { BufferMigrationSpan span = new(_parent, _parent.GetSnapshotDisposeAction(), _parent.GetSnapshotFlushAction(), _source); - BufferMigration migration = new(new BufferMigrationSpan[] { span }, this, _context.SyncNumber); + BufferMigration migration = new([span], this, _context.SyncNumber); // Migration target is used to redirect flush actions to the latest range list, // so we don't need to set it here. (this range list is still the latest) diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs index 30a6fafbf..fab78971d 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferUpdater.cs @@ -74,7 +74,7 @@ namespace Ryujinx.Graphics.Gpu.Memory if (binding >= 0) { BufferRange range = new(_handle, 0, data.Length); - _renderer.Pipeline.SetUniformBuffers(stackalloc[] { new BufferAssignment(0, range) }); + _renderer.Pipeline.SetUniformBuffers([new BufferAssignment(0, range)]); } }; diff --git a/src/Ryujinx.Graphics.Gpu/Memory/CounterCache.cs b/src/Ryujinx.Graphics.Gpu/Memory/CounterCache.cs index 24966df41..2d67c2c28 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/CounterCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/CounterCache.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// public CounterCache() { - _items = new List(); + _items = []; } /// diff --git a/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs b/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs index f080f0e35..0bd715d89 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs @@ -458,7 +458,7 @@ namespace Ryujinx.Graphics.Gpu.Memory int pages = (int)((endVaRounded - va) / PageSize); - List regions = new(); + List regions = []; for (int page = 0; page < pages - 1; page++) { diff --git a/src/Ryujinx.Graphics.Gpu/Memory/MultiRangeBuffer.cs b/src/Ryujinx.Graphics.Gpu/Memory/MultiRangeBuffer.cs index 19ef56bb1..7252b5404 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/MultiRangeBuffer.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/MultiRangeBuffer.cs @@ -128,7 +128,7 @@ namespace Ryujinx.Graphics.Gpu.Memory /// Size of the range in bytes public void AddPhysicalDependency(Buffer buffer, ulong rangeAddress, ulong dstOffset, ulong rangeSize) { - (_dependencies ??= new()).Add(new(buffer, rangeAddress - buffer.Address, dstOffset, rangeSize)); + (_dependencies ??= []).Add(new(buffer, rangeAddress - buffer.Address, dstOffset, rangeSize)); buffer.AddVirtualDependency(this); } diff --git a/src/Ryujinx.Graphics.Gpu/Memory/UnmapEventArgs.cs b/src/Ryujinx.Graphics.Gpu/Memory/UnmapEventArgs.cs index 83fb1fcee..3e2782da6 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/UnmapEventArgs.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/UnmapEventArgs.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Graphics.Gpu.Memory public void AddRemapAction(Action action) { - RemapActions ??= new List(); + RemapActions ??= []; RemapActions.Add(action); } } diff --git a/src/Ryujinx.Graphics.Gpu/Memory/VirtualRangeCache.cs b/src/Ryujinx.Graphics.Gpu/Memory/VirtualRangeCache.cs index 964507a21..ac25b3e5d 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/VirtualRangeCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/VirtualRangeCache.cs @@ -74,7 +74,7 @@ namespace Ryujinx.Graphics.Gpu.Memory public VirtualRangeCache(MemoryManager memoryManager) { _memoryManager = memoryManager; - _virtualRanges = new RangeList(); + _virtualRanges = []; _virtualRangeOverlaps = new VirtualRange[BufferCache.OverlapsBufferInitialCapacity]; _deferredUnmaps = new ConcurrentQueue(); } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs b/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs index 5eebf85ad..ef314501d 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/CachedShaderBindings.cs @@ -48,10 +48,10 @@ namespace Ryujinx.Graphics.Gpu.Shader if (stage == null) { - TextureBindings[i] = Array.Empty(); - ImageBindings[i] = Array.Empty(); - ConstantBufferBindings[i] = Array.Empty(); - StorageBufferBindings[i] = Array.Empty(); + TextureBindings[i] = []; + ImageBindings[i] = []; + ConstantBufferBindings[i] = []; + StorageBufferBindings[i] = []; continue; } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ComputeShaderCacheHashTable.cs b/src/Ryujinx.Graphics.Gpu/Shader/ComputeShaderCacheHashTable.cs index 49516b310..5c8d5d5df 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ComputeShaderCacheHashTable.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ComputeShaderCacheHashTable.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Graphics.Gpu.Shader public ComputeShaderCacheHashTable() { _cache = new PartitionedHashTable(); - _shaderPrograms = new List(); + _shaderPrograms = []; } /// @@ -26,7 +26,7 @@ namespace Ryujinx.Graphics.Gpu.Shader /// Program to be added public void Add(CachedShaderProgram program) { - ShaderSpecializationList specList = _cache.GetOrAdd(program.Shaders[0].Code, new ShaderSpecializationList()); + ShaderSpecializationList specList = _cache.GetOrAdd(program.Shaders[0].Code, []); specList.Add(program); _shaderPrograms.Add(program); } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs index 237ae18ec..f8fa06482 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheGuestStorage.cs @@ -429,7 +429,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { if (!_toc.TryGetValue(hash, out List list)) { - _toc.Add(hash, list = new List()); + _toc.Add(hash, list = []); } list.Add(new TocMemoryEntry(dataOffset, codeSize, cb1DataSize, index)); diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 9424a1084..acd93e09e 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -657,7 +657,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache } CachedShaderStage[] shaders = new CachedShaderStage[guestShaders.Length]; - List translatedStages = new(); + List translatedStages = []; TranslatorContext previousStage = null; @@ -729,9 +729,9 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache ShaderProgram program = translatorContext.Translate(); - CachedShaderStage[] shaders = new[] { new CachedShaderStage(program.Info, shader.Code, shader.Cb1Data) }; + CachedShaderStage[] shaders = [new CachedShaderStage(program.Info, shader.Code, shader.Cb1Data)]; - _compilationQueue.Enqueue(new ProgramCompilation(new[] { program }, shaders, newSpecState, programIndex, isCompute: true)); + _compilationQueue.Enqueue(new ProgramCompilation([program], shaders, newSpecState, programIndex, isCompute: true)); } /// diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ShaderBinarySerializer.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ShaderBinarySerializer.cs index a18b5780e..8e8bf8e5e 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ShaderBinarySerializer.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ShaderBinarySerializer.cs @@ -31,7 +31,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache using MemoryStream input = new(code); using BinaryReader reader = new(input); - List output = new(); + List output = []; int count = reader.ReadInt32(); diff --git a/src/Ryujinx.Graphics.Gpu/Shader/HashTable/PartitionHashTable.cs b/src/Ryujinx.Graphics.Gpu/Shader/HashTable/PartitionHashTable.cs index 3971526e5..894621c22 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/HashTable/PartitionHashTable.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/HashTable/PartitionHashTable.cs @@ -122,7 +122,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.HashTable /// public PartitionHashTable() { - _buckets = Array.Empty(); + _buckets = []; } /// @@ -234,7 +234,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.HashTable } else { - (bucket.MoreEntries ??= new List()).Add(entry); + (bucket.MoreEntries ??= []).Add(entry); } } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/HashTable/PartitionedHashTable.cs b/src/Ryujinx.Graphics.Gpu/Shader/HashTable/PartitionedHashTable.cs index b4c18058c..b8d782554 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/HashTable/PartitionedHashTable.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/HashTable/PartitionedHashTable.cs @@ -104,7 +104,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.HashTable /// public PartitionedHashTable() { - _sizeTable = new List(); + _sizeTable = []; } /// diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs index 3ff92896b..e7e0ba154 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs @@ -224,7 +224,7 @@ namespace Ryujinx.Graphics.Gpu.Shader TranslatorContext translatorContext = DecodeComputeShader(gpuAccessor, _context.Capabilities.Api, gpuVa); TranslatedShader translatedShader = TranslateShader(_dumper, channel, translatorContext, cachedGuestCode, asCompute: false); - ShaderSource[] shaderSourcesArray = new ShaderSource[] { CreateShaderSource(translatedShader.Program) }; + ShaderSource[] shaderSourcesArray = [CreateShaderSource(translatedShader.Program)]; ShaderInfo info = ShaderInfoBuilder.BuildForCompute( _context, translatedShader.Program.Info, @@ -369,7 +369,7 @@ namespace Ryujinx.Graphics.Gpu.Shader bool geometryToCompute = ShouldConvertGeometryToCompute(_context, geometryHasStore); CachedShaderStage[] shaders = new CachedShaderStage[Constants.ShaderStages + 1]; - List shaderSources = new(); + List shaderSources = []; TranslatorContext previousStage = null; ShaderInfoBuilder infoBuilder = new(_context, transformFeedbackDescriptors != null, vertexToCompute); @@ -537,7 +537,7 @@ namespace Ryujinx.Graphics.Gpu.Shader ShaderSource source = new(program.Code, program.BinaryCode, ShaderStage.Compute, program.Language); ShaderInfo info = ShaderInfoBuilder.BuildForVertexAsCompute(_context, program.Info, context.GetVertexAsComputeInfo(), tfEnabled); - return new(_context.Renderer.CreateProgram(new[] { source }, info), program.Info, context.GetResourceReservations()); + return new(_context.Renderer.CreateProgram([source], info), program.Info, context.GetResourceReservations()); } /// @@ -802,7 +802,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { if (address == MemoryManager.PteUnmapped || size == 0) { - return Array.Empty(); + return []; } return memoryManager.Physical.GetSpan(address, size).ToArray(); diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCacheHashTable.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCacheHashTable.cs index 562837791..0b981ff58 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCacheHashTable.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCacheHashTable.cs @@ -192,7 +192,7 @@ namespace Ryujinx.Graphics.Gpu.Shader if (!_shaderPrograms.TryGetValue(idTable, out ShaderSpecializationList specList)) { - specList = new ShaderSpecializationList(); + specList = []; _shaderPrograms.Add(idTable, specList); } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs index 50061db60..8aa48e0ce 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs @@ -63,8 +63,8 @@ namespace Ryujinx.Graphics.Gpu.Shader for (int index = 0; index < totalSets; index++) { - _resourceDescriptors[index] = new(); - _resourceUsages[index] = new(); + _resourceDescriptors[index] = []; + _resourceUsages[index] = []; } AddDescriptor(SupportBufferStages, ResourceType.UniformBuffer, uniformSetIndex, 0, 1); @@ -302,7 +302,7 @@ namespace Ryujinx.Graphics.Gpu.Shader for (int index = oldLength; index <= setIndex; index++) { - _resourceDescriptors[index] = new(); + _resourceDescriptors[index] = []; } } @@ -323,7 +323,7 @@ namespace Ryujinx.Graphics.Gpu.Shader for (int index = oldLength; index <= setIndex; index++) { - _resourceUsages[index] = new(); + _resourceUsages[index] = []; } } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationList.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationList.cs index 25ed6e7ef..8549af715 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationList.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderSpecializationList.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Graphics.Gpu.Shader /// class ShaderSpecializationList : IEnumerable { - private readonly List _entries = new(); + private readonly List _entries = []; /// /// Adds a program to the list. diff --git a/src/Ryujinx.Graphics.Gpu/Synchronization/Syncpoint.cs b/src/Ryujinx.Graphics.Gpu/Synchronization/Syncpoint.cs index a1626c853..b2e0abf21 100644 --- a/src/Ryujinx.Graphics.Gpu/Synchronization/Syncpoint.cs +++ b/src/Ryujinx.Graphics.Gpu/Synchronization/Syncpoint.cs @@ -24,7 +24,7 @@ namespace Ryujinx.Graphics.Gpu.Synchronization public Syncpoint(uint id) { Id = id; - _waiters = new List(); + _waiters = []; } /// @@ -92,7 +92,7 @@ namespace Ryujinx.Graphics.Gpu.Synchronization } else { - expiredList ??= new List(); + expiredList ??= []; expiredList.Add(item); } -- 2.47.1 From a5dbcb75d025ddf1552d5745b4ae90b07bf77fd8 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:50:22 -0600 Subject: [PATCH 475/722] misc: chore: Use collection expressions in OpenGL project --- src/Ryujinx.Graphics.OpenGL/Effects/ShaderHelper.cs | 2 +- .../Effects/SmaaPostProcessingEffect.cs | 10 +++++----- src/Ryujinx.Graphics.OpenGL/Image/IntermmediatePool.cs | 2 +- .../Image/TextureCopyIncompatible.cs | 3 ++- src/Ryujinx.Graphics.OpenGL/Image/TextureView.cs | 8 ++++---- src/Ryujinx.Graphics.OpenGL/Pipeline.cs | 6 +++--- src/Ryujinx.Graphics.OpenGL/ResourcePool.cs | 2 +- src/Ryujinx.Graphics.OpenGL/Sync.cs | 2 +- 8 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/Ryujinx.Graphics.OpenGL/Effects/ShaderHelper.cs b/src/Ryujinx.Graphics.OpenGL/Effects/ShaderHelper.cs index 021388f81..ad0ccd23b 100644 --- a/src/Ryujinx.Graphics.OpenGL/Effects/ShaderHelper.cs +++ b/src/Ryujinx.Graphics.OpenGL/Effects/ShaderHelper.cs @@ -7,7 +7,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects { public static int CompileProgram(string shaderCode, ShaderType shaderType) { - return CompileProgram(new string[] { shaderCode }, shaderType); + return CompileProgram([shaderCode], shaderType); } public static int CompileProgram(string[] shaders, ShaderType shaderType) diff --git a/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs b/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs index a31c10891..27120a015 100644 --- a/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs +++ b/src/Ryujinx.Graphics.OpenGL/Effects/SmaaPostProcessingEffect.cs @@ -44,11 +44,11 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa { _renderer = renderer; - _edgeShaderPrograms = Array.Empty(); - _blendShaderPrograms = Array.Empty(); - _neighbourShaderPrograms = Array.Empty(); + _edgeShaderPrograms = []; + _blendShaderPrograms = []; + _neighbourShaderPrograms = []; - _qualities = new string[] { "SMAA_PRESET_LOW", "SMAA_PRESET_MEDIUM", "SMAA_PRESET_HIGH", "SMAA_PRESET_ULTRA" }; + _qualities = ["SMAA_PRESET_LOW", "SMAA_PRESET_MEDIUM", "SMAA_PRESET_HIGH", "SMAA_PRESET_ULTRA"]; Quality = quality; @@ -93,7 +93,7 @@ namespace Ryujinx.Graphics.OpenGL.Effects.Smaa string blendShaderData = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/smaa_blend.glsl"); string neighbourShaderData = EmbeddedResources.ReadAllText("Ryujinx.Graphics.OpenGL/Effects/Shaders/smaa_neighbour.glsl"); - string[] shaders = new string[] { presets, edgeShaderData }; + string[] shaders = [presets, edgeShaderData]; int edgeProgram = ShaderHelper.CompileProgram(shaders, ShaderType.ComputeShader); shaders[1] = blendShaderData; diff --git a/src/Ryujinx.Graphics.OpenGL/Image/IntermmediatePool.cs b/src/Ryujinx.Graphics.OpenGL/Image/IntermmediatePool.cs index 64ee73fbe..1bcc13ab4 100644 --- a/src/Ryujinx.Graphics.OpenGL/Image/IntermmediatePool.cs +++ b/src/Ryujinx.Graphics.OpenGL/Image/IntermmediatePool.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Graphics.OpenGL.Image public IntermediatePool(OpenGLRenderer renderer) { _renderer = renderer; - _entries = new List(); + _entries = []; } public TextureView GetOrCreateWithAtLeast( diff --git a/src/Ryujinx.Graphics.OpenGL/Image/TextureCopyIncompatible.cs b/src/Ryujinx.Graphics.OpenGL/Image/TextureCopyIncompatible.cs index 1a94660b5..648ba1bc2 100644 --- a/src/Ryujinx.Graphics.OpenGL/Image/TextureCopyIncompatible.cs +++ b/src/Ryujinx.Graphics.OpenGL/Image/TextureCopyIncompatible.cs @@ -190,7 +190,8 @@ void main() { int csHandle = GL.CreateShader(ShaderType.ComputeShader); - string[] formatTable = new[] { "r8ui", "r16ui", "r32ui", "rg8ui", "rg16ui", "rg32ui", "rgba8ui", "rgba16ui", "rgba32ui" }; + string[] formatTable = ["r8ui", "r16ui", "r32ui", "rg8ui", "rg16ui", "rg32ui", "rgba8ui", "rgba16ui", "rgba32ui" + ]; string srcFormat = formatTable[srcIndex]; string dstFormat = formatTable[dstIndex]; diff --git a/src/Ryujinx.Graphics.OpenGL/Image/TextureView.cs b/src/Ryujinx.Graphics.OpenGL/Image/TextureView.cs index 2c7b8f98c..84bb86a2d 100644 --- a/src/Ryujinx.Graphics.OpenGL/Image/TextureView.cs +++ b/src/Ryujinx.Graphics.OpenGL/Image/TextureView.cs @@ -67,13 +67,13 @@ namespace Ryujinx.Graphics.OpenGL.Image GL.BindTexture(target, Handle); - int[] swizzleRgba = new int[] - { + int[] swizzleRgba = + [ (int)Info.SwizzleR.Convert(), (int)Info.SwizzleG.Convert(), (int)Info.SwizzleB.Convert(), - (int)Info.SwizzleA.Convert(), - }; + (int)Info.SwizzleA.Convert() + ]; if (Info.Format == Format.A1B5G5R5Unorm) { diff --git a/src/Ryujinx.Graphics.OpenGL/Pipeline.cs b/src/Ryujinx.Graphics.OpenGL/Pipeline.cs index 83319ea6d..36db655ad 100644 --- a/src/Ryujinx.Graphics.OpenGL/Pipeline.cs +++ b/src/Ryujinx.Graphics.OpenGL/Pipeline.cs @@ -35,8 +35,8 @@ namespace Ryujinx.Graphics.OpenGL private bool _stencilTestEnable; private bool _cullEnable; - private float[] _viewportArray = Array.Empty(); - private double[] _depthRangeArray = Array.Empty(); + private float[] _viewportArray = []; + private double[] _depthRangeArray = []; private int _boundDrawFramebuffer; private int _boundReadFramebuffer; @@ -111,7 +111,7 @@ namespace Ryujinx.Graphics.OpenGL (componentMask & 4) != 0, (componentMask & 8) != 0); - float[] colors = new float[] { color.Red, color.Green, color.Blue, color.Alpha }; + float[] colors = [color.Red, color.Green, color.Blue, color.Alpha]; if (layer != 0 || layerCount != _framebuffer.GetColorLayerCount(index)) { diff --git a/src/Ryujinx.Graphics.OpenGL/ResourcePool.cs b/src/Ryujinx.Graphics.OpenGL/ResourcePool.cs index c8ff30a07..352728813 100644 --- a/src/Ryujinx.Graphics.OpenGL/ResourcePool.cs +++ b/src/Ryujinx.Graphics.OpenGL/ResourcePool.cs @@ -34,7 +34,7 @@ namespace Ryujinx.Graphics.OpenGL { if (!_textures.TryGetValue(view.Info, out List list)) { - list = new List(); + list = []; _textures.Add(view.Info, list); } diff --git a/src/Ryujinx.Graphics.OpenGL/Sync.cs b/src/Ryujinx.Graphics.OpenGL/Sync.cs index e8f7ebc00..9fd7db9d1 100644 --- a/src/Ryujinx.Graphics.OpenGL/Sync.cs +++ b/src/Ryujinx.Graphics.OpenGL/Sync.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Graphics.OpenGL private ulong _firstHandle = 0; private static ClientWaitSyncFlags SyncFlags => HwCapabilities.RequiresSyncFlush ? ClientWaitSyncFlags.None : ClientWaitSyncFlags.SyncFlushCommandsBit; - private readonly List _handles = new(); + private readonly List _handles = []; public void Create(ulong id) { -- 2.47.1 From 95f9e548cae3358a1b79e121a8c8851749040a6d Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:50:50 -0600 Subject: [PATCH 476/722] misc: chore: Use collection expressions in Shader project --- .../CodeGen/Spirv/CodeGenContext.cs | 4 +- .../CodeGen/Spirv/Declarations.cs | 2 +- .../CodeGen/Spirv/Instructions.cs | 20 ++++---- src/Ryujinx.Graphics.Shader/Decoders/Block.cs | 8 ++-- .../Decoders/DecodedFunction.cs | 2 +- .../Decoders/DecodedProgram.cs | 2 +- .../Decoders/Decoder.cs | 8 ++-- .../Instructions/InstEmitHelper.cs | 48 +++++++++---------- .../Instructions/InstEmitSurface.cs | 8 ++-- .../Instructions/InstEmitTexture.cs | 20 ++++---- .../IntermediateRepresentation/BasicBlock.cs | 6 +-- .../IntermediateRepresentation/Operand.cs | 2 +- .../IntermediateRepresentation/Operation.cs | 16 +++---- .../IntermediateRepresentation/PhiNode.cs | 4 +- .../StructuredIr/AstBlock.cs | 2 +- .../StructuredIr/AstOperand.cs | 4 +- .../StructuredIr/GotoElimination.cs | 2 +- .../StructuredIr/StructuredFunction.cs | 2 +- .../StructuredIr/StructuredProgram.cs | 5 +- .../StructuredIr/StructuredProgramContext.cs | 12 ++--- .../StructuredIr/StructuredProgramInfo.cs | 4 +- src/Ryujinx.Graphics.Shader/SupportBuffer.cs | 7 ++- .../Translation/AttributeUsage.cs | 4 +- .../Translation/ControlFlowGraph.cs | 4 +- .../Translation/EmitterContext.cs | 12 ++--- .../Translation/EmitterContextInsts.cs | 8 ++-- .../Translation/FunctionMatch.cs | 46 +++++++++--------- .../Optimizations/DoubleToFloat.cs | 4 +- .../Optimizations/GlobalToStorage.cs | 20 ++++---- .../Translation/RegisterUsage.cs | 4 +- .../Translation/ResourceManager.cs | 28 +++++------ .../Transforms/SharedAtomicSignedCas.cs | 2 +- .../Transforms/SharedStoreSmallIntCas.cs | 2 +- .../Translation/Transforms/ShufflePass.cs | 2 +- .../Translation/Transforms/TexturePass.cs | 33 ++++++------- .../Translation/Transforms/VertexToCompute.cs | 14 +++--- .../Translation/TranslatorContext.cs | 24 ++++------ .../VertexInfoBuffer.cs | 7 ++- 38 files changed, 198 insertions(+), 204 deletions(-) diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs index f623f2451..5abbf1fa8 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/CodeGenContext.cs @@ -50,7 +50,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private class BlockState { private int _entryCount; - private readonly List _labels = new(); + private readonly List _labels = []; public Instruction GetNextLabel(CodeGenContext context) { @@ -147,7 +147,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv public Instruction[] GetMainInterface() { - List mainInterface = new(); + List mainInterface = []; mainInterface.AddRange(Inputs.Values); mainInterface.AddRange(Outputs.Values); diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs index 0b2ad41fb..c0a597a10 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Declarations.cs @@ -81,7 +81,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv private static void DeclareBuffers(CodeGenContext context, IEnumerable buffers, bool isBuffer) { - HashSet decoratedTypes = new(); + HashSet decoratedTypes = []; foreach (BufferDefinition buffer in buffers) { diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs index 9b00f7edb..39b27a3e1 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Spirv/Instructions.cs @@ -1242,11 +1242,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv if (hasDerivatives) { - derivatives = new[] - { + derivatives = + [ AssembleDerivativesVector(coordsCount), // dPdx - AssembleDerivativesVector(coordsCount), // dPdy - }; + AssembleDerivativesVector(coordsCount) // dPdy + ]; } SpvInstruction sample = null; @@ -1286,17 +1286,17 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv if (hasOffset) { - offsets = new[] { AssembleOffsetVector(coordsCount) }; + offsets = [AssembleOffsetVector(coordsCount)]; } else if (hasOffsets) { - offsets = new[] - { + offsets = + [ AssembleOffsetVector(coordsCount), AssembleOffsetVector(coordsCount), AssembleOffsetVector(coordsCount), - AssembleOffsetVector(coordsCount), - }; + AssembleOffsetVector(coordsCount) + ]; } SpvInstruction lodBias = null; @@ -1327,7 +1327,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv compIdx = Src(AggregateType.S32); } - List operandsList = new(); + List operandsList = []; ImageOperandsMask operandsMask = ImageOperandsMask.MaskNone; if (hasLodBias) diff --git a/src/Ryujinx.Graphics.Shader/Decoders/Block.cs b/src/Ryujinx.Graphics.Shader/Decoders/Block.cs index 1a694898b..9264d15b9 100644 --- a/src/Ryujinx.Graphics.Shader/Decoders/Block.cs +++ b/src/Ryujinx.Graphics.Shader/Decoders/Block.cs @@ -45,11 +45,11 @@ namespace Ryujinx.Graphics.Shader.Decoders { Address = address; - Predecessors = new List(); - Successors = new List(); + Predecessors = []; + Successors = []; - OpCodes = new List(); - PushOpCodes = new List(); + OpCodes = []; + PushOpCodes = []; SyncTargets = new Dictionary(); } diff --git a/src/Ryujinx.Graphics.Shader/Decoders/DecodedFunction.cs b/src/Ryujinx.Graphics.Shader/Decoders/DecodedFunction.cs index 49cd3a30a..ce702b2ab 100644 --- a/src/Ryujinx.Graphics.Shader/Decoders/DecodedFunction.cs +++ b/src/Ryujinx.Graphics.Shader/Decoders/DecodedFunction.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Graphics.Shader.Decoders public DecodedFunction(ulong address) { Address = address; - _callers = new HashSet(); + _callers = []; Type = FunctionType.User; Id = -1; } diff --git a/src/Ryujinx.Graphics.Shader/Decoders/DecodedProgram.cs b/src/Ryujinx.Graphics.Shader/Decoders/DecodedProgram.cs index fdf3eacc3..be5d0a81b 100644 --- a/src/Ryujinx.Graphics.Shader/Decoders/DecodedProgram.cs +++ b/src/Ryujinx.Graphics.Shader/Decoders/DecodedProgram.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Graphics.Shader.Decoders { MainFunction = mainFunction; _functions = functions; - _functionsWithId = new(); + _functionsWithId = []; AttributeUsage = attributeUsage; UsedFeatures = usedFeatures; ClipDistancesWritten = clipDistancesWritten; diff --git a/src/Ryujinx.Graphics.Shader/Decoders/Decoder.cs b/src/Ryujinx.Graphics.Shader/Decoders/Decoder.cs index d9f4dd5eb..72e934a39 100644 --- a/src/Ryujinx.Graphics.Shader/Decoders/Decoder.cs +++ b/src/Ryujinx.Graphics.Shader/Decoders/Decoder.cs @@ -66,7 +66,7 @@ namespace Ryujinx.Graphics.Shader.Decoders while (functionsQueue.TryDequeue(out DecodedFunction currentFunction)) { - List blocks = new(); + List blocks = []; Queue workQueue = new(); Dictionary visited = new(); @@ -520,7 +520,7 @@ namespace Ryujinx.Graphics.Shader.Decoders if (lastOp.Name == InstName.Brx && block.Successors.Count == (hasNext ? 1 : 0)) { - HashSet visited = new(); + HashSet visited = []; InstBrx opBrx = new(lastOp.RawOpCode); ulong baseOffset = lastOp.GetAbsoluteAddress(); @@ -566,7 +566,7 @@ namespace Ryujinx.Graphics.Shader.Decoders // On a successful match, "BaseOffset" is the offset in bytes where the jump offsets are // located on the constant buffer, and "UpperBound" is the total number of offsets for the BRX, minus 1. - HashSet visited = new(); + HashSet visited = []; BlockLocation ldcLocation = FindFirstRegWrite(visited, new BlockLocation(block, block.OpCodes.Count - 1), brxReg); if (ldcLocation.Block == null || ldcLocation.Block.OpCodes[ldcLocation.Index].Name != InstName.Ldc) @@ -752,7 +752,7 @@ namespace Ryujinx.Graphics.Shader.Decoders Block target = blocks[pushOp.GetAbsoluteAddress()]; Stack workQueue = new(); - HashSet visited = new(); + HashSet visited = []; Stack<(ulong, MergeType)> branchStack = new(); void Push(PathBlockState pbs) diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitHelper.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitHelper.cs index 8638fb8f2..d3623ff6f 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitHelper.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitHelper.cs @@ -107,11 +107,11 @@ namespace Ryujinx.Graphics.Shader.Instructions ushort low = (ushort)(immH0 << 6); ushort high = (ushort)(immH1 << 6); - return new Operand[] - { + return + [ ConstF((float)Unsafe.As(ref low)), - ConstF((float)Unsafe.As(ref high)), - }; + ConstF((float)Unsafe.As(ref high)) + ]; } public static Operand[] GetHalfSrc(EmitterContext context, int imm32) @@ -119,11 +119,11 @@ namespace Ryujinx.Graphics.Shader.Instructions ushort low = (ushort)imm32; ushort high = (ushort)(imm32 >> 16); - return new Operand[] - { + return + [ ConstF((float)Unsafe.As(ref low)), - ConstF((float)Unsafe.As(ref high)), - }; + ConstF((float)Unsafe.As(ref high)) + ]; } public static Operand[] FPAbsNeg(EmitterContext context, Operand[] operands, bool abs, bool neg) @@ -140,22 +140,22 @@ namespace Ryujinx.Graphics.Shader.Instructions { return swizzle switch { - HalfSwizzle.F16 => new Operand[] - { - context.UnpackHalf2x16Low (src), - context.UnpackHalf2x16High(src), - }, - HalfSwizzle.F32 => new Operand[] { src, src }, - HalfSwizzle.H0H0 => new Operand[] - { - context.UnpackHalf2x16Low(src), - context.UnpackHalf2x16Low(src), - }, - HalfSwizzle.H1H1 => new Operand[] - { - context.UnpackHalf2x16High(src), - context.UnpackHalf2x16High(src), - }, + HalfSwizzle.F16 => + [ + context.UnpackHalf2x16Low (src), + context.UnpackHalf2x16High(src) + ], + HalfSwizzle.F32 => [src, src], + HalfSwizzle.H0H0 => + [ + context.UnpackHalf2x16Low(src), + context.UnpackHalf2x16Low(src) + ], + HalfSwizzle.H1H1 => + [ + context.UnpackHalf2x16High(src), + context.UnpackHalf2x16High(src) + ], _ => throw new ArgumentException($"Invalid swizzle \"{swizzle}\"."), }; } diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs index 383e82c69..946dcc02e 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs @@ -221,7 +221,7 @@ namespace Ryujinx.Graphics.Shader.Instructions Operand d = Register(dest, RegisterType.Gpr); - List sourcesList = new(); + List sourcesList = []; if (isBindless) { @@ -328,7 +328,7 @@ namespace Ryujinx.Graphics.Shader.Instructions return context.Copy(Register(srcA++, RegisterType.Gpr)); } - List sourcesList = new(); + List sourcesList = []; if (isBindless) { @@ -500,7 +500,7 @@ namespace Ryujinx.Graphics.Shader.Instructions return context.Copy(Register(srcB++, RegisterType.Gpr)); } - List sourcesList = new(); + List sourcesList = []; if (isBindless) { @@ -605,7 +605,7 @@ namespace Ryujinx.Graphics.Shader.Instructions return context.Copy(Register(srcB++, RegisterType.Gpr)); } - List sourcesList = new(); + List sourcesList = []; if (isBindless) { diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitTexture.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitTexture.cs index 52a004c0e..7499f12d8 100644 --- a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitTexture.cs +++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitTexture.cs @@ -12,8 +12,8 @@ namespace Ryujinx.Graphics.Shader.Instructions { private static readonly int[][] _maskLut = new int[][] { - new int[] { 0b0001, 0b0010, 0b0100, 0b1000, 0b0011, 0b1001, 0b1010, 0b1100 }, - new int[] { 0b0111, 0b1011, 0b1101, 0b1110, 0b1111, 0b0000, 0b0000, 0b0000 }, + [0b0001, 0b0010, 0b0100, 0b1000, 0b0011, 0b1001, 0b1010, 0b1100], [0b0111, 0b1011, 0b1101, 0b1110, 0b1111, 0b0000, 0b0000, 0b0000 + ], }; public const bool Sample1DAs2D = true; @@ -202,7 +202,7 @@ namespace Ryujinx.Graphics.Shader.Instructions Operand arrayIndex = isArray ? Ra() : null; - List sourcesList = new(); + List sourcesList = []; if (isBindless) { @@ -339,7 +339,7 @@ namespace Ryujinx.Graphics.Shader.Instructions return; } - List sourcesList = new(); + List sourcesList = []; Operand Ra() { @@ -605,8 +605,8 @@ namespace Ryujinx.Graphics.Shader.Instructions Operand[] sources = sourcesList.ToArray(); - Operand[] rd0 = new Operand[2] { ConstF(0), ConstF(0) }; - Operand[] rd1 = new Operand[2] { ConstF(0), ConstF(0) }; + Operand[] rd0 = [ConstF(0), ConstF(0)]; + Operand[] rd1 = [ConstF(0), ConstF(0)]; int handle = imm; int componentMask = _maskLut[dest2 == RegisterConsts.RegisterZeroIndex ? 0 : 1][writeMask]; @@ -701,7 +701,7 @@ namespace Ryujinx.Graphics.Shader.Instructions Operand arrayIndex = isArray ? Ra() : null; - List sourcesList = new(); + List sourcesList = []; SamplerType type = ConvertSamplerType(dimensions); TextureFlags flags = TextureFlags.Gather; @@ -835,7 +835,7 @@ namespace Ryujinx.Graphics.Shader.Instructions TextureFlags flags = TextureFlags.None; - List sourcesList = new(); + List sourcesList = []; if (isBindless) { @@ -963,7 +963,7 @@ namespace Ryujinx.Graphics.Shader.Instructions TextureFlags flags = TextureFlags.Derivatives; - List sourcesList = new(); + List sourcesList = []; if (isBindless) { @@ -1076,7 +1076,7 @@ namespace Ryujinx.Graphics.Shader.Instructions return context.Copy(Register(srcA++, RegisterType.Gpr)); } - List sourcesList = new(); + List sourcesList = []; if (isBindless) { diff --git a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/BasicBlock.cs b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/BasicBlock.cs index 637e120e1..d3eae3108 100644 --- a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/BasicBlock.cs +++ b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/BasicBlock.cs @@ -34,11 +34,11 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation public BasicBlock() { - Operations = new LinkedList(); + Operations = []; - Predecessors = new List(); + Predecessors = []; - DominanceFrontiers = new HashSet(); + DominanceFrontiers = []; } public BasicBlock(int index) : this() diff --git a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operand.cs b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operand.cs index 6648457f0..19e65951a 100644 --- a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operand.cs +++ b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operand.cs @@ -20,7 +20,7 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation private Operand() { - UseOps = new HashSet(); + UseOps = []; } public Operand(OperandType type) : this() diff --git a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs index 713e8a4fb..dc2f56e7e 100644 --- a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs +++ b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs @@ -27,11 +27,11 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation value.AsgOp = this; } - _dests = new[] { value }; + _dests = [value]; } else { - _dests = Array.Empty(); + _dests = []; } } } @@ -82,7 +82,7 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation } else { - _dests = Array.Empty(); + _dests = []; } } @@ -94,11 +94,11 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation { dest.AsgOp = this; - _dests = new[] { dest }; + _dests = [dest]; } else { - _dests = Array.Empty(); + _dests = []; } } @@ -111,11 +111,11 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation { dest.AsgOp = this; - _dests = new[] { dest }; + _dests = [dest]; } else { - _dests = Array.Empty(); + _dests = []; } } @@ -258,7 +258,7 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation source.UseOps.Add(this); } - _sources = new Operand[] { source }; + _sources = [source]; } public void TurnDoubleIntoFloat() diff --git a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/PhiNode.cs b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/PhiNode.cs index f4c4fef42..a32b2e9ee 100644 --- a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/PhiNode.cs +++ b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/PhiNode.cs @@ -35,9 +35,9 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation public PhiNode(Operand dest) { - _blocks = new HashSet(); + _blocks = []; - _sources = new List(); + _sources = []; dest.AsgOp = this; diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/AstBlock.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/AstBlock.cs index 826dbff88..97c0f005e 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/AstBlock.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/AstBlock.cs @@ -41,7 +41,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr Type = type; Condition = condition; - _nodes = new LinkedList(); + _nodes = []; } public void Add(IAstNode node) diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/AstOperand.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/AstOperand.cs index b64b96b8d..28aad589f 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/AstOperand.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/AstOperand.cs @@ -17,8 +17,8 @@ namespace Ryujinx.Graphics.Shader.StructuredIr private AstOperand() { - Defs = new HashSet(); - Uses = new HashSet(); + Defs = []; + Uses = []; VarType = AggregateType.S32; } diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/GotoElimination.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/GotoElimination.cs index 3ca1266f6..687e5942d 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/GotoElimination.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/GotoElimination.cs @@ -429,7 +429,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr { AstBlock block = bottom; - List path = new(); + List path = []; while (block != top) { diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredFunction.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredFunction.cs index aa5e13867..79fba17cd 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredFunction.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredFunction.cs @@ -29,7 +29,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr InArguments = inArguments; OutArguments = outArguments; - Locals = new HashSet(); + Locals = []; } public AggregateType GetArgumentType(int index) diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs index a1aef7f97..1ae669aa9 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs @@ -237,7 +237,8 @@ namespace Ryujinx.Graphics.Shader.StructuredIr dest.VarType = destElemType; - context.AddNode(new AstAssignment(dest, new AstOperation(Instruction.VectorExtract, StorageKind.None, false, new[] { destVec, index }, 2))); + context.AddNode(new AstAssignment(dest, new AstOperation(Instruction.VectorExtract, StorageKind.None, false, + [destVec, index], 2))); } } else if (operation.Dest != null) @@ -354,7 +355,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr private static AggregateType GetVarTypeFromUses(Operand dest) { - HashSet visited = new(); + HashSet visited = []; Queue pending = new(); diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs index c26086c72..a5887e80d 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs @@ -70,7 +70,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr AggregateType[] inArguments, AggregateType[] outArguments) { - _loopTails = new HashSet(); + _loopTails = []; _blockStack = new Stack<(AstBlock, int, int)>(); @@ -78,7 +78,7 @@ namespace Ryujinx.Graphics.Shader.StructuredIr _gotoTempAsgs = new Dictionary(); - _gotos = new List(); + _gotos = []; _currBlock = new AstBlock(AstBlockType.Main); @@ -314,13 +314,13 @@ namespace Ryujinx.Graphics.Shader.StructuredIr ResourceManager.SetUsedConstantBufferBinding(binding); - IAstNode[] sources = new IAstNode[] - { + IAstNode[] sources = + [ new AstOperand(OperandType.Constant, binding), new AstOperand(OperandType.Constant, 0), new AstOperand(OperandType.Constant, vecIndex), - new AstOperand(OperandType.Constant, elemIndex), - }; + new AstOperand(OperandType.Constant, elemIndex) + ]; return new AstOperation(Instruction.Load, StorageKind.ConstantBuffer, false, sources, sources.Length); } diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs index 585497ed3..2f8675069 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs @@ -12,9 +12,9 @@ namespace Ryujinx.Graphics.Shader.StructuredIr public StructuredProgramInfo(bool precise) { - Functions = new List(); + Functions = []; - IoDefinitions = new HashSet(); + IoDefinitions = []; if (precise) { diff --git a/src/Ryujinx.Graphics.Shader/SupportBuffer.cs b/src/Ryujinx.Graphics.Shader/SupportBuffer.cs index d4d3cbf8f..fb624d624 100644 --- a/src/Ryujinx.Graphics.Shader/SupportBuffer.cs +++ b/src/Ryujinx.Graphics.Shader/SupportBuffer.cs @@ -72,8 +72,7 @@ namespace Ryujinx.Graphics.Shader internal static StructureType GetStructureType() { - return new StructureType(new[] - { + return new StructureType([ new StructureField(AggregateType.U32, "alpha_test"), new StructureField(AggregateType.Array | AggregateType.U32, "is_bgra", FragmentIsBgraCount), new StructureField(AggregateType.Vector4 | AggregateType.FP32, "viewport_inverse"), @@ -81,8 +80,8 @@ namespace Ryujinx.Graphics.Shader new StructureField(AggregateType.S32, "frag_scale_count"), new StructureField(AggregateType.Array | AggregateType.FP32, "render_scale", RenderScaleMaxCount), new StructureField(AggregateType.Vector4 | AggregateType.S32, "tfe_offset"), - new StructureField(AggregateType.S32, "tfe_vertex_count"), - }); + new StructureField(AggregateType.S32, "tfe_vertex_count") + ]); } public Vector4 FragmentAlphaTest; diff --git a/src/Ryujinx.Graphics.Shader/Translation/AttributeUsage.cs b/src/Ryujinx.Graphics.Shader/Translation/AttributeUsage.cs index 9dab9fdf9..5504ef4ed 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/AttributeUsage.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/AttributeUsage.cs @@ -25,8 +25,8 @@ namespace Ryujinx.Graphics.Shader.Translation { _gpuAccessor = gpuAccessor; - UsedInputAttributesPerPatch = new(); - UsedOutputAttributesPerPatch = new(); + UsedInputAttributesPerPatch = []; + UsedOutputAttributesPerPatch = []; } public void SetInputUserAttribute(int index, int component) diff --git a/src/Ryujinx.Graphics.Shader/Translation/ControlFlowGraph.cs b/src/Ryujinx.Graphics.Shader/Translation/ControlFlowGraph.cs index 9b07c28f1..e14044256 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/ControlFlowGraph.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/ControlFlowGraph.cs @@ -13,7 +13,7 @@ namespace Ryujinx.Graphics.Shader.Translation { Blocks = blocks; - HashSet visited = new(); + HashSet visited = []; Stack blockStack = new(); @@ -52,7 +52,7 @@ namespace Ryujinx.Graphics.Shader.Translation { Dictionary labels = new(); - List blocks = new(); + List blocks = []; BasicBlock currentBlock = null; diff --git a/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs b/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs index 25ecb8621..94448626f 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs @@ -54,7 +54,7 @@ namespace Ryujinx.Graphics.Shader.Translation public EmitterContext() { - _operations = new List(); + _operations = []; _labels = new Dictionary(); } @@ -127,8 +127,8 @@ namespace Ryujinx.Graphics.Shader.Translation TextureFlags.IntCoords, ResourceManager.Reservations.GetIndexBufferTextureSetAndBinding(), 1, - new[] { vertexIndexVr }, - new[] { this.IAdd(ibBaseOffset, outputVertexOffset) }); + [vertexIndexVr], + [this.IAdd(ibBaseOffset, outputVertexOffset)]); this.Store(StorageKind.LocalMemory, ResourceManager.LocalVertexIndexVertexRateMemoryId, this.IAdd(firstVertex, vertexIndexVr)); this.Store(StorageKind.LocalMemory, ResourceManager.LocalVertexIndexInstanceRateMemoryId, this.IAdd(firstInstance, outputInstanceOffset)); @@ -148,8 +148,8 @@ namespace Ryujinx.Graphics.Shader.Translation TextureFlags.IntCoords, ResourceManager.Reservations.GetTopologyRemapBufferTextureSetAndBinding(), 1, - new[] { vertexIndex }, - new[] { this.IAdd(baseVertex, Const(index)) }); + [vertexIndex], + [this.IAdd(baseVertex, Const(index))]); this.Store(StorageKind.LocalMemory, ResourceManager.LocalTopologyRemapMemoryId, Const(index), vertexIndex); } @@ -187,7 +187,7 @@ namespace Ryujinx.Graphics.Shader.Translation public (Operand, Operand) Add(Instruction inst, (Operand, Operand) dest, params Operand[] sources) { - Operand[] dests = new[] { dest.Item1, dest.Item2 }; + Operand[] dests = [dest.Item1, dest.Item2]; Operation operation = new(inst, 0, dests, sources); diff --git a/src/Ryujinx.Graphics.Shader/Translation/EmitterContextInsts.cs b/src/Ryujinx.Graphics.Shader/Translation/EmitterContextInsts.cs index 5bdbb0025..3d19586db 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/EmitterContextInsts.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/EmitterContextInsts.cs @@ -631,7 +631,7 @@ namespace Ryujinx.Graphics.Shader.Translation setAndBinding.SetIndex, setAndBinding.Binding, 0, - new[] { dest }, + [dest], sources)); return dest; @@ -759,7 +759,7 @@ namespace Ryujinx.Graphics.Shader.Translation setAndBinding.SetIndex, setAndBinding.Binding, compIndex, - new[] { dest }, + [dest], sources)); return dest; @@ -959,7 +959,7 @@ namespace Ryujinx.Graphics.Shader.Translation setAndBinding.SetIndex, setAndBinding.Binding, 0, - new[] { dest }, + [dest], sources)); return dest; @@ -983,7 +983,7 @@ namespace Ryujinx.Graphics.Shader.Translation setAndBinding.SetIndex, setAndBinding.Binding, compIndex, - new[] { dest }, + [dest], sources)); return dest; diff --git a/src/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs b/src/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs index ba9685433..b396de06b 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/FunctionMatch.cs @@ -132,7 +132,7 @@ namespace Ryujinx.Graphics.Shader.Translation public TreeNode(InstOp op, byte order) { Op = op; - Uses = new List(); + Uses = []; Type = TreeNodeType.Op; Order = order; } @@ -150,7 +150,7 @@ namespace Ryujinx.Graphics.Shader.Translation private static TreeNode[] BuildTree(Block[] blocks) { - List nodes = new(); + List nodes = []; Dictionary labels = new(); @@ -382,7 +382,7 @@ namespace Ryujinx.Graphics.Shader.Translation Type = type; Order = order; IsImm = isImm; - Uses = new List(); + Uses = []; } public PatternTreeNode Use(PatternTreeNodeUse use) @@ -527,8 +527,8 @@ namespace Ryujinx.Graphics.Shader.Translation PatternTreeNodeUse affinityValue = S2r(SReg.Affinity).Use(PT).Out; PatternTreeNodeUse orderingTicketValue = S2r(SReg.OrderingTicket).Use(PT).Out; - return new IPatternTreeNode[] - { + return + [ Iscadd(cc: true, 2, 0, 404) .Use(PT) .Use(Iscadd(cc: false, 8) @@ -548,8 +548,8 @@ namespace Ryujinx.Graphics.Shader.Translation .Use(PT) .Use(orderingTicketValue).Out), Iadd(x: true, 0, 405).Use(PT).Use(RZ), - Ret().Use(PT), - }; + Ret().Use(PT) + ]; } public static IPatternTreeNode[] GetFsiGetAddressV2() @@ -557,8 +557,8 @@ namespace Ryujinx.Graphics.Shader.Translation PatternTreeNodeUse affinityValue = S2r(SReg.Affinity).Use(PT).Out; PatternTreeNodeUse orderingTicketValue = S2r(SReg.OrderingTicket).Use(PT).Out; - return new IPatternTreeNode[] - { + return + [ ShrU32W(16) .Use(PT) .Use(orderingTicketValue), @@ -576,8 +576,8 @@ namespace Ryujinx.Graphics.Shader.Translation .Use(PT) .Use(orderingTicketValue).Out).Out), Iadd(x: true, 0, 405).Use(PT).Use(RZ), - Ret().Use(PT), - }; + Ret().Use(PT) + ]; } public static IPatternTreeNode[] GetFsiIsLastWarpThread() @@ -585,8 +585,8 @@ namespace Ryujinx.Graphics.Shader.Translation PatternTreeNodeUse threadKillValue = S2r(SReg.ThreadKill).Use(PT).Out; PatternTreeNodeUse laneIdValue = S2r(SReg.LaneId).Use(PT).Out; - return new IPatternTreeNode[] - { + return + [ IsetpU32(IComp.Eq) .Use(PT) .Use(PT) @@ -603,8 +603,8 @@ namespace Ryujinx.Graphics.Shader.Translation .Use(threadKillValue).OutAt(1)) .Use(RZ).Out).OutAt(1)).Out) .Use(laneIdValue), - Ret().Use(PT), - }; + Ret().Use(PT) + ]; } public static IPatternTreeNode[] GetFsiBeginPattern() @@ -624,8 +624,8 @@ namespace Ryujinx.Graphics.Shader.Translation PatternTreeNode label; - return new IPatternTreeNode[] - { + return + [ Cal(), Ret().Use(CallArg(0).Inv), Ret() @@ -638,8 +638,8 @@ namespace Ryujinx.Graphics.Shader.Translation .Use(PT) .Use(addressLowValue).Out).Inv) .Use(label.Out), - Ret().Use(PT), - }; + Ret().Use(PT) + ]; } public static IPatternTreeNode[] GetFsiEndPattern() @@ -652,8 +652,8 @@ namespace Ryujinx.Graphics.Shader.Translation PatternTreeNodeUse addressLowValue = CallArg(1); PatternTreeNodeUse incrementValue = CallArg(2); - return new IPatternTreeNode[] - { + return + [ Cal(), Ret().Use(CallArg(0).Inv), Membar(Decoders.Membar.Vc).Use(PT), @@ -684,8 +684,8 @@ namespace Ryujinx.Graphics.Shader.Translation .Use(incrementValue) .Use(popcResult) .Use(RZ).Out).Out), - Ret().Use(PT), - }; + Ret().Use(PT) + ]; } private static PatternTreeNode Bfi(int imm) diff --git a/src/Ryujinx.Graphics.Shader/Translation/Optimizations/DoubleToFloat.cs b/src/Ryujinx.Graphics.Shader/Translation/Optimizations/DoubleToFloat.cs index aec95a9cc..208ca3935 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Optimizations/DoubleToFloat.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Optimizations/DoubleToFloat.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations { int functionId = hfm.GetOrCreateFunctionId(HelperFunctionName.ConvertDoubleToFloat); - Operand[] callArgs = new Operand[] { Const(functionId), operation.GetSource(0), operation.GetSource(1) }; + Operand[] callArgs = [Const(functionId), operation.GetSource(0), operation.GetSource(1)]; Operand floatValue = operation.Dest; @@ -51,7 +51,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations operation.Dest = null; - Operand[] callArgs = new Operand[] { Const(functionId), operation.GetSource(0), resultLow, resultHigh }; + Operand[] callArgs = [Const(functionId), operation.GetSource(0), resultLow, resultHigh]; LinkedListNode newNode = node.List.AddBefore(node, new Operation(Instruction.Call, 0, (Operand)null, callArgs)); diff --git a/src/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs b/src/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs index 8628b3236..4805fb1ca 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Optimizations/GlobalToStorage.cs @@ -77,7 +77,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations public GtsContext(HelperFunctionManager hfm) { - _entries = new List(); + _entries = []; _sharedEntries = new Dictionary>(); _hfm = hfm; } @@ -420,22 +420,22 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations if (operation.Inst == Instruction.AtomicCompareAndSwap) { - sources = new[] - { + sources = + [ Const(binding), Const(0), wordOffset, operation.GetSource(operation.SourcesCount - 2), - operation.GetSource(operation.SourcesCount - 1), - }; + operation.GetSource(operation.SourcesCount - 1) + ]; } else if (isStore) { - sources = new[] { Const(binding), Const(0), wordOffset, operation.GetSource(operation.SourcesCount - 1) }; + sources = [Const(binding), Const(0), wordOffset, operation.GetSource(operation.SourcesCount - 1)]; } else { - sources = new[] { Const(binding), Const(0), wordOffset }; + sources = [Const(binding), Const(0), wordOffset]; } Operation shiftOp = new(Instruction.ShiftRightU32, wordOffset, offset, Const(2)); @@ -507,7 +507,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations SearchResult result, out int functionId) { - List targetCbs = new() { PackCbSlotAndOffset(result.SbCbSlot, result.SbCbOffset) }; + List targetCbs = [PackCbSlotAndOffset(result.SbCbSlot, result.SbCbOffset)]; if (gtsContext.TryGetFunctionId(operation, isMultiTarget: false, targetCbs, out functionId)) { @@ -592,8 +592,8 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations out int functionId) { Queue phis = new(); - HashSet visited = new(); - List targetCbs = new(); + HashSet visited = []; + List targetCbs = []; Operand globalAddress = operation.GetSource(0); diff --git a/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs b/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs index 2851381ae..c6bbb4968 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/RegisterUsage.cs @@ -128,8 +128,8 @@ namespace Ryujinx.Graphics.Shader.Translation public static FunctionRegisterUsage RunPass(ControlFlowGraph cfg) { - List inArguments = new(); - List outArguments = new(); + List inArguments = []; + List outArguments = []; // Compute local register inputs and outputs used inside blocks. RegisterMask[] localInputs = new RegisterMask[cfg.Blocks.Length]; diff --git a/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs b/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs index dee5174f2..e10182747 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Graphics.Shader.Translation private const int DefaultLocalMemorySize = 128; private const int DefaultSharedMemorySize = 4096; - private static readonly string[] _stagePrefixes = new string[] { "cp", "vp", "tcp", "tep", "gp", "fp" }; + private static readonly string[] _stagePrefixes = ["cp", "vp", "tcp", "tep", "gp", "fp"]; private readonly IGpuAccessor _gpuAccessor; private readonly ShaderStage _stage; @@ -78,15 +78,15 @@ namespace Ryujinx.Graphics.Shader.Translation _sbSlots = new(); _sbSlotsReverse = new(); - _usedConstantBufferBindings = new(); + _usedConstantBufferBindings = []; _usedTextures = new(); _usedImages = new(); - _vacConstantBuffers = new(); - _vacStorageBuffers = new(); - _vacTextures = new(); - _vacImages = new(); + _vacConstantBuffers = []; + _vacStorageBuffers = []; + _vacTextures = []; + _vacImages = []; Properties.AddOrUpdateConstantBuffer(new(BufferLayout.Std140, 0, SupportBuffer.Binding, "support_buffer", SupportBuffer.GetStructureType())); @@ -524,7 +524,7 @@ namespace Ryujinx.Graphics.Shader.Translation private static TextureDescriptor[] GetDescriptors(IReadOnlyDictionary usedResources, bool includeArrays) { - List descriptors = new(); + List descriptors = []; bool hasAnyArray = false; @@ -690,20 +690,18 @@ namespace Ryujinx.Graphics.Shader.Translation private void AddNewConstantBuffer(int setIndex, int binding, string name) { - StructureType type = new(new[] - { - new StructureField(AggregateType.Array | AggregateType.Vector4 | AggregateType.FP32, "data", Constants.ConstantBufferSize / 16), - }); + StructureType type = new([ + new StructureField(AggregateType.Array | AggregateType.Vector4 | AggregateType.FP32, "data", Constants.ConstantBufferSize / 16) + ]); Properties.AddOrUpdateConstantBuffer(new(BufferLayout.Std140, setIndex, binding, name, type)); } private void AddNewStorageBuffer(int setIndex, int binding, string name) { - StructureType type = new(new[] - { - new StructureField(AggregateType.Array | AggregateType.U32, "data", 0), - }); + StructureType type = new([ + new StructureField(AggregateType.Array | AggregateType.U32, "data", 0) + ]); Properties.AddOrUpdateStorageBuffer(new(BufferLayout.Std430, setIndex, binding, name, type)); } diff --git a/src/Ryujinx.Graphics.Shader/Translation/Transforms/SharedAtomicSignedCas.cs b/src/Ryujinx.Graphics.Shader/Translation/Transforms/SharedAtomicSignedCas.cs index 112b3b197..c556e8149 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Transforms/SharedAtomicSignedCas.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Transforms/SharedAtomicSignedCas.cs @@ -46,7 +46,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms int functionId = context.Hfm.GetOrCreateFunctionId(name, memoryId.Value); - Operand[] callArgs = new Operand[] { Const(functionId), byteOffset, value }; + Operand[] callArgs = [Const(functionId), byteOffset, value]; LinkedListNode newNode = node.List.AddBefore(node, new Operation(Instruction.Call, 0, result, callArgs)); diff --git a/src/Ryujinx.Graphics.Shader/Translation/Transforms/SharedStoreSmallIntCas.cs b/src/Ryujinx.Graphics.Shader/Translation/Transforms/SharedStoreSmallIntCas.cs index e58be0a8e..2852a61ad 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Transforms/SharedStoreSmallIntCas.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Transforms/SharedStoreSmallIntCas.cs @@ -45,7 +45,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms int functionId = context.Hfm.GetOrCreateFunctionId(name, memoryId.Value); - Operand[] callArgs = new Operand[] { Const(functionId), byteOffset, value }; + Operand[] callArgs = [Const(functionId), byteOffset, value]; LinkedListNode newNode = node.List.AddBefore(node, new Operation(Instruction.Call, 0, (Operand)null, callArgs)); diff --git a/src/Ryujinx.Graphics.Shader/Translation/Transforms/ShufflePass.cs b/src/Ryujinx.Graphics.Shader/Translation/Transforms/ShufflePass.cs index 839d4f818..9cb361e6c 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Transforms/ShufflePass.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Transforms/ShufflePass.cs @@ -40,7 +40,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms operation.Dest = null; - Operand[] callArgs = new Operand[] { Const(functionId), value, index, mask, valid }; + Operand[] callArgs = [Const(functionId), value, index, mask, valid]; LinkedListNode newNode = node.List.AddBefore(node, new Operation(Instruction.Call, 0, result, callArgs)); diff --git a/src/Ryujinx.Graphics.Shader/Translation/Transforms/TexturePass.cs b/src/Ryujinx.Graphics.Shader/Translation/Transforms/TexturePass.cs index 6ba8cb44a..808692559 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Transforms/TexturePass.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Transforms/TexturePass.cs @@ -71,11 +71,12 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms if (stage == ShaderStage.Fragment) { - callArgs = new Operand[] { Const(functionId), texOp.GetSource(coordsIndex + index), Const(samplerIndex), Const(index) }; + callArgs = [Const(functionId), texOp.GetSource(coordsIndex + index), Const(samplerIndex), Const(index) + ]; } else { - callArgs = new Operand[] { Const(functionId), texOp.GetSource(coordsIndex + index), Const(samplerIndex) }; + callArgs = [Const(functionId), texOp.GetSource(coordsIndex + index), Const(samplerIndex)]; } node.List.AddBefore(node, new Operation(Instruction.Call, 0, scaledCoord, callArgs)); @@ -127,7 +128,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms } } - Operand[] callArgs = new Operand[] { Const(functionId), dest, Const(samplerIndex) }; + Operand[] callArgs = [Const(functionId), dest, Const(samplerIndex)]; node.List.AddAfter(node, new Operation(Instruction.Call, 0, unscaledSize, callArgs)); } @@ -175,7 +176,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms { Operand coordSize = Local(); - Operand[] texSizeSources = new Operand[] { Const(0) }; + Operand[] texSizeSources = [Const(0)]; LinkedListNode textureSizeNode = node.List.AddBefore(node, new TextureOperation( Instruction.TextureQuerySize, @@ -185,7 +186,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms texOp.Set, texOp.Binding, index, - new[] { coordSize }, + [coordSize], texSizeSources)); resourceManager.SetUsageFlagsForTextureQuery(texOp.Binding, texOp.Type); @@ -240,11 +241,11 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms if (isBindless || isIndexed) { - texSizeSources = new Operand[] { texOp.GetSource(0), Const(0) }; + texSizeSources = [texOp.GetSource(0), Const(0)]; } else { - texSizeSources = new Operand[] { Const(0) }; + texSizeSources = [Const(0)]; } node.List.AddBefore(node, new TextureOperation( @@ -255,7 +256,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms texOp.Set, texOp.Binding, index, - new[] { coordSize }, + [coordSize], texSizeSources)); node.List.AddBefore(node, new Operation( @@ -476,7 +477,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms texOp.Set, texOp.Binding, 1 << 3, // W component: i=0, j=0 - new[] { dests[destIndex++] }, + [dests[destIndex++]], newSources); node = node.List.AddBefore(node, newTexOp); @@ -565,11 +566,11 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms if (bindlessHandle != null) { - texSizeSources = new Operand[] { bindlessHandle, Const(0) }; + texSizeSources = [bindlessHandle, Const(0)]; } else { - texSizeSources = new Operand[] { Const(0) }; + texSizeSources = [Const(0)]; } node.List.AddBefore(node, new TextureOperation( @@ -580,7 +581,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms texOp.Set, texOp.Binding, index, - new[] { texSizes[index] }, + [texSizes[index]], texSizeSources)); } @@ -611,7 +612,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms texOp.Set, texOp.Binding, 0, - new[] { lod }, + [lod], lodSources)); } else @@ -627,11 +628,11 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms if (bindlessHandle != null) { - texSizeSources = new Operand[] { bindlessHandle, GenerateF2i(node, lod) }; + texSizeSources = [bindlessHandle, GenerateF2i(node, lod)]; } else { - texSizeSources = new Operand[] { GenerateF2i(node, lod) }; + texSizeSources = [GenerateF2i(node, lod)]; } node.List.AddBefore(node, new TextureOperation( @@ -642,7 +643,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms texOp.Set, texOp.Binding, index, - new[] { texSizes[index] }, + [texSizes[index]], texSizeSources)); } diff --git a/src/Ryujinx.Graphics.Shader/Translation/Transforms/VertexToCompute.cs b/src/Ryujinx.Graphics.Shader/Translation/Transforms/VertexToCompute.cs index ddd2134d2..ebff0d59c 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Transforms/VertexToCompute.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Transforms/VertexToCompute.cs @@ -66,8 +66,8 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms setAndBinding.SetIndex, setAndBinding.Binding, 1 << component, - new[] { temp }, - new[] { vertexElemOffset })); + [temp], + [vertexElemOffset])); if (needsSextNorm) { @@ -89,8 +89,8 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms setAndBinding.SetIndex, setAndBinding.Binding, 1, - new[] { temp }, - new[] { vertexElemOffset })); + [temp], + [vertexElemOffset])); if (component > 0) { @@ -312,21 +312,21 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms private static LinkedListNode GenerateVertexIdVertexRateLoad(ResourceManager resourceManager, LinkedListNode node, Operand dest) { - Operand[] sources = new Operand[] { Const(resourceManager.LocalVertexIndexVertexRateMemoryId) }; + Operand[] sources = [Const(resourceManager.LocalVertexIndexVertexRateMemoryId)]; return node.List.AddBefore(node, new Operation(Instruction.Load, StorageKind.LocalMemory, dest, sources)); } private static LinkedListNode GenerateVertexIdInstanceRateLoad(ResourceManager resourceManager, LinkedListNode node, Operand dest) { - Operand[] sources = new Operand[] { Const(resourceManager.LocalVertexIndexInstanceRateMemoryId) }; + Operand[] sources = [Const(resourceManager.LocalVertexIndexInstanceRateMemoryId)]; return node.List.AddBefore(node, new Operation(Instruction.Load, StorageKind.LocalMemory, dest, sources)); } private static LinkedListNode GenerateInstanceIdLoad(LinkedListNode node, Operand dest) { - Operand[] sources = new Operand[] { Const((int)IoVariable.GlobalId), Const(1) }; + Operand[] sources = [Const((int)IoVariable.GlobalId), Const(1)]; return node.List.AddBefore(node, new Operation(Instruction.Load, StorageKind.Input, dest, sources)); } diff --git a/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs b/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs index 441d1f77a..ff8fb255a 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs @@ -386,10 +386,9 @@ namespace Ryujinx.Graphics.Shader.Translation if (IsTransformFeedbackEmulated) { - StructureType tfeDataStruct = new(new StructureField[] - { + StructureType tfeDataStruct = new([ new(AggregateType.Array | AggregateType.U32, "data", 0) - }); + ]); for (int i = 0; i < ResourceReservations.TfeBuffersCount; i++) { @@ -405,10 +404,9 @@ namespace Ryujinx.Graphics.Shader.Translation BufferDefinition vertexInfoBuffer = new(BufferLayout.Std140, 0, vertexInfoCbBinding, "vb_info", VertexInfoBuffer.GetStructureType()); resourceManager.AddVertexAsComputeConstantBuffer(vertexInfoBuffer); - StructureType vertexOutputStruct = new(new StructureField[] - { + StructureType vertexOutputStruct = new([ new(AggregateType.Array | AggregateType.FP32, "data", 0) - }); + ]); int vertexOutputSbBinding = resourceManager.Reservations.VertexOutputStorageBufferBinding; BufferDefinition vertexOutputBuffer = new(BufferLayout.Std430, 1, vertexOutputSbBinding, "vertex_output", vertexOutputStruct); @@ -442,10 +440,9 @@ namespace Ryujinx.Graphics.Shader.Translation BufferDefinition geometryVbOutputBuffer = new(BufferLayout.Std430, 1, geometryVbOutputSbBinding, "geometry_vb_output", vertexOutputStruct); resourceManager.AddVertexAsComputeStorageBuffer(geometryVbOutputBuffer); - StructureType geometryIbOutputStruct = new(new StructureField[] - { + StructureType geometryIbOutputStruct = new([ new(AggregateType.Array | AggregateType.U32, "data", 0) - }); + ]); int geometryIbOutputSbBinding = resourceManager.Reservations.GeometryIndexOutputStorageBufferBinding; BufferDefinition geometryIbOutputBuffer = new(BufferLayout.Std430, 1, geometryIbOutputSbBinding, "geometry_ib_output", geometryIbOutputStruct); @@ -507,10 +504,9 @@ namespace Ryujinx.Graphics.Shader.Translation resourceManager.AddVertexAsComputeConstantBuffer(vertexInfoBuffer); } - StructureType vertexInputStruct = new(new StructureField[] - { + StructureType vertexInputStruct = new([ new(AggregateType.Array | AggregateType.FP32, "data", 0) - }); + ]); int vertexDataSbBinding = reservations.VertexOutputStorageBufferBinding; BufferDefinition vertexOutputBuffer = new(BufferLayout.Std430, 1, vertexDataSbBinding, "vb_input", vertexInputStruct); @@ -573,7 +569,7 @@ namespace Ryujinx.Graphics.Shader.Translation }; return (Generate( - new[] { function }, + [function], attributeUsage, definitions, definitions, @@ -669,7 +665,7 @@ namespace Ryujinx.Graphics.Shader.Translation maxOutputVertices); return Generate( - new[] { function }, + [function], attributeUsage, definitions, definitions, diff --git a/src/Ryujinx.Graphics.Shader/VertexInfoBuffer.cs b/src/Ryujinx.Graphics.Shader/VertexInfoBuffer.cs index 845135f86..000d372dc 100644 --- a/src/Ryujinx.Graphics.Shader/VertexInfoBuffer.cs +++ b/src/Ryujinx.Graphics.Shader/VertexInfoBuffer.cs @@ -42,13 +42,12 @@ namespace Ryujinx.Graphics.Shader internal static StructureType GetStructureType() { - return new StructureType(new[] - { + return new StructureType([ new StructureField(AggregateType.Vector4 | AggregateType.U32, "vertex_counts"), new StructureField(AggregateType.Vector4 | AggregateType.U32, "geometry_counts"), new StructureField(AggregateType.Array | AggregateType.Vector4 | AggregateType.U32, "vertex_strides", ResourceReservations.MaxVertexBufferTextures), - new StructureField(AggregateType.Array | AggregateType.Vector4 | AggregateType.U32, "vertex_offsets", ResourceReservations.MaxVertexBufferTextures), - }); + new StructureField(AggregateType.Array | AggregateType.Vector4 | AggregateType.U32, "vertex_offsets", ResourceReservations.MaxVertexBufferTextures) + ]); } public Vector4 VertexCounts; -- 2.47.1 From 0f857400b66fedb18ecf3923c222affb2b1f1548 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:53:31 -0600 Subject: [PATCH 477/722] misc: chore: Use collection expressions in Common project --- src/Ryujinx.Common/Collections/IntervalTree.cs | 2 +- src/Ryujinx.Common/Collections/TreeDictionary.cs | 4 ++-- src/Ryujinx.Common/Configuration/ModMetadata.cs | 2 +- src/Ryujinx.Common/Logging/Logger.cs | 4 ++-- src/Ryujinx.Common/PreciseSleep/NanosleepPool.cs | 4 ++-- src/Ryujinx.Common/PreciseSleep/WindowsGranularTimer.cs | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx.Common/Collections/IntervalTree.cs b/src/Ryujinx.Common/Collections/IntervalTree.cs index f804bca91..695487dda 100644 --- a/src/Ryujinx.Common/Collections/IntervalTree.cs +++ b/src/Ryujinx.Common/Collections/IntervalTree.cs @@ -106,7 +106,7 @@ namespace Ryujinx.Common.Collections /// A list of all RangeNodes sorted by Key Order public List> AsList() { - List> list = new(); + List> list = []; AddToList(Root, list); diff --git a/src/Ryujinx.Common/Collections/TreeDictionary.cs b/src/Ryujinx.Common/Collections/TreeDictionary.cs index 5379d353c..18f48188a 100644 --- a/src/Ryujinx.Common/Collections/TreeDictionary.cs +++ b/src/Ryujinx.Common/Collections/TreeDictionary.cs @@ -139,7 +139,7 @@ namespace Ryujinx.Common.Collections /// List to add the tree pairs into public List> AsLevelOrderList() { - List> list = new(); + List> list = []; Queue> nodes = new(); @@ -168,7 +168,7 @@ namespace Ryujinx.Common.Collections /// A list of all KeyValuePairs sorted by Key Order public List> AsList() { - List> list = new(); + List> list = []; AddToList(Root, list); diff --git a/src/Ryujinx.Common/Configuration/ModMetadata.cs b/src/Ryujinx.Common/Configuration/ModMetadata.cs index 174320d0a..6bc9482ad 100644 --- a/src/Ryujinx.Common/Configuration/ModMetadata.cs +++ b/src/Ryujinx.Common/Configuration/ModMetadata.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Common.Configuration public ModMetadata() { - Mods = new List(); + Mods = []; } } } diff --git a/src/Ryujinx.Common/Logging/Logger.cs b/src/Ryujinx.Common/Logging/Logger.cs index 0ac96c7d3..1830c14df 100644 --- a/src/Ryujinx.Common/Logging/Logger.cs +++ b/src/Ryujinx.Common/Logging/Logger.cs @@ -132,7 +132,7 @@ namespace Ryujinx.Common.Logging _enabledClasses[index] = true; } - _logTargets = new List(); + _logTargets = []; _time = Stopwatch.StartNew(); @@ -203,7 +203,7 @@ namespace Ryujinx.Common.Logging public static IReadOnlyCollection GetEnabledLevels() { - Log?[] logs = new[] { Debug, Info, Warning, Error, Guest, AccessLog, Stub, Trace }; + Log?[] logs = [Debug, Info, Warning, Error, Guest, AccessLog, Stub, Trace]; List levels = new(logs.Length); foreach (Log? log in logs) { diff --git a/src/Ryujinx.Common/PreciseSleep/NanosleepPool.cs b/src/Ryujinx.Common/PreciseSleep/NanosleepPool.cs index 45b8e95fa..3569dd968 100644 --- a/src/Ryujinx.Common/PreciseSleep/NanosleepPool.cs +++ b/src/Ryujinx.Common/PreciseSleep/NanosleepPool.cs @@ -125,8 +125,8 @@ namespace Ryujinx.Common.PreciseSleep } private readonly Lock _lock = new(); - private readonly List _threads = new(); - private readonly List _active = new(); + private readonly List _threads = []; + private readonly List _active = []; private readonly Stack _free = new(); private readonly AutoResetEvent _signalTarget; diff --git a/src/Ryujinx.Common/PreciseSleep/WindowsGranularTimer.cs b/src/Ryujinx.Common/PreciseSleep/WindowsGranularTimer.cs index cef4dc927..143c9c8d3 100644 --- a/src/Ryujinx.Common/PreciseSleep/WindowsGranularTimer.cs +++ b/src/Ryujinx.Common/PreciseSleep/WindowsGranularTimer.cs @@ -51,7 +51,7 @@ namespace Ryujinx.Common.SystemInterop private long _lastId; private readonly Lock _lock = new(); - private readonly List _waitingObjects = new(); + private readonly List _waitingObjects = []; private WindowsGranularTimer() { -- 2.47.1 From ac838aa81dbacef697d73bf7aa2e65f36bca7de9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 15:59:11 -0600 Subject: [PATCH 478/722] misc: chore: Use collection expressions everywhere else (except VP9) --- .../Multithreading/BufferMap.cs | 2 +- .../Multithreading/Resources/ProgramQueue.cs | 2 +- .../Multithreading/SyncMap.cs | 2 +- .../SyncptIncrManager.cs | 2 +- src/Ryujinx.Graphics.Metal/CacheByRange.cs | 6 +- .../CommandBufferPool.cs | 4 +- .../EncoderResources.cs | 10 +- src/Ryujinx.Graphics.Metal/HashTableSlim.cs | 8 +- src/Ryujinx.Graphics.Metal/HelperShader.cs | 6 +- src/Ryujinx.Graphics.Metal/IdList.cs | 2 +- src/Ryujinx.Graphics.Metal/MetalRenderer.cs | 4 +- src/Ryujinx.Graphics.Metal/Program.cs | 2 +- .../ResourceLayoutBuilder.cs | 4 +- src/Ryujinx.Graphics.Metal/SyncManager.cs | 2 +- .../H264/SpsAndPpsReconstruction.cs | 16 +- .../Astc/AstcDecoder.cs | 4 +- .../Astc/IntegerEncoded.cs | 18 +- src/Ryujinx.Graphics.Texture/ETC2Decoder.cs | 62 +- .../Encoders/BC7Encoder.cs | 8 +- src/Ryujinx.Graphics.Texture/SizeInfo.cs | 8 +- .../Utils/BC67Tables.cs | 484 +++---- .../ServiceSyntaxReceiver.cs | 2 +- .../MultiRegionTrackingTests.cs | 18 +- src/Ryujinx.Tests.Memory/TrackingTests.cs | 2 +- src/Ryujinx.Tests.Unicorn/UnicornAArch32.cs | 14 +- src/Ryujinx.Tests.Unicorn/UnicornAArch64.cs | 14 +- .../Cpu/Arm64CodeGenCommonTests.cs | 6 +- src/Ryujinx.Tests/Cpu/CpuTestAlu32.cs | 48 +- src/Ryujinx.Tests/Cpu/CpuTestAluBinary.cs | 8 +- src/Ryujinx.Tests/Cpu/CpuTestAluBinary32.cs | 8 +- src/Ryujinx.Tests/Cpu/CpuTestAluImm32.cs | 8 +- src/Ryujinx.Tests/Cpu/CpuTestAluRs32.cs | 16 +- src/Ryujinx.Tests/Cpu/CpuTestMul32.cs | 32 +- src/Ryujinx.Tests/Cpu/CpuTestSimd.cs | 547 +++---- src/Ryujinx.Tests/Cpu/CpuTestSimd32.cs | 23 +- src/Ryujinx.Tests/Cpu/CpuTestSimdCvt.cs | 142 +- src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs | 15 +- src/Ryujinx.Tests/Cpu/CpuTestSimdExt.cs | 7 +- src/Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs | 32 +- src/Ryujinx.Tests/Cpu/CpuTestSimdFmov.cs | 16 +- src/Ryujinx.Tests/Cpu/CpuTestSimdImm.cs | 102 +- src/Ryujinx.Tests/Cpu/CpuTestSimdIns.cs | 56 +- src/Ryujinx.Tests/Cpu/CpuTestSimdLogical32.cs | 23 +- src/Ryujinx.Tests/Cpu/CpuTestSimdMemory32.cs | 12 +- src/Ryujinx.Tests/Cpu/CpuTestSimdMov32.cs | 12 +- src/Ryujinx.Tests/Cpu/CpuTestSimdReg.cs | 319 ++-- src/Ryujinx.Tests/Cpu/CpuTestSimdReg32.cs | 102 +- src/Ryujinx.Tests/Cpu/CpuTestSimdRegElem.cs | 46 +- src/Ryujinx.Tests/Cpu/CpuTestSimdRegElemF.cs | 64 +- src/Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs | 306 ++-- src/Ryujinx.Tests/Cpu/CpuTestSimdShImm32.cs | 79 +- src/Ryujinx.Tests/Cpu/CpuTestSimdTbl.cs | 39 +- src/Ryujinx.Tests/Cpu/CpuTestSystem.cs | 8 +- src/Ryujinx.Tests/Cpu/CpuTestT32Alu.cs | 1284 ++++++++++------- src/Ryujinx.Tests/Cpu/CpuTestT32Mem.cs | 714 +++++---- src/Ryujinx.Tests/Cpu/CpuTestThumb.cs | 906 ++++++++---- .../HLE/SoftwareKeyboardTests.cs | 7 +- src/Ryujinx.Tests/Memory/PartialUnmaps.cs | 2 +- src/Ryujinx/Updater.cs | 3 +- 59 files changed, 3246 insertions(+), 2452 deletions(-) diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/BufferMap.cs b/src/Ryujinx.Graphics.GAL/Multithreading/BufferMap.cs index e8eec123a..48bec3633 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/BufferMap.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/BufferMap.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading private ulong _bufferHandle = 0; private readonly Dictionary _bufferMap = new(); - private readonly HashSet _inFlight = new(); + private readonly HashSet _inFlight = []; private readonly AutoResetEvent _inFlightChanged = new(false); internal BufferHandle CreateBufferHandle() diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ProgramQueue.cs b/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ProgramQueue.cs index cda3518c7..902527b5b 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ProgramQueue.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/Resources/ProgramQueue.cs @@ -22,7 +22,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Resources _renderer = renderer; _toCompile = new Queue(); - _inProgress = new List(); + _inProgress = []; } public void Add(IProgramRequest request) diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/SyncMap.cs b/src/Ryujinx.Graphics.GAL/Multithreading/SyncMap.cs index ecdff4922..d777abdb9 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/SyncMap.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/SyncMap.cs @@ -6,7 +6,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading { class SyncMap : IDisposable { - private readonly HashSet _inFlight = new(); + private readonly HashSet _inFlight = []; private readonly AutoResetEvent _inFlightChanged = new(false); internal void CreateSyncHandle(ulong id) diff --git a/src/Ryujinx.Graphics.Host1x/SyncptIncrManager.cs b/src/Ryujinx.Graphics.Host1x/SyncptIncrManager.cs index a5ee1198c..ee8a4a739 100644 --- a/src/Ryujinx.Graphics.Host1x/SyncptIncrManager.cs +++ b/src/Ryujinx.Graphics.Host1x/SyncptIncrManager.cs @@ -23,7 +23,7 @@ namespace Ryujinx.Graphics.Host1x } } - private readonly List _incrs = new(); + private readonly List _incrs = []; private uint _currentId; diff --git a/src/Ryujinx.Graphics.Metal/CacheByRange.cs b/src/Ryujinx.Graphics.Metal/CacheByRange.cs index 76515808f..2002eeba4 100644 --- a/src/Ryujinx.Graphics.Metal/CacheByRange.cs +++ b/src/Ryujinx.Graphics.Metal/CacheByRange.cs @@ -149,7 +149,7 @@ namespace Ryujinx.Graphics.Metal { if (entry.DependencyList == null) { - entry.DependencyList = new List(); + entry.DependencyList = []; entries[i] = entry; } @@ -240,7 +240,7 @@ namespace Ryujinx.Graphics.Metal DestroyEntry(entry); } - (toRemove ??= new List()).Add(range.Key); + (toRemove ??= []).Add(range.Key); } } @@ -262,7 +262,7 @@ namespace Ryujinx.Graphics.Metal if (!_ranges.TryGetValue(key, out List value)) { - value = new List(); + value = []; _ranges.Add(key, value); } diff --git a/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs b/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs index 53f11dd08..d8c35b757 100644 --- a/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs +++ b/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs @@ -50,8 +50,8 @@ namespace Ryujinx.Graphics.Metal public void Initialize() { - Dependants = new List(); - Waitables = new List(); + Dependants = []; + Waitables = []; Encoders = new CommandBufferEncoder(); } } diff --git a/src/Ryujinx.Graphics.Metal/EncoderResources.cs b/src/Ryujinx.Graphics.Metal/EncoderResources.cs index 562500d76..8b856c1ce 100644 --- a/src/Ryujinx.Graphics.Metal/EncoderResources.cs +++ b/src/Ryujinx.Graphics.Metal/EncoderResources.cs @@ -5,9 +5,9 @@ namespace Ryujinx.Graphics.Metal { public struct RenderEncoderBindings { - public List Resources = new(); - public List VertexBuffers = new(); - public List FragmentBuffers = new(); + public List Resources = []; + public List VertexBuffers = []; + public List FragmentBuffers = []; public RenderEncoderBindings() { } @@ -21,8 +21,8 @@ namespace Ryujinx.Graphics.Metal public struct ComputeEncoderBindings { - public List Resources = new(); - public List Buffers = new(); + public List Resources = []; + public List Buffers = []; public ComputeEncoderBindings() { } diff --git a/src/Ryujinx.Graphics.Metal/HashTableSlim.cs b/src/Ryujinx.Graphics.Metal/HashTableSlim.cs index 34f38ee24..267acc6f4 100644 --- a/src/Ryujinx.Graphics.Metal/HashTableSlim.cs +++ b/src/Ryujinx.Graphics.Metal/HashTableSlim.cs @@ -89,10 +89,10 @@ namespace Ryujinx.Graphics.Metal } else { - bucket.Entries = new[] - { - entry, - }; + bucket.Entries = + [ + entry + ]; } bucket.Length++; diff --git a/src/Ryujinx.Graphics.Metal/HelperShader.cs b/src/Ryujinx.Graphics.Metal/HelperShader.cs index 48b9b9f3a..2638a6eac 100644 --- a/src/Ryujinx.Graphics.Metal/HelperShader.cs +++ b/src/Ryujinx.Graphics.Metal/HelperShader.cs @@ -27,9 +27,9 @@ namespace Ryujinx.Graphics.Metal private readonly IProgram _programColorBlitMsF; private readonly IProgram _programColorBlitMsI; private readonly IProgram _programColorBlitMsU; - private readonly List _programsColorClearF = new(); - private readonly List _programsColorClearI = new(); - private readonly List _programsColorClearU = new(); + private readonly List _programsColorClearF = []; + private readonly List _programsColorClearI = []; + private readonly List _programsColorClearU = []; private readonly IProgram _programDepthStencilClear; private readonly IProgram _programStrideChange; private readonly IProgram _programConvertD32S8ToD24S8; diff --git a/src/Ryujinx.Graphics.Metal/IdList.cs b/src/Ryujinx.Graphics.Metal/IdList.cs index 2c15a80ef..72c9d5fcc 100644 --- a/src/Ryujinx.Graphics.Metal/IdList.cs +++ b/src/Ryujinx.Graphics.Metal/IdList.cs @@ -10,7 +10,7 @@ namespace Ryujinx.Graphics.Metal public IdList() { - _list = new List(); + _list = []; _freeMin = 0; } diff --git a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs index 3ed60103e..86e2451b3 100644 --- a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs +++ b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs @@ -45,8 +45,8 @@ namespace Ryujinx.Graphics.Metal public MetalRenderer(Func metalLayer) { _device = MTLDevice.CreateSystemDefaultDevice(); - Programs = new HashSet(); - Samplers = new HashSet(); + Programs = []; + Samplers = []; if (_device.ArgumentBuffersSupport != MTLArgumentBuffersTier.Tier2) { diff --git a/src/Ryujinx.Graphics.Metal/Program.cs b/src/Ryujinx.Graphics.Metal/Program.cs index a24ad754d..721ee56a7 100644 --- a/src/Ryujinx.Graphics.Metal/Program.cs +++ b/src/Ryujinx.Graphics.Metal/Program.cs @@ -118,7 +118,7 @@ namespace Ryujinx.Graphics.Metal for (int setIndex = 0; setIndex < setUsages.Count; setIndex++) { - List currentSegments = new(); + List currentSegments = []; ResourceUsage currentUsage = default; int currentCount = 0; diff --git a/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs b/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs index 6f6000f69..623f91612 100644 --- a/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs +++ b/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs @@ -20,8 +20,8 @@ namespace Ryujinx.Graphics.Metal for (int index = 0; index < TotalSets; index++) { - _resourceDescriptors[index] = new(); - _resourceUsages[index] = new(); + _resourceDescriptors[index] = []; + _resourceUsages[index] = []; } } diff --git a/src/Ryujinx.Graphics.Metal/SyncManager.cs b/src/Ryujinx.Graphics.Metal/SyncManager.cs index ca49fe263..f2f26fd91 100644 --- a/src/Ryujinx.Graphics.Metal/SyncManager.cs +++ b/src/Ryujinx.Graphics.Metal/SyncManager.cs @@ -32,7 +32,7 @@ namespace Ryujinx.Graphics.Metal public SyncManager(MetalRenderer renderer) { _renderer = renderer; - _handles = new List(); + _handles = []; } public void RegisterFlush() diff --git a/src/Ryujinx.Graphics.Nvdec.FFmpeg/H264/SpsAndPpsReconstruction.cs b/src/Ryujinx.Graphics.Nvdec.FFmpeg/H264/SpsAndPpsReconstruction.cs index 6d012f89a..5e9e2869e 100644 --- a/src/Ryujinx.Graphics.Nvdec.FFmpeg/H264/SpsAndPpsReconstruction.cs +++ b/src/Ryujinx.Graphics.Nvdec.FFmpeg/H264/SpsAndPpsReconstruction.cs @@ -118,8 +118,8 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.H264 } // ZigZag LUTs from libavcodec. - private static ReadOnlySpan ZigZagDirect => new byte[] - { + private static ReadOnlySpan ZigZagDirect => + [ 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, @@ -127,16 +127,16 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.H264 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, - 53, 60, 61, 54, 47, 55, 62, 63, - }; + 53, 60, 61, 54, 47, 55, 62, 63 + ]; - private static ReadOnlySpan ZigZagScan => new byte[] - { + private static ReadOnlySpan ZigZagScan => + [ 0 + 0 * 4, 1 + 0 * 4, 0 + 1 * 4, 0 + 2 * 4, 1 + 1 * 4, 2 + 0 * 4, 3 + 0 * 4, 2 + 1 * 4, 1 + 2 * 4, 0 + 3 * 4, 1 + 3 * 4, 2 + 2 * 4, - 3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4, - }; + 3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4 + ]; private static void WriteScalingList(ref H264BitStreamWriter writer, IArray list) { diff --git a/src/Ryujinx.Graphics.Texture/Astc/AstcDecoder.cs b/src/Ryujinx.Graphics.Texture/Astc/AstcDecoder.cs index 92e39d2e0..d6974596d 100644 --- a/src/Ryujinx.Graphics.Texture/Astc/AstcDecoder.cs +++ b/src/Ryujinx.Graphics.Texture/Astc/AstcDecoder.cs @@ -1693,12 +1693,12 @@ namespace Ryujinx.Graphics.Texture.Astc if (h) { - ReadOnlySpan maxWeights = new byte[] { 9, 11, 15, 19, 23, 31 }; + ReadOnlySpan maxWeights = [9, 11, 15, 19, 23, 31]; texelParams.MaxWeight = maxWeights[r - 2]; } else { - ReadOnlySpan maxWeights = new byte[] { 1, 2, 3, 4, 5, 7 }; + ReadOnlySpan maxWeights = [1, 2, 3, 4, 5, 7]; texelParams.MaxWeight = maxWeights[r - 2]; } diff --git a/src/Ryujinx.Graphics.Texture/Astc/IntegerEncoded.cs b/src/Ryujinx.Graphics.Texture/Astc/IntegerEncoded.cs index dc99de2b6..4d3e8c5b5 100644 --- a/src/Ryujinx.Graphics.Texture/Astc/IntegerEncoded.cs +++ b/src/Ryujinx.Graphics.Texture/Astc/IntegerEncoded.cs @@ -129,7 +129,7 @@ namespace Ryujinx.Graphics.Texture.Astc ref IntegerSequence listIntegerEncoded, int numberBitsPerValue) { - ReadOnlySpan interleavedBits = new byte[] { 3, 2, 2 }; + ReadOnlySpan interleavedBits = [3, 2, 2]; // Implement the algorithm in section C.2.12 Span m = stackalloc int[3]; @@ -213,8 +213,8 @@ namespace Ryujinx.Graphics.Texture.Astc return QuintEncodings.Slice(index * 3, 3); } - private static ReadOnlySpan TritEncodings => new byte[] - { + private static ReadOnlySpan TritEncodings => + [ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 2, 1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2, 0, 0, 0, @@ -300,11 +300,11 @@ namespace Ryujinx.Graphics.Texture.Astc 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 0, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 0, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 2, 2, - }; + 2, 1, 2, 2, 2 + ]; - private static ReadOnlySpan QuintEncodings => new byte[] - { + private static ReadOnlySpan QuintEncodings => + [ 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 0, 4, 0, 4, 4, 0, 4, 4, 4, 0, 1, 0, 1, 1, 0, 2, 1, 0, 3, 1, 0, 4, 1, 0, 1, 4, 0, 4, 4, 1, @@ -330,7 +330,7 @@ namespace Ryujinx.Graphics.Texture.Astc 0, 1, 4, 1, 1, 4, 0, 2, 3, 1, 2, 3, 2, 2, 3, 3, 2, 3, 4, 2, 3, 2, 4, 3, 0, 2, 4, 1, 2, 4, 0, 3, 3, 1, 3, 3, 2, 3, 3, 3, 3, 3, 4, 3, 3, - 3, 4, 3, 0, 3, 4, 1, 3, 4, - }; + 3, 4, 3, 0, 3, 4, 1, 3, 4 + ]; } } diff --git a/src/Ryujinx.Graphics.Texture/ETC2Decoder.cs b/src/Ryujinx.Graphics.Texture/ETC2Decoder.cs index 49e7154c8..cb3fccb47 100644 --- a/src/Ryujinx.Graphics.Texture/ETC2Decoder.cs +++ b/src/Ryujinx.Graphics.Texture/ETC2Decoder.cs @@ -14,41 +14,41 @@ namespace Ryujinx.Graphics.Texture private const int BlockHeight = 4; private static readonly int[][] _etc1Lut = - { - new int[] { 2, 8, -2, -8 }, - new int[] { 5, 17, -5, -17 }, - new int[] { 9, 29, -9, -29 }, - new int[] { 13, 42, -13, -42 }, - new int[] { 18, 60, -18, -60 }, - new int[] { 24, 80, -24, -80 }, - new int[] { 33, 106, -33, -106 }, - new int[] { 47, 183, -47, -183 }, - }; + [ + [2, 8, -2, -8], + [5, 17, -5, -17], + [9, 29, -9, -29], + [13, 42, -13, -42], + [18, 60, -18, -60], + [24, 80, -24, -80], + [33, 106, -33, -106], + [47, 183, -47, -183] + ]; private static readonly int[] _etc2Lut = - { - 3, 6, 11, 16, 23, 32, 41, 64, - }; + [ + 3, 6, 11, 16, 23, 32, 41, 64 + ]; private static readonly int[][] _etc2AlphaLut = - { - new int[] { -3, -6, -9, -15, 2, 5, 8, 14 }, - new int[] { -3, -7, -10, -13, 2, 6, 9, 12 }, - new int[] { -2, -5, -8, -13, 1, 4, 7, 12 }, - new int[] { -2, -4, -6, -13, 1, 3, 5, 12 }, - new int[] { -3, -6, -8, -12, 2, 5, 7, 11 }, - new int[] { -3, -7, -9, -11, 2, 6, 8, 10 }, - new int[] { -4, -7, -8, -11, 3, 6, 7, 10 }, - new int[] { -3, -5, -8, -11, 2, 4, 7, 10 }, - new int[] { -2, -6, -8, -10, 1, 5, 7, 9 }, - new int[] { -2, -5, -8, -10, 1, 4, 7, 9 }, - new int[] { -2, -4, -8, -10, 1, 3, 7, 9 }, - new int[] { -2, -5, -7, -10, 1, 4, 6, 9 }, - new int[] { -3, -4, -7, -10, 2, 3, 6, 9 }, - new int[] { -1, -2, -3, -10, 0, 1, 2, 9 }, - new int[] { -4, -6, -8, -9, 3, 5, 7, 8 }, - new int[] { -3, -5, -7, -9, 2, 4, 6, 8 }, - }; + [ + [-3, -6, -9, -15, 2, 5, 8, 14], + [-3, -7, -10, -13, 2, 6, 9, 12], + [-2, -5, -8, -13, 1, 4, 7, 12], + [-2, -4, -6, -13, 1, 3, 5, 12], + [-3, -6, -8, -12, 2, 5, 7, 11], + [-3, -7, -9, -11, 2, 6, 8, 10], + [-4, -7, -8, -11, 3, 6, 7, 10], + [-3, -5, -8, -11, 2, 4, 7, 10], + [-2, -6, -8, -10, 1, 5, 7, 9], + [-2, -5, -8, -10, 1, 4, 7, 9], + [-2, -4, -8, -10, 1, 3, 7, 9], + [-2, -5, -7, -10, 1, 4, 6, 9], + [-3, -4, -7, -10, 2, 3, 6, 9], + [-1, -2, -3, -10, 0, 1, 2, 9], + [-4, -6, -8, -9, 3, 5, 7, 8], + [-3, -5, -7, -9, 2, 4, 6, 8] + ]; public static MemoryOwner DecodeRgb(ReadOnlySpan data, int width, int height, int depth, int levels, int layers) { diff --git a/src/Ryujinx.Graphics.Texture/Encoders/BC7Encoder.cs b/src/Ryujinx.Graphics.Texture/Encoders/BC7Encoder.cs index 5b333f91f..e5462b046 100644 --- a/src/Ryujinx.Graphics.Texture/Encoders/BC7Encoder.cs +++ b/src/Ryujinx.Graphics.Texture/Encoders/BC7Encoder.cs @@ -57,10 +57,10 @@ namespace Ryujinx.Graphics.Texture.Encoders } } - private static readonly int[] _mostFrequentPartitions = new int[] - { - 0, 13, 2, 1, 15, 14, 10, 23, - }; + private static readonly int[] _mostFrequentPartitions = + [ + 0, 13, 2, 1, 15, 14, 10, 23 + ]; private static Block CompressBlock(ReadOnlySpan data, int x, int y, int width, int height, bool fastMode) { diff --git a/src/Ryujinx.Graphics.Texture/SizeInfo.cs b/src/Ryujinx.Graphics.Texture/SizeInfo.cs index 3bec1203a..f2e40e195 100644 --- a/src/Ryujinx.Graphics.Texture/SizeInfo.cs +++ b/src/Ryujinx.Graphics.Texture/SizeInfo.cs @@ -19,10 +19,10 @@ namespace Ryujinx.Graphics.Texture public SizeInfo(int size) { - _mipOffsets = new int[] { 0 }; - AllOffsets = new int[] { 0 }; - SliceSizes = new int[] { size }; - LevelSizes = new int[] { size }; + _mipOffsets = [0]; + AllOffsets = [0]; + SliceSizes = [size]; + LevelSizes = [size]; _depth = 1; _levels = 1; LayerSize = size; diff --git a/src/Ryujinx.Graphics.Texture/Utils/BC67Tables.cs b/src/Ryujinx.Graphics.Texture/Utils/BC67Tables.cs index 50102faf4..71777997e 100644 --- a/src/Ryujinx.Graphics.Texture/Utils/BC67Tables.cs +++ b/src/Ryujinx.Graphics.Texture/Utils/BC67Tables.cs @@ -2,8 +2,8 @@ namespace Ryujinx.Graphics.Texture.Utils { static class BC67Tables { - public static readonly BC7ModeInfo[] BC7ModeInfos = new BC7ModeInfo[] - { + public static readonly BC7ModeInfo[] BC7ModeInfos = + [ new(3, 4, 6, 0, 0, 3, 0, 4, 0), new(2, 6, 2, 0, 0, 3, 0, 6, 0), new(3, 6, 0, 0, 0, 2, 0, 5, 0), @@ -11,81 +11,57 @@ namespace Ryujinx.Graphics.Texture.Utils new(1, 0, 0, 2, 1, 2, 3, 5, 6), new(1, 0, 0, 2, 0, 2, 2, 7, 8), new(1, 0, 2, 0, 0, 4, 0, 7, 7), - new(2, 6, 4, 0, 0, 2, 0, 5, 5), - }; + new(2, 6, 4, 0, 0, 2, 0, 5, 5) + ]; public static readonly byte[][] Weights = - { - new byte[] { 0, 21, 43, 64 }, - new byte[] { 0, 9, 18, 27, 37, 46, 55, 64 }, - new byte[] { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }, - }; + [ + [0, 21, 43, 64], + [0, 9, 18, 27, 37, 46, 55, 64], + [0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64] + ]; public static readonly byte[][] InverseWeights = - { - new byte[] { 64, 43, 21, 0 }, - new byte[] { 64, 55, 46, 37, 27, 18, 9, 0 }, - new byte[] { 64, 60, 55, 51, 47, 43, 38, 34, 30, 26, 21, 17, 13, 9, 4, 0 }, - }; + [ + [64, 43, 21, 0], + [64, 55, 46, 37, 27, 18, 9, 0], + [64, 60, 55, 51, 47, 43, 38, 34, 30, 26, 21, 17, 13, 9, 4, 0] + ]; public static readonly byte[][][] FixUpIndices = new byte[3][][] { new byte[64][] { - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, - new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, new byte[] { 0, 0, 0 }, + [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], + [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], + [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], + [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], + [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], + [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], + [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], + [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], }, new byte[64][] { - new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, - new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, - new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, - new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, - new byte[] { 0, 15, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 8, 0 }, new byte[] { 0, 2, 0 }, - new byte[] { 0, 2, 0 }, new byte[] { 0, 8, 0 }, new byte[] { 0, 8, 0 }, new byte[] { 0, 15, 0 }, - new byte[] { 0, 2, 0 }, new byte[] { 0, 8, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 2, 0 }, - new byte[] { 0, 8, 0 }, new byte[] { 0, 8, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 2, 0 }, - new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 6, 0 }, new byte[] { 0, 8, 0 }, - new byte[] { 0, 2, 0 }, new byte[] { 0, 8, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, - new byte[] { 0, 2, 0 }, new byte[] { 0, 8, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 2, 0 }, - new byte[] { 0, 2, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 6, 0 }, - new byte[] { 0, 6, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 6, 0 }, new byte[] { 0, 8, 0 }, - new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 2, 0 }, - new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, new byte[] { 0, 15, 0 }, - new byte[] { 0, 15, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 2, 0 }, new byte[] { 0, 15, 0 }, + [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], + [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], + [0, 15, 0], [0, 2, 0], [0, 8, 0], [0, 2, 0], [0, 2, 0], [0, 8, 0], [0, 8, 0], [0, 15, 0], + [0, 2, 0], [0, 8, 0], [0, 2, 0], [0, 2, 0], [0, 8, 0], [0, 8, 0], [0, 2, 0], [0, 2, 0], + [0, 15, 0], [0, 15, 0], [0, 6, 0], [0, 8, 0], [0, 2, 0], [0, 8, 0], [0, 15, 0], [0, 15, 0], + [0, 2, 0], [0, 8, 0], [0, 2, 0], [0, 2, 0], [0, 2, 0], [0, 15, 0], [0, 15, 0], [0, 6, 0], + [0, 6, 0], [0, 2, 0], [0, 6, 0], [0, 8, 0], [0, 15, 0], [0, 15, 0], [0, 2, 0], [0, 2, 0], + [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 15, 0], [0, 2, 0], [0, 2, 0], [0, 15, 0], }, new byte[64][] { - new byte[] { 0, 3, 15 }, new byte[] { 0, 3, 8 }, new byte[] { 0, 15, 8 }, new byte[] { 0, 15, 3 }, - new byte[] { 0, 8, 15 }, new byte[] { 0, 3, 15 }, new byte[] { 0, 15, 3 }, new byte[] { 0, 15, 8 }, - new byte[] { 0, 8, 15 }, new byte[] { 0, 8, 15 }, new byte[] { 0, 6, 15 }, new byte[] { 0, 6, 15 }, - new byte[] { 0, 6, 15 }, new byte[] { 0, 5, 15 }, new byte[] { 0, 3, 15 }, new byte[] { 0, 3, 8 }, - new byte[] { 0, 3, 15 }, new byte[] { 0, 3, 8 }, new byte[] { 0, 8, 15 }, new byte[] { 0, 15, 3 }, - new byte[] { 0, 3, 15 }, new byte[] { 0, 3, 8 }, new byte[] { 0, 6, 15 }, new byte[] { 0, 10, 8 }, - new byte[] { 0, 5, 3 }, new byte[] { 0, 8, 15 }, new byte[] { 0, 8, 6 }, new byte[] { 0, 6, 10 }, - new byte[] { 0, 8, 15 }, new byte[] { 0, 5, 15 }, new byte[] { 0, 15, 10 }, new byte[] { 0, 15, 8 }, - new byte[] { 0, 8, 15 }, new byte[] { 0, 15, 3 }, new byte[] { 0, 3, 15 }, new byte[] { 0, 5, 10 }, - new byte[] { 0, 6, 10 }, new byte[] { 0, 10, 8 }, new byte[] { 0, 8, 9 }, new byte[] { 0, 15, 10 }, - new byte[] { 0, 15, 6 }, new byte[] { 0, 3, 15 }, new byte[] { 0, 15, 8 }, new byte[] { 0, 5, 15 }, - new byte[] { 0, 15, 3 }, new byte[] { 0, 15, 6 }, new byte[] { 0, 15, 6 }, new byte[] { 0, 15, 8 }, - new byte[] { 0, 3, 15 }, new byte[] { 0, 15, 3 }, new byte[] { 0, 5, 15 }, new byte[] { 0, 5, 15 }, - new byte[] { 0, 5, 15 }, new byte[] { 0, 8, 15 }, new byte[] { 0, 5, 15 }, new byte[] { 0, 10, 15 }, - new byte[] { 0, 5, 15 }, new byte[] { 0, 10, 15 }, new byte[] { 0, 8, 15 }, new byte[] { 0, 13, 15 }, - new byte[] { 0, 15, 3 }, new byte[] { 0, 12, 15 }, new byte[] { 0, 3, 15 }, new byte[] { 0, 3, 8 }, + [0, 3, 15], [0, 3, 8], [0, 15, 8], [0, 15, 3], [0, 8, 15], [0, 3, 15], [0, 15, 3], [0, 15, 8], + [0, 8, 15], [0, 8, 15], [0, 6, 15], [0, 6, 15], [0, 6, 15], [0, 5, 15], [0, 3, 15], [0, 3, 8], + [0, 3, 15], [0, 3, 8], [0, 8, 15], [0, 15, 3], [0, 3, 15], [0, 3, 8], [0, 6, 15], [0, 10, 8], + [0, 5, 3], [0, 8, 15], [0, 8, 6], [0, 6, 10], [0, 8, 15], [0, 5, 15], [0, 15, 10], [0, 15, 8], + [0, 8, 15], [0, 15, 3], [0, 3, 15], [0, 5, 10], [0, 6, 10], [0, 10, 8], [0, 8, 9], [0, 15, 10], + [0, 15, 6], [0, 3, 15], [0, 15, 8], [0, 5, 15], [0, 15, 3], [0, 15, 6], [0, 15, 6], [0, 15, 8], + [0, 3, 15], [0, 15, 3], [0, 5, 15], [0, 5, 15], [0, 5, 15], [0, 8, 15], [0, 5, 15], [0, 10, 15], + [0, 5, 15], [0, 10, 15], [0, 8, 15], [0, 13, 15], [0, 15, 3], [0, 12, 15], [0, 3, 15], [0, 3, 8], }, }; @@ -93,204 +69,204 @@ namespace Ryujinx.Graphics.Texture.Utils { new byte[64][] { - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 0 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 1 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 2 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 3 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 4 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 5 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 6 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 7 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 8 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 9 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 10 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 11 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 12 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 13 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 14 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 15 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 16 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 17 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 18 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 19 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 20 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 21 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 22 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 23 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 24 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 25 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 26 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 27 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 28 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 29 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 30 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 31 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 32 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 33 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 34 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 35 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 36 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 37 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 38 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 39 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 40 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 41 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 42 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 43 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 44 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 45 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 46 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 47 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 48 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 49 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 50 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 51 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 52 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 53 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 54 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 55 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 56 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 57 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 58 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 59 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 60 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 61 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 62 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 63 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 0 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 2 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 3 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 4 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 5 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 6 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 7 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 8 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 9 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 10 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 11 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 12 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 13 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 14 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 15 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 16 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 17 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 18 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 19 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 20 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 21 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 22 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 23 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 24 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 25 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 26 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 27 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 28 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 29 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 30 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 31 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 32 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 33 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 34 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 35 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 36 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 37 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 38 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 39 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 40 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 41 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 42 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 43 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 44 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 45 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 46 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 47 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 48 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 49 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 50 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 51 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 52 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 53 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 54 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 55 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 56 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 57 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 58 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 59 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 60 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 61 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 62 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 63 }, new byte[64][] { - new byte[16] { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, // 0 - new byte[16] { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 }, // 1 - new byte[16] { 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1 }, // 2 - new byte[16] { 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1 }, // 3 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1 }, // 4 - new byte[16] { 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 }, // 5 - new byte[16] { 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 }, // 6 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1 }, // 7 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1 }, // 8 - new byte[16] { 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // 9 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1 }, // 10 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1 }, // 11 - new byte[16] { 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // 12 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }, // 13 - new byte[16] { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // 14 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 }, // 15 - new byte[16] { 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1 }, // 16 - new byte[16] { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, // 17 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0 }, // 18 - new byte[16] { 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, // 19 - new byte[16] { 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, // 20 - new byte[16] { 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0 }, // 21 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0 }, // 22 - new byte[16] { 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1 }, // 23 - new byte[16] { 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, // 24 - new byte[16] { 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0 }, // 25 - new byte[16] { 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0 }, // 26 - new byte[16] { 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0 }, // 27 - new byte[16] { 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0 }, // 28 - new byte[16] { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, // 29 - new byte[16] { 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0 }, // 30 - new byte[16] { 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0 }, // 31 - new byte[16] { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, // 32 - new byte[16] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1 }, // 33 - new byte[16] { 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0 }, // 34 - new byte[16] { 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0 }, // 35 - new byte[16] { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0 }, // 36 - new byte[16] { 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0 }, // 37 - new byte[16] { 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1 }, // 38 - new byte[16] { 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 }, // 39 - new byte[16] { 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0 }, // 40 - new byte[16] { 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 }, // 41 - new byte[16] { 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0 }, // 42 - new byte[16] { 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0 }, // 43 - new byte[16] { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 }, // 44 - new byte[16] { 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1 }, // 45 - new byte[16] { 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1 }, // 46 - new byte[16] { 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // 47 - new byte[16] { 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, // 48 - new byte[16] { 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0 }, // 49 - new byte[16] { 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0 }, // 50 - new byte[16] { 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0 }, // 51 - new byte[16] { 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1 }, // 52 - new byte[16] { 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1 }, // 53 - new byte[16] { 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0 }, // 54 - new byte[16] { 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0 }, // 55 - new byte[16] { 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1 }, // 56 - new byte[16] { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1 }, // 57 - new byte[16] { 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1 }, // 58 - new byte[16] { 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1 }, // 59 - new byte[16] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, // 60 - new byte[16] { 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, // 61 - new byte[16] { 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0 }, // 62 - new byte[16] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1 }, // 63 + [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], // 0 + [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1], // 1 + [0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1], // 2 + [0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1], // 3 + [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1], // 4 + [0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1], // 5 + [0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1], // 6 + [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1], // 7 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1], // 8 + [0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], // 9 + [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1], // 10 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1], // 11 + [0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], // 12 + [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], // 13 + [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], // 14 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1], // 15 + [0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1], // 16 + [0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], // 17 + [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0], // 18 + [0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0], // 19 + [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], // 20 + [0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0], // 21 + [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0], // 22 + [0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1], // 23 + [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], // 24 + [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0], // 25 + [0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0], // 26 + [0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0], // 27 + [0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0], // 28 + [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], // 29 + [0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0], // 30 + [0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0], // 31 + [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], // 32 + [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1], // 33 + [0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0], // 34 + [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0], // 35 + [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0], // 36 + [0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0], // 37 + [0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1], // 38 + [0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1], // 39 + [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0], // 40 + [0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0], // 41 + [0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0], // 42 + [0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0], // 43 + [0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0], // 44 + [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1], // 45 + [0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1], // 46 + [0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0], // 47 + [0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], // 48 + [0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0], // 49 + [0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0], // 50 + [0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0], // 51 + [0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1], // 52 + [0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1], // 53 + [0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0], // 54 + [0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0], // 55 + [0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1], // 56 + [0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1], // 57 + [0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1], // 58 + [0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1], // 59 + [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], // 60 + [0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], // 61 + [0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0], // 62 + [0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1], // 63 }, new byte[64][] { - new byte[16] { 0, 0, 1, 1, 0, 0, 1, 1, 0, 2, 2, 1, 2, 2, 2, 2 }, // 0 - new byte[16] { 0, 0, 0, 1, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, 2, 1 }, // 1 - new byte[16] { 0, 0, 0, 0, 2, 0, 0, 1, 2, 2, 1, 1, 2, 2, 1, 1 }, // 2 - new byte[16] { 0, 2, 2, 2, 0, 0, 2, 2, 0, 0, 1, 1, 0, 1, 1, 1 }, // 3 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2 }, // 4 - new byte[16] { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, 2, 2 }, // 5 - new byte[16] { 0, 0, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1 }, // 6 - new byte[16] { 0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1 }, // 7 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2 }, // 8 - new byte[16] { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2 }, // 9 - new byte[16] { 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2 }, // 10 - new byte[16] { 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2 }, // 11 - new byte[16] { 0, 1, 1, 2, 0, 1, 1, 2, 0, 1, 1, 2, 0, 1, 1, 2 }, // 12 - new byte[16] { 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 2 }, // 13 - new byte[16] { 0, 0, 1, 1, 0, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2 }, // 14 - new byte[16] { 0, 0, 1, 1, 2, 0, 0, 1, 2, 2, 0, 0, 2, 2, 2, 0 }, // 15 - new byte[16] { 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 2, 1, 1, 2, 2 }, // 16 - new byte[16] { 0, 1, 1, 1, 0, 0, 1, 1, 2, 0, 0, 1, 2, 2, 0, 0 }, // 17 - new byte[16] { 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2 }, // 18 - new byte[16] { 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1 }, // 19 - new byte[16] { 0, 1, 1, 1, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2 }, // 20 - new byte[16] { 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 2, 1, 2, 2, 2, 1 }, // 21 - new byte[16] { 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 2, 0, 1, 2, 2 }, // 22 - new byte[16] { 0, 0, 0, 0, 1, 1, 0, 0, 2, 2, 1, 0, 2, 2, 1, 0 }, // 23 - new byte[16] { 0, 1, 2, 2, 0, 1, 2, 2, 0, 0, 1, 1, 0, 0, 0, 0 }, // 24 - new byte[16] { 0, 0, 1, 2, 0, 0, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2 }, // 25 - new byte[16] { 0, 1, 1, 0, 1, 2, 2, 1, 1, 2, 2, 1, 0, 1, 1, 0 }, // 26 - new byte[16] { 0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 2, 1, 1, 2, 2, 1 }, // 27 - new byte[16] { 0, 0, 2, 2, 1, 1, 0, 2, 1, 1, 0, 2, 0, 0, 2, 2 }, // 28 - new byte[16] { 0, 1, 1, 0, 0, 1, 1, 0, 2, 0, 0, 2, 2, 2, 2, 2 }, // 29 - new byte[16] { 0, 0, 1, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 0, 1, 1 }, // 30 - new byte[16] { 0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 1, 1, 2, 2, 2, 1 }, // 31 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 2, 1, 2, 2, 2 }, // 32 - new byte[16] { 0, 2, 2, 2, 0, 0, 2, 2, 0, 0, 1, 2, 0, 0, 1, 1 }, // 33 - new byte[16] { 0, 0, 1, 1, 0, 0, 1, 2, 0, 0, 2, 2, 0, 2, 2, 2 }, // 34 - new byte[16] { 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0 }, // 35 - new byte[16] { 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0 }, // 36 - new byte[16] { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0 }, // 37 - new byte[16] { 0, 1, 2, 0, 2, 0, 1, 2, 1, 2, 0, 1, 0, 1, 2, 0 }, // 38 - new byte[16] { 0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 0, 0, 1, 1 }, // 39 - new byte[16] { 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1 }, // 40 - new byte[16] { 0, 1, 0, 1, 0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2 }, // 41 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 1, 2, 1, 2, 1 }, // 42 - new byte[16] { 0, 0, 2, 2, 1, 1, 2, 2, 0, 0, 2, 2, 1, 1, 2, 2 }, // 43 - new byte[16] { 0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, 1, 1 }, // 44 - new byte[16] { 0, 2, 2, 0, 1, 2, 2, 1, 0, 2, 2, 0, 1, 2, 2, 1 }, // 45 - new byte[16] { 0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 1 }, // 46 - new byte[16] { 0, 0, 0, 0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1 }, // 47 - new byte[16] { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 2, 2, 2 }, // 48 - new byte[16] { 0, 2, 2, 2, 0, 1, 1, 1, 0, 2, 2, 2, 0, 1, 1, 1 }, // 49 - new byte[16] { 0, 0, 0, 2, 1, 1, 1, 2, 0, 0, 0, 2, 1, 1, 1, 2 }, // 50 - new byte[16] { 0, 0, 0, 0, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2 }, // 51 - new byte[16] { 0, 2, 2, 2, 0, 1, 1, 1, 0, 1, 1, 1, 0, 2, 2, 2 }, // 52 - new byte[16] { 0, 0, 0, 2, 1, 1, 1, 2, 1, 1, 1, 2, 0, 0, 0, 2 }, // 53 - new byte[16] { 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 2, 2, 2, 2 }, // 54 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 2, 1, 1, 2 }, // 55 - new byte[16] { 0, 1, 1, 0, 0, 1, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2 }, // 56 - new byte[16] { 0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 2 }, // 57 - new byte[16] { 0, 0, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 0, 0, 2, 2 }, // 58 - new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2 }, // 59 - new byte[16] { 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1 }, // 60 - new byte[16] { 0, 2, 2, 2, 1, 2, 2, 2, 0, 2, 2, 2, 1, 2, 2, 2 }, // 61 - new byte[16] { 0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, // 62 - new byte[16] { 0, 1, 1, 1, 2, 0, 1, 1, 2, 2, 0, 1, 2, 2, 2, 0 }, // 63 + [0, 0, 1, 1, 0, 0, 1, 1, 0, 2, 2, 1, 2, 2, 2, 2], // 0 + [0, 0, 0, 1, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, 2, 1], // 1 + [0, 0, 0, 0, 2, 0, 0, 1, 2, 2, 1, 1, 2, 2, 1, 1], // 2 + [0, 2, 2, 2, 0, 0, 2, 2, 0, 0, 1, 1, 0, 1, 1, 1], // 3 + [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2], // 4 + [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, 2, 2], // 5 + [0, 0, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1], // 6 + [0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1], // 7 + [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], // 8 + [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2], // 9 + [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2], // 10 + [0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2], // 11 + [0, 1, 1, 2, 0, 1, 1, 2, 0, 1, 1, 2, 0, 1, 1, 2], // 12 + [0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 2], // 13 + [0, 0, 1, 1, 0, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2], // 14 + [0, 0, 1, 1, 2, 0, 0, 1, 2, 2, 0, 0, 2, 2, 2, 0], // 15 + [0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 2, 1, 1, 2, 2], // 16 + [0, 1, 1, 1, 0, 0, 1, 1, 2, 0, 0, 1, 2, 2, 0, 0], // 17 + [0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2], // 18 + [0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1], // 19 + [0, 1, 1, 1, 0, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 2], // 20 + [0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 2, 1, 2, 2, 2, 1], // 21 + [0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 2, 0, 1, 2, 2], // 22 + [0, 0, 0, 0, 1, 1, 0, 0, 2, 2, 1, 0, 2, 2, 1, 0], // 23 + [0, 1, 2, 2, 0, 1, 2, 2, 0, 0, 1, 1, 0, 0, 0, 0], // 24 + [0, 0, 1, 2, 0, 0, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2], // 25 + [0, 1, 1, 0, 1, 2, 2, 1, 1, 2, 2, 1, 0, 1, 1, 0], // 26 + [0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 2, 1, 1, 2, 2, 1], // 27 + [0, 0, 2, 2, 1, 1, 0, 2, 1, 1, 0, 2, 0, 0, 2, 2], // 28 + [0, 1, 1, 0, 0, 1, 1, 0, 2, 0, 0, 2, 2, 2, 2, 2], // 29 + [0, 0, 1, 1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 0, 1, 1], // 30 + [0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 1, 1, 2, 2, 2, 1], // 31 + [0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 2, 1, 2, 2, 2], // 32 + [0, 2, 2, 2, 0, 0, 2, 2, 0, 0, 1, 2, 0, 0, 1, 1], // 33 + [0, 0, 1, 1, 0, 0, 1, 2, 0, 0, 2, 2, 0, 2, 2, 2], // 34 + [0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0], // 35 + [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0], // 36 + [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0], // 37 + [0, 1, 2, 0, 2, 0, 1, 2, 1, 2, 0, 1, 0, 1, 2, 0], // 38 + [0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2, 0, 0, 1, 1], // 39 + [0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1], // 40 + [0, 1, 0, 1, 0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2], // 41 + [0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 1, 2, 1, 2, 1], // 42 + [0, 0, 2, 2, 1, 1, 2, 2, 0, 0, 2, 2, 1, 1, 2, 2], // 43 + [0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, 1, 1], // 44 + [0, 2, 2, 0, 1, 2, 2, 1, 0, 2, 2, 0, 1, 2, 2, 1], // 45 + [0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 1], // 46 + [0, 0, 0, 0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1], // 47 + [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 2, 2, 2], // 48 + [0, 2, 2, 2, 0, 1, 1, 1, 0, 2, 2, 2, 0, 1, 1, 1], // 49 + [0, 0, 0, 2, 1, 1, 1, 2, 0, 0, 0, 2, 1, 1, 1, 2], // 50 + [0, 0, 0, 0, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2], // 51 + [0, 2, 2, 2, 0, 1, 1, 1, 0, 1, 1, 1, 0, 2, 2, 2], // 52 + [0, 0, 0, 2, 1, 1, 1, 2, 1, 1, 1, 2, 0, 0, 0, 2], // 53 + [0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 2, 2, 2, 2], // 54 + [0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 2, 1, 1, 2], // 55 + [0, 1, 1, 0, 0, 1, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2], // 56 + [0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 2, 2], // 57 + [0, 0, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 0, 0, 2, 2], // 58 + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2], // 59 + [0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1], // 60 + [0, 2, 2, 2, 1, 2, 2, 2, 0, 2, 2, 2, 1, 2, 2, 2], // 61 + [0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], // 62 + [0, 1, 1, 1, 2, 0, 1, 1, 2, 2, 0, 1, 2, 2, 2, 0], // 63 }, }; } diff --git a/src/Ryujinx.HLE.Generators/ServiceSyntaxReceiver.cs b/src/Ryujinx.HLE.Generators/ServiceSyntaxReceiver.cs index b7ca5dfd2..7513f5f45 100644 --- a/src/Ryujinx.HLE.Generators/ServiceSyntaxReceiver.cs +++ b/src/Ryujinx.HLE.Generators/ServiceSyntaxReceiver.cs @@ -6,7 +6,7 @@ namespace Ryujinx.HLE.Generators { internal class ServiceSyntaxReceiver : ISyntaxReceiver { - public HashSet Types = new(); + public HashSet Types = []; public void OnVisitSyntaxNode(SyntaxNode syntaxNode) { diff --git a/src/Ryujinx.Tests.Memory/MultiRegionTrackingTests.cs b/src/Ryujinx.Tests.Memory/MultiRegionTrackingTests.cs index c71a3e1f0..c9ac4dc94 100644 --- a/src/Ryujinx.Tests.Memory/MultiRegionTrackingTests.cs +++ b/src/Ryujinx.Tests.Memory/MultiRegionTrackingTests.cs @@ -208,7 +208,7 @@ namespace Ryujinx.Tests.Memory // Query some large regions to prep the subdivision of the tracking region. - int[] regionSizes = new int[] { 6, 4, 3, 2, 6, 1 }; + int[] regionSizes = [6, 4, 3, 2, 6, 1]; ulong address = 0; for (int i = 0; i < regionSizes.Length; i++) @@ -333,24 +333,24 @@ namespace Ryujinx.Tests.Memory // Finally, create a granular handle that inherits all these handles. - IEnumerable[] handleGroups = new IEnumerable[] - { + IEnumerable[] handleGroups = + [ granular.GetHandles(), singlePages, - doublePages, - }; + doublePages + ]; MultiRegionHandle combined = _tracking.BeginGranularTracking(0, PageSize * 18, handleGroups.SelectMany((handles) => handles), PageSize, 0); - bool[] expectedDirty = new bool[] - { + bool[] expectedDirty = + [ true, true, true, // Gap. false, true, false, // Multi-region. true, true, // Gap. false, true, false, // Individual handles. false, false, true, true, false, false, // Double size handles. - true, // Gap. - }; + true // Gap. + ]; for (int i = 0; i < 18; i++) { diff --git a/src/Ryujinx.Tests.Memory/TrackingTests.cs b/src/Ryujinx.Tests.Memory/TrackingTests.cs index c74446cfb..675179ede 100644 --- a/src/Ryujinx.Tests.Memory/TrackingTests.cs +++ b/src/Ryujinx.Tests.Memory/TrackingTests.cs @@ -214,7 +214,7 @@ namespace Ryujinx.Tests.Memory handles[i].Reprotect(); } - List testThreads = new(); + List testThreads = []; // Dirty flag consumer threads int dirtyFlagReprotects = 0; diff --git a/src/Ryujinx.Tests.Unicorn/UnicornAArch32.cs b/src/Ryujinx.Tests.Unicorn/UnicornAArch32.cs index 6fe62b741..41b40b177 100644 --- a/src/Ryujinx.Tests.Unicorn/UnicornAArch32.cs +++ b/src/Ryujinx.Tests.Unicorn/UnicornAArch32.cs @@ -122,7 +122,7 @@ namespace Ryujinx.Tests.Unicorn } private static readonly int[] _xRegisters = - { + [ Arm.UC_ARM_REG_R0, Arm.UC_ARM_REG_R1, Arm.UC_ARM_REG_R2, @@ -138,12 +138,12 @@ namespace Ryujinx.Tests.Unicorn Arm.UC_ARM_REG_R12, Arm.UC_ARM_REG_R13, Arm.UC_ARM_REG_R14, - Arm.UC_ARM_REG_R15, - }; + Arm.UC_ARM_REG_R15 + ]; #pragma warning disable IDE0051, IDE0052 // Remove unused private member private static readonly int[] _qRegisters = - { + [ Arm.UC_ARM_REG_Q0, Arm.UC_ARM_REG_Q1, Arm.UC_ARM_REG_Q2, @@ -159,8 +159,8 @@ namespace Ryujinx.Tests.Unicorn Arm.UC_ARM_REG_Q12, Arm.UC_ARM_REG_Q13, Arm.UC_ARM_REG_Q14, - Arm.UC_ARM_REG_Q15, - }; + Arm.UC_ARM_REG_Q15 + ]; #pragma warning restore IDE0051, IDE0052 public uint GetX(int index) @@ -259,7 +259,7 @@ namespace Ryujinx.Tests.Unicorn Uc.MemWrite((long)address, value); } - public void MemoryWrite8(ulong address, byte value) => MemoryWrite(address, new[] { value }); + public void MemoryWrite8(ulong address, byte value) => MemoryWrite(address, [value]); public void MemoryWrite16(ulong address, short value) => MemoryWrite(address, BitConverter.GetBytes(value)); public void MemoryWrite16(ulong address, ushort value) => MemoryWrite(address, BitConverter.GetBytes(value)); public void MemoryWrite32(ulong address, int value) => MemoryWrite(address, BitConverter.GetBytes(value)); diff --git a/src/Ryujinx.Tests.Unicorn/UnicornAArch64.cs b/src/Ryujinx.Tests.Unicorn/UnicornAArch64.cs index bdb535581..8525b0446 100644 --- a/src/Ryujinx.Tests.Unicorn/UnicornAArch64.cs +++ b/src/Ryujinx.Tests.Unicorn/UnicornAArch64.cs @@ -111,7 +111,7 @@ namespace Ryujinx.Tests.Unicorn } private static readonly int[] _xRegisters = - { + [ Arm64.UC_ARM64_REG_X0, Arm64.UC_ARM64_REG_X1, Arm64.UC_ARM64_REG_X2, @@ -142,11 +142,11 @@ namespace Ryujinx.Tests.Unicorn Arm64.UC_ARM64_REG_X27, Arm64.UC_ARM64_REG_X28, Arm64.UC_ARM64_REG_X29, - Arm64.UC_ARM64_REG_X30, - }; + Arm64.UC_ARM64_REG_X30 + ]; private static readonly int[] _qRegisters = - { + [ Arm64.UC_ARM64_REG_Q0, Arm64.UC_ARM64_REG_Q1, Arm64.UC_ARM64_REG_Q2, @@ -178,8 +178,8 @@ namespace Ryujinx.Tests.Unicorn Arm64.UC_ARM64_REG_Q28, Arm64.UC_ARM64_REG_Q29, Arm64.UC_ARM64_REG_Q30, - Arm64.UC_ARM64_REG_Q31, - }; + Arm64.UC_ARM64_REG_Q31 + ]; public ulong GetX(int index) { @@ -272,7 +272,7 @@ namespace Ryujinx.Tests.Unicorn Uc.MemWrite((long)address, value); } - public void MemoryWrite8(ulong address, byte value) => MemoryWrite(address, new[] { value }); + public void MemoryWrite8(ulong address, byte value) => MemoryWrite(address, [value]); public void MemoryWrite16(ulong address, short value) => MemoryWrite(address, BitConverter.GetBytes(value)); public void MemoryWrite16(ulong address, ushort value) => MemoryWrite(address, BitConverter.GetBytes(value)); public void MemoryWrite32(ulong address, int value) => MemoryWrite(address, BitConverter.GetBytes(value)); diff --git a/src/Ryujinx.Tests/Cpu/Arm64CodeGenCommonTests.cs b/src/Ryujinx.Tests/Cpu/Arm64CodeGenCommonTests.cs index 0092d9a11..98a806509 100644 --- a/src/Ryujinx.Tests/Cpu/Arm64CodeGenCommonTests.cs +++ b/src/Ryujinx.Tests/Cpu/Arm64CodeGenCommonTests.cs @@ -15,7 +15,7 @@ namespace Ryujinx.Tests.Cpu } public static readonly TestCase[] TestCases = - { + [ new() { Value = 0, Valid = false, ImmN = 0, ImmS = 0, ImmR = 0 }, new() { Value = 0x970977f35f848714, Valid = false, ImmN = 0, ImmS = 0, ImmR = 0 }, new() { Value = 0xffffffffffffffff, Valid = false, ImmN = 0, ImmS = 0, ImmR = 0 }, @@ -29,8 +29,8 @@ namespace Ryujinx.Tests.Cpu new() { Value = 0xc001c001c001c001, Valid = true, ImmN = 0, ImmS = 0x22, ImmR = 2 }, new() { Value = 0x0000038000000380, Valid = true, ImmN = 0, ImmS = 0x02, ImmR = 25 }, new() { Value = 0xffff8fffffff8fff, Valid = true, ImmN = 0, ImmS = 0x1c, ImmR = 17 }, - new() { Value = 0x000000000ffff800, Valid = true, ImmN = 1, ImmS = 0x10, ImmR = 53 }, - }; + new() { Value = 0x000000000ffff800, Valid = true, ImmN = 1, ImmS = 0x10, ImmR = 53 } + ]; [Test] public void BitImmTests([ValueSource(nameof(TestCases))] TestCase test) diff --git a/src/Ryujinx.Tests/Cpu/CpuTestAlu32.cs b/src/Ryujinx.Tests/Cpu/CpuTestAlu32.cs index 1e66d8112..f13bc0f68 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestAlu32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestAlu32.cs @@ -12,8 +12,8 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] SuHAddSub8() { - return new[] - { + return + [ 0xe6100f90u, // SADD8 R0, R0, R0 0xe6100ff0u, // SSUB8 R0, R0, R0 0xe6300f90u, // SHADD8 R0, R0, R0 @@ -21,58 +21,58 @@ namespace Ryujinx.Tests.Cpu 0xe6500f90u, // UADD8 R0, R0, R0 0xe6500ff0u, // USUB8 R0, R0, R0 0xe6700f90u, // UHADD8 R0, R0, R0 - 0xe6700ff0u, // UHSUB8 R0, R0, R0 - }; + 0xe6700ff0u // UHSUB8 R0, R0, R0 + ]; } private static uint[] UQAddSub16() { - return new[] - { + return + [ 0xe6200f10u, // QADD16 R0, R0, R0 0xe6600f10u, // UQADD16 R0, R0, R0 - 0xe6600f70u, // UQSUB16 R0, R0, R0 - }; + 0xe6600f70u // UQSUB16 R0, R0, R0 + ]; } private static uint[] UQAddSub8() { - return new[] - { + return + [ 0xe6600f90u, // UQADD8 R0, R0, R0 - 0xe6600ff0u, // UQSUB8 R0, R0, R0 - }; + 0xe6600ff0u // UQSUB8 R0, R0, R0 + ]; } private static uint[] SsatUsat() { - return new[] - { + return + [ 0xe6a00010u, // SSAT R0, #1, R0, LSL #0 0xe6a00050u, // SSAT R0, #1, R0, ASR #32 0xe6e00010u, // USAT R0, #0, R0, LSL #0 - 0xe6e00050u, // USAT R0, #0, R0, ASR #32 - }; + 0xe6e00050u // USAT R0, #0, R0, ASR #32 + ]; } private static uint[] Ssat16Usat16() { - return new[] - { + return + [ 0xe6a00f30u, // SSAT16 R0, #1, R0 - 0xe6e00f30u, // USAT16 R0, #0, R0 - }; + 0xe6e00f30u // USAT16 R0, #0, R0 + ]; } private static uint[] LsrLslAsrRor() { - return new[] - { + return + [ 0xe1b00030u, // LSRS R0, R0, R0 0xe1b00010u, // LSLS R0, R0, R0 0xe1b00050u, // ASRS R0, R0, R0 - 0xe1b00070u, // RORS R0, R0, R0 - }; + 0xe1b00070u // RORS R0, R0, R0 + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestAluBinary.cs b/src/Ryujinx.Tests/Cpu/CpuTestAluBinary.cs index 1e48086b2..2b3aa61aa 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestAluBinary.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestAluBinary.cs @@ -36,8 +36,8 @@ namespace Ryujinx.Tests.Cpu // - xor 0 // Only includes non-C variant, as the other can be tested with unicorn. - return new[] - { + return + [ new CrcTest(0x00000000u, 0x00_00_00_00_00_00_00_00u, false, 0x00000000, 0x00000000, 0x00000000, 0x00000000), new CrcTest(0x00000000u, 0x7f_ff_ff_ff_ff_ff_ff_ffu, false, 0x2d02ef8d, 0xbe2612ff, 0xdebb20e3, 0xa9de8355), new CrcTest(0x00000000u, 0x80_00_00_00_00_00_00_00u, false, 0x00000000, 0x00000000, 0x00000000, 0xedb88320), @@ -48,8 +48,8 @@ namespace Ryujinx.Tests.Cpu new CrcTest(0xffffffffu, 0x7f_ff_ff_ff_ff_ff_ff_ffu, false, 0x00ffffff, 0x0000ffff, 0x00000000, 0x3303a3c3), new CrcTest(0xffffffffu, 0x80_00_00_00_00_00_00_00u, false, 0x2dfd1072, 0xbe26ed00, 0xdebb20e3, 0x7765a3b6), new CrcTest(0xffffffffu, 0xff_ff_ff_ff_ff_ff_ff_ffu, false, 0x00ffffff, 0x0000ffff, 0x00000000, 0xdebb20e3), - new CrcTest(0xffffffffu, 0xa0_02_f1_ca_52_78_8c_1cu, false, 0x39fc4c3d, 0xbc5f7f56, 0x4ed8e906, 0x12cb419c), - }; + new CrcTest(0xffffffffu, 0xa0_02_f1_ca_52_78_8c_1cu, false, 0x39fc4c3d, 0xbc5f7f56, 0x4ed8e906, 0x12cb419c) + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestAluBinary32.cs b/src/Ryujinx.Tests/Cpu/CpuTestAluBinary32.cs index 43d054368..29d34605d 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestAluBinary32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestAluBinary32.cs @@ -36,8 +36,8 @@ namespace Ryujinx.Tests.Cpu // - bytes in order of increasing significance // - xor 0 - return new[] - { + return + [ new CrcTest32(0x00000000u, 0x00_00_00_00u, false, 0x00000000, 0x00000000, 0x00000000), new CrcTest32(0x00000000u, 0x7f_ff_ff_ffu, false, 0x2d02ef8d, 0xbe2612ff, 0x3303a3c3), new CrcTest32(0x00000000u, 0x80_00_00_00u, false, 0x00000000, 0x00000000, 0xedb88320), @@ -60,8 +60,8 @@ namespace Ryujinx.Tests.Cpu new CrcTest32(0xffffffffu, 0x7f_ff_ff_ffu, true, 0x00ffffff, 0x0000ffff, 0x82f63b78), new CrcTest32(0xffffffffu, 0x80_00_00_00u, true, 0xad82acae, 0x0e9e882d, 0x356e8f40), new CrcTest32(0xffffffffu, 0xff_ff_ff_ffu, true, 0x00ffffff, 0x0000ffff, 0x00000000), - new CrcTest32(0xffffffffu, 0x9d_cb_12_f0u, true, 0x5eecc3db, 0xbb6111cb, 0xcfb54fc9), - }; + new CrcTest32(0xffffffffu, 0x9d_cb_12_f0u, true, 0x5eecc3db, 0xbb6111cb, 0xcfb54fc9) + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestAluImm32.cs b/src/Ryujinx.Tests/Cpu/CpuTestAluImm32.cs index eeeef085c..1e53b6e32 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestAluImm32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestAluImm32.cs @@ -12,8 +12,8 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] Opcodes() { - return new[] - { + return + [ 0xe2a00000u, // ADC R0, R0, #0 0xe2b00000u, // ADCS R0, R0, #0 0xe2800000u, // ADD R0, R0, #0 @@ -27,8 +27,8 @@ namespace Ryujinx.Tests.Cpu 0xe2c00000u, // SBC R0, R0, #0 0xe2d00000u, // SBCS R0, R0, #0 0xe2400000u, // SUB R0, R0, #0 - 0xe2500000u, // SUBS R0, R0, #0 - }; + 0xe2500000u // SUBS R0, R0, #0 + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestAluRs32.cs b/src/Ryujinx.Tests/Cpu/CpuTestAluRs32.cs index 0e71b1839..a6f8976c6 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestAluRs32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestAluRs32.cs @@ -12,26 +12,26 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _Add_Adds_Rsb_Rsbs_() { - return new[] - { + return + [ 0xe0800000u, // ADD R0, R0, R0, LSL #0 0xe0900000u, // ADDS R0, R0, R0, LSL #0 0xe0600000u, // RSB R0, R0, R0, LSL #0 - 0xe0700000u, // RSBS R0, R0, R0, LSL #0 - }; + 0xe0700000u // RSBS R0, R0, R0, LSL #0 + ]; } private static uint[] _Adc_Adcs_Rsc_Rscs_Sbc_Sbcs_() { - return new[] - { + return + [ 0xe0a00000u, // ADC R0, R0, R0 0xe0b00000u, // ADCS R0, R0, R0 0xe0e00000u, // RSC R0, R0, R0 0xe0f00000u, // RSCS R0, R0, R0 0xe0c00000u, // SBC R0, R0, R0 - 0xe0d00000u, // SBCS R0, R0, R0 - }; + 0xe0d00000u // SBCS R0, R0, R0 + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestMul32.cs b/src/Ryujinx.Tests/Cpu/CpuTestMul32.cs index 7e4b4c062..b39b0bef9 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestMul32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestMul32.cs @@ -12,42 +12,42 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _Smlabb_Smlabt_Smlatb_Smlatt_() { - return new[] - { + return + [ 0xe1000080u, // SMLABB R0, R0, R0, R0 0xe10000C0u, // SMLABT R0, R0, R0, R0 0xe10000A0u, // SMLATB R0, R0, R0, R0 - 0xe10000E0u, // SMLATT R0, R0, R0, R0 - }; + 0xe10000E0u // SMLATT R0, R0, R0, R0 + ]; } private static uint[] _Smlawb_Smlawt_() { - return new[] - { + return + [ 0xe1200080u, // SMLAWB R0, R0, R0, R0 - 0xe12000C0u, // SMLAWT R0, R0, R0, R0 - }; + 0xe12000C0u // SMLAWT R0, R0, R0, R0 + ]; } private static uint[] _Smulbb_Smulbt_Smultb_Smultt_() { - return new[] - { + return + [ 0xe1600080u, // SMULBB R0, R0, R0 0xe16000C0u, // SMULBT R0, R0, R0 0xe16000A0u, // SMULTB R0, R0, R0 - 0xe16000E0u, // SMULTT R0, R0, R0 - }; + 0xe16000E0u // SMULTT R0, R0, R0 + ]; } private static uint[] _Smulwb_Smulwt_() { - return new[] - { + return + [ 0xe12000a0u, // SMULWB R0, R0, R0 - 0xe12000e0u, // SMULWT R0, R0, R0 - }; + 0xe12000e0u // SMULWT R0, R0, R0 + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimd.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimd.cs index eb763618d..f733f3e61 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimd.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimd.cs @@ -101,122 +101,135 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Types)" private static ulong[] _1B1H1S1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x000000000000007Ful, 0x0000000000000080ul, 0x00000000000000FFul, 0x0000000000007FFFul, 0x0000000000008000ul, 0x000000000000FFFFul, 0x000000007FFFFFFFul, 0x0000000080000000ul, 0x00000000FFFFFFFFul, 0x7FFFFFFFFFFFFFFFul, 0x8000000000000000ul, - 0xFFFFFFFFFFFFFFFFul, - }; + 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _1H1S1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x0000000000007FFFul, 0x0000000000008000ul, 0x000000000000FFFFul, 0x000000007FFFFFFFul, 0x0000000080000000ul, 0x00000000FFFFFFFFul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _1S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x000000007FFFFFFFul, - 0x0000000080000000ul, 0x00000000FFFFFFFFul, - }; + 0x0000000080000000ul, 0x00000000FFFFFFFFul + ]; } private static ulong[] _2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _4H_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFF7FFF7FFF7FFFul, - 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _4H2S1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, 0x8000000080000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, - 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B4H_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFF7FFF7FFF7FFFul, - 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B4H2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B4H2S1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, 0x8000000080000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static uint[] _W_() { - return new[] { + return + [ 0x00000000u, 0x7FFFFFFFu, - 0x80000000u, 0xFFFFFFFFu, - }; + 0x80000000u, 0xFFFFFFFFu + ]; } private static ulong[] _X_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static IEnumerable _1H_F_() @@ -694,558 +707,558 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _SU_Add_Max_Min_V_V_8BB_4HH_() { - return new[] - { + return + [ 0x0E31B800u, // ADDV B0, V0.8B 0x0E30A800u, // SMAXV B0, V0.8B 0x0E31A800u, // SMINV B0, V0.8B 0x2E30A800u, // UMAXV B0, V0.8B - 0x2E31A800u, // UMINV B0, V0.8B - }; + 0x2E31A800u // UMINV B0, V0.8B + ]; } private static uint[] _SU_Add_Max_Min_V_V_16BB_8HH_4SS_() { - return new[] - { + return + [ 0x4E31B800u, // ADDV B0, V0.16B 0x4E30A800u, // SMAXV B0, V0.16B 0x4E31A800u, // SMINV B0, V0.16B 0x6E30A800u, // UMAXV B0, V0.16B - 0x6E31A800u, // UMINV B0, V0.16B - }; + 0x6E31A800u // UMINV B0, V0.16B + ]; } private static uint[] _F_Abs_Neg_Recpx_Sqrt_S_S_() { - return new[] - { + return + [ 0x1E20C020u, // FABS S0, S1 0x1E214020u, // FNEG S0, S1 0x5EA1F820u, // FRECPX S0, S1 - 0x1E21C020u, // FSQRT S0, S1 - }; + 0x1E21C020u // FSQRT S0, S1 + ]; } private static uint[] _F_Abs_Neg_Recpx_Sqrt_S_D_() { - return new[] - { + return + [ 0x1E60C020u, // FABS D0, D1 0x1E614020u, // FNEG D0, D1 0x5EE1F820u, // FRECPX D0, D1 - 0x1E61C020u, // FSQRT D0, D1 - }; + 0x1E61C020u // FSQRT D0, D1 + ]; } private static uint[] _F_Abs_Neg_Sqrt_V_2S_4S_() { - return new[] - { + return + [ 0x0EA0F800u, // FABS V0.2S, V0.2S 0x2EA0F800u, // FNEG V0.2S, V0.2S - 0x2EA1F800u, // FSQRT V0.2S, V0.2S - }; + 0x2EA1F800u // FSQRT V0.2S, V0.2S + ]; } private static uint[] _F_Abs_Neg_Sqrt_V_2D_() { - return new[] - { + return + [ 0x4EE0F800u, // FABS V0.2D, V0.2D 0x6EE0F800u, // FNEG V0.2D, V0.2D - 0x6EE1F800u, // FSQRT V0.2D, V0.2D - }; + 0x6EE1F800u // FSQRT V0.2D, V0.2D + ]; } private static uint[] _F_Add_Max_Min_Nm_P_S_2SS_() { - return new[] - { + return + [ 0x7E30D820u, // FADDP S0, V1.2S 0x7E30C820u, // FMAXNMP S0, V1.2S 0x7E30F820u, // FMAXP S0, V1.2S 0x7EB0C820u, // FMINNMP S0, V1.2S - 0x7EB0F820u, // FMINP S0, V1.2S - }; + 0x7EB0F820u // FMINP S0, V1.2S + ]; } private static uint[] _F_Add_Max_Min_Nm_P_S_2DD_() { - return new[] - { + return + [ 0x7E70D820u, // FADDP D0, V1.2D 0x7E70C820u, // FMAXNMP D0, V1.2D 0x7E70F820u, // FMAXP D0, V1.2D 0x7EF0C820u, // FMINNMP D0, V1.2D - 0x7EF0F820u, // FMINP D0, V1.2D - }; + 0x7EF0F820u // FMINP D0, V1.2D + ]; } private static uint[] _F_Cm_EqGeGtLeLt_S_S_() { - return new[] - { + return + [ 0x5EA0D820u, // FCMEQ S0, S1, #0.0 0x7EA0C820u, // FCMGE S0, S1, #0.0 0x5EA0C820u, // FCMGT S0, S1, #0.0 0x7EA0D820u, // FCMLE S0, S1, #0.0 - 0x5EA0E820u, // FCMLT S0, S1, #0.0 - }; + 0x5EA0E820u // FCMLT S0, S1, #0.0 + ]; } private static uint[] _F_Cm_EqGeGtLeLt_S_D_() { - return new[] - { + return + [ 0x5EE0D820u, // FCMEQ D0, D1, #0.0 0x7EE0C820u, // FCMGE D0, D1, #0.0 0x5EE0C820u, // FCMGT D0, D1, #0.0 0x7EE0D820u, // FCMLE D0, D1, #0.0 - 0x5EE0E820u, // FCMLT D0, D1, #0.0 - }; + 0x5EE0E820u // FCMLT D0, D1, #0.0 + ]; } private static uint[] _F_Cm_EqGeGtLeLt_V_2S_4S_() { - return new[] - { + return + [ 0x0EA0D800u, // FCMEQ V0.2S, V0.2S, #0.0 0x2EA0C800u, // FCMGE V0.2S, V0.2S, #0.0 0x0EA0C800u, // FCMGT V0.2S, V0.2S, #0.0 0x2EA0D800u, // FCMLE V0.2S, V0.2S, #0.0 - 0x0EA0E800u, // FCMLT V0.2S, V0.2S, #0.0 - }; + 0x0EA0E800u // FCMLT V0.2S, V0.2S, #0.0 + ]; } private static uint[] _F_Cm_EqGeGtLeLt_V_2D_() { - return new[] - { + return + [ 0x4EE0D800u, // FCMEQ V0.2D, V0.2D, #0.0 0x6EE0C800u, // FCMGE V0.2D, V0.2D, #0.0 0x4EE0C800u, // FCMGT V0.2D, V0.2D, #0.0 0x6EE0D800u, // FCMLE V0.2D, V0.2D, #0.0 - 0x4EE0E800u, // FCMLT V0.2D, V0.2D, #0.0 - }; + 0x4EE0E800u // FCMLT V0.2D, V0.2D, #0.0 + ]; } private static uint[] _F_Cmp_Cmpe_S_S_() { - return new[] - { + return + [ 0x1E202028u, // FCMP S1, #0.0 - 0x1E202038u, // FCMPE S1, #0.0 - }; + 0x1E202038u // FCMPE S1, #0.0 + ]; } private static uint[] _F_Cmp_Cmpe_S_D_() { - return new[] - { + return + [ 0x1E602028u, // FCMP D1, #0.0 - 0x1E602038u, // FCMPE D1, #0.0 - }; + 0x1E602038u // FCMPE D1, #0.0 + ]; } private static uint[] _F_Cvt_S_SD_() { - return new[] - { - 0x1E22C020u, // FCVT D0, S1 - }; + return + [ + 0x1E22C020u // FCVT D0, S1 + ]; } private static uint[] _F_Cvt_S_DS_() { - return new[] - { - 0x1E624020u, // FCVT S0, D1 - }; + return + [ + 0x1E624020u // FCVT S0, D1 + ]; } private static uint[] _F_Cvt_S_SH_() { - return new[] - { - 0x1E23C020u, // FCVT H0, S1 - }; + return + [ + 0x1E23C020u // FCVT H0, S1 + ]; } private static uint[] _F_Cvt_S_DH_() { - return new[] - { - 0x1E63C020u, // FCVT H0, D1 - }; + return + [ + 0x1E63C020u // FCVT H0, D1 + ]; } private static uint[] _F_Cvt_S_HS_() { - return new[] - { - 0x1EE24020u, // FCVT S0, H1 - }; + return + [ + 0x1EE24020u // FCVT S0, H1 + ]; } private static uint[] _F_Cvt_S_HD_() { - return new[] - { - 0x1EE2C020u, // FCVT D0, H1 - }; + return + [ + 0x1EE2C020u // FCVT D0, H1 + ]; } private static uint[] _F_Cvt_ANZ_SU_S_S_() { - return new[] - { + return + [ 0x5E21C820u, // FCVTAS S0, S1 0x7E21C820u, // FCVTAU S0, S1 0x5E21A820u, // FCVTNS S0, S1 0x7E21A820u, // FCVTNU S0, S1 0x5EA1B820u, // FCVTZS S0, S1 - 0x7EA1B820u, // FCVTZU S0, S1 - }; + 0x7EA1B820u // FCVTZU S0, S1 + ]; } private static uint[] _F_Cvt_ANZ_SU_S_D_() { - return new[] - { + return + [ 0x5E61C820u, // FCVTAS D0, D1 0x7E61C820u, // FCVTAU D0, D1 0x5E61A820u, // FCVTNS D0, D1 0x7E61A820u, // FCVTNU D0, D1 0x5EE1B820u, // FCVTZS D0, D1 - 0x7EE1B820u, // FCVTZU D0, D1 - }; + 0x7EE1B820u // FCVTZU D0, D1 + ]; } private static uint[] _F_Cvt_ANZ_SU_V_2S_4S_() { - return new[] - { + return + [ 0x0E21C800u, // FCVTAS V0.2S, V0.2S 0x2E21C800u, // FCVTAU V0.2S, V0.2S 0x0E21B800u, // FCVTMS V0.2S, V0.2S 0x0E21A800u, // FCVTNS V0.2S, V0.2S 0x2E21A800u, // FCVTNU V0.2S, V0.2S 0x0EA1B800u, // FCVTZS V0.2S, V0.2S - 0x2EA1B800u, // FCVTZU V0.2S, V0.2S - }; + 0x2EA1B800u // FCVTZU V0.2S, V0.2S + ]; } private static uint[] _F_Cvt_ANZ_SU_V_2D_() { - return new[] - { + return + [ 0x4E61C800u, // FCVTAS V0.2D, V0.2D 0x6E61C800u, // FCVTAU V0.2D, V0.2D 0x4E61B800u, // FCVTMS V0.2D, V0.2D 0x4E61A800u, // FCVTNS V0.2D, V0.2D 0x6E61A800u, // FCVTNU V0.2D, V0.2D 0x4EE1B800u, // FCVTZS V0.2D, V0.2D - 0x6EE1B800u, // FCVTZU V0.2D, V0.2D - }; + 0x6EE1B800u // FCVTZU V0.2D, V0.2D + ]; } private static uint[] _F_Cvtl_V_4H4S_8H4S_() { - return new[] - { - 0x0E217800u, // FCVTL V0.4S, V0.4H - }; + return + [ + 0x0E217800u // FCVTL V0.4S, V0.4H + ]; } private static uint[] _F_Cvtl_V_2S2D_4S2D_() { - return new[] - { - 0x0E617800u, // FCVTL V0.2D, V0.2S - }; + return + [ + 0x0E617800u // FCVTL V0.2D, V0.2S + ]; } private static uint[] _F_Cvtn_V_4S4H_4S8H_() { - return new[] - { - 0x0E216800u, // FCVTN V0.4H, V0.4S - }; + return + [ + 0x0E216800u // FCVTN V0.4H, V0.4S + ]; } private static uint[] _F_Cvtn_V_2D2S_2D4S_() { - return new[] - { - 0x0E616800u, // FCVTN V0.2S, V0.2D - }; + return + [ + 0x0E616800u // FCVTN V0.2S, V0.2D + ]; } private static uint[] _F_Max_Min_Nm_V_V_4SS_() { - return new[] - { + return + [ 0x6E30C800u, // FMAXNMV S0, V0.4S 0x6E30F800u, // FMAXV S0, V0.4S 0x6EB0C800u, // FMINNMV S0, V0.4S - 0x6EB0F800u, // FMINV S0, V0.4S - }; + 0x6EB0F800u // FMINV S0, V0.4S + ]; } private static uint[] _F_Mov_Ftoi_SW_() { - return new[] - { - 0x1E260000u, // FMOV W0, S0 - }; + return + [ + 0x1E260000u // FMOV W0, S0 + ]; } private static uint[] _F_Mov_Ftoi_DX_() { - return new[] - { - 0x9E660000u, // FMOV X0, D0 - }; + return + [ + 0x9E660000u // FMOV X0, D0 + ]; } private static uint[] _F_Mov_Ftoi1_DX_() { - return new[] - { - 0x9EAE0000u, // FMOV X0, V0.D[1] - }; + return + [ + 0x9EAE0000u // FMOV X0, V0.D[1] + ]; } private static uint[] _F_Mov_Itof_WS_() { - return new[] - { - 0x1E270000u, // FMOV S0, W0 - }; + return + [ + 0x1E270000u // FMOV S0, W0 + ]; } private static uint[] _F_Mov_Itof_XD_() { - return new[] - { - 0x9E670000u, // FMOV D0, X0 - }; + return + [ + 0x9E670000u // FMOV D0, X0 + ]; } private static uint[] _F_Mov_Itof1_XD_() { - return new[] - { - 0x9EAF0000u, // FMOV V0.D[1], X0 - }; + return + [ + 0x9EAF0000u // FMOV V0.D[1], X0 + ]; } private static uint[] _F_Mov_S_S_() { - return new[] - { - 0x1E204020u, // FMOV S0, S1 - }; + return + [ + 0x1E204020u // FMOV S0, S1 + ]; } private static uint[] _F_Mov_S_D_() { - return new[] - { - 0x1E604020u, // FMOV D0, D1 - }; + return + [ + 0x1E604020u // FMOV D0, D1 + ]; } private static uint[] _F_Recpe_Rsqrte_S_S_() { - return new[] - { + return + [ 0x5EA1D820u, // FRECPE S0, S1 - 0x7EA1D820u, // FRSQRTE S0, S1 - }; + 0x7EA1D820u // FRSQRTE S0, S1 + ]; } private static uint[] _F_Recpe_Rsqrte_S_D_() { - return new[] - { + return + [ 0x5EE1D820u, // FRECPE D0, D1 - 0x7EE1D820u, // FRSQRTE D0, D1 - }; + 0x7EE1D820u // FRSQRTE D0, D1 + ]; } private static uint[] _F_Recpe_Rsqrte_V_2S_4S_() { - return new[] - { + return + [ 0x0EA1D800u, // FRECPE V0.2S, V0.2S - 0x2EA1D800u, // FRSQRTE V0.2S, V0.2S - }; + 0x2EA1D800u // FRSQRTE V0.2S, V0.2S + ]; } private static uint[] _F_Recpe_Rsqrte_V_2D_() { - return new[] - { + return + [ 0x4EE1D800u, // FRECPE V0.2D, V0.2D - 0x6EE1D800u, // FRSQRTE V0.2D, V0.2D - }; + 0x6EE1D800u // FRSQRTE V0.2D, V0.2D + ]; } private static uint[] _F_Rint_AMNPZ_S_S_() { - return new[] - { + return + [ 0x1E264020u, // FRINTA S0, S1 0x1E254020u, // FRINTM S0, S1 0x1E244020u, // FRINTN S0, S1 0x1E24C020u, // FRINTP S0, S1 - 0x1E25C020u, // FRINTZ S0, S1 - }; + 0x1E25C020u // FRINTZ S0, S1 + ]; } private static uint[] _F_Rint_AMNPZ_S_D_() { - return new[] - { + return + [ 0x1E664020u, // FRINTA D0, D1 0x1E654020u, // FRINTM D0, D1 0x1E644020u, // FRINTN D0, D1 0x1E64C020u, // FRINTP D0, D1 - 0x1E65C020u, // FRINTZ D0, D1 - }; + 0x1E65C020u // FRINTZ D0, D1 + ]; } private static uint[] _F_Rint_AMNPZ_V_2S_4S_() { - return new[] - { + return + [ 0x2E218800u, // FRINTA V0.2S, V0.2S 0x0E219800u, // FRINTM V0.2S, V0.2S 0x0E218800u, // FRINTN V0.2S, V0.2S 0x0EA18800u, // FRINTP V0.2S, V0.2S - 0x0EA19800u, // FRINTZ V0.2S, V0.2S - }; + 0x0EA19800u // FRINTZ V0.2S, V0.2S + ]; } private static uint[] _F_Rint_AMNPZ_V_2D_() { - return new[] - { + return + [ 0x6E618800u, // FRINTA V0.2D, V0.2D 0x4E619800u, // FRINTM V0.2D, V0.2D 0x4E618800u, // FRINTN V0.2D, V0.2D 0x4EE18800u, // FRINTP V0.2D, V0.2D - 0x4EE19800u, // FRINTZ V0.2D, V0.2D - }; + 0x4EE19800u // FRINTZ V0.2D, V0.2D + ]; } private static uint[] _F_Rint_IX_S_S_() { - return new[] - { + return + [ 0x1E27C020u, // FRINTI S0, S1 - 0x1E274020u, // FRINTX S0, S1 - }; + 0x1E274020u // FRINTX S0, S1 + ]; } private static uint[] _F_Rint_IX_S_D_() { - return new[] - { + return + [ 0x1E67C020u, // FRINTI D0, D1 - 0x1E674020u, // FRINTX D0, D1 - }; + 0x1E674020u // FRINTX D0, D1 + ]; } private static uint[] _F_Rint_IX_V_2S_4S_() { - return new[] - { + return + [ 0x2EA19800u, // FRINTI V0.2S, V0.2S - 0x2E219800u, // FRINTX V0.2S, V0.2S - }; + 0x2E219800u // FRINTX V0.2S, V0.2S + ]; } private static uint[] _F_Rint_IX_V_2D_() { - return new[] - { + return + [ 0x6EE19800u, // FRINTI V0.2D, V0.2D - 0x6E619800u, // FRINTX V0.2D, V0.2D - }; + 0x6E619800u // FRINTX V0.2D, V0.2D + ]; } private static uint[] _SU_Addl_V_V_8BH_4HS_() { - return new[] - { + return + [ 0x0E303800u, // SADDLV H0, V0.8B - 0x2E303800u, // UADDLV H0, V0.8B - }; + 0x2E303800u // UADDLV H0, V0.8B + ]; } private static uint[] _SU_Addl_V_V_16BH_8HS_4SD_() { - return new[] - { + return + [ 0x4E303800u, // SADDLV H0, V0.16B - 0x6E303800u, // UADDLV H0, V0.16B - }; + 0x6E303800u // UADDLV H0, V0.16B + ]; } private static uint[] _SU_Cvt_F_S_S_() { - return new[] - { + return + [ 0x5E21D820u, // SCVTF S0, S1 - 0x7E21D820u, // UCVTF S0, S1 - }; + 0x7E21D820u // UCVTF S0, S1 + ]; } private static uint[] _SU_Cvt_F_S_D_() { - return new[] - { + return + [ 0x5E61D820u, // SCVTF D0, D1 - 0x7E61D820u, // UCVTF D0, D1 - }; + 0x7E61D820u // UCVTF D0, D1 + ]; } private static uint[] _SU_Cvt_F_V_2S_4S_() { - return new[] - { + return + [ 0x0E21D800u, // SCVTF V0.2S, V0.2S - 0x2E21D800u, // UCVTF V0.2S, V0.2S - }; + 0x2E21D800u // UCVTF V0.2S, V0.2S + ]; } private static uint[] _SU_Cvt_F_V_2D_() { - return new[] - { + return + [ 0x4E61D800u, // SCVTF V0.2D, V0.2D - 0x6E61D800u, // UCVTF V0.2D, V0.2D - }; + 0x6E61D800u // UCVTF V0.2D, V0.2D + ]; } private static uint[] _Sha1h_Sha1su1_V_() { - return new[] - { + return + [ 0x5E280800u, // SHA1H S0, S0 - 0x5E281800u, // SHA1SU1 V0.4S, V0.4S - }; + 0x5E281800u // SHA1SU1 V0.4S, V0.4S + ]; } private static uint[] _Sha256su0_V_() { - return new[] - { - 0x5E282800u, // SHA256SU0 V0.4S, V0.4S - }; + return + [ + 0x5E282800u // SHA256SU0 V0.4S, V0.4S + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimd32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimd32.cs index 08202c9e1..fd2c7ec92 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimd32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimd32.cs @@ -14,33 +14,34 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _Vabs_Vneg_Vpaddl_I_() { - return new[] - { + return + [ 0xf3b10300u, // VABS.S8 D0, D0 0xf3b10380u, // VNEG.S8 D0, D0 - 0xf3b00200u, // VPADDL.S8 D0, D0 - }; + 0xf3b00200u // VPADDL.S8 D0, D0 + ]; } private static uint[] _Vabs_Vneg_F_() { - return new[] - { + return + [ 0xf3b90700u, // VABS.F32 D0, D0 - 0xf3b90780u, // VNEG.F32 D0, D0 - }; + 0xf3b90780u // VNEG.F32 D0, D0 + ]; } #endregion #region "ValueSource (Types)" private static ulong[] _8B4H2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static IEnumerable _1S_F_() diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt.cs index 007c0f8cb..551360ea5 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt.cs @@ -15,18 +15,20 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Types)" private static uint[] _W_() { - return new[] { + return + [ 0x00000000u, 0x7FFFFFFFu, - 0x80000000u, 0xFFFFFFFFu, - }; + 0x80000000u, 0xFFFFFFFFu + ]; } private static ulong[] _X_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static IEnumerable _1S_F_WX_() @@ -197,8 +199,8 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _F_Cvt_AMPZ_SU_Gp_SW_() { - return new[] - { + return + [ 0x1E240000u, // FCVTAS W0, S0 0x1E250000u, // FCVTAU W0, S0 0x1E300000u, // FCVTMS W0, S0 @@ -207,14 +209,14 @@ namespace Ryujinx.Tests.Cpu 0x1E280000u, // FCVTPS W0, S0 0x1E290000u, // FCVTPU W0, S0 0x1E380000u, // FCVTZS W0, S0 - 0x1E390000u, // FCVTZU W0, S0 - }; + 0x1E390000u // FCVTZU W0, S0 + ]; } private static uint[] _F_Cvt_AMPZ_SU_Gp_SX_() { - return new[] - { + return + [ 0x9E240000u, // FCVTAS X0, S0 0x9E250000u, // FCVTAU X0, S0 0x9E300000u, // FCVTMS X0, S0 @@ -223,14 +225,14 @@ namespace Ryujinx.Tests.Cpu 0x9E280000u, // FCVTPS X0, S0 0x9E290000u, // FCVTPU X0, S0 0x9E380000u, // FCVTZS X0, S0 - 0x9E390000u, // FCVTZU X0, S0 - }; + 0x9E390000u // FCVTZU X0, S0 + ]; } private static uint[] _F_Cvt_AMPZ_SU_Gp_DW_() { - return new[] - { + return + [ 0x1E640000u, // FCVTAS W0, D0 0x1E650000u, // FCVTAU W0, D0 0x1E700000u, // FCVTMS W0, D0 @@ -239,14 +241,14 @@ namespace Ryujinx.Tests.Cpu 0x1E680000u, // FCVTPS W0, D0 0x1E690000u, // FCVTPU W0, D0 0x1E780000u, // FCVTZS W0, D0 - 0x1E790000u, // FCVTZU W0, D0 - }; + 0x1E790000u // FCVTZU W0, D0 + ]; } private static uint[] _F_Cvt_AMPZ_SU_Gp_DX_() { - return new[] - { + return + [ 0x9E640000u, // FCVTAS X0, D0 0x9E650000u, // FCVTAU X0, D0 0x9E700000u, // FCVTMS X0, D0 @@ -255,116 +257,116 @@ namespace Ryujinx.Tests.Cpu 0x9E680000u, // FCVTPS X0, D0 0x9E690000u, // FCVTPU X0, D0 0x9E780000u, // FCVTZS X0, D0 - 0x9E790000u, // FCVTZU X0, D0 - }; + 0x9E790000u // FCVTZU X0, D0 + ]; } private static uint[] _F_Cvt_Z_SU_Gp_Fixed_SW_() { - return new[] - { + return + [ 0x1E188000u, // FCVTZS W0, S0, #32 - 0x1E198000u, // FCVTZU W0, S0, #32 - }; + 0x1E198000u // FCVTZU W0, S0, #32 + ]; } private static uint[] _F_Cvt_Z_SU_Gp_Fixed_SX_() { - return new[] - { + return + [ 0x9E180000u, // FCVTZS X0, S0, #64 - 0x9E190000u, // FCVTZU X0, S0, #64 - }; + 0x9E190000u // FCVTZU X0, S0, #64 + ]; } private static uint[] _F_Cvt_Z_SU_Gp_Fixed_DW_() { - return new[] - { + return + [ 0x1E588000u, // FCVTZS W0, D0, #32 - 0x1E598000u, // FCVTZU W0, D0, #32 - }; + 0x1E598000u // FCVTZU W0, D0, #32 + ]; } private static uint[] _F_Cvt_Z_SU_Gp_Fixed_DX_() { - return new[] - { + return + [ 0x9E580000u, // FCVTZS X0, D0, #64 - 0x9E590000u, // FCVTZU X0, D0, #64 - }; + 0x9E590000u // FCVTZU X0, D0, #64 + ]; } private static uint[] _SU_Cvt_F_Gp_WS_() { - return new[] - { + return + [ 0x1E220000u, // SCVTF S0, W0 - 0x1E230000u, // UCVTF S0, W0 - }; + 0x1E230000u // UCVTF S0, W0 + ]; } private static uint[] _SU_Cvt_F_Gp_WD_() { - return new[] - { + return + [ 0x1E620000u, // SCVTF D0, W0 - 0x1E630000u, // UCVTF D0, W0 - }; + 0x1E630000u // UCVTF D0, W0 + ]; } private static uint[] _SU_Cvt_F_Gp_XS_() { - return new[] - { + return + [ 0x9E220000u, // SCVTF S0, X0 - 0x9E230000u, // UCVTF S0, X0 - }; + 0x9E230000u // UCVTF S0, X0 + ]; } private static uint[] _SU_Cvt_F_Gp_XD_() { - return new[] - { + return + [ 0x9E620000u, // SCVTF D0, X0 - 0x9E630000u, // UCVTF D0, X0 - }; + 0x9E630000u // UCVTF D0, X0 + ]; } private static uint[] _SU_Cvt_F_Gp_Fixed_WS_() { - return new[] - { + return + [ 0x1E028000u, // SCVTF S0, W0, #32 - 0x1E038000u, // UCVTF S0, W0, #32 - }; + 0x1E038000u // UCVTF S0, W0, #32 + ]; } private static uint[] _SU_Cvt_F_Gp_Fixed_WD_() { - return new[] - { + return + [ 0x1E428000u, // SCVTF D0, W0, #32 - 0x1E438000u, // UCVTF D0, W0, #32 - }; + 0x1E438000u // UCVTF D0, W0, #32 + ]; } private static uint[] _SU_Cvt_F_Gp_Fixed_XS_() { - return new[] - { + return + [ 0x9E020000u, // SCVTF S0, X0, #64 - 0x9E030000u, // UCVTF S0, X0, #64 - }; + 0x9E030000u // UCVTF S0, X0, #64 + ]; } private static uint[] _SU_Cvt_F_Gp_Fixed_XD_() { - return new[] - { + return + [ 0x9E420000u, // SCVTF D0, X0, #64 - 0x9E430000u, // UCVTF D0, X0, #64 - }; + 0x9E430000u // UCVTF D0, X0, #64 + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs index 715bd404a..f31c7691e 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdCvt32.cs @@ -15,23 +15,24 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _Vrint_AMNP_V_F32_() { - return new[] - { + return + [ 0xf3ba0500u, // VRINTA.F32 Q0, Q0 0xf3ba0680u, // VRINTM.F32 Q0, Q0 0xf3ba0400u, // VRINTN.F32 Q0, Q0 - 0xf3ba0780u, // VRINTP.F32 Q0, Q0 - }; + 0xf3ba0780u // VRINTP.F32 Q0, Q0 + ]; } #endregion #region "ValueSource (Types)" private static uint[] _1S_() { - return new[] { + return + [ 0x00000000u, 0x7FFFFFFFu, - 0x80000000u, 0xFFFFFFFFu, - }; + 0x80000000u, 0xFFFFFFFFu + ]; } private static IEnumerable _1S_F_() diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdExt.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdExt.cs index 59bc4cb7e..2fd98a333 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdExt.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdExt.cs @@ -13,10 +13,11 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource" private static ulong[] _8B_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, - 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs index d6d12b278..63c68c57e 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdFcond.cs @@ -99,36 +99,36 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _F_Ccmp_Ccmpe_S_S_() { - return new[] - { + return + [ 0x1E220420u, // FCCMP S1, S2, #0, EQ - 0x1E220430u, // FCCMPE S1, S2, #0, EQ - }; + 0x1E220430u // FCCMPE S1, S2, #0, EQ + ]; } private static uint[] _F_Ccmp_Ccmpe_S_D_() { - return new[] - { + return + [ 0x1E620420u, // FCCMP D1, D2, #0, EQ - 0x1E620430u, // FCCMPE D1, D2, #0, EQ - }; + 0x1E620430u // FCCMPE D1, D2, #0, EQ + ]; } private static uint[] _F_Csel_S_S_() { - return new[] - { - 0x1E220C20u, // FCSEL S0, S1, S2, EQ - }; + return + [ + 0x1E220C20u // FCSEL S0, S1, S2, EQ + ]; } private static uint[] _F_Csel_S_D_() { - return new[] - { - 0x1E620C20u, // FCSEL D0, D1, D2, EQ - }; + return + [ + 0x1E620C20u // FCSEL D0, D1, D2, EQ + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdFmov.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdFmov.cs index 0c2582695..6191f82ab 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdFmov.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdFmov.cs @@ -13,18 +13,18 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource" private static uint[] _F_Mov_Si_S_() { - return new[] - { - 0x1E201000u, // FMOV S0, #2.0 - }; + return + [ + 0x1E201000u // FMOV S0, #2.0 + ]; } private static uint[] _F_Mov_Si_D_() { - return new[] - { - 0x1E601000u, // FMOV D0, #2.0 - }; + return + [ + 0x1E601000u // FMOV D0, #2.0 + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdImm.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdImm.cs index 27e3b41a0..79abdffd4 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdImm.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdImm.cs @@ -48,18 +48,20 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Types)" private static ulong[] _2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _4H_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFF7FFF7FFF7FFFul, - 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static IEnumerable _8BIT_IMM_() @@ -96,95 +98,95 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _Bic_Orr_Vi_16bit_() { - return new[] - { + return + [ 0x2F009400u, // BIC V0.4H, #0 - 0x0F009400u, // ORR V0.4H, #0 - }; + 0x0F009400u // ORR V0.4H, #0 + ]; } private static uint[] _Bic_Orr_Vi_32bit_() { - return new[] - { + return + [ 0x2F001400u, // BIC V0.2S, #0 - 0x0F001400u, // ORR V0.2S, #0 - }; + 0x0F001400u // ORR V0.2S, #0 + ]; } private static uint[] _F_Mov_Vi_2S_() { - return new[] - { - 0x0F00F400u, // FMOV V0.2S, #2.0 - }; + return + [ + 0x0F00F400u // FMOV V0.2S, #2.0 + ]; } private static uint[] _F_Mov_Vi_4S_() { - return new[] - { - 0x4F00F400u, // FMOV V0.4S, #2.0 - }; + return + [ + 0x4F00F400u // FMOV V0.4S, #2.0 + ]; } private static uint[] _F_Mov_Vi_2D_() { - return new[] - { - 0x6F00F400u, // FMOV V0.2D, #2.0 - }; + return + [ + 0x6F00F400u // FMOV V0.2D, #2.0 + ]; } private static uint[] _Movi_V_8bit_() { - return new[] - { - 0x0F00E400u, // MOVI V0.8B, #0 - }; + return + [ + 0x0F00E400u // MOVI V0.8B, #0 + ]; } private static uint[] _Movi_Mvni_V_16bit_shifted_imm_() { - return new[] - { + return + [ 0x0F008400u, // MOVI V0.4H, #0 - 0x2F008400u, // MVNI V0.4H, #0 - }; + 0x2F008400u // MVNI V0.4H, #0 + ]; } private static uint[] _Movi_Mvni_V_32bit_shifted_imm_() { - return new[] - { + return + [ 0x0F000400u, // MOVI V0.2S, #0 - 0x2F000400u, // MVNI V0.2S, #0 - }; + 0x2F000400u // MVNI V0.2S, #0 + ]; } private static uint[] _Movi_Mvni_V_32bit_shifting_ones_() { - return new[] - { + return + [ 0x0F00C400u, // MOVI V0.2S, #0, MSL #8 - 0x2F00C400u, // MVNI V0.2S, #0, MSL #8 - }; + 0x2F00C400u // MVNI V0.2S, #0, MSL #8 + ]; } private static uint[] _Movi_V_64bit_scalar_() { - return new[] - { - 0x2F00E400u, // MOVI D0, #0 - }; + return + [ + 0x2F00E400u // MOVI D0, #0 + ]; } private static uint[] _Movi_V_64bit_vector_() { - return new[] - { - 0x6F00E400u, // MOVI V0.2D, #0 - }; + return + [ + 0x6F00E400u // MOVI V0.2D, #0 + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdIns.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdIns.cs index 83dc07707..4acf7aa57 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdIns.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdIns.cs @@ -13,72 +13,80 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource" private static ulong[] _1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _4H_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFF7FFF7FFF7FFFul, - 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, - 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B4H_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFF7FFF7FFF7FFFul, - 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B4H2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static uint[] _W_() { - return new[] { + return + [ 0x00000000u, 0x0000007Fu, 0x00000080u, 0x000000FFu, 0x00007FFFu, 0x00008000u, 0x0000FFFFu, 0x7FFFFFFFu, - 0x80000000u, 0xFFFFFFFFu, - }; + 0x80000000u, 0xFFFFFFFFu + ]; } private static ulong[] _X_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdLogical32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdLogical32.cs index 819d9300b..fbb80d15d 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdLogical32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdLogical32.cs @@ -13,20 +13,21 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Types)" private static ulong[] _8B4H2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } #endregion #region "ValueSource (Opcodes)" private static uint[] _Vbic_Vbif_Vbit_Vbsl_Vand_Vorn_Vorr_Veor_I_() { - return new[] - { + return + [ 0xf2100110u, // VBIC D0, D0, D0 0xf3300110u, // VBIF D0, D0, D0 0xf3200110u, // VBIT D0, D0, D0 @@ -34,19 +35,19 @@ namespace Ryujinx.Tests.Cpu 0xf2000110u, // VAND D0, D0, D0 0xf2300110u, // VORN D0, D0, D0 0xf2200110u, // VORR D0, D0, D0 - 0xf3000110u, // VEOR D0, D0, D0 - }; + 0xf3000110u // VEOR D0, D0, D0 + ]; } private static uint[] _Vbic_Vorr_II_() { - return new[] - { + return + [ 0xf2800130u, // VBIC.I32 D0, #0 (A1) 0xf2800930u, // VBIC.I16 D0, #0 (A2) 0xf2800110u, // VORR.I32 D0, #0 (A1) - 0xf2800910u, // VORR.I16 D0, #0 (A2) - }; + 0xf2800910u // VORR.I16 D0, #0 (A2) + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdMemory32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdMemory32.cs index 441b09c29..9bc24b300 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdMemory32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdMemory32.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Tests.Cpu #if SimdMemory32 private readonly uint[] _ldStModes = - { + [ // LD1 0b0111, 0b1010, @@ -32,8 +32,8 @@ namespace Ryujinx.Tests.Cpu // LD4 0b0000, - 0b0001, - }; + 0b0001 + ]; [Test, Pairwise, Description("VLDn. , [ {:}]{ /!/, } (single n element structure)")] public void Vldn_Single([Values(0u, 1u, 2u)] uint size, @@ -200,12 +200,12 @@ namespace Ryujinx.Tests.Cpu uint opcode = 0xec100a00u; // VST4.8 {D0, D1, D2, D3}, [R0], R0 uint[] vldmModes = - { + [ // Note: 3rd 0 leaves a space for "D". 0b0100, // Increment after. 0b0101, // Increment after. (!) - 0b1001, // Decrement before. (!) - }; + 0b1001 // Decrement before. (!) + ]; opcode |= ((vldmModes[mode] & 15) << 21); opcode |= ((rn & 15) << 16); diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdMov32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdMov32.cs index 5cc993e5e..3956115d1 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdMov32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdMov32.cs @@ -19,7 +19,7 @@ namespace Ryujinx.Tests.Cpu [Values] bool q) { uint[] variants = - { + [ // I32 0b0000_0, 0b0010_0, @@ -36,8 +36,8 @@ namespace Ryujinx.Tests.Cpu 0b1110_0, 0b1111_0, - 0b1110_1, - }; + 0b1110_1 + ]; uint opcode = 0xf2800010u; // VMOV.I32 D0, #0 @@ -300,7 +300,7 @@ namespace Ryujinx.Tests.Cpu [Values] bool q) { uint[] variants = - { + [ // I32 0b0000, 0b0010, @@ -313,8 +313,8 @@ namespace Ryujinx.Tests.Cpu // I32 0b1100, - 0b1101, - }; + 0b1101 + ]; uint opcode = 0xf2800030u; // VMVN.I32 D0, #0 diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdReg.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdReg.cs index 207f76089..1488cb2f3 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdReg.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdReg.cs @@ -14,90 +14,99 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Types)" private static ulong[] _1B1H1S1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x000000000000007Ful, 0x0000000000000080ul, 0x00000000000000FFul, 0x0000000000007FFFul, 0x0000000000008000ul, 0x000000000000FFFFul, 0x000000007FFFFFFFul, 0x0000000080000000ul, 0x00000000FFFFFFFFul, 0x7FFFFFFFFFFFFFFFul, 0x8000000000000000ul, - 0xFFFFFFFFFFFFFFFFul, - }; + 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _1H1S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x0000000000007FFFul, 0x0000000000008000ul, 0x000000000000FFFFul, 0x000000007FFFFFFFul, 0x0000000080000000ul, - 0x00000000FFFFFFFFul, - }; + 0x00000000FFFFFFFFul + ]; } private static ulong[] _4H2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _4H2S1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, 0x8000000080000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, - 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B4H2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B4H2S1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, 0x8000000080000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static IEnumerable _1S_F_() @@ -228,174 +237,174 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _F_Abd_Add_Div_Mul_Mulx_Nmul_Sub_S_S_() { - return new[] - { + return + [ 0x7EA2D420u, // FABD S0, S1, S2 0x1E222820u, // FADD S0, S1, S2 0x1E221820u, // FDIV S0, S1, S2 0x1E220820u, // FMUL S0, S1, S2 0x5E22DC20u, // FMULX S0, S1, S2 0x1E228820u, // FNMUL S0, S1, S2 - 0x1E223820u, // FSUB S0, S1, S2 - }; + 0x1E223820u // FSUB S0, S1, S2 + ]; } private static uint[] _F_Abd_Add_Div_Mul_Mulx_Nmul_Sub_S_D_() { - return new[] - { + return + [ 0x7EE2D420u, // FABD D0, D1, D2 0x1E622820u, // FADD D0, D1, D2 0x1E621820u, // FDIV D0, D1, D2 0x1E620820u, // FMUL D0, D1, D2 0x5E62DC20u, // FMULX D0, D1, D2 0x1E628820u, // FNMUL D0, D1, D2 - 0x1E623820u, // FSUB D0, D1, D2 - }; + 0x1E623820u // FSUB D0, D1, D2 + ]; } private static uint[] _F_Abd_Add_Div_Mul_Mulx_Sub_P_V_2S_4S_() { - return new[] - { + return + [ 0x2EA0D400u, // FABD V0.2S, V0.2S, V0.2S 0x0E20D400u, // FADD V0.2S, V0.2S, V0.2S 0x2E20D400u, // FADDP V0.2S, V0.2S, V0.2S 0x2E20FC00u, // FDIV V0.2S, V0.2S, V0.2S 0x2E20DC00u, // FMUL V0.2S, V0.2S, V0.2S 0x0E20DC00u, // FMULX V0.2S, V0.2S, V0.2S - 0x0EA0D400u, // FSUB V0.2S, V0.2S, V0.2S - }; + 0x0EA0D400u // FSUB V0.2S, V0.2S, V0.2S + ]; } private static uint[] _F_Abd_Add_Div_Mul_Mulx_Sub_P_V_2D_() { - return new[] - { + return + [ 0x6EE0D400u, // FABD V0.2D, V0.2D, V0.2D 0x4E60D400u, // FADD V0.2D, V0.2D, V0.2D 0x6E60D400u, // FADDP V0.2D, V0.2D, V0.2D 0x6E60FC00u, // FDIV V0.2D, V0.2D, V0.2D 0x6E60DC00u, // FMUL V0.2D, V0.2D, V0.2D 0x4E60DC00u, // FMULX V0.2D, V0.2D, V0.2D - 0x4EE0D400u, // FSUB V0.2D, V0.2D, V0.2D - }; + 0x4EE0D400u // FSUB V0.2D, V0.2D, V0.2D + ]; } private static uint[] _F_AcCm_EqGeGt_S_S_() { - return new[] - { + return + [ 0x7E22EC20u, // FACGE S0, S1, S2 0x7EA2EC20u, // FACGT S0, S1, S2 0x5E22E420u, // FCMEQ S0, S1, S2 0x7E22E420u, // FCMGE S0, S1, S2 - 0x7EA2E420u, // FCMGT S0, S1, S2 - }; + 0x7EA2E420u // FCMGT S0, S1, S2 + ]; } private static uint[] _F_AcCm_EqGeGt_S_D_() { - return new[] - { + return + [ 0x7E62EC20u, // FACGE D0, D1, D2 0x7EE2EC20u, // FACGT D0, D1, D2 0x5E62E420u, // FCMEQ D0, D1, D2 0x7E62E420u, // FCMGE D0, D1, D2 - 0x7EE2E420u, // FCMGT D0, D1, D2 - }; + 0x7EE2E420u // FCMGT D0, D1, D2 + ]; } private static uint[] _F_AcCm_EqGeGt_V_2S_4S_() { - return new[] - { + return + [ 0x2E20EC00u, // FACGE V0.2S, V0.2S, V0.2S 0x2EA0EC00u, // FACGT V0.2S, V0.2S, V0.2S 0x0E20E400u, // FCMEQ V0.2S, V0.2S, V0.2S 0x2E20E400u, // FCMGE V0.2S, V0.2S, V0.2S - 0x2EA0E400u, // FCMGT V0.2S, V0.2S, V0.2S - }; + 0x2EA0E400u // FCMGT V0.2S, V0.2S, V0.2S + ]; } private static uint[] _F_AcCm_EqGeGt_V_2D_() { - return new[] - { + return + [ 0x6E60EC00u, // FACGE V0.2D, V0.2D, V0.2D 0x6EE0EC00u, // FACGT V0.2D, V0.2D, V0.2D 0x4E60E400u, // FCMEQ V0.2D, V0.2D, V0.2D 0x6E60E400u, // FCMGE V0.2D, V0.2D, V0.2D - 0x6EE0E400u, // FCMGT V0.2D, V0.2D, V0.2D - }; + 0x6EE0E400u // FCMGT V0.2D, V0.2D, V0.2D + ]; } private static uint[] _F_Cmp_Cmpe_S_S_() { - return new[] - { + return + [ 0x1E222020u, // FCMP S1, S2 - 0x1E222030u, // FCMPE S1, S2 - }; + 0x1E222030u // FCMPE S1, S2 + ]; } private static uint[] _F_Cmp_Cmpe_S_D_() { - return new[] - { + return + [ 0x1E622020u, // FCMP D1, D2 - 0x1E622030u, // FCMPE D1, D2 - }; + 0x1E622030u // FCMPE D1, D2 + ]; } private static uint[] _F_Madd_Msub_Nmadd_Nmsub_S_S_() { - return new[] - { + return + [ 0x1F020C20u, // FMADD S0, S1, S2, S3 0x1F028C20u, // FMSUB S0, S1, S2, S3 0x1F220C20u, // FNMADD S0, S1, S2, S3 - 0x1F228C20u, // FNMSUB S0, S1, S2, S3 - }; + 0x1F228C20u // FNMSUB S0, S1, S2, S3 + ]; } private static uint[] _F_Madd_Msub_Nmadd_Nmsub_S_D_() { - return new[] - { + return + [ 0x1F420C20u, // FMADD D0, D1, D2, D3 0x1F428C20u, // FMSUB D0, D1, D2, D3 0x1F620C20u, // FNMADD D0, D1, D2, D3 - 0x1F628C20u, // FNMSUB D0, D1, D2, D3 - }; + 0x1F628C20u // FNMSUB D0, D1, D2, D3 + ]; } private static uint[] _F_Max_Min_Nm_S_S_() { - return new[] - { + return + [ 0x1E224820u, // FMAX S0, S1, S2 0x1E226820u, // FMAXNM S0, S1, S2 0x1E225820u, // FMIN S0, S1, S2 - 0x1E227820u, // FMINNM S0, S1, S2 - }; + 0x1E227820u // FMINNM S0, S1, S2 + ]; } private static uint[] _F_Max_Min_Nm_S_D_() { - return new[] - { + return + [ 0x1E624820u, // FMAX D0, D1, D2 0x1E626820u, // FMAXNM D0, D1, D2 0x1E625820u, // FMIN D0, D1, D2 - 0x1E627820u, // FMINNM D0, D1, D2 - }; + 0x1E627820u // FMINNM D0, D1, D2 + ]; } private static uint[] _F_Max_Min_Nm_P_V_2S_4S_() { - return new[] - { + return + [ 0x0E20F400u, // FMAX V0.2S, V0.2S, V0.2S 0x0E20C400u, // FMAXNM V0.2S, V0.2S, V0.2S 0x2E20C400u, // FMAXNMP V0.2S, V0.2S, V0.2S @@ -403,14 +412,14 @@ namespace Ryujinx.Tests.Cpu 0x0EA0F400u, // FMIN V0.2S, V0.2S, V0.2S 0x0EA0C400u, // FMINNM V0.2S, V0.2S, V0.2S 0x2EA0C400u, // FMINNMP V0.2S, V0.2S, V0.2S - 0x2EA0F400u, // FMINP V0.2S, V0.2S, V0.2S - }; + 0x2EA0F400u // FMINP V0.2S, V0.2S, V0.2S + ]; } private static uint[] _F_Max_Min_Nm_P_V_2D_() { - return new[] - { + return + [ 0x4E60F400u, // FMAX V0.2D, V0.2D, V0.2D 0x4E60C400u, // FMAXNM V0.2D, V0.2D, V0.2D 0x6E60C400u, // FMAXNMP V0.2D, V0.2D, V0.2D @@ -418,109 +427,109 @@ namespace Ryujinx.Tests.Cpu 0x4EE0F400u, // FMIN V0.2D, V0.2D, V0.2D 0x4EE0C400u, // FMINNM V0.2D, V0.2D, V0.2D 0x6EE0C400u, // FMINNMP V0.2D, V0.2D, V0.2D - 0x6EE0F400u, // FMINP V0.2D, V0.2D, V0.2D - }; + 0x6EE0F400u // FMINP V0.2D, V0.2D, V0.2D + ]; } private static uint[] _F_Mla_Mls_V_2S_4S_() { - return new[] - { + return + [ 0x0E20CC00u, // FMLA V0.2S, V0.2S, V0.2S - 0x0EA0CC00u, // FMLS V0.2S, V0.2S, V0.2S - }; + 0x0EA0CC00u // FMLS V0.2S, V0.2S, V0.2S + ]; } private static uint[] _F_Mla_Mls_V_2D_() { - return new[] - { + return + [ 0x4E60CC00u, // FMLA V0.2D, V0.2D, V0.2D - 0x4EE0CC00u, // FMLS V0.2D, V0.2D, V0.2D - }; + 0x4EE0CC00u // FMLS V0.2D, V0.2D, V0.2D + ]; } private static uint[] _F_Recps_Rsqrts_S_S_() { - return new[] - { + return + [ 0x5E22FC20u, // FRECPS S0, S1, S2 - 0x5EA2FC20u, // FRSQRTS S0, S1, S2 - }; + 0x5EA2FC20u // FRSQRTS S0, S1, S2 + ]; } private static uint[] _F_Recps_Rsqrts_S_D_() { - return new[] - { + return + [ 0x5E62FC20u, // FRECPS D0, D1, D2 - 0x5EE2FC20u, // FRSQRTS D0, D1, D2 - }; + 0x5EE2FC20u // FRSQRTS D0, D1, D2 + ]; } private static uint[] _F_Recps_Rsqrts_V_2S_4S_() { - return new[] - { + return + [ 0x0E20FC00u, // FRECPS V0.2S, V0.2S, V0.2S - 0x0EA0FC00u, // FRSQRTS V0.2S, V0.2S, V0.2S - }; + 0x0EA0FC00u // FRSQRTS V0.2S, V0.2S, V0.2S + ]; } private static uint[] _F_Recps_Rsqrts_V_2D_() { - return new[] - { + return + [ 0x4E60FC00u, // FRECPS V0.2D, V0.2D, V0.2D - 0x4EE0FC00u, // FRSQRTS V0.2D, V0.2D, V0.2D - }; + 0x4EE0FC00u // FRSQRTS V0.2D, V0.2D, V0.2D + ]; } private static uint[] _Mla_Mls_Mul_V_8B_4H_2S_() { - return new[] - { + return + [ 0x0E209400u, // MLA V0.8B, V0.8B, V0.8B 0x2E209400u, // MLS V0.8B, V0.8B, V0.8B - 0x0E209C00u, // MUL V0.8B, V0.8B, V0.8B - }; + 0x0E209C00u // MUL V0.8B, V0.8B, V0.8B + ]; } private static uint[] _Mla_Mls_Mul_V_16B_8H_4S_() { - return new[] - { + return + [ 0x4E209400u, // MLA V0.16B, V0.16B, V0.16B 0x6E209400u, // MLS V0.16B, V0.16B, V0.16B - 0x4E209C00u, // MUL V0.16B, V0.16B, V0.16B - }; + 0x4E209C00u // MUL V0.16B, V0.16B, V0.16B + ]; } private static uint[] _Sha1c_Sha1m_Sha1p_Sha1su0_V_() { - return new[] - { + return + [ 0x5E000000u, // SHA1C Q0, S0, V0.4S 0x5E002000u, // SHA1M Q0, S0, V0.4S 0x5E001000u, // SHA1P Q0, S0, V0.4S - 0x5E003000u, // SHA1SU0 V0.4S, V0.4S, V0.4S - }; + 0x5E003000u // SHA1SU0 V0.4S, V0.4S, V0.4S + ]; } private static uint[] _Sha256h_Sha256h2_Sha256su1_V_() { - return new[] - { + return + [ 0x5E004000u, // SHA256H Q0, Q0, V0.4S 0x5E005000u, // SHA256H2 Q0, Q0, V0.4S - 0x5E006000u, // SHA256SU1 V0.4S, V0.4S, V0.4S - }; + 0x5E006000u // SHA256SU1 V0.4S, V0.4S, V0.4S + ]; } private static uint[] _SU_Max_Min_P_V_() { - return new[] - { + return + [ 0x0E206400u, // SMAX V0.8B, V0.8B, V0.8B 0x0E20A400u, // SMAXP V0.8B, V0.8B, V0.8B 0x0E206C00u, // SMIN V0.8B, V0.8B, V0.8B @@ -528,49 +537,49 @@ namespace Ryujinx.Tests.Cpu 0x2E206400u, // UMAX V0.8B, V0.8B, V0.8B 0x2E20A400u, // UMAXP V0.8B, V0.8B, V0.8B 0x2E206C00u, // UMIN V0.8B, V0.8B, V0.8B - 0x2E20AC00u, // UMINP V0.8B, V0.8B, V0.8B - }; + 0x2E20AC00u // UMINP V0.8B, V0.8B, V0.8B + ]; } private static uint[] _SU_Mlal_Mlsl_Mull_V_8B8H_4H4S_2S2D_() { - return new[] - { + return + [ 0x0E208000u, // SMLAL V0.8H, V0.8B, V0.8B 0x0E20A000u, // SMLSL V0.8H, V0.8B, V0.8B 0x0E20C000u, // SMULL V0.8H, V0.8B, V0.8B 0x2E208000u, // UMLAL V0.8H, V0.8B, V0.8B 0x2E20A000u, // UMLSL V0.8H, V0.8B, V0.8B - 0x2E20C000u, // UMULL V0.8H, V0.8B, V0.8B - }; + 0x2E20C000u // UMULL V0.8H, V0.8B, V0.8B + ]; } private static uint[] _SU_Mlal_Mlsl_Mull_V_16B8H_8H4S_4S2D_() { - return new[] - { + return + [ 0x4E208000u, // SMLAL2 V0.8H, V0.16B, V0.16B 0x4E20A000u, // SMLSL2 V0.8H, V0.16B, V0.16B 0x4E20C000u, // SMULL2 V0.8H, V0.16B, V0.16B 0x6E208000u, // UMLAL2 V0.8H, V0.16B, V0.16B 0x6E20A000u, // UMLSL2 V0.8H, V0.16B, V0.16B - 0x6E20C000u, // UMULL2 V0.8H, V0.16B, V0.16B - }; + 0x6E20C000u // UMULL2 V0.8H, V0.16B, V0.16B + ]; } private static uint[] _ShlReg_S_D_() { - return new[] - { + return + [ 0x5EE04400u, // SSHL D0, D0, D0 - 0x7EE04400u, // USHL D0, D0, D0 - }; + 0x7EE04400u // USHL D0, D0, D0 + ]; } private static uint[] _ShlReg_V_8B_4H_2S_() { - return new[] - { + return + [ 0x0E205C00u, // SQRSHL V0.8B, V0.8B, V0.8B 0x0E204C00u, // SQSHL V0.8B, V0.8B, V0.8B 0x0E205400u, // SRSHL V0.8B, V0.8B, V0.8B @@ -578,14 +587,14 @@ namespace Ryujinx.Tests.Cpu 0x2E205C00u, // UQRSHL V0.8B, V0.8B, V0.8B 0x2E204C00u, // UQSHL V0.8B, V0.8B, V0.8B 0x2E205400u, // URSHL V0.8B, V0.8B, V0.8B - 0x2E204400u, // USHL V0.8B, V0.8B, V0.8B - }; + 0x2E204400u // USHL V0.8B, V0.8B, V0.8B + ]; } private static uint[] _ShlReg_V_16B_8H_4S_2D_() { - return new[] - { + return + [ 0x4E205C00u, // SQRSHL V0.16B, V0.16B, V0.16B 0x4E204C00u, // SQSHL V0.16B, V0.16B, V0.16B 0x4E205400u, // SRSHL V0.16B, V0.16B, V0.16B @@ -593,8 +602,8 @@ namespace Ryujinx.Tests.Cpu 0x6E205C00u, // UQRSHL V0.16B, V0.16B, V0.16B 0x6E204C00u, // UQSHL V0.16B, V0.16B, V0.16B 0x6E205400u, // URSHL V0.16B, V0.16B, V0.16B - 0x6E204400u, // USHL V0.16B, V0.16B, V0.16B - }; + 0x6E204400u // USHL V0.16B, V0.16B, V0.16B + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdReg32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdReg32.cs index 843273dc2..a4bc15729 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdReg32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdReg32.cs @@ -15,134 +15,136 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _V_Add_Sub_Long_Wide_I_() { - return new[] - { + return + [ 0xf2800000u, // VADDL.S8 Q0, D0, D0 0xf2800100u, // VADDW.S8 Q0, Q0, D0 0xf2800200u, // VSUBL.S8 Q0, D0, D0 - 0xf2800300u, // VSUBW.S8 Q0, Q0, D0 - }; + 0xf2800300u // VSUBW.S8 Q0, Q0, D0 + ]; } private static uint[] _Vfma_Vfms_Vfnma_Vfnms_S_F32_() { - return new[] - { + return + [ 0xEEA00A00u, // VFMA. F32 S0, S0, S0 0xEEA00A40u, // VFMS. F32 S0, S0, S0 0xEE900A40u, // VFNMA.F32 S0, S0, S0 - 0xEE900A00u, // VFNMS.F32 S0, S0, S0 - }; + 0xEE900A00u // VFNMS.F32 S0, S0, S0 + ]; } private static uint[] _Vfma_Vfms_Vfnma_Vfnms_S_F64_() { - return new[] - { + return + [ 0xEEA00B00u, // VFMA. F64 D0, D0, D0 0xEEA00B40u, // VFMS. F64 D0, D0, D0 0xEE900B40u, // VFNMA.F64 D0, D0, D0 - 0xEE900B00u, // VFNMS.F64 D0, D0, D0 - }; + 0xEE900B00u // VFNMS.F64 D0, D0, D0 + ]; } private static uint[] _Vfma_Vfms_V_F32_() { - return new[] - { + return + [ 0xF2000C10u, // VFMA.F32 D0, D0, D0 - 0xF2200C10u, // VFMS.F32 D0, D0, D0 - }; + 0xF2200C10u // VFMS.F32 D0, D0, D0 + ]; } private static uint[] _Vmla_Vmls_Vnmla_Vnmls_S_F32_() { - return new[] - { + return + [ 0xEE000A00u, // VMLA. F32 S0, S0, S0 0xEE000A40u, // VMLS. F32 S0, S0, S0 0xEE100A40u, // VNMLA.F32 S0, S0, S0 - 0xEE100A00u, // VNMLS.F32 S0, S0, S0 - }; + 0xEE100A00u // VNMLS.F32 S0, S0, S0 + ]; } private static uint[] _Vmla_Vmls_Vnmla_Vnmls_S_F64_() { - return new[] - { + return + [ 0xEE000B00u, // VMLA. F64 D0, D0, D0 0xEE000B40u, // VMLS. F64 D0, D0, D0 0xEE100B40u, // VNMLA.F64 D0, D0, D0 - 0xEE100B00u, // VNMLS.F64 D0, D0, D0 - }; + 0xEE100B00u // VNMLS.F64 D0, D0, D0 + ]; } private static uint[] _Vmlal_Vmlsl_V_I_() { - return new[] - { + return + [ 0xf2800800u, // VMLAL.S8 Q0, D0, D0 - 0xf2800a00u, // VMLSL.S8 Q0, D0, D0 - }; + 0xf2800a00u // VMLSL.S8 Q0, D0, D0 + ]; } private static uint[] _Vp_Add_Max_Min_F_() { - return new[] - { + return + [ 0xf3000d00u, // VPADD.F32 D0, D0, D0 0xf3000f00u, // VPMAX.F32 D0, D0, D0 - 0xf3200f00u, // VPMIN.F32 D0, D0, D0 - }; + 0xf3200f00u // VPMIN.F32 D0, D0, D0 + ]; } private static uint[] _Vp_Add_I_() { - return new[] - { - 0xf2000b10u, // VPADD.I8 D0, D0, D0 - }; + return + [ + 0xf2000b10u // VPADD.I8 D0, D0, D0 + ]; } private static uint[] _V_Pmax_Pmin_Rhadd_I_() { - return new[] - { + return + [ 0xf2000a00u, // VPMAX .S8 D0, D0, D0 0xf2000a10u, // VPMIN .S8 D0, D0, D0 - 0xf2000100u, // VRHADD.S8 D0, D0, D0 - }; + 0xf2000100u // VRHADD.S8 D0, D0, D0 + ]; } private static uint[] _Vq_Add_Sub_I_() { - return new[] - { + return + [ 0xf2000050u, // VQADD.S8 Q0, Q0, Q0 - 0xf2000250u, // VQSUB.S8 Q0, Q0, Q0 - }; + 0xf2000250u // VQSUB.S8 Q0, Q0, Q0 + ]; } #endregion #region "ValueSource (Types)" private static ulong[] _8B1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B4H2S1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0x7FFFFFFF7FFFFFFFul, 0x8000000080000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static IEnumerable _1S_F_() diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdRegElem.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdRegElem.cs index 23c6961f9..810c617f0 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdRegElem.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdRegElem.cs @@ -13,70 +13,72 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Types)" private static ulong[] _2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _4H_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFF7FFF7FFF7FFFul, - 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul + ]; } #endregion #region "ValueSource (Opcodes)" private static uint[] _Mla_Mls_Mul_Sqdmulh_Sqrdmulh_Ve_4H_8H_() { - return new[] - { + return + [ 0x2F400000u, // MLA V0.4H, V0.4H, V0.H[0] 0x2F404000u, // MLS V0.4H, V0.4H, V0.H[0] 0x0F408000u, // MUL V0.4H, V0.4H, V0.H[0] 0x0F40C000u, // SQDMULH V0.4H, V0.4H, V0.H[0] - 0x0F40D000u, // SQRDMULH V0.4H, V0.4H, V0.H[0] - }; + 0x0F40D000u // SQRDMULH V0.4H, V0.4H, V0.H[0] + ]; } private static uint[] _Mla_Mls_Mul_Sqdmulh_Sqrdmulh_Ve_2S_4S_() { - return new[] - { + return + [ 0x2F800000u, // MLA V0.2S, V0.2S, V0.S[0] 0x2F804000u, // MLS V0.2S, V0.2S, V0.S[0] 0x0F808000u, // MUL V0.2S, V0.2S, V0.S[0] 0x0F80C000u, // SQDMULH V0.2S, V0.2S, V0.S[0] - 0x0F80D000u, // SQRDMULH V0.2S, V0.2S, V0.S[0] - }; + 0x0F80D000u // SQRDMULH V0.2S, V0.2S, V0.S[0] + ]; } private static uint[] _SU_Mlal_Mlsl_Mull_Ve_4H4S_8H4S_() { - return new[] - { + return + [ 0x0F402000u, // SMLAL V0.4S, V0.4H, V0.H[0] 0x0F406000u, // SMLSL V0.4S, V0.4H, V0.H[0] 0x0F40A000u, // SMULL V0.4S, V0.4H, V0.H[0] 0x2F402000u, // UMLAL V0.4S, V0.4H, V0.H[0] 0x2F406000u, // UMLSL V0.4S, V0.4H, V0.H[0] - 0x2F40A000u, // UMULL V0.4S, V0.4H, V0.H[0] - }; + 0x2F40A000u // UMULL V0.4S, V0.4H, V0.H[0] + ]; } private static uint[] _SU_Mlal_Mlsl_Mull_Ve_2S2D_4S2D_() { - return new[] - { + return + [ 0x0F802000u, // SMLAL V0.2D, V0.2S, V0.S[0] 0x0F806000u, // SMLSL V0.2D, V0.2S, V0.S[0] 0x0F80A000u, // SMULL V0.2D, V0.2S, V0.S[0] 0x2F802000u, // UMLAL V0.2D, V0.2S, V0.S[0] 0x2F806000u, // UMLSL V0.2D, V0.2S, V0.S[0] - 0x2F80A000u, // UMULL V0.2D, V0.2S, V0.S[0] - }; + 0x2F80A000u // UMULL V0.2D, V0.2S, V0.S[0] + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdRegElemF.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdRegElemF.cs index 1b670da76..5d18e55e8 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdRegElemF.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdRegElemF.cs @@ -140,74 +140,74 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _F_Mla_Mls_Se_S_() { - return new[] - { + return + [ 0x5F821020u, // FMLA S0, S1, V2.S[0] - 0x5F825020u, // FMLS S0, S1, V2.S[0] - }; + 0x5F825020u // FMLS S0, S1, V2.S[0] + ]; } private static uint[] _F_Mla_Mls_Se_D_() { - return new[] - { + return + [ 0x5FC21020u, // FMLA D0, D1, V2.D[0] - 0x5FC25020u, // FMLS D0, D1, V2.D[0] - }; + 0x5FC25020u // FMLS D0, D1, V2.D[0] + ]; } private static uint[] _F_Mla_Mls_Ve_2S_4S_() { - return new[] - { + return + [ 0x0F801000u, // FMLA V0.2S, V0.2S, V0.S[0] - 0x0F805000u, // FMLS V0.2S, V0.2S, V0.S[0] - }; + 0x0F805000u // FMLS V0.2S, V0.2S, V0.S[0] + ]; } private static uint[] _F_Mla_Mls_Ve_2D_() { - return new[] - { + return + [ 0x4FC01000u, // FMLA V0.2D, V0.2D, V0.D[0] - 0x4FC05000u, // FMLS V0.2D, V0.2D, V0.D[0] - }; + 0x4FC05000u // FMLS V0.2D, V0.2D, V0.D[0] + ]; } private static uint[] _F_Mul_Mulx_Se_S_() { - return new[] - { + return + [ 0x5F829020u, // FMUL S0, S1, V2.S[0] - 0x7F829020u, // FMULX S0, S1, V2.S[0] - }; + 0x7F829020u // FMULX S0, S1, V2.S[0] + ]; } private static uint[] _F_Mul_Mulx_Se_D_() { - return new[] - { + return + [ 0x5FC29020u, // FMUL D0, D1, V2.D[0] - 0x7FC29020u, // FMULX D0, D1, V2.D[0] - }; + 0x7FC29020u // FMULX D0, D1, V2.D[0] + ]; } private static uint[] _F_Mul_Mulx_Ve_2S_4S_() { - return new[] - { + return + [ 0x0F809000u, // FMUL V0.2S, V0.2S, V0.S[0] - 0x2F809000u, // FMULX V0.2S, V0.2S, V0.S[0] - }; + 0x2F809000u // FMULX V0.2S, V0.2S, V0.S[0] + ]; } private static uint[] _F_Mul_Mulx_Ve_2D_() { - return new[] - { + return + [ 0x4FC09000u, // FMUL V0.2D, V0.2D, V0.D[0] - 0x6FC09000u, // FMULX V0.2D, V0.2D, V0.D[0] - }; + 0x6FC09000u // FMULX V0.2D, V0.2D, V0.D[0] + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs index 9816bc2cc..2becac676 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdShImm.cs @@ -15,50 +15,56 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Types)" private static ulong[] _1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _1H_() { - return new[] { + return + [ 0x0000000000000000ul, 0x0000000000007FFFul, - 0x0000000000008000ul, 0x000000000000FFFFul, - }; + 0x0000000000008000ul, 0x000000000000FFFFul + ]; } private static ulong[] _1S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x000000007FFFFFFFul, - 0x0000000080000000ul, 0x00000000FFFFFFFFul, - }; + 0x0000000080000000ul, 0x00000000FFFFFFFFul + ]; } private static ulong[] _2S_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFF7FFFFFFFul, - 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _4H_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFF7FFF7FFF7FFFul, - 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, - 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static IEnumerable _2S_F_W_() @@ -187,174 +193,174 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _F_Cvt_Z_SU_V_Fixed_2S_4S_() { - return new[] - { + return + [ 0x0F20FC00u, // FCVTZS V0.2S, V0.2S, #32 - 0x2F20FC00u, // FCVTZU V0.2S, V0.2S, #32 - }; + 0x2F20FC00u // FCVTZU V0.2S, V0.2S, #32 + ]; } private static uint[] _F_Cvt_Z_SU_V_Fixed_2D_() { - return new[] - { + return + [ 0x4F40FC00u, // FCVTZS V0.2D, V0.2D, #64 - 0x6F40FC00u, // FCVTZU V0.2D, V0.2D, #64 - }; + 0x6F40FC00u // FCVTZU V0.2D, V0.2D, #64 + ]; } private static uint[] _SU_Cvt_F_S_Fixed_S_() { - return new[] - { + return + [ 0x5F20E420u, // SCVTF S0, S1, #32 - 0x7F20E420u, // UCVTF S0, S1, #32 - }; + 0x7F20E420u // UCVTF S0, S1, #32 + ]; } private static uint[] _SU_Cvt_F_S_Fixed_D_() { - return new[] - { + return + [ 0x5F40E420u, // SCVTF D0, D1, #64 - 0x7F40E420u, // UCVTF D0, D1, #64 - }; + 0x7F40E420u // UCVTF D0, D1, #64 + ]; } private static uint[] _SU_Cvt_F_V_Fixed_2S_4S_() { - return new[] - { + return + [ 0x0F20E400u, // SCVTF V0.2S, V0.2S, #32 - 0x2F20E400u, // UCVTF V0.2S, V0.2S, #32 - }; + 0x2F20E400u // UCVTF V0.2S, V0.2S, #32 + ]; } private static uint[] _SU_Cvt_F_V_Fixed_2D_() { - return new[] - { + return + [ 0x4F40E400u, // SCVTF V0.2D, V0.2D, #64 - 0x6F40E400u, // UCVTF V0.2D, V0.2D, #64 - }; + 0x6F40E400u // UCVTF V0.2D, V0.2D, #64 + ]; } private static uint[] _Shl_Sli_S_D_() { - return new[] - { + return + [ 0x5F405400u, // SHL D0, D0, #0 - 0x7F405400u, // SLI D0, D0, #0 - }; + 0x7F405400u // SLI D0, D0, #0 + ]; } private static uint[] _Shl_Sli_V_8B_16B_() { - return new[] - { + return + [ 0x0F085400u, // SHL V0.8B, V0.8B, #0 - 0x2F085400u, // SLI V0.8B, V0.8B, #0 - }; + 0x2F085400u // SLI V0.8B, V0.8B, #0 + ]; } private static uint[] _Shl_Sli_V_4H_8H_() { - return new[] - { + return + [ 0x0F105400u, // SHL V0.4H, V0.4H, #0 - 0x2F105400u, // SLI V0.4H, V0.4H, #0 - }; + 0x2F105400u // SLI V0.4H, V0.4H, #0 + ]; } private static uint[] _Shl_Sli_V_2S_4S_() { - return new[] - { + return + [ 0x0F205400u, // SHL V0.2S, V0.2S, #0 - 0x2F205400u, // SLI V0.2S, V0.2S, #0 - }; + 0x2F205400u // SLI V0.2S, V0.2S, #0 + ]; } private static uint[] _Shl_Sli_V_2D_() { - return new[] - { + return + [ 0x4F405400u, // SHL V0.2D, V0.2D, #0 - 0x6F405400u, // SLI V0.2D, V0.2D, #0 - }; + 0x6F405400u // SLI V0.2D, V0.2D, #0 + ]; } private static uint[] _SU_Shll_V_8B8H_16B8H_() { - return new[] - { + return + [ 0x0F08A400u, // SSHLL V0.8H, V0.8B, #0 - 0x2F08A400u, // USHLL V0.8H, V0.8B, #0 - }; + 0x2F08A400u // USHLL V0.8H, V0.8B, #0 + ]; } private static uint[] _SU_Shll_V_4H4S_8H4S_() { - return new[] - { + return + [ 0x0F10A400u, // SSHLL V0.4S, V0.4H, #0 - 0x2F10A400u, // USHLL V0.4S, V0.4H, #0 - }; + 0x2F10A400u // USHLL V0.4S, V0.4H, #0 + ]; } private static uint[] _SU_Shll_V_2S2D_4S2D_() { - return new[] - { + return + [ 0x0F20A400u, // SSHLL V0.2D, V0.2S, #0 - 0x2F20A400u, // USHLL V0.2D, V0.2S, #0 - }; + 0x2F20A400u // USHLL V0.2D, V0.2S, #0 + ]; } private static uint[] _ShlImm_S_D_() { - return new[] - { - 0x5F407400u, // SQSHL D0, D0, #0 - }; + return + [ + 0x5F407400u // SQSHL D0, D0, #0 + ]; } private static uint[] _ShlImm_V_8B_16B_() { - return new[] - { - 0x0F087400u, // SQSHL V0.8B, V0.8B, #0 - }; + return + [ + 0x0F087400u // SQSHL V0.8B, V0.8B, #0 + ]; } private static uint[] _ShlImm_V_4H_8H_() { - return new[] - { - 0x0F107400u, // SQSHL V0.4H, V0.4H, #0 - }; + return + [ + 0x0F107400u // SQSHL V0.4H, V0.4H, #0 + ]; } private static uint[] _ShlImm_V_2S_4S_() { - return new[] - { - 0x0F207400u, // SQSHL V0.2S, V0.2S, #0 - }; + return + [ + 0x0F207400u // SQSHL V0.2S, V0.2S, #0 + ]; } private static uint[] _ShlImm_V_2D_() { - return new[] - { - 0x4F407400u, // SQSHL V0.2D, V0.2D, #0 - }; + return + [ + 0x4F407400u // SQSHL V0.2D, V0.2D, #0 + ]; } private static uint[] _ShrImm_Sri_S_D_() { - return new[] - { + return + [ 0x7F404400u, // SRI D0, D0, #64 0x5F402400u, // SRSHR D0, D0, #64 0x5F403400u, // SRSRA D0, D0, #64 @@ -363,14 +369,14 @@ namespace Ryujinx.Tests.Cpu 0x7F402400u, // URSHR D0, D0, #64 0x7F403400u, // URSRA D0, D0, #64 0x7F400400u, // USHR D0, D0, #64 - 0x7F401400u, // USRA D0, D0, #64 - }; + 0x7F401400u // USRA D0, D0, #64 + ]; } private static uint[] _ShrImm_Sri_V_8B_16B_() { - return new[] - { + return + [ 0x2F084400u, // SRI V0.8B, V0.8B, #8 0x0F082400u, // SRSHR V0.8B, V0.8B, #8 0x0F083400u, // SRSRA V0.8B, V0.8B, #8 @@ -379,14 +385,14 @@ namespace Ryujinx.Tests.Cpu 0x2F082400u, // URSHR V0.8B, V0.8B, #8 0x2F083400u, // URSRA V0.8B, V0.8B, #8 0x2F080400u, // USHR V0.8B, V0.8B, #8 - 0x2F081400u, // USRA V0.8B, V0.8B, #8 - }; + 0x2F081400u // USRA V0.8B, V0.8B, #8 + ]; } private static uint[] _ShrImm_Sri_V_4H_8H_() { - return new[] - { + return + [ 0x2F104400u, // SRI V0.4H, V0.4H, #16 0x0F102400u, // SRSHR V0.4H, V0.4H, #16 0x0F103400u, // SRSRA V0.4H, V0.4H, #16 @@ -395,14 +401,14 @@ namespace Ryujinx.Tests.Cpu 0x2F102400u, // URSHR V0.4H, V0.4H, #16 0x2F103400u, // URSRA V0.4H, V0.4H, #16 0x2F100400u, // USHR V0.4H, V0.4H, #16 - 0x2F101400u, // USRA V0.4H, V0.4H, #16 - }; + 0x2F101400u // USRA V0.4H, V0.4H, #16 + ]; } private static uint[] _ShrImm_Sri_V_2S_4S_() { - return new[] - { + return + [ 0x2F204400u, // SRI V0.2S, V0.2S, #32 0x0F202400u, // SRSHR V0.2S, V0.2S, #32 0x0F203400u, // SRSRA V0.2S, V0.2S, #32 @@ -411,14 +417,14 @@ namespace Ryujinx.Tests.Cpu 0x2F202400u, // URSHR V0.2S, V0.2S, #32 0x2F203400u, // URSRA V0.2S, V0.2S, #32 0x2F200400u, // USHR V0.2S, V0.2S, #32 - 0x2F201400u, // USRA V0.2S, V0.2S, #32 - }; + 0x2F201400u // USRA V0.2S, V0.2S, #32 + ]; } private static uint[] _ShrImm_Sri_V_2D_() { - return new[] - { + return + [ 0x6F404400u, // SRI V0.2D, V0.2D, #64 0x4F402400u, // SRSHR V0.2D, V0.2D, #64 0x4F403400u, // SRSRA V0.2D, V0.2D, #64 @@ -427,113 +433,113 @@ namespace Ryujinx.Tests.Cpu 0x6F402400u, // URSHR V0.2D, V0.2D, #64 0x6F403400u, // URSRA V0.2D, V0.2D, #64 0x6F400400u, // USHR V0.2D, V0.2D, #64 - 0x6F401400u, // USRA V0.2D, V0.2D, #64 - }; + 0x6F401400u // USRA V0.2D, V0.2D, #64 + ]; } private static uint[] _ShrImmNarrow_V_8H8B_8H16B_() { - return new[] - { + return + [ 0x0F088C00u, // RSHRN V0.8B, V0.8H, #8 - 0x0F088400u, // SHRN V0.8B, V0.8H, #8 - }; + 0x0F088400u // SHRN V0.8B, V0.8H, #8 + ]; } private static uint[] _ShrImmNarrow_V_4S4H_4S8H_() { - return new[] - { + return + [ 0x0F108C00u, // RSHRN V0.4H, V0.4S, #16 - 0x0F108400u, // SHRN V0.4H, V0.4S, #16 - }; + 0x0F108400u // SHRN V0.4H, V0.4S, #16 + ]; } private static uint[] _ShrImmNarrow_V_2D2S_2D4S_() { - return new[] - { + return + [ 0x0F208C00u, // RSHRN V0.2S, V0.2D, #32 - 0x0F208400u, // SHRN V0.2S, V0.2D, #32 - }; + 0x0F208400u // SHRN V0.2S, V0.2D, #32 + ]; } private static uint[] _ShrImmSaturatingNarrow_S_HB_() { - return new[] - { + return + [ 0x5F089C00u, // SQRSHRN B0, H0, #8 0x7F089C00u, // UQRSHRN B0, H0, #8 0x7F088C00u, // SQRSHRUN B0, H0, #8 0x5F089400u, // SQSHRN B0, H0, #8 0x7F089400u, // UQSHRN B0, H0, #8 - 0x7F088400u, // SQSHRUN B0, H0, #8 - }; + 0x7F088400u // SQSHRUN B0, H0, #8 + ]; } private static uint[] _ShrImmSaturatingNarrow_S_SH_() { - return new[] - { + return + [ 0x5F109C00u, // SQRSHRN H0, S0, #16 0x7F109C00u, // UQRSHRN H0, S0, #16 0x7F108C00u, // SQRSHRUN H0, S0, #16 0x5F109400u, // SQSHRN H0, S0, #16 0x7F109400u, // UQSHRN H0, S0, #16 - 0x7F108400u, // SQSHRUN H0, S0, #16 - }; + 0x7F108400u // SQSHRUN H0, S0, #16 + ]; } private static uint[] _ShrImmSaturatingNarrow_S_DS_() { - return new[] - { + return + [ 0x5F209C00u, // SQRSHRN S0, D0, #32 0x7F209C00u, // UQRSHRN S0, D0, #32 0x7F208C00u, // SQRSHRUN S0, D0, #32 0x5F209400u, // SQSHRN S0, D0, #32 0x7F209400u, // UQSHRN S0, D0, #32 - 0x7F208400u, // SQSHRUN S0, D0, #32 - }; + 0x7F208400u // SQSHRUN S0, D0, #32 + ]; } private static uint[] _ShrImmSaturatingNarrow_V_8H8B_8H16B_() { - return new[] - { + return + [ 0x0F089C00u, // SQRSHRN V0.8B, V0.8H, #8 0x2F089C00u, // UQRSHRN V0.8B, V0.8H, #8 0x2F088C00u, // SQRSHRUN V0.8B, V0.8H, #8 0x0F089400u, // SQSHRN V0.8B, V0.8H, #8 0x2F089400u, // UQSHRN V0.8B, V0.8H, #8 - 0x2F088400u, // SQSHRUN V0.8B, V0.8H, #8 - }; + 0x2F088400u // SQSHRUN V0.8B, V0.8H, #8 + ]; } private static uint[] _ShrImmSaturatingNarrow_V_4S4H_4S8H_() { - return new[] - { + return + [ 0x0F109C00u, // SQRSHRN V0.4H, V0.4S, #16 0x2F109C00u, // UQRSHRN V0.4H, V0.4S, #16 0x2F108C00u, // SQRSHRUN V0.4H, V0.4S, #16 0x0F109400u, // SQSHRN V0.4H, V0.4S, #16 0x2F109400u, // UQSHRN V0.4H, V0.4S, #16 - 0x2F108400u, // SQSHRUN V0.4H, V0.4S, #16 - }; + 0x2F108400u // SQSHRUN V0.4H, V0.4S, #16 + ]; } private static uint[] _ShrImmSaturatingNarrow_V_2D2S_2D4S_() { - return new[] - { + return + [ 0x0F209C00u, // SQRSHRN V0.2S, V0.2D, #32 0x2F209C00u, // UQRSHRN V0.2S, V0.2D, #32 0x2F208C00u, // SQRSHRUN V0.2S, V0.2D, #32 0x0F209400u, // SQSHRN V0.2S, V0.2D, #32 0x2F209400u, // UQSHRN V0.2S, V0.2D, #32 - 0x2F208400u, // SQSHRUN V0.2S, V0.2D, #32 - }; + 0x2F208400u // SQSHRUN V0.2S, V0.2D, #32 + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdShImm32.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdShImm32.cs index 7375f4d55..81b712ad7 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdShImm32.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdShImm32.cs @@ -13,98 +13,99 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Types)" private static ulong[] _1D_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7FFFFFFFFFFFFFFFul, - 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8000000000000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _2S_() { - return new[] - { - 0x0000000000000000ul, 0x7FFFFFFF7FFFFFFFul, 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul, - }; + return + [ + 0x0000000000000000ul, 0x7FFFFFFF7FFFFFFFul, 0x8000000080000000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _4H_() { - return new[] - { - 0x0000000000000000ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul, - }; + return + [ + 0x0000000000000000ul, 0x7FFF7FFF7FFF7FFFul, 0x8000800080008000ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static ulong[] _8B_() { - return new[] - { - 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul, - }; + return + [ + 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul + ]; } #endregion #region "ValueSource (Opcodes)" private static uint[] _Vshr_Imm_SU8_() { - return new[] - { + return + [ 0xf2880010u, // VSHR.S8 D0, D0, #8 0xf2880110u, // VSRA.S8 D0, D0, #8 0xf2880210u, // VRSHR.S8 D0, D0, #8 - 0xf2880310u, // VRSRA.S8 D0, D0, #8 - }; + 0xf2880310u // VRSRA.S8 D0, D0, #8 + ]; } private static uint[] _Vshr_Imm_SU16_() { - return new[] - { + return + [ 0xf2900010u, // VSHR.S16 D0, D0, #16 0xf2900110u, // VSRA.S16 D0, D0, #16 0xf2900210u, // VRSHR.S16 D0, D0, #16 - 0xf2900310u, // VRSRA.S16 D0, D0, #16 - }; + 0xf2900310u // VRSRA.S16 D0, D0, #16 + ]; } private static uint[] _Vshr_Imm_SU32_() { - return new[] - { + return + [ 0xf2a00010u, // VSHR.S32 D0, D0, #32 0xf2a00110u, // VSRA.S32 D0, D0, #32 0xf2a00210u, // VRSHR.S32 D0, D0, #32 - 0xf2a00310u, // VRSRA.S32 D0, D0, #32 - }; + 0xf2a00310u // VRSRA.S32 D0, D0, #32 + ]; } private static uint[] _Vshr_Imm_SU64_() { - return new[] - { + return + [ 0xf2800190u, // VSRA.S64 D0, D0, #64 0xf2800290u, // VRSHR.S64 D0, D0, #64 - 0xf2800090u, // VSHR.S64 D0, D0, #64 - }; + 0xf2800090u // VSHR.S64 D0, D0, #64 + ]; } private static uint[] _Vqshrn_Vqrshrn_Vrshrn_Imm_() { - return new[] - { + return + [ 0xf2800910u, // VORR.I16 D0, #0 (immediate value changes it into QSHRN) 0xf2800950u, // VORR.I16 Q0, #0 (immediate value changes it into QRSHRN) - 0xf2800850u, // VMOV.I16 Q0, #0 (immediate value changes it into RSHRN) - }; + 0xf2800850u // VMOV.I16 Q0, #0 (immediate value changes it into RSHRN) + ]; } private static uint[] _Vqshrun_Vqrshrun_Imm_() { - return new[] - { + return + [ 0xf3800810u, // VMOV.I16 D0, #0x80 (immediate value changes it into QSHRUN) - 0xf3800850u, // VMOV.I16 Q0, #0x80 (immediate value changes it into QRSHRUN) - }; + 0xf3800850u // VMOV.I16 Q0, #0x80 (immediate value changes it into QRSHRUN) + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSimdTbl.cs b/src/Ryujinx.Tests/Cpu/CpuTestSimdTbl.cs index 78af6fe4e..2801a1dcb 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSimdTbl.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSimdTbl.cs @@ -38,10 +38,11 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Types)" private static ulong[] _8B_() { - return new[] { + return + [ 0x0000000000000000ul, 0x7F7F7F7F7F7F7F7Ful, - 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul, - }; + 0x8080808080808080ul, 0xFFFFFFFFFFFFFFFFul + ]; } private static IEnumerable _GenIdxsForTbl1_() @@ -100,38 +101,38 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _SingleRegisterTable_V_8B_16B_() { - return new[] - { + return + [ 0x0E000000u, // TBL V0.8B, { V0.16B }, V0.8B - 0x0E001000u, // TBX V0.8B, { V0.16B }, V0.8B - }; + 0x0E001000u // TBX V0.8B, { V0.16B }, V0.8B + ]; } private static uint[] _TwoRegisterTable_V_8B_16B_() { - return new[] - { + return + [ 0x0E002000u, // TBL V0.8B, { V0.16B, V1.16B }, V0.8B - 0x0E003000u, // TBX V0.8B, { V0.16B, V1.16B }, V0.8B - }; + 0x0E003000u // TBX V0.8B, { V0.16B, V1.16B }, V0.8B + ]; } private static uint[] _ThreeRegisterTable_V_8B_16B_() { - return new[] - { + return + [ 0x0E004000u, // TBL V0.8B, { V0.16B, V1.16B, V2.16B }, V0.8B - 0x0E005000u, // TBX V0.8B, { V0.16B, V1.16B, V2.16B }, V0.8B - }; + 0x0E005000u // TBX V0.8B, { V0.16B, V1.16B, V2.16B }, V0.8B + ]; } private static uint[] _FourRegisterTable_V_8B_16B_() { - return new[] - { + return + [ 0x0E006000u, // TBL V0.8B, { V0.16B, V1.16B, V2.16B, V3.16B }, V0.8B - 0x0E006000u, // TBX V0.8B, { V0.16B, V1.16B, V2.16B, V3.16B }, V0.8B - }; + 0x0E006000u // TBX V0.8B, { V0.16B, V1.16B, V2.16B, V3.16B }, V0.8B + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestSystem.cs b/src/Ryujinx.Tests/Cpu/CpuTestSystem.cs index 6c498ef0f..43cd6e65a 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestSystem.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestSystem.cs @@ -38,11 +38,11 @@ namespace Ryujinx.Tests.Cpu #region "ValueSource (Opcodes)" private static uint[] _MrsMsr_Nzcv_() { - return new[] - { + return + [ 0xD53B4200u, // MRS X0, NZCV - 0xD51B4200u, // MSR NZCV, X0 - }; + 0xD51B4200u // MSR NZCV, X0 + ]; } #endregion diff --git a/src/Ryujinx.Tests/Cpu/CpuTestT32Alu.cs b/src/Ryujinx.Tests/Cpu/CpuTestT32Alu.cs index a0d46692c..b116e70f6 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestT32Alu.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestT32Alu.cs @@ -18,997 +18,1315 @@ namespace Ryujinx.Tests.Cpu } public static readonly PrecomputedThumbTestCase[] RsImmTestCases = - { + [ // TST (reg) new() { - Instructions = new ushort[] { 0xea18, 0x4f03, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x15a99211, 0x08a56ba3, 0x3c588032, 0xdac302ae, 0x6b7d5b2d, 0x4fe1d8dd, 0x04a574ba, 0x7873779d, 0x17a565d1, 0x63a4bf95, 0xd62594fb, 0x2b9aa84b, 0x20448ccd, 0x70b2197e, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0x15a99211, 0x08a56ba3, 0x3c588032, 0xdac302ae, 0x6b7d5b2d, 0x4fe1d8dd, 0x04a574ba, 0x7873779d, 0x17a565d1, 0x63a4bf95, 0xd62594fb, 0x2b9aa84b, 0x20448ccd, 0x70b2197e, 0x00000000, 0x300001d0 }, + Instructions = [0xea18, 0x4f03, 0x4770, 0xe7fe], + StartRegs = [0x15a99211, 0x08a56ba3, 0x3c588032, 0xdac302ae, 0x6b7d5b2d, 0x4fe1d8dd, 0x04a574ba, 0x7873779d, 0x17a565d1, 0x63a4bf95, 0xd62594fb, 0x2b9aa84b, 0x20448ccd, 0x70b2197e, 0x00000000, 0x700001f0 + ], + FinalRegs = [0x15a99211, 0x08a56ba3, 0x3c588032, 0xdac302ae, 0x6b7d5b2d, 0x4fe1d8dd, 0x04a574ba, 0x7873779d, 0x17a565d1, 0x63a4bf95, 0xd62594fb, 0x2b9aa84b, 0x20448ccd, 0x70b2197e, 0x00000000, 0x300001d0 + ], }, new() { - Instructions = new ushort[] { 0xea11, 0x5f67, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xc9754393, 0xec511f2a, 0xc365b8f1, 0xa024565a, 0x089ae8e2, 0xf0c91f23, 0x290f83f4, 0x48f2f445, 0xd3288f2b, 0x7d7b2e44, 0xe80dd37e, 0xb000697f, 0x95be1027, 0x74702206, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0xc9754393, 0xec511f2a, 0xc365b8f1, 0xa024565a, 0x089ae8e2, 0xf0c91f23, 0x290f83f4, 0x48f2f445, 0xd3288f2b, 0x7d7b2e44, 0xe80dd37e, 0xb000697f, 0x95be1027, 0x74702206, 0x00000000, 0x200001d0 }, + Instructions = [0xea11, 0x5f67, 0x4770, 0xe7fe], + StartRegs = [0xc9754393, 0xec511f2a, 0xc365b8f1, 0xa024565a, 0x089ae8e2, 0xf0c91f23, 0x290f83f4, 0x48f2f445, 0xd3288f2b, 0x7d7b2e44, 0xe80dd37e, 0xb000697f, 0x95be1027, 0x74702206, 0x00000000, 0x200001f0 + ], + FinalRegs = [0xc9754393, 0xec511f2a, 0xc365b8f1, 0xa024565a, 0x089ae8e2, 0xf0c91f23, 0x290f83f4, 0x48f2f445, 0xd3288f2b, 0x7d7b2e44, 0xe80dd37e, 0xb000697f, 0x95be1027, 0x74702206, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1a, 0x2fc9, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xe9c49eb7, 0x2ca13a97, 0x3fded5a8, 0x30e203e9, 0x811a9ee5, 0x504f95f2, 0x746794b4, 0xfe92b6d6, 0x7608d3c4, 0xf3c5ea36, 0x6290c8f2, 0x45a4a521, 0x359a615c, 0x25674915, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0xe9c49eb7, 0x2ca13a97, 0x3fded5a8, 0x30e203e9, 0x811a9ee5, 0x504f95f2, 0x746794b4, 0xfe92b6d6, 0x7608d3c4, 0xf3c5ea36, 0x6290c8f2, 0x45a4a521, 0x359a615c, 0x25674915, 0x00000000, 0x100001d0 }, + Instructions = [0xea1a, 0x2fc9, 0x4770, 0xe7fe], + StartRegs = [0xe9c49eb7, 0x2ca13a97, 0x3fded5a8, 0x30e203e9, 0x811a9ee5, 0x504f95f2, 0x746794b4, 0xfe92b6d6, 0x7608d3c4, 0xf3c5ea36, 0x6290c8f2, 0x45a4a521, 0x359a615c, 0x25674915, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0xe9c49eb7, 0x2ca13a97, 0x3fded5a8, 0x30e203e9, 0x811a9ee5, 0x504f95f2, 0x746794b4, 0xfe92b6d6, 0x7608d3c4, 0xf3c5ea36, 0x6290c8f2, 0x45a4a521, 0x359a615c, 0x25674915, 0x00000000, 0x100001d0 + ], }, new() { - Instructions = new ushort[] { 0xea15, 0x0f85, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3130c8d7, 0x5917d350, 0xdf48eedb, 0x23025883, 0x076175bb, 0x5402cc6c, 0x54a95806, 0x7f59c691, 0x9c3eeebf, 0x4b52b4d1, 0xb4eb9626, 0x21fa7996, 0x0ff0a95a, 0x6beb27fd, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0x3130c8d7, 0x5917d350, 0xdf48eedb, 0x23025883, 0x076175bb, 0x5402cc6c, 0x54a95806, 0x7f59c691, 0x9c3eeebf, 0x4b52b4d1, 0xb4eb9626, 0x21fa7996, 0x0ff0a95a, 0x6beb27fd, 0x00000000, 0x200001d0 }, + Instructions = [0xea15, 0x0f85, 0x4770, 0xe7fe], + StartRegs = [0x3130c8d7, 0x5917d350, 0xdf48eedb, 0x23025883, 0x076175bb, 0x5402cc6c, 0x54a95806, 0x7f59c691, 0x9c3eeebf, 0x4b52b4d1, 0xb4eb9626, 0x21fa7996, 0x0ff0a95a, 0x6beb27fd, 0x00000000, 0x600001f0 + ], + FinalRegs = [0x3130c8d7, 0x5917d350, 0xdf48eedb, 0x23025883, 0x076175bb, 0x5402cc6c, 0x54a95806, 0x7f59c691, 0x9c3eeebf, 0x4b52b4d1, 0xb4eb9626, 0x21fa7996, 0x0ff0a95a, 0x6beb27fd, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1b, 0x6feb, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x39889074, 0xbea8978e, 0x0331cc7a, 0x448e3b19, 0x33285e9e, 0xdf295408, 0x8444676e, 0xe6998904, 0x819e4da4, 0xb099272c, 0x101385a7, 0x71728a87, 0x76f95b3a, 0x8d5012e4, 0x00000000, 0xc00001f0 }, - FinalRegs = new uint[] { 0x39889074, 0xbea8978e, 0x0331cc7a, 0x448e3b19, 0x33285e9e, 0xdf295408, 0x8444676e, 0xe6998904, 0x819e4da4, 0xb099272c, 0x101385a7, 0x71728a87, 0x76f95b3a, 0x8d5012e4, 0x00000000, 0x000001d0 }, + Instructions = [0xea1b, 0x6feb, 0x4770, 0xe7fe], + StartRegs = [0x39889074, 0xbea8978e, 0x0331cc7a, 0x448e3b19, 0x33285e9e, 0xdf295408, 0x8444676e, 0xe6998904, 0x819e4da4, 0xb099272c, 0x101385a7, 0x71728a87, 0x76f95b3a, 0x8d5012e4, 0x00000000, 0xc00001f0 + ], + FinalRegs = [0x39889074, 0xbea8978e, 0x0331cc7a, 0x448e3b19, 0x33285e9e, 0xdf295408, 0x8444676e, 0xe6998904, 0x819e4da4, 0xb099272c, 0x101385a7, 0x71728a87, 0x76f95b3a, 0x8d5012e4, 0x00000000, 0x000001d0 + ], }, // AND (reg) new() { - Instructions = new ushort[] { 0xea18, 0x1f52, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xcbe174f1, 0x44be318c, 0x4a8a1a70, 0x1f3c8883, 0x33b316ee, 0x0591a3c5, 0x0ceff4a5, 0xd74988e2, 0xa5ef1873, 0xbd35a940, 0x52a9f4d8, 0xf8662781, 0xda558ea8, 0x4c7d50bc, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0xcbe174f1, 0x44be318c, 0x4a8a1a70, 0x1f3c8883, 0x33b316ee, 0x0591a3c5, 0x0ceff4a5, 0xd74988e2, 0xa5ef1873, 0xbd35a940, 0x52a9f4d8, 0xf8662781, 0xda558ea8, 0x4c7d50bc, 0x00000000, 0x200001d0 }, + Instructions = [0xea18, 0x1f52, 0x4770, 0xe7fe], + StartRegs = [0xcbe174f1, 0x44be318c, 0x4a8a1a70, 0x1f3c8883, 0x33b316ee, 0x0591a3c5, 0x0ceff4a5, 0xd74988e2, 0xa5ef1873, 0xbd35a940, 0x52a9f4d8, 0xf8662781, 0xda558ea8, 0x4c7d50bc, 0x00000000, 0x400001f0 + ], + FinalRegs = [0xcbe174f1, 0x44be318c, 0x4a8a1a70, 0x1f3c8883, 0x33b316ee, 0x0591a3c5, 0x0ceff4a5, 0xd74988e2, 0xa5ef1873, 0xbd35a940, 0x52a9f4d8, 0xf8662781, 0xda558ea8, 0x4c7d50bc, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea19, 0x4f6b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x97b9423c, 0x1c25286b, 0x50f84fef, 0xd917c24e, 0x2a5116af, 0xcc65ba10, 0xf5e9dc41, 0xf9f61d10, 0x9876cfe5, 0xd0fdd4bc, 0x95913be0, 0x844c820f, 0xfdaf9519, 0xf3fb09b6, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x97b9423c, 0x1c25286b, 0x50f84fef, 0xd917c24e, 0x2a5116af, 0xcc65ba10, 0xf5e9dc41, 0xf9f61d10, 0x9876cfe5, 0xd0fdd4bc, 0x95913be0, 0x844c820f, 0xfdaf9519, 0xf3fb09b6, 0x00000000, 0x900001d0 }, + Instructions = [0xea19, 0x4f6b, 0x4770, 0xe7fe], + StartRegs = [0x97b9423c, 0x1c25286b, 0x50f84fef, 0xd917c24e, 0x2a5116af, 0xcc65ba10, 0xf5e9dc41, 0xf9f61d10, 0x9876cfe5, 0xd0fdd4bc, 0x95913be0, 0x844c820f, 0xfdaf9519, 0xf3fb09b6, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x97b9423c, 0x1c25286b, 0x50f84fef, 0xd917c24e, 0x2a5116af, 0xcc65ba10, 0xf5e9dc41, 0xf9f61d10, 0x9876cfe5, 0xd0fdd4bc, 0x95913be0, 0x844c820f, 0xfdaf9519, 0xf3fb09b6, 0x00000000, 0x900001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1b, 0x3f52, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x1900757b, 0x6914c62d, 0x5eaa28ed, 0xd927c1f7, 0xfd2052ac, 0x146bcb99, 0x604f9b1d, 0xb395bf46, 0x3723ba84, 0xb909d3ec, 0x3db4365e, 0x42df68cd, 0x5fdc10cb, 0x4955b8be, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x1900757b, 0x6914c62d, 0x5eaa28ed, 0xd927c1f7, 0xfd2052ac, 0x146bcb99, 0x604f9b1d, 0xb395bf46, 0x3723ba84, 0xb909d3ec, 0x3db4365e, 0x42df68cd, 0x5fdc10cb, 0x4955b8be, 0x00000000, 0x100001d0 }, + Instructions = [0xea1b, 0x3f52, 0x4770, 0xe7fe], + StartRegs = [0x1900757b, 0x6914c62d, 0x5eaa28ed, 0xd927c1f7, 0xfd2052ac, 0x146bcb99, 0x604f9b1d, 0xb395bf46, 0x3723ba84, 0xb909d3ec, 0x3db4365e, 0x42df68cd, 0x5fdc10cb, 0x4955b8be, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x1900757b, 0x6914c62d, 0x5eaa28ed, 0xd927c1f7, 0xfd2052ac, 0x146bcb99, 0x604f9b1d, 0xb395bf46, 0x3723ba84, 0xb909d3ec, 0x3db4365e, 0x42df68cd, 0x5fdc10cb, 0x4955b8be, 0x00000000, 0x100001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1a, 0x0f17, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6134093f, 0x115a1456, 0xa7877f6e, 0x2070e9eb, 0x9ddf4a73, 0x14266482, 0x7f98e557, 0xbaa854e0, 0xa37f89a6, 0x641325de, 0xae2dc79b, 0x5b3f2af2, 0x476476d2, 0xb99cc9fd, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x6134093f, 0x115a1456, 0xa7877f6e, 0x2070e9eb, 0x9ddf4a73, 0x14266482, 0x7f98e557, 0xbaa854e0, 0xa37f89a6, 0x641325de, 0xae2dc79b, 0x5b3f2af2, 0x476476d2, 0xb99cc9fd, 0x00000000, 0x700001d0 }, + Instructions = [0xea1a, 0x0f17, 0x4770, 0xe7fe], + StartRegs = [0x6134093f, 0x115a1456, 0xa7877f6e, 0x2070e9eb, 0x9ddf4a73, 0x14266482, 0x7f98e557, 0xbaa854e0, 0xa37f89a6, 0x641325de, 0xae2dc79b, 0x5b3f2af2, 0x476476d2, 0xb99cc9fd, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x6134093f, 0x115a1456, 0xa7877f6e, 0x2070e9eb, 0x9ddf4a73, 0x14266482, 0x7f98e557, 0xbaa854e0, 0xa37f89a6, 0x641325de, 0xae2dc79b, 0x5b3f2af2, 0x476476d2, 0xb99cc9fd, 0x00000000, 0x700001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1b, 0x5f17, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xbaa2bc1a, 0xee3e86d4, 0x3179d65a, 0x8a63cf55, 0x48ea14f4, 0xf85c5d5b, 0x6af50974, 0xf3ded3e9, 0xdab4d6e6, 0x930c07eb, 0x8084b2dd, 0xf6518695, 0x4a3e0f7a, 0x581bd56a, 0x00000000, 0x300001f0 }, - FinalRegs = new uint[] { 0xbaa2bc1a, 0xee3e86d4, 0x3179d65a, 0x8a63cf55, 0x48ea14f4, 0xf85c5d5b, 0x6af50974, 0xf3ded3e9, 0xdab4d6e6, 0x930c07eb, 0x8084b2dd, 0xf6518695, 0x4a3e0f7a, 0x581bd56a, 0x00000000, 0x300001d0 }, + Instructions = [0xea1b, 0x5f17, 0x4770, 0xe7fe], + StartRegs = [0xbaa2bc1a, 0xee3e86d4, 0x3179d65a, 0x8a63cf55, 0x48ea14f4, 0xf85c5d5b, 0x6af50974, 0xf3ded3e9, 0xdab4d6e6, 0x930c07eb, 0x8084b2dd, 0xf6518695, 0x4a3e0f7a, 0x581bd56a, 0x00000000, 0x300001f0 + ], + FinalRegs = [0xbaa2bc1a, 0xee3e86d4, 0x3179d65a, 0x8a63cf55, 0x48ea14f4, 0xf85c5d5b, 0x6af50974, 0xf3ded3e9, 0xdab4d6e6, 0x930c07eb, 0x8084b2dd, 0xf6518695, 0x4a3e0f7a, 0x581bd56a, 0x00000000, 0x300001d0 + ], }, // BIC (reg) new() { - Instructions = new ushort[] { 0xea1c, 0x0fbc, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xfc7b7a8b, 0xc1186d54, 0x0a83eda1, 0x88fed37c, 0x5438e8ea, 0xe0af3690, 0x6dba7b9f, 0xa7395bd6, 0xd43af274, 0xbb46f4c2, 0xb65dbcd5, 0xa6bd08b0, 0xb55971c7, 0x2244572e, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0xfc7b7a8b, 0xc1186d54, 0x0a83eda1, 0x88fed37c, 0x5438e8ea, 0xe0af3690, 0x6dba7b9f, 0xa7395bd6, 0xd43af274, 0xbb46f4c2, 0xb65dbcd5, 0xa6bd08b0, 0xb55971c7, 0x2244572e, 0x00000000, 0xb00001d0 }, + Instructions = [0xea1c, 0x0fbc, 0x4770, 0xe7fe], + StartRegs = [0xfc7b7a8b, 0xc1186d54, 0x0a83eda1, 0x88fed37c, 0x5438e8ea, 0xe0af3690, 0x6dba7b9f, 0xa7395bd6, 0xd43af274, 0xbb46f4c2, 0xb65dbcd5, 0xa6bd08b0, 0xb55971c7, 0x2244572e, 0x00000000, 0x700001f0 + ], + FinalRegs = [0xfc7b7a8b, 0xc1186d54, 0x0a83eda1, 0x88fed37c, 0x5438e8ea, 0xe0af3690, 0x6dba7b9f, 0xa7395bd6, 0xd43af274, 0xbb46f4c2, 0xb65dbcd5, 0xa6bd08b0, 0xb55971c7, 0x2244572e, 0x00000000, 0xb00001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1b, 0x5fe7, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x75f617c8, 0x12ac7ccd, 0x85e6d881, 0x30967bdd, 0xdf66b387, 0xb3d59ccf, 0xe3c824b4, 0xada7a9e4, 0x225da86f, 0x18e008ac, 0x51854224, 0xf3b43823, 0xde37f151, 0x6764b34a, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0x75f617c8, 0x12ac7ccd, 0x85e6d881, 0x30967bdd, 0xdf66b387, 0xb3d59ccf, 0xe3c824b4, 0xada7a9e4, 0x225da86f, 0x18e008ac, 0x51854224, 0xf3b43823, 0xde37f151, 0x6764b34a, 0x00000000, 0x800001d0 }, + Instructions = [0xea1b, 0x5fe7, 0x4770, 0xe7fe], + StartRegs = [0x75f617c8, 0x12ac7ccd, 0x85e6d881, 0x30967bdd, 0xdf66b387, 0xb3d59ccf, 0xe3c824b4, 0xada7a9e4, 0x225da86f, 0x18e008ac, 0x51854224, 0xf3b43823, 0xde37f151, 0x6764b34a, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0x75f617c8, 0x12ac7ccd, 0x85e6d881, 0x30967bdd, 0xdf66b387, 0xb3d59ccf, 0xe3c824b4, 0xada7a9e4, 0x225da86f, 0x18e008ac, 0x51854224, 0xf3b43823, 0xde37f151, 0x6764b34a, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x1fc3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xde174255, 0x3968e364, 0xf1efd73b, 0x9a159a4e, 0x2b906c3e, 0xf1dfb847, 0x34e3e8f0, 0x39c33745, 0xc368a812, 0x8f3fe175, 0xe3da055f, 0x7737a5d5, 0x7464344a, 0xdb3ac192, 0x00000000, 0x000001f0 }, - FinalRegs = new uint[] { 0xde174255, 0x3968e364, 0xf1efd73b, 0x9a159a4e, 0x2b906c3e, 0xf1dfb847, 0x34e3e8f0, 0x39c33745, 0xc368a812, 0x8f3fe175, 0xe3da055f, 0x7737a5d5, 0x7464344a, 0xdb3ac192, 0x00000000, 0x200001d0 }, + Instructions = [0xea14, 0x1fc3, 0x4770, 0xe7fe], + StartRegs = [0xde174255, 0x3968e364, 0xf1efd73b, 0x9a159a4e, 0x2b906c3e, 0xf1dfb847, 0x34e3e8f0, 0x39c33745, 0xc368a812, 0x8f3fe175, 0xe3da055f, 0x7737a5d5, 0x7464344a, 0xdb3ac192, 0x00000000, 0x000001f0 + ], + FinalRegs = [0xde174255, 0x3968e364, 0xf1efd73b, 0x9a159a4e, 0x2b906c3e, 0xf1dfb847, 0x34e3e8f0, 0x39c33745, 0xc368a812, 0x8f3fe175, 0xe3da055f, 0x7737a5d5, 0x7464344a, 0xdb3ac192, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea18, 0x6f66, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x368ef4f3, 0x18583461, 0x94f6e104, 0x21e1c1b0, 0x009c85df, 0xe6bddfb2, 0x118e9dad, 0xcdf92eb5, 0xae18b093, 0xe24a54ab, 0x55d1a1a0, 0x0eed1bad, 0x8b6bce47, 0x20b1fdc2, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x368ef4f3, 0x18583461, 0x94f6e104, 0x21e1c1b0, 0x009c85df, 0xe6bddfb2, 0x118e9dad, 0xcdf92eb5, 0xae18b093, 0xe24a54ab, 0x55d1a1a0, 0x0eed1bad, 0x8b6bce47, 0x20b1fdc2, 0x00000000, 0x700001d0 }, + Instructions = [0xea18, 0x6f66, 0x4770, 0xe7fe], + StartRegs = [0x368ef4f3, 0x18583461, 0x94f6e104, 0x21e1c1b0, 0x009c85df, 0xe6bddfb2, 0x118e9dad, 0xcdf92eb5, 0xae18b093, 0xe24a54ab, 0x55d1a1a0, 0x0eed1bad, 0x8b6bce47, 0x20b1fdc2, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x368ef4f3, 0x18583461, 0x94f6e104, 0x21e1c1b0, 0x009c85df, 0xe6bddfb2, 0x118e9dad, 0xcdf92eb5, 0xae18b093, 0xe24a54ab, 0x55d1a1a0, 0x0eed1bad, 0x8b6bce47, 0x20b1fdc2, 0x00000000, 0x700001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1b, 0x3fc6, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6f913e40, 0xd1814933, 0x181eb63c, 0x287a5050, 0xe5925dd9, 0x712ee261, 0xcca2e51d, 0x0e88a1ba, 0xa4c8d4c3, 0x26887e3e, 0x83b8de36, 0xc5a5d439, 0x8d2ace7a, 0x9df36292, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0x6f913e40, 0xd1814933, 0x181eb63c, 0x287a5050, 0xe5925dd9, 0x712ee261, 0xcca2e51d, 0x0e88a1ba, 0xa4c8d4c3, 0x26887e3e, 0x83b8de36, 0xc5a5d439, 0x8d2ace7a, 0x9df36292, 0x00000000, 0x200001d0 }, + Instructions = [0xea1b, 0x3fc6, 0x4770, 0xe7fe], + StartRegs = [0x6f913e40, 0xd1814933, 0x181eb63c, 0x287a5050, 0xe5925dd9, 0x712ee261, 0xcca2e51d, 0x0e88a1ba, 0xa4c8d4c3, 0x26887e3e, 0x83b8de36, 0xc5a5d439, 0x8d2ace7a, 0x9df36292, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0x6f913e40, 0xd1814933, 0x181eb63c, 0x287a5050, 0xe5925dd9, 0x712ee261, 0xcca2e51d, 0x0e88a1ba, 0xa4c8d4c3, 0x26887e3e, 0x83b8de36, 0xc5a5d439, 0x8d2ace7a, 0x9df36292, 0x00000000, 0x200001d0 + ], }, // MOV (reg) new() { - Instructions = new ushort[] { 0xea16, 0x2fdd, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x89fcb953, 0xafbf8db2, 0xad96137f, 0x7901360c, 0x513b561b, 0x2345a005, 0x0ece889b, 0xc8bb918f, 0x270458ce, 0x73bea675, 0xab735592, 0xf68e00e5, 0x88bf2dc1, 0x98601074, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0x89fcb953, 0xafbf8db2, 0xad96137f, 0x7901360c, 0x513b561b, 0x2345a005, 0x0ece889b, 0xc8bb918f, 0x270458ce, 0x73bea675, 0xab735592, 0xf68e00e5, 0x88bf2dc1, 0x98601074, 0x00000000, 0x000001d0 }, + Instructions = [0xea16, 0x2fdd, 0x4770, 0xe7fe], + StartRegs = [0x89fcb953, 0xafbf8db2, 0xad96137f, 0x7901360c, 0x513b561b, 0x2345a005, 0x0ece889b, 0xc8bb918f, 0x270458ce, 0x73bea675, 0xab735592, 0xf68e00e5, 0x88bf2dc1, 0x98601074, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0x89fcb953, 0xafbf8db2, 0xad96137f, 0x7901360c, 0x513b561b, 0x2345a005, 0x0ece889b, 0xc8bb918f, 0x270458ce, 0x73bea675, 0xab735592, 0xf68e00e5, 0x88bf2dc1, 0x98601074, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea19, 0x6fd6, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x35f5eea1, 0x75fe4252, 0x71165923, 0x13ad82d2, 0x01f69a1c, 0x33ff5351, 0x869c335f, 0x70ce9266, 0xf58868ad, 0x4f58e982, 0x89f7df88, 0xd0ba8d45, 0xf45e6e03, 0x7f653972, 0x00000000, 0x800001f0 }, - FinalRegs = new uint[] { 0x35f5eea1, 0x75fe4252, 0x71165923, 0x13ad82d2, 0x01f69a1c, 0x33ff5351, 0x869c335f, 0x70ce9266, 0xf58868ad, 0x4f58e982, 0x89f7df88, 0xd0ba8d45, 0xf45e6e03, 0x7f653972, 0x00000000, 0x600001d0 }, + Instructions = [0xea19, 0x6fd6, 0x4770, 0xe7fe], + StartRegs = [0x35f5eea1, 0x75fe4252, 0x71165923, 0x13ad82d2, 0x01f69a1c, 0x33ff5351, 0x869c335f, 0x70ce9266, 0xf58868ad, 0x4f58e982, 0x89f7df88, 0xd0ba8d45, 0xf45e6e03, 0x7f653972, 0x00000000, 0x800001f0 + ], + FinalRegs = [0x35f5eea1, 0x75fe4252, 0x71165923, 0x13ad82d2, 0x01f69a1c, 0x33ff5351, 0x869c335f, 0x70ce9266, 0xf58868ad, 0x4f58e982, 0x89f7df88, 0xd0ba8d45, 0xf45e6e03, 0x7f653972, 0x00000000, 0x600001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x6f5d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x1e83719a, 0x1b6405c5, 0x25d9d1d6, 0x3e5fc7f3, 0xd157d610, 0x271b5c46, 0xb65c2838, 0xe4590643, 0x2f2623d7, 0xf1155f93, 0xfa676221, 0x6fac2a1d, 0xc1fa1d8d, 0x8cfa89e1, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x1e83719a, 0x1b6405c5, 0x25d9d1d6, 0x3e5fc7f3, 0xd157d610, 0x271b5c46, 0xb65c2838, 0xe4590643, 0x2f2623d7, 0xf1155f93, 0xfa676221, 0x6fac2a1d, 0xc1fa1d8d, 0x8cfa89e1, 0x00000000, 0x500001d0 }, + Instructions = [0xea14, 0x6f5d, 0x4770, 0xe7fe], + StartRegs = [0x1e83719a, 0x1b6405c5, 0x25d9d1d6, 0x3e5fc7f3, 0xd157d610, 0x271b5c46, 0xb65c2838, 0xe4590643, 0x2f2623d7, 0xf1155f93, 0xfa676221, 0x6fac2a1d, 0xc1fa1d8d, 0x8cfa89e1, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x1e83719a, 0x1b6405c5, 0x25d9d1d6, 0x3e5fc7f3, 0xd157d610, 0x271b5c46, 0xb65c2838, 0xe4590643, 0x2f2623d7, 0xf1155f93, 0xfa676221, 0x6fac2a1d, 0xc1fa1d8d, 0x8cfa89e1, 0x00000000, 0x500001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1c, 0x2fa2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x431278f1, 0xd3fffe52, 0xbfb4d877, 0x10af0eeb, 0xd375b791, 0xbd19aa81, 0x45eb7ba3, 0x30e47d42, 0xc274e032, 0x6da10d33, 0xfeda1ba4, 0x3dc6205e, 0xc275197e, 0x6c8b86d1, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x431278f1, 0xd3fffe52, 0xbfb4d877, 0x10af0eeb, 0xd375b791, 0xbd19aa81, 0x45eb7ba3, 0x30e47d42, 0xc274e032, 0x6da10d33, 0xfeda1ba4, 0x3dc6205e, 0xc275197e, 0x6c8b86d1, 0x00000000, 0x900001d0 }, + Instructions = [0xea1c, 0x2fa2, 0x4770, 0xe7fe], + StartRegs = [0x431278f1, 0xd3fffe52, 0xbfb4d877, 0x10af0eeb, 0xd375b791, 0xbd19aa81, 0x45eb7ba3, 0x30e47d42, 0xc274e032, 0x6da10d33, 0xfeda1ba4, 0x3dc6205e, 0xc275197e, 0x6c8b86d1, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x431278f1, 0xd3fffe52, 0xbfb4d877, 0x10af0eeb, 0xd375b791, 0xbd19aa81, 0x45eb7ba3, 0x30e47d42, 0xc274e032, 0x6da10d33, 0xfeda1ba4, 0x3dc6205e, 0xc275197e, 0x6c8b86d1, 0x00000000, 0x900001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1a, 0x7f7b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x31f0830d, 0x69dda3f6, 0x983fc927, 0x0407652a, 0x32ceab65, 0xe76a77fd, 0x8a7dd0a6, 0x4892a02f, 0xeab00585, 0xa78bf230, 0x896dd5a9, 0xe3c44398, 0xc2d743d0, 0x42b03803, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x31f0830d, 0x69dda3f6, 0x983fc927, 0x0407652a, 0x32ceab65, 0xe76a77fd, 0x8a7dd0a6, 0x4892a02f, 0xeab00585, 0xa78bf230, 0x896dd5a9, 0xe3c44398, 0xc2d743d0, 0x42b03803, 0x00000000, 0x100001d0 }, + Instructions = [0xea1a, 0x7f7b, 0x4770, 0xe7fe], + StartRegs = [0x31f0830d, 0x69dda3f6, 0x983fc927, 0x0407652a, 0x32ceab65, 0xe76a77fd, 0x8a7dd0a6, 0x4892a02f, 0xeab00585, 0xa78bf230, 0x896dd5a9, 0xe3c44398, 0xc2d743d0, 0x42b03803, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x31f0830d, 0x69dda3f6, 0x983fc927, 0x0407652a, 0x32ceab65, 0xe76a77fd, 0x8a7dd0a6, 0x4892a02f, 0xeab00585, 0xa78bf230, 0x896dd5a9, 0xe3c44398, 0xc2d743d0, 0x42b03803, 0x00000000, 0x100001d0 + ], }, // ORR (reg) new() { - Instructions = new ushort[] { 0xea10, 0x5f72, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5834d41e, 0x7092ed2e, 0x8994242e, 0x7fac6d96, 0x4d896829, 0x1a578dec, 0x98649fd8, 0x3b713450, 0xca430792, 0xd68d5176, 0xfe0b5c4f, 0xd9caf416, 0xb0e9d5fa, 0x62c57422, 0x00000000, 0x800001f0 }, - FinalRegs = new uint[] { 0x5834d41e, 0x7092ed2e, 0x8994242e, 0x7fac6d96, 0x4d896829, 0x1a578dec, 0x98649fd8, 0x3b713450, 0xca430792, 0xd68d5176, 0xfe0b5c4f, 0xd9caf416, 0xb0e9d5fa, 0x62c57422, 0x00000000, 0x200001d0 }, + Instructions = [0xea10, 0x5f72, 0x4770, 0xe7fe], + StartRegs = [0x5834d41e, 0x7092ed2e, 0x8994242e, 0x7fac6d96, 0x4d896829, 0x1a578dec, 0x98649fd8, 0x3b713450, 0xca430792, 0xd68d5176, 0xfe0b5c4f, 0xd9caf416, 0xb0e9d5fa, 0x62c57422, 0x00000000, 0x800001f0 + ], + FinalRegs = [0x5834d41e, 0x7092ed2e, 0x8994242e, 0x7fac6d96, 0x4d896829, 0x1a578dec, 0x98649fd8, 0x3b713450, 0xca430792, 0xd68d5176, 0xfe0b5c4f, 0xd9caf416, 0xb0e9d5fa, 0x62c57422, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x0fb4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6842aa84, 0x0711ecb6, 0xebae7374, 0x6ea58edd, 0xa6d2837c, 0xbcc1e0d1, 0xe52c9d6c, 0x7bb5fa1c, 0xa7cd6f8a, 0x4558ddb7, 0x7adb449c, 0x95986dd8, 0x7432562c, 0x80d2595c, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x6842aa84, 0x0711ecb6, 0xebae7374, 0x6ea58edd, 0xa6d2837c, 0xbcc1e0d1, 0xe52c9d6c, 0x7bb5fa1c, 0xa7cd6f8a, 0x4558ddb7, 0x7adb449c, 0x95986dd8, 0x7432562c, 0x80d2595c, 0x00000000, 0x000001d0 }, + Instructions = [0xea14, 0x0fb4, 0x4770, 0xe7fe], + StartRegs = [0x6842aa84, 0x0711ecb6, 0xebae7374, 0x6ea58edd, 0xa6d2837c, 0xbcc1e0d1, 0xe52c9d6c, 0x7bb5fa1c, 0xa7cd6f8a, 0x4558ddb7, 0x7adb449c, 0x95986dd8, 0x7432562c, 0x80d2595c, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x6842aa84, 0x0711ecb6, 0xebae7374, 0x6ea58edd, 0xa6d2837c, 0xbcc1e0d1, 0xe52c9d6c, 0x7bb5fa1c, 0xa7cd6f8a, 0x4558ddb7, 0x7adb449c, 0x95986dd8, 0x7432562c, 0x80d2595c, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x2f78, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6be94e4c, 0x0569589b, 0xc7e6e127, 0xe5537aea, 0x323e7a85, 0x895e9a94, 0x2341f9b6, 0x9632a18a, 0xa790766f, 0x53533cf3, 0x83cec3aa, 0xa1d042af, 0xabff7e58, 0x614f9bc0, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x6be94e4c, 0x0569589b, 0xc7e6e127, 0xe5537aea, 0x323e7a85, 0x895e9a94, 0x2341f9b6, 0x9632a18a, 0xa790766f, 0x53533cf3, 0x83cec3aa, 0xa1d042af, 0xabff7e58, 0x614f9bc0, 0x00000000, 0x000001d0 }, + Instructions = [0xea14, 0x2f78, 0x4770, 0xe7fe], + StartRegs = [0x6be94e4c, 0x0569589b, 0xc7e6e127, 0xe5537aea, 0x323e7a85, 0x895e9a94, 0x2341f9b6, 0x9632a18a, 0xa790766f, 0x53533cf3, 0x83cec3aa, 0xa1d042af, 0xabff7e58, 0x614f9bc0, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x6be94e4c, 0x0569589b, 0xc7e6e127, 0xe5537aea, 0x323e7a85, 0x895e9a94, 0x2341f9b6, 0x9632a18a, 0xa790766f, 0x53533cf3, 0x83cec3aa, 0xa1d042af, 0xabff7e58, 0x614f9bc0, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea12, 0x4fbc, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x2e43ac9a, 0xa6a8d4b6, 0xf5853279, 0xf152f284, 0xce9656e5, 0x07642918, 0xd6e25d4a, 0xdebc7fa6, 0x8c3af5e0, 0x3d00cd4c, 0x7e744bb4, 0x2a4b8015, 0x602ea481, 0xdef7571b, 0x00000000, 0x300001f0 }, - FinalRegs = new uint[] { 0x2e43ac9a, 0xa6a8d4b6, 0xf5853279, 0xf152f284, 0xce9656e5, 0x07642918, 0xd6e25d4a, 0xdebc7fa6, 0x8c3af5e0, 0x3d00cd4c, 0x7e744bb4, 0x2a4b8015, 0x602ea481, 0xdef7571b, 0x00000000, 0xb00001d0 }, + Instructions = [0xea12, 0x4fbc, 0x4770, 0xe7fe], + StartRegs = [0x2e43ac9a, 0xa6a8d4b6, 0xf5853279, 0xf152f284, 0xce9656e5, 0x07642918, 0xd6e25d4a, 0xdebc7fa6, 0x8c3af5e0, 0x3d00cd4c, 0x7e744bb4, 0x2a4b8015, 0x602ea481, 0xdef7571b, 0x00000000, 0x300001f0 + ], + FinalRegs = [0x2e43ac9a, 0xa6a8d4b6, 0xf5853279, 0xf152f284, 0xce9656e5, 0x07642918, 0xd6e25d4a, 0xdebc7fa6, 0x8c3af5e0, 0x3d00cd4c, 0x7e744bb4, 0x2a4b8015, 0x602ea481, 0xdef7571b, 0x00000000, 0xb00001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x7f4c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x67be4dae, 0xff0f74a8, 0xd769f9e1, 0xb4a98e0a, 0x2988a7dc, 0xb5726464, 0xb7b3fb27, 0x077e539c, 0x9c817cd4, 0xa8cc3981, 0xbe5a7591, 0xc753850a, 0xb8c612a7, 0x6d913c9b, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0x67be4dae, 0xff0f74a8, 0xd769f9e1, 0xb4a98e0a, 0x2988a7dc, 0xb5726464, 0xb7b3fb27, 0x077e539c, 0x9c817cd4, 0xa8cc3981, 0xbe5a7591, 0xc753850a, 0xb8c612a7, 0x6d913c9b, 0x00000000, 0x100001d0 }, + Instructions = [0xea14, 0x7f4c, 0x4770, 0xe7fe], + StartRegs = [0x67be4dae, 0xff0f74a8, 0xd769f9e1, 0xb4a98e0a, 0x2988a7dc, 0xb5726464, 0xb7b3fb27, 0x077e539c, 0x9c817cd4, 0xa8cc3981, 0xbe5a7591, 0xc753850a, 0xb8c612a7, 0x6d913c9b, 0x00000000, 0x900001f0 + ], + FinalRegs = [0x67be4dae, 0xff0f74a8, 0xd769f9e1, 0xb4a98e0a, 0x2988a7dc, 0xb5726464, 0xb7b3fb27, 0x077e539c, 0x9c817cd4, 0xa8cc3981, 0xbe5a7591, 0xc753850a, 0xb8c612a7, 0x6d913c9b, 0x00000000, 0x100001d0 + ], }, // MVN (reg) new() { - Instructions = new ushort[] { 0xea15, 0x0ffb, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x4a0a7b4c, 0x4e58d907, 0x386b8207, 0xcd71b0c4, 0x86dcf525, 0x8ae9dba4, 0xf5d6a418, 0xfac79f2e, 0x44cf918b, 0x5d38193b, 0xc17adeaf, 0xa4ad8a86, 0x69527ece, 0x69b75c61, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0x4a0a7b4c, 0x4e58d907, 0x386b8207, 0xcd71b0c4, 0x86dcf525, 0x8ae9dba4, 0xf5d6a418, 0xfac79f2e, 0x44cf918b, 0x5d38193b, 0xc17adeaf, 0xa4ad8a86, 0x69527ece, 0x69b75c61, 0x00000000, 0xb00001d0 }, + Instructions = [0xea15, 0x0ffb, 0x4770, 0xe7fe], + StartRegs = [0x4a0a7b4c, 0x4e58d907, 0x386b8207, 0xcd71b0c4, 0x86dcf525, 0x8ae9dba4, 0xf5d6a418, 0xfac79f2e, 0x44cf918b, 0x5d38193b, 0xc17adeaf, 0xa4ad8a86, 0x69527ece, 0x69b75c61, 0x00000000, 0x900001f0 + ], + FinalRegs = [0x4a0a7b4c, 0x4e58d907, 0x386b8207, 0xcd71b0c4, 0x86dcf525, 0x8ae9dba4, 0xf5d6a418, 0xfac79f2e, 0x44cf918b, 0x5d38193b, 0xc17adeaf, 0xa4ad8a86, 0x69527ece, 0x69b75c61, 0x00000000, 0xb00001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1a, 0x4f01, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xce60a6df, 0xb1127c3f, 0x410d7b4a, 0xd9cfc917, 0xd1b2fc52, 0x8be1e03c, 0xde9b256d, 0xff989abd, 0x07e3c46a, 0x780e7d7c, 0xd807ce82, 0x5e5c8f2b, 0x09232f6d, 0x00746338, 0x00000000, 0x500001f0 }, - FinalRegs = new uint[] { 0xce60a6df, 0xb1127c3f, 0x410d7b4a, 0xd9cfc917, 0xd1b2fc52, 0x8be1e03c, 0xde9b256d, 0xff989abd, 0x07e3c46a, 0x780e7d7c, 0xd807ce82, 0x5e5c8f2b, 0x09232f6d, 0x00746338, 0x00000000, 0x100001d0 }, + Instructions = [0xea1a, 0x4f01, 0x4770, 0xe7fe], + StartRegs = [0xce60a6df, 0xb1127c3f, 0x410d7b4a, 0xd9cfc917, 0xd1b2fc52, 0x8be1e03c, 0xde9b256d, 0xff989abd, 0x07e3c46a, 0x780e7d7c, 0xd807ce82, 0x5e5c8f2b, 0x09232f6d, 0x00746338, 0x00000000, 0x500001f0 + ], + FinalRegs = [0xce60a6df, 0xb1127c3f, 0x410d7b4a, 0xd9cfc917, 0xd1b2fc52, 0x8be1e03c, 0xde9b256d, 0xff989abd, 0x07e3c46a, 0x780e7d7c, 0xd807ce82, 0x5e5c8f2b, 0x09232f6d, 0x00746338, 0x00000000, 0x100001d0 + ], }, new() { - Instructions = new ushort[] { 0xea18, 0x2f5e, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x18b1240a, 0xa896f734, 0xcd4a40bc, 0x28346a77, 0xbdf09586, 0x3c74ed70, 0x3e255ea3, 0xe55679b4, 0xcc602510, 0x9cd73bfb, 0xf21a6ddb, 0x263a4338, 0x06beb332, 0x0790ac93, 0x00000000, 0xa00001f0 }, - FinalRegs = new uint[] { 0x18b1240a, 0xa896f734, 0xcd4a40bc, 0x28346a77, 0xbdf09586, 0x3c74ed70, 0x3e255ea3, 0xe55679b4, 0xcc602510, 0x9cd73bfb, 0xf21a6ddb, 0x263a4338, 0x06beb332, 0x0790ac93, 0x00000000, 0x400001d0 }, + Instructions = [0xea18, 0x2f5e, 0x4770, 0xe7fe], + StartRegs = [0x18b1240a, 0xa896f734, 0xcd4a40bc, 0x28346a77, 0xbdf09586, 0x3c74ed70, 0x3e255ea3, 0xe55679b4, 0xcc602510, 0x9cd73bfb, 0xf21a6ddb, 0x263a4338, 0x06beb332, 0x0790ac93, 0x00000000, 0xa00001f0 + ], + FinalRegs = [0x18b1240a, 0xa896f734, 0xcd4a40bc, 0x28346a77, 0xbdf09586, 0x3c74ed70, 0x3e255ea3, 0xe55679b4, 0xcc602510, 0x9cd73bfb, 0xf21a6ddb, 0x263a4338, 0x06beb332, 0x0790ac93, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1b, 0x7f41, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0c25f69d, 0xc32dc28a, 0xf5e2fe71, 0xe46af209, 0x2d1b6ac8, 0xccac564c, 0x567cc561, 0x63707d28, 0xeae934c8, 0xab78e6f6, 0x2d78d86d, 0x76471cdc, 0x9b909f76, 0xa2cc099d, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0x0c25f69d, 0xc32dc28a, 0xf5e2fe71, 0xe46af209, 0x2d1b6ac8, 0xccac564c, 0x567cc561, 0x63707d28, 0xeae934c8, 0xab78e6f6, 0x2d78d86d, 0x76471cdc, 0x9b909f76, 0xa2cc099d, 0x00000000, 0x200001d0 }, + Instructions = [0xea1b, 0x7f41, 0x4770, 0xe7fe], + StartRegs = [0x0c25f69d, 0xc32dc28a, 0xf5e2fe71, 0xe46af209, 0x2d1b6ac8, 0xccac564c, 0x567cc561, 0x63707d28, 0xeae934c8, 0xab78e6f6, 0x2d78d86d, 0x76471cdc, 0x9b909f76, 0xa2cc099d, 0x00000000, 0x200001f0 + ], + FinalRegs = [0x0c25f69d, 0xc32dc28a, 0xf5e2fe71, 0xe46af209, 0x2d1b6ac8, 0xccac564c, 0x567cc561, 0x63707d28, 0xeae934c8, 0xab78e6f6, 0x2d78d86d, 0x76471cdc, 0x9b909f76, 0xa2cc099d, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea19, 0x6ff6, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6e79c449, 0xe9449bf7, 0x51f8fcb8, 0x138e0b80, 0x715312f2, 0x601ea894, 0xb01f9369, 0x02738c29, 0xee35545f, 0xb61ae4a2, 0xba412f08, 0x1d349e02, 0x56a0dfc0, 0x68cd5bfe, 0x00000000, 0x500001f0 }, - FinalRegs = new uint[] { 0x6e79c449, 0xe9449bf7, 0x51f8fcb8, 0x138e0b80, 0x715312f2, 0x601ea894, 0xb01f9369, 0x02738c29, 0xee35545f, 0xb61ae4a2, 0xba412f08, 0x1d349e02, 0x56a0dfc0, 0x68cd5bfe, 0x00000000, 0x100001d0 }, + Instructions = [0xea19, 0x6ff6, 0x4770, 0xe7fe], + StartRegs = [0x6e79c449, 0xe9449bf7, 0x51f8fcb8, 0x138e0b80, 0x715312f2, 0x601ea894, 0xb01f9369, 0x02738c29, 0xee35545f, 0xb61ae4a2, 0xba412f08, 0x1d349e02, 0x56a0dfc0, 0x68cd5bfe, 0x00000000, 0x500001f0 + ], + FinalRegs = [0x6e79c449, 0xe9449bf7, 0x51f8fcb8, 0x138e0b80, 0x715312f2, 0x601ea894, 0xb01f9369, 0x02738c29, 0xee35545f, 0xb61ae4a2, 0xba412f08, 0x1d349e02, 0x56a0dfc0, 0x68cd5bfe, 0x00000000, 0x100001d0 + ], }, // ORN (reg) new() { - Instructions = new ushort[] { 0xea1b, 0x3fd0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x77034e34, 0xd0727e58, 0x4748dbf2, 0x2becd551, 0x0a650329, 0x005548fa, 0xcfb963c2, 0x9561c965, 0xf157c850, 0x180a1a6c, 0x0252e103, 0x29d0f25a, 0xbd9bbecd, 0xbfd1347c, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0x77034e34, 0xd0727e58, 0x4748dbf2, 0x2becd551, 0x0a650329, 0x005548fa, 0xcfb963c2, 0x9561c965, 0xf157c850, 0x180a1a6c, 0x0252e103, 0x29d0f25a, 0xbd9bbecd, 0xbfd1347c, 0x00000000, 0x300001d0 }, + Instructions = [0xea1b, 0x3fd0, 0x4770, 0xe7fe], + StartRegs = [0x77034e34, 0xd0727e58, 0x4748dbf2, 0x2becd551, 0x0a650329, 0x005548fa, 0xcfb963c2, 0x9561c965, 0xf157c850, 0x180a1a6c, 0x0252e103, 0x29d0f25a, 0xbd9bbecd, 0xbfd1347c, 0x00000000, 0x100001f0 + ], + FinalRegs = [0x77034e34, 0xd0727e58, 0x4748dbf2, 0x2becd551, 0x0a650329, 0x005548fa, 0xcfb963c2, 0x9561c965, 0xf157c850, 0x180a1a6c, 0x0252e103, 0x29d0f25a, 0xbd9bbecd, 0xbfd1347c, 0x00000000, 0x300001d0 + ], }, new() { - Instructions = new ushort[] { 0xea16, 0x4f72, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x71cc7ddf, 0x67d4ce81, 0x60b04501, 0xcc90b805, 0xc5f34081, 0x5e83e9f7, 0xb5a78fa9, 0xc2497a71, 0xb20cdf14, 0x4de9f773, 0xf79525ec, 0x26534abd, 0xcd7b59d1, 0x5cfc9554, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0x71cc7ddf, 0x67d4ce81, 0x60b04501, 0xcc90b805, 0xc5f34081, 0x5e83e9f7, 0xb5a78fa9, 0xc2497a71, 0xb20cdf14, 0x4de9f773, 0xf79525ec, 0x26534abd, 0xcd7b59d1, 0x5cfc9554, 0x00000000, 0x000001d0 }, + Instructions = [0xea16, 0x4f72, 0x4770, 0xe7fe], + StartRegs = [0x71cc7ddf, 0x67d4ce81, 0x60b04501, 0xcc90b805, 0xc5f34081, 0x5e83e9f7, 0xb5a78fa9, 0xc2497a71, 0xb20cdf14, 0x4de9f773, 0xf79525ec, 0x26534abd, 0xcd7b59d1, 0x5cfc9554, 0x00000000, 0x200001f0 + ], + FinalRegs = [0x71cc7ddf, 0x67d4ce81, 0x60b04501, 0xcc90b805, 0xc5f34081, 0x5e83e9f7, 0xb5a78fa9, 0xc2497a71, 0xb20cdf14, 0x4de9f773, 0xf79525ec, 0x26534abd, 0xcd7b59d1, 0x5cfc9554, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1d, 0x4fa7, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x73259d94, 0xc85643db, 0xbf238eb1, 0x51648d99, 0xce2971c9, 0xf9e0e440, 0x90de33c9, 0xcf8ac8e9, 0xda964c21, 0x539eb057, 0x3a681b87, 0x11993d47, 0x05a1358f, 0xa8282529, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x73259d94, 0xc85643db, 0xbf238eb1, 0x51648d99, 0xce2971c9, 0xf9e0e440, 0x90de33c9, 0xcf8ac8e9, 0xda964c21, 0x539eb057, 0x3a681b87, 0x11993d47, 0x05a1358f, 0xa8282529, 0x00000000, 0xb00001d0 }, + Instructions = [0xea1d, 0x4fa7, 0x4770, 0xe7fe], + StartRegs = [0x73259d94, 0xc85643db, 0xbf238eb1, 0x51648d99, 0xce2971c9, 0xf9e0e440, 0x90de33c9, 0xcf8ac8e9, 0xda964c21, 0x539eb057, 0x3a681b87, 0x11993d47, 0x05a1358f, 0xa8282529, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x73259d94, 0xc85643db, 0xbf238eb1, 0x51648d99, 0xce2971c9, 0xf9e0e440, 0x90de33c9, 0xcf8ac8e9, 0xda964c21, 0x539eb057, 0x3a681b87, 0x11993d47, 0x05a1358f, 0xa8282529, 0x00000000, 0xb00001d0 + ], }, new() { - Instructions = new ushort[] { 0xea12, 0x3fdb, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd274d46b, 0x8937836f, 0x33b78178, 0xc250b807, 0xd3323d2f, 0x82e03ba2, 0xf93bf1a6, 0xb31e0c74, 0xc9238070, 0x957331d1, 0xfaadd1ee, 0x073d40fb, 0x05b3e8b4, 0x93e5233b, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0xd274d46b, 0x8937836f, 0x33b78178, 0xc250b807, 0xd3323d2f, 0x82e03ba2, 0xf93bf1a6, 0xb31e0c74, 0xc9238070, 0x957331d1, 0xfaadd1ee, 0x073d40fb, 0x05b3e8b4, 0x93e5233b, 0x00000000, 0x200001d0 }, + Instructions = [0xea12, 0x3fdb, 0x4770, 0xe7fe], + StartRegs = [0xd274d46b, 0x8937836f, 0x33b78178, 0xc250b807, 0xd3323d2f, 0x82e03ba2, 0xf93bf1a6, 0xb31e0c74, 0xc9238070, 0x957331d1, 0xfaadd1ee, 0x073d40fb, 0x05b3e8b4, 0x93e5233b, 0x00000000, 0x600001f0 + ], + FinalRegs = [0xd274d46b, 0x8937836f, 0x33b78178, 0xc250b807, 0xd3323d2f, 0x82e03ba2, 0xf93bf1a6, 0xb31e0c74, 0xc9238070, 0x957331d1, 0xfaadd1ee, 0x073d40fb, 0x05b3e8b4, 0x93e5233b, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea15, 0x5f92, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x24755d61, 0xb65b742d, 0xb46476cf, 0x771a9fcd, 0x465b367f, 0x3daa2a47, 0x6984eeb8, 0x238e3187, 0xa9717261, 0x4592be1d, 0x46d19147, 0x6a6e4dc8, 0x4ddd896f, 0x2f899425, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x24755d61, 0xb65b742d, 0xb46476cf, 0x771a9fcd, 0x465b367f, 0x3daa2a47, 0x6984eeb8, 0x238e3187, 0xa9717261, 0x4592be1d, 0x46d19147, 0x6a6e4dc8, 0x4ddd896f, 0x2f899425, 0x00000000, 0x300001d0 }, + Instructions = [0xea15, 0x5f92, 0x4770, 0xe7fe], + StartRegs = [0x24755d61, 0xb65b742d, 0xb46476cf, 0x771a9fcd, 0x465b367f, 0x3daa2a47, 0x6984eeb8, 0x238e3187, 0xa9717261, 0x4592be1d, 0x46d19147, 0x6a6e4dc8, 0x4ddd896f, 0x2f899425, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x24755d61, 0xb65b742d, 0xb46476cf, 0x771a9fcd, 0x465b367f, 0x3daa2a47, 0x6984eeb8, 0x238e3187, 0xa9717261, 0x4592be1d, 0x46d19147, 0x6a6e4dc8, 0x4ddd896f, 0x2f899425, 0x00000000, 0x300001d0 + ], }, // TEQ (reg) new() { - Instructions = new ushort[] { 0xea1a, 0x2f54, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x36675cac, 0xd9259257, 0x0b8ab9ad, 0xbfef324e, 0xf9623cd6, 0xfc1919ff, 0x616b25f5, 0x2d26a3d3, 0x61eb12c8, 0xbb8d48f0, 0xbfb9c232, 0x10383506, 0x31d10885, 0xf29cb615, 0x00000000, 0x500001f0 }, - FinalRegs = new uint[] { 0x36675cac, 0xd9259257, 0x0b8ab9ad, 0xbfef324e, 0xf9623cd6, 0xfc1919ff, 0x616b25f5, 0x2d26a3d3, 0x61eb12c8, 0xbb8d48f0, 0xbfb9c232, 0x10383506, 0x31d10885, 0xf29cb615, 0x00000000, 0x100001d0 }, + Instructions = [0xea1a, 0x2f54, 0x4770, 0xe7fe], + StartRegs = [0x36675cac, 0xd9259257, 0x0b8ab9ad, 0xbfef324e, 0xf9623cd6, 0xfc1919ff, 0x616b25f5, 0x2d26a3d3, 0x61eb12c8, 0xbb8d48f0, 0xbfb9c232, 0x10383506, 0x31d10885, 0xf29cb615, 0x00000000, 0x500001f0 + ], + FinalRegs = [0x36675cac, 0xd9259257, 0x0b8ab9ad, 0xbfef324e, 0xf9623cd6, 0xfc1919ff, 0x616b25f5, 0x2d26a3d3, 0x61eb12c8, 0xbb8d48f0, 0xbfb9c232, 0x10383506, 0x31d10885, 0xf29cb615, 0x00000000, 0x100001d0 + ], }, new() { - Instructions = new ushort[] { 0xea17, 0x1f43, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xf7dce25d, 0xbe296478, 0xe1aee674, 0x0414c126, 0xa258cf11, 0x5347cc5f, 0x6f8ed2c9, 0xed554dbe, 0xd3073560, 0x627dbd64, 0xca8bb3fc, 0x9590e3a9, 0xe4bea6bc, 0x557934a6, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0xf7dce25d, 0xbe296478, 0xe1aee674, 0x0414c126, 0xa258cf11, 0x5347cc5f, 0x6f8ed2c9, 0xed554dbe, 0xd3073560, 0x627dbd64, 0xca8bb3fc, 0x9590e3a9, 0xe4bea6bc, 0x557934a6, 0x00000000, 0x900001d0 }, + Instructions = [0xea17, 0x1f43, 0x4770, 0xe7fe], + StartRegs = [0xf7dce25d, 0xbe296478, 0xe1aee674, 0x0414c126, 0xa258cf11, 0x5347cc5f, 0x6f8ed2c9, 0xed554dbe, 0xd3073560, 0x627dbd64, 0xca8bb3fc, 0x9590e3a9, 0xe4bea6bc, 0x557934a6, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0xf7dce25d, 0xbe296478, 0xe1aee674, 0x0414c126, 0xa258cf11, 0x5347cc5f, 0x6f8ed2c9, 0xed554dbe, 0xd3073560, 0x627dbd64, 0xca8bb3fc, 0x9590e3a9, 0xe4bea6bc, 0x557934a6, 0x00000000, 0x900001d0 + ], }, new() { - Instructions = new ushort[] { 0xea13, 0x1f5b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x84ad5535, 0xc1f15e65, 0x5ea0078b, 0x79df457d, 0x1c735fe5, 0x06dcfd95, 0x6db96dae, 0x572f572d, 0xac88a919, 0x56d850a6, 0xd5ce3a30, 0x2be992e8, 0x497a47ce, 0x38a74019, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0x84ad5535, 0xc1f15e65, 0x5ea0078b, 0x79df457d, 0x1c735fe5, 0x06dcfd95, 0x6db96dae, 0x572f572d, 0xac88a919, 0x56d850a6, 0xd5ce3a30, 0x2be992e8, 0x497a47ce, 0x38a74019, 0x00000000, 0x000001d0 }, + Instructions = [0xea13, 0x1f5b, 0x4770, 0xe7fe], + StartRegs = [0x84ad5535, 0xc1f15e65, 0x5ea0078b, 0x79df457d, 0x1c735fe5, 0x06dcfd95, 0x6db96dae, 0x572f572d, 0xac88a919, 0x56d850a6, 0xd5ce3a30, 0x2be992e8, 0x497a47ce, 0x38a74019, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0x84ad5535, 0xc1f15e65, 0x5ea0078b, 0x79df457d, 0x1c735fe5, 0x06dcfd95, 0x6db96dae, 0x572f572d, 0xac88a919, 0x56d850a6, 0xd5ce3a30, 0x2be992e8, 0x497a47ce, 0x38a74019, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea16, 0x3ff3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xa85ea277, 0x6028643d, 0xa5a85f15, 0x47f0f2a5, 0x9b6eebdb, 0x9f064bc7, 0xab59939f, 0x1a278260, 0xb9f91cfa, 0xf913c49c, 0x2b5c0052, 0x1bf2d6dc, 0x81da80a4, 0xced90006, 0x00000000, 0x000001f0 }, - FinalRegs = new uint[] { 0xa85ea277, 0x6028643d, 0xa5a85f15, 0x47f0f2a5, 0x9b6eebdb, 0x9f064bc7, 0xab59939f, 0x1a278260, 0xb9f91cfa, 0xf913c49c, 0x2b5c0052, 0x1bf2d6dc, 0x81da80a4, 0xced90006, 0x00000000, 0xa00001d0 }, + Instructions = [0xea16, 0x3ff3, 0x4770, 0xe7fe], + StartRegs = [0xa85ea277, 0x6028643d, 0xa5a85f15, 0x47f0f2a5, 0x9b6eebdb, 0x9f064bc7, 0xab59939f, 0x1a278260, 0xb9f91cfa, 0xf913c49c, 0x2b5c0052, 0x1bf2d6dc, 0x81da80a4, 0xced90006, 0x00000000, 0x000001f0 + ], + FinalRegs = [0xa85ea277, 0x6028643d, 0xa5a85f15, 0x47f0f2a5, 0x9b6eebdb, 0x9f064bc7, 0xab59939f, 0x1a278260, 0xb9f91cfa, 0xf913c49c, 0x2b5c0052, 0x1bf2d6dc, 0x81da80a4, 0xced90006, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x3f09, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xdf494128, 0xbc975c16, 0x62c66823, 0x95be3737, 0xa07e8778, 0x6ce80cc7, 0xfea03385, 0x4c5bf35a, 0x5cd0bcdf, 0xc47451ab, 0x3849af70, 0x1329c14a, 0xb1f96f79, 0x321eaf12, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0xdf494128, 0xbc975c16, 0x62c66823, 0x95be3737, 0xa07e8778, 0x6ce80cc7, 0xfea03385, 0x4c5bf35a, 0x5cd0bcdf, 0xc47451ab, 0x3849af70, 0x1329c14a, 0xb1f96f79, 0x321eaf12, 0x00000000, 0x300001d0 }, + Instructions = [0xea14, 0x3f09, 0x4770, 0xe7fe], + StartRegs = [0xdf494128, 0xbc975c16, 0x62c66823, 0x95be3737, 0xa07e8778, 0x6ce80cc7, 0xfea03385, 0x4c5bf35a, 0x5cd0bcdf, 0xc47451ab, 0x3849af70, 0x1329c14a, 0xb1f96f79, 0x321eaf12, 0x00000000, 0x700001f0 + ], + FinalRegs = [0xdf494128, 0xbc975c16, 0x62c66823, 0x95be3737, 0xa07e8778, 0x6ce80cc7, 0xfea03385, 0x4c5bf35a, 0x5cd0bcdf, 0xc47451ab, 0x3849af70, 0x1329c14a, 0xb1f96f79, 0x321eaf12, 0x00000000, 0x300001d0 + ], }, // EOR (reg) new() { - Instructions = new ushort[] { 0xea17, 0x6fc0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x9c803ce5, 0x38e325f9, 0x4d32aea8, 0x0120f77b, 0x8e34b507, 0xee41aabf, 0x7e6d8a0c, 0x761a3f21, 0x99b57f1d, 0x32a4bbf3, 0x9902c1f4, 0xd5e2dd41, 0xe2a08209, 0x2896ceba, 0x00000000, 0xc00001f0 }, - FinalRegs = new uint[] { 0x9c803ce5, 0x38e325f9, 0x4d32aea8, 0x0120f77b, 0x8e34b507, 0xee41aabf, 0x7e6d8a0c, 0x761a3f21, 0x99b57f1d, 0x32a4bbf3, 0x9902c1f4, 0xd5e2dd41, 0xe2a08209, 0x2896ceba, 0x00000000, 0x200001d0 }, + Instructions = [0xea17, 0x6fc0, 0x4770, 0xe7fe], + StartRegs = [0x9c803ce5, 0x38e325f9, 0x4d32aea8, 0x0120f77b, 0x8e34b507, 0xee41aabf, 0x7e6d8a0c, 0x761a3f21, 0x99b57f1d, 0x32a4bbf3, 0x9902c1f4, 0xd5e2dd41, 0xe2a08209, 0x2896ceba, 0x00000000, 0xc00001f0 + ], + FinalRegs = [0x9c803ce5, 0x38e325f9, 0x4d32aea8, 0x0120f77b, 0x8e34b507, 0xee41aabf, 0x7e6d8a0c, 0x761a3f21, 0x99b57f1d, 0x32a4bbf3, 0x9902c1f4, 0xd5e2dd41, 0xe2a08209, 0x2896ceba, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1c, 0x4f58, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xe9c3e9b7, 0x26c9e052, 0x708b6153, 0x72dbdc3c, 0xdd3e922d, 0xd0260aca, 0x38dcf6be, 0x4164575f, 0x5d8e03dc, 0x30bfa694, 0xe72a6609, 0xba632c43, 0x1f768178, 0x6b4f56a6, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0xe9c3e9b7, 0x26c9e052, 0x708b6153, 0x72dbdc3c, 0xdd3e922d, 0xd0260aca, 0x38dcf6be, 0x4164575f, 0x5d8e03dc, 0x30bfa694, 0xe72a6609, 0xba632c43, 0x1f768178, 0x6b4f56a6, 0x00000000, 0x000001d0 }, + Instructions = [0xea1c, 0x4f58, 0x4770, 0xe7fe], + StartRegs = [0xe9c3e9b7, 0x26c9e052, 0x708b6153, 0x72dbdc3c, 0xdd3e922d, 0xd0260aca, 0x38dcf6be, 0x4164575f, 0x5d8e03dc, 0x30bfa694, 0xe72a6609, 0xba632c43, 0x1f768178, 0x6b4f56a6, 0x00000000, 0x600001f0 + ], + FinalRegs = [0xe9c3e9b7, 0x26c9e052, 0x708b6153, 0x72dbdc3c, 0xdd3e922d, 0xd0260aca, 0x38dcf6be, 0x4164575f, 0x5d8e03dc, 0x30bfa694, 0xe72a6609, 0xba632c43, 0x1f768178, 0x6b4f56a6, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea16, 0x7f31, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x9205c1f5, 0x80dd7e44, 0x8ecd5272, 0x3d8d3691, 0x35d45cca, 0x4b2d9eb3, 0xa1652285, 0x6a1cb7f1, 0x8e08b99f, 0xdf8f0c57, 0x28dd0dfa, 0xf2c0abbd, 0x167a6539, 0x75163a9d, 0x00000000, 0xa00001f0 }, - FinalRegs = new uint[] { 0x9205c1f5, 0x80dd7e44, 0x8ecd5272, 0x3d8d3691, 0x35d45cca, 0x4b2d9eb3, 0xa1652285, 0x6a1cb7f1, 0x8e08b99f, 0xdf8f0c57, 0x28dd0dfa, 0xf2c0abbd, 0x167a6539, 0x75163a9d, 0x00000000, 0x000001d0 }, + Instructions = [0xea16, 0x7f31, 0x4770, 0xe7fe], + StartRegs = [0x9205c1f5, 0x80dd7e44, 0x8ecd5272, 0x3d8d3691, 0x35d45cca, 0x4b2d9eb3, 0xa1652285, 0x6a1cb7f1, 0x8e08b99f, 0xdf8f0c57, 0x28dd0dfa, 0xf2c0abbd, 0x167a6539, 0x75163a9d, 0x00000000, 0xa00001f0 + ], + FinalRegs = [0x9205c1f5, 0x80dd7e44, 0x8ecd5272, 0x3d8d3691, 0x35d45cca, 0x4b2d9eb3, 0xa1652285, 0x6a1cb7f1, 0x8e08b99f, 0xdf8f0c57, 0x28dd0dfa, 0xf2c0abbd, 0x167a6539, 0x75163a9d, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x4f80, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x96547d6c, 0x7afda83c, 0xb3edea2d, 0x49d05904, 0xb661ef76, 0xf1cce5ff, 0x2986ab1b, 0xcb39b044, 0x88937ad3, 0x962cf736, 0x80d6f109, 0xb73dd0d6, 0xb93f9f60, 0xb93a02c9, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x96547d6c, 0x7afda83c, 0xb3edea2d, 0x49d05904, 0xb661ef76, 0xf1cce5ff, 0x2986ab1b, 0xcb39b044, 0x88937ad3, 0x962cf736, 0x80d6f109, 0xb73dd0d6, 0xb93f9f60, 0xb93a02c9, 0x00000000, 0xb00001d0 }, + Instructions = [0xea14, 0x4f80, 0x4770, 0xe7fe], + StartRegs = [0x96547d6c, 0x7afda83c, 0xb3edea2d, 0x49d05904, 0xb661ef76, 0xf1cce5ff, 0x2986ab1b, 0xcb39b044, 0x88937ad3, 0x962cf736, 0x80d6f109, 0xb73dd0d6, 0xb93f9f60, 0xb93a02c9, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x96547d6c, 0x7afda83c, 0xb3edea2d, 0x49d05904, 0xb661ef76, 0xf1cce5ff, 0x2986ab1b, 0xcb39b044, 0x88937ad3, 0x962cf736, 0x80d6f109, 0xb73dd0d6, 0xb93f9f60, 0xb93a02c9, 0x00000000, 0xb00001d0 + ], }, new() { - Instructions = new ushort[] { 0xea12, 0x1f35, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xb1a94a51, 0xa8679784, 0xd7558ceb, 0x58d63d95, 0x6e5cf7eb, 0x0d40398d, 0xf88fa339, 0xbe88a56f, 0x7180f980, 0x0795ba21, 0x0732b252, 0xa51be7c8, 0x47c02749, 0xb0fbbd9f, 0x00000000, 0x800001f0 }, - FinalRegs = new uint[] { 0xb1a94a51, 0xa8679784, 0xd7558ceb, 0x58d63d95, 0x6e5cf7eb, 0x0d40398d, 0xf88fa339, 0xbe88a56f, 0x7180f980, 0x0795ba21, 0x0732b252, 0xa51be7c8, 0x47c02749, 0xb0fbbd9f, 0x00000000, 0xa00001d0 }, + Instructions = [0xea12, 0x1f35, 0x4770, 0xe7fe], + StartRegs = [0xb1a94a51, 0xa8679784, 0xd7558ceb, 0x58d63d95, 0x6e5cf7eb, 0x0d40398d, 0xf88fa339, 0xbe88a56f, 0x7180f980, 0x0795ba21, 0x0732b252, 0xa51be7c8, 0x47c02749, 0xb0fbbd9f, 0x00000000, 0x800001f0 + ], + FinalRegs = [0xb1a94a51, 0xa8679784, 0xd7558ceb, 0x58d63d95, 0x6e5cf7eb, 0x0d40398d, 0xf88fa339, 0xbe88a56f, 0x7180f980, 0x0795ba21, 0x0732b252, 0xa51be7c8, 0x47c02749, 0xb0fbbd9f, 0x00000000, 0xa00001d0 + ], }, // CMN (reg) new() { - Instructions = new ushort[] { 0xea1a, 0x4fc5, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xf4440521, 0x26b151d9, 0x90053d26, 0x8c3bbde1, 0x4a757fa1, 0x34b63513, 0xd1d1a182, 0xa9123bc1, 0xadfbf652, 0xec28d3e6, 0x6ca54af1, 0x385d5637, 0x46280bac, 0x18f38d39, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0xf4440521, 0x26b151d9, 0x90053d26, 0x8c3bbde1, 0x4a757fa1, 0x34b63513, 0xd1d1a182, 0xa9123bc1, 0xadfbf652, 0xec28d3e6, 0x6ca54af1, 0x385d5637, 0x46280bac, 0x18f38d39, 0x00000000, 0x200001d0 }, + Instructions = [0xea1a, 0x4fc5, 0x4770, 0xe7fe], + StartRegs = [0xf4440521, 0x26b151d9, 0x90053d26, 0x8c3bbde1, 0x4a757fa1, 0x34b63513, 0xd1d1a182, 0xa9123bc1, 0xadfbf652, 0xec28d3e6, 0x6ca54af1, 0x385d5637, 0x46280bac, 0x18f38d39, 0x00000000, 0x400001f0 + ], + FinalRegs = [0xf4440521, 0x26b151d9, 0x90053d26, 0x8c3bbde1, 0x4a757fa1, 0x34b63513, 0xd1d1a182, 0xa9123bc1, 0xadfbf652, 0xec28d3e6, 0x6ca54af1, 0x385d5637, 0x46280bac, 0x18f38d39, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x4fe4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x20abeba4, 0x77f9bd90, 0x5c09b098, 0xdebadd51, 0x6e114dcf, 0xd8212cf8, 0x2a6a57d2, 0xb9667ed8, 0x93817fef, 0x639cd8b4, 0x52b67bce, 0x681ee61c, 0x50bb5414, 0x9f297765, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0x20abeba4, 0x77f9bd90, 0x5c09b098, 0xdebadd51, 0x6e114dcf, 0xd8212cf8, 0x2a6a57d2, 0xb9667ed8, 0x93817fef, 0x639cd8b4, 0x52b67bce, 0x681ee61c, 0x50bb5414, 0x9f297765, 0x00000000, 0x000001d0 }, + Instructions = [0xea14, 0x4fe4, 0x4770, 0xe7fe], + StartRegs = [0x20abeba4, 0x77f9bd90, 0x5c09b098, 0xdebadd51, 0x6e114dcf, 0xd8212cf8, 0x2a6a57d2, 0xb9667ed8, 0x93817fef, 0x639cd8b4, 0x52b67bce, 0x681ee61c, 0x50bb5414, 0x9f297765, 0x00000000, 0x200001f0 + ], + FinalRegs = [0x20abeba4, 0x77f9bd90, 0x5c09b098, 0xdebadd51, 0x6e114dcf, 0xd8212cf8, 0x2a6a57d2, 0xb9667ed8, 0x93817fef, 0x639cd8b4, 0x52b67bce, 0x681ee61c, 0x50bb5414, 0x9f297765, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1d, 0x6f51, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x12b54404, 0x9ad5df58, 0x8a73af2a, 0xd89dd454, 0x57f5a14b, 0xcee0a06f, 0xb53e67ca, 0x92730368, 0xab12a843, 0x929ae15d, 0xea1e4f49, 0xd7fadfbc, 0x9defdd99, 0xff22c9c8, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0x12b54404, 0x9ad5df58, 0x8a73af2a, 0xd89dd454, 0x57f5a14b, 0xcee0a06f, 0xb53e67ca, 0x92730368, 0xab12a843, 0x929ae15d, 0xea1e4f49, 0xd7fadfbc, 0x9defdd99, 0xff22c9c8, 0x00000000, 0x000001d0 }, + Instructions = [0xea1d, 0x6f51, 0x4770, 0xe7fe], + StartRegs = [0x12b54404, 0x9ad5df58, 0x8a73af2a, 0xd89dd454, 0x57f5a14b, 0xcee0a06f, 0xb53e67ca, 0x92730368, 0xab12a843, 0x929ae15d, 0xea1e4f49, 0xd7fadfbc, 0x9defdd99, 0xff22c9c8, 0x00000000, 0x600001f0 + ], + FinalRegs = [0x12b54404, 0x9ad5df58, 0x8a73af2a, 0xd89dd454, 0x57f5a14b, 0xcee0a06f, 0xb53e67ca, 0x92730368, 0xab12a843, 0x929ae15d, 0xea1e4f49, 0xd7fadfbc, 0x9defdd99, 0xff22c9c8, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea15, 0x5f77, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x64dfdc90, 0xd570bc25, 0xae804ff7, 0x491ad040, 0xfe5f6d58, 0x850c1223, 0x39afac7b, 0xcc5a165a, 0x956a9473, 0x89d3941f, 0x6e520e57, 0x804dca75, 0xbd40cde8, 0xff68c0e7, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0x64dfdc90, 0xd570bc25, 0xae804ff7, 0x491ad040, 0xfe5f6d58, 0x850c1223, 0x39afac7b, 0xcc5a165a, 0x956a9473, 0x89d3941f, 0x6e520e57, 0x804dca75, 0xbd40cde8, 0xff68c0e7, 0x00000000, 0xb00001d0 }, + Instructions = [0xea15, 0x5f77, 0x4770, 0xe7fe], + StartRegs = [0x64dfdc90, 0xd570bc25, 0xae804ff7, 0x491ad040, 0xfe5f6d58, 0x850c1223, 0x39afac7b, 0xcc5a165a, 0x956a9473, 0x89d3941f, 0x6e520e57, 0x804dca75, 0xbd40cde8, 0xff68c0e7, 0x00000000, 0x700001f0 + ], + FinalRegs = [0x64dfdc90, 0xd570bc25, 0xae804ff7, 0x491ad040, 0xfe5f6d58, 0x850c1223, 0x39afac7b, 0xcc5a165a, 0x956a9473, 0x89d3941f, 0x6e520e57, 0x804dca75, 0xbd40cde8, 0xff68c0e7, 0x00000000, 0xb00001d0 + ], }, // ADD (reg) new() { - Instructions = new ushort[] { 0xea1c, 0x4f0b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x8a81d956, 0x65b2b25b, 0x34dd981e, 0x924542f4, 0xeed4b95a, 0x096d832c, 0x8ddcb715, 0x2df1897b, 0x696d0d5c, 0xfa6853c1, 0xcbb52912, 0xe37a3fda, 0x54dd595d, 0x652e5a2b, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0x8a81d956, 0x65b2b25b, 0x34dd981e, 0x924542f4, 0xeed4b95a, 0x096d832c, 0x8ddcb715, 0x2df1897b, 0x696d0d5c, 0xfa6853c1, 0xcbb52912, 0xe37a3fda, 0x54dd595d, 0x652e5a2b, 0x00000000, 0x000001d0 }, + Instructions = [0xea1c, 0x4f0b, 0x4770, 0xe7fe], + StartRegs = [0x8a81d956, 0x65b2b25b, 0x34dd981e, 0x924542f4, 0xeed4b95a, 0x096d832c, 0x8ddcb715, 0x2df1897b, 0x696d0d5c, 0xfa6853c1, 0xcbb52912, 0xe37a3fda, 0x54dd595d, 0x652e5a2b, 0x00000000, 0x600001f0 + ], + FinalRegs = [0x8a81d956, 0x65b2b25b, 0x34dd981e, 0x924542f4, 0xeed4b95a, 0x096d832c, 0x8ddcb715, 0x2df1897b, 0x696d0d5c, 0xfa6853c1, 0xcbb52912, 0xe37a3fda, 0x54dd595d, 0x652e5a2b, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea12, 0x6faa, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x4b774bbf, 0xe1f3168c, 0xfcdf56d4, 0x0a9feca9, 0x8d832cd1, 0x27af5bb2, 0xe7123c8f, 0x5ae971a8, 0x7c86287f, 0x5e69f0a7, 0x43e672d3, 0xb552a0f4, 0xb8b4fc17, 0xa9cc9a9d, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x4b774bbf, 0xe1f3168c, 0xfcdf56d4, 0x0a9feca9, 0x8d832cd1, 0x27af5bb2, 0xe7123c8f, 0x5ae971a8, 0x7c86287f, 0x5e69f0a7, 0x43e672d3, 0xb552a0f4, 0xb8b4fc17, 0xa9cc9a9d, 0x00000000, 0x200001d0 }, + Instructions = [0xea12, 0x6faa, 0x4770, 0xe7fe], + StartRegs = [0x4b774bbf, 0xe1f3168c, 0xfcdf56d4, 0x0a9feca9, 0x8d832cd1, 0x27af5bb2, 0xe7123c8f, 0x5ae971a8, 0x7c86287f, 0x5e69f0a7, 0x43e672d3, 0xb552a0f4, 0xb8b4fc17, 0xa9cc9a9d, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x4b774bbf, 0xe1f3168c, 0xfcdf56d4, 0x0a9feca9, 0x8d832cd1, 0x27af5bb2, 0xe7123c8f, 0x5ae971a8, 0x7c86287f, 0x5e69f0a7, 0x43e672d3, 0xb552a0f4, 0xb8b4fc17, 0xa9cc9a9d, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea18, 0x2f2c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x907613be, 0x807d314f, 0x10328bb5, 0xf3433f78, 0x0fa6c190, 0x473e8ac5, 0x0019b12e, 0xa24d7590, 0x0fdac8d5, 0x24e4feea, 0xf5eadcbf, 0xdfd73f71, 0xee2c8957, 0xaef12e15, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0x907613be, 0x807d314f, 0x10328bb5, 0xf3433f78, 0x0fa6c190, 0x473e8ac5, 0x0019b12e, 0xa24d7590, 0x0fdac8d5, 0x24e4feea, 0xf5eadcbf, 0xdfd73f71, 0xee2c8957, 0xaef12e15, 0x00000000, 0x100001d0 }, + Instructions = [0xea18, 0x2f2c, 0x4770, 0xe7fe], + StartRegs = [0x907613be, 0x807d314f, 0x10328bb5, 0xf3433f78, 0x0fa6c190, 0x473e8ac5, 0x0019b12e, 0xa24d7590, 0x0fdac8d5, 0x24e4feea, 0xf5eadcbf, 0xdfd73f71, 0xee2c8957, 0xaef12e15, 0x00000000, 0x100001f0 + ], + FinalRegs = [0x907613be, 0x807d314f, 0x10328bb5, 0xf3433f78, 0x0fa6c190, 0x473e8ac5, 0x0019b12e, 0xa24d7590, 0x0fdac8d5, 0x24e4feea, 0xf5eadcbf, 0xdfd73f71, 0xee2c8957, 0xaef12e15, 0x00000000, 0x100001d0 + ], }, new() { - Instructions = new ushort[] { 0xea16, 0x3f00, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x2f9a7f7c, 0xc6ad7d01, 0x12b220a4, 0x57b4e83c, 0x2132b566, 0xb4afd045, 0x2b5d39bf, 0xceeecd89, 0x724bff21, 0xb527620e, 0xa9fba943, 0xd2d70658, 0x4e69f57b, 0x55df6b8f, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x2f9a7f7c, 0xc6ad7d01, 0x12b220a4, 0x57b4e83c, 0x2132b566, 0xb4afd045, 0x2b5d39bf, 0xceeecd89, 0x724bff21, 0xb527620e, 0xa9fba943, 0xd2d70658, 0x4e69f57b, 0x55df6b8f, 0x00000000, 0x300001d0 }, + Instructions = [0xea16, 0x3f00, 0x4770, 0xe7fe], + StartRegs = [0x2f9a7f7c, 0xc6ad7d01, 0x12b220a4, 0x57b4e83c, 0x2132b566, 0xb4afd045, 0x2b5d39bf, 0xceeecd89, 0x724bff21, 0xb527620e, 0xa9fba943, 0xd2d70658, 0x4e69f57b, 0x55df6b8f, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x2f9a7f7c, 0xc6ad7d01, 0x12b220a4, 0x57b4e83c, 0x2132b566, 0xb4afd045, 0x2b5d39bf, 0xceeecd89, 0x724bff21, 0xb527620e, 0xa9fba943, 0xd2d70658, 0x4e69f57b, 0x55df6b8f, 0x00000000, 0x300001d0 + ], }, new() { - Instructions = new ushort[] { 0xea16, 0x2fdb, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x854d0c91, 0x895ded29, 0x3e81cd89, 0x9ed269cf, 0x8a7354fa, 0x95cfe79f, 0x07248663, 0x3ec81b86, 0x6f1086e0, 0x51b4c91c, 0xb2d0946b, 0x1b81a616, 0x2b03fe57, 0xfbde03fd, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0x854d0c91, 0x895ded29, 0x3e81cd89, 0x9ed269cf, 0x8a7354fa, 0x95cfe79f, 0x07248663, 0x3ec81b86, 0x6f1086e0, 0x51b4c91c, 0xb2d0946b, 0x1b81a616, 0x2b03fe57, 0xfbde03fd, 0x00000000, 0x300001d0 }, + Instructions = [0xea16, 0x2fdb, 0x4770, 0xe7fe], + StartRegs = [0x854d0c91, 0x895ded29, 0x3e81cd89, 0x9ed269cf, 0x8a7354fa, 0x95cfe79f, 0x07248663, 0x3ec81b86, 0x6f1086e0, 0x51b4c91c, 0xb2d0946b, 0x1b81a616, 0x2b03fe57, 0xfbde03fd, 0x00000000, 0x700001f0 + ], + FinalRegs = [0x854d0c91, 0x895ded29, 0x3e81cd89, 0x9ed269cf, 0x8a7354fa, 0x95cfe79f, 0x07248663, 0x3ec81b86, 0x6f1086e0, 0x51b4c91c, 0xb2d0946b, 0x1b81a616, 0x2b03fe57, 0xfbde03fd, 0x00000000, 0x300001d0 + ], }, // ADC (reg) new() { - Instructions = new ushort[] { 0xea1a, 0x3fe4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x4333cbde, 0xb61e8731, 0x2121c6ec, 0x796ecc75, 0xb570472d, 0x203aa9ea, 0xdad7bf7e, 0x93654919, 0x9e4c4e08, 0x1e352004, 0x104a06d7, 0x6b9a4b8a, 0xa0bcd372, 0x1713789a, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x4333cbde, 0xb61e8731, 0x2121c6ec, 0x796ecc75, 0xb570472d, 0x203aa9ea, 0xdad7bf7e, 0x93654919, 0x9e4c4e08, 0x1e352004, 0x104a06d7, 0x6b9a4b8a, 0xa0bcd372, 0x1713789a, 0x00000000, 0x300001d0 }, + Instructions = [0xea1a, 0x3fe4, 0x4770, 0xe7fe], + StartRegs = [0x4333cbde, 0xb61e8731, 0x2121c6ec, 0x796ecc75, 0xb570472d, 0x203aa9ea, 0xdad7bf7e, 0x93654919, 0x9e4c4e08, 0x1e352004, 0x104a06d7, 0x6b9a4b8a, 0xa0bcd372, 0x1713789a, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x4333cbde, 0xb61e8731, 0x2121c6ec, 0x796ecc75, 0xb570472d, 0x203aa9ea, 0xdad7bf7e, 0x93654919, 0x9e4c4e08, 0x1e352004, 0x104a06d7, 0x6b9a4b8a, 0xa0bcd372, 0x1713789a, 0x00000000, 0x300001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1b, 0x3f40, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xad935c4c, 0x4c7dcbfc, 0x802965ca, 0x1dccd2e8, 0xe960e9e1, 0x3bff0055, 0x204f6a43, 0xe31b010d, 0x33c8f3c5, 0x8e27b912, 0x1351e4a6, 0x90195167, 0xd9112661, 0xee319b51, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0xad935c4c, 0x4c7dcbfc, 0x802965ca, 0x1dccd2e8, 0xe960e9e1, 0x3bff0055, 0x204f6a43, 0xe31b010d, 0x33c8f3c5, 0x8e27b912, 0x1351e4a6, 0x90195167, 0xd9112661, 0xee319b51, 0x00000000, 0x000001d0 }, + Instructions = [0xea1b, 0x3f40, 0x4770, 0xe7fe], + StartRegs = [0xad935c4c, 0x4c7dcbfc, 0x802965ca, 0x1dccd2e8, 0xe960e9e1, 0x3bff0055, 0x204f6a43, 0xe31b010d, 0x33c8f3c5, 0x8e27b912, 0x1351e4a6, 0x90195167, 0xd9112661, 0xee319b51, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0xad935c4c, 0x4c7dcbfc, 0x802965ca, 0x1dccd2e8, 0xe960e9e1, 0x3bff0055, 0x204f6a43, 0xe31b010d, 0x33c8f3c5, 0x8e27b912, 0x1351e4a6, 0x90195167, 0xd9112661, 0xee319b51, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea15, 0x3fe8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x26deb79f, 0x01ac9258, 0x5982ae34, 0x2c3c6df6, 0xabf6a749, 0x319d4b48, 0xce8cca6d, 0xe4b70851, 0x135c049c, 0xd8839d5e, 0xd3171a30, 0xfb09e096, 0x06d67a32, 0x0bab9825, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0x26deb79f, 0x01ac9258, 0x5982ae34, 0x2c3c6df6, 0xabf6a749, 0x319d4b48, 0xce8cca6d, 0xe4b70851, 0x135c049c, 0xd8839d5e, 0xd3171a30, 0xfb09e096, 0x06d67a32, 0x0bab9825, 0x00000000, 0x100001d0 }, + Instructions = [0xea15, 0x3fe8, 0x4770, 0xe7fe], + StartRegs = [0x26deb79f, 0x01ac9258, 0x5982ae34, 0x2c3c6df6, 0xabf6a749, 0x319d4b48, 0xce8cca6d, 0xe4b70851, 0x135c049c, 0xd8839d5e, 0xd3171a30, 0xfb09e096, 0x06d67a32, 0x0bab9825, 0x00000000, 0x100001f0 + ], + FinalRegs = [0x26deb79f, 0x01ac9258, 0x5982ae34, 0x2c3c6df6, 0xabf6a749, 0x319d4b48, 0xce8cca6d, 0xe4b70851, 0x135c049c, 0xd8839d5e, 0xd3171a30, 0xfb09e096, 0x06d67a32, 0x0bab9825, 0x00000000, 0x100001d0 + ], }, new() { - Instructions = new ushort[] { 0xea12, 0x2fec, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd2c9ebca, 0x3ace22dc, 0x41603f45, 0x8cc7e2c2, 0xa160b815, 0xac1e7eb8, 0x57c49232, 0x62547a9b, 0xa18407fd, 0x5c549424, 0xf3eec0e1, 0x4185299f, 0x329a9063, 0x649d9b44, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0xd2c9ebca, 0x3ace22dc, 0x41603f45, 0x8cc7e2c2, 0xa160b815, 0xac1e7eb8, 0x57c49232, 0x62547a9b, 0xa18407fd, 0x5c549424, 0xf3eec0e1, 0x4185299f, 0x329a9063, 0x649d9b44, 0x00000000, 0x100001d0 }, + Instructions = [0xea12, 0x2fec, 0x4770, 0xe7fe], + StartRegs = [0xd2c9ebca, 0x3ace22dc, 0x41603f45, 0x8cc7e2c2, 0xa160b815, 0xac1e7eb8, 0x57c49232, 0x62547a9b, 0xa18407fd, 0x5c549424, 0xf3eec0e1, 0x4185299f, 0x329a9063, 0x649d9b44, 0x00000000, 0x900001f0 + ], + FinalRegs = [0xd2c9ebca, 0x3ace22dc, 0x41603f45, 0x8cc7e2c2, 0xa160b815, 0xac1e7eb8, 0x57c49232, 0x62547a9b, 0xa18407fd, 0x5c549424, 0xf3eec0e1, 0x4185299f, 0x329a9063, 0x649d9b44, 0x00000000, 0x100001d0 + ], }, new() { - Instructions = new ushort[] { 0xea15, 0x2f73, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xf3f8be7b, 0x05e02ec4, 0x78bd9fce, 0x6fb329c8, 0x3094f103, 0x7c93c61d, 0xaade3d9f, 0x381bf77c, 0x738389cd, 0xc68dc0e2, 0x60a06e86, 0x9b717afd, 0x9e51e4eb, 0xf7966699, 0x00000000, 0x500001f0 }, - FinalRegs = new uint[] { 0xf3f8be7b, 0x05e02ec4, 0x78bd9fce, 0x6fb329c8, 0x3094f103, 0x7c93c61d, 0xaade3d9f, 0x381bf77c, 0x738389cd, 0xc68dc0e2, 0x60a06e86, 0x9b717afd, 0x9e51e4eb, 0xf7966699, 0x00000000, 0x300001d0 }, + Instructions = [0xea15, 0x2f73, 0x4770, 0xe7fe], + StartRegs = [0xf3f8be7b, 0x05e02ec4, 0x78bd9fce, 0x6fb329c8, 0x3094f103, 0x7c93c61d, 0xaade3d9f, 0x381bf77c, 0x738389cd, 0xc68dc0e2, 0x60a06e86, 0x9b717afd, 0x9e51e4eb, 0xf7966699, 0x00000000, 0x500001f0 + ], + FinalRegs = [0xf3f8be7b, 0x05e02ec4, 0x78bd9fce, 0x6fb329c8, 0x3094f103, 0x7c93c61d, 0xaade3d9f, 0x381bf77c, 0x738389cd, 0xc68dc0e2, 0x60a06e86, 0x9b717afd, 0x9e51e4eb, 0xf7966699, 0x00000000, 0x300001d0 + ], }, // SBC (reg) new() { - Instructions = new ushort[] { 0xea1d, 0x3faa, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd839dfb1, 0x7cc5425c, 0xc55b5255, 0x37b845aa, 0x59f892d4, 0x7ef8e6ec, 0x3491a7fb, 0x87b88546, 0x72b4c444, 0x24cf48d7, 0x7f530fb7, 0x5b243902, 0x6c39c38f, 0x10e3165c, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0xd839dfb1, 0x7cc5425c, 0xc55b5255, 0x37b845aa, 0x59f892d4, 0x7ef8e6ec, 0x3491a7fb, 0x87b88546, 0x72b4c444, 0x24cf48d7, 0x7f530fb7, 0x5b243902, 0x6c39c38f, 0x10e3165c, 0x00000000, 0x000001d0 }, + Instructions = [0xea1d, 0x3faa, 0x4770, 0xe7fe], + StartRegs = [0xd839dfb1, 0x7cc5425c, 0xc55b5255, 0x37b845aa, 0x59f892d4, 0x7ef8e6ec, 0x3491a7fb, 0x87b88546, 0x72b4c444, 0x24cf48d7, 0x7f530fb7, 0x5b243902, 0x6c39c38f, 0x10e3165c, 0x00000000, 0x200001f0 + ], + FinalRegs = [0xd839dfb1, 0x7cc5425c, 0xc55b5255, 0x37b845aa, 0x59f892d4, 0x7ef8e6ec, 0x3491a7fb, 0x87b88546, 0x72b4c444, 0x24cf48d7, 0x7f530fb7, 0x5b243902, 0x6c39c38f, 0x10e3165c, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea12, 0x1f7d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xcd24aba8, 0x1d7d0523, 0xc150da45, 0x2f7eb96b, 0x9c1ed9af, 0x75056b89, 0x91c818d1, 0x8a07d574, 0x67ff1d4a, 0x6aca4429, 0xc4b5fb7c, 0x21e9ca50, 0xb95cbd15, 0xce3752e7, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0xcd24aba8, 0x1d7d0523, 0xc150da45, 0x2f7eb96b, 0x9c1ed9af, 0x75056b89, 0x91c818d1, 0x8a07d574, 0x67ff1d4a, 0x6aca4429, 0xc4b5fb7c, 0x21e9ca50, 0xb95cbd15, 0xce3752e7, 0x00000000, 0x100001d0 }, + Instructions = [0xea12, 0x1f7d, 0x4770, 0xe7fe], + StartRegs = [0xcd24aba8, 0x1d7d0523, 0xc150da45, 0x2f7eb96b, 0x9c1ed9af, 0x75056b89, 0x91c818d1, 0x8a07d574, 0x67ff1d4a, 0x6aca4429, 0xc4b5fb7c, 0x21e9ca50, 0xb95cbd15, 0xce3752e7, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0xcd24aba8, 0x1d7d0523, 0xc150da45, 0x2f7eb96b, 0x9c1ed9af, 0x75056b89, 0x91c818d1, 0x8a07d574, 0x67ff1d4a, 0x6aca4429, 0xc4b5fb7c, 0x21e9ca50, 0xb95cbd15, 0xce3752e7, 0x00000000, 0x100001d0 + ], }, new() { - Instructions = new ushort[] { 0xea10, 0x2fc2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x401285a0, 0x7ab1e348, 0xf48a2615, 0x46d49913, 0xff5e9911, 0x4b4d7920, 0x8e1f921e, 0x05075455, 0x24e4acea, 0x8652e355, 0x11d0fe46, 0x0cfe7c08, 0xf326adee, 0x7fcde7ac, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0x401285a0, 0x7ab1e348, 0xf48a2615, 0x46d49913, 0xff5e9911, 0x4b4d7920, 0x8e1f921e, 0x05075455, 0x24e4acea, 0x8652e355, 0x11d0fe46, 0x0cfe7c08, 0xf326adee, 0x7fcde7ac, 0x00000000, 0x000001d0 }, + Instructions = [0xea10, 0x2fc2, 0x4770, 0xe7fe], + StartRegs = [0x401285a0, 0x7ab1e348, 0xf48a2615, 0x46d49913, 0xff5e9911, 0x4b4d7920, 0x8e1f921e, 0x05075455, 0x24e4acea, 0x8652e355, 0x11d0fe46, 0x0cfe7c08, 0xf326adee, 0x7fcde7ac, 0x00000000, 0x600001f0 + ], + FinalRegs = [0x401285a0, 0x7ab1e348, 0xf48a2615, 0x46d49913, 0xff5e9911, 0x4b4d7920, 0x8e1f921e, 0x05075455, 0x24e4acea, 0x8652e355, 0x11d0fe46, 0x0cfe7c08, 0xf326adee, 0x7fcde7ac, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea16, 0x3f22, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5bb504b3, 0x3dd293c9, 0x3b2b2d7c, 0x30c2876a, 0x1c99a70e, 0x741294e7, 0xfd5f7315, 0x0149b9db, 0x3975aa1c, 0x9269e207, 0xdc42fd14, 0xea6a1c89, 0xa03e7d65, 0x171c30ad, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0x5bb504b3, 0x3dd293c9, 0x3b2b2d7c, 0x30c2876a, 0x1c99a70e, 0x741294e7, 0xfd5f7315, 0x0149b9db, 0x3975aa1c, 0x9269e207, 0xdc42fd14, 0xea6a1c89, 0xa03e7d65, 0x171c30ad, 0x00000000, 0x200001d0 }, + Instructions = [0xea16, 0x3f22, 0x4770, 0xe7fe], + StartRegs = [0x5bb504b3, 0x3dd293c9, 0x3b2b2d7c, 0x30c2876a, 0x1c99a70e, 0x741294e7, 0xfd5f7315, 0x0149b9db, 0x3975aa1c, 0x9269e207, 0xdc42fd14, 0xea6a1c89, 0xa03e7d65, 0x171c30ad, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0x5bb504b3, 0x3dd293c9, 0x3b2b2d7c, 0x30c2876a, 0x1c99a70e, 0x741294e7, 0xfd5f7315, 0x0149b9db, 0x3975aa1c, 0x9269e207, 0xdc42fd14, 0xea6a1c89, 0xa03e7d65, 0x171c30ad, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1b, 0x1f86, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xe0f5bbe3, 0xd96f3c62, 0x11944b25, 0x372e4b0e, 0x7c956b35, 0x03df46ac, 0x8f11684b, 0x3044502e, 0x6ebf2992, 0x4f3a0366, 0x9f36f014, 0x4c55f6aa, 0x6473e494, 0x8b6310d6, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0xe0f5bbe3, 0xd96f3c62, 0x11944b25, 0x372e4b0e, 0x7c956b35, 0x03df46ac, 0x8f11684b, 0x3044502e, 0x6ebf2992, 0x4f3a0366, 0x9f36f014, 0x4c55f6aa, 0x6473e494, 0x8b6310d6, 0x00000000, 0x200001d0 }, + Instructions = [0xea1b, 0x1f86, 0x4770, 0xe7fe], + StartRegs = [0xe0f5bbe3, 0xd96f3c62, 0x11944b25, 0x372e4b0e, 0x7c956b35, 0x03df46ac, 0x8f11684b, 0x3044502e, 0x6ebf2992, 0x4f3a0366, 0x9f36f014, 0x4c55f6aa, 0x6473e494, 0x8b6310d6, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0xe0f5bbe3, 0xd96f3c62, 0x11944b25, 0x372e4b0e, 0x7c956b35, 0x03df46ac, 0x8f11684b, 0x3044502e, 0x6ebf2992, 0x4f3a0366, 0x9f36f014, 0x4c55f6aa, 0x6473e494, 0x8b6310d6, 0x00000000, 0x200001d0 + ], }, // CMP (reg) new() { - Instructions = new ushort[] { 0xea14, 0x6f45, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xe72e848a, 0x97499b66, 0xcde944bc, 0xf6a7e4e1, 0xd8860029, 0xc55c7e43, 0x58dc13d7, 0x5e1cf6ac, 0x8094a819, 0xdba64363, 0xd8f5423f, 0x6ae843f0, 0x69766600, 0x2814e4e6, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0xe72e848a, 0x97499b66, 0xcde944bc, 0xf6a7e4e1, 0xd8860029, 0xc55c7e43, 0x58dc13d7, 0x5e1cf6ac, 0x8094a819, 0xdba64363, 0xd8f5423f, 0x6ae843f0, 0x69766600, 0x2814e4e6, 0x00000000, 0x800001d0 }, + Instructions = [0xea14, 0x6f45, 0x4770, 0xe7fe], + StartRegs = [0xe72e848a, 0x97499b66, 0xcde944bc, 0xf6a7e4e1, 0xd8860029, 0xc55c7e43, 0x58dc13d7, 0x5e1cf6ac, 0x8094a819, 0xdba64363, 0xd8f5423f, 0x6ae843f0, 0x69766600, 0x2814e4e6, 0x00000000, 0x600001f0 + ], + FinalRegs = [0xe72e848a, 0x97499b66, 0xcde944bc, 0xf6a7e4e1, 0xd8860029, 0xc55c7e43, 0x58dc13d7, 0x5e1cf6ac, 0x8094a819, 0xdba64363, 0xd8f5423f, 0x6ae843f0, 0x69766600, 0x2814e4e6, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x7fd8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x323e5ef9, 0x46e23bdf, 0x8d69d89a, 0x9ffddd37, 0x53f4a07b, 0xe923f9bb, 0x5ea62678, 0x1709127c, 0xc0c20492, 0x0ee47a0c, 0xe137cc2e, 0x7d72db37, 0xca9eb971, 0x4447b224, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0x323e5ef9, 0x46e23bdf, 0x8d69d89a, 0x9ffddd37, 0x53f4a07b, 0xe923f9bb, 0x5ea62678, 0x1709127c, 0xc0c20492, 0x0ee47a0c, 0xe137cc2e, 0x7d72db37, 0xca9eb971, 0x4447b224, 0x00000000, 0x200001d0 }, + Instructions = [0xea14, 0x7fd8, 0x4770, 0xe7fe], + StartRegs = [0x323e5ef9, 0x46e23bdf, 0x8d69d89a, 0x9ffddd37, 0x53f4a07b, 0xe923f9bb, 0x5ea62678, 0x1709127c, 0xc0c20492, 0x0ee47a0c, 0xe137cc2e, 0x7d72db37, 0xca9eb971, 0x4447b224, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0x323e5ef9, 0x46e23bdf, 0x8d69d89a, 0x9ffddd37, 0x53f4a07b, 0xe923f9bb, 0x5ea62678, 0x1709127c, 0xc0c20492, 0x0ee47a0c, 0xe137cc2e, 0x7d72db37, 0xca9eb971, 0x4447b224, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea10, 0x3f43, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x4cce7ac7, 0x03055e03, 0x479ec669, 0x8b1d9783, 0xa59509e1, 0xa46866ef, 0x654578c4, 0x700e322b, 0xa4191329, 0xb1b8479a, 0xe555a2ce, 0x1ef22472, 0xd41fb2ae, 0x2d794684, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0x4cce7ac7, 0x03055e03, 0x479ec669, 0x8b1d9783, 0xa59509e1, 0xa46866ef, 0x654578c4, 0x700e322b, 0xa4191329, 0xb1b8479a, 0xe555a2ce, 0x1ef22472, 0xd41fb2ae, 0x2d794684, 0x00000000, 0x200001d0 }, + Instructions = [0xea10, 0x3f43, 0x4770, 0xe7fe], + StartRegs = [0x4cce7ac7, 0x03055e03, 0x479ec669, 0x8b1d9783, 0xa59509e1, 0xa46866ef, 0x654578c4, 0x700e322b, 0xa4191329, 0xb1b8479a, 0xe555a2ce, 0x1ef22472, 0xd41fb2ae, 0x2d794684, 0x00000000, 0x200001f0 + ], + FinalRegs = [0x4cce7ac7, 0x03055e03, 0x479ec669, 0x8b1d9783, 0xa59509e1, 0xa46866ef, 0x654578c4, 0x700e322b, 0xa4191329, 0xb1b8479a, 0xe555a2ce, 0x1ef22472, 0xd41fb2ae, 0x2d794684, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea18, 0x7fd2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xeecfbfb2, 0xbe6288fd, 0x34c0fc94, 0x3a01b105, 0xe7dc6252, 0xc05813fa, 0x6613d82d, 0x90dc7a0c, 0x34637299, 0x58f6d0e7, 0xb151d65e, 0xca975eca, 0xf83b6533, 0x10177f01, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0xeecfbfb2, 0xbe6288fd, 0x34c0fc94, 0x3a01b105, 0xe7dc6252, 0xc05813fa, 0x6613d82d, 0x90dc7a0c, 0x34637299, 0x58f6d0e7, 0xb151d65e, 0xca975eca, 0xf83b6533, 0x10177f01, 0x00000000, 0x400001d0 }, + Instructions = [0xea18, 0x7fd2, 0x4770, 0xe7fe], + StartRegs = [0xeecfbfb2, 0xbe6288fd, 0x34c0fc94, 0x3a01b105, 0xe7dc6252, 0xc05813fa, 0x6613d82d, 0x90dc7a0c, 0x34637299, 0x58f6d0e7, 0xb151d65e, 0xca975eca, 0xf83b6533, 0x10177f01, 0x00000000, 0x600001f0 + ], + FinalRegs = [0xeecfbfb2, 0xbe6288fd, 0x34c0fc94, 0x3a01b105, 0xe7dc6252, 0xc05813fa, 0x6613d82d, 0x90dc7a0c, 0x34637299, 0x58f6d0e7, 0xb151d65e, 0xca975eca, 0xf83b6533, 0x10177f01, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x2f6e, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x54dcd0c5, 0x629131da, 0xc4010f0b, 0xf28a7f0f, 0x866d92a3, 0xbb9a1b32, 0xc8c7f425, 0x8d13d61f, 0x1f9a5d13, 0x83e0b2b7, 0x7ef44e14, 0x24c291a3, 0x851cc882, 0x31a056cb, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x54dcd0c5, 0x629131da, 0xc4010f0b, 0xf28a7f0f, 0x866d92a3, 0xbb9a1b32, 0xc8c7f425, 0x8d13d61f, 0x1f9a5d13, 0x83e0b2b7, 0x7ef44e14, 0x24c291a3, 0x851cc882, 0x31a056cb, 0x00000000, 0x500001d0 }, + Instructions = [0xea14, 0x2f6e, 0x4770, 0xe7fe], + StartRegs = [0x54dcd0c5, 0x629131da, 0xc4010f0b, 0xf28a7f0f, 0x866d92a3, 0xbb9a1b32, 0xc8c7f425, 0x8d13d61f, 0x1f9a5d13, 0x83e0b2b7, 0x7ef44e14, 0x24c291a3, 0x851cc882, 0x31a056cb, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x54dcd0c5, 0x629131da, 0xc4010f0b, 0xf28a7f0f, 0x866d92a3, 0xbb9a1b32, 0xc8c7f425, 0x8d13d61f, 0x1f9a5d13, 0x83e0b2b7, 0x7ef44e14, 0x24c291a3, 0x851cc882, 0x31a056cb, 0x00000000, 0x500001d0 + ], }, // SUB (reg) new() { - Instructions = new ushort[] { 0xea1a, 0x6f56, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xf997cd9f, 0xf94c5bd7, 0x5411a289, 0x21311b8f, 0xee8a1fe4, 0x73808b62, 0x4daadf68, 0x14a1c57c, 0x92d98c4c, 0x31f999c9, 0x953b94b9, 0x108acc75, 0xcc38ea73, 0x5dc27e61, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0xf997cd9f, 0xf94c5bd7, 0x5411a289, 0x21311b8f, 0xee8a1fe4, 0x73808b62, 0x4daadf68, 0x14a1c57c, 0x92d98c4c, 0x31f999c9, 0x953b94b9, 0x108acc75, 0xcc38ea73, 0x5dc27e61, 0x00000000, 0x200001d0 }, + Instructions = [0xea1a, 0x6f56, 0x4770, 0xe7fe], + StartRegs = [0xf997cd9f, 0xf94c5bd7, 0x5411a289, 0x21311b8f, 0xee8a1fe4, 0x73808b62, 0x4daadf68, 0x14a1c57c, 0x92d98c4c, 0x31f999c9, 0x953b94b9, 0x108acc75, 0xcc38ea73, 0x5dc27e61, 0x00000000, 0x600001f0 + ], + FinalRegs = [0xf997cd9f, 0xf94c5bd7, 0x5411a289, 0x21311b8f, 0xee8a1fe4, 0x73808b62, 0x4daadf68, 0x14a1c57c, 0x92d98c4c, 0x31f999c9, 0x953b94b9, 0x108acc75, 0xcc38ea73, 0x5dc27e61, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea19, 0x0f94, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5f8de6f4, 0x09e82020, 0x480dc701, 0xd3303ca3, 0x8739e87a, 0x3da0b6d2, 0x10093787, 0xd30606fc, 0xd81d45da, 0xa66f5e86, 0xd8ddf48e, 0xa8321bd1, 0x62a75c1c, 0x3cffac30, 0x00000000, 0x800001f0 }, - FinalRegs = new uint[] { 0x5f8de6f4, 0x09e82020, 0x480dc701, 0xd3303ca3, 0x8739e87a, 0x3da0b6d2, 0x10093787, 0xd30606fc, 0xd81d45da, 0xa66f5e86, 0xd8ddf48e, 0xa8321bd1, 0x62a75c1c, 0x3cffac30, 0x00000000, 0x200001d0 }, + Instructions = [0xea19, 0x0f94, 0x4770, 0xe7fe], + StartRegs = [0x5f8de6f4, 0x09e82020, 0x480dc701, 0xd3303ca3, 0x8739e87a, 0x3da0b6d2, 0x10093787, 0xd30606fc, 0xd81d45da, 0xa66f5e86, 0xd8ddf48e, 0xa8321bd1, 0x62a75c1c, 0x3cffac30, 0x00000000, 0x800001f0 + ], + FinalRegs = [0x5f8de6f4, 0x09e82020, 0x480dc701, 0xd3303ca3, 0x8739e87a, 0x3da0b6d2, 0x10093787, 0xd30606fc, 0xd81d45da, 0xa66f5e86, 0xd8ddf48e, 0xa8321bd1, 0x62a75c1c, 0x3cffac30, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea14, 0x7fc6, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x001f39cf, 0x76b925c8, 0x292b283a, 0x9d142282, 0x2cda04fa, 0x87f29de5, 0x9e9a98e4, 0x9d48ddbb, 0x9ea329fd, 0x653f2346, 0xfc116785, 0x6e565e16, 0x9a7f8c11, 0x46f1ecbb, 0x00000000, 0xd00001f0 }, - FinalRegs = new uint[] { 0x001f39cf, 0x76b925c8, 0x292b283a, 0x9d142282, 0x2cda04fa, 0x87f29de5, 0x9e9a98e4, 0x9d48ddbb, 0x9ea329fd, 0x653f2346, 0xfc116785, 0x6e565e16, 0x9a7f8c11, 0x46f1ecbb, 0x00000000, 0x500001d0 }, + Instructions = [0xea14, 0x7fc6, 0x4770, 0xe7fe], + StartRegs = [0x001f39cf, 0x76b925c8, 0x292b283a, 0x9d142282, 0x2cda04fa, 0x87f29de5, 0x9e9a98e4, 0x9d48ddbb, 0x9ea329fd, 0x653f2346, 0xfc116785, 0x6e565e16, 0x9a7f8c11, 0x46f1ecbb, 0x00000000, 0xd00001f0 + ], + FinalRegs = [0x001f39cf, 0x76b925c8, 0x292b283a, 0x9d142282, 0x2cda04fa, 0x87f29de5, 0x9e9a98e4, 0x9d48ddbb, 0x9ea329fd, 0x653f2346, 0xfc116785, 0x6e565e16, 0x9a7f8c11, 0x46f1ecbb, 0x00000000, 0x500001d0 + ], }, new() { - Instructions = new ushort[] { 0xea19, 0x5fa5, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xfb6a4a50, 0xd074ee0e, 0x599131ef, 0x5db48236, 0xf287fcd1, 0xadea3b9f, 0xf2529f30, 0x6717a5af, 0xe1a3bc40, 0xd92e291b, 0x9b0337eb, 0xcab803ed, 0x255dd8a9, 0xea0e7824, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0xfb6a4a50, 0xd074ee0e, 0x599131ef, 0x5db48236, 0xf287fcd1, 0xadea3b9f, 0xf2529f30, 0x6717a5af, 0xe1a3bc40, 0xd92e291b, 0x9b0337eb, 0xcab803ed, 0x255dd8a9, 0xea0e7824, 0x00000000, 0xb00001d0 }, + Instructions = [0xea19, 0x5fa5, 0x4770, 0xe7fe], + StartRegs = [0xfb6a4a50, 0xd074ee0e, 0x599131ef, 0x5db48236, 0xf287fcd1, 0xadea3b9f, 0xf2529f30, 0x6717a5af, 0xe1a3bc40, 0xd92e291b, 0x9b0337eb, 0xcab803ed, 0x255dd8a9, 0xea0e7824, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0xfb6a4a50, 0xd074ee0e, 0x599131ef, 0x5db48236, 0xf287fcd1, 0xadea3b9f, 0xf2529f30, 0x6717a5af, 0xe1a3bc40, 0xd92e291b, 0x9b0337eb, 0xcab803ed, 0x255dd8a9, 0xea0e7824, 0x00000000, 0xb00001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1c, 0x6f86, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3a000492, 0xc16be6fa, 0x20053393, 0x597617c9, 0xc30c0ac0, 0x0ed34739, 0xf964a3d4, 0x4dcf9b40, 0x93109692, 0x7ed22040, 0x1f57a26e, 0x008d29d2, 0x99b2dae8, 0xe8a14948, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0x3a000492, 0xc16be6fa, 0x20053393, 0x597617c9, 0xc30c0ac0, 0x0ed34739, 0xf964a3d4, 0x4dcf9b40, 0x93109692, 0x7ed22040, 0x1f57a26e, 0x008d29d2, 0x99b2dae8, 0xe8a14948, 0x00000000, 0x200001d0 }, + Instructions = [0xea1c, 0x6f86, 0x4770, 0xe7fe], + StartRegs = [0x3a000492, 0xc16be6fa, 0x20053393, 0x597617c9, 0xc30c0ac0, 0x0ed34739, 0xf964a3d4, 0x4dcf9b40, 0x93109692, 0x7ed22040, 0x1f57a26e, 0x008d29d2, 0x99b2dae8, 0xe8a14948, 0x00000000, 0x200001f0 + ], + FinalRegs = [0x3a000492, 0xc16be6fa, 0x20053393, 0x597617c9, 0xc30c0ac0, 0x0ed34739, 0xf964a3d4, 0x4dcf9b40, 0x93109692, 0x7ed22040, 0x1f57a26e, 0x008d29d2, 0x99b2dae8, 0xe8a14948, 0x00000000, 0x200001d0 + ], }, // RSB (reg) new() { - Instructions = new ushort[] { 0xea1a, 0x6f72, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x9a603e20, 0x10004fe3, 0x8c33bcef, 0x8a23db09, 0x47244c0c, 0x53417661, 0x6486ac8b, 0x5276c43b, 0x577f49a7, 0x34542492, 0xb4ac7c99, 0x5de5cb55, 0x8f6e1d72, 0x077d4a02, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0x9a603e20, 0x10004fe3, 0x8c33bcef, 0x8a23db09, 0x47244c0c, 0x53417661, 0x6486ac8b, 0x5276c43b, 0x577f49a7, 0x34542492, 0xb4ac7c99, 0x5de5cb55, 0x8f6e1d72, 0x077d4a02, 0x00000000, 0x000001d0 }, + Instructions = [0xea1a, 0x6f72, 0x4770, 0xe7fe], + StartRegs = [0x9a603e20, 0x10004fe3, 0x8c33bcef, 0x8a23db09, 0x47244c0c, 0x53417661, 0x6486ac8b, 0x5276c43b, 0x577f49a7, 0x34542492, 0xb4ac7c99, 0x5de5cb55, 0x8f6e1d72, 0x077d4a02, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0x9a603e20, 0x10004fe3, 0x8c33bcef, 0x8a23db09, 0x47244c0c, 0x53417661, 0x6486ac8b, 0x5276c43b, 0x577f49a7, 0x34542492, 0xb4ac7c99, 0x5de5cb55, 0x8f6e1d72, 0x077d4a02, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1b, 0x0ff3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6fdd73d7, 0xc6c4c438, 0x772312e2, 0xa57de93f, 0xa1edd64b, 0x8ee41d33, 0x85849a41, 0xac34953a, 0xb3d7c6b5, 0x439ceff1, 0xa3096172, 0x5d8f0654, 0x2e2993a3, 0xca221149, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x6fdd73d7, 0xc6c4c438, 0x772312e2, 0xa57de93f, 0xa1edd64b, 0x8ee41d33, 0x85849a41, 0xac34953a, 0xb3d7c6b5, 0x439ceff1, 0xa3096172, 0x5d8f0654, 0x2e2993a3, 0xca221149, 0x00000000, 0x200001d0 }, + Instructions = [0xea1b, 0x0ff3, 0x4770, 0xe7fe], + StartRegs = [0x6fdd73d7, 0xc6c4c438, 0x772312e2, 0xa57de93f, 0xa1edd64b, 0x8ee41d33, 0x85849a41, 0xac34953a, 0xb3d7c6b5, 0x439ceff1, 0xa3096172, 0x5d8f0654, 0x2e2993a3, 0xca221149, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x6fdd73d7, 0xc6c4c438, 0x772312e2, 0xa57de93f, 0xa1edd64b, 0x8ee41d33, 0x85849a41, 0xac34953a, 0xb3d7c6b5, 0x439ceff1, 0xa3096172, 0x5d8f0654, 0x2e2993a3, 0xca221149, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1b, 0x1f34, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xbefd78a5, 0x6d071150, 0xe9ce2c88, 0x2251ed54, 0x30610b17, 0x6428697e, 0xf6e940a4, 0x2395634f, 0xdabff1a3, 0x89988d57, 0x85dd20b0, 0x2ca1311d, 0xcd0748d9, 0xedf55a6f, 0x00000000, 0x800001f0 }, - FinalRegs = new uint[] { 0xbefd78a5, 0x6d071150, 0xe9ce2c88, 0x2251ed54, 0x30610b17, 0x6428697e, 0xf6e940a4, 0x2395634f, 0xdabff1a3, 0x89988d57, 0x85dd20b0, 0x2ca1311d, 0xcd0748d9, 0xedf55a6f, 0x00000000, 0x000001d0 }, + Instructions = [0xea1b, 0x1f34, 0x4770, 0xe7fe], + StartRegs = [0xbefd78a5, 0x6d071150, 0xe9ce2c88, 0x2251ed54, 0x30610b17, 0x6428697e, 0xf6e940a4, 0x2395634f, 0xdabff1a3, 0x89988d57, 0x85dd20b0, 0x2ca1311d, 0xcd0748d9, 0xedf55a6f, 0x00000000, 0x800001f0 + ], + FinalRegs = [0xbefd78a5, 0x6d071150, 0xe9ce2c88, 0x2251ed54, 0x30610b17, 0x6428697e, 0xf6e940a4, 0x2395634f, 0xdabff1a3, 0x89988d57, 0x85dd20b0, 0x2ca1311d, 0xcd0748d9, 0xedf55a6f, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xea16, 0x5f83, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x57018e40, 0xc4027d19, 0x33a32bd7, 0x6a75787a, 0x18f8569a, 0xbbf3a50d, 0x7f35656f, 0x66fbdad7, 0x3aa48c57, 0x39709ea2, 0x5972e4ba, 0xb2c2c772, 0x52f35620, 0x7ef9f1d6, 0x00000000, 0xd00001f0 }, - FinalRegs = new uint[] { 0x57018e40, 0xc4027d19, 0x33a32bd7, 0x6a75787a, 0x18f8569a, 0xbbf3a50d, 0x7f35656f, 0x66fbdad7, 0x3aa48c57, 0x39709ea2, 0x5972e4ba, 0xb2c2c772, 0x52f35620, 0x7ef9f1d6, 0x00000000, 0x100001d0 }, + Instructions = [0xea16, 0x5f83, 0x4770, 0xe7fe], + StartRegs = [0x57018e40, 0xc4027d19, 0x33a32bd7, 0x6a75787a, 0x18f8569a, 0xbbf3a50d, 0x7f35656f, 0x66fbdad7, 0x3aa48c57, 0x39709ea2, 0x5972e4ba, 0xb2c2c772, 0x52f35620, 0x7ef9f1d6, 0x00000000, 0xd00001f0 + ], + FinalRegs = [0x57018e40, 0xc4027d19, 0x33a32bd7, 0x6a75787a, 0x18f8569a, 0xbbf3a50d, 0x7f35656f, 0x66fbdad7, 0x3aa48c57, 0x39709ea2, 0x5972e4ba, 0xb2c2c772, 0x52f35620, 0x7ef9f1d6, 0x00000000, 0x100001d0 + ], }, new() { - Instructions = new ushort[] { 0xea1a, 0x0fd8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x79108ff6, 0x0cb1e662, 0x9eb9ffed, 0x1ee4d3de, 0x7a8fa20a, 0x1db7e216, 0x6fc42752, 0x9cb6cdad, 0xa497a582, 0x654c446f, 0xcbb31efc, 0x601e6995, 0xe328af35, 0x824026e7, 0x00000000, 0xd00001f0 }, - FinalRegs = new uint[] { 0x79108ff6, 0x0cb1e662, 0x9eb9ffed, 0x1ee4d3de, 0x7a8fa20a, 0x1db7e216, 0x6fc42752, 0x9cb6cdad, 0xa497a582, 0x654c446f, 0xcbb31efc, 0x601e6995, 0xe328af35, 0x824026e7, 0x00000000, 0x100001d0 }, - }, - }; + Instructions = [0xea1a, 0x0fd8, 0x4770, 0xe7fe], + StartRegs = [0x79108ff6, 0x0cb1e662, 0x9eb9ffed, 0x1ee4d3de, 0x7a8fa20a, 0x1db7e216, 0x6fc42752, 0x9cb6cdad, 0xa497a582, 0x654c446f, 0xcbb31efc, 0x601e6995, 0xe328af35, 0x824026e7, 0x00000000, 0xd00001f0 + ], + FinalRegs = [0x79108ff6, 0x0cb1e662, 0x9eb9ffed, 0x1ee4d3de, 0x7a8fa20a, 0x1db7e216, 0x6fc42752, 0x9cb6cdad, 0xa497a582, 0x654c446f, 0xcbb31efc, 0x601e6995, 0xe328af35, 0x824026e7, 0x00000000, 0x100001d0 + ], + } + ]; public static readonly PrecomputedThumbTestCase[] ImmTestCases = - { + [ // TST (imm) new() { - Instructions = new ushort[] { 0xf018, 0x0fd4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xf5a1b919, 0x37ee0ad4, 0xec1bbb30, 0x8345ecb1, 0xf733e93e, 0x76668927, 0xa9b16176, 0x34b9678e, 0xa6167f8b, 0xea4f20a9, 0x45345e75, 0xc8a2ea55, 0xae108472, 0x67b5e3a4, 0x00000001, 0xb00001f0 }, - FinalRegs = new uint[] { 0xf5a1b919, 0x37ee0ad4, 0xec1bbb30, 0x8345ecb1, 0xf733e93e, 0x76668927, 0xa9b16176, 0x34b9678e, 0xa6167f8b, 0xea4f20a9, 0x45345e75, 0xc8a2ea55, 0xae108472, 0x67b5e3a4, 0x00000001, 0x300001f0 }, + Instructions = [0xf018, 0x0fd4, 0x4770, 0xe7fe], + StartRegs = [0xf5a1b919, 0x37ee0ad4, 0xec1bbb30, 0x8345ecb1, 0xf733e93e, 0x76668927, 0xa9b16176, 0x34b9678e, 0xa6167f8b, 0xea4f20a9, 0x45345e75, 0xc8a2ea55, 0xae108472, 0x67b5e3a4, 0x00000001, 0xb00001f0 + ], + FinalRegs = [0xf5a1b919, 0x37ee0ad4, 0xec1bbb30, 0x8345ecb1, 0xf733e93e, 0x76668927, 0xa9b16176, 0x34b9678e, 0xa6167f8b, 0xea4f20a9, 0x45345e75, 0xc8a2ea55, 0xae108472, 0x67b5e3a4, 0x00000001, 0x300001f0 + ], }, new() { - Instructions = new ushort[] { 0xf41b, 0x1fff, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xfc928b9b, 0xeff1f0a6, 0xe1cd22ba, 0xef1e4a75, 0x10779ef3, 0x3b003004, 0x7a532842, 0x2e71a8c4, 0x62b71ce6, 0x5ffcf3ce, 0xdbe8efa1, 0x86822f2b, 0x560da6b6, 0x46550850, 0x00000001, 0x700001f0 }, - FinalRegs = new uint[] { 0xfc928b9b, 0xeff1f0a6, 0xe1cd22ba, 0xef1e4a75, 0x10779ef3, 0x3b003004, 0x7a532842, 0x2e71a8c4, 0x62b71ce6, 0x5ffcf3ce, 0xdbe8efa1, 0x86822f2b, 0x560da6b6, 0x46550850, 0x00000001, 0x100001f0 }, + Instructions = [0xf41b, 0x1fff, 0x4770, 0xe7fe], + StartRegs = [0xfc928b9b, 0xeff1f0a6, 0xe1cd22ba, 0xef1e4a75, 0x10779ef3, 0x3b003004, 0x7a532842, 0x2e71a8c4, 0x62b71ce6, 0x5ffcf3ce, 0xdbe8efa1, 0x86822f2b, 0x560da6b6, 0x46550850, 0x00000001, 0x700001f0 + ], + FinalRegs = [0xfc928b9b, 0xeff1f0a6, 0xe1cd22ba, 0xef1e4a75, 0x10779ef3, 0x3b003004, 0x7a532842, 0x2e71a8c4, 0x62b71ce6, 0x5ffcf3ce, 0xdbe8efa1, 0x86822f2b, 0x560da6b6, 0x46550850, 0x00000001, 0x100001f0 + ], }, new() { - Instructions = new ushort[] { 0xf416, 0x7f97, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd0ba5d0a, 0xc8fa5c53, 0xac3069cb, 0x4be76d89, 0xcc9b4f47, 0x36984914, 0xd49fe0a5, 0x7d80c756, 0x8210fb6d, 0xcb498541, 0xc366597f, 0xacef4405, 0xdf6341a9, 0x6a1124b8, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0xd0ba5d0a, 0xc8fa5c53, 0xac3069cb, 0x4be76d89, 0xcc9b4f47, 0x36984914, 0xd49fe0a5, 0x7d80c756, 0x8210fb6d, 0xcb498541, 0xc366597f, 0xacef4405, 0xdf6341a9, 0x6a1124b8, 0x00000001, 0x000001f0 }, + Instructions = [0xf416, 0x7f97, 0x4770, 0xe7fe], + StartRegs = [0xd0ba5d0a, 0xc8fa5c53, 0xac3069cb, 0x4be76d89, 0xcc9b4f47, 0x36984914, 0xd49fe0a5, 0x7d80c756, 0x8210fb6d, 0xcb498541, 0xc366597f, 0xacef4405, 0xdf6341a9, 0x6a1124b8, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0xd0ba5d0a, 0xc8fa5c53, 0xac3069cb, 0x4be76d89, 0xcc9b4f47, 0x36984914, 0xd49fe0a5, 0x7d80c756, 0x8210fb6d, 0xcb498541, 0xc366597f, 0xacef4405, 0xdf6341a9, 0x6a1124b8, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf016, 0x0f12, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xb8568ac2, 0x67a7ee09, 0x266abe3b, 0x9d93101d, 0x504b4adb, 0x45838822, 0x62126cc4, 0xf4198159, 0xf24a524c, 0x163fa3e9, 0x3c6d489e, 0xacef0dff, 0x73fc8fdd, 0x9d34fc09, 0x00000001, 0x800001f0 }, - FinalRegs = new uint[] { 0xb8568ac2, 0x67a7ee09, 0x266abe3b, 0x9d93101d, 0x504b4adb, 0x45838822, 0x62126cc4, 0xf4198159, 0xf24a524c, 0x163fa3e9, 0x3c6d489e, 0xacef0dff, 0x73fc8fdd, 0x9d34fc09, 0x00000001, 0x400001f0 }, + Instructions = [0xf016, 0x0f12, 0x4770, 0xe7fe], + StartRegs = [0xb8568ac2, 0x67a7ee09, 0x266abe3b, 0x9d93101d, 0x504b4adb, 0x45838822, 0x62126cc4, 0xf4198159, 0xf24a524c, 0x163fa3e9, 0x3c6d489e, 0xacef0dff, 0x73fc8fdd, 0x9d34fc09, 0x00000001, 0x800001f0 + ], + FinalRegs = [0xb8568ac2, 0x67a7ee09, 0x266abe3b, 0x9d93101d, 0x504b4adb, 0x45838822, 0x62126cc4, 0xf4198159, 0xf24a524c, 0x163fa3e9, 0x3c6d489e, 0xacef0dff, 0x73fc8fdd, 0x9d34fc09, 0x00000001, 0x400001f0 + ], }, new() { - Instructions = new ushort[] { 0xf017, 0x2fd1, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5548cee0, 0x59a88eb4, 0x3624d775, 0x98fe9a19, 0x84d1b83f, 0xed2c476a, 0x046a6aea, 0x0c92fadb, 0xdff5abe1, 0x91a16e82, 0xbb0f8ba4, 0x87c1888c, 0xa2df958e, 0x6cebba03, 0x00000001, 0x400001f0 }, - FinalRegs = new uint[] { 0x5548cee0, 0x59a88eb4, 0x3624d775, 0x98fe9a19, 0x84d1b83f, 0xed2c476a, 0x046a6aea, 0x0c92fadb, 0xdff5abe1, 0x91a16e82, 0xbb0f8ba4, 0x87c1888c, 0xa2df958e, 0x6cebba03, 0x00000001, 0x000001f0 }, + Instructions = [0xf017, 0x2fd1, 0x4770, 0xe7fe], + StartRegs = [0x5548cee0, 0x59a88eb4, 0x3624d775, 0x98fe9a19, 0x84d1b83f, 0xed2c476a, 0x046a6aea, 0x0c92fadb, 0xdff5abe1, 0x91a16e82, 0xbb0f8ba4, 0x87c1888c, 0xa2df958e, 0x6cebba03, 0x00000001, 0x400001f0 + ], + FinalRegs = [0x5548cee0, 0x59a88eb4, 0x3624d775, 0x98fe9a19, 0x84d1b83f, 0xed2c476a, 0x046a6aea, 0x0c92fadb, 0xdff5abe1, 0x91a16e82, 0xbb0f8ba4, 0x87c1888c, 0xa2df958e, 0x6cebba03, 0x00000001, 0x000001f0 + ], }, // AND (imm) new() { - Instructions = new ushort[] { 0xf403, 0x3ce5, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xddd90378, 0xc3a2891f, 0x3d5007a2, 0x0f0c0756, 0xbdc5c113, 0xeee78000, 0x90693126, 0x8763b349, 0xbf6814b4, 0x40160bf9, 0xfff4a26d, 0x16a11d59, 0x26b3b8cc, 0xeb09487f, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0xddd90378, 0xc3a2891f, 0x3d5007a2, 0x0f0c0756, 0xbdc5c113, 0xeee78000, 0x90693126, 0x8763b349, 0xbf6814b4, 0x40160bf9, 0xfff4a26d, 0x16a11d59, 0x00000200, 0xeb09487f, 0x00000001, 0x200001f0 }, + Instructions = [0xf403, 0x3ce5, 0x4770, 0xe7fe], + StartRegs = [0xddd90378, 0xc3a2891f, 0x3d5007a2, 0x0f0c0756, 0xbdc5c113, 0xeee78000, 0x90693126, 0x8763b349, 0xbf6814b4, 0x40160bf9, 0xfff4a26d, 0x16a11d59, 0x26b3b8cc, 0xeb09487f, 0x00000001, 0x200001f0 + ], + FinalRegs = [0xddd90378, 0xc3a2891f, 0x3d5007a2, 0x0f0c0756, 0xbdc5c113, 0xeee78000, 0x90693126, 0x8763b349, 0xbf6814b4, 0x40160bf9, 0xfff4a26d, 0x16a11d59, 0x00000200, 0xeb09487f, 0x00000001, 0x200001f0 + ], }, new() { - Instructions = new ushort[] { 0xf00a, 0x177d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xce4db266, 0x67f21be8, 0x0de0c290, 0x2615cfc5, 0x6e3c46cb, 0x44a52240, 0xb12e0470, 0x903e0182, 0x61c32a9a, 0x58bf0753, 0xa9b3c209, 0x68ec1f37, 0x9320a3c9, 0xab952fd9, 0x00000001, 0xa00001f0 }, - FinalRegs = new uint[] { 0xce4db266, 0x67f21be8, 0x0de0c290, 0x2615cfc5, 0x6e3c46cb, 0x44a52240, 0xb12e0470, 0x00310009, 0x61c32a9a, 0x58bf0753, 0xa9b3c209, 0x68ec1f37, 0x9320a3c9, 0xab952fd9, 0x00000001, 0xa00001f0 }, + Instructions = [0xf00a, 0x177d, 0x4770, 0xe7fe], + StartRegs = [0xce4db266, 0x67f21be8, 0x0de0c290, 0x2615cfc5, 0x6e3c46cb, 0x44a52240, 0xb12e0470, 0x903e0182, 0x61c32a9a, 0x58bf0753, 0xa9b3c209, 0x68ec1f37, 0x9320a3c9, 0xab952fd9, 0x00000001, 0xa00001f0 + ], + FinalRegs = [0xce4db266, 0x67f21be8, 0x0de0c290, 0x2615cfc5, 0x6e3c46cb, 0x44a52240, 0xb12e0470, 0x00310009, 0x61c32a9a, 0x58bf0753, 0xa9b3c209, 0x68ec1f37, 0x9320a3c9, 0xab952fd9, 0x00000001, 0xa00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf014, 0x2913, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x4257c8eb, 0xd9eaf199, 0xe9381b0a, 0x39fcb309, 0xb1f24181, 0xebb2b7e4, 0x73799a0f, 0xc70a2fc7, 0xe2af6496, 0xb9014f5b, 0xe22ff568, 0x12dd4afe, 0x6d8544ac, 0x9293d043, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0x4257c8eb, 0xd9eaf199, 0xe9381b0a, 0x39fcb309, 0xb1f24181, 0xebb2b7e4, 0x73799a0f, 0xc70a2fc7, 0xe2af6496, 0x11000100, 0xe22ff568, 0x12dd4afe, 0x6d8544ac, 0x9293d043, 0x00000001, 0x000001f0 }, + Instructions = [0xf014, 0x2913, 0x4770, 0xe7fe], + StartRegs = [0x4257c8eb, 0xd9eaf199, 0xe9381b0a, 0x39fcb309, 0xb1f24181, 0xebb2b7e4, 0x73799a0f, 0xc70a2fc7, 0xe2af6496, 0xb9014f5b, 0xe22ff568, 0x12dd4afe, 0x6d8544ac, 0x9293d043, 0x00000001, 0x000001f0 + ], + FinalRegs = [0x4257c8eb, 0xd9eaf199, 0xe9381b0a, 0x39fcb309, 0xb1f24181, 0xebb2b7e4, 0x73799a0f, 0xc70a2fc7, 0xe2af6496, 0x11000100, 0xe22ff568, 0x12dd4afe, 0x6d8544ac, 0x9293d043, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf004, 0x27c2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x8d7ceb35, 0x000e9260, 0x6825b561, 0xbcf66952, 0x3fbc7775, 0xd5afaa83, 0xe4fde261, 0xa35fa71e, 0xbefc5c9f, 0x667d9163, 0x8c2543b0, 0xd8489b89, 0x661ffec5, 0x45ccdaa8, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0x8d7ceb35, 0x000e9260, 0x6825b561, 0xbcf66952, 0x3fbc7775, 0xd5afaa83, 0xe4fde261, 0x02004200, 0xbefc5c9f, 0x667d9163, 0x8c2543b0, 0xd8489b89, 0x661ffec5, 0x45ccdaa8, 0x00000001, 0xd00001f0 }, + Instructions = [0xf004, 0x27c2, 0x4770, 0xe7fe], + StartRegs = [0x8d7ceb35, 0x000e9260, 0x6825b561, 0xbcf66952, 0x3fbc7775, 0xd5afaa83, 0xe4fde261, 0xa35fa71e, 0xbefc5c9f, 0x667d9163, 0x8c2543b0, 0xd8489b89, 0x661ffec5, 0x45ccdaa8, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0x8d7ceb35, 0x000e9260, 0x6825b561, 0xbcf66952, 0x3fbc7775, 0xd5afaa83, 0xe4fde261, 0x02004200, 0xbefc5c9f, 0x667d9163, 0x8c2543b0, 0xd8489b89, 0x661ffec5, 0x45ccdaa8, 0x00000001, 0xd00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf008, 0x6ce5, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x78a2a638, 0x54ac2bd7, 0x60ad5509, 0x9c38b11f, 0x8dd109de, 0xd07aea77, 0xf5a0bcfc, 0xbcd81a17, 0x2f159ebd, 0xcc7e8454, 0x04621cce, 0xd0e9eca5, 0xb33f4ba6, 0x1e2bb5b2, 0x00000001, 0xf00001f0 }, - FinalRegs = new uint[] { 0x78a2a638, 0x54ac2bd7, 0x60ad5509, 0x9c38b11f, 0x8dd109de, 0xd07aea77, 0xf5a0bcfc, 0xbcd81a17, 0x2f159ebd, 0xcc7e8454, 0x04621cce, 0xd0e9eca5, 0x07000000, 0x1e2bb5b2, 0x00000001, 0xf00001f0 }, + Instructions = [0xf008, 0x6ce5, 0x4770, 0xe7fe], + StartRegs = [0x78a2a638, 0x54ac2bd7, 0x60ad5509, 0x9c38b11f, 0x8dd109de, 0xd07aea77, 0xf5a0bcfc, 0xbcd81a17, 0x2f159ebd, 0xcc7e8454, 0x04621cce, 0xd0e9eca5, 0xb33f4ba6, 0x1e2bb5b2, 0x00000001, 0xf00001f0 + ], + FinalRegs = [0x78a2a638, 0x54ac2bd7, 0x60ad5509, 0x9c38b11f, 0x8dd109de, 0xd07aea77, 0xf5a0bcfc, 0xbcd81a17, 0x2f159ebd, 0xcc7e8454, 0x04621cce, 0xd0e9eca5, 0x07000000, 0x1e2bb5b2, 0x00000001, 0xf00001f0 + ], }, // BIC (imm) new() { - Instructions = new ushort[] { 0xf420, 0x6425, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x28c2ef44, 0x206bdfed, 0x30c780a9, 0x440ab4ab, 0x666fc882, 0x92a4aa1d, 0x3ceb6b36, 0xca757a75, 0xdf2f77b7, 0xae012305, 0x06b5c956, 0x0ff05e78, 0xad918973, 0x73778e28, 0x00000001, 0xe00001f0 }, - FinalRegs = new uint[] { 0x28c2ef44, 0x206bdfed, 0x30c780a9, 0x440ab4ab, 0x28c2e504, 0x92a4aa1d, 0x3ceb6b36, 0xca757a75, 0xdf2f77b7, 0xae012305, 0x06b5c956, 0x0ff05e78, 0xad918973, 0x73778e28, 0x00000001, 0xe00001f0 }, + Instructions = [0xf420, 0x6425, 0x4770, 0xe7fe], + StartRegs = [0x28c2ef44, 0x206bdfed, 0x30c780a9, 0x440ab4ab, 0x666fc882, 0x92a4aa1d, 0x3ceb6b36, 0xca757a75, 0xdf2f77b7, 0xae012305, 0x06b5c956, 0x0ff05e78, 0xad918973, 0x73778e28, 0x00000001, 0xe00001f0 + ], + FinalRegs = [0x28c2ef44, 0x206bdfed, 0x30c780a9, 0x440ab4ab, 0x28c2e504, 0x92a4aa1d, 0x3ceb6b36, 0xca757a75, 0xdf2f77b7, 0xae012305, 0x06b5c956, 0x0ff05e78, 0xad918973, 0x73778e28, 0x00000001, 0xe00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf430, 0x44ed, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5cd96673, 0xa1c27ac5, 0xbb205490, 0xa844d844, 0x1e66662f, 0x0f259402, 0xbe81472f, 0x36d55b13, 0x02c6d2a2, 0xc39c31b1, 0x59b71936, 0xf1914252, 0xef8188b8, 0x0c18bea1, 0x00000001, 0x700001f0 }, - FinalRegs = new uint[] { 0x5cd96673, 0xa1c27ac5, 0xbb205490, 0xa844d844, 0x5cd90073, 0x0f259402, 0xbe81472f, 0x36d55b13, 0x02c6d2a2, 0xc39c31b1, 0x59b71936, 0xf1914252, 0xef8188b8, 0x0c18bea1, 0x00000001, 0x100001f0 }, + Instructions = [0xf430, 0x44ed, 0x4770, 0xe7fe], + StartRegs = [0x5cd96673, 0xa1c27ac5, 0xbb205490, 0xa844d844, 0x1e66662f, 0x0f259402, 0xbe81472f, 0x36d55b13, 0x02c6d2a2, 0xc39c31b1, 0x59b71936, 0xf1914252, 0xef8188b8, 0x0c18bea1, 0x00000001, 0x700001f0 + ], + FinalRegs = [0x5cd96673, 0xa1c27ac5, 0xbb205490, 0xa844d844, 0x5cd90073, 0x0f259402, 0xbe81472f, 0x36d55b13, 0x02c6d2a2, 0xc39c31b1, 0x59b71936, 0xf1914252, 0xef8188b8, 0x0c18bea1, 0x00000001, 0x100001f0 + ], }, new() { - Instructions = new ushort[] { 0xf038, 0x1334, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xe0afc0e0, 0x7ffd49d1, 0x6fe858fa, 0x7564882e, 0xaa895bf1, 0x725f4071, 0x612b9956, 0xb28fd700, 0xf0acd15c, 0xb62cf0bb, 0x1d9d5c1f, 0xdc3942a2, 0x9b3248ea, 0x3b7593ca, 0x00000001, 0xb00001f0 }, - FinalRegs = new uint[] { 0xe0afc0e0, 0x7ffd49d1, 0x6fe858fa, 0xf088d148, 0xaa895bf1, 0x725f4071, 0x612b9956, 0xb28fd700, 0xf0acd15c, 0xb62cf0bb, 0x1d9d5c1f, 0xdc3942a2, 0x9b3248ea, 0x3b7593ca, 0x00000001, 0xb00001f0 }, + Instructions = [0xf038, 0x1334, 0x4770, 0xe7fe], + StartRegs = [0xe0afc0e0, 0x7ffd49d1, 0x6fe858fa, 0x7564882e, 0xaa895bf1, 0x725f4071, 0x612b9956, 0xb28fd700, 0xf0acd15c, 0xb62cf0bb, 0x1d9d5c1f, 0xdc3942a2, 0x9b3248ea, 0x3b7593ca, 0x00000001, 0xb00001f0 + ], + FinalRegs = [0xe0afc0e0, 0x7ffd49d1, 0x6fe858fa, 0xf088d148, 0xaa895bf1, 0x725f4071, 0x612b9956, 0xb28fd700, 0xf0acd15c, 0xb62cf0bb, 0x1d9d5c1f, 0xdc3942a2, 0x9b3248ea, 0x3b7593ca, 0x00000001, 0xb00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf438, 0x51d7, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x75f070b0, 0x24e410c6, 0x128174fa, 0x04a10755, 0x6728fd35, 0xf6007f21, 0x0cb9efa3, 0x260e061c, 0xc5e02c94, 0x4aaa3354, 0x00796ab8, 0x897274d2, 0xe87dcffc, 0xa47bd3ab, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0x75f070b0, 0xc5e02414, 0x128174fa, 0x04a10755, 0x6728fd35, 0xf6007f21, 0x0cb9efa3, 0x260e061c, 0xc5e02c94, 0x4aaa3354, 0x00796ab8, 0x897274d2, 0xe87dcffc, 0xa47bd3ab, 0x00000001, 0x800001f0 }, + Instructions = [0xf438, 0x51d7, 0x4770, 0xe7fe], + StartRegs = [0x75f070b0, 0x24e410c6, 0x128174fa, 0x04a10755, 0x6728fd35, 0xf6007f21, 0x0cb9efa3, 0x260e061c, 0xc5e02c94, 0x4aaa3354, 0x00796ab8, 0x897274d2, 0xe87dcffc, 0xa47bd3ab, 0x00000001, 0x200001f0 + ], + FinalRegs = [0x75f070b0, 0xc5e02414, 0x128174fa, 0x04a10755, 0x6728fd35, 0xf6007f21, 0x0cb9efa3, 0x260e061c, 0xc5e02c94, 0x4aaa3354, 0x00796ab8, 0x897274d2, 0xe87dcffc, 0xa47bd3ab, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf438, 0x1db2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x62dcbe9e, 0x55f42016, 0x6689f461, 0x31e32805, 0x1fc90a1e, 0x02e3a47f, 0xf236bafd, 0x65006290, 0x0065bd7f, 0xc1752579, 0x59528615, 0x6ef68c79, 0x138b8bb3, 0x0761d66c, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0x62dcbe9e, 0x55f42016, 0x6689f461, 0x31e32805, 0x1fc90a1e, 0x02e3a47f, 0xf236bafd, 0x65006290, 0x0065bd7f, 0xc1752579, 0x59528615, 0x6ef68c79, 0x138b8bb3, 0x0061bd7f, 0x00000001, 0x000001f0 }, + Instructions = [0xf438, 0x1db2, 0x4770, 0xe7fe], + StartRegs = [0x62dcbe9e, 0x55f42016, 0x6689f461, 0x31e32805, 0x1fc90a1e, 0x02e3a47f, 0xf236bafd, 0x65006290, 0x0065bd7f, 0xc1752579, 0x59528615, 0x6ef68c79, 0x138b8bb3, 0x0761d66c, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0x62dcbe9e, 0x55f42016, 0x6689f461, 0x31e32805, 0x1fc90a1e, 0x02e3a47f, 0xf236bafd, 0x65006290, 0x0065bd7f, 0xc1752579, 0x59528615, 0x6ef68c79, 0x138b8bb3, 0x0061bd7f, 0x00000001, 0x000001f0 + ], }, // MOV (imm) new() { - Instructions = new ushort[] { 0xf45f, 0x5032, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6ed98807, 0x536a9cb7, 0x79c2d5bb, 0xc2e9a860, 0x185b4e57, 0x77c1c99f, 0x99a24897, 0xc6cc4ea1, 0xe3d294a6, 0xb8e525ae, 0xca245840, 0x27943892, 0xa76ed6fe, 0xecbcffe8, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0x00002c80, 0x536a9cb7, 0x79c2d5bb, 0xc2e9a860, 0x185b4e57, 0x77c1c99f, 0x99a24897, 0xc6cc4ea1, 0xe3d294a6, 0xb8e525ae, 0xca245840, 0x27943892, 0xa76ed6fe, 0xecbcffe8, 0x00000001, 0x000001f0 }, + Instructions = [0xf45f, 0x5032, 0x4770, 0xe7fe], + StartRegs = [0x6ed98807, 0x536a9cb7, 0x79c2d5bb, 0xc2e9a860, 0x185b4e57, 0x77c1c99f, 0x99a24897, 0xc6cc4ea1, 0xe3d294a6, 0xb8e525ae, 0xca245840, 0x27943892, 0xa76ed6fe, 0xecbcffe8, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0x00002c80, 0x536a9cb7, 0x79c2d5bb, 0xc2e9a860, 0x185b4e57, 0x77c1c99f, 0x99a24897, 0xc6cc4ea1, 0xe3d294a6, 0xb8e525ae, 0xca245840, 0x27943892, 0xa76ed6fe, 0xecbcffe8, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf04f, 0x23f9, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x7e6bf90e, 0x87533a8f, 0x29389323, 0x96a37f30, 0x63e6e58e, 0xb8bb21d0, 0x5bd9ae04, 0x26b7a586, 0xfa359510, 0x131a4e95, 0x5d0adb02, 0xa8148f64, 0xbfe74669, 0xea2cdf2d, 0x00000001, 0xb00001f0 }, - FinalRegs = new uint[] { 0x7e6bf90e, 0x87533a8f, 0x29389323, 0xf900f900, 0x63e6e58e, 0xb8bb21d0, 0x5bd9ae04, 0x26b7a586, 0xfa359510, 0x131a4e95, 0x5d0adb02, 0xa8148f64, 0xbfe74669, 0xea2cdf2d, 0x00000001, 0xb00001f0 }, + Instructions = [0xf04f, 0x23f9, 0x4770, 0xe7fe], + StartRegs = [0x7e6bf90e, 0x87533a8f, 0x29389323, 0x96a37f30, 0x63e6e58e, 0xb8bb21d0, 0x5bd9ae04, 0x26b7a586, 0xfa359510, 0x131a4e95, 0x5d0adb02, 0xa8148f64, 0xbfe74669, 0xea2cdf2d, 0x00000001, 0xb00001f0 + ], + FinalRegs = [0x7e6bf90e, 0x87533a8f, 0x29389323, 0xf900f900, 0x63e6e58e, 0xb8bb21d0, 0x5bd9ae04, 0x26b7a586, 0xfa359510, 0x131a4e95, 0x5d0adb02, 0xa8148f64, 0xbfe74669, 0xea2cdf2d, 0x00000001, 0xb00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf45f, 0x5351, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd8b5d8b2, 0x7ae44f2b, 0xda909eb2, 0xdb2fe423, 0xb2486971, 0x23427a2c, 0x96c88749, 0xb88d6d78, 0x2f4aa092, 0xbf40760f, 0x88d72a3f, 0x88854e62, 0x8d459486, 0x82a8ba9f, 0x00000001, 0x300001f0 }, - FinalRegs = new uint[] { 0xd8b5d8b2, 0x7ae44f2b, 0xda909eb2, 0x00003440, 0xb2486971, 0x23427a2c, 0x96c88749, 0xb88d6d78, 0x2f4aa092, 0xbf40760f, 0x88d72a3f, 0x88854e62, 0x8d459486, 0x82a8ba9f, 0x00000001, 0x100001f0 }, + Instructions = [0xf45f, 0x5351, 0x4770, 0xe7fe], + StartRegs = [0xd8b5d8b2, 0x7ae44f2b, 0xda909eb2, 0xdb2fe423, 0xb2486971, 0x23427a2c, 0x96c88749, 0xb88d6d78, 0x2f4aa092, 0xbf40760f, 0x88d72a3f, 0x88854e62, 0x8d459486, 0x82a8ba9f, 0x00000001, 0x300001f0 + ], + FinalRegs = [0xd8b5d8b2, 0x7ae44f2b, 0xda909eb2, 0x00003440, 0xb2486971, 0x23427a2c, 0x96c88749, 0xb88d6d78, 0x2f4aa092, 0xbf40760f, 0x88d72a3f, 0x88854e62, 0x8d459486, 0x82a8ba9f, 0x00000001, 0x100001f0 + ], }, new() { - Instructions = new ushort[] { 0xf45f, 0x207c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x73063041, 0x038b5f4a, 0xf7e85421, 0xe935f110, 0x9a5c34de, 0xbc3dbed9, 0x1c57c517, 0x3294067f, 0x01cd78b5, 0xe7bfe428, 0x6e297fce, 0xccb2c833, 0x2e8bb930, 0xeb6e2004, 0x00000001, 0x300001f0 }, - FinalRegs = new uint[] { 0x000fc000, 0x038b5f4a, 0xf7e85421, 0xe935f110, 0x9a5c34de, 0xbc3dbed9, 0x1c57c517, 0x3294067f, 0x01cd78b5, 0xe7bfe428, 0x6e297fce, 0xccb2c833, 0x2e8bb930, 0xeb6e2004, 0x00000001, 0x100001f0 }, + Instructions = [0xf45f, 0x207c, 0x4770, 0xe7fe], + StartRegs = [0x73063041, 0x038b5f4a, 0xf7e85421, 0xe935f110, 0x9a5c34de, 0xbc3dbed9, 0x1c57c517, 0x3294067f, 0x01cd78b5, 0xe7bfe428, 0x6e297fce, 0xccb2c833, 0x2e8bb930, 0xeb6e2004, 0x00000001, 0x300001f0 + ], + FinalRegs = [0x000fc000, 0x038b5f4a, 0xf7e85421, 0xe935f110, 0x9a5c34de, 0xbc3dbed9, 0x1c57c517, 0x3294067f, 0x01cd78b5, 0xe7bfe428, 0x6e297fce, 0xccb2c833, 0x2e8bb930, 0xeb6e2004, 0x00000001, 0x100001f0 + ], }, new() { - Instructions = new ushort[] { 0xf45f, 0x5073, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd0d531fe, 0xeb1676df, 0x0acf5912, 0x6061b3fe, 0xecac2ae2, 0x40075143, 0x88a47781, 0x3ecb7baa, 0x6aee3603, 0x53133f32, 0x1e891e57, 0x4d7f8f94, 0xd09c727a, 0x28a79c93, 0x00000001, 0x400001f0 }, - FinalRegs = new uint[] { 0x00003cc0, 0xeb1676df, 0x0acf5912, 0x6061b3fe, 0xecac2ae2, 0x40075143, 0x88a47781, 0x3ecb7baa, 0x6aee3603, 0x53133f32, 0x1e891e57, 0x4d7f8f94, 0xd09c727a, 0x28a79c93, 0x00000001, 0x000001f0 }, + Instructions = [0xf45f, 0x5073, 0x4770, 0xe7fe], + StartRegs = [0xd0d531fe, 0xeb1676df, 0x0acf5912, 0x6061b3fe, 0xecac2ae2, 0x40075143, 0x88a47781, 0x3ecb7baa, 0x6aee3603, 0x53133f32, 0x1e891e57, 0x4d7f8f94, 0xd09c727a, 0x28a79c93, 0x00000001, 0x400001f0 + ], + FinalRegs = [0x00003cc0, 0xeb1676df, 0x0acf5912, 0x6061b3fe, 0xecac2ae2, 0x40075143, 0x88a47781, 0x3ecb7baa, 0x6aee3603, 0x53133f32, 0x1e891e57, 0x4d7f8f94, 0xd09c727a, 0x28a79c93, 0x00000001, 0x000001f0 + ], }, // ORR (imm) new() { - Instructions = new ushort[] { 0xf45c, 0x03c9, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xc7d9e145, 0xc2a6bd5b, 0x92c8ca0b, 0x1fde4d2f, 0xa4705c7f, 0x47559e93, 0x9f9d3e22, 0x7b3719c0, 0x3746ffc9, 0xa1476ae8, 0x88f45e36, 0x0fc7d2a7, 0xaa94b64c, 0xe9fee33b, 0x00000001, 0x700001f0 }, - FinalRegs = new uint[] { 0xc7d9e145, 0xc2a6bd5b, 0x92c8ca0b, 0xaaf4b64c, 0xa4705c7f, 0x47559e93, 0x9f9d3e22, 0x7b3719c0, 0x3746ffc9, 0xa1476ae8, 0x88f45e36, 0x0fc7d2a7, 0xaa94b64c, 0xe9fee33b, 0x00000001, 0x900001f0 }, + Instructions = [0xf45c, 0x03c9, 0x4770, 0xe7fe], + StartRegs = [0xc7d9e145, 0xc2a6bd5b, 0x92c8ca0b, 0x1fde4d2f, 0xa4705c7f, 0x47559e93, 0x9f9d3e22, 0x7b3719c0, 0x3746ffc9, 0xa1476ae8, 0x88f45e36, 0x0fc7d2a7, 0xaa94b64c, 0xe9fee33b, 0x00000001, 0x700001f0 + ], + FinalRegs = [0xc7d9e145, 0xc2a6bd5b, 0x92c8ca0b, 0xaaf4b64c, 0xa4705c7f, 0x47559e93, 0x9f9d3e22, 0x7b3719c0, 0x3746ffc9, 0xa1476ae8, 0x88f45e36, 0x0fc7d2a7, 0xaa94b64c, 0xe9fee33b, 0x00000001, 0x900001f0 + ], }, new() { - Instructions = new ushort[] { 0xf441, 0x60ec, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x2262c23f, 0xf8ba9254, 0x2a870feb, 0xa66d2c1a, 0xa3bb8f6d, 0x2f754de2, 0xb3b0b9be, 0xc3cf59e8, 0xebaa6300, 0x22ea8a3d, 0xf3bcf0f4, 0xffb0aae8, 0x4982d5ab, 0x4c945119, 0x00000001, 0x800001f0 }, - FinalRegs = new uint[] { 0xf8ba9774, 0xf8ba9254, 0x2a870feb, 0xa66d2c1a, 0xa3bb8f6d, 0x2f754de2, 0xb3b0b9be, 0xc3cf59e8, 0xebaa6300, 0x22ea8a3d, 0xf3bcf0f4, 0xffb0aae8, 0x4982d5ab, 0x4c945119, 0x00000001, 0x800001f0 }, + Instructions = [0xf441, 0x60ec, 0x4770, 0xe7fe], + StartRegs = [0x2262c23f, 0xf8ba9254, 0x2a870feb, 0xa66d2c1a, 0xa3bb8f6d, 0x2f754de2, 0xb3b0b9be, 0xc3cf59e8, 0xebaa6300, 0x22ea8a3d, 0xf3bcf0f4, 0xffb0aae8, 0x4982d5ab, 0x4c945119, 0x00000001, 0x800001f0 + ], + FinalRegs = [0xf8ba9774, 0xf8ba9254, 0x2a870feb, 0xa66d2c1a, 0xa3bb8f6d, 0x2f754de2, 0xb3b0b9be, 0xc3cf59e8, 0xebaa6300, 0x22ea8a3d, 0xf3bcf0f4, 0xffb0aae8, 0x4982d5ab, 0x4c945119, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf44c, 0x5343, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x844cd5c4, 0x5a244353, 0xd74ff677, 0x25eefc9f, 0xa040f56f, 0x06e237a6, 0x7ccb1c91, 0xc9aa6d32, 0xf9e18bd6, 0xc0780954, 0x955d8f60, 0xa9cb014e, 0x64d583e2, 0x3e50533a, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0x844cd5c4, 0x5a244353, 0xd74ff677, 0x64d5b3e2, 0xa040f56f, 0x06e237a6, 0x7ccb1c91, 0xc9aa6d32, 0xf9e18bd6, 0xc0780954, 0x955d8f60, 0xa9cb014e, 0x64d583e2, 0x3e50533a, 0x00000001, 0x000001f0 }, + Instructions = [0xf44c, 0x5343, 0x4770, 0xe7fe], + StartRegs = [0x844cd5c4, 0x5a244353, 0xd74ff677, 0x25eefc9f, 0xa040f56f, 0x06e237a6, 0x7ccb1c91, 0xc9aa6d32, 0xf9e18bd6, 0xc0780954, 0x955d8f60, 0xa9cb014e, 0x64d583e2, 0x3e50533a, 0x00000001, 0x000001f0 + ], + FinalRegs = [0x844cd5c4, 0x5a244353, 0xd74ff677, 0x64d5b3e2, 0xa040f56f, 0x06e237a6, 0x7ccb1c91, 0xc9aa6d32, 0xf9e18bd6, 0xc0780954, 0x955d8f60, 0xa9cb014e, 0x64d583e2, 0x3e50533a, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf040, 0x48e2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x24423eae, 0x40f7667e, 0x017f283e, 0x72887399, 0x063f4da0, 0x9b57a1c5, 0x5500c630, 0x6a304cac, 0xf9f10e9a, 0x02cdd193, 0x3f42bccd, 0x3c52ef2e, 0x15858a11, 0x25fd30bf, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0x24423eae, 0x40f7667e, 0x017f283e, 0x72887399, 0x063f4da0, 0x9b57a1c5, 0x5500c630, 0x6a304cac, 0x75423eae, 0x02cdd193, 0x3f42bccd, 0x3c52ef2e, 0x15858a11, 0x25fd30bf, 0x00000001, 0xc00001f0 }, + Instructions = [0xf040, 0x48e2, 0x4770, 0xe7fe], + StartRegs = [0x24423eae, 0x40f7667e, 0x017f283e, 0x72887399, 0x063f4da0, 0x9b57a1c5, 0x5500c630, 0x6a304cac, 0xf9f10e9a, 0x02cdd193, 0x3f42bccd, 0x3c52ef2e, 0x15858a11, 0x25fd30bf, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0x24423eae, 0x40f7667e, 0x017f283e, 0x72887399, 0x063f4da0, 0x9b57a1c5, 0x5500c630, 0x6a304cac, 0x75423eae, 0x02cdd193, 0x3f42bccd, 0x3c52ef2e, 0x15858a11, 0x25fd30bf, 0x00000001, 0xc00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf455, 0x1de0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xc8c22d0e, 0x98a19d05, 0x61b4ea5e, 0x52f6f9a0, 0x2f8ceae4, 0x15649771, 0x61953174, 0x45b9d93f, 0x4e0629af, 0x30f43259, 0x863e8e5c, 0x3310b69e, 0xae5e5b9d, 0xf00e065a, 0x00000001, 0xb00001f0 }, - FinalRegs = new uint[] { 0xc8c22d0e, 0x98a19d05, 0x61b4ea5e, 0x52f6f9a0, 0x2f8ceae4, 0x15649771, 0x61953174, 0x45b9d93f, 0x4e0629af, 0x30f43259, 0x863e8e5c, 0x3310b69e, 0xae5e5b9d, 0x157c9771, 0x00000001, 0x100001f0 }, + Instructions = [0xf455, 0x1de0, 0x4770, 0xe7fe], + StartRegs = [0xc8c22d0e, 0x98a19d05, 0x61b4ea5e, 0x52f6f9a0, 0x2f8ceae4, 0x15649771, 0x61953174, 0x45b9d93f, 0x4e0629af, 0x30f43259, 0x863e8e5c, 0x3310b69e, 0xae5e5b9d, 0xf00e065a, 0x00000001, 0xb00001f0 + ], + FinalRegs = [0xc8c22d0e, 0x98a19d05, 0x61b4ea5e, 0x52f6f9a0, 0x2f8ceae4, 0x15649771, 0x61953174, 0x45b9d93f, 0x4e0629af, 0x30f43259, 0x863e8e5c, 0x3310b69e, 0xae5e5b9d, 0x157c9771, 0x00000001, 0x100001f0 + ], }, // MVN (imm) new() { - Instructions = new ushort[] { 0xf46f, 0x1681, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xb1267a38, 0xe72b03aa, 0x50dc392a, 0xaff74b0d, 0xf83a17ba, 0xb8edf09d, 0x799df56d, 0x1ecbd371, 0xb4a74b9a, 0xe79f52fb, 0xbcec8b62, 0xbb0b01ea, 0x26d72e8c, 0x1d2ac349, 0x00000001, 0x900001f0 }, - FinalRegs = new uint[] { 0xb1267a38, 0xe72b03aa, 0x50dc392a, 0xaff74b0d, 0xf83a17ba, 0xb8edf09d, 0xffefdfff, 0x1ecbd371, 0xb4a74b9a, 0xe79f52fb, 0xbcec8b62, 0xbb0b01ea, 0x26d72e8c, 0x1d2ac349, 0x00000001, 0x900001f0 }, + Instructions = [0xf46f, 0x1681, 0x4770, 0xe7fe], + StartRegs = [0xb1267a38, 0xe72b03aa, 0x50dc392a, 0xaff74b0d, 0xf83a17ba, 0xb8edf09d, 0x799df56d, 0x1ecbd371, 0xb4a74b9a, 0xe79f52fb, 0xbcec8b62, 0xbb0b01ea, 0x26d72e8c, 0x1d2ac349, 0x00000001, 0x900001f0 + ], + FinalRegs = [0xb1267a38, 0xe72b03aa, 0x50dc392a, 0xaff74b0d, 0xf83a17ba, 0xb8edf09d, 0xffefdfff, 0x1ecbd371, 0xb4a74b9a, 0xe79f52fb, 0xbcec8b62, 0xbb0b01ea, 0x26d72e8c, 0x1d2ac349, 0x00000001, 0x900001f0 + ], }, new() { - Instructions = new ushort[] { 0xf07f, 0x572f, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xa95387ad, 0x256c4ece, 0x32084d7a, 0x84935d58, 0x12f6880b, 0x3b386e47, 0xbeb69796, 0xdcf3fac5, 0xee2f9386, 0x25372541, 0x56499ba6, 0x06fa7586, 0xd114f908, 0x3442736e, 0x00000001, 0x400001f0 }, - FinalRegs = new uint[] { 0xa95387ad, 0x256c4ece, 0x32084d7a, 0x84935d58, 0x12f6880b, 0x3b386e47, 0xbeb69796, 0xd43fffff, 0xee2f9386, 0x25372541, 0x56499ba6, 0x06fa7586, 0xd114f908, 0x3442736e, 0x00000001, 0x800001f0 }, + Instructions = [0xf07f, 0x572f, 0x4770, 0xe7fe], + StartRegs = [0xa95387ad, 0x256c4ece, 0x32084d7a, 0x84935d58, 0x12f6880b, 0x3b386e47, 0xbeb69796, 0xdcf3fac5, 0xee2f9386, 0x25372541, 0x56499ba6, 0x06fa7586, 0xd114f908, 0x3442736e, 0x00000001, 0x400001f0 + ], + FinalRegs = [0xa95387ad, 0x256c4ece, 0x32084d7a, 0x84935d58, 0x12f6880b, 0x3b386e47, 0xbeb69796, 0xd43fffff, 0xee2f9386, 0x25372541, 0x56499ba6, 0x06fa7586, 0xd114f908, 0x3442736e, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf46f, 0x17e3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd7f2d1e1, 0x1d12b22c, 0x2c26620c, 0xeadb8ead, 0x73560a2e, 0xf521b384, 0x4094f3d2, 0x17ed0f6f, 0x79d30498, 0x6d47211a, 0x8fdfef1d, 0xce6cbfa7, 0x75dc1c1b, 0x2ffd5d28, 0x00000001, 0x700001f0 }, - FinalRegs = new uint[] { 0xd7f2d1e1, 0x1d12b22c, 0x2c26620c, 0xeadb8ead, 0x73560a2e, 0xf521b384, 0x4094f3d2, 0xffe39fff, 0x79d30498, 0x6d47211a, 0x8fdfef1d, 0xce6cbfa7, 0x75dc1c1b, 0x2ffd5d28, 0x00000001, 0x700001f0 }, + Instructions = [0xf46f, 0x17e3, 0x4770, 0xe7fe], + StartRegs = [0xd7f2d1e1, 0x1d12b22c, 0x2c26620c, 0xeadb8ead, 0x73560a2e, 0xf521b384, 0x4094f3d2, 0x17ed0f6f, 0x79d30498, 0x6d47211a, 0x8fdfef1d, 0xce6cbfa7, 0x75dc1c1b, 0x2ffd5d28, 0x00000001, 0x700001f0 + ], + FinalRegs = [0xd7f2d1e1, 0x1d12b22c, 0x2c26620c, 0xeadb8ead, 0x73560a2e, 0xf521b384, 0x4094f3d2, 0xffe39fff, 0x79d30498, 0x6d47211a, 0x8fdfef1d, 0xce6cbfa7, 0x75dc1c1b, 0x2ffd5d28, 0x00000001, 0x700001f0 + ], }, new() { - Instructions = new ushort[] { 0xf07f, 0x1431, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x4154dce7, 0x66c452e9, 0xff9bea1b, 0x228a4a5e, 0xe9fee66b, 0xddd7117f, 0x303cdcb6, 0x4bdf78a2, 0xfbcca92c, 0x2f628d24, 0x51816529, 0xcdea5042, 0x77a1e4a2, 0x8a745cb4, 0x00000001, 0xa00001f0 }, - FinalRegs = new uint[] { 0x4154dce7, 0x66c452e9, 0xff9bea1b, 0x228a4a5e, 0xffceffce, 0xddd7117f, 0x303cdcb6, 0x4bdf78a2, 0xfbcca92c, 0x2f628d24, 0x51816529, 0xcdea5042, 0x77a1e4a2, 0x8a745cb4, 0x00000001, 0xa00001f0 }, + Instructions = [0xf07f, 0x1431, 0x4770, 0xe7fe], + StartRegs = [0x4154dce7, 0x66c452e9, 0xff9bea1b, 0x228a4a5e, 0xe9fee66b, 0xddd7117f, 0x303cdcb6, 0x4bdf78a2, 0xfbcca92c, 0x2f628d24, 0x51816529, 0xcdea5042, 0x77a1e4a2, 0x8a745cb4, 0x00000001, 0xa00001f0 + ], + FinalRegs = [0x4154dce7, 0x66c452e9, 0xff9bea1b, 0x228a4a5e, 0xffceffce, 0xddd7117f, 0x303cdcb6, 0x4bdf78a2, 0xfbcca92c, 0x2f628d24, 0x51816529, 0xcdea5042, 0x77a1e4a2, 0x8a745cb4, 0x00000001, 0xa00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf07f, 0x73ac, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd7b60274, 0x1ff3baba, 0xfdc8fa51, 0xcfacae9d, 0xd27a8214, 0xbbfb1abf, 0x3766111f, 0x89af2196, 0x4bd14cd6, 0x5af84659, 0xd279ed2f, 0x7abdf656, 0x868a6980, 0xd343d52a, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0xd7b60274, 0x1ff3baba, 0xfdc8fa51, 0xfea7ffff, 0xd27a8214, 0xbbfb1abf, 0x3766111f, 0x89af2196, 0x4bd14cd6, 0x5af84659, 0xd279ed2f, 0x7abdf656, 0x868a6980, 0xd343d52a, 0x00000001, 0x900001f0 }, + Instructions = [0xf07f, 0x73ac, 0x4770, 0xe7fe], + StartRegs = [0xd7b60274, 0x1ff3baba, 0xfdc8fa51, 0xcfacae9d, 0xd27a8214, 0xbbfb1abf, 0x3766111f, 0x89af2196, 0x4bd14cd6, 0x5af84659, 0xd279ed2f, 0x7abdf656, 0x868a6980, 0xd343d52a, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0xd7b60274, 0x1ff3baba, 0xfdc8fa51, 0xfea7ffff, 0xd27a8214, 0xbbfb1abf, 0x3766111f, 0x89af2196, 0x4bd14cd6, 0x5af84659, 0xd279ed2f, 0x7abdf656, 0x868a6980, 0xd343d52a, 0x00000001, 0x900001f0 + ], }, // ORN (imm) new() { - Instructions = new ushort[] { 0xf464, 0x0976, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x02e1c999, 0x40c2ff04, 0x16f00059, 0xd360cd62, 0xcb34f9d2, 0x303b434a, 0x53e0151f, 0x188b36bc, 0x84868958, 0xebad0ada, 0xdcd0cb74, 0x64bc056c, 0xd17a7256, 0xb71ddae3, 0x00000001, 0x500001f0 }, - FinalRegs = new uint[] { 0x02e1c999, 0x40c2ff04, 0x16f00059, 0xd360cd62, 0xcb34f9d2, 0x303b434a, 0x53e0151f, 0x188b36bc, 0x84868958, 0xff3dffff, 0xdcd0cb74, 0x64bc056c, 0xd17a7256, 0xb71ddae3, 0x00000001, 0x500001f0 }, + Instructions = [0xf464, 0x0976, 0x4770, 0xe7fe], + StartRegs = [0x02e1c999, 0x40c2ff04, 0x16f00059, 0xd360cd62, 0xcb34f9d2, 0x303b434a, 0x53e0151f, 0x188b36bc, 0x84868958, 0xebad0ada, 0xdcd0cb74, 0x64bc056c, 0xd17a7256, 0xb71ddae3, 0x00000001, 0x500001f0 + ], + FinalRegs = [0x02e1c999, 0x40c2ff04, 0x16f00059, 0xd360cd62, 0xcb34f9d2, 0x303b434a, 0x53e0151f, 0x188b36bc, 0x84868958, 0xff3dffff, 0xdcd0cb74, 0x64bc056c, 0xd17a7256, 0xb71ddae3, 0x00000001, 0x500001f0 + ], }, new() { - Instructions = new ushort[] { 0xf477, 0x3c66, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x71910713, 0xd17f8e75, 0x2652c7ac, 0xfad0527a, 0xc52b726d, 0x29e66793, 0xa1011225, 0x00c8ecc1, 0x48af4edd, 0x5c4e2e67, 0xc5393bd5, 0x702fcda1, 0x4549b1cf, 0x72d5a971, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0x71910713, 0xd17f8e75, 0x2652c7ac, 0xfad0527a, 0xc52b726d, 0x29e66793, 0xa1011225, 0x00c8ecc1, 0x48af4edd, 0x5c4e2e67, 0xc5393bd5, 0x702fcda1, 0xfffcefff, 0x72d5a971, 0x00000001, 0x900001f0 }, + Instructions = [0xf477, 0x3c66, 0x4770, 0xe7fe], + StartRegs = [0x71910713, 0xd17f8e75, 0x2652c7ac, 0xfad0527a, 0xc52b726d, 0x29e66793, 0xa1011225, 0x00c8ecc1, 0x48af4edd, 0x5c4e2e67, 0xc5393bd5, 0x702fcda1, 0x4549b1cf, 0x72d5a971, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0x71910713, 0xd17f8e75, 0x2652c7ac, 0xfad0527a, 0xc52b726d, 0x29e66793, 0xa1011225, 0x00c8ecc1, 0x48af4edd, 0x5c4e2e67, 0xc5393bd5, 0x702fcda1, 0xfffcefff, 0x72d5a971, 0x00000001, 0x900001f0 + ], }, new() { - Instructions = new ushort[] { 0xf479, 0x1270, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x91060c85, 0x9b9c9033, 0x771ac325, 0x001e17c8, 0xb1adee43, 0xbaa9ec02, 0xf57f9f83, 0x3fed4e5c, 0x198cc3ea, 0x1a40edde, 0x6844391b, 0xa03319a0, 0xf741e11b, 0xc1892487, 0x00000001, 0x600001f0 }, - FinalRegs = new uint[] { 0x91060c85, 0x9b9c9033, 0xffc3ffff, 0x001e17c8, 0xb1adee43, 0xbaa9ec02, 0xf57f9f83, 0x3fed4e5c, 0x198cc3ea, 0x1a40edde, 0x6844391b, 0xa03319a0, 0xf741e11b, 0xc1892487, 0x00000001, 0x800001f0 }, + Instructions = [0xf479, 0x1270, 0x4770, 0xe7fe], + StartRegs = [0x91060c85, 0x9b9c9033, 0x771ac325, 0x001e17c8, 0xb1adee43, 0xbaa9ec02, 0xf57f9f83, 0x3fed4e5c, 0x198cc3ea, 0x1a40edde, 0x6844391b, 0xa03319a0, 0xf741e11b, 0xc1892487, 0x00000001, 0x600001f0 + ], + FinalRegs = [0x91060c85, 0x9b9c9033, 0xffc3ffff, 0x001e17c8, 0xb1adee43, 0xbaa9ec02, 0xf57f9f83, 0x3fed4e5c, 0x198cc3ea, 0x1a40edde, 0x6844391b, 0xa03319a0, 0xf741e11b, 0xc1892487, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf46f, 0x19d4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x4fd5b2bd, 0x1c8f29ae, 0x12803c79, 0x93683874, 0xccd779c1, 0x6978c335, 0x06eb789d, 0xc8b74ef8, 0x51ca145a, 0x242d8047, 0x5036f51f, 0x13a4a4a2, 0x08818ae4, 0xe1687e67, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0x4fd5b2bd, 0x1c8f29ae, 0x12803c79, 0x93683874, 0xccd779c1, 0x6978c335, 0x06eb789d, 0xc8b74ef8, 0x51ca145a, 0xffe57fff, 0x5036f51f, 0x13a4a4a2, 0x08818ae4, 0xe1687e67, 0x00000001, 0x000001f0 }, + Instructions = [0xf46f, 0x19d4, 0x4770, 0xe7fe], + StartRegs = [0x4fd5b2bd, 0x1c8f29ae, 0x12803c79, 0x93683874, 0xccd779c1, 0x6978c335, 0x06eb789d, 0xc8b74ef8, 0x51ca145a, 0x242d8047, 0x5036f51f, 0x13a4a4a2, 0x08818ae4, 0xe1687e67, 0x00000001, 0x000001f0 + ], + FinalRegs = [0x4fd5b2bd, 0x1c8f29ae, 0x12803c79, 0x93683874, 0xccd779c1, 0x6978c335, 0x06eb789d, 0xc8b74ef8, 0x51ca145a, 0xffe57fff, 0x5036f51f, 0x13a4a4a2, 0x08818ae4, 0xe1687e67, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf07f, 0x614f, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x83c9ef5a, 0xb5933c7e, 0x2dc23d71, 0x5723ae27, 0x1218bc2c, 0x456f3dbd, 0xf6ee7d22, 0xde4df878, 0x3e800973, 0x39c4c131, 0x0676384d, 0xef62a558, 0x2acc92f2, 0x9cd71aa1, 0x00000001, 0xb00001f0 }, - FinalRegs = new uint[] { 0x83c9ef5a, 0xf30fffff, 0x2dc23d71, 0x5723ae27, 0x1218bc2c, 0x456f3dbd, 0xf6ee7d22, 0xde4df878, 0x3e800973, 0x39c4c131, 0x0676384d, 0xef62a558, 0x2acc92f2, 0x9cd71aa1, 0x00000001, 0x900001f0 }, + Instructions = [0xf07f, 0x614f, 0x4770, 0xe7fe], + StartRegs = [0x83c9ef5a, 0xb5933c7e, 0x2dc23d71, 0x5723ae27, 0x1218bc2c, 0x456f3dbd, 0xf6ee7d22, 0xde4df878, 0x3e800973, 0x39c4c131, 0x0676384d, 0xef62a558, 0x2acc92f2, 0x9cd71aa1, 0x00000001, 0xb00001f0 + ], + FinalRegs = [0x83c9ef5a, 0xf30fffff, 0x2dc23d71, 0x5723ae27, 0x1218bc2c, 0x456f3dbd, 0xf6ee7d22, 0xde4df878, 0x3e800973, 0x39c4c131, 0x0676384d, 0xef62a558, 0x2acc92f2, 0x9cd71aa1, 0x00000001, 0x900001f0 + ], }, // TEQ (imm) new() { - Instructions = new ushort[] { 0xf49b, 0x2fe4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xc87047c3, 0x99001273, 0xa963adc7, 0xaba3d1a1, 0x4b9c13a0, 0xc42566ba, 0xee0b7ab1, 0x3e4423ec, 0x5d874e97, 0xfffb5799, 0xdb88f462, 0xbdc4a9e2, 0x3933e52b, 0xe1839111, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0xc87047c3, 0x99001273, 0xa963adc7, 0xaba3d1a1, 0x4b9c13a0, 0xc42566ba, 0xee0b7ab1, 0x3e4423ec, 0x5d874e97, 0xfffb5799, 0xdb88f462, 0xbdc4a9e2, 0x3933e52b, 0xe1839111, 0x00000001, 0x800001f0 }, + Instructions = [0xf49b, 0x2fe4, 0x4770, 0xe7fe], + StartRegs = [0xc87047c3, 0x99001273, 0xa963adc7, 0xaba3d1a1, 0x4b9c13a0, 0xc42566ba, 0xee0b7ab1, 0x3e4423ec, 0x5d874e97, 0xfffb5799, 0xdb88f462, 0xbdc4a9e2, 0x3933e52b, 0xe1839111, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0xc87047c3, 0x99001273, 0xa963adc7, 0xaba3d1a1, 0x4b9c13a0, 0xc42566ba, 0xee0b7ab1, 0x3e4423ec, 0x5d874e97, 0xfffb5799, 0xdb88f462, 0xbdc4a9e2, 0x3933e52b, 0xe1839111, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf09b, 0x0f59, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6d2c2ac7, 0xdd2b59f4, 0x3fc013f4, 0x567e744e, 0xc4feb096, 0x188454f3, 0xae13338b, 0x66a0a40b, 0xac995945, 0x7e27f097, 0x547cbd54, 0xd2abf0ab, 0x02c08b3e, 0xe6d1283f, 0x00000001, 0x500001f0 }, - FinalRegs = new uint[] { 0x6d2c2ac7, 0xdd2b59f4, 0x3fc013f4, 0x567e744e, 0xc4feb096, 0x188454f3, 0xae13338b, 0x66a0a40b, 0xac995945, 0x7e27f097, 0x547cbd54, 0xd2abf0ab, 0x02c08b3e, 0xe6d1283f, 0x00000001, 0x900001f0 }, + Instructions = [0xf09b, 0x0f59, 0x4770, 0xe7fe], + StartRegs = [0x6d2c2ac7, 0xdd2b59f4, 0x3fc013f4, 0x567e744e, 0xc4feb096, 0x188454f3, 0xae13338b, 0x66a0a40b, 0xac995945, 0x7e27f097, 0x547cbd54, 0xd2abf0ab, 0x02c08b3e, 0xe6d1283f, 0x00000001, 0x500001f0 + ], + FinalRegs = [0x6d2c2ac7, 0xdd2b59f4, 0x3fc013f4, 0x567e744e, 0xc4feb096, 0x188454f3, 0xae13338b, 0x66a0a40b, 0xac995945, 0x7e27f097, 0x547cbd54, 0xd2abf0ab, 0x02c08b3e, 0xe6d1283f, 0x00000001, 0x900001f0 + ], }, new() { - Instructions = new ushort[] { 0xf494, 0x6f3d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x16342d21, 0xff794fb0, 0x513ba230, 0x7b9e4b2b, 0x9a2d1ba9, 0xebce0dae, 0xe792f2b8, 0xf4932236, 0x0bcd9542, 0x12bcab94, 0x0110b845, 0xdde237b0, 0xa401d5b9, 0xc3162f6d, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0x16342d21, 0xff794fb0, 0x513ba230, 0x7b9e4b2b, 0x9a2d1ba9, 0xebce0dae, 0xe792f2b8, 0xf4932236, 0x0bcd9542, 0x12bcab94, 0x0110b845, 0xdde237b0, 0xa401d5b9, 0xc3162f6d, 0x00000001, 0x800001f0 }, + Instructions = [0xf494, 0x6f3d, 0x4770, 0xe7fe], + StartRegs = [0x16342d21, 0xff794fb0, 0x513ba230, 0x7b9e4b2b, 0x9a2d1ba9, 0xebce0dae, 0xe792f2b8, 0xf4932236, 0x0bcd9542, 0x12bcab94, 0x0110b845, 0xdde237b0, 0xa401d5b9, 0xc3162f6d, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0x16342d21, 0xff794fb0, 0x513ba230, 0x7b9e4b2b, 0x9a2d1ba9, 0xebce0dae, 0xe792f2b8, 0xf4932236, 0x0bcd9542, 0x12bcab94, 0x0110b845, 0xdde237b0, 0xa401d5b9, 0xc3162f6d, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf09c, 0x6f59, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x8d9e2002, 0xfa519294, 0x700740d6, 0x29220c73, 0x8f0ad8b2, 0x6ce9d5e8, 0x12f9da7a, 0x286a9813, 0x2be49d73, 0x16241aa1, 0xe096f43b, 0x1fd0d3e2, 0x31791bb5, 0xa4943f4e, 0x00000001, 0xe00001f0 }, - FinalRegs = new uint[] { 0x8d9e2002, 0xfa519294, 0x700740d6, 0x29220c73, 0x8f0ad8b2, 0x6ce9d5e8, 0x12f9da7a, 0x286a9813, 0x2be49d73, 0x16241aa1, 0xe096f43b, 0x1fd0d3e2, 0x31791bb5, 0xa4943f4e, 0x00000001, 0x000001f0 }, + Instructions = [0xf09c, 0x6f59, 0x4770, 0xe7fe], + StartRegs = [0x8d9e2002, 0xfa519294, 0x700740d6, 0x29220c73, 0x8f0ad8b2, 0x6ce9d5e8, 0x12f9da7a, 0x286a9813, 0x2be49d73, 0x16241aa1, 0xe096f43b, 0x1fd0d3e2, 0x31791bb5, 0xa4943f4e, 0x00000001, 0xe00001f0 + ], + FinalRegs = [0x8d9e2002, 0xfa519294, 0x700740d6, 0x29220c73, 0x8f0ad8b2, 0x6ce9d5e8, 0x12f9da7a, 0x286a9813, 0x2be49d73, 0x16241aa1, 0xe096f43b, 0x1fd0d3e2, 0x31791bb5, 0xa4943f4e, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf094, 0x6f35, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x222e0e7c, 0xa89d1fdf, 0xa7d67bc3, 0x658e1ee9, 0x10b41780, 0x5cd566a4, 0xce03a58a, 0x63fb9a9e, 0x4f5cb2bd, 0x14e72619, 0x296a9bd5, 0xbf7b1fb1, 0x705a45cc, 0xba8540ae, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0x222e0e7c, 0xa89d1fdf, 0xa7d67bc3, 0x658e1ee9, 0x10b41780, 0x5cd566a4, 0xce03a58a, 0x63fb9a9e, 0x4f5cb2bd, 0x14e72619, 0x296a9bd5, 0xbf7b1fb1, 0x705a45cc, 0xba8540ae, 0x00000001, 0x000001f0 }, + Instructions = [0xf094, 0x6f35, 0x4770, 0xe7fe], + StartRegs = [0x222e0e7c, 0xa89d1fdf, 0xa7d67bc3, 0x658e1ee9, 0x10b41780, 0x5cd566a4, 0xce03a58a, 0x63fb9a9e, 0x4f5cb2bd, 0x14e72619, 0x296a9bd5, 0xbf7b1fb1, 0x705a45cc, 0xba8540ae, 0x00000001, 0x000001f0 + ], + FinalRegs = [0x222e0e7c, 0xa89d1fdf, 0xa7d67bc3, 0x658e1ee9, 0x10b41780, 0x5cd566a4, 0xce03a58a, 0x63fb9a9e, 0x4f5cb2bd, 0x14e72619, 0x296a9bd5, 0xbf7b1fb1, 0x705a45cc, 0xba8540ae, 0x00000001, 0x000001f0 + ], }, // EOR (imm) new() { - Instructions = new ushort[] { 0xf496, 0x54fb, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6267728b, 0xc834f7c7, 0xa136a1d6, 0xfd9533e9, 0x096db729, 0x8fff8a73, 0x6a45348e, 0xd52111ed, 0xa5640aff, 0xa4cf82a6, 0x5ab70b5c, 0x5b3c4563, 0xf1a91ab7, 0x5718fdd1, 0x00000001, 0x500001f0 }, - FinalRegs = new uint[] { 0x6267728b, 0xc834f7c7, 0xa136a1d6, 0xfd9533e9, 0x6a452bee, 0x8fff8a73, 0x6a45348e, 0xd52111ed, 0xa5640aff, 0xa4cf82a6, 0x5ab70b5c, 0x5b3c4563, 0xf1a91ab7, 0x5718fdd1, 0x00000001, 0x100001f0 }, + Instructions = [0xf496, 0x54fb, 0x4770, 0xe7fe], + StartRegs = [0x6267728b, 0xc834f7c7, 0xa136a1d6, 0xfd9533e9, 0x096db729, 0x8fff8a73, 0x6a45348e, 0xd52111ed, 0xa5640aff, 0xa4cf82a6, 0x5ab70b5c, 0x5b3c4563, 0xf1a91ab7, 0x5718fdd1, 0x00000001, 0x500001f0 + ], + FinalRegs = [0x6267728b, 0xc834f7c7, 0xa136a1d6, 0xfd9533e9, 0x6a452bee, 0x8fff8a73, 0x6a45348e, 0xd52111ed, 0xa5640aff, 0xa4cf82a6, 0x5ab70b5c, 0x5b3c4563, 0xf1a91ab7, 0x5718fdd1, 0x00000001, 0x100001f0 + ], }, new() { - Instructions = new ushort[] { 0xf08a, 0x339d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xbf1e6da6, 0x2c10408a, 0xe961ddde, 0x5add8306, 0xc266064d, 0xa79569e1, 0x945c28ed, 0xb996f578, 0x68082b6e, 0x14cdd2c7, 0x7d0cc6a2, 0x8d6edfbf, 0x9151e24c, 0x63eaee32, 0x00000001, 0x300001f0 }, - FinalRegs = new uint[] { 0xbf1e6da6, 0x2c10408a, 0xe961ddde, 0xe0915b3f, 0xc266064d, 0xa79569e1, 0x945c28ed, 0xb996f578, 0x68082b6e, 0x14cdd2c7, 0x7d0cc6a2, 0x8d6edfbf, 0x9151e24c, 0x63eaee32, 0x00000001, 0x300001f0 }, + Instructions = [0xf08a, 0x339d, 0x4770, 0xe7fe], + StartRegs = [0xbf1e6da6, 0x2c10408a, 0xe961ddde, 0x5add8306, 0xc266064d, 0xa79569e1, 0x945c28ed, 0xb996f578, 0x68082b6e, 0x14cdd2c7, 0x7d0cc6a2, 0x8d6edfbf, 0x9151e24c, 0x63eaee32, 0x00000001, 0x300001f0 + ], + FinalRegs = [0xbf1e6da6, 0x2c10408a, 0xe961ddde, 0xe0915b3f, 0xc266064d, 0xa79569e1, 0x945c28ed, 0xb996f578, 0x68082b6e, 0x14cdd2c7, 0x7d0cc6a2, 0x8d6edfbf, 0x9151e24c, 0x63eaee32, 0x00000001, 0x300001f0 + ], }, new() { - Instructions = new ushort[] { 0xf490, 0x27d8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd6826a86, 0x39aa35f5, 0x2a8a913e, 0xd9dbf560, 0xcb1a9957, 0xe6779d2f, 0x0eeab3f9, 0xa463d4c2, 0xb3187660, 0xa51778c3, 0x73817179, 0x6d6dae92, 0x864a3e80, 0x43d8f181, 0x00000001, 0xe00001f0 }, - FinalRegs = new uint[] { 0xd6826a86, 0x39aa35f5, 0x2a8a913e, 0xd9dbf560, 0xcb1a9957, 0xe6779d2f, 0x0eeab3f9, 0xd684aa86, 0xb3187660, 0xa51778c3, 0x73817179, 0x6d6dae92, 0x864a3e80, 0x43d8f181, 0x00000001, 0x800001f0 }, + Instructions = [0xf490, 0x27d8, 0x4770, 0xe7fe], + StartRegs = [0xd6826a86, 0x39aa35f5, 0x2a8a913e, 0xd9dbf560, 0xcb1a9957, 0xe6779d2f, 0x0eeab3f9, 0xa463d4c2, 0xb3187660, 0xa51778c3, 0x73817179, 0x6d6dae92, 0x864a3e80, 0x43d8f181, 0x00000001, 0xe00001f0 + ], + FinalRegs = [0xd6826a86, 0x39aa35f5, 0x2a8a913e, 0xd9dbf560, 0xcb1a9957, 0xe6779d2f, 0x0eeab3f9, 0xd684aa86, 0xb3187660, 0xa51778c3, 0x73817179, 0x6d6dae92, 0x864a3e80, 0x43d8f181, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf485, 0x3d32, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x063885c0, 0xa183a44d, 0x5cb2f961, 0xe44b8670, 0x8ec25495, 0xb8f5a831, 0x1c2fecb4, 0xfc15fcff, 0x28dd902e, 0xf0c875f4, 0x0af03bb5, 0xefe4ba8b, 0x10e57000, 0x4cd51767, 0x00000001, 0xb00001f0 }, - FinalRegs = new uint[] { 0x063885c0, 0xa183a44d, 0x5cb2f961, 0xe44b8670, 0x8ec25495, 0xb8f5a831, 0x1c2fecb4, 0xfc15fcff, 0x28dd902e, 0xf0c875f4, 0x0af03bb5, 0xefe4ba8b, 0x10e57000, 0xb8f76031, 0x00000001, 0xb00001f0 }, + Instructions = [0xf485, 0x3d32, 0x4770, 0xe7fe], + StartRegs = [0x063885c0, 0xa183a44d, 0x5cb2f961, 0xe44b8670, 0x8ec25495, 0xb8f5a831, 0x1c2fecb4, 0xfc15fcff, 0x28dd902e, 0xf0c875f4, 0x0af03bb5, 0xefe4ba8b, 0x10e57000, 0x4cd51767, 0x00000001, 0xb00001f0 + ], + FinalRegs = [0x063885c0, 0xa183a44d, 0x5cb2f961, 0xe44b8670, 0x8ec25495, 0xb8f5a831, 0x1c2fecb4, 0xfc15fcff, 0x28dd902e, 0xf0c875f4, 0x0af03bb5, 0xefe4ba8b, 0x10e57000, 0xb8f76031, 0x00000001, 0xb00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf095, 0x58e8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5a60610b, 0x4d178413, 0x3b12edd0, 0x23afc7fc, 0x47f0647d, 0x327bd294, 0x52351d80, 0x36733323, 0x490a0d2a, 0x75d5888c, 0x9b45f4e6, 0x89ebf7dc, 0xd278dd78, 0x1b9b0bbd, 0x00000001, 0x400001f0 }, - FinalRegs = new uint[] { 0x5a60610b, 0x4d178413, 0x3b12edd0, 0x23afc7fc, 0x47f0647d, 0x327bd294, 0x52351d80, 0x36733323, 0x2f7bd294, 0x75d5888c, 0x9b45f4e6, 0x89ebf7dc, 0xd278dd78, 0x1b9b0bbd, 0x00000001, 0x000001f0 }, + Instructions = [0xf095, 0x58e8, 0x4770, 0xe7fe], + StartRegs = [0x5a60610b, 0x4d178413, 0x3b12edd0, 0x23afc7fc, 0x47f0647d, 0x327bd294, 0x52351d80, 0x36733323, 0x490a0d2a, 0x75d5888c, 0x9b45f4e6, 0x89ebf7dc, 0xd278dd78, 0x1b9b0bbd, 0x00000001, 0x400001f0 + ], + FinalRegs = [0x5a60610b, 0x4d178413, 0x3b12edd0, 0x23afc7fc, 0x47f0647d, 0x327bd294, 0x52351d80, 0x36733323, 0x2f7bd294, 0x75d5888c, 0x9b45f4e6, 0x89ebf7dc, 0xd278dd78, 0x1b9b0bbd, 0x00000001, 0x000001f0 + ], }, // CMN (imm) new() { - Instructions = new ushort[] { 0xf514, 0x6f12, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xec864396, 0xe2f483b8, 0x18df08c9, 0xae7780ba, 0xd16bc913, 0x892037de, 0x84a3589e, 0x3a468960, 0x004f92e4, 0x6fd793c2, 0x81b048c6, 0xe044e7cf, 0x2199ccda, 0x4667415d, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0xec864396, 0xe2f483b8, 0x18df08c9, 0xae7780ba, 0xd16bc913, 0x892037de, 0x84a3589e, 0x3a468960, 0x004f92e4, 0x6fd793c2, 0x81b048c6, 0xe044e7cf, 0x2199ccda, 0x4667415d, 0x00000001, 0x800001f0 }, + Instructions = [0xf514, 0x6f12, 0x4770, 0xe7fe], + StartRegs = [0xec864396, 0xe2f483b8, 0x18df08c9, 0xae7780ba, 0xd16bc913, 0x892037de, 0x84a3589e, 0x3a468960, 0x004f92e4, 0x6fd793c2, 0x81b048c6, 0xe044e7cf, 0x2199ccda, 0x4667415d, 0x00000001, 0x000001f0 + ], + FinalRegs = [0xec864396, 0xe2f483b8, 0x18df08c9, 0xae7780ba, 0xd16bc913, 0x892037de, 0x84a3589e, 0x3a468960, 0x004f92e4, 0x6fd793c2, 0x81b048c6, 0xe044e7cf, 0x2199ccda, 0x4667415d, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf517, 0x2f38, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x154548b0, 0x28aed64c, 0x533306b3, 0x8eace432, 0x9a6523f1, 0x22b08ccb, 0xe7fceaf6, 0x45429c2c, 0xf58378c1, 0x0ef49416, 0x88dbd472, 0xf6a35b6c, 0x46b19364, 0x52e4982d, 0x00000001, 0x900001f0 }, - FinalRegs = new uint[] { 0x154548b0, 0x28aed64c, 0x533306b3, 0x8eace432, 0x9a6523f1, 0x22b08ccb, 0xe7fceaf6, 0x45429c2c, 0xf58378c1, 0x0ef49416, 0x88dbd472, 0xf6a35b6c, 0x46b19364, 0x52e4982d, 0x00000001, 0x000001f0 }, + Instructions = [0xf517, 0x2f38, 0x4770, 0xe7fe], + StartRegs = [0x154548b0, 0x28aed64c, 0x533306b3, 0x8eace432, 0x9a6523f1, 0x22b08ccb, 0xe7fceaf6, 0x45429c2c, 0xf58378c1, 0x0ef49416, 0x88dbd472, 0xf6a35b6c, 0x46b19364, 0x52e4982d, 0x00000001, 0x900001f0 + ], + FinalRegs = [0x154548b0, 0x28aed64c, 0x533306b3, 0x8eace432, 0x9a6523f1, 0x22b08ccb, 0xe7fceaf6, 0x45429c2c, 0xf58378c1, 0x0ef49416, 0x88dbd472, 0xf6a35b6c, 0x46b19364, 0x52e4982d, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf116, 0x7fe2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x30b90186, 0xec7b038f, 0xcb392feb, 0x10c09c2f, 0x8619521d, 0xcf8d7075, 0x108f8f49, 0x6e44275d, 0x1728faed, 0xf2a0b2a4, 0x783cf97f, 0x201d6d0b, 0x317f276d, 0x5a7186e2, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0x30b90186, 0xec7b038f, 0xcb392feb, 0x10c09c2f, 0x8619521d, 0xcf8d7075, 0x108f8f49, 0x6e44275d, 0x1728faed, 0xf2a0b2a4, 0x783cf97f, 0x201d6d0b, 0x317f276d, 0x5a7186e2, 0x00000001, 0x000001f0 }, + Instructions = [0xf116, 0x7fe2, 0x4770, 0xe7fe], + StartRegs = [0x30b90186, 0xec7b038f, 0xcb392feb, 0x10c09c2f, 0x8619521d, 0xcf8d7075, 0x108f8f49, 0x6e44275d, 0x1728faed, 0xf2a0b2a4, 0x783cf97f, 0x201d6d0b, 0x317f276d, 0x5a7186e2, 0x00000001, 0x200001f0 + ], + FinalRegs = [0x30b90186, 0xec7b038f, 0xcb392feb, 0x10c09c2f, 0x8619521d, 0xcf8d7075, 0x108f8f49, 0x6e44275d, 0x1728faed, 0xf2a0b2a4, 0x783cf97f, 0x201d6d0b, 0x317f276d, 0x5a7186e2, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf51b, 0x7f4a, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xedd3c03d, 0xd7cce5a2, 0xfc40b40a, 0x6a9c96f3, 0x40ca8c2d, 0xaa2973e1, 0xd7953408, 0xfa11d2df, 0x7cec28c2, 0x4e523380, 0x007a4ac6, 0x03890c29, 0xd1495b3e, 0xdf1af969, 0x00000001, 0x500001f0 }, - FinalRegs = new uint[] { 0xedd3c03d, 0xd7cce5a2, 0xfc40b40a, 0x6a9c96f3, 0x40ca8c2d, 0xaa2973e1, 0xd7953408, 0xfa11d2df, 0x7cec28c2, 0x4e523380, 0x007a4ac6, 0x03890c29, 0xd1495b3e, 0xdf1af969, 0x00000001, 0x000001f0 }, + Instructions = [0xf51b, 0x7f4a, 0x4770, 0xe7fe], + StartRegs = [0xedd3c03d, 0xd7cce5a2, 0xfc40b40a, 0x6a9c96f3, 0x40ca8c2d, 0xaa2973e1, 0xd7953408, 0xfa11d2df, 0x7cec28c2, 0x4e523380, 0x007a4ac6, 0x03890c29, 0xd1495b3e, 0xdf1af969, 0x00000001, 0x500001f0 + ], + FinalRegs = [0xedd3c03d, 0xd7cce5a2, 0xfc40b40a, 0x6a9c96f3, 0x40ca8c2d, 0xaa2973e1, 0xd7953408, 0xfa11d2df, 0x7cec28c2, 0x4e523380, 0x007a4ac6, 0x03890c29, 0xd1495b3e, 0xdf1af969, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf11c, 0x5f9c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd8c0c360, 0xd50bcc87, 0xe265e8b2, 0xca49cc71, 0xa6bb11c8, 0x13649388, 0x034a4c8c, 0xa3b4c570, 0x014d32ac, 0x1847d102, 0x7fc3678d, 0xb0e0f469, 0x9508a619, 0x2a2372e0, 0x00000001, 0xa00001f0 }, - FinalRegs = new uint[] { 0xd8c0c360, 0xd50bcc87, 0xe265e8b2, 0xca49cc71, 0xa6bb11c8, 0x13649388, 0x034a4c8c, 0xa3b4c570, 0x014d32ac, 0x1847d102, 0x7fc3678d, 0xb0e0f469, 0x9508a619, 0x2a2372e0, 0x00000001, 0x800001f0 }, + Instructions = [0xf11c, 0x5f9c, 0x4770, 0xe7fe], + StartRegs = [0xd8c0c360, 0xd50bcc87, 0xe265e8b2, 0xca49cc71, 0xa6bb11c8, 0x13649388, 0x034a4c8c, 0xa3b4c570, 0x014d32ac, 0x1847d102, 0x7fc3678d, 0xb0e0f469, 0x9508a619, 0x2a2372e0, 0x00000001, 0xa00001f0 + ], + FinalRegs = [0xd8c0c360, 0xd50bcc87, 0xe265e8b2, 0xca49cc71, 0xa6bb11c8, 0x13649388, 0x034a4c8c, 0xa3b4c570, 0x014d32ac, 0x1847d102, 0x7fc3678d, 0xb0e0f469, 0x9508a619, 0x2a2372e0, 0x00000001, 0x800001f0 + ], }, // ADD (imm) new() { - Instructions = new ushort[] { 0xf10b, 0x00e0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xadc2fe68, 0xa8a14518, 0x5baf5e87, 0x17e2b502, 0x638227c2, 0xba11428f, 0x98c5b963, 0x5b9cbcd3, 0xb4c11f97, 0x0ca6832e, 0xea26efa6, 0x7bb19ec8, 0x8ea04a89, 0x62d597c2, 0x00000001, 0x300001f0 }, - FinalRegs = new uint[] { 0x7bb19fa8, 0xa8a14518, 0x5baf5e87, 0x17e2b502, 0x638227c2, 0xba11428f, 0x98c5b963, 0x5b9cbcd3, 0xb4c11f97, 0x0ca6832e, 0xea26efa6, 0x7bb19ec8, 0x8ea04a89, 0x62d597c2, 0x00000001, 0x300001f0 }, + Instructions = [0xf10b, 0x00e0, 0x4770, 0xe7fe], + StartRegs = [0xadc2fe68, 0xa8a14518, 0x5baf5e87, 0x17e2b502, 0x638227c2, 0xba11428f, 0x98c5b963, 0x5b9cbcd3, 0xb4c11f97, 0x0ca6832e, 0xea26efa6, 0x7bb19ec8, 0x8ea04a89, 0x62d597c2, 0x00000001, 0x300001f0 + ], + FinalRegs = [0x7bb19fa8, 0xa8a14518, 0x5baf5e87, 0x17e2b502, 0x638227c2, 0xba11428f, 0x98c5b963, 0x5b9cbcd3, 0xb4c11f97, 0x0ca6832e, 0xea26efa6, 0x7bb19ec8, 0x8ea04a89, 0x62d597c2, 0x00000001, 0x300001f0 + ], }, new() { - Instructions = new ushort[] { 0xf114, 0x7b41, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x9366f694, 0x02670e58, 0x6f3e74b8, 0x567d3e30, 0xeebb29c4, 0xc25ce8e6, 0x942b94c8, 0xc7dccdd9, 0xccfe17a9, 0xeacc4db1, 0xbbbc0fde, 0x248b7093, 0x7f66c92d, 0xfc063cb6, 0x00000001, 0xe00001f0 }, - FinalRegs = new uint[] { 0x9366f694, 0x02670e58, 0x6f3e74b8, 0x567d3e30, 0xeebb29c4, 0xc25ce8e6, 0x942b94c8, 0xc7dccdd9, 0xccfe17a9, 0xeacc4db1, 0xbbbc0fde, 0xf1bf29c4, 0x7f66c92d, 0xfc063cb6, 0x00000001, 0x800001f0 }, + Instructions = [0xf114, 0x7b41, 0x4770, 0xe7fe], + StartRegs = [0x9366f694, 0x02670e58, 0x6f3e74b8, 0x567d3e30, 0xeebb29c4, 0xc25ce8e6, 0x942b94c8, 0xc7dccdd9, 0xccfe17a9, 0xeacc4db1, 0xbbbc0fde, 0x248b7093, 0x7f66c92d, 0xfc063cb6, 0x00000001, 0xe00001f0 + ], + FinalRegs = [0x9366f694, 0x02670e58, 0x6f3e74b8, 0x567d3e30, 0xeebb29c4, 0xc25ce8e6, 0x942b94c8, 0xc7dccdd9, 0xccfe17a9, 0xeacc4db1, 0xbbbc0fde, 0xf1bf29c4, 0x7f66c92d, 0xfc063cb6, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf51c, 0x21d1, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x2b53ae1e, 0x733046c3, 0xbcc33a3a, 0x2f7bbd50, 0xed2a39f2, 0xfee631ec, 0xeb6d3bc3, 0x9f9b502d, 0x30d20f7b, 0xdc75211b, 0xdb234e2b, 0x85008c86, 0x43beb508, 0x6a8303d5, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0x2b53ae1e, 0x43c53d08, 0xbcc33a3a, 0x2f7bbd50, 0xed2a39f2, 0xfee631ec, 0xeb6d3bc3, 0x9f9b502d, 0x30d20f7b, 0xdc75211b, 0xdb234e2b, 0x85008c86, 0x43beb508, 0x6a8303d5, 0x00000001, 0x000001f0 }, + Instructions = [0xf51c, 0x21d1, 0x4770, 0xe7fe], + StartRegs = [0x2b53ae1e, 0x733046c3, 0xbcc33a3a, 0x2f7bbd50, 0xed2a39f2, 0xfee631ec, 0xeb6d3bc3, 0x9f9b502d, 0x30d20f7b, 0xdc75211b, 0xdb234e2b, 0x85008c86, 0x43beb508, 0x6a8303d5, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0x2b53ae1e, 0x43c53d08, 0xbcc33a3a, 0x2f7bbd50, 0xed2a39f2, 0xfee631ec, 0xeb6d3bc3, 0x9f9b502d, 0x30d20f7b, 0xdc75211b, 0xdb234e2b, 0x85008c86, 0x43beb508, 0x6a8303d5, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf513, 0x22e8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xbb3b52c1, 0x40ff59f3, 0x05ca09c5, 0x440114be, 0xec3a4022, 0x0ff93d8c, 0x38868879, 0x824d36d8, 0xf513a9d8, 0xf1d0ad5a, 0xc453fdd8, 0xe3dc8d52, 0x1fc5a9ef, 0x809dbe9b, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0xbb3b52c1, 0x40ff59f3, 0x440854be, 0x440114be, 0xec3a4022, 0x0ff93d8c, 0x38868879, 0x824d36d8, 0xf513a9d8, 0xf1d0ad5a, 0xc453fdd8, 0xe3dc8d52, 0x1fc5a9ef, 0x809dbe9b, 0x00000001, 0x000001f0 }, + Instructions = [0xf513, 0x22e8, 0x4770, 0xe7fe], + StartRegs = [0xbb3b52c1, 0x40ff59f3, 0x05ca09c5, 0x440114be, 0xec3a4022, 0x0ff93d8c, 0x38868879, 0x824d36d8, 0xf513a9d8, 0xf1d0ad5a, 0xc453fdd8, 0xe3dc8d52, 0x1fc5a9ef, 0x809dbe9b, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0xbb3b52c1, 0x40ff59f3, 0x440854be, 0x440114be, 0xec3a4022, 0x0ff93d8c, 0x38868879, 0x824d36d8, 0xf513a9d8, 0xf1d0ad5a, 0xc453fdd8, 0xe3dc8d52, 0x1fc5a9ef, 0x809dbe9b, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf518, 0x68c7, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xf9c00a78, 0xf47ee408, 0xdc31e40b, 0x167902da, 0x03b23f2f, 0x6d41efdc, 0x9cb99b17, 0x21bfbf63, 0x9fbe8105, 0x250087d0, 0xe0588965, 0x0f0f669c, 0x2ed04b37, 0xc65c6e2e, 0x00000001, 0x100001f0 }, - FinalRegs = new uint[] { 0xf9c00a78, 0xf47ee408, 0xdc31e40b, 0x167902da, 0x03b23f2f, 0x6d41efdc, 0x9cb99b17, 0x21bfbf63, 0x9fbe873d, 0x250087d0, 0xe0588965, 0x0f0f669c, 0x2ed04b37, 0xc65c6e2e, 0x00000001, 0x800001f0 }, + Instructions = [0xf518, 0x68c7, 0x4770, 0xe7fe], + StartRegs = [0xf9c00a78, 0xf47ee408, 0xdc31e40b, 0x167902da, 0x03b23f2f, 0x6d41efdc, 0x9cb99b17, 0x21bfbf63, 0x9fbe8105, 0x250087d0, 0xe0588965, 0x0f0f669c, 0x2ed04b37, 0xc65c6e2e, 0x00000001, 0x100001f0 + ], + FinalRegs = [0xf9c00a78, 0xf47ee408, 0xdc31e40b, 0x167902da, 0x03b23f2f, 0x6d41efdc, 0x9cb99b17, 0x21bfbf63, 0x9fbe873d, 0x250087d0, 0xe0588965, 0x0f0f669c, 0x2ed04b37, 0xc65c6e2e, 0x00000001, 0x800001f0 + ], }, // ADC (imm) new() { - Instructions = new ushort[] { 0xf54d, 0x379a, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x09eb57e5, 0xc9981095, 0x94b0bf26, 0x27080c39, 0x9fba115a, 0xde0e1533, 0xaa5916aa, 0x1bfc2313, 0x32a96f13, 0x5b8f2d6c, 0x9098dcf2, 0x86143a3f, 0x5c004908, 0xd233cd08, 0x00000001, 0x300001f0 }, - FinalRegs = new uint[] { 0x09eb57e5, 0xc9981095, 0x94b0bf26, 0x27080c39, 0x9fba115a, 0xde0e1533, 0xaa5916aa, 0xd2350109, 0x32a96f13, 0x5b8f2d6c, 0x9098dcf2, 0x86143a3f, 0x5c004908, 0xd233cd08, 0x00000001, 0x300001f0 }, + Instructions = [0xf54d, 0x379a, 0x4770, 0xe7fe], + StartRegs = [0x09eb57e5, 0xc9981095, 0x94b0bf26, 0x27080c39, 0x9fba115a, 0xde0e1533, 0xaa5916aa, 0x1bfc2313, 0x32a96f13, 0x5b8f2d6c, 0x9098dcf2, 0x86143a3f, 0x5c004908, 0xd233cd08, 0x00000001, 0x300001f0 + ], + FinalRegs = [0x09eb57e5, 0xc9981095, 0x94b0bf26, 0x27080c39, 0x9fba115a, 0xde0e1533, 0xaa5916aa, 0xd2350109, 0x32a96f13, 0x5b8f2d6c, 0x9098dcf2, 0x86143a3f, 0x5c004908, 0xd233cd08, 0x00000001, 0x300001f0 + ], }, new() { - Instructions = new ushort[] { 0xf149, 0x3a77, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xe32aaf45, 0x05fe0eac, 0x9c782c15, 0x9301164b, 0xa2f59aea, 0xe6b2618b, 0xfceb237a, 0xcfeb98bd, 0xaaa75e8d, 0xbb57f750, 0xd282f40d, 0xa181d4d7, 0x93313b48, 0x9a64c67f, 0x00000001, 0xf00001f0 }, - FinalRegs = new uint[] { 0xe32aaf45, 0x05fe0eac, 0x9c782c15, 0x9301164b, 0xa2f59aea, 0xe6b2618b, 0xfceb237a, 0xcfeb98bd, 0xaaa75e8d, 0xbb57f750, 0x32cf6ec8, 0xa181d4d7, 0x93313b48, 0x9a64c67f, 0x00000001, 0xf00001f0 }, + Instructions = [0xf149, 0x3a77, 0x4770, 0xe7fe], + StartRegs = [0xe32aaf45, 0x05fe0eac, 0x9c782c15, 0x9301164b, 0xa2f59aea, 0xe6b2618b, 0xfceb237a, 0xcfeb98bd, 0xaaa75e8d, 0xbb57f750, 0xd282f40d, 0xa181d4d7, 0x93313b48, 0x9a64c67f, 0x00000001, 0xf00001f0 + ], + FinalRegs = [0xe32aaf45, 0x05fe0eac, 0x9c782c15, 0x9301164b, 0xa2f59aea, 0xe6b2618b, 0xfceb237a, 0xcfeb98bd, 0xaaa75e8d, 0xbb57f750, 0x32cf6ec8, 0xa181d4d7, 0x93313b48, 0x9a64c67f, 0x00000001, 0xf00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf549, 0x57c8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x67da941e, 0x5d744410, 0x1f93bf8f, 0xb52727e0, 0x77ce10fe, 0xe7a40291, 0x40ac5a1f, 0x127e801f, 0x68233546, 0xdbe8086f, 0x82b65e68, 0xcf35c09b, 0x8846e02d, 0x5fd54256, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0x67da941e, 0x5d744410, 0x1f93bf8f, 0xb52727e0, 0x77ce10fe, 0xe7a40291, 0x40ac5a1f, 0xdbe82170, 0x68233546, 0xdbe8086f, 0x82b65e68, 0xcf35c09b, 0x8846e02d, 0x5fd54256, 0x00000001, 0x200001f0 }, + Instructions = [0xf549, 0x57c8, 0x4770, 0xe7fe], + StartRegs = [0x67da941e, 0x5d744410, 0x1f93bf8f, 0xb52727e0, 0x77ce10fe, 0xe7a40291, 0x40ac5a1f, 0x127e801f, 0x68233546, 0xdbe8086f, 0x82b65e68, 0xcf35c09b, 0x8846e02d, 0x5fd54256, 0x00000001, 0x200001f0 + ], + FinalRegs = [0x67da941e, 0x5d744410, 0x1f93bf8f, 0xb52727e0, 0x77ce10fe, 0xe7a40291, 0x40ac5a1f, 0xdbe82170, 0x68233546, 0xdbe8086f, 0x82b65e68, 0xcf35c09b, 0x8846e02d, 0x5fd54256, 0x00000001, 0x200001f0 + ], }, new() { - Instructions = new ushort[] { 0xf15c, 0x1649, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x86cf07b1, 0x1c86e00f, 0x8dc39789, 0xe8fafb40, 0xb837bf22, 0xe9c2c765, 0xb9e8b84b, 0xdbc9663e, 0x979b81da, 0xfb7a5636, 0x9012981d, 0xf52ec47c, 0xf98f6294, 0xaf70ff24, 0x00000001, 0xe00001f0 }, - FinalRegs = new uint[] { 0x86cf07b1, 0x1c86e00f, 0x8dc39789, 0xe8fafb40, 0xb837bf22, 0xe9c2c765, 0xf9d862de, 0xdbc9663e, 0x979b81da, 0xfb7a5636, 0x9012981d, 0xf52ec47c, 0xf98f6294, 0xaf70ff24, 0x00000001, 0x800001f0 }, + Instructions = [0xf15c, 0x1649, 0x4770, 0xe7fe], + StartRegs = [0x86cf07b1, 0x1c86e00f, 0x8dc39789, 0xe8fafb40, 0xb837bf22, 0xe9c2c765, 0xb9e8b84b, 0xdbc9663e, 0x979b81da, 0xfb7a5636, 0x9012981d, 0xf52ec47c, 0xf98f6294, 0xaf70ff24, 0x00000001, 0xe00001f0 + ], + FinalRegs = [0x86cf07b1, 0x1c86e00f, 0x8dc39789, 0xe8fafb40, 0xb837bf22, 0xe9c2c765, 0xf9d862de, 0xdbc9663e, 0x979b81da, 0xfb7a5636, 0x9012981d, 0xf52ec47c, 0xf98f6294, 0xaf70ff24, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf144, 0x6ab6, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x151549e7, 0xbdfa6ced, 0x47ba5025, 0xaba24048, 0x17c38ef8, 0xf92095ec, 0xdccd5b6f, 0xcb3878a5, 0x30d25594, 0x94886d84, 0xaec74633, 0xbe39725f, 0x439d8ef1, 0xcd66a204, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0x151549e7, 0xbdfa6ced, 0x47ba5025, 0xaba24048, 0x17c38ef8, 0xf92095ec, 0xdccd5b6f, 0xcb3878a5, 0x30d25594, 0x94886d84, 0x1d738ef8, 0xbe39725f, 0x439d8ef1, 0xcd66a204, 0x00000001, 0x000001f0 }, + Instructions = [0xf144, 0x6ab6, 0x4770, 0xe7fe], + StartRegs = [0x151549e7, 0xbdfa6ced, 0x47ba5025, 0xaba24048, 0x17c38ef8, 0xf92095ec, 0xdccd5b6f, 0xcb3878a5, 0x30d25594, 0x94886d84, 0xaec74633, 0xbe39725f, 0x439d8ef1, 0xcd66a204, 0x00000001, 0x000001f0 + ], + FinalRegs = [0x151549e7, 0xbdfa6ced, 0x47ba5025, 0xaba24048, 0x17c38ef8, 0xf92095ec, 0xdccd5b6f, 0xcb3878a5, 0x30d25594, 0x94886d84, 0x1d738ef8, 0xbe39725f, 0x439d8ef1, 0xcd66a204, 0x00000001, 0x000001f0 + ], }, // SBC (imm) new() { - Instructions = new ushort[] { 0xf565, 0x3beb, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x23efd21b, 0x78e2f658, 0x37a4e044, 0x8feab92a, 0x9795995f, 0x66c7ddab, 0x1c29040f, 0x10034172, 0x2eede540, 0x961c1400, 0x34cf45b9, 0xdb736f38, 0xd601c8ed, 0x99a714af, 0x00000001, 0xf00001f0 }, - FinalRegs = new uint[] { 0x23efd21b, 0x78e2f658, 0x37a4e044, 0x8feab92a, 0x9795995f, 0x66c7ddab, 0x1c29040f, 0x10034172, 0x2eede540, 0x961c1400, 0x34cf45b9, 0x66c607ab, 0xd601c8ed, 0x99a714af, 0x00000001, 0xf00001f0 }, + Instructions = [0xf565, 0x3beb, 0x4770, 0xe7fe], + StartRegs = [0x23efd21b, 0x78e2f658, 0x37a4e044, 0x8feab92a, 0x9795995f, 0x66c7ddab, 0x1c29040f, 0x10034172, 0x2eede540, 0x961c1400, 0x34cf45b9, 0xdb736f38, 0xd601c8ed, 0x99a714af, 0x00000001, 0xf00001f0 + ], + FinalRegs = [0x23efd21b, 0x78e2f658, 0x37a4e044, 0x8feab92a, 0x9795995f, 0x66c7ddab, 0x1c29040f, 0x10034172, 0x2eede540, 0x961c1400, 0x34cf45b9, 0x66c607ab, 0xd601c8ed, 0x99a714af, 0x00000001, 0xf00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf172, 0x1b0d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x596b63ec, 0xb659c798, 0x300ca58e, 0x52200fa5, 0x0db74ebe, 0x01e5b394, 0xed83d480, 0x1a524b19, 0x593d9bd1, 0x1152a751, 0xf3e1cb1c, 0xfb9392e3, 0x08fc2cd9, 0xc3910cf3, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0x596b63ec, 0xb659c798, 0x300ca58e, 0x52200fa5, 0x0db74ebe, 0x01e5b394, 0xed83d480, 0x1a524b19, 0x593d9bd1, 0x1152a751, 0xf3e1cb1c, 0x2fffa580, 0x08fc2cd9, 0xc3910cf3, 0x00000001, 0x200001f0 }, + Instructions = [0xf172, 0x1b0d, 0x4770, 0xe7fe], + StartRegs = [0x596b63ec, 0xb659c798, 0x300ca58e, 0x52200fa5, 0x0db74ebe, 0x01e5b394, 0xed83d480, 0x1a524b19, 0x593d9bd1, 0x1152a751, 0xf3e1cb1c, 0xfb9392e3, 0x08fc2cd9, 0xc3910cf3, 0x00000001, 0x000001f0 + ], + FinalRegs = [0x596b63ec, 0xb659c798, 0x300ca58e, 0x52200fa5, 0x0db74ebe, 0x01e5b394, 0xed83d480, 0x1a524b19, 0x593d9bd1, 0x1152a751, 0xf3e1cb1c, 0x2fffa580, 0x08fc2cd9, 0xc3910cf3, 0x00000001, 0x200001f0 + ], }, new() { - Instructions = new ushort[] { 0xf57c, 0x14da, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5eab5df9, 0x3cfdd390, 0xcfd20097, 0xc8986688, 0xa714c17c, 0xc9eee620, 0x6626498e, 0x2de48d3c, 0xc27c794f, 0xf7d0c67f, 0x75b6b9d9, 0xbaf9f630, 0x7bd89fad, 0xe5a2e298, 0x00000001, 0xe00001f0 }, - FinalRegs = new uint[] { 0x5eab5df9, 0x3cfdd390, 0xcfd20097, 0xc8986688, 0x7bbd5fad, 0xc9eee620, 0x6626498e, 0x2de48d3c, 0xc27c794f, 0xf7d0c67f, 0x75b6b9d9, 0xbaf9f630, 0x7bd89fad, 0xe5a2e298, 0x00000001, 0x200001f0 }, + Instructions = [0xf57c, 0x14da, 0x4770, 0xe7fe], + StartRegs = [0x5eab5df9, 0x3cfdd390, 0xcfd20097, 0xc8986688, 0xa714c17c, 0xc9eee620, 0x6626498e, 0x2de48d3c, 0xc27c794f, 0xf7d0c67f, 0x75b6b9d9, 0xbaf9f630, 0x7bd89fad, 0xe5a2e298, 0x00000001, 0xe00001f0 + ], + FinalRegs = [0x5eab5df9, 0x3cfdd390, 0xcfd20097, 0xc8986688, 0x7bbd5fad, 0xc9eee620, 0x6626498e, 0x2de48d3c, 0xc27c794f, 0xf7d0c67f, 0x75b6b9d9, 0xbaf9f630, 0x7bd89fad, 0xe5a2e298, 0x00000001, 0x200001f0 + ], }, new() { - Instructions = new ushort[] { 0xf57a, 0x6bbf, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xaee56760, 0xa9f9b7d4, 0x9dd85a8c, 0x4c8cea6b, 0x7807b53d, 0xd1349b90, 0xcf320f62, 0x7af6d0c9, 0xc61fac5f, 0x23b43bbd, 0xef7466b3, 0x98e322a8, 0x1e10ae81, 0xb6987dcc, 0x00000001, 0xa00001f0 }, - FinalRegs = new uint[] { 0xaee56760, 0xa9f9b7d4, 0x9dd85a8c, 0x4c8cea6b, 0x7807b53d, 0xd1349b90, 0xcf320f62, 0x7af6d0c9, 0xc61fac5f, 0x23b43bbd, 0xef7466b3, 0xef7460bb, 0x1e10ae81, 0xb6987dcc, 0x00000001, 0xa00001f0 }, + Instructions = [0xf57a, 0x6bbf, 0x4770, 0xe7fe], + StartRegs = [0xaee56760, 0xa9f9b7d4, 0x9dd85a8c, 0x4c8cea6b, 0x7807b53d, 0xd1349b90, 0xcf320f62, 0x7af6d0c9, 0xc61fac5f, 0x23b43bbd, 0xef7466b3, 0x98e322a8, 0x1e10ae81, 0xb6987dcc, 0x00000001, 0xa00001f0 + ], + FinalRegs = [0xaee56760, 0xa9f9b7d4, 0x9dd85a8c, 0x4c8cea6b, 0x7807b53d, 0xd1349b90, 0xcf320f62, 0x7af6d0c9, 0xc61fac5f, 0x23b43bbd, 0xef7466b3, 0xef7460bb, 0x1e10ae81, 0xb6987dcc, 0x00000001, 0xa00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf171, 0x47e8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x4164d035, 0x72eecb21, 0xbb63329c, 0x8883a249, 0x230b524b, 0x40c059ae, 0x529e2950, 0xd0f7b958, 0xae900a4a, 0xa5a3f2b5, 0xe68da7f3, 0x68fececb, 0x91a2f476, 0x3986b8a0, 0x00000001, 0x400001f0 }, - FinalRegs = new uint[] { 0x4164d035, 0x72eecb21, 0xbb63329c, 0x8883a249, 0x230b524b, 0x40c059ae, 0x529e2950, 0xfeeecb20, 0xae900a4a, 0xa5a3f2b5, 0xe68da7f3, 0x68fececb, 0x91a2f476, 0x3986b8a0, 0x00000001, 0x800001f0 }, + Instructions = [0xf171, 0x47e8, 0x4770, 0xe7fe], + StartRegs = [0x4164d035, 0x72eecb21, 0xbb63329c, 0x8883a249, 0x230b524b, 0x40c059ae, 0x529e2950, 0xd0f7b958, 0xae900a4a, 0xa5a3f2b5, 0xe68da7f3, 0x68fececb, 0x91a2f476, 0x3986b8a0, 0x00000001, 0x400001f0 + ], + FinalRegs = [0x4164d035, 0x72eecb21, 0xbb63329c, 0x8883a249, 0x230b524b, 0x40c059ae, 0x529e2950, 0xfeeecb20, 0xae900a4a, 0xa5a3f2b5, 0xe68da7f3, 0x68fececb, 0x91a2f476, 0x3986b8a0, 0x00000001, 0x800001f0 + ], }, // CMP (imm) new() { - Instructions = new ushort[] { 0xf5ba, 0x7f0c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x32876eff, 0x3127746f, 0x25274f4b, 0x50ba4fa5, 0xa3013fb5, 0x4985e2cb, 0x43dad09c, 0xfb6e47f2, 0x673ee708, 0x3beee172, 0x4866bb83, 0x9368060a, 0x565ecf8e, 0xecc22394, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0x32876eff, 0x3127746f, 0x25274f4b, 0x50ba4fa5, 0xa3013fb5, 0x4985e2cb, 0x43dad09c, 0xfb6e47f2, 0x673ee708, 0x3beee172, 0x4866bb83, 0x9368060a, 0x565ecf8e, 0xecc22394, 0x00000001, 0x200001f0 }, + Instructions = [0xf5ba, 0x7f0c, 0x4770, 0xe7fe], + StartRegs = [0x32876eff, 0x3127746f, 0x25274f4b, 0x50ba4fa5, 0xa3013fb5, 0x4985e2cb, 0x43dad09c, 0xfb6e47f2, 0x673ee708, 0x3beee172, 0x4866bb83, 0x9368060a, 0x565ecf8e, 0xecc22394, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0x32876eff, 0x3127746f, 0x25274f4b, 0x50ba4fa5, 0xa3013fb5, 0x4985e2cb, 0x43dad09c, 0xfb6e47f2, 0x673ee708, 0x3beee172, 0x4866bb83, 0x9368060a, 0x565ecf8e, 0xecc22394, 0x00000001, 0x200001f0 + ], }, new() { - Instructions = new ushort[] { 0xf1b4, 0x5f0c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xabb3ffca, 0x7dbdda85, 0xe413a0d4, 0xf2ea8958, 0x81be2593, 0x8b0997e0, 0x5319660b, 0xd4edc3d0, 0x4b147c71, 0xa60a6a5f, 0x9984a94a, 0xbabe5540, 0x24df8017, 0x1e97e9f5, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0xabb3ffca, 0x7dbdda85, 0xe413a0d4, 0xf2ea8958, 0x81be2593, 0x8b0997e0, 0x5319660b, 0xd4edc3d0, 0x4b147c71, 0xa60a6a5f, 0x9984a94a, 0xbabe5540, 0x24df8017, 0x1e97e9f5, 0x00000001, 0x300001f0 }, + Instructions = [0xf1b4, 0x5f0c, 0x4770, 0xe7fe], + StartRegs = [0xabb3ffca, 0x7dbdda85, 0xe413a0d4, 0xf2ea8958, 0x81be2593, 0x8b0997e0, 0x5319660b, 0xd4edc3d0, 0x4b147c71, 0xa60a6a5f, 0x9984a94a, 0xbabe5540, 0x24df8017, 0x1e97e9f5, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0xabb3ffca, 0x7dbdda85, 0xe413a0d4, 0xf2ea8958, 0x81be2593, 0x8b0997e0, 0x5319660b, 0xd4edc3d0, 0x4b147c71, 0xa60a6a5f, 0x9984a94a, 0xbabe5540, 0x24df8017, 0x1e97e9f5, 0x00000001, 0x300001f0 + ], }, new() { - Instructions = new ushort[] { 0xf5b1, 0x0f4b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xf6edbf76, 0xd3f53e21, 0x37679835, 0x6af58147, 0x143dd6be, 0x4f6339d1, 0x0261fa88, 0x38fe033f, 0x1b503fb3, 0x802af22b, 0x22901e74, 0xae61d40e, 0xe1e850ee, 0xe353701c, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0xf6edbf76, 0xd3f53e21, 0x37679835, 0x6af58147, 0x143dd6be, 0x4f6339d1, 0x0261fa88, 0x38fe033f, 0x1b503fb3, 0x802af22b, 0x22901e74, 0xae61d40e, 0xe1e850ee, 0xe353701c, 0x00000001, 0xa00001f0 }, + Instructions = [0xf5b1, 0x0f4b, 0x4770, 0xe7fe], + StartRegs = [0xf6edbf76, 0xd3f53e21, 0x37679835, 0x6af58147, 0x143dd6be, 0x4f6339d1, 0x0261fa88, 0x38fe033f, 0x1b503fb3, 0x802af22b, 0x22901e74, 0xae61d40e, 0xe1e850ee, 0xe353701c, 0x00000001, 0x200001f0 + ], + FinalRegs = [0xf6edbf76, 0xd3f53e21, 0x37679835, 0x6af58147, 0x143dd6be, 0x4f6339d1, 0x0261fa88, 0x38fe033f, 0x1b503fb3, 0x802af22b, 0x22901e74, 0xae61d40e, 0xe1e850ee, 0xe353701c, 0x00000001, 0xa00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf5b2, 0x7f57, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x350b2e14, 0xcc603c9e, 0xa7a56491, 0x1f4fe90b, 0x6bb14aba, 0x325154ef, 0xc7655249, 0xe1a6077b, 0x145fc2f0, 0x21e0bc5e, 0x18275d8b, 0x0d8f37f0, 0xfdb56518, 0x405f5649, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0x350b2e14, 0xcc603c9e, 0xa7a56491, 0x1f4fe90b, 0x6bb14aba, 0x325154ef, 0xc7655249, 0xe1a6077b, 0x145fc2f0, 0x21e0bc5e, 0x18275d8b, 0x0d8f37f0, 0xfdb56518, 0x405f5649, 0x00000001, 0xa00001f0 }, + Instructions = [0xf5b2, 0x7f57, 0x4770, 0xe7fe], + StartRegs = [0x350b2e14, 0xcc603c9e, 0xa7a56491, 0x1f4fe90b, 0x6bb14aba, 0x325154ef, 0xc7655249, 0xe1a6077b, 0x145fc2f0, 0x21e0bc5e, 0x18275d8b, 0x0d8f37f0, 0xfdb56518, 0x405f5649, 0x00000001, 0x200001f0 + ], + FinalRegs = [0x350b2e14, 0xcc603c9e, 0xa7a56491, 0x1f4fe90b, 0x6bb14aba, 0x325154ef, 0xc7655249, 0xe1a6077b, 0x145fc2f0, 0x21e0bc5e, 0x18275d8b, 0x0d8f37f0, 0xfdb56518, 0x405f5649, 0x00000001, 0xa00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf1b7, 0x0fd0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5a7f551b, 0x624d7cb7, 0xdc3e4dab, 0xd242610e, 0x8b7213db, 0x3c4f81df, 0x353e713e, 0x0ffdfd5c, 0xe56efdf9, 0x59330bc2, 0x1b91689c, 0x5497152e, 0x7ce02ab7, 0x0127aeca, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0x5a7f551b, 0x624d7cb7, 0xdc3e4dab, 0xd242610e, 0x8b7213db, 0x3c4f81df, 0x353e713e, 0x0ffdfd5c, 0xe56efdf9, 0x59330bc2, 0x1b91689c, 0x5497152e, 0x7ce02ab7, 0x0127aeca, 0x00000001, 0x200001f0 }, + Instructions = [0xf1b7, 0x0fd0, 0x4770, 0xe7fe], + StartRegs = [0x5a7f551b, 0x624d7cb7, 0xdc3e4dab, 0xd242610e, 0x8b7213db, 0x3c4f81df, 0x353e713e, 0x0ffdfd5c, 0xe56efdf9, 0x59330bc2, 0x1b91689c, 0x5497152e, 0x7ce02ab7, 0x0127aeca, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0x5a7f551b, 0x624d7cb7, 0xdc3e4dab, 0xd242610e, 0x8b7213db, 0x3c4f81df, 0x353e713e, 0x0ffdfd5c, 0xe56efdf9, 0x59330bc2, 0x1b91689c, 0x5497152e, 0x7ce02ab7, 0x0127aeca, 0x00000001, 0x200001f0 + ], }, // SUB (imm) new() { - Instructions = new ushort[] { 0xf5a6, 0x2902, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x688a6dd6, 0xcabb9832, 0xa187c464, 0xe4474634, 0x19316c88, 0x8b99d147, 0xd67bc441, 0x48cfa0cf, 0x4cd8b792, 0x9593d34d, 0x66b5a570, 0x9065cc35, 0x6ddf1e6f, 0xd49a2985, 0x00000001, 0xf00001f0 }, - FinalRegs = new uint[] { 0x688a6dd6, 0xcabb9832, 0xa187c464, 0xe4474634, 0x19316c88, 0x8b99d147, 0xd67bc441, 0x48cfa0cf, 0x4cd8b792, 0xd673a441, 0x66b5a570, 0x9065cc35, 0x6ddf1e6f, 0xd49a2985, 0x00000001, 0xf00001f0 }, + Instructions = [0xf5a6, 0x2902, 0x4770, 0xe7fe], + StartRegs = [0x688a6dd6, 0xcabb9832, 0xa187c464, 0xe4474634, 0x19316c88, 0x8b99d147, 0xd67bc441, 0x48cfa0cf, 0x4cd8b792, 0x9593d34d, 0x66b5a570, 0x9065cc35, 0x6ddf1e6f, 0xd49a2985, 0x00000001, 0xf00001f0 + ], + FinalRegs = [0x688a6dd6, 0xcabb9832, 0xa187c464, 0xe4474634, 0x19316c88, 0x8b99d147, 0xd67bc441, 0x48cfa0cf, 0x4cd8b792, 0xd673a441, 0x66b5a570, 0x9065cc35, 0x6ddf1e6f, 0xd49a2985, 0x00000001, 0xf00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf1a5, 0x4730, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x69e8d900, 0x3ca9d66e, 0x91788f4e, 0x6e821399, 0xd710747f, 0xc8e72a37, 0xf9f9702f, 0x8e689c3f, 0x87ef1e3c, 0xc8270c3e, 0xd76f0d87, 0x5482900c, 0xec43f474, 0x72617560, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0x69e8d900, 0x3ca9d66e, 0x91788f4e, 0x6e821399, 0xd710747f, 0xc8e72a37, 0xf9f9702f, 0x18e72a37, 0x87ef1e3c, 0xc8270c3e, 0xd76f0d87, 0x5482900c, 0xec43f474, 0x72617560, 0x00000001, 0x000001f0 }, + Instructions = [0xf1a5, 0x4730, 0x4770, 0xe7fe], + StartRegs = [0x69e8d900, 0x3ca9d66e, 0x91788f4e, 0x6e821399, 0xd710747f, 0xc8e72a37, 0xf9f9702f, 0x8e689c3f, 0x87ef1e3c, 0xc8270c3e, 0xd76f0d87, 0x5482900c, 0xec43f474, 0x72617560, 0x00000001, 0x000001f0 + ], + FinalRegs = [0x69e8d900, 0x3ca9d66e, 0x91788f4e, 0x6e821399, 0xd710747f, 0xc8e72a37, 0xf9f9702f, 0x18e72a37, 0x87ef1e3c, 0xc8270c3e, 0xd76f0d87, 0x5482900c, 0xec43f474, 0x72617560, 0x00000001, 0x000001f0 + ], }, new() { - Instructions = new ushort[] { 0xf5bd, 0x7d6b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x56f27741, 0xdf3a0328, 0x49864f87, 0xd8b84caa, 0xd7a4cc2b, 0x85467faf, 0x6e972a47, 0xc2440b53, 0xa56fc6fa, 0xe86c3322, 0x19e1532d, 0x2984be63, 0xd7302738, 0xbf00369c, 0x00000001, 0xb00001f0 }, - FinalRegs = new uint[] { 0x56f27741, 0xdf3a0328, 0x49864f87, 0xd8b84caa, 0xd7a4cc2b, 0x85467faf, 0x6e972a47, 0xc2440b53, 0xa56fc6fa, 0xe86c3322, 0x19e1532d, 0x2984be63, 0xd7302738, 0xbf0032f0, 0x00000001, 0xa00001f0 }, + Instructions = [0xf5bd, 0x7d6b, 0x4770, 0xe7fe], + StartRegs = [0x56f27741, 0xdf3a0328, 0x49864f87, 0xd8b84caa, 0xd7a4cc2b, 0x85467faf, 0x6e972a47, 0xc2440b53, 0xa56fc6fa, 0xe86c3322, 0x19e1532d, 0x2984be63, 0xd7302738, 0xbf00369c, 0x00000001, 0xb00001f0 + ], + FinalRegs = [0x56f27741, 0xdf3a0328, 0x49864f87, 0xd8b84caa, 0xd7a4cc2b, 0x85467faf, 0x6e972a47, 0xc2440b53, 0xa56fc6fa, 0xe86c3322, 0x19e1532d, 0x2984be63, 0xd7302738, 0xbf0032f0, 0x00000001, 0xa00001f0 + ], }, new() { - Instructions = new ushort[] { 0xf5aa, 0x048c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xc48ce68c, 0x33c654cc, 0xa31ea382, 0x398c4095, 0xfff680a5, 0x5886b5f4, 0xb1debf0b, 0x8bd529bb, 0x1354ba05, 0xcf80960a, 0x18582cbe, 0x37ca8996, 0x08f95e3c, 0xc87fdb04, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0xc48ce68c, 0x33c654cc, 0xa31ea382, 0x398c4095, 0x18122cbe, 0x5886b5f4, 0xb1debf0b, 0x8bd529bb, 0x1354ba05, 0xcf80960a, 0x18582cbe, 0x37ca8996, 0x08f95e3c, 0xc87fdb04, 0x00000001, 0x200001f0 }, + Instructions = [0xf5aa, 0x048c, 0x4770, 0xe7fe], + StartRegs = [0xc48ce68c, 0x33c654cc, 0xa31ea382, 0x398c4095, 0xfff680a5, 0x5886b5f4, 0xb1debf0b, 0x8bd529bb, 0x1354ba05, 0xcf80960a, 0x18582cbe, 0x37ca8996, 0x08f95e3c, 0xc87fdb04, 0x00000001, 0x200001f0 + ], + FinalRegs = [0xc48ce68c, 0x33c654cc, 0xa31ea382, 0x398c4095, 0x18122cbe, 0x5886b5f4, 0xb1debf0b, 0x8bd529bb, 0x1354ba05, 0xcf80960a, 0x18582cbe, 0x37ca8996, 0x08f95e3c, 0xc87fdb04, 0x00000001, 0x200001f0 + ], }, new() { - Instructions = new ushort[] { 0xf5ba, 0x13aa, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd2de6567, 0x993624bf, 0xcfbd492f, 0x7b922424, 0x9fa01912, 0x04225225, 0x3a812a6d, 0xe62792b8, 0xb47cee9a, 0x5694288e, 0x6c669666, 0x213701a6, 0xe423ad2d, 0xc7d5362b, 0x00000001, 0xb00001f0 }, - FinalRegs = new uint[] { 0xd2de6567, 0x993624bf, 0xcfbd492f, 0x6c515666, 0x9fa01912, 0x04225225, 0x3a812a6d, 0xe62792b8, 0xb47cee9a, 0x5694288e, 0x6c669666, 0x213701a6, 0xe423ad2d, 0xc7d5362b, 0x00000001, 0x200001f0 }, + Instructions = [0xf5ba, 0x13aa, 0x4770, 0xe7fe], + StartRegs = [0xd2de6567, 0x993624bf, 0xcfbd492f, 0x7b922424, 0x9fa01912, 0x04225225, 0x3a812a6d, 0xe62792b8, 0xb47cee9a, 0x5694288e, 0x6c669666, 0x213701a6, 0xe423ad2d, 0xc7d5362b, 0x00000001, 0xb00001f0 + ], + FinalRegs = [0xd2de6567, 0x993624bf, 0xcfbd492f, 0x6c515666, 0x9fa01912, 0x04225225, 0x3a812a6d, 0xe62792b8, 0xb47cee9a, 0x5694288e, 0x6c669666, 0x213701a6, 0xe423ad2d, 0xc7d5362b, 0x00000001, 0x200001f0 + ], }, // RSB (imm) new() { - Instructions = new ushort[] { 0xf5dc, 0x767d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x8496100e, 0x93007a60, 0x0d33d3dc, 0xd932c4e1, 0x6e05ad8d, 0xde3cc68e, 0x74400ff8, 0xce309ee7, 0x188e0ebd, 0xe10837ab, 0x6b2534e2, 0x280add20, 0x3adc0489, 0x8ef32355, 0x00000001, 0x600001f0 }, - FinalRegs = new uint[] { 0x8496100e, 0x93007a60, 0x0d33d3dc, 0xd932c4e1, 0x6e05ad8d, 0xde3cc68e, 0xc523ff6b, 0xce309ee7, 0x188e0ebd, 0xe10837ab, 0x6b2534e2, 0x280add20, 0x3adc0489, 0x8ef32355, 0x00000001, 0x800001f0 }, + Instructions = [0xf5dc, 0x767d, 0x4770, 0xe7fe], + StartRegs = [0x8496100e, 0x93007a60, 0x0d33d3dc, 0xd932c4e1, 0x6e05ad8d, 0xde3cc68e, 0x74400ff8, 0xce309ee7, 0x188e0ebd, 0xe10837ab, 0x6b2534e2, 0x280add20, 0x3adc0489, 0x8ef32355, 0x00000001, 0x600001f0 + ], + FinalRegs = [0x8496100e, 0x93007a60, 0x0d33d3dc, 0xd932c4e1, 0x6e05ad8d, 0xde3cc68e, 0xc523ff6b, 0xce309ee7, 0x188e0ebd, 0xe10837ab, 0x6b2534e2, 0x280add20, 0x3adc0489, 0x8ef32355, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf1dc, 0x377d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xc5d7fe20, 0xade81daf, 0xba65ccf8, 0xa101ee00, 0x3a2b70d9, 0xc90238d9, 0xc3b54049, 0x436bf83f, 0x99c96b58, 0xd134cb19, 0x4de47e7f, 0x6a175e2d, 0xd9e49229, 0x174d24ac, 0x00000001, 0x400001f0 }, - FinalRegs = new uint[] { 0xc5d7fe20, 0xade81daf, 0xba65ccf8, 0xa101ee00, 0x3a2b70d9, 0xc90238d9, 0xc3b54049, 0xa398eb54, 0x99c96b58, 0xd134cb19, 0x4de47e7f, 0x6a175e2d, 0xd9e49229, 0x174d24ac, 0x00000001, 0x900001f0 }, + Instructions = [0xf1dc, 0x377d, 0x4770, 0xe7fe], + StartRegs = [0xc5d7fe20, 0xade81daf, 0xba65ccf8, 0xa101ee00, 0x3a2b70d9, 0xc90238d9, 0xc3b54049, 0x436bf83f, 0x99c96b58, 0xd134cb19, 0x4de47e7f, 0x6a175e2d, 0xd9e49229, 0x174d24ac, 0x00000001, 0x400001f0 + ], + FinalRegs = [0xc5d7fe20, 0xade81daf, 0xba65ccf8, 0xa101ee00, 0x3a2b70d9, 0xc90238d9, 0xc3b54049, 0xa398eb54, 0x99c96b58, 0xd134cb19, 0x4de47e7f, 0x6a175e2d, 0xd9e49229, 0x174d24ac, 0x00000001, 0x900001f0 + ], }, new() { - Instructions = new ushort[] { 0xf5c5, 0x34bd, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xcea4f214, 0xdc15a8f8, 0xd22be9ef, 0x42c400c5, 0x2fd1fc9b, 0xca724b52, 0x5582071d, 0xd01b7816, 0xa4f5a435, 0xcfd50db5, 0x24e0c80b, 0x7b52178d, 0x11cd0449, 0xd6daa84a, 0x00000001, 0x800001f0 }, - FinalRegs = new uint[] { 0xcea4f214, 0xdc15a8f8, 0xd22be9ef, 0x42c400c5, 0x358f2eae, 0xca724b52, 0x5582071d, 0xd01b7816, 0xa4f5a435, 0xcfd50db5, 0x24e0c80b, 0x7b52178d, 0x11cd0449, 0xd6daa84a, 0x00000001, 0x800001f0 }, + Instructions = [0xf5c5, 0x34bd, 0x4770, 0xe7fe], + StartRegs = [0xcea4f214, 0xdc15a8f8, 0xd22be9ef, 0x42c400c5, 0x2fd1fc9b, 0xca724b52, 0x5582071d, 0xd01b7816, 0xa4f5a435, 0xcfd50db5, 0x24e0c80b, 0x7b52178d, 0x11cd0449, 0xd6daa84a, 0x00000001, 0x800001f0 + ], + FinalRegs = [0xcea4f214, 0xdc15a8f8, 0xd22be9ef, 0x42c400c5, 0x358f2eae, 0xca724b52, 0x5582071d, 0xd01b7816, 0xa4f5a435, 0xcfd50db5, 0x24e0c80b, 0x7b52178d, 0x11cd0449, 0xd6daa84a, 0x00000001, 0x800001f0 + ], }, new() { - Instructions = new ushort[] { 0xf1ce, 0x7846, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3c676ff3, 0x511ea0cb, 0x15e79c80, 0x51a3a8c1, 0x535cc233, 0x6ae729a3, 0x4e5726da, 0x81260fb9, 0x24dd423a, 0x9e81d6c0, 0x812b3bd1, 0x55bd0f44, 0x1871ec65, 0x87087126, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0x3c676ff3, 0x511ea0cb, 0x15e79c80, 0x51a3a8c1, 0x535cc233, 0x6ae729a3, 0x4e5726da, 0x81260fb9, 0x0317ffff, 0x9e81d6c0, 0x812b3bd1, 0x55bd0f44, 0x1871ec65, 0x87087126, 0x00000001, 0x200001f0 }, + Instructions = [0xf1ce, 0x7846, 0x4770, 0xe7fe], + StartRegs = [0x3c676ff3, 0x511ea0cb, 0x15e79c80, 0x51a3a8c1, 0x535cc233, 0x6ae729a3, 0x4e5726da, 0x81260fb9, 0x24dd423a, 0x9e81d6c0, 0x812b3bd1, 0x55bd0f44, 0x1871ec65, 0x87087126, 0x00000001, 0x200001f0 + ], + FinalRegs = [0x3c676ff3, 0x511ea0cb, 0x15e79c80, 0x51a3a8c1, 0x535cc233, 0x6ae729a3, 0x4e5726da, 0x81260fb9, 0x0317ffff, 0x9e81d6c0, 0x812b3bd1, 0x55bd0f44, 0x1871ec65, 0x87087126, 0x00000001, 0x200001f0 + ], }, new() { - Instructions = new ushort[] { 0xf5c5, 0x2418, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x2bb00694, 0x1c56a4c0, 0xc5cc4a3e, 0xc627c1ab, 0x4e4a8dfc, 0x1f3d71a4, 0x897d57b8, 0x0d4a7208, 0x433b7b88, 0xaaf24fd6, 0x2438f5f8, 0x9875e64a, 0xda475f22, 0x66d5e2e7, 0x00000001, 0x700001f0 }, - FinalRegs = new uint[] { 0x2bb00694, 0x1c56a4c0, 0xc5cc4a3e, 0xc627c1ab, 0xe0cc0e5c, 0x1f3d71a4, 0x897d57b8, 0x0d4a7208, 0x433b7b88, 0xaaf24fd6, 0x2438f5f8, 0x9875e64a, 0xda475f22, 0x66d5e2e7, 0x00000001, 0x700001f0 }, - }, - }; + Instructions = [0xf5c5, 0x2418, 0x4770, 0xe7fe], + StartRegs = [0x2bb00694, 0x1c56a4c0, 0xc5cc4a3e, 0xc627c1ab, 0x4e4a8dfc, 0x1f3d71a4, 0x897d57b8, 0x0d4a7208, 0x433b7b88, 0xaaf24fd6, 0x2438f5f8, 0x9875e64a, 0xda475f22, 0x66d5e2e7, 0x00000001, 0x700001f0 + ], + FinalRegs = [0x2bb00694, 0x1c56a4c0, 0xc5cc4a3e, 0xc627c1ab, 0xe0cc0e5c, 0x1f3d71a4, 0x897d57b8, 0x0d4a7208, 0x433b7b88, 0xaaf24fd6, 0x2438f5f8, 0x9875e64a, 0xda475f22, 0x66d5e2e7, 0x00000001, 0x700001f0 + ], + } + ]; } } diff --git a/src/Ryujinx.Tests/Cpu/CpuTestT32Mem.cs b/src/Ryujinx.Tests/Cpu/CpuTestT32Mem.cs index 94ccb950c..b7ad8efe7 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestT32Mem.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestT32Mem.cs @@ -13,509 +13,657 @@ namespace Ryujinx.Tests.Cpu } public static readonly PrecomputedMemoryThumbTestCase[] ImmTestCases = - { + [ // STRB (imm8) new() { - Instructions = new ushort[] { 0xf80c, 0x1b2f, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000023bd, 0x000027bb, 0x00002715, 0x000028f5, 0x0000233f, 0x0000213b, 0x00002eea, 0x0000282b, 0x000021e1, 0x0000264c, 0x000029e0, 0x00002ae7, 0x000021ff, 0x000026e3, 0x00000001, 0x800001f0 }, - FinalRegs = new uint[] { 0x000023bd, 0x000027bb, 0x00002715, 0x000028f5, 0x0000233f, 0x0000213b, 0x00002eea, 0x0000282b, 0x000021e1, 0x0000264c, 0x000029e0, 0x00002ae7, 0x0000222e, 0x000026e3, 0x00000001, 0x800001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x21fe, Value: 0xbbfe) }, + Instructions = [0xf80c, 0x1b2f, 0x4770, 0xe7fe], + StartRegs = [0x000023bd, 0x000027bb, 0x00002715, 0x000028f5, 0x0000233f, 0x0000213b, 0x00002eea, 0x0000282b, 0x000021e1, 0x0000264c, 0x000029e0, 0x00002ae7, 0x000021ff, 0x000026e3, 0x00000001, 0x800001f0 + ], + FinalRegs = [0x000023bd, 0x000027bb, 0x00002715, 0x000028f5, 0x0000233f, 0x0000213b, 0x00002eea, 0x0000282b, 0x000021e1, 0x0000264c, 0x000029e0, 0x00002ae7, 0x0000222e, 0x000026e3, 0x00000001, 0x800001f0 + ], + MemoryDelta = [(Address: 0x21fe, Value: 0xbbfe)], }, new() { - Instructions = new ushort[] { 0xf80a, 0x2f81, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0000223c, 0x00002db9, 0x00002900, 0x0000247c, 0x00002b0a, 0x0000266b, 0x000026df, 0x00002447, 0x000024bb, 0x00002687, 0x0000266f, 0x00002a80, 0x000025ff, 0x00002881, 0x00000001, 0xa00001f0 }, - FinalRegs = new uint[] { 0x0000223c, 0x00002db9, 0x00002900, 0x0000247c, 0x00002b0a, 0x0000266b, 0x000026df, 0x00002447, 0x000024bb, 0x00002687, 0x000026f0, 0x00002a80, 0x000025ff, 0x00002881, 0x00000001, 0xa00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x26f0, Value: 0x2600) }, + Instructions = [0xf80a, 0x2f81, 0x4770, 0xe7fe], + StartRegs = [0x0000223c, 0x00002db9, 0x00002900, 0x0000247c, 0x00002b0a, 0x0000266b, 0x000026df, 0x00002447, 0x000024bb, 0x00002687, 0x0000266f, 0x00002a80, 0x000025ff, 0x00002881, 0x00000001, 0xa00001f0 + ], + FinalRegs = [0x0000223c, 0x00002db9, 0x00002900, 0x0000247c, 0x00002b0a, 0x0000266b, 0x000026df, 0x00002447, 0x000024bb, 0x00002687, 0x000026f0, 0x00002a80, 0x000025ff, 0x00002881, 0x00000001, 0xa00001f0 + ], + MemoryDelta = [(Address: 0x26f0, Value: 0x2600)], }, new() { - Instructions = new ushort[] { 0xf803, 0x6968, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000026ed, 0x00002685, 0x00002cd1, 0x00002dac, 0x00002a23, 0x00002626, 0x00002ec9, 0x0000245c, 0x000024ef, 0x00002319, 0x000026ce, 0x0000214d, 0x00002401, 0x000028b4, 0x00000001, 0x300001f0 }, - FinalRegs = new uint[] { 0x000026ed, 0x00002685, 0x00002cd1, 0x00002d44, 0x00002a23, 0x00002626, 0x00002ec9, 0x0000245c, 0x000024ef, 0x00002319, 0x000026ce, 0x0000214d, 0x00002401, 0x000028b4, 0x00000001, 0x300001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2dac, Value: 0x2dc9) }, + Instructions = [0xf803, 0x6968, 0x4770, 0xe7fe], + StartRegs = [0x000026ed, 0x00002685, 0x00002cd1, 0x00002dac, 0x00002a23, 0x00002626, 0x00002ec9, 0x0000245c, 0x000024ef, 0x00002319, 0x000026ce, 0x0000214d, 0x00002401, 0x000028b4, 0x00000001, 0x300001f0 + ], + FinalRegs = [0x000026ed, 0x00002685, 0x00002cd1, 0x00002d44, 0x00002a23, 0x00002626, 0x00002ec9, 0x0000245c, 0x000024ef, 0x00002319, 0x000026ce, 0x0000214d, 0x00002401, 0x000028b4, 0x00000001, 0x300001f0 + ], + MemoryDelta = [(Address: 0x2dac, Value: 0x2dc9)], }, new() { - Instructions = new ushort[] { 0xf804, 0x89ad, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0000265d, 0x00002b9c, 0x00002360, 0x000029ec, 0x00002413, 0x00002d8e, 0x00002aad, 0x00002d29, 0x00002bca, 0x00002a44, 0x00002980, 0x00002710, 0x000022fa, 0x0000222e, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0x0000265d, 0x00002b9c, 0x00002360, 0x000029ec, 0x00002366, 0x00002d8e, 0x00002aad, 0x00002d29, 0x00002bca, 0x00002a44, 0x00002980, 0x00002710, 0x000022fa, 0x0000222e, 0x00000001, 0xc00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2412, Value: 0xca12) }, + Instructions = [0xf804, 0x89ad, 0x4770, 0xe7fe], + StartRegs = [0x0000265d, 0x00002b9c, 0x00002360, 0x000029ec, 0x00002413, 0x00002d8e, 0x00002aad, 0x00002d29, 0x00002bca, 0x00002a44, 0x00002980, 0x00002710, 0x000022fa, 0x0000222e, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0x0000265d, 0x00002b9c, 0x00002360, 0x000029ec, 0x00002366, 0x00002d8e, 0x00002aad, 0x00002d29, 0x00002bca, 0x00002a44, 0x00002980, 0x00002710, 0x000022fa, 0x0000222e, 0x00000001, 0xc00001f0 + ], + MemoryDelta = [(Address: 0x2412, Value: 0xca12)], }, new() { - Instructions = new ushort[] { 0xf80d, 0xa9fe, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0000298d, 0x00002e6c, 0x00002986, 0x00002ebb, 0x0000213e, 0x00002e39, 0x0000246f, 0x00002b6c, 0x00002ee2, 0x0000259e, 0x0000250a, 0x000029f6, 0x000021e7, 0x00002d9d, 0x00000001, 0x900001f0 }, - FinalRegs = new uint[] { 0x0000298d, 0x00002e6c, 0x00002986, 0x00002ebb, 0x0000213e, 0x00002e39, 0x0000246f, 0x00002b6c, 0x00002ee2, 0x0000259e, 0x0000250a, 0x000029f6, 0x000021e7, 0x00002c9f, 0x00000001, 0x900001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2d9c, Value: 0x0a9c) }, + Instructions = [0xf80d, 0xa9fe, 0x4770, 0xe7fe], + StartRegs = [0x0000298d, 0x00002e6c, 0x00002986, 0x00002ebb, 0x0000213e, 0x00002e39, 0x0000246f, 0x00002b6c, 0x00002ee2, 0x0000259e, 0x0000250a, 0x000029f6, 0x000021e7, 0x00002d9d, 0x00000001, 0x900001f0 + ], + FinalRegs = [0x0000298d, 0x00002e6c, 0x00002986, 0x00002ebb, 0x0000213e, 0x00002e39, 0x0000246f, 0x00002b6c, 0x00002ee2, 0x0000259e, 0x0000250a, 0x000029f6, 0x000021e7, 0x00002c9f, 0x00000001, 0x900001f0 + ], + MemoryDelta = [(Address: 0x2d9c, Value: 0x0a9c)], }, new() { - Instructions = new ushort[] { 0xf80d, 0x3c46, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002c6f, 0x000028cc, 0x000025f0, 0x000022cc, 0x00002de3, 0x0000243c, 0x000025fb, 0x00002e88, 0x00002985, 0x000023ee, 0x00002120, 0x00002d50, 0x0000270a, 0x00002bbd, 0x00000001, 0xa00001f0 }, - FinalRegs = new uint[] { 0x00002c6f, 0x000028cc, 0x000025f0, 0x000022cc, 0x00002de3, 0x0000243c, 0x000025fb, 0x00002e88, 0x00002985, 0x000023ee, 0x00002120, 0x00002d50, 0x0000270a, 0x00002bbd, 0x00000001, 0xa00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2b76, Value: 0xcc76) }, + Instructions = [0xf80d, 0x3c46, 0x4770, 0xe7fe], + StartRegs = [0x00002c6f, 0x000028cc, 0x000025f0, 0x000022cc, 0x00002de3, 0x0000243c, 0x000025fb, 0x00002e88, 0x00002985, 0x000023ee, 0x00002120, 0x00002d50, 0x0000270a, 0x00002bbd, 0x00000001, 0xa00001f0 + ], + FinalRegs = [0x00002c6f, 0x000028cc, 0x000025f0, 0x000022cc, 0x00002de3, 0x0000243c, 0x000025fb, 0x00002e88, 0x00002985, 0x000023ee, 0x00002120, 0x00002d50, 0x0000270a, 0x00002bbd, 0x00000001, 0xa00001f0 + ], + MemoryDelta = [(Address: 0x2b76, Value: 0xcc76)], }, new() { - Instructions = new ushort[] { 0xf801, 0x6c56, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002d6e, 0x00002530, 0x00002e6d, 0x00002942, 0x00002985, 0x00002d64, 0x00002a73, 0x00002ac6, 0x00002955, 0x00002881, 0x0000221d, 0x00002cb0, 0x0000225f, 0x00002534, 0x00000001, 0x100001f0 }, - FinalRegs = new uint[] { 0x00002d6e, 0x00002530, 0x00002e6d, 0x00002942, 0x00002985, 0x00002d64, 0x00002a73, 0x00002ac6, 0x00002955, 0x00002881, 0x0000221d, 0x00002cb0, 0x0000225f, 0x00002534, 0x00000001, 0x100001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x24da, Value: 0x2473) }, + Instructions = [0xf801, 0x6c56, 0x4770, 0xe7fe], + StartRegs = [0x00002d6e, 0x00002530, 0x00002e6d, 0x00002942, 0x00002985, 0x00002d64, 0x00002a73, 0x00002ac6, 0x00002955, 0x00002881, 0x0000221d, 0x00002cb0, 0x0000225f, 0x00002534, 0x00000001, 0x100001f0 + ], + FinalRegs = [0x00002d6e, 0x00002530, 0x00002e6d, 0x00002942, 0x00002985, 0x00002d64, 0x00002a73, 0x00002ac6, 0x00002955, 0x00002881, 0x0000221d, 0x00002cb0, 0x0000225f, 0x00002534, 0x00000001, 0x100001f0 + ], + MemoryDelta = [(Address: 0x24da, Value: 0x2473)], }, new() { - Instructions = new ushort[] { 0xf809, 0xcc76, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002d50, 0x000025f2, 0x0000250a, 0x0000214c, 0x000023d1, 0x00002115, 0x00002c27, 0x00002540, 0x0000222b, 0x00002d03, 0x00002679, 0x00002b52, 0x00002eee, 0x00002b2a, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0x00002d50, 0x000025f2, 0x0000250a, 0x0000214c, 0x000023d1, 0x00002115, 0x00002c27, 0x00002540, 0x0000222b, 0x00002d03, 0x00002679, 0x00002b52, 0x00002eee, 0x00002b2a, 0x00000001, 0xd00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2c8c, Value: 0xee8c) }, + Instructions = [0xf809, 0xcc76, 0x4770, 0xe7fe], + StartRegs = [0x00002d50, 0x000025f2, 0x0000250a, 0x0000214c, 0x000023d1, 0x00002115, 0x00002c27, 0x00002540, 0x0000222b, 0x00002d03, 0x00002679, 0x00002b52, 0x00002eee, 0x00002b2a, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0x00002d50, 0x000025f2, 0x0000250a, 0x0000214c, 0x000023d1, 0x00002115, 0x00002c27, 0x00002540, 0x0000222b, 0x00002d03, 0x00002679, 0x00002b52, 0x00002eee, 0x00002b2a, 0x00000001, 0xd00001f0 + ], + MemoryDelta = [(Address: 0x2c8c, Value: 0xee8c)], }, new() { - Instructions = new ushort[] { 0xf808, 0x1c8d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002844, 0x00002b78, 0x000028b0, 0x000026ff, 0x0000280b, 0x00002e0b, 0x00002de4, 0x00002b53, 0x00002ecd, 0x000021b5, 0x000026bc, 0x00002e9d, 0x00002d33, 0x000027f0, 0x00000001, 0x800001f0 }, - FinalRegs = new uint[] { 0x00002844, 0x00002b78, 0x000028b0, 0x000026ff, 0x0000280b, 0x00002e0b, 0x00002de4, 0x00002b53, 0x00002ecd, 0x000021b5, 0x000026bc, 0x00002e9d, 0x00002d33, 0x000027f0, 0x00000001, 0x800001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2e40, Value: 0x2e78) }, + Instructions = [0xf808, 0x1c8d, 0x4770, 0xe7fe], + StartRegs = [0x00002844, 0x00002b78, 0x000028b0, 0x000026ff, 0x0000280b, 0x00002e0b, 0x00002de4, 0x00002b53, 0x00002ecd, 0x000021b5, 0x000026bc, 0x00002e9d, 0x00002d33, 0x000027f0, 0x00000001, 0x800001f0 + ], + FinalRegs = [0x00002844, 0x00002b78, 0x000028b0, 0x000026ff, 0x0000280b, 0x00002e0b, 0x00002de4, 0x00002b53, 0x00002ecd, 0x000021b5, 0x000026bc, 0x00002e9d, 0x00002d33, 0x000027f0, 0x00000001, 0x800001f0 + ], + MemoryDelta = [(Address: 0x2e40, Value: 0x2e78)], }, new() { - Instructions = new ushort[] { 0xf80b, 0xbc26, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002244, 0x000025ad, 0x00002434, 0x00002b06, 0x00002ebd, 0x0000292b, 0x00002431, 0x00002e12, 0x0000289b, 0x0000265a, 0x00002747, 0x00002bac, 0x00002dae, 0x00002582, 0x00000001, 0xf00001f0 }, - FinalRegs = new uint[] { 0x00002244, 0x000025ad, 0x00002434, 0x00002b06, 0x00002ebd, 0x0000292b, 0x00002431, 0x00002e12, 0x0000289b, 0x0000265a, 0x00002747, 0x00002bac, 0x00002dae, 0x00002582, 0x00000001, 0xf00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2b86, Value: 0x2bac) }, + Instructions = [0xf80b, 0xbc26, 0x4770, 0xe7fe], + StartRegs = [0x00002244, 0x000025ad, 0x00002434, 0x00002b06, 0x00002ebd, 0x0000292b, 0x00002431, 0x00002e12, 0x0000289b, 0x0000265a, 0x00002747, 0x00002bac, 0x00002dae, 0x00002582, 0x00000001, 0xf00001f0 + ], + FinalRegs = [0x00002244, 0x000025ad, 0x00002434, 0x00002b06, 0x00002ebd, 0x0000292b, 0x00002431, 0x00002e12, 0x0000289b, 0x0000265a, 0x00002747, 0x00002bac, 0x00002dae, 0x00002582, 0x00000001, 0xf00001f0 + ], + MemoryDelta = [(Address: 0x2b86, Value: 0x2bac)], }, // STRB (imm12) new() { - Instructions = new ushort[] { 0xf887, 0x67c2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x700001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x700001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x27c2, Value: 0x2700) }, + Instructions = [0xf887, 0x67c2, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x700001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x700001f0 + ], + MemoryDelta = [(Address: 0x27c2, Value: 0x2700)], }, new() { - Instructions = new ushort[] { 0xf883, 0x9fda, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xc00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2fda, Value: 0x2f00) }, + Instructions = [0xf883, 0x9fda, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xc00001f0 + ], + MemoryDelta = [(Address: 0x2fda, Value: 0x2f00)], }, new() { - Instructions = new ushort[] { 0xf889, 0xd200, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x400001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x400001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf889, 0xd200, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x400001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x400001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf88c, 0x1c5b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2c5a, Value: 0x005a) }, + Instructions = [0xf88c, 0x1c5b, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 + ], + MemoryDelta = [(Address: 0x2c5a, Value: 0x005a)], }, new() { - Instructions = new ushort[] { 0xf887, 0x9fe2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2fe2, Value: 0x2f00) }, + Instructions = [0xf887, 0x9fe2, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 + ], + MemoryDelta = [(Address: 0x2fe2, Value: 0x2f00)], }, // STRH (imm8) new() { - Instructions = new ushort[] { 0xf826, 0x0b0a, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000025a2, 0x000024d5, 0x00002ca1, 0x0000238a, 0x0000279c, 0x0000244c, 0x00002620, 0x00002c0e, 0x0000233e, 0x0000285f, 0x000021ab, 0x00002bd0, 0x0000281f, 0x00002be7, 0x00000001, 0x600001f0 }, - FinalRegs = new uint[] { 0x000025a2, 0x000024d5, 0x00002ca1, 0x0000238a, 0x0000279c, 0x0000244c, 0x0000262a, 0x00002c0e, 0x0000233e, 0x0000285f, 0x000021ab, 0x00002bd0, 0x0000281f, 0x00002be7, 0x00000001, 0x600001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2620, Value: 0x25a2) }, + Instructions = [0xf826, 0x0b0a, 0x4770, 0xe7fe], + StartRegs = [0x000025a2, 0x000024d5, 0x00002ca1, 0x0000238a, 0x0000279c, 0x0000244c, 0x00002620, 0x00002c0e, 0x0000233e, 0x0000285f, 0x000021ab, 0x00002bd0, 0x0000281f, 0x00002be7, 0x00000001, 0x600001f0 + ], + FinalRegs = [0x000025a2, 0x000024d5, 0x00002ca1, 0x0000238a, 0x0000279c, 0x0000244c, 0x0000262a, 0x00002c0e, 0x0000233e, 0x0000285f, 0x000021ab, 0x00002bd0, 0x0000281f, 0x00002be7, 0x00000001, 0x600001f0 + ], + MemoryDelta = [(Address: 0x2620, Value: 0x25a2)], }, new() { - Instructions = new ushort[] { 0xf827, 0xcf61, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002555, 0x0000238f, 0x00002829, 0x000028c8, 0x00002399, 0x00002aab, 0x00002d6f, 0x000029eb, 0x000029e0, 0x00002d33, 0x0000292a, 0x00002b33, 0x00002e29, 0x00002ca4, 0x00000001, 0x100001f0 }, - FinalRegs = new uint[] { 0x00002555, 0x0000238f, 0x00002829, 0x000028c8, 0x00002399, 0x00002aab, 0x00002d6f, 0x00002a4c, 0x000029e0, 0x00002d33, 0x0000292a, 0x00002b33, 0x00002e29, 0x00002ca4, 0x00000001, 0x100001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2a4c, Value: 0x2e29) }, + Instructions = [0xf827, 0xcf61, 0x4770, 0xe7fe], + StartRegs = [0x00002555, 0x0000238f, 0x00002829, 0x000028c8, 0x00002399, 0x00002aab, 0x00002d6f, 0x000029eb, 0x000029e0, 0x00002d33, 0x0000292a, 0x00002b33, 0x00002e29, 0x00002ca4, 0x00000001, 0x100001f0 + ], + FinalRegs = [0x00002555, 0x0000238f, 0x00002829, 0x000028c8, 0x00002399, 0x00002aab, 0x00002d6f, 0x00002a4c, 0x000029e0, 0x00002d33, 0x0000292a, 0x00002b33, 0x00002e29, 0x00002ca4, 0x00000001, 0x100001f0 + ], + MemoryDelta = [(Address: 0x2a4c, Value: 0x2e29)], }, new() { - Instructions = new ushort[] { 0xf821, 0x9b00, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000027ba, 0x00002514, 0x00002b07, 0x00002daf, 0x00002790, 0x0000274b, 0x00002379, 0x00002a98, 0x000024c8, 0x00002398, 0x000021ba, 0x00002959, 0x00002821, 0x00002d09, 0x00000001, 0x500001f0 }, - FinalRegs = new uint[] { 0x000027ba, 0x00002514, 0x00002b07, 0x00002daf, 0x00002790, 0x0000274b, 0x00002379, 0x00002a98, 0x000024c8, 0x00002398, 0x000021ba, 0x00002959, 0x00002821, 0x00002d09, 0x00000001, 0x500001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2514, Value: 0x2398) }, + Instructions = [0xf821, 0x9b00, 0x4770, 0xe7fe], + StartRegs = [0x000027ba, 0x00002514, 0x00002b07, 0x00002daf, 0x00002790, 0x0000274b, 0x00002379, 0x00002a98, 0x000024c8, 0x00002398, 0x000021ba, 0x00002959, 0x00002821, 0x00002d09, 0x00000001, 0x500001f0 + ], + FinalRegs = [0x000027ba, 0x00002514, 0x00002b07, 0x00002daf, 0x00002790, 0x0000274b, 0x00002379, 0x00002a98, 0x000024c8, 0x00002398, 0x000021ba, 0x00002959, 0x00002821, 0x00002d09, 0x00000001, 0x500001f0 + ], + MemoryDelta = [(Address: 0x2514, Value: 0x2398)], }, new() { - Instructions = new ushort[] { 0xf82c, 0xa927, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0000226a, 0x00002792, 0x00002870, 0x00002918, 0x00002757, 0x00002679, 0x00002546, 0x000027f5, 0x00002edc, 0x00002cd3, 0x0000274a, 0x00002562, 0x000029a1, 0x00002976, 0x00000001, 0x100001f0 }, - FinalRegs = new uint[] { 0x0000226a, 0x00002792, 0x00002870, 0x00002918, 0x00002757, 0x00002679, 0x00002546, 0x000027f5, 0x00002edc, 0x00002cd3, 0x0000274a, 0x00002562, 0x0000297a, 0x00002976, 0x00000001, 0x100001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x29a0, Value: 0x4aa0), (Address: 0x29a2, Value: 0x2927) }, + Instructions = [0xf82c, 0xa927, 0x4770, 0xe7fe], + StartRegs = [0x0000226a, 0x00002792, 0x00002870, 0x00002918, 0x00002757, 0x00002679, 0x00002546, 0x000027f5, 0x00002edc, 0x00002cd3, 0x0000274a, 0x00002562, 0x000029a1, 0x00002976, 0x00000001, 0x100001f0 + ], + FinalRegs = [0x0000226a, 0x00002792, 0x00002870, 0x00002918, 0x00002757, 0x00002679, 0x00002546, 0x000027f5, 0x00002edc, 0x00002cd3, 0x0000274a, 0x00002562, 0x0000297a, 0x00002976, 0x00000001, 0x100001f0 + ], + MemoryDelta = [(Address: 0x29a0, Value: 0x4aa0), (Address: 0x29a2, Value: 0x2927)], }, new() { - Instructions = new ushort[] { 0xf824, 0xcfe4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0000238b, 0x00002d22, 0x00002476, 0x000028ae, 0x00002442, 0x0000212b, 0x000026de, 0x00002a1a, 0x00002a02, 0x00002e47, 0x00002b2d, 0x00002427, 0x00002d1c, 0x000026d4, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0x0000238b, 0x00002d22, 0x00002476, 0x000028ae, 0x00002526, 0x0000212b, 0x000026de, 0x00002a1a, 0x00002a02, 0x00002e47, 0x00002b2d, 0x00002427, 0x00002d1c, 0x000026d4, 0x00000001, 0xd00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2526, Value: 0x2d1c) }, + Instructions = [0xf824, 0xcfe4, 0x4770, 0xe7fe], + StartRegs = [0x0000238b, 0x00002d22, 0x00002476, 0x000028ae, 0x00002442, 0x0000212b, 0x000026de, 0x00002a1a, 0x00002a02, 0x00002e47, 0x00002b2d, 0x00002427, 0x00002d1c, 0x000026d4, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0x0000238b, 0x00002d22, 0x00002476, 0x000028ae, 0x00002526, 0x0000212b, 0x000026de, 0x00002a1a, 0x00002a02, 0x00002e47, 0x00002b2d, 0x00002427, 0x00002d1c, 0x000026d4, 0x00000001, 0xd00001f0 + ], + MemoryDelta = [(Address: 0x2526, Value: 0x2d1c)], }, new() { - Instructions = new ushort[] { 0xf820, 0x1c3d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002227, 0x00002b29, 0x0000232a, 0x0000214e, 0x000029ef, 0x00002522, 0x000029d3, 0x0000286c, 0x000029b2, 0x00002147, 0x00002c65, 0x00002891, 0x000029c2, 0x000028a5, 0x00000001, 0x800001f0 }, - FinalRegs = new uint[] { 0x00002227, 0x00002b29, 0x0000232a, 0x0000214e, 0x000029ef, 0x00002522, 0x000029d3, 0x0000286c, 0x000029b2, 0x00002147, 0x00002c65, 0x00002891, 0x000029c2, 0x000028a5, 0x00000001, 0x800001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x21ea, Value: 0x2b29) }, + Instructions = [0xf820, 0x1c3d, 0x4770, 0xe7fe], + StartRegs = [0x00002227, 0x00002b29, 0x0000232a, 0x0000214e, 0x000029ef, 0x00002522, 0x000029d3, 0x0000286c, 0x000029b2, 0x00002147, 0x00002c65, 0x00002891, 0x000029c2, 0x000028a5, 0x00000001, 0x800001f0 + ], + FinalRegs = [0x00002227, 0x00002b29, 0x0000232a, 0x0000214e, 0x000029ef, 0x00002522, 0x000029d3, 0x0000286c, 0x000029b2, 0x00002147, 0x00002c65, 0x00002891, 0x000029c2, 0x000028a5, 0x00000001, 0x800001f0 + ], + MemoryDelta = [(Address: 0x21ea, Value: 0x2b29)], }, new() { - Instructions = new ushort[] { 0xf826, 0x1cdf, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002232, 0x000029a1, 0x00002938, 0x00002ae7, 0x000029a4, 0x00002366, 0x0000273a, 0x000023f6, 0x00002601, 0x00002919, 0x000028e3, 0x00002907, 0x000023c1, 0x00002138, 0x00000001, 0x100001f0 }, - FinalRegs = new uint[] { 0x00002232, 0x000029a1, 0x00002938, 0x00002ae7, 0x000029a4, 0x00002366, 0x0000273a, 0x000023f6, 0x00002601, 0x00002919, 0x000028e3, 0x00002907, 0x000023c1, 0x00002138, 0x00000001, 0x100001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x265a, Value: 0xa15a), (Address: 0x265c, Value: 0x2629) }, + Instructions = [0xf826, 0x1cdf, 0x4770, 0xe7fe], + StartRegs = [0x00002232, 0x000029a1, 0x00002938, 0x00002ae7, 0x000029a4, 0x00002366, 0x0000273a, 0x000023f6, 0x00002601, 0x00002919, 0x000028e3, 0x00002907, 0x000023c1, 0x00002138, 0x00000001, 0x100001f0 + ], + FinalRegs = [0x00002232, 0x000029a1, 0x00002938, 0x00002ae7, 0x000029a4, 0x00002366, 0x0000273a, 0x000023f6, 0x00002601, 0x00002919, 0x000028e3, 0x00002907, 0x000023c1, 0x00002138, 0x00000001, 0x100001f0 + ], + MemoryDelta = [(Address: 0x265a, Value: 0xa15a), (Address: 0x265c, Value: 0x2629)], }, new() { - Instructions = new ushort[] { 0xf82b, 0x3c66, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002974, 0x00002372, 0x0000276c, 0x000021df, 0x00002272, 0x00002928, 0x00002c50, 0x0000290e, 0x00002319, 0x000021d1, 0x00002a82, 0x000027ff, 0x00002730, 0x000027b2, 0x00000001, 0x700001f0 }, - FinalRegs = new uint[] { 0x00002974, 0x00002372, 0x0000276c, 0x000021df, 0x00002272, 0x00002928, 0x00002c50, 0x0000290e, 0x00002319, 0x000021d1, 0x00002a82, 0x000027ff, 0x00002730, 0x000027b2, 0x00000001, 0x700001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2798, Value: 0xdf98), (Address: 0x279a, Value: 0x2721) }, + Instructions = [0xf82b, 0x3c66, 0x4770, 0xe7fe], + StartRegs = [0x00002974, 0x00002372, 0x0000276c, 0x000021df, 0x00002272, 0x00002928, 0x00002c50, 0x0000290e, 0x00002319, 0x000021d1, 0x00002a82, 0x000027ff, 0x00002730, 0x000027b2, 0x00000001, 0x700001f0 + ], + FinalRegs = [0x00002974, 0x00002372, 0x0000276c, 0x000021df, 0x00002272, 0x00002928, 0x00002c50, 0x0000290e, 0x00002319, 0x000021d1, 0x00002a82, 0x000027ff, 0x00002730, 0x000027b2, 0x00000001, 0x700001f0 + ], + MemoryDelta = [(Address: 0x2798, Value: 0xdf98), (Address: 0x279a, Value: 0x2721)], }, new() { - Instructions = new ushort[] { 0xf822, 0x3c06, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000021b8, 0x00002357, 0x00002b00, 0x00002207, 0x00002648, 0x0000219c, 0x000021d2, 0x000023b0, 0x00002368, 0x00002a41, 0x000026ac, 0x00002a86, 0x00002879, 0x00002c1d, 0x00000001, 0x700001f0 }, - FinalRegs = new uint[] { 0x000021b8, 0x00002357, 0x00002b00, 0x00002207, 0x00002648, 0x0000219c, 0x000021d2, 0x000023b0, 0x00002368, 0x00002a41, 0x000026ac, 0x00002a86, 0x00002879, 0x00002c1d, 0x00000001, 0x700001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2afa, Value: 0x2207) }, + Instructions = [0xf822, 0x3c06, 0x4770, 0xe7fe], + StartRegs = [0x000021b8, 0x00002357, 0x00002b00, 0x00002207, 0x00002648, 0x0000219c, 0x000021d2, 0x000023b0, 0x00002368, 0x00002a41, 0x000026ac, 0x00002a86, 0x00002879, 0x00002c1d, 0x00000001, 0x700001f0 + ], + FinalRegs = [0x000021b8, 0x00002357, 0x00002b00, 0x00002207, 0x00002648, 0x0000219c, 0x000021d2, 0x000023b0, 0x00002368, 0x00002a41, 0x000026ac, 0x00002a86, 0x00002879, 0x00002c1d, 0x00000001, 0x700001f0 + ], + MemoryDelta = [(Address: 0x2afa, Value: 0x2207)], }, new() { - Instructions = new ushort[] { 0xf824, 0xac84, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002796, 0x000027c8, 0x0000241b, 0x0000214d, 0x0000220b, 0x00002587, 0x00002130, 0x00002910, 0x00002ac2, 0x00002e74, 0x000028f8, 0x000024bf, 0x0000263a, 0x00002625, 0x00000001, 0x600001f0 }, - FinalRegs = new uint[] { 0x00002796, 0x000027c8, 0x0000241b, 0x0000214d, 0x0000220b, 0x00002587, 0x00002130, 0x00002910, 0x00002ac2, 0x00002e74, 0x000028f8, 0x000024bf, 0x0000263a, 0x00002625, 0x00000001, 0x600001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2186, Value: 0xf886), (Address: 0x2188, Value: 0x2128) }, + Instructions = [0xf824, 0xac84, 0x4770, 0xe7fe], + StartRegs = [0x00002796, 0x000027c8, 0x0000241b, 0x0000214d, 0x0000220b, 0x00002587, 0x00002130, 0x00002910, 0x00002ac2, 0x00002e74, 0x000028f8, 0x000024bf, 0x0000263a, 0x00002625, 0x00000001, 0x600001f0 + ], + FinalRegs = [0x00002796, 0x000027c8, 0x0000241b, 0x0000214d, 0x0000220b, 0x00002587, 0x00002130, 0x00002910, 0x00002ac2, 0x00002e74, 0x000028f8, 0x000024bf, 0x0000263a, 0x00002625, 0x00000001, 0x600001f0 + ], + MemoryDelta = [(Address: 0x2186, Value: 0xf886), (Address: 0x2188, Value: 0x2128)], }, // STRH (imm12) new() { - Instructions = new ushort[] { 0xf8a5, 0x59d4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x000001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x29d4, Value: 0x2000) }, + Instructions = [0xf8a5, 0x59d4, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x000001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x000001f0 + ], + MemoryDelta = [(Address: 0x29d4, Value: 0x2000)], }, new() { - Instructions = new ushort[] { 0xf8ac, 0xc533, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2532, Value: 0x0032), (Address: 0x2534, Value: 0x2520) }, + Instructions = [0xf8ac, 0xc533, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 + ], + MemoryDelta = [(Address: 0x2532, Value: 0x0032), (Address: 0x2534, Value: 0x2520)], }, new() { - Instructions = new ushort[] { 0xf8a3, 0xb559, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x000001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2558, Value: 0x0058), (Address: 0x255a, Value: 0x2520) }, + Instructions = [0xf8a3, 0xb559, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x000001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x000001f0 + ], + MemoryDelta = [(Address: 0x2558, Value: 0x0058), (Address: 0x255a, Value: 0x2520)], }, new() { - Instructions = new ushort[] { 0xf8a5, 0xdb3a, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xb00001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xb00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2b3a, Value: 0x2000) }, + Instructions = [0xf8a5, 0xdb3a, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xb00001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xb00001f0 + ], + MemoryDelta = [(Address: 0x2b3a, Value: 0x2000)], }, new() { - Instructions = new ushort[] { 0xf8a9, 0x02cc, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xc00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x22cc, Value: 0x2000) }, + Instructions = [0xf8a9, 0x02cc, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xc00001f0 + ], + MemoryDelta = [(Address: 0x22cc, Value: 0x2000)], }, // STR (imm8) new() { - Instructions = new ushort[] { 0xf846, 0x1fb4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002b17, 0x0000272f, 0x00002483, 0x0000284c, 0x0000287f, 0x0000238f, 0x0000222d, 0x00002259, 0x0000249d, 0x00002e3f, 0x00002323, 0x00002729, 0x000025c1, 0x00002866, 0x00000001, 0x900001f0 }, - FinalRegs = new uint[] { 0x00002b17, 0x0000272f, 0x00002483, 0x0000284c, 0x0000287f, 0x0000238f, 0x000022e1, 0x00002259, 0x0000249d, 0x00002e3f, 0x00002323, 0x00002729, 0x000025c1, 0x00002866, 0x00000001, 0x900001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x22e0, Value: 0x2fe0), (Address: 0x22e2, Value: 0x0027), (Address: 0x22e4, Value: 0x2200) }, + Instructions = [0xf846, 0x1fb4, 0x4770, 0xe7fe], + StartRegs = [0x00002b17, 0x0000272f, 0x00002483, 0x0000284c, 0x0000287f, 0x0000238f, 0x0000222d, 0x00002259, 0x0000249d, 0x00002e3f, 0x00002323, 0x00002729, 0x000025c1, 0x00002866, 0x00000001, 0x900001f0 + ], + FinalRegs = [0x00002b17, 0x0000272f, 0x00002483, 0x0000284c, 0x0000287f, 0x0000238f, 0x000022e1, 0x00002259, 0x0000249d, 0x00002e3f, 0x00002323, 0x00002729, 0x000025c1, 0x00002866, 0x00000001, 0x900001f0 + ], + MemoryDelta = [(Address: 0x22e0, Value: 0x2fe0), (Address: 0x22e2, Value: 0x0027), (Address: 0x22e4, Value: 0x2200) + ], }, new() { - Instructions = new ushort[] { 0xf844, 0x3f11, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000028e1, 0x00002d48, 0x000027d6, 0x000023ac, 0x000027bb, 0x000026cf, 0x000023c1, 0x00002633, 0x0000214b, 0x00002434, 0x0000239a, 0x000025c6, 0x00002148, 0x00002d1f, 0x00000001, 0x300001f0 }, - FinalRegs = new uint[] { 0x000028e1, 0x00002d48, 0x000027d6, 0x000023ac, 0x000027cc, 0x000026cf, 0x000023c1, 0x00002633, 0x0000214b, 0x00002434, 0x0000239a, 0x000025c6, 0x00002148, 0x00002d1f, 0x00000001, 0x300001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x27cc, Value: 0x23ac), (Address: 0x27ce, Value: 0x0000) }, + Instructions = [0xf844, 0x3f11, 0x4770, 0xe7fe], + StartRegs = [0x000028e1, 0x00002d48, 0x000027d6, 0x000023ac, 0x000027bb, 0x000026cf, 0x000023c1, 0x00002633, 0x0000214b, 0x00002434, 0x0000239a, 0x000025c6, 0x00002148, 0x00002d1f, 0x00000001, 0x300001f0 + ], + FinalRegs = [0x000028e1, 0x00002d48, 0x000027d6, 0x000023ac, 0x000027cc, 0x000026cf, 0x000023c1, 0x00002633, 0x0000214b, 0x00002434, 0x0000239a, 0x000025c6, 0x00002148, 0x00002d1f, 0x00000001, 0x300001f0 + ], + MemoryDelta = [(Address: 0x27cc, Value: 0x23ac), (Address: 0x27ce, Value: 0x0000)], }, new() { - Instructions = new ushort[] { 0xf847, 0x09c2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0000248b, 0x00002396, 0x000023c5, 0x00002be0, 0x0000237d, 0x00002191, 0x00002da0, 0x0000211c, 0x00002d24, 0x000021e6, 0x000024ff, 0x00002268, 0x00002968, 0x0000244d, 0x00000001, 0x800001f0 }, - FinalRegs = new uint[] { 0x0000248b, 0x00002396, 0x000023c5, 0x00002be0, 0x0000237d, 0x00002191, 0x00002da0, 0x0000205a, 0x00002d24, 0x000021e6, 0x000024ff, 0x00002268, 0x00002968, 0x0000244d, 0x00000001, 0x800001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x211c, Value: 0x248b), (Address: 0x211e, Value: 0x0000) }, + Instructions = [0xf847, 0x09c2, 0x4770, 0xe7fe], + StartRegs = [0x0000248b, 0x00002396, 0x000023c5, 0x00002be0, 0x0000237d, 0x00002191, 0x00002da0, 0x0000211c, 0x00002d24, 0x000021e6, 0x000024ff, 0x00002268, 0x00002968, 0x0000244d, 0x00000001, 0x800001f0 + ], + FinalRegs = [0x0000248b, 0x00002396, 0x000023c5, 0x00002be0, 0x0000237d, 0x00002191, 0x00002da0, 0x0000205a, 0x00002d24, 0x000021e6, 0x000024ff, 0x00002268, 0x00002968, 0x0000244d, 0x00000001, 0x800001f0 + ], + MemoryDelta = [(Address: 0x211c, Value: 0x248b), (Address: 0x211e, Value: 0x0000)], }, new() { - Instructions = new ushort[] { 0xf84d, 0x7f23, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000025b0, 0x0000260e, 0x00002343, 0x00002e36, 0x000024c5, 0x000029bc, 0x0000278e, 0x00002b63, 0x00002ce7, 0x000029af, 0x000023bf, 0x00002475, 0x00002197, 0x00002c33, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0x000025b0, 0x0000260e, 0x00002343, 0x00002e36, 0x000024c5, 0x000029bc, 0x0000278e, 0x00002b63, 0x00002ce7, 0x000029af, 0x000023bf, 0x00002475, 0x00002197, 0x00002c56, 0x00000001, 0x200001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2c56, Value: 0x2b63), (Address: 0x2c58, Value: 0x0000) }, + Instructions = [0xf84d, 0x7f23, 0x4770, 0xe7fe], + StartRegs = [0x000025b0, 0x0000260e, 0x00002343, 0x00002e36, 0x000024c5, 0x000029bc, 0x0000278e, 0x00002b63, 0x00002ce7, 0x000029af, 0x000023bf, 0x00002475, 0x00002197, 0x00002c33, 0x00000001, 0x200001f0 + ], + FinalRegs = [0x000025b0, 0x0000260e, 0x00002343, 0x00002e36, 0x000024c5, 0x000029bc, 0x0000278e, 0x00002b63, 0x00002ce7, 0x000029af, 0x000023bf, 0x00002475, 0x00002197, 0x00002c56, 0x00000001, 0x200001f0 + ], + MemoryDelta = [(Address: 0x2c56, Value: 0x2b63), (Address: 0x2c58, Value: 0x0000)], }, new() { - Instructions = new ushort[] { 0xf843, 0x9d24, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002ce4, 0x00002e0e, 0x000026d5, 0x000025fb, 0x00002b78, 0x0000215a, 0x00002af7, 0x0000259c, 0x00002645, 0x000027dc, 0x00002163, 0x000028f5, 0x000029df, 0x0000230b, 0x00000001, 0x500001f0 }, - FinalRegs = new uint[] { 0x00002ce4, 0x00002e0e, 0x000026d5, 0x000025d7, 0x00002b78, 0x0000215a, 0x00002af7, 0x0000259c, 0x00002645, 0x000027dc, 0x00002163, 0x000028f5, 0x000029df, 0x0000230b, 0x00000001, 0x500001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x25d6, Value: 0xdcd6), (Address: 0x25d8, Value: 0x0027), (Address: 0x25da, Value: 0x2500) }, + Instructions = [0xf843, 0x9d24, 0x4770, 0xe7fe], + StartRegs = [0x00002ce4, 0x00002e0e, 0x000026d5, 0x000025fb, 0x00002b78, 0x0000215a, 0x00002af7, 0x0000259c, 0x00002645, 0x000027dc, 0x00002163, 0x000028f5, 0x000029df, 0x0000230b, 0x00000001, 0x500001f0 + ], + FinalRegs = [0x00002ce4, 0x00002e0e, 0x000026d5, 0x000025d7, 0x00002b78, 0x0000215a, 0x00002af7, 0x0000259c, 0x00002645, 0x000027dc, 0x00002163, 0x000028f5, 0x000029df, 0x0000230b, 0x00000001, 0x500001f0 + ], + MemoryDelta = [(Address: 0x25d6, Value: 0xdcd6), (Address: 0x25d8, Value: 0x0027), (Address: 0x25da, Value: 0x2500) + ], }, new() { - Instructions = new ushort[] { 0xf849, 0xdc1a, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002d98, 0x0000254a, 0x00002540, 0x00002324, 0x0000264e, 0x00002523, 0x0000271f, 0x00002875, 0x000023b3, 0x00002680, 0x00002223, 0x000022bf, 0x000025f4, 0x00002d81, 0x00000001, 0x700001f0 }, - FinalRegs = new uint[] { 0x00002d98, 0x0000254a, 0x00002540, 0x00002324, 0x0000264e, 0x00002523, 0x0000271f, 0x00002875, 0x000023b3, 0x00002680, 0x00002223, 0x000022bf, 0x000025f4, 0x00002d81, 0x00000001, 0x700001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2666, Value: 0x2d81), (Address: 0x2668, Value: 0x0000) }, + Instructions = [0xf849, 0xdc1a, 0x4770, 0xe7fe], + StartRegs = [0x00002d98, 0x0000254a, 0x00002540, 0x00002324, 0x0000264e, 0x00002523, 0x0000271f, 0x00002875, 0x000023b3, 0x00002680, 0x00002223, 0x000022bf, 0x000025f4, 0x00002d81, 0x00000001, 0x700001f0 + ], + FinalRegs = [0x00002d98, 0x0000254a, 0x00002540, 0x00002324, 0x0000264e, 0x00002523, 0x0000271f, 0x00002875, 0x000023b3, 0x00002680, 0x00002223, 0x000022bf, 0x000025f4, 0x00002d81, 0x00000001, 0x700001f0 + ], + MemoryDelta = [(Address: 0x2666, Value: 0x2d81), (Address: 0x2668, Value: 0x0000)], }, new() { - Instructions = new ushort[] { 0xf849, 0x0cd1, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0000255a, 0x00002655, 0x00002276, 0x000022e4, 0x00002eef, 0x00002e99, 0x00002b55, 0x00002a40, 0x00002661, 0x00002dbd, 0x00002687, 0x000024e1, 0x000023ea, 0x00002b88, 0x00000001, 0xc00001f0 }, - FinalRegs = new uint[] { 0x0000255a, 0x00002655, 0x00002276, 0x000022e4, 0x00002eef, 0x00002e99, 0x00002b55, 0x00002a40, 0x00002661, 0x00002dbd, 0x00002687, 0x000024e1, 0x000023ea, 0x00002b88, 0x00000001, 0xc00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2cec, Value: 0x255a), (Address: 0x2cee, Value: 0x0000) }, + Instructions = [0xf849, 0x0cd1, 0x4770, 0xe7fe], + StartRegs = [0x0000255a, 0x00002655, 0x00002276, 0x000022e4, 0x00002eef, 0x00002e99, 0x00002b55, 0x00002a40, 0x00002661, 0x00002dbd, 0x00002687, 0x000024e1, 0x000023ea, 0x00002b88, 0x00000001, 0xc00001f0 + ], + FinalRegs = [0x0000255a, 0x00002655, 0x00002276, 0x000022e4, 0x00002eef, 0x00002e99, 0x00002b55, 0x00002a40, 0x00002661, 0x00002dbd, 0x00002687, 0x000024e1, 0x000023ea, 0x00002b88, 0x00000001, 0xc00001f0 + ], + MemoryDelta = [(Address: 0x2cec, Value: 0x255a), (Address: 0x2cee, Value: 0x0000)], }, new() { - Instructions = new ushort[] { 0xf847, 0x7c96, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000027f6, 0x0000222a, 0x000024e1, 0x00002a2d, 0x00002ee8, 0x000023f2, 0x000029de, 0x00002a53, 0x000029da, 0x00002d2c, 0x00002d6f, 0x000026b8, 0x00002777, 0x00002e3a, 0x00000001, 0xf00001f0 }, - FinalRegs = new uint[] { 0x000027f6, 0x0000222a, 0x000024e1, 0x00002a2d, 0x00002ee8, 0x000023f2, 0x000029de, 0x00002a53, 0x000029da, 0x00002d2c, 0x00002d6f, 0x000026b8, 0x00002777, 0x00002e3a, 0x00000001, 0xf00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x29bc, Value: 0x53bc), (Address: 0x29be, Value: 0x002a), (Address: 0x29c0, Value: 0x2900) }, + Instructions = [0xf847, 0x7c96, 0x4770, 0xe7fe], + StartRegs = [0x000027f6, 0x0000222a, 0x000024e1, 0x00002a2d, 0x00002ee8, 0x000023f2, 0x000029de, 0x00002a53, 0x000029da, 0x00002d2c, 0x00002d6f, 0x000026b8, 0x00002777, 0x00002e3a, 0x00000001, 0xf00001f0 + ], + FinalRegs = [0x000027f6, 0x0000222a, 0x000024e1, 0x00002a2d, 0x00002ee8, 0x000023f2, 0x000029de, 0x00002a53, 0x000029da, 0x00002d2c, 0x00002d6f, 0x000026b8, 0x00002777, 0x00002e3a, 0x00000001, 0xf00001f0 + ], + MemoryDelta = [(Address: 0x29bc, Value: 0x53bc), (Address: 0x29be, Value: 0x002a), (Address: 0x29c0, Value: 0x2900) + ], }, new() { - Instructions = new ushort[] { 0xf84d, 0x8cbd, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002a58, 0x00002a59, 0x00002dfd, 0x00002ba8, 0x00002929, 0x00002146, 0x00002706, 0x000025f3, 0x000023d7, 0x0000221f, 0x000027ae, 0x00002a6e, 0x00002824, 0x00002357, 0x00000001, 0x600001f0 }, - FinalRegs = new uint[] { 0x00002a58, 0x00002a59, 0x00002dfd, 0x00002ba8, 0x00002929, 0x00002146, 0x00002706, 0x000025f3, 0x000023d7, 0x0000221f, 0x000027ae, 0x00002a6e, 0x00002824, 0x00002357, 0x00000001, 0x600001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x229a, Value: 0x23d7), (Address: 0x229c, Value: 0x0000) }, + Instructions = [0xf84d, 0x8cbd, 0x4770, 0xe7fe], + StartRegs = [0x00002a58, 0x00002a59, 0x00002dfd, 0x00002ba8, 0x00002929, 0x00002146, 0x00002706, 0x000025f3, 0x000023d7, 0x0000221f, 0x000027ae, 0x00002a6e, 0x00002824, 0x00002357, 0x00000001, 0x600001f0 + ], + FinalRegs = [0x00002a58, 0x00002a59, 0x00002dfd, 0x00002ba8, 0x00002929, 0x00002146, 0x00002706, 0x000025f3, 0x000023d7, 0x0000221f, 0x000027ae, 0x00002a6e, 0x00002824, 0x00002357, 0x00000001, 0x600001f0 + ], + MemoryDelta = [(Address: 0x229a, Value: 0x23d7), (Address: 0x229c, Value: 0x0000)], }, new() { - Instructions = new ushort[] { 0xf846, 0xacaf, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0000284f, 0x00002def, 0x0000292f, 0x000021e8, 0x0000274e, 0x00002518, 0x00002538, 0x00002375, 0x00002d28, 0x0000229a, 0x0000255f, 0x00002eca, 0x00002e15, 0x000021aa, 0x00000001, 0x100001f0 }, - FinalRegs = new uint[] { 0x0000284f, 0x00002def, 0x0000292f, 0x000021e8, 0x0000274e, 0x00002518, 0x00002538, 0x00002375, 0x00002d28, 0x0000229a, 0x0000255f, 0x00002eca, 0x00002e15, 0x000021aa, 0x00000001, 0x100001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2488, Value: 0x5f88), (Address: 0x248a, Value: 0x0025), (Address: 0x248c, Value: 0x2400) }, + Instructions = [0xf846, 0xacaf, 0x4770, 0xe7fe], + StartRegs = [0x0000284f, 0x00002def, 0x0000292f, 0x000021e8, 0x0000274e, 0x00002518, 0x00002538, 0x00002375, 0x00002d28, 0x0000229a, 0x0000255f, 0x00002eca, 0x00002e15, 0x000021aa, 0x00000001, 0x100001f0 + ], + FinalRegs = [0x0000284f, 0x00002def, 0x0000292f, 0x000021e8, 0x0000274e, 0x00002518, 0x00002538, 0x00002375, 0x00002d28, 0x0000229a, 0x0000255f, 0x00002eca, 0x00002e15, 0x000021aa, 0x00000001, 0x100001f0 + ], + MemoryDelta = [(Address: 0x2488, Value: 0x5f88), (Address: 0x248a, Value: 0x0025), (Address: 0x248c, Value: 0x2400) + ], }, // STR (imm12) new() { - Instructions = new ushort[] { 0xf8cc, 0x1a6e, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2a6e, Value: 0x2000), (Address: 0x2a70, Value: 0x0000) }, + Instructions = [0xf8cc, 0x1a6e, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 + ], + MemoryDelta = [(Address: 0x2a6e, Value: 0x2000), (Address: 0x2a70, Value: 0x0000)], }, new() { - Instructions = new ushort[] { 0xf8c9, 0xcfc1, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x2fc0, Value: 0x00c0), (Address: 0x2fc2, Value: 0x0020), (Address: 0x2fc4, Value: 0x2f00) }, + Instructions = [0xf8c9, 0xcfc1, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 + ], + MemoryDelta = [(Address: 0x2fc0, Value: 0x00c0), (Address: 0x2fc2, Value: 0x0020), (Address: 0x2fc4, Value: 0x2f00) + ], }, new() { - Instructions = new ushort[] { 0xf8c3, 0xb5dd, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x600001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x600001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x25dc, Value: 0x00dc), (Address: 0x25de, Value: 0x0020), (Address: 0x25e0, Value: 0x2500) }, + Instructions = [0xf8c3, 0xb5dd, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x600001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x600001f0 + ], + MemoryDelta = [(Address: 0x25dc, Value: 0x00dc), (Address: 0x25de, Value: 0x0020), (Address: 0x25e0, Value: 0x2500) + ], }, new() { - Instructions = new ushort[] { 0xf8c0, 0x69e9, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x29e8, Value: 0x00e8), (Address: 0x29ea, Value: 0x0020), (Address: 0x29ec, Value: 0x2900) }, + Instructions = [0xf8c0, 0x69e9, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xe00001f0 + ], + MemoryDelta = [(Address: 0x29e8, Value: 0x00e8), (Address: 0x29ea, Value: 0x0020), (Address: 0x29ec, Value: 0x2900) + ], }, new() { - Instructions = new ushort[] { 0xf8cd, 0x028f, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x600001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x600001f0 }, - MemoryDelta = new (ulong Address, ushort Value)[] { (Address: 0x228e, Value: 0x008e), (Address: 0x2290, Value: 0x0020), (Address: 0x2292, Value: 0x2200) }, + Instructions = [0xf8cd, 0x028f, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x600001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x600001f0 + ], + MemoryDelta = [(Address: 0x228e, Value: 0x008e), (Address: 0x2290, Value: 0x0020), (Address: 0x2292, Value: 0x2200) + ], }, // LDRB (imm8) new() { - Instructions = new ushort[] { 0xf816, 0x1c48, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002cb8, 0x00002345, 0x00002ebc, 0x00002db8, 0x000021d4, 0x000026e4, 0x00002458, 0x000029e3, 0x000028d2, 0x000027f4, 0x000023d6, 0x00002def, 0x0000285c, 0x00002d06, 0x00000001, 0x600001f0 }, - FinalRegs = new uint[] { 0x00002cb8, 0x00000010, 0x00002ebc, 0x00002db8, 0x000021d4, 0x000026e4, 0x00002458, 0x000029e3, 0x000028d2, 0x000027f4, 0x000023d6, 0x00002def, 0x0000285c, 0x00002d06, 0x00000001, 0x600001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf816, 0x1c48, 0x4770, 0xe7fe], + StartRegs = [0x00002cb8, 0x00002345, 0x00002ebc, 0x00002db8, 0x000021d4, 0x000026e4, 0x00002458, 0x000029e3, 0x000028d2, 0x000027f4, 0x000023d6, 0x00002def, 0x0000285c, 0x00002d06, 0x00000001, 0x600001f0 + ], + FinalRegs = [0x00002cb8, 0x00000010, 0x00002ebc, 0x00002db8, 0x000021d4, 0x000026e4, 0x00002458, 0x000029e3, 0x000028d2, 0x000027f4, 0x000023d6, 0x00002def, 0x0000285c, 0x00002d06, 0x00000001, 0x600001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf815, 0x2d6e, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000021e4, 0x00002425, 0x00002e42, 0x00002a58, 0x00002708, 0x00002965, 0x00002a1d, 0x00002ed5, 0x00002cc4, 0x000026e1, 0x00002b4b, 0x00002ade, 0x00002824, 0x00002975, 0x00000001, 0x100001f0 }, - FinalRegs = new uint[] { 0x000021e4, 0x00002425, 0x00000028, 0x00002a58, 0x00002708, 0x000028f7, 0x00002a1d, 0x00002ed5, 0x00002cc4, 0x000026e1, 0x00002b4b, 0x00002ade, 0x00002824, 0x00002975, 0x00000001, 0x100001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf815, 0x2d6e, 0x4770, 0xe7fe], + StartRegs = [0x000021e4, 0x00002425, 0x00002e42, 0x00002a58, 0x00002708, 0x00002965, 0x00002a1d, 0x00002ed5, 0x00002cc4, 0x000026e1, 0x00002b4b, 0x00002ade, 0x00002824, 0x00002975, 0x00000001, 0x100001f0 + ], + FinalRegs = [0x000021e4, 0x00002425, 0x00000028, 0x00002a58, 0x00002708, 0x000028f7, 0x00002a1d, 0x00002ed5, 0x00002cc4, 0x000026e1, 0x00002b4b, 0x00002ade, 0x00002824, 0x00002975, 0x00000001, 0x100001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf818, 0x0d33, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002492, 0x0000214d, 0x00002827, 0x000021af, 0x0000215e, 0x000028d6, 0x000024ec, 0x00002984, 0x0000297b, 0x000024b5, 0x000024ca, 0x0000298f, 0x00002339, 0x00002b7e, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0x00000048, 0x0000214d, 0x00002827, 0x000021af, 0x0000215e, 0x000028d6, 0x000024ec, 0x00002984, 0x00002948, 0x000024b5, 0x000024ca, 0x0000298f, 0x00002339, 0x00002b7e, 0x00000001, 0xd00001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf818, 0x0d33, 0x4770, 0xe7fe], + StartRegs = [0x00002492, 0x0000214d, 0x00002827, 0x000021af, 0x0000215e, 0x000028d6, 0x000024ec, 0x00002984, 0x0000297b, 0x000024b5, 0x000024ca, 0x0000298f, 0x00002339, 0x00002b7e, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0x00000048, 0x0000214d, 0x00002827, 0x000021af, 0x0000215e, 0x000028d6, 0x000024ec, 0x00002984, 0x00002948, 0x000024b5, 0x000024ca, 0x0000298f, 0x00002339, 0x00002b7e, 0x00000001, 0xd00001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf810, 0xbff3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002ea6, 0x000024fa, 0x00002346, 0x00002748, 0x0000283f, 0x00002770, 0x000023e3, 0x000021aa, 0x0000214a, 0x00002d58, 0x00002159, 0x000022e7, 0x00002242, 0x00002728, 0x00000001, 0x600001f0 }, - FinalRegs = new uint[] { 0x00002f99, 0x000024fa, 0x00002346, 0x00002748, 0x0000283f, 0x00002770, 0x000023e3, 0x000021aa, 0x0000214a, 0x00002d58, 0x00002159, 0x0000002f, 0x00002242, 0x00002728, 0x00000001, 0x600001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf810, 0xbff3, 0x4770, 0xe7fe], + StartRegs = [0x00002ea6, 0x000024fa, 0x00002346, 0x00002748, 0x0000283f, 0x00002770, 0x000023e3, 0x000021aa, 0x0000214a, 0x00002d58, 0x00002159, 0x000022e7, 0x00002242, 0x00002728, 0x00000001, 0x600001f0 + ], + FinalRegs = [0x00002f99, 0x000024fa, 0x00002346, 0x00002748, 0x0000283f, 0x00002770, 0x000023e3, 0x000021aa, 0x0000214a, 0x00002d58, 0x00002159, 0x0000002f, 0x00002242, 0x00002728, 0x00000001, 0x600001f0 + ], + MemoryDelta = [], }, // LDRB (imm12) new() { - Instructions = new ushort[] { 0xf892, 0xcc8f, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x100001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x0000002c, 0x00002000, 0x00000001, 0x100001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf892, 0xcc8f, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x100001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x0000002c, 0x00002000, 0x00000001, 0x100001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf89a, 0x7fdc, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x000000dc, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x200001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf89a, 0x7fdc, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x200001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x000000dc, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x200001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf890, 0x5f9f, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x800001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x0000002f, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x800001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf890, 0x5f9f, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x800001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x0000002f, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x800001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf894, 0xdda1, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x900001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x0000002d, 0x00000001, 0x900001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf894, 0xdda1, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x900001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x0000002d, 0x00000001, 0x900001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf890, 0xc281, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x100001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000022, 0x00002000, 0x00000001, 0x100001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf890, 0xc281, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x100001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000022, 0x00002000, 0x00000001, 0x100001f0 + ], + MemoryDelta = [], }, // LDRH (imm8) new() { - Instructions = new ushort[] { 0xf834, 0x89d8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002a9e, 0x00002d84, 0x00002e9b, 0x00002e7f, 0x000024a2, 0x00002b7b, 0x00002e3b, 0x0000299a, 0x00002dff, 0x00002a9e, 0x000027b2, 0x00002a90, 0x00002883, 0x0000288d, 0x00000001, 0x500001f0 }, - FinalRegs = new uint[] { 0x00002a9e, 0x00002d84, 0x00002e9b, 0x00002e7f, 0x000023ca, 0x00002b7b, 0x00002e3b, 0x0000299a, 0x000024a2, 0x00002a9e, 0x000027b2, 0x00002a90, 0x00002883, 0x0000288d, 0x00000001, 0x500001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf834, 0x89d8, 0x4770, 0xe7fe], + StartRegs = [0x00002a9e, 0x00002d84, 0x00002e9b, 0x00002e7f, 0x000024a2, 0x00002b7b, 0x00002e3b, 0x0000299a, 0x00002dff, 0x00002a9e, 0x000027b2, 0x00002a90, 0x00002883, 0x0000288d, 0x00000001, 0x500001f0 + ], + FinalRegs = [0x00002a9e, 0x00002d84, 0x00002e9b, 0x00002e7f, 0x000023ca, 0x00002b7b, 0x00002e3b, 0x0000299a, 0x000024a2, 0x00002a9e, 0x000027b2, 0x00002a90, 0x00002883, 0x0000288d, 0x00000001, 0x500001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf833, 0x6be4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000028bd, 0x00002b0e, 0x00002bc1, 0x00002a83, 0x00002293, 0x00002c7c, 0x00002bfe, 0x00002eb7, 0x0000299b, 0x000026e6, 0x0000219c, 0x00002d5e, 0x00002cd4, 0x000026cf, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0x000028bd, 0x00002b0e, 0x00002bc1, 0x00002b67, 0x00002293, 0x00002c7c, 0x0000842a, 0x00002eb7, 0x0000299b, 0x000026e6, 0x0000219c, 0x00002d5e, 0x00002cd4, 0x000026cf, 0x00000001, 0xd00001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf833, 0x6be4, 0x4770, 0xe7fe], + StartRegs = [0x000028bd, 0x00002b0e, 0x00002bc1, 0x00002a83, 0x00002293, 0x00002c7c, 0x00002bfe, 0x00002eb7, 0x0000299b, 0x000026e6, 0x0000219c, 0x00002d5e, 0x00002cd4, 0x000026cf, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0x000028bd, 0x00002b0e, 0x00002bc1, 0x00002b67, 0x00002293, 0x00002c7c, 0x0000842a, 0x00002eb7, 0x0000299b, 0x000026e6, 0x0000219c, 0x00002d5e, 0x00002cd4, 0x000026cf, 0x00000001, 0xd00001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf83d, 0x1bca, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0000250e, 0x00002776, 0x000029e5, 0x0000276e, 0x00002c6b, 0x00002712, 0x00002a85, 0x00002d56, 0x000024c0, 0x00002d86, 0x0000254a, 0x00002549, 0x00002795, 0x00002e97, 0x00000001, 0x200001f0 }, - FinalRegs = new uint[] { 0x0000250e, 0x0000982e, 0x000029e5, 0x0000276e, 0x00002c6b, 0x00002712, 0x00002a85, 0x00002d56, 0x000024c0, 0x00002d86, 0x0000254a, 0x00002549, 0x00002795, 0x00002f61, 0x00000001, 0x200001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf83d, 0x1bca, 0x4770, 0xe7fe], + StartRegs = [0x0000250e, 0x00002776, 0x000029e5, 0x0000276e, 0x00002c6b, 0x00002712, 0x00002a85, 0x00002d56, 0x000024c0, 0x00002d86, 0x0000254a, 0x00002549, 0x00002795, 0x00002e97, 0x00000001, 0x200001f0 + ], + FinalRegs = [0x0000250e, 0x0000982e, 0x000029e5, 0x0000276e, 0x00002c6b, 0x00002712, 0x00002a85, 0x00002d56, 0x000024c0, 0x00002d86, 0x0000254a, 0x00002549, 0x00002795, 0x00002f61, 0x00000001, 0x200001f0 + ], + MemoryDelta = [], }, // LDRH (imm12) new() { - Instructions = new ushort[] { 0xf8b7, 0x92fc, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xa00001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x000022fc, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xa00001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf8b7, 0x92fc, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xa00001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x000022fc, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xa00001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf8ba, 0xadd9, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xa00001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x0000da2d, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xa00001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf8ba, 0xadd9, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xa00001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x0000da2d, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xa00001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf8bb, 0x0bb0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0x00002bb0, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xd00001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf8bb, 0x0bb0, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0x00002bb0, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0xd00001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf8b8, 0xc3f8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x600001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x000023f8, 0x00002000, 0x00000001, 0x600001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf8b8, 0xc3f8, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x600001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x000023f8, 0x00002000, 0x00000001, 0x600001f0 + ], + MemoryDelta = [], }, // LDR (imm8) new() { - Instructions = new ushort[] { 0xf85b, 0x3fd1, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002a19, 0x00002e5b, 0x0000231b, 0x000021fa, 0x00002e95, 0x00002bd5, 0x00002e9c, 0x00002dfa, 0x000021d8, 0x00002ce1, 0x00002318, 0x00002735, 0x0000247d, 0x00002436, 0x00000001, 0xf00001f0 }, - FinalRegs = new uint[] { 0x00002a19, 0x00002e5b, 0x0000231b, 0x28082806, 0x00002e95, 0x00002bd5, 0x00002e9c, 0x00002dfa, 0x000021d8, 0x00002ce1, 0x00002318, 0x00002806, 0x0000247d, 0x00002436, 0x00000001, 0xf00001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf85b, 0x3fd1, 0x4770, 0xe7fe], + StartRegs = [0x00002a19, 0x00002e5b, 0x0000231b, 0x000021fa, 0x00002e95, 0x00002bd5, 0x00002e9c, 0x00002dfa, 0x000021d8, 0x00002ce1, 0x00002318, 0x00002735, 0x0000247d, 0x00002436, 0x00000001, 0xf00001f0 + ], + FinalRegs = [0x00002a19, 0x00002e5b, 0x0000231b, 0x28082806, 0x00002e95, 0x00002bd5, 0x00002e9c, 0x00002dfa, 0x000021d8, 0x00002ce1, 0x00002318, 0x00002806, 0x0000247d, 0x00002436, 0x00000001, 0xf00001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf854, 0xab9e, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0000214f, 0x00002578, 0x00002a98, 0x000021b0, 0x00002ebb, 0x0000284a, 0x00002319, 0x00002581, 0x00002179, 0x00002594, 0x00002373, 0x000028f4, 0x00002ec5, 0x00002e0a, 0x00000001, 0xb00001f0 }, - FinalRegs = new uint[] { 0x0000214f, 0x00002578, 0x00002a98, 0x000021b0, 0x00002f59, 0x0000284a, 0x00002319, 0x00002581, 0x00002179, 0x00002594, 0xbe2ebc2e, 0x000028f4, 0x00002ec5, 0x00002e0a, 0x00000001, 0xb00001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf854, 0xab9e, 0x4770, 0xe7fe], + StartRegs = [0x0000214f, 0x00002578, 0x00002a98, 0x000021b0, 0x00002ebb, 0x0000284a, 0x00002319, 0x00002581, 0x00002179, 0x00002594, 0x00002373, 0x000028f4, 0x00002ec5, 0x00002e0a, 0x00000001, 0xb00001f0 + ], + FinalRegs = [0x0000214f, 0x00002578, 0x00002a98, 0x000021b0, 0x00002f59, 0x0000284a, 0x00002319, 0x00002581, 0x00002179, 0x00002594, 0xbe2ebc2e, 0x000028f4, 0x00002ec5, 0x00002e0a, 0x00000001, 0xb00001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf852, 0x6d2d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002e27, 0x00002676, 0x00002bde, 0x000022d9, 0x00002362, 0x00002d4b, 0x00002dab, 0x000022b6, 0x0000229c, 0x00002507, 0x00002848, 0x0000225f, 0x00002ac2, 0x000023c3, 0x00000001, 0xf00001f0 }, - FinalRegs = new uint[] { 0x00002e27, 0x00002676, 0x00002bb1, 0x000022d9, 0x00002362, 0x00002d4b, 0xb42bb22b, 0x000022b6, 0x0000229c, 0x00002507, 0x00002848, 0x0000225f, 0x00002ac2, 0x000023c3, 0x00000001, 0xf00001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf852, 0x6d2d, 0x4770, 0xe7fe], + StartRegs = [0x00002e27, 0x00002676, 0x00002bde, 0x000022d9, 0x00002362, 0x00002d4b, 0x00002dab, 0x000022b6, 0x0000229c, 0x00002507, 0x00002848, 0x0000225f, 0x00002ac2, 0x000023c3, 0x00000001, 0xf00001f0 + ], + FinalRegs = [0x00002e27, 0x00002676, 0x00002bb1, 0x000022d9, 0x00002362, 0x00002d4b, 0xb42bb22b, 0x000022b6, 0x0000229c, 0x00002507, 0x00002848, 0x0000225f, 0x00002ac2, 0x000023c3, 0x00000001, 0xf00001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf850, 0x8da5, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002559, 0x0000285e, 0x000021de, 0x00002223, 0x000023ff, 0x00002e05, 0x00002bf3, 0x000024a5, 0x00002124, 0x00002768, 0x00002a14, 0x0000219e, 0x00002739, 0x00002e3c, 0x00000001, 0xd00001f0 }, - FinalRegs = new uint[] { 0x000024b4, 0x0000285e, 0x000021de, 0x00002223, 0x000023ff, 0x00002e05, 0x00002bf3, 0x000024a5, 0x24b624b4, 0x00002768, 0x00002a14, 0x0000219e, 0x00002739, 0x00002e3c, 0x00000001, 0xd00001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf850, 0x8da5, 0x4770, 0xe7fe], + StartRegs = [0x00002559, 0x0000285e, 0x000021de, 0x00002223, 0x000023ff, 0x00002e05, 0x00002bf3, 0x000024a5, 0x00002124, 0x00002768, 0x00002a14, 0x0000219e, 0x00002739, 0x00002e3c, 0x00000001, 0xd00001f0 + ], + FinalRegs = [0x000024b4, 0x0000285e, 0x000021de, 0x00002223, 0x000023ff, 0x00002e05, 0x00002bf3, 0x000024a5, 0x24b624b4, 0x00002768, 0x00002a14, 0x0000219e, 0x00002739, 0x00002e3c, 0x00000001, 0xd00001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf857, 0x19f6, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x000027f5, 0x0000285e, 0x000025f6, 0x00002e22, 0x00002224, 0x00002870, 0x00002ecc, 0x000024cf, 0x00002711, 0x0000241b, 0x00002ddf, 0x00002545, 0x000028ca, 0x000023c5, 0x00000001, 0x400001f0 }, - FinalRegs = new uint[] { 0x000027f5, 0xd224d024, 0x000025f6, 0x00002e22, 0x00002224, 0x00002870, 0x00002ecc, 0x000023d9, 0x00002711, 0x0000241b, 0x00002ddf, 0x00002545, 0x000028ca, 0x000023c5, 0x00000001, 0x400001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf857, 0x19f6, 0x4770, 0xe7fe], + StartRegs = [0x000027f5, 0x0000285e, 0x000025f6, 0x00002e22, 0x00002224, 0x00002870, 0x00002ecc, 0x000024cf, 0x00002711, 0x0000241b, 0x00002ddf, 0x00002545, 0x000028ca, 0x000023c5, 0x00000001, 0x400001f0 + ], + FinalRegs = [0x000027f5, 0xd224d024, 0x000025f6, 0x00002e22, 0x00002224, 0x00002870, 0x00002ecc, 0x000023d9, 0x00002711, 0x0000241b, 0x00002ddf, 0x00002545, 0x000028ca, 0x000023c5, 0x00000001, 0x400001f0 + ], + MemoryDelta = [], }, // LDR (imm12) new() { - Instructions = new ushort[] { 0xf8d1, 0xc65e, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x000001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x2660265e, 0x00002000, 0x00000001, 0x000001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf8d1, 0xc65e, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x000001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x2660265e, 0x00002000, 0x00000001, 0x000001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf8db, 0xd09b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x800001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x9e209c20, 0x00000001, 0x800001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf8db, 0xd09b, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x800001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x9e209c20, 0x00000001, 0x800001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf8d2, 0x6fde, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x900001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x2fe02fde, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x900001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), + Instructions = [0xf8d2, 0x6fde, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x900001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x2fe02fde, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x900001f0 + ], + MemoryDelta = [], }, new() { - Instructions = new ushort[] { 0xf8dc, 0x3de5, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 }, - FinalRegs = new uint[] { 0x00002000, 0x00002000, 0x00002000, 0xe82de62d, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 }, - MemoryDelta = Array.Empty<(ulong Address, ushort Value)>(), - }, - }; + Instructions = [0xf8dc, 0x3de5, 0x4770, 0xe7fe], + StartRegs = [0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 + ], + FinalRegs = [0x00002000, 0x00002000, 0x00002000, 0xe82de62d, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00002000, 0x00000001, 0x500001f0 + ], + MemoryDelta = [], + } + ]; } } diff --git a/src/Ryujinx.Tests/Cpu/CpuTestThumb.cs b/src/Ryujinx.Tests/Cpu/CpuTestThumb.cs index 6111e53fa..4e90fdeac 100644 --- a/src/Ryujinx.Tests/Cpu/CpuTestThumb.cs +++ b/src/Ryujinx.Tests/Cpu/CpuTestThumb.cs @@ -278,607 +278,907 @@ namespace Ryujinx.Tests.Cpu } public static readonly PrecomputedThumbTestCase[] RandomTestCases = - { + [ new() { - Instructions = new ushort[] { 0x42ab, 0xabed, 0x43fc, 0x4360, 0x40c1, 0x40b5, 0x4353, 0x43ac, 0xba74, 0x4613, 0xb03a, 0xbf2a, 0xa5bd, 0x187b, 0x410a, 0x4405, 0x15b3, 0x1472, 0xb248, 0x43a6, 0x41af, 0xbaf4, 0x1a6d, 0x4684, 0xbf04, 0x4068, 0xb26e, 0x014b, 0x4064, 0xba15, 0x3d2d, 0xb22d, 0x4378, 0x2501, 0x4279, 0xb299, 0x1586, 0x42e7, 0x2f55, 0xba55, 0x1f6f, 0x443d, 0x4194, 0xbfcb, 0xbacd, 0xb2a0, 0x406b, 0x1b65, 0xbfd0, 0x1bf7, 0x41e7, 0xba76, 0x436f, 0x46f8, 0x4042, 0x1ffe, 0x447c, 0xba50, 0x341e, 0x42fd, 0x409c, 0xbf09, 0xb2cf, 0x1c99, 0x41f7, 0x41a6, 0x4278, 0x4040, 0x3747, 0x301a, 0x01cc, 0x4304, 0x1ca3, 0xab1d, 0x43dd, 0x41e3, 0x35ad, 0x43f5, 0xb091, 0x3214, 0x44f1, 0x41d7, 0xb244, 0xb2a2, 0x41e1, 0x3d7a, 0xbf24, 0xbac1, 0x0059, 0xba3b, 0xabe5, 0x4550, 0x0a9e, 0xbfe2, 0x034e, 0xb0b7, 0x0aec, 0x1ee6, 0x3276, 0x0866, 0xa763, 0x1e45, 0x4275, 0xad25, 0x416d, 0x0d6d, 0x0b50, 0xb200, 0x1eba, 0x4378, 0x0547, 0x43bb, 0xb2f2, 0xb2af, 0x1ea0, 0x25b0, 0x4287, 0x1d55, 0x2225, 0xbf46, 0xb276, 0xba57, 0x4253, 0x19e0, 0xbf32, 0x1b06, 0x40ab, 0xb2a4, 0x1eda, 0x1dfd, 0xaabd, 0x1b08, 0xba0e, 0x4014, 0xa079, 0x119b, 0x1d17, 0x41b1, 0x005a, 0xb2ba, 0x419a, 0x4361, 0x2d2a, 0xba36, 0x1b49, 0xbf0c, 0x423c, 0xbae6, 0x2bc0, 0x409c, 0xbfa0, 0xba02, 0x2496, 0xb279, 0xbace, 0xb2e0, 0xbf07, 0x3b17, 0x40a9, 0x3154, 0x41ab, 0x284e, 0xb03c, 0xbf06, 0x41ff, 0xba45, 0x4144, 0xab32, 0x4000, 0xb2b2, 0x3729, 0x46fb, 0xb042, 0x32d0, 0x0557, 0x3583, 0xb249, 0x43f5, 0x0a54, 0x416f, 0x1fc6, 0x4560, 0xb2f6, 0xa114, 0x1dd7, 0x40b4, 0x4304, 0xbfc2, 0x41f2, 0xb2e2, 0xb0d4, 0xbaca, 0xbf65, 0x4065, 0xa1e5, 0xb043, 0x4004, 0xb237, 0x41e9, 0xba0f, 0xaa8e, 0x421d, 0x1d12, 0x435e, 0x434b, 0x4356, 0xacaf, 0x4551, 0x1935, 0x1c1a, 0xba67, 0x2441, 0xbf9a, 0x41a0, 0xb2d8, 0x1c00, 0xad68, 0x4185, 0xb272, 0x43ba, 0x436c, 0xb08b, 0xb2f4, 0x4379, 0x1d0f, 0x46f8, 0x4379, 0x1b8f, 0x4260, 0x40d8, 0xbfa7, 0x0730, 0xb27d, 0xb242, 0x43d3, 0x46fd, 0xbf92, 0xb067, 0xaa15, 0x428c, 0xb2e1, 0x43e5, 0xb2f6, 0x1da1, 0x023e, 0x1a86, 0xba01, 0xb203, 0x13ae, 0xa6a6, 0x45d8, 0xba4c, 0xb228, 0x438c, 0xbae8, 0x4378, 0x3b55, 0xbf5c, 0xb036, 0xb261, 0x1bea, 0x41b8, 0x43f5, 0xba70, 0xa959, 0xb2a9, 0x41fd, 0x19ad, 0x41cd, 0x4171, 0xb046, 0xbf37, 0x431e, 0x4302, 0xb04f, 0x396f, 0x44f0, 0x36d3, 0x01b0, 0x18f5, 0x424b, 0xb27a, 0x43a9, 0xba49, 0x4357, 0x41e5, 0x42d4, 0x0f27, 0x4325, 0x1f9b, 0x447a, 0x46b8, 0xbf60, 0x43c5, 0xa78b, 0x46b2, 0xb2c4, 0x4322, 0xbfad, 0xbf90, 0x4275, 0x40c4, 0x1e91, 0xba0c, 0xbfd0, 0xafd3, 0xbfa0, 0xb2ff, 0xb2dc, 0x43a1, 0xb0db, 0xbf1e, 0x269d, 0xb21a, 0x405d, 0x1822, 0x3dc1, 0xb247, 0x119e, 0xb2b9, 0x4056, 0xaedd, 0xba59, 0x40ed, 0x43c0, 0xbf5f, 0xba35, 0xad1b, 0xb0db, 0x274a, 0x4042, 0x404c, 0xb0a6, 0x2983, 0x41b9, 0x4226, 0x455b, 0xbad3, 0xba5c, 0x42e3, 0xbf8f, 0x3b28, 0xadf6, 0x0321, 0x41c0, 0x223b, 0x40ca, 0x1ea5, 0x4256, 0x409a, 0x4339, 0xba7c, 0x43cf, 0x40bb, 0xb217, 0x427a, 0x289f, 0xb28b, 0xb250, 0xbf2a, 0xb084, 0x410c, 0x416b, 0x4079, 0xb2c9, 0x4149, 0x4143, 0x0c11, 0x461f, 0x18ed, 0x41e1, 0x4651, 0xba1c, 0x422b, 0x44fb, 0xb2b4, 0xbfde, 0x45e1, 0x4601, 0x4483, 0xa182, 0x3311, 0x40bd, 0x446a, 0x431c, 0x2f1e, 0xbac8, 0x02c3, 0x43d5, 0x415d, 0x42f7, 0x1cad, 0x1597, 0xb2cd, 0x1cbd, 0x42df, 0x069e, 0x0986, 0x435d, 0xbad5, 0xbf39, 0x1044, 0x417c, 0x3afb, 0x3be4, 0xb2b8, 0xb0b6, 0x401b, 0x1e4f, 0x4270, 0x4278, 0xacb6, 0xbad1, 0xbaee, 0x1920, 0xba01, 0x4367, 0xb24d, 0xb2db, 0x05da, 0xa2c6, 0x4627, 0xba2b, 0xbfa3, 0x42aa, 0x3637, 0xbafa, 0x4364, 0x43f3, 0xaaea, 0x40a5, 0x424f, 0x45a3, 0x44e9, 0x4477, 0xb09e, 0x42ea, 0x44b9, 0x4694, 0x4629, 0xba4b, 0x42c8, 0x412e, 0xbf9e, 0xba0a, 0x420a, 0xb2d0, 0xbae8, 0xbfb3, 0x40f8, 0x36d0, 0x40bd, 0x4395, 0x0d0f, 0xbafa, 0xb20b, 0x41c6, 0x40ea, 0xbf62, 0x429b, 0x4142, 0x43a6, 0x1f1b, 0xa9b4, 0x4455, 0xb0b1, 0xbae8, 0xb24c, 0x0396, 0x4360, 0xb26d, 0x0693, 0x1842, 0xba1e, 0xb29b, 0xba44, 0x1c45, 0x456f, 0x1a6a, 0x439c, 0xb24d, 0xac7d, 0x410b, 0x419f, 0xbf7e, 0x4057, 0x4377, 0x1ea6, 0x2f69, 0xbfc0, 0x1a75, 0xb2cf, 0x3759, 0x4187, 0x429b, 0x40d7, 0x18e7, 0x2eaa, 0x2bc6, 0xbf0d, 0x028c, 0x40f2, 0x421c, 0xbad1, 0xbf70, 0x41c5, 0xb012, 0x42fe, 0xb2ef, 0xbf96, 0xba10, 0x4103, 0x4434, 0x449a, 0x0b03, 0x40d5, 0x4221, 0x345a, 0x1491, 0xb2fc, 0x46e1, 0x456c, 0xb0f0, 0xb2ba, 0x4254, 0x415f, 0x4269, 0x434f, 0xb04c, 0x4316, 0xb049, 0xba18, 0x1988, 0x4194, 0x4412, 0xbfb3, 0x43f8, 0xba4f, 0xb218, 0x4033, 0x38a4, 0x3d99, 0xa6b2, 0xb076, 0xbfc0, 0x42c6, 0x40ad, 0x432a, 0x4226, 0x1ee9, 0x1aa5, 0xbf13, 0x3370, 0x2820, 0x1191, 0x432c, 0x40b8, 0x464e, 0x1e58, 0x462f, 0xb022, 0x40ba, 0x464f, 0x4083, 0x4683, 0x16c7, 0xbf43, 0x42a0, 0xba56, 0x2f3d, 0x417b, 0x43ff, 0xac7d, 0xb285, 0x4041, 0xba51, 0xbf31, 0x4041, 0xb281, 0xb2d8, 0x1a99, 0x4342, 0x402f, 0x4185, 0x40f3, 0xbfd0, 0x4274, 0x40a3, 0x4064, 0x39a4, 0xba04, 0x408e, 0x3250, 0x3c3d, 0xa2bb, 0xba1c, 0x1a4b, 0x40e5, 0x3ca6, 0xbf67, 0x4285, 0xa9f3, 0x46bc, 0x420d, 0xba05, 0xb009, 0x417c, 0xb27e, 0x1c48, 0x41c8, 0x42e3, 0x1e8c, 0x42b4, 0xba08, 0x3598, 0xb263, 0xb2f2, 0x1053, 0x40da, 0x37c7, 0x370d, 0x1853, 0x41e9, 0xb061, 0x1af7, 0x4015, 0x44aa, 0x1db0, 0x4165, 0xbf27, 0x3d1f, 0x42f4, 0x432f, 0x407c, 0x1457, 0x43c4, 0xb226, 0x40d3, 0x4317, 0x409d, 0x4024, 0xb062, 0xaeba, 0x3c71, 0x43a1, 0xada2, 0x4115, 0xba3f, 0x4163, 0x4386, 0xb2c9, 0x1b5a, 0xba22, 0xbf1e, 0xbaea, 0xbadc, 0x0ff5, 0x1102, 0x41a5, 0x0122, 0x43b3, 0x30c2, 0x43cb, 0x41c8, 0x0365, 0xaa50, 0xb200, 0x4347, 0x4049, 0x4101, 0x0ba9, 0x325b, 0x296c, 0x4364, 0x43d7, 0xbaf1, 0xbfb4, 0x436e, 0xb28f, 0x0163, 0x42d8, 0x4016, 0x33c6, 0x23f4, 0x40e6, 0x25d3, 0x40cf, 0x3a7c, 0x445c, 0x3781, 0x4083, 0xbf16, 0x46a5, 0xae3c, 0x43d1, 0xbf2f, 0x41d9, 0x41b5, 0xbac7, 0x4381, 0x434b, 0x099c, 0x2c64, 0x4202, 0x40c8, 0x4194, 0x4625, 0xbf19, 0x423b, 0x4098, 0x40f0, 0x437f, 0x2643, 0xbaee, 0x40a0, 0x00b2, 0xb06f, 0x42d2, 0x4047, 0xa2b2, 0xb284, 0x4008, 0xaeed, 0x46a9, 0x40d4, 0x42fe, 0x4084, 0x41d0, 0x4304, 0x0437, 0xbad6, 0x4247, 0x4068, 0x43db, 0xbf8e, 0x1fcf, 0x278a, 0xb202, 0x4304, 0x0bf0, 0x4389, 0x3f6d, 0xb266, 0xb243, 0x152d, 0x4630, 0xaee7, 0x0104, 0x40c3, 0x40b9, 0xa96c, 0xb2e0, 0xa0f9, 0xb273, 0x0d05, 0x402b, 0x408f, 0x0b31, 0xa305, 0xbf65, 0x4200, 0xb2e0, 0x43e8, 0x43a2, 0xb206, 0x436f, 0xba61, 0x4037, 0xba4c, 0xbad3, 0x46ed, 0x3501, 0x4321, 0x4137, 0x41c3, 0x17ef, 0x42b7, 0xba13, 0x4246, 0xbf58, 0xb210, 0xb04f, 0x40e1, 0x42e3, 0xa428, 0x404e, 0xb2d1, 0x4043, 0x3f7b, 0x1d55, 0x35c0, 0x1b98, 0x1f9b, 0x44db, 0xbf17, 0xb240, 0x1e91, 0xb0a7, 0x402a, 0x4045, 0x414b, 0x415c, 0x08b1, 0xba10, 0x188b, 0x4219, 0x32e9, 0x427a, 0x2242, 0x1f51, 0x43f8, 0x409c, 0xbaff, 0x1f4a, 0x418f, 0x4566, 0x4151, 0xbaca, 0x4083, 0x409f, 0x44e4, 0xbf70, 0x341c, 0xbf0e, 0x400f, 0x40b5, 0x466d, 0x01a2, 0x4493, 0x43e4, 0x40e4, 0xba5b, 0xb289, 0xbad8, 0x0d68, 0x424f, 0xb20e, 0x418b, 0xb2c3, 0xade0, 0x4066, 0xbf95, 0x2228, 0x4110, 0x1db8, 0xa1e2, 0x0589, 0x4203, 0x4371, 0xbf77, 0x3288, 0x42f8, 0x4341, 0x413e, 0xb027, 0xbaf9, 0xbf70, 0x157d, 0x1d0d, 0xa3c2, 0x1e40, 0x448c, 0x405b, 0x14c2, 0x433f, 0x43b6, 0xba18, 0x1689, 0xbf82, 0x40aa, 0x4048, 0x320d, 0x4620, 0x42c9, 0x1670, 0x409f, 0xba26, 0xbad0, 0x43a5, 0x31b7, 0xbac8, 0x4405, 0xa60d, 0x1e58, 0x2989, 0xb22b, 0x3c62, 0x409f, 0x4295, 0xb287, 0xad38, 0xb025, 0x43eb, 0xbfbf, 0x0126, 0x4253, 0x42df, 0xa723, 0xa96e, 0x42f7, 0x3748, 0xac86, 0x408a, 0xae5c, 0x3778, 0xb2e5, 0xbfc1, 0x418b, 0xbac3, 0xb0fb, 0x45a6, 0x4293, 0x426b, 0xb07e, 0x43c3, 0x34f3, 0x08bc, 0x02c7, 0xbfbc, 0x42af, 0x421d, 0x2675, 0x428b, 0xba07, 0x4107, 0xb07a, 0x433d, 0x438e, 0x1195, 0x403d, 0x4545, 0xbad3, 0x1b5e, 0xbf8f, 0xb289, 0x23df, 0x402d, 0x413b, 0x2af8, 0x003b, 0x46ad, 0xbf9a, 0x4271, 0x433d, 0x43c0, 0x2f27, 0xa5e3, 0x179d, 0x1ced, 0x445d, 0x43c0, 0x3eb2, 0x40e8, 0x39ba, 0x4088, 0x4117, 0x3137, 0x189b, 0xb024, 0xa52f, 0x41b4, 0x1f27, 0x439d, 0x42e2, 0x4265, 0xbfe0, 0x252f, 0xbf7f, 0x3bd7, 0x40dd, 0x2cc1, 0x1c04, 0x41a6, 0x1403, 0x408c, 0x46bd, 0x2a99, 0x4230, 0x42f9, 0x04e8, 0xba5d, 0x284d, 0x43c7, 0x4332, 0x3921, 0x443c, 0xbf08, 0x4390, 0x1edf, 0xa980, 0x40a7, 0xb250, 0xb074, 0x41fd, 0xa12a, 0x1edd, 0xbad8, 0xb231, 0xbfd7, 0x1951, 0x4337, 0x2393, 0x4491, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xfb8e51a4, 0xf9f21a25, 0x2a13c422, 0x57b1ba81, 0xf344e297, 0x1706c70a, 0xb7e92cf4, 0x512917e4, 0x5a86f7df, 0x755562e5, 0xae714612, 0x2c5f02dc, 0x0dcdaeee, 0x75c86709, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x00000000, 0xffffff4b, 0xffffff4e, 0x00000093, 0xffffffff, 0xfffffffd, 0xffffff4e, 0x00000000, 0x00000000, 0x03f9e62a, 0x00000082, 0x000007de, 0xffff8cdd, 0x000042ac, 0x00000000, 0x800001d0 }, + Instructions = [0x42ab, 0xabed, 0x43fc, 0x4360, 0x40c1, 0x40b5, 0x4353, 0x43ac, 0xba74, 0x4613, 0xb03a, 0xbf2a, 0xa5bd, 0x187b, 0x410a, 0x4405, 0x15b3, 0x1472, 0xb248, 0x43a6, 0x41af, 0xbaf4, 0x1a6d, 0x4684, 0xbf04, 0x4068, 0xb26e, 0x014b, 0x4064, 0xba15, 0x3d2d, 0xb22d, 0x4378, 0x2501, 0x4279, 0xb299, 0x1586, 0x42e7, 0x2f55, 0xba55, 0x1f6f, 0x443d, 0x4194, 0xbfcb, 0xbacd, 0xb2a0, 0x406b, 0x1b65, 0xbfd0, 0x1bf7, 0x41e7, 0xba76, 0x436f, 0x46f8, 0x4042, 0x1ffe, 0x447c, 0xba50, 0x341e, 0x42fd, 0x409c, 0xbf09, 0xb2cf, 0x1c99, 0x41f7, 0x41a6, 0x4278, 0x4040, 0x3747, 0x301a, 0x01cc, 0x4304, 0x1ca3, 0xab1d, 0x43dd, 0x41e3, 0x35ad, 0x43f5, 0xb091, 0x3214, 0x44f1, 0x41d7, 0xb244, 0xb2a2, 0x41e1, 0x3d7a, 0xbf24, 0xbac1, 0x0059, 0xba3b, 0xabe5, 0x4550, 0x0a9e, 0xbfe2, 0x034e, 0xb0b7, 0x0aec, 0x1ee6, 0x3276, 0x0866, 0xa763, 0x1e45, 0x4275, 0xad25, 0x416d, 0x0d6d, 0x0b50, 0xb200, 0x1eba, 0x4378, 0x0547, 0x43bb, 0xb2f2, 0xb2af, 0x1ea0, 0x25b0, 0x4287, 0x1d55, 0x2225, 0xbf46, 0xb276, 0xba57, 0x4253, 0x19e0, 0xbf32, 0x1b06, 0x40ab, 0xb2a4, 0x1eda, 0x1dfd, 0xaabd, 0x1b08, 0xba0e, 0x4014, 0xa079, 0x119b, 0x1d17, 0x41b1, 0x005a, 0xb2ba, 0x419a, 0x4361, 0x2d2a, 0xba36, 0x1b49, 0xbf0c, 0x423c, 0xbae6, 0x2bc0, 0x409c, 0xbfa0, 0xba02, 0x2496, 0xb279, 0xbace, 0xb2e0, 0xbf07, 0x3b17, 0x40a9, 0x3154, 0x41ab, 0x284e, 0xb03c, 0xbf06, 0x41ff, 0xba45, 0x4144, 0xab32, 0x4000, 0xb2b2, 0x3729, 0x46fb, 0xb042, 0x32d0, 0x0557, 0x3583, 0xb249, 0x43f5, 0x0a54, 0x416f, 0x1fc6, 0x4560, 0xb2f6, 0xa114, 0x1dd7, 0x40b4, 0x4304, 0xbfc2, 0x41f2, 0xb2e2, 0xb0d4, 0xbaca, 0xbf65, 0x4065, 0xa1e5, 0xb043, 0x4004, 0xb237, 0x41e9, 0xba0f, 0xaa8e, 0x421d, 0x1d12, 0x435e, 0x434b, 0x4356, 0xacaf, 0x4551, 0x1935, 0x1c1a, 0xba67, 0x2441, 0xbf9a, 0x41a0, 0xb2d8, 0x1c00, 0xad68, 0x4185, 0xb272, 0x43ba, 0x436c, 0xb08b, 0xb2f4, 0x4379, 0x1d0f, 0x46f8, 0x4379, 0x1b8f, 0x4260, 0x40d8, 0xbfa7, 0x0730, 0xb27d, 0xb242, 0x43d3, 0x46fd, 0xbf92, 0xb067, 0xaa15, 0x428c, 0xb2e1, 0x43e5, 0xb2f6, 0x1da1, 0x023e, 0x1a86, 0xba01, 0xb203, 0x13ae, 0xa6a6, 0x45d8, 0xba4c, 0xb228, 0x438c, 0xbae8, 0x4378, 0x3b55, 0xbf5c, 0xb036, 0xb261, 0x1bea, 0x41b8, 0x43f5, 0xba70, 0xa959, 0xb2a9, 0x41fd, 0x19ad, 0x41cd, 0x4171, 0xb046, 0xbf37, 0x431e, 0x4302, 0xb04f, 0x396f, 0x44f0, 0x36d3, 0x01b0, 0x18f5, 0x424b, 0xb27a, 0x43a9, 0xba49, 0x4357, 0x41e5, 0x42d4, 0x0f27, 0x4325, 0x1f9b, 0x447a, 0x46b8, 0xbf60, 0x43c5, 0xa78b, 0x46b2, 0xb2c4, 0x4322, 0xbfad, 0xbf90, 0x4275, 0x40c4, 0x1e91, 0xba0c, 0xbfd0, 0xafd3, 0xbfa0, 0xb2ff, 0xb2dc, 0x43a1, 0xb0db, 0xbf1e, 0x269d, 0xb21a, 0x405d, 0x1822, 0x3dc1, 0xb247, 0x119e, 0xb2b9, 0x4056, 0xaedd, 0xba59, 0x40ed, 0x43c0, 0xbf5f, 0xba35, 0xad1b, 0xb0db, 0x274a, 0x4042, 0x404c, 0xb0a6, 0x2983, 0x41b9, 0x4226, 0x455b, 0xbad3, 0xba5c, 0x42e3, 0xbf8f, 0x3b28, 0xadf6, 0x0321, 0x41c0, 0x223b, 0x40ca, 0x1ea5, 0x4256, 0x409a, 0x4339, 0xba7c, 0x43cf, 0x40bb, 0xb217, 0x427a, 0x289f, 0xb28b, 0xb250, 0xbf2a, 0xb084, 0x410c, 0x416b, 0x4079, 0xb2c9, 0x4149, 0x4143, 0x0c11, 0x461f, 0x18ed, 0x41e1, 0x4651, 0xba1c, 0x422b, 0x44fb, 0xb2b4, 0xbfde, 0x45e1, 0x4601, 0x4483, 0xa182, 0x3311, 0x40bd, 0x446a, 0x431c, 0x2f1e, 0xbac8, 0x02c3, 0x43d5, 0x415d, 0x42f7, 0x1cad, 0x1597, 0xb2cd, 0x1cbd, 0x42df, 0x069e, 0x0986, 0x435d, 0xbad5, 0xbf39, 0x1044, 0x417c, 0x3afb, 0x3be4, 0xb2b8, 0xb0b6, 0x401b, 0x1e4f, 0x4270, 0x4278, 0xacb6, 0xbad1, 0xbaee, 0x1920, 0xba01, 0x4367, 0xb24d, 0xb2db, 0x05da, 0xa2c6, 0x4627, 0xba2b, 0xbfa3, 0x42aa, 0x3637, 0xbafa, 0x4364, 0x43f3, 0xaaea, 0x40a5, 0x424f, 0x45a3, 0x44e9, 0x4477, 0xb09e, 0x42ea, 0x44b9, 0x4694, 0x4629, 0xba4b, 0x42c8, 0x412e, 0xbf9e, 0xba0a, 0x420a, 0xb2d0, 0xbae8, 0xbfb3, 0x40f8, 0x36d0, 0x40bd, 0x4395, 0x0d0f, 0xbafa, 0xb20b, 0x41c6, 0x40ea, 0xbf62, 0x429b, 0x4142, 0x43a6, 0x1f1b, 0xa9b4, 0x4455, 0xb0b1, 0xbae8, 0xb24c, 0x0396, 0x4360, 0xb26d, 0x0693, 0x1842, 0xba1e, 0xb29b, 0xba44, 0x1c45, 0x456f, 0x1a6a, 0x439c, 0xb24d, 0xac7d, 0x410b, 0x419f, 0xbf7e, 0x4057, 0x4377, 0x1ea6, 0x2f69, 0xbfc0, 0x1a75, 0xb2cf, 0x3759, 0x4187, 0x429b, 0x40d7, 0x18e7, 0x2eaa, 0x2bc6, 0xbf0d, 0x028c, 0x40f2, 0x421c, 0xbad1, 0xbf70, 0x41c5, 0xb012, 0x42fe, 0xb2ef, 0xbf96, 0xba10, 0x4103, 0x4434, 0x449a, 0x0b03, 0x40d5, 0x4221, 0x345a, 0x1491, 0xb2fc, 0x46e1, 0x456c, 0xb0f0, 0xb2ba, 0x4254, 0x415f, 0x4269, 0x434f, 0xb04c, 0x4316, 0xb049, 0xba18, 0x1988, 0x4194, 0x4412, 0xbfb3, 0x43f8, 0xba4f, 0xb218, 0x4033, 0x38a4, 0x3d99, 0xa6b2, 0xb076, 0xbfc0, 0x42c6, 0x40ad, 0x432a, 0x4226, 0x1ee9, 0x1aa5, 0xbf13, 0x3370, 0x2820, 0x1191, 0x432c, 0x40b8, 0x464e, 0x1e58, 0x462f, 0xb022, 0x40ba, 0x464f, 0x4083, 0x4683, 0x16c7, 0xbf43, 0x42a0, 0xba56, 0x2f3d, 0x417b, 0x43ff, 0xac7d, 0xb285, 0x4041, 0xba51, 0xbf31, 0x4041, 0xb281, 0xb2d8, 0x1a99, 0x4342, 0x402f, 0x4185, 0x40f3, 0xbfd0, 0x4274, 0x40a3, 0x4064, 0x39a4, 0xba04, 0x408e, 0x3250, 0x3c3d, 0xa2bb, 0xba1c, 0x1a4b, 0x40e5, 0x3ca6, 0xbf67, 0x4285, 0xa9f3, 0x46bc, 0x420d, 0xba05, 0xb009, 0x417c, 0xb27e, 0x1c48, 0x41c8, 0x42e3, 0x1e8c, 0x42b4, 0xba08, 0x3598, 0xb263, 0xb2f2, 0x1053, 0x40da, 0x37c7, 0x370d, 0x1853, 0x41e9, 0xb061, 0x1af7, 0x4015, 0x44aa, 0x1db0, 0x4165, 0xbf27, 0x3d1f, 0x42f4, 0x432f, 0x407c, 0x1457, 0x43c4, 0xb226, 0x40d3, 0x4317, 0x409d, 0x4024, 0xb062, 0xaeba, 0x3c71, 0x43a1, 0xada2, 0x4115, 0xba3f, 0x4163, 0x4386, 0xb2c9, 0x1b5a, 0xba22, 0xbf1e, 0xbaea, 0xbadc, 0x0ff5, 0x1102, 0x41a5, 0x0122, 0x43b3, 0x30c2, 0x43cb, 0x41c8, 0x0365, 0xaa50, 0xb200, 0x4347, 0x4049, 0x4101, 0x0ba9, 0x325b, 0x296c, 0x4364, 0x43d7, 0xbaf1, 0xbfb4, 0x436e, 0xb28f, 0x0163, 0x42d8, 0x4016, 0x33c6, 0x23f4, 0x40e6, 0x25d3, 0x40cf, 0x3a7c, 0x445c, 0x3781, 0x4083, 0xbf16, 0x46a5, 0xae3c, 0x43d1, 0xbf2f, 0x41d9, 0x41b5, 0xbac7, 0x4381, 0x434b, 0x099c, 0x2c64, 0x4202, 0x40c8, 0x4194, 0x4625, 0xbf19, 0x423b, 0x4098, 0x40f0, 0x437f, 0x2643, 0xbaee, 0x40a0, 0x00b2, 0xb06f, 0x42d2, 0x4047, 0xa2b2, 0xb284, 0x4008, 0xaeed, 0x46a9, 0x40d4, 0x42fe, 0x4084, 0x41d0, 0x4304, 0x0437, 0xbad6, 0x4247, 0x4068, 0x43db, 0xbf8e, 0x1fcf, 0x278a, 0xb202, 0x4304, 0x0bf0, 0x4389, 0x3f6d, 0xb266, 0xb243, 0x152d, 0x4630, 0xaee7, 0x0104, 0x40c3, 0x40b9, 0xa96c, 0xb2e0, 0xa0f9, 0xb273, 0x0d05, 0x402b, 0x408f, 0x0b31, 0xa305, 0xbf65, 0x4200, 0xb2e0, 0x43e8, 0x43a2, 0xb206, 0x436f, 0xba61, 0x4037, 0xba4c, 0xbad3, 0x46ed, 0x3501, 0x4321, 0x4137, 0x41c3, 0x17ef, 0x42b7, 0xba13, 0x4246, 0xbf58, 0xb210, 0xb04f, 0x40e1, 0x42e3, 0xa428, 0x404e, 0xb2d1, 0x4043, 0x3f7b, 0x1d55, 0x35c0, 0x1b98, 0x1f9b, 0x44db, 0xbf17, 0xb240, 0x1e91, 0xb0a7, 0x402a, 0x4045, 0x414b, 0x415c, 0x08b1, 0xba10, 0x188b, 0x4219, 0x32e9, 0x427a, 0x2242, 0x1f51, 0x43f8, 0x409c, 0xbaff, 0x1f4a, 0x418f, 0x4566, 0x4151, 0xbaca, 0x4083, 0x409f, 0x44e4, 0xbf70, 0x341c, 0xbf0e, 0x400f, 0x40b5, 0x466d, 0x01a2, 0x4493, 0x43e4, 0x40e4, 0xba5b, 0xb289, 0xbad8, 0x0d68, 0x424f, 0xb20e, 0x418b, 0xb2c3, 0xade0, 0x4066, 0xbf95, 0x2228, 0x4110, 0x1db8, 0xa1e2, 0x0589, 0x4203, 0x4371, 0xbf77, 0x3288, 0x42f8, 0x4341, 0x413e, 0xb027, 0xbaf9, 0xbf70, 0x157d, 0x1d0d, 0xa3c2, 0x1e40, 0x448c, 0x405b, 0x14c2, 0x433f, 0x43b6, 0xba18, 0x1689, 0xbf82, 0x40aa, 0x4048, 0x320d, 0x4620, 0x42c9, 0x1670, 0x409f, 0xba26, 0xbad0, 0x43a5, 0x31b7, 0xbac8, 0x4405, 0xa60d, 0x1e58, 0x2989, 0xb22b, 0x3c62, 0x409f, 0x4295, 0xb287, 0xad38, 0xb025, 0x43eb, 0xbfbf, 0x0126, 0x4253, 0x42df, 0xa723, 0xa96e, 0x42f7, 0x3748, 0xac86, 0x408a, 0xae5c, 0x3778, 0xb2e5, 0xbfc1, 0x418b, 0xbac3, 0xb0fb, 0x45a6, 0x4293, 0x426b, 0xb07e, 0x43c3, 0x34f3, 0x08bc, 0x02c7, 0xbfbc, 0x42af, 0x421d, 0x2675, 0x428b, 0xba07, 0x4107, 0xb07a, 0x433d, 0x438e, 0x1195, 0x403d, 0x4545, 0xbad3, 0x1b5e, 0xbf8f, 0xb289, 0x23df, 0x402d, 0x413b, 0x2af8, 0x003b, 0x46ad, 0xbf9a, 0x4271, 0x433d, 0x43c0, 0x2f27, 0xa5e3, 0x179d, 0x1ced, 0x445d, 0x43c0, 0x3eb2, 0x40e8, 0x39ba, 0x4088, 0x4117, 0x3137, 0x189b, 0xb024, 0xa52f, 0x41b4, 0x1f27, 0x439d, 0x42e2, 0x4265, 0xbfe0, 0x252f, 0xbf7f, 0x3bd7, 0x40dd, 0x2cc1, 0x1c04, 0x41a6, 0x1403, 0x408c, 0x46bd, 0x2a99, 0x4230, 0x42f9, 0x04e8, 0xba5d, 0x284d, 0x43c7, 0x4332, 0x3921, 0x443c, 0xbf08, 0x4390, 0x1edf, 0xa980, 0x40a7, 0xb250, 0xb074, 0x41fd, 0xa12a, 0x1edd, 0xbad8, 0xb231, 0xbfd7, 0x1951, 0x4337, 0x2393, 0x4491, 0x4770, 0xe7fe + ], + StartRegs = [0xfb8e51a4, 0xf9f21a25, 0x2a13c422, 0x57b1ba81, 0xf344e297, 0x1706c70a, 0xb7e92cf4, 0x512917e4, 0x5a86f7df, 0x755562e5, 0xae714612, 0x2c5f02dc, 0x0dcdaeee, 0x75c86709, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x00000000, 0xffffff4b, 0xffffff4e, 0x00000093, 0xffffffff, 0xfffffffd, 0xffffff4e, 0x00000000, 0x00000000, 0x03f9e62a, 0x00000082, 0x000007de, 0xffff8cdd, 0x000042ac, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x18f0, 0x405d, 0x4152, 0x40a4, 0x426b, 0xb201, 0x1a63, 0x4623, 0x41a9, 0x1a48, 0x4165, 0xbf7d, 0xba5c, 0xbf00, 0xb06d, 0x43b7, 0x44ca, 0x41b2, 0x2b08, 0xb2c5, 0xb224, 0xb224, 0xb217, 0x2985, 0xba24, 0xb080, 0x43e8, 0x1d56, 0x45f2, 0x4226, 0x3d7c, 0x41bd, 0xbf9f, 0x4315, 0xbafe, 0x400f, 0x463e, 0x22db, 0x4143, 0x42c2, 0x43e0, 0x43e7, 0x40c5, 0xb221, 0xbfc2, 0xb0e4, 0xba4a, 0xbf90, 0x437a, 0x41e2, 0x403c, 0x2581, 0xa403, 0xa17c, 0x4322, 0x1bed, 0x01f8, 0xbf92, 0x3c28, 0x1ed9, 0x0c6a, 0xb219, 0xbf44, 0x416f, 0x18b5, 0xb2ce, 0x405e, 0x31f9, 0x1afe, 0xb068, 0xa488, 0xbaf0, 0x429e, 0xb265, 0x4154, 0x435c, 0x3f65, 0x4132, 0x400f, 0xbfcb, 0xb2b4, 0x4302, 0xa661, 0x429b, 0xba09, 0xb0bd, 0x1c5d, 0x4396, 0xb205, 0x4210, 0x4184, 0x4114, 0x30e9, 0x4694, 0x4281, 0xba3b, 0xb02c, 0x3c7c, 0xb068, 0x1f5f, 0xbad2, 0x2fc9, 0xb2fa, 0x422c, 0x40d1, 0x427a, 0xb00b, 0x1bd1, 0x1959, 0xbf94, 0x35f7, 0x415f, 0x4230, 0x4491, 0xbada, 0x4390, 0xa1d1, 0x4201, 0x4109, 0x3b9a, 0x4279, 0x4372, 0xbff0, 0xb2b4, 0x1c29, 0x0bba, 0x42ff, 0x0b07, 0x431a, 0x35b1, 0x2674, 0x1d4b, 0x43e4, 0xbfdc, 0x4385, 0x00d9, 0x33f4, 0x4010, 0xab8a, 0x42e7, 0xb093, 0xba39, 0x4140, 0x2120, 0xb2e8, 0x2254, 0x4354, 0x430e, 0xba16, 0x441b, 0x1b54, 0xaf2b, 0x4144, 0x424f, 0x3e6a, 0x0c2f, 0x4330, 0x44cc, 0x42a9, 0x433f, 0xbf93, 0x4367, 0x3de9, 0x4203, 0x4120, 0xa589, 0x1a1d, 0xaa95, 0x4068, 0x02ff, 0x4071, 0x44da, 0x181f, 0xbf8a, 0x2c8c, 0x183e, 0x40fd, 0x3711, 0xb2c1, 0x40d1, 0x0e30, 0x42e0, 0xba5f, 0xb00f, 0x0e5e, 0xb2b0, 0x419e, 0x42df, 0x4240, 0xa9a1, 0xaeba, 0x4319, 0x45f1, 0xbae7, 0x4390, 0x43ad, 0x40a0, 0x1e6e, 0x0c84, 0x2ddb, 0xbf45, 0xbfb0, 0x4405, 0x1ca9, 0x39cb, 0xb2e8, 0x0a6f, 0xba79, 0x4044, 0x4491, 0x3a70, 0xa45d, 0x425d, 0x3a30, 0x4107, 0xa248, 0x4055, 0x40f8, 0x43fb, 0x4078, 0x351f, 0x41a3, 0x439f, 0xba6a, 0x426a, 0x3f2f, 0xbf5d, 0x40ee, 0x43b9, 0x1b4a, 0xa56a, 0x2fec, 0xba54, 0x4613, 0x46c5, 0x4237, 0x3dd2, 0xb037, 0x3e1a, 0x04e2, 0x415d, 0x426c, 0xb2ed, 0x42c3, 0x416f, 0x1d8a, 0x42cd, 0x42c8, 0x422a, 0xbf7f, 0xa9b0, 0x4303, 0x43ea, 0x359a, 0x4058, 0x418f, 0x436e, 0xb289, 0x2731, 0x432b, 0x40c4, 0xb298, 0x401e, 0x011e, 0x4132, 0x43b6, 0x4148, 0x41a9, 0x413b, 0x4191, 0x1cb7, 0x0612, 0x4333, 0x3dfe, 0x4264, 0x4261, 0xaabe, 0xba60, 0x40d6, 0xbfe8, 0xa1fc, 0x025e, 0x4249, 0x33b2, 0x2d28, 0x428c, 0xb22d, 0xbae2, 0x449c, 0x40ac, 0x41b2, 0x193a, 0x435b, 0x4155, 0x4060, 0x42b8, 0x4363, 0x18d6, 0x4162, 0x145b, 0x439a, 0xbf2b, 0xba23, 0x41fa, 0x311d, 0xb2bf, 0x3045, 0xba6f, 0xbf06, 0x213a, 0x4565, 0xb0af, 0xb2cf, 0xa9db, 0x41b9, 0x19e3, 0x427d, 0xa296, 0x440c, 0x4363, 0x411f, 0x425b, 0x421a, 0x4207, 0x1840, 0x435e, 0x4285, 0xba48, 0xb2de, 0x420c, 0xba22, 0xbf5d, 0x41d3, 0x1db2, 0x400a, 0xb2b3, 0x42f1, 0x4014, 0x42a5, 0xae6b, 0x37bf, 0xa4b4, 0x437b, 0x4089, 0xbf23, 0x41ca, 0x43c7, 0x45b4, 0xb2d0, 0x418f, 0x4086, 0x03a8, 0x401c, 0x42b0, 0xb270, 0x41df, 0x0b28, 0x428e, 0x1cd2, 0x4666, 0x426a, 0x275d, 0x4189, 0x42a3, 0x0223, 0x40a6, 0xb041, 0x16a8, 0x2e46, 0xba19, 0xb2e6, 0x1b94, 0xbfc1, 0x40cd, 0x1074, 0xb29a, 0x411c, 0x41e6, 0xb052, 0x18f6, 0x4356, 0x43fc, 0x19b9, 0x4045, 0x1a37, 0x4582, 0x43ba, 0x462b, 0x2e1b, 0x4052, 0x0a1a, 0x43ae, 0x31a1, 0x41f2, 0x42dd, 0x17ea, 0x43ee, 0x42f3, 0x2cbf, 0xbf66, 0xb023, 0x40f6, 0x407e, 0x4499, 0x4234, 0x44f4, 0x404a, 0xb2ed, 0x40d4, 0xbaea, 0x0ea6, 0x439a, 0xae0e, 0x1334, 0x4558, 0x336a, 0xb03b, 0x0b94, 0x41cf, 0x4256, 0x4188, 0x31f8, 0x404b, 0x410e, 0xbf69, 0x2a6c, 0xbacb, 0x1e69, 0x011a, 0xb23e, 0x44d0, 0x3916, 0xb295, 0xa0d9, 0xbf84, 0x3b79, 0xa6c3, 0xb089, 0xbfb0, 0x4303, 0x331b, 0xb229, 0x4341, 0x0bbb, 0x1ad9, 0x4047, 0x1ae3, 0x431c, 0xa448, 0x4179, 0x432c, 0xb281, 0x348d, 0x4170, 0xbf47, 0x43e2, 0x41a1, 0x419f, 0xa0fb, 0xb2d7, 0xb2d1, 0x412f, 0x467f, 0xba40, 0xb2e0, 0xbad8, 0x423b, 0x4628, 0x43ea, 0x41b9, 0x41eb, 0xb2b3, 0xbf28, 0x4350, 0xa460, 0x433f, 0x4032, 0x4390, 0xb287, 0x1865, 0x4668, 0x448c, 0x41b5, 0xbf75, 0x41ce, 0xbacd, 0x18ba, 0x1c8d, 0x41fc, 0x42eb, 0xbf18, 0x401d, 0x3d5d, 0x4122, 0xb01a, 0x40c4, 0x4321, 0xa7b0, 0xba1f, 0x4035, 0x0f4e, 0x2829, 0x031f, 0x464a, 0x404f, 0xbf70, 0x4093, 0x4321, 0x42ad, 0x4230, 0x4124, 0x4218, 0x00a8, 0xa451, 0xb2b3, 0xbf7c, 0xb26f, 0x44d3, 0x423b, 0xbfd0, 0x04af, 0xb28f, 0x4335, 0x39ab, 0x42c8, 0xbf24, 0xbf70, 0x3665, 0xb24e, 0xb2d8, 0xa20d, 0x10a4, 0x407e, 0xb0c1, 0xbfc5, 0xb281, 0x400e, 0x4352, 0x46c8, 0xbfb8, 0x4074, 0x4410, 0x4249, 0x4335, 0x248a, 0x43aa, 0x4074, 0x4171, 0x43fd, 0x4060, 0x1fe9, 0xbfae, 0x4477, 0x2eb5, 0x410a, 0x187d, 0x41aa, 0x4137, 0x434c, 0x4353, 0x1ff7, 0xb215, 0x3c25, 0x183f, 0xb2ad, 0xbf4b, 0xb2c7, 0xb00b, 0x4339, 0x417b, 0x44f3, 0xaa2f, 0x4304, 0x43e5, 0x00a0, 0xba0a, 0x41b8, 0x4250, 0xbf22, 0x45bd, 0x41f0, 0xbaf1, 0x419a, 0x1d5c, 0x2eae, 0x42e7, 0x43e3, 0x4680, 0x433b, 0xb290, 0x26f8, 0x4398, 0xbff0, 0x41e6, 0x230e, 0x4173, 0xba5c, 0x077b, 0x4202, 0x40ff, 0xb2f9, 0x4137, 0xba2e, 0xbf90, 0xb08f, 0xb052, 0x42fe, 0xbf9a, 0xb046, 0xb023, 0x4348, 0x286e, 0x1c5b, 0x40af, 0x1c83, 0x41ae, 0xb2d7, 0x4198, 0xbafd, 0x42fd, 0x43ae, 0x3637, 0x30a2, 0x42e9, 0x34b2, 0x409b, 0x1fe7, 0x07b7, 0x19ea, 0xbf46, 0x2813, 0x1bb9, 0x42d9, 0x433b, 0xa211, 0xb24a, 0x24a3, 0xa199, 0x1fde, 0xb2c6, 0x4337, 0xbfce, 0x2ee1, 0x3710, 0xb20a, 0x41d4, 0x4026, 0x4361, 0x0eaf, 0x2d39, 0x1542, 0x04c4, 0x4361, 0x419b, 0x40e2, 0x417d, 0x4060, 0x1f09, 0x3473, 0x46ab, 0x430c, 0x400c, 0xb2d7, 0x4334, 0x4054, 0x0f0c, 0x188e, 0xbf92, 0xbaed, 0xb299, 0x4381, 0x0ac1, 0x0c56, 0x4267, 0x401f, 0x33e1, 0x4304, 0x3db4, 0xb0a2, 0x4635, 0x41f5, 0xbf92, 0x3fad, 0x4115, 0x1cf4, 0xb2bb, 0x4229, 0x437c, 0x4097, 0x412e, 0xa0b9, 0x4356, 0xb2ca, 0x43b0, 0x42f0, 0xba39, 0x4348, 0x4263, 0x4335, 0x42dc, 0x44f0, 0x42c6, 0xaa4f, 0x42bc, 0x43ed, 0xbf87, 0xb03d, 0x41cc, 0x1a30, 0x415e, 0xb257, 0x0f62, 0x4469, 0x4051, 0xa912, 0x4303, 0x4214, 0xb07d, 0x4067, 0xb264, 0x1dbe, 0xbf97, 0x41b8, 0x415c, 0x42d6, 0x414d, 0x13ac, 0x401c, 0x40ed, 0x25d9, 0x1883, 0x41e9, 0x410b, 0x1a38, 0xbfaa, 0x19e7, 0x19f6, 0x19db, 0x4173, 0x41a5, 0x17bc, 0x412d, 0x44d9, 0x4010, 0x1a2b, 0xbaf4, 0x393a, 0xba48, 0xb22d, 0xb0f5, 0xbaf2, 0xa232, 0xba3e, 0x41ce, 0x22dd, 0xbf8c, 0xb21b, 0x1ecd, 0x43a2, 0xba6b, 0x4044, 0x401e, 0x404b, 0x1854, 0xaafa, 0x4120, 0xa640, 0x43f7, 0x40c6, 0xb037, 0xa95e, 0xb2c5, 0xa3a2, 0x41f0, 0xb0e9, 0x4250, 0x4233, 0x438a, 0x401c, 0x46c5, 0x42ca, 0x4366, 0xbfd3, 0xba2b, 0x4029, 0x4060, 0x400f, 0x36eb, 0x404d, 0x400b, 0x171b, 0xb0c3, 0x4027, 0xb2eb, 0x0c68, 0xb04c, 0xa245, 0xb252, 0xb252, 0xb2e1, 0x414a, 0xbf0d, 0x426e, 0x1efb, 0xb2ba, 0x1865, 0xbafc, 0xb005, 0x41da, 0x40ce, 0x3cbd, 0x043e, 0x404c, 0x3d77, 0x4685, 0x1b3d, 0x2daa, 0xa0d8, 0xb2e3, 0x43b3, 0x4181, 0x2bba, 0x4316, 0x41dd, 0x4197, 0xbfc1, 0x0e0d, 0x430f, 0x11cd, 0x3a11, 0x413a, 0xb2b7, 0x4013, 0x409d, 0xb209, 0x281f, 0xba08, 0x41f6, 0xb024, 0x428b, 0xbafb, 0x42eb, 0x40c5, 0x11a0, 0x1876, 0xb009, 0x4004, 0xb224, 0x4395, 0xb04c, 0x3b7a, 0xbf01, 0x439b, 0xb247, 0x4162, 0x2a56, 0x1a27, 0x1d9a, 0x4065, 0xbf11, 0x05ff, 0xb25a, 0x1c63, 0xba4c, 0x3bdb, 0x40da, 0x33b3, 0x36fc, 0xbf7e, 0x41c5, 0xb0e1, 0x408f, 0x43a6, 0x187d, 0x4080, 0x009a, 0x41a1, 0x29d0, 0x41ad, 0x1c45, 0x37ad, 0x3de5, 0x1d62, 0x09f7, 0x402d, 0x43e5, 0xba78, 0xb221, 0xbad6, 0x1e4b, 0x289e, 0x43f0, 0x1bee, 0xb2dd, 0x43cc, 0xbfc2, 0x1d46, 0x40c2, 0xaaf5, 0x171e, 0xbfdf, 0x419c, 0xb2e8, 0xb20d, 0xbad1, 0xbadf, 0x4581, 0x27ba, 0x406b, 0x1a29, 0x436a, 0x466d, 0x121a, 0xb2e4, 0x4220, 0xba0f, 0x19d6, 0x1950, 0xb2ff, 0xbfb0, 0x1a2c, 0xb215, 0x4162, 0xbfcd, 0x05c0, 0x42cc, 0x40f1, 0xb2da, 0x05a2, 0x2929, 0xb0c1, 0xbf14, 0x4381, 0xbad8, 0x4480, 0xb0b6, 0x192e, 0x1f16, 0xba09, 0xbfc0, 0x4313, 0xb279, 0x40e9, 0x41af, 0x4233, 0x45e4, 0x4238, 0xb248, 0xb2a8, 0xb0f9, 0x3043, 0x4107, 0x070c, 0xba6a, 0x25de, 0x4212, 0x19d1, 0x41a4, 0xa17f, 0xbf36, 0x41fe, 0x08d3, 0x405f, 0xbff0, 0x41b2, 0x43e3, 0x4182, 0x08f4, 0x4293, 0x4267, 0x4030, 0x1822, 0xb2d6, 0x0575, 0x2c57, 0xb250, 0x166f, 0xaa81, 0x1c30, 0x4205, 0xab93, 0xbf60, 0xac46, 0x4328, 0xbf79, 0xb201, 0x33c5, 0x2c7f, 0x410c, 0x424e, 0x2676, 0xb0ce, 0x1f23, 0xbaf2, 0xb043, 0x392d, 0xb019, 0x04fb, 0x4227, 0xac6a, 0x27c0, 0x42a5, 0xba24, 0xbaf8, 0x4566, 0xb04f, 0x4299, 0x1cc3, 0x06e8, 0xb249, 0xbf00, 0xb0ba, 0x1be0, 0xbf96, 0x1251, 0xb2da, 0x3640, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x32016fcd, 0xf25a55e0, 0xc71b8a9f, 0x506131e5, 0xb5f08c7b, 0x8bec972b, 0x7ac97655, 0x7a33d75d, 0x0edf0fa3, 0x7cb7ebe2, 0x7905d5a9, 0x340efd29, 0x6029b34a, 0xfe1edb24, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0xef04ff40, 0x00000013, 0x00000003, 0xffffc003, 0xef050000, 0x08000000, 0x00000076, 0x000000c0, 0xe86c0001, 0x61d69c09, 0x29ccbeb4, 0xffffcd3f, 0x63b7d8f7, 0x0000049b, 0x00000000, 0xa00001d0 }, + Instructions = [0x18f0, 0x405d, 0x4152, 0x40a4, 0x426b, 0xb201, 0x1a63, 0x4623, 0x41a9, 0x1a48, 0x4165, 0xbf7d, 0xba5c, 0xbf00, 0xb06d, 0x43b7, 0x44ca, 0x41b2, 0x2b08, 0xb2c5, 0xb224, 0xb224, 0xb217, 0x2985, 0xba24, 0xb080, 0x43e8, 0x1d56, 0x45f2, 0x4226, 0x3d7c, 0x41bd, 0xbf9f, 0x4315, 0xbafe, 0x400f, 0x463e, 0x22db, 0x4143, 0x42c2, 0x43e0, 0x43e7, 0x40c5, 0xb221, 0xbfc2, 0xb0e4, 0xba4a, 0xbf90, 0x437a, 0x41e2, 0x403c, 0x2581, 0xa403, 0xa17c, 0x4322, 0x1bed, 0x01f8, 0xbf92, 0x3c28, 0x1ed9, 0x0c6a, 0xb219, 0xbf44, 0x416f, 0x18b5, 0xb2ce, 0x405e, 0x31f9, 0x1afe, 0xb068, 0xa488, 0xbaf0, 0x429e, 0xb265, 0x4154, 0x435c, 0x3f65, 0x4132, 0x400f, 0xbfcb, 0xb2b4, 0x4302, 0xa661, 0x429b, 0xba09, 0xb0bd, 0x1c5d, 0x4396, 0xb205, 0x4210, 0x4184, 0x4114, 0x30e9, 0x4694, 0x4281, 0xba3b, 0xb02c, 0x3c7c, 0xb068, 0x1f5f, 0xbad2, 0x2fc9, 0xb2fa, 0x422c, 0x40d1, 0x427a, 0xb00b, 0x1bd1, 0x1959, 0xbf94, 0x35f7, 0x415f, 0x4230, 0x4491, 0xbada, 0x4390, 0xa1d1, 0x4201, 0x4109, 0x3b9a, 0x4279, 0x4372, 0xbff0, 0xb2b4, 0x1c29, 0x0bba, 0x42ff, 0x0b07, 0x431a, 0x35b1, 0x2674, 0x1d4b, 0x43e4, 0xbfdc, 0x4385, 0x00d9, 0x33f4, 0x4010, 0xab8a, 0x42e7, 0xb093, 0xba39, 0x4140, 0x2120, 0xb2e8, 0x2254, 0x4354, 0x430e, 0xba16, 0x441b, 0x1b54, 0xaf2b, 0x4144, 0x424f, 0x3e6a, 0x0c2f, 0x4330, 0x44cc, 0x42a9, 0x433f, 0xbf93, 0x4367, 0x3de9, 0x4203, 0x4120, 0xa589, 0x1a1d, 0xaa95, 0x4068, 0x02ff, 0x4071, 0x44da, 0x181f, 0xbf8a, 0x2c8c, 0x183e, 0x40fd, 0x3711, 0xb2c1, 0x40d1, 0x0e30, 0x42e0, 0xba5f, 0xb00f, 0x0e5e, 0xb2b0, 0x419e, 0x42df, 0x4240, 0xa9a1, 0xaeba, 0x4319, 0x45f1, 0xbae7, 0x4390, 0x43ad, 0x40a0, 0x1e6e, 0x0c84, 0x2ddb, 0xbf45, 0xbfb0, 0x4405, 0x1ca9, 0x39cb, 0xb2e8, 0x0a6f, 0xba79, 0x4044, 0x4491, 0x3a70, 0xa45d, 0x425d, 0x3a30, 0x4107, 0xa248, 0x4055, 0x40f8, 0x43fb, 0x4078, 0x351f, 0x41a3, 0x439f, 0xba6a, 0x426a, 0x3f2f, 0xbf5d, 0x40ee, 0x43b9, 0x1b4a, 0xa56a, 0x2fec, 0xba54, 0x4613, 0x46c5, 0x4237, 0x3dd2, 0xb037, 0x3e1a, 0x04e2, 0x415d, 0x426c, 0xb2ed, 0x42c3, 0x416f, 0x1d8a, 0x42cd, 0x42c8, 0x422a, 0xbf7f, 0xa9b0, 0x4303, 0x43ea, 0x359a, 0x4058, 0x418f, 0x436e, 0xb289, 0x2731, 0x432b, 0x40c4, 0xb298, 0x401e, 0x011e, 0x4132, 0x43b6, 0x4148, 0x41a9, 0x413b, 0x4191, 0x1cb7, 0x0612, 0x4333, 0x3dfe, 0x4264, 0x4261, 0xaabe, 0xba60, 0x40d6, 0xbfe8, 0xa1fc, 0x025e, 0x4249, 0x33b2, 0x2d28, 0x428c, 0xb22d, 0xbae2, 0x449c, 0x40ac, 0x41b2, 0x193a, 0x435b, 0x4155, 0x4060, 0x42b8, 0x4363, 0x18d6, 0x4162, 0x145b, 0x439a, 0xbf2b, 0xba23, 0x41fa, 0x311d, 0xb2bf, 0x3045, 0xba6f, 0xbf06, 0x213a, 0x4565, 0xb0af, 0xb2cf, 0xa9db, 0x41b9, 0x19e3, 0x427d, 0xa296, 0x440c, 0x4363, 0x411f, 0x425b, 0x421a, 0x4207, 0x1840, 0x435e, 0x4285, 0xba48, 0xb2de, 0x420c, 0xba22, 0xbf5d, 0x41d3, 0x1db2, 0x400a, 0xb2b3, 0x42f1, 0x4014, 0x42a5, 0xae6b, 0x37bf, 0xa4b4, 0x437b, 0x4089, 0xbf23, 0x41ca, 0x43c7, 0x45b4, 0xb2d0, 0x418f, 0x4086, 0x03a8, 0x401c, 0x42b0, 0xb270, 0x41df, 0x0b28, 0x428e, 0x1cd2, 0x4666, 0x426a, 0x275d, 0x4189, 0x42a3, 0x0223, 0x40a6, 0xb041, 0x16a8, 0x2e46, 0xba19, 0xb2e6, 0x1b94, 0xbfc1, 0x40cd, 0x1074, 0xb29a, 0x411c, 0x41e6, 0xb052, 0x18f6, 0x4356, 0x43fc, 0x19b9, 0x4045, 0x1a37, 0x4582, 0x43ba, 0x462b, 0x2e1b, 0x4052, 0x0a1a, 0x43ae, 0x31a1, 0x41f2, 0x42dd, 0x17ea, 0x43ee, 0x42f3, 0x2cbf, 0xbf66, 0xb023, 0x40f6, 0x407e, 0x4499, 0x4234, 0x44f4, 0x404a, 0xb2ed, 0x40d4, 0xbaea, 0x0ea6, 0x439a, 0xae0e, 0x1334, 0x4558, 0x336a, 0xb03b, 0x0b94, 0x41cf, 0x4256, 0x4188, 0x31f8, 0x404b, 0x410e, 0xbf69, 0x2a6c, 0xbacb, 0x1e69, 0x011a, 0xb23e, 0x44d0, 0x3916, 0xb295, 0xa0d9, 0xbf84, 0x3b79, 0xa6c3, 0xb089, 0xbfb0, 0x4303, 0x331b, 0xb229, 0x4341, 0x0bbb, 0x1ad9, 0x4047, 0x1ae3, 0x431c, 0xa448, 0x4179, 0x432c, 0xb281, 0x348d, 0x4170, 0xbf47, 0x43e2, 0x41a1, 0x419f, 0xa0fb, 0xb2d7, 0xb2d1, 0x412f, 0x467f, 0xba40, 0xb2e0, 0xbad8, 0x423b, 0x4628, 0x43ea, 0x41b9, 0x41eb, 0xb2b3, 0xbf28, 0x4350, 0xa460, 0x433f, 0x4032, 0x4390, 0xb287, 0x1865, 0x4668, 0x448c, 0x41b5, 0xbf75, 0x41ce, 0xbacd, 0x18ba, 0x1c8d, 0x41fc, 0x42eb, 0xbf18, 0x401d, 0x3d5d, 0x4122, 0xb01a, 0x40c4, 0x4321, 0xa7b0, 0xba1f, 0x4035, 0x0f4e, 0x2829, 0x031f, 0x464a, 0x404f, 0xbf70, 0x4093, 0x4321, 0x42ad, 0x4230, 0x4124, 0x4218, 0x00a8, 0xa451, 0xb2b3, 0xbf7c, 0xb26f, 0x44d3, 0x423b, 0xbfd0, 0x04af, 0xb28f, 0x4335, 0x39ab, 0x42c8, 0xbf24, 0xbf70, 0x3665, 0xb24e, 0xb2d8, 0xa20d, 0x10a4, 0x407e, 0xb0c1, 0xbfc5, 0xb281, 0x400e, 0x4352, 0x46c8, 0xbfb8, 0x4074, 0x4410, 0x4249, 0x4335, 0x248a, 0x43aa, 0x4074, 0x4171, 0x43fd, 0x4060, 0x1fe9, 0xbfae, 0x4477, 0x2eb5, 0x410a, 0x187d, 0x41aa, 0x4137, 0x434c, 0x4353, 0x1ff7, 0xb215, 0x3c25, 0x183f, 0xb2ad, 0xbf4b, 0xb2c7, 0xb00b, 0x4339, 0x417b, 0x44f3, 0xaa2f, 0x4304, 0x43e5, 0x00a0, 0xba0a, 0x41b8, 0x4250, 0xbf22, 0x45bd, 0x41f0, 0xbaf1, 0x419a, 0x1d5c, 0x2eae, 0x42e7, 0x43e3, 0x4680, 0x433b, 0xb290, 0x26f8, 0x4398, 0xbff0, 0x41e6, 0x230e, 0x4173, 0xba5c, 0x077b, 0x4202, 0x40ff, 0xb2f9, 0x4137, 0xba2e, 0xbf90, 0xb08f, 0xb052, 0x42fe, 0xbf9a, 0xb046, 0xb023, 0x4348, 0x286e, 0x1c5b, 0x40af, 0x1c83, 0x41ae, 0xb2d7, 0x4198, 0xbafd, 0x42fd, 0x43ae, 0x3637, 0x30a2, 0x42e9, 0x34b2, 0x409b, 0x1fe7, 0x07b7, 0x19ea, 0xbf46, 0x2813, 0x1bb9, 0x42d9, 0x433b, 0xa211, 0xb24a, 0x24a3, 0xa199, 0x1fde, 0xb2c6, 0x4337, 0xbfce, 0x2ee1, 0x3710, 0xb20a, 0x41d4, 0x4026, 0x4361, 0x0eaf, 0x2d39, 0x1542, 0x04c4, 0x4361, 0x419b, 0x40e2, 0x417d, 0x4060, 0x1f09, 0x3473, 0x46ab, 0x430c, 0x400c, 0xb2d7, 0x4334, 0x4054, 0x0f0c, 0x188e, 0xbf92, 0xbaed, 0xb299, 0x4381, 0x0ac1, 0x0c56, 0x4267, 0x401f, 0x33e1, 0x4304, 0x3db4, 0xb0a2, 0x4635, 0x41f5, 0xbf92, 0x3fad, 0x4115, 0x1cf4, 0xb2bb, 0x4229, 0x437c, 0x4097, 0x412e, 0xa0b9, 0x4356, 0xb2ca, 0x43b0, 0x42f0, 0xba39, 0x4348, 0x4263, 0x4335, 0x42dc, 0x44f0, 0x42c6, 0xaa4f, 0x42bc, 0x43ed, 0xbf87, 0xb03d, 0x41cc, 0x1a30, 0x415e, 0xb257, 0x0f62, 0x4469, 0x4051, 0xa912, 0x4303, 0x4214, 0xb07d, 0x4067, 0xb264, 0x1dbe, 0xbf97, 0x41b8, 0x415c, 0x42d6, 0x414d, 0x13ac, 0x401c, 0x40ed, 0x25d9, 0x1883, 0x41e9, 0x410b, 0x1a38, 0xbfaa, 0x19e7, 0x19f6, 0x19db, 0x4173, 0x41a5, 0x17bc, 0x412d, 0x44d9, 0x4010, 0x1a2b, 0xbaf4, 0x393a, 0xba48, 0xb22d, 0xb0f5, 0xbaf2, 0xa232, 0xba3e, 0x41ce, 0x22dd, 0xbf8c, 0xb21b, 0x1ecd, 0x43a2, 0xba6b, 0x4044, 0x401e, 0x404b, 0x1854, 0xaafa, 0x4120, 0xa640, 0x43f7, 0x40c6, 0xb037, 0xa95e, 0xb2c5, 0xa3a2, 0x41f0, 0xb0e9, 0x4250, 0x4233, 0x438a, 0x401c, 0x46c5, 0x42ca, 0x4366, 0xbfd3, 0xba2b, 0x4029, 0x4060, 0x400f, 0x36eb, 0x404d, 0x400b, 0x171b, 0xb0c3, 0x4027, 0xb2eb, 0x0c68, 0xb04c, 0xa245, 0xb252, 0xb252, 0xb2e1, 0x414a, 0xbf0d, 0x426e, 0x1efb, 0xb2ba, 0x1865, 0xbafc, 0xb005, 0x41da, 0x40ce, 0x3cbd, 0x043e, 0x404c, 0x3d77, 0x4685, 0x1b3d, 0x2daa, 0xa0d8, 0xb2e3, 0x43b3, 0x4181, 0x2bba, 0x4316, 0x41dd, 0x4197, 0xbfc1, 0x0e0d, 0x430f, 0x11cd, 0x3a11, 0x413a, 0xb2b7, 0x4013, 0x409d, 0xb209, 0x281f, 0xba08, 0x41f6, 0xb024, 0x428b, 0xbafb, 0x42eb, 0x40c5, 0x11a0, 0x1876, 0xb009, 0x4004, 0xb224, 0x4395, 0xb04c, 0x3b7a, 0xbf01, 0x439b, 0xb247, 0x4162, 0x2a56, 0x1a27, 0x1d9a, 0x4065, 0xbf11, 0x05ff, 0xb25a, 0x1c63, 0xba4c, 0x3bdb, 0x40da, 0x33b3, 0x36fc, 0xbf7e, 0x41c5, 0xb0e1, 0x408f, 0x43a6, 0x187d, 0x4080, 0x009a, 0x41a1, 0x29d0, 0x41ad, 0x1c45, 0x37ad, 0x3de5, 0x1d62, 0x09f7, 0x402d, 0x43e5, 0xba78, 0xb221, 0xbad6, 0x1e4b, 0x289e, 0x43f0, 0x1bee, 0xb2dd, 0x43cc, 0xbfc2, 0x1d46, 0x40c2, 0xaaf5, 0x171e, 0xbfdf, 0x419c, 0xb2e8, 0xb20d, 0xbad1, 0xbadf, 0x4581, 0x27ba, 0x406b, 0x1a29, 0x436a, 0x466d, 0x121a, 0xb2e4, 0x4220, 0xba0f, 0x19d6, 0x1950, 0xb2ff, 0xbfb0, 0x1a2c, 0xb215, 0x4162, 0xbfcd, 0x05c0, 0x42cc, 0x40f1, 0xb2da, 0x05a2, 0x2929, 0xb0c1, 0xbf14, 0x4381, 0xbad8, 0x4480, 0xb0b6, 0x192e, 0x1f16, 0xba09, 0xbfc0, 0x4313, 0xb279, 0x40e9, 0x41af, 0x4233, 0x45e4, 0x4238, 0xb248, 0xb2a8, 0xb0f9, 0x3043, 0x4107, 0x070c, 0xba6a, 0x25de, 0x4212, 0x19d1, 0x41a4, 0xa17f, 0xbf36, 0x41fe, 0x08d3, 0x405f, 0xbff0, 0x41b2, 0x43e3, 0x4182, 0x08f4, 0x4293, 0x4267, 0x4030, 0x1822, 0xb2d6, 0x0575, 0x2c57, 0xb250, 0x166f, 0xaa81, 0x1c30, 0x4205, 0xab93, 0xbf60, 0xac46, 0x4328, 0xbf79, 0xb201, 0x33c5, 0x2c7f, 0x410c, 0x424e, 0x2676, 0xb0ce, 0x1f23, 0xbaf2, 0xb043, 0x392d, 0xb019, 0x04fb, 0x4227, 0xac6a, 0x27c0, 0x42a5, 0xba24, 0xbaf8, 0x4566, 0xb04f, 0x4299, 0x1cc3, 0x06e8, 0xb249, 0xbf00, 0xb0ba, 0x1be0, 0xbf96, 0x1251, 0xb2da, 0x3640, 0x4770, 0xe7fe + ], + StartRegs = [0x32016fcd, 0xf25a55e0, 0xc71b8a9f, 0x506131e5, 0xb5f08c7b, 0x8bec972b, 0x7ac97655, 0x7a33d75d, 0x0edf0fa3, 0x7cb7ebe2, 0x7905d5a9, 0x340efd29, 0x6029b34a, 0xfe1edb24, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0xef04ff40, 0x00000013, 0x00000003, 0xffffc003, 0xef050000, 0x08000000, 0x00000076, 0x000000c0, 0xe86c0001, 0x61d69c09, 0x29ccbeb4, 0xffffcd3f, 0x63b7d8f7, 0x0000049b, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x1e27, 0x1948, 0x1be1, 0x43de, 0x0cb5, 0x25a1, 0x4599, 0x0a02, 0xb22d, 0xb224, 0xba71, 0x420e, 0x1e8e, 0xb09a, 0xb2db, 0x40d0, 0xbf5f, 0x3342, 0x1e2b, 0x42b0, 0x43a6, 0xb2ab, 0x43dc, 0xaad3, 0x186c, 0x1b0b, 0xa519, 0xa22e, 0x2d3c, 0x1bde, 0x138c, 0x42ff, 0x4225, 0xba3f, 0xa44f, 0x4009, 0x2ad5, 0x417b, 0xb262, 0x43db, 0x41c3, 0x436b, 0xba2c, 0x40c9, 0x42ee, 0xba09, 0xbf75, 0x408d, 0x2dc2, 0xb27b, 0xb09e, 0x4468, 0x40da, 0x334e, 0x42f9, 0x40c7, 0x414b, 0x42b9, 0x4476, 0x40b3, 0x41b8, 0x4267, 0x41ac, 0xb25c, 0x4095, 0xbfcc, 0xb2e8, 0xb249, 0x1942, 0x4156, 0x1fae, 0xb27f, 0xb2ca, 0xbf60, 0x14ca, 0x408b, 0x12db, 0xb202, 0x40cf, 0x4037, 0xb2a7, 0x43f7, 0x41c0, 0xbf8a, 0x4340, 0xba72, 0x0994, 0x1910, 0x4442, 0xb073, 0x4351, 0x41fe, 0xbac0, 0x4415, 0x1f23, 0xb0ba, 0x3850, 0x4334, 0xbf75, 0x40bb, 0x1e9f, 0x40f5, 0x415c, 0xb046, 0x0819, 0x4222, 0xaae3, 0x3564, 0xb2ca, 0xba1d, 0x0578, 0xb26f, 0x4392, 0x127c, 0xa13e, 0x4307, 0xbfc5, 0x38f9, 0x40ae, 0x4013, 0xb24a, 0x422f, 0x436e, 0xb23a, 0x403c, 0x1d4e, 0xad67, 0xb28e, 0xbaf9, 0xba44, 0xb25d, 0x43be, 0x1ba1, 0x402e, 0x43c7, 0xba0e, 0xba5e, 0xbfad, 0x43ec, 0x42c4, 0x41f0, 0x1e15, 0x1ada, 0x42e2, 0xa13f, 0x086d, 0x4427, 0x4249, 0x416e, 0xb29c, 0x4388, 0x42c6, 0x42a9, 0x43e5, 0x41f1, 0x4024, 0x44fb, 0x40ba, 0xba65, 0x4143, 0x2a73, 0x21c3, 0x401d, 0x0307, 0xbf52, 0x2b55, 0x4412, 0xaf31, 0xbf99, 0x4374, 0x41c6, 0x4194, 0x187d, 0x03ca, 0x42a7, 0xbaca, 0x1c5c, 0x44a9, 0xba03, 0x1951, 0xaa90, 0xba3d, 0x0779, 0x1c92, 0xbf64, 0x1f8a, 0x3e68, 0xb2e4, 0xb078, 0x0aac, 0x1c35, 0x4105, 0x1fd2, 0x4260, 0x4119, 0x3a45, 0x43e5, 0x42e8, 0xa547, 0xb277, 0x3210, 0x2663, 0x4271, 0xb228, 0x4242, 0x4671, 0x40b7, 0x4328, 0xba4a, 0xbf22, 0xba26, 0x3a73, 0xad7d, 0x1ef1, 0x4114, 0xbf00, 0x420a, 0x4287, 0x40c6, 0xa529, 0x1c0e, 0x43c5, 0x0179, 0x305b, 0x4323, 0x1e26, 0x4261, 0x0a63, 0x45ae, 0x404d, 0x2fd0, 0x4341, 0xb0fb, 0xbfd5, 0x2fc4, 0x1f1e, 0x42d8, 0xbac4, 0xbae0, 0xb2ea, 0x281e, 0x17d1, 0x18fe, 0x4243, 0x4265, 0xb278, 0x4193, 0xaccc, 0x41e2, 0x4129, 0x4111, 0x41e7, 0xb02b, 0x42b1, 0xb252, 0x405e, 0x2ea6, 0x4355, 0xb29d, 0x408d, 0x4272, 0xbfbe, 0x4301, 0x425c, 0x43ef, 0x1be2, 0x1c16, 0x2a79, 0x3f7d, 0x446c, 0x1c40, 0x1890, 0xb20f, 0x19bc, 0x3f0f, 0x4109, 0xba4a, 0x1f0f, 0xb2b4, 0xba7e, 0x418a, 0x43e7, 0x094e, 0x4367, 0xaaf4, 0xbade, 0xbac4, 0x4082, 0xbfa4, 0x3bab, 0x4172, 0xb27e, 0x1bb3, 0x16c0, 0xb217, 0x408d, 0xbad1, 0xb202, 0x0c8a, 0x41d6, 0x432f, 0x1f7a, 0x1ab8, 0x43aa, 0xbae5, 0xbf8a, 0x4342, 0x0d85, 0x2184, 0xb2d6, 0x24ec, 0x4281, 0x4393, 0xbfba, 0x4542, 0x4368, 0xb05f, 0xb22b, 0xa6d1, 0x2917, 0x4071, 0x427a, 0xb2d9, 0x0c5b, 0xb0e2, 0xba75, 0x410d, 0x3696, 0x4078, 0x4203, 0xb2da, 0xb225, 0x4073, 0x408e, 0x43ec, 0x4335, 0x10a4, 0x33f6, 0x402e, 0x4264, 0xb240, 0xbfcb, 0x4314, 0x1b15, 0x41d7, 0xb0f6, 0x0643, 0xba6d, 0x4073, 0xad70, 0xbad7, 0x4646, 0x4275, 0xae3f, 0x46d5, 0xbf35, 0x4390, 0x0321, 0x06c6, 0x4219, 0x02fe, 0x4243, 0x41dd, 0x1e18, 0xb226, 0xbf67, 0x432d, 0x15c5, 0xb273, 0x4043, 0x1fb3, 0xb28e, 0x1df2, 0x42f4, 0x187f, 0xbfc2, 0xba73, 0x4356, 0x3703, 0xbfb2, 0x423d, 0x2afd, 0x412e, 0x42ff, 0xba54, 0xba15, 0xba18, 0x186a, 0xbf70, 0xba3e, 0x43bb, 0x0d94, 0x0940, 0xb015, 0x2f56, 0x4196, 0x4227, 0x437d, 0x40da, 0xb261, 0x4312, 0x4061, 0xbf32, 0x0d8e, 0x4203, 0x4308, 0xbac4, 0x437a, 0x4074, 0xbf5d, 0x427b, 0xb2c7, 0x43e4, 0x39b8, 0xb272, 0x42d4, 0x4183, 0x423e, 0x44ba, 0x428a, 0x2b49, 0x463f, 0x410a, 0x0679, 0x4194, 0xb0dd, 0x41d8, 0x43c4, 0x0a84, 0xbfd7, 0x3b2c, 0xb285, 0x41db, 0x40e2, 0x0e78, 0x43df, 0x4212, 0xbf00, 0x4072, 0x433f, 0xb26b, 0x4389, 0x431a, 0x1890, 0x4264, 0x1f58, 0xbf8a, 0x46d8, 0xa682, 0x1b9e, 0x41d6, 0xbfa2, 0x438e, 0x42f7, 0x46b9, 0x416d, 0xba21, 0xb015, 0x428c, 0x1135, 0x4221, 0x42eb, 0x2cbd, 0x40a3, 0xb033, 0xb2de, 0x4562, 0x43c1, 0x433d, 0x406a, 0xb273, 0x0ddf, 0x104a, 0x440a, 0x2b0d, 0x40ff, 0x40af, 0x43d5, 0xbf42, 0xbacd, 0x143b, 0x43f2, 0x4267, 0xbf7f, 0xb009, 0x1925, 0xb054, 0x1c76, 0x0fb2, 0xb2bd, 0x42cd, 0x43f9, 0x40b1, 0x42af, 0x40df, 0x42fb, 0x421a, 0x4259, 0x311c, 0x4057, 0xba52, 0xbf9f, 0x1f33, 0xba70, 0x44c3, 0xbae6, 0x3643, 0xbaf1, 0x4242, 0x00ff, 0x43ba, 0xb01b, 0x40c8, 0x4551, 0xb26b, 0x14dd, 0x43cd, 0xbfa8, 0xb29f, 0x31ff, 0xb2cd, 0xb2b9, 0x43ce, 0xa0da, 0x46e8, 0x43cd, 0x42a5, 0x4346, 0x431b, 0xba29, 0xb229, 0xbf44, 0x1ed8, 0x42a0, 0x42ed, 0xb067, 0x4217, 0x418a, 0xb020, 0x0ba2, 0xb25e, 0x1498, 0x238f, 0x1f2c, 0x1c97, 0xbf53, 0x41b2, 0x19de, 0x41ae, 0xb050, 0xbf25, 0x4139, 0x41dd, 0x4378, 0xa7a1, 0x1a9e, 0x0941, 0xb22f, 0x2449, 0x4048, 0xba34, 0xb2dd, 0xb2b3, 0xbfa7, 0x438d, 0xba40, 0x03a0, 0x0a6d, 0x11d7, 0x2d4f, 0xb2b8, 0x43c7, 0xb010, 0xb04e, 0x4335, 0xb233, 0x0886, 0x184c, 0x45a9, 0x42a7, 0x42cf, 0x1a82, 0x0bf2, 0x043d, 0x40e7, 0x428b, 0xbf3f, 0x3742, 0x1ac4, 0x4112, 0xbfd0, 0x41db, 0x4128, 0xab3c, 0xbaee, 0x4108, 0xba1b, 0x4298, 0x296b, 0x405a, 0xacd9, 0x4439, 0x392f, 0xbad4, 0x46d5, 0x4349, 0xbfa5, 0x18bd, 0x15c3, 0x4124, 0x1e91, 0xba64, 0xb26b, 0x45a9, 0x1e72, 0xb2e1, 0xa04c, 0x0fa8, 0x418c, 0xabfa, 0xaafd, 0x420f, 0x243b, 0xb0d6, 0xbfa0, 0x4485, 0x4360, 0x41f9, 0x418e, 0x41b2, 0xbf7c, 0xb22a, 0x421e, 0xaa51, 0x40cd, 0x41b0, 0xbfbb, 0x1e7f, 0x4224, 0x43be, 0x420a, 0xbfe1, 0x46d3, 0x4364, 0x427e, 0x404a, 0x422b, 0x3a5f, 0x4280, 0xba77, 0xb0ee, 0x41e9, 0xbfca, 0x4230, 0x4264, 0x2b53, 0xba07, 0x4136, 0xba67, 0xbfd7, 0xb0d5, 0x059a, 0x406a, 0x4216, 0x43d9, 0x3325, 0xa91c, 0xb048, 0x415c, 0xb20e, 0xb2c7, 0xba6f, 0x18d9, 0xba46, 0x1abb, 0x433a, 0x41d0, 0xbf55, 0x4300, 0x4030, 0x412b, 0x37b3, 0xbfd0, 0xa03a, 0x40c0, 0x05ba, 0xb26d, 0x437e, 0x1049, 0x43c6, 0xb00f, 0x44d0, 0x441b, 0x31f0, 0x40a5, 0x199e, 0x40ec, 0xbfa5, 0x1983, 0x4377, 0x40de, 0x2838, 0x1b98, 0x1385, 0x409b, 0x417a, 0x460c, 0x436d, 0x3510, 0xba26, 0x3883, 0x4110, 0x4495, 0x409e, 0xbfae, 0xb297, 0x4678, 0x143a, 0x40a3, 0xb221, 0x333b, 0x1f02, 0xb031, 0x1d7a, 0x4061, 0x4138, 0x41dd, 0xb2dc, 0xb2ed, 0xba39, 0xbf28, 0xb2e8, 0x3fbf, 0x411c, 0x3271, 0x14a9, 0x414f, 0xa624, 0x1d2c, 0xbfa0, 0x4195, 0x4361, 0xb234, 0xb052, 0x4097, 0x43be, 0x4083, 0xba41, 0xbf34, 0xad4e, 0x4109, 0xb256, 0xb2e5, 0x39b3, 0x43ae, 0xb2e3, 0x2479, 0x40ba, 0xb229, 0x40d2, 0xbf7f, 0x3365, 0x41ba, 0xba78, 0x1b0c, 0x40db, 0x4358, 0xa8af, 0x42d7, 0x4573, 0xb29d, 0x15fb, 0xb00a, 0xb2ee, 0xb25c, 0xbfc1, 0x428b, 0x0d95, 0x4121, 0x43d1, 0x424c, 0x2cb8, 0xbf4c, 0xa326, 0x42b0, 0x14f3, 0x43eb, 0x379b, 0x41b8, 0xba3d, 0x1d51, 0x42c0, 0x1012, 0x414d, 0x221b, 0x434d, 0x38f4, 0x19d3, 0xb22e, 0xbfcb, 0x41d2, 0x4124, 0x3cb4, 0x1be3, 0x40ae, 0xba40, 0xb0a4, 0x1bec, 0xbac0, 0x41da, 0x43a7, 0xbf21, 0x41f5, 0x406f, 0xb090, 0x2a79, 0x4314, 0x1e36, 0x1a8e, 0x4163, 0x336b, 0xb0c0, 0x43e4, 0x4266, 0x4312, 0x1e45, 0x42ba, 0x4215, 0x0214, 0xa1c8, 0x4032, 0x43ea, 0xba10, 0x43c3, 0x41cd, 0x46e5, 0x3272, 0x21ec, 0x26d0, 0xbf2f, 0x4266, 0xba19, 0x419e, 0x3453, 0xb2b1, 0xb21b, 0xb2ad, 0x400a, 0x40f5, 0x1c18, 0x433e, 0x40a5, 0x1e4e, 0xb0ec, 0x4354, 0x3d65, 0xaac5, 0xba57, 0x4649, 0x42ab, 0x4123, 0x4434, 0x43eb, 0x430c, 0x2549, 0x0da8, 0x4309, 0x4119, 0xbfa3, 0x4380, 0x24cb, 0x410d, 0x43da, 0x431a, 0x404c, 0xb008, 0x41f2, 0x4588, 0x4112, 0x4572, 0xb231, 0x4196, 0x14a7, 0xa3f8, 0x407d, 0x42a1, 0x4074, 0xbf9a, 0x40ef, 0x4450, 0xb2a4, 0x463d, 0xb0cb, 0xbfa0, 0x4141, 0x316d, 0x19f4, 0x1273, 0x4433, 0x3c10, 0x4228, 0x441e, 0xbfd6, 0x42bc, 0x4088, 0x430e, 0xb01d, 0x1fb4, 0x4054, 0xb287, 0x40ce, 0x4012, 0xba62, 0xb26d, 0x3cfc, 0x43d4, 0x2128, 0xba0d, 0x1837, 0x460b, 0x1add, 0xba23, 0x1abf, 0x437f, 0xbf2d, 0x43bb, 0x407e, 0xb09e, 0x428d, 0x4263, 0x18d9, 0x2f7a, 0x405d, 0x406b, 0x4293, 0xb251, 0x4151, 0x4300, 0x4383, 0xb240, 0xb2f2, 0x2fc6, 0x2bc6, 0xb234, 0xba56, 0xbf17, 0xba48, 0x41e6, 0xba28, 0x4035, 0x4324, 0xb050, 0x43e3, 0x1fb1, 0x42ab, 0x42d4, 0x0549, 0x456b, 0x41d0, 0xb0c4, 0xb07a, 0x42b5, 0x2d57, 0xba52, 0x40c0, 0x43f1, 0xb288, 0xb2db, 0xb231, 0xba37, 0xb2fd, 0x11f8, 0x416d, 0xbfa4, 0x41de, 0x3da7, 0x4157, 0x3ddb, 0x4083, 0x40a4, 0x43ea, 0xb004, 0x295b, 0x416b, 0xbfb6, 0x4695, 0xb275, 0x41db, 0x19b8, 0xb2ad, 0x402e, 0xbf7b, 0x44a4, 0xbfa0, 0x4035, 0x404c, 0xb034, 0x41e9, 0x46f0, 0xbfb2, 0x0925, 0xb022, 0xb0df, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3ca5ddec, 0x567ac17b, 0x5090d856, 0x31dc27ca, 0xce87e6ed, 0x44ad92e1, 0xe67fdf6b, 0xfc9f1f92, 0x0b5c7af3, 0x2abf17e7, 0xcbcf4b4e, 0xcccdc713, 0x7e5f0f46, 0x63825539, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0x00048400, 0x00001000, 0x00000181, 0xffffdebf, 0x00060440, 0x0000fe7e, 0x00008000, 0x00040400, 0x00000000, 0xfffffbe7, 0xcbcf4b30, 0xcbcf4b30, 0x7e650f86, 0x0000015d, 0x00000000, 0x000001d0 }, + Instructions = [0x1e27, 0x1948, 0x1be1, 0x43de, 0x0cb5, 0x25a1, 0x4599, 0x0a02, 0xb22d, 0xb224, 0xba71, 0x420e, 0x1e8e, 0xb09a, 0xb2db, 0x40d0, 0xbf5f, 0x3342, 0x1e2b, 0x42b0, 0x43a6, 0xb2ab, 0x43dc, 0xaad3, 0x186c, 0x1b0b, 0xa519, 0xa22e, 0x2d3c, 0x1bde, 0x138c, 0x42ff, 0x4225, 0xba3f, 0xa44f, 0x4009, 0x2ad5, 0x417b, 0xb262, 0x43db, 0x41c3, 0x436b, 0xba2c, 0x40c9, 0x42ee, 0xba09, 0xbf75, 0x408d, 0x2dc2, 0xb27b, 0xb09e, 0x4468, 0x40da, 0x334e, 0x42f9, 0x40c7, 0x414b, 0x42b9, 0x4476, 0x40b3, 0x41b8, 0x4267, 0x41ac, 0xb25c, 0x4095, 0xbfcc, 0xb2e8, 0xb249, 0x1942, 0x4156, 0x1fae, 0xb27f, 0xb2ca, 0xbf60, 0x14ca, 0x408b, 0x12db, 0xb202, 0x40cf, 0x4037, 0xb2a7, 0x43f7, 0x41c0, 0xbf8a, 0x4340, 0xba72, 0x0994, 0x1910, 0x4442, 0xb073, 0x4351, 0x41fe, 0xbac0, 0x4415, 0x1f23, 0xb0ba, 0x3850, 0x4334, 0xbf75, 0x40bb, 0x1e9f, 0x40f5, 0x415c, 0xb046, 0x0819, 0x4222, 0xaae3, 0x3564, 0xb2ca, 0xba1d, 0x0578, 0xb26f, 0x4392, 0x127c, 0xa13e, 0x4307, 0xbfc5, 0x38f9, 0x40ae, 0x4013, 0xb24a, 0x422f, 0x436e, 0xb23a, 0x403c, 0x1d4e, 0xad67, 0xb28e, 0xbaf9, 0xba44, 0xb25d, 0x43be, 0x1ba1, 0x402e, 0x43c7, 0xba0e, 0xba5e, 0xbfad, 0x43ec, 0x42c4, 0x41f0, 0x1e15, 0x1ada, 0x42e2, 0xa13f, 0x086d, 0x4427, 0x4249, 0x416e, 0xb29c, 0x4388, 0x42c6, 0x42a9, 0x43e5, 0x41f1, 0x4024, 0x44fb, 0x40ba, 0xba65, 0x4143, 0x2a73, 0x21c3, 0x401d, 0x0307, 0xbf52, 0x2b55, 0x4412, 0xaf31, 0xbf99, 0x4374, 0x41c6, 0x4194, 0x187d, 0x03ca, 0x42a7, 0xbaca, 0x1c5c, 0x44a9, 0xba03, 0x1951, 0xaa90, 0xba3d, 0x0779, 0x1c92, 0xbf64, 0x1f8a, 0x3e68, 0xb2e4, 0xb078, 0x0aac, 0x1c35, 0x4105, 0x1fd2, 0x4260, 0x4119, 0x3a45, 0x43e5, 0x42e8, 0xa547, 0xb277, 0x3210, 0x2663, 0x4271, 0xb228, 0x4242, 0x4671, 0x40b7, 0x4328, 0xba4a, 0xbf22, 0xba26, 0x3a73, 0xad7d, 0x1ef1, 0x4114, 0xbf00, 0x420a, 0x4287, 0x40c6, 0xa529, 0x1c0e, 0x43c5, 0x0179, 0x305b, 0x4323, 0x1e26, 0x4261, 0x0a63, 0x45ae, 0x404d, 0x2fd0, 0x4341, 0xb0fb, 0xbfd5, 0x2fc4, 0x1f1e, 0x42d8, 0xbac4, 0xbae0, 0xb2ea, 0x281e, 0x17d1, 0x18fe, 0x4243, 0x4265, 0xb278, 0x4193, 0xaccc, 0x41e2, 0x4129, 0x4111, 0x41e7, 0xb02b, 0x42b1, 0xb252, 0x405e, 0x2ea6, 0x4355, 0xb29d, 0x408d, 0x4272, 0xbfbe, 0x4301, 0x425c, 0x43ef, 0x1be2, 0x1c16, 0x2a79, 0x3f7d, 0x446c, 0x1c40, 0x1890, 0xb20f, 0x19bc, 0x3f0f, 0x4109, 0xba4a, 0x1f0f, 0xb2b4, 0xba7e, 0x418a, 0x43e7, 0x094e, 0x4367, 0xaaf4, 0xbade, 0xbac4, 0x4082, 0xbfa4, 0x3bab, 0x4172, 0xb27e, 0x1bb3, 0x16c0, 0xb217, 0x408d, 0xbad1, 0xb202, 0x0c8a, 0x41d6, 0x432f, 0x1f7a, 0x1ab8, 0x43aa, 0xbae5, 0xbf8a, 0x4342, 0x0d85, 0x2184, 0xb2d6, 0x24ec, 0x4281, 0x4393, 0xbfba, 0x4542, 0x4368, 0xb05f, 0xb22b, 0xa6d1, 0x2917, 0x4071, 0x427a, 0xb2d9, 0x0c5b, 0xb0e2, 0xba75, 0x410d, 0x3696, 0x4078, 0x4203, 0xb2da, 0xb225, 0x4073, 0x408e, 0x43ec, 0x4335, 0x10a4, 0x33f6, 0x402e, 0x4264, 0xb240, 0xbfcb, 0x4314, 0x1b15, 0x41d7, 0xb0f6, 0x0643, 0xba6d, 0x4073, 0xad70, 0xbad7, 0x4646, 0x4275, 0xae3f, 0x46d5, 0xbf35, 0x4390, 0x0321, 0x06c6, 0x4219, 0x02fe, 0x4243, 0x41dd, 0x1e18, 0xb226, 0xbf67, 0x432d, 0x15c5, 0xb273, 0x4043, 0x1fb3, 0xb28e, 0x1df2, 0x42f4, 0x187f, 0xbfc2, 0xba73, 0x4356, 0x3703, 0xbfb2, 0x423d, 0x2afd, 0x412e, 0x42ff, 0xba54, 0xba15, 0xba18, 0x186a, 0xbf70, 0xba3e, 0x43bb, 0x0d94, 0x0940, 0xb015, 0x2f56, 0x4196, 0x4227, 0x437d, 0x40da, 0xb261, 0x4312, 0x4061, 0xbf32, 0x0d8e, 0x4203, 0x4308, 0xbac4, 0x437a, 0x4074, 0xbf5d, 0x427b, 0xb2c7, 0x43e4, 0x39b8, 0xb272, 0x42d4, 0x4183, 0x423e, 0x44ba, 0x428a, 0x2b49, 0x463f, 0x410a, 0x0679, 0x4194, 0xb0dd, 0x41d8, 0x43c4, 0x0a84, 0xbfd7, 0x3b2c, 0xb285, 0x41db, 0x40e2, 0x0e78, 0x43df, 0x4212, 0xbf00, 0x4072, 0x433f, 0xb26b, 0x4389, 0x431a, 0x1890, 0x4264, 0x1f58, 0xbf8a, 0x46d8, 0xa682, 0x1b9e, 0x41d6, 0xbfa2, 0x438e, 0x42f7, 0x46b9, 0x416d, 0xba21, 0xb015, 0x428c, 0x1135, 0x4221, 0x42eb, 0x2cbd, 0x40a3, 0xb033, 0xb2de, 0x4562, 0x43c1, 0x433d, 0x406a, 0xb273, 0x0ddf, 0x104a, 0x440a, 0x2b0d, 0x40ff, 0x40af, 0x43d5, 0xbf42, 0xbacd, 0x143b, 0x43f2, 0x4267, 0xbf7f, 0xb009, 0x1925, 0xb054, 0x1c76, 0x0fb2, 0xb2bd, 0x42cd, 0x43f9, 0x40b1, 0x42af, 0x40df, 0x42fb, 0x421a, 0x4259, 0x311c, 0x4057, 0xba52, 0xbf9f, 0x1f33, 0xba70, 0x44c3, 0xbae6, 0x3643, 0xbaf1, 0x4242, 0x00ff, 0x43ba, 0xb01b, 0x40c8, 0x4551, 0xb26b, 0x14dd, 0x43cd, 0xbfa8, 0xb29f, 0x31ff, 0xb2cd, 0xb2b9, 0x43ce, 0xa0da, 0x46e8, 0x43cd, 0x42a5, 0x4346, 0x431b, 0xba29, 0xb229, 0xbf44, 0x1ed8, 0x42a0, 0x42ed, 0xb067, 0x4217, 0x418a, 0xb020, 0x0ba2, 0xb25e, 0x1498, 0x238f, 0x1f2c, 0x1c97, 0xbf53, 0x41b2, 0x19de, 0x41ae, 0xb050, 0xbf25, 0x4139, 0x41dd, 0x4378, 0xa7a1, 0x1a9e, 0x0941, 0xb22f, 0x2449, 0x4048, 0xba34, 0xb2dd, 0xb2b3, 0xbfa7, 0x438d, 0xba40, 0x03a0, 0x0a6d, 0x11d7, 0x2d4f, 0xb2b8, 0x43c7, 0xb010, 0xb04e, 0x4335, 0xb233, 0x0886, 0x184c, 0x45a9, 0x42a7, 0x42cf, 0x1a82, 0x0bf2, 0x043d, 0x40e7, 0x428b, 0xbf3f, 0x3742, 0x1ac4, 0x4112, 0xbfd0, 0x41db, 0x4128, 0xab3c, 0xbaee, 0x4108, 0xba1b, 0x4298, 0x296b, 0x405a, 0xacd9, 0x4439, 0x392f, 0xbad4, 0x46d5, 0x4349, 0xbfa5, 0x18bd, 0x15c3, 0x4124, 0x1e91, 0xba64, 0xb26b, 0x45a9, 0x1e72, 0xb2e1, 0xa04c, 0x0fa8, 0x418c, 0xabfa, 0xaafd, 0x420f, 0x243b, 0xb0d6, 0xbfa0, 0x4485, 0x4360, 0x41f9, 0x418e, 0x41b2, 0xbf7c, 0xb22a, 0x421e, 0xaa51, 0x40cd, 0x41b0, 0xbfbb, 0x1e7f, 0x4224, 0x43be, 0x420a, 0xbfe1, 0x46d3, 0x4364, 0x427e, 0x404a, 0x422b, 0x3a5f, 0x4280, 0xba77, 0xb0ee, 0x41e9, 0xbfca, 0x4230, 0x4264, 0x2b53, 0xba07, 0x4136, 0xba67, 0xbfd7, 0xb0d5, 0x059a, 0x406a, 0x4216, 0x43d9, 0x3325, 0xa91c, 0xb048, 0x415c, 0xb20e, 0xb2c7, 0xba6f, 0x18d9, 0xba46, 0x1abb, 0x433a, 0x41d0, 0xbf55, 0x4300, 0x4030, 0x412b, 0x37b3, 0xbfd0, 0xa03a, 0x40c0, 0x05ba, 0xb26d, 0x437e, 0x1049, 0x43c6, 0xb00f, 0x44d0, 0x441b, 0x31f0, 0x40a5, 0x199e, 0x40ec, 0xbfa5, 0x1983, 0x4377, 0x40de, 0x2838, 0x1b98, 0x1385, 0x409b, 0x417a, 0x460c, 0x436d, 0x3510, 0xba26, 0x3883, 0x4110, 0x4495, 0x409e, 0xbfae, 0xb297, 0x4678, 0x143a, 0x40a3, 0xb221, 0x333b, 0x1f02, 0xb031, 0x1d7a, 0x4061, 0x4138, 0x41dd, 0xb2dc, 0xb2ed, 0xba39, 0xbf28, 0xb2e8, 0x3fbf, 0x411c, 0x3271, 0x14a9, 0x414f, 0xa624, 0x1d2c, 0xbfa0, 0x4195, 0x4361, 0xb234, 0xb052, 0x4097, 0x43be, 0x4083, 0xba41, 0xbf34, 0xad4e, 0x4109, 0xb256, 0xb2e5, 0x39b3, 0x43ae, 0xb2e3, 0x2479, 0x40ba, 0xb229, 0x40d2, 0xbf7f, 0x3365, 0x41ba, 0xba78, 0x1b0c, 0x40db, 0x4358, 0xa8af, 0x42d7, 0x4573, 0xb29d, 0x15fb, 0xb00a, 0xb2ee, 0xb25c, 0xbfc1, 0x428b, 0x0d95, 0x4121, 0x43d1, 0x424c, 0x2cb8, 0xbf4c, 0xa326, 0x42b0, 0x14f3, 0x43eb, 0x379b, 0x41b8, 0xba3d, 0x1d51, 0x42c0, 0x1012, 0x414d, 0x221b, 0x434d, 0x38f4, 0x19d3, 0xb22e, 0xbfcb, 0x41d2, 0x4124, 0x3cb4, 0x1be3, 0x40ae, 0xba40, 0xb0a4, 0x1bec, 0xbac0, 0x41da, 0x43a7, 0xbf21, 0x41f5, 0x406f, 0xb090, 0x2a79, 0x4314, 0x1e36, 0x1a8e, 0x4163, 0x336b, 0xb0c0, 0x43e4, 0x4266, 0x4312, 0x1e45, 0x42ba, 0x4215, 0x0214, 0xa1c8, 0x4032, 0x43ea, 0xba10, 0x43c3, 0x41cd, 0x46e5, 0x3272, 0x21ec, 0x26d0, 0xbf2f, 0x4266, 0xba19, 0x419e, 0x3453, 0xb2b1, 0xb21b, 0xb2ad, 0x400a, 0x40f5, 0x1c18, 0x433e, 0x40a5, 0x1e4e, 0xb0ec, 0x4354, 0x3d65, 0xaac5, 0xba57, 0x4649, 0x42ab, 0x4123, 0x4434, 0x43eb, 0x430c, 0x2549, 0x0da8, 0x4309, 0x4119, 0xbfa3, 0x4380, 0x24cb, 0x410d, 0x43da, 0x431a, 0x404c, 0xb008, 0x41f2, 0x4588, 0x4112, 0x4572, 0xb231, 0x4196, 0x14a7, 0xa3f8, 0x407d, 0x42a1, 0x4074, 0xbf9a, 0x40ef, 0x4450, 0xb2a4, 0x463d, 0xb0cb, 0xbfa0, 0x4141, 0x316d, 0x19f4, 0x1273, 0x4433, 0x3c10, 0x4228, 0x441e, 0xbfd6, 0x42bc, 0x4088, 0x430e, 0xb01d, 0x1fb4, 0x4054, 0xb287, 0x40ce, 0x4012, 0xba62, 0xb26d, 0x3cfc, 0x43d4, 0x2128, 0xba0d, 0x1837, 0x460b, 0x1add, 0xba23, 0x1abf, 0x437f, 0xbf2d, 0x43bb, 0x407e, 0xb09e, 0x428d, 0x4263, 0x18d9, 0x2f7a, 0x405d, 0x406b, 0x4293, 0xb251, 0x4151, 0x4300, 0x4383, 0xb240, 0xb2f2, 0x2fc6, 0x2bc6, 0xb234, 0xba56, 0xbf17, 0xba48, 0x41e6, 0xba28, 0x4035, 0x4324, 0xb050, 0x43e3, 0x1fb1, 0x42ab, 0x42d4, 0x0549, 0x456b, 0x41d0, 0xb0c4, 0xb07a, 0x42b5, 0x2d57, 0xba52, 0x40c0, 0x43f1, 0xb288, 0xb2db, 0xb231, 0xba37, 0xb2fd, 0x11f8, 0x416d, 0xbfa4, 0x41de, 0x3da7, 0x4157, 0x3ddb, 0x4083, 0x40a4, 0x43ea, 0xb004, 0x295b, 0x416b, 0xbfb6, 0x4695, 0xb275, 0x41db, 0x19b8, 0xb2ad, 0x402e, 0xbf7b, 0x44a4, 0xbfa0, 0x4035, 0x404c, 0xb034, 0x41e9, 0x46f0, 0xbfb2, 0x0925, 0xb022, 0xb0df, 0x4770, 0xe7fe + ], + StartRegs = [0x3ca5ddec, 0x567ac17b, 0x5090d856, 0x31dc27ca, 0xce87e6ed, 0x44ad92e1, 0xe67fdf6b, 0xfc9f1f92, 0x0b5c7af3, 0x2abf17e7, 0xcbcf4b4e, 0xcccdc713, 0x7e5f0f46, 0x63825539, 0x00000000, 0x900001f0 + ], + FinalRegs = [0x00048400, 0x00001000, 0x00000181, 0xffffdebf, 0x00060440, 0x0000fe7e, 0x00008000, 0x00040400, 0x00000000, 0xfffffbe7, 0xcbcf4b30, 0xcbcf4b30, 0x7e650f86, 0x0000015d, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x3a7c, 0x0655, 0x41a9, 0x3921, 0x4147, 0x429a, 0x13d5, 0x415e, 0x43ad, 0x373d, 0xb2e7, 0xa82f, 0x45b2, 0xb299, 0x4174, 0xbf15, 0x1155, 0xba32, 0x3a9c, 0x4037, 0x437e, 0xb01c, 0x4245, 0xbf92, 0x4029, 0x4111, 0x3fd8, 0x4299, 0x1b95, 0x404a, 0x4057, 0x4315, 0x4047, 0x423f, 0xaf03, 0xb27d, 0x22a0, 0xb012, 0xa3cf, 0x40d9, 0x40c6, 0x0e90, 0x4694, 0x40fd, 0x418b, 0x03c9, 0x44e0, 0xa932, 0x4397, 0xba5b, 0xbf3d, 0x4223, 0x1ff6, 0xb296, 0x4322, 0x28dc, 0x32c9, 0x4108, 0xbfdb, 0x433f, 0xb249, 0xb00c, 0x1d27, 0x46cd, 0x1aa1, 0xba2b, 0x1c1d, 0xa28d, 0xbfd5, 0x0057, 0xbac6, 0x4308, 0x1a2a, 0x42d1, 0x18ff, 0x432f, 0xbae0, 0x415c, 0xb032, 0x3c6b, 0x43e3, 0xb265, 0x42a1, 0x4013, 0x430f, 0x1c8c, 0x1fa1, 0x33f7, 0x4168, 0xbf21, 0x2136, 0x431e, 0x422d, 0xbae0, 0x432d, 0xb0ed, 0xb2d8, 0x0a2c, 0x41e8, 0xbf80, 0xbf88, 0xba28, 0xb2aa, 0xb267, 0x430e, 0xbf47, 0x4091, 0x40a5, 0xb2b3, 0x1b9e, 0x41e0, 0x420f, 0x1bfd, 0x1a1f, 0x1e8e, 0xbf7e, 0xbaeb, 0xa08a, 0x437e, 0x4339, 0xb006, 0x221f, 0x42b5, 0xb2c8, 0xb202, 0xbaef, 0x1902, 0x4161, 0x413c, 0x42b3, 0x18ba, 0x2f5c, 0xb252, 0xba3d, 0x4166, 0x43ee, 0x438d, 0xbf8d, 0x46e2, 0x0540, 0x303a, 0x43f5, 0x42a2, 0x4081, 0x34fa, 0x024c, 0x11d5, 0x2ac3, 0xbf00, 0xbfcc, 0x45c3, 0x439d, 0x4019, 0x401d, 0x40b2, 0x0891, 0xa357, 0x0a3d, 0xbf00, 0x0e7b, 0xb29d, 0xae6d, 0x438f, 0x4364, 0x4311, 0x42bd, 0x19ad, 0x44a4, 0x4624, 0xb2e5, 0x4134, 0x43e5, 0xbf16, 0x402d, 0x4391, 0xba51, 0x438f, 0x18f7, 0x455a, 0xafda, 0xbf6f, 0x4125, 0xbf60, 0x2490, 0xba2a, 0x038d, 0x410b, 0x42e6, 0x4224, 0x40b0, 0x1a97, 0xa5ee, 0x4073, 0xbf90, 0x4362, 0x1fbf, 0x4314, 0x4051, 0xb234, 0x4336, 0xbf60, 0xb046, 0xba05, 0xa6cc, 0xb2e1, 0x3022, 0xbfe0, 0x4608, 0xb2b0, 0xbaf1, 0xbfc3, 0x2620, 0x45b5, 0xbad8, 0x408d, 0x24c8, 0xb242, 0xb0f6, 0x4284, 0x4251, 0xaed4, 0x4302, 0x4197, 0xba77, 0x1678, 0x45a8, 0xba65, 0x4333, 0x1e84, 0x1af4, 0x4212, 0xbaff, 0xa4d9, 0xac32, 0xbfd0, 0x2306, 0x42ac, 0xbfaf, 0xb04c, 0xb285, 0x21dc, 0x42a6, 0x4121, 0xbfc0, 0x432f, 0xbf99, 0x3be7, 0xbf90, 0x40e6, 0xb288, 0xb27f, 0x4328, 0x245d, 0x41ef, 0x43bd, 0xb291, 0x40bd, 0xb0b5, 0xbf90, 0xbfe4, 0xb209, 0x1860, 0x4270, 0x42f8, 0xbfb0, 0x40c2, 0xbaeb, 0x09fb, 0x44f1, 0x41fc, 0x406a, 0x4134, 0xbfb0, 0x332a, 0xb26e, 0x0619, 0xba45, 0xbf89, 0x432c, 0xb2c3, 0xac47, 0x1d59, 0x2714, 0xb098, 0x433a, 0xa38a, 0x4573, 0x40b7, 0x41d6, 0x4180, 0xb259, 0xad42, 0x46c1, 0xb076, 0x406b, 0x4131, 0x40fb, 0x243f, 0x4285, 0x1b92, 0xb256, 0xa70f, 0x4168, 0x40bd, 0xb290, 0x12c5, 0xbfb8, 0x3068, 0x42d4, 0x410b, 0x1ef1, 0x4258, 0x0368, 0x46b5, 0x406b, 0x40aa, 0x4321, 0x1f9d, 0x4173, 0x430c, 0x43e5, 0x4026, 0xb2d8, 0xbf01, 0x3733, 0xbac9, 0x4275, 0x4276, 0x43d1, 0x1b8c, 0x4169, 0x4146, 0xa9aa, 0x4302, 0x1316, 0x4416, 0x43ca, 0x02f5, 0x42bb, 0xa7f7, 0xb204, 0x4632, 0x416c, 0xb030, 0x409a, 0x404b, 0x4385, 0x41cd, 0xb2b5, 0xb287, 0x4390, 0xbfce, 0x1b41, 0xb279, 0x1df6, 0x4220, 0xb020, 0x40b1, 0x45d3, 0x1d7b, 0x4162, 0x4234, 0x4201, 0x41cb, 0x30ba, 0x4039, 0xba5e, 0x4402, 0x429d, 0xba4e, 0x4652, 0xb2e8, 0x19cc, 0x38fd, 0x41b3, 0xbfd0, 0x43d6, 0xbf01, 0x43ee, 0x42c8, 0x07a7, 0x1893, 0x43c5, 0x4013, 0x1288, 0xba4a, 0x1534, 0x4091, 0x429b, 0x426b, 0xb234, 0xbf3a, 0x2bf6, 0x1e2f, 0xb28a, 0xa71a, 0xba32, 0x41e8, 0xbf65, 0x43c9, 0xacce, 0x403b, 0xb250, 0xaa0b, 0xabc5, 0xa194, 0xb214, 0x421d, 0x40cc, 0xa0e9, 0xb2d7, 0x1eff, 0x43d1, 0x417e, 0x42f1, 0x4275, 0xba1b, 0x3012, 0x13d4, 0x1fdd, 0x0af4, 0x4255, 0x4264, 0xbf9b, 0x1f56, 0x43e9, 0x418b, 0xbad9, 0x410a, 0x083d, 0x30af, 0xba48, 0x2c36, 0xbfdb, 0xb0fa, 0xb216, 0x3970, 0xba5f, 0x0556, 0x435a, 0x41d2, 0xb2db, 0x4395, 0xb020, 0xa2df, 0x43f7, 0x1dca, 0xb017, 0xba46, 0xb2aa, 0xbfa0, 0x07b6, 0x4040, 0xbf60, 0xa3c8, 0xbf69, 0xb232, 0x3ac1, 0x42bc, 0x44a3, 0xbadf, 0x0651, 0xb27d, 0x1f97, 0xbf93, 0x1625, 0xb2f8, 0xb2b8, 0x1244, 0xbf00, 0x41ac, 0xba03, 0x4030, 0x3d8e, 0x08b1, 0x41c7, 0xb04e, 0x3332, 0x1f10, 0x2903, 0x2272, 0x462e, 0xb204, 0xbf3f, 0xb2d0, 0x4375, 0x4204, 0x4062, 0x180c, 0x4084, 0xb298, 0x0fc2, 0xb270, 0x4085, 0xbf9b, 0x243f, 0x4390, 0x4221, 0x4445, 0x43e3, 0x45a9, 0x43d4, 0xbfdc, 0x402e, 0xbaec, 0xa8b2, 0x40bd, 0x2eb6, 0x4281, 0xb206, 0xb268, 0x30ef, 0x4043, 0x434e, 0x1a1d, 0x14c5, 0x43a9, 0x1fa9, 0x4376, 0x41bd, 0x423c, 0x43ab, 0x1aa7, 0x42d6, 0x0513, 0x4033, 0x31c5, 0x410f, 0x1db1, 0x40d3, 0xbf0c, 0x422c, 0x427b, 0x4019, 0x4066, 0x419e, 0x1cc6, 0x3571, 0xa6f0, 0x1813, 0x40d3, 0xb099, 0x035f, 0x19c3, 0x42ad, 0x42fb, 0x1d9e, 0xb25f, 0x1a90, 0xb28f, 0xbf3b, 0x3c2e, 0xba0a, 0xb067, 0xb2d9, 0x401c, 0x406e, 0x1b33, 0x4320, 0x43f7, 0x0df9, 0xbf41, 0x4166, 0x42ca, 0x43e7, 0xba7c, 0xb077, 0x1792, 0x43d3, 0x4085, 0xb27a, 0x4293, 0x403d, 0x410c, 0xbf08, 0x11e3, 0x41c2, 0x4083, 0x4364, 0xa113, 0x4010, 0x207c, 0x42aa, 0x1b60, 0x25fe, 0x4097, 0xb202, 0x40fc, 0xb07c, 0xbfdb, 0x041e, 0x40e1, 0x4046, 0x43e8, 0x42a3, 0x424a, 0xba73, 0x4002, 0x4350, 0xb2ae, 0x05a7, 0xb244, 0xb2a4, 0x19b4, 0xbf81, 0x4146, 0x431b, 0x4137, 0x46f8, 0xbfb4, 0x423f, 0xba3c, 0x1c8a, 0x40b6, 0x416f, 0xbade, 0x0565, 0x4027, 0xb2e7, 0x42a7, 0x0c0a, 0x4213, 0x40e5, 0x4058, 0xba68, 0x41eb, 0x4234, 0xbf84, 0x4333, 0xba18, 0x4073, 0x39be, 0x4339, 0x1e78, 0x42e2, 0x1396, 0xba2e, 0x4051, 0x3e8c, 0x40a6, 0xbf5e, 0xbaef, 0x36c9, 0x4060, 0xbfe0, 0x19fb, 0xbf35, 0x40b3, 0xba2d, 0x417a, 0x425b, 0x0bc2, 0xa2c7, 0x43ef, 0x4550, 0x427f, 0x402d, 0x18b3, 0x4104, 0xba2e, 0x1a9a, 0x4243, 0xbacd, 0x4116, 0xb2dc, 0xba6c, 0x410d, 0xbfad, 0x4189, 0x40fb, 0x437f, 0xba6b, 0x1023, 0x4063, 0xb2af, 0xaa18, 0x2514, 0x41c0, 0x32e8, 0x01c7, 0x35a9, 0xbfad, 0x4029, 0xb083, 0xba10, 0xb2be, 0x3276, 0xaf71, 0x4086, 0xb277, 0xbf6b, 0xb2d6, 0xb2f3, 0xb2ae, 0x19c3, 0x4366, 0x443b, 0x4124, 0x43bf, 0xa919, 0x434e, 0x12bf, 0x009f, 0x4006, 0xbff0, 0x43c5, 0xbf1a, 0xb0f6, 0x416d, 0x4114, 0x4624, 0x4161, 0x4089, 0x43b1, 0x4155, 0xbad4, 0xb000, 0xb042, 0x191e, 0x41c1, 0x4013, 0xb24f, 0xbf6c, 0x1dee, 0xb294, 0x1ce2, 0x435d, 0x41b1, 0xad83, 0x11c0, 0x40ce, 0x317f, 0x43c6, 0xb21a, 0xb002, 0xb298, 0x41ae, 0xb20f, 0x05ef, 0xb2a6, 0xb2fe, 0x1ad7, 0x45a0, 0x030c, 0x4089, 0xb26b, 0x4088, 0x4079, 0x3dc9, 0xbf87, 0x42bb, 0x1efc, 0x4018, 0xb254, 0x40ce, 0x3abc, 0xb0be, 0x4017, 0x1890, 0x414e, 0x4670, 0x1c83, 0xbf70, 0xbf41, 0xb277, 0x4283, 0x42c1, 0x41b9, 0x4006, 0xb260, 0x40c6, 0x455f, 0x4169, 0xb09d, 0x19ba, 0x263d, 0x40f9, 0xb07c, 0x41f8, 0x41c3, 0xbf97, 0x4031, 0x40a4, 0x1d03, 0xb21e, 0x4051, 0x003a, 0x4191, 0x409f, 0xb240, 0xbfd0, 0x0eaa, 0x43c4, 0x4262, 0x112b, 0x4264, 0xba2c, 0x4239, 0xbfc1, 0x43d7, 0x422e, 0xb291, 0x323a, 0xbae2, 0xb22f, 0xb0da, 0xb26e, 0x1a25, 0x43e1, 0x4208, 0x407c, 0x1d1e, 0xb27e, 0x1c0c, 0x0edc, 0x43ae, 0x4064, 0x459c, 0xa866, 0xb06f, 0x437a, 0x411e, 0x0a15, 0x1aeb, 0xb228, 0xb21b, 0x426f, 0x42f6, 0xbf34, 0x44bc, 0x016d, 0xac00, 0xb2e4, 0xbafc, 0x41d6, 0x44eb, 0x4063, 0x41bd, 0x409d, 0x39be, 0x438f, 0x45d0, 0x172e, 0x45bb, 0xbf6e, 0xb28f, 0x4262, 0xb2b8, 0x1c01, 0x45c4, 0x188e, 0x432d, 0x3671, 0x4039, 0x4450, 0x0adc, 0x44eb, 0xbf2f, 0xbaec, 0xbfa0, 0x0c02, 0x4293, 0x43c3, 0x19b8, 0xb251, 0x22f4, 0x1f80, 0xba39, 0x42c6, 0x1caa, 0xa3ae, 0x3100, 0x41dc, 0x4252, 0xb00b, 0xba1e, 0x421b, 0x437e, 0x1770, 0x4094, 0xa2d9, 0x1b0d, 0x148d, 0x4328, 0x4569, 0xbf46, 0x4283, 0x43a3, 0x3399, 0x3025, 0x40ce, 0xb284, 0x432a, 0x03d0, 0xbf90, 0xbafd, 0xbfcb, 0x43ad, 0x4013, 0xba27, 0x3d2a, 0x466f, 0x1653, 0xb204, 0x225c, 0xb213, 0x21e4, 0x43d3, 0x0eb4, 0xbae8, 0x415e, 0x4244, 0x4239, 0x4692, 0x2014, 0x411f, 0x1dfb, 0x42a8, 0xbfb6, 0x42f3, 0x1138, 0x22d0, 0xbfbf, 0xbacc, 0x0049, 0xbfa0, 0x4315, 0xba7a, 0x4182, 0x142f, 0x42b7, 0xbaf4, 0x465e, 0x4030, 0xb21d, 0x1a68, 0xb240, 0x2a11, 0xa788, 0x4088, 0x373f, 0xbfc9, 0x4347, 0x4088, 0x40ad, 0xb24d, 0xba22, 0xba5b, 0xb2f6, 0x4294, 0x406d, 0x428c, 0x1e96, 0xba49, 0xb0bc, 0x41a1, 0x4298, 0xb099, 0x410b, 0xbf38, 0xb21e, 0x43a8, 0x41d9, 0x4316, 0x4308, 0xbf07, 0xba54, 0x402a, 0x045d, 0x4356, 0x4077, 0x1573, 0xb208, 0x4069, 0x4100, 0x42f4, 0xaffb, 0x284f, 0xae93, 0x4348, 0x33ec, 0xb2b1, 0x41ce, 0x40a1, 0x1683, 0x427f, 0x42c6, 0x18f3, 0xb29e, 0xb2c0, 0x3d0f, 0xba15, 0x4116, 0xbf12, 0x43bf, 0x1c9d, 0xbae6, 0x4167, 0x42e5, 0x40ff, 0x404f, 0x1a21, 0x4028, 0x4289, 0x438d, 0xbfa3, 0x182c, 0x1cd9, 0x4304, 0x45a0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x916cb869, 0x845ddb9e, 0xc71efbae, 0xb5b0ddd7, 0xc96a166f, 0x0896734c, 0xe975a539, 0xda33958c, 0xf0631e50, 0x552ee4b2, 0x94f77f64, 0x1bf67a8f, 0x4cd88fc1, 0xd2a84a20, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x0990000d, 0xffa3ffff, 0x0990000a, 0x00000000, 0x00000000, 0xffffffa3, 0x00000000, 0xf0631ef0, 0xf0631ef0, 0x0000005c, 0x1bf68b67, 0x000000a0, 0x00000744, 0x00000000, 0x600001d0 }, + Instructions = [0x3a7c, 0x0655, 0x41a9, 0x3921, 0x4147, 0x429a, 0x13d5, 0x415e, 0x43ad, 0x373d, 0xb2e7, 0xa82f, 0x45b2, 0xb299, 0x4174, 0xbf15, 0x1155, 0xba32, 0x3a9c, 0x4037, 0x437e, 0xb01c, 0x4245, 0xbf92, 0x4029, 0x4111, 0x3fd8, 0x4299, 0x1b95, 0x404a, 0x4057, 0x4315, 0x4047, 0x423f, 0xaf03, 0xb27d, 0x22a0, 0xb012, 0xa3cf, 0x40d9, 0x40c6, 0x0e90, 0x4694, 0x40fd, 0x418b, 0x03c9, 0x44e0, 0xa932, 0x4397, 0xba5b, 0xbf3d, 0x4223, 0x1ff6, 0xb296, 0x4322, 0x28dc, 0x32c9, 0x4108, 0xbfdb, 0x433f, 0xb249, 0xb00c, 0x1d27, 0x46cd, 0x1aa1, 0xba2b, 0x1c1d, 0xa28d, 0xbfd5, 0x0057, 0xbac6, 0x4308, 0x1a2a, 0x42d1, 0x18ff, 0x432f, 0xbae0, 0x415c, 0xb032, 0x3c6b, 0x43e3, 0xb265, 0x42a1, 0x4013, 0x430f, 0x1c8c, 0x1fa1, 0x33f7, 0x4168, 0xbf21, 0x2136, 0x431e, 0x422d, 0xbae0, 0x432d, 0xb0ed, 0xb2d8, 0x0a2c, 0x41e8, 0xbf80, 0xbf88, 0xba28, 0xb2aa, 0xb267, 0x430e, 0xbf47, 0x4091, 0x40a5, 0xb2b3, 0x1b9e, 0x41e0, 0x420f, 0x1bfd, 0x1a1f, 0x1e8e, 0xbf7e, 0xbaeb, 0xa08a, 0x437e, 0x4339, 0xb006, 0x221f, 0x42b5, 0xb2c8, 0xb202, 0xbaef, 0x1902, 0x4161, 0x413c, 0x42b3, 0x18ba, 0x2f5c, 0xb252, 0xba3d, 0x4166, 0x43ee, 0x438d, 0xbf8d, 0x46e2, 0x0540, 0x303a, 0x43f5, 0x42a2, 0x4081, 0x34fa, 0x024c, 0x11d5, 0x2ac3, 0xbf00, 0xbfcc, 0x45c3, 0x439d, 0x4019, 0x401d, 0x40b2, 0x0891, 0xa357, 0x0a3d, 0xbf00, 0x0e7b, 0xb29d, 0xae6d, 0x438f, 0x4364, 0x4311, 0x42bd, 0x19ad, 0x44a4, 0x4624, 0xb2e5, 0x4134, 0x43e5, 0xbf16, 0x402d, 0x4391, 0xba51, 0x438f, 0x18f7, 0x455a, 0xafda, 0xbf6f, 0x4125, 0xbf60, 0x2490, 0xba2a, 0x038d, 0x410b, 0x42e6, 0x4224, 0x40b0, 0x1a97, 0xa5ee, 0x4073, 0xbf90, 0x4362, 0x1fbf, 0x4314, 0x4051, 0xb234, 0x4336, 0xbf60, 0xb046, 0xba05, 0xa6cc, 0xb2e1, 0x3022, 0xbfe0, 0x4608, 0xb2b0, 0xbaf1, 0xbfc3, 0x2620, 0x45b5, 0xbad8, 0x408d, 0x24c8, 0xb242, 0xb0f6, 0x4284, 0x4251, 0xaed4, 0x4302, 0x4197, 0xba77, 0x1678, 0x45a8, 0xba65, 0x4333, 0x1e84, 0x1af4, 0x4212, 0xbaff, 0xa4d9, 0xac32, 0xbfd0, 0x2306, 0x42ac, 0xbfaf, 0xb04c, 0xb285, 0x21dc, 0x42a6, 0x4121, 0xbfc0, 0x432f, 0xbf99, 0x3be7, 0xbf90, 0x40e6, 0xb288, 0xb27f, 0x4328, 0x245d, 0x41ef, 0x43bd, 0xb291, 0x40bd, 0xb0b5, 0xbf90, 0xbfe4, 0xb209, 0x1860, 0x4270, 0x42f8, 0xbfb0, 0x40c2, 0xbaeb, 0x09fb, 0x44f1, 0x41fc, 0x406a, 0x4134, 0xbfb0, 0x332a, 0xb26e, 0x0619, 0xba45, 0xbf89, 0x432c, 0xb2c3, 0xac47, 0x1d59, 0x2714, 0xb098, 0x433a, 0xa38a, 0x4573, 0x40b7, 0x41d6, 0x4180, 0xb259, 0xad42, 0x46c1, 0xb076, 0x406b, 0x4131, 0x40fb, 0x243f, 0x4285, 0x1b92, 0xb256, 0xa70f, 0x4168, 0x40bd, 0xb290, 0x12c5, 0xbfb8, 0x3068, 0x42d4, 0x410b, 0x1ef1, 0x4258, 0x0368, 0x46b5, 0x406b, 0x40aa, 0x4321, 0x1f9d, 0x4173, 0x430c, 0x43e5, 0x4026, 0xb2d8, 0xbf01, 0x3733, 0xbac9, 0x4275, 0x4276, 0x43d1, 0x1b8c, 0x4169, 0x4146, 0xa9aa, 0x4302, 0x1316, 0x4416, 0x43ca, 0x02f5, 0x42bb, 0xa7f7, 0xb204, 0x4632, 0x416c, 0xb030, 0x409a, 0x404b, 0x4385, 0x41cd, 0xb2b5, 0xb287, 0x4390, 0xbfce, 0x1b41, 0xb279, 0x1df6, 0x4220, 0xb020, 0x40b1, 0x45d3, 0x1d7b, 0x4162, 0x4234, 0x4201, 0x41cb, 0x30ba, 0x4039, 0xba5e, 0x4402, 0x429d, 0xba4e, 0x4652, 0xb2e8, 0x19cc, 0x38fd, 0x41b3, 0xbfd0, 0x43d6, 0xbf01, 0x43ee, 0x42c8, 0x07a7, 0x1893, 0x43c5, 0x4013, 0x1288, 0xba4a, 0x1534, 0x4091, 0x429b, 0x426b, 0xb234, 0xbf3a, 0x2bf6, 0x1e2f, 0xb28a, 0xa71a, 0xba32, 0x41e8, 0xbf65, 0x43c9, 0xacce, 0x403b, 0xb250, 0xaa0b, 0xabc5, 0xa194, 0xb214, 0x421d, 0x40cc, 0xa0e9, 0xb2d7, 0x1eff, 0x43d1, 0x417e, 0x42f1, 0x4275, 0xba1b, 0x3012, 0x13d4, 0x1fdd, 0x0af4, 0x4255, 0x4264, 0xbf9b, 0x1f56, 0x43e9, 0x418b, 0xbad9, 0x410a, 0x083d, 0x30af, 0xba48, 0x2c36, 0xbfdb, 0xb0fa, 0xb216, 0x3970, 0xba5f, 0x0556, 0x435a, 0x41d2, 0xb2db, 0x4395, 0xb020, 0xa2df, 0x43f7, 0x1dca, 0xb017, 0xba46, 0xb2aa, 0xbfa0, 0x07b6, 0x4040, 0xbf60, 0xa3c8, 0xbf69, 0xb232, 0x3ac1, 0x42bc, 0x44a3, 0xbadf, 0x0651, 0xb27d, 0x1f97, 0xbf93, 0x1625, 0xb2f8, 0xb2b8, 0x1244, 0xbf00, 0x41ac, 0xba03, 0x4030, 0x3d8e, 0x08b1, 0x41c7, 0xb04e, 0x3332, 0x1f10, 0x2903, 0x2272, 0x462e, 0xb204, 0xbf3f, 0xb2d0, 0x4375, 0x4204, 0x4062, 0x180c, 0x4084, 0xb298, 0x0fc2, 0xb270, 0x4085, 0xbf9b, 0x243f, 0x4390, 0x4221, 0x4445, 0x43e3, 0x45a9, 0x43d4, 0xbfdc, 0x402e, 0xbaec, 0xa8b2, 0x40bd, 0x2eb6, 0x4281, 0xb206, 0xb268, 0x30ef, 0x4043, 0x434e, 0x1a1d, 0x14c5, 0x43a9, 0x1fa9, 0x4376, 0x41bd, 0x423c, 0x43ab, 0x1aa7, 0x42d6, 0x0513, 0x4033, 0x31c5, 0x410f, 0x1db1, 0x40d3, 0xbf0c, 0x422c, 0x427b, 0x4019, 0x4066, 0x419e, 0x1cc6, 0x3571, 0xa6f0, 0x1813, 0x40d3, 0xb099, 0x035f, 0x19c3, 0x42ad, 0x42fb, 0x1d9e, 0xb25f, 0x1a90, 0xb28f, 0xbf3b, 0x3c2e, 0xba0a, 0xb067, 0xb2d9, 0x401c, 0x406e, 0x1b33, 0x4320, 0x43f7, 0x0df9, 0xbf41, 0x4166, 0x42ca, 0x43e7, 0xba7c, 0xb077, 0x1792, 0x43d3, 0x4085, 0xb27a, 0x4293, 0x403d, 0x410c, 0xbf08, 0x11e3, 0x41c2, 0x4083, 0x4364, 0xa113, 0x4010, 0x207c, 0x42aa, 0x1b60, 0x25fe, 0x4097, 0xb202, 0x40fc, 0xb07c, 0xbfdb, 0x041e, 0x40e1, 0x4046, 0x43e8, 0x42a3, 0x424a, 0xba73, 0x4002, 0x4350, 0xb2ae, 0x05a7, 0xb244, 0xb2a4, 0x19b4, 0xbf81, 0x4146, 0x431b, 0x4137, 0x46f8, 0xbfb4, 0x423f, 0xba3c, 0x1c8a, 0x40b6, 0x416f, 0xbade, 0x0565, 0x4027, 0xb2e7, 0x42a7, 0x0c0a, 0x4213, 0x40e5, 0x4058, 0xba68, 0x41eb, 0x4234, 0xbf84, 0x4333, 0xba18, 0x4073, 0x39be, 0x4339, 0x1e78, 0x42e2, 0x1396, 0xba2e, 0x4051, 0x3e8c, 0x40a6, 0xbf5e, 0xbaef, 0x36c9, 0x4060, 0xbfe0, 0x19fb, 0xbf35, 0x40b3, 0xba2d, 0x417a, 0x425b, 0x0bc2, 0xa2c7, 0x43ef, 0x4550, 0x427f, 0x402d, 0x18b3, 0x4104, 0xba2e, 0x1a9a, 0x4243, 0xbacd, 0x4116, 0xb2dc, 0xba6c, 0x410d, 0xbfad, 0x4189, 0x40fb, 0x437f, 0xba6b, 0x1023, 0x4063, 0xb2af, 0xaa18, 0x2514, 0x41c0, 0x32e8, 0x01c7, 0x35a9, 0xbfad, 0x4029, 0xb083, 0xba10, 0xb2be, 0x3276, 0xaf71, 0x4086, 0xb277, 0xbf6b, 0xb2d6, 0xb2f3, 0xb2ae, 0x19c3, 0x4366, 0x443b, 0x4124, 0x43bf, 0xa919, 0x434e, 0x12bf, 0x009f, 0x4006, 0xbff0, 0x43c5, 0xbf1a, 0xb0f6, 0x416d, 0x4114, 0x4624, 0x4161, 0x4089, 0x43b1, 0x4155, 0xbad4, 0xb000, 0xb042, 0x191e, 0x41c1, 0x4013, 0xb24f, 0xbf6c, 0x1dee, 0xb294, 0x1ce2, 0x435d, 0x41b1, 0xad83, 0x11c0, 0x40ce, 0x317f, 0x43c6, 0xb21a, 0xb002, 0xb298, 0x41ae, 0xb20f, 0x05ef, 0xb2a6, 0xb2fe, 0x1ad7, 0x45a0, 0x030c, 0x4089, 0xb26b, 0x4088, 0x4079, 0x3dc9, 0xbf87, 0x42bb, 0x1efc, 0x4018, 0xb254, 0x40ce, 0x3abc, 0xb0be, 0x4017, 0x1890, 0x414e, 0x4670, 0x1c83, 0xbf70, 0xbf41, 0xb277, 0x4283, 0x42c1, 0x41b9, 0x4006, 0xb260, 0x40c6, 0x455f, 0x4169, 0xb09d, 0x19ba, 0x263d, 0x40f9, 0xb07c, 0x41f8, 0x41c3, 0xbf97, 0x4031, 0x40a4, 0x1d03, 0xb21e, 0x4051, 0x003a, 0x4191, 0x409f, 0xb240, 0xbfd0, 0x0eaa, 0x43c4, 0x4262, 0x112b, 0x4264, 0xba2c, 0x4239, 0xbfc1, 0x43d7, 0x422e, 0xb291, 0x323a, 0xbae2, 0xb22f, 0xb0da, 0xb26e, 0x1a25, 0x43e1, 0x4208, 0x407c, 0x1d1e, 0xb27e, 0x1c0c, 0x0edc, 0x43ae, 0x4064, 0x459c, 0xa866, 0xb06f, 0x437a, 0x411e, 0x0a15, 0x1aeb, 0xb228, 0xb21b, 0x426f, 0x42f6, 0xbf34, 0x44bc, 0x016d, 0xac00, 0xb2e4, 0xbafc, 0x41d6, 0x44eb, 0x4063, 0x41bd, 0x409d, 0x39be, 0x438f, 0x45d0, 0x172e, 0x45bb, 0xbf6e, 0xb28f, 0x4262, 0xb2b8, 0x1c01, 0x45c4, 0x188e, 0x432d, 0x3671, 0x4039, 0x4450, 0x0adc, 0x44eb, 0xbf2f, 0xbaec, 0xbfa0, 0x0c02, 0x4293, 0x43c3, 0x19b8, 0xb251, 0x22f4, 0x1f80, 0xba39, 0x42c6, 0x1caa, 0xa3ae, 0x3100, 0x41dc, 0x4252, 0xb00b, 0xba1e, 0x421b, 0x437e, 0x1770, 0x4094, 0xa2d9, 0x1b0d, 0x148d, 0x4328, 0x4569, 0xbf46, 0x4283, 0x43a3, 0x3399, 0x3025, 0x40ce, 0xb284, 0x432a, 0x03d0, 0xbf90, 0xbafd, 0xbfcb, 0x43ad, 0x4013, 0xba27, 0x3d2a, 0x466f, 0x1653, 0xb204, 0x225c, 0xb213, 0x21e4, 0x43d3, 0x0eb4, 0xbae8, 0x415e, 0x4244, 0x4239, 0x4692, 0x2014, 0x411f, 0x1dfb, 0x42a8, 0xbfb6, 0x42f3, 0x1138, 0x22d0, 0xbfbf, 0xbacc, 0x0049, 0xbfa0, 0x4315, 0xba7a, 0x4182, 0x142f, 0x42b7, 0xbaf4, 0x465e, 0x4030, 0xb21d, 0x1a68, 0xb240, 0x2a11, 0xa788, 0x4088, 0x373f, 0xbfc9, 0x4347, 0x4088, 0x40ad, 0xb24d, 0xba22, 0xba5b, 0xb2f6, 0x4294, 0x406d, 0x428c, 0x1e96, 0xba49, 0xb0bc, 0x41a1, 0x4298, 0xb099, 0x410b, 0xbf38, 0xb21e, 0x43a8, 0x41d9, 0x4316, 0x4308, 0xbf07, 0xba54, 0x402a, 0x045d, 0x4356, 0x4077, 0x1573, 0xb208, 0x4069, 0x4100, 0x42f4, 0xaffb, 0x284f, 0xae93, 0x4348, 0x33ec, 0xb2b1, 0x41ce, 0x40a1, 0x1683, 0x427f, 0x42c6, 0x18f3, 0xb29e, 0xb2c0, 0x3d0f, 0xba15, 0x4116, 0xbf12, 0x43bf, 0x1c9d, 0xbae6, 0x4167, 0x42e5, 0x40ff, 0x404f, 0x1a21, 0x4028, 0x4289, 0x438d, 0xbfa3, 0x182c, 0x1cd9, 0x4304, 0x45a0, 0x4770, 0xe7fe + ], + StartRegs = [0x916cb869, 0x845ddb9e, 0xc71efbae, 0xb5b0ddd7, 0xc96a166f, 0x0896734c, 0xe975a539, 0xda33958c, 0xf0631e50, 0x552ee4b2, 0x94f77f64, 0x1bf67a8f, 0x4cd88fc1, 0xd2a84a20, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x00000000, 0x0990000d, 0xffa3ffff, 0x0990000a, 0x00000000, 0x00000000, 0xffffffa3, 0x00000000, 0xf0631ef0, 0xf0631ef0, 0x0000005c, 0x1bf68b67, 0x000000a0, 0x00000744, 0x00000000, 0x600001d0 + ], }, new() { - Instructions = new ushort[] { 0x1e86, 0x39ce, 0xb015, 0x4241, 0xba7a, 0x0ca5, 0xba1c, 0xb2c7, 0x1ade, 0x40e0, 0xbfc0, 0x18d9, 0x4195, 0x43e7, 0x144f, 0x1aa8, 0x402c, 0x19e3, 0x0f08, 0xbf33, 0x0146, 0x0896, 0x4298, 0x4011, 0x40b9, 0x4225, 0xae23, 0xa371, 0xb2ea, 0xb293, 0xaa59, 0xbacb, 0xb203, 0x40e4, 0x42a3, 0x158d, 0x42d3, 0x4435, 0xa63f, 0x1cb7, 0xae3d, 0x1b9c, 0x1ae6, 0x43a5, 0x4682, 0x38c3, 0x4199, 0x40e3, 0x4462, 0xbfd6, 0x1737, 0x4034, 0x413d, 0x1491, 0x40bd, 0x40d4, 0x1b2a, 0xbf9f, 0xbafa, 0xb2e1, 0x435b, 0x4057, 0x414d, 0x43c2, 0x46b2, 0x4247, 0x41a7, 0x422e, 0x4082, 0xb207, 0x1a3a, 0x1515, 0x301f, 0x42a4, 0x391a, 0x41af, 0x4102, 0xb246, 0xbf1c, 0xb2a7, 0x1fcb, 0xbad6, 0x41e6, 0x290a, 0x42c7, 0x1a97, 0x4616, 0x42f6, 0x1668, 0x4144, 0xb229, 0x43de, 0x1abb, 0xaeb6, 0x4658, 0xb2fd, 0xbf80, 0xb027, 0x4068, 0xac56, 0x0b56, 0xba3e, 0xb0ae, 0x2699, 0x4175, 0xbf39, 0x4367, 0x39a9, 0x4377, 0x3b13, 0x0504, 0x41cb, 0x43fe, 0x43a9, 0xb037, 0x4226, 0x4090, 0xb219, 0x4236, 0x4043, 0x435b, 0x163b, 0x41b5, 0x42ff, 0x03d5, 0xbf4e, 0xbad9, 0x42d2, 0x4063, 0x18c2, 0x4441, 0x1dac, 0xb287, 0x40b8, 0x4007, 0xb28d, 0x41a5, 0x4230, 0xbfa0, 0x419f, 0x0084, 0x4042, 0x1fe7, 0x42e3, 0x03a8, 0x2f05, 0x4641, 0xba39, 0xb266, 0x42cd, 0xb0f9, 0xb012, 0x4066, 0xb276, 0xbf3c, 0xb2b6, 0x197f, 0x4091, 0x1871, 0xbf11, 0xba70, 0xa8b5, 0x404b, 0x1bce, 0x43bb, 0x3ac6, 0xb021, 0xb2f4, 0x41f0, 0x4402, 0x2c5a, 0x45cc, 0x437c, 0xb023, 0xb23c, 0x37b9, 0x412d, 0x42b2, 0x43a1, 0xb089, 0x417f, 0x43ad, 0x4220, 0x42b4, 0x4176, 0x2e55, 0xb228, 0xbf0d, 0x3038, 0x4315, 0x4302, 0xba33, 0x43e0, 0x43cd, 0x0765, 0xbfc3, 0x41b6, 0x1bbb, 0x4007, 0xafba, 0x1c38, 0xb25e, 0xb2f2, 0x1ad5, 0x4196, 0xba2c, 0x40b4, 0x1a04, 0xb01a, 0xba71, 0xb2a8, 0x4685, 0xb0b2, 0xb20c, 0xba54, 0x46c5, 0xbf86, 0xa737, 0x4309, 0xb230, 0x03e0, 0xb282, 0x45ae, 0xb293, 0x40d7, 0x40c5, 0x40da, 0xb2fc, 0x40fb, 0x42c4, 0xb217, 0x367a, 0x41bd, 0xba6f, 0xba59, 0xba7a, 0x08b7, 0xbf67, 0x13e5, 0x408c, 0x12cf, 0xa5fd, 0x44ad, 0x34f1, 0xb2eb, 0x407c, 0x2b7a, 0xbfe0, 0x4481, 0xb286, 0x18f7, 0x42c5, 0x1fa6, 0x41b2, 0x42de, 0x40a0, 0x2f21, 0x4090, 0x4309, 0x4071, 0x3c32, 0x4203, 0x42f0, 0xba32, 0x41d8, 0x1daa, 0xbfbf, 0x402f, 0xb2d2, 0x435b, 0x4158, 0x407e, 0x20ff, 0xba0a, 0x1a6a, 0xba33, 0x4093, 0x43f0, 0xbf57, 0x43f9, 0xb2a1, 0x432f, 0xb2f5, 0x41cc, 0x4244, 0x1dc6, 0xb2b1, 0xba27, 0xbfa7, 0x347c, 0xb042, 0xba06, 0x41b2, 0xbaeb, 0x199f, 0xbfa7, 0x432f, 0xb2dd, 0x1a37, 0xb2dc, 0x434d, 0xbac5, 0xbaf8, 0x420e, 0x3f3f, 0xb0b2, 0x4005, 0x2b8a, 0x1c8d, 0x46e8, 0xade4, 0x425b, 0x4152, 0x0240, 0x4175, 0x0d64, 0x449a, 0x4018, 0x4366, 0xb2d5, 0x226b, 0x40ae, 0xb20f, 0xbf57, 0xa2c7, 0x42ac, 0xaf3b, 0x461f, 0xba67, 0x2af4, 0x4230, 0x4087, 0x1543, 0x43a9, 0x4232, 0x432e, 0xba6b, 0x46da, 0xba31, 0xbacb, 0x431a, 0x4343, 0xbfa9, 0x40c7, 0x18fb, 0xb2c6, 0x4066, 0xbf13, 0x4399, 0x4480, 0x3d8f, 0x111f, 0xbf1f, 0xbad3, 0x42be, 0x22b8, 0x438a, 0x0dd7, 0xa490, 0x400b, 0x424b, 0x4285, 0x407a, 0xae75, 0x17ab, 0x41a9, 0x1d62, 0xb214, 0xbf29, 0x4084, 0xa46a, 0x23a2, 0x44d2, 0xb0e4, 0x4203, 0x45ac, 0x4266, 0x1e81, 0x1a45, 0x10c8, 0xb0e2, 0x0833, 0x40aa, 0xb2cf, 0x1866, 0x1948, 0x435b, 0x18e0, 0xb230, 0x3774, 0x41b7, 0x1d3c, 0xb2b5, 0xbf90, 0x4265, 0xbfba, 0x4008, 0xba33, 0x1e27, 0x42d4, 0x1eef, 0xaf74, 0x41b5, 0x4069, 0x0d28, 0x0e57, 0x4254, 0x406f, 0xaac3, 0x1f94, 0x14a1, 0x4290, 0x4141, 0x4216, 0xb01f, 0x081b, 0xbfa1, 0xbfb0, 0x412b, 0xb24b, 0xb035, 0xb21f, 0x4248, 0x3144, 0xba32, 0x41d9, 0x461c, 0x1bb8, 0x40c8, 0xb266, 0xb258, 0xb2d6, 0xbadf, 0x42d4, 0x1a11, 0xbae0, 0x4629, 0xbf80, 0x4268, 0x0cef, 0x410f, 0xba0f, 0xba5e, 0xbf16, 0x42b3, 0xa03d, 0xb2b4, 0xb030, 0x3899, 0x4541, 0xb2e3, 0x1803, 0x16d3, 0xbfc2, 0xb216, 0x41dd, 0x42fa, 0xbf80, 0xafdf, 0x42da, 0x40e8, 0x1c5b, 0xb291, 0x1afb, 0xbf31, 0x41e2, 0x3e9d, 0x3a13, 0x11f2, 0x40ae, 0x400e, 0xba28, 0x40b8, 0x409d, 0x417c, 0x1ee6, 0x4252, 0xaa67, 0x0485, 0x43c7, 0xb0f3, 0x410c, 0x28df, 0xba12, 0x2ed5, 0xbf9f, 0xba74, 0x1d89, 0x44ac, 0x437a, 0x1e57, 0xbff0, 0x40cf, 0x415b, 0xb0a7, 0x414b, 0x402c, 0x4495, 0x29be, 0xa885, 0x39bb, 0x43c7, 0xbfb8, 0xb233, 0x1b91, 0x438e, 0xb21c, 0x1b36, 0xbf61, 0x4378, 0x4393, 0xba2b, 0x34c6, 0x1fef, 0xaa51, 0xa22d, 0xb270, 0x0598, 0xbfb0, 0xbad6, 0x42d9, 0xba35, 0x1bb7, 0x45f3, 0x4115, 0x1cfd, 0x42e9, 0x402f, 0xb20c, 0xbfd0, 0xae0a, 0x40c1, 0xb09d, 0xba08, 0x1fad, 0x41a9, 0x4387, 0x461c, 0xbf53, 0x186f, 0x2e59, 0x42b8, 0x425d, 0xbf11, 0x436c, 0xba65, 0x43b9, 0x4626, 0x44c3, 0x41b6, 0x1884, 0xb057, 0x1e30, 0xbfdd, 0x43a6, 0x405e, 0xa060, 0x423e, 0xb014, 0xba47, 0xad06, 0x1f36, 0xbf75, 0x464a, 0x3179, 0xa268, 0x463e, 0xb086, 0x2610, 0x401f, 0x2f67, 0x4409, 0x42c7, 0x1f54, 0x409b, 0x4111, 0x424a, 0xbf5d, 0x43b2, 0x467c, 0x40dd, 0x4085, 0xa14a, 0xa7d5, 0xba37, 0x4378, 0x4152, 0x43f6, 0x022e, 0x22b8, 0xb219, 0xba5b, 0xbf27, 0x424a, 0x0809, 0x4413, 0xb046, 0xbf60, 0x10bf, 0x1d41, 0x41bd, 0x1ed3, 0xac2b, 0xb2e2, 0xbfa0, 0x0d1b, 0x1fa2, 0xbf0e, 0xba7c, 0x40e4, 0x404e, 0x4593, 0xb276, 0x4170, 0x3ab1, 0xaad4, 0x2013, 0x3e57, 0xb0b8, 0xba09, 0x463b, 0xa62e, 0x43ac, 0x4390, 0x1c3e, 0x41f4, 0x01b9, 0x43b4, 0xb20d, 0xbf69, 0x4246, 0x4183, 0x42f6, 0x1bae, 0x4081, 0xabe8, 0x4013, 0x44c1, 0xa15e, 0x4271, 0x41a5, 0x42e1, 0x1cc6, 0x4302, 0x1176, 0x0ade, 0x0697, 0x41ad, 0x42ab, 0x41c5, 0x4260, 0x454a, 0xba34, 0xbf02, 0xb035, 0xb04b, 0x430d, 0x4418, 0x1bdd, 0xbfba, 0xb26f, 0x1b87, 0x42f2, 0x403c, 0x420a, 0x40b0, 0x1c57, 0xb061, 0x438a, 0x4173, 0x2e49, 0xb2f9, 0xbfc6, 0x41db, 0x1ad3, 0xba5d, 0x456c, 0xba02, 0x4245, 0xb098, 0x4267, 0x4141, 0x4665, 0x44a4, 0x05b1, 0xb2c1, 0xb001, 0x4205, 0x43fb, 0x40df, 0x19be, 0x43a4, 0x405a, 0x463f, 0x4130, 0x41ee, 0xb2da, 0xbf97, 0xac39, 0x4601, 0x41e1, 0x4175, 0xa137, 0x43d0, 0x4182, 0x1bf3, 0xbfd9, 0x409d, 0xb2a1, 0xba51, 0x013e, 0xbac1, 0x12a3, 0x4069, 0xabd0, 0x4220, 0xb0f8, 0xa4f4, 0x198b, 0x2d94, 0x43ee, 0x1fce, 0xba06, 0x022e, 0x42ea, 0x4229, 0x1d1e, 0xb0e2, 0xbfa3, 0x0bed, 0x4095, 0xba7c, 0x0052, 0x403c, 0xbadb, 0x4180, 0xba66, 0x4028, 0x427c, 0x2473, 0xba2c, 0xbf9b, 0xb208, 0xba24, 0x41f2, 0x4377, 0x1dd5, 0x40c1, 0xbf90, 0xb2c3, 0x1b1d, 0x42ac, 0x45ca, 0xbf8a, 0x1edd, 0x276c, 0x46d5, 0x32fc, 0xa25c, 0xb2d8, 0x4063, 0xbfb0, 0x02b4, 0x1c84, 0x2bcf, 0x429e, 0xb0f0, 0x43c5, 0x0fe7, 0x4323, 0xb2af, 0x1c79, 0x42c9, 0xa5ef, 0x41e9, 0x039f, 0x46ec, 0x1cd3, 0x1747, 0xbf6e, 0x42ba, 0xbad7, 0x4048, 0xb25a, 0x1930, 0x4296, 0xb08c, 0x406a, 0xb066, 0x191b, 0x3bd6, 0xba7c, 0x416e, 0x0db1, 0x4273, 0xbff0, 0xbf19, 0xba02, 0xbaf5, 0x4297, 0x41cd, 0x42d0, 0x411a, 0x1adb, 0x3814, 0xbf68, 0xb0b9, 0x415a, 0x4658, 0xb215, 0x4198, 0x4082, 0x43f7, 0xb097, 0xba0e, 0x1ac2, 0x431a, 0xb075, 0x4253, 0xb2a6, 0xbf9a, 0x1816, 0x41d5, 0xb2ef, 0xb0fa, 0x428f, 0x1b75, 0xba57, 0x4241, 0x43b8, 0x41de, 0xb2c4, 0xbaf0, 0xa9d9, 0xbfd4, 0x3b4a, 0xbacd, 0x426c, 0x1fa9, 0x3d6f, 0xbf07, 0xa213, 0x42c7, 0x0aa3, 0x43a1, 0xb090, 0xba23, 0x42ff, 0xa8ce, 0x4313, 0x41f5, 0x4691, 0xa85a, 0xac75, 0xbfe0, 0x0459, 0xaabc, 0x42c0, 0xbf1a, 0x41e2, 0xb03b, 0x1b5e, 0x2210, 0x4263, 0xbfc0, 0x2f43, 0xa745, 0x1bcc, 0x403c, 0x443a, 0x44bd, 0xbfc0, 0xb25c, 0x400f, 0x42f4, 0xbfe4, 0x4446, 0xb23d, 0x4166, 0xba55, 0xb2b2, 0xb2aa, 0x19ad, 0xa192, 0xb0d9, 0xa1b6, 0x42d5, 0x429e, 0x402b, 0xbf37, 0xb2c3, 0x2823, 0x425c, 0x0c29, 0x42a0, 0x0885, 0x4077, 0x43db, 0xb2c9, 0x2cd3, 0x4249, 0xbf81, 0xb212, 0x400a, 0x133a, 0x03ef, 0x30dc, 0x2ebf, 0x1b95, 0x1abb, 0xbfb0, 0xb2e7, 0x41e0, 0x401b, 0x400f, 0x3cd1, 0x3f45, 0xbf5a, 0x43be, 0x44c1, 0x4662, 0xbfc0, 0x4019, 0x4357, 0xb298, 0x4278, 0x4338, 0x2492, 0x4279, 0xb0a0, 0x436e, 0x4378, 0x4272, 0x19be, 0x4243, 0x43dc, 0x41aa, 0x1938, 0xbf22, 0x4202, 0xb0b5, 0xbac3, 0x1989, 0xa4aa, 0xb21e, 0x43ad, 0x4495, 0xbfde, 0x2891, 0xb287, 0xb2bf, 0x182f, 0x436c, 0x0e88, 0xb2fd, 0x4207, 0xba23, 0xb0ac, 0xbf39, 0x3a14, 0xb2a6, 0x42f3, 0x13e5, 0xb097, 0x4008, 0x4286, 0x421c, 0xbf4a, 0x1dc9, 0x1a6a, 0x41bf, 0xba55, 0x2f4b, 0xaa67, 0x4175, 0x4003, 0x4189, 0xb279, 0xbf3e, 0x4102, 0x45dd, 0xbfd0, 0xbad2, 0x0cb3, 0xb06f, 0x43f0, 0x44ed, 0x1af4, 0x40e7, 0xbfa1, 0x1ea1, 0x461d, 0x42b7, 0xb0a6, 0x44c0, 0xa90f, 0x280c, 0x42ff, 0x39ac, 0x4334, 0x4395, 0xba55, 0x4119, 0x1c16, 0xbfa0, 0x40d1, 0xb24e, 0x41f0, 0x3292, 0xba52, 0x4016, 0x43ce, 0x0873, 0x3836, 0xb074, 0xb08c, 0xbacc, 0xbf8b, 0x4301, 0xb274, 0xbfa0, 0x41f3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5a5bb2e2, 0x70b44505, 0xf439f718, 0x7601686e, 0x506efe14, 0xe57877bf, 0xae23b7eb, 0x04b61cf8, 0x3e1feb19, 0x3ee9a3be, 0x31b2d471, 0x4f5928f4, 0x9e0f7156, 0x0e22cfed, 0x00000000, 0xc00001f0 }, - FinalRegs = new uint[] { 0xffffffc9, 0xffffffc9, 0x00009100, 0x7fffffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x7c404452, 0x8d794b1c, 0x4f5928f4, 0x8d794b1d, 0xfb201937, 0xf1ddb58c, 0x00000000, 0xa00001d0 }, + Instructions = [0x1e86, 0x39ce, 0xb015, 0x4241, 0xba7a, 0x0ca5, 0xba1c, 0xb2c7, 0x1ade, 0x40e0, 0xbfc0, 0x18d9, 0x4195, 0x43e7, 0x144f, 0x1aa8, 0x402c, 0x19e3, 0x0f08, 0xbf33, 0x0146, 0x0896, 0x4298, 0x4011, 0x40b9, 0x4225, 0xae23, 0xa371, 0xb2ea, 0xb293, 0xaa59, 0xbacb, 0xb203, 0x40e4, 0x42a3, 0x158d, 0x42d3, 0x4435, 0xa63f, 0x1cb7, 0xae3d, 0x1b9c, 0x1ae6, 0x43a5, 0x4682, 0x38c3, 0x4199, 0x40e3, 0x4462, 0xbfd6, 0x1737, 0x4034, 0x413d, 0x1491, 0x40bd, 0x40d4, 0x1b2a, 0xbf9f, 0xbafa, 0xb2e1, 0x435b, 0x4057, 0x414d, 0x43c2, 0x46b2, 0x4247, 0x41a7, 0x422e, 0x4082, 0xb207, 0x1a3a, 0x1515, 0x301f, 0x42a4, 0x391a, 0x41af, 0x4102, 0xb246, 0xbf1c, 0xb2a7, 0x1fcb, 0xbad6, 0x41e6, 0x290a, 0x42c7, 0x1a97, 0x4616, 0x42f6, 0x1668, 0x4144, 0xb229, 0x43de, 0x1abb, 0xaeb6, 0x4658, 0xb2fd, 0xbf80, 0xb027, 0x4068, 0xac56, 0x0b56, 0xba3e, 0xb0ae, 0x2699, 0x4175, 0xbf39, 0x4367, 0x39a9, 0x4377, 0x3b13, 0x0504, 0x41cb, 0x43fe, 0x43a9, 0xb037, 0x4226, 0x4090, 0xb219, 0x4236, 0x4043, 0x435b, 0x163b, 0x41b5, 0x42ff, 0x03d5, 0xbf4e, 0xbad9, 0x42d2, 0x4063, 0x18c2, 0x4441, 0x1dac, 0xb287, 0x40b8, 0x4007, 0xb28d, 0x41a5, 0x4230, 0xbfa0, 0x419f, 0x0084, 0x4042, 0x1fe7, 0x42e3, 0x03a8, 0x2f05, 0x4641, 0xba39, 0xb266, 0x42cd, 0xb0f9, 0xb012, 0x4066, 0xb276, 0xbf3c, 0xb2b6, 0x197f, 0x4091, 0x1871, 0xbf11, 0xba70, 0xa8b5, 0x404b, 0x1bce, 0x43bb, 0x3ac6, 0xb021, 0xb2f4, 0x41f0, 0x4402, 0x2c5a, 0x45cc, 0x437c, 0xb023, 0xb23c, 0x37b9, 0x412d, 0x42b2, 0x43a1, 0xb089, 0x417f, 0x43ad, 0x4220, 0x42b4, 0x4176, 0x2e55, 0xb228, 0xbf0d, 0x3038, 0x4315, 0x4302, 0xba33, 0x43e0, 0x43cd, 0x0765, 0xbfc3, 0x41b6, 0x1bbb, 0x4007, 0xafba, 0x1c38, 0xb25e, 0xb2f2, 0x1ad5, 0x4196, 0xba2c, 0x40b4, 0x1a04, 0xb01a, 0xba71, 0xb2a8, 0x4685, 0xb0b2, 0xb20c, 0xba54, 0x46c5, 0xbf86, 0xa737, 0x4309, 0xb230, 0x03e0, 0xb282, 0x45ae, 0xb293, 0x40d7, 0x40c5, 0x40da, 0xb2fc, 0x40fb, 0x42c4, 0xb217, 0x367a, 0x41bd, 0xba6f, 0xba59, 0xba7a, 0x08b7, 0xbf67, 0x13e5, 0x408c, 0x12cf, 0xa5fd, 0x44ad, 0x34f1, 0xb2eb, 0x407c, 0x2b7a, 0xbfe0, 0x4481, 0xb286, 0x18f7, 0x42c5, 0x1fa6, 0x41b2, 0x42de, 0x40a0, 0x2f21, 0x4090, 0x4309, 0x4071, 0x3c32, 0x4203, 0x42f0, 0xba32, 0x41d8, 0x1daa, 0xbfbf, 0x402f, 0xb2d2, 0x435b, 0x4158, 0x407e, 0x20ff, 0xba0a, 0x1a6a, 0xba33, 0x4093, 0x43f0, 0xbf57, 0x43f9, 0xb2a1, 0x432f, 0xb2f5, 0x41cc, 0x4244, 0x1dc6, 0xb2b1, 0xba27, 0xbfa7, 0x347c, 0xb042, 0xba06, 0x41b2, 0xbaeb, 0x199f, 0xbfa7, 0x432f, 0xb2dd, 0x1a37, 0xb2dc, 0x434d, 0xbac5, 0xbaf8, 0x420e, 0x3f3f, 0xb0b2, 0x4005, 0x2b8a, 0x1c8d, 0x46e8, 0xade4, 0x425b, 0x4152, 0x0240, 0x4175, 0x0d64, 0x449a, 0x4018, 0x4366, 0xb2d5, 0x226b, 0x40ae, 0xb20f, 0xbf57, 0xa2c7, 0x42ac, 0xaf3b, 0x461f, 0xba67, 0x2af4, 0x4230, 0x4087, 0x1543, 0x43a9, 0x4232, 0x432e, 0xba6b, 0x46da, 0xba31, 0xbacb, 0x431a, 0x4343, 0xbfa9, 0x40c7, 0x18fb, 0xb2c6, 0x4066, 0xbf13, 0x4399, 0x4480, 0x3d8f, 0x111f, 0xbf1f, 0xbad3, 0x42be, 0x22b8, 0x438a, 0x0dd7, 0xa490, 0x400b, 0x424b, 0x4285, 0x407a, 0xae75, 0x17ab, 0x41a9, 0x1d62, 0xb214, 0xbf29, 0x4084, 0xa46a, 0x23a2, 0x44d2, 0xb0e4, 0x4203, 0x45ac, 0x4266, 0x1e81, 0x1a45, 0x10c8, 0xb0e2, 0x0833, 0x40aa, 0xb2cf, 0x1866, 0x1948, 0x435b, 0x18e0, 0xb230, 0x3774, 0x41b7, 0x1d3c, 0xb2b5, 0xbf90, 0x4265, 0xbfba, 0x4008, 0xba33, 0x1e27, 0x42d4, 0x1eef, 0xaf74, 0x41b5, 0x4069, 0x0d28, 0x0e57, 0x4254, 0x406f, 0xaac3, 0x1f94, 0x14a1, 0x4290, 0x4141, 0x4216, 0xb01f, 0x081b, 0xbfa1, 0xbfb0, 0x412b, 0xb24b, 0xb035, 0xb21f, 0x4248, 0x3144, 0xba32, 0x41d9, 0x461c, 0x1bb8, 0x40c8, 0xb266, 0xb258, 0xb2d6, 0xbadf, 0x42d4, 0x1a11, 0xbae0, 0x4629, 0xbf80, 0x4268, 0x0cef, 0x410f, 0xba0f, 0xba5e, 0xbf16, 0x42b3, 0xa03d, 0xb2b4, 0xb030, 0x3899, 0x4541, 0xb2e3, 0x1803, 0x16d3, 0xbfc2, 0xb216, 0x41dd, 0x42fa, 0xbf80, 0xafdf, 0x42da, 0x40e8, 0x1c5b, 0xb291, 0x1afb, 0xbf31, 0x41e2, 0x3e9d, 0x3a13, 0x11f2, 0x40ae, 0x400e, 0xba28, 0x40b8, 0x409d, 0x417c, 0x1ee6, 0x4252, 0xaa67, 0x0485, 0x43c7, 0xb0f3, 0x410c, 0x28df, 0xba12, 0x2ed5, 0xbf9f, 0xba74, 0x1d89, 0x44ac, 0x437a, 0x1e57, 0xbff0, 0x40cf, 0x415b, 0xb0a7, 0x414b, 0x402c, 0x4495, 0x29be, 0xa885, 0x39bb, 0x43c7, 0xbfb8, 0xb233, 0x1b91, 0x438e, 0xb21c, 0x1b36, 0xbf61, 0x4378, 0x4393, 0xba2b, 0x34c6, 0x1fef, 0xaa51, 0xa22d, 0xb270, 0x0598, 0xbfb0, 0xbad6, 0x42d9, 0xba35, 0x1bb7, 0x45f3, 0x4115, 0x1cfd, 0x42e9, 0x402f, 0xb20c, 0xbfd0, 0xae0a, 0x40c1, 0xb09d, 0xba08, 0x1fad, 0x41a9, 0x4387, 0x461c, 0xbf53, 0x186f, 0x2e59, 0x42b8, 0x425d, 0xbf11, 0x436c, 0xba65, 0x43b9, 0x4626, 0x44c3, 0x41b6, 0x1884, 0xb057, 0x1e30, 0xbfdd, 0x43a6, 0x405e, 0xa060, 0x423e, 0xb014, 0xba47, 0xad06, 0x1f36, 0xbf75, 0x464a, 0x3179, 0xa268, 0x463e, 0xb086, 0x2610, 0x401f, 0x2f67, 0x4409, 0x42c7, 0x1f54, 0x409b, 0x4111, 0x424a, 0xbf5d, 0x43b2, 0x467c, 0x40dd, 0x4085, 0xa14a, 0xa7d5, 0xba37, 0x4378, 0x4152, 0x43f6, 0x022e, 0x22b8, 0xb219, 0xba5b, 0xbf27, 0x424a, 0x0809, 0x4413, 0xb046, 0xbf60, 0x10bf, 0x1d41, 0x41bd, 0x1ed3, 0xac2b, 0xb2e2, 0xbfa0, 0x0d1b, 0x1fa2, 0xbf0e, 0xba7c, 0x40e4, 0x404e, 0x4593, 0xb276, 0x4170, 0x3ab1, 0xaad4, 0x2013, 0x3e57, 0xb0b8, 0xba09, 0x463b, 0xa62e, 0x43ac, 0x4390, 0x1c3e, 0x41f4, 0x01b9, 0x43b4, 0xb20d, 0xbf69, 0x4246, 0x4183, 0x42f6, 0x1bae, 0x4081, 0xabe8, 0x4013, 0x44c1, 0xa15e, 0x4271, 0x41a5, 0x42e1, 0x1cc6, 0x4302, 0x1176, 0x0ade, 0x0697, 0x41ad, 0x42ab, 0x41c5, 0x4260, 0x454a, 0xba34, 0xbf02, 0xb035, 0xb04b, 0x430d, 0x4418, 0x1bdd, 0xbfba, 0xb26f, 0x1b87, 0x42f2, 0x403c, 0x420a, 0x40b0, 0x1c57, 0xb061, 0x438a, 0x4173, 0x2e49, 0xb2f9, 0xbfc6, 0x41db, 0x1ad3, 0xba5d, 0x456c, 0xba02, 0x4245, 0xb098, 0x4267, 0x4141, 0x4665, 0x44a4, 0x05b1, 0xb2c1, 0xb001, 0x4205, 0x43fb, 0x40df, 0x19be, 0x43a4, 0x405a, 0x463f, 0x4130, 0x41ee, 0xb2da, 0xbf97, 0xac39, 0x4601, 0x41e1, 0x4175, 0xa137, 0x43d0, 0x4182, 0x1bf3, 0xbfd9, 0x409d, 0xb2a1, 0xba51, 0x013e, 0xbac1, 0x12a3, 0x4069, 0xabd0, 0x4220, 0xb0f8, 0xa4f4, 0x198b, 0x2d94, 0x43ee, 0x1fce, 0xba06, 0x022e, 0x42ea, 0x4229, 0x1d1e, 0xb0e2, 0xbfa3, 0x0bed, 0x4095, 0xba7c, 0x0052, 0x403c, 0xbadb, 0x4180, 0xba66, 0x4028, 0x427c, 0x2473, 0xba2c, 0xbf9b, 0xb208, 0xba24, 0x41f2, 0x4377, 0x1dd5, 0x40c1, 0xbf90, 0xb2c3, 0x1b1d, 0x42ac, 0x45ca, 0xbf8a, 0x1edd, 0x276c, 0x46d5, 0x32fc, 0xa25c, 0xb2d8, 0x4063, 0xbfb0, 0x02b4, 0x1c84, 0x2bcf, 0x429e, 0xb0f0, 0x43c5, 0x0fe7, 0x4323, 0xb2af, 0x1c79, 0x42c9, 0xa5ef, 0x41e9, 0x039f, 0x46ec, 0x1cd3, 0x1747, 0xbf6e, 0x42ba, 0xbad7, 0x4048, 0xb25a, 0x1930, 0x4296, 0xb08c, 0x406a, 0xb066, 0x191b, 0x3bd6, 0xba7c, 0x416e, 0x0db1, 0x4273, 0xbff0, 0xbf19, 0xba02, 0xbaf5, 0x4297, 0x41cd, 0x42d0, 0x411a, 0x1adb, 0x3814, 0xbf68, 0xb0b9, 0x415a, 0x4658, 0xb215, 0x4198, 0x4082, 0x43f7, 0xb097, 0xba0e, 0x1ac2, 0x431a, 0xb075, 0x4253, 0xb2a6, 0xbf9a, 0x1816, 0x41d5, 0xb2ef, 0xb0fa, 0x428f, 0x1b75, 0xba57, 0x4241, 0x43b8, 0x41de, 0xb2c4, 0xbaf0, 0xa9d9, 0xbfd4, 0x3b4a, 0xbacd, 0x426c, 0x1fa9, 0x3d6f, 0xbf07, 0xa213, 0x42c7, 0x0aa3, 0x43a1, 0xb090, 0xba23, 0x42ff, 0xa8ce, 0x4313, 0x41f5, 0x4691, 0xa85a, 0xac75, 0xbfe0, 0x0459, 0xaabc, 0x42c0, 0xbf1a, 0x41e2, 0xb03b, 0x1b5e, 0x2210, 0x4263, 0xbfc0, 0x2f43, 0xa745, 0x1bcc, 0x403c, 0x443a, 0x44bd, 0xbfc0, 0xb25c, 0x400f, 0x42f4, 0xbfe4, 0x4446, 0xb23d, 0x4166, 0xba55, 0xb2b2, 0xb2aa, 0x19ad, 0xa192, 0xb0d9, 0xa1b6, 0x42d5, 0x429e, 0x402b, 0xbf37, 0xb2c3, 0x2823, 0x425c, 0x0c29, 0x42a0, 0x0885, 0x4077, 0x43db, 0xb2c9, 0x2cd3, 0x4249, 0xbf81, 0xb212, 0x400a, 0x133a, 0x03ef, 0x30dc, 0x2ebf, 0x1b95, 0x1abb, 0xbfb0, 0xb2e7, 0x41e0, 0x401b, 0x400f, 0x3cd1, 0x3f45, 0xbf5a, 0x43be, 0x44c1, 0x4662, 0xbfc0, 0x4019, 0x4357, 0xb298, 0x4278, 0x4338, 0x2492, 0x4279, 0xb0a0, 0x436e, 0x4378, 0x4272, 0x19be, 0x4243, 0x43dc, 0x41aa, 0x1938, 0xbf22, 0x4202, 0xb0b5, 0xbac3, 0x1989, 0xa4aa, 0xb21e, 0x43ad, 0x4495, 0xbfde, 0x2891, 0xb287, 0xb2bf, 0x182f, 0x436c, 0x0e88, 0xb2fd, 0x4207, 0xba23, 0xb0ac, 0xbf39, 0x3a14, 0xb2a6, 0x42f3, 0x13e5, 0xb097, 0x4008, 0x4286, 0x421c, 0xbf4a, 0x1dc9, 0x1a6a, 0x41bf, 0xba55, 0x2f4b, 0xaa67, 0x4175, 0x4003, 0x4189, 0xb279, 0xbf3e, 0x4102, 0x45dd, 0xbfd0, 0xbad2, 0x0cb3, 0xb06f, 0x43f0, 0x44ed, 0x1af4, 0x40e7, 0xbfa1, 0x1ea1, 0x461d, 0x42b7, 0xb0a6, 0x44c0, 0xa90f, 0x280c, 0x42ff, 0x39ac, 0x4334, 0x4395, 0xba55, 0x4119, 0x1c16, 0xbfa0, 0x40d1, 0xb24e, 0x41f0, 0x3292, 0xba52, 0x4016, 0x43ce, 0x0873, 0x3836, 0xb074, 0xb08c, 0xbacc, 0xbf8b, 0x4301, 0xb274, 0xbfa0, 0x41f3, 0x4770, 0xe7fe + ], + StartRegs = [0x5a5bb2e2, 0x70b44505, 0xf439f718, 0x7601686e, 0x506efe14, 0xe57877bf, 0xae23b7eb, 0x04b61cf8, 0x3e1feb19, 0x3ee9a3be, 0x31b2d471, 0x4f5928f4, 0x9e0f7156, 0x0e22cfed, 0x00000000, 0xc00001f0 + ], + FinalRegs = [0xffffffc9, 0xffffffc9, 0x00009100, 0x7fffffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x7c404452, 0x8d794b1c, 0x4f5928f4, 0x8d794b1d, 0xfb201937, 0xf1ddb58c, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0xbac1, 0x4158, 0x40ea, 0x242c, 0x4288, 0xb29e, 0x418a, 0xbf23, 0xb2fa, 0x4148, 0x3f4d, 0xba28, 0x43a5, 0xb0fb, 0x1ba0, 0x4000, 0x2c42, 0xbac7, 0x40bf, 0xa072, 0x43fc, 0x1202, 0x40a6, 0xba20, 0xbf96, 0xb0ff, 0x0d2b, 0xb221, 0xb274, 0xb237, 0x4048, 0x43ef, 0x45a1, 0x1d08, 0x1c73, 0xbf35, 0x44c0, 0xbacb, 0xb0bf, 0xa4a5, 0x06ac, 0xa673, 0x4076, 0x42de, 0x411c, 0x4316, 0xba5a, 0xb222, 0xbf60, 0x1f22, 0x4047, 0x4599, 0x43eb, 0x3d4e, 0x4684, 0x4159, 0x42d6, 0x4397, 0x4019, 0x37f0, 0x0c64, 0xba56, 0x404f, 0x419b, 0xbfab, 0x0a60, 0x1678, 0xb2e1, 0x4087, 0x4113, 0x1c75, 0x43e2, 0x4580, 0xb2f4, 0x1a65, 0x41bf, 0xa5c4, 0xbf00, 0x023e, 0xba5b, 0x40ec, 0x423f, 0x4265, 0x4159, 0xba17, 0x43d5, 0xbfa0, 0x419d, 0x0690, 0x4613, 0x4026, 0x4237, 0x419a, 0xbfbd, 0xaf55, 0xb248, 0x1543, 0x43c3, 0x1eac, 0x4208, 0xb224, 0xbacd, 0x4290, 0x40dd, 0xb2bb, 0x4551, 0x40a6, 0x4595, 0x4118, 0x1940, 0xbf41, 0x3427, 0x18e1, 0x405d, 0x4086, 0x42c3, 0xaaaf, 0x39b0, 0x40a6, 0x2091, 0xbf1f, 0xb29c, 0x0054, 0x3139, 0x40a2, 0x3fcc, 0x2890, 0x4073, 0x4378, 0x1fe5, 0x00f7, 0x1a7b, 0xbad5, 0x401d, 0x4229, 0x424e, 0x1e92, 0xa256, 0x40ed, 0xa108, 0xbfa8, 0x41b1, 0x40ad, 0x1f7c, 0xb2ce, 0xb27e, 0xbf7b, 0x4066, 0x305d, 0xba36, 0xbafb, 0x2265, 0xba43, 0xb213, 0x43fe, 0x40ba, 0xa9a2, 0xbfc5, 0x1c2e, 0x4254, 0xa6ce, 0x40c7, 0xb0d1, 0x416d, 0x425f, 0xa0b5, 0x4365, 0x1da1, 0xb204, 0x3eca, 0x430c, 0x4646, 0x43f9, 0x42c3, 0xbf68, 0x4058, 0x416d, 0x1e07, 0x1e89, 0x40ec, 0x4041, 0x40b4, 0xb01d, 0xb234, 0x4023, 0xb019, 0x4679, 0xb0ff, 0x4624, 0xad8f, 0x188f, 0x412e, 0xaf18, 0x1adc, 0xbf11, 0x1f44, 0x436d, 0x436b, 0xa7ad, 0x0ba2, 0xb28b, 0x4273, 0xb22d, 0x4097, 0x4105, 0x426c, 0xb25a, 0xbf90, 0x428c, 0x138c, 0x44e1, 0x418a, 0x1aff, 0x219f, 0xb269, 0xbf15, 0x0b01, 0x4201, 0x4008, 0xbafe, 0x3265, 0xb0b0, 0x4359, 0x45ba, 0x425f, 0xb214, 0x42e9, 0x4456, 0x404d, 0xbfd7, 0x40a2, 0xb0f8, 0x4032, 0x18b3, 0x3009, 0xb2ab, 0x41b7, 0x44c9, 0x4419, 0xb096, 0x429f, 0x433d, 0x38f2, 0xbfe0, 0x4083, 0x414b, 0x4055, 0xba74, 0xbf75, 0x4072, 0x41fb, 0xb04a, 0x43e3, 0x43f7, 0xad8d, 0xb251, 0xba67, 0x4300, 0x4259, 0x4206, 0xb0a2, 0xb242, 0x4699, 0x1c9e, 0xbf73, 0x434f, 0x0744, 0xa414, 0x4099, 0x4661, 0xba62, 0x2e9f, 0x431a, 0x05c6, 0x465d, 0xb2ee, 0xbae1, 0x093a, 0xbf90, 0x4399, 0xb21d, 0x40dd, 0xb2b5, 0x0057, 0xbf60, 0x1f1c, 0xbf18, 0xb28b, 0x41f3, 0xbadb, 0xbf9c, 0xb261, 0x129d, 0x42fb, 0x42b7, 0x4306, 0xb06f, 0xb2d6, 0x41b6, 0xa264, 0x4001, 0x2ef9, 0x2dc8, 0x40c6, 0x40f3, 0x456f, 0x414e, 0x26ae, 0x2625, 0x41bf, 0x40b0, 0x1a12, 0x31a8, 0xb000, 0x1a30, 0xbf31, 0x1198, 0x44fd, 0x043c, 0x4301, 0x1a9d, 0x10cc, 0xbfac, 0x401e, 0x135e, 0xb2df, 0x4356, 0xae2b, 0x40e0, 0x43f7, 0x322f, 0xba6b, 0xbfde, 0x1e91, 0x21a5, 0x413f, 0x4081, 0x134a, 0x43d9, 0x417b, 0xb089, 0xadcd, 0xb220, 0x43ab, 0x1aed, 0xa819, 0x1ee7, 0xb0de, 0xb2dd, 0x2249, 0x4122, 0x29d1, 0xa87d, 0xb0b2, 0x128c, 0x33a1, 0x0d9c, 0xbf16, 0x15ea, 0x4607, 0xbf70, 0x2f6c, 0x1900, 0x4060, 0x1abd, 0xb2f2, 0xba65, 0x4166, 0x3593, 0xbfcf, 0x1a90, 0x4308, 0x4447, 0xba58, 0x1bf2, 0x419c, 0x181c, 0x2f88, 0x4141, 0x418a, 0x4067, 0x12a7, 0xb0c5, 0x4197, 0x0a82, 0x0774, 0x34e5, 0x4456, 0x4109, 0x4209, 0x445d, 0x4029, 0x0d4e, 0x424b, 0x42ee, 0x41a0, 0x4673, 0xbf70, 0xbf3c, 0x18f1, 0x3e63, 0xa7f4, 0x097a, 0x4586, 0x4163, 0x40f1, 0xba57, 0x284b, 0x420e, 0x41cd, 0x4092, 0xba0d, 0x4230, 0x43ce, 0x445c, 0x44cd, 0xb23f, 0x40a6, 0x41ce, 0x1d86, 0xb235, 0xb251, 0xb289, 0x43ba, 0xbfc5, 0x408f, 0xba1b, 0xb0fe, 0x41c0, 0x4107, 0x36ad, 0x3817, 0x2df3, 0xab39, 0x223f, 0x4253, 0xbf67, 0x4148, 0x40d9, 0x42f0, 0xb0e5, 0x4314, 0x404d, 0xb2c4, 0x2d43, 0x41eb, 0x2b28, 0x4630, 0x21d0, 0x1f98, 0xb28a, 0x43c0, 0xbf80, 0x1d10, 0xacb5, 0x45db, 0xbf59, 0x1132, 0x1ef9, 0x429c, 0x1cce, 0x41af, 0xa433, 0x15e1, 0x42b5, 0x419c, 0x1b1f, 0xb2e5, 0x4012, 0xb28c, 0x1d9b, 0xa11e, 0x1a24, 0x423a, 0x40e8, 0xb257, 0x41f4, 0x4452, 0x24ad, 0xbf9a, 0x1809, 0xb2dd, 0xb2be, 0x4104, 0x19b0, 0x43c4, 0xb037, 0x43ea, 0xae35, 0x04ab, 0xb2f8, 0x2c34, 0x2827, 0x40bd, 0x466b, 0xbf59, 0xb029, 0xb219, 0x42fd, 0x434f, 0x1cfa, 0xa456, 0x44c4, 0x415b, 0x1e44, 0xbfbe, 0x4648, 0x4263, 0x41bc, 0x186f, 0xba0f, 0x1cda, 0x1a0c, 0xb0b6, 0x1c21, 0x143a, 0x4284, 0xbae2, 0x4083, 0x1fbb, 0x436d, 0x4286, 0x0262, 0x1fcd, 0x4368, 0x40b5, 0x4339, 0x360f, 0x420a, 0x40e0, 0xb29e, 0xbf61, 0x0a3d, 0x40d3, 0x433b, 0xb20b, 0x4588, 0x401e, 0xb2cf, 0x0ab7, 0x46ab, 0xbfcd, 0x42b0, 0x4199, 0x1deb, 0x16b0, 0x43bb, 0xa042, 0x0943, 0x42d8, 0x4298, 0x412d, 0xbf3c, 0xb01b, 0x43b0, 0xbafe, 0xb02c, 0x4086, 0xbfd1, 0x3145, 0x40aa, 0x1e27, 0xbaff, 0x2464, 0xbf60, 0x435d, 0x43cf, 0x41d7, 0x4408, 0xba3f, 0x40bb, 0x1900, 0x2295, 0xb2d8, 0x2325, 0x46d1, 0xb0f8, 0x438a, 0x43ea, 0x460f, 0x4205, 0x41a7, 0x0b21, 0x1c41, 0xbaeb, 0x3f2f, 0x4340, 0xbf08, 0x1d1a, 0x2ee5, 0xb0b8, 0x432e, 0xbf0f, 0x1edc, 0x4365, 0x1bda, 0xba31, 0x186c, 0xbf95, 0x4027, 0x4268, 0x4136, 0x41a1, 0x407d, 0x1d56, 0x420d, 0xbf11, 0x4246, 0x1bd6, 0x41eb, 0x41b7, 0xb073, 0x40bb, 0x1804, 0x4146, 0xb234, 0x1ca5, 0x40e5, 0xba68, 0xaa9b, 0x2f01, 0x4102, 0x40d0, 0x1c95, 0xb2be, 0x402f, 0xb264, 0xb29b, 0x46fb, 0xb288, 0x418b, 0xbf38, 0xa198, 0x0caa, 0x14ba, 0xadde, 0x033f, 0x40ae, 0x1b2b, 0xb0a9, 0x067e, 0x1fc9, 0x35ab, 0xbad2, 0xac87, 0x1001, 0xb2d3, 0x01a8, 0x407f, 0xbac0, 0xbf23, 0xb2d0, 0x45a6, 0x430b, 0x44e0, 0x4223, 0x42dd, 0xb2bf, 0xb209, 0x462b, 0xb2d5, 0x18a0, 0x4280, 0x1d75, 0x4261, 0xb2fc, 0xb2f7, 0x37a6, 0xba4c, 0x42ee, 0xbaf7, 0x2e93, 0xbf17, 0x4295, 0x43fc, 0xb06f, 0xb20b, 0x4065, 0x4068, 0xbfde, 0x40b8, 0x17c8, 0x43bd, 0x40c4, 0x4159, 0x118d, 0x412a, 0xaebf, 0xbf04, 0x2ba2, 0xb2d5, 0x0b54, 0x0295, 0x438a, 0xbaf1, 0x32b1, 0x2c88, 0x414a, 0x19c9, 0x4026, 0x434d, 0x2396, 0x1d91, 0xb24d, 0xad96, 0x418b, 0x37e2, 0x436c, 0x42ee, 0xbf8b, 0x4166, 0x433a, 0x40b5, 0xbae9, 0x41dd, 0x4303, 0x431a, 0x41f6, 0xbaef, 0x411a, 0xb2ab, 0x113c, 0x1a84, 0xb03e, 0x063d, 0xbf1e, 0xb22a, 0x3926, 0x40e6, 0xba22, 0x2aca, 0x2561, 0xba47, 0xba3b, 0x0a0a, 0xb05d, 0xb2fc, 0xbf95, 0x467e, 0x17a2, 0xba2d, 0xb031, 0x4227, 0x1c1d, 0x427c, 0x3211, 0xb086, 0x43af, 0x4041, 0xad6c, 0x1877, 0x202b, 0x405a, 0x446b, 0x34ef, 0x4084, 0xb252, 0x1ef7, 0x41c8, 0xbf6f, 0xb06f, 0x02fc, 0x409f, 0xba72, 0xb030, 0x4221, 0x4139, 0xbf87, 0x42d1, 0x19be, 0x42de, 0x46eb, 0xba3c, 0x4078, 0xbfb7, 0xba51, 0x43e8, 0x4194, 0x42c7, 0xbf04, 0x4085, 0x42de, 0x40aa, 0x303e, 0x4234, 0x1a9f, 0x1abc, 0x42bc, 0x3b66, 0x361d, 0x01fd, 0x41d2, 0x427e, 0x4332, 0xb21f, 0xb01b, 0xb2de, 0xba46, 0x40bb, 0x1f62, 0x419c, 0x43b1, 0xb2bf, 0xbf7a, 0x1f92, 0xa922, 0x018a, 0xbadf, 0xb229, 0xb02f, 0x195a, 0xbae1, 0x400f, 0x182c, 0xb252, 0x412a, 0x40d9, 0xbf7c, 0xbad9, 0x06da, 0x43e5, 0xb0ab, 0x431f, 0xba39, 0xb016, 0x1ac4, 0x406a, 0x414e, 0x42b8, 0x4237, 0xb28a, 0x44eb, 0x1aa1, 0x34f8, 0xba2a, 0x4568, 0xb210, 0x42b8, 0x1836, 0x434f, 0x4253, 0x21fd, 0x43ec, 0x4181, 0x4239, 0xbf79, 0x43eb, 0x4061, 0xb2c0, 0x29fd, 0x1ac6, 0x3e8c, 0xacfe, 0x43a7, 0xb257, 0xba3d, 0xb06b, 0x40ce, 0xbf61, 0x4205, 0x430d, 0x43ad, 0x02a9, 0x07c4, 0x41c3, 0x1c78, 0x4018, 0x4286, 0xbfd4, 0xbac1, 0x41e3, 0xba27, 0x1e65, 0xb20f, 0x4001, 0xbf68, 0x4642, 0x43af, 0x0ff7, 0x43c4, 0x0a6f, 0xbf19, 0x405d, 0x401c, 0xa368, 0x1c07, 0x06eb, 0x42d9, 0x1863, 0xb0ae, 0x42a9, 0x41ac, 0xb0b6, 0xbfa0, 0xbf90, 0xb2db, 0x4075, 0x4284, 0x431f, 0x1f38, 0xbf2d, 0x4385, 0xb00f, 0x40af, 0x1b7a, 0xaaa3, 0xa6de, 0xba15, 0x4159, 0x41a1, 0x3aee, 0x4072, 0xb0bb, 0x40fb, 0x442b, 0x3328, 0x1e7d, 0x1d86, 0xb232, 0x1b14, 0xb00d, 0x41b9, 0x40fe, 0x1a56, 0x1c3d, 0x2f3c, 0x09ad, 0x4111, 0xbf71, 0x4630, 0x030d, 0x4117, 0x4034, 0x3845, 0x0b31, 0xbae2, 0x462f, 0x0e01, 0xb225, 0x2df4, 0x4651, 0xbfa0, 0x4381, 0x1bcc, 0x432d, 0x4265, 0x42ad, 0x4379, 0x410a, 0xbf04, 0xb28c, 0x42a8, 0x414c, 0x4065, 0x1586, 0x43aa, 0x336d, 0x4211, 0x1bee, 0x42a7, 0x4026, 0x263a, 0x1fa1, 0x4354, 0xbfa9, 0x1d2b, 0x4337, 0x432e, 0xb2d6, 0x18a9, 0xb0a0, 0xba29, 0x4131, 0x4348, 0x403f, 0x0ab3, 0x4214, 0x4175, 0x4259, 0x43d7, 0x33cf, 0xba42, 0x11bb, 0xbf3a, 0xba77, 0x4098, 0x4232, 0xb2a7, 0x4375, 0x0786, 0x1f14, 0xa4fd, 0x01a8, 0xa0ad, 0x411e, 0x2763, 0xba0a, 0xb05f, 0xbac6, 0x4123, 0xbf46, 0x41b5, 0xb20d, 0xac2e, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x4ccb59f7, 0x5e2a5ea7, 0x0598ceb9, 0xfde9560f, 0xaeee5f97, 0x81c7018e, 0x8dfd005d, 0xf0809e08, 0xf2345361, 0x7be970a4, 0xd526e1ae, 0xd985c732, 0x2702a40c, 0xf395aaaa, 0x00000000, 0x300001f0 }, - FinalRegs = new uint[] { 0x00001a78, 0x00000000, 0x00000000, 0xffffffff, 0x00001bb4, 0x00000000, 0x0000781a, 0x00000063, 0xc8d14d87, 0xd526e1ae, 0xd526e1ae, 0xf296cb30, 0xe468a6c5, 0xf296b6a4, 0x00000000, 0xa00001d0 }, + Instructions = [0xbac1, 0x4158, 0x40ea, 0x242c, 0x4288, 0xb29e, 0x418a, 0xbf23, 0xb2fa, 0x4148, 0x3f4d, 0xba28, 0x43a5, 0xb0fb, 0x1ba0, 0x4000, 0x2c42, 0xbac7, 0x40bf, 0xa072, 0x43fc, 0x1202, 0x40a6, 0xba20, 0xbf96, 0xb0ff, 0x0d2b, 0xb221, 0xb274, 0xb237, 0x4048, 0x43ef, 0x45a1, 0x1d08, 0x1c73, 0xbf35, 0x44c0, 0xbacb, 0xb0bf, 0xa4a5, 0x06ac, 0xa673, 0x4076, 0x42de, 0x411c, 0x4316, 0xba5a, 0xb222, 0xbf60, 0x1f22, 0x4047, 0x4599, 0x43eb, 0x3d4e, 0x4684, 0x4159, 0x42d6, 0x4397, 0x4019, 0x37f0, 0x0c64, 0xba56, 0x404f, 0x419b, 0xbfab, 0x0a60, 0x1678, 0xb2e1, 0x4087, 0x4113, 0x1c75, 0x43e2, 0x4580, 0xb2f4, 0x1a65, 0x41bf, 0xa5c4, 0xbf00, 0x023e, 0xba5b, 0x40ec, 0x423f, 0x4265, 0x4159, 0xba17, 0x43d5, 0xbfa0, 0x419d, 0x0690, 0x4613, 0x4026, 0x4237, 0x419a, 0xbfbd, 0xaf55, 0xb248, 0x1543, 0x43c3, 0x1eac, 0x4208, 0xb224, 0xbacd, 0x4290, 0x40dd, 0xb2bb, 0x4551, 0x40a6, 0x4595, 0x4118, 0x1940, 0xbf41, 0x3427, 0x18e1, 0x405d, 0x4086, 0x42c3, 0xaaaf, 0x39b0, 0x40a6, 0x2091, 0xbf1f, 0xb29c, 0x0054, 0x3139, 0x40a2, 0x3fcc, 0x2890, 0x4073, 0x4378, 0x1fe5, 0x00f7, 0x1a7b, 0xbad5, 0x401d, 0x4229, 0x424e, 0x1e92, 0xa256, 0x40ed, 0xa108, 0xbfa8, 0x41b1, 0x40ad, 0x1f7c, 0xb2ce, 0xb27e, 0xbf7b, 0x4066, 0x305d, 0xba36, 0xbafb, 0x2265, 0xba43, 0xb213, 0x43fe, 0x40ba, 0xa9a2, 0xbfc5, 0x1c2e, 0x4254, 0xa6ce, 0x40c7, 0xb0d1, 0x416d, 0x425f, 0xa0b5, 0x4365, 0x1da1, 0xb204, 0x3eca, 0x430c, 0x4646, 0x43f9, 0x42c3, 0xbf68, 0x4058, 0x416d, 0x1e07, 0x1e89, 0x40ec, 0x4041, 0x40b4, 0xb01d, 0xb234, 0x4023, 0xb019, 0x4679, 0xb0ff, 0x4624, 0xad8f, 0x188f, 0x412e, 0xaf18, 0x1adc, 0xbf11, 0x1f44, 0x436d, 0x436b, 0xa7ad, 0x0ba2, 0xb28b, 0x4273, 0xb22d, 0x4097, 0x4105, 0x426c, 0xb25a, 0xbf90, 0x428c, 0x138c, 0x44e1, 0x418a, 0x1aff, 0x219f, 0xb269, 0xbf15, 0x0b01, 0x4201, 0x4008, 0xbafe, 0x3265, 0xb0b0, 0x4359, 0x45ba, 0x425f, 0xb214, 0x42e9, 0x4456, 0x404d, 0xbfd7, 0x40a2, 0xb0f8, 0x4032, 0x18b3, 0x3009, 0xb2ab, 0x41b7, 0x44c9, 0x4419, 0xb096, 0x429f, 0x433d, 0x38f2, 0xbfe0, 0x4083, 0x414b, 0x4055, 0xba74, 0xbf75, 0x4072, 0x41fb, 0xb04a, 0x43e3, 0x43f7, 0xad8d, 0xb251, 0xba67, 0x4300, 0x4259, 0x4206, 0xb0a2, 0xb242, 0x4699, 0x1c9e, 0xbf73, 0x434f, 0x0744, 0xa414, 0x4099, 0x4661, 0xba62, 0x2e9f, 0x431a, 0x05c6, 0x465d, 0xb2ee, 0xbae1, 0x093a, 0xbf90, 0x4399, 0xb21d, 0x40dd, 0xb2b5, 0x0057, 0xbf60, 0x1f1c, 0xbf18, 0xb28b, 0x41f3, 0xbadb, 0xbf9c, 0xb261, 0x129d, 0x42fb, 0x42b7, 0x4306, 0xb06f, 0xb2d6, 0x41b6, 0xa264, 0x4001, 0x2ef9, 0x2dc8, 0x40c6, 0x40f3, 0x456f, 0x414e, 0x26ae, 0x2625, 0x41bf, 0x40b0, 0x1a12, 0x31a8, 0xb000, 0x1a30, 0xbf31, 0x1198, 0x44fd, 0x043c, 0x4301, 0x1a9d, 0x10cc, 0xbfac, 0x401e, 0x135e, 0xb2df, 0x4356, 0xae2b, 0x40e0, 0x43f7, 0x322f, 0xba6b, 0xbfde, 0x1e91, 0x21a5, 0x413f, 0x4081, 0x134a, 0x43d9, 0x417b, 0xb089, 0xadcd, 0xb220, 0x43ab, 0x1aed, 0xa819, 0x1ee7, 0xb0de, 0xb2dd, 0x2249, 0x4122, 0x29d1, 0xa87d, 0xb0b2, 0x128c, 0x33a1, 0x0d9c, 0xbf16, 0x15ea, 0x4607, 0xbf70, 0x2f6c, 0x1900, 0x4060, 0x1abd, 0xb2f2, 0xba65, 0x4166, 0x3593, 0xbfcf, 0x1a90, 0x4308, 0x4447, 0xba58, 0x1bf2, 0x419c, 0x181c, 0x2f88, 0x4141, 0x418a, 0x4067, 0x12a7, 0xb0c5, 0x4197, 0x0a82, 0x0774, 0x34e5, 0x4456, 0x4109, 0x4209, 0x445d, 0x4029, 0x0d4e, 0x424b, 0x42ee, 0x41a0, 0x4673, 0xbf70, 0xbf3c, 0x18f1, 0x3e63, 0xa7f4, 0x097a, 0x4586, 0x4163, 0x40f1, 0xba57, 0x284b, 0x420e, 0x41cd, 0x4092, 0xba0d, 0x4230, 0x43ce, 0x445c, 0x44cd, 0xb23f, 0x40a6, 0x41ce, 0x1d86, 0xb235, 0xb251, 0xb289, 0x43ba, 0xbfc5, 0x408f, 0xba1b, 0xb0fe, 0x41c0, 0x4107, 0x36ad, 0x3817, 0x2df3, 0xab39, 0x223f, 0x4253, 0xbf67, 0x4148, 0x40d9, 0x42f0, 0xb0e5, 0x4314, 0x404d, 0xb2c4, 0x2d43, 0x41eb, 0x2b28, 0x4630, 0x21d0, 0x1f98, 0xb28a, 0x43c0, 0xbf80, 0x1d10, 0xacb5, 0x45db, 0xbf59, 0x1132, 0x1ef9, 0x429c, 0x1cce, 0x41af, 0xa433, 0x15e1, 0x42b5, 0x419c, 0x1b1f, 0xb2e5, 0x4012, 0xb28c, 0x1d9b, 0xa11e, 0x1a24, 0x423a, 0x40e8, 0xb257, 0x41f4, 0x4452, 0x24ad, 0xbf9a, 0x1809, 0xb2dd, 0xb2be, 0x4104, 0x19b0, 0x43c4, 0xb037, 0x43ea, 0xae35, 0x04ab, 0xb2f8, 0x2c34, 0x2827, 0x40bd, 0x466b, 0xbf59, 0xb029, 0xb219, 0x42fd, 0x434f, 0x1cfa, 0xa456, 0x44c4, 0x415b, 0x1e44, 0xbfbe, 0x4648, 0x4263, 0x41bc, 0x186f, 0xba0f, 0x1cda, 0x1a0c, 0xb0b6, 0x1c21, 0x143a, 0x4284, 0xbae2, 0x4083, 0x1fbb, 0x436d, 0x4286, 0x0262, 0x1fcd, 0x4368, 0x40b5, 0x4339, 0x360f, 0x420a, 0x40e0, 0xb29e, 0xbf61, 0x0a3d, 0x40d3, 0x433b, 0xb20b, 0x4588, 0x401e, 0xb2cf, 0x0ab7, 0x46ab, 0xbfcd, 0x42b0, 0x4199, 0x1deb, 0x16b0, 0x43bb, 0xa042, 0x0943, 0x42d8, 0x4298, 0x412d, 0xbf3c, 0xb01b, 0x43b0, 0xbafe, 0xb02c, 0x4086, 0xbfd1, 0x3145, 0x40aa, 0x1e27, 0xbaff, 0x2464, 0xbf60, 0x435d, 0x43cf, 0x41d7, 0x4408, 0xba3f, 0x40bb, 0x1900, 0x2295, 0xb2d8, 0x2325, 0x46d1, 0xb0f8, 0x438a, 0x43ea, 0x460f, 0x4205, 0x41a7, 0x0b21, 0x1c41, 0xbaeb, 0x3f2f, 0x4340, 0xbf08, 0x1d1a, 0x2ee5, 0xb0b8, 0x432e, 0xbf0f, 0x1edc, 0x4365, 0x1bda, 0xba31, 0x186c, 0xbf95, 0x4027, 0x4268, 0x4136, 0x41a1, 0x407d, 0x1d56, 0x420d, 0xbf11, 0x4246, 0x1bd6, 0x41eb, 0x41b7, 0xb073, 0x40bb, 0x1804, 0x4146, 0xb234, 0x1ca5, 0x40e5, 0xba68, 0xaa9b, 0x2f01, 0x4102, 0x40d0, 0x1c95, 0xb2be, 0x402f, 0xb264, 0xb29b, 0x46fb, 0xb288, 0x418b, 0xbf38, 0xa198, 0x0caa, 0x14ba, 0xadde, 0x033f, 0x40ae, 0x1b2b, 0xb0a9, 0x067e, 0x1fc9, 0x35ab, 0xbad2, 0xac87, 0x1001, 0xb2d3, 0x01a8, 0x407f, 0xbac0, 0xbf23, 0xb2d0, 0x45a6, 0x430b, 0x44e0, 0x4223, 0x42dd, 0xb2bf, 0xb209, 0x462b, 0xb2d5, 0x18a0, 0x4280, 0x1d75, 0x4261, 0xb2fc, 0xb2f7, 0x37a6, 0xba4c, 0x42ee, 0xbaf7, 0x2e93, 0xbf17, 0x4295, 0x43fc, 0xb06f, 0xb20b, 0x4065, 0x4068, 0xbfde, 0x40b8, 0x17c8, 0x43bd, 0x40c4, 0x4159, 0x118d, 0x412a, 0xaebf, 0xbf04, 0x2ba2, 0xb2d5, 0x0b54, 0x0295, 0x438a, 0xbaf1, 0x32b1, 0x2c88, 0x414a, 0x19c9, 0x4026, 0x434d, 0x2396, 0x1d91, 0xb24d, 0xad96, 0x418b, 0x37e2, 0x436c, 0x42ee, 0xbf8b, 0x4166, 0x433a, 0x40b5, 0xbae9, 0x41dd, 0x4303, 0x431a, 0x41f6, 0xbaef, 0x411a, 0xb2ab, 0x113c, 0x1a84, 0xb03e, 0x063d, 0xbf1e, 0xb22a, 0x3926, 0x40e6, 0xba22, 0x2aca, 0x2561, 0xba47, 0xba3b, 0x0a0a, 0xb05d, 0xb2fc, 0xbf95, 0x467e, 0x17a2, 0xba2d, 0xb031, 0x4227, 0x1c1d, 0x427c, 0x3211, 0xb086, 0x43af, 0x4041, 0xad6c, 0x1877, 0x202b, 0x405a, 0x446b, 0x34ef, 0x4084, 0xb252, 0x1ef7, 0x41c8, 0xbf6f, 0xb06f, 0x02fc, 0x409f, 0xba72, 0xb030, 0x4221, 0x4139, 0xbf87, 0x42d1, 0x19be, 0x42de, 0x46eb, 0xba3c, 0x4078, 0xbfb7, 0xba51, 0x43e8, 0x4194, 0x42c7, 0xbf04, 0x4085, 0x42de, 0x40aa, 0x303e, 0x4234, 0x1a9f, 0x1abc, 0x42bc, 0x3b66, 0x361d, 0x01fd, 0x41d2, 0x427e, 0x4332, 0xb21f, 0xb01b, 0xb2de, 0xba46, 0x40bb, 0x1f62, 0x419c, 0x43b1, 0xb2bf, 0xbf7a, 0x1f92, 0xa922, 0x018a, 0xbadf, 0xb229, 0xb02f, 0x195a, 0xbae1, 0x400f, 0x182c, 0xb252, 0x412a, 0x40d9, 0xbf7c, 0xbad9, 0x06da, 0x43e5, 0xb0ab, 0x431f, 0xba39, 0xb016, 0x1ac4, 0x406a, 0x414e, 0x42b8, 0x4237, 0xb28a, 0x44eb, 0x1aa1, 0x34f8, 0xba2a, 0x4568, 0xb210, 0x42b8, 0x1836, 0x434f, 0x4253, 0x21fd, 0x43ec, 0x4181, 0x4239, 0xbf79, 0x43eb, 0x4061, 0xb2c0, 0x29fd, 0x1ac6, 0x3e8c, 0xacfe, 0x43a7, 0xb257, 0xba3d, 0xb06b, 0x40ce, 0xbf61, 0x4205, 0x430d, 0x43ad, 0x02a9, 0x07c4, 0x41c3, 0x1c78, 0x4018, 0x4286, 0xbfd4, 0xbac1, 0x41e3, 0xba27, 0x1e65, 0xb20f, 0x4001, 0xbf68, 0x4642, 0x43af, 0x0ff7, 0x43c4, 0x0a6f, 0xbf19, 0x405d, 0x401c, 0xa368, 0x1c07, 0x06eb, 0x42d9, 0x1863, 0xb0ae, 0x42a9, 0x41ac, 0xb0b6, 0xbfa0, 0xbf90, 0xb2db, 0x4075, 0x4284, 0x431f, 0x1f38, 0xbf2d, 0x4385, 0xb00f, 0x40af, 0x1b7a, 0xaaa3, 0xa6de, 0xba15, 0x4159, 0x41a1, 0x3aee, 0x4072, 0xb0bb, 0x40fb, 0x442b, 0x3328, 0x1e7d, 0x1d86, 0xb232, 0x1b14, 0xb00d, 0x41b9, 0x40fe, 0x1a56, 0x1c3d, 0x2f3c, 0x09ad, 0x4111, 0xbf71, 0x4630, 0x030d, 0x4117, 0x4034, 0x3845, 0x0b31, 0xbae2, 0x462f, 0x0e01, 0xb225, 0x2df4, 0x4651, 0xbfa0, 0x4381, 0x1bcc, 0x432d, 0x4265, 0x42ad, 0x4379, 0x410a, 0xbf04, 0xb28c, 0x42a8, 0x414c, 0x4065, 0x1586, 0x43aa, 0x336d, 0x4211, 0x1bee, 0x42a7, 0x4026, 0x263a, 0x1fa1, 0x4354, 0xbfa9, 0x1d2b, 0x4337, 0x432e, 0xb2d6, 0x18a9, 0xb0a0, 0xba29, 0x4131, 0x4348, 0x403f, 0x0ab3, 0x4214, 0x4175, 0x4259, 0x43d7, 0x33cf, 0xba42, 0x11bb, 0xbf3a, 0xba77, 0x4098, 0x4232, 0xb2a7, 0x4375, 0x0786, 0x1f14, 0xa4fd, 0x01a8, 0xa0ad, 0x411e, 0x2763, 0xba0a, 0xb05f, 0xbac6, 0x4123, 0xbf46, 0x41b5, 0xb20d, 0xac2e, 0x4770, 0xe7fe + ], + StartRegs = [0x4ccb59f7, 0x5e2a5ea7, 0x0598ceb9, 0xfde9560f, 0xaeee5f97, 0x81c7018e, 0x8dfd005d, 0xf0809e08, 0xf2345361, 0x7be970a4, 0xd526e1ae, 0xd985c732, 0x2702a40c, 0xf395aaaa, 0x00000000, 0x300001f0 + ], + FinalRegs = [0x00001a78, 0x00000000, 0x00000000, 0xffffffff, 0x00001bb4, 0x00000000, 0x0000781a, 0x00000063, 0xc8d14d87, 0xd526e1ae, 0xd526e1ae, 0xf296cb30, 0xe468a6c5, 0xf296b6a4, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x30ba, 0x3e17, 0xb2b6, 0x0e7a, 0x1ad3, 0x16d7, 0x3d09, 0xb2d4, 0x4149, 0x4388, 0xbf70, 0x403e, 0x4081, 0x2f93, 0xb263, 0x421d, 0x4136, 0x1fbc, 0xbadd, 0x42e0, 0x41df, 0x42f2, 0xb2ac, 0x4188, 0x1f29, 0xbf0c, 0x46e4, 0x0f06, 0x4220, 0xb090, 0xb2be, 0xa4e6, 0x4047, 0xbfe0, 0x465b, 0x3199, 0x4216, 0x1b5d, 0x0645, 0xb04b, 0x1ae2, 0xaec8, 0x1942, 0x4225, 0x4214, 0x3aa9, 0xba12, 0x41b2, 0x30a1, 0xb27b, 0xba72, 0xba69, 0x15c8, 0xbfdd, 0xb204, 0x427c, 0x42e0, 0xb260, 0x4169, 0xa447, 0xb204, 0x424e, 0x465d, 0x3fce, 0xabb3, 0x43f3, 0xba44, 0x418d, 0x42b9, 0xb045, 0x20a4, 0xb285, 0xb2c1, 0x424d, 0x0575, 0xb081, 0x0475, 0xb273, 0x43db, 0x4297, 0xbf16, 0x41d7, 0x1b1c, 0x1a44, 0x4220, 0x29a3, 0x4069, 0x4143, 0x464e, 0xb2e9, 0x4120, 0xb28b, 0xacb2, 0xac86, 0x2c6e, 0x43c5, 0x42d4, 0x42e7, 0xbf15, 0x1c4d, 0x41a9, 0x4300, 0x401c, 0x32f0, 0x431e, 0x4117, 0x43f3, 0xb041, 0x02d0, 0x443d, 0xbfc9, 0xb292, 0x436c, 0xb236, 0xb022, 0xb023, 0x430b, 0xbfc0, 0x4318, 0x456a, 0x2809, 0x4006, 0x432a, 0xba3e, 0x4396, 0x406b, 0xbf16, 0xba55, 0x4163, 0x4279, 0x035d, 0x4380, 0x4078, 0x1ccc, 0xba46, 0x4064, 0xb21a, 0x0727, 0x1a5e, 0xba7f, 0xa4ed, 0xbac7, 0x0244, 0xb26b, 0x23f1, 0x3321, 0xa490, 0x4284, 0xba64, 0xa24a, 0x4057, 0xbaff, 0x1877, 0x417c, 0x0d9c, 0xbf9c, 0x1c58, 0x42c3, 0x1c7f, 0xba5f, 0x0daa, 0x42d8, 0x41be, 0x40d2, 0x4298, 0x4118, 0x4085, 0x4353, 0xbf06, 0x402f, 0xb0fc, 0x45ab, 0x41da, 0x11d6, 0xbf04, 0xb025, 0x40a2, 0xb26c, 0x40ae, 0x40c5, 0x08ba, 0xb227, 0x4356, 0x423b, 0xb20c, 0x230b, 0x40e1, 0xb0fa, 0x4013, 0x14bd, 0x43de, 0x3daf, 0x0368, 0x407f, 0xb298, 0x41f8, 0x43de, 0x4048, 0x18a4, 0x08f7, 0x42b9, 0x41a8, 0xbf33, 0x404f, 0x4174, 0x4261, 0x43f1, 0x1609, 0x4281, 0x00ee, 0x4291, 0x43b1, 0x359a, 0xb0d0, 0xb09f, 0x40fe, 0xb2b5, 0x4466, 0xb050, 0xb25c, 0xba0b, 0xb03a, 0x04a6, 0xb247, 0x4390, 0xb291, 0x4198, 0xb02a, 0x421f, 0x40b3, 0xbf7d, 0x41f6, 0x23ee, 0x329a, 0x43d2, 0x421c, 0x4199, 0xb253, 0xb0c6, 0x3180, 0xb0b7, 0x43a0, 0xbfbf, 0x43e6, 0x1e76, 0x157f, 0x3290, 0x1952, 0x428a, 0x1b3f, 0x05ce, 0x0e2e, 0xb0bf, 0xb264, 0x41a3, 0x0a74, 0x4181, 0x4112, 0x3e9f, 0x42c4, 0x4214, 0x46b9, 0x1a96, 0xbf0f, 0xa787, 0x42fb, 0xb008, 0x40a0, 0x2262, 0xb261, 0x26a5, 0xa01b, 0x01fa, 0x40a4, 0xba0f, 0xa676, 0xb26b, 0xb262, 0xba1f, 0x4075, 0xbfc2, 0x415d, 0xb095, 0x1ead, 0x410a, 0x4328, 0x0c46, 0xb2e9, 0x430f, 0xb274, 0x415d, 0x420f, 0x197b, 0x46fb, 0x125d, 0x43ca, 0xa547, 0x4064, 0x425e, 0xbf2f, 0xb036, 0xb292, 0x40e9, 0x3d9e, 0xb227, 0xa088, 0xb0e0, 0xb21c, 0xafc4, 0xbace, 0x40a2, 0x100d, 0x405d, 0x135d, 0x4045, 0x054f, 0x430c, 0x415c, 0x3b73, 0x1c6b, 0x0905, 0x4213, 0x4471, 0xa947, 0xb269, 0xbf77, 0xba2b, 0x42c8, 0x119f, 0x1d18, 0x4031, 0x4657, 0x4240, 0x4147, 0x4191, 0x44ad, 0x410b, 0xbad7, 0x40d8, 0xa692, 0x1bd6, 0x4137, 0xb05c, 0x4204, 0xbf72, 0x22bb, 0xa447, 0x1ec3, 0xb07f, 0xbfd0, 0x438d, 0x4220, 0xbf4a, 0x40eb, 0x42f2, 0x2d2f, 0x40e1, 0xa238, 0x41fa, 0xb24e, 0xb2e5, 0xbfa0, 0x441c, 0xb056, 0x4365, 0x1cca, 0x1a9a, 0x4346, 0x2fbc, 0x4222, 0xb2c2, 0xbfda, 0x416c, 0xbfe0, 0xba4f, 0x40e8, 0x4386, 0xbfc0, 0x06e0, 0x4370, 0x419e, 0x3b0e, 0xae3e, 0x413b, 0xb0b1, 0xb02f, 0x1f7c, 0x377d, 0xbac4, 0x45d2, 0xb25d, 0x0d8c, 0x46c4, 0x4304, 0xa6dd, 0x1a5d, 0x4050, 0x410c, 0x4269, 0xb284, 0xbf2d, 0x414f, 0x044d, 0xba0a, 0x19a1, 0x4107, 0x4273, 0xbafa, 0xb222, 0x42ba, 0x45c0, 0x408b, 0x4081, 0x4102, 0x070a, 0xb2eb, 0xb056, 0x385b, 0x1b53, 0x046b, 0xba7b, 0x41a3, 0xbaf9, 0x4553, 0x313a, 0xb028, 0xbf42, 0x418c, 0x05c5, 0x4161, 0xa924, 0x4026, 0xba41, 0x40a4, 0x4285, 0x3ff7, 0x1c6a, 0xb207, 0x42ae, 0x4371, 0x116e, 0xbf35, 0x1d23, 0x429f, 0x1a06, 0x44fb, 0xb2ac, 0x40d4, 0x46e5, 0x403e, 0x4387, 0xb099, 0x4109, 0x40d0, 0x2f0a, 0x38cd, 0x02a6, 0xbf38, 0x46ac, 0x30d9, 0x087d, 0xb27b, 0x41ff, 0x1537, 0x4101, 0xba15, 0xb294, 0x41d6, 0x2af8, 0xba0e, 0x41d9, 0x3f8b, 0xba63, 0xb238, 0x4003, 0x1c25, 0x41c7, 0x43a7, 0x0ad6, 0xbf2b, 0x1ee5, 0xb2c4, 0xa57f, 0xb06e, 0x1e2e, 0x4039, 0x409b, 0x4102, 0x416d, 0xa855, 0xb235, 0x3847, 0xa008, 0x4411, 0xb26a, 0xa9fe, 0xbfd7, 0x41d7, 0xbf70, 0xbae6, 0xba06, 0x35df, 0xb219, 0x2f49, 0xb0cd, 0x35d3, 0xb0ca, 0x4383, 0xb233, 0x4381, 0x3a8f, 0x460c, 0x1df7, 0x0edb, 0x43d4, 0x1a05, 0x1318, 0xbac2, 0xb2b9, 0xb2d1, 0x4230, 0xbf3e, 0x422d, 0xb213, 0xb061, 0xa09a, 0x4057, 0x4077, 0x426c, 0x0376, 0x42a5, 0x19c9, 0xbf1d, 0x422d, 0xb2f2, 0xb04b, 0x41a5, 0x410e, 0xb2ac, 0x0819, 0x415b, 0x3316, 0x4314, 0x1fd3, 0xb075, 0xbfb3, 0xb08b, 0xa994, 0xbf80, 0xbae1, 0x40b4, 0xbfb8, 0x409d, 0x01ee, 0x43ec, 0x09d0, 0x2384, 0x4183, 0x416b, 0x411d, 0xbf78, 0xba54, 0xba72, 0x4397, 0x1eb9, 0x1efa, 0xb2ec, 0x183e, 0x18e1, 0x0a6c, 0x42c6, 0x232a, 0xba57, 0xbff0, 0x41f5, 0x42c9, 0x3b22, 0x421f, 0xb294, 0xb277, 0xa937, 0xbf8e, 0x462f, 0x20b5, 0x2e40, 0x4306, 0x43f1, 0x036f, 0xa324, 0xbf23, 0x3670, 0xba5c, 0x4050, 0x0906, 0x4389, 0x4684, 0x40b0, 0x3eb0, 0x1f2e, 0x1aba, 0x1963, 0x4145, 0x122d, 0xb2c1, 0x4555, 0x403d, 0xb28b, 0x4252, 0x1a41, 0x4077, 0x434f, 0x4459, 0x4360, 0xbf22, 0x1b7f, 0xb24e, 0x1433, 0x40b1, 0x41a3, 0xb2cd, 0xb021, 0x4251, 0x42e3, 0xb0b5, 0xb2d0, 0xbf55, 0xa034, 0x41e3, 0x05fb, 0x4067, 0x41c2, 0x4059, 0x40ea, 0x3288, 0x4328, 0x4268, 0xbf2d, 0xb05b, 0xb234, 0x4220, 0xba68, 0xbfc0, 0x42e8, 0x406d, 0x4371, 0x12db, 0x4157, 0x448c, 0x162f, 0x3d79, 0x4190, 0x4050, 0x0c23, 0x2cef, 0x415b, 0xbaf1, 0x4005, 0xbf57, 0x404d, 0x214b, 0xa974, 0x404c, 0x40cb, 0x03ca, 0x1675, 0x36c7, 0xbfda, 0xaecc, 0x4576, 0x2c9c, 0xa7ec, 0x423e, 0x1d8c, 0x4172, 0x437a, 0x0b36, 0xa6b8, 0x4160, 0x4648, 0x45c4, 0x1d48, 0x1cfb, 0xa650, 0x4265, 0xb2b3, 0x414c, 0x443a, 0x4378, 0xba29, 0x464e, 0x1d73, 0xbfa7, 0x121c, 0x2eb2, 0xba30, 0xb0e6, 0x40d8, 0x4108, 0xbf70, 0xbad4, 0xb27e, 0xbaca, 0x4694, 0x320f, 0x1605, 0xba48, 0xafdb, 0x41e1, 0x4095, 0x3649, 0x00ef, 0xbf25, 0x4233, 0x4226, 0x4390, 0x46b8, 0x4231, 0x43d0, 0x45d2, 0x42d7, 0x3871, 0x1a1d, 0x1d3e, 0xbad1, 0x418b, 0xb072, 0x1843, 0xb215, 0x1ae0, 0x0898, 0x4106, 0x41a2, 0xba0a, 0xbf43, 0x41c9, 0x4022, 0xa59a, 0xb035, 0x4549, 0xbfa7, 0x441f, 0x4167, 0x3b3a, 0x1bd7, 0xbf75, 0x3d63, 0x1bba, 0xb2ae, 0x401b, 0x0e2e, 0x42cd, 0x1ccd, 0x4028, 0xba22, 0x4343, 0x3458, 0x2dd4, 0xa814, 0x1985, 0x469a, 0x43c1, 0x4562, 0x444c, 0x19b5, 0x42ab, 0xbf7a, 0xb2a1, 0x4394, 0x4008, 0x0f19, 0xbae8, 0xb266, 0x4141, 0xae9b, 0x4349, 0x45ad, 0x1af6, 0x40c0, 0x40a2, 0xba1a, 0x439b, 0x1fb8, 0x11da, 0xa672, 0xb2d0, 0x4223, 0x449d, 0x431d, 0x42e8, 0x45ec, 0x18d7, 0xbf5e, 0x41df, 0xba7f, 0x423b, 0xa7ae, 0x28f4, 0x414b, 0x43fa, 0xb216, 0x190b, 0xa562, 0x4391, 0xb252, 0x03f3, 0xbac0, 0x40fe, 0x2da8, 0x4449, 0x0adc, 0x4103, 0xb0dd, 0x403f, 0x34fa, 0xbf00, 0x45a6, 0x4357, 0xbf8a, 0xb2a2, 0x4109, 0xadc3, 0x407b, 0x40ac, 0xb227, 0x41fa, 0xaccd, 0x46a8, 0x40fa, 0x1f95, 0xb069, 0x444a, 0x4037, 0xb230, 0x419b, 0x1426, 0x424d, 0xb05f, 0x107b, 0x4055, 0x3be8, 0x0e2b, 0xb0f2, 0x1793, 0x46cb, 0x1fe7, 0xbfc6, 0x4300, 0x1e82, 0x43cc, 0x34b4, 0x173b, 0xb290, 0x36a7, 0x4348, 0x0f9f, 0xba7e, 0x0bef, 0xb22d, 0x42bf, 0x4541, 0xbf70, 0x4193, 0xbff0, 0xb0f2, 0x4420, 0xb01f, 0x41b7, 0x4251, 0x4301, 0xbf0e, 0xbad0, 0xbafe, 0x1f39, 0x2717, 0x4651, 0x1858, 0xb0e6, 0xbf88, 0x0dc3, 0x162d, 0x1947, 0xb24e, 0x24fa, 0xba59, 0x18a4, 0x42f6, 0x4018, 0x42a2, 0x407c, 0x42c6, 0x30d6, 0x4299, 0xb081, 0x4288, 0x41f8, 0x01b4, 0xb00a, 0xb26d, 0x436c, 0xbf0c, 0xb27d, 0xb2a6, 0x45ae, 0x04d9, 0xa8af, 0xb050, 0xbf61, 0x3332, 0x27cd, 0x0c39, 0xb28b, 0xb0e7, 0x2bfa, 0x4231, 0x43cc, 0x4387, 0x1d3e, 0x2fcc, 0x0863, 0x43eb, 0xba00, 0x41bd, 0x4139, 0xbf80, 0x1a3d, 0xba4b, 0x1a7f, 0x41d5, 0x4695, 0x41eb, 0x4003, 0x4457, 0x4312, 0x3a69, 0xb253, 0xbf68, 0x4143, 0xba2f, 0xbaf5, 0xb2e5, 0xbf00, 0x0f33, 0x418a, 0xb254, 0xbf3a, 0xba72, 0x404a, 0xb297, 0xbf46, 0x4645, 0x41e7, 0x4320, 0x1a06, 0x44e0, 0x3e22, 0x41d4, 0xbaf8, 0x4226, 0x41a5, 0x4291, 0xbae8, 0xbaf5, 0x4199, 0x45d1, 0xbf0e, 0x1f1d, 0x3bb4, 0xba40, 0x0793, 0x4645, 0x0312, 0xb262, 0x41b9, 0xb20f, 0x42e3, 0x4018, 0x4570, 0x10d0, 0x038a, 0x434f, 0xb2d2, 0x4430, 0xa2b1, 0x042c, 0x194b, 0x45db, 0x43b7, 0xbf5e, 0x1b6d, 0xb282, 0x40a5, 0x4076, 0x2065, 0x1c00, 0x462d, 0xaded, 0x3907, 0x1fe4, 0x429a, 0x40bd, 0xba32, 0x43b0, 0x1b1d, 0x43ef, 0x41c0, 0x427a, 0xba34, 0xba7b, 0x2307, 0x008d, 0x46c3, 0x4373, 0x40f3, 0xbfb9, 0x4169, 0x4135, 0x413f, 0x2474, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x7602de1d, 0x625d8c21, 0x6c16bc87, 0xecb33bf3, 0xf2e0d596, 0x9ed96ef4, 0xc82738a1, 0xf563157e, 0x31d024d5, 0x481b545e, 0xbb853a8f, 0x828b1a9a, 0x77119f7e, 0x41a530b7, 0x00000000, 0x300001f0 }, - FinalRegs = new uint[] { 0x28000003, 0xf00ebff8, 0xd843d7d2, 0x00000000, 0x00000074, 0xc03affe0, 0x00000000, 0x00000000, 0x000017cb, 0xffffffae, 0x001b0000, 0x000017cb, 0xffffffff, 0xfffffffe, 0x00000000, 0x600001d0 }, + Instructions = [0x30ba, 0x3e17, 0xb2b6, 0x0e7a, 0x1ad3, 0x16d7, 0x3d09, 0xb2d4, 0x4149, 0x4388, 0xbf70, 0x403e, 0x4081, 0x2f93, 0xb263, 0x421d, 0x4136, 0x1fbc, 0xbadd, 0x42e0, 0x41df, 0x42f2, 0xb2ac, 0x4188, 0x1f29, 0xbf0c, 0x46e4, 0x0f06, 0x4220, 0xb090, 0xb2be, 0xa4e6, 0x4047, 0xbfe0, 0x465b, 0x3199, 0x4216, 0x1b5d, 0x0645, 0xb04b, 0x1ae2, 0xaec8, 0x1942, 0x4225, 0x4214, 0x3aa9, 0xba12, 0x41b2, 0x30a1, 0xb27b, 0xba72, 0xba69, 0x15c8, 0xbfdd, 0xb204, 0x427c, 0x42e0, 0xb260, 0x4169, 0xa447, 0xb204, 0x424e, 0x465d, 0x3fce, 0xabb3, 0x43f3, 0xba44, 0x418d, 0x42b9, 0xb045, 0x20a4, 0xb285, 0xb2c1, 0x424d, 0x0575, 0xb081, 0x0475, 0xb273, 0x43db, 0x4297, 0xbf16, 0x41d7, 0x1b1c, 0x1a44, 0x4220, 0x29a3, 0x4069, 0x4143, 0x464e, 0xb2e9, 0x4120, 0xb28b, 0xacb2, 0xac86, 0x2c6e, 0x43c5, 0x42d4, 0x42e7, 0xbf15, 0x1c4d, 0x41a9, 0x4300, 0x401c, 0x32f0, 0x431e, 0x4117, 0x43f3, 0xb041, 0x02d0, 0x443d, 0xbfc9, 0xb292, 0x436c, 0xb236, 0xb022, 0xb023, 0x430b, 0xbfc0, 0x4318, 0x456a, 0x2809, 0x4006, 0x432a, 0xba3e, 0x4396, 0x406b, 0xbf16, 0xba55, 0x4163, 0x4279, 0x035d, 0x4380, 0x4078, 0x1ccc, 0xba46, 0x4064, 0xb21a, 0x0727, 0x1a5e, 0xba7f, 0xa4ed, 0xbac7, 0x0244, 0xb26b, 0x23f1, 0x3321, 0xa490, 0x4284, 0xba64, 0xa24a, 0x4057, 0xbaff, 0x1877, 0x417c, 0x0d9c, 0xbf9c, 0x1c58, 0x42c3, 0x1c7f, 0xba5f, 0x0daa, 0x42d8, 0x41be, 0x40d2, 0x4298, 0x4118, 0x4085, 0x4353, 0xbf06, 0x402f, 0xb0fc, 0x45ab, 0x41da, 0x11d6, 0xbf04, 0xb025, 0x40a2, 0xb26c, 0x40ae, 0x40c5, 0x08ba, 0xb227, 0x4356, 0x423b, 0xb20c, 0x230b, 0x40e1, 0xb0fa, 0x4013, 0x14bd, 0x43de, 0x3daf, 0x0368, 0x407f, 0xb298, 0x41f8, 0x43de, 0x4048, 0x18a4, 0x08f7, 0x42b9, 0x41a8, 0xbf33, 0x404f, 0x4174, 0x4261, 0x43f1, 0x1609, 0x4281, 0x00ee, 0x4291, 0x43b1, 0x359a, 0xb0d0, 0xb09f, 0x40fe, 0xb2b5, 0x4466, 0xb050, 0xb25c, 0xba0b, 0xb03a, 0x04a6, 0xb247, 0x4390, 0xb291, 0x4198, 0xb02a, 0x421f, 0x40b3, 0xbf7d, 0x41f6, 0x23ee, 0x329a, 0x43d2, 0x421c, 0x4199, 0xb253, 0xb0c6, 0x3180, 0xb0b7, 0x43a0, 0xbfbf, 0x43e6, 0x1e76, 0x157f, 0x3290, 0x1952, 0x428a, 0x1b3f, 0x05ce, 0x0e2e, 0xb0bf, 0xb264, 0x41a3, 0x0a74, 0x4181, 0x4112, 0x3e9f, 0x42c4, 0x4214, 0x46b9, 0x1a96, 0xbf0f, 0xa787, 0x42fb, 0xb008, 0x40a0, 0x2262, 0xb261, 0x26a5, 0xa01b, 0x01fa, 0x40a4, 0xba0f, 0xa676, 0xb26b, 0xb262, 0xba1f, 0x4075, 0xbfc2, 0x415d, 0xb095, 0x1ead, 0x410a, 0x4328, 0x0c46, 0xb2e9, 0x430f, 0xb274, 0x415d, 0x420f, 0x197b, 0x46fb, 0x125d, 0x43ca, 0xa547, 0x4064, 0x425e, 0xbf2f, 0xb036, 0xb292, 0x40e9, 0x3d9e, 0xb227, 0xa088, 0xb0e0, 0xb21c, 0xafc4, 0xbace, 0x40a2, 0x100d, 0x405d, 0x135d, 0x4045, 0x054f, 0x430c, 0x415c, 0x3b73, 0x1c6b, 0x0905, 0x4213, 0x4471, 0xa947, 0xb269, 0xbf77, 0xba2b, 0x42c8, 0x119f, 0x1d18, 0x4031, 0x4657, 0x4240, 0x4147, 0x4191, 0x44ad, 0x410b, 0xbad7, 0x40d8, 0xa692, 0x1bd6, 0x4137, 0xb05c, 0x4204, 0xbf72, 0x22bb, 0xa447, 0x1ec3, 0xb07f, 0xbfd0, 0x438d, 0x4220, 0xbf4a, 0x40eb, 0x42f2, 0x2d2f, 0x40e1, 0xa238, 0x41fa, 0xb24e, 0xb2e5, 0xbfa0, 0x441c, 0xb056, 0x4365, 0x1cca, 0x1a9a, 0x4346, 0x2fbc, 0x4222, 0xb2c2, 0xbfda, 0x416c, 0xbfe0, 0xba4f, 0x40e8, 0x4386, 0xbfc0, 0x06e0, 0x4370, 0x419e, 0x3b0e, 0xae3e, 0x413b, 0xb0b1, 0xb02f, 0x1f7c, 0x377d, 0xbac4, 0x45d2, 0xb25d, 0x0d8c, 0x46c4, 0x4304, 0xa6dd, 0x1a5d, 0x4050, 0x410c, 0x4269, 0xb284, 0xbf2d, 0x414f, 0x044d, 0xba0a, 0x19a1, 0x4107, 0x4273, 0xbafa, 0xb222, 0x42ba, 0x45c0, 0x408b, 0x4081, 0x4102, 0x070a, 0xb2eb, 0xb056, 0x385b, 0x1b53, 0x046b, 0xba7b, 0x41a3, 0xbaf9, 0x4553, 0x313a, 0xb028, 0xbf42, 0x418c, 0x05c5, 0x4161, 0xa924, 0x4026, 0xba41, 0x40a4, 0x4285, 0x3ff7, 0x1c6a, 0xb207, 0x42ae, 0x4371, 0x116e, 0xbf35, 0x1d23, 0x429f, 0x1a06, 0x44fb, 0xb2ac, 0x40d4, 0x46e5, 0x403e, 0x4387, 0xb099, 0x4109, 0x40d0, 0x2f0a, 0x38cd, 0x02a6, 0xbf38, 0x46ac, 0x30d9, 0x087d, 0xb27b, 0x41ff, 0x1537, 0x4101, 0xba15, 0xb294, 0x41d6, 0x2af8, 0xba0e, 0x41d9, 0x3f8b, 0xba63, 0xb238, 0x4003, 0x1c25, 0x41c7, 0x43a7, 0x0ad6, 0xbf2b, 0x1ee5, 0xb2c4, 0xa57f, 0xb06e, 0x1e2e, 0x4039, 0x409b, 0x4102, 0x416d, 0xa855, 0xb235, 0x3847, 0xa008, 0x4411, 0xb26a, 0xa9fe, 0xbfd7, 0x41d7, 0xbf70, 0xbae6, 0xba06, 0x35df, 0xb219, 0x2f49, 0xb0cd, 0x35d3, 0xb0ca, 0x4383, 0xb233, 0x4381, 0x3a8f, 0x460c, 0x1df7, 0x0edb, 0x43d4, 0x1a05, 0x1318, 0xbac2, 0xb2b9, 0xb2d1, 0x4230, 0xbf3e, 0x422d, 0xb213, 0xb061, 0xa09a, 0x4057, 0x4077, 0x426c, 0x0376, 0x42a5, 0x19c9, 0xbf1d, 0x422d, 0xb2f2, 0xb04b, 0x41a5, 0x410e, 0xb2ac, 0x0819, 0x415b, 0x3316, 0x4314, 0x1fd3, 0xb075, 0xbfb3, 0xb08b, 0xa994, 0xbf80, 0xbae1, 0x40b4, 0xbfb8, 0x409d, 0x01ee, 0x43ec, 0x09d0, 0x2384, 0x4183, 0x416b, 0x411d, 0xbf78, 0xba54, 0xba72, 0x4397, 0x1eb9, 0x1efa, 0xb2ec, 0x183e, 0x18e1, 0x0a6c, 0x42c6, 0x232a, 0xba57, 0xbff0, 0x41f5, 0x42c9, 0x3b22, 0x421f, 0xb294, 0xb277, 0xa937, 0xbf8e, 0x462f, 0x20b5, 0x2e40, 0x4306, 0x43f1, 0x036f, 0xa324, 0xbf23, 0x3670, 0xba5c, 0x4050, 0x0906, 0x4389, 0x4684, 0x40b0, 0x3eb0, 0x1f2e, 0x1aba, 0x1963, 0x4145, 0x122d, 0xb2c1, 0x4555, 0x403d, 0xb28b, 0x4252, 0x1a41, 0x4077, 0x434f, 0x4459, 0x4360, 0xbf22, 0x1b7f, 0xb24e, 0x1433, 0x40b1, 0x41a3, 0xb2cd, 0xb021, 0x4251, 0x42e3, 0xb0b5, 0xb2d0, 0xbf55, 0xa034, 0x41e3, 0x05fb, 0x4067, 0x41c2, 0x4059, 0x40ea, 0x3288, 0x4328, 0x4268, 0xbf2d, 0xb05b, 0xb234, 0x4220, 0xba68, 0xbfc0, 0x42e8, 0x406d, 0x4371, 0x12db, 0x4157, 0x448c, 0x162f, 0x3d79, 0x4190, 0x4050, 0x0c23, 0x2cef, 0x415b, 0xbaf1, 0x4005, 0xbf57, 0x404d, 0x214b, 0xa974, 0x404c, 0x40cb, 0x03ca, 0x1675, 0x36c7, 0xbfda, 0xaecc, 0x4576, 0x2c9c, 0xa7ec, 0x423e, 0x1d8c, 0x4172, 0x437a, 0x0b36, 0xa6b8, 0x4160, 0x4648, 0x45c4, 0x1d48, 0x1cfb, 0xa650, 0x4265, 0xb2b3, 0x414c, 0x443a, 0x4378, 0xba29, 0x464e, 0x1d73, 0xbfa7, 0x121c, 0x2eb2, 0xba30, 0xb0e6, 0x40d8, 0x4108, 0xbf70, 0xbad4, 0xb27e, 0xbaca, 0x4694, 0x320f, 0x1605, 0xba48, 0xafdb, 0x41e1, 0x4095, 0x3649, 0x00ef, 0xbf25, 0x4233, 0x4226, 0x4390, 0x46b8, 0x4231, 0x43d0, 0x45d2, 0x42d7, 0x3871, 0x1a1d, 0x1d3e, 0xbad1, 0x418b, 0xb072, 0x1843, 0xb215, 0x1ae0, 0x0898, 0x4106, 0x41a2, 0xba0a, 0xbf43, 0x41c9, 0x4022, 0xa59a, 0xb035, 0x4549, 0xbfa7, 0x441f, 0x4167, 0x3b3a, 0x1bd7, 0xbf75, 0x3d63, 0x1bba, 0xb2ae, 0x401b, 0x0e2e, 0x42cd, 0x1ccd, 0x4028, 0xba22, 0x4343, 0x3458, 0x2dd4, 0xa814, 0x1985, 0x469a, 0x43c1, 0x4562, 0x444c, 0x19b5, 0x42ab, 0xbf7a, 0xb2a1, 0x4394, 0x4008, 0x0f19, 0xbae8, 0xb266, 0x4141, 0xae9b, 0x4349, 0x45ad, 0x1af6, 0x40c0, 0x40a2, 0xba1a, 0x439b, 0x1fb8, 0x11da, 0xa672, 0xb2d0, 0x4223, 0x449d, 0x431d, 0x42e8, 0x45ec, 0x18d7, 0xbf5e, 0x41df, 0xba7f, 0x423b, 0xa7ae, 0x28f4, 0x414b, 0x43fa, 0xb216, 0x190b, 0xa562, 0x4391, 0xb252, 0x03f3, 0xbac0, 0x40fe, 0x2da8, 0x4449, 0x0adc, 0x4103, 0xb0dd, 0x403f, 0x34fa, 0xbf00, 0x45a6, 0x4357, 0xbf8a, 0xb2a2, 0x4109, 0xadc3, 0x407b, 0x40ac, 0xb227, 0x41fa, 0xaccd, 0x46a8, 0x40fa, 0x1f95, 0xb069, 0x444a, 0x4037, 0xb230, 0x419b, 0x1426, 0x424d, 0xb05f, 0x107b, 0x4055, 0x3be8, 0x0e2b, 0xb0f2, 0x1793, 0x46cb, 0x1fe7, 0xbfc6, 0x4300, 0x1e82, 0x43cc, 0x34b4, 0x173b, 0xb290, 0x36a7, 0x4348, 0x0f9f, 0xba7e, 0x0bef, 0xb22d, 0x42bf, 0x4541, 0xbf70, 0x4193, 0xbff0, 0xb0f2, 0x4420, 0xb01f, 0x41b7, 0x4251, 0x4301, 0xbf0e, 0xbad0, 0xbafe, 0x1f39, 0x2717, 0x4651, 0x1858, 0xb0e6, 0xbf88, 0x0dc3, 0x162d, 0x1947, 0xb24e, 0x24fa, 0xba59, 0x18a4, 0x42f6, 0x4018, 0x42a2, 0x407c, 0x42c6, 0x30d6, 0x4299, 0xb081, 0x4288, 0x41f8, 0x01b4, 0xb00a, 0xb26d, 0x436c, 0xbf0c, 0xb27d, 0xb2a6, 0x45ae, 0x04d9, 0xa8af, 0xb050, 0xbf61, 0x3332, 0x27cd, 0x0c39, 0xb28b, 0xb0e7, 0x2bfa, 0x4231, 0x43cc, 0x4387, 0x1d3e, 0x2fcc, 0x0863, 0x43eb, 0xba00, 0x41bd, 0x4139, 0xbf80, 0x1a3d, 0xba4b, 0x1a7f, 0x41d5, 0x4695, 0x41eb, 0x4003, 0x4457, 0x4312, 0x3a69, 0xb253, 0xbf68, 0x4143, 0xba2f, 0xbaf5, 0xb2e5, 0xbf00, 0x0f33, 0x418a, 0xb254, 0xbf3a, 0xba72, 0x404a, 0xb297, 0xbf46, 0x4645, 0x41e7, 0x4320, 0x1a06, 0x44e0, 0x3e22, 0x41d4, 0xbaf8, 0x4226, 0x41a5, 0x4291, 0xbae8, 0xbaf5, 0x4199, 0x45d1, 0xbf0e, 0x1f1d, 0x3bb4, 0xba40, 0x0793, 0x4645, 0x0312, 0xb262, 0x41b9, 0xb20f, 0x42e3, 0x4018, 0x4570, 0x10d0, 0x038a, 0x434f, 0xb2d2, 0x4430, 0xa2b1, 0x042c, 0x194b, 0x45db, 0x43b7, 0xbf5e, 0x1b6d, 0xb282, 0x40a5, 0x4076, 0x2065, 0x1c00, 0x462d, 0xaded, 0x3907, 0x1fe4, 0x429a, 0x40bd, 0xba32, 0x43b0, 0x1b1d, 0x43ef, 0x41c0, 0x427a, 0xba34, 0xba7b, 0x2307, 0x008d, 0x46c3, 0x4373, 0x40f3, 0xbfb9, 0x4169, 0x4135, 0x413f, 0x2474, 0x4770, 0xe7fe + ], + StartRegs = [0x7602de1d, 0x625d8c21, 0x6c16bc87, 0xecb33bf3, 0xf2e0d596, 0x9ed96ef4, 0xc82738a1, 0xf563157e, 0x31d024d5, 0x481b545e, 0xbb853a8f, 0x828b1a9a, 0x77119f7e, 0x41a530b7, 0x00000000, 0x300001f0 + ], + FinalRegs = [0x28000003, 0xf00ebff8, 0xd843d7d2, 0x00000000, 0x00000074, 0xc03affe0, 0x00000000, 0x00000000, 0x000017cb, 0xffffffae, 0x001b0000, 0x000017cb, 0xffffffff, 0xfffffffe, 0x00000000, 0x600001d0 + ], }, new() { - Instructions = new ushort[] { 0x183a, 0xb2ba, 0xbff0, 0x4236, 0x4329, 0x416b, 0xb0ab, 0xbfc0, 0x461c, 0x1cc6, 0x438a, 0x1dfb, 0x43ef, 0x1b4e, 0xbaee, 0x36a4, 0xb2e2, 0x4169, 0xb048, 0x1d98, 0xa51c, 0x40cc, 0x4332, 0x42e2, 0xbf01, 0xa8ff, 0xb2c5, 0x4322, 0xba13, 0xb017, 0x278e, 0xba57, 0x43ca, 0x4097, 0xb239, 0x41e7, 0x43df, 0x1fe8, 0x4152, 0x34e7, 0xba3e, 0xb211, 0x41ce, 0xb229, 0x4194, 0xbfc8, 0x1c04, 0x403a, 0x43d2, 0xbf41, 0x434d, 0xba36, 0xba4f, 0x40f1, 0x12a2, 0xb2a6, 0x0ba3, 0x1430, 0xb2cf, 0xaf47, 0x4380, 0x215d, 0x18bc, 0xb0ff, 0x4088, 0x41b3, 0x4131, 0xb0ae, 0x1cf1, 0xbfdd, 0x42f0, 0xb2a4, 0x4245, 0x43dc, 0x19b7, 0x4322, 0xba58, 0x1c79, 0x4387, 0x4596, 0x1ece, 0x41fc, 0xbf01, 0x092d, 0xb016, 0x40d1, 0xbad3, 0xb2bf, 0x40a6, 0x4247, 0x402f, 0xa9b7, 0xb244, 0x19fa, 0x4244, 0x1b06, 0x18ef, 0x4181, 0x144c, 0x18b1, 0x4197, 0x4123, 0x3a3e, 0xb204, 0xbfbe, 0xbaea, 0x1c38, 0x436a, 0x2039, 0x1ccf, 0xaff3, 0x1847, 0xaecc, 0xb292, 0xb20f, 0x1f5a, 0xb2f2, 0x4183, 0x4004, 0x43b8, 0xab48, 0x43f9, 0x4234, 0x0ca8, 0x3607, 0x4118, 0x4206, 0xbfbe, 0x4073, 0x4688, 0x391a, 0x40b5, 0xba2f, 0xbf00, 0x3d16, 0x1b41, 0x421c, 0x434a, 0x413c, 0x405c, 0x41d8, 0x4375, 0x415c, 0x101b, 0x4540, 0x42ce, 0xb0aa, 0xbf9e, 0x42d0, 0x4215, 0x2cc7, 0x43db, 0xb23e, 0x2a9f, 0x461e, 0xbacf, 0x4344, 0xb2dd, 0x41d1, 0x4233, 0x2398, 0xa583, 0xb09d, 0xa90c, 0x3974, 0x407f, 0x41fe, 0xb03d, 0xb08a, 0x4283, 0x429a, 0x1730, 0x2b83, 0x414d, 0x3df6, 0x41ed, 0xbf0e, 0x19fd, 0x178e, 0x4158, 0xba46, 0x418b, 0x1030, 0xb033, 0x405b, 0x1e2f, 0x4063, 0xbfca, 0xbaf3, 0xb21d, 0x43dc, 0x412f, 0x42f0, 0xba72, 0xb040, 0x426e, 0x3339, 0xba6f, 0x10b4, 0x466c, 0x426b, 0xb276, 0x26bb, 0x42ea, 0x1338, 0x41f2, 0x4252, 0x41a3, 0x3467, 0x445c, 0x1034, 0x4577, 0x4277, 0x446c, 0x1933, 0x4032, 0xbfc6, 0x469c, 0xba1b, 0x2658, 0x4049, 0xb24d, 0x43ae, 0x42c8, 0x4316, 0x40cc, 0xb22b, 0xbf60, 0x3670, 0xba72, 0xb0e2, 0x40b8, 0xba6b, 0xb214, 0xbfd1, 0x428b, 0x1876, 0x1f3a, 0xb06f, 0x435e, 0x447a, 0x427d, 0xba75, 0xa04f, 0xaaee, 0x4222, 0x194f, 0x2702, 0xb05d, 0x015b, 0x4129, 0x425b, 0x4275, 0xaced, 0xb228, 0x04a5, 0x0d2c, 0x4140, 0xa285, 0xbfb3, 0x4208, 0x42c9, 0x380a, 0xbad3, 0x41c1, 0x4290, 0x4294, 0xba2b, 0xba5a, 0xbaed, 0x1fef, 0x4548, 0xb209, 0x43fd, 0x4233, 0xb0dd, 0xbff0, 0x418f, 0x4132, 0x4081, 0xae38, 0xb0e6, 0x4343, 0x427b, 0x1b87, 0xbf3c, 0xb051, 0x296c, 0xba3f, 0xa2de, 0xbf89, 0x4031, 0x1e9c, 0x429e, 0xb085, 0xbf90, 0x11c4, 0x40dc, 0x1dc6, 0x1d74, 0x4331, 0x4014, 0xb29f, 0x3445, 0x14a4, 0x4216, 0xbf51, 0x40f2, 0x4303, 0x4592, 0x42e2, 0x2058, 0xb296, 0xbfbc, 0xbfa0, 0x42d4, 0xbac6, 0x0f05, 0x4584, 0xba26, 0x4059, 0x26b3, 0x419d, 0xb2ac, 0x4261, 0xb200, 0x4201, 0x41cf, 0x4148, 0x4101, 0x43b7, 0xbf6f, 0x1c26, 0xb2f8, 0x426c, 0x1cce, 0x4438, 0xbaf2, 0x193a, 0x44d3, 0x1bf6, 0xba76, 0x39d2, 0x1223, 0x4243, 0xae1b, 0x405d, 0x40a8, 0x187c, 0x420f, 0xb226, 0xb050, 0x41ea, 0x418d, 0x42c6, 0xbf54, 0xa0f9, 0x38d5, 0x185c, 0x432a, 0xbfb4, 0xb2c7, 0x11a8, 0xb277, 0x4201, 0x41ab, 0xbf27, 0xb2ac, 0x1ab3, 0x3b89, 0x40f5, 0x2c46, 0x42ea, 0x43f4, 0x16c3, 0x4264, 0x3e2e, 0x4258, 0x4111, 0x40af, 0x01fe, 0x40b5, 0x0924, 0x1cb3, 0xba0f, 0xa039, 0x32d7, 0xbf80, 0x0949, 0x1bbe, 0xba79, 0xba3e, 0x41da, 0x4395, 0x4408, 0x18e5, 0xbf9e, 0x1ef5, 0x2b17, 0xa1b6, 0x1cb7, 0x42bb, 0x3992, 0x4109, 0x419c, 0x4445, 0x41d9, 0xbafc, 0x412d, 0x01bc, 0x4433, 0x434c, 0xba5a, 0xb207, 0xa3d7, 0xb090, 0x43bb, 0x42b1, 0xbfd7, 0x42e9, 0x4025, 0x331b, 0xad80, 0x41be, 0x430b, 0xb0c8, 0xbacd, 0x3b83, 0x1eca, 0xb073, 0x417d, 0x421a, 0x2cbc, 0x460d, 0xb224, 0x0041, 0xbfd0, 0xba2c, 0xb0d7, 0x42aa, 0x4360, 0xb239, 0xbf13, 0x4232, 0x43dc, 0x1d4d, 0x4172, 0x432f, 0xb217, 0x4014, 0xaf57, 0xb269, 0x4214, 0x401f, 0x4615, 0xba6d, 0x45f5, 0x3366, 0xba10, 0x41a7, 0x4320, 0x433c, 0x41aa, 0x4447, 0x43c4, 0x06b7, 0xbf13, 0x421a, 0x431e, 0x4337, 0xba43, 0x403e, 0xb281, 0x0bbe, 0x41ee, 0xa920, 0x4234, 0xb2f2, 0x43f3, 0x35f2, 0x41aa, 0xb247, 0x378e, 0xb214, 0x3c80, 0xba55, 0xb2fc, 0xb2ea, 0x402b, 0xb2bd, 0x4004, 0x4434, 0x443b, 0x0d49, 0xbfc5, 0x2a68, 0x4333, 0x4616, 0x421e, 0xb2b9, 0x4359, 0x43f8, 0x421a, 0x41bd, 0x16fe, 0xa8e2, 0xb25a, 0x435a, 0xb0d4, 0x416b, 0x1ea0, 0x4035, 0xb0ff, 0x4280, 0x31ab, 0xbf0c, 0x4043, 0x1d5c, 0xb01e, 0x414d, 0x43d1, 0x4283, 0x4008, 0x35e1, 0xb2c5, 0x4080, 0x26fa, 0x35a4, 0x2fee, 0xae2d, 0xbf94, 0x332b, 0x1c4b, 0xb234, 0xba72, 0x1f99, 0x4375, 0xb09b, 0xbfb1, 0x23e8, 0x1a82, 0xbad3, 0x4229, 0x40fa, 0x4271, 0x4454, 0x3f9c, 0xbf7f, 0x43dd, 0x43cf, 0x4051, 0x3ddd, 0x201d, 0xb293, 0xb260, 0xba02, 0x0725, 0x434e, 0x46b5, 0x46e9, 0x1748, 0x428b, 0xbac6, 0xb0b7, 0x41c3, 0xbaf9, 0xbf96, 0xb26d, 0x40bf, 0x1c2a, 0x41ee, 0x3251, 0x402b, 0x436d, 0xb012, 0x28c6, 0x3e10, 0x4472, 0xb064, 0x4254, 0x4008, 0x4326, 0x4187, 0x04fd, 0xb0f8, 0x4656, 0x400f, 0x1277, 0x3d1b, 0xba3a, 0x42bf, 0x43f3, 0xbf69, 0x4153, 0x43ad, 0x4695, 0x0135, 0x436b, 0x4167, 0xba22, 0xa2a9, 0x42f8, 0xbf0e, 0x437a, 0x1d74, 0xb01f, 0x017c, 0x1991, 0x42bc, 0x1faa, 0x43d2, 0x401f, 0xbf35, 0x43fc, 0xa8a4, 0x1b70, 0xb016, 0x0929, 0x2e6b, 0x4325, 0x4558, 0xb05d, 0xbf2e, 0x414c, 0x42cd, 0x4391, 0x433b, 0x4301, 0xbaeb, 0x1b75, 0xbfbb, 0xae43, 0x44aa, 0x41b4, 0x42a7, 0x1b64, 0x18d4, 0x2cac, 0xb222, 0xb2c7, 0x42c9, 0xbf90, 0xa53a, 0xbad0, 0x41b7, 0xb099, 0x46e3, 0xba47, 0x438d, 0x4244, 0xb0b5, 0x20f6, 0x456b, 0x433d, 0x4648, 0xba3f, 0x3fc9, 0xbf31, 0x194d, 0xac62, 0x42bb, 0x4315, 0x40ce, 0xaedd, 0xad17, 0x4026, 0x1270, 0xb0b2, 0x17c4, 0x1fbc, 0x417c, 0x1a36, 0x3eb7, 0xb004, 0xb03e, 0x4163, 0xba06, 0x424b, 0x43b4, 0xa91d, 0x4127, 0xb016, 0x4041, 0xb2db, 0x1abd, 0x2772, 0xbf2b, 0x410c, 0x1bc0, 0xbae4, 0x407f, 0x412b, 0x1900, 0x410f, 0x4255, 0xba25, 0x464a, 0xbf02, 0xbad9, 0x418a, 0x431a, 0xbad0, 0xb0b3, 0x4379, 0x442d, 0x4104, 0x13b2, 0x1b63, 0xbfc0, 0x1a55, 0x4271, 0x1d04, 0xb009, 0x42bd, 0x405c, 0x4175, 0xb268, 0x437d, 0xbfa3, 0x3b47, 0xbaec, 0xbae7, 0x0eca, 0xb275, 0x42d0, 0xb24a, 0x4369, 0x404d, 0x086e, 0x409c, 0x418f, 0x45b8, 0x3e1e, 0xbf81, 0x1f68, 0x435e, 0xba1b, 0x43b7, 0x40b5, 0x4064, 0x14b1, 0x13ed, 0x1849, 0xbfc9, 0xb05d, 0x40c3, 0x3623, 0xb2a0, 0x184d, 0x411c, 0x417e, 0xbf7a, 0x46e8, 0x41dc, 0x4329, 0x1cd8, 0xa148, 0xb0f5, 0x2e2a, 0x414d, 0x19ce, 0x41ee, 0x44cd, 0xa6a0, 0x412f, 0x4374, 0x43b9, 0xb06e, 0x1b62, 0x3bb0, 0x4336, 0x2103, 0xbf1f, 0x4291, 0xbadc, 0x4282, 0x4122, 0xab33, 0x4368, 0xbfb0, 0xbaf9, 0xb25f, 0xb0b5, 0xba09, 0xb271, 0x23c2, 0x4565, 0xa12c, 0xb24f, 0xbf3b, 0x2a8a, 0xa3fe, 0x09ff, 0xb288, 0x42b8, 0x40c4, 0xbac9, 0xba34, 0x425a, 0xba04, 0x42be, 0x0208, 0xb003, 0x29cc, 0xb23d, 0xa865, 0x4086, 0x2faa, 0xb0ab, 0xb0a2, 0xbfbb, 0x1955, 0x43af, 0xb2ba, 0x4211, 0x2327, 0x1d02, 0x4347, 0xb28d, 0x4126, 0xba03, 0x42f0, 0x4386, 0x4322, 0xa906, 0x0326, 0xba39, 0xba27, 0x1cfb, 0x4270, 0x419b, 0x0e80, 0x4662, 0x4303, 0x2737, 0x427d, 0x1a84, 0xbf7d, 0x4603, 0x1c74, 0xb27a, 0x4170, 0x346b, 0xba00, 0x38f6, 0x2096, 0x41aa, 0x1c51, 0x2ce4, 0xb097, 0x401d, 0xbf97, 0x4132, 0x439f, 0xb2dc, 0x43fc, 0x41a6, 0x1dc0, 0x4377, 0xb2c3, 0x4326, 0x4240, 0x42bd, 0x185d, 0x1a08, 0xba26, 0x4360, 0x4307, 0x093f, 0x23f5, 0x402e, 0x4423, 0x36b8, 0xacdd, 0x16a5, 0x4210, 0x421d, 0x4317, 0x42cb, 0x281f, 0xbf00, 0xbf38, 0x429c, 0x43f5, 0x4342, 0x44e4, 0xb217, 0x1af3, 0x40b5, 0x423f, 0x4095, 0xb0f7, 0x4593, 0xbf82, 0xbae0, 0x4132, 0xae4e, 0x2512, 0x4088, 0x4355, 0x43b2, 0xb24d, 0x3d61, 0x41ed, 0x1134, 0xb252, 0xb26b, 0x2517, 0x431f, 0xaf24, 0x42da, 0xbf31, 0xa58f, 0x3660, 0x227e, 0x43ef, 0x42de, 0x4203, 0x40fc, 0x42b6, 0x4158, 0x37ff, 0x366d, 0x4002, 0x1805, 0x466d, 0xb230, 0x423a, 0xb21e, 0xba0f, 0x41b2, 0xbad7, 0xb25e, 0x1948, 0xb029, 0xbf4b, 0x423f, 0xb2c8, 0xb25f, 0xba2d, 0x46b8, 0xb220, 0xbf60, 0x421e, 0xb20f, 0xba65, 0x4475, 0xbae1, 0x3874, 0x4031, 0xbf84, 0xb2d8, 0xbfe0, 0x2aa6, 0xbfa0, 0x4287, 0x4372, 0xba1e, 0x4250, 0xba77, 0x4619, 0x4098, 0x408f, 0x432d, 0xba12, 0xbfa2, 0x2b04, 0xba75, 0xb04d, 0x4251, 0x40c4, 0x4034, 0xba30, 0xba2a, 0x4010, 0x4139, 0x43ca, 0xba41, 0x18d1, 0x43ed, 0xb2c1, 0x4167, 0x2288, 0xba05, 0xad26, 0x0d4d, 0x4376, 0xbf53, 0x4139, 0xb2e0, 0xba4f, 0x4254, 0xbf98, 0x4331, 0xbf16, 0xa567, 0x420c, 0x081b, 0x1c4e, 0x03c9, 0x4220, 0xb097, 0x0871, 0x43da, 0xb06c, 0x427e, 0xb006, 0x42e0, 0xbf70, 0x42db, 0x06dc, 0x420f, 0x40eb, 0x41a4, 0xbfbc, 0x42d6, 0xb24a, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd3cfc4df, 0x5f6feaeb, 0x1bacfb37, 0xe934848c, 0x07b4b459, 0x8beb3310, 0x3e769455, 0x1dc2cbe1, 0xaa106f96, 0xf071655c, 0xa0cd784c, 0xed40276a, 0xb836b593, 0x485f4321, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x54ca3e07, 0x419af099, 0x485f4374, 0x90be86e8, 0xa9947992, 0x00000000, 0x800001d0 }, + Instructions = [0x183a, 0xb2ba, 0xbff0, 0x4236, 0x4329, 0x416b, 0xb0ab, 0xbfc0, 0x461c, 0x1cc6, 0x438a, 0x1dfb, 0x43ef, 0x1b4e, 0xbaee, 0x36a4, 0xb2e2, 0x4169, 0xb048, 0x1d98, 0xa51c, 0x40cc, 0x4332, 0x42e2, 0xbf01, 0xa8ff, 0xb2c5, 0x4322, 0xba13, 0xb017, 0x278e, 0xba57, 0x43ca, 0x4097, 0xb239, 0x41e7, 0x43df, 0x1fe8, 0x4152, 0x34e7, 0xba3e, 0xb211, 0x41ce, 0xb229, 0x4194, 0xbfc8, 0x1c04, 0x403a, 0x43d2, 0xbf41, 0x434d, 0xba36, 0xba4f, 0x40f1, 0x12a2, 0xb2a6, 0x0ba3, 0x1430, 0xb2cf, 0xaf47, 0x4380, 0x215d, 0x18bc, 0xb0ff, 0x4088, 0x41b3, 0x4131, 0xb0ae, 0x1cf1, 0xbfdd, 0x42f0, 0xb2a4, 0x4245, 0x43dc, 0x19b7, 0x4322, 0xba58, 0x1c79, 0x4387, 0x4596, 0x1ece, 0x41fc, 0xbf01, 0x092d, 0xb016, 0x40d1, 0xbad3, 0xb2bf, 0x40a6, 0x4247, 0x402f, 0xa9b7, 0xb244, 0x19fa, 0x4244, 0x1b06, 0x18ef, 0x4181, 0x144c, 0x18b1, 0x4197, 0x4123, 0x3a3e, 0xb204, 0xbfbe, 0xbaea, 0x1c38, 0x436a, 0x2039, 0x1ccf, 0xaff3, 0x1847, 0xaecc, 0xb292, 0xb20f, 0x1f5a, 0xb2f2, 0x4183, 0x4004, 0x43b8, 0xab48, 0x43f9, 0x4234, 0x0ca8, 0x3607, 0x4118, 0x4206, 0xbfbe, 0x4073, 0x4688, 0x391a, 0x40b5, 0xba2f, 0xbf00, 0x3d16, 0x1b41, 0x421c, 0x434a, 0x413c, 0x405c, 0x41d8, 0x4375, 0x415c, 0x101b, 0x4540, 0x42ce, 0xb0aa, 0xbf9e, 0x42d0, 0x4215, 0x2cc7, 0x43db, 0xb23e, 0x2a9f, 0x461e, 0xbacf, 0x4344, 0xb2dd, 0x41d1, 0x4233, 0x2398, 0xa583, 0xb09d, 0xa90c, 0x3974, 0x407f, 0x41fe, 0xb03d, 0xb08a, 0x4283, 0x429a, 0x1730, 0x2b83, 0x414d, 0x3df6, 0x41ed, 0xbf0e, 0x19fd, 0x178e, 0x4158, 0xba46, 0x418b, 0x1030, 0xb033, 0x405b, 0x1e2f, 0x4063, 0xbfca, 0xbaf3, 0xb21d, 0x43dc, 0x412f, 0x42f0, 0xba72, 0xb040, 0x426e, 0x3339, 0xba6f, 0x10b4, 0x466c, 0x426b, 0xb276, 0x26bb, 0x42ea, 0x1338, 0x41f2, 0x4252, 0x41a3, 0x3467, 0x445c, 0x1034, 0x4577, 0x4277, 0x446c, 0x1933, 0x4032, 0xbfc6, 0x469c, 0xba1b, 0x2658, 0x4049, 0xb24d, 0x43ae, 0x42c8, 0x4316, 0x40cc, 0xb22b, 0xbf60, 0x3670, 0xba72, 0xb0e2, 0x40b8, 0xba6b, 0xb214, 0xbfd1, 0x428b, 0x1876, 0x1f3a, 0xb06f, 0x435e, 0x447a, 0x427d, 0xba75, 0xa04f, 0xaaee, 0x4222, 0x194f, 0x2702, 0xb05d, 0x015b, 0x4129, 0x425b, 0x4275, 0xaced, 0xb228, 0x04a5, 0x0d2c, 0x4140, 0xa285, 0xbfb3, 0x4208, 0x42c9, 0x380a, 0xbad3, 0x41c1, 0x4290, 0x4294, 0xba2b, 0xba5a, 0xbaed, 0x1fef, 0x4548, 0xb209, 0x43fd, 0x4233, 0xb0dd, 0xbff0, 0x418f, 0x4132, 0x4081, 0xae38, 0xb0e6, 0x4343, 0x427b, 0x1b87, 0xbf3c, 0xb051, 0x296c, 0xba3f, 0xa2de, 0xbf89, 0x4031, 0x1e9c, 0x429e, 0xb085, 0xbf90, 0x11c4, 0x40dc, 0x1dc6, 0x1d74, 0x4331, 0x4014, 0xb29f, 0x3445, 0x14a4, 0x4216, 0xbf51, 0x40f2, 0x4303, 0x4592, 0x42e2, 0x2058, 0xb296, 0xbfbc, 0xbfa0, 0x42d4, 0xbac6, 0x0f05, 0x4584, 0xba26, 0x4059, 0x26b3, 0x419d, 0xb2ac, 0x4261, 0xb200, 0x4201, 0x41cf, 0x4148, 0x4101, 0x43b7, 0xbf6f, 0x1c26, 0xb2f8, 0x426c, 0x1cce, 0x4438, 0xbaf2, 0x193a, 0x44d3, 0x1bf6, 0xba76, 0x39d2, 0x1223, 0x4243, 0xae1b, 0x405d, 0x40a8, 0x187c, 0x420f, 0xb226, 0xb050, 0x41ea, 0x418d, 0x42c6, 0xbf54, 0xa0f9, 0x38d5, 0x185c, 0x432a, 0xbfb4, 0xb2c7, 0x11a8, 0xb277, 0x4201, 0x41ab, 0xbf27, 0xb2ac, 0x1ab3, 0x3b89, 0x40f5, 0x2c46, 0x42ea, 0x43f4, 0x16c3, 0x4264, 0x3e2e, 0x4258, 0x4111, 0x40af, 0x01fe, 0x40b5, 0x0924, 0x1cb3, 0xba0f, 0xa039, 0x32d7, 0xbf80, 0x0949, 0x1bbe, 0xba79, 0xba3e, 0x41da, 0x4395, 0x4408, 0x18e5, 0xbf9e, 0x1ef5, 0x2b17, 0xa1b6, 0x1cb7, 0x42bb, 0x3992, 0x4109, 0x419c, 0x4445, 0x41d9, 0xbafc, 0x412d, 0x01bc, 0x4433, 0x434c, 0xba5a, 0xb207, 0xa3d7, 0xb090, 0x43bb, 0x42b1, 0xbfd7, 0x42e9, 0x4025, 0x331b, 0xad80, 0x41be, 0x430b, 0xb0c8, 0xbacd, 0x3b83, 0x1eca, 0xb073, 0x417d, 0x421a, 0x2cbc, 0x460d, 0xb224, 0x0041, 0xbfd0, 0xba2c, 0xb0d7, 0x42aa, 0x4360, 0xb239, 0xbf13, 0x4232, 0x43dc, 0x1d4d, 0x4172, 0x432f, 0xb217, 0x4014, 0xaf57, 0xb269, 0x4214, 0x401f, 0x4615, 0xba6d, 0x45f5, 0x3366, 0xba10, 0x41a7, 0x4320, 0x433c, 0x41aa, 0x4447, 0x43c4, 0x06b7, 0xbf13, 0x421a, 0x431e, 0x4337, 0xba43, 0x403e, 0xb281, 0x0bbe, 0x41ee, 0xa920, 0x4234, 0xb2f2, 0x43f3, 0x35f2, 0x41aa, 0xb247, 0x378e, 0xb214, 0x3c80, 0xba55, 0xb2fc, 0xb2ea, 0x402b, 0xb2bd, 0x4004, 0x4434, 0x443b, 0x0d49, 0xbfc5, 0x2a68, 0x4333, 0x4616, 0x421e, 0xb2b9, 0x4359, 0x43f8, 0x421a, 0x41bd, 0x16fe, 0xa8e2, 0xb25a, 0x435a, 0xb0d4, 0x416b, 0x1ea0, 0x4035, 0xb0ff, 0x4280, 0x31ab, 0xbf0c, 0x4043, 0x1d5c, 0xb01e, 0x414d, 0x43d1, 0x4283, 0x4008, 0x35e1, 0xb2c5, 0x4080, 0x26fa, 0x35a4, 0x2fee, 0xae2d, 0xbf94, 0x332b, 0x1c4b, 0xb234, 0xba72, 0x1f99, 0x4375, 0xb09b, 0xbfb1, 0x23e8, 0x1a82, 0xbad3, 0x4229, 0x40fa, 0x4271, 0x4454, 0x3f9c, 0xbf7f, 0x43dd, 0x43cf, 0x4051, 0x3ddd, 0x201d, 0xb293, 0xb260, 0xba02, 0x0725, 0x434e, 0x46b5, 0x46e9, 0x1748, 0x428b, 0xbac6, 0xb0b7, 0x41c3, 0xbaf9, 0xbf96, 0xb26d, 0x40bf, 0x1c2a, 0x41ee, 0x3251, 0x402b, 0x436d, 0xb012, 0x28c6, 0x3e10, 0x4472, 0xb064, 0x4254, 0x4008, 0x4326, 0x4187, 0x04fd, 0xb0f8, 0x4656, 0x400f, 0x1277, 0x3d1b, 0xba3a, 0x42bf, 0x43f3, 0xbf69, 0x4153, 0x43ad, 0x4695, 0x0135, 0x436b, 0x4167, 0xba22, 0xa2a9, 0x42f8, 0xbf0e, 0x437a, 0x1d74, 0xb01f, 0x017c, 0x1991, 0x42bc, 0x1faa, 0x43d2, 0x401f, 0xbf35, 0x43fc, 0xa8a4, 0x1b70, 0xb016, 0x0929, 0x2e6b, 0x4325, 0x4558, 0xb05d, 0xbf2e, 0x414c, 0x42cd, 0x4391, 0x433b, 0x4301, 0xbaeb, 0x1b75, 0xbfbb, 0xae43, 0x44aa, 0x41b4, 0x42a7, 0x1b64, 0x18d4, 0x2cac, 0xb222, 0xb2c7, 0x42c9, 0xbf90, 0xa53a, 0xbad0, 0x41b7, 0xb099, 0x46e3, 0xba47, 0x438d, 0x4244, 0xb0b5, 0x20f6, 0x456b, 0x433d, 0x4648, 0xba3f, 0x3fc9, 0xbf31, 0x194d, 0xac62, 0x42bb, 0x4315, 0x40ce, 0xaedd, 0xad17, 0x4026, 0x1270, 0xb0b2, 0x17c4, 0x1fbc, 0x417c, 0x1a36, 0x3eb7, 0xb004, 0xb03e, 0x4163, 0xba06, 0x424b, 0x43b4, 0xa91d, 0x4127, 0xb016, 0x4041, 0xb2db, 0x1abd, 0x2772, 0xbf2b, 0x410c, 0x1bc0, 0xbae4, 0x407f, 0x412b, 0x1900, 0x410f, 0x4255, 0xba25, 0x464a, 0xbf02, 0xbad9, 0x418a, 0x431a, 0xbad0, 0xb0b3, 0x4379, 0x442d, 0x4104, 0x13b2, 0x1b63, 0xbfc0, 0x1a55, 0x4271, 0x1d04, 0xb009, 0x42bd, 0x405c, 0x4175, 0xb268, 0x437d, 0xbfa3, 0x3b47, 0xbaec, 0xbae7, 0x0eca, 0xb275, 0x42d0, 0xb24a, 0x4369, 0x404d, 0x086e, 0x409c, 0x418f, 0x45b8, 0x3e1e, 0xbf81, 0x1f68, 0x435e, 0xba1b, 0x43b7, 0x40b5, 0x4064, 0x14b1, 0x13ed, 0x1849, 0xbfc9, 0xb05d, 0x40c3, 0x3623, 0xb2a0, 0x184d, 0x411c, 0x417e, 0xbf7a, 0x46e8, 0x41dc, 0x4329, 0x1cd8, 0xa148, 0xb0f5, 0x2e2a, 0x414d, 0x19ce, 0x41ee, 0x44cd, 0xa6a0, 0x412f, 0x4374, 0x43b9, 0xb06e, 0x1b62, 0x3bb0, 0x4336, 0x2103, 0xbf1f, 0x4291, 0xbadc, 0x4282, 0x4122, 0xab33, 0x4368, 0xbfb0, 0xbaf9, 0xb25f, 0xb0b5, 0xba09, 0xb271, 0x23c2, 0x4565, 0xa12c, 0xb24f, 0xbf3b, 0x2a8a, 0xa3fe, 0x09ff, 0xb288, 0x42b8, 0x40c4, 0xbac9, 0xba34, 0x425a, 0xba04, 0x42be, 0x0208, 0xb003, 0x29cc, 0xb23d, 0xa865, 0x4086, 0x2faa, 0xb0ab, 0xb0a2, 0xbfbb, 0x1955, 0x43af, 0xb2ba, 0x4211, 0x2327, 0x1d02, 0x4347, 0xb28d, 0x4126, 0xba03, 0x42f0, 0x4386, 0x4322, 0xa906, 0x0326, 0xba39, 0xba27, 0x1cfb, 0x4270, 0x419b, 0x0e80, 0x4662, 0x4303, 0x2737, 0x427d, 0x1a84, 0xbf7d, 0x4603, 0x1c74, 0xb27a, 0x4170, 0x346b, 0xba00, 0x38f6, 0x2096, 0x41aa, 0x1c51, 0x2ce4, 0xb097, 0x401d, 0xbf97, 0x4132, 0x439f, 0xb2dc, 0x43fc, 0x41a6, 0x1dc0, 0x4377, 0xb2c3, 0x4326, 0x4240, 0x42bd, 0x185d, 0x1a08, 0xba26, 0x4360, 0x4307, 0x093f, 0x23f5, 0x402e, 0x4423, 0x36b8, 0xacdd, 0x16a5, 0x4210, 0x421d, 0x4317, 0x42cb, 0x281f, 0xbf00, 0xbf38, 0x429c, 0x43f5, 0x4342, 0x44e4, 0xb217, 0x1af3, 0x40b5, 0x423f, 0x4095, 0xb0f7, 0x4593, 0xbf82, 0xbae0, 0x4132, 0xae4e, 0x2512, 0x4088, 0x4355, 0x43b2, 0xb24d, 0x3d61, 0x41ed, 0x1134, 0xb252, 0xb26b, 0x2517, 0x431f, 0xaf24, 0x42da, 0xbf31, 0xa58f, 0x3660, 0x227e, 0x43ef, 0x42de, 0x4203, 0x40fc, 0x42b6, 0x4158, 0x37ff, 0x366d, 0x4002, 0x1805, 0x466d, 0xb230, 0x423a, 0xb21e, 0xba0f, 0x41b2, 0xbad7, 0xb25e, 0x1948, 0xb029, 0xbf4b, 0x423f, 0xb2c8, 0xb25f, 0xba2d, 0x46b8, 0xb220, 0xbf60, 0x421e, 0xb20f, 0xba65, 0x4475, 0xbae1, 0x3874, 0x4031, 0xbf84, 0xb2d8, 0xbfe0, 0x2aa6, 0xbfa0, 0x4287, 0x4372, 0xba1e, 0x4250, 0xba77, 0x4619, 0x4098, 0x408f, 0x432d, 0xba12, 0xbfa2, 0x2b04, 0xba75, 0xb04d, 0x4251, 0x40c4, 0x4034, 0xba30, 0xba2a, 0x4010, 0x4139, 0x43ca, 0xba41, 0x18d1, 0x43ed, 0xb2c1, 0x4167, 0x2288, 0xba05, 0xad26, 0x0d4d, 0x4376, 0xbf53, 0x4139, 0xb2e0, 0xba4f, 0x4254, 0xbf98, 0x4331, 0xbf16, 0xa567, 0x420c, 0x081b, 0x1c4e, 0x03c9, 0x4220, 0xb097, 0x0871, 0x43da, 0xb06c, 0x427e, 0xb006, 0x42e0, 0xbf70, 0x42db, 0x06dc, 0x420f, 0x40eb, 0x41a4, 0xbfbc, 0x42d6, 0xb24a, 0x4770, 0xe7fe + ], + StartRegs = [0xd3cfc4df, 0x5f6feaeb, 0x1bacfb37, 0xe934848c, 0x07b4b459, 0x8beb3310, 0x3e769455, 0x1dc2cbe1, 0xaa106f96, 0xf071655c, 0xa0cd784c, 0xed40276a, 0xb836b593, 0x485f4321, 0x00000000, 0x900001f0 + ], + FinalRegs = [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x54ca3e07, 0x419af099, 0x485f4374, 0x90be86e8, 0xa9947992, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x4499, 0x4021, 0x1d2e, 0x1c30, 0xb2ac, 0x44b1, 0x4148, 0xba7c, 0x26b5, 0x42af, 0x4151, 0xa7ea, 0x1bc7, 0x10ed, 0x439b, 0xa19b, 0x4201, 0x3aff, 0x2dc8, 0xba14, 0xb244, 0xbf0c, 0xbff0, 0x45c9, 0x418e, 0xbfc0, 0x4300, 0x282d, 0x4432, 0x41fc, 0xa442, 0x400d, 0xbaff, 0x1ed1, 0x1faa, 0x1e48, 0x433d, 0xbf5b, 0x4661, 0xb2ef, 0x45b9, 0x420e, 0xb0f9, 0x24c6, 0xb2aa, 0x429a, 0x403c, 0xb24c, 0xb0a2, 0xb205, 0xabd2, 0x42a8, 0x4660, 0x4340, 0x44ac, 0x46d9, 0x407c, 0x1b8f, 0xbf18, 0x440e, 0x46e1, 0x4184, 0x4210, 0x421f, 0x1bb3, 0x437a, 0xb272, 0x4320, 0x4230, 0x15b4, 0x110f, 0x2278, 0x418f, 0x1069, 0x0cde, 0x3a07, 0x420d, 0xb2d3, 0x4073, 0x40ee, 0xb0db, 0x3342, 0x4073, 0xbf31, 0xbaee, 0x4359, 0x43c6, 0x42e6, 0x0503, 0xba7b, 0xa23c, 0x42c8, 0x1b6c, 0xbf98, 0x434f, 0x1caa, 0x43f3, 0x4143, 0x41ca, 0x19c6, 0xbff0, 0x105d, 0x42a1, 0x3045, 0x419e, 0xb2c4, 0x4395, 0x40df, 0xa984, 0x41a6, 0x18c1, 0x41cc, 0x43bc, 0x211d, 0x429f, 0x324a, 0x102b, 0x40f3, 0x404a, 0xbf17, 0x40d2, 0x0930, 0xafec, 0x25ca, 0x43f6, 0x1ddd, 0x418d, 0x41d7, 0x43de, 0x18e2, 0x43b2, 0x43a8, 0xa27b, 0xba5e, 0xba38, 0x42fa, 0x4176, 0x1e51, 0xb28a, 0xac01, 0x093b, 0x42a1, 0xbff0, 0xb0fe, 0x29c7, 0x0dae, 0x403b, 0x44c9, 0xbf4c, 0x3212, 0x0a25, 0x43a6, 0x14ea, 0xb095, 0x4293, 0x42bf, 0xba44, 0x2636, 0xbaf8, 0x446a, 0x1967, 0x428c, 0xb0e5, 0xba08, 0xb0d3, 0x4081, 0x4293, 0x4208, 0xbfb0, 0x038e, 0x3581, 0x4484, 0x40b4, 0xba43, 0x424e, 0x4000, 0xbf38, 0x4054, 0xb2ff, 0x44e5, 0x41d8, 0x4291, 0x45eb, 0x43c2, 0xba56, 0x1c4e, 0x44bc, 0x41d0, 0x3ee3, 0x00fb, 0x4038, 0xa75b, 0xbae2, 0xbf23, 0x44a4, 0x404f, 0xb277, 0xba23, 0x4178, 0x4620, 0x410e, 0x4028, 0x4040, 0xa3e9, 0x2281, 0x2238, 0xb211, 0xb285, 0x1adf, 0x4138, 0x240f, 0x4353, 0x428c, 0x4347, 0xbf24, 0x4360, 0x1ffc, 0xbf57, 0x412c, 0x40c9, 0x3611, 0x4062, 0xa2f2, 0x4332, 0xb079, 0x42e9, 0x15c2, 0x40af, 0x4409, 0xba47, 0x423b, 0x1b23, 0x1fc7, 0xbf3b, 0x23f9, 0x40f3, 0x4044, 0x41fa, 0x438d, 0x4081, 0x436f, 0x429a, 0x266b, 0x4277, 0x4544, 0x3a28, 0xba6e, 0x4131, 0x1d81, 0xbaf7, 0x011a, 0x415c, 0x09a7, 0x41de, 0x40cb, 0xbfb0, 0x40b7, 0xbfad, 0x42c9, 0x1993, 0x426b, 0x1201, 0x41d7, 0x42db, 0xb258, 0x41db, 0x435c, 0x447d, 0x461d, 0x43dc, 0x2410, 0x4287, 0xb08b, 0xb2c9, 0x438e, 0x433a, 0xb233, 0xad57, 0x44b8, 0x40fc, 0x4459, 0x1c30, 0x4118, 0x3dfe, 0xba53, 0x1ee0, 0x4130, 0xbfa6, 0xbac3, 0x0f62, 0xa018, 0x424b, 0x4109, 0x4351, 0x407e, 0xbf70, 0x1a92, 0x4289, 0x2f97, 0x41bb, 0x414d, 0x419a, 0xb0ab, 0x40a6, 0xb20d, 0x405e, 0x43fe, 0x422e, 0x4033, 0x41b9, 0x027e, 0x45e6, 0xbfe2, 0x4365, 0x4301, 0xa5e0, 0x430e, 0x4260, 0x40a4, 0x44cb, 0x0824, 0x2e66, 0x4490, 0x1efc, 0xbade, 0x228a, 0xbf60, 0x4048, 0x43b7, 0xbfce, 0x3516, 0x1e5d, 0xaabb, 0x2dbd, 0x36a6, 0xb2fe, 0x459a, 0xb0af, 0x2212, 0xb2f3, 0x42a2, 0x4346, 0x18fb, 0xbfda, 0xb2bb, 0xba39, 0xb261, 0xb231, 0x40f7, 0x4221, 0xb0d0, 0x427e, 0x4270, 0x463e, 0x4332, 0x40ff, 0xb086, 0x43a2, 0x41fc, 0x42d8, 0xbf33, 0xba11, 0x41f6, 0xb23d, 0xb004, 0x41ef, 0x2b68, 0x41a9, 0xbfc8, 0x41af, 0xb0bf, 0x2d51, 0xb08a, 0x41e4, 0xba33, 0x0fbb, 0x445b, 0x3c22, 0x4404, 0x42b7, 0x42da, 0x396d, 0xbfd9, 0x4069, 0x46d9, 0x40c9, 0x424b, 0xa8a1, 0x4399, 0x0771, 0x1ff4, 0xba29, 0x4232, 0x2361, 0xbf1c, 0xb248, 0x40b0, 0x45a2, 0x4171, 0x40b1, 0xb281, 0x4187, 0xb2ff, 0x1a83, 0x160c, 0x1f34, 0xb049, 0xbf2d, 0x430b, 0x4024, 0x2813, 0xbfb0, 0x4146, 0x2134, 0xb2a3, 0x42ca, 0xb0e6, 0x42c3, 0xb2aa, 0x462d, 0x41ee, 0x3025, 0xbf41, 0x152d, 0xb2ab, 0x22cc, 0x22c3, 0xb2ae, 0xba61, 0x430d, 0xbaf2, 0x42ef, 0x40f0, 0x2d16, 0x19da, 0xbf98, 0xba66, 0x1b36, 0xb202, 0x41ba, 0x43ca, 0x28ca, 0x406c, 0x458d, 0xbf5f, 0xba62, 0x42a5, 0xbf70, 0x412a, 0x42e1, 0xa8e9, 0xb000, 0xb0b3, 0x16fc, 0x45e4, 0x4345, 0xbf67, 0x4115, 0x4226, 0xaf4f, 0x41cf, 0x29e1, 0xa321, 0x42e8, 0x426e, 0x3646, 0x42ea, 0xb2f7, 0x42de, 0xac68, 0x341c, 0xb21f, 0x4352, 0xba35, 0xbfe0, 0xb0be, 0xbf24, 0x40f8, 0x1ace, 0xa6be, 0x4627, 0x445b, 0x4130, 0x30b1, 0x26c4, 0xbf00, 0xb08c, 0xb2ed, 0xba6f, 0xb219, 0xb2d1, 0x1ce1, 0x0ae6, 0xb25f, 0xbfd4, 0x05e1, 0x4648, 0xba06, 0xabfd, 0x4068, 0xb27f, 0x1a01, 0x0851, 0x42ff, 0x4691, 0x3367, 0x436c, 0xb20c, 0x4096, 0x43bf, 0x1f4b, 0x10e5, 0xb24f, 0x4325, 0xbfc0, 0x4113, 0xbf44, 0x41ee, 0x4045, 0x43d5, 0xbfbb, 0xb2cb, 0x42e1, 0x3336, 0x43e5, 0x0914, 0xb245, 0xba06, 0x198e, 0xadcb, 0x4079, 0xb23c, 0xbf3f, 0xa03a, 0x4155, 0x41d7, 0xba45, 0x37fe, 0x2b2e, 0x404e, 0xbaf3, 0x405a, 0x18c6, 0x42c6, 0x40f1, 0x402d, 0x184d, 0xa630, 0x42f2, 0xbfac, 0xb2ff, 0xb26a, 0xb2fe, 0xabc6, 0xb288, 0x4180, 0xbaf8, 0x4239, 0x1a7f, 0xb2c1, 0x40cc, 0x3a53, 0x34be, 0x4273, 0x435d, 0xb009, 0x1f2d, 0x4392, 0x424b, 0x459e, 0x43d3, 0x409d, 0x41d6, 0x3faf, 0xa208, 0x4107, 0xbf82, 0x4442, 0xa1e1, 0x1bc0, 0x42ed, 0x4068, 0x0b47, 0xb04b, 0x43fa, 0xba1a, 0xac7d, 0x1899, 0xa69d, 0x4327, 0xad06, 0x1f24, 0x1a75, 0xa2d1, 0x4257, 0x4106, 0x411f, 0x43b0, 0x4406, 0x45f1, 0xb2d5, 0x41a7, 0xb2f6, 0xa9a5, 0xbf25, 0x402e, 0x46a4, 0x41de, 0x4323, 0x1e92, 0x2b9b, 0xbfe0, 0xbfa0, 0xa5cb, 0x4276, 0x19cd, 0x0928, 0x40a9, 0xb2da, 0x4224, 0x42ca, 0xb095, 0x4399, 0x1917, 0xb260, 0xba50, 0xbf2d, 0xa243, 0xb29f, 0x42a1, 0x45aa, 0xa358, 0xb299, 0x4411, 0x4056, 0x4322, 0x1261, 0x40cc, 0x4153, 0x43d7, 0x4492, 0xba2d, 0x42fa, 0x437e, 0x40d1, 0xb0b6, 0xb28a, 0xb2c8, 0x07f6, 0x45ad, 0x4063, 0xb27b, 0x41b8, 0x1df7, 0xbf6e, 0xb225, 0xbf90, 0x1823, 0xb0a6, 0xbaf9, 0xba4b, 0x441d, 0x1bb0, 0x46bd, 0xa111, 0x43cc, 0x40bb, 0x41f1, 0xbf1d, 0x1c87, 0x409b, 0xba0a, 0x41ac, 0xaec5, 0xb24c, 0xbfab, 0x41f9, 0x45d3, 0x2e14, 0xb0fa, 0x156b, 0x4346, 0xb2b6, 0x19af, 0xbaf0, 0x418d, 0xb29e, 0xba47, 0x4342, 0x19aa, 0x3a55, 0x42b5, 0x4623, 0x42ac, 0xb0bb, 0xb246, 0xbfd0, 0x40af, 0x420e, 0x1f14, 0x250e, 0x1e9b, 0xbfca, 0x1d20, 0xbf70, 0xba73, 0x3e76, 0x1f68, 0x1b7b, 0x41d5, 0xbadb, 0x18ab, 0x42a0, 0x4024, 0x03ef, 0xbfd2, 0x1d77, 0xb298, 0x40b2, 0xb20f, 0x4102, 0x4046, 0x42a3, 0xbf8f, 0xb2b4, 0x3410, 0x1aca, 0x4032, 0x1bfc, 0x3a0b, 0xbf1f, 0x40b4, 0xb2d8, 0xb02c, 0x4288, 0x425d, 0x2c05, 0xab89, 0xbaec, 0x43d7, 0xb22b, 0xb20d, 0x4013, 0xb22d, 0x1819, 0xbf0c, 0xaba0, 0x43c0, 0xbac0, 0xba66, 0x4013, 0xb065, 0x18aa, 0x4139, 0x42bc, 0x45c5, 0x4128, 0x405e, 0x41eb, 0xba01, 0x4302, 0xaf34, 0x402e, 0x1181, 0xba70, 0x40c3, 0x191d, 0x4037, 0x40e4, 0xba4b, 0x09b6, 0x4561, 0xbfb9, 0x43ea, 0x02ee, 0x4311, 0x40ea, 0x4394, 0x4367, 0x4059, 0x4399, 0x43b5, 0xb077, 0x40af, 0x4394, 0x42d0, 0xb2b5, 0xb0f4, 0x3bf1, 0x44dc, 0x1887, 0x401f, 0x3da4, 0xbf7a, 0xb26f, 0x4421, 0x2540, 0x4107, 0x4229, 0x4389, 0xba20, 0x3378, 0xbae3, 0xba3e, 0x1c59, 0x40c5, 0x40a4, 0x1a2f, 0x1f4a, 0x432b, 0xa962, 0x41a1, 0x4631, 0xbf3b, 0x4245, 0xb295, 0xb28d, 0x42be, 0xbae8, 0x1b8a, 0x1a0c, 0x44fc, 0x469a, 0x42b7, 0x1ba4, 0x41b3, 0x4361, 0x4241, 0x4034, 0x4099, 0x433d, 0x438f, 0x41c4, 0xb2e4, 0xbf92, 0x426d, 0x4023, 0xba0b, 0xba3c, 0x40d4, 0x4152, 0xb23a, 0x425e, 0x43ac, 0x4146, 0xbfcd, 0x1617, 0x41a8, 0x08af, 0x4364, 0xbadc, 0x4348, 0xb295, 0xb2ee, 0xb21f, 0x400c, 0x4214, 0x4253, 0x4193, 0x4544, 0x1ff0, 0x43bc, 0x2489, 0x4145, 0x414c, 0x409c, 0xa728, 0xb09b, 0xbf19, 0x431f, 0xba0d, 0xba6c, 0x4201, 0x4063, 0x418e, 0x2b73, 0x0d77, 0x4574, 0x408f, 0x31b6, 0x077e, 0xbf48, 0xb2ac, 0xb2be, 0x1088, 0x411e, 0x42e5, 0x410d, 0x428d, 0x4319, 0xbf36, 0x354d, 0x0e3b, 0xb25f, 0x4316, 0xbfa3, 0x419a, 0x039b, 0x41b6, 0x04fd, 0x4583, 0x4284, 0x43c1, 0xbf24, 0x14e3, 0x4366, 0x438f, 0x4388, 0x4335, 0x423b, 0x4181, 0xb227, 0x0e84, 0x0fa9, 0x43a6, 0x1264, 0x0b9d, 0xb0e9, 0xb283, 0x46f2, 0x0ca3, 0x4364, 0x4311, 0xbac1, 0x4115, 0xb0d0, 0x2aa3, 0x1923, 0xbf5b, 0xb04e, 0x35af, 0xa9d4, 0x42c9, 0x4315, 0xbf60, 0x3bfd, 0x0a60, 0xbad1, 0x405a, 0x18b4, 0xb20a, 0xb075, 0x432b, 0x43ea, 0x4272, 0xb2ab, 0x4218, 0x430a, 0x13ee, 0xba22, 0xbf8e, 0x17e6, 0xb260, 0x43ed, 0x439a, 0xb29d, 0x1e98, 0x4355, 0xba54, 0xaffd, 0xb2d2, 0x4394, 0x404e, 0xb08f, 0x3bdc, 0x0f8b, 0x4243, 0x4382, 0xbf48, 0x4138, 0x44fd, 0x422b, 0xb08f, 0x1150, 0xbf73, 0x41d6, 0x1b03, 0xb0bf, 0x432e, 0x283d, 0x45a8, 0x0fa2, 0x0992, 0x40c4, 0x46d2, 0x43d8, 0x42a4, 0x4119, 0x4016, 0x427d, 0xb0c3, 0xb29e, 0xa0df, 0x4258, 0xba3a, 0x1df4, 0x0f25, 0x2f1c, 0x435a, 0x421c, 0x41d4, 0xbf07, 0xb2f7, 0x1a9e, 0x43a2, 0x43d8, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5cc0f53c, 0x72fcd234, 0xde457376, 0x49d4e05a, 0x758c22b2, 0x79c1668a, 0x3635ed63, 0xeac80e34, 0x347d2ad7, 0xd42d60b3, 0xe8a20e81, 0x381745c5, 0x0ec66078, 0xe13b4962, 0x00000000, 0x000001f0 }, - FinalRegs = new uint[] { 0x0000b3bc, 0x00000000, 0x8e4f0000, 0xffff4c43, 0x00004c4a, 0x00000000, 0x00004c43, 0x0000051b, 0x6c94709c, 0x00090000, 0x00000000, 0x55a4c7ed, 0x3cb8de89, 0x0000173b, 0x00000000, 0x200001d0 }, + Instructions = [0x4499, 0x4021, 0x1d2e, 0x1c30, 0xb2ac, 0x44b1, 0x4148, 0xba7c, 0x26b5, 0x42af, 0x4151, 0xa7ea, 0x1bc7, 0x10ed, 0x439b, 0xa19b, 0x4201, 0x3aff, 0x2dc8, 0xba14, 0xb244, 0xbf0c, 0xbff0, 0x45c9, 0x418e, 0xbfc0, 0x4300, 0x282d, 0x4432, 0x41fc, 0xa442, 0x400d, 0xbaff, 0x1ed1, 0x1faa, 0x1e48, 0x433d, 0xbf5b, 0x4661, 0xb2ef, 0x45b9, 0x420e, 0xb0f9, 0x24c6, 0xb2aa, 0x429a, 0x403c, 0xb24c, 0xb0a2, 0xb205, 0xabd2, 0x42a8, 0x4660, 0x4340, 0x44ac, 0x46d9, 0x407c, 0x1b8f, 0xbf18, 0x440e, 0x46e1, 0x4184, 0x4210, 0x421f, 0x1bb3, 0x437a, 0xb272, 0x4320, 0x4230, 0x15b4, 0x110f, 0x2278, 0x418f, 0x1069, 0x0cde, 0x3a07, 0x420d, 0xb2d3, 0x4073, 0x40ee, 0xb0db, 0x3342, 0x4073, 0xbf31, 0xbaee, 0x4359, 0x43c6, 0x42e6, 0x0503, 0xba7b, 0xa23c, 0x42c8, 0x1b6c, 0xbf98, 0x434f, 0x1caa, 0x43f3, 0x4143, 0x41ca, 0x19c6, 0xbff0, 0x105d, 0x42a1, 0x3045, 0x419e, 0xb2c4, 0x4395, 0x40df, 0xa984, 0x41a6, 0x18c1, 0x41cc, 0x43bc, 0x211d, 0x429f, 0x324a, 0x102b, 0x40f3, 0x404a, 0xbf17, 0x40d2, 0x0930, 0xafec, 0x25ca, 0x43f6, 0x1ddd, 0x418d, 0x41d7, 0x43de, 0x18e2, 0x43b2, 0x43a8, 0xa27b, 0xba5e, 0xba38, 0x42fa, 0x4176, 0x1e51, 0xb28a, 0xac01, 0x093b, 0x42a1, 0xbff0, 0xb0fe, 0x29c7, 0x0dae, 0x403b, 0x44c9, 0xbf4c, 0x3212, 0x0a25, 0x43a6, 0x14ea, 0xb095, 0x4293, 0x42bf, 0xba44, 0x2636, 0xbaf8, 0x446a, 0x1967, 0x428c, 0xb0e5, 0xba08, 0xb0d3, 0x4081, 0x4293, 0x4208, 0xbfb0, 0x038e, 0x3581, 0x4484, 0x40b4, 0xba43, 0x424e, 0x4000, 0xbf38, 0x4054, 0xb2ff, 0x44e5, 0x41d8, 0x4291, 0x45eb, 0x43c2, 0xba56, 0x1c4e, 0x44bc, 0x41d0, 0x3ee3, 0x00fb, 0x4038, 0xa75b, 0xbae2, 0xbf23, 0x44a4, 0x404f, 0xb277, 0xba23, 0x4178, 0x4620, 0x410e, 0x4028, 0x4040, 0xa3e9, 0x2281, 0x2238, 0xb211, 0xb285, 0x1adf, 0x4138, 0x240f, 0x4353, 0x428c, 0x4347, 0xbf24, 0x4360, 0x1ffc, 0xbf57, 0x412c, 0x40c9, 0x3611, 0x4062, 0xa2f2, 0x4332, 0xb079, 0x42e9, 0x15c2, 0x40af, 0x4409, 0xba47, 0x423b, 0x1b23, 0x1fc7, 0xbf3b, 0x23f9, 0x40f3, 0x4044, 0x41fa, 0x438d, 0x4081, 0x436f, 0x429a, 0x266b, 0x4277, 0x4544, 0x3a28, 0xba6e, 0x4131, 0x1d81, 0xbaf7, 0x011a, 0x415c, 0x09a7, 0x41de, 0x40cb, 0xbfb0, 0x40b7, 0xbfad, 0x42c9, 0x1993, 0x426b, 0x1201, 0x41d7, 0x42db, 0xb258, 0x41db, 0x435c, 0x447d, 0x461d, 0x43dc, 0x2410, 0x4287, 0xb08b, 0xb2c9, 0x438e, 0x433a, 0xb233, 0xad57, 0x44b8, 0x40fc, 0x4459, 0x1c30, 0x4118, 0x3dfe, 0xba53, 0x1ee0, 0x4130, 0xbfa6, 0xbac3, 0x0f62, 0xa018, 0x424b, 0x4109, 0x4351, 0x407e, 0xbf70, 0x1a92, 0x4289, 0x2f97, 0x41bb, 0x414d, 0x419a, 0xb0ab, 0x40a6, 0xb20d, 0x405e, 0x43fe, 0x422e, 0x4033, 0x41b9, 0x027e, 0x45e6, 0xbfe2, 0x4365, 0x4301, 0xa5e0, 0x430e, 0x4260, 0x40a4, 0x44cb, 0x0824, 0x2e66, 0x4490, 0x1efc, 0xbade, 0x228a, 0xbf60, 0x4048, 0x43b7, 0xbfce, 0x3516, 0x1e5d, 0xaabb, 0x2dbd, 0x36a6, 0xb2fe, 0x459a, 0xb0af, 0x2212, 0xb2f3, 0x42a2, 0x4346, 0x18fb, 0xbfda, 0xb2bb, 0xba39, 0xb261, 0xb231, 0x40f7, 0x4221, 0xb0d0, 0x427e, 0x4270, 0x463e, 0x4332, 0x40ff, 0xb086, 0x43a2, 0x41fc, 0x42d8, 0xbf33, 0xba11, 0x41f6, 0xb23d, 0xb004, 0x41ef, 0x2b68, 0x41a9, 0xbfc8, 0x41af, 0xb0bf, 0x2d51, 0xb08a, 0x41e4, 0xba33, 0x0fbb, 0x445b, 0x3c22, 0x4404, 0x42b7, 0x42da, 0x396d, 0xbfd9, 0x4069, 0x46d9, 0x40c9, 0x424b, 0xa8a1, 0x4399, 0x0771, 0x1ff4, 0xba29, 0x4232, 0x2361, 0xbf1c, 0xb248, 0x40b0, 0x45a2, 0x4171, 0x40b1, 0xb281, 0x4187, 0xb2ff, 0x1a83, 0x160c, 0x1f34, 0xb049, 0xbf2d, 0x430b, 0x4024, 0x2813, 0xbfb0, 0x4146, 0x2134, 0xb2a3, 0x42ca, 0xb0e6, 0x42c3, 0xb2aa, 0x462d, 0x41ee, 0x3025, 0xbf41, 0x152d, 0xb2ab, 0x22cc, 0x22c3, 0xb2ae, 0xba61, 0x430d, 0xbaf2, 0x42ef, 0x40f0, 0x2d16, 0x19da, 0xbf98, 0xba66, 0x1b36, 0xb202, 0x41ba, 0x43ca, 0x28ca, 0x406c, 0x458d, 0xbf5f, 0xba62, 0x42a5, 0xbf70, 0x412a, 0x42e1, 0xa8e9, 0xb000, 0xb0b3, 0x16fc, 0x45e4, 0x4345, 0xbf67, 0x4115, 0x4226, 0xaf4f, 0x41cf, 0x29e1, 0xa321, 0x42e8, 0x426e, 0x3646, 0x42ea, 0xb2f7, 0x42de, 0xac68, 0x341c, 0xb21f, 0x4352, 0xba35, 0xbfe0, 0xb0be, 0xbf24, 0x40f8, 0x1ace, 0xa6be, 0x4627, 0x445b, 0x4130, 0x30b1, 0x26c4, 0xbf00, 0xb08c, 0xb2ed, 0xba6f, 0xb219, 0xb2d1, 0x1ce1, 0x0ae6, 0xb25f, 0xbfd4, 0x05e1, 0x4648, 0xba06, 0xabfd, 0x4068, 0xb27f, 0x1a01, 0x0851, 0x42ff, 0x4691, 0x3367, 0x436c, 0xb20c, 0x4096, 0x43bf, 0x1f4b, 0x10e5, 0xb24f, 0x4325, 0xbfc0, 0x4113, 0xbf44, 0x41ee, 0x4045, 0x43d5, 0xbfbb, 0xb2cb, 0x42e1, 0x3336, 0x43e5, 0x0914, 0xb245, 0xba06, 0x198e, 0xadcb, 0x4079, 0xb23c, 0xbf3f, 0xa03a, 0x4155, 0x41d7, 0xba45, 0x37fe, 0x2b2e, 0x404e, 0xbaf3, 0x405a, 0x18c6, 0x42c6, 0x40f1, 0x402d, 0x184d, 0xa630, 0x42f2, 0xbfac, 0xb2ff, 0xb26a, 0xb2fe, 0xabc6, 0xb288, 0x4180, 0xbaf8, 0x4239, 0x1a7f, 0xb2c1, 0x40cc, 0x3a53, 0x34be, 0x4273, 0x435d, 0xb009, 0x1f2d, 0x4392, 0x424b, 0x459e, 0x43d3, 0x409d, 0x41d6, 0x3faf, 0xa208, 0x4107, 0xbf82, 0x4442, 0xa1e1, 0x1bc0, 0x42ed, 0x4068, 0x0b47, 0xb04b, 0x43fa, 0xba1a, 0xac7d, 0x1899, 0xa69d, 0x4327, 0xad06, 0x1f24, 0x1a75, 0xa2d1, 0x4257, 0x4106, 0x411f, 0x43b0, 0x4406, 0x45f1, 0xb2d5, 0x41a7, 0xb2f6, 0xa9a5, 0xbf25, 0x402e, 0x46a4, 0x41de, 0x4323, 0x1e92, 0x2b9b, 0xbfe0, 0xbfa0, 0xa5cb, 0x4276, 0x19cd, 0x0928, 0x40a9, 0xb2da, 0x4224, 0x42ca, 0xb095, 0x4399, 0x1917, 0xb260, 0xba50, 0xbf2d, 0xa243, 0xb29f, 0x42a1, 0x45aa, 0xa358, 0xb299, 0x4411, 0x4056, 0x4322, 0x1261, 0x40cc, 0x4153, 0x43d7, 0x4492, 0xba2d, 0x42fa, 0x437e, 0x40d1, 0xb0b6, 0xb28a, 0xb2c8, 0x07f6, 0x45ad, 0x4063, 0xb27b, 0x41b8, 0x1df7, 0xbf6e, 0xb225, 0xbf90, 0x1823, 0xb0a6, 0xbaf9, 0xba4b, 0x441d, 0x1bb0, 0x46bd, 0xa111, 0x43cc, 0x40bb, 0x41f1, 0xbf1d, 0x1c87, 0x409b, 0xba0a, 0x41ac, 0xaec5, 0xb24c, 0xbfab, 0x41f9, 0x45d3, 0x2e14, 0xb0fa, 0x156b, 0x4346, 0xb2b6, 0x19af, 0xbaf0, 0x418d, 0xb29e, 0xba47, 0x4342, 0x19aa, 0x3a55, 0x42b5, 0x4623, 0x42ac, 0xb0bb, 0xb246, 0xbfd0, 0x40af, 0x420e, 0x1f14, 0x250e, 0x1e9b, 0xbfca, 0x1d20, 0xbf70, 0xba73, 0x3e76, 0x1f68, 0x1b7b, 0x41d5, 0xbadb, 0x18ab, 0x42a0, 0x4024, 0x03ef, 0xbfd2, 0x1d77, 0xb298, 0x40b2, 0xb20f, 0x4102, 0x4046, 0x42a3, 0xbf8f, 0xb2b4, 0x3410, 0x1aca, 0x4032, 0x1bfc, 0x3a0b, 0xbf1f, 0x40b4, 0xb2d8, 0xb02c, 0x4288, 0x425d, 0x2c05, 0xab89, 0xbaec, 0x43d7, 0xb22b, 0xb20d, 0x4013, 0xb22d, 0x1819, 0xbf0c, 0xaba0, 0x43c0, 0xbac0, 0xba66, 0x4013, 0xb065, 0x18aa, 0x4139, 0x42bc, 0x45c5, 0x4128, 0x405e, 0x41eb, 0xba01, 0x4302, 0xaf34, 0x402e, 0x1181, 0xba70, 0x40c3, 0x191d, 0x4037, 0x40e4, 0xba4b, 0x09b6, 0x4561, 0xbfb9, 0x43ea, 0x02ee, 0x4311, 0x40ea, 0x4394, 0x4367, 0x4059, 0x4399, 0x43b5, 0xb077, 0x40af, 0x4394, 0x42d0, 0xb2b5, 0xb0f4, 0x3bf1, 0x44dc, 0x1887, 0x401f, 0x3da4, 0xbf7a, 0xb26f, 0x4421, 0x2540, 0x4107, 0x4229, 0x4389, 0xba20, 0x3378, 0xbae3, 0xba3e, 0x1c59, 0x40c5, 0x40a4, 0x1a2f, 0x1f4a, 0x432b, 0xa962, 0x41a1, 0x4631, 0xbf3b, 0x4245, 0xb295, 0xb28d, 0x42be, 0xbae8, 0x1b8a, 0x1a0c, 0x44fc, 0x469a, 0x42b7, 0x1ba4, 0x41b3, 0x4361, 0x4241, 0x4034, 0x4099, 0x433d, 0x438f, 0x41c4, 0xb2e4, 0xbf92, 0x426d, 0x4023, 0xba0b, 0xba3c, 0x40d4, 0x4152, 0xb23a, 0x425e, 0x43ac, 0x4146, 0xbfcd, 0x1617, 0x41a8, 0x08af, 0x4364, 0xbadc, 0x4348, 0xb295, 0xb2ee, 0xb21f, 0x400c, 0x4214, 0x4253, 0x4193, 0x4544, 0x1ff0, 0x43bc, 0x2489, 0x4145, 0x414c, 0x409c, 0xa728, 0xb09b, 0xbf19, 0x431f, 0xba0d, 0xba6c, 0x4201, 0x4063, 0x418e, 0x2b73, 0x0d77, 0x4574, 0x408f, 0x31b6, 0x077e, 0xbf48, 0xb2ac, 0xb2be, 0x1088, 0x411e, 0x42e5, 0x410d, 0x428d, 0x4319, 0xbf36, 0x354d, 0x0e3b, 0xb25f, 0x4316, 0xbfa3, 0x419a, 0x039b, 0x41b6, 0x04fd, 0x4583, 0x4284, 0x43c1, 0xbf24, 0x14e3, 0x4366, 0x438f, 0x4388, 0x4335, 0x423b, 0x4181, 0xb227, 0x0e84, 0x0fa9, 0x43a6, 0x1264, 0x0b9d, 0xb0e9, 0xb283, 0x46f2, 0x0ca3, 0x4364, 0x4311, 0xbac1, 0x4115, 0xb0d0, 0x2aa3, 0x1923, 0xbf5b, 0xb04e, 0x35af, 0xa9d4, 0x42c9, 0x4315, 0xbf60, 0x3bfd, 0x0a60, 0xbad1, 0x405a, 0x18b4, 0xb20a, 0xb075, 0x432b, 0x43ea, 0x4272, 0xb2ab, 0x4218, 0x430a, 0x13ee, 0xba22, 0xbf8e, 0x17e6, 0xb260, 0x43ed, 0x439a, 0xb29d, 0x1e98, 0x4355, 0xba54, 0xaffd, 0xb2d2, 0x4394, 0x404e, 0xb08f, 0x3bdc, 0x0f8b, 0x4243, 0x4382, 0xbf48, 0x4138, 0x44fd, 0x422b, 0xb08f, 0x1150, 0xbf73, 0x41d6, 0x1b03, 0xb0bf, 0x432e, 0x283d, 0x45a8, 0x0fa2, 0x0992, 0x40c4, 0x46d2, 0x43d8, 0x42a4, 0x4119, 0x4016, 0x427d, 0xb0c3, 0xb29e, 0xa0df, 0x4258, 0xba3a, 0x1df4, 0x0f25, 0x2f1c, 0x435a, 0x421c, 0x41d4, 0xbf07, 0xb2f7, 0x1a9e, 0x43a2, 0x43d8, 0x4770, 0xe7fe + ], + StartRegs = [0x5cc0f53c, 0x72fcd234, 0xde457376, 0x49d4e05a, 0x758c22b2, 0x79c1668a, 0x3635ed63, 0xeac80e34, 0x347d2ad7, 0xd42d60b3, 0xe8a20e81, 0x381745c5, 0x0ec66078, 0xe13b4962, 0x00000000, 0x000001f0 + ], + FinalRegs = [0x0000b3bc, 0x00000000, 0x8e4f0000, 0xffff4c43, 0x00004c4a, 0x00000000, 0x00004c43, 0x0000051b, 0x6c94709c, 0x00090000, 0x00000000, 0x55a4c7ed, 0x3cb8de89, 0x0000173b, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xb2ea, 0x42ba, 0x46c5, 0x422b, 0x1be5, 0x02d1, 0x1caa, 0x41bc, 0x43bd, 0x1dfd, 0xa8ec, 0xb044, 0x0ec5, 0x0aa4, 0x4022, 0x45c5, 0xb00b, 0x42da, 0x04c3, 0x00d9, 0x1e50, 0xbf03, 0x4184, 0x4254, 0xb282, 0x00fc, 0xb041, 0xb27c, 0xbafd, 0x18fc, 0x417c, 0x41d6, 0x4313, 0xba21, 0xb237, 0xbfb4, 0xb29f, 0xb260, 0x1acf, 0x21b0, 0xb062, 0xbac1, 0xbacb, 0x41aa, 0x1399, 0xb255, 0xb28d, 0x1f91, 0x408a, 0x1391, 0xb200, 0x40ba, 0x4234, 0xbad2, 0x4031, 0x417a, 0x43fe, 0x40ff, 0x4131, 0x44c2, 0xbf6d, 0xba23, 0xb22a, 0x1a46, 0x432b, 0x1a26, 0x1525, 0x4148, 0x421b, 0x3ac6, 0xba73, 0xb007, 0x448c, 0xb211, 0x40e9, 0xba0c, 0x2a7e, 0x409b, 0x4478, 0x4495, 0xba61, 0x40e5, 0x465d, 0x4110, 0xb07e, 0xbf04, 0x4174, 0x1ce1, 0xb2b7, 0xb26a, 0x40e2, 0x11ea, 0x091b, 0x46d5, 0x1def, 0x4351, 0x4244, 0x405a, 0x4109, 0xa87b, 0xb249, 0x44b1, 0xba4f, 0xb038, 0xb083, 0xbff0, 0x4016, 0x43f0, 0xb092, 0x03f6, 0x19ad, 0x4287, 0xbf76, 0x43b0, 0x4356, 0x3e6a, 0x1aa0, 0x41c5, 0xb2d4, 0x1cb6, 0xba0c, 0x43ce, 0x45f2, 0xb066, 0x361b, 0x294f, 0x4133, 0xaa78, 0x4659, 0x4019, 0x4310, 0x4158, 0x412d, 0x4077, 0x41d9, 0xba7e, 0xbf96, 0x112e, 0x3932, 0xb0cf, 0x4395, 0x4237, 0x2cd3, 0x35bb, 0x03ff, 0x3c3f, 0xa63b, 0x4352, 0x4110, 0x04e4, 0xaad1, 0xb05a, 0xb2af, 0x4101, 0x4309, 0x43c7, 0xa7cc, 0x1b1d, 0xb2bc, 0x42b2, 0x446d, 0x42e2, 0x4044, 0xbfae, 0xbfd0, 0xa92b, 0x2ca8, 0xba7a, 0x0c15, 0x18af, 0x10c6, 0x4125, 0x411c, 0xb290, 0x40c7, 0x38e2, 0x425a, 0x26d4, 0x45ca, 0x46b5, 0xa9af, 0xbfab, 0x401a, 0x3480, 0x43e2, 0xb205, 0xb06b, 0xb0ce, 0x4213, 0xba35, 0x42d3, 0x1d9c, 0x40c8, 0x43dd, 0x42cc, 0x264c, 0x0f86, 0xbf8a, 0x18b3, 0xb0b6, 0xbff0, 0x08c3, 0x146a, 0x43a1, 0xbfad, 0xb024, 0x419b, 0xada4, 0xb207, 0xa205, 0xb2b0, 0x4013, 0x1ffc, 0xb2dc, 0xb2a6, 0x4189, 0xa033, 0x373b, 0xa54c, 0x4229, 0x1f08, 0xbf17, 0x426b, 0xbf90, 0x18ca, 0xa154, 0x41c6, 0x3c30, 0x426a, 0x431a, 0x1add, 0xb0d0, 0xad69, 0x1d25, 0xbf1f, 0xb2c7, 0x26fe, 0x1dc6, 0xacb6, 0xba38, 0x4554, 0x19cd, 0x4167, 0xa82c, 0xb2d0, 0x15fe, 0x2a17, 0x43cf, 0x45bc, 0x4002, 0x438b, 0xb24a, 0x1bca, 0xb00a, 0x40e5, 0x4367, 0xbfa5, 0x425c, 0x1a88, 0x0641, 0x41e3, 0xb22c, 0xb245, 0x42d5, 0xb23f, 0x4615, 0x43fc, 0xbaed, 0x4272, 0x414c, 0xbf31, 0x41c1, 0xb2df, 0xb2cb, 0x402b, 0x42a6, 0x4356, 0xbf3e, 0xb2e9, 0x2814, 0xbfa0, 0x4143, 0xbfe0, 0x0b79, 0x1b81, 0x38a3, 0x412f, 0x20d2, 0x4068, 0x42cb, 0xbae8, 0x2a4f, 0x1d57, 0xb09d, 0x4168, 0xb208, 0x41e9, 0x408c, 0x357e, 0x469d, 0x43eb, 0x4189, 0xbac2, 0x40d8, 0x4580, 0xbf7a, 0x0b11, 0x4070, 0x4471, 0x43f4, 0x43b0, 0x4586, 0xba4a, 0x346a, 0xa7e9, 0x43b2, 0xbac3, 0x0423, 0x40d6, 0x248d, 0x40a5, 0x420a, 0x438f, 0x427b, 0x4202, 0x31ec, 0x2e50, 0xba26, 0xbf5e, 0x41f2, 0xb08f, 0x42ab, 0x2f2e, 0x4111, 0xbfd0, 0x4324, 0x40de, 0x4236, 0xba1b, 0x02e1, 0x3f0c, 0x0a8d, 0xa1e9, 0x092b, 0x42d4, 0x45dd, 0x43f4, 0x3b18, 0xaff9, 0xba2f, 0xba68, 0xb0de, 0x19b1, 0xbf37, 0x43c5, 0x1642, 0x41d7, 0xbf00, 0x311f, 0xbfd0, 0x4254, 0x423a, 0x4124, 0x1eb4, 0x4364, 0x4365, 0x40e0, 0xbf3e, 0x3c12, 0x43c1, 0x2fbc, 0xb0bd, 0xbac3, 0x4014, 0x41f6, 0x40dc, 0x40ac, 0x4330, 0x1e86, 0x438b, 0xb0d0, 0xac1f, 0x055f, 0x378c, 0x1f34, 0x1f9c, 0x0795, 0xb0c8, 0x410b, 0x4050, 0xbfdb, 0x41eb, 0x3e25, 0x4171, 0x432d, 0xb2d0, 0xb25f, 0xb281, 0x41e1, 0x432f, 0x4073, 0xbf60, 0x40fc, 0xbaf7, 0xb0ba, 0xaac8, 0x4318, 0x410c, 0xa369, 0xb08a, 0x42f8, 0x1c9b, 0xbf78, 0x34a5, 0x3209, 0xadae, 0x4272, 0x0d71, 0xa43d, 0x1180, 0x4229, 0x0689, 0x4313, 0xb208, 0x444c, 0x3a48, 0xba19, 0x4007, 0x4107, 0x2a6a, 0x41be, 0xb2ee, 0xbf42, 0x4332, 0x1870, 0x10cb, 0xb078, 0x411f, 0x29f2, 0xbfe0, 0x20df, 0x41f2, 0x39f3, 0x3ecf, 0x42fc, 0x1623, 0x43a9, 0xbf73, 0x40e3, 0x43ff, 0x40d3, 0x0ef5, 0x43a4, 0xb2aa, 0x4187, 0x403a, 0x1b1c, 0xb0be, 0x354e, 0xb09c, 0x402c, 0x2b3a, 0x0e11, 0x1335, 0xbf60, 0x44f1, 0x2ecf, 0x1b37, 0xb235, 0xb244, 0x428b, 0xb0bb, 0xb2d6, 0x19a6, 0x4589, 0xbf04, 0x1a8c, 0xb277, 0x13d1, 0x4394, 0x1f6f, 0xab11, 0x4335, 0x40f2, 0xb0b6, 0x1fb6, 0x403c, 0x40b0, 0x4274, 0x4345, 0x4282, 0x2a39, 0xb2e2, 0x4327, 0x4278, 0x44ab, 0xb014, 0x2313, 0x425e, 0x41e4, 0xbf6f, 0x1cd2, 0x40c1, 0x3319, 0x40dc, 0x43a4, 0x1839, 0x0638, 0x42b7, 0xbf17, 0x42b9, 0x0c5b, 0xb0e4, 0xb29a, 0xba78, 0xb290, 0x1ed9, 0xbf05, 0xb2ff, 0x42dc, 0x4253, 0x417a, 0x4304, 0x16d8, 0x3184, 0xb257, 0x3bd3, 0x419f, 0x3bd5, 0x4068, 0x10b7, 0x0f9e, 0x40a9, 0x4263, 0x414f, 0x43cd, 0xbfd0, 0xb0d9, 0x411e, 0xb26b, 0x3f5f, 0xbad3, 0x148b, 0x187a, 0x42ce, 0xb296, 0x1d75, 0xbf15, 0x4637, 0x42d9, 0x44d8, 0x4089, 0x05a3, 0x43d8, 0x43ad, 0x4091, 0xb21a, 0xb2bd, 0x4027, 0x1a6a, 0x40a2, 0x41ac, 0xa8f3, 0x41f9, 0xbf31, 0x4345, 0x3a56, 0xa529, 0x4215, 0x2faa, 0xb2b4, 0x195b, 0xb275, 0x4181, 0xba12, 0x43a6, 0x43f5, 0x315d, 0x4629, 0x1d9f, 0xbf94, 0x4212, 0x417b, 0x417c, 0xbfd1, 0x4614, 0x427d, 0x4140, 0xb2ae, 0x41ad, 0x1f90, 0x4286, 0x42ff, 0xac6c, 0xa113, 0xb29a, 0xb2e0, 0x0304, 0x46ed, 0xb2b4, 0xbf2c, 0x1079, 0x4056, 0x424b, 0x40b0, 0x43c2, 0x400d, 0xb2ba, 0xa574, 0x4354, 0x1145, 0x4567, 0x46a9, 0xba63, 0x4684, 0x4259, 0x4396, 0xb231, 0x4388, 0x4047, 0x40c5, 0x42b9, 0xba19, 0x31fc, 0xb012, 0x4154, 0x1a7b, 0x435c, 0xbf3b, 0x4211, 0x4136, 0xafba, 0x1a25, 0x4348, 0xb049, 0xba0e, 0xba6d, 0x43bd, 0xb231, 0xb2b6, 0x464e, 0x17cd, 0x4050, 0x438a, 0x410a, 0x41f7, 0x0d50, 0x41f6, 0x433c, 0xb0a6, 0xbaca, 0x40c2, 0xbf48, 0x4210, 0xbfc6, 0xba0c, 0xba18, 0x4641, 0xb2b3, 0x404f, 0x44f0, 0x4317, 0x2b5f, 0x4077, 0x458e, 0x1005, 0xb2a4, 0xbf42, 0x1ce5, 0x10f8, 0x4340, 0x43ca, 0xbfe0, 0x182e, 0x38a8, 0xa2ad, 0x42ed, 0x4592, 0x2346, 0xbf70, 0x43a2, 0x4037, 0x1360, 0xbafe, 0xb0bb, 0x43b2, 0x19c0, 0xbfa1, 0x4336, 0x4397, 0x1f3f, 0xba20, 0xb0e4, 0x4134, 0x1e98, 0x1926, 0xba44, 0x434d, 0xb087, 0x4673, 0xb20e, 0xba0f, 0x262a, 0xa308, 0x2693, 0x1e06, 0x424b, 0xb096, 0x439f, 0x36fa, 0x42d6, 0xb06a, 0x40fb, 0xbf13, 0xaa9f, 0x1d6c, 0xb2e0, 0x4363, 0x10e8, 0x1c58, 0xb290, 0xb072, 0x2deb, 0x421e, 0x1897, 0x4154, 0xab61, 0xba24, 0xbf70, 0x4326, 0x406a, 0x4595, 0x4169, 0xb228, 0x1e7f, 0xb20d, 0x188c, 0xb2a2, 0x1263, 0x0cbc, 0x46b0, 0xbf37, 0x42b0, 0x4374, 0x4312, 0x2515, 0xaa4a, 0x4150, 0x41fb, 0x434e, 0x42e0, 0x42f6, 0x408c, 0x26be, 0x42ea, 0x1edf, 0x1c47, 0x402c, 0x435e, 0xbf59, 0x3faf, 0x4462, 0xba3f, 0xb27d, 0xbf9d, 0x4207, 0xaede, 0xb223, 0x437f, 0x1786, 0x42a8, 0x4262, 0xb294, 0x1a29, 0xb2d6, 0x40cf, 0x1804, 0x42cb, 0xb025, 0xb265, 0x4298, 0xba0b, 0x4627, 0xb2d2, 0x40b4, 0xbf9b, 0x407c, 0x42b8, 0x18d0, 0xb2d0, 0xa7c8, 0x3b60, 0xb259, 0x2e49, 0xb228, 0x42dd, 0xb2b1, 0x237d, 0x43cd, 0x4001, 0x1a2b, 0xba71, 0xbf3f, 0x15f9, 0xb095, 0x01dc, 0x365f, 0x142e, 0xab9e, 0x4242, 0x4629, 0x424d, 0xb229, 0x404c, 0x0a33, 0x41a0, 0x455f, 0x077d, 0x1eb8, 0x1ba4, 0x13d8, 0x3aba, 0x1dbd, 0x4289, 0xbfca, 0x4253, 0x31bd, 0xb025, 0x27c1, 0x42dc, 0x1909, 0x37cd, 0xb28f, 0x43f0, 0x42af, 0x4185, 0xba6f, 0x466a, 0x15c5, 0x42e2, 0x3d8e, 0xba2d, 0x27ef, 0x45e6, 0xbfa3, 0x4204, 0x41b6, 0xb2bc, 0x4025, 0xbf67, 0x0886, 0x3457, 0x1cc4, 0x276c, 0x42a4, 0x3f63, 0xbad3, 0xbf16, 0xba62, 0xb087, 0x1e84, 0x4015, 0xb068, 0x31ca, 0x411e, 0x1fd1, 0xb01f, 0x4607, 0x1d77, 0x461c, 0x43cc, 0x401f, 0xb2b5, 0xa43d, 0xba66, 0xb28b, 0xbf16, 0xb209, 0x4097, 0x417e, 0x40bb, 0xa1b2, 0x4443, 0x4042, 0x405c, 0x1bfc, 0xba06, 0xb098, 0xb014, 0x40ec, 0x4159, 0x417a, 0xb2a6, 0x2ff6, 0xb21b, 0x44f8, 0x420a, 0xb239, 0x4156, 0xbf12, 0x1d1f, 0x42b6, 0xba5f, 0xb0a9, 0xbfe2, 0x43bd, 0x4384, 0x44bd, 0x4085, 0x43e4, 0x199f, 0x41bc, 0x186b, 0x429b, 0xb285, 0x1bf3, 0xb0ec, 0x4155, 0x40ff, 0x4019, 0x439f, 0xb0ad, 0x35bd, 0x21d8, 0x417f, 0x434d, 0x180b, 0x1a8d, 0xab25, 0xba3e, 0x1832, 0xbf37, 0x40f9, 0x427a, 0x4184, 0xba66, 0xba18, 0x4022, 0xbf60, 0xb2cc, 0xb2f2, 0x4127, 0x433b, 0xb0bc, 0xba3c, 0x4189, 0x439d, 0xb0e3, 0x4685, 0x3f24, 0x1d66, 0xbf08, 0x43c5, 0xb2de, 0x40f3, 0x183e, 0x430c, 0x40ea, 0x19e2, 0x1cd2, 0x1cf6, 0x3a92, 0xb0d3, 0xb2c3, 0x4236, 0x4313, 0x3162, 0x406d, 0xbf90, 0x42d3, 0x46d4, 0x40e9, 0x41a1, 0xa0cc, 0x4071, 0xba15, 0xbfa3, 0x3d16, 0x4361, 0x4247, 0x04b4, 0xb0ee, 0x1f85, 0x3042, 0x41a7, 0xb242, 0x428b, 0x4322, 0x420e, 0x38df, 0x4083, 0x41f9, 0x06c0, 0x420b, 0xb2a2, 0xb20f, 0xbf63, 0x4148, 0x0544, 0x4066, 0xa5e5, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x1ad1dd6f, 0x8a780aab, 0x92d86fe7, 0x3dcc1243, 0x715b8d62, 0xdd61381a, 0x5655e1f0, 0x38a9fd45, 0x5503834e, 0x5c5e12c5, 0xc6ca1316, 0xf112ee7a, 0x4c667450, 0xbace516f, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0x78000000, 0xe27ff7b4, 0x00000000, 0x00000000, 0xff7c0000, 0x00001b68, 0xa713ffdf, 0xfffff7b4, 0x05001840, 0x00000000, 0x1bcd9664, 0xf112ee7a, 0x1bcd9664, 0xa713fcfc, 0x00000000, 0x600001d0 }, + Instructions = [0xb2ea, 0x42ba, 0x46c5, 0x422b, 0x1be5, 0x02d1, 0x1caa, 0x41bc, 0x43bd, 0x1dfd, 0xa8ec, 0xb044, 0x0ec5, 0x0aa4, 0x4022, 0x45c5, 0xb00b, 0x42da, 0x04c3, 0x00d9, 0x1e50, 0xbf03, 0x4184, 0x4254, 0xb282, 0x00fc, 0xb041, 0xb27c, 0xbafd, 0x18fc, 0x417c, 0x41d6, 0x4313, 0xba21, 0xb237, 0xbfb4, 0xb29f, 0xb260, 0x1acf, 0x21b0, 0xb062, 0xbac1, 0xbacb, 0x41aa, 0x1399, 0xb255, 0xb28d, 0x1f91, 0x408a, 0x1391, 0xb200, 0x40ba, 0x4234, 0xbad2, 0x4031, 0x417a, 0x43fe, 0x40ff, 0x4131, 0x44c2, 0xbf6d, 0xba23, 0xb22a, 0x1a46, 0x432b, 0x1a26, 0x1525, 0x4148, 0x421b, 0x3ac6, 0xba73, 0xb007, 0x448c, 0xb211, 0x40e9, 0xba0c, 0x2a7e, 0x409b, 0x4478, 0x4495, 0xba61, 0x40e5, 0x465d, 0x4110, 0xb07e, 0xbf04, 0x4174, 0x1ce1, 0xb2b7, 0xb26a, 0x40e2, 0x11ea, 0x091b, 0x46d5, 0x1def, 0x4351, 0x4244, 0x405a, 0x4109, 0xa87b, 0xb249, 0x44b1, 0xba4f, 0xb038, 0xb083, 0xbff0, 0x4016, 0x43f0, 0xb092, 0x03f6, 0x19ad, 0x4287, 0xbf76, 0x43b0, 0x4356, 0x3e6a, 0x1aa0, 0x41c5, 0xb2d4, 0x1cb6, 0xba0c, 0x43ce, 0x45f2, 0xb066, 0x361b, 0x294f, 0x4133, 0xaa78, 0x4659, 0x4019, 0x4310, 0x4158, 0x412d, 0x4077, 0x41d9, 0xba7e, 0xbf96, 0x112e, 0x3932, 0xb0cf, 0x4395, 0x4237, 0x2cd3, 0x35bb, 0x03ff, 0x3c3f, 0xa63b, 0x4352, 0x4110, 0x04e4, 0xaad1, 0xb05a, 0xb2af, 0x4101, 0x4309, 0x43c7, 0xa7cc, 0x1b1d, 0xb2bc, 0x42b2, 0x446d, 0x42e2, 0x4044, 0xbfae, 0xbfd0, 0xa92b, 0x2ca8, 0xba7a, 0x0c15, 0x18af, 0x10c6, 0x4125, 0x411c, 0xb290, 0x40c7, 0x38e2, 0x425a, 0x26d4, 0x45ca, 0x46b5, 0xa9af, 0xbfab, 0x401a, 0x3480, 0x43e2, 0xb205, 0xb06b, 0xb0ce, 0x4213, 0xba35, 0x42d3, 0x1d9c, 0x40c8, 0x43dd, 0x42cc, 0x264c, 0x0f86, 0xbf8a, 0x18b3, 0xb0b6, 0xbff0, 0x08c3, 0x146a, 0x43a1, 0xbfad, 0xb024, 0x419b, 0xada4, 0xb207, 0xa205, 0xb2b0, 0x4013, 0x1ffc, 0xb2dc, 0xb2a6, 0x4189, 0xa033, 0x373b, 0xa54c, 0x4229, 0x1f08, 0xbf17, 0x426b, 0xbf90, 0x18ca, 0xa154, 0x41c6, 0x3c30, 0x426a, 0x431a, 0x1add, 0xb0d0, 0xad69, 0x1d25, 0xbf1f, 0xb2c7, 0x26fe, 0x1dc6, 0xacb6, 0xba38, 0x4554, 0x19cd, 0x4167, 0xa82c, 0xb2d0, 0x15fe, 0x2a17, 0x43cf, 0x45bc, 0x4002, 0x438b, 0xb24a, 0x1bca, 0xb00a, 0x40e5, 0x4367, 0xbfa5, 0x425c, 0x1a88, 0x0641, 0x41e3, 0xb22c, 0xb245, 0x42d5, 0xb23f, 0x4615, 0x43fc, 0xbaed, 0x4272, 0x414c, 0xbf31, 0x41c1, 0xb2df, 0xb2cb, 0x402b, 0x42a6, 0x4356, 0xbf3e, 0xb2e9, 0x2814, 0xbfa0, 0x4143, 0xbfe0, 0x0b79, 0x1b81, 0x38a3, 0x412f, 0x20d2, 0x4068, 0x42cb, 0xbae8, 0x2a4f, 0x1d57, 0xb09d, 0x4168, 0xb208, 0x41e9, 0x408c, 0x357e, 0x469d, 0x43eb, 0x4189, 0xbac2, 0x40d8, 0x4580, 0xbf7a, 0x0b11, 0x4070, 0x4471, 0x43f4, 0x43b0, 0x4586, 0xba4a, 0x346a, 0xa7e9, 0x43b2, 0xbac3, 0x0423, 0x40d6, 0x248d, 0x40a5, 0x420a, 0x438f, 0x427b, 0x4202, 0x31ec, 0x2e50, 0xba26, 0xbf5e, 0x41f2, 0xb08f, 0x42ab, 0x2f2e, 0x4111, 0xbfd0, 0x4324, 0x40de, 0x4236, 0xba1b, 0x02e1, 0x3f0c, 0x0a8d, 0xa1e9, 0x092b, 0x42d4, 0x45dd, 0x43f4, 0x3b18, 0xaff9, 0xba2f, 0xba68, 0xb0de, 0x19b1, 0xbf37, 0x43c5, 0x1642, 0x41d7, 0xbf00, 0x311f, 0xbfd0, 0x4254, 0x423a, 0x4124, 0x1eb4, 0x4364, 0x4365, 0x40e0, 0xbf3e, 0x3c12, 0x43c1, 0x2fbc, 0xb0bd, 0xbac3, 0x4014, 0x41f6, 0x40dc, 0x40ac, 0x4330, 0x1e86, 0x438b, 0xb0d0, 0xac1f, 0x055f, 0x378c, 0x1f34, 0x1f9c, 0x0795, 0xb0c8, 0x410b, 0x4050, 0xbfdb, 0x41eb, 0x3e25, 0x4171, 0x432d, 0xb2d0, 0xb25f, 0xb281, 0x41e1, 0x432f, 0x4073, 0xbf60, 0x40fc, 0xbaf7, 0xb0ba, 0xaac8, 0x4318, 0x410c, 0xa369, 0xb08a, 0x42f8, 0x1c9b, 0xbf78, 0x34a5, 0x3209, 0xadae, 0x4272, 0x0d71, 0xa43d, 0x1180, 0x4229, 0x0689, 0x4313, 0xb208, 0x444c, 0x3a48, 0xba19, 0x4007, 0x4107, 0x2a6a, 0x41be, 0xb2ee, 0xbf42, 0x4332, 0x1870, 0x10cb, 0xb078, 0x411f, 0x29f2, 0xbfe0, 0x20df, 0x41f2, 0x39f3, 0x3ecf, 0x42fc, 0x1623, 0x43a9, 0xbf73, 0x40e3, 0x43ff, 0x40d3, 0x0ef5, 0x43a4, 0xb2aa, 0x4187, 0x403a, 0x1b1c, 0xb0be, 0x354e, 0xb09c, 0x402c, 0x2b3a, 0x0e11, 0x1335, 0xbf60, 0x44f1, 0x2ecf, 0x1b37, 0xb235, 0xb244, 0x428b, 0xb0bb, 0xb2d6, 0x19a6, 0x4589, 0xbf04, 0x1a8c, 0xb277, 0x13d1, 0x4394, 0x1f6f, 0xab11, 0x4335, 0x40f2, 0xb0b6, 0x1fb6, 0x403c, 0x40b0, 0x4274, 0x4345, 0x4282, 0x2a39, 0xb2e2, 0x4327, 0x4278, 0x44ab, 0xb014, 0x2313, 0x425e, 0x41e4, 0xbf6f, 0x1cd2, 0x40c1, 0x3319, 0x40dc, 0x43a4, 0x1839, 0x0638, 0x42b7, 0xbf17, 0x42b9, 0x0c5b, 0xb0e4, 0xb29a, 0xba78, 0xb290, 0x1ed9, 0xbf05, 0xb2ff, 0x42dc, 0x4253, 0x417a, 0x4304, 0x16d8, 0x3184, 0xb257, 0x3bd3, 0x419f, 0x3bd5, 0x4068, 0x10b7, 0x0f9e, 0x40a9, 0x4263, 0x414f, 0x43cd, 0xbfd0, 0xb0d9, 0x411e, 0xb26b, 0x3f5f, 0xbad3, 0x148b, 0x187a, 0x42ce, 0xb296, 0x1d75, 0xbf15, 0x4637, 0x42d9, 0x44d8, 0x4089, 0x05a3, 0x43d8, 0x43ad, 0x4091, 0xb21a, 0xb2bd, 0x4027, 0x1a6a, 0x40a2, 0x41ac, 0xa8f3, 0x41f9, 0xbf31, 0x4345, 0x3a56, 0xa529, 0x4215, 0x2faa, 0xb2b4, 0x195b, 0xb275, 0x4181, 0xba12, 0x43a6, 0x43f5, 0x315d, 0x4629, 0x1d9f, 0xbf94, 0x4212, 0x417b, 0x417c, 0xbfd1, 0x4614, 0x427d, 0x4140, 0xb2ae, 0x41ad, 0x1f90, 0x4286, 0x42ff, 0xac6c, 0xa113, 0xb29a, 0xb2e0, 0x0304, 0x46ed, 0xb2b4, 0xbf2c, 0x1079, 0x4056, 0x424b, 0x40b0, 0x43c2, 0x400d, 0xb2ba, 0xa574, 0x4354, 0x1145, 0x4567, 0x46a9, 0xba63, 0x4684, 0x4259, 0x4396, 0xb231, 0x4388, 0x4047, 0x40c5, 0x42b9, 0xba19, 0x31fc, 0xb012, 0x4154, 0x1a7b, 0x435c, 0xbf3b, 0x4211, 0x4136, 0xafba, 0x1a25, 0x4348, 0xb049, 0xba0e, 0xba6d, 0x43bd, 0xb231, 0xb2b6, 0x464e, 0x17cd, 0x4050, 0x438a, 0x410a, 0x41f7, 0x0d50, 0x41f6, 0x433c, 0xb0a6, 0xbaca, 0x40c2, 0xbf48, 0x4210, 0xbfc6, 0xba0c, 0xba18, 0x4641, 0xb2b3, 0x404f, 0x44f0, 0x4317, 0x2b5f, 0x4077, 0x458e, 0x1005, 0xb2a4, 0xbf42, 0x1ce5, 0x10f8, 0x4340, 0x43ca, 0xbfe0, 0x182e, 0x38a8, 0xa2ad, 0x42ed, 0x4592, 0x2346, 0xbf70, 0x43a2, 0x4037, 0x1360, 0xbafe, 0xb0bb, 0x43b2, 0x19c0, 0xbfa1, 0x4336, 0x4397, 0x1f3f, 0xba20, 0xb0e4, 0x4134, 0x1e98, 0x1926, 0xba44, 0x434d, 0xb087, 0x4673, 0xb20e, 0xba0f, 0x262a, 0xa308, 0x2693, 0x1e06, 0x424b, 0xb096, 0x439f, 0x36fa, 0x42d6, 0xb06a, 0x40fb, 0xbf13, 0xaa9f, 0x1d6c, 0xb2e0, 0x4363, 0x10e8, 0x1c58, 0xb290, 0xb072, 0x2deb, 0x421e, 0x1897, 0x4154, 0xab61, 0xba24, 0xbf70, 0x4326, 0x406a, 0x4595, 0x4169, 0xb228, 0x1e7f, 0xb20d, 0x188c, 0xb2a2, 0x1263, 0x0cbc, 0x46b0, 0xbf37, 0x42b0, 0x4374, 0x4312, 0x2515, 0xaa4a, 0x4150, 0x41fb, 0x434e, 0x42e0, 0x42f6, 0x408c, 0x26be, 0x42ea, 0x1edf, 0x1c47, 0x402c, 0x435e, 0xbf59, 0x3faf, 0x4462, 0xba3f, 0xb27d, 0xbf9d, 0x4207, 0xaede, 0xb223, 0x437f, 0x1786, 0x42a8, 0x4262, 0xb294, 0x1a29, 0xb2d6, 0x40cf, 0x1804, 0x42cb, 0xb025, 0xb265, 0x4298, 0xba0b, 0x4627, 0xb2d2, 0x40b4, 0xbf9b, 0x407c, 0x42b8, 0x18d0, 0xb2d0, 0xa7c8, 0x3b60, 0xb259, 0x2e49, 0xb228, 0x42dd, 0xb2b1, 0x237d, 0x43cd, 0x4001, 0x1a2b, 0xba71, 0xbf3f, 0x15f9, 0xb095, 0x01dc, 0x365f, 0x142e, 0xab9e, 0x4242, 0x4629, 0x424d, 0xb229, 0x404c, 0x0a33, 0x41a0, 0x455f, 0x077d, 0x1eb8, 0x1ba4, 0x13d8, 0x3aba, 0x1dbd, 0x4289, 0xbfca, 0x4253, 0x31bd, 0xb025, 0x27c1, 0x42dc, 0x1909, 0x37cd, 0xb28f, 0x43f0, 0x42af, 0x4185, 0xba6f, 0x466a, 0x15c5, 0x42e2, 0x3d8e, 0xba2d, 0x27ef, 0x45e6, 0xbfa3, 0x4204, 0x41b6, 0xb2bc, 0x4025, 0xbf67, 0x0886, 0x3457, 0x1cc4, 0x276c, 0x42a4, 0x3f63, 0xbad3, 0xbf16, 0xba62, 0xb087, 0x1e84, 0x4015, 0xb068, 0x31ca, 0x411e, 0x1fd1, 0xb01f, 0x4607, 0x1d77, 0x461c, 0x43cc, 0x401f, 0xb2b5, 0xa43d, 0xba66, 0xb28b, 0xbf16, 0xb209, 0x4097, 0x417e, 0x40bb, 0xa1b2, 0x4443, 0x4042, 0x405c, 0x1bfc, 0xba06, 0xb098, 0xb014, 0x40ec, 0x4159, 0x417a, 0xb2a6, 0x2ff6, 0xb21b, 0x44f8, 0x420a, 0xb239, 0x4156, 0xbf12, 0x1d1f, 0x42b6, 0xba5f, 0xb0a9, 0xbfe2, 0x43bd, 0x4384, 0x44bd, 0x4085, 0x43e4, 0x199f, 0x41bc, 0x186b, 0x429b, 0xb285, 0x1bf3, 0xb0ec, 0x4155, 0x40ff, 0x4019, 0x439f, 0xb0ad, 0x35bd, 0x21d8, 0x417f, 0x434d, 0x180b, 0x1a8d, 0xab25, 0xba3e, 0x1832, 0xbf37, 0x40f9, 0x427a, 0x4184, 0xba66, 0xba18, 0x4022, 0xbf60, 0xb2cc, 0xb2f2, 0x4127, 0x433b, 0xb0bc, 0xba3c, 0x4189, 0x439d, 0xb0e3, 0x4685, 0x3f24, 0x1d66, 0xbf08, 0x43c5, 0xb2de, 0x40f3, 0x183e, 0x430c, 0x40ea, 0x19e2, 0x1cd2, 0x1cf6, 0x3a92, 0xb0d3, 0xb2c3, 0x4236, 0x4313, 0x3162, 0x406d, 0xbf90, 0x42d3, 0x46d4, 0x40e9, 0x41a1, 0xa0cc, 0x4071, 0xba15, 0xbfa3, 0x3d16, 0x4361, 0x4247, 0x04b4, 0xb0ee, 0x1f85, 0x3042, 0x41a7, 0xb242, 0x428b, 0x4322, 0x420e, 0x38df, 0x4083, 0x41f9, 0x06c0, 0x420b, 0xb2a2, 0xb20f, 0xbf63, 0x4148, 0x0544, 0x4066, 0xa5e5, 0x4770, 0xe7fe + ], + StartRegs = [0x1ad1dd6f, 0x8a780aab, 0x92d86fe7, 0x3dcc1243, 0x715b8d62, 0xdd61381a, 0x5655e1f0, 0x38a9fd45, 0x5503834e, 0x5c5e12c5, 0xc6ca1316, 0xf112ee7a, 0x4c667450, 0xbace516f, 0x00000000, 0x200001f0 + ], + FinalRegs = [0x78000000, 0xe27ff7b4, 0x00000000, 0x00000000, 0xff7c0000, 0x00001b68, 0xa713ffdf, 0xfffff7b4, 0x05001840, 0x00000000, 0x1bcd9664, 0xf112ee7a, 0x1bcd9664, 0xa713fcfc, 0x00000000, 0x600001d0 + ], }, new() { - Instructions = new ushort[] { 0x43ea, 0xb039, 0xb0f0, 0x4163, 0x08a9, 0xba5c, 0x410d, 0x06ef, 0x42b8, 0xb095, 0x4045, 0x456a, 0xbf74, 0xabfb, 0x4084, 0x159e, 0xb230, 0x4372, 0xb005, 0x404f, 0x4017, 0x43f0, 0x43da, 0x40c7, 0xbf9f, 0x4207, 0x44c0, 0x0047, 0x0b05, 0xbf7b, 0xbfe0, 0x4057, 0x1d47, 0x1f0f, 0x40b2, 0x403c, 0xb09f, 0x03e8, 0x4246, 0xb26d, 0xb26c, 0xbf04, 0x42d6, 0xb040, 0x4631, 0x4092, 0x430e, 0xbf00, 0x40cc, 0xb243, 0x214e, 0x06a1, 0xbfc6, 0x40b0, 0x4631, 0x43cd, 0x4340, 0x13ca, 0x14d1, 0x4603, 0x4079, 0x2c83, 0x421d, 0xbacb, 0xafa3, 0x409c, 0xb2f9, 0xa17d, 0x30ee, 0xba61, 0x4207, 0x0a66, 0x420d, 0x4189, 0x41ea, 0x20f3, 0x42b9, 0xb20d, 0xa046, 0x4388, 0xb2bc, 0xbf7c, 0xb010, 0x43a3, 0xb21d, 0xb22f, 0xb2c8, 0x40bb, 0x19aa, 0xa4a9, 0xac73, 0x4296, 0x2be3, 0x0f78, 0x4107, 0x421a, 0x16f8, 0x427c, 0x444b, 0xbacb, 0x40b4, 0x0480, 0xb0b8, 0xba71, 0x402b, 0x40b5, 0x46a8, 0xbf34, 0xb25d, 0x2418, 0xaac1, 0xb251, 0x2ca1, 0xbf60, 0x4012, 0xbae5, 0xba4d, 0xba63, 0x4172, 0x41bd, 0xa74e, 0xbad9, 0x1f15, 0xb2d0, 0xb26e, 0x2e39, 0x413e, 0x4026, 0x4136, 0xb0eb, 0xb2fe, 0x4211, 0xbf76, 0x44fb, 0x43da, 0x3f14, 0x01c4, 0x41d7, 0x41ee, 0x0326, 0x237a, 0xb026, 0xbfbf, 0xb286, 0x40d8, 0x183c, 0xb2fc, 0x43cd, 0x41d4, 0x1b4c, 0x42c7, 0x03da, 0x4156, 0x40ce, 0x1888, 0x02d2, 0xba79, 0x40ef, 0x4081, 0xb23b, 0x4099, 0x417b, 0xbfa0, 0x4152, 0x4158, 0xbff0, 0xad95, 0x4477, 0x4176, 0x4132, 0xbadb, 0xbf0c, 0xba3a, 0x43e2, 0x1e39, 0x438f, 0x2393, 0x413b, 0x423d, 0xba05, 0x30e8, 0x4383, 0x4081, 0x1dc3, 0xba17, 0xbf9b, 0x294d, 0xac43, 0x18c2, 0x4362, 0xb2d4, 0x4349, 0x420d, 0x42a7, 0x42df, 0x2363, 0x40c8, 0x226c, 0x417a, 0xbfd0, 0x435c, 0x411d, 0xb07f, 0xba54, 0x1da1, 0xa883, 0x1b72, 0x4022, 0x43cf, 0x129b, 0x0952, 0x1a40, 0x1aaf, 0xbf3a, 0x406e, 0xb274, 0xb0a9, 0xbfe0, 0xba4e, 0x4004, 0x38de, 0x41cc, 0x4167, 0xb2a4, 0x413b, 0x1b27, 0xb072, 0x1ed4, 0x3b32, 0xb237, 0xb0fe, 0x1821, 0x414d, 0x41f1, 0x42b0, 0xbf1b, 0x426e, 0x460d, 0x4246, 0x41b1, 0x1c38, 0x4473, 0x413c, 0x4143, 0x24b8, 0x43bf, 0x43dc, 0x3a1b, 0x41fd, 0x4386, 0xba70, 0x41e7, 0x2256, 0x4086, 0x4341, 0x1af4, 0xb21b, 0xbfa0, 0x1f37, 0x4598, 0x431d, 0xbf63, 0x2db5, 0x416c, 0x428d, 0xb2a5, 0x4558, 0xb2f6, 0x41a8, 0x4014, 0x43f5, 0x33d6, 0x41cb, 0xb268, 0x4275, 0xb023, 0x438e, 0xbfe4, 0x415e, 0x19b9, 0x468a, 0xb252, 0x3626, 0x43ea, 0x2d17, 0x40aa, 0x42aa, 0xbfe0, 0x43a3, 0x1b9b, 0xba61, 0x4330, 0x0dbd, 0xa126, 0x40c7, 0x41de, 0xbfc6, 0x404d, 0x46a4, 0x4647, 0x4340, 0x40c8, 0xbf80, 0x42c4, 0x1df3, 0xbf90, 0xa7ac, 0xba4e, 0x4308, 0x0dac, 0xba47, 0x1d7a, 0xb06e, 0x3e91, 0x2e8b, 0x4008, 0x1c78, 0xb219, 0x4161, 0x410d, 0x4076, 0xbf9d, 0xa660, 0x422a, 0x42f6, 0x19e9, 0xbf9a, 0x43fb, 0x421e, 0xb28a, 0x40a0, 0xa3a0, 0x4081, 0x1990, 0xba24, 0xbf02, 0x41d5, 0x4078, 0x4176, 0xba52, 0x1f86, 0xb042, 0x430f, 0x2816, 0x428f, 0x4084, 0xa29f, 0xb019, 0xbfc8, 0x432c, 0x40a9, 0x40a3, 0x1b29, 0x43f5, 0x3867, 0x40cd, 0x4330, 0xb277, 0x3830, 0x41d4, 0xb083, 0x4164, 0x36a6, 0x4082, 0x4141, 0x1167, 0xb2fa, 0x1a54, 0x4284, 0x43e4, 0xa27e, 0xa4e3, 0x413d, 0xbf9a, 0x08da, 0x1b35, 0x4385, 0xb232, 0x4166, 0x422c, 0xbf90, 0x412f, 0xbf2f, 0x41b9, 0x1b51, 0xba0c, 0xbfb0, 0xba34, 0xbf8f, 0x1d3d, 0x30c1, 0x439c, 0x4543, 0xb2d0, 0x1fef, 0x4359, 0x4167, 0xb29f, 0x4331, 0xb2f5, 0x4308, 0xa8a7, 0xba06, 0x400f, 0x43e8, 0x246f, 0x4206, 0x416f, 0xb22c, 0x4043, 0x42b3, 0xbacd, 0x41ac, 0xb280, 0x27e3, 0xbf44, 0x402b, 0x4009, 0xb22b, 0x423d, 0xb28a, 0xb234, 0x4114, 0x42c3, 0x2c01, 0x4344, 0x40a0, 0x41e8, 0x180b, 0x259d, 0x4296, 0x0859, 0x4004, 0xbf6e, 0x43a3, 0x42ca, 0x409f, 0xbaca, 0x1c37, 0x4085, 0x40c7, 0x4113, 0xbac5, 0xb02d, 0x1c91, 0x3cb2, 0x0819, 0x4352, 0x432f, 0x3f57, 0x3c39, 0x43a0, 0xb063, 0x430f, 0x4374, 0x4131, 0xbf52, 0x43d4, 0x432d, 0x07d6, 0xa457, 0x431b, 0xad5a, 0xb24f, 0x16dd, 0xb026, 0x22aa, 0x432c, 0xa6c9, 0x41f6, 0xac8c, 0xb07d, 0xa40a, 0x4137, 0xbf95, 0x3196, 0x41e4, 0xb2c0, 0x4362, 0xb24b, 0x407a, 0x4093, 0xbfdf, 0x0cd1, 0x3b7c, 0x427f, 0x4312, 0xa0a2, 0x20fd, 0x41cc, 0xba31, 0x424e, 0x1aa4, 0xbacb, 0xb26a, 0x4048, 0x4416, 0x43e5, 0x42d4, 0xba20, 0xbf8f, 0x4079, 0xb27e, 0x4271, 0x40ee, 0x466d, 0x2d6c, 0x1843, 0x4083, 0x4327, 0x0cc7, 0x4582, 0xbf6f, 0x424c, 0xafb3, 0x41a0, 0x4239, 0x4404, 0xbf80, 0x418d, 0x43e0, 0x1ab2, 0xbfaf, 0x43ab, 0x4357, 0x42cb, 0xb0bf, 0xba12, 0x1396, 0x41de, 0x4116, 0x2112, 0x1b76, 0x4007, 0x44e9, 0xb224, 0x14d0, 0x402d, 0x412e, 0xb2d1, 0x2afc, 0x42f2, 0x1eca, 0x3412, 0x4472, 0x4252, 0x40cd, 0xb0fa, 0x0898, 0xbf79, 0xbaca, 0x3752, 0x0b3b, 0x1f37, 0x3758, 0x42b8, 0x43bd, 0x01e7, 0x42d1, 0x400a, 0xb044, 0xb2c6, 0x40bb, 0x4384, 0x3f19, 0x43ae, 0xba2c, 0x05ef, 0xb211, 0x1e3a, 0x437d, 0xbfa0, 0xbf7b, 0xb0a2, 0x4326, 0x1c73, 0x425b, 0x412d, 0x44d0, 0x11c1, 0x1b69, 0xb2c3, 0x1f89, 0xa6b4, 0x2ed9, 0x418d, 0x1ccb, 0xaa53, 0x402d, 0x1a6b, 0x3c2d, 0x4622, 0xb2c7, 0xa4b8, 0x4066, 0x45cb, 0x10a2, 0x4010, 0x41bb, 0x4300, 0xbf15, 0xb0b0, 0xba4e, 0xb29f, 0x1d46, 0xba36, 0x43b8, 0x0c37, 0x4499, 0x1bcf, 0xae12, 0xb26a, 0x42d5, 0x4362, 0x25db, 0xba02, 0xb29e, 0x3650, 0x4564, 0x4158, 0x1d0e, 0x4132, 0x4237, 0xb06f, 0x4377, 0xbf92, 0xbfb0, 0x4151, 0x443e, 0x439f, 0x43af, 0xaf28, 0x4151, 0x40d7, 0x40c7, 0x070e, 0x467f, 0xb226, 0x4418, 0xb016, 0x4288, 0xb009, 0x3e9f, 0x2434, 0x45f5, 0xb0a5, 0x1b5f, 0xb270, 0xbf39, 0xb2b4, 0x4093, 0x169a, 0x43c0, 0x29c4, 0xbf61, 0x4206, 0x2bcc, 0x401c, 0x43b0, 0x432e, 0x07bf, 0x40a7, 0x1b14, 0xb09b, 0x1a2b, 0xa498, 0xbaf3, 0x4204, 0x415b, 0xb02f, 0x42c9, 0x4264, 0x40eb, 0x40b9, 0x2f8a, 0x162c, 0x1b93, 0x18c7, 0x40d6, 0x4484, 0xbf63, 0x407b, 0x40cc, 0x19bd, 0x4106, 0xbaec, 0x4076, 0x4271, 0xadcc, 0x42b6, 0xbf12, 0xb2fc, 0xb267, 0x40ea, 0x40c4, 0x34ed, 0xba7e, 0x0e23, 0xae59, 0xbf4a, 0x0743, 0x43d7, 0x42dd, 0x4097, 0x40ed, 0x40a8, 0x45ed, 0x1e93, 0xb213, 0x1c3b, 0x0ea9, 0x420d, 0xb038, 0xba5a, 0x42ed, 0x41e0, 0x41b2, 0x4327, 0x19c5, 0x42d8, 0x26fb, 0x43fd, 0x0f88, 0x43a7, 0x1c9b, 0xb207, 0xbfc9, 0xb2c5, 0x430a, 0x2512, 0x4356, 0x41ed, 0x4078, 0x40c0, 0xbf99, 0x4141, 0xba72, 0x4226, 0x42d0, 0xb2b2, 0x4150, 0x42d1, 0xb04c, 0xba33, 0x2f36, 0x45b0, 0x18b0, 0x1d78, 0xbf43, 0x426a, 0x4350, 0x4287, 0x406a, 0x1911, 0x4199, 0x4074, 0xbf9a, 0x43f2, 0x4344, 0x41f6, 0x0efc, 0x30a0, 0x2e3e, 0x4359, 0xb261, 0x46b5, 0x4164, 0x25dd, 0x0839, 0xa6d1, 0x4181, 0x4627, 0x419a, 0xba3a, 0xbf16, 0x3ee3, 0x158a, 0x407d, 0x424f, 0xba32, 0xb212, 0x41f9, 0xb019, 0xbf80, 0xbfa0, 0xb2af, 0xb2bb, 0xb21e, 0x427c, 0x441b, 0x40e7, 0x3e04, 0xba75, 0xbfde, 0x40dc, 0x4278, 0x2b7d, 0x3966, 0xb06e, 0x1733, 0x465b, 0x4185, 0xb2f9, 0x42dd, 0xb246, 0xbff0, 0xb019, 0x42e4, 0xb259, 0x42a0, 0xba79, 0x18d5, 0x2f05, 0x4093, 0xbf7d, 0x2891, 0x423a, 0xb201, 0xb001, 0x1ce7, 0x1de1, 0xbafd, 0xb2b0, 0x42d6, 0x41f4, 0x206e, 0xb0b6, 0x3d9b, 0x3156, 0xbff0, 0x4483, 0x46d2, 0x41bb, 0x22a6, 0x413e, 0x4180, 0x3d93, 0x46f3, 0xb2e1, 0x4064, 0x42b4, 0xb279, 0xbf6c, 0x41fd, 0x42a1, 0x396b, 0x1383, 0x42ec, 0x1e32, 0x4564, 0x312c, 0x416f, 0x43be, 0x2633, 0x1e58, 0xb29b, 0x415a, 0x384f, 0x43ec, 0x428a, 0xbad6, 0x40bb, 0xba2d, 0xbf3b, 0x41fb, 0xb26f, 0x4208, 0x407e, 0xbacd, 0x1bb6, 0xbf6c, 0x435d, 0x41db, 0x2381, 0x402e, 0x4278, 0x40cb, 0xba40, 0xbac3, 0x3c20, 0x3b4a, 0x1a38, 0x437d, 0x4100, 0x40d5, 0xb0fd, 0x46c4, 0xbfdf, 0x4251, 0xba51, 0x42c7, 0x0106, 0x0ab7, 0x1cf3, 0xa039, 0x1e55, 0x42b5, 0x43c6, 0x4614, 0x409c, 0x4383, 0xbf76, 0x45f3, 0x01b8, 0xb045, 0xba1d, 0x4000, 0xbfe0, 0x41ac, 0x42e8, 0xb055, 0xa8af, 0x4413, 0x3917, 0xba4b, 0x42a6, 0xb097, 0x3a05, 0x410d, 0x43a3, 0xa1f5, 0xba69, 0x4164, 0x295b, 0xb0d1, 0x43d5, 0xbf6d, 0x0b74, 0x41c4, 0xba32, 0x1c4d, 0x40cf, 0x41c7, 0x4591, 0xa4d4, 0x4376, 0x131b, 0x42f1, 0x4308, 0x42a9, 0x1d4d, 0x41bc, 0x425f, 0x42b1, 0xacd1, 0xaa4f, 0x45de, 0x0d5f, 0x270c, 0x1e62, 0x4353, 0x4113, 0x2cc0, 0xa57c, 0x1eba, 0x4153, 0xbfa8, 0x413a, 0x41be, 0xbf2f, 0x22f9, 0xada0, 0x4171, 0xb2fc, 0x458e, 0x405a, 0x4119, 0x42a9, 0xae09, 0x435e, 0x1c93, 0xbf32, 0x1d79, 0x401d, 0x4098, 0xbfa0, 0x3409, 0x41d9, 0x46a1, 0xbfa3, 0x2470, 0x4583, 0x41be, 0xb295, 0x1aab, 0x319a, 0xbf97, 0x1b2d, 0x0205, 0x424c, 0x41a8, 0x433f, 0xbae9, 0xba25, 0xbfd0, 0x43ab, 0x401c, 0x2ddb, 0x3ade, 0x404a, 0x4203, 0xb2b9, 0x4559, 0xba40, 0xaa0b, 0x3a83, 0xa48e, 0x4288, 0x10f8, 0x40fd, 0xbfd2, 0xb09f, 0x4280, 0x40bf, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3dfcb14d, 0x03113440, 0x43d4feab, 0xf4773a5f, 0x012ea932, 0x9dad9d54, 0xf24b822f, 0x4f0bd97c, 0x95955220, 0xe3991301, 0xb50130a1, 0xe8c03445, 0x19b5cca3, 0x0afb31b9, 0x00000000, 0x000001f0 }, - FinalRegs = new uint[] { 0x00000001, 0x0000000c, 0x3bae2320, 0x00000000, 0x00001a18, 0x0006677f, 0x54cd640e, 0x0000000c, 0x001bcc0d, 0x3bae26c4, 0x001c3ffd, 0x00000000, 0x001bcc0d, 0x3bae2377, 0x00000000, 0x600001d0 }, + Instructions = [0x43ea, 0xb039, 0xb0f0, 0x4163, 0x08a9, 0xba5c, 0x410d, 0x06ef, 0x42b8, 0xb095, 0x4045, 0x456a, 0xbf74, 0xabfb, 0x4084, 0x159e, 0xb230, 0x4372, 0xb005, 0x404f, 0x4017, 0x43f0, 0x43da, 0x40c7, 0xbf9f, 0x4207, 0x44c0, 0x0047, 0x0b05, 0xbf7b, 0xbfe0, 0x4057, 0x1d47, 0x1f0f, 0x40b2, 0x403c, 0xb09f, 0x03e8, 0x4246, 0xb26d, 0xb26c, 0xbf04, 0x42d6, 0xb040, 0x4631, 0x4092, 0x430e, 0xbf00, 0x40cc, 0xb243, 0x214e, 0x06a1, 0xbfc6, 0x40b0, 0x4631, 0x43cd, 0x4340, 0x13ca, 0x14d1, 0x4603, 0x4079, 0x2c83, 0x421d, 0xbacb, 0xafa3, 0x409c, 0xb2f9, 0xa17d, 0x30ee, 0xba61, 0x4207, 0x0a66, 0x420d, 0x4189, 0x41ea, 0x20f3, 0x42b9, 0xb20d, 0xa046, 0x4388, 0xb2bc, 0xbf7c, 0xb010, 0x43a3, 0xb21d, 0xb22f, 0xb2c8, 0x40bb, 0x19aa, 0xa4a9, 0xac73, 0x4296, 0x2be3, 0x0f78, 0x4107, 0x421a, 0x16f8, 0x427c, 0x444b, 0xbacb, 0x40b4, 0x0480, 0xb0b8, 0xba71, 0x402b, 0x40b5, 0x46a8, 0xbf34, 0xb25d, 0x2418, 0xaac1, 0xb251, 0x2ca1, 0xbf60, 0x4012, 0xbae5, 0xba4d, 0xba63, 0x4172, 0x41bd, 0xa74e, 0xbad9, 0x1f15, 0xb2d0, 0xb26e, 0x2e39, 0x413e, 0x4026, 0x4136, 0xb0eb, 0xb2fe, 0x4211, 0xbf76, 0x44fb, 0x43da, 0x3f14, 0x01c4, 0x41d7, 0x41ee, 0x0326, 0x237a, 0xb026, 0xbfbf, 0xb286, 0x40d8, 0x183c, 0xb2fc, 0x43cd, 0x41d4, 0x1b4c, 0x42c7, 0x03da, 0x4156, 0x40ce, 0x1888, 0x02d2, 0xba79, 0x40ef, 0x4081, 0xb23b, 0x4099, 0x417b, 0xbfa0, 0x4152, 0x4158, 0xbff0, 0xad95, 0x4477, 0x4176, 0x4132, 0xbadb, 0xbf0c, 0xba3a, 0x43e2, 0x1e39, 0x438f, 0x2393, 0x413b, 0x423d, 0xba05, 0x30e8, 0x4383, 0x4081, 0x1dc3, 0xba17, 0xbf9b, 0x294d, 0xac43, 0x18c2, 0x4362, 0xb2d4, 0x4349, 0x420d, 0x42a7, 0x42df, 0x2363, 0x40c8, 0x226c, 0x417a, 0xbfd0, 0x435c, 0x411d, 0xb07f, 0xba54, 0x1da1, 0xa883, 0x1b72, 0x4022, 0x43cf, 0x129b, 0x0952, 0x1a40, 0x1aaf, 0xbf3a, 0x406e, 0xb274, 0xb0a9, 0xbfe0, 0xba4e, 0x4004, 0x38de, 0x41cc, 0x4167, 0xb2a4, 0x413b, 0x1b27, 0xb072, 0x1ed4, 0x3b32, 0xb237, 0xb0fe, 0x1821, 0x414d, 0x41f1, 0x42b0, 0xbf1b, 0x426e, 0x460d, 0x4246, 0x41b1, 0x1c38, 0x4473, 0x413c, 0x4143, 0x24b8, 0x43bf, 0x43dc, 0x3a1b, 0x41fd, 0x4386, 0xba70, 0x41e7, 0x2256, 0x4086, 0x4341, 0x1af4, 0xb21b, 0xbfa0, 0x1f37, 0x4598, 0x431d, 0xbf63, 0x2db5, 0x416c, 0x428d, 0xb2a5, 0x4558, 0xb2f6, 0x41a8, 0x4014, 0x43f5, 0x33d6, 0x41cb, 0xb268, 0x4275, 0xb023, 0x438e, 0xbfe4, 0x415e, 0x19b9, 0x468a, 0xb252, 0x3626, 0x43ea, 0x2d17, 0x40aa, 0x42aa, 0xbfe0, 0x43a3, 0x1b9b, 0xba61, 0x4330, 0x0dbd, 0xa126, 0x40c7, 0x41de, 0xbfc6, 0x404d, 0x46a4, 0x4647, 0x4340, 0x40c8, 0xbf80, 0x42c4, 0x1df3, 0xbf90, 0xa7ac, 0xba4e, 0x4308, 0x0dac, 0xba47, 0x1d7a, 0xb06e, 0x3e91, 0x2e8b, 0x4008, 0x1c78, 0xb219, 0x4161, 0x410d, 0x4076, 0xbf9d, 0xa660, 0x422a, 0x42f6, 0x19e9, 0xbf9a, 0x43fb, 0x421e, 0xb28a, 0x40a0, 0xa3a0, 0x4081, 0x1990, 0xba24, 0xbf02, 0x41d5, 0x4078, 0x4176, 0xba52, 0x1f86, 0xb042, 0x430f, 0x2816, 0x428f, 0x4084, 0xa29f, 0xb019, 0xbfc8, 0x432c, 0x40a9, 0x40a3, 0x1b29, 0x43f5, 0x3867, 0x40cd, 0x4330, 0xb277, 0x3830, 0x41d4, 0xb083, 0x4164, 0x36a6, 0x4082, 0x4141, 0x1167, 0xb2fa, 0x1a54, 0x4284, 0x43e4, 0xa27e, 0xa4e3, 0x413d, 0xbf9a, 0x08da, 0x1b35, 0x4385, 0xb232, 0x4166, 0x422c, 0xbf90, 0x412f, 0xbf2f, 0x41b9, 0x1b51, 0xba0c, 0xbfb0, 0xba34, 0xbf8f, 0x1d3d, 0x30c1, 0x439c, 0x4543, 0xb2d0, 0x1fef, 0x4359, 0x4167, 0xb29f, 0x4331, 0xb2f5, 0x4308, 0xa8a7, 0xba06, 0x400f, 0x43e8, 0x246f, 0x4206, 0x416f, 0xb22c, 0x4043, 0x42b3, 0xbacd, 0x41ac, 0xb280, 0x27e3, 0xbf44, 0x402b, 0x4009, 0xb22b, 0x423d, 0xb28a, 0xb234, 0x4114, 0x42c3, 0x2c01, 0x4344, 0x40a0, 0x41e8, 0x180b, 0x259d, 0x4296, 0x0859, 0x4004, 0xbf6e, 0x43a3, 0x42ca, 0x409f, 0xbaca, 0x1c37, 0x4085, 0x40c7, 0x4113, 0xbac5, 0xb02d, 0x1c91, 0x3cb2, 0x0819, 0x4352, 0x432f, 0x3f57, 0x3c39, 0x43a0, 0xb063, 0x430f, 0x4374, 0x4131, 0xbf52, 0x43d4, 0x432d, 0x07d6, 0xa457, 0x431b, 0xad5a, 0xb24f, 0x16dd, 0xb026, 0x22aa, 0x432c, 0xa6c9, 0x41f6, 0xac8c, 0xb07d, 0xa40a, 0x4137, 0xbf95, 0x3196, 0x41e4, 0xb2c0, 0x4362, 0xb24b, 0x407a, 0x4093, 0xbfdf, 0x0cd1, 0x3b7c, 0x427f, 0x4312, 0xa0a2, 0x20fd, 0x41cc, 0xba31, 0x424e, 0x1aa4, 0xbacb, 0xb26a, 0x4048, 0x4416, 0x43e5, 0x42d4, 0xba20, 0xbf8f, 0x4079, 0xb27e, 0x4271, 0x40ee, 0x466d, 0x2d6c, 0x1843, 0x4083, 0x4327, 0x0cc7, 0x4582, 0xbf6f, 0x424c, 0xafb3, 0x41a0, 0x4239, 0x4404, 0xbf80, 0x418d, 0x43e0, 0x1ab2, 0xbfaf, 0x43ab, 0x4357, 0x42cb, 0xb0bf, 0xba12, 0x1396, 0x41de, 0x4116, 0x2112, 0x1b76, 0x4007, 0x44e9, 0xb224, 0x14d0, 0x402d, 0x412e, 0xb2d1, 0x2afc, 0x42f2, 0x1eca, 0x3412, 0x4472, 0x4252, 0x40cd, 0xb0fa, 0x0898, 0xbf79, 0xbaca, 0x3752, 0x0b3b, 0x1f37, 0x3758, 0x42b8, 0x43bd, 0x01e7, 0x42d1, 0x400a, 0xb044, 0xb2c6, 0x40bb, 0x4384, 0x3f19, 0x43ae, 0xba2c, 0x05ef, 0xb211, 0x1e3a, 0x437d, 0xbfa0, 0xbf7b, 0xb0a2, 0x4326, 0x1c73, 0x425b, 0x412d, 0x44d0, 0x11c1, 0x1b69, 0xb2c3, 0x1f89, 0xa6b4, 0x2ed9, 0x418d, 0x1ccb, 0xaa53, 0x402d, 0x1a6b, 0x3c2d, 0x4622, 0xb2c7, 0xa4b8, 0x4066, 0x45cb, 0x10a2, 0x4010, 0x41bb, 0x4300, 0xbf15, 0xb0b0, 0xba4e, 0xb29f, 0x1d46, 0xba36, 0x43b8, 0x0c37, 0x4499, 0x1bcf, 0xae12, 0xb26a, 0x42d5, 0x4362, 0x25db, 0xba02, 0xb29e, 0x3650, 0x4564, 0x4158, 0x1d0e, 0x4132, 0x4237, 0xb06f, 0x4377, 0xbf92, 0xbfb0, 0x4151, 0x443e, 0x439f, 0x43af, 0xaf28, 0x4151, 0x40d7, 0x40c7, 0x070e, 0x467f, 0xb226, 0x4418, 0xb016, 0x4288, 0xb009, 0x3e9f, 0x2434, 0x45f5, 0xb0a5, 0x1b5f, 0xb270, 0xbf39, 0xb2b4, 0x4093, 0x169a, 0x43c0, 0x29c4, 0xbf61, 0x4206, 0x2bcc, 0x401c, 0x43b0, 0x432e, 0x07bf, 0x40a7, 0x1b14, 0xb09b, 0x1a2b, 0xa498, 0xbaf3, 0x4204, 0x415b, 0xb02f, 0x42c9, 0x4264, 0x40eb, 0x40b9, 0x2f8a, 0x162c, 0x1b93, 0x18c7, 0x40d6, 0x4484, 0xbf63, 0x407b, 0x40cc, 0x19bd, 0x4106, 0xbaec, 0x4076, 0x4271, 0xadcc, 0x42b6, 0xbf12, 0xb2fc, 0xb267, 0x40ea, 0x40c4, 0x34ed, 0xba7e, 0x0e23, 0xae59, 0xbf4a, 0x0743, 0x43d7, 0x42dd, 0x4097, 0x40ed, 0x40a8, 0x45ed, 0x1e93, 0xb213, 0x1c3b, 0x0ea9, 0x420d, 0xb038, 0xba5a, 0x42ed, 0x41e0, 0x41b2, 0x4327, 0x19c5, 0x42d8, 0x26fb, 0x43fd, 0x0f88, 0x43a7, 0x1c9b, 0xb207, 0xbfc9, 0xb2c5, 0x430a, 0x2512, 0x4356, 0x41ed, 0x4078, 0x40c0, 0xbf99, 0x4141, 0xba72, 0x4226, 0x42d0, 0xb2b2, 0x4150, 0x42d1, 0xb04c, 0xba33, 0x2f36, 0x45b0, 0x18b0, 0x1d78, 0xbf43, 0x426a, 0x4350, 0x4287, 0x406a, 0x1911, 0x4199, 0x4074, 0xbf9a, 0x43f2, 0x4344, 0x41f6, 0x0efc, 0x30a0, 0x2e3e, 0x4359, 0xb261, 0x46b5, 0x4164, 0x25dd, 0x0839, 0xa6d1, 0x4181, 0x4627, 0x419a, 0xba3a, 0xbf16, 0x3ee3, 0x158a, 0x407d, 0x424f, 0xba32, 0xb212, 0x41f9, 0xb019, 0xbf80, 0xbfa0, 0xb2af, 0xb2bb, 0xb21e, 0x427c, 0x441b, 0x40e7, 0x3e04, 0xba75, 0xbfde, 0x40dc, 0x4278, 0x2b7d, 0x3966, 0xb06e, 0x1733, 0x465b, 0x4185, 0xb2f9, 0x42dd, 0xb246, 0xbff0, 0xb019, 0x42e4, 0xb259, 0x42a0, 0xba79, 0x18d5, 0x2f05, 0x4093, 0xbf7d, 0x2891, 0x423a, 0xb201, 0xb001, 0x1ce7, 0x1de1, 0xbafd, 0xb2b0, 0x42d6, 0x41f4, 0x206e, 0xb0b6, 0x3d9b, 0x3156, 0xbff0, 0x4483, 0x46d2, 0x41bb, 0x22a6, 0x413e, 0x4180, 0x3d93, 0x46f3, 0xb2e1, 0x4064, 0x42b4, 0xb279, 0xbf6c, 0x41fd, 0x42a1, 0x396b, 0x1383, 0x42ec, 0x1e32, 0x4564, 0x312c, 0x416f, 0x43be, 0x2633, 0x1e58, 0xb29b, 0x415a, 0x384f, 0x43ec, 0x428a, 0xbad6, 0x40bb, 0xba2d, 0xbf3b, 0x41fb, 0xb26f, 0x4208, 0x407e, 0xbacd, 0x1bb6, 0xbf6c, 0x435d, 0x41db, 0x2381, 0x402e, 0x4278, 0x40cb, 0xba40, 0xbac3, 0x3c20, 0x3b4a, 0x1a38, 0x437d, 0x4100, 0x40d5, 0xb0fd, 0x46c4, 0xbfdf, 0x4251, 0xba51, 0x42c7, 0x0106, 0x0ab7, 0x1cf3, 0xa039, 0x1e55, 0x42b5, 0x43c6, 0x4614, 0x409c, 0x4383, 0xbf76, 0x45f3, 0x01b8, 0xb045, 0xba1d, 0x4000, 0xbfe0, 0x41ac, 0x42e8, 0xb055, 0xa8af, 0x4413, 0x3917, 0xba4b, 0x42a6, 0xb097, 0x3a05, 0x410d, 0x43a3, 0xa1f5, 0xba69, 0x4164, 0x295b, 0xb0d1, 0x43d5, 0xbf6d, 0x0b74, 0x41c4, 0xba32, 0x1c4d, 0x40cf, 0x41c7, 0x4591, 0xa4d4, 0x4376, 0x131b, 0x42f1, 0x4308, 0x42a9, 0x1d4d, 0x41bc, 0x425f, 0x42b1, 0xacd1, 0xaa4f, 0x45de, 0x0d5f, 0x270c, 0x1e62, 0x4353, 0x4113, 0x2cc0, 0xa57c, 0x1eba, 0x4153, 0xbfa8, 0x413a, 0x41be, 0xbf2f, 0x22f9, 0xada0, 0x4171, 0xb2fc, 0x458e, 0x405a, 0x4119, 0x42a9, 0xae09, 0x435e, 0x1c93, 0xbf32, 0x1d79, 0x401d, 0x4098, 0xbfa0, 0x3409, 0x41d9, 0x46a1, 0xbfa3, 0x2470, 0x4583, 0x41be, 0xb295, 0x1aab, 0x319a, 0xbf97, 0x1b2d, 0x0205, 0x424c, 0x41a8, 0x433f, 0xbae9, 0xba25, 0xbfd0, 0x43ab, 0x401c, 0x2ddb, 0x3ade, 0x404a, 0x4203, 0xb2b9, 0x4559, 0xba40, 0xaa0b, 0x3a83, 0xa48e, 0x4288, 0x10f8, 0x40fd, 0xbfd2, 0xb09f, 0x4280, 0x40bf, 0x4770, 0xe7fe + ], + StartRegs = [0x3dfcb14d, 0x03113440, 0x43d4feab, 0xf4773a5f, 0x012ea932, 0x9dad9d54, 0xf24b822f, 0x4f0bd97c, 0x95955220, 0xe3991301, 0xb50130a1, 0xe8c03445, 0x19b5cca3, 0x0afb31b9, 0x00000000, 0x000001f0 + ], + FinalRegs = [0x00000001, 0x0000000c, 0x3bae2320, 0x00000000, 0x00001a18, 0x0006677f, 0x54cd640e, 0x0000000c, 0x001bcc0d, 0x3bae26c4, 0x001c3ffd, 0x00000000, 0x001bcc0d, 0x3bae2377, 0x00000000, 0x600001d0 + ], }, new() { - Instructions = new ushort[] { 0x1ba6, 0x4015, 0xb0f7, 0xba63, 0x1f03, 0xb220, 0x42c4, 0x1831, 0x2745, 0x42db, 0xb2af, 0x455f, 0x0c95, 0x2125, 0x454b, 0x3a14, 0x17d0, 0xb250, 0x4237, 0x1fb6, 0xbf79, 0x43dd, 0x4336, 0x407f, 0x1b4f, 0x305a, 0x4094, 0x3a18, 0xa357, 0xadef, 0xbaee, 0x3be9, 0x438a, 0xbf90, 0x4316, 0xba54, 0x40a1, 0x46e8, 0x1b13, 0xba2d, 0x4083, 0xbad4, 0xbf13, 0x1852, 0xb064, 0x1935, 0x4494, 0x4159, 0x4433, 0x2b74, 0xba35, 0x212c, 0x41a2, 0x41f0, 0x4078, 0xb24f, 0xb213, 0x4049, 0x439b, 0x1e45, 0x417c, 0xbff0, 0x17c1, 0x4304, 0x4363, 0xbf71, 0xb267, 0x41ef, 0x4213, 0x46f9, 0x1c2a, 0xba31, 0x40b6, 0xbfce, 0x43c3, 0x4341, 0x42f4, 0x4159, 0x42ea, 0x4233, 0x427f, 0xb2fa, 0x439b, 0x43b9, 0xba25, 0x1f55, 0x41bd, 0xbf8d, 0x3fdf, 0x40fd, 0x3e6e, 0xb219, 0x04ff, 0x2c3e, 0x44e2, 0x409c, 0x403c, 0x0d36, 0x441e, 0x01ff, 0x0059, 0x41db, 0x1af3, 0x0cd0, 0x1db2, 0x4384, 0x42bf, 0x1c2b, 0x2068, 0x4648, 0xb201, 0x3ab3, 0x380e, 0xba27, 0x4160, 0x0100, 0x1adc, 0xbf1c, 0x10ff, 0x0ce6, 0x4100, 0x4211, 0x4242, 0x417a, 0x419c, 0x4026, 0x4247, 0xb26e, 0x0b32, 0xb022, 0xbf82, 0xa679, 0x4307, 0xba4f, 0xbfce, 0x3af9, 0x1cf8, 0x0647, 0xbf59, 0xb225, 0x423b, 0xbff0, 0xba38, 0x3523, 0x3a16, 0x15c0, 0xb290, 0xa1f9, 0x4369, 0x422a, 0x42c8, 0x1897, 0xabe5, 0xbfc1, 0xb205, 0x22e3, 0x42cf, 0xb091, 0x30d5, 0xb244, 0x266b, 0x402b, 0x4076, 0x1cfb, 0x466d, 0xa4e3, 0xa5a0, 0x40f9, 0xb229, 0x433f, 0xb075, 0xb2b0, 0x4216, 0x4295, 0xbf4d, 0xb04e, 0x1ca6, 0x44e8, 0x4136, 0x42a2, 0x3f2b, 0x42a7, 0x425f, 0x4240, 0x46d2, 0x416b, 0x0590, 0x4118, 0xbae6, 0xb058, 0xae7a, 0xbfab, 0x19a7, 0xba3a, 0x15dc, 0x0445, 0x1dbf, 0x14eb, 0xbfb9, 0x4159, 0x0825, 0x40e2, 0x43a5, 0xb2dc, 0xb2c5, 0x4382, 0x4389, 0xb0c7, 0x4196, 0x2221, 0x4133, 0xba0e, 0xbfb0, 0xbf49, 0x1baa, 0x1239, 0xb2b2, 0x4078, 0x1b33, 0xba6b, 0x3c77, 0x412e, 0x397b, 0x1e15, 0xbfd2, 0xa6f7, 0xb23f, 0x3196, 0x43bf, 0x40a7, 0xab47, 0x43a0, 0xb028, 0xba0f, 0x4557, 0xa960, 0xb05a, 0x4004, 0x41b9, 0x41be, 0xbad8, 0xbf17, 0x42fb, 0x467f, 0x42fd, 0xba23, 0x1a1f, 0xb291, 0x1c6a, 0x4190, 0x23a3, 0x448b, 0x4047, 0x4284, 0xb2ab, 0xb052, 0x429a, 0x4108, 0x1114, 0x4498, 0x401c, 0xb24b, 0x415b, 0xb2e8, 0xbfb0, 0x45d9, 0xbadf, 0xbfb2, 0xbff0, 0x41d4, 0xb09a, 0x431a, 0x405b, 0x1d7d, 0x1d8c, 0x4388, 0x060c, 0x1f0b, 0xba03, 0x4167, 0xb2af, 0xb2e8, 0x4095, 0x1b2a, 0x4142, 0xb038, 0x1e28, 0x2d5a, 0xb007, 0x37ae, 0x432f, 0x43f9, 0x41f5, 0xbf72, 0x4377, 0x0585, 0xba7a, 0x2893, 0x3546, 0x1b6b, 0x4315, 0x3494, 0x4000, 0x4305, 0x3758, 0xbf05, 0x4298, 0x43ca, 0x4299, 0x0b40, 0x433c, 0xba6f, 0x41e3, 0x29c3, 0xa073, 0x176f, 0x41fa, 0x465e, 0x28ab, 0xbf04, 0x40f8, 0x4347, 0x4357, 0x4269, 0x43f7, 0x42f1, 0x41b9, 0x4373, 0x41ac, 0x419f, 0xb03a, 0x0ff1, 0xba12, 0x469d, 0x233d, 0x440a, 0xbac6, 0x43ca, 0x2379, 0x1332, 0x43d0, 0xb2cc, 0x4281, 0xbf0e, 0xb24d, 0xbf90, 0xb291, 0x4043, 0x2e1b, 0x02b8, 0xbf74, 0xb2ea, 0x4399, 0x408e, 0x42ed, 0x456a, 0x414d, 0xba4d, 0x1929, 0x039e, 0xb22d, 0x38ee, 0x408e, 0x40b8, 0xb20f, 0x410a, 0x4553, 0x189f, 0x110e, 0x17e1, 0x414a, 0x1ec4, 0x4499, 0xba68, 0xb060, 0x42c3, 0x4369, 0xbf0f, 0x3aec, 0x4157, 0x3771, 0x46cc, 0xb230, 0x4169, 0xb054, 0x10b7, 0x14f3, 0x33ae, 0x40cc, 0x1f4e, 0xba61, 0x4356, 0x422e, 0x4047, 0x409d, 0x41b5, 0x4193, 0x2017, 0xb013, 0x4559, 0xb20d, 0xba6c, 0x41db, 0xba06, 0x4167, 0x4252, 0xbf09, 0x4360, 0x188d, 0xb239, 0x4385, 0x413a, 0xb2e8, 0x4303, 0x0c1d, 0xbff0, 0xb2ea, 0xb06b, 0xba28, 0xb217, 0x4330, 0xa300, 0x16ab, 0x1053, 0x0c0c, 0x414b, 0x43dd, 0x0a6d, 0x428d, 0x4378, 0x1b7a, 0xbf80, 0xb265, 0xa0df, 0x4079, 0xbfbb, 0x3808, 0x1e91, 0xa711, 0xbaf8, 0x4665, 0x2c9b, 0x03fb, 0x2a72, 0x4186, 0x4052, 0x43ff, 0x407b, 0xa0ed, 0x4207, 0xbf70, 0x43d7, 0x1367, 0xb2b4, 0xb207, 0xa2b7, 0x0b98, 0xba72, 0xbf44, 0xb05e, 0x41db, 0x4231, 0xba15, 0xba3d, 0xbfe0, 0x3b3c, 0x434f, 0x1a8a, 0x4373, 0x437e, 0x19db, 0x45f0, 0xb291, 0xbfa8, 0x40c4, 0xbada, 0xb2a6, 0x410c, 0x2f9d, 0x4499, 0xb254, 0xb251, 0x4688, 0x36c7, 0xb28b, 0x3ca1, 0x2de1, 0x401d, 0xb233, 0xba5a, 0xb03a, 0xb2c0, 0x429c, 0x43b8, 0x40e6, 0xbfdc, 0x415f, 0x40c8, 0xb295, 0x46d0, 0x449a, 0xa9e5, 0x17e0, 0x4127, 0x4165, 0x4213, 0x4324, 0x3d81, 0x413b, 0x41c3, 0x1fb5, 0x4041, 0x1dce, 0xb2aa, 0xbaee, 0x2b6b, 0xa9ff, 0xbfaa, 0x1e69, 0xb056, 0xba20, 0xbaf9, 0x3584, 0x1ce5, 0x4170, 0xbfd6, 0x4029, 0x3811, 0x43c3, 0xba36, 0x4136, 0x0fcd, 0xa452, 0xa18a, 0x42f8, 0xb236, 0x46d1, 0x180f, 0x42b5, 0x43ac, 0xb2c3, 0xba0f, 0xb004, 0x4638, 0xb2bb, 0xba5f, 0xba19, 0xbf11, 0x4640, 0x1f23, 0xba63, 0xb2d6, 0x4159, 0xbf6d, 0x4242, 0x3570, 0xb2b6, 0x410c, 0x4243, 0x4340, 0x4347, 0x23c7, 0xb257, 0x1e21, 0xb2b1, 0x402c, 0x429e, 0xb2fc, 0x3a4c, 0xbfa0, 0x41bc, 0x4659, 0x02de, 0x40c0, 0xb21e, 0xbfd8, 0x40fb, 0x37f9, 0x17e4, 0xb0ab, 0x4144, 0x4158, 0x4182, 0xaaae, 0x400a, 0x41ac, 0x40ff, 0x4207, 0x414f, 0x41e8, 0xbf09, 0xb2c8, 0xb0a2, 0xb229, 0x41a3, 0x4210, 0xb20a, 0x11b2, 0x2fdf, 0xb242, 0x34cc, 0x430a, 0x4462, 0xb24f, 0x42ed, 0x3e95, 0x4214, 0xa49d, 0x1a98, 0x42ae, 0x407f, 0x1c46, 0xb260, 0x46d2, 0xbf38, 0x45a2, 0x4105, 0xb25a, 0x406b, 0x0e70, 0x1c2e, 0xbf6c, 0x42c7, 0x1e6b, 0x40f0, 0x1edc, 0x418f, 0x1c63, 0x4403, 0xaeec, 0x1d5e, 0xb289, 0xb20d, 0x0fbd, 0x40f0, 0xb0a7, 0xba3d, 0x43e8, 0xbfa4, 0x12ff, 0x437b, 0x43dc, 0xba54, 0x416d, 0x42b7, 0xb2e8, 0x1d0a, 0xbf60, 0x1ac0, 0x1972, 0xb07d, 0xba21, 0xbf5f, 0x45b1, 0xa40b, 0x42b3, 0x4008, 0x20cf, 0x184a, 0x41fe, 0x2f74, 0x4129, 0xba6e, 0x43f7, 0x438e, 0x459a, 0xba5f, 0x1d12, 0x1c06, 0xba3b, 0x4338, 0x4319, 0x412e, 0x14df, 0xbac7, 0xbf06, 0x0b43, 0xa015, 0x1998, 0x1ae9, 0xb251, 0x1b33, 0x29d5, 0x1def, 0x4306, 0x4170, 0x4674, 0x4036, 0xb29a, 0x415e, 0x4367, 0xbf36, 0xba3a, 0x400f, 0x1aab, 0x41d9, 0x0d1c, 0x4598, 0x44b5, 0xa285, 0x406f, 0xbf07, 0xba2b, 0xba21, 0x41ae, 0x4488, 0xbf81, 0x24c3, 0xbf00, 0x080d, 0x3f1d, 0x45c8, 0x01cb, 0xa168, 0xbf88, 0x1d8a, 0x4469, 0x0868, 0x1fb2, 0xb28d, 0x40c5, 0xb23b, 0xba1b, 0x4075, 0x43fd, 0x30ab, 0xb2d8, 0x3f10, 0x1c49, 0xab69, 0xbf27, 0x1415, 0x0643, 0x46f1, 0x1c17, 0xbad5, 0x4405, 0xa383, 0xa1ed, 0x420c, 0x1866, 0x41e3, 0x43c0, 0xba28, 0x428f, 0xb08f, 0xba7b, 0x4576, 0x0987, 0x4266, 0x42a8, 0xb278, 0xba0b, 0xbfdb, 0x1ae6, 0x19bc, 0x191d, 0x4019, 0x4358, 0x2895, 0x10c4, 0x33fe, 0x1eb2, 0x41bd, 0x42fd, 0x4230, 0x1c37, 0x445d, 0x1970, 0x420a, 0x4325, 0x4179, 0x4053, 0x0bb2, 0x4373, 0x3cd8, 0x40c0, 0x4194, 0xad38, 0xbf9e, 0x144c, 0x215a, 0x4100, 0xb29f, 0xbfe8, 0x146d, 0x1a76, 0x37cd, 0x2bc4, 0xba24, 0x4359, 0x0417, 0xbfcd, 0x0ffa, 0x4100, 0xbac8, 0x41c8, 0x350d, 0xb2d9, 0x41b3, 0xbf5f, 0xba5a, 0x1f92, 0x442f, 0x4342, 0xb2cc, 0x42f7, 0x42ec, 0xbfa0, 0xa018, 0x3c0a, 0x4650, 0x464a, 0x1d7b, 0xbf11, 0xba23, 0x421c, 0x42ea, 0xb23c, 0xb2cf, 0x131a, 0xbf8f, 0x00af, 0xb29d, 0xba50, 0xbaee, 0x4607, 0x4645, 0xb2a8, 0xa65e, 0xb0ae, 0x42c2, 0x4153, 0xbfb5, 0x1f5c, 0x2a64, 0xb04d, 0xb221, 0x2bcf, 0x4102, 0x4115, 0x4301, 0x1a80, 0x38b0, 0x41da, 0xbaf9, 0x42a2, 0xba22, 0x42dc, 0xba39, 0x41c0, 0x46bb, 0x3fbd, 0x1f57, 0x412f, 0x4150, 0x4319, 0xbf01, 0x4162, 0x4211, 0xba0b, 0x2ec4, 0x1345, 0x4336, 0x4064, 0x4622, 0x4372, 0x422b, 0x43b3, 0x427e, 0xb0f6, 0xbf46, 0x333c, 0x43d0, 0xb2fd, 0x4219, 0xb06a, 0x114c, 0xb287, 0x44e3, 0x41a7, 0xb089, 0x422e, 0x4059, 0xb066, 0xabef, 0x190a, 0x4263, 0x1dd3, 0x4209, 0xbf67, 0x42ca, 0x409b, 0x4286, 0xba45, 0x42a3, 0xbae1, 0x2947, 0x414f, 0x43b7, 0x0fc6, 0x4350, 0xbfab, 0x40e6, 0x45b6, 0x1dab, 0x4132, 0x4289, 0xb060, 0xbf97, 0x4212, 0xba0b, 0x068c, 0x4390, 0x4181, 0x03ac, 0x406a, 0x4044, 0xaa37, 0xb247, 0x46ab, 0x41dc, 0xa6bd, 0xbf6d, 0x4007, 0xb2fe, 0x40ee, 0x1047, 0x41d3, 0xb29b, 0x428d, 0x4275, 0x4392, 0xb2da, 0x40fa, 0xb0e0, 0xbf4c, 0xb0b4, 0x05a7, 0x414a, 0x1c39, 0xb2e9, 0x4080, 0x430f, 0x3d9b, 0x1ef4, 0x4167, 0xbf19, 0xb01b, 0x42dc, 0xb04b, 0x44cd, 0xb284, 0xb046, 0x3574, 0xb2c5, 0x41b5, 0xae2e, 0xb216, 0x1fe5, 0x10e6, 0xb2b8, 0x18a6, 0x4600, 0x4050, 0x406f, 0x420a, 0x41da, 0x43c4, 0xbf14, 0x202f, 0x43ea, 0x41e7, 0x4044, 0x3472, 0xb2f3, 0x42f8, 0x1937, 0x1ffd, 0xbf07, 0x420a, 0x0351, 0xbad2, 0xba49, 0x43be, 0x41eb, 0xbf70, 0x40b7, 0x4479, 0x0ed9, 0x4261, 0xb066, 0xb22d, 0x1b22, 0x4225, 0x1edd, 0x4180, 0x4090, 0x409c, 0x46ab, 0x413c, 0x3858, 0x4127, 0x42c6, 0xbfb0, 0xa6c1, 0xbfd4, 0x46e0, 0x423f, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xcb6e3399, 0x779d0a27, 0xb05aed8d, 0x68a1a047, 0x971f3c1b, 0xd982dff6, 0x911b2b51, 0x3af672e5, 0xc8b54557, 0xb853ba8e, 0x82d6c3bf, 0x67250d2b, 0x982aa4b0, 0x611a482f, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0xffffffa8, 0x845c5046, 0x00000000, 0x00006500, 0x7ba3afba, 0x000064fd, 0x00001ae0, 0x00000000, 0x982aa4b0, 0x00000000, 0x1b016935, 0x000064fd, 0x982aa4b0, 0xffd0f718, 0x00000000, 0xa00001d0 }, + Instructions = [0x1ba6, 0x4015, 0xb0f7, 0xba63, 0x1f03, 0xb220, 0x42c4, 0x1831, 0x2745, 0x42db, 0xb2af, 0x455f, 0x0c95, 0x2125, 0x454b, 0x3a14, 0x17d0, 0xb250, 0x4237, 0x1fb6, 0xbf79, 0x43dd, 0x4336, 0x407f, 0x1b4f, 0x305a, 0x4094, 0x3a18, 0xa357, 0xadef, 0xbaee, 0x3be9, 0x438a, 0xbf90, 0x4316, 0xba54, 0x40a1, 0x46e8, 0x1b13, 0xba2d, 0x4083, 0xbad4, 0xbf13, 0x1852, 0xb064, 0x1935, 0x4494, 0x4159, 0x4433, 0x2b74, 0xba35, 0x212c, 0x41a2, 0x41f0, 0x4078, 0xb24f, 0xb213, 0x4049, 0x439b, 0x1e45, 0x417c, 0xbff0, 0x17c1, 0x4304, 0x4363, 0xbf71, 0xb267, 0x41ef, 0x4213, 0x46f9, 0x1c2a, 0xba31, 0x40b6, 0xbfce, 0x43c3, 0x4341, 0x42f4, 0x4159, 0x42ea, 0x4233, 0x427f, 0xb2fa, 0x439b, 0x43b9, 0xba25, 0x1f55, 0x41bd, 0xbf8d, 0x3fdf, 0x40fd, 0x3e6e, 0xb219, 0x04ff, 0x2c3e, 0x44e2, 0x409c, 0x403c, 0x0d36, 0x441e, 0x01ff, 0x0059, 0x41db, 0x1af3, 0x0cd0, 0x1db2, 0x4384, 0x42bf, 0x1c2b, 0x2068, 0x4648, 0xb201, 0x3ab3, 0x380e, 0xba27, 0x4160, 0x0100, 0x1adc, 0xbf1c, 0x10ff, 0x0ce6, 0x4100, 0x4211, 0x4242, 0x417a, 0x419c, 0x4026, 0x4247, 0xb26e, 0x0b32, 0xb022, 0xbf82, 0xa679, 0x4307, 0xba4f, 0xbfce, 0x3af9, 0x1cf8, 0x0647, 0xbf59, 0xb225, 0x423b, 0xbff0, 0xba38, 0x3523, 0x3a16, 0x15c0, 0xb290, 0xa1f9, 0x4369, 0x422a, 0x42c8, 0x1897, 0xabe5, 0xbfc1, 0xb205, 0x22e3, 0x42cf, 0xb091, 0x30d5, 0xb244, 0x266b, 0x402b, 0x4076, 0x1cfb, 0x466d, 0xa4e3, 0xa5a0, 0x40f9, 0xb229, 0x433f, 0xb075, 0xb2b0, 0x4216, 0x4295, 0xbf4d, 0xb04e, 0x1ca6, 0x44e8, 0x4136, 0x42a2, 0x3f2b, 0x42a7, 0x425f, 0x4240, 0x46d2, 0x416b, 0x0590, 0x4118, 0xbae6, 0xb058, 0xae7a, 0xbfab, 0x19a7, 0xba3a, 0x15dc, 0x0445, 0x1dbf, 0x14eb, 0xbfb9, 0x4159, 0x0825, 0x40e2, 0x43a5, 0xb2dc, 0xb2c5, 0x4382, 0x4389, 0xb0c7, 0x4196, 0x2221, 0x4133, 0xba0e, 0xbfb0, 0xbf49, 0x1baa, 0x1239, 0xb2b2, 0x4078, 0x1b33, 0xba6b, 0x3c77, 0x412e, 0x397b, 0x1e15, 0xbfd2, 0xa6f7, 0xb23f, 0x3196, 0x43bf, 0x40a7, 0xab47, 0x43a0, 0xb028, 0xba0f, 0x4557, 0xa960, 0xb05a, 0x4004, 0x41b9, 0x41be, 0xbad8, 0xbf17, 0x42fb, 0x467f, 0x42fd, 0xba23, 0x1a1f, 0xb291, 0x1c6a, 0x4190, 0x23a3, 0x448b, 0x4047, 0x4284, 0xb2ab, 0xb052, 0x429a, 0x4108, 0x1114, 0x4498, 0x401c, 0xb24b, 0x415b, 0xb2e8, 0xbfb0, 0x45d9, 0xbadf, 0xbfb2, 0xbff0, 0x41d4, 0xb09a, 0x431a, 0x405b, 0x1d7d, 0x1d8c, 0x4388, 0x060c, 0x1f0b, 0xba03, 0x4167, 0xb2af, 0xb2e8, 0x4095, 0x1b2a, 0x4142, 0xb038, 0x1e28, 0x2d5a, 0xb007, 0x37ae, 0x432f, 0x43f9, 0x41f5, 0xbf72, 0x4377, 0x0585, 0xba7a, 0x2893, 0x3546, 0x1b6b, 0x4315, 0x3494, 0x4000, 0x4305, 0x3758, 0xbf05, 0x4298, 0x43ca, 0x4299, 0x0b40, 0x433c, 0xba6f, 0x41e3, 0x29c3, 0xa073, 0x176f, 0x41fa, 0x465e, 0x28ab, 0xbf04, 0x40f8, 0x4347, 0x4357, 0x4269, 0x43f7, 0x42f1, 0x41b9, 0x4373, 0x41ac, 0x419f, 0xb03a, 0x0ff1, 0xba12, 0x469d, 0x233d, 0x440a, 0xbac6, 0x43ca, 0x2379, 0x1332, 0x43d0, 0xb2cc, 0x4281, 0xbf0e, 0xb24d, 0xbf90, 0xb291, 0x4043, 0x2e1b, 0x02b8, 0xbf74, 0xb2ea, 0x4399, 0x408e, 0x42ed, 0x456a, 0x414d, 0xba4d, 0x1929, 0x039e, 0xb22d, 0x38ee, 0x408e, 0x40b8, 0xb20f, 0x410a, 0x4553, 0x189f, 0x110e, 0x17e1, 0x414a, 0x1ec4, 0x4499, 0xba68, 0xb060, 0x42c3, 0x4369, 0xbf0f, 0x3aec, 0x4157, 0x3771, 0x46cc, 0xb230, 0x4169, 0xb054, 0x10b7, 0x14f3, 0x33ae, 0x40cc, 0x1f4e, 0xba61, 0x4356, 0x422e, 0x4047, 0x409d, 0x41b5, 0x4193, 0x2017, 0xb013, 0x4559, 0xb20d, 0xba6c, 0x41db, 0xba06, 0x4167, 0x4252, 0xbf09, 0x4360, 0x188d, 0xb239, 0x4385, 0x413a, 0xb2e8, 0x4303, 0x0c1d, 0xbff0, 0xb2ea, 0xb06b, 0xba28, 0xb217, 0x4330, 0xa300, 0x16ab, 0x1053, 0x0c0c, 0x414b, 0x43dd, 0x0a6d, 0x428d, 0x4378, 0x1b7a, 0xbf80, 0xb265, 0xa0df, 0x4079, 0xbfbb, 0x3808, 0x1e91, 0xa711, 0xbaf8, 0x4665, 0x2c9b, 0x03fb, 0x2a72, 0x4186, 0x4052, 0x43ff, 0x407b, 0xa0ed, 0x4207, 0xbf70, 0x43d7, 0x1367, 0xb2b4, 0xb207, 0xa2b7, 0x0b98, 0xba72, 0xbf44, 0xb05e, 0x41db, 0x4231, 0xba15, 0xba3d, 0xbfe0, 0x3b3c, 0x434f, 0x1a8a, 0x4373, 0x437e, 0x19db, 0x45f0, 0xb291, 0xbfa8, 0x40c4, 0xbada, 0xb2a6, 0x410c, 0x2f9d, 0x4499, 0xb254, 0xb251, 0x4688, 0x36c7, 0xb28b, 0x3ca1, 0x2de1, 0x401d, 0xb233, 0xba5a, 0xb03a, 0xb2c0, 0x429c, 0x43b8, 0x40e6, 0xbfdc, 0x415f, 0x40c8, 0xb295, 0x46d0, 0x449a, 0xa9e5, 0x17e0, 0x4127, 0x4165, 0x4213, 0x4324, 0x3d81, 0x413b, 0x41c3, 0x1fb5, 0x4041, 0x1dce, 0xb2aa, 0xbaee, 0x2b6b, 0xa9ff, 0xbfaa, 0x1e69, 0xb056, 0xba20, 0xbaf9, 0x3584, 0x1ce5, 0x4170, 0xbfd6, 0x4029, 0x3811, 0x43c3, 0xba36, 0x4136, 0x0fcd, 0xa452, 0xa18a, 0x42f8, 0xb236, 0x46d1, 0x180f, 0x42b5, 0x43ac, 0xb2c3, 0xba0f, 0xb004, 0x4638, 0xb2bb, 0xba5f, 0xba19, 0xbf11, 0x4640, 0x1f23, 0xba63, 0xb2d6, 0x4159, 0xbf6d, 0x4242, 0x3570, 0xb2b6, 0x410c, 0x4243, 0x4340, 0x4347, 0x23c7, 0xb257, 0x1e21, 0xb2b1, 0x402c, 0x429e, 0xb2fc, 0x3a4c, 0xbfa0, 0x41bc, 0x4659, 0x02de, 0x40c0, 0xb21e, 0xbfd8, 0x40fb, 0x37f9, 0x17e4, 0xb0ab, 0x4144, 0x4158, 0x4182, 0xaaae, 0x400a, 0x41ac, 0x40ff, 0x4207, 0x414f, 0x41e8, 0xbf09, 0xb2c8, 0xb0a2, 0xb229, 0x41a3, 0x4210, 0xb20a, 0x11b2, 0x2fdf, 0xb242, 0x34cc, 0x430a, 0x4462, 0xb24f, 0x42ed, 0x3e95, 0x4214, 0xa49d, 0x1a98, 0x42ae, 0x407f, 0x1c46, 0xb260, 0x46d2, 0xbf38, 0x45a2, 0x4105, 0xb25a, 0x406b, 0x0e70, 0x1c2e, 0xbf6c, 0x42c7, 0x1e6b, 0x40f0, 0x1edc, 0x418f, 0x1c63, 0x4403, 0xaeec, 0x1d5e, 0xb289, 0xb20d, 0x0fbd, 0x40f0, 0xb0a7, 0xba3d, 0x43e8, 0xbfa4, 0x12ff, 0x437b, 0x43dc, 0xba54, 0x416d, 0x42b7, 0xb2e8, 0x1d0a, 0xbf60, 0x1ac0, 0x1972, 0xb07d, 0xba21, 0xbf5f, 0x45b1, 0xa40b, 0x42b3, 0x4008, 0x20cf, 0x184a, 0x41fe, 0x2f74, 0x4129, 0xba6e, 0x43f7, 0x438e, 0x459a, 0xba5f, 0x1d12, 0x1c06, 0xba3b, 0x4338, 0x4319, 0x412e, 0x14df, 0xbac7, 0xbf06, 0x0b43, 0xa015, 0x1998, 0x1ae9, 0xb251, 0x1b33, 0x29d5, 0x1def, 0x4306, 0x4170, 0x4674, 0x4036, 0xb29a, 0x415e, 0x4367, 0xbf36, 0xba3a, 0x400f, 0x1aab, 0x41d9, 0x0d1c, 0x4598, 0x44b5, 0xa285, 0x406f, 0xbf07, 0xba2b, 0xba21, 0x41ae, 0x4488, 0xbf81, 0x24c3, 0xbf00, 0x080d, 0x3f1d, 0x45c8, 0x01cb, 0xa168, 0xbf88, 0x1d8a, 0x4469, 0x0868, 0x1fb2, 0xb28d, 0x40c5, 0xb23b, 0xba1b, 0x4075, 0x43fd, 0x30ab, 0xb2d8, 0x3f10, 0x1c49, 0xab69, 0xbf27, 0x1415, 0x0643, 0x46f1, 0x1c17, 0xbad5, 0x4405, 0xa383, 0xa1ed, 0x420c, 0x1866, 0x41e3, 0x43c0, 0xba28, 0x428f, 0xb08f, 0xba7b, 0x4576, 0x0987, 0x4266, 0x42a8, 0xb278, 0xba0b, 0xbfdb, 0x1ae6, 0x19bc, 0x191d, 0x4019, 0x4358, 0x2895, 0x10c4, 0x33fe, 0x1eb2, 0x41bd, 0x42fd, 0x4230, 0x1c37, 0x445d, 0x1970, 0x420a, 0x4325, 0x4179, 0x4053, 0x0bb2, 0x4373, 0x3cd8, 0x40c0, 0x4194, 0xad38, 0xbf9e, 0x144c, 0x215a, 0x4100, 0xb29f, 0xbfe8, 0x146d, 0x1a76, 0x37cd, 0x2bc4, 0xba24, 0x4359, 0x0417, 0xbfcd, 0x0ffa, 0x4100, 0xbac8, 0x41c8, 0x350d, 0xb2d9, 0x41b3, 0xbf5f, 0xba5a, 0x1f92, 0x442f, 0x4342, 0xb2cc, 0x42f7, 0x42ec, 0xbfa0, 0xa018, 0x3c0a, 0x4650, 0x464a, 0x1d7b, 0xbf11, 0xba23, 0x421c, 0x42ea, 0xb23c, 0xb2cf, 0x131a, 0xbf8f, 0x00af, 0xb29d, 0xba50, 0xbaee, 0x4607, 0x4645, 0xb2a8, 0xa65e, 0xb0ae, 0x42c2, 0x4153, 0xbfb5, 0x1f5c, 0x2a64, 0xb04d, 0xb221, 0x2bcf, 0x4102, 0x4115, 0x4301, 0x1a80, 0x38b0, 0x41da, 0xbaf9, 0x42a2, 0xba22, 0x42dc, 0xba39, 0x41c0, 0x46bb, 0x3fbd, 0x1f57, 0x412f, 0x4150, 0x4319, 0xbf01, 0x4162, 0x4211, 0xba0b, 0x2ec4, 0x1345, 0x4336, 0x4064, 0x4622, 0x4372, 0x422b, 0x43b3, 0x427e, 0xb0f6, 0xbf46, 0x333c, 0x43d0, 0xb2fd, 0x4219, 0xb06a, 0x114c, 0xb287, 0x44e3, 0x41a7, 0xb089, 0x422e, 0x4059, 0xb066, 0xabef, 0x190a, 0x4263, 0x1dd3, 0x4209, 0xbf67, 0x42ca, 0x409b, 0x4286, 0xba45, 0x42a3, 0xbae1, 0x2947, 0x414f, 0x43b7, 0x0fc6, 0x4350, 0xbfab, 0x40e6, 0x45b6, 0x1dab, 0x4132, 0x4289, 0xb060, 0xbf97, 0x4212, 0xba0b, 0x068c, 0x4390, 0x4181, 0x03ac, 0x406a, 0x4044, 0xaa37, 0xb247, 0x46ab, 0x41dc, 0xa6bd, 0xbf6d, 0x4007, 0xb2fe, 0x40ee, 0x1047, 0x41d3, 0xb29b, 0x428d, 0x4275, 0x4392, 0xb2da, 0x40fa, 0xb0e0, 0xbf4c, 0xb0b4, 0x05a7, 0x414a, 0x1c39, 0xb2e9, 0x4080, 0x430f, 0x3d9b, 0x1ef4, 0x4167, 0xbf19, 0xb01b, 0x42dc, 0xb04b, 0x44cd, 0xb284, 0xb046, 0x3574, 0xb2c5, 0x41b5, 0xae2e, 0xb216, 0x1fe5, 0x10e6, 0xb2b8, 0x18a6, 0x4600, 0x4050, 0x406f, 0x420a, 0x41da, 0x43c4, 0xbf14, 0x202f, 0x43ea, 0x41e7, 0x4044, 0x3472, 0xb2f3, 0x42f8, 0x1937, 0x1ffd, 0xbf07, 0x420a, 0x0351, 0xbad2, 0xba49, 0x43be, 0x41eb, 0xbf70, 0x40b7, 0x4479, 0x0ed9, 0x4261, 0xb066, 0xb22d, 0x1b22, 0x4225, 0x1edd, 0x4180, 0x4090, 0x409c, 0x46ab, 0x413c, 0x3858, 0x4127, 0x42c6, 0xbfb0, 0xa6c1, 0xbfd4, 0x46e0, 0x423f, 0x4770, 0xe7fe + ], + StartRegs = [0xcb6e3399, 0x779d0a27, 0xb05aed8d, 0x68a1a047, 0x971f3c1b, 0xd982dff6, 0x911b2b51, 0x3af672e5, 0xc8b54557, 0xb853ba8e, 0x82d6c3bf, 0x67250d2b, 0x982aa4b0, 0x611a482f, 0x00000000, 0x900001f0 + ], + FinalRegs = [0xffffffa8, 0x845c5046, 0x00000000, 0x00006500, 0x7ba3afba, 0x000064fd, 0x00001ae0, 0x00000000, 0x982aa4b0, 0x00000000, 0x1b016935, 0x000064fd, 0x982aa4b0, 0xffd0f718, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x1604, 0x0a21, 0x4319, 0x4564, 0xb217, 0x459a, 0x4428, 0xb20d, 0x1b2c, 0x2a6d, 0x403e, 0x410b, 0xba30, 0x1e1d, 0xbad8, 0x309a, 0xbf63, 0xbfa0, 0xb283, 0x1430, 0x468c, 0xb071, 0xb082, 0xb0c2, 0xbfa0, 0x1caf, 0xb278, 0x4270, 0x307d, 0xbacc, 0xb0d7, 0x40ec, 0xbacf, 0x33cb, 0xa1ac, 0x1b5a, 0xbf80, 0xb2e6, 0xba4b, 0x1e68, 0xbfe0, 0xb2dc, 0x4085, 0xbf7f, 0x2943, 0x1edf, 0x4346, 0x32fb, 0x410d, 0x44f4, 0x1e4f, 0xa16f, 0xb25d, 0x4348, 0xbf18, 0xbac6, 0x0b17, 0xbac6, 0xba0c, 0xb232, 0x3f9e, 0xb22f, 0xa529, 0xbfe0, 0x43b4, 0x2768, 0x427a, 0xb2fd, 0x408f, 0x4269, 0x4388, 0x42c0, 0x3a6c, 0xbf25, 0x4219, 0x4311, 0x1de4, 0x2564, 0x41c2, 0x1963, 0xb239, 0x42c3, 0x421f, 0xb0a4, 0x403f, 0x1c19, 0x1f37, 0x40f1, 0xbfc8, 0x40ac, 0x43aa, 0x0762, 0x4672, 0xb226, 0x3a12, 0x1aa7, 0xbad5, 0xb21a, 0x42ff, 0xbfdb, 0x4302, 0x1a52, 0x16ad, 0x42cd, 0x43fa, 0xb2f5, 0x413b, 0x411c, 0xb044, 0xb056, 0xa3cf, 0x40a9, 0x11c8, 0x455b, 0x41f6, 0xb04e, 0x3cea, 0x4257, 0x4251, 0x42e9, 0x2352, 0x3e76, 0x1aa5, 0x4086, 0x4355, 0x40e8, 0x3a84, 0x103c, 0xbfb5, 0x4227, 0xb07d, 0x1056, 0x4078, 0x4166, 0xba60, 0x1dd5, 0xbfdc, 0xb294, 0x4020, 0xa37a, 0x433d, 0xb2ab, 0xb284, 0x4223, 0xbf22, 0x43c2, 0x18f8, 0x4181, 0x40f5, 0xb2fb, 0x38ea, 0x4151, 0xac89, 0xbff0, 0x40a4, 0xa65b, 0x098e, 0x4020, 0x415c, 0x244e, 0x4034, 0x27e0, 0xbf94, 0xb2ec, 0xb0d0, 0x4255, 0xbf41, 0x22ee, 0x42c3, 0x139b, 0xa16a, 0xbfc0, 0x18b8, 0x4020, 0xb05e, 0xa1b8, 0xbad3, 0xbf2e, 0x460e, 0xbaf4, 0x23aa, 0x1c22, 0x34b3, 0xba2c, 0xa046, 0x223a, 0x4236, 0x1f81, 0x40e4, 0x43ea, 0x065e, 0x4251, 0x4266, 0x409b, 0x2271, 0x43be, 0x4026, 0x4394, 0x2c3b, 0x1dfa, 0xb287, 0xa1f2, 0xaed8, 0x4044, 0x42d9, 0xbf33, 0xb2db, 0xaaec, 0x1a26, 0xa731, 0x41be, 0x4203, 0xa536, 0x4663, 0x09c1, 0x4236, 0x1bcd, 0x234a, 0x3426, 0x420c, 0x43fa, 0x42e2, 0x1fcf, 0x43f1, 0x43ef, 0x4122, 0xab1c, 0x40cb, 0x41ac, 0x40ba, 0xb2f7, 0x46b0, 0xa3fb, 0xb037, 0x4583, 0xbf1e, 0x40a3, 0x4005, 0xafe0, 0xba7e, 0x42a9, 0x38ab, 0xb2b3, 0x43bd, 0x43c4, 0x1ca1, 0x4208, 0x410d, 0x4319, 0xba00, 0x43a2, 0xbae2, 0x194f, 0x316c, 0xba00, 0xbfc1, 0x41af, 0x40eb, 0x2d1e, 0x0f59, 0xba37, 0x40ec, 0x454f, 0x23a9, 0x0eb7, 0x4130, 0x410c, 0x4273, 0xba56, 0xa4e0, 0x42d8, 0x439b, 0xa5a8, 0x43e4, 0x41ab, 0x463e, 0x4097, 0x407f, 0xbf83, 0x4203, 0x0ecb, 0x41d5, 0x423b, 0x413e, 0x41aa, 0xbf5f, 0x14be, 0x40f8, 0xbada, 0xb294, 0x1a4d, 0x41c1, 0x120e, 0x424b, 0x1ac7, 0x42e8, 0x2300, 0x4386, 0x46f2, 0x41f1, 0x413f, 0x4078, 0x4193, 0x42b0, 0x07d0, 0x194c, 0x4647, 0x4216, 0x3906, 0x1e78, 0x4038, 0x045d, 0xb2be, 0x2603, 0x416d, 0xbf4b, 0xb26e, 0x403f, 0x45c3, 0x0349, 0xba7a, 0x4186, 0x4438, 0xb078, 0xbfe0, 0x4314, 0xb236, 0xb0fc, 0x4467, 0x420b, 0x407c, 0x43d2, 0x4252, 0xba6b, 0xbadc, 0xbf4c, 0x4021, 0xba6d, 0xb2c7, 0x1f82, 0xb07b, 0x1706, 0xbf1c, 0xbfd0, 0x1d27, 0x4176, 0xb284, 0x380c, 0x4642, 0x4607, 0xb0cc, 0x44d9, 0xb2a7, 0x40b5, 0x42c2, 0xb2d6, 0xba22, 0x1ae8, 0x28fa, 0x4030, 0x0012, 0x19af, 0x4545, 0x407f, 0x43fd, 0x4603, 0xbfd6, 0x41de, 0x1ede, 0xba4c, 0x41a1, 0x41c3, 0x4371, 0x408e, 0x41bc, 0x42cd, 0x42be, 0x4172, 0xab14, 0x4068, 0xa34b, 0x1bfc, 0x1929, 0xb2a6, 0xbf76, 0xb2eb, 0x410c, 0x1fa5, 0x4241, 0x469a, 0x1eec, 0x408b, 0xbf15, 0x4304, 0x464f, 0x1424, 0x431e, 0xbf66, 0xa1af, 0xa8a3, 0xba6d, 0xb2c3, 0xba52, 0x0e61, 0x40a3, 0x4348, 0xbaf0, 0x412c, 0x1aae, 0x42a3, 0x1da6, 0x4404, 0x424c, 0x336d, 0x4044, 0x40bc, 0xb2cb, 0x3f79, 0x416e, 0xbf5f, 0x2954, 0xba01, 0xba05, 0xaef8, 0x1e85, 0x4035, 0x41c5, 0xb062, 0x1500, 0x4008, 0xbf85, 0x0e11, 0x279e, 0x4125, 0x42c2, 0xbac4, 0x438a, 0x46f2, 0x0210, 0xba56, 0xba5b, 0x11f8, 0xba09, 0xbf5f, 0xb2bd, 0x1e57, 0x3541, 0xba26, 0x1e26, 0x10de, 0x20bb, 0xbf90, 0xbf3c, 0x4182, 0x43cc, 0x40cb, 0x4275, 0x4150, 0x4164, 0x41c0, 0x42d8, 0x40c8, 0x3c64, 0xa413, 0xa6e0, 0x18fa, 0xa514, 0x464f, 0x40f1, 0x43a0, 0x1131, 0x4067, 0x4017, 0x0294, 0xb2f3, 0x4159, 0xba10, 0x3e05, 0xbf8b, 0x042f, 0x431c, 0x40c7, 0xba5a, 0x1cfe, 0x40d2, 0x4178, 0xb2ad, 0x2175, 0x41df, 0x226c, 0x426e, 0xb0a0, 0x4081, 0x42ec, 0x4035, 0x40b2, 0xbfd7, 0x4165, 0x4419, 0x43cd, 0x46ba, 0xbfc0, 0x4384, 0x0cc7, 0x1e7a, 0x466a, 0x04ed, 0x0fdc, 0x42e2, 0x42a3, 0x2874, 0x42df, 0xb2e6, 0x223a, 0x3d2a, 0x349c, 0x41b0, 0x1fb5, 0x2ef3, 0xbfa3, 0x14e3, 0xbac0, 0x4357, 0xb2a5, 0xba2a, 0x4161, 0x4218, 0xb0b3, 0x4110, 0x15d7, 0x412e, 0xbfaf, 0xb2bb, 0x1930, 0xba71, 0x1dc0, 0xbf53, 0x4363, 0x4237, 0x206b, 0x1a83, 0x1f94, 0x41fb, 0x4071, 0x4632, 0x41ca, 0xb000, 0x2298, 0x4191, 0xa626, 0xb215, 0x24be, 0x40b3, 0x02a0, 0xb209, 0x2ff4, 0x0d5d, 0x43ef, 0x21e6, 0x1915, 0x401f, 0xbf84, 0x461f, 0x4244, 0x421c, 0xba26, 0x43f2, 0xba11, 0x42b4, 0x17d4, 0x43e7, 0x072e, 0x41a1, 0xaee1, 0x4090, 0xb20e, 0x40e9, 0xb207, 0x1dd0, 0x1cc6, 0xbfb1, 0xb045, 0x2731, 0x4271, 0xbade, 0xb217, 0x403f, 0x35ea, 0x1eea, 0xaa77, 0x2632, 0x19c7, 0xba1a, 0x433f, 0x439e, 0xbf15, 0x1a25, 0x40b9, 0x14f0, 0x3dd4, 0x3c2a, 0x3be5, 0x43c9, 0x40e1, 0x435d, 0x41eb, 0xb236, 0x46ec, 0x1701, 0x403b, 0xbaee, 0xb030, 0x43d4, 0xa1a0, 0x0433, 0xb0ed, 0xbaee, 0xbf47, 0xb25d, 0x410c, 0x41e2, 0x1d4a, 0x1fa0, 0x3d98, 0x1f8f, 0x3a41, 0x41c6, 0x456d, 0x04a1, 0xb2ca, 0x1d5e, 0x40ca, 0xa917, 0x40d1, 0xa2c5, 0x428f, 0x225d, 0x11fe, 0x42d3, 0xbfd9, 0xb2d2, 0x1ca9, 0xafda, 0xbf80, 0xb252, 0x2a1a, 0xbaf3, 0x430a, 0xb244, 0x1c06, 0xa3c7, 0x1c7b, 0x407f, 0xba7a, 0xb2c9, 0x43af, 0x4266, 0xba74, 0xbfbd, 0x1822, 0xba00, 0xb218, 0xb23a, 0x42da, 0x1ec2, 0x412b, 0xb257, 0x2422, 0xbf68, 0xbac7, 0x43fa, 0x1072, 0x4102, 0xb2f7, 0xba43, 0x4303, 0xbac6, 0xb296, 0x1cd6, 0x4379, 0x180e, 0x3654, 0x432f, 0xbf80, 0x228d, 0x03ca, 0x43d0, 0x43b1, 0x2ddd, 0x41fa, 0x35b8, 0x35fe, 0x4212, 0x3dc5, 0xbf59, 0x446f, 0xba34, 0xb234, 0x45c0, 0x461c, 0x1c69, 0xa91c, 0xbfab, 0x43e0, 0x098b, 0x4052, 0x4389, 0xb2b5, 0x1ed5, 0x4129, 0x0b1b, 0x2abf, 0x1b81, 0x32cd, 0x431f, 0xbf60, 0x1adb, 0x42fb, 0x40f0, 0x43d0, 0xb272, 0x4041, 0x421b, 0x43f7, 0xbf2c, 0x46a2, 0x43d8, 0x43bd, 0x439c, 0xba01, 0x3e66, 0x19dc, 0xbf28, 0xb04a, 0x4286, 0x429d, 0x25ec, 0x4381, 0xba19, 0xb2f8, 0x4042, 0x1f44, 0x1ea0, 0x42dc, 0x438d, 0x40f1, 0x1f2f, 0xba50, 0x4311, 0xa700, 0xb0ed, 0x1c9b, 0xb0c5, 0x2742, 0x431c, 0xbf1e, 0x409e, 0xaf81, 0xba68, 0x4364, 0x4078, 0x0ac1, 0xab14, 0xbaec, 0x4499, 0x0a77, 0x0594, 0x2e04, 0xba67, 0x2c60, 0x41c8, 0x443e, 0x4273, 0xb00f, 0x41b1, 0x43b1, 0x1f25, 0xbf34, 0x4282, 0xb2fc, 0xbf44, 0x400d, 0xb275, 0xaf07, 0xb06d, 0x44db, 0x12f2, 0x4082, 0x0b28, 0xb0ac, 0xbfc0, 0xb2ca, 0xb2cb, 0x4462, 0x45b6, 0x4328, 0xb24a, 0x2a77, 0x425e, 0xbf78, 0xb24c, 0x43f5, 0x17b8, 0x2ab7, 0xb285, 0x40b9, 0xa7d7, 0x45e4, 0xb0e1, 0x4395, 0x4020, 0x2b72, 0x4200, 0xb069, 0x40db, 0x41af, 0x42dc, 0x41c6, 0x16a0, 0xb268, 0xbf68, 0xb0e3, 0x421b, 0x4208, 0xa3e3, 0x3cd0, 0xbf54, 0x3d55, 0xba7c, 0x4399, 0xb213, 0x43d0, 0x160a, 0xbfe4, 0x4659, 0x4327, 0x107b, 0xb2f7, 0x42ea, 0xbf00, 0x43d4, 0x2fa0, 0x41ad, 0x195b, 0xb2c5, 0x05dc, 0x43c7, 0x4074, 0x426e, 0xb084, 0x4354, 0x1993, 0xbf44, 0x4226, 0x118b, 0x0a67, 0xbaca, 0x43ea, 0x2159, 0x416e, 0x190e, 0x0629, 0xbf68, 0x4155, 0x41f9, 0x2408, 0xbf2c, 0x1a7a, 0x4137, 0x17b6, 0x4092, 0xb039, 0x404c, 0x4324, 0x40de, 0x40df, 0xbf35, 0x400e, 0x1853, 0x4246, 0x3887, 0xb2b8, 0x44b3, 0x0cc0, 0x294e, 0x0158, 0xb24b, 0xba1c, 0x1f56, 0x0aff, 0xb298, 0xbf69, 0x32c4, 0x44ad, 0x1804, 0x4189, 0x40ff, 0x1993, 0xada4, 0x1f03, 0xbaec, 0x43ed, 0x40e9, 0x1957, 0x40af, 0x46dc, 0xad97, 0x4368, 0x4271, 0x4156, 0xbf52, 0x41ba, 0x4348, 0x4550, 0x0bf9, 0x4039, 0x4692, 0x2bed, 0x40d5, 0xba49, 0x0c78, 0x1ba4, 0xba44, 0x0087, 0x4045, 0x42fe, 0xb299, 0xba7b, 0xbf86, 0x46e9, 0x1a43, 0x0677, 0x3bf7, 0x445e, 0x1c2d, 0x4208, 0x43e0, 0x18ff, 0x1077, 0x2711, 0x425a, 0xba76, 0xb04f, 0xb2a9, 0x1a42, 0x449a, 0xb2e8, 0x4019, 0x1195, 0x42c2, 0xb208, 0x449c, 0xbacc, 0xba2f, 0xbf90, 0xbf44, 0xbacb, 0xbaeb, 0x1d0c, 0x4119, 0xb2e4, 0xb209, 0x45c3, 0x4580, 0xba39, 0x41f0, 0xbf7b, 0xb239, 0x42ed, 0x412f, 0x3276, 0xb0e3, 0xb285, 0x146e, 0xb064, 0xa6c5, 0xbf12, 0x4037, 0xbaf9, 0xb2ba, 0x4345, 0x156c, 0x404b, 0x407a, 0x1c20, 0x44f2, 0xba73, 0x404e, 0x4338, 0x2e25, 0xba5e, 0x1b5b, 0xb2f5, 0x4247, 0xbf5a, 0xa67b, 0xb257, 0x1c8e, 0x2226, 0x43d4, 0xb045, 0x4197, 0x41f6, 0x08df, 0xbf5c, 0x42b0, 0x4170, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x51ade2cc, 0xec524c8c, 0x38eff947, 0x36d7c854, 0xe5629cca, 0xa8d08a62, 0x7a884da5, 0xfbdda384, 0xdb38fbe9, 0xf6976dfd, 0x005fd422, 0x93c6813c, 0xb8f2dcc9, 0x6cfd2716, 0x00000000, 0x500001f0 }, - FinalRegs = new uint[] { 0x40ffffff, 0xffffffff, 0x00000026, 0xff767516, 0xffffffd9, 0x000000b4, 0x80000000, 0x1feecea2, 0x6cfd1de1, 0xf75b1a7b, 0xffffff09, 0x278d022c, 0x278d0135, 0x6cfd2fc6, 0x00000000, 0x900001d0 }, + Instructions = [0x1604, 0x0a21, 0x4319, 0x4564, 0xb217, 0x459a, 0x4428, 0xb20d, 0x1b2c, 0x2a6d, 0x403e, 0x410b, 0xba30, 0x1e1d, 0xbad8, 0x309a, 0xbf63, 0xbfa0, 0xb283, 0x1430, 0x468c, 0xb071, 0xb082, 0xb0c2, 0xbfa0, 0x1caf, 0xb278, 0x4270, 0x307d, 0xbacc, 0xb0d7, 0x40ec, 0xbacf, 0x33cb, 0xa1ac, 0x1b5a, 0xbf80, 0xb2e6, 0xba4b, 0x1e68, 0xbfe0, 0xb2dc, 0x4085, 0xbf7f, 0x2943, 0x1edf, 0x4346, 0x32fb, 0x410d, 0x44f4, 0x1e4f, 0xa16f, 0xb25d, 0x4348, 0xbf18, 0xbac6, 0x0b17, 0xbac6, 0xba0c, 0xb232, 0x3f9e, 0xb22f, 0xa529, 0xbfe0, 0x43b4, 0x2768, 0x427a, 0xb2fd, 0x408f, 0x4269, 0x4388, 0x42c0, 0x3a6c, 0xbf25, 0x4219, 0x4311, 0x1de4, 0x2564, 0x41c2, 0x1963, 0xb239, 0x42c3, 0x421f, 0xb0a4, 0x403f, 0x1c19, 0x1f37, 0x40f1, 0xbfc8, 0x40ac, 0x43aa, 0x0762, 0x4672, 0xb226, 0x3a12, 0x1aa7, 0xbad5, 0xb21a, 0x42ff, 0xbfdb, 0x4302, 0x1a52, 0x16ad, 0x42cd, 0x43fa, 0xb2f5, 0x413b, 0x411c, 0xb044, 0xb056, 0xa3cf, 0x40a9, 0x11c8, 0x455b, 0x41f6, 0xb04e, 0x3cea, 0x4257, 0x4251, 0x42e9, 0x2352, 0x3e76, 0x1aa5, 0x4086, 0x4355, 0x40e8, 0x3a84, 0x103c, 0xbfb5, 0x4227, 0xb07d, 0x1056, 0x4078, 0x4166, 0xba60, 0x1dd5, 0xbfdc, 0xb294, 0x4020, 0xa37a, 0x433d, 0xb2ab, 0xb284, 0x4223, 0xbf22, 0x43c2, 0x18f8, 0x4181, 0x40f5, 0xb2fb, 0x38ea, 0x4151, 0xac89, 0xbff0, 0x40a4, 0xa65b, 0x098e, 0x4020, 0x415c, 0x244e, 0x4034, 0x27e0, 0xbf94, 0xb2ec, 0xb0d0, 0x4255, 0xbf41, 0x22ee, 0x42c3, 0x139b, 0xa16a, 0xbfc0, 0x18b8, 0x4020, 0xb05e, 0xa1b8, 0xbad3, 0xbf2e, 0x460e, 0xbaf4, 0x23aa, 0x1c22, 0x34b3, 0xba2c, 0xa046, 0x223a, 0x4236, 0x1f81, 0x40e4, 0x43ea, 0x065e, 0x4251, 0x4266, 0x409b, 0x2271, 0x43be, 0x4026, 0x4394, 0x2c3b, 0x1dfa, 0xb287, 0xa1f2, 0xaed8, 0x4044, 0x42d9, 0xbf33, 0xb2db, 0xaaec, 0x1a26, 0xa731, 0x41be, 0x4203, 0xa536, 0x4663, 0x09c1, 0x4236, 0x1bcd, 0x234a, 0x3426, 0x420c, 0x43fa, 0x42e2, 0x1fcf, 0x43f1, 0x43ef, 0x4122, 0xab1c, 0x40cb, 0x41ac, 0x40ba, 0xb2f7, 0x46b0, 0xa3fb, 0xb037, 0x4583, 0xbf1e, 0x40a3, 0x4005, 0xafe0, 0xba7e, 0x42a9, 0x38ab, 0xb2b3, 0x43bd, 0x43c4, 0x1ca1, 0x4208, 0x410d, 0x4319, 0xba00, 0x43a2, 0xbae2, 0x194f, 0x316c, 0xba00, 0xbfc1, 0x41af, 0x40eb, 0x2d1e, 0x0f59, 0xba37, 0x40ec, 0x454f, 0x23a9, 0x0eb7, 0x4130, 0x410c, 0x4273, 0xba56, 0xa4e0, 0x42d8, 0x439b, 0xa5a8, 0x43e4, 0x41ab, 0x463e, 0x4097, 0x407f, 0xbf83, 0x4203, 0x0ecb, 0x41d5, 0x423b, 0x413e, 0x41aa, 0xbf5f, 0x14be, 0x40f8, 0xbada, 0xb294, 0x1a4d, 0x41c1, 0x120e, 0x424b, 0x1ac7, 0x42e8, 0x2300, 0x4386, 0x46f2, 0x41f1, 0x413f, 0x4078, 0x4193, 0x42b0, 0x07d0, 0x194c, 0x4647, 0x4216, 0x3906, 0x1e78, 0x4038, 0x045d, 0xb2be, 0x2603, 0x416d, 0xbf4b, 0xb26e, 0x403f, 0x45c3, 0x0349, 0xba7a, 0x4186, 0x4438, 0xb078, 0xbfe0, 0x4314, 0xb236, 0xb0fc, 0x4467, 0x420b, 0x407c, 0x43d2, 0x4252, 0xba6b, 0xbadc, 0xbf4c, 0x4021, 0xba6d, 0xb2c7, 0x1f82, 0xb07b, 0x1706, 0xbf1c, 0xbfd0, 0x1d27, 0x4176, 0xb284, 0x380c, 0x4642, 0x4607, 0xb0cc, 0x44d9, 0xb2a7, 0x40b5, 0x42c2, 0xb2d6, 0xba22, 0x1ae8, 0x28fa, 0x4030, 0x0012, 0x19af, 0x4545, 0x407f, 0x43fd, 0x4603, 0xbfd6, 0x41de, 0x1ede, 0xba4c, 0x41a1, 0x41c3, 0x4371, 0x408e, 0x41bc, 0x42cd, 0x42be, 0x4172, 0xab14, 0x4068, 0xa34b, 0x1bfc, 0x1929, 0xb2a6, 0xbf76, 0xb2eb, 0x410c, 0x1fa5, 0x4241, 0x469a, 0x1eec, 0x408b, 0xbf15, 0x4304, 0x464f, 0x1424, 0x431e, 0xbf66, 0xa1af, 0xa8a3, 0xba6d, 0xb2c3, 0xba52, 0x0e61, 0x40a3, 0x4348, 0xbaf0, 0x412c, 0x1aae, 0x42a3, 0x1da6, 0x4404, 0x424c, 0x336d, 0x4044, 0x40bc, 0xb2cb, 0x3f79, 0x416e, 0xbf5f, 0x2954, 0xba01, 0xba05, 0xaef8, 0x1e85, 0x4035, 0x41c5, 0xb062, 0x1500, 0x4008, 0xbf85, 0x0e11, 0x279e, 0x4125, 0x42c2, 0xbac4, 0x438a, 0x46f2, 0x0210, 0xba56, 0xba5b, 0x11f8, 0xba09, 0xbf5f, 0xb2bd, 0x1e57, 0x3541, 0xba26, 0x1e26, 0x10de, 0x20bb, 0xbf90, 0xbf3c, 0x4182, 0x43cc, 0x40cb, 0x4275, 0x4150, 0x4164, 0x41c0, 0x42d8, 0x40c8, 0x3c64, 0xa413, 0xa6e0, 0x18fa, 0xa514, 0x464f, 0x40f1, 0x43a0, 0x1131, 0x4067, 0x4017, 0x0294, 0xb2f3, 0x4159, 0xba10, 0x3e05, 0xbf8b, 0x042f, 0x431c, 0x40c7, 0xba5a, 0x1cfe, 0x40d2, 0x4178, 0xb2ad, 0x2175, 0x41df, 0x226c, 0x426e, 0xb0a0, 0x4081, 0x42ec, 0x4035, 0x40b2, 0xbfd7, 0x4165, 0x4419, 0x43cd, 0x46ba, 0xbfc0, 0x4384, 0x0cc7, 0x1e7a, 0x466a, 0x04ed, 0x0fdc, 0x42e2, 0x42a3, 0x2874, 0x42df, 0xb2e6, 0x223a, 0x3d2a, 0x349c, 0x41b0, 0x1fb5, 0x2ef3, 0xbfa3, 0x14e3, 0xbac0, 0x4357, 0xb2a5, 0xba2a, 0x4161, 0x4218, 0xb0b3, 0x4110, 0x15d7, 0x412e, 0xbfaf, 0xb2bb, 0x1930, 0xba71, 0x1dc0, 0xbf53, 0x4363, 0x4237, 0x206b, 0x1a83, 0x1f94, 0x41fb, 0x4071, 0x4632, 0x41ca, 0xb000, 0x2298, 0x4191, 0xa626, 0xb215, 0x24be, 0x40b3, 0x02a0, 0xb209, 0x2ff4, 0x0d5d, 0x43ef, 0x21e6, 0x1915, 0x401f, 0xbf84, 0x461f, 0x4244, 0x421c, 0xba26, 0x43f2, 0xba11, 0x42b4, 0x17d4, 0x43e7, 0x072e, 0x41a1, 0xaee1, 0x4090, 0xb20e, 0x40e9, 0xb207, 0x1dd0, 0x1cc6, 0xbfb1, 0xb045, 0x2731, 0x4271, 0xbade, 0xb217, 0x403f, 0x35ea, 0x1eea, 0xaa77, 0x2632, 0x19c7, 0xba1a, 0x433f, 0x439e, 0xbf15, 0x1a25, 0x40b9, 0x14f0, 0x3dd4, 0x3c2a, 0x3be5, 0x43c9, 0x40e1, 0x435d, 0x41eb, 0xb236, 0x46ec, 0x1701, 0x403b, 0xbaee, 0xb030, 0x43d4, 0xa1a0, 0x0433, 0xb0ed, 0xbaee, 0xbf47, 0xb25d, 0x410c, 0x41e2, 0x1d4a, 0x1fa0, 0x3d98, 0x1f8f, 0x3a41, 0x41c6, 0x456d, 0x04a1, 0xb2ca, 0x1d5e, 0x40ca, 0xa917, 0x40d1, 0xa2c5, 0x428f, 0x225d, 0x11fe, 0x42d3, 0xbfd9, 0xb2d2, 0x1ca9, 0xafda, 0xbf80, 0xb252, 0x2a1a, 0xbaf3, 0x430a, 0xb244, 0x1c06, 0xa3c7, 0x1c7b, 0x407f, 0xba7a, 0xb2c9, 0x43af, 0x4266, 0xba74, 0xbfbd, 0x1822, 0xba00, 0xb218, 0xb23a, 0x42da, 0x1ec2, 0x412b, 0xb257, 0x2422, 0xbf68, 0xbac7, 0x43fa, 0x1072, 0x4102, 0xb2f7, 0xba43, 0x4303, 0xbac6, 0xb296, 0x1cd6, 0x4379, 0x180e, 0x3654, 0x432f, 0xbf80, 0x228d, 0x03ca, 0x43d0, 0x43b1, 0x2ddd, 0x41fa, 0x35b8, 0x35fe, 0x4212, 0x3dc5, 0xbf59, 0x446f, 0xba34, 0xb234, 0x45c0, 0x461c, 0x1c69, 0xa91c, 0xbfab, 0x43e0, 0x098b, 0x4052, 0x4389, 0xb2b5, 0x1ed5, 0x4129, 0x0b1b, 0x2abf, 0x1b81, 0x32cd, 0x431f, 0xbf60, 0x1adb, 0x42fb, 0x40f0, 0x43d0, 0xb272, 0x4041, 0x421b, 0x43f7, 0xbf2c, 0x46a2, 0x43d8, 0x43bd, 0x439c, 0xba01, 0x3e66, 0x19dc, 0xbf28, 0xb04a, 0x4286, 0x429d, 0x25ec, 0x4381, 0xba19, 0xb2f8, 0x4042, 0x1f44, 0x1ea0, 0x42dc, 0x438d, 0x40f1, 0x1f2f, 0xba50, 0x4311, 0xa700, 0xb0ed, 0x1c9b, 0xb0c5, 0x2742, 0x431c, 0xbf1e, 0x409e, 0xaf81, 0xba68, 0x4364, 0x4078, 0x0ac1, 0xab14, 0xbaec, 0x4499, 0x0a77, 0x0594, 0x2e04, 0xba67, 0x2c60, 0x41c8, 0x443e, 0x4273, 0xb00f, 0x41b1, 0x43b1, 0x1f25, 0xbf34, 0x4282, 0xb2fc, 0xbf44, 0x400d, 0xb275, 0xaf07, 0xb06d, 0x44db, 0x12f2, 0x4082, 0x0b28, 0xb0ac, 0xbfc0, 0xb2ca, 0xb2cb, 0x4462, 0x45b6, 0x4328, 0xb24a, 0x2a77, 0x425e, 0xbf78, 0xb24c, 0x43f5, 0x17b8, 0x2ab7, 0xb285, 0x40b9, 0xa7d7, 0x45e4, 0xb0e1, 0x4395, 0x4020, 0x2b72, 0x4200, 0xb069, 0x40db, 0x41af, 0x42dc, 0x41c6, 0x16a0, 0xb268, 0xbf68, 0xb0e3, 0x421b, 0x4208, 0xa3e3, 0x3cd0, 0xbf54, 0x3d55, 0xba7c, 0x4399, 0xb213, 0x43d0, 0x160a, 0xbfe4, 0x4659, 0x4327, 0x107b, 0xb2f7, 0x42ea, 0xbf00, 0x43d4, 0x2fa0, 0x41ad, 0x195b, 0xb2c5, 0x05dc, 0x43c7, 0x4074, 0x426e, 0xb084, 0x4354, 0x1993, 0xbf44, 0x4226, 0x118b, 0x0a67, 0xbaca, 0x43ea, 0x2159, 0x416e, 0x190e, 0x0629, 0xbf68, 0x4155, 0x41f9, 0x2408, 0xbf2c, 0x1a7a, 0x4137, 0x17b6, 0x4092, 0xb039, 0x404c, 0x4324, 0x40de, 0x40df, 0xbf35, 0x400e, 0x1853, 0x4246, 0x3887, 0xb2b8, 0x44b3, 0x0cc0, 0x294e, 0x0158, 0xb24b, 0xba1c, 0x1f56, 0x0aff, 0xb298, 0xbf69, 0x32c4, 0x44ad, 0x1804, 0x4189, 0x40ff, 0x1993, 0xada4, 0x1f03, 0xbaec, 0x43ed, 0x40e9, 0x1957, 0x40af, 0x46dc, 0xad97, 0x4368, 0x4271, 0x4156, 0xbf52, 0x41ba, 0x4348, 0x4550, 0x0bf9, 0x4039, 0x4692, 0x2bed, 0x40d5, 0xba49, 0x0c78, 0x1ba4, 0xba44, 0x0087, 0x4045, 0x42fe, 0xb299, 0xba7b, 0xbf86, 0x46e9, 0x1a43, 0x0677, 0x3bf7, 0x445e, 0x1c2d, 0x4208, 0x43e0, 0x18ff, 0x1077, 0x2711, 0x425a, 0xba76, 0xb04f, 0xb2a9, 0x1a42, 0x449a, 0xb2e8, 0x4019, 0x1195, 0x42c2, 0xb208, 0x449c, 0xbacc, 0xba2f, 0xbf90, 0xbf44, 0xbacb, 0xbaeb, 0x1d0c, 0x4119, 0xb2e4, 0xb209, 0x45c3, 0x4580, 0xba39, 0x41f0, 0xbf7b, 0xb239, 0x42ed, 0x412f, 0x3276, 0xb0e3, 0xb285, 0x146e, 0xb064, 0xa6c5, 0xbf12, 0x4037, 0xbaf9, 0xb2ba, 0x4345, 0x156c, 0x404b, 0x407a, 0x1c20, 0x44f2, 0xba73, 0x404e, 0x4338, 0x2e25, 0xba5e, 0x1b5b, 0xb2f5, 0x4247, 0xbf5a, 0xa67b, 0xb257, 0x1c8e, 0x2226, 0x43d4, 0xb045, 0x4197, 0x41f6, 0x08df, 0xbf5c, 0x42b0, 0x4170, 0x4770, 0xe7fe + ], + StartRegs = [0x51ade2cc, 0xec524c8c, 0x38eff947, 0x36d7c854, 0xe5629cca, 0xa8d08a62, 0x7a884da5, 0xfbdda384, 0xdb38fbe9, 0xf6976dfd, 0x005fd422, 0x93c6813c, 0xb8f2dcc9, 0x6cfd2716, 0x00000000, 0x500001f0 + ], + FinalRegs = [0x40ffffff, 0xffffffff, 0x00000026, 0xff767516, 0xffffffd9, 0x000000b4, 0x80000000, 0x1feecea2, 0x6cfd1de1, 0xf75b1a7b, 0xffffff09, 0x278d022c, 0x278d0135, 0x6cfd2fc6, 0x00000000, 0x900001d0 + ], }, new() { - Instructions = new ushort[] { 0xa6c2, 0x4488, 0xb2d1, 0xb06a, 0x4083, 0x44ca, 0xba42, 0x1d14, 0x420d, 0xbade, 0x4103, 0x40f9, 0x4003, 0xb0d9, 0x4552, 0xbfcc, 0xa2db, 0xa663, 0xba1e, 0x2e6c, 0x43d1, 0x407f, 0x401a, 0xb2c1, 0x4631, 0x0681, 0xa7bb, 0x4649, 0xb05b, 0xbfe1, 0x28a0, 0x1af0, 0x16fa, 0x45c8, 0xab5a, 0x4399, 0x4423, 0x1bdd, 0xb044, 0x2499, 0x4440, 0x3ee0, 0xb02f, 0x0ddd, 0x4127, 0xbf08, 0xba20, 0xba1c, 0x03ac, 0xb0f7, 0x40e5, 0x4116, 0x4116, 0x468a, 0x422d, 0xb2d9, 0x43c9, 0x41ea, 0x4054, 0xbace, 0x437c, 0xbf91, 0x40a4, 0xb247, 0x18af, 0x16e1, 0xb255, 0xbade, 0xb0a3, 0x1f17, 0xbf47, 0xb0be, 0x1037, 0xb2b8, 0x175f, 0x18fc, 0xb286, 0x41bd, 0x46f3, 0x42b4, 0x0b47, 0x4359, 0x18c2, 0xadd5, 0xbf2c, 0x1c76, 0xba76, 0x4132, 0xba48, 0x43f4, 0x168c, 0x416e, 0xbfab, 0x4194, 0x1bc0, 0x28da, 0x42c5, 0x4423, 0x41ff, 0xb2ff, 0xb008, 0x20d3, 0x437e, 0x4034, 0xba40, 0x425e, 0xa06c, 0xba68, 0xba72, 0x00eb, 0x41b2, 0x411e, 0x1b3d, 0x2f08, 0xb089, 0x411a, 0x14ff, 0xb2be, 0x4633, 0xbf7d, 0x4150, 0x40c2, 0xb28a, 0x1e72, 0xba3d, 0x0aae, 0x435e, 0x205c, 0xb067, 0x4353, 0x21c0, 0x43e1, 0x4141, 0x0572, 0x43ae, 0x427c, 0x42ae, 0x4026, 0x2df2, 0x405c, 0x37ec, 0x4074, 0x1559, 0xb2e7, 0xbfe0, 0xb2b4, 0x41cb, 0x0d6c, 0x433a, 0xbf64, 0x1d3e, 0xb2f3, 0xba2e, 0x4020, 0xba4f, 0xb2b6, 0x43ff, 0xa82c, 0x1929, 0x421e, 0x18af, 0x4415, 0xbf33, 0x4698, 0x1b4a, 0x27e0, 0x40f2, 0xb25e, 0xba7b, 0xb26a, 0x4309, 0x4064, 0x402b, 0x4098, 0xb245, 0x43bd, 0x0c9f, 0x42de, 0x015f, 0x4321, 0x1a23, 0xb28e, 0xba29, 0x406b, 0x1998, 0x4265, 0xbf38, 0x4314, 0xb2b6, 0x165c, 0xbafc, 0xbf70, 0xb048, 0xba43, 0x46bb, 0x4001, 0x0cb8, 0x43fb, 0x270f, 0xb2fc, 0x0ae9, 0x4223, 0x423f, 0x26fd, 0x419e, 0xa390, 0xb0ff, 0xb2cf, 0x0bc0, 0xbf4b, 0x4135, 0x4559, 0xb2bf, 0xba2e, 0xa3e9, 0x4310, 0xba44, 0x43ff, 0x4394, 0x401c, 0x41f6, 0x42d0, 0xbf84, 0xa7d9, 0x42c0, 0x0a4b, 0x4285, 0x42a0, 0xb040, 0x1ba8, 0xa9fa, 0xba04, 0x358a, 0x4003, 0x46d4, 0x41fe, 0xba48, 0x2c12, 0x41a3, 0x4161, 0x4372, 0x448b, 0xbf98, 0x0627, 0xb23c, 0x4170, 0x0a61, 0xb279, 0x4260, 0x06b6, 0x3f4f, 0x4319, 0x40a8, 0x24ea, 0xbfe8, 0x412c, 0x3af2, 0x415d, 0x42f8, 0x27fc, 0xb04c, 0x2615, 0x432f, 0x447e, 0xb0b6, 0xb0e8, 0xbf15, 0x4034, 0xbadf, 0xba1e, 0x43d6, 0x00f1, 0x2101, 0xb229, 0x270d, 0x0d8f, 0x1c5a, 0x3665, 0x4364, 0xbad0, 0x435f, 0x1ae3, 0x20f4, 0x42f6, 0x4606, 0x38db, 0x1391, 0x42ee, 0x4550, 0xb233, 0xa680, 0x4310, 0x4005, 0x41a2, 0x42dc, 0x43e8, 0xbf0e, 0xb2ad, 0xa2f4, 0x1508, 0xae86, 0x4320, 0xbf55, 0x2d19, 0x43ef, 0x42db, 0xb0a9, 0x3556, 0xb01e, 0x4176, 0x43b8, 0x4462, 0x077f, 0xba0b, 0x42d6, 0xb2c2, 0x4336, 0x4384, 0xb2bf, 0x4002, 0x4262, 0x1f32, 0x46db, 0x4239, 0xb200, 0x1f3c, 0x4167, 0xb23b, 0xb0d4, 0x43cd, 0x0623, 0xbfb5, 0x2020, 0x1c56, 0x1cf6, 0x433f, 0x43b3, 0x429e, 0x41e3, 0xb2aa, 0x43fd, 0x1cac, 0x3d18, 0x4077, 0x411f, 0x4058, 0x43dd, 0xb244, 0x41ee, 0x4268, 0x2fa0, 0x243a, 0xb00a, 0xb2e4, 0x3b24, 0xa3df, 0xbfa6, 0x42c4, 0xb072, 0x1cbb, 0x4090, 0xbf9f, 0xba2a, 0x3835, 0xb27c, 0x4217, 0x4283, 0xb232, 0xbf1c, 0x43c9, 0xb2a2, 0xb2a3, 0x4194, 0xb25c, 0xbf92, 0x4085, 0x4278, 0x4073, 0x40b4, 0x423c, 0x1d1a, 0xbac1, 0x43b0, 0x4330, 0x1c88, 0xb210, 0x2e6a, 0x4018, 0x41ac, 0x0ac5, 0xb2ea, 0x4569, 0x141c, 0xbf8b, 0xbf70, 0x42ab, 0x4031, 0xbacb, 0x41ec, 0x4019, 0x3670, 0x2cf6, 0x401f, 0x26a1, 0x41eb, 0xb23f, 0xb221, 0x4671, 0xb2bb, 0xbf60, 0x363e, 0x420b, 0xab50, 0xbf77, 0x1e0f, 0xae4e, 0xb025, 0xba19, 0x1f73, 0x37a5, 0x1c37, 0xbf90, 0xbf93, 0xb058, 0x1c46, 0x1c5d, 0x19a0, 0x0b41, 0xbfa0, 0xb2ae, 0x1f46, 0xb237, 0x14c9, 0x405c, 0x2f26, 0x46e8, 0x41a5, 0x46b0, 0xb22d, 0xb03f, 0x1fc2, 0x3b4f, 0xbfa6, 0x1faa, 0x432c, 0x19ea, 0x40f5, 0x4246, 0x1f94, 0x4385, 0xa1df, 0x38f5, 0x049a, 0x455f, 0xa132, 0x08ee, 0x1c37, 0xbfa0, 0x1e5e, 0x401a, 0x43ac, 0x402c, 0x4222, 0x3931, 0x2124, 0x44aa, 0x42a8, 0xb0f0, 0xa8c8, 0x1e5e, 0xa92c, 0xbf65, 0x4045, 0xbaeb, 0xba57, 0x44ad, 0xac8a, 0x420b, 0x353f, 0xb23e, 0xa0ff, 0x1872, 0x41cb, 0xb22e, 0xb0cc, 0x4213, 0x40e3, 0x0aef, 0x411c, 0xb0bc, 0x1d52, 0xa778, 0xb0d0, 0xbf56, 0x43d1, 0x42f4, 0x1d5b, 0x1dc2, 0x0f45, 0x4381, 0xb214, 0xb09f, 0x4175, 0x4680, 0x24ea, 0xb231, 0xb264, 0xa2ed, 0xbace, 0x181b, 0xbf08, 0x42a5, 0xa7c2, 0x4018, 0xbfbf, 0xb2b2, 0x4309, 0x4264, 0x02c3, 0xa5f0, 0x1d34, 0xb209, 0x4090, 0x3005, 0x431d, 0xb223, 0x434e, 0x0cec, 0x0970, 0x43d2, 0x402e, 0x403d, 0x1385, 0x1eac, 0x1fe2, 0x427b, 0x0159, 0x0702, 0x0390, 0xbf6b, 0x40e8, 0x403d, 0xa17c, 0x2fb8, 0x41ec, 0x4112, 0xba4c, 0x2c3a, 0xaecc, 0x458a, 0x435a, 0x1950, 0x429d, 0x1d8e, 0xaf4e, 0x36e9, 0xb205, 0xb0d3, 0x4394, 0x4489, 0x425e, 0x01cf, 0xbae3, 0x4131, 0xbae9, 0x4001, 0x0f9b, 0x431c, 0xbf91, 0xabc7, 0x40b6, 0xba5c, 0xa210, 0xbaf8, 0x0f46, 0x43d3, 0x3404, 0xaaea, 0x430e, 0x4248, 0x1d7e, 0x42e1, 0x41ff, 0x011a, 0xb230, 0x4037, 0x0e79, 0x3a4a, 0xb0d9, 0xbf97, 0xb21f, 0xafa8, 0xa731, 0x4185, 0x1b7d, 0xb095, 0x4156, 0xb2cb, 0x14d5, 0x41e0, 0x40b7, 0x31e8, 0x42ee, 0x2060, 0x3a39, 0x419b, 0x40a7, 0x1e06, 0x39bc, 0x1930, 0x4238, 0x412b, 0x43e6, 0xbfcb, 0xbaf1, 0x3518, 0x27a0, 0x42d2, 0xb2a4, 0xbfdc, 0x4293, 0x4337, 0xae16, 0x4429, 0x4050, 0xb079, 0x4031, 0x1638, 0x420b, 0x1f17, 0x43a4, 0x1bf4, 0x433b, 0x178f, 0x4060, 0xbf7b, 0x4339, 0x43d1, 0x40c6, 0xbaea, 0x154c, 0x4247, 0x412a, 0x41a0, 0x41d1, 0x4260, 0xbacf, 0x20af, 0x4285, 0x126a, 0xbf44, 0xbfb0, 0x4425, 0xb22f, 0x1a6f, 0x427c, 0x4196, 0x4367, 0x4213, 0x1620, 0xbf7b, 0x4565, 0x32f9, 0x40b2, 0x395c, 0x4105, 0xbf70, 0xbfb5, 0x412d, 0x409e, 0x180e, 0x1a80, 0x4136, 0x27e3, 0xbae3, 0x1c3a, 0xb213, 0x1301, 0xb2fb, 0xb098, 0xbfd0, 0x324c, 0x2876, 0xab33, 0x1c23, 0x248e, 0xb256, 0x1dd9, 0x0d3e, 0x01e8, 0x403b, 0x40fa, 0x41a4, 0x41f6, 0xbf69, 0x4371, 0x40dd, 0x46a1, 0x402c, 0x41e8, 0xba49, 0x40d7, 0x4605, 0x1aa1, 0x37d2, 0xba62, 0xbf61, 0xb28b, 0x4136, 0x36ee, 0x40fc, 0x3ead, 0x412c, 0x43aa, 0x233d, 0x3ac3, 0x421a, 0x4117, 0x091d, 0xb2c9, 0x163a, 0x408b, 0x4273, 0x141e, 0xa5b2, 0x40da, 0x4082, 0xbfd8, 0x4080, 0x4347, 0x1830, 0x414c, 0xbafe, 0xbf07, 0x21d3, 0x435b, 0x415c, 0xbf00, 0xb285, 0x0453, 0x1b3f, 0x383a, 0x40db, 0x36f2, 0xba4d, 0x4128, 0xbf72, 0x428f, 0xa6c7, 0x19c1, 0x2878, 0x1f51, 0xba30, 0xbae9, 0x4346, 0x43c2, 0x0c82, 0x1d23, 0x466b, 0x40e0, 0xba10, 0xac8c, 0x1ff2, 0x1adf, 0x4356, 0x401c, 0xbaf8, 0xac9d, 0xb000, 0x41e9, 0xb297, 0x4155, 0xbfdb, 0xb04e, 0xb281, 0x43a2, 0x428c, 0xb2d8, 0x42bb, 0x2cfb, 0xb2de, 0x1fc8, 0x4301, 0x45f2, 0x1ee3, 0x04c6, 0xba61, 0x4002, 0x0798, 0xb29a, 0x433d, 0x1e61, 0x42fb, 0xbf56, 0x411f, 0xb0ed, 0xbf90, 0x456d, 0x1437, 0x413c, 0x4126, 0x42ca, 0xbad4, 0x1917, 0x4350, 0xbae2, 0x4135, 0x0247, 0x418b, 0x151d, 0x173d, 0x4054, 0xb284, 0xb22f, 0x4296, 0xb28f, 0x2e6c, 0xb2c0, 0x1f1c, 0xbfa9, 0x0906, 0xba7e, 0x1b04, 0xba58, 0xbaee, 0x4000, 0xb200, 0xb0d5, 0x414f, 0x14ff, 0xb0a0, 0x4220, 0x4249, 0xba6a, 0x4187, 0xbf53, 0x43bd, 0x1de3, 0x467d, 0x3a73, 0x18c3, 0x4263, 0x42cd, 0x42ec, 0x44b5, 0x089b, 0x1ce1, 0x18d2, 0x41d3, 0x3636, 0x1de6, 0xba4c, 0xb08d, 0x1b88, 0x1d9e, 0x3a85, 0xbfd3, 0xb051, 0xb2cd, 0x1c2b, 0xb07a, 0xb261, 0x07f4, 0x3ffa, 0xb0a1, 0x42a9, 0x40f3, 0xba2c, 0x40d5, 0xb026, 0x08bd, 0x415d, 0x1e67, 0x4377, 0x43c9, 0x1d0c, 0xb278, 0x437e, 0x4159, 0x456c, 0xbf90, 0x4191, 0x428e, 0xbfa9, 0x2e5f, 0x43af, 0x41d7, 0xb259, 0x42e0, 0x4221, 0xb2d4, 0xb07e, 0x4186, 0xbf80, 0x40a3, 0x45bd, 0x416a, 0x4324, 0x4068, 0x3029, 0x43dc, 0x41d1, 0xa79d, 0xbf1d, 0x2443, 0xba2b, 0x4111, 0x1a70, 0xa102, 0x43a3, 0xb0c8, 0xba62, 0x41b6, 0x41b6, 0x09a5, 0x41a6, 0x427a, 0x3e4d, 0x419e, 0x062f, 0xb24e, 0x1110, 0x41c9, 0x41ad, 0x2a40, 0xbf6b, 0x4279, 0x4347, 0xb242, 0xb2b0, 0x097c, 0x460e, 0x1e67, 0x4144, 0xa11e, 0x1ee4, 0x351d, 0xb247, 0x43f5, 0x1a26, 0x4357, 0x41fa, 0x40cb, 0x41ac, 0xba63, 0x1d28, 0xba76, 0x28e1, 0x38e7, 0x4098, 0x42b3, 0xbfbd, 0xb2bc, 0xbadc, 0xbad0, 0xba1a, 0x40fd, 0x42ca, 0x40ad, 0x42d4, 0xb251, 0xb2f2, 0xb2fd, 0x4138, 0x1b82, 0xba23, 0x1efb, 0x11d5, 0x413c, 0xb273, 0x1ce6, 0xa2a1, 0xbf79, 0x4197, 0x43e3, 0xbae9, 0x4015, 0x43e9, 0xa21c, 0xb0d0, 0x4059, 0x408f, 0x4067, 0x4387, 0xb2f2, 0x461b, 0x4019, 0x40a4, 0x4619, 0x41f1, 0xb04c, 0x46ac, 0x43d7, 0xa438, 0x4108, 0x0e03, 0xba59, 0x41e4, 0x43db, 0xb2e0, 0xb2b8, 0x1f88, 0xbf55, 0x432d, 0xb223, 0x09e7, 0xaea6, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x76fb2e83, 0x2c9a97ce, 0x4afe2dc9, 0x2a8a6d29, 0xf34a1d2a, 0xe92c22a4, 0xcd859d8b, 0xab9291ff, 0xdca83fbb, 0x24a63f86, 0xf4d326a0, 0xc55ab8ca, 0x50c313fb, 0x47bdd172, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0xfffffffa, 0x00000000, 0x00000003, 0x0000018a, 0x4000018a, 0xff91f802, 0x47bdd252, 0xfffffffc, 0x000017c0, 0x24a35e06, 0x20022b04, 0x47bdd732, 0xff91f802, 0x47bdcfba, 0x00000000, 0x800001d0 }, + Instructions = [0xa6c2, 0x4488, 0xb2d1, 0xb06a, 0x4083, 0x44ca, 0xba42, 0x1d14, 0x420d, 0xbade, 0x4103, 0x40f9, 0x4003, 0xb0d9, 0x4552, 0xbfcc, 0xa2db, 0xa663, 0xba1e, 0x2e6c, 0x43d1, 0x407f, 0x401a, 0xb2c1, 0x4631, 0x0681, 0xa7bb, 0x4649, 0xb05b, 0xbfe1, 0x28a0, 0x1af0, 0x16fa, 0x45c8, 0xab5a, 0x4399, 0x4423, 0x1bdd, 0xb044, 0x2499, 0x4440, 0x3ee0, 0xb02f, 0x0ddd, 0x4127, 0xbf08, 0xba20, 0xba1c, 0x03ac, 0xb0f7, 0x40e5, 0x4116, 0x4116, 0x468a, 0x422d, 0xb2d9, 0x43c9, 0x41ea, 0x4054, 0xbace, 0x437c, 0xbf91, 0x40a4, 0xb247, 0x18af, 0x16e1, 0xb255, 0xbade, 0xb0a3, 0x1f17, 0xbf47, 0xb0be, 0x1037, 0xb2b8, 0x175f, 0x18fc, 0xb286, 0x41bd, 0x46f3, 0x42b4, 0x0b47, 0x4359, 0x18c2, 0xadd5, 0xbf2c, 0x1c76, 0xba76, 0x4132, 0xba48, 0x43f4, 0x168c, 0x416e, 0xbfab, 0x4194, 0x1bc0, 0x28da, 0x42c5, 0x4423, 0x41ff, 0xb2ff, 0xb008, 0x20d3, 0x437e, 0x4034, 0xba40, 0x425e, 0xa06c, 0xba68, 0xba72, 0x00eb, 0x41b2, 0x411e, 0x1b3d, 0x2f08, 0xb089, 0x411a, 0x14ff, 0xb2be, 0x4633, 0xbf7d, 0x4150, 0x40c2, 0xb28a, 0x1e72, 0xba3d, 0x0aae, 0x435e, 0x205c, 0xb067, 0x4353, 0x21c0, 0x43e1, 0x4141, 0x0572, 0x43ae, 0x427c, 0x42ae, 0x4026, 0x2df2, 0x405c, 0x37ec, 0x4074, 0x1559, 0xb2e7, 0xbfe0, 0xb2b4, 0x41cb, 0x0d6c, 0x433a, 0xbf64, 0x1d3e, 0xb2f3, 0xba2e, 0x4020, 0xba4f, 0xb2b6, 0x43ff, 0xa82c, 0x1929, 0x421e, 0x18af, 0x4415, 0xbf33, 0x4698, 0x1b4a, 0x27e0, 0x40f2, 0xb25e, 0xba7b, 0xb26a, 0x4309, 0x4064, 0x402b, 0x4098, 0xb245, 0x43bd, 0x0c9f, 0x42de, 0x015f, 0x4321, 0x1a23, 0xb28e, 0xba29, 0x406b, 0x1998, 0x4265, 0xbf38, 0x4314, 0xb2b6, 0x165c, 0xbafc, 0xbf70, 0xb048, 0xba43, 0x46bb, 0x4001, 0x0cb8, 0x43fb, 0x270f, 0xb2fc, 0x0ae9, 0x4223, 0x423f, 0x26fd, 0x419e, 0xa390, 0xb0ff, 0xb2cf, 0x0bc0, 0xbf4b, 0x4135, 0x4559, 0xb2bf, 0xba2e, 0xa3e9, 0x4310, 0xba44, 0x43ff, 0x4394, 0x401c, 0x41f6, 0x42d0, 0xbf84, 0xa7d9, 0x42c0, 0x0a4b, 0x4285, 0x42a0, 0xb040, 0x1ba8, 0xa9fa, 0xba04, 0x358a, 0x4003, 0x46d4, 0x41fe, 0xba48, 0x2c12, 0x41a3, 0x4161, 0x4372, 0x448b, 0xbf98, 0x0627, 0xb23c, 0x4170, 0x0a61, 0xb279, 0x4260, 0x06b6, 0x3f4f, 0x4319, 0x40a8, 0x24ea, 0xbfe8, 0x412c, 0x3af2, 0x415d, 0x42f8, 0x27fc, 0xb04c, 0x2615, 0x432f, 0x447e, 0xb0b6, 0xb0e8, 0xbf15, 0x4034, 0xbadf, 0xba1e, 0x43d6, 0x00f1, 0x2101, 0xb229, 0x270d, 0x0d8f, 0x1c5a, 0x3665, 0x4364, 0xbad0, 0x435f, 0x1ae3, 0x20f4, 0x42f6, 0x4606, 0x38db, 0x1391, 0x42ee, 0x4550, 0xb233, 0xa680, 0x4310, 0x4005, 0x41a2, 0x42dc, 0x43e8, 0xbf0e, 0xb2ad, 0xa2f4, 0x1508, 0xae86, 0x4320, 0xbf55, 0x2d19, 0x43ef, 0x42db, 0xb0a9, 0x3556, 0xb01e, 0x4176, 0x43b8, 0x4462, 0x077f, 0xba0b, 0x42d6, 0xb2c2, 0x4336, 0x4384, 0xb2bf, 0x4002, 0x4262, 0x1f32, 0x46db, 0x4239, 0xb200, 0x1f3c, 0x4167, 0xb23b, 0xb0d4, 0x43cd, 0x0623, 0xbfb5, 0x2020, 0x1c56, 0x1cf6, 0x433f, 0x43b3, 0x429e, 0x41e3, 0xb2aa, 0x43fd, 0x1cac, 0x3d18, 0x4077, 0x411f, 0x4058, 0x43dd, 0xb244, 0x41ee, 0x4268, 0x2fa0, 0x243a, 0xb00a, 0xb2e4, 0x3b24, 0xa3df, 0xbfa6, 0x42c4, 0xb072, 0x1cbb, 0x4090, 0xbf9f, 0xba2a, 0x3835, 0xb27c, 0x4217, 0x4283, 0xb232, 0xbf1c, 0x43c9, 0xb2a2, 0xb2a3, 0x4194, 0xb25c, 0xbf92, 0x4085, 0x4278, 0x4073, 0x40b4, 0x423c, 0x1d1a, 0xbac1, 0x43b0, 0x4330, 0x1c88, 0xb210, 0x2e6a, 0x4018, 0x41ac, 0x0ac5, 0xb2ea, 0x4569, 0x141c, 0xbf8b, 0xbf70, 0x42ab, 0x4031, 0xbacb, 0x41ec, 0x4019, 0x3670, 0x2cf6, 0x401f, 0x26a1, 0x41eb, 0xb23f, 0xb221, 0x4671, 0xb2bb, 0xbf60, 0x363e, 0x420b, 0xab50, 0xbf77, 0x1e0f, 0xae4e, 0xb025, 0xba19, 0x1f73, 0x37a5, 0x1c37, 0xbf90, 0xbf93, 0xb058, 0x1c46, 0x1c5d, 0x19a0, 0x0b41, 0xbfa0, 0xb2ae, 0x1f46, 0xb237, 0x14c9, 0x405c, 0x2f26, 0x46e8, 0x41a5, 0x46b0, 0xb22d, 0xb03f, 0x1fc2, 0x3b4f, 0xbfa6, 0x1faa, 0x432c, 0x19ea, 0x40f5, 0x4246, 0x1f94, 0x4385, 0xa1df, 0x38f5, 0x049a, 0x455f, 0xa132, 0x08ee, 0x1c37, 0xbfa0, 0x1e5e, 0x401a, 0x43ac, 0x402c, 0x4222, 0x3931, 0x2124, 0x44aa, 0x42a8, 0xb0f0, 0xa8c8, 0x1e5e, 0xa92c, 0xbf65, 0x4045, 0xbaeb, 0xba57, 0x44ad, 0xac8a, 0x420b, 0x353f, 0xb23e, 0xa0ff, 0x1872, 0x41cb, 0xb22e, 0xb0cc, 0x4213, 0x40e3, 0x0aef, 0x411c, 0xb0bc, 0x1d52, 0xa778, 0xb0d0, 0xbf56, 0x43d1, 0x42f4, 0x1d5b, 0x1dc2, 0x0f45, 0x4381, 0xb214, 0xb09f, 0x4175, 0x4680, 0x24ea, 0xb231, 0xb264, 0xa2ed, 0xbace, 0x181b, 0xbf08, 0x42a5, 0xa7c2, 0x4018, 0xbfbf, 0xb2b2, 0x4309, 0x4264, 0x02c3, 0xa5f0, 0x1d34, 0xb209, 0x4090, 0x3005, 0x431d, 0xb223, 0x434e, 0x0cec, 0x0970, 0x43d2, 0x402e, 0x403d, 0x1385, 0x1eac, 0x1fe2, 0x427b, 0x0159, 0x0702, 0x0390, 0xbf6b, 0x40e8, 0x403d, 0xa17c, 0x2fb8, 0x41ec, 0x4112, 0xba4c, 0x2c3a, 0xaecc, 0x458a, 0x435a, 0x1950, 0x429d, 0x1d8e, 0xaf4e, 0x36e9, 0xb205, 0xb0d3, 0x4394, 0x4489, 0x425e, 0x01cf, 0xbae3, 0x4131, 0xbae9, 0x4001, 0x0f9b, 0x431c, 0xbf91, 0xabc7, 0x40b6, 0xba5c, 0xa210, 0xbaf8, 0x0f46, 0x43d3, 0x3404, 0xaaea, 0x430e, 0x4248, 0x1d7e, 0x42e1, 0x41ff, 0x011a, 0xb230, 0x4037, 0x0e79, 0x3a4a, 0xb0d9, 0xbf97, 0xb21f, 0xafa8, 0xa731, 0x4185, 0x1b7d, 0xb095, 0x4156, 0xb2cb, 0x14d5, 0x41e0, 0x40b7, 0x31e8, 0x42ee, 0x2060, 0x3a39, 0x419b, 0x40a7, 0x1e06, 0x39bc, 0x1930, 0x4238, 0x412b, 0x43e6, 0xbfcb, 0xbaf1, 0x3518, 0x27a0, 0x42d2, 0xb2a4, 0xbfdc, 0x4293, 0x4337, 0xae16, 0x4429, 0x4050, 0xb079, 0x4031, 0x1638, 0x420b, 0x1f17, 0x43a4, 0x1bf4, 0x433b, 0x178f, 0x4060, 0xbf7b, 0x4339, 0x43d1, 0x40c6, 0xbaea, 0x154c, 0x4247, 0x412a, 0x41a0, 0x41d1, 0x4260, 0xbacf, 0x20af, 0x4285, 0x126a, 0xbf44, 0xbfb0, 0x4425, 0xb22f, 0x1a6f, 0x427c, 0x4196, 0x4367, 0x4213, 0x1620, 0xbf7b, 0x4565, 0x32f9, 0x40b2, 0x395c, 0x4105, 0xbf70, 0xbfb5, 0x412d, 0x409e, 0x180e, 0x1a80, 0x4136, 0x27e3, 0xbae3, 0x1c3a, 0xb213, 0x1301, 0xb2fb, 0xb098, 0xbfd0, 0x324c, 0x2876, 0xab33, 0x1c23, 0x248e, 0xb256, 0x1dd9, 0x0d3e, 0x01e8, 0x403b, 0x40fa, 0x41a4, 0x41f6, 0xbf69, 0x4371, 0x40dd, 0x46a1, 0x402c, 0x41e8, 0xba49, 0x40d7, 0x4605, 0x1aa1, 0x37d2, 0xba62, 0xbf61, 0xb28b, 0x4136, 0x36ee, 0x40fc, 0x3ead, 0x412c, 0x43aa, 0x233d, 0x3ac3, 0x421a, 0x4117, 0x091d, 0xb2c9, 0x163a, 0x408b, 0x4273, 0x141e, 0xa5b2, 0x40da, 0x4082, 0xbfd8, 0x4080, 0x4347, 0x1830, 0x414c, 0xbafe, 0xbf07, 0x21d3, 0x435b, 0x415c, 0xbf00, 0xb285, 0x0453, 0x1b3f, 0x383a, 0x40db, 0x36f2, 0xba4d, 0x4128, 0xbf72, 0x428f, 0xa6c7, 0x19c1, 0x2878, 0x1f51, 0xba30, 0xbae9, 0x4346, 0x43c2, 0x0c82, 0x1d23, 0x466b, 0x40e0, 0xba10, 0xac8c, 0x1ff2, 0x1adf, 0x4356, 0x401c, 0xbaf8, 0xac9d, 0xb000, 0x41e9, 0xb297, 0x4155, 0xbfdb, 0xb04e, 0xb281, 0x43a2, 0x428c, 0xb2d8, 0x42bb, 0x2cfb, 0xb2de, 0x1fc8, 0x4301, 0x45f2, 0x1ee3, 0x04c6, 0xba61, 0x4002, 0x0798, 0xb29a, 0x433d, 0x1e61, 0x42fb, 0xbf56, 0x411f, 0xb0ed, 0xbf90, 0x456d, 0x1437, 0x413c, 0x4126, 0x42ca, 0xbad4, 0x1917, 0x4350, 0xbae2, 0x4135, 0x0247, 0x418b, 0x151d, 0x173d, 0x4054, 0xb284, 0xb22f, 0x4296, 0xb28f, 0x2e6c, 0xb2c0, 0x1f1c, 0xbfa9, 0x0906, 0xba7e, 0x1b04, 0xba58, 0xbaee, 0x4000, 0xb200, 0xb0d5, 0x414f, 0x14ff, 0xb0a0, 0x4220, 0x4249, 0xba6a, 0x4187, 0xbf53, 0x43bd, 0x1de3, 0x467d, 0x3a73, 0x18c3, 0x4263, 0x42cd, 0x42ec, 0x44b5, 0x089b, 0x1ce1, 0x18d2, 0x41d3, 0x3636, 0x1de6, 0xba4c, 0xb08d, 0x1b88, 0x1d9e, 0x3a85, 0xbfd3, 0xb051, 0xb2cd, 0x1c2b, 0xb07a, 0xb261, 0x07f4, 0x3ffa, 0xb0a1, 0x42a9, 0x40f3, 0xba2c, 0x40d5, 0xb026, 0x08bd, 0x415d, 0x1e67, 0x4377, 0x43c9, 0x1d0c, 0xb278, 0x437e, 0x4159, 0x456c, 0xbf90, 0x4191, 0x428e, 0xbfa9, 0x2e5f, 0x43af, 0x41d7, 0xb259, 0x42e0, 0x4221, 0xb2d4, 0xb07e, 0x4186, 0xbf80, 0x40a3, 0x45bd, 0x416a, 0x4324, 0x4068, 0x3029, 0x43dc, 0x41d1, 0xa79d, 0xbf1d, 0x2443, 0xba2b, 0x4111, 0x1a70, 0xa102, 0x43a3, 0xb0c8, 0xba62, 0x41b6, 0x41b6, 0x09a5, 0x41a6, 0x427a, 0x3e4d, 0x419e, 0x062f, 0xb24e, 0x1110, 0x41c9, 0x41ad, 0x2a40, 0xbf6b, 0x4279, 0x4347, 0xb242, 0xb2b0, 0x097c, 0x460e, 0x1e67, 0x4144, 0xa11e, 0x1ee4, 0x351d, 0xb247, 0x43f5, 0x1a26, 0x4357, 0x41fa, 0x40cb, 0x41ac, 0xba63, 0x1d28, 0xba76, 0x28e1, 0x38e7, 0x4098, 0x42b3, 0xbfbd, 0xb2bc, 0xbadc, 0xbad0, 0xba1a, 0x40fd, 0x42ca, 0x40ad, 0x42d4, 0xb251, 0xb2f2, 0xb2fd, 0x4138, 0x1b82, 0xba23, 0x1efb, 0x11d5, 0x413c, 0xb273, 0x1ce6, 0xa2a1, 0xbf79, 0x4197, 0x43e3, 0xbae9, 0x4015, 0x43e9, 0xa21c, 0xb0d0, 0x4059, 0x408f, 0x4067, 0x4387, 0xb2f2, 0x461b, 0x4019, 0x40a4, 0x4619, 0x41f1, 0xb04c, 0x46ac, 0x43d7, 0xa438, 0x4108, 0x0e03, 0xba59, 0x41e4, 0x43db, 0xb2e0, 0xb2b8, 0x1f88, 0xbf55, 0x432d, 0xb223, 0x09e7, 0xaea6, 0x4770, 0xe7fe + ], + StartRegs = [0x76fb2e83, 0x2c9a97ce, 0x4afe2dc9, 0x2a8a6d29, 0xf34a1d2a, 0xe92c22a4, 0xcd859d8b, 0xab9291ff, 0xdca83fbb, 0x24a63f86, 0xf4d326a0, 0xc55ab8ca, 0x50c313fb, 0x47bdd172, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0xfffffffa, 0x00000000, 0x00000003, 0x0000018a, 0x4000018a, 0xff91f802, 0x47bdd252, 0xfffffffc, 0x000017c0, 0x24a35e06, 0x20022b04, 0x47bdd732, 0xff91f802, 0x47bdcfba, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0xb247, 0xbac6, 0xb2bc, 0xba00, 0x4236, 0x4542, 0xbf84, 0x4353, 0x454b, 0x2d7d, 0xb214, 0xbf73, 0x2346, 0x1da1, 0xa600, 0x41de, 0xb0cf, 0x45c5, 0xb057, 0xbf11, 0x43f5, 0x4171, 0x026e, 0x2a0c, 0xafe4, 0x4215, 0xba19, 0x3837, 0x4677, 0x428a, 0xb281, 0xb2e1, 0x43af, 0x427f, 0xbf45, 0x41ef, 0xb289, 0x2c54, 0x4128, 0x4076, 0xb2d4, 0x41c2, 0x191b, 0x438c, 0xa81f, 0xb075, 0xb2e1, 0xbfb9, 0x4396, 0x2ac3, 0x4052, 0x4453, 0xb2c7, 0x40b6, 0x4273, 0x40b6, 0x424e, 0x449d, 0x0849, 0x42c1, 0xa3b4, 0x2413, 0x1e42, 0x40c1, 0x41f8, 0x1e05, 0xbf6e, 0xbae1, 0x1e62, 0x445c, 0x3418, 0x4363, 0x4094, 0x445c, 0x4283, 0x4611, 0xa556, 0x42fb, 0x1f16, 0x43f5, 0x1a7a, 0x020f, 0xba79, 0xbf24, 0x44cb, 0x0902, 0x4376, 0x19ed, 0x4181, 0x41b4, 0xb222, 0x4391, 0xbfcd, 0x05b5, 0x1fa3, 0x422c, 0xb210, 0x18d5, 0xbf70, 0x40c1, 0x42b9, 0x107f, 0xb281, 0xa90c, 0xbfba, 0x4301, 0x4282, 0xb254, 0x2d6a, 0x42d5, 0x42c1, 0x3ff4, 0xb09d, 0x0856, 0x41a4, 0x4357, 0x42d8, 0xbfd9, 0x3dcf, 0xba42, 0x206a, 0x4168, 0x1f5e, 0x460a, 0x0f10, 0xa577, 0x456c, 0x3967, 0x4643, 0xbf4e, 0x4183, 0x36fb, 0x41ea, 0xb0dc, 0x32d3, 0x43ee, 0x31b0, 0x4030, 0x407c, 0xb22d, 0x4455, 0x3342, 0xb0d7, 0xbf83, 0x1c18, 0x35e6, 0xb063, 0x4315, 0x45ec, 0x1f25, 0x18e9, 0xb264, 0xa7c2, 0x3e41, 0x43b8, 0x3363, 0x0c12, 0x0d27, 0x3e41, 0xbfb0, 0xba45, 0xa29a, 0xabaa, 0x3d44, 0xb2f5, 0xa599, 0x3ed6, 0x423f, 0x45da, 0x28ca, 0x40aa, 0x4288, 0x2acc, 0xbfc6, 0x21e5, 0x41a9, 0x4140, 0x4236, 0x0189, 0xb21a, 0x197d, 0xbf93, 0x13b7, 0x44a5, 0x3404, 0x443b, 0x421b, 0xba46, 0xba41, 0xb2d1, 0x022f, 0xb276, 0xba18, 0xb26a, 0xb20e, 0xb294, 0x42c5, 0x42f5, 0x1b96, 0x11dc, 0x1c7e, 0xbfb5, 0x46db, 0xab1b, 0x416e, 0xb0a2, 0xb2ab, 0x43dc, 0x3076, 0xba40, 0x2e15, 0xba09, 0xb2df, 0x4100, 0x4139, 0x004d, 0x40fe, 0xbf38, 0xa914, 0x42b4, 0x43cb, 0x43e8, 0x407c, 0x21cf, 0x2d7f, 0xb2e4, 0xb26f, 0xb2e2, 0x18d5, 0xb03e, 0x45a8, 0x433a, 0xb235, 0x44b4, 0xb000, 0x43ea, 0x313a, 0x4641, 0xb268, 0x3771, 0x40e5, 0xbff0, 0xbf9c, 0x4051, 0xba56, 0x07db, 0xb2b3, 0xb0e7, 0x40ed, 0xb264, 0x4193, 0xb08b, 0x422e, 0x4079, 0x26bc, 0x42e8, 0xba16, 0xa565, 0xba1c, 0xb06c, 0x409b, 0x43f5, 0x41fb, 0x42fa, 0xb2ea, 0x4184, 0x23d2, 0x431b, 0x4125, 0x1ef6, 0xbfa3, 0xaecf, 0x44b8, 0xb2a2, 0x1b75, 0x4145, 0x46f4, 0x42d4, 0x11f0, 0xb255, 0x411d, 0x121a, 0x42d1, 0x1a78, 0xbfae, 0x1d7b, 0xb0e1, 0x40e4, 0x422b, 0x428a, 0xba68, 0x18d6, 0x2f33, 0x4093, 0x433d, 0xbf32, 0x45c9, 0x4227, 0x423b, 0x41a1, 0x0f2d, 0x2021, 0x4679, 0x1f9b, 0x418c, 0x436b, 0xbf87, 0x41e4, 0x41bd, 0x407b, 0xa9d5, 0x1e4b, 0x00d3, 0x4389, 0x42b6, 0x46bd, 0x401e, 0x4067, 0x41d4, 0x4341, 0x4146, 0x2898, 0x463d, 0x1ece, 0x324f, 0xbaed, 0x4186, 0xbf31, 0x1dc1, 0xb275, 0x3cd7, 0xbf00, 0x4162, 0x4202, 0x431b, 0xba19, 0xb281, 0x40f0, 0xb2d9, 0x1ebc, 0xb2ae, 0x40ec, 0x42c1, 0xb2b9, 0x4241, 0x1eec, 0x081f, 0x4225, 0x3497, 0x4371, 0xac55, 0xad9c, 0xbf7e, 0xa740, 0x1a53, 0xb2ee, 0x0406, 0x403a, 0x40de, 0x1ea4, 0x4252, 0xa544, 0x41b5, 0xba14, 0x4225, 0x42c2, 0x430d, 0xbf43, 0x40db, 0xa456, 0x1b59, 0x4347, 0xb2b6, 0xbff0, 0xbae4, 0x4363, 0xb200, 0x40dd, 0xba74, 0x420a, 0xbf2e, 0xa9e7, 0x3c0c, 0x4285, 0x13d7, 0xb28b, 0xb05e, 0x1826, 0x42bd, 0x2d51, 0x4242, 0x4227, 0xbfd3, 0x43fb, 0x41ce, 0x4171, 0x416e, 0x4313, 0xa531, 0x4302, 0x010c, 0x201b, 0x2549, 0x45b4, 0x1366, 0x41a2, 0xba6f, 0xb2f8, 0x4049, 0x1e75, 0x4471, 0x45be, 0x1814, 0x4430, 0x415e, 0xbf4f, 0x187a, 0x418d, 0x2a18, 0xb278, 0x4002, 0x2b61, 0xbf6f, 0x06cc, 0x4265, 0x41fb, 0x408d, 0xbf56, 0x3963, 0x1e83, 0x45c0, 0xa06b, 0xa6e9, 0xb252, 0x1e7d, 0xb000, 0x4024, 0xb0ab, 0x4394, 0x418b, 0x1873, 0xaeb9, 0xbfaf, 0x4331, 0x1e39, 0x4405, 0x1ccb, 0x274d, 0x4344, 0xb0be, 0x41ca, 0x4268, 0x431f, 0x44c9, 0x41bf, 0x40d0, 0x42f3, 0xb09a, 0x1c08, 0x2223, 0xbf24, 0x0599, 0x46a3, 0x4207, 0x4114, 0xbf48, 0x1e64, 0xb0fe, 0x2c19, 0x4074, 0xab7a, 0x41d7, 0x4262, 0x46b0, 0x15eb, 0x42ae, 0xb23b, 0x35c8, 0x4567, 0x4177, 0x42a7, 0x4219, 0xb018, 0xb231, 0x42f7, 0xa4cc, 0x4414, 0x2023, 0x1c10, 0xbf3d, 0x1242, 0x4258, 0xb046, 0x4159, 0xba45, 0x4585, 0x4276, 0x4123, 0xb243, 0x443d, 0x409b, 0xa4f1, 0x426d, 0x42e9, 0x3228, 0x4645, 0x4543, 0x2747, 0x42ed, 0x4316, 0xbf7e, 0x4120, 0x41ec, 0x41eb, 0x4174, 0x424f, 0xbfb1, 0x03c4, 0x2fe1, 0xb25d, 0x4068, 0x1b8f, 0xb270, 0xb058, 0x1c88, 0xbf6f, 0x1fce, 0x1bb9, 0xb23a, 0x4300, 0x4480, 0xaf8f, 0xb21d, 0xba5e, 0xba13, 0x1e5e, 0xbad9, 0x41a4, 0xb2c8, 0x40dd, 0xb27c, 0x382e, 0x089a, 0x429a, 0x4076, 0xae8a, 0xbf72, 0x1e10, 0x433d, 0xa7c9, 0xb0b4, 0xb034, 0xb0d4, 0x41b6, 0x1858, 0xbf7e, 0x1ec5, 0x40e7, 0x02cc, 0x41ce, 0x06fb, 0x42e7, 0xa6f3, 0x1a85, 0x40e9, 0x427f, 0x0051, 0xb0ca, 0xb28e, 0x1888, 0x4682, 0x4344, 0x1f2e, 0x429e, 0x426a, 0x324f, 0x0eae, 0xbf9d, 0xb00a, 0x4081, 0xab91, 0x465e, 0xbf2b, 0xaf28, 0x4091, 0x428f, 0x45c4, 0x191d, 0x191b, 0x42bb, 0x0d5a, 0x428a, 0x463e, 0xbf44, 0x400a, 0x40b3, 0x0aa6, 0x4085, 0xba42, 0xbf1f, 0x425e, 0xbfa0, 0xb008, 0x4315, 0xb232, 0xba77, 0x1412, 0x41dc, 0x43c2, 0x0566, 0xbf6e, 0x34aa, 0xb272, 0x1b03, 0x4171, 0x1b82, 0x0772, 0x2458, 0xab4d, 0x1c39, 0x43f9, 0x429b, 0x40ad, 0x42a2, 0xba19, 0xad15, 0xb078, 0x42f2, 0x1e62, 0x43a8, 0x3a59, 0x425a, 0xb00c, 0x0ce3, 0x29fc, 0xb291, 0x3847, 0x1bc4, 0xbf86, 0x431b, 0x1b36, 0xb26f, 0x40ee, 0x43aa, 0x124f, 0xbac5, 0x0f90, 0x402d, 0xb2d0, 0xb2b6, 0x46b1, 0x4327, 0xa182, 0xbf9a, 0x406e, 0x43a9, 0x430a, 0x05fc, 0x41d8, 0x4072, 0xbf12, 0x4287, 0x43d0, 0x2863, 0x4392, 0x1bf0, 0xa512, 0xbf92, 0x442c, 0x187c, 0x4429, 0xbad3, 0x43a2, 0x42cb, 0xa016, 0x422c, 0xbfb1, 0xb245, 0x1b85, 0x42a3, 0xba1d, 0xb023, 0x4185, 0x40ce, 0x43e7, 0x1c32, 0x4222, 0xa312, 0x34a2, 0xbfc0, 0x42a0, 0xb26c, 0x1e0d, 0x19fd, 0x434a, 0xba0c, 0x41be, 0x40a1, 0x1009, 0x410c, 0xbf9c, 0x441c, 0x41ca, 0xbf0b, 0x088d, 0xbf60, 0x2873, 0x1968, 0x41b9, 0x411f, 0x06ff, 0x463f, 0x40f2, 0x4220, 0x4278, 0x41bb, 0x06d0, 0x42d7, 0x42e2, 0x43c5, 0x1ece, 0x3ef3, 0x4218, 0xb2ae, 0x41bc, 0xa77e, 0x1068, 0xbf28, 0xbf00, 0xb296, 0x11b9, 0x4309, 0xbafd, 0xb286, 0x40e8, 0xbfd1, 0x437a, 0x35d5, 0x42d1, 0x424e, 0x4548, 0x40a7, 0x4056, 0x40ff, 0x44c9, 0xb26a, 0xba07, 0x43ca, 0x4310, 0xb2b3, 0x40ce, 0x1810, 0x462f, 0xb28f, 0xb276, 0x4266, 0x4669, 0x1e7a, 0xb21a, 0x21ce, 0x4611, 0xbf53, 0xbac4, 0x4477, 0xb2ff, 0x1eda, 0xb2de, 0x0819, 0xb28b, 0x4029, 0xbaeb, 0x050d, 0x43bb, 0x4327, 0xb23b, 0x27fd, 0xbf98, 0x1d5c, 0x4275, 0xaa35, 0x186d, 0x2879, 0xbaf5, 0x4011, 0x401c, 0x43a0, 0x3fd9, 0xba7a, 0x1b93, 0xb288, 0xaad0, 0xbf22, 0x3c38, 0xb26b, 0x2763, 0x3f20, 0x4003, 0x1a28, 0xb26d, 0xabec, 0x0d07, 0x0bf5, 0x4117, 0xbac5, 0x434a, 0xb0ee, 0xb028, 0x433d, 0x4695, 0xba77, 0x3ea1, 0x4177, 0x446f, 0xbad3, 0xa161, 0x11de, 0x1a2b, 0xb23f, 0xb2cd, 0x3450, 0xbf61, 0x3f26, 0xb291, 0x34e5, 0x46c1, 0x1fce, 0x4215, 0x423b, 0xab8c, 0x1627, 0x1011, 0x40e9, 0xb0d3, 0x1f42, 0x4164, 0xbfb3, 0x1886, 0x4018, 0x2218, 0xbadc, 0x4245, 0x42ab, 0x1f0c, 0xb2ec, 0xaa74, 0xad5c, 0x413a, 0xbf79, 0xb07a, 0x4213, 0x43ed, 0x41ac, 0x423d, 0x06e5, 0x0ad8, 0x1aaf, 0x4388, 0xb280, 0xbae9, 0x403a, 0xa331, 0xb2d9, 0xbfdf, 0x421e, 0xb0ad, 0x424e, 0x4065, 0x422c, 0x1001, 0x1a77, 0x4017, 0xbf65, 0x14cb, 0x4573, 0xb26b, 0x4371, 0x4026, 0x46fc, 0x42e2, 0xa06e, 0xae37, 0x0f59, 0xb045, 0x42d9, 0x4136, 0xba1b, 0xb2cf, 0xb2da, 0x3ce5, 0x3b2e, 0x44f9, 0x46b9, 0x3256, 0x4265, 0xbff0, 0x410d, 0xbff0, 0x2599, 0x4287, 0xbf74, 0x42ae, 0x4009, 0x2b2f, 0x4167, 0x4321, 0x459b, 0x42da, 0x416f, 0x406c, 0x42c4, 0xb2c2, 0x4630, 0x40db, 0x39ab, 0x0d75, 0xbf55, 0xb2df, 0x3c88, 0xb084, 0xb220, 0x2296, 0xbae0, 0x3e6b, 0xb002, 0x1d1f, 0x2309, 0xb26d, 0xba77, 0x2e13, 0x4084, 0xb29b, 0x10cb, 0x4397, 0xbf3b, 0xb0da, 0x42ee, 0xb2e6, 0x42c4, 0x4603, 0x1c1b, 0xbfd0, 0xbfc0, 0x4297, 0x1f20, 0x3f0e, 0x4246, 0x27a5, 0x42ca, 0xb2d0, 0x02d7, 0xaf51, 0x1d35, 0x41c5, 0x43cc, 0xb251, 0xb24f, 0x428f, 0x4101, 0x3bfb, 0x1f9d, 0xbf46, 0x4314, 0x469c, 0x1932, 0x40bf, 0xafff, 0x1cb1, 0x4141, 0xa9be, 0x43ed, 0x41a7, 0x4035, 0xba21, 0x1f1b, 0x1f56, 0x4054, 0x1554, 0x456b, 0x4249, 0xbf41, 0x4327, 0xba1f, 0x41ab, 0x407a, 0xb050, 0xbaf9, 0xb272, 0xabcc, 0x40c8, 0x4078, 0x1bcf, 0x42ae, 0xba1c, 0x42fc, 0x40b0, 0xb2ef, 0xb0c6, 0x401d, 0x46fd, 0x29e9, 0xb2a4, 0x1805, 0x42b5, 0xb01d, 0xbf47, 0x40e8, 0xb0d8, 0x056d, 0x4271, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x1a5fd34d, 0x3103aa3c, 0x3e4f9ef4, 0xf82df4a2, 0x3ba27697, 0x32d28d47, 0x5158d643, 0x5cf29a73, 0x8ce84a47, 0x4e93790b, 0xc7f42d1c, 0x6b5dd957, 0x35ca5f7d, 0xde453ad4, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x00000000, 0xffff9c02, 0xffffff91, 0x000004b0, 0x00000000, 0x00000000, 0x00000091, 0x00000000, 0x00000844, 0x00000000, 0x19860000, 0x6b5dd957, 0xffff8204, 0x000016e4, 0x00000000, 0x800001d0 }, + Instructions = [0xb247, 0xbac6, 0xb2bc, 0xba00, 0x4236, 0x4542, 0xbf84, 0x4353, 0x454b, 0x2d7d, 0xb214, 0xbf73, 0x2346, 0x1da1, 0xa600, 0x41de, 0xb0cf, 0x45c5, 0xb057, 0xbf11, 0x43f5, 0x4171, 0x026e, 0x2a0c, 0xafe4, 0x4215, 0xba19, 0x3837, 0x4677, 0x428a, 0xb281, 0xb2e1, 0x43af, 0x427f, 0xbf45, 0x41ef, 0xb289, 0x2c54, 0x4128, 0x4076, 0xb2d4, 0x41c2, 0x191b, 0x438c, 0xa81f, 0xb075, 0xb2e1, 0xbfb9, 0x4396, 0x2ac3, 0x4052, 0x4453, 0xb2c7, 0x40b6, 0x4273, 0x40b6, 0x424e, 0x449d, 0x0849, 0x42c1, 0xa3b4, 0x2413, 0x1e42, 0x40c1, 0x41f8, 0x1e05, 0xbf6e, 0xbae1, 0x1e62, 0x445c, 0x3418, 0x4363, 0x4094, 0x445c, 0x4283, 0x4611, 0xa556, 0x42fb, 0x1f16, 0x43f5, 0x1a7a, 0x020f, 0xba79, 0xbf24, 0x44cb, 0x0902, 0x4376, 0x19ed, 0x4181, 0x41b4, 0xb222, 0x4391, 0xbfcd, 0x05b5, 0x1fa3, 0x422c, 0xb210, 0x18d5, 0xbf70, 0x40c1, 0x42b9, 0x107f, 0xb281, 0xa90c, 0xbfba, 0x4301, 0x4282, 0xb254, 0x2d6a, 0x42d5, 0x42c1, 0x3ff4, 0xb09d, 0x0856, 0x41a4, 0x4357, 0x42d8, 0xbfd9, 0x3dcf, 0xba42, 0x206a, 0x4168, 0x1f5e, 0x460a, 0x0f10, 0xa577, 0x456c, 0x3967, 0x4643, 0xbf4e, 0x4183, 0x36fb, 0x41ea, 0xb0dc, 0x32d3, 0x43ee, 0x31b0, 0x4030, 0x407c, 0xb22d, 0x4455, 0x3342, 0xb0d7, 0xbf83, 0x1c18, 0x35e6, 0xb063, 0x4315, 0x45ec, 0x1f25, 0x18e9, 0xb264, 0xa7c2, 0x3e41, 0x43b8, 0x3363, 0x0c12, 0x0d27, 0x3e41, 0xbfb0, 0xba45, 0xa29a, 0xabaa, 0x3d44, 0xb2f5, 0xa599, 0x3ed6, 0x423f, 0x45da, 0x28ca, 0x40aa, 0x4288, 0x2acc, 0xbfc6, 0x21e5, 0x41a9, 0x4140, 0x4236, 0x0189, 0xb21a, 0x197d, 0xbf93, 0x13b7, 0x44a5, 0x3404, 0x443b, 0x421b, 0xba46, 0xba41, 0xb2d1, 0x022f, 0xb276, 0xba18, 0xb26a, 0xb20e, 0xb294, 0x42c5, 0x42f5, 0x1b96, 0x11dc, 0x1c7e, 0xbfb5, 0x46db, 0xab1b, 0x416e, 0xb0a2, 0xb2ab, 0x43dc, 0x3076, 0xba40, 0x2e15, 0xba09, 0xb2df, 0x4100, 0x4139, 0x004d, 0x40fe, 0xbf38, 0xa914, 0x42b4, 0x43cb, 0x43e8, 0x407c, 0x21cf, 0x2d7f, 0xb2e4, 0xb26f, 0xb2e2, 0x18d5, 0xb03e, 0x45a8, 0x433a, 0xb235, 0x44b4, 0xb000, 0x43ea, 0x313a, 0x4641, 0xb268, 0x3771, 0x40e5, 0xbff0, 0xbf9c, 0x4051, 0xba56, 0x07db, 0xb2b3, 0xb0e7, 0x40ed, 0xb264, 0x4193, 0xb08b, 0x422e, 0x4079, 0x26bc, 0x42e8, 0xba16, 0xa565, 0xba1c, 0xb06c, 0x409b, 0x43f5, 0x41fb, 0x42fa, 0xb2ea, 0x4184, 0x23d2, 0x431b, 0x4125, 0x1ef6, 0xbfa3, 0xaecf, 0x44b8, 0xb2a2, 0x1b75, 0x4145, 0x46f4, 0x42d4, 0x11f0, 0xb255, 0x411d, 0x121a, 0x42d1, 0x1a78, 0xbfae, 0x1d7b, 0xb0e1, 0x40e4, 0x422b, 0x428a, 0xba68, 0x18d6, 0x2f33, 0x4093, 0x433d, 0xbf32, 0x45c9, 0x4227, 0x423b, 0x41a1, 0x0f2d, 0x2021, 0x4679, 0x1f9b, 0x418c, 0x436b, 0xbf87, 0x41e4, 0x41bd, 0x407b, 0xa9d5, 0x1e4b, 0x00d3, 0x4389, 0x42b6, 0x46bd, 0x401e, 0x4067, 0x41d4, 0x4341, 0x4146, 0x2898, 0x463d, 0x1ece, 0x324f, 0xbaed, 0x4186, 0xbf31, 0x1dc1, 0xb275, 0x3cd7, 0xbf00, 0x4162, 0x4202, 0x431b, 0xba19, 0xb281, 0x40f0, 0xb2d9, 0x1ebc, 0xb2ae, 0x40ec, 0x42c1, 0xb2b9, 0x4241, 0x1eec, 0x081f, 0x4225, 0x3497, 0x4371, 0xac55, 0xad9c, 0xbf7e, 0xa740, 0x1a53, 0xb2ee, 0x0406, 0x403a, 0x40de, 0x1ea4, 0x4252, 0xa544, 0x41b5, 0xba14, 0x4225, 0x42c2, 0x430d, 0xbf43, 0x40db, 0xa456, 0x1b59, 0x4347, 0xb2b6, 0xbff0, 0xbae4, 0x4363, 0xb200, 0x40dd, 0xba74, 0x420a, 0xbf2e, 0xa9e7, 0x3c0c, 0x4285, 0x13d7, 0xb28b, 0xb05e, 0x1826, 0x42bd, 0x2d51, 0x4242, 0x4227, 0xbfd3, 0x43fb, 0x41ce, 0x4171, 0x416e, 0x4313, 0xa531, 0x4302, 0x010c, 0x201b, 0x2549, 0x45b4, 0x1366, 0x41a2, 0xba6f, 0xb2f8, 0x4049, 0x1e75, 0x4471, 0x45be, 0x1814, 0x4430, 0x415e, 0xbf4f, 0x187a, 0x418d, 0x2a18, 0xb278, 0x4002, 0x2b61, 0xbf6f, 0x06cc, 0x4265, 0x41fb, 0x408d, 0xbf56, 0x3963, 0x1e83, 0x45c0, 0xa06b, 0xa6e9, 0xb252, 0x1e7d, 0xb000, 0x4024, 0xb0ab, 0x4394, 0x418b, 0x1873, 0xaeb9, 0xbfaf, 0x4331, 0x1e39, 0x4405, 0x1ccb, 0x274d, 0x4344, 0xb0be, 0x41ca, 0x4268, 0x431f, 0x44c9, 0x41bf, 0x40d0, 0x42f3, 0xb09a, 0x1c08, 0x2223, 0xbf24, 0x0599, 0x46a3, 0x4207, 0x4114, 0xbf48, 0x1e64, 0xb0fe, 0x2c19, 0x4074, 0xab7a, 0x41d7, 0x4262, 0x46b0, 0x15eb, 0x42ae, 0xb23b, 0x35c8, 0x4567, 0x4177, 0x42a7, 0x4219, 0xb018, 0xb231, 0x42f7, 0xa4cc, 0x4414, 0x2023, 0x1c10, 0xbf3d, 0x1242, 0x4258, 0xb046, 0x4159, 0xba45, 0x4585, 0x4276, 0x4123, 0xb243, 0x443d, 0x409b, 0xa4f1, 0x426d, 0x42e9, 0x3228, 0x4645, 0x4543, 0x2747, 0x42ed, 0x4316, 0xbf7e, 0x4120, 0x41ec, 0x41eb, 0x4174, 0x424f, 0xbfb1, 0x03c4, 0x2fe1, 0xb25d, 0x4068, 0x1b8f, 0xb270, 0xb058, 0x1c88, 0xbf6f, 0x1fce, 0x1bb9, 0xb23a, 0x4300, 0x4480, 0xaf8f, 0xb21d, 0xba5e, 0xba13, 0x1e5e, 0xbad9, 0x41a4, 0xb2c8, 0x40dd, 0xb27c, 0x382e, 0x089a, 0x429a, 0x4076, 0xae8a, 0xbf72, 0x1e10, 0x433d, 0xa7c9, 0xb0b4, 0xb034, 0xb0d4, 0x41b6, 0x1858, 0xbf7e, 0x1ec5, 0x40e7, 0x02cc, 0x41ce, 0x06fb, 0x42e7, 0xa6f3, 0x1a85, 0x40e9, 0x427f, 0x0051, 0xb0ca, 0xb28e, 0x1888, 0x4682, 0x4344, 0x1f2e, 0x429e, 0x426a, 0x324f, 0x0eae, 0xbf9d, 0xb00a, 0x4081, 0xab91, 0x465e, 0xbf2b, 0xaf28, 0x4091, 0x428f, 0x45c4, 0x191d, 0x191b, 0x42bb, 0x0d5a, 0x428a, 0x463e, 0xbf44, 0x400a, 0x40b3, 0x0aa6, 0x4085, 0xba42, 0xbf1f, 0x425e, 0xbfa0, 0xb008, 0x4315, 0xb232, 0xba77, 0x1412, 0x41dc, 0x43c2, 0x0566, 0xbf6e, 0x34aa, 0xb272, 0x1b03, 0x4171, 0x1b82, 0x0772, 0x2458, 0xab4d, 0x1c39, 0x43f9, 0x429b, 0x40ad, 0x42a2, 0xba19, 0xad15, 0xb078, 0x42f2, 0x1e62, 0x43a8, 0x3a59, 0x425a, 0xb00c, 0x0ce3, 0x29fc, 0xb291, 0x3847, 0x1bc4, 0xbf86, 0x431b, 0x1b36, 0xb26f, 0x40ee, 0x43aa, 0x124f, 0xbac5, 0x0f90, 0x402d, 0xb2d0, 0xb2b6, 0x46b1, 0x4327, 0xa182, 0xbf9a, 0x406e, 0x43a9, 0x430a, 0x05fc, 0x41d8, 0x4072, 0xbf12, 0x4287, 0x43d0, 0x2863, 0x4392, 0x1bf0, 0xa512, 0xbf92, 0x442c, 0x187c, 0x4429, 0xbad3, 0x43a2, 0x42cb, 0xa016, 0x422c, 0xbfb1, 0xb245, 0x1b85, 0x42a3, 0xba1d, 0xb023, 0x4185, 0x40ce, 0x43e7, 0x1c32, 0x4222, 0xa312, 0x34a2, 0xbfc0, 0x42a0, 0xb26c, 0x1e0d, 0x19fd, 0x434a, 0xba0c, 0x41be, 0x40a1, 0x1009, 0x410c, 0xbf9c, 0x441c, 0x41ca, 0xbf0b, 0x088d, 0xbf60, 0x2873, 0x1968, 0x41b9, 0x411f, 0x06ff, 0x463f, 0x40f2, 0x4220, 0x4278, 0x41bb, 0x06d0, 0x42d7, 0x42e2, 0x43c5, 0x1ece, 0x3ef3, 0x4218, 0xb2ae, 0x41bc, 0xa77e, 0x1068, 0xbf28, 0xbf00, 0xb296, 0x11b9, 0x4309, 0xbafd, 0xb286, 0x40e8, 0xbfd1, 0x437a, 0x35d5, 0x42d1, 0x424e, 0x4548, 0x40a7, 0x4056, 0x40ff, 0x44c9, 0xb26a, 0xba07, 0x43ca, 0x4310, 0xb2b3, 0x40ce, 0x1810, 0x462f, 0xb28f, 0xb276, 0x4266, 0x4669, 0x1e7a, 0xb21a, 0x21ce, 0x4611, 0xbf53, 0xbac4, 0x4477, 0xb2ff, 0x1eda, 0xb2de, 0x0819, 0xb28b, 0x4029, 0xbaeb, 0x050d, 0x43bb, 0x4327, 0xb23b, 0x27fd, 0xbf98, 0x1d5c, 0x4275, 0xaa35, 0x186d, 0x2879, 0xbaf5, 0x4011, 0x401c, 0x43a0, 0x3fd9, 0xba7a, 0x1b93, 0xb288, 0xaad0, 0xbf22, 0x3c38, 0xb26b, 0x2763, 0x3f20, 0x4003, 0x1a28, 0xb26d, 0xabec, 0x0d07, 0x0bf5, 0x4117, 0xbac5, 0x434a, 0xb0ee, 0xb028, 0x433d, 0x4695, 0xba77, 0x3ea1, 0x4177, 0x446f, 0xbad3, 0xa161, 0x11de, 0x1a2b, 0xb23f, 0xb2cd, 0x3450, 0xbf61, 0x3f26, 0xb291, 0x34e5, 0x46c1, 0x1fce, 0x4215, 0x423b, 0xab8c, 0x1627, 0x1011, 0x40e9, 0xb0d3, 0x1f42, 0x4164, 0xbfb3, 0x1886, 0x4018, 0x2218, 0xbadc, 0x4245, 0x42ab, 0x1f0c, 0xb2ec, 0xaa74, 0xad5c, 0x413a, 0xbf79, 0xb07a, 0x4213, 0x43ed, 0x41ac, 0x423d, 0x06e5, 0x0ad8, 0x1aaf, 0x4388, 0xb280, 0xbae9, 0x403a, 0xa331, 0xb2d9, 0xbfdf, 0x421e, 0xb0ad, 0x424e, 0x4065, 0x422c, 0x1001, 0x1a77, 0x4017, 0xbf65, 0x14cb, 0x4573, 0xb26b, 0x4371, 0x4026, 0x46fc, 0x42e2, 0xa06e, 0xae37, 0x0f59, 0xb045, 0x42d9, 0x4136, 0xba1b, 0xb2cf, 0xb2da, 0x3ce5, 0x3b2e, 0x44f9, 0x46b9, 0x3256, 0x4265, 0xbff0, 0x410d, 0xbff0, 0x2599, 0x4287, 0xbf74, 0x42ae, 0x4009, 0x2b2f, 0x4167, 0x4321, 0x459b, 0x42da, 0x416f, 0x406c, 0x42c4, 0xb2c2, 0x4630, 0x40db, 0x39ab, 0x0d75, 0xbf55, 0xb2df, 0x3c88, 0xb084, 0xb220, 0x2296, 0xbae0, 0x3e6b, 0xb002, 0x1d1f, 0x2309, 0xb26d, 0xba77, 0x2e13, 0x4084, 0xb29b, 0x10cb, 0x4397, 0xbf3b, 0xb0da, 0x42ee, 0xb2e6, 0x42c4, 0x4603, 0x1c1b, 0xbfd0, 0xbfc0, 0x4297, 0x1f20, 0x3f0e, 0x4246, 0x27a5, 0x42ca, 0xb2d0, 0x02d7, 0xaf51, 0x1d35, 0x41c5, 0x43cc, 0xb251, 0xb24f, 0x428f, 0x4101, 0x3bfb, 0x1f9d, 0xbf46, 0x4314, 0x469c, 0x1932, 0x40bf, 0xafff, 0x1cb1, 0x4141, 0xa9be, 0x43ed, 0x41a7, 0x4035, 0xba21, 0x1f1b, 0x1f56, 0x4054, 0x1554, 0x456b, 0x4249, 0xbf41, 0x4327, 0xba1f, 0x41ab, 0x407a, 0xb050, 0xbaf9, 0xb272, 0xabcc, 0x40c8, 0x4078, 0x1bcf, 0x42ae, 0xba1c, 0x42fc, 0x40b0, 0xb2ef, 0xb0c6, 0x401d, 0x46fd, 0x29e9, 0xb2a4, 0x1805, 0x42b5, 0xb01d, 0xbf47, 0x40e8, 0xb0d8, 0x056d, 0x4271, 0x4770, 0xe7fe + ], + StartRegs = [0x1a5fd34d, 0x3103aa3c, 0x3e4f9ef4, 0xf82df4a2, 0x3ba27697, 0x32d28d47, 0x5158d643, 0x5cf29a73, 0x8ce84a47, 0x4e93790b, 0xc7f42d1c, 0x6b5dd957, 0x35ca5f7d, 0xde453ad4, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x00000000, 0xffff9c02, 0xffffff91, 0x000004b0, 0x00000000, 0x00000000, 0x00000091, 0x00000000, 0x00000844, 0x00000000, 0x19860000, 0x6b5dd957, 0xffff8204, 0x000016e4, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0xa14c, 0x4132, 0x41bc, 0x4020, 0x0b92, 0x157b, 0x41d2, 0x4033, 0x0ac1, 0x1a9f, 0x4029, 0x27ea, 0xb2ec, 0xbff0, 0x1c03, 0xb249, 0xbfba, 0x2af5, 0x063a, 0xb2f7, 0x1fde, 0x4650, 0x419d, 0x4254, 0x423c, 0x45c5, 0x43f5, 0xbfb7, 0xb22c, 0x439d, 0x41ae, 0xa021, 0x405d, 0xb2f5, 0xa199, 0x4328, 0x43c1, 0xa29f, 0x3ace, 0x40cd, 0xb29a, 0x4192, 0x4165, 0xbaf5, 0x281e, 0x2f02, 0xa053, 0xb2a9, 0x414c, 0x2319, 0x40bb, 0xbfdb, 0xbf80, 0xa7d7, 0xbff0, 0x424b, 0xb031, 0x4063, 0xbf29, 0x443d, 0xba16, 0x2f1f, 0x2cae, 0x4108, 0xb0e1, 0x4362, 0x3931, 0xbac3, 0xbf8d, 0xb286, 0xb2bd, 0x43b0, 0xb01c, 0x42f2, 0xbfb5, 0xba58, 0x4066, 0x42a6, 0x40f4, 0x25d9, 0xba15, 0xba76, 0x4173, 0x32e9, 0x4184, 0x45f3, 0xb0e2, 0xb2e3, 0x32b6, 0xbf81, 0x4136, 0x448a, 0xba7b, 0xba55, 0xb23c, 0x4153, 0x4323, 0xb2cb, 0x18e5, 0x4161, 0xba7b, 0x363d, 0x408c, 0xbf39, 0x400f, 0x406c, 0x41c0, 0x420d, 0x32e5, 0xb24a, 0x2bb8, 0xaa8c, 0xb053, 0xb276, 0xbf4d, 0x4109, 0xae28, 0xba33, 0x429e, 0xb055, 0x2c5a, 0x43c2, 0xb283, 0x05b1, 0xbfd3, 0x19f9, 0x4081, 0xbace, 0x43c3, 0x455e, 0x42aa, 0xbfcf, 0x42d3, 0x4000, 0xb23a, 0x42ee, 0x41b4, 0xba39, 0x2cd1, 0x303c, 0x43a4, 0xbfbc, 0xb2db, 0x2de9, 0xbaf6, 0xafed, 0xba77, 0x42f4, 0x4163, 0x41b5, 0x41b5, 0x3a75, 0x4298, 0x4215, 0xba5c, 0x42bc, 0xb2c8, 0x41ec, 0x2f90, 0x42b1, 0xb065, 0xbfbc, 0xba6f, 0x456e, 0xb234, 0xbf42, 0x44b4, 0x46f9, 0x1b3f, 0x1d00, 0x4201, 0xb223, 0xa1f4, 0x27e7, 0x41c0, 0x1e5c, 0x46b1, 0x412b, 0xa523, 0xbf00, 0x4033, 0x151c, 0x3328, 0xba10, 0x420f, 0x45b4, 0x1217, 0xbf6f, 0xa77d, 0x2c63, 0x1985, 0x411a, 0xb262, 0xbf1f, 0xb260, 0x1a16, 0x43ac, 0x41d4, 0x440c, 0x41f6, 0x3409, 0xb2a6, 0xbfe1, 0x2013, 0x43e1, 0x43fd, 0x46d1, 0x4160, 0xbf73, 0x4132, 0x429b, 0x23b3, 0xbae9, 0x10bd, 0xba7f, 0xba1b, 0x1886, 0x109c, 0x41a6, 0xb201, 0x1be2, 0xbf95, 0x410e, 0x46a2, 0x430a, 0x02f1, 0xb2d5, 0xb206, 0xbae9, 0x1b5c, 0x40f3, 0x44da, 0xbf43, 0xabc8, 0x0f66, 0x1883, 0x458b, 0x426d, 0xa283, 0x4033, 0x416e, 0x4173, 0x4461, 0xb2f6, 0x1139, 0xb0b0, 0xbfe0, 0x437a, 0x41f9, 0xb226, 0x4359, 0x4160, 0x4618, 0xb27e, 0x41ab, 0xbfb4, 0xb0f4, 0x4603, 0x401e, 0x2dd7, 0x1b5c, 0xb2ec, 0x16ab, 0xb00d, 0x41b9, 0xa2eb, 0xb00d, 0x40bf, 0x2e03, 0x46b2, 0xbf13, 0x38c1, 0x1ed1, 0xbac9, 0x4036, 0xb0bf, 0x41bc, 0xba14, 0x02dc, 0x41c1, 0x4383, 0xba42, 0xb223, 0xba53, 0x4037, 0xba00, 0x43d0, 0x4362, 0x42ea, 0xb03f, 0x41a3, 0x4111, 0x001b, 0x0080, 0xbf7f, 0xb299, 0x40e7, 0x4158, 0x4196, 0x1a5d, 0x07f6, 0x41ee, 0x0c49, 0xb2c8, 0xb243, 0x409a, 0x392d, 0xb2bf, 0xa325, 0x4629, 0xbfd4, 0x4334, 0x4305, 0x2dd2, 0xbfe0, 0xb01d, 0x36a2, 0x4211, 0xbfe4, 0x4151, 0xbfb0, 0xb2da, 0xbf70, 0xb2ee, 0x43a8, 0xbf85, 0x448d, 0x43e6, 0x1b34, 0x18e6, 0x43f7, 0x1d9f, 0xb251, 0x40b6, 0x0822, 0x4048, 0xb086, 0x0161, 0xbaca, 0xb211, 0x0500, 0xb076, 0x400d, 0xbf9c, 0x40bd, 0x41bd, 0x22d5, 0x421d, 0x3876, 0x1a86, 0x408e, 0x357b, 0x4567, 0x41f6, 0xb29f, 0x43f4, 0x439b, 0x431b, 0x4115, 0x3962, 0xb0cc, 0x4198, 0x0afa, 0x445d, 0xbac5, 0xaa18, 0x41e1, 0x43e4, 0xbf59, 0x43b8, 0x431e, 0x1849, 0x4233, 0x4393, 0x42dd, 0x4275, 0x430f, 0x420b, 0xbf90, 0x4116, 0x43b5, 0xb226, 0xad7b, 0x45e8, 0x4202, 0x43c7, 0x2c0c, 0x4070, 0x4185, 0x43ce, 0xbad1, 0x1a16, 0x1c88, 0x413b, 0x4163, 0x2d64, 0xb03b, 0xbf63, 0x1d22, 0x40c5, 0x285b, 0x1f82, 0x41ba, 0x417d, 0xba1b, 0x4219, 0x40e2, 0x4297, 0x4307, 0x1873, 0x4050, 0xbfa0, 0x229d, 0x4055, 0x436a, 0x3545, 0x1a18, 0x42ef, 0xb280, 0x40a1, 0x1c13, 0xb05e, 0x408e, 0x42d4, 0x2688, 0x40d3, 0xbfc3, 0xa2eb, 0x421d, 0x440e, 0x090b, 0xb264, 0x4160, 0xb2b3, 0xbad4, 0xba36, 0x40f8, 0xb2f5, 0x3be0, 0xb096, 0x1da7, 0x1f4e, 0xba52, 0x4155, 0x4273, 0xbf8e, 0x42f4, 0x4247, 0x4148, 0x428e, 0x4481, 0x1cd6, 0x436c, 0xb22a, 0x4189, 0x27ea, 0x42c1, 0x435f, 0x41ca, 0x24f5, 0x40a8, 0x4304, 0x4575, 0x416a, 0x42d4, 0x41d8, 0x1cf2, 0x430a, 0x4249, 0xa6d5, 0x4208, 0x4361, 0xbf77, 0xb2bf, 0x4061, 0x42f5, 0x1df1, 0xb2fb, 0x2eb2, 0x1f36, 0x0636, 0x4233, 0xb051, 0x0d22, 0x437a, 0x187c, 0x431d, 0x2642, 0x4329, 0xba5e, 0x402e, 0x1a7d, 0xb27c, 0xbfc0, 0x4382, 0x430d, 0xaad4, 0x4033, 0x423d, 0x4266, 0xbfc1, 0x1a59, 0x4349, 0x416c, 0xb236, 0x4337, 0x2973, 0x43cb, 0x41d8, 0xb031, 0x431b, 0x1bce, 0x1553, 0x40ea, 0x0c9e, 0xba3b, 0x1192, 0x41a9, 0x4261, 0x4086, 0x1582, 0x4637, 0x4056, 0xbf8c, 0x4600, 0x429b, 0xbfac, 0x2ba6, 0x2e02, 0xbf2d, 0x463a, 0x41d0, 0x1d05, 0x43f9, 0x2c9c, 0x40af, 0xb00f, 0x2d8b, 0x4201, 0x4354, 0xba21, 0x1e4b, 0x41ae, 0xb2ba, 0xb28c, 0xa6c2, 0xbafd, 0x27e8, 0xa499, 0xbf8f, 0x4272, 0x076d, 0x4342, 0x4337, 0x1f5e, 0x41a3, 0x37d5, 0x417e, 0x4215, 0x4678, 0x143e, 0xbafc, 0xab29, 0x4095, 0xb28d, 0x0ed2, 0xbf80, 0xabb9, 0x433d, 0xba51, 0x0bba, 0xaa69, 0xa93d, 0x4117, 0xbfc7, 0x312f, 0xb099, 0x119d, 0x4393, 0x40e9, 0xbf94, 0x1cb6, 0x4294, 0x43f5, 0x42b8, 0xb26f, 0x2772, 0xb0a6, 0x413b, 0xadeb, 0x408e, 0xbfbc, 0x4542, 0xba61, 0xb066, 0x40f9, 0x45d5, 0xabc9, 0xba51, 0x19c0, 0x4202, 0x4245, 0x4162, 0xb256, 0x0fff, 0x1ca8, 0xbaf9, 0x3ce8, 0x45ee, 0x1bd9, 0xbfa0, 0xa474, 0xbfb3, 0x42c1, 0x39dc, 0xb08f, 0x303f, 0xba67, 0x1ec2, 0x43bd, 0xb2b5, 0x42df, 0x0cbd, 0x240e, 0x402b, 0x411d, 0xba53, 0xb20e, 0x41b8, 0xbf78, 0x413f, 0xbff0, 0x0612, 0xbf36, 0x4685, 0x3a69, 0x4318, 0x4137, 0xba21, 0x42ba, 0x4259, 0x4207, 0x41d7, 0xb2bc, 0x3b7e, 0x40d0, 0x423b, 0xab19, 0xb2ae, 0xb2b8, 0x43a4, 0xba50, 0xba2f, 0x21c8, 0x24c1, 0x4110, 0x422d, 0xbf4d, 0xa1c2, 0x1745, 0x18d8, 0x095c, 0xb260, 0x4070, 0xb23f, 0xa815, 0x346e, 0xb21f, 0x418c, 0x407f, 0xb259, 0xba4e, 0x3d84, 0xb2ff, 0x40d6, 0x44b3, 0x1bfb, 0xa6b7, 0x41f2, 0x412c, 0x4262, 0xbafd, 0x4460, 0xbfb0, 0x414c, 0xbfa9, 0x129a, 0x43d9, 0x09f1, 0x4262, 0x2b67, 0x4369, 0x40b7, 0xbf4c, 0x4473, 0xba7f, 0xba3f, 0xba30, 0xb039, 0x4378, 0x431a, 0xbf71, 0xb20b, 0xba76, 0x410a, 0x4284, 0xa2fb, 0xb283, 0xb2c3, 0xa762, 0x3e09, 0xba6c, 0xbf65, 0x4387, 0x218b, 0x2a1c, 0x4184, 0xb2b6, 0x41c0, 0x4298, 0x4249, 0x4397, 0x1ed0, 0xbafe, 0x4659, 0x1fc5, 0xa570, 0x4684, 0x40d0, 0xb012, 0x2c6b, 0xb22b, 0x105a, 0x4229, 0x409a, 0x43ce, 0xb06d, 0x4085, 0x4280, 0x12a1, 0xbf4d, 0xb09d, 0x436c, 0x281c, 0x40ff, 0x0cc9, 0xbfad, 0x1195, 0x42b4, 0x43f7, 0x415b, 0x40ad, 0x43e6, 0xb016, 0x4086, 0x4037, 0x0149, 0xbfd0, 0x41f5, 0x3cc4, 0xad52, 0x2422, 0xa9f5, 0x41c6, 0x26b2, 0x4226, 0xb27e, 0xbf3e, 0x02a3, 0xbac8, 0xb225, 0xbf31, 0x0663, 0xaea1, 0x4010, 0x00b1, 0x4201, 0xb0ce, 0xba4c, 0x400b, 0x4442, 0x436d, 0x0722, 0x42f6, 0x4321, 0x4001, 0x1f25, 0x411e, 0x401d, 0xba3a, 0x0ba3, 0xb2e1, 0x0141, 0xb01f, 0xb26c, 0x41a7, 0x435a, 0xaa86, 0xbfbb, 0x459c, 0x1caf, 0x441e, 0x43e5, 0x3643, 0x4240, 0xb292, 0x3097, 0xb2c2, 0x1b2f, 0x0db8, 0x40ab, 0xba0c, 0xb21c, 0x415e, 0x42ba, 0x4182, 0x25a2, 0x42c0, 0xb08f, 0x2808, 0xbf97, 0x400b, 0x43af, 0xb22e, 0x416e, 0xba40, 0xbf80, 0x43fe, 0x4349, 0xbada, 0x4003, 0xbff0, 0x0a40, 0x3d0b, 0x412c, 0xbf2f, 0x430f, 0x101c, 0x1a47, 0x41ce, 0xb2de, 0x4359, 0x4297, 0x41ad, 0x1d4a, 0x44eb, 0xbf80, 0x436f, 0xa5d7, 0x1cb2, 0xbf1f, 0x2907, 0x1b41, 0x43c7, 0x42a7, 0x41d0, 0xb2d9, 0x429f, 0x43d2, 0xa0eb, 0x4106, 0xb2d9, 0xa5a9, 0xa43e, 0x43d7, 0x12d3, 0x1e49, 0x41e3, 0x4589, 0x433d, 0x430f, 0xab65, 0xb22d, 0xbaee, 0xb22a, 0xaec2, 0xb265, 0xba6c, 0x1a12, 0xbfb2, 0x4137, 0xa12b, 0x4115, 0x4306, 0x43e9, 0x1c8b, 0x1542, 0x2360, 0x45ea, 0x4387, 0xba7a, 0x1fab, 0xb245, 0xbfd8, 0x2725, 0xbf78, 0x4146, 0x428a, 0xb21b, 0x19f9, 0xb282, 0xb2da, 0x4622, 0x40ae, 0x46ac, 0x41ac, 0xbf33, 0xb213, 0xb22d, 0xba56, 0x40b7, 0xab93, 0x18e7, 0x4372, 0x40ce, 0xb23d, 0x1a8c, 0xb281, 0x42a2, 0x41ce, 0xb22e, 0x43ee, 0xb221, 0xbf2f, 0xb2c3, 0x4081, 0x23a1, 0x4162, 0x42b6, 0xb004, 0x1e59, 0xb2d0, 0x4121, 0x435d, 0xb2af, 0xb2f0, 0x42ab, 0xbfe0, 0x1cb8, 0x44f3, 0x4605, 0x1e0e, 0x4625, 0x31e0, 0x4570, 0x40ec, 0xbf7a, 0x4173, 0xa0f7, 0xb2f3, 0xba19, 0x4149, 0x1f51, 0xba44, 0x29ac, 0x402d, 0x1808, 0x01f2, 0x41bf, 0x4186, 0x42e4, 0x10e4, 0x1f7a, 0x416a, 0xb0b8, 0x4130, 0x4467, 0xbf4a, 0xba17, 0x4237, 0xb2bd, 0x1cb4, 0x1955, 0x3010, 0xbf6c, 0x419f, 0xbf90, 0x4326, 0x423d, 0x40b3, 0xb24d, 0x413a, 0x414f, 0x4317, 0x4018, 0xb254, 0x0dd2, 0x4281, 0x4175, 0x4590, 0x19ad, 0x405f, 0x1d33, 0xbf2b, 0x3132, 0x1412, 0x1bbc, 0x1bb8, 0x4259, 0x426e, 0x414f, 0x4358, 0x43df, 0xb056, 0x4677, 0xa879, 0xade8, 0xba78, 0x436a, 0xb211, 0x4013, 0x40e9, 0x4280, 0xbff0, 0x41e8, 0x068f, 0x185e, 0x43c5, 0x43c6, 0xb021, 0xbfa7, 0x42da, 0x1aa9, 0x4214, 0xa017, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x371597f2, 0x76cf74c6, 0xf6f07bf9, 0x14bc3ff2, 0x44d46dd4, 0x85b9d3ca, 0x44827883, 0x4ba02ac3, 0x45d4fe43, 0x55355bd7, 0xa1571ee2, 0x4065eef1, 0x6a318c25, 0x4295c0bf, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x45d4fe43, 0xa1571ee2, 0x00000000, 0x82fbba0c, 0x00000064, 0x4295cc27, 0x00000000, 0x400001d0 }, + Instructions = [0xa14c, 0x4132, 0x41bc, 0x4020, 0x0b92, 0x157b, 0x41d2, 0x4033, 0x0ac1, 0x1a9f, 0x4029, 0x27ea, 0xb2ec, 0xbff0, 0x1c03, 0xb249, 0xbfba, 0x2af5, 0x063a, 0xb2f7, 0x1fde, 0x4650, 0x419d, 0x4254, 0x423c, 0x45c5, 0x43f5, 0xbfb7, 0xb22c, 0x439d, 0x41ae, 0xa021, 0x405d, 0xb2f5, 0xa199, 0x4328, 0x43c1, 0xa29f, 0x3ace, 0x40cd, 0xb29a, 0x4192, 0x4165, 0xbaf5, 0x281e, 0x2f02, 0xa053, 0xb2a9, 0x414c, 0x2319, 0x40bb, 0xbfdb, 0xbf80, 0xa7d7, 0xbff0, 0x424b, 0xb031, 0x4063, 0xbf29, 0x443d, 0xba16, 0x2f1f, 0x2cae, 0x4108, 0xb0e1, 0x4362, 0x3931, 0xbac3, 0xbf8d, 0xb286, 0xb2bd, 0x43b0, 0xb01c, 0x42f2, 0xbfb5, 0xba58, 0x4066, 0x42a6, 0x40f4, 0x25d9, 0xba15, 0xba76, 0x4173, 0x32e9, 0x4184, 0x45f3, 0xb0e2, 0xb2e3, 0x32b6, 0xbf81, 0x4136, 0x448a, 0xba7b, 0xba55, 0xb23c, 0x4153, 0x4323, 0xb2cb, 0x18e5, 0x4161, 0xba7b, 0x363d, 0x408c, 0xbf39, 0x400f, 0x406c, 0x41c0, 0x420d, 0x32e5, 0xb24a, 0x2bb8, 0xaa8c, 0xb053, 0xb276, 0xbf4d, 0x4109, 0xae28, 0xba33, 0x429e, 0xb055, 0x2c5a, 0x43c2, 0xb283, 0x05b1, 0xbfd3, 0x19f9, 0x4081, 0xbace, 0x43c3, 0x455e, 0x42aa, 0xbfcf, 0x42d3, 0x4000, 0xb23a, 0x42ee, 0x41b4, 0xba39, 0x2cd1, 0x303c, 0x43a4, 0xbfbc, 0xb2db, 0x2de9, 0xbaf6, 0xafed, 0xba77, 0x42f4, 0x4163, 0x41b5, 0x41b5, 0x3a75, 0x4298, 0x4215, 0xba5c, 0x42bc, 0xb2c8, 0x41ec, 0x2f90, 0x42b1, 0xb065, 0xbfbc, 0xba6f, 0x456e, 0xb234, 0xbf42, 0x44b4, 0x46f9, 0x1b3f, 0x1d00, 0x4201, 0xb223, 0xa1f4, 0x27e7, 0x41c0, 0x1e5c, 0x46b1, 0x412b, 0xa523, 0xbf00, 0x4033, 0x151c, 0x3328, 0xba10, 0x420f, 0x45b4, 0x1217, 0xbf6f, 0xa77d, 0x2c63, 0x1985, 0x411a, 0xb262, 0xbf1f, 0xb260, 0x1a16, 0x43ac, 0x41d4, 0x440c, 0x41f6, 0x3409, 0xb2a6, 0xbfe1, 0x2013, 0x43e1, 0x43fd, 0x46d1, 0x4160, 0xbf73, 0x4132, 0x429b, 0x23b3, 0xbae9, 0x10bd, 0xba7f, 0xba1b, 0x1886, 0x109c, 0x41a6, 0xb201, 0x1be2, 0xbf95, 0x410e, 0x46a2, 0x430a, 0x02f1, 0xb2d5, 0xb206, 0xbae9, 0x1b5c, 0x40f3, 0x44da, 0xbf43, 0xabc8, 0x0f66, 0x1883, 0x458b, 0x426d, 0xa283, 0x4033, 0x416e, 0x4173, 0x4461, 0xb2f6, 0x1139, 0xb0b0, 0xbfe0, 0x437a, 0x41f9, 0xb226, 0x4359, 0x4160, 0x4618, 0xb27e, 0x41ab, 0xbfb4, 0xb0f4, 0x4603, 0x401e, 0x2dd7, 0x1b5c, 0xb2ec, 0x16ab, 0xb00d, 0x41b9, 0xa2eb, 0xb00d, 0x40bf, 0x2e03, 0x46b2, 0xbf13, 0x38c1, 0x1ed1, 0xbac9, 0x4036, 0xb0bf, 0x41bc, 0xba14, 0x02dc, 0x41c1, 0x4383, 0xba42, 0xb223, 0xba53, 0x4037, 0xba00, 0x43d0, 0x4362, 0x42ea, 0xb03f, 0x41a3, 0x4111, 0x001b, 0x0080, 0xbf7f, 0xb299, 0x40e7, 0x4158, 0x4196, 0x1a5d, 0x07f6, 0x41ee, 0x0c49, 0xb2c8, 0xb243, 0x409a, 0x392d, 0xb2bf, 0xa325, 0x4629, 0xbfd4, 0x4334, 0x4305, 0x2dd2, 0xbfe0, 0xb01d, 0x36a2, 0x4211, 0xbfe4, 0x4151, 0xbfb0, 0xb2da, 0xbf70, 0xb2ee, 0x43a8, 0xbf85, 0x448d, 0x43e6, 0x1b34, 0x18e6, 0x43f7, 0x1d9f, 0xb251, 0x40b6, 0x0822, 0x4048, 0xb086, 0x0161, 0xbaca, 0xb211, 0x0500, 0xb076, 0x400d, 0xbf9c, 0x40bd, 0x41bd, 0x22d5, 0x421d, 0x3876, 0x1a86, 0x408e, 0x357b, 0x4567, 0x41f6, 0xb29f, 0x43f4, 0x439b, 0x431b, 0x4115, 0x3962, 0xb0cc, 0x4198, 0x0afa, 0x445d, 0xbac5, 0xaa18, 0x41e1, 0x43e4, 0xbf59, 0x43b8, 0x431e, 0x1849, 0x4233, 0x4393, 0x42dd, 0x4275, 0x430f, 0x420b, 0xbf90, 0x4116, 0x43b5, 0xb226, 0xad7b, 0x45e8, 0x4202, 0x43c7, 0x2c0c, 0x4070, 0x4185, 0x43ce, 0xbad1, 0x1a16, 0x1c88, 0x413b, 0x4163, 0x2d64, 0xb03b, 0xbf63, 0x1d22, 0x40c5, 0x285b, 0x1f82, 0x41ba, 0x417d, 0xba1b, 0x4219, 0x40e2, 0x4297, 0x4307, 0x1873, 0x4050, 0xbfa0, 0x229d, 0x4055, 0x436a, 0x3545, 0x1a18, 0x42ef, 0xb280, 0x40a1, 0x1c13, 0xb05e, 0x408e, 0x42d4, 0x2688, 0x40d3, 0xbfc3, 0xa2eb, 0x421d, 0x440e, 0x090b, 0xb264, 0x4160, 0xb2b3, 0xbad4, 0xba36, 0x40f8, 0xb2f5, 0x3be0, 0xb096, 0x1da7, 0x1f4e, 0xba52, 0x4155, 0x4273, 0xbf8e, 0x42f4, 0x4247, 0x4148, 0x428e, 0x4481, 0x1cd6, 0x436c, 0xb22a, 0x4189, 0x27ea, 0x42c1, 0x435f, 0x41ca, 0x24f5, 0x40a8, 0x4304, 0x4575, 0x416a, 0x42d4, 0x41d8, 0x1cf2, 0x430a, 0x4249, 0xa6d5, 0x4208, 0x4361, 0xbf77, 0xb2bf, 0x4061, 0x42f5, 0x1df1, 0xb2fb, 0x2eb2, 0x1f36, 0x0636, 0x4233, 0xb051, 0x0d22, 0x437a, 0x187c, 0x431d, 0x2642, 0x4329, 0xba5e, 0x402e, 0x1a7d, 0xb27c, 0xbfc0, 0x4382, 0x430d, 0xaad4, 0x4033, 0x423d, 0x4266, 0xbfc1, 0x1a59, 0x4349, 0x416c, 0xb236, 0x4337, 0x2973, 0x43cb, 0x41d8, 0xb031, 0x431b, 0x1bce, 0x1553, 0x40ea, 0x0c9e, 0xba3b, 0x1192, 0x41a9, 0x4261, 0x4086, 0x1582, 0x4637, 0x4056, 0xbf8c, 0x4600, 0x429b, 0xbfac, 0x2ba6, 0x2e02, 0xbf2d, 0x463a, 0x41d0, 0x1d05, 0x43f9, 0x2c9c, 0x40af, 0xb00f, 0x2d8b, 0x4201, 0x4354, 0xba21, 0x1e4b, 0x41ae, 0xb2ba, 0xb28c, 0xa6c2, 0xbafd, 0x27e8, 0xa499, 0xbf8f, 0x4272, 0x076d, 0x4342, 0x4337, 0x1f5e, 0x41a3, 0x37d5, 0x417e, 0x4215, 0x4678, 0x143e, 0xbafc, 0xab29, 0x4095, 0xb28d, 0x0ed2, 0xbf80, 0xabb9, 0x433d, 0xba51, 0x0bba, 0xaa69, 0xa93d, 0x4117, 0xbfc7, 0x312f, 0xb099, 0x119d, 0x4393, 0x40e9, 0xbf94, 0x1cb6, 0x4294, 0x43f5, 0x42b8, 0xb26f, 0x2772, 0xb0a6, 0x413b, 0xadeb, 0x408e, 0xbfbc, 0x4542, 0xba61, 0xb066, 0x40f9, 0x45d5, 0xabc9, 0xba51, 0x19c0, 0x4202, 0x4245, 0x4162, 0xb256, 0x0fff, 0x1ca8, 0xbaf9, 0x3ce8, 0x45ee, 0x1bd9, 0xbfa0, 0xa474, 0xbfb3, 0x42c1, 0x39dc, 0xb08f, 0x303f, 0xba67, 0x1ec2, 0x43bd, 0xb2b5, 0x42df, 0x0cbd, 0x240e, 0x402b, 0x411d, 0xba53, 0xb20e, 0x41b8, 0xbf78, 0x413f, 0xbff0, 0x0612, 0xbf36, 0x4685, 0x3a69, 0x4318, 0x4137, 0xba21, 0x42ba, 0x4259, 0x4207, 0x41d7, 0xb2bc, 0x3b7e, 0x40d0, 0x423b, 0xab19, 0xb2ae, 0xb2b8, 0x43a4, 0xba50, 0xba2f, 0x21c8, 0x24c1, 0x4110, 0x422d, 0xbf4d, 0xa1c2, 0x1745, 0x18d8, 0x095c, 0xb260, 0x4070, 0xb23f, 0xa815, 0x346e, 0xb21f, 0x418c, 0x407f, 0xb259, 0xba4e, 0x3d84, 0xb2ff, 0x40d6, 0x44b3, 0x1bfb, 0xa6b7, 0x41f2, 0x412c, 0x4262, 0xbafd, 0x4460, 0xbfb0, 0x414c, 0xbfa9, 0x129a, 0x43d9, 0x09f1, 0x4262, 0x2b67, 0x4369, 0x40b7, 0xbf4c, 0x4473, 0xba7f, 0xba3f, 0xba30, 0xb039, 0x4378, 0x431a, 0xbf71, 0xb20b, 0xba76, 0x410a, 0x4284, 0xa2fb, 0xb283, 0xb2c3, 0xa762, 0x3e09, 0xba6c, 0xbf65, 0x4387, 0x218b, 0x2a1c, 0x4184, 0xb2b6, 0x41c0, 0x4298, 0x4249, 0x4397, 0x1ed0, 0xbafe, 0x4659, 0x1fc5, 0xa570, 0x4684, 0x40d0, 0xb012, 0x2c6b, 0xb22b, 0x105a, 0x4229, 0x409a, 0x43ce, 0xb06d, 0x4085, 0x4280, 0x12a1, 0xbf4d, 0xb09d, 0x436c, 0x281c, 0x40ff, 0x0cc9, 0xbfad, 0x1195, 0x42b4, 0x43f7, 0x415b, 0x40ad, 0x43e6, 0xb016, 0x4086, 0x4037, 0x0149, 0xbfd0, 0x41f5, 0x3cc4, 0xad52, 0x2422, 0xa9f5, 0x41c6, 0x26b2, 0x4226, 0xb27e, 0xbf3e, 0x02a3, 0xbac8, 0xb225, 0xbf31, 0x0663, 0xaea1, 0x4010, 0x00b1, 0x4201, 0xb0ce, 0xba4c, 0x400b, 0x4442, 0x436d, 0x0722, 0x42f6, 0x4321, 0x4001, 0x1f25, 0x411e, 0x401d, 0xba3a, 0x0ba3, 0xb2e1, 0x0141, 0xb01f, 0xb26c, 0x41a7, 0x435a, 0xaa86, 0xbfbb, 0x459c, 0x1caf, 0x441e, 0x43e5, 0x3643, 0x4240, 0xb292, 0x3097, 0xb2c2, 0x1b2f, 0x0db8, 0x40ab, 0xba0c, 0xb21c, 0x415e, 0x42ba, 0x4182, 0x25a2, 0x42c0, 0xb08f, 0x2808, 0xbf97, 0x400b, 0x43af, 0xb22e, 0x416e, 0xba40, 0xbf80, 0x43fe, 0x4349, 0xbada, 0x4003, 0xbff0, 0x0a40, 0x3d0b, 0x412c, 0xbf2f, 0x430f, 0x101c, 0x1a47, 0x41ce, 0xb2de, 0x4359, 0x4297, 0x41ad, 0x1d4a, 0x44eb, 0xbf80, 0x436f, 0xa5d7, 0x1cb2, 0xbf1f, 0x2907, 0x1b41, 0x43c7, 0x42a7, 0x41d0, 0xb2d9, 0x429f, 0x43d2, 0xa0eb, 0x4106, 0xb2d9, 0xa5a9, 0xa43e, 0x43d7, 0x12d3, 0x1e49, 0x41e3, 0x4589, 0x433d, 0x430f, 0xab65, 0xb22d, 0xbaee, 0xb22a, 0xaec2, 0xb265, 0xba6c, 0x1a12, 0xbfb2, 0x4137, 0xa12b, 0x4115, 0x4306, 0x43e9, 0x1c8b, 0x1542, 0x2360, 0x45ea, 0x4387, 0xba7a, 0x1fab, 0xb245, 0xbfd8, 0x2725, 0xbf78, 0x4146, 0x428a, 0xb21b, 0x19f9, 0xb282, 0xb2da, 0x4622, 0x40ae, 0x46ac, 0x41ac, 0xbf33, 0xb213, 0xb22d, 0xba56, 0x40b7, 0xab93, 0x18e7, 0x4372, 0x40ce, 0xb23d, 0x1a8c, 0xb281, 0x42a2, 0x41ce, 0xb22e, 0x43ee, 0xb221, 0xbf2f, 0xb2c3, 0x4081, 0x23a1, 0x4162, 0x42b6, 0xb004, 0x1e59, 0xb2d0, 0x4121, 0x435d, 0xb2af, 0xb2f0, 0x42ab, 0xbfe0, 0x1cb8, 0x44f3, 0x4605, 0x1e0e, 0x4625, 0x31e0, 0x4570, 0x40ec, 0xbf7a, 0x4173, 0xa0f7, 0xb2f3, 0xba19, 0x4149, 0x1f51, 0xba44, 0x29ac, 0x402d, 0x1808, 0x01f2, 0x41bf, 0x4186, 0x42e4, 0x10e4, 0x1f7a, 0x416a, 0xb0b8, 0x4130, 0x4467, 0xbf4a, 0xba17, 0x4237, 0xb2bd, 0x1cb4, 0x1955, 0x3010, 0xbf6c, 0x419f, 0xbf90, 0x4326, 0x423d, 0x40b3, 0xb24d, 0x413a, 0x414f, 0x4317, 0x4018, 0xb254, 0x0dd2, 0x4281, 0x4175, 0x4590, 0x19ad, 0x405f, 0x1d33, 0xbf2b, 0x3132, 0x1412, 0x1bbc, 0x1bb8, 0x4259, 0x426e, 0x414f, 0x4358, 0x43df, 0xb056, 0x4677, 0xa879, 0xade8, 0xba78, 0x436a, 0xb211, 0x4013, 0x40e9, 0x4280, 0xbff0, 0x41e8, 0x068f, 0x185e, 0x43c5, 0x43c6, 0xb021, 0xbfa7, 0x42da, 0x1aa9, 0x4214, 0xa017, 0x4770, 0xe7fe + ], + StartRegs = [0x371597f2, 0x76cf74c6, 0xf6f07bf9, 0x14bc3ff2, 0x44d46dd4, 0x85b9d3ca, 0x44827883, 0x4ba02ac3, 0x45d4fe43, 0x55355bd7, 0xa1571ee2, 0x4065eef1, 0x6a318c25, 0x4295c0bf, 0x00000000, 0x600001f0 + ], + FinalRegs = [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x45d4fe43, 0xa1571ee2, 0x00000000, 0x82fbba0c, 0x00000064, 0x4295cc27, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x200c, 0xbf4b, 0x3eb3, 0x4389, 0x4279, 0xb2c4, 0x432f, 0xb2ad, 0x1a23, 0xa8ec, 0x4396, 0x424d, 0x4177, 0xb0e4, 0x30b3, 0x4175, 0x42f2, 0x43e7, 0x40d1, 0x1e00, 0xb20a, 0x1f46, 0x42a6, 0x401c, 0xbf26, 0x4342, 0x4082, 0x38b3, 0x01dc, 0xbfe0, 0x429c, 0x4192, 0xb294, 0x1c89, 0xbf8a, 0x4290, 0xba28, 0xba38, 0x4255, 0xa885, 0x41bc, 0x1e2c, 0x4188, 0xb25d, 0xb245, 0x0f0d, 0x1af7, 0x1a13, 0x00b2, 0x23e6, 0x05cc, 0x350b, 0x43da, 0xb2ee, 0xa17e, 0x4290, 0x11a2, 0x4151, 0x1629, 0xbfaa, 0x44a8, 0x3802, 0x2ddb, 0x3c35, 0x4328, 0x1c04, 0x41cc, 0x4010, 0x4031, 0x41b9, 0xbfcd, 0x420c, 0x43fe, 0xb209, 0x4070, 0x4009, 0xb04f, 0x1b1a, 0x1ad0, 0xba64, 0xab75, 0xbaf7, 0xb01e, 0x41f5, 0x423f, 0x46d9, 0x0581, 0x40aa, 0x2fd3, 0x19d7, 0x1d89, 0x357c, 0xb0e6, 0x1ef7, 0xbf29, 0x44e1, 0x066d, 0x3b50, 0xac4d, 0x19a8, 0x449d, 0x0215, 0x0662, 0x4348, 0x4168, 0x4392, 0xac1f, 0xb02d, 0xbf88, 0x1835, 0xa8cb, 0xb06d, 0x426f, 0x3a1f, 0x1aeb, 0xb01d, 0xb014, 0x4221, 0x1e94, 0xbf53, 0xb287, 0xadbc, 0xb275, 0x42b6, 0x46c4, 0xab25, 0x394f, 0x1a27, 0x1dc2, 0xbff0, 0x43bc, 0xb062, 0xb2bd, 0x4109, 0x4305, 0xbf37, 0xb09e, 0x40a7, 0xb2ca, 0x42dd, 0xb248, 0xb0c0, 0x311c, 0x40cd, 0x40e7, 0x428f, 0x422c, 0x4213, 0x4101, 0x1838, 0x1f0a, 0x1b05, 0xbad3, 0xb28d, 0xbf70, 0x40bc, 0x4383, 0x43f6, 0x0bb7, 0x4036, 0x4582, 0x3552, 0xbf0f, 0x4329, 0xb244, 0xb2cf, 0x4095, 0xb261, 0x41f2, 0x083b, 0xb278, 0x0ce4, 0x415c, 0xbf3f, 0x4001, 0xb0ec, 0x0cbe, 0x1347, 0xbf1d, 0x4254, 0x199b, 0x1f28, 0xb2c1, 0x071c, 0x4234, 0xba53, 0xb074, 0xba5d, 0x4391, 0x3240, 0xb2e7, 0x4320, 0x19b5, 0x020e, 0x439b, 0x2782, 0xba6a, 0x094a, 0xb044, 0x40f5, 0xb21a, 0x40cd, 0xb274, 0xbf9a, 0x424f, 0x4624, 0x4009, 0xb23e, 0x42ef, 0x4284, 0x4548, 0x1da1, 0x19f5, 0x4100, 0xb2b2, 0xad48, 0x40a6, 0x1f3d, 0x45e1, 0xb22d, 0xbf12, 0x4008, 0x08ae, 0x420c, 0xbae7, 0x4273, 0x4225, 0x1c10, 0xbf68, 0x4070, 0x4113, 0xb08a, 0x0a0a, 0xa398, 0x08f0, 0xbfe0, 0x0f55, 0x41c3, 0x1c12, 0x385a, 0xa0f9, 0x1e68, 0x13ce, 0x1ffe, 0x4032, 0x435f, 0xba10, 0xb231, 0xb27f, 0xbf13, 0x42e5, 0x16d2, 0xb2e2, 0x4379, 0xba75, 0x428e, 0x4239, 0x4311, 0x42df, 0x43ed, 0x29dd, 0xbfa4, 0xb05e, 0xaf16, 0x1b1d, 0x4101, 0x415a, 0xb2a8, 0x40ed, 0x3eb0, 0x4346, 0x412b, 0xb28f, 0x415a, 0xbfd9, 0x425f, 0x4182, 0xb249, 0x43e6, 0xb2b9, 0x1400, 0x4073, 0x1272, 0x42d9, 0x4391, 0x407b, 0x43ba, 0xb07c, 0x41b6, 0xba09, 0x4419, 0xbfba, 0x40ae, 0x44f2, 0x1e03, 0x3d31, 0x4313, 0x417c, 0x1f4a, 0x40e1, 0x1b00, 0x425e, 0x46d2, 0x406c, 0xbfc3, 0x1ef0, 0x4266, 0x407f, 0x2f1e, 0x2462, 0x43ae, 0xb077, 0x4187, 0x4624, 0x4366, 0xba60, 0x43ed, 0x4429, 0xb20c, 0x2bc8, 0x181e, 0xbfb0, 0xb02b, 0xb26f, 0xa896, 0x42e8, 0x1cc9, 0x404d, 0x2159, 0xb27e, 0xbf2e, 0xbff0, 0x0378, 0x4598, 0x45ec, 0xbfda, 0xba4e, 0xb250, 0xb2b4, 0xb0f9, 0x43d1, 0xb027, 0x41e3, 0x4076, 0x43df, 0xbafd, 0x4397, 0x4046, 0x4567, 0xb251, 0x454f, 0x44e5, 0xbf8d, 0xba25, 0x461d, 0x415d, 0xae84, 0x4577, 0xbaeb, 0x0cd3, 0x4201, 0x025f, 0x4126, 0x2412, 0x1896, 0x424a, 0x1daf, 0xb22e, 0x4311, 0xba23, 0xbaf4, 0x4243, 0x3d58, 0xb0c3, 0xb0dc, 0xb230, 0x424f, 0x401f, 0xbf32, 0xa999, 0x42d4, 0x4306, 0xbfd2, 0x45f4, 0xaab3, 0xb0d5, 0x34d6, 0xb280, 0xb229, 0x4068, 0x1e55, 0x4368, 0x40bd, 0xba7f, 0xba63, 0x4108, 0x1fd9, 0xb000, 0xb295, 0x40b9, 0x2f6d, 0x447c, 0x43b9, 0xbf7c, 0xb059, 0xba47, 0x40d6, 0x1e41, 0x378b, 0xbfa0, 0x25c8, 0x2b2f, 0x014f, 0xbf03, 0x4139, 0xb238, 0x01a8, 0x3707, 0x1878, 0x4301, 0x19e6, 0xab18, 0xba2e, 0x4126, 0x43eb, 0xb29f, 0x42a6, 0x41bb, 0x0eca, 0x08f5, 0x414a, 0x41c5, 0x4305, 0x43bd, 0x40ed, 0x0b88, 0x4387, 0x4380, 0xb0fd, 0x31e5, 0xba59, 0xbf90, 0xbf57, 0x40f1, 0x435f, 0x385f, 0x403b, 0xbadc, 0x301d, 0xb265, 0x440c, 0xbac3, 0xb2a3, 0x402c, 0x45bb, 0x43e4, 0x2833, 0x4109, 0xae7c, 0xb0d2, 0x458e, 0x40ec, 0x14c5, 0x405a, 0x2480, 0x0070, 0xbf24, 0x41b2, 0xba46, 0x401c, 0xbf27, 0x2583, 0xb24d, 0x41ff, 0x32fc, 0xb0d4, 0x4045, 0x4145, 0x00ca, 0x4067, 0x42ac, 0x4094, 0x3145, 0x4120, 0x1e2a, 0xba20, 0x4156, 0x3e8c, 0x40e0, 0x1c02, 0xba0d, 0xb061, 0x46fd, 0x42e6, 0xbf6b, 0x411b, 0x1fbf, 0xb070, 0x1846, 0xb22b, 0x4695, 0x407e, 0xba6e, 0x10bc, 0xbf94, 0x42fd, 0x43b9, 0xac56, 0x414a, 0x0183, 0x41a6, 0x42f3, 0x433d, 0x19c1, 0x4053, 0x4204, 0xb282, 0xb241, 0x1e8c, 0xb287, 0x421b, 0xb270, 0xb036, 0xb285, 0x4220, 0xbaca, 0xb289, 0xb275, 0x2849, 0x410d, 0xa4a3, 0xb231, 0xbfb4, 0x1e9b, 0x413e, 0xa953, 0xb289, 0x408c, 0x4237, 0x3547, 0xb0fe, 0xbf4c, 0x45d8, 0x424e, 0x40a3, 0x1e5c, 0x41c3, 0xbafe, 0x32ef, 0x4191, 0x41f2, 0x1d7d, 0xaacc, 0x43f2, 0x418f, 0xb203, 0xb0cb, 0x3ac6, 0xa494, 0x41fe, 0x4015, 0xbace, 0x34f5, 0x4385, 0xbf1c, 0x323a, 0x414f, 0x4312, 0x402a, 0x426f, 0x41b7, 0x4257, 0x2fda, 0xb2d1, 0x4251, 0xbf34, 0x405a, 0x44c0, 0xbfbc, 0x45e2, 0x4285, 0x40b7, 0x4293, 0xb0fa, 0xba14, 0x15bf, 0x4350, 0x420a, 0x418c, 0x33de, 0xba58, 0xa868, 0x1eb6, 0xb202, 0x43a4, 0x439c, 0x42a7, 0x4323, 0x45e6, 0x1e1b, 0xa2d3, 0x1833, 0x1896, 0x4174, 0x411b, 0xbf6d, 0x13be, 0x2d69, 0x41eb, 0x429c, 0xb2d2, 0xb2a0, 0x2ec9, 0x41ee, 0x1b0a, 0x1fbf, 0x423a, 0x1db5, 0xba10, 0x40df, 0x41dc, 0xb25f, 0xb2b9, 0xb2dd, 0x45dd, 0x403d, 0x31a2, 0x4190, 0x402b, 0xbf5c, 0x43ce, 0xa551, 0x386b, 0xbae4, 0x09fd, 0x4318, 0xbf46, 0x413d, 0x1c10, 0x41e9, 0x42b9, 0x1792, 0x419e, 0x1f8d, 0xbfb2, 0xb2be, 0x426b, 0x12da, 0xa7d4, 0x19a3, 0x40c7, 0xbad2, 0x43ee, 0x45cb, 0x0e6b, 0xabd7, 0x094f, 0xbac9, 0x40a0, 0x43aa, 0xbfe2, 0x4375, 0x2acd, 0x41de, 0x43e1, 0x1035, 0x067c, 0x40e4, 0x43cd, 0x1499, 0x19fd, 0xb09a, 0x43eb, 0x3b91, 0x0573, 0x4043, 0x1edc, 0xba7a, 0x4341, 0x37ca, 0x4030, 0x1037, 0xbae7, 0xb2b5, 0x4339, 0xbf03, 0x1731, 0x461f, 0xb040, 0x417d, 0x41dc, 0xb013, 0x1e18, 0x05e4, 0xbfb8, 0x41d7, 0x1c58, 0x0e05, 0x41ed, 0x431f, 0x406f, 0x43f3, 0x19df, 0x4058, 0x412a, 0x1e46, 0x4248, 0x4561, 0xbf6d, 0x4073, 0x429a, 0x4280, 0x1bd4, 0xb0fe, 0x4024, 0xbfde, 0x41ca, 0x4143, 0x424d, 0x4137, 0x434d, 0x4206, 0x2331, 0x434b, 0x41d2, 0x412d, 0x3037, 0x423c, 0x4582, 0xbaed, 0x41f8, 0x4113, 0x4584, 0xbf2a, 0xb234, 0x1de1, 0xb2cd, 0x4099, 0xa0ca, 0x4167, 0xbf00, 0x42e3, 0x2ee1, 0x1d91, 0x0fa0, 0x400d, 0x3248, 0xbfde, 0x25d6, 0x4332, 0x0ca8, 0x18fd, 0xb25f, 0xba37, 0x4121, 0x4402, 0x42c8, 0xbfc0, 0x3ff9, 0x41c3, 0xb2a8, 0x184f, 0x37a4, 0x439d, 0x17f7, 0x4273, 0x0b72, 0x428d, 0x4293, 0xad65, 0xbf60, 0x1be0, 0xba20, 0x43e8, 0x4033, 0x219f, 0xbf27, 0x425b, 0x1cab, 0x42c0, 0xa753, 0x411b, 0x42ad, 0x14cd, 0xba71, 0x4221, 0xba79, 0xbfbf, 0x423f, 0x437b, 0x418d, 0x43c5, 0x4062, 0x0c46, 0x3c2f, 0x442a, 0xbf26, 0x1a90, 0xb2b7, 0x07b4, 0xbf52, 0x04df, 0x42e1, 0x1d76, 0x418b, 0x333f, 0x1f08, 0x4007, 0x1246, 0xb259, 0x4084, 0x4223, 0xb257, 0xb26b, 0x2ba1, 0xb232, 0x11ce, 0xb25e, 0xb213, 0xbf5e, 0xb26f, 0x1bdd, 0x426c, 0x4375, 0x18e4, 0x403c, 0x42b8, 0xb02b, 0x4197, 0x1861, 0x2f7a, 0xbfb8, 0xa15b, 0x43d1, 0x3df1, 0xb2e7, 0x43dd, 0x425d, 0xba27, 0x4281, 0xbaf7, 0x4644, 0xbf4d, 0xa7c4, 0x4208, 0x411c, 0x43f3, 0xbacf, 0xb04f, 0x4091, 0x41d0, 0x2fd4, 0x4332, 0xb205, 0x45ee, 0xb2b7, 0xb0a1, 0xb235, 0x214e, 0x4232, 0x41e1, 0xbada, 0x2e04, 0xb2ba, 0x40f8, 0x3e46, 0xbf05, 0x3862, 0x0057, 0x426a, 0x401e, 0xb014, 0xba19, 0x0d65, 0xba7d, 0x41cc, 0x34c8, 0x4201, 0x4202, 0x43a6, 0xb004, 0xbf2c, 0xa057, 0x0d9f, 0x431a, 0xba38, 0x40b7, 0xb277, 0x4275, 0x27a1, 0x4222, 0xb098, 0xb02e, 0xb2de, 0x40e5, 0xbf27, 0x42a3, 0xad53, 0x4627, 0xbfe0, 0xba06, 0x4098, 0xb24c, 0x40e0, 0x0ec3, 0x411a, 0x403f, 0xb256, 0x42eb, 0xba5f, 0xbfb6, 0x42ac, 0x41cd, 0xb2ec, 0xbf85, 0x0e6f, 0x164c, 0xb207, 0x434c, 0xbfe0, 0x40f4, 0xbaed, 0x4056, 0xb20a, 0x1834, 0x4659, 0x1d2e, 0x0587, 0xbfb6, 0xaaf8, 0x45c6, 0x401b, 0xba6a, 0xba64, 0x40b0, 0xba31, 0x0731, 0x41ae, 0x427d, 0x4021, 0x272c, 0xba2e, 0x409f, 0xbae6, 0x4048, 0x4065, 0xbf06, 0x40e6, 0x430c, 0xb20a, 0xba68, 0xba40, 0xbf95, 0x4171, 0x43f2, 0xb25a, 0x43cb, 0x42d0, 0x46db, 0xa3e7, 0x43e8, 0x402c, 0x053e, 0x422a, 0x4261, 0x429e, 0x417d, 0xb234, 0x41f5, 0x2f6f, 0x44d2, 0xbf6a, 0x1fff, 0x1a5b, 0xba78, 0x29e0, 0x43ad, 0x4200, 0xb2dd, 0x0096, 0x3a21, 0xb247, 0x382e, 0xba2e, 0x4336, 0x4021, 0x4221, 0xbf59, 0x43cd, 0x1810, 0xa198, 0x2e75, 0xba5d, 0x42dd, 0x42a6, 0x422b, 0xbf07, 0xa0f8, 0x4206, 0x41d6, 0x3238, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3aa91aa4, 0x4c5784a8, 0x59e0657d, 0x51ef61ac, 0x760b00f1, 0x0da5a30b, 0x69a772e3, 0x96f320f6, 0x01c12c2c, 0xe5449e38, 0x74e0fd57, 0xcf8b32f0, 0x484f3e23, 0x911d3cda, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0xffffffb0, 0x00000000, 0x00000017, 0x00001b1c, 0x00000000, 0x00001c1b, 0x38000000, 0xffffffff, 0x0382586e, 0x17da7113, 0xe9c1faae, 0xcf8b32f0, 0x01c12c37, 0xfffffbd4, 0x00000000, 0x200001d0 }, + Instructions = [0x200c, 0xbf4b, 0x3eb3, 0x4389, 0x4279, 0xb2c4, 0x432f, 0xb2ad, 0x1a23, 0xa8ec, 0x4396, 0x424d, 0x4177, 0xb0e4, 0x30b3, 0x4175, 0x42f2, 0x43e7, 0x40d1, 0x1e00, 0xb20a, 0x1f46, 0x42a6, 0x401c, 0xbf26, 0x4342, 0x4082, 0x38b3, 0x01dc, 0xbfe0, 0x429c, 0x4192, 0xb294, 0x1c89, 0xbf8a, 0x4290, 0xba28, 0xba38, 0x4255, 0xa885, 0x41bc, 0x1e2c, 0x4188, 0xb25d, 0xb245, 0x0f0d, 0x1af7, 0x1a13, 0x00b2, 0x23e6, 0x05cc, 0x350b, 0x43da, 0xb2ee, 0xa17e, 0x4290, 0x11a2, 0x4151, 0x1629, 0xbfaa, 0x44a8, 0x3802, 0x2ddb, 0x3c35, 0x4328, 0x1c04, 0x41cc, 0x4010, 0x4031, 0x41b9, 0xbfcd, 0x420c, 0x43fe, 0xb209, 0x4070, 0x4009, 0xb04f, 0x1b1a, 0x1ad0, 0xba64, 0xab75, 0xbaf7, 0xb01e, 0x41f5, 0x423f, 0x46d9, 0x0581, 0x40aa, 0x2fd3, 0x19d7, 0x1d89, 0x357c, 0xb0e6, 0x1ef7, 0xbf29, 0x44e1, 0x066d, 0x3b50, 0xac4d, 0x19a8, 0x449d, 0x0215, 0x0662, 0x4348, 0x4168, 0x4392, 0xac1f, 0xb02d, 0xbf88, 0x1835, 0xa8cb, 0xb06d, 0x426f, 0x3a1f, 0x1aeb, 0xb01d, 0xb014, 0x4221, 0x1e94, 0xbf53, 0xb287, 0xadbc, 0xb275, 0x42b6, 0x46c4, 0xab25, 0x394f, 0x1a27, 0x1dc2, 0xbff0, 0x43bc, 0xb062, 0xb2bd, 0x4109, 0x4305, 0xbf37, 0xb09e, 0x40a7, 0xb2ca, 0x42dd, 0xb248, 0xb0c0, 0x311c, 0x40cd, 0x40e7, 0x428f, 0x422c, 0x4213, 0x4101, 0x1838, 0x1f0a, 0x1b05, 0xbad3, 0xb28d, 0xbf70, 0x40bc, 0x4383, 0x43f6, 0x0bb7, 0x4036, 0x4582, 0x3552, 0xbf0f, 0x4329, 0xb244, 0xb2cf, 0x4095, 0xb261, 0x41f2, 0x083b, 0xb278, 0x0ce4, 0x415c, 0xbf3f, 0x4001, 0xb0ec, 0x0cbe, 0x1347, 0xbf1d, 0x4254, 0x199b, 0x1f28, 0xb2c1, 0x071c, 0x4234, 0xba53, 0xb074, 0xba5d, 0x4391, 0x3240, 0xb2e7, 0x4320, 0x19b5, 0x020e, 0x439b, 0x2782, 0xba6a, 0x094a, 0xb044, 0x40f5, 0xb21a, 0x40cd, 0xb274, 0xbf9a, 0x424f, 0x4624, 0x4009, 0xb23e, 0x42ef, 0x4284, 0x4548, 0x1da1, 0x19f5, 0x4100, 0xb2b2, 0xad48, 0x40a6, 0x1f3d, 0x45e1, 0xb22d, 0xbf12, 0x4008, 0x08ae, 0x420c, 0xbae7, 0x4273, 0x4225, 0x1c10, 0xbf68, 0x4070, 0x4113, 0xb08a, 0x0a0a, 0xa398, 0x08f0, 0xbfe0, 0x0f55, 0x41c3, 0x1c12, 0x385a, 0xa0f9, 0x1e68, 0x13ce, 0x1ffe, 0x4032, 0x435f, 0xba10, 0xb231, 0xb27f, 0xbf13, 0x42e5, 0x16d2, 0xb2e2, 0x4379, 0xba75, 0x428e, 0x4239, 0x4311, 0x42df, 0x43ed, 0x29dd, 0xbfa4, 0xb05e, 0xaf16, 0x1b1d, 0x4101, 0x415a, 0xb2a8, 0x40ed, 0x3eb0, 0x4346, 0x412b, 0xb28f, 0x415a, 0xbfd9, 0x425f, 0x4182, 0xb249, 0x43e6, 0xb2b9, 0x1400, 0x4073, 0x1272, 0x42d9, 0x4391, 0x407b, 0x43ba, 0xb07c, 0x41b6, 0xba09, 0x4419, 0xbfba, 0x40ae, 0x44f2, 0x1e03, 0x3d31, 0x4313, 0x417c, 0x1f4a, 0x40e1, 0x1b00, 0x425e, 0x46d2, 0x406c, 0xbfc3, 0x1ef0, 0x4266, 0x407f, 0x2f1e, 0x2462, 0x43ae, 0xb077, 0x4187, 0x4624, 0x4366, 0xba60, 0x43ed, 0x4429, 0xb20c, 0x2bc8, 0x181e, 0xbfb0, 0xb02b, 0xb26f, 0xa896, 0x42e8, 0x1cc9, 0x404d, 0x2159, 0xb27e, 0xbf2e, 0xbff0, 0x0378, 0x4598, 0x45ec, 0xbfda, 0xba4e, 0xb250, 0xb2b4, 0xb0f9, 0x43d1, 0xb027, 0x41e3, 0x4076, 0x43df, 0xbafd, 0x4397, 0x4046, 0x4567, 0xb251, 0x454f, 0x44e5, 0xbf8d, 0xba25, 0x461d, 0x415d, 0xae84, 0x4577, 0xbaeb, 0x0cd3, 0x4201, 0x025f, 0x4126, 0x2412, 0x1896, 0x424a, 0x1daf, 0xb22e, 0x4311, 0xba23, 0xbaf4, 0x4243, 0x3d58, 0xb0c3, 0xb0dc, 0xb230, 0x424f, 0x401f, 0xbf32, 0xa999, 0x42d4, 0x4306, 0xbfd2, 0x45f4, 0xaab3, 0xb0d5, 0x34d6, 0xb280, 0xb229, 0x4068, 0x1e55, 0x4368, 0x40bd, 0xba7f, 0xba63, 0x4108, 0x1fd9, 0xb000, 0xb295, 0x40b9, 0x2f6d, 0x447c, 0x43b9, 0xbf7c, 0xb059, 0xba47, 0x40d6, 0x1e41, 0x378b, 0xbfa0, 0x25c8, 0x2b2f, 0x014f, 0xbf03, 0x4139, 0xb238, 0x01a8, 0x3707, 0x1878, 0x4301, 0x19e6, 0xab18, 0xba2e, 0x4126, 0x43eb, 0xb29f, 0x42a6, 0x41bb, 0x0eca, 0x08f5, 0x414a, 0x41c5, 0x4305, 0x43bd, 0x40ed, 0x0b88, 0x4387, 0x4380, 0xb0fd, 0x31e5, 0xba59, 0xbf90, 0xbf57, 0x40f1, 0x435f, 0x385f, 0x403b, 0xbadc, 0x301d, 0xb265, 0x440c, 0xbac3, 0xb2a3, 0x402c, 0x45bb, 0x43e4, 0x2833, 0x4109, 0xae7c, 0xb0d2, 0x458e, 0x40ec, 0x14c5, 0x405a, 0x2480, 0x0070, 0xbf24, 0x41b2, 0xba46, 0x401c, 0xbf27, 0x2583, 0xb24d, 0x41ff, 0x32fc, 0xb0d4, 0x4045, 0x4145, 0x00ca, 0x4067, 0x42ac, 0x4094, 0x3145, 0x4120, 0x1e2a, 0xba20, 0x4156, 0x3e8c, 0x40e0, 0x1c02, 0xba0d, 0xb061, 0x46fd, 0x42e6, 0xbf6b, 0x411b, 0x1fbf, 0xb070, 0x1846, 0xb22b, 0x4695, 0x407e, 0xba6e, 0x10bc, 0xbf94, 0x42fd, 0x43b9, 0xac56, 0x414a, 0x0183, 0x41a6, 0x42f3, 0x433d, 0x19c1, 0x4053, 0x4204, 0xb282, 0xb241, 0x1e8c, 0xb287, 0x421b, 0xb270, 0xb036, 0xb285, 0x4220, 0xbaca, 0xb289, 0xb275, 0x2849, 0x410d, 0xa4a3, 0xb231, 0xbfb4, 0x1e9b, 0x413e, 0xa953, 0xb289, 0x408c, 0x4237, 0x3547, 0xb0fe, 0xbf4c, 0x45d8, 0x424e, 0x40a3, 0x1e5c, 0x41c3, 0xbafe, 0x32ef, 0x4191, 0x41f2, 0x1d7d, 0xaacc, 0x43f2, 0x418f, 0xb203, 0xb0cb, 0x3ac6, 0xa494, 0x41fe, 0x4015, 0xbace, 0x34f5, 0x4385, 0xbf1c, 0x323a, 0x414f, 0x4312, 0x402a, 0x426f, 0x41b7, 0x4257, 0x2fda, 0xb2d1, 0x4251, 0xbf34, 0x405a, 0x44c0, 0xbfbc, 0x45e2, 0x4285, 0x40b7, 0x4293, 0xb0fa, 0xba14, 0x15bf, 0x4350, 0x420a, 0x418c, 0x33de, 0xba58, 0xa868, 0x1eb6, 0xb202, 0x43a4, 0x439c, 0x42a7, 0x4323, 0x45e6, 0x1e1b, 0xa2d3, 0x1833, 0x1896, 0x4174, 0x411b, 0xbf6d, 0x13be, 0x2d69, 0x41eb, 0x429c, 0xb2d2, 0xb2a0, 0x2ec9, 0x41ee, 0x1b0a, 0x1fbf, 0x423a, 0x1db5, 0xba10, 0x40df, 0x41dc, 0xb25f, 0xb2b9, 0xb2dd, 0x45dd, 0x403d, 0x31a2, 0x4190, 0x402b, 0xbf5c, 0x43ce, 0xa551, 0x386b, 0xbae4, 0x09fd, 0x4318, 0xbf46, 0x413d, 0x1c10, 0x41e9, 0x42b9, 0x1792, 0x419e, 0x1f8d, 0xbfb2, 0xb2be, 0x426b, 0x12da, 0xa7d4, 0x19a3, 0x40c7, 0xbad2, 0x43ee, 0x45cb, 0x0e6b, 0xabd7, 0x094f, 0xbac9, 0x40a0, 0x43aa, 0xbfe2, 0x4375, 0x2acd, 0x41de, 0x43e1, 0x1035, 0x067c, 0x40e4, 0x43cd, 0x1499, 0x19fd, 0xb09a, 0x43eb, 0x3b91, 0x0573, 0x4043, 0x1edc, 0xba7a, 0x4341, 0x37ca, 0x4030, 0x1037, 0xbae7, 0xb2b5, 0x4339, 0xbf03, 0x1731, 0x461f, 0xb040, 0x417d, 0x41dc, 0xb013, 0x1e18, 0x05e4, 0xbfb8, 0x41d7, 0x1c58, 0x0e05, 0x41ed, 0x431f, 0x406f, 0x43f3, 0x19df, 0x4058, 0x412a, 0x1e46, 0x4248, 0x4561, 0xbf6d, 0x4073, 0x429a, 0x4280, 0x1bd4, 0xb0fe, 0x4024, 0xbfde, 0x41ca, 0x4143, 0x424d, 0x4137, 0x434d, 0x4206, 0x2331, 0x434b, 0x41d2, 0x412d, 0x3037, 0x423c, 0x4582, 0xbaed, 0x41f8, 0x4113, 0x4584, 0xbf2a, 0xb234, 0x1de1, 0xb2cd, 0x4099, 0xa0ca, 0x4167, 0xbf00, 0x42e3, 0x2ee1, 0x1d91, 0x0fa0, 0x400d, 0x3248, 0xbfde, 0x25d6, 0x4332, 0x0ca8, 0x18fd, 0xb25f, 0xba37, 0x4121, 0x4402, 0x42c8, 0xbfc0, 0x3ff9, 0x41c3, 0xb2a8, 0x184f, 0x37a4, 0x439d, 0x17f7, 0x4273, 0x0b72, 0x428d, 0x4293, 0xad65, 0xbf60, 0x1be0, 0xba20, 0x43e8, 0x4033, 0x219f, 0xbf27, 0x425b, 0x1cab, 0x42c0, 0xa753, 0x411b, 0x42ad, 0x14cd, 0xba71, 0x4221, 0xba79, 0xbfbf, 0x423f, 0x437b, 0x418d, 0x43c5, 0x4062, 0x0c46, 0x3c2f, 0x442a, 0xbf26, 0x1a90, 0xb2b7, 0x07b4, 0xbf52, 0x04df, 0x42e1, 0x1d76, 0x418b, 0x333f, 0x1f08, 0x4007, 0x1246, 0xb259, 0x4084, 0x4223, 0xb257, 0xb26b, 0x2ba1, 0xb232, 0x11ce, 0xb25e, 0xb213, 0xbf5e, 0xb26f, 0x1bdd, 0x426c, 0x4375, 0x18e4, 0x403c, 0x42b8, 0xb02b, 0x4197, 0x1861, 0x2f7a, 0xbfb8, 0xa15b, 0x43d1, 0x3df1, 0xb2e7, 0x43dd, 0x425d, 0xba27, 0x4281, 0xbaf7, 0x4644, 0xbf4d, 0xa7c4, 0x4208, 0x411c, 0x43f3, 0xbacf, 0xb04f, 0x4091, 0x41d0, 0x2fd4, 0x4332, 0xb205, 0x45ee, 0xb2b7, 0xb0a1, 0xb235, 0x214e, 0x4232, 0x41e1, 0xbada, 0x2e04, 0xb2ba, 0x40f8, 0x3e46, 0xbf05, 0x3862, 0x0057, 0x426a, 0x401e, 0xb014, 0xba19, 0x0d65, 0xba7d, 0x41cc, 0x34c8, 0x4201, 0x4202, 0x43a6, 0xb004, 0xbf2c, 0xa057, 0x0d9f, 0x431a, 0xba38, 0x40b7, 0xb277, 0x4275, 0x27a1, 0x4222, 0xb098, 0xb02e, 0xb2de, 0x40e5, 0xbf27, 0x42a3, 0xad53, 0x4627, 0xbfe0, 0xba06, 0x4098, 0xb24c, 0x40e0, 0x0ec3, 0x411a, 0x403f, 0xb256, 0x42eb, 0xba5f, 0xbfb6, 0x42ac, 0x41cd, 0xb2ec, 0xbf85, 0x0e6f, 0x164c, 0xb207, 0x434c, 0xbfe0, 0x40f4, 0xbaed, 0x4056, 0xb20a, 0x1834, 0x4659, 0x1d2e, 0x0587, 0xbfb6, 0xaaf8, 0x45c6, 0x401b, 0xba6a, 0xba64, 0x40b0, 0xba31, 0x0731, 0x41ae, 0x427d, 0x4021, 0x272c, 0xba2e, 0x409f, 0xbae6, 0x4048, 0x4065, 0xbf06, 0x40e6, 0x430c, 0xb20a, 0xba68, 0xba40, 0xbf95, 0x4171, 0x43f2, 0xb25a, 0x43cb, 0x42d0, 0x46db, 0xa3e7, 0x43e8, 0x402c, 0x053e, 0x422a, 0x4261, 0x429e, 0x417d, 0xb234, 0x41f5, 0x2f6f, 0x44d2, 0xbf6a, 0x1fff, 0x1a5b, 0xba78, 0x29e0, 0x43ad, 0x4200, 0xb2dd, 0x0096, 0x3a21, 0xb247, 0x382e, 0xba2e, 0x4336, 0x4021, 0x4221, 0xbf59, 0x43cd, 0x1810, 0xa198, 0x2e75, 0xba5d, 0x42dd, 0x42a6, 0x422b, 0xbf07, 0xa0f8, 0x4206, 0x41d6, 0x3238, 0x4770, 0xe7fe + ], + StartRegs = [0x3aa91aa4, 0x4c5784a8, 0x59e0657d, 0x51ef61ac, 0x760b00f1, 0x0da5a30b, 0x69a772e3, 0x96f320f6, 0x01c12c2c, 0xe5449e38, 0x74e0fd57, 0xcf8b32f0, 0x484f3e23, 0x911d3cda, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0xffffffb0, 0x00000000, 0x00000017, 0x00001b1c, 0x00000000, 0x00001c1b, 0x38000000, 0xffffffff, 0x0382586e, 0x17da7113, 0xe9c1faae, 0xcf8b32f0, 0x01c12c37, 0xfffffbd4, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xb251, 0x317d, 0xb2ae, 0x2093, 0xb04a, 0xb0b8, 0x1e16, 0x405a, 0xbfb8, 0xb0cf, 0x4099, 0x431e, 0x41e5, 0xbf70, 0xb0e1, 0xa18f, 0x1f25, 0xba65, 0x1d38, 0x1119, 0xba41, 0xb23a, 0x03ae, 0x01a6, 0x1dfc, 0x1e5c, 0x4181, 0xba71, 0x401c, 0x3c40, 0x4154, 0x1895, 0xbfd0, 0xbf7c, 0x1af1, 0x429c, 0x1148, 0x41b5, 0x432d, 0x43f4, 0x461b, 0x41d6, 0x1ef7, 0x1d2d, 0x41c8, 0x3021, 0xb25c, 0x431b, 0xa59d, 0x4355, 0xbae7, 0xbff0, 0xb2fa, 0x39aa, 0x0c26, 0x4144, 0x0954, 0x419b, 0x03a0, 0xbfd1, 0x45e9, 0x439a, 0x4127, 0xb23d, 0x4132, 0x1ae1, 0x4671, 0x4613, 0x45e2, 0xbac3, 0x421c, 0x1379, 0x1ea9, 0x16a8, 0x406d, 0x3d2b, 0x4267, 0xb205, 0x4042, 0x4232, 0x45e4, 0xb2ba, 0x1a6c, 0xb2a8, 0xb0fe, 0x2dc3, 0xb0d7, 0xbf4a, 0x407c, 0x40f2, 0xb21b, 0x0c04, 0x2884, 0x1b10, 0x42fb, 0x41b3, 0x0235, 0x2120, 0xb062, 0x438b, 0x444c, 0x43d0, 0x41d9, 0x1dc3, 0xb02b, 0x1b8e, 0x4231, 0xba4a, 0x4372, 0x42d1, 0xb246, 0x1cfa, 0x2420, 0x41ec, 0x41a2, 0x43cf, 0xbf6c, 0x0d46, 0xba57, 0x4266, 0xaca4, 0xb220, 0x33fb, 0xb2da, 0x40ac, 0x4207, 0xb2ca, 0x40fa, 0xb2ce, 0x2f83, 0x426d, 0x1f13, 0x42f0, 0x1902, 0x4374, 0x1fff, 0xa5f3, 0x40e8, 0x42ed, 0x43c6, 0x40de, 0x4244, 0x0f5d, 0x40f3, 0xbfb6, 0x36a3, 0x418e, 0xb0f3, 0x46c5, 0xbac8, 0x1cc6, 0x1495, 0x4121, 0xb286, 0x43d1, 0x431b, 0xad3e, 0xb240, 0xbaed, 0xba30, 0x41af, 0x400c, 0xb216, 0x08b2, 0x4426, 0x4321, 0xb28e, 0x439c, 0xbfa4, 0x2883, 0xba2e, 0x094c, 0x4382, 0x4118, 0x19a5, 0x05b0, 0x4000, 0x4064, 0x19b5, 0x435f, 0xb2e0, 0x4399, 0x1ec1, 0xb09a, 0x28c9, 0x0895, 0xba6b, 0x41c7, 0x4481, 0x42f6, 0x1dc4, 0xbfb8, 0xb249, 0xba32, 0xa293, 0xba7e, 0x40c7, 0x4369, 0x4211, 0x4198, 0x4294, 0x4256, 0x1be2, 0x1f8a, 0xb20f, 0x40c6, 0x409c, 0xbfd4, 0x4197, 0x42ab, 0x4149, 0x4284, 0x4610, 0xb2fd, 0x41f9, 0xb260, 0x427d, 0x18bf, 0x45f4, 0xa24d, 0xba4e, 0xba66, 0xb2dd, 0xbaed, 0xbf25, 0x1a95, 0x1d6a, 0xb2c6, 0x4005, 0x0738, 0x1930, 0xba7b, 0xb289, 0x14bb, 0x13be, 0x4368, 0x4005, 0xba63, 0x18f7, 0x078c, 0x464a, 0xbf84, 0x0f5a, 0x1e55, 0x4262, 0x26de, 0x4132, 0x421e, 0xb04b, 0x0632, 0xb2a5, 0x43a4, 0xb03d, 0x18a6, 0x41f7, 0xb2dc, 0xb226, 0xbf34, 0x4427, 0x4019, 0x4448, 0xbaeb, 0x43de, 0x42d8, 0x4345, 0x407f, 0x4691, 0x4245, 0x4200, 0x1c1d, 0x4130, 0xa717, 0x417e, 0x42eb, 0x3c1a, 0xa401, 0xbf24, 0x0fd2, 0x424e, 0xb26c, 0x4315, 0x4064, 0xb025, 0x4431, 0xb2d9, 0x0876, 0xb2df, 0x0bb1, 0xbf48, 0x259e, 0x3f2b, 0x38c9, 0x44fb, 0x4216, 0xb0ab, 0x4138, 0x4203, 0xbfab, 0xa3bb, 0xba73, 0x3abe, 0x4136, 0x4212, 0x129e, 0xbfb0, 0xbf67, 0xb2f7, 0xbafe, 0x4066, 0x4329, 0xb0dc, 0xb050, 0x42d8, 0xb05c, 0x421d, 0x43c2, 0x42c6, 0x2ed9, 0x4088, 0xbf7e, 0x43c3, 0xba22, 0x40b5, 0x18ed, 0x4064, 0xbfd1, 0xaf28, 0xb0d5, 0x03d5, 0xb2d3, 0x2eb3, 0x10a5, 0x4298, 0xba28, 0x1329, 0x3160, 0xb01f, 0xaea8, 0x41fa, 0xb24a, 0x44c4, 0x05f4, 0x1eaf, 0xba36, 0xbf60, 0x1f18, 0x2c2c, 0x408b, 0x3269, 0x436e, 0xb2c0, 0x1392, 0xbfa1, 0x4220, 0x41f7, 0xbacc, 0xbad9, 0x0d2a, 0xb0bb, 0x4175, 0xb20e, 0x4007, 0xb225, 0x4152, 0xbf62, 0xb0f3, 0x4127, 0x1e7d, 0x4615, 0x375f, 0x4545, 0x4064, 0x40ed, 0x4015, 0x4082, 0x404a, 0xb211, 0x4073, 0x41f6, 0x42ae, 0x409d, 0x4348, 0x068b, 0x1364, 0x42af, 0x45c6, 0x1fdc, 0x25a7, 0xb24c, 0xa940, 0x1cc5, 0x40d4, 0x4006, 0xbfca, 0x4352, 0xb288, 0x2129, 0x438b, 0xb2f9, 0xa900, 0x40a9, 0xbf03, 0x456d, 0x2efc, 0xbad4, 0x1f74, 0x4204, 0x421f, 0xba1f, 0x42a2, 0x404d, 0x2d74, 0x406b, 0x2fb9, 0x4334, 0xbfd6, 0x40c5, 0x4105, 0x42a6, 0xbf00, 0x4024, 0x406a, 0x43c7, 0x4456, 0xb26d, 0x4034, 0x4230, 0x0f59, 0x4065, 0x4037, 0x0ee0, 0xadf8, 0xbf7c, 0xb2e3, 0x43b7, 0x429c, 0x40e0, 0x4338, 0xba25, 0x424e, 0x005a, 0x400e, 0x407e, 0x43e8, 0xbf0d, 0x4270, 0x1dd0, 0x4021, 0x1eb2, 0x4381, 0xae1b, 0x4122, 0x0dc4, 0xba5e, 0xbf79, 0x46da, 0x1bb1, 0x1117, 0xb03a, 0xa9c5, 0xb0de, 0x1e18, 0x42c2, 0x4043, 0x42f9, 0x4151, 0x013b, 0xbf00, 0xbf76, 0xb2c1, 0x4263, 0x40fd, 0xb02f, 0x41e1, 0x4484, 0xbfd8, 0x27ae, 0xba27, 0x430f, 0x283f, 0x4331, 0xb254, 0x4183, 0x1f9f, 0x1a56, 0xb264, 0xbf70, 0x2af2, 0x4390, 0x032a, 0x4383, 0x31cd, 0x18b8, 0x32ac, 0x41de, 0x43b5, 0xb2a0, 0x434f, 0xbf68, 0x466f, 0x3cd0, 0x4398, 0xb2a7, 0x4225, 0xb204, 0x4445, 0x4446, 0xba17, 0x4102, 0x11e8, 0x1f7d, 0xbf29, 0x438c, 0xb242, 0xb23c, 0x4016, 0x41ee, 0xbf15, 0x0f9b, 0x2845, 0x431f, 0x4012, 0xa905, 0x43bd, 0x40a7, 0xb21c, 0xbfa0, 0xb218, 0x41fb, 0x21c7, 0x1e5c, 0x2eba, 0x26a0, 0xba1e, 0x42a2, 0xbf23, 0x1c9b, 0x3ddb, 0x1ade, 0x421e, 0xb2ae, 0xa855, 0xbacc, 0x4067, 0x4670, 0xb299, 0x4633, 0x4009, 0xbfe2, 0x4005, 0x37ee, 0xbfc0, 0x0bf7, 0x439b, 0x4099, 0x425a, 0x1ebc, 0x445b, 0x4373, 0xba1c, 0x41b7, 0xb2d8, 0xb2b6, 0xbf34, 0x4273, 0x4121, 0x435f, 0x4158, 0x4021, 0x4231, 0x0c75, 0x4369, 0x3a94, 0xb247, 0x43c7, 0x4556, 0x4186, 0xb22d, 0xb25c, 0x42f0, 0x31d2, 0xbf46, 0x4062, 0x2ee4, 0x0296, 0x41f3, 0x4173, 0x4295, 0xb2db, 0x1d70, 0xbf84, 0x29a9, 0x2a9d, 0x41a0, 0x400d, 0xbf80, 0xb2a8, 0x1d70, 0x430d, 0xb22b, 0x4299, 0x0a23, 0x402a, 0xb275, 0xbf8c, 0x4405, 0x41bc, 0x43dd, 0xbf80, 0xb258, 0x4231, 0x1842, 0xa26e, 0x1e27, 0xb2ad, 0xb064, 0x4057, 0x46a1, 0x43e5, 0x439b, 0x4011, 0x41ce, 0x194e, 0xba1f, 0xb004, 0xb26b, 0x43ff, 0xb253, 0x4287, 0x402a, 0x40b4, 0x3a6d, 0xbfd4, 0xba49, 0x4172, 0x4043, 0x1e30, 0xb24c, 0xbad8, 0x4061, 0x418f, 0x1940, 0x4180, 0xbf7d, 0x23b5, 0x42a2, 0x40f9, 0x1e06, 0xbf99, 0xba15, 0x4164, 0xbac4, 0xb246, 0xa06a, 0x1923, 0x4553, 0xba1e, 0xbfa0, 0xab04, 0x4290, 0x4298, 0x3dc9, 0x4031, 0x40f5, 0x43aa, 0x329f, 0x45ae, 0xb209, 0xb2cf, 0xbf9d, 0x4123, 0x400e, 0xbae6, 0xb0c4, 0x05a3, 0x4353, 0x4057, 0xb060, 0x424c, 0x4189, 0xb2ec, 0x401f, 0xb2be, 0x1e8c, 0x4656, 0xb05d, 0x0fb9, 0x4069, 0x42b0, 0xb21f, 0xb277, 0x43f0, 0x4071, 0x419c, 0x22b1, 0xb02f, 0xa8c1, 0xb2ae, 0xbf84, 0x2d2c, 0x1df6, 0x4617, 0xae87, 0xb20f, 0x06bb, 0x420e, 0x0ba4, 0x4440, 0x422d, 0x4207, 0xb0ac, 0x431e, 0x1829, 0xb23b, 0xb23a, 0x41ed, 0x4016, 0xb023, 0x19db, 0x4351, 0xb2b8, 0x4151, 0xbf73, 0x4607, 0xaa70, 0x465a, 0x4242, 0xba3e, 0xb27f, 0x43ce, 0x0c36, 0xa72f, 0xb29d, 0x415d, 0xbfb3, 0xb0a3, 0xb2da, 0x429d, 0xb2df, 0x408c, 0x445a, 0x43fc, 0x4022, 0x4262, 0x1782, 0x4424, 0x40ef, 0x39b4, 0x1cf4, 0xb22d, 0x41a7, 0xba1e, 0x40be, 0x40ac, 0x36a1, 0xbae3, 0xbfb1, 0xac8c, 0xb23c, 0x40ca, 0xb203, 0x1d66, 0x117b, 0xb2a0, 0xba12, 0x401b, 0xaafd, 0xbaed, 0x1f75, 0x1c02, 0x42b4, 0x1f7f, 0x1d3c, 0xbad4, 0xbf24, 0x020b, 0x4226, 0x425f, 0xb27e, 0x3ed4, 0xba40, 0x2724, 0x4006, 0x107b, 0x2d4b, 0x464d, 0xb215, 0x41b4, 0x4172, 0x42dd, 0xa957, 0xba2e, 0x3f84, 0x1fdb, 0x290d, 0x43e3, 0xbf99, 0xb231, 0x422c, 0x02c8, 0xbacb, 0x432c, 0x1b38, 0xa296, 0x424f, 0x4640, 0x4175, 0xbf5b, 0x436b, 0x428b, 0x40a1, 0x4629, 0x40cd, 0xbfa4, 0x097e, 0x42e0, 0x4566, 0x4063, 0x3ef3, 0x464e, 0xb25c, 0x04b0, 0x4272, 0x41b1, 0x422d, 0xb070, 0x4254, 0xb034, 0x40b5, 0xb2a4, 0x41f0, 0x3546, 0xbf36, 0x40be, 0xba51, 0x437e, 0xba32, 0xbf60, 0x04b2, 0x16eb, 0x4092, 0x444f, 0x4634, 0x405a, 0x420b, 0x4342, 0x46b0, 0x1e8d, 0x4206, 0xba4c, 0xba29, 0x45d9, 0x1cd4, 0xbf8f, 0x42e7, 0xb0c7, 0x047c, 0x1f41, 0x4132, 0x4125, 0x23aa, 0x26ae, 0x294f, 0xae1f, 0x408d, 0x1aaa, 0xb052, 0xb2d6, 0xb2bf, 0x437e, 0xaf3c, 0x42ab, 0x2fe4, 0xb0d7, 0xbfc0, 0x38cb, 0x428e, 0xb2c3, 0xb081, 0x429f, 0xb220, 0xbf03, 0x4018, 0x1e76, 0x4167, 0x14fc, 0x42a0, 0x4642, 0x4543, 0xba6d, 0x1e81, 0x42fa, 0xbaeb, 0xbae0, 0xbac6, 0x0364, 0x0be5, 0xb2f1, 0x456b, 0xb225, 0xb2ba, 0x426a, 0x4359, 0x40db, 0xbf05, 0x4255, 0x147a, 0x4072, 0x0e8c, 0x0c55, 0x4178, 0xb28d, 0x4272, 0xba3b, 0x38c8, 0x41af, 0x46b8, 0x4075, 0x435c, 0x1b06, 0xbaeb, 0x3f2b, 0x0271, 0x310e, 0x424e, 0x013d, 0x4038, 0x2416, 0x35e0, 0x428d, 0xb0b8, 0x424a, 0x4380, 0x43e2, 0xbf3e, 0x4115, 0xb079, 0x4134, 0x3588, 0x20b7, 0xaa55, 0x43d3, 0x1ff2, 0x1ce9, 0x420e, 0x1ba2, 0x4007, 0x4327, 0xb0f2, 0xb082, 0xbfd4, 0x4390, 0xb233, 0xb2b2, 0xaa54, 0xb2d9, 0x4142, 0x4065, 0x41a9, 0x43fc, 0x42c6, 0x0daa, 0xb29e, 0xa5ae, 0xb288, 0x4241, 0xb237, 0x4303, 0x189b, 0xbf1e, 0x0a78, 0xbace, 0x0a87, 0x4154, 0x31e7, 0xbf3b, 0xba28, 0x419c, 0xba17, 0x3f48, 0x3ef8, 0x42f1, 0x4104, 0x4605, 0x413c, 0x4558, 0xb22a, 0xb287, 0xba47, 0x33a1, 0x430d, 0x42aa, 0xbf32, 0xb270, 0x42b3, 0x4392, 0x0bbe, 0x43bf, 0x41fc, 0x19ee, 0x2639, 0x42ca, 0x4219, 0xb2ec, 0x4600, 0x436c, 0xb011, 0xbaea, 0xb218, 0x412a, 0x41d8, 0x2cb9, 0x41b7, 0x4001, 0x0d3f, 0x1bc5, 0xbf03, 0x42d0, 0x4091, 0x40bd, 0x1ecd, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xaf3cc1f1, 0x05fac305, 0x3db327e1, 0x36ea8c1c, 0x589f9f57, 0xa4ce47b1, 0x8ee4ab13, 0xd31f4de3, 0xa8944d30, 0xd6eab546, 0xbc8af831, 0x69b223cd, 0x24711ddc, 0x33c795e8, 0x00000000, 0x500001f0 }, - FinalRegs = new uint[] { 0x00059360, 0x00000060, 0x00000000, 0x00002c9b, 0x00003d09, 0x0000005d, 0x00000039, 0x00000fff, 0xa89457bc, 0xffffffdb, 0x69b23619, 0x69b23619, 0xcd056b3d, 0xa89454e4, 0x00000000, 0x200001d0 }, + Instructions = [0xb251, 0x317d, 0xb2ae, 0x2093, 0xb04a, 0xb0b8, 0x1e16, 0x405a, 0xbfb8, 0xb0cf, 0x4099, 0x431e, 0x41e5, 0xbf70, 0xb0e1, 0xa18f, 0x1f25, 0xba65, 0x1d38, 0x1119, 0xba41, 0xb23a, 0x03ae, 0x01a6, 0x1dfc, 0x1e5c, 0x4181, 0xba71, 0x401c, 0x3c40, 0x4154, 0x1895, 0xbfd0, 0xbf7c, 0x1af1, 0x429c, 0x1148, 0x41b5, 0x432d, 0x43f4, 0x461b, 0x41d6, 0x1ef7, 0x1d2d, 0x41c8, 0x3021, 0xb25c, 0x431b, 0xa59d, 0x4355, 0xbae7, 0xbff0, 0xb2fa, 0x39aa, 0x0c26, 0x4144, 0x0954, 0x419b, 0x03a0, 0xbfd1, 0x45e9, 0x439a, 0x4127, 0xb23d, 0x4132, 0x1ae1, 0x4671, 0x4613, 0x45e2, 0xbac3, 0x421c, 0x1379, 0x1ea9, 0x16a8, 0x406d, 0x3d2b, 0x4267, 0xb205, 0x4042, 0x4232, 0x45e4, 0xb2ba, 0x1a6c, 0xb2a8, 0xb0fe, 0x2dc3, 0xb0d7, 0xbf4a, 0x407c, 0x40f2, 0xb21b, 0x0c04, 0x2884, 0x1b10, 0x42fb, 0x41b3, 0x0235, 0x2120, 0xb062, 0x438b, 0x444c, 0x43d0, 0x41d9, 0x1dc3, 0xb02b, 0x1b8e, 0x4231, 0xba4a, 0x4372, 0x42d1, 0xb246, 0x1cfa, 0x2420, 0x41ec, 0x41a2, 0x43cf, 0xbf6c, 0x0d46, 0xba57, 0x4266, 0xaca4, 0xb220, 0x33fb, 0xb2da, 0x40ac, 0x4207, 0xb2ca, 0x40fa, 0xb2ce, 0x2f83, 0x426d, 0x1f13, 0x42f0, 0x1902, 0x4374, 0x1fff, 0xa5f3, 0x40e8, 0x42ed, 0x43c6, 0x40de, 0x4244, 0x0f5d, 0x40f3, 0xbfb6, 0x36a3, 0x418e, 0xb0f3, 0x46c5, 0xbac8, 0x1cc6, 0x1495, 0x4121, 0xb286, 0x43d1, 0x431b, 0xad3e, 0xb240, 0xbaed, 0xba30, 0x41af, 0x400c, 0xb216, 0x08b2, 0x4426, 0x4321, 0xb28e, 0x439c, 0xbfa4, 0x2883, 0xba2e, 0x094c, 0x4382, 0x4118, 0x19a5, 0x05b0, 0x4000, 0x4064, 0x19b5, 0x435f, 0xb2e0, 0x4399, 0x1ec1, 0xb09a, 0x28c9, 0x0895, 0xba6b, 0x41c7, 0x4481, 0x42f6, 0x1dc4, 0xbfb8, 0xb249, 0xba32, 0xa293, 0xba7e, 0x40c7, 0x4369, 0x4211, 0x4198, 0x4294, 0x4256, 0x1be2, 0x1f8a, 0xb20f, 0x40c6, 0x409c, 0xbfd4, 0x4197, 0x42ab, 0x4149, 0x4284, 0x4610, 0xb2fd, 0x41f9, 0xb260, 0x427d, 0x18bf, 0x45f4, 0xa24d, 0xba4e, 0xba66, 0xb2dd, 0xbaed, 0xbf25, 0x1a95, 0x1d6a, 0xb2c6, 0x4005, 0x0738, 0x1930, 0xba7b, 0xb289, 0x14bb, 0x13be, 0x4368, 0x4005, 0xba63, 0x18f7, 0x078c, 0x464a, 0xbf84, 0x0f5a, 0x1e55, 0x4262, 0x26de, 0x4132, 0x421e, 0xb04b, 0x0632, 0xb2a5, 0x43a4, 0xb03d, 0x18a6, 0x41f7, 0xb2dc, 0xb226, 0xbf34, 0x4427, 0x4019, 0x4448, 0xbaeb, 0x43de, 0x42d8, 0x4345, 0x407f, 0x4691, 0x4245, 0x4200, 0x1c1d, 0x4130, 0xa717, 0x417e, 0x42eb, 0x3c1a, 0xa401, 0xbf24, 0x0fd2, 0x424e, 0xb26c, 0x4315, 0x4064, 0xb025, 0x4431, 0xb2d9, 0x0876, 0xb2df, 0x0bb1, 0xbf48, 0x259e, 0x3f2b, 0x38c9, 0x44fb, 0x4216, 0xb0ab, 0x4138, 0x4203, 0xbfab, 0xa3bb, 0xba73, 0x3abe, 0x4136, 0x4212, 0x129e, 0xbfb0, 0xbf67, 0xb2f7, 0xbafe, 0x4066, 0x4329, 0xb0dc, 0xb050, 0x42d8, 0xb05c, 0x421d, 0x43c2, 0x42c6, 0x2ed9, 0x4088, 0xbf7e, 0x43c3, 0xba22, 0x40b5, 0x18ed, 0x4064, 0xbfd1, 0xaf28, 0xb0d5, 0x03d5, 0xb2d3, 0x2eb3, 0x10a5, 0x4298, 0xba28, 0x1329, 0x3160, 0xb01f, 0xaea8, 0x41fa, 0xb24a, 0x44c4, 0x05f4, 0x1eaf, 0xba36, 0xbf60, 0x1f18, 0x2c2c, 0x408b, 0x3269, 0x436e, 0xb2c0, 0x1392, 0xbfa1, 0x4220, 0x41f7, 0xbacc, 0xbad9, 0x0d2a, 0xb0bb, 0x4175, 0xb20e, 0x4007, 0xb225, 0x4152, 0xbf62, 0xb0f3, 0x4127, 0x1e7d, 0x4615, 0x375f, 0x4545, 0x4064, 0x40ed, 0x4015, 0x4082, 0x404a, 0xb211, 0x4073, 0x41f6, 0x42ae, 0x409d, 0x4348, 0x068b, 0x1364, 0x42af, 0x45c6, 0x1fdc, 0x25a7, 0xb24c, 0xa940, 0x1cc5, 0x40d4, 0x4006, 0xbfca, 0x4352, 0xb288, 0x2129, 0x438b, 0xb2f9, 0xa900, 0x40a9, 0xbf03, 0x456d, 0x2efc, 0xbad4, 0x1f74, 0x4204, 0x421f, 0xba1f, 0x42a2, 0x404d, 0x2d74, 0x406b, 0x2fb9, 0x4334, 0xbfd6, 0x40c5, 0x4105, 0x42a6, 0xbf00, 0x4024, 0x406a, 0x43c7, 0x4456, 0xb26d, 0x4034, 0x4230, 0x0f59, 0x4065, 0x4037, 0x0ee0, 0xadf8, 0xbf7c, 0xb2e3, 0x43b7, 0x429c, 0x40e0, 0x4338, 0xba25, 0x424e, 0x005a, 0x400e, 0x407e, 0x43e8, 0xbf0d, 0x4270, 0x1dd0, 0x4021, 0x1eb2, 0x4381, 0xae1b, 0x4122, 0x0dc4, 0xba5e, 0xbf79, 0x46da, 0x1bb1, 0x1117, 0xb03a, 0xa9c5, 0xb0de, 0x1e18, 0x42c2, 0x4043, 0x42f9, 0x4151, 0x013b, 0xbf00, 0xbf76, 0xb2c1, 0x4263, 0x40fd, 0xb02f, 0x41e1, 0x4484, 0xbfd8, 0x27ae, 0xba27, 0x430f, 0x283f, 0x4331, 0xb254, 0x4183, 0x1f9f, 0x1a56, 0xb264, 0xbf70, 0x2af2, 0x4390, 0x032a, 0x4383, 0x31cd, 0x18b8, 0x32ac, 0x41de, 0x43b5, 0xb2a0, 0x434f, 0xbf68, 0x466f, 0x3cd0, 0x4398, 0xb2a7, 0x4225, 0xb204, 0x4445, 0x4446, 0xba17, 0x4102, 0x11e8, 0x1f7d, 0xbf29, 0x438c, 0xb242, 0xb23c, 0x4016, 0x41ee, 0xbf15, 0x0f9b, 0x2845, 0x431f, 0x4012, 0xa905, 0x43bd, 0x40a7, 0xb21c, 0xbfa0, 0xb218, 0x41fb, 0x21c7, 0x1e5c, 0x2eba, 0x26a0, 0xba1e, 0x42a2, 0xbf23, 0x1c9b, 0x3ddb, 0x1ade, 0x421e, 0xb2ae, 0xa855, 0xbacc, 0x4067, 0x4670, 0xb299, 0x4633, 0x4009, 0xbfe2, 0x4005, 0x37ee, 0xbfc0, 0x0bf7, 0x439b, 0x4099, 0x425a, 0x1ebc, 0x445b, 0x4373, 0xba1c, 0x41b7, 0xb2d8, 0xb2b6, 0xbf34, 0x4273, 0x4121, 0x435f, 0x4158, 0x4021, 0x4231, 0x0c75, 0x4369, 0x3a94, 0xb247, 0x43c7, 0x4556, 0x4186, 0xb22d, 0xb25c, 0x42f0, 0x31d2, 0xbf46, 0x4062, 0x2ee4, 0x0296, 0x41f3, 0x4173, 0x4295, 0xb2db, 0x1d70, 0xbf84, 0x29a9, 0x2a9d, 0x41a0, 0x400d, 0xbf80, 0xb2a8, 0x1d70, 0x430d, 0xb22b, 0x4299, 0x0a23, 0x402a, 0xb275, 0xbf8c, 0x4405, 0x41bc, 0x43dd, 0xbf80, 0xb258, 0x4231, 0x1842, 0xa26e, 0x1e27, 0xb2ad, 0xb064, 0x4057, 0x46a1, 0x43e5, 0x439b, 0x4011, 0x41ce, 0x194e, 0xba1f, 0xb004, 0xb26b, 0x43ff, 0xb253, 0x4287, 0x402a, 0x40b4, 0x3a6d, 0xbfd4, 0xba49, 0x4172, 0x4043, 0x1e30, 0xb24c, 0xbad8, 0x4061, 0x418f, 0x1940, 0x4180, 0xbf7d, 0x23b5, 0x42a2, 0x40f9, 0x1e06, 0xbf99, 0xba15, 0x4164, 0xbac4, 0xb246, 0xa06a, 0x1923, 0x4553, 0xba1e, 0xbfa0, 0xab04, 0x4290, 0x4298, 0x3dc9, 0x4031, 0x40f5, 0x43aa, 0x329f, 0x45ae, 0xb209, 0xb2cf, 0xbf9d, 0x4123, 0x400e, 0xbae6, 0xb0c4, 0x05a3, 0x4353, 0x4057, 0xb060, 0x424c, 0x4189, 0xb2ec, 0x401f, 0xb2be, 0x1e8c, 0x4656, 0xb05d, 0x0fb9, 0x4069, 0x42b0, 0xb21f, 0xb277, 0x43f0, 0x4071, 0x419c, 0x22b1, 0xb02f, 0xa8c1, 0xb2ae, 0xbf84, 0x2d2c, 0x1df6, 0x4617, 0xae87, 0xb20f, 0x06bb, 0x420e, 0x0ba4, 0x4440, 0x422d, 0x4207, 0xb0ac, 0x431e, 0x1829, 0xb23b, 0xb23a, 0x41ed, 0x4016, 0xb023, 0x19db, 0x4351, 0xb2b8, 0x4151, 0xbf73, 0x4607, 0xaa70, 0x465a, 0x4242, 0xba3e, 0xb27f, 0x43ce, 0x0c36, 0xa72f, 0xb29d, 0x415d, 0xbfb3, 0xb0a3, 0xb2da, 0x429d, 0xb2df, 0x408c, 0x445a, 0x43fc, 0x4022, 0x4262, 0x1782, 0x4424, 0x40ef, 0x39b4, 0x1cf4, 0xb22d, 0x41a7, 0xba1e, 0x40be, 0x40ac, 0x36a1, 0xbae3, 0xbfb1, 0xac8c, 0xb23c, 0x40ca, 0xb203, 0x1d66, 0x117b, 0xb2a0, 0xba12, 0x401b, 0xaafd, 0xbaed, 0x1f75, 0x1c02, 0x42b4, 0x1f7f, 0x1d3c, 0xbad4, 0xbf24, 0x020b, 0x4226, 0x425f, 0xb27e, 0x3ed4, 0xba40, 0x2724, 0x4006, 0x107b, 0x2d4b, 0x464d, 0xb215, 0x41b4, 0x4172, 0x42dd, 0xa957, 0xba2e, 0x3f84, 0x1fdb, 0x290d, 0x43e3, 0xbf99, 0xb231, 0x422c, 0x02c8, 0xbacb, 0x432c, 0x1b38, 0xa296, 0x424f, 0x4640, 0x4175, 0xbf5b, 0x436b, 0x428b, 0x40a1, 0x4629, 0x40cd, 0xbfa4, 0x097e, 0x42e0, 0x4566, 0x4063, 0x3ef3, 0x464e, 0xb25c, 0x04b0, 0x4272, 0x41b1, 0x422d, 0xb070, 0x4254, 0xb034, 0x40b5, 0xb2a4, 0x41f0, 0x3546, 0xbf36, 0x40be, 0xba51, 0x437e, 0xba32, 0xbf60, 0x04b2, 0x16eb, 0x4092, 0x444f, 0x4634, 0x405a, 0x420b, 0x4342, 0x46b0, 0x1e8d, 0x4206, 0xba4c, 0xba29, 0x45d9, 0x1cd4, 0xbf8f, 0x42e7, 0xb0c7, 0x047c, 0x1f41, 0x4132, 0x4125, 0x23aa, 0x26ae, 0x294f, 0xae1f, 0x408d, 0x1aaa, 0xb052, 0xb2d6, 0xb2bf, 0x437e, 0xaf3c, 0x42ab, 0x2fe4, 0xb0d7, 0xbfc0, 0x38cb, 0x428e, 0xb2c3, 0xb081, 0x429f, 0xb220, 0xbf03, 0x4018, 0x1e76, 0x4167, 0x14fc, 0x42a0, 0x4642, 0x4543, 0xba6d, 0x1e81, 0x42fa, 0xbaeb, 0xbae0, 0xbac6, 0x0364, 0x0be5, 0xb2f1, 0x456b, 0xb225, 0xb2ba, 0x426a, 0x4359, 0x40db, 0xbf05, 0x4255, 0x147a, 0x4072, 0x0e8c, 0x0c55, 0x4178, 0xb28d, 0x4272, 0xba3b, 0x38c8, 0x41af, 0x46b8, 0x4075, 0x435c, 0x1b06, 0xbaeb, 0x3f2b, 0x0271, 0x310e, 0x424e, 0x013d, 0x4038, 0x2416, 0x35e0, 0x428d, 0xb0b8, 0x424a, 0x4380, 0x43e2, 0xbf3e, 0x4115, 0xb079, 0x4134, 0x3588, 0x20b7, 0xaa55, 0x43d3, 0x1ff2, 0x1ce9, 0x420e, 0x1ba2, 0x4007, 0x4327, 0xb0f2, 0xb082, 0xbfd4, 0x4390, 0xb233, 0xb2b2, 0xaa54, 0xb2d9, 0x4142, 0x4065, 0x41a9, 0x43fc, 0x42c6, 0x0daa, 0xb29e, 0xa5ae, 0xb288, 0x4241, 0xb237, 0x4303, 0x189b, 0xbf1e, 0x0a78, 0xbace, 0x0a87, 0x4154, 0x31e7, 0xbf3b, 0xba28, 0x419c, 0xba17, 0x3f48, 0x3ef8, 0x42f1, 0x4104, 0x4605, 0x413c, 0x4558, 0xb22a, 0xb287, 0xba47, 0x33a1, 0x430d, 0x42aa, 0xbf32, 0xb270, 0x42b3, 0x4392, 0x0bbe, 0x43bf, 0x41fc, 0x19ee, 0x2639, 0x42ca, 0x4219, 0xb2ec, 0x4600, 0x436c, 0xb011, 0xbaea, 0xb218, 0x412a, 0x41d8, 0x2cb9, 0x41b7, 0x4001, 0x0d3f, 0x1bc5, 0xbf03, 0x42d0, 0x4091, 0x40bd, 0x1ecd, 0x4770, 0xe7fe + ], + StartRegs = [0xaf3cc1f1, 0x05fac305, 0x3db327e1, 0x36ea8c1c, 0x589f9f57, 0xa4ce47b1, 0x8ee4ab13, 0xd31f4de3, 0xa8944d30, 0xd6eab546, 0xbc8af831, 0x69b223cd, 0x24711ddc, 0x33c795e8, 0x00000000, 0x500001f0 + ], + FinalRegs = [0x00059360, 0x00000060, 0x00000000, 0x00002c9b, 0x00003d09, 0x0000005d, 0x00000039, 0x00000fff, 0xa89457bc, 0xffffffdb, 0x69b23619, 0x69b23619, 0xcd056b3d, 0xa89454e4, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x2427, 0x3f90, 0x2091, 0x2633, 0x40e5, 0x429e, 0xb272, 0x4572, 0xbacb, 0x358e, 0xb054, 0x426b, 0xb2ad, 0x17b5, 0xbae7, 0x403b, 0xb2af, 0x199f, 0xa0e1, 0x148a, 0xb068, 0x40ac, 0x1c34, 0x41cd, 0x4387, 0xbfa8, 0x42c7, 0xa9ac, 0x2d10, 0xbae3, 0x419c, 0xba60, 0x004e, 0xb0c7, 0x18c0, 0x42fd, 0x4021, 0x4592, 0x4365, 0x4591, 0xba50, 0x4440, 0xa24c, 0x438b, 0x1aea, 0x404f, 0x4171, 0xbf8f, 0x27e3, 0x4170, 0xb024, 0x4156, 0xb2c5, 0x4361, 0x2b01, 0x42af, 0x43a7, 0x1c67, 0xb088, 0xaf29, 0xba76, 0x45a6, 0x1daf, 0x06d5, 0x40b0, 0x40d8, 0xba5c, 0x1cb8, 0x185a, 0xa518, 0x43ce, 0xbf76, 0x4378, 0x4216, 0x43cc, 0x3321, 0x40af, 0xbae8, 0x41a2, 0x40ac, 0x4602, 0xbf00, 0x1919, 0x40d8, 0x1df2, 0x1eac, 0xbf07, 0x18df, 0x41ea, 0xba54, 0x4211, 0x2835, 0xb230, 0x2c47, 0xb2aa, 0x4118, 0x4013, 0x4327, 0x3e32, 0xbfd0, 0x4351, 0x41ba, 0x40c9, 0x4174, 0x181a, 0x423a, 0xb2ad, 0x424d, 0x4296, 0x4232, 0xbaf5, 0xba6d, 0xb0ef, 0xbf48, 0xbafe, 0x428b, 0xba5f, 0x3c65, 0xba32, 0x0379, 0x3701, 0x40bb, 0xbae9, 0x4164, 0x42f8, 0x435a, 0x042a, 0xb2d2, 0x4159, 0x425d, 0x46cb, 0x1db3, 0x4463, 0x4299, 0xbf0c, 0x37c3, 0x0331, 0x19be, 0x406b, 0x41ad, 0xb22c, 0x43bc, 0x4195, 0x4351, 0x4227, 0xb097, 0x42b8, 0xb2a9, 0x408e, 0xb0c5, 0x411b, 0xbfcd, 0xb200, 0x4113, 0x40d2, 0x35f4, 0x1bb3, 0xbf97, 0x1d53, 0x41ad, 0x1c7d, 0xb283, 0x43c9, 0x419b, 0x4263, 0xb0a4, 0x1f68, 0xa4bb, 0x4005, 0xbac2, 0x3f7c, 0x2f53, 0x4192, 0xb05d, 0x03fb, 0x4619, 0xba2e, 0xb2ad, 0xb038, 0x0315, 0xbf1c, 0x43ba, 0xb0da, 0xbfb0, 0x1836, 0xb08d, 0xb066, 0xb0a2, 0x4132, 0x1883, 0x4688, 0xac7b, 0x35bc, 0x4016, 0x40b4, 0x40fe, 0x09dd, 0xb2b4, 0x41b9, 0x4331, 0x46d8, 0xbfd4, 0x1b67, 0x427f, 0x0d12, 0x4141, 0x3ca3, 0x1bf4, 0x406f, 0xbf04, 0x425f, 0xa73c, 0x1fd5, 0x441b, 0xb04a, 0x0fa5, 0xbf23, 0x4407, 0xbfb0, 0x24d0, 0xb073, 0x4283, 0xbf16, 0x061a, 0x41d7, 0x2266, 0x41ef, 0xb2ef, 0x4324, 0x40ba, 0x0c29, 0xb08c, 0x4160, 0x43e0, 0x439a, 0x3f33, 0xb03e, 0xb264, 0x4275, 0x45f2, 0x070e, 0x41b4, 0x43d4, 0x4127, 0x2d76, 0x0c90, 0x4207, 0xbf97, 0x4250, 0x4221, 0x4017, 0xbac8, 0xaf4c, 0xbac6, 0x1d9f, 0x4148, 0xa3e9, 0xa244, 0x4013, 0x1ffe, 0xbf6a, 0x4031, 0x41d6, 0xaa58, 0x40cc, 0x328a, 0x437e, 0xb06f, 0xbaeb, 0xbf15, 0x4106, 0x06a9, 0x41fd, 0x0967, 0x3300, 0x22da, 0x41c8, 0x45d4, 0x4030, 0xba6e, 0xb042, 0x1fc5, 0xba63, 0xa4e4, 0x2c03, 0xbfa0, 0x3858, 0xb2c5, 0xb0d9, 0x4067, 0x42c8, 0x4225, 0x0778, 0xbf07, 0x42a6, 0xb273, 0x4048, 0x42a1, 0x1125, 0x41ea, 0x051b, 0x19e4, 0x42c7, 0x09cd, 0x1a48, 0x0be5, 0xb271, 0xbf9e, 0x4167, 0x4471, 0xb2ed, 0x4058, 0x423d, 0x219d, 0x43bc, 0x1bbb, 0x22c4, 0x1e06, 0x4153, 0xb267, 0x2bde, 0x1d6b, 0x40db, 0x41cf, 0x437e, 0xba1a, 0x166c, 0xb068, 0xb23a, 0xbf77, 0xb238, 0x1fde, 0x4335, 0x4640, 0x409e, 0x42b4, 0x434f, 0xbad5, 0x2036, 0x4314, 0xb2e2, 0xb2fa, 0xb020, 0x41f7, 0xba26, 0xb002, 0x1200, 0x4326, 0x32db, 0x156e, 0xb2e7, 0x424f, 0x4079, 0xbfab, 0x3d18, 0x447a, 0x10c9, 0x454b, 0xa020, 0xbf70, 0xbfa9, 0x4336, 0x3cc4, 0x2dc9, 0x423d, 0x46ab, 0x4150, 0x1847, 0x40ec, 0x0a6d, 0xbf19, 0x36e4, 0x436a, 0x436c, 0x1efc, 0x4200, 0xbfc5, 0xa281, 0xbac7, 0xb0e5, 0x41bf, 0x4119, 0x13e8, 0x4142, 0x43e0, 0x40bd, 0x0769, 0x41d6, 0xa91c, 0xb2db, 0x4078, 0x41e3, 0x40e5, 0x1b36, 0xb247, 0x42cb, 0xbf75, 0x4175, 0x4258, 0x4276, 0x4572, 0x4237, 0x1eac, 0xb2ca, 0x4171, 0x40b8, 0x42d1, 0x4293, 0x41bd, 0xbfe0, 0x34d8, 0x4024, 0x4128, 0xa7bb, 0x43c5, 0x4342, 0x42a0, 0x0306, 0x42cb, 0x4082, 0xbf70, 0x0fa2, 0x43ef, 0x45d6, 0x4300, 0xbf94, 0x077c, 0xbaf3, 0xa980, 0x33d4, 0x3b98, 0x18ab, 0x435f, 0x4310, 0xb0a1, 0x40e1, 0x149a, 0xaab9, 0x422a, 0xb2df, 0xbf80, 0x4592, 0x086f, 0x337d, 0x1dd5, 0x09b8, 0x197f, 0x45a0, 0x422d, 0xb084, 0xbf19, 0xbaf5, 0x04e9, 0xba29, 0x194a, 0x1a57, 0x32bd, 0xa80e, 0xb2c8, 0x3542, 0x2086, 0x422c, 0xba36, 0x46ab, 0x14bc, 0x20b4, 0x402f, 0x40ff, 0x46e1, 0x40a0, 0x43fc, 0x41ce, 0xbf4f, 0xb26f, 0x415b, 0x1523, 0x061f, 0xb090, 0x06ec, 0xb2eb, 0xb292, 0x426f, 0x42db, 0x167a, 0x43a3, 0x424f, 0xb247, 0x1b40, 0x1e25, 0x4087, 0xbad4, 0x431f, 0x435d, 0x006f, 0xbfb1, 0x40b3, 0x39d4, 0x4291, 0x165f, 0x42b8, 0x4200, 0x42aa, 0x43f5, 0x154e, 0xa5de, 0xba50, 0x3da7, 0x0d4e, 0xa9bf, 0xba1c, 0x402b, 0x418c, 0x4360, 0xb056, 0x3ef6, 0xbfcd, 0x4038, 0x1a87, 0x2473, 0x4317, 0x4285, 0x40c7, 0x40f6, 0xbf8b, 0x4077, 0x431a, 0x05ad, 0xba42, 0x4040, 0x16d8, 0x1913, 0xb265, 0x4436, 0x4102, 0x40fd, 0xa3f4, 0xba27, 0x4109, 0x40b2, 0xb035, 0x437e, 0xbf84, 0xba37, 0x189e, 0x0bee, 0xba76, 0xb2d0, 0xb204, 0xa150, 0x41a7, 0x41bb, 0xb295, 0x33f3, 0xbf80, 0x2f8a, 0x459b, 0xabe4, 0x11a0, 0x426b, 0xba78, 0xb272, 0x3718, 0x43c8, 0xbfb7, 0xb224, 0x1ec8, 0x06d7, 0x4327, 0x273c, 0xb2fe, 0x4294, 0x179f, 0x42a5, 0x4131, 0x43f0, 0xb25d, 0x4298, 0x42b2, 0x40b1, 0xbff0, 0x0bbe, 0xbf22, 0x2944, 0x4147, 0x0969, 0x433c, 0x1b91, 0x419b, 0xa0b4, 0x429a, 0xaa98, 0xa7ae, 0xbfad, 0x430e, 0xb2b8, 0x40dc, 0x403f, 0x19b8, 0x41f4, 0x1da0, 0x406c, 0x40aa, 0x1e72, 0xbfc0, 0x41e6, 0x43a2, 0x40d6, 0x1a1a, 0x191d, 0x1b1b, 0x2f8f, 0xb0d0, 0x1ce2, 0x4375, 0xb04b, 0xba0c, 0x4146, 0x4305, 0x40b4, 0xbf1b, 0x42d1, 0xb2ae, 0x4347, 0xb22e, 0x42ad, 0x41df, 0x1d6d, 0xb2b8, 0x409b, 0x38ce, 0xba78, 0x2add, 0x4377, 0x3fea, 0x42d5, 0xb2a0, 0xac6f, 0x3f00, 0x42e0, 0x42e4, 0x121d, 0x411a, 0xba59, 0x43b2, 0xb069, 0x4310, 0xb297, 0xbf88, 0x41ac, 0xb033, 0x1884, 0xb030, 0x42fa, 0x2a9b, 0x419a, 0xb270, 0x014f, 0x4100, 0x414a, 0x42b2, 0xb264, 0x43a7, 0x2e7d, 0x417d, 0x30eb, 0x4367, 0x429d, 0x3747, 0x3eda, 0x3129, 0xbfb4, 0x1f57, 0x0b56, 0x4039, 0xb26f, 0x462f, 0xb26f, 0x4181, 0x445f, 0x46c3, 0xb033, 0xbfb0, 0xb201, 0x422b, 0x4017, 0x431d, 0x4274, 0x40b4, 0x4481, 0x44a2, 0xaeb3, 0x42ad, 0x41ec, 0x40f8, 0xb2a7, 0x294e, 0xbf64, 0x41b6, 0xbac6, 0x423e, 0xb0b6, 0xba73, 0x45cc, 0x1d55, 0xb2f8, 0x3cee, 0x187b, 0x0e9e, 0x41b7, 0x42ce, 0xa773, 0xb2d4, 0x18dc, 0x207b, 0x4050, 0x4198, 0x3ee7, 0x40ea, 0xb243, 0x18a8, 0xbfe2, 0xba17, 0xbf00, 0x2883, 0xb06f, 0x40ce, 0x42fc, 0xba28, 0x4201, 0x1c4e, 0xbf80, 0xbf19, 0xae7d, 0x406a, 0x0bf7, 0xb0a2, 0xbf70, 0x4683, 0x4319, 0xbad2, 0xa731, 0x43ae, 0xba75, 0x426d, 0x2679, 0x2eeb, 0x149d, 0x45c5, 0x2848, 0xb229, 0xada6, 0x3a2c, 0x4002, 0x4098, 0xbf58, 0x4004, 0x43dc, 0x4585, 0x28bf, 0x4291, 0x4025, 0xba3d, 0xb242, 0x310b, 0xba76, 0xb2da, 0x4275, 0x41a4, 0x44b2, 0xb283, 0xb251, 0x3af7, 0x4188, 0x424d, 0xbf47, 0x38f5, 0x4602, 0x402d, 0x15f2, 0xb0e8, 0x4364, 0x2c36, 0x14be, 0x40a0, 0xbf4b, 0x40c8, 0x4150, 0x3428, 0x3375, 0xa475, 0x43c8, 0x4129, 0xbf00, 0x40de, 0x415d, 0x4235, 0x43fb, 0xb0f8, 0x4120, 0xbad0, 0x43b6, 0x4220, 0xb0d3, 0xba72, 0x0b42, 0xbf00, 0x421d, 0xb2d2, 0x0ccc, 0xb2ee, 0x2fb3, 0xaa42, 0xb0b1, 0xbf54, 0x4182, 0x40ce, 0x1fc6, 0xb291, 0x133c, 0x40ac, 0x405f, 0xbfca, 0xac9d, 0x4024, 0x0355, 0x43d6, 0x46b4, 0xb254, 0x1e21, 0x1824, 0x41f8, 0xbf56, 0xb0f4, 0x4396, 0x3777, 0xb01f, 0x42a3, 0xb2c6, 0x41ef, 0x0db1, 0xb0fb, 0xba3f, 0xa7bf, 0x4217, 0x0bf8, 0x4327, 0x4368, 0xbfc0, 0x42e1, 0xb0fe, 0xba62, 0x427f, 0xbf80, 0x3777, 0xb2f7, 0xbf16, 0x42a0, 0xaa78, 0x42d0, 0x41d5, 0xa44e, 0xbadd, 0xb0be, 0xb2e0, 0xba54, 0x4121, 0xbfd0, 0x2647, 0x4574, 0xba1c, 0x20a2, 0x1ae6, 0x2e30, 0x43e5, 0xb27d, 0xb0ee, 0x4053, 0xb2b6, 0x1c72, 0xbf70, 0x1562, 0xbfa9, 0x1f12, 0x4198, 0x4297, 0xb09b, 0x440e, 0x1eb9, 0x2ec0, 0xbfa4, 0x1c9d, 0xba34, 0x428e, 0x22cb, 0x4313, 0xb29f, 0x418d, 0xb27b, 0x4664, 0x1daa, 0xba05, 0xb230, 0xbf07, 0x314a, 0x42c9, 0x03a2, 0x4198, 0x1c5f, 0xb0aa, 0xb078, 0x404d, 0xb2b7, 0x4204, 0x4378, 0xbf09, 0xbfe0, 0x4307, 0x41fa, 0xba3f, 0xba74, 0xb042, 0x0f95, 0xb251, 0x44d8, 0x0fa5, 0x42a6, 0x0927, 0x1e0f, 0xbfd9, 0xb0ac, 0xa99d, 0x3a4b, 0x3435, 0x4154, 0x4046, 0xb231, 0xb201, 0x19c1, 0x418b, 0x0d1a, 0x4000, 0xb032, 0xbfc1, 0xb257, 0x2c04, 0xb029, 0xba42, 0x42ab, 0x2783, 0x1c91, 0x2f6d, 0x40cb, 0x1ac3, 0x4093, 0x45da, 0x434d, 0x4429, 0xbf55, 0x419c, 0x41c1, 0x43f2, 0x3a64, 0x4041, 0x183f, 0x4103, 0x4057, 0x41ec, 0x4268, 0x20b0, 0xb294, 0xba16, 0xb238, 0xbf0a, 0x4622, 0x432e, 0x3ed4, 0x46a2, 0xb239, 0xb2ca, 0xb2bb, 0xbfa3, 0x41fb, 0x400b, 0x42f9, 0x4296, 0xb215, 0x11b5, 0xb292, 0xbfcb, 0xab70, 0x4088, 0x18fc, 0x40fa, 0x31cf, 0x44c0, 0x1a3e, 0x20a8, 0x36f0, 0x421a, 0x4547, 0x4101, 0xb259, 0x4094, 0xa222, 0x1d0f, 0xbfc0, 0x0582, 0xb080, 0xb214, 0x4605, 0x407d, 0x1a4a, 0x400d, 0x4168, 0xb091, 0x1ef9, 0x424b, 0xba65, 0xbfc3, 0x4033, 0x4258, 0xb043, 0x4095, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x9f18068a, 0x03643f9c, 0x4d4c0930, 0xb5ba15e8, 0xff9da78d, 0x8731d796, 0x094b9e5e, 0x291d98f7, 0x1392fdc3, 0x4fe11ddf, 0x2f0cc7b5, 0x2d5bda6f, 0x2d85b32d, 0x081e2031, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0xffffffa0, 0xffffff96, 0x00000000, 0x00000060, 0x00000000, 0x00000000, 0x000000f0, 0xffffff99, 0x2fc23bbc, 0x2d85b418, 0x0000d42f, 0xc7ffffff, 0xf7e1d472, 0x081e259d, 0x00000000, 0x000001d0 }, + Instructions = [0x2427, 0x3f90, 0x2091, 0x2633, 0x40e5, 0x429e, 0xb272, 0x4572, 0xbacb, 0x358e, 0xb054, 0x426b, 0xb2ad, 0x17b5, 0xbae7, 0x403b, 0xb2af, 0x199f, 0xa0e1, 0x148a, 0xb068, 0x40ac, 0x1c34, 0x41cd, 0x4387, 0xbfa8, 0x42c7, 0xa9ac, 0x2d10, 0xbae3, 0x419c, 0xba60, 0x004e, 0xb0c7, 0x18c0, 0x42fd, 0x4021, 0x4592, 0x4365, 0x4591, 0xba50, 0x4440, 0xa24c, 0x438b, 0x1aea, 0x404f, 0x4171, 0xbf8f, 0x27e3, 0x4170, 0xb024, 0x4156, 0xb2c5, 0x4361, 0x2b01, 0x42af, 0x43a7, 0x1c67, 0xb088, 0xaf29, 0xba76, 0x45a6, 0x1daf, 0x06d5, 0x40b0, 0x40d8, 0xba5c, 0x1cb8, 0x185a, 0xa518, 0x43ce, 0xbf76, 0x4378, 0x4216, 0x43cc, 0x3321, 0x40af, 0xbae8, 0x41a2, 0x40ac, 0x4602, 0xbf00, 0x1919, 0x40d8, 0x1df2, 0x1eac, 0xbf07, 0x18df, 0x41ea, 0xba54, 0x4211, 0x2835, 0xb230, 0x2c47, 0xb2aa, 0x4118, 0x4013, 0x4327, 0x3e32, 0xbfd0, 0x4351, 0x41ba, 0x40c9, 0x4174, 0x181a, 0x423a, 0xb2ad, 0x424d, 0x4296, 0x4232, 0xbaf5, 0xba6d, 0xb0ef, 0xbf48, 0xbafe, 0x428b, 0xba5f, 0x3c65, 0xba32, 0x0379, 0x3701, 0x40bb, 0xbae9, 0x4164, 0x42f8, 0x435a, 0x042a, 0xb2d2, 0x4159, 0x425d, 0x46cb, 0x1db3, 0x4463, 0x4299, 0xbf0c, 0x37c3, 0x0331, 0x19be, 0x406b, 0x41ad, 0xb22c, 0x43bc, 0x4195, 0x4351, 0x4227, 0xb097, 0x42b8, 0xb2a9, 0x408e, 0xb0c5, 0x411b, 0xbfcd, 0xb200, 0x4113, 0x40d2, 0x35f4, 0x1bb3, 0xbf97, 0x1d53, 0x41ad, 0x1c7d, 0xb283, 0x43c9, 0x419b, 0x4263, 0xb0a4, 0x1f68, 0xa4bb, 0x4005, 0xbac2, 0x3f7c, 0x2f53, 0x4192, 0xb05d, 0x03fb, 0x4619, 0xba2e, 0xb2ad, 0xb038, 0x0315, 0xbf1c, 0x43ba, 0xb0da, 0xbfb0, 0x1836, 0xb08d, 0xb066, 0xb0a2, 0x4132, 0x1883, 0x4688, 0xac7b, 0x35bc, 0x4016, 0x40b4, 0x40fe, 0x09dd, 0xb2b4, 0x41b9, 0x4331, 0x46d8, 0xbfd4, 0x1b67, 0x427f, 0x0d12, 0x4141, 0x3ca3, 0x1bf4, 0x406f, 0xbf04, 0x425f, 0xa73c, 0x1fd5, 0x441b, 0xb04a, 0x0fa5, 0xbf23, 0x4407, 0xbfb0, 0x24d0, 0xb073, 0x4283, 0xbf16, 0x061a, 0x41d7, 0x2266, 0x41ef, 0xb2ef, 0x4324, 0x40ba, 0x0c29, 0xb08c, 0x4160, 0x43e0, 0x439a, 0x3f33, 0xb03e, 0xb264, 0x4275, 0x45f2, 0x070e, 0x41b4, 0x43d4, 0x4127, 0x2d76, 0x0c90, 0x4207, 0xbf97, 0x4250, 0x4221, 0x4017, 0xbac8, 0xaf4c, 0xbac6, 0x1d9f, 0x4148, 0xa3e9, 0xa244, 0x4013, 0x1ffe, 0xbf6a, 0x4031, 0x41d6, 0xaa58, 0x40cc, 0x328a, 0x437e, 0xb06f, 0xbaeb, 0xbf15, 0x4106, 0x06a9, 0x41fd, 0x0967, 0x3300, 0x22da, 0x41c8, 0x45d4, 0x4030, 0xba6e, 0xb042, 0x1fc5, 0xba63, 0xa4e4, 0x2c03, 0xbfa0, 0x3858, 0xb2c5, 0xb0d9, 0x4067, 0x42c8, 0x4225, 0x0778, 0xbf07, 0x42a6, 0xb273, 0x4048, 0x42a1, 0x1125, 0x41ea, 0x051b, 0x19e4, 0x42c7, 0x09cd, 0x1a48, 0x0be5, 0xb271, 0xbf9e, 0x4167, 0x4471, 0xb2ed, 0x4058, 0x423d, 0x219d, 0x43bc, 0x1bbb, 0x22c4, 0x1e06, 0x4153, 0xb267, 0x2bde, 0x1d6b, 0x40db, 0x41cf, 0x437e, 0xba1a, 0x166c, 0xb068, 0xb23a, 0xbf77, 0xb238, 0x1fde, 0x4335, 0x4640, 0x409e, 0x42b4, 0x434f, 0xbad5, 0x2036, 0x4314, 0xb2e2, 0xb2fa, 0xb020, 0x41f7, 0xba26, 0xb002, 0x1200, 0x4326, 0x32db, 0x156e, 0xb2e7, 0x424f, 0x4079, 0xbfab, 0x3d18, 0x447a, 0x10c9, 0x454b, 0xa020, 0xbf70, 0xbfa9, 0x4336, 0x3cc4, 0x2dc9, 0x423d, 0x46ab, 0x4150, 0x1847, 0x40ec, 0x0a6d, 0xbf19, 0x36e4, 0x436a, 0x436c, 0x1efc, 0x4200, 0xbfc5, 0xa281, 0xbac7, 0xb0e5, 0x41bf, 0x4119, 0x13e8, 0x4142, 0x43e0, 0x40bd, 0x0769, 0x41d6, 0xa91c, 0xb2db, 0x4078, 0x41e3, 0x40e5, 0x1b36, 0xb247, 0x42cb, 0xbf75, 0x4175, 0x4258, 0x4276, 0x4572, 0x4237, 0x1eac, 0xb2ca, 0x4171, 0x40b8, 0x42d1, 0x4293, 0x41bd, 0xbfe0, 0x34d8, 0x4024, 0x4128, 0xa7bb, 0x43c5, 0x4342, 0x42a0, 0x0306, 0x42cb, 0x4082, 0xbf70, 0x0fa2, 0x43ef, 0x45d6, 0x4300, 0xbf94, 0x077c, 0xbaf3, 0xa980, 0x33d4, 0x3b98, 0x18ab, 0x435f, 0x4310, 0xb0a1, 0x40e1, 0x149a, 0xaab9, 0x422a, 0xb2df, 0xbf80, 0x4592, 0x086f, 0x337d, 0x1dd5, 0x09b8, 0x197f, 0x45a0, 0x422d, 0xb084, 0xbf19, 0xbaf5, 0x04e9, 0xba29, 0x194a, 0x1a57, 0x32bd, 0xa80e, 0xb2c8, 0x3542, 0x2086, 0x422c, 0xba36, 0x46ab, 0x14bc, 0x20b4, 0x402f, 0x40ff, 0x46e1, 0x40a0, 0x43fc, 0x41ce, 0xbf4f, 0xb26f, 0x415b, 0x1523, 0x061f, 0xb090, 0x06ec, 0xb2eb, 0xb292, 0x426f, 0x42db, 0x167a, 0x43a3, 0x424f, 0xb247, 0x1b40, 0x1e25, 0x4087, 0xbad4, 0x431f, 0x435d, 0x006f, 0xbfb1, 0x40b3, 0x39d4, 0x4291, 0x165f, 0x42b8, 0x4200, 0x42aa, 0x43f5, 0x154e, 0xa5de, 0xba50, 0x3da7, 0x0d4e, 0xa9bf, 0xba1c, 0x402b, 0x418c, 0x4360, 0xb056, 0x3ef6, 0xbfcd, 0x4038, 0x1a87, 0x2473, 0x4317, 0x4285, 0x40c7, 0x40f6, 0xbf8b, 0x4077, 0x431a, 0x05ad, 0xba42, 0x4040, 0x16d8, 0x1913, 0xb265, 0x4436, 0x4102, 0x40fd, 0xa3f4, 0xba27, 0x4109, 0x40b2, 0xb035, 0x437e, 0xbf84, 0xba37, 0x189e, 0x0bee, 0xba76, 0xb2d0, 0xb204, 0xa150, 0x41a7, 0x41bb, 0xb295, 0x33f3, 0xbf80, 0x2f8a, 0x459b, 0xabe4, 0x11a0, 0x426b, 0xba78, 0xb272, 0x3718, 0x43c8, 0xbfb7, 0xb224, 0x1ec8, 0x06d7, 0x4327, 0x273c, 0xb2fe, 0x4294, 0x179f, 0x42a5, 0x4131, 0x43f0, 0xb25d, 0x4298, 0x42b2, 0x40b1, 0xbff0, 0x0bbe, 0xbf22, 0x2944, 0x4147, 0x0969, 0x433c, 0x1b91, 0x419b, 0xa0b4, 0x429a, 0xaa98, 0xa7ae, 0xbfad, 0x430e, 0xb2b8, 0x40dc, 0x403f, 0x19b8, 0x41f4, 0x1da0, 0x406c, 0x40aa, 0x1e72, 0xbfc0, 0x41e6, 0x43a2, 0x40d6, 0x1a1a, 0x191d, 0x1b1b, 0x2f8f, 0xb0d0, 0x1ce2, 0x4375, 0xb04b, 0xba0c, 0x4146, 0x4305, 0x40b4, 0xbf1b, 0x42d1, 0xb2ae, 0x4347, 0xb22e, 0x42ad, 0x41df, 0x1d6d, 0xb2b8, 0x409b, 0x38ce, 0xba78, 0x2add, 0x4377, 0x3fea, 0x42d5, 0xb2a0, 0xac6f, 0x3f00, 0x42e0, 0x42e4, 0x121d, 0x411a, 0xba59, 0x43b2, 0xb069, 0x4310, 0xb297, 0xbf88, 0x41ac, 0xb033, 0x1884, 0xb030, 0x42fa, 0x2a9b, 0x419a, 0xb270, 0x014f, 0x4100, 0x414a, 0x42b2, 0xb264, 0x43a7, 0x2e7d, 0x417d, 0x30eb, 0x4367, 0x429d, 0x3747, 0x3eda, 0x3129, 0xbfb4, 0x1f57, 0x0b56, 0x4039, 0xb26f, 0x462f, 0xb26f, 0x4181, 0x445f, 0x46c3, 0xb033, 0xbfb0, 0xb201, 0x422b, 0x4017, 0x431d, 0x4274, 0x40b4, 0x4481, 0x44a2, 0xaeb3, 0x42ad, 0x41ec, 0x40f8, 0xb2a7, 0x294e, 0xbf64, 0x41b6, 0xbac6, 0x423e, 0xb0b6, 0xba73, 0x45cc, 0x1d55, 0xb2f8, 0x3cee, 0x187b, 0x0e9e, 0x41b7, 0x42ce, 0xa773, 0xb2d4, 0x18dc, 0x207b, 0x4050, 0x4198, 0x3ee7, 0x40ea, 0xb243, 0x18a8, 0xbfe2, 0xba17, 0xbf00, 0x2883, 0xb06f, 0x40ce, 0x42fc, 0xba28, 0x4201, 0x1c4e, 0xbf80, 0xbf19, 0xae7d, 0x406a, 0x0bf7, 0xb0a2, 0xbf70, 0x4683, 0x4319, 0xbad2, 0xa731, 0x43ae, 0xba75, 0x426d, 0x2679, 0x2eeb, 0x149d, 0x45c5, 0x2848, 0xb229, 0xada6, 0x3a2c, 0x4002, 0x4098, 0xbf58, 0x4004, 0x43dc, 0x4585, 0x28bf, 0x4291, 0x4025, 0xba3d, 0xb242, 0x310b, 0xba76, 0xb2da, 0x4275, 0x41a4, 0x44b2, 0xb283, 0xb251, 0x3af7, 0x4188, 0x424d, 0xbf47, 0x38f5, 0x4602, 0x402d, 0x15f2, 0xb0e8, 0x4364, 0x2c36, 0x14be, 0x40a0, 0xbf4b, 0x40c8, 0x4150, 0x3428, 0x3375, 0xa475, 0x43c8, 0x4129, 0xbf00, 0x40de, 0x415d, 0x4235, 0x43fb, 0xb0f8, 0x4120, 0xbad0, 0x43b6, 0x4220, 0xb0d3, 0xba72, 0x0b42, 0xbf00, 0x421d, 0xb2d2, 0x0ccc, 0xb2ee, 0x2fb3, 0xaa42, 0xb0b1, 0xbf54, 0x4182, 0x40ce, 0x1fc6, 0xb291, 0x133c, 0x40ac, 0x405f, 0xbfca, 0xac9d, 0x4024, 0x0355, 0x43d6, 0x46b4, 0xb254, 0x1e21, 0x1824, 0x41f8, 0xbf56, 0xb0f4, 0x4396, 0x3777, 0xb01f, 0x42a3, 0xb2c6, 0x41ef, 0x0db1, 0xb0fb, 0xba3f, 0xa7bf, 0x4217, 0x0bf8, 0x4327, 0x4368, 0xbfc0, 0x42e1, 0xb0fe, 0xba62, 0x427f, 0xbf80, 0x3777, 0xb2f7, 0xbf16, 0x42a0, 0xaa78, 0x42d0, 0x41d5, 0xa44e, 0xbadd, 0xb0be, 0xb2e0, 0xba54, 0x4121, 0xbfd0, 0x2647, 0x4574, 0xba1c, 0x20a2, 0x1ae6, 0x2e30, 0x43e5, 0xb27d, 0xb0ee, 0x4053, 0xb2b6, 0x1c72, 0xbf70, 0x1562, 0xbfa9, 0x1f12, 0x4198, 0x4297, 0xb09b, 0x440e, 0x1eb9, 0x2ec0, 0xbfa4, 0x1c9d, 0xba34, 0x428e, 0x22cb, 0x4313, 0xb29f, 0x418d, 0xb27b, 0x4664, 0x1daa, 0xba05, 0xb230, 0xbf07, 0x314a, 0x42c9, 0x03a2, 0x4198, 0x1c5f, 0xb0aa, 0xb078, 0x404d, 0xb2b7, 0x4204, 0x4378, 0xbf09, 0xbfe0, 0x4307, 0x41fa, 0xba3f, 0xba74, 0xb042, 0x0f95, 0xb251, 0x44d8, 0x0fa5, 0x42a6, 0x0927, 0x1e0f, 0xbfd9, 0xb0ac, 0xa99d, 0x3a4b, 0x3435, 0x4154, 0x4046, 0xb231, 0xb201, 0x19c1, 0x418b, 0x0d1a, 0x4000, 0xb032, 0xbfc1, 0xb257, 0x2c04, 0xb029, 0xba42, 0x42ab, 0x2783, 0x1c91, 0x2f6d, 0x40cb, 0x1ac3, 0x4093, 0x45da, 0x434d, 0x4429, 0xbf55, 0x419c, 0x41c1, 0x43f2, 0x3a64, 0x4041, 0x183f, 0x4103, 0x4057, 0x41ec, 0x4268, 0x20b0, 0xb294, 0xba16, 0xb238, 0xbf0a, 0x4622, 0x432e, 0x3ed4, 0x46a2, 0xb239, 0xb2ca, 0xb2bb, 0xbfa3, 0x41fb, 0x400b, 0x42f9, 0x4296, 0xb215, 0x11b5, 0xb292, 0xbfcb, 0xab70, 0x4088, 0x18fc, 0x40fa, 0x31cf, 0x44c0, 0x1a3e, 0x20a8, 0x36f0, 0x421a, 0x4547, 0x4101, 0xb259, 0x4094, 0xa222, 0x1d0f, 0xbfc0, 0x0582, 0xb080, 0xb214, 0x4605, 0x407d, 0x1a4a, 0x400d, 0x4168, 0xb091, 0x1ef9, 0x424b, 0xba65, 0xbfc3, 0x4033, 0x4258, 0xb043, 0x4095, 0x4770, 0xe7fe + ], + StartRegs = [0x9f18068a, 0x03643f9c, 0x4d4c0930, 0xb5ba15e8, 0xff9da78d, 0x8731d796, 0x094b9e5e, 0x291d98f7, 0x1392fdc3, 0x4fe11ddf, 0x2f0cc7b5, 0x2d5bda6f, 0x2d85b32d, 0x081e2031, 0x00000000, 0x400001f0 + ], + FinalRegs = [0xffffffa0, 0xffffff96, 0x00000000, 0x00000060, 0x00000000, 0x00000000, 0x000000f0, 0xffffff99, 0x2fc23bbc, 0x2d85b418, 0x0000d42f, 0xc7ffffff, 0xf7e1d472, 0x081e259d, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xb235, 0x3f52, 0xb2ed, 0xa9b5, 0xbf53, 0x2bef, 0x1829, 0x2f6e, 0xba3a, 0xba63, 0x42c9, 0x41fa, 0xbf22, 0x415e, 0xa64f, 0xb072, 0xb2fe, 0x2efd, 0x4080, 0x0976, 0xb299, 0x4673, 0xb22c, 0x436d, 0xb2f3, 0x41f3, 0x02e9, 0x1955, 0x43fa, 0x411d, 0x4197, 0x41b0, 0x40cd, 0xbae5, 0xbadf, 0xbf42, 0x41ed, 0x41ea, 0xb240, 0xba2a, 0xb0eb, 0x4049, 0x40e4, 0xb223, 0x4361, 0x430c, 0x4144, 0x17db, 0x4053, 0xb284, 0xb0f5, 0x4074, 0x401b, 0x213c, 0x40eb, 0x4331, 0xb27f, 0xb2ba, 0xb2c6, 0x428e, 0x40c1, 0xbf8b, 0xb239, 0x41c2, 0x43a2, 0xb2f8, 0x4193, 0x4005, 0x432e, 0x4596, 0x44b9, 0x43a5, 0xb288, 0x3e1e, 0x449d, 0xb2b7, 0x1b4f, 0x2bc5, 0x43f4, 0xba10, 0x409c, 0x4090, 0x414c, 0x0672, 0xbfd4, 0x4356, 0x44b3, 0x424e, 0x1fb8, 0x4434, 0xb00d, 0x4045, 0x2fcd, 0x40fb, 0xba20, 0x41ae, 0x4266, 0xba12, 0x407b, 0x420a, 0x1a0f, 0x2281, 0x31c6, 0x1abf, 0x1d76, 0x41b8, 0x4055, 0x45c4, 0x43cc, 0x40c8, 0x4165, 0x163e, 0xbf1f, 0xba6c, 0xacaf, 0xba04, 0x412c, 0xb2a6, 0x42fb, 0xbaea, 0xb0ac, 0x446b, 0x4381, 0xa37d, 0xbf27, 0x4163, 0x42f8, 0xb24c, 0x41d5, 0x182b, 0x426e, 0x40e5, 0x3fa2, 0xbf9f, 0xba3c, 0x2e88, 0x4362, 0x3a89, 0xb2f3, 0xbacc, 0xb218, 0x3a16, 0x2c8f, 0x42f4, 0x43a4, 0xbf2c, 0x2016, 0x0105, 0x2c60, 0x425d, 0xbf17, 0x443d, 0x19cd, 0x21e8, 0x2803, 0x402d, 0x40e0, 0x1330, 0x1a90, 0x42e5, 0x151c, 0xb022, 0xbf47, 0x1f76, 0xba71, 0xb207, 0x40f2, 0x4172, 0x0965, 0x42af, 0x407f, 0x4162, 0x4355, 0x13d1, 0xbfa0, 0x0910, 0x4574, 0x42f4, 0x206f, 0x431d, 0x437c, 0x42a0, 0x4108, 0x4469, 0x21dc, 0x42d4, 0x3b95, 0xbad0, 0x420f, 0x1295, 0x428b, 0xbfd6, 0x05f7, 0xbf00, 0x4685, 0x4193, 0x463c, 0x4190, 0xbf5e, 0xba3e, 0xb2b8, 0xbafb, 0x07a5, 0x4320, 0x4161, 0x43d8, 0x004d, 0x40f4, 0x4040, 0xb253, 0x412b, 0xb230, 0x408f, 0xbf00, 0x021f, 0xbfa0, 0x42aa, 0x3978, 0x3bc6, 0x1e67, 0x406f, 0x4161, 0x4628, 0xad0c, 0x4232, 0xba05, 0xb2ea, 0xbf45, 0x2bbd, 0x224d, 0x43ce, 0x4262, 0xbfe1, 0x0ac9, 0x42d2, 0x4592, 0x2030, 0x3981, 0xbf7d, 0x3d39, 0xae51, 0xbfd0, 0x4161, 0x41e6, 0x414d, 0xba32, 0x4680, 0x311a, 0x18e4, 0x1f85, 0xbf64, 0x1a28, 0xbadf, 0x46e4, 0xa5c9, 0x4199, 0x3d07, 0x0825, 0xbf2d, 0x40e5, 0x21ec, 0x0b46, 0x430a, 0x1cd7, 0xa4e2, 0x4396, 0x4370, 0x2c8a, 0xbf04, 0xb273, 0xba2e, 0x423f, 0x428d, 0x1f54, 0xbfc6, 0x41cc, 0x1aa1, 0x402c, 0x4397, 0x4175, 0xb287, 0x4222, 0x46c3, 0x305a, 0x421f, 0x41c1, 0xb283, 0x43a0, 0x431f, 0x1ec0, 0x43fa, 0x0821, 0xba45, 0x405d, 0xb0e4, 0x407e, 0xbfbf, 0x00ab, 0xb22b, 0x309d, 0x4269, 0x4021, 0xb09e, 0xbf0d, 0xb251, 0xbae7, 0x42de, 0x41d1, 0x4132, 0xb08a, 0xa1ec, 0x1fc5, 0xb09a, 0x4332, 0xbfd0, 0x26f4, 0x4069, 0x42e6, 0xb275, 0x1ae3, 0x4350, 0xbf31, 0x3b04, 0x1f7a, 0x4152, 0xbaca, 0x1f2f, 0xb032, 0x1d51, 0x44cc, 0x4016, 0x18ce, 0x41fc, 0x1d3e, 0x409d, 0xbf4b, 0x4241, 0x2393, 0x4139, 0x4374, 0x43c6, 0x40fb, 0x41ba, 0x370d, 0xb205, 0x42d5, 0x4231, 0xb2c5, 0x4253, 0x42c6, 0x40ea, 0x38fd, 0xb2f0, 0x1002, 0x1676, 0x42bc, 0xbfdb, 0x1c6c, 0x0b4f, 0xb230, 0x41ee, 0x4233, 0x29f8, 0x191e, 0xba4a, 0x408e, 0x45bd, 0xb20f, 0x3a1d, 0x2891, 0x3659, 0x127e, 0x43a2, 0x167c, 0xb2b5, 0xb298, 0x43b5, 0xb2ba, 0x4344, 0x426e, 0xb259, 0x1293, 0xbf25, 0x4134, 0x2a59, 0x40d7, 0xafc9, 0x2b8d, 0x42da, 0xb03d, 0xb000, 0x4656, 0x420a, 0x2c8d, 0x065e, 0x4252, 0x43c6, 0x458b, 0xa5fd, 0x4111, 0x42fd, 0xbf85, 0xbaff, 0x4032, 0xb2b7, 0xb236, 0xb044, 0xb205, 0xbae5, 0x416e, 0x42e0, 0x412d, 0x1d40, 0x0fc4, 0x42e7, 0x428e, 0x4376, 0x1b9e, 0x263a, 0x42c3, 0x43a4, 0x08bf, 0x409a, 0x2124, 0x40f9, 0xb29c, 0xbf9d, 0x415e, 0x4003, 0x275f, 0xaf43, 0xba41, 0xa013, 0xb02a, 0x4398, 0x424f, 0x411f, 0x42ee, 0xa2da, 0x45f3, 0x440d, 0xb2ed, 0x429c, 0x4263, 0x1f66, 0x0f8d, 0x3500, 0xbf68, 0x40a6, 0xb2de, 0x43df, 0x40a1, 0xba52, 0xb0fb, 0x145d, 0x19ce, 0x43a1, 0x427d, 0x4493, 0x40cf, 0x4103, 0x463b, 0xb0cf, 0x4113, 0x458c, 0x1ac8, 0x030e, 0x42ef, 0x4381, 0x19ae, 0xa923, 0x4209, 0xbf91, 0xb01d, 0x199e, 0x1a59, 0x41d7, 0x4390, 0x414f, 0x4144, 0x19df, 0xa99a, 0x43d8, 0x4059, 0x400b, 0xba42, 0x4327, 0xb20f, 0x2ad1, 0xbfa6, 0x4335, 0xb2ef, 0x10be, 0x1845, 0xbfd8, 0xb2a8, 0x40f2, 0x405d, 0x42bd, 0x43c2, 0xabd0, 0x40f0, 0x4361, 0x413b, 0x1dcf, 0xb20d, 0x3168, 0xba5b, 0x43e1, 0x43a3, 0xb053, 0xba1f, 0xa340, 0xba35, 0x27b0, 0x45c6, 0x4093, 0x40d7, 0x43fd, 0x1f45, 0xbfb9, 0x424e, 0xaf65, 0x1215, 0xb247, 0xb220, 0x44d0, 0xb27c, 0xbf82, 0x232d, 0xa8e7, 0x42cb, 0x3cd3, 0x1aea, 0x4110, 0xbaee, 0x2c77, 0x4028, 0xb2f8, 0x2376, 0xb262, 0x0ccd, 0x4059, 0x40bc, 0xba54, 0x4367, 0xb2dc, 0x4012, 0x4012, 0x4221, 0x182a, 0x195a, 0xbf02, 0x4361, 0x04db, 0x427f, 0x44a2, 0x43c3, 0x41d8, 0x427f, 0x017f, 0xaffb, 0xbfc9, 0x426e, 0xb09d, 0x11ce, 0xb21b, 0xba66, 0x0ab4, 0x420b, 0x075f, 0xb25e, 0xbf95, 0x42bc, 0xb23a, 0x4070, 0x41b8, 0x43c6, 0xa5d7, 0x4271, 0x438a, 0xbf05, 0xac31, 0xbadf, 0x43e3, 0x1eb1, 0xb225, 0x4237, 0x4015, 0x425d, 0x07fc, 0xa809, 0x43b6, 0x43f8, 0x4330, 0x4028, 0xbf5a, 0x42c3, 0x1ce7, 0xb2eb, 0x42ef, 0x34ec, 0x4334, 0xba3d, 0x1d32, 0xb232, 0xbaca, 0xb23c, 0x4039, 0xadc4, 0xb0a5, 0xb2f2, 0x199a, 0x41f9, 0xb26c, 0x404a, 0xba1e, 0x40ac, 0xb044, 0xba2a, 0xbf35, 0xb015, 0xba51, 0xa8ac, 0x1963, 0x20b1, 0xbf39, 0x40ad, 0x40ed, 0x4151, 0x2d49, 0xb20b, 0xba2d, 0x1edd, 0xb211, 0x1f04, 0x4339, 0x4349, 0xb218, 0x4286, 0x43d1, 0xbfd3, 0xba2d, 0x41ce, 0x18d1, 0x4543, 0x1d0b, 0xa053, 0xbfe0, 0x15da, 0x2d45, 0x3d82, 0x4115, 0x04a6, 0x43b4, 0xb065, 0x282f, 0x0267, 0xa36f, 0x422f, 0x011c, 0xbf0e, 0x029e, 0xba71, 0xad75, 0x43c6, 0x4288, 0x42f7, 0x4616, 0xbf2b, 0x404e, 0x1a44, 0x30f1, 0xb09e, 0x4354, 0xb2c7, 0x4000, 0x3fd3, 0x18f4, 0x2e42, 0xb279, 0x4257, 0xb0f8, 0x42e9, 0x4065, 0x4021, 0xba0f, 0x4121, 0x419d, 0x40e4, 0x41c7, 0x259c, 0x4023, 0x435a, 0x1afd, 0x1f12, 0xba21, 0xbf4e, 0x4313, 0x254b, 0xb27e, 0x41f6, 0x4557, 0x4287, 0xb270, 0x42cf, 0xb07e, 0xbf94, 0xb2c9, 0x432f, 0x4397, 0xafbd, 0x3d40, 0xa8ae, 0x3690, 0x40b8, 0xafdc, 0xb064, 0x26fe, 0x43a3, 0x466f, 0x39e6, 0xb2ee, 0x0008, 0x4273, 0xba2e, 0x1d7b, 0x39d9, 0xbf48, 0xba57, 0x1c17, 0x0edb, 0x415e, 0xbfc6, 0x14c0, 0xbacf, 0xbacc, 0xacb0, 0x4359, 0xb21a, 0xbf5d, 0x415e, 0x41cf, 0x4423, 0x42f2, 0xb27b, 0x41ac, 0x4571, 0xbf00, 0xba7e, 0xb01c, 0x42db, 0x2818, 0x3d11, 0xbf90, 0x4186, 0xb0f6, 0xb0c3, 0xba49, 0x1c79, 0xbac8, 0x19b8, 0x407a, 0xa439, 0x1af9, 0x414e, 0xb227, 0xa3ab, 0xbf83, 0x4107, 0xba3e, 0x1e2f, 0xbfe0, 0x0b3b, 0x437d, 0x40b5, 0xba44, 0x45f2, 0x447f, 0xb2f9, 0xb2f6, 0x44a0, 0x4470, 0x4634, 0x42df, 0x1b5d, 0x426f, 0xbfb0, 0x4056, 0x1e3d, 0x1ad9, 0xa59d, 0xbfc0, 0x1404, 0xbf48, 0xb2f1, 0xbf61, 0x099c, 0x43c9, 0xba5a, 0xb278, 0x4002, 0x4083, 0x08c7, 0x42d0, 0x44eb, 0xa734, 0x462e, 0x4121, 0x4218, 0x4060, 0x402f, 0x415b, 0x464b, 0x441c, 0xabc9, 0xb255, 0xbaf4, 0xb2c5, 0x43c2, 0xbf7b, 0x1f61, 0x1dda, 0x42f6, 0xb22d, 0xbf72, 0x4604, 0x4384, 0x1ef3, 0x1d46, 0xbf05, 0xbafd, 0xb207, 0xaf8f, 0x4561, 0xba57, 0x406d, 0x421e, 0x420f, 0x41c5, 0x45e5, 0x1dbd, 0x1fc6, 0x41f5, 0x4203, 0x422f, 0x42c3, 0xb247, 0xb069, 0xbf5c, 0x414b, 0x41c3, 0x41fa, 0xbf00, 0xafae, 0x4215, 0xbf4a, 0x4000, 0x41b2, 0x1e3b, 0x2842, 0x133b, 0x42d9, 0x4165, 0x4262, 0x43b9, 0x2626, 0x41b8, 0x4295, 0xacbc, 0x2fcf, 0xbfe2, 0x2b38, 0x4020, 0x09e3, 0xbfae, 0x40bb, 0x4289, 0xb226, 0xbf17, 0xa215, 0x4326, 0x2a3b, 0x0daa, 0xbf98, 0xb045, 0x42b7, 0x462d, 0x43d2, 0xa357, 0xb20e, 0x401b, 0x0d93, 0xba3d, 0xba27, 0x3a82, 0xbf60, 0x1844, 0x4211, 0x4004, 0x42ac, 0xba4b, 0x282a, 0xb272, 0x42f8, 0xbf90, 0xa34e, 0xbf0f, 0x43f0, 0x2f72, 0xb06f, 0x461e, 0x1d80, 0x19fb, 0xada0, 0xa8f2, 0x3b75, 0xbf02, 0xb294, 0x0e2f, 0x0a11, 0xb21e, 0x1af3, 0x43b1, 0xa521, 0xb264, 0xbad0, 0x43fc, 0x42c9, 0x1877, 0x403d, 0x43fc, 0x0217, 0xbf0c, 0xb0cd, 0xb2a4, 0x4196, 0xb2ee, 0x2b9c, 0xb007, 0x41a1, 0xbf2c, 0xba44, 0xb06d, 0xba5d, 0x4063, 0x1c68, 0x45c8, 0xbf71, 0x4100, 0xb274, 0xb0c0, 0x4421, 0x3a36, 0x0655, 0x204b, 0x1fc2, 0xb2b6, 0x1c68, 0xb050, 0x1e86, 0x3b90, 0x3b9e, 0x2bb7, 0xa64d, 0xaf8e, 0xbf14, 0x4219, 0x074a, 0x43c7, 0x4179, 0x42ae, 0xb026, 0x4551, 0xbfc9, 0x427e, 0xa12c, 0x465b, 0x42c1, 0x419c, 0x2a70, 0x4200, 0x4217, 0x4437, 0x1842, 0xbf70, 0xb03c, 0xa47b, 0x40fd, 0x4623, 0x1ee8, 0xbf23, 0xb23b, 0x41a1, 0x40ff, 0x42be, 0x1b0b, 0x43a1, 0x4193, 0x4008, 0xba0d, 0x4392, 0x0f39, 0x46bc, 0x2b84, 0x462e, 0xbf0d, 0x426a, 0xb093, 0x3ef0, 0x2b53, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x284dbe99, 0x058f67cb, 0xb9dae013, 0xa1c1f55b, 0x52670afd, 0x96fcee8f, 0x8a2497af, 0xbd5ee36d, 0x01bd25ee, 0x57094880, 0x25509dd6, 0xeb081cb3, 0x37cda5c3, 0x8213e3ef, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x01ffe449, 0x00000000, 0x00000000, 0x65ffccb7, 0x000019a4, 0x49e4ff65, 0x49e4fe75, 0x00000000, 0x25508003, 0x57094880, 0x25509e4c, 0x000070de, 0x00000000, 0xffffa158, 0x00000000, 0x200001d0 }, + Instructions = [0xb235, 0x3f52, 0xb2ed, 0xa9b5, 0xbf53, 0x2bef, 0x1829, 0x2f6e, 0xba3a, 0xba63, 0x42c9, 0x41fa, 0xbf22, 0x415e, 0xa64f, 0xb072, 0xb2fe, 0x2efd, 0x4080, 0x0976, 0xb299, 0x4673, 0xb22c, 0x436d, 0xb2f3, 0x41f3, 0x02e9, 0x1955, 0x43fa, 0x411d, 0x4197, 0x41b0, 0x40cd, 0xbae5, 0xbadf, 0xbf42, 0x41ed, 0x41ea, 0xb240, 0xba2a, 0xb0eb, 0x4049, 0x40e4, 0xb223, 0x4361, 0x430c, 0x4144, 0x17db, 0x4053, 0xb284, 0xb0f5, 0x4074, 0x401b, 0x213c, 0x40eb, 0x4331, 0xb27f, 0xb2ba, 0xb2c6, 0x428e, 0x40c1, 0xbf8b, 0xb239, 0x41c2, 0x43a2, 0xb2f8, 0x4193, 0x4005, 0x432e, 0x4596, 0x44b9, 0x43a5, 0xb288, 0x3e1e, 0x449d, 0xb2b7, 0x1b4f, 0x2bc5, 0x43f4, 0xba10, 0x409c, 0x4090, 0x414c, 0x0672, 0xbfd4, 0x4356, 0x44b3, 0x424e, 0x1fb8, 0x4434, 0xb00d, 0x4045, 0x2fcd, 0x40fb, 0xba20, 0x41ae, 0x4266, 0xba12, 0x407b, 0x420a, 0x1a0f, 0x2281, 0x31c6, 0x1abf, 0x1d76, 0x41b8, 0x4055, 0x45c4, 0x43cc, 0x40c8, 0x4165, 0x163e, 0xbf1f, 0xba6c, 0xacaf, 0xba04, 0x412c, 0xb2a6, 0x42fb, 0xbaea, 0xb0ac, 0x446b, 0x4381, 0xa37d, 0xbf27, 0x4163, 0x42f8, 0xb24c, 0x41d5, 0x182b, 0x426e, 0x40e5, 0x3fa2, 0xbf9f, 0xba3c, 0x2e88, 0x4362, 0x3a89, 0xb2f3, 0xbacc, 0xb218, 0x3a16, 0x2c8f, 0x42f4, 0x43a4, 0xbf2c, 0x2016, 0x0105, 0x2c60, 0x425d, 0xbf17, 0x443d, 0x19cd, 0x21e8, 0x2803, 0x402d, 0x40e0, 0x1330, 0x1a90, 0x42e5, 0x151c, 0xb022, 0xbf47, 0x1f76, 0xba71, 0xb207, 0x40f2, 0x4172, 0x0965, 0x42af, 0x407f, 0x4162, 0x4355, 0x13d1, 0xbfa0, 0x0910, 0x4574, 0x42f4, 0x206f, 0x431d, 0x437c, 0x42a0, 0x4108, 0x4469, 0x21dc, 0x42d4, 0x3b95, 0xbad0, 0x420f, 0x1295, 0x428b, 0xbfd6, 0x05f7, 0xbf00, 0x4685, 0x4193, 0x463c, 0x4190, 0xbf5e, 0xba3e, 0xb2b8, 0xbafb, 0x07a5, 0x4320, 0x4161, 0x43d8, 0x004d, 0x40f4, 0x4040, 0xb253, 0x412b, 0xb230, 0x408f, 0xbf00, 0x021f, 0xbfa0, 0x42aa, 0x3978, 0x3bc6, 0x1e67, 0x406f, 0x4161, 0x4628, 0xad0c, 0x4232, 0xba05, 0xb2ea, 0xbf45, 0x2bbd, 0x224d, 0x43ce, 0x4262, 0xbfe1, 0x0ac9, 0x42d2, 0x4592, 0x2030, 0x3981, 0xbf7d, 0x3d39, 0xae51, 0xbfd0, 0x4161, 0x41e6, 0x414d, 0xba32, 0x4680, 0x311a, 0x18e4, 0x1f85, 0xbf64, 0x1a28, 0xbadf, 0x46e4, 0xa5c9, 0x4199, 0x3d07, 0x0825, 0xbf2d, 0x40e5, 0x21ec, 0x0b46, 0x430a, 0x1cd7, 0xa4e2, 0x4396, 0x4370, 0x2c8a, 0xbf04, 0xb273, 0xba2e, 0x423f, 0x428d, 0x1f54, 0xbfc6, 0x41cc, 0x1aa1, 0x402c, 0x4397, 0x4175, 0xb287, 0x4222, 0x46c3, 0x305a, 0x421f, 0x41c1, 0xb283, 0x43a0, 0x431f, 0x1ec0, 0x43fa, 0x0821, 0xba45, 0x405d, 0xb0e4, 0x407e, 0xbfbf, 0x00ab, 0xb22b, 0x309d, 0x4269, 0x4021, 0xb09e, 0xbf0d, 0xb251, 0xbae7, 0x42de, 0x41d1, 0x4132, 0xb08a, 0xa1ec, 0x1fc5, 0xb09a, 0x4332, 0xbfd0, 0x26f4, 0x4069, 0x42e6, 0xb275, 0x1ae3, 0x4350, 0xbf31, 0x3b04, 0x1f7a, 0x4152, 0xbaca, 0x1f2f, 0xb032, 0x1d51, 0x44cc, 0x4016, 0x18ce, 0x41fc, 0x1d3e, 0x409d, 0xbf4b, 0x4241, 0x2393, 0x4139, 0x4374, 0x43c6, 0x40fb, 0x41ba, 0x370d, 0xb205, 0x42d5, 0x4231, 0xb2c5, 0x4253, 0x42c6, 0x40ea, 0x38fd, 0xb2f0, 0x1002, 0x1676, 0x42bc, 0xbfdb, 0x1c6c, 0x0b4f, 0xb230, 0x41ee, 0x4233, 0x29f8, 0x191e, 0xba4a, 0x408e, 0x45bd, 0xb20f, 0x3a1d, 0x2891, 0x3659, 0x127e, 0x43a2, 0x167c, 0xb2b5, 0xb298, 0x43b5, 0xb2ba, 0x4344, 0x426e, 0xb259, 0x1293, 0xbf25, 0x4134, 0x2a59, 0x40d7, 0xafc9, 0x2b8d, 0x42da, 0xb03d, 0xb000, 0x4656, 0x420a, 0x2c8d, 0x065e, 0x4252, 0x43c6, 0x458b, 0xa5fd, 0x4111, 0x42fd, 0xbf85, 0xbaff, 0x4032, 0xb2b7, 0xb236, 0xb044, 0xb205, 0xbae5, 0x416e, 0x42e0, 0x412d, 0x1d40, 0x0fc4, 0x42e7, 0x428e, 0x4376, 0x1b9e, 0x263a, 0x42c3, 0x43a4, 0x08bf, 0x409a, 0x2124, 0x40f9, 0xb29c, 0xbf9d, 0x415e, 0x4003, 0x275f, 0xaf43, 0xba41, 0xa013, 0xb02a, 0x4398, 0x424f, 0x411f, 0x42ee, 0xa2da, 0x45f3, 0x440d, 0xb2ed, 0x429c, 0x4263, 0x1f66, 0x0f8d, 0x3500, 0xbf68, 0x40a6, 0xb2de, 0x43df, 0x40a1, 0xba52, 0xb0fb, 0x145d, 0x19ce, 0x43a1, 0x427d, 0x4493, 0x40cf, 0x4103, 0x463b, 0xb0cf, 0x4113, 0x458c, 0x1ac8, 0x030e, 0x42ef, 0x4381, 0x19ae, 0xa923, 0x4209, 0xbf91, 0xb01d, 0x199e, 0x1a59, 0x41d7, 0x4390, 0x414f, 0x4144, 0x19df, 0xa99a, 0x43d8, 0x4059, 0x400b, 0xba42, 0x4327, 0xb20f, 0x2ad1, 0xbfa6, 0x4335, 0xb2ef, 0x10be, 0x1845, 0xbfd8, 0xb2a8, 0x40f2, 0x405d, 0x42bd, 0x43c2, 0xabd0, 0x40f0, 0x4361, 0x413b, 0x1dcf, 0xb20d, 0x3168, 0xba5b, 0x43e1, 0x43a3, 0xb053, 0xba1f, 0xa340, 0xba35, 0x27b0, 0x45c6, 0x4093, 0x40d7, 0x43fd, 0x1f45, 0xbfb9, 0x424e, 0xaf65, 0x1215, 0xb247, 0xb220, 0x44d0, 0xb27c, 0xbf82, 0x232d, 0xa8e7, 0x42cb, 0x3cd3, 0x1aea, 0x4110, 0xbaee, 0x2c77, 0x4028, 0xb2f8, 0x2376, 0xb262, 0x0ccd, 0x4059, 0x40bc, 0xba54, 0x4367, 0xb2dc, 0x4012, 0x4012, 0x4221, 0x182a, 0x195a, 0xbf02, 0x4361, 0x04db, 0x427f, 0x44a2, 0x43c3, 0x41d8, 0x427f, 0x017f, 0xaffb, 0xbfc9, 0x426e, 0xb09d, 0x11ce, 0xb21b, 0xba66, 0x0ab4, 0x420b, 0x075f, 0xb25e, 0xbf95, 0x42bc, 0xb23a, 0x4070, 0x41b8, 0x43c6, 0xa5d7, 0x4271, 0x438a, 0xbf05, 0xac31, 0xbadf, 0x43e3, 0x1eb1, 0xb225, 0x4237, 0x4015, 0x425d, 0x07fc, 0xa809, 0x43b6, 0x43f8, 0x4330, 0x4028, 0xbf5a, 0x42c3, 0x1ce7, 0xb2eb, 0x42ef, 0x34ec, 0x4334, 0xba3d, 0x1d32, 0xb232, 0xbaca, 0xb23c, 0x4039, 0xadc4, 0xb0a5, 0xb2f2, 0x199a, 0x41f9, 0xb26c, 0x404a, 0xba1e, 0x40ac, 0xb044, 0xba2a, 0xbf35, 0xb015, 0xba51, 0xa8ac, 0x1963, 0x20b1, 0xbf39, 0x40ad, 0x40ed, 0x4151, 0x2d49, 0xb20b, 0xba2d, 0x1edd, 0xb211, 0x1f04, 0x4339, 0x4349, 0xb218, 0x4286, 0x43d1, 0xbfd3, 0xba2d, 0x41ce, 0x18d1, 0x4543, 0x1d0b, 0xa053, 0xbfe0, 0x15da, 0x2d45, 0x3d82, 0x4115, 0x04a6, 0x43b4, 0xb065, 0x282f, 0x0267, 0xa36f, 0x422f, 0x011c, 0xbf0e, 0x029e, 0xba71, 0xad75, 0x43c6, 0x4288, 0x42f7, 0x4616, 0xbf2b, 0x404e, 0x1a44, 0x30f1, 0xb09e, 0x4354, 0xb2c7, 0x4000, 0x3fd3, 0x18f4, 0x2e42, 0xb279, 0x4257, 0xb0f8, 0x42e9, 0x4065, 0x4021, 0xba0f, 0x4121, 0x419d, 0x40e4, 0x41c7, 0x259c, 0x4023, 0x435a, 0x1afd, 0x1f12, 0xba21, 0xbf4e, 0x4313, 0x254b, 0xb27e, 0x41f6, 0x4557, 0x4287, 0xb270, 0x42cf, 0xb07e, 0xbf94, 0xb2c9, 0x432f, 0x4397, 0xafbd, 0x3d40, 0xa8ae, 0x3690, 0x40b8, 0xafdc, 0xb064, 0x26fe, 0x43a3, 0x466f, 0x39e6, 0xb2ee, 0x0008, 0x4273, 0xba2e, 0x1d7b, 0x39d9, 0xbf48, 0xba57, 0x1c17, 0x0edb, 0x415e, 0xbfc6, 0x14c0, 0xbacf, 0xbacc, 0xacb0, 0x4359, 0xb21a, 0xbf5d, 0x415e, 0x41cf, 0x4423, 0x42f2, 0xb27b, 0x41ac, 0x4571, 0xbf00, 0xba7e, 0xb01c, 0x42db, 0x2818, 0x3d11, 0xbf90, 0x4186, 0xb0f6, 0xb0c3, 0xba49, 0x1c79, 0xbac8, 0x19b8, 0x407a, 0xa439, 0x1af9, 0x414e, 0xb227, 0xa3ab, 0xbf83, 0x4107, 0xba3e, 0x1e2f, 0xbfe0, 0x0b3b, 0x437d, 0x40b5, 0xba44, 0x45f2, 0x447f, 0xb2f9, 0xb2f6, 0x44a0, 0x4470, 0x4634, 0x42df, 0x1b5d, 0x426f, 0xbfb0, 0x4056, 0x1e3d, 0x1ad9, 0xa59d, 0xbfc0, 0x1404, 0xbf48, 0xb2f1, 0xbf61, 0x099c, 0x43c9, 0xba5a, 0xb278, 0x4002, 0x4083, 0x08c7, 0x42d0, 0x44eb, 0xa734, 0x462e, 0x4121, 0x4218, 0x4060, 0x402f, 0x415b, 0x464b, 0x441c, 0xabc9, 0xb255, 0xbaf4, 0xb2c5, 0x43c2, 0xbf7b, 0x1f61, 0x1dda, 0x42f6, 0xb22d, 0xbf72, 0x4604, 0x4384, 0x1ef3, 0x1d46, 0xbf05, 0xbafd, 0xb207, 0xaf8f, 0x4561, 0xba57, 0x406d, 0x421e, 0x420f, 0x41c5, 0x45e5, 0x1dbd, 0x1fc6, 0x41f5, 0x4203, 0x422f, 0x42c3, 0xb247, 0xb069, 0xbf5c, 0x414b, 0x41c3, 0x41fa, 0xbf00, 0xafae, 0x4215, 0xbf4a, 0x4000, 0x41b2, 0x1e3b, 0x2842, 0x133b, 0x42d9, 0x4165, 0x4262, 0x43b9, 0x2626, 0x41b8, 0x4295, 0xacbc, 0x2fcf, 0xbfe2, 0x2b38, 0x4020, 0x09e3, 0xbfae, 0x40bb, 0x4289, 0xb226, 0xbf17, 0xa215, 0x4326, 0x2a3b, 0x0daa, 0xbf98, 0xb045, 0x42b7, 0x462d, 0x43d2, 0xa357, 0xb20e, 0x401b, 0x0d93, 0xba3d, 0xba27, 0x3a82, 0xbf60, 0x1844, 0x4211, 0x4004, 0x42ac, 0xba4b, 0x282a, 0xb272, 0x42f8, 0xbf90, 0xa34e, 0xbf0f, 0x43f0, 0x2f72, 0xb06f, 0x461e, 0x1d80, 0x19fb, 0xada0, 0xa8f2, 0x3b75, 0xbf02, 0xb294, 0x0e2f, 0x0a11, 0xb21e, 0x1af3, 0x43b1, 0xa521, 0xb264, 0xbad0, 0x43fc, 0x42c9, 0x1877, 0x403d, 0x43fc, 0x0217, 0xbf0c, 0xb0cd, 0xb2a4, 0x4196, 0xb2ee, 0x2b9c, 0xb007, 0x41a1, 0xbf2c, 0xba44, 0xb06d, 0xba5d, 0x4063, 0x1c68, 0x45c8, 0xbf71, 0x4100, 0xb274, 0xb0c0, 0x4421, 0x3a36, 0x0655, 0x204b, 0x1fc2, 0xb2b6, 0x1c68, 0xb050, 0x1e86, 0x3b90, 0x3b9e, 0x2bb7, 0xa64d, 0xaf8e, 0xbf14, 0x4219, 0x074a, 0x43c7, 0x4179, 0x42ae, 0xb026, 0x4551, 0xbfc9, 0x427e, 0xa12c, 0x465b, 0x42c1, 0x419c, 0x2a70, 0x4200, 0x4217, 0x4437, 0x1842, 0xbf70, 0xb03c, 0xa47b, 0x40fd, 0x4623, 0x1ee8, 0xbf23, 0xb23b, 0x41a1, 0x40ff, 0x42be, 0x1b0b, 0x43a1, 0x4193, 0x4008, 0xba0d, 0x4392, 0x0f39, 0x46bc, 0x2b84, 0x462e, 0xbf0d, 0x426a, 0xb093, 0x3ef0, 0x2b53, 0x4770, 0xe7fe + ], + StartRegs = [0x284dbe99, 0x058f67cb, 0xb9dae013, 0xa1c1f55b, 0x52670afd, 0x96fcee8f, 0x8a2497af, 0xbd5ee36d, 0x01bd25ee, 0x57094880, 0x25509dd6, 0xeb081cb3, 0x37cda5c3, 0x8213e3ef, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x01ffe449, 0x00000000, 0x00000000, 0x65ffccb7, 0x000019a4, 0x49e4ff65, 0x49e4fe75, 0x00000000, 0x25508003, 0x57094880, 0x25509e4c, 0x000070de, 0x00000000, 0xffffa158, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x1d00, 0x407e, 0x3525, 0x2982, 0x43ea, 0x4352, 0x4151, 0xbf5e, 0x09a3, 0x4196, 0xa5c3, 0x3298, 0xb061, 0x1d31, 0x4086, 0xbf05, 0xb040, 0x1336, 0x1c1e, 0xa99b, 0x1174, 0x3dc2, 0x4117, 0x40bb, 0x43a0, 0xbaec, 0xb0de, 0xb229, 0x4450, 0xbf05, 0x4142, 0x1f56, 0x4160, 0xb258, 0x438b, 0x4160, 0x2c59, 0x433f, 0x13c8, 0x35ae, 0x4398, 0x1eb1, 0x236d, 0x406a, 0x41cf, 0xbfd4, 0x417a, 0x41a3, 0x42d5, 0xb2f5, 0x410e, 0x41b9, 0x45bb, 0x4083, 0x4189, 0x41b7, 0x01e2, 0x1f77, 0xba53, 0x2388, 0x4561, 0x40c8, 0xbf1f, 0x401d, 0x007d, 0x26a6, 0x24e5, 0xb209, 0x4623, 0x4346, 0x403a, 0xb0b1, 0xba2d, 0x41d9, 0x1af2, 0x444e, 0xb0ea, 0x40f1, 0x01d5, 0xa4bd, 0xbf91, 0x41d9, 0x425c, 0x414e, 0x40d0, 0xba56, 0xb2ce, 0x0d2b, 0x1984, 0xb0bb, 0x3257, 0x2ba1, 0x43d1, 0x1f95, 0x43d6, 0x40d2, 0x1fa9, 0xba3f, 0xbaca, 0x4294, 0x174e, 0x40ef, 0x434e, 0x4089, 0x445b, 0x19e7, 0x42a7, 0xbfb9, 0x4056, 0xac80, 0x2696, 0x43f6, 0x465f, 0x425d, 0xba41, 0x4092, 0x251d, 0x1e2e, 0x40af, 0x4397, 0xbfb0, 0xbf9f, 0x4166, 0x444d, 0x41c4, 0xbaf0, 0x316d, 0x43db, 0x414b, 0x32c1, 0x325c, 0x41ab, 0xbaf1, 0xbf60, 0x08d1, 0x313c, 0x4387, 0x4613, 0xbf0b, 0x19f0, 0x411d, 0x4141, 0x11c6, 0xb2c3, 0x1f54, 0x41d1, 0xb030, 0xb227, 0x1d06, 0x355b, 0xbf21, 0x0f72, 0x41b6, 0x1f75, 0xb048, 0x4382, 0x43ff, 0x411f, 0x1bbf, 0xb263, 0x434d, 0x40c1, 0x1f58, 0x2d9e, 0x403d, 0x4341, 0x4379, 0xb2a8, 0x30d6, 0xbf08, 0x4027, 0x4312, 0xbacf, 0x4021, 0x414c, 0x4304, 0x1878, 0x2a19, 0x4688, 0x40a8, 0x146a, 0x410c, 0xb02d, 0xb2bc, 0x2063, 0x3346, 0x438f, 0x43fd, 0x4160, 0x1a4f, 0x4373, 0x4128, 0x4132, 0xb2c2, 0xb0ce, 0xa0e0, 0xbf3f, 0x4282, 0x423e, 0x41fc, 0xac39, 0xbfb8, 0xbfc0, 0x1996, 0x3e39, 0x0f2b, 0x1ece, 0xb069, 0x40fc, 0xbaf6, 0xbfc2, 0x0f93, 0xb0f4, 0x4346, 0x08d7, 0xba06, 0xb200, 0xba43, 0xba72, 0x0fc7, 0x1b92, 0xba08, 0x41f0, 0x19fe, 0xb256, 0x1bac, 0x4222, 0xb062, 0xbade, 0xb0aa, 0x436d, 0x1faa, 0x0663, 0xbf80, 0xbf53, 0x4195, 0x408b, 0x4034, 0xb2c6, 0x1a0f, 0xb2e8, 0xb291, 0x40b8, 0xbaec, 0x117c, 0x27ef, 0x4084, 0x405a, 0x40e7, 0xafea, 0x40d1, 0x1157, 0x4121, 0xb06f, 0x4135, 0x2090, 0x16e4, 0x4318, 0x1c80, 0x310f, 0xb0e2, 0x40cf, 0xbf8e, 0x407a, 0xb09c, 0x388f, 0x4299, 0x1fdd, 0xb23f, 0xbf15, 0x1f0a, 0x40b2, 0x42de, 0x2ca0, 0x424f, 0xa934, 0x40be, 0x1dda, 0xb04d, 0x0c79, 0xbac7, 0x18ec, 0x4300, 0x1a08, 0xb219, 0x2eab, 0xbf8e, 0x1a3c, 0xb228, 0xad72, 0x403c, 0xb000, 0x44b2, 0x23a8, 0x41a6, 0x43d7, 0x404d, 0x0805, 0x43e8, 0x459b, 0xa1b1, 0x45b3, 0x4159, 0x44b4, 0x09a2, 0x42a1, 0xbf7e, 0xb2d5, 0xb007, 0x391a, 0x1bb2, 0x45d1, 0x4179, 0x420f, 0xba1f, 0x1ad5, 0xb22f, 0xb05f, 0xb0a6, 0xb269, 0x279d, 0x41c9, 0x4012, 0x0e08, 0xbf11, 0xba49, 0x417d, 0x3e9d, 0x436e, 0x4189, 0x42fb, 0x43e7, 0x4229, 0x40f3, 0x1a1e, 0x1ef2, 0x1061, 0x133f, 0xbac4, 0xb211, 0x42f1, 0x46ab, 0xb25e, 0x4387, 0x404f, 0x400e, 0xb038, 0x4167, 0x4564, 0xb201, 0x4073, 0xb03c, 0x234a, 0xbfae, 0x46e0, 0xb20d, 0x1862, 0xbf88, 0x42b6, 0xb029, 0xa541, 0x406d, 0x4236, 0x413e, 0x45e5, 0x1b98, 0x4224, 0x40ad, 0x41d4, 0x4197, 0x0ec7, 0xbac8, 0x425b, 0x0254, 0xb28b, 0x328c, 0xba1a, 0x42db, 0xba4f, 0x418b, 0x4104, 0xb265, 0x40d9, 0xbf39, 0x41df, 0xb23c, 0x43bd, 0x43b3, 0x4312, 0x41de, 0xbf2b, 0x365d, 0x195c, 0x40ac, 0x0fea, 0x1dc7, 0x2d8d, 0x420f, 0x43bc, 0x41ac, 0xb0d0, 0xb279, 0x25fb, 0x4386, 0xb095, 0xa6c5, 0x4106, 0x3591, 0x41c0, 0xb06c, 0x43f2, 0x4037, 0x4388, 0x0cab, 0x4065, 0xa28e, 0xbf02, 0x4209, 0x1874, 0xb0c1, 0x4085, 0xb2c9, 0xb099, 0xb045, 0x4183, 0x13ed, 0x1dd4, 0xa5f9, 0x42d7, 0x1691, 0x436c, 0xa84e, 0x40e4, 0x439e, 0xb2cc, 0x0e65, 0xb238, 0x42b6, 0x3c33, 0xbf73, 0x1e26, 0xb2f2, 0x4376, 0x43dc, 0xbacf, 0x40dd, 0x431d, 0xba58, 0x2b96, 0x463a, 0x3767, 0x42cb, 0xb0ec, 0x40d7, 0xb007, 0x454f, 0xb28f, 0x1ee1, 0xbf1c, 0xb20e, 0x454f, 0x46dc, 0x4380, 0xa1b6, 0xbfd2, 0x07c6, 0x0f93, 0x4294, 0x4159, 0xbf39, 0xb27e, 0x4396, 0x40b8, 0x27c1, 0x410a, 0xb05f, 0x4364, 0x0507, 0x41a0, 0xb2ea, 0x1c8d, 0x007f, 0x214d, 0x4191, 0x11b4, 0x4096, 0x01bb, 0xbf2a, 0xaff8, 0x2725, 0xb29d, 0x1c3a, 0x41a2, 0x0bea, 0x4337, 0x413b, 0x3f7a, 0x4493, 0x4058, 0x1f5f, 0x29c8, 0x1b7d, 0xba6b, 0x41a1, 0x1142, 0x1b05, 0xba5a, 0x422a, 0xb23e, 0xbfd3, 0x4171, 0x43c0, 0xb04b, 0x4417, 0x2814, 0x4068, 0x40b9, 0x4123, 0xa999, 0x44ba, 0x4375, 0x3e79, 0x42d2, 0x4104, 0x1b76, 0x3c21, 0x4150, 0x431e, 0xb2fe, 0xba47, 0xb279, 0xbf85, 0x415b, 0x1c20, 0x4477, 0xac9a, 0x28ba, 0x433f, 0xbfd0, 0xb0fb, 0x409b, 0x4299, 0xba02, 0x418e, 0xa2a0, 0x3aae, 0xb0ad, 0xa584, 0x1a84, 0xa29f, 0x3a28, 0xa99b, 0xba7b, 0xb0d9, 0xba18, 0x32f2, 0x460b, 0x441a, 0x3bb7, 0xbfd5, 0x4324, 0xb2bb, 0x4117, 0x4563, 0x1fd6, 0xba34, 0x429e, 0x4078, 0xaba3, 0xa4bb, 0x0e12, 0xb259, 0xb2f0, 0x443a, 0x4215, 0x42f5, 0xa264, 0xbaed, 0xba2b, 0xbf1b, 0xba59, 0x0098, 0xb205, 0x414e, 0x1e4e, 0x40a9, 0x42f0, 0x4052, 0x4485, 0xbf93, 0x15d8, 0x3ddc, 0x407d, 0x4381, 0x418a, 0xa2dd, 0xb29f, 0xb27d, 0xb0f2, 0x304b, 0x1d56, 0x46e5, 0xa925, 0x2fb8, 0x419e, 0x45ec, 0x41b4, 0x406d, 0x13e1, 0x426b, 0x4095, 0x4262, 0x15d2, 0x443f, 0x41d1, 0xbfcb, 0x2b00, 0x4319, 0xb229, 0xb21e, 0x4277, 0xbf35, 0xb28c, 0xb22d, 0x4558, 0xbad2, 0x43b9, 0xbac8, 0x404d, 0xba27, 0x4236, 0xb217, 0xacb6, 0x3991, 0xb271, 0xac00, 0xb2ba, 0x3bf7, 0x438b, 0xb2b9, 0x26a3, 0x431d, 0x2cf2, 0x421f, 0x23ac, 0x41db, 0x40c1, 0xb2c7, 0x1678, 0x427c, 0xbf8b, 0x3bd6, 0x43b7, 0x041a, 0x42ab, 0x21b7, 0x3236, 0x1892, 0x149e, 0xb27f, 0xb28e, 0x0325, 0xba7c, 0x43a8, 0x4242, 0x441c, 0xbaf4, 0x4210, 0x417f, 0x401e, 0x4252, 0xb2d2, 0x4321, 0x4062, 0xb2d4, 0x3dcc, 0xbfac, 0x40ab, 0xb00f, 0xb08f, 0x4148, 0x41e1, 0xb0a5, 0x41b9, 0x0630, 0x0865, 0x43e9, 0xb0c2, 0x4551, 0x4131, 0x41c5, 0x4014, 0x2bfc, 0x42a0, 0xbf4e, 0x407f, 0x41f6, 0x1b7a, 0x0220, 0x41ac, 0x099e, 0x46b4, 0x42d8, 0xb223, 0x423d, 0x42d1, 0x1d10, 0x41bd, 0x4188, 0x4165, 0x12c7, 0x4174, 0x4018, 0x41e2, 0x414e, 0xbae3, 0x4250, 0x43f9, 0x1ed9, 0x28a1, 0x0e3f, 0x408e, 0x43db, 0xbf9b, 0x4009, 0xb295, 0x4131, 0xb275, 0x4099, 0xb2b9, 0x0ea5, 0x456c, 0x1eaa, 0xa4ed, 0xb085, 0x4194, 0x4197, 0x0d72, 0xaffc, 0x4031, 0x0194, 0xadd6, 0xb270, 0x1eac, 0x1981, 0x2bdd, 0xba1f, 0xbf70, 0xbfbf, 0xbad7, 0x4073, 0x4454, 0xba1d, 0x446b, 0x419e, 0x4021, 0xbfd0, 0x40a7, 0x1e5e, 0xbf63, 0xb2cf, 0x462a, 0xba68, 0x0c00, 0xb02a, 0xb070, 0x1318, 0x2880, 0xb061, 0x0995, 0x4273, 0xb283, 0xbad8, 0x1b22, 0x40a1, 0x15d5, 0xbf84, 0x419e, 0xb274, 0xba71, 0x46d4, 0x45b1, 0x432e, 0x1fb3, 0x381a, 0x42d1, 0x4183, 0x4588, 0x408b, 0x4599, 0x43f9, 0x3324, 0x4338, 0xbf60, 0xbff0, 0xbff0, 0x1fb8, 0xbafc, 0x421c, 0x40d7, 0x40fb, 0xbf79, 0xbade, 0xba55, 0x2335, 0xb047, 0xbfb8, 0x403b, 0xb0a0, 0xbad2, 0x1c8b, 0xba65, 0x3c31, 0x407d, 0x1992, 0x2c0f, 0x0e6d, 0x2f2a, 0x4119, 0xb218, 0x0128, 0x4216, 0xa76e, 0x4390, 0x4045, 0x466f, 0xba55, 0x43e0, 0x3c13, 0x41f9, 0xbf91, 0x3368, 0x1acc, 0x4040, 0x4349, 0x406d, 0x408e, 0xbaf5, 0x42f7, 0x400c, 0xb21a, 0x4306, 0xb253, 0x41e1, 0x32fa, 0x3fdf, 0xa3d0, 0xb207, 0x402c, 0xb25a, 0xba45, 0xbfcf, 0xa252, 0x443a, 0x40c1, 0x0341, 0xbf05, 0xabce, 0x4354, 0x4559, 0xb000, 0x40c2, 0x02ff, 0xb288, 0x425d, 0x40ec, 0x4599, 0xba76, 0x4198, 0x1188, 0x385c, 0x193e, 0x411e, 0xba18, 0xbf47, 0x41ff, 0x1b0c, 0x4298, 0x40c5, 0xb235, 0xba44, 0x3560, 0x4346, 0x415a, 0x199e, 0x1b6e, 0xbad1, 0x45b6, 0x42a7, 0x4253, 0xa5a4, 0x4384, 0x420a, 0xb0aa, 0xbf11, 0x3731, 0x12c0, 0xadb1, 0x426f, 0x4310, 0x2243, 0x25ec, 0xb2e4, 0x0845, 0xbf97, 0x426f, 0x425f, 0x40d3, 0xb2c2, 0x3293, 0x4610, 0xa6f4, 0x4376, 0x1838, 0x4143, 0x179e, 0x4381, 0x1922, 0x15ff, 0x41b3, 0xb2fb, 0x188a, 0xbf3e, 0xb028, 0x3da2, 0x4227, 0x43ef, 0x4079, 0xb055, 0x429d, 0xba59, 0x2586, 0xb0ad, 0x19bf, 0x41fd, 0x4023, 0xb2a1, 0x43e8, 0xa823, 0x4266, 0x41f9, 0x42a1, 0xb228, 0x2c34, 0x41da, 0xb211, 0x16da, 0x2895, 0x4392, 0x2eea, 0xbf24, 0x4255, 0x1922, 0x40c6, 0xbaf3, 0xb2ff, 0x40dc, 0x4141, 0x437f, 0x43c4, 0xb283, 0x1b59, 0x4198, 0x3aba, 0x1f81, 0x1f5b, 0x429a, 0x4204, 0x4037, 0xaefc, 0x183d, 0x1309, 0x4563, 0x09a5, 0xb207, 0xba1f, 0xbfa0, 0x1cd7, 0xbfa3, 0x4258, 0xb205, 0x427a, 0x43b2, 0x41cc, 0x1797, 0x43de, 0xb227, 0x1a3c, 0x4038, 0x4355, 0x4033, 0xbf6b, 0x42f5, 0xb083, 0x4396, 0x3d30, 0x0b59, 0x38cb, 0x4319, 0x37ab, 0x425a, 0x251a, 0x41fd, 0xb2c8, 0x454b, 0xbaea, 0x40ec, 0x43fd, 0x4286, 0x445e, 0x4689, 0xb270, 0x4011, 0x2d71, 0xb0df, 0x4026, 0xa569, 0xbf2e, 0x4121, 0x4393, 0x40e1, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x0542461d, 0xf5f04e12, 0x8bc7b1fe, 0xbd178d21, 0x26456cae, 0xca50d85d, 0xf3453942, 0x72f63230, 0x00bbda65, 0xae6250a2, 0xb5896c69, 0xd8e9e883, 0x00e97798, 0xcb5e9574, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0xffffffc9, 0x00000000, 0x00000000, 0x00000000, 0xfffff79f, 0x00001998, 0xfffff389, 0xfffff84a, 0x00e9e597, 0x00000000, 0xb58955e6, 0xfffffff5, 0xb58955e6, 0x000000c1, 0x00000000, 0xa00001d0 }, + Instructions = [0x1d00, 0x407e, 0x3525, 0x2982, 0x43ea, 0x4352, 0x4151, 0xbf5e, 0x09a3, 0x4196, 0xa5c3, 0x3298, 0xb061, 0x1d31, 0x4086, 0xbf05, 0xb040, 0x1336, 0x1c1e, 0xa99b, 0x1174, 0x3dc2, 0x4117, 0x40bb, 0x43a0, 0xbaec, 0xb0de, 0xb229, 0x4450, 0xbf05, 0x4142, 0x1f56, 0x4160, 0xb258, 0x438b, 0x4160, 0x2c59, 0x433f, 0x13c8, 0x35ae, 0x4398, 0x1eb1, 0x236d, 0x406a, 0x41cf, 0xbfd4, 0x417a, 0x41a3, 0x42d5, 0xb2f5, 0x410e, 0x41b9, 0x45bb, 0x4083, 0x4189, 0x41b7, 0x01e2, 0x1f77, 0xba53, 0x2388, 0x4561, 0x40c8, 0xbf1f, 0x401d, 0x007d, 0x26a6, 0x24e5, 0xb209, 0x4623, 0x4346, 0x403a, 0xb0b1, 0xba2d, 0x41d9, 0x1af2, 0x444e, 0xb0ea, 0x40f1, 0x01d5, 0xa4bd, 0xbf91, 0x41d9, 0x425c, 0x414e, 0x40d0, 0xba56, 0xb2ce, 0x0d2b, 0x1984, 0xb0bb, 0x3257, 0x2ba1, 0x43d1, 0x1f95, 0x43d6, 0x40d2, 0x1fa9, 0xba3f, 0xbaca, 0x4294, 0x174e, 0x40ef, 0x434e, 0x4089, 0x445b, 0x19e7, 0x42a7, 0xbfb9, 0x4056, 0xac80, 0x2696, 0x43f6, 0x465f, 0x425d, 0xba41, 0x4092, 0x251d, 0x1e2e, 0x40af, 0x4397, 0xbfb0, 0xbf9f, 0x4166, 0x444d, 0x41c4, 0xbaf0, 0x316d, 0x43db, 0x414b, 0x32c1, 0x325c, 0x41ab, 0xbaf1, 0xbf60, 0x08d1, 0x313c, 0x4387, 0x4613, 0xbf0b, 0x19f0, 0x411d, 0x4141, 0x11c6, 0xb2c3, 0x1f54, 0x41d1, 0xb030, 0xb227, 0x1d06, 0x355b, 0xbf21, 0x0f72, 0x41b6, 0x1f75, 0xb048, 0x4382, 0x43ff, 0x411f, 0x1bbf, 0xb263, 0x434d, 0x40c1, 0x1f58, 0x2d9e, 0x403d, 0x4341, 0x4379, 0xb2a8, 0x30d6, 0xbf08, 0x4027, 0x4312, 0xbacf, 0x4021, 0x414c, 0x4304, 0x1878, 0x2a19, 0x4688, 0x40a8, 0x146a, 0x410c, 0xb02d, 0xb2bc, 0x2063, 0x3346, 0x438f, 0x43fd, 0x4160, 0x1a4f, 0x4373, 0x4128, 0x4132, 0xb2c2, 0xb0ce, 0xa0e0, 0xbf3f, 0x4282, 0x423e, 0x41fc, 0xac39, 0xbfb8, 0xbfc0, 0x1996, 0x3e39, 0x0f2b, 0x1ece, 0xb069, 0x40fc, 0xbaf6, 0xbfc2, 0x0f93, 0xb0f4, 0x4346, 0x08d7, 0xba06, 0xb200, 0xba43, 0xba72, 0x0fc7, 0x1b92, 0xba08, 0x41f0, 0x19fe, 0xb256, 0x1bac, 0x4222, 0xb062, 0xbade, 0xb0aa, 0x436d, 0x1faa, 0x0663, 0xbf80, 0xbf53, 0x4195, 0x408b, 0x4034, 0xb2c6, 0x1a0f, 0xb2e8, 0xb291, 0x40b8, 0xbaec, 0x117c, 0x27ef, 0x4084, 0x405a, 0x40e7, 0xafea, 0x40d1, 0x1157, 0x4121, 0xb06f, 0x4135, 0x2090, 0x16e4, 0x4318, 0x1c80, 0x310f, 0xb0e2, 0x40cf, 0xbf8e, 0x407a, 0xb09c, 0x388f, 0x4299, 0x1fdd, 0xb23f, 0xbf15, 0x1f0a, 0x40b2, 0x42de, 0x2ca0, 0x424f, 0xa934, 0x40be, 0x1dda, 0xb04d, 0x0c79, 0xbac7, 0x18ec, 0x4300, 0x1a08, 0xb219, 0x2eab, 0xbf8e, 0x1a3c, 0xb228, 0xad72, 0x403c, 0xb000, 0x44b2, 0x23a8, 0x41a6, 0x43d7, 0x404d, 0x0805, 0x43e8, 0x459b, 0xa1b1, 0x45b3, 0x4159, 0x44b4, 0x09a2, 0x42a1, 0xbf7e, 0xb2d5, 0xb007, 0x391a, 0x1bb2, 0x45d1, 0x4179, 0x420f, 0xba1f, 0x1ad5, 0xb22f, 0xb05f, 0xb0a6, 0xb269, 0x279d, 0x41c9, 0x4012, 0x0e08, 0xbf11, 0xba49, 0x417d, 0x3e9d, 0x436e, 0x4189, 0x42fb, 0x43e7, 0x4229, 0x40f3, 0x1a1e, 0x1ef2, 0x1061, 0x133f, 0xbac4, 0xb211, 0x42f1, 0x46ab, 0xb25e, 0x4387, 0x404f, 0x400e, 0xb038, 0x4167, 0x4564, 0xb201, 0x4073, 0xb03c, 0x234a, 0xbfae, 0x46e0, 0xb20d, 0x1862, 0xbf88, 0x42b6, 0xb029, 0xa541, 0x406d, 0x4236, 0x413e, 0x45e5, 0x1b98, 0x4224, 0x40ad, 0x41d4, 0x4197, 0x0ec7, 0xbac8, 0x425b, 0x0254, 0xb28b, 0x328c, 0xba1a, 0x42db, 0xba4f, 0x418b, 0x4104, 0xb265, 0x40d9, 0xbf39, 0x41df, 0xb23c, 0x43bd, 0x43b3, 0x4312, 0x41de, 0xbf2b, 0x365d, 0x195c, 0x40ac, 0x0fea, 0x1dc7, 0x2d8d, 0x420f, 0x43bc, 0x41ac, 0xb0d0, 0xb279, 0x25fb, 0x4386, 0xb095, 0xa6c5, 0x4106, 0x3591, 0x41c0, 0xb06c, 0x43f2, 0x4037, 0x4388, 0x0cab, 0x4065, 0xa28e, 0xbf02, 0x4209, 0x1874, 0xb0c1, 0x4085, 0xb2c9, 0xb099, 0xb045, 0x4183, 0x13ed, 0x1dd4, 0xa5f9, 0x42d7, 0x1691, 0x436c, 0xa84e, 0x40e4, 0x439e, 0xb2cc, 0x0e65, 0xb238, 0x42b6, 0x3c33, 0xbf73, 0x1e26, 0xb2f2, 0x4376, 0x43dc, 0xbacf, 0x40dd, 0x431d, 0xba58, 0x2b96, 0x463a, 0x3767, 0x42cb, 0xb0ec, 0x40d7, 0xb007, 0x454f, 0xb28f, 0x1ee1, 0xbf1c, 0xb20e, 0x454f, 0x46dc, 0x4380, 0xa1b6, 0xbfd2, 0x07c6, 0x0f93, 0x4294, 0x4159, 0xbf39, 0xb27e, 0x4396, 0x40b8, 0x27c1, 0x410a, 0xb05f, 0x4364, 0x0507, 0x41a0, 0xb2ea, 0x1c8d, 0x007f, 0x214d, 0x4191, 0x11b4, 0x4096, 0x01bb, 0xbf2a, 0xaff8, 0x2725, 0xb29d, 0x1c3a, 0x41a2, 0x0bea, 0x4337, 0x413b, 0x3f7a, 0x4493, 0x4058, 0x1f5f, 0x29c8, 0x1b7d, 0xba6b, 0x41a1, 0x1142, 0x1b05, 0xba5a, 0x422a, 0xb23e, 0xbfd3, 0x4171, 0x43c0, 0xb04b, 0x4417, 0x2814, 0x4068, 0x40b9, 0x4123, 0xa999, 0x44ba, 0x4375, 0x3e79, 0x42d2, 0x4104, 0x1b76, 0x3c21, 0x4150, 0x431e, 0xb2fe, 0xba47, 0xb279, 0xbf85, 0x415b, 0x1c20, 0x4477, 0xac9a, 0x28ba, 0x433f, 0xbfd0, 0xb0fb, 0x409b, 0x4299, 0xba02, 0x418e, 0xa2a0, 0x3aae, 0xb0ad, 0xa584, 0x1a84, 0xa29f, 0x3a28, 0xa99b, 0xba7b, 0xb0d9, 0xba18, 0x32f2, 0x460b, 0x441a, 0x3bb7, 0xbfd5, 0x4324, 0xb2bb, 0x4117, 0x4563, 0x1fd6, 0xba34, 0x429e, 0x4078, 0xaba3, 0xa4bb, 0x0e12, 0xb259, 0xb2f0, 0x443a, 0x4215, 0x42f5, 0xa264, 0xbaed, 0xba2b, 0xbf1b, 0xba59, 0x0098, 0xb205, 0x414e, 0x1e4e, 0x40a9, 0x42f0, 0x4052, 0x4485, 0xbf93, 0x15d8, 0x3ddc, 0x407d, 0x4381, 0x418a, 0xa2dd, 0xb29f, 0xb27d, 0xb0f2, 0x304b, 0x1d56, 0x46e5, 0xa925, 0x2fb8, 0x419e, 0x45ec, 0x41b4, 0x406d, 0x13e1, 0x426b, 0x4095, 0x4262, 0x15d2, 0x443f, 0x41d1, 0xbfcb, 0x2b00, 0x4319, 0xb229, 0xb21e, 0x4277, 0xbf35, 0xb28c, 0xb22d, 0x4558, 0xbad2, 0x43b9, 0xbac8, 0x404d, 0xba27, 0x4236, 0xb217, 0xacb6, 0x3991, 0xb271, 0xac00, 0xb2ba, 0x3bf7, 0x438b, 0xb2b9, 0x26a3, 0x431d, 0x2cf2, 0x421f, 0x23ac, 0x41db, 0x40c1, 0xb2c7, 0x1678, 0x427c, 0xbf8b, 0x3bd6, 0x43b7, 0x041a, 0x42ab, 0x21b7, 0x3236, 0x1892, 0x149e, 0xb27f, 0xb28e, 0x0325, 0xba7c, 0x43a8, 0x4242, 0x441c, 0xbaf4, 0x4210, 0x417f, 0x401e, 0x4252, 0xb2d2, 0x4321, 0x4062, 0xb2d4, 0x3dcc, 0xbfac, 0x40ab, 0xb00f, 0xb08f, 0x4148, 0x41e1, 0xb0a5, 0x41b9, 0x0630, 0x0865, 0x43e9, 0xb0c2, 0x4551, 0x4131, 0x41c5, 0x4014, 0x2bfc, 0x42a0, 0xbf4e, 0x407f, 0x41f6, 0x1b7a, 0x0220, 0x41ac, 0x099e, 0x46b4, 0x42d8, 0xb223, 0x423d, 0x42d1, 0x1d10, 0x41bd, 0x4188, 0x4165, 0x12c7, 0x4174, 0x4018, 0x41e2, 0x414e, 0xbae3, 0x4250, 0x43f9, 0x1ed9, 0x28a1, 0x0e3f, 0x408e, 0x43db, 0xbf9b, 0x4009, 0xb295, 0x4131, 0xb275, 0x4099, 0xb2b9, 0x0ea5, 0x456c, 0x1eaa, 0xa4ed, 0xb085, 0x4194, 0x4197, 0x0d72, 0xaffc, 0x4031, 0x0194, 0xadd6, 0xb270, 0x1eac, 0x1981, 0x2bdd, 0xba1f, 0xbf70, 0xbfbf, 0xbad7, 0x4073, 0x4454, 0xba1d, 0x446b, 0x419e, 0x4021, 0xbfd0, 0x40a7, 0x1e5e, 0xbf63, 0xb2cf, 0x462a, 0xba68, 0x0c00, 0xb02a, 0xb070, 0x1318, 0x2880, 0xb061, 0x0995, 0x4273, 0xb283, 0xbad8, 0x1b22, 0x40a1, 0x15d5, 0xbf84, 0x419e, 0xb274, 0xba71, 0x46d4, 0x45b1, 0x432e, 0x1fb3, 0x381a, 0x42d1, 0x4183, 0x4588, 0x408b, 0x4599, 0x43f9, 0x3324, 0x4338, 0xbf60, 0xbff0, 0xbff0, 0x1fb8, 0xbafc, 0x421c, 0x40d7, 0x40fb, 0xbf79, 0xbade, 0xba55, 0x2335, 0xb047, 0xbfb8, 0x403b, 0xb0a0, 0xbad2, 0x1c8b, 0xba65, 0x3c31, 0x407d, 0x1992, 0x2c0f, 0x0e6d, 0x2f2a, 0x4119, 0xb218, 0x0128, 0x4216, 0xa76e, 0x4390, 0x4045, 0x466f, 0xba55, 0x43e0, 0x3c13, 0x41f9, 0xbf91, 0x3368, 0x1acc, 0x4040, 0x4349, 0x406d, 0x408e, 0xbaf5, 0x42f7, 0x400c, 0xb21a, 0x4306, 0xb253, 0x41e1, 0x32fa, 0x3fdf, 0xa3d0, 0xb207, 0x402c, 0xb25a, 0xba45, 0xbfcf, 0xa252, 0x443a, 0x40c1, 0x0341, 0xbf05, 0xabce, 0x4354, 0x4559, 0xb000, 0x40c2, 0x02ff, 0xb288, 0x425d, 0x40ec, 0x4599, 0xba76, 0x4198, 0x1188, 0x385c, 0x193e, 0x411e, 0xba18, 0xbf47, 0x41ff, 0x1b0c, 0x4298, 0x40c5, 0xb235, 0xba44, 0x3560, 0x4346, 0x415a, 0x199e, 0x1b6e, 0xbad1, 0x45b6, 0x42a7, 0x4253, 0xa5a4, 0x4384, 0x420a, 0xb0aa, 0xbf11, 0x3731, 0x12c0, 0xadb1, 0x426f, 0x4310, 0x2243, 0x25ec, 0xb2e4, 0x0845, 0xbf97, 0x426f, 0x425f, 0x40d3, 0xb2c2, 0x3293, 0x4610, 0xa6f4, 0x4376, 0x1838, 0x4143, 0x179e, 0x4381, 0x1922, 0x15ff, 0x41b3, 0xb2fb, 0x188a, 0xbf3e, 0xb028, 0x3da2, 0x4227, 0x43ef, 0x4079, 0xb055, 0x429d, 0xba59, 0x2586, 0xb0ad, 0x19bf, 0x41fd, 0x4023, 0xb2a1, 0x43e8, 0xa823, 0x4266, 0x41f9, 0x42a1, 0xb228, 0x2c34, 0x41da, 0xb211, 0x16da, 0x2895, 0x4392, 0x2eea, 0xbf24, 0x4255, 0x1922, 0x40c6, 0xbaf3, 0xb2ff, 0x40dc, 0x4141, 0x437f, 0x43c4, 0xb283, 0x1b59, 0x4198, 0x3aba, 0x1f81, 0x1f5b, 0x429a, 0x4204, 0x4037, 0xaefc, 0x183d, 0x1309, 0x4563, 0x09a5, 0xb207, 0xba1f, 0xbfa0, 0x1cd7, 0xbfa3, 0x4258, 0xb205, 0x427a, 0x43b2, 0x41cc, 0x1797, 0x43de, 0xb227, 0x1a3c, 0x4038, 0x4355, 0x4033, 0xbf6b, 0x42f5, 0xb083, 0x4396, 0x3d30, 0x0b59, 0x38cb, 0x4319, 0x37ab, 0x425a, 0x251a, 0x41fd, 0xb2c8, 0x454b, 0xbaea, 0x40ec, 0x43fd, 0x4286, 0x445e, 0x4689, 0xb270, 0x4011, 0x2d71, 0xb0df, 0x4026, 0xa569, 0xbf2e, 0x4121, 0x4393, 0x40e1, 0x4770, 0xe7fe + ], + StartRegs = [0x0542461d, 0xf5f04e12, 0x8bc7b1fe, 0xbd178d21, 0x26456cae, 0xca50d85d, 0xf3453942, 0x72f63230, 0x00bbda65, 0xae6250a2, 0xb5896c69, 0xd8e9e883, 0x00e97798, 0xcb5e9574, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0xffffffc9, 0x00000000, 0x00000000, 0x00000000, 0xfffff79f, 0x00001998, 0xfffff389, 0xfffff84a, 0x00e9e597, 0x00000000, 0xb58955e6, 0xfffffff5, 0xb58955e6, 0x000000c1, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x0039, 0x3a23, 0x427e, 0x40e9, 0xb280, 0x0a50, 0xbfc9, 0x4114, 0x0bf0, 0x1254, 0xbf90, 0x2ad8, 0x440a, 0x414d, 0xbae8, 0xb243, 0xb01e, 0x2da6, 0xae3f, 0x4280, 0x445e, 0x4080, 0x4080, 0x3da8, 0x29dc, 0x2d10, 0x4373, 0x426e, 0xbf22, 0xb24b, 0x424a, 0x4332, 0x40a5, 0x46e3, 0xb28a, 0x42af, 0x4574, 0x1219, 0x1a9c, 0x43df, 0x438a, 0x43dc, 0xbfa9, 0x4318, 0xb28d, 0xb278, 0x0f00, 0xa9a1, 0x4359, 0xb0d5, 0xbf9a, 0x4283, 0xb2bf, 0x1f9a, 0xbfd0, 0x4054, 0x439c, 0xbfd0, 0x4243, 0xb026, 0x0245, 0xbf3b, 0x1b0d, 0x21ca, 0x1fff, 0x4199, 0x1a16, 0x425a, 0xb05a, 0x43cb, 0xbfd2, 0xba68, 0x434e, 0xb237, 0x438c, 0xa6ac, 0xbfcb, 0xbad2, 0x3246, 0x4255, 0xb263, 0x0abb, 0xaec5, 0x2008, 0xb049, 0xa1ea, 0xaa8d, 0xb2d9, 0x2152, 0xb27a, 0x4121, 0xb05a, 0xac70, 0x4138, 0xae5b, 0x2ee8, 0x18cd, 0xb253, 0x4143, 0xba11, 0x4483, 0x41b1, 0xbfcd, 0x1bac, 0x4222, 0x41e5, 0xa4ae, 0x1904, 0x4070, 0x1ff3, 0xb290, 0x40b3, 0xb031, 0x4098, 0x4624, 0x1a74, 0x4284, 0x05c1, 0x401d, 0x416b, 0xb238, 0xbf25, 0x434d, 0x1fa2, 0x40b2, 0x11e3, 0xb2cc, 0x413a, 0x41b7, 0xbf94, 0x43d4, 0x189b, 0xbacf, 0x4571, 0x430f, 0x1056, 0xba57, 0xb202, 0x1be7, 0x42eb, 0xb20e, 0x4544, 0x3f1d, 0xbfbf, 0x18ff, 0xbafa, 0x1a37, 0x4352, 0x0bfe, 0x1eec, 0x42e9, 0xbfd0, 0x419b, 0xbf6c, 0x3b65, 0x4115, 0x4051, 0xbfe0, 0x0eb4, 0x40b3, 0xa454, 0x4399, 0xb05f, 0x39c5, 0x4061, 0x1cb2, 0xbf0a, 0x369f, 0x210e, 0xb0b8, 0xbaf7, 0xa0a5, 0x4197, 0x45ce, 0x4073, 0x1918, 0xb2b8, 0x02a5, 0xb2e8, 0xbf79, 0xb24a, 0x43c6, 0x4034, 0xb08e, 0x46cc, 0x42be, 0x050b, 0x414a, 0x432e, 0x422b, 0xba14, 0x18f5, 0x372a, 0x239e, 0xb0e7, 0x1843, 0x4148, 0x465c, 0xb0b9, 0x3b44, 0x420e, 0xbf9a, 0x4299, 0x39a6, 0x2008, 0x2573, 0x4154, 0xb022, 0xae69, 0x417c, 0x3cbf, 0xb29d, 0x2b2d, 0xba06, 0x4175, 0xb222, 0xbfe4, 0xb205, 0x430a, 0xb211, 0x43ff, 0x0a2c, 0x41e5, 0x1575, 0x0b8d, 0xaf72, 0x1b99, 0x1e09, 0x4149, 0x40b8, 0x1d9c, 0x0c47, 0xba36, 0xb279, 0x4001, 0xb0d3, 0x1b1d, 0xbf13, 0xb219, 0x25db, 0x2745, 0x40c1, 0x1830, 0x4117, 0x428b, 0xb297, 0xb0b8, 0x406e, 0x40ec, 0x41f2, 0x42a1, 0x40da, 0x1df0, 0xaad8, 0x0ad3, 0x40f2, 0x42ae, 0xbf04, 0xba01, 0xae3e, 0xb26a, 0x1dbf, 0x442a, 0xb01f, 0x4051, 0x4147, 0xadb7, 0x420a, 0x1b8a, 0x18b9, 0xb0ab, 0xab57, 0xb072, 0x425d, 0x434a, 0xb2e0, 0xb280, 0xba33, 0x2c1d, 0x430f, 0x1080, 0xbf34, 0x41af, 0xba02, 0xb09a, 0x43d2, 0x1971, 0x3a78, 0x42e3, 0x4300, 0x4482, 0x1bbf, 0x02dd, 0x422a, 0x41a2, 0xbfdd, 0x4592, 0x41af, 0xba74, 0x15b3, 0x42cf, 0xba5b, 0xb2e1, 0xba39, 0x1e81, 0x461f, 0x415f, 0x4173, 0x4253, 0x4041, 0x405a, 0x1f00, 0xbf92, 0xa1f5, 0xb260, 0x456a, 0xb2ff, 0x3029, 0x45a5, 0x418f, 0xb01b, 0xba4d, 0x2658, 0x4384, 0xba5c, 0x3e1b, 0x35d4, 0x174a, 0x09ac, 0xb009, 0xb2ee, 0xb255, 0xbfda, 0x2f7e, 0xa637, 0x41d5, 0x1d37, 0xb0cc, 0x100a, 0x288d, 0x1d1f, 0x4129, 0xba7f, 0x19c8, 0xbf5f, 0x43ee, 0xb0d3, 0x4111, 0x4142, 0xb283, 0x1fd6, 0x4498, 0x43b5, 0x194a, 0x4124, 0x3b97, 0x4670, 0x427c, 0x45dd, 0x410c, 0x4377, 0xbadd, 0x4184, 0x424c, 0x40f7, 0xb25c, 0x4052, 0x2cdd, 0xbfa6, 0xbfe0, 0x416f, 0xb048, 0x4126, 0x40f3, 0xb0f5, 0x4153, 0x13cf, 0xbfd0, 0x41fd, 0x4072, 0x0639, 0x22bf, 0x3c4b, 0x0edb, 0x401d, 0x1f77, 0x4126, 0x4580, 0xbfe8, 0x1bd0, 0xb0fd, 0x2d03, 0x43e4, 0x4418, 0x405a, 0x41cd, 0x28aa, 0x425c, 0x4107, 0xa420, 0x4678, 0xba4f, 0xa155, 0x41e3, 0x4430, 0x400f, 0xba18, 0xba08, 0xb219, 0xbad8, 0xb2e6, 0xbfa2, 0x0925, 0x40f6, 0xba5f, 0xb0e6, 0xbf70, 0xb253, 0x40fd, 0x430e, 0x3042, 0x40ad, 0x4016, 0xba0f, 0xbf5e, 0x4544, 0x3faf, 0x464f, 0x1cb3, 0xbf90, 0x432c, 0x277c, 0x41e9, 0x42d3, 0x4181, 0x4149, 0xb27c, 0x19f6, 0x1e2f, 0x4118, 0x426f, 0xb214, 0xba78, 0x418b, 0xa945, 0x15e6, 0xba23, 0xb242, 0xbfd0, 0x4322, 0xbfab, 0x41cb, 0x4194, 0xba49, 0x4199, 0x42c0, 0xb2b0, 0x43d2, 0xb21d, 0x3ad9, 0x3b7a, 0xba1c, 0xbff0, 0x1b38, 0xbfc6, 0x42a1, 0xba7b, 0x4051, 0xba14, 0x413e, 0xbf85, 0xbfc0, 0xba1a, 0x43cc, 0x44f5, 0xb013, 0xba6c, 0x3c27, 0x4057, 0xb2f1, 0x1bb7, 0x1d41, 0xb28f, 0x42a1, 0xbfda, 0x1d46, 0xb0da, 0xb244, 0xa4aa, 0xb2b6, 0x1b67, 0x2f35, 0x1f03, 0x41cb, 0xb271, 0xbac4, 0x059f, 0x423a, 0xba22, 0x40e9, 0xb0e1, 0xb01b, 0xa845, 0xb063, 0xbf8c, 0x43a3, 0x40b4, 0x39d6, 0x4175, 0x4282, 0xb0de, 0x4037, 0x41e0, 0x42aa, 0xba1c, 0x41ae, 0x1d11, 0xbfa4, 0x186a, 0x4310, 0x432e, 0x1856, 0xb229, 0x4079, 0xa1d2, 0xbf80, 0x4665, 0x4225, 0xbfe2, 0x4372, 0x42a3, 0x448c, 0xbf7c, 0x4293, 0xba76, 0x2941, 0x42ff, 0x15ef, 0xbaee, 0x1735, 0x407c, 0x40c1, 0x1fab, 0xbf44, 0x43cd, 0xb2a0, 0xb2ad, 0x405e, 0x43d4, 0x40a5, 0x4128, 0x2340, 0x43c0, 0x027b, 0x434d, 0x1e76, 0xba2d, 0x4119, 0xbf0d, 0x1c53, 0x0600, 0x40dd, 0x4183, 0x1a96, 0x4167, 0x1c55, 0x4333, 0x46ad, 0xb22e, 0xb244, 0x41ee, 0x40da, 0x4063, 0x022b, 0xb26b, 0x43f3, 0x435a, 0x186e, 0xba0f, 0x1894, 0x4212, 0x4073, 0x41ca, 0x4368, 0xbfb9, 0x2971, 0xbf60, 0xb2f6, 0x43bc, 0xbf9e, 0x4651, 0xb224, 0xa186, 0x40ba, 0x415f, 0x42b0, 0xb044, 0x410c, 0x4035, 0x46c3, 0x3fa3, 0x400a, 0xbf60, 0xbf07, 0xb00a, 0xb263, 0x1cd7, 0x4119, 0x463a, 0x42c9, 0x4307, 0x1f80, 0x030c, 0xb2f0, 0x427c, 0x4619, 0x438a, 0xbfb1, 0x4178, 0x4197, 0x425b, 0x41fd, 0xb26f, 0x4101, 0xb08d, 0x2e09, 0xb072, 0x413a, 0xb281, 0x1eee, 0xaac3, 0x4175, 0x405d, 0x41d8, 0x4665, 0x418b, 0x458a, 0x4059, 0xac9b, 0x3661, 0x4332, 0xbf3a, 0xba5d, 0x4332, 0x4458, 0xb290, 0x1aa8, 0x42db, 0xa756, 0xb2df, 0x284d, 0x1cf5, 0x4148, 0x416b, 0x4445, 0x4114, 0x44aa, 0x4455, 0x40b5, 0xb01a, 0xb249, 0xbad0, 0x1fec, 0x4025, 0x19c2, 0x2014, 0x40c4, 0x42b8, 0xbf93, 0x415b, 0xb08a, 0x4363, 0x43ee, 0xba7e, 0xb2ec, 0xb28d, 0xb0e9, 0xb069, 0x43f1, 0xb2d9, 0xb254, 0x436c, 0x4479, 0x4345, 0xb0d7, 0xba17, 0x4213, 0x46d1, 0x30a5, 0x2e55, 0xbf4f, 0xba63, 0x4426, 0x363e, 0xa9e7, 0x4294, 0xb257, 0x20d4, 0xb22a, 0x1b17, 0x43e6, 0x419e, 0x40cc, 0xaf14, 0xba0b, 0xa0e6, 0xb086, 0x42a3, 0x28ed, 0x43a1, 0x427c, 0xb2f0, 0x1ccc, 0xba6c, 0x41b9, 0xb022, 0xba4f, 0x19a4, 0xbf12, 0x40a4, 0x412b, 0x412d, 0x1e6a, 0x4122, 0x412c, 0x4365, 0x0f73, 0xb2b8, 0x40ca, 0x07ee, 0x3940, 0x200e, 0x377a, 0x4167, 0x40d2, 0x4311, 0x4351, 0x433c, 0x1749, 0x1c33, 0x4137, 0xbf90, 0x1fc8, 0xbfc7, 0x43d6, 0x4294, 0x4338, 0xb27b, 0x4268, 0x2cd4, 0xbf1f, 0x41af, 0xbac7, 0x413b, 0x4099, 0x411f, 0x4270, 0x43e7, 0x40bc, 0xbfdc, 0x425a, 0x4489, 0x4004, 0x4162, 0x2867, 0x454d, 0x1607, 0xba54, 0xb2e4, 0x40c2, 0xbff0, 0x1641, 0xb2b1, 0xbf1d, 0x4560, 0x4371, 0xb2ca, 0x2dc0, 0x41ae, 0x4290, 0x43a2, 0x02d6, 0x1e8f, 0xa801, 0xb054, 0xb03f, 0x4204, 0xba5e, 0x1d4b, 0x42ba, 0x11a0, 0x1f7f, 0xba40, 0x421d, 0xba0d, 0xbacc, 0x434c, 0x4369, 0xbfb5, 0x0d27, 0x2c32, 0x4057, 0x4215, 0x438a, 0xb26c, 0xb028, 0x438a, 0x432d, 0x40a6, 0x0e5c, 0xb224, 0x410c, 0x40f8, 0xa486, 0x421f, 0x0fd8, 0xbf51, 0xab22, 0x135b, 0x1bad, 0x1afa, 0x43de, 0x43cc, 0x2f57, 0x41ff, 0xb27f, 0x15b7, 0x4362, 0xbf03, 0x4084, 0x444e, 0xb21c, 0x4285, 0x41d1, 0x199f, 0x4199, 0x1b47, 0xb2ee, 0x4150, 0xbfd5, 0x432e, 0xa445, 0x40b2, 0x41f0, 0xbac4, 0x45a9, 0x1ee8, 0x0504, 0x410d, 0x34f6, 0x4096, 0x34d1, 0xb26e, 0x439d, 0x24b8, 0x4299, 0x1226, 0x4009, 0xbf46, 0xbff0, 0x42a0, 0x40f7, 0x42b7, 0x43f7, 0x4164, 0xaa14, 0x424a, 0x45d8, 0x414c, 0xbf9d, 0xb218, 0x4223, 0x4430, 0x4036, 0x4163, 0xb0ac, 0xbfaa, 0x409d, 0xb2db, 0x0ae2, 0xb23b, 0xb218, 0x1a2c, 0x441b, 0xa0d2, 0x0e6a, 0xbfb9, 0x3fec, 0x22c2, 0x3012, 0x43ec, 0x1c2c, 0x4264, 0x42f9, 0xb2a2, 0xba13, 0xb270, 0x41dd, 0xb28f, 0x3315, 0x4267, 0x404a, 0x40b8, 0x4077, 0xbf8a, 0x4287, 0x0ce2, 0x406e, 0xbf2b, 0x1ab6, 0xb0aa, 0xbf90, 0xb2c4, 0x4666, 0x1af4, 0xba17, 0x4049, 0x4179, 0xb01b, 0x4154, 0x42e8, 0xb2dc, 0x431f, 0x4029, 0x4442, 0x19ff, 0x3b2a, 0x1a44, 0x1ac3, 0x160c, 0xb06d, 0x31fd, 0xb073, 0x4313, 0x3f1b, 0x43a2, 0xb22f, 0xa562, 0xbfb1, 0xba65, 0xb0d2, 0x1c51, 0x4158, 0xb27e, 0x40b8, 0x43fd, 0x4294, 0xb042, 0xba17, 0xb2ff, 0xbfdf, 0x400f, 0x3598, 0x404c, 0x4101, 0xb202, 0x2e65, 0x417a, 0xb05b, 0x1cd6, 0xab8e, 0x0d74, 0xbff0, 0x3f0d, 0xbadb, 0x0dce, 0x435f, 0xb269, 0xb291, 0x42e0, 0x46bd, 0x41c9, 0xbf63, 0xac82, 0x194d, 0x1cb3, 0x42db, 0xba49, 0x41dd, 0x40b3, 0x1c57, 0x43c3, 0xbf9c, 0x1d84, 0xb2bd, 0xb2c2, 0xbfe2, 0x1df6, 0x405c, 0x4022, 0x4173, 0x423f, 0x40ce, 0x4198, 0x42d3, 0x1cac, 0xbf65, 0x42bf, 0xba1c, 0x1889, 0x42c2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xaa459540, 0xb7417607, 0x90b1ad8e, 0x16822de0, 0x187003f9, 0x872131ae, 0x3224d4e1, 0x42eca858, 0x011e7d28, 0x6dc708e1, 0xb65556a7, 0xb63bce08, 0xc50698a6, 0x40eb158e, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x023ec6b9, 0x0080b091, 0x00000060, 0xfee09ca6, 0x00006364, 0x00006362, 0x00000000, 0x00006362, 0x011f635a, 0xc060e558, 0xc060e558, 0x011f635a, 0x6dc72045, 0x00028578, 0x00000000, 0x000001d0 }, + Instructions = [0x0039, 0x3a23, 0x427e, 0x40e9, 0xb280, 0x0a50, 0xbfc9, 0x4114, 0x0bf0, 0x1254, 0xbf90, 0x2ad8, 0x440a, 0x414d, 0xbae8, 0xb243, 0xb01e, 0x2da6, 0xae3f, 0x4280, 0x445e, 0x4080, 0x4080, 0x3da8, 0x29dc, 0x2d10, 0x4373, 0x426e, 0xbf22, 0xb24b, 0x424a, 0x4332, 0x40a5, 0x46e3, 0xb28a, 0x42af, 0x4574, 0x1219, 0x1a9c, 0x43df, 0x438a, 0x43dc, 0xbfa9, 0x4318, 0xb28d, 0xb278, 0x0f00, 0xa9a1, 0x4359, 0xb0d5, 0xbf9a, 0x4283, 0xb2bf, 0x1f9a, 0xbfd0, 0x4054, 0x439c, 0xbfd0, 0x4243, 0xb026, 0x0245, 0xbf3b, 0x1b0d, 0x21ca, 0x1fff, 0x4199, 0x1a16, 0x425a, 0xb05a, 0x43cb, 0xbfd2, 0xba68, 0x434e, 0xb237, 0x438c, 0xa6ac, 0xbfcb, 0xbad2, 0x3246, 0x4255, 0xb263, 0x0abb, 0xaec5, 0x2008, 0xb049, 0xa1ea, 0xaa8d, 0xb2d9, 0x2152, 0xb27a, 0x4121, 0xb05a, 0xac70, 0x4138, 0xae5b, 0x2ee8, 0x18cd, 0xb253, 0x4143, 0xba11, 0x4483, 0x41b1, 0xbfcd, 0x1bac, 0x4222, 0x41e5, 0xa4ae, 0x1904, 0x4070, 0x1ff3, 0xb290, 0x40b3, 0xb031, 0x4098, 0x4624, 0x1a74, 0x4284, 0x05c1, 0x401d, 0x416b, 0xb238, 0xbf25, 0x434d, 0x1fa2, 0x40b2, 0x11e3, 0xb2cc, 0x413a, 0x41b7, 0xbf94, 0x43d4, 0x189b, 0xbacf, 0x4571, 0x430f, 0x1056, 0xba57, 0xb202, 0x1be7, 0x42eb, 0xb20e, 0x4544, 0x3f1d, 0xbfbf, 0x18ff, 0xbafa, 0x1a37, 0x4352, 0x0bfe, 0x1eec, 0x42e9, 0xbfd0, 0x419b, 0xbf6c, 0x3b65, 0x4115, 0x4051, 0xbfe0, 0x0eb4, 0x40b3, 0xa454, 0x4399, 0xb05f, 0x39c5, 0x4061, 0x1cb2, 0xbf0a, 0x369f, 0x210e, 0xb0b8, 0xbaf7, 0xa0a5, 0x4197, 0x45ce, 0x4073, 0x1918, 0xb2b8, 0x02a5, 0xb2e8, 0xbf79, 0xb24a, 0x43c6, 0x4034, 0xb08e, 0x46cc, 0x42be, 0x050b, 0x414a, 0x432e, 0x422b, 0xba14, 0x18f5, 0x372a, 0x239e, 0xb0e7, 0x1843, 0x4148, 0x465c, 0xb0b9, 0x3b44, 0x420e, 0xbf9a, 0x4299, 0x39a6, 0x2008, 0x2573, 0x4154, 0xb022, 0xae69, 0x417c, 0x3cbf, 0xb29d, 0x2b2d, 0xba06, 0x4175, 0xb222, 0xbfe4, 0xb205, 0x430a, 0xb211, 0x43ff, 0x0a2c, 0x41e5, 0x1575, 0x0b8d, 0xaf72, 0x1b99, 0x1e09, 0x4149, 0x40b8, 0x1d9c, 0x0c47, 0xba36, 0xb279, 0x4001, 0xb0d3, 0x1b1d, 0xbf13, 0xb219, 0x25db, 0x2745, 0x40c1, 0x1830, 0x4117, 0x428b, 0xb297, 0xb0b8, 0x406e, 0x40ec, 0x41f2, 0x42a1, 0x40da, 0x1df0, 0xaad8, 0x0ad3, 0x40f2, 0x42ae, 0xbf04, 0xba01, 0xae3e, 0xb26a, 0x1dbf, 0x442a, 0xb01f, 0x4051, 0x4147, 0xadb7, 0x420a, 0x1b8a, 0x18b9, 0xb0ab, 0xab57, 0xb072, 0x425d, 0x434a, 0xb2e0, 0xb280, 0xba33, 0x2c1d, 0x430f, 0x1080, 0xbf34, 0x41af, 0xba02, 0xb09a, 0x43d2, 0x1971, 0x3a78, 0x42e3, 0x4300, 0x4482, 0x1bbf, 0x02dd, 0x422a, 0x41a2, 0xbfdd, 0x4592, 0x41af, 0xba74, 0x15b3, 0x42cf, 0xba5b, 0xb2e1, 0xba39, 0x1e81, 0x461f, 0x415f, 0x4173, 0x4253, 0x4041, 0x405a, 0x1f00, 0xbf92, 0xa1f5, 0xb260, 0x456a, 0xb2ff, 0x3029, 0x45a5, 0x418f, 0xb01b, 0xba4d, 0x2658, 0x4384, 0xba5c, 0x3e1b, 0x35d4, 0x174a, 0x09ac, 0xb009, 0xb2ee, 0xb255, 0xbfda, 0x2f7e, 0xa637, 0x41d5, 0x1d37, 0xb0cc, 0x100a, 0x288d, 0x1d1f, 0x4129, 0xba7f, 0x19c8, 0xbf5f, 0x43ee, 0xb0d3, 0x4111, 0x4142, 0xb283, 0x1fd6, 0x4498, 0x43b5, 0x194a, 0x4124, 0x3b97, 0x4670, 0x427c, 0x45dd, 0x410c, 0x4377, 0xbadd, 0x4184, 0x424c, 0x40f7, 0xb25c, 0x4052, 0x2cdd, 0xbfa6, 0xbfe0, 0x416f, 0xb048, 0x4126, 0x40f3, 0xb0f5, 0x4153, 0x13cf, 0xbfd0, 0x41fd, 0x4072, 0x0639, 0x22bf, 0x3c4b, 0x0edb, 0x401d, 0x1f77, 0x4126, 0x4580, 0xbfe8, 0x1bd0, 0xb0fd, 0x2d03, 0x43e4, 0x4418, 0x405a, 0x41cd, 0x28aa, 0x425c, 0x4107, 0xa420, 0x4678, 0xba4f, 0xa155, 0x41e3, 0x4430, 0x400f, 0xba18, 0xba08, 0xb219, 0xbad8, 0xb2e6, 0xbfa2, 0x0925, 0x40f6, 0xba5f, 0xb0e6, 0xbf70, 0xb253, 0x40fd, 0x430e, 0x3042, 0x40ad, 0x4016, 0xba0f, 0xbf5e, 0x4544, 0x3faf, 0x464f, 0x1cb3, 0xbf90, 0x432c, 0x277c, 0x41e9, 0x42d3, 0x4181, 0x4149, 0xb27c, 0x19f6, 0x1e2f, 0x4118, 0x426f, 0xb214, 0xba78, 0x418b, 0xa945, 0x15e6, 0xba23, 0xb242, 0xbfd0, 0x4322, 0xbfab, 0x41cb, 0x4194, 0xba49, 0x4199, 0x42c0, 0xb2b0, 0x43d2, 0xb21d, 0x3ad9, 0x3b7a, 0xba1c, 0xbff0, 0x1b38, 0xbfc6, 0x42a1, 0xba7b, 0x4051, 0xba14, 0x413e, 0xbf85, 0xbfc0, 0xba1a, 0x43cc, 0x44f5, 0xb013, 0xba6c, 0x3c27, 0x4057, 0xb2f1, 0x1bb7, 0x1d41, 0xb28f, 0x42a1, 0xbfda, 0x1d46, 0xb0da, 0xb244, 0xa4aa, 0xb2b6, 0x1b67, 0x2f35, 0x1f03, 0x41cb, 0xb271, 0xbac4, 0x059f, 0x423a, 0xba22, 0x40e9, 0xb0e1, 0xb01b, 0xa845, 0xb063, 0xbf8c, 0x43a3, 0x40b4, 0x39d6, 0x4175, 0x4282, 0xb0de, 0x4037, 0x41e0, 0x42aa, 0xba1c, 0x41ae, 0x1d11, 0xbfa4, 0x186a, 0x4310, 0x432e, 0x1856, 0xb229, 0x4079, 0xa1d2, 0xbf80, 0x4665, 0x4225, 0xbfe2, 0x4372, 0x42a3, 0x448c, 0xbf7c, 0x4293, 0xba76, 0x2941, 0x42ff, 0x15ef, 0xbaee, 0x1735, 0x407c, 0x40c1, 0x1fab, 0xbf44, 0x43cd, 0xb2a0, 0xb2ad, 0x405e, 0x43d4, 0x40a5, 0x4128, 0x2340, 0x43c0, 0x027b, 0x434d, 0x1e76, 0xba2d, 0x4119, 0xbf0d, 0x1c53, 0x0600, 0x40dd, 0x4183, 0x1a96, 0x4167, 0x1c55, 0x4333, 0x46ad, 0xb22e, 0xb244, 0x41ee, 0x40da, 0x4063, 0x022b, 0xb26b, 0x43f3, 0x435a, 0x186e, 0xba0f, 0x1894, 0x4212, 0x4073, 0x41ca, 0x4368, 0xbfb9, 0x2971, 0xbf60, 0xb2f6, 0x43bc, 0xbf9e, 0x4651, 0xb224, 0xa186, 0x40ba, 0x415f, 0x42b0, 0xb044, 0x410c, 0x4035, 0x46c3, 0x3fa3, 0x400a, 0xbf60, 0xbf07, 0xb00a, 0xb263, 0x1cd7, 0x4119, 0x463a, 0x42c9, 0x4307, 0x1f80, 0x030c, 0xb2f0, 0x427c, 0x4619, 0x438a, 0xbfb1, 0x4178, 0x4197, 0x425b, 0x41fd, 0xb26f, 0x4101, 0xb08d, 0x2e09, 0xb072, 0x413a, 0xb281, 0x1eee, 0xaac3, 0x4175, 0x405d, 0x41d8, 0x4665, 0x418b, 0x458a, 0x4059, 0xac9b, 0x3661, 0x4332, 0xbf3a, 0xba5d, 0x4332, 0x4458, 0xb290, 0x1aa8, 0x42db, 0xa756, 0xb2df, 0x284d, 0x1cf5, 0x4148, 0x416b, 0x4445, 0x4114, 0x44aa, 0x4455, 0x40b5, 0xb01a, 0xb249, 0xbad0, 0x1fec, 0x4025, 0x19c2, 0x2014, 0x40c4, 0x42b8, 0xbf93, 0x415b, 0xb08a, 0x4363, 0x43ee, 0xba7e, 0xb2ec, 0xb28d, 0xb0e9, 0xb069, 0x43f1, 0xb2d9, 0xb254, 0x436c, 0x4479, 0x4345, 0xb0d7, 0xba17, 0x4213, 0x46d1, 0x30a5, 0x2e55, 0xbf4f, 0xba63, 0x4426, 0x363e, 0xa9e7, 0x4294, 0xb257, 0x20d4, 0xb22a, 0x1b17, 0x43e6, 0x419e, 0x40cc, 0xaf14, 0xba0b, 0xa0e6, 0xb086, 0x42a3, 0x28ed, 0x43a1, 0x427c, 0xb2f0, 0x1ccc, 0xba6c, 0x41b9, 0xb022, 0xba4f, 0x19a4, 0xbf12, 0x40a4, 0x412b, 0x412d, 0x1e6a, 0x4122, 0x412c, 0x4365, 0x0f73, 0xb2b8, 0x40ca, 0x07ee, 0x3940, 0x200e, 0x377a, 0x4167, 0x40d2, 0x4311, 0x4351, 0x433c, 0x1749, 0x1c33, 0x4137, 0xbf90, 0x1fc8, 0xbfc7, 0x43d6, 0x4294, 0x4338, 0xb27b, 0x4268, 0x2cd4, 0xbf1f, 0x41af, 0xbac7, 0x413b, 0x4099, 0x411f, 0x4270, 0x43e7, 0x40bc, 0xbfdc, 0x425a, 0x4489, 0x4004, 0x4162, 0x2867, 0x454d, 0x1607, 0xba54, 0xb2e4, 0x40c2, 0xbff0, 0x1641, 0xb2b1, 0xbf1d, 0x4560, 0x4371, 0xb2ca, 0x2dc0, 0x41ae, 0x4290, 0x43a2, 0x02d6, 0x1e8f, 0xa801, 0xb054, 0xb03f, 0x4204, 0xba5e, 0x1d4b, 0x42ba, 0x11a0, 0x1f7f, 0xba40, 0x421d, 0xba0d, 0xbacc, 0x434c, 0x4369, 0xbfb5, 0x0d27, 0x2c32, 0x4057, 0x4215, 0x438a, 0xb26c, 0xb028, 0x438a, 0x432d, 0x40a6, 0x0e5c, 0xb224, 0x410c, 0x40f8, 0xa486, 0x421f, 0x0fd8, 0xbf51, 0xab22, 0x135b, 0x1bad, 0x1afa, 0x43de, 0x43cc, 0x2f57, 0x41ff, 0xb27f, 0x15b7, 0x4362, 0xbf03, 0x4084, 0x444e, 0xb21c, 0x4285, 0x41d1, 0x199f, 0x4199, 0x1b47, 0xb2ee, 0x4150, 0xbfd5, 0x432e, 0xa445, 0x40b2, 0x41f0, 0xbac4, 0x45a9, 0x1ee8, 0x0504, 0x410d, 0x34f6, 0x4096, 0x34d1, 0xb26e, 0x439d, 0x24b8, 0x4299, 0x1226, 0x4009, 0xbf46, 0xbff0, 0x42a0, 0x40f7, 0x42b7, 0x43f7, 0x4164, 0xaa14, 0x424a, 0x45d8, 0x414c, 0xbf9d, 0xb218, 0x4223, 0x4430, 0x4036, 0x4163, 0xb0ac, 0xbfaa, 0x409d, 0xb2db, 0x0ae2, 0xb23b, 0xb218, 0x1a2c, 0x441b, 0xa0d2, 0x0e6a, 0xbfb9, 0x3fec, 0x22c2, 0x3012, 0x43ec, 0x1c2c, 0x4264, 0x42f9, 0xb2a2, 0xba13, 0xb270, 0x41dd, 0xb28f, 0x3315, 0x4267, 0x404a, 0x40b8, 0x4077, 0xbf8a, 0x4287, 0x0ce2, 0x406e, 0xbf2b, 0x1ab6, 0xb0aa, 0xbf90, 0xb2c4, 0x4666, 0x1af4, 0xba17, 0x4049, 0x4179, 0xb01b, 0x4154, 0x42e8, 0xb2dc, 0x431f, 0x4029, 0x4442, 0x19ff, 0x3b2a, 0x1a44, 0x1ac3, 0x160c, 0xb06d, 0x31fd, 0xb073, 0x4313, 0x3f1b, 0x43a2, 0xb22f, 0xa562, 0xbfb1, 0xba65, 0xb0d2, 0x1c51, 0x4158, 0xb27e, 0x40b8, 0x43fd, 0x4294, 0xb042, 0xba17, 0xb2ff, 0xbfdf, 0x400f, 0x3598, 0x404c, 0x4101, 0xb202, 0x2e65, 0x417a, 0xb05b, 0x1cd6, 0xab8e, 0x0d74, 0xbff0, 0x3f0d, 0xbadb, 0x0dce, 0x435f, 0xb269, 0xb291, 0x42e0, 0x46bd, 0x41c9, 0xbf63, 0xac82, 0x194d, 0x1cb3, 0x42db, 0xba49, 0x41dd, 0x40b3, 0x1c57, 0x43c3, 0xbf9c, 0x1d84, 0xb2bd, 0xb2c2, 0xbfe2, 0x1df6, 0x405c, 0x4022, 0x4173, 0x423f, 0x40ce, 0x4198, 0x42d3, 0x1cac, 0xbf65, 0x42bf, 0xba1c, 0x1889, 0x42c2, 0x4770, 0xe7fe + ], + StartRegs = [0xaa459540, 0xb7417607, 0x90b1ad8e, 0x16822de0, 0x187003f9, 0x872131ae, 0x3224d4e1, 0x42eca858, 0x011e7d28, 0x6dc708e1, 0xb65556a7, 0xb63bce08, 0xc50698a6, 0x40eb158e, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x023ec6b9, 0x0080b091, 0x00000060, 0xfee09ca6, 0x00006364, 0x00006362, 0x00000000, 0x00006362, 0x011f635a, 0xc060e558, 0xc060e558, 0x011f635a, 0x6dc72045, 0x00028578, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xbac5, 0x1cc4, 0x3c3f, 0x43b2, 0x408c, 0x4133, 0x4354, 0x4190, 0xbf13, 0x4393, 0xba2e, 0x41f1, 0xb2db, 0xaaa2, 0x4338, 0xbf80, 0xba55, 0x211b, 0x37fa, 0x407b, 0x4103, 0x3bfe, 0xb08f, 0xbf09, 0x413b, 0xa520, 0x4223, 0x1e36, 0xb047, 0x4388, 0x44ed, 0x43b3, 0x180a, 0x41fd, 0x1940, 0x4037, 0x4136, 0x4075, 0xa15f, 0x3b50, 0xb2e2, 0x0a6b, 0x343e, 0xb0b8, 0xae5e, 0x1666, 0xa2f2, 0x42fa, 0x4045, 0xbf3b, 0x4490, 0xb250, 0x4197, 0x406f, 0x1dd6, 0xa912, 0x41b6, 0xa73c, 0x41a3, 0xbf70, 0x40be, 0x1c04, 0x42b0, 0x2e98, 0x27d6, 0xba6a, 0x1eed, 0xb21d, 0x05ea, 0xbfa8, 0xa64d, 0x41e5, 0x42f8, 0x4241, 0xbf90, 0x40b6, 0x4301, 0x3ef6, 0x2451, 0xb076, 0xbf6e, 0x45a5, 0x1fc7, 0x2e04, 0x2934, 0x4098, 0x42e1, 0x102b, 0xbfcb, 0x2cb4, 0xb2ca, 0x1679, 0x2d5a, 0xba39, 0xb280, 0xa5d9, 0x1f1e, 0x3bd4, 0xb20d, 0x4089, 0xba3f, 0x0ef3, 0x392f, 0x40b4, 0xba51, 0x44c8, 0x4340, 0x402b, 0x4400, 0xbf3c, 0x4655, 0x4011, 0xa8bd, 0x057f, 0x432a, 0x1827, 0x434b, 0xbfab, 0xb25c, 0x1467, 0x4101, 0x40b2, 0x43e0, 0x43e1, 0x404c, 0x46bc, 0xb23b, 0x3c33, 0x081d, 0xb006, 0xbaca, 0xb2dc, 0xb202, 0xa346, 0x43a2, 0xb072, 0x4092, 0x1e9d, 0xa2b5, 0x4111, 0xbfac, 0xaf78, 0x2c58, 0x1f71, 0xa7c8, 0xb2ac, 0x3fd4, 0x45cb, 0x44b2, 0x196d, 0x4007, 0x42b5, 0x1953, 0x4049, 0xb0d6, 0xb2e3, 0x4384, 0x1f22, 0x163d, 0xb288, 0xba2f, 0x4226, 0xb292, 0xbf66, 0xba2b, 0xbac8, 0xb0fa, 0xb079, 0x1205, 0xb2f9, 0x43de, 0x3cff, 0x424e, 0x40e0, 0x0cf1, 0x4073, 0x4390, 0x4082, 0x4000, 0x4084, 0xabf0, 0xabd0, 0x0886, 0x466a, 0x41ca, 0xb0ed, 0xb2ec, 0x41fc, 0xbf4b, 0x4478, 0xba51, 0xb2df, 0x419b, 0x1e34, 0xb2f8, 0xbf49, 0xaa3d, 0x41c6, 0x41a3, 0x1aba, 0x40b2, 0x44bd, 0x3d3a, 0xb2bf, 0x28a6, 0x4012, 0x438e, 0x43bc, 0x0ad5, 0xbaca, 0xbf5e, 0x4445, 0x42dc, 0xba1a, 0xa19c, 0x42c9, 0xbfd5, 0x40a1, 0x4048, 0x1893, 0xabd3, 0x404f, 0x4244, 0x4187, 0x4621, 0x4330, 0xb01f, 0x46d3, 0x0861, 0xb2e6, 0x415f, 0x3a61, 0xb24d, 0x1e93, 0x1bac, 0x42d8, 0xb280, 0x40af, 0x40b7, 0x4045, 0xbfbf, 0x40ec, 0xba4c, 0x4494, 0x1454, 0x3538, 0xb2c8, 0xba51, 0x0e63, 0xb276, 0x1d0e, 0x20ee, 0x4337, 0x4204, 0x401e, 0x43b4, 0xb23f, 0x12a9, 0x229b, 0x44ed, 0x444d, 0x407a, 0x1ec5, 0x45c4, 0xba1a, 0xbfc3, 0x3dad, 0x40f6, 0x4085, 0x2377, 0x4418, 0x43a7, 0x2f7d, 0x4071, 0xbfaa, 0x129b, 0xbae5, 0x4691, 0x1be4, 0x1d41, 0x43ce, 0x35f0, 0x1bda, 0x411e, 0xba1a, 0xb2dc, 0x40f8, 0xa3d4, 0x431c, 0x4368, 0xba34, 0x1c65, 0xba13, 0x439f, 0x1b26, 0x4477, 0x40e3, 0x43a2, 0xbf00, 0xaab3, 0xba61, 0x43ab, 0xbf19, 0x4145, 0x40af, 0x182b, 0xb2b4, 0xba74, 0xb0a9, 0x4111, 0x448c, 0x4107, 0x4069, 0x0494, 0x41ef, 0x1af8, 0x42c0, 0x424d, 0x40a4, 0x43da, 0x4246, 0xb260, 0x41cb, 0x403a, 0x424c, 0xba33, 0x43a4, 0x37d0, 0x4390, 0x189b, 0xb2a0, 0xb052, 0xbf83, 0xa25c, 0x24d7, 0xb01e, 0x34d1, 0x3654, 0xb239, 0x1874, 0xba5e, 0xb27a, 0xb24e, 0x406b, 0x43a9, 0x45e2, 0xbafa, 0x4258, 0x393e, 0xbf7b, 0xb2d2, 0xa24e, 0xb293, 0x4027, 0x4268, 0xbf60, 0x4100, 0xb08b, 0x4062, 0x16d0, 0xbf71, 0x4132, 0x4398, 0x41d6, 0x4074, 0x059c, 0x437d, 0xbaf1, 0x400f, 0x4239, 0x0f8a, 0x4387, 0x1e07, 0x40b2, 0xb0a9, 0x4168, 0x43f8, 0xbf84, 0x0189, 0x1606, 0xb0fe, 0x41fa, 0xbfc5, 0x418e, 0x1a73, 0x42bf, 0x4269, 0x41b7, 0xbf95, 0x1abf, 0xac8e, 0x41b7, 0x4249, 0x41e2, 0xb06d, 0x186f, 0x4097, 0x4333, 0x4223, 0x424e, 0x46c4, 0x435b, 0x1c82, 0x416c, 0x40f2, 0xb000, 0xb09b, 0x434a, 0xbac7, 0x4255, 0x365a, 0xb27e, 0x4223, 0xbf2a, 0x4113, 0x411f, 0x4234, 0x3feb, 0xb2bf, 0x436a, 0xb0cd, 0x18e6, 0xa251, 0xbf72, 0x196c, 0xbac9, 0x190f, 0xb065, 0x4222, 0xbf9f, 0x0e34, 0xb234, 0x04ae, 0x401a, 0x19e3, 0xa8be, 0xba60, 0xb0b5, 0xbfd6, 0x4288, 0x375c, 0xb2d6, 0x4269, 0x419e, 0x46c5, 0x228a, 0x467e, 0xba01, 0x2f41, 0x415e, 0xb0d3, 0xb0de, 0x306a, 0x41b2, 0xb251, 0x432f, 0x430c, 0x189f, 0xbf69, 0x4061, 0x4423, 0x0dcf, 0xb272, 0x43e9, 0xa0e9, 0x03b4, 0x4606, 0xba5c, 0x42e5, 0x442d, 0x428f, 0x4044, 0x2c64, 0x4188, 0x4250, 0xa133, 0xbfe1, 0x4467, 0x4379, 0xb209, 0x43ef, 0x10af, 0x42b5, 0x43cd, 0xbad7, 0x4385, 0x1434, 0x4371, 0x44a9, 0xbaff, 0xb2c5, 0xb028, 0x46b1, 0x249e, 0x1a7c, 0x3608, 0x1561, 0x19da, 0x420f, 0x38a2, 0xa417, 0xbf8f, 0x1805, 0x18f3, 0x2abc, 0x44d3, 0xb210, 0x422d, 0xb29e, 0xb2d8, 0x4463, 0x4148, 0xa528, 0x407c, 0x40a0, 0x433e, 0xbfc1, 0x43dc, 0x38b7, 0xb232, 0x43f0, 0x3de3, 0x3077, 0xbf9d, 0x3ccd, 0xb0be, 0xb2c7, 0xba66, 0x420c, 0xb21e, 0x22d8, 0x2e67, 0xba0c, 0x4293, 0x2f4a, 0xba64, 0x413f, 0x1a2d, 0x4177, 0x424a, 0x4258, 0x4280, 0xa986, 0x3839, 0x4171, 0xb055, 0x4330, 0x4233, 0x41a5, 0x1f63, 0xbf78, 0x43c6, 0xb24c, 0x4199, 0xb2bd, 0x42a6, 0x0c98, 0x1f23, 0xb0ce, 0x4159, 0x1e07, 0xbad3, 0xbae3, 0x42db, 0x41bc, 0xb227, 0xba6d, 0x42f3, 0xbf52, 0xb0f4, 0x45c9, 0x4358, 0x4012, 0x411e, 0x41e5, 0x0b04, 0x41af, 0x43d1, 0xbf1e, 0x2603, 0x466d, 0xba17, 0x1fb1, 0x4363, 0xb21e, 0x4221, 0xb093, 0xbadd, 0xba2c, 0xb2a4, 0x43a0, 0xb2f0, 0xb221, 0x4601, 0xbf2b, 0x4629, 0xb07b, 0x0cb6, 0xb262, 0x439e, 0x40d0, 0xb02b, 0x337d, 0xbf03, 0x4683, 0xba7e, 0x18b9, 0x425b, 0xb0e9, 0x467f, 0x22c2, 0xbfba, 0x400a, 0x426b, 0x43b5, 0x3e16, 0x417e, 0xa4af, 0x40c7, 0x4379, 0x4079, 0x2d9d, 0x4374, 0x4333, 0x412e, 0x2fb4, 0xbf70, 0x4295, 0xae48, 0x1be3, 0x41f9, 0xbfd8, 0xb074, 0x4275, 0x45b5, 0x4133, 0x40a1, 0x402a, 0x405f, 0xbfbd, 0x423b, 0x463c, 0xba19, 0x439b, 0x3b6f, 0xb23f, 0x0f1d, 0xba56, 0xb261, 0xba54, 0xa2ae, 0x46bd, 0x43f6, 0x4017, 0xb2b0, 0x4435, 0x40bd, 0x1e76, 0x413e, 0x410b, 0x411b, 0x1a0e, 0x12dc, 0x1d50, 0x42d7, 0x420f, 0x40e3, 0xb2d6, 0xbfa6, 0xb242, 0xb2eb, 0x40e3, 0x4368, 0x24cc, 0x455d, 0x06b0, 0xbf49, 0xb0a0, 0x3dec, 0xba24, 0x432a, 0x4296, 0x40f9, 0xbff0, 0xa816, 0xb27b, 0x4053, 0xb095, 0x42a4, 0x46e2, 0x19c6, 0x421d, 0x406d, 0xbfc1, 0x4226, 0x4101, 0xbafc, 0x427e, 0x29ba, 0x2f83, 0x41b6, 0x4315, 0x4252, 0xbfa0, 0x45f0, 0x0cbd, 0x40dd, 0x1a3c, 0x43c3, 0x4020, 0xbacd, 0x414d, 0x41e7, 0x4323, 0xb25a, 0x1983, 0x17c3, 0xbf8a, 0x40ab, 0x4601, 0x44f9, 0x4080, 0x3d43, 0x09f7, 0x43de, 0x4637, 0x4052, 0x40dc, 0xbaeb, 0x446a, 0x1e28, 0x4007, 0x359a, 0x45ae, 0xab99, 0x23d8, 0x1cb7, 0xb29f, 0x41c3, 0x4463, 0xbf4f, 0x1f1a, 0x42b4, 0xbacd, 0xb27c, 0xb25b, 0x1aa8, 0xadce, 0xbfd0, 0x352d, 0x4383, 0xb26b, 0x43c0, 0xb201, 0x425c, 0x4356, 0x40a4, 0x43f7, 0x40f8, 0xbf6a, 0x4149, 0x3093, 0xba79, 0xba61, 0x431d, 0x1bb2, 0x405d, 0x09e3, 0x43c3, 0xb0da, 0x4116, 0x4561, 0x4094, 0xbfe0, 0xba18, 0xbaf1, 0xbf8c, 0xb225, 0x12db, 0x1aa6, 0x40f3, 0x327f, 0xb2c3, 0x15eb, 0xb22c, 0x27c4, 0xb229, 0x4015, 0xa837, 0xa0aa, 0x4045, 0x44c9, 0xb2cd, 0x416d, 0xbf58, 0x441a, 0xba16, 0x44aa, 0x1be5, 0xb2dd, 0x456e, 0x2da2, 0x4485, 0x3a61, 0x43d4, 0x127d, 0x0f03, 0x4046, 0xa7c2, 0x43ba, 0x422d, 0xb2f8, 0xa357, 0x40bc, 0x1f75, 0xa5db, 0xbf90, 0x42a1, 0x41bc, 0xbf87, 0x1bc0, 0xbf60, 0x3130, 0x40a2, 0x416d, 0x4171, 0x43d6, 0x180c, 0x46c4, 0x1efb, 0xbfad, 0x118b, 0xb211, 0x41cd, 0xba1f, 0xa45a, 0x400a, 0xbfc1, 0xba49, 0x4103, 0x4212, 0xb20b, 0x42d7, 0x42e0, 0x413a, 0xba68, 0x42d4, 0x4241, 0x41b2, 0x427f, 0x42e9, 0xbfa7, 0xb09c, 0x20ae, 0x3704, 0xb2ce, 0x1f73, 0xa18a, 0xbf80, 0x4266, 0xb0d8, 0x419a, 0xbf41, 0x4270, 0x1810, 0x4264, 0x39da, 0x1d65, 0x41a7, 0xa97c, 0x1288, 0xba61, 0x0e71, 0x425c, 0x41e5, 0x4542, 0x42fe, 0x4183, 0xb283, 0x401d, 0x00d1, 0x4232, 0x4246, 0x226e, 0x1918, 0x4299, 0x15ac, 0xbfad, 0x1ce1, 0x2a0a, 0x40a6, 0xb2fd, 0x3635, 0x1933, 0x412c, 0x1439, 0xa558, 0x4220, 0xbf33, 0x43c6, 0x416d, 0x26aa, 0xb213, 0x44e4, 0xbfe4, 0x29dc, 0x1d40, 0x42a2, 0x1ea9, 0x3f4b, 0x2e37, 0xb0e2, 0x0098, 0x427a, 0x4347, 0xbfe0, 0xb0a6, 0x053b, 0xb236, 0xba79, 0x444d, 0x429b, 0xbf94, 0xba27, 0xb2a0, 0x42aa, 0xb2e1, 0x43d0, 0xbf90, 0xba6b, 0xba4d, 0xa3ce, 0xb266, 0x43e6, 0x23cf, 0x422e, 0x4102, 0xaaf3, 0xa539, 0x419a, 0x137f, 0x45d8, 0x4067, 0xbfc2, 0x40f6, 0x416f, 0x08f8, 0x1f01, 0xb22b, 0x40a3, 0x40f9, 0x3a0e, 0x4370, 0xb2ad, 0x437a, 0x16d6, 0x0960, 0x1f6d, 0xa78d, 0x0385, 0xb2c2, 0x41cf, 0xb2f5, 0x1f83, 0xbaef, 0x4077, 0x1b8c, 0xba12, 0x4386, 0x40d0, 0xbf12, 0x40a8, 0xb237, 0x4237, 0xba4f, 0x4296, 0x45c8, 0x1f18, 0x1d76, 0x43ab, 0x3e32, 0x43f0, 0xbf72, 0x1a78, 0x1b64, 0x4028, 0x40cf, 0x43bb, 0x1f2c, 0x438f, 0x1fb8, 0x4282, 0x4669, 0x41d5, 0x1db5, 0xbafd, 0x41d4, 0x11c4, 0x405f, 0x1fb3, 0xb24b, 0x034f, 0x4345, 0x0970, 0x44fd, 0xb06b, 0xbf87, 0xa48d, 0x4492, 0xb095, 0x40b4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xec6fcb87, 0x37fe5171, 0x476101c9, 0xb4b6dc30, 0x961e2dee, 0xdd91c1a4, 0xedf2ecd8, 0xdc6fc622, 0x228a66a9, 0x3398789a, 0xa6476515, 0xda1e950b, 0x49ed8832, 0xb877df50, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x07fffffe, 0x0000285e, 0x00000000, 0x0000005e, 0x00001a14, 0x00000000, 0xffffffd3, 0x050bc000, 0x5622f36b, 0x00002e90, 0x5622f36b, 0xa6476511, 0xac45e6d6, 0x000041e6, 0x00000000, 0x200001d0 }, + Instructions = [0xbac5, 0x1cc4, 0x3c3f, 0x43b2, 0x408c, 0x4133, 0x4354, 0x4190, 0xbf13, 0x4393, 0xba2e, 0x41f1, 0xb2db, 0xaaa2, 0x4338, 0xbf80, 0xba55, 0x211b, 0x37fa, 0x407b, 0x4103, 0x3bfe, 0xb08f, 0xbf09, 0x413b, 0xa520, 0x4223, 0x1e36, 0xb047, 0x4388, 0x44ed, 0x43b3, 0x180a, 0x41fd, 0x1940, 0x4037, 0x4136, 0x4075, 0xa15f, 0x3b50, 0xb2e2, 0x0a6b, 0x343e, 0xb0b8, 0xae5e, 0x1666, 0xa2f2, 0x42fa, 0x4045, 0xbf3b, 0x4490, 0xb250, 0x4197, 0x406f, 0x1dd6, 0xa912, 0x41b6, 0xa73c, 0x41a3, 0xbf70, 0x40be, 0x1c04, 0x42b0, 0x2e98, 0x27d6, 0xba6a, 0x1eed, 0xb21d, 0x05ea, 0xbfa8, 0xa64d, 0x41e5, 0x42f8, 0x4241, 0xbf90, 0x40b6, 0x4301, 0x3ef6, 0x2451, 0xb076, 0xbf6e, 0x45a5, 0x1fc7, 0x2e04, 0x2934, 0x4098, 0x42e1, 0x102b, 0xbfcb, 0x2cb4, 0xb2ca, 0x1679, 0x2d5a, 0xba39, 0xb280, 0xa5d9, 0x1f1e, 0x3bd4, 0xb20d, 0x4089, 0xba3f, 0x0ef3, 0x392f, 0x40b4, 0xba51, 0x44c8, 0x4340, 0x402b, 0x4400, 0xbf3c, 0x4655, 0x4011, 0xa8bd, 0x057f, 0x432a, 0x1827, 0x434b, 0xbfab, 0xb25c, 0x1467, 0x4101, 0x40b2, 0x43e0, 0x43e1, 0x404c, 0x46bc, 0xb23b, 0x3c33, 0x081d, 0xb006, 0xbaca, 0xb2dc, 0xb202, 0xa346, 0x43a2, 0xb072, 0x4092, 0x1e9d, 0xa2b5, 0x4111, 0xbfac, 0xaf78, 0x2c58, 0x1f71, 0xa7c8, 0xb2ac, 0x3fd4, 0x45cb, 0x44b2, 0x196d, 0x4007, 0x42b5, 0x1953, 0x4049, 0xb0d6, 0xb2e3, 0x4384, 0x1f22, 0x163d, 0xb288, 0xba2f, 0x4226, 0xb292, 0xbf66, 0xba2b, 0xbac8, 0xb0fa, 0xb079, 0x1205, 0xb2f9, 0x43de, 0x3cff, 0x424e, 0x40e0, 0x0cf1, 0x4073, 0x4390, 0x4082, 0x4000, 0x4084, 0xabf0, 0xabd0, 0x0886, 0x466a, 0x41ca, 0xb0ed, 0xb2ec, 0x41fc, 0xbf4b, 0x4478, 0xba51, 0xb2df, 0x419b, 0x1e34, 0xb2f8, 0xbf49, 0xaa3d, 0x41c6, 0x41a3, 0x1aba, 0x40b2, 0x44bd, 0x3d3a, 0xb2bf, 0x28a6, 0x4012, 0x438e, 0x43bc, 0x0ad5, 0xbaca, 0xbf5e, 0x4445, 0x42dc, 0xba1a, 0xa19c, 0x42c9, 0xbfd5, 0x40a1, 0x4048, 0x1893, 0xabd3, 0x404f, 0x4244, 0x4187, 0x4621, 0x4330, 0xb01f, 0x46d3, 0x0861, 0xb2e6, 0x415f, 0x3a61, 0xb24d, 0x1e93, 0x1bac, 0x42d8, 0xb280, 0x40af, 0x40b7, 0x4045, 0xbfbf, 0x40ec, 0xba4c, 0x4494, 0x1454, 0x3538, 0xb2c8, 0xba51, 0x0e63, 0xb276, 0x1d0e, 0x20ee, 0x4337, 0x4204, 0x401e, 0x43b4, 0xb23f, 0x12a9, 0x229b, 0x44ed, 0x444d, 0x407a, 0x1ec5, 0x45c4, 0xba1a, 0xbfc3, 0x3dad, 0x40f6, 0x4085, 0x2377, 0x4418, 0x43a7, 0x2f7d, 0x4071, 0xbfaa, 0x129b, 0xbae5, 0x4691, 0x1be4, 0x1d41, 0x43ce, 0x35f0, 0x1bda, 0x411e, 0xba1a, 0xb2dc, 0x40f8, 0xa3d4, 0x431c, 0x4368, 0xba34, 0x1c65, 0xba13, 0x439f, 0x1b26, 0x4477, 0x40e3, 0x43a2, 0xbf00, 0xaab3, 0xba61, 0x43ab, 0xbf19, 0x4145, 0x40af, 0x182b, 0xb2b4, 0xba74, 0xb0a9, 0x4111, 0x448c, 0x4107, 0x4069, 0x0494, 0x41ef, 0x1af8, 0x42c0, 0x424d, 0x40a4, 0x43da, 0x4246, 0xb260, 0x41cb, 0x403a, 0x424c, 0xba33, 0x43a4, 0x37d0, 0x4390, 0x189b, 0xb2a0, 0xb052, 0xbf83, 0xa25c, 0x24d7, 0xb01e, 0x34d1, 0x3654, 0xb239, 0x1874, 0xba5e, 0xb27a, 0xb24e, 0x406b, 0x43a9, 0x45e2, 0xbafa, 0x4258, 0x393e, 0xbf7b, 0xb2d2, 0xa24e, 0xb293, 0x4027, 0x4268, 0xbf60, 0x4100, 0xb08b, 0x4062, 0x16d0, 0xbf71, 0x4132, 0x4398, 0x41d6, 0x4074, 0x059c, 0x437d, 0xbaf1, 0x400f, 0x4239, 0x0f8a, 0x4387, 0x1e07, 0x40b2, 0xb0a9, 0x4168, 0x43f8, 0xbf84, 0x0189, 0x1606, 0xb0fe, 0x41fa, 0xbfc5, 0x418e, 0x1a73, 0x42bf, 0x4269, 0x41b7, 0xbf95, 0x1abf, 0xac8e, 0x41b7, 0x4249, 0x41e2, 0xb06d, 0x186f, 0x4097, 0x4333, 0x4223, 0x424e, 0x46c4, 0x435b, 0x1c82, 0x416c, 0x40f2, 0xb000, 0xb09b, 0x434a, 0xbac7, 0x4255, 0x365a, 0xb27e, 0x4223, 0xbf2a, 0x4113, 0x411f, 0x4234, 0x3feb, 0xb2bf, 0x436a, 0xb0cd, 0x18e6, 0xa251, 0xbf72, 0x196c, 0xbac9, 0x190f, 0xb065, 0x4222, 0xbf9f, 0x0e34, 0xb234, 0x04ae, 0x401a, 0x19e3, 0xa8be, 0xba60, 0xb0b5, 0xbfd6, 0x4288, 0x375c, 0xb2d6, 0x4269, 0x419e, 0x46c5, 0x228a, 0x467e, 0xba01, 0x2f41, 0x415e, 0xb0d3, 0xb0de, 0x306a, 0x41b2, 0xb251, 0x432f, 0x430c, 0x189f, 0xbf69, 0x4061, 0x4423, 0x0dcf, 0xb272, 0x43e9, 0xa0e9, 0x03b4, 0x4606, 0xba5c, 0x42e5, 0x442d, 0x428f, 0x4044, 0x2c64, 0x4188, 0x4250, 0xa133, 0xbfe1, 0x4467, 0x4379, 0xb209, 0x43ef, 0x10af, 0x42b5, 0x43cd, 0xbad7, 0x4385, 0x1434, 0x4371, 0x44a9, 0xbaff, 0xb2c5, 0xb028, 0x46b1, 0x249e, 0x1a7c, 0x3608, 0x1561, 0x19da, 0x420f, 0x38a2, 0xa417, 0xbf8f, 0x1805, 0x18f3, 0x2abc, 0x44d3, 0xb210, 0x422d, 0xb29e, 0xb2d8, 0x4463, 0x4148, 0xa528, 0x407c, 0x40a0, 0x433e, 0xbfc1, 0x43dc, 0x38b7, 0xb232, 0x43f0, 0x3de3, 0x3077, 0xbf9d, 0x3ccd, 0xb0be, 0xb2c7, 0xba66, 0x420c, 0xb21e, 0x22d8, 0x2e67, 0xba0c, 0x4293, 0x2f4a, 0xba64, 0x413f, 0x1a2d, 0x4177, 0x424a, 0x4258, 0x4280, 0xa986, 0x3839, 0x4171, 0xb055, 0x4330, 0x4233, 0x41a5, 0x1f63, 0xbf78, 0x43c6, 0xb24c, 0x4199, 0xb2bd, 0x42a6, 0x0c98, 0x1f23, 0xb0ce, 0x4159, 0x1e07, 0xbad3, 0xbae3, 0x42db, 0x41bc, 0xb227, 0xba6d, 0x42f3, 0xbf52, 0xb0f4, 0x45c9, 0x4358, 0x4012, 0x411e, 0x41e5, 0x0b04, 0x41af, 0x43d1, 0xbf1e, 0x2603, 0x466d, 0xba17, 0x1fb1, 0x4363, 0xb21e, 0x4221, 0xb093, 0xbadd, 0xba2c, 0xb2a4, 0x43a0, 0xb2f0, 0xb221, 0x4601, 0xbf2b, 0x4629, 0xb07b, 0x0cb6, 0xb262, 0x439e, 0x40d0, 0xb02b, 0x337d, 0xbf03, 0x4683, 0xba7e, 0x18b9, 0x425b, 0xb0e9, 0x467f, 0x22c2, 0xbfba, 0x400a, 0x426b, 0x43b5, 0x3e16, 0x417e, 0xa4af, 0x40c7, 0x4379, 0x4079, 0x2d9d, 0x4374, 0x4333, 0x412e, 0x2fb4, 0xbf70, 0x4295, 0xae48, 0x1be3, 0x41f9, 0xbfd8, 0xb074, 0x4275, 0x45b5, 0x4133, 0x40a1, 0x402a, 0x405f, 0xbfbd, 0x423b, 0x463c, 0xba19, 0x439b, 0x3b6f, 0xb23f, 0x0f1d, 0xba56, 0xb261, 0xba54, 0xa2ae, 0x46bd, 0x43f6, 0x4017, 0xb2b0, 0x4435, 0x40bd, 0x1e76, 0x413e, 0x410b, 0x411b, 0x1a0e, 0x12dc, 0x1d50, 0x42d7, 0x420f, 0x40e3, 0xb2d6, 0xbfa6, 0xb242, 0xb2eb, 0x40e3, 0x4368, 0x24cc, 0x455d, 0x06b0, 0xbf49, 0xb0a0, 0x3dec, 0xba24, 0x432a, 0x4296, 0x40f9, 0xbff0, 0xa816, 0xb27b, 0x4053, 0xb095, 0x42a4, 0x46e2, 0x19c6, 0x421d, 0x406d, 0xbfc1, 0x4226, 0x4101, 0xbafc, 0x427e, 0x29ba, 0x2f83, 0x41b6, 0x4315, 0x4252, 0xbfa0, 0x45f0, 0x0cbd, 0x40dd, 0x1a3c, 0x43c3, 0x4020, 0xbacd, 0x414d, 0x41e7, 0x4323, 0xb25a, 0x1983, 0x17c3, 0xbf8a, 0x40ab, 0x4601, 0x44f9, 0x4080, 0x3d43, 0x09f7, 0x43de, 0x4637, 0x4052, 0x40dc, 0xbaeb, 0x446a, 0x1e28, 0x4007, 0x359a, 0x45ae, 0xab99, 0x23d8, 0x1cb7, 0xb29f, 0x41c3, 0x4463, 0xbf4f, 0x1f1a, 0x42b4, 0xbacd, 0xb27c, 0xb25b, 0x1aa8, 0xadce, 0xbfd0, 0x352d, 0x4383, 0xb26b, 0x43c0, 0xb201, 0x425c, 0x4356, 0x40a4, 0x43f7, 0x40f8, 0xbf6a, 0x4149, 0x3093, 0xba79, 0xba61, 0x431d, 0x1bb2, 0x405d, 0x09e3, 0x43c3, 0xb0da, 0x4116, 0x4561, 0x4094, 0xbfe0, 0xba18, 0xbaf1, 0xbf8c, 0xb225, 0x12db, 0x1aa6, 0x40f3, 0x327f, 0xb2c3, 0x15eb, 0xb22c, 0x27c4, 0xb229, 0x4015, 0xa837, 0xa0aa, 0x4045, 0x44c9, 0xb2cd, 0x416d, 0xbf58, 0x441a, 0xba16, 0x44aa, 0x1be5, 0xb2dd, 0x456e, 0x2da2, 0x4485, 0x3a61, 0x43d4, 0x127d, 0x0f03, 0x4046, 0xa7c2, 0x43ba, 0x422d, 0xb2f8, 0xa357, 0x40bc, 0x1f75, 0xa5db, 0xbf90, 0x42a1, 0x41bc, 0xbf87, 0x1bc0, 0xbf60, 0x3130, 0x40a2, 0x416d, 0x4171, 0x43d6, 0x180c, 0x46c4, 0x1efb, 0xbfad, 0x118b, 0xb211, 0x41cd, 0xba1f, 0xa45a, 0x400a, 0xbfc1, 0xba49, 0x4103, 0x4212, 0xb20b, 0x42d7, 0x42e0, 0x413a, 0xba68, 0x42d4, 0x4241, 0x41b2, 0x427f, 0x42e9, 0xbfa7, 0xb09c, 0x20ae, 0x3704, 0xb2ce, 0x1f73, 0xa18a, 0xbf80, 0x4266, 0xb0d8, 0x419a, 0xbf41, 0x4270, 0x1810, 0x4264, 0x39da, 0x1d65, 0x41a7, 0xa97c, 0x1288, 0xba61, 0x0e71, 0x425c, 0x41e5, 0x4542, 0x42fe, 0x4183, 0xb283, 0x401d, 0x00d1, 0x4232, 0x4246, 0x226e, 0x1918, 0x4299, 0x15ac, 0xbfad, 0x1ce1, 0x2a0a, 0x40a6, 0xb2fd, 0x3635, 0x1933, 0x412c, 0x1439, 0xa558, 0x4220, 0xbf33, 0x43c6, 0x416d, 0x26aa, 0xb213, 0x44e4, 0xbfe4, 0x29dc, 0x1d40, 0x42a2, 0x1ea9, 0x3f4b, 0x2e37, 0xb0e2, 0x0098, 0x427a, 0x4347, 0xbfe0, 0xb0a6, 0x053b, 0xb236, 0xba79, 0x444d, 0x429b, 0xbf94, 0xba27, 0xb2a0, 0x42aa, 0xb2e1, 0x43d0, 0xbf90, 0xba6b, 0xba4d, 0xa3ce, 0xb266, 0x43e6, 0x23cf, 0x422e, 0x4102, 0xaaf3, 0xa539, 0x419a, 0x137f, 0x45d8, 0x4067, 0xbfc2, 0x40f6, 0x416f, 0x08f8, 0x1f01, 0xb22b, 0x40a3, 0x40f9, 0x3a0e, 0x4370, 0xb2ad, 0x437a, 0x16d6, 0x0960, 0x1f6d, 0xa78d, 0x0385, 0xb2c2, 0x41cf, 0xb2f5, 0x1f83, 0xbaef, 0x4077, 0x1b8c, 0xba12, 0x4386, 0x40d0, 0xbf12, 0x40a8, 0xb237, 0x4237, 0xba4f, 0x4296, 0x45c8, 0x1f18, 0x1d76, 0x43ab, 0x3e32, 0x43f0, 0xbf72, 0x1a78, 0x1b64, 0x4028, 0x40cf, 0x43bb, 0x1f2c, 0x438f, 0x1fb8, 0x4282, 0x4669, 0x41d5, 0x1db5, 0xbafd, 0x41d4, 0x11c4, 0x405f, 0x1fb3, 0xb24b, 0x034f, 0x4345, 0x0970, 0x44fd, 0xb06b, 0xbf87, 0xa48d, 0x4492, 0xb095, 0x40b4, 0x4770, 0xe7fe + ], + StartRegs = [0xec6fcb87, 0x37fe5171, 0x476101c9, 0xb4b6dc30, 0x961e2dee, 0xdd91c1a4, 0xedf2ecd8, 0xdc6fc622, 0x228a66a9, 0x3398789a, 0xa6476515, 0xda1e950b, 0x49ed8832, 0xb877df50, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x07fffffe, 0x0000285e, 0x00000000, 0x0000005e, 0x00001a14, 0x00000000, 0xffffffd3, 0x050bc000, 0x5622f36b, 0x00002e90, 0x5622f36b, 0xa6476511, 0xac45e6d6, 0x000041e6, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x42f8, 0x07a3, 0xba44, 0x42a4, 0xbff0, 0x43f8, 0x2211, 0xb240, 0x40ef, 0x3564, 0xbad8, 0x45a3, 0x41ca, 0xba31, 0x4163, 0xbf47, 0x0b13, 0x42a0, 0xb288, 0x4498, 0x40a7, 0x4388, 0x3a67, 0xba1f, 0x4109, 0x4267, 0xb250, 0x437a, 0x46d4, 0x1fc3, 0x44cb, 0x421f, 0x36f5, 0xba5b, 0x1805, 0x46f8, 0x39bb, 0x170b, 0xb245, 0x4671, 0x40a1, 0x4175, 0xbf8e, 0xaafd, 0x4046, 0x415e, 0x41ad, 0x4342, 0x43b2, 0x182a, 0x1fea, 0xbfce, 0xa26c, 0x4232, 0x4184, 0xbfcb, 0x421c, 0x4350, 0xbf00, 0x420a, 0x4073, 0x434b, 0x43c6, 0xba76, 0xba57, 0x43fa, 0x422a, 0xb0d1, 0x42ff, 0xb2fe, 0x4327, 0xbf52, 0x41ef, 0x0772, 0xb293, 0x4371, 0xb0d4, 0x3aea, 0x3a19, 0xbac1, 0x408c, 0x4177, 0xbf00, 0xa92b, 0xba79, 0x4317, 0x4231, 0x4139, 0xbae8, 0x4107, 0xba54, 0x43c4, 0x4066, 0x1a61, 0xba23, 0xb0b9, 0x41a5, 0x410a, 0x43f4, 0xb027, 0xbfbe, 0xb02e, 0xaa85, 0xa3ba, 0x1c41, 0x3ab9, 0x1700, 0x44db, 0x1e0f, 0x40fc, 0xbaeb, 0xb015, 0xbf5c, 0x433d, 0x3457, 0x408e, 0x443e, 0xa97f, 0x19f0, 0xbf6a, 0x2099, 0x41a3, 0x400d, 0x41b8, 0x42d7, 0x4049, 0x416f, 0x428f, 0xbad9, 0xbf65, 0xb066, 0xa894, 0x18db, 0x11e7, 0x4351, 0x4113, 0x4182, 0xbae8, 0x1ea4, 0x3b34, 0xbf8d, 0xba5c, 0x4198, 0x436b, 0x421d, 0xbaf3, 0x435b, 0x12bd, 0x40cd, 0x2ba7, 0x180e, 0x43a7, 0x409b, 0xba76, 0x20b6, 0xba6e, 0x22f8, 0x184a, 0x41c9, 0x2f18, 0x43bb, 0xb28a, 0x3e03, 0x42bd, 0x1873, 0x4076, 0xbf42, 0xbaf0, 0x40b4, 0x185e, 0xbfaa, 0xbf00, 0x14e1, 0x27ae, 0x16e9, 0x43d5, 0x412c, 0xbf8f, 0x1bc8, 0x4048, 0x403e, 0x176a, 0x4126, 0x469d, 0xba7f, 0x0dc0, 0x4363, 0x436d, 0x1848, 0x1944, 0x422e, 0xb273, 0xbf00, 0x1c50, 0xbfc2, 0xb2b1, 0x421b, 0xbfd0, 0x320b, 0x300e, 0x1cd6, 0xb2ae, 0x433e, 0xb2f0, 0x1f18, 0x2045, 0x3f7d, 0xb2ac, 0x31e0, 0x1882, 0x1c64, 0xb2e2, 0x1d30, 0xbf90, 0x4316, 0x4429, 0x3b53, 0xba3c, 0x1c65, 0x21a2, 0x4246, 0xb070, 0xbfc6, 0xa834, 0xb2c4, 0xa89e, 0xb24a, 0xb292, 0x1341, 0xb20c, 0xbad2, 0x40a1, 0x425e, 0x0227, 0x4294, 0x2458, 0x4278, 0x4130, 0xad67, 0xb2dc, 0x4112, 0x4329, 0xb037, 0xa54d, 0x031f, 0x4105, 0xbfca, 0x400f, 0x233b, 0x4108, 0x1a02, 0xbf44, 0xb0a7, 0x416d, 0xbfdb, 0xb2d8, 0x2ed4, 0x4046, 0x1bd0, 0x1e0e, 0x426a, 0xa1db, 0x1fb1, 0x40b9, 0x4304, 0x424a, 0x02d1, 0xb245, 0x4153, 0x41cb, 0xbf22, 0x43f8, 0x41c8, 0x18fc, 0xa2a2, 0x42cf, 0x411e, 0xbfc6, 0x41db, 0xb2ed, 0xae81, 0x43c9, 0xbaef, 0x40fa, 0x0fd7, 0x430f, 0x072e, 0x3c69, 0xa74f, 0xbfa0, 0xba11, 0x410c, 0x000b, 0x4028, 0x1c4d, 0xba4c, 0x0ca2, 0x0b17, 0x43bd, 0x0149, 0xbfa7, 0x1c43, 0xbae0, 0x4245, 0x14f5, 0xba01, 0x4231, 0x421e, 0x4390, 0xa298, 0x4200, 0x2a55, 0x416f, 0x1a4f, 0x42b7, 0x097a, 0x1d13, 0x2dc8, 0xb2f7, 0x3cbf, 0x4270, 0x1f05, 0xa2c0, 0x057e, 0x40bb, 0xbac7, 0x1fef, 0xbfc6, 0x2651, 0x1ef8, 0x41fb, 0x382d, 0x40b0, 0xa7ea, 0xb034, 0x439a, 0xba7d, 0x4387, 0xb2f0, 0x4319, 0xbad5, 0x4427, 0x19c9, 0xb27d, 0xbf70, 0x2c31, 0x4260, 0x098c, 0x40de, 0x4220, 0x418c, 0x435b, 0x4589, 0xb27d, 0xb290, 0x1d46, 0xbf13, 0xb21d, 0xb2b3, 0x42cc, 0xba42, 0x40c0, 0x02a9, 0x4345, 0x40f4, 0xbfe4, 0x436f, 0xb25e, 0x1f19, 0xba1a, 0x2f2c, 0xb23a, 0xb238, 0xb239, 0x436b, 0x4287, 0xbac9, 0xbaf9, 0x1b47, 0xb245, 0x4338, 0x0077, 0x4179, 0xbae7, 0x431d, 0x4108, 0xb06f, 0x418a, 0x4253, 0xb02a, 0xa84c, 0xbfc2, 0xba77, 0x1a6c, 0x4018, 0x2ed1, 0xabb2, 0x409b, 0xa523, 0x4335, 0x4319, 0x4250, 0xb256, 0xb228, 0xa371, 0x1b22, 0x4350, 0x4273, 0xb09d, 0x18a4, 0x4297, 0x0814, 0xbf58, 0x27b9, 0x22c1, 0xb053, 0xa1b1, 0x414c, 0x1e1a, 0xbfd2, 0x4246, 0x42af, 0x4340, 0x4069, 0x4236, 0x4334, 0x425c, 0x41e5, 0x43ff, 0x4349, 0x3950, 0x237f, 0xba38, 0x42f8, 0x40f8, 0x034e, 0xb2c9, 0xb255, 0xba46, 0x426d, 0xa40b, 0x1ed1, 0xbf19, 0xb26f, 0x158c, 0x43a4, 0x402a, 0xb205, 0xbaf6, 0x45db, 0x4167, 0xb28a, 0x218e, 0x189d, 0x1d70, 0x458c, 0x072f, 0x424e, 0x1eff, 0xbacd, 0xb2ca, 0x45c1, 0x0ef0, 0xac77, 0xbfb2, 0x4099, 0x3d38, 0xad0b, 0xbfa4, 0x07ea, 0x41cb, 0x4262, 0x428f, 0x117b, 0xbfc0, 0x33fb, 0xbfc0, 0x413d, 0x4414, 0x45c1, 0x15b1, 0x01b3, 0x419c, 0x4257, 0xbfc6, 0x1c88, 0x406f, 0xa0e7, 0x4068, 0x4292, 0xb295, 0x1e8d, 0x41e8, 0x3710, 0x42da, 0x4234, 0xb0b0, 0xb06b, 0xbf77, 0x0b97, 0x4060, 0xba38, 0x1cb0, 0xba36, 0x427b, 0x4281, 0x411f, 0xb04b, 0x4026, 0xa71a, 0xbf9f, 0x41a0, 0xba1c, 0xb289, 0xadd3, 0xba4b, 0x43d7, 0xb0c9, 0xbafb, 0xba0a, 0x414e, 0x401b, 0x2a82, 0x4300, 0x43a9, 0xbfdd, 0x40e4, 0x4327, 0x1c8d, 0x1c33, 0x4260, 0x43de, 0x4669, 0x433f, 0xb253, 0x1d24, 0x107c, 0xba13, 0x40f4, 0x43f5, 0xbf90, 0x438e, 0x1c5e, 0x41e1, 0x3f39, 0x1bd4, 0xbfd9, 0xb2c4, 0x418e, 0xb2e7, 0x15b8, 0xac3d, 0x2430, 0xb291, 0x42c9, 0x4003, 0xb2fd, 0x34aa, 0x4680, 0x2a30, 0x42f9, 0x43eb, 0xbf41, 0x41eb, 0x2f26, 0xaa5f, 0x42b7, 0x42e0, 0x3e1d, 0xba1c, 0x4261, 0x0676, 0xbfe8, 0x423c, 0x3bd6, 0xba24, 0xbf70, 0x4152, 0x228a, 0x1848, 0x120b, 0xb262, 0x4309, 0x402e, 0x4106, 0xa354, 0x200b, 0x415e, 0xbfd6, 0x407f, 0x4563, 0x41b5, 0x212e, 0xb0e2, 0xbfb6, 0xae17, 0xb021, 0x2a99, 0xb0cd, 0xa019, 0xb090, 0x42ad, 0x42ad, 0x15ca, 0x43d3, 0x43cf, 0xb2e3, 0x43dd, 0xb2be, 0xac16, 0x41bb, 0x249a, 0x42b0, 0x083b, 0x4435, 0x4349, 0x40b3, 0x463a, 0x1a4e, 0xba55, 0xbf19, 0x40fe, 0x4300, 0xba69, 0x4299, 0x1f04, 0x013a, 0xb276, 0x09e9, 0x0926, 0x402a, 0x46c9, 0x1243, 0x4347, 0x412e, 0xb26f, 0xb2d5, 0x4388, 0x41cb, 0xba1e, 0xbfa2, 0xbac4, 0x4254, 0xb2e2, 0x0ffb, 0x20b7, 0x40b7, 0xb2b1, 0x432e, 0x466a, 0x40b0, 0xb2a7, 0x43c7, 0x18b4, 0x4279, 0xb272, 0x41c0, 0x4561, 0x40bb, 0xb047, 0x1fcc, 0xa0e0, 0x437a, 0xbf36, 0x2ab2, 0xb202, 0xad4d, 0xbad7, 0x0427, 0x1995, 0x31b3, 0x1235, 0x1f89, 0x340f, 0x45b5, 0x4556, 0x1941, 0x4203, 0x4593, 0x4071, 0x40a0, 0x387d, 0x3c40, 0x15de, 0x4215, 0xb219, 0xbf5a, 0x16e9, 0x44ed, 0xa529, 0x1cd4, 0x428b, 0x414a, 0xb2d6, 0x4572, 0xbf41, 0x414d, 0x40e1, 0x1862, 0x44d9, 0x414a, 0x4292, 0x425e, 0xb061, 0x436c, 0x3ba1, 0xb247, 0x40cb, 0xbaed, 0x412e, 0xba4b, 0xb298, 0x431c, 0xbf36, 0x0bfe, 0x3111, 0xba26, 0x1fb8, 0x4215, 0x1841, 0x40b7, 0xb0f5, 0xbf80, 0x42f8, 0x08a3, 0x45ee, 0x40d2, 0xb2f2, 0x33d3, 0xbf0d, 0x4200, 0x4083, 0x42af, 0x1a3b, 0xbfd1, 0xb060, 0xb0a4, 0x3ab1, 0xb23d, 0xba06, 0x4296, 0xb29f, 0x421c, 0xb2bd, 0xbae4, 0x46fa, 0x467e, 0xb019, 0x40f0, 0xb216, 0xbf35, 0x107c, 0xb296, 0x42c3, 0x4418, 0xba0c, 0xb22f, 0x0196, 0x42bc, 0x27fa, 0xa5b8, 0xbf02, 0x407c, 0x2e4e, 0xb28c, 0x091b, 0x1c4e, 0x1a4e, 0x4320, 0x40f6, 0x419b, 0xbac2, 0x43ab, 0xba4e, 0x4331, 0xb2ba, 0x43aa, 0x437f, 0x3ace, 0x27c8, 0xb246, 0x265d, 0x1ceb, 0x2cc8, 0xbff0, 0x2612, 0xbf1b, 0x1fd7, 0x43b0, 0xa909, 0x418b, 0xae30, 0xbfa2, 0x4563, 0x37cc, 0x4396, 0x4303, 0x4129, 0x1d9b, 0xbfcd, 0xb228, 0x43d6, 0x417e, 0xb00c, 0x4142, 0xba08, 0x41b2, 0x4260, 0x4066, 0x4362, 0x4210, 0xbf81, 0x40a6, 0x3a50, 0x40ac, 0x305e, 0xba75, 0x41e3, 0xb09c, 0xbf5a, 0x42e9, 0xbae5, 0x1a1b, 0x418d, 0xa430, 0x41ae, 0x4265, 0x2f35, 0x0f5f, 0x41b7, 0xbf71, 0xb056, 0x3e3a, 0xb2b8, 0x4227, 0x16be, 0xb213, 0x3ea4, 0xbf0c, 0xa864, 0xb25c, 0x42e2, 0x4083, 0x23de, 0x07bc, 0x42ca, 0x42cb, 0x1a5f, 0x3d6f, 0xb266, 0x3a16, 0x43ba, 0x434f, 0x41db, 0xb0b8, 0x427d, 0xb0b7, 0xbfe1, 0x1e76, 0x400e, 0xba71, 0xa62e, 0xb23b, 0x4358, 0x18ae, 0xb292, 0x4254, 0xbfbb, 0xba59, 0xb28e, 0x33cb, 0x46aa, 0x4219, 0xa5a6, 0x1ed8, 0x42d0, 0x150b, 0x4214, 0x42ed, 0x2da7, 0xb22b, 0x0e19, 0x3532, 0x43f0, 0x42a1, 0x439e, 0x40b3, 0x4361, 0x2193, 0x4451, 0x3894, 0x2d7e, 0x43c2, 0x1f33, 0xb0d9, 0x4440, 0xbf39, 0x1af5, 0x3c98, 0x42b7, 0x2c63, 0x1bb5, 0x06ac, 0x415c, 0x4012, 0x0d2f, 0x43cf, 0x43d1, 0x4272, 0x411d, 0x1dbc, 0xa93d, 0x1f13, 0x4222, 0x1904, 0xb24e, 0x44b1, 0xa1e6, 0x4074, 0x1a21, 0x4046, 0x4095, 0x4047, 0xbf8a, 0xba15, 0xb0ae, 0xa64e, 0xb26f, 0x4387, 0x05f8, 0x4548, 0xba5d, 0xb227, 0x407e, 0x43e8, 0xb238, 0x1f65, 0x45a2, 0x40f5, 0xba4a, 0x35d1, 0x403f, 0x4637, 0xbf49, 0x1dc2, 0x128b, 0xa29c, 0x41c0, 0xba48, 0x1adb, 0xb286, 0xb250, 0xb0af, 0x4132, 0x43e3, 0x1895, 0xba7b, 0x169e, 0x113d, 0x4589, 0x1fa1, 0xbfb7, 0x412d, 0x43fe, 0xb232, 0x3c71, 0x2e4a, 0xa936, 0x417e, 0x410c, 0xa245, 0x0a3e, 0x16c3, 0x0a0b, 0x0823, 0x3518, 0xba3e, 0x4135, 0x45f0, 0x412c, 0x4217, 0x4068, 0x4376, 0xb232, 0x416d, 0x42a2, 0x46db, 0x40a5, 0xb269, 0xb070, 0xbfbf, 0x2ff5, 0x2a6b, 0xb2a0, 0x45be, 0x1ab5, 0x1e69, 0x0d07, 0x4018, 0x1fcb, 0x414a, 0xb065, 0x08e8, 0xbaff, 0xbad4, 0x4332, 0xa6fd, 0x441e, 0xba61, 0xbfc2, 0xba53, 0xa9e9, 0x4260, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x618c22bd, 0x5bef2a39, 0xee6c28df, 0x55cc73d5, 0xfa7df287, 0x5074f3f0, 0x2ce650c2, 0xead87231, 0x32e2b3c0, 0xe82f84ef, 0x182094bd, 0x98581b15, 0x94fdcdeb, 0xe3d0b1ff, 0x00000000, 0x800001f0 }, - FinalRegs = new uint[] { 0x00006f62, 0x6525d096, 0x68d99e90, 0xd968909e, 0xffff909e, 0x68da0000, 0x68da1bcc, 0xffffff0f, 0xb3350301, 0xe82f84f5, 0x000000df, 0x010f4008, 0x182094bd, 0x6525ccf2, 0x00000000, 0x000001d0 }, + Instructions = [0x42f8, 0x07a3, 0xba44, 0x42a4, 0xbff0, 0x43f8, 0x2211, 0xb240, 0x40ef, 0x3564, 0xbad8, 0x45a3, 0x41ca, 0xba31, 0x4163, 0xbf47, 0x0b13, 0x42a0, 0xb288, 0x4498, 0x40a7, 0x4388, 0x3a67, 0xba1f, 0x4109, 0x4267, 0xb250, 0x437a, 0x46d4, 0x1fc3, 0x44cb, 0x421f, 0x36f5, 0xba5b, 0x1805, 0x46f8, 0x39bb, 0x170b, 0xb245, 0x4671, 0x40a1, 0x4175, 0xbf8e, 0xaafd, 0x4046, 0x415e, 0x41ad, 0x4342, 0x43b2, 0x182a, 0x1fea, 0xbfce, 0xa26c, 0x4232, 0x4184, 0xbfcb, 0x421c, 0x4350, 0xbf00, 0x420a, 0x4073, 0x434b, 0x43c6, 0xba76, 0xba57, 0x43fa, 0x422a, 0xb0d1, 0x42ff, 0xb2fe, 0x4327, 0xbf52, 0x41ef, 0x0772, 0xb293, 0x4371, 0xb0d4, 0x3aea, 0x3a19, 0xbac1, 0x408c, 0x4177, 0xbf00, 0xa92b, 0xba79, 0x4317, 0x4231, 0x4139, 0xbae8, 0x4107, 0xba54, 0x43c4, 0x4066, 0x1a61, 0xba23, 0xb0b9, 0x41a5, 0x410a, 0x43f4, 0xb027, 0xbfbe, 0xb02e, 0xaa85, 0xa3ba, 0x1c41, 0x3ab9, 0x1700, 0x44db, 0x1e0f, 0x40fc, 0xbaeb, 0xb015, 0xbf5c, 0x433d, 0x3457, 0x408e, 0x443e, 0xa97f, 0x19f0, 0xbf6a, 0x2099, 0x41a3, 0x400d, 0x41b8, 0x42d7, 0x4049, 0x416f, 0x428f, 0xbad9, 0xbf65, 0xb066, 0xa894, 0x18db, 0x11e7, 0x4351, 0x4113, 0x4182, 0xbae8, 0x1ea4, 0x3b34, 0xbf8d, 0xba5c, 0x4198, 0x436b, 0x421d, 0xbaf3, 0x435b, 0x12bd, 0x40cd, 0x2ba7, 0x180e, 0x43a7, 0x409b, 0xba76, 0x20b6, 0xba6e, 0x22f8, 0x184a, 0x41c9, 0x2f18, 0x43bb, 0xb28a, 0x3e03, 0x42bd, 0x1873, 0x4076, 0xbf42, 0xbaf0, 0x40b4, 0x185e, 0xbfaa, 0xbf00, 0x14e1, 0x27ae, 0x16e9, 0x43d5, 0x412c, 0xbf8f, 0x1bc8, 0x4048, 0x403e, 0x176a, 0x4126, 0x469d, 0xba7f, 0x0dc0, 0x4363, 0x436d, 0x1848, 0x1944, 0x422e, 0xb273, 0xbf00, 0x1c50, 0xbfc2, 0xb2b1, 0x421b, 0xbfd0, 0x320b, 0x300e, 0x1cd6, 0xb2ae, 0x433e, 0xb2f0, 0x1f18, 0x2045, 0x3f7d, 0xb2ac, 0x31e0, 0x1882, 0x1c64, 0xb2e2, 0x1d30, 0xbf90, 0x4316, 0x4429, 0x3b53, 0xba3c, 0x1c65, 0x21a2, 0x4246, 0xb070, 0xbfc6, 0xa834, 0xb2c4, 0xa89e, 0xb24a, 0xb292, 0x1341, 0xb20c, 0xbad2, 0x40a1, 0x425e, 0x0227, 0x4294, 0x2458, 0x4278, 0x4130, 0xad67, 0xb2dc, 0x4112, 0x4329, 0xb037, 0xa54d, 0x031f, 0x4105, 0xbfca, 0x400f, 0x233b, 0x4108, 0x1a02, 0xbf44, 0xb0a7, 0x416d, 0xbfdb, 0xb2d8, 0x2ed4, 0x4046, 0x1bd0, 0x1e0e, 0x426a, 0xa1db, 0x1fb1, 0x40b9, 0x4304, 0x424a, 0x02d1, 0xb245, 0x4153, 0x41cb, 0xbf22, 0x43f8, 0x41c8, 0x18fc, 0xa2a2, 0x42cf, 0x411e, 0xbfc6, 0x41db, 0xb2ed, 0xae81, 0x43c9, 0xbaef, 0x40fa, 0x0fd7, 0x430f, 0x072e, 0x3c69, 0xa74f, 0xbfa0, 0xba11, 0x410c, 0x000b, 0x4028, 0x1c4d, 0xba4c, 0x0ca2, 0x0b17, 0x43bd, 0x0149, 0xbfa7, 0x1c43, 0xbae0, 0x4245, 0x14f5, 0xba01, 0x4231, 0x421e, 0x4390, 0xa298, 0x4200, 0x2a55, 0x416f, 0x1a4f, 0x42b7, 0x097a, 0x1d13, 0x2dc8, 0xb2f7, 0x3cbf, 0x4270, 0x1f05, 0xa2c0, 0x057e, 0x40bb, 0xbac7, 0x1fef, 0xbfc6, 0x2651, 0x1ef8, 0x41fb, 0x382d, 0x40b0, 0xa7ea, 0xb034, 0x439a, 0xba7d, 0x4387, 0xb2f0, 0x4319, 0xbad5, 0x4427, 0x19c9, 0xb27d, 0xbf70, 0x2c31, 0x4260, 0x098c, 0x40de, 0x4220, 0x418c, 0x435b, 0x4589, 0xb27d, 0xb290, 0x1d46, 0xbf13, 0xb21d, 0xb2b3, 0x42cc, 0xba42, 0x40c0, 0x02a9, 0x4345, 0x40f4, 0xbfe4, 0x436f, 0xb25e, 0x1f19, 0xba1a, 0x2f2c, 0xb23a, 0xb238, 0xb239, 0x436b, 0x4287, 0xbac9, 0xbaf9, 0x1b47, 0xb245, 0x4338, 0x0077, 0x4179, 0xbae7, 0x431d, 0x4108, 0xb06f, 0x418a, 0x4253, 0xb02a, 0xa84c, 0xbfc2, 0xba77, 0x1a6c, 0x4018, 0x2ed1, 0xabb2, 0x409b, 0xa523, 0x4335, 0x4319, 0x4250, 0xb256, 0xb228, 0xa371, 0x1b22, 0x4350, 0x4273, 0xb09d, 0x18a4, 0x4297, 0x0814, 0xbf58, 0x27b9, 0x22c1, 0xb053, 0xa1b1, 0x414c, 0x1e1a, 0xbfd2, 0x4246, 0x42af, 0x4340, 0x4069, 0x4236, 0x4334, 0x425c, 0x41e5, 0x43ff, 0x4349, 0x3950, 0x237f, 0xba38, 0x42f8, 0x40f8, 0x034e, 0xb2c9, 0xb255, 0xba46, 0x426d, 0xa40b, 0x1ed1, 0xbf19, 0xb26f, 0x158c, 0x43a4, 0x402a, 0xb205, 0xbaf6, 0x45db, 0x4167, 0xb28a, 0x218e, 0x189d, 0x1d70, 0x458c, 0x072f, 0x424e, 0x1eff, 0xbacd, 0xb2ca, 0x45c1, 0x0ef0, 0xac77, 0xbfb2, 0x4099, 0x3d38, 0xad0b, 0xbfa4, 0x07ea, 0x41cb, 0x4262, 0x428f, 0x117b, 0xbfc0, 0x33fb, 0xbfc0, 0x413d, 0x4414, 0x45c1, 0x15b1, 0x01b3, 0x419c, 0x4257, 0xbfc6, 0x1c88, 0x406f, 0xa0e7, 0x4068, 0x4292, 0xb295, 0x1e8d, 0x41e8, 0x3710, 0x42da, 0x4234, 0xb0b0, 0xb06b, 0xbf77, 0x0b97, 0x4060, 0xba38, 0x1cb0, 0xba36, 0x427b, 0x4281, 0x411f, 0xb04b, 0x4026, 0xa71a, 0xbf9f, 0x41a0, 0xba1c, 0xb289, 0xadd3, 0xba4b, 0x43d7, 0xb0c9, 0xbafb, 0xba0a, 0x414e, 0x401b, 0x2a82, 0x4300, 0x43a9, 0xbfdd, 0x40e4, 0x4327, 0x1c8d, 0x1c33, 0x4260, 0x43de, 0x4669, 0x433f, 0xb253, 0x1d24, 0x107c, 0xba13, 0x40f4, 0x43f5, 0xbf90, 0x438e, 0x1c5e, 0x41e1, 0x3f39, 0x1bd4, 0xbfd9, 0xb2c4, 0x418e, 0xb2e7, 0x15b8, 0xac3d, 0x2430, 0xb291, 0x42c9, 0x4003, 0xb2fd, 0x34aa, 0x4680, 0x2a30, 0x42f9, 0x43eb, 0xbf41, 0x41eb, 0x2f26, 0xaa5f, 0x42b7, 0x42e0, 0x3e1d, 0xba1c, 0x4261, 0x0676, 0xbfe8, 0x423c, 0x3bd6, 0xba24, 0xbf70, 0x4152, 0x228a, 0x1848, 0x120b, 0xb262, 0x4309, 0x402e, 0x4106, 0xa354, 0x200b, 0x415e, 0xbfd6, 0x407f, 0x4563, 0x41b5, 0x212e, 0xb0e2, 0xbfb6, 0xae17, 0xb021, 0x2a99, 0xb0cd, 0xa019, 0xb090, 0x42ad, 0x42ad, 0x15ca, 0x43d3, 0x43cf, 0xb2e3, 0x43dd, 0xb2be, 0xac16, 0x41bb, 0x249a, 0x42b0, 0x083b, 0x4435, 0x4349, 0x40b3, 0x463a, 0x1a4e, 0xba55, 0xbf19, 0x40fe, 0x4300, 0xba69, 0x4299, 0x1f04, 0x013a, 0xb276, 0x09e9, 0x0926, 0x402a, 0x46c9, 0x1243, 0x4347, 0x412e, 0xb26f, 0xb2d5, 0x4388, 0x41cb, 0xba1e, 0xbfa2, 0xbac4, 0x4254, 0xb2e2, 0x0ffb, 0x20b7, 0x40b7, 0xb2b1, 0x432e, 0x466a, 0x40b0, 0xb2a7, 0x43c7, 0x18b4, 0x4279, 0xb272, 0x41c0, 0x4561, 0x40bb, 0xb047, 0x1fcc, 0xa0e0, 0x437a, 0xbf36, 0x2ab2, 0xb202, 0xad4d, 0xbad7, 0x0427, 0x1995, 0x31b3, 0x1235, 0x1f89, 0x340f, 0x45b5, 0x4556, 0x1941, 0x4203, 0x4593, 0x4071, 0x40a0, 0x387d, 0x3c40, 0x15de, 0x4215, 0xb219, 0xbf5a, 0x16e9, 0x44ed, 0xa529, 0x1cd4, 0x428b, 0x414a, 0xb2d6, 0x4572, 0xbf41, 0x414d, 0x40e1, 0x1862, 0x44d9, 0x414a, 0x4292, 0x425e, 0xb061, 0x436c, 0x3ba1, 0xb247, 0x40cb, 0xbaed, 0x412e, 0xba4b, 0xb298, 0x431c, 0xbf36, 0x0bfe, 0x3111, 0xba26, 0x1fb8, 0x4215, 0x1841, 0x40b7, 0xb0f5, 0xbf80, 0x42f8, 0x08a3, 0x45ee, 0x40d2, 0xb2f2, 0x33d3, 0xbf0d, 0x4200, 0x4083, 0x42af, 0x1a3b, 0xbfd1, 0xb060, 0xb0a4, 0x3ab1, 0xb23d, 0xba06, 0x4296, 0xb29f, 0x421c, 0xb2bd, 0xbae4, 0x46fa, 0x467e, 0xb019, 0x40f0, 0xb216, 0xbf35, 0x107c, 0xb296, 0x42c3, 0x4418, 0xba0c, 0xb22f, 0x0196, 0x42bc, 0x27fa, 0xa5b8, 0xbf02, 0x407c, 0x2e4e, 0xb28c, 0x091b, 0x1c4e, 0x1a4e, 0x4320, 0x40f6, 0x419b, 0xbac2, 0x43ab, 0xba4e, 0x4331, 0xb2ba, 0x43aa, 0x437f, 0x3ace, 0x27c8, 0xb246, 0x265d, 0x1ceb, 0x2cc8, 0xbff0, 0x2612, 0xbf1b, 0x1fd7, 0x43b0, 0xa909, 0x418b, 0xae30, 0xbfa2, 0x4563, 0x37cc, 0x4396, 0x4303, 0x4129, 0x1d9b, 0xbfcd, 0xb228, 0x43d6, 0x417e, 0xb00c, 0x4142, 0xba08, 0x41b2, 0x4260, 0x4066, 0x4362, 0x4210, 0xbf81, 0x40a6, 0x3a50, 0x40ac, 0x305e, 0xba75, 0x41e3, 0xb09c, 0xbf5a, 0x42e9, 0xbae5, 0x1a1b, 0x418d, 0xa430, 0x41ae, 0x4265, 0x2f35, 0x0f5f, 0x41b7, 0xbf71, 0xb056, 0x3e3a, 0xb2b8, 0x4227, 0x16be, 0xb213, 0x3ea4, 0xbf0c, 0xa864, 0xb25c, 0x42e2, 0x4083, 0x23de, 0x07bc, 0x42ca, 0x42cb, 0x1a5f, 0x3d6f, 0xb266, 0x3a16, 0x43ba, 0x434f, 0x41db, 0xb0b8, 0x427d, 0xb0b7, 0xbfe1, 0x1e76, 0x400e, 0xba71, 0xa62e, 0xb23b, 0x4358, 0x18ae, 0xb292, 0x4254, 0xbfbb, 0xba59, 0xb28e, 0x33cb, 0x46aa, 0x4219, 0xa5a6, 0x1ed8, 0x42d0, 0x150b, 0x4214, 0x42ed, 0x2da7, 0xb22b, 0x0e19, 0x3532, 0x43f0, 0x42a1, 0x439e, 0x40b3, 0x4361, 0x2193, 0x4451, 0x3894, 0x2d7e, 0x43c2, 0x1f33, 0xb0d9, 0x4440, 0xbf39, 0x1af5, 0x3c98, 0x42b7, 0x2c63, 0x1bb5, 0x06ac, 0x415c, 0x4012, 0x0d2f, 0x43cf, 0x43d1, 0x4272, 0x411d, 0x1dbc, 0xa93d, 0x1f13, 0x4222, 0x1904, 0xb24e, 0x44b1, 0xa1e6, 0x4074, 0x1a21, 0x4046, 0x4095, 0x4047, 0xbf8a, 0xba15, 0xb0ae, 0xa64e, 0xb26f, 0x4387, 0x05f8, 0x4548, 0xba5d, 0xb227, 0x407e, 0x43e8, 0xb238, 0x1f65, 0x45a2, 0x40f5, 0xba4a, 0x35d1, 0x403f, 0x4637, 0xbf49, 0x1dc2, 0x128b, 0xa29c, 0x41c0, 0xba48, 0x1adb, 0xb286, 0xb250, 0xb0af, 0x4132, 0x43e3, 0x1895, 0xba7b, 0x169e, 0x113d, 0x4589, 0x1fa1, 0xbfb7, 0x412d, 0x43fe, 0xb232, 0x3c71, 0x2e4a, 0xa936, 0x417e, 0x410c, 0xa245, 0x0a3e, 0x16c3, 0x0a0b, 0x0823, 0x3518, 0xba3e, 0x4135, 0x45f0, 0x412c, 0x4217, 0x4068, 0x4376, 0xb232, 0x416d, 0x42a2, 0x46db, 0x40a5, 0xb269, 0xb070, 0xbfbf, 0x2ff5, 0x2a6b, 0xb2a0, 0x45be, 0x1ab5, 0x1e69, 0x0d07, 0x4018, 0x1fcb, 0x414a, 0xb065, 0x08e8, 0xbaff, 0xbad4, 0x4332, 0xa6fd, 0x441e, 0xba61, 0xbfc2, 0xba53, 0xa9e9, 0x4260, 0x4770, 0xe7fe + ], + StartRegs = [0x618c22bd, 0x5bef2a39, 0xee6c28df, 0x55cc73d5, 0xfa7df287, 0x5074f3f0, 0x2ce650c2, 0xead87231, 0x32e2b3c0, 0xe82f84ef, 0x182094bd, 0x98581b15, 0x94fdcdeb, 0xe3d0b1ff, 0x00000000, 0x800001f0 + ], + FinalRegs = [0x00006f62, 0x6525d096, 0x68d99e90, 0xd968909e, 0xffff909e, 0x68da0000, 0x68da1bcc, 0xffffff0f, 0xb3350301, 0xe82f84f5, 0x000000df, 0x010f4008, 0x182094bd, 0x6525ccf2, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x40a3, 0x4088, 0x431e, 0x40a5, 0xb02c, 0xba79, 0xb24d, 0x40f5, 0x43df, 0x43c1, 0xaef2, 0x4008, 0x414b, 0x41fc, 0xb235, 0xbfc0, 0xafbb, 0x1c05, 0x196a, 0x40b4, 0xb072, 0x38d1, 0xbf43, 0x46b1, 0xa0e6, 0x45a4, 0x4043, 0xbf90, 0x4626, 0xb2fc, 0xbf7e, 0xba61, 0xa1ca, 0x2175, 0xaf95, 0x4312, 0x1d8a, 0x190e, 0xb2df, 0x1698, 0x2d52, 0x1a9a, 0xb0ed, 0x407f, 0xa460, 0x4254, 0xb066, 0xbf89, 0xb0a9, 0xb2b8, 0x1a5d, 0x4194, 0x4211, 0x41a0, 0x40e0, 0x4139, 0x4362, 0x4336, 0x42a4, 0x447b, 0xabbd, 0x443a, 0x4459, 0xaf35, 0xbfb2, 0x45cc, 0x1e31, 0x1b94, 0xb07a, 0xb29e, 0x4212, 0xbae6, 0x427e, 0xb034, 0x2b28, 0x400a, 0x3ca6, 0x43a4, 0xb04a, 0xb248, 0x409a, 0xab1f, 0x4278, 0xb04b, 0x407f, 0x4291, 0xbf75, 0x415f, 0x4087, 0xb298, 0x41d4, 0x423e, 0x1b3f, 0x4206, 0xba6d, 0xb2d7, 0x458c, 0x319d, 0x4222, 0x40c1, 0x43ac, 0x4340, 0x1308, 0x4011, 0x4118, 0x40b3, 0x4379, 0xba4b, 0xb23e, 0xbf74, 0x40b5, 0x3319, 0xb07b, 0x41cb, 0xb2f9, 0x431d, 0x02c4, 0x1996, 0x419a, 0x435b, 0x255c, 0xb2f5, 0x33ad, 0xb04a, 0x4408, 0x0974, 0x42f7, 0x4339, 0xb280, 0x1b82, 0xb247, 0x464c, 0x4211, 0xbf0b, 0x4030, 0x43e6, 0x4087, 0x3611, 0x0981, 0x416e, 0x4315, 0x43c1, 0x2147, 0x4090, 0x4136, 0xbf66, 0x2933, 0x2ecf, 0x43eb, 0xb283, 0x42af, 0x1c96, 0xb09f, 0x41f2, 0xb21c, 0xbf09, 0xb087, 0x4463, 0xbaf1, 0x419d, 0xa7b0, 0xb211, 0x41a6, 0x3f86, 0xba54, 0x3385, 0x03b0, 0xb211, 0x4331, 0xaf96, 0x4119, 0x0c9e, 0x419b, 0xb2dc, 0x43d0, 0xb24c, 0x4042, 0xbf00, 0x4162, 0x1fc3, 0x4189, 0xb25a, 0x06f9, 0xb274, 0xbf6c, 0xbacf, 0x407e, 0x4204, 0x140f, 0x4309, 0x4176, 0x407e, 0x4130, 0x1c8a, 0x4354, 0x2411, 0x2605, 0xb057, 0xbf70, 0x406b, 0x3cd9, 0x437f, 0xa2e1, 0xba57, 0x069e, 0xbf76, 0x46ec, 0xbaf9, 0xb2ae, 0x436a, 0xadd9, 0xb09d, 0x40db, 0x4244, 0x1a39, 0xac08, 0x408d, 0x4021, 0x4263, 0xb281, 0x4418, 0x4116, 0x42f6, 0xa919, 0x1470, 0x1f33, 0x4245, 0x434f, 0x43ff, 0x43a1, 0x0d92, 0x4051, 0x43af, 0x30c5, 0xbf46, 0x425e, 0x4008, 0x4678, 0x42db, 0x1c2c, 0x4410, 0x1c4e, 0x4282, 0xba0d, 0x4075, 0x194f, 0x41ab, 0xb065, 0x1871, 0x412f, 0x0399, 0xa0db, 0xb239, 0x4559, 0x43d6, 0x1faf, 0x411f, 0xb0b7, 0x4606, 0x43c2, 0xbf81, 0x0823, 0x2a43, 0x18c5, 0x1a77, 0xad27, 0x43ff, 0x4212, 0x0e3c, 0x411a, 0x43a6, 0x1916, 0x4394, 0xb225, 0x1eb5, 0x449b, 0x438e, 0x40ca, 0x4623, 0xb2e3, 0x41ef, 0x4493, 0x3e02, 0x4069, 0x1c2b, 0xb234, 0x1e69, 0x41df, 0xb2b8, 0x41d8, 0xbf56, 0x05ad, 0xba1c, 0x42c2, 0x4051, 0x42b2, 0x40f4, 0x43ce, 0x44f0, 0x43f3, 0x4229, 0x213e, 0xb2c2, 0x3200, 0x4214, 0x42b6, 0x005f, 0x4075, 0xb272, 0xbaf8, 0xb224, 0xb29f, 0xbfd5, 0x40c1, 0x438e, 0x43c4, 0x0aa3, 0xa689, 0xb22f, 0x2428, 0x45bd, 0x4004, 0x43f9, 0xb29e, 0x4679, 0xb21b, 0x40bb, 0x4027, 0x40f4, 0x4074, 0xbf7b, 0x45c2, 0x43f6, 0xb2a0, 0x416c, 0xba07, 0x1da5, 0x416e, 0xba1c, 0x406a, 0x0523, 0xa9b7, 0x352b, 0x35c0, 0xbf97, 0xb26c, 0xbf60, 0x40f8, 0xba7a, 0x423f, 0x02f2, 0x4068, 0x3e52, 0x42c7, 0x4050, 0x1d10, 0x4211, 0x42d9, 0x4565, 0xb2a5, 0x416d, 0xba27, 0x420a, 0xb228, 0xbf80, 0xa3ea, 0x437b, 0xb2cf, 0xb2cb, 0x1473, 0xbf7c, 0x4285, 0x41b6, 0x4280, 0x3a9f, 0xba06, 0xba22, 0x3f7e, 0x1822, 0x1663, 0xbf80, 0x182b, 0x1d47, 0x37c4, 0xaa51, 0x1efc, 0xbfb7, 0x43b7, 0xba12, 0xbaf0, 0x40e9, 0xbf80, 0xb09e, 0x4448, 0x1f27, 0x4083, 0xac6a, 0x400e, 0x1c32, 0xba54, 0xba14, 0x249e, 0x3f80, 0x4610, 0x4293, 0x4396, 0x1e57, 0xb23f, 0xb093, 0x4161, 0x42c0, 0x3494, 0x40d5, 0xbf56, 0x1ee5, 0x2143, 0x18b0, 0x4360, 0x46a4, 0x1930, 0xba5a, 0x44d0, 0x1ad6, 0x371e, 0xb2ce, 0x1534, 0xb09c, 0x1b0b, 0x095d, 0x2f9f, 0x1608, 0x40f7, 0xbada, 0x05c1, 0xbf3e, 0xa521, 0xb29a, 0x42af, 0x404a, 0x0f8c, 0x41c9, 0xb089, 0x1a99, 0xba0a, 0x1fc9, 0xb25b, 0x41a2, 0x4109, 0x40b7, 0x364f, 0x2648, 0x011f, 0x4157, 0xbf47, 0xb037, 0x1b4a, 0x4096, 0x41a8, 0x4246, 0xba0f, 0x40f0, 0xb250, 0xbf59, 0x42b7, 0xb251, 0xba5b, 0xb0d1, 0x4208, 0x4103, 0x40a7, 0x4355, 0xb216, 0x4476, 0x1962, 0xb03d, 0xba1a, 0x1928, 0x1f0b, 0xbf71, 0x2d76, 0x40f6, 0x4369, 0x29d5, 0x42f6, 0x1dd5, 0xb25e, 0xaf1a, 0x42fd, 0x40b9, 0x41bb, 0xa259, 0x40b7, 0x45f6, 0x4283, 0xbf3e, 0xba6c, 0xbae8, 0x41cb, 0xbf08, 0x42f3, 0x15e3, 0x1eb6, 0x386c, 0xb090, 0x1d6c, 0x3160, 0x43ca, 0x1a41, 0xb260, 0x4252, 0x3a39, 0xae9f, 0x41cf, 0xb2ae, 0x40ed, 0x4347, 0xb2ae, 0xba31, 0xbfda, 0x43a6, 0x4125, 0xb036, 0x408f, 0xba00, 0x1ddf, 0x4062, 0xb0ba, 0x4176, 0xba23, 0x2c17, 0x42e6, 0x3bc2, 0x43fb, 0x11b5, 0x400e, 0x439d, 0x3079, 0xb0a7, 0xbf7b, 0xb0e1, 0x4271, 0x44d1, 0xbfb0, 0xb028, 0xb015, 0x43d1, 0x4322, 0x1dcf, 0x42cc, 0xbac0, 0x1847, 0xbfd1, 0xb036, 0xb060, 0x2bea, 0x4020, 0x4193, 0x43d5, 0xaa64, 0x41c7, 0x427c, 0x41ec, 0xbf0b, 0x4398, 0x4200, 0x4283, 0x4000, 0x1f81, 0x44d1, 0x42d6, 0x402c, 0x0e29, 0x4606, 0xb0b9, 0x4093, 0x40fa, 0x42b6, 0xba48, 0x43a9, 0xbf72, 0x1aba, 0xbf00, 0x369e, 0xbf00, 0x4109, 0x251e, 0xba6f, 0x40bc, 0x4464, 0x40d4, 0x3776, 0xb2de, 0xb01a, 0xb05d, 0x27ed, 0xb252, 0x368f, 0xb044, 0x45e0, 0xba62, 0x4135, 0xbf23, 0x4188, 0x41f4, 0xb223, 0x418e, 0x40e4, 0x4256, 0xbf01, 0x411b, 0x1f16, 0x4253, 0xbadd, 0x43e0, 0xaeab, 0x4431, 0x24cb, 0x30b8, 0x406e, 0xb0e9, 0x41aa, 0x43a6, 0x438e, 0x4342, 0x4307, 0x419c, 0x4053, 0x4311, 0x41c7, 0x4152, 0x1ba5, 0x41db, 0x42a0, 0x40b8, 0xbf2e, 0xb01c, 0x423b, 0x1d13, 0xb262, 0xba11, 0x1803, 0x433e, 0x287b, 0x1977, 0xb0ba, 0x297d, 0xbf01, 0xb294, 0x40bf, 0x4391, 0x43e8, 0x232d, 0x431a, 0x4228, 0x375a, 0x36d7, 0x424d, 0xbf60, 0x4071, 0x40e8, 0x3242, 0xb0fe, 0x4214, 0x41a3, 0xbf62, 0x2756, 0x40f0, 0xba17, 0x3696, 0x427f, 0xaaa1, 0xbfa9, 0x4285, 0x427c, 0xa783, 0x4369, 0x274e, 0xb299, 0x411c, 0x40f0, 0x073b, 0x40d4, 0x43f7, 0xba1b, 0xb22d, 0x1c83, 0x1f11, 0x4277, 0x32b1, 0xbf52, 0x424b, 0x438f, 0xbfd0, 0x4118, 0x39e7, 0xba37, 0x3e6d, 0x41f3, 0x4239, 0x2daa, 0xbfa6, 0x432e, 0xb015, 0xb2f6, 0xbaf2, 0x4184, 0x4324, 0x1c78, 0xbaf1, 0xba29, 0xbfca, 0x1b4d, 0xb28b, 0x4577, 0x3ade, 0x43b3, 0xbf64, 0x401f, 0x41d7, 0x4060, 0x1be9, 0x4453, 0xba44, 0x37d4, 0x424a, 0xb006, 0x1882, 0xbac4, 0xba5b, 0x3c59, 0x0c92, 0x42a0, 0xba4e, 0x2d9b, 0xbfe4, 0x441b, 0x2199, 0x05fd, 0x43b2, 0xba42, 0x4301, 0x1ec4, 0x4656, 0xb0e4, 0xb06e, 0xbf82, 0x40a6, 0xaebe, 0x30ca, 0x4181, 0x42a4, 0xb24d, 0x4080, 0x43ca, 0x3592, 0x1943, 0x4217, 0x43ee, 0x08c3, 0xb003, 0x2cbd, 0x4412, 0x2e2f, 0x26db, 0x4179, 0x42a4, 0x36d3, 0xbfb2, 0x4386, 0x431c, 0x44ba, 0x4464, 0xb281, 0x40b3, 0x4152, 0xb25b, 0x41f2, 0xb059, 0xb278, 0x0dfe, 0x425f, 0x4215, 0x3ca0, 0x4234, 0xbad2, 0x41f0, 0x3f2d, 0x43ce, 0x4218, 0xbf12, 0x45e9, 0x1a54, 0x1fff, 0xacd6, 0x410e, 0xbf8f, 0xb0e1, 0x352d, 0x1fed, 0x1af4, 0x428e, 0x3c91, 0xb039, 0x4079, 0x4347, 0x3c04, 0x4424, 0x4260, 0xa798, 0x41b9, 0x4033, 0x4238, 0x2419, 0x4227, 0x0d53, 0xb2c3, 0x42d7, 0xbf14, 0x46a5, 0x0852, 0xa387, 0x13d9, 0x41c7, 0x1f38, 0x43e8, 0x1dcc, 0x43e6, 0x465a, 0x419a, 0x4387, 0x4338, 0x43a0, 0x033e, 0xba5d, 0x4176, 0x3d63, 0x3285, 0x1d0b, 0xacee, 0x4105, 0x44e8, 0x3c90, 0xa4a5, 0xbf17, 0x432e, 0x4020, 0x4367, 0x43ee, 0x43f8, 0x3f58, 0x1f04, 0x08fa, 0x43cf, 0xb097, 0xba07, 0xb228, 0x45c4, 0x09ae, 0xbf31, 0x31a7, 0x3a09, 0x42cf, 0x4019, 0x2390, 0x4145, 0x4179, 0x40bd, 0xb243, 0xbf5d, 0x3f0c, 0x3406, 0x1f8a, 0xba3b, 0xbfb5, 0x43b0, 0x3120, 0xb26c, 0xa3b0, 0x4272, 0x465d, 0x3214, 0xba0e, 0x3a60, 0x4230, 0x2d1c, 0x43ea, 0xbf63, 0x43ae, 0x14fa, 0x38d6, 0x423d, 0xac84, 0xb210, 0x402e, 0xb273, 0x441e, 0x43b0, 0xab4e, 0xb275, 0x42c8, 0x41f1, 0xb2ba, 0x42fd, 0x40b9, 0x4244, 0x42ed, 0x420d, 0x4190, 0xba13, 0xba1f, 0x2758, 0x40d7, 0x1012, 0x41f7, 0xbff0, 0xbfaf, 0x1aee, 0x425b, 0x0e1a, 0x3ddb, 0xb2e9, 0xba50, 0x3fd8, 0x1ba9, 0xb002, 0x437d, 0x4279, 0x34fb, 0xba3b, 0x43e3, 0x4185, 0xba1f, 0xa0db, 0x4218, 0x3d58, 0x0f00, 0xb2b0, 0x429f, 0xb063, 0xbf0d, 0xba52, 0xba07, 0xa5c8, 0x409c, 0x431f, 0xb2f9, 0x1ff7, 0xb0e6, 0x463f, 0x3ac2, 0xba14, 0xba7c, 0xbf43, 0xbff0, 0x40b3, 0x2e64, 0xa3a0, 0x1bac, 0xb2c7, 0x1f9a, 0x31d1, 0x387c, 0x1993, 0x4224, 0xba20, 0x4044, 0xb2f2, 0x1983, 0x428f, 0x11fc, 0x00a5, 0xb071, 0x12ae, 0x4007, 0x15cc, 0xbfcf, 0x416e, 0x0667, 0x1b46, 0xb250, 0x4285, 0x41ea, 0xa38d, 0x43dd, 0x43a7, 0xa77b, 0x0711, 0xba66, 0x445c, 0x1b40, 0x4095, 0x41b8, 0x400b, 0x4079, 0x3567, 0x43a6, 0x461d, 0x435d, 0x4036, 0x42fa, 0xa9a6, 0x43b7, 0xb295, 0x427e, 0x4300, 0xbf54, 0xb0f4, 0x2b0b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x36179bbd, 0x4c84b624, 0xf2f6b902, 0xcc71b138, 0x0afbc809, 0xac7ce4df, 0xb01ce320, 0xe9d87f98, 0xc61c700a, 0x6f44ba87, 0x76d17376, 0x6c662875, 0x88e99f9f, 0x5ec4aa7f, 0x00000000, 0x500001f0 }, - FinalRegs = new uint[] { 0xffffffeb, 0x00000415, 0x6000000a, 0x00000000, 0xf16324f3, 0x0000000a, 0xffffe660, 0x000019a0, 0x3cede399, 0xd596226d, 0xe4d0754a, 0xf16324f3, 0x00000132, 0x0000017d, 0x00000000, 0x800001d0 }, + Instructions = [0x40a3, 0x4088, 0x431e, 0x40a5, 0xb02c, 0xba79, 0xb24d, 0x40f5, 0x43df, 0x43c1, 0xaef2, 0x4008, 0x414b, 0x41fc, 0xb235, 0xbfc0, 0xafbb, 0x1c05, 0x196a, 0x40b4, 0xb072, 0x38d1, 0xbf43, 0x46b1, 0xa0e6, 0x45a4, 0x4043, 0xbf90, 0x4626, 0xb2fc, 0xbf7e, 0xba61, 0xa1ca, 0x2175, 0xaf95, 0x4312, 0x1d8a, 0x190e, 0xb2df, 0x1698, 0x2d52, 0x1a9a, 0xb0ed, 0x407f, 0xa460, 0x4254, 0xb066, 0xbf89, 0xb0a9, 0xb2b8, 0x1a5d, 0x4194, 0x4211, 0x41a0, 0x40e0, 0x4139, 0x4362, 0x4336, 0x42a4, 0x447b, 0xabbd, 0x443a, 0x4459, 0xaf35, 0xbfb2, 0x45cc, 0x1e31, 0x1b94, 0xb07a, 0xb29e, 0x4212, 0xbae6, 0x427e, 0xb034, 0x2b28, 0x400a, 0x3ca6, 0x43a4, 0xb04a, 0xb248, 0x409a, 0xab1f, 0x4278, 0xb04b, 0x407f, 0x4291, 0xbf75, 0x415f, 0x4087, 0xb298, 0x41d4, 0x423e, 0x1b3f, 0x4206, 0xba6d, 0xb2d7, 0x458c, 0x319d, 0x4222, 0x40c1, 0x43ac, 0x4340, 0x1308, 0x4011, 0x4118, 0x40b3, 0x4379, 0xba4b, 0xb23e, 0xbf74, 0x40b5, 0x3319, 0xb07b, 0x41cb, 0xb2f9, 0x431d, 0x02c4, 0x1996, 0x419a, 0x435b, 0x255c, 0xb2f5, 0x33ad, 0xb04a, 0x4408, 0x0974, 0x42f7, 0x4339, 0xb280, 0x1b82, 0xb247, 0x464c, 0x4211, 0xbf0b, 0x4030, 0x43e6, 0x4087, 0x3611, 0x0981, 0x416e, 0x4315, 0x43c1, 0x2147, 0x4090, 0x4136, 0xbf66, 0x2933, 0x2ecf, 0x43eb, 0xb283, 0x42af, 0x1c96, 0xb09f, 0x41f2, 0xb21c, 0xbf09, 0xb087, 0x4463, 0xbaf1, 0x419d, 0xa7b0, 0xb211, 0x41a6, 0x3f86, 0xba54, 0x3385, 0x03b0, 0xb211, 0x4331, 0xaf96, 0x4119, 0x0c9e, 0x419b, 0xb2dc, 0x43d0, 0xb24c, 0x4042, 0xbf00, 0x4162, 0x1fc3, 0x4189, 0xb25a, 0x06f9, 0xb274, 0xbf6c, 0xbacf, 0x407e, 0x4204, 0x140f, 0x4309, 0x4176, 0x407e, 0x4130, 0x1c8a, 0x4354, 0x2411, 0x2605, 0xb057, 0xbf70, 0x406b, 0x3cd9, 0x437f, 0xa2e1, 0xba57, 0x069e, 0xbf76, 0x46ec, 0xbaf9, 0xb2ae, 0x436a, 0xadd9, 0xb09d, 0x40db, 0x4244, 0x1a39, 0xac08, 0x408d, 0x4021, 0x4263, 0xb281, 0x4418, 0x4116, 0x42f6, 0xa919, 0x1470, 0x1f33, 0x4245, 0x434f, 0x43ff, 0x43a1, 0x0d92, 0x4051, 0x43af, 0x30c5, 0xbf46, 0x425e, 0x4008, 0x4678, 0x42db, 0x1c2c, 0x4410, 0x1c4e, 0x4282, 0xba0d, 0x4075, 0x194f, 0x41ab, 0xb065, 0x1871, 0x412f, 0x0399, 0xa0db, 0xb239, 0x4559, 0x43d6, 0x1faf, 0x411f, 0xb0b7, 0x4606, 0x43c2, 0xbf81, 0x0823, 0x2a43, 0x18c5, 0x1a77, 0xad27, 0x43ff, 0x4212, 0x0e3c, 0x411a, 0x43a6, 0x1916, 0x4394, 0xb225, 0x1eb5, 0x449b, 0x438e, 0x40ca, 0x4623, 0xb2e3, 0x41ef, 0x4493, 0x3e02, 0x4069, 0x1c2b, 0xb234, 0x1e69, 0x41df, 0xb2b8, 0x41d8, 0xbf56, 0x05ad, 0xba1c, 0x42c2, 0x4051, 0x42b2, 0x40f4, 0x43ce, 0x44f0, 0x43f3, 0x4229, 0x213e, 0xb2c2, 0x3200, 0x4214, 0x42b6, 0x005f, 0x4075, 0xb272, 0xbaf8, 0xb224, 0xb29f, 0xbfd5, 0x40c1, 0x438e, 0x43c4, 0x0aa3, 0xa689, 0xb22f, 0x2428, 0x45bd, 0x4004, 0x43f9, 0xb29e, 0x4679, 0xb21b, 0x40bb, 0x4027, 0x40f4, 0x4074, 0xbf7b, 0x45c2, 0x43f6, 0xb2a0, 0x416c, 0xba07, 0x1da5, 0x416e, 0xba1c, 0x406a, 0x0523, 0xa9b7, 0x352b, 0x35c0, 0xbf97, 0xb26c, 0xbf60, 0x40f8, 0xba7a, 0x423f, 0x02f2, 0x4068, 0x3e52, 0x42c7, 0x4050, 0x1d10, 0x4211, 0x42d9, 0x4565, 0xb2a5, 0x416d, 0xba27, 0x420a, 0xb228, 0xbf80, 0xa3ea, 0x437b, 0xb2cf, 0xb2cb, 0x1473, 0xbf7c, 0x4285, 0x41b6, 0x4280, 0x3a9f, 0xba06, 0xba22, 0x3f7e, 0x1822, 0x1663, 0xbf80, 0x182b, 0x1d47, 0x37c4, 0xaa51, 0x1efc, 0xbfb7, 0x43b7, 0xba12, 0xbaf0, 0x40e9, 0xbf80, 0xb09e, 0x4448, 0x1f27, 0x4083, 0xac6a, 0x400e, 0x1c32, 0xba54, 0xba14, 0x249e, 0x3f80, 0x4610, 0x4293, 0x4396, 0x1e57, 0xb23f, 0xb093, 0x4161, 0x42c0, 0x3494, 0x40d5, 0xbf56, 0x1ee5, 0x2143, 0x18b0, 0x4360, 0x46a4, 0x1930, 0xba5a, 0x44d0, 0x1ad6, 0x371e, 0xb2ce, 0x1534, 0xb09c, 0x1b0b, 0x095d, 0x2f9f, 0x1608, 0x40f7, 0xbada, 0x05c1, 0xbf3e, 0xa521, 0xb29a, 0x42af, 0x404a, 0x0f8c, 0x41c9, 0xb089, 0x1a99, 0xba0a, 0x1fc9, 0xb25b, 0x41a2, 0x4109, 0x40b7, 0x364f, 0x2648, 0x011f, 0x4157, 0xbf47, 0xb037, 0x1b4a, 0x4096, 0x41a8, 0x4246, 0xba0f, 0x40f0, 0xb250, 0xbf59, 0x42b7, 0xb251, 0xba5b, 0xb0d1, 0x4208, 0x4103, 0x40a7, 0x4355, 0xb216, 0x4476, 0x1962, 0xb03d, 0xba1a, 0x1928, 0x1f0b, 0xbf71, 0x2d76, 0x40f6, 0x4369, 0x29d5, 0x42f6, 0x1dd5, 0xb25e, 0xaf1a, 0x42fd, 0x40b9, 0x41bb, 0xa259, 0x40b7, 0x45f6, 0x4283, 0xbf3e, 0xba6c, 0xbae8, 0x41cb, 0xbf08, 0x42f3, 0x15e3, 0x1eb6, 0x386c, 0xb090, 0x1d6c, 0x3160, 0x43ca, 0x1a41, 0xb260, 0x4252, 0x3a39, 0xae9f, 0x41cf, 0xb2ae, 0x40ed, 0x4347, 0xb2ae, 0xba31, 0xbfda, 0x43a6, 0x4125, 0xb036, 0x408f, 0xba00, 0x1ddf, 0x4062, 0xb0ba, 0x4176, 0xba23, 0x2c17, 0x42e6, 0x3bc2, 0x43fb, 0x11b5, 0x400e, 0x439d, 0x3079, 0xb0a7, 0xbf7b, 0xb0e1, 0x4271, 0x44d1, 0xbfb0, 0xb028, 0xb015, 0x43d1, 0x4322, 0x1dcf, 0x42cc, 0xbac0, 0x1847, 0xbfd1, 0xb036, 0xb060, 0x2bea, 0x4020, 0x4193, 0x43d5, 0xaa64, 0x41c7, 0x427c, 0x41ec, 0xbf0b, 0x4398, 0x4200, 0x4283, 0x4000, 0x1f81, 0x44d1, 0x42d6, 0x402c, 0x0e29, 0x4606, 0xb0b9, 0x4093, 0x40fa, 0x42b6, 0xba48, 0x43a9, 0xbf72, 0x1aba, 0xbf00, 0x369e, 0xbf00, 0x4109, 0x251e, 0xba6f, 0x40bc, 0x4464, 0x40d4, 0x3776, 0xb2de, 0xb01a, 0xb05d, 0x27ed, 0xb252, 0x368f, 0xb044, 0x45e0, 0xba62, 0x4135, 0xbf23, 0x4188, 0x41f4, 0xb223, 0x418e, 0x40e4, 0x4256, 0xbf01, 0x411b, 0x1f16, 0x4253, 0xbadd, 0x43e0, 0xaeab, 0x4431, 0x24cb, 0x30b8, 0x406e, 0xb0e9, 0x41aa, 0x43a6, 0x438e, 0x4342, 0x4307, 0x419c, 0x4053, 0x4311, 0x41c7, 0x4152, 0x1ba5, 0x41db, 0x42a0, 0x40b8, 0xbf2e, 0xb01c, 0x423b, 0x1d13, 0xb262, 0xba11, 0x1803, 0x433e, 0x287b, 0x1977, 0xb0ba, 0x297d, 0xbf01, 0xb294, 0x40bf, 0x4391, 0x43e8, 0x232d, 0x431a, 0x4228, 0x375a, 0x36d7, 0x424d, 0xbf60, 0x4071, 0x40e8, 0x3242, 0xb0fe, 0x4214, 0x41a3, 0xbf62, 0x2756, 0x40f0, 0xba17, 0x3696, 0x427f, 0xaaa1, 0xbfa9, 0x4285, 0x427c, 0xa783, 0x4369, 0x274e, 0xb299, 0x411c, 0x40f0, 0x073b, 0x40d4, 0x43f7, 0xba1b, 0xb22d, 0x1c83, 0x1f11, 0x4277, 0x32b1, 0xbf52, 0x424b, 0x438f, 0xbfd0, 0x4118, 0x39e7, 0xba37, 0x3e6d, 0x41f3, 0x4239, 0x2daa, 0xbfa6, 0x432e, 0xb015, 0xb2f6, 0xbaf2, 0x4184, 0x4324, 0x1c78, 0xbaf1, 0xba29, 0xbfca, 0x1b4d, 0xb28b, 0x4577, 0x3ade, 0x43b3, 0xbf64, 0x401f, 0x41d7, 0x4060, 0x1be9, 0x4453, 0xba44, 0x37d4, 0x424a, 0xb006, 0x1882, 0xbac4, 0xba5b, 0x3c59, 0x0c92, 0x42a0, 0xba4e, 0x2d9b, 0xbfe4, 0x441b, 0x2199, 0x05fd, 0x43b2, 0xba42, 0x4301, 0x1ec4, 0x4656, 0xb0e4, 0xb06e, 0xbf82, 0x40a6, 0xaebe, 0x30ca, 0x4181, 0x42a4, 0xb24d, 0x4080, 0x43ca, 0x3592, 0x1943, 0x4217, 0x43ee, 0x08c3, 0xb003, 0x2cbd, 0x4412, 0x2e2f, 0x26db, 0x4179, 0x42a4, 0x36d3, 0xbfb2, 0x4386, 0x431c, 0x44ba, 0x4464, 0xb281, 0x40b3, 0x4152, 0xb25b, 0x41f2, 0xb059, 0xb278, 0x0dfe, 0x425f, 0x4215, 0x3ca0, 0x4234, 0xbad2, 0x41f0, 0x3f2d, 0x43ce, 0x4218, 0xbf12, 0x45e9, 0x1a54, 0x1fff, 0xacd6, 0x410e, 0xbf8f, 0xb0e1, 0x352d, 0x1fed, 0x1af4, 0x428e, 0x3c91, 0xb039, 0x4079, 0x4347, 0x3c04, 0x4424, 0x4260, 0xa798, 0x41b9, 0x4033, 0x4238, 0x2419, 0x4227, 0x0d53, 0xb2c3, 0x42d7, 0xbf14, 0x46a5, 0x0852, 0xa387, 0x13d9, 0x41c7, 0x1f38, 0x43e8, 0x1dcc, 0x43e6, 0x465a, 0x419a, 0x4387, 0x4338, 0x43a0, 0x033e, 0xba5d, 0x4176, 0x3d63, 0x3285, 0x1d0b, 0xacee, 0x4105, 0x44e8, 0x3c90, 0xa4a5, 0xbf17, 0x432e, 0x4020, 0x4367, 0x43ee, 0x43f8, 0x3f58, 0x1f04, 0x08fa, 0x43cf, 0xb097, 0xba07, 0xb228, 0x45c4, 0x09ae, 0xbf31, 0x31a7, 0x3a09, 0x42cf, 0x4019, 0x2390, 0x4145, 0x4179, 0x40bd, 0xb243, 0xbf5d, 0x3f0c, 0x3406, 0x1f8a, 0xba3b, 0xbfb5, 0x43b0, 0x3120, 0xb26c, 0xa3b0, 0x4272, 0x465d, 0x3214, 0xba0e, 0x3a60, 0x4230, 0x2d1c, 0x43ea, 0xbf63, 0x43ae, 0x14fa, 0x38d6, 0x423d, 0xac84, 0xb210, 0x402e, 0xb273, 0x441e, 0x43b0, 0xab4e, 0xb275, 0x42c8, 0x41f1, 0xb2ba, 0x42fd, 0x40b9, 0x4244, 0x42ed, 0x420d, 0x4190, 0xba13, 0xba1f, 0x2758, 0x40d7, 0x1012, 0x41f7, 0xbff0, 0xbfaf, 0x1aee, 0x425b, 0x0e1a, 0x3ddb, 0xb2e9, 0xba50, 0x3fd8, 0x1ba9, 0xb002, 0x437d, 0x4279, 0x34fb, 0xba3b, 0x43e3, 0x4185, 0xba1f, 0xa0db, 0x4218, 0x3d58, 0x0f00, 0xb2b0, 0x429f, 0xb063, 0xbf0d, 0xba52, 0xba07, 0xa5c8, 0x409c, 0x431f, 0xb2f9, 0x1ff7, 0xb0e6, 0x463f, 0x3ac2, 0xba14, 0xba7c, 0xbf43, 0xbff0, 0x40b3, 0x2e64, 0xa3a0, 0x1bac, 0xb2c7, 0x1f9a, 0x31d1, 0x387c, 0x1993, 0x4224, 0xba20, 0x4044, 0xb2f2, 0x1983, 0x428f, 0x11fc, 0x00a5, 0xb071, 0x12ae, 0x4007, 0x15cc, 0xbfcf, 0x416e, 0x0667, 0x1b46, 0xb250, 0x4285, 0x41ea, 0xa38d, 0x43dd, 0x43a7, 0xa77b, 0x0711, 0xba66, 0x445c, 0x1b40, 0x4095, 0x41b8, 0x400b, 0x4079, 0x3567, 0x43a6, 0x461d, 0x435d, 0x4036, 0x42fa, 0xa9a6, 0x43b7, 0xb295, 0x427e, 0x4300, 0xbf54, 0xb0f4, 0x2b0b, 0x4770, 0xe7fe + ], + StartRegs = [0x36179bbd, 0x4c84b624, 0xf2f6b902, 0xcc71b138, 0x0afbc809, 0xac7ce4df, 0xb01ce320, 0xe9d87f98, 0xc61c700a, 0x6f44ba87, 0x76d17376, 0x6c662875, 0x88e99f9f, 0x5ec4aa7f, 0x00000000, 0x500001f0 + ], + FinalRegs = [0xffffffeb, 0x00000415, 0x6000000a, 0x00000000, 0xf16324f3, 0x0000000a, 0xffffe660, 0x000019a0, 0x3cede399, 0xd596226d, 0xe4d0754a, 0xf16324f3, 0x00000132, 0x0000017d, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x4194, 0x41e1, 0x426d, 0xabea, 0xa7e7, 0x181f, 0x4209, 0x38b4, 0x4330, 0x42fd, 0x40db, 0xbfb4, 0x1903, 0x4570, 0xba65, 0xa18b, 0x1868, 0x41bc, 0xb269, 0x3a0f, 0xb2ef, 0x43d0, 0x301c, 0x1b59, 0x4185, 0xa33d, 0x43c3, 0x448a, 0xa735, 0x1c22, 0x4273, 0x4584, 0xb215, 0xbfb5, 0xb059, 0x43ed, 0x412b, 0x1c26, 0xb0cb, 0xbae5, 0x40ca, 0xb28a, 0x19c5, 0x4120, 0x4274, 0x4594, 0xba53, 0x42c7, 0xbf71, 0x4182, 0x43e9, 0x412a, 0x28e9, 0x4057, 0x4310, 0x41a1, 0x40cd, 0xbfac, 0xba50, 0xaa8a, 0x26a9, 0x432c, 0x46b1, 0x454c, 0x1542, 0x4222, 0x02f8, 0xb2f9, 0x4014, 0xb23d, 0xbf55, 0xbfd0, 0x404a, 0x3680, 0x40a4, 0x4275, 0x42b9, 0x4249, 0xbfa7, 0x2da6, 0xa070, 0x4377, 0x10a2, 0x411c, 0x1f50, 0x466a, 0xa9fd, 0x237a, 0x43e4, 0xb2b7, 0x4457, 0x4157, 0x2ec4, 0x4606, 0x41f1, 0x4432, 0x1376, 0x4143, 0x4663, 0x43ae, 0xbf8a, 0x426f, 0xb299, 0x422f, 0x1c31, 0x415c, 0x39de, 0xbf60, 0x25cc, 0x4097, 0xb24e, 0xbac7, 0xb2c8, 0x4030, 0x43f2, 0x41af, 0x4012, 0xb2d2, 0x4415, 0xbf9e, 0x4208, 0xba30, 0x1d45, 0x0615, 0xb2d8, 0xba11, 0x40f9, 0x4011, 0x42c7, 0xb262, 0x41df, 0x429f, 0x0b94, 0x1fbf, 0xbf94, 0xb2c3, 0x4073, 0x40e2, 0x4166, 0xa2e0, 0x4475, 0x4026, 0xb0a2, 0xb20a, 0x1c3b, 0xa334, 0xa04c, 0xaae3, 0xbf85, 0xba51, 0x42c5, 0xa2df, 0x43c6, 0x42f2, 0x4252, 0x43bb, 0xbf96, 0xa5a2, 0x41ae, 0xa663, 0x11de, 0xbaeb, 0x1b6f, 0x42f3, 0xba22, 0xbfe1, 0x438c, 0xba76, 0xb2e7, 0xa84c, 0x4389, 0x14e8, 0x316f, 0x1e56, 0xa1ea, 0x4270, 0x0962, 0x1f5d, 0x40f4, 0xbf69, 0xbae7, 0x4019, 0x1c1e, 0x43fe, 0x4245, 0x1a32, 0x418f, 0x10f5, 0x1a47, 0x1d6f, 0xa720, 0xb0e0, 0x43ae, 0x0ac4, 0x4232, 0x4044, 0x42fe, 0xbaf8, 0xba6b, 0x19ef, 0x408b, 0x4287, 0x41a5, 0xbfc6, 0x1d24, 0xb2f7, 0xb291, 0xaf34, 0x40f3, 0x1a78, 0xba54, 0x08f7, 0x19b6, 0x3b08, 0xba23, 0x318f, 0x1fe9, 0x4646, 0xbf41, 0x1b4a, 0x4224, 0xb201, 0x221a, 0x4027, 0xb09c, 0xbada, 0x438d, 0xa29c, 0xba71, 0x43ed, 0x40ee, 0x408a, 0x4366, 0xbf02, 0xb2f8, 0xb09a, 0x35f4, 0xb2db, 0x0d06, 0xba58, 0x42c8, 0x4374, 0x40f9, 0x42c4, 0xbaee, 0x4014, 0xba77, 0x4330, 0xb0f9, 0x43b5, 0x3ee4, 0xba5c, 0xa37c, 0x18f9, 0xba01, 0x43e4, 0x45ad, 0x3b98, 0x431c, 0xae45, 0xb0e9, 0xba6a, 0xbf3f, 0xb093, 0x40cf, 0x31f1, 0xbae3, 0x18e3, 0xafbb, 0x46fb, 0x4467, 0x4377, 0x4439, 0x46fd, 0x01e6, 0x43ca, 0x423d, 0xbf80, 0xb2f8, 0x439c, 0x4158, 0xbf9e, 0x4343, 0x433d, 0x41a2, 0x2ced, 0xbae8, 0x1b42, 0x3e7d, 0x41ba, 0x4022, 0x43a7, 0x424b, 0x4253, 0xb0e9, 0x42b3, 0x1d29, 0x2454, 0x412b, 0x4253, 0x4156, 0xbfd3, 0x423a, 0x400b, 0xba35, 0x1cf9, 0x00db, 0x04bb, 0x1b4c, 0xbafc, 0x1fb0, 0xb034, 0xb2a7, 0x4328, 0x4248, 0xbf67, 0x1bc5, 0x42c7, 0x157d, 0xb206, 0x4040, 0xa039, 0xaf24, 0x41b8, 0xa314, 0x2db8, 0x1a50, 0xb2df, 0x35ca, 0x423d, 0xb23f, 0x41ee, 0x456c, 0x4365, 0xb2d6, 0x421a, 0xba7d, 0x43be, 0x43a1, 0xbf39, 0x2460, 0xb271, 0x2223, 0x3e58, 0x1ac1, 0x4225, 0x422b, 0xb0af, 0xb2df, 0xba76, 0x4085, 0x4226, 0x1f02, 0xb2a0, 0x41a6, 0xa49b, 0xbfb0, 0x4097, 0x4145, 0xbf82, 0x414e, 0xb240, 0x246d, 0xba4b, 0xaca3, 0x35f0, 0x42c9, 0x3d4b, 0x46db, 0x43fe, 0xba60, 0x1736, 0x100c, 0xbaf4, 0xa17b, 0x42ae, 0xbfdd, 0x0867, 0xb0b5, 0x4236, 0x420b, 0x4256, 0x4166, 0x4653, 0x4372, 0x1a16, 0xa649, 0x43e3, 0x42a6, 0xbf5f, 0x3fd3, 0x31db, 0x41fa, 0x2e10, 0x3186, 0xa1ae, 0xb012, 0xb2f5, 0x3260, 0x44a2, 0x43dc, 0x05d4, 0x41a8, 0xb030, 0x443b, 0x2d52, 0xba2f, 0x44f2, 0x4200, 0xba05, 0x42f4, 0x431b, 0x1ae3, 0xb2db, 0x4405, 0xbaeb, 0x3772, 0x423d, 0xbf1f, 0x20f7, 0x40be, 0x1b66, 0x1b9f, 0x439e, 0x0d71, 0xa52b, 0x1fd0, 0x2322, 0xbff0, 0xac82, 0xbfa0, 0x274e, 0x4079, 0xafe0, 0x1f38, 0x4235, 0x1de4, 0x403d, 0x434b, 0x343f, 0xba6d, 0xba07, 0xbf02, 0x439f, 0x46c1, 0xba20, 0xb206, 0x4127, 0xba1f, 0x4226, 0xb295, 0x436b, 0xb2aa, 0xa2b9, 0xba5e, 0x423f, 0xb008, 0xb00f, 0xb081, 0x0a56, 0xbfa3, 0x3f44, 0xb0a9, 0x4022, 0x244d, 0xb07d, 0xba2b, 0xbf90, 0xbfa0, 0x41a1, 0xba26, 0x2997, 0xa317, 0xb2ce, 0x410e, 0xba51, 0x40a8, 0x4285, 0x20bd, 0x411d, 0x1eaa, 0xbfcd, 0x4027, 0x4032, 0x42f8, 0x286a, 0xb212, 0x4191, 0x184a, 0x43a3, 0x4097, 0xba16, 0x369b, 0x4336, 0x46e2, 0xa6ed, 0x41f2, 0x0322, 0xb2ab, 0xbf48, 0x4139, 0x4077, 0x4096, 0x1da1, 0x4266, 0x4365, 0xb051, 0x413b, 0x45cb, 0x1533, 0x425c, 0x423e, 0xba34, 0x4679, 0x3ad5, 0x439b, 0x420d, 0x4228, 0x4406, 0xbf42, 0x4211, 0x4272, 0xb2a1, 0xb272, 0xb2d0, 0xa24b, 0xb0b4, 0x36f9, 0x1c6f, 0x405c, 0x36ad, 0x411f, 0x41d2, 0x426f, 0xb2f9, 0x29f9, 0x4572, 0x43cf, 0x4016, 0x4068, 0x4262, 0x151a, 0xbfa5, 0xafd2, 0x4382, 0x4308, 0x46e4, 0x43cb, 0x18af, 0x428e, 0xac0f, 0x1f7c, 0xbfc1, 0x425a, 0x424e, 0x120e, 0x43fa, 0x0332, 0x19c4, 0x4044, 0xbf0a, 0xbac9, 0x435b, 0x4255, 0xbf92, 0x41b7, 0x42a9, 0x08e3, 0x4114, 0x42ad, 0xb27b, 0x1ab9, 0x0adf, 0xbaed, 0x40b7, 0x307f, 0x4457, 0x40f1, 0x4296, 0xb218, 0xb21d, 0xb2d0, 0x4054, 0x40b4, 0x41ee, 0x45d1, 0x1f57, 0x011c, 0x4174, 0xbf02, 0x417a, 0x4124, 0x2931, 0x4021, 0xbac1, 0xb2ac, 0x4034, 0x4138, 0x44a1, 0x41a5, 0x4034, 0x30f3, 0x1952, 0xb003, 0x3fb2, 0x4624, 0xb04f, 0x3f0f, 0xbf54, 0xa9c0, 0x43af, 0xb2b0, 0xb0f0, 0xb2d8, 0x4288, 0x17b6, 0x2e75, 0x416f, 0x1f51, 0x1a93, 0xbfe4, 0x410c, 0x4465, 0x407b, 0x426d, 0x46a2, 0x37d7, 0xbfc7, 0xb2ee, 0x09c2, 0x41b0, 0x41a5, 0xba50, 0x4081, 0x459d, 0x4437, 0x433e, 0x1473, 0x435d, 0xbf00, 0x43fa, 0x1863, 0xb021, 0x4585, 0x4096, 0x1b2a, 0xbfb2, 0x067e, 0x18e2, 0xb20f, 0x43af, 0x4080, 0x1b32, 0xb29e, 0x0a11, 0x434a, 0x4392, 0x424e, 0xb2e3, 0x40a6, 0xab7a, 0x09d9, 0x1fed, 0x43c1, 0x19d4, 0x4089, 0xb236, 0x1f21, 0xb2e0, 0x4289, 0x461d, 0xaaf9, 0xbf3c, 0x1183, 0x0293, 0xa59b, 0x43bc, 0xb047, 0x403e, 0xb26a, 0xbfd2, 0x11e9, 0x4672, 0xbfa0, 0x414f, 0x39c9, 0xb2e5, 0x43a6, 0x43f4, 0xa04b, 0xa4bb, 0x4359, 0x4297, 0x41cb, 0x44e3, 0x2f11, 0xb237, 0x1971, 0x1c47, 0xbf3a, 0x424d, 0x448d, 0xb211, 0x412c, 0x41c1, 0x41e1, 0x41cc, 0x4265, 0xb08b, 0x4224, 0xba4b, 0xb240, 0xba27, 0xba7b, 0xbaca, 0xbfac, 0xb27c, 0x1d89, 0x43be, 0x1f77, 0xbf00, 0x43ea, 0x4326, 0xba22, 0x0315, 0xbf02, 0x42a2, 0x405a, 0xba05, 0x4152, 0xbfb0, 0xba4c, 0x42c6, 0x4334, 0x18b9, 0x4250, 0x40c8, 0xbf77, 0x33a6, 0xa4d7, 0xba55, 0x4361, 0x274f, 0xba03, 0x1ae7, 0x4038, 0xbf8d, 0x40fe, 0x1b4b, 0x4063, 0x40b7, 0xb2c8, 0x40ce, 0x38c1, 0xba40, 0x410f, 0x4445, 0x33b7, 0xba40, 0x4378, 0x3c3e, 0x4286, 0x41b1, 0xb219, 0xb23e, 0x437b, 0x2d6d, 0xbf9f, 0x1a09, 0xb00d, 0x436b, 0x41a5, 0x2188, 0xb29e, 0xb02f, 0x4255, 0x40ff, 0x4095, 0x4226, 0x1baf, 0x46ad, 0x262a, 0xa6a5, 0x1bf9, 0x41f0, 0x42fb, 0x43b9, 0xbf4a, 0x1d63, 0x1a48, 0x3668, 0x2ad8, 0xa836, 0xb0ad, 0xb205, 0xbf96, 0x1e1d, 0x27ba, 0x4677, 0xbac0, 0xa376, 0x40be, 0xbf05, 0xb2e9, 0x4164, 0x3e9d, 0x43b9, 0x4330, 0x1136, 0xba46, 0x41ae, 0x41c7, 0xb20f, 0xbafd, 0x42a2, 0x4007, 0xa269, 0x434e, 0xac40, 0x42da, 0x4553, 0xb2f3, 0xbfce, 0x433f, 0xa7f6, 0x4294, 0xb2e6, 0x41f3, 0x4355, 0x10e0, 0xb226, 0xb239, 0x1a8c, 0xb014, 0x431c, 0x1391, 0xba2d, 0x41ba, 0x402f, 0xb025, 0xb2bb, 0x35c5, 0xa0c6, 0x4042, 0xb27b, 0x4120, 0x250f, 0x4272, 0xbf32, 0x1a7c, 0x1e48, 0xbaf6, 0x1f12, 0x432a, 0x4608, 0x40f1, 0x1b8e, 0x1e05, 0x4021, 0x4053, 0xbf48, 0x41aa, 0xb2e4, 0xb230, 0x43ea, 0x1f4c, 0xa125, 0x1ef8, 0x4139, 0x4376, 0xbf6d, 0x42db, 0x32da, 0x4222, 0x2930, 0x2189, 0x4116, 0xb077, 0x429a, 0x40db, 0x45ac, 0x1a86, 0x1546, 0xb21d, 0x463a, 0x4062, 0xbf3e, 0x1a52, 0x407c, 0xba38, 0x454e, 0xa28b, 0x42a2, 0x3760, 0x1e45, 0x19ab, 0x292e, 0x0f80, 0x1d7e, 0x4572, 0x19be, 0x4318, 0xb0e2, 0x2ead, 0xbf15, 0x43d3, 0xb297, 0x4156, 0x4274, 0x3215, 0x43d5, 0x4101, 0x4009, 0x14bb, 0x4217, 0xb228, 0xba72, 0x1a16, 0x41af, 0x40c8, 0x4314, 0xb22a, 0x43a4, 0xb212, 0x4139, 0xb23d, 0x1b80, 0x1b4f, 0xb064, 0xbfb1, 0xb0ea, 0x419e, 0xa853, 0x406b, 0x41ba, 0xbfbd, 0x4353, 0x4018, 0x45e1, 0xba2b, 0xb264, 0x42e9, 0xb2e9, 0x40c2, 0x395e, 0x437f, 0x43f4, 0x406e, 0x0807, 0xba3e, 0xbf88, 0x430a, 0x43af, 0x4417, 0x426d, 0x410c, 0xbff0, 0x4683, 0xb25f, 0xbf00, 0xbf5c, 0xba47, 0x4033, 0x1942, 0x43e0, 0x12e6, 0x3c46, 0x436c, 0xba3c, 0x0145, 0x43cc, 0xb2d6, 0x4477, 0xb2d5, 0xb0d1, 0x4189, 0x43eb, 0x1ac6, 0xb258, 0xb0b6, 0xbf57, 0xbf60, 0x4285, 0x4364, 0x416f, 0x4111, 0x0d56, 0xb286, 0x4066, 0xb2dd, 0x4156, 0x4217, 0xa9c0, 0x43c6, 0xaf85, 0xb258, 0x41cb, 0xbfc4, 0x4220, 0x43bc, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5163634f, 0x69953bc6, 0xc471194b, 0xd797bd76, 0xca82e30c, 0xd0e3d0b1, 0x315d5946, 0x74209518, 0xbfc706cf, 0x907cff0b, 0x9e3f1e57, 0x892343bb, 0x37dc0fed, 0xbc49e0f0, 0x00000000, 0xa00001f0 }, - FinalRegs = new uint[] { 0x00000025, 0x9eb0014e, 0xfffec9da, 0xfc97ffff, 0x00000e10, 0x00000025, 0xffffffda, 0x9eb00062, 0xbfc706cf, 0x000000ad, 0x00000000, 0xfffee373, 0x37dc0fed, 0x9eaffe4e, 0x00000000, 0xa00001d0 }, + Instructions = [0x4194, 0x41e1, 0x426d, 0xabea, 0xa7e7, 0x181f, 0x4209, 0x38b4, 0x4330, 0x42fd, 0x40db, 0xbfb4, 0x1903, 0x4570, 0xba65, 0xa18b, 0x1868, 0x41bc, 0xb269, 0x3a0f, 0xb2ef, 0x43d0, 0x301c, 0x1b59, 0x4185, 0xa33d, 0x43c3, 0x448a, 0xa735, 0x1c22, 0x4273, 0x4584, 0xb215, 0xbfb5, 0xb059, 0x43ed, 0x412b, 0x1c26, 0xb0cb, 0xbae5, 0x40ca, 0xb28a, 0x19c5, 0x4120, 0x4274, 0x4594, 0xba53, 0x42c7, 0xbf71, 0x4182, 0x43e9, 0x412a, 0x28e9, 0x4057, 0x4310, 0x41a1, 0x40cd, 0xbfac, 0xba50, 0xaa8a, 0x26a9, 0x432c, 0x46b1, 0x454c, 0x1542, 0x4222, 0x02f8, 0xb2f9, 0x4014, 0xb23d, 0xbf55, 0xbfd0, 0x404a, 0x3680, 0x40a4, 0x4275, 0x42b9, 0x4249, 0xbfa7, 0x2da6, 0xa070, 0x4377, 0x10a2, 0x411c, 0x1f50, 0x466a, 0xa9fd, 0x237a, 0x43e4, 0xb2b7, 0x4457, 0x4157, 0x2ec4, 0x4606, 0x41f1, 0x4432, 0x1376, 0x4143, 0x4663, 0x43ae, 0xbf8a, 0x426f, 0xb299, 0x422f, 0x1c31, 0x415c, 0x39de, 0xbf60, 0x25cc, 0x4097, 0xb24e, 0xbac7, 0xb2c8, 0x4030, 0x43f2, 0x41af, 0x4012, 0xb2d2, 0x4415, 0xbf9e, 0x4208, 0xba30, 0x1d45, 0x0615, 0xb2d8, 0xba11, 0x40f9, 0x4011, 0x42c7, 0xb262, 0x41df, 0x429f, 0x0b94, 0x1fbf, 0xbf94, 0xb2c3, 0x4073, 0x40e2, 0x4166, 0xa2e0, 0x4475, 0x4026, 0xb0a2, 0xb20a, 0x1c3b, 0xa334, 0xa04c, 0xaae3, 0xbf85, 0xba51, 0x42c5, 0xa2df, 0x43c6, 0x42f2, 0x4252, 0x43bb, 0xbf96, 0xa5a2, 0x41ae, 0xa663, 0x11de, 0xbaeb, 0x1b6f, 0x42f3, 0xba22, 0xbfe1, 0x438c, 0xba76, 0xb2e7, 0xa84c, 0x4389, 0x14e8, 0x316f, 0x1e56, 0xa1ea, 0x4270, 0x0962, 0x1f5d, 0x40f4, 0xbf69, 0xbae7, 0x4019, 0x1c1e, 0x43fe, 0x4245, 0x1a32, 0x418f, 0x10f5, 0x1a47, 0x1d6f, 0xa720, 0xb0e0, 0x43ae, 0x0ac4, 0x4232, 0x4044, 0x42fe, 0xbaf8, 0xba6b, 0x19ef, 0x408b, 0x4287, 0x41a5, 0xbfc6, 0x1d24, 0xb2f7, 0xb291, 0xaf34, 0x40f3, 0x1a78, 0xba54, 0x08f7, 0x19b6, 0x3b08, 0xba23, 0x318f, 0x1fe9, 0x4646, 0xbf41, 0x1b4a, 0x4224, 0xb201, 0x221a, 0x4027, 0xb09c, 0xbada, 0x438d, 0xa29c, 0xba71, 0x43ed, 0x40ee, 0x408a, 0x4366, 0xbf02, 0xb2f8, 0xb09a, 0x35f4, 0xb2db, 0x0d06, 0xba58, 0x42c8, 0x4374, 0x40f9, 0x42c4, 0xbaee, 0x4014, 0xba77, 0x4330, 0xb0f9, 0x43b5, 0x3ee4, 0xba5c, 0xa37c, 0x18f9, 0xba01, 0x43e4, 0x45ad, 0x3b98, 0x431c, 0xae45, 0xb0e9, 0xba6a, 0xbf3f, 0xb093, 0x40cf, 0x31f1, 0xbae3, 0x18e3, 0xafbb, 0x46fb, 0x4467, 0x4377, 0x4439, 0x46fd, 0x01e6, 0x43ca, 0x423d, 0xbf80, 0xb2f8, 0x439c, 0x4158, 0xbf9e, 0x4343, 0x433d, 0x41a2, 0x2ced, 0xbae8, 0x1b42, 0x3e7d, 0x41ba, 0x4022, 0x43a7, 0x424b, 0x4253, 0xb0e9, 0x42b3, 0x1d29, 0x2454, 0x412b, 0x4253, 0x4156, 0xbfd3, 0x423a, 0x400b, 0xba35, 0x1cf9, 0x00db, 0x04bb, 0x1b4c, 0xbafc, 0x1fb0, 0xb034, 0xb2a7, 0x4328, 0x4248, 0xbf67, 0x1bc5, 0x42c7, 0x157d, 0xb206, 0x4040, 0xa039, 0xaf24, 0x41b8, 0xa314, 0x2db8, 0x1a50, 0xb2df, 0x35ca, 0x423d, 0xb23f, 0x41ee, 0x456c, 0x4365, 0xb2d6, 0x421a, 0xba7d, 0x43be, 0x43a1, 0xbf39, 0x2460, 0xb271, 0x2223, 0x3e58, 0x1ac1, 0x4225, 0x422b, 0xb0af, 0xb2df, 0xba76, 0x4085, 0x4226, 0x1f02, 0xb2a0, 0x41a6, 0xa49b, 0xbfb0, 0x4097, 0x4145, 0xbf82, 0x414e, 0xb240, 0x246d, 0xba4b, 0xaca3, 0x35f0, 0x42c9, 0x3d4b, 0x46db, 0x43fe, 0xba60, 0x1736, 0x100c, 0xbaf4, 0xa17b, 0x42ae, 0xbfdd, 0x0867, 0xb0b5, 0x4236, 0x420b, 0x4256, 0x4166, 0x4653, 0x4372, 0x1a16, 0xa649, 0x43e3, 0x42a6, 0xbf5f, 0x3fd3, 0x31db, 0x41fa, 0x2e10, 0x3186, 0xa1ae, 0xb012, 0xb2f5, 0x3260, 0x44a2, 0x43dc, 0x05d4, 0x41a8, 0xb030, 0x443b, 0x2d52, 0xba2f, 0x44f2, 0x4200, 0xba05, 0x42f4, 0x431b, 0x1ae3, 0xb2db, 0x4405, 0xbaeb, 0x3772, 0x423d, 0xbf1f, 0x20f7, 0x40be, 0x1b66, 0x1b9f, 0x439e, 0x0d71, 0xa52b, 0x1fd0, 0x2322, 0xbff0, 0xac82, 0xbfa0, 0x274e, 0x4079, 0xafe0, 0x1f38, 0x4235, 0x1de4, 0x403d, 0x434b, 0x343f, 0xba6d, 0xba07, 0xbf02, 0x439f, 0x46c1, 0xba20, 0xb206, 0x4127, 0xba1f, 0x4226, 0xb295, 0x436b, 0xb2aa, 0xa2b9, 0xba5e, 0x423f, 0xb008, 0xb00f, 0xb081, 0x0a56, 0xbfa3, 0x3f44, 0xb0a9, 0x4022, 0x244d, 0xb07d, 0xba2b, 0xbf90, 0xbfa0, 0x41a1, 0xba26, 0x2997, 0xa317, 0xb2ce, 0x410e, 0xba51, 0x40a8, 0x4285, 0x20bd, 0x411d, 0x1eaa, 0xbfcd, 0x4027, 0x4032, 0x42f8, 0x286a, 0xb212, 0x4191, 0x184a, 0x43a3, 0x4097, 0xba16, 0x369b, 0x4336, 0x46e2, 0xa6ed, 0x41f2, 0x0322, 0xb2ab, 0xbf48, 0x4139, 0x4077, 0x4096, 0x1da1, 0x4266, 0x4365, 0xb051, 0x413b, 0x45cb, 0x1533, 0x425c, 0x423e, 0xba34, 0x4679, 0x3ad5, 0x439b, 0x420d, 0x4228, 0x4406, 0xbf42, 0x4211, 0x4272, 0xb2a1, 0xb272, 0xb2d0, 0xa24b, 0xb0b4, 0x36f9, 0x1c6f, 0x405c, 0x36ad, 0x411f, 0x41d2, 0x426f, 0xb2f9, 0x29f9, 0x4572, 0x43cf, 0x4016, 0x4068, 0x4262, 0x151a, 0xbfa5, 0xafd2, 0x4382, 0x4308, 0x46e4, 0x43cb, 0x18af, 0x428e, 0xac0f, 0x1f7c, 0xbfc1, 0x425a, 0x424e, 0x120e, 0x43fa, 0x0332, 0x19c4, 0x4044, 0xbf0a, 0xbac9, 0x435b, 0x4255, 0xbf92, 0x41b7, 0x42a9, 0x08e3, 0x4114, 0x42ad, 0xb27b, 0x1ab9, 0x0adf, 0xbaed, 0x40b7, 0x307f, 0x4457, 0x40f1, 0x4296, 0xb218, 0xb21d, 0xb2d0, 0x4054, 0x40b4, 0x41ee, 0x45d1, 0x1f57, 0x011c, 0x4174, 0xbf02, 0x417a, 0x4124, 0x2931, 0x4021, 0xbac1, 0xb2ac, 0x4034, 0x4138, 0x44a1, 0x41a5, 0x4034, 0x30f3, 0x1952, 0xb003, 0x3fb2, 0x4624, 0xb04f, 0x3f0f, 0xbf54, 0xa9c0, 0x43af, 0xb2b0, 0xb0f0, 0xb2d8, 0x4288, 0x17b6, 0x2e75, 0x416f, 0x1f51, 0x1a93, 0xbfe4, 0x410c, 0x4465, 0x407b, 0x426d, 0x46a2, 0x37d7, 0xbfc7, 0xb2ee, 0x09c2, 0x41b0, 0x41a5, 0xba50, 0x4081, 0x459d, 0x4437, 0x433e, 0x1473, 0x435d, 0xbf00, 0x43fa, 0x1863, 0xb021, 0x4585, 0x4096, 0x1b2a, 0xbfb2, 0x067e, 0x18e2, 0xb20f, 0x43af, 0x4080, 0x1b32, 0xb29e, 0x0a11, 0x434a, 0x4392, 0x424e, 0xb2e3, 0x40a6, 0xab7a, 0x09d9, 0x1fed, 0x43c1, 0x19d4, 0x4089, 0xb236, 0x1f21, 0xb2e0, 0x4289, 0x461d, 0xaaf9, 0xbf3c, 0x1183, 0x0293, 0xa59b, 0x43bc, 0xb047, 0x403e, 0xb26a, 0xbfd2, 0x11e9, 0x4672, 0xbfa0, 0x414f, 0x39c9, 0xb2e5, 0x43a6, 0x43f4, 0xa04b, 0xa4bb, 0x4359, 0x4297, 0x41cb, 0x44e3, 0x2f11, 0xb237, 0x1971, 0x1c47, 0xbf3a, 0x424d, 0x448d, 0xb211, 0x412c, 0x41c1, 0x41e1, 0x41cc, 0x4265, 0xb08b, 0x4224, 0xba4b, 0xb240, 0xba27, 0xba7b, 0xbaca, 0xbfac, 0xb27c, 0x1d89, 0x43be, 0x1f77, 0xbf00, 0x43ea, 0x4326, 0xba22, 0x0315, 0xbf02, 0x42a2, 0x405a, 0xba05, 0x4152, 0xbfb0, 0xba4c, 0x42c6, 0x4334, 0x18b9, 0x4250, 0x40c8, 0xbf77, 0x33a6, 0xa4d7, 0xba55, 0x4361, 0x274f, 0xba03, 0x1ae7, 0x4038, 0xbf8d, 0x40fe, 0x1b4b, 0x4063, 0x40b7, 0xb2c8, 0x40ce, 0x38c1, 0xba40, 0x410f, 0x4445, 0x33b7, 0xba40, 0x4378, 0x3c3e, 0x4286, 0x41b1, 0xb219, 0xb23e, 0x437b, 0x2d6d, 0xbf9f, 0x1a09, 0xb00d, 0x436b, 0x41a5, 0x2188, 0xb29e, 0xb02f, 0x4255, 0x40ff, 0x4095, 0x4226, 0x1baf, 0x46ad, 0x262a, 0xa6a5, 0x1bf9, 0x41f0, 0x42fb, 0x43b9, 0xbf4a, 0x1d63, 0x1a48, 0x3668, 0x2ad8, 0xa836, 0xb0ad, 0xb205, 0xbf96, 0x1e1d, 0x27ba, 0x4677, 0xbac0, 0xa376, 0x40be, 0xbf05, 0xb2e9, 0x4164, 0x3e9d, 0x43b9, 0x4330, 0x1136, 0xba46, 0x41ae, 0x41c7, 0xb20f, 0xbafd, 0x42a2, 0x4007, 0xa269, 0x434e, 0xac40, 0x42da, 0x4553, 0xb2f3, 0xbfce, 0x433f, 0xa7f6, 0x4294, 0xb2e6, 0x41f3, 0x4355, 0x10e0, 0xb226, 0xb239, 0x1a8c, 0xb014, 0x431c, 0x1391, 0xba2d, 0x41ba, 0x402f, 0xb025, 0xb2bb, 0x35c5, 0xa0c6, 0x4042, 0xb27b, 0x4120, 0x250f, 0x4272, 0xbf32, 0x1a7c, 0x1e48, 0xbaf6, 0x1f12, 0x432a, 0x4608, 0x40f1, 0x1b8e, 0x1e05, 0x4021, 0x4053, 0xbf48, 0x41aa, 0xb2e4, 0xb230, 0x43ea, 0x1f4c, 0xa125, 0x1ef8, 0x4139, 0x4376, 0xbf6d, 0x42db, 0x32da, 0x4222, 0x2930, 0x2189, 0x4116, 0xb077, 0x429a, 0x40db, 0x45ac, 0x1a86, 0x1546, 0xb21d, 0x463a, 0x4062, 0xbf3e, 0x1a52, 0x407c, 0xba38, 0x454e, 0xa28b, 0x42a2, 0x3760, 0x1e45, 0x19ab, 0x292e, 0x0f80, 0x1d7e, 0x4572, 0x19be, 0x4318, 0xb0e2, 0x2ead, 0xbf15, 0x43d3, 0xb297, 0x4156, 0x4274, 0x3215, 0x43d5, 0x4101, 0x4009, 0x14bb, 0x4217, 0xb228, 0xba72, 0x1a16, 0x41af, 0x40c8, 0x4314, 0xb22a, 0x43a4, 0xb212, 0x4139, 0xb23d, 0x1b80, 0x1b4f, 0xb064, 0xbfb1, 0xb0ea, 0x419e, 0xa853, 0x406b, 0x41ba, 0xbfbd, 0x4353, 0x4018, 0x45e1, 0xba2b, 0xb264, 0x42e9, 0xb2e9, 0x40c2, 0x395e, 0x437f, 0x43f4, 0x406e, 0x0807, 0xba3e, 0xbf88, 0x430a, 0x43af, 0x4417, 0x426d, 0x410c, 0xbff0, 0x4683, 0xb25f, 0xbf00, 0xbf5c, 0xba47, 0x4033, 0x1942, 0x43e0, 0x12e6, 0x3c46, 0x436c, 0xba3c, 0x0145, 0x43cc, 0xb2d6, 0x4477, 0xb2d5, 0xb0d1, 0x4189, 0x43eb, 0x1ac6, 0xb258, 0xb0b6, 0xbf57, 0xbf60, 0x4285, 0x4364, 0x416f, 0x4111, 0x0d56, 0xb286, 0x4066, 0xb2dd, 0x4156, 0x4217, 0xa9c0, 0x43c6, 0xaf85, 0xb258, 0x41cb, 0xbfc4, 0x4220, 0x43bc, 0x4770, 0xe7fe + ], + StartRegs = [0x5163634f, 0x69953bc6, 0xc471194b, 0xd797bd76, 0xca82e30c, 0xd0e3d0b1, 0x315d5946, 0x74209518, 0xbfc706cf, 0x907cff0b, 0x9e3f1e57, 0x892343bb, 0x37dc0fed, 0xbc49e0f0, 0x00000000, 0xa00001f0 + ], + FinalRegs = [0x00000025, 0x9eb0014e, 0xfffec9da, 0xfc97ffff, 0x00000e10, 0x00000025, 0xffffffda, 0x9eb00062, 0xbfc706cf, 0x000000ad, 0x00000000, 0xfffee373, 0x37dc0fed, 0x9eaffe4e, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0xbacf, 0xbfa6, 0xb202, 0x40b6, 0x4165, 0x42b2, 0xb299, 0x40d5, 0x4183, 0xb09b, 0x4018, 0xb2a2, 0x4123, 0x0034, 0x45b6, 0x05e6, 0xaadf, 0x400e, 0x44da, 0xb220, 0xbfc8, 0x4147, 0x089b, 0x40e1, 0xa64f, 0xac9d, 0xb2cc, 0x39d6, 0xbf46, 0x42c9, 0x4314, 0x2b9a, 0x42cc, 0x19d2, 0x187f, 0x3b09, 0xba5f, 0xb2ef, 0x4281, 0x4298, 0x4253, 0xb284, 0x40ef, 0x4148, 0xaa53, 0x2d5e, 0x4301, 0xbf49, 0x4365, 0x3271, 0xb278, 0x10ca, 0x3100, 0x4298, 0xbfaa, 0xb27e, 0x46b9, 0x1972, 0xb08a, 0x428c, 0x4398, 0x1610, 0x4160, 0x40e9, 0x403b, 0x0964, 0xbf0d, 0x40e6, 0x40b1, 0x4183, 0x43af, 0x4195, 0x3dda, 0xa5d0, 0x2ba7, 0xb0d0, 0x1486, 0x4312, 0x42c5, 0xa382, 0x016e, 0xbf5c, 0x428b, 0xb2f2, 0x4367, 0xbf27, 0xba7b, 0x4676, 0x4229, 0x41f9, 0xb0b1, 0x4371, 0x40e3, 0x41f3, 0x1d96, 0x4019, 0xbad5, 0x0714, 0xbaf8, 0x3df6, 0x1b08, 0xb2ad, 0x32ce, 0xb26b, 0x120d, 0x438c, 0x41a6, 0x1e12, 0x421c, 0x416b, 0xb2ca, 0x4298, 0x31dc, 0xbf0c, 0x27c0, 0x41ea, 0x18b6, 0x4097, 0x42ed, 0x059a, 0x42fd, 0x428a, 0x4216, 0x1846, 0x43ec, 0x4194, 0x247c, 0x4347, 0xbf8f, 0x45b4, 0xb2cd, 0x41e7, 0xb2b8, 0xaf7f, 0xbf6c, 0xbae3, 0x4117, 0x43ae, 0x41b9, 0xbfe0, 0x144c, 0xbf13, 0x4292, 0x0fcd, 0x4329, 0x43f7, 0x1aba, 0x2109, 0x41e3, 0x4426, 0x401c, 0x40ea, 0xae86, 0x42c2, 0xbf02, 0x43c1, 0x2e2f, 0x42c3, 0x40a1, 0x4161, 0x43ff, 0x1a3e, 0x4334, 0xb234, 0xb256, 0x4037, 0xbaf8, 0x40e5, 0xba12, 0x2f78, 0x4019, 0x4144, 0x4305, 0x21a3, 0xbfcf, 0x0a76, 0x412b, 0xad51, 0x01b7, 0x4276, 0x1aa1, 0x42eb, 0x405b, 0xa6b4, 0x40d1, 0x410a, 0x41f4, 0x1a37, 0x1bd6, 0x38ea, 0xb27b, 0x4120, 0x4238, 0xb250, 0x4099, 0x437a, 0xbfce, 0xba3b, 0xbfb0, 0xb211, 0xa07d, 0x1deb, 0xbad9, 0x448d, 0x1528, 0xbf00, 0xb2d4, 0x44b3, 0x1efb, 0x408d, 0x41c8, 0x43f3, 0x4289, 0x43fa, 0x2672, 0xb2cc, 0x4253, 0x4234, 0xbadc, 0x4049, 0x430a, 0xb280, 0x42ef, 0xbfb7, 0xb276, 0xbac8, 0x416f, 0xb2aa, 0x1bc1, 0x0b1a, 0xb0ee, 0x4022, 0xb273, 0x2575, 0x1867, 0x1e00, 0xb245, 0x41d9, 0x446e, 0xba5f, 0xb07a, 0xb263, 0x2274, 0x135c, 0x4045, 0xb29a, 0x19c5, 0xbf56, 0x4361, 0x422a, 0x4193, 0x4138, 0x0c7c, 0x40b9, 0x2b3b, 0xb2e2, 0xb075, 0x40b4, 0x434e, 0x4363, 0x43d6, 0x10cf, 0x400d, 0x1fc8, 0xbf3d, 0x41ee, 0x4244, 0x2a6c, 0x1e41, 0x3e24, 0x4675, 0x43b5, 0x4032, 0xb080, 0xbf95, 0x431d, 0x4159, 0x43d6, 0xba46, 0xb025, 0xbfae, 0x4024, 0x14c7, 0x2339, 0x41f7, 0x445f, 0x43e8, 0x12db, 0xba11, 0x42bb, 0x42d0, 0x1b2e, 0x1d0b, 0xba72, 0x1c00, 0x1672, 0xbf5a, 0x40bc, 0x1094, 0xb068, 0xb053, 0xb027, 0xb22a, 0x213b, 0x4133, 0xb0e5, 0x1c94, 0xb244, 0x4228, 0x41ec, 0xb2a8, 0x440a, 0x3ea0, 0x3cd2, 0xb28b, 0x431a, 0x4372, 0x4084, 0xb2b5, 0x4135, 0xbf3b, 0x0936, 0x4385, 0x3455, 0x1f02, 0xb2b5, 0x00b2, 0x0a84, 0x43b7, 0x41a9, 0x42ca, 0x2e91, 0xbf18, 0xb242, 0xbfb0, 0x4220, 0xb2bf, 0x44ba, 0x41e7, 0x4181, 0x1eaa, 0x18c0, 0x1a7a, 0x4123, 0x3ffe, 0xa60e, 0x434f, 0x082b, 0x428f, 0xbf4b, 0x3482, 0x18c0, 0x4158, 0x4454, 0xbf5e, 0xbae3, 0x18cf, 0x4221, 0x42e8, 0x2748, 0xbfbd, 0x424f, 0x41f9, 0x41d8, 0x40e2, 0x285a, 0x426a, 0x43e0, 0x4170, 0x4387, 0xaf96, 0x3f64, 0x4066, 0xbf28, 0x4089, 0x2a20, 0x43c9, 0x43fd, 0x4096, 0x460b, 0xbf7b, 0xbadd, 0x1a8d, 0x1c50, 0x401c, 0x41ea, 0xa29b, 0xba76, 0xbae3, 0xb2f9, 0x4240, 0x4193, 0x0dd9, 0xbf9a, 0xba6e, 0x4362, 0x2f82, 0x41b2, 0x4111, 0x442b, 0xa3ab, 0x4069, 0xba77, 0x3e1a, 0xbfa0, 0xaac3, 0x1fa1, 0x4122, 0x4601, 0x43f2, 0x4031, 0x43b3, 0x1305, 0xb2ff, 0x1da3, 0x40a3, 0x4019, 0xbfba, 0x40a3, 0xba43, 0x41f9, 0xb2a0, 0xae39, 0x41d2, 0x0268, 0xb2b4, 0x4082, 0x4197, 0x1ed8, 0x4323, 0x43a4, 0xbaef, 0x082d, 0x4065, 0x4188, 0x42c9, 0xa7c3, 0xbf45, 0x4269, 0x401e, 0x45b1, 0x427b, 0x43cf, 0x4242, 0xba2b, 0xbf0f, 0x4392, 0xb09c, 0xb284, 0x4117, 0x17e3, 0x414a, 0xb0ac, 0xbfd7, 0xba34, 0xbf70, 0xb0ba, 0x4243, 0xb20e, 0x431e, 0x441b, 0x43e7, 0x4005, 0xacd8, 0xba47, 0xbf85, 0xa91c, 0x42c8, 0x0b69, 0xa1d4, 0x1f9d, 0x4100, 0x41c3, 0x40a5, 0xb2a1, 0x1f71, 0xb2d3, 0x4424, 0x4176, 0x439e, 0xb2e0, 0x42f8, 0x40d1, 0xb204, 0x4617, 0x462b, 0x40e6, 0x416f, 0x4197, 0xb2ea, 0x42cf, 0x0d0d, 0xbfa7, 0xb2b5, 0x13da, 0xbaec, 0x4351, 0x42af, 0xbaf1, 0xb2e7, 0x0ff2, 0x45d2, 0xbf9a, 0x414d, 0x1ddb, 0x4047, 0x4106, 0xa497, 0x40b7, 0x2043, 0xbfe1, 0x40e4, 0x41e4, 0xb207, 0xb255, 0x4134, 0x285e, 0xb24d, 0xb28c, 0x40ab, 0x4359, 0xbfc9, 0xb25f, 0x3c0a, 0x40d3, 0x1b61, 0x41fe, 0x4443, 0x45cc, 0x4242, 0xb275, 0xb24b, 0x228c, 0x42c1, 0x437a, 0x40d9, 0x27fc, 0x38fc, 0x43e4, 0x418f, 0xbf3c, 0xb043, 0x18c6, 0x4246, 0xbfab, 0xb248, 0x08df, 0xba5e, 0x419f, 0x41d2, 0x41c1, 0x4084, 0x42a7, 0x46e4, 0x40d0, 0x43e2, 0xaef6, 0x40f3, 0xb2f6, 0x422b, 0xa7b8, 0x4596, 0x405a, 0xb203, 0xad67, 0xb023, 0xbf0b, 0x3f5c, 0x46d9, 0x29a6, 0x42c9, 0x41c7, 0xbaf7, 0x1173, 0x41cf, 0x4388, 0xbf5b, 0x45c3, 0xba74, 0xbad9, 0xb279, 0x40ad, 0x4591, 0x4332, 0x40ae, 0x1963, 0x1ced, 0x0f02, 0xba62, 0x42b6, 0x4260, 0xbaed, 0x42e7, 0xb2f9, 0x312b, 0x43d8, 0x1dfa, 0x1440, 0xa31d, 0x44c2, 0xba08, 0xb01a, 0xbac7, 0xbf9d, 0x45dc, 0x43ca, 0xaad2, 0x0c3a, 0xaa18, 0x1024, 0x3f34, 0x46fb, 0xb0e3, 0xb2e8, 0x331a, 0xbf80, 0x2092, 0x4257, 0x4328, 0xb0e0, 0xb07d, 0x4268, 0xbf76, 0x0232, 0x42df, 0xb2a0, 0xb2ab, 0x4022, 0x402f, 0x42d3, 0x1ec6, 0xb2f6, 0x18a4, 0xbaed, 0x41a9, 0xbad1, 0x4175, 0xb06b, 0x405f, 0x4189, 0xaa10, 0x42c4, 0xba1a, 0xa362, 0x2a89, 0x4022, 0xb0df, 0x0583, 0xba04, 0xbf98, 0x46b4, 0x0d9a, 0xbaec, 0xba1c, 0x2507, 0x43be, 0x43d0, 0x407c, 0xbf80, 0x0db8, 0x4114, 0x4329, 0xbf4a, 0x442b, 0xb0d9, 0xb02a, 0x4063, 0x068e, 0x40a1, 0xbfcb, 0x4398, 0x1aab, 0x42ec, 0x41b6, 0xba5a, 0x411e, 0x456b, 0x42a1, 0xba39, 0x4183, 0x4222, 0xbfb1, 0x43ca, 0xb05a, 0x4474, 0x4546, 0x1140, 0x18cc, 0x43e2, 0xba0c, 0x2c60, 0x428a, 0x426c, 0x1909, 0x42b3, 0xb049, 0x425a, 0x4234, 0x406a, 0x02de, 0x0a53, 0x4038, 0x4079, 0xbfe0, 0x40d4, 0xba20, 0x4010, 0xbaeb, 0xb2b8, 0x3c73, 0x384d, 0xbf5f, 0xb22c, 0x3e1f, 0xb2f5, 0xa11e, 0x1d16, 0x1cd4, 0xbfaa, 0x0d49, 0x4112, 0x09c1, 0x4249, 0xb211, 0x4393, 0xb210, 0xb295, 0xbf43, 0x08a4, 0x40ad, 0x4635, 0xbf70, 0x462d, 0x07ae, 0x4357, 0xb07c, 0x433c, 0x1d49, 0x394d, 0x4340, 0x4310, 0x3c5b, 0xae19, 0xb044, 0xb0c1, 0x4675, 0x3437, 0xb225, 0x4013, 0xba48, 0x42e5, 0x382d, 0x42f8, 0x01ac, 0xbf28, 0x426a, 0x424b, 0x45ce, 0xb0f4, 0x40fc, 0xb28a, 0xb2aa, 0xb098, 0xb2ec, 0x4193, 0x1b94, 0x40c9, 0x4145, 0x22d4, 0x14ab, 0xbf32, 0x3629, 0x46b5, 0x454b, 0x1c0c, 0xbaf7, 0x1078, 0xb20f, 0x434d, 0xbaff, 0x4327, 0x4282, 0x4251, 0x3560, 0x419b, 0x4694, 0x1f84, 0x42e6, 0xa35c, 0x4194, 0xa25f, 0x2f49, 0xbace, 0x1cdf, 0xb062, 0x2c47, 0x41b0, 0xbf77, 0x429e, 0xb280, 0x42e6, 0x40e5, 0xb282, 0x4002, 0x08db, 0xba3f, 0x46fc, 0xb00b, 0xba3b, 0x41dd, 0xb286, 0x1677, 0x1eff, 0xb254, 0xb2c2, 0x0100, 0x1699, 0x1c80, 0x00fd, 0x0604, 0x3bfd, 0x15b4, 0xba0c, 0x25fc, 0x42db, 0x4354, 0xbf0b, 0x1c85, 0x40cc, 0xb2f8, 0xb01c, 0x43f9, 0xb2e3, 0x438f, 0x45cb, 0x1d66, 0x430c, 0x46c0, 0x42bc, 0x41d6, 0xbfaf, 0xba63, 0x078d, 0x42c2, 0x4266, 0x4591, 0x2b98, 0x4478, 0x1fa1, 0x3b41, 0xb0ea, 0xb032, 0x4033, 0xb093, 0x0e51, 0x4357, 0xba31, 0xba29, 0xaa85, 0x40e3, 0x1e97, 0x1f3a, 0x067b, 0x428d, 0x4266, 0x430c, 0xb2ee, 0xbfcb, 0xac4b, 0xba04, 0xb009, 0x4290, 0x12a4, 0x40a2, 0x1d68, 0x4140, 0x07d3, 0x1fcb, 0xb226, 0x03c1, 0x459d, 0x42a3, 0x40a1, 0x409f, 0x1a49, 0x4040, 0x39e8, 0x4214, 0x40c5, 0xb066, 0xbf4e, 0x43ec, 0x01da, 0x420f, 0x43d5, 0xba21, 0x0941, 0xba04, 0x401a, 0xba44, 0x421c, 0xbf98, 0xbac2, 0xa729, 0xbf80, 0x0966, 0x1970, 0x402f, 0x22fc, 0x432b, 0x4026, 0x434b, 0x43e7, 0xb06f, 0xbf08, 0x403d, 0x1454, 0x44e8, 0xbf4c, 0xbafd, 0x42cd, 0x104f, 0x4361, 0x4253, 0x34fe, 0x1d4d, 0xa421, 0x21da, 0x4488, 0xbafb, 0x418f, 0x41ec, 0xb203, 0x4190, 0x45d6, 0x3a4f, 0xbac0, 0xbf9c, 0x45a4, 0x43c1, 0xba5c, 0x0eaa, 0x4241, 0xb230, 0xb21a, 0xb070, 0x43f9, 0x40a0, 0x42ec, 0x423c, 0xba04, 0x41b0, 0xb25d, 0xb09e, 0x462e, 0x41ae, 0x40f5, 0x4338, 0x28dc, 0xb004, 0xaf65, 0xb29b, 0x40d0, 0x2689, 0x4302, 0xbf37, 0x1467, 0x40ff, 0xab16, 0x40cf, 0x45a8, 0x403c, 0x4340, 0x05f5, 0x2cca, 0x42d3, 0x1583, 0x1a0e, 0x40ae, 0x3d53, 0x412e, 0x4354, 0x4328, 0x461a, 0x4208, 0x413c, 0x366a, 0xbad5, 0x41be, 0x1b57, 0xbf3f, 0x43d2, 0x425f, 0x324a, 0xb0b4, 0x3dbb, 0x4395, 0x4168, 0x4381, 0xb0af, 0x1b4b, 0x43b9, 0xb272, 0xb290, 0x3ca5, 0xba31, 0xba02, 0x43a2, 0xba37, 0xbf00, 0x1d08, 0x4442, 0x4261, 0x3c8b, 0x09bd, 0x4051, 0x294a, 0x435e, 0xbf9a, 0x426b, 0xb0de, 0xba13, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xb365a6c0, 0x01723518, 0x0009419f, 0x745fc87d, 0x5ed42207, 0x1f49801a, 0x138d5de7, 0xd2498a44, 0x0115d59c, 0x1cc12bbe, 0x5e000be4, 0xe36b4a94, 0x3974216e, 0x5afb38c7, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0x69000004, 0x5c11201c, 0x5c1120b9, 0xb920115c, 0xfffffed0, 0x01a40000, 0x00004ffb, 0x69000000, 0x5c1120b9, 0xf9076780, 0x42812c14, 0x000014ca, 0x00001650, 0x5afb4adf, 0x00000000, 0x200001d0 }, + Instructions = [0xbacf, 0xbfa6, 0xb202, 0x40b6, 0x4165, 0x42b2, 0xb299, 0x40d5, 0x4183, 0xb09b, 0x4018, 0xb2a2, 0x4123, 0x0034, 0x45b6, 0x05e6, 0xaadf, 0x400e, 0x44da, 0xb220, 0xbfc8, 0x4147, 0x089b, 0x40e1, 0xa64f, 0xac9d, 0xb2cc, 0x39d6, 0xbf46, 0x42c9, 0x4314, 0x2b9a, 0x42cc, 0x19d2, 0x187f, 0x3b09, 0xba5f, 0xb2ef, 0x4281, 0x4298, 0x4253, 0xb284, 0x40ef, 0x4148, 0xaa53, 0x2d5e, 0x4301, 0xbf49, 0x4365, 0x3271, 0xb278, 0x10ca, 0x3100, 0x4298, 0xbfaa, 0xb27e, 0x46b9, 0x1972, 0xb08a, 0x428c, 0x4398, 0x1610, 0x4160, 0x40e9, 0x403b, 0x0964, 0xbf0d, 0x40e6, 0x40b1, 0x4183, 0x43af, 0x4195, 0x3dda, 0xa5d0, 0x2ba7, 0xb0d0, 0x1486, 0x4312, 0x42c5, 0xa382, 0x016e, 0xbf5c, 0x428b, 0xb2f2, 0x4367, 0xbf27, 0xba7b, 0x4676, 0x4229, 0x41f9, 0xb0b1, 0x4371, 0x40e3, 0x41f3, 0x1d96, 0x4019, 0xbad5, 0x0714, 0xbaf8, 0x3df6, 0x1b08, 0xb2ad, 0x32ce, 0xb26b, 0x120d, 0x438c, 0x41a6, 0x1e12, 0x421c, 0x416b, 0xb2ca, 0x4298, 0x31dc, 0xbf0c, 0x27c0, 0x41ea, 0x18b6, 0x4097, 0x42ed, 0x059a, 0x42fd, 0x428a, 0x4216, 0x1846, 0x43ec, 0x4194, 0x247c, 0x4347, 0xbf8f, 0x45b4, 0xb2cd, 0x41e7, 0xb2b8, 0xaf7f, 0xbf6c, 0xbae3, 0x4117, 0x43ae, 0x41b9, 0xbfe0, 0x144c, 0xbf13, 0x4292, 0x0fcd, 0x4329, 0x43f7, 0x1aba, 0x2109, 0x41e3, 0x4426, 0x401c, 0x40ea, 0xae86, 0x42c2, 0xbf02, 0x43c1, 0x2e2f, 0x42c3, 0x40a1, 0x4161, 0x43ff, 0x1a3e, 0x4334, 0xb234, 0xb256, 0x4037, 0xbaf8, 0x40e5, 0xba12, 0x2f78, 0x4019, 0x4144, 0x4305, 0x21a3, 0xbfcf, 0x0a76, 0x412b, 0xad51, 0x01b7, 0x4276, 0x1aa1, 0x42eb, 0x405b, 0xa6b4, 0x40d1, 0x410a, 0x41f4, 0x1a37, 0x1bd6, 0x38ea, 0xb27b, 0x4120, 0x4238, 0xb250, 0x4099, 0x437a, 0xbfce, 0xba3b, 0xbfb0, 0xb211, 0xa07d, 0x1deb, 0xbad9, 0x448d, 0x1528, 0xbf00, 0xb2d4, 0x44b3, 0x1efb, 0x408d, 0x41c8, 0x43f3, 0x4289, 0x43fa, 0x2672, 0xb2cc, 0x4253, 0x4234, 0xbadc, 0x4049, 0x430a, 0xb280, 0x42ef, 0xbfb7, 0xb276, 0xbac8, 0x416f, 0xb2aa, 0x1bc1, 0x0b1a, 0xb0ee, 0x4022, 0xb273, 0x2575, 0x1867, 0x1e00, 0xb245, 0x41d9, 0x446e, 0xba5f, 0xb07a, 0xb263, 0x2274, 0x135c, 0x4045, 0xb29a, 0x19c5, 0xbf56, 0x4361, 0x422a, 0x4193, 0x4138, 0x0c7c, 0x40b9, 0x2b3b, 0xb2e2, 0xb075, 0x40b4, 0x434e, 0x4363, 0x43d6, 0x10cf, 0x400d, 0x1fc8, 0xbf3d, 0x41ee, 0x4244, 0x2a6c, 0x1e41, 0x3e24, 0x4675, 0x43b5, 0x4032, 0xb080, 0xbf95, 0x431d, 0x4159, 0x43d6, 0xba46, 0xb025, 0xbfae, 0x4024, 0x14c7, 0x2339, 0x41f7, 0x445f, 0x43e8, 0x12db, 0xba11, 0x42bb, 0x42d0, 0x1b2e, 0x1d0b, 0xba72, 0x1c00, 0x1672, 0xbf5a, 0x40bc, 0x1094, 0xb068, 0xb053, 0xb027, 0xb22a, 0x213b, 0x4133, 0xb0e5, 0x1c94, 0xb244, 0x4228, 0x41ec, 0xb2a8, 0x440a, 0x3ea0, 0x3cd2, 0xb28b, 0x431a, 0x4372, 0x4084, 0xb2b5, 0x4135, 0xbf3b, 0x0936, 0x4385, 0x3455, 0x1f02, 0xb2b5, 0x00b2, 0x0a84, 0x43b7, 0x41a9, 0x42ca, 0x2e91, 0xbf18, 0xb242, 0xbfb0, 0x4220, 0xb2bf, 0x44ba, 0x41e7, 0x4181, 0x1eaa, 0x18c0, 0x1a7a, 0x4123, 0x3ffe, 0xa60e, 0x434f, 0x082b, 0x428f, 0xbf4b, 0x3482, 0x18c0, 0x4158, 0x4454, 0xbf5e, 0xbae3, 0x18cf, 0x4221, 0x42e8, 0x2748, 0xbfbd, 0x424f, 0x41f9, 0x41d8, 0x40e2, 0x285a, 0x426a, 0x43e0, 0x4170, 0x4387, 0xaf96, 0x3f64, 0x4066, 0xbf28, 0x4089, 0x2a20, 0x43c9, 0x43fd, 0x4096, 0x460b, 0xbf7b, 0xbadd, 0x1a8d, 0x1c50, 0x401c, 0x41ea, 0xa29b, 0xba76, 0xbae3, 0xb2f9, 0x4240, 0x4193, 0x0dd9, 0xbf9a, 0xba6e, 0x4362, 0x2f82, 0x41b2, 0x4111, 0x442b, 0xa3ab, 0x4069, 0xba77, 0x3e1a, 0xbfa0, 0xaac3, 0x1fa1, 0x4122, 0x4601, 0x43f2, 0x4031, 0x43b3, 0x1305, 0xb2ff, 0x1da3, 0x40a3, 0x4019, 0xbfba, 0x40a3, 0xba43, 0x41f9, 0xb2a0, 0xae39, 0x41d2, 0x0268, 0xb2b4, 0x4082, 0x4197, 0x1ed8, 0x4323, 0x43a4, 0xbaef, 0x082d, 0x4065, 0x4188, 0x42c9, 0xa7c3, 0xbf45, 0x4269, 0x401e, 0x45b1, 0x427b, 0x43cf, 0x4242, 0xba2b, 0xbf0f, 0x4392, 0xb09c, 0xb284, 0x4117, 0x17e3, 0x414a, 0xb0ac, 0xbfd7, 0xba34, 0xbf70, 0xb0ba, 0x4243, 0xb20e, 0x431e, 0x441b, 0x43e7, 0x4005, 0xacd8, 0xba47, 0xbf85, 0xa91c, 0x42c8, 0x0b69, 0xa1d4, 0x1f9d, 0x4100, 0x41c3, 0x40a5, 0xb2a1, 0x1f71, 0xb2d3, 0x4424, 0x4176, 0x439e, 0xb2e0, 0x42f8, 0x40d1, 0xb204, 0x4617, 0x462b, 0x40e6, 0x416f, 0x4197, 0xb2ea, 0x42cf, 0x0d0d, 0xbfa7, 0xb2b5, 0x13da, 0xbaec, 0x4351, 0x42af, 0xbaf1, 0xb2e7, 0x0ff2, 0x45d2, 0xbf9a, 0x414d, 0x1ddb, 0x4047, 0x4106, 0xa497, 0x40b7, 0x2043, 0xbfe1, 0x40e4, 0x41e4, 0xb207, 0xb255, 0x4134, 0x285e, 0xb24d, 0xb28c, 0x40ab, 0x4359, 0xbfc9, 0xb25f, 0x3c0a, 0x40d3, 0x1b61, 0x41fe, 0x4443, 0x45cc, 0x4242, 0xb275, 0xb24b, 0x228c, 0x42c1, 0x437a, 0x40d9, 0x27fc, 0x38fc, 0x43e4, 0x418f, 0xbf3c, 0xb043, 0x18c6, 0x4246, 0xbfab, 0xb248, 0x08df, 0xba5e, 0x419f, 0x41d2, 0x41c1, 0x4084, 0x42a7, 0x46e4, 0x40d0, 0x43e2, 0xaef6, 0x40f3, 0xb2f6, 0x422b, 0xa7b8, 0x4596, 0x405a, 0xb203, 0xad67, 0xb023, 0xbf0b, 0x3f5c, 0x46d9, 0x29a6, 0x42c9, 0x41c7, 0xbaf7, 0x1173, 0x41cf, 0x4388, 0xbf5b, 0x45c3, 0xba74, 0xbad9, 0xb279, 0x40ad, 0x4591, 0x4332, 0x40ae, 0x1963, 0x1ced, 0x0f02, 0xba62, 0x42b6, 0x4260, 0xbaed, 0x42e7, 0xb2f9, 0x312b, 0x43d8, 0x1dfa, 0x1440, 0xa31d, 0x44c2, 0xba08, 0xb01a, 0xbac7, 0xbf9d, 0x45dc, 0x43ca, 0xaad2, 0x0c3a, 0xaa18, 0x1024, 0x3f34, 0x46fb, 0xb0e3, 0xb2e8, 0x331a, 0xbf80, 0x2092, 0x4257, 0x4328, 0xb0e0, 0xb07d, 0x4268, 0xbf76, 0x0232, 0x42df, 0xb2a0, 0xb2ab, 0x4022, 0x402f, 0x42d3, 0x1ec6, 0xb2f6, 0x18a4, 0xbaed, 0x41a9, 0xbad1, 0x4175, 0xb06b, 0x405f, 0x4189, 0xaa10, 0x42c4, 0xba1a, 0xa362, 0x2a89, 0x4022, 0xb0df, 0x0583, 0xba04, 0xbf98, 0x46b4, 0x0d9a, 0xbaec, 0xba1c, 0x2507, 0x43be, 0x43d0, 0x407c, 0xbf80, 0x0db8, 0x4114, 0x4329, 0xbf4a, 0x442b, 0xb0d9, 0xb02a, 0x4063, 0x068e, 0x40a1, 0xbfcb, 0x4398, 0x1aab, 0x42ec, 0x41b6, 0xba5a, 0x411e, 0x456b, 0x42a1, 0xba39, 0x4183, 0x4222, 0xbfb1, 0x43ca, 0xb05a, 0x4474, 0x4546, 0x1140, 0x18cc, 0x43e2, 0xba0c, 0x2c60, 0x428a, 0x426c, 0x1909, 0x42b3, 0xb049, 0x425a, 0x4234, 0x406a, 0x02de, 0x0a53, 0x4038, 0x4079, 0xbfe0, 0x40d4, 0xba20, 0x4010, 0xbaeb, 0xb2b8, 0x3c73, 0x384d, 0xbf5f, 0xb22c, 0x3e1f, 0xb2f5, 0xa11e, 0x1d16, 0x1cd4, 0xbfaa, 0x0d49, 0x4112, 0x09c1, 0x4249, 0xb211, 0x4393, 0xb210, 0xb295, 0xbf43, 0x08a4, 0x40ad, 0x4635, 0xbf70, 0x462d, 0x07ae, 0x4357, 0xb07c, 0x433c, 0x1d49, 0x394d, 0x4340, 0x4310, 0x3c5b, 0xae19, 0xb044, 0xb0c1, 0x4675, 0x3437, 0xb225, 0x4013, 0xba48, 0x42e5, 0x382d, 0x42f8, 0x01ac, 0xbf28, 0x426a, 0x424b, 0x45ce, 0xb0f4, 0x40fc, 0xb28a, 0xb2aa, 0xb098, 0xb2ec, 0x4193, 0x1b94, 0x40c9, 0x4145, 0x22d4, 0x14ab, 0xbf32, 0x3629, 0x46b5, 0x454b, 0x1c0c, 0xbaf7, 0x1078, 0xb20f, 0x434d, 0xbaff, 0x4327, 0x4282, 0x4251, 0x3560, 0x419b, 0x4694, 0x1f84, 0x42e6, 0xa35c, 0x4194, 0xa25f, 0x2f49, 0xbace, 0x1cdf, 0xb062, 0x2c47, 0x41b0, 0xbf77, 0x429e, 0xb280, 0x42e6, 0x40e5, 0xb282, 0x4002, 0x08db, 0xba3f, 0x46fc, 0xb00b, 0xba3b, 0x41dd, 0xb286, 0x1677, 0x1eff, 0xb254, 0xb2c2, 0x0100, 0x1699, 0x1c80, 0x00fd, 0x0604, 0x3bfd, 0x15b4, 0xba0c, 0x25fc, 0x42db, 0x4354, 0xbf0b, 0x1c85, 0x40cc, 0xb2f8, 0xb01c, 0x43f9, 0xb2e3, 0x438f, 0x45cb, 0x1d66, 0x430c, 0x46c0, 0x42bc, 0x41d6, 0xbfaf, 0xba63, 0x078d, 0x42c2, 0x4266, 0x4591, 0x2b98, 0x4478, 0x1fa1, 0x3b41, 0xb0ea, 0xb032, 0x4033, 0xb093, 0x0e51, 0x4357, 0xba31, 0xba29, 0xaa85, 0x40e3, 0x1e97, 0x1f3a, 0x067b, 0x428d, 0x4266, 0x430c, 0xb2ee, 0xbfcb, 0xac4b, 0xba04, 0xb009, 0x4290, 0x12a4, 0x40a2, 0x1d68, 0x4140, 0x07d3, 0x1fcb, 0xb226, 0x03c1, 0x459d, 0x42a3, 0x40a1, 0x409f, 0x1a49, 0x4040, 0x39e8, 0x4214, 0x40c5, 0xb066, 0xbf4e, 0x43ec, 0x01da, 0x420f, 0x43d5, 0xba21, 0x0941, 0xba04, 0x401a, 0xba44, 0x421c, 0xbf98, 0xbac2, 0xa729, 0xbf80, 0x0966, 0x1970, 0x402f, 0x22fc, 0x432b, 0x4026, 0x434b, 0x43e7, 0xb06f, 0xbf08, 0x403d, 0x1454, 0x44e8, 0xbf4c, 0xbafd, 0x42cd, 0x104f, 0x4361, 0x4253, 0x34fe, 0x1d4d, 0xa421, 0x21da, 0x4488, 0xbafb, 0x418f, 0x41ec, 0xb203, 0x4190, 0x45d6, 0x3a4f, 0xbac0, 0xbf9c, 0x45a4, 0x43c1, 0xba5c, 0x0eaa, 0x4241, 0xb230, 0xb21a, 0xb070, 0x43f9, 0x40a0, 0x42ec, 0x423c, 0xba04, 0x41b0, 0xb25d, 0xb09e, 0x462e, 0x41ae, 0x40f5, 0x4338, 0x28dc, 0xb004, 0xaf65, 0xb29b, 0x40d0, 0x2689, 0x4302, 0xbf37, 0x1467, 0x40ff, 0xab16, 0x40cf, 0x45a8, 0x403c, 0x4340, 0x05f5, 0x2cca, 0x42d3, 0x1583, 0x1a0e, 0x40ae, 0x3d53, 0x412e, 0x4354, 0x4328, 0x461a, 0x4208, 0x413c, 0x366a, 0xbad5, 0x41be, 0x1b57, 0xbf3f, 0x43d2, 0x425f, 0x324a, 0xb0b4, 0x3dbb, 0x4395, 0x4168, 0x4381, 0xb0af, 0x1b4b, 0x43b9, 0xb272, 0xb290, 0x3ca5, 0xba31, 0xba02, 0x43a2, 0xba37, 0xbf00, 0x1d08, 0x4442, 0x4261, 0x3c8b, 0x09bd, 0x4051, 0x294a, 0x435e, 0xbf9a, 0x426b, 0xb0de, 0xba13, 0x4770, 0xe7fe + ], + StartRegs = [0xb365a6c0, 0x01723518, 0x0009419f, 0x745fc87d, 0x5ed42207, 0x1f49801a, 0x138d5de7, 0xd2498a44, 0x0115d59c, 0x1cc12bbe, 0x5e000be4, 0xe36b4a94, 0x3974216e, 0x5afb38c7, 0x00000000, 0x900001f0 + ], + FinalRegs = [0x69000004, 0x5c11201c, 0x5c1120b9, 0xb920115c, 0xfffffed0, 0x01a40000, 0x00004ffb, 0x69000000, 0x5c1120b9, 0xf9076780, 0x42812c14, 0x000014ca, 0x00001650, 0x5afb4adf, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x3e9f, 0x423a, 0xb038, 0x1a66, 0x2ab4, 0xbf88, 0x41f2, 0x43ed, 0x46e2, 0xbafa, 0xb277, 0xacc3, 0x3d1f, 0xb2f5, 0x008e, 0x4288, 0x298f, 0x4058, 0x1fc4, 0x4234, 0x4372, 0x422f, 0xb260, 0x41ca, 0x4030, 0x4004, 0x40a9, 0x40c8, 0xb2e9, 0xb24e, 0x1d5a, 0xbf9b, 0xb062, 0x4160, 0x3cb1, 0xba5f, 0x43a1, 0x4362, 0x4553, 0x4260, 0x4329, 0x1061, 0xba58, 0xb2f4, 0x40ad, 0x41be, 0x436a, 0x43a3, 0xbfc0, 0xb0f6, 0x401a, 0x0c62, 0x1513, 0xb205, 0xb215, 0x090b, 0x1c21, 0x28af, 0x4092, 0xb294, 0xbfbd, 0x2cb1, 0x1b1e, 0x0984, 0x4175, 0xa7e8, 0xb273, 0x2636, 0x410b, 0x45c0, 0x41ec, 0xb2eb, 0xb0d0, 0x42ca, 0xba52, 0x4185, 0x1455, 0x4600, 0xb215, 0x1947, 0x24af, 0xba32, 0xbfab, 0x40ac, 0xba0b, 0xba5b, 0x07fa, 0x0723, 0xb2c4, 0x2163, 0x42d5, 0x4004, 0x40a7, 0x45d8, 0x43af, 0x42b4, 0x465d, 0xba27, 0x4395, 0x2d9c, 0x192f, 0x1a6a, 0xb28d, 0xbfc7, 0x458b, 0x4281, 0xadc4, 0x4092, 0x125e, 0xbfac, 0x43c8, 0xadde, 0x2713, 0xb265, 0xbf62, 0x3095, 0xbff0, 0x1bd1, 0x40a8, 0x43e3, 0x18c1, 0x41b0, 0x3fb9, 0x18ae, 0x4314, 0x347e, 0x4258, 0x45b5, 0x4660, 0x401d, 0x1dcc, 0x4667, 0x420b, 0x4172, 0xac70, 0x39f3, 0x4097, 0x19b6, 0x41fe, 0xb0c1, 0x4623, 0x1394, 0xbf25, 0xba65, 0x4101, 0x439d, 0x42e1, 0x4333, 0xb0e5, 0x41dd, 0xb268, 0x22c7, 0x2674, 0xba71, 0x421f, 0x4450, 0x0cd7, 0x40e4, 0x1b43, 0x3ea7, 0x1311, 0xbf4e, 0x411b, 0x4112, 0xa8fa, 0xbf19, 0x4015, 0x3844, 0x40d4, 0x4087, 0xbfa7, 0x1f9b, 0x0c01, 0x213b, 0x3a56, 0x4242, 0x40bf, 0x4233, 0xb046, 0x42b5, 0x4556, 0x3058, 0x42b8, 0x36be, 0x437b, 0x1eb6, 0xbacd, 0x4173, 0x433f, 0x42a2, 0x41f3, 0xba23, 0x412f, 0xacfb, 0x4221, 0xbf25, 0x40b0, 0x40b4, 0xba72, 0xb0f2, 0x461f, 0x3123, 0x037e, 0x4580, 0xa9da, 0x2938, 0x42a6, 0x3aaa, 0x4125, 0x2721, 0xbfa4, 0x2a82, 0xb215, 0x41c0, 0xa1c3, 0xb27f, 0x4223, 0xba05, 0x1e73, 0x4054, 0x4629, 0x4415, 0x1cae, 0xb222, 0x1ac2, 0x424f, 0x206a, 0x4080, 0xb2c3, 0x412a, 0xa37e, 0x4037, 0xb26d, 0xb09a, 0xb211, 0x442d, 0xaca9, 0xbf0d, 0x34d4, 0xbfa0, 0x196a, 0x408f, 0x4313, 0x41ea, 0x1560, 0x46ea, 0x449c, 0x3a47, 0x40a6, 0x440a, 0xb267, 0x33b8, 0xb22c, 0x46eb, 0x1824, 0x3843, 0xbfca, 0xbfd0, 0x0716, 0x1031, 0xba00, 0x0daf, 0xba7e, 0xba72, 0xba11, 0x4375, 0xad64, 0xa1db, 0xb263, 0x42e7, 0x46f3, 0xa375, 0x4097, 0xa116, 0x4302, 0x19f5, 0x40ce, 0xbaf9, 0x269e, 0xbf0b, 0x407e, 0xb0f0, 0x45f4, 0x40fc, 0x1e2e, 0xba56, 0x4136, 0xba41, 0x4222, 0xbf1c, 0xb00c, 0x433f, 0xba7a, 0x41a5, 0xbfd0, 0x4260, 0xaf36, 0x42f3, 0x4376, 0xb0e8, 0x42e7, 0x0b6f, 0x4315, 0x1e04, 0xa4ef, 0x135b, 0xa6cd, 0x29d1, 0x40b6, 0x42d0, 0x4596, 0x4383, 0x466d, 0xbf7d, 0x46e4, 0x3014, 0xba02, 0x2ad7, 0xb2fe, 0x3de9, 0x1aa7, 0x2d8c, 0x150c, 0x4233, 0x40a0, 0xba40, 0x3a7a, 0x4361, 0x4447, 0xae8e, 0x4268, 0x4391, 0x41c8, 0x29dc, 0x4174, 0xb23c, 0x1bfc, 0x2c34, 0xbfc0, 0x194b, 0xbf9c, 0x43a6, 0xba78, 0x1b4b, 0x43ce, 0xbad7, 0xbfad, 0x067f, 0x4117, 0x4298, 0x4380, 0xb206, 0xba22, 0x4553, 0x3d55, 0x42f4, 0x1c7d, 0x419e, 0x206f, 0x1af1, 0xbff0, 0x3531, 0x1d92, 0x4150, 0x3fb8, 0x1e5f, 0x4250, 0x1fa1, 0x4202, 0xb0a1, 0xbf11, 0x45d9, 0x4676, 0x40fa, 0x421e, 0x1f6a, 0x0bf8, 0x29cc, 0xbf9d, 0x412e, 0xbf60, 0x3489, 0x4007, 0xba3b, 0x1836, 0x297c, 0x4284, 0x42e1, 0x4409, 0x429f, 0xba1a, 0xbac9, 0xb2b9, 0x3794, 0xa128, 0xa5c4, 0x42fb, 0x4593, 0x4184, 0xb0de, 0x0384, 0xbf3a, 0x3416, 0x3ea6, 0x411c, 0x42cd, 0xbfc0, 0xbaf3, 0xaa2e, 0x4317, 0xb2b2, 0x42d2, 0xb025, 0xb2d1, 0x091b, 0x423a, 0xb094, 0x468d, 0x4426, 0x31f9, 0xbf2e, 0x1e6b, 0x4388, 0x1c68, 0xba48, 0x3089, 0x4607, 0xba01, 0x416d, 0x1d85, 0x4424, 0x40d4, 0x41fa, 0xb28e, 0x1d5f, 0x4177, 0xb0d1, 0x1c5e, 0x4203, 0x0cf5, 0xb24b, 0x1cde, 0x1d65, 0x4281, 0xbfa6, 0xba36, 0x42a4, 0x4243, 0x44fa, 0x43b6, 0xa162, 0x41be, 0xb05d, 0x001b, 0x4283, 0xb2fd, 0x0395, 0xb28d, 0x40fb, 0xba1f, 0x43b1, 0x41af, 0x4157, 0xb245, 0x42f4, 0xb06b, 0xb27c, 0x1d2f, 0x45ee, 0x4435, 0xbfe2, 0x190a, 0x43a7, 0x4565, 0x41c3, 0xba46, 0x42d3, 0xb014, 0x23e7, 0x43a1, 0x436d, 0x4386, 0x1b31, 0x44e9, 0x427e, 0x1b44, 0xba66, 0xb02b, 0x404f, 0x42df, 0x438c, 0xba6f, 0x4083, 0xb02c, 0xba59, 0xaf47, 0x456d, 0xbfbd, 0xb2bd, 0x1e66, 0xbaee, 0x41af, 0xb05e, 0xbf70, 0x41eb, 0x4099, 0x42f1, 0x41d3, 0x40ed, 0xaefe, 0x4223, 0xa7ab, 0x02cb, 0x4393, 0xb258, 0xbfa3, 0x4311, 0x43f3, 0xb2f5, 0x43f4, 0xbf5e, 0x1854, 0x2a65, 0x1c8d, 0x4363, 0x4087, 0x40b2, 0x410a, 0xa11a, 0xb2ca, 0x1efa, 0x20d8, 0x419c, 0x41fd, 0x4283, 0x43f4, 0x4264, 0x420a, 0x469c, 0x1961, 0xb2fc, 0x429a, 0xb2b7, 0x4293, 0xa373, 0xbf98, 0xab6d, 0xb266, 0x01e3, 0x4176, 0xa2e0, 0x0265, 0x42ba, 0x40ce, 0x0695, 0x42a8, 0x3b85, 0x1ea1, 0x428b, 0x442a, 0x4452, 0xbf3c, 0x1bcb, 0xba76, 0x466b, 0x41bb, 0x44b8, 0x401d, 0xba78, 0x4020, 0x46a2, 0xb2ce, 0xb24f, 0x4202, 0xba02, 0x46d1, 0xbf3b, 0x4329, 0x0e1d, 0x40f7, 0x0daa, 0x40b6, 0xb2f0, 0xb208, 0x45a8, 0xbf0a, 0x43d7, 0xb238, 0x43e5, 0x43f3, 0x1dee, 0x3982, 0xbaf5, 0xbf70, 0x022f, 0x42d8, 0x4270, 0xae68, 0x1b50, 0xb2fa, 0x43ce, 0xa22b, 0x4103, 0xb0fe, 0xbf0a, 0xba03, 0xba58, 0xb21c, 0x4242, 0x428b, 0xb21b, 0x46fc, 0xbad7, 0x44f9, 0x409d, 0x1fa0, 0x422f, 0x4045, 0x0cb9, 0xbf37, 0x4168, 0x42e2, 0x1d17, 0x4146, 0x404b, 0x4397, 0x4023, 0x4218, 0x1be7, 0xb20c, 0xbfd0, 0x4166, 0x4677, 0x442e, 0x0bc1, 0x462e, 0x4103, 0x1b0b, 0xb0b5, 0xbf39, 0x3c04, 0xb2a6, 0x4132, 0x031d, 0xbac8, 0xb0d9, 0x436b, 0xb208, 0x4127, 0xbad3, 0x0705, 0x116f, 0xb23b, 0xba75, 0xaccc, 0xba6c, 0x19b5, 0x42c1, 0xb296, 0xbf98, 0x28ab, 0x1165, 0x4195, 0xb06b, 0x4356, 0xbf21, 0x2e2c, 0xba6e, 0xbf70, 0x1b50, 0x1d56, 0x4299, 0x41d0, 0xb2b1, 0x4097, 0x436b, 0x442b, 0xba7f, 0x409b, 0x2918, 0x40a4, 0x2155, 0x444c, 0x3bce, 0x4417, 0x1d3d, 0xb0b1, 0x4414, 0xb28b, 0xbf9e, 0x26d9, 0xba2e, 0x1b11, 0xbf60, 0x40a3, 0xb244, 0xb2b3, 0x4357, 0x40fd, 0x4253, 0x1b39, 0x408f, 0x43e5, 0x2a5f, 0x467b, 0x0fc0, 0x43fa, 0x1ad5, 0x0dca, 0x414e, 0x4401, 0x1cb1, 0xb229, 0x0cdd, 0x19a8, 0x29c7, 0xb2d4, 0x45b6, 0xbf6a, 0x085b, 0x0aa6, 0x195f, 0x4178, 0x0eae, 0x42af, 0xbfa2, 0x287d, 0x40e7, 0x45cb, 0x4233, 0xa5e9, 0x4005, 0xba4a, 0x42c7, 0xbf99, 0xba16, 0x402b, 0xb0a5, 0xb286, 0x40cb, 0x436b, 0x4326, 0x42da, 0x1762, 0x41f8, 0xb2c4, 0x4172, 0x3324, 0x1be2, 0xb210, 0x0a29, 0x2800, 0x225c, 0x02b0, 0xa200, 0x4125, 0x43c4, 0x4055, 0xb22c, 0x2b85, 0x42bc, 0x3465, 0xa4e5, 0xbfba, 0x4268, 0x33b2, 0x1ef1, 0x1d70, 0x4314, 0x4335, 0x4112, 0x2e63, 0x1fc5, 0xb091, 0x0ce5, 0x42a8, 0x17b0, 0x407a, 0xbf5d, 0x407a, 0x3b90, 0x0908, 0xb282, 0x1327, 0xbf00, 0x4376, 0x4278, 0x4075, 0x1de1, 0x4209, 0xb2c6, 0x42fd, 0x0018, 0x1d05, 0x46a3, 0x4290, 0xba7b, 0x0fc7, 0x1652, 0xbac1, 0x4309, 0x41b7, 0x36d6, 0xbf34, 0x43d6, 0x449c, 0xb2a3, 0xb269, 0x41d7, 0x24c0, 0xba4e, 0x40a0, 0xb005, 0x4454, 0x1542, 0x4311, 0x40ef, 0xb28f, 0x42c9, 0x2a56, 0x44f9, 0x407f, 0x454b, 0x2eff, 0x43e9, 0xba66, 0x4332, 0x4344, 0xb0a0, 0xbf31, 0x3bdd, 0x1e29, 0x1289, 0x3d48, 0x4077, 0xace3, 0x43ee, 0xb085, 0x1d32, 0x43b9, 0x411b, 0xb2ee, 0xb06f, 0xb26a, 0xb0ed, 0x0de4, 0x2e64, 0x36cd, 0x44d9, 0xbf26, 0x2866, 0xb271, 0x4132, 0x435c, 0xab9f, 0xa5f0, 0x40e8, 0x1dc4, 0x44e5, 0x409e, 0x15a3, 0x2a03, 0x4032, 0x43c2, 0xb29d, 0x3611, 0xbf02, 0x1a71, 0xb2bd, 0x44a5, 0x44dd, 0x2f63, 0x1176, 0x4017, 0x1c57, 0x42c5, 0xb257, 0xb01a, 0xb210, 0xba3e, 0x1033, 0xbaea, 0x2913, 0xb216, 0xbfa0, 0x414a, 0xbf01, 0x45dc, 0xba34, 0x43a4, 0x09ca, 0x44cc, 0x1fe2, 0xba21, 0x1c5d, 0x1a65, 0xba3f, 0xbfa4, 0x4344, 0xb24f, 0x1d4a, 0x4191, 0x4444, 0xba06, 0x413b, 0xbf58, 0x2509, 0xba2b, 0xb2a8, 0x1f68, 0x3a63, 0x467a, 0x05de, 0x4186, 0xba34, 0x42db, 0x1e2d, 0xbaef, 0xbfd0, 0x1c2d, 0x4176, 0x26bd, 0x4214, 0xa8fb, 0x4187, 0xba36, 0x42aa, 0x4073, 0x46d8, 0xb2f4, 0x40b5, 0x43fa, 0xbf87, 0x4225, 0x4336, 0x4376, 0x1c37, 0x4142, 0xb2e3, 0xbfe0, 0x3578, 0x41e3, 0x41cb, 0xb246, 0x402f, 0x2890, 0x422c, 0x40e9, 0x1892, 0x422d, 0xb209, 0xb2d6, 0x4045, 0xa2a6, 0x43bc, 0xbf37, 0x43ee, 0x4239, 0x326a, 0x3538, 0xb240, 0x43e8, 0xaae3, 0x3b5c, 0xa277, 0xb26f, 0xbf6d, 0xaf28, 0x4372, 0x1e45, 0x40f4, 0xb09f, 0x46e9, 0xb272, 0x4275, 0x2cb5, 0x42df, 0x03a3, 0x413f, 0xbac0, 0x40fa, 0xbad1, 0x0fba, 0xb2ca, 0x42dc, 0x4119, 0xb299, 0x41b9, 0x415f, 0xb240, 0xbf9c, 0xb224, 0x41de, 0x42f1, 0xbace, 0x34a5, 0xb073, 0xb2e6, 0x4073, 0x4185, 0xba32, 0x429b, 0x037d, 0xbfb0, 0x1855, 0xba71, 0x4199, 0x425a, 0x2faf, 0x410d, 0x41f6, 0x4349, 0x1eb6, 0x4333, 0x40dd, 0x40e9, 0xbf8b, 0x431c, 0x1eb9, 0x40c9, 0xb2ca, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x034bf2c4, 0xca960aa8, 0x9456a116, 0xb988fc86, 0x50cab48a, 0xa5759d59, 0x0dfb191d, 0x2b41a1c1, 0x1b2df3ef, 0x1463f435, 0x89ed0b15, 0x9d5b9a9c, 0x39b4b3b7, 0x23d2d921, 0x00000000, 0xc00001f0 }, - FinalRegs = new uint[] { 0xffffffc7, 0xfffffffd, 0x000000fd, 0x280000a7, 0x000000a5, 0x00000000, 0x28000003, 0xffffffff, 0x00001dec, 0x00003494, 0x000000ac, 0x00001dec, 0x00005e9c, 0x00003660, 0x00000000, 0x000001d0 }, + Instructions = [0x3e9f, 0x423a, 0xb038, 0x1a66, 0x2ab4, 0xbf88, 0x41f2, 0x43ed, 0x46e2, 0xbafa, 0xb277, 0xacc3, 0x3d1f, 0xb2f5, 0x008e, 0x4288, 0x298f, 0x4058, 0x1fc4, 0x4234, 0x4372, 0x422f, 0xb260, 0x41ca, 0x4030, 0x4004, 0x40a9, 0x40c8, 0xb2e9, 0xb24e, 0x1d5a, 0xbf9b, 0xb062, 0x4160, 0x3cb1, 0xba5f, 0x43a1, 0x4362, 0x4553, 0x4260, 0x4329, 0x1061, 0xba58, 0xb2f4, 0x40ad, 0x41be, 0x436a, 0x43a3, 0xbfc0, 0xb0f6, 0x401a, 0x0c62, 0x1513, 0xb205, 0xb215, 0x090b, 0x1c21, 0x28af, 0x4092, 0xb294, 0xbfbd, 0x2cb1, 0x1b1e, 0x0984, 0x4175, 0xa7e8, 0xb273, 0x2636, 0x410b, 0x45c0, 0x41ec, 0xb2eb, 0xb0d0, 0x42ca, 0xba52, 0x4185, 0x1455, 0x4600, 0xb215, 0x1947, 0x24af, 0xba32, 0xbfab, 0x40ac, 0xba0b, 0xba5b, 0x07fa, 0x0723, 0xb2c4, 0x2163, 0x42d5, 0x4004, 0x40a7, 0x45d8, 0x43af, 0x42b4, 0x465d, 0xba27, 0x4395, 0x2d9c, 0x192f, 0x1a6a, 0xb28d, 0xbfc7, 0x458b, 0x4281, 0xadc4, 0x4092, 0x125e, 0xbfac, 0x43c8, 0xadde, 0x2713, 0xb265, 0xbf62, 0x3095, 0xbff0, 0x1bd1, 0x40a8, 0x43e3, 0x18c1, 0x41b0, 0x3fb9, 0x18ae, 0x4314, 0x347e, 0x4258, 0x45b5, 0x4660, 0x401d, 0x1dcc, 0x4667, 0x420b, 0x4172, 0xac70, 0x39f3, 0x4097, 0x19b6, 0x41fe, 0xb0c1, 0x4623, 0x1394, 0xbf25, 0xba65, 0x4101, 0x439d, 0x42e1, 0x4333, 0xb0e5, 0x41dd, 0xb268, 0x22c7, 0x2674, 0xba71, 0x421f, 0x4450, 0x0cd7, 0x40e4, 0x1b43, 0x3ea7, 0x1311, 0xbf4e, 0x411b, 0x4112, 0xa8fa, 0xbf19, 0x4015, 0x3844, 0x40d4, 0x4087, 0xbfa7, 0x1f9b, 0x0c01, 0x213b, 0x3a56, 0x4242, 0x40bf, 0x4233, 0xb046, 0x42b5, 0x4556, 0x3058, 0x42b8, 0x36be, 0x437b, 0x1eb6, 0xbacd, 0x4173, 0x433f, 0x42a2, 0x41f3, 0xba23, 0x412f, 0xacfb, 0x4221, 0xbf25, 0x40b0, 0x40b4, 0xba72, 0xb0f2, 0x461f, 0x3123, 0x037e, 0x4580, 0xa9da, 0x2938, 0x42a6, 0x3aaa, 0x4125, 0x2721, 0xbfa4, 0x2a82, 0xb215, 0x41c0, 0xa1c3, 0xb27f, 0x4223, 0xba05, 0x1e73, 0x4054, 0x4629, 0x4415, 0x1cae, 0xb222, 0x1ac2, 0x424f, 0x206a, 0x4080, 0xb2c3, 0x412a, 0xa37e, 0x4037, 0xb26d, 0xb09a, 0xb211, 0x442d, 0xaca9, 0xbf0d, 0x34d4, 0xbfa0, 0x196a, 0x408f, 0x4313, 0x41ea, 0x1560, 0x46ea, 0x449c, 0x3a47, 0x40a6, 0x440a, 0xb267, 0x33b8, 0xb22c, 0x46eb, 0x1824, 0x3843, 0xbfca, 0xbfd0, 0x0716, 0x1031, 0xba00, 0x0daf, 0xba7e, 0xba72, 0xba11, 0x4375, 0xad64, 0xa1db, 0xb263, 0x42e7, 0x46f3, 0xa375, 0x4097, 0xa116, 0x4302, 0x19f5, 0x40ce, 0xbaf9, 0x269e, 0xbf0b, 0x407e, 0xb0f0, 0x45f4, 0x40fc, 0x1e2e, 0xba56, 0x4136, 0xba41, 0x4222, 0xbf1c, 0xb00c, 0x433f, 0xba7a, 0x41a5, 0xbfd0, 0x4260, 0xaf36, 0x42f3, 0x4376, 0xb0e8, 0x42e7, 0x0b6f, 0x4315, 0x1e04, 0xa4ef, 0x135b, 0xa6cd, 0x29d1, 0x40b6, 0x42d0, 0x4596, 0x4383, 0x466d, 0xbf7d, 0x46e4, 0x3014, 0xba02, 0x2ad7, 0xb2fe, 0x3de9, 0x1aa7, 0x2d8c, 0x150c, 0x4233, 0x40a0, 0xba40, 0x3a7a, 0x4361, 0x4447, 0xae8e, 0x4268, 0x4391, 0x41c8, 0x29dc, 0x4174, 0xb23c, 0x1bfc, 0x2c34, 0xbfc0, 0x194b, 0xbf9c, 0x43a6, 0xba78, 0x1b4b, 0x43ce, 0xbad7, 0xbfad, 0x067f, 0x4117, 0x4298, 0x4380, 0xb206, 0xba22, 0x4553, 0x3d55, 0x42f4, 0x1c7d, 0x419e, 0x206f, 0x1af1, 0xbff0, 0x3531, 0x1d92, 0x4150, 0x3fb8, 0x1e5f, 0x4250, 0x1fa1, 0x4202, 0xb0a1, 0xbf11, 0x45d9, 0x4676, 0x40fa, 0x421e, 0x1f6a, 0x0bf8, 0x29cc, 0xbf9d, 0x412e, 0xbf60, 0x3489, 0x4007, 0xba3b, 0x1836, 0x297c, 0x4284, 0x42e1, 0x4409, 0x429f, 0xba1a, 0xbac9, 0xb2b9, 0x3794, 0xa128, 0xa5c4, 0x42fb, 0x4593, 0x4184, 0xb0de, 0x0384, 0xbf3a, 0x3416, 0x3ea6, 0x411c, 0x42cd, 0xbfc0, 0xbaf3, 0xaa2e, 0x4317, 0xb2b2, 0x42d2, 0xb025, 0xb2d1, 0x091b, 0x423a, 0xb094, 0x468d, 0x4426, 0x31f9, 0xbf2e, 0x1e6b, 0x4388, 0x1c68, 0xba48, 0x3089, 0x4607, 0xba01, 0x416d, 0x1d85, 0x4424, 0x40d4, 0x41fa, 0xb28e, 0x1d5f, 0x4177, 0xb0d1, 0x1c5e, 0x4203, 0x0cf5, 0xb24b, 0x1cde, 0x1d65, 0x4281, 0xbfa6, 0xba36, 0x42a4, 0x4243, 0x44fa, 0x43b6, 0xa162, 0x41be, 0xb05d, 0x001b, 0x4283, 0xb2fd, 0x0395, 0xb28d, 0x40fb, 0xba1f, 0x43b1, 0x41af, 0x4157, 0xb245, 0x42f4, 0xb06b, 0xb27c, 0x1d2f, 0x45ee, 0x4435, 0xbfe2, 0x190a, 0x43a7, 0x4565, 0x41c3, 0xba46, 0x42d3, 0xb014, 0x23e7, 0x43a1, 0x436d, 0x4386, 0x1b31, 0x44e9, 0x427e, 0x1b44, 0xba66, 0xb02b, 0x404f, 0x42df, 0x438c, 0xba6f, 0x4083, 0xb02c, 0xba59, 0xaf47, 0x456d, 0xbfbd, 0xb2bd, 0x1e66, 0xbaee, 0x41af, 0xb05e, 0xbf70, 0x41eb, 0x4099, 0x42f1, 0x41d3, 0x40ed, 0xaefe, 0x4223, 0xa7ab, 0x02cb, 0x4393, 0xb258, 0xbfa3, 0x4311, 0x43f3, 0xb2f5, 0x43f4, 0xbf5e, 0x1854, 0x2a65, 0x1c8d, 0x4363, 0x4087, 0x40b2, 0x410a, 0xa11a, 0xb2ca, 0x1efa, 0x20d8, 0x419c, 0x41fd, 0x4283, 0x43f4, 0x4264, 0x420a, 0x469c, 0x1961, 0xb2fc, 0x429a, 0xb2b7, 0x4293, 0xa373, 0xbf98, 0xab6d, 0xb266, 0x01e3, 0x4176, 0xa2e0, 0x0265, 0x42ba, 0x40ce, 0x0695, 0x42a8, 0x3b85, 0x1ea1, 0x428b, 0x442a, 0x4452, 0xbf3c, 0x1bcb, 0xba76, 0x466b, 0x41bb, 0x44b8, 0x401d, 0xba78, 0x4020, 0x46a2, 0xb2ce, 0xb24f, 0x4202, 0xba02, 0x46d1, 0xbf3b, 0x4329, 0x0e1d, 0x40f7, 0x0daa, 0x40b6, 0xb2f0, 0xb208, 0x45a8, 0xbf0a, 0x43d7, 0xb238, 0x43e5, 0x43f3, 0x1dee, 0x3982, 0xbaf5, 0xbf70, 0x022f, 0x42d8, 0x4270, 0xae68, 0x1b50, 0xb2fa, 0x43ce, 0xa22b, 0x4103, 0xb0fe, 0xbf0a, 0xba03, 0xba58, 0xb21c, 0x4242, 0x428b, 0xb21b, 0x46fc, 0xbad7, 0x44f9, 0x409d, 0x1fa0, 0x422f, 0x4045, 0x0cb9, 0xbf37, 0x4168, 0x42e2, 0x1d17, 0x4146, 0x404b, 0x4397, 0x4023, 0x4218, 0x1be7, 0xb20c, 0xbfd0, 0x4166, 0x4677, 0x442e, 0x0bc1, 0x462e, 0x4103, 0x1b0b, 0xb0b5, 0xbf39, 0x3c04, 0xb2a6, 0x4132, 0x031d, 0xbac8, 0xb0d9, 0x436b, 0xb208, 0x4127, 0xbad3, 0x0705, 0x116f, 0xb23b, 0xba75, 0xaccc, 0xba6c, 0x19b5, 0x42c1, 0xb296, 0xbf98, 0x28ab, 0x1165, 0x4195, 0xb06b, 0x4356, 0xbf21, 0x2e2c, 0xba6e, 0xbf70, 0x1b50, 0x1d56, 0x4299, 0x41d0, 0xb2b1, 0x4097, 0x436b, 0x442b, 0xba7f, 0x409b, 0x2918, 0x40a4, 0x2155, 0x444c, 0x3bce, 0x4417, 0x1d3d, 0xb0b1, 0x4414, 0xb28b, 0xbf9e, 0x26d9, 0xba2e, 0x1b11, 0xbf60, 0x40a3, 0xb244, 0xb2b3, 0x4357, 0x40fd, 0x4253, 0x1b39, 0x408f, 0x43e5, 0x2a5f, 0x467b, 0x0fc0, 0x43fa, 0x1ad5, 0x0dca, 0x414e, 0x4401, 0x1cb1, 0xb229, 0x0cdd, 0x19a8, 0x29c7, 0xb2d4, 0x45b6, 0xbf6a, 0x085b, 0x0aa6, 0x195f, 0x4178, 0x0eae, 0x42af, 0xbfa2, 0x287d, 0x40e7, 0x45cb, 0x4233, 0xa5e9, 0x4005, 0xba4a, 0x42c7, 0xbf99, 0xba16, 0x402b, 0xb0a5, 0xb286, 0x40cb, 0x436b, 0x4326, 0x42da, 0x1762, 0x41f8, 0xb2c4, 0x4172, 0x3324, 0x1be2, 0xb210, 0x0a29, 0x2800, 0x225c, 0x02b0, 0xa200, 0x4125, 0x43c4, 0x4055, 0xb22c, 0x2b85, 0x42bc, 0x3465, 0xa4e5, 0xbfba, 0x4268, 0x33b2, 0x1ef1, 0x1d70, 0x4314, 0x4335, 0x4112, 0x2e63, 0x1fc5, 0xb091, 0x0ce5, 0x42a8, 0x17b0, 0x407a, 0xbf5d, 0x407a, 0x3b90, 0x0908, 0xb282, 0x1327, 0xbf00, 0x4376, 0x4278, 0x4075, 0x1de1, 0x4209, 0xb2c6, 0x42fd, 0x0018, 0x1d05, 0x46a3, 0x4290, 0xba7b, 0x0fc7, 0x1652, 0xbac1, 0x4309, 0x41b7, 0x36d6, 0xbf34, 0x43d6, 0x449c, 0xb2a3, 0xb269, 0x41d7, 0x24c0, 0xba4e, 0x40a0, 0xb005, 0x4454, 0x1542, 0x4311, 0x40ef, 0xb28f, 0x42c9, 0x2a56, 0x44f9, 0x407f, 0x454b, 0x2eff, 0x43e9, 0xba66, 0x4332, 0x4344, 0xb0a0, 0xbf31, 0x3bdd, 0x1e29, 0x1289, 0x3d48, 0x4077, 0xace3, 0x43ee, 0xb085, 0x1d32, 0x43b9, 0x411b, 0xb2ee, 0xb06f, 0xb26a, 0xb0ed, 0x0de4, 0x2e64, 0x36cd, 0x44d9, 0xbf26, 0x2866, 0xb271, 0x4132, 0x435c, 0xab9f, 0xa5f0, 0x40e8, 0x1dc4, 0x44e5, 0x409e, 0x15a3, 0x2a03, 0x4032, 0x43c2, 0xb29d, 0x3611, 0xbf02, 0x1a71, 0xb2bd, 0x44a5, 0x44dd, 0x2f63, 0x1176, 0x4017, 0x1c57, 0x42c5, 0xb257, 0xb01a, 0xb210, 0xba3e, 0x1033, 0xbaea, 0x2913, 0xb216, 0xbfa0, 0x414a, 0xbf01, 0x45dc, 0xba34, 0x43a4, 0x09ca, 0x44cc, 0x1fe2, 0xba21, 0x1c5d, 0x1a65, 0xba3f, 0xbfa4, 0x4344, 0xb24f, 0x1d4a, 0x4191, 0x4444, 0xba06, 0x413b, 0xbf58, 0x2509, 0xba2b, 0xb2a8, 0x1f68, 0x3a63, 0x467a, 0x05de, 0x4186, 0xba34, 0x42db, 0x1e2d, 0xbaef, 0xbfd0, 0x1c2d, 0x4176, 0x26bd, 0x4214, 0xa8fb, 0x4187, 0xba36, 0x42aa, 0x4073, 0x46d8, 0xb2f4, 0x40b5, 0x43fa, 0xbf87, 0x4225, 0x4336, 0x4376, 0x1c37, 0x4142, 0xb2e3, 0xbfe0, 0x3578, 0x41e3, 0x41cb, 0xb246, 0x402f, 0x2890, 0x422c, 0x40e9, 0x1892, 0x422d, 0xb209, 0xb2d6, 0x4045, 0xa2a6, 0x43bc, 0xbf37, 0x43ee, 0x4239, 0x326a, 0x3538, 0xb240, 0x43e8, 0xaae3, 0x3b5c, 0xa277, 0xb26f, 0xbf6d, 0xaf28, 0x4372, 0x1e45, 0x40f4, 0xb09f, 0x46e9, 0xb272, 0x4275, 0x2cb5, 0x42df, 0x03a3, 0x413f, 0xbac0, 0x40fa, 0xbad1, 0x0fba, 0xb2ca, 0x42dc, 0x4119, 0xb299, 0x41b9, 0x415f, 0xb240, 0xbf9c, 0xb224, 0x41de, 0x42f1, 0xbace, 0x34a5, 0xb073, 0xb2e6, 0x4073, 0x4185, 0xba32, 0x429b, 0x037d, 0xbfb0, 0x1855, 0xba71, 0x4199, 0x425a, 0x2faf, 0x410d, 0x41f6, 0x4349, 0x1eb6, 0x4333, 0x40dd, 0x40e9, 0xbf8b, 0x431c, 0x1eb9, 0x40c9, 0xb2ca, 0x4770, 0xe7fe + ], + StartRegs = [0x034bf2c4, 0xca960aa8, 0x9456a116, 0xb988fc86, 0x50cab48a, 0xa5759d59, 0x0dfb191d, 0x2b41a1c1, 0x1b2df3ef, 0x1463f435, 0x89ed0b15, 0x9d5b9a9c, 0x39b4b3b7, 0x23d2d921, 0x00000000, 0xc00001f0 + ], + FinalRegs = [0xffffffc7, 0xfffffffd, 0x000000fd, 0x280000a7, 0x000000a5, 0x00000000, 0x28000003, 0xffffffff, 0x00001dec, 0x00003494, 0x000000ac, 0x00001dec, 0x00005e9c, 0x00003660, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x404a, 0x1e38, 0x41ce, 0x41f6, 0xa61e, 0x43e1, 0xba33, 0x0e8f, 0x4366, 0x1fcf, 0x1f02, 0x417c, 0xb24c, 0xbf09, 0xadc6, 0x1cfb, 0x2652, 0x3b78, 0x43dd, 0x4058, 0x435c, 0x418d, 0x41e9, 0xba1e, 0x461a, 0x417c, 0x4070, 0x2e53, 0xbf46, 0xb213, 0x0a50, 0x43ce, 0x403c, 0xb0fb, 0xba32, 0x43c9, 0x408b, 0x4240, 0xba6c, 0x4345, 0x43c8, 0x422f, 0x1b87, 0xb288, 0x1b5c, 0xba0a, 0xbf8c, 0x4371, 0xba11, 0xbf45, 0xa04e, 0xb290, 0x430b, 0x43e5, 0x1ae7, 0x41e3, 0x4260, 0x4631, 0x3e11, 0x46e1, 0xbae9, 0x4207, 0x40ac, 0x404c, 0x2f8f, 0xbf2e, 0x43db, 0x0ef2, 0x41bd, 0x0426, 0xb2e5, 0x3c47, 0xb092, 0x4331, 0xae0c, 0xa2f5, 0x420d, 0x4245, 0x436a, 0x1e7b, 0xac86, 0xb221, 0xb0d1, 0x38f0, 0xbfe0, 0x420b, 0x428d, 0x46c3, 0xa967, 0xb236, 0xbac2, 0x41fc, 0x4026, 0xbf4a, 0x1a93, 0xa7fd, 0x43e8, 0x0d91, 0x42f0, 0xb013, 0x1cb9, 0xb2bd, 0x039a, 0x4307, 0xbfb2, 0x049f, 0x1b17, 0x0a41, 0x18b0, 0xb23e, 0x4126, 0x14d5, 0x3efd, 0x42cd, 0xa767, 0x431e, 0x41f3, 0xb29c, 0x06c1, 0x29be, 0x363e, 0xb26a, 0xa0f2, 0x1e42, 0xbad5, 0xbaca, 0x1ab0, 0xba62, 0xb29d, 0xba6a, 0xbf27, 0x4385, 0x4135, 0x4637, 0x429e, 0xb04e, 0xbf90, 0x432d, 0x4199, 0x40ff, 0x4009, 0x4229, 0xb250, 0x055e, 0x2803, 0xb27c, 0x40f2, 0x4060, 0x41de, 0xb087, 0x2667, 0x439e, 0x466d, 0x4060, 0x1c10, 0x4003, 0xa2e9, 0xb0fc, 0xbfca, 0x4230, 0x42db, 0x1a8c, 0xb2dc, 0x42d5, 0x40d2, 0xba72, 0xbad8, 0x2197, 0x4029, 0x434b, 0x1b03, 0x20bf, 0xb2d0, 0x45e6, 0x4248, 0xac8e, 0x45d8, 0xb23f, 0x431c, 0x2e97, 0x4041, 0x413f, 0xbf92, 0x42b5, 0x4351, 0x46c5, 0x4098, 0x40d4, 0xb2cd, 0x43af, 0x41a1, 0xb035, 0x3e50, 0xbf45, 0x419c, 0x3771, 0xb270, 0x0cda, 0x1f3d, 0xb2a1, 0x18d4, 0x3595, 0xa300, 0x2257, 0x4230, 0xb267, 0xbf63, 0x22b5, 0x334c, 0x4008, 0xb2fb, 0xba14, 0x435b, 0x4253, 0x2bbd, 0x4375, 0x114d, 0xa458, 0x2764, 0x4073, 0x437d, 0x32d1, 0xb034, 0xba67, 0x40b2, 0xa45b, 0xa541, 0x417e, 0xbf93, 0x449d, 0x19af, 0xbada, 0x1c8f, 0xb288, 0x44b9, 0x35bc, 0x407f, 0x4389, 0x099d, 0x1daf, 0x433e, 0x07cc, 0x31b7, 0xb0e3, 0xa4fb, 0x4095, 0xb207, 0x40ec, 0xb2e8, 0x0ec7, 0x0c90, 0xb218, 0xbf6d, 0xa111, 0x1cb3, 0x2234, 0x1fa6, 0x4242, 0x2c82, 0x41d4, 0x2053, 0xbac3, 0x0cd9, 0x2ead, 0x425d, 0xb0c0, 0x44b0, 0xb2b5, 0xb01f, 0x1ce8, 0x46b1, 0x4156, 0xb2e2, 0x41b7, 0xae46, 0x1ee3, 0x444a, 0x415f, 0x4375, 0x1251, 0xbaee, 0xbf13, 0xb22f, 0x401b, 0x19ba, 0x4290, 0xa67b, 0xbac7, 0x1b71, 0x4156, 0x241a, 0x4577, 0x3cbe, 0x1b08, 0x40b2, 0x2f7d, 0x1a27, 0x4335, 0xbaf1, 0x2f52, 0x1850, 0x2414, 0x4129, 0xb24d, 0xbfbb, 0xb283, 0x07e8, 0x399e, 0xbac4, 0xb0af, 0x374d, 0x1bc1, 0x0f91, 0xb09d, 0x22a6, 0x419f, 0x3131, 0x1bdc, 0x42f7, 0x43d7, 0x29ac, 0xbf4c, 0xa2c6, 0xac1c, 0x1d92, 0x4127, 0xaa2a, 0xba5b, 0x4159, 0x41b8, 0x4320, 0x1a6f, 0x249a, 0x3fec, 0xbf5c, 0x41c0, 0x42ed, 0x1a95, 0x1ce2, 0xa1a3, 0x41e9, 0x4014, 0x05f4, 0xb03d, 0x4177, 0x3a2b, 0x4230, 0xabc9, 0x115d, 0x4308, 0x41c6, 0xb273, 0xb2cf, 0xa77c, 0xac87, 0x417e, 0x300c, 0x28a6, 0x42a9, 0xbf39, 0xaeb8, 0x1d9b, 0x1aed, 0x4346, 0xbaf9, 0x462a, 0x4199, 0x0418, 0x45cc, 0x4371, 0x04e7, 0x43f4, 0xb204, 0x4398, 0x438c, 0x43eb, 0xb201, 0x4155, 0x0a6e, 0x2d49, 0x42a3, 0xbac0, 0x43f4, 0x4245, 0xbfa3, 0x1edc, 0x446c, 0x3da5, 0x42e3, 0x42ae, 0xbf2c, 0xb25a, 0x40e7, 0xbfae, 0xb2ec, 0xba4a, 0x4301, 0x43c0, 0x0f46, 0x4182, 0x4233, 0x4084, 0xa36e, 0xbf9f, 0x410e, 0x42a0, 0x1879, 0x43d8, 0x44ea, 0xba40, 0xbfc5, 0x43fe, 0x42b9, 0x42b1, 0x4172, 0x4151, 0x42d4, 0xb25a, 0xbff0, 0xb026, 0x4116, 0x1ac9, 0x435b, 0xbfa2, 0x4482, 0x188e, 0x46f0, 0x26c3, 0x4103, 0x4491, 0xbf80, 0x2b1b, 0x41a2, 0x4022, 0x4132, 0x4235, 0x4214, 0x43d6, 0x4025, 0xa55b, 0x4040, 0x2d18, 0xac95, 0x4316, 0xbadd, 0x41c9, 0xbf9c, 0x2e9b, 0x34ac, 0x40d6, 0x1f75, 0xbfc0, 0x43a8, 0x3e7b, 0x20b6, 0xb0d7, 0xb22f, 0x41d0, 0x1c3a, 0x23a0, 0x1a3a, 0x426e, 0x4178, 0x45c8, 0x426a, 0xbf18, 0x42d7, 0x42e9, 0x40c1, 0x40da, 0xb273, 0xba11, 0xb209, 0xb07b, 0x18af, 0x40bf, 0x4253, 0x0e6f, 0xbf9d, 0x42a7, 0xa767, 0xba35, 0xad49, 0x1d61, 0x1dca, 0x436a, 0x2f36, 0x40e9, 0x1cf2, 0x4061, 0xba3e, 0x099e, 0xac24, 0x4559, 0x467b, 0x1a05, 0x08ce, 0xb295, 0xbfb3, 0x4057, 0x4384, 0x1f5a, 0x13e2, 0x4561, 0x442b, 0xbf02, 0x1563, 0xba37, 0xb230, 0xb0be, 0x41a4, 0x4235, 0xbf3c, 0x4008, 0xb04a, 0x4297, 0xb20d, 0x2cca, 0xb0d8, 0x4386, 0x4054, 0x402c, 0xbf60, 0xbf82, 0x41d9, 0x18bf, 0x1a14, 0x1236, 0x2e49, 0x429d, 0xa669, 0x4120, 0xbfdb, 0x3c29, 0x04af, 0x3169, 0x425f, 0xa558, 0xbf0d, 0xaf86, 0xb0ef, 0x0707, 0x41ba, 0xb263, 0xbfb9, 0x42eb, 0x3db5, 0x3ac5, 0xb214, 0x40ab, 0x42c6, 0x1d21, 0x439c, 0x2200, 0xb0fb, 0x4695, 0x41ef, 0x4178, 0x42ea, 0x43ec, 0xb297, 0x419d, 0x4091, 0x405b, 0x43a6, 0xb2de, 0x21ab, 0xba6d, 0x4002, 0xabb4, 0x400f, 0x40a2, 0xbf2f, 0xb243, 0xa1a2, 0x460c, 0xb2e0, 0xbf9f, 0x1ad6, 0x41d4, 0xb0a0, 0x1b7f, 0x43d7, 0xb228, 0xb2ca, 0x2655, 0x3efc, 0xb249, 0x27dc, 0x428c, 0x40f9, 0x4354, 0x429d, 0xb266, 0x4595, 0xb0cf, 0xb2c9, 0x401e, 0x4264, 0x42b4, 0x0c35, 0x0e87, 0x407f, 0x4336, 0x403d, 0x1df2, 0x41c1, 0xbf39, 0x43bd, 0x4174, 0x4329, 0x44a2, 0x1932, 0xbf4b, 0xb282, 0x1ded, 0xbacf, 0x404a, 0xb246, 0x4630, 0x1ac0, 0x43d7, 0x40a2, 0x4270, 0xb2e1, 0x0cf0, 0x1ecc, 0xbac3, 0x408b, 0x4358, 0x1ca6, 0xbf6c, 0x416b, 0x2d6e, 0xb017, 0x4385, 0xa144, 0xb2b5, 0x41fd, 0xbf28, 0x1aef, 0xb239, 0xb2ba, 0x430e, 0xb0c0, 0x42cb, 0xbfdd, 0xb020, 0x44d9, 0x414d, 0x402b, 0xb033, 0xba4c, 0x1ace, 0x401b, 0xb200, 0x40ae, 0xa013, 0x1fb4, 0x42a2, 0xba53, 0x4006, 0xbfc5, 0xba13, 0xba0a, 0xb21c, 0x406c, 0x0f32, 0x0d61, 0xb28a, 0xadd9, 0x2943, 0x42d8, 0xb212, 0x1e8f, 0xb273, 0x426f, 0xb08b, 0xa7ca, 0xbac8, 0x43b2, 0xa2d0, 0x0940, 0xbaee, 0x42b3, 0x42fe, 0x0239, 0xbf6c, 0x4082, 0xb272, 0x1219, 0x4101, 0x43a8, 0x403e, 0xb251, 0xb251, 0xb035, 0x1abe, 0x1853, 0x4373, 0x4086, 0x4330, 0xb22d, 0x4491, 0x42cb, 0x442d, 0x073a, 0x1abd, 0xb23c, 0xbf6e, 0x43b5, 0x1cd5, 0x1cac, 0x1a26, 0x42c9, 0x4312, 0x41f6, 0x034a, 0xbf1b, 0xba22, 0x43c1, 0x408b, 0x3efd, 0xbf8e, 0x45b1, 0x1ff9, 0xb0b4, 0x42a4, 0x40ff, 0xbae4, 0xa80c, 0xac90, 0x42fd, 0x41e9, 0x434a, 0xba62, 0x4263, 0xafea, 0x42a8, 0x1ebd, 0x0ace, 0x41e2, 0x448b, 0xb231, 0x4186, 0x40cf, 0xbf93, 0xba41, 0x4355, 0xbaca, 0xba6e, 0xb2c3, 0xa584, 0x421d, 0x42c3, 0x0b33, 0xb24a, 0x459b, 0x406a, 0x44c3, 0x1c47, 0x1dbe, 0x1b02, 0xa03c, 0x43af, 0xba58, 0x41b4, 0x43f2, 0x1e2f, 0xbfb8, 0x2fcb, 0x43d3, 0x425e, 0x2f90, 0xb2eb, 0xbfaf, 0x4446, 0x42d0, 0xb0e1, 0x3d22, 0x40fe, 0x425a, 0x439f, 0x4190, 0x417d, 0xb23f, 0x0e6c, 0xbf5d, 0xbfc0, 0xbfb0, 0x4136, 0x3dbb, 0x4548, 0x1ed0, 0x2e7c, 0x427e, 0x420b, 0x1a4a, 0x1b24, 0x405e, 0x42c8, 0x1e86, 0xb2b6, 0x4369, 0x02c5, 0x41c0, 0x4586, 0x417c, 0xb23c, 0x13d1, 0x2eb6, 0xbf9a, 0x4406, 0xbae8, 0x0fc1, 0x4302, 0x37a4, 0x3676, 0x16fc, 0x4292, 0xbf8b, 0x4022, 0x4122, 0xb2d8, 0x3706, 0x4258, 0xbf91, 0x4310, 0x4631, 0x408d, 0x19e5, 0xb01d, 0x4087, 0xa7ab, 0x0ffe, 0xba00, 0x37e6, 0x41ec, 0x407c, 0x406d, 0x1896, 0x43c4, 0x1666, 0x4023, 0x26e4, 0xbf7d, 0xad97, 0x43cd, 0x41cd, 0x215e, 0x41f7, 0x40e6, 0xb270, 0x414c, 0x18d9, 0x3998, 0xb078, 0xb2f5, 0x42bd, 0x0eef, 0x42c4, 0x0f53, 0xaf6b, 0xb29b, 0x11f7, 0x1f08, 0x4030, 0x4384, 0x3b0a, 0x3012, 0x4004, 0x43f4, 0x4636, 0x403f, 0x4484, 0xbfd4, 0xba40, 0xb049, 0x4608, 0x40c4, 0xbf92, 0x1898, 0x36dd, 0x403d, 0x1b5e, 0x4136, 0xbac7, 0x0f85, 0x1f13, 0x4337, 0xbae7, 0x416d, 0xa007, 0xbfcf, 0xaa8b, 0x2329, 0xb28f, 0x4380, 0x431c, 0xa918, 0xadc2, 0xad91, 0x250b, 0x4127, 0x11a2, 0x4395, 0xba07, 0x2356, 0xb21a, 0x4367, 0xb25b, 0x32db, 0x435e, 0x0285, 0xa8d6, 0x4164, 0x045d, 0x3a1c, 0x4191, 0xb0f5, 0x192a, 0x43c2, 0xb278, 0xbf1f, 0xb2e9, 0x456c, 0x4308, 0xb2f4, 0x4261, 0xbf2c, 0xbfe0, 0x4592, 0x431b, 0x402c, 0x1e54, 0x427f, 0x1f79, 0x4052, 0xa524, 0x4132, 0x2bc5, 0x0dfc, 0x1b3d, 0x4053, 0x42e1, 0xbaea, 0x3163, 0x42bc, 0xbfb1, 0x3240, 0x34fb, 0x42b0, 0xb034, 0xadf0, 0x4069, 0x413f, 0xbad6, 0x4335, 0xba39, 0x428e, 0x3b25, 0x41f9, 0x1816, 0x2ec7, 0x1e92, 0x4307, 0xb2d1, 0x405c, 0x41a0, 0x0efc, 0xa329, 0xbfc3, 0x435e, 0x438f, 0x4352, 0xb0c0, 0xb259, 0xae76, 0x40bf, 0x18f7, 0xbae0, 0xb2e7, 0xa6fe, 0x46c3, 0xbf69, 0x4613, 0x406b, 0xb2eb, 0x43ce, 0xa9e3, 0x10eb, 0x46ec, 0xba10, 0x427a, 0x412b, 0xbf9e, 0x41c1, 0x4353, 0xb2c7, 0x42f8, 0xafae, 0x1ab7, 0xb062, 0x407d, 0x4330, 0xb2af, 0x3801, 0xbfab, 0x43c8, 0x423d, 0x4159, 0x41e0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x7059abe5, 0xb415f906, 0x8490eae9, 0x0ff183c6, 0xf39f6a2c, 0xb4413795, 0xee05d88d, 0x50185d92, 0xf621a094, 0x8902e42e, 0x9ecca830, 0x152bbe7f, 0x038e4ec7, 0xeb5d3b32, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0x89283ba8, 0x000001bb, 0xfffffff1, 0x00000000, 0x0000000f, 0x0000240e, 0x00001ba8, 0x0000240e, 0x00000000, 0x000013e8, 0x94ee481b, 0x00000000, 0xffffffe8, 0x00000170, 0x00000000, 0x200001d0 }, + Instructions = [0x404a, 0x1e38, 0x41ce, 0x41f6, 0xa61e, 0x43e1, 0xba33, 0x0e8f, 0x4366, 0x1fcf, 0x1f02, 0x417c, 0xb24c, 0xbf09, 0xadc6, 0x1cfb, 0x2652, 0x3b78, 0x43dd, 0x4058, 0x435c, 0x418d, 0x41e9, 0xba1e, 0x461a, 0x417c, 0x4070, 0x2e53, 0xbf46, 0xb213, 0x0a50, 0x43ce, 0x403c, 0xb0fb, 0xba32, 0x43c9, 0x408b, 0x4240, 0xba6c, 0x4345, 0x43c8, 0x422f, 0x1b87, 0xb288, 0x1b5c, 0xba0a, 0xbf8c, 0x4371, 0xba11, 0xbf45, 0xa04e, 0xb290, 0x430b, 0x43e5, 0x1ae7, 0x41e3, 0x4260, 0x4631, 0x3e11, 0x46e1, 0xbae9, 0x4207, 0x40ac, 0x404c, 0x2f8f, 0xbf2e, 0x43db, 0x0ef2, 0x41bd, 0x0426, 0xb2e5, 0x3c47, 0xb092, 0x4331, 0xae0c, 0xa2f5, 0x420d, 0x4245, 0x436a, 0x1e7b, 0xac86, 0xb221, 0xb0d1, 0x38f0, 0xbfe0, 0x420b, 0x428d, 0x46c3, 0xa967, 0xb236, 0xbac2, 0x41fc, 0x4026, 0xbf4a, 0x1a93, 0xa7fd, 0x43e8, 0x0d91, 0x42f0, 0xb013, 0x1cb9, 0xb2bd, 0x039a, 0x4307, 0xbfb2, 0x049f, 0x1b17, 0x0a41, 0x18b0, 0xb23e, 0x4126, 0x14d5, 0x3efd, 0x42cd, 0xa767, 0x431e, 0x41f3, 0xb29c, 0x06c1, 0x29be, 0x363e, 0xb26a, 0xa0f2, 0x1e42, 0xbad5, 0xbaca, 0x1ab0, 0xba62, 0xb29d, 0xba6a, 0xbf27, 0x4385, 0x4135, 0x4637, 0x429e, 0xb04e, 0xbf90, 0x432d, 0x4199, 0x40ff, 0x4009, 0x4229, 0xb250, 0x055e, 0x2803, 0xb27c, 0x40f2, 0x4060, 0x41de, 0xb087, 0x2667, 0x439e, 0x466d, 0x4060, 0x1c10, 0x4003, 0xa2e9, 0xb0fc, 0xbfca, 0x4230, 0x42db, 0x1a8c, 0xb2dc, 0x42d5, 0x40d2, 0xba72, 0xbad8, 0x2197, 0x4029, 0x434b, 0x1b03, 0x20bf, 0xb2d0, 0x45e6, 0x4248, 0xac8e, 0x45d8, 0xb23f, 0x431c, 0x2e97, 0x4041, 0x413f, 0xbf92, 0x42b5, 0x4351, 0x46c5, 0x4098, 0x40d4, 0xb2cd, 0x43af, 0x41a1, 0xb035, 0x3e50, 0xbf45, 0x419c, 0x3771, 0xb270, 0x0cda, 0x1f3d, 0xb2a1, 0x18d4, 0x3595, 0xa300, 0x2257, 0x4230, 0xb267, 0xbf63, 0x22b5, 0x334c, 0x4008, 0xb2fb, 0xba14, 0x435b, 0x4253, 0x2bbd, 0x4375, 0x114d, 0xa458, 0x2764, 0x4073, 0x437d, 0x32d1, 0xb034, 0xba67, 0x40b2, 0xa45b, 0xa541, 0x417e, 0xbf93, 0x449d, 0x19af, 0xbada, 0x1c8f, 0xb288, 0x44b9, 0x35bc, 0x407f, 0x4389, 0x099d, 0x1daf, 0x433e, 0x07cc, 0x31b7, 0xb0e3, 0xa4fb, 0x4095, 0xb207, 0x40ec, 0xb2e8, 0x0ec7, 0x0c90, 0xb218, 0xbf6d, 0xa111, 0x1cb3, 0x2234, 0x1fa6, 0x4242, 0x2c82, 0x41d4, 0x2053, 0xbac3, 0x0cd9, 0x2ead, 0x425d, 0xb0c0, 0x44b0, 0xb2b5, 0xb01f, 0x1ce8, 0x46b1, 0x4156, 0xb2e2, 0x41b7, 0xae46, 0x1ee3, 0x444a, 0x415f, 0x4375, 0x1251, 0xbaee, 0xbf13, 0xb22f, 0x401b, 0x19ba, 0x4290, 0xa67b, 0xbac7, 0x1b71, 0x4156, 0x241a, 0x4577, 0x3cbe, 0x1b08, 0x40b2, 0x2f7d, 0x1a27, 0x4335, 0xbaf1, 0x2f52, 0x1850, 0x2414, 0x4129, 0xb24d, 0xbfbb, 0xb283, 0x07e8, 0x399e, 0xbac4, 0xb0af, 0x374d, 0x1bc1, 0x0f91, 0xb09d, 0x22a6, 0x419f, 0x3131, 0x1bdc, 0x42f7, 0x43d7, 0x29ac, 0xbf4c, 0xa2c6, 0xac1c, 0x1d92, 0x4127, 0xaa2a, 0xba5b, 0x4159, 0x41b8, 0x4320, 0x1a6f, 0x249a, 0x3fec, 0xbf5c, 0x41c0, 0x42ed, 0x1a95, 0x1ce2, 0xa1a3, 0x41e9, 0x4014, 0x05f4, 0xb03d, 0x4177, 0x3a2b, 0x4230, 0xabc9, 0x115d, 0x4308, 0x41c6, 0xb273, 0xb2cf, 0xa77c, 0xac87, 0x417e, 0x300c, 0x28a6, 0x42a9, 0xbf39, 0xaeb8, 0x1d9b, 0x1aed, 0x4346, 0xbaf9, 0x462a, 0x4199, 0x0418, 0x45cc, 0x4371, 0x04e7, 0x43f4, 0xb204, 0x4398, 0x438c, 0x43eb, 0xb201, 0x4155, 0x0a6e, 0x2d49, 0x42a3, 0xbac0, 0x43f4, 0x4245, 0xbfa3, 0x1edc, 0x446c, 0x3da5, 0x42e3, 0x42ae, 0xbf2c, 0xb25a, 0x40e7, 0xbfae, 0xb2ec, 0xba4a, 0x4301, 0x43c0, 0x0f46, 0x4182, 0x4233, 0x4084, 0xa36e, 0xbf9f, 0x410e, 0x42a0, 0x1879, 0x43d8, 0x44ea, 0xba40, 0xbfc5, 0x43fe, 0x42b9, 0x42b1, 0x4172, 0x4151, 0x42d4, 0xb25a, 0xbff0, 0xb026, 0x4116, 0x1ac9, 0x435b, 0xbfa2, 0x4482, 0x188e, 0x46f0, 0x26c3, 0x4103, 0x4491, 0xbf80, 0x2b1b, 0x41a2, 0x4022, 0x4132, 0x4235, 0x4214, 0x43d6, 0x4025, 0xa55b, 0x4040, 0x2d18, 0xac95, 0x4316, 0xbadd, 0x41c9, 0xbf9c, 0x2e9b, 0x34ac, 0x40d6, 0x1f75, 0xbfc0, 0x43a8, 0x3e7b, 0x20b6, 0xb0d7, 0xb22f, 0x41d0, 0x1c3a, 0x23a0, 0x1a3a, 0x426e, 0x4178, 0x45c8, 0x426a, 0xbf18, 0x42d7, 0x42e9, 0x40c1, 0x40da, 0xb273, 0xba11, 0xb209, 0xb07b, 0x18af, 0x40bf, 0x4253, 0x0e6f, 0xbf9d, 0x42a7, 0xa767, 0xba35, 0xad49, 0x1d61, 0x1dca, 0x436a, 0x2f36, 0x40e9, 0x1cf2, 0x4061, 0xba3e, 0x099e, 0xac24, 0x4559, 0x467b, 0x1a05, 0x08ce, 0xb295, 0xbfb3, 0x4057, 0x4384, 0x1f5a, 0x13e2, 0x4561, 0x442b, 0xbf02, 0x1563, 0xba37, 0xb230, 0xb0be, 0x41a4, 0x4235, 0xbf3c, 0x4008, 0xb04a, 0x4297, 0xb20d, 0x2cca, 0xb0d8, 0x4386, 0x4054, 0x402c, 0xbf60, 0xbf82, 0x41d9, 0x18bf, 0x1a14, 0x1236, 0x2e49, 0x429d, 0xa669, 0x4120, 0xbfdb, 0x3c29, 0x04af, 0x3169, 0x425f, 0xa558, 0xbf0d, 0xaf86, 0xb0ef, 0x0707, 0x41ba, 0xb263, 0xbfb9, 0x42eb, 0x3db5, 0x3ac5, 0xb214, 0x40ab, 0x42c6, 0x1d21, 0x439c, 0x2200, 0xb0fb, 0x4695, 0x41ef, 0x4178, 0x42ea, 0x43ec, 0xb297, 0x419d, 0x4091, 0x405b, 0x43a6, 0xb2de, 0x21ab, 0xba6d, 0x4002, 0xabb4, 0x400f, 0x40a2, 0xbf2f, 0xb243, 0xa1a2, 0x460c, 0xb2e0, 0xbf9f, 0x1ad6, 0x41d4, 0xb0a0, 0x1b7f, 0x43d7, 0xb228, 0xb2ca, 0x2655, 0x3efc, 0xb249, 0x27dc, 0x428c, 0x40f9, 0x4354, 0x429d, 0xb266, 0x4595, 0xb0cf, 0xb2c9, 0x401e, 0x4264, 0x42b4, 0x0c35, 0x0e87, 0x407f, 0x4336, 0x403d, 0x1df2, 0x41c1, 0xbf39, 0x43bd, 0x4174, 0x4329, 0x44a2, 0x1932, 0xbf4b, 0xb282, 0x1ded, 0xbacf, 0x404a, 0xb246, 0x4630, 0x1ac0, 0x43d7, 0x40a2, 0x4270, 0xb2e1, 0x0cf0, 0x1ecc, 0xbac3, 0x408b, 0x4358, 0x1ca6, 0xbf6c, 0x416b, 0x2d6e, 0xb017, 0x4385, 0xa144, 0xb2b5, 0x41fd, 0xbf28, 0x1aef, 0xb239, 0xb2ba, 0x430e, 0xb0c0, 0x42cb, 0xbfdd, 0xb020, 0x44d9, 0x414d, 0x402b, 0xb033, 0xba4c, 0x1ace, 0x401b, 0xb200, 0x40ae, 0xa013, 0x1fb4, 0x42a2, 0xba53, 0x4006, 0xbfc5, 0xba13, 0xba0a, 0xb21c, 0x406c, 0x0f32, 0x0d61, 0xb28a, 0xadd9, 0x2943, 0x42d8, 0xb212, 0x1e8f, 0xb273, 0x426f, 0xb08b, 0xa7ca, 0xbac8, 0x43b2, 0xa2d0, 0x0940, 0xbaee, 0x42b3, 0x42fe, 0x0239, 0xbf6c, 0x4082, 0xb272, 0x1219, 0x4101, 0x43a8, 0x403e, 0xb251, 0xb251, 0xb035, 0x1abe, 0x1853, 0x4373, 0x4086, 0x4330, 0xb22d, 0x4491, 0x42cb, 0x442d, 0x073a, 0x1abd, 0xb23c, 0xbf6e, 0x43b5, 0x1cd5, 0x1cac, 0x1a26, 0x42c9, 0x4312, 0x41f6, 0x034a, 0xbf1b, 0xba22, 0x43c1, 0x408b, 0x3efd, 0xbf8e, 0x45b1, 0x1ff9, 0xb0b4, 0x42a4, 0x40ff, 0xbae4, 0xa80c, 0xac90, 0x42fd, 0x41e9, 0x434a, 0xba62, 0x4263, 0xafea, 0x42a8, 0x1ebd, 0x0ace, 0x41e2, 0x448b, 0xb231, 0x4186, 0x40cf, 0xbf93, 0xba41, 0x4355, 0xbaca, 0xba6e, 0xb2c3, 0xa584, 0x421d, 0x42c3, 0x0b33, 0xb24a, 0x459b, 0x406a, 0x44c3, 0x1c47, 0x1dbe, 0x1b02, 0xa03c, 0x43af, 0xba58, 0x41b4, 0x43f2, 0x1e2f, 0xbfb8, 0x2fcb, 0x43d3, 0x425e, 0x2f90, 0xb2eb, 0xbfaf, 0x4446, 0x42d0, 0xb0e1, 0x3d22, 0x40fe, 0x425a, 0x439f, 0x4190, 0x417d, 0xb23f, 0x0e6c, 0xbf5d, 0xbfc0, 0xbfb0, 0x4136, 0x3dbb, 0x4548, 0x1ed0, 0x2e7c, 0x427e, 0x420b, 0x1a4a, 0x1b24, 0x405e, 0x42c8, 0x1e86, 0xb2b6, 0x4369, 0x02c5, 0x41c0, 0x4586, 0x417c, 0xb23c, 0x13d1, 0x2eb6, 0xbf9a, 0x4406, 0xbae8, 0x0fc1, 0x4302, 0x37a4, 0x3676, 0x16fc, 0x4292, 0xbf8b, 0x4022, 0x4122, 0xb2d8, 0x3706, 0x4258, 0xbf91, 0x4310, 0x4631, 0x408d, 0x19e5, 0xb01d, 0x4087, 0xa7ab, 0x0ffe, 0xba00, 0x37e6, 0x41ec, 0x407c, 0x406d, 0x1896, 0x43c4, 0x1666, 0x4023, 0x26e4, 0xbf7d, 0xad97, 0x43cd, 0x41cd, 0x215e, 0x41f7, 0x40e6, 0xb270, 0x414c, 0x18d9, 0x3998, 0xb078, 0xb2f5, 0x42bd, 0x0eef, 0x42c4, 0x0f53, 0xaf6b, 0xb29b, 0x11f7, 0x1f08, 0x4030, 0x4384, 0x3b0a, 0x3012, 0x4004, 0x43f4, 0x4636, 0x403f, 0x4484, 0xbfd4, 0xba40, 0xb049, 0x4608, 0x40c4, 0xbf92, 0x1898, 0x36dd, 0x403d, 0x1b5e, 0x4136, 0xbac7, 0x0f85, 0x1f13, 0x4337, 0xbae7, 0x416d, 0xa007, 0xbfcf, 0xaa8b, 0x2329, 0xb28f, 0x4380, 0x431c, 0xa918, 0xadc2, 0xad91, 0x250b, 0x4127, 0x11a2, 0x4395, 0xba07, 0x2356, 0xb21a, 0x4367, 0xb25b, 0x32db, 0x435e, 0x0285, 0xa8d6, 0x4164, 0x045d, 0x3a1c, 0x4191, 0xb0f5, 0x192a, 0x43c2, 0xb278, 0xbf1f, 0xb2e9, 0x456c, 0x4308, 0xb2f4, 0x4261, 0xbf2c, 0xbfe0, 0x4592, 0x431b, 0x402c, 0x1e54, 0x427f, 0x1f79, 0x4052, 0xa524, 0x4132, 0x2bc5, 0x0dfc, 0x1b3d, 0x4053, 0x42e1, 0xbaea, 0x3163, 0x42bc, 0xbfb1, 0x3240, 0x34fb, 0x42b0, 0xb034, 0xadf0, 0x4069, 0x413f, 0xbad6, 0x4335, 0xba39, 0x428e, 0x3b25, 0x41f9, 0x1816, 0x2ec7, 0x1e92, 0x4307, 0xb2d1, 0x405c, 0x41a0, 0x0efc, 0xa329, 0xbfc3, 0x435e, 0x438f, 0x4352, 0xb0c0, 0xb259, 0xae76, 0x40bf, 0x18f7, 0xbae0, 0xb2e7, 0xa6fe, 0x46c3, 0xbf69, 0x4613, 0x406b, 0xb2eb, 0x43ce, 0xa9e3, 0x10eb, 0x46ec, 0xba10, 0x427a, 0x412b, 0xbf9e, 0x41c1, 0x4353, 0xb2c7, 0x42f8, 0xafae, 0x1ab7, 0xb062, 0x407d, 0x4330, 0xb2af, 0x3801, 0xbfab, 0x43c8, 0x423d, 0x4159, 0x41e0, 0x4770, 0xe7fe + ], + StartRegs = [0x7059abe5, 0xb415f906, 0x8490eae9, 0x0ff183c6, 0xf39f6a2c, 0xb4413795, 0xee05d88d, 0x50185d92, 0xf621a094, 0x8902e42e, 0x9ecca830, 0x152bbe7f, 0x038e4ec7, 0xeb5d3b32, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0x89283ba8, 0x000001bb, 0xfffffff1, 0x00000000, 0x0000000f, 0x0000240e, 0x00001ba8, 0x0000240e, 0x00000000, 0x000013e8, 0x94ee481b, 0x00000000, 0xffffffe8, 0x00000170, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0xba51, 0x414a, 0x4030, 0x4380, 0x4328, 0xb07b, 0x425a, 0xb214, 0x42fd, 0x2b6a, 0xaf72, 0x0da2, 0xb260, 0xb0a2, 0x4017, 0x4242, 0x38f4, 0x40d8, 0xb2b5, 0xbf43, 0x40f1, 0xb29b, 0x4240, 0x412b, 0x1c5d, 0xb27f, 0x2483, 0x4322, 0xba3d, 0x380c, 0xba4e, 0x1a5d, 0x4387, 0xb21d, 0xb2b6, 0xbf29, 0x2514, 0x43b9, 0x424b, 0x3cb5, 0xbf90, 0x40b2, 0x2a94, 0x42ce, 0x42df, 0xb23a, 0x12c2, 0xb232, 0x3230, 0x194f, 0xbf9e, 0xac89, 0x40d9, 0x4023, 0x424a, 0x2736, 0x0a55, 0x401a, 0x1835, 0x402e, 0xb20b, 0xbf6f, 0x2155, 0xbaf4, 0x39c6, 0x0161, 0x4217, 0x33de, 0x379d, 0x1dbc, 0x0b38, 0xb2ff, 0x23eb, 0x4072, 0xbf8a, 0x4201, 0x4240, 0x41b1, 0x1916, 0x40c4, 0xb26a, 0x4345, 0x0e81, 0xbf17, 0x4359, 0x4396, 0x4185, 0xa8f1, 0x43ce, 0x0472, 0x424d, 0x438d, 0x4018, 0x3684, 0xb244, 0x4349, 0x40a9, 0x400c, 0x41ac, 0x42ff, 0xaea0, 0xa7e6, 0xb2ec, 0x31eb, 0xb211, 0x42c8, 0x2649, 0x4064, 0xbad9, 0xbf05, 0x4169, 0x4664, 0x4679, 0x4576, 0x415b, 0xb200, 0x1f31, 0x2abf, 0xb0f4, 0x46d5, 0x4387, 0x40fa, 0x42dd, 0x18c0, 0xb021, 0x3d89, 0x403f, 0x4257, 0x1f9a, 0x43ed, 0x3c5c, 0x1c96, 0x41d4, 0xb201, 0x2ff5, 0x43ab, 0x0f0f, 0xbf69, 0x4637, 0x1895, 0x1d62, 0xa75b, 0xb0c3, 0x45d2, 0x432b, 0xb217, 0x18c7, 0x41dd, 0xa705, 0x4219, 0x433d, 0xa9c2, 0xb29d, 0x40f1, 0xbaf1, 0x420c, 0xb256, 0x4112, 0xbfbd, 0x1ab8, 0xba34, 0xbfe0, 0xbadf, 0xa4ed, 0x4323, 0x41a6, 0x40d6, 0x40c3, 0x4361, 0x0974, 0x1990, 0x42dc, 0x4377, 0xb2d8, 0x44d4, 0xba4e, 0x46e9, 0x188c, 0xbfd5, 0x429b, 0x4374, 0x4551, 0xb259, 0x418c, 0x4588, 0x43fe, 0xbfd0, 0x4175, 0x4227, 0x44b8, 0xbfe0, 0x2e9a, 0x406a, 0x2535, 0x4168, 0x0ad7, 0x1d42, 0x4264, 0xb086, 0xbada, 0xb00f, 0xb26f, 0x1b8d, 0x1c5c, 0x44c1, 0x3f77, 0x0f15, 0xb24c, 0xbf0e, 0x42d1, 0x44eb, 0x4253, 0x4233, 0x4203, 0xbfcd, 0x427a, 0x18a6, 0x4011, 0x29a1, 0x40cc, 0x448c, 0x1d4f, 0x0d2b, 0xb2dc, 0x4026, 0x12ff, 0x434c, 0x06a7, 0x415f, 0x41e4, 0x1842, 0xbf3a, 0xba5a, 0x4082, 0x43d2, 0x42a7, 0xa3c3, 0x41f5, 0x4341, 0x35dd, 0x425e, 0xb2c6, 0x4396, 0x420d, 0xb298, 0xbfd0, 0xa02a, 0x060e, 0x009f, 0x0988, 0x22b2, 0x4168, 0xbfbd, 0x437e, 0x38d0, 0x08f1, 0x41eb, 0x41c6, 0x21e9, 0x40d5, 0x1495, 0x436d, 0x41a6, 0x43f7, 0x21f7, 0xb04a, 0x4349, 0xb2d4, 0x0baa, 0xb034, 0x4087, 0x41f3, 0x40ff, 0xbf48, 0x41e7, 0xa4cb, 0x3b1b, 0xa68b, 0x18b1, 0xbaeb, 0xb045, 0xb231, 0x4194, 0x4425, 0x40f8, 0x1fda, 0xa62a, 0x4302, 0xb2ee, 0x40f9, 0x1bb8, 0x4365, 0x42ff, 0x434d, 0xba42, 0xb2ad, 0xbfb3, 0xba16, 0xb2bd, 0x41df, 0x42c9, 0x4367, 0x0235, 0x34d6, 0x4176, 0x40cb, 0x4295, 0x42b9, 0x0de1, 0x41c8, 0x41be, 0xb2ea, 0x1312, 0x4230, 0x1907, 0xb2f6, 0x4215, 0xba0a, 0xba32, 0x42a1, 0xbf07, 0x397f, 0xbfc0, 0x4206, 0x124e, 0x40cb, 0x440d, 0xb0a0, 0xb27c, 0x3960, 0x411d, 0x4217, 0x463a, 0x3a91, 0x3950, 0x438c, 0x1c16, 0xbfcb, 0xb207, 0x435b, 0x40ee, 0xbfb0, 0x2ebf, 0x3df7, 0xb21e, 0xba74, 0x1b05, 0x46fb, 0x428d, 0x43c1, 0x4196, 0x4379, 0x4239, 0x19e7, 0x411d, 0xbfd2, 0x3b6c, 0x42a7, 0x1ab9, 0xbafe, 0x40f8, 0x0e6a, 0x4422, 0xba1f, 0xbfa5, 0xba17, 0x43cb, 0x3d92, 0x43f7, 0x18a0, 0xbf21, 0x2196, 0x1fb2, 0x2491, 0x402b, 0xbf6a, 0x244e, 0x43b9, 0x03b7, 0x4228, 0x40e1, 0x42e3, 0x4353, 0x00d9, 0x41a9, 0xbac9, 0xbf74, 0x1b6a, 0x4381, 0x412b, 0x43d6, 0xbf26, 0x4194, 0x19f9, 0xb28a, 0x4000, 0xba61, 0x41a6, 0x1f6d, 0x19da, 0xb211, 0xbfa5, 0x1bf6, 0x4070, 0x1f03, 0xb275, 0x413d, 0x40f0, 0x45c8, 0x4036, 0x1844, 0x400a, 0x408b, 0x1cf3, 0xb2f6, 0x4302, 0xbf23, 0x16bb, 0x40c6, 0xba47, 0xba62, 0x42b8, 0xb24d, 0x4088, 0xba35, 0x43f5, 0xbade, 0x434f, 0x1ae1, 0x1df1, 0xb2da, 0xbfcc, 0x42ab, 0x1ece, 0x4252, 0x1e4c, 0x3aed, 0x4175, 0xb2c9, 0x422d, 0x4306, 0x3dd4, 0x4247, 0x413f, 0x3a6f, 0xb0c0, 0xb052, 0x41eb, 0xb222, 0xb05d, 0xbf16, 0x4332, 0x4142, 0xb29f, 0xb26d, 0x43b0, 0x2c2f, 0xa515, 0x43e4, 0x3d7a, 0xbf80, 0x2e76, 0x45e0, 0x1b4e, 0xbfd2, 0x45e2, 0x4033, 0x4305, 0xbf47, 0x1ad6, 0xbff0, 0x150c, 0x3e9a, 0x1ea8, 0x4120, 0x19ce, 0xbf79, 0x43ba, 0xbfe0, 0x3779, 0x42db, 0x39fe, 0xac2d, 0x1c17, 0x43b7, 0x4338, 0x29d6, 0x4069, 0xb0ba, 0xbf90, 0xa22d, 0x423c, 0x1df9, 0x40ba, 0xb24a, 0xbf87, 0x1999, 0xb277, 0x465f, 0x41da, 0xba31, 0xb2b8, 0xba07, 0x1950, 0x2ad8, 0x03a6, 0x4598, 0x1e2e, 0x4291, 0x439e, 0x43b4, 0xb0dd, 0x407d, 0x1859, 0xbf36, 0x196c, 0xb2f4, 0x19c2, 0x426f, 0xb2ed, 0xba27, 0xb209, 0x44e1, 0x2f28, 0x412a, 0x1f41, 0x26d7, 0xba26, 0x2bcb, 0x43ce, 0xbfa0, 0x1ee7, 0x307b, 0x1f27, 0x1438, 0x3bae, 0xb20a, 0x2af0, 0x1747, 0xbf03, 0xb272, 0x42c1, 0x445d, 0x1032, 0x43ac, 0x4048, 0x40c7, 0x43eb, 0x20f9, 0x4167, 0x4257, 0x419d, 0xb254, 0x020a, 0x0824, 0xbf60, 0x1bc9, 0xaa64, 0x4306, 0x41a8, 0x4368, 0x2461, 0x4412, 0x0a06, 0x426b, 0x380f, 0x429d, 0xb2b6, 0xb06a, 0xbf2c, 0x44a2, 0x4216, 0x42c3, 0xb24d, 0x455a, 0x417b, 0x4237, 0x1a76, 0xba20, 0xb08b, 0xba73, 0x178c, 0x144c, 0x1477, 0x3fff, 0xbac6, 0x40c6, 0x416b, 0xb221, 0x2221, 0x14a6, 0x3de1, 0xbf8f, 0x426c, 0xb28f, 0x4094, 0xb21a, 0x371b, 0x4654, 0x46ec, 0xba7f, 0x086c, 0x159f, 0xbaf8, 0x4094, 0xb2d1, 0x412e, 0x4087, 0xb246, 0x4190, 0x4318, 0xb2f2, 0x0736, 0xb269, 0xbf60, 0x4569, 0x466c, 0x4271, 0x4591, 0xbf91, 0x1b68, 0x4287, 0xba47, 0x4338, 0x42c7, 0xb27a, 0x4046, 0x4280, 0xbf77, 0x42e7, 0x456a, 0x117c, 0x4216, 0xbf51, 0x443e, 0x4362, 0x4036, 0x4336, 0x1e6b, 0xb25e, 0x0281, 0x4258, 0x456f, 0x4247, 0xb253, 0x358c, 0x4225, 0xb209, 0x4292, 0x2ac6, 0xb2c5, 0x2643, 0xad8c, 0x432d, 0xba18, 0x4155, 0x2239, 0x2027, 0xb27b, 0x4161, 0xb224, 0x0e38, 0xbf6f, 0x316c, 0xba5f, 0xad65, 0x4059, 0x1cd7, 0x4174, 0x325d, 0x1c2f, 0x41f3, 0xbaeb, 0x4065, 0xbf18, 0x4107, 0xb04b, 0xb2e6, 0x4060, 0x4058, 0x43e0, 0x13fe, 0x3d85, 0x4240, 0xbf58, 0x41ac, 0xbacd, 0xb218, 0x422f, 0xb228, 0x04cc, 0x1ed0, 0x43c1, 0x414a, 0x21dd, 0x1de5, 0x40d8, 0x4174, 0x4607, 0x430e, 0x4303, 0x40fd, 0xbf80, 0xbf96, 0x0173, 0xb21f, 0x44bb, 0xba35, 0x1e73, 0x40cf, 0xb0a8, 0x412d, 0x43ee, 0x42de, 0xb258, 0x411f, 0x4139, 0xb2aa, 0xae46, 0x0246, 0x421c, 0x18d7, 0x4258, 0xba6e, 0xb09e, 0x4024, 0xbaec, 0xba26, 0x41aa, 0x1e8d, 0x2a8c, 0xbf2e, 0x43e9, 0x46a9, 0x42ef, 0x43a1, 0x409c, 0x4176, 0x4133, 0xba70, 0x4649, 0xb0c6, 0x41a3, 0x4285, 0xb2e9, 0x41d2, 0x3f71, 0x403e, 0x4322, 0x4627, 0xbfae, 0xaa92, 0x43c6, 0x42d2, 0xac63, 0x0a31, 0xb258, 0xbfc6, 0x417a, 0xbaf1, 0xba1f, 0x43b8, 0x41fb, 0x4253, 0x1b4b, 0x4419, 0xbf4e, 0x4012, 0xb245, 0x3e4e, 0x44f8, 0x368f, 0x4324, 0x416d, 0x409b, 0x4254, 0xbf80, 0x27fa, 0xa534, 0xbf90, 0x1ab2, 0xb2ec, 0x4335, 0x1eb9, 0xba45, 0x4333, 0xbfb9, 0x1c4d, 0x2c8a, 0x2e8a, 0x423a, 0xb0e3, 0xb21c, 0x422d, 0xbf8e, 0x2e30, 0x42a7, 0xb0bf, 0x43b5, 0x1af2, 0x43c7, 0x1aef, 0x466c, 0xbf13, 0x3802, 0xba0b, 0x4043, 0xb089, 0xba08, 0x4153, 0x1a77, 0xb2fd, 0xa20a, 0x43b8, 0x402e, 0x4031, 0x18ce, 0x400a, 0xbf60, 0x32d5, 0x2169, 0xba6d, 0x41f3, 0x1722, 0x4396, 0xb266, 0x4165, 0xb2ad, 0x402a, 0x40ca, 0xb254, 0xbf15, 0x1b9e, 0x32eb, 0x4148, 0xba7a, 0x3889, 0x1cf3, 0x4117, 0xbad5, 0x40aa, 0x41e2, 0xbf67, 0x30d2, 0x1428, 0x42ab, 0x3d03, 0xa881, 0xbfb0, 0xb2bd, 0x1759, 0x4550, 0x0672, 0x1807, 0x300d, 0x40ad, 0x2e4a, 0xb237, 0x290f, 0xb228, 0x433e, 0x4273, 0x0bf7, 0xb0ac, 0xbaf3, 0xb00c, 0x0408, 0x4009, 0xbf3d, 0x411e, 0x433e, 0x4079, 0x41fb, 0x4375, 0x43b5, 0x4365, 0xb02c, 0x4654, 0x44e5, 0x4271, 0xb216, 0x41c5, 0x42c0, 0x4630, 0x3d54, 0xbfde, 0xba79, 0x1dba, 0xb0b7, 0x402a, 0x4279, 0x4120, 0x1e83, 0x4383, 0x18e9, 0x462c, 0x4178, 0x40a4, 0x4285, 0xb058, 0x1e53, 0xbf27, 0xb025, 0x29c0, 0x40d3, 0xb2e7, 0xba77, 0xbae1, 0x2061, 0x425a, 0x42e6, 0xbf71, 0x4018, 0x4337, 0x4287, 0xbafd, 0x42eb, 0x418e, 0x4177, 0xb01f, 0x4274, 0x1e4b, 0xad9b, 0xb2d2, 0xbad4, 0x40aa, 0x4302, 0x18be, 0x4214, 0x427c, 0x41ed, 0x18e8, 0xbfb5, 0x41ee, 0x41c8, 0x43f5, 0x401a, 0xaacd, 0x402a, 0x0dae, 0xb05e, 0x40af, 0x4019, 0x1c2f, 0x4273, 0x28ca, 0x3e2e, 0x4636, 0xba00, 0x41cf, 0xbfcd, 0x4393, 0x4225, 0x42c6, 0x08dd, 0x4085, 0x41df, 0x43e0, 0x1ef3, 0x2fc5, 0x1893, 0x407c, 0x4263, 0xa557, 0xb0ad, 0xbfbd, 0x2c87, 0xb254, 0xba35, 0x404b, 0x1f02, 0x4128, 0xba23, 0x21ae, 0x04df, 0x4097, 0xb06f, 0x4630, 0xb2d9, 0x4076, 0x4118, 0x34d4, 0x402c, 0x4014, 0x4660, 0x1b57, 0x1ed9, 0x1d79, 0x0656, 0x1a34, 0x3ed4, 0xbfde, 0x1cbc, 0x4318, 0xba0c, 0x4485, 0x3cb7, 0x1be9, 0x411e, 0x0c28, 0x4320, 0x4048, 0xba28, 0xba50, 0xb0ce, 0x43d5, 0x409f, 0x454c, 0xa404, 0x41ce, 0xbf25, 0x402a, 0x4621, 0x4193, 0x41d2, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xc53d8d03, 0xff04be91, 0xd7eb41e1, 0xf292368c, 0xc17640e7, 0x57b5fdc3, 0x3ca7f7e5, 0x438f9293, 0xbf87ea5c, 0x7ed4e28f, 0xf51a6864, 0x539c9c7c, 0x62d8cca2, 0xc0701359, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0xfffffcff, 0x000017f4, 0x00000000, 0x00000800, 0x000017f4, 0x00000003, 0xf2cf7fff, 0xffffe718, 0xc0464ce0, 0x0d53d3ba, 0xf51a6864, 0x000012ba, 0xf51a6b68, 0xdf4f4290, 0x00000000, 0xa00001d0 }, + Instructions = [0xba51, 0x414a, 0x4030, 0x4380, 0x4328, 0xb07b, 0x425a, 0xb214, 0x42fd, 0x2b6a, 0xaf72, 0x0da2, 0xb260, 0xb0a2, 0x4017, 0x4242, 0x38f4, 0x40d8, 0xb2b5, 0xbf43, 0x40f1, 0xb29b, 0x4240, 0x412b, 0x1c5d, 0xb27f, 0x2483, 0x4322, 0xba3d, 0x380c, 0xba4e, 0x1a5d, 0x4387, 0xb21d, 0xb2b6, 0xbf29, 0x2514, 0x43b9, 0x424b, 0x3cb5, 0xbf90, 0x40b2, 0x2a94, 0x42ce, 0x42df, 0xb23a, 0x12c2, 0xb232, 0x3230, 0x194f, 0xbf9e, 0xac89, 0x40d9, 0x4023, 0x424a, 0x2736, 0x0a55, 0x401a, 0x1835, 0x402e, 0xb20b, 0xbf6f, 0x2155, 0xbaf4, 0x39c6, 0x0161, 0x4217, 0x33de, 0x379d, 0x1dbc, 0x0b38, 0xb2ff, 0x23eb, 0x4072, 0xbf8a, 0x4201, 0x4240, 0x41b1, 0x1916, 0x40c4, 0xb26a, 0x4345, 0x0e81, 0xbf17, 0x4359, 0x4396, 0x4185, 0xa8f1, 0x43ce, 0x0472, 0x424d, 0x438d, 0x4018, 0x3684, 0xb244, 0x4349, 0x40a9, 0x400c, 0x41ac, 0x42ff, 0xaea0, 0xa7e6, 0xb2ec, 0x31eb, 0xb211, 0x42c8, 0x2649, 0x4064, 0xbad9, 0xbf05, 0x4169, 0x4664, 0x4679, 0x4576, 0x415b, 0xb200, 0x1f31, 0x2abf, 0xb0f4, 0x46d5, 0x4387, 0x40fa, 0x42dd, 0x18c0, 0xb021, 0x3d89, 0x403f, 0x4257, 0x1f9a, 0x43ed, 0x3c5c, 0x1c96, 0x41d4, 0xb201, 0x2ff5, 0x43ab, 0x0f0f, 0xbf69, 0x4637, 0x1895, 0x1d62, 0xa75b, 0xb0c3, 0x45d2, 0x432b, 0xb217, 0x18c7, 0x41dd, 0xa705, 0x4219, 0x433d, 0xa9c2, 0xb29d, 0x40f1, 0xbaf1, 0x420c, 0xb256, 0x4112, 0xbfbd, 0x1ab8, 0xba34, 0xbfe0, 0xbadf, 0xa4ed, 0x4323, 0x41a6, 0x40d6, 0x40c3, 0x4361, 0x0974, 0x1990, 0x42dc, 0x4377, 0xb2d8, 0x44d4, 0xba4e, 0x46e9, 0x188c, 0xbfd5, 0x429b, 0x4374, 0x4551, 0xb259, 0x418c, 0x4588, 0x43fe, 0xbfd0, 0x4175, 0x4227, 0x44b8, 0xbfe0, 0x2e9a, 0x406a, 0x2535, 0x4168, 0x0ad7, 0x1d42, 0x4264, 0xb086, 0xbada, 0xb00f, 0xb26f, 0x1b8d, 0x1c5c, 0x44c1, 0x3f77, 0x0f15, 0xb24c, 0xbf0e, 0x42d1, 0x44eb, 0x4253, 0x4233, 0x4203, 0xbfcd, 0x427a, 0x18a6, 0x4011, 0x29a1, 0x40cc, 0x448c, 0x1d4f, 0x0d2b, 0xb2dc, 0x4026, 0x12ff, 0x434c, 0x06a7, 0x415f, 0x41e4, 0x1842, 0xbf3a, 0xba5a, 0x4082, 0x43d2, 0x42a7, 0xa3c3, 0x41f5, 0x4341, 0x35dd, 0x425e, 0xb2c6, 0x4396, 0x420d, 0xb298, 0xbfd0, 0xa02a, 0x060e, 0x009f, 0x0988, 0x22b2, 0x4168, 0xbfbd, 0x437e, 0x38d0, 0x08f1, 0x41eb, 0x41c6, 0x21e9, 0x40d5, 0x1495, 0x436d, 0x41a6, 0x43f7, 0x21f7, 0xb04a, 0x4349, 0xb2d4, 0x0baa, 0xb034, 0x4087, 0x41f3, 0x40ff, 0xbf48, 0x41e7, 0xa4cb, 0x3b1b, 0xa68b, 0x18b1, 0xbaeb, 0xb045, 0xb231, 0x4194, 0x4425, 0x40f8, 0x1fda, 0xa62a, 0x4302, 0xb2ee, 0x40f9, 0x1bb8, 0x4365, 0x42ff, 0x434d, 0xba42, 0xb2ad, 0xbfb3, 0xba16, 0xb2bd, 0x41df, 0x42c9, 0x4367, 0x0235, 0x34d6, 0x4176, 0x40cb, 0x4295, 0x42b9, 0x0de1, 0x41c8, 0x41be, 0xb2ea, 0x1312, 0x4230, 0x1907, 0xb2f6, 0x4215, 0xba0a, 0xba32, 0x42a1, 0xbf07, 0x397f, 0xbfc0, 0x4206, 0x124e, 0x40cb, 0x440d, 0xb0a0, 0xb27c, 0x3960, 0x411d, 0x4217, 0x463a, 0x3a91, 0x3950, 0x438c, 0x1c16, 0xbfcb, 0xb207, 0x435b, 0x40ee, 0xbfb0, 0x2ebf, 0x3df7, 0xb21e, 0xba74, 0x1b05, 0x46fb, 0x428d, 0x43c1, 0x4196, 0x4379, 0x4239, 0x19e7, 0x411d, 0xbfd2, 0x3b6c, 0x42a7, 0x1ab9, 0xbafe, 0x40f8, 0x0e6a, 0x4422, 0xba1f, 0xbfa5, 0xba17, 0x43cb, 0x3d92, 0x43f7, 0x18a0, 0xbf21, 0x2196, 0x1fb2, 0x2491, 0x402b, 0xbf6a, 0x244e, 0x43b9, 0x03b7, 0x4228, 0x40e1, 0x42e3, 0x4353, 0x00d9, 0x41a9, 0xbac9, 0xbf74, 0x1b6a, 0x4381, 0x412b, 0x43d6, 0xbf26, 0x4194, 0x19f9, 0xb28a, 0x4000, 0xba61, 0x41a6, 0x1f6d, 0x19da, 0xb211, 0xbfa5, 0x1bf6, 0x4070, 0x1f03, 0xb275, 0x413d, 0x40f0, 0x45c8, 0x4036, 0x1844, 0x400a, 0x408b, 0x1cf3, 0xb2f6, 0x4302, 0xbf23, 0x16bb, 0x40c6, 0xba47, 0xba62, 0x42b8, 0xb24d, 0x4088, 0xba35, 0x43f5, 0xbade, 0x434f, 0x1ae1, 0x1df1, 0xb2da, 0xbfcc, 0x42ab, 0x1ece, 0x4252, 0x1e4c, 0x3aed, 0x4175, 0xb2c9, 0x422d, 0x4306, 0x3dd4, 0x4247, 0x413f, 0x3a6f, 0xb0c0, 0xb052, 0x41eb, 0xb222, 0xb05d, 0xbf16, 0x4332, 0x4142, 0xb29f, 0xb26d, 0x43b0, 0x2c2f, 0xa515, 0x43e4, 0x3d7a, 0xbf80, 0x2e76, 0x45e0, 0x1b4e, 0xbfd2, 0x45e2, 0x4033, 0x4305, 0xbf47, 0x1ad6, 0xbff0, 0x150c, 0x3e9a, 0x1ea8, 0x4120, 0x19ce, 0xbf79, 0x43ba, 0xbfe0, 0x3779, 0x42db, 0x39fe, 0xac2d, 0x1c17, 0x43b7, 0x4338, 0x29d6, 0x4069, 0xb0ba, 0xbf90, 0xa22d, 0x423c, 0x1df9, 0x40ba, 0xb24a, 0xbf87, 0x1999, 0xb277, 0x465f, 0x41da, 0xba31, 0xb2b8, 0xba07, 0x1950, 0x2ad8, 0x03a6, 0x4598, 0x1e2e, 0x4291, 0x439e, 0x43b4, 0xb0dd, 0x407d, 0x1859, 0xbf36, 0x196c, 0xb2f4, 0x19c2, 0x426f, 0xb2ed, 0xba27, 0xb209, 0x44e1, 0x2f28, 0x412a, 0x1f41, 0x26d7, 0xba26, 0x2bcb, 0x43ce, 0xbfa0, 0x1ee7, 0x307b, 0x1f27, 0x1438, 0x3bae, 0xb20a, 0x2af0, 0x1747, 0xbf03, 0xb272, 0x42c1, 0x445d, 0x1032, 0x43ac, 0x4048, 0x40c7, 0x43eb, 0x20f9, 0x4167, 0x4257, 0x419d, 0xb254, 0x020a, 0x0824, 0xbf60, 0x1bc9, 0xaa64, 0x4306, 0x41a8, 0x4368, 0x2461, 0x4412, 0x0a06, 0x426b, 0x380f, 0x429d, 0xb2b6, 0xb06a, 0xbf2c, 0x44a2, 0x4216, 0x42c3, 0xb24d, 0x455a, 0x417b, 0x4237, 0x1a76, 0xba20, 0xb08b, 0xba73, 0x178c, 0x144c, 0x1477, 0x3fff, 0xbac6, 0x40c6, 0x416b, 0xb221, 0x2221, 0x14a6, 0x3de1, 0xbf8f, 0x426c, 0xb28f, 0x4094, 0xb21a, 0x371b, 0x4654, 0x46ec, 0xba7f, 0x086c, 0x159f, 0xbaf8, 0x4094, 0xb2d1, 0x412e, 0x4087, 0xb246, 0x4190, 0x4318, 0xb2f2, 0x0736, 0xb269, 0xbf60, 0x4569, 0x466c, 0x4271, 0x4591, 0xbf91, 0x1b68, 0x4287, 0xba47, 0x4338, 0x42c7, 0xb27a, 0x4046, 0x4280, 0xbf77, 0x42e7, 0x456a, 0x117c, 0x4216, 0xbf51, 0x443e, 0x4362, 0x4036, 0x4336, 0x1e6b, 0xb25e, 0x0281, 0x4258, 0x456f, 0x4247, 0xb253, 0x358c, 0x4225, 0xb209, 0x4292, 0x2ac6, 0xb2c5, 0x2643, 0xad8c, 0x432d, 0xba18, 0x4155, 0x2239, 0x2027, 0xb27b, 0x4161, 0xb224, 0x0e38, 0xbf6f, 0x316c, 0xba5f, 0xad65, 0x4059, 0x1cd7, 0x4174, 0x325d, 0x1c2f, 0x41f3, 0xbaeb, 0x4065, 0xbf18, 0x4107, 0xb04b, 0xb2e6, 0x4060, 0x4058, 0x43e0, 0x13fe, 0x3d85, 0x4240, 0xbf58, 0x41ac, 0xbacd, 0xb218, 0x422f, 0xb228, 0x04cc, 0x1ed0, 0x43c1, 0x414a, 0x21dd, 0x1de5, 0x40d8, 0x4174, 0x4607, 0x430e, 0x4303, 0x40fd, 0xbf80, 0xbf96, 0x0173, 0xb21f, 0x44bb, 0xba35, 0x1e73, 0x40cf, 0xb0a8, 0x412d, 0x43ee, 0x42de, 0xb258, 0x411f, 0x4139, 0xb2aa, 0xae46, 0x0246, 0x421c, 0x18d7, 0x4258, 0xba6e, 0xb09e, 0x4024, 0xbaec, 0xba26, 0x41aa, 0x1e8d, 0x2a8c, 0xbf2e, 0x43e9, 0x46a9, 0x42ef, 0x43a1, 0x409c, 0x4176, 0x4133, 0xba70, 0x4649, 0xb0c6, 0x41a3, 0x4285, 0xb2e9, 0x41d2, 0x3f71, 0x403e, 0x4322, 0x4627, 0xbfae, 0xaa92, 0x43c6, 0x42d2, 0xac63, 0x0a31, 0xb258, 0xbfc6, 0x417a, 0xbaf1, 0xba1f, 0x43b8, 0x41fb, 0x4253, 0x1b4b, 0x4419, 0xbf4e, 0x4012, 0xb245, 0x3e4e, 0x44f8, 0x368f, 0x4324, 0x416d, 0x409b, 0x4254, 0xbf80, 0x27fa, 0xa534, 0xbf90, 0x1ab2, 0xb2ec, 0x4335, 0x1eb9, 0xba45, 0x4333, 0xbfb9, 0x1c4d, 0x2c8a, 0x2e8a, 0x423a, 0xb0e3, 0xb21c, 0x422d, 0xbf8e, 0x2e30, 0x42a7, 0xb0bf, 0x43b5, 0x1af2, 0x43c7, 0x1aef, 0x466c, 0xbf13, 0x3802, 0xba0b, 0x4043, 0xb089, 0xba08, 0x4153, 0x1a77, 0xb2fd, 0xa20a, 0x43b8, 0x402e, 0x4031, 0x18ce, 0x400a, 0xbf60, 0x32d5, 0x2169, 0xba6d, 0x41f3, 0x1722, 0x4396, 0xb266, 0x4165, 0xb2ad, 0x402a, 0x40ca, 0xb254, 0xbf15, 0x1b9e, 0x32eb, 0x4148, 0xba7a, 0x3889, 0x1cf3, 0x4117, 0xbad5, 0x40aa, 0x41e2, 0xbf67, 0x30d2, 0x1428, 0x42ab, 0x3d03, 0xa881, 0xbfb0, 0xb2bd, 0x1759, 0x4550, 0x0672, 0x1807, 0x300d, 0x40ad, 0x2e4a, 0xb237, 0x290f, 0xb228, 0x433e, 0x4273, 0x0bf7, 0xb0ac, 0xbaf3, 0xb00c, 0x0408, 0x4009, 0xbf3d, 0x411e, 0x433e, 0x4079, 0x41fb, 0x4375, 0x43b5, 0x4365, 0xb02c, 0x4654, 0x44e5, 0x4271, 0xb216, 0x41c5, 0x42c0, 0x4630, 0x3d54, 0xbfde, 0xba79, 0x1dba, 0xb0b7, 0x402a, 0x4279, 0x4120, 0x1e83, 0x4383, 0x18e9, 0x462c, 0x4178, 0x40a4, 0x4285, 0xb058, 0x1e53, 0xbf27, 0xb025, 0x29c0, 0x40d3, 0xb2e7, 0xba77, 0xbae1, 0x2061, 0x425a, 0x42e6, 0xbf71, 0x4018, 0x4337, 0x4287, 0xbafd, 0x42eb, 0x418e, 0x4177, 0xb01f, 0x4274, 0x1e4b, 0xad9b, 0xb2d2, 0xbad4, 0x40aa, 0x4302, 0x18be, 0x4214, 0x427c, 0x41ed, 0x18e8, 0xbfb5, 0x41ee, 0x41c8, 0x43f5, 0x401a, 0xaacd, 0x402a, 0x0dae, 0xb05e, 0x40af, 0x4019, 0x1c2f, 0x4273, 0x28ca, 0x3e2e, 0x4636, 0xba00, 0x41cf, 0xbfcd, 0x4393, 0x4225, 0x42c6, 0x08dd, 0x4085, 0x41df, 0x43e0, 0x1ef3, 0x2fc5, 0x1893, 0x407c, 0x4263, 0xa557, 0xb0ad, 0xbfbd, 0x2c87, 0xb254, 0xba35, 0x404b, 0x1f02, 0x4128, 0xba23, 0x21ae, 0x04df, 0x4097, 0xb06f, 0x4630, 0xb2d9, 0x4076, 0x4118, 0x34d4, 0x402c, 0x4014, 0x4660, 0x1b57, 0x1ed9, 0x1d79, 0x0656, 0x1a34, 0x3ed4, 0xbfde, 0x1cbc, 0x4318, 0xba0c, 0x4485, 0x3cb7, 0x1be9, 0x411e, 0x0c28, 0x4320, 0x4048, 0xba28, 0xba50, 0xb0ce, 0x43d5, 0x409f, 0x454c, 0xa404, 0x41ce, 0xbf25, 0x402a, 0x4621, 0x4193, 0x41d2, 0x4770, 0xe7fe + ], + StartRegs = [0xc53d8d03, 0xff04be91, 0xd7eb41e1, 0xf292368c, 0xc17640e7, 0x57b5fdc3, 0x3ca7f7e5, 0x438f9293, 0xbf87ea5c, 0x7ed4e28f, 0xf51a6864, 0x539c9c7c, 0x62d8cca2, 0xc0701359, 0x00000000, 0x700001f0 + ], + FinalRegs = [0xfffffcff, 0x000017f4, 0x00000000, 0x00000800, 0x000017f4, 0x00000003, 0xf2cf7fff, 0xffffe718, 0xc0464ce0, 0x0d53d3ba, 0xf51a6864, 0x000012ba, 0xf51a6b68, 0xdf4f4290, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x2af4, 0x4229, 0x413f, 0xb264, 0x4327, 0x4106, 0x402a, 0xb0a1, 0x45b0, 0xb2fa, 0x1ebf, 0x441e, 0x43f6, 0xbf8f, 0x4628, 0x3760, 0x4360, 0x42af, 0x4179, 0xbf1f, 0x41d3, 0x1991, 0x4181, 0xb293, 0x4235, 0x1f56, 0x4650, 0xaf8a, 0xadfe, 0xb20e, 0x1abd, 0xba65, 0x4210, 0xb2ea, 0xa27b, 0xbafe, 0xbf00, 0x41ca, 0x1a78, 0x1668, 0xb2a2, 0xb061, 0x400f, 0x43a0, 0xbf58, 0x41af, 0x413f, 0x183a, 0x1e39, 0xbf15, 0x41e3, 0x4322, 0x41ed, 0xb0d3, 0x37ae, 0x120e, 0xb229, 0x417e, 0xb2dd, 0x4181, 0x08cd, 0xb2e2, 0x42b3, 0x43f4, 0x0bb2, 0x40ca, 0x412b, 0xb066, 0xbad4, 0x1c95, 0x4128, 0xa2c0, 0xbfa1, 0x4165, 0x40a1, 0xb2fa, 0x4054, 0x439d, 0xb29b, 0xb219, 0xb0b8, 0xbae4, 0x10ce, 0x43c6, 0xba78, 0x4163, 0xb2b7, 0x4151, 0x416f, 0x4323, 0xb205, 0x4443, 0x421b, 0x4378, 0x439d, 0x4306, 0x11f7, 0x41ce, 0xb270, 0x4040, 0x3828, 0xbf4a, 0xa7f5, 0x4036, 0xbfb0, 0x46fb, 0x4638, 0x41ce, 0x4018, 0xb2f7, 0x3777, 0x4297, 0x4372, 0x1b90, 0x215f, 0x4096, 0x436b, 0x0217, 0xb26a, 0xb200, 0xa480, 0x4406, 0x2fbe, 0x0701, 0x426c, 0xb2f6, 0x41b3, 0x431f, 0xb2aa, 0x406a, 0xbf3a, 0x427b, 0x064a, 0x1ad3, 0xb265, 0xac12, 0xb0a2, 0x4100, 0xbf7e, 0x1d85, 0x43a1, 0x4009, 0x1338, 0x4315, 0xba41, 0x3f3c, 0x4211, 0x40a4, 0x055d, 0x455a, 0xba61, 0x439e, 0xbf80, 0x43ab, 0x45ed, 0x3ab9, 0xb2e2, 0x3618, 0xbf76, 0x2654, 0x4555, 0xa5a8, 0x4349, 0xaa9c, 0x41c5, 0x4356, 0x3c41, 0x40c2, 0x085c, 0x40a7, 0xbfba, 0xbae7, 0x42b5, 0x42a0, 0x21d7, 0x420f, 0x1a68, 0x41f7, 0xbfa0, 0x43ab, 0xbf9a, 0x41b4, 0x397b, 0xb23b, 0x1b68, 0x4260, 0xb256, 0x432a, 0xb2b4, 0x44c8, 0xb2cc, 0x409c, 0xbff0, 0x416e, 0xbf13, 0x4312, 0xb0bb, 0x342f, 0x43c9, 0x4107, 0x1a19, 0x223f, 0xabb8, 0x43f4, 0xbf83, 0x2d30, 0x4155, 0x424b, 0xb2b6, 0x4296, 0xb21c, 0x3cca, 0x41fd, 0xba12, 0x424c, 0xbf2e, 0xba38, 0xbacd, 0xa7e7, 0x00be, 0x43f9, 0x1a9f, 0x2f15, 0x1eb0, 0x42c1, 0x4576, 0x418c, 0x4203, 0x1428, 0x1b1a, 0xbaff, 0x430a, 0x41d1, 0x42ee, 0x42d1, 0xb0dc, 0x437a, 0xbf6e, 0x4009, 0xb2f8, 0x43e9, 0x4188, 0x3d63, 0x1f9c, 0xa47d, 0xba6a, 0xbadd, 0x45d4, 0xbfb1, 0xb2bf, 0x1fdf, 0x41c9, 0xbf90, 0xba05, 0xb2e1, 0x4012, 0x4353, 0x438d, 0x462c, 0xb019, 0x41c6, 0x4092, 0xb2dd, 0xb21e, 0xba72, 0x2b0f, 0x401e, 0xba33, 0x0636, 0xb213, 0x3216, 0x41a6, 0xbf99, 0x3934, 0x4290, 0xbff0, 0xba7f, 0x0aa5, 0x1b9d, 0x1b5e, 0xba5d, 0xbfd8, 0x39cd, 0x41ea, 0x427e, 0x42ea, 0xb292, 0xb2c5, 0x422d, 0x413d, 0xba0d, 0xafa1, 0x324a, 0xbf26, 0xb243, 0x1cb1, 0x4017, 0x4430, 0x42ce, 0xbf51, 0xb23e, 0xba00, 0xba27, 0x18b7, 0x4084, 0xb0d7, 0xb229, 0x423c, 0x429e, 0xbad8, 0xba28, 0x430c, 0xb070, 0x4091, 0x4191, 0x4038, 0x436d, 0x4285, 0x41de, 0x4037, 0xbfbb, 0x45a5, 0x1c02, 0x2189, 0x0fae, 0xb25d, 0x1d7c, 0x43ef, 0xa694, 0x10c2, 0xbfc8, 0xba12, 0xad26, 0x1501, 0x41c6, 0x4212, 0x197b, 0x4350, 0x403b, 0xbfe0, 0xb29d, 0x4558, 0x4205, 0x439c, 0x444f, 0xb01c, 0x1e76, 0xb2d5, 0x44f9, 0x46d3, 0x4036, 0x41de, 0xba6d, 0x2a32, 0xbf38, 0x4160, 0xbf37, 0xb0ec, 0xba41, 0xb28f, 0x41f1, 0xbf86, 0x2b4a, 0xb209, 0x4338, 0x1eb8, 0xbf04, 0x4336, 0xb210, 0xb0d2, 0x41de, 0xaa40, 0xb00f, 0xb025, 0x424e, 0x4454, 0x43c9, 0x42c6, 0x4158, 0x42e4, 0xbf22, 0x40d0, 0x40b8, 0xb2cf, 0x1b2e, 0xba36, 0xb2df, 0xbf4e, 0xbad7, 0x4172, 0x41ab, 0x46e0, 0x048d, 0x40d0, 0x42d6, 0x4302, 0xbacf, 0x42b1, 0x30ee, 0xb2ce, 0x43e0, 0x3e75, 0x402b, 0x0cb9, 0xba34, 0x0d88, 0xbfce, 0x0bf1, 0x1510, 0x4316, 0x463d, 0x458e, 0x1925, 0xaec3, 0xbf4c, 0x408b, 0xb08c, 0xb268, 0x4283, 0x410e, 0xbfc8, 0x261d, 0x1efb, 0x4309, 0x43ca, 0x4080, 0x423b, 0x4099, 0x4566, 0x4000, 0x10e8, 0xb20e, 0xba40, 0xbad2, 0x21b3, 0x4310, 0x4023, 0x1c67, 0x418e, 0xa05b, 0x4275, 0xb00a, 0xbf7c, 0x1ae8, 0xba49, 0x1039, 0x438d, 0x435f, 0x40ad, 0xb287, 0x282a, 0xaa2d, 0x427f, 0x42c7, 0x4354, 0x435d, 0x41b9, 0xb06f, 0x46e9, 0xba23, 0x40e8, 0x408d, 0x4013, 0xbf0a, 0x435c, 0x2384, 0x4542, 0xa98c, 0xb20b, 0xb27c, 0xbafa, 0x4303, 0x4097, 0x41f9, 0x42ea, 0x407e, 0x3c9a, 0x4097, 0x4359, 0x1e96, 0x0020, 0x3c97, 0xba3c, 0xb2ff, 0x42ca, 0x4471, 0x4076, 0xb250, 0xbf7e, 0xbfd0, 0xb23f, 0x4365, 0x4638, 0x1d42, 0x21a7, 0x1325, 0x4367, 0xb038, 0x4379, 0x4304, 0x4574, 0x410c, 0xbf8e, 0x23da, 0x40ad, 0xb202, 0x42a5, 0x4321, 0x44f4, 0x1a22, 0xba30, 0x40f6, 0x40a1, 0xa786, 0xb0b2, 0x414a, 0x43cd, 0x42ef, 0x034a, 0xbf3d, 0x4029, 0x463e, 0x0ac8, 0x43f0, 0x1ac0, 0x401e, 0xbaea, 0x0d5e, 0xbfd3, 0xb2a2, 0x42b9, 0xb2ff, 0x4151, 0x42e3, 0x4083, 0x1864, 0x42f9, 0x19ba, 0xb058, 0x1a60, 0xa486, 0x2355, 0x2060, 0xbf0b, 0x42bd, 0x418e, 0x1ceb, 0x4290, 0x1f52, 0x1c67, 0xa739, 0x437c, 0x189e, 0x43e6, 0xbf0f, 0x415d, 0xb208, 0xb267, 0xa399, 0x411f, 0x1954, 0x346b, 0x19f7, 0x43e8, 0x433b, 0x3630, 0xba34, 0xbad2, 0xbf2c, 0xb291, 0x42b5, 0x4102, 0x1bbe, 0x4033, 0x4632, 0x1ffe, 0x436a, 0x4364, 0xbaf1, 0xbf94, 0xb289, 0xb0fc, 0x432a, 0x1ced, 0xba74, 0x2483, 0xbf5b, 0x426c, 0xb207, 0x41d8, 0x4157, 0x42e7, 0x42df, 0xb26e, 0x13cd, 0x4120, 0x1d31, 0xa70b, 0xbff0, 0xb03f, 0xb272, 0x4388, 0x370d, 0x1d74, 0x1ce9, 0x40ee, 0x403b, 0x1c1b, 0xbac0, 0x1007, 0x4008, 0x1996, 0xbf32, 0x1b8b, 0x23d1, 0x4556, 0x1cac, 0xa867, 0x3b4b, 0xb22c, 0x4419, 0xba1d, 0x4384, 0x4038, 0xba49, 0x4173, 0x3e55, 0xba7a, 0x4041, 0x421a, 0x4475, 0x409a, 0xbfd0, 0xb023, 0xb2be, 0xb2b7, 0x46ad, 0x4027, 0xa0cf, 0xbfe1, 0x3b58, 0x4156, 0xb213, 0x4388, 0x4443, 0xb21a, 0x42a6, 0xb2bd, 0xbace, 0x415c, 0x19b0, 0xbf97, 0x0d21, 0x1f02, 0x4133, 0x0a3b, 0xb027, 0x39b7, 0x429d, 0xb2b5, 0x4243, 0x00bf, 0x42a1, 0x45eb, 0xbf99, 0x4124, 0x2790, 0x4250, 0xbae9, 0x1d8c, 0x041e, 0x4222, 0x4243, 0x421a, 0x41e6, 0x1efc, 0x4611, 0xbfd6, 0x1e2d, 0x41a8, 0x4220, 0x42ee, 0x40ae, 0xba77, 0x4177, 0xae2a, 0x4190, 0x43f0, 0x1dc7, 0xb036, 0x464f, 0x4654, 0x4100, 0xbad3, 0x420e, 0x2f13, 0x42c7, 0xb00b, 0x4387, 0x12cc, 0x406e, 0x419b, 0x420e, 0x1e6c, 0x2d42, 0xb24d, 0xbf11, 0x421e, 0x43a3, 0x18d2, 0x3178, 0x4093, 0x42cd, 0x1c0a, 0x4173, 0x1821, 0x1c38, 0x43d8, 0x44e5, 0x4239, 0x13f2, 0xbf11, 0x42df, 0xba20, 0x4020, 0x4190, 0x40d4, 0x438a, 0x403e, 0xb22b, 0x400a, 0x2101, 0x223e, 0x0d56, 0xbf9b, 0x4328, 0xb276, 0xb09a, 0xb229, 0x1c8c, 0x09ad, 0x1cc6, 0x0e1f, 0x43f6, 0x411c, 0x41b2, 0x265b, 0xba5c, 0x0f83, 0x41be, 0x2897, 0xba67, 0x40eb, 0x413c, 0x1c6c, 0x4010, 0x1829, 0x43ce, 0x4292, 0xbf06, 0x4156, 0x43d6, 0x431b, 0xb2e6, 0x4167, 0x0318, 0xbfe0, 0x4224, 0x13e7, 0x4165, 0x4402, 0x41be, 0xa3ad, 0xb22e, 0xba0d, 0x1fae, 0xaf2b, 0x13bb, 0xb299, 0x422d, 0x4113, 0x3fef, 0x41ea, 0x1ebd, 0x12b6, 0x1b80, 0xbf4e, 0xb2f6, 0x33be, 0x4075, 0xbf35, 0xb24b, 0x42fc, 0x4039, 0x18d0, 0x2d6f, 0x1e21, 0x1cd0, 0xba62, 0xab70, 0xa93f, 0xba33, 0xbf92, 0xb23f, 0x41fc, 0x176e, 0x436f, 0x4246, 0x4119, 0x445f, 0xba22, 0xbf60, 0x4075, 0x45da, 0xbf70, 0x4011, 0xb29b, 0x1d67, 0x413f, 0x0a8d, 0x464c, 0xac75, 0x432d, 0xa2cf, 0x0872, 0x18ae, 0x4315, 0xbf66, 0xb249, 0xba19, 0x4074, 0xa674, 0x4009, 0xbf90, 0x4373, 0x4072, 0x1f85, 0x1968, 0x3a9a, 0x1e06, 0x44cd, 0x4152, 0x433c, 0xba71, 0x1835, 0x40bf, 0xbf80, 0x4150, 0xbf05, 0xb241, 0xba5b, 0x41a7, 0x4445, 0x4232, 0xb2c9, 0x418b, 0xb20c, 0x436c, 0x46b9, 0xba16, 0x411b, 0x40d0, 0x1af2, 0xb06c, 0xbf3f, 0x429d, 0x4296, 0xac36, 0x40b1, 0x19f1, 0x1a06, 0x131c, 0x403f, 0x19e2, 0xa234, 0xbf62, 0xba62, 0x2ad5, 0x1b63, 0x4048, 0xb00f, 0xb265, 0xb03b, 0xb2da, 0x17c2, 0xb0c6, 0x1c3e, 0x41c4, 0x42af, 0xbfae, 0x2515, 0xb2e3, 0x42f6, 0x4065, 0x21bc, 0x2a1c, 0x2d3e, 0x43ba, 0x40e0, 0x435e, 0xb24d, 0x0e36, 0x406f, 0x404b, 0x1c48, 0xbf97, 0xbf70, 0x4153, 0xb20f, 0xb25e, 0x43c9, 0x4226, 0x40dd, 0x405c, 0x43cb, 0x0d09, 0x19fa, 0x1d04, 0x430c, 0x4029, 0xb2fa, 0xbf1f, 0x0aa8, 0xb223, 0xb2ca, 0x413f, 0x1b91, 0x36e0, 0x19dc, 0x005f, 0x1420, 0x40fc, 0x439f, 0xbfb3, 0x0279, 0x1824, 0x1879, 0xa189, 0xba14, 0x33bb, 0x4266, 0x0602, 0x41c4, 0xba73, 0x40eb, 0x419b, 0xbfc3, 0x4179, 0x183d, 0x4339, 0x41bb, 0xa7fd, 0xb257, 0x42bf, 0x4551, 0x425d, 0xba0a, 0x1e0f, 0x200a, 0x4204, 0x42ca, 0xa1de, 0x0124, 0x4282, 0x1d1d, 0x411c, 0x18bd, 0x406d, 0xba1f, 0xbad9, 0x0714, 0x421f, 0xbf5f, 0x409f, 0x4317, 0x419c, 0xba34, 0x40e1, 0x1b14, 0xbf21, 0x38e6, 0x1016, 0x4387, 0x42c9, 0x10ca, 0x101a, 0x43e1, 0xb2a6, 0x1c7d, 0x4318, 0xbf49, 0x4573, 0x1e86, 0xb256, 0x40df, 0x43fb, 0xbfd3, 0xa2c5, 0x4175, 0xb22e, 0x18cb, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xff38a7fb, 0x4577c13c, 0xbafd4bd9, 0x608edce2, 0x0b12ce77, 0xdd0d292c, 0xd713d1ca, 0x0199fdd1, 0xee4843e5, 0x33f7a879, 0xf40bded8, 0x113e3e39, 0xfa00e8ce, 0xeb295429, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0xffffffbe, 0x3ffeffff, 0x00001ae0, 0x3ffefffe, 0xc0010000, 0x000000dc, 0xffffffff, 0x00000000, 0xfa00e8ce, 0x5b129380, 0xf40bded8, 0xf40bded8, 0xfa00e8ce, 0x9b2a428a, 0x00000000, 0xa00001d0 }, + Instructions = [0x2af4, 0x4229, 0x413f, 0xb264, 0x4327, 0x4106, 0x402a, 0xb0a1, 0x45b0, 0xb2fa, 0x1ebf, 0x441e, 0x43f6, 0xbf8f, 0x4628, 0x3760, 0x4360, 0x42af, 0x4179, 0xbf1f, 0x41d3, 0x1991, 0x4181, 0xb293, 0x4235, 0x1f56, 0x4650, 0xaf8a, 0xadfe, 0xb20e, 0x1abd, 0xba65, 0x4210, 0xb2ea, 0xa27b, 0xbafe, 0xbf00, 0x41ca, 0x1a78, 0x1668, 0xb2a2, 0xb061, 0x400f, 0x43a0, 0xbf58, 0x41af, 0x413f, 0x183a, 0x1e39, 0xbf15, 0x41e3, 0x4322, 0x41ed, 0xb0d3, 0x37ae, 0x120e, 0xb229, 0x417e, 0xb2dd, 0x4181, 0x08cd, 0xb2e2, 0x42b3, 0x43f4, 0x0bb2, 0x40ca, 0x412b, 0xb066, 0xbad4, 0x1c95, 0x4128, 0xa2c0, 0xbfa1, 0x4165, 0x40a1, 0xb2fa, 0x4054, 0x439d, 0xb29b, 0xb219, 0xb0b8, 0xbae4, 0x10ce, 0x43c6, 0xba78, 0x4163, 0xb2b7, 0x4151, 0x416f, 0x4323, 0xb205, 0x4443, 0x421b, 0x4378, 0x439d, 0x4306, 0x11f7, 0x41ce, 0xb270, 0x4040, 0x3828, 0xbf4a, 0xa7f5, 0x4036, 0xbfb0, 0x46fb, 0x4638, 0x41ce, 0x4018, 0xb2f7, 0x3777, 0x4297, 0x4372, 0x1b90, 0x215f, 0x4096, 0x436b, 0x0217, 0xb26a, 0xb200, 0xa480, 0x4406, 0x2fbe, 0x0701, 0x426c, 0xb2f6, 0x41b3, 0x431f, 0xb2aa, 0x406a, 0xbf3a, 0x427b, 0x064a, 0x1ad3, 0xb265, 0xac12, 0xb0a2, 0x4100, 0xbf7e, 0x1d85, 0x43a1, 0x4009, 0x1338, 0x4315, 0xba41, 0x3f3c, 0x4211, 0x40a4, 0x055d, 0x455a, 0xba61, 0x439e, 0xbf80, 0x43ab, 0x45ed, 0x3ab9, 0xb2e2, 0x3618, 0xbf76, 0x2654, 0x4555, 0xa5a8, 0x4349, 0xaa9c, 0x41c5, 0x4356, 0x3c41, 0x40c2, 0x085c, 0x40a7, 0xbfba, 0xbae7, 0x42b5, 0x42a0, 0x21d7, 0x420f, 0x1a68, 0x41f7, 0xbfa0, 0x43ab, 0xbf9a, 0x41b4, 0x397b, 0xb23b, 0x1b68, 0x4260, 0xb256, 0x432a, 0xb2b4, 0x44c8, 0xb2cc, 0x409c, 0xbff0, 0x416e, 0xbf13, 0x4312, 0xb0bb, 0x342f, 0x43c9, 0x4107, 0x1a19, 0x223f, 0xabb8, 0x43f4, 0xbf83, 0x2d30, 0x4155, 0x424b, 0xb2b6, 0x4296, 0xb21c, 0x3cca, 0x41fd, 0xba12, 0x424c, 0xbf2e, 0xba38, 0xbacd, 0xa7e7, 0x00be, 0x43f9, 0x1a9f, 0x2f15, 0x1eb0, 0x42c1, 0x4576, 0x418c, 0x4203, 0x1428, 0x1b1a, 0xbaff, 0x430a, 0x41d1, 0x42ee, 0x42d1, 0xb0dc, 0x437a, 0xbf6e, 0x4009, 0xb2f8, 0x43e9, 0x4188, 0x3d63, 0x1f9c, 0xa47d, 0xba6a, 0xbadd, 0x45d4, 0xbfb1, 0xb2bf, 0x1fdf, 0x41c9, 0xbf90, 0xba05, 0xb2e1, 0x4012, 0x4353, 0x438d, 0x462c, 0xb019, 0x41c6, 0x4092, 0xb2dd, 0xb21e, 0xba72, 0x2b0f, 0x401e, 0xba33, 0x0636, 0xb213, 0x3216, 0x41a6, 0xbf99, 0x3934, 0x4290, 0xbff0, 0xba7f, 0x0aa5, 0x1b9d, 0x1b5e, 0xba5d, 0xbfd8, 0x39cd, 0x41ea, 0x427e, 0x42ea, 0xb292, 0xb2c5, 0x422d, 0x413d, 0xba0d, 0xafa1, 0x324a, 0xbf26, 0xb243, 0x1cb1, 0x4017, 0x4430, 0x42ce, 0xbf51, 0xb23e, 0xba00, 0xba27, 0x18b7, 0x4084, 0xb0d7, 0xb229, 0x423c, 0x429e, 0xbad8, 0xba28, 0x430c, 0xb070, 0x4091, 0x4191, 0x4038, 0x436d, 0x4285, 0x41de, 0x4037, 0xbfbb, 0x45a5, 0x1c02, 0x2189, 0x0fae, 0xb25d, 0x1d7c, 0x43ef, 0xa694, 0x10c2, 0xbfc8, 0xba12, 0xad26, 0x1501, 0x41c6, 0x4212, 0x197b, 0x4350, 0x403b, 0xbfe0, 0xb29d, 0x4558, 0x4205, 0x439c, 0x444f, 0xb01c, 0x1e76, 0xb2d5, 0x44f9, 0x46d3, 0x4036, 0x41de, 0xba6d, 0x2a32, 0xbf38, 0x4160, 0xbf37, 0xb0ec, 0xba41, 0xb28f, 0x41f1, 0xbf86, 0x2b4a, 0xb209, 0x4338, 0x1eb8, 0xbf04, 0x4336, 0xb210, 0xb0d2, 0x41de, 0xaa40, 0xb00f, 0xb025, 0x424e, 0x4454, 0x43c9, 0x42c6, 0x4158, 0x42e4, 0xbf22, 0x40d0, 0x40b8, 0xb2cf, 0x1b2e, 0xba36, 0xb2df, 0xbf4e, 0xbad7, 0x4172, 0x41ab, 0x46e0, 0x048d, 0x40d0, 0x42d6, 0x4302, 0xbacf, 0x42b1, 0x30ee, 0xb2ce, 0x43e0, 0x3e75, 0x402b, 0x0cb9, 0xba34, 0x0d88, 0xbfce, 0x0bf1, 0x1510, 0x4316, 0x463d, 0x458e, 0x1925, 0xaec3, 0xbf4c, 0x408b, 0xb08c, 0xb268, 0x4283, 0x410e, 0xbfc8, 0x261d, 0x1efb, 0x4309, 0x43ca, 0x4080, 0x423b, 0x4099, 0x4566, 0x4000, 0x10e8, 0xb20e, 0xba40, 0xbad2, 0x21b3, 0x4310, 0x4023, 0x1c67, 0x418e, 0xa05b, 0x4275, 0xb00a, 0xbf7c, 0x1ae8, 0xba49, 0x1039, 0x438d, 0x435f, 0x40ad, 0xb287, 0x282a, 0xaa2d, 0x427f, 0x42c7, 0x4354, 0x435d, 0x41b9, 0xb06f, 0x46e9, 0xba23, 0x40e8, 0x408d, 0x4013, 0xbf0a, 0x435c, 0x2384, 0x4542, 0xa98c, 0xb20b, 0xb27c, 0xbafa, 0x4303, 0x4097, 0x41f9, 0x42ea, 0x407e, 0x3c9a, 0x4097, 0x4359, 0x1e96, 0x0020, 0x3c97, 0xba3c, 0xb2ff, 0x42ca, 0x4471, 0x4076, 0xb250, 0xbf7e, 0xbfd0, 0xb23f, 0x4365, 0x4638, 0x1d42, 0x21a7, 0x1325, 0x4367, 0xb038, 0x4379, 0x4304, 0x4574, 0x410c, 0xbf8e, 0x23da, 0x40ad, 0xb202, 0x42a5, 0x4321, 0x44f4, 0x1a22, 0xba30, 0x40f6, 0x40a1, 0xa786, 0xb0b2, 0x414a, 0x43cd, 0x42ef, 0x034a, 0xbf3d, 0x4029, 0x463e, 0x0ac8, 0x43f0, 0x1ac0, 0x401e, 0xbaea, 0x0d5e, 0xbfd3, 0xb2a2, 0x42b9, 0xb2ff, 0x4151, 0x42e3, 0x4083, 0x1864, 0x42f9, 0x19ba, 0xb058, 0x1a60, 0xa486, 0x2355, 0x2060, 0xbf0b, 0x42bd, 0x418e, 0x1ceb, 0x4290, 0x1f52, 0x1c67, 0xa739, 0x437c, 0x189e, 0x43e6, 0xbf0f, 0x415d, 0xb208, 0xb267, 0xa399, 0x411f, 0x1954, 0x346b, 0x19f7, 0x43e8, 0x433b, 0x3630, 0xba34, 0xbad2, 0xbf2c, 0xb291, 0x42b5, 0x4102, 0x1bbe, 0x4033, 0x4632, 0x1ffe, 0x436a, 0x4364, 0xbaf1, 0xbf94, 0xb289, 0xb0fc, 0x432a, 0x1ced, 0xba74, 0x2483, 0xbf5b, 0x426c, 0xb207, 0x41d8, 0x4157, 0x42e7, 0x42df, 0xb26e, 0x13cd, 0x4120, 0x1d31, 0xa70b, 0xbff0, 0xb03f, 0xb272, 0x4388, 0x370d, 0x1d74, 0x1ce9, 0x40ee, 0x403b, 0x1c1b, 0xbac0, 0x1007, 0x4008, 0x1996, 0xbf32, 0x1b8b, 0x23d1, 0x4556, 0x1cac, 0xa867, 0x3b4b, 0xb22c, 0x4419, 0xba1d, 0x4384, 0x4038, 0xba49, 0x4173, 0x3e55, 0xba7a, 0x4041, 0x421a, 0x4475, 0x409a, 0xbfd0, 0xb023, 0xb2be, 0xb2b7, 0x46ad, 0x4027, 0xa0cf, 0xbfe1, 0x3b58, 0x4156, 0xb213, 0x4388, 0x4443, 0xb21a, 0x42a6, 0xb2bd, 0xbace, 0x415c, 0x19b0, 0xbf97, 0x0d21, 0x1f02, 0x4133, 0x0a3b, 0xb027, 0x39b7, 0x429d, 0xb2b5, 0x4243, 0x00bf, 0x42a1, 0x45eb, 0xbf99, 0x4124, 0x2790, 0x4250, 0xbae9, 0x1d8c, 0x041e, 0x4222, 0x4243, 0x421a, 0x41e6, 0x1efc, 0x4611, 0xbfd6, 0x1e2d, 0x41a8, 0x4220, 0x42ee, 0x40ae, 0xba77, 0x4177, 0xae2a, 0x4190, 0x43f0, 0x1dc7, 0xb036, 0x464f, 0x4654, 0x4100, 0xbad3, 0x420e, 0x2f13, 0x42c7, 0xb00b, 0x4387, 0x12cc, 0x406e, 0x419b, 0x420e, 0x1e6c, 0x2d42, 0xb24d, 0xbf11, 0x421e, 0x43a3, 0x18d2, 0x3178, 0x4093, 0x42cd, 0x1c0a, 0x4173, 0x1821, 0x1c38, 0x43d8, 0x44e5, 0x4239, 0x13f2, 0xbf11, 0x42df, 0xba20, 0x4020, 0x4190, 0x40d4, 0x438a, 0x403e, 0xb22b, 0x400a, 0x2101, 0x223e, 0x0d56, 0xbf9b, 0x4328, 0xb276, 0xb09a, 0xb229, 0x1c8c, 0x09ad, 0x1cc6, 0x0e1f, 0x43f6, 0x411c, 0x41b2, 0x265b, 0xba5c, 0x0f83, 0x41be, 0x2897, 0xba67, 0x40eb, 0x413c, 0x1c6c, 0x4010, 0x1829, 0x43ce, 0x4292, 0xbf06, 0x4156, 0x43d6, 0x431b, 0xb2e6, 0x4167, 0x0318, 0xbfe0, 0x4224, 0x13e7, 0x4165, 0x4402, 0x41be, 0xa3ad, 0xb22e, 0xba0d, 0x1fae, 0xaf2b, 0x13bb, 0xb299, 0x422d, 0x4113, 0x3fef, 0x41ea, 0x1ebd, 0x12b6, 0x1b80, 0xbf4e, 0xb2f6, 0x33be, 0x4075, 0xbf35, 0xb24b, 0x42fc, 0x4039, 0x18d0, 0x2d6f, 0x1e21, 0x1cd0, 0xba62, 0xab70, 0xa93f, 0xba33, 0xbf92, 0xb23f, 0x41fc, 0x176e, 0x436f, 0x4246, 0x4119, 0x445f, 0xba22, 0xbf60, 0x4075, 0x45da, 0xbf70, 0x4011, 0xb29b, 0x1d67, 0x413f, 0x0a8d, 0x464c, 0xac75, 0x432d, 0xa2cf, 0x0872, 0x18ae, 0x4315, 0xbf66, 0xb249, 0xba19, 0x4074, 0xa674, 0x4009, 0xbf90, 0x4373, 0x4072, 0x1f85, 0x1968, 0x3a9a, 0x1e06, 0x44cd, 0x4152, 0x433c, 0xba71, 0x1835, 0x40bf, 0xbf80, 0x4150, 0xbf05, 0xb241, 0xba5b, 0x41a7, 0x4445, 0x4232, 0xb2c9, 0x418b, 0xb20c, 0x436c, 0x46b9, 0xba16, 0x411b, 0x40d0, 0x1af2, 0xb06c, 0xbf3f, 0x429d, 0x4296, 0xac36, 0x40b1, 0x19f1, 0x1a06, 0x131c, 0x403f, 0x19e2, 0xa234, 0xbf62, 0xba62, 0x2ad5, 0x1b63, 0x4048, 0xb00f, 0xb265, 0xb03b, 0xb2da, 0x17c2, 0xb0c6, 0x1c3e, 0x41c4, 0x42af, 0xbfae, 0x2515, 0xb2e3, 0x42f6, 0x4065, 0x21bc, 0x2a1c, 0x2d3e, 0x43ba, 0x40e0, 0x435e, 0xb24d, 0x0e36, 0x406f, 0x404b, 0x1c48, 0xbf97, 0xbf70, 0x4153, 0xb20f, 0xb25e, 0x43c9, 0x4226, 0x40dd, 0x405c, 0x43cb, 0x0d09, 0x19fa, 0x1d04, 0x430c, 0x4029, 0xb2fa, 0xbf1f, 0x0aa8, 0xb223, 0xb2ca, 0x413f, 0x1b91, 0x36e0, 0x19dc, 0x005f, 0x1420, 0x40fc, 0x439f, 0xbfb3, 0x0279, 0x1824, 0x1879, 0xa189, 0xba14, 0x33bb, 0x4266, 0x0602, 0x41c4, 0xba73, 0x40eb, 0x419b, 0xbfc3, 0x4179, 0x183d, 0x4339, 0x41bb, 0xa7fd, 0xb257, 0x42bf, 0x4551, 0x425d, 0xba0a, 0x1e0f, 0x200a, 0x4204, 0x42ca, 0xa1de, 0x0124, 0x4282, 0x1d1d, 0x411c, 0x18bd, 0x406d, 0xba1f, 0xbad9, 0x0714, 0x421f, 0xbf5f, 0x409f, 0x4317, 0x419c, 0xba34, 0x40e1, 0x1b14, 0xbf21, 0x38e6, 0x1016, 0x4387, 0x42c9, 0x10ca, 0x101a, 0x43e1, 0xb2a6, 0x1c7d, 0x4318, 0xbf49, 0x4573, 0x1e86, 0xb256, 0x40df, 0x43fb, 0xbfd3, 0xa2c5, 0x4175, 0xb22e, 0x18cb, 0x4770, 0xe7fe + ], + StartRegs = [0xff38a7fb, 0x4577c13c, 0xbafd4bd9, 0x608edce2, 0x0b12ce77, 0xdd0d292c, 0xd713d1ca, 0x0199fdd1, 0xee4843e5, 0x33f7a879, 0xf40bded8, 0x113e3e39, 0xfa00e8ce, 0xeb295429, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0xffffffbe, 0x3ffeffff, 0x00001ae0, 0x3ffefffe, 0xc0010000, 0x000000dc, 0xffffffff, 0x00000000, 0xfa00e8ce, 0x5b129380, 0xf40bded8, 0xf40bded8, 0xfa00e8ce, 0x9b2a428a, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0xbae5, 0xb227, 0x44d8, 0x43d3, 0x41d7, 0x40a2, 0x41d7, 0x42f3, 0x42eb, 0xb065, 0x42f8, 0xbfd8, 0x1e0b, 0x4085, 0x4121, 0x4130, 0xbf3d, 0x4042, 0x43f3, 0xa770, 0x4317, 0xb214, 0x4005, 0x2688, 0xb26b, 0x4044, 0x41b2, 0x2c6e, 0x1b18, 0x1d98, 0x1f7c, 0xb0fc, 0x427e, 0xbfa4, 0x0b8c, 0xb2a3, 0x1991, 0x3cc3, 0xa055, 0x1bcb, 0x42a4, 0xaa13, 0xbf8c, 0x400e, 0x1fcd, 0x420e, 0x437f, 0xb009, 0x44e0, 0x40d3, 0x45ad, 0x4242, 0x435b, 0x24d1, 0xa139, 0x3049, 0xba6c, 0x1689, 0x2538, 0x009e, 0x12e4, 0x4226, 0x1db2, 0xa704, 0x41ff, 0xb252, 0xbf25, 0xb201, 0x45a3, 0xb2f1, 0xb06a, 0x10c5, 0x24cf, 0x42ed, 0x4420, 0x40d0, 0xb29b, 0xbf0a, 0x2ff2, 0x46d3, 0xba69, 0x44da, 0x0515, 0xba24, 0xb263, 0x1e73, 0x43ce, 0x4269, 0xbfb0, 0x4322, 0x41e8, 0xb229, 0x1d20, 0x46aa, 0xb2c3, 0x4613, 0x41d9, 0x0ac4, 0x4352, 0x4031, 0x40dd, 0xa769, 0xb008, 0xb09e, 0x29dd, 0xbf87, 0x437b, 0x0284, 0x4337, 0x4224, 0x417f, 0x3e53, 0x44a4, 0x400d, 0x1cf0, 0x4388, 0xbaf0, 0x4181, 0x4399, 0x2de9, 0x1200, 0xbf97, 0x4200, 0x41ea, 0xb0e3, 0x40f6, 0x4436, 0x4077, 0xa2c4, 0xbf6c, 0x1095, 0x1f06, 0x05cd, 0xb2e0, 0x40a7, 0xb0e6, 0x4090, 0xa9ac, 0x1fff, 0x4303, 0xb08d, 0xbad3, 0x413b, 0xbf2a, 0xbae2, 0xbfd0, 0x41d7, 0x437e, 0x42f2, 0xa025, 0x42d1, 0x3ebf, 0x1acc, 0xb28a, 0xa56f, 0x407b, 0x1ffc, 0x4124, 0x400b, 0x41fb, 0x1d4e, 0x40a0, 0xba67, 0x4383, 0x4239, 0x418c, 0x43e7, 0xba5c, 0xb03e, 0x4260, 0x404d, 0xbf8d, 0x1f0c, 0x1e74, 0x4132, 0x41ce, 0x4263, 0xb204, 0x1be7, 0x426d, 0x40ca, 0x408d, 0x4298, 0x183a, 0x1b8f, 0x4063, 0xb207, 0xbf7d, 0x4259, 0x2680, 0x44e4, 0x414f, 0x4390, 0x4218, 0x4111, 0x4477, 0xa2f6, 0xaac4, 0x40f7, 0xb24e, 0x026d, 0x1dae, 0x4296, 0x4151, 0xb0b1, 0x439b, 0x4264, 0x0f33, 0x1cee, 0xba12, 0x4026, 0x32d6, 0xbf26, 0xba1d, 0x4310, 0x1da4, 0xbfa5, 0xa234, 0x4551, 0xba63, 0xad72, 0x38dd, 0x421f, 0x418b, 0x4198, 0xba0c, 0xb063, 0xba67, 0xbf00, 0xa1f0, 0x419d, 0x459e, 0x2726, 0x40c7, 0xbad0, 0x4105, 0x1835, 0x4245, 0x4088, 0x411d, 0x0545, 0x42fa, 0x4549, 0xbf68, 0x0932, 0x3b74, 0x27a2, 0xbad1, 0x403e, 0x1edf, 0x125f, 0x4020, 0xba01, 0xb243, 0x40cc, 0x40c3, 0x431a, 0xba6a, 0x1e8f, 0xb297, 0x3805, 0x4385, 0x3068, 0x1ffa, 0x4568, 0x4240, 0x41c8, 0x449d, 0xbfda, 0x423a, 0x1853, 0xb217, 0xa4c3, 0x4260, 0x41e0, 0x405f, 0x4258, 0x4348, 0xb0ad, 0x407e, 0x42e6, 0x1c88, 0xbafc, 0x4112, 0x42f5, 0xba7c, 0xb200, 0xb243, 0x4050, 0xbf8c, 0x409c, 0x16eb, 0x4324, 0xb26a, 0xb0e0, 0xbf11, 0xba41, 0x4276, 0x3fbd, 0xb227, 0x46f9, 0x4096, 0x4115, 0x428f, 0x4341, 0xba68, 0x430d, 0x439c, 0x0258, 0xb0ac, 0x3247, 0xb2fd, 0x18dc, 0x4196, 0x1bc4, 0xbf69, 0x1fc3, 0x17db, 0x4028, 0x426b, 0xb045, 0x3fc7, 0x403b, 0x42b2, 0x4155, 0x4027, 0x4055, 0x4397, 0x40ca, 0xb2e4, 0xbfe0, 0x4067, 0x4213, 0xb019, 0x42f1, 0x18c4, 0xb26e, 0x2a83, 0x40d4, 0x43a9, 0x3df6, 0xb2d0, 0xbfd0, 0x1aa2, 0xbf38, 0x4283, 0x41a3, 0x4261, 0x07ee, 0x406e, 0x4323, 0x24cd, 0x413d, 0xb2d9, 0x4217, 0x41a7, 0x0450, 0x40e0, 0xb0f8, 0xb2cd, 0xbf6f, 0xa598, 0x36ad, 0xbafa, 0x4247, 0x428c, 0x419b, 0x2ddd, 0x2ff4, 0x42a3, 0x420b, 0x0665, 0xb09f, 0x25aa, 0xb222, 0x424b, 0x41d5, 0x084b, 0xbfdc, 0x448c, 0x1ee0, 0x427a, 0x42ec, 0xb24b, 0xb203, 0x4277, 0x40d6, 0x43b7, 0xbfce, 0x40fd, 0xb05a, 0x443e, 0x4319, 0xaf57, 0x4372, 0xbfb3, 0x0ea7, 0x1c4d, 0xa3d4, 0x4445, 0x424c, 0x0597, 0xb2e2, 0x44bb, 0xba22, 0x448a, 0x40b2, 0x0495, 0x1d64, 0x4227, 0xbaf8, 0xb2eb, 0x40e2, 0x350e, 0x38b4, 0x19de, 0x4351, 0x43d9, 0x4078, 0x0edb, 0x42b0, 0xbf08, 0x07cf, 0x41f1, 0xbff0, 0xbad4, 0x45a0, 0xbae6, 0xb001, 0xbad4, 0x430d, 0x425b, 0xbf6d, 0x0b2e, 0xa8b3, 0xb282, 0xbaff, 0xaf30, 0x0047, 0x18af, 0x2845, 0xbf0a, 0xba43, 0xb2e9, 0x445d, 0x42b1, 0x415c, 0x428b, 0x4305, 0x4298, 0x432a, 0x43ed, 0x142c, 0xab21, 0x4167, 0x211c, 0x4346, 0xbf7f, 0xb0a2, 0xb2a2, 0x23cf, 0xb22b, 0x41d2, 0x4187, 0x3931, 0x1ad7, 0x402b, 0x41d2, 0x4128, 0x0ad0, 0x4170, 0x1dac, 0xba34, 0x402d, 0x40e6, 0x41d2, 0x0a0b, 0x45f2, 0xa738, 0xa730, 0x4076, 0xbf74, 0x44f0, 0x2744, 0x1bf9, 0xbafa, 0xb258, 0xb215, 0xbf9f, 0x46b2, 0xb083, 0xb2d0, 0x18ba, 0xba65, 0x43ee, 0xbfdc, 0x0348, 0xb2a8, 0xbf72, 0x4345, 0x1fa2, 0xb08b, 0x433a, 0xbf14, 0xba2d, 0xbacf, 0x400b, 0xbac3, 0x4203, 0x443c, 0x40e6, 0x1f06, 0x43ab, 0xb2c5, 0xba4f, 0x417d, 0x43b4, 0x4044, 0x1f8a, 0x4299, 0xaa10, 0x183b, 0xbfd4, 0x454a, 0x3c00, 0xb2c6, 0x0d40, 0x411f, 0x4292, 0x11dc, 0xb2e2, 0x422f, 0xb2cc, 0x41f2, 0x438b, 0xbac1, 0x423e, 0x4329, 0x4390, 0xb019, 0x40e1, 0x458c, 0x4305, 0x09ce, 0x4666, 0x4459, 0x46dd, 0x0581, 0x4368, 0x34e4, 0xbf5c, 0xb22a, 0x4199, 0x4330, 0x42e2, 0x46ec, 0x3b8e, 0x2edc, 0x4173, 0x4356, 0x41e0, 0x43ab, 0x0b77, 0x4222, 0x1f4c, 0xba39, 0x407d, 0xb298, 0xb26d, 0x4088, 0xb0b2, 0x4055, 0xbf59, 0x4689, 0xb004, 0x4380, 0x406b, 0x19ab, 0x2018, 0x447c, 0xbf1f, 0x41e0, 0xb24f, 0x406b, 0x2d16, 0x05be, 0x4252, 0x008b, 0x1d45, 0x424b, 0x41fe, 0xb282, 0x4089, 0xbf25, 0xb252, 0x430c, 0xba72, 0x42e9, 0x3df2, 0x4351, 0x40af, 0xbf79, 0x4375, 0x1be2, 0x43b9, 0x28e9, 0xbf08, 0xb203, 0x4201, 0x40b3, 0x0265, 0xb060, 0x4236, 0x41dc, 0xbfe0, 0x1d87, 0x41bf, 0x4040, 0xb27e, 0x0ad0, 0x3812, 0x4141, 0x1d57, 0x43fc, 0x1e44, 0xba47, 0xa9bb, 0xbfbc, 0x414d, 0x4386, 0x1cd0, 0x4445, 0x4014, 0xba62, 0x19ed, 0x41d1, 0xbfbf, 0x41bc, 0xb0d9, 0x42b1, 0xb281, 0x3f21, 0xbf65, 0x409f, 0x4051, 0x004b, 0xba2b, 0x463d, 0xaa52, 0xa84c, 0xb0ec, 0x06ee, 0xa560, 0x463c, 0xb007, 0x2991, 0xb22c, 0xbf80, 0x3632, 0xb296, 0x3c62, 0x43cc, 0x120c, 0x42e2, 0x4030, 0xbfd0, 0x43a0, 0x0c17, 0x3416, 0x4624, 0xaae3, 0xbfd2, 0x454e, 0x430d, 0xba74, 0x41b8, 0x37e3, 0x3b51, 0x411f, 0x4200, 0x437a, 0x1e3e, 0x4098, 0xbf4b, 0x19a0, 0x4544, 0xa8a3, 0x41ec, 0xb0de, 0xbf80, 0x3899, 0x0994, 0x1c6c, 0x42d6, 0xba74, 0x43c6, 0xba20, 0x429d, 0x4010, 0x118b, 0x402c, 0xbf62, 0x42b4, 0x4638, 0x4269, 0x2880, 0xb015, 0x36fd, 0x4179, 0x1d14, 0x46da, 0x1a37, 0x21a6, 0xb0b8, 0xb2a7, 0x1f43, 0xba10, 0x1ea2, 0xba07, 0xb09e, 0x28a5, 0x426e, 0x3bc9, 0x41b8, 0x465e, 0x1cfe, 0xbf72, 0x41e6, 0x1bc3, 0xb04a, 0xbae4, 0x43df, 0x4281, 0x2e57, 0x408f, 0xb08e, 0x4069, 0xbfb0, 0x440a, 0xbfb0, 0xb230, 0xb0f2, 0x45b4, 0x402b, 0xb2e8, 0x4207, 0xbac1, 0x4186, 0xba45, 0x43d8, 0x43b2, 0x42cf, 0x41ad, 0x432d, 0xbf66, 0x401f, 0x43f5, 0x44f8, 0x42af, 0xa978, 0x439a, 0xb2fd, 0xb259, 0xb24a, 0x42b1, 0xba6d, 0x398d, 0x4190, 0x43cf, 0xb2a3, 0xba25, 0x26d9, 0x43db, 0xba1f, 0x1d49, 0x197a, 0xb0bc, 0x40ae, 0xa9b4, 0x3109, 0xbf03, 0x4125, 0x31de, 0x459b, 0xb2e0, 0xba14, 0x41bb, 0x437a, 0x425a, 0x1a58, 0x288b, 0x1d8f, 0xb084, 0x4235, 0x4349, 0x1631, 0x4043, 0x2199, 0x075f, 0xb071, 0x0a46, 0xba55, 0x40a5, 0x26e7, 0xbf00, 0x3d20, 0xa8f9, 0x4025, 0x44c4, 0xbf2a, 0x40eb, 0xba2a, 0xba0b, 0x4115, 0x42c2, 0x1d34, 0xba10, 0xba7c, 0x4079, 0x1b5d, 0xba50, 0x4369, 0x3eba, 0x400b, 0xb0b8, 0xbae1, 0x41f2, 0x43ef, 0x42a4, 0x4559, 0x242c, 0xacb2, 0xad93, 0xbf72, 0x4297, 0x42fc, 0x4269, 0x43b5, 0x1e97, 0x40dc, 0x35e6, 0xbacf, 0x1a73, 0x411a, 0xbae3, 0xbf33, 0xb2b2, 0x34a3, 0x425a, 0x405e, 0x3399, 0x21cc, 0x195d, 0x435e, 0x4099, 0xbfa0, 0xae2f, 0x43d9, 0x0109, 0x4025, 0x4155, 0x4462, 0x1602, 0x43bd, 0x4248, 0x4194, 0x434a, 0xabb9, 0xb2c8, 0xbf4d, 0x413d, 0xba58, 0x03e3, 0x40f5, 0x403c, 0x1598, 0x4265, 0x1f54, 0x4188, 0xb0aa, 0x18e2, 0x4223, 0xbfb0, 0x410b, 0x40f5, 0x1ab4, 0x23b7, 0x19ba, 0xbf7f, 0x18fe, 0x199f, 0x4011, 0x410d, 0x27b0, 0x4339, 0x1d01, 0x2979, 0x31af, 0xa4a3, 0x1dfb, 0x401b, 0x40b7, 0x3d6e, 0xb22d, 0xbf64, 0xb040, 0x3846, 0xbfbf, 0xb24b, 0x41fd, 0x2226, 0x43cf, 0x3af2, 0x4365, 0xb003, 0x4333, 0xaa10, 0x1ca0, 0xb0f2, 0xbf9f, 0x1fed, 0xb09e, 0x41b3, 0x468b, 0x40f3, 0x4398, 0x413c, 0x40b8, 0xb017, 0xb226, 0x43f4, 0x4340, 0x41d7, 0x01f2, 0x4374, 0x410a, 0x28e5, 0xb07f, 0x0cf8, 0x40c0, 0x422f, 0xbfdd, 0x4023, 0x085c, 0xb22c, 0x41c8, 0x4433, 0x45c9, 0x43d7, 0x4378, 0xbf06, 0x4570, 0x40e0, 0xb004, 0xb292, 0x449d, 0x1d73, 0xb24e, 0x4347, 0x4071, 0xb2d4, 0x1aed, 0x43ec, 0x1f32, 0x43e5, 0xa386, 0x3bc4, 0x4418, 0x40d4, 0x4031, 0xbfd5, 0x41f7, 0x401c, 0x41cd, 0x2c18, 0xb04b, 0x43da, 0xbafd, 0x41de, 0x4169, 0x406e, 0x43ee, 0x204a, 0xbf41, 0xbaff, 0x42ab, 0xbac3, 0x4691, 0xb269, 0x188e, 0x4277, 0xbf81, 0x43c8, 0xb223, 0x1dfd, 0x2342, 0x12d6, 0xb254, 0x19ce, 0x359d, 0x4343, 0x1cc8, 0x00c8, 0x26e1, 0xa58f, 0xb2c4, 0x4047, 0x3780, 0x4157, 0x3829, 0xbf48, 0x447c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xf96275eb, 0x02fe41e7, 0xeefa2e22, 0x4b46bc43, 0x003dddf6, 0xa6272337, 0xb656ca8c, 0x7ccb9d65, 0xf8d3063c, 0x09bff66f, 0x1d231647, 0xe7c3d8f9, 0x0fbd2fe9, 0x8a2c763d, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0xffffffd7, 0x00000000, 0xffffe71f, 0x000730c0, 0x000017ea, 0x00001a18, 0x000000e1, 0x00000080, 0xf054250c, 0x00000000, 0x1d231647, 0x00000a54, 0x0d773b53, 0x1d23118b, 0x00000000, 0x800001d0 }, + Instructions = [0xbae5, 0xb227, 0x44d8, 0x43d3, 0x41d7, 0x40a2, 0x41d7, 0x42f3, 0x42eb, 0xb065, 0x42f8, 0xbfd8, 0x1e0b, 0x4085, 0x4121, 0x4130, 0xbf3d, 0x4042, 0x43f3, 0xa770, 0x4317, 0xb214, 0x4005, 0x2688, 0xb26b, 0x4044, 0x41b2, 0x2c6e, 0x1b18, 0x1d98, 0x1f7c, 0xb0fc, 0x427e, 0xbfa4, 0x0b8c, 0xb2a3, 0x1991, 0x3cc3, 0xa055, 0x1bcb, 0x42a4, 0xaa13, 0xbf8c, 0x400e, 0x1fcd, 0x420e, 0x437f, 0xb009, 0x44e0, 0x40d3, 0x45ad, 0x4242, 0x435b, 0x24d1, 0xa139, 0x3049, 0xba6c, 0x1689, 0x2538, 0x009e, 0x12e4, 0x4226, 0x1db2, 0xa704, 0x41ff, 0xb252, 0xbf25, 0xb201, 0x45a3, 0xb2f1, 0xb06a, 0x10c5, 0x24cf, 0x42ed, 0x4420, 0x40d0, 0xb29b, 0xbf0a, 0x2ff2, 0x46d3, 0xba69, 0x44da, 0x0515, 0xba24, 0xb263, 0x1e73, 0x43ce, 0x4269, 0xbfb0, 0x4322, 0x41e8, 0xb229, 0x1d20, 0x46aa, 0xb2c3, 0x4613, 0x41d9, 0x0ac4, 0x4352, 0x4031, 0x40dd, 0xa769, 0xb008, 0xb09e, 0x29dd, 0xbf87, 0x437b, 0x0284, 0x4337, 0x4224, 0x417f, 0x3e53, 0x44a4, 0x400d, 0x1cf0, 0x4388, 0xbaf0, 0x4181, 0x4399, 0x2de9, 0x1200, 0xbf97, 0x4200, 0x41ea, 0xb0e3, 0x40f6, 0x4436, 0x4077, 0xa2c4, 0xbf6c, 0x1095, 0x1f06, 0x05cd, 0xb2e0, 0x40a7, 0xb0e6, 0x4090, 0xa9ac, 0x1fff, 0x4303, 0xb08d, 0xbad3, 0x413b, 0xbf2a, 0xbae2, 0xbfd0, 0x41d7, 0x437e, 0x42f2, 0xa025, 0x42d1, 0x3ebf, 0x1acc, 0xb28a, 0xa56f, 0x407b, 0x1ffc, 0x4124, 0x400b, 0x41fb, 0x1d4e, 0x40a0, 0xba67, 0x4383, 0x4239, 0x418c, 0x43e7, 0xba5c, 0xb03e, 0x4260, 0x404d, 0xbf8d, 0x1f0c, 0x1e74, 0x4132, 0x41ce, 0x4263, 0xb204, 0x1be7, 0x426d, 0x40ca, 0x408d, 0x4298, 0x183a, 0x1b8f, 0x4063, 0xb207, 0xbf7d, 0x4259, 0x2680, 0x44e4, 0x414f, 0x4390, 0x4218, 0x4111, 0x4477, 0xa2f6, 0xaac4, 0x40f7, 0xb24e, 0x026d, 0x1dae, 0x4296, 0x4151, 0xb0b1, 0x439b, 0x4264, 0x0f33, 0x1cee, 0xba12, 0x4026, 0x32d6, 0xbf26, 0xba1d, 0x4310, 0x1da4, 0xbfa5, 0xa234, 0x4551, 0xba63, 0xad72, 0x38dd, 0x421f, 0x418b, 0x4198, 0xba0c, 0xb063, 0xba67, 0xbf00, 0xa1f0, 0x419d, 0x459e, 0x2726, 0x40c7, 0xbad0, 0x4105, 0x1835, 0x4245, 0x4088, 0x411d, 0x0545, 0x42fa, 0x4549, 0xbf68, 0x0932, 0x3b74, 0x27a2, 0xbad1, 0x403e, 0x1edf, 0x125f, 0x4020, 0xba01, 0xb243, 0x40cc, 0x40c3, 0x431a, 0xba6a, 0x1e8f, 0xb297, 0x3805, 0x4385, 0x3068, 0x1ffa, 0x4568, 0x4240, 0x41c8, 0x449d, 0xbfda, 0x423a, 0x1853, 0xb217, 0xa4c3, 0x4260, 0x41e0, 0x405f, 0x4258, 0x4348, 0xb0ad, 0x407e, 0x42e6, 0x1c88, 0xbafc, 0x4112, 0x42f5, 0xba7c, 0xb200, 0xb243, 0x4050, 0xbf8c, 0x409c, 0x16eb, 0x4324, 0xb26a, 0xb0e0, 0xbf11, 0xba41, 0x4276, 0x3fbd, 0xb227, 0x46f9, 0x4096, 0x4115, 0x428f, 0x4341, 0xba68, 0x430d, 0x439c, 0x0258, 0xb0ac, 0x3247, 0xb2fd, 0x18dc, 0x4196, 0x1bc4, 0xbf69, 0x1fc3, 0x17db, 0x4028, 0x426b, 0xb045, 0x3fc7, 0x403b, 0x42b2, 0x4155, 0x4027, 0x4055, 0x4397, 0x40ca, 0xb2e4, 0xbfe0, 0x4067, 0x4213, 0xb019, 0x42f1, 0x18c4, 0xb26e, 0x2a83, 0x40d4, 0x43a9, 0x3df6, 0xb2d0, 0xbfd0, 0x1aa2, 0xbf38, 0x4283, 0x41a3, 0x4261, 0x07ee, 0x406e, 0x4323, 0x24cd, 0x413d, 0xb2d9, 0x4217, 0x41a7, 0x0450, 0x40e0, 0xb0f8, 0xb2cd, 0xbf6f, 0xa598, 0x36ad, 0xbafa, 0x4247, 0x428c, 0x419b, 0x2ddd, 0x2ff4, 0x42a3, 0x420b, 0x0665, 0xb09f, 0x25aa, 0xb222, 0x424b, 0x41d5, 0x084b, 0xbfdc, 0x448c, 0x1ee0, 0x427a, 0x42ec, 0xb24b, 0xb203, 0x4277, 0x40d6, 0x43b7, 0xbfce, 0x40fd, 0xb05a, 0x443e, 0x4319, 0xaf57, 0x4372, 0xbfb3, 0x0ea7, 0x1c4d, 0xa3d4, 0x4445, 0x424c, 0x0597, 0xb2e2, 0x44bb, 0xba22, 0x448a, 0x40b2, 0x0495, 0x1d64, 0x4227, 0xbaf8, 0xb2eb, 0x40e2, 0x350e, 0x38b4, 0x19de, 0x4351, 0x43d9, 0x4078, 0x0edb, 0x42b0, 0xbf08, 0x07cf, 0x41f1, 0xbff0, 0xbad4, 0x45a0, 0xbae6, 0xb001, 0xbad4, 0x430d, 0x425b, 0xbf6d, 0x0b2e, 0xa8b3, 0xb282, 0xbaff, 0xaf30, 0x0047, 0x18af, 0x2845, 0xbf0a, 0xba43, 0xb2e9, 0x445d, 0x42b1, 0x415c, 0x428b, 0x4305, 0x4298, 0x432a, 0x43ed, 0x142c, 0xab21, 0x4167, 0x211c, 0x4346, 0xbf7f, 0xb0a2, 0xb2a2, 0x23cf, 0xb22b, 0x41d2, 0x4187, 0x3931, 0x1ad7, 0x402b, 0x41d2, 0x4128, 0x0ad0, 0x4170, 0x1dac, 0xba34, 0x402d, 0x40e6, 0x41d2, 0x0a0b, 0x45f2, 0xa738, 0xa730, 0x4076, 0xbf74, 0x44f0, 0x2744, 0x1bf9, 0xbafa, 0xb258, 0xb215, 0xbf9f, 0x46b2, 0xb083, 0xb2d0, 0x18ba, 0xba65, 0x43ee, 0xbfdc, 0x0348, 0xb2a8, 0xbf72, 0x4345, 0x1fa2, 0xb08b, 0x433a, 0xbf14, 0xba2d, 0xbacf, 0x400b, 0xbac3, 0x4203, 0x443c, 0x40e6, 0x1f06, 0x43ab, 0xb2c5, 0xba4f, 0x417d, 0x43b4, 0x4044, 0x1f8a, 0x4299, 0xaa10, 0x183b, 0xbfd4, 0x454a, 0x3c00, 0xb2c6, 0x0d40, 0x411f, 0x4292, 0x11dc, 0xb2e2, 0x422f, 0xb2cc, 0x41f2, 0x438b, 0xbac1, 0x423e, 0x4329, 0x4390, 0xb019, 0x40e1, 0x458c, 0x4305, 0x09ce, 0x4666, 0x4459, 0x46dd, 0x0581, 0x4368, 0x34e4, 0xbf5c, 0xb22a, 0x4199, 0x4330, 0x42e2, 0x46ec, 0x3b8e, 0x2edc, 0x4173, 0x4356, 0x41e0, 0x43ab, 0x0b77, 0x4222, 0x1f4c, 0xba39, 0x407d, 0xb298, 0xb26d, 0x4088, 0xb0b2, 0x4055, 0xbf59, 0x4689, 0xb004, 0x4380, 0x406b, 0x19ab, 0x2018, 0x447c, 0xbf1f, 0x41e0, 0xb24f, 0x406b, 0x2d16, 0x05be, 0x4252, 0x008b, 0x1d45, 0x424b, 0x41fe, 0xb282, 0x4089, 0xbf25, 0xb252, 0x430c, 0xba72, 0x42e9, 0x3df2, 0x4351, 0x40af, 0xbf79, 0x4375, 0x1be2, 0x43b9, 0x28e9, 0xbf08, 0xb203, 0x4201, 0x40b3, 0x0265, 0xb060, 0x4236, 0x41dc, 0xbfe0, 0x1d87, 0x41bf, 0x4040, 0xb27e, 0x0ad0, 0x3812, 0x4141, 0x1d57, 0x43fc, 0x1e44, 0xba47, 0xa9bb, 0xbfbc, 0x414d, 0x4386, 0x1cd0, 0x4445, 0x4014, 0xba62, 0x19ed, 0x41d1, 0xbfbf, 0x41bc, 0xb0d9, 0x42b1, 0xb281, 0x3f21, 0xbf65, 0x409f, 0x4051, 0x004b, 0xba2b, 0x463d, 0xaa52, 0xa84c, 0xb0ec, 0x06ee, 0xa560, 0x463c, 0xb007, 0x2991, 0xb22c, 0xbf80, 0x3632, 0xb296, 0x3c62, 0x43cc, 0x120c, 0x42e2, 0x4030, 0xbfd0, 0x43a0, 0x0c17, 0x3416, 0x4624, 0xaae3, 0xbfd2, 0x454e, 0x430d, 0xba74, 0x41b8, 0x37e3, 0x3b51, 0x411f, 0x4200, 0x437a, 0x1e3e, 0x4098, 0xbf4b, 0x19a0, 0x4544, 0xa8a3, 0x41ec, 0xb0de, 0xbf80, 0x3899, 0x0994, 0x1c6c, 0x42d6, 0xba74, 0x43c6, 0xba20, 0x429d, 0x4010, 0x118b, 0x402c, 0xbf62, 0x42b4, 0x4638, 0x4269, 0x2880, 0xb015, 0x36fd, 0x4179, 0x1d14, 0x46da, 0x1a37, 0x21a6, 0xb0b8, 0xb2a7, 0x1f43, 0xba10, 0x1ea2, 0xba07, 0xb09e, 0x28a5, 0x426e, 0x3bc9, 0x41b8, 0x465e, 0x1cfe, 0xbf72, 0x41e6, 0x1bc3, 0xb04a, 0xbae4, 0x43df, 0x4281, 0x2e57, 0x408f, 0xb08e, 0x4069, 0xbfb0, 0x440a, 0xbfb0, 0xb230, 0xb0f2, 0x45b4, 0x402b, 0xb2e8, 0x4207, 0xbac1, 0x4186, 0xba45, 0x43d8, 0x43b2, 0x42cf, 0x41ad, 0x432d, 0xbf66, 0x401f, 0x43f5, 0x44f8, 0x42af, 0xa978, 0x439a, 0xb2fd, 0xb259, 0xb24a, 0x42b1, 0xba6d, 0x398d, 0x4190, 0x43cf, 0xb2a3, 0xba25, 0x26d9, 0x43db, 0xba1f, 0x1d49, 0x197a, 0xb0bc, 0x40ae, 0xa9b4, 0x3109, 0xbf03, 0x4125, 0x31de, 0x459b, 0xb2e0, 0xba14, 0x41bb, 0x437a, 0x425a, 0x1a58, 0x288b, 0x1d8f, 0xb084, 0x4235, 0x4349, 0x1631, 0x4043, 0x2199, 0x075f, 0xb071, 0x0a46, 0xba55, 0x40a5, 0x26e7, 0xbf00, 0x3d20, 0xa8f9, 0x4025, 0x44c4, 0xbf2a, 0x40eb, 0xba2a, 0xba0b, 0x4115, 0x42c2, 0x1d34, 0xba10, 0xba7c, 0x4079, 0x1b5d, 0xba50, 0x4369, 0x3eba, 0x400b, 0xb0b8, 0xbae1, 0x41f2, 0x43ef, 0x42a4, 0x4559, 0x242c, 0xacb2, 0xad93, 0xbf72, 0x4297, 0x42fc, 0x4269, 0x43b5, 0x1e97, 0x40dc, 0x35e6, 0xbacf, 0x1a73, 0x411a, 0xbae3, 0xbf33, 0xb2b2, 0x34a3, 0x425a, 0x405e, 0x3399, 0x21cc, 0x195d, 0x435e, 0x4099, 0xbfa0, 0xae2f, 0x43d9, 0x0109, 0x4025, 0x4155, 0x4462, 0x1602, 0x43bd, 0x4248, 0x4194, 0x434a, 0xabb9, 0xb2c8, 0xbf4d, 0x413d, 0xba58, 0x03e3, 0x40f5, 0x403c, 0x1598, 0x4265, 0x1f54, 0x4188, 0xb0aa, 0x18e2, 0x4223, 0xbfb0, 0x410b, 0x40f5, 0x1ab4, 0x23b7, 0x19ba, 0xbf7f, 0x18fe, 0x199f, 0x4011, 0x410d, 0x27b0, 0x4339, 0x1d01, 0x2979, 0x31af, 0xa4a3, 0x1dfb, 0x401b, 0x40b7, 0x3d6e, 0xb22d, 0xbf64, 0xb040, 0x3846, 0xbfbf, 0xb24b, 0x41fd, 0x2226, 0x43cf, 0x3af2, 0x4365, 0xb003, 0x4333, 0xaa10, 0x1ca0, 0xb0f2, 0xbf9f, 0x1fed, 0xb09e, 0x41b3, 0x468b, 0x40f3, 0x4398, 0x413c, 0x40b8, 0xb017, 0xb226, 0x43f4, 0x4340, 0x41d7, 0x01f2, 0x4374, 0x410a, 0x28e5, 0xb07f, 0x0cf8, 0x40c0, 0x422f, 0xbfdd, 0x4023, 0x085c, 0xb22c, 0x41c8, 0x4433, 0x45c9, 0x43d7, 0x4378, 0xbf06, 0x4570, 0x40e0, 0xb004, 0xb292, 0x449d, 0x1d73, 0xb24e, 0x4347, 0x4071, 0xb2d4, 0x1aed, 0x43ec, 0x1f32, 0x43e5, 0xa386, 0x3bc4, 0x4418, 0x40d4, 0x4031, 0xbfd5, 0x41f7, 0x401c, 0x41cd, 0x2c18, 0xb04b, 0x43da, 0xbafd, 0x41de, 0x4169, 0x406e, 0x43ee, 0x204a, 0xbf41, 0xbaff, 0x42ab, 0xbac3, 0x4691, 0xb269, 0x188e, 0x4277, 0xbf81, 0x43c8, 0xb223, 0x1dfd, 0x2342, 0x12d6, 0xb254, 0x19ce, 0x359d, 0x4343, 0x1cc8, 0x00c8, 0x26e1, 0xa58f, 0xb2c4, 0x4047, 0x3780, 0x4157, 0x3829, 0xbf48, 0x447c, 0x4770, 0xe7fe + ], + StartRegs = [0xf96275eb, 0x02fe41e7, 0xeefa2e22, 0x4b46bc43, 0x003dddf6, 0xa6272337, 0xb656ca8c, 0x7ccb9d65, 0xf8d3063c, 0x09bff66f, 0x1d231647, 0xe7c3d8f9, 0x0fbd2fe9, 0x8a2c763d, 0x00000000, 0x900001f0 + ], + FinalRegs = [0xffffffd7, 0x00000000, 0xffffe71f, 0x000730c0, 0x000017ea, 0x00001a18, 0x000000e1, 0x00000080, 0xf054250c, 0x00000000, 0x1d231647, 0x00000a54, 0x0d773b53, 0x1d23118b, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x409f, 0x4371, 0x4362, 0xb217, 0xbf00, 0x43fa, 0xbf8c, 0x18bb, 0x42a0, 0xba1a, 0xada9, 0x403c, 0x00d4, 0xbf02, 0xb01d, 0x43d0, 0xb264, 0xb2aa, 0xb0dd, 0x425d, 0x1dc1, 0x0378, 0xb072, 0x1d92, 0x2fa8, 0x4140, 0x40ac, 0x4620, 0x0a08, 0x42a6, 0xba07, 0xbafe, 0x4171, 0x40c2, 0x4376, 0x41db, 0x40e1, 0x4305, 0xbf97, 0x14b7, 0xba36, 0x4393, 0x1f2f, 0x4483, 0xbf46, 0x2407, 0xba63, 0x4096, 0x4103, 0x4650, 0x2684, 0x41aa, 0x4377, 0x43fc, 0x11ca, 0x4595, 0x3398, 0x43ef, 0x4634, 0x436d, 0xb060, 0x0ea8, 0xb2b5, 0x2045, 0x43ef, 0x46a4, 0x40b6, 0x40bd, 0x127f, 0x290e, 0x4087, 0x422c, 0x1856, 0xbf8c, 0x4065, 0x3e07, 0xb004, 0x44ec, 0xbf4c, 0x193a, 0xbaf4, 0xafa0, 0xb2c6, 0x406a, 0x1865, 0xbfc0, 0x19b2, 0x43d6, 0x1b78, 0xb039, 0x407a, 0x4163, 0x411a, 0x1d8c, 0x04e2, 0x1988, 0xb215, 0x40a0, 0x13bd, 0x38a5, 0xb2ce, 0x403b, 0x4291, 0x0562, 0x4680, 0x402c, 0xbf2e, 0x409c, 0xbaf0, 0x433f, 0xa329, 0x4031, 0x3824, 0x403f, 0xb2c0, 0x428b, 0x0991, 0x4153, 0x3e46, 0x4097, 0x2e7d, 0x05f3, 0xb2ee, 0xbade, 0x2267, 0xba3a, 0x198c, 0xbf6d, 0x461a, 0x337e, 0x43f0, 0xb225, 0x42a7, 0xb2ab, 0x45f3, 0x1f4b, 0x421a, 0xbac9, 0xbf47, 0x42c3, 0x44b4, 0x1c39, 0x0574, 0x4051, 0x4010, 0xb20e, 0xb2b3, 0x4575, 0x2bae, 0x1821, 0x366d, 0xb273, 0xb237, 0xbf4e, 0x425c, 0x4340, 0x191e, 0xbaf4, 0xbadf, 0x1a8b, 0x118f, 0xbfb0, 0x1ee0, 0x0041, 0xbfd9, 0xa940, 0xba2a, 0x4389, 0xba3a, 0x410e, 0xb03c, 0xba6a, 0x0b96, 0xb2d5, 0x1cb5, 0x026c, 0x4176, 0x1c59, 0x43d8, 0xb291, 0x3bf6, 0x1cff, 0x0650, 0xb2f6, 0x4348, 0x460d, 0x411d, 0x413c, 0x42fe, 0x0242, 0x415c, 0x088e, 0xbfb4, 0x136d, 0x2a54, 0x4183, 0xb2ae, 0x4457, 0xb0ff, 0x2d0f, 0x1f2b, 0x437a, 0x2ba1, 0xbfb4, 0x439e, 0x4196, 0x43e3, 0xb23e, 0x1be7, 0x4181, 0x4250, 0xbfd0, 0x413d, 0xbf80, 0x4289, 0xb058, 0xbac1, 0x432b, 0x40b4, 0xbf8a, 0x400d, 0x236d, 0x42a4, 0xa46c, 0xb053, 0x2598, 0x015b, 0x0966, 0x4335, 0xb29d, 0xbf51, 0x4185, 0xb2f6, 0xac2b, 0xb2fa, 0x3432, 0x4628, 0x2d72, 0xb053, 0xa1e1, 0x059e, 0xb225, 0x42e2, 0x4383, 0x400f, 0x42bc, 0x190e, 0x4094, 0x43f7, 0xb245, 0x403e, 0x41b3, 0x419d, 0xbf65, 0x4045, 0xb013, 0x417b, 0x0ea0, 0xaf84, 0x42d0, 0xb228, 0x40f7, 0xba01, 0xbfc0, 0xb2d9, 0x1dc9, 0xbfc6, 0x1aca, 0x4375, 0x1b51, 0x1f9c, 0x1b0a, 0x0661, 0x447e, 0x436a, 0x4051, 0xad93, 0x41b5, 0x4213, 0x006d, 0x40da, 0x4619, 0x42d5, 0xbaf4, 0xaabe, 0xbf70, 0x38e2, 0xbf8b, 0x40ce, 0xb21f, 0xbfd0, 0xb24e, 0xab0e, 0xbae3, 0xb25d, 0xb2c7, 0x443c, 0x42f8, 0x4173, 0x420a, 0xb2d7, 0x42dc, 0xb283, 0xa7ba, 0xbfb0, 0x4074, 0xb2d4, 0xbfb2, 0x40b8, 0x40bb, 0x1964, 0x40ff, 0x43e7, 0x4290, 0xb26c, 0xb226, 0x240c, 0xb090, 0x4321, 0xb26b, 0x4234, 0xba39, 0xba20, 0x40e5, 0x4153, 0x0199, 0xb262, 0x0485, 0x40f7, 0x2228, 0xbfe0, 0x4241, 0x4287, 0x4352, 0xb233, 0x1f2a, 0xbf07, 0xb0fb, 0x19b1, 0x3a72, 0x41c3, 0x1d5c, 0x0cfd, 0xbf90, 0xb293, 0xbaca, 0xbf6d, 0xba19, 0xb06f, 0x2275, 0xb246, 0xae73, 0x405f, 0xb247, 0x40c7, 0x1cb3, 0xb2ef, 0x4125, 0x413d, 0x1e18, 0x28fe, 0xb0a7, 0xb0af, 0xbfb5, 0xba0e, 0x40ee, 0x41f1, 0x424b, 0x4308, 0x17c4, 0xb00a, 0x42ff, 0xbf49, 0x21f1, 0x409f, 0x43b7, 0x1990, 0xbfa6, 0x4602, 0x1a37, 0xb28e, 0x4223, 0x401b, 0x0ee5, 0x4382, 0x4017, 0xba24, 0x402e, 0x4220, 0x41a7, 0x411b, 0xb2e5, 0x42f2, 0x41f2, 0xb247, 0xbf90, 0x430e, 0x2206, 0x3b7b, 0x4253, 0x4376, 0x4017, 0xba4d, 0x4257, 0xbf28, 0xb2a0, 0x4194, 0x42b6, 0x1919, 0x40c2, 0x467a, 0x4374, 0xb2cd, 0x1d2c, 0x4462, 0x40d7, 0x402a, 0xba75, 0xb0f9, 0x44c0, 0x428a, 0x3166, 0x0ecd, 0xbf07, 0x0e7f, 0xb03c, 0xb023, 0x416d, 0x4106, 0xba15, 0x072f, 0x1f48, 0x1d5c, 0x45b6, 0x3b35, 0x4003, 0xbff0, 0x3519, 0x4268, 0x40a9, 0x4364, 0x40a1, 0x412e, 0x4393, 0x462b, 0xa299, 0x2497, 0xb286, 0xacdc, 0xb027, 0xbf70, 0xbaee, 0xb213, 0xbf5c, 0xb00c, 0x4376, 0x4541, 0x33d7, 0x41d9, 0x43a6, 0x2c34, 0x44fc, 0xb001, 0x05ac, 0x40d4, 0x4201, 0x2dc1, 0xbaf3, 0xb201, 0xba73, 0x1f51, 0xb20a, 0x43ab, 0x4100, 0x4389, 0xba77, 0xbf3f, 0xa8c2, 0xba34, 0x41ce, 0x43fa, 0xb059, 0x46db, 0xbf7f, 0xb2e4, 0x43d5, 0xba10, 0x41c4, 0xbad6, 0x41df, 0x1918, 0x4117, 0x117b, 0xbf00, 0x42ed, 0x442e, 0x4229, 0x4393, 0x422e, 0xba58, 0x4058, 0xb270, 0xba2f, 0x40a7, 0x36a0, 0x405b, 0x2f9e, 0xbfb9, 0x41df, 0x4201, 0x3389, 0x405f, 0xa198, 0x43f0, 0x4151, 0x410c, 0x2c84, 0x2f92, 0x4206, 0xba04, 0x462b, 0xbf1a, 0x41eb, 0x2a6c, 0x4245, 0xa394, 0xb28e, 0xb24e, 0x04f0, 0x46e1, 0x42b3, 0xb03f, 0x30ef, 0x1d17, 0xbaec, 0xb2f8, 0x4168, 0x1b83, 0xbfac, 0x2cce, 0x4159, 0xb227, 0x45a2, 0x43d6, 0x43ca, 0x4124, 0xbf07, 0x0220, 0x40f0, 0x4201, 0xb224, 0x32db, 0x4340, 0x4145, 0x42c3, 0xbfa0, 0xb2e1, 0x42ee, 0xb0ed, 0x40e9, 0x414b, 0x42bd, 0x4555, 0x09ca, 0xb076, 0x1fcf, 0x09e5, 0xaf80, 0xb209, 0x40f0, 0xb04a, 0x4015, 0x41b1, 0x0408, 0xbfa8, 0x177c, 0xbf60, 0x41f9, 0x4251, 0xbf1f, 0x464a, 0xbf70, 0xba33, 0x425c, 0x4233, 0x454e, 0x4374, 0xbadb, 0x4105, 0x431b, 0x32b3, 0xb042, 0xb242, 0x4357, 0x28d3, 0x20b8, 0x2d3a, 0xba3a, 0xba75, 0x409b, 0xb2e3, 0x2cf2, 0x4078, 0xb257, 0xbf55, 0x427d, 0xb29a, 0xbad7, 0xbff0, 0x4207, 0x3766, 0x1fff, 0x1e14, 0x3528, 0x41c9, 0x27a9, 0x4114, 0x44f8, 0x18b7, 0x1c48, 0x4278, 0x2785, 0x1db7, 0x4473, 0x41f3, 0x18f7, 0x2d3c, 0xbfd8, 0x1c68, 0x402d, 0x43db, 0x4017, 0xb049, 0x401a, 0xba2f, 0xb090, 0x4558, 0x42e2, 0xba3b, 0x444c, 0xb01f, 0xad32, 0x4391, 0xbafc, 0xbf18, 0x418c, 0xb224, 0xb2bd, 0x1d32, 0x4076, 0xac73, 0x3419, 0x4128, 0x435b, 0x44bb, 0x42ed, 0xba33, 0xaaf8, 0xba11, 0xbf80, 0xb04f, 0x4253, 0x3fd6, 0x43df, 0xba71, 0xb255, 0xbf23, 0xbad5, 0xb01d, 0x4054, 0x4178, 0x4213, 0xbad9, 0xbf5f, 0x43e8, 0xb204, 0x45bd, 0x311b, 0x4286, 0xb261, 0x2ba0, 0x1a16, 0xb042, 0x4417, 0x1915, 0x4220, 0x429f, 0x4223, 0x41b3, 0xbac5, 0xb06a, 0x1b2c, 0x1452, 0xbf74, 0xb251, 0x423d, 0x1d7d, 0x43f3, 0xba14, 0x230c, 0x41e8, 0x436a, 0xb2c1, 0x40fd, 0x413f, 0x420a, 0xb2dd, 0xb28c, 0x46a5, 0xb291, 0xb2ee, 0x1f83, 0xb2e8, 0xb2cf, 0xa1bd, 0xb0c7, 0x1ba4, 0xbae4, 0x425a, 0x41f3, 0xb04b, 0xbfdc, 0x0f78, 0xba29, 0xb0e8, 0x42c9, 0xb291, 0xba18, 0x432b, 0xbfac, 0x4109, 0xab55, 0x436f, 0x4349, 0x4132, 0x41d9, 0xb240, 0x4227, 0x43c5, 0x403c, 0x1d71, 0x4182, 0x403c, 0x40e0, 0x4077, 0xb27b, 0x45bc, 0xa153, 0xb017, 0x429e, 0x42ee, 0x4453, 0x4064, 0xb0c1, 0xbf43, 0x0c27, 0x0f14, 0x3796, 0x433a, 0xad1c, 0xb27f, 0x431e, 0x1f68, 0xbf00, 0x3852, 0x43b8, 0x32f1, 0x4380, 0x1ec3, 0x1500, 0xa820, 0xa8b8, 0xbf73, 0xb28d, 0xac37, 0x1ab0, 0x0759, 0xaf00, 0xb28d, 0x40e7, 0x4314, 0xbaf9, 0xb05d, 0x33b3, 0x372a, 0x430c, 0x421d, 0x432d, 0xbfc7, 0x14a2, 0xba0b, 0x2f72, 0x45d5, 0x40da, 0xbf94, 0x4398, 0xb2c2, 0x10af, 0xba46, 0xaedb, 0x41ed, 0xba66, 0xba70, 0xb28d, 0x4130, 0x4106, 0x225a, 0x42d1, 0xba7f, 0xb07b, 0x41f3, 0x18bc, 0xa31f, 0x1c7e, 0x2979, 0xb267, 0x430c, 0xbfb3, 0x4005, 0x45b6, 0x1d0a, 0xb29c, 0xbfe8, 0x413f, 0x4212, 0x1a6c, 0xb2cd, 0x41a3, 0x1b19, 0xad5e, 0xba4a, 0x155b, 0x0e84, 0x4041, 0x43fc, 0x41ac, 0xba0c, 0x41ab, 0x38f2, 0x43c9, 0x1f49, 0xb006, 0xb218, 0x0657, 0x0076, 0xb071, 0xb292, 0xbf33, 0x42d9, 0x419a, 0x430a, 0x40d0, 0x43ed, 0xae7a, 0xba09, 0x1dee, 0x4172, 0xbac3, 0x40b6, 0x418f, 0x4102, 0xba3a, 0xb255, 0xa8b8, 0x28b4, 0xbf2a, 0xbac3, 0x46b3, 0xb029, 0x402b, 0x18ac, 0x14fb, 0xbf26, 0x42ff, 0x4545, 0x413c, 0x43f9, 0xb099, 0xb2ea, 0xa112, 0x4037, 0xac7a, 0x42d3, 0xb2d3, 0x4136, 0xba7d, 0x4081, 0x40fb, 0x4421, 0x41ea, 0x46eb, 0x43d5, 0x1956, 0x3dd2, 0x1e1c, 0x4323, 0x1833, 0xb0c3, 0x4267, 0x428e, 0xbad9, 0xbfb5, 0x1cb6, 0x4248, 0x42b6, 0x19fb, 0xb0a6, 0x1a7f, 0xba5a, 0x1a28, 0x4446, 0x4207, 0x3fd4, 0x4119, 0x4069, 0xb215, 0xa19b, 0x4392, 0xbaef, 0xb2de, 0x1c2a, 0x46f5, 0xbf73, 0x4286, 0xbff0, 0x4006, 0xb279, 0xb27f, 0x428e, 0x416f, 0x411a, 0xbfd8, 0x0c5e, 0x444e, 0x43c3, 0x156d, 0x4175, 0xb2fb, 0x3877, 0xb2d7, 0x400a, 0x4429, 0x38fe, 0xb27a, 0x1868, 0x429f, 0xb0d5, 0x1515, 0x42ce, 0x45a1, 0x43e7, 0xbf55, 0xba1e, 0x4365, 0x1d96, 0x42fc, 0x43f5, 0x41ed, 0x4020, 0x4390, 0x1fa2, 0xbfd6, 0xb25f, 0x4128, 0x43ad, 0x1f47, 0x4373, 0x41e2, 0x4040, 0x4102, 0xad91, 0xb2ea, 0x4064, 0x44f9, 0x1cc9, 0x42d0, 0x2e1d, 0xb094, 0xbad1, 0xb0bd, 0x4144, 0x4074, 0xbfa0, 0x00b7, 0x4556, 0xb21d, 0xba47, 0x42e0, 0xb0fb, 0xbfcd, 0x193b, 0x4266, 0xb230, 0x41ec, 0x4271, 0x416e, 0xa323, 0x4225, 0xa208, 0x4057, 0x356c, 0x2a9d, 0x0db2, 0xbfc1, 0x19d8, 0x4242, 0x4240, 0x41eb, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x1ecc668c, 0x2e9c60ff, 0x9990f0ee, 0xf1a38886, 0x3f294482, 0xc54ff2ce, 0x36359d5d, 0x6e0e101b, 0xc58ac456, 0x564992fe, 0xcc932f92, 0x05cbf818, 0x7c022c30, 0xc34238ff, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0xffffcfb8, 0xc342cf05, 0xffffcfb8, 0x80000185, 0xc342cf05, 0x000013a4, 0x3cbd4433, 0x000017f0, 0x0000138c, 0xc34266a3, 0xcc932f92, 0x00000371, 0xc3424f05, 0xfffffb7c, 0x00000000, 0x200001d0 }, + Instructions = [0x409f, 0x4371, 0x4362, 0xb217, 0xbf00, 0x43fa, 0xbf8c, 0x18bb, 0x42a0, 0xba1a, 0xada9, 0x403c, 0x00d4, 0xbf02, 0xb01d, 0x43d0, 0xb264, 0xb2aa, 0xb0dd, 0x425d, 0x1dc1, 0x0378, 0xb072, 0x1d92, 0x2fa8, 0x4140, 0x40ac, 0x4620, 0x0a08, 0x42a6, 0xba07, 0xbafe, 0x4171, 0x40c2, 0x4376, 0x41db, 0x40e1, 0x4305, 0xbf97, 0x14b7, 0xba36, 0x4393, 0x1f2f, 0x4483, 0xbf46, 0x2407, 0xba63, 0x4096, 0x4103, 0x4650, 0x2684, 0x41aa, 0x4377, 0x43fc, 0x11ca, 0x4595, 0x3398, 0x43ef, 0x4634, 0x436d, 0xb060, 0x0ea8, 0xb2b5, 0x2045, 0x43ef, 0x46a4, 0x40b6, 0x40bd, 0x127f, 0x290e, 0x4087, 0x422c, 0x1856, 0xbf8c, 0x4065, 0x3e07, 0xb004, 0x44ec, 0xbf4c, 0x193a, 0xbaf4, 0xafa0, 0xb2c6, 0x406a, 0x1865, 0xbfc0, 0x19b2, 0x43d6, 0x1b78, 0xb039, 0x407a, 0x4163, 0x411a, 0x1d8c, 0x04e2, 0x1988, 0xb215, 0x40a0, 0x13bd, 0x38a5, 0xb2ce, 0x403b, 0x4291, 0x0562, 0x4680, 0x402c, 0xbf2e, 0x409c, 0xbaf0, 0x433f, 0xa329, 0x4031, 0x3824, 0x403f, 0xb2c0, 0x428b, 0x0991, 0x4153, 0x3e46, 0x4097, 0x2e7d, 0x05f3, 0xb2ee, 0xbade, 0x2267, 0xba3a, 0x198c, 0xbf6d, 0x461a, 0x337e, 0x43f0, 0xb225, 0x42a7, 0xb2ab, 0x45f3, 0x1f4b, 0x421a, 0xbac9, 0xbf47, 0x42c3, 0x44b4, 0x1c39, 0x0574, 0x4051, 0x4010, 0xb20e, 0xb2b3, 0x4575, 0x2bae, 0x1821, 0x366d, 0xb273, 0xb237, 0xbf4e, 0x425c, 0x4340, 0x191e, 0xbaf4, 0xbadf, 0x1a8b, 0x118f, 0xbfb0, 0x1ee0, 0x0041, 0xbfd9, 0xa940, 0xba2a, 0x4389, 0xba3a, 0x410e, 0xb03c, 0xba6a, 0x0b96, 0xb2d5, 0x1cb5, 0x026c, 0x4176, 0x1c59, 0x43d8, 0xb291, 0x3bf6, 0x1cff, 0x0650, 0xb2f6, 0x4348, 0x460d, 0x411d, 0x413c, 0x42fe, 0x0242, 0x415c, 0x088e, 0xbfb4, 0x136d, 0x2a54, 0x4183, 0xb2ae, 0x4457, 0xb0ff, 0x2d0f, 0x1f2b, 0x437a, 0x2ba1, 0xbfb4, 0x439e, 0x4196, 0x43e3, 0xb23e, 0x1be7, 0x4181, 0x4250, 0xbfd0, 0x413d, 0xbf80, 0x4289, 0xb058, 0xbac1, 0x432b, 0x40b4, 0xbf8a, 0x400d, 0x236d, 0x42a4, 0xa46c, 0xb053, 0x2598, 0x015b, 0x0966, 0x4335, 0xb29d, 0xbf51, 0x4185, 0xb2f6, 0xac2b, 0xb2fa, 0x3432, 0x4628, 0x2d72, 0xb053, 0xa1e1, 0x059e, 0xb225, 0x42e2, 0x4383, 0x400f, 0x42bc, 0x190e, 0x4094, 0x43f7, 0xb245, 0x403e, 0x41b3, 0x419d, 0xbf65, 0x4045, 0xb013, 0x417b, 0x0ea0, 0xaf84, 0x42d0, 0xb228, 0x40f7, 0xba01, 0xbfc0, 0xb2d9, 0x1dc9, 0xbfc6, 0x1aca, 0x4375, 0x1b51, 0x1f9c, 0x1b0a, 0x0661, 0x447e, 0x436a, 0x4051, 0xad93, 0x41b5, 0x4213, 0x006d, 0x40da, 0x4619, 0x42d5, 0xbaf4, 0xaabe, 0xbf70, 0x38e2, 0xbf8b, 0x40ce, 0xb21f, 0xbfd0, 0xb24e, 0xab0e, 0xbae3, 0xb25d, 0xb2c7, 0x443c, 0x42f8, 0x4173, 0x420a, 0xb2d7, 0x42dc, 0xb283, 0xa7ba, 0xbfb0, 0x4074, 0xb2d4, 0xbfb2, 0x40b8, 0x40bb, 0x1964, 0x40ff, 0x43e7, 0x4290, 0xb26c, 0xb226, 0x240c, 0xb090, 0x4321, 0xb26b, 0x4234, 0xba39, 0xba20, 0x40e5, 0x4153, 0x0199, 0xb262, 0x0485, 0x40f7, 0x2228, 0xbfe0, 0x4241, 0x4287, 0x4352, 0xb233, 0x1f2a, 0xbf07, 0xb0fb, 0x19b1, 0x3a72, 0x41c3, 0x1d5c, 0x0cfd, 0xbf90, 0xb293, 0xbaca, 0xbf6d, 0xba19, 0xb06f, 0x2275, 0xb246, 0xae73, 0x405f, 0xb247, 0x40c7, 0x1cb3, 0xb2ef, 0x4125, 0x413d, 0x1e18, 0x28fe, 0xb0a7, 0xb0af, 0xbfb5, 0xba0e, 0x40ee, 0x41f1, 0x424b, 0x4308, 0x17c4, 0xb00a, 0x42ff, 0xbf49, 0x21f1, 0x409f, 0x43b7, 0x1990, 0xbfa6, 0x4602, 0x1a37, 0xb28e, 0x4223, 0x401b, 0x0ee5, 0x4382, 0x4017, 0xba24, 0x402e, 0x4220, 0x41a7, 0x411b, 0xb2e5, 0x42f2, 0x41f2, 0xb247, 0xbf90, 0x430e, 0x2206, 0x3b7b, 0x4253, 0x4376, 0x4017, 0xba4d, 0x4257, 0xbf28, 0xb2a0, 0x4194, 0x42b6, 0x1919, 0x40c2, 0x467a, 0x4374, 0xb2cd, 0x1d2c, 0x4462, 0x40d7, 0x402a, 0xba75, 0xb0f9, 0x44c0, 0x428a, 0x3166, 0x0ecd, 0xbf07, 0x0e7f, 0xb03c, 0xb023, 0x416d, 0x4106, 0xba15, 0x072f, 0x1f48, 0x1d5c, 0x45b6, 0x3b35, 0x4003, 0xbff0, 0x3519, 0x4268, 0x40a9, 0x4364, 0x40a1, 0x412e, 0x4393, 0x462b, 0xa299, 0x2497, 0xb286, 0xacdc, 0xb027, 0xbf70, 0xbaee, 0xb213, 0xbf5c, 0xb00c, 0x4376, 0x4541, 0x33d7, 0x41d9, 0x43a6, 0x2c34, 0x44fc, 0xb001, 0x05ac, 0x40d4, 0x4201, 0x2dc1, 0xbaf3, 0xb201, 0xba73, 0x1f51, 0xb20a, 0x43ab, 0x4100, 0x4389, 0xba77, 0xbf3f, 0xa8c2, 0xba34, 0x41ce, 0x43fa, 0xb059, 0x46db, 0xbf7f, 0xb2e4, 0x43d5, 0xba10, 0x41c4, 0xbad6, 0x41df, 0x1918, 0x4117, 0x117b, 0xbf00, 0x42ed, 0x442e, 0x4229, 0x4393, 0x422e, 0xba58, 0x4058, 0xb270, 0xba2f, 0x40a7, 0x36a0, 0x405b, 0x2f9e, 0xbfb9, 0x41df, 0x4201, 0x3389, 0x405f, 0xa198, 0x43f0, 0x4151, 0x410c, 0x2c84, 0x2f92, 0x4206, 0xba04, 0x462b, 0xbf1a, 0x41eb, 0x2a6c, 0x4245, 0xa394, 0xb28e, 0xb24e, 0x04f0, 0x46e1, 0x42b3, 0xb03f, 0x30ef, 0x1d17, 0xbaec, 0xb2f8, 0x4168, 0x1b83, 0xbfac, 0x2cce, 0x4159, 0xb227, 0x45a2, 0x43d6, 0x43ca, 0x4124, 0xbf07, 0x0220, 0x40f0, 0x4201, 0xb224, 0x32db, 0x4340, 0x4145, 0x42c3, 0xbfa0, 0xb2e1, 0x42ee, 0xb0ed, 0x40e9, 0x414b, 0x42bd, 0x4555, 0x09ca, 0xb076, 0x1fcf, 0x09e5, 0xaf80, 0xb209, 0x40f0, 0xb04a, 0x4015, 0x41b1, 0x0408, 0xbfa8, 0x177c, 0xbf60, 0x41f9, 0x4251, 0xbf1f, 0x464a, 0xbf70, 0xba33, 0x425c, 0x4233, 0x454e, 0x4374, 0xbadb, 0x4105, 0x431b, 0x32b3, 0xb042, 0xb242, 0x4357, 0x28d3, 0x20b8, 0x2d3a, 0xba3a, 0xba75, 0x409b, 0xb2e3, 0x2cf2, 0x4078, 0xb257, 0xbf55, 0x427d, 0xb29a, 0xbad7, 0xbff0, 0x4207, 0x3766, 0x1fff, 0x1e14, 0x3528, 0x41c9, 0x27a9, 0x4114, 0x44f8, 0x18b7, 0x1c48, 0x4278, 0x2785, 0x1db7, 0x4473, 0x41f3, 0x18f7, 0x2d3c, 0xbfd8, 0x1c68, 0x402d, 0x43db, 0x4017, 0xb049, 0x401a, 0xba2f, 0xb090, 0x4558, 0x42e2, 0xba3b, 0x444c, 0xb01f, 0xad32, 0x4391, 0xbafc, 0xbf18, 0x418c, 0xb224, 0xb2bd, 0x1d32, 0x4076, 0xac73, 0x3419, 0x4128, 0x435b, 0x44bb, 0x42ed, 0xba33, 0xaaf8, 0xba11, 0xbf80, 0xb04f, 0x4253, 0x3fd6, 0x43df, 0xba71, 0xb255, 0xbf23, 0xbad5, 0xb01d, 0x4054, 0x4178, 0x4213, 0xbad9, 0xbf5f, 0x43e8, 0xb204, 0x45bd, 0x311b, 0x4286, 0xb261, 0x2ba0, 0x1a16, 0xb042, 0x4417, 0x1915, 0x4220, 0x429f, 0x4223, 0x41b3, 0xbac5, 0xb06a, 0x1b2c, 0x1452, 0xbf74, 0xb251, 0x423d, 0x1d7d, 0x43f3, 0xba14, 0x230c, 0x41e8, 0x436a, 0xb2c1, 0x40fd, 0x413f, 0x420a, 0xb2dd, 0xb28c, 0x46a5, 0xb291, 0xb2ee, 0x1f83, 0xb2e8, 0xb2cf, 0xa1bd, 0xb0c7, 0x1ba4, 0xbae4, 0x425a, 0x41f3, 0xb04b, 0xbfdc, 0x0f78, 0xba29, 0xb0e8, 0x42c9, 0xb291, 0xba18, 0x432b, 0xbfac, 0x4109, 0xab55, 0x436f, 0x4349, 0x4132, 0x41d9, 0xb240, 0x4227, 0x43c5, 0x403c, 0x1d71, 0x4182, 0x403c, 0x40e0, 0x4077, 0xb27b, 0x45bc, 0xa153, 0xb017, 0x429e, 0x42ee, 0x4453, 0x4064, 0xb0c1, 0xbf43, 0x0c27, 0x0f14, 0x3796, 0x433a, 0xad1c, 0xb27f, 0x431e, 0x1f68, 0xbf00, 0x3852, 0x43b8, 0x32f1, 0x4380, 0x1ec3, 0x1500, 0xa820, 0xa8b8, 0xbf73, 0xb28d, 0xac37, 0x1ab0, 0x0759, 0xaf00, 0xb28d, 0x40e7, 0x4314, 0xbaf9, 0xb05d, 0x33b3, 0x372a, 0x430c, 0x421d, 0x432d, 0xbfc7, 0x14a2, 0xba0b, 0x2f72, 0x45d5, 0x40da, 0xbf94, 0x4398, 0xb2c2, 0x10af, 0xba46, 0xaedb, 0x41ed, 0xba66, 0xba70, 0xb28d, 0x4130, 0x4106, 0x225a, 0x42d1, 0xba7f, 0xb07b, 0x41f3, 0x18bc, 0xa31f, 0x1c7e, 0x2979, 0xb267, 0x430c, 0xbfb3, 0x4005, 0x45b6, 0x1d0a, 0xb29c, 0xbfe8, 0x413f, 0x4212, 0x1a6c, 0xb2cd, 0x41a3, 0x1b19, 0xad5e, 0xba4a, 0x155b, 0x0e84, 0x4041, 0x43fc, 0x41ac, 0xba0c, 0x41ab, 0x38f2, 0x43c9, 0x1f49, 0xb006, 0xb218, 0x0657, 0x0076, 0xb071, 0xb292, 0xbf33, 0x42d9, 0x419a, 0x430a, 0x40d0, 0x43ed, 0xae7a, 0xba09, 0x1dee, 0x4172, 0xbac3, 0x40b6, 0x418f, 0x4102, 0xba3a, 0xb255, 0xa8b8, 0x28b4, 0xbf2a, 0xbac3, 0x46b3, 0xb029, 0x402b, 0x18ac, 0x14fb, 0xbf26, 0x42ff, 0x4545, 0x413c, 0x43f9, 0xb099, 0xb2ea, 0xa112, 0x4037, 0xac7a, 0x42d3, 0xb2d3, 0x4136, 0xba7d, 0x4081, 0x40fb, 0x4421, 0x41ea, 0x46eb, 0x43d5, 0x1956, 0x3dd2, 0x1e1c, 0x4323, 0x1833, 0xb0c3, 0x4267, 0x428e, 0xbad9, 0xbfb5, 0x1cb6, 0x4248, 0x42b6, 0x19fb, 0xb0a6, 0x1a7f, 0xba5a, 0x1a28, 0x4446, 0x4207, 0x3fd4, 0x4119, 0x4069, 0xb215, 0xa19b, 0x4392, 0xbaef, 0xb2de, 0x1c2a, 0x46f5, 0xbf73, 0x4286, 0xbff0, 0x4006, 0xb279, 0xb27f, 0x428e, 0x416f, 0x411a, 0xbfd8, 0x0c5e, 0x444e, 0x43c3, 0x156d, 0x4175, 0xb2fb, 0x3877, 0xb2d7, 0x400a, 0x4429, 0x38fe, 0xb27a, 0x1868, 0x429f, 0xb0d5, 0x1515, 0x42ce, 0x45a1, 0x43e7, 0xbf55, 0xba1e, 0x4365, 0x1d96, 0x42fc, 0x43f5, 0x41ed, 0x4020, 0x4390, 0x1fa2, 0xbfd6, 0xb25f, 0x4128, 0x43ad, 0x1f47, 0x4373, 0x41e2, 0x4040, 0x4102, 0xad91, 0xb2ea, 0x4064, 0x44f9, 0x1cc9, 0x42d0, 0x2e1d, 0xb094, 0xbad1, 0xb0bd, 0x4144, 0x4074, 0xbfa0, 0x00b7, 0x4556, 0xb21d, 0xba47, 0x42e0, 0xb0fb, 0xbfcd, 0x193b, 0x4266, 0xb230, 0x41ec, 0x4271, 0x416e, 0xa323, 0x4225, 0xa208, 0x4057, 0x356c, 0x2a9d, 0x0db2, 0xbfc1, 0x19d8, 0x4242, 0x4240, 0x41eb, 0x4770, 0xe7fe + ], + StartRegs = [0x1ecc668c, 0x2e9c60ff, 0x9990f0ee, 0xf1a38886, 0x3f294482, 0xc54ff2ce, 0x36359d5d, 0x6e0e101b, 0xc58ac456, 0x564992fe, 0xcc932f92, 0x05cbf818, 0x7c022c30, 0xc34238ff, 0x00000000, 0x700001f0 + ], + FinalRegs = [0xffffcfb8, 0xc342cf05, 0xffffcfb8, 0x80000185, 0xc342cf05, 0x000013a4, 0x3cbd4433, 0x000017f0, 0x0000138c, 0xc34266a3, 0xcc932f92, 0x00000371, 0xc3424f05, 0xfffffb7c, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x430e, 0x1b60, 0x2a48, 0xbadf, 0xb061, 0x420b, 0x41bf, 0xba6c, 0xb2dd, 0x3070, 0xb2ae, 0xb21f, 0x4226, 0x4260, 0xbaef, 0xb233, 0x4645, 0x439f, 0x2b19, 0x394a, 0xba1e, 0xba60, 0x40fe, 0xba31, 0xbf48, 0x4296, 0x433d, 0x4353, 0x26f9, 0x42c3, 0x4286, 0x2142, 0xba78, 0xa6be, 0x2ec6, 0xba58, 0xb2e3, 0x43c8, 0x43ce, 0x3eb2, 0x1c58, 0xbf61, 0xb24d, 0x1a44, 0xb2f5, 0xa49d, 0xba3d, 0xba1c, 0x420f, 0x0ec6, 0xbf1f, 0x4636, 0xad48, 0x4181, 0x4155, 0x3050, 0x4001, 0xba03, 0x422b, 0x0266, 0xb0c4, 0xba50, 0xa8b4, 0x1e73, 0x41f5, 0xa645, 0x436a, 0x277c, 0x432a, 0x1b94, 0x1d44, 0xb294, 0x4080, 0x42a6, 0xb256, 0xbf2d, 0x1926, 0x4000, 0x4396, 0xb221, 0xb071, 0x0912, 0xba74, 0xb2d9, 0x3bd3, 0x45f5, 0x35e1, 0xb2a0, 0x42f2, 0x1e6b, 0x1595, 0x0e57, 0x42a0, 0x45d6, 0xba44, 0x41a2, 0xb26d, 0x43d3, 0xa79e, 0x434c, 0xbfd9, 0x40a3, 0x418c, 0xb230, 0x2774, 0x414a, 0x4385, 0xba77, 0x4019, 0x4202, 0x4251, 0xbafe, 0x4243, 0xb0e9, 0x1fc2, 0x4196, 0x2115, 0x4570, 0x420b, 0x4344, 0x40fc, 0x1820, 0xbf13, 0x40f3, 0xbaf1, 0x4280, 0x4110, 0x43ba, 0x25f9, 0x4175, 0xbfa0, 0x09ba, 0x35e7, 0x41ec, 0x12ba, 0xb249, 0xbade, 0x3bf7, 0x3c20, 0xba5f, 0x4094, 0x3b99, 0x2bb1, 0xb2e3, 0x4166, 0x402f, 0x414c, 0x425d, 0x415d, 0x43ba, 0x40da, 0xbfdf, 0x45e1, 0x412c, 0xb2da, 0x44d5, 0x4180, 0x3b39, 0x4221, 0xbf62, 0xba33, 0x42c8, 0xadf9, 0xb2af, 0xb28f, 0x4254, 0x4121, 0x393f, 0xa074, 0x4320, 0xb0ef, 0x400e, 0xbf37, 0x41a4, 0xbfb0, 0x39e8, 0x4226, 0xafd2, 0x400d, 0x435e, 0x42f0, 0xb223, 0x403e, 0xba0c, 0xb09d, 0x42a0, 0x2b3a, 0x4016, 0x4308, 0xae2c, 0x3e99, 0x06a6, 0x45cb, 0x0741, 0xba55, 0xbf93, 0x1c12, 0x40e2, 0x24c4, 0x1fb7, 0x41ca, 0x2258, 0xbf5d, 0x3ccc, 0x420f, 0x41d4, 0xba60, 0x402d, 0x40e3, 0xb261, 0xbfcd, 0x415d, 0xb01f, 0x1901, 0x420b, 0x1a54, 0x3fa6, 0x4021, 0x1dcc, 0xb260, 0x425f, 0xb038, 0xba79, 0xba11, 0x103d, 0x1f3c, 0xba7c, 0xb283, 0xbfba, 0xb24d, 0xb273, 0x3b72, 0x3c0a, 0x40ca, 0xb2c3, 0x3882, 0xb282, 0xba42, 0x402a, 0x4655, 0x43bf, 0x2362, 0x43c6, 0x4148, 0xb08d, 0x4072, 0xa1f3, 0x3784, 0xb2a2, 0x438a, 0xbf3c, 0x22a4, 0x401c, 0x4201, 0xa508, 0xbae9, 0x4490, 0xb2ea, 0x1de4, 0xbae9, 0x43ab, 0x3fcb, 0x4028, 0xa9ca, 0x1a68, 0x2cfc, 0xb01d, 0xbfb8, 0x406b, 0x3db1, 0x41ff, 0x2386, 0x3663, 0xb206, 0x421c, 0xab7f, 0x41c8, 0xba13, 0x2a54, 0x41db, 0x407d, 0xb066, 0xbf1f, 0x1a65, 0x1d6f, 0x066a, 0x428d, 0x4065, 0x404f, 0x1ac2, 0x44db, 0x0b90, 0x4488, 0x4255, 0x4550, 0xb0c3, 0x4291, 0x414c, 0xb2e4, 0x4231, 0x430e, 0xb240, 0x4003, 0x1210, 0x43b1, 0xb246, 0x4344, 0xbf4f, 0x44f9, 0xb218, 0xba07, 0x4053, 0xbf60, 0x4248, 0x1432, 0x45c3, 0x4083, 0x4403, 0x2f70, 0xbfb9, 0xaecd, 0xb050, 0x40e7, 0x409f, 0xaeeb, 0x40d6, 0x4315, 0x125b, 0x400b, 0xb0a3, 0x44db, 0xbf37, 0x4202, 0x4179, 0x1d0e, 0x2d2d, 0xa705, 0x43ee, 0x3206, 0x1586, 0xb25f, 0x37da, 0x423c, 0x4151, 0x401f, 0x04c3, 0x219b, 0x22dd, 0x402d, 0x1c87, 0x4201, 0x41bb, 0xbfa6, 0xb040, 0xaf1a, 0x4372, 0xbadd, 0xbf02, 0x0c72, 0xb20c, 0x41cd, 0xb2e9, 0x4115, 0x1f3c, 0x4000, 0x44e1, 0xb2c9, 0x31aa, 0xbac6, 0xb083, 0x2dc0, 0x432d, 0x2a5c, 0xb2d3, 0x4019, 0x46ed, 0xbf6f, 0x4322, 0x4466, 0xb249, 0x2cf1, 0x4387, 0x4170, 0x43e0, 0x40a7, 0x16ff, 0x1793, 0x29d4, 0xba1d, 0x2029, 0x4173, 0xb217, 0x434f, 0xb231, 0xa7fa, 0xbf5e, 0x43ce, 0xb0ae, 0x3cf2, 0x3a2e, 0x43c6, 0x2f25, 0x4304, 0x0394, 0x43de, 0x4312, 0x429c, 0x1fd2, 0xb2c4, 0x3066, 0x4159, 0x4192, 0x46f8, 0xbae6, 0x412d, 0x400d, 0x4272, 0x3c14, 0x427f, 0x447c, 0xb294, 0x4609, 0xbf88, 0x43c4, 0x35ea, 0x4308, 0xbacc, 0x42b6, 0x433f, 0xa5b2, 0x43f6, 0xb212, 0x0a9d, 0xbae2, 0x118e, 0x4214, 0x4344, 0x1ff4, 0x18ec, 0xb025, 0x1865, 0x04b5, 0xbf63, 0x4102, 0xbae5, 0x41a5, 0x40fc, 0x1fee, 0x42f4, 0x438e, 0x1d08, 0xb27c, 0xba61, 0x40b7, 0x03e2, 0x1bcf, 0x34ad, 0xb2b0, 0x007d, 0x3c4f, 0x41d8, 0x45d1, 0x41ac, 0x442b, 0x424d, 0x4279, 0xa121, 0x44a9, 0x41f3, 0x01c8, 0x40bd, 0x414f, 0xbfcf, 0xba19, 0x42ea, 0x2383, 0x00d8, 0xba6a, 0xba41, 0xb01c, 0x317c, 0x40a8, 0x401d, 0xb054, 0x400b, 0x1d1a, 0x1fd3, 0x1b51, 0xbfa8, 0x403c, 0xb003, 0x4336, 0x3dd6, 0x40d2, 0x410b, 0xafc3, 0xabd6, 0xa7d5, 0x02c0, 0x4201, 0x4242, 0xa5f6, 0xb061, 0xba2d, 0x1be8, 0x0262, 0x434c, 0xa56e, 0xbf95, 0xba08, 0x22fd, 0xb22d, 0xa383, 0x1876, 0x024b, 0x4134, 0x2c98, 0x4232, 0xa829, 0x41cc, 0x4237, 0x4287, 0x44db, 0x46fa, 0x415c, 0x432b, 0x416d, 0x4231, 0xaba6, 0xb208, 0x402f, 0xba7d, 0xa377, 0x4005, 0xacdb, 0xbfc2, 0x1ce5, 0xbf70, 0xb26c, 0x3bb5, 0x05cf, 0xb0f3, 0xb222, 0x4398, 0x4632, 0x4132, 0x4371, 0x1bd3, 0xb212, 0xbfac, 0xbf80, 0x41e2, 0xbf3e, 0x431e, 0x0ade, 0x4225, 0x26de, 0x4062, 0x4660, 0x4054, 0xbf5a, 0x43b4, 0x4282, 0x4255, 0x1cb3, 0x286c, 0xba6f, 0xabbd, 0xb0f6, 0x4206, 0x4154, 0x40f2, 0x42e7, 0x30f7, 0x4005, 0x45b6, 0xbf9f, 0x40a2, 0xb2b8, 0xba26, 0x2711, 0xad55, 0x4382, 0xb0b4, 0x1990, 0xba12, 0xb2e0, 0xba00, 0xa4f2, 0x4356, 0xb211, 0x435a, 0x4052, 0xaaa8, 0x404c, 0x41d0, 0x1cb9, 0xb28e, 0x41dc, 0x2275, 0x4492, 0x0359, 0xb2e5, 0xbf4e, 0x1301, 0x44d5, 0x4122, 0x39cf, 0x347b, 0x43cd, 0x28be, 0x1851, 0x1a41, 0x40e7, 0xba0e, 0x18bd, 0xb095, 0xb269, 0x4029, 0x1879, 0x1b1b, 0x4156, 0x4210, 0xbf3b, 0x44ac, 0x405e, 0x42b1, 0x4306, 0xb297, 0x4198, 0xb002, 0x4232, 0x3704, 0x3643, 0x4220, 0xbf9a, 0x3986, 0xb2a7, 0x412d, 0x416f, 0x3c6c, 0xba06, 0x1bda, 0x435d, 0x421d, 0x41cf, 0xa2e4, 0x1cf3, 0x442b, 0x40ec, 0xb281, 0x1ebc, 0x4373, 0x40c9, 0xac98, 0xbff0, 0xa100, 0x409f, 0xb290, 0x41f9, 0x1733, 0xb255, 0x1efe, 0x4004, 0xbf3e, 0xb0c3, 0x4023, 0x09b0, 0x0995, 0x1ec1, 0x2998, 0xba06, 0x1e93, 0x43cc, 0xb2de, 0x42d3, 0x41ac, 0x4354, 0x4013, 0xa9a8, 0xbfd4, 0xb241, 0x4022, 0x1dcf, 0xb0ee, 0x43cc, 0x1a03, 0xbac9, 0x1b7e, 0x4311, 0x439e, 0xbf8a, 0x025e, 0x43b7, 0xa7ed, 0x4276, 0x4200, 0x42fa, 0xb04a, 0xa648, 0x418e, 0x40bd, 0x09bd, 0xbaec, 0x42d1, 0x2ede, 0x1b6e, 0x06b5, 0x08c6, 0xb2ba, 0xb2f6, 0x1d2f, 0x1aac, 0xba61, 0xbf2d, 0xb283, 0x4311, 0xb203, 0x4193, 0xa79a, 0x1eb0, 0x436e, 0xba53, 0x4612, 0x42d8, 0xb202, 0x3e0c, 0xaf8a, 0xba34, 0x4084, 0xabe0, 0x19fe, 0x4331, 0x4337, 0xb247, 0x4647, 0x407b, 0x31ff, 0xbf1c, 0x4148, 0x385b, 0x3fa5, 0xb2e5, 0x1e35, 0x087e, 0xaef2, 0xb093, 0x424c, 0xb227, 0x43dc, 0x102d, 0x4612, 0xb2c3, 0xb221, 0xb2ac, 0xbf24, 0x4359, 0x42b6, 0xb25d, 0x3d87, 0x42e8, 0xbaea, 0x436d, 0x1a91, 0xbafc, 0x42db, 0xa79c, 0x1946, 0x4140, 0x40af, 0x4095, 0x1ce6, 0x12fc, 0x2a6a, 0x40fd, 0x1e44, 0xbf75, 0x1ecd, 0x4114, 0x1fb8, 0xb07d, 0x41e1, 0x4306, 0x4040, 0x4007, 0xba64, 0xbf70, 0x4011, 0xbf39, 0x40be, 0xb257, 0xb05a, 0xb000, 0x2cf7, 0x0fae, 0xaa47, 0xbf1f, 0x4095, 0x43a6, 0xbfc0, 0x34a2, 0x3dc5, 0x42fe, 0x4329, 0x4135, 0xbae2, 0x46b9, 0xbfdb, 0x1c14, 0x4482, 0x432a, 0xb29a, 0x1fb4, 0x1869, 0x199f, 0x43b6, 0x3cd5, 0x437e, 0x2331, 0xb201, 0x4348, 0x2663, 0x41c9, 0x421e, 0xb2a6, 0x41a1, 0xbfc4, 0x3897, 0x4458, 0x41a9, 0xb2c6, 0xbfbf, 0xbf70, 0x1c52, 0x4132, 0x1e34, 0x0d87, 0xbae6, 0xb2b4, 0x2385, 0x41c1, 0x42ab, 0x1a6a, 0x07b7, 0x40aa, 0xbf21, 0x403b, 0xbaee, 0x43d9, 0x43ef, 0x41ab, 0x426c, 0x4280, 0x4019, 0xbf60, 0x4245, 0x1f77, 0x4061, 0xba66, 0x4086, 0x337a, 0x1942, 0x2580, 0x0667, 0x40dd, 0x4135, 0xbf56, 0x408c, 0xb2b1, 0xba18, 0xb2ac, 0xbf1b, 0x42d0, 0xb0c8, 0x418c, 0xb283, 0xaf4c, 0x1bab, 0xb047, 0xb092, 0x16b1, 0xbae1, 0xa058, 0xa49b, 0x4007, 0xaca0, 0x1e8e, 0x41dc, 0x4065, 0x3fbb, 0x4192, 0x191a, 0xb263, 0xbfa9, 0x4384, 0x438c, 0x46da, 0x1e3b, 0x1cc2, 0x43a3, 0xba39, 0xbfa5, 0xb0bf, 0x1e42, 0x1a0a, 0x1cad, 0x401c, 0x439f, 0xa4ab, 0x4302, 0x4484, 0x40d3, 0xbfd0, 0x41cd, 0x3bc6, 0x1fc1, 0x41b9, 0xb255, 0x41c4, 0xba13, 0xb298, 0x2459, 0x054c, 0xbfd4, 0x41d4, 0x1b7d, 0x1d2c, 0x2806, 0x1bec, 0xb2f3, 0x268c, 0x4131, 0x42cb, 0x4146, 0xbf8a, 0x42c8, 0x4057, 0xa7d7, 0x36f5, 0xb082, 0x439c, 0x42cf, 0x454e, 0x403b, 0xb225, 0x1e75, 0x4357, 0x2f15, 0x4096, 0x314f, 0xa555, 0xba10, 0x4003, 0x3197, 0xba21, 0x40a5, 0xbf9f, 0x41cd, 0x24ad, 0xaf2c, 0x42d0, 0x38f1, 0x407c, 0x429e, 0xb03e, 0xbf1f, 0x40c7, 0xb294, 0xa6a8, 0x387d, 0x1236, 0x4148, 0x3c48, 0xbf76, 0x00f5, 0xb2bf, 0x12a8, 0x423b, 0x41c2, 0x4206, 0xb0a4, 0x0c83, 0x40ff, 0x4138, 0xbfb0, 0x1b14, 0x4228, 0x3697, 0x3a11, 0x4107, 0xbafd, 0x447c, 0x43a3, 0xb28f, 0x4246, 0x454f, 0x432e, 0xbfdc, 0xb2d1, 0x437e, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xcc2ef87d, 0xae95a3fd, 0x5e6e0ca5, 0x1ef09cca, 0x00ea6c00, 0x963e3b79, 0xc2107f27, 0x7b8c8e2a, 0xa52501a4, 0xdd47e07c, 0x58514dc3, 0xb401ec82, 0x88632001, 0xabb2221b, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x0000003e, 0x0000183e, 0x00000000, 0x544dfc0a, 0x00000000, 0x00000000, 0x0000ffff, 0x0000133c, 0xffffffff, 0x0000148f, 0xa00f6410, 0x88633849, 0xabb2349a, 0x00000000, 0x400001d0 }, + Instructions = [0x430e, 0x1b60, 0x2a48, 0xbadf, 0xb061, 0x420b, 0x41bf, 0xba6c, 0xb2dd, 0x3070, 0xb2ae, 0xb21f, 0x4226, 0x4260, 0xbaef, 0xb233, 0x4645, 0x439f, 0x2b19, 0x394a, 0xba1e, 0xba60, 0x40fe, 0xba31, 0xbf48, 0x4296, 0x433d, 0x4353, 0x26f9, 0x42c3, 0x4286, 0x2142, 0xba78, 0xa6be, 0x2ec6, 0xba58, 0xb2e3, 0x43c8, 0x43ce, 0x3eb2, 0x1c58, 0xbf61, 0xb24d, 0x1a44, 0xb2f5, 0xa49d, 0xba3d, 0xba1c, 0x420f, 0x0ec6, 0xbf1f, 0x4636, 0xad48, 0x4181, 0x4155, 0x3050, 0x4001, 0xba03, 0x422b, 0x0266, 0xb0c4, 0xba50, 0xa8b4, 0x1e73, 0x41f5, 0xa645, 0x436a, 0x277c, 0x432a, 0x1b94, 0x1d44, 0xb294, 0x4080, 0x42a6, 0xb256, 0xbf2d, 0x1926, 0x4000, 0x4396, 0xb221, 0xb071, 0x0912, 0xba74, 0xb2d9, 0x3bd3, 0x45f5, 0x35e1, 0xb2a0, 0x42f2, 0x1e6b, 0x1595, 0x0e57, 0x42a0, 0x45d6, 0xba44, 0x41a2, 0xb26d, 0x43d3, 0xa79e, 0x434c, 0xbfd9, 0x40a3, 0x418c, 0xb230, 0x2774, 0x414a, 0x4385, 0xba77, 0x4019, 0x4202, 0x4251, 0xbafe, 0x4243, 0xb0e9, 0x1fc2, 0x4196, 0x2115, 0x4570, 0x420b, 0x4344, 0x40fc, 0x1820, 0xbf13, 0x40f3, 0xbaf1, 0x4280, 0x4110, 0x43ba, 0x25f9, 0x4175, 0xbfa0, 0x09ba, 0x35e7, 0x41ec, 0x12ba, 0xb249, 0xbade, 0x3bf7, 0x3c20, 0xba5f, 0x4094, 0x3b99, 0x2bb1, 0xb2e3, 0x4166, 0x402f, 0x414c, 0x425d, 0x415d, 0x43ba, 0x40da, 0xbfdf, 0x45e1, 0x412c, 0xb2da, 0x44d5, 0x4180, 0x3b39, 0x4221, 0xbf62, 0xba33, 0x42c8, 0xadf9, 0xb2af, 0xb28f, 0x4254, 0x4121, 0x393f, 0xa074, 0x4320, 0xb0ef, 0x400e, 0xbf37, 0x41a4, 0xbfb0, 0x39e8, 0x4226, 0xafd2, 0x400d, 0x435e, 0x42f0, 0xb223, 0x403e, 0xba0c, 0xb09d, 0x42a0, 0x2b3a, 0x4016, 0x4308, 0xae2c, 0x3e99, 0x06a6, 0x45cb, 0x0741, 0xba55, 0xbf93, 0x1c12, 0x40e2, 0x24c4, 0x1fb7, 0x41ca, 0x2258, 0xbf5d, 0x3ccc, 0x420f, 0x41d4, 0xba60, 0x402d, 0x40e3, 0xb261, 0xbfcd, 0x415d, 0xb01f, 0x1901, 0x420b, 0x1a54, 0x3fa6, 0x4021, 0x1dcc, 0xb260, 0x425f, 0xb038, 0xba79, 0xba11, 0x103d, 0x1f3c, 0xba7c, 0xb283, 0xbfba, 0xb24d, 0xb273, 0x3b72, 0x3c0a, 0x40ca, 0xb2c3, 0x3882, 0xb282, 0xba42, 0x402a, 0x4655, 0x43bf, 0x2362, 0x43c6, 0x4148, 0xb08d, 0x4072, 0xa1f3, 0x3784, 0xb2a2, 0x438a, 0xbf3c, 0x22a4, 0x401c, 0x4201, 0xa508, 0xbae9, 0x4490, 0xb2ea, 0x1de4, 0xbae9, 0x43ab, 0x3fcb, 0x4028, 0xa9ca, 0x1a68, 0x2cfc, 0xb01d, 0xbfb8, 0x406b, 0x3db1, 0x41ff, 0x2386, 0x3663, 0xb206, 0x421c, 0xab7f, 0x41c8, 0xba13, 0x2a54, 0x41db, 0x407d, 0xb066, 0xbf1f, 0x1a65, 0x1d6f, 0x066a, 0x428d, 0x4065, 0x404f, 0x1ac2, 0x44db, 0x0b90, 0x4488, 0x4255, 0x4550, 0xb0c3, 0x4291, 0x414c, 0xb2e4, 0x4231, 0x430e, 0xb240, 0x4003, 0x1210, 0x43b1, 0xb246, 0x4344, 0xbf4f, 0x44f9, 0xb218, 0xba07, 0x4053, 0xbf60, 0x4248, 0x1432, 0x45c3, 0x4083, 0x4403, 0x2f70, 0xbfb9, 0xaecd, 0xb050, 0x40e7, 0x409f, 0xaeeb, 0x40d6, 0x4315, 0x125b, 0x400b, 0xb0a3, 0x44db, 0xbf37, 0x4202, 0x4179, 0x1d0e, 0x2d2d, 0xa705, 0x43ee, 0x3206, 0x1586, 0xb25f, 0x37da, 0x423c, 0x4151, 0x401f, 0x04c3, 0x219b, 0x22dd, 0x402d, 0x1c87, 0x4201, 0x41bb, 0xbfa6, 0xb040, 0xaf1a, 0x4372, 0xbadd, 0xbf02, 0x0c72, 0xb20c, 0x41cd, 0xb2e9, 0x4115, 0x1f3c, 0x4000, 0x44e1, 0xb2c9, 0x31aa, 0xbac6, 0xb083, 0x2dc0, 0x432d, 0x2a5c, 0xb2d3, 0x4019, 0x46ed, 0xbf6f, 0x4322, 0x4466, 0xb249, 0x2cf1, 0x4387, 0x4170, 0x43e0, 0x40a7, 0x16ff, 0x1793, 0x29d4, 0xba1d, 0x2029, 0x4173, 0xb217, 0x434f, 0xb231, 0xa7fa, 0xbf5e, 0x43ce, 0xb0ae, 0x3cf2, 0x3a2e, 0x43c6, 0x2f25, 0x4304, 0x0394, 0x43de, 0x4312, 0x429c, 0x1fd2, 0xb2c4, 0x3066, 0x4159, 0x4192, 0x46f8, 0xbae6, 0x412d, 0x400d, 0x4272, 0x3c14, 0x427f, 0x447c, 0xb294, 0x4609, 0xbf88, 0x43c4, 0x35ea, 0x4308, 0xbacc, 0x42b6, 0x433f, 0xa5b2, 0x43f6, 0xb212, 0x0a9d, 0xbae2, 0x118e, 0x4214, 0x4344, 0x1ff4, 0x18ec, 0xb025, 0x1865, 0x04b5, 0xbf63, 0x4102, 0xbae5, 0x41a5, 0x40fc, 0x1fee, 0x42f4, 0x438e, 0x1d08, 0xb27c, 0xba61, 0x40b7, 0x03e2, 0x1bcf, 0x34ad, 0xb2b0, 0x007d, 0x3c4f, 0x41d8, 0x45d1, 0x41ac, 0x442b, 0x424d, 0x4279, 0xa121, 0x44a9, 0x41f3, 0x01c8, 0x40bd, 0x414f, 0xbfcf, 0xba19, 0x42ea, 0x2383, 0x00d8, 0xba6a, 0xba41, 0xb01c, 0x317c, 0x40a8, 0x401d, 0xb054, 0x400b, 0x1d1a, 0x1fd3, 0x1b51, 0xbfa8, 0x403c, 0xb003, 0x4336, 0x3dd6, 0x40d2, 0x410b, 0xafc3, 0xabd6, 0xa7d5, 0x02c0, 0x4201, 0x4242, 0xa5f6, 0xb061, 0xba2d, 0x1be8, 0x0262, 0x434c, 0xa56e, 0xbf95, 0xba08, 0x22fd, 0xb22d, 0xa383, 0x1876, 0x024b, 0x4134, 0x2c98, 0x4232, 0xa829, 0x41cc, 0x4237, 0x4287, 0x44db, 0x46fa, 0x415c, 0x432b, 0x416d, 0x4231, 0xaba6, 0xb208, 0x402f, 0xba7d, 0xa377, 0x4005, 0xacdb, 0xbfc2, 0x1ce5, 0xbf70, 0xb26c, 0x3bb5, 0x05cf, 0xb0f3, 0xb222, 0x4398, 0x4632, 0x4132, 0x4371, 0x1bd3, 0xb212, 0xbfac, 0xbf80, 0x41e2, 0xbf3e, 0x431e, 0x0ade, 0x4225, 0x26de, 0x4062, 0x4660, 0x4054, 0xbf5a, 0x43b4, 0x4282, 0x4255, 0x1cb3, 0x286c, 0xba6f, 0xabbd, 0xb0f6, 0x4206, 0x4154, 0x40f2, 0x42e7, 0x30f7, 0x4005, 0x45b6, 0xbf9f, 0x40a2, 0xb2b8, 0xba26, 0x2711, 0xad55, 0x4382, 0xb0b4, 0x1990, 0xba12, 0xb2e0, 0xba00, 0xa4f2, 0x4356, 0xb211, 0x435a, 0x4052, 0xaaa8, 0x404c, 0x41d0, 0x1cb9, 0xb28e, 0x41dc, 0x2275, 0x4492, 0x0359, 0xb2e5, 0xbf4e, 0x1301, 0x44d5, 0x4122, 0x39cf, 0x347b, 0x43cd, 0x28be, 0x1851, 0x1a41, 0x40e7, 0xba0e, 0x18bd, 0xb095, 0xb269, 0x4029, 0x1879, 0x1b1b, 0x4156, 0x4210, 0xbf3b, 0x44ac, 0x405e, 0x42b1, 0x4306, 0xb297, 0x4198, 0xb002, 0x4232, 0x3704, 0x3643, 0x4220, 0xbf9a, 0x3986, 0xb2a7, 0x412d, 0x416f, 0x3c6c, 0xba06, 0x1bda, 0x435d, 0x421d, 0x41cf, 0xa2e4, 0x1cf3, 0x442b, 0x40ec, 0xb281, 0x1ebc, 0x4373, 0x40c9, 0xac98, 0xbff0, 0xa100, 0x409f, 0xb290, 0x41f9, 0x1733, 0xb255, 0x1efe, 0x4004, 0xbf3e, 0xb0c3, 0x4023, 0x09b0, 0x0995, 0x1ec1, 0x2998, 0xba06, 0x1e93, 0x43cc, 0xb2de, 0x42d3, 0x41ac, 0x4354, 0x4013, 0xa9a8, 0xbfd4, 0xb241, 0x4022, 0x1dcf, 0xb0ee, 0x43cc, 0x1a03, 0xbac9, 0x1b7e, 0x4311, 0x439e, 0xbf8a, 0x025e, 0x43b7, 0xa7ed, 0x4276, 0x4200, 0x42fa, 0xb04a, 0xa648, 0x418e, 0x40bd, 0x09bd, 0xbaec, 0x42d1, 0x2ede, 0x1b6e, 0x06b5, 0x08c6, 0xb2ba, 0xb2f6, 0x1d2f, 0x1aac, 0xba61, 0xbf2d, 0xb283, 0x4311, 0xb203, 0x4193, 0xa79a, 0x1eb0, 0x436e, 0xba53, 0x4612, 0x42d8, 0xb202, 0x3e0c, 0xaf8a, 0xba34, 0x4084, 0xabe0, 0x19fe, 0x4331, 0x4337, 0xb247, 0x4647, 0x407b, 0x31ff, 0xbf1c, 0x4148, 0x385b, 0x3fa5, 0xb2e5, 0x1e35, 0x087e, 0xaef2, 0xb093, 0x424c, 0xb227, 0x43dc, 0x102d, 0x4612, 0xb2c3, 0xb221, 0xb2ac, 0xbf24, 0x4359, 0x42b6, 0xb25d, 0x3d87, 0x42e8, 0xbaea, 0x436d, 0x1a91, 0xbafc, 0x42db, 0xa79c, 0x1946, 0x4140, 0x40af, 0x4095, 0x1ce6, 0x12fc, 0x2a6a, 0x40fd, 0x1e44, 0xbf75, 0x1ecd, 0x4114, 0x1fb8, 0xb07d, 0x41e1, 0x4306, 0x4040, 0x4007, 0xba64, 0xbf70, 0x4011, 0xbf39, 0x40be, 0xb257, 0xb05a, 0xb000, 0x2cf7, 0x0fae, 0xaa47, 0xbf1f, 0x4095, 0x43a6, 0xbfc0, 0x34a2, 0x3dc5, 0x42fe, 0x4329, 0x4135, 0xbae2, 0x46b9, 0xbfdb, 0x1c14, 0x4482, 0x432a, 0xb29a, 0x1fb4, 0x1869, 0x199f, 0x43b6, 0x3cd5, 0x437e, 0x2331, 0xb201, 0x4348, 0x2663, 0x41c9, 0x421e, 0xb2a6, 0x41a1, 0xbfc4, 0x3897, 0x4458, 0x41a9, 0xb2c6, 0xbfbf, 0xbf70, 0x1c52, 0x4132, 0x1e34, 0x0d87, 0xbae6, 0xb2b4, 0x2385, 0x41c1, 0x42ab, 0x1a6a, 0x07b7, 0x40aa, 0xbf21, 0x403b, 0xbaee, 0x43d9, 0x43ef, 0x41ab, 0x426c, 0x4280, 0x4019, 0xbf60, 0x4245, 0x1f77, 0x4061, 0xba66, 0x4086, 0x337a, 0x1942, 0x2580, 0x0667, 0x40dd, 0x4135, 0xbf56, 0x408c, 0xb2b1, 0xba18, 0xb2ac, 0xbf1b, 0x42d0, 0xb0c8, 0x418c, 0xb283, 0xaf4c, 0x1bab, 0xb047, 0xb092, 0x16b1, 0xbae1, 0xa058, 0xa49b, 0x4007, 0xaca0, 0x1e8e, 0x41dc, 0x4065, 0x3fbb, 0x4192, 0x191a, 0xb263, 0xbfa9, 0x4384, 0x438c, 0x46da, 0x1e3b, 0x1cc2, 0x43a3, 0xba39, 0xbfa5, 0xb0bf, 0x1e42, 0x1a0a, 0x1cad, 0x401c, 0x439f, 0xa4ab, 0x4302, 0x4484, 0x40d3, 0xbfd0, 0x41cd, 0x3bc6, 0x1fc1, 0x41b9, 0xb255, 0x41c4, 0xba13, 0xb298, 0x2459, 0x054c, 0xbfd4, 0x41d4, 0x1b7d, 0x1d2c, 0x2806, 0x1bec, 0xb2f3, 0x268c, 0x4131, 0x42cb, 0x4146, 0xbf8a, 0x42c8, 0x4057, 0xa7d7, 0x36f5, 0xb082, 0x439c, 0x42cf, 0x454e, 0x403b, 0xb225, 0x1e75, 0x4357, 0x2f15, 0x4096, 0x314f, 0xa555, 0xba10, 0x4003, 0x3197, 0xba21, 0x40a5, 0xbf9f, 0x41cd, 0x24ad, 0xaf2c, 0x42d0, 0x38f1, 0x407c, 0x429e, 0xb03e, 0xbf1f, 0x40c7, 0xb294, 0xa6a8, 0x387d, 0x1236, 0x4148, 0x3c48, 0xbf76, 0x00f5, 0xb2bf, 0x12a8, 0x423b, 0x41c2, 0x4206, 0xb0a4, 0x0c83, 0x40ff, 0x4138, 0xbfb0, 0x1b14, 0x4228, 0x3697, 0x3a11, 0x4107, 0xbafd, 0x447c, 0x43a3, 0xb28f, 0x4246, 0x454f, 0x432e, 0xbfdc, 0xb2d1, 0x437e, 0x4770, 0xe7fe + ], + StartRegs = [0xcc2ef87d, 0xae95a3fd, 0x5e6e0ca5, 0x1ef09cca, 0x00ea6c00, 0x963e3b79, 0xc2107f27, 0x7b8c8e2a, 0xa52501a4, 0xdd47e07c, 0x58514dc3, 0xb401ec82, 0x88632001, 0xabb2221b, 0x00000000, 0x900001f0 + ], + FinalRegs = [0x00000000, 0x0000003e, 0x0000183e, 0x00000000, 0x544dfc0a, 0x00000000, 0x00000000, 0x0000ffff, 0x0000133c, 0xffffffff, 0x0000148f, 0xa00f6410, 0x88633849, 0xabb2349a, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x1a9a, 0xaba5, 0x42a3, 0x4339, 0x43b9, 0xb263, 0xb077, 0xbf80, 0x409b, 0x4178, 0xba22, 0x439a, 0x428e, 0xb0b6, 0x404e, 0x1ae0, 0xba1e, 0x0e81, 0x41c2, 0xbfb8, 0x40e2, 0x18d2, 0x462c, 0x43c9, 0x1e7d, 0xb21b, 0x43ce, 0x45b5, 0x42d0, 0xb038, 0x42c9, 0x4238, 0x1e37, 0x42b5, 0x41cc, 0x42f9, 0xb072, 0x4154, 0x030b, 0x4384, 0x42d6, 0x46a8, 0xbf6c, 0x0ce2, 0xb24b, 0x4305, 0x4418, 0xb006, 0x404c, 0x438f, 0x438f, 0x0532, 0x41e4, 0x4290, 0x4019, 0xba4e, 0xbf54, 0x412d, 0x4202, 0x4208, 0x4614, 0x193b, 0xbf57, 0x3ef2, 0x4692, 0xbaf4, 0xad07, 0xba72, 0x4549, 0xb22f, 0x40a5, 0x4184, 0x1cf9, 0x416c, 0x421a, 0x4371, 0xba66, 0xba38, 0x1c55, 0xaa65, 0xaa8c, 0x4070, 0x0cf2, 0x1ff4, 0x1a0b, 0xbfad, 0xb219, 0x400b, 0x2178, 0x1d28, 0x43f7, 0x419f, 0x421b, 0x1f66, 0x40a0, 0x4224, 0x4370, 0x4325, 0x37c4, 0xa62d, 0xb080, 0x43e0, 0xb2a1, 0x00db, 0xab3b, 0xbf15, 0x40ae, 0x109e, 0x3d73, 0x1fc1, 0x19fb, 0x3e2e, 0x42d5, 0x1946, 0x419c, 0x4135, 0x02c7, 0x46fb, 0xb22c, 0x40b6, 0x43a1, 0x4229, 0x4382, 0x42c3, 0x422d, 0x3ecb, 0x4289, 0x407d, 0xb090, 0xbf12, 0x0c06, 0xba06, 0x4324, 0x439b, 0x440d, 0x4177, 0x41a8, 0x41d5, 0x4282, 0xbaff, 0xbfc0, 0x3148, 0x4294, 0xbfb0, 0x1b88, 0x1f7c, 0xb2ba, 0xbf9f, 0x4085, 0x421a, 0xb2d2, 0x1e81, 0x40e0, 0x41c4, 0xbade, 0x19d2, 0x4289, 0xb237, 0xba1c, 0xba3c, 0x41e1, 0xba5e, 0xb2b8, 0x41f3, 0x423a, 0xb272, 0x40d7, 0x41d2, 0x4046, 0xbf88, 0x40d6, 0x4045, 0x43ff, 0x18df, 0xa909, 0x40cf, 0x42bc, 0x4198, 0x0130, 0x071f, 0x427e, 0x45a3, 0x1b5c, 0xbf0a, 0xb222, 0x3b72, 0x4039, 0x43af, 0x1dfe, 0x4338, 0xbfc2, 0x43f5, 0x41f6, 0x4012, 0x416e, 0x1d8b, 0x1ff4, 0xb2e2, 0x29ae, 0xa123, 0xb2ef, 0xbf26, 0x1f7f, 0x347b, 0x3277, 0x41e4, 0x43b0, 0x41b1, 0x4193, 0xbf05, 0xba7f, 0xb26d, 0x2ee4, 0x1eb0, 0x43dd, 0x413e, 0x4072, 0x1b4b, 0x4047, 0xb2ae, 0xbaf6, 0x41d7, 0xa6ec, 0xbfdb, 0xb250, 0x4057, 0x2618, 0xb282, 0x4321, 0x4288, 0x400d, 0x4138, 0xa678, 0xa9a6, 0xba47, 0xb2e9, 0x1995, 0x43d3, 0x4237, 0xb03d, 0x4144, 0x46a2, 0xb206, 0x1d19, 0x1b25, 0x4389, 0x4104, 0xb066, 0x1d21, 0x1f7e, 0x2adb, 0xbfd2, 0xa0ea, 0xa87a, 0x4382, 0xb018, 0x44ba, 0x425f, 0x3c44, 0x40eb, 0x43b6, 0xb0a6, 0xba7c, 0xba0c, 0xaeec, 0x4592, 0xb036, 0xbf15, 0xba48, 0xb076, 0x4042, 0xac7c, 0x4560, 0x4003, 0xb03b, 0x1bc1, 0x0ad5, 0x4293, 0xb262, 0x1c32, 0x199d, 0x435d, 0xbf80, 0x2273, 0xb2b2, 0x427b, 0x23cc, 0xb251, 0xb09b, 0x42c1, 0x37da, 0x437a, 0xb022, 0x4384, 0x4280, 0x2b09, 0x4396, 0xbfb8, 0xb09d, 0xaebd, 0xbf34, 0x4346, 0x169e, 0x425d, 0xb036, 0x1e3d, 0x1384, 0xb00e, 0x1cce, 0x135c, 0x4266, 0x025b, 0x46cd, 0x3cf3, 0xbf9d, 0x43d8, 0x41be, 0x2ba8, 0x1ba7, 0x43b3, 0x1ae9, 0xbad7, 0x4019, 0x1deb, 0x292d, 0x413c, 0x4096, 0xb203, 0x4033, 0x1e9e, 0x40c4, 0x2339, 0xb228, 0xb090, 0xbf2a, 0x4172, 0xb22f, 0x4418, 0x162b, 0x4061, 0xa58e, 0xba40, 0x42e7, 0x41e1, 0xb27b, 0x1c28, 0x45ae, 0x41a1, 0x4383, 0x4149, 0x4382, 0x1e4c, 0xbf14, 0x40bd, 0x4209, 0x401c, 0x0482, 0x42f0, 0x4681, 0x43d3, 0x4226, 0xadee, 0x1e44, 0xb0ad, 0x417e, 0x1efc, 0xbf49, 0xb22f, 0x2bad, 0x42a4, 0x42b2, 0xba1f, 0x4562, 0x40d3, 0x4619, 0xbae8, 0xba17, 0x4154, 0xbf6a, 0x407f, 0x40e1, 0x4359, 0x42f3, 0x137f, 0xb2b2, 0x419e, 0xbf0a, 0x4277, 0x41ca, 0x4025, 0x41f8, 0x11b6, 0xb015, 0x42bc, 0xb098, 0xbf26, 0x4382, 0xba65, 0x2399, 0x44e3, 0x1b58, 0x4395, 0x30cc, 0x41c1, 0x41fa, 0x4632, 0xa687, 0x192f, 0x3f96, 0x45d8, 0x41b2, 0x4075, 0x4080, 0xbf9f, 0x43b9, 0x1902, 0x1a58, 0xb003, 0xa201, 0xb28f, 0x405c, 0x41d8, 0xb0cb, 0x42ba, 0x43c2, 0x40fa, 0x4331, 0xb294, 0xb205, 0xb0a7, 0xbfc2, 0x4268, 0x403f, 0x40bf, 0x41e1, 0x407b, 0x4013, 0x2de8, 0xbf75, 0xb039, 0x1f48, 0x428a, 0x4226, 0xba11, 0x0c28, 0x338a, 0x1d9a, 0xb075, 0x3f72, 0x3f5e, 0x4165, 0x4585, 0x3a3d, 0x427e, 0xb0b8, 0xa4b0, 0x436a, 0x4385, 0xbf02, 0x45ba, 0xb07c, 0x42b1, 0xb26b, 0xb22a, 0x4297, 0x1bda, 0x4634, 0x0a08, 0x43e7, 0x169b, 0xa98d, 0x43e2, 0x42f6, 0x42c1, 0x41c2, 0x1cfd, 0xbf48, 0x40b7, 0x40de, 0x1f98, 0xb246, 0xb03d, 0x1e78, 0x3ac4, 0x407d, 0x1862, 0xb238, 0x2451, 0xba4a, 0x445e, 0x1a72, 0x4252, 0x1d66, 0xbf41, 0x42df, 0x31d5, 0xb095, 0x41d9, 0x434b, 0x4303, 0x2470, 0x1dff, 0x469a, 0x45b8, 0x418e, 0x456e, 0x4417, 0xba49, 0xb2b7, 0x4228, 0xa06c, 0x41e7, 0xa99b, 0x36cf, 0x46c4, 0x1852, 0x142a, 0xbfce, 0x06af, 0x4135, 0xb260, 0x3bfc, 0x410a, 0xbf90, 0xb0ca, 0x4165, 0xbf2d, 0x4001, 0x42d4, 0x2d2d, 0x46e0, 0x190d, 0xbfba, 0x18a6, 0xb240, 0x4309, 0x1378, 0x466f, 0x41e6, 0xb079, 0x188f, 0x4012, 0xba77, 0x082f, 0x4018, 0xba48, 0x1786, 0xbac1, 0x1734, 0xbf73, 0x1a6e, 0x4295, 0x1bc2, 0x1956, 0x4196, 0x0623, 0x3a43, 0x4197, 0xbf91, 0xb283, 0x4234, 0x0324, 0x4663, 0x4050, 0x4364, 0xb237, 0xb22e, 0x362c, 0xb21f, 0x2ab6, 0x3262, 0x1b32, 0xbf49, 0xaf0d, 0xb2d7, 0xba6d, 0x43e4, 0xb2a6, 0xb20d, 0x390c, 0xbfcf, 0x1a4a, 0xb2df, 0x447c, 0x4555, 0x437d, 0x412f, 0xbf90, 0xb0fe, 0x43bc, 0xb210, 0xb22b, 0xba63, 0xba2e, 0x4293, 0xb015, 0x0ba7, 0xbf92, 0x1956, 0x413e, 0x40db, 0xa728, 0x4360, 0x04c0, 0xb060, 0x41fa, 0x460d, 0x4168, 0xb24f, 0xaff6, 0x4284, 0x4018, 0x002e, 0x43ea, 0xbfb4, 0x3528, 0x40d5, 0xba2d, 0x4296, 0x1e62, 0x44d9, 0x189c, 0xb0c5, 0x4485, 0xb2b2, 0x42e6, 0x432f, 0x26d4, 0xa09d, 0x0530, 0xb0df, 0x42af, 0x4367, 0x1aff, 0x40c6, 0x2ceb, 0xba26, 0x4337, 0x4013, 0x42a1, 0xbf47, 0x1a0a, 0x435d, 0x4602, 0x26ee, 0x4313, 0x4128, 0x4135, 0x1ada, 0x1f63, 0x40be, 0x1a3d, 0xac4c, 0x40dd, 0x2cc1, 0x206b, 0x4224, 0xbf4e, 0xb2b9, 0x2ace, 0x1fba, 0xbad6, 0x42b6, 0xbf3e, 0xba6f, 0x41a1, 0xb0c5, 0x20d2, 0xb243, 0x1113, 0xba49, 0x04a8, 0xb253, 0xb0e5, 0xb27b, 0xba5e, 0x1f73, 0x4165, 0xb2e0, 0xb239, 0x4044, 0x431f, 0xb2ed, 0x047d, 0x2407, 0x464b, 0x1298, 0xbfc3, 0x4216, 0x1e84, 0x40c9, 0x4383, 0xb0de, 0x410b, 0xb03b, 0x41a5, 0x409b, 0x1186, 0xbfd2, 0x442c, 0xb0ed, 0x1b84, 0x06a9, 0x43d7, 0xb2ee, 0x4370, 0x420f, 0x41a9, 0x4281, 0xbf00, 0xbac5, 0xad27, 0x1f67, 0x4304, 0xbfe0, 0x4079, 0xba16, 0x425e, 0xbf2a, 0xb00d, 0xa749, 0x3c0b, 0xb00e, 0x19d6, 0xb264, 0x433f, 0x2049, 0x406c, 0xbf61, 0x420e, 0x4223, 0x41b5, 0x418e, 0x4032, 0x4012, 0x4379, 0x4323, 0x3185, 0x43ba, 0x4190, 0xb093, 0xafab, 0x4592, 0xb0b0, 0xbfae, 0x173a, 0x412d, 0x4273, 0x2c58, 0x183c, 0x4389, 0x420c, 0xb211, 0x4304, 0x43e2, 0x41eb, 0x335a, 0x431e, 0x1a7d, 0x4119, 0x12ff, 0xbf3a, 0x42c1, 0x1ea5, 0xb060, 0x4222, 0xb0d4, 0xa12d, 0x4217, 0x0a9a, 0xaa17, 0x4206, 0x445f, 0x4348, 0x20b4, 0xb209, 0xbf11, 0x4072, 0x4023, 0xbadf, 0x41f3, 0x43bf, 0xa351, 0xb266, 0x43a0, 0x1e38, 0x43a9, 0xb24b, 0x2ade, 0x4167, 0x3e49, 0x41f3, 0x4103, 0x0576, 0x433e, 0x42d4, 0xbf91, 0xb2f7, 0x45c9, 0x41b5, 0x4040, 0x3aff, 0xbac7, 0xb213, 0x4192, 0xbf00, 0xb205, 0x43e9, 0x4264, 0x1c65, 0x41e6, 0x45f4, 0xbf7b, 0x4290, 0x42dd, 0x1e56, 0xbadf, 0xb03a, 0xadad, 0x42f2, 0x404b, 0x4635, 0x1eaf, 0x46a5, 0xb25c, 0x2d7c, 0x4053, 0x4005, 0xb068, 0x42b6, 0x1a03, 0x4346, 0xa2f9, 0x402f, 0x40ed, 0xbf51, 0x4694, 0x23a6, 0x1a50, 0x29c4, 0x404b, 0x1283, 0x425c, 0x1de7, 0x40ad, 0xb205, 0x402f, 0x4399, 0x1cb5, 0x430e, 0xb2ba, 0x19d9, 0xbf1f, 0x43f4, 0x41df, 0x1cc0, 0x407d, 0x430f, 0xbf06, 0x43e0, 0xad43, 0x065c, 0x42ed, 0x260a, 0xba07, 0x4415, 0xb0c3, 0x419b, 0x180a, 0xb049, 0x38a3, 0xbf93, 0xb0f3, 0x1c0b, 0xb241, 0x417f, 0xbf9f, 0x428f, 0x39fb, 0x45e5, 0x407d, 0x4664, 0x4202, 0xbaf6, 0x43c1, 0x42a5, 0x409e, 0x4049, 0x0925, 0xadf3, 0x0581, 0x4043, 0x1a2c, 0x42ca, 0x1b73, 0xbfaa, 0xb248, 0x42bb, 0xb253, 0xb254, 0x4432, 0x43ac, 0xbaf8, 0xba1e, 0x27ea, 0xbf55, 0x17bc, 0x4193, 0x0a07, 0x198a, 0x41f9, 0xbf95, 0x4370, 0x2713, 0x3500, 0x4093, 0x41df, 0xba7c, 0x19ec, 0xb21f, 0x357a, 0x0226, 0x3727, 0x43db, 0xb0a4, 0x4017, 0xa52a, 0x4381, 0x40ae, 0xb258, 0x2d00, 0x2206, 0x4286, 0xa01c, 0x4452, 0x43b3, 0xaf31, 0x4208, 0x4342, 0x1cc8, 0x41e0, 0xbf88, 0x02a7, 0xb002, 0x394d, 0xb0f4, 0x43c2, 0x42f8, 0x413a, 0x411c, 0xbace, 0x3d27, 0x42d9, 0x1410, 0x3a6d, 0x4106, 0x027a, 0x4346, 0x408a, 0x43bb, 0x43c6, 0x41b2, 0xbf08, 0x1c77, 0x421b, 0x1322, 0x4425, 0xbace, 0x2ecb, 0x43ad, 0x4415, 0x414a, 0x420e, 0xba66, 0x41a3, 0x40eb, 0x3809, 0x2732, 0xb0b1, 0xb2dc, 0x3668, 0xbf89, 0x413a, 0xb03e, 0x3a5e, 0x41cd, 0xbf37, 0x4372, 0xb2db, 0xacdb, 0x086c, 0x42be, 0x4275, 0xbafd, 0x422b, 0x1bcc, 0x4272, 0x41c1, 0x0e46, 0x433d, 0xbfc1, 0x0ce0, 0xaaad, 0x1982, 0x42cb, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x46ce3787, 0x91b9dd82, 0x5c30a10f, 0x98b32b04, 0x61635373, 0xdfb71ffc, 0x105be440, 0x6bd3228d, 0x9979b985, 0xe4135b49, 0x78e8170d, 0x00193fd1, 0xf7f4c7a5, 0x0e660f37, 0x00000000, 0xd00001f0 }, - FinalRegs = new uint[] { 0x00001fff, 0xfffecfff, 0x0000207e, 0xe413586f, 0xffffff81, 0x00003232, 0x0000007f, 0x00000032, 0x6bd3228c, 0xf7f4ed77, 0x00000000, 0xf7f4d893, 0x00001a68, 0x1beca537, 0x00000000, 0xa00001d0 }, + Instructions = [0x1a9a, 0xaba5, 0x42a3, 0x4339, 0x43b9, 0xb263, 0xb077, 0xbf80, 0x409b, 0x4178, 0xba22, 0x439a, 0x428e, 0xb0b6, 0x404e, 0x1ae0, 0xba1e, 0x0e81, 0x41c2, 0xbfb8, 0x40e2, 0x18d2, 0x462c, 0x43c9, 0x1e7d, 0xb21b, 0x43ce, 0x45b5, 0x42d0, 0xb038, 0x42c9, 0x4238, 0x1e37, 0x42b5, 0x41cc, 0x42f9, 0xb072, 0x4154, 0x030b, 0x4384, 0x42d6, 0x46a8, 0xbf6c, 0x0ce2, 0xb24b, 0x4305, 0x4418, 0xb006, 0x404c, 0x438f, 0x438f, 0x0532, 0x41e4, 0x4290, 0x4019, 0xba4e, 0xbf54, 0x412d, 0x4202, 0x4208, 0x4614, 0x193b, 0xbf57, 0x3ef2, 0x4692, 0xbaf4, 0xad07, 0xba72, 0x4549, 0xb22f, 0x40a5, 0x4184, 0x1cf9, 0x416c, 0x421a, 0x4371, 0xba66, 0xba38, 0x1c55, 0xaa65, 0xaa8c, 0x4070, 0x0cf2, 0x1ff4, 0x1a0b, 0xbfad, 0xb219, 0x400b, 0x2178, 0x1d28, 0x43f7, 0x419f, 0x421b, 0x1f66, 0x40a0, 0x4224, 0x4370, 0x4325, 0x37c4, 0xa62d, 0xb080, 0x43e0, 0xb2a1, 0x00db, 0xab3b, 0xbf15, 0x40ae, 0x109e, 0x3d73, 0x1fc1, 0x19fb, 0x3e2e, 0x42d5, 0x1946, 0x419c, 0x4135, 0x02c7, 0x46fb, 0xb22c, 0x40b6, 0x43a1, 0x4229, 0x4382, 0x42c3, 0x422d, 0x3ecb, 0x4289, 0x407d, 0xb090, 0xbf12, 0x0c06, 0xba06, 0x4324, 0x439b, 0x440d, 0x4177, 0x41a8, 0x41d5, 0x4282, 0xbaff, 0xbfc0, 0x3148, 0x4294, 0xbfb0, 0x1b88, 0x1f7c, 0xb2ba, 0xbf9f, 0x4085, 0x421a, 0xb2d2, 0x1e81, 0x40e0, 0x41c4, 0xbade, 0x19d2, 0x4289, 0xb237, 0xba1c, 0xba3c, 0x41e1, 0xba5e, 0xb2b8, 0x41f3, 0x423a, 0xb272, 0x40d7, 0x41d2, 0x4046, 0xbf88, 0x40d6, 0x4045, 0x43ff, 0x18df, 0xa909, 0x40cf, 0x42bc, 0x4198, 0x0130, 0x071f, 0x427e, 0x45a3, 0x1b5c, 0xbf0a, 0xb222, 0x3b72, 0x4039, 0x43af, 0x1dfe, 0x4338, 0xbfc2, 0x43f5, 0x41f6, 0x4012, 0x416e, 0x1d8b, 0x1ff4, 0xb2e2, 0x29ae, 0xa123, 0xb2ef, 0xbf26, 0x1f7f, 0x347b, 0x3277, 0x41e4, 0x43b0, 0x41b1, 0x4193, 0xbf05, 0xba7f, 0xb26d, 0x2ee4, 0x1eb0, 0x43dd, 0x413e, 0x4072, 0x1b4b, 0x4047, 0xb2ae, 0xbaf6, 0x41d7, 0xa6ec, 0xbfdb, 0xb250, 0x4057, 0x2618, 0xb282, 0x4321, 0x4288, 0x400d, 0x4138, 0xa678, 0xa9a6, 0xba47, 0xb2e9, 0x1995, 0x43d3, 0x4237, 0xb03d, 0x4144, 0x46a2, 0xb206, 0x1d19, 0x1b25, 0x4389, 0x4104, 0xb066, 0x1d21, 0x1f7e, 0x2adb, 0xbfd2, 0xa0ea, 0xa87a, 0x4382, 0xb018, 0x44ba, 0x425f, 0x3c44, 0x40eb, 0x43b6, 0xb0a6, 0xba7c, 0xba0c, 0xaeec, 0x4592, 0xb036, 0xbf15, 0xba48, 0xb076, 0x4042, 0xac7c, 0x4560, 0x4003, 0xb03b, 0x1bc1, 0x0ad5, 0x4293, 0xb262, 0x1c32, 0x199d, 0x435d, 0xbf80, 0x2273, 0xb2b2, 0x427b, 0x23cc, 0xb251, 0xb09b, 0x42c1, 0x37da, 0x437a, 0xb022, 0x4384, 0x4280, 0x2b09, 0x4396, 0xbfb8, 0xb09d, 0xaebd, 0xbf34, 0x4346, 0x169e, 0x425d, 0xb036, 0x1e3d, 0x1384, 0xb00e, 0x1cce, 0x135c, 0x4266, 0x025b, 0x46cd, 0x3cf3, 0xbf9d, 0x43d8, 0x41be, 0x2ba8, 0x1ba7, 0x43b3, 0x1ae9, 0xbad7, 0x4019, 0x1deb, 0x292d, 0x413c, 0x4096, 0xb203, 0x4033, 0x1e9e, 0x40c4, 0x2339, 0xb228, 0xb090, 0xbf2a, 0x4172, 0xb22f, 0x4418, 0x162b, 0x4061, 0xa58e, 0xba40, 0x42e7, 0x41e1, 0xb27b, 0x1c28, 0x45ae, 0x41a1, 0x4383, 0x4149, 0x4382, 0x1e4c, 0xbf14, 0x40bd, 0x4209, 0x401c, 0x0482, 0x42f0, 0x4681, 0x43d3, 0x4226, 0xadee, 0x1e44, 0xb0ad, 0x417e, 0x1efc, 0xbf49, 0xb22f, 0x2bad, 0x42a4, 0x42b2, 0xba1f, 0x4562, 0x40d3, 0x4619, 0xbae8, 0xba17, 0x4154, 0xbf6a, 0x407f, 0x40e1, 0x4359, 0x42f3, 0x137f, 0xb2b2, 0x419e, 0xbf0a, 0x4277, 0x41ca, 0x4025, 0x41f8, 0x11b6, 0xb015, 0x42bc, 0xb098, 0xbf26, 0x4382, 0xba65, 0x2399, 0x44e3, 0x1b58, 0x4395, 0x30cc, 0x41c1, 0x41fa, 0x4632, 0xa687, 0x192f, 0x3f96, 0x45d8, 0x41b2, 0x4075, 0x4080, 0xbf9f, 0x43b9, 0x1902, 0x1a58, 0xb003, 0xa201, 0xb28f, 0x405c, 0x41d8, 0xb0cb, 0x42ba, 0x43c2, 0x40fa, 0x4331, 0xb294, 0xb205, 0xb0a7, 0xbfc2, 0x4268, 0x403f, 0x40bf, 0x41e1, 0x407b, 0x4013, 0x2de8, 0xbf75, 0xb039, 0x1f48, 0x428a, 0x4226, 0xba11, 0x0c28, 0x338a, 0x1d9a, 0xb075, 0x3f72, 0x3f5e, 0x4165, 0x4585, 0x3a3d, 0x427e, 0xb0b8, 0xa4b0, 0x436a, 0x4385, 0xbf02, 0x45ba, 0xb07c, 0x42b1, 0xb26b, 0xb22a, 0x4297, 0x1bda, 0x4634, 0x0a08, 0x43e7, 0x169b, 0xa98d, 0x43e2, 0x42f6, 0x42c1, 0x41c2, 0x1cfd, 0xbf48, 0x40b7, 0x40de, 0x1f98, 0xb246, 0xb03d, 0x1e78, 0x3ac4, 0x407d, 0x1862, 0xb238, 0x2451, 0xba4a, 0x445e, 0x1a72, 0x4252, 0x1d66, 0xbf41, 0x42df, 0x31d5, 0xb095, 0x41d9, 0x434b, 0x4303, 0x2470, 0x1dff, 0x469a, 0x45b8, 0x418e, 0x456e, 0x4417, 0xba49, 0xb2b7, 0x4228, 0xa06c, 0x41e7, 0xa99b, 0x36cf, 0x46c4, 0x1852, 0x142a, 0xbfce, 0x06af, 0x4135, 0xb260, 0x3bfc, 0x410a, 0xbf90, 0xb0ca, 0x4165, 0xbf2d, 0x4001, 0x42d4, 0x2d2d, 0x46e0, 0x190d, 0xbfba, 0x18a6, 0xb240, 0x4309, 0x1378, 0x466f, 0x41e6, 0xb079, 0x188f, 0x4012, 0xba77, 0x082f, 0x4018, 0xba48, 0x1786, 0xbac1, 0x1734, 0xbf73, 0x1a6e, 0x4295, 0x1bc2, 0x1956, 0x4196, 0x0623, 0x3a43, 0x4197, 0xbf91, 0xb283, 0x4234, 0x0324, 0x4663, 0x4050, 0x4364, 0xb237, 0xb22e, 0x362c, 0xb21f, 0x2ab6, 0x3262, 0x1b32, 0xbf49, 0xaf0d, 0xb2d7, 0xba6d, 0x43e4, 0xb2a6, 0xb20d, 0x390c, 0xbfcf, 0x1a4a, 0xb2df, 0x447c, 0x4555, 0x437d, 0x412f, 0xbf90, 0xb0fe, 0x43bc, 0xb210, 0xb22b, 0xba63, 0xba2e, 0x4293, 0xb015, 0x0ba7, 0xbf92, 0x1956, 0x413e, 0x40db, 0xa728, 0x4360, 0x04c0, 0xb060, 0x41fa, 0x460d, 0x4168, 0xb24f, 0xaff6, 0x4284, 0x4018, 0x002e, 0x43ea, 0xbfb4, 0x3528, 0x40d5, 0xba2d, 0x4296, 0x1e62, 0x44d9, 0x189c, 0xb0c5, 0x4485, 0xb2b2, 0x42e6, 0x432f, 0x26d4, 0xa09d, 0x0530, 0xb0df, 0x42af, 0x4367, 0x1aff, 0x40c6, 0x2ceb, 0xba26, 0x4337, 0x4013, 0x42a1, 0xbf47, 0x1a0a, 0x435d, 0x4602, 0x26ee, 0x4313, 0x4128, 0x4135, 0x1ada, 0x1f63, 0x40be, 0x1a3d, 0xac4c, 0x40dd, 0x2cc1, 0x206b, 0x4224, 0xbf4e, 0xb2b9, 0x2ace, 0x1fba, 0xbad6, 0x42b6, 0xbf3e, 0xba6f, 0x41a1, 0xb0c5, 0x20d2, 0xb243, 0x1113, 0xba49, 0x04a8, 0xb253, 0xb0e5, 0xb27b, 0xba5e, 0x1f73, 0x4165, 0xb2e0, 0xb239, 0x4044, 0x431f, 0xb2ed, 0x047d, 0x2407, 0x464b, 0x1298, 0xbfc3, 0x4216, 0x1e84, 0x40c9, 0x4383, 0xb0de, 0x410b, 0xb03b, 0x41a5, 0x409b, 0x1186, 0xbfd2, 0x442c, 0xb0ed, 0x1b84, 0x06a9, 0x43d7, 0xb2ee, 0x4370, 0x420f, 0x41a9, 0x4281, 0xbf00, 0xbac5, 0xad27, 0x1f67, 0x4304, 0xbfe0, 0x4079, 0xba16, 0x425e, 0xbf2a, 0xb00d, 0xa749, 0x3c0b, 0xb00e, 0x19d6, 0xb264, 0x433f, 0x2049, 0x406c, 0xbf61, 0x420e, 0x4223, 0x41b5, 0x418e, 0x4032, 0x4012, 0x4379, 0x4323, 0x3185, 0x43ba, 0x4190, 0xb093, 0xafab, 0x4592, 0xb0b0, 0xbfae, 0x173a, 0x412d, 0x4273, 0x2c58, 0x183c, 0x4389, 0x420c, 0xb211, 0x4304, 0x43e2, 0x41eb, 0x335a, 0x431e, 0x1a7d, 0x4119, 0x12ff, 0xbf3a, 0x42c1, 0x1ea5, 0xb060, 0x4222, 0xb0d4, 0xa12d, 0x4217, 0x0a9a, 0xaa17, 0x4206, 0x445f, 0x4348, 0x20b4, 0xb209, 0xbf11, 0x4072, 0x4023, 0xbadf, 0x41f3, 0x43bf, 0xa351, 0xb266, 0x43a0, 0x1e38, 0x43a9, 0xb24b, 0x2ade, 0x4167, 0x3e49, 0x41f3, 0x4103, 0x0576, 0x433e, 0x42d4, 0xbf91, 0xb2f7, 0x45c9, 0x41b5, 0x4040, 0x3aff, 0xbac7, 0xb213, 0x4192, 0xbf00, 0xb205, 0x43e9, 0x4264, 0x1c65, 0x41e6, 0x45f4, 0xbf7b, 0x4290, 0x42dd, 0x1e56, 0xbadf, 0xb03a, 0xadad, 0x42f2, 0x404b, 0x4635, 0x1eaf, 0x46a5, 0xb25c, 0x2d7c, 0x4053, 0x4005, 0xb068, 0x42b6, 0x1a03, 0x4346, 0xa2f9, 0x402f, 0x40ed, 0xbf51, 0x4694, 0x23a6, 0x1a50, 0x29c4, 0x404b, 0x1283, 0x425c, 0x1de7, 0x40ad, 0xb205, 0x402f, 0x4399, 0x1cb5, 0x430e, 0xb2ba, 0x19d9, 0xbf1f, 0x43f4, 0x41df, 0x1cc0, 0x407d, 0x430f, 0xbf06, 0x43e0, 0xad43, 0x065c, 0x42ed, 0x260a, 0xba07, 0x4415, 0xb0c3, 0x419b, 0x180a, 0xb049, 0x38a3, 0xbf93, 0xb0f3, 0x1c0b, 0xb241, 0x417f, 0xbf9f, 0x428f, 0x39fb, 0x45e5, 0x407d, 0x4664, 0x4202, 0xbaf6, 0x43c1, 0x42a5, 0x409e, 0x4049, 0x0925, 0xadf3, 0x0581, 0x4043, 0x1a2c, 0x42ca, 0x1b73, 0xbfaa, 0xb248, 0x42bb, 0xb253, 0xb254, 0x4432, 0x43ac, 0xbaf8, 0xba1e, 0x27ea, 0xbf55, 0x17bc, 0x4193, 0x0a07, 0x198a, 0x41f9, 0xbf95, 0x4370, 0x2713, 0x3500, 0x4093, 0x41df, 0xba7c, 0x19ec, 0xb21f, 0x357a, 0x0226, 0x3727, 0x43db, 0xb0a4, 0x4017, 0xa52a, 0x4381, 0x40ae, 0xb258, 0x2d00, 0x2206, 0x4286, 0xa01c, 0x4452, 0x43b3, 0xaf31, 0x4208, 0x4342, 0x1cc8, 0x41e0, 0xbf88, 0x02a7, 0xb002, 0x394d, 0xb0f4, 0x43c2, 0x42f8, 0x413a, 0x411c, 0xbace, 0x3d27, 0x42d9, 0x1410, 0x3a6d, 0x4106, 0x027a, 0x4346, 0x408a, 0x43bb, 0x43c6, 0x41b2, 0xbf08, 0x1c77, 0x421b, 0x1322, 0x4425, 0xbace, 0x2ecb, 0x43ad, 0x4415, 0x414a, 0x420e, 0xba66, 0x41a3, 0x40eb, 0x3809, 0x2732, 0xb0b1, 0xb2dc, 0x3668, 0xbf89, 0x413a, 0xb03e, 0x3a5e, 0x41cd, 0xbf37, 0x4372, 0xb2db, 0xacdb, 0x086c, 0x42be, 0x4275, 0xbafd, 0x422b, 0x1bcc, 0x4272, 0x41c1, 0x0e46, 0x433d, 0xbfc1, 0x0ce0, 0xaaad, 0x1982, 0x42cb, 0x4770, 0xe7fe + ], + StartRegs = [0x46ce3787, 0x91b9dd82, 0x5c30a10f, 0x98b32b04, 0x61635373, 0xdfb71ffc, 0x105be440, 0x6bd3228d, 0x9979b985, 0xe4135b49, 0x78e8170d, 0x00193fd1, 0xf7f4c7a5, 0x0e660f37, 0x00000000, 0xd00001f0 + ], + FinalRegs = [0x00001fff, 0xfffecfff, 0x0000207e, 0xe413586f, 0xffffff81, 0x00003232, 0x0000007f, 0x00000032, 0x6bd3228c, 0xf7f4ed77, 0x00000000, 0xf7f4d893, 0x00001a68, 0x1beca537, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x40de, 0xbf27, 0x1dbc, 0x42ee, 0x414f, 0xab56, 0x4170, 0x4225, 0x1b8e, 0xa89e, 0x00b6, 0x3e79, 0x46d8, 0xb2dc, 0x410d, 0x4058, 0x4395, 0x08c6, 0x43ce, 0xb000, 0xb07f, 0xa5ad, 0xbf14, 0x1da0, 0xb283, 0xbf2e, 0xb0a5, 0x425c, 0xb0ff, 0x4097, 0x3cc7, 0xb2ea, 0x406a, 0x401a, 0x4189, 0x1d12, 0x4265, 0x4167, 0x409d, 0x19c6, 0x40ef, 0xba26, 0x43e0, 0xbf94, 0xbf80, 0x1afd, 0xb067, 0xbfa0, 0xb227, 0x18c1, 0x4584, 0x249c, 0x4037, 0x1d6e, 0x462f, 0x42c7, 0xbf0d, 0xaf08, 0x1c64, 0xba1d, 0x40b0, 0x41a4, 0xa66a, 0x41b1, 0x4164, 0x1108, 0xbfb0, 0x096a, 0xb25f, 0x41aa, 0x1af7, 0x28de, 0x44a1, 0xb261, 0x4084, 0x43bd, 0xbfd3, 0x423d, 0x2de7, 0x1d14, 0x4079, 0xa83f, 0x41fb, 0xb216, 0x0c50, 0x1b4f, 0x42ec, 0xb212, 0x4085, 0x4211, 0x42a1, 0x1fdd, 0x4288, 0xba4e, 0x1029, 0x1d39, 0x3e7c, 0x4175, 0x4065, 0xb045, 0x40a2, 0xa278, 0xba5b, 0xbfd0, 0xad9f, 0xafe7, 0xbfdd, 0x1c5c, 0xb055, 0x3b51, 0x420c, 0xa911, 0x45b2, 0x43f3, 0xbf14, 0x403f, 0x3b14, 0x406f, 0x43c3, 0x41f5, 0x0da8, 0x4083, 0x09b3, 0xb20d, 0xaa12, 0xb022, 0x4693, 0xbf87, 0xba59, 0x165c, 0xb299, 0x19e1, 0x410a, 0x072b, 0xb236, 0x427d, 0x4310, 0xb2b1, 0x43c9, 0xaf02, 0x1ff3, 0xbf27, 0xadf3, 0xaec5, 0x42ee, 0x426e, 0xbfb6, 0x4153, 0x143e, 0x4354, 0x3bde, 0x2571, 0xaaa9, 0xbfb2, 0x401a, 0x4014, 0x186d, 0x1b1d, 0x1d49, 0xb0ed, 0xbfe2, 0x0f4b, 0xb28e, 0x4353, 0x2d51, 0xb219, 0x2806, 0x4614, 0x4046, 0x0727, 0x439d, 0xb2d1, 0xa936, 0xb21c, 0x2643, 0x4338, 0x4115, 0x2663, 0x1fab, 0xb234, 0x4484, 0x46ad, 0x1de8, 0xb291, 0x4379, 0x3751, 0x4672, 0xb23e, 0xbfa3, 0x411f, 0xb217, 0xb0af, 0xba5f, 0xb287, 0xba1a, 0x40b7, 0x428f, 0x4179, 0xbaf8, 0x42ba, 0xb01d, 0xb216, 0x432e, 0x411c, 0x405c, 0x10dd, 0x4358, 0x4277, 0x1b1d, 0x1afd, 0x442f, 0x408e, 0xbf1a, 0xb2d1, 0x20f4, 0x42e0, 0x1865, 0x4360, 0x419b, 0xad85, 0xbf47, 0x42dc, 0x1c28, 0x099a, 0xb021, 0x42c6, 0x3001, 0x4204, 0xb04c, 0x43cc, 0x4011, 0x4383, 0x42c0, 0x42b8, 0x426c, 0x431e, 0x4073, 0xb0de, 0xbf7d, 0xbadf, 0x1b97, 0x44dd, 0xba7a, 0x43a2, 0x2527, 0x1e82, 0x17ea, 0x1ae3, 0x1f1f, 0x40ad, 0xaf9c, 0x44f8, 0xa34e, 0x19ef, 0x3993, 0xbf9a, 0xb246, 0xba3a, 0x2ae0, 0x40b1, 0x230a, 0x41c9, 0x41d8, 0x4612, 0x4217, 0xb2af, 0x0e46, 0x469b, 0x06c2, 0xbfbd, 0xb2d8, 0xb20c, 0xb278, 0xa4ee, 0x4220, 0x2bee, 0xbf03, 0x0713, 0x46a4, 0xb296, 0x45c9, 0x381e, 0x26f9, 0x2596, 0xb20d, 0x1855, 0x31ca, 0xabe7, 0x1e1f, 0xbf95, 0x42ec, 0x4335, 0xb261, 0xba75, 0xba1e, 0xb2e6, 0xb277, 0x41ff, 0x408f, 0x1968, 0x401a, 0xb03f, 0x02b7, 0xb000, 0x3dd6, 0x4165, 0x42c7, 0x4159, 0xbfa8, 0x433e, 0x0a1e, 0x42bf, 0x145b, 0xbaf9, 0x4327, 0x4355, 0xafcf, 0x2661, 0x3e86, 0x415c, 0xa1d9, 0xbae1, 0x1dba, 0xa6de, 0x3bcb, 0xbfd0, 0x1fe8, 0x0997, 0x4268, 0x42d9, 0x432c, 0x3238, 0x1bbb, 0x4076, 0xbfc7, 0x0e40, 0x078c, 0x42ad, 0x2739, 0x3255, 0xbf88, 0x4096, 0x1d9a, 0xb228, 0xbfc1, 0x4025, 0x4021, 0xb21a, 0x41ac, 0x410a, 0x40bb, 0x1b99, 0x22c4, 0xaf4c, 0x21f4, 0x40fc, 0xb0d0, 0xbf18, 0x1ce1, 0xba1c, 0x1d77, 0xb08c, 0xb2ca, 0x160e, 0x1660, 0x0400, 0x41c4, 0x4038, 0x40d4, 0x19d5, 0x40de, 0x4216, 0xb0f3, 0x05c6, 0xba08, 0x2094, 0x18df, 0x43a2, 0x0d66, 0x42b6, 0xbf5d, 0x4088, 0x4150, 0x4207, 0x1fc0, 0x434d, 0xba10, 0x404c, 0x43da, 0xbfd4, 0xa24f, 0xba3a, 0xba01, 0x0721, 0xba0d, 0x41eb, 0xb2d4, 0xb2f9, 0x40d5, 0x423a, 0x430f, 0x41d1, 0x19f0, 0x179f, 0x42a6, 0x4325, 0x37cd, 0x1943, 0x43a7, 0xbf38, 0x3469, 0xbf55, 0xb024, 0x415e, 0xb24e, 0xb042, 0xb29f, 0xb257, 0x43d5, 0x421c, 0x017e, 0x33bd, 0x3636, 0x4102, 0x40b7, 0x4562, 0xb092, 0x42dd, 0xbac5, 0x4352, 0xbf64, 0x4608, 0xa1f5, 0x1810, 0xb080, 0xa0f4, 0x4373, 0x40bb, 0x43f3, 0x42bb, 0x4372, 0x0653, 0x41c3, 0x4205, 0xbafa, 0x0977, 0xbaff, 0xb2c9, 0x43e7, 0xba3e, 0x443d, 0x4390, 0xbf80, 0x409d, 0x42ae, 0x1d3a, 0xb0dd, 0xbfa7, 0xba14, 0x43c7, 0x4064, 0xab20, 0x41a3, 0xb22f, 0x41f3, 0x4338, 0x4088, 0xa77f, 0x3c19, 0x4212, 0x41a2, 0x407b, 0x0a0e, 0x41df, 0x1fba, 0xba60, 0x1432, 0x1fdf, 0x4082, 0x1b87, 0x2588, 0x430b, 0xaf0a, 0xbf44, 0xba6c, 0xbace, 0x16c6, 0x1fb1, 0xa6d9, 0x1b20, 0x4246, 0x2523, 0x00c0, 0x43b2, 0x4612, 0xb0a6, 0x4180, 0x46bb, 0x42da, 0x430f, 0xb2ac, 0xbafe, 0x4655, 0xb2d3, 0xba32, 0xbfb8, 0x4259, 0x1f8c, 0x40d1, 0x415f, 0x404d, 0x4418, 0x40db, 0x43d8, 0x08aa, 0x1e2b, 0x1ef5, 0x41fe, 0x4346, 0x4269, 0xadc3, 0xb2f5, 0x42ab, 0xb0c9, 0xb034, 0x28d6, 0x4276, 0xba16, 0x4294, 0xad99, 0x418f, 0x06b5, 0xbfba, 0x427c, 0x4542, 0xb2fa, 0xa6ac, 0x418d, 0x4564, 0xb04e, 0xbf80, 0x3973, 0x3f72, 0x1830, 0xbfd2, 0xacbf, 0xbaf1, 0x4546, 0x203c, 0x1a47, 0x28e1, 0xbf2e, 0xb235, 0x1eae, 0x4195, 0x1476, 0x43da, 0x4450, 0x428b, 0xb22d, 0xbfd0, 0x1805, 0xba04, 0x1a83, 0x297b, 0x403a, 0x1fca, 0xbaf8, 0x40b6, 0x43c5, 0x3560, 0x43f8, 0x416d, 0xba13, 0x4329, 0xa727, 0x159f, 0x4212, 0xbad7, 0x4085, 0xbfb5, 0x33d8, 0x4388, 0xb280, 0xba44, 0x41cd, 0x1f18, 0x40ae, 0x437a, 0xb081, 0x4340, 0x4163, 0x1a20, 0xbad1, 0xbf03, 0x4390, 0x41d0, 0x40c1, 0x1ff4, 0xb299, 0xbfd0, 0x1bc9, 0xbad6, 0x16cb, 0x4062, 0x1c0c, 0x41df, 0x401b, 0x40e3, 0x4103, 0xa549, 0xbfb0, 0x3b0b, 0x4405, 0x40ca, 0xb290, 0x4100, 0x433c, 0x424b, 0x2d35, 0x46eb, 0xbf70, 0x40ae, 0xbf9d, 0x425c, 0x41c5, 0x4168, 0x434a, 0xbfd6, 0x25f5, 0x43b9, 0x3278, 0x432d, 0x3711, 0x181a, 0x1b7e, 0xba70, 0x437d, 0xb2ed, 0x259f, 0x19f0, 0x1c30, 0x1b3b, 0x43df, 0x443a, 0xb29a, 0x4091, 0xad24, 0xbfaa, 0x419b, 0x25e8, 0x20d2, 0xb2f9, 0xba50, 0x42ef, 0x42b5, 0x368e, 0x3a76, 0xb240, 0x1e37, 0xbafb, 0x42ac, 0x1a73, 0x2848, 0xb0a9, 0x4656, 0x4138, 0xbad8, 0x4115, 0x42ba, 0x425b, 0x414f, 0x430f, 0xb2f1, 0x1ec6, 0xbf37, 0x4171, 0x41a4, 0x41bd, 0x1911, 0xb268, 0x44e9, 0xac0d, 0x3861, 0xb2cf, 0x425a, 0x0c98, 0x1799, 0x3eca, 0x1076, 0xba36, 0x35c9, 0x1a07, 0x4131, 0x4312, 0xbf14, 0x41df, 0x40fc, 0x1d3f, 0x424b, 0x4332, 0x4186, 0xbfc2, 0x42cb, 0x4202, 0xb202, 0xb2d1, 0x1331, 0x2071, 0xb2a9, 0x41ea, 0x4129, 0xab06, 0x4396, 0x41aa, 0x1d8b, 0xba52, 0xb23f, 0x07dd, 0xa183, 0x19f1, 0x05cf, 0x1809, 0x434c, 0xbf84, 0x4008, 0x4286, 0x4289, 0x0abd, 0x20ef, 0xb2ed, 0x1a86, 0x43f6, 0xbadc, 0x4257, 0x3cd6, 0xb207, 0x43ab, 0xbf90, 0xb2d2, 0x4208, 0x405f, 0x1bad, 0x4315, 0x0b32, 0xbf74, 0xbfd0, 0x3ed1, 0x4074, 0x423c, 0x40fd, 0x441c, 0xa2af, 0x2616, 0x2ca8, 0x11e7, 0x438b, 0x43d2, 0x046c, 0xbfbd, 0x18f0, 0x1c25, 0x42fc, 0x43c8, 0x03e7, 0x409d, 0x4277, 0x46f3, 0x4162, 0xbf14, 0xa46b, 0xaf5f, 0x16cb, 0x422b, 0xabe0, 0x0653, 0x0cb8, 0xb2ca, 0xb286, 0x1b6d, 0x4134, 0x215e, 0x437f, 0x4049, 0x41c9, 0x1b35, 0x4214, 0x4048, 0xbf42, 0x43ca, 0xb2ac, 0x43de, 0xa5f1, 0x42b0, 0xb075, 0x413f, 0xba3c, 0x41f2, 0x1d5b, 0x1b0f, 0x3cad, 0x4175, 0x43df, 0xbfd0, 0xb081, 0x0b73, 0x4330, 0xb079, 0x41ec, 0xb232, 0x4621, 0xb06e, 0x400f, 0xa68f, 0x2c56, 0x42f3, 0x1a96, 0xbfab, 0x418c, 0x43b6, 0x4360, 0x4310, 0x1012, 0x4315, 0x42c4, 0x1df4, 0x41ed, 0x2de9, 0x4277, 0x46c8, 0x411e, 0xbf9a, 0xba26, 0xbfd0, 0x4229, 0x1deb, 0x42b0, 0xb245, 0x40bc, 0x426e, 0x42af, 0xb2a0, 0x427c, 0x4262, 0x43ae, 0x4648, 0x4346, 0x40a4, 0x4135, 0xba30, 0x1a4b, 0x437f, 0x402b, 0x4064, 0x2f49, 0x4699, 0xa05f, 0xbaeb, 0x08a5, 0xbf32, 0xba5a, 0x19b5, 0x1807, 0x43d6, 0x4243, 0x4548, 0x015d, 0x09fa, 0x4161, 0x40c3, 0x1528, 0x22e7, 0x43e1, 0x40c1, 0x42f5, 0x4219, 0x1719, 0x4391, 0xba42, 0x1aa8, 0x42de, 0xba05, 0x40e1, 0x42b8, 0x46e2, 0xb07e, 0xbf16, 0x435c, 0x4255, 0x42a5, 0x414d, 0x0353, 0x423e, 0xb0ac, 0xaf6a, 0xbf6d, 0x423a, 0x4303, 0x42b4, 0x42ff, 0xbf09, 0x4043, 0x4052, 0x42cb, 0x439d, 0x3cae, 0x1752, 0xbff0, 0x4120, 0x1b16, 0x42cd, 0xb0bd, 0x4109, 0xbf2b, 0xba63, 0x415b, 0x1f93, 0xbaff, 0xb25c, 0x4327, 0xb0ea, 0x456f, 0xb280, 0x41da, 0x2a24, 0x184d, 0x420f, 0x400b, 0x42d8, 0xb200, 0xb270, 0xb050, 0xba5b, 0xb20b, 0x1eb7, 0x432e, 0xbfd1, 0x4367, 0x2e30, 0xb225, 0x43d0, 0x4211, 0xb2e7, 0x40b4, 0x41b3, 0xba16, 0x409e, 0x1452, 0x28cd, 0x4342, 0x335d, 0x25d5, 0x1fcb, 0x0ab1, 0x4179, 0x40a2, 0xb213, 0x4113, 0x298a, 0x415c, 0x4209, 0x42dd, 0x41c1, 0xb0f2, 0x423a, 0x4021, 0xbf8c, 0x0529, 0xa789, 0xbae0, 0xb217, 0x4195, 0x42dd, 0x424a, 0x40dc, 0x429b, 0x18b2, 0xb228, 0x4288, 0x171a, 0x438a, 0xb2a5, 0x4453, 0xb04f, 0x0047, 0xb27d, 0xbfbf, 0x3cd5, 0xb294, 0x1550, 0x402f, 0xb027, 0x1e0f, 0x43b7, 0x42bb, 0xbf9c, 0xa295, 0x43c2, 0xb2b3, 0xaec7, 0x4168, 0x43bd, 0xb09b, 0xbae4, 0x40dc, 0x4351, 0x4266, 0x0b06, 0xb24c, 0x18ee, 0x41b7, 0xbf7c, 0x43fc, 0x420c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x1c45d6ba, 0x53e984f2, 0x3a0df554, 0xdcee8efa, 0x8d61a15b, 0x42a11c1a, 0xe46650af, 0x77ca9117, 0x8878f892, 0x1c01e917, 0x9521508e, 0x1cb29f47, 0xca2a8d7c, 0xe5798906, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x0000007d, 0x00000000, 0x00000000, 0x00000000, 0xffffffa8, 0xffffffa8, 0xffffffa8, 0x00000057, 0x017b7293, 0x00000000, 0xca2a8d7b, 0x00000000, 0xca2a8d7b, 0xe5798e79, 0x00000000, 0x400001d0 }, + Instructions = [0x40de, 0xbf27, 0x1dbc, 0x42ee, 0x414f, 0xab56, 0x4170, 0x4225, 0x1b8e, 0xa89e, 0x00b6, 0x3e79, 0x46d8, 0xb2dc, 0x410d, 0x4058, 0x4395, 0x08c6, 0x43ce, 0xb000, 0xb07f, 0xa5ad, 0xbf14, 0x1da0, 0xb283, 0xbf2e, 0xb0a5, 0x425c, 0xb0ff, 0x4097, 0x3cc7, 0xb2ea, 0x406a, 0x401a, 0x4189, 0x1d12, 0x4265, 0x4167, 0x409d, 0x19c6, 0x40ef, 0xba26, 0x43e0, 0xbf94, 0xbf80, 0x1afd, 0xb067, 0xbfa0, 0xb227, 0x18c1, 0x4584, 0x249c, 0x4037, 0x1d6e, 0x462f, 0x42c7, 0xbf0d, 0xaf08, 0x1c64, 0xba1d, 0x40b0, 0x41a4, 0xa66a, 0x41b1, 0x4164, 0x1108, 0xbfb0, 0x096a, 0xb25f, 0x41aa, 0x1af7, 0x28de, 0x44a1, 0xb261, 0x4084, 0x43bd, 0xbfd3, 0x423d, 0x2de7, 0x1d14, 0x4079, 0xa83f, 0x41fb, 0xb216, 0x0c50, 0x1b4f, 0x42ec, 0xb212, 0x4085, 0x4211, 0x42a1, 0x1fdd, 0x4288, 0xba4e, 0x1029, 0x1d39, 0x3e7c, 0x4175, 0x4065, 0xb045, 0x40a2, 0xa278, 0xba5b, 0xbfd0, 0xad9f, 0xafe7, 0xbfdd, 0x1c5c, 0xb055, 0x3b51, 0x420c, 0xa911, 0x45b2, 0x43f3, 0xbf14, 0x403f, 0x3b14, 0x406f, 0x43c3, 0x41f5, 0x0da8, 0x4083, 0x09b3, 0xb20d, 0xaa12, 0xb022, 0x4693, 0xbf87, 0xba59, 0x165c, 0xb299, 0x19e1, 0x410a, 0x072b, 0xb236, 0x427d, 0x4310, 0xb2b1, 0x43c9, 0xaf02, 0x1ff3, 0xbf27, 0xadf3, 0xaec5, 0x42ee, 0x426e, 0xbfb6, 0x4153, 0x143e, 0x4354, 0x3bde, 0x2571, 0xaaa9, 0xbfb2, 0x401a, 0x4014, 0x186d, 0x1b1d, 0x1d49, 0xb0ed, 0xbfe2, 0x0f4b, 0xb28e, 0x4353, 0x2d51, 0xb219, 0x2806, 0x4614, 0x4046, 0x0727, 0x439d, 0xb2d1, 0xa936, 0xb21c, 0x2643, 0x4338, 0x4115, 0x2663, 0x1fab, 0xb234, 0x4484, 0x46ad, 0x1de8, 0xb291, 0x4379, 0x3751, 0x4672, 0xb23e, 0xbfa3, 0x411f, 0xb217, 0xb0af, 0xba5f, 0xb287, 0xba1a, 0x40b7, 0x428f, 0x4179, 0xbaf8, 0x42ba, 0xb01d, 0xb216, 0x432e, 0x411c, 0x405c, 0x10dd, 0x4358, 0x4277, 0x1b1d, 0x1afd, 0x442f, 0x408e, 0xbf1a, 0xb2d1, 0x20f4, 0x42e0, 0x1865, 0x4360, 0x419b, 0xad85, 0xbf47, 0x42dc, 0x1c28, 0x099a, 0xb021, 0x42c6, 0x3001, 0x4204, 0xb04c, 0x43cc, 0x4011, 0x4383, 0x42c0, 0x42b8, 0x426c, 0x431e, 0x4073, 0xb0de, 0xbf7d, 0xbadf, 0x1b97, 0x44dd, 0xba7a, 0x43a2, 0x2527, 0x1e82, 0x17ea, 0x1ae3, 0x1f1f, 0x40ad, 0xaf9c, 0x44f8, 0xa34e, 0x19ef, 0x3993, 0xbf9a, 0xb246, 0xba3a, 0x2ae0, 0x40b1, 0x230a, 0x41c9, 0x41d8, 0x4612, 0x4217, 0xb2af, 0x0e46, 0x469b, 0x06c2, 0xbfbd, 0xb2d8, 0xb20c, 0xb278, 0xa4ee, 0x4220, 0x2bee, 0xbf03, 0x0713, 0x46a4, 0xb296, 0x45c9, 0x381e, 0x26f9, 0x2596, 0xb20d, 0x1855, 0x31ca, 0xabe7, 0x1e1f, 0xbf95, 0x42ec, 0x4335, 0xb261, 0xba75, 0xba1e, 0xb2e6, 0xb277, 0x41ff, 0x408f, 0x1968, 0x401a, 0xb03f, 0x02b7, 0xb000, 0x3dd6, 0x4165, 0x42c7, 0x4159, 0xbfa8, 0x433e, 0x0a1e, 0x42bf, 0x145b, 0xbaf9, 0x4327, 0x4355, 0xafcf, 0x2661, 0x3e86, 0x415c, 0xa1d9, 0xbae1, 0x1dba, 0xa6de, 0x3bcb, 0xbfd0, 0x1fe8, 0x0997, 0x4268, 0x42d9, 0x432c, 0x3238, 0x1bbb, 0x4076, 0xbfc7, 0x0e40, 0x078c, 0x42ad, 0x2739, 0x3255, 0xbf88, 0x4096, 0x1d9a, 0xb228, 0xbfc1, 0x4025, 0x4021, 0xb21a, 0x41ac, 0x410a, 0x40bb, 0x1b99, 0x22c4, 0xaf4c, 0x21f4, 0x40fc, 0xb0d0, 0xbf18, 0x1ce1, 0xba1c, 0x1d77, 0xb08c, 0xb2ca, 0x160e, 0x1660, 0x0400, 0x41c4, 0x4038, 0x40d4, 0x19d5, 0x40de, 0x4216, 0xb0f3, 0x05c6, 0xba08, 0x2094, 0x18df, 0x43a2, 0x0d66, 0x42b6, 0xbf5d, 0x4088, 0x4150, 0x4207, 0x1fc0, 0x434d, 0xba10, 0x404c, 0x43da, 0xbfd4, 0xa24f, 0xba3a, 0xba01, 0x0721, 0xba0d, 0x41eb, 0xb2d4, 0xb2f9, 0x40d5, 0x423a, 0x430f, 0x41d1, 0x19f0, 0x179f, 0x42a6, 0x4325, 0x37cd, 0x1943, 0x43a7, 0xbf38, 0x3469, 0xbf55, 0xb024, 0x415e, 0xb24e, 0xb042, 0xb29f, 0xb257, 0x43d5, 0x421c, 0x017e, 0x33bd, 0x3636, 0x4102, 0x40b7, 0x4562, 0xb092, 0x42dd, 0xbac5, 0x4352, 0xbf64, 0x4608, 0xa1f5, 0x1810, 0xb080, 0xa0f4, 0x4373, 0x40bb, 0x43f3, 0x42bb, 0x4372, 0x0653, 0x41c3, 0x4205, 0xbafa, 0x0977, 0xbaff, 0xb2c9, 0x43e7, 0xba3e, 0x443d, 0x4390, 0xbf80, 0x409d, 0x42ae, 0x1d3a, 0xb0dd, 0xbfa7, 0xba14, 0x43c7, 0x4064, 0xab20, 0x41a3, 0xb22f, 0x41f3, 0x4338, 0x4088, 0xa77f, 0x3c19, 0x4212, 0x41a2, 0x407b, 0x0a0e, 0x41df, 0x1fba, 0xba60, 0x1432, 0x1fdf, 0x4082, 0x1b87, 0x2588, 0x430b, 0xaf0a, 0xbf44, 0xba6c, 0xbace, 0x16c6, 0x1fb1, 0xa6d9, 0x1b20, 0x4246, 0x2523, 0x00c0, 0x43b2, 0x4612, 0xb0a6, 0x4180, 0x46bb, 0x42da, 0x430f, 0xb2ac, 0xbafe, 0x4655, 0xb2d3, 0xba32, 0xbfb8, 0x4259, 0x1f8c, 0x40d1, 0x415f, 0x404d, 0x4418, 0x40db, 0x43d8, 0x08aa, 0x1e2b, 0x1ef5, 0x41fe, 0x4346, 0x4269, 0xadc3, 0xb2f5, 0x42ab, 0xb0c9, 0xb034, 0x28d6, 0x4276, 0xba16, 0x4294, 0xad99, 0x418f, 0x06b5, 0xbfba, 0x427c, 0x4542, 0xb2fa, 0xa6ac, 0x418d, 0x4564, 0xb04e, 0xbf80, 0x3973, 0x3f72, 0x1830, 0xbfd2, 0xacbf, 0xbaf1, 0x4546, 0x203c, 0x1a47, 0x28e1, 0xbf2e, 0xb235, 0x1eae, 0x4195, 0x1476, 0x43da, 0x4450, 0x428b, 0xb22d, 0xbfd0, 0x1805, 0xba04, 0x1a83, 0x297b, 0x403a, 0x1fca, 0xbaf8, 0x40b6, 0x43c5, 0x3560, 0x43f8, 0x416d, 0xba13, 0x4329, 0xa727, 0x159f, 0x4212, 0xbad7, 0x4085, 0xbfb5, 0x33d8, 0x4388, 0xb280, 0xba44, 0x41cd, 0x1f18, 0x40ae, 0x437a, 0xb081, 0x4340, 0x4163, 0x1a20, 0xbad1, 0xbf03, 0x4390, 0x41d0, 0x40c1, 0x1ff4, 0xb299, 0xbfd0, 0x1bc9, 0xbad6, 0x16cb, 0x4062, 0x1c0c, 0x41df, 0x401b, 0x40e3, 0x4103, 0xa549, 0xbfb0, 0x3b0b, 0x4405, 0x40ca, 0xb290, 0x4100, 0x433c, 0x424b, 0x2d35, 0x46eb, 0xbf70, 0x40ae, 0xbf9d, 0x425c, 0x41c5, 0x4168, 0x434a, 0xbfd6, 0x25f5, 0x43b9, 0x3278, 0x432d, 0x3711, 0x181a, 0x1b7e, 0xba70, 0x437d, 0xb2ed, 0x259f, 0x19f0, 0x1c30, 0x1b3b, 0x43df, 0x443a, 0xb29a, 0x4091, 0xad24, 0xbfaa, 0x419b, 0x25e8, 0x20d2, 0xb2f9, 0xba50, 0x42ef, 0x42b5, 0x368e, 0x3a76, 0xb240, 0x1e37, 0xbafb, 0x42ac, 0x1a73, 0x2848, 0xb0a9, 0x4656, 0x4138, 0xbad8, 0x4115, 0x42ba, 0x425b, 0x414f, 0x430f, 0xb2f1, 0x1ec6, 0xbf37, 0x4171, 0x41a4, 0x41bd, 0x1911, 0xb268, 0x44e9, 0xac0d, 0x3861, 0xb2cf, 0x425a, 0x0c98, 0x1799, 0x3eca, 0x1076, 0xba36, 0x35c9, 0x1a07, 0x4131, 0x4312, 0xbf14, 0x41df, 0x40fc, 0x1d3f, 0x424b, 0x4332, 0x4186, 0xbfc2, 0x42cb, 0x4202, 0xb202, 0xb2d1, 0x1331, 0x2071, 0xb2a9, 0x41ea, 0x4129, 0xab06, 0x4396, 0x41aa, 0x1d8b, 0xba52, 0xb23f, 0x07dd, 0xa183, 0x19f1, 0x05cf, 0x1809, 0x434c, 0xbf84, 0x4008, 0x4286, 0x4289, 0x0abd, 0x20ef, 0xb2ed, 0x1a86, 0x43f6, 0xbadc, 0x4257, 0x3cd6, 0xb207, 0x43ab, 0xbf90, 0xb2d2, 0x4208, 0x405f, 0x1bad, 0x4315, 0x0b32, 0xbf74, 0xbfd0, 0x3ed1, 0x4074, 0x423c, 0x40fd, 0x441c, 0xa2af, 0x2616, 0x2ca8, 0x11e7, 0x438b, 0x43d2, 0x046c, 0xbfbd, 0x18f0, 0x1c25, 0x42fc, 0x43c8, 0x03e7, 0x409d, 0x4277, 0x46f3, 0x4162, 0xbf14, 0xa46b, 0xaf5f, 0x16cb, 0x422b, 0xabe0, 0x0653, 0x0cb8, 0xb2ca, 0xb286, 0x1b6d, 0x4134, 0x215e, 0x437f, 0x4049, 0x41c9, 0x1b35, 0x4214, 0x4048, 0xbf42, 0x43ca, 0xb2ac, 0x43de, 0xa5f1, 0x42b0, 0xb075, 0x413f, 0xba3c, 0x41f2, 0x1d5b, 0x1b0f, 0x3cad, 0x4175, 0x43df, 0xbfd0, 0xb081, 0x0b73, 0x4330, 0xb079, 0x41ec, 0xb232, 0x4621, 0xb06e, 0x400f, 0xa68f, 0x2c56, 0x42f3, 0x1a96, 0xbfab, 0x418c, 0x43b6, 0x4360, 0x4310, 0x1012, 0x4315, 0x42c4, 0x1df4, 0x41ed, 0x2de9, 0x4277, 0x46c8, 0x411e, 0xbf9a, 0xba26, 0xbfd0, 0x4229, 0x1deb, 0x42b0, 0xb245, 0x40bc, 0x426e, 0x42af, 0xb2a0, 0x427c, 0x4262, 0x43ae, 0x4648, 0x4346, 0x40a4, 0x4135, 0xba30, 0x1a4b, 0x437f, 0x402b, 0x4064, 0x2f49, 0x4699, 0xa05f, 0xbaeb, 0x08a5, 0xbf32, 0xba5a, 0x19b5, 0x1807, 0x43d6, 0x4243, 0x4548, 0x015d, 0x09fa, 0x4161, 0x40c3, 0x1528, 0x22e7, 0x43e1, 0x40c1, 0x42f5, 0x4219, 0x1719, 0x4391, 0xba42, 0x1aa8, 0x42de, 0xba05, 0x40e1, 0x42b8, 0x46e2, 0xb07e, 0xbf16, 0x435c, 0x4255, 0x42a5, 0x414d, 0x0353, 0x423e, 0xb0ac, 0xaf6a, 0xbf6d, 0x423a, 0x4303, 0x42b4, 0x42ff, 0xbf09, 0x4043, 0x4052, 0x42cb, 0x439d, 0x3cae, 0x1752, 0xbff0, 0x4120, 0x1b16, 0x42cd, 0xb0bd, 0x4109, 0xbf2b, 0xba63, 0x415b, 0x1f93, 0xbaff, 0xb25c, 0x4327, 0xb0ea, 0x456f, 0xb280, 0x41da, 0x2a24, 0x184d, 0x420f, 0x400b, 0x42d8, 0xb200, 0xb270, 0xb050, 0xba5b, 0xb20b, 0x1eb7, 0x432e, 0xbfd1, 0x4367, 0x2e30, 0xb225, 0x43d0, 0x4211, 0xb2e7, 0x40b4, 0x41b3, 0xba16, 0x409e, 0x1452, 0x28cd, 0x4342, 0x335d, 0x25d5, 0x1fcb, 0x0ab1, 0x4179, 0x40a2, 0xb213, 0x4113, 0x298a, 0x415c, 0x4209, 0x42dd, 0x41c1, 0xb0f2, 0x423a, 0x4021, 0xbf8c, 0x0529, 0xa789, 0xbae0, 0xb217, 0x4195, 0x42dd, 0x424a, 0x40dc, 0x429b, 0x18b2, 0xb228, 0x4288, 0x171a, 0x438a, 0xb2a5, 0x4453, 0xb04f, 0x0047, 0xb27d, 0xbfbf, 0x3cd5, 0xb294, 0x1550, 0x402f, 0xb027, 0x1e0f, 0x43b7, 0x42bb, 0xbf9c, 0xa295, 0x43c2, 0xb2b3, 0xaec7, 0x4168, 0x43bd, 0xb09b, 0xbae4, 0x40dc, 0x4351, 0x4266, 0x0b06, 0xb24c, 0x18ee, 0x41b7, 0xbf7c, 0x43fc, 0x420c, 0x4770, 0xe7fe + ], + StartRegs = [0x1c45d6ba, 0x53e984f2, 0x3a0df554, 0xdcee8efa, 0x8d61a15b, 0x42a11c1a, 0xe46650af, 0x77ca9117, 0x8878f892, 0x1c01e917, 0x9521508e, 0x1cb29f47, 0xca2a8d7c, 0xe5798906, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x0000007d, 0x00000000, 0x00000000, 0x00000000, 0xffffffa8, 0xffffffa8, 0xffffffa8, 0x00000057, 0x017b7293, 0x00000000, 0xca2a8d7b, 0x00000000, 0xca2a8d7b, 0xe5798e79, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x1ed2, 0xb283, 0x434a, 0x3937, 0x4179, 0x4253, 0x4017, 0x023f, 0x42bc, 0x408d, 0xb22a, 0x4268, 0xba5b, 0x1a31, 0x40a2, 0x1dd9, 0x2161, 0x4449, 0x4000, 0x402e, 0x41ce, 0xbf83, 0xba1e, 0x44b0, 0xba18, 0x425e, 0xa764, 0xbfc0, 0x406f, 0x40bd, 0xb0b7, 0xa99c, 0x4005, 0xa0c2, 0x41a4, 0x3ff8, 0x402c, 0x036d, 0xbf57, 0x3e68, 0x4153, 0xb0e0, 0x4689, 0x42e0, 0x406f, 0x40c8, 0xb0b1, 0x4593, 0x40f8, 0xb2d1, 0xa877, 0x4379, 0x434e, 0xba1e, 0xbf71, 0xba71, 0xb2b1, 0xb0c1, 0xb232, 0x41fc, 0x463f, 0x4069, 0xb25b, 0x4241, 0xb2c0, 0x405a, 0x4048, 0xba32, 0x4258, 0x41ef, 0xbf78, 0x0754, 0xb277, 0xbf60, 0x4089, 0xba4a, 0x4074, 0xb252, 0xb2cb, 0x4134, 0x434c, 0x43e1, 0x1e9c, 0x1c02, 0x40a7, 0xb24e, 0x1e02, 0xbf17, 0x3511, 0xb2a3, 0xba19, 0xaccd, 0x4091, 0x1fc1, 0xb057, 0x43b8, 0xb2c8, 0x4180, 0x377e, 0x43d3, 0x09e2, 0x4266, 0xb26c, 0xbf1f, 0x4260, 0xb24e, 0xb24a, 0xb2ac, 0xbfd0, 0xba7a, 0x45b2, 0x4038, 0x418f, 0x15f9, 0xba63, 0xba2d, 0x42f3, 0x403e, 0x4038, 0x41c9, 0x4152, 0x2ee7, 0x4259, 0x0226, 0xbf41, 0x21d2, 0x4430, 0x4007, 0x17ed, 0xbfbd, 0x4058, 0x3e16, 0x407a, 0x40e3, 0x41a0, 0x43d8, 0x404a, 0x40f2, 0x1605, 0x42a3, 0x4631, 0x44f0, 0xbfe0, 0xa21c, 0x290b, 0xaade, 0x40aa, 0x43ae, 0x4126, 0x29c9, 0x420d, 0xbfa4, 0xba6b, 0x41cc, 0x2a49, 0xa316, 0x4308, 0xb04c, 0x4261, 0x0a3b, 0x27f8, 0x422b, 0x02f7, 0x401f, 0x4084, 0xa4c4, 0x1d89, 0xaf46, 0x4159, 0xbad0, 0xb287, 0x41f4, 0x0ae8, 0x423b, 0x3f2b, 0xb210, 0x41bf, 0xbfa5, 0x4333, 0x447e, 0x4403, 0xb24d, 0xbf80, 0x4201, 0x40ff, 0xb2da, 0x41df, 0xb2fa, 0x4257, 0x4366, 0x43e5, 0xbfba, 0x431d, 0x4558, 0xb296, 0xba51, 0xbacf, 0x4313, 0xbadd, 0x40e6, 0x25fe, 0x4223, 0xb2e4, 0x400a, 0x362d, 0x40bd, 0x1e5c, 0x4010, 0xa3e8, 0x4695, 0x22de, 0x3070, 0x1c9a, 0x2d98, 0xb0b1, 0x1f41, 0xb2e6, 0x415c, 0xbac2, 0xbf69, 0x3816, 0x1f3a, 0x1f46, 0xb06c, 0x10f7, 0x1ee5, 0x400e, 0xbf08, 0x2a02, 0x179e, 0xadb5, 0x42f2, 0x410d, 0x4258, 0xb24d, 0x4424, 0xbaf2, 0x4143, 0x40e8, 0x4339, 0xb231, 0x437a, 0xb2f1, 0x42fd, 0x1dff, 0xbf91, 0x43ed, 0x468c, 0x427d, 0xb211, 0x4388, 0x4101, 0xba6d, 0x3708, 0x19fc, 0xb2fe, 0x410f, 0x1fdc, 0x2d26, 0x0b81, 0xb23e, 0x46b2, 0x4194, 0xacb8, 0x40ec, 0x3012, 0xbfb0, 0x45b1, 0xb2b7, 0x1ea0, 0xb246, 0x4007, 0x23e5, 0xbf92, 0x426f, 0x1eab, 0x4371, 0x0c6a, 0xb21d, 0x4442, 0x1954, 0x1957, 0xba05, 0xb27f, 0xb00c, 0x437f, 0xb022, 0x4223, 0x1d0e, 0xbf97, 0xbaf4, 0x1c45, 0xba0e, 0x469d, 0x4049, 0x2a26, 0xb2f0, 0x4272, 0x441a, 0x465b, 0xb2b7, 0x1885, 0x45ca, 0x43b9, 0x1b66, 0x42fe, 0x467e, 0x3529, 0x36da, 0x43fb, 0x1fea, 0x4249, 0x281b, 0xbf81, 0x3ce3, 0xb25a, 0x4119, 0x41d7, 0x1ba6, 0x426c, 0x41ad, 0x4041, 0x41af, 0x44b2, 0x41c6, 0xbf86, 0x41b6, 0xac9f, 0x2b28, 0x4001, 0xba03, 0xbfb0, 0x40b8, 0x3572, 0xba6e, 0x19d2, 0xbf22, 0xacf7, 0xab27, 0x2775, 0x40d1, 0x438f, 0x4214, 0x17c4, 0x40f8, 0x42ce, 0xa942, 0x3854, 0x44cd, 0x1cf3, 0xbfb8, 0x1a6f, 0x1817, 0x2f34, 0x42f3, 0xaa11, 0xba6c, 0x4560, 0x2208, 0x43ac, 0x45bb, 0x45f5, 0x09eb, 0xbf06, 0xb251, 0x1def, 0xbff0, 0x0c9f, 0x40e4, 0x4453, 0x1aab, 0x4365, 0xb2e1, 0x46a4, 0x4000, 0x12f4, 0x3204, 0x4360, 0x4350, 0x4185, 0x41ba, 0x3fca, 0x31d6, 0xa211, 0x42eb, 0x42a0, 0xadb7, 0xbaec, 0x41d4, 0x409c, 0xbaf5, 0xbfa1, 0x15b0, 0x4234, 0x4345, 0x4215, 0x43fc, 0xba60, 0xb034, 0x25ec, 0x4108, 0xb250, 0x2343, 0x44aa, 0xb2ed, 0x4234, 0x46ba, 0x420a, 0x0fcf, 0xbf2e, 0xb0aa, 0xa5a5, 0xb0e2, 0x41d3, 0xb292, 0x1d9c, 0xbf75, 0x190f, 0x2337, 0xb245, 0x080c, 0xb2cf, 0xa08b, 0x40ce, 0x40c3, 0x4121, 0x192b, 0x327a, 0x4341, 0x0fb8, 0xbfe0, 0xb2a8, 0x26ea, 0x3b79, 0x41eb, 0x18ea, 0xb28a, 0x3412, 0xbff0, 0xbf2d, 0x43a0, 0xaba3, 0x1b78, 0x43f6, 0x406c, 0x43ad, 0x3e65, 0xbac1, 0x45ae, 0x3dce, 0x42da, 0x43c0, 0x42d3, 0x412a, 0xbfc7, 0x0784, 0x41db, 0xb288, 0x209d, 0x117f, 0x404f, 0x2dca, 0x2fa2, 0x0b73, 0x414d, 0x406e, 0xbad2, 0x431b, 0xbafd, 0x466b, 0x429e, 0x4198, 0xb2cb, 0xb2e6, 0xbf9e, 0x404a, 0xb2ba, 0xb096, 0xbac1, 0xba3b, 0x037e, 0x40fa, 0xb26c, 0x416c, 0xb2cb, 0xb014, 0x14dc, 0x412c, 0x2d78, 0x1d2e, 0x199d, 0xb2e8, 0x2adc, 0x426c, 0x1e46, 0x4305, 0x1c4a, 0x43a9, 0x1c02, 0x43e3, 0x466d, 0xbf6a, 0x3376, 0x11a5, 0x37df, 0x416c, 0x1bb3, 0xb27b, 0x4385, 0x0a41, 0x1dd5, 0xb2c3, 0x409e, 0x4112, 0x1cb0, 0x428d, 0x0dfe, 0x4391, 0xbf90, 0xba2b, 0xb2a9, 0x4159, 0x426e, 0x2534, 0x4260, 0xbafc, 0xb294, 0x4332, 0x3fed, 0xbfa9, 0x42a7, 0x422b, 0x1f0f, 0xbaf5, 0x21f3, 0xba2f, 0x15fb, 0xb2fa, 0xb025, 0x4024, 0x4014, 0x3c14, 0xbfac, 0x3734, 0xba6e, 0x435b, 0xba12, 0x2012, 0x4058, 0x423e, 0xabd2, 0x3645, 0x40c3, 0x20d0, 0x1d9d, 0x43c2, 0x41b3, 0x4693, 0x40b4, 0x2296, 0x409b, 0xb291, 0x437a, 0x424b, 0xbaf7, 0x4104, 0x437f, 0xbf96, 0x4102, 0x1886, 0x0fb9, 0x426e, 0x40b8, 0xb20e, 0x431d, 0x4291, 0x4291, 0x0c05, 0xb2d4, 0x199c, 0x428f, 0x44db, 0x413d, 0xbf31, 0xb289, 0x43f0, 0x332d, 0x4569, 0x4299, 0xb014, 0xba7d, 0xb0f3, 0x402e, 0x4045, 0x06a4, 0x43ca, 0x4094, 0x31bd, 0x4081, 0x427b, 0xb20d, 0xb2e6, 0x4632, 0x162d, 0x41c4, 0x2895, 0x40e7, 0x4653, 0xa661, 0xbf66, 0xbf90, 0x42b2, 0xaab5, 0xb090, 0x1583, 0x4639, 0xb28d, 0xb270, 0x40de, 0xbf82, 0xb222, 0x4270, 0x435a, 0x0de4, 0xb092, 0x40a8, 0x429e, 0x3997, 0x414e, 0x4399, 0x21a7, 0xb0e8, 0x4137, 0x46c0, 0x2806, 0x4172, 0x421d, 0x4322, 0x412e, 0x423d, 0x4127, 0x135d, 0x40da, 0x422f, 0x1a75, 0x40f4, 0xbaf0, 0xbf18, 0xba57, 0x0d36, 0xb2bb, 0x0ca6, 0x42fd, 0x425b, 0xbfe2, 0x4373, 0xbfc0, 0xa74d, 0xbfb6, 0xb262, 0xba79, 0x1e98, 0xa253, 0x0db2, 0x4160, 0x29eb, 0x0771, 0x4360, 0x1f61, 0xb2ac, 0x4196, 0x433c, 0x412b, 0x4054, 0x4197, 0xb04b, 0x240f, 0xb2fb, 0x4277, 0x4292, 0xb0a4, 0x1b9f, 0x4007, 0xb01d, 0xbf3d, 0xbfe0, 0x45e0, 0x4297, 0x420b, 0x4659, 0x4051, 0x4012, 0xbf78, 0x468a, 0x4083, 0x2755, 0x42be, 0x4699, 0x40fc, 0xb0e4, 0xaead, 0x458e, 0xa47e, 0x43cd, 0xac1b, 0x4401, 0x4182, 0x45f1, 0xbad0, 0x277d, 0x4580, 0x43f0, 0x1e04, 0x4001, 0x41f1, 0x42a9, 0xbf31, 0x2018, 0x435d, 0xb097, 0x0bdd, 0x449c, 0x4553, 0x1052, 0x41e1, 0x42ef, 0x43a3, 0x04ac, 0xae49, 0x4346, 0x1de8, 0x1ce6, 0x44a3, 0x432c, 0x4646, 0xb240, 0xb29f, 0x1d48, 0x436d, 0xbf36, 0x06c9, 0xbfa0, 0xb231, 0xbf52, 0x1d57, 0x40df, 0x40de, 0xb23c, 0x39bb, 0x2829, 0x4313, 0xa2f6, 0xb003, 0x446e, 0x1c7c, 0x3a4f, 0x007b, 0x427e, 0x083a, 0x1d84, 0xb088, 0x4176, 0x433b, 0x439c, 0xbf05, 0x44c2, 0x42ae, 0x4211, 0xa9ac, 0x1a23, 0xb20a, 0x46e4, 0xa4cc, 0xba2b, 0x4655, 0x2b20, 0x4070, 0xbfc0, 0x40ff, 0x4071, 0x1e59, 0x43a5, 0xbfdf, 0x1c22, 0x4315, 0x462d, 0x4183, 0x4560, 0x43b1, 0x1dc0, 0x4089, 0x17b2, 0x416c, 0x4345, 0x4302, 0xbf1d, 0x42a9, 0xbaf4, 0x40ea, 0x418d, 0xbad4, 0x1f28, 0x4035, 0x4255, 0x2404, 0x43a6, 0x4167, 0xba28, 0x2c13, 0x1a6a, 0x1bb3, 0x4186, 0x430e, 0x4556, 0x1a01, 0xbacc, 0xba0c, 0x410c, 0xb2e3, 0xbf1a, 0x1fc7, 0x4229, 0x462a, 0x4295, 0x1a63, 0xbf00, 0xbf70, 0xb26c, 0x1360, 0xbf95, 0x4151, 0x1132, 0x432b, 0x42d3, 0x0fb4, 0xba25, 0x1505, 0xbfde, 0x4338, 0x41dc, 0x4223, 0x3524, 0x422f, 0x4104, 0x414f, 0x3667, 0x1993, 0x4174, 0x40c2, 0xba13, 0xba2b, 0x289e, 0xba20, 0x406e, 0x20ae, 0xbacb, 0xa364, 0x40d6, 0xbfb8, 0x404f, 0x4398, 0xae33, 0x4023, 0x4333, 0x40c9, 0x43e8, 0x1b35, 0xb0c3, 0xbafb, 0x08c2, 0x4139, 0x42b3, 0xb089, 0xb242, 0x4129, 0xb008, 0xbf47, 0x2a1c, 0xb092, 0x2c58, 0x43c8, 0x41ca, 0x40c9, 0x32e6, 0x4182, 0x1769, 0x363c, 0x1639, 0x4231, 0xb286, 0x4075, 0xbf7f, 0x424c, 0x0094, 0x1c3d, 0x43a3, 0x40b6, 0x41ca, 0x435a, 0x3614, 0x378c, 0xb213, 0xbf85, 0x1839, 0xbae4, 0x1dd2, 0x414c, 0x4040, 0x41d3, 0x4040, 0xb254, 0x4110, 0x1e0a, 0x42e6, 0x095a, 0x0a7b, 0xbf46, 0x1375, 0xba1e, 0x4224, 0x41ee, 0xa734, 0x40dd, 0x42ee, 0x2906, 0x397f, 0xba5b, 0x41eb, 0xa422, 0x3dd1, 0x1dfc, 0x4444, 0x1c7b, 0x4068, 0x4258, 0x1350, 0xb2a6, 0x4155, 0x4213, 0x43ab, 0xbf37, 0xa368, 0x0c7a, 0x4175, 0x1cf7, 0x4260, 0x04fe, 0x18dc, 0xba1c, 0xa450, 0x2a7c, 0x351b, 0x416f, 0xbf55, 0x3b8b, 0x401f, 0x4282, 0xa41b, 0x41e1, 0xa299, 0xa6f3, 0xaca9, 0x1c37, 0x0145, 0x4285, 0xb269, 0x438b, 0x138c, 0x1eb7, 0x1d6e, 0xa51c, 0xb2d2, 0xae4b, 0xb2fc, 0xac6e, 0x4176, 0x1937, 0x42f2, 0x4293, 0xbf48, 0x4280, 0x4685, 0x421f, 0x4394, 0x050c, 0xbfc4, 0x372a, 0x401d, 0xbae7, 0x42f6, 0x40b6, 0xa1e8, 0x44aa, 0x3def, 0x429c, 0x3117, 0x1dba, 0x1a58, 0x415a, 0xa67a, 0x43b3, 0xbf21, 0xbf90, 0xa973, 0xba48, 0xba58, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x2222d05c, 0xcfc689d4, 0xc2140172, 0x47506221, 0xe5f77550, 0x38359c85, 0x4e95a963, 0xe20bac00, 0x9f1922b1, 0x5e07b7dc, 0x32b31e2b, 0x9b89a1e5, 0x70e8b6e8, 0xae4936fc, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0xffffe4fa, 0x00001b77, 0x00000077, 0x00000041, 0xf8000000, 0x00001719, 0x000019b8, 0x00000000, 0x9f1922b1, 0x00000057, 0x00001666, 0xfffffe5e, 0x00007157, 0x60e6c544, 0x00000000, 0x000001d0 }, + Instructions = [0x1ed2, 0xb283, 0x434a, 0x3937, 0x4179, 0x4253, 0x4017, 0x023f, 0x42bc, 0x408d, 0xb22a, 0x4268, 0xba5b, 0x1a31, 0x40a2, 0x1dd9, 0x2161, 0x4449, 0x4000, 0x402e, 0x41ce, 0xbf83, 0xba1e, 0x44b0, 0xba18, 0x425e, 0xa764, 0xbfc0, 0x406f, 0x40bd, 0xb0b7, 0xa99c, 0x4005, 0xa0c2, 0x41a4, 0x3ff8, 0x402c, 0x036d, 0xbf57, 0x3e68, 0x4153, 0xb0e0, 0x4689, 0x42e0, 0x406f, 0x40c8, 0xb0b1, 0x4593, 0x40f8, 0xb2d1, 0xa877, 0x4379, 0x434e, 0xba1e, 0xbf71, 0xba71, 0xb2b1, 0xb0c1, 0xb232, 0x41fc, 0x463f, 0x4069, 0xb25b, 0x4241, 0xb2c0, 0x405a, 0x4048, 0xba32, 0x4258, 0x41ef, 0xbf78, 0x0754, 0xb277, 0xbf60, 0x4089, 0xba4a, 0x4074, 0xb252, 0xb2cb, 0x4134, 0x434c, 0x43e1, 0x1e9c, 0x1c02, 0x40a7, 0xb24e, 0x1e02, 0xbf17, 0x3511, 0xb2a3, 0xba19, 0xaccd, 0x4091, 0x1fc1, 0xb057, 0x43b8, 0xb2c8, 0x4180, 0x377e, 0x43d3, 0x09e2, 0x4266, 0xb26c, 0xbf1f, 0x4260, 0xb24e, 0xb24a, 0xb2ac, 0xbfd0, 0xba7a, 0x45b2, 0x4038, 0x418f, 0x15f9, 0xba63, 0xba2d, 0x42f3, 0x403e, 0x4038, 0x41c9, 0x4152, 0x2ee7, 0x4259, 0x0226, 0xbf41, 0x21d2, 0x4430, 0x4007, 0x17ed, 0xbfbd, 0x4058, 0x3e16, 0x407a, 0x40e3, 0x41a0, 0x43d8, 0x404a, 0x40f2, 0x1605, 0x42a3, 0x4631, 0x44f0, 0xbfe0, 0xa21c, 0x290b, 0xaade, 0x40aa, 0x43ae, 0x4126, 0x29c9, 0x420d, 0xbfa4, 0xba6b, 0x41cc, 0x2a49, 0xa316, 0x4308, 0xb04c, 0x4261, 0x0a3b, 0x27f8, 0x422b, 0x02f7, 0x401f, 0x4084, 0xa4c4, 0x1d89, 0xaf46, 0x4159, 0xbad0, 0xb287, 0x41f4, 0x0ae8, 0x423b, 0x3f2b, 0xb210, 0x41bf, 0xbfa5, 0x4333, 0x447e, 0x4403, 0xb24d, 0xbf80, 0x4201, 0x40ff, 0xb2da, 0x41df, 0xb2fa, 0x4257, 0x4366, 0x43e5, 0xbfba, 0x431d, 0x4558, 0xb296, 0xba51, 0xbacf, 0x4313, 0xbadd, 0x40e6, 0x25fe, 0x4223, 0xb2e4, 0x400a, 0x362d, 0x40bd, 0x1e5c, 0x4010, 0xa3e8, 0x4695, 0x22de, 0x3070, 0x1c9a, 0x2d98, 0xb0b1, 0x1f41, 0xb2e6, 0x415c, 0xbac2, 0xbf69, 0x3816, 0x1f3a, 0x1f46, 0xb06c, 0x10f7, 0x1ee5, 0x400e, 0xbf08, 0x2a02, 0x179e, 0xadb5, 0x42f2, 0x410d, 0x4258, 0xb24d, 0x4424, 0xbaf2, 0x4143, 0x40e8, 0x4339, 0xb231, 0x437a, 0xb2f1, 0x42fd, 0x1dff, 0xbf91, 0x43ed, 0x468c, 0x427d, 0xb211, 0x4388, 0x4101, 0xba6d, 0x3708, 0x19fc, 0xb2fe, 0x410f, 0x1fdc, 0x2d26, 0x0b81, 0xb23e, 0x46b2, 0x4194, 0xacb8, 0x40ec, 0x3012, 0xbfb0, 0x45b1, 0xb2b7, 0x1ea0, 0xb246, 0x4007, 0x23e5, 0xbf92, 0x426f, 0x1eab, 0x4371, 0x0c6a, 0xb21d, 0x4442, 0x1954, 0x1957, 0xba05, 0xb27f, 0xb00c, 0x437f, 0xb022, 0x4223, 0x1d0e, 0xbf97, 0xbaf4, 0x1c45, 0xba0e, 0x469d, 0x4049, 0x2a26, 0xb2f0, 0x4272, 0x441a, 0x465b, 0xb2b7, 0x1885, 0x45ca, 0x43b9, 0x1b66, 0x42fe, 0x467e, 0x3529, 0x36da, 0x43fb, 0x1fea, 0x4249, 0x281b, 0xbf81, 0x3ce3, 0xb25a, 0x4119, 0x41d7, 0x1ba6, 0x426c, 0x41ad, 0x4041, 0x41af, 0x44b2, 0x41c6, 0xbf86, 0x41b6, 0xac9f, 0x2b28, 0x4001, 0xba03, 0xbfb0, 0x40b8, 0x3572, 0xba6e, 0x19d2, 0xbf22, 0xacf7, 0xab27, 0x2775, 0x40d1, 0x438f, 0x4214, 0x17c4, 0x40f8, 0x42ce, 0xa942, 0x3854, 0x44cd, 0x1cf3, 0xbfb8, 0x1a6f, 0x1817, 0x2f34, 0x42f3, 0xaa11, 0xba6c, 0x4560, 0x2208, 0x43ac, 0x45bb, 0x45f5, 0x09eb, 0xbf06, 0xb251, 0x1def, 0xbff0, 0x0c9f, 0x40e4, 0x4453, 0x1aab, 0x4365, 0xb2e1, 0x46a4, 0x4000, 0x12f4, 0x3204, 0x4360, 0x4350, 0x4185, 0x41ba, 0x3fca, 0x31d6, 0xa211, 0x42eb, 0x42a0, 0xadb7, 0xbaec, 0x41d4, 0x409c, 0xbaf5, 0xbfa1, 0x15b0, 0x4234, 0x4345, 0x4215, 0x43fc, 0xba60, 0xb034, 0x25ec, 0x4108, 0xb250, 0x2343, 0x44aa, 0xb2ed, 0x4234, 0x46ba, 0x420a, 0x0fcf, 0xbf2e, 0xb0aa, 0xa5a5, 0xb0e2, 0x41d3, 0xb292, 0x1d9c, 0xbf75, 0x190f, 0x2337, 0xb245, 0x080c, 0xb2cf, 0xa08b, 0x40ce, 0x40c3, 0x4121, 0x192b, 0x327a, 0x4341, 0x0fb8, 0xbfe0, 0xb2a8, 0x26ea, 0x3b79, 0x41eb, 0x18ea, 0xb28a, 0x3412, 0xbff0, 0xbf2d, 0x43a0, 0xaba3, 0x1b78, 0x43f6, 0x406c, 0x43ad, 0x3e65, 0xbac1, 0x45ae, 0x3dce, 0x42da, 0x43c0, 0x42d3, 0x412a, 0xbfc7, 0x0784, 0x41db, 0xb288, 0x209d, 0x117f, 0x404f, 0x2dca, 0x2fa2, 0x0b73, 0x414d, 0x406e, 0xbad2, 0x431b, 0xbafd, 0x466b, 0x429e, 0x4198, 0xb2cb, 0xb2e6, 0xbf9e, 0x404a, 0xb2ba, 0xb096, 0xbac1, 0xba3b, 0x037e, 0x40fa, 0xb26c, 0x416c, 0xb2cb, 0xb014, 0x14dc, 0x412c, 0x2d78, 0x1d2e, 0x199d, 0xb2e8, 0x2adc, 0x426c, 0x1e46, 0x4305, 0x1c4a, 0x43a9, 0x1c02, 0x43e3, 0x466d, 0xbf6a, 0x3376, 0x11a5, 0x37df, 0x416c, 0x1bb3, 0xb27b, 0x4385, 0x0a41, 0x1dd5, 0xb2c3, 0x409e, 0x4112, 0x1cb0, 0x428d, 0x0dfe, 0x4391, 0xbf90, 0xba2b, 0xb2a9, 0x4159, 0x426e, 0x2534, 0x4260, 0xbafc, 0xb294, 0x4332, 0x3fed, 0xbfa9, 0x42a7, 0x422b, 0x1f0f, 0xbaf5, 0x21f3, 0xba2f, 0x15fb, 0xb2fa, 0xb025, 0x4024, 0x4014, 0x3c14, 0xbfac, 0x3734, 0xba6e, 0x435b, 0xba12, 0x2012, 0x4058, 0x423e, 0xabd2, 0x3645, 0x40c3, 0x20d0, 0x1d9d, 0x43c2, 0x41b3, 0x4693, 0x40b4, 0x2296, 0x409b, 0xb291, 0x437a, 0x424b, 0xbaf7, 0x4104, 0x437f, 0xbf96, 0x4102, 0x1886, 0x0fb9, 0x426e, 0x40b8, 0xb20e, 0x431d, 0x4291, 0x4291, 0x0c05, 0xb2d4, 0x199c, 0x428f, 0x44db, 0x413d, 0xbf31, 0xb289, 0x43f0, 0x332d, 0x4569, 0x4299, 0xb014, 0xba7d, 0xb0f3, 0x402e, 0x4045, 0x06a4, 0x43ca, 0x4094, 0x31bd, 0x4081, 0x427b, 0xb20d, 0xb2e6, 0x4632, 0x162d, 0x41c4, 0x2895, 0x40e7, 0x4653, 0xa661, 0xbf66, 0xbf90, 0x42b2, 0xaab5, 0xb090, 0x1583, 0x4639, 0xb28d, 0xb270, 0x40de, 0xbf82, 0xb222, 0x4270, 0x435a, 0x0de4, 0xb092, 0x40a8, 0x429e, 0x3997, 0x414e, 0x4399, 0x21a7, 0xb0e8, 0x4137, 0x46c0, 0x2806, 0x4172, 0x421d, 0x4322, 0x412e, 0x423d, 0x4127, 0x135d, 0x40da, 0x422f, 0x1a75, 0x40f4, 0xbaf0, 0xbf18, 0xba57, 0x0d36, 0xb2bb, 0x0ca6, 0x42fd, 0x425b, 0xbfe2, 0x4373, 0xbfc0, 0xa74d, 0xbfb6, 0xb262, 0xba79, 0x1e98, 0xa253, 0x0db2, 0x4160, 0x29eb, 0x0771, 0x4360, 0x1f61, 0xb2ac, 0x4196, 0x433c, 0x412b, 0x4054, 0x4197, 0xb04b, 0x240f, 0xb2fb, 0x4277, 0x4292, 0xb0a4, 0x1b9f, 0x4007, 0xb01d, 0xbf3d, 0xbfe0, 0x45e0, 0x4297, 0x420b, 0x4659, 0x4051, 0x4012, 0xbf78, 0x468a, 0x4083, 0x2755, 0x42be, 0x4699, 0x40fc, 0xb0e4, 0xaead, 0x458e, 0xa47e, 0x43cd, 0xac1b, 0x4401, 0x4182, 0x45f1, 0xbad0, 0x277d, 0x4580, 0x43f0, 0x1e04, 0x4001, 0x41f1, 0x42a9, 0xbf31, 0x2018, 0x435d, 0xb097, 0x0bdd, 0x449c, 0x4553, 0x1052, 0x41e1, 0x42ef, 0x43a3, 0x04ac, 0xae49, 0x4346, 0x1de8, 0x1ce6, 0x44a3, 0x432c, 0x4646, 0xb240, 0xb29f, 0x1d48, 0x436d, 0xbf36, 0x06c9, 0xbfa0, 0xb231, 0xbf52, 0x1d57, 0x40df, 0x40de, 0xb23c, 0x39bb, 0x2829, 0x4313, 0xa2f6, 0xb003, 0x446e, 0x1c7c, 0x3a4f, 0x007b, 0x427e, 0x083a, 0x1d84, 0xb088, 0x4176, 0x433b, 0x439c, 0xbf05, 0x44c2, 0x42ae, 0x4211, 0xa9ac, 0x1a23, 0xb20a, 0x46e4, 0xa4cc, 0xba2b, 0x4655, 0x2b20, 0x4070, 0xbfc0, 0x40ff, 0x4071, 0x1e59, 0x43a5, 0xbfdf, 0x1c22, 0x4315, 0x462d, 0x4183, 0x4560, 0x43b1, 0x1dc0, 0x4089, 0x17b2, 0x416c, 0x4345, 0x4302, 0xbf1d, 0x42a9, 0xbaf4, 0x40ea, 0x418d, 0xbad4, 0x1f28, 0x4035, 0x4255, 0x2404, 0x43a6, 0x4167, 0xba28, 0x2c13, 0x1a6a, 0x1bb3, 0x4186, 0x430e, 0x4556, 0x1a01, 0xbacc, 0xba0c, 0x410c, 0xb2e3, 0xbf1a, 0x1fc7, 0x4229, 0x462a, 0x4295, 0x1a63, 0xbf00, 0xbf70, 0xb26c, 0x1360, 0xbf95, 0x4151, 0x1132, 0x432b, 0x42d3, 0x0fb4, 0xba25, 0x1505, 0xbfde, 0x4338, 0x41dc, 0x4223, 0x3524, 0x422f, 0x4104, 0x414f, 0x3667, 0x1993, 0x4174, 0x40c2, 0xba13, 0xba2b, 0x289e, 0xba20, 0x406e, 0x20ae, 0xbacb, 0xa364, 0x40d6, 0xbfb8, 0x404f, 0x4398, 0xae33, 0x4023, 0x4333, 0x40c9, 0x43e8, 0x1b35, 0xb0c3, 0xbafb, 0x08c2, 0x4139, 0x42b3, 0xb089, 0xb242, 0x4129, 0xb008, 0xbf47, 0x2a1c, 0xb092, 0x2c58, 0x43c8, 0x41ca, 0x40c9, 0x32e6, 0x4182, 0x1769, 0x363c, 0x1639, 0x4231, 0xb286, 0x4075, 0xbf7f, 0x424c, 0x0094, 0x1c3d, 0x43a3, 0x40b6, 0x41ca, 0x435a, 0x3614, 0x378c, 0xb213, 0xbf85, 0x1839, 0xbae4, 0x1dd2, 0x414c, 0x4040, 0x41d3, 0x4040, 0xb254, 0x4110, 0x1e0a, 0x42e6, 0x095a, 0x0a7b, 0xbf46, 0x1375, 0xba1e, 0x4224, 0x41ee, 0xa734, 0x40dd, 0x42ee, 0x2906, 0x397f, 0xba5b, 0x41eb, 0xa422, 0x3dd1, 0x1dfc, 0x4444, 0x1c7b, 0x4068, 0x4258, 0x1350, 0xb2a6, 0x4155, 0x4213, 0x43ab, 0xbf37, 0xa368, 0x0c7a, 0x4175, 0x1cf7, 0x4260, 0x04fe, 0x18dc, 0xba1c, 0xa450, 0x2a7c, 0x351b, 0x416f, 0xbf55, 0x3b8b, 0x401f, 0x4282, 0xa41b, 0x41e1, 0xa299, 0xa6f3, 0xaca9, 0x1c37, 0x0145, 0x4285, 0xb269, 0x438b, 0x138c, 0x1eb7, 0x1d6e, 0xa51c, 0xb2d2, 0xae4b, 0xb2fc, 0xac6e, 0x4176, 0x1937, 0x42f2, 0x4293, 0xbf48, 0x4280, 0x4685, 0x421f, 0x4394, 0x050c, 0xbfc4, 0x372a, 0x401d, 0xbae7, 0x42f6, 0x40b6, 0xa1e8, 0x44aa, 0x3def, 0x429c, 0x3117, 0x1dba, 0x1a58, 0x415a, 0xa67a, 0x43b3, 0xbf21, 0xbf90, 0xa973, 0xba48, 0xba58, 0x4770, 0xe7fe + ], + StartRegs = [0x2222d05c, 0xcfc689d4, 0xc2140172, 0x47506221, 0xe5f77550, 0x38359c85, 0x4e95a963, 0xe20bac00, 0x9f1922b1, 0x5e07b7dc, 0x32b31e2b, 0x9b89a1e5, 0x70e8b6e8, 0xae4936fc, 0x00000000, 0x100001f0 + ], + FinalRegs = [0xffffe4fa, 0x00001b77, 0x00000077, 0x00000041, 0xf8000000, 0x00001719, 0x000019b8, 0x00000000, 0x9f1922b1, 0x00000057, 0x00001666, 0xfffffe5e, 0x00007157, 0x60e6c544, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x439f, 0x404c, 0x454a, 0x41ed, 0xbf7a, 0x1535, 0x428d, 0x1c71, 0x4125, 0xb281, 0x40a4, 0xb25a, 0x40f7, 0xaab2, 0xb256, 0xb236, 0xb08c, 0x4180, 0x1249, 0x3e60, 0x235c, 0x40f0, 0xba68, 0xbaf7, 0x45e3, 0x4314, 0x411a, 0xb2f1, 0xbf35, 0x4689, 0xb26e, 0xba71, 0x4072, 0x1cd9, 0x4451, 0x4343, 0x4275, 0x1acd, 0x3026, 0x43af, 0x4279, 0xb2fb, 0xb24f, 0x41c1, 0x4101, 0x40d8, 0x4171, 0x436e, 0xb092, 0xbf9b, 0x4190, 0x40ab, 0x1bbc, 0x1ad7, 0x45a3, 0x412f, 0x1374, 0x45c8, 0x1e94, 0x40c4, 0xb0d8, 0x41c8, 0x4044, 0x1d6f, 0x4134, 0x45d8, 0x426b, 0x404c, 0x1986, 0x401c, 0xb2aa, 0x4375, 0x423e, 0x1ac8, 0xbfb3, 0xb296, 0xba27, 0x3e43, 0x4315, 0xbfb0, 0x1914, 0x43f8, 0x42a1, 0x426a, 0x0cfa, 0x4027, 0x4270, 0xadfb, 0x45dc, 0x309c, 0x407d, 0xa010, 0x1d78, 0x34b3, 0x1b29, 0xb2c0, 0x463a, 0x196a, 0x41b1, 0x42c5, 0x40a5, 0x454d, 0xb28f, 0xbf37, 0xba22, 0x1c18, 0x2832, 0x41fe, 0x1a1b, 0x1dd0, 0x4634, 0x4058, 0x2da1, 0x427b, 0xb2c7, 0x4280, 0x1e11, 0x40a9, 0xba2d, 0xba19, 0xbf44, 0xba11, 0x4068, 0x180e, 0x4178, 0x41ee, 0x4651, 0x407e, 0x4353, 0x4245, 0xbae4, 0xa4d0, 0x0dd5, 0xb27b, 0x1be0, 0x4062, 0xb220, 0x4352, 0x40e3, 0x41c9, 0xb21f, 0xbf00, 0xbf03, 0x29da, 0x40c0, 0x4179, 0x1f95, 0x187d, 0x43d8, 0x1ad8, 0xb223, 0x4648, 0x3fb2, 0x2ec5, 0xba50, 0x42c2, 0x3b0b, 0x1fbf, 0xb240, 0x41e0, 0x3a20, 0x032c, 0xb21a, 0xa161, 0x42bb, 0xbf26, 0xbf80, 0x446c, 0x4305, 0xb068, 0xba5f, 0x130a, 0x2736, 0xabf8, 0x1967, 0x2038, 0xb260, 0xba40, 0x4241, 0xaf27, 0x4381, 0x40af, 0x438c, 0x437c, 0x4672, 0xbae3, 0x3e4c, 0xb228, 0x1cc4, 0x432e, 0xbf3a, 0x1c2b, 0x1678, 0xa23f, 0x1dd4, 0x42a9, 0xbff0, 0x397e, 0x42a1, 0xbf54, 0x41a6, 0x4124, 0xb2f5, 0x1d50, 0x42a9, 0xba79, 0xba33, 0xa80d, 0xbf60, 0x4329, 0x4161, 0x3a12, 0x40ed, 0x4562, 0x4303, 0x1853, 0xbf6b, 0x4379, 0x4307, 0x436e, 0x41b0, 0xba44, 0x4178, 0xbf90, 0xb2db, 0xa99c, 0x4671, 0x46a9, 0x44b3, 0x40fc, 0xab9e, 0xb21d, 0x42a7, 0x40f3, 0xb2cd, 0x24b3, 0x41b7, 0x1db8, 0xbf4c, 0x4207, 0xba4b, 0x4227, 0xb064, 0x405a, 0x416a, 0x1222, 0xb0e1, 0x0ff4, 0xba13, 0xbf8a, 0x423f, 0x440b, 0x4007, 0xbadf, 0xb25b, 0xae38, 0x229d, 0xbfcb, 0x3f66, 0x259e, 0xb092, 0x4248, 0x422f, 0x18b3, 0xbfd2, 0x147a, 0x43ce, 0xac74, 0xa9c0, 0x454c, 0xba1f, 0x0865, 0x40bf, 0xb291, 0xb241, 0x4311, 0x1e25, 0xb2e5, 0x3038, 0x4647, 0x4254, 0x4007, 0x4276, 0x42cb, 0x4024, 0x1ee1, 0x206a, 0x0c99, 0x3aea, 0xbfc8, 0xbf60, 0x1eea, 0x410e, 0x4365, 0x03ee, 0x1d17, 0xb2e5, 0x4244, 0x0fc2, 0x1bf2, 0x1b74, 0xbac0, 0x1770, 0xbfcd, 0x02d1, 0x4251, 0x4200, 0xb2c5, 0xbafb, 0x43b8, 0xbf87, 0x425a, 0xbfd0, 0x18bb, 0x4186, 0xb0de, 0xba16, 0x199f, 0x444c, 0x4265, 0xa487, 0x41cf, 0x40e4, 0xb093, 0xbfa0, 0x4164, 0x0082, 0x433b, 0x40a3, 0x1957, 0x0653, 0xba10, 0x1011, 0x43cc, 0xb08c, 0xb24a, 0x2f88, 0xbfe4, 0xb291, 0x4251, 0xb0ec, 0xba67, 0x3fec, 0x401c, 0x2df3, 0xb225, 0x1ed0, 0x22cf, 0x41c4, 0xbfdc, 0xaa7d, 0x1e25, 0x40a5, 0x43a0, 0x41bf, 0xba39, 0x40cc, 0x4117, 0x46b9, 0x407b, 0xb0d5, 0x1cfb, 0x43ed, 0xb2ce, 0x4229, 0x2a4a, 0x1317, 0x41f3, 0x1a08, 0x1aae, 0x1737, 0xbf8a, 0x1ee8, 0x430e, 0x401b, 0x419c, 0x4121, 0xba1d, 0x109a, 0x18d9, 0x1dc3, 0x4331, 0xbac3, 0x00f7, 0x4178, 0x41c8, 0xa2e7, 0xb2be, 0x18bc, 0xb288, 0x1527, 0x43e5, 0x1c45, 0x2f37, 0x423d, 0xba43, 0x4238, 0xbf75, 0x22e5, 0xbfb0, 0x4073, 0x34ad, 0xa802, 0xb084, 0x4154, 0x4333, 0xa7e3, 0x4170, 0x43d9, 0xbfa0, 0x43c6, 0x43d0, 0xb292, 0xa2aa, 0x42e5, 0xbace, 0x42a1, 0x4361, 0x42f9, 0xbf4c, 0x423e, 0x0e80, 0xb233, 0xb2c7, 0xa44f, 0x1a00, 0xbf00, 0x1d47, 0xb265, 0xb203, 0x4330, 0x4268, 0x40c9, 0xb299, 0xba4d, 0xb23a, 0x2d3b, 0xba5e, 0xbf00, 0x43cb, 0xbf28, 0x1595, 0x43e5, 0x0dd2, 0xb287, 0x429c, 0x4683, 0xbfe0, 0x410c, 0x4363, 0x117d, 0x0706, 0x377b, 0xbfa4, 0xb2e7, 0x42e5, 0x45e1, 0x441b, 0x42bf, 0xb08c, 0x427e, 0xb05a, 0x09e5, 0xbf69, 0x438c, 0xbafe, 0x45f6, 0xaad2, 0x0016, 0xbf0b, 0x419d, 0x4024, 0x4146, 0xb0b5, 0x461d, 0x41f8, 0xb044, 0x1cc0, 0xbae5, 0xb086, 0x44cc, 0x420f, 0xb0b0, 0x4679, 0x4009, 0x1a55, 0x404c, 0x41cb, 0x4035, 0x4313, 0x4085, 0x404f, 0x000e, 0x1544, 0xada3, 0xbf09, 0x2288, 0xb215, 0x40ff, 0x426a, 0x40a6, 0xb26e, 0x305e, 0xb206, 0x3b04, 0xa30a, 0xba3a, 0x459e, 0xba24, 0x418b, 0x40ad, 0x440a, 0x435d, 0xb262, 0x42ad, 0xb0d9, 0xb08c, 0xbf5c, 0x4351, 0xb2d0, 0xbf12, 0x1b96, 0xb27a, 0x4154, 0xa009, 0x1c94, 0xa32e, 0x1c08, 0x38a7, 0x43af, 0x418b, 0x43c7, 0x296c, 0x273c, 0x4276, 0x25d3, 0x42c3, 0xba0c, 0xb284, 0xbf19, 0xb2ea, 0xba0e, 0x4069, 0xb003, 0x469c, 0xb0ee, 0xb219, 0x43cb, 0x424b, 0x41f6, 0x3973, 0xb271, 0x401c, 0x23a6, 0x40ea, 0xba16, 0x194a, 0xa210, 0x1c5b, 0xb07a, 0xbfa1, 0x4271, 0x190b, 0xba0c, 0x0783, 0xa0dc, 0x46d0, 0xbf54, 0x42fc, 0x0ea4, 0x1cde, 0x0a0a, 0x4115, 0xb2b7, 0xb2fa, 0xbf2f, 0x436e, 0x4374, 0xba73, 0x43cd, 0x4460, 0xad56, 0xb2cd, 0x4157, 0x40c1, 0x1a23, 0x4011, 0x42de, 0x42ab, 0x41f5, 0x4299, 0x43d1, 0x36ef, 0x4135, 0xade3, 0xbfcc, 0x1d9e, 0x425d, 0x43d0, 0xb26e, 0xb26d, 0xb0fe, 0xbaf7, 0x4106, 0x43d0, 0x4311, 0xbfdc, 0x2ac1, 0xb048, 0x434f, 0xb2b4, 0x12bc, 0x1ff4, 0x1aa2, 0xbad4, 0x428d, 0xb28c, 0x44e3, 0x4323, 0x407e, 0x350d, 0x4600, 0x4304, 0x40b5, 0x4253, 0xb2d9, 0xbfd7, 0xb062, 0xb0bd, 0x4567, 0x465d, 0xba1f, 0x0580, 0x46da, 0xb073, 0x3249, 0xb2fc, 0x41a4, 0x4235, 0x2daa, 0xb097, 0xbf5a, 0x41aa, 0x44c3, 0x42c0, 0x0536, 0xb239, 0x42c5, 0xbf6e, 0x19da, 0x296c, 0x324a, 0x395f, 0x40c6, 0x40fe, 0x4023, 0x00f5, 0x281c, 0x2646, 0x3352, 0xb2b7, 0xb2fb, 0xb27b, 0x44a0, 0x41ee, 0xbf81, 0xa1c3, 0x43e2, 0x4047, 0x43c2, 0xba7c, 0x2eae, 0xb281, 0x1807, 0x23c0, 0x1b92, 0x4116, 0xa4a6, 0x43f3, 0x4333, 0x1ae6, 0x25ec, 0x373d, 0xbfc3, 0xafa6, 0x409b, 0x1ffa, 0x183a, 0x46d5, 0x42e4, 0x418e, 0x422e, 0x43ad, 0xad75, 0x18e8, 0x4087, 0x0fb4, 0x0dc6, 0x1913, 0xabed, 0x4331, 0x40fa, 0xbf95, 0x18ab, 0x1aa0, 0x33e6, 0x4354, 0x4338, 0xb2cf, 0x4683, 0x4289, 0x42a1, 0x1ed3, 0x43c5, 0x434e, 0xb2bc, 0xa1bd, 0x4098, 0x418a, 0x25fe, 0x4348, 0x27b1, 0xa5ce, 0x121a, 0x4229, 0xbfa4, 0xb2d8, 0xb290, 0xbfdd, 0xa03c, 0x4217, 0x41b7, 0x41c0, 0xb0e8, 0x19ee, 0x41ea, 0x4294, 0x418d, 0x4075, 0xb04c, 0xbfce, 0xb083, 0x3289, 0x40a7, 0x429d, 0x4277, 0x454a, 0x43a4, 0x1f9a, 0xb2cf, 0x40a6, 0x42b7, 0xb277, 0x27de, 0x43cd, 0xba20, 0xb255, 0x4301, 0x43de, 0x41f0, 0xba42, 0x40b3, 0x05ae, 0xbafb, 0xbaf1, 0x443b, 0x4022, 0xbf68, 0xb286, 0xb2f3, 0xac85, 0x4129, 0x435d, 0x4344, 0x42c3, 0x41d8, 0xb247, 0xbf65, 0x42b9, 0x0ff6, 0x412c, 0xb2e8, 0x4406, 0x42e1, 0x3032, 0x416c, 0xb298, 0xab81, 0xb090, 0x434d, 0xbf87, 0x1cb0, 0x404c, 0xaf0e, 0x33b1, 0x3a35, 0x1c47, 0x43e5, 0xbacc, 0x323d, 0x336a, 0x4125, 0xb062, 0xba38, 0x429b, 0x4173, 0xbf95, 0x40bd, 0x164b, 0xb232, 0xb292, 0x4283, 0xa0d8, 0xb0a5, 0x197f, 0x43d2, 0x1b4f, 0x092b, 0x40d5, 0x1abc, 0x468d, 0xb0ac, 0xb289, 0xb231, 0x1f75, 0xba2c, 0x3a4e, 0x429d, 0x3a08, 0x414a, 0x400f, 0xbfc5, 0x42db, 0x4041, 0x4204, 0xb225, 0x022c, 0x41a9, 0x1def, 0x1cf5, 0x4217, 0x4047, 0x0cb3, 0x3896, 0x4383, 0x28ec, 0x4036, 0x434c, 0x424d, 0x392c, 0x0f8f, 0x2d25, 0x1ca0, 0x40d1, 0x4273, 0x4365, 0x41ce, 0xbf27, 0xb22d, 0x1762, 0x430b, 0xb23a, 0x419f, 0x40f7, 0x421c, 0x44f9, 0x41fa, 0x43d0, 0x428a, 0xb010, 0xb0b8, 0x402a, 0x40ba, 0xbf65, 0x3a3b, 0x4205, 0x41d3, 0xb2df, 0xb019, 0x422b, 0x4207, 0xba0a, 0x430c, 0x18fd, 0xbaf8, 0x4162, 0x400e, 0x4099, 0x40bd, 0x268f, 0xbaee, 0x42ed, 0x1a55, 0x42a5, 0x19bf, 0xb229, 0xb2de, 0x4169, 0xba79, 0x0f16, 0xb2d5, 0x4193, 0xbf2f, 0x0861, 0x4315, 0x05f0, 0xba76, 0xb2e6, 0xbf75, 0x0d63, 0x4580, 0x41dc, 0x4196, 0xbad8, 0x042b, 0x1a1c, 0x1e88, 0xba71, 0x19b1, 0x08a3, 0x314e, 0xba39, 0x40f9, 0x23e3, 0xb0e9, 0x11cb, 0x41b8, 0xbf1c, 0x1a4f, 0xa122, 0x416d, 0xb045, 0xb05f, 0x456c, 0x2fbd, 0x1eae, 0x43ef, 0x1264, 0x41be, 0x2531, 0x4240, 0xbf8c, 0x40fa, 0xb2ef, 0xaa96, 0x4398, 0x40fe, 0xb2e5, 0x4331, 0x419d, 0xba00, 0x4618, 0x4219, 0x408f, 0x438c, 0xb2a7, 0x41f6, 0xb272, 0xab3a, 0x1bd0, 0x2ece, 0x40ff, 0x1f10, 0xbf34, 0x2253, 0x40a3, 0x426e, 0x4206, 0x4262, 0x4354, 0x2793, 0xae78, 0x427a, 0x4370, 0x1911, 0x387b, 0x46e4, 0x18dc, 0x4259, 0x4013, 0xad55, 0x443c, 0x4231, 0xb015, 0x42d5, 0xa0d6, 0x41b8, 0xbf92, 0x4689, 0x4305, 0x3f97, 0x4356, 0xba74, 0x40a2, 0x43b8, 0x46bc, 0x4002, 0x0f62, 0xbacf, 0xbadb, 0x4562, 0xbf3c, 0xbfd0, 0x1eb6, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xb6e12d7d, 0x2bc8f2a0, 0xe074d4cb, 0x76b33514, 0x92975e84, 0xc4f82ea7, 0xeb560f6d, 0x9507ee5e, 0xd48a048b, 0x1aa04244, 0xe9639443, 0xe7dafbbf, 0x050a37ec, 0x91c1b356, 0x00000000, 0xd00001f0 }, - FinalRegs = new uint[] { 0x00000001, 0xffffff18, 0x00000007, 0x00006800, 0xfeff60ec, 0x00001b7d, 0xfffeec5e, 0x000018ff, 0xe9639443, 0x000016c5, 0x00001547, 0xf400171a, 0xfffffffc, 0x00000054, 0x00000000, 0x000001d0 }, + Instructions = [0x439f, 0x404c, 0x454a, 0x41ed, 0xbf7a, 0x1535, 0x428d, 0x1c71, 0x4125, 0xb281, 0x40a4, 0xb25a, 0x40f7, 0xaab2, 0xb256, 0xb236, 0xb08c, 0x4180, 0x1249, 0x3e60, 0x235c, 0x40f0, 0xba68, 0xbaf7, 0x45e3, 0x4314, 0x411a, 0xb2f1, 0xbf35, 0x4689, 0xb26e, 0xba71, 0x4072, 0x1cd9, 0x4451, 0x4343, 0x4275, 0x1acd, 0x3026, 0x43af, 0x4279, 0xb2fb, 0xb24f, 0x41c1, 0x4101, 0x40d8, 0x4171, 0x436e, 0xb092, 0xbf9b, 0x4190, 0x40ab, 0x1bbc, 0x1ad7, 0x45a3, 0x412f, 0x1374, 0x45c8, 0x1e94, 0x40c4, 0xb0d8, 0x41c8, 0x4044, 0x1d6f, 0x4134, 0x45d8, 0x426b, 0x404c, 0x1986, 0x401c, 0xb2aa, 0x4375, 0x423e, 0x1ac8, 0xbfb3, 0xb296, 0xba27, 0x3e43, 0x4315, 0xbfb0, 0x1914, 0x43f8, 0x42a1, 0x426a, 0x0cfa, 0x4027, 0x4270, 0xadfb, 0x45dc, 0x309c, 0x407d, 0xa010, 0x1d78, 0x34b3, 0x1b29, 0xb2c0, 0x463a, 0x196a, 0x41b1, 0x42c5, 0x40a5, 0x454d, 0xb28f, 0xbf37, 0xba22, 0x1c18, 0x2832, 0x41fe, 0x1a1b, 0x1dd0, 0x4634, 0x4058, 0x2da1, 0x427b, 0xb2c7, 0x4280, 0x1e11, 0x40a9, 0xba2d, 0xba19, 0xbf44, 0xba11, 0x4068, 0x180e, 0x4178, 0x41ee, 0x4651, 0x407e, 0x4353, 0x4245, 0xbae4, 0xa4d0, 0x0dd5, 0xb27b, 0x1be0, 0x4062, 0xb220, 0x4352, 0x40e3, 0x41c9, 0xb21f, 0xbf00, 0xbf03, 0x29da, 0x40c0, 0x4179, 0x1f95, 0x187d, 0x43d8, 0x1ad8, 0xb223, 0x4648, 0x3fb2, 0x2ec5, 0xba50, 0x42c2, 0x3b0b, 0x1fbf, 0xb240, 0x41e0, 0x3a20, 0x032c, 0xb21a, 0xa161, 0x42bb, 0xbf26, 0xbf80, 0x446c, 0x4305, 0xb068, 0xba5f, 0x130a, 0x2736, 0xabf8, 0x1967, 0x2038, 0xb260, 0xba40, 0x4241, 0xaf27, 0x4381, 0x40af, 0x438c, 0x437c, 0x4672, 0xbae3, 0x3e4c, 0xb228, 0x1cc4, 0x432e, 0xbf3a, 0x1c2b, 0x1678, 0xa23f, 0x1dd4, 0x42a9, 0xbff0, 0x397e, 0x42a1, 0xbf54, 0x41a6, 0x4124, 0xb2f5, 0x1d50, 0x42a9, 0xba79, 0xba33, 0xa80d, 0xbf60, 0x4329, 0x4161, 0x3a12, 0x40ed, 0x4562, 0x4303, 0x1853, 0xbf6b, 0x4379, 0x4307, 0x436e, 0x41b0, 0xba44, 0x4178, 0xbf90, 0xb2db, 0xa99c, 0x4671, 0x46a9, 0x44b3, 0x40fc, 0xab9e, 0xb21d, 0x42a7, 0x40f3, 0xb2cd, 0x24b3, 0x41b7, 0x1db8, 0xbf4c, 0x4207, 0xba4b, 0x4227, 0xb064, 0x405a, 0x416a, 0x1222, 0xb0e1, 0x0ff4, 0xba13, 0xbf8a, 0x423f, 0x440b, 0x4007, 0xbadf, 0xb25b, 0xae38, 0x229d, 0xbfcb, 0x3f66, 0x259e, 0xb092, 0x4248, 0x422f, 0x18b3, 0xbfd2, 0x147a, 0x43ce, 0xac74, 0xa9c0, 0x454c, 0xba1f, 0x0865, 0x40bf, 0xb291, 0xb241, 0x4311, 0x1e25, 0xb2e5, 0x3038, 0x4647, 0x4254, 0x4007, 0x4276, 0x42cb, 0x4024, 0x1ee1, 0x206a, 0x0c99, 0x3aea, 0xbfc8, 0xbf60, 0x1eea, 0x410e, 0x4365, 0x03ee, 0x1d17, 0xb2e5, 0x4244, 0x0fc2, 0x1bf2, 0x1b74, 0xbac0, 0x1770, 0xbfcd, 0x02d1, 0x4251, 0x4200, 0xb2c5, 0xbafb, 0x43b8, 0xbf87, 0x425a, 0xbfd0, 0x18bb, 0x4186, 0xb0de, 0xba16, 0x199f, 0x444c, 0x4265, 0xa487, 0x41cf, 0x40e4, 0xb093, 0xbfa0, 0x4164, 0x0082, 0x433b, 0x40a3, 0x1957, 0x0653, 0xba10, 0x1011, 0x43cc, 0xb08c, 0xb24a, 0x2f88, 0xbfe4, 0xb291, 0x4251, 0xb0ec, 0xba67, 0x3fec, 0x401c, 0x2df3, 0xb225, 0x1ed0, 0x22cf, 0x41c4, 0xbfdc, 0xaa7d, 0x1e25, 0x40a5, 0x43a0, 0x41bf, 0xba39, 0x40cc, 0x4117, 0x46b9, 0x407b, 0xb0d5, 0x1cfb, 0x43ed, 0xb2ce, 0x4229, 0x2a4a, 0x1317, 0x41f3, 0x1a08, 0x1aae, 0x1737, 0xbf8a, 0x1ee8, 0x430e, 0x401b, 0x419c, 0x4121, 0xba1d, 0x109a, 0x18d9, 0x1dc3, 0x4331, 0xbac3, 0x00f7, 0x4178, 0x41c8, 0xa2e7, 0xb2be, 0x18bc, 0xb288, 0x1527, 0x43e5, 0x1c45, 0x2f37, 0x423d, 0xba43, 0x4238, 0xbf75, 0x22e5, 0xbfb0, 0x4073, 0x34ad, 0xa802, 0xb084, 0x4154, 0x4333, 0xa7e3, 0x4170, 0x43d9, 0xbfa0, 0x43c6, 0x43d0, 0xb292, 0xa2aa, 0x42e5, 0xbace, 0x42a1, 0x4361, 0x42f9, 0xbf4c, 0x423e, 0x0e80, 0xb233, 0xb2c7, 0xa44f, 0x1a00, 0xbf00, 0x1d47, 0xb265, 0xb203, 0x4330, 0x4268, 0x40c9, 0xb299, 0xba4d, 0xb23a, 0x2d3b, 0xba5e, 0xbf00, 0x43cb, 0xbf28, 0x1595, 0x43e5, 0x0dd2, 0xb287, 0x429c, 0x4683, 0xbfe0, 0x410c, 0x4363, 0x117d, 0x0706, 0x377b, 0xbfa4, 0xb2e7, 0x42e5, 0x45e1, 0x441b, 0x42bf, 0xb08c, 0x427e, 0xb05a, 0x09e5, 0xbf69, 0x438c, 0xbafe, 0x45f6, 0xaad2, 0x0016, 0xbf0b, 0x419d, 0x4024, 0x4146, 0xb0b5, 0x461d, 0x41f8, 0xb044, 0x1cc0, 0xbae5, 0xb086, 0x44cc, 0x420f, 0xb0b0, 0x4679, 0x4009, 0x1a55, 0x404c, 0x41cb, 0x4035, 0x4313, 0x4085, 0x404f, 0x000e, 0x1544, 0xada3, 0xbf09, 0x2288, 0xb215, 0x40ff, 0x426a, 0x40a6, 0xb26e, 0x305e, 0xb206, 0x3b04, 0xa30a, 0xba3a, 0x459e, 0xba24, 0x418b, 0x40ad, 0x440a, 0x435d, 0xb262, 0x42ad, 0xb0d9, 0xb08c, 0xbf5c, 0x4351, 0xb2d0, 0xbf12, 0x1b96, 0xb27a, 0x4154, 0xa009, 0x1c94, 0xa32e, 0x1c08, 0x38a7, 0x43af, 0x418b, 0x43c7, 0x296c, 0x273c, 0x4276, 0x25d3, 0x42c3, 0xba0c, 0xb284, 0xbf19, 0xb2ea, 0xba0e, 0x4069, 0xb003, 0x469c, 0xb0ee, 0xb219, 0x43cb, 0x424b, 0x41f6, 0x3973, 0xb271, 0x401c, 0x23a6, 0x40ea, 0xba16, 0x194a, 0xa210, 0x1c5b, 0xb07a, 0xbfa1, 0x4271, 0x190b, 0xba0c, 0x0783, 0xa0dc, 0x46d0, 0xbf54, 0x42fc, 0x0ea4, 0x1cde, 0x0a0a, 0x4115, 0xb2b7, 0xb2fa, 0xbf2f, 0x436e, 0x4374, 0xba73, 0x43cd, 0x4460, 0xad56, 0xb2cd, 0x4157, 0x40c1, 0x1a23, 0x4011, 0x42de, 0x42ab, 0x41f5, 0x4299, 0x43d1, 0x36ef, 0x4135, 0xade3, 0xbfcc, 0x1d9e, 0x425d, 0x43d0, 0xb26e, 0xb26d, 0xb0fe, 0xbaf7, 0x4106, 0x43d0, 0x4311, 0xbfdc, 0x2ac1, 0xb048, 0x434f, 0xb2b4, 0x12bc, 0x1ff4, 0x1aa2, 0xbad4, 0x428d, 0xb28c, 0x44e3, 0x4323, 0x407e, 0x350d, 0x4600, 0x4304, 0x40b5, 0x4253, 0xb2d9, 0xbfd7, 0xb062, 0xb0bd, 0x4567, 0x465d, 0xba1f, 0x0580, 0x46da, 0xb073, 0x3249, 0xb2fc, 0x41a4, 0x4235, 0x2daa, 0xb097, 0xbf5a, 0x41aa, 0x44c3, 0x42c0, 0x0536, 0xb239, 0x42c5, 0xbf6e, 0x19da, 0x296c, 0x324a, 0x395f, 0x40c6, 0x40fe, 0x4023, 0x00f5, 0x281c, 0x2646, 0x3352, 0xb2b7, 0xb2fb, 0xb27b, 0x44a0, 0x41ee, 0xbf81, 0xa1c3, 0x43e2, 0x4047, 0x43c2, 0xba7c, 0x2eae, 0xb281, 0x1807, 0x23c0, 0x1b92, 0x4116, 0xa4a6, 0x43f3, 0x4333, 0x1ae6, 0x25ec, 0x373d, 0xbfc3, 0xafa6, 0x409b, 0x1ffa, 0x183a, 0x46d5, 0x42e4, 0x418e, 0x422e, 0x43ad, 0xad75, 0x18e8, 0x4087, 0x0fb4, 0x0dc6, 0x1913, 0xabed, 0x4331, 0x40fa, 0xbf95, 0x18ab, 0x1aa0, 0x33e6, 0x4354, 0x4338, 0xb2cf, 0x4683, 0x4289, 0x42a1, 0x1ed3, 0x43c5, 0x434e, 0xb2bc, 0xa1bd, 0x4098, 0x418a, 0x25fe, 0x4348, 0x27b1, 0xa5ce, 0x121a, 0x4229, 0xbfa4, 0xb2d8, 0xb290, 0xbfdd, 0xa03c, 0x4217, 0x41b7, 0x41c0, 0xb0e8, 0x19ee, 0x41ea, 0x4294, 0x418d, 0x4075, 0xb04c, 0xbfce, 0xb083, 0x3289, 0x40a7, 0x429d, 0x4277, 0x454a, 0x43a4, 0x1f9a, 0xb2cf, 0x40a6, 0x42b7, 0xb277, 0x27de, 0x43cd, 0xba20, 0xb255, 0x4301, 0x43de, 0x41f0, 0xba42, 0x40b3, 0x05ae, 0xbafb, 0xbaf1, 0x443b, 0x4022, 0xbf68, 0xb286, 0xb2f3, 0xac85, 0x4129, 0x435d, 0x4344, 0x42c3, 0x41d8, 0xb247, 0xbf65, 0x42b9, 0x0ff6, 0x412c, 0xb2e8, 0x4406, 0x42e1, 0x3032, 0x416c, 0xb298, 0xab81, 0xb090, 0x434d, 0xbf87, 0x1cb0, 0x404c, 0xaf0e, 0x33b1, 0x3a35, 0x1c47, 0x43e5, 0xbacc, 0x323d, 0x336a, 0x4125, 0xb062, 0xba38, 0x429b, 0x4173, 0xbf95, 0x40bd, 0x164b, 0xb232, 0xb292, 0x4283, 0xa0d8, 0xb0a5, 0x197f, 0x43d2, 0x1b4f, 0x092b, 0x40d5, 0x1abc, 0x468d, 0xb0ac, 0xb289, 0xb231, 0x1f75, 0xba2c, 0x3a4e, 0x429d, 0x3a08, 0x414a, 0x400f, 0xbfc5, 0x42db, 0x4041, 0x4204, 0xb225, 0x022c, 0x41a9, 0x1def, 0x1cf5, 0x4217, 0x4047, 0x0cb3, 0x3896, 0x4383, 0x28ec, 0x4036, 0x434c, 0x424d, 0x392c, 0x0f8f, 0x2d25, 0x1ca0, 0x40d1, 0x4273, 0x4365, 0x41ce, 0xbf27, 0xb22d, 0x1762, 0x430b, 0xb23a, 0x419f, 0x40f7, 0x421c, 0x44f9, 0x41fa, 0x43d0, 0x428a, 0xb010, 0xb0b8, 0x402a, 0x40ba, 0xbf65, 0x3a3b, 0x4205, 0x41d3, 0xb2df, 0xb019, 0x422b, 0x4207, 0xba0a, 0x430c, 0x18fd, 0xbaf8, 0x4162, 0x400e, 0x4099, 0x40bd, 0x268f, 0xbaee, 0x42ed, 0x1a55, 0x42a5, 0x19bf, 0xb229, 0xb2de, 0x4169, 0xba79, 0x0f16, 0xb2d5, 0x4193, 0xbf2f, 0x0861, 0x4315, 0x05f0, 0xba76, 0xb2e6, 0xbf75, 0x0d63, 0x4580, 0x41dc, 0x4196, 0xbad8, 0x042b, 0x1a1c, 0x1e88, 0xba71, 0x19b1, 0x08a3, 0x314e, 0xba39, 0x40f9, 0x23e3, 0xb0e9, 0x11cb, 0x41b8, 0xbf1c, 0x1a4f, 0xa122, 0x416d, 0xb045, 0xb05f, 0x456c, 0x2fbd, 0x1eae, 0x43ef, 0x1264, 0x41be, 0x2531, 0x4240, 0xbf8c, 0x40fa, 0xb2ef, 0xaa96, 0x4398, 0x40fe, 0xb2e5, 0x4331, 0x419d, 0xba00, 0x4618, 0x4219, 0x408f, 0x438c, 0xb2a7, 0x41f6, 0xb272, 0xab3a, 0x1bd0, 0x2ece, 0x40ff, 0x1f10, 0xbf34, 0x2253, 0x40a3, 0x426e, 0x4206, 0x4262, 0x4354, 0x2793, 0xae78, 0x427a, 0x4370, 0x1911, 0x387b, 0x46e4, 0x18dc, 0x4259, 0x4013, 0xad55, 0x443c, 0x4231, 0xb015, 0x42d5, 0xa0d6, 0x41b8, 0xbf92, 0x4689, 0x4305, 0x3f97, 0x4356, 0xba74, 0x40a2, 0x43b8, 0x46bc, 0x4002, 0x0f62, 0xbacf, 0xbadb, 0x4562, 0xbf3c, 0xbfd0, 0x1eb6, 0x4770, 0xe7fe + ], + StartRegs = [0xb6e12d7d, 0x2bc8f2a0, 0xe074d4cb, 0x76b33514, 0x92975e84, 0xc4f82ea7, 0xeb560f6d, 0x9507ee5e, 0xd48a048b, 0x1aa04244, 0xe9639443, 0xe7dafbbf, 0x050a37ec, 0x91c1b356, 0x00000000, 0xd00001f0 + ], + FinalRegs = [0x00000001, 0xffffff18, 0x00000007, 0x00006800, 0xfeff60ec, 0x00001b7d, 0xfffeec5e, 0x000018ff, 0xe9639443, 0x000016c5, 0x00001547, 0xf400171a, 0xfffffffc, 0x00000054, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xb29c, 0xba51, 0x43ec, 0x4103, 0x372e, 0x2b03, 0x42b6, 0x41ad, 0xbac4, 0x463c, 0x2969, 0x24f2, 0x2801, 0x4274, 0xb048, 0x438e, 0x3129, 0x41e5, 0xb223, 0x40f8, 0xb004, 0xbac2, 0xba3e, 0x1aa2, 0xbf3b, 0x427c, 0x458c, 0x4062, 0x1d1d, 0x4184, 0x16db, 0x4429, 0x1dae, 0x4326, 0xbacf, 0x404a, 0xb2cc, 0xbf0a, 0xac02, 0x2e4d, 0x29e9, 0x298b, 0x30b9, 0xb0c0, 0xbf43, 0x1d40, 0x0fd8, 0xb21a, 0x2ed1, 0xb23d, 0x1fc5, 0x4639, 0x4308, 0x41f1, 0xba0c, 0x0fb2, 0xbff0, 0xbfd4, 0x40c3, 0xba36, 0x42d3, 0xba79, 0x42f6, 0x44c1, 0x414d, 0x430a, 0x4163, 0xbf0d, 0x3df5, 0x4390, 0xb280, 0xa4a3, 0x1918, 0x4075, 0x40f7, 0x4254, 0x431b, 0x40f2, 0x4272, 0xb252, 0x43c5, 0xb21f, 0xba24, 0xbfaa, 0x4096, 0xbac4, 0x4469, 0xbf28, 0xb098, 0xb24b, 0x42b8, 0x3c87, 0xb0bf, 0xba48, 0xa742, 0x41ed, 0xba57, 0xbff0, 0x42dd, 0x43f2, 0xb2e8, 0x1f6e, 0x2f4d, 0xbfc8, 0xafdb, 0xbaf9, 0x4313, 0x2895, 0xb06b, 0x180c, 0xb247, 0x1a0e, 0x4002, 0xb2be, 0x3206, 0x43e3, 0x40ec, 0x4609, 0xbf00, 0x410e, 0x4328, 0x45c5, 0xbf21, 0x169f, 0x1a33, 0xa416, 0xb2af, 0x42d6, 0xbfa4, 0x439f, 0xacea, 0x40c3, 0x43d7, 0x4184, 0x1ea5, 0xbade, 0x41b2, 0xbf96, 0xbac9, 0x1703, 0x18d6, 0xbf60, 0x1cb9, 0x2c88, 0x3e09, 0xba5f, 0x3f42, 0xb2d1, 0xb2a6, 0x42cf, 0xb2be, 0x2c25, 0x4315, 0xba76, 0xb029, 0x41fe, 0x437c, 0x4186, 0x41ce, 0x1adf, 0xba71, 0xb0d3, 0xbf76, 0x4399, 0x42b3, 0x418d, 0x4258, 0x1fe3, 0x4150, 0x4595, 0x1b75, 0x4255, 0x40d4, 0x42ee, 0x4207, 0xba40, 0x41c3, 0x030d, 0x2a47, 0x1f8f, 0x40a9, 0xb0c1, 0xbfae, 0x4080, 0x4358, 0x4005, 0xbfe2, 0x1724, 0xa1be, 0x183c, 0x408e, 0x3b25, 0xb255, 0x4222, 0xb2e2, 0x1244, 0xb0bd, 0xa6fa, 0x1fe0, 0xb05f, 0xb237, 0x07aa, 0xbaef, 0xa553, 0x3698, 0x41c0, 0x41a0, 0x4354, 0xbfcc, 0x46d0, 0xb0fd, 0x1374, 0x42ec, 0x4077, 0xa062, 0x1e82, 0x40fe, 0xb227, 0x172b, 0xbfa3, 0x0541, 0xb093, 0xba2e, 0x4359, 0x3053, 0x4163, 0x4190, 0x01d8, 0x434b, 0x420a, 0x0cdf, 0x1b4d, 0x4045, 0x09df, 0xb268, 0x1d2c, 0xb008, 0xbfe2, 0x4342, 0x4138, 0x2a50, 0x4197, 0x43d7, 0xbafc, 0x443a, 0xa855, 0xb00a, 0x43b9, 0xbaf2, 0xbf4d, 0x1f75, 0x42d8, 0x431a, 0x407c, 0xbac1, 0x42b1, 0x08e3, 0x4217, 0x2206, 0x436d, 0x429d, 0x43d8, 0xb061, 0x4280, 0x4164, 0x422c, 0xbfd8, 0x405c, 0x1ae9, 0x1cce, 0x4346, 0xb079, 0x2ad0, 0xafb0, 0x10f5, 0x430d, 0x41ad, 0xbfe2, 0x0a34, 0x0894, 0x1b3e, 0x429b, 0x46a8, 0xb2e6, 0x40cb, 0x3e07, 0x40ea, 0x2248, 0x4096, 0xba45, 0x43b5, 0x40c4, 0x40c0, 0x1a05, 0x4044, 0x4303, 0x42ab, 0x15f7, 0x4679, 0x4321, 0x447e, 0x429b, 0xbfc2, 0x1d66, 0x42f6, 0xb079, 0x24c9, 0x189d, 0xbad0, 0x20cb, 0x43d4, 0x1572, 0x4352, 0x2b09, 0xb2b0, 0x0800, 0xba78, 0x1e22, 0x1973, 0xb27e, 0xb2d0, 0xb21c, 0x3d33, 0x2ea5, 0x0470, 0x419e, 0x066e, 0xbadb, 0x43a1, 0x412f, 0xbf52, 0xba60, 0xb2a5, 0xba7f, 0xb019, 0x4117, 0x43cf, 0x1f1f, 0x42ca, 0x40ab, 0xa704, 0x18b4, 0x3160, 0x435a, 0xb2da, 0xbaee, 0x252b, 0xbf94, 0x374f, 0xb0e2, 0x3612, 0xbf90, 0x1c26, 0xa209, 0x4173, 0x4119, 0x4375, 0xb09a, 0x2b4a, 0x41d0, 0x404e, 0x4337, 0xa05b, 0xbad3, 0x3b56, 0x1b76, 0xba1d, 0xb217, 0x41de, 0xbf1a, 0x1e6f, 0xb234, 0xbae1, 0x45c5, 0x2c47, 0x41e8, 0x1fe5, 0x42bb, 0xbacb, 0xb007, 0x43e8, 0x423a, 0x3f88, 0x0af3, 0x1cbb, 0x408f, 0x427d, 0x403e, 0xb253, 0x43b4, 0x436a, 0xb252, 0x2ae0, 0x3ae8, 0x435e, 0xb06f, 0xbf84, 0x34ff, 0x1acd, 0xba06, 0x22dc, 0x4022, 0x4343, 0x45f4, 0x4361, 0x18d9, 0x40fc, 0xb024, 0x4208, 0x1820, 0x4391, 0x41ea, 0x37a3, 0x46c8, 0xbf60, 0xb04f, 0x41dd, 0x0cfa, 0x0e15, 0xa479, 0xbac6, 0xbf54, 0x46c2, 0x288a, 0x182e, 0xba13, 0x1f09, 0x40dd, 0xa3e4, 0x426a, 0xb27d, 0x2af6, 0xbafe, 0x41e7, 0xba35, 0xb07c, 0x050a, 0xb2e1, 0xabb5, 0x1423, 0x3493, 0x40be, 0x2644, 0x1da5, 0x1bae, 0x1e6c, 0x41c0, 0x44c9, 0xbfc3, 0x40c4, 0x21e1, 0xaeb3, 0x1fdc, 0xb254, 0x418a, 0xbf0b, 0xb224, 0xae41, 0x42e5, 0x42f6, 0x2d3f, 0x4137, 0xb093, 0x4105, 0x420d, 0x40ac, 0xb210, 0x42dd, 0x2bf7, 0x43bc, 0x417d, 0xb2f3, 0xac37, 0x4031, 0xb2cc, 0x405b, 0x415f, 0x23b1, 0xb215, 0xba5e, 0xa2d0, 0x4415, 0x2582, 0xbf1c, 0x408a, 0x42a5, 0x4118, 0xb292, 0x413e, 0x4472, 0x406b, 0xb2c3, 0x3639, 0x40e3, 0xb25e, 0xbfd0, 0x40f2, 0x1fd9, 0xbfb0, 0x1e92, 0x1e5f, 0x40df, 0x4665, 0xbf37, 0x4479, 0x1602, 0x1a33, 0x437a, 0x2900, 0x4411, 0xbf00, 0xbf60, 0x4108, 0x41ef, 0xb2d3, 0x42f9, 0x38a6, 0x43f4, 0xb2d5, 0x292a, 0xba42, 0x2eb4, 0xbae0, 0xa21b, 0x1a60, 0xbf8a, 0xb239, 0x1dea, 0x1be6, 0x4042, 0x18b4, 0x4217, 0x0c3d, 0x1826, 0x41d1, 0xba1c, 0x36b3, 0xa241, 0x43f6, 0x4435, 0x425e, 0x3c53, 0x2281, 0x25fe, 0x409d, 0x42c6, 0xba3b, 0x43ba, 0xbf86, 0xba54, 0x2522, 0x43df, 0xbfd7, 0x18f1, 0x4308, 0x1fb2, 0x429d, 0xb010, 0x4445, 0x4169, 0x4054, 0x2abe, 0xa0b6, 0x3317, 0x1f53, 0x42d4, 0x4272, 0x46ab, 0x2008, 0x1d36, 0xbf73, 0x42d6, 0xb238, 0x425f, 0x411c, 0x4098, 0xb044, 0xb23a, 0x420d, 0x1f38, 0xb20e, 0x0203, 0xacf3, 0xb2e9, 0x4055, 0x1667, 0x42a1, 0x4073, 0x3006, 0x4229, 0x41e2, 0x4630, 0xb2e0, 0xa326, 0x4146, 0x1d00, 0xbf35, 0xb2d1, 0x14a1, 0xb2e9, 0x31e8, 0x0f16, 0x41ec, 0x4245, 0x1a7a, 0x421a, 0x2429, 0x4017, 0x0882, 0x3395, 0x00f1, 0xbad4, 0x42b0, 0x43d9, 0x293c, 0xbf98, 0x1938, 0x40a9, 0xb26c, 0x1bf5, 0x1a28, 0x4016, 0x432b, 0xb21e, 0x43e9, 0x4457, 0x417a, 0x41b0, 0x4052, 0xbae8, 0xa883, 0xb266, 0xba3a, 0x431e, 0x1b96, 0x4238, 0x43ac, 0xbfc0, 0x4157, 0xbf04, 0xaa02, 0x42a0, 0xba3b, 0x4114, 0x4145, 0x3e46, 0x0cc6, 0x1885, 0x4102, 0x43ba, 0x430e, 0xb2d1, 0xb286, 0x3084, 0x01e7, 0xa8bb, 0x42d1, 0xba6c, 0x402b, 0x427c, 0x4279, 0xbf61, 0x4177, 0x40f1, 0x424e, 0x01c2, 0x11e7, 0x369e, 0x413e, 0x1a54, 0xb090, 0x1844, 0x43c1, 0x42dc, 0x4038, 0xbadb, 0xbf1c, 0x4345, 0xbaf7, 0x4103, 0xb297, 0xb030, 0xba42, 0xac35, 0x4078, 0xba2a, 0xbfb9, 0x416f, 0xba16, 0xa940, 0x41f8, 0xbf65, 0x43c9, 0x45a4, 0xb2fe, 0x4020, 0xba2b, 0x400e, 0xb282, 0x40ec, 0x1afb, 0x4584, 0xbf70, 0x3323, 0x41c6, 0x1bfb, 0xb288, 0xbfac, 0xba01, 0xa344, 0x3658, 0xba58, 0x408e, 0x1efe, 0xb0bf, 0x119d, 0x0af0, 0x4194, 0x4162, 0x419b, 0x4311, 0xb2f7, 0x4312, 0x411a, 0xbf70, 0x405d, 0x405d, 0x1b4b, 0xbad8, 0x416e, 0x4327, 0xbf63, 0x4311, 0x1fcc, 0x41f8, 0x2cae, 0x41d4, 0x422b, 0xbf6b, 0x4260, 0x43cb, 0x1cd2, 0xa5a3, 0xbfb0, 0xb030, 0xbfac, 0xbfc0, 0x4148, 0x4264, 0x3326, 0x41cb, 0x4132, 0x2736, 0xb012, 0x11c0, 0x3453, 0xbfa9, 0x1e76, 0xb0f2, 0xb2b5, 0xba0e, 0x09f7, 0x1b71, 0x46a5, 0x415a, 0xb29f, 0x4493, 0xb0f9, 0x3943, 0x317b, 0x44e4, 0x438c, 0xbf0b, 0x4144, 0x07a1, 0x4392, 0xadf3, 0xaf15, 0x1422, 0x212f, 0xa165, 0x44db, 0x070c, 0x4381, 0xb0e2, 0x1f2b, 0x40a3, 0x4647, 0x3bf5, 0x1b02, 0x42c9, 0x2996, 0x43a7, 0x0d6b, 0x46eb, 0xb0e6, 0x4160, 0x41be, 0xb053, 0xb083, 0x1e27, 0xbf2a, 0x22b5, 0xbaf4, 0x08fb, 0x4556, 0x464b, 0x4333, 0x1337, 0x1a48, 0xb29e, 0x4167, 0x41ee, 0xb2d8, 0xbfa9, 0x1cc6, 0x4351, 0xb28b, 0x4308, 0x43f7, 0x432e, 0x1f58, 0x43b0, 0x4057, 0x41e8, 0x411c, 0x22d8, 0x3135, 0xba7c, 0x43a2, 0x2df5, 0x42cb, 0xb2d6, 0x441d, 0xb2ef, 0x2d14, 0x436b, 0xaed5, 0x322f, 0x1da6, 0xb08e, 0xbf2e, 0xb271, 0x33f0, 0x33be, 0x424c, 0x1be6, 0x4319, 0x2dc9, 0xb06b, 0x1f95, 0x3107, 0xb2ca, 0x439b, 0x1965, 0x2ed1, 0x45ba, 0x2066, 0xbf64, 0x1aca, 0x411b, 0xae5e, 0xadca, 0xb0cf, 0xba28, 0xbf85, 0xb278, 0x41c5, 0xb287, 0xb26e, 0xa4a7, 0x1aeb, 0xba16, 0x41b8, 0x3a44, 0xbf80, 0x42e4, 0x0580, 0x3e82, 0xb2f4, 0x1afe, 0xb244, 0xb25b, 0xbafb, 0x1961, 0x41f9, 0xbfb0, 0xba5f, 0x0ba4, 0x40d9, 0xb21b, 0xbf29, 0x01dd, 0xa878, 0xbfd0, 0xb2ad, 0x1ba2, 0x1c18, 0xaf6a, 0x39a8, 0xbfc0, 0x3400, 0x40b3, 0x192a, 0x4128, 0x3f37, 0x42c0, 0x14c8, 0x42d4, 0x402d, 0x21a6, 0xb25b, 0x4045, 0x184f, 0x406f, 0xb0de, 0x4046, 0xbf8a, 0xba50, 0xaae3, 0x2719, 0xb2d4, 0xb22b, 0x35ad, 0x40fb, 0x0e62, 0x43ac, 0x439a, 0x0f5d, 0x4063, 0x1ca1, 0x40a4, 0x406a, 0x18fb, 0x27b5, 0x409a, 0xbf6b, 0x43c7, 0x293d, 0x074b, 0x336f, 0x456f, 0x41e1, 0x40a7, 0x2b00, 0x3c88, 0x4616, 0x1f8d, 0xb2b5, 0x129a, 0x4224, 0x407e, 0xbf53, 0x3fae, 0xbacf, 0x4313, 0x46ec, 0x1a1c, 0x4268, 0xb07b, 0x433e, 0x4407, 0x4189, 0x45ce, 0x428c, 0xb068, 0x413f, 0xbfac, 0xb200, 0xbae2, 0x1f79, 0x4236, 0x417c, 0xa561, 0xbaf0, 0xb2f6, 0x1290, 0xb243, 0xba63, 0x40c8, 0xbfa0, 0xafcf, 0x43f2, 0x1bdd, 0x42bf, 0xbfa3, 0x42c0, 0xba51, 0x1c8c, 0xba37, 0xb239, 0x4008, 0xb2e7, 0xb290, 0xbaee, 0x431d, 0x421f, 0x4364, 0x437c, 0x01b9, 0x43ad, 0x4544, 0x2c61, 0x4640, 0xa354, 0x2ad2, 0x2d4b, 0x4052, 0xbf2f, 0xaff9, 0xaa46, 0xae6b, 0x0c27, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x60ab798e, 0xeb64755b, 0x32fad41e, 0x906517a9, 0x6b2d648d, 0x9c5a9d43, 0xefba7776, 0x297a6da6, 0x3750e535, 0xf070ec03, 0x5dff78cd, 0x69746ba1, 0xc40e9ad7, 0xa94af44d, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0x27c1d138, 0x00000040, 0x00000374, 0x0000192c, 0x82cf9201, 0x00000000, 0x00000408, 0x000082cf, 0x27c1d138, 0x4f83a270, 0x27c1d138, 0x00000068, 0xfffffed0, 0x0000025c, 0x00000000, 0x400001d0 }, + Instructions = [0xb29c, 0xba51, 0x43ec, 0x4103, 0x372e, 0x2b03, 0x42b6, 0x41ad, 0xbac4, 0x463c, 0x2969, 0x24f2, 0x2801, 0x4274, 0xb048, 0x438e, 0x3129, 0x41e5, 0xb223, 0x40f8, 0xb004, 0xbac2, 0xba3e, 0x1aa2, 0xbf3b, 0x427c, 0x458c, 0x4062, 0x1d1d, 0x4184, 0x16db, 0x4429, 0x1dae, 0x4326, 0xbacf, 0x404a, 0xb2cc, 0xbf0a, 0xac02, 0x2e4d, 0x29e9, 0x298b, 0x30b9, 0xb0c0, 0xbf43, 0x1d40, 0x0fd8, 0xb21a, 0x2ed1, 0xb23d, 0x1fc5, 0x4639, 0x4308, 0x41f1, 0xba0c, 0x0fb2, 0xbff0, 0xbfd4, 0x40c3, 0xba36, 0x42d3, 0xba79, 0x42f6, 0x44c1, 0x414d, 0x430a, 0x4163, 0xbf0d, 0x3df5, 0x4390, 0xb280, 0xa4a3, 0x1918, 0x4075, 0x40f7, 0x4254, 0x431b, 0x40f2, 0x4272, 0xb252, 0x43c5, 0xb21f, 0xba24, 0xbfaa, 0x4096, 0xbac4, 0x4469, 0xbf28, 0xb098, 0xb24b, 0x42b8, 0x3c87, 0xb0bf, 0xba48, 0xa742, 0x41ed, 0xba57, 0xbff0, 0x42dd, 0x43f2, 0xb2e8, 0x1f6e, 0x2f4d, 0xbfc8, 0xafdb, 0xbaf9, 0x4313, 0x2895, 0xb06b, 0x180c, 0xb247, 0x1a0e, 0x4002, 0xb2be, 0x3206, 0x43e3, 0x40ec, 0x4609, 0xbf00, 0x410e, 0x4328, 0x45c5, 0xbf21, 0x169f, 0x1a33, 0xa416, 0xb2af, 0x42d6, 0xbfa4, 0x439f, 0xacea, 0x40c3, 0x43d7, 0x4184, 0x1ea5, 0xbade, 0x41b2, 0xbf96, 0xbac9, 0x1703, 0x18d6, 0xbf60, 0x1cb9, 0x2c88, 0x3e09, 0xba5f, 0x3f42, 0xb2d1, 0xb2a6, 0x42cf, 0xb2be, 0x2c25, 0x4315, 0xba76, 0xb029, 0x41fe, 0x437c, 0x4186, 0x41ce, 0x1adf, 0xba71, 0xb0d3, 0xbf76, 0x4399, 0x42b3, 0x418d, 0x4258, 0x1fe3, 0x4150, 0x4595, 0x1b75, 0x4255, 0x40d4, 0x42ee, 0x4207, 0xba40, 0x41c3, 0x030d, 0x2a47, 0x1f8f, 0x40a9, 0xb0c1, 0xbfae, 0x4080, 0x4358, 0x4005, 0xbfe2, 0x1724, 0xa1be, 0x183c, 0x408e, 0x3b25, 0xb255, 0x4222, 0xb2e2, 0x1244, 0xb0bd, 0xa6fa, 0x1fe0, 0xb05f, 0xb237, 0x07aa, 0xbaef, 0xa553, 0x3698, 0x41c0, 0x41a0, 0x4354, 0xbfcc, 0x46d0, 0xb0fd, 0x1374, 0x42ec, 0x4077, 0xa062, 0x1e82, 0x40fe, 0xb227, 0x172b, 0xbfa3, 0x0541, 0xb093, 0xba2e, 0x4359, 0x3053, 0x4163, 0x4190, 0x01d8, 0x434b, 0x420a, 0x0cdf, 0x1b4d, 0x4045, 0x09df, 0xb268, 0x1d2c, 0xb008, 0xbfe2, 0x4342, 0x4138, 0x2a50, 0x4197, 0x43d7, 0xbafc, 0x443a, 0xa855, 0xb00a, 0x43b9, 0xbaf2, 0xbf4d, 0x1f75, 0x42d8, 0x431a, 0x407c, 0xbac1, 0x42b1, 0x08e3, 0x4217, 0x2206, 0x436d, 0x429d, 0x43d8, 0xb061, 0x4280, 0x4164, 0x422c, 0xbfd8, 0x405c, 0x1ae9, 0x1cce, 0x4346, 0xb079, 0x2ad0, 0xafb0, 0x10f5, 0x430d, 0x41ad, 0xbfe2, 0x0a34, 0x0894, 0x1b3e, 0x429b, 0x46a8, 0xb2e6, 0x40cb, 0x3e07, 0x40ea, 0x2248, 0x4096, 0xba45, 0x43b5, 0x40c4, 0x40c0, 0x1a05, 0x4044, 0x4303, 0x42ab, 0x15f7, 0x4679, 0x4321, 0x447e, 0x429b, 0xbfc2, 0x1d66, 0x42f6, 0xb079, 0x24c9, 0x189d, 0xbad0, 0x20cb, 0x43d4, 0x1572, 0x4352, 0x2b09, 0xb2b0, 0x0800, 0xba78, 0x1e22, 0x1973, 0xb27e, 0xb2d0, 0xb21c, 0x3d33, 0x2ea5, 0x0470, 0x419e, 0x066e, 0xbadb, 0x43a1, 0x412f, 0xbf52, 0xba60, 0xb2a5, 0xba7f, 0xb019, 0x4117, 0x43cf, 0x1f1f, 0x42ca, 0x40ab, 0xa704, 0x18b4, 0x3160, 0x435a, 0xb2da, 0xbaee, 0x252b, 0xbf94, 0x374f, 0xb0e2, 0x3612, 0xbf90, 0x1c26, 0xa209, 0x4173, 0x4119, 0x4375, 0xb09a, 0x2b4a, 0x41d0, 0x404e, 0x4337, 0xa05b, 0xbad3, 0x3b56, 0x1b76, 0xba1d, 0xb217, 0x41de, 0xbf1a, 0x1e6f, 0xb234, 0xbae1, 0x45c5, 0x2c47, 0x41e8, 0x1fe5, 0x42bb, 0xbacb, 0xb007, 0x43e8, 0x423a, 0x3f88, 0x0af3, 0x1cbb, 0x408f, 0x427d, 0x403e, 0xb253, 0x43b4, 0x436a, 0xb252, 0x2ae0, 0x3ae8, 0x435e, 0xb06f, 0xbf84, 0x34ff, 0x1acd, 0xba06, 0x22dc, 0x4022, 0x4343, 0x45f4, 0x4361, 0x18d9, 0x40fc, 0xb024, 0x4208, 0x1820, 0x4391, 0x41ea, 0x37a3, 0x46c8, 0xbf60, 0xb04f, 0x41dd, 0x0cfa, 0x0e15, 0xa479, 0xbac6, 0xbf54, 0x46c2, 0x288a, 0x182e, 0xba13, 0x1f09, 0x40dd, 0xa3e4, 0x426a, 0xb27d, 0x2af6, 0xbafe, 0x41e7, 0xba35, 0xb07c, 0x050a, 0xb2e1, 0xabb5, 0x1423, 0x3493, 0x40be, 0x2644, 0x1da5, 0x1bae, 0x1e6c, 0x41c0, 0x44c9, 0xbfc3, 0x40c4, 0x21e1, 0xaeb3, 0x1fdc, 0xb254, 0x418a, 0xbf0b, 0xb224, 0xae41, 0x42e5, 0x42f6, 0x2d3f, 0x4137, 0xb093, 0x4105, 0x420d, 0x40ac, 0xb210, 0x42dd, 0x2bf7, 0x43bc, 0x417d, 0xb2f3, 0xac37, 0x4031, 0xb2cc, 0x405b, 0x415f, 0x23b1, 0xb215, 0xba5e, 0xa2d0, 0x4415, 0x2582, 0xbf1c, 0x408a, 0x42a5, 0x4118, 0xb292, 0x413e, 0x4472, 0x406b, 0xb2c3, 0x3639, 0x40e3, 0xb25e, 0xbfd0, 0x40f2, 0x1fd9, 0xbfb0, 0x1e92, 0x1e5f, 0x40df, 0x4665, 0xbf37, 0x4479, 0x1602, 0x1a33, 0x437a, 0x2900, 0x4411, 0xbf00, 0xbf60, 0x4108, 0x41ef, 0xb2d3, 0x42f9, 0x38a6, 0x43f4, 0xb2d5, 0x292a, 0xba42, 0x2eb4, 0xbae0, 0xa21b, 0x1a60, 0xbf8a, 0xb239, 0x1dea, 0x1be6, 0x4042, 0x18b4, 0x4217, 0x0c3d, 0x1826, 0x41d1, 0xba1c, 0x36b3, 0xa241, 0x43f6, 0x4435, 0x425e, 0x3c53, 0x2281, 0x25fe, 0x409d, 0x42c6, 0xba3b, 0x43ba, 0xbf86, 0xba54, 0x2522, 0x43df, 0xbfd7, 0x18f1, 0x4308, 0x1fb2, 0x429d, 0xb010, 0x4445, 0x4169, 0x4054, 0x2abe, 0xa0b6, 0x3317, 0x1f53, 0x42d4, 0x4272, 0x46ab, 0x2008, 0x1d36, 0xbf73, 0x42d6, 0xb238, 0x425f, 0x411c, 0x4098, 0xb044, 0xb23a, 0x420d, 0x1f38, 0xb20e, 0x0203, 0xacf3, 0xb2e9, 0x4055, 0x1667, 0x42a1, 0x4073, 0x3006, 0x4229, 0x41e2, 0x4630, 0xb2e0, 0xa326, 0x4146, 0x1d00, 0xbf35, 0xb2d1, 0x14a1, 0xb2e9, 0x31e8, 0x0f16, 0x41ec, 0x4245, 0x1a7a, 0x421a, 0x2429, 0x4017, 0x0882, 0x3395, 0x00f1, 0xbad4, 0x42b0, 0x43d9, 0x293c, 0xbf98, 0x1938, 0x40a9, 0xb26c, 0x1bf5, 0x1a28, 0x4016, 0x432b, 0xb21e, 0x43e9, 0x4457, 0x417a, 0x41b0, 0x4052, 0xbae8, 0xa883, 0xb266, 0xba3a, 0x431e, 0x1b96, 0x4238, 0x43ac, 0xbfc0, 0x4157, 0xbf04, 0xaa02, 0x42a0, 0xba3b, 0x4114, 0x4145, 0x3e46, 0x0cc6, 0x1885, 0x4102, 0x43ba, 0x430e, 0xb2d1, 0xb286, 0x3084, 0x01e7, 0xa8bb, 0x42d1, 0xba6c, 0x402b, 0x427c, 0x4279, 0xbf61, 0x4177, 0x40f1, 0x424e, 0x01c2, 0x11e7, 0x369e, 0x413e, 0x1a54, 0xb090, 0x1844, 0x43c1, 0x42dc, 0x4038, 0xbadb, 0xbf1c, 0x4345, 0xbaf7, 0x4103, 0xb297, 0xb030, 0xba42, 0xac35, 0x4078, 0xba2a, 0xbfb9, 0x416f, 0xba16, 0xa940, 0x41f8, 0xbf65, 0x43c9, 0x45a4, 0xb2fe, 0x4020, 0xba2b, 0x400e, 0xb282, 0x40ec, 0x1afb, 0x4584, 0xbf70, 0x3323, 0x41c6, 0x1bfb, 0xb288, 0xbfac, 0xba01, 0xa344, 0x3658, 0xba58, 0x408e, 0x1efe, 0xb0bf, 0x119d, 0x0af0, 0x4194, 0x4162, 0x419b, 0x4311, 0xb2f7, 0x4312, 0x411a, 0xbf70, 0x405d, 0x405d, 0x1b4b, 0xbad8, 0x416e, 0x4327, 0xbf63, 0x4311, 0x1fcc, 0x41f8, 0x2cae, 0x41d4, 0x422b, 0xbf6b, 0x4260, 0x43cb, 0x1cd2, 0xa5a3, 0xbfb0, 0xb030, 0xbfac, 0xbfc0, 0x4148, 0x4264, 0x3326, 0x41cb, 0x4132, 0x2736, 0xb012, 0x11c0, 0x3453, 0xbfa9, 0x1e76, 0xb0f2, 0xb2b5, 0xba0e, 0x09f7, 0x1b71, 0x46a5, 0x415a, 0xb29f, 0x4493, 0xb0f9, 0x3943, 0x317b, 0x44e4, 0x438c, 0xbf0b, 0x4144, 0x07a1, 0x4392, 0xadf3, 0xaf15, 0x1422, 0x212f, 0xa165, 0x44db, 0x070c, 0x4381, 0xb0e2, 0x1f2b, 0x40a3, 0x4647, 0x3bf5, 0x1b02, 0x42c9, 0x2996, 0x43a7, 0x0d6b, 0x46eb, 0xb0e6, 0x4160, 0x41be, 0xb053, 0xb083, 0x1e27, 0xbf2a, 0x22b5, 0xbaf4, 0x08fb, 0x4556, 0x464b, 0x4333, 0x1337, 0x1a48, 0xb29e, 0x4167, 0x41ee, 0xb2d8, 0xbfa9, 0x1cc6, 0x4351, 0xb28b, 0x4308, 0x43f7, 0x432e, 0x1f58, 0x43b0, 0x4057, 0x41e8, 0x411c, 0x22d8, 0x3135, 0xba7c, 0x43a2, 0x2df5, 0x42cb, 0xb2d6, 0x441d, 0xb2ef, 0x2d14, 0x436b, 0xaed5, 0x322f, 0x1da6, 0xb08e, 0xbf2e, 0xb271, 0x33f0, 0x33be, 0x424c, 0x1be6, 0x4319, 0x2dc9, 0xb06b, 0x1f95, 0x3107, 0xb2ca, 0x439b, 0x1965, 0x2ed1, 0x45ba, 0x2066, 0xbf64, 0x1aca, 0x411b, 0xae5e, 0xadca, 0xb0cf, 0xba28, 0xbf85, 0xb278, 0x41c5, 0xb287, 0xb26e, 0xa4a7, 0x1aeb, 0xba16, 0x41b8, 0x3a44, 0xbf80, 0x42e4, 0x0580, 0x3e82, 0xb2f4, 0x1afe, 0xb244, 0xb25b, 0xbafb, 0x1961, 0x41f9, 0xbfb0, 0xba5f, 0x0ba4, 0x40d9, 0xb21b, 0xbf29, 0x01dd, 0xa878, 0xbfd0, 0xb2ad, 0x1ba2, 0x1c18, 0xaf6a, 0x39a8, 0xbfc0, 0x3400, 0x40b3, 0x192a, 0x4128, 0x3f37, 0x42c0, 0x14c8, 0x42d4, 0x402d, 0x21a6, 0xb25b, 0x4045, 0x184f, 0x406f, 0xb0de, 0x4046, 0xbf8a, 0xba50, 0xaae3, 0x2719, 0xb2d4, 0xb22b, 0x35ad, 0x40fb, 0x0e62, 0x43ac, 0x439a, 0x0f5d, 0x4063, 0x1ca1, 0x40a4, 0x406a, 0x18fb, 0x27b5, 0x409a, 0xbf6b, 0x43c7, 0x293d, 0x074b, 0x336f, 0x456f, 0x41e1, 0x40a7, 0x2b00, 0x3c88, 0x4616, 0x1f8d, 0xb2b5, 0x129a, 0x4224, 0x407e, 0xbf53, 0x3fae, 0xbacf, 0x4313, 0x46ec, 0x1a1c, 0x4268, 0xb07b, 0x433e, 0x4407, 0x4189, 0x45ce, 0x428c, 0xb068, 0x413f, 0xbfac, 0xb200, 0xbae2, 0x1f79, 0x4236, 0x417c, 0xa561, 0xbaf0, 0xb2f6, 0x1290, 0xb243, 0xba63, 0x40c8, 0xbfa0, 0xafcf, 0x43f2, 0x1bdd, 0x42bf, 0xbfa3, 0x42c0, 0xba51, 0x1c8c, 0xba37, 0xb239, 0x4008, 0xb2e7, 0xb290, 0xbaee, 0x431d, 0x421f, 0x4364, 0x437c, 0x01b9, 0x43ad, 0x4544, 0x2c61, 0x4640, 0xa354, 0x2ad2, 0x2d4b, 0x4052, 0xbf2f, 0xaff9, 0xaa46, 0xae6b, 0x0c27, 0x4770, 0xe7fe + ], + StartRegs = [0x60ab798e, 0xeb64755b, 0x32fad41e, 0x906517a9, 0x6b2d648d, 0x9c5a9d43, 0xefba7776, 0x297a6da6, 0x3750e535, 0xf070ec03, 0x5dff78cd, 0x69746ba1, 0xc40e9ad7, 0xa94af44d, 0x00000000, 0x200001f0 + ], + FinalRegs = [0x27c1d138, 0x00000040, 0x00000374, 0x0000192c, 0x82cf9201, 0x00000000, 0x00000408, 0x000082cf, 0x27c1d138, 0x4f83a270, 0x27c1d138, 0x00000068, 0xfffffed0, 0x0000025c, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0xb234, 0x4215, 0x2ab0, 0x43d9, 0x42a0, 0x432b, 0x0bb3, 0x191b, 0x086d, 0x4251, 0x42d3, 0xba6f, 0xa2e4, 0x4069, 0x42ec, 0xae3e, 0xb293, 0xbf16, 0xa0fb, 0x433a, 0x4366, 0x45a5, 0x41d4, 0xb2ca, 0x1ed4, 0xb06d, 0x2a1c, 0x1fbf, 0xbaf6, 0xb266, 0xb293, 0x1c35, 0x3693, 0x2df7, 0xb031, 0x1c23, 0xad6c, 0x36e1, 0x4116, 0xbfc0, 0x32a2, 0xba37, 0x455d, 0x40e1, 0x4047, 0xbf01, 0xbaf8, 0xbad3, 0x19a9, 0x4255, 0xb074, 0x4360, 0xba2b, 0x1e38, 0x18c5, 0x44ed, 0x44e5, 0x187b, 0xb22a, 0x40a3, 0x1852, 0xb276, 0x40dc, 0x42dc, 0x2cf9, 0xb041, 0x18c1, 0xba29, 0xbff0, 0xa748, 0x42ab, 0xbf7d, 0x253d, 0x4352, 0x0c85, 0x438f, 0x4274, 0x3cf4, 0xafce, 0x1974, 0xb074, 0xbfa6, 0x4257, 0xba5b, 0x4037, 0xa515, 0xb0bd, 0x04fe, 0x1cf8, 0x420c, 0x4119, 0x4184, 0x4312, 0x45d3, 0x41ef, 0x4011, 0xb00a, 0xb027, 0xb0f9, 0x41bc, 0x4087, 0x41bd, 0xa595, 0x4126, 0x45d8, 0xbfbd, 0x2aaa, 0xb22b, 0x4361, 0xb2ad, 0x02e9, 0x43f5, 0xb21b, 0x41c2, 0x0d25, 0x03aa, 0x3663, 0x4404, 0x45ce, 0xbf8a, 0x21db, 0x4362, 0x1af0, 0xbf68, 0x415b, 0x4223, 0x2828, 0x4075, 0xbf42, 0xb262, 0xacd1, 0xb011, 0x1da5, 0x43fc, 0x408c, 0x43b3, 0x43c5, 0xb0c7, 0xa5b2, 0xbf17, 0x409d, 0xbac7, 0x4440, 0x0ba9, 0x4025, 0x2022, 0xa67c, 0x4214, 0x40e4, 0xba71, 0xb28c, 0x40ea, 0x41cf, 0x41e2, 0xbfbf, 0xb2bc, 0x3e8c, 0x40eb, 0xb2d4, 0xa13f, 0x4311, 0xbf52, 0x19f8, 0xbf70, 0xb2f4, 0xb06c, 0x0ab2, 0x0a8e, 0x40ae, 0xba23, 0x1c9c, 0x4211, 0x17ac, 0x1c16, 0x1235, 0xab09, 0x1a59, 0x41f7, 0x46a3, 0x1b42, 0x416e, 0x0f01, 0x0b26, 0x407f, 0x4228, 0x0d9f, 0x43c2, 0x435d, 0xbf22, 0x4270, 0x1893, 0x4246, 0xbf06, 0x30d0, 0xba13, 0xae81, 0x0378, 0x4088, 0x463e, 0x4101, 0x4243, 0x1ddd, 0x41bf, 0xba17, 0xae45, 0x1c8e, 0xb014, 0xa8ef, 0x4167, 0x4207, 0x40c6, 0xb018, 0xa950, 0x4073, 0x049b, 0x41a2, 0x45c5, 0x424b, 0x439a, 0x1a0a, 0x3231, 0xbf32, 0xb20b, 0x433b, 0xba2b, 0xbf5d, 0x430c, 0xb2f5, 0x4131, 0x43e4, 0x1e5f, 0x42e8, 0x1f98, 0x115d, 0x4268, 0x41eb, 0x05f8, 0x28e7, 0x06ea, 0xb002, 0xb2d0, 0x1cac, 0x43ca, 0x0c9b, 0x425b, 0xbfe0, 0x40d1, 0x42a1, 0x3faf, 0x403d, 0xb011, 0xb204, 0x4204, 0x4274, 0xbf7f, 0x0588, 0xa465, 0xbadf, 0x1860, 0x0720, 0x4115, 0xbaf0, 0x417e, 0x4569, 0xb211, 0x40a2, 0x43d8, 0x38ea, 0x4061, 0x42df, 0xb2d6, 0x415e, 0x432c, 0xba38, 0x4353, 0x4352, 0x45a5, 0xbf05, 0x4078, 0x3f2a, 0xba41, 0x44e8, 0xb209, 0x1da4, 0xb2c8, 0x41e8, 0xbf29, 0xbafe, 0x1a67, 0x1829, 0x1bf3, 0x0647, 0xb2c6, 0x0c9f, 0x41f5, 0x11dc, 0xbf87, 0x4124, 0xbacc, 0x424a, 0x2a70, 0x403e, 0xb25a, 0x1d42, 0xa62a, 0x4097, 0x43d5, 0xbfa0, 0x3791, 0xba00, 0x1644, 0xba57, 0xb215, 0x4251, 0x07ef, 0xbf4a, 0x2bd0, 0x2e96, 0x4355, 0x4393, 0x4376, 0xbf59, 0x411a, 0x400e, 0xba18, 0x43f5, 0xbf65, 0x4054, 0xae5d, 0xb2e8, 0x4230, 0xa533, 0x4134, 0xb2d9, 0x4149, 0x3cee, 0xbf80, 0x40a1, 0x1745, 0x1b9c, 0x1b90, 0x41be, 0x4468, 0xab8c, 0x4618, 0x1d05, 0x1c91, 0x259f, 0x4228, 0x414b, 0x4028, 0xbfd9, 0x4298, 0x4139, 0x1f8a, 0x4355, 0x4302, 0x42f9, 0x1951, 0xbf9c, 0xba05, 0x400c, 0xacba, 0x44b1, 0xb216, 0x4151, 0x2013, 0x40df, 0x3de1, 0x1f4a, 0x4036, 0x401e, 0x42a0, 0x42cd, 0x40dd, 0x428c, 0xbfd2, 0x4012, 0x1b19, 0x4099, 0x437f, 0x0289, 0x40ef, 0x1f98, 0x418f, 0x19e0, 0x40c5, 0xb2ea, 0x4366, 0x46ea, 0x427a, 0x4464, 0x4262, 0x4280, 0xbafa, 0xbf6f, 0x21d0, 0x1e60, 0x0a92, 0x0f02, 0x2122, 0x434c, 0x40c6, 0xba0c, 0xbf64, 0xa3fa, 0x10b4, 0xbac4, 0x41f5, 0x4079, 0x4197, 0x226a, 0xb2bf, 0x209e, 0x4085, 0xb07d, 0x437c, 0x3671, 0x2d5b, 0x4090, 0x44d0, 0xbf3b, 0x4259, 0xbaf9, 0x4329, 0x418d, 0x4292, 0x4485, 0x4694, 0x4059, 0xb21e, 0x41e6, 0xad2c, 0x3caf, 0xbf0b, 0xb29f, 0x4133, 0x4366, 0x04e2, 0xba2f, 0x1f7a, 0x41a6, 0x0e62, 0xb2f1, 0x43a3, 0xb09c, 0x443d, 0x025f, 0x4128, 0x1fb1, 0x1dea, 0x3733, 0xbfc5, 0x4263, 0xbad3, 0x42f0, 0xb238, 0xba0d, 0x3c1f, 0x4206, 0x41bb, 0x430a, 0x43ad, 0x1984, 0x4303, 0x0cb0, 0xba11, 0x1c1f, 0xb2df, 0xba43, 0x415b, 0xbfa4, 0xbf90, 0x1c9d, 0x1d4a, 0xab5e, 0x46f0, 0xb22e, 0xba16, 0x09f6, 0xba6a, 0x408e, 0x4380, 0xac19, 0x439f, 0x43d2, 0xbfa0, 0x4258, 0xa366, 0x4051, 0xbf36, 0x438a, 0x429f, 0x43f3, 0xb2c5, 0x3bd3, 0x1fa1, 0xb23c, 0x443d, 0xba27, 0xb089, 0x4354, 0x0f0f, 0x1da0, 0x4384, 0x4228, 0xb201, 0xbfe2, 0x4227, 0x395f, 0x447c, 0x43b0, 0x3a46, 0x1ba2, 0xbf80, 0x1c7c, 0xb200, 0x42e2, 0xba2b, 0xb279, 0x43e7, 0xb275, 0x3d99, 0x23a0, 0x41c6, 0x020a, 0x456b, 0x41ea, 0xb0dc, 0x466d, 0x3dec, 0xa2f3, 0x0a1d, 0xbfcc, 0x2a39, 0x215f, 0xbade, 0xb2a5, 0xb22a, 0x406c, 0x4093, 0x33ea, 0x117d, 0xabbf, 0x4291, 0x4055, 0x425e, 0x43e6, 0x4202, 0x4383, 0xbf3e, 0xae2d, 0x4165, 0x404b, 0x45e2, 0xbf60, 0xb0c6, 0x405b, 0xbff0, 0x0ed3, 0xb256, 0x4305, 0x02d6, 0x10a9, 0xac5f, 0xba55, 0xad0d, 0x1b53, 0x42c5, 0x40b6, 0xb211, 0x40cc, 0x1d30, 0x4098, 0x1df1, 0xbf66, 0x4553, 0x41af, 0x0cff, 0x4307, 0x40fa, 0x318f, 0x1b3e, 0xb2f6, 0x442e, 0xb229, 0x0b45, 0xb2de, 0x1948, 0xba36, 0x1a5b, 0x40ae, 0x0dc0, 0x4316, 0x1e5a, 0x258e, 0x4299, 0x1e58, 0x42b1, 0x4322, 0xb058, 0xbf0b, 0x080d, 0xba66, 0x4326, 0x096f, 0x4366, 0x42eb, 0x1b82, 0x43af, 0x4032, 0xb20e, 0x42a5, 0x1ed5, 0xa3f5, 0x410f, 0xba5d, 0x4120, 0xbf5f, 0x2aa9, 0xba1b, 0x0051, 0x40ad, 0x04a1, 0x420e, 0x3c42, 0x42e0, 0x42bb, 0x43d1, 0x447f, 0xbf14, 0x0ca2, 0xba56, 0x42ed, 0x4372, 0x2ffe, 0x42bd, 0x411e, 0x400a, 0x4285, 0x4652, 0xb079, 0x40ee, 0x0a3a, 0x11c7, 0x403f, 0x14df, 0x40eb, 0xb236, 0x323f, 0x43d7, 0x05c3, 0xbfca, 0xb0cc, 0xba51, 0x1d2c, 0xbf72, 0xba3a, 0x2c3a, 0x4154, 0xbf31, 0xba27, 0x19d1, 0x43b4, 0x4167, 0xba36, 0x42bb, 0x0e3a, 0x4011, 0x4363, 0xbae0, 0x186e, 0x40d1, 0x3dff, 0x38c3, 0x12b7, 0x0292, 0x4561, 0xb037, 0x1dda, 0x401e, 0x43d8, 0xacf4, 0x3e49, 0xbf81, 0x1a75, 0x1d50, 0xb2e7, 0x4080, 0x108c, 0x0fbc, 0x41c5, 0x4189, 0xbad6, 0x1d8f, 0x3b0a, 0xa7a7, 0xbfe0, 0x4072, 0x43a6, 0x19e2, 0x4376, 0x09a4, 0x42fe, 0x0780, 0x4158, 0xbfc9, 0x435d, 0xa29f, 0x4111, 0x01c5, 0x435f, 0x41b2, 0xba73, 0x46cd, 0xbf1b, 0xba2a, 0x161c, 0xb0f2, 0xbff0, 0x00c3, 0xa332, 0x2528, 0x19e9, 0x26a9, 0x1d5c, 0xb2ff, 0x42d8, 0xbf70, 0x175e, 0xbf3c, 0x40db, 0x43af, 0x2e2b, 0xb207, 0x421b, 0x4172, 0x0976, 0x410d, 0x439f, 0x1933, 0x1b15, 0x0093, 0x43df, 0x41f1, 0x40c6, 0x1c52, 0x1e4d, 0x4600, 0x0be1, 0xbf7d, 0x2de0, 0x43e4, 0x4319, 0x428c, 0x41bd, 0x4155, 0x46ab, 0x2730, 0x3a48, 0x4365, 0x403d, 0x1ad8, 0x0537, 0x41a0, 0x1994, 0x401b, 0x4088, 0xb2a0, 0x4050, 0x1dc2, 0x435d, 0x437d, 0xb0b7, 0x4060, 0x4109, 0x44aa, 0x41c1, 0xbf8b, 0x43f8, 0xb2bc, 0xba6e, 0xb023, 0x215b, 0x43c9, 0x43c4, 0x1feb, 0x00f7, 0x40e7, 0xb267, 0xbfc5, 0xb229, 0x42e8, 0xbad3, 0x4171, 0x400c, 0xbadf, 0x42ac, 0x431d, 0x4393, 0x4380, 0xa188, 0xbf81, 0xa3d8, 0x442b, 0x42d3, 0x41ce, 0x1e19, 0x4143, 0x4005, 0xb0c1, 0x4211, 0x455c, 0x25ba, 0x0780, 0x422e, 0x400f, 0x45d4, 0x2e74, 0x41cb, 0x1c7e, 0xbfcb, 0xb26a, 0x46f5, 0x3ee4, 0xa482, 0x18c4, 0x44b2, 0x4204, 0x43db, 0x3545, 0x421f, 0xb2f0, 0x463e, 0x2001, 0x43eb, 0x42d4, 0xb28a, 0x3886, 0x4191, 0xadd9, 0x415b, 0x4138, 0x4103, 0x45c9, 0x111b, 0xb02b, 0xb0e6, 0xbf3d, 0x23cd, 0x40ad, 0xb2d2, 0xb0cb, 0xb2e1, 0x21e4, 0xba28, 0xba05, 0xbf48, 0xbfb0, 0x060e, 0x1fa5, 0xba0d, 0x45dd, 0x4017, 0xbf1b, 0x30fd, 0x210c, 0x42b3, 0x17b5, 0x401f, 0x0b91, 0x264c, 0x40af, 0x40c2, 0xbf7d, 0x0302, 0xa7b3, 0x43e0, 0xba6c, 0xbf18, 0x0add, 0x1fe5, 0x0f9f, 0xb073, 0x381f, 0x1b07, 0xb0fa, 0x40d8, 0x1852, 0x4211, 0x42a6, 0x4036, 0xbac4, 0xa27b, 0x435d, 0x18eb, 0x4171, 0x4318, 0xb08e, 0x4296, 0xb2f4, 0xb2ea, 0x3e89, 0xbf32, 0x43b9, 0x1a0b, 0xb2d2, 0x429c, 0x2aad, 0xbf90, 0x18a6, 0x4360, 0x1a4a, 0x4435, 0xba4e, 0x4071, 0x1b83, 0x465d, 0x2ed8, 0x1a91, 0xbada, 0xbfb1, 0x41a8, 0x278e, 0x4182, 0x42c1, 0x1821, 0xbfa0, 0xbad2, 0xb0fe, 0x42e1, 0x1964, 0x46b9, 0xb2a2, 0x40f9, 0xbacc, 0x4221, 0x425a, 0x4464, 0x418e, 0xb0e6, 0x4392, 0x3a7b, 0x4206, 0x1970, 0xbf67, 0x4241, 0xb2f2, 0xbad7, 0x429e, 0x4332, 0x42e6, 0xa4a7, 0x42f6, 0x4011, 0xa32e, 0x40bb, 0x4651, 0x4458, 0x4309, 0x43f5, 0x438c, 0x2ca1, 0xba00, 0x438e, 0xba55, 0x1c48, 0x43f6, 0x41d3, 0xb2a4, 0x4034, 0xba2f, 0xbf0f, 0xbf60, 0xbaf7, 0x42fc, 0xbacb, 0x4217, 0x421e, 0x4113, 0x1863, 0x4103, 0xb052, 0x43b2, 0xb2ab, 0x440f, 0xb22a, 0x4207, 0x40df, 0x449b, 0x185d, 0xbf33, 0x0307, 0x1f5c, 0xb22f, 0x365e, 0x415a, 0xb218, 0x44fc, 0x3db0, 0x41bf, 0x41e6, 0x21d8, 0x412b, 0x4065, 0xbf4d, 0x1013, 0xa00f, 0x444e, 0x4341, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x81c55787, 0xada11b20, 0x3e10df97, 0x7b862743, 0x1f0517ba, 0x4d0933c2, 0x10df7fe1, 0x2dec0c53, 0xcbcf889f, 0x3e17e3e5, 0x8eacf129, 0xd8f1b147, 0xb8b631ab, 0x63405cb4, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x0000181c, 0x000000d8, 0x0000fffe, 0x00000000, 0x00000a00, 0x7f37fe5f, 0xfffffffc, 0x00000000, 0x00000000, 0x0000008e, 0x7f36f510, 0xfb5e1489, 0x0000183a, 0xbf82a5e0, 0x00000000, 0x000001d0 }, + Instructions = [0xb234, 0x4215, 0x2ab0, 0x43d9, 0x42a0, 0x432b, 0x0bb3, 0x191b, 0x086d, 0x4251, 0x42d3, 0xba6f, 0xa2e4, 0x4069, 0x42ec, 0xae3e, 0xb293, 0xbf16, 0xa0fb, 0x433a, 0x4366, 0x45a5, 0x41d4, 0xb2ca, 0x1ed4, 0xb06d, 0x2a1c, 0x1fbf, 0xbaf6, 0xb266, 0xb293, 0x1c35, 0x3693, 0x2df7, 0xb031, 0x1c23, 0xad6c, 0x36e1, 0x4116, 0xbfc0, 0x32a2, 0xba37, 0x455d, 0x40e1, 0x4047, 0xbf01, 0xbaf8, 0xbad3, 0x19a9, 0x4255, 0xb074, 0x4360, 0xba2b, 0x1e38, 0x18c5, 0x44ed, 0x44e5, 0x187b, 0xb22a, 0x40a3, 0x1852, 0xb276, 0x40dc, 0x42dc, 0x2cf9, 0xb041, 0x18c1, 0xba29, 0xbff0, 0xa748, 0x42ab, 0xbf7d, 0x253d, 0x4352, 0x0c85, 0x438f, 0x4274, 0x3cf4, 0xafce, 0x1974, 0xb074, 0xbfa6, 0x4257, 0xba5b, 0x4037, 0xa515, 0xb0bd, 0x04fe, 0x1cf8, 0x420c, 0x4119, 0x4184, 0x4312, 0x45d3, 0x41ef, 0x4011, 0xb00a, 0xb027, 0xb0f9, 0x41bc, 0x4087, 0x41bd, 0xa595, 0x4126, 0x45d8, 0xbfbd, 0x2aaa, 0xb22b, 0x4361, 0xb2ad, 0x02e9, 0x43f5, 0xb21b, 0x41c2, 0x0d25, 0x03aa, 0x3663, 0x4404, 0x45ce, 0xbf8a, 0x21db, 0x4362, 0x1af0, 0xbf68, 0x415b, 0x4223, 0x2828, 0x4075, 0xbf42, 0xb262, 0xacd1, 0xb011, 0x1da5, 0x43fc, 0x408c, 0x43b3, 0x43c5, 0xb0c7, 0xa5b2, 0xbf17, 0x409d, 0xbac7, 0x4440, 0x0ba9, 0x4025, 0x2022, 0xa67c, 0x4214, 0x40e4, 0xba71, 0xb28c, 0x40ea, 0x41cf, 0x41e2, 0xbfbf, 0xb2bc, 0x3e8c, 0x40eb, 0xb2d4, 0xa13f, 0x4311, 0xbf52, 0x19f8, 0xbf70, 0xb2f4, 0xb06c, 0x0ab2, 0x0a8e, 0x40ae, 0xba23, 0x1c9c, 0x4211, 0x17ac, 0x1c16, 0x1235, 0xab09, 0x1a59, 0x41f7, 0x46a3, 0x1b42, 0x416e, 0x0f01, 0x0b26, 0x407f, 0x4228, 0x0d9f, 0x43c2, 0x435d, 0xbf22, 0x4270, 0x1893, 0x4246, 0xbf06, 0x30d0, 0xba13, 0xae81, 0x0378, 0x4088, 0x463e, 0x4101, 0x4243, 0x1ddd, 0x41bf, 0xba17, 0xae45, 0x1c8e, 0xb014, 0xa8ef, 0x4167, 0x4207, 0x40c6, 0xb018, 0xa950, 0x4073, 0x049b, 0x41a2, 0x45c5, 0x424b, 0x439a, 0x1a0a, 0x3231, 0xbf32, 0xb20b, 0x433b, 0xba2b, 0xbf5d, 0x430c, 0xb2f5, 0x4131, 0x43e4, 0x1e5f, 0x42e8, 0x1f98, 0x115d, 0x4268, 0x41eb, 0x05f8, 0x28e7, 0x06ea, 0xb002, 0xb2d0, 0x1cac, 0x43ca, 0x0c9b, 0x425b, 0xbfe0, 0x40d1, 0x42a1, 0x3faf, 0x403d, 0xb011, 0xb204, 0x4204, 0x4274, 0xbf7f, 0x0588, 0xa465, 0xbadf, 0x1860, 0x0720, 0x4115, 0xbaf0, 0x417e, 0x4569, 0xb211, 0x40a2, 0x43d8, 0x38ea, 0x4061, 0x42df, 0xb2d6, 0x415e, 0x432c, 0xba38, 0x4353, 0x4352, 0x45a5, 0xbf05, 0x4078, 0x3f2a, 0xba41, 0x44e8, 0xb209, 0x1da4, 0xb2c8, 0x41e8, 0xbf29, 0xbafe, 0x1a67, 0x1829, 0x1bf3, 0x0647, 0xb2c6, 0x0c9f, 0x41f5, 0x11dc, 0xbf87, 0x4124, 0xbacc, 0x424a, 0x2a70, 0x403e, 0xb25a, 0x1d42, 0xa62a, 0x4097, 0x43d5, 0xbfa0, 0x3791, 0xba00, 0x1644, 0xba57, 0xb215, 0x4251, 0x07ef, 0xbf4a, 0x2bd0, 0x2e96, 0x4355, 0x4393, 0x4376, 0xbf59, 0x411a, 0x400e, 0xba18, 0x43f5, 0xbf65, 0x4054, 0xae5d, 0xb2e8, 0x4230, 0xa533, 0x4134, 0xb2d9, 0x4149, 0x3cee, 0xbf80, 0x40a1, 0x1745, 0x1b9c, 0x1b90, 0x41be, 0x4468, 0xab8c, 0x4618, 0x1d05, 0x1c91, 0x259f, 0x4228, 0x414b, 0x4028, 0xbfd9, 0x4298, 0x4139, 0x1f8a, 0x4355, 0x4302, 0x42f9, 0x1951, 0xbf9c, 0xba05, 0x400c, 0xacba, 0x44b1, 0xb216, 0x4151, 0x2013, 0x40df, 0x3de1, 0x1f4a, 0x4036, 0x401e, 0x42a0, 0x42cd, 0x40dd, 0x428c, 0xbfd2, 0x4012, 0x1b19, 0x4099, 0x437f, 0x0289, 0x40ef, 0x1f98, 0x418f, 0x19e0, 0x40c5, 0xb2ea, 0x4366, 0x46ea, 0x427a, 0x4464, 0x4262, 0x4280, 0xbafa, 0xbf6f, 0x21d0, 0x1e60, 0x0a92, 0x0f02, 0x2122, 0x434c, 0x40c6, 0xba0c, 0xbf64, 0xa3fa, 0x10b4, 0xbac4, 0x41f5, 0x4079, 0x4197, 0x226a, 0xb2bf, 0x209e, 0x4085, 0xb07d, 0x437c, 0x3671, 0x2d5b, 0x4090, 0x44d0, 0xbf3b, 0x4259, 0xbaf9, 0x4329, 0x418d, 0x4292, 0x4485, 0x4694, 0x4059, 0xb21e, 0x41e6, 0xad2c, 0x3caf, 0xbf0b, 0xb29f, 0x4133, 0x4366, 0x04e2, 0xba2f, 0x1f7a, 0x41a6, 0x0e62, 0xb2f1, 0x43a3, 0xb09c, 0x443d, 0x025f, 0x4128, 0x1fb1, 0x1dea, 0x3733, 0xbfc5, 0x4263, 0xbad3, 0x42f0, 0xb238, 0xba0d, 0x3c1f, 0x4206, 0x41bb, 0x430a, 0x43ad, 0x1984, 0x4303, 0x0cb0, 0xba11, 0x1c1f, 0xb2df, 0xba43, 0x415b, 0xbfa4, 0xbf90, 0x1c9d, 0x1d4a, 0xab5e, 0x46f0, 0xb22e, 0xba16, 0x09f6, 0xba6a, 0x408e, 0x4380, 0xac19, 0x439f, 0x43d2, 0xbfa0, 0x4258, 0xa366, 0x4051, 0xbf36, 0x438a, 0x429f, 0x43f3, 0xb2c5, 0x3bd3, 0x1fa1, 0xb23c, 0x443d, 0xba27, 0xb089, 0x4354, 0x0f0f, 0x1da0, 0x4384, 0x4228, 0xb201, 0xbfe2, 0x4227, 0x395f, 0x447c, 0x43b0, 0x3a46, 0x1ba2, 0xbf80, 0x1c7c, 0xb200, 0x42e2, 0xba2b, 0xb279, 0x43e7, 0xb275, 0x3d99, 0x23a0, 0x41c6, 0x020a, 0x456b, 0x41ea, 0xb0dc, 0x466d, 0x3dec, 0xa2f3, 0x0a1d, 0xbfcc, 0x2a39, 0x215f, 0xbade, 0xb2a5, 0xb22a, 0x406c, 0x4093, 0x33ea, 0x117d, 0xabbf, 0x4291, 0x4055, 0x425e, 0x43e6, 0x4202, 0x4383, 0xbf3e, 0xae2d, 0x4165, 0x404b, 0x45e2, 0xbf60, 0xb0c6, 0x405b, 0xbff0, 0x0ed3, 0xb256, 0x4305, 0x02d6, 0x10a9, 0xac5f, 0xba55, 0xad0d, 0x1b53, 0x42c5, 0x40b6, 0xb211, 0x40cc, 0x1d30, 0x4098, 0x1df1, 0xbf66, 0x4553, 0x41af, 0x0cff, 0x4307, 0x40fa, 0x318f, 0x1b3e, 0xb2f6, 0x442e, 0xb229, 0x0b45, 0xb2de, 0x1948, 0xba36, 0x1a5b, 0x40ae, 0x0dc0, 0x4316, 0x1e5a, 0x258e, 0x4299, 0x1e58, 0x42b1, 0x4322, 0xb058, 0xbf0b, 0x080d, 0xba66, 0x4326, 0x096f, 0x4366, 0x42eb, 0x1b82, 0x43af, 0x4032, 0xb20e, 0x42a5, 0x1ed5, 0xa3f5, 0x410f, 0xba5d, 0x4120, 0xbf5f, 0x2aa9, 0xba1b, 0x0051, 0x40ad, 0x04a1, 0x420e, 0x3c42, 0x42e0, 0x42bb, 0x43d1, 0x447f, 0xbf14, 0x0ca2, 0xba56, 0x42ed, 0x4372, 0x2ffe, 0x42bd, 0x411e, 0x400a, 0x4285, 0x4652, 0xb079, 0x40ee, 0x0a3a, 0x11c7, 0x403f, 0x14df, 0x40eb, 0xb236, 0x323f, 0x43d7, 0x05c3, 0xbfca, 0xb0cc, 0xba51, 0x1d2c, 0xbf72, 0xba3a, 0x2c3a, 0x4154, 0xbf31, 0xba27, 0x19d1, 0x43b4, 0x4167, 0xba36, 0x42bb, 0x0e3a, 0x4011, 0x4363, 0xbae0, 0x186e, 0x40d1, 0x3dff, 0x38c3, 0x12b7, 0x0292, 0x4561, 0xb037, 0x1dda, 0x401e, 0x43d8, 0xacf4, 0x3e49, 0xbf81, 0x1a75, 0x1d50, 0xb2e7, 0x4080, 0x108c, 0x0fbc, 0x41c5, 0x4189, 0xbad6, 0x1d8f, 0x3b0a, 0xa7a7, 0xbfe0, 0x4072, 0x43a6, 0x19e2, 0x4376, 0x09a4, 0x42fe, 0x0780, 0x4158, 0xbfc9, 0x435d, 0xa29f, 0x4111, 0x01c5, 0x435f, 0x41b2, 0xba73, 0x46cd, 0xbf1b, 0xba2a, 0x161c, 0xb0f2, 0xbff0, 0x00c3, 0xa332, 0x2528, 0x19e9, 0x26a9, 0x1d5c, 0xb2ff, 0x42d8, 0xbf70, 0x175e, 0xbf3c, 0x40db, 0x43af, 0x2e2b, 0xb207, 0x421b, 0x4172, 0x0976, 0x410d, 0x439f, 0x1933, 0x1b15, 0x0093, 0x43df, 0x41f1, 0x40c6, 0x1c52, 0x1e4d, 0x4600, 0x0be1, 0xbf7d, 0x2de0, 0x43e4, 0x4319, 0x428c, 0x41bd, 0x4155, 0x46ab, 0x2730, 0x3a48, 0x4365, 0x403d, 0x1ad8, 0x0537, 0x41a0, 0x1994, 0x401b, 0x4088, 0xb2a0, 0x4050, 0x1dc2, 0x435d, 0x437d, 0xb0b7, 0x4060, 0x4109, 0x44aa, 0x41c1, 0xbf8b, 0x43f8, 0xb2bc, 0xba6e, 0xb023, 0x215b, 0x43c9, 0x43c4, 0x1feb, 0x00f7, 0x40e7, 0xb267, 0xbfc5, 0xb229, 0x42e8, 0xbad3, 0x4171, 0x400c, 0xbadf, 0x42ac, 0x431d, 0x4393, 0x4380, 0xa188, 0xbf81, 0xa3d8, 0x442b, 0x42d3, 0x41ce, 0x1e19, 0x4143, 0x4005, 0xb0c1, 0x4211, 0x455c, 0x25ba, 0x0780, 0x422e, 0x400f, 0x45d4, 0x2e74, 0x41cb, 0x1c7e, 0xbfcb, 0xb26a, 0x46f5, 0x3ee4, 0xa482, 0x18c4, 0x44b2, 0x4204, 0x43db, 0x3545, 0x421f, 0xb2f0, 0x463e, 0x2001, 0x43eb, 0x42d4, 0xb28a, 0x3886, 0x4191, 0xadd9, 0x415b, 0x4138, 0x4103, 0x45c9, 0x111b, 0xb02b, 0xb0e6, 0xbf3d, 0x23cd, 0x40ad, 0xb2d2, 0xb0cb, 0xb2e1, 0x21e4, 0xba28, 0xba05, 0xbf48, 0xbfb0, 0x060e, 0x1fa5, 0xba0d, 0x45dd, 0x4017, 0xbf1b, 0x30fd, 0x210c, 0x42b3, 0x17b5, 0x401f, 0x0b91, 0x264c, 0x40af, 0x40c2, 0xbf7d, 0x0302, 0xa7b3, 0x43e0, 0xba6c, 0xbf18, 0x0add, 0x1fe5, 0x0f9f, 0xb073, 0x381f, 0x1b07, 0xb0fa, 0x40d8, 0x1852, 0x4211, 0x42a6, 0x4036, 0xbac4, 0xa27b, 0x435d, 0x18eb, 0x4171, 0x4318, 0xb08e, 0x4296, 0xb2f4, 0xb2ea, 0x3e89, 0xbf32, 0x43b9, 0x1a0b, 0xb2d2, 0x429c, 0x2aad, 0xbf90, 0x18a6, 0x4360, 0x1a4a, 0x4435, 0xba4e, 0x4071, 0x1b83, 0x465d, 0x2ed8, 0x1a91, 0xbada, 0xbfb1, 0x41a8, 0x278e, 0x4182, 0x42c1, 0x1821, 0xbfa0, 0xbad2, 0xb0fe, 0x42e1, 0x1964, 0x46b9, 0xb2a2, 0x40f9, 0xbacc, 0x4221, 0x425a, 0x4464, 0x418e, 0xb0e6, 0x4392, 0x3a7b, 0x4206, 0x1970, 0xbf67, 0x4241, 0xb2f2, 0xbad7, 0x429e, 0x4332, 0x42e6, 0xa4a7, 0x42f6, 0x4011, 0xa32e, 0x40bb, 0x4651, 0x4458, 0x4309, 0x43f5, 0x438c, 0x2ca1, 0xba00, 0x438e, 0xba55, 0x1c48, 0x43f6, 0x41d3, 0xb2a4, 0x4034, 0xba2f, 0xbf0f, 0xbf60, 0xbaf7, 0x42fc, 0xbacb, 0x4217, 0x421e, 0x4113, 0x1863, 0x4103, 0xb052, 0x43b2, 0xb2ab, 0x440f, 0xb22a, 0x4207, 0x40df, 0x449b, 0x185d, 0xbf33, 0x0307, 0x1f5c, 0xb22f, 0x365e, 0x415a, 0xb218, 0x44fc, 0x3db0, 0x41bf, 0x41e6, 0x21d8, 0x412b, 0x4065, 0xbf4d, 0x1013, 0xa00f, 0x444e, 0x4341, 0x4770, 0xe7fe + ], + StartRegs = [0x81c55787, 0xada11b20, 0x3e10df97, 0x7b862743, 0x1f0517ba, 0x4d0933c2, 0x10df7fe1, 0x2dec0c53, 0xcbcf889f, 0x3e17e3e5, 0x8eacf129, 0xd8f1b147, 0xb8b631ab, 0x63405cb4, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x0000181c, 0x000000d8, 0x0000fffe, 0x00000000, 0x00000a00, 0x7f37fe5f, 0xfffffffc, 0x00000000, 0x00000000, 0x0000008e, 0x7f36f510, 0xfb5e1489, 0x0000183a, 0xbf82a5e0, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x43e9, 0xb2ae, 0x2b63, 0x4354, 0xbf91, 0xb23c, 0x4231, 0xb075, 0xb2fc, 0xba3a, 0x4162, 0x1cd2, 0x42af, 0x426e, 0x43fa, 0x0099, 0x1acc, 0x4434, 0x411d, 0x4624, 0xb25e, 0xbfc4, 0x1ef8, 0x45ac, 0x0b2d, 0xb2b0, 0x424d, 0x365f, 0x4336, 0xb0ac, 0x2a8b, 0xaa5c, 0x1bc1, 0x40ca, 0x18db, 0x3c16, 0x4181, 0x4348, 0x1cdf, 0x0413, 0xb2ad, 0xbfce, 0x1e96, 0x4304, 0x405b, 0x42ed, 0x1cea, 0x4159, 0x4057, 0x1c6b, 0x4256, 0x372b, 0x41d8, 0x4268, 0xa6ea, 0x430f, 0x1e36, 0x42bc, 0x40f5, 0xa28f, 0x1ae4, 0xb2a0, 0x4282, 0xa134, 0x4355, 0x42ba, 0x4395, 0x1faa, 0x154b, 0x434a, 0xbf6e, 0x43d1, 0xb2cd, 0x40b8, 0xbfe0, 0x0c97, 0x2541, 0x350e, 0x41c6, 0x40b5, 0x1e4d, 0x4048, 0x4657, 0x428a, 0x07dc, 0x42bb, 0x3923, 0x430d, 0x41a0, 0xbaed, 0xbf4e, 0x40ee, 0x0acb, 0x1f73, 0xbae9, 0xa18e, 0x41a8, 0x1947, 0x181b, 0x4248, 0x4349, 0xbf11, 0x1e48, 0x41d8, 0x18dc, 0x2073, 0xb20f, 0x41df, 0x41bf, 0x1ba3, 0xbf90, 0x4144, 0x428d, 0x41f9, 0x43b8, 0xb239, 0x4180, 0x432a, 0x4119, 0x46f8, 0x4329, 0x4091, 0x4302, 0xb228, 0x4094, 0x40b1, 0xbfcd, 0x2d26, 0x454f, 0x18a4, 0x42fb, 0x1b0e, 0x0d5a, 0x1ddb, 0x14c4, 0x43c2, 0xa374, 0x426b, 0xb0c9, 0x4262, 0xbf80, 0xbf8f, 0x46d3, 0x40cb, 0x4377, 0xb2b3, 0x3a47, 0xba60, 0xbfd9, 0xb267, 0x429a, 0x1806, 0x43d3, 0x3142, 0xb2be, 0x1487, 0x18ab, 0x1cd7, 0xba36, 0x1027, 0xb028, 0x1742, 0x435b, 0x4147, 0x2501, 0x41f0, 0xbadb, 0x40af, 0x444b, 0xb24c, 0xbae8, 0x40aa, 0xb2fe, 0xa75f, 0xbfcb, 0x4162, 0x4146, 0x4328, 0x2a69, 0x4247, 0x286e, 0x0b98, 0x24fb, 0xb061, 0x43a8, 0x409b, 0x1a0b, 0x41b6, 0x435a, 0xb244, 0x242e, 0xbad4, 0x0f4e, 0xbf0b, 0x4069, 0x273a, 0x4422, 0x4208, 0x4248, 0x43fa, 0x4406, 0xb2c1, 0x4046, 0x40bb, 0x4267, 0xb2b6, 0x03b8, 0xb2fd, 0x3dd7, 0xba6c, 0xb29b, 0xba17, 0x4109, 0x1b66, 0xb2df, 0xb005, 0x3496, 0x4598, 0xbf48, 0x40b2, 0x2979, 0x40d4, 0x4269, 0xb2ba, 0x3b3b, 0x408f, 0x336d, 0x1b00, 0x42c9, 0x2a70, 0xbf00, 0xaf87, 0x4386, 0x40c3, 0x4601, 0x461a, 0xbf90, 0xb217, 0x1d8e, 0x1c52, 0x42eb, 0x403f, 0xa25c, 0xa437, 0xbfcd, 0x19b1, 0x413f, 0x404a, 0x19f3, 0xbae3, 0x20a3, 0xbf4e, 0x3dd9, 0x4157, 0xb2ee, 0x29e2, 0xbad3, 0x42ab, 0x40af, 0xbf0d, 0xbaea, 0x43c8, 0xbae8, 0x0451, 0x424a, 0x1c6b, 0x400e, 0x4144, 0x3a3a, 0x412f, 0xbf04, 0x42df, 0x3821, 0x40ec, 0x433e, 0x4196, 0x43fd, 0x42e0, 0xb00f, 0x44dc, 0x2af8, 0x157c, 0x4316, 0xb095, 0xbf4b, 0x1a70, 0x1aaf, 0xb263, 0x41a3, 0x42ae, 0x44ba, 0x289a, 0xb293, 0x40d8, 0x3bc3, 0x42a1, 0x41e8, 0xbaf7, 0x403d, 0x418d, 0x42cf, 0xb023, 0xb05c, 0x4029, 0x40e4, 0x4209, 0x40fc, 0x108c, 0x40d5, 0xbf14, 0xb0e2, 0x425c, 0x4220, 0x244c, 0x0736, 0x1d18, 0x401d, 0x40ac, 0x4045, 0x4051, 0xaf3a, 0xbaef, 0x4451, 0x439a, 0x43ba, 0x406b, 0x1daf, 0x409e, 0x44ad, 0xb09c, 0x4087, 0x205e, 0x4540, 0x40fc, 0xb27d, 0xbf7a, 0x28c4, 0x42c5, 0x4178, 0x42eb, 0x40d3, 0xb273, 0x45f3, 0x401b, 0x43ca, 0x43f4, 0x43d1, 0xaed9, 0xba70, 0x41c3, 0x11e8, 0x41bb, 0x40e2, 0x41c0, 0xa5a2, 0x09c4, 0xbfc0, 0x43aa, 0x388c, 0x411e, 0x189f, 0xbf81, 0x4339, 0x1f88, 0x1b87, 0xa26a, 0xbf0a, 0x4366, 0x415a, 0x42ac, 0x41bc, 0xbf60, 0xba4b, 0xba12, 0x41b7, 0x413d, 0xb02f, 0x4235, 0x0548, 0x0509, 0x41de, 0x42c6, 0x16c5, 0x3d8d, 0xbf0d, 0x2de3, 0x40b7, 0x417f, 0x40f6, 0xa413, 0x4232, 0xba60, 0x4126, 0x4044, 0x1bd0, 0x2d4b, 0x20bd, 0xb215, 0x40d9, 0x415c, 0xbf08, 0x1d75, 0x1e01, 0x411c, 0x0b49, 0x410e, 0xbfcf, 0x1455, 0x0ee7, 0x05cd, 0x4394, 0xb2b1, 0x432c, 0x25fb, 0x4671, 0x4053, 0x3e48, 0x0be7, 0x405f, 0x4276, 0x41f6, 0x440e, 0x40f6, 0x435a, 0x41a5, 0xb2ef, 0x3d3f, 0x443a, 0x332a, 0xb00d, 0x4432, 0x1d1c, 0x428e, 0x4296, 0x42ef, 0xbfaf, 0x4062, 0x1918, 0x08bd, 0x4241, 0xba2f, 0x40b9, 0x1e32, 0x42be, 0x2983, 0xbf99, 0x402b, 0x423e, 0x41e5, 0x403a, 0xbf70, 0x41d1, 0x42cf, 0x434f, 0x41ea, 0x1dd7, 0x418c, 0x418f, 0xb248, 0x1e0f, 0x2ec4, 0x42f5, 0x40e2, 0x4330, 0x4118, 0xad76, 0xb089, 0x41b9, 0x40de, 0x42fa, 0xba54, 0xb2c6, 0xbf09, 0x4102, 0x41e7, 0xb08b, 0x41bd, 0x1dbf, 0x4140, 0x4009, 0x42fc, 0x46db, 0xbad8, 0x45ae, 0x40e0, 0x4212, 0x43fd, 0x43cb, 0x435f, 0x4276, 0x15a5, 0xb222, 0x409b, 0x40cb, 0xbf48, 0xad26, 0x40e7, 0x3491, 0x36b5, 0xbfa6, 0x4192, 0x43e1, 0x430d, 0xb28b, 0xaa14, 0x42eb, 0x4492, 0x41a8, 0xa8d2, 0x436e, 0x41c9, 0x4211, 0x42cf, 0x0d26, 0x41ea, 0x40bd, 0x0f79, 0x40d2, 0x394c, 0x4072, 0x40c9, 0xbf84, 0xb278, 0x2591, 0x43a9, 0x13e4, 0xb287, 0x02ad, 0x3290, 0x43ec, 0x4141, 0x431a, 0x46a9, 0x4629, 0x2e09, 0x1a14, 0x41f5, 0xba19, 0x35d8, 0x2c4a, 0x43dc, 0xb28e, 0x40b7, 0x41db, 0x41fe, 0x2f4d, 0xbfe8, 0x4459, 0x46d8, 0x42c5, 0x1d4f, 0x1a9e, 0x4203, 0x42b2, 0x4299, 0x428d, 0xbf29, 0x4129, 0xb223, 0x427a, 0x41c5, 0x089e, 0xad9a, 0xb24c, 0x1f2a, 0xb023, 0xb291, 0x42b3, 0xb07a, 0x1e3c, 0xa3d6, 0x4194, 0xbaf7, 0x370e, 0x1faa, 0x197f, 0x409e, 0x19c8, 0x4616, 0xbf7a, 0x42a2, 0x437e, 0xba3e, 0x4312, 0x428a, 0x418a, 0x433b, 0x03d8, 0x0250, 0xb29a, 0x1dd0, 0x33c0, 0x4334, 0xb0fd, 0xbfa0, 0xb279, 0x4067, 0x405b, 0xb23e, 0x2224, 0x4375, 0x2e15, 0x406f, 0x43b4, 0xbf94, 0xba6d, 0x04eb, 0x42f4, 0x42d7, 0x4184, 0x40cb, 0x40c5, 0x422d, 0x19c7, 0x415e, 0x426f, 0x4124, 0xb2e7, 0xa9a4, 0x40ed, 0x412f, 0x43c9, 0x3ca8, 0x1b05, 0x32fc, 0x4276, 0x4037, 0x447f, 0x40c3, 0xb267, 0xbf81, 0x43bb, 0xb243, 0x4570, 0x2b22, 0x0e9c, 0x4063, 0x1bea, 0x4055, 0x2367, 0xba35, 0x1e69, 0x0926, 0x44f5, 0xb00b, 0x18f8, 0x4007, 0xb255, 0x4350, 0xb0a5, 0x4095, 0xba26, 0xa26b, 0x14b9, 0x4346, 0xbfae, 0x4312, 0x4446, 0xbf80, 0xa9c8, 0xba7d, 0x410a, 0xbfa2, 0x2319, 0xb282, 0x4185, 0x425f, 0x41c1, 0x409c, 0x1a10, 0x1003, 0x284b, 0xbae6, 0xb221, 0xb242, 0x4262, 0xbad8, 0xbafe, 0xaa78, 0x4223, 0x41d8, 0xb0f9, 0x4091, 0x445c, 0x321e, 0x42c1, 0x4023, 0x411a, 0x438f, 0x43fd, 0xbf29, 0x434f, 0xa7a0, 0x1d7a, 0x40f0, 0xba4f, 0x2879, 0x4093, 0xa50b, 0x42b5, 0xb289, 0x43dd, 0xb014, 0xba26, 0x0450, 0x413b, 0x1828, 0xba63, 0x4156, 0x292f, 0x428f, 0xb053, 0xbf68, 0x42c4, 0x059b, 0x14ec, 0x4207, 0x43c8, 0x43b7, 0xba72, 0xb297, 0x1ab9, 0x1525, 0x416d, 0x420c, 0x446b, 0xb205, 0x466b, 0x416f, 0x19c5, 0x4351, 0x22d5, 0x4670, 0xb06b, 0x0374, 0x066b, 0xbfb9, 0x0c25, 0xabee, 0x4143, 0x41f2, 0x181b, 0x42f7, 0x40ab, 0x4130, 0xba4a, 0x1a6d, 0xba02, 0x4165, 0xbf60, 0x417e, 0x340c, 0xba72, 0xbaff, 0x3ddc, 0xbf35, 0x415a, 0x4011, 0x42cb, 0x437c, 0x3d03, 0x41d4, 0x1855, 0x0b24, 0xa86b, 0x41ef, 0xb262, 0x41a4, 0xb272, 0x43a4, 0x030c, 0x4365, 0xbf52, 0x46b5, 0x464d, 0x42b3, 0x1b6e, 0xba3d, 0x20f7, 0x35dc, 0x2ee9, 0xbf4e, 0x4378, 0xaf6a, 0x142e, 0xb290, 0x42d9, 0x40d8, 0xb069, 0x1fb9, 0x430a, 0x0594, 0x4231, 0xbafd, 0x3a53, 0xb2b1, 0xb0e0, 0x001d, 0xa85d, 0x17cd, 0x42b5, 0x4330, 0xb012, 0xbacd, 0x0ed9, 0xbf86, 0xba22, 0x4068, 0x263e, 0x0048, 0xb2a4, 0xba4a, 0xbf3a, 0x4224, 0x426e, 0x0a8d, 0xa5f2, 0x14f4, 0x4164, 0x1e8e, 0x324b, 0xba1c, 0x40ed, 0x4108, 0x170d, 0x30b8, 0x04a7, 0xb073, 0x2d88, 0x4171, 0x1b68, 0xbfa4, 0x40fe, 0xbac1, 0xba57, 0xb2ce, 0x330f, 0x2614, 0x070e, 0xb0c2, 0x4244, 0xad7d, 0x06ac, 0xa5ef, 0x0d63, 0x42aa, 0xb2df, 0xb2ce, 0x42d1, 0x2ea4, 0xbf4d, 0x4185, 0x41bb, 0x45e1, 0x326c, 0x42ea, 0x443c, 0xb219, 0x41a7, 0xbf31, 0x42af, 0x43f5, 0x4137, 0x1efb, 0x4175, 0x40fa, 0x4340, 0x40f0, 0x4342, 0x43f6, 0xbafe, 0x17c7, 0xbfcc, 0x4485, 0x43e3, 0x4085, 0x4003, 0x4187, 0x07dd, 0x3c2d, 0x1acf, 0x40a2, 0xbae2, 0x417c, 0xbfe0, 0x198c, 0xbf8c, 0x1a73, 0xbafc, 0x2c1d, 0x0cf6, 0x43a9, 0x403d, 0xbf34, 0x4297, 0xb000, 0xb27b, 0xab7d, 0x05c9, 0xb245, 0x4326, 0x426d, 0x4226, 0x42df, 0xb0d8, 0x46f2, 0x43ca, 0x4096, 0x283c, 0x4406, 0x41bc, 0xbf6d, 0x433b, 0x458b, 0x41be, 0xb019, 0x4029, 0x4167, 0x42a1, 0x4024, 0xbaf1, 0xb26c, 0x1e3d, 0xb292, 0x41ea, 0x241b, 0x4024, 0x1aec, 0x431e, 0x4606, 0x4209, 0x356f, 0x4308, 0xa65e, 0xbf7d, 0xbf70, 0x1a6b, 0xbaf8, 0x42f3, 0x1dac, 0xb2bf, 0x26b6, 0xba4a, 0x460b, 0x4390, 0x422d, 0x0a84, 0xb0d1, 0x43d7, 0x4022, 0xb0ee, 0x409e, 0xba72, 0x2a10, 0x429f, 0xbf70, 0x304b, 0xa8bc, 0xbf2c, 0x4288, 0x41cc, 0xbf28, 0xba26, 0x419b, 0x42af, 0x4357, 0xab5e, 0x4307, 0xbae7, 0x4449, 0x2dca, 0x46d9, 0xa4d7, 0x4384, 0xb0ae, 0x39ca, 0x4153, 0xba66, 0x43ae, 0xba2b, 0xbfe1, 0x189b, 0x4062, 0xbaf2, 0xba5c, 0xb041, 0x431f, 0x0f58, 0x4474, 0xbf19, 0x421c, 0x09c9, 0x0947, 0xb013, 0xba56, 0x3cdb, 0x43d0, 0xbf7a, 0x40d6, 0x079a, 0x030a, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x69b72ece, 0x9ea70faf, 0x0bef8eae, 0x8b8f6dd5, 0x4fde440e, 0x8c63dba4, 0xee0baa0f, 0xb2812116, 0x764ead9f, 0xda04bbb5, 0xc49fd907, 0xf371f841, 0xb64410f1, 0x71a52826, 0x00000000, 0x000001f0 }, - FinalRegs = new uint[] { 0xffffef27, 0x00002035, 0x00000000, 0x4e010000, 0x014dff25, 0x0000014e, 0x00000000, 0x00000000, 0xf371f841, 0xf371f841, 0x00000000, 0xf371f841, 0xa9b60932, 0x41f962cf, 0x00000000, 0xa00001d0 }, + Instructions = [0x43e9, 0xb2ae, 0x2b63, 0x4354, 0xbf91, 0xb23c, 0x4231, 0xb075, 0xb2fc, 0xba3a, 0x4162, 0x1cd2, 0x42af, 0x426e, 0x43fa, 0x0099, 0x1acc, 0x4434, 0x411d, 0x4624, 0xb25e, 0xbfc4, 0x1ef8, 0x45ac, 0x0b2d, 0xb2b0, 0x424d, 0x365f, 0x4336, 0xb0ac, 0x2a8b, 0xaa5c, 0x1bc1, 0x40ca, 0x18db, 0x3c16, 0x4181, 0x4348, 0x1cdf, 0x0413, 0xb2ad, 0xbfce, 0x1e96, 0x4304, 0x405b, 0x42ed, 0x1cea, 0x4159, 0x4057, 0x1c6b, 0x4256, 0x372b, 0x41d8, 0x4268, 0xa6ea, 0x430f, 0x1e36, 0x42bc, 0x40f5, 0xa28f, 0x1ae4, 0xb2a0, 0x4282, 0xa134, 0x4355, 0x42ba, 0x4395, 0x1faa, 0x154b, 0x434a, 0xbf6e, 0x43d1, 0xb2cd, 0x40b8, 0xbfe0, 0x0c97, 0x2541, 0x350e, 0x41c6, 0x40b5, 0x1e4d, 0x4048, 0x4657, 0x428a, 0x07dc, 0x42bb, 0x3923, 0x430d, 0x41a0, 0xbaed, 0xbf4e, 0x40ee, 0x0acb, 0x1f73, 0xbae9, 0xa18e, 0x41a8, 0x1947, 0x181b, 0x4248, 0x4349, 0xbf11, 0x1e48, 0x41d8, 0x18dc, 0x2073, 0xb20f, 0x41df, 0x41bf, 0x1ba3, 0xbf90, 0x4144, 0x428d, 0x41f9, 0x43b8, 0xb239, 0x4180, 0x432a, 0x4119, 0x46f8, 0x4329, 0x4091, 0x4302, 0xb228, 0x4094, 0x40b1, 0xbfcd, 0x2d26, 0x454f, 0x18a4, 0x42fb, 0x1b0e, 0x0d5a, 0x1ddb, 0x14c4, 0x43c2, 0xa374, 0x426b, 0xb0c9, 0x4262, 0xbf80, 0xbf8f, 0x46d3, 0x40cb, 0x4377, 0xb2b3, 0x3a47, 0xba60, 0xbfd9, 0xb267, 0x429a, 0x1806, 0x43d3, 0x3142, 0xb2be, 0x1487, 0x18ab, 0x1cd7, 0xba36, 0x1027, 0xb028, 0x1742, 0x435b, 0x4147, 0x2501, 0x41f0, 0xbadb, 0x40af, 0x444b, 0xb24c, 0xbae8, 0x40aa, 0xb2fe, 0xa75f, 0xbfcb, 0x4162, 0x4146, 0x4328, 0x2a69, 0x4247, 0x286e, 0x0b98, 0x24fb, 0xb061, 0x43a8, 0x409b, 0x1a0b, 0x41b6, 0x435a, 0xb244, 0x242e, 0xbad4, 0x0f4e, 0xbf0b, 0x4069, 0x273a, 0x4422, 0x4208, 0x4248, 0x43fa, 0x4406, 0xb2c1, 0x4046, 0x40bb, 0x4267, 0xb2b6, 0x03b8, 0xb2fd, 0x3dd7, 0xba6c, 0xb29b, 0xba17, 0x4109, 0x1b66, 0xb2df, 0xb005, 0x3496, 0x4598, 0xbf48, 0x40b2, 0x2979, 0x40d4, 0x4269, 0xb2ba, 0x3b3b, 0x408f, 0x336d, 0x1b00, 0x42c9, 0x2a70, 0xbf00, 0xaf87, 0x4386, 0x40c3, 0x4601, 0x461a, 0xbf90, 0xb217, 0x1d8e, 0x1c52, 0x42eb, 0x403f, 0xa25c, 0xa437, 0xbfcd, 0x19b1, 0x413f, 0x404a, 0x19f3, 0xbae3, 0x20a3, 0xbf4e, 0x3dd9, 0x4157, 0xb2ee, 0x29e2, 0xbad3, 0x42ab, 0x40af, 0xbf0d, 0xbaea, 0x43c8, 0xbae8, 0x0451, 0x424a, 0x1c6b, 0x400e, 0x4144, 0x3a3a, 0x412f, 0xbf04, 0x42df, 0x3821, 0x40ec, 0x433e, 0x4196, 0x43fd, 0x42e0, 0xb00f, 0x44dc, 0x2af8, 0x157c, 0x4316, 0xb095, 0xbf4b, 0x1a70, 0x1aaf, 0xb263, 0x41a3, 0x42ae, 0x44ba, 0x289a, 0xb293, 0x40d8, 0x3bc3, 0x42a1, 0x41e8, 0xbaf7, 0x403d, 0x418d, 0x42cf, 0xb023, 0xb05c, 0x4029, 0x40e4, 0x4209, 0x40fc, 0x108c, 0x40d5, 0xbf14, 0xb0e2, 0x425c, 0x4220, 0x244c, 0x0736, 0x1d18, 0x401d, 0x40ac, 0x4045, 0x4051, 0xaf3a, 0xbaef, 0x4451, 0x439a, 0x43ba, 0x406b, 0x1daf, 0x409e, 0x44ad, 0xb09c, 0x4087, 0x205e, 0x4540, 0x40fc, 0xb27d, 0xbf7a, 0x28c4, 0x42c5, 0x4178, 0x42eb, 0x40d3, 0xb273, 0x45f3, 0x401b, 0x43ca, 0x43f4, 0x43d1, 0xaed9, 0xba70, 0x41c3, 0x11e8, 0x41bb, 0x40e2, 0x41c0, 0xa5a2, 0x09c4, 0xbfc0, 0x43aa, 0x388c, 0x411e, 0x189f, 0xbf81, 0x4339, 0x1f88, 0x1b87, 0xa26a, 0xbf0a, 0x4366, 0x415a, 0x42ac, 0x41bc, 0xbf60, 0xba4b, 0xba12, 0x41b7, 0x413d, 0xb02f, 0x4235, 0x0548, 0x0509, 0x41de, 0x42c6, 0x16c5, 0x3d8d, 0xbf0d, 0x2de3, 0x40b7, 0x417f, 0x40f6, 0xa413, 0x4232, 0xba60, 0x4126, 0x4044, 0x1bd0, 0x2d4b, 0x20bd, 0xb215, 0x40d9, 0x415c, 0xbf08, 0x1d75, 0x1e01, 0x411c, 0x0b49, 0x410e, 0xbfcf, 0x1455, 0x0ee7, 0x05cd, 0x4394, 0xb2b1, 0x432c, 0x25fb, 0x4671, 0x4053, 0x3e48, 0x0be7, 0x405f, 0x4276, 0x41f6, 0x440e, 0x40f6, 0x435a, 0x41a5, 0xb2ef, 0x3d3f, 0x443a, 0x332a, 0xb00d, 0x4432, 0x1d1c, 0x428e, 0x4296, 0x42ef, 0xbfaf, 0x4062, 0x1918, 0x08bd, 0x4241, 0xba2f, 0x40b9, 0x1e32, 0x42be, 0x2983, 0xbf99, 0x402b, 0x423e, 0x41e5, 0x403a, 0xbf70, 0x41d1, 0x42cf, 0x434f, 0x41ea, 0x1dd7, 0x418c, 0x418f, 0xb248, 0x1e0f, 0x2ec4, 0x42f5, 0x40e2, 0x4330, 0x4118, 0xad76, 0xb089, 0x41b9, 0x40de, 0x42fa, 0xba54, 0xb2c6, 0xbf09, 0x4102, 0x41e7, 0xb08b, 0x41bd, 0x1dbf, 0x4140, 0x4009, 0x42fc, 0x46db, 0xbad8, 0x45ae, 0x40e0, 0x4212, 0x43fd, 0x43cb, 0x435f, 0x4276, 0x15a5, 0xb222, 0x409b, 0x40cb, 0xbf48, 0xad26, 0x40e7, 0x3491, 0x36b5, 0xbfa6, 0x4192, 0x43e1, 0x430d, 0xb28b, 0xaa14, 0x42eb, 0x4492, 0x41a8, 0xa8d2, 0x436e, 0x41c9, 0x4211, 0x42cf, 0x0d26, 0x41ea, 0x40bd, 0x0f79, 0x40d2, 0x394c, 0x4072, 0x40c9, 0xbf84, 0xb278, 0x2591, 0x43a9, 0x13e4, 0xb287, 0x02ad, 0x3290, 0x43ec, 0x4141, 0x431a, 0x46a9, 0x4629, 0x2e09, 0x1a14, 0x41f5, 0xba19, 0x35d8, 0x2c4a, 0x43dc, 0xb28e, 0x40b7, 0x41db, 0x41fe, 0x2f4d, 0xbfe8, 0x4459, 0x46d8, 0x42c5, 0x1d4f, 0x1a9e, 0x4203, 0x42b2, 0x4299, 0x428d, 0xbf29, 0x4129, 0xb223, 0x427a, 0x41c5, 0x089e, 0xad9a, 0xb24c, 0x1f2a, 0xb023, 0xb291, 0x42b3, 0xb07a, 0x1e3c, 0xa3d6, 0x4194, 0xbaf7, 0x370e, 0x1faa, 0x197f, 0x409e, 0x19c8, 0x4616, 0xbf7a, 0x42a2, 0x437e, 0xba3e, 0x4312, 0x428a, 0x418a, 0x433b, 0x03d8, 0x0250, 0xb29a, 0x1dd0, 0x33c0, 0x4334, 0xb0fd, 0xbfa0, 0xb279, 0x4067, 0x405b, 0xb23e, 0x2224, 0x4375, 0x2e15, 0x406f, 0x43b4, 0xbf94, 0xba6d, 0x04eb, 0x42f4, 0x42d7, 0x4184, 0x40cb, 0x40c5, 0x422d, 0x19c7, 0x415e, 0x426f, 0x4124, 0xb2e7, 0xa9a4, 0x40ed, 0x412f, 0x43c9, 0x3ca8, 0x1b05, 0x32fc, 0x4276, 0x4037, 0x447f, 0x40c3, 0xb267, 0xbf81, 0x43bb, 0xb243, 0x4570, 0x2b22, 0x0e9c, 0x4063, 0x1bea, 0x4055, 0x2367, 0xba35, 0x1e69, 0x0926, 0x44f5, 0xb00b, 0x18f8, 0x4007, 0xb255, 0x4350, 0xb0a5, 0x4095, 0xba26, 0xa26b, 0x14b9, 0x4346, 0xbfae, 0x4312, 0x4446, 0xbf80, 0xa9c8, 0xba7d, 0x410a, 0xbfa2, 0x2319, 0xb282, 0x4185, 0x425f, 0x41c1, 0x409c, 0x1a10, 0x1003, 0x284b, 0xbae6, 0xb221, 0xb242, 0x4262, 0xbad8, 0xbafe, 0xaa78, 0x4223, 0x41d8, 0xb0f9, 0x4091, 0x445c, 0x321e, 0x42c1, 0x4023, 0x411a, 0x438f, 0x43fd, 0xbf29, 0x434f, 0xa7a0, 0x1d7a, 0x40f0, 0xba4f, 0x2879, 0x4093, 0xa50b, 0x42b5, 0xb289, 0x43dd, 0xb014, 0xba26, 0x0450, 0x413b, 0x1828, 0xba63, 0x4156, 0x292f, 0x428f, 0xb053, 0xbf68, 0x42c4, 0x059b, 0x14ec, 0x4207, 0x43c8, 0x43b7, 0xba72, 0xb297, 0x1ab9, 0x1525, 0x416d, 0x420c, 0x446b, 0xb205, 0x466b, 0x416f, 0x19c5, 0x4351, 0x22d5, 0x4670, 0xb06b, 0x0374, 0x066b, 0xbfb9, 0x0c25, 0xabee, 0x4143, 0x41f2, 0x181b, 0x42f7, 0x40ab, 0x4130, 0xba4a, 0x1a6d, 0xba02, 0x4165, 0xbf60, 0x417e, 0x340c, 0xba72, 0xbaff, 0x3ddc, 0xbf35, 0x415a, 0x4011, 0x42cb, 0x437c, 0x3d03, 0x41d4, 0x1855, 0x0b24, 0xa86b, 0x41ef, 0xb262, 0x41a4, 0xb272, 0x43a4, 0x030c, 0x4365, 0xbf52, 0x46b5, 0x464d, 0x42b3, 0x1b6e, 0xba3d, 0x20f7, 0x35dc, 0x2ee9, 0xbf4e, 0x4378, 0xaf6a, 0x142e, 0xb290, 0x42d9, 0x40d8, 0xb069, 0x1fb9, 0x430a, 0x0594, 0x4231, 0xbafd, 0x3a53, 0xb2b1, 0xb0e0, 0x001d, 0xa85d, 0x17cd, 0x42b5, 0x4330, 0xb012, 0xbacd, 0x0ed9, 0xbf86, 0xba22, 0x4068, 0x263e, 0x0048, 0xb2a4, 0xba4a, 0xbf3a, 0x4224, 0x426e, 0x0a8d, 0xa5f2, 0x14f4, 0x4164, 0x1e8e, 0x324b, 0xba1c, 0x40ed, 0x4108, 0x170d, 0x30b8, 0x04a7, 0xb073, 0x2d88, 0x4171, 0x1b68, 0xbfa4, 0x40fe, 0xbac1, 0xba57, 0xb2ce, 0x330f, 0x2614, 0x070e, 0xb0c2, 0x4244, 0xad7d, 0x06ac, 0xa5ef, 0x0d63, 0x42aa, 0xb2df, 0xb2ce, 0x42d1, 0x2ea4, 0xbf4d, 0x4185, 0x41bb, 0x45e1, 0x326c, 0x42ea, 0x443c, 0xb219, 0x41a7, 0xbf31, 0x42af, 0x43f5, 0x4137, 0x1efb, 0x4175, 0x40fa, 0x4340, 0x40f0, 0x4342, 0x43f6, 0xbafe, 0x17c7, 0xbfcc, 0x4485, 0x43e3, 0x4085, 0x4003, 0x4187, 0x07dd, 0x3c2d, 0x1acf, 0x40a2, 0xbae2, 0x417c, 0xbfe0, 0x198c, 0xbf8c, 0x1a73, 0xbafc, 0x2c1d, 0x0cf6, 0x43a9, 0x403d, 0xbf34, 0x4297, 0xb000, 0xb27b, 0xab7d, 0x05c9, 0xb245, 0x4326, 0x426d, 0x4226, 0x42df, 0xb0d8, 0x46f2, 0x43ca, 0x4096, 0x283c, 0x4406, 0x41bc, 0xbf6d, 0x433b, 0x458b, 0x41be, 0xb019, 0x4029, 0x4167, 0x42a1, 0x4024, 0xbaf1, 0xb26c, 0x1e3d, 0xb292, 0x41ea, 0x241b, 0x4024, 0x1aec, 0x431e, 0x4606, 0x4209, 0x356f, 0x4308, 0xa65e, 0xbf7d, 0xbf70, 0x1a6b, 0xbaf8, 0x42f3, 0x1dac, 0xb2bf, 0x26b6, 0xba4a, 0x460b, 0x4390, 0x422d, 0x0a84, 0xb0d1, 0x43d7, 0x4022, 0xb0ee, 0x409e, 0xba72, 0x2a10, 0x429f, 0xbf70, 0x304b, 0xa8bc, 0xbf2c, 0x4288, 0x41cc, 0xbf28, 0xba26, 0x419b, 0x42af, 0x4357, 0xab5e, 0x4307, 0xbae7, 0x4449, 0x2dca, 0x46d9, 0xa4d7, 0x4384, 0xb0ae, 0x39ca, 0x4153, 0xba66, 0x43ae, 0xba2b, 0xbfe1, 0x189b, 0x4062, 0xbaf2, 0xba5c, 0xb041, 0x431f, 0x0f58, 0x4474, 0xbf19, 0x421c, 0x09c9, 0x0947, 0xb013, 0xba56, 0x3cdb, 0x43d0, 0xbf7a, 0x40d6, 0x079a, 0x030a, 0x4770, 0xe7fe + ], + StartRegs = [0x69b72ece, 0x9ea70faf, 0x0bef8eae, 0x8b8f6dd5, 0x4fde440e, 0x8c63dba4, 0xee0baa0f, 0xb2812116, 0x764ead9f, 0xda04bbb5, 0xc49fd907, 0xf371f841, 0xb64410f1, 0x71a52826, 0x00000000, 0x000001f0 + ], + FinalRegs = [0xffffef27, 0x00002035, 0x00000000, 0x4e010000, 0x014dff25, 0x0000014e, 0x00000000, 0x00000000, 0xf371f841, 0xf371f841, 0x00000000, 0xf371f841, 0xa9b60932, 0x41f962cf, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x40c2, 0x4026, 0x4391, 0x4114, 0x43fc, 0x4369, 0x4099, 0x0707, 0xbfe0, 0xbf8f, 0x3fa9, 0x4220, 0x1d09, 0x4261, 0xba25, 0xb018, 0x2131, 0x41ab, 0x404f, 0x4031, 0xbaf3, 0xb2b6, 0x1e5f, 0x4202, 0x1b23, 0x42e2, 0x2214, 0x4247, 0xba0a, 0x4146, 0xbf5f, 0x0974, 0xa6cd, 0x1ecc, 0x41a9, 0x403b, 0x4312, 0xb08f, 0x4074, 0x4191, 0x4381, 0x404f, 0x45a0, 0xb2e0, 0x0258, 0x1eb3, 0x057e, 0x444f, 0x259e, 0xbfc7, 0x1e86, 0xb080, 0x43cd, 0x1c81, 0x41cb, 0xba3f, 0x423a, 0x4627, 0x4040, 0x32a8, 0x3811, 0x463d, 0x284f, 0x0180, 0xb29e, 0x2fcb, 0x18ee, 0xba4b, 0x4239, 0xba51, 0x42b7, 0xbad0, 0x429c, 0xbf2c, 0x438a, 0x41aa, 0x0bf1, 0x23b2, 0x4393, 0xb27f, 0xafd2, 0xb233, 0x4434, 0x2e78, 0x41f2, 0xbfac, 0xb27e, 0x1ace, 0x40b0, 0x45d2, 0x400e, 0x1fed, 0xb071, 0x239f, 0x4171, 0x18f1, 0xa24f, 0xb2b1, 0x421b, 0x0b5c, 0x464b, 0xba55, 0x424a, 0x4541, 0xbf90, 0x440d, 0xb2de, 0x42a9, 0xb05b, 0xbfce, 0x431a, 0x465b, 0x1108, 0x411b, 0xbafd, 0x4141, 0x40fd, 0x174d, 0x46a8, 0xba6f, 0x2829, 0x0e03, 0x19ed, 0x26d3, 0x4379, 0x40a2, 0xb21b, 0x40bc, 0x185d, 0x4352, 0xb09a, 0xb280, 0x40ae, 0x42a9, 0x4218, 0xba0a, 0x1aa9, 0xbf86, 0xaf41, 0x40df, 0xb2f9, 0x429a, 0xa93c, 0x26b5, 0x22a0, 0xa0ec, 0x1def, 0xb2ea, 0xb231, 0x437b, 0xab30, 0x41ee, 0x1f12, 0x423f, 0x43b6, 0x4218, 0xb0e1, 0x40b9, 0x4175, 0x41aa, 0xbf9f, 0xb04a, 0xb28d, 0xba0e, 0x40f5, 0x1bda, 0x4460, 0x45ce, 0xb253, 0x1fbc, 0x2b3b, 0xb054, 0x216b, 0x1ef5, 0xb239, 0x4117, 0x3e6a, 0x1c59, 0xb212, 0x1e71, 0x435d, 0xb0f6, 0x40af, 0x426f, 0xb267, 0xbfac, 0xb29a, 0x4231, 0x1064, 0xb2bf, 0x42ee, 0xbf90, 0x4194, 0xb2cf, 0x4029, 0x1651, 0x43f7, 0x4091, 0xa737, 0x1c29, 0x36ec, 0x2620, 0x4664, 0xb210, 0x4630, 0xaa7e, 0x4254, 0x4571, 0xbf04, 0x41ad, 0x40b9, 0x407d, 0x06a0, 0xb29d, 0x43af, 0xb2b2, 0xbafc, 0xb2bc, 0xb278, 0xb235, 0x40d5, 0x1e08, 0x3d80, 0x42f6, 0xb01d, 0x4383, 0x08db, 0x428b, 0x43d1, 0x1835, 0x1efa, 0x221b, 0xb057, 0x4051, 0x0216, 0xbfb5, 0xad04, 0x424a, 0x42b2, 0x427a, 0xa99f, 0x2987, 0xb2a1, 0x0a0e, 0xb2d1, 0xbf97, 0x41b9, 0x41d7, 0x18b3, 0x1e5f, 0x3969, 0x323f, 0x1a8e, 0x4643, 0x46e1, 0x4005, 0x435e, 0x4353, 0x35c5, 0x41af, 0x43c6, 0xbaf6, 0x05c4, 0xba7f, 0x41dc, 0x464f, 0x454e, 0xbfe1, 0x3f23, 0x46e4, 0x42e1, 0xb26b, 0x1fe7, 0x44a3, 0x22da, 0x02a8, 0x4366, 0x0239, 0xb2ba, 0x431e, 0x4267, 0xba59, 0x2155, 0x41ff, 0x43b6, 0x4112, 0xb289, 0xb28d, 0xa0b5, 0x415d, 0x4234, 0xbf81, 0x442b, 0x3b05, 0x4359, 0xb2f1, 0xad7d, 0xb2c7, 0x411f, 0x414b, 0x1ce1, 0x41dc, 0xb2ed, 0x4580, 0xba56, 0xb259, 0x407a, 0x1c86, 0xba38, 0x422a, 0x40c4, 0xbf81, 0x411b, 0x1dd0, 0x1eba, 0x3194, 0x3435, 0xb225, 0x43a8, 0x1b6d, 0x231b, 0xbf7d, 0x46ab, 0xb2ed, 0xb0f3, 0xb254, 0xb0e0, 0x41f3, 0x2773, 0x1869, 0x40c3, 0xb25f, 0x1820, 0xbf97, 0x3435, 0x41d2, 0xb2f2, 0x1c37, 0x176a, 0x425f, 0x43f8, 0x400b, 0x23a7, 0xb09a, 0xbff0, 0x414d, 0x4221, 0x283e, 0x43bd, 0x41b9, 0xbaeb, 0x3c41, 0x2790, 0x0b0a, 0xb2e4, 0x1fca, 0xbf80, 0xb0f0, 0xbac8, 0xbfc0, 0xbf7c, 0xba70, 0x41d4, 0x4655, 0x22f4, 0x40bc, 0x4223, 0x42e7, 0x39e7, 0x437c, 0xa249, 0x0634, 0x1fac, 0x413f, 0x2aa4, 0xa70a, 0x4651, 0x424e, 0x4074, 0xbfca, 0x405f, 0x1201, 0xba3f, 0x40ee, 0x40d4, 0x46ac, 0xa9d0, 0x1dc7, 0x41b3, 0x1d14, 0x41c8, 0x332d, 0xb2be, 0x4290, 0x4625, 0xa891, 0xbf70, 0x4335, 0xbf38, 0x42bc, 0xac43, 0x4180, 0x4357, 0x41c2, 0x3ce3, 0x368c, 0x414b, 0x40d4, 0x40a4, 0x4072, 0xbadd, 0x436c, 0x4102, 0x34c9, 0x4430, 0x43e2, 0x407d, 0x018e, 0xa86d, 0x431e, 0x4072, 0xbf74, 0x4271, 0xba6f, 0x4333, 0x180b, 0xb2c8, 0x18ca, 0x40a4, 0x2445, 0xaf56, 0x43a6, 0x438d, 0x41b5, 0xb20a, 0xb0ec, 0x410c, 0x012a, 0x40d4, 0x43e2, 0x40c9, 0x41ce, 0xb2c3, 0xba5e, 0xbf95, 0x4135, 0x1f74, 0x4107, 0x46e4, 0xbfd8, 0x42ed, 0x0c9a, 0x0919, 0x43f9, 0xbfc4, 0x4035, 0x0f3f, 0xbac2, 0xab07, 0x2db8, 0x0c01, 0x4012, 0x1ef4, 0xaae2, 0xb02a, 0xbaf4, 0xbfbc, 0x41d3, 0x4416, 0x40c7, 0x44e4, 0xb2c9, 0x40fa, 0x38e7, 0x42da, 0xba4a, 0x4145, 0x3e87, 0xb018, 0x42d3, 0x07f6, 0x42ec, 0xb2b7, 0x4379, 0xb060, 0xba0d, 0x40ff, 0x2f57, 0xba5b, 0x4263, 0xbf8b, 0x426a, 0x42e1, 0x41b0, 0x461c, 0x438c, 0x33c7, 0x43ef, 0x46b8, 0x1dd3, 0xb233, 0xbf1f, 0x439e, 0x4459, 0x4411, 0xbfd0, 0xab1b, 0xb067, 0xb277, 0x01d0, 0x415b, 0x416e, 0xb20e, 0x4309, 0x423b, 0x0763, 0xbf7e, 0xb04d, 0xb2b9, 0x1c91, 0x4399, 0x4341, 0xba55, 0x40ae, 0xb288, 0xb06e, 0xb2a7, 0x4095, 0x44e8, 0x19a4, 0x42d0, 0x4318, 0xb063, 0x41c6, 0xb284, 0x415f, 0xba44, 0x3c51, 0x4388, 0xb0d2, 0x433a, 0x418e, 0x430b, 0x40bb, 0x4075, 0xbf96, 0x4191, 0xba78, 0x4380, 0x402f, 0xbaec, 0x45da, 0xa7ba, 0xb280, 0x42cd, 0x0e15, 0xbfc0, 0x4292, 0x46c9, 0x44ad, 0xb280, 0x4246, 0xb262, 0xb247, 0x4082, 0x402b, 0xb230, 0xba1b, 0xb077, 0x41f3, 0xbf0c, 0x1901, 0xb016, 0x1edf, 0x3519, 0x4058, 0x418b, 0x42bb, 0xbfd0, 0x014d, 0x43dd, 0xbf52, 0x1b22, 0x434a, 0x41f1, 0x4181, 0xa9a5, 0xb20d, 0xb0cb, 0xbf42, 0x3727, 0xb271, 0x4088, 0xabfb, 0xbf61, 0x1ab9, 0x0344, 0x40cd, 0x41d4, 0x1f44, 0x43b7, 0x298e, 0xbf72, 0x1c94, 0xb0ed, 0x2b19, 0x4427, 0x4337, 0x40c3, 0x3601, 0x19a2, 0x414d, 0x18c7, 0x4006, 0x4313, 0x4253, 0x1d49, 0xbf94, 0xba13, 0xa1dc, 0xb2d7, 0x0b0b, 0x41c8, 0x41b5, 0x1b21, 0x3242, 0x1d53, 0x3ac5, 0xb0ec, 0xba22, 0xa9c9, 0x40ef, 0x4027, 0xb0bf, 0xb00f, 0x211f, 0xb018, 0x1fb8, 0x14c1, 0x410c, 0x4081, 0x4604, 0x3ab7, 0xb20f, 0x4301, 0xbf54, 0x42dc, 0x1861, 0x41bf, 0x405e, 0x1dbd, 0x17ce, 0x46e1, 0x4287, 0xa83c, 0x3e4d, 0xb03a, 0xb2bb, 0x41cd, 0x40a4, 0x430e, 0xb288, 0xb25d, 0x4312, 0xb0de, 0x18b3, 0xb2c9, 0x08aa, 0xba4f, 0xbf61, 0x42aa, 0xb249, 0x2856, 0xa13d, 0x4092, 0x424b, 0x2284, 0xb206, 0x40c5, 0x2801, 0x443b, 0x43df, 0x0c18, 0xbf35, 0x42f2, 0x4031, 0x4048, 0xb225, 0x4215, 0x449c, 0x1ecf, 0x43fd, 0x421a, 0x4584, 0xb03e, 0x2473, 0x16d8, 0x42c8, 0x44db, 0x43bb, 0xba55, 0xba18, 0xb06e, 0x1a1d, 0xb281, 0x23c5, 0xbf72, 0x4288, 0x176a, 0x431a, 0x4392, 0xb0d3, 0x43d6, 0x0263, 0x43e7, 0xbfde, 0x0aab, 0x22c9, 0x4203, 0xba25, 0xb2ed, 0x0d84, 0x3b27, 0x17d9, 0x1c5e, 0xb027, 0x19d8, 0xb22d, 0x4284, 0xada7, 0x44c3, 0x431d, 0x1549, 0xb293, 0xb20b, 0xbaf3, 0x419b, 0x2a68, 0x3d99, 0xbf3f, 0x411d, 0xb2c7, 0x4346, 0x1ea1, 0xbf22, 0x1c0c, 0x16ab, 0x1a2e, 0xb0c8, 0x4253, 0x432b, 0xa1c3, 0xbadb, 0x408b, 0x4339, 0x064c, 0x43be, 0x421d, 0x439c, 0x4042, 0x4197, 0x11d2, 0xbf18, 0xbad3, 0x1e4a, 0x4239, 0x2672, 0xb267, 0xa0f4, 0x4240, 0xba29, 0x42a2, 0x4225, 0xbf73, 0x4263, 0x0e6d, 0x43a7, 0x1be0, 0x4460, 0xba4b, 0x42ad, 0x406a, 0x4002, 0x40c9, 0x41e8, 0xb237, 0x4281, 0x4378, 0x4473, 0xb297, 0x3829, 0xbf60, 0x4110, 0x426d, 0x1b20, 0x1ade, 0xbac1, 0x4227, 0xb216, 0x41ed, 0x430d, 0xbf46, 0x4200, 0xb22b, 0x46ed, 0x1496, 0x180b, 0x3e53, 0x4601, 0x4404, 0xbf37, 0x42a3, 0x24ec, 0x3704, 0x2ead, 0xb041, 0xb239, 0xb0f5, 0x418b, 0xbaef, 0xba37, 0x413c, 0x4076, 0xbada, 0x35ef, 0x40cf, 0xbf8b, 0x4379, 0x3548, 0x1edb, 0x41ea, 0x1d56, 0xba6a, 0xba46, 0xb0ac, 0x33d6, 0x40e1, 0x21ce, 0xbf8f, 0xba17, 0xb257, 0xba54, 0xba5f, 0x26c7, 0x40fc, 0x4283, 0xbf04, 0xb280, 0x43de, 0x1eed, 0x3a39, 0x401d, 0x4310, 0xba5b, 0x4656, 0x404c, 0xbfd9, 0x465b, 0xba4b, 0x4656, 0x438a, 0x4347, 0xa967, 0x4049, 0x41c0, 0x1930, 0xb040, 0x433f, 0x1c50, 0xbf54, 0x41bf, 0x4027, 0xbf03, 0xb0dd, 0x42b3, 0x435a, 0xb292, 0x404c, 0xb290, 0xba28, 0x400b, 0x4092, 0x406e, 0x4318, 0x442c, 0x0c48, 0xa5ad, 0x4148, 0x424d, 0x4279, 0x40b1, 0x4331, 0xb27b, 0xb049, 0x1cae, 0x45ab, 0x4319, 0xb06e, 0x40b7, 0xbf1c, 0x4484, 0x1ce2, 0x439b, 0x41d4, 0xb28f, 0x4038, 0x45c1, 0xaf03, 0xa786, 0x409e, 0x0b05, 0x1295, 0x3ba6, 0xa9df, 0x42df, 0xba11, 0xb2d0, 0xba4e, 0xbf38, 0x43a1, 0x3a98, 0x4163, 0x41e4, 0x40e0, 0x4619, 0x4259, 0x1b6a, 0xbf81, 0x396c, 0x3ebc, 0xb2e6, 0xad08, 0x4350, 0x13f0, 0x1898, 0x1f15, 0xbfaa, 0x4335, 0x321b, 0x4189, 0x40b1, 0x0a31, 0xbfa3, 0x3fc0, 0x2d58, 0x43ad, 0xa85a, 0x40af, 0x423d, 0x02b8, 0x1dfe, 0xbac5, 0x4342, 0x40e1, 0x41fb, 0xab7c, 0x28a1, 0x4219, 0x098d, 0x4085, 0xb20e, 0x2e27, 0x0b99, 0x4403, 0xb2c0, 0x405d, 0xb0bc, 0xb0cb, 0xbf98, 0x42c0, 0xb207, 0xb250, 0x40d5, 0x19ff, 0xb2bb, 0x42cc, 0x42d6, 0xae29, 0xba31, 0xbfdd, 0x3003, 0x0f3d, 0xb091, 0xba54, 0x41ed, 0x40e3, 0x20e4, 0xb012, 0xb2c2, 0x409d, 0xb28e, 0x080e, 0xaedd, 0x06d2, 0xb226, 0x4160, 0x4059, 0xb229, 0x040c, 0x4223, 0x422f, 0x3772, 0xb2b6, 0x417e, 0xb21b, 0xbacb, 0xb2d4, 0x2fb1, 0x45e2, 0xbfc9, 0x41f2, 0x42c9, 0x0d4f, 0x4300, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x82916b79, 0x515ecb9e, 0x9eeb80a7, 0x4448bdb6, 0x9fbc4379, 0x7f419a33, 0x42be67d1, 0x712a0dae, 0x4382a2e5, 0x7d2ed79f, 0xe8c9993b, 0x9fd1abb1, 0xed4e4991, 0xf7cf8b5c, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0xa000b5cd, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x0000b55a, 0x00000000, 0xf7cf8df7, 0xd1933276, 0xe8c9993b, 0xf7cf8df7, 0xd1942582, 0xf7cf8df0, 0x00000000, 0x200001d0 }, + Instructions = [0x40c2, 0x4026, 0x4391, 0x4114, 0x43fc, 0x4369, 0x4099, 0x0707, 0xbfe0, 0xbf8f, 0x3fa9, 0x4220, 0x1d09, 0x4261, 0xba25, 0xb018, 0x2131, 0x41ab, 0x404f, 0x4031, 0xbaf3, 0xb2b6, 0x1e5f, 0x4202, 0x1b23, 0x42e2, 0x2214, 0x4247, 0xba0a, 0x4146, 0xbf5f, 0x0974, 0xa6cd, 0x1ecc, 0x41a9, 0x403b, 0x4312, 0xb08f, 0x4074, 0x4191, 0x4381, 0x404f, 0x45a0, 0xb2e0, 0x0258, 0x1eb3, 0x057e, 0x444f, 0x259e, 0xbfc7, 0x1e86, 0xb080, 0x43cd, 0x1c81, 0x41cb, 0xba3f, 0x423a, 0x4627, 0x4040, 0x32a8, 0x3811, 0x463d, 0x284f, 0x0180, 0xb29e, 0x2fcb, 0x18ee, 0xba4b, 0x4239, 0xba51, 0x42b7, 0xbad0, 0x429c, 0xbf2c, 0x438a, 0x41aa, 0x0bf1, 0x23b2, 0x4393, 0xb27f, 0xafd2, 0xb233, 0x4434, 0x2e78, 0x41f2, 0xbfac, 0xb27e, 0x1ace, 0x40b0, 0x45d2, 0x400e, 0x1fed, 0xb071, 0x239f, 0x4171, 0x18f1, 0xa24f, 0xb2b1, 0x421b, 0x0b5c, 0x464b, 0xba55, 0x424a, 0x4541, 0xbf90, 0x440d, 0xb2de, 0x42a9, 0xb05b, 0xbfce, 0x431a, 0x465b, 0x1108, 0x411b, 0xbafd, 0x4141, 0x40fd, 0x174d, 0x46a8, 0xba6f, 0x2829, 0x0e03, 0x19ed, 0x26d3, 0x4379, 0x40a2, 0xb21b, 0x40bc, 0x185d, 0x4352, 0xb09a, 0xb280, 0x40ae, 0x42a9, 0x4218, 0xba0a, 0x1aa9, 0xbf86, 0xaf41, 0x40df, 0xb2f9, 0x429a, 0xa93c, 0x26b5, 0x22a0, 0xa0ec, 0x1def, 0xb2ea, 0xb231, 0x437b, 0xab30, 0x41ee, 0x1f12, 0x423f, 0x43b6, 0x4218, 0xb0e1, 0x40b9, 0x4175, 0x41aa, 0xbf9f, 0xb04a, 0xb28d, 0xba0e, 0x40f5, 0x1bda, 0x4460, 0x45ce, 0xb253, 0x1fbc, 0x2b3b, 0xb054, 0x216b, 0x1ef5, 0xb239, 0x4117, 0x3e6a, 0x1c59, 0xb212, 0x1e71, 0x435d, 0xb0f6, 0x40af, 0x426f, 0xb267, 0xbfac, 0xb29a, 0x4231, 0x1064, 0xb2bf, 0x42ee, 0xbf90, 0x4194, 0xb2cf, 0x4029, 0x1651, 0x43f7, 0x4091, 0xa737, 0x1c29, 0x36ec, 0x2620, 0x4664, 0xb210, 0x4630, 0xaa7e, 0x4254, 0x4571, 0xbf04, 0x41ad, 0x40b9, 0x407d, 0x06a0, 0xb29d, 0x43af, 0xb2b2, 0xbafc, 0xb2bc, 0xb278, 0xb235, 0x40d5, 0x1e08, 0x3d80, 0x42f6, 0xb01d, 0x4383, 0x08db, 0x428b, 0x43d1, 0x1835, 0x1efa, 0x221b, 0xb057, 0x4051, 0x0216, 0xbfb5, 0xad04, 0x424a, 0x42b2, 0x427a, 0xa99f, 0x2987, 0xb2a1, 0x0a0e, 0xb2d1, 0xbf97, 0x41b9, 0x41d7, 0x18b3, 0x1e5f, 0x3969, 0x323f, 0x1a8e, 0x4643, 0x46e1, 0x4005, 0x435e, 0x4353, 0x35c5, 0x41af, 0x43c6, 0xbaf6, 0x05c4, 0xba7f, 0x41dc, 0x464f, 0x454e, 0xbfe1, 0x3f23, 0x46e4, 0x42e1, 0xb26b, 0x1fe7, 0x44a3, 0x22da, 0x02a8, 0x4366, 0x0239, 0xb2ba, 0x431e, 0x4267, 0xba59, 0x2155, 0x41ff, 0x43b6, 0x4112, 0xb289, 0xb28d, 0xa0b5, 0x415d, 0x4234, 0xbf81, 0x442b, 0x3b05, 0x4359, 0xb2f1, 0xad7d, 0xb2c7, 0x411f, 0x414b, 0x1ce1, 0x41dc, 0xb2ed, 0x4580, 0xba56, 0xb259, 0x407a, 0x1c86, 0xba38, 0x422a, 0x40c4, 0xbf81, 0x411b, 0x1dd0, 0x1eba, 0x3194, 0x3435, 0xb225, 0x43a8, 0x1b6d, 0x231b, 0xbf7d, 0x46ab, 0xb2ed, 0xb0f3, 0xb254, 0xb0e0, 0x41f3, 0x2773, 0x1869, 0x40c3, 0xb25f, 0x1820, 0xbf97, 0x3435, 0x41d2, 0xb2f2, 0x1c37, 0x176a, 0x425f, 0x43f8, 0x400b, 0x23a7, 0xb09a, 0xbff0, 0x414d, 0x4221, 0x283e, 0x43bd, 0x41b9, 0xbaeb, 0x3c41, 0x2790, 0x0b0a, 0xb2e4, 0x1fca, 0xbf80, 0xb0f0, 0xbac8, 0xbfc0, 0xbf7c, 0xba70, 0x41d4, 0x4655, 0x22f4, 0x40bc, 0x4223, 0x42e7, 0x39e7, 0x437c, 0xa249, 0x0634, 0x1fac, 0x413f, 0x2aa4, 0xa70a, 0x4651, 0x424e, 0x4074, 0xbfca, 0x405f, 0x1201, 0xba3f, 0x40ee, 0x40d4, 0x46ac, 0xa9d0, 0x1dc7, 0x41b3, 0x1d14, 0x41c8, 0x332d, 0xb2be, 0x4290, 0x4625, 0xa891, 0xbf70, 0x4335, 0xbf38, 0x42bc, 0xac43, 0x4180, 0x4357, 0x41c2, 0x3ce3, 0x368c, 0x414b, 0x40d4, 0x40a4, 0x4072, 0xbadd, 0x436c, 0x4102, 0x34c9, 0x4430, 0x43e2, 0x407d, 0x018e, 0xa86d, 0x431e, 0x4072, 0xbf74, 0x4271, 0xba6f, 0x4333, 0x180b, 0xb2c8, 0x18ca, 0x40a4, 0x2445, 0xaf56, 0x43a6, 0x438d, 0x41b5, 0xb20a, 0xb0ec, 0x410c, 0x012a, 0x40d4, 0x43e2, 0x40c9, 0x41ce, 0xb2c3, 0xba5e, 0xbf95, 0x4135, 0x1f74, 0x4107, 0x46e4, 0xbfd8, 0x42ed, 0x0c9a, 0x0919, 0x43f9, 0xbfc4, 0x4035, 0x0f3f, 0xbac2, 0xab07, 0x2db8, 0x0c01, 0x4012, 0x1ef4, 0xaae2, 0xb02a, 0xbaf4, 0xbfbc, 0x41d3, 0x4416, 0x40c7, 0x44e4, 0xb2c9, 0x40fa, 0x38e7, 0x42da, 0xba4a, 0x4145, 0x3e87, 0xb018, 0x42d3, 0x07f6, 0x42ec, 0xb2b7, 0x4379, 0xb060, 0xba0d, 0x40ff, 0x2f57, 0xba5b, 0x4263, 0xbf8b, 0x426a, 0x42e1, 0x41b0, 0x461c, 0x438c, 0x33c7, 0x43ef, 0x46b8, 0x1dd3, 0xb233, 0xbf1f, 0x439e, 0x4459, 0x4411, 0xbfd0, 0xab1b, 0xb067, 0xb277, 0x01d0, 0x415b, 0x416e, 0xb20e, 0x4309, 0x423b, 0x0763, 0xbf7e, 0xb04d, 0xb2b9, 0x1c91, 0x4399, 0x4341, 0xba55, 0x40ae, 0xb288, 0xb06e, 0xb2a7, 0x4095, 0x44e8, 0x19a4, 0x42d0, 0x4318, 0xb063, 0x41c6, 0xb284, 0x415f, 0xba44, 0x3c51, 0x4388, 0xb0d2, 0x433a, 0x418e, 0x430b, 0x40bb, 0x4075, 0xbf96, 0x4191, 0xba78, 0x4380, 0x402f, 0xbaec, 0x45da, 0xa7ba, 0xb280, 0x42cd, 0x0e15, 0xbfc0, 0x4292, 0x46c9, 0x44ad, 0xb280, 0x4246, 0xb262, 0xb247, 0x4082, 0x402b, 0xb230, 0xba1b, 0xb077, 0x41f3, 0xbf0c, 0x1901, 0xb016, 0x1edf, 0x3519, 0x4058, 0x418b, 0x42bb, 0xbfd0, 0x014d, 0x43dd, 0xbf52, 0x1b22, 0x434a, 0x41f1, 0x4181, 0xa9a5, 0xb20d, 0xb0cb, 0xbf42, 0x3727, 0xb271, 0x4088, 0xabfb, 0xbf61, 0x1ab9, 0x0344, 0x40cd, 0x41d4, 0x1f44, 0x43b7, 0x298e, 0xbf72, 0x1c94, 0xb0ed, 0x2b19, 0x4427, 0x4337, 0x40c3, 0x3601, 0x19a2, 0x414d, 0x18c7, 0x4006, 0x4313, 0x4253, 0x1d49, 0xbf94, 0xba13, 0xa1dc, 0xb2d7, 0x0b0b, 0x41c8, 0x41b5, 0x1b21, 0x3242, 0x1d53, 0x3ac5, 0xb0ec, 0xba22, 0xa9c9, 0x40ef, 0x4027, 0xb0bf, 0xb00f, 0x211f, 0xb018, 0x1fb8, 0x14c1, 0x410c, 0x4081, 0x4604, 0x3ab7, 0xb20f, 0x4301, 0xbf54, 0x42dc, 0x1861, 0x41bf, 0x405e, 0x1dbd, 0x17ce, 0x46e1, 0x4287, 0xa83c, 0x3e4d, 0xb03a, 0xb2bb, 0x41cd, 0x40a4, 0x430e, 0xb288, 0xb25d, 0x4312, 0xb0de, 0x18b3, 0xb2c9, 0x08aa, 0xba4f, 0xbf61, 0x42aa, 0xb249, 0x2856, 0xa13d, 0x4092, 0x424b, 0x2284, 0xb206, 0x40c5, 0x2801, 0x443b, 0x43df, 0x0c18, 0xbf35, 0x42f2, 0x4031, 0x4048, 0xb225, 0x4215, 0x449c, 0x1ecf, 0x43fd, 0x421a, 0x4584, 0xb03e, 0x2473, 0x16d8, 0x42c8, 0x44db, 0x43bb, 0xba55, 0xba18, 0xb06e, 0x1a1d, 0xb281, 0x23c5, 0xbf72, 0x4288, 0x176a, 0x431a, 0x4392, 0xb0d3, 0x43d6, 0x0263, 0x43e7, 0xbfde, 0x0aab, 0x22c9, 0x4203, 0xba25, 0xb2ed, 0x0d84, 0x3b27, 0x17d9, 0x1c5e, 0xb027, 0x19d8, 0xb22d, 0x4284, 0xada7, 0x44c3, 0x431d, 0x1549, 0xb293, 0xb20b, 0xbaf3, 0x419b, 0x2a68, 0x3d99, 0xbf3f, 0x411d, 0xb2c7, 0x4346, 0x1ea1, 0xbf22, 0x1c0c, 0x16ab, 0x1a2e, 0xb0c8, 0x4253, 0x432b, 0xa1c3, 0xbadb, 0x408b, 0x4339, 0x064c, 0x43be, 0x421d, 0x439c, 0x4042, 0x4197, 0x11d2, 0xbf18, 0xbad3, 0x1e4a, 0x4239, 0x2672, 0xb267, 0xa0f4, 0x4240, 0xba29, 0x42a2, 0x4225, 0xbf73, 0x4263, 0x0e6d, 0x43a7, 0x1be0, 0x4460, 0xba4b, 0x42ad, 0x406a, 0x4002, 0x40c9, 0x41e8, 0xb237, 0x4281, 0x4378, 0x4473, 0xb297, 0x3829, 0xbf60, 0x4110, 0x426d, 0x1b20, 0x1ade, 0xbac1, 0x4227, 0xb216, 0x41ed, 0x430d, 0xbf46, 0x4200, 0xb22b, 0x46ed, 0x1496, 0x180b, 0x3e53, 0x4601, 0x4404, 0xbf37, 0x42a3, 0x24ec, 0x3704, 0x2ead, 0xb041, 0xb239, 0xb0f5, 0x418b, 0xbaef, 0xba37, 0x413c, 0x4076, 0xbada, 0x35ef, 0x40cf, 0xbf8b, 0x4379, 0x3548, 0x1edb, 0x41ea, 0x1d56, 0xba6a, 0xba46, 0xb0ac, 0x33d6, 0x40e1, 0x21ce, 0xbf8f, 0xba17, 0xb257, 0xba54, 0xba5f, 0x26c7, 0x40fc, 0x4283, 0xbf04, 0xb280, 0x43de, 0x1eed, 0x3a39, 0x401d, 0x4310, 0xba5b, 0x4656, 0x404c, 0xbfd9, 0x465b, 0xba4b, 0x4656, 0x438a, 0x4347, 0xa967, 0x4049, 0x41c0, 0x1930, 0xb040, 0x433f, 0x1c50, 0xbf54, 0x41bf, 0x4027, 0xbf03, 0xb0dd, 0x42b3, 0x435a, 0xb292, 0x404c, 0xb290, 0xba28, 0x400b, 0x4092, 0x406e, 0x4318, 0x442c, 0x0c48, 0xa5ad, 0x4148, 0x424d, 0x4279, 0x40b1, 0x4331, 0xb27b, 0xb049, 0x1cae, 0x45ab, 0x4319, 0xb06e, 0x40b7, 0xbf1c, 0x4484, 0x1ce2, 0x439b, 0x41d4, 0xb28f, 0x4038, 0x45c1, 0xaf03, 0xa786, 0x409e, 0x0b05, 0x1295, 0x3ba6, 0xa9df, 0x42df, 0xba11, 0xb2d0, 0xba4e, 0xbf38, 0x43a1, 0x3a98, 0x4163, 0x41e4, 0x40e0, 0x4619, 0x4259, 0x1b6a, 0xbf81, 0x396c, 0x3ebc, 0xb2e6, 0xad08, 0x4350, 0x13f0, 0x1898, 0x1f15, 0xbfaa, 0x4335, 0x321b, 0x4189, 0x40b1, 0x0a31, 0xbfa3, 0x3fc0, 0x2d58, 0x43ad, 0xa85a, 0x40af, 0x423d, 0x02b8, 0x1dfe, 0xbac5, 0x4342, 0x40e1, 0x41fb, 0xab7c, 0x28a1, 0x4219, 0x098d, 0x4085, 0xb20e, 0x2e27, 0x0b99, 0x4403, 0xb2c0, 0x405d, 0xb0bc, 0xb0cb, 0xbf98, 0x42c0, 0xb207, 0xb250, 0x40d5, 0x19ff, 0xb2bb, 0x42cc, 0x42d6, 0xae29, 0xba31, 0xbfdd, 0x3003, 0x0f3d, 0xb091, 0xba54, 0x41ed, 0x40e3, 0x20e4, 0xb012, 0xb2c2, 0x409d, 0xb28e, 0x080e, 0xaedd, 0x06d2, 0xb226, 0x4160, 0x4059, 0xb229, 0x040c, 0x4223, 0x422f, 0x3772, 0xb2b6, 0x417e, 0xb21b, 0xbacb, 0xb2d4, 0x2fb1, 0x45e2, 0xbfc9, 0x41f2, 0x42c9, 0x0d4f, 0x4300, 0x4770, 0xe7fe + ], + StartRegs = [0x82916b79, 0x515ecb9e, 0x9eeb80a7, 0x4448bdb6, 0x9fbc4379, 0x7f419a33, 0x42be67d1, 0x712a0dae, 0x4382a2e5, 0x7d2ed79f, 0xe8c9993b, 0x9fd1abb1, 0xed4e4991, 0xf7cf8b5c, 0x00000000, 0x400001f0 + ], + FinalRegs = [0xa000b5cd, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x0000b55a, 0x00000000, 0xf7cf8df7, 0xd1933276, 0xe8c9993b, 0xf7cf8df7, 0xd1942582, 0xf7cf8df0, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x45f6, 0xa7e3, 0x4240, 0x4552, 0x19ea, 0x1ee9, 0x4223, 0xb029, 0x03fc, 0x41ff, 0x4699, 0x4543, 0x40eb, 0x1189, 0xb2eb, 0x2ed0, 0x46c5, 0x152e, 0xbf8b, 0x42ee, 0x454e, 0x2a1e, 0x3168, 0xa0a7, 0x1fa6, 0x415b, 0xb286, 0x3cff, 0x35a2, 0x405c, 0x4228, 0x40e1, 0x43e2, 0x40c6, 0x37cc, 0xbfda, 0x4320, 0xba70, 0xb067, 0x43f0, 0xb2b7, 0x4213, 0x4247, 0xb229, 0xb2f5, 0x42e7, 0x40cd, 0x1bdf, 0x43f8, 0x3887, 0xa60a, 0xba2e, 0x1b0d, 0x1e22, 0xba51, 0x437e, 0x45e4, 0x466e, 0xb017, 0x29df, 0x4057, 0x19e9, 0xb0cd, 0xbf34, 0x4466, 0x1283, 0xb0de, 0x42ff, 0x1c85, 0x4430, 0x42b0, 0xba35, 0x4274, 0x41e6, 0x4331, 0x42dd, 0x40ec, 0xbf43, 0xb23f, 0x405d, 0xba5f, 0x4563, 0x432c, 0xba0d, 0x43a2, 0x2a71, 0x439d, 0xb26e, 0x4685, 0xb086, 0xb217, 0xb264, 0x4412, 0xbff0, 0x4388, 0x18ff, 0x43c7, 0x407f, 0x4174, 0x410b, 0x4324, 0x469c, 0x410a, 0x4302, 0xbaff, 0xbfa5, 0x4371, 0xb26b, 0xb079, 0x42f6, 0xbf8f, 0xb251, 0x411a, 0x42e3, 0x21bb, 0xba73, 0xb2c3, 0x3374, 0x0cd7, 0x4128, 0x1ca9, 0x40fd, 0xae9f, 0x40fc, 0x1df9, 0x44a8, 0x1d1d, 0x4061, 0xb08f, 0x40f0, 0x4375, 0xb244, 0x45f3, 0x404a, 0x406e, 0xbf5f, 0x4146, 0x41ff, 0x4065, 0x4071, 0x4391, 0x0932, 0x42c2, 0xba62, 0x4146, 0x402b, 0x424f, 0x4263, 0xba47, 0xb0df, 0xbf79, 0x419b, 0x40d5, 0xbfa0, 0x4157, 0xb2e6, 0x42f3, 0x4216, 0x4174, 0x40b0, 0x3c8e, 0xa763, 0x0bb7, 0xba04, 0x45de, 0x4598, 0x1c37, 0xb250, 0x414b, 0xb299, 0xba17, 0xb0c3, 0xa7f5, 0x1e74, 0xbfc7, 0xb23b, 0x42ad, 0x4235, 0xb270, 0x11c2, 0x436f, 0x42ac, 0x45f4, 0x1221, 0xb26e, 0x46a4, 0xb283, 0x2610, 0xb05b, 0x098e, 0x1946, 0x439c, 0xa1ce, 0x4057, 0x16ac, 0x4357, 0xb2d1, 0x4231, 0x4300, 0xae54, 0xbf70, 0x40f3, 0xb2e8, 0xbf2d, 0x1b23, 0xba0a, 0xb0fc, 0x280d, 0x423d, 0xba50, 0xb29c, 0x416e, 0x41f3, 0x42f3, 0xb06a, 0xabca, 0x24ba, 0x1ba6, 0xb2ef, 0x41ec, 0xb22a, 0x1b17, 0xaa10, 0x41b2, 0xba10, 0x1fa7, 0x3414, 0xbacb, 0x4439, 0xbf90, 0xae5e, 0x41a1, 0xbfd4, 0xba4d, 0xb271, 0x0305, 0x422a, 0x411a, 0x4194, 0xb20e, 0xb29b, 0x41b3, 0x46a1, 0xb2c4, 0x3014, 0x40dc, 0x36e7, 0x432d, 0x09b3, 0x430c, 0xb01f, 0x12d7, 0x40aa, 0xb2d9, 0x055b, 0xbaee, 0x42d2, 0x43b4, 0x1875, 0xbf51, 0xa093, 0x226a, 0x284d, 0xb29f, 0x44a4, 0x3de8, 0x35aa, 0x465e, 0xb266, 0xb0a1, 0xb2f5, 0x437f, 0x4250, 0xa47f, 0xbfb4, 0x273b, 0x1d3e, 0x15c1, 0x1c60, 0x0830, 0x0bcd, 0x4255, 0x44db, 0xbf1b, 0x434d, 0x2582, 0xb094, 0x1fa4, 0xa542, 0x05e2, 0xb29f, 0xba52, 0xb00f, 0xb2f3, 0x4285, 0x1a85, 0x4636, 0xb09e, 0x2a91, 0xbf90, 0xb28f, 0xbf80, 0xb234, 0x18fc, 0xbf2d, 0xb07c, 0x41bf, 0x425d, 0x419e, 0x4327, 0x4026, 0x4241, 0xa452, 0x0cbc, 0x41f0, 0x46f4, 0x42d6, 0x4464, 0x1f9f, 0xba60, 0xbfe4, 0x42a5, 0x40a2, 0xb2bf, 0x405f, 0xb2f5, 0x4333, 0x43af, 0x435d, 0x191d, 0x4002, 0xbf68, 0x42a3, 0xb0ee, 0x26e9, 0xbfcc, 0x3226, 0x4342, 0x4280, 0x1715, 0x19cc, 0xb2ed, 0x4407, 0x2653, 0xbaf6, 0xb2c4, 0x43c4, 0xb2b1, 0x4131, 0x1090, 0x41e3, 0x4217, 0xbf90, 0xba7f, 0x401d, 0xb268, 0x408f, 0x4287, 0x4257, 0xbfce, 0x4185, 0x1e28, 0x4265, 0x45ec, 0x43da, 0x422e, 0x2405, 0x00ae, 0xb269, 0xb2c5, 0xbfb9, 0x3700, 0xb067, 0x41ab, 0x408c, 0x4053, 0x4023, 0xbfc6, 0x1c83, 0x4078, 0xace2, 0xbf00, 0x390d, 0x4247, 0x4343, 0x4291, 0x44e4, 0x18eb, 0x4214, 0x4044, 0xb0ae, 0xbacd, 0x4171, 0xb0b7, 0x42f1, 0x4045, 0xb277, 0x40dc, 0x19a8, 0xbf91, 0x09fd, 0xb21c, 0xba3e, 0x41a5, 0xbad5, 0x1abb, 0xbfbd, 0x3179, 0x22a8, 0x1555, 0x31a9, 0xbfe0, 0x420d, 0xbf7d, 0x428d, 0xbaea, 0x1e6b, 0x2b66, 0xb05d, 0x1ac3, 0x4176, 0x41c6, 0x41c5, 0x421b, 0xb2ec, 0x41e9, 0x2cf0, 0x4386, 0x4108, 0xbf1f, 0x4066, 0x181d, 0xb2a1, 0x43f5, 0x43a1, 0x00a7, 0x42ff, 0x1f65, 0x43aa, 0xb24d, 0x0ab5, 0x42ee, 0x2d96, 0x456b, 0xbaec, 0x3863, 0xbaf2, 0xbafd, 0x1f60, 0xb2f5, 0x4144, 0x2be1, 0xaca3, 0xb2a9, 0xbf96, 0xaed3, 0xac10, 0x404d, 0x4040, 0xbac2, 0x228d, 0x4144, 0x43d7, 0x45e5, 0x419f, 0x1d89, 0x4463, 0x311c, 0xbf4a, 0x1cd6, 0x4618, 0xb2db, 0x43fa, 0x40ae, 0xb0af, 0x32a0, 0xb2fe, 0xaef6, 0x1de3, 0x4302, 0x42a0, 0xabb6, 0x411e, 0x439b, 0x464b, 0x406f, 0x2a8b, 0x38cd, 0xbfc2, 0x422d, 0xb068, 0x4327, 0x4328, 0x4109, 0xbf4b, 0x0a21, 0x44b3, 0x4089, 0x40bd, 0x18ca, 0x4112, 0xba1f, 0x0bf6, 0x31e8, 0x41bf, 0x45c1, 0x4354, 0x2f9f, 0x0993, 0xba25, 0x4010, 0x1a4b, 0x43ab, 0xbf8e, 0xbacb, 0xa49a, 0x42f5, 0xb029, 0xbfc8, 0x4376, 0x40af, 0x464f, 0x01c2, 0x43da, 0x4251, 0x40a8, 0x422c, 0x438e, 0xbacf, 0x0b64, 0x437d, 0xa181, 0x40ca, 0x411f, 0x4677, 0x4353, 0x2f02, 0x43f2, 0x05fe, 0xb2e2, 0xb083, 0xbf3a, 0x303c, 0xb007, 0x24d0, 0xb27d, 0xb216, 0x3049, 0xba34, 0x4399, 0xb27a, 0x2f9c, 0xb006, 0x223e, 0x0844, 0x4044, 0x436a, 0xb276, 0xb2b6, 0xba1e, 0xbf52, 0x425c, 0xbaee, 0x42d5, 0x417d, 0x4187, 0xbaf2, 0x4238, 0x402b, 0x4206, 0x41cd, 0x05b2, 0x402d, 0x408b, 0x4681, 0x419d, 0xb0b5, 0xb28d, 0xbfe8, 0x27bb, 0x25c4, 0x02ee, 0x40e2, 0x435b, 0x40ad, 0x43ea, 0x1fd2, 0x4065, 0x1d5a, 0x4347, 0xb2d5, 0x436f, 0xae55, 0xba71, 0x0f2c, 0x4187, 0xbf73, 0xb20a, 0x44eb, 0xa5dd, 0x40ed, 0xba53, 0xba13, 0x4191, 0x42e5, 0x4193, 0x4168, 0x40ab, 0x4476, 0x4135, 0x41c3, 0x4145, 0x353e, 0xbfd0, 0xb220, 0xa3e1, 0x42a1, 0xb2d3, 0xb2af, 0x433d, 0x412a, 0x28d7, 0x411d, 0x42bc, 0x4155, 0xbfd5, 0xac98, 0x4353, 0x4142, 0x4435, 0x03bd, 0x402c, 0xb056, 0xb08b, 0x460f, 0xb284, 0x45e0, 0x4240, 0x265c, 0xba4a, 0xa052, 0xa53d, 0xbae5, 0xb2a0, 0xbf31, 0x413b, 0x1ecb, 0x4234, 0xb27a, 0xb204, 0xac49, 0x4387, 0xb064, 0xbf80, 0xbfd1, 0xb229, 0x4342, 0x41b5, 0x43f9, 0x43a7, 0x405e, 0x449d, 0x43c1, 0xba4e, 0x4181, 0x40a6, 0x238d, 0x4280, 0x422f, 0x401a, 0xbf70, 0x09df, 0xa4e7, 0x4040, 0x37cc, 0xbfa2, 0x300b, 0x013f, 0x423e, 0x42ab, 0x412a, 0x45b3, 0xb2f0, 0x405b, 0x12ca, 0x40a4, 0xabdf, 0x43ab, 0x4383, 0x43c4, 0xba14, 0x4105, 0xbf05, 0x14da, 0x4294, 0x4065, 0x40f4, 0xb246, 0x4179, 0x1d11, 0xb240, 0x283b, 0xb2df, 0xbf75, 0x1b5a, 0x435a, 0x05db, 0xbaf6, 0x4399, 0x4394, 0x42b3, 0x1fdc, 0x40e4, 0x41ba, 0x432e, 0x438f, 0xb2e0, 0x3f84, 0xb003, 0x137f, 0xb051, 0x419f, 0xba3e, 0xbad0, 0xb208, 0x417b, 0x431f, 0x2355, 0xb25c, 0x266c, 0x43f6, 0x4478, 0xbfa8, 0x42af, 0x4167, 0x2ef4, 0x42b2, 0x411a, 0x4151, 0xba77, 0x4391, 0x27b8, 0xba78, 0x0a0c, 0xb2d7, 0x4595, 0x41e3, 0x40dc, 0x41e5, 0x41ec, 0x1c70, 0xbfe4, 0x41bc, 0x4109, 0xb2fd, 0xb292, 0x0159, 0x240f, 0x4363, 0x4398, 0x4371, 0x1ba9, 0x4088, 0x3e3e, 0x4016, 0x4363, 0xb2c2, 0x05b5, 0xbfb0, 0xba63, 0x24f5, 0xb23c, 0xbf03, 0x4146, 0xb2a1, 0x380d, 0xb267, 0x3bde, 0x4092, 0xb274, 0x251e, 0x421c, 0x0687, 0xba79, 0x059e, 0x429b, 0x45b9, 0x0d1c, 0x45a6, 0x1185, 0x46a3, 0x0230, 0x4128, 0x1b96, 0x3e30, 0xbaca, 0x418f, 0x43d4, 0xbfda, 0xb0e8, 0xbf80, 0x3cf6, 0x4264, 0x4005, 0xa0bc, 0x3a93, 0x1777, 0x454d, 0xbad4, 0x4066, 0x414f, 0x181b, 0x1b26, 0x40d9, 0x42bd, 0xba42, 0x1930, 0x0023, 0x405b, 0xbf3b, 0xad73, 0xb278, 0x4111, 0xbadc, 0x4276, 0xaa86, 0x4310, 0x441a, 0x0ee1, 0x2eb8, 0x4379, 0x4268, 0x43ed, 0xb268, 0x187e, 0x4221, 0x2188, 0xb05a, 0x43e6, 0x43ed, 0x4148, 0xb2cf, 0x4491, 0xbf3f, 0x0b27, 0x1cc0, 0xb236, 0x1a4a, 0x43fe, 0x43c3, 0xba58, 0x4326, 0xb0d9, 0x1a6c, 0xa71b, 0x1461, 0x40cc, 0x41ba, 0x1d96, 0x42aa, 0x19d1, 0x1413, 0xba22, 0xb2a4, 0xba5b, 0x441f, 0x0936, 0x3137, 0x4491, 0xbf76, 0xb0dd, 0xa93b, 0xb0a4, 0xb09d, 0x1677, 0x1dd3, 0x40fa, 0xa6a6, 0x4054, 0x424f, 0xb008, 0x4650, 0x401f, 0xab43, 0x43a7, 0x1a59, 0x4034, 0xbacd, 0xaff8, 0xb062, 0xbfc3, 0x4081, 0xba07, 0x459e, 0x4037, 0x1f32, 0xba28, 0x43b7, 0x0c12, 0x4133, 0x1b17, 0xbf94, 0x4286, 0x4212, 0x41cd, 0x1953, 0x4049, 0xba1c, 0x43cc, 0x1c4e, 0x43ac, 0x432d, 0x4616, 0x45c3, 0x3f22, 0x0c24, 0x2bbe, 0x414e, 0xbf51, 0x41ba, 0x3fed, 0x42b0, 0xb2eb, 0x1a7a, 0x1d81, 0x43d0, 0x4358, 0x1f1a, 0x4362, 0xba60, 0x42a1, 0x40e8, 0x43f5, 0x1c51, 0x4249, 0xba7b, 0xbf27, 0x4169, 0x4296, 0xbf70, 0x4344, 0x4356, 0xbaff, 0x436f, 0x42d8, 0x0bc9, 0xba0d, 0x428e, 0x4038, 0x40f8, 0x1ba6, 0x428e, 0x417a, 0x44b1, 0xb0cc, 0x4328, 0x4187, 0x4090, 0x41d3, 0x458c, 0xba28, 0xbfba, 0x42e5, 0x459b, 0xb27c, 0x42ec, 0x2a3e, 0x408c, 0x3be5, 0x2aec, 0xbf0d, 0xb282, 0xba27, 0x43fa, 0x419b, 0x43c8, 0x1934, 0x445c, 0xbf86, 0xb0e9, 0x4240, 0x4282, 0x044a, 0xb240, 0xaa3d, 0x424a, 0x39f5, 0x0ee1, 0x41ab, 0x1a6e, 0x4324, 0x0e64, 0x41e5, 0xbf8c, 0x4170, 0x19eb, 0x3ff4, 0x4404, 0xb021, 0x435a, 0x4380, 0x46b0, 0xb2ea, 0x24d2, 0x40ed, 0x42d8, 0x40e1, 0x4245, 0x4108, 0x19c7, 0x428d, 0x422e, 0x4244, 0x260e, 0xb045, 0xb060, 0x1ab1, 0x40b1, 0xb0b9, 0x42eb, 0xbf9e, 0x1a35, 0xb24a, 0x4411, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xdb27f4a8, 0x745a69a1, 0xc76c58a7, 0xcb93d578, 0x59551d1e, 0xdd275e29, 0xa41a07ab, 0xcd4584a9, 0x8cd3e811, 0x92d54b8c, 0x7a714058, 0xd6ca1b2d, 0xbb97bd53, 0x4fb916ee, 0x00000000, 0xc00001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00034000, 0x00000000, 0x0382fe19, 0x00000000, 0x0000000e, 0x0000000e, 0xffffff0c, 0xf47d00e9, 0x1f5a553b, 0x7a714058, 0x00000000, 0x00000000, 0x605fe8c0, 0x00000000, 0x000001d0 }, + Instructions = [0x45f6, 0xa7e3, 0x4240, 0x4552, 0x19ea, 0x1ee9, 0x4223, 0xb029, 0x03fc, 0x41ff, 0x4699, 0x4543, 0x40eb, 0x1189, 0xb2eb, 0x2ed0, 0x46c5, 0x152e, 0xbf8b, 0x42ee, 0x454e, 0x2a1e, 0x3168, 0xa0a7, 0x1fa6, 0x415b, 0xb286, 0x3cff, 0x35a2, 0x405c, 0x4228, 0x40e1, 0x43e2, 0x40c6, 0x37cc, 0xbfda, 0x4320, 0xba70, 0xb067, 0x43f0, 0xb2b7, 0x4213, 0x4247, 0xb229, 0xb2f5, 0x42e7, 0x40cd, 0x1bdf, 0x43f8, 0x3887, 0xa60a, 0xba2e, 0x1b0d, 0x1e22, 0xba51, 0x437e, 0x45e4, 0x466e, 0xb017, 0x29df, 0x4057, 0x19e9, 0xb0cd, 0xbf34, 0x4466, 0x1283, 0xb0de, 0x42ff, 0x1c85, 0x4430, 0x42b0, 0xba35, 0x4274, 0x41e6, 0x4331, 0x42dd, 0x40ec, 0xbf43, 0xb23f, 0x405d, 0xba5f, 0x4563, 0x432c, 0xba0d, 0x43a2, 0x2a71, 0x439d, 0xb26e, 0x4685, 0xb086, 0xb217, 0xb264, 0x4412, 0xbff0, 0x4388, 0x18ff, 0x43c7, 0x407f, 0x4174, 0x410b, 0x4324, 0x469c, 0x410a, 0x4302, 0xbaff, 0xbfa5, 0x4371, 0xb26b, 0xb079, 0x42f6, 0xbf8f, 0xb251, 0x411a, 0x42e3, 0x21bb, 0xba73, 0xb2c3, 0x3374, 0x0cd7, 0x4128, 0x1ca9, 0x40fd, 0xae9f, 0x40fc, 0x1df9, 0x44a8, 0x1d1d, 0x4061, 0xb08f, 0x40f0, 0x4375, 0xb244, 0x45f3, 0x404a, 0x406e, 0xbf5f, 0x4146, 0x41ff, 0x4065, 0x4071, 0x4391, 0x0932, 0x42c2, 0xba62, 0x4146, 0x402b, 0x424f, 0x4263, 0xba47, 0xb0df, 0xbf79, 0x419b, 0x40d5, 0xbfa0, 0x4157, 0xb2e6, 0x42f3, 0x4216, 0x4174, 0x40b0, 0x3c8e, 0xa763, 0x0bb7, 0xba04, 0x45de, 0x4598, 0x1c37, 0xb250, 0x414b, 0xb299, 0xba17, 0xb0c3, 0xa7f5, 0x1e74, 0xbfc7, 0xb23b, 0x42ad, 0x4235, 0xb270, 0x11c2, 0x436f, 0x42ac, 0x45f4, 0x1221, 0xb26e, 0x46a4, 0xb283, 0x2610, 0xb05b, 0x098e, 0x1946, 0x439c, 0xa1ce, 0x4057, 0x16ac, 0x4357, 0xb2d1, 0x4231, 0x4300, 0xae54, 0xbf70, 0x40f3, 0xb2e8, 0xbf2d, 0x1b23, 0xba0a, 0xb0fc, 0x280d, 0x423d, 0xba50, 0xb29c, 0x416e, 0x41f3, 0x42f3, 0xb06a, 0xabca, 0x24ba, 0x1ba6, 0xb2ef, 0x41ec, 0xb22a, 0x1b17, 0xaa10, 0x41b2, 0xba10, 0x1fa7, 0x3414, 0xbacb, 0x4439, 0xbf90, 0xae5e, 0x41a1, 0xbfd4, 0xba4d, 0xb271, 0x0305, 0x422a, 0x411a, 0x4194, 0xb20e, 0xb29b, 0x41b3, 0x46a1, 0xb2c4, 0x3014, 0x40dc, 0x36e7, 0x432d, 0x09b3, 0x430c, 0xb01f, 0x12d7, 0x40aa, 0xb2d9, 0x055b, 0xbaee, 0x42d2, 0x43b4, 0x1875, 0xbf51, 0xa093, 0x226a, 0x284d, 0xb29f, 0x44a4, 0x3de8, 0x35aa, 0x465e, 0xb266, 0xb0a1, 0xb2f5, 0x437f, 0x4250, 0xa47f, 0xbfb4, 0x273b, 0x1d3e, 0x15c1, 0x1c60, 0x0830, 0x0bcd, 0x4255, 0x44db, 0xbf1b, 0x434d, 0x2582, 0xb094, 0x1fa4, 0xa542, 0x05e2, 0xb29f, 0xba52, 0xb00f, 0xb2f3, 0x4285, 0x1a85, 0x4636, 0xb09e, 0x2a91, 0xbf90, 0xb28f, 0xbf80, 0xb234, 0x18fc, 0xbf2d, 0xb07c, 0x41bf, 0x425d, 0x419e, 0x4327, 0x4026, 0x4241, 0xa452, 0x0cbc, 0x41f0, 0x46f4, 0x42d6, 0x4464, 0x1f9f, 0xba60, 0xbfe4, 0x42a5, 0x40a2, 0xb2bf, 0x405f, 0xb2f5, 0x4333, 0x43af, 0x435d, 0x191d, 0x4002, 0xbf68, 0x42a3, 0xb0ee, 0x26e9, 0xbfcc, 0x3226, 0x4342, 0x4280, 0x1715, 0x19cc, 0xb2ed, 0x4407, 0x2653, 0xbaf6, 0xb2c4, 0x43c4, 0xb2b1, 0x4131, 0x1090, 0x41e3, 0x4217, 0xbf90, 0xba7f, 0x401d, 0xb268, 0x408f, 0x4287, 0x4257, 0xbfce, 0x4185, 0x1e28, 0x4265, 0x45ec, 0x43da, 0x422e, 0x2405, 0x00ae, 0xb269, 0xb2c5, 0xbfb9, 0x3700, 0xb067, 0x41ab, 0x408c, 0x4053, 0x4023, 0xbfc6, 0x1c83, 0x4078, 0xace2, 0xbf00, 0x390d, 0x4247, 0x4343, 0x4291, 0x44e4, 0x18eb, 0x4214, 0x4044, 0xb0ae, 0xbacd, 0x4171, 0xb0b7, 0x42f1, 0x4045, 0xb277, 0x40dc, 0x19a8, 0xbf91, 0x09fd, 0xb21c, 0xba3e, 0x41a5, 0xbad5, 0x1abb, 0xbfbd, 0x3179, 0x22a8, 0x1555, 0x31a9, 0xbfe0, 0x420d, 0xbf7d, 0x428d, 0xbaea, 0x1e6b, 0x2b66, 0xb05d, 0x1ac3, 0x4176, 0x41c6, 0x41c5, 0x421b, 0xb2ec, 0x41e9, 0x2cf0, 0x4386, 0x4108, 0xbf1f, 0x4066, 0x181d, 0xb2a1, 0x43f5, 0x43a1, 0x00a7, 0x42ff, 0x1f65, 0x43aa, 0xb24d, 0x0ab5, 0x42ee, 0x2d96, 0x456b, 0xbaec, 0x3863, 0xbaf2, 0xbafd, 0x1f60, 0xb2f5, 0x4144, 0x2be1, 0xaca3, 0xb2a9, 0xbf96, 0xaed3, 0xac10, 0x404d, 0x4040, 0xbac2, 0x228d, 0x4144, 0x43d7, 0x45e5, 0x419f, 0x1d89, 0x4463, 0x311c, 0xbf4a, 0x1cd6, 0x4618, 0xb2db, 0x43fa, 0x40ae, 0xb0af, 0x32a0, 0xb2fe, 0xaef6, 0x1de3, 0x4302, 0x42a0, 0xabb6, 0x411e, 0x439b, 0x464b, 0x406f, 0x2a8b, 0x38cd, 0xbfc2, 0x422d, 0xb068, 0x4327, 0x4328, 0x4109, 0xbf4b, 0x0a21, 0x44b3, 0x4089, 0x40bd, 0x18ca, 0x4112, 0xba1f, 0x0bf6, 0x31e8, 0x41bf, 0x45c1, 0x4354, 0x2f9f, 0x0993, 0xba25, 0x4010, 0x1a4b, 0x43ab, 0xbf8e, 0xbacb, 0xa49a, 0x42f5, 0xb029, 0xbfc8, 0x4376, 0x40af, 0x464f, 0x01c2, 0x43da, 0x4251, 0x40a8, 0x422c, 0x438e, 0xbacf, 0x0b64, 0x437d, 0xa181, 0x40ca, 0x411f, 0x4677, 0x4353, 0x2f02, 0x43f2, 0x05fe, 0xb2e2, 0xb083, 0xbf3a, 0x303c, 0xb007, 0x24d0, 0xb27d, 0xb216, 0x3049, 0xba34, 0x4399, 0xb27a, 0x2f9c, 0xb006, 0x223e, 0x0844, 0x4044, 0x436a, 0xb276, 0xb2b6, 0xba1e, 0xbf52, 0x425c, 0xbaee, 0x42d5, 0x417d, 0x4187, 0xbaf2, 0x4238, 0x402b, 0x4206, 0x41cd, 0x05b2, 0x402d, 0x408b, 0x4681, 0x419d, 0xb0b5, 0xb28d, 0xbfe8, 0x27bb, 0x25c4, 0x02ee, 0x40e2, 0x435b, 0x40ad, 0x43ea, 0x1fd2, 0x4065, 0x1d5a, 0x4347, 0xb2d5, 0x436f, 0xae55, 0xba71, 0x0f2c, 0x4187, 0xbf73, 0xb20a, 0x44eb, 0xa5dd, 0x40ed, 0xba53, 0xba13, 0x4191, 0x42e5, 0x4193, 0x4168, 0x40ab, 0x4476, 0x4135, 0x41c3, 0x4145, 0x353e, 0xbfd0, 0xb220, 0xa3e1, 0x42a1, 0xb2d3, 0xb2af, 0x433d, 0x412a, 0x28d7, 0x411d, 0x42bc, 0x4155, 0xbfd5, 0xac98, 0x4353, 0x4142, 0x4435, 0x03bd, 0x402c, 0xb056, 0xb08b, 0x460f, 0xb284, 0x45e0, 0x4240, 0x265c, 0xba4a, 0xa052, 0xa53d, 0xbae5, 0xb2a0, 0xbf31, 0x413b, 0x1ecb, 0x4234, 0xb27a, 0xb204, 0xac49, 0x4387, 0xb064, 0xbf80, 0xbfd1, 0xb229, 0x4342, 0x41b5, 0x43f9, 0x43a7, 0x405e, 0x449d, 0x43c1, 0xba4e, 0x4181, 0x40a6, 0x238d, 0x4280, 0x422f, 0x401a, 0xbf70, 0x09df, 0xa4e7, 0x4040, 0x37cc, 0xbfa2, 0x300b, 0x013f, 0x423e, 0x42ab, 0x412a, 0x45b3, 0xb2f0, 0x405b, 0x12ca, 0x40a4, 0xabdf, 0x43ab, 0x4383, 0x43c4, 0xba14, 0x4105, 0xbf05, 0x14da, 0x4294, 0x4065, 0x40f4, 0xb246, 0x4179, 0x1d11, 0xb240, 0x283b, 0xb2df, 0xbf75, 0x1b5a, 0x435a, 0x05db, 0xbaf6, 0x4399, 0x4394, 0x42b3, 0x1fdc, 0x40e4, 0x41ba, 0x432e, 0x438f, 0xb2e0, 0x3f84, 0xb003, 0x137f, 0xb051, 0x419f, 0xba3e, 0xbad0, 0xb208, 0x417b, 0x431f, 0x2355, 0xb25c, 0x266c, 0x43f6, 0x4478, 0xbfa8, 0x42af, 0x4167, 0x2ef4, 0x42b2, 0x411a, 0x4151, 0xba77, 0x4391, 0x27b8, 0xba78, 0x0a0c, 0xb2d7, 0x4595, 0x41e3, 0x40dc, 0x41e5, 0x41ec, 0x1c70, 0xbfe4, 0x41bc, 0x4109, 0xb2fd, 0xb292, 0x0159, 0x240f, 0x4363, 0x4398, 0x4371, 0x1ba9, 0x4088, 0x3e3e, 0x4016, 0x4363, 0xb2c2, 0x05b5, 0xbfb0, 0xba63, 0x24f5, 0xb23c, 0xbf03, 0x4146, 0xb2a1, 0x380d, 0xb267, 0x3bde, 0x4092, 0xb274, 0x251e, 0x421c, 0x0687, 0xba79, 0x059e, 0x429b, 0x45b9, 0x0d1c, 0x45a6, 0x1185, 0x46a3, 0x0230, 0x4128, 0x1b96, 0x3e30, 0xbaca, 0x418f, 0x43d4, 0xbfda, 0xb0e8, 0xbf80, 0x3cf6, 0x4264, 0x4005, 0xa0bc, 0x3a93, 0x1777, 0x454d, 0xbad4, 0x4066, 0x414f, 0x181b, 0x1b26, 0x40d9, 0x42bd, 0xba42, 0x1930, 0x0023, 0x405b, 0xbf3b, 0xad73, 0xb278, 0x4111, 0xbadc, 0x4276, 0xaa86, 0x4310, 0x441a, 0x0ee1, 0x2eb8, 0x4379, 0x4268, 0x43ed, 0xb268, 0x187e, 0x4221, 0x2188, 0xb05a, 0x43e6, 0x43ed, 0x4148, 0xb2cf, 0x4491, 0xbf3f, 0x0b27, 0x1cc0, 0xb236, 0x1a4a, 0x43fe, 0x43c3, 0xba58, 0x4326, 0xb0d9, 0x1a6c, 0xa71b, 0x1461, 0x40cc, 0x41ba, 0x1d96, 0x42aa, 0x19d1, 0x1413, 0xba22, 0xb2a4, 0xba5b, 0x441f, 0x0936, 0x3137, 0x4491, 0xbf76, 0xb0dd, 0xa93b, 0xb0a4, 0xb09d, 0x1677, 0x1dd3, 0x40fa, 0xa6a6, 0x4054, 0x424f, 0xb008, 0x4650, 0x401f, 0xab43, 0x43a7, 0x1a59, 0x4034, 0xbacd, 0xaff8, 0xb062, 0xbfc3, 0x4081, 0xba07, 0x459e, 0x4037, 0x1f32, 0xba28, 0x43b7, 0x0c12, 0x4133, 0x1b17, 0xbf94, 0x4286, 0x4212, 0x41cd, 0x1953, 0x4049, 0xba1c, 0x43cc, 0x1c4e, 0x43ac, 0x432d, 0x4616, 0x45c3, 0x3f22, 0x0c24, 0x2bbe, 0x414e, 0xbf51, 0x41ba, 0x3fed, 0x42b0, 0xb2eb, 0x1a7a, 0x1d81, 0x43d0, 0x4358, 0x1f1a, 0x4362, 0xba60, 0x42a1, 0x40e8, 0x43f5, 0x1c51, 0x4249, 0xba7b, 0xbf27, 0x4169, 0x4296, 0xbf70, 0x4344, 0x4356, 0xbaff, 0x436f, 0x42d8, 0x0bc9, 0xba0d, 0x428e, 0x4038, 0x40f8, 0x1ba6, 0x428e, 0x417a, 0x44b1, 0xb0cc, 0x4328, 0x4187, 0x4090, 0x41d3, 0x458c, 0xba28, 0xbfba, 0x42e5, 0x459b, 0xb27c, 0x42ec, 0x2a3e, 0x408c, 0x3be5, 0x2aec, 0xbf0d, 0xb282, 0xba27, 0x43fa, 0x419b, 0x43c8, 0x1934, 0x445c, 0xbf86, 0xb0e9, 0x4240, 0x4282, 0x044a, 0xb240, 0xaa3d, 0x424a, 0x39f5, 0x0ee1, 0x41ab, 0x1a6e, 0x4324, 0x0e64, 0x41e5, 0xbf8c, 0x4170, 0x19eb, 0x3ff4, 0x4404, 0xb021, 0x435a, 0x4380, 0x46b0, 0xb2ea, 0x24d2, 0x40ed, 0x42d8, 0x40e1, 0x4245, 0x4108, 0x19c7, 0x428d, 0x422e, 0x4244, 0x260e, 0xb045, 0xb060, 0x1ab1, 0x40b1, 0xb0b9, 0x42eb, 0xbf9e, 0x1a35, 0xb24a, 0x4411, 0x4770, 0xe7fe + ], + StartRegs = [0xdb27f4a8, 0x745a69a1, 0xc76c58a7, 0xcb93d578, 0x59551d1e, 0xdd275e29, 0xa41a07ab, 0xcd4584a9, 0x8cd3e811, 0x92d54b8c, 0x7a714058, 0xd6ca1b2d, 0xbb97bd53, 0x4fb916ee, 0x00000000, 0xc00001f0 + ], + FinalRegs = [0x00000000, 0x00034000, 0x00000000, 0x0382fe19, 0x00000000, 0x0000000e, 0x0000000e, 0xffffff0c, 0xf47d00e9, 0x1f5a553b, 0x7a714058, 0x00000000, 0x00000000, 0x605fe8c0, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x4283, 0xa90f, 0x4210, 0x1dab, 0x4172, 0x40c4, 0x40b1, 0x44d5, 0x2a9b, 0xba65, 0x4002, 0x1842, 0x308f, 0xb226, 0x42c5, 0x425c, 0x40fd, 0xb279, 0xba34, 0x4284, 0xbf60, 0x3d5d, 0x420c, 0x401a, 0x0e39, 0xbf79, 0x4395, 0x1ccb, 0x41ae, 0x1ddc, 0x4062, 0x44db, 0x2e06, 0x4389, 0x1d42, 0x1c39, 0x4347, 0xb298, 0xb007, 0x43a7, 0xb22a, 0xba22, 0xb22c, 0xba54, 0x4304, 0xa8d3, 0x42a8, 0x2c0a, 0x40a3, 0x2b03, 0x1b34, 0xb2ef, 0x06d3, 0xbf3a, 0x1d56, 0x1ef0, 0x0fa3, 0xb2a8, 0x1939, 0xbff0, 0x422c, 0x019c, 0x1f8e, 0x42cb, 0xbae4, 0x17be, 0x404e, 0xb2d3, 0x1fa5, 0xb209, 0x42ae, 0x2bb5, 0x424e, 0xb273, 0x4202, 0xba33, 0xb2af, 0x1d35, 0x1a2f, 0x1cf0, 0xb266, 0x2255, 0xbf3f, 0xac6b, 0x42f7, 0xb092, 0x1263, 0x46a9, 0x4099, 0x105a, 0x18b5, 0x34aa, 0x1b91, 0x4129, 0x1449, 0x4096, 0xb27a, 0x437a, 0x40f5, 0xb27d, 0x1628, 0xb242, 0x42da, 0x404b, 0xbfbb, 0xb077, 0x4297, 0x0570, 0x4152, 0x2525, 0x1be3, 0xbfe0, 0x4633, 0x12e2, 0x4547, 0xba67, 0x06a6, 0x40c9, 0x371b, 0xbfb0, 0x4201, 0x0101, 0xba0d, 0xbfd9, 0x4192, 0x2123, 0x4117, 0x428e, 0x4084, 0xba04, 0x417c, 0x4390, 0x41e5, 0x41ad, 0x462e, 0x46da, 0x4268, 0x40b4, 0xb279, 0xa5df, 0xb26a, 0xbf4d, 0x356c, 0x09bf, 0xb06e, 0xb292, 0xb2f2, 0x1897, 0x0d15, 0xb261, 0xb29b, 0x40e6, 0x3e3a, 0x46ba, 0x3342, 0x1d7b, 0x401c, 0xb0ce, 0x177f, 0x430d, 0x0189, 0x43ba, 0x4309, 0xb20f, 0xb228, 0xac9c, 0x086d, 0x13e5, 0xbf61, 0x1fc8, 0x41b5, 0x2273, 0x40ab, 0x4334, 0x43fd, 0xbf6d, 0x4304, 0x4286, 0x4372, 0xb213, 0x4426, 0x02e4, 0x40da, 0xb2bd, 0x441a, 0xbf79, 0x40c6, 0x1e05, 0x1b15, 0x420d, 0x4248, 0xbf60, 0xb093, 0x39aa, 0x40c8, 0x085d, 0x37e8, 0x400a, 0x15dc, 0x218d, 0xb223, 0x1910, 0xb248, 0xb00d, 0x4168, 0x44c2, 0x418d, 0xb0e5, 0xb0b2, 0x33e7, 0xa4e7, 0x43e3, 0x0066, 0x165b, 0x4231, 0xbfa7, 0x2e38, 0xb249, 0x431a, 0x4089, 0xba16, 0xa64d, 0x4181, 0xbfd0, 0x3a3f, 0xb258, 0x44cd, 0xaa78, 0x41d7, 0xa0cb, 0x4279, 0x4061, 0x41de, 0xb2bc, 0x4125, 0xae63, 0x41bc, 0x418f, 0xba71, 0xa347, 0xbf4f, 0x4666, 0xb204, 0x4202, 0x42db, 0xb006, 0xbf7b, 0x0978, 0x1c50, 0x1bc7, 0x1818, 0x053b, 0xbfb5, 0xa485, 0x4134, 0x27f9, 0x2199, 0xae03, 0x4126, 0x46e5, 0x1a12, 0x1ee6, 0xb22d, 0x2692, 0x4361, 0x411d, 0x4064, 0x4091, 0x3d71, 0x3936, 0xb2a0, 0x34de, 0xbfdf, 0x4552, 0x1bb7, 0x1a4a, 0x1264, 0x40d4, 0x1d83, 0x4227, 0xbfe0, 0x0a4d, 0x429b, 0x3aa5, 0x4055, 0x43f3, 0x1c83, 0xbf5a, 0x4567, 0x43f6, 0xa01f, 0x1cdc, 0x40bd, 0x41c3, 0x4223, 0x3fea, 0x422b, 0x3d0a, 0x18f7, 0x432d, 0x1e00, 0xbf04, 0xaf5d, 0x1b42, 0xb0e2, 0x46e4, 0xbf09, 0x463a, 0x4355, 0xb0dd, 0x44d2, 0xb24c, 0xba2b, 0xa14c, 0xbfc0, 0xb2b7, 0xba12, 0x43f1, 0xb294, 0x41b6, 0xb247, 0x0688, 0x43e8, 0x42c7, 0x4155, 0x43c4, 0x44fd, 0xa8d2, 0x19a7, 0xb2d5, 0xb035, 0xb2a8, 0x43fd, 0x455d, 0x4314, 0x1f85, 0xbf2c, 0x4287, 0x4154, 0x4204, 0xbf06, 0x4201, 0x408b, 0x40f5, 0x43f3, 0x43b4, 0x4329, 0x42ab, 0x45d0, 0xb093, 0x434c, 0x0f4f, 0x1d8c, 0x402f, 0xba58, 0x444c, 0xb294, 0x41b1, 0x42a7, 0x4177, 0xbfc7, 0x4560, 0xba10, 0xb28a, 0x41f7, 0x40c1, 0xb21b, 0x4068, 0xacc3, 0x41b5, 0x0829, 0x42eb, 0x408f, 0x46f9, 0x1c2f, 0xa7ff, 0xb27e, 0xb2a2, 0x194b, 0x4182, 0x3acc, 0x1527, 0x4143, 0x40f4, 0x3a3c, 0xb2ea, 0x44b5, 0x4076, 0xbf69, 0x34c1, 0x43ce, 0xb299, 0x18d5, 0xbfa0, 0xb24d, 0xbf15, 0x427e, 0xb003, 0x4289, 0xba4b, 0x356d, 0xb2a7, 0xa497, 0xba5a, 0x405e, 0xb249, 0xb2a7, 0x4176, 0x426b, 0xb204, 0xaea9, 0x4110, 0x2479, 0x3502, 0x46ca, 0xbfbc, 0x4321, 0x41f4, 0x4170, 0xba41, 0x1d2c, 0xba4a, 0x11a4, 0x009a, 0x28c5, 0x43d3, 0xbfcf, 0x4034, 0xabeb, 0xaac6, 0xa608, 0x4056, 0x338f, 0x0394, 0xb02f, 0x4274, 0xa5c6, 0x1be8, 0x40fc, 0x4029, 0xb2b5, 0x0227, 0x090b, 0xbacc, 0x1116, 0x2c45, 0x08ee, 0x14fa, 0xbf82, 0x405a, 0x423f, 0xba2a, 0x4052, 0x4200, 0xa671, 0x0efd, 0x42de, 0x1e89, 0xb049, 0xb264, 0x3e26, 0x41d5, 0x4445, 0x32af, 0xb0e8, 0xbafb, 0xb0f7, 0x4093, 0xb034, 0xb2e8, 0x2e69, 0xb259, 0x2479, 0x439d, 0xb2de, 0x1b5b, 0xbf8c, 0x437b, 0xbad1, 0x217d, 0x4093, 0xb2e6, 0x1972, 0xb2e5, 0x1d51, 0x4210, 0x4310, 0xb20c, 0xad06, 0x1879, 0x40b7, 0x4077, 0xbfbd, 0x1fa9, 0xb00b, 0x40bf, 0xbaf2, 0xa690, 0x4298, 0xa00d, 0x2c47, 0x1e51, 0x41c2, 0x42dc, 0xbf6e, 0xb0c0, 0x2ddd, 0x43b9, 0xba69, 0xa0f1, 0x1c40, 0xbfe0, 0xba04, 0x4263, 0xba26, 0xa397, 0x1731, 0x0de3, 0x40bc, 0xa1e7, 0x411c, 0x4005, 0x417a, 0xb043, 0x43d3, 0x42a1, 0x4053, 0x42e8, 0xb0eb, 0xbf16, 0x1c21, 0x4442, 0xbf80, 0x4164, 0x401e, 0x41e5, 0x18d4, 0xb241, 0x45ed, 0x4037, 0xba05, 0x415a, 0xbf25, 0xa2a9, 0x0e62, 0x26af, 0x182b, 0x4134, 0xa7ee, 0x4212, 0x42bd, 0x4243, 0x402a, 0x4182, 0xbf2e, 0x16a0, 0xb213, 0x42b4, 0xb2fe, 0xb20f, 0xb23c, 0x0bb8, 0x43da, 0x4265, 0x42cb, 0xb02a, 0xb226, 0x43db, 0x421e, 0x41e7, 0x1f20, 0x22ca, 0x41d9, 0x1e79, 0xb00b, 0x41cf, 0x401b, 0x3174, 0xb0f4, 0x404a, 0xbf03, 0x4674, 0xb243, 0x43cb, 0x431a, 0x43cd, 0xb0af, 0x0481, 0xaca0, 0x419a, 0x3433, 0x43dc, 0x4197, 0x3d98, 0x19f0, 0x21f1, 0x42d2, 0xba2f, 0xa60c, 0x4337, 0x4102, 0x2851, 0xba4b, 0x44db, 0x4432, 0x422c, 0x4339, 0x4002, 0x1e4d, 0xbf7d, 0x434f, 0xb20d, 0xb00e, 0x3545, 0x41a7, 0x40bb, 0x03ab, 0xba58, 0x2faa, 0x45eb, 0x0643, 0x4098, 0xb2ff, 0xb038, 0xa185, 0x3d65, 0x062b, 0xb010, 0xb20e, 0x1fab, 0x417d, 0x46bc, 0x080c, 0x1913, 0x4146, 0xbfd3, 0x42af, 0x064d, 0xbaeb, 0xba5c, 0x2be1, 0xbf90, 0x404a, 0x0e2c, 0xba56, 0x434e, 0x4320, 0x4180, 0x4658, 0x42d3, 0x4281, 0x1986, 0x424a, 0x4281, 0xb28f, 0x42db, 0xbf6b, 0x41da, 0x42d3, 0xbaed, 0x43de, 0x1d8d, 0x04df, 0x1e09, 0x421f, 0xb21a, 0xb2eb, 0x41cf, 0xbff0, 0x44bb, 0x1ce0, 0x185f, 0x2ceb, 0x42a9, 0x1d0f, 0x4000, 0x1c0c, 0x4127, 0xba21, 0xbac3, 0x3822, 0x15bb, 0x3d53, 0xbf47, 0xb064, 0xb075, 0xb258, 0xba4e, 0x4314, 0x466c, 0x41d2, 0x1a9c, 0xb056, 0x413e, 0x4089, 0xb0d0, 0x40c2, 0x4202, 0x421f, 0x1ca7, 0xb2bc, 0x3348, 0xb280, 0xbf6a, 0xb0ae, 0x016e, 0xb0a7, 0x4672, 0x4147, 0x3098, 0xa236, 0xb00f, 0xbf1a, 0x4330, 0x42ec, 0xbf00, 0xba37, 0xb2b5, 0x4182, 0x4075, 0xb038, 0x413e, 0xba59, 0x45eb, 0xba2b, 0xbaf7, 0x44b1, 0x1dd1, 0x417b, 0x1a2c, 0x40d5, 0x438a, 0xb03a, 0x1d73, 0xb21e, 0xb25d, 0xb27f, 0xbf1e, 0x430a, 0xb0ec, 0x4159, 0x2733, 0x4247, 0x424a, 0xbf4a, 0xb263, 0x1b5f, 0x40ae, 0xb2fe, 0xbf76, 0x407d, 0xb28a, 0x1f72, 0x1e7c, 0x463c, 0x42c2, 0x40e7, 0x4166, 0x4380, 0x1603, 0x1b69, 0xb212, 0x1739, 0x4377, 0x3103, 0xbf49, 0x40ac, 0x278e, 0xb07d, 0x45c1, 0x1ef5, 0xbff0, 0xb2a0, 0x4379, 0x1956, 0xb233, 0xb26d, 0xbfdf, 0x463b, 0x4096, 0xaeb4, 0x17d4, 0x4663, 0xba6b, 0x4640, 0x3004, 0x404c, 0x46aa, 0xbaed, 0x3318, 0x44e5, 0x1d45, 0x1c9c, 0x1883, 0x425e, 0x0c46, 0xba40, 0xa97f, 0xbff0, 0x0b6c, 0x425e, 0x4207, 0x420c, 0x4257, 0xbf86, 0xabef, 0x40d0, 0x4050, 0x43bf, 0x38f6, 0xb240, 0x3692, 0xbf9c, 0x4288, 0x0c04, 0x41a9, 0xac55, 0xb0b2, 0x414c, 0x1b78, 0xb003, 0x3531, 0xb280, 0x0064, 0x4437, 0x1c72, 0x1f4c, 0xbf1c, 0x435e, 0x40fd, 0x3a0e, 0xbfa0, 0xba1b, 0x4060, 0xba2e, 0x3a97, 0xbaf7, 0x39bd, 0x4264, 0x4472, 0x4328, 0xbf49, 0x1acf, 0x42f6, 0x42b4, 0xb294, 0xb272, 0xb090, 0x4654, 0x4017, 0x467f, 0x468a, 0xace4, 0x44ed, 0x4557, 0x466a, 0x1257, 0x4153, 0xb05e, 0x4121, 0x41b0, 0x4393, 0x410b, 0xbaf3, 0x4556, 0x4242, 0x1f43, 0xbf1d, 0x42c3, 0xb240, 0x4038, 0x404b, 0x43e7, 0xb0fa, 0x420a, 0xbf9d, 0x4323, 0xb0a3, 0x4340, 0x42e9, 0x0052, 0x1cc4, 0x4305, 0x020b, 0xb09d, 0x411d, 0x2c14, 0xb0ee, 0x416c, 0x38f9, 0x4357, 0xb2b9, 0xb21f, 0x4152, 0xbfa4, 0xa537, 0x1f40, 0x0f0b, 0xa47e, 0x4040, 0xbade, 0x401b, 0xb006, 0x0394, 0x2d32, 0xbfba, 0x438b, 0x42b3, 0xb2b0, 0xa573, 0x02fc, 0x1ac5, 0x28b6, 0x43c8, 0x2d0f, 0x3b61, 0x423d, 0x262f, 0x411e, 0x43c5, 0x435d, 0x03e2, 0xae57, 0x1b6e, 0x4238, 0x4110, 0xbf31, 0x2052, 0x38bb, 0x454c, 0x2b69, 0x4009, 0x0ac4, 0x0dad, 0x41f9, 0x1f6e, 0x414d, 0x30e6, 0xb2ea, 0xbfa0, 0x0fbf, 0x42e4, 0xbfe0, 0x400e, 0x061f, 0x00c8, 0xba25, 0x427c, 0x38db, 0xbf5a, 0x44bd, 0x42c9, 0x417e, 0x032e, 0x4205, 0x2143, 0xaf50, 0xbfb2, 0x36cb, 0xb2f9, 0x402c, 0x427a, 0x4350, 0x4315, 0xb0a9, 0x402c, 0x0802, 0x3632, 0x4495, 0x4179, 0x1c57, 0x1bd3, 0xbfd8, 0xa483, 0x3213, 0x4113, 0x4341, 0xb2de, 0xba5c, 0x4246, 0xba0f, 0x0363, 0x3661, 0x41b0, 0xb0ae, 0x4138, 0x4143, 0xba45, 0xb2aa, 0xba01, 0x1824, 0xb049, 0x0a3a, 0x4096, 0xb0ea, 0x274a, 0x43eb, 0xb274, 0xbfde, 0x1aea, 0x417b, 0x0b2f, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd2fc5a9a, 0xcbe6f391, 0xc5271121, 0x66c4d03a, 0xce34ff10, 0xe796f79c, 0x37623fb3, 0x4d059abb, 0xf938c94f, 0x8d0659ac, 0xc525e62e, 0xad6bb1ea, 0xe561afeb, 0x8226b8c9, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0xfffec5fe, 0xfec5feff, 0x00807dfa, 0x0100013a, 0x00000000, 0xfefffec5, 0x00000000, 0x0000004a, 0xf938c94f, 0x0002e84e, 0xec28f749, 0xb5aec7a8, 0x000000c3, 0x69c37868, 0x00000000, 0x000001d0 }, + Instructions = [0x4283, 0xa90f, 0x4210, 0x1dab, 0x4172, 0x40c4, 0x40b1, 0x44d5, 0x2a9b, 0xba65, 0x4002, 0x1842, 0x308f, 0xb226, 0x42c5, 0x425c, 0x40fd, 0xb279, 0xba34, 0x4284, 0xbf60, 0x3d5d, 0x420c, 0x401a, 0x0e39, 0xbf79, 0x4395, 0x1ccb, 0x41ae, 0x1ddc, 0x4062, 0x44db, 0x2e06, 0x4389, 0x1d42, 0x1c39, 0x4347, 0xb298, 0xb007, 0x43a7, 0xb22a, 0xba22, 0xb22c, 0xba54, 0x4304, 0xa8d3, 0x42a8, 0x2c0a, 0x40a3, 0x2b03, 0x1b34, 0xb2ef, 0x06d3, 0xbf3a, 0x1d56, 0x1ef0, 0x0fa3, 0xb2a8, 0x1939, 0xbff0, 0x422c, 0x019c, 0x1f8e, 0x42cb, 0xbae4, 0x17be, 0x404e, 0xb2d3, 0x1fa5, 0xb209, 0x42ae, 0x2bb5, 0x424e, 0xb273, 0x4202, 0xba33, 0xb2af, 0x1d35, 0x1a2f, 0x1cf0, 0xb266, 0x2255, 0xbf3f, 0xac6b, 0x42f7, 0xb092, 0x1263, 0x46a9, 0x4099, 0x105a, 0x18b5, 0x34aa, 0x1b91, 0x4129, 0x1449, 0x4096, 0xb27a, 0x437a, 0x40f5, 0xb27d, 0x1628, 0xb242, 0x42da, 0x404b, 0xbfbb, 0xb077, 0x4297, 0x0570, 0x4152, 0x2525, 0x1be3, 0xbfe0, 0x4633, 0x12e2, 0x4547, 0xba67, 0x06a6, 0x40c9, 0x371b, 0xbfb0, 0x4201, 0x0101, 0xba0d, 0xbfd9, 0x4192, 0x2123, 0x4117, 0x428e, 0x4084, 0xba04, 0x417c, 0x4390, 0x41e5, 0x41ad, 0x462e, 0x46da, 0x4268, 0x40b4, 0xb279, 0xa5df, 0xb26a, 0xbf4d, 0x356c, 0x09bf, 0xb06e, 0xb292, 0xb2f2, 0x1897, 0x0d15, 0xb261, 0xb29b, 0x40e6, 0x3e3a, 0x46ba, 0x3342, 0x1d7b, 0x401c, 0xb0ce, 0x177f, 0x430d, 0x0189, 0x43ba, 0x4309, 0xb20f, 0xb228, 0xac9c, 0x086d, 0x13e5, 0xbf61, 0x1fc8, 0x41b5, 0x2273, 0x40ab, 0x4334, 0x43fd, 0xbf6d, 0x4304, 0x4286, 0x4372, 0xb213, 0x4426, 0x02e4, 0x40da, 0xb2bd, 0x441a, 0xbf79, 0x40c6, 0x1e05, 0x1b15, 0x420d, 0x4248, 0xbf60, 0xb093, 0x39aa, 0x40c8, 0x085d, 0x37e8, 0x400a, 0x15dc, 0x218d, 0xb223, 0x1910, 0xb248, 0xb00d, 0x4168, 0x44c2, 0x418d, 0xb0e5, 0xb0b2, 0x33e7, 0xa4e7, 0x43e3, 0x0066, 0x165b, 0x4231, 0xbfa7, 0x2e38, 0xb249, 0x431a, 0x4089, 0xba16, 0xa64d, 0x4181, 0xbfd0, 0x3a3f, 0xb258, 0x44cd, 0xaa78, 0x41d7, 0xa0cb, 0x4279, 0x4061, 0x41de, 0xb2bc, 0x4125, 0xae63, 0x41bc, 0x418f, 0xba71, 0xa347, 0xbf4f, 0x4666, 0xb204, 0x4202, 0x42db, 0xb006, 0xbf7b, 0x0978, 0x1c50, 0x1bc7, 0x1818, 0x053b, 0xbfb5, 0xa485, 0x4134, 0x27f9, 0x2199, 0xae03, 0x4126, 0x46e5, 0x1a12, 0x1ee6, 0xb22d, 0x2692, 0x4361, 0x411d, 0x4064, 0x4091, 0x3d71, 0x3936, 0xb2a0, 0x34de, 0xbfdf, 0x4552, 0x1bb7, 0x1a4a, 0x1264, 0x40d4, 0x1d83, 0x4227, 0xbfe0, 0x0a4d, 0x429b, 0x3aa5, 0x4055, 0x43f3, 0x1c83, 0xbf5a, 0x4567, 0x43f6, 0xa01f, 0x1cdc, 0x40bd, 0x41c3, 0x4223, 0x3fea, 0x422b, 0x3d0a, 0x18f7, 0x432d, 0x1e00, 0xbf04, 0xaf5d, 0x1b42, 0xb0e2, 0x46e4, 0xbf09, 0x463a, 0x4355, 0xb0dd, 0x44d2, 0xb24c, 0xba2b, 0xa14c, 0xbfc0, 0xb2b7, 0xba12, 0x43f1, 0xb294, 0x41b6, 0xb247, 0x0688, 0x43e8, 0x42c7, 0x4155, 0x43c4, 0x44fd, 0xa8d2, 0x19a7, 0xb2d5, 0xb035, 0xb2a8, 0x43fd, 0x455d, 0x4314, 0x1f85, 0xbf2c, 0x4287, 0x4154, 0x4204, 0xbf06, 0x4201, 0x408b, 0x40f5, 0x43f3, 0x43b4, 0x4329, 0x42ab, 0x45d0, 0xb093, 0x434c, 0x0f4f, 0x1d8c, 0x402f, 0xba58, 0x444c, 0xb294, 0x41b1, 0x42a7, 0x4177, 0xbfc7, 0x4560, 0xba10, 0xb28a, 0x41f7, 0x40c1, 0xb21b, 0x4068, 0xacc3, 0x41b5, 0x0829, 0x42eb, 0x408f, 0x46f9, 0x1c2f, 0xa7ff, 0xb27e, 0xb2a2, 0x194b, 0x4182, 0x3acc, 0x1527, 0x4143, 0x40f4, 0x3a3c, 0xb2ea, 0x44b5, 0x4076, 0xbf69, 0x34c1, 0x43ce, 0xb299, 0x18d5, 0xbfa0, 0xb24d, 0xbf15, 0x427e, 0xb003, 0x4289, 0xba4b, 0x356d, 0xb2a7, 0xa497, 0xba5a, 0x405e, 0xb249, 0xb2a7, 0x4176, 0x426b, 0xb204, 0xaea9, 0x4110, 0x2479, 0x3502, 0x46ca, 0xbfbc, 0x4321, 0x41f4, 0x4170, 0xba41, 0x1d2c, 0xba4a, 0x11a4, 0x009a, 0x28c5, 0x43d3, 0xbfcf, 0x4034, 0xabeb, 0xaac6, 0xa608, 0x4056, 0x338f, 0x0394, 0xb02f, 0x4274, 0xa5c6, 0x1be8, 0x40fc, 0x4029, 0xb2b5, 0x0227, 0x090b, 0xbacc, 0x1116, 0x2c45, 0x08ee, 0x14fa, 0xbf82, 0x405a, 0x423f, 0xba2a, 0x4052, 0x4200, 0xa671, 0x0efd, 0x42de, 0x1e89, 0xb049, 0xb264, 0x3e26, 0x41d5, 0x4445, 0x32af, 0xb0e8, 0xbafb, 0xb0f7, 0x4093, 0xb034, 0xb2e8, 0x2e69, 0xb259, 0x2479, 0x439d, 0xb2de, 0x1b5b, 0xbf8c, 0x437b, 0xbad1, 0x217d, 0x4093, 0xb2e6, 0x1972, 0xb2e5, 0x1d51, 0x4210, 0x4310, 0xb20c, 0xad06, 0x1879, 0x40b7, 0x4077, 0xbfbd, 0x1fa9, 0xb00b, 0x40bf, 0xbaf2, 0xa690, 0x4298, 0xa00d, 0x2c47, 0x1e51, 0x41c2, 0x42dc, 0xbf6e, 0xb0c0, 0x2ddd, 0x43b9, 0xba69, 0xa0f1, 0x1c40, 0xbfe0, 0xba04, 0x4263, 0xba26, 0xa397, 0x1731, 0x0de3, 0x40bc, 0xa1e7, 0x411c, 0x4005, 0x417a, 0xb043, 0x43d3, 0x42a1, 0x4053, 0x42e8, 0xb0eb, 0xbf16, 0x1c21, 0x4442, 0xbf80, 0x4164, 0x401e, 0x41e5, 0x18d4, 0xb241, 0x45ed, 0x4037, 0xba05, 0x415a, 0xbf25, 0xa2a9, 0x0e62, 0x26af, 0x182b, 0x4134, 0xa7ee, 0x4212, 0x42bd, 0x4243, 0x402a, 0x4182, 0xbf2e, 0x16a0, 0xb213, 0x42b4, 0xb2fe, 0xb20f, 0xb23c, 0x0bb8, 0x43da, 0x4265, 0x42cb, 0xb02a, 0xb226, 0x43db, 0x421e, 0x41e7, 0x1f20, 0x22ca, 0x41d9, 0x1e79, 0xb00b, 0x41cf, 0x401b, 0x3174, 0xb0f4, 0x404a, 0xbf03, 0x4674, 0xb243, 0x43cb, 0x431a, 0x43cd, 0xb0af, 0x0481, 0xaca0, 0x419a, 0x3433, 0x43dc, 0x4197, 0x3d98, 0x19f0, 0x21f1, 0x42d2, 0xba2f, 0xa60c, 0x4337, 0x4102, 0x2851, 0xba4b, 0x44db, 0x4432, 0x422c, 0x4339, 0x4002, 0x1e4d, 0xbf7d, 0x434f, 0xb20d, 0xb00e, 0x3545, 0x41a7, 0x40bb, 0x03ab, 0xba58, 0x2faa, 0x45eb, 0x0643, 0x4098, 0xb2ff, 0xb038, 0xa185, 0x3d65, 0x062b, 0xb010, 0xb20e, 0x1fab, 0x417d, 0x46bc, 0x080c, 0x1913, 0x4146, 0xbfd3, 0x42af, 0x064d, 0xbaeb, 0xba5c, 0x2be1, 0xbf90, 0x404a, 0x0e2c, 0xba56, 0x434e, 0x4320, 0x4180, 0x4658, 0x42d3, 0x4281, 0x1986, 0x424a, 0x4281, 0xb28f, 0x42db, 0xbf6b, 0x41da, 0x42d3, 0xbaed, 0x43de, 0x1d8d, 0x04df, 0x1e09, 0x421f, 0xb21a, 0xb2eb, 0x41cf, 0xbff0, 0x44bb, 0x1ce0, 0x185f, 0x2ceb, 0x42a9, 0x1d0f, 0x4000, 0x1c0c, 0x4127, 0xba21, 0xbac3, 0x3822, 0x15bb, 0x3d53, 0xbf47, 0xb064, 0xb075, 0xb258, 0xba4e, 0x4314, 0x466c, 0x41d2, 0x1a9c, 0xb056, 0x413e, 0x4089, 0xb0d0, 0x40c2, 0x4202, 0x421f, 0x1ca7, 0xb2bc, 0x3348, 0xb280, 0xbf6a, 0xb0ae, 0x016e, 0xb0a7, 0x4672, 0x4147, 0x3098, 0xa236, 0xb00f, 0xbf1a, 0x4330, 0x42ec, 0xbf00, 0xba37, 0xb2b5, 0x4182, 0x4075, 0xb038, 0x413e, 0xba59, 0x45eb, 0xba2b, 0xbaf7, 0x44b1, 0x1dd1, 0x417b, 0x1a2c, 0x40d5, 0x438a, 0xb03a, 0x1d73, 0xb21e, 0xb25d, 0xb27f, 0xbf1e, 0x430a, 0xb0ec, 0x4159, 0x2733, 0x4247, 0x424a, 0xbf4a, 0xb263, 0x1b5f, 0x40ae, 0xb2fe, 0xbf76, 0x407d, 0xb28a, 0x1f72, 0x1e7c, 0x463c, 0x42c2, 0x40e7, 0x4166, 0x4380, 0x1603, 0x1b69, 0xb212, 0x1739, 0x4377, 0x3103, 0xbf49, 0x40ac, 0x278e, 0xb07d, 0x45c1, 0x1ef5, 0xbff0, 0xb2a0, 0x4379, 0x1956, 0xb233, 0xb26d, 0xbfdf, 0x463b, 0x4096, 0xaeb4, 0x17d4, 0x4663, 0xba6b, 0x4640, 0x3004, 0x404c, 0x46aa, 0xbaed, 0x3318, 0x44e5, 0x1d45, 0x1c9c, 0x1883, 0x425e, 0x0c46, 0xba40, 0xa97f, 0xbff0, 0x0b6c, 0x425e, 0x4207, 0x420c, 0x4257, 0xbf86, 0xabef, 0x40d0, 0x4050, 0x43bf, 0x38f6, 0xb240, 0x3692, 0xbf9c, 0x4288, 0x0c04, 0x41a9, 0xac55, 0xb0b2, 0x414c, 0x1b78, 0xb003, 0x3531, 0xb280, 0x0064, 0x4437, 0x1c72, 0x1f4c, 0xbf1c, 0x435e, 0x40fd, 0x3a0e, 0xbfa0, 0xba1b, 0x4060, 0xba2e, 0x3a97, 0xbaf7, 0x39bd, 0x4264, 0x4472, 0x4328, 0xbf49, 0x1acf, 0x42f6, 0x42b4, 0xb294, 0xb272, 0xb090, 0x4654, 0x4017, 0x467f, 0x468a, 0xace4, 0x44ed, 0x4557, 0x466a, 0x1257, 0x4153, 0xb05e, 0x4121, 0x41b0, 0x4393, 0x410b, 0xbaf3, 0x4556, 0x4242, 0x1f43, 0xbf1d, 0x42c3, 0xb240, 0x4038, 0x404b, 0x43e7, 0xb0fa, 0x420a, 0xbf9d, 0x4323, 0xb0a3, 0x4340, 0x42e9, 0x0052, 0x1cc4, 0x4305, 0x020b, 0xb09d, 0x411d, 0x2c14, 0xb0ee, 0x416c, 0x38f9, 0x4357, 0xb2b9, 0xb21f, 0x4152, 0xbfa4, 0xa537, 0x1f40, 0x0f0b, 0xa47e, 0x4040, 0xbade, 0x401b, 0xb006, 0x0394, 0x2d32, 0xbfba, 0x438b, 0x42b3, 0xb2b0, 0xa573, 0x02fc, 0x1ac5, 0x28b6, 0x43c8, 0x2d0f, 0x3b61, 0x423d, 0x262f, 0x411e, 0x43c5, 0x435d, 0x03e2, 0xae57, 0x1b6e, 0x4238, 0x4110, 0xbf31, 0x2052, 0x38bb, 0x454c, 0x2b69, 0x4009, 0x0ac4, 0x0dad, 0x41f9, 0x1f6e, 0x414d, 0x30e6, 0xb2ea, 0xbfa0, 0x0fbf, 0x42e4, 0xbfe0, 0x400e, 0x061f, 0x00c8, 0xba25, 0x427c, 0x38db, 0xbf5a, 0x44bd, 0x42c9, 0x417e, 0x032e, 0x4205, 0x2143, 0xaf50, 0xbfb2, 0x36cb, 0xb2f9, 0x402c, 0x427a, 0x4350, 0x4315, 0xb0a9, 0x402c, 0x0802, 0x3632, 0x4495, 0x4179, 0x1c57, 0x1bd3, 0xbfd8, 0xa483, 0x3213, 0x4113, 0x4341, 0xb2de, 0xba5c, 0x4246, 0xba0f, 0x0363, 0x3661, 0x41b0, 0xb0ae, 0x4138, 0x4143, 0xba45, 0xb2aa, 0xba01, 0x1824, 0xb049, 0x0a3a, 0x4096, 0xb0ea, 0x274a, 0x43eb, 0xb274, 0xbfde, 0x1aea, 0x417b, 0x0b2f, 0x4770, 0xe7fe + ], + StartRegs = [0xd2fc5a9a, 0xcbe6f391, 0xc5271121, 0x66c4d03a, 0xce34ff10, 0xe796f79c, 0x37623fb3, 0x4d059abb, 0xf938c94f, 0x8d0659ac, 0xc525e62e, 0xad6bb1ea, 0xe561afeb, 0x8226b8c9, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0xfffec5fe, 0xfec5feff, 0x00807dfa, 0x0100013a, 0x00000000, 0xfefffec5, 0x00000000, 0x0000004a, 0xf938c94f, 0x0002e84e, 0xec28f749, 0xb5aec7a8, 0x000000c3, 0x69c37868, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x1d4f, 0xbfc5, 0xb068, 0x40ba, 0x3da9, 0xaeb3, 0x40b6, 0xa066, 0x13be, 0x4028, 0x4049, 0xba69, 0x4602, 0xbfaf, 0x21d5, 0x1879, 0xa68c, 0xa2f5, 0x41f6, 0x0953, 0xbfd0, 0x2aeb, 0x1d85, 0x3904, 0x38c6, 0xb07e, 0x4079, 0x04e6, 0x1634, 0xbf3c, 0x40cd, 0x4237, 0x41ca, 0xbf72, 0x41ee, 0x1cc9, 0xac16, 0x435a, 0xa938, 0x1f53, 0x3c3e, 0xbf9b, 0xb0b9, 0xb0fa, 0x2372, 0x031a, 0xb011, 0xa5c9, 0x2022, 0xb062, 0x40d8, 0xb223, 0x2f62, 0x46a8, 0xb0f8, 0x4201, 0x4398, 0x19ce, 0x404a, 0xa2b4, 0x2542, 0x41c1, 0xbfc1, 0x42af, 0xb065, 0x20ad, 0x1db5, 0x405a, 0x4008, 0x42bd, 0x0eb3, 0x19c3, 0x414f, 0x4288, 0xb2fe, 0x423d, 0x41ff, 0x4285, 0x4249, 0x42a4, 0xbfe2, 0x4226, 0x1c2a, 0x1323, 0xaf72, 0xb008, 0x42a1, 0x14d3, 0x12cd, 0x4655, 0xb2b7, 0xadf9, 0xba1c, 0x40b0, 0xb21d, 0x4045, 0x1ba6, 0x41d3, 0x41ee, 0xbf6a, 0x416b, 0x3ed9, 0x424d, 0xb238, 0x420e, 0xb22f, 0x4013, 0x3404, 0x41bc, 0x08d8, 0xba7f, 0x407c, 0x1924, 0x424b, 0xb2cc, 0xb232, 0x0896, 0x2a78, 0x43b1, 0x437c, 0xa967, 0x4546, 0xbf8f, 0x4039, 0xa773, 0x40f6, 0xb236, 0xb2e8, 0x43fa, 0x1b34, 0x420e, 0xa787, 0x43a8, 0x2f7a, 0x40b1, 0x46d1, 0x1c90, 0x41ad, 0x4200, 0xba78, 0xbf9f, 0x406d, 0x23c7, 0x0b7f, 0xb2ed, 0x3622, 0x1dd2, 0x425a, 0x43bc, 0xb0ea, 0x4544, 0xa6be, 0x460e, 0x1722, 0x42e9, 0x273e, 0x4366, 0x4691, 0xa936, 0x41a2, 0xbf2e, 0x3231, 0x42a6, 0x43da, 0x2f37, 0x1d1a, 0xb26c, 0xbaff, 0x404c, 0x4132, 0x4076, 0x43fc, 0xb218, 0xba40, 0x4337, 0x385b, 0xb265, 0xb018, 0x462a, 0xba63, 0x41e6, 0xbf59, 0x4289, 0x1fa7, 0x40d7, 0xba59, 0xba5a, 0x0422, 0x07af, 0x428d, 0xb211, 0x4355, 0x431d, 0xbf51, 0x39c4, 0x1ee0, 0x0119, 0x414d, 0xa186, 0x1809, 0x42b4, 0x4065, 0xb2db, 0x43e6, 0xb26c, 0x45b6, 0x1be2, 0xb2ac, 0x42a9, 0x4067, 0xaf6c, 0xb2df, 0xbf1b, 0x4299, 0xb015, 0xb064, 0x44c9, 0x43f8, 0x2914, 0x1c11, 0x2d02, 0x1ebc, 0x43bb, 0x400e, 0x1cb3, 0x4246, 0xb00a, 0xb003, 0xbfb0, 0x1909, 0x3166, 0x30fd, 0xb25f, 0x1c45, 0x1e5e, 0xba68, 0xbf5a, 0x43a4, 0x1a5e, 0x4080, 0x050c, 0xbfc0, 0x14c5, 0x41c0, 0x438e, 0x416e, 0xba10, 0x1a22, 0xb0c6, 0x3aaf, 0x43a3, 0x0345, 0xbf72, 0xb248, 0x44c3, 0x42a4, 0xba19, 0x1e6b, 0x4475, 0x4347, 0xb29a, 0xb285, 0xb2dc, 0x40e7, 0x18bd, 0x4022, 0xb26f, 0xb01e, 0x4329, 0x4592, 0xa298, 0x433b, 0x2c82, 0x413d, 0xbf6e, 0x4554, 0x418b, 0xb0ab, 0x1a76, 0x4015, 0x4050, 0x4613, 0x42a6, 0x435b, 0x467c, 0x0354, 0x3662, 0x093c, 0xb2a8, 0xb2f2, 0x42db, 0x41ff, 0x4030, 0x420c, 0xb063, 0x4580, 0xbf1f, 0x07e2, 0x408b, 0xb0af, 0xb096, 0xba7c, 0xb273, 0x4336, 0x4628, 0x2ede, 0x4249, 0x41fa, 0x3d4c, 0x43b4, 0x40b6, 0x4132, 0xb2c7, 0x138e, 0x2c2a, 0xafa8, 0xb284, 0x1fcc, 0xbad1, 0xba35, 0x40d2, 0xae8d, 0x40b7, 0xb0ef, 0xb245, 0xbf88, 0x1aa3, 0x36d9, 0x4217, 0x0d64, 0x4247, 0xb07b, 0x4093, 0x4398, 0xbf95, 0xbaeb, 0x41db, 0x009d, 0x2ac3, 0xb298, 0x3a13, 0x4361, 0x072c, 0x01ba, 0x1b20, 0x1bc5, 0x404b, 0x0f91, 0x4129, 0xb01a, 0x0794, 0x4001, 0x406a, 0x273d, 0x40a3, 0x4021, 0x441a, 0x418d, 0x4161, 0xbf2f, 0x40d9, 0xbfe0, 0x0fdc, 0x1ae0, 0x37ff, 0x42ed, 0xb0a6, 0x2e0f, 0xa6c5, 0xb0ba, 0x19cc, 0xb21f, 0x220f, 0xb2d3, 0x1dbf, 0x433e, 0x44f4, 0x36f5, 0x422f, 0x1a45, 0x052c, 0x40fd, 0x4285, 0x4294, 0xbae3, 0xba73, 0x42e7, 0xbfab, 0x40f3, 0xba5f, 0x168e, 0x405c, 0x4200, 0x4267, 0xba7d, 0x42ca, 0xb294, 0x42a6, 0x43b9, 0xb2d1, 0x40b4, 0xa04c, 0x18b5, 0x4627, 0x3b0d, 0x4292, 0x460c, 0x4133, 0xb2c5, 0x40f7, 0x42cd, 0xbf21, 0x1c7e, 0x2cb5, 0x2027, 0x4689, 0xb20f, 0xbfd4, 0x1f88, 0xa0aa, 0x1a08, 0xa41d, 0xb2dc, 0x1cae, 0x423e, 0x40e5, 0x43ea, 0x182c, 0xbadd, 0x4349, 0x41b3, 0x1a46, 0x4545, 0xbff0, 0x19b3, 0x3943, 0x0759, 0x36e9, 0x42ff, 0x27f6, 0x0bda, 0x22f4, 0xbf9e, 0x405a, 0x2a35, 0xb2bf, 0x432c, 0x0307, 0xab18, 0x4128, 0x4350, 0x1eae, 0xac20, 0x411d, 0xb2bc, 0x39f4, 0x43b9, 0x4065, 0x1f99, 0x1fc1, 0x4245, 0xa9e3, 0x456e, 0x41ae, 0x4251, 0x4292, 0x4277, 0xbf3a, 0xba5e, 0xb205, 0xb27b, 0x40ca, 0xb233, 0xb037, 0x411f, 0x2fdc, 0xba7a, 0xb0d7, 0x42fa, 0x2a0d, 0x29bf, 0x46ad, 0xb062, 0xa1f5, 0x1f2f, 0x434b, 0x41f3, 0x2f98, 0xbf72, 0x41c9, 0x40da, 0xa73f, 0x4388, 0x42bf, 0xb201, 0x342d, 0x41d8, 0xb2e2, 0xb2a8, 0x2e8d, 0x4096, 0xb280, 0xba42, 0x40fd, 0x418e, 0x4616, 0x1902, 0x4162, 0x1a4b, 0xbfbc, 0xb22c, 0x4108, 0x432f, 0x46bb, 0x46c9, 0xba32, 0x1a44, 0xae82, 0x45c4, 0xba4d, 0x12e4, 0x4273, 0xbaf9, 0xbfd0, 0x43ab, 0x193e, 0x46e9, 0xb09f, 0x116a, 0x4062, 0xbf4b, 0x3063, 0x4186, 0x4022, 0x4413, 0x1e60, 0x4221, 0xb067, 0x42cc, 0x43b5, 0xbaec, 0x2f0a, 0xba21, 0x40f1, 0xb021, 0x42c5, 0x41b5, 0x4408, 0x019a, 0x1bce, 0x4445, 0xbade, 0x3ba5, 0x1b4c, 0x3db9, 0x407c, 0xba29, 0x438a, 0x28d3, 0xbf36, 0x464d, 0x426d, 0x3ef8, 0xb2d1, 0x41b4, 0x1b02, 0xb2b2, 0x18f4, 0x436a, 0x1c88, 0x3013, 0xb2e5, 0xb0fb, 0xb20a, 0x1f07, 0xaaf3, 0xb09b, 0x4150, 0xbf44, 0x425f, 0xb26c, 0xba7d, 0xbfda, 0x1a16, 0x2eb2, 0x4127, 0x4358, 0xbf25, 0x1e43, 0xb26e, 0x46b5, 0xb2f1, 0xb20f, 0x4190, 0xba77, 0xb2d0, 0xb256, 0x192d, 0x1c18, 0x0155, 0x4019, 0xbaf7, 0x424e, 0xba74, 0xb28c, 0xba1e, 0x1a15, 0xb084, 0x3be4, 0xbf44, 0x4244, 0xba70, 0x4109, 0x0237, 0xb2fb, 0x43fb, 0x4113, 0xbae0, 0xa7a3, 0x4552, 0x422f, 0xb291, 0xb263, 0xbfd4, 0xb22b, 0x2765, 0xbaf4, 0xb049, 0x1a38, 0x405e, 0x1b6f, 0xb25e, 0xba65, 0x0639, 0x4581, 0xbaca, 0x41a7, 0x1c50, 0x4030, 0x4272, 0x435e, 0xbf43, 0x4225, 0x180c, 0x42f2, 0x416f, 0x429f, 0xbad2, 0x40bd, 0x448d, 0x417e, 0xb220, 0x10d2, 0xbf06, 0x4068, 0x3614, 0x1307, 0x432a, 0x46d0, 0x4233, 0x41c4, 0x46f3, 0x1c04, 0x40a0, 0xaa36, 0xbaf7, 0xb2e8, 0x425c, 0x42ba, 0x3767, 0xb20e, 0x400b, 0xb087, 0x1886, 0x2c3e, 0x2840, 0xb06a, 0xbf05, 0x43a1, 0xb250, 0x4543, 0x412c, 0x22a1, 0x41c1, 0x4133, 0x1976, 0x404f, 0x425a, 0xaad6, 0x41ed, 0x40a4, 0x4333, 0x4278, 0xb04c, 0x41c5, 0x42c3, 0x336a, 0x4004, 0x411b, 0xb24b, 0x4399, 0x43b7, 0x4098, 0x4180, 0xbf7b, 0x41d0, 0x423c, 0x4301, 0x416c, 0x432b, 0xb2a3, 0xb2a2, 0xb0d9, 0x42df, 0x1237, 0x43d1, 0x437d, 0x41fd, 0x4352, 0xba00, 0xbf6b, 0x1c45, 0x0c59, 0x21e6, 0x1d8a, 0x1a4b, 0x43cf, 0x098f, 0x2f7b, 0x4307, 0xba68, 0x4093, 0xb2cf, 0x4106, 0x19a1, 0x0fd2, 0xbac5, 0x1a26, 0x43da, 0x4279, 0x40dd, 0xbf01, 0xb0b5, 0x41e6, 0x3dc6, 0x406f, 0xb258, 0x19fe, 0x40e1, 0xba16, 0x4267, 0x4093, 0xb2e8, 0x42c0, 0xb282, 0x4083, 0xb269, 0x40f8, 0x3805, 0xbfc3, 0x437a, 0x425d, 0xb0f4, 0x2503, 0x4074, 0xb021, 0xbfaa, 0x42f4, 0x413d, 0x42c7, 0x0bf2, 0xb06c, 0x1949, 0x40e4, 0x40b4, 0x1a5d, 0xbf13, 0xb2a1, 0x230b, 0xb0e9, 0xb294, 0x46b8, 0x2508, 0xb09d, 0xb24f, 0xb0d1, 0xad5e, 0xbfb2, 0x4037, 0xba4b, 0x1f76, 0x1ed9, 0x412a, 0xbf90, 0x4694, 0xb0aa, 0x39bf, 0x4070, 0x4492, 0x0b7e, 0xa95a, 0xb08c, 0x0ebd, 0x4381, 0xa285, 0x3e4b, 0xbf07, 0x4159, 0xae4d, 0x4269, 0xb277, 0x46d3, 0x29f9, 0x45be, 0x4362, 0x1925, 0xba2a, 0x4573, 0x0196, 0xb2ea, 0x434c, 0xb26d, 0xbae2, 0x1e42, 0x411c, 0x416e, 0x4259, 0xb28b, 0xbfe2, 0xbac6, 0x437e, 0x076e, 0x41ba, 0x407a, 0x45f1, 0x4205, 0xb289, 0x1840, 0x4027, 0x4190, 0x408f, 0xb23c, 0x419a, 0x001e, 0xb0b6, 0x4081, 0xba25, 0xa216, 0xb2ff, 0x405c, 0x18ad, 0x426a, 0x4179, 0xb21a, 0xbf8a, 0x4312, 0x44d3, 0xba1d, 0x42a8, 0x283f, 0x4169, 0x13bc, 0xb00d, 0xaac5, 0x403a, 0x439d, 0xaaca, 0x4369, 0x1c07, 0x4256, 0x434e, 0xb054, 0x1634, 0xbfdf, 0x1ab7, 0x3f94, 0x1b06, 0x42f4, 0x407e, 0x058b, 0x409a, 0xba4b, 0x180e, 0xaf82, 0x43f8, 0x161d, 0x44e0, 0xbf14, 0x4215, 0x1acc, 0x401a, 0x402e, 0x41e4, 0x4678, 0x1d6b, 0x1d43, 0x427b, 0x015f, 0xaf31, 0x41de, 0x0fa6, 0xbf45, 0xb2c8, 0x417c, 0x438b, 0x45be, 0x4334, 0xba6f, 0x429a, 0xbf00, 0xb2ad, 0x4342, 0x4154, 0xbf26, 0xb2ad, 0x4347, 0x16db, 0x4423, 0x40ac, 0x4384, 0xb270, 0xb005, 0x42b8, 0x4305, 0xba31, 0x1d89, 0x2ca0, 0xb21f, 0xba55, 0xba38, 0xb26a, 0x30c9, 0xb20e, 0xb224, 0x4069, 0x431a, 0x43fa, 0xa8e2, 0x41a8, 0x40f1, 0x4253, 0x1eae, 0xbf0b, 0x405d, 0x3e93, 0x43ec, 0x45a3, 0xb267, 0x1c8a, 0x19fc, 0x417c, 0xb214, 0x4350, 0x4083, 0x2458, 0x42cc, 0x40f4, 0x40f0, 0x31dd, 0x43b0, 0xb2bf, 0x419f, 0xb2bb, 0x41f0, 0xbfbd, 0x42bd, 0x1c0f, 0xb06e, 0x4085, 0x43ea, 0xb2c7, 0xb0c4, 0x428a, 0x4294, 0xb2ea, 0x44d1, 0x4374, 0x4361, 0x41bf, 0xa12e, 0x02fa, 0xbac8, 0xbf15, 0x4004, 0x3b3a, 0x05be, 0x41c9, 0x40ab, 0xbadf, 0x3b7c, 0xb075, 0x2c0e, 0x02fb, 0x18b4, 0x19f6, 0x43eb, 0xb254, 0x431d, 0x40e1, 0x40f1, 0x0f2a, 0x4248, 0xbf95, 0xa360, 0x4095, 0x1a15, 0x4387, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x14152dbc, 0xac42cb3d, 0x80d39deb, 0xf842bf41, 0xc80af0cb, 0xb2924a15, 0xe20c7a41, 0xd0c9f409, 0xfd5e5b81, 0x4d1dced7, 0x6694566b, 0x954b09bd, 0x823d8b85, 0xd32e765b, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0xffffe7a0, 0x00001860, 0x0000000f, 0x00001958, 0x00000000, 0x0000186f, 0xffc00000, 0x00000000, 0x00000000, 0x669456ff, 0x6694566b, 0xcd28acd6, 0x00000000, 0x000060e9, 0x00000000, 0x800001d0 }, + Instructions = [0x1d4f, 0xbfc5, 0xb068, 0x40ba, 0x3da9, 0xaeb3, 0x40b6, 0xa066, 0x13be, 0x4028, 0x4049, 0xba69, 0x4602, 0xbfaf, 0x21d5, 0x1879, 0xa68c, 0xa2f5, 0x41f6, 0x0953, 0xbfd0, 0x2aeb, 0x1d85, 0x3904, 0x38c6, 0xb07e, 0x4079, 0x04e6, 0x1634, 0xbf3c, 0x40cd, 0x4237, 0x41ca, 0xbf72, 0x41ee, 0x1cc9, 0xac16, 0x435a, 0xa938, 0x1f53, 0x3c3e, 0xbf9b, 0xb0b9, 0xb0fa, 0x2372, 0x031a, 0xb011, 0xa5c9, 0x2022, 0xb062, 0x40d8, 0xb223, 0x2f62, 0x46a8, 0xb0f8, 0x4201, 0x4398, 0x19ce, 0x404a, 0xa2b4, 0x2542, 0x41c1, 0xbfc1, 0x42af, 0xb065, 0x20ad, 0x1db5, 0x405a, 0x4008, 0x42bd, 0x0eb3, 0x19c3, 0x414f, 0x4288, 0xb2fe, 0x423d, 0x41ff, 0x4285, 0x4249, 0x42a4, 0xbfe2, 0x4226, 0x1c2a, 0x1323, 0xaf72, 0xb008, 0x42a1, 0x14d3, 0x12cd, 0x4655, 0xb2b7, 0xadf9, 0xba1c, 0x40b0, 0xb21d, 0x4045, 0x1ba6, 0x41d3, 0x41ee, 0xbf6a, 0x416b, 0x3ed9, 0x424d, 0xb238, 0x420e, 0xb22f, 0x4013, 0x3404, 0x41bc, 0x08d8, 0xba7f, 0x407c, 0x1924, 0x424b, 0xb2cc, 0xb232, 0x0896, 0x2a78, 0x43b1, 0x437c, 0xa967, 0x4546, 0xbf8f, 0x4039, 0xa773, 0x40f6, 0xb236, 0xb2e8, 0x43fa, 0x1b34, 0x420e, 0xa787, 0x43a8, 0x2f7a, 0x40b1, 0x46d1, 0x1c90, 0x41ad, 0x4200, 0xba78, 0xbf9f, 0x406d, 0x23c7, 0x0b7f, 0xb2ed, 0x3622, 0x1dd2, 0x425a, 0x43bc, 0xb0ea, 0x4544, 0xa6be, 0x460e, 0x1722, 0x42e9, 0x273e, 0x4366, 0x4691, 0xa936, 0x41a2, 0xbf2e, 0x3231, 0x42a6, 0x43da, 0x2f37, 0x1d1a, 0xb26c, 0xbaff, 0x404c, 0x4132, 0x4076, 0x43fc, 0xb218, 0xba40, 0x4337, 0x385b, 0xb265, 0xb018, 0x462a, 0xba63, 0x41e6, 0xbf59, 0x4289, 0x1fa7, 0x40d7, 0xba59, 0xba5a, 0x0422, 0x07af, 0x428d, 0xb211, 0x4355, 0x431d, 0xbf51, 0x39c4, 0x1ee0, 0x0119, 0x414d, 0xa186, 0x1809, 0x42b4, 0x4065, 0xb2db, 0x43e6, 0xb26c, 0x45b6, 0x1be2, 0xb2ac, 0x42a9, 0x4067, 0xaf6c, 0xb2df, 0xbf1b, 0x4299, 0xb015, 0xb064, 0x44c9, 0x43f8, 0x2914, 0x1c11, 0x2d02, 0x1ebc, 0x43bb, 0x400e, 0x1cb3, 0x4246, 0xb00a, 0xb003, 0xbfb0, 0x1909, 0x3166, 0x30fd, 0xb25f, 0x1c45, 0x1e5e, 0xba68, 0xbf5a, 0x43a4, 0x1a5e, 0x4080, 0x050c, 0xbfc0, 0x14c5, 0x41c0, 0x438e, 0x416e, 0xba10, 0x1a22, 0xb0c6, 0x3aaf, 0x43a3, 0x0345, 0xbf72, 0xb248, 0x44c3, 0x42a4, 0xba19, 0x1e6b, 0x4475, 0x4347, 0xb29a, 0xb285, 0xb2dc, 0x40e7, 0x18bd, 0x4022, 0xb26f, 0xb01e, 0x4329, 0x4592, 0xa298, 0x433b, 0x2c82, 0x413d, 0xbf6e, 0x4554, 0x418b, 0xb0ab, 0x1a76, 0x4015, 0x4050, 0x4613, 0x42a6, 0x435b, 0x467c, 0x0354, 0x3662, 0x093c, 0xb2a8, 0xb2f2, 0x42db, 0x41ff, 0x4030, 0x420c, 0xb063, 0x4580, 0xbf1f, 0x07e2, 0x408b, 0xb0af, 0xb096, 0xba7c, 0xb273, 0x4336, 0x4628, 0x2ede, 0x4249, 0x41fa, 0x3d4c, 0x43b4, 0x40b6, 0x4132, 0xb2c7, 0x138e, 0x2c2a, 0xafa8, 0xb284, 0x1fcc, 0xbad1, 0xba35, 0x40d2, 0xae8d, 0x40b7, 0xb0ef, 0xb245, 0xbf88, 0x1aa3, 0x36d9, 0x4217, 0x0d64, 0x4247, 0xb07b, 0x4093, 0x4398, 0xbf95, 0xbaeb, 0x41db, 0x009d, 0x2ac3, 0xb298, 0x3a13, 0x4361, 0x072c, 0x01ba, 0x1b20, 0x1bc5, 0x404b, 0x0f91, 0x4129, 0xb01a, 0x0794, 0x4001, 0x406a, 0x273d, 0x40a3, 0x4021, 0x441a, 0x418d, 0x4161, 0xbf2f, 0x40d9, 0xbfe0, 0x0fdc, 0x1ae0, 0x37ff, 0x42ed, 0xb0a6, 0x2e0f, 0xa6c5, 0xb0ba, 0x19cc, 0xb21f, 0x220f, 0xb2d3, 0x1dbf, 0x433e, 0x44f4, 0x36f5, 0x422f, 0x1a45, 0x052c, 0x40fd, 0x4285, 0x4294, 0xbae3, 0xba73, 0x42e7, 0xbfab, 0x40f3, 0xba5f, 0x168e, 0x405c, 0x4200, 0x4267, 0xba7d, 0x42ca, 0xb294, 0x42a6, 0x43b9, 0xb2d1, 0x40b4, 0xa04c, 0x18b5, 0x4627, 0x3b0d, 0x4292, 0x460c, 0x4133, 0xb2c5, 0x40f7, 0x42cd, 0xbf21, 0x1c7e, 0x2cb5, 0x2027, 0x4689, 0xb20f, 0xbfd4, 0x1f88, 0xa0aa, 0x1a08, 0xa41d, 0xb2dc, 0x1cae, 0x423e, 0x40e5, 0x43ea, 0x182c, 0xbadd, 0x4349, 0x41b3, 0x1a46, 0x4545, 0xbff0, 0x19b3, 0x3943, 0x0759, 0x36e9, 0x42ff, 0x27f6, 0x0bda, 0x22f4, 0xbf9e, 0x405a, 0x2a35, 0xb2bf, 0x432c, 0x0307, 0xab18, 0x4128, 0x4350, 0x1eae, 0xac20, 0x411d, 0xb2bc, 0x39f4, 0x43b9, 0x4065, 0x1f99, 0x1fc1, 0x4245, 0xa9e3, 0x456e, 0x41ae, 0x4251, 0x4292, 0x4277, 0xbf3a, 0xba5e, 0xb205, 0xb27b, 0x40ca, 0xb233, 0xb037, 0x411f, 0x2fdc, 0xba7a, 0xb0d7, 0x42fa, 0x2a0d, 0x29bf, 0x46ad, 0xb062, 0xa1f5, 0x1f2f, 0x434b, 0x41f3, 0x2f98, 0xbf72, 0x41c9, 0x40da, 0xa73f, 0x4388, 0x42bf, 0xb201, 0x342d, 0x41d8, 0xb2e2, 0xb2a8, 0x2e8d, 0x4096, 0xb280, 0xba42, 0x40fd, 0x418e, 0x4616, 0x1902, 0x4162, 0x1a4b, 0xbfbc, 0xb22c, 0x4108, 0x432f, 0x46bb, 0x46c9, 0xba32, 0x1a44, 0xae82, 0x45c4, 0xba4d, 0x12e4, 0x4273, 0xbaf9, 0xbfd0, 0x43ab, 0x193e, 0x46e9, 0xb09f, 0x116a, 0x4062, 0xbf4b, 0x3063, 0x4186, 0x4022, 0x4413, 0x1e60, 0x4221, 0xb067, 0x42cc, 0x43b5, 0xbaec, 0x2f0a, 0xba21, 0x40f1, 0xb021, 0x42c5, 0x41b5, 0x4408, 0x019a, 0x1bce, 0x4445, 0xbade, 0x3ba5, 0x1b4c, 0x3db9, 0x407c, 0xba29, 0x438a, 0x28d3, 0xbf36, 0x464d, 0x426d, 0x3ef8, 0xb2d1, 0x41b4, 0x1b02, 0xb2b2, 0x18f4, 0x436a, 0x1c88, 0x3013, 0xb2e5, 0xb0fb, 0xb20a, 0x1f07, 0xaaf3, 0xb09b, 0x4150, 0xbf44, 0x425f, 0xb26c, 0xba7d, 0xbfda, 0x1a16, 0x2eb2, 0x4127, 0x4358, 0xbf25, 0x1e43, 0xb26e, 0x46b5, 0xb2f1, 0xb20f, 0x4190, 0xba77, 0xb2d0, 0xb256, 0x192d, 0x1c18, 0x0155, 0x4019, 0xbaf7, 0x424e, 0xba74, 0xb28c, 0xba1e, 0x1a15, 0xb084, 0x3be4, 0xbf44, 0x4244, 0xba70, 0x4109, 0x0237, 0xb2fb, 0x43fb, 0x4113, 0xbae0, 0xa7a3, 0x4552, 0x422f, 0xb291, 0xb263, 0xbfd4, 0xb22b, 0x2765, 0xbaf4, 0xb049, 0x1a38, 0x405e, 0x1b6f, 0xb25e, 0xba65, 0x0639, 0x4581, 0xbaca, 0x41a7, 0x1c50, 0x4030, 0x4272, 0x435e, 0xbf43, 0x4225, 0x180c, 0x42f2, 0x416f, 0x429f, 0xbad2, 0x40bd, 0x448d, 0x417e, 0xb220, 0x10d2, 0xbf06, 0x4068, 0x3614, 0x1307, 0x432a, 0x46d0, 0x4233, 0x41c4, 0x46f3, 0x1c04, 0x40a0, 0xaa36, 0xbaf7, 0xb2e8, 0x425c, 0x42ba, 0x3767, 0xb20e, 0x400b, 0xb087, 0x1886, 0x2c3e, 0x2840, 0xb06a, 0xbf05, 0x43a1, 0xb250, 0x4543, 0x412c, 0x22a1, 0x41c1, 0x4133, 0x1976, 0x404f, 0x425a, 0xaad6, 0x41ed, 0x40a4, 0x4333, 0x4278, 0xb04c, 0x41c5, 0x42c3, 0x336a, 0x4004, 0x411b, 0xb24b, 0x4399, 0x43b7, 0x4098, 0x4180, 0xbf7b, 0x41d0, 0x423c, 0x4301, 0x416c, 0x432b, 0xb2a3, 0xb2a2, 0xb0d9, 0x42df, 0x1237, 0x43d1, 0x437d, 0x41fd, 0x4352, 0xba00, 0xbf6b, 0x1c45, 0x0c59, 0x21e6, 0x1d8a, 0x1a4b, 0x43cf, 0x098f, 0x2f7b, 0x4307, 0xba68, 0x4093, 0xb2cf, 0x4106, 0x19a1, 0x0fd2, 0xbac5, 0x1a26, 0x43da, 0x4279, 0x40dd, 0xbf01, 0xb0b5, 0x41e6, 0x3dc6, 0x406f, 0xb258, 0x19fe, 0x40e1, 0xba16, 0x4267, 0x4093, 0xb2e8, 0x42c0, 0xb282, 0x4083, 0xb269, 0x40f8, 0x3805, 0xbfc3, 0x437a, 0x425d, 0xb0f4, 0x2503, 0x4074, 0xb021, 0xbfaa, 0x42f4, 0x413d, 0x42c7, 0x0bf2, 0xb06c, 0x1949, 0x40e4, 0x40b4, 0x1a5d, 0xbf13, 0xb2a1, 0x230b, 0xb0e9, 0xb294, 0x46b8, 0x2508, 0xb09d, 0xb24f, 0xb0d1, 0xad5e, 0xbfb2, 0x4037, 0xba4b, 0x1f76, 0x1ed9, 0x412a, 0xbf90, 0x4694, 0xb0aa, 0x39bf, 0x4070, 0x4492, 0x0b7e, 0xa95a, 0xb08c, 0x0ebd, 0x4381, 0xa285, 0x3e4b, 0xbf07, 0x4159, 0xae4d, 0x4269, 0xb277, 0x46d3, 0x29f9, 0x45be, 0x4362, 0x1925, 0xba2a, 0x4573, 0x0196, 0xb2ea, 0x434c, 0xb26d, 0xbae2, 0x1e42, 0x411c, 0x416e, 0x4259, 0xb28b, 0xbfe2, 0xbac6, 0x437e, 0x076e, 0x41ba, 0x407a, 0x45f1, 0x4205, 0xb289, 0x1840, 0x4027, 0x4190, 0x408f, 0xb23c, 0x419a, 0x001e, 0xb0b6, 0x4081, 0xba25, 0xa216, 0xb2ff, 0x405c, 0x18ad, 0x426a, 0x4179, 0xb21a, 0xbf8a, 0x4312, 0x44d3, 0xba1d, 0x42a8, 0x283f, 0x4169, 0x13bc, 0xb00d, 0xaac5, 0x403a, 0x439d, 0xaaca, 0x4369, 0x1c07, 0x4256, 0x434e, 0xb054, 0x1634, 0xbfdf, 0x1ab7, 0x3f94, 0x1b06, 0x42f4, 0x407e, 0x058b, 0x409a, 0xba4b, 0x180e, 0xaf82, 0x43f8, 0x161d, 0x44e0, 0xbf14, 0x4215, 0x1acc, 0x401a, 0x402e, 0x41e4, 0x4678, 0x1d6b, 0x1d43, 0x427b, 0x015f, 0xaf31, 0x41de, 0x0fa6, 0xbf45, 0xb2c8, 0x417c, 0x438b, 0x45be, 0x4334, 0xba6f, 0x429a, 0xbf00, 0xb2ad, 0x4342, 0x4154, 0xbf26, 0xb2ad, 0x4347, 0x16db, 0x4423, 0x40ac, 0x4384, 0xb270, 0xb005, 0x42b8, 0x4305, 0xba31, 0x1d89, 0x2ca0, 0xb21f, 0xba55, 0xba38, 0xb26a, 0x30c9, 0xb20e, 0xb224, 0x4069, 0x431a, 0x43fa, 0xa8e2, 0x41a8, 0x40f1, 0x4253, 0x1eae, 0xbf0b, 0x405d, 0x3e93, 0x43ec, 0x45a3, 0xb267, 0x1c8a, 0x19fc, 0x417c, 0xb214, 0x4350, 0x4083, 0x2458, 0x42cc, 0x40f4, 0x40f0, 0x31dd, 0x43b0, 0xb2bf, 0x419f, 0xb2bb, 0x41f0, 0xbfbd, 0x42bd, 0x1c0f, 0xb06e, 0x4085, 0x43ea, 0xb2c7, 0xb0c4, 0x428a, 0x4294, 0xb2ea, 0x44d1, 0x4374, 0x4361, 0x41bf, 0xa12e, 0x02fa, 0xbac8, 0xbf15, 0x4004, 0x3b3a, 0x05be, 0x41c9, 0x40ab, 0xbadf, 0x3b7c, 0xb075, 0x2c0e, 0x02fb, 0x18b4, 0x19f6, 0x43eb, 0xb254, 0x431d, 0x40e1, 0x40f1, 0x0f2a, 0x4248, 0xbf95, 0xa360, 0x4095, 0x1a15, 0x4387, 0x4770, 0xe7fe + ], + StartRegs = [0x14152dbc, 0xac42cb3d, 0x80d39deb, 0xf842bf41, 0xc80af0cb, 0xb2924a15, 0xe20c7a41, 0xd0c9f409, 0xfd5e5b81, 0x4d1dced7, 0x6694566b, 0x954b09bd, 0x823d8b85, 0xd32e765b, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0xffffe7a0, 0x00001860, 0x0000000f, 0x00001958, 0x00000000, 0x0000186f, 0xffc00000, 0x00000000, 0x00000000, 0x669456ff, 0x6694566b, 0xcd28acd6, 0x00000000, 0x000060e9, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x4379, 0x2480, 0x4389, 0x4462, 0xb2b1, 0xb229, 0x4064, 0xb2ce, 0xbf8a, 0xb233, 0x4052, 0xbafd, 0x40a1, 0x047d, 0xb2a8, 0xbac2, 0x43fc, 0x41d7, 0xb0c2, 0xba50, 0x41ac, 0x24ec, 0x1cde, 0x4678, 0xb0e8, 0x46f0, 0x438c, 0x4034, 0x3f2b, 0xa9c5, 0xa5d8, 0x1472, 0xbfc6, 0xb2f0, 0x223e, 0x0dc1, 0x408e, 0x4220, 0x417f, 0xa4bb, 0x4347, 0xa2fa, 0xbf8a, 0x1a45, 0x0d2e, 0xb2ed, 0xbaf2, 0x41cf, 0x437f, 0xb077, 0xb271, 0xb256, 0x4138, 0x0a13, 0x439d, 0x275a, 0xb0ad, 0x4094, 0x4133, 0xbfbc, 0xb0d7, 0x290e, 0x43ec, 0x41df, 0x259f, 0x402a, 0x42c6, 0x4148, 0xa7d3, 0x2e2c, 0xb2c3, 0xb223, 0x439b, 0x4209, 0x1e5b, 0xb213, 0x421f, 0x0902, 0xb2b4, 0xba54, 0x4340, 0x1988, 0xbfcb, 0x43b0, 0xba07, 0x436e, 0x41b2, 0xb0ff, 0x43f6, 0x42a5, 0x29d5, 0x4325, 0x22f7, 0x403b, 0x4363, 0x1a03, 0x08bc, 0x1a8e, 0x458a, 0x1328, 0xba5c, 0x315f, 0x40af, 0xbadc, 0x1b66, 0x1bfa, 0x1a5d, 0xb06a, 0x3d85, 0xb077, 0x434c, 0x40c6, 0xbf59, 0x40ec, 0x40a9, 0x4491, 0x4274, 0xba68, 0x1b59, 0x2148, 0xba32, 0x288d, 0x41ba, 0x2e3b, 0x4561, 0xbf5a, 0x42e1, 0x445d, 0x4181, 0x1f97, 0x436c, 0xb005, 0xba1d, 0xab7e, 0x38a1, 0x3f8a, 0x4139, 0x463c, 0xb047, 0xbafd, 0x43c1, 0x40a5, 0x429c, 0xba1c, 0xad94, 0x420a, 0xb275, 0xba3e, 0x447c, 0x1b00, 0xba5e, 0xb282, 0xbf78, 0xb226, 0xb293, 0x1e34, 0x1cf0, 0xae4a, 0xbfa7, 0x40d6, 0xba23, 0x46a0, 0x2172, 0x44eb, 0xbf2f, 0x4095, 0x42cb, 0x2e23, 0x312c, 0xb2e8, 0x1a06, 0x431b, 0xb2b4, 0x42ae, 0x424d, 0xb2ec, 0x1bbd, 0x45f2, 0x137e, 0x204b, 0x18e0, 0x40be, 0xb2c0, 0x25a8, 0x4319, 0xb277, 0x2318, 0x4181, 0xb29e, 0x43a4, 0x1b2b, 0xa73b, 0xbfc7, 0x074b, 0x2a98, 0xb07d, 0xba4b, 0xb256, 0x4088, 0xa8c4, 0xa053, 0x4448, 0x41ca, 0x42f1, 0xb239, 0xbf2d, 0x40a8, 0x3a69, 0x2ffe, 0x3bec, 0x23ee, 0x43f1, 0x2309, 0x43c7, 0x431c, 0x42a9, 0xb29d, 0x41dc, 0x39ff, 0x412f, 0xb2c0, 0xba55, 0xa7bf, 0x41cc, 0xbad7, 0x4104, 0x018a, 0xb2bf, 0x43c6, 0x4170, 0xb28f, 0x41f2, 0x409b, 0x4372, 0xb007, 0xbf2e, 0x01f0, 0xba38, 0x409d, 0xb0ad, 0x4363, 0xb042, 0x2a86, 0x4140, 0x415f, 0xbfb8, 0x41e5, 0x28f2, 0x4035, 0x42ce, 0xb0ae, 0x43d6, 0x4357, 0x44a9, 0x40a8, 0x4117, 0x433b, 0x4213, 0x3385, 0x09e7, 0xbf80, 0xb063, 0xaa00, 0xb013, 0xbf90, 0x409a, 0x4007, 0xbf04, 0x4060, 0x4377, 0xb0f3, 0xb0ab, 0x4279, 0x1a56, 0xba2b, 0x1931, 0x434c, 0xb090, 0x0500, 0x1b0f, 0x1a85, 0x4681, 0x3e3a, 0x43ce, 0xb2fa, 0x430b, 0x4043, 0xbfb0, 0x3a7d, 0xbf76, 0xb009, 0xbace, 0xbf70, 0x403a, 0x438c, 0x41fd, 0x433c, 0x4202, 0x2d3d, 0x4277, 0x428e, 0x4156, 0xb2d2, 0xbf68, 0x3ab5, 0x409c, 0x1f03, 0x1d6d, 0x42f8, 0x0aaf, 0x2d64, 0x2022, 0xbf12, 0x137d, 0xba6f, 0x45a2, 0xa7a7, 0x40f5, 0x45d3, 0xb2e4, 0x3f2e, 0xba5e, 0x1df2, 0xafc9, 0x42be, 0x4683, 0x4001, 0xba00, 0xb2ae, 0xba1c, 0x089d, 0xb052, 0x1bb8, 0x198b, 0x2162, 0x1f49, 0x3d1b, 0x46fa, 0xbf68, 0x4018, 0xa1e0, 0x40fa, 0x1bdd, 0xbf7c, 0x1a6b, 0x435a, 0xb240, 0x434e, 0x2af4, 0x438b, 0x40f3, 0x4049, 0x43df, 0xb231, 0x0e09, 0x434a, 0x1a40, 0x4079, 0x34eb, 0x41b5, 0x4033, 0x431b, 0x28b1, 0x4575, 0xb022, 0x4221, 0x41b5, 0xbf05, 0x1e57, 0x41d7, 0xb26b, 0x40e3, 0x18d7, 0x40c4, 0x4204, 0xb249, 0x1c5a, 0xbfa4, 0x4063, 0x36b9, 0x4414, 0x42ca, 0x1c8b, 0x42d0, 0x458c, 0xb04f, 0xbf79, 0x4369, 0x1d45, 0x383b, 0x41af, 0x132e, 0x1a3c, 0x0552, 0x467b, 0xba03, 0xb09d, 0xb0ed, 0x43a8, 0x2abd, 0x181a, 0x43c3, 0xb2f9, 0xaa2e, 0x38d6, 0xba77, 0x427b, 0x41f9, 0xbf21, 0x42e7, 0xb282, 0x4224, 0xb2e2, 0x1fab, 0x40f1, 0xbfd0, 0xbf84, 0x01fc, 0x42d2, 0x4379, 0xb000, 0x4246, 0xbfbd, 0xba44, 0x42ec, 0x43e8, 0x0d71, 0x238f, 0xbfd8, 0x46d4, 0x4068, 0x430e, 0xa79c, 0xa11e, 0x4375, 0x0698, 0xb241, 0x4343, 0xbaf7, 0x1af4, 0x4399, 0x4227, 0x43c3, 0xb2e3, 0xb08b, 0x39ed, 0xb07b, 0xb2d1, 0x4162, 0x425e, 0x0066, 0x4046, 0x4025, 0x0499, 0xbf48, 0x430d, 0xba16, 0x215d, 0x2992, 0x4078, 0xb226, 0x126c, 0x406e, 0x43cc, 0xb23f, 0x43db, 0xbf37, 0x2e15, 0xbaec, 0x4356, 0x3c9d, 0x4393, 0x245d, 0x411b, 0xbf00, 0x2629, 0xb21e, 0x423e, 0x27ca, 0x4001, 0x46e2, 0x4191, 0x439b, 0xba57, 0x465a, 0x1d3a, 0x1cb4, 0x4377, 0xbfc5, 0x40f1, 0x43b1, 0x42ea, 0x4249, 0xba57, 0x439e, 0x4263, 0x42cf, 0x4204, 0xb296, 0x4022, 0xa2ce, 0x4155, 0x07a1, 0x4005, 0x41bc, 0x430f, 0xbf0c, 0x4388, 0x1383, 0xb0da, 0x2956, 0x44e3, 0x432a, 0x4061, 0x421b, 0x4215, 0x455a, 0x41fa, 0x1d49, 0x4165, 0x40b8, 0x1258, 0x208a, 0xbf12, 0xa283, 0x1d11, 0x41bf, 0xbf55, 0xba7b, 0x4204, 0xba24, 0xbff0, 0xbf61, 0x40e1, 0x1ed0, 0x43c5, 0x42c8, 0x4215, 0xbad5, 0x4220, 0xb029, 0x439a, 0xb07b, 0xa83b, 0xb2ef, 0x1fb5, 0x4298, 0xb071, 0x40ef, 0x42e1, 0x2792, 0x1a2b, 0x1fb9, 0x32df, 0x209b, 0x3ecf, 0xba10, 0x409e, 0xb253, 0x4041, 0x196f, 0x443c, 0xbfd9, 0x189c, 0x441c, 0xbac0, 0xaa98, 0x0b73, 0xb229, 0x42d2, 0x4225, 0xbff0, 0x4226, 0x404c, 0x43b7, 0x4039, 0x4348, 0x411d, 0x40d0, 0x401b, 0x4187, 0xa008, 0xb2fa, 0xa858, 0xbf35, 0x420b, 0xb2c3, 0xb2fb, 0xb03c, 0x4063, 0xb0e0, 0xbfb0, 0x1b44, 0xbf5d, 0x4034, 0x4427, 0x43a2, 0xba5a, 0x46d8, 0x46d1, 0x3045, 0x33da, 0x43bb, 0x4018, 0x0618, 0x4192, 0x4357, 0x430e, 0x414b, 0x3656, 0xb2b3, 0xb03f, 0xbf90, 0x460b, 0x43c5, 0xbf1c, 0x4368, 0xba32, 0xbfc0, 0x415b, 0x4113, 0x1e66, 0x1eef, 0x4217, 0xba3a, 0xb280, 0x4355, 0x44a0, 0x4340, 0xb097, 0x423c, 0x43f6, 0x2cf6, 0xb250, 0x4627, 0x42cc, 0x2090, 0xba59, 0x4277, 0x24e1, 0x1f43, 0x14a1, 0xa852, 0xbfb6, 0x45f4, 0x46ec, 0x2c9b, 0x3866, 0xb2a8, 0x1d24, 0x4311, 0xb051, 0x4082, 0x2e93, 0x40f7, 0x40e3, 0xb010, 0xac6c, 0x1928, 0xbfdd, 0x0c95, 0xba78, 0x4409, 0x41af, 0x3367, 0x4204, 0x436a, 0x1d3c, 0x4043, 0xb0f9, 0x417f, 0x42ea, 0x42c7, 0x1cd8, 0x1db7, 0xa9fc, 0x1d0c, 0xbf60, 0x4589, 0x41e8, 0x25ec, 0x422c, 0xb239, 0x3b17, 0x45f5, 0xbf7b, 0x0725, 0x40b4, 0x4005, 0xb2f4, 0xbff0, 0x40a6, 0x412e, 0x4167, 0x30c3, 0x403b, 0xbfb8, 0x43c5, 0x402b, 0x1fa2, 0x3aca, 0xbfc5, 0xbafa, 0x4232, 0x4632, 0xb2b6, 0x4639, 0x4061, 0x4256, 0xb2e8, 0x17be, 0x4346, 0x4313, 0xbfb6, 0xba6f, 0x4103, 0xb030, 0x4196, 0xb03a, 0x0a90, 0xbf90, 0x4610, 0x40ae, 0xba66, 0x1d15, 0xa4b5, 0x4210, 0x42a7, 0xbac1, 0xbfb4, 0xaa8b, 0xb2e7, 0x405f, 0x4013, 0xa7f6, 0x1a48, 0x38c2, 0x420c, 0x210c, 0x40ad, 0x4309, 0x2e0a, 0xba29, 0xbad8, 0x0cb0, 0x4333, 0xba55, 0x1e96, 0xb21b, 0x2b22, 0x3f84, 0xbfa1, 0xa0a2, 0x419a, 0xb2c8, 0x40c3, 0x42ef, 0x4132, 0x41f4, 0xbfc6, 0x4650, 0x4322, 0x341e, 0xbf8b, 0x426b, 0x46b2, 0xb271, 0x422c, 0x4205, 0x4329, 0x419d, 0xa66e, 0xb28b, 0x409d, 0x3f5c, 0x37f3, 0x4135, 0xb25e, 0x4032, 0x4368, 0x44ad, 0x4089, 0x468a, 0x4309, 0x19f0, 0xb2ec, 0x419a, 0x4642, 0xaade, 0x221c, 0xbf12, 0xa8f7, 0xb251, 0x43cd, 0x4189, 0xbadc, 0x0a21, 0xb02b, 0x43a2, 0x4136, 0xbf07, 0x005c, 0x1ab6, 0x4192, 0x4084, 0x36b5, 0xb239, 0x19f8, 0xb236, 0x1a91, 0x40f4, 0x1c8b, 0x4142, 0x015e, 0x0894, 0x4229, 0xb090, 0xb051, 0x4073, 0x42f0, 0x1f44, 0x0dc9, 0x447f, 0xba48, 0x4150, 0x1af6, 0xba5e, 0x2fa7, 0xb088, 0x421c, 0xbf92, 0x43b1, 0x4007, 0x1992, 0x411c, 0x4021, 0x4004, 0x26a4, 0x0e50, 0x43ad, 0x3588, 0x1d58, 0x426c, 0xb0c6, 0x2222, 0xb2ef, 0x4440, 0xbf59, 0xb05b, 0x42fb, 0xb277, 0x4314, 0xbacf, 0x17b8, 0x4192, 0x40c9, 0x1d08, 0x43a8, 0xba2a, 0xb069, 0x43b9, 0x44d5, 0x10b0, 0xb2cd, 0x46e9, 0x4054, 0x4417, 0x2d2c, 0x42fb, 0x4094, 0xbf9c, 0x4598, 0x41d7, 0x4257, 0x4284, 0x4277, 0xaf28, 0xba78, 0xb0d1, 0x40f2, 0x43d2, 0x41e7, 0xb25d, 0x420c, 0x40e6, 0x1fa1, 0xb00c, 0x4066, 0x40ee, 0xbf08, 0x4387, 0xbf70, 0xb048, 0x42af, 0xbac4, 0x44cb, 0x40dd, 0x2044, 0x4247, 0x1dda, 0x250b, 0xbadd, 0x45a8, 0x4195, 0xbf38, 0x42d6, 0x4613, 0xb26d, 0x4581, 0x2f5e, 0xb2c5, 0x464e, 0xba66, 0x41c2, 0x2431, 0x4301, 0x4063, 0x2637, 0x46a0, 0xb059, 0x1d7b, 0x1f71, 0xb089, 0xbf15, 0x4111, 0x4372, 0xba3f, 0x1869, 0x13c5, 0x42cd, 0xb216, 0xb2b9, 0x4324, 0xbf70, 0x418d, 0x405a, 0x130b, 0xbfd7, 0x43e3, 0x131f, 0x42d2, 0x42b0, 0x0eb5, 0xba07, 0xb261, 0x4173, 0x4124, 0x3d11, 0x410c, 0xb268, 0xb23b, 0xb219, 0x4044, 0x011f, 0x33bd, 0x1f80, 0xb2c8, 0x4133, 0x4352, 0x1aad, 0xbfc2, 0x3647, 0xb2ef, 0x1964, 0x41f0, 0x2fd2, 0x4291, 0x438f, 0x1518, 0x4184, 0x4138, 0x1c5b, 0xa1de, 0xae02, 0x40f0, 0xbfdc, 0xba47, 0x40eb, 0x42f7, 0x2577, 0x1ba5, 0x431d, 0x4227, 0x1e88, 0xbf28, 0x1cfb, 0x409d, 0xbf5d, 0x4039, 0x4328, 0xb23c, 0x0f79, 0xb03e, 0x4177, 0x44c3, 0x4334, 0xbf4d, 0x40bc, 0x4343, 0x402a, 0x40c6, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x2facc260, 0xdcf5a5c6, 0x996babf4, 0xcf26a6f8, 0x2df7e7e5, 0xee4ea13b, 0xf856da3e, 0x6c32216c, 0x0f115238, 0x504a66b5, 0xb0cc8c19, 0x7ac767c7, 0x4550fd6f, 0x45a84035, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0x00001b12, 0x00000000, 0x60000d99, 0x00000003, 0xfffc0000, 0xd2bdaee8, 0x0000116a, 0x45a84a12, 0x00000031, 0x45a848bd, 0x00000000, 0x8af9467f, 0x45a844ad, 0x45a84b01, 0x00000000, 0x800001d0 }, + Instructions = [0x4379, 0x2480, 0x4389, 0x4462, 0xb2b1, 0xb229, 0x4064, 0xb2ce, 0xbf8a, 0xb233, 0x4052, 0xbafd, 0x40a1, 0x047d, 0xb2a8, 0xbac2, 0x43fc, 0x41d7, 0xb0c2, 0xba50, 0x41ac, 0x24ec, 0x1cde, 0x4678, 0xb0e8, 0x46f0, 0x438c, 0x4034, 0x3f2b, 0xa9c5, 0xa5d8, 0x1472, 0xbfc6, 0xb2f0, 0x223e, 0x0dc1, 0x408e, 0x4220, 0x417f, 0xa4bb, 0x4347, 0xa2fa, 0xbf8a, 0x1a45, 0x0d2e, 0xb2ed, 0xbaf2, 0x41cf, 0x437f, 0xb077, 0xb271, 0xb256, 0x4138, 0x0a13, 0x439d, 0x275a, 0xb0ad, 0x4094, 0x4133, 0xbfbc, 0xb0d7, 0x290e, 0x43ec, 0x41df, 0x259f, 0x402a, 0x42c6, 0x4148, 0xa7d3, 0x2e2c, 0xb2c3, 0xb223, 0x439b, 0x4209, 0x1e5b, 0xb213, 0x421f, 0x0902, 0xb2b4, 0xba54, 0x4340, 0x1988, 0xbfcb, 0x43b0, 0xba07, 0x436e, 0x41b2, 0xb0ff, 0x43f6, 0x42a5, 0x29d5, 0x4325, 0x22f7, 0x403b, 0x4363, 0x1a03, 0x08bc, 0x1a8e, 0x458a, 0x1328, 0xba5c, 0x315f, 0x40af, 0xbadc, 0x1b66, 0x1bfa, 0x1a5d, 0xb06a, 0x3d85, 0xb077, 0x434c, 0x40c6, 0xbf59, 0x40ec, 0x40a9, 0x4491, 0x4274, 0xba68, 0x1b59, 0x2148, 0xba32, 0x288d, 0x41ba, 0x2e3b, 0x4561, 0xbf5a, 0x42e1, 0x445d, 0x4181, 0x1f97, 0x436c, 0xb005, 0xba1d, 0xab7e, 0x38a1, 0x3f8a, 0x4139, 0x463c, 0xb047, 0xbafd, 0x43c1, 0x40a5, 0x429c, 0xba1c, 0xad94, 0x420a, 0xb275, 0xba3e, 0x447c, 0x1b00, 0xba5e, 0xb282, 0xbf78, 0xb226, 0xb293, 0x1e34, 0x1cf0, 0xae4a, 0xbfa7, 0x40d6, 0xba23, 0x46a0, 0x2172, 0x44eb, 0xbf2f, 0x4095, 0x42cb, 0x2e23, 0x312c, 0xb2e8, 0x1a06, 0x431b, 0xb2b4, 0x42ae, 0x424d, 0xb2ec, 0x1bbd, 0x45f2, 0x137e, 0x204b, 0x18e0, 0x40be, 0xb2c0, 0x25a8, 0x4319, 0xb277, 0x2318, 0x4181, 0xb29e, 0x43a4, 0x1b2b, 0xa73b, 0xbfc7, 0x074b, 0x2a98, 0xb07d, 0xba4b, 0xb256, 0x4088, 0xa8c4, 0xa053, 0x4448, 0x41ca, 0x42f1, 0xb239, 0xbf2d, 0x40a8, 0x3a69, 0x2ffe, 0x3bec, 0x23ee, 0x43f1, 0x2309, 0x43c7, 0x431c, 0x42a9, 0xb29d, 0x41dc, 0x39ff, 0x412f, 0xb2c0, 0xba55, 0xa7bf, 0x41cc, 0xbad7, 0x4104, 0x018a, 0xb2bf, 0x43c6, 0x4170, 0xb28f, 0x41f2, 0x409b, 0x4372, 0xb007, 0xbf2e, 0x01f0, 0xba38, 0x409d, 0xb0ad, 0x4363, 0xb042, 0x2a86, 0x4140, 0x415f, 0xbfb8, 0x41e5, 0x28f2, 0x4035, 0x42ce, 0xb0ae, 0x43d6, 0x4357, 0x44a9, 0x40a8, 0x4117, 0x433b, 0x4213, 0x3385, 0x09e7, 0xbf80, 0xb063, 0xaa00, 0xb013, 0xbf90, 0x409a, 0x4007, 0xbf04, 0x4060, 0x4377, 0xb0f3, 0xb0ab, 0x4279, 0x1a56, 0xba2b, 0x1931, 0x434c, 0xb090, 0x0500, 0x1b0f, 0x1a85, 0x4681, 0x3e3a, 0x43ce, 0xb2fa, 0x430b, 0x4043, 0xbfb0, 0x3a7d, 0xbf76, 0xb009, 0xbace, 0xbf70, 0x403a, 0x438c, 0x41fd, 0x433c, 0x4202, 0x2d3d, 0x4277, 0x428e, 0x4156, 0xb2d2, 0xbf68, 0x3ab5, 0x409c, 0x1f03, 0x1d6d, 0x42f8, 0x0aaf, 0x2d64, 0x2022, 0xbf12, 0x137d, 0xba6f, 0x45a2, 0xa7a7, 0x40f5, 0x45d3, 0xb2e4, 0x3f2e, 0xba5e, 0x1df2, 0xafc9, 0x42be, 0x4683, 0x4001, 0xba00, 0xb2ae, 0xba1c, 0x089d, 0xb052, 0x1bb8, 0x198b, 0x2162, 0x1f49, 0x3d1b, 0x46fa, 0xbf68, 0x4018, 0xa1e0, 0x40fa, 0x1bdd, 0xbf7c, 0x1a6b, 0x435a, 0xb240, 0x434e, 0x2af4, 0x438b, 0x40f3, 0x4049, 0x43df, 0xb231, 0x0e09, 0x434a, 0x1a40, 0x4079, 0x34eb, 0x41b5, 0x4033, 0x431b, 0x28b1, 0x4575, 0xb022, 0x4221, 0x41b5, 0xbf05, 0x1e57, 0x41d7, 0xb26b, 0x40e3, 0x18d7, 0x40c4, 0x4204, 0xb249, 0x1c5a, 0xbfa4, 0x4063, 0x36b9, 0x4414, 0x42ca, 0x1c8b, 0x42d0, 0x458c, 0xb04f, 0xbf79, 0x4369, 0x1d45, 0x383b, 0x41af, 0x132e, 0x1a3c, 0x0552, 0x467b, 0xba03, 0xb09d, 0xb0ed, 0x43a8, 0x2abd, 0x181a, 0x43c3, 0xb2f9, 0xaa2e, 0x38d6, 0xba77, 0x427b, 0x41f9, 0xbf21, 0x42e7, 0xb282, 0x4224, 0xb2e2, 0x1fab, 0x40f1, 0xbfd0, 0xbf84, 0x01fc, 0x42d2, 0x4379, 0xb000, 0x4246, 0xbfbd, 0xba44, 0x42ec, 0x43e8, 0x0d71, 0x238f, 0xbfd8, 0x46d4, 0x4068, 0x430e, 0xa79c, 0xa11e, 0x4375, 0x0698, 0xb241, 0x4343, 0xbaf7, 0x1af4, 0x4399, 0x4227, 0x43c3, 0xb2e3, 0xb08b, 0x39ed, 0xb07b, 0xb2d1, 0x4162, 0x425e, 0x0066, 0x4046, 0x4025, 0x0499, 0xbf48, 0x430d, 0xba16, 0x215d, 0x2992, 0x4078, 0xb226, 0x126c, 0x406e, 0x43cc, 0xb23f, 0x43db, 0xbf37, 0x2e15, 0xbaec, 0x4356, 0x3c9d, 0x4393, 0x245d, 0x411b, 0xbf00, 0x2629, 0xb21e, 0x423e, 0x27ca, 0x4001, 0x46e2, 0x4191, 0x439b, 0xba57, 0x465a, 0x1d3a, 0x1cb4, 0x4377, 0xbfc5, 0x40f1, 0x43b1, 0x42ea, 0x4249, 0xba57, 0x439e, 0x4263, 0x42cf, 0x4204, 0xb296, 0x4022, 0xa2ce, 0x4155, 0x07a1, 0x4005, 0x41bc, 0x430f, 0xbf0c, 0x4388, 0x1383, 0xb0da, 0x2956, 0x44e3, 0x432a, 0x4061, 0x421b, 0x4215, 0x455a, 0x41fa, 0x1d49, 0x4165, 0x40b8, 0x1258, 0x208a, 0xbf12, 0xa283, 0x1d11, 0x41bf, 0xbf55, 0xba7b, 0x4204, 0xba24, 0xbff0, 0xbf61, 0x40e1, 0x1ed0, 0x43c5, 0x42c8, 0x4215, 0xbad5, 0x4220, 0xb029, 0x439a, 0xb07b, 0xa83b, 0xb2ef, 0x1fb5, 0x4298, 0xb071, 0x40ef, 0x42e1, 0x2792, 0x1a2b, 0x1fb9, 0x32df, 0x209b, 0x3ecf, 0xba10, 0x409e, 0xb253, 0x4041, 0x196f, 0x443c, 0xbfd9, 0x189c, 0x441c, 0xbac0, 0xaa98, 0x0b73, 0xb229, 0x42d2, 0x4225, 0xbff0, 0x4226, 0x404c, 0x43b7, 0x4039, 0x4348, 0x411d, 0x40d0, 0x401b, 0x4187, 0xa008, 0xb2fa, 0xa858, 0xbf35, 0x420b, 0xb2c3, 0xb2fb, 0xb03c, 0x4063, 0xb0e0, 0xbfb0, 0x1b44, 0xbf5d, 0x4034, 0x4427, 0x43a2, 0xba5a, 0x46d8, 0x46d1, 0x3045, 0x33da, 0x43bb, 0x4018, 0x0618, 0x4192, 0x4357, 0x430e, 0x414b, 0x3656, 0xb2b3, 0xb03f, 0xbf90, 0x460b, 0x43c5, 0xbf1c, 0x4368, 0xba32, 0xbfc0, 0x415b, 0x4113, 0x1e66, 0x1eef, 0x4217, 0xba3a, 0xb280, 0x4355, 0x44a0, 0x4340, 0xb097, 0x423c, 0x43f6, 0x2cf6, 0xb250, 0x4627, 0x42cc, 0x2090, 0xba59, 0x4277, 0x24e1, 0x1f43, 0x14a1, 0xa852, 0xbfb6, 0x45f4, 0x46ec, 0x2c9b, 0x3866, 0xb2a8, 0x1d24, 0x4311, 0xb051, 0x4082, 0x2e93, 0x40f7, 0x40e3, 0xb010, 0xac6c, 0x1928, 0xbfdd, 0x0c95, 0xba78, 0x4409, 0x41af, 0x3367, 0x4204, 0x436a, 0x1d3c, 0x4043, 0xb0f9, 0x417f, 0x42ea, 0x42c7, 0x1cd8, 0x1db7, 0xa9fc, 0x1d0c, 0xbf60, 0x4589, 0x41e8, 0x25ec, 0x422c, 0xb239, 0x3b17, 0x45f5, 0xbf7b, 0x0725, 0x40b4, 0x4005, 0xb2f4, 0xbff0, 0x40a6, 0x412e, 0x4167, 0x30c3, 0x403b, 0xbfb8, 0x43c5, 0x402b, 0x1fa2, 0x3aca, 0xbfc5, 0xbafa, 0x4232, 0x4632, 0xb2b6, 0x4639, 0x4061, 0x4256, 0xb2e8, 0x17be, 0x4346, 0x4313, 0xbfb6, 0xba6f, 0x4103, 0xb030, 0x4196, 0xb03a, 0x0a90, 0xbf90, 0x4610, 0x40ae, 0xba66, 0x1d15, 0xa4b5, 0x4210, 0x42a7, 0xbac1, 0xbfb4, 0xaa8b, 0xb2e7, 0x405f, 0x4013, 0xa7f6, 0x1a48, 0x38c2, 0x420c, 0x210c, 0x40ad, 0x4309, 0x2e0a, 0xba29, 0xbad8, 0x0cb0, 0x4333, 0xba55, 0x1e96, 0xb21b, 0x2b22, 0x3f84, 0xbfa1, 0xa0a2, 0x419a, 0xb2c8, 0x40c3, 0x42ef, 0x4132, 0x41f4, 0xbfc6, 0x4650, 0x4322, 0x341e, 0xbf8b, 0x426b, 0x46b2, 0xb271, 0x422c, 0x4205, 0x4329, 0x419d, 0xa66e, 0xb28b, 0x409d, 0x3f5c, 0x37f3, 0x4135, 0xb25e, 0x4032, 0x4368, 0x44ad, 0x4089, 0x468a, 0x4309, 0x19f0, 0xb2ec, 0x419a, 0x4642, 0xaade, 0x221c, 0xbf12, 0xa8f7, 0xb251, 0x43cd, 0x4189, 0xbadc, 0x0a21, 0xb02b, 0x43a2, 0x4136, 0xbf07, 0x005c, 0x1ab6, 0x4192, 0x4084, 0x36b5, 0xb239, 0x19f8, 0xb236, 0x1a91, 0x40f4, 0x1c8b, 0x4142, 0x015e, 0x0894, 0x4229, 0xb090, 0xb051, 0x4073, 0x42f0, 0x1f44, 0x0dc9, 0x447f, 0xba48, 0x4150, 0x1af6, 0xba5e, 0x2fa7, 0xb088, 0x421c, 0xbf92, 0x43b1, 0x4007, 0x1992, 0x411c, 0x4021, 0x4004, 0x26a4, 0x0e50, 0x43ad, 0x3588, 0x1d58, 0x426c, 0xb0c6, 0x2222, 0xb2ef, 0x4440, 0xbf59, 0xb05b, 0x42fb, 0xb277, 0x4314, 0xbacf, 0x17b8, 0x4192, 0x40c9, 0x1d08, 0x43a8, 0xba2a, 0xb069, 0x43b9, 0x44d5, 0x10b0, 0xb2cd, 0x46e9, 0x4054, 0x4417, 0x2d2c, 0x42fb, 0x4094, 0xbf9c, 0x4598, 0x41d7, 0x4257, 0x4284, 0x4277, 0xaf28, 0xba78, 0xb0d1, 0x40f2, 0x43d2, 0x41e7, 0xb25d, 0x420c, 0x40e6, 0x1fa1, 0xb00c, 0x4066, 0x40ee, 0xbf08, 0x4387, 0xbf70, 0xb048, 0x42af, 0xbac4, 0x44cb, 0x40dd, 0x2044, 0x4247, 0x1dda, 0x250b, 0xbadd, 0x45a8, 0x4195, 0xbf38, 0x42d6, 0x4613, 0xb26d, 0x4581, 0x2f5e, 0xb2c5, 0x464e, 0xba66, 0x41c2, 0x2431, 0x4301, 0x4063, 0x2637, 0x46a0, 0xb059, 0x1d7b, 0x1f71, 0xb089, 0xbf15, 0x4111, 0x4372, 0xba3f, 0x1869, 0x13c5, 0x42cd, 0xb216, 0xb2b9, 0x4324, 0xbf70, 0x418d, 0x405a, 0x130b, 0xbfd7, 0x43e3, 0x131f, 0x42d2, 0x42b0, 0x0eb5, 0xba07, 0xb261, 0x4173, 0x4124, 0x3d11, 0x410c, 0xb268, 0xb23b, 0xb219, 0x4044, 0x011f, 0x33bd, 0x1f80, 0xb2c8, 0x4133, 0x4352, 0x1aad, 0xbfc2, 0x3647, 0xb2ef, 0x1964, 0x41f0, 0x2fd2, 0x4291, 0x438f, 0x1518, 0x4184, 0x4138, 0x1c5b, 0xa1de, 0xae02, 0x40f0, 0xbfdc, 0xba47, 0x40eb, 0x42f7, 0x2577, 0x1ba5, 0x431d, 0x4227, 0x1e88, 0xbf28, 0x1cfb, 0x409d, 0xbf5d, 0x4039, 0x4328, 0xb23c, 0x0f79, 0xb03e, 0x4177, 0x44c3, 0x4334, 0xbf4d, 0x40bc, 0x4343, 0x402a, 0x40c6, 0x4770, 0xe7fe + ], + StartRegs = [0x2facc260, 0xdcf5a5c6, 0x996babf4, 0xcf26a6f8, 0x2df7e7e5, 0xee4ea13b, 0xf856da3e, 0x6c32216c, 0x0f115238, 0x504a66b5, 0xb0cc8c19, 0x7ac767c7, 0x4550fd6f, 0x45a84035, 0x00000000, 0x100001f0 + ], + FinalRegs = [0x00001b12, 0x00000000, 0x60000d99, 0x00000003, 0xfffc0000, 0xd2bdaee8, 0x0000116a, 0x45a84a12, 0x00000031, 0x45a848bd, 0x00000000, 0x8af9467f, 0x45a844ad, 0x45a84b01, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0xb2fe, 0x3eee, 0x4080, 0x4136, 0xb2e1, 0xb2b8, 0xba6e, 0x4298, 0x4164, 0x427d, 0x42cc, 0x416f, 0xbf4b, 0xba4a, 0x1e12, 0x43ca, 0x1c32, 0x41dd, 0x40be, 0x4374, 0x401a, 0xb0ad, 0x1506, 0x19bc, 0x11fe, 0xb298, 0x44c2, 0x1c97, 0xbf29, 0x4123, 0x4052, 0x4092, 0x4160, 0x209c, 0x42d7, 0x413b, 0x4333, 0xad04, 0x1147, 0x4054, 0x437a, 0xbaf8, 0x427a, 0x4197, 0x2636, 0xbfa2, 0x1958, 0x41b0, 0x40a3, 0x1ee7, 0x4132, 0x4306, 0x404f, 0xba70, 0x432f, 0x4551, 0xb0d9, 0xa5fd, 0x2460, 0x06fc, 0x3f2e, 0x29f1, 0x4233, 0x4318, 0x1044, 0xb277, 0xbf09, 0xb28f, 0x439f, 0x43ba, 0x06a4, 0x43b8, 0xba39, 0x1ebb, 0xb21f, 0x41e4, 0x4280, 0xbfb9, 0x3ebe, 0x11aa, 0x1b41, 0x1f7b, 0x4407, 0x2a7a, 0x4211, 0x41bb, 0xb0ae, 0x418b, 0x1665, 0x4177, 0xbfc0, 0xb280, 0x1905, 0x4267, 0xbfc6, 0x43a0, 0x42e5, 0x45b4, 0xba2e, 0x43a3, 0x2486, 0x40eb, 0x4297, 0x23fa, 0xbf71, 0x41e5, 0x4449, 0xb051, 0x0d5b, 0x4027, 0xba23, 0x3126, 0xbf57, 0x40b8, 0x41cf, 0x464f, 0x4082, 0x4075, 0x416a, 0x18df, 0xb0e9, 0xba0a, 0x4172, 0x14b5, 0x4394, 0x4232, 0x0ff1, 0xbf96, 0x406f, 0x43d7, 0x42e3, 0x0dc2, 0x4025, 0x46a0, 0x1d27, 0xb2f3, 0x42e4, 0x4099, 0x1a00, 0xb0b2, 0x1b48, 0x40a8, 0x420f, 0x43cd, 0xb270, 0xbf92, 0x412d, 0x4178, 0x4400, 0xb2f4, 0x40f1, 0x409f, 0x124a, 0x4584, 0x4312, 0x40f4, 0x1b70, 0x441e, 0x1866, 0x40ba, 0x4337, 0xbf1f, 0xb235, 0x41a4, 0xbf80, 0xb250, 0x40f9, 0xb2f5, 0x4237, 0xba2e, 0xbf1a, 0x433c, 0xb2b5, 0xbad6, 0xb0c9, 0xbf41, 0x43b3, 0x43c4, 0x3c17, 0x414f, 0x4194, 0xaf3b, 0x42cb, 0x1b27, 0x41bf, 0x418c, 0x050e, 0x44e5, 0x41ac, 0x45db, 0x431e, 0x43e8, 0x421e, 0x41f6, 0x18a1, 0x417f, 0xbf7f, 0x412b, 0x1dc5, 0xbacb, 0x46e1, 0x1321, 0x1e34, 0x42c6, 0x413f, 0x3725, 0x3245, 0x43cd, 0x1de1, 0x40d4, 0x35bb, 0x42c1, 0x4100, 0x4438, 0x028c, 0xb208, 0x4449, 0xbae6, 0xb08b, 0x0936, 0x433c, 0x412e, 0xb095, 0x41b8, 0x1d8c, 0x41b3, 0xbfa8, 0x4616, 0x4043, 0x45b3, 0x4214, 0x1ceb, 0x4133, 0x410a, 0x1c15, 0xbf16, 0xb2fc, 0xba2d, 0xab9f, 0x4037, 0x1f6d, 0x2f24, 0x4309, 0x4431, 0xbace, 0xba3d, 0x43cc, 0xb2e1, 0x137d, 0x43d5, 0x3f6c, 0x41e8, 0x3089, 0x42bf, 0x45d3, 0x4049, 0xbf89, 0x0e07, 0x2da2, 0x427e, 0x43c9, 0xb2cd, 0x1f71, 0xadba, 0xb2e3, 0xba77, 0x4250, 0x46fc, 0x24c9, 0x43ce, 0xb02f, 0x468d, 0xba17, 0x2ee2, 0x448b, 0xbfbd, 0x195a, 0x41a3, 0x33fb, 0x437a, 0xbf65, 0x4004, 0x43ab, 0x42c3, 0xaa5c, 0x2944, 0x1baf, 0x2a27, 0x4266, 0xbf91, 0x41c6, 0x42b8, 0xba74, 0x41b7, 0x355c, 0xbae4, 0x405f, 0x40be, 0xbaf5, 0x437e, 0xbac0, 0x4204, 0x436f, 0x46f3, 0x1f70, 0x4277, 0x4053, 0xbf80, 0xb2ee, 0xbfd5, 0xb2b0, 0x41e9, 0x424b, 0x4135, 0x4561, 0xbae0, 0xb200, 0xba21, 0x4360, 0xb0c1, 0xb207, 0x40a1, 0x4373, 0xb09e, 0x0929, 0x3cad, 0x1997, 0x411a, 0xb020, 0xbfa2, 0x3fca, 0xb23d, 0x087e, 0x055d, 0x4149, 0xb289, 0x2152, 0x1be1, 0x43b1, 0x40a1, 0xbf0d, 0x431d, 0xa7b2, 0x3d9a, 0x40a1, 0x42cf, 0x43e4, 0xbfc2, 0xaf46, 0xb23e, 0xb2e6, 0xb279, 0xa8af, 0xb076, 0xb0e7, 0x184a, 0x41bf, 0x42c8, 0x3d7b, 0xb02c, 0x1bd0, 0x1866, 0x14fe, 0x19c0, 0x409b, 0x435c, 0x4169, 0x405d, 0x4556, 0x4052, 0x435b, 0x412b, 0xbf73, 0x1ed8, 0x419f, 0x198b, 0x43da, 0x42f3, 0xba35, 0x1db6, 0xb012, 0x43d6, 0x0534, 0xabbe, 0x2ce2, 0x427f, 0x435f, 0x4169, 0x4265, 0xbf58, 0xb280, 0xbf90, 0x404e, 0xba75, 0x4162, 0x4105, 0xba5d, 0x40c4, 0x4044, 0x3603, 0x43c0, 0xb2ba, 0xb0b5, 0x247f, 0xba45, 0x4330, 0xb21a, 0x40ba, 0xba1d, 0xb24f, 0x43e3, 0xb09c, 0xbf5e, 0xb07d, 0xba5a, 0xb093, 0xb244, 0xba35, 0x419d, 0x4303, 0x09ce, 0x1af4, 0x4584, 0xb215, 0x4385, 0xb2ef, 0x46a4, 0x413d, 0x4389, 0x1d06, 0x07b8, 0x4558, 0x4494, 0x460a, 0xbf3c, 0x4158, 0xb225, 0xb2f1, 0x41ce, 0xbf2e, 0xb054, 0x4249, 0x45c6, 0x433e, 0x4685, 0x0ade, 0x4172, 0x42dc, 0x0fbd, 0x24d2, 0x4101, 0xbfd0, 0xb2a9, 0x4155, 0x416a, 0x4186, 0xba42, 0xb269, 0x1b7d, 0x4132, 0xa644, 0x1fc0, 0x43a1, 0xbf23, 0x02c3, 0x280b, 0x40b4, 0x4149, 0x4029, 0x217e, 0x10d4, 0x422a, 0x43ba, 0xba4b, 0x4291, 0x04ca, 0x1b38, 0x439a, 0x2d58, 0x42ca, 0x1e61, 0x2260, 0x4639, 0x46ca, 0x45be, 0xbf26, 0xb26d, 0x422e, 0x28d7, 0x4055, 0x3584, 0x41ff, 0x4322, 0xb27a, 0x40ee, 0x42f5, 0xba76, 0x40cc, 0xba68, 0x41b2, 0x1053, 0xbf7a, 0x4351, 0xb2a9, 0x4209, 0x2895, 0xb013, 0xbfd0, 0xa94c, 0x32bd, 0x41d8, 0xb283, 0x405c, 0x195d, 0xb25d, 0x1f07, 0xb249, 0x1a63, 0xb079, 0xaa92, 0x140c, 0xa9f0, 0x2d54, 0xa645, 0x37b2, 0x0ae8, 0xbf57, 0xbaf4, 0xba7c, 0x0abd, 0x42b9, 0x405c, 0x3f47, 0x43df, 0xb2db, 0x4329, 0x4134, 0x298d, 0xbaf3, 0xbfd5, 0xb2e3, 0x193e, 0xb232, 0xb276, 0xa3a0, 0x1d92, 0x41f6, 0x420f, 0x424d, 0xba32, 0x426a, 0xa208, 0x37fd, 0xba7e, 0x4363, 0x405f, 0x2b88, 0x1094, 0xbf1b, 0x1f17, 0xa26c, 0xbf70, 0xb27a, 0xb03a, 0x415b, 0x436d, 0xacf7, 0x42b2, 0xa2a5, 0x42f9, 0x414b, 0x4236, 0x1c8d, 0xbfa9, 0x41d8, 0x45a8, 0x43f5, 0x3226, 0xb0ec, 0x4248, 0x1e80, 0x4192, 0x1c5b, 0xb287, 0x4107, 0x467b, 0x4391, 0x406b, 0x4489, 0x18c6, 0x44dc, 0x4126, 0x1c8d, 0xb029, 0x42ac, 0x4055, 0x413e, 0x408e, 0xbf76, 0x052a, 0xbf90, 0xb261, 0xb2ae, 0x42b4, 0x26af, 0x43d5, 0x4084, 0xba6b, 0xb002, 0x09f3, 0x1f9b, 0x4300, 0xbf92, 0xa86c, 0x4187, 0x46f3, 0xb0cb, 0x41c1, 0x400e, 0x04b6, 0xbaf0, 0x10bc, 0xb0ff, 0xbfc1, 0xb244, 0x3bf7, 0x45a2, 0x4173, 0x415b, 0xba34, 0x3976, 0x1837, 0x40ad, 0x197e, 0x284b, 0x459a, 0x17e0, 0x41bf, 0x408f, 0x1ae0, 0x13a0, 0xbacd, 0x40c1, 0x420b, 0xba22, 0x44e8, 0x41a9, 0xa4b1, 0xb2ba, 0x41b2, 0x2d95, 0x4320, 0x4663, 0xbf37, 0xa9ae, 0xb2c5, 0x2310, 0x4329, 0x4239, 0xb0ef, 0x2d06, 0x4418, 0x42f3, 0xba76, 0xa639, 0x45d8, 0xb263, 0x2dc3, 0x1ce6, 0xbf4b, 0x43e6, 0xa2b7, 0x1c0c, 0x0252, 0xbf9b, 0x4151, 0x4062, 0x4148, 0x4360, 0x43bf, 0x07ca, 0x15e8, 0x40e2, 0x34b3, 0x433a, 0x42e4, 0x38ce, 0x34cc, 0x1796, 0xb04d, 0x3fc2, 0x46d3, 0x422e, 0xb09d, 0xbaf0, 0x4319, 0x4057, 0x435e, 0xbfe0, 0x4393, 0xbf64, 0x1a89, 0x422e, 0xb01e, 0x400c, 0xb07d, 0x1d17, 0x426c, 0x46ab, 0x454f, 0x44e5, 0x4085, 0xb209, 0x194d, 0x1f97, 0x411d, 0x4051, 0x1fd4, 0x3a6e, 0xbf4a, 0xb27a, 0x0cda, 0xae68, 0x4026, 0xb2cc, 0xba30, 0xb24b, 0x1e97, 0xbf77, 0x4231, 0xa0c7, 0xb268, 0x268b, 0xb0ad, 0xb209, 0x1b9f, 0x4035, 0x4237, 0x0231, 0x1aaf, 0xb0cb, 0x1d8e, 0x42e4, 0x42e4, 0x21cf, 0xb2d2, 0x420d, 0x4041, 0xac5b, 0xa18a, 0x43f6, 0xbaf7, 0x388e, 0x1c7f, 0xa574, 0xbf89, 0x43bd, 0x1ab6, 0xba61, 0x4218, 0x1ea0, 0x42c9, 0x432d, 0x4376, 0x1933, 0x4134, 0x1d9b, 0x27df, 0x43c4, 0xbfd5, 0x4203, 0xa8dc, 0x0ae8, 0x440a, 0xba0c, 0x3294, 0x4174, 0x42c9, 0xa2d7, 0x42ed, 0xbad3, 0x1bfe, 0x4326, 0x4035, 0x4348, 0xb292, 0xbf9e, 0x18f3, 0x43f1, 0x1367, 0x411b, 0x4477, 0x1e0b, 0x1d22, 0x1c39, 0x40bd, 0x435a, 0x1be5, 0x13c2, 0x1b7c, 0x433c, 0xa9d8, 0xa165, 0xbf69, 0xb057, 0x413d, 0x40f9, 0xb202, 0x3e95, 0x4185, 0xbf29, 0x1f39, 0x19fd, 0x42f1, 0xa2f2, 0xb2d2, 0xb070, 0x415c, 0xbf24, 0x43ba, 0x3aca, 0x1a2f, 0x4150, 0x43de, 0xb2df, 0x436d, 0xbfba, 0xad69, 0x1080, 0xb0f5, 0x4307, 0x0ab6, 0x4002, 0x41f4, 0xba63, 0x4220, 0xb28f, 0xba7e, 0xa3b6, 0xa952, 0xba6a, 0x447f, 0x1cd0, 0xb055, 0x4392, 0xb231, 0x1af3, 0x4354, 0x41cf, 0xa231, 0xbfde, 0x35ca, 0xab3b, 0xb0e7, 0x43ea, 0xbae7, 0x4375, 0x43ce, 0x31e5, 0x393c, 0x42f9, 0x4135, 0xb260, 0x409b, 0xba67, 0xb26d, 0x3fac, 0xb26c, 0x425d, 0x43de, 0xbf6d, 0x435b, 0x2efd, 0x1ae3, 0x429f, 0x187d, 0xb0a5, 0x41d7, 0x40b9, 0xbad6, 0x15d3, 0x4666, 0x46ad, 0xbf6f, 0x2348, 0x4006, 0x1221, 0xba18, 0x4271, 0x4057, 0x1829, 0x1e42, 0xa497, 0x1dc7, 0x41eb, 0x4225, 0x43b5, 0x1603, 0xb04f, 0xbf84, 0x3451, 0xb055, 0x4499, 0xb2e1, 0x41cd, 0xb25a, 0x41d8, 0x4305, 0x40ee, 0x411e, 0xba6f, 0x0452, 0x4160, 0x413d, 0x408c, 0x4232, 0x4047, 0x4452, 0xba4c, 0xa758, 0xbf21, 0x4616, 0x1990, 0x422a, 0x1dae, 0x1f74, 0x0f3f, 0x1f61, 0xbac5, 0x1d9e, 0xbaf1, 0xbf12, 0x1bd8, 0x2b26, 0xb05d, 0x09a5, 0x408e, 0x1ca7, 0x0a35, 0xa904, 0xaed0, 0x16fb, 0xbf80, 0xa941, 0xae2a, 0x1e3e, 0xb256, 0xa51e, 0xb2c4, 0x435e, 0xb288, 0x403f, 0xb2a9, 0xa590, 0x40a3, 0x4112, 0xbf99, 0x1c5f, 0x426e, 0x40c1, 0xb26c, 0xbfae, 0xb2a3, 0x43a7, 0xb213, 0x420f, 0x429f, 0x4080, 0x38a0, 0xba39, 0x1afa, 0xb027, 0x36e3, 0x37ef, 0x42c4, 0x40c9, 0x42de, 0xb0ec, 0xbf0b, 0xbac5, 0x241d, 0x25fb, 0x4182, 0xb251, 0xaa91, 0x4383, 0xbfb3, 0xba70, 0xb0a0, 0xba77, 0x4068, 0x1c8f, 0x12d3, 0xb27f, 0xb2c8, 0xbada, 0x3b8f, 0xbf32, 0xbaec, 0xb092, 0xbae3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x989fe979, 0xeb6d1dc2, 0x0199a793, 0xfd6ddabf, 0x2337d8f4, 0x10d088ef, 0x6abc19fa, 0x03f7a6b3, 0x8efc124d, 0x26bfcdfd, 0x162448d8, 0x1f47e67e, 0xbfa7bf3d, 0xf5019635, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0x000000ea, 0xffffffea, 0xfffffbff, 0x00001d00, 0x0000001d, 0x000019b4, 0x000000a6, 0xffffffec, 0x3fffff72, 0xffd83f36, 0xbfa7bf3d, 0x000000d6, 0x020003a0, 0xffffdcc8, 0x00000000, 0xa00001d0 }, + Instructions = [0xb2fe, 0x3eee, 0x4080, 0x4136, 0xb2e1, 0xb2b8, 0xba6e, 0x4298, 0x4164, 0x427d, 0x42cc, 0x416f, 0xbf4b, 0xba4a, 0x1e12, 0x43ca, 0x1c32, 0x41dd, 0x40be, 0x4374, 0x401a, 0xb0ad, 0x1506, 0x19bc, 0x11fe, 0xb298, 0x44c2, 0x1c97, 0xbf29, 0x4123, 0x4052, 0x4092, 0x4160, 0x209c, 0x42d7, 0x413b, 0x4333, 0xad04, 0x1147, 0x4054, 0x437a, 0xbaf8, 0x427a, 0x4197, 0x2636, 0xbfa2, 0x1958, 0x41b0, 0x40a3, 0x1ee7, 0x4132, 0x4306, 0x404f, 0xba70, 0x432f, 0x4551, 0xb0d9, 0xa5fd, 0x2460, 0x06fc, 0x3f2e, 0x29f1, 0x4233, 0x4318, 0x1044, 0xb277, 0xbf09, 0xb28f, 0x439f, 0x43ba, 0x06a4, 0x43b8, 0xba39, 0x1ebb, 0xb21f, 0x41e4, 0x4280, 0xbfb9, 0x3ebe, 0x11aa, 0x1b41, 0x1f7b, 0x4407, 0x2a7a, 0x4211, 0x41bb, 0xb0ae, 0x418b, 0x1665, 0x4177, 0xbfc0, 0xb280, 0x1905, 0x4267, 0xbfc6, 0x43a0, 0x42e5, 0x45b4, 0xba2e, 0x43a3, 0x2486, 0x40eb, 0x4297, 0x23fa, 0xbf71, 0x41e5, 0x4449, 0xb051, 0x0d5b, 0x4027, 0xba23, 0x3126, 0xbf57, 0x40b8, 0x41cf, 0x464f, 0x4082, 0x4075, 0x416a, 0x18df, 0xb0e9, 0xba0a, 0x4172, 0x14b5, 0x4394, 0x4232, 0x0ff1, 0xbf96, 0x406f, 0x43d7, 0x42e3, 0x0dc2, 0x4025, 0x46a0, 0x1d27, 0xb2f3, 0x42e4, 0x4099, 0x1a00, 0xb0b2, 0x1b48, 0x40a8, 0x420f, 0x43cd, 0xb270, 0xbf92, 0x412d, 0x4178, 0x4400, 0xb2f4, 0x40f1, 0x409f, 0x124a, 0x4584, 0x4312, 0x40f4, 0x1b70, 0x441e, 0x1866, 0x40ba, 0x4337, 0xbf1f, 0xb235, 0x41a4, 0xbf80, 0xb250, 0x40f9, 0xb2f5, 0x4237, 0xba2e, 0xbf1a, 0x433c, 0xb2b5, 0xbad6, 0xb0c9, 0xbf41, 0x43b3, 0x43c4, 0x3c17, 0x414f, 0x4194, 0xaf3b, 0x42cb, 0x1b27, 0x41bf, 0x418c, 0x050e, 0x44e5, 0x41ac, 0x45db, 0x431e, 0x43e8, 0x421e, 0x41f6, 0x18a1, 0x417f, 0xbf7f, 0x412b, 0x1dc5, 0xbacb, 0x46e1, 0x1321, 0x1e34, 0x42c6, 0x413f, 0x3725, 0x3245, 0x43cd, 0x1de1, 0x40d4, 0x35bb, 0x42c1, 0x4100, 0x4438, 0x028c, 0xb208, 0x4449, 0xbae6, 0xb08b, 0x0936, 0x433c, 0x412e, 0xb095, 0x41b8, 0x1d8c, 0x41b3, 0xbfa8, 0x4616, 0x4043, 0x45b3, 0x4214, 0x1ceb, 0x4133, 0x410a, 0x1c15, 0xbf16, 0xb2fc, 0xba2d, 0xab9f, 0x4037, 0x1f6d, 0x2f24, 0x4309, 0x4431, 0xbace, 0xba3d, 0x43cc, 0xb2e1, 0x137d, 0x43d5, 0x3f6c, 0x41e8, 0x3089, 0x42bf, 0x45d3, 0x4049, 0xbf89, 0x0e07, 0x2da2, 0x427e, 0x43c9, 0xb2cd, 0x1f71, 0xadba, 0xb2e3, 0xba77, 0x4250, 0x46fc, 0x24c9, 0x43ce, 0xb02f, 0x468d, 0xba17, 0x2ee2, 0x448b, 0xbfbd, 0x195a, 0x41a3, 0x33fb, 0x437a, 0xbf65, 0x4004, 0x43ab, 0x42c3, 0xaa5c, 0x2944, 0x1baf, 0x2a27, 0x4266, 0xbf91, 0x41c6, 0x42b8, 0xba74, 0x41b7, 0x355c, 0xbae4, 0x405f, 0x40be, 0xbaf5, 0x437e, 0xbac0, 0x4204, 0x436f, 0x46f3, 0x1f70, 0x4277, 0x4053, 0xbf80, 0xb2ee, 0xbfd5, 0xb2b0, 0x41e9, 0x424b, 0x4135, 0x4561, 0xbae0, 0xb200, 0xba21, 0x4360, 0xb0c1, 0xb207, 0x40a1, 0x4373, 0xb09e, 0x0929, 0x3cad, 0x1997, 0x411a, 0xb020, 0xbfa2, 0x3fca, 0xb23d, 0x087e, 0x055d, 0x4149, 0xb289, 0x2152, 0x1be1, 0x43b1, 0x40a1, 0xbf0d, 0x431d, 0xa7b2, 0x3d9a, 0x40a1, 0x42cf, 0x43e4, 0xbfc2, 0xaf46, 0xb23e, 0xb2e6, 0xb279, 0xa8af, 0xb076, 0xb0e7, 0x184a, 0x41bf, 0x42c8, 0x3d7b, 0xb02c, 0x1bd0, 0x1866, 0x14fe, 0x19c0, 0x409b, 0x435c, 0x4169, 0x405d, 0x4556, 0x4052, 0x435b, 0x412b, 0xbf73, 0x1ed8, 0x419f, 0x198b, 0x43da, 0x42f3, 0xba35, 0x1db6, 0xb012, 0x43d6, 0x0534, 0xabbe, 0x2ce2, 0x427f, 0x435f, 0x4169, 0x4265, 0xbf58, 0xb280, 0xbf90, 0x404e, 0xba75, 0x4162, 0x4105, 0xba5d, 0x40c4, 0x4044, 0x3603, 0x43c0, 0xb2ba, 0xb0b5, 0x247f, 0xba45, 0x4330, 0xb21a, 0x40ba, 0xba1d, 0xb24f, 0x43e3, 0xb09c, 0xbf5e, 0xb07d, 0xba5a, 0xb093, 0xb244, 0xba35, 0x419d, 0x4303, 0x09ce, 0x1af4, 0x4584, 0xb215, 0x4385, 0xb2ef, 0x46a4, 0x413d, 0x4389, 0x1d06, 0x07b8, 0x4558, 0x4494, 0x460a, 0xbf3c, 0x4158, 0xb225, 0xb2f1, 0x41ce, 0xbf2e, 0xb054, 0x4249, 0x45c6, 0x433e, 0x4685, 0x0ade, 0x4172, 0x42dc, 0x0fbd, 0x24d2, 0x4101, 0xbfd0, 0xb2a9, 0x4155, 0x416a, 0x4186, 0xba42, 0xb269, 0x1b7d, 0x4132, 0xa644, 0x1fc0, 0x43a1, 0xbf23, 0x02c3, 0x280b, 0x40b4, 0x4149, 0x4029, 0x217e, 0x10d4, 0x422a, 0x43ba, 0xba4b, 0x4291, 0x04ca, 0x1b38, 0x439a, 0x2d58, 0x42ca, 0x1e61, 0x2260, 0x4639, 0x46ca, 0x45be, 0xbf26, 0xb26d, 0x422e, 0x28d7, 0x4055, 0x3584, 0x41ff, 0x4322, 0xb27a, 0x40ee, 0x42f5, 0xba76, 0x40cc, 0xba68, 0x41b2, 0x1053, 0xbf7a, 0x4351, 0xb2a9, 0x4209, 0x2895, 0xb013, 0xbfd0, 0xa94c, 0x32bd, 0x41d8, 0xb283, 0x405c, 0x195d, 0xb25d, 0x1f07, 0xb249, 0x1a63, 0xb079, 0xaa92, 0x140c, 0xa9f0, 0x2d54, 0xa645, 0x37b2, 0x0ae8, 0xbf57, 0xbaf4, 0xba7c, 0x0abd, 0x42b9, 0x405c, 0x3f47, 0x43df, 0xb2db, 0x4329, 0x4134, 0x298d, 0xbaf3, 0xbfd5, 0xb2e3, 0x193e, 0xb232, 0xb276, 0xa3a0, 0x1d92, 0x41f6, 0x420f, 0x424d, 0xba32, 0x426a, 0xa208, 0x37fd, 0xba7e, 0x4363, 0x405f, 0x2b88, 0x1094, 0xbf1b, 0x1f17, 0xa26c, 0xbf70, 0xb27a, 0xb03a, 0x415b, 0x436d, 0xacf7, 0x42b2, 0xa2a5, 0x42f9, 0x414b, 0x4236, 0x1c8d, 0xbfa9, 0x41d8, 0x45a8, 0x43f5, 0x3226, 0xb0ec, 0x4248, 0x1e80, 0x4192, 0x1c5b, 0xb287, 0x4107, 0x467b, 0x4391, 0x406b, 0x4489, 0x18c6, 0x44dc, 0x4126, 0x1c8d, 0xb029, 0x42ac, 0x4055, 0x413e, 0x408e, 0xbf76, 0x052a, 0xbf90, 0xb261, 0xb2ae, 0x42b4, 0x26af, 0x43d5, 0x4084, 0xba6b, 0xb002, 0x09f3, 0x1f9b, 0x4300, 0xbf92, 0xa86c, 0x4187, 0x46f3, 0xb0cb, 0x41c1, 0x400e, 0x04b6, 0xbaf0, 0x10bc, 0xb0ff, 0xbfc1, 0xb244, 0x3bf7, 0x45a2, 0x4173, 0x415b, 0xba34, 0x3976, 0x1837, 0x40ad, 0x197e, 0x284b, 0x459a, 0x17e0, 0x41bf, 0x408f, 0x1ae0, 0x13a0, 0xbacd, 0x40c1, 0x420b, 0xba22, 0x44e8, 0x41a9, 0xa4b1, 0xb2ba, 0x41b2, 0x2d95, 0x4320, 0x4663, 0xbf37, 0xa9ae, 0xb2c5, 0x2310, 0x4329, 0x4239, 0xb0ef, 0x2d06, 0x4418, 0x42f3, 0xba76, 0xa639, 0x45d8, 0xb263, 0x2dc3, 0x1ce6, 0xbf4b, 0x43e6, 0xa2b7, 0x1c0c, 0x0252, 0xbf9b, 0x4151, 0x4062, 0x4148, 0x4360, 0x43bf, 0x07ca, 0x15e8, 0x40e2, 0x34b3, 0x433a, 0x42e4, 0x38ce, 0x34cc, 0x1796, 0xb04d, 0x3fc2, 0x46d3, 0x422e, 0xb09d, 0xbaf0, 0x4319, 0x4057, 0x435e, 0xbfe0, 0x4393, 0xbf64, 0x1a89, 0x422e, 0xb01e, 0x400c, 0xb07d, 0x1d17, 0x426c, 0x46ab, 0x454f, 0x44e5, 0x4085, 0xb209, 0x194d, 0x1f97, 0x411d, 0x4051, 0x1fd4, 0x3a6e, 0xbf4a, 0xb27a, 0x0cda, 0xae68, 0x4026, 0xb2cc, 0xba30, 0xb24b, 0x1e97, 0xbf77, 0x4231, 0xa0c7, 0xb268, 0x268b, 0xb0ad, 0xb209, 0x1b9f, 0x4035, 0x4237, 0x0231, 0x1aaf, 0xb0cb, 0x1d8e, 0x42e4, 0x42e4, 0x21cf, 0xb2d2, 0x420d, 0x4041, 0xac5b, 0xa18a, 0x43f6, 0xbaf7, 0x388e, 0x1c7f, 0xa574, 0xbf89, 0x43bd, 0x1ab6, 0xba61, 0x4218, 0x1ea0, 0x42c9, 0x432d, 0x4376, 0x1933, 0x4134, 0x1d9b, 0x27df, 0x43c4, 0xbfd5, 0x4203, 0xa8dc, 0x0ae8, 0x440a, 0xba0c, 0x3294, 0x4174, 0x42c9, 0xa2d7, 0x42ed, 0xbad3, 0x1bfe, 0x4326, 0x4035, 0x4348, 0xb292, 0xbf9e, 0x18f3, 0x43f1, 0x1367, 0x411b, 0x4477, 0x1e0b, 0x1d22, 0x1c39, 0x40bd, 0x435a, 0x1be5, 0x13c2, 0x1b7c, 0x433c, 0xa9d8, 0xa165, 0xbf69, 0xb057, 0x413d, 0x40f9, 0xb202, 0x3e95, 0x4185, 0xbf29, 0x1f39, 0x19fd, 0x42f1, 0xa2f2, 0xb2d2, 0xb070, 0x415c, 0xbf24, 0x43ba, 0x3aca, 0x1a2f, 0x4150, 0x43de, 0xb2df, 0x436d, 0xbfba, 0xad69, 0x1080, 0xb0f5, 0x4307, 0x0ab6, 0x4002, 0x41f4, 0xba63, 0x4220, 0xb28f, 0xba7e, 0xa3b6, 0xa952, 0xba6a, 0x447f, 0x1cd0, 0xb055, 0x4392, 0xb231, 0x1af3, 0x4354, 0x41cf, 0xa231, 0xbfde, 0x35ca, 0xab3b, 0xb0e7, 0x43ea, 0xbae7, 0x4375, 0x43ce, 0x31e5, 0x393c, 0x42f9, 0x4135, 0xb260, 0x409b, 0xba67, 0xb26d, 0x3fac, 0xb26c, 0x425d, 0x43de, 0xbf6d, 0x435b, 0x2efd, 0x1ae3, 0x429f, 0x187d, 0xb0a5, 0x41d7, 0x40b9, 0xbad6, 0x15d3, 0x4666, 0x46ad, 0xbf6f, 0x2348, 0x4006, 0x1221, 0xba18, 0x4271, 0x4057, 0x1829, 0x1e42, 0xa497, 0x1dc7, 0x41eb, 0x4225, 0x43b5, 0x1603, 0xb04f, 0xbf84, 0x3451, 0xb055, 0x4499, 0xb2e1, 0x41cd, 0xb25a, 0x41d8, 0x4305, 0x40ee, 0x411e, 0xba6f, 0x0452, 0x4160, 0x413d, 0x408c, 0x4232, 0x4047, 0x4452, 0xba4c, 0xa758, 0xbf21, 0x4616, 0x1990, 0x422a, 0x1dae, 0x1f74, 0x0f3f, 0x1f61, 0xbac5, 0x1d9e, 0xbaf1, 0xbf12, 0x1bd8, 0x2b26, 0xb05d, 0x09a5, 0x408e, 0x1ca7, 0x0a35, 0xa904, 0xaed0, 0x16fb, 0xbf80, 0xa941, 0xae2a, 0x1e3e, 0xb256, 0xa51e, 0xb2c4, 0x435e, 0xb288, 0x403f, 0xb2a9, 0xa590, 0x40a3, 0x4112, 0xbf99, 0x1c5f, 0x426e, 0x40c1, 0xb26c, 0xbfae, 0xb2a3, 0x43a7, 0xb213, 0x420f, 0x429f, 0x4080, 0x38a0, 0xba39, 0x1afa, 0xb027, 0x36e3, 0x37ef, 0x42c4, 0x40c9, 0x42de, 0xb0ec, 0xbf0b, 0xbac5, 0x241d, 0x25fb, 0x4182, 0xb251, 0xaa91, 0x4383, 0xbfb3, 0xba70, 0xb0a0, 0xba77, 0x4068, 0x1c8f, 0x12d3, 0xb27f, 0xb2c8, 0xbada, 0x3b8f, 0xbf32, 0xbaec, 0xb092, 0xbae3, 0x4770, 0xe7fe + ], + StartRegs = [0x989fe979, 0xeb6d1dc2, 0x0199a793, 0xfd6ddabf, 0x2337d8f4, 0x10d088ef, 0x6abc19fa, 0x03f7a6b3, 0x8efc124d, 0x26bfcdfd, 0x162448d8, 0x1f47e67e, 0xbfa7bf3d, 0xf5019635, 0x00000000, 0x100001f0 + ], + FinalRegs = [0x000000ea, 0xffffffea, 0xfffffbff, 0x00001d00, 0x0000001d, 0x000019b4, 0x000000a6, 0xffffffec, 0x3fffff72, 0xffd83f36, 0xbfa7bf3d, 0x000000d6, 0x020003a0, 0xffffdcc8, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x432c, 0x0c6d, 0xb075, 0x4339, 0x43c2, 0xb043, 0x4305, 0x42c6, 0x0cb5, 0x3d42, 0x3249, 0x40c7, 0xbf9f, 0x0213, 0x4268, 0x4192, 0x342f, 0x20a6, 0xb2bf, 0x0700, 0x41ae, 0x17af, 0x1c55, 0xbfd1, 0x437d, 0x3f9d, 0x40a9, 0x41e4, 0xba3d, 0x415d, 0xb2bf, 0x4211, 0x2b93, 0x4161, 0x412a, 0x41e7, 0x2540, 0x41a9, 0xbacf, 0x34a4, 0x1847, 0x448b, 0x448a, 0x4187, 0x40cc, 0xa4d4, 0xb2fd, 0xb2d5, 0x1e75, 0x0762, 0x43ac, 0x4020, 0xbf8f, 0xb207, 0x4351, 0xb296, 0xb230, 0xb0e4, 0xbf4c, 0x44e2, 0x4043, 0xbac6, 0xb26b, 0xb2c3, 0x3a43, 0x4182, 0x46d9, 0x312b, 0x32a1, 0x3341, 0x4136, 0x4385, 0xbf77, 0x30bb, 0x4083, 0x4621, 0xba7a, 0x46c0, 0xb2eb, 0x42c5, 0xb27f, 0x1e4f, 0x416f, 0x199e, 0x4463, 0xbf8b, 0x4117, 0xbaf4, 0x45f2, 0x3e2f, 0xb248, 0x41d0, 0xb068, 0x467f, 0xa251, 0xb26e, 0x29aa, 0x2bbf, 0xb2cf, 0x439e, 0x1e50, 0x41f9, 0xbf80, 0x456d, 0xbf48, 0x1ff7, 0x46f9, 0x28ba, 0xbae5, 0x455a, 0xb23a, 0x4234, 0x4224, 0x3582, 0x41d8, 0x4038, 0x420d, 0x42a4, 0x2823, 0x2019, 0xbf98, 0x289f, 0xb027, 0x3f10, 0x2356, 0x43d4, 0x4327, 0x2b77, 0xab61, 0x43dc, 0x41fe, 0x1560, 0x01d5, 0x43cc, 0x4310, 0xbf04, 0x4053, 0x093b, 0x43b5, 0x4311, 0xb033, 0x30ba, 0xae34, 0xbf78, 0x4051, 0xba31, 0x4113, 0x4364, 0xaa6d, 0x2548, 0xb254, 0x1979, 0x4399, 0xb2d1, 0x2a2e, 0xb22e, 0x40a2, 0x1026, 0x428d, 0xb29f, 0x18b9, 0xb0b5, 0x422a, 0x4138, 0x2e00, 0x402b, 0xbf2c, 0xb06a, 0x187c, 0x402f, 0xba21, 0x407d, 0x008f, 0x4119, 0xb2ef, 0x4260, 0x4185, 0x43f8, 0x4028, 0xbae3, 0x4005, 0x1f3a, 0xad44, 0xb28e, 0xa699, 0xa201, 0x4243, 0xb2b5, 0x1978, 0x40d2, 0xbf48, 0x430a, 0x1965, 0xb222, 0x123c, 0x40ab, 0x0239, 0xb2b0, 0xbf9d, 0x36b8, 0x2273, 0xafdb, 0xb2dd, 0x1b98, 0x3bd9, 0x2680, 0xba1b, 0x1485, 0x4387, 0x42e2, 0x3bc3, 0x43c9, 0xb005, 0x363c, 0xbf07, 0xba48, 0x3851, 0xba45, 0x4288, 0x41ea, 0x19f6, 0xb2e6, 0x1a33, 0x413c, 0x4002, 0x4304, 0x42de, 0xbadf, 0x1b8a, 0x4032, 0xb219, 0x4423, 0x4634, 0x4089, 0x4640, 0x1b8d, 0x4207, 0x3e42, 0x41f1, 0x42fa, 0xbfa7, 0x4601, 0x1f59, 0xb2cf, 0x40bf, 0x4559, 0x1eb2, 0x1bdb, 0x42af, 0xb226, 0x44f4, 0x43a2, 0x1aea, 0x3d70, 0x190d, 0x436a, 0xb2b9, 0x17f6, 0xba64, 0x44d3, 0x400c, 0xb033, 0x4015, 0x0c75, 0xba2c, 0xbae8, 0xbf64, 0x1a67, 0x411e, 0xb2dc, 0x41ca, 0x45ec, 0x08d1, 0x4039, 0x42b9, 0x40f1, 0xb076, 0xae19, 0xb256, 0x3711, 0x4067, 0x410b, 0xa4c0, 0x1cd5, 0x1c2e, 0x1f01, 0x426c, 0x4274, 0x075d, 0xbf66, 0x2825, 0x1fca, 0xb266, 0xbaf2, 0x424a, 0x42f6, 0x236d, 0xb27f, 0xb2fa, 0x45eb, 0xbf0e, 0x1cdd, 0xaf37, 0x43a7, 0xb08e, 0x4258, 0x41f3, 0x211e, 0x40b6, 0xba7a, 0xbf76, 0x467c, 0x417d, 0x4173, 0x4623, 0x4058, 0xbad5, 0x423c, 0xbf80, 0x42e7, 0x3860, 0x2a24, 0x0276, 0xb033, 0xbfdc, 0xb2c3, 0xb224, 0xb27e, 0x2369, 0xba38, 0x4277, 0xb07a, 0x42c2, 0x41c2, 0x4668, 0xa9f2, 0xbae0, 0xbfc2, 0x41c2, 0x414e, 0x4322, 0x42d9, 0xbaf8, 0x169e, 0x4229, 0x2d30, 0x402b, 0x42ef, 0xb2e0, 0x42c4, 0x3c0f, 0x33ac, 0x117b, 0xbacd, 0x1961, 0x41af, 0x4041, 0xba1d, 0xbfa0, 0xbf7c, 0x403d, 0x3710, 0x429d, 0x41e8, 0xba30, 0xbf80, 0xacb2, 0x196a, 0x40b1, 0x416c, 0x1a81, 0xbf90, 0x41ef, 0xb079, 0x412c, 0xb00a, 0xbf80, 0x03d7, 0xb28b, 0x44ed, 0x4153, 0xbf7f, 0x413a, 0x4553, 0x416b, 0x4030, 0x408a, 0x1fc8, 0xb0d4, 0x3ad1, 0x4153, 0x4188, 0x409e, 0x45a0, 0x390b, 0x0957, 0x105d, 0x2a7c, 0x437c, 0xbf4f, 0xba1b, 0x1847, 0xb22a, 0x4574, 0xba75, 0x4162, 0x17f6, 0x4357, 0x42e1, 0x4186, 0x4378, 0x4035, 0xa34c, 0x43e1, 0x1d89, 0x46a1, 0x3132, 0x443e, 0x4173, 0x45c2, 0x1fd2, 0x41f9, 0xbfb4, 0x460c, 0x1f6e, 0x3143, 0x435a, 0xb2bc, 0x4272, 0x1719, 0xbacc, 0xbf46, 0x427d, 0x40d9, 0x437e, 0x03aa, 0x41fd, 0x4187, 0x3d10, 0x40b6, 0xb2d2, 0xbfd0, 0x427d, 0x421c, 0x430a, 0xba14, 0x18cb, 0xba2c, 0xb087, 0xbfb3, 0x3e14, 0x4305, 0x4134, 0xb291, 0x165c, 0x406b, 0xbf1e, 0x40cd, 0xb2dc, 0x403c, 0x029a, 0x0386, 0x406e, 0x429d, 0x1e23, 0x441c, 0x0b65, 0x460e, 0xb224, 0x4158, 0x3c93, 0xa9dc, 0xbfbd, 0x0dfc, 0x46ba, 0xb07f, 0xba01, 0x414d, 0x1744, 0x1cce, 0x40fa, 0x4120, 0x2b23, 0x4465, 0x1c51, 0x0aef, 0x4234, 0xb04a, 0x4392, 0x2c8e, 0xb20e, 0xbf61, 0xbae5, 0xba31, 0x4055, 0x42b4, 0xb28b, 0x02b5, 0x02a8, 0xa873, 0x417e, 0x41fe, 0x42c0, 0x4259, 0x41bc, 0xbff0, 0xbfc1, 0x1987, 0x40d2, 0x1b97, 0x41fc, 0x0019, 0x4139, 0xb212, 0x151d, 0x4231, 0xbfb0, 0xbafb, 0x06e7, 0x1817, 0x4270, 0x006c, 0x409c, 0x3797, 0x1801, 0x4116, 0xb242, 0x4028, 0xb2e8, 0x0e08, 0x426b, 0xbf8c, 0x1eb2, 0xb27e, 0xb2e9, 0x3814, 0x0b2a, 0xb2e7, 0xbf87, 0x2e03, 0x1bd0, 0x43f5, 0x4356, 0x42b1, 0xa47c, 0xb0f4, 0x427d, 0xb26a, 0xb287, 0x1b09, 0x0484, 0xbf85, 0x4112, 0xb057, 0xbfc0, 0x2044, 0x435f, 0x41a3, 0x3ba9, 0x4141, 0xb2a4, 0x4060, 0x40af, 0xb0fd, 0x4243, 0x4170, 0x422a, 0xba39, 0x416d, 0xbf81, 0xb2ef, 0xb061, 0xb015, 0x437e, 0xbfe2, 0x4168, 0x13c9, 0xb02d, 0x296a, 0x42d2, 0x3994, 0x426b, 0x46c3, 0x1a5d, 0x4336, 0x4133, 0x43a4, 0xb202, 0x42dd, 0x3226, 0xb2a9, 0xb0e7, 0x23db, 0xb072, 0x1bf5, 0x43f7, 0x44c5, 0xb223, 0x4312, 0xbf47, 0xba56, 0x1089, 0x27e8, 0xb208, 0xabdd, 0x3972, 0x41ce, 0x4371, 0x41c1, 0x4082, 0x2c57, 0x1ef7, 0x428c, 0x4053, 0x21b6, 0x447d, 0xb015, 0x40d2, 0x4110, 0x0df3, 0xbf8d, 0xb28d, 0x4350, 0xbada, 0x4058, 0xbaf3, 0x1e42, 0xbad4, 0xabca, 0x2d58, 0x41b7, 0x421f, 0x40a4, 0x0c09, 0xb022, 0x4170, 0x1811, 0x3af8, 0x30c1, 0xba50, 0x41e6, 0x4477, 0x425d, 0x4076, 0x42ca, 0x43a5, 0x1834, 0xbf7a, 0x31ad, 0xbafe, 0x1bc6, 0xb247, 0x1db0, 0x418f, 0x4163, 0x4008, 0x4674, 0xb2f5, 0xb269, 0xb215, 0x066e, 0x19dc, 0x24a4, 0xba0e, 0x4100, 0xbac7, 0xa0f0, 0x46ec, 0xa3c8, 0x311e, 0x0490, 0xb04b, 0x4016, 0x4085, 0x4024, 0xbf5b, 0x4028, 0xb2e5, 0xb054, 0x4189, 0xb267, 0xa751, 0x42b0, 0x40ca, 0xaf76, 0xbace, 0xbad2, 0xbf99, 0x1ef3, 0x435f, 0x4384, 0x3383, 0x4247, 0x4338, 0x1a84, 0x416a, 0xbaea, 0x41a6, 0x4002, 0xbf90, 0xb05a, 0xa518, 0x3010, 0x43eb, 0x4350, 0x352f, 0x43c9, 0xba2b, 0x3361, 0x421e, 0xb268, 0x407d, 0xbfb4, 0xba4e, 0x44b5, 0x41a2, 0x419f, 0x410f, 0x46c9, 0x19d8, 0x0eec, 0xbad3, 0xa0a0, 0xbf60, 0xbfda, 0x188a, 0x129a, 0x400d, 0xba64, 0x4310, 0x41af, 0xba79, 0xba55, 0xb063, 0xbf80, 0xbf0e, 0x442d, 0x1826, 0x42d1, 0x1bf8, 0x435f, 0xba15, 0x2f8f, 0x1945, 0xa28c, 0x41f4, 0xbf93, 0x1eab, 0xaaf6, 0xba0b, 0x2fda, 0xbfb0, 0x4228, 0xa802, 0xb2f6, 0x425d, 0xb2b8, 0xbf33, 0x418e, 0x435b, 0x1feb, 0x4252, 0x4359, 0x462b, 0xba17, 0x40bf, 0x43f9, 0x43d5, 0x03c1, 0x40bb, 0x40f7, 0x4391, 0xaa2c, 0x45b8, 0x4678, 0x42ad, 0x4088, 0x03c6, 0x4573, 0x40e9, 0xb282, 0x41cd, 0xb2f6, 0x1913, 0x40cd, 0x41e9, 0xbfa5, 0x262c, 0x42c9, 0x28d4, 0x3fec, 0x3b30, 0x42a4, 0x41ab, 0xbff0, 0x43f8, 0xb225, 0x41dc, 0xb2ff, 0x1866, 0x2870, 0x4286, 0xab63, 0x3889, 0x407d, 0x40fa, 0x25a1, 0x4488, 0x416c, 0x433a, 0xbfbf, 0x0155, 0x43f6, 0xb225, 0xb22e, 0x403f, 0x1355, 0x428f, 0xba2e, 0x438b, 0xb074, 0x445a, 0xb2de, 0xb0f1, 0x4241, 0x387f, 0xa5ab, 0x401c, 0xb02a, 0xb23a, 0xb22c, 0x2cba, 0x43c6, 0x1755, 0x4313, 0xbfb1, 0xa2de, 0x085c, 0xb0d9, 0x2705, 0xbf81, 0xb2af, 0xba09, 0x4314, 0xb2fa, 0xbad6, 0xbfb0, 0xbaf6, 0x1ba9, 0x4699, 0xb058, 0x43de, 0x32d1, 0x1c10, 0x41cb, 0xb281, 0x41be, 0x4360, 0xb296, 0x01d1, 0xb227, 0xafe4, 0x3965, 0x19d5, 0x40b6, 0xb09d, 0xb2e4, 0x42c3, 0x426a, 0xab02, 0xbf48, 0x4143, 0xbf1e, 0xb091, 0x0169, 0x09c9, 0xba62, 0x1f2b, 0xb060, 0xb0c4, 0x4353, 0x4377, 0x1c67, 0x4083, 0x1ba9, 0x43cb, 0x435f, 0x1b26, 0xb2ed, 0x3409, 0x2f3c, 0x41d0, 0x4306, 0x19f8, 0xb035, 0x4401, 0x076b, 0x4474, 0x1add, 0x41a4, 0xbf6a, 0x2302, 0x401a, 0x44f1, 0xbf6c, 0x426f, 0xb214, 0xb25d, 0xb226, 0x010f, 0x4261, 0xbacc, 0xbf25, 0x434e, 0x2220, 0xa694, 0x0089, 0x421d, 0x4083, 0x4092, 0x4333, 0xb22f, 0x4217, 0x432b, 0xb0d5, 0x4637, 0xab70, 0x42b4, 0x3cef, 0xb21a, 0x09ba, 0xb2fb, 0x4193, 0x41eb, 0xba2a, 0xba50, 0xa277, 0x4198, 0x4075, 0xbfbc, 0xaba3, 0x1814, 0x1dbd, 0xb260, 0x4305, 0xbfc0, 0x4334, 0x43cb, 0x2690, 0x1dd1, 0x42f4, 0xbf3f, 0x4294, 0x034c, 0x31f5, 0x4616, 0x4340, 0x224f, 0xba03, 0x4063, 0xb2ef, 0x4026, 0x4182, 0x4321, 0xaa72, 0x4242, 0x4265, 0xb085, 0xbaf2, 0xbfc9, 0xb2dc, 0x432c, 0x0a3b, 0xba19, 0x40fa, 0x4580, 0x1ec1, 0xba1b, 0x1a32, 0xa367, 0xbfe0, 0xacd3, 0x4179, 0x13e8, 0x2574, 0xb25c, 0xb228, 0x1852, 0xbfcb, 0xb2b6, 0x415c, 0x42bc, 0xba53, 0x439d, 0xbf2a, 0x15c3, 0xb2ac, 0x0d9c, 0xbf1c, 0xba32, 0xbaed, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x73229dce, 0x0f640776, 0x9c25ec11, 0x66a54f6d, 0xca4c2372, 0x617f5393, 0xfc67eb08, 0x99c5589c, 0x6805463b, 0x1f6ada41, 0x7ed9c21c, 0x50147fab, 0x6e783256, 0x5296ab63, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x00000074, 0x00000135, 0x10000000, 0x00000000, 0x00000000, 0x00003000, 0x00000010, 0x00000017, 0x6805463b, 0x0d36c137, 0x0a3e95fc, 0x6805463b, 0x0d32b38d, 0x0d36bf7f, 0x00000000, 0x200001d0 }, + Instructions = [0x432c, 0x0c6d, 0xb075, 0x4339, 0x43c2, 0xb043, 0x4305, 0x42c6, 0x0cb5, 0x3d42, 0x3249, 0x40c7, 0xbf9f, 0x0213, 0x4268, 0x4192, 0x342f, 0x20a6, 0xb2bf, 0x0700, 0x41ae, 0x17af, 0x1c55, 0xbfd1, 0x437d, 0x3f9d, 0x40a9, 0x41e4, 0xba3d, 0x415d, 0xb2bf, 0x4211, 0x2b93, 0x4161, 0x412a, 0x41e7, 0x2540, 0x41a9, 0xbacf, 0x34a4, 0x1847, 0x448b, 0x448a, 0x4187, 0x40cc, 0xa4d4, 0xb2fd, 0xb2d5, 0x1e75, 0x0762, 0x43ac, 0x4020, 0xbf8f, 0xb207, 0x4351, 0xb296, 0xb230, 0xb0e4, 0xbf4c, 0x44e2, 0x4043, 0xbac6, 0xb26b, 0xb2c3, 0x3a43, 0x4182, 0x46d9, 0x312b, 0x32a1, 0x3341, 0x4136, 0x4385, 0xbf77, 0x30bb, 0x4083, 0x4621, 0xba7a, 0x46c0, 0xb2eb, 0x42c5, 0xb27f, 0x1e4f, 0x416f, 0x199e, 0x4463, 0xbf8b, 0x4117, 0xbaf4, 0x45f2, 0x3e2f, 0xb248, 0x41d0, 0xb068, 0x467f, 0xa251, 0xb26e, 0x29aa, 0x2bbf, 0xb2cf, 0x439e, 0x1e50, 0x41f9, 0xbf80, 0x456d, 0xbf48, 0x1ff7, 0x46f9, 0x28ba, 0xbae5, 0x455a, 0xb23a, 0x4234, 0x4224, 0x3582, 0x41d8, 0x4038, 0x420d, 0x42a4, 0x2823, 0x2019, 0xbf98, 0x289f, 0xb027, 0x3f10, 0x2356, 0x43d4, 0x4327, 0x2b77, 0xab61, 0x43dc, 0x41fe, 0x1560, 0x01d5, 0x43cc, 0x4310, 0xbf04, 0x4053, 0x093b, 0x43b5, 0x4311, 0xb033, 0x30ba, 0xae34, 0xbf78, 0x4051, 0xba31, 0x4113, 0x4364, 0xaa6d, 0x2548, 0xb254, 0x1979, 0x4399, 0xb2d1, 0x2a2e, 0xb22e, 0x40a2, 0x1026, 0x428d, 0xb29f, 0x18b9, 0xb0b5, 0x422a, 0x4138, 0x2e00, 0x402b, 0xbf2c, 0xb06a, 0x187c, 0x402f, 0xba21, 0x407d, 0x008f, 0x4119, 0xb2ef, 0x4260, 0x4185, 0x43f8, 0x4028, 0xbae3, 0x4005, 0x1f3a, 0xad44, 0xb28e, 0xa699, 0xa201, 0x4243, 0xb2b5, 0x1978, 0x40d2, 0xbf48, 0x430a, 0x1965, 0xb222, 0x123c, 0x40ab, 0x0239, 0xb2b0, 0xbf9d, 0x36b8, 0x2273, 0xafdb, 0xb2dd, 0x1b98, 0x3bd9, 0x2680, 0xba1b, 0x1485, 0x4387, 0x42e2, 0x3bc3, 0x43c9, 0xb005, 0x363c, 0xbf07, 0xba48, 0x3851, 0xba45, 0x4288, 0x41ea, 0x19f6, 0xb2e6, 0x1a33, 0x413c, 0x4002, 0x4304, 0x42de, 0xbadf, 0x1b8a, 0x4032, 0xb219, 0x4423, 0x4634, 0x4089, 0x4640, 0x1b8d, 0x4207, 0x3e42, 0x41f1, 0x42fa, 0xbfa7, 0x4601, 0x1f59, 0xb2cf, 0x40bf, 0x4559, 0x1eb2, 0x1bdb, 0x42af, 0xb226, 0x44f4, 0x43a2, 0x1aea, 0x3d70, 0x190d, 0x436a, 0xb2b9, 0x17f6, 0xba64, 0x44d3, 0x400c, 0xb033, 0x4015, 0x0c75, 0xba2c, 0xbae8, 0xbf64, 0x1a67, 0x411e, 0xb2dc, 0x41ca, 0x45ec, 0x08d1, 0x4039, 0x42b9, 0x40f1, 0xb076, 0xae19, 0xb256, 0x3711, 0x4067, 0x410b, 0xa4c0, 0x1cd5, 0x1c2e, 0x1f01, 0x426c, 0x4274, 0x075d, 0xbf66, 0x2825, 0x1fca, 0xb266, 0xbaf2, 0x424a, 0x42f6, 0x236d, 0xb27f, 0xb2fa, 0x45eb, 0xbf0e, 0x1cdd, 0xaf37, 0x43a7, 0xb08e, 0x4258, 0x41f3, 0x211e, 0x40b6, 0xba7a, 0xbf76, 0x467c, 0x417d, 0x4173, 0x4623, 0x4058, 0xbad5, 0x423c, 0xbf80, 0x42e7, 0x3860, 0x2a24, 0x0276, 0xb033, 0xbfdc, 0xb2c3, 0xb224, 0xb27e, 0x2369, 0xba38, 0x4277, 0xb07a, 0x42c2, 0x41c2, 0x4668, 0xa9f2, 0xbae0, 0xbfc2, 0x41c2, 0x414e, 0x4322, 0x42d9, 0xbaf8, 0x169e, 0x4229, 0x2d30, 0x402b, 0x42ef, 0xb2e0, 0x42c4, 0x3c0f, 0x33ac, 0x117b, 0xbacd, 0x1961, 0x41af, 0x4041, 0xba1d, 0xbfa0, 0xbf7c, 0x403d, 0x3710, 0x429d, 0x41e8, 0xba30, 0xbf80, 0xacb2, 0x196a, 0x40b1, 0x416c, 0x1a81, 0xbf90, 0x41ef, 0xb079, 0x412c, 0xb00a, 0xbf80, 0x03d7, 0xb28b, 0x44ed, 0x4153, 0xbf7f, 0x413a, 0x4553, 0x416b, 0x4030, 0x408a, 0x1fc8, 0xb0d4, 0x3ad1, 0x4153, 0x4188, 0x409e, 0x45a0, 0x390b, 0x0957, 0x105d, 0x2a7c, 0x437c, 0xbf4f, 0xba1b, 0x1847, 0xb22a, 0x4574, 0xba75, 0x4162, 0x17f6, 0x4357, 0x42e1, 0x4186, 0x4378, 0x4035, 0xa34c, 0x43e1, 0x1d89, 0x46a1, 0x3132, 0x443e, 0x4173, 0x45c2, 0x1fd2, 0x41f9, 0xbfb4, 0x460c, 0x1f6e, 0x3143, 0x435a, 0xb2bc, 0x4272, 0x1719, 0xbacc, 0xbf46, 0x427d, 0x40d9, 0x437e, 0x03aa, 0x41fd, 0x4187, 0x3d10, 0x40b6, 0xb2d2, 0xbfd0, 0x427d, 0x421c, 0x430a, 0xba14, 0x18cb, 0xba2c, 0xb087, 0xbfb3, 0x3e14, 0x4305, 0x4134, 0xb291, 0x165c, 0x406b, 0xbf1e, 0x40cd, 0xb2dc, 0x403c, 0x029a, 0x0386, 0x406e, 0x429d, 0x1e23, 0x441c, 0x0b65, 0x460e, 0xb224, 0x4158, 0x3c93, 0xa9dc, 0xbfbd, 0x0dfc, 0x46ba, 0xb07f, 0xba01, 0x414d, 0x1744, 0x1cce, 0x40fa, 0x4120, 0x2b23, 0x4465, 0x1c51, 0x0aef, 0x4234, 0xb04a, 0x4392, 0x2c8e, 0xb20e, 0xbf61, 0xbae5, 0xba31, 0x4055, 0x42b4, 0xb28b, 0x02b5, 0x02a8, 0xa873, 0x417e, 0x41fe, 0x42c0, 0x4259, 0x41bc, 0xbff0, 0xbfc1, 0x1987, 0x40d2, 0x1b97, 0x41fc, 0x0019, 0x4139, 0xb212, 0x151d, 0x4231, 0xbfb0, 0xbafb, 0x06e7, 0x1817, 0x4270, 0x006c, 0x409c, 0x3797, 0x1801, 0x4116, 0xb242, 0x4028, 0xb2e8, 0x0e08, 0x426b, 0xbf8c, 0x1eb2, 0xb27e, 0xb2e9, 0x3814, 0x0b2a, 0xb2e7, 0xbf87, 0x2e03, 0x1bd0, 0x43f5, 0x4356, 0x42b1, 0xa47c, 0xb0f4, 0x427d, 0xb26a, 0xb287, 0x1b09, 0x0484, 0xbf85, 0x4112, 0xb057, 0xbfc0, 0x2044, 0x435f, 0x41a3, 0x3ba9, 0x4141, 0xb2a4, 0x4060, 0x40af, 0xb0fd, 0x4243, 0x4170, 0x422a, 0xba39, 0x416d, 0xbf81, 0xb2ef, 0xb061, 0xb015, 0x437e, 0xbfe2, 0x4168, 0x13c9, 0xb02d, 0x296a, 0x42d2, 0x3994, 0x426b, 0x46c3, 0x1a5d, 0x4336, 0x4133, 0x43a4, 0xb202, 0x42dd, 0x3226, 0xb2a9, 0xb0e7, 0x23db, 0xb072, 0x1bf5, 0x43f7, 0x44c5, 0xb223, 0x4312, 0xbf47, 0xba56, 0x1089, 0x27e8, 0xb208, 0xabdd, 0x3972, 0x41ce, 0x4371, 0x41c1, 0x4082, 0x2c57, 0x1ef7, 0x428c, 0x4053, 0x21b6, 0x447d, 0xb015, 0x40d2, 0x4110, 0x0df3, 0xbf8d, 0xb28d, 0x4350, 0xbada, 0x4058, 0xbaf3, 0x1e42, 0xbad4, 0xabca, 0x2d58, 0x41b7, 0x421f, 0x40a4, 0x0c09, 0xb022, 0x4170, 0x1811, 0x3af8, 0x30c1, 0xba50, 0x41e6, 0x4477, 0x425d, 0x4076, 0x42ca, 0x43a5, 0x1834, 0xbf7a, 0x31ad, 0xbafe, 0x1bc6, 0xb247, 0x1db0, 0x418f, 0x4163, 0x4008, 0x4674, 0xb2f5, 0xb269, 0xb215, 0x066e, 0x19dc, 0x24a4, 0xba0e, 0x4100, 0xbac7, 0xa0f0, 0x46ec, 0xa3c8, 0x311e, 0x0490, 0xb04b, 0x4016, 0x4085, 0x4024, 0xbf5b, 0x4028, 0xb2e5, 0xb054, 0x4189, 0xb267, 0xa751, 0x42b0, 0x40ca, 0xaf76, 0xbace, 0xbad2, 0xbf99, 0x1ef3, 0x435f, 0x4384, 0x3383, 0x4247, 0x4338, 0x1a84, 0x416a, 0xbaea, 0x41a6, 0x4002, 0xbf90, 0xb05a, 0xa518, 0x3010, 0x43eb, 0x4350, 0x352f, 0x43c9, 0xba2b, 0x3361, 0x421e, 0xb268, 0x407d, 0xbfb4, 0xba4e, 0x44b5, 0x41a2, 0x419f, 0x410f, 0x46c9, 0x19d8, 0x0eec, 0xbad3, 0xa0a0, 0xbf60, 0xbfda, 0x188a, 0x129a, 0x400d, 0xba64, 0x4310, 0x41af, 0xba79, 0xba55, 0xb063, 0xbf80, 0xbf0e, 0x442d, 0x1826, 0x42d1, 0x1bf8, 0x435f, 0xba15, 0x2f8f, 0x1945, 0xa28c, 0x41f4, 0xbf93, 0x1eab, 0xaaf6, 0xba0b, 0x2fda, 0xbfb0, 0x4228, 0xa802, 0xb2f6, 0x425d, 0xb2b8, 0xbf33, 0x418e, 0x435b, 0x1feb, 0x4252, 0x4359, 0x462b, 0xba17, 0x40bf, 0x43f9, 0x43d5, 0x03c1, 0x40bb, 0x40f7, 0x4391, 0xaa2c, 0x45b8, 0x4678, 0x42ad, 0x4088, 0x03c6, 0x4573, 0x40e9, 0xb282, 0x41cd, 0xb2f6, 0x1913, 0x40cd, 0x41e9, 0xbfa5, 0x262c, 0x42c9, 0x28d4, 0x3fec, 0x3b30, 0x42a4, 0x41ab, 0xbff0, 0x43f8, 0xb225, 0x41dc, 0xb2ff, 0x1866, 0x2870, 0x4286, 0xab63, 0x3889, 0x407d, 0x40fa, 0x25a1, 0x4488, 0x416c, 0x433a, 0xbfbf, 0x0155, 0x43f6, 0xb225, 0xb22e, 0x403f, 0x1355, 0x428f, 0xba2e, 0x438b, 0xb074, 0x445a, 0xb2de, 0xb0f1, 0x4241, 0x387f, 0xa5ab, 0x401c, 0xb02a, 0xb23a, 0xb22c, 0x2cba, 0x43c6, 0x1755, 0x4313, 0xbfb1, 0xa2de, 0x085c, 0xb0d9, 0x2705, 0xbf81, 0xb2af, 0xba09, 0x4314, 0xb2fa, 0xbad6, 0xbfb0, 0xbaf6, 0x1ba9, 0x4699, 0xb058, 0x43de, 0x32d1, 0x1c10, 0x41cb, 0xb281, 0x41be, 0x4360, 0xb296, 0x01d1, 0xb227, 0xafe4, 0x3965, 0x19d5, 0x40b6, 0xb09d, 0xb2e4, 0x42c3, 0x426a, 0xab02, 0xbf48, 0x4143, 0xbf1e, 0xb091, 0x0169, 0x09c9, 0xba62, 0x1f2b, 0xb060, 0xb0c4, 0x4353, 0x4377, 0x1c67, 0x4083, 0x1ba9, 0x43cb, 0x435f, 0x1b26, 0xb2ed, 0x3409, 0x2f3c, 0x41d0, 0x4306, 0x19f8, 0xb035, 0x4401, 0x076b, 0x4474, 0x1add, 0x41a4, 0xbf6a, 0x2302, 0x401a, 0x44f1, 0xbf6c, 0x426f, 0xb214, 0xb25d, 0xb226, 0x010f, 0x4261, 0xbacc, 0xbf25, 0x434e, 0x2220, 0xa694, 0x0089, 0x421d, 0x4083, 0x4092, 0x4333, 0xb22f, 0x4217, 0x432b, 0xb0d5, 0x4637, 0xab70, 0x42b4, 0x3cef, 0xb21a, 0x09ba, 0xb2fb, 0x4193, 0x41eb, 0xba2a, 0xba50, 0xa277, 0x4198, 0x4075, 0xbfbc, 0xaba3, 0x1814, 0x1dbd, 0xb260, 0x4305, 0xbfc0, 0x4334, 0x43cb, 0x2690, 0x1dd1, 0x42f4, 0xbf3f, 0x4294, 0x034c, 0x31f5, 0x4616, 0x4340, 0x224f, 0xba03, 0x4063, 0xb2ef, 0x4026, 0x4182, 0x4321, 0xaa72, 0x4242, 0x4265, 0xb085, 0xbaf2, 0xbfc9, 0xb2dc, 0x432c, 0x0a3b, 0xba19, 0x40fa, 0x4580, 0x1ec1, 0xba1b, 0x1a32, 0xa367, 0xbfe0, 0xacd3, 0x4179, 0x13e8, 0x2574, 0xb25c, 0xb228, 0x1852, 0xbfcb, 0xb2b6, 0x415c, 0x42bc, 0xba53, 0x439d, 0xbf2a, 0x15c3, 0xb2ac, 0x0d9c, 0xbf1c, 0xba32, 0xbaed, 0x4770, 0xe7fe + ], + StartRegs = [0x73229dce, 0x0f640776, 0x9c25ec11, 0x66a54f6d, 0xca4c2372, 0x617f5393, 0xfc67eb08, 0x99c5589c, 0x6805463b, 0x1f6ada41, 0x7ed9c21c, 0x50147fab, 0x6e783256, 0x5296ab63, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x00000074, 0x00000135, 0x10000000, 0x00000000, 0x00000000, 0x00003000, 0x00000010, 0x00000017, 0x6805463b, 0x0d36c137, 0x0a3e95fc, 0x6805463b, 0x0d32b38d, 0x0d36bf7f, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x42c2, 0x2d74, 0x4116, 0x4185, 0x40fd, 0x428a, 0x1707, 0x406c, 0xb298, 0xb252, 0x41ac, 0x1a53, 0xba5c, 0x411c, 0x4253, 0x3541, 0xbf27, 0x015a, 0xba76, 0x1226, 0x4251, 0xba16, 0xbfd0, 0x352c, 0x417b, 0xb009, 0x34c2, 0x41a9, 0x1d34, 0x438e, 0xb083, 0xb24a, 0x41d0, 0x1f5b, 0x1c0b, 0x4322, 0x1ae0, 0x234a, 0xbfd2, 0x43c9, 0x4212, 0x1556, 0x456d, 0x07bd, 0x4336, 0x43ab, 0xba1f, 0x3fd4, 0x4210, 0x41e2, 0x18d9, 0x1d4d, 0x4572, 0x4199, 0xb25e, 0xb207, 0x43fd, 0x3dee, 0x4382, 0x42fb, 0xb0cc, 0xba09, 0x2beb, 0x00e1, 0xba2a, 0xb068, 0xbf31, 0x40f0, 0x3c42, 0xb236, 0xb274, 0x44da, 0xa2d8, 0xb211, 0xba22, 0x43f8, 0x4102, 0x42e7, 0x46ca, 0x24ab, 0x4423, 0xb0f0, 0xb221, 0x421f, 0xb20d, 0x1dbe, 0x460c, 0x4040, 0xb026, 0xba47, 0x404d, 0xb22b, 0xbfb3, 0x43a8, 0x107b, 0xbf60, 0xb2d0, 0x430a, 0x3e97, 0xb272, 0x1c2b, 0x42b5, 0x4053, 0xb286, 0x42e0, 0xba44, 0x4114, 0x421c, 0xb2bf, 0x1eb5, 0x41de, 0x4097, 0xb273, 0x4121, 0x198c, 0xb281, 0xb03c, 0x409c, 0xbf46, 0xb2db, 0x443a, 0x41bf, 0xb244, 0x43a6, 0xaa45, 0xb03b, 0x43c8, 0x1d75, 0x400b, 0x1c22, 0xbae4, 0x0c72, 0x4130, 0xbae0, 0x46cc, 0xbfb1, 0x43ad, 0xba49, 0x41c2, 0x0327, 0x4027, 0x41ff, 0x4085, 0xbfcb, 0x412a, 0x1157, 0x43ab, 0xb23c, 0xb278, 0x421c, 0x416c, 0x4173, 0x43b1, 0x41c4, 0x40e9, 0x420e, 0x1bdf, 0xbfd0, 0x4672, 0xba6d, 0x07d1, 0x43c0, 0xb2aa, 0x40d1, 0x41d4, 0xa179, 0x44b2, 0xb052, 0x464a, 0xb24e, 0x4476, 0xa5a9, 0xbf0d, 0xbf90, 0x40c4, 0x44d9, 0x43cc, 0xbf00, 0x42bd, 0x4123, 0xb0ef, 0xba5f, 0x3212, 0x26f0, 0x4357, 0xb227, 0x43ef, 0x28d3, 0x1a18, 0x1e20, 0xade4, 0x42b0, 0xae3b, 0xa4cb, 0x1e56, 0x41c0, 0x434c, 0xbf51, 0x411e, 0xbfe0, 0xba57, 0xb06f, 0x4278, 0xbadd, 0xa0b7, 0x43b7, 0x41fe, 0x4284, 0x41a9, 0x40d7, 0xb0e4, 0x4418, 0x2466, 0x401f, 0xbfa4, 0xb258, 0x1aa7, 0x427b, 0xb2ec, 0x40e4, 0x40f3, 0x1f6b, 0x4462, 0xb29d, 0xb09d, 0x3a5d, 0x43d9, 0xb253, 0x40a7, 0xbac5, 0x4193, 0x0e8b, 0x43c0, 0x4214, 0x2268, 0xb2fc, 0x24b2, 0xb20c, 0x431e, 0x31a0, 0x43de, 0xbfc7, 0xad2f, 0xb0f3, 0x1fc6, 0xb272, 0x40fe, 0xb24f, 0x4115, 0x456e, 0x3ea3, 0x4122, 0x4323, 0x41b7, 0x414b, 0x4624, 0x33c0, 0x1eb4, 0x4333, 0x419e, 0x1a49, 0x1cc2, 0x35b5, 0x423e, 0xbf7c, 0x1f87, 0xb2cd, 0x43a1, 0xbf1c, 0x4215, 0xba79, 0xbfd7, 0xbad0, 0xba62, 0x4213, 0x429a, 0xbfbb, 0x43d6, 0x4197, 0x426d, 0x43f5, 0x4267, 0x40cd, 0xb2ad, 0x4071, 0xa27f, 0x3837, 0x408f, 0x41f2, 0x4167, 0x1d86, 0xaa44, 0xbae5, 0x1f57, 0x456a, 0x45c6, 0x42fb, 0xb2bc, 0xbf21, 0x199d, 0x1f8b, 0xba71, 0x443f, 0x1192, 0x4240, 0x43c2, 0xba2b, 0x4196, 0xb242, 0x3996, 0x0844, 0x4340, 0x4691, 0xbfe4, 0x1911, 0xb0fd, 0x402d, 0x419f, 0xad1e, 0x4038, 0x3877, 0x2e52, 0xb2a3, 0x2181, 0x35e8, 0xa034, 0x4115, 0x1b67, 0x43c1, 0x1c10, 0x2cac, 0x2a71, 0xb2f6, 0xa5dc, 0x4184, 0x4013, 0x19f5, 0x40c7, 0x4085, 0xbfc8, 0x456d, 0x4235, 0xba27, 0xbac8, 0xb298, 0xb29c, 0xbf00, 0xb051, 0x42d1, 0xb220, 0xbf03, 0xa71c, 0x44c0, 0x4327, 0x195d, 0x4092, 0x3e66, 0x40d0, 0x4345, 0x42fe, 0x41f3, 0x11cf, 0x4043, 0x1c92, 0xbacc, 0xbf04, 0x406f, 0x1da6, 0xba6a, 0x4059, 0xb01b, 0x43b6, 0x3fce, 0x43ff, 0x403e, 0x43da, 0xafac, 0x409e, 0x2481, 0x4148, 0x439e, 0x4220, 0x44a2, 0x437c, 0xbf3f, 0xb24d, 0x0870, 0x1cbd, 0x41bc, 0x4035, 0xb27f, 0xbf0a, 0x411c, 0x40f0, 0x1740, 0x4449, 0x4254, 0x430e, 0xb209, 0x41b6, 0x43f3, 0xb244, 0xbf70, 0x19bf, 0x412d, 0xa727, 0x1c54, 0x41e4, 0x43ee, 0xb093, 0xbf2b, 0xba16, 0x4063, 0x1e36, 0x35fc, 0xbae6, 0x4198, 0xbfb5, 0x01d4, 0x3182, 0x1fe1, 0x40f2, 0xbfc9, 0xb248, 0x2caa, 0x36f3, 0x40ac, 0x18b3, 0xb2a0, 0x43bc, 0xbfc0, 0xbf81, 0xb044, 0x43e6, 0x1fc6, 0xa96e, 0xb2fd, 0xa63b, 0xb002, 0x1aa8, 0xba59, 0x4307, 0x401a, 0x3bc9, 0xb2b3, 0x0cde, 0x4183, 0x4163, 0x4493, 0x430f, 0x4302, 0x42a0, 0x1d82, 0xbfd0, 0xb21e, 0x432c, 0xbfd9, 0x30c9, 0x406e, 0xa56b, 0xb05a, 0x3184, 0xba02, 0x43a5, 0xb204, 0xb229, 0xa861, 0x0096, 0x2731, 0xbf48, 0x13cf, 0x424a, 0x4564, 0xb2e8, 0x1c0d, 0x03f4, 0x434c, 0xb051, 0x0c36, 0x4286, 0xb2a2, 0xb082, 0x11ca, 0x195d, 0x35c8, 0xa2bb, 0x4649, 0x41a1, 0x423c, 0x458e, 0xb28a, 0xb0e0, 0x1dea, 0x365e, 0xbfdc, 0x33a6, 0xba77, 0x4318, 0x09c2, 0xbf9e, 0x1d19, 0x1660, 0x4213, 0x3a84, 0x1c5a, 0x1e48, 0x4174, 0x4585, 0x1cb4, 0xbf3f, 0x1280, 0x4215, 0x4036, 0x43f3, 0x4361, 0x4119, 0xb26a, 0x40a1, 0xb0e1, 0x4609, 0x3d49, 0x3257, 0xb2c3, 0xbfc0, 0x41c0, 0x41ff, 0x40ff, 0x3cec, 0x1c4c, 0x4217, 0xb20e, 0x411c, 0xb07c, 0x41ce, 0xbf79, 0x4349, 0x4392, 0x1b61, 0xba4f, 0x415e, 0x3dc1, 0x1623, 0xb0d5, 0x4099, 0x41c4, 0xbf0d, 0x1e73, 0x43e9, 0x4461, 0xb2ab, 0xba3a, 0x43a1, 0x4083, 0x428c, 0x4277, 0x0587, 0xb29d, 0xae40, 0xbad2, 0x42ad, 0x45e1, 0x407a, 0x4290, 0x409c, 0x42b5, 0x4001, 0xb2af, 0x25ef, 0x32ea, 0x1ad7, 0xbfc7, 0x42a0, 0x1cf5, 0x3c74, 0xbf00, 0x41f7, 0xb270, 0x4009, 0xaf02, 0x4331, 0x4627, 0x42ac, 0x4020, 0xbfb3, 0x42c2, 0xa284, 0xab3b, 0x40b2, 0x4319, 0xb051, 0x42cc, 0xb0ae, 0x206b, 0x413b, 0xb241, 0x2001, 0xb2b6, 0xbfa2, 0x408d, 0x34d3, 0x43db, 0xba01, 0x1a1f, 0x4396, 0x42b9, 0x4335, 0xa054, 0xa317, 0x1c89, 0x4186, 0xb01f, 0xba56, 0x4616, 0xb204, 0xb24e, 0x028d, 0x41d0, 0xb217, 0x2943, 0x402d, 0x1de0, 0x1988, 0xba51, 0xbfdd, 0xa8d1, 0x41d9, 0x40e2, 0x441a, 0x41fc, 0x4018, 0x4354, 0x430c, 0x404a, 0xb2a3, 0x42dc, 0xb230, 0xa56c, 0xbf05, 0x4121, 0x434e, 0xbae3, 0x401c, 0x2b71, 0xb2bb, 0x43b2, 0x084a, 0x19e1, 0x1f23, 0x444a, 0x40cf, 0xbf21, 0x41ef, 0xb243, 0x43ab, 0x404d, 0xb229, 0x00d5, 0xb2ce, 0x0a30, 0x41f0, 0x1c86, 0x419b, 0x1f9f, 0xa91e, 0x4164, 0xb0a2, 0x318d, 0x414a, 0xa788, 0xbf60, 0x42aa, 0x432f, 0x1754, 0xba1d, 0x4148, 0xbf0e, 0x44bc, 0xba0e, 0xabb9, 0x18ad, 0x0df7, 0x46e3, 0xbad6, 0x432d, 0x42c3, 0xb21e, 0x1ee1, 0x43be, 0x437d, 0xb23d, 0x43a1, 0x42cb, 0x0e87, 0xb226, 0xba14, 0x1cd1, 0x0971, 0x1a7d, 0x2824, 0x40bb, 0xb2bb, 0x0c39, 0xbf9f, 0xb2a2, 0x43b1, 0x0463, 0x426a, 0x18bb, 0xba13, 0x4311, 0xabcc, 0xba1e, 0x41d1, 0x3d05, 0x43f5, 0xafc8, 0x3d69, 0x405e, 0x38ae, 0xa74e, 0x401b, 0x417b, 0x378f, 0x4204, 0xbf60, 0x1c69, 0x378e, 0x0c89, 0xbfb4, 0xbfc0, 0xb235, 0x4032, 0xb218, 0x4011, 0x4188, 0x3b23, 0x4277, 0x186e, 0x3f07, 0x3860, 0x44f5, 0x46ac, 0xb019, 0x42fc, 0x41ef, 0x2835, 0x45e4, 0xbf77, 0x4038, 0x2bca, 0x42fc, 0x4303, 0xbad5, 0x00fc, 0x197c, 0x2b44, 0x39e8, 0xb2aa, 0x4674, 0xa0f7, 0xb2b3, 0xa01d, 0x1b99, 0x429e, 0x101a, 0x41c5, 0xb085, 0x4320, 0x3520, 0x1c04, 0x4283, 0x420c, 0x3cf3, 0x42f2, 0x414f, 0xb2c6, 0xbfdf, 0x41db, 0x4139, 0x18e3, 0xba4c, 0x43b7, 0xb0c2, 0x051f, 0x42cc, 0x4300, 0x1caf, 0x1ef3, 0x417a, 0x1aef, 0xbfa1, 0x43d4, 0x18cd, 0xb24c, 0x2610, 0xb22b, 0x4355, 0xb213, 0x1c9b, 0xb266, 0xbf82, 0x422b, 0xb048, 0x03e0, 0x4312, 0x4325, 0xa9c3, 0x43a1, 0xb083, 0x295f, 0x4257, 0xb221, 0x1ab7, 0xba30, 0x43b0, 0x27d6, 0x03ce, 0x403e, 0x4247, 0x1a77, 0x179e, 0x1ecd, 0x42b2, 0x1fcb, 0x3acb, 0xbf93, 0x1fdb, 0xb06b, 0xb2ec, 0x4116, 0xbad3, 0x0437, 0xb209, 0x2cc6, 0x1355, 0x402d, 0x4424, 0xbff0, 0xb0df, 0xb2ae, 0x4373, 0xbf75, 0x448c, 0x1c21, 0x1ebf, 0x40f4, 0x427d, 0x417f, 0xb205, 0x40fb, 0x406a, 0xba49, 0x40b8, 0xba45, 0x45d0, 0x419a, 0x41d2, 0x43c6, 0x1ada, 0x42bb, 0x44dd, 0xbf87, 0x1c48, 0x1116, 0x02ee, 0x41db, 0xb225, 0x3137, 0x0f02, 0xaf6e, 0x1ba4, 0x4085, 0xb2fd, 0x4699, 0xbf70, 0x4401, 0x03f6, 0xb0d6, 0xa069, 0x42f2, 0x1a31, 0x1c36, 0x421c, 0x403f, 0x3545, 0x1f3f, 0x4255, 0x1cae, 0xb0ef, 0x3f75, 0x41bc, 0xbfde, 0x40f2, 0x42cc, 0x1dbe, 0xb240, 0xb00b, 0x0f1b, 0xba61, 0x41da, 0x424a, 0xba4b, 0xbf0d, 0x2f8d, 0x418f, 0x189f, 0xb045, 0xa835, 0x2001, 0x28d8, 0xb2e9, 0x4018, 0x441d, 0xb0ff, 0x156f, 0xb240, 0x1d6c, 0xb209, 0xb067, 0xbf60, 0x4280, 0xbaee, 0xbafb, 0x41dd, 0xb040, 0xa92d, 0xbfac, 0x00f2, 0x1d85, 0x320b, 0xb2f5, 0x415e, 0x42d2, 0xb23b, 0x0f07, 0x436d, 0x4142, 0xb2fa, 0xb218, 0xba0a, 0x4088, 0xbf80, 0x19da, 0x1356, 0x43c8, 0x2171, 0x43e1, 0xbfda, 0x4215, 0x42bd, 0x4364, 0x424e, 0xb228, 0x4009, 0xbaee, 0x1bce, 0x0502, 0xb2ae, 0xb217, 0xa6c0, 0x2900, 0x4033, 0x40e8, 0xba45, 0x2caf, 0xb21f, 0xbae6, 0x37ae, 0x2684, 0x43c8, 0x31de, 0xb26f, 0x40eb, 0x4293, 0xb209, 0xbf0e, 0x41ea, 0x4290, 0x40c1, 0xb282, 0x1aa9, 0x28c0, 0x1b96, 0x1d5d, 0x13c2, 0x437f, 0xafd5, 0x41fa, 0xba21, 0x0efd, 0x412a, 0xb08c, 0x4011, 0x46ed, 0xbaee, 0x0121, 0xb250, 0x4075, 0x4386, 0x41a3, 0xbfbe, 0x21d1, 0x34ae, 0x2fce, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xebd6df8c, 0x38bf55a7, 0xab137ca7, 0x96f9989a, 0x94c70e1c, 0x27865596, 0x517c3a55, 0x121297cb, 0xb921216d, 0x142c6285, 0xbbeafbb7, 0x8e13fca7, 0x38c24dd1, 0x08c88e6c, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x00000061, 0x000000d1, 0x0ffffc61, 0xbd9eb746, 0x42616367, 0x00000303, 0x00000300, 0x1cf4f061, 0xb921216d, 0x00000000, 0x142c6306, 0x142c6285, 0x0000589c, 0x1cf4ecdd, 0x00000000, 0x200001d0 }, + Instructions = [0x42c2, 0x2d74, 0x4116, 0x4185, 0x40fd, 0x428a, 0x1707, 0x406c, 0xb298, 0xb252, 0x41ac, 0x1a53, 0xba5c, 0x411c, 0x4253, 0x3541, 0xbf27, 0x015a, 0xba76, 0x1226, 0x4251, 0xba16, 0xbfd0, 0x352c, 0x417b, 0xb009, 0x34c2, 0x41a9, 0x1d34, 0x438e, 0xb083, 0xb24a, 0x41d0, 0x1f5b, 0x1c0b, 0x4322, 0x1ae0, 0x234a, 0xbfd2, 0x43c9, 0x4212, 0x1556, 0x456d, 0x07bd, 0x4336, 0x43ab, 0xba1f, 0x3fd4, 0x4210, 0x41e2, 0x18d9, 0x1d4d, 0x4572, 0x4199, 0xb25e, 0xb207, 0x43fd, 0x3dee, 0x4382, 0x42fb, 0xb0cc, 0xba09, 0x2beb, 0x00e1, 0xba2a, 0xb068, 0xbf31, 0x40f0, 0x3c42, 0xb236, 0xb274, 0x44da, 0xa2d8, 0xb211, 0xba22, 0x43f8, 0x4102, 0x42e7, 0x46ca, 0x24ab, 0x4423, 0xb0f0, 0xb221, 0x421f, 0xb20d, 0x1dbe, 0x460c, 0x4040, 0xb026, 0xba47, 0x404d, 0xb22b, 0xbfb3, 0x43a8, 0x107b, 0xbf60, 0xb2d0, 0x430a, 0x3e97, 0xb272, 0x1c2b, 0x42b5, 0x4053, 0xb286, 0x42e0, 0xba44, 0x4114, 0x421c, 0xb2bf, 0x1eb5, 0x41de, 0x4097, 0xb273, 0x4121, 0x198c, 0xb281, 0xb03c, 0x409c, 0xbf46, 0xb2db, 0x443a, 0x41bf, 0xb244, 0x43a6, 0xaa45, 0xb03b, 0x43c8, 0x1d75, 0x400b, 0x1c22, 0xbae4, 0x0c72, 0x4130, 0xbae0, 0x46cc, 0xbfb1, 0x43ad, 0xba49, 0x41c2, 0x0327, 0x4027, 0x41ff, 0x4085, 0xbfcb, 0x412a, 0x1157, 0x43ab, 0xb23c, 0xb278, 0x421c, 0x416c, 0x4173, 0x43b1, 0x41c4, 0x40e9, 0x420e, 0x1bdf, 0xbfd0, 0x4672, 0xba6d, 0x07d1, 0x43c0, 0xb2aa, 0x40d1, 0x41d4, 0xa179, 0x44b2, 0xb052, 0x464a, 0xb24e, 0x4476, 0xa5a9, 0xbf0d, 0xbf90, 0x40c4, 0x44d9, 0x43cc, 0xbf00, 0x42bd, 0x4123, 0xb0ef, 0xba5f, 0x3212, 0x26f0, 0x4357, 0xb227, 0x43ef, 0x28d3, 0x1a18, 0x1e20, 0xade4, 0x42b0, 0xae3b, 0xa4cb, 0x1e56, 0x41c0, 0x434c, 0xbf51, 0x411e, 0xbfe0, 0xba57, 0xb06f, 0x4278, 0xbadd, 0xa0b7, 0x43b7, 0x41fe, 0x4284, 0x41a9, 0x40d7, 0xb0e4, 0x4418, 0x2466, 0x401f, 0xbfa4, 0xb258, 0x1aa7, 0x427b, 0xb2ec, 0x40e4, 0x40f3, 0x1f6b, 0x4462, 0xb29d, 0xb09d, 0x3a5d, 0x43d9, 0xb253, 0x40a7, 0xbac5, 0x4193, 0x0e8b, 0x43c0, 0x4214, 0x2268, 0xb2fc, 0x24b2, 0xb20c, 0x431e, 0x31a0, 0x43de, 0xbfc7, 0xad2f, 0xb0f3, 0x1fc6, 0xb272, 0x40fe, 0xb24f, 0x4115, 0x456e, 0x3ea3, 0x4122, 0x4323, 0x41b7, 0x414b, 0x4624, 0x33c0, 0x1eb4, 0x4333, 0x419e, 0x1a49, 0x1cc2, 0x35b5, 0x423e, 0xbf7c, 0x1f87, 0xb2cd, 0x43a1, 0xbf1c, 0x4215, 0xba79, 0xbfd7, 0xbad0, 0xba62, 0x4213, 0x429a, 0xbfbb, 0x43d6, 0x4197, 0x426d, 0x43f5, 0x4267, 0x40cd, 0xb2ad, 0x4071, 0xa27f, 0x3837, 0x408f, 0x41f2, 0x4167, 0x1d86, 0xaa44, 0xbae5, 0x1f57, 0x456a, 0x45c6, 0x42fb, 0xb2bc, 0xbf21, 0x199d, 0x1f8b, 0xba71, 0x443f, 0x1192, 0x4240, 0x43c2, 0xba2b, 0x4196, 0xb242, 0x3996, 0x0844, 0x4340, 0x4691, 0xbfe4, 0x1911, 0xb0fd, 0x402d, 0x419f, 0xad1e, 0x4038, 0x3877, 0x2e52, 0xb2a3, 0x2181, 0x35e8, 0xa034, 0x4115, 0x1b67, 0x43c1, 0x1c10, 0x2cac, 0x2a71, 0xb2f6, 0xa5dc, 0x4184, 0x4013, 0x19f5, 0x40c7, 0x4085, 0xbfc8, 0x456d, 0x4235, 0xba27, 0xbac8, 0xb298, 0xb29c, 0xbf00, 0xb051, 0x42d1, 0xb220, 0xbf03, 0xa71c, 0x44c0, 0x4327, 0x195d, 0x4092, 0x3e66, 0x40d0, 0x4345, 0x42fe, 0x41f3, 0x11cf, 0x4043, 0x1c92, 0xbacc, 0xbf04, 0x406f, 0x1da6, 0xba6a, 0x4059, 0xb01b, 0x43b6, 0x3fce, 0x43ff, 0x403e, 0x43da, 0xafac, 0x409e, 0x2481, 0x4148, 0x439e, 0x4220, 0x44a2, 0x437c, 0xbf3f, 0xb24d, 0x0870, 0x1cbd, 0x41bc, 0x4035, 0xb27f, 0xbf0a, 0x411c, 0x40f0, 0x1740, 0x4449, 0x4254, 0x430e, 0xb209, 0x41b6, 0x43f3, 0xb244, 0xbf70, 0x19bf, 0x412d, 0xa727, 0x1c54, 0x41e4, 0x43ee, 0xb093, 0xbf2b, 0xba16, 0x4063, 0x1e36, 0x35fc, 0xbae6, 0x4198, 0xbfb5, 0x01d4, 0x3182, 0x1fe1, 0x40f2, 0xbfc9, 0xb248, 0x2caa, 0x36f3, 0x40ac, 0x18b3, 0xb2a0, 0x43bc, 0xbfc0, 0xbf81, 0xb044, 0x43e6, 0x1fc6, 0xa96e, 0xb2fd, 0xa63b, 0xb002, 0x1aa8, 0xba59, 0x4307, 0x401a, 0x3bc9, 0xb2b3, 0x0cde, 0x4183, 0x4163, 0x4493, 0x430f, 0x4302, 0x42a0, 0x1d82, 0xbfd0, 0xb21e, 0x432c, 0xbfd9, 0x30c9, 0x406e, 0xa56b, 0xb05a, 0x3184, 0xba02, 0x43a5, 0xb204, 0xb229, 0xa861, 0x0096, 0x2731, 0xbf48, 0x13cf, 0x424a, 0x4564, 0xb2e8, 0x1c0d, 0x03f4, 0x434c, 0xb051, 0x0c36, 0x4286, 0xb2a2, 0xb082, 0x11ca, 0x195d, 0x35c8, 0xa2bb, 0x4649, 0x41a1, 0x423c, 0x458e, 0xb28a, 0xb0e0, 0x1dea, 0x365e, 0xbfdc, 0x33a6, 0xba77, 0x4318, 0x09c2, 0xbf9e, 0x1d19, 0x1660, 0x4213, 0x3a84, 0x1c5a, 0x1e48, 0x4174, 0x4585, 0x1cb4, 0xbf3f, 0x1280, 0x4215, 0x4036, 0x43f3, 0x4361, 0x4119, 0xb26a, 0x40a1, 0xb0e1, 0x4609, 0x3d49, 0x3257, 0xb2c3, 0xbfc0, 0x41c0, 0x41ff, 0x40ff, 0x3cec, 0x1c4c, 0x4217, 0xb20e, 0x411c, 0xb07c, 0x41ce, 0xbf79, 0x4349, 0x4392, 0x1b61, 0xba4f, 0x415e, 0x3dc1, 0x1623, 0xb0d5, 0x4099, 0x41c4, 0xbf0d, 0x1e73, 0x43e9, 0x4461, 0xb2ab, 0xba3a, 0x43a1, 0x4083, 0x428c, 0x4277, 0x0587, 0xb29d, 0xae40, 0xbad2, 0x42ad, 0x45e1, 0x407a, 0x4290, 0x409c, 0x42b5, 0x4001, 0xb2af, 0x25ef, 0x32ea, 0x1ad7, 0xbfc7, 0x42a0, 0x1cf5, 0x3c74, 0xbf00, 0x41f7, 0xb270, 0x4009, 0xaf02, 0x4331, 0x4627, 0x42ac, 0x4020, 0xbfb3, 0x42c2, 0xa284, 0xab3b, 0x40b2, 0x4319, 0xb051, 0x42cc, 0xb0ae, 0x206b, 0x413b, 0xb241, 0x2001, 0xb2b6, 0xbfa2, 0x408d, 0x34d3, 0x43db, 0xba01, 0x1a1f, 0x4396, 0x42b9, 0x4335, 0xa054, 0xa317, 0x1c89, 0x4186, 0xb01f, 0xba56, 0x4616, 0xb204, 0xb24e, 0x028d, 0x41d0, 0xb217, 0x2943, 0x402d, 0x1de0, 0x1988, 0xba51, 0xbfdd, 0xa8d1, 0x41d9, 0x40e2, 0x441a, 0x41fc, 0x4018, 0x4354, 0x430c, 0x404a, 0xb2a3, 0x42dc, 0xb230, 0xa56c, 0xbf05, 0x4121, 0x434e, 0xbae3, 0x401c, 0x2b71, 0xb2bb, 0x43b2, 0x084a, 0x19e1, 0x1f23, 0x444a, 0x40cf, 0xbf21, 0x41ef, 0xb243, 0x43ab, 0x404d, 0xb229, 0x00d5, 0xb2ce, 0x0a30, 0x41f0, 0x1c86, 0x419b, 0x1f9f, 0xa91e, 0x4164, 0xb0a2, 0x318d, 0x414a, 0xa788, 0xbf60, 0x42aa, 0x432f, 0x1754, 0xba1d, 0x4148, 0xbf0e, 0x44bc, 0xba0e, 0xabb9, 0x18ad, 0x0df7, 0x46e3, 0xbad6, 0x432d, 0x42c3, 0xb21e, 0x1ee1, 0x43be, 0x437d, 0xb23d, 0x43a1, 0x42cb, 0x0e87, 0xb226, 0xba14, 0x1cd1, 0x0971, 0x1a7d, 0x2824, 0x40bb, 0xb2bb, 0x0c39, 0xbf9f, 0xb2a2, 0x43b1, 0x0463, 0x426a, 0x18bb, 0xba13, 0x4311, 0xabcc, 0xba1e, 0x41d1, 0x3d05, 0x43f5, 0xafc8, 0x3d69, 0x405e, 0x38ae, 0xa74e, 0x401b, 0x417b, 0x378f, 0x4204, 0xbf60, 0x1c69, 0x378e, 0x0c89, 0xbfb4, 0xbfc0, 0xb235, 0x4032, 0xb218, 0x4011, 0x4188, 0x3b23, 0x4277, 0x186e, 0x3f07, 0x3860, 0x44f5, 0x46ac, 0xb019, 0x42fc, 0x41ef, 0x2835, 0x45e4, 0xbf77, 0x4038, 0x2bca, 0x42fc, 0x4303, 0xbad5, 0x00fc, 0x197c, 0x2b44, 0x39e8, 0xb2aa, 0x4674, 0xa0f7, 0xb2b3, 0xa01d, 0x1b99, 0x429e, 0x101a, 0x41c5, 0xb085, 0x4320, 0x3520, 0x1c04, 0x4283, 0x420c, 0x3cf3, 0x42f2, 0x414f, 0xb2c6, 0xbfdf, 0x41db, 0x4139, 0x18e3, 0xba4c, 0x43b7, 0xb0c2, 0x051f, 0x42cc, 0x4300, 0x1caf, 0x1ef3, 0x417a, 0x1aef, 0xbfa1, 0x43d4, 0x18cd, 0xb24c, 0x2610, 0xb22b, 0x4355, 0xb213, 0x1c9b, 0xb266, 0xbf82, 0x422b, 0xb048, 0x03e0, 0x4312, 0x4325, 0xa9c3, 0x43a1, 0xb083, 0x295f, 0x4257, 0xb221, 0x1ab7, 0xba30, 0x43b0, 0x27d6, 0x03ce, 0x403e, 0x4247, 0x1a77, 0x179e, 0x1ecd, 0x42b2, 0x1fcb, 0x3acb, 0xbf93, 0x1fdb, 0xb06b, 0xb2ec, 0x4116, 0xbad3, 0x0437, 0xb209, 0x2cc6, 0x1355, 0x402d, 0x4424, 0xbff0, 0xb0df, 0xb2ae, 0x4373, 0xbf75, 0x448c, 0x1c21, 0x1ebf, 0x40f4, 0x427d, 0x417f, 0xb205, 0x40fb, 0x406a, 0xba49, 0x40b8, 0xba45, 0x45d0, 0x419a, 0x41d2, 0x43c6, 0x1ada, 0x42bb, 0x44dd, 0xbf87, 0x1c48, 0x1116, 0x02ee, 0x41db, 0xb225, 0x3137, 0x0f02, 0xaf6e, 0x1ba4, 0x4085, 0xb2fd, 0x4699, 0xbf70, 0x4401, 0x03f6, 0xb0d6, 0xa069, 0x42f2, 0x1a31, 0x1c36, 0x421c, 0x403f, 0x3545, 0x1f3f, 0x4255, 0x1cae, 0xb0ef, 0x3f75, 0x41bc, 0xbfde, 0x40f2, 0x42cc, 0x1dbe, 0xb240, 0xb00b, 0x0f1b, 0xba61, 0x41da, 0x424a, 0xba4b, 0xbf0d, 0x2f8d, 0x418f, 0x189f, 0xb045, 0xa835, 0x2001, 0x28d8, 0xb2e9, 0x4018, 0x441d, 0xb0ff, 0x156f, 0xb240, 0x1d6c, 0xb209, 0xb067, 0xbf60, 0x4280, 0xbaee, 0xbafb, 0x41dd, 0xb040, 0xa92d, 0xbfac, 0x00f2, 0x1d85, 0x320b, 0xb2f5, 0x415e, 0x42d2, 0xb23b, 0x0f07, 0x436d, 0x4142, 0xb2fa, 0xb218, 0xba0a, 0x4088, 0xbf80, 0x19da, 0x1356, 0x43c8, 0x2171, 0x43e1, 0xbfda, 0x4215, 0x42bd, 0x4364, 0x424e, 0xb228, 0x4009, 0xbaee, 0x1bce, 0x0502, 0xb2ae, 0xb217, 0xa6c0, 0x2900, 0x4033, 0x40e8, 0xba45, 0x2caf, 0xb21f, 0xbae6, 0x37ae, 0x2684, 0x43c8, 0x31de, 0xb26f, 0x40eb, 0x4293, 0xb209, 0xbf0e, 0x41ea, 0x4290, 0x40c1, 0xb282, 0x1aa9, 0x28c0, 0x1b96, 0x1d5d, 0x13c2, 0x437f, 0xafd5, 0x41fa, 0xba21, 0x0efd, 0x412a, 0xb08c, 0x4011, 0x46ed, 0xbaee, 0x0121, 0xb250, 0x4075, 0x4386, 0x41a3, 0xbfbe, 0x21d1, 0x34ae, 0x2fce, 0x4770, 0xe7fe + ], + StartRegs = [0xebd6df8c, 0x38bf55a7, 0xab137ca7, 0x96f9989a, 0x94c70e1c, 0x27865596, 0x517c3a55, 0x121297cb, 0xb921216d, 0x142c6285, 0xbbeafbb7, 0x8e13fca7, 0x38c24dd1, 0x08c88e6c, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x00000061, 0x000000d1, 0x0ffffc61, 0xbd9eb746, 0x42616367, 0x00000303, 0x00000300, 0x1cf4f061, 0xb921216d, 0x00000000, 0x142c6306, 0x142c6285, 0x0000589c, 0x1cf4ecdd, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x4338, 0x4299, 0x454c, 0x40a5, 0x4298, 0xbfa8, 0x3d94, 0x19e4, 0x345c, 0x45c0, 0x41ff, 0x1ab0, 0x19a5, 0x420a, 0x41df, 0xba39, 0x3566, 0x410a, 0x4337, 0x444a, 0x4290, 0x0663, 0xabc7, 0xa261, 0x324d, 0xbf41, 0xb222, 0x31c6, 0x10f2, 0xaee3, 0x43e0, 0x297b, 0xb284, 0x42f3, 0xbf60, 0x419e, 0x1577, 0xb2a4, 0x43a9, 0x1fcf, 0x44f2, 0x4404, 0xbaf0, 0x1f57, 0x4047, 0x1e49, 0x4187, 0xbf56, 0x40f3, 0x1380, 0x1fe3, 0x41a4, 0x4320, 0x407d, 0x428a, 0x1547, 0x439d, 0x40b0, 0x3a5b, 0x430b, 0x43f6, 0x4256, 0x195f, 0x423f, 0xb225, 0x4616, 0x4041, 0xb0c4, 0x43e0, 0xbfa6, 0xa0f5, 0xb077, 0x419f, 0xb2da, 0x1d2d, 0x40c0, 0xbfd0, 0xb243, 0x41f6, 0x41ff, 0x4390, 0x435b, 0x416e, 0x3f68, 0x0b87, 0x435d, 0xba48, 0x1af2, 0x410f, 0xa9b6, 0xbfbc, 0x4608, 0x1e08, 0x0178, 0xbfa8, 0x4019, 0xbae4, 0xb2f8, 0xa945, 0x1037, 0x421e, 0xb083, 0x422d, 0xa323, 0x34de, 0x439b, 0x407a, 0x4076, 0x4343, 0x4150, 0xb242, 0xba63, 0x302d, 0xbfd6, 0x06a7, 0x2697, 0x41d0, 0x415d, 0x4205, 0xbf70, 0x40c4, 0x1aa6, 0x42c8, 0x43b3, 0x4044, 0x4250, 0x3f43, 0x25e4, 0xbfc5, 0x19c7, 0xbf60, 0x43f1, 0xa2d9, 0xba5c, 0x4112, 0x461e, 0x1fc7, 0x1ad9, 0x425a, 0x4100, 0x2df6, 0xb284, 0x4295, 0x01fe, 0x0e8d, 0x42c2, 0x401f, 0xb277, 0xba3c, 0x4231, 0xbf43, 0x1e0b, 0x2c65, 0x12e5, 0x4119, 0x463a, 0x408e, 0x4358, 0x4356, 0x40d5, 0x4329, 0xbf71, 0x11c0, 0x0e12, 0x4022, 0x41e7, 0x467d, 0x460e, 0xb221, 0x41a2, 0x40bf, 0xbf27, 0xaeb8, 0xb2fc, 0xb0f1, 0x42ad, 0x1a47, 0x0111, 0x1a9e, 0xb04f, 0x40de, 0x4146, 0x3ad4, 0xa618, 0x408d, 0x1a2f, 0x1b24, 0x1dcd, 0xbac0, 0x3909, 0x3e34, 0x43e0, 0x4328, 0x434d, 0x4268, 0x404b, 0x1493, 0x435b, 0x45b9, 0xbfc9, 0x4439, 0x412a, 0x1de7, 0x0b4e, 0x436b, 0x4173, 0x304b, 0x447e, 0xa9c9, 0x403b, 0x42d6, 0x42a2, 0x43da, 0x1d54, 0x42eb, 0x4378, 0x464b, 0x1a7b, 0x292c, 0x3a9a, 0xbf75, 0x1ab2, 0x2b8f, 0x1db2, 0xb2d8, 0xb288, 0xbaed, 0x4202, 0x1df2, 0xb282, 0x0d5f, 0xbf05, 0x2cb7, 0xb293, 0x09e9, 0x4016, 0x403d, 0x43aa, 0x42bb, 0x4218, 0x44a0, 0x40e0, 0x4079, 0x1b6b, 0x41b3, 0x429e, 0x469c, 0x42fe, 0x1a84, 0x4481, 0xb2c7, 0xa3da, 0x42e6, 0xbfb9, 0x1f14, 0xb2ef, 0xba2b, 0x38bf, 0xadd9, 0x42fd, 0x1918, 0x1bc9, 0x0495, 0x08f9, 0x40a9, 0x3a59, 0x1821, 0x45f5, 0x4050, 0x427c, 0xb234, 0x45d0, 0xbaef, 0x43cc, 0xbfaf, 0xbad3, 0xb20a, 0xba2a, 0x43fb, 0xb26d, 0x1913, 0xb074, 0x1e82, 0x427c, 0x1bb6, 0x40d6, 0xbf04, 0xb202, 0x1ad3, 0x4041, 0xb26d, 0xb284, 0x405f, 0x1e47, 0x421f, 0x4036, 0x40e8, 0x4117, 0x414b, 0x421c, 0x40bb, 0xb2c4, 0x189b, 0xb20e, 0x4262, 0xabcd, 0xbf8c, 0xba15, 0x40ec, 0x406d, 0xb032, 0xb288, 0x2202, 0x1574, 0xb280, 0xbfa2, 0x4229, 0x0a10, 0x25cd, 0xb0bb, 0x442d, 0x41d1, 0x400e, 0x40d7, 0x41da, 0xb0f5, 0x439e, 0x1c27, 0xbfa5, 0x1037, 0xa2f5, 0x1d46, 0xbfe0, 0x4118, 0x2e5b, 0x1d76, 0xb2eb, 0x413e, 0x422e, 0x2f5d, 0xb277, 0x4255, 0x293d, 0x42ba, 0xa3c3, 0x3e34, 0xbfa9, 0x4372, 0x459b, 0xb2a6, 0xbfb0, 0x418f, 0x4039, 0x420b, 0xa411, 0x3f81, 0xbf71, 0x463b, 0x0320, 0x4136, 0xba7e, 0xa4fa, 0x41cd, 0xba36, 0xbf36, 0xb0f5, 0x415e, 0x1e0c, 0x44cb, 0xba29, 0x1e27, 0x04f0, 0x1d30, 0xbfe0, 0x41c2, 0x412d, 0xb270, 0x1d49, 0x1c0f, 0xb04c, 0x434d, 0x3c92, 0x1f4e, 0x30be, 0xade7, 0x4344, 0xba1f, 0xa02e, 0x4113, 0x1e0d, 0xb25b, 0xbfa4, 0xb001, 0x3134, 0x409f, 0x4150, 0x1b5c, 0x4007, 0xa6fa, 0x2ffd, 0x42d5, 0xba53, 0xb23f, 0x40e3, 0xb0ca, 0xa7f4, 0x18ef, 0x0936, 0x43c7, 0xbfc2, 0xab87, 0x4378, 0x3710, 0x40f6, 0x4622, 0x456a, 0x46ca, 0x46a4, 0x41b8, 0x412b, 0xba2f, 0x1e94, 0xba4e, 0xb2e4, 0x43e0, 0x1a71, 0x411d, 0x4164, 0x0b2b, 0x40bb, 0x43c1, 0x4267, 0xba1d, 0xb2ab, 0xbfc0, 0x0624, 0xbfbd, 0xb02d, 0x43e9, 0x18ad, 0x3146, 0xa882, 0x227f, 0x4382, 0x4314, 0x19cc, 0xb25d, 0x465b, 0x43c9, 0x1800, 0x4169, 0x426f, 0x427a, 0x182c, 0x41ed, 0x2dfb, 0x1239, 0x41a2, 0x1aae, 0x3887, 0x42c2, 0x4352, 0x46d2, 0x4362, 0xb27a, 0xbf5b, 0x3437, 0xb09b, 0x41fa, 0x1fa2, 0xb2ee, 0x3c06, 0x437b, 0x2315, 0x410e, 0x404e, 0xbf78, 0x4231, 0x4387, 0x4258, 0x32ba, 0xb264, 0x43c0, 0xbfc0, 0x4244, 0x46b2, 0x408a, 0xba45, 0xbf07, 0x1a65, 0x19c0, 0x448b, 0x3b5f, 0x419d, 0x4653, 0xbaf2, 0x423f, 0x4118, 0x4138, 0xbaf1, 0xb2ed, 0xb26c, 0x2947, 0x41d4, 0xb265, 0xa04c, 0x2b65, 0xba2d, 0xbad6, 0x418c, 0x3bc0, 0xb26b, 0x1ebd, 0x43e5, 0xbfd4, 0x43ae, 0xb271, 0x4226, 0xb03c, 0x409a, 0xb21f, 0x42e8, 0xbf1b, 0x449b, 0x4310, 0xb2a4, 0x245b, 0x4322, 0xa98a, 0x41eb, 0xb284, 0xb2ac, 0x410f, 0xb2cc, 0x439f, 0x437f, 0x4120, 0xba47, 0x190f, 0x4313, 0x424d, 0x36a7, 0x432a, 0x45e3, 0xb263, 0xbf13, 0xb0c7, 0x423a, 0x437b, 0x41a1, 0x42b1, 0xba59, 0x43e4, 0x40a7, 0x4679, 0x438a, 0xad17, 0x43b4, 0x1420, 0xb229, 0x42b8, 0xb2cf, 0x1a2e, 0x3665, 0x08c0, 0xbf9d, 0x32d9, 0x0937, 0xb0be, 0x43c4, 0x4220, 0x1d47, 0x40f6, 0x4373, 0x4257, 0xafdc, 0x23cf, 0x41f4, 0x3b0e, 0x40ce, 0xb230, 0xb255, 0x4664, 0x1dcb, 0xb291, 0x42fa, 0xbf91, 0x1d7c, 0xb020, 0xba72, 0x4007, 0x3978, 0x4054, 0xbaed, 0x1bf6, 0x31ff, 0x46cc, 0xa2f6, 0x3bd0, 0xba7e, 0x193e, 0xb287, 0xb031, 0xbae0, 0x40d3, 0xb0d4, 0xb0ae, 0x02d5, 0x434e, 0x403d, 0xafe6, 0x3faa, 0x411c, 0xbfbd, 0x0cd3, 0x119f, 0x4394, 0xbacc, 0xb2e1, 0x4180, 0x4351, 0xbaeb, 0x43a4, 0x43f9, 0x4138, 0x2b8b, 0x2caf, 0x413e, 0x41a8, 0xbf48, 0x42c4, 0x012d, 0x4172, 0x422d, 0xb08b, 0x4295, 0x19b4, 0x1fd9, 0x40d1, 0x45e2, 0x4228, 0x424b, 0xbad8, 0x40ee, 0x40e9, 0x439d, 0xbaef, 0xbadf, 0xbf2a, 0x40c8, 0x192c, 0x4408, 0x401c, 0x2766, 0x30bd, 0x40f5, 0x4387, 0x3c4a, 0xbf0f, 0xba2e, 0xb242, 0x4624, 0x1a7b, 0xb27e, 0xba6c, 0x4169, 0x419f, 0x406b, 0x4427, 0x0415, 0x3065, 0x4015, 0xb2eb, 0x1cdd, 0x4222, 0xb225, 0xa0ed, 0x1826, 0xba16, 0x437d, 0x0dae, 0xb0fe, 0xbfb6, 0xb256, 0x1666, 0x42df, 0x45b4, 0x0c1b, 0xba18, 0xb29b, 0x4586, 0xbf32, 0x1bfe, 0xbad5, 0x422c, 0xbf2d, 0x1cc6, 0x1e0d, 0xb0c9, 0x437c, 0x342f, 0x429d, 0x4103, 0xbf7c, 0x41a5, 0xb02f, 0x4035, 0x0a5d, 0xbac1, 0xac84, 0x4071, 0x0d2f, 0x4235, 0x4203, 0x44b8, 0x0677, 0xba51, 0xb0d1, 0xbae3, 0xae14, 0xbf49, 0xb29a, 0x41ff, 0x1298, 0x1e6a, 0xb286, 0x4156, 0x3c1e, 0x4088, 0x075d, 0x414c, 0x4343, 0x4197, 0xa990, 0xb085, 0xacb8, 0x1984, 0xbfe0, 0xa3f4, 0x423f, 0xb2e3, 0x41d6, 0x1d5d, 0xbf65, 0x407c, 0x4269, 0x348b, 0xb2af, 0x43e5, 0x4169, 0x42e6, 0x4258, 0x434b, 0xbfc0, 0x4385, 0x3551, 0x4452, 0x41fd, 0x461c, 0xb2c5, 0x1e89, 0xba0b, 0xbf00, 0xacdf, 0xb2c0, 0x4241, 0x4247, 0x421b, 0x436f, 0x43d2, 0x14e5, 0x45a5, 0xbf1b, 0x1e6b, 0x4195, 0x45f2, 0xb27b, 0x4125, 0xb29f, 0xb26e, 0x4010, 0x422a, 0xa1a0, 0xbafc, 0xaa80, 0x1c8f, 0xb06f, 0x43a8, 0x42ac, 0xbae1, 0x415f, 0x117d, 0x4339, 0xb250, 0xbfe2, 0x4263, 0xb2bd, 0x409c, 0xb269, 0x19a4, 0xbfc0, 0x0fdf, 0x41f6, 0x4621, 0x4044, 0x40f5, 0x2e6e, 0x4221, 0x46d3, 0xbf9a, 0xba60, 0x41bf, 0x424a, 0x43bf, 0xbf9c, 0x26c7, 0x4242, 0x1d65, 0xb050, 0x4612, 0xa5c5, 0x1da4, 0x43a3, 0xb0fb, 0x444d, 0xba09, 0x3649, 0x4062, 0x1293, 0xba5b, 0x2db9, 0x43dc, 0x4333, 0x1a29, 0xbf0d, 0x0c2d, 0x4306, 0x4001, 0xbf70, 0xb04a, 0x43b5, 0x32dc, 0xba2b, 0x4367, 0x412e, 0x191f, 0x1a9a, 0x4027, 0x4139, 0x1951, 0xbf00, 0x4239, 0x40e2, 0x42c2, 0x40f2, 0x0880, 0x43f8, 0x1da1, 0xbf99, 0xb245, 0x464e, 0xbaf4, 0x4220, 0x4653, 0x43b9, 0x3e09, 0xbfc5, 0xba26, 0xb287, 0x1747, 0xb231, 0xb2ff, 0x21a4, 0xba1e, 0x44b4, 0x44a3, 0x4281, 0x4113, 0x40ab, 0x02cd, 0xb0f6, 0x40c1, 0xba59, 0x42a6, 0xb2e1, 0x1ed0, 0x3728, 0xba7f, 0x425d, 0xbf82, 0x2b31, 0xb03e, 0x4133, 0x1ce6, 0x413d, 0x4027, 0xb2c5, 0x1e77, 0x424d, 0x4051, 0xa275, 0xb00b, 0x4090, 0x408c, 0xbf79, 0x0e9e, 0x0767, 0x196e, 0x424a, 0x46fa, 0x2756, 0x24c8, 0x2108, 0x09cd, 0x1b81, 0x421a, 0xb256, 0xb007, 0x0ad0, 0x40cd, 0x4114, 0x404a, 0x400e, 0x40d8, 0xbf70, 0x4476, 0x01e4, 0x40e0, 0x2e5d, 0xbf9a, 0x2d03, 0x45c2, 0xbf00, 0xb0c5, 0x4585, 0x40e6, 0x42dd, 0xbac3, 0x41c0, 0x1a33, 0x1f44, 0x4347, 0x41ec, 0x20fe, 0xbf69, 0x3e36, 0x41e0, 0xadd6, 0x1aee, 0x2879, 0xb258, 0x432a, 0x2c20, 0x1ba8, 0x0ba8, 0x4361, 0x42bc, 0x408c, 0xbf9a, 0x4127, 0x42e9, 0xba00, 0x4127, 0x0bd8, 0x421a, 0x1d0b, 0xb2c6, 0xb0b8, 0xbf65, 0x2eb1, 0x43ee, 0x43e4, 0x4103, 0xb041, 0x40e0, 0xa3f4, 0x421a, 0xb284, 0xba0c, 0xae98, 0x42b7, 0x2272, 0x1c87, 0x3cf3, 0x41c5, 0x423b, 0xb202, 0x1f4a, 0x43a6, 0x124a, 0xb20e, 0xb0b4, 0x40e4, 0x40e9, 0x4135, 0xa232, 0x18a6, 0xbf48, 0x461c, 0xba4a, 0xba16, 0xa76b, 0x4106, 0x4289, 0x43fe, 0xba65, 0x4127, 0x0a75, 0xaddb, 0x2441, 0x1904, 0x1705, 0xb2c6, 0x1503, 0xbff0, 0x43c1, 0xbf52, 0xbac9, 0xb241, 0xbf80, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x2fdaaeb9, 0xb79696f8, 0x5b75e8b3, 0xb8bc6fba, 0xcb255eac, 0xe7fd35fd, 0xddb0f0b1, 0x6a6b7524, 0x61dac898, 0x5adfbd3a, 0xe9b18555, 0xf3de49cb, 0x123c8a0c, 0x745a0959, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x00001400, 0x00000000, 0x00000000, 0x00000000, 0x00001441, 0x00000000, 0x00000000, 0x00000000, 0x61dac89a, 0x5adfbff0, 0x0000171e, 0x00000900, 0x5adfbff0, 0x745a0295, 0x00000000, 0x800001d0 }, + Instructions = [0x4338, 0x4299, 0x454c, 0x40a5, 0x4298, 0xbfa8, 0x3d94, 0x19e4, 0x345c, 0x45c0, 0x41ff, 0x1ab0, 0x19a5, 0x420a, 0x41df, 0xba39, 0x3566, 0x410a, 0x4337, 0x444a, 0x4290, 0x0663, 0xabc7, 0xa261, 0x324d, 0xbf41, 0xb222, 0x31c6, 0x10f2, 0xaee3, 0x43e0, 0x297b, 0xb284, 0x42f3, 0xbf60, 0x419e, 0x1577, 0xb2a4, 0x43a9, 0x1fcf, 0x44f2, 0x4404, 0xbaf0, 0x1f57, 0x4047, 0x1e49, 0x4187, 0xbf56, 0x40f3, 0x1380, 0x1fe3, 0x41a4, 0x4320, 0x407d, 0x428a, 0x1547, 0x439d, 0x40b0, 0x3a5b, 0x430b, 0x43f6, 0x4256, 0x195f, 0x423f, 0xb225, 0x4616, 0x4041, 0xb0c4, 0x43e0, 0xbfa6, 0xa0f5, 0xb077, 0x419f, 0xb2da, 0x1d2d, 0x40c0, 0xbfd0, 0xb243, 0x41f6, 0x41ff, 0x4390, 0x435b, 0x416e, 0x3f68, 0x0b87, 0x435d, 0xba48, 0x1af2, 0x410f, 0xa9b6, 0xbfbc, 0x4608, 0x1e08, 0x0178, 0xbfa8, 0x4019, 0xbae4, 0xb2f8, 0xa945, 0x1037, 0x421e, 0xb083, 0x422d, 0xa323, 0x34de, 0x439b, 0x407a, 0x4076, 0x4343, 0x4150, 0xb242, 0xba63, 0x302d, 0xbfd6, 0x06a7, 0x2697, 0x41d0, 0x415d, 0x4205, 0xbf70, 0x40c4, 0x1aa6, 0x42c8, 0x43b3, 0x4044, 0x4250, 0x3f43, 0x25e4, 0xbfc5, 0x19c7, 0xbf60, 0x43f1, 0xa2d9, 0xba5c, 0x4112, 0x461e, 0x1fc7, 0x1ad9, 0x425a, 0x4100, 0x2df6, 0xb284, 0x4295, 0x01fe, 0x0e8d, 0x42c2, 0x401f, 0xb277, 0xba3c, 0x4231, 0xbf43, 0x1e0b, 0x2c65, 0x12e5, 0x4119, 0x463a, 0x408e, 0x4358, 0x4356, 0x40d5, 0x4329, 0xbf71, 0x11c0, 0x0e12, 0x4022, 0x41e7, 0x467d, 0x460e, 0xb221, 0x41a2, 0x40bf, 0xbf27, 0xaeb8, 0xb2fc, 0xb0f1, 0x42ad, 0x1a47, 0x0111, 0x1a9e, 0xb04f, 0x40de, 0x4146, 0x3ad4, 0xa618, 0x408d, 0x1a2f, 0x1b24, 0x1dcd, 0xbac0, 0x3909, 0x3e34, 0x43e0, 0x4328, 0x434d, 0x4268, 0x404b, 0x1493, 0x435b, 0x45b9, 0xbfc9, 0x4439, 0x412a, 0x1de7, 0x0b4e, 0x436b, 0x4173, 0x304b, 0x447e, 0xa9c9, 0x403b, 0x42d6, 0x42a2, 0x43da, 0x1d54, 0x42eb, 0x4378, 0x464b, 0x1a7b, 0x292c, 0x3a9a, 0xbf75, 0x1ab2, 0x2b8f, 0x1db2, 0xb2d8, 0xb288, 0xbaed, 0x4202, 0x1df2, 0xb282, 0x0d5f, 0xbf05, 0x2cb7, 0xb293, 0x09e9, 0x4016, 0x403d, 0x43aa, 0x42bb, 0x4218, 0x44a0, 0x40e0, 0x4079, 0x1b6b, 0x41b3, 0x429e, 0x469c, 0x42fe, 0x1a84, 0x4481, 0xb2c7, 0xa3da, 0x42e6, 0xbfb9, 0x1f14, 0xb2ef, 0xba2b, 0x38bf, 0xadd9, 0x42fd, 0x1918, 0x1bc9, 0x0495, 0x08f9, 0x40a9, 0x3a59, 0x1821, 0x45f5, 0x4050, 0x427c, 0xb234, 0x45d0, 0xbaef, 0x43cc, 0xbfaf, 0xbad3, 0xb20a, 0xba2a, 0x43fb, 0xb26d, 0x1913, 0xb074, 0x1e82, 0x427c, 0x1bb6, 0x40d6, 0xbf04, 0xb202, 0x1ad3, 0x4041, 0xb26d, 0xb284, 0x405f, 0x1e47, 0x421f, 0x4036, 0x40e8, 0x4117, 0x414b, 0x421c, 0x40bb, 0xb2c4, 0x189b, 0xb20e, 0x4262, 0xabcd, 0xbf8c, 0xba15, 0x40ec, 0x406d, 0xb032, 0xb288, 0x2202, 0x1574, 0xb280, 0xbfa2, 0x4229, 0x0a10, 0x25cd, 0xb0bb, 0x442d, 0x41d1, 0x400e, 0x40d7, 0x41da, 0xb0f5, 0x439e, 0x1c27, 0xbfa5, 0x1037, 0xa2f5, 0x1d46, 0xbfe0, 0x4118, 0x2e5b, 0x1d76, 0xb2eb, 0x413e, 0x422e, 0x2f5d, 0xb277, 0x4255, 0x293d, 0x42ba, 0xa3c3, 0x3e34, 0xbfa9, 0x4372, 0x459b, 0xb2a6, 0xbfb0, 0x418f, 0x4039, 0x420b, 0xa411, 0x3f81, 0xbf71, 0x463b, 0x0320, 0x4136, 0xba7e, 0xa4fa, 0x41cd, 0xba36, 0xbf36, 0xb0f5, 0x415e, 0x1e0c, 0x44cb, 0xba29, 0x1e27, 0x04f0, 0x1d30, 0xbfe0, 0x41c2, 0x412d, 0xb270, 0x1d49, 0x1c0f, 0xb04c, 0x434d, 0x3c92, 0x1f4e, 0x30be, 0xade7, 0x4344, 0xba1f, 0xa02e, 0x4113, 0x1e0d, 0xb25b, 0xbfa4, 0xb001, 0x3134, 0x409f, 0x4150, 0x1b5c, 0x4007, 0xa6fa, 0x2ffd, 0x42d5, 0xba53, 0xb23f, 0x40e3, 0xb0ca, 0xa7f4, 0x18ef, 0x0936, 0x43c7, 0xbfc2, 0xab87, 0x4378, 0x3710, 0x40f6, 0x4622, 0x456a, 0x46ca, 0x46a4, 0x41b8, 0x412b, 0xba2f, 0x1e94, 0xba4e, 0xb2e4, 0x43e0, 0x1a71, 0x411d, 0x4164, 0x0b2b, 0x40bb, 0x43c1, 0x4267, 0xba1d, 0xb2ab, 0xbfc0, 0x0624, 0xbfbd, 0xb02d, 0x43e9, 0x18ad, 0x3146, 0xa882, 0x227f, 0x4382, 0x4314, 0x19cc, 0xb25d, 0x465b, 0x43c9, 0x1800, 0x4169, 0x426f, 0x427a, 0x182c, 0x41ed, 0x2dfb, 0x1239, 0x41a2, 0x1aae, 0x3887, 0x42c2, 0x4352, 0x46d2, 0x4362, 0xb27a, 0xbf5b, 0x3437, 0xb09b, 0x41fa, 0x1fa2, 0xb2ee, 0x3c06, 0x437b, 0x2315, 0x410e, 0x404e, 0xbf78, 0x4231, 0x4387, 0x4258, 0x32ba, 0xb264, 0x43c0, 0xbfc0, 0x4244, 0x46b2, 0x408a, 0xba45, 0xbf07, 0x1a65, 0x19c0, 0x448b, 0x3b5f, 0x419d, 0x4653, 0xbaf2, 0x423f, 0x4118, 0x4138, 0xbaf1, 0xb2ed, 0xb26c, 0x2947, 0x41d4, 0xb265, 0xa04c, 0x2b65, 0xba2d, 0xbad6, 0x418c, 0x3bc0, 0xb26b, 0x1ebd, 0x43e5, 0xbfd4, 0x43ae, 0xb271, 0x4226, 0xb03c, 0x409a, 0xb21f, 0x42e8, 0xbf1b, 0x449b, 0x4310, 0xb2a4, 0x245b, 0x4322, 0xa98a, 0x41eb, 0xb284, 0xb2ac, 0x410f, 0xb2cc, 0x439f, 0x437f, 0x4120, 0xba47, 0x190f, 0x4313, 0x424d, 0x36a7, 0x432a, 0x45e3, 0xb263, 0xbf13, 0xb0c7, 0x423a, 0x437b, 0x41a1, 0x42b1, 0xba59, 0x43e4, 0x40a7, 0x4679, 0x438a, 0xad17, 0x43b4, 0x1420, 0xb229, 0x42b8, 0xb2cf, 0x1a2e, 0x3665, 0x08c0, 0xbf9d, 0x32d9, 0x0937, 0xb0be, 0x43c4, 0x4220, 0x1d47, 0x40f6, 0x4373, 0x4257, 0xafdc, 0x23cf, 0x41f4, 0x3b0e, 0x40ce, 0xb230, 0xb255, 0x4664, 0x1dcb, 0xb291, 0x42fa, 0xbf91, 0x1d7c, 0xb020, 0xba72, 0x4007, 0x3978, 0x4054, 0xbaed, 0x1bf6, 0x31ff, 0x46cc, 0xa2f6, 0x3bd0, 0xba7e, 0x193e, 0xb287, 0xb031, 0xbae0, 0x40d3, 0xb0d4, 0xb0ae, 0x02d5, 0x434e, 0x403d, 0xafe6, 0x3faa, 0x411c, 0xbfbd, 0x0cd3, 0x119f, 0x4394, 0xbacc, 0xb2e1, 0x4180, 0x4351, 0xbaeb, 0x43a4, 0x43f9, 0x4138, 0x2b8b, 0x2caf, 0x413e, 0x41a8, 0xbf48, 0x42c4, 0x012d, 0x4172, 0x422d, 0xb08b, 0x4295, 0x19b4, 0x1fd9, 0x40d1, 0x45e2, 0x4228, 0x424b, 0xbad8, 0x40ee, 0x40e9, 0x439d, 0xbaef, 0xbadf, 0xbf2a, 0x40c8, 0x192c, 0x4408, 0x401c, 0x2766, 0x30bd, 0x40f5, 0x4387, 0x3c4a, 0xbf0f, 0xba2e, 0xb242, 0x4624, 0x1a7b, 0xb27e, 0xba6c, 0x4169, 0x419f, 0x406b, 0x4427, 0x0415, 0x3065, 0x4015, 0xb2eb, 0x1cdd, 0x4222, 0xb225, 0xa0ed, 0x1826, 0xba16, 0x437d, 0x0dae, 0xb0fe, 0xbfb6, 0xb256, 0x1666, 0x42df, 0x45b4, 0x0c1b, 0xba18, 0xb29b, 0x4586, 0xbf32, 0x1bfe, 0xbad5, 0x422c, 0xbf2d, 0x1cc6, 0x1e0d, 0xb0c9, 0x437c, 0x342f, 0x429d, 0x4103, 0xbf7c, 0x41a5, 0xb02f, 0x4035, 0x0a5d, 0xbac1, 0xac84, 0x4071, 0x0d2f, 0x4235, 0x4203, 0x44b8, 0x0677, 0xba51, 0xb0d1, 0xbae3, 0xae14, 0xbf49, 0xb29a, 0x41ff, 0x1298, 0x1e6a, 0xb286, 0x4156, 0x3c1e, 0x4088, 0x075d, 0x414c, 0x4343, 0x4197, 0xa990, 0xb085, 0xacb8, 0x1984, 0xbfe0, 0xa3f4, 0x423f, 0xb2e3, 0x41d6, 0x1d5d, 0xbf65, 0x407c, 0x4269, 0x348b, 0xb2af, 0x43e5, 0x4169, 0x42e6, 0x4258, 0x434b, 0xbfc0, 0x4385, 0x3551, 0x4452, 0x41fd, 0x461c, 0xb2c5, 0x1e89, 0xba0b, 0xbf00, 0xacdf, 0xb2c0, 0x4241, 0x4247, 0x421b, 0x436f, 0x43d2, 0x14e5, 0x45a5, 0xbf1b, 0x1e6b, 0x4195, 0x45f2, 0xb27b, 0x4125, 0xb29f, 0xb26e, 0x4010, 0x422a, 0xa1a0, 0xbafc, 0xaa80, 0x1c8f, 0xb06f, 0x43a8, 0x42ac, 0xbae1, 0x415f, 0x117d, 0x4339, 0xb250, 0xbfe2, 0x4263, 0xb2bd, 0x409c, 0xb269, 0x19a4, 0xbfc0, 0x0fdf, 0x41f6, 0x4621, 0x4044, 0x40f5, 0x2e6e, 0x4221, 0x46d3, 0xbf9a, 0xba60, 0x41bf, 0x424a, 0x43bf, 0xbf9c, 0x26c7, 0x4242, 0x1d65, 0xb050, 0x4612, 0xa5c5, 0x1da4, 0x43a3, 0xb0fb, 0x444d, 0xba09, 0x3649, 0x4062, 0x1293, 0xba5b, 0x2db9, 0x43dc, 0x4333, 0x1a29, 0xbf0d, 0x0c2d, 0x4306, 0x4001, 0xbf70, 0xb04a, 0x43b5, 0x32dc, 0xba2b, 0x4367, 0x412e, 0x191f, 0x1a9a, 0x4027, 0x4139, 0x1951, 0xbf00, 0x4239, 0x40e2, 0x42c2, 0x40f2, 0x0880, 0x43f8, 0x1da1, 0xbf99, 0xb245, 0x464e, 0xbaf4, 0x4220, 0x4653, 0x43b9, 0x3e09, 0xbfc5, 0xba26, 0xb287, 0x1747, 0xb231, 0xb2ff, 0x21a4, 0xba1e, 0x44b4, 0x44a3, 0x4281, 0x4113, 0x40ab, 0x02cd, 0xb0f6, 0x40c1, 0xba59, 0x42a6, 0xb2e1, 0x1ed0, 0x3728, 0xba7f, 0x425d, 0xbf82, 0x2b31, 0xb03e, 0x4133, 0x1ce6, 0x413d, 0x4027, 0xb2c5, 0x1e77, 0x424d, 0x4051, 0xa275, 0xb00b, 0x4090, 0x408c, 0xbf79, 0x0e9e, 0x0767, 0x196e, 0x424a, 0x46fa, 0x2756, 0x24c8, 0x2108, 0x09cd, 0x1b81, 0x421a, 0xb256, 0xb007, 0x0ad0, 0x40cd, 0x4114, 0x404a, 0x400e, 0x40d8, 0xbf70, 0x4476, 0x01e4, 0x40e0, 0x2e5d, 0xbf9a, 0x2d03, 0x45c2, 0xbf00, 0xb0c5, 0x4585, 0x40e6, 0x42dd, 0xbac3, 0x41c0, 0x1a33, 0x1f44, 0x4347, 0x41ec, 0x20fe, 0xbf69, 0x3e36, 0x41e0, 0xadd6, 0x1aee, 0x2879, 0xb258, 0x432a, 0x2c20, 0x1ba8, 0x0ba8, 0x4361, 0x42bc, 0x408c, 0xbf9a, 0x4127, 0x42e9, 0xba00, 0x4127, 0x0bd8, 0x421a, 0x1d0b, 0xb2c6, 0xb0b8, 0xbf65, 0x2eb1, 0x43ee, 0x43e4, 0x4103, 0xb041, 0x40e0, 0xa3f4, 0x421a, 0xb284, 0xba0c, 0xae98, 0x42b7, 0x2272, 0x1c87, 0x3cf3, 0x41c5, 0x423b, 0xb202, 0x1f4a, 0x43a6, 0x124a, 0xb20e, 0xb0b4, 0x40e4, 0x40e9, 0x4135, 0xa232, 0x18a6, 0xbf48, 0x461c, 0xba4a, 0xba16, 0xa76b, 0x4106, 0x4289, 0x43fe, 0xba65, 0x4127, 0x0a75, 0xaddb, 0x2441, 0x1904, 0x1705, 0xb2c6, 0x1503, 0xbff0, 0x43c1, 0xbf52, 0xbac9, 0xb241, 0xbf80, 0x4770, 0xe7fe + ], + StartRegs = [0x2fdaaeb9, 0xb79696f8, 0x5b75e8b3, 0xb8bc6fba, 0xcb255eac, 0xe7fd35fd, 0xddb0f0b1, 0x6a6b7524, 0x61dac898, 0x5adfbd3a, 0xe9b18555, 0xf3de49cb, 0x123c8a0c, 0x745a0959, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x00001400, 0x00000000, 0x00000000, 0x00000000, 0x00001441, 0x00000000, 0x00000000, 0x00000000, 0x61dac89a, 0x5adfbff0, 0x0000171e, 0x00000900, 0x5adfbff0, 0x745a0295, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x4177, 0x1819, 0x2414, 0x1b72, 0x43dc, 0xbf80, 0xba41, 0xa052, 0xb20b, 0xb083, 0xa090, 0x4329, 0xa61b, 0x43d1, 0x46cc, 0x1a14, 0xbf68, 0x46fa, 0xb233, 0x1a2a, 0xb2b8, 0xa819, 0xb037, 0xba10, 0x4042, 0xb298, 0x41fb, 0x409a, 0xa96a, 0xbfbd, 0x42cf, 0x4253, 0x408a, 0x405b, 0x42f3, 0x4059, 0xba0f, 0x4567, 0x1cdc, 0x46fc, 0x408c, 0x4422, 0x35df, 0x1b9c, 0x2518, 0x40fd, 0xbfc0, 0x427e, 0x088c, 0x12b3, 0x420e, 0x1f21, 0xb2db, 0x4082, 0xba04, 0x43d5, 0x417d, 0x40cc, 0xbfe1, 0xb2e4, 0x41cb, 0xb26a, 0x0fc6, 0x41fd, 0xa87b, 0x19ba, 0xb082, 0x4007, 0x403f, 0xb051, 0xb2ae, 0xbfb4, 0x41ae, 0x30da, 0x3846, 0x428b, 0x42d0, 0x4346, 0x42c7, 0x432c, 0x4130, 0x1e5c, 0x456b, 0x40d8, 0x4220, 0x40aa, 0x4158, 0x431d, 0x44bb, 0x1bcc, 0x04bf, 0x1cfa, 0x4025, 0x119d, 0xbfbb, 0x44ed, 0xa46d, 0x405d, 0x444c, 0x1c30, 0x4203, 0x45c5, 0x41d8, 0xb032, 0xbaf2, 0x0ea6, 0x45da, 0x4201, 0xb08f, 0xba40, 0x46fd, 0xb036, 0x4299, 0xb204, 0x41b6, 0x2913, 0x3bba, 0xba0b, 0x0540, 0x417a, 0xbafd, 0xbf73, 0x4048, 0xb25b, 0x1f4c, 0x429e, 0x3765, 0x1070, 0x1cd1, 0xa19b, 0x462d, 0xae77, 0x4138, 0x4417, 0xb26e, 0xade1, 0x1fc2, 0xb066, 0x43e2, 0x45e4, 0xba67, 0xb2dc, 0x1ce1, 0x4618, 0x41f8, 0x41cc, 0xbfd9, 0x21de, 0xba18, 0xbad6, 0x1ced, 0x4268, 0x408e, 0xbf42, 0xb203, 0xb22f, 0x41a0, 0xb01e, 0x148e, 0xb213, 0x1f18, 0xb066, 0x4220, 0x402f, 0x2024, 0xb0d0, 0xb029, 0x4013, 0xb2e6, 0xaad2, 0x4412, 0x2186, 0x08b7, 0xb017, 0x2c68, 0xac81, 0x03a5, 0x410d, 0x1ad9, 0x4385, 0xbf8f, 0x423e, 0x43a9, 0x4540, 0xb206, 0x1913, 0x45f4, 0x410a, 0xba27, 0xb03a, 0xa1a3, 0x1bab, 0x40a9, 0x1e67, 0x1d41, 0x45a1, 0x43a2, 0x433c, 0xbf3e, 0x447b, 0x40fa, 0x42f1, 0xbfba, 0x3ad7, 0x1a64, 0x436a, 0x4236, 0xb244, 0x423e, 0x46ca, 0x20e3, 0xb2e8, 0x433e, 0xb2e5, 0x2bee, 0x42bb, 0xa98d, 0xad9c, 0x4386, 0x2257, 0xbff0, 0x42c6, 0xbf33, 0x4493, 0xb283, 0x42fe, 0x2141, 0x4036, 0x45ee, 0x4021, 0x4094, 0x1804, 0x415d, 0xbf83, 0x1901, 0xba69, 0x40b4, 0x2756, 0xa4e3, 0x46f5, 0x44e4, 0xbf08, 0x409c, 0xb28d, 0x432e, 0x40b3, 0x2d20, 0x3e1f, 0xbfb6, 0xada3, 0xba6b, 0x1a51, 0xb230, 0x417d, 0xb08f, 0x4147, 0xb204, 0x1c74, 0xbfc0, 0x40d6, 0x297f, 0x42da, 0x4647, 0x0785, 0x41ed, 0x43e8, 0xbfc3, 0x1814, 0x40f2, 0x44d1, 0x4336, 0x40cd, 0x4310, 0x0796, 0x0448, 0x0afd, 0x2b10, 0x454c, 0x409c, 0x4071, 0x4190, 0x022b, 0x42aa, 0x4077, 0x3044, 0x43c2, 0xb201, 0xbf8d, 0xba41, 0x4057, 0xb057, 0x1b40, 0xb24a, 0xa1a7, 0x4307, 0x0539, 0x416a, 0xba50, 0xbf87, 0xba7b, 0x43a4, 0x2500, 0xba5b, 0x43bb, 0x42f3, 0x4611, 0x4280, 0xbac7, 0x41ae, 0x1ca3, 0x43b2, 0xa44d, 0xba30, 0x0ab4, 0x1dcd, 0x461a, 0x435a, 0x025a, 0x432a, 0x20e9, 0xa954, 0x4392, 0xba42, 0x424c, 0x41b8, 0xb235, 0xbf51, 0x4185, 0xb006, 0x4049, 0xb26a, 0x417b, 0xb0e2, 0x19d5, 0x3021, 0xbf00, 0x19dd, 0x4005, 0x4153, 0x1c3e, 0x411b, 0xb272, 0x4222, 0xb249, 0x45e0, 0xb258, 0xb0fc, 0x193e, 0x42eb, 0xb2b2, 0x3edb, 0x4186, 0xb0cb, 0x302a, 0xbf36, 0xb289, 0x4139, 0x4193, 0xb08c, 0x42b8, 0xb254, 0x4421, 0x411c, 0x1ef1, 0xb041, 0x46e3, 0xbfb8, 0x43c0, 0x4015, 0xa898, 0xb20e, 0x42ce, 0x42ac, 0x4067, 0x43d6, 0x42a2, 0xba33, 0xbafe, 0x4208, 0x4142, 0x4159, 0x328e, 0x31d0, 0x40f7, 0x318d, 0x191f, 0x4393, 0x21e0, 0xbf15, 0x4350, 0x19a5, 0x44b5, 0x1a52, 0x18d9, 0x4298, 0xb2f1, 0xb283, 0x1d3c, 0x184a, 0x1919, 0x4185, 0x389d, 0x1fcf, 0x4075, 0x4354, 0x426d, 0x412b, 0x08c8, 0xaa20, 0xb0fc, 0x430a, 0x4371, 0xb036, 0xba55, 0x401d, 0x0a8a, 0x4216, 0xbf76, 0x418a, 0x438a, 0x4239, 0x41f2, 0x43bf, 0x1183, 0x163f, 0x1d04, 0x44d4, 0x4142, 0x40ec, 0x2292, 0x4216, 0x114a, 0x402c, 0x4182, 0x4274, 0x4175, 0xbf34, 0x0866, 0xba17, 0x425d, 0x408c, 0x455f, 0x4226, 0x352f, 0xbfd0, 0x41aa, 0xba23, 0xb22e, 0x4332, 0xb2dc, 0xb0f0, 0x41c1, 0x4244, 0x1935, 0xba0a, 0x434a, 0x4102, 0xbf3b, 0x4006, 0x40df, 0xb0f8, 0x4056, 0x400f, 0x43f9, 0x43ce, 0x42fe, 0x40d4, 0x28b0, 0x429b, 0xbf74, 0x182a, 0x41cb, 0xb286, 0x43e0, 0xbaf2, 0x4048, 0x4290, 0xb01d, 0x42a0, 0x4607, 0xb05c, 0x4350, 0x1c44, 0x332b, 0x4472, 0x41e1, 0x4367, 0x4326, 0x246e, 0x424d, 0xacbc, 0xb25d, 0x42fc, 0x1cfd, 0xbfba, 0x1862, 0x4434, 0x4642, 0x1a03, 0xac03, 0xb011, 0xb268, 0x0d38, 0x4269, 0x447e, 0x40d4, 0xb02c, 0x08bf, 0xb2b2, 0xbfa0, 0x410b, 0xb284, 0x1c4a, 0x414b, 0xbaf7, 0x4177, 0x3a36, 0xbf4a, 0x1dd8, 0x41c6, 0x4094, 0x4586, 0xbfb9, 0xb0e7, 0x43c0, 0x45dc, 0x0f5d, 0x164f, 0x0ba3, 0x1ddc, 0x0097, 0xb29b, 0xba38, 0xba74, 0x4381, 0xb0da, 0x4250, 0xb2a1, 0x41d4, 0x4081, 0x43bb, 0x4406, 0x345b, 0x3396, 0x1de6, 0x1962, 0x1b0e, 0xbf09, 0xb297, 0x44a0, 0x2a36, 0x3650, 0x427f, 0xb26b, 0xb271, 0x438f, 0x4339, 0x4129, 0x376e, 0x4296, 0x1ea5, 0xbfd8, 0x4225, 0x41e9, 0xbadc, 0x4033, 0x06d5, 0xb204, 0x4004, 0x43db, 0xb056, 0x1a4d, 0x168e, 0xbf13, 0xb2c3, 0x40b7, 0x4099, 0x0e40, 0x04b2, 0x2491, 0xbfb0, 0xba29, 0x40ab, 0x45c5, 0xb235, 0x4682, 0x44cd, 0x4336, 0xa9f5, 0x3173, 0xb2ba, 0xb2ae, 0x410b, 0x2490, 0xba68, 0xb05a, 0x4243, 0x4046, 0xb29e, 0xb26d, 0x412d, 0xbfc5, 0x3c36, 0x43ad, 0x4233, 0xb276, 0x1bbe, 0x4130, 0xad7d, 0x43e8, 0xbf86, 0x42b4, 0xb201, 0x39a2, 0xa298, 0x422d, 0x420e, 0xbae0, 0x42ba, 0x419b, 0x4373, 0x3c8a, 0x1b84, 0x2f19, 0x4215, 0xbae3, 0x4301, 0xbfd4, 0xb271, 0x4071, 0x184c, 0xbaf9, 0x1a13, 0x46d8, 0xbfc7, 0xb230, 0x46e9, 0x3397, 0x44d2, 0x2603, 0xba1b, 0x217b, 0xb0fd, 0x42c2, 0x0680, 0x1e31, 0xb203, 0xbac1, 0x2ed6, 0x41cc, 0xb232, 0x423d, 0x24a3, 0xbf43, 0x3980, 0x4273, 0x4234, 0xa0f4, 0xb270, 0x401e, 0xad39, 0xb045, 0x1bbb, 0x1f36, 0xb0ac, 0xba3f, 0xb227, 0x4433, 0xb001, 0xb060, 0x1679, 0x287b, 0x4134, 0xb2b5, 0xabaa, 0x1a26, 0x44a2, 0x42fe, 0xb293, 0xbf8d, 0x4198, 0x1f37, 0xb2c9, 0x425c, 0xb2e3, 0xaaa2, 0xbf26, 0x4306, 0xb013, 0x1e28, 0x1668, 0x411a, 0x4370, 0x0257, 0x1efc, 0x4060, 0x4243, 0x4419, 0xb211, 0x1ade, 0x413e, 0xbfd6, 0x4329, 0x4305, 0x423c, 0x1a58, 0x4075, 0x4377, 0xb24c, 0x4055, 0x1b29, 0xb212, 0xba6d, 0x4011, 0x265d, 0xaa17, 0xa9c1, 0xb2ed, 0x4011, 0x31b0, 0x421d, 0x4399, 0xb0da, 0x4040, 0x4160, 0xbfd0, 0xbad9, 0xbfb4, 0x45f3, 0x4329, 0x434a, 0x40fe, 0x432e, 0xb290, 0x4043, 0x4077, 0xba4d, 0x238f, 0x40ea, 0x46da, 0x3def, 0xbf0e, 0x4565, 0x180b, 0x25be, 0xba29, 0xb0cf, 0x421a, 0xba15, 0x0c57, 0x1ca8, 0x4202, 0x4369, 0x3400, 0xb230, 0xb010, 0x1e9e, 0x4185, 0xaa1b, 0x4069, 0x41f7, 0xba0a, 0x1bbf, 0x401d, 0x1bff, 0xbf2a, 0xb24b, 0xb06f, 0x24ba, 0xa781, 0x42f6, 0xb26b, 0x2a8a, 0xba6c, 0x2c03, 0xb2e8, 0xb24a, 0x42aa, 0x45e3, 0x40a0, 0x40e2, 0x4044, 0x406e, 0x4011, 0xb2b0, 0xbfa7, 0x4155, 0xb20c, 0x421a, 0xb011, 0x06e8, 0x1c54, 0xb20d, 0xafeb, 0xbf90, 0xbfa1, 0x1d96, 0xb2c9, 0xbae8, 0x4123, 0xb29f, 0xac33, 0xbfc0, 0xb2d6, 0x119e, 0x41fa, 0xba79, 0x436a, 0x41f6, 0xbadc, 0x406d, 0x08c6, 0xbafc, 0x4247, 0x419d, 0x40e4, 0x4032, 0xbf9d, 0xb2b5, 0x4301, 0x1fd1, 0x1878, 0x190b, 0x41b6, 0x1a06, 0x1884, 0x413e, 0x1e69, 0xb26e, 0x400f, 0xba25, 0xacaa, 0xaa90, 0xb2f7, 0x41be, 0x414d, 0x2fe7, 0xb01b, 0xbf6b, 0xbf80, 0x4424, 0x1ac3, 0x2b49, 0x42d4, 0xba6d, 0x00b4, 0xaccd, 0x2bba, 0x42b0, 0x4317, 0x408d, 0x4088, 0x1c63, 0x41f2, 0x340f, 0x41be, 0xbfbc, 0xba04, 0xb2a4, 0xb03e, 0x41f3, 0x43d5, 0x3fb9, 0x4130, 0x40b7, 0x1a94, 0xba2c, 0xb24d, 0x40ac, 0x4397, 0x1e2d, 0x0f84, 0x1ac9, 0x4094, 0xba79, 0x4014, 0x345f, 0x4369, 0xa53c, 0xb236, 0x417e, 0xba2d, 0x0ddf, 0x41eb, 0xbfd8, 0xb236, 0x4430, 0x1c1f, 0x408b, 0xb260, 0xab37, 0xb252, 0x40e5, 0x41fe, 0xb289, 0x4157, 0x416e, 0x1cc9, 0xbfb0, 0x40ba, 0x4358, 0x1f8c, 0x40fb, 0xb009, 0xb296, 0x3130, 0x4042, 0x43ca, 0x433c, 0xbf12, 0x4349, 0xbfa0, 0x4092, 0xb0f5, 0xb2a1, 0x4112, 0x2f71, 0xba43, 0x4480, 0x4075, 0x4066, 0x09fb, 0x404b, 0xb263, 0xbfa9, 0xb224, 0x41dd, 0xb03f, 0x19ba, 0x45e5, 0x1a02, 0x40ef, 0x3fa2, 0x1ee5, 0x0f21, 0x4175, 0x4009, 0x4364, 0x0066, 0x4243, 0x1b6e, 0x3b34, 0x40fd, 0x058f, 0x4021, 0xa4f2, 0xb2c8, 0xbf3a, 0xbfe0, 0x402b, 0x4633, 0x2f79, 0xb027, 0xb066, 0x4046, 0x186b, 0x4288, 0x41ef, 0x28df, 0x3cb6, 0x0efe, 0xba01, 0x42a7, 0x3d58, 0xbae9, 0x41eb, 0x1c69, 0xbae0, 0x434d, 0x44f4, 0x41fc, 0x32c2, 0xb028, 0xbf71, 0x40a0, 0x2fd0, 0x1eea, 0xb02c, 0x4393, 0x3037, 0x2793, 0x405e, 0x25a9, 0x2f3c, 0x3e1b, 0xb2fe, 0x41ba, 0xbfd7, 0xba39, 0xb249, 0x4150, 0x43c2, 0x43e1, 0xba14, 0x412c, 0xb003, 0x0b24, 0x4243, 0x306c, 0x436a, 0x1a6a, 0x1cff, 0x1599, 0x43b2, 0x4306, 0x4264, 0x424f, 0x22b4, 0xb2bb, 0x418e, 0x4021, 0xbf0f, 0xb243, 0x1971, 0x43d7, 0x435d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xa631da32, 0x8b25e0fa, 0xc036f7d7, 0x14e1473e, 0x0d42c45b, 0x1272500d, 0xe6b2d752, 0xafd08c78, 0xdf628cd7, 0xcc7f4ab5, 0xc596f8ca, 0x035ba176, 0x9004931a, 0xcc587fb1, 0x00000000, 0x300001f0 }, - FinalRegs = new uint[] { 0x000000a3, 0x00000000, 0x000000b4, 0xffffffa3, 0x00000000, 0x000000a9, 0x000000b3, 0x00000001, 0xe32471b4, 0xcc7f08d4, 0x000020a4, 0x000020a4, 0xcc7f6b59, 0xcc7f0a40, 0x00000000, 0x400001d0 }, + Instructions = [0x4177, 0x1819, 0x2414, 0x1b72, 0x43dc, 0xbf80, 0xba41, 0xa052, 0xb20b, 0xb083, 0xa090, 0x4329, 0xa61b, 0x43d1, 0x46cc, 0x1a14, 0xbf68, 0x46fa, 0xb233, 0x1a2a, 0xb2b8, 0xa819, 0xb037, 0xba10, 0x4042, 0xb298, 0x41fb, 0x409a, 0xa96a, 0xbfbd, 0x42cf, 0x4253, 0x408a, 0x405b, 0x42f3, 0x4059, 0xba0f, 0x4567, 0x1cdc, 0x46fc, 0x408c, 0x4422, 0x35df, 0x1b9c, 0x2518, 0x40fd, 0xbfc0, 0x427e, 0x088c, 0x12b3, 0x420e, 0x1f21, 0xb2db, 0x4082, 0xba04, 0x43d5, 0x417d, 0x40cc, 0xbfe1, 0xb2e4, 0x41cb, 0xb26a, 0x0fc6, 0x41fd, 0xa87b, 0x19ba, 0xb082, 0x4007, 0x403f, 0xb051, 0xb2ae, 0xbfb4, 0x41ae, 0x30da, 0x3846, 0x428b, 0x42d0, 0x4346, 0x42c7, 0x432c, 0x4130, 0x1e5c, 0x456b, 0x40d8, 0x4220, 0x40aa, 0x4158, 0x431d, 0x44bb, 0x1bcc, 0x04bf, 0x1cfa, 0x4025, 0x119d, 0xbfbb, 0x44ed, 0xa46d, 0x405d, 0x444c, 0x1c30, 0x4203, 0x45c5, 0x41d8, 0xb032, 0xbaf2, 0x0ea6, 0x45da, 0x4201, 0xb08f, 0xba40, 0x46fd, 0xb036, 0x4299, 0xb204, 0x41b6, 0x2913, 0x3bba, 0xba0b, 0x0540, 0x417a, 0xbafd, 0xbf73, 0x4048, 0xb25b, 0x1f4c, 0x429e, 0x3765, 0x1070, 0x1cd1, 0xa19b, 0x462d, 0xae77, 0x4138, 0x4417, 0xb26e, 0xade1, 0x1fc2, 0xb066, 0x43e2, 0x45e4, 0xba67, 0xb2dc, 0x1ce1, 0x4618, 0x41f8, 0x41cc, 0xbfd9, 0x21de, 0xba18, 0xbad6, 0x1ced, 0x4268, 0x408e, 0xbf42, 0xb203, 0xb22f, 0x41a0, 0xb01e, 0x148e, 0xb213, 0x1f18, 0xb066, 0x4220, 0x402f, 0x2024, 0xb0d0, 0xb029, 0x4013, 0xb2e6, 0xaad2, 0x4412, 0x2186, 0x08b7, 0xb017, 0x2c68, 0xac81, 0x03a5, 0x410d, 0x1ad9, 0x4385, 0xbf8f, 0x423e, 0x43a9, 0x4540, 0xb206, 0x1913, 0x45f4, 0x410a, 0xba27, 0xb03a, 0xa1a3, 0x1bab, 0x40a9, 0x1e67, 0x1d41, 0x45a1, 0x43a2, 0x433c, 0xbf3e, 0x447b, 0x40fa, 0x42f1, 0xbfba, 0x3ad7, 0x1a64, 0x436a, 0x4236, 0xb244, 0x423e, 0x46ca, 0x20e3, 0xb2e8, 0x433e, 0xb2e5, 0x2bee, 0x42bb, 0xa98d, 0xad9c, 0x4386, 0x2257, 0xbff0, 0x42c6, 0xbf33, 0x4493, 0xb283, 0x42fe, 0x2141, 0x4036, 0x45ee, 0x4021, 0x4094, 0x1804, 0x415d, 0xbf83, 0x1901, 0xba69, 0x40b4, 0x2756, 0xa4e3, 0x46f5, 0x44e4, 0xbf08, 0x409c, 0xb28d, 0x432e, 0x40b3, 0x2d20, 0x3e1f, 0xbfb6, 0xada3, 0xba6b, 0x1a51, 0xb230, 0x417d, 0xb08f, 0x4147, 0xb204, 0x1c74, 0xbfc0, 0x40d6, 0x297f, 0x42da, 0x4647, 0x0785, 0x41ed, 0x43e8, 0xbfc3, 0x1814, 0x40f2, 0x44d1, 0x4336, 0x40cd, 0x4310, 0x0796, 0x0448, 0x0afd, 0x2b10, 0x454c, 0x409c, 0x4071, 0x4190, 0x022b, 0x42aa, 0x4077, 0x3044, 0x43c2, 0xb201, 0xbf8d, 0xba41, 0x4057, 0xb057, 0x1b40, 0xb24a, 0xa1a7, 0x4307, 0x0539, 0x416a, 0xba50, 0xbf87, 0xba7b, 0x43a4, 0x2500, 0xba5b, 0x43bb, 0x42f3, 0x4611, 0x4280, 0xbac7, 0x41ae, 0x1ca3, 0x43b2, 0xa44d, 0xba30, 0x0ab4, 0x1dcd, 0x461a, 0x435a, 0x025a, 0x432a, 0x20e9, 0xa954, 0x4392, 0xba42, 0x424c, 0x41b8, 0xb235, 0xbf51, 0x4185, 0xb006, 0x4049, 0xb26a, 0x417b, 0xb0e2, 0x19d5, 0x3021, 0xbf00, 0x19dd, 0x4005, 0x4153, 0x1c3e, 0x411b, 0xb272, 0x4222, 0xb249, 0x45e0, 0xb258, 0xb0fc, 0x193e, 0x42eb, 0xb2b2, 0x3edb, 0x4186, 0xb0cb, 0x302a, 0xbf36, 0xb289, 0x4139, 0x4193, 0xb08c, 0x42b8, 0xb254, 0x4421, 0x411c, 0x1ef1, 0xb041, 0x46e3, 0xbfb8, 0x43c0, 0x4015, 0xa898, 0xb20e, 0x42ce, 0x42ac, 0x4067, 0x43d6, 0x42a2, 0xba33, 0xbafe, 0x4208, 0x4142, 0x4159, 0x328e, 0x31d0, 0x40f7, 0x318d, 0x191f, 0x4393, 0x21e0, 0xbf15, 0x4350, 0x19a5, 0x44b5, 0x1a52, 0x18d9, 0x4298, 0xb2f1, 0xb283, 0x1d3c, 0x184a, 0x1919, 0x4185, 0x389d, 0x1fcf, 0x4075, 0x4354, 0x426d, 0x412b, 0x08c8, 0xaa20, 0xb0fc, 0x430a, 0x4371, 0xb036, 0xba55, 0x401d, 0x0a8a, 0x4216, 0xbf76, 0x418a, 0x438a, 0x4239, 0x41f2, 0x43bf, 0x1183, 0x163f, 0x1d04, 0x44d4, 0x4142, 0x40ec, 0x2292, 0x4216, 0x114a, 0x402c, 0x4182, 0x4274, 0x4175, 0xbf34, 0x0866, 0xba17, 0x425d, 0x408c, 0x455f, 0x4226, 0x352f, 0xbfd0, 0x41aa, 0xba23, 0xb22e, 0x4332, 0xb2dc, 0xb0f0, 0x41c1, 0x4244, 0x1935, 0xba0a, 0x434a, 0x4102, 0xbf3b, 0x4006, 0x40df, 0xb0f8, 0x4056, 0x400f, 0x43f9, 0x43ce, 0x42fe, 0x40d4, 0x28b0, 0x429b, 0xbf74, 0x182a, 0x41cb, 0xb286, 0x43e0, 0xbaf2, 0x4048, 0x4290, 0xb01d, 0x42a0, 0x4607, 0xb05c, 0x4350, 0x1c44, 0x332b, 0x4472, 0x41e1, 0x4367, 0x4326, 0x246e, 0x424d, 0xacbc, 0xb25d, 0x42fc, 0x1cfd, 0xbfba, 0x1862, 0x4434, 0x4642, 0x1a03, 0xac03, 0xb011, 0xb268, 0x0d38, 0x4269, 0x447e, 0x40d4, 0xb02c, 0x08bf, 0xb2b2, 0xbfa0, 0x410b, 0xb284, 0x1c4a, 0x414b, 0xbaf7, 0x4177, 0x3a36, 0xbf4a, 0x1dd8, 0x41c6, 0x4094, 0x4586, 0xbfb9, 0xb0e7, 0x43c0, 0x45dc, 0x0f5d, 0x164f, 0x0ba3, 0x1ddc, 0x0097, 0xb29b, 0xba38, 0xba74, 0x4381, 0xb0da, 0x4250, 0xb2a1, 0x41d4, 0x4081, 0x43bb, 0x4406, 0x345b, 0x3396, 0x1de6, 0x1962, 0x1b0e, 0xbf09, 0xb297, 0x44a0, 0x2a36, 0x3650, 0x427f, 0xb26b, 0xb271, 0x438f, 0x4339, 0x4129, 0x376e, 0x4296, 0x1ea5, 0xbfd8, 0x4225, 0x41e9, 0xbadc, 0x4033, 0x06d5, 0xb204, 0x4004, 0x43db, 0xb056, 0x1a4d, 0x168e, 0xbf13, 0xb2c3, 0x40b7, 0x4099, 0x0e40, 0x04b2, 0x2491, 0xbfb0, 0xba29, 0x40ab, 0x45c5, 0xb235, 0x4682, 0x44cd, 0x4336, 0xa9f5, 0x3173, 0xb2ba, 0xb2ae, 0x410b, 0x2490, 0xba68, 0xb05a, 0x4243, 0x4046, 0xb29e, 0xb26d, 0x412d, 0xbfc5, 0x3c36, 0x43ad, 0x4233, 0xb276, 0x1bbe, 0x4130, 0xad7d, 0x43e8, 0xbf86, 0x42b4, 0xb201, 0x39a2, 0xa298, 0x422d, 0x420e, 0xbae0, 0x42ba, 0x419b, 0x4373, 0x3c8a, 0x1b84, 0x2f19, 0x4215, 0xbae3, 0x4301, 0xbfd4, 0xb271, 0x4071, 0x184c, 0xbaf9, 0x1a13, 0x46d8, 0xbfc7, 0xb230, 0x46e9, 0x3397, 0x44d2, 0x2603, 0xba1b, 0x217b, 0xb0fd, 0x42c2, 0x0680, 0x1e31, 0xb203, 0xbac1, 0x2ed6, 0x41cc, 0xb232, 0x423d, 0x24a3, 0xbf43, 0x3980, 0x4273, 0x4234, 0xa0f4, 0xb270, 0x401e, 0xad39, 0xb045, 0x1bbb, 0x1f36, 0xb0ac, 0xba3f, 0xb227, 0x4433, 0xb001, 0xb060, 0x1679, 0x287b, 0x4134, 0xb2b5, 0xabaa, 0x1a26, 0x44a2, 0x42fe, 0xb293, 0xbf8d, 0x4198, 0x1f37, 0xb2c9, 0x425c, 0xb2e3, 0xaaa2, 0xbf26, 0x4306, 0xb013, 0x1e28, 0x1668, 0x411a, 0x4370, 0x0257, 0x1efc, 0x4060, 0x4243, 0x4419, 0xb211, 0x1ade, 0x413e, 0xbfd6, 0x4329, 0x4305, 0x423c, 0x1a58, 0x4075, 0x4377, 0xb24c, 0x4055, 0x1b29, 0xb212, 0xba6d, 0x4011, 0x265d, 0xaa17, 0xa9c1, 0xb2ed, 0x4011, 0x31b0, 0x421d, 0x4399, 0xb0da, 0x4040, 0x4160, 0xbfd0, 0xbad9, 0xbfb4, 0x45f3, 0x4329, 0x434a, 0x40fe, 0x432e, 0xb290, 0x4043, 0x4077, 0xba4d, 0x238f, 0x40ea, 0x46da, 0x3def, 0xbf0e, 0x4565, 0x180b, 0x25be, 0xba29, 0xb0cf, 0x421a, 0xba15, 0x0c57, 0x1ca8, 0x4202, 0x4369, 0x3400, 0xb230, 0xb010, 0x1e9e, 0x4185, 0xaa1b, 0x4069, 0x41f7, 0xba0a, 0x1bbf, 0x401d, 0x1bff, 0xbf2a, 0xb24b, 0xb06f, 0x24ba, 0xa781, 0x42f6, 0xb26b, 0x2a8a, 0xba6c, 0x2c03, 0xb2e8, 0xb24a, 0x42aa, 0x45e3, 0x40a0, 0x40e2, 0x4044, 0x406e, 0x4011, 0xb2b0, 0xbfa7, 0x4155, 0xb20c, 0x421a, 0xb011, 0x06e8, 0x1c54, 0xb20d, 0xafeb, 0xbf90, 0xbfa1, 0x1d96, 0xb2c9, 0xbae8, 0x4123, 0xb29f, 0xac33, 0xbfc0, 0xb2d6, 0x119e, 0x41fa, 0xba79, 0x436a, 0x41f6, 0xbadc, 0x406d, 0x08c6, 0xbafc, 0x4247, 0x419d, 0x40e4, 0x4032, 0xbf9d, 0xb2b5, 0x4301, 0x1fd1, 0x1878, 0x190b, 0x41b6, 0x1a06, 0x1884, 0x413e, 0x1e69, 0xb26e, 0x400f, 0xba25, 0xacaa, 0xaa90, 0xb2f7, 0x41be, 0x414d, 0x2fe7, 0xb01b, 0xbf6b, 0xbf80, 0x4424, 0x1ac3, 0x2b49, 0x42d4, 0xba6d, 0x00b4, 0xaccd, 0x2bba, 0x42b0, 0x4317, 0x408d, 0x4088, 0x1c63, 0x41f2, 0x340f, 0x41be, 0xbfbc, 0xba04, 0xb2a4, 0xb03e, 0x41f3, 0x43d5, 0x3fb9, 0x4130, 0x40b7, 0x1a94, 0xba2c, 0xb24d, 0x40ac, 0x4397, 0x1e2d, 0x0f84, 0x1ac9, 0x4094, 0xba79, 0x4014, 0x345f, 0x4369, 0xa53c, 0xb236, 0x417e, 0xba2d, 0x0ddf, 0x41eb, 0xbfd8, 0xb236, 0x4430, 0x1c1f, 0x408b, 0xb260, 0xab37, 0xb252, 0x40e5, 0x41fe, 0xb289, 0x4157, 0x416e, 0x1cc9, 0xbfb0, 0x40ba, 0x4358, 0x1f8c, 0x40fb, 0xb009, 0xb296, 0x3130, 0x4042, 0x43ca, 0x433c, 0xbf12, 0x4349, 0xbfa0, 0x4092, 0xb0f5, 0xb2a1, 0x4112, 0x2f71, 0xba43, 0x4480, 0x4075, 0x4066, 0x09fb, 0x404b, 0xb263, 0xbfa9, 0xb224, 0x41dd, 0xb03f, 0x19ba, 0x45e5, 0x1a02, 0x40ef, 0x3fa2, 0x1ee5, 0x0f21, 0x4175, 0x4009, 0x4364, 0x0066, 0x4243, 0x1b6e, 0x3b34, 0x40fd, 0x058f, 0x4021, 0xa4f2, 0xb2c8, 0xbf3a, 0xbfe0, 0x402b, 0x4633, 0x2f79, 0xb027, 0xb066, 0x4046, 0x186b, 0x4288, 0x41ef, 0x28df, 0x3cb6, 0x0efe, 0xba01, 0x42a7, 0x3d58, 0xbae9, 0x41eb, 0x1c69, 0xbae0, 0x434d, 0x44f4, 0x41fc, 0x32c2, 0xb028, 0xbf71, 0x40a0, 0x2fd0, 0x1eea, 0xb02c, 0x4393, 0x3037, 0x2793, 0x405e, 0x25a9, 0x2f3c, 0x3e1b, 0xb2fe, 0x41ba, 0xbfd7, 0xba39, 0xb249, 0x4150, 0x43c2, 0x43e1, 0xba14, 0x412c, 0xb003, 0x0b24, 0x4243, 0x306c, 0x436a, 0x1a6a, 0x1cff, 0x1599, 0x43b2, 0x4306, 0x4264, 0x424f, 0x22b4, 0xb2bb, 0x418e, 0x4021, 0xbf0f, 0xb243, 0x1971, 0x43d7, 0x435d, 0x4770, 0xe7fe + ], + StartRegs = [0xa631da32, 0x8b25e0fa, 0xc036f7d7, 0x14e1473e, 0x0d42c45b, 0x1272500d, 0xe6b2d752, 0xafd08c78, 0xdf628cd7, 0xcc7f4ab5, 0xc596f8ca, 0x035ba176, 0x9004931a, 0xcc587fb1, 0x00000000, 0x300001f0 + ], + FinalRegs = [0x000000a3, 0x00000000, 0x000000b4, 0xffffffa3, 0x00000000, 0x000000a9, 0x000000b3, 0x00000001, 0xe32471b4, 0xcc7f08d4, 0x000020a4, 0x000020a4, 0xcc7f6b59, 0xcc7f0a40, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x1eba, 0xbf6c, 0x40f9, 0x42e2, 0xbf00, 0x4352, 0xba71, 0x415f, 0x4121, 0x4370, 0x18bf, 0xb228, 0xb21f, 0x437a, 0x410e, 0xa9be, 0x4094, 0xbf01, 0x1bfc, 0x417c, 0x1d9a, 0x342e, 0xb058, 0xa3e9, 0x15d8, 0x42da, 0xbfd6, 0x414f, 0x43b2, 0x46dd, 0x41c9, 0x46d0, 0x46f2, 0xba5f, 0x1558, 0x4221, 0x4156, 0x42f2, 0x38cc, 0x1fa0, 0x436a, 0xb062, 0x4070, 0x19c3, 0xb205, 0x4206, 0xba6a, 0x42be, 0x4388, 0x42ae, 0xb29c, 0xbf1b, 0xbae8, 0x00da, 0xa33e, 0x1ca7, 0x40fd, 0xbf81, 0xb2d7, 0xba69, 0x1ea1, 0xb0bb, 0x0645, 0x1cb6, 0xb27a, 0xbfb0, 0x28b8, 0xbad7, 0x40e0, 0x4253, 0xbaf6, 0x1466, 0x318a, 0xa4ad, 0x1f98, 0xbf4a, 0xbaf1, 0x4350, 0x08cd, 0xbfb6, 0xb047, 0x0b95, 0xb250, 0x405b, 0x4125, 0x42f5, 0x1da1, 0xa969, 0xbfc4, 0x400d, 0xb2b6, 0x4321, 0x43ec, 0xb279, 0x41e6, 0x066a, 0x1e01, 0xbf6c, 0xb260, 0xb099, 0x4237, 0x4192, 0x4453, 0xb258, 0x40c4, 0x1f86, 0x1f54, 0x1da2, 0xb0cf, 0x460b, 0x40e3, 0xbfc0, 0xb27b, 0xba0a, 0x424d, 0xb099, 0x1e52, 0xb213, 0x4073, 0xb091, 0x4456, 0x4549, 0xbfc0, 0xbfb5, 0x435a, 0x1eb5, 0xb2fc, 0xb2b8, 0x1ccd, 0x0313, 0xbacd, 0x1835, 0x4048, 0xba3e, 0x423e, 0xb0ef, 0x33e7, 0x406b, 0xb294, 0x4176, 0xaaa3, 0x43e9, 0xba3e, 0x4592, 0xb2b8, 0x41ee, 0x4166, 0x40d4, 0x407a, 0x41b4, 0xb08c, 0x466c, 0x466b, 0xbf84, 0xb256, 0x05dd, 0x402d, 0x400d, 0xae81, 0x448a, 0x409e, 0xb2bb, 0x4330, 0xb2a2, 0x3a1d, 0x155f, 0x4375, 0x42a3, 0x4042, 0x1e6c, 0x4043, 0x437f, 0xbf5d, 0x0a83, 0x0278, 0xbaef, 0xb225, 0xb2c6, 0xa084, 0x42c4, 0xb044, 0xb276, 0x4254, 0x1ff5, 0x3ecd, 0x42d5, 0x40ab, 0x1d0b, 0xbf5b, 0xa84c, 0x42fa, 0x4153, 0xb20f, 0x43f5, 0xb0ae, 0x40a6, 0xba43, 0x40d1, 0x4031, 0xb201, 0x40a2, 0xa821, 0x41ba, 0x057c, 0x4158, 0xbfdc, 0x4058, 0x0e46, 0x41b1, 0x1ede, 0x430b, 0x427a, 0x2579, 0xb210, 0x10b9, 0x40ac, 0x144d, 0x277e, 0x4361, 0x407b, 0x4292, 0x438e, 0x1c52, 0xbf29, 0x43da, 0x4175, 0x40cd, 0x422e, 0x1bce, 0xbafe, 0x4048, 0x4392, 0x1f58, 0xb06f, 0x4172, 0x140a, 0x42c1, 0x4129, 0x3dc7, 0x43c9, 0xbf62, 0x1cfc, 0x1c76, 0xb258, 0xb2a7, 0x0c27, 0x428d, 0x419d, 0x4247, 0xbfa0, 0x4003, 0x462a, 0xb20e, 0xba7f, 0x410b, 0xbf49, 0xb063, 0x406f, 0x1d81, 0x0426, 0x1ecc, 0x37da, 0xba5c, 0x265f, 0xba45, 0x4623, 0xb2ce, 0x437a, 0x3263, 0x4216, 0x46d2, 0xbf60, 0xb2b3, 0x438b, 0x43a6, 0x127c, 0x2a4a, 0xb087, 0x418d, 0xbfdc, 0xbaf9, 0x2d49, 0xbad8, 0x4555, 0x4034, 0xbf3c, 0x4163, 0x4195, 0x1af2, 0x436b, 0xba0c, 0x4645, 0xb006, 0xba20, 0x2774, 0x0b44, 0x4191, 0x40c4, 0x3255, 0x4316, 0xad9e, 0xb281, 0x2148, 0x19bf, 0x2cb2, 0x41da, 0x4245, 0x4304, 0xbf1c, 0x4266, 0x40d7, 0x1d42, 0x420e, 0x0277, 0x4072, 0x1f21, 0x4117, 0xbfcb, 0x4020, 0xbaf0, 0x3750, 0x438c, 0xb249, 0xb232, 0x42bf, 0x087b, 0xbf60, 0x20a3, 0x2159, 0x4376, 0x401f, 0xac09, 0x41b6, 0xb2eb, 0x44e0, 0x44f5, 0x4180, 0xbf70, 0x4027, 0x4376, 0x4249, 0xbf76, 0x4013, 0xa685, 0x4178, 0x1b24, 0x3bf1, 0x43fc, 0x4564, 0x4359, 0xbf60, 0x3001, 0xbf7a, 0x42b3, 0x431f, 0x0fb3, 0xba60, 0xab2c, 0x4084, 0x4382, 0x1b93, 0x445d, 0x0fa1, 0x42c8, 0xaf44, 0x326c, 0x2fce, 0x41fa, 0x46ed, 0x435a, 0x43e7, 0x3b92, 0x41ad, 0x4387, 0x4148, 0xb243, 0xba0f, 0x468d, 0x41d3, 0x4283, 0x3a35, 0xbf74, 0xb280, 0xb26e, 0x4288, 0x1b27, 0x3713, 0x460d, 0x4608, 0xa4ad, 0x40af, 0x2de0, 0x111b, 0xbafa, 0x421f, 0x432d, 0xba3b, 0x4353, 0x418e, 0xbfa8, 0x41f0, 0xba53, 0xb0e1, 0xb0b1, 0x13bc, 0xba4a, 0x42d6, 0xb26d, 0x468c, 0x4064, 0xb048, 0xa308, 0x4171, 0xbf7a, 0xa025, 0x4079, 0x287b, 0xb2d9, 0xafc6, 0x1287, 0x3e24, 0xbfc0, 0x4383, 0x0175, 0xb229, 0xb098, 0xba56, 0x1cdf, 0xb216, 0x3b28, 0x4083, 0x41cd, 0x4233, 0xb0fb, 0xba6a, 0x40f7, 0xb092, 0x4151, 0x4332, 0xbf01, 0x431e, 0x4064, 0x3e5b, 0xbae3, 0x41a0, 0xbad8, 0x4396, 0x16ef, 0xb2ac, 0x43db, 0xba05, 0x42a4, 0x287a, 0xbfe4, 0x423c, 0x4093, 0x4363, 0x428c, 0x4245, 0xbf1d, 0xb288, 0x4170, 0x44fd, 0xb20d, 0x1ba5, 0x41df, 0x404e, 0x1bf4, 0x363f, 0x4235, 0x2879, 0x3929, 0x1c19, 0x462f, 0x40ea, 0xb291, 0x1ba1, 0x40fa, 0x1144, 0xb291, 0xbf16, 0x4355, 0x410a, 0x4359, 0x2f7f, 0xbf4a, 0x4315, 0x18ae, 0xb28b, 0x013c, 0x2be1, 0x423a, 0x426b, 0x2686, 0x0bda, 0xb070, 0x1a04, 0x433b, 0x4000, 0x4374, 0x122a, 0xab72, 0x240a, 0x43cd, 0x1fcc, 0xb24a, 0x3817, 0xb28a, 0x43a1, 0xbfbf, 0x41ad, 0x4353, 0x1ca2, 0x0f5f, 0xb2cc, 0x335c, 0xbfdc, 0x4564, 0x42f9, 0xb27b, 0x4334, 0x4164, 0x3681, 0x42f9, 0xbf4e, 0x4638, 0x4449, 0x43ed, 0x19bb, 0xb215, 0xbfe0, 0x423f, 0x2108, 0x4383, 0xb228, 0x4652, 0x1dc3, 0xba3f, 0xbfc4, 0x438b, 0x40e8, 0x4567, 0x418c, 0x40fc, 0xba28, 0x40b1, 0x1e4c, 0xbfba, 0x3458, 0xb0ab, 0x2ad2, 0x45e9, 0x1a0c, 0x43b5, 0x4198, 0xab8d, 0x41f9, 0x1d52, 0x4436, 0x2e46, 0x436d, 0xba14, 0x449b, 0x1c84, 0xb2bc, 0xba6a, 0xbf28, 0x382e, 0x41c1, 0x4630, 0x40fb, 0xb25a, 0xa5ff, 0xbf66, 0x407f, 0x1ba9, 0x40f7, 0xba4d, 0xad6a, 0x42d4, 0x416a, 0x41ec, 0x058b, 0xb03f, 0x400b, 0x41de, 0x42f8, 0xb239, 0x43a1, 0xb0bc, 0xb278, 0x3723, 0x2aba, 0x08ce, 0xbac4, 0x4117, 0xba71, 0x43e7, 0x4160, 0x40f9, 0xbfb5, 0xb204, 0x46aa, 0x2031, 0x427d, 0x434d, 0xbac1, 0x41c2, 0xba36, 0x3418, 0x4154, 0x0077, 0xbf8f, 0x1ce1, 0xb299, 0x403b, 0x4327, 0x417e, 0x2a98, 0x41f9, 0x44fb, 0x4284, 0x3e49, 0x4338, 0xb20a, 0x0cc0, 0xb24c, 0x4379, 0x0318, 0x4361, 0xaf1c, 0x4374, 0x4050, 0x18ef, 0xb060, 0x2d77, 0x1924, 0x41bd, 0xbfa8, 0xb0e8, 0x4190, 0x42dc, 0x415d, 0x40ea, 0xb23b, 0x400a, 0x22d5, 0xb25d, 0x1dd6, 0x1d96, 0x2ce9, 0xbf91, 0x4038, 0xb066, 0x43e7, 0x1822, 0xb269, 0x4593, 0xb2f5, 0x19bd, 0xa3f6, 0x0e7e, 0xb24b, 0xba7d, 0x42ca, 0x4663, 0xbfad, 0x4299, 0x1e65, 0x4225, 0x2788, 0x43e8, 0xb0d3, 0xba16, 0x1e5d, 0x404a, 0x1f58, 0x4365, 0xaa39, 0xb2bb, 0xb220, 0x4582, 0x43a7, 0xb256, 0xb209, 0xb2ab, 0xb0d2, 0x43e4, 0x42c8, 0x413f, 0xb243, 0xbf53, 0x2e4e, 0x466d, 0x4037, 0x41b3, 0x4440, 0xbf49, 0x42be, 0xb2cd, 0x4600, 0x32a9, 0x4148, 0x446c, 0x4220, 0xb0de, 0x0ce2, 0xb0b4, 0xabd7, 0x42ff, 0xb026, 0x419a, 0x40b3, 0x0b25, 0xb2cd, 0x3c35, 0x19ab, 0x1f78, 0xbfb0, 0x0e94, 0x1e9d, 0x258f, 0xa68b, 0xbf65, 0xb08c, 0x4419, 0x079e, 0xb268, 0x0e32, 0xba48, 0xb263, 0x404f, 0x0184, 0x4363, 0x40ac, 0x2bea, 0x4333, 0x4212, 0x1b18, 0x2632, 0x419e, 0xaddd, 0x26d7, 0xab35, 0x43ae, 0x44a1, 0x4553, 0xa3ae, 0xb035, 0x43eb, 0x431a, 0x3b78, 0xbf5f, 0x44f2, 0xa8a4, 0x2b62, 0x41b5, 0xb2a0, 0xb26b, 0xbf60, 0x408a, 0x42f5, 0xb248, 0x4186, 0x0be3, 0xba08, 0xba09, 0x43b1, 0x32eb, 0x435e, 0x1a5f, 0x46a1, 0xa636, 0x40a4, 0x1cc4, 0xb205, 0x4008, 0x1ab0, 0x43dd, 0x44ba, 0x1a0a, 0x41e8, 0xbf0b, 0x4107, 0x43fb, 0xb278, 0x0d1b, 0xb24f, 0x4072, 0xb0fe, 0x1f22, 0x41d6, 0xa4b7, 0xa2e7, 0xbace, 0x1986, 0x41ea, 0xbf8f, 0xb2bd, 0xa889, 0x2c1e, 0x4377, 0x43fe, 0x4208, 0x0d22, 0x1fb7, 0x13a5, 0x1dc7, 0xb2a7, 0x4322, 0xb0e3, 0x20ce, 0x2c78, 0xb02e, 0x1dd1, 0x4260, 0x409c, 0x4072, 0x41c0, 0x43b5, 0xb229, 0x42ae, 0xb2fb, 0x41c4, 0x0949, 0xbf46, 0x4240, 0x0cde, 0x1cd9, 0x3d63, 0xba31, 0x4182, 0x46c9, 0x207c, 0xbfd0, 0xba2e, 0xb03a, 0xa2cf, 0x430a, 0xbf00, 0xbfa3, 0x2012, 0x1aef, 0xbae5, 0x429b, 0x42a3, 0x40d8, 0xb27e, 0x43e3, 0x00d0, 0xbfd0, 0xb0f6, 0x235a, 0x4206, 0x28e5, 0x12df, 0x44c8, 0x29d4, 0x07dc, 0xb0ee, 0x2a46, 0x4684, 0x41c8, 0x4256, 0x419f, 0x1840, 0xbfb6, 0x2d6c, 0xbf00, 0x4111, 0xb2a4, 0x2ac4, 0x4357, 0x2969, 0xbfdb, 0x06e7, 0x1834, 0x4303, 0x1301, 0x4349, 0x4359, 0x4199, 0x42d7, 0x43df, 0x1c72, 0xbf29, 0x42e9, 0x0dc8, 0x444f, 0xb2b3, 0xbade, 0x4096, 0xbf39, 0x4222, 0x4132, 0xbaf8, 0x423a, 0x411a, 0x3d0e, 0x27cd, 0xa5b1, 0xba60, 0x402c, 0x1c06, 0x1e7f, 0x4125, 0x437c, 0x2d39, 0x41e8, 0x43b0, 0x1aec, 0x410f, 0xbf70, 0x4151, 0xbfd7, 0xb24b, 0x434a, 0x420a, 0xb0bb, 0x40b5, 0x2a48, 0x42f7, 0x4357, 0xa542, 0x4377, 0x456a, 0xba32, 0x256c, 0x4293, 0x420d, 0x41b2, 0x4116, 0x0db1, 0xb2fd, 0x2b59, 0xbf5e, 0x4386, 0x46a9, 0x44f0, 0x403d, 0x42a2, 0xbfad, 0x4332, 0xb278, 0x33f7, 0x4154, 0x42d1, 0x45a4, 0xbf2c, 0x43d3, 0x4328, 0x1b3b, 0x2fb0, 0xb2fc, 0xba1f, 0x4081, 0xbac6, 0x43a8, 0xaf84, 0x41f1, 0x4242, 0x417b, 0xb210, 0xbf2e, 0x40d4, 0x43d6, 0x1ccf, 0x187b, 0x308a, 0x4377, 0x42ba, 0x31d7, 0xaffe, 0x1fcd, 0x44e8, 0xb28b, 0x1bb6, 0x441a, 0xa875, 0x40b0, 0x40b8, 0xa3ff, 0xbaea, 0xbf0f, 0xb025, 0xb00c, 0x400b, 0xb242, 0xba32, 0x46f3, 0x4637, 0xba20, 0xa645, 0x42df, 0x40a8, 0x42ed, 0xbf5c, 0x1a0c, 0x1899, 0xbaf9, 0xb259, 0x430a, 0xb2f9, 0x026c, 0x4245, 0xb2d4, 0x2e6f, 0x4339, 0xa74d, 0xafb6, 0x410a, 0xb20b, 0x431a, 0x41cc, 0xaa3b, 0x4138, 0xb0c4, 0x4481, 0xb22d, 0x4048, 0xbf81, 0x29ef, 0x44eb, 0x4173, 0xbff0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x229975ae, 0x62ce2e1e, 0xd2564bd4, 0x39d45247, 0xd49d4418, 0x1318e716, 0x729bdcf6, 0x3efcaaa5, 0xa00a7b25, 0x4ae3af8e, 0x4525a887, 0x9586bb86, 0x0c982ef9, 0x7b92ae66, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00000000, 0xfffff740, 0x00000000, 0x000000a8, 0x00000000, 0x000018d8, 0xfffff92c, 0x51bdcd40, 0x00000000, 0x00000005, 0x00000000, 0xfffffff8, 0xfffff544, 0x00000000, 0x400001d0 }, + Instructions = [0x1eba, 0xbf6c, 0x40f9, 0x42e2, 0xbf00, 0x4352, 0xba71, 0x415f, 0x4121, 0x4370, 0x18bf, 0xb228, 0xb21f, 0x437a, 0x410e, 0xa9be, 0x4094, 0xbf01, 0x1bfc, 0x417c, 0x1d9a, 0x342e, 0xb058, 0xa3e9, 0x15d8, 0x42da, 0xbfd6, 0x414f, 0x43b2, 0x46dd, 0x41c9, 0x46d0, 0x46f2, 0xba5f, 0x1558, 0x4221, 0x4156, 0x42f2, 0x38cc, 0x1fa0, 0x436a, 0xb062, 0x4070, 0x19c3, 0xb205, 0x4206, 0xba6a, 0x42be, 0x4388, 0x42ae, 0xb29c, 0xbf1b, 0xbae8, 0x00da, 0xa33e, 0x1ca7, 0x40fd, 0xbf81, 0xb2d7, 0xba69, 0x1ea1, 0xb0bb, 0x0645, 0x1cb6, 0xb27a, 0xbfb0, 0x28b8, 0xbad7, 0x40e0, 0x4253, 0xbaf6, 0x1466, 0x318a, 0xa4ad, 0x1f98, 0xbf4a, 0xbaf1, 0x4350, 0x08cd, 0xbfb6, 0xb047, 0x0b95, 0xb250, 0x405b, 0x4125, 0x42f5, 0x1da1, 0xa969, 0xbfc4, 0x400d, 0xb2b6, 0x4321, 0x43ec, 0xb279, 0x41e6, 0x066a, 0x1e01, 0xbf6c, 0xb260, 0xb099, 0x4237, 0x4192, 0x4453, 0xb258, 0x40c4, 0x1f86, 0x1f54, 0x1da2, 0xb0cf, 0x460b, 0x40e3, 0xbfc0, 0xb27b, 0xba0a, 0x424d, 0xb099, 0x1e52, 0xb213, 0x4073, 0xb091, 0x4456, 0x4549, 0xbfc0, 0xbfb5, 0x435a, 0x1eb5, 0xb2fc, 0xb2b8, 0x1ccd, 0x0313, 0xbacd, 0x1835, 0x4048, 0xba3e, 0x423e, 0xb0ef, 0x33e7, 0x406b, 0xb294, 0x4176, 0xaaa3, 0x43e9, 0xba3e, 0x4592, 0xb2b8, 0x41ee, 0x4166, 0x40d4, 0x407a, 0x41b4, 0xb08c, 0x466c, 0x466b, 0xbf84, 0xb256, 0x05dd, 0x402d, 0x400d, 0xae81, 0x448a, 0x409e, 0xb2bb, 0x4330, 0xb2a2, 0x3a1d, 0x155f, 0x4375, 0x42a3, 0x4042, 0x1e6c, 0x4043, 0x437f, 0xbf5d, 0x0a83, 0x0278, 0xbaef, 0xb225, 0xb2c6, 0xa084, 0x42c4, 0xb044, 0xb276, 0x4254, 0x1ff5, 0x3ecd, 0x42d5, 0x40ab, 0x1d0b, 0xbf5b, 0xa84c, 0x42fa, 0x4153, 0xb20f, 0x43f5, 0xb0ae, 0x40a6, 0xba43, 0x40d1, 0x4031, 0xb201, 0x40a2, 0xa821, 0x41ba, 0x057c, 0x4158, 0xbfdc, 0x4058, 0x0e46, 0x41b1, 0x1ede, 0x430b, 0x427a, 0x2579, 0xb210, 0x10b9, 0x40ac, 0x144d, 0x277e, 0x4361, 0x407b, 0x4292, 0x438e, 0x1c52, 0xbf29, 0x43da, 0x4175, 0x40cd, 0x422e, 0x1bce, 0xbafe, 0x4048, 0x4392, 0x1f58, 0xb06f, 0x4172, 0x140a, 0x42c1, 0x4129, 0x3dc7, 0x43c9, 0xbf62, 0x1cfc, 0x1c76, 0xb258, 0xb2a7, 0x0c27, 0x428d, 0x419d, 0x4247, 0xbfa0, 0x4003, 0x462a, 0xb20e, 0xba7f, 0x410b, 0xbf49, 0xb063, 0x406f, 0x1d81, 0x0426, 0x1ecc, 0x37da, 0xba5c, 0x265f, 0xba45, 0x4623, 0xb2ce, 0x437a, 0x3263, 0x4216, 0x46d2, 0xbf60, 0xb2b3, 0x438b, 0x43a6, 0x127c, 0x2a4a, 0xb087, 0x418d, 0xbfdc, 0xbaf9, 0x2d49, 0xbad8, 0x4555, 0x4034, 0xbf3c, 0x4163, 0x4195, 0x1af2, 0x436b, 0xba0c, 0x4645, 0xb006, 0xba20, 0x2774, 0x0b44, 0x4191, 0x40c4, 0x3255, 0x4316, 0xad9e, 0xb281, 0x2148, 0x19bf, 0x2cb2, 0x41da, 0x4245, 0x4304, 0xbf1c, 0x4266, 0x40d7, 0x1d42, 0x420e, 0x0277, 0x4072, 0x1f21, 0x4117, 0xbfcb, 0x4020, 0xbaf0, 0x3750, 0x438c, 0xb249, 0xb232, 0x42bf, 0x087b, 0xbf60, 0x20a3, 0x2159, 0x4376, 0x401f, 0xac09, 0x41b6, 0xb2eb, 0x44e0, 0x44f5, 0x4180, 0xbf70, 0x4027, 0x4376, 0x4249, 0xbf76, 0x4013, 0xa685, 0x4178, 0x1b24, 0x3bf1, 0x43fc, 0x4564, 0x4359, 0xbf60, 0x3001, 0xbf7a, 0x42b3, 0x431f, 0x0fb3, 0xba60, 0xab2c, 0x4084, 0x4382, 0x1b93, 0x445d, 0x0fa1, 0x42c8, 0xaf44, 0x326c, 0x2fce, 0x41fa, 0x46ed, 0x435a, 0x43e7, 0x3b92, 0x41ad, 0x4387, 0x4148, 0xb243, 0xba0f, 0x468d, 0x41d3, 0x4283, 0x3a35, 0xbf74, 0xb280, 0xb26e, 0x4288, 0x1b27, 0x3713, 0x460d, 0x4608, 0xa4ad, 0x40af, 0x2de0, 0x111b, 0xbafa, 0x421f, 0x432d, 0xba3b, 0x4353, 0x418e, 0xbfa8, 0x41f0, 0xba53, 0xb0e1, 0xb0b1, 0x13bc, 0xba4a, 0x42d6, 0xb26d, 0x468c, 0x4064, 0xb048, 0xa308, 0x4171, 0xbf7a, 0xa025, 0x4079, 0x287b, 0xb2d9, 0xafc6, 0x1287, 0x3e24, 0xbfc0, 0x4383, 0x0175, 0xb229, 0xb098, 0xba56, 0x1cdf, 0xb216, 0x3b28, 0x4083, 0x41cd, 0x4233, 0xb0fb, 0xba6a, 0x40f7, 0xb092, 0x4151, 0x4332, 0xbf01, 0x431e, 0x4064, 0x3e5b, 0xbae3, 0x41a0, 0xbad8, 0x4396, 0x16ef, 0xb2ac, 0x43db, 0xba05, 0x42a4, 0x287a, 0xbfe4, 0x423c, 0x4093, 0x4363, 0x428c, 0x4245, 0xbf1d, 0xb288, 0x4170, 0x44fd, 0xb20d, 0x1ba5, 0x41df, 0x404e, 0x1bf4, 0x363f, 0x4235, 0x2879, 0x3929, 0x1c19, 0x462f, 0x40ea, 0xb291, 0x1ba1, 0x40fa, 0x1144, 0xb291, 0xbf16, 0x4355, 0x410a, 0x4359, 0x2f7f, 0xbf4a, 0x4315, 0x18ae, 0xb28b, 0x013c, 0x2be1, 0x423a, 0x426b, 0x2686, 0x0bda, 0xb070, 0x1a04, 0x433b, 0x4000, 0x4374, 0x122a, 0xab72, 0x240a, 0x43cd, 0x1fcc, 0xb24a, 0x3817, 0xb28a, 0x43a1, 0xbfbf, 0x41ad, 0x4353, 0x1ca2, 0x0f5f, 0xb2cc, 0x335c, 0xbfdc, 0x4564, 0x42f9, 0xb27b, 0x4334, 0x4164, 0x3681, 0x42f9, 0xbf4e, 0x4638, 0x4449, 0x43ed, 0x19bb, 0xb215, 0xbfe0, 0x423f, 0x2108, 0x4383, 0xb228, 0x4652, 0x1dc3, 0xba3f, 0xbfc4, 0x438b, 0x40e8, 0x4567, 0x418c, 0x40fc, 0xba28, 0x40b1, 0x1e4c, 0xbfba, 0x3458, 0xb0ab, 0x2ad2, 0x45e9, 0x1a0c, 0x43b5, 0x4198, 0xab8d, 0x41f9, 0x1d52, 0x4436, 0x2e46, 0x436d, 0xba14, 0x449b, 0x1c84, 0xb2bc, 0xba6a, 0xbf28, 0x382e, 0x41c1, 0x4630, 0x40fb, 0xb25a, 0xa5ff, 0xbf66, 0x407f, 0x1ba9, 0x40f7, 0xba4d, 0xad6a, 0x42d4, 0x416a, 0x41ec, 0x058b, 0xb03f, 0x400b, 0x41de, 0x42f8, 0xb239, 0x43a1, 0xb0bc, 0xb278, 0x3723, 0x2aba, 0x08ce, 0xbac4, 0x4117, 0xba71, 0x43e7, 0x4160, 0x40f9, 0xbfb5, 0xb204, 0x46aa, 0x2031, 0x427d, 0x434d, 0xbac1, 0x41c2, 0xba36, 0x3418, 0x4154, 0x0077, 0xbf8f, 0x1ce1, 0xb299, 0x403b, 0x4327, 0x417e, 0x2a98, 0x41f9, 0x44fb, 0x4284, 0x3e49, 0x4338, 0xb20a, 0x0cc0, 0xb24c, 0x4379, 0x0318, 0x4361, 0xaf1c, 0x4374, 0x4050, 0x18ef, 0xb060, 0x2d77, 0x1924, 0x41bd, 0xbfa8, 0xb0e8, 0x4190, 0x42dc, 0x415d, 0x40ea, 0xb23b, 0x400a, 0x22d5, 0xb25d, 0x1dd6, 0x1d96, 0x2ce9, 0xbf91, 0x4038, 0xb066, 0x43e7, 0x1822, 0xb269, 0x4593, 0xb2f5, 0x19bd, 0xa3f6, 0x0e7e, 0xb24b, 0xba7d, 0x42ca, 0x4663, 0xbfad, 0x4299, 0x1e65, 0x4225, 0x2788, 0x43e8, 0xb0d3, 0xba16, 0x1e5d, 0x404a, 0x1f58, 0x4365, 0xaa39, 0xb2bb, 0xb220, 0x4582, 0x43a7, 0xb256, 0xb209, 0xb2ab, 0xb0d2, 0x43e4, 0x42c8, 0x413f, 0xb243, 0xbf53, 0x2e4e, 0x466d, 0x4037, 0x41b3, 0x4440, 0xbf49, 0x42be, 0xb2cd, 0x4600, 0x32a9, 0x4148, 0x446c, 0x4220, 0xb0de, 0x0ce2, 0xb0b4, 0xabd7, 0x42ff, 0xb026, 0x419a, 0x40b3, 0x0b25, 0xb2cd, 0x3c35, 0x19ab, 0x1f78, 0xbfb0, 0x0e94, 0x1e9d, 0x258f, 0xa68b, 0xbf65, 0xb08c, 0x4419, 0x079e, 0xb268, 0x0e32, 0xba48, 0xb263, 0x404f, 0x0184, 0x4363, 0x40ac, 0x2bea, 0x4333, 0x4212, 0x1b18, 0x2632, 0x419e, 0xaddd, 0x26d7, 0xab35, 0x43ae, 0x44a1, 0x4553, 0xa3ae, 0xb035, 0x43eb, 0x431a, 0x3b78, 0xbf5f, 0x44f2, 0xa8a4, 0x2b62, 0x41b5, 0xb2a0, 0xb26b, 0xbf60, 0x408a, 0x42f5, 0xb248, 0x4186, 0x0be3, 0xba08, 0xba09, 0x43b1, 0x32eb, 0x435e, 0x1a5f, 0x46a1, 0xa636, 0x40a4, 0x1cc4, 0xb205, 0x4008, 0x1ab0, 0x43dd, 0x44ba, 0x1a0a, 0x41e8, 0xbf0b, 0x4107, 0x43fb, 0xb278, 0x0d1b, 0xb24f, 0x4072, 0xb0fe, 0x1f22, 0x41d6, 0xa4b7, 0xa2e7, 0xbace, 0x1986, 0x41ea, 0xbf8f, 0xb2bd, 0xa889, 0x2c1e, 0x4377, 0x43fe, 0x4208, 0x0d22, 0x1fb7, 0x13a5, 0x1dc7, 0xb2a7, 0x4322, 0xb0e3, 0x20ce, 0x2c78, 0xb02e, 0x1dd1, 0x4260, 0x409c, 0x4072, 0x41c0, 0x43b5, 0xb229, 0x42ae, 0xb2fb, 0x41c4, 0x0949, 0xbf46, 0x4240, 0x0cde, 0x1cd9, 0x3d63, 0xba31, 0x4182, 0x46c9, 0x207c, 0xbfd0, 0xba2e, 0xb03a, 0xa2cf, 0x430a, 0xbf00, 0xbfa3, 0x2012, 0x1aef, 0xbae5, 0x429b, 0x42a3, 0x40d8, 0xb27e, 0x43e3, 0x00d0, 0xbfd0, 0xb0f6, 0x235a, 0x4206, 0x28e5, 0x12df, 0x44c8, 0x29d4, 0x07dc, 0xb0ee, 0x2a46, 0x4684, 0x41c8, 0x4256, 0x419f, 0x1840, 0xbfb6, 0x2d6c, 0xbf00, 0x4111, 0xb2a4, 0x2ac4, 0x4357, 0x2969, 0xbfdb, 0x06e7, 0x1834, 0x4303, 0x1301, 0x4349, 0x4359, 0x4199, 0x42d7, 0x43df, 0x1c72, 0xbf29, 0x42e9, 0x0dc8, 0x444f, 0xb2b3, 0xbade, 0x4096, 0xbf39, 0x4222, 0x4132, 0xbaf8, 0x423a, 0x411a, 0x3d0e, 0x27cd, 0xa5b1, 0xba60, 0x402c, 0x1c06, 0x1e7f, 0x4125, 0x437c, 0x2d39, 0x41e8, 0x43b0, 0x1aec, 0x410f, 0xbf70, 0x4151, 0xbfd7, 0xb24b, 0x434a, 0x420a, 0xb0bb, 0x40b5, 0x2a48, 0x42f7, 0x4357, 0xa542, 0x4377, 0x456a, 0xba32, 0x256c, 0x4293, 0x420d, 0x41b2, 0x4116, 0x0db1, 0xb2fd, 0x2b59, 0xbf5e, 0x4386, 0x46a9, 0x44f0, 0x403d, 0x42a2, 0xbfad, 0x4332, 0xb278, 0x33f7, 0x4154, 0x42d1, 0x45a4, 0xbf2c, 0x43d3, 0x4328, 0x1b3b, 0x2fb0, 0xb2fc, 0xba1f, 0x4081, 0xbac6, 0x43a8, 0xaf84, 0x41f1, 0x4242, 0x417b, 0xb210, 0xbf2e, 0x40d4, 0x43d6, 0x1ccf, 0x187b, 0x308a, 0x4377, 0x42ba, 0x31d7, 0xaffe, 0x1fcd, 0x44e8, 0xb28b, 0x1bb6, 0x441a, 0xa875, 0x40b0, 0x40b8, 0xa3ff, 0xbaea, 0xbf0f, 0xb025, 0xb00c, 0x400b, 0xb242, 0xba32, 0x46f3, 0x4637, 0xba20, 0xa645, 0x42df, 0x40a8, 0x42ed, 0xbf5c, 0x1a0c, 0x1899, 0xbaf9, 0xb259, 0x430a, 0xb2f9, 0x026c, 0x4245, 0xb2d4, 0x2e6f, 0x4339, 0xa74d, 0xafb6, 0x410a, 0xb20b, 0x431a, 0x41cc, 0xaa3b, 0x4138, 0xb0c4, 0x4481, 0xb22d, 0x4048, 0xbf81, 0x29ef, 0x44eb, 0x4173, 0xbff0, 0x4770, 0xe7fe + ], + StartRegs = [0x229975ae, 0x62ce2e1e, 0xd2564bd4, 0x39d45247, 0xd49d4418, 0x1318e716, 0x729bdcf6, 0x3efcaaa5, 0xa00a7b25, 0x4ae3af8e, 0x4525a887, 0x9586bb86, 0x0c982ef9, 0x7b92ae66, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x00000000, 0x00000000, 0xfffff740, 0x00000000, 0x000000a8, 0x00000000, 0x000018d8, 0xfffff92c, 0x51bdcd40, 0x00000000, 0x00000005, 0x00000000, 0xfffffff8, 0xfffff544, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x4140, 0xb2b3, 0x4323, 0xba15, 0x4344, 0xbff0, 0xbfbf, 0x43a6, 0x4559, 0x4223, 0x44dc, 0x4127, 0xb0a9, 0xbf8a, 0xaaf8, 0x46c3, 0x4581, 0x40c3, 0x34c1, 0x0454, 0x4391, 0x1926, 0x0506, 0x409b, 0xb240, 0xb2d2, 0xb2bc, 0x41a3, 0x401e, 0x467e, 0x461e, 0x418a, 0xbfa2, 0x4106, 0xb2d4, 0xba41, 0x41e2, 0xbf60, 0xa5bd, 0xb0f2, 0x0ae4, 0xaf92, 0x4178, 0x4288, 0xaafb, 0x2c49, 0x4297, 0x42aa, 0xb279, 0x417e, 0x4030, 0xb092, 0x43af, 0xb2dd, 0x40f2, 0x4248, 0x4185, 0x424d, 0x1bde, 0x42be, 0xbfa3, 0xb2fb, 0x4202, 0xb284, 0x1e62, 0x4435, 0x1a75, 0xad47, 0x1f63, 0xbfc9, 0x4248, 0x42a4, 0x4043, 0x406f, 0x4235, 0x2e18, 0xba30, 0x0eb5, 0xb010, 0x4284, 0x1c3d, 0xba47, 0x1ab5, 0x40c5, 0x42bb, 0x42b3, 0xb2bd, 0x40cb, 0xbf66, 0x42b1, 0xba69, 0xa9e3, 0xba74, 0xba6b, 0x362a, 0xbaf3, 0x41fa, 0x3157, 0x43e1, 0x197e, 0x2357, 0x2121, 0x4399, 0x40e8, 0xba4e, 0x46a4, 0xb24a, 0x1e4c, 0xbf14, 0x434f, 0xba7e, 0x0794, 0x41a9, 0x4271, 0x0540, 0xb245, 0x4034, 0xa808, 0xa761, 0x1e1b, 0x432a, 0xbfd0, 0x4056, 0x0f35, 0x42dc, 0x41e8, 0x28b7, 0x41e4, 0x42d3, 0x4003, 0xb266, 0x23b0, 0x40f3, 0xbfc2, 0xba05, 0x37dc, 0xa115, 0x2d82, 0x427d, 0x4267, 0xb231, 0x425b, 0x4333, 0x15c9, 0x4365, 0x33cc, 0x4245, 0xb258, 0x4456, 0x418d, 0xbfda, 0xa73d, 0x4151, 0xb06a, 0x113e, 0x40a9, 0x0bd6, 0x4011, 0x0e0d, 0x428b, 0xb085, 0x1887, 0x4306, 0x1e58, 0xba34, 0x0264, 0x1425, 0xbf75, 0xbf80, 0x063a, 0x4075, 0xb0ad, 0x4301, 0x41a9, 0xb2de, 0xb06d, 0xbf4e, 0x2c08, 0x195b, 0x1f78, 0x4665, 0x18a8, 0x427d, 0x1e10, 0x1902, 0x4184, 0xb26c, 0x4202, 0xabcc, 0xa09e, 0xb240, 0xbf97, 0xb2f9, 0x0e5d, 0x4016, 0x41e6, 0x0fa0, 0xb03e, 0xba09, 0xba2d, 0x1d8d, 0x4236, 0x4169, 0x42e1, 0xbfa2, 0x1c7a, 0x4209, 0x46d8, 0x40ba, 0x131e, 0x43e9, 0x4322, 0x2c4c, 0xb0f2, 0x420d, 0x43cf, 0xbfe0, 0xbaf7, 0x11fd, 0x3c3c, 0xb074, 0xa603, 0x40c0, 0xba24, 0xbfdf, 0xba1f, 0x4355, 0x1c3e, 0x3c1f, 0x1771, 0x435e, 0x43f0, 0xbfe0, 0xbf1e, 0x2909, 0x4388, 0xb283, 0xbfb0, 0x4345, 0xb037, 0x4422, 0xba30, 0xb299, 0xb27c, 0xba4e, 0x439c, 0x402a, 0xbfb7, 0x42b5, 0x4306, 0x12ed, 0x4036, 0xa7ea, 0x3301, 0x00dd, 0x43ff, 0xbf80, 0x43a5, 0xa662, 0xb2cc, 0x1fd1, 0xb2f3, 0xb2e5, 0xba3b, 0x41d9, 0x19bb, 0xbf53, 0xb2d3, 0x4060, 0x40a0, 0x41e4, 0x430e, 0x1ace, 0xb292, 0x4126, 0x14a7, 0x4213, 0xba11, 0xba68, 0xbaea, 0x40f4, 0x1efb, 0xad4e, 0xb219, 0x403a, 0xa6a1, 0xbac6, 0x400e, 0x4179, 0x27cf, 0xbf2c, 0xb00d, 0x41da, 0xba16, 0x43f4, 0x419b, 0xae62, 0x40e8, 0xba76, 0xa541, 0xba4f, 0x42c2, 0x41aa, 0x446e, 0x423c, 0x400e, 0xbf45, 0x411e, 0xba27, 0x4150, 0xbff0, 0xbfb0, 0x1d0a, 0x4110, 0x0264, 0xb08d, 0x4094, 0xb237, 0x433d, 0xb2df, 0x445a, 0x18bd, 0x232b, 0x42aa, 0x4049, 0x41e8, 0x4241, 0x43c0, 0xabef, 0xbf27, 0x466a, 0xb235, 0xb210, 0x40c1, 0x1b03, 0x34b9, 0x330b, 0x0d21, 0x1c91, 0x411e, 0x4309, 0x24b1, 0x4694, 0x4352, 0xb06b, 0x43fe, 0x4335, 0x4062, 0xb262, 0xb2cf, 0x41ba, 0x1f6a, 0xbf19, 0xaa47, 0x41d2, 0x3d1a, 0x4214, 0xb041, 0xba7d, 0x4256, 0x44cc, 0x443b, 0x0975, 0x40f5, 0xb218, 0x3e53, 0xb20d, 0x3524, 0xb266, 0x3cde, 0xb268, 0x4488, 0x4242, 0x0d85, 0x4359, 0xbfc0, 0xb2c5, 0xbf42, 0xb2ac, 0x30e2, 0x40f1, 0x0e8c, 0x4253, 0x41f5, 0x4338, 0x23ee, 0x4452, 0x435b, 0xbfe0, 0x4322, 0xba03, 0x4434, 0x425e, 0x4138, 0xb0f5, 0xb027, 0x1244, 0x4199, 0x069e, 0x1cd5, 0x43e7, 0xb251, 0x2463, 0x1b4f, 0x369f, 0xbf07, 0x3825, 0xb2a9, 0x425d, 0x01f8, 0x459d, 0x41f8, 0x1c1a, 0xbfb0, 0x4036, 0x400b, 0x4020, 0x42a5, 0x1c96, 0x4282, 0x1e80, 0x1a86, 0xa400, 0xbfd0, 0x437f, 0x42de, 0x4071, 0x43a6, 0x403d, 0xb2c8, 0x36f0, 0xbf7d, 0xa9ca, 0x4321, 0x4397, 0x3f2d, 0xb0ff, 0x1db9, 0x4327, 0x42ee, 0x4102, 0x1929, 0x1a60, 0x42ae, 0x43fa, 0x4238, 0x335e, 0x4195, 0x41a0, 0x434f, 0x07df, 0x0b88, 0x415c, 0x1bed, 0x1239, 0x2484, 0xbfe0, 0x429a, 0x43f1, 0xbf00, 0xbf81, 0x1d1a, 0x03ca, 0xb001, 0x1144, 0xba4c, 0x4588, 0x4298, 0x1adc, 0x0bf3, 0x425c, 0x40bc, 0x46d0, 0x4196, 0x3c97, 0x1a0e, 0x40d8, 0x4689, 0x4211, 0xb2c7, 0x3858, 0xbf94, 0x1f8b, 0x1dd1, 0x43fc, 0x4221, 0x4134, 0x4091, 0xbf45, 0xb216, 0xa369, 0x425f, 0x41f1, 0x1d77, 0x4351, 0x4052, 0x43b8, 0xaab0, 0x41bd, 0x436a, 0x10b8, 0x1be7, 0xb0a0, 0x4408, 0xba5c, 0x46ed, 0x4280, 0x43e5, 0xb24f, 0x413e, 0x40de, 0x4072, 0x0af6, 0xb0fc, 0x182b, 0xbf18, 0x40a2, 0x4274, 0xbf7b, 0x40e1, 0x4374, 0x1980, 0x446c, 0x3816, 0xb011, 0x1a4f, 0x432b, 0x3edd, 0x443b, 0x4100, 0x4089, 0x1aab, 0xadf1, 0xb27b, 0x41b2, 0x4654, 0x14fc, 0x42be, 0x0988, 0xbade, 0x01d9, 0xbfb2, 0x4495, 0xa451, 0xb236, 0x40a0, 0xa32b, 0x160f, 0x158c, 0x1b5a, 0x1bf9, 0x415f, 0xa9d3, 0x2d3b, 0x0186, 0x2ee4, 0xb2ee, 0x4203, 0x4282, 0xbf25, 0x42fb, 0x41cd, 0x4005, 0x412e, 0x4166, 0xb060, 0x419a, 0xb096, 0x421a, 0xbf9e, 0xbaea, 0xb24b, 0xb266, 0x04cc, 0x4346, 0x1cf3, 0x3752, 0x4191, 0x40df, 0x2bc9, 0xba3f, 0x418a, 0xa35c, 0x40bf, 0xb202, 0xbf75, 0xb022, 0xb2af, 0x4494, 0xb2b3, 0x42ff, 0x4234, 0xba3d, 0x4294, 0xafd7, 0xbf5e, 0x42dd, 0xb06e, 0xb289, 0x16e1, 0x4296, 0xba26, 0xb23d, 0x3187, 0x4257, 0x43b4, 0xb055, 0x43f0, 0xba3b, 0xba4f, 0x4264, 0x1d45, 0x4139, 0x2e94, 0x43c5, 0xbf3a, 0xa887, 0x1db3, 0xb2ed, 0x4155, 0x403a, 0x459c, 0xbf16, 0x4185, 0x435d, 0x4233, 0x4040, 0x195b, 0x3b21, 0x3ac0, 0x41d6, 0xb0d6, 0xbaf9, 0x32b7, 0xb25a, 0xa09f, 0x403a, 0x36e7, 0x01a5, 0x0cbb, 0x19d8, 0x432c, 0x4144, 0xb210, 0x40a9, 0x369e, 0xb208, 0xbfe0, 0xbf74, 0xba77, 0x43fd, 0x430e, 0x431d, 0x0f9e, 0x4093, 0x41ca, 0xac30, 0x1d21, 0x435a, 0xba6a, 0x4070, 0xa76e, 0x40a2, 0x3100, 0x433f, 0x1c9a, 0x447d, 0x0792, 0x28d8, 0xb2ae, 0x309b, 0xa509, 0xb2c1, 0x43d3, 0x1ab7, 0xbf39, 0xb261, 0xa83d, 0x0040, 0x43f9, 0x43aa, 0x0d1a, 0xb2f5, 0x1f4f, 0xa00a, 0x1b3a, 0xbae6, 0xbfba, 0x1dc5, 0x4244, 0x41c2, 0xb2ab, 0x4202, 0xb29c, 0xb257, 0xa703, 0x427e, 0xbf89, 0xb275, 0x4019, 0x46ca, 0x1d3d, 0x1a9b, 0x1f9c, 0x06a0, 0x2760, 0xb258, 0x42d9, 0xbfe0, 0xb284, 0x4693, 0xb028, 0xba10, 0x4070, 0xb0d6, 0x4117, 0x4144, 0x1cb9, 0xbafd, 0x414d, 0x428b, 0x404c, 0x40a9, 0xbfc1, 0xbad9, 0x1cd4, 0x4193, 0x2175, 0x4424, 0x4353, 0x41fb, 0x1085, 0xbfd9, 0x40d9, 0xb226, 0xba45, 0x4397, 0xba74, 0xb04a, 0x0585, 0x0166, 0x43fc, 0x0cb9, 0x4163, 0xa2c8, 0x4167, 0x4298, 0xb2f4, 0x4178, 0x25dd, 0xbf78, 0x4219, 0xba57, 0x2cec, 0x41eb, 0xb2b4, 0x42e3, 0x41d4, 0x4028, 0x19fc, 0x25f6, 0x42c6, 0x411a, 0xb2fc, 0x405f, 0x2db0, 0xba12, 0xba0d, 0x4086, 0x190a, 0xb0d4, 0xb0c7, 0x1a0e, 0x1865, 0x43d6, 0x40f3, 0xbf53, 0x4346, 0x2cce, 0x1b64, 0x4251, 0x4132, 0x3b90, 0x4106, 0x4068, 0x42c8, 0xba69, 0x435b, 0x409c, 0xb23c, 0x40d8, 0xba3a, 0x41f8, 0x0255, 0xba6c, 0x4057, 0x154c, 0x423d, 0xb295, 0xbf5e, 0x39c1, 0xb2c6, 0xb2aa, 0x42ba, 0x41e1, 0x2188, 0xba24, 0xba62, 0xb07c, 0x21ef, 0xb0f3, 0x43ec, 0x4167, 0x16d4, 0x03a1, 0x042a, 0x41bd, 0x41ef, 0x0ce7, 0x40b1, 0x1945, 0x4412, 0x416d, 0xbf73, 0x0cc6, 0x43be, 0x406c, 0x4650, 0x434e, 0xb09f, 0x0557, 0x13bd, 0x1647, 0x1a01, 0x40eb, 0x4257, 0x165b, 0x39b5, 0xba40, 0xbf8d, 0xbf00, 0x45cc, 0xacf1, 0xb21a, 0xb045, 0xba06, 0x42c3, 0x434c, 0x22f5, 0x4361, 0x4168, 0x2d5a, 0x4197, 0x42c2, 0x429f, 0x420f, 0x41ce, 0x4072, 0xb2e6, 0x42b7, 0x0373, 0x0dd4, 0xb2b9, 0x426e, 0x4398, 0x41d1, 0x4391, 0x4388, 0xbfbb, 0x1116, 0x41d9, 0x43a3, 0xb01c, 0x423c, 0xbf23, 0x31dc, 0x4363, 0x1dda, 0x41cb, 0xbf57, 0xba39, 0xa456, 0xb210, 0xb2c3, 0xbacd, 0xb2ae, 0x19df, 0x0c65, 0xbf3c, 0x42c9, 0x4073, 0x46a9, 0x41b0, 0xa506, 0xafdf, 0x4279, 0x416e, 0xa894, 0x15c3, 0x4182, 0x17b8, 0x41c0, 0x2e9c, 0x40bf, 0x4297, 0x42c9, 0x221d, 0xbfe0, 0x27c7, 0xb072, 0xbf13, 0x42e0, 0x1610, 0x43b9, 0x388e, 0x0521, 0xb29e, 0x38ac, 0x1a33, 0x4163, 0x40ae, 0x0262, 0x19ad, 0x1987, 0xbf04, 0x4029, 0x1f7d, 0x4358, 0x046c, 0x1f40, 0xbf00, 0x4052, 0x4228, 0xb0a8, 0xb094, 0xbfdc, 0x4183, 0x1e1d, 0xb006, 0xb244, 0x46b2, 0x40e0, 0x438a, 0x1cf2, 0x09e7, 0xb077, 0x3b0c, 0x42c6, 0x411d, 0x40f4, 0x1d92, 0xb230, 0x3ef5, 0x25ff, 0x40d3, 0xb2fa, 0x0906, 0x33f4, 0x4616, 0xbf93, 0x3405, 0x401a, 0xafb7, 0x4653, 0xb2f2, 0xba5f, 0x43cd, 0x433e, 0xaa58, 0xba2f, 0xb21f, 0x44f2, 0xb2c9, 0xb27f, 0xb219, 0x1f6e, 0x4234, 0xb241, 0x41fc, 0xb299, 0x4262, 0x4332, 0x43c9, 0x1ef1, 0xb209, 0xbf31, 0x4169, 0x4561, 0x439f, 0x43bb, 0x416e, 0x3af5, 0x435e, 0x2c99, 0x407a, 0x41eb, 0xa890, 0x4362, 0xb278, 0xba0b, 0x3322, 0x40ee, 0x4381, 0x3041, 0x434d, 0xbf33, 0xb0f7, 0x40a3, 0x46bd, 0xac4b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3b6339cb, 0xac4b9998, 0x998fa8a0, 0x40e73eaf, 0xf51f8ebf, 0x6f72ff20, 0xf89a82e1, 0x902e336b, 0xebc6f449, 0x4b10b8cd, 0x4c95ab80, 0xffe2804d, 0xe91ff5c2, 0x37fd5281, 0x00000000, 0x000001f0 }, - FinalRegs = new uint[] { 0x00000041, 0xfffffff7, 0x0c803106, 0xf8000021, 0x37fd52a9, 0x02400009, 0x00000000, 0x00000000, 0x4c95ab80, 0x00000000, 0x06f00000, 0xc802acfb, 0x4af3391b, 0x37fd517d, 0x00000000, 0x000001d0 }, + Instructions = [0x4140, 0xb2b3, 0x4323, 0xba15, 0x4344, 0xbff0, 0xbfbf, 0x43a6, 0x4559, 0x4223, 0x44dc, 0x4127, 0xb0a9, 0xbf8a, 0xaaf8, 0x46c3, 0x4581, 0x40c3, 0x34c1, 0x0454, 0x4391, 0x1926, 0x0506, 0x409b, 0xb240, 0xb2d2, 0xb2bc, 0x41a3, 0x401e, 0x467e, 0x461e, 0x418a, 0xbfa2, 0x4106, 0xb2d4, 0xba41, 0x41e2, 0xbf60, 0xa5bd, 0xb0f2, 0x0ae4, 0xaf92, 0x4178, 0x4288, 0xaafb, 0x2c49, 0x4297, 0x42aa, 0xb279, 0x417e, 0x4030, 0xb092, 0x43af, 0xb2dd, 0x40f2, 0x4248, 0x4185, 0x424d, 0x1bde, 0x42be, 0xbfa3, 0xb2fb, 0x4202, 0xb284, 0x1e62, 0x4435, 0x1a75, 0xad47, 0x1f63, 0xbfc9, 0x4248, 0x42a4, 0x4043, 0x406f, 0x4235, 0x2e18, 0xba30, 0x0eb5, 0xb010, 0x4284, 0x1c3d, 0xba47, 0x1ab5, 0x40c5, 0x42bb, 0x42b3, 0xb2bd, 0x40cb, 0xbf66, 0x42b1, 0xba69, 0xa9e3, 0xba74, 0xba6b, 0x362a, 0xbaf3, 0x41fa, 0x3157, 0x43e1, 0x197e, 0x2357, 0x2121, 0x4399, 0x40e8, 0xba4e, 0x46a4, 0xb24a, 0x1e4c, 0xbf14, 0x434f, 0xba7e, 0x0794, 0x41a9, 0x4271, 0x0540, 0xb245, 0x4034, 0xa808, 0xa761, 0x1e1b, 0x432a, 0xbfd0, 0x4056, 0x0f35, 0x42dc, 0x41e8, 0x28b7, 0x41e4, 0x42d3, 0x4003, 0xb266, 0x23b0, 0x40f3, 0xbfc2, 0xba05, 0x37dc, 0xa115, 0x2d82, 0x427d, 0x4267, 0xb231, 0x425b, 0x4333, 0x15c9, 0x4365, 0x33cc, 0x4245, 0xb258, 0x4456, 0x418d, 0xbfda, 0xa73d, 0x4151, 0xb06a, 0x113e, 0x40a9, 0x0bd6, 0x4011, 0x0e0d, 0x428b, 0xb085, 0x1887, 0x4306, 0x1e58, 0xba34, 0x0264, 0x1425, 0xbf75, 0xbf80, 0x063a, 0x4075, 0xb0ad, 0x4301, 0x41a9, 0xb2de, 0xb06d, 0xbf4e, 0x2c08, 0x195b, 0x1f78, 0x4665, 0x18a8, 0x427d, 0x1e10, 0x1902, 0x4184, 0xb26c, 0x4202, 0xabcc, 0xa09e, 0xb240, 0xbf97, 0xb2f9, 0x0e5d, 0x4016, 0x41e6, 0x0fa0, 0xb03e, 0xba09, 0xba2d, 0x1d8d, 0x4236, 0x4169, 0x42e1, 0xbfa2, 0x1c7a, 0x4209, 0x46d8, 0x40ba, 0x131e, 0x43e9, 0x4322, 0x2c4c, 0xb0f2, 0x420d, 0x43cf, 0xbfe0, 0xbaf7, 0x11fd, 0x3c3c, 0xb074, 0xa603, 0x40c0, 0xba24, 0xbfdf, 0xba1f, 0x4355, 0x1c3e, 0x3c1f, 0x1771, 0x435e, 0x43f0, 0xbfe0, 0xbf1e, 0x2909, 0x4388, 0xb283, 0xbfb0, 0x4345, 0xb037, 0x4422, 0xba30, 0xb299, 0xb27c, 0xba4e, 0x439c, 0x402a, 0xbfb7, 0x42b5, 0x4306, 0x12ed, 0x4036, 0xa7ea, 0x3301, 0x00dd, 0x43ff, 0xbf80, 0x43a5, 0xa662, 0xb2cc, 0x1fd1, 0xb2f3, 0xb2e5, 0xba3b, 0x41d9, 0x19bb, 0xbf53, 0xb2d3, 0x4060, 0x40a0, 0x41e4, 0x430e, 0x1ace, 0xb292, 0x4126, 0x14a7, 0x4213, 0xba11, 0xba68, 0xbaea, 0x40f4, 0x1efb, 0xad4e, 0xb219, 0x403a, 0xa6a1, 0xbac6, 0x400e, 0x4179, 0x27cf, 0xbf2c, 0xb00d, 0x41da, 0xba16, 0x43f4, 0x419b, 0xae62, 0x40e8, 0xba76, 0xa541, 0xba4f, 0x42c2, 0x41aa, 0x446e, 0x423c, 0x400e, 0xbf45, 0x411e, 0xba27, 0x4150, 0xbff0, 0xbfb0, 0x1d0a, 0x4110, 0x0264, 0xb08d, 0x4094, 0xb237, 0x433d, 0xb2df, 0x445a, 0x18bd, 0x232b, 0x42aa, 0x4049, 0x41e8, 0x4241, 0x43c0, 0xabef, 0xbf27, 0x466a, 0xb235, 0xb210, 0x40c1, 0x1b03, 0x34b9, 0x330b, 0x0d21, 0x1c91, 0x411e, 0x4309, 0x24b1, 0x4694, 0x4352, 0xb06b, 0x43fe, 0x4335, 0x4062, 0xb262, 0xb2cf, 0x41ba, 0x1f6a, 0xbf19, 0xaa47, 0x41d2, 0x3d1a, 0x4214, 0xb041, 0xba7d, 0x4256, 0x44cc, 0x443b, 0x0975, 0x40f5, 0xb218, 0x3e53, 0xb20d, 0x3524, 0xb266, 0x3cde, 0xb268, 0x4488, 0x4242, 0x0d85, 0x4359, 0xbfc0, 0xb2c5, 0xbf42, 0xb2ac, 0x30e2, 0x40f1, 0x0e8c, 0x4253, 0x41f5, 0x4338, 0x23ee, 0x4452, 0x435b, 0xbfe0, 0x4322, 0xba03, 0x4434, 0x425e, 0x4138, 0xb0f5, 0xb027, 0x1244, 0x4199, 0x069e, 0x1cd5, 0x43e7, 0xb251, 0x2463, 0x1b4f, 0x369f, 0xbf07, 0x3825, 0xb2a9, 0x425d, 0x01f8, 0x459d, 0x41f8, 0x1c1a, 0xbfb0, 0x4036, 0x400b, 0x4020, 0x42a5, 0x1c96, 0x4282, 0x1e80, 0x1a86, 0xa400, 0xbfd0, 0x437f, 0x42de, 0x4071, 0x43a6, 0x403d, 0xb2c8, 0x36f0, 0xbf7d, 0xa9ca, 0x4321, 0x4397, 0x3f2d, 0xb0ff, 0x1db9, 0x4327, 0x42ee, 0x4102, 0x1929, 0x1a60, 0x42ae, 0x43fa, 0x4238, 0x335e, 0x4195, 0x41a0, 0x434f, 0x07df, 0x0b88, 0x415c, 0x1bed, 0x1239, 0x2484, 0xbfe0, 0x429a, 0x43f1, 0xbf00, 0xbf81, 0x1d1a, 0x03ca, 0xb001, 0x1144, 0xba4c, 0x4588, 0x4298, 0x1adc, 0x0bf3, 0x425c, 0x40bc, 0x46d0, 0x4196, 0x3c97, 0x1a0e, 0x40d8, 0x4689, 0x4211, 0xb2c7, 0x3858, 0xbf94, 0x1f8b, 0x1dd1, 0x43fc, 0x4221, 0x4134, 0x4091, 0xbf45, 0xb216, 0xa369, 0x425f, 0x41f1, 0x1d77, 0x4351, 0x4052, 0x43b8, 0xaab0, 0x41bd, 0x436a, 0x10b8, 0x1be7, 0xb0a0, 0x4408, 0xba5c, 0x46ed, 0x4280, 0x43e5, 0xb24f, 0x413e, 0x40de, 0x4072, 0x0af6, 0xb0fc, 0x182b, 0xbf18, 0x40a2, 0x4274, 0xbf7b, 0x40e1, 0x4374, 0x1980, 0x446c, 0x3816, 0xb011, 0x1a4f, 0x432b, 0x3edd, 0x443b, 0x4100, 0x4089, 0x1aab, 0xadf1, 0xb27b, 0x41b2, 0x4654, 0x14fc, 0x42be, 0x0988, 0xbade, 0x01d9, 0xbfb2, 0x4495, 0xa451, 0xb236, 0x40a0, 0xa32b, 0x160f, 0x158c, 0x1b5a, 0x1bf9, 0x415f, 0xa9d3, 0x2d3b, 0x0186, 0x2ee4, 0xb2ee, 0x4203, 0x4282, 0xbf25, 0x42fb, 0x41cd, 0x4005, 0x412e, 0x4166, 0xb060, 0x419a, 0xb096, 0x421a, 0xbf9e, 0xbaea, 0xb24b, 0xb266, 0x04cc, 0x4346, 0x1cf3, 0x3752, 0x4191, 0x40df, 0x2bc9, 0xba3f, 0x418a, 0xa35c, 0x40bf, 0xb202, 0xbf75, 0xb022, 0xb2af, 0x4494, 0xb2b3, 0x42ff, 0x4234, 0xba3d, 0x4294, 0xafd7, 0xbf5e, 0x42dd, 0xb06e, 0xb289, 0x16e1, 0x4296, 0xba26, 0xb23d, 0x3187, 0x4257, 0x43b4, 0xb055, 0x43f0, 0xba3b, 0xba4f, 0x4264, 0x1d45, 0x4139, 0x2e94, 0x43c5, 0xbf3a, 0xa887, 0x1db3, 0xb2ed, 0x4155, 0x403a, 0x459c, 0xbf16, 0x4185, 0x435d, 0x4233, 0x4040, 0x195b, 0x3b21, 0x3ac0, 0x41d6, 0xb0d6, 0xbaf9, 0x32b7, 0xb25a, 0xa09f, 0x403a, 0x36e7, 0x01a5, 0x0cbb, 0x19d8, 0x432c, 0x4144, 0xb210, 0x40a9, 0x369e, 0xb208, 0xbfe0, 0xbf74, 0xba77, 0x43fd, 0x430e, 0x431d, 0x0f9e, 0x4093, 0x41ca, 0xac30, 0x1d21, 0x435a, 0xba6a, 0x4070, 0xa76e, 0x40a2, 0x3100, 0x433f, 0x1c9a, 0x447d, 0x0792, 0x28d8, 0xb2ae, 0x309b, 0xa509, 0xb2c1, 0x43d3, 0x1ab7, 0xbf39, 0xb261, 0xa83d, 0x0040, 0x43f9, 0x43aa, 0x0d1a, 0xb2f5, 0x1f4f, 0xa00a, 0x1b3a, 0xbae6, 0xbfba, 0x1dc5, 0x4244, 0x41c2, 0xb2ab, 0x4202, 0xb29c, 0xb257, 0xa703, 0x427e, 0xbf89, 0xb275, 0x4019, 0x46ca, 0x1d3d, 0x1a9b, 0x1f9c, 0x06a0, 0x2760, 0xb258, 0x42d9, 0xbfe0, 0xb284, 0x4693, 0xb028, 0xba10, 0x4070, 0xb0d6, 0x4117, 0x4144, 0x1cb9, 0xbafd, 0x414d, 0x428b, 0x404c, 0x40a9, 0xbfc1, 0xbad9, 0x1cd4, 0x4193, 0x2175, 0x4424, 0x4353, 0x41fb, 0x1085, 0xbfd9, 0x40d9, 0xb226, 0xba45, 0x4397, 0xba74, 0xb04a, 0x0585, 0x0166, 0x43fc, 0x0cb9, 0x4163, 0xa2c8, 0x4167, 0x4298, 0xb2f4, 0x4178, 0x25dd, 0xbf78, 0x4219, 0xba57, 0x2cec, 0x41eb, 0xb2b4, 0x42e3, 0x41d4, 0x4028, 0x19fc, 0x25f6, 0x42c6, 0x411a, 0xb2fc, 0x405f, 0x2db0, 0xba12, 0xba0d, 0x4086, 0x190a, 0xb0d4, 0xb0c7, 0x1a0e, 0x1865, 0x43d6, 0x40f3, 0xbf53, 0x4346, 0x2cce, 0x1b64, 0x4251, 0x4132, 0x3b90, 0x4106, 0x4068, 0x42c8, 0xba69, 0x435b, 0x409c, 0xb23c, 0x40d8, 0xba3a, 0x41f8, 0x0255, 0xba6c, 0x4057, 0x154c, 0x423d, 0xb295, 0xbf5e, 0x39c1, 0xb2c6, 0xb2aa, 0x42ba, 0x41e1, 0x2188, 0xba24, 0xba62, 0xb07c, 0x21ef, 0xb0f3, 0x43ec, 0x4167, 0x16d4, 0x03a1, 0x042a, 0x41bd, 0x41ef, 0x0ce7, 0x40b1, 0x1945, 0x4412, 0x416d, 0xbf73, 0x0cc6, 0x43be, 0x406c, 0x4650, 0x434e, 0xb09f, 0x0557, 0x13bd, 0x1647, 0x1a01, 0x40eb, 0x4257, 0x165b, 0x39b5, 0xba40, 0xbf8d, 0xbf00, 0x45cc, 0xacf1, 0xb21a, 0xb045, 0xba06, 0x42c3, 0x434c, 0x22f5, 0x4361, 0x4168, 0x2d5a, 0x4197, 0x42c2, 0x429f, 0x420f, 0x41ce, 0x4072, 0xb2e6, 0x42b7, 0x0373, 0x0dd4, 0xb2b9, 0x426e, 0x4398, 0x41d1, 0x4391, 0x4388, 0xbfbb, 0x1116, 0x41d9, 0x43a3, 0xb01c, 0x423c, 0xbf23, 0x31dc, 0x4363, 0x1dda, 0x41cb, 0xbf57, 0xba39, 0xa456, 0xb210, 0xb2c3, 0xbacd, 0xb2ae, 0x19df, 0x0c65, 0xbf3c, 0x42c9, 0x4073, 0x46a9, 0x41b0, 0xa506, 0xafdf, 0x4279, 0x416e, 0xa894, 0x15c3, 0x4182, 0x17b8, 0x41c0, 0x2e9c, 0x40bf, 0x4297, 0x42c9, 0x221d, 0xbfe0, 0x27c7, 0xb072, 0xbf13, 0x42e0, 0x1610, 0x43b9, 0x388e, 0x0521, 0xb29e, 0x38ac, 0x1a33, 0x4163, 0x40ae, 0x0262, 0x19ad, 0x1987, 0xbf04, 0x4029, 0x1f7d, 0x4358, 0x046c, 0x1f40, 0xbf00, 0x4052, 0x4228, 0xb0a8, 0xb094, 0xbfdc, 0x4183, 0x1e1d, 0xb006, 0xb244, 0x46b2, 0x40e0, 0x438a, 0x1cf2, 0x09e7, 0xb077, 0x3b0c, 0x42c6, 0x411d, 0x40f4, 0x1d92, 0xb230, 0x3ef5, 0x25ff, 0x40d3, 0xb2fa, 0x0906, 0x33f4, 0x4616, 0xbf93, 0x3405, 0x401a, 0xafb7, 0x4653, 0xb2f2, 0xba5f, 0x43cd, 0x433e, 0xaa58, 0xba2f, 0xb21f, 0x44f2, 0xb2c9, 0xb27f, 0xb219, 0x1f6e, 0x4234, 0xb241, 0x41fc, 0xb299, 0x4262, 0x4332, 0x43c9, 0x1ef1, 0xb209, 0xbf31, 0x4169, 0x4561, 0x439f, 0x43bb, 0x416e, 0x3af5, 0x435e, 0x2c99, 0x407a, 0x41eb, 0xa890, 0x4362, 0xb278, 0xba0b, 0x3322, 0x40ee, 0x4381, 0x3041, 0x434d, 0xbf33, 0xb0f7, 0x40a3, 0x46bd, 0xac4b, 0x4770, 0xe7fe + ], + StartRegs = [0x3b6339cb, 0xac4b9998, 0x998fa8a0, 0x40e73eaf, 0xf51f8ebf, 0x6f72ff20, 0xf89a82e1, 0x902e336b, 0xebc6f449, 0x4b10b8cd, 0x4c95ab80, 0xffe2804d, 0xe91ff5c2, 0x37fd5281, 0x00000000, 0x000001f0 + ], + FinalRegs = [0x00000041, 0xfffffff7, 0x0c803106, 0xf8000021, 0x37fd52a9, 0x02400009, 0x00000000, 0x00000000, 0x4c95ab80, 0x00000000, 0x06f00000, 0xc802acfb, 0x4af3391b, 0x37fd517d, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xa5fa, 0x42f7, 0xb2c5, 0x40ad, 0x440d, 0x430e, 0x1a77, 0xbadb, 0x4199, 0x40e9, 0xa24d, 0xb221, 0x1a13, 0x403c, 0x4128, 0xba46, 0xbf7c, 0x43e8, 0x1a3e, 0xba00, 0x1aaf, 0x42f7, 0x433a, 0xbacb, 0x46c1, 0x4312, 0x43a5, 0x2370, 0x40f9, 0x195f, 0x4133, 0xb06b, 0xba1a, 0xba11, 0x09a0, 0x42e4, 0x4269, 0x42f2, 0xb28d, 0x0ba3, 0x05ab, 0xb298, 0xbfcf, 0xbaff, 0x4302, 0x438e, 0x4286, 0xb06a, 0x42ae, 0xbae0, 0x049b, 0x39b9, 0x4570, 0x4222, 0x0878, 0xbf66, 0x3af7, 0xbf90, 0x45e6, 0x4321, 0x400b, 0x0fdf, 0x42ff, 0xba07, 0x4424, 0x427d, 0x2f2b, 0xb23e, 0x4233, 0xbad7, 0xba58, 0xb293, 0x4430, 0xa78b, 0x424f, 0xb2f0, 0x1cab, 0xbf4f, 0x431c, 0x4199, 0xb0fa, 0x29cf, 0x405a, 0x150b, 0xb2fb, 0x43a7, 0x41c5, 0x31b3, 0xb258, 0x40dc, 0xbfb0, 0xb0b5, 0xa486, 0x4338, 0xba40, 0xbfe0, 0xba52, 0x4157, 0xa730, 0x431c, 0x188f, 0xbf92, 0x4306, 0x415b, 0x251b, 0x407f, 0xaef4, 0x4127, 0x0478, 0x0bcd, 0xb2b8, 0xa743, 0x4220, 0x420f, 0x1bfb, 0x4340, 0xa62a, 0x4329, 0xbf70, 0x2233, 0x43d6, 0x46da, 0x06d3, 0x1a7b, 0xb2fb, 0x08eb, 0x4372, 0xb2cc, 0x20d8, 0x0227, 0xbfc2, 0x1f6f, 0x2906, 0xb2c8, 0x4676, 0xb086, 0xb21f, 0x43e1, 0x4094, 0xbf0b, 0x4269, 0x4153, 0x322b, 0x05ec, 0xb00f, 0x41e5, 0xab98, 0xb03e, 0xb2f7, 0x44dd, 0xb29b, 0x1b5f, 0xb223, 0x1136, 0xb222, 0xb0d3, 0xb2c3, 0x413d, 0xba0c, 0x40c4, 0xbaf2, 0x355b, 0x4352, 0xbaec, 0x428a, 0x3477, 0xbf07, 0x427f, 0x193c, 0x4101, 0x4047, 0x42bd, 0x316c, 0x1da0, 0x460e, 0x18ac, 0x442d, 0x4489, 0xb261, 0xbf6a, 0xb265, 0x4134, 0x430b, 0xb280, 0xb007, 0x146b, 0x0779, 0xb07d, 0x4478, 0x42b5, 0xb25c, 0xbfaa, 0xa1d2, 0x4139, 0xb206, 0xb212, 0xba5e, 0xb261, 0xb237, 0xba11, 0xba18, 0x4357, 0x4178, 0x43cd, 0x4234, 0x4134, 0xb2cc, 0x4388, 0x4374, 0xa39f, 0x43e8, 0x411e, 0xb274, 0xbf5f, 0x1e46, 0x1ddd, 0x404b, 0xb279, 0x37e1, 0x44c4, 0xb093, 0xbf6c, 0xbf70, 0xb068, 0x1584, 0x4018, 0xb256, 0x00cb, 0x4205, 0xa715, 0xbf70, 0x4253, 0x44c5, 0x1f85, 0x189e, 0xbfa0, 0x400c, 0x3a61, 0x424c, 0x46dc, 0xab38, 0xbfb7, 0x0388, 0xba10, 0x1f7f, 0xb052, 0x43f1, 0xbf80, 0xb26b, 0xb2c1, 0x4249, 0x40d6, 0x26e0, 0xbae6, 0x4132, 0x404f, 0x461b, 0x4062, 0x1a87, 0x23fe, 0xb216, 0xba38, 0x4141, 0xa221, 0x40ab, 0x19c9, 0x1f3c, 0xbf65, 0x40fe, 0xb268, 0x413a, 0xb0b3, 0x44e4, 0xa369, 0x4211, 0x2341, 0xbfb0, 0xbfb2, 0xb2aa, 0x2549, 0x4034, 0xb269, 0xa110, 0x4140, 0x4089, 0x4028, 0x2609, 0x4218, 0x43e4, 0xbf00, 0xb2e3, 0xba33, 0x42db, 0x40d0, 0x18fb, 0x3271, 0xbf19, 0x3067, 0x3c16, 0x4130, 0x3563, 0x072b, 0xb043, 0xb0df, 0xb077, 0x4326, 0x42cc, 0x24bd, 0x37cb, 0x41c6, 0x4350, 0x18da, 0xb267, 0x44da, 0x0379, 0xaf9b, 0x42c5, 0xb04f, 0x4012, 0x401e, 0x433c, 0x23d8, 0x4130, 0x1b4a, 0xb264, 0x416a, 0xbf18, 0xb2e9, 0xb056, 0x1944, 0xba2c, 0x4110, 0x2e24, 0x3a58, 0xb291, 0xba4a, 0x322e, 0x45d4, 0x43a9, 0xba4d, 0xbfe1, 0xba67, 0xa1ba, 0x0aab, 0x41d7, 0x1393, 0xaff4, 0xbfc0, 0xaa25, 0x4004, 0x4646, 0x044a, 0x42f6, 0x407f, 0x432c, 0x4394, 0xbf60, 0x409a, 0x4174, 0x0bde, 0x41b7, 0x42e1, 0x42e0, 0x19fd, 0x072c, 0xb005, 0x23da, 0xba36, 0x013b, 0x02b8, 0xbf83, 0x1896, 0x38ab, 0x1802, 0xa075, 0xba64, 0xb23b, 0x40e7, 0x4245, 0x42f4, 0xa000, 0xb27a, 0xbaef, 0x4052, 0x06e6, 0x3e0f, 0xb02a, 0x29cd, 0x0a60, 0x42ad, 0x25d3, 0x4220, 0xb24c, 0x1ad2, 0x4077, 0xb218, 0x4030, 0x4273, 0xbfc1, 0x4288, 0xb0e5, 0x42d9, 0xb219, 0x4303, 0xb2a7, 0x1845, 0x43d0, 0x4378, 0x3c9c, 0x33b3, 0x4156, 0xb0ec, 0xbaf1, 0x3ee5, 0xbada, 0xb2ff, 0x4571, 0x41dc, 0xbfc9, 0xb043, 0x0309, 0xa14d, 0x411d, 0x0eb5, 0x41da, 0x406f, 0x43a7, 0xba70, 0xba57, 0x1bbf, 0x42bb, 0x3d25, 0x1b41, 0xb0f2, 0xba0c, 0x4127, 0xbfcf, 0x4157, 0x1e08, 0xb2a9, 0x4615, 0x41bd, 0x4279, 0xab6d, 0xbaeb, 0x05c6, 0x41de, 0xb24b, 0x0bf1, 0x42ba, 0x42be, 0x392a, 0x4251, 0xba79, 0x0623, 0xbac2, 0x43c4, 0x4279, 0x4222, 0x1d6e, 0x43a2, 0x10dc, 0xb0d9, 0x18c8, 0xb25c, 0xbfa8, 0x402c, 0x1b45, 0x42bd, 0x4367, 0xb0c8, 0x4375, 0x4341, 0xb2d6, 0x42ee, 0xa002, 0x4279, 0xb21b, 0x4397, 0x4057, 0x40c4, 0x2547, 0xa55a, 0x41ed, 0xb06b, 0x43c9, 0x45d2, 0x41b8, 0x4338, 0xbfc9, 0xb249, 0x066a, 0xa8d4, 0xbfa0, 0x41e7, 0x013f, 0x40e1, 0xb27d, 0xba48, 0x19f8, 0xb0d6, 0xb02a, 0xb022, 0x41e3, 0x4363, 0xb200, 0xbf46, 0x431d, 0x0a44, 0x419c, 0x42ce, 0x2bd3, 0x42c1, 0xb0d5, 0x0d26, 0x44d8, 0x1cfa, 0x4054, 0xba30, 0xb29a, 0xb241, 0xbfd0, 0xb297, 0xb2b9, 0x43f8, 0xb23e, 0xb2ad, 0xba6f, 0xb23d, 0xb013, 0xba77, 0x3e95, 0xba62, 0xb0cc, 0xba22, 0xbf79, 0xba6e, 0x1ac2, 0x339f, 0xb041, 0x415b, 0xb289, 0x42b5, 0xb246, 0x0107, 0x406c, 0x4219, 0x41ae, 0x1dfa, 0xba38, 0xb217, 0xb217, 0x432f, 0x43fe, 0x1e95, 0xbfcc, 0x43df, 0x06a8, 0x4158, 0xad6e, 0x43d8, 0x1902, 0x43ba, 0x4289, 0xbf55, 0xba62, 0xbafa, 0x41dc, 0x3893, 0x41a6, 0x3bd9, 0x0066, 0x4433, 0xbae0, 0x4373, 0x4367, 0x3924, 0x4193, 0xb295, 0xb23e, 0x19cf, 0xb24b, 0x42a2, 0x3c87, 0xb015, 0xbf55, 0x1b93, 0x46bd, 0x423e, 0x43f0, 0xb0b4, 0x4036, 0xb2ef, 0x0fc6, 0xb225, 0x45c6, 0xa8dd, 0xb00a, 0x4091, 0xb265, 0x4211, 0xbacb, 0xbf68, 0xb21d, 0x1058, 0x4385, 0xaa47, 0x32ae, 0x46f0, 0xbf29, 0x1858, 0xab7c, 0xba78, 0x44d3, 0x464d, 0x42dd, 0x43d2, 0x17b7, 0xb0f1, 0x4138, 0x408d, 0xbf6f, 0x41b8, 0xb25c, 0x1b45, 0x40b6, 0x4084, 0x1a56, 0x1c02, 0xb2c7, 0x41df, 0xb0f9, 0x3625, 0x0a77, 0xbf80, 0x1997, 0x441f, 0x410a, 0xb209, 0x4323, 0x2e9c, 0xade2, 0xb211, 0x40aa, 0x4618, 0x4160, 0x18d1, 0x4398, 0xb25a, 0x409d, 0x4311, 0xbf05, 0x29a5, 0x438b, 0xb003, 0xa5db, 0x42b5, 0xbae1, 0x4011, 0x4415, 0x416c, 0xbfce, 0x08cd, 0xb29b, 0xb26c, 0x40c6, 0xbf8f, 0x41de, 0xb09d, 0x3a51, 0x2fba, 0x4341, 0xb27d, 0xb250, 0x438d, 0x43a3, 0x417a, 0xb2b8, 0xba3b, 0x40c8, 0x4349, 0x4323, 0xb2b1, 0x45c1, 0x41a5, 0xba36, 0x4138, 0x401f, 0xbfd0, 0xb20b, 0xb27d, 0x4267, 0x42e2, 0x45a8, 0xbf9e, 0xbadd, 0x41e8, 0x1c5e, 0x4133, 0xbaef, 0xbf6e, 0xa20d, 0xba19, 0x4194, 0x283b, 0x1d04, 0xb2bf, 0x42aa, 0x2109, 0x433c, 0x45ca, 0xa3e1, 0xbff0, 0xb0cc, 0x3304, 0x40af, 0xa1b6, 0x38e2, 0xba5f, 0x3c6d, 0xb2c9, 0x44f3, 0xb23c, 0x3f80, 0xbf60, 0x419c, 0x427c, 0x4207, 0xbfc5, 0x1e21, 0xa5e6, 0x40b7, 0x4020, 0xbf70, 0xa166, 0xbf2b, 0xb065, 0x10e9, 0x4355, 0xb262, 0x43ad, 0x40aa, 0x0291, 0x1958, 0x1c0b, 0x02ce, 0x4046, 0x3833, 0x1b88, 0xbfd0, 0xbf60, 0xbf66, 0xb09b, 0x1abf, 0x4381, 0x40fe, 0x4175, 0x3d96, 0x1bcb, 0x0a61, 0x43ee, 0x2678, 0xa7a5, 0x40d8, 0xb283, 0x4419, 0x40df, 0x1f45, 0x436f, 0x4085, 0x40c5, 0x413d, 0xb251, 0xbf15, 0x0cf4, 0x4205, 0xba59, 0xb239, 0x4394, 0x41ba, 0x4162, 0x17bb, 0xb2c0, 0x404c, 0x4155, 0x41e9, 0xbf2c, 0x42f5, 0xb254, 0x43a2, 0xbad4, 0xb266, 0xbaf9, 0x1a34, 0x2cef, 0xba72, 0x411d, 0xb0d2, 0x423e, 0x4437, 0x460a, 0xbfb2, 0x38b1, 0x28e2, 0xb285, 0xbfd0, 0x0d57, 0xb0a5, 0x439c, 0xb21f, 0x0547, 0x2a77, 0x43a2, 0x3c57, 0xb223, 0x1a5c, 0x12e5, 0xaa5a, 0xbf97, 0xba6b, 0x1f64, 0xba18, 0x431a, 0xb2fc, 0x4245, 0x438c, 0x4248, 0xbf60, 0x403c, 0x436e, 0x42c7, 0xb218, 0x4169, 0xbfc0, 0xba72, 0x4285, 0x4493, 0x4296, 0x4255, 0xb0e8, 0x45c9, 0x4083, 0xbfaf, 0xbf60, 0x4323, 0xbfd0, 0xb260, 0x45e4, 0x40e6, 0x43b3, 0xbf73, 0x440f, 0x1b4e, 0x430c, 0x43aa, 0xba3a, 0xb27b, 0xb251, 0x2bbe, 0xb2c2, 0xae3d, 0xb2d6, 0xba1b, 0x3599, 0x40ce, 0xb060, 0x40bc, 0xb237, 0x4087, 0x0927, 0x41a4, 0xb03b, 0x2497, 0x4485, 0x41c7, 0x426c, 0x4097, 0xbfaf, 0x41ed, 0xba17, 0x43fb, 0x40a4, 0xbf4e, 0xa776, 0x206d, 0x288a, 0x4300, 0x4111, 0x40cf, 0x4287, 0x404e, 0x426f, 0x2cfd, 0xb26a, 0xabd6, 0x43c3, 0xbfa9, 0x259b, 0x2856, 0x41ef, 0x196c, 0xb242, 0x45e4, 0x41ad, 0xa510, 0xb2ba, 0x16fe, 0x44e8, 0x42f3, 0x40a6, 0x1d3a, 0x2313, 0x4167, 0x44c5, 0x43e2, 0xa74d, 0x42a4, 0x257a, 0x1d63, 0xb202, 0x1ccf, 0x46b2, 0x2a5f, 0x4354, 0x39a8, 0xbf65, 0xb09e, 0x43e6, 0xa4e6, 0x1cb6, 0x1f46, 0x1ff3, 0x348a, 0xb220, 0xb2d8, 0xbfa0, 0xbf5d, 0x415d, 0xb265, 0x4299, 0x413f, 0xba62, 0x031b, 0x4473, 0x0ba1, 0x1acf, 0x41ce, 0x4041, 0x403b, 0xb276, 0xba7e, 0x0190, 0x0272, 0x408e, 0xbf13, 0xb2ea, 0x4216, 0x43a0, 0x4216, 0x4034, 0x401f, 0x43c0, 0x4147, 0xba0b, 0x42c1, 0xba30, 0xbaf4, 0x416a, 0x4178, 0xbad5, 0xbf90, 0xa8a6, 0x4192, 0xbfc3, 0x40c7, 0x4377, 0x2630, 0xb0eb, 0x45a1, 0x43dd, 0x1a55, 0xb229, 0xb2dc, 0x406a, 0x40f7, 0xb075, 0x43d3, 0xb2aa, 0x0a60, 0x07d8, 0x42ab, 0x4266, 0xbf69, 0x436f, 0xbfe0, 0x45d9, 0x1de6, 0x4003, 0x435b, 0xa29c, 0xb255, 0x2ad4, 0x41c4, 0x458d, 0xbf04, 0xba6b, 0x1aad, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xa3e9d705, 0xe9aa48da, 0xc172d1f9, 0x9b3d01b0, 0x01afea06, 0xeb3a9b8a, 0x12cc8d93, 0x01c88d27, 0x58e8c5c1, 0xdc241641, 0x7eb66cf7, 0x4ab2dd86, 0x10ad69fd, 0x3b68308b, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x00000000, 0xffffff9e, 0x00001a40, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0xffe68b7f, 0x008fee88, 0x58e8c62c, 0x00000000, 0x22b65886, 0x9565bb0c, 0x011fdd38, 0x00000000, 0x000001d0 }, + Instructions = [0xa5fa, 0x42f7, 0xb2c5, 0x40ad, 0x440d, 0x430e, 0x1a77, 0xbadb, 0x4199, 0x40e9, 0xa24d, 0xb221, 0x1a13, 0x403c, 0x4128, 0xba46, 0xbf7c, 0x43e8, 0x1a3e, 0xba00, 0x1aaf, 0x42f7, 0x433a, 0xbacb, 0x46c1, 0x4312, 0x43a5, 0x2370, 0x40f9, 0x195f, 0x4133, 0xb06b, 0xba1a, 0xba11, 0x09a0, 0x42e4, 0x4269, 0x42f2, 0xb28d, 0x0ba3, 0x05ab, 0xb298, 0xbfcf, 0xbaff, 0x4302, 0x438e, 0x4286, 0xb06a, 0x42ae, 0xbae0, 0x049b, 0x39b9, 0x4570, 0x4222, 0x0878, 0xbf66, 0x3af7, 0xbf90, 0x45e6, 0x4321, 0x400b, 0x0fdf, 0x42ff, 0xba07, 0x4424, 0x427d, 0x2f2b, 0xb23e, 0x4233, 0xbad7, 0xba58, 0xb293, 0x4430, 0xa78b, 0x424f, 0xb2f0, 0x1cab, 0xbf4f, 0x431c, 0x4199, 0xb0fa, 0x29cf, 0x405a, 0x150b, 0xb2fb, 0x43a7, 0x41c5, 0x31b3, 0xb258, 0x40dc, 0xbfb0, 0xb0b5, 0xa486, 0x4338, 0xba40, 0xbfe0, 0xba52, 0x4157, 0xa730, 0x431c, 0x188f, 0xbf92, 0x4306, 0x415b, 0x251b, 0x407f, 0xaef4, 0x4127, 0x0478, 0x0bcd, 0xb2b8, 0xa743, 0x4220, 0x420f, 0x1bfb, 0x4340, 0xa62a, 0x4329, 0xbf70, 0x2233, 0x43d6, 0x46da, 0x06d3, 0x1a7b, 0xb2fb, 0x08eb, 0x4372, 0xb2cc, 0x20d8, 0x0227, 0xbfc2, 0x1f6f, 0x2906, 0xb2c8, 0x4676, 0xb086, 0xb21f, 0x43e1, 0x4094, 0xbf0b, 0x4269, 0x4153, 0x322b, 0x05ec, 0xb00f, 0x41e5, 0xab98, 0xb03e, 0xb2f7, 0x44dd, 0xb29b, 0x1b5f, 0xb223, 0x1136, 0xb222, 0xb0d3, 0xb2c3, 0x413d, 0xba0c, 0x40c4, 0xbaf2, 0x355b, 0x4352, 0xbaec, 0x428a, 0x3477, 0xbf07, 0x427f, 0x193c, 0x4101, 0x4047, 0x42bd, 0x316c, 0x1da0, 0x460e, 0x18ac, 0x442d, 0x4489, 0xb261, 0xbf6a, 0xb265, 0x4134, 0x430b, 0xb280, 0xb007, 0x146b, 0x0779, 0xb07d, 0x4478, 0x42b5, 0xb25c, 0xbfaa, 0xa1d2, 0x4139, 0xb206, 0xb212, 0xba5e, 0xb261, 0xb237, 0xba11, 0xba18, 0x4357, 0x4178, 0x43cd, 0x4234, 0x4134, 0xb2cc, 0x4388, 0x4374, 0xa39f, 0x43e8, 0x411e, 0xb274, 0xbf5f, 0x1e46, 0x1ddd, 0x404b, 0xb279, 0x37e1, 0x44c4, 0xb093, 0xbf6c, 0xbf70, 0xb068, 0x1584, 0x4018, 0xb256, 0x00cb, 0x4205, 0xa715, 0xbf70, 0x4253, 0x44c5, 0x1f85, 0x189e, 0xbfa0, 0x400c, 0x3a61, 0x424c, 0x46dc, 0xab38, 0xbfb7, 0x0388, 0xba10, 0x1f7f, 0xb052, 0x43f1, 0xbf80, 0xb26b, 0xb2c1, 0x4249, 0x40d6, 0x26e0, 0xbae6, 0x4132, 0x404f, 0x461b, 0x4062, 0x1a87, 0x23fe, 0xb216, 0xba38, 0x4141, 0xa221, 0x40ab, 0x19c9, 0x1f3c, 0xbf65, 0x40fe, 0xb268, 0x413a, 0xb0b3, 0x44e4, 0xa369, 0x4211, 0x2341, 0xbfb0, 0xbfb2, 0xb2aa, 0x2549, 0x4034, 0xb269, 0xa110, 0x4140, 0x4089, 0x4028, 0x2609, 0x4218, 0x43e4, 0xbf00, 0xb2e3, 0xba33, 0x42db, 0x40d0, 0x18fb, 0x3271, 0xbf19, 0x3067, 0x3c16, 0x4130, 0x3563, 0x072b, 0xb043, 0xb0df, 0xb077, 0x4326, 0x42cc, 0x24bd, 0x37cb, 0x41c6, 0x4350, 0x18da, 0xb267, 0x44da, 0x0379, 0xaf9b, 0x42c5, 0xb04f, 0x4012, 0x401e, 0x433c, 0x23d8, 0x4130, 0x1b4a, 0xb264, 0x416a, 0xbf18, 0xb2e9, 0xb056, 0x1944, 0xba2c, 0x4110, 0x2e24, 0x3a58, 0xb291, 0xba4a, 0x322e, 0x45d4, 0x43a9, 0xba4d, 0xbfe1, 0xba67, 0xa1ba, 0x0aab, 0x41d7, 0x1393, 0xaff4, 0xbfc0, 0xaa25, 0x4004, 0x4646, 0x044a, 0x42f6, 0x407f, 0x432c, 0x4394, 0xbf60, 0x409a, 0x4174, 0x0bde, 0x41b7, 0x42e1, 0x42e0, 0x19fd, 0x072c, 0xb005, 0x23da, 0xba36, 0x013b, 0x02b8, 0xbf83, 0x1896, 0x38ab, 0x1802, 0xa075, 0xba64, 0xb23b, 0x40e7, 0x4245, 0x42f4, 0xa000, 0xb27a, 0xbaef, 0x4052, 0x06e6, 0x3e0f, 0xb02a, 0x29cd, 0x0a60, 0x42ad, 0x25d3, 0x4220, 0xb24c, 0x1ad2, 0x4077, 0xb218, 0x4030, 0x4273, 0xbfc1, 0x4288, 0xb0e5, 0x42d9, 0xb219, 0x4303, 0xb2a7, 0x1845, 0x43d0, 0x4378, 0x3c9c, 0x33b3, 0x4156, 0xb0ec, 0xbaf1, 0x3ee5, 0xbada, 0xb2ff, 0x4571, 0x41dc, 0xbfc9, 0xb043, 0x0309, 0xa14d, 0x411d, 0x0eb5, 0x41da, 0x406f, 0x43a7, 0xba70, 0xba57, 0x1bbf, 0x42bb, 0x3d25, 0x1b41, 0xb0f2, 0xba0c, 0x4127, 0xbfcf, 0x4157, 0x1e08, 0xb2a9, 0x4615, 0x41bd, 0x4279, 0xab6d, 0xbaeb, 0x05c6, 0x41de, 0xb24b, 0x0bf1, 0x42ba, 0x42be, 0x392a, 0x4251, 0xba79, 0x0623, 0xbac2, 0x43c4, 0x4279, 0x4222, 0x1d6e, 0x43a2, 0x10dc, 0xb0d9, 0x18c8, 0xb25c, 0xbfa8, 0x402c, 0x1b45, 0x42bd, 0x4367, 0xb0c8, 0x4375, 0x4341, 0xb2d6, 0x42ee, 0xa002, 0x4279, 0xb21b, 0x4397, 0x4057, 0x40c4, 0x2547, 0xa55a, 0x41ed, 0xb06b, 0x43c9, 0x45d2, 0x41b8, 0x4338, 0xbfc9, 0xb249, 0x066a, 0xa8d4, 0xbfa0, 0x41e7, 0x013f, 0x40e1, 0xb27d, 0xba48, 0x19f8, 0xb0d6, 0xb02a, 0xb022, 0x41e3, 0x4363, 0xb200, 0xbf46, 0x431d, 0x0a44, 0x419c, 0x42ce, 0x2bd3, 0x42c1, 0xb0d5, 0x0d26, 0x44d8, 0x1cfa, 0x4054, 0xba30, 0xb29a, 0xb241, 0xbfd0, 0xb297, 0xb2b9, 0x43f8, 0xb23e, 0xb2ad, 0xba6f, 0xb23d, 0xb013, 0xba77, 0x3e95, 0xba62, 0xb0cc, 0xba22, 0xbf79, 0xba6e, 0x1ac2, 0x339f, 0xb041, 0x415b, 0xb289, 0x42b5, 0xb246, 0x0107, 0x406c, 0x4219, 0x41ae, 0x1dfa, 0xba38, 0xb217, 0xb217, 0x432f, 0x43fe, 0x1e95, 0xbfcc, 0x43df, 0x06a8, 0x4158, 0xad6e, 0x43d8, 0x1902, 0x43ba, 0x4289, 0xbf55, 0xba62, 0xbafa, 0x41dc, 0x3893, 0x41a6, 0x3bd9, 0x0066, 0x4433, 0xbae0, 0x4373, 0x4367, 0x3924, 0x4193, 0xb295, 0xb23e, 0x19cf, 0xb24b, 0x42a2, 0x3c87, 0xb015, 0xbf55, 0x1b93, 0x46bd, 0x423e, 0x43f0, 0xb0b4, 0x4036, 0xb2ef, 0x0fc6, 0xb225, 0x45c6, 0xa8dd, 0xb00a, 0x4091, 0xb265, 0x4211, 0xbacb, 0xbf68, 0xb21d, 0x1058, 0x4385, 0xaa47, 0x32ae, 0x46f0, 0xbf29, 0x1858, 0xab7c, 0xba78, 0x44d3, 0x464d, 0x42dd, 0x43d2, 0x17b7, 0xb0f1, 0x4138, 0x408d, 0xbf6f, 0x41b8, 0xb25c, 0x1b45, 0x40b6, 0x4084, 0x1a56, 0x1c02, 0xb2c7, 0x41df, 0xb0f9, 0x3625, 0x0a77, 0xbf80, 0x1997, 0x441f, 0x410a, 0xb209, 0x4323, 0x2e9c, 0xade2, 0xb211, 0x40aa, 0x4618, 0x4160, 0x18d1, 0x4398, 0xb25a, 0x409d, 0x4311, 0xbf05, 0x29a5, 0x438b, 0xb003, 0xa5db, 0x42b5, 0xbae1, 0x4011, 0x4415, 0x416c, 0xbfce, 0x08cd, 0xb29b, 0xb26c, 0x40c6, 0xbf8f, 0x41de, 0xb09d, 0x3a51, 0x2fba, 0x4341, 0xb27d, 0xb250, 0x438d, 0x43a3, 0x417a, 0xb2b8, 0xba3b, 0x40c8, 0x4349, 0x4323, 0xb2b1, 0x45c1, 0x41a5, 0xba36, 0x4138, 0x401f, 0xbfd0, 0xb20b, 0xb27d, 0x4267, 0x42e2, 0x45a8, 0xbf9e, 0xbadd, 0x41e8, 0x1c5e, 0x4133, 0xbaef, 0xbf6e, 0xa20d, 0xba19, 0x4194, 0x283b, 0x1d04, 0xb2bf, 0x42aa, 0x2109, 0x433c, 0x45ca, 0xa3e1, 0xbff0, 0xb0cc, 0x3304, 0x40af, 0xa1b6, 0x38e2, 0xba5f, 0x3c6d, 0xb2c9, 0x44f3, 0xb23c, 0x3f80, 0xbf60, 0x419c, 0x427c, 0x4207, 0xbfc5, 0x1e21, 0xa5e6, 0x40b7, 0x4020, 0xbf70, 0xa166, 0xbf2b, 0xb065, 0x10e9, 0x4355, 0xb262, 0x43ad, 0x40aa, 0x0291, 0x1958, 0x1c0b, 0x02ce, 0x4046, 0x3833, 0x1b88, 0xbfd0, 0xbf60, 0xbf66, 0xb09b, 0x1abf, 0x4381, 0x40fe, 0x4175, 0x3d96, 0x1bcb, 0x0a61, 0x43ee, 0x2678, 0xa7a5, 0x40d8, 0xb283, 0x4419, 0x40df, 0x1f45, 0x436f, 0x4085, 0x40c5, 0x413d, 0xb251, 0xbf15, 0x0cf4, 0x4205, 0xba59, 0xb239, 0x4394, 0x41ba, 0x4162, 0x17bb, 0xb2c0, 0x404c, 0x4155, 0x41e9, 0xbf2c, 0x42f5, 0xb254, 0x43a2, 0xbad4, 0xb266, 0xbaf9, 0x1a34, 0x2cef, 0xba72, 0x411d, 0xb0d2, 0x423e, 0x4437, 0x460a, 0xbfb2, 0x38b1, 0x28e2, 0xb285, 0xbfd0, 0x0d57, 0xb0a5, 0x439c, 0xb21f, 0x0547, 0x2a77, 0x43a2, 0x3c57, 0xb223, 0x1a5c, 0x12e5, 0xaa5a, 0xbf97, 0xba6b, 0x1f64, 0xba18, 0x431a, 0xb2fc, 0x4245, 0x438c, 0x4248, 0xbf60, 0x403c, 0x436e, 0x42c7, 0xb218, 0x4169, 0xbfc0, 0xba72, 0x4285, 0x4493, 0x4296, 0x4255, 0xb0e8, 0x45c9, 0x4083, 0xbfaf, 0xbf60, 0x4323, 0xbfd0, 0xb260, 0x45e4, 0x40e6, 0x43b3, 0xbf73, 0x440f, 0x1b4e, 0x430c, 0x43aa, 0xba3a, 0xb27b, 0xb251, 0x2bbe, 0xb2c2, 0xae3d, 0xb2d6, 0xba1b, 0x3599, 0x40ce, 0xb060, 0x40bc, 0xb237, 0x4087, 0x0927, 0x41a4, 0xb03b, 0x2497, 0x4485, 0x41c7, 0x426c, 0x4097, 0xbfaf, 0x41ed, 0xba17, 0x43fb, 0x40a4, 0xbf4e, 0xa776, 0x206d, 0x288a, 0x4300, 0x4111, 0x40cf, 0x4287, 0x404e, 0x426f, 0x2cfd, 0xb26a, 0xabd6, 0x43c3, 0xbfa9, 0x259b, 0x2856, 0x41ef, 0x196c, 0xb242, 0x45e4, 0x41ad, 0xa510, 0xb2ba, 0x16fe, 0x44e8, 0x42f3, 0x40a6, 0x1d3a, 0x2313, 0x4167, 0x44c5, 0x43e2, 0xa74d, 0x42a4, 0x257a, 0x1d63, 0xb202, 0x1ccf, 0x46b2, 0x2a5f, 0x4354, 0x39a8, 0xbf65, 0xb09e, 0x43e6, 0xa4e6, 0x1cb6, 0x1f46, 0x1ff3, 0x348a, 0xb220, 0xb2d8, 0xbfa0, 0xbf5d, 0x415d, 0xb265, 0x4299, 0x413f, 0xba62, 0x031b, 0x4473, 0x0ba1, 0x1acf, 0x41ce, 0x4041, 0x403b, 0xb276, 0xba7e, 0x0190, 0x0272, 0x408e, 0xbf13, 0xb2ea, 0x4216, 0x43a0, 0x4216, 0x4034, 0x401f, 0x43c0, 0x4147, 0xba0b, 0x42c1, 0xba30, 0xbaf4, 0x416a, 0x4178, 0xbad5, 0xbf90, 0xa8a6, 0x4192, 0xbfc3, 0x40c7, 0x4377, 0x2630, 0xb0eb, 0x45a1, 0x43dd, 0x1a55, 0xb229, 0xb2dc, 0x406a, 0x40f7, 0xb075, 0x43d3, 0xb2aa, 0x0a60, 0x07d8, 0x42ab, 0x4266, 0xbf69, 0x436f, 0xbfe0, 0x45d9, 0x1de6, 0x4003, 0x435b, 0xa29c, 0xb255, 0x2ad4, 0x41c4, 0x458d, 0xbf04, 0xba6b, 0x1aad, 0x4770, 0xe7fe + ], + StartRegs = [0xa3e9d705, 0xe9aa48da, 0xc172d1f9, 0x9b3d01b0, 0x01afea06, 0xeb3a9b8a, 0x12cc8d93, 0x01c88d27, 0x58e8c5c1, 0xdc241641, 0x7eb66cf7, 0x4ab2dd86, 0x10ad69fd, 0x3b68308b, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x00000000, 0xffffff9e, 0x00001a40, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0xffe68b7f, 0x008fee88, 0x58e8c62c, 0x00000000, 0x22b65886, 0x9565bb0c, 0x011fdd38, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x43cc, 0x407a, 0x415b, 0x42d2, 0xb20d, 0x41de, 0x1b41, 0x19b6, 0xb051, 0x1dcf, 0x36bc, 0x29fd, 0xbf00, 0x15eb, 0x415d, 0x2be9, 0x1bd3, 0xba76, 0x41a0, 0x45b0, 0xb26e, 0x0c41, 0x3dc0, 0xa863, 0x08ac, 0xbf87, 0x01a2, 0xba51, 0x430e, 0x1090, 0x425e, 0x428c, 0xba79, 0xb0b7, 0x1c66, 0x1c0e, 0x1bf3, 0x40df, 0x4663, 0x4346, 0x1b2f, 0x19fe, 0xbfdd, 0x0720, 0xa14b, 0x1a70, 0xba79, 0xba54, 0xba53, 0x42ef, 0x42c0, 0x409f, 0xbfd6, 0x4276, 0x41df, 0x2a4b, 0x43d6, 0x4094, 0x403d, 0x456a, 0x4027, 0x40b1, 0xac6c, 0x4201, 0x426d, 0x40f2, 0x3d25, 0xb26c, 0x2c76, 0x4193, 0xb0ae, 0x4048, 0x46f4, 0x0f9b, 0xbf00, 0x435b, 0xbfd0, 0x4166, 0x42da, 0xbf78, 0x42a6, 0x455c, 0x428d, 0xbafc, 0x140b, 0xbf8d, 0xb201, 0x4348, 0x4198, 0x1ad2, 0x41fb, 0xba39, 0xb295, 0xbf07, 0x43cb, 0x1d7c, 0xb285, 0x4223, 0x41a0, 0x2f9b, 0xbfa0, 0xb0ab, 0xb00d, 0x411f, 0x463a, 0x43d7, 0xb240, 0xbac6, 0x4067, 0xaa78, 0xb25f, 0x41f2, 0x438d, 0x42ed, 0x4217, 0xbf36, 0x4110, 0x4127, 0xb2dd, 0x4033, 0xae52, 0x4633, 0x401e, 0x1060, 0xb026, 0x3426, 0x4328, 0x4223, 0x3866, 0x4665, 0x1c0d, 0x05a2, 0xbf5c, 0xb2e6, 0xa188, 0xac49, 0x424b, 0x261f, 0x41c5, 0x41e9, 0xad0a, 0x2738, 0xba47, 0xa121, 0xb095, 0x45ee, 0x18ca, 0xbf80, 0x030f, 0x4279, 0x46e2, 0x418d, 0x44c5, 0xb250, 0x4248, 0xb026, 0xbfa8, 0x41d3, 0xa696, 0x426f, 0x45da, 0xb294, 0x40e2, 0x1ccd, 0xa595, 0x420e, 0xaf3b, 0x10ee, 0xb0ae, 0x3c78, 0x413a, 0xb0b4, 0x23f4, 0xbf5d, 0x18be, 0xb077, 0x4070, 0x022e, 0x41be, 0xb2a9, 0x42c3, 0xbf1f, 0x4194, 0x037b, 0xbfd0, 0x42ef, 0x025e, 0xb21c, 0xbf91, 0x4016, 0x43e7, 0x4280, 0x409e, 0xb25b, 0xb023, 0xb224, 0xaa0f, 0xba4b, 0x1b56, 0xba31, 0xa177, 0x4118, 0x08be, 0x433b, 0xb023, 0x40cb, 0x2d55, 0xb0a3, 0x40ef, 0x44d9, 0x420f, 0xb0a7, 0x39b0, 0x412b, 0xbfa8, 0x1e44, 0x4602, 0xbfa3, 0xba1e, 0xb2c6, 0x429a, 0xb205, 0x047a, 0xb0fe, 0x4373, 0xbad8, 0x434c, 0x30e0, 0x1ee5, 0xbfb0, 0x410e, 0xb21e, 0xa97d, 0x42b1, 0x4671, 0x433f, 0xbf0d, 0x0ee6, 0x42ac, 0x19e3, 0x41a3, 0xbfa0, 0xba44, 0xa51c, 0xb241, 0xb2af, 0x415a, 0x0a3c, 0xbf1c, 0x28a0, 0x43d5, 0x4200, 0x43f3, 0x4240, 0x419c, 0x3d0b, 0xb09a, 0xa807, 0x42fa, 0x41e0, 0xbad5, 0x3438, 0xba09, 0xb0f9, 0x4628, 0x4167, 0x1b7b, 0xba0a, 0xa17a, 0xb276, 0x40b8, 0x121a, 0x133c, 0xbf34, 0x3613, 0xb259, 0x4105, 0x41de, 0x4155, 0xa2c3, 0x189d, 0xbf65, 0xb017, 0xa019, 0xb082, 0x40c1, 0x4319, 0x1806, 0x1131, 0xbf87, 0x402b, 0x2960, 0x1969, 0x4232, 0x465a, 0xa10c, 0x464a, 0x37eb, 0x45a3, 0x401d, 0x1f11, 0xb0f1, 0x4210, 0x439a, 0x4048, 0x44a1, 0x28fb, 0x44f0, 0xb0b6, 0x41bf, 0x199b, 0xb268, 0x421a, 0x0b58, 0x40ad, 0x18b6, 0xbf09, 0x402a, 0x137c, 0x4046, 0x175f, 0xb0cf, 0x419b, 0xbf52, 0x419d, 0x4213, 0x04a6, 0xba01, 0xbff0, 0x01d4, 0x1932, 0x42d7, 0x4123, 0x4160, 0x0e55, 0x40c5, 0x195a, 0x43bc, 0x413d, 0x1d89, 0x40e8, 0xb21b, 0xb2a3, 0x43e1, 0x417e, 0x423c, 0x24d1, 0xbf6d, 0xa57c, 0x2ff1, 0x05fa, 0x4200, 0xb26f, 0x05f6, 0x064f, 0xbfcd, 0xb2dd, 0x40ed, 0x360f, 0xbafa, 0xb0e6, 0x2f81, 0x09cc, 0x4072, 0x408c, 0x0899, 0xb26c, 0x1ee4, 0x465f, 0x4175, 0xa5b6, 0xba63, 0x1ffc, 0x4094, 0x1a4f, 0xba23, 0xbf2b, 0x25dc, 0xba1f, 0x413b, 0x4105, 0x4180, 0x4186, 0xb2f9, 0x4194, 0xbfae, 0x1da7, 0x1afc, 0x4330, 0x3083, 0x43e5, 0x1f44, 0xba0a, 0x4469, 0x4062, 0xbaeb, 0x16ab, 0x363c, 0x1bdd, 0x40b0, 0xbfa8, 0x4346, 0x4129, 0xb080, 0x4450, 0x40d1, 0x12e2, 0x40a6, 0xae28, 0xbf74, 0xb08f, 0xb280, 0x0fb5, 0xb287, 0xb28e, 0x4238, 0x296f, 0x4398, 0x43b3, 0xb0b7, 0xba78, 0xbf73, 0x41be, 0x40ec, 0x1602, 0xb227, 0xb2c4, 0xbf28, 0x4298, 0x2f81, 0xbadc, 0x1dd0, 0xb255, 0x2521, 0xbac6, 0x03e6, 0xa5ac, 0xba11, 0x401e, 0x4172, 0x1912, 0x43a1, 0xbfa0, 0x41da, 0xb283, 0x2be3, 0xbaff, 0x24bf, 0x415a, 0x1da5, 0x4212, 0x436f, 0x41b8, 0xb29e, 0xbf28, 0xb2e8, 0x1ff8, 0xabd8, 0xb064, 0xba4e, 0x4136, 0x425c, 0x41b5, 0xba40, 0x19bb, 0x26a6, 0xbf26, 0xbaf6, 0xba55, 0x4169, 0x40c2, 0xb2c0, 0x0da2, 0x41fc, 0x3d98, 0x43d1, 0x19af, 0x4023, 0x0a9d, 0xb003, 0xb046, 0x1866, 0x40b2, 0x41af, 0xbafa, 0x1bd8, 0xbfa8, 0x4450, 0x427a, 0x4190, 0x1aa2, 0xa784, 0x1069, 0xb095, 0x181a, 0x4450, 0x41b6, 0x1bf7, 0x1d12, 0x347a, 0x41a3, 0xb263, 0x4215, 0x431c, 0x433c, 0xbf61, 0xb200, 0xb2db, 0x1c1d, 0xb2e5, 0xbf60, 0x12e2, 0xa6a8, 0x45aa, 0xb2bc, 0x41ca, 0xb2d7, 0xab7e, 0x0d22, 0xbf9e, 0x40b8, 0x2c08, 0x1db6, 0x3d47, 0x42ee, 0x4081, 0x412b, 0xa807, 0x350a, 0x43c6, 0xaea7, 0xbf5d, 0xa806, 0xb2cc, 0x4143, 0x30fb, 0x0043, 0x46b9, 0x1c7f, 0x1e13, 0x0da5, 0xb214, 0x3da5, 0x437f, 0x3532, 0x458a, 0x4131, 0x424b, 0x144f, 0x433a, 0x3f9b, 0x0dfc, 0x1faf, 0xb253, 0x4137, 0xbfd0, 0xbf49, 0x4107, 0x24b5, 0x4324, 0x40fb, 0x30c9, 0x1ea2, 0x324f, 0x1a34, 0x0dc7, 0x40e7, 0x1d48, 0x41dd, 0xae7c, 0x43a3, 0x299f, 0xbf01, 0xb077, 0x3770, 0x4140, 0xbfe0, 0x4265, 0x4019, 0x40ed, 0x0afe, 0x1b29, 0x1afc, 0xb23c, 0x04db, 0xb214, 0x439d, 0x2938, 0x0092, 0x40b0, 0x43c0, 0x43d5, 0xb0c1, 0xa37e, 0x1e61, 0xb021, 0x4022, 0xbf6f, 0x4114, 0x407d, 0x428c, 0x415e, 0x4256, 0xb0ea, 0x41e6, 0xbaf7, 0x4060, 0x1ee1, 0x1100, 0x42d5, 0xb25f, 0xb063, 0xb253, 0x1945, 0x30ee, 0x4210, 0x3373, 0x42a7, 0xbf72, 0x42d1, 0xb038, 0xbae9, 0x43ea, 0x40c7, 0xbfa0, 0x299d, 0xb294, 0x404e, 0x085d, 0x4341, 0x4172, 0x1c2a, 0x4183, 0xbf2b, 0xb2b7, 0x40ab, 0xb279, 0x43a9, 0x1cc5, 0x4208, 0x402f, 0x43b8, 0x43ee, 0x41e4, 0x3928, 0xba55, 0x4235, 0x2c5d, 0xbf90, 0x4278, 0xab33, 0x4338, 0x1631, 0x43b3, 0xbfc0, 0x058f, 0xba1c, 0x424d, 0x40e6, 0x3bc1, 0x43a9, 0xba00, 0xbf3e, 0x41fc, 0xa8a3, 0xba2b, 0x1e86, 0x23a6, 0x41f5, 0x40e4, 0x40c8, 0x430d, 0x46b2, 0xba5d, 0x415b, 0x32b1, 0x43ec, 0x2faf, 0xbfda, 0x43ac, 0xa3e2, 0xb283, 0x1c45, 0x4341, 0x4133, 0x40b4, 0x36da, 0x1c1e, 0x4395, 0xba7e, 0x4070, 0x1aeb, 0x467a, 0xb29e, 0x345f, 0x4364, 0xbf00, 0x412e, 0xb2e8, 0x1b7e, 0x2b8a, 0x42c7, 0x412b, 0x4097, 0xb2bf, 0xbf0c, 0x1914, 0x443e, 0x3c97, 0x310b, 0x4091, 0x4367, 0x409f, 0xba38, 0xbf33, 0x403d, 0x4024, 0x1d51, 0x43ed, 0xba4c, 0x4057, 0x46fc, 0x4356, 0x4095, 0x4119, 0x4019, 0xb232, 0xba07, 0x22e0, 0x4082, 0xb038, 0x19e5, 0x1171, 0xbfc3, 0x1cf0, 0x1e78, 0xb2bd, 0x250a, 0x4128, 0x42bf, 0x43c4, 0xb0cf, 0xb269, 0xba09, 0x42dd, 0x1ad6, 0x41c3, 0x2cab, 0x411d, 0xbf95, 0xaf53, 0x45b5, 0x4255, 0x41d7, 0x43c1, 0x4447, 0xb2c7, 0xb284, 0x1c1e, 0xba76, 0xaada, 0x1344, 0x40ac, 0x426f, 0xaa92, 0x41d1, 0x261f, 0x189e, 0x1904, 0x41fe, 0xb283, 0xa695, 0xbfa3, 0xb0f1, 0x41dd, 0xb2c2, 0xb2fd, 0x431b, 0x438d, 0xb2a1, 0x4240, 0x42c9, 0xa2b2, 0x345e, 0x435e, 0xbf1f, 0xba7f, 0x41d4, 0x1e3f, 0x0eee, 0x1d12, 0x42d2, 0xbfb0, 0x41b0, 0xa79a, 0xbf80, 0x32a0, 0xb20d, 0x3e30, 0xb2ad, 0xb273, 0x41a4, 0xb2c3, 0x404c, 0xba3e, 0x4377, 0x4197, 0xbfd9, 0xba3a, 0xb23e, 0x41c3, 0xb042, 0xb2ee, 0xb24c, 0x43ce, 0xbade, 0xa3fb, 0x04f6, 0xb293, 0xa149, 0xb25e, 0x4319, 0x19e5, 0xbf1c, 0x1878, 0x1bb1, 0x4061, 0x4657, 0x414d, 0x1f05, 0xba55, 0x1a6a, 0x4065, 0x0674, 0xab5f, 0xa70a, 0xbf87, 0x4095, 0xb089, 0x4121, 0x4300, 0x4012, 0xbfbf, 0x40a1, 0x436c, 0x4032, 0xbad1, 0xa20b, 0x1d95, 0xa4be, 0x1deb, 0x419f, 0x4324, 0x4418, 0x4363, 0x42ce, 0x403c, 0xbfb3, 0xb07a, 0x4179, 0xbaf5, 0x1daa, 0xb22a, 0x4671, 0xba28, 0x188a, 0x41cd, 0xb298, 0x19e9, 0x428b, 0x1e5c, 0x413a, 0x3a1f, 0x41d5, 0xa080, 0x43d2, 0x28e1, 0x436e, 0x40ce, 0xb27c, 0x26cf, 0x407e, 0x456a, 0x43c7, 0xb253, 0x4667, 0xbf34, 0x411e, 0x43f8, 0x4152, 0xbaff, 0x42ce, 0x4147, 0x128c, 0x4095, 0x1a0a, 0x4392, 0x1c9b, 0x41ed, 0x2a7a, 0x01f2, 0xbf00, 0x004d, 0xb2b3, 0x1d3b, 0xb0e9, 0xb2f3, 0xbf93, 0x10bb, 0x41bf, 0x1f9e, 0x1d2d, 0xb2d4, 0x08c2, 0x4190, 0xbadc, 0xba46, 0x42cc, 0x446d, 0x424e, 0x4146, 0x40ef, 0xa359, 0x1a54, 0xb066, 0xba55, 0xbacf, 0x41f3, 0x4689, 0xbf0f, 0x1492, 0xbae7, 0xb2b4, 0xb2a0, 0x413f, 0x00d2, 0x406e, 0x40dd, 0xb2c9, 0x0345, 0xb20e, 0x432d, 0x4227, 0x34a0, 0x429c, 0x416b, 0xb08d, 0xbf4f, 0x19d9, 0x42bd, 0xa315, 0x442a, 0x1a15, 0x445e, 0xaea8, 0x0a9d, 0x35e8, 0xb29f, 0x1a1e, 0x3022, 0xb050, 0xa914, 0x0e5a, 0x4267, 0x4445, 0x4367, 0x1ff7, 0x40f8, 0x23dd, 0x4283, 0x454d, 0x415e, 0x4199, 0xbfe4, 0xbfc0, 0x4185, 0x4564, 0xb059, 0x409f, 0xbf55, 0x446b, 0x2c78, 0x43b4, 0x435a, 0xa547, 0x411d, 0x2c11, 0xb0a8, 0x0e79, 0xb23c, 0x4111, 0x42e8, 0x1a3e, 0x1e15, 0xbf06, 0x0cce, 0x1e92, 0x0485, 0xba74, 0x0a52, 0xa544, 0x4120, 0xb087, 0x41e8, 0xba64, 0xbf25, 0x3059, 0xb2f3, 0x4301, 0xb2e3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5b8d957d, 0xda740f74, 0xf45748f5, 0x13975c8e, 0xd433eb4e, 0xa749743f, 0x6c798277, 0xd9c1885d, 0xc3623606, 0xea7f747e, 0x8bf0542c, 0xfe1fe0b1, 0xd0d3fbf2, 0xed311e85, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00000000, 0x007fffff, 0xb0934dd8, 0x00000000, 0x000018e4, 0x00000000, 0x00000000, 0xc3623606, 0xffff8cd5, 0xb0934e5d, 0xfe1fe0b1, 0x000015a6, 0xb0934c3f, 0x00000000, 0x400001d0 }, + Instructions = [0x43cc, 0x407a, 0x415b, 0x42d2, 0xb20d, 0x41de, 0x1b41, 0x19b6, 0xb051, 0x1dcf, 0x36bc, 0x29fd, 0xbf00, 0x15eb, 0x415d, 0x2be9, 0x1bd3, 0xba76, 0x41a0, 0x45b0, 0xb26e, 0x0c41, 0x3dc0, 0xa863, 0x08ac, 0xbf87, 0x01a2, 0xba51, 0x430e, 0x1090, 0x425e, 0x428c, 0xba79, 0xb0b7, 0x1c66, 0x1c0e, 0x1bf3, 0x40df, 0x4663, 0x4346, 0x1b2f, 0x19fe, 0xbfdd, 0x0720, 0xa14b, 0x1a70, 0xba79, 0xba54, 0xba53, 0x42ef, 0x42c0, 0x409f, 0xbfd6, 0x4276, 0x41df, 0x2a4b, 0x43d6, 0x4094, 0x403d, 0x456a, 0x4027, 0x40b1, 0xac6c, 0x4201, 0x426d, 0x40f2, 0x3d25, 0xb26c, 0x2c76, 0x4193, 0xb0ae, 0x4048, 0x46f4, 0x0f9b, 0xbf00, 0x435b, 0xbfd0, 0x4166, 0x42da, 0xbf78, 0x42a6, 0x455c, 0x428d, 0xbafc, 0x140b, 0xbf8d, 0xb201, 0x4348, 0x4198, 0x1ad2, 0x41fb, 0xba39, 0xb295, 0xbf07, 0x43cb, 0x1d7c, 0xb285, 0x4223, 0x41a0, 0x2f9b, 0xbfa0, 0xb0ab, 0xb00d, 0x411f, 0x463a, 0x43d7, 0xb240, 0xbac6, 0x4067, 0xaa78, 0xb25f, 0x41f2, 0x438d, 0x42ed, 0x4217, 0xbf36, 0x4110, 0x4127, 0xb2dd, 0x4033, 0xae52, 0x4633, 0x401e, 0x1060, 0xb026, 0x3426, 0x4328, 0x4223, 0x3866, 0x4665, 0x1c0d, 0x05a2, 0xbf5c, 0xb2e6, 0xa188, 0xac49, 0x424b, 0x261f, 0x41c5, 0x41e9, 0xad0a, 0x2738, 0xba47, 0xa121, 0xb095, 0x45ee, 0x18ca, 0xbf80, 0x030f, 0x4279, 0x46e2, 0x418d, 0x44c5, 0xb250, 0x4248, 0xb026, 0xbfa8, 0x41d3, 0xa696, 0x426f, 0x45da, 0xb294, 0x40e2, 0x1ccd, 0xa595, 0x420e, 0xaf3b, 0x10ee, 0xb0ae, 0x3c78, 0x413a, 0xb0b4, 0x23f4, 0xbf5d, 0x18be, 0xb077, 0x4070, 0x022e, 0x41be, 0xb2a9, 0x42c3, 0xbf1f, 0x4194, 0x037b, 0xbfd0, 0x42ef, 0x025e, 0xb21c, 0xbf91, 0x4016, 0x43e7, 0x4280, 0x409e, 0xb25b, 0xb023, 0xb224, 0xaa0f, 0xba4b, 0x1b56, 0xba31, 0xa177, 0x4118, 0x08be, 0x433b, 0xb023, 0x40cb, 0x2d55, 0xb0a3, 0x40ef, 0x44d9, 0x420f, 0xb0a7, 0x39b0, 0x412b, 0xbfa8, 0x1e44, 0x4602, 0xbfa3, 0xba1e, 0xb2c6, 0x429a, 0xb205, 0x047a, 0xb0fe, 0x4373, 0xbad8, 0x434c, 0x30e0, 0x1ee5, 0xbfb0, 0x410e, 0xb21e, 0xa97d, 0x42b1, 0x4671, 0x433f, 0xbf0d, 0x0ee6, 0x42ac, 0x19e3, 0x41a3, 0xbfa0, 0xba44, 0xa51c, 0xb241, 0xb2af, 0x415a, 0x0a3c, 0xbf1c, 0x28a0, 0x43d5, 0x4200, 0x43f3, 0x4240, 0x419c, 0x3d0b, 0xb09a, 0xa807, 0x42fa, 0x41e0, 0xbad5, 0x3438, 0xba09, 0xb0f9, 0x4628, 0x4167, 0x1b7b, 0xba0a, 0xa17a, 0xb276, 0x40b8, 0x121a, 0x133c, 0xbf34, 0x3613, 0xb259, 0x4105, 0x41de, 0x4155, 0xa2c3, 0x189d, 0xbf65, 0xb017, 0xa019, 0xb082, 0x40c1, 0x4319, 0x1806, 0x1131, 0xbf87, 0x402b, 0x2960, 0x1969, 0x4232, 0x465a, 0xa10c, 0x464a, 0x37eb, 0x45a3, 0x401d, 0x1f11, 0xb0f1, 0x4210, 0x439a, 0x4048, 0x44a1, 0x28fb, 0x44f0, 0xb0b6, 0x41bf, 0x199b, 0xb268, 0x421a, 0x0b58, 0x40ad, 0x18b6, 0xbf09, 0x402a, 0x137c, 0x4046, 0x175f, 0xb0cf, 0x419b, 0xbf52, 0x419d, 0x4213, 0x04a6, 0xba01, 0xbff0, 0x01d4, 0x1932, 0x42d7, 0x4123, 0x4160, 0x0e55, 0x40c5, 0x195a, 0x43bc, 0x413d, 0x1d89, 0x40e8, 0xb21b, 0xb2a3, 0x43e1, 0x417e, 0x423c, 0x24d1, 0xbf6d, 0xa57c, 0x2ff1, 0x05fa, 0x4200, 0xb26f, 0x05f6, 0x064f, 0xbfcd, 0xb2dd, 0x40ed, 0x360f, 0xbafa, 0xb0e6, 0x2f81, 0x09cc, 0x4072, 0x408c, 0x0899, 0xb26c, 0x1ee4, 0x465f, 0x4175, 0xa5b6, 0xba63, 0x1ffc, 0x4094, 0x1a4f, 0xba23, 0xbf2b, 0x25dc, 0xba1f, 0x413b, 0x4105, 0x4180, 0x4186, 0xb2f9, 0x4194, 0xbfae, 0x1da7, 0x1afc, 0x4330, 0x3083, 0x43e5, 0x1f44, 0xba0a, 0x4469, 0x4062, 0xbaeb, 0x16ab, 0x363c, 0x1bdd, 0x40b0, 0xbfa8, 0x4346, 0x4129, 0xb080, 0x4450, 0x40d1, 0x12e2, 0x40a6, 0xae28, 0xbf74, 0xb08f, 0xb280, 0x0fb5, 0xb287, 0xb28e, 0x4238, 0x296f, 0x4398, 0x43b3, 0xb0b7, 0xba78, 0xbf73, 0x41be, 0x40ec, 0x1602, 0xb227, 0xb2c4, 0xbf28, 0x4298, 0x2f81, 0xbadc, 0x1dd0, 0xb255, 0x2521, 0xbac6, 0x03e6, 0xa5ac, 0xba11, 0x401e, 0x4172, 0x1912, 0x43a1, 0xbfa0, 0x41da, 0xb283, 0x2be3, 0xbaff, 0x24bf, 0x415a, 0x1da5, 0x4212, 0x436f, 0x41b8, 0xb29e, 0xbf28, 0xb2e8, 0x1ff8, 0xabd8, 0xb064, 0xba4e, 0x4136, 0x425c, 0x41b5, 0xba40, 0x19bb, 0x26a6, 0xbf26, 0xbaf6, 0xba55, 0x4169, 0x40c2, 0xb2c0, 0x0da2, 0x41fc, 0x3d98, 0x43d1, 0x19af, 0x4023, 0x0a9d, 0xb003, 0xb046, 0x1866, 0x40b2, 0x41af, 0xbafa, 0x1bd8, 0xbfa8, 0x4450, 0x427a, 0x4190, 0x1aa2, 0xa784, 0x1069, 0xb095, 0x181a, 0x4450, 0x41b6, 0x1bf7, 0x1d12, 0x347a, 0x41a3, 0xb263, 0x4215, 0x431c, 0x433c, 0xbf61, 0xb200, 0xb2db, 0x1c1d, 0xb2e5, 0xbf60, 0x12e2, 0xa6a8, 0x45aa, 0xb2bc, 0x41ca, 0xb2d7, 0xab7e, 0x0d22, 0xbf9e, 0x40b8, 0x2c08, 0x1db6, 0x3d47, 0x42ee, 0x4081, 0x412b, 0xa807, 0x350a, 0x43c6, 0xaea7, 0xbf5d, 0xa806, 0xb2cc, 0x4143, 0x30fb, 0x0043, 0x46b9, 0x1c7f, 0x1e13, 0x0da5, 0xb214, 0x3da5, 0x437f, 0x3532, 0x458a, 0x4131, 0x424b, 0x144f, 0x433a, 0x3f9b, 0x0dfc, 0x1faf, 0xb253, 0x4137, 0xbfd0, 0xbf49, 0x4107, 0x24b5, 0x4324, 0x40fb, 0x30c9, 0x1ea2, 0x324f, 0x1a34, 0x0dc7, 0x40e7, 0x1d48, 0x41dd, 0xae7c, 0x43a3, 0x299f, 0xbf01, 0xb077, 0x3770, 0x4140, 0xbfe0, 0x4265, 0x4019, 0x40ed, 0x0afe, 0x1b29, 0x1afc, 0xb23c, 0x04db, 0xb214, 0x439d, 0x2938, 0x0092, 0x40b0, 0x43c0, 0x43d5, 0xb0c1, 0xa37e, 0x1e61, 0xb021, 0x4022, 0xbf6f, 0x4114, 0x407d, 0x428c, 0x415e, 0x4256, 0xb0ea, 0x41e6, 0xbaf7, 0x4060, 0x1ee1, 0x1100, 0x42d5, 0xb25f, 0xb063, 0xb253, 0x1945, 0x30ee, 0x4210, 0x3373, 0x42a7, 0xbf72, 0x42d1, 0xb038, 0xbae9, 0x43ea, 0x40c7, 0xbfa0, 0x299d, 0xb294, 0x404e, 0x085d, 0x4341, 0x4172, 0x1c2a, 0x4183, 0xbf2b, 0xb2b7, 0x40ab, 0xb279, 0x43a9, 0x1cc5, 0x4208, 0x402f, 0x43b8, 0x43ee, 0x41e4, 0x3928, 0xba55, 0x4235, 0x2c5d, 0xbf90, 0x4278, 0xab33, 0x4338, 0x1631, 0x43b3, 0xbfc0, 0x058f, 0xba1c, 0x424d, 0x40e6, 0x3bc1, 0x43a9, 0xba00, 0xbf3e, 0x41fc, 0xa8a3, 0xba2b, 0x1e86, 0x23a6, 0x41f5, 0x40e4, 0x40c8, 0x430d, 0x46b2, 0xba5d, 0x415b, 0x32b1, 0x43ec, 0x2faf, 0xbfda, 0x43ac, 0xa3e2, 0xb283, 0x1c45, 0x4341, 0x4133, 0x40b4, 0x36da, 0x1c1e, 0x4395, 0xba7e, 0x4070, 0x1aeb, 0x467a, 0xb29e, 0x345f, 0x4364, 0xbf00, 0x412e, 0xb2e8, 0x1b7e, 0x2b8a, 0x42c7, 0x412b, 0x4097, 0xb2bf, 0xbf0c, 0x1914, 0x443e, 0x3c97, 0x310b, 0x4091, 0x4367, 0x409f, 0xba38, 0xbf33, 0x403d, 0x4024, 0x1d51, 0x43ed, 0xba4c, 0x4057, 0x46fc, 0x4356, 0x4095, 0x4119, 0x4019, 0xb232, 0xba07, 0x22e0, 0x4082, 0xb038, 0x19e5, 0x1171, 0xbfc3, 0x1cf0, 0x1e78, 0xb2bd, 0x250a, 0x4128, 0x42bf, 0x43c4, 0xb0cf, 0xb269, 0xba09, 0x42dd, 0x1ad6, 0x41c3, 0x2cab, 0x411d, 0xbf95, 0xaf53, 0x45b5, 0x4255, 0x41d7, 0x43c1, 0x4447, 0xb2c7, 0xb284, 0x1c1e, 0xba76, 0xaada, 0x1344, 0x40ac, 0x426f, 0xaa92, 0x41d1, 0x261f, 0x189e, 0x1904, 0x41fe, 0xb283, 0xa695, 0xbfa3, 0xb0f1, 0x41dd, 0xb2c2, 0xb2fd, 0x431b, 0x438d, 0xb2a1, 0x4240, 0x42c9, 0xa2b2, 0x345e, 0x435e, 0xbf1f, 0xba7f, 0x41d4, 0x1e3f, 0x0eee, 0x1d12, 0x42d2, 0xbfb0, 0x41b0, 0xa79a, 0xbf80, 0x32a0, 0xb20d, 0x3e30, 0xb2ad, 0xb273, 0x41a4, 0xb2c3, 0x404c, 0xba3e, 0x4377, 0x4197, 0xbfd9, 0xba3a, 0xb23e, 0x41c3, 0xb042, 0xb2ee, 0xb24c, 0x43ce, 0xbade, 0xa3fb, 0x04f6, 0xb293, 0xa149, 0xb25e, 0x4319, 0x19e5, 0xbf1c, 0x1878, 0x1bb1, 0x4061, 0x4657, 0x414d, 0x1f05, 0xba55, 0x1a6a, 0x4065, 0x0674, 0xab5f, 0xa70a, 0xbf87, 0x4095, 0xb089, 0x4121, 0x4300, 0x4012, 0xbfbf, 0x40a1, 0x436c, 0x4032, 0xbad1, 0xa20b, 0x1d95, 0xa4be, 0x1deb, 0x419f, 0x4324, 0x4418, 0x4363, 0x42ce, 0x403c, 0xbfb3, 0xb07a, 0x4179, 0xbaf5, 0x1daa, 0xb22a, 0x4671, 0xba28, 0x188a, 0x41cd, 0xb298, 0x19e9, 0x428b, 0x1e5c, 0x413a, 0x3a1f, 0x41d5, 0xa080, 0x43d2, 0x28e1, 0x436e, 0x40ce, 0xb27c, 0x26cf, 0x407e, 0x456a, 0x43c7, 0xb253, 0x4667, 0xbf34, 0x411e, 0x43f8, 0x4152, 0xbaff, 0x42ce, 0x4147, 0x128c, 0x4095, 0x1a0a, 0x4392, 0x1c9b, 0x41ed, 0x2a7a, 0x01f2, 0xbf00, 0x004d, 0xb2b3, 0x1d3b, 0xb0e9, 0xb2f3, 0xbf93, 0x10bb, 0x41bf, 0x1f9e, 0x1d2d, 0xb2d4, 0x08c2, 0x4190, 0xbadc, 0xba46, 0x42cc, 0x446d, 0x424e, 0x4146, 0x40ef, 0xa359, 0x1a54, 0xb066, 0xba55, 0xbacf, 0x41f3, 0x4689, 0xbf0f, 0x1492, 0xbae7, 0xb2b4, 0xb2a0, 0x413f, 0x00d2, 0x406e, 0x40dd, 0xb2c9, 0x0345, 0xb20e, 0x432d, 0x4227, 0x34a0, 0x429c, 0x416b, 0xb08d, 0xbf4f, 0x19d9, 0x42bd, 0xa315, 0x442a, 0x1a15, 0x445e, 0xaea8, 0x0a9d, 0x35e8, 0xb29f, 0x1a1e, 0x3022, 0xb050, 0xa914, 0x0e5a, 0x4267, 0x4445, 0x4367, 0x1ff7, 0x40f8, 0x23dd, 0x4283, 0x454d, 0x415e, 0x4199, 0xbfe4, 0xbfc0, 0x4185, 0x4564, 0xb059, 0x409f, 0xbf55, 0x446b, 0x2c78, 0x43b4, 0x435a, 0xa547, 0x411d, 0x2c11, 0xb0a8, 0x0e79, 0xb23c, 0x4111, 0x42e8, 0x1a3e, 0x1e15, 0xbf06, 0x0cce, 0x1e92, 0x0485, 0xba74, 0x0a52, 0xa544, 0x4120, 0xb087, 0x41e8, 0xba64, 0xbf25, 0x3059, 0xb2f3, 0x4301, 0xb2e3, 0x4770, 0xe7fe + ], + StartRegs = [0x5b8d957d, 0xda740f74, 0xf45748f5, 0x13975c8e, 0xd433eb4e, 0xa749743f, 0x6c798277, 0xd9c1885d, 0xc3623606, 0xea7f747e, 0x8bf0542c, 0xfe1fe0b1, 0xd0d3fbf2, 0xed311e85, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x00000000, 0x00000000, 0x007fffff, 0xb0934dd8, 0x00000000, 0x000018e4, 0x00000000, 0x00000000, 0xc3623606, 0xffff8cd5, 0xb0934e5d, 0xfe1fe0b1, 0x000015a6, 0xb0934c3f, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x2722, 0x4544, 0x4378, 0x437b, 0x33fe, 0x41f0, 0x1814, 0x1583, 0x0945, 0xa03e, 0xb24c, 0x1ba2, 0x1e8e, 0x4291, 0xb2d6, 0x1b2d, 0x1637, 0xbfca, 0x3736, 0xb2a1, 0x41d7, 0x42e1, 0xb2b3, 0x4007, 0xb073, 0x1d95, 0xb219, 0x3d08, 0x415a, 0x4282, 0x4245, 0x43c9, 0x1a86, 0xb2bf, 0x463e, 0x40af, 0x1cd7, 0x43b1, 0x4108, 0x0da6, 0x430f, 0x418b, 0xbf2b, 0x4608, 0x441c, 0x41b7, 0xb254, 0xba40, 0x42b7, 0x1de0, 0xbf70, 0x1d62, 0xba76, 0xb045, 0x4138, 0x4067, 0x0654, 0x1e1a, 0xb015, 0x447a, 0x430b, 0x4154, 0x2823, 0x4685, 0xbf75, 0x4080, 0x426a, 0x43a2, 0x40eb, 0x437c, 0x4048, 0x4285, 0xba0d, 0x1eea, 0x4364, 0xbf29, 0x41b9, 0x4351, 0x4204, 0x1c9d, 0xa86b, 0x1174, 0x4064, 0x00d4, 0x4021, 0xb047, 0xba13, 0x4113, 0xb2a0, 0x12fd, 0x4171, 0x4178, 0x410e, 0xba24, 0x432b, 0xb2b0, 0x3ef8, 0xb2ea, 0x410e, 0x1db0, 0x18de, 0x1ffa, 0x1bc9, 0xbf27, 0x43af, 0x4021, 0xb2f6, 0x4307, 0x400e, 0xba4a, 0x44f4, 0x43e4, 0x22a9, 0xba03, 0x1c54, 0x4356, 0x1c4c, 0xbf8a, 0x426e, 0x4136, 0xac9b, 0xb011, 0xba49, 0x4458, 0x1230, 0x4551, 0x4003, 0xbf41, 0x1ff7, 0xb2a2, 0x19dc, 0xabbe, 0xbf28, 0xa7a7, 0x407c, 0x4019, 0xa9c5, 0x4479, 0xb07b, 0x00e2, 0xbf16, 0xb2a7, 0x323b, 0xbfe0, 0x42fd, 0xb2b7, 0x40fd, 0x4140, 0x421e, 0x41dc, 0x179a, 0x2e91, 0xb25a, 0xb0af, 0x4384, 0x4157, 0x45ad, 0x280d, 0xbfa2, 0x467b, 0xba07, 0x4262, 0x36bd, 0xb0d2, 0x289b, 0x4211, 0x4152, 0x41ef, 0x426e, 0xb2f2, 0x4356, 0x4614, 0xbaf0, 0x4229, 0x314a, 0x4182, 0xbf1e, 0x1fd7, 0xba5d, 0xad77, 0x43aa, 0xbae9, 0xbfd0, 0x0a05, 0xa8b2, 0x419a, 0xb23c, 0x4367, 0x4090, 0xbf70, 0xbf1c, 0xbf00, 0xb0f9, 0x4274, 0x4299, 0xb210, 0xb215, 0x1e80, 0x08e8, 0x43ee, 0x412f, 0x379d, 0x402e, 0x1919, 0xaff5, 0x4106, 0xbae6, 0x42e4, 0x45aa, 0x40e4, 0x1b18, 0x43b9, 0xbf1d, 0xbaca, 0x3c0c, 0xb090, 0x463c, 0x1fe5, 0xb21c, 0x4129, 0x3dd7, 0xb24f, 0xaeb3, 0x4651, 0xb0f0, 0x0629, 0xba16, 0x42be, 0x4147, 0x1d46, 0x2698, 0x436f, 0xb080, 0xbff0, 0x4337, 0x3d59, 0x465e, 0x2c6d, 0x4262, 0xb088, 0x417d, 0x41b8, 0xbf12, 0xbac4, 0x40c5, 0x1406, 0x3e5f, 0x3f1c, 0x04b0, 0xa681, 0x469a, 0x433a, 0x443c, 0x26c9, 0x41eb, 0x4198, 0xbfd3, 0xb2d5, 0x4380, 0xb24d, 0xba72, 0x4366, 0x42af, 0x1ae5, 0x43ff, 0x43ed, 0x412e, 0x1d52, 0x405a, 0x41ed, 0x45cd, 0x41ae, 0xb2b8, 0xbfda, 0x2331, 0x4430, 0x0f27, 0x4036, 0x1f45, 0x40b2, 0xb0a7, 0x4230, 0x0a6e, 0x44f8, 0x460d, 0xb29f, 0xa318, 0x430b, 0x3556, 0xae3e, 0xb034, 0xbf57, 0xb2d5, 0x3b8c, 0x44ea, 0xb05a, 0x42f4, 0xa5f5, 0x2209, 0x416c, 0x4466, 0x422b, 0x4263, 0x43d2, 0x1468, 0xb265, 0xbfcb, 0xbad4, 0xb28f, 0xbadb, 0xa163, 0x443b, 0x3b15, 0x197c, 0x261a, 0x43a1, 0x4028, 0xb24b, 0x4182, 0x1e7a, 0xb2d8, 0x4108, 0xba42, 0xbfe0, 0x42ba, 0x4212, 0x1849, 0x1a51, 0x1a9f, 0x15e7, 0xba28, 0xb27f, 0xbf23, 0x41c9, 0x3442, 0xad53, 0x406f, 0x0712, 0x1cd0, 0x467c, 0x1da8, 0x42fe, 0x43e1, 0xba5f, 0xb2fa, 0x41be, 0x3f24, 0xbfb0, 0x426b, 0xbf05, 0x2ee5, 0xbade, 0x43f9, 0x43ed, 0x4195, 0x4176, 0x4294, 0x4286, 0x00e1, 0xacdb, 0x1e04, 0x1f46, 0xbfc4, 0xa533, 0x4165, 0x41a6, 0x4344, 0xbf97, 0xba71, 0xa713, 0xbafc, 0x40a1, 0x00da, 0xb0c8, 0xba61, 0x4161, 0x1da3, 0x4053, 0x19d0, 0x40dc, 0x4036, 0x4075, 0x40a6, 0xab72, 0x08d1, 0xb21b, 0xaddc, 0x416e, 0x1c32, 0x41b8, 0x0b12, 0x1434, 0xb042, 0x408a, 0xb24d, 0x1743, 0xb287, 0xbf37, 0x40cd, 0x417f, 0x34ae, 0x427e, 0x42d5, 0x4039, 0x360f, 0x413f, 0x3864, 0x27c9, 0x40f8, 0x4318, 0x422e, 0x3c63, 0x1bd9, 0x424c, 0x1384, 0x1c1e, 0xa82e, 0xbfc8, 0xa049, 0x079e, 0xa832, 0x46e8, 0xba13, 0xbfc0, 0x1af3, 0xb2a3, 0xb074, 0x19b9, 0x2c75, 0xbacf, 0x3dca, 0x0f0b, 0x2979, 0x4007, 0x43be, 0xba62, 0xbadc, 0xbf87, 0x125a, 0x435f, 0x1c1a, 0x13ab, 0x42b7, 0xbf70, 0x42cc, 0x1978, 0x41b2, 0xba50, 0x42be, 0x4346, 0x4336, 0xb2a5, 0x45bd, 0xa15a, 0x2038, 0xba4c, 0x1a84, 0x430b, 0xb2b4, 0xbfae, 0x41c1, 0x42d3, 0x1ef4, 0xb01a, 0x1c63, 0x210b, 0xb272, 0xa49d, 0x1be2, 0x18b4, 0x1c08, 0xa4d3, 0x1f6b, 0x113c, 0x4663, 0x41c6, 0x4247, 0x402f, 0x4379, 0x0949, 0x4008, 0x42c6, 0x41fc, 0x0b89, 0xbf7c, 0x4370, 0x422d, 0x4362, 0x0b78, 0x040c, 0x43da, 0x462d, 0xb251, 0x1e56, 0x4123, 0xaaef, 0x43a6, 0x0408, 0x2a06, 0xb276, 0xb091, 0x42a4, 0x4319, 0x3ce5, 0xb297, 0x40df, 0xba2d, 0x3233, 0x29dc, 0x407f, 0xbf4a, 0x4685, 0xba15, 0x1404, 0xba06, 0x42a9, 0x262a, 0x3e76, 0x0ba0, 0xb2e8, 0x4482, 0x4047, 0xb037, 0xb06b, 0x05a4, 0x40ad, 0x435d, 0x4057, 0x4280, 0x4049, 0x42b3, 0xbf6d, 0xba7a, 0x42f6, 0x0984, 0x2d9f, 0x44d5, 0x4374, 0x4047, 0x1a23, 0x435b, 0x1f11, 0xb213, 0xba1a, 0x4030, 0x43ca, 0x0f9c, 0x4682, 0xaed1, 0x45be, 0x42eb, 0x41ef, 0xa19a, 0xa571, 0x43e4, 0xbf4c, 0x4255, 0x43bc, 0x40d9, 0x0a28, 0x2786, 0xbf33, 0x42c9, 0x1b40, 0xb2c6, 0xb0a8, 0xafac, 0x40a8, 0x1c68, 0x4184, 0x1420, 0xb2d5, 0xbf34, 0x433a, 0xb24b, 0x45e4, 0x0183, 0xb22d, 0xb091, 0xb2cf, 0x4038, 0x41a3, 0xbf60, 0x40ef, 0x4360, 0x45c4, 0xb080, 0x339d, 0xba16, 0x4115, 0xbf96, 0x406e, 0xaf42, 0xb28f, 0x413d, 0xbfbb, 0x4146, 0xb038, 0x4285, 0x216e, 0xb264, 0x431e, 0x42b9, 0x2f56, 0x0e0c, 0x4217, 0xa12d, 0xac5c, 0x4328, 0x40a2, 0x1a29, 0xb0e9, 0x442f, 0x41bc, 0x37c6, 0xb0cc, 0x18ce, 0xb042, 0x1b4e, 0xbf90, 0xbf9d, 0x419f, 0x414f, 0x1eb1, 0x1f9e, 0x4294, 0xa197, 0x1896, 0xbaf5, 0x4272, 0x45c8, 0x0da9, 0x424c, 0x2c62, 0x4022, 0x1bfa, 0x4091, 0x0417, 0xb099, 0xba6b, 0x40c9, 0x1d35, 0x43c1, 0xb0e2, 0x443b, 0x4137, 0x0c33, 0x418c, 0xbf7e, 0x4196, 0xba14, 0x4585, 0xbfca, 0x41f0, 0x3bb0, 0xb044, 0xb2e7, 0x2b49, 0x4428, 0xbfca, 0xb092, 0x4051, 0x4201, 0x1a8d, 0xbf90, 0xba5c, 0xb0bf, 0x4151, 0x19c8, 0xb293, 0x437a, 0xb2a9, 0xbace, 0xbf71, 0x40da, 0xb24e, 0x0bb8, 0x1879, 0xba3b, 0x402b, 0x1e0d, 0xbad2, 0xb204, 0xba07, 0x3165, 0xb08b, 0x3c16, 0x1e6d, 0x40f9, 0x1379, 0x17f9, 0xaf70, 0x4287, 0xbf2b, 0xbaf2, 0xba11, 0x41e7, 0x0360, 0xb237, 0x43d9, 0x1db8, 0xba48, 0xba5d, 0xbac7, 0xbfdd, 0x0be8, 0x1c5b, 0x20b0, 0x4099, 0x3a34, 0x4254, 0xb236, 0x419a, 0x1b31, 0xbf2d, 0x42a2, 0x4271, 0xbad5, 0xb254, 0x1bb2, 0x43b2, 0xb2b2, 0xbae9, 0xb22b, 0xa066, 0xba09, 0x4028, 0x400a, 0xb212, 0x42a3, 0x4047, 0xbf4a, 0x2bc0, 0xa346, 0x40a3, 0x42ee, 0x138f, 0x1b40, 0xba12, 0x1b0e, 0xa916, 0xb241, 0x400b, 0xbfdb, 0xba28, 0x41a1, 0x4390, 0x3d2b, 0x443e, 0x4673, 0x1d4d, 0x4120, 0x4269, 0x419d, 0x46f2, 0x4682, 0x41c5, 0xb2d2, 0xb234, 0x4036, 0xbf7e, 0xba39, 0xb2e8, 0x466f, 0x441e, 0x1b36, 0x3f5d, 0xba69, 0x20de, 0x1fdf, 0x18d0, 0x095f, 0x416b, 0x437d, 0x4331, 0x40de, 0x0e6a, 0x353b, 0x13c7, 0x4221, 0x437c, 0x1f97, 0x3a6d, 0x435d, 0x42cc, 0x43c4, 0x310b, 0x428c, 0x2383, 0xbfc7, 0xb0c1, 0x1fd1, 0xa1ce, 0x41d6, 0x45a6, 0xb275, 0x4257, 0xb2b3, 0x43ab, 0x4278, 0x1ecd, 0x359e, 0xb2e9, 0xba0c, 0xbad3, 0x1dc2, 0x419e, 0x424a, 0x41aa, 0xb2c1, 0x44e5, 0x40f0, 0x1778, 0x4088, 0xbfd6, 0x4246, 0x4197, 0x1c5c, 0x1b2e, 0xb28b, 0x0f3d, 0x1e81, 0x4122, 0x2e73, 0x1db5, 0x42fa, 0x1d43, 0x43f2, 0xba18, 0x0068, 0x42ff, 0x0dd0, 0x4247, 0x45ce, 0xb2ba, 0xa73d, 0x428f, 0x4329, 0xb225, 0xbf62, 0xba24, 0x43a0, 0x204c, 0x1466, 0xb2dc, 0x3f46, 0x42a7, 0x43a4, 0xba61, 0xb0f1, 0x40bb, 0x40c9, 0x4192, 0x4113, 0x1d47, 0x448d, 0xaa2a, 0xbaf6, 0xb2db, 0x4294, 0x4206, 0x0429, 0xb2b2, 0x41ee, 0x4081, 0x44b3, 0xbfd1, 0xbadd, 0x424e, 0x2a0e, 0x334e, 0x41f0, 0x1b77, 0xbae8, 0x4067, 0x42eb, 0x00b1, 0x423e, 0x4073, 0x4106, 0x40a9, 0x416b, 0x128f, 0x0281, 0xba3c, 0xbac5, 0x0c2f, 0xb012, 0x1c56, 0x40a6, 0x4096, 0x40e4, 0x42b5, 0xb090, 0x42ea, 0xbf49, 0x4287, 0x4051, 0x43d7, 0xba1d, 0x41dc, 0x4161, 0x2296, 0x4251, 0x4166, 0x43ad, 0xba47, 0x1b9f, 0xb026, 0xb2d0, 0xb2ec, 0x420d, 0x4355, 0x434c, 0xb08f, 0xb252, 0x1b04, 0xa364, 0xbafc, 0x19a4, 0x3c98, 0xbf9f, 0x41c0, 0x34d7, 0x456e, 0x42d5, 0xb264, 0x43df, 0x4542, 0xba15, 0x40de, 0x42d1, 0x1a20, 0xbf2f, 0x4103, 0xacdc, 0x40cc, 0xb099, 0x43eb, 0x43df, 0x317c, 0xba70, 0x1e2c, 0xbf84, 0x4158, 0x1c12, 0x40cb, 0x46d1, 0x408a, 0x037c, 0xb071, 0x4347, 0x4320, 0x25fa, 0x4078, 0xb25d, 0x1e50, 0xa645, 0x2831, 0xbf51, 0x4092, 0x19b4, 0xa3f1, 0xbada, 0x4036, 0x42a7, 0x09ac, 0x1f55, 0xb247, 0x2753, 0x426b, 0x40a5, 0x4223, 0x40f3, 0xbfae, 0x292e, 0x1f9b, 0x46cc, 0x181d, 0x40ca, 0x413f, 0x0b7e, 0x423a, 0xb264, 0x43b4, 0x214a, 0xad2e, 0x215a, 0xba7f, 0x409b, 0x4568, 0xaf04, 0x2c49, 0xa536, 0x425e, 0x42fe, 0xa0ba, 0x4107, 0xbf77, 0xb019, 0x1640, 0x4336, 0x2631, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x7f732ac7, 0xd652158c, 0xc810dc10, 0x451cfb90, 0x698e290f, 0x67d2fe9c, 0xfa98fc70, 0xc792f08a, 0x938d63b5, 0xf0a64fe6, 0xd6444518, 0x197a89a8, 0x8b76fcf7, 0x660046dd, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x00001ab4, 0x0000005a, 0x00000000, 0x00000000, 0x00000000, 0x0000189c, 0x00000031, 0xffffffff, 0x000000ac, 0x00000000, 0x00000000, 0x197a89a7, 0x00000000, 0x8b76fcc7, 0x00000000, 0xa00001d0 }, + Instructions = [0x2722, 0x4544, 0x4378, 0x437b, 0x33fe, 0x41f0, 0x1814, 0x1583, 0x0945, 0xa03e, 0xb24c, 0x1ba2, 0x1e8e, 0x4291, 0xb2d6, 0x1b2d, 0x1637, 0xbfca, 0x3736, 0xb2a1, 0x41d7, 0x42e1, 0xb2b3, 0x4007, 0xb073, 0x1d95, 0xb219, 0x3d08, 0x415a, 0x4282, 0x4245, 0x43c9, 0x1a86, 0xb2bf, 0x463e, 0x40af, 0x1cd7, 0x43b1, 0x4108, 0x0da6, 0x430f, 0x418b, 0xbf2b, 0x4608, 0x441c, 0x41b7, 0xb254, 0xba40, 0x42b7, 0x1de0, 0xbf70, 0x1d62, 0xba76, 0xb045, 0x4138, 0x4067, 0x0654, 0x1e1a, 0xb015, 0x447a, 0x430b, 0x4154, 0x2823, 0x4685, 0xbf75, 0x4080, 0x426a, 0x43a2, 0x40eb, 0x437c, 0x4048, 0x4285, 0xba0d, 0x1eea, 0x4364, 0xbf29, 0x41b9, 0x4351, 0x4204, 0x1c9d, 0xa86b, 0x1174, 0x4064, 0x00d4, 0x4021, 0xb047, 0xba13, 0x4113, 0xb2a0, 0x12fd, 0x4171, 0x4178, 0x410e, 0xba24, 0x432b, 0xb2b0, 0x3ef8, 0xb2ea, 0x410e, 0x1db0, 0x18de, 0x1ffa, 0x1bc9, 0xbf27, 0x43af, 0x4021, 0xb2f6, 0x4307, 0x400e, 0xba4a, 0x44f4, 0x43e4, 0x22a9, 0xba03, 0x1c54, 0x4356, 0x1c4c, 0xbf8a, 0x426e, 0x4136, 0xac9b, 0xb011, 0xba49, 0x4458, 0x1230, 0x4551, 0x4003, 0xbf41, 0x1ff7, 0xb2a2, 0x19dc, 0xabbe, 0xbf28, 0xa7a7, 0x407c, 0x4019, 0xa9c5, 0x4479, 0xb07b, 0x00e2, 0xbf16, 0xb2a7, 0x323b, 0xbfe0, 0x42fd, 0xb2b7, 0x40fd, 0x4140, 0x421e, 0x41dc, 0x179a, 0x2e91, 0xb25a, 0xb0af, 0x4384, 0x4157, 0x45ad, 0x280d, 0xbfa2, 0x467b, 0xba07, 0x4262, 0x36bd, 0xb0d2, 0x289b, 0x4211, 0x4152, 0x41ef, 0x426e, 0xb2f2, 0x4356, 0x4614, 0xbaf0, 0x4229, 0x314a, 0x4182, 0xbf1e, 0x1fd7, 0xba5d, 0xad77, 0x43aa, 0xbae9, 0xbfd0, 0x0a05, 0xa8b2, 0x419a, 0xb23c, 0x4367, 0x4090, 0xbf70, 0xbf1c, 0xbf00, 0xb0f9, 0x4274, 0x4299, 0xb210, 0xb215, 0x1e80, 0x08e8, 0x43ee, 0x412f, 0x379d, 0x402e, 0x1919, 0xaff5, 0x4106, 0xbae6, 0x42e4, 0x45aa, 0x40e4, 0x1b18, 0x43b9, 0xbf1d, 0xbaca, 0x3c0c, 0xb090, 0x463c, 0x1fe5, 0xb21c, 0x4129, 0x3dd7, 0xb24f, 0xaeb3, 0x4651, 0xb0f0, 0x0629, 0xba16, 0x42be, 0x4147, 0x1d46, 0x2698, 0x436f, 0xb080, 0xbff0, 0x4337, 0x3d59, 0x465e, 0x2c6d, 0x4262, 0xb088, 0x417d, 0x41b8, 0xbf12, 0xbac4, 0x40c5, 0x1406, 0x3e5f, 0x3f1c, 0x04b0, 0xa681, 0x469a, 0x433a, 0x443c, 0x26c9, 0x41eb, 0x4198, 0xbfd3, 0xb2d5, 0x4380, 0xb24d, 0xba72, 0x4366, 0x42af, 0x1ae5, 0x43ff, 0x43ed, 0x412e, 0x1d52, 0x405a, 0x41ed, 0x45cd, 0x41ae, 0xb2b8, 0xbfda, 0x2331, 0x4430, 0x0f27, 0x4036, 0x1f45, 0x40b2, 0xb0a7, 0x4230, 0x0a6e, 0x44f8, 0x460d, 0xb29f, 0xa318, 0x430b, 0x3556, 0xae3e, 0xb034, 0xbf57, 0xb2d5, 0x3b8c, 0x44ea, 0xb05a, 0x42f4, 0xa5f5, 0x2209, 0x416c, 0x4466, 0x422b, 0x4263, 0x43d2, 0x1468, 0xb265, 0xbfcb, 0xbad4, 0xb28f, 0xbadb, 0xa163, 0x443b, 0x3b15, 0x197c, 0x261a, 0x43a1, 0x4028, 0xb24b, 0x4182, 0x1e7a, 0xb2d8, 0x4108, 0xba42, 0xbfe0, 0x42ba, 0x4212, 0x1849, 0x1a51, 0x1a9f, 0x15e7, 0xba28, 0xb27f, 0xbf23, 0x41c9, 0x3442, 0xad53, 0x406f, 0x0712, 0x1cd0, 0x467c, 0x1da8, 0x42fe, 0x43e1, 0xba5f, 0xb2fa, 0x41be, 0x3f24, 0xbfb0, 0x426b, 0xbf05, 0x2ee5, 0xbade, 0x43f9, 0x43ed, 0x4195, 0x4176, 0x4294, 0x4286, 0x00e1, 0xacdb, 0x1e04, 0x1f46, 0xbfc4, 0xa533, 0x4165, 0x41a6, 0x4344, 0xbf97, 0xba71, 0xa713, 0xbafc, 0x40a1, 0x00da, 0xb0c8, 0xba61, 0x4161, 0x1da3, 0x4053, 0x19d0, 0x40dc, 0x4036, 0x4075, 0x40a6, 0xab72, 0x08d1, 0xb21b, 0xaddc, 0x416e, 0x1c32, 0x41b8, 0x0b12, 0x1434, 0xb042, 0x408a, 0xb24d, 0x1743, 0xb287, 0xbf37, 0x40cd, 0x417f, 0x34ae, 0x427e, 0x42d5, 0x4039, 0x360f, 0x413f, 0x3864, 0x27c9, 0x40f8, 0x4318, 0x422e, 0x3c63, 0x1bd9, 0x424c, 0x1384, 0x1c1e, 0xa82e, 0xbfc8, 0xa049, 0x079e, 0xa832, 0x46e8, 0xba13, 0xbfc0, 0x1af3, 0xb2a3, 0xb074, 0x19b9, 0x2c75, 0xbacf, 0x3dca, 0x0f0b, 0x2979, 0x4007, 0x43be, 0xba62, 0xbadc, 0xbf87, 0x125a, 0x435f, 0x1c1a, 0x13ab, 0x42b7, 0xbf70, 0x42cc, 0x1978, 0x41b2, 0xba50, 0x42be, 0x4346, 0x4336, 0xb2a5, 0x45bd, 0xa15a, 0x2038, 0xba4c, 0x1a84, 0x430b, 0xb2b4, 0xbfae, 0x41c1, 0x42d3, 0x1ef4, 0xb01a, 0x1c63, 0x210b, 0xb272, 0xa49d, 0x1be2, 0x18b4, 0x1c08, 0xa4d3, 0x1f6b, 0x113c, 0x4663, 0x41c6, 0x4247, 0x402f, 0x4379, 0x0949, 0x4008, 0x42c6, 0x41fc, 0x0b89, 0xbf7c, 0x4370, 0x422d, 0x4362, 0x0b78, 0x040c, 0x43da, 0x462d, 0xb251, 0x1e56, 0x4123, 0xaaef, 0x43a6, 0x0408, 0x2a06, 0xb276, 0xb091, 0x42a4, 0x4319, 0x3ce5, 0xb297, 0x40df, 0xba2d, 0x3233, 0x29dc, 0x407f, 0xbf4a, 0x4685, 0xba15, 0x1404, 0xba06, 0x42a9, 0x262a, 0x3e76, 0x0ba0, 0xb2e8, 0x4482, 0x4047, 0xb037, 0xb06b, 0x05a4, 0x40ad, 0x435d, 0x4057, 0x4280, 0x4049, 0x42b3, 0xbf6d, 0xba7a, 0x42f6, 0x0984, 0x2d9f, 0x44d5, 0x4374, 0x4047, 0x1a23, 0x435b, 0x1f11, 0xb213, 0xba1a, 0x4030, 0x43ca, 0x0f9c, 0x4682, 0xaed1, 0x45be, 0x42eb, 0x41ef, 0xa19a, 0xa571, 0x43e4, 0xbf4c, 0x4255, 0x43bc, 0x40d9, 0x0a28, 0x2786, 0xbf33, 0x42c9, 0x1b40, 0xb2c6, 0xb0a8, 0xafac, 0x40a8, 0x1c68, 0x4184, 0x1420, 0xb2d5, 0xbf34, 0x433a, 0xb24b, 0x45e4, 0x0183, 0xb22d, 0xb091, 0xb2cf, 0x4038, 0x41a3, 0xbf60, 0x40ef, 0x4360, 0x45c4, 0xb080, 0x339d, 0xba16, 0x4115, 0xbf96, 0x406e, 0xaf42, 0xb28f, 0x413d, 0xbfbb, 0x4146, 0xb038, 0x4285, 0x216e, 0xb264, 0x431e, 0x42b9, 0x2f56, 0x0e0c, 0x4217, 0xa12d, 0xac5c, 0x4328, 0x40a2, 0x1a29, 0xb0e9, 0x442f, 0x41bc, 0x37c6, 0xb0cc, 0x18ce, 0xb042, 0x1b4e, 0xbf90, 0xbf9d, 0x419f, 0x414f, 0x1eb1, 0x1f9e, 0x4294, 0xa197, 0x1896, 0xbaf5, 0x4272, 0x45c8, 0x0da9, 0x424c, 0x2c62, 0x4022, 0x1bfa, 0x4091, 0x0417, 0xb099, 0xba6b, 0x40c9, 0x1d35, 0x43c1, 0xb0e2, 0x443b, 0x4137, 0x0c33, 0x418c, 0xbf7e, 0x4196, 0xba14, 0x4585, 0xbfca, 0x41f0, 0x3bb0, 0xb044, 0xb2e7, 0x2b49, 0x4428, 0xbfca, 0xb092, 0x4051, 0x4201, 0x1a8d, 0xbf90, 0xba5c, 0xb0bf, 0x4151, 0x19c8, 0xb293, 0x437a, 0xb2a9, 0xbace, 0xbf71, 0x40da, 0xb24e, 0x0bb8, 0x1879, 0xba3b, 0x402b, 0x1e0d, 0xbad2, 0xb204, 0xba07, 0x3165, 0xb08b, 0x3c16, 0x1e6d, 0x40f9, 0x1379, 0x17f9, 0xaf70, 0x4287, 0xbf2b, 0xbaf2, 0xba11, 0x41e7, 0x0360, 0xb237, 0x43d9, 0x1db8, 0xba48, 0xba5d, 0xbac7, 0xbfdd, 0x0be8, 0x1c5b, 0x20b0, 0x4099, 0x3a34, 0x4254, 0xb236, 0x419a, 0x1b31, 0xbf2d, 0x42a2, 0x4271, 0xbad5, 0xb254, 0x1bb2, 0x43b2, 0xb2b2, 0xbae9, 0xb22b, 0xa066, 0xba09, 0x4028, 0x400a, 0xb212, 0x42a3, 0x4047, 0xbf4a, 0x2bc0, 0xa346, 0x40a3, 0x42ee, 0x138f, 0x1b40, 0xba12, 0x1b0e, 0xa916, 0xb241, 0x400b, 0xbfdb, 0xba28, 0x41a1, 0x4390, 0x3d2b, 0x443e, 0x4673, 0x1d4d, 0x4120, 0x4269, 0x419d, 0x46f2, 0x4682, 0x41c5, 0xb2d2, 0xb234, 0x4036, 0xbf7e, 0xba39, 0xb2e8, 0x466f, 0x441e, 0x1b36, 0x3f5d, 0xba69, 0x20de, 0x1fdf, 0x18d0, 0x095f, 0x416b, 0x437d, 0x4331, 0x40de, 0x0e6a, 0x353b, 0x13c7, 0x4221, 0x437c, 0x1f97, 0x3a6d, 0x435d, 0x42cc, 0x43c4, 0x310b, 0x428c, 0x2383, 0xbfc7, 0xb0c1, 0x1fd1, 0xa1ce, 0x41d6, 0x45a6, 0xb275, 0x4257, 0xb2b3, 0x43ab, 0x4278, 0x1ecd, 0x359e, 0xb2e9, 0xba0c, 0xbad3, 0x1dc2, 0x419e, 0x424a, 0x41aa, 0xb2c1, 0x44e5, 0x40f0, 0x1778, 0x4088, 0xbfd6, 0x4246, 0x4197, 0x1c5c, 0x1b2e, 0xb28b, 0x0f3d, 0x1e81, 0x4122, 0x2e73, 0x1db5, 0x42fa, 0x1d43, 0x43f2, 0xba18, 0x0068, 0x42ff, 0x0dd0, 0x4247, 0x45ce, 0xb2ba, 0xa73d, 0x428f, 0x4329, 0xb225, 0xbf62, 0xba24, 0x43a0, 0x204c, 0x1466, 0xb2dc, 0x3f46, 0x42a7, 0x43a4, 0xba61, 0xb0f1, 0x40bb, 0x40c9, 0x4192, 0x4113, 0x1d47, 0x448d, 0xaa2a, 0xbaf6, 0xb2db, 0x4294, 0x4206, 0x0429, 0xb2b2, 0x41ee, 0x4081, 0x44b3, 0xbfd1, 0xbadd, 0x424e, 0x2a0e, 0x334e, 0x41f0, 0x1b77, 0xbae8, 0x4067, 0x42eb, 0x00b1, 0x423e, 0x4073, 0x4106, 0x40a9, 0x416b, 0x128f, 0x0281, 0xba3c, 0xbac5, 0x0c2f, 0xb012, 0x1c56, 0x40a6, 0x4096, 0x40e4, 0x42b5, 0xb090, 0x42ea, 0xbf49, 0x4287, 0x4051, 0x43d7, 0xba1d, 0x41dc, 0x4161, 0x2296, 0x4251, 0x4166, 0x43ad, 0xba47, 0x1b9f, 0xb026, 0xb2d0, 0xb2ec, 0x420d, 0x4355, 0x434c, 0xb08f, 0xb252, 0x1b04, 0xa364, 0xbafc, 0x19a4, 0x3c98, 0xbf9f, 0x41c0, 0x34d7, 0x456e, 0x42d5, 0xb264, 0x43df, 0x4542, 0xba15, 0x40de, 0x42d1, 0x1a20, 0xbf2f, 0x4103, 0xacdc, 0x40cc, 0xb099, 0x43eb, 0x43df, 0x317c, 0xba70, 0x1e2c, 0xbf84, 0x4158, 0x1c12, 0x40cb, 0x46d1, 0x408a, 0x037c, 0xb071, 0x4347, 0x4320, 0x25fa, 0x4078, 0xb25d, 0x1e50, 0xa645, 0x2831, 0xbf51, 0x4092, 0x19b4, 0xa3f1, 0xbada, 0x4036, 0x42a7, 0x09ac, 0x1f55, 0xb247, 0x2753, 0x426b, 0x40a5, 0x4223, 0x40f3, 0xbfae, 0x292e, 0x1f9b, 0x46cc, 0x181d, 0x40ca, 0x413f, 0x0b7e, 0x423a, 0xb264, 0x43b4, 0x214a, 0xad2e, 0x215a, 0xba7f, 0x409b, 0x4568, 0xaf04, 0x2c49, 0xa536, 0x425e, 0x42fe, 0xa0ba, 0x4107, 0xbf77, 0xb019, 0x1640, 0x4336, 0x2631, 0x4770, 0xe7fe + ], + StartRegs = [0x7f732ac7, 0xd652158c, 0xc810dc10, 0x451cfb90, 0x698e290f, 0x67d2fe9c, 0xfa98fc70, 0xc792f08a, 0x938d63b5, 0xf0a64fe6, 0xd6444518, 0x197a89a8, 0x8b76fcf7, 0x660046dd, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x00001ab4, 0x0000005a, 0x00000000, 0x00000000, 0x00000000, 0x0000189c, 0x00000031, 0xffffffff, 0x000000ac, 0x00000000, 0x00000000, 0x197a89a7, 0x00000000, 0x8b76fcc7, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x4143, 0x4476, 0x3a03, 0x419e, 0x43b2, 0x0275, 0x1d6f, 0x4247, 0x28b0, 0x412b, 0x405c, 0x4317, 0xb2f8, 0xb0d0, 0x4669, 0xbf17, 0xb2cf, 0x2c9b, 0x0e98, 0xba5c, 0x4230, 0x2d3b, 0x28af, 0x46bd, 0x423d, 0x429e, 0xbae4, 0x4683, 0xba7e, 0x4359, 0xb0cb, 0xbfcd, 0x0cd3, 0xa0ac, 0x41a5, 0x1bcb, 0xba6f, 0x44f1, 0x4058, 0x0d71, 0x46cb, 0xbfb0, 0x4310, 0x0701, 0x4026, 0x4320, 0xb2fe, 0x4317, 0xb28d, 0xb269, 0xb2d7, 0x43f5, 0xbaed, 0x40d1, 0x42cd, 0xbfdc, 0x075b, 0x4183, 0x12da, 0x4646, 0xb258, 0x2fa1, 0xba16, 0xba7f, 0xb2f9, 0xa1b7, 0x4198, 0x3436, 0x428a, 0x41da, 0x0f61, 0x43c0, 0xb2a7, 0xba6e, 0xb210, 0x1820, 0x1923, 0xb278, 0x4136, 0x2035, 0x429e, 0xb2c2, 0xbf77, 0xb260, 0x4616, 0x1d26, 0x4176, 0x42fc, 0x43c9, 0xa2cf, 0x454d, 0x4342, 0x2e4c, 0xbf16, 0xb09b, 0xbaea, 0x438f, 0xbf65, 0xb0a5, 0xa6ba, 0x1f3d, 0x415f, 0xb296, 0x4113, 0x03e8, 0x2fa2, 0x19e9, 0x2348, 0x44e3, 0xb0d0, 0x43b4, 0x28e6, 0x1b96, 0x41d4, 0x0f21, 0x439d, 0xb07b, 0xbf74, 0x3b03, 0xba3f, 0x1942, 0x459e, 0x194f, 0xb0a7, 0x174e, 0xbf92, 0xb00d, 0x3171, 0x1f1d, 0x436c, 0xbf86, 0x15ba, 0x3e2f, 0x1711, 0x4351, 0x2b18, 0x418b, 0x0a50, 0x40a0, 0xba20, 0x4154, 0x4174, 0x1d34, 0x3da5, 0x41f4, 0x403a, 0x4201, 0xba51, 0x33d0, 0x1823, 0xb0b7, 0x4396, 0x40c1, 0xbf96, 0xb212, 0x23d4, 0xa987, 0x4344, 0x3df9, 0x32bf, 0x4082, 0xb297, 0x4174, 0xac14, 0x4297, 0xb2e2, 0xb2e8, 0xbfaa, 0x429e, 0xb0b8, 0x465f, 0xba46, 0x433d, 0xa49c, 0x432d, 0x3e9f, 0x1e23, 0xb2a2, 0xa5aa, 0xb0cf, 0xba2f, 0x41f9, 0xbfce, 0x41a6, 0x41af, 0x29a7, 0xbf59, 0xb004, 0x4003, 0xbf00, 0x3449, 0x40b1, 0x116e, 0xb027, 0xb25c, 0xabd8, 0x1bad, 0x0806, 0x0827, 0x46e1, 0x41b0, 0x419d, 0x1e88, 0xb213, 0xbad2, 0x341a, 0xafb2, 0x4416, 0x429e, 0x2857, 0x40a7, 0xba0c, 0x4205, 0x0eeb, 0x43b9, 0xbf2d, 0x41e5, 0x1a16, 0x45a0, 0x423c, 0xb00d, 0x1f94, 0xbae0, 0xbf1b, 0x42d0, 0xb071, 0x4345, 0x4340, 0x41ab, 0xb067, 0x3432, 0xbf1d, 0xb2ef, 0xb061, 0xba7f, 0x3047, 0xa46e, 0x429e, 0xbaf6, 0x41b3, 0x45ec, 0xb20a, 0xb2d5, 0x4360, 0x2af9, 0xb061, 0x2ed2, 0x1329, 0x1c60, 0x4151, 0x1351, 0x465d, 0x40f1, 0x4388, 0x408b, 0xba1e, 0xbfd0, 0xbfb6, 0x4132, 0x074b, 0x18de, 0x420a, 0x43ec, 0xb2e0, 0x4319, 0x41a9, 0xb0e2, 0x4190, 0x400d, 0x4159, 0xba5f, 0xa852, 0x4346, 0xb0b5, 0xbf44, 0xa4e4, 0x1b56, 0x1a5d, 0xba77, 0xbae3, 0xb2be, 0x405a, 0x41e3, 0x3cc6, 0x1ebf, 0x19c2, 0x41ed, 0x4498, 0x1c91, 0x3ae6, 0x42b5, 0xb2e3, 0x18f6, 0xaa8b, 0x45d8, 0x414a, 0xbf6a, 0x4172, 0x4017, 0x1a6f, 0x45d8, 0xa35e, 0x4259, 0xba00, 0x1ede, 0x4125, 0xba04, 0xb2bc, 0x419b, 0x18ef, 0xb20b, 0x18bc, 0x449a, 0xbad5, 0x40b3, 0x42d1, 0x2138, 0x1f04, 0xb266, 0x410f, 0xb04f, 0xba03, 0xbf44, 0x1a63, 0xb276, 0xb2ff, 0x408e, 0x2b75, 0x468d, 0x402e, 0x4265, 0x1e0a, 0x1e17, 0xba0d, 0x0383, 0x44d5, 0x1333, 0x1bf7, 0x408e, 0x0079, 0x4227, 0x43ba, 0x41f2, 0xa9a9, 0x4072, 0x42ca, 0x124f, 0xba40, 0xba14, 0x4146, 0xbf03, 0x426f, 0xba4f, 0xba49, 0xb28b, 0x4368, 0xbf47, 0x4315, 0x3f70, 0x43ed, 0x310d, 0xb013, 0xbacc, 0xbfc0, 0xbf90, 0x4272, 0xbf85, 0xb06d, 0x4162, 0x4155, 0x1d1a, 0xa425, 0x08d3, 0x1f77, 0xb0a4, 0x1e2b, 0xbf00, 0x40f9, 0x2f9d, 0x3eea, 0xb035, 0x42a1, 0xbaf2, 0x2410, 0xa6e0, 0xbf6f, 0x4335, 0x4319, 0x43bc, 0x1f9b, 0x41e0, 0x1b46, 0xbfe0, 0x4297, 0x4177, 0x19ef, 0x42bb, 0x4075, 0x40d4, 0x42cb, 0x1db4, 0xb251, 0x400a, 0xbfa3, 0x441c, 0xb2ce, 0x4187, 0x4365, 0xba30, 0x43a9, 0x42b6, 0x4330, 0x41eb, 0x1341, 0xb016, 0xba5b, 0x4208, 0xbff0, 0x42ba, 0x4001, 0x42b4, 0xb243, 0xb2bd, 0x1cca, 0x420a, 0xa277, 0x4129, 0x40c6, 0x187b, 0x3b6a, 0xbfc9, 0x4083, 0xb2a0, 0x07bb, 0x413d, 0x4116, 0xae4f, 0xb097, 0x39d7, 0xba11, 0x43d3, 0x42b9, 0x2daf, 0x43cd, 0xb21e, 0x4185, 0x4203, 0xba2e, 0xb21a, 0x4095, 0xbf2d, 0x4230, 0x42c8, 0x4277, 0x1e62, 0x19ae, 0x4309, 0xba43, 0xba09, 0x415b, 0x40b8, 0x4271, 0xaf78, 0xb298, 0x434f, 0x2fe1, 0x414a, 0x43b1, 0xbf72, 0x4043, 0xbff0, 0x0c11, 0x4161, 0x40e6, 0x191d, 0xb222, 0xa0d6, 0x4247, 0x2b58, 0x1941, 0x4157, 0x4223, 0xac08, 0xb0a0, 0x1aa4, 0x42fa, 0x18bb, 0x4080, 0x1a11, 0xb26c, 0x3e43, 0x4089, 0x41ac, 0xba1c, 0x4326, 0x42b3, 0xbf9c, 0x21eb, 0xba4a, 0xbf3e, 0x0c75, 0x2d1e, 0x43a7, 0xb200, 0x4005, 0x42a7, 0x1848, 0xb2db, 0x05fb, 0xbae2, 0xbf65, 0x407e, 0xb2f1, 0x418a, 0x43db, 0xb2a6, 0x4244, 0xbf2a, 0xa9d3, 0x0194, 0x42dd, 0x25d1, 0xb2d1, 0x41f3, 0x42da, 0x3808, 0x412a, 0xb287, 0x44d3, 0x1977, 0x41c2, 0x1091, 0xbf28, 0xbae4, 0x4144, 0xba62, 0x4643, 0x40f8, 0x4194, 0x1bec, 0x407a, 0xb0f3, 0xb234, 0xba45, 0xb0d3, 0xba4e, 0x404e, 0xbf76, 0xb2e2, 0xbaec, 0x4665, 0xaa4c, 0xb20e, 0xba08, 0xa8b3, 0xb072, 0x1b10, 0xbacb, 0xb064, 0x41ef, 0x44f2, 0xaaa2, 0x4362, 0x1eb0, 0xa948, 0x4236, 0x46c4, 0x1b32, 0x40f1, 0x2641, 0xab44, 0x4222, 0x42be, 0x1bc0, 0x4639, 0x4135, 0xbfe4, 0x434a, 0xba33, 0x1ee0, 0xb229, 0xb06d, 0x44e9, 0x04af, 0x40d1, 0x4456, 0x46e9, 0x4112, 0x18ce, 0x2066, 0xbfe8, 0x4240, 0xbaf0, 0xbfcf, 0x4691, 0x079d, 0x438f, 0x406e, 0x4075, 0x2821, 0xa06e, 0x4167, 0x4385, 0x3a13, 0xbac8, 0x45e4, 0x429d, 0x42b0, 0xb20b, 0xbfb1, 0xa2ee, 0x35d9, 0x1d65, 0x152c, 0xb04e, 0x0f48, 0x254e, 0x1ce5, 0x2e0f, 0x3304, 0xb0bf, 0xb2de, 0x1c11, 0x1e33, 0x1957, 0xbf60, 0x19b6, 0x400b, 0x401a, 0xbfd9, 0x4621, 0x19a6, 0x2a35, 0x26e2, 0xb294, 0x412b, 0x4165, 0x1b4f, 0xad1b, 0x2f76, 0x1a42, 0xbf65, 0x3406, 0xb20a, 0x43f5, 0xba32, 0x45db, 0x23fe, 0xbad4, 0x1ab0, 0x222a, 0xb22a, 0xb206, 0x43cd, 0x13e5, 0x1c19, 0x2ac8, 0x268a, 0x4319, 0x1c7b, 0x1f02, 0x45f3, 0xb25c, 0x400e, 0xa29c, 0xb041, 0xbfd2, 0x4261, 0xb0dc, 0xa298, 0x447b, 0xbfc3, 0x2c44, 0xba23, 0x41f3, 0x43a1, 0x41ec, 0x43ad, 0x41e2, 0x401d, 0xb096, 0x40dd, 0x3336, 0x415c, 0x4037, 0x42e5, 0x4323, 0xb257, 0xb2a7, 0x1cc7, 0xba28, 0x40de, 0x40dd, 0x4069, 0x1bda, 0x46e4, 0xbf4d, 0x010c, 0x1533, 0x41f8, 0x42c3, 0x41ff, 0x14cd, 0x4291, 0x1da6, 0x16e2, 0x3752, 0xafe8, 0x4192, 0x46c4, 0x4204, 0x40b8, 0x222c, 0x23e3, 0xaca3, 0xbf5c, 0x02c8, 0x4219, 0xb078, 0x205d, 0x4267, 0x41c0, 0xba36, 0x1c8d, 0x35be, 0xb2d4, 0xb2fe, 0x40e7, 0x404f, 0x43a1, 0x3017, 0x0f83, 0xb08b, 0x40ff, 0xbf68, 0x40f7, 0x2d84, 0x4072, 0xb2a9, 0x089e, 0x1c2f, 0x1ccf, 0x412c, 0xba2b, 0x1cda, 0x19d2, 0xb04a, 0xb053, 0x2419, 0x422f, 0x4269, 0x1997, 0x0701, 0x1326, 0x0e29, 0x4105, 0x425b, 0x4111, 0x4677, 0x4373, 0xbf6c, 0x1ad8, 0x4305, 0xba7c, 0x064b, 0x34a4, 0x4241, 0xb2b5, 0xbf0e, 0x4282, 0x187e, 0xbaf4, 0x460d, 0x417c, 0xba19, 0xbf90, 0x1e52, 0x42f2, 0x41c9, 0x23d2, 0xb221, 0xb2cc, 0x1f32, 0xba0d, 0x43b3, 0x408e, 0x4040, 0x43d5, 0xb05f, 0x40bb, 0x44f8, 0x179c, 0xa95e, 0x18de, 0xb229, 0x42ce, 0x4310, 0xbf45, 0x426a, 0xab45, 0x4339, 0x40a8, 0xabbe, 0x43d3, 0x3ba2, 0x1a98, 0x43f4, 0x4364, 0xaa92, 0x1878, 0xaf21, 0x4422, 0xa6c1, 0xa127, 0xba16, 0x4032, 0x1ed2, 0x4354, 0x46c2, 0x4275, 0x3beb, 0xb240, 0x4029, 0x417c, 0x41a4, 0x42c1, 0xbf5b, 0x411a, 0x4134, 0x3a11, 0x39e1, 0x2cc5, 0xb0f1, 0x35af, 0xb2b3, 0xb214, 0x4312, 0xbfc3, 0x4151, 0xb227, 0x4190, 0xa889, 0x402e, 0xaa1c, 0x4236, 0xbf72, 0x1ab4, 0x40f2, 0xab93, 0x33d2, 0xb26d, 0xa602, 0xb090, 0xb0af, 0x4333, 0xba5e, 0x4036, 0x411a, 0x3860, 0xb2dd, 0x4322, 0x41f9, 0xbff0, 0x031c, 0x4093, 0xb05a, 0x4284, 0x40fe, 0xb031, 0x31d3, 0xb060, 0xbf7f, 0xb02b, 0xb254, 0x42e4, 0xb247, 0xbf00, 0xb221, 0xb040, 0xb2e4, 0x40b1, 0x1dff, 0x400c, 0xba6e, 0x4457, 0x1e3f, 0xb2bf, 0x40de, 0xbfc3, 0x1e09, 0x42ed, 0xb2a3, 0xba5d, 0xbfe0, 0xba5f, 0xba77, 0x1976, 0x42c1, 0xb278, 0x46e5, 0x40b7, 0x4495, 0x43b4, 0xb00e, 0x40f8, 0x27fa, 0x4170, 0x422a, 0x411e, 0x1b39, 0x41e0, 0x447f, 0xbf94, 0xa87e, 0x41a6, 0x45f5, 0xb204, 0x43bb, 0xb270, 0xb0f6, 0xb0f3, 0x0fcf, 0x2554, 0xb202, 0x4009, 0x4056, 0x37e1, 0x1d32, 0x41e1, 0x1988, 0xba4e, 0x468b, 0x4186, 0x42d5, 0x42a4, 0xbf21, 0x3a5e, 0xbff0, 0x13c6, 0x2352, 0x1def, 0xb26e, 0x41ed, 0x429b, 0x4253, 0xb2d1, 0x4180, 0xbf6f, 0x427b, 0x0ff2, 0xa388, 0x42e5, 0xb2aa, 0x1c71, 0x429b, 0xb072, 0xb22d, 0xb211, 0xb066, 0x173e, 0x1d80, 0x4253, 0xa2d6, 0x4033, 0x404a, 0xb2a5, 0x413b, 0xbade, 0x417c, 0x40c2, 0xb257, 0x1fd5, 0x0bb8, 0x42aa, 0x1d98, 0x43e6, 0xbfba, 0x1e34, 0x020a, 0xb238, 0x3c80, 0x4023, 0x4000, 0x437c, 0xbf80, 0x15e7, 0x1366, 0x42d7, 0x44bd, 0xbf2b, 0x4274, 0x28cf, 0x4376, 0x46f5, 0x0319, 0x465b, 0x4087, 0x4106, 0x4135, 0x0ef5, 0xb2e9, 0xb07d, 0x415a, 0xba1f, 0x4368, 0x40af, 0x469c, 0x41bf, 0x2d0c, 0x4305, 0x4222, 0x41e3, 0xbf98, 0x4649, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xbb7d36f6, 0x99698622, 0x49d98852, 0x36cb9669, 0x824878bf, 0xc93e95e5, 0x63323f2d, 0xc8f7f318, 0x96c967ec, 0x5a2d76e7, 0x8dfbec30, 0x6fa00b5f, 0x2d920f82, 0x5d28d234, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00000000, 0x004003e8, 0xfa000000, 0x000022ea, 0x00000000, 0x00000000, 0xffffffff, 0x9681941b, 0x00000000, 0x9681941b, 0x000003e8, 0x000003e8, 0x000001f4, 0x00000000, 0xa00001d0 }, + Instructions = [0x4143, 0x4476, 0x3a03, 0x419e, 0x43b2, 0x0275, 0x1d6f, 0x4247, 0x28b0, 0x412b, 0x405c, 0x4317, 0xb2f8, 0xb0d0, 0x4669, 0xbf17, 0xb2cf, 0x2c9b, 0x0e98, 0xba5c, 0x4230, 0x2d3b, 0x28af, 0x46bd, 0x423d, 0x429e, 0xbae4, 0x4683, 0xba7e, 0x4359, 0xb0cb, 0xbfcd, 0x0cd3, 0xa0ac, 0x41a5, 0x1bcb, 0xba6f, 0x44f1, 0x4058, 0x0d71, 0x46cb, 0xbfb0, 0x4310, 0x0701, 0x4026, 0x4320, 0xb2fe, 0x4317, 0xb28d, 0xb269, 0xb2d7, 0x43f5, 0xbaed, 0x40d1, 0x42cd, 0xbfdc, 0x075b, 0x4183, 0x12da, 0x4646, 0xb258, 0x2fa1, 0xba16, 0xba7f, 0xb2f9, 0xa1b7, 0x4198, 0x3436, 0x428a, 0x41da, 0x0f61, 0x43c0, 0xb2a7, 0xba6e, 0xb210, 0x1820, 0x1923, 0xb278, 0x4136, 0x2035, 0x429e, 0xb2c2, 0xbf77, 0xb260, 0x4616, 0x1d26, 0x4176, 0x42fc, 0x43c9, 0xa2cf, 0x454d, 0x4342, 0x2e4c, 0xbf16, 0xb09b, 0xbaea, 0x438f, 0xbf65, 0xb0a5, 0xa6ba, 0x1f3d, 0x415f, 0xb296, 0x4113, 0x03e8, 0x2fa2, 0x19e9, 0x2348, 0x44e3, 0xb0d0, 0x43b4, 0x28e6, 0x1b96, 0x41d4, 0x0f21, 0x439d, 0xb07b, 0xbf74, 0x3b03, 0xba3f, 0x1942, 0x459e, 0x194f, 0xb0a7, 0x174e, 0xbf92, 0xb00d, 0x3171, 0x1f1d, 0x436c, 0xbf86, 0x15ba, 0x3e2f, 0x1711, 0x4351, 0x2b18, 0x418b, 0x0a50, 0x40a0, 0xba20, 0x4154, 0x4174, 0x1d34, 0x3da5, 0x41f4, 0x403a, 0x4201, 0xba51, 0x33d0, 0x1823, 0xb0b7, 0x4396, 0x40c1, 0xbf96, 0xb212, 0x23d4, 0xa987, 0x4344, 0x3df9, 0x32bf, 0x4082, 0xb297, 0x4174, 0xac14, 0x4297, 0xb2e2, 0xb2e8, 0xbfaa, 0x429e, 0xb0b8, 0x465f, 0xba46, 0x433d, 0xa49c, 0x432d, 0x3e9f, 0x1e23, 0xb2a2, 0xa5aa, 0xb0cf, 0xba2f, 0x41f9, 0xbfce, 0x41a6, 0x41af, 0x29a7, 0xbf59, 0xb004, 0x4003, 0xbf00, 0x3449, 0x40b1, 0x116e, 0xb027, 0xb25c, 0xabd8, 0x1bad, 0x0806, 0x0827, 0x46e1, 0x41b0, 0x419d, 0x1e88, 0xb213, 0xbad2, 0x341a, 0xafb2, 0x4416, 0x429e, 0x2857, 0x40a7, 0xba0c, 0x4205, 0x0eeb, 0x43b9, 0xbf2d, 0x41e5, 0x1a16, 0x45a0, 0x423c, 0xb00d, 0x1f94, 0xbae0, 0xbf1b, 0x42d0, 0xb071, 0x4345, 0x4340, 0x41ab, 0xb067, 0x3432, 0xbf1d, 0xb2ef, 0xb061, 0xba7f, 0x3047, 0xa46e, 0x429e, 0xbaf6, 0x41b3, 0x45ec, 0xb20a, 0xb2d5, 0x4360, 0x2af9, 0xb061, 0x2ed2, 0x1329, 0x1c60, 0x4151, 0x1351, 0x465d, 0x40f1, 0x4388, 0x408b, 0xba1e, 0xbfd0, 0xbfb6, 0x4132, 0x074b, 0x18de, 0x420a, 0x43ec, 0xb2e0, 0x4319, 0x41a9, 0xb0e2, 0x4190, 0x400d, 0x4159, 0xba5f, 0xa852, 0x4346, 0xb0b5, 0xbf44, 0xa4e4, 0x1b56, 0x1a5d, 0xba77, 0xbae3, 0xb2be, 0x405a, 0x41e3, 0x3cc6, 0x1ebf, 0x19c2, 0x41ed, 0x4498, 0x1c91, 0x3ae6, 0x42b5, 0xb2e3, 0x18f6, 0xaa8b, 0x45d8, 0x414a, 0xbf6a, 0x4172, 0x4017, 0x1a6f, 0x45d8, 0xa35e, 0x4259, 0xba00, 0x1ede, 0x4125, 0xba04, 0xb2bc, 0x419b, 0x18ef, 0xb20b, 0x18bc, 0x449a, 0xbad5, 0x40b3, 0x42d1, 0x2138, 0x1f04, 0xb266, 0x410f, 0xb04f, 0xba03, 0xbf44, 0x1a63, 0xb276, 0xb2ff, 0x408e, 0x2b75, 0x468d, 0x402e, 0x4265, 0x1e0a, 0x1e17, 0xba0d, 0x0383, 0x44d5, 0x1333, 0x1bf7, 0x408e, 0x0079, 0x4227, 0x43ba, 0x41f2, 0xa9a9, 0x4072, 0x42ca, 0x124f, 0xba40, 0xba14, 0x4146, 0xbf03, 0x426f, 0xba4f, 0xba49, 0xb28b, 0x4368, 0xbf47, 0x4315, 0x3f70, 0x43ed, 0x310d, 0xb013, 0xbacc, 0xbfc0, 0xbf90, 0x4272, 0xbf85, 0xb06d, 0x4162, 0x4155, 0x1d1a, 0xa425, 0x08d3, 0x1f77, 0xb0a4, 0x1e2b, 0xbf00, 0x40f9, 0x2f9d, 0x3eea, 0xb035, 0x42a1, 0xbaf2, 0x2410, 0xa6e0, 0xbf6f, 0x4335, 0x4319, 0x43bc, 0x1f9b, 0x41e0, 0x1b46, 0xbfe0, 0x4297, 0x4177, 0x19ef, 0x42bb, 0x4075, 0x40d4, 0x42cb, 0x1db4, 0xb251, 0x400a, 0xbfa3, 0x441c, 0xb2ce, 0x4187, 0x4365, 0xba30, 0x43a9, 0x42b6, 0x4330, 0x41eb, 0x1341, 0xb016, 0xba5b, 0x4208, 0xbff0, 0x42ba, 0x4001, 0x42b4, 0xb243, 0xb2bd, 0x1cca, 0x420a, 0xa277, 0x4129, 0x40c6, 0x187b, 0x3b6a, 0xbfc9, 0x4083, 0xb2a0, 0x07bb, 0x413d, 0x4116, 0xae4f, 0xb097, 0x39d7, 0xba11, 0x43d3, 0x42b9, 0x2daf, 0x43cd, 0xb21e, 0x4185, 0x4203, 0xba2e, 0xb21a, 0x4095, 0xbf2d, 0x4230, 0x42c8, 0x4277, 0x1e62, 0x19ae, 0x4309, 0xba43, 0xba09, 0x415b, 0x40b8, 0x4271, 0xaf78, 0xb298, 0x434f, 0x2fe1, 0x414a, 0x43b1, 0xbf72, 0x4043, 0xbff0, 0x0c11, 0x4161, 0x40e6, 0x191d, 0xb222, 0xa0d6, 0x4247, 0x2b58, 0x1941, 0x4157, 0x4223, 0xac08, 0xb0a0, 0x1aa4, 0x42fa, 0x18bb, 0x4080, 0x1a11, 0xb26c, 0x3e43, 0x4089, 0x41ac, 0xba1c, 0x4326, 0x42b3, 0xbf9c, 0x21eb, 0xba4a, 0xbf3e, 0x0c75, 0x2d1e, 0x43a7, 0xb200, 0x4005, 0x42a7, 0x1848, 0xb2db, 0x05fb, 0xbae2, 0xbf65, 0x407e, 0xb2f1, 0x418a, 0x43db, 0xb2a6, 0x4244, 0xbf2a, 0xa9d3, 0x0194, 0x42dd, 0x25d1, 0xb2d1, 0x41f3, 0x42da, 0x3808, 0x412a, 0xb287, 0x44d3, 0x1977, 0x41c2, 0x1091, 0xbf28, 0xbae4, 0x4144, 0xba62, 0x4643, 0x40f8, 0x4194, 0x1bec, 0x407a, 0xb0f3, 0xb234, 0xba45, 0xb0d3, 0xba4e, 0x404e, 0xbf76, 0xb2e2, 0xbaec, 0x4665, 0xaa4c, 0xb20e, 0xba08, 0xa8b3, 0xb072, 0x1b10, 0xbacb, 0xb064, 0x41ef, 0x44f2, 0xaaa2, 0x4362, 0x1eb0, 0xa948, 0x4236, 0x46c4, 0x1b32, 0x40f1, 0x2641, 0xab44, 0x4222, 0x42be, 0x1bc0, 0x4639, 0x4135, 0xbfe4, 0x434a, 0xba33, 0x1ee0, 0xb229, 0xb06d, 0x44e9, 0x04af, 0x40d1, 0x4456, 0x46e9, 0x4112, 0x18ce, 0x2066, 0xbfe8, 0x4240, 0xbaf0, 0xbfcf, 0x4691, 0x079d, 0x438f, 0x406e, 0x4075, 0x2821, 0xa06e, 0x4167, 0x4385, 0x3a13, 0xbac8, 0x45e4, 0x429d, 0x42b0, 0xb20b, 0xbfb1, 0xa2ee, 0x35d9, 0x1d65, 0x152c, 0xb04e, 0x0f48, 0x254e, 0x1ce5, 0x2e0f, 0x3304, 0xb0bf, 0xb2de, 0x1c11, 0x1e33, 0x1957, 0xbf60, 0x19b6, 0x400b, 0x401a, 0xbfd9, 0x4621, 0x19a6, 0x2a35, 0x26e2, 0xb294, 0x412b, 0x4165, 0x1b4f, 0xad1b, 0x2f76, 0x1a42, 0xbf65, 0x3406, 0xb20a, 0x43f5, 0xba32, 0x45db, 0x23fe, 0xbad4, 0x1ab0, 0x222a, 0xb22a, 0xb206, 0x43cd, 0x13e5, 0x1c19, 0x2ac8, 0x268a, 0x4319, 0x1c7b, 0x1f02, 0x45f3, 0xb25c, 0x400e, 0xa29c, 0xb041, 0xbfd2, 0x4261, 0xb0dc, 0xa298, 0x447b, 0xbfc3, 0x2c44, 0xba23, 0x41f3, 0x43a1, 0x41ec, 0x43ad, 0x41e2, 0x401d, 0xb096, 0x40dd, 0x3336, 0x415c, 0x4037, 0x42e5, 0x4323, 0xb257, 0xb2a7, 0x1cc7, 0xba28, 0x40de, 0x40dd, 0x4069, 0x1bda, 0x46e4, 0xbf4d, 0x010c, 0x1533, 0x41f8, 0x42c3, 0x41ff, 0x14cd, 0x4291, 0x1da6, 0x16e2, 0x3752, 0xafe8, 0x4192, 0x46c4, 0x4204, 0x40b8, 0x222c, 0x23e3, 0xaca3, 0xbf5c, 0x02c8, 0x4219, 0xb078, 0x205d, 0x4267, 0x41c0, 0xba36, 0x1c8d, 0x35be, 0xb2d4, 0xb2fe, 0x40e7, 0x404f, 0x43a1, 0x3017, 0x0f83, 0xb08b, 0x40ff, 0xbf68, 0x40f7, 0x2d84, 0x4072, 0xb2a9, 0x089e, 0x1c2f, 0x1ccf, 0x412c, 0xba2b, 0x1cda, 0x19d2, 0xb04a, 0xb053, 0x2419, 0x422f, 0x4269, 0x1997, 0x0701, 0x1326, 0x0e29, 0x4105, 0x425b, 0x4111, 0x4677, 0x4373, 0xbf6c, 0x1ad8, 0x4305, 0xba7c, 0x064b, 0x34a4, 0x4241, 0xb2b5, 0xbf0e, 0x4282, 0x187e, 0xbaf4, 0x460d, 0x417c, 0xba19, 0xbf90, 0x1e52, 0x42f2, 0x41c9, 0x23d2, 0xb221, 0xb2cc, 0x1f32, 0xba0d, 0x43b3, 0x408e, 0x4040, 0x43d5, 0xb05f, 0x40bb, 0x44f8, 0x179c, 0xa95e, 0x18de, 0xb229, 0x42ce, 0x4310, 0xbf45, 0x426a, 0xab45, 0x4339, 0x40a8, 0xabbe, 0x43d3, 0x3ba2, 0x1a98, 0x43f4, 0x4364, 0xaa92, 0x1878, 0xaf21, 0x4422, 0xa6c1, 0xa127, 0xba16, 0x4032, 0x1ed2, 0x4354, 0x46c2, 0x4275, 0x3beb, 0xb240, 0x4029, 0x417c, 0x41a4, 0x42c1, 0xbf5b, 0x411a, 0x4134, 0x3a11, 0x39e1, 0x2cc5, 0xb0f1, 0x35af, 0xb2b3, 0xb214, 0x4312, 0xbfc3, 0x4151, 0xb227, 0x4190, 0xa889, 0x402e, 0xaa1c, 0x4236, 0xbf72, 0x1ab4, 0x40f2, 0xab93, 0x33d2, 0xb26d, 0xa602, 0xb090, 0xb0af, 0x4333, 0xba5e, 0x4036, 0x411a, 0x3860, 0xb2dd, 0x4322, 0x41f9, 0xbff0, 0x031c, 0x4093, 0xb05a, 0x4284, 0x40fe, 0xb031, 0x31d3, 0xb060, 0xbf7f, 0xb02b, 0xb254, 0x42e4, 0xb247, 0xbf00, 0xb221, 0xb040, 0xb2e4, 0x40b1, 0x1dff, 0x400c, 0xba6e, 0x4457, 0x1e3f, 0xb2bf, 0x40de, 0xbfc3, 0x1e09, 0x42ed, 0xb2a3, 0xba5d, 0xbfe0, 0xba5f, 0xba77, 0x1976, 0x42c1, 0xb278, 0x46e5, 0x40b7, 0x4495, 0x43b4, 0xb00e, 0x40f8, 0x27fa, 0x4170, 0x422a, 0x411e, 0x1b39, 0x41e0, 0x447f, 0xbf94, 0xa87e, 0x41a6, 0x45f5, 0xb204, 0x43bb, 0xb270, 0xb0f6, 0xb0f3, 0x0fcf, 0x2554, 0xb202, 0x4009, 0x4056, 0x37e1, 0x1d32, 0x41e1, 0x1988, 0xba4e, 0x468b, 0x4186, 0x42d5, 0x42a4, 0xbf21, 0x3a5e, 0xbff0, 0x13c6, 0x2352, 0x1def, 0xb26e, 0x41ed, 0x429b, 0x4253, 0xb2d1, 0x4180, 0xbf6f, 0x427b, 0x0ff2, 0xa388, 0x42e5, 0xb2aa, 0x1c71, 0x429b, 0xb072, 0xb22d, 0xb211, 0xb066, 0x173e, 0x1d80, 0x4253, 0xa2d6, 0x4033, 0x404a, 0xb2a5, 0x413b, 0xbade, 0x417c, 0x40c2, 0xb257, 0x1fd5, 0x0bb8, 0x42aa, 0x1d98, 0x43e6, 0xbfba, 0x1e34, 0x020a, 0xb238, 0x3c80, 0x4023, 0x4000, 0x437c, 0xbf80, 0x15e7, 0x1366, 0x42d7, 0x44bd, 0xbf2b, 0x4274, 0x28cf, 0x4376, 0x46f5, 0x0319, 0x465b, 0x4087, 0x4106, 0x4135, 0x0ef5, 0xb2e9, 0xb07d, 0x415a, 0xba1f, 0x4368, 0x40af, 0x469c, 0x41bf, 0x2d0c, 0x4305, 0x4222, 0x41e3, 0xbf98, 0x4649, 0x4770, 0xe7fe + ], + StartRegs = [0xbb7d36f6, 0x99698622, 0x49d98852, 0x36cb9669, 0x824878bf, 0xc93e95e5, 0x63323f2d, 0xc8f7f318, 0x96c967ec, 0x5a2d76e7, 0x8dfbec30, 0x6fa00b5f, 0x2d920f82, 0x5d28d234, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x00000000, 0x00000000, 0x004003e8, 0xfa000000, 0x000022ea, 0x00000000, 0x00000000, 0xffffffff, 0x9681941b, 0x00000000, 0x9681941b, 0x000003e8, 0x000003e8, 0x000001f4, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x43de, 0x4327, 0xb263, 0xa931, 0x4228, 0xb061, 0xbac6, 0x434d, 0xa868, 0xbf90, 0xba1c, 0x43bf, 0xbf70, 0x4229, 0x42b0, 0x40f0, 0x32dd, 0xba5d, 0xbf85, 0x43a4, 0xb2af, 0xb2b1, 0x4021, 0x2d77, 0xa666, 0x4176, 0x4089, 0x426e, 0x41de, 0x4345, 0x400b, 0x4056, 0x1bee, 0x19d7, 0xa0e7, 0x40b1, 0x2328, 0xbf06, 0xa385, 0x465d, 0xb277, 0x4664, 0x1a4b, 0xbad8, 0x0428, 0x0685, 0x4028, 0x300a, 0x4349, 0xba0f, 0xb2e3, 0x4662, 0x40d7, 0x435e, 0x0b39, 0x421f, 0x4670, 0xb2d6, 0x17aa, 0x4652, 0x4688, 0x1d08, 0x0544, 0x1fd9, 0xbfb3, 0x4166, 0x40ef, 0xbff0, 0xb0c9, 0x047f, 0x4063, 0x1011, 0x1f38, 0x4475, 0x427b, 0x4149, 0xba6c, 0x428f, 0x43da, 0xb2c2, 0x1f1a, 0x40d0, 0x4283, 0x1b46, 0x2aad, 0xb26d, 0x42b6, 0xa275, 0xba02, 0x40bf, 0x047c, 0xb2de, 0xbf60, 0x41a9, 0xbf28, 0x43ae, 0xba2b, 0x1dbc, 0x0735, 0x4234, 0x408b, 0xba25, 0x1086, 0x420d, 0xb074, 0xb290, 0x41e9, 0x410d, 0x4256, 0x42a2, 0x40bd, 0xabce, 0x4380, 0x4015, 0x4169, 0x405d, 0x3fbd, 0xb253, 0x433a, 0xbfd7, 0x41b2, 0x15be, 0x188a, 0x0fc1, 0x2952, 0x35a4, 0x40f1, 0x2a4c, 0xbfbd, 0xb2e4, 0xb23a, 0x1f28, 0x4630, 0x388c, 0x4147, 0x40f0, 0x4567, 0xbac7, 0xbfa0, 0x436c, 0x3e60, 0xb2d1, 0xb0e4, 0xb26a, 0x1830, 0xba33, 0xb26f, 0x2b61, 0x400b, 0x4346, 0xb069, 0x4039, 0x0aaa, 0xba75, 0x43d5, 0x417b, 0x42ec, 0xae57, 0xbf6e, 0x41cf, 0x3075, 0xb29b, 0x15ef, 0x1b99, 0x435d, 0xb215, 0x42fd, 0x4234, 0x2e88, 0xba7d, 0xbade, 0xba31, 0xbad9, 0xa2a3, 0x42f1, 0x1bb3, 0xbafa, 0xa940, 0x40a6, 0x3689, 0xb2ba, 0xbfaf, 0x4052, 0x1a92, 0xb2be, 0x462e, 0x41d1, 0x4145, 0x1619, 0x46c2, 0x3167, 0x409e, 0xba38, 0xb20f, 0xbacc, 0xb238, 0x4297, 0xbfa1, 0xbaf4, 0x38a8, 0xb293, 0xa847, 0x4138, 0x4175, 0x40fa, 0x259a, 0x4244, 0x4029, 0x3497, 0x15f3, 0xb07c, 0xbacb, 0x433f, 0x42e5, 0x3baf, 0x4029, 0x1aab, 0x20de, 0xa582, 0xbf87, 0xb2ff, 0x4098, 0xbace, 0x415c, 0x40cf, 0xb272, 0xbfdf, 0x40e0, 0x42dd, 0x4122, 0x41ba, 0xb2e2, 0x2632, 0x4153, 0xbf7d, 0x3131, 0x3b4d, 0x43ba, 0x41ab, 0x3b6c, 0xb2b3, 0x31e5, 0xba05, 0xb268, 0x1431, 0xba04, 0x4556, 0x43ab, 0x421c, 0xb2a4, 0xb23c, 0x410e, 0x42c9, 0x4063, 0x1da5, 0x402f, 0xb288, 0x0b26, 0x0570, 0xb03b, 0x4260, 0x4096, 0xbf8e, 0x10ad, 0x3f3a, 0x418e, 0x0b8b, 0x2f4f, 0x405a, 0xb00a, 0xb07e, 0x04ce, 0x41fa, 0x4271, 0x30c8, 0x40e5, 0x43f5, 0x3887, 0xa453, 0x4608, 0xbf71, 0x0220, 0x4540, 0x4188, 0xbff0, 0x434c, 0x3c0b, 0x41eb, 0x2d26, 0x4675, 0x4149, 0x4614, 0xb238, 0x308c, 0x4005, 0xbf5f, 0x4041, 0x0a0d, 0xb258, 0x43f4, 0x4316, 0x4170, 0xb2dc, 0xbfb6, 0x2875, 0xb052, 0x40dd, 0xbfb4, 0x4208, 0xba45, 0x409b, 0x4385, 0xa8f3, 0xb213, 0x42cb, 0x3f92, 0x3ae4, 0xb2f3, 0x3366, 0xb236, 0x4399, 0x400d, 0x4128, 0x4419, 0x34de, 0xa079, 0x43d7, 0xbaf8, 0x4277, 0x0594, 0x42fd, 0x4413, 0x43fe, 0xbf78, 0xb29b, 0x41ee, 0x185b, 0x19f6, 0xba51, 0x4012, 0x44d8, 0x05fc, 0xa2ea, 0xb2f6, 0x415a, 0xb2a7, 0x310d, 0x19e3, 0x408f, 0x19c7, 0xa5d4, 0xb05a, 0x1485, 0x4162, 0x41f0, 0x4200, 0x402a, 0xbf49, 0x0fdf, 0x185a, 0x1e02, 0xb2ab, 0xba13, 0xbaca, 0x46ed, 0x1e91, 0x42f5, 0xbf77, 0x459b, 0x42ae, 0x40eb, 0x19c3, 0x4213, 0x2acb, 0x1080, 0x41c1, 0x42fb, 0xb211, 0xab6c, 0x309e, 0xba6e, 0xb03e, 0x43fa, 0x42c5, 0xa06c, 0x1777, 0x3986, 0xbf51, 0x40d2, 0x4691, 0x22f9, 0x43fe, 0x40c2, 0x4215, 0xb028, 0x43a4, 0x42ae, 0xb2bd, 0x429e, 0x433d, 0x42e7, 0x42f5, 0xa94c, 0xbfaa, 0x34b2, 0xba3d, 0x424d, 0x4291, 0x4120, 0x1bb9, 0x43c2, 0x1ff7, 0x40fa, 0x342f, 0x43fe, 0x42bf, 0x433e, 0xbfb5, 0x4076, 0x3aaa, 0x4158, 0xb2bf, 0x40d7, 0x4068, 0xbf6f, 0xb036, 0x40ed, 0xbaec, 0x18fe, 0x00f2, 0xbadd, 0x439b, 0xa23d, 0x42a5, 0x411a, 0x41d8, 0x16cf, 0xba28, 0xbfe2, 0xba20, 0x43cf, 0xb2ae, 0xb2bc, 0xb2f7, 0x448c, 0x43dc, 0x43ae, 0xb2a8, 0xa5a6, 0x4216, 0x4295, 0x344b, 0x1da4, 0x4273, 0x408f, 0xb21d, 0xa9a9, 0x43db, 0x42b0, 0xbf5a, 0x4640, 0xb20a, 0xa7bb, 0x417c, 0xb26b, 0xbfd7, 0x1e2c, 0x4250, 0xb053, 0x4071, 0x424f, 0xb0d4, 0x4373, 0x429a, 0xba12, 0x4078, 0xba4e, 0x2762, 0xa5a4, 0xb200, 0x44b3, 0x2257, 0x0339, 0x42b5, 0x1a8f, 0x45b2, 0x4033, 0xbaed, 0x1f10, 0x1b45, 0xbae3, 0x3bae, 0x40d9, 0x03ff, 0x4175, 0xbf45, 0x32f9, 0x4053, 0x3ad1, 0x27bf, 0x40c4, 0xbf60, 0x40d2, 0x4202, 0x41f2, 0xb2be, 0x4341, 0xb25c, 0x1b18, 0x40bd, 0xb089, 0xbae2, 0xbf5f, 0x4403, 0x4607, 0xa684, 0xa2f3, 0x40ae, 0xba3b, 0x4358, 0x422c, 0x4167, 0x40a7, 0x4215, 0x4440, 0xb219, 0xbfd0, 0x40d5, 0x4038, 0xb2ca, 0x42e9, 0x43af, 0x42cb, 0x413c, 0x4158, 0x44a3, 0x422f, 0xbadf, 0xb279, 0xb286, 0x1f1e, 0xbf09, 0x4319, 0xba13, 0xba31, 0xa86a, 0x4367, 0xbf00, 0xb0d8, 0x423f, 0x413a, 0x44d5, 0xbac4, 0xad13, 0x4093, 0x4149, 0x41fb, 0x422b, 0x1e34, 0x3f5e, 0xb246, 0x41b8, 0xbf70, 0x435d, 0xbfdd, 0x01b2, 0x420b, 0xbfc0, 0x464f, 0xb034, 0x1c2d, 0x1a10, 0xbfd5, 0xa298, 0x412d, 0x41a3, 0x42de, 0x42b2, 0xba1e, 0xb298, 0x4170, 0x1827, 0x4093, 0xb015, 0xba4a, 0x2cf0, 0xb2d9, 0xb067, 0x0c34, 0x35ed, 0x3b0a, 0x085a, 0x46ab, 0x158d, 0x3889, 0x42ab, 0x1c3a, 0xbfc6, 0x372b, 0x17bc, 0x3899, 0x4611, 0x1a8a, 0xbf5d, 0x44d8, 0xb042, 0x1ab4, 0xb0ac, 0x438a, 0x41af, 0xba06, 0xb25e, 0x164a, 0x4067, 0xb01c, 0x43eb, 0xbf2e, 0x1b94, 0xba3c, 0x1494, 0xbf77, 0x41da, 0x09e3, 0xbadc, 0xa22f, 0x3fcc, 0x1f3d, 0xba4a, 0x400a, 0x432e, 0xb289, 0x1b35, 0xb07e, 0x3cc2, 0x428c, 0x2025, 0xafee, 0x251a, 0xbfb3, 0x44cb, 0x45a8, 0xb294, 0x4328, 0xb08c, 0xb0b4, 0xba26, 0x4097, 0xaa3d, 0x40a6, 0x434b, 0x4560, 0x4660, 0x1f5f, 0x0839, 0x42f0, 0xb2b9, 0x465b, 0x41b9, 0x194f, 0x405a, 0x400d, 0xa719, 0x2c50, 0x1e4e, 0xb242, 0xba30, 0x42ae, 0xb24f, 0xbf43, 0x4681, 0x1a48, 0x1d26, 0xb0fd, 0x4004, 0x423e, 0xa9f0, 0xba40, 0xbaff, 0x43e1, 0xa99b, 0x4432, 0x41f4, 0xbf26, 0x0a13, 0x1821, 0x2ba4, 0x44b9, 0xba22, 0x322b, 0x1c9a, 0x432c, 0xba70, 0xb234, 0x3ca7, 0x4547, 0x4078, 0x4144, 0x40ec, 0xad9a, 0x04d0, 0x4327, 0x37e6, 0x09ea, 0x3f50, 0x1526, 0x407d, 0x1835, 0x4402, 0x1e38, 0x0896, 0xbf04, 0x1909, 0xb2db, 0xb297, 0xb2a2, 0x012d, 0x389d, 0x0b0f, 0x0c37, 0xb0af, 0x4460, 0x4057, 0x44cb, 0x41c7, 0xbaef, 0x429c, 0xaf1a, 0x46dd, 0x4305, 0xb00e, 0x4071, 0x1817, 0xbf34, 0x4349, 0x01c4, 0xb0f7, 0xb209, 0xbfc0, 0x4362, 0xa7c2, 0x43bc, 0x45cd, 0x2edb, 0xb28f, 0xbf53, 0x4102, 0x44cc, 0x431a, 0x1c7c, 0xb207, 0x445e, 0x432c, 0xb099, 0x1de3, 0x46b2, 0x2163, 0x429a, 0x4108, 0x1361, 0xb09d, 0xbac4, 0xb285, 0x0eaa, 0xbf65, 0x437f, 0x41b1, 0x4197, 0x1ff3, 0x2b09, 0x403b, 0x41b8, 0xb231, 0x42c8, 0x42cf, 0x43e6, 0x0f35, 0x1989, 0x1ff2, 0x41c6, 0xbfd0, 0x1e9b, 0x434a, 0x42e3, 0xa90c, 0x40a4, 0x4208, 0x4200, 0xbf8a, 0x1b32, 0x410f, 0x2ee4, 0x33ed, 0xb240, 0xb0f4, 0x40c3, 0x4250, 0x2be7, 0xb019, 0xb2dd, 0xbfd7, 0xb0d4, 0xba08, 0xb2fb, 0x41b7, 0x1308, 0x4267, 0x41c0, 0xbfd0, 0x434c, 0xb06c, 0x4540, 0xb204, 0x1a34, 0x4140, 0xbad7, 0x1cc9, 0x3e9e, 0x390a, 0x40fa, 0x404e, 0xbfaa, 0x08cb, 0x4261, 0x4583, 0x339d, 0x1e37, 0x42fc, 0x437e, 0x435b, 0x3be3, 0x1891, 0xb222, 0x4245, 0x4130, 0x08b8, 0x447a, 0xb226, 0x034a, 0x4392, 0x4379, 0x40ec, 0xa38a, 0xba18, 0x42d9, 0x02f5, 0x4337, 0x41da, 0xbfc6, 0x4491, 0x4071, 0xb215, 0x1b51, 0x41dd, 0x41cd, 0x4223, 0x00af, 0xb2a7, 0x42e5, 0xb020, 0x43e6, 0xb27b, 0x439a, 0x4213, 0xbac3, 0x426a, 0x3d19, 0xa5b8, 0xb0f3, 0xbfc0, 0xba34, 0xba5e, 0xbfc6, 0x42f6, 0x103e, 0x45c1, 0x4482, 0x42ab, 0x2d50, 0x1f4e, 0x411b, 0x4316, 0xb01d, 0x45ee, 0x1db2, 0xb0a5, 0xbf6e, 0x0cf1, 0x1ac8, 0xba74, 0x43ca, 0xba28, 0xa979, 0x18a9, 0xbf01, 0xa761, 0x41fb, 0xb23a, 0x4242, 0x4358, 0x4163, 0xaabf, 0x13cb, 0xbf08, 0x189a, 0xb257, 0x43ee, 0x4085, 0x46f2, 0xb281, 0x45e3, 0x1a1f, 0xa8aa, 0x45e8, 0xba58, 0xb24c, 0x1e6b, 0xb252, 0x41b6, 0x43f7, 0xbf0c, 0xbad8, 0xb276, 0x43b7, 0x4205, 0x283f, 0x4208, 0x2afa, 0x46f1, 0x387c, 0x4269, 0x433a, 0x201c, 0x4072, 0x45bb, 0xbf55, 0x27d4, 0xb0b8, 0x4049, 0x426f, 0x400d, 0x4031, 0x41da, 0x41f1, 0x42c2, 0x4336, 0x432c, 0x4187, 0x445d, 0x423d, 0xb0cc, 0x408d, 0x43d5, 0x401b, 0x4397, 0xb26d, 0xba34, 0x41e3, 0x4326, 0x4355, 0xb01e, 0xbad7, 0xbfdd, 0xba3c, 0xba46, 0xba70, 0xa0a6, 0x1e83, 0x41cd, 0x41f0, 0x4256, 0xbf00, 0xb2df, 0x41c4, 0x45d3, 0xb2c6, 0xa98f, 0xbfde, 0x3ce1, 0x4263, 0x40b3, 0x45b6, 0x445f, 0xbf0b, 0x1d50, 0xb238, 0x2de2, 0x2b7f, 0xb0b8, 0x1629, 0x411b, 0xaeab, 0x4306, 0x2c95, 0x02e2, 0x4208, 0xba37, 0x25ef, 0xb08d, 0x4352, 0x2571, 0x425e, 0xba43, 0xb21d, 0xbfd2, 0x412b, 0x4644, 0x260f, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd8508733, 0x37686f1d, 0x97ff025a, 0x7e27c2d9, 0xe771ba18, 0xaba51d16, 0x78d8fc78, 0x633a3766, 0xf31e6a39, 0xaa1cca97, 0x3f7fc03c, 0x49e22f13, 0xd6f3fcdf, 0x6bb27080, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0xffffcb9d, 0x00000000, 0xe1000000, 0xffffffff, 0xffffff1e, 0xffff9dcb, 0xe0000000, 0xdfcfffff, 0x49e23000, 0x00000000, 0x00000000, 0xaa1ccb83, 0xd6f3fcdf, 0xaa1cc3e3, 0x00000000, 0x800001d0 }, + Instructions = [0x43de, 0x4327, 0xb263, 0xa931, 0x4228, 0xb061, 0xbac6, 0x434d, 0xa868, 0xbf90, 0xba1c, 0x43bf, 0xbf70, 0x4229, 0x42b0, 0x40f0, 0x32dd, 0xba5d, 0xbf85, 0x43a4, 0xb2af, 0xb2b1, 0x4021, 0x2d77, 0xa666, 0x4176, 0x4089, 0x426e, 0x41de, 0x4345, 0x400b, 0x4056, 0x1bee, 0x19d7, 0xa0e7, 0x40b1, 0x2328, 0xbf06, 0xa385, 0x465d, 0xb277, 0x4664, 0x1a4b, 0xbad8, 0x0428, 0x0685, 0x4028, 0x300a, 0x4349, 0xba0f, 0xb2e3, 0x4662, 0x40d7, 0x435e, 0x0b39, 0x421f, 0x4670, 0xb2d6, 0x17aa, 0x4652, 0x4688, 0x1d08, 0x0544, 0x1fd9, 0xbfb3, 0x4166, 0x40ef, 0xbff0, 0xb0c9, 0x047f, 0x4063, 0x1011, 0x1f38, 0x4475, 0x427b, 0x4149, 0xba6c, 0x428f, 0x43da, 0xb2c2, 0x1f1a, 0x40d0, 0x4283, 0x1b46, 0x2aad, 0xb26d, 0x42b6, 0xa275, 0xba02, 0x40bf, 0x047c, 0xb2de, 0xbf60, 0x41a9, 0xbf28, 0x43ae, 0xba2b, 0x1dbc, 0x0735, 0x4234, 0x408b, 0xba25, 0x1086, 0x420d, 0xb074, 0xb290, 0x41e9, 0x410d, 0x4256, 0x42a2, 0x40bd, 0xabce, 0x4380, 0x4015, 0x4169, 0x405d, 0x3fbd, 0xb253, 0x433a, 0xbfd7, 0x41b2, 0x15be, 0x188a, 0x0fc1, 0x2952, 0x35a4, 0x40f1, 0x2a4c, 0xbfbd, 0xb2e4, 0xb23a, 0x1f28, 0x4630, 0x388c, 0x4147, 0x40f0, 0x4567, 0xbac7, 0xbfa0, 0x436c, 0x3e60, 0xb2d1, 0xb0e4, 0xb26a, 0x1830, 0xba33, 0xb26f, 0x2b61, 0x400b, 0x4346, 0xb069, 0x4039, 0x0aaa, 0xba75, 0x43d5, 0x417b, 0x42ec, 0xae57, 0xbf6e, 0x41cf, 0x3075, 0xb29b, 0x15ef, 0x1b99, 0x435d, 0xb215, 0x42fd, 0x4234, 0x2e88, 0xba7d, 0xbade, 0xba31, 0xbad9, 0xa2a3, 0x42f1, 0x1bb3, 0xbafa, 0xa940, 0x40a6, 0x3689, 0xb2ba, 0xbfaf, 0x4052, 0x1a92, 0xb2be, 0x462e, 0x41d1, 0x4145, 0x1619, 0x46c2, 0x3167, 0x409e, 0xba38, 0xb20f, 0xbacc, 0xb238, 0x4297, 0xbfa1, 0xbaf4, 0x38a8, 0xb293, 0xa847, 0x4138, 0x4175, 0x40fa, 0x259a, 0x4244, 0x4029, 0x3497, 0x15f3, 0xb07c, 0xbacb, 0x433f, 0x42e5, 0x3baf, 0x4029, 0x1aab, 0x20de, 0xa582, 0xbf87, 0xb2ff, 0x4098, 0xbace, 0x415c, 0x40cf, 0xb272, 0xbfdf, 0x40e0, 0x42dd, 0x4122, 0x41ba, 0xb2e2, 0x2632, 0x4153, 0xbf7d, 0x3131, 0x3b4d, 0x43ba, 0x41ab, 0x3b6c, 0xb2b3, 0x31e5, 0xba05, 0xb268, 0x1431, 0xba04, 0x4556, 0x43ab, 0x421c, 0xb2a4, 0xb23c, 0x410e, 0x42c9, 0x4063, 0x1da5, 0x402f, 0xb288, 0x0b26, 0x0570, 0xb03b, 0x4260, 0x4096, 0xbf8e, 0x10ad, 0x3f3a, 0x418e, 0x0b8b, 0x2f4f, 0x405a, 0xb00a, 0xb07e, 0x04ce, 0x41fa, 0x4271, 0x30c8, 0x40e5, 0x43f5, 0x3887, 0xa453, 0x4608, 0xbf71, 0x0220, 0x4540, 0x4188, 0xbff0, 0x434c, 0x3c0b, 0x41eb, 0x2d26, 0x4675, 0x4149, 0x4614, 0xb238, 0x308c, 0x4005, 0xbf5f, 0x4041, 0x0a0d, 0xb258, 0x43f4, 0x4316, 0x4170, 0xb2dc, 0xbfb6, 0x2875, 0xb052, 0x40dd, 0xbfb4, 0x4208, 0xba45, 0x409b, 0x4385, 0xa8f3, 0xb213, 0x42cb, 0x3f92, 0x3ae4, 0xb2f3, 0x3366, 0xb236, 0x4399, 0x400d, 0x4128, 0x4419, 0x34de, 0xa079, 0x43d7, 0xbaf8, 0x4277, 0x0594, 0x42fd, 0x4413, 0x43fe, 0xbf78, 0xb29b, 0x41ee, 0x185b, 0x19f6, 0xba51, 0x4012, 0x44d8, 0x05fc, 0xa2ea, 0xb2f6, 0x415a, 0xb2a7, 0x310d, 0x19e3, 0x408f, 0x19c7, 0xa5d4, 0xb05a, 0x1485, 0x4162, 0x41f0, 0x4200, 0x402a, 0xbf49, 0x0fdf, 0x185a, 0x1e02, 0xb2ab, 0xba13, 0xbaca, 0x46ed, 0x1e91, 0x42f5, 0xbf77, 0x459b, 0x42ae, 0x40eb, 0x19c3, 0x4213, 0x2acb, 0x1080, 0x41c1, 0x42fb, 0xb211, 0xab6c, 0x309e, 0xba6e, 0xb03e, 0x43fa, 0x42c5, 0xa06c, 0x1777, 0x3986, 0xbf51, 0x40d2, 0x4691, 0x22f9, 0x43fe, 0x40c2, 0x4215, 0xb028, 0x43a4, 0x42ae, 0xb2bd, 0x429e, 0x433d, 0x42e7, 0x42f5, 0xa94c, 0xbfaa, 0x34b2, 0xba3d, 0x424d, 0x4291, 0x4120, 0x1bb9, 0x43c2, 0x1ff7, 0x40fa, 0x342f, 0x43fe, 0x42bf, 0x433e, 0xbfb5, 0x4076, 0x3aaa, 0x4158, 0xb2bf, 0x40d7, 0x4068, 0xbf6f, 0xb036, 0x40ed, 0xbaec, 0x18fe, 0x00f2, 0xbadd, 0x439b, 0xa23d, 0x42a5, 0x411a, 0x41d8, 0x16cf, 0xba28, 0xbfe2, 0xba20, 0x43cf, 0xb2ae, 0xb2bc, 0xb2f7, 0x448c, 0x43dc, 0x43ae, 0xb2a8, 0xa5a6, 0x4216, 0x4295, 0x344b, 0x1da4, 0x4273, 0x408f, 0xb21d, 0xa9a9, 0x43db, 0x42b0, 0xbf5a, 0x4640, 0xb20a, 0xa7bb, 0x417c, 0xb26b, 0xbfd7, 0x1e2c, 0x4250, 0xb053, 0x4071, 0x424f, 0xb0d4, 0x4373, 0x429a, 0xba12, 0x4078, 0xba4e, 0x2762, 0xa5a4, 0xb200, 0x44b3, 0x2257, 0x0339, 0x42b5, 0x1a8f, 0x45b2, 0x4033, 0xbaed, 0x1f10, 0x1b45, 0xbae3, 0x3bae, 0x40d9, 0x03ff, 0x4175, 0xbf45, 0x32f9, 0x4053, 0x3ad1, 0x27bf, 0x40c4, 0xbf60, 0x40d2, 0x4202, 0x41f2, 0xb2be, 0x4341, 0xb25c, 0x1b18, 0x40bd, 0xb089, 0xbae2, 0xbf5f, 0x4403, 0x4607, 0xa684, 0xa2f3, 0x40ae, 0xba3b, 0x4358, 0x422c, 0x4167, 0x40a7, 0x4215, 0x4440, 0xb219, 0xbfd0, 0x40d5, 0x4038, 0xb2ca, 0x42e9, 0x43af, 0x42cb, 0x413c, 0x4158, 0x44a3, 0x422f, 0xbadf, 0xb279, 0xb286, 0x1f1e, 0xbf09, 0x4319, 0xba13, 0xba31, 0xa86a, 0x4367, 0xbf00, 0xb0d8, 0x423f, 0x413a, 0x44d5, 0xbac4, 0xad13, 0x4093, 0x4149, 0x41fb, 0x422b, 0x1e34, 0x3f5e, 0xb246, 0x41b8, 0xbf70, 0x435d, 0xbfdd, 0x01b2, 0x420b, 0xbfc0, 0x464f, 0xb034, 0x1c2d, 0x1a10, 0xbfd5, 0xa298, 0x412d, 0x41a3, 0x42de, 0x42b2, 0xba1e, 0xb298, 0x4170, 0x1827, 0x4093, 0xb015, 0xba4a, 0x2cf0, 0xb2d9, 0xb067, 0x0c34, 0x35ed, 0x3b0a, 0x085a, 0x46ab, 0x158d, 0x3889, 0x42ab, 0x1c3a, 0xbfc6, 0x372b, 0x17bc, 0x3899, 0x4611, 0x1a8a, 0xbf5d, 0x44d8, 0xb042, 0x1ab4, 0xb0ac, 0x438a, 0x41af, 0xba06, 0xb25e, 0x164a, 0x4067, 0xb01c, 0x43eb, 0xbf2e, 0x1b94, 0xba3c, 0x1494, 0xbf77, 0x41da, 0x09e3, 0xbadc, 0xa22f, 0x3fcc, 0x1f3d, 0xba4a, 0x400a, 0x432e, 0xb289, 0x1b35, 0xb07e, 0x3cc2, 0x428c, 0x2025, 0xafee, 0x251a, 0xbfb3, 0x44cb, 0x45a8, 0xb294, 0x4328, 0xb08c, 0xb0b4, 0xba26, 0x4097, 0xaa3d, 0x40a6, 0x434b, 0x4560, 0x4660, 0x1f5f, 0x0839, 0x42f0, 0xb2b9, 0x465b, 0x41b9, 0x194f, 0x405a, 0x400d, 0xa719, 0x2c50, 0x1e4e, 0xb242, 0xba30, 0x42ae, 0xb24f, 0xbf43, 0x4681, 0x1a48, 0x1d26, 0xb0fd, 0x4004, 0x423e, 0xa9f0, 0xba40, 0xbaff, 0x43e1, 0xa99b, 0x4432, 0x41f4, 0xbf26, 0x0a13, 0x1821, 0x2ba4, 0x44b9, 0xba22, 0x322b, 0x1c9a, 0x432c, 0xba70, 0xb234, 0x3ca7, 0x4547, 0x4078, 0x4144, 0x40ec, 0xad9a, 0x04d0, 0x4327, 0x37e6, 0x09ea, 0x3f50, 0x1526, 0x407d, 0x1835, 0x4402, 0x1e38, 0x0896, 0xbf04, 0x1909, 0xb2db, 0xb297, 0xb2a2, 0x012d, 0x389d, 0x0b0f, 0x0c37, 0xb0af, 0x4460, 0x4057, 0x44cb, 0x41c7, 0xbaef, 0x429c, 0xaf1a, 0x46dd, 0x4305, 0xb00e, 0x4071, 0x1817, 0xbf34, 0x4349, 0x01c4, 0xb0f7, 0xb209, 0xbfc0, 0x4362, 0xa7c2, 0x43bc, 0x45cd, 0x2edb, 0xb28f, 0xbf53, 0x4102, 0x44cc, 0x431a, 0x1c7c, 0xb207, 0x445e, 0x432c, 0xb099, 0x1de3, 0x46b2, 0x2163, 0x429a, 0x4108, 0x1361, 0xb09d, 0xbac4, 0xb285, 0x0eaa, 0xbf65, 0x437f, 0x41b1, 0x4197, 0x1ff3, 0x2b09, 0x403b, 0x41b8, 0xb231, 0x42c8, 0x42cf, 0x43e6, 0x0f35, 0x1989, 0x1ff2, 0x41c6, 0xbfd0, 0x1e9b, 0x434a, 0x42e3, 0xa90c, 0x40a4, 0x4208, 0x4200, 0xbf8a, 0x1b32, 0x410f, 0x2ee4, 0x33ed, 0xb240, 0xb0f4, 0x40c3, 0x4250, 0x2be7, 0xb019, 0xb2dd, 0xbfd7, 0xb0d4, 0xba08, 0xb2fb, 0x41b7, 0x1308, 0x4267, 0x41c0, 0xbfd0, 0x434c, 0xb06c, 0x4540, 0xb204, 0x1a34, 0x4140, 0xbad7, 0x1cc9, 0x3e9e, 0x390a, 0x40fa, 0x404e, 0xbfaa, 0x08cb, 0x4261, 0x4583, 0x339d, 0x1e37, 0x42fc, 0x437e, 0x435b, 0x3be3, 0x1891, 0xb222, 0x4245, 0x4130, 0x08b8, 0x447a, 0xb226, 0x034a, 0x4392, 0x4379, 0x40ec, 0xa38a, 0xba18, 0x42d9, 0x02f5, 0x4337, 0x41da, 0xbfc6, 0x4491, 0x4071, 0xb215, 0x1b51, 0x41dd, 0x41cd, 0x4223, 0x00af, 0xb2a7, 0x42e5, 0xb020, 0x43e6, 0xb27b, 0x439a, 0x4213, 0xbac3, 0x426a, 0x3d19, 0xa5b8, 0xb0f3, 0xbfc0, 0xba34, 0xba5e, 0xbfc6, 0x42f6, 0x103e, 0x45c1, 0x4482, 0x42ab, 0x2d50, 0x1f4e, 0x411b, 0x4316, 0xb01d, 0x45ee, 0x1db2, 0xb0a5, 0xbf6e, 0x0cf1, 0x1ac8, 0xba74, 0x43ca, 0xba28, 0xa979, 0x18a9, 0xbf01, 0xa761, 0x41fb, 0xb23a, 0x4242, 0x4358, 0x4163, 0xaabf, 0x13cb, 0xbf08, 0x189a, 0xb257, 0x43ee, 0x4085, 0x46f2, 0xb281, 0x45e3, 0x1a1f, 0xa8aa, 0x45e8, 0xba58, 0xb24c, 0x1e6b, 0xb252, 0x41b6, 0x43f7, 0xbf0c, 0xbad8, 0xb276, 0x43b7, 0x4205, 0x283f, 0x4208, 0x2afa, 0x46f1, 0x387c, 0x4269, 0x433a, 0x201c, 0x4072, 0x45bb, 0xbf55, 0x27d4, 0xb0b8, 0x4049, 0x426f, 0x400d, 0x4031, 0x41da, 0x41f1, 0x42c2, 0x4336, 0x432c, 0x4187, 0x445d, 0x423d, 0xb0cc, 0x408d, 0x43d5, 0x401b, 0x4397, 0xb26d, 0xba34, 0x41e3, 0x4326, 0x4355, 0xb01e, 0xbad7, 0xbfdd, 0xba3c, 0xba46, 0xba70, 0xa0a6, 0x1e83, 0x41cd, 0x41f0, 0x4256, 0xbf00, 0xb2df, 0x41c4, 0x45d3, 0xb2c6, 0xa98f, 0xbfde, 0x3ce1, 0x4263, 0x40b3, 0x45b6, 0x445f, 0xbf0b, 0x1d50, 0xb238, 0x2de2, 0x2b7f, 0xb0b8, 0x1629, 0x411b, 0xaeab, 0x4306, 0x2c95, 0x02e2, 0x4208, 0xba37, 0x25ef, 0xb08d, 0x4352, 0x2571, 0x425e, 0xba43, 0xb21d, 0xbfd2, 0x412b, 0x4644, 0x260f, 0x4770, 0xe7fe + ], + StartRegs = [0xd8508733, 0x37686f1d, 0x97ff025a, 0x7e27c2d9, 0xe771ba18, 0xaba51d16, 0x78d8fc78, 0x633a3766, 0xf31e6a39, 0xaa1cca97, 0x3f7fc03c, 0x49e22f13, 0xd6f3fcdf, 0x6bb27080, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0xffffcb9d, 0x00000000, 0xe1000000, 0xffffffff, 0xffffff1e, 0xffff9dcb, 0xe0000000, 0xdfcfffff, 0x49e23000, 0x00000000, 0x00000000, 0xaa1ccb83, 0xd6f3fcdf, 0xaa1cc3e3, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x46f3, 0xbfa0, 0xba72, 0x422f, 0x4194, 0x403f, 0x418a, 0x1b2f, 0x1a10, 0xb282, 0xb004, 0xad90, 0xa257, 0x43cc, 0x1e2d, 0x44a9, 0x4093, 0xba76, 0x4158, 0xbfe0, 0x2347, 0x434f, 0x0059, 0x45eb, 0xbf72, 0x40e7, 0xb086, 0x1feb, 0x4339, 0x40e6, 0x42bd, 0x409b, 0x4000, 0x4420, 0xba49, 0x4276, 0xb210, 0x2b38, 0xba5c, 0x1a1e, 0xab1f, 0x2962, 0x20bd, 0x42ae, 0xb0ab, 0x2234, 0x3607, 0x0b88, 0x29e7, 0x4378, 0xb06b, 0x40ec, 0xbf28, 0x43f2, 0x4135, 0xb00e, 0x1c37, 0x4025, 0x3570, 0xbf80, 0x42db, 0x249a, 0x4328, 0x4211, 0x41c7, 0x4239, 0x2924, 0xa5ef, 0x0387, 0x1a9f, 0x4352, 0x1f8f, 0xb031, 0x41bd, 0x1cdd, 0xb2ed, 0x4002, 0x4182, 0x07c7, 0xbf77, 0x406f, 0x431f, 0x42d9, 0x3e9c, 0xbf60, 0x4377, 0x4277, 0x4314, 0xb001, 0xbf6b, 0x4070, 0x41f7, 0xbadf, 0x0139, 0xb246, 0xba0a, 0x439e, 0x433b, 0x18e3, 0x320f, 0x0f77, 0x45a2, 0x1d6b, 0x1a0b, 0x42eb, 0xbf01, 0x1a8f, 0x4286, 0xa09a, 0xbae4, 0x431c, 0x4307, 0x3e46, 0x430d, 0x42ce, 0x433f, 0x109e, 0xa573, 0xba79, 0x1ef6, 0x41cf, 0x29c8, 0x0dca, 0x0e56, 0xbae7, 0x3d0d, 0x4374, 0x1e44, 0x0b81, 0xba51, 0x4087, 0x4425, 0x4283, 0x420e, 0xbf94, 0x409f, 0x42be, 0x4353, 0x436d, 0x4291, 0xbfc4, 0x4365, 0x40b3, 0x418f, 0xbf3e, 0x1e3d, 0x46ba, 0x1f8c, 0x42ea, 0x1c25, 0x4135, 0xb21a, 0xb29b, 0x16e9, 0x401d, 0x4653, 0xa607, 0x43e2, 0x0ec5, 0x4201, 0xbae0, 0xba26, 0xa713, 0x43c5, 0x23cf, 0x10a8, 0xb08e, 0x4232, 0x43cb, 0x43d9, 0x0774, 0xb03b, 0xbf62, 0x4205, 0xbfa0, 0x4661, 0x403b, 0xbf17, 0x40bb, 0xbaee, 0x42a1, 0x42b3, 0x463e, 0xafdf, 0x3543, 0x3528, 0x1eea, 0x4038, 0x1dd7, 0x38ba, 0x4092, 0x41b0, 0xba32, 0x4416, 0x44fd, 0xbfc8, 0x439f, 0x4319, 0xa47d, 0xb275, 0xb244, 0xbf95, 0x1453, 0xb04f, 0x1c40, 0x3477, 0xbf76, 0xaeb7, 0x0406, 0xbad8, 0xbf5e, 0x1a0d, 0xb2d6, 0xba5e, 0x437b, 0x0b3c, 0x1d54, 0x3c58, 0x404e, 0x427b, 0x25f8, 0xbfa0, 0x4053, 0x127f, 0x42e6, 0x438b, 0xbf23, 0xb2d9, 0x4389, 0x4350, 0xade8, 0x439e, 0x4485, 0x3ec6, 0x19a8, 0x0fe2, 0x42fc, 0x4262, 0xada2, 0x40e6, 0xb0e5, 0x4251, 0xb221, 0x1f4c, 0x127c, 0xbf56, 0x25d6, 0x20f9, 0x4329, 0x4123, 0x413d, 0xb2df, 0xb23b, 0x4653, 0xb2e4, 0xb0a9, 0x42ea, 0xb215, 0x4130, 0x4249, 0x4391, 0xb28f, 0x4127, 0x420e, 0x16ab, 0xa580, 0xb26c, 0x29b2, 0xa29e, 0xb09c, 0xb20f, 0xbfd2, 0x42e1, 0x42cf, 0x0a23, 0x4049, 0x433c, 0x45e0, 0xbf46, 0x407f, 0x408f, 0x4165, 0x4148, 0x19e5, 0x4594, 0xb0f1, 0x438d, 0x4000, 0x42b7, 0x4136, 0x31af, 0x40ea, 0xb0b9, 0x4323, 0x0710, 0xbfa2, 0x38a1, 0x40d2, 0x41a9, 0x4149, 0x0c49, 0x4168, 0x3f89, 0x433c, 0xb2fd, 0x42e3, 0x4353, 0x40a7, 0x43e8, 0xba3a, 0xb266, 0x4397, 0x0a3a, 0x40ab, 0x1fc5, 0x1f5f, 0x4117, 0x4573, 0xb01a, 0x418c, 0x44a9, 0xaa7b, 0x13a2, 0xbfe4, 0xb213, 0x41c3, 0xb28f, 0x2ff1, 0x2600, 0x2452, 0x438c, 0xa2cc, 0x1b55, 0x42ad, 0xb2fc, 0x1067, 0xb2b8, 0x41f0, 0x4625, 0x0ac8, 0xb25e, 0x441f, 0x40a8, 0x43d6, 0x18c7, 0xbadb, 0xb292, 0x4453, 0xbf8b, 0x19d8, 0x1f32, 0x18f9, 0x46b5, 0xb22a, 0x088b, 0xba5a, 0xba7f, 0xb068, 0x03a6, 0x444b, 0xb21c, 0x3014, 0x41cb, 0xbf26, 0x4015, 0xb2c5, 0x1a29, 0x1a7f, 0x0b53, 0x4219, 0x3afd, 0xba1c, 0x0def, 0x3b5b, 0x423c, 0x4003, 0x42a3, 0xb0f8, 0x42ce, 0x4357, 0x41ed, 0x4070, 0x42c4, 0x1c75, 0xa517, 0xb0ab, 0xba3f, 0x4341, 0x2c35, 0x1bd9, 0xbf76, 0x07be, 0x4173, 0x4145, 0xb0a5, 0x11a1, 0x4068, 0x43d8, 0x42e2, 0x40f6, 0xbafd, 0x1fc1, 0x407e, 0xba38, 0x4109, 0xb016, 0x40a6, 0x43d5, 0x4274, 0xbf1e, 0x2433, 0x289d, 0x43ca, 0xb25d, 0xba5d, 0x0a85, 0x43d7, 0x3e24, 0x0e1d, 0x1723, 0x444a, 0x18e3, 0xb2ba, 0xba2c, 0xba55, 0x075d, 0x43e8, 0x0247, 0x40fc, 0x1e94, 0xbfa6, 0x1c10, 0x3a69, 0x4023, 0x4581, 0x1925, 0xb0d7, 0x1f3f, 0xb0a9, 0x45e6, 0x2ec7, 0x41c3, 0x046b, 0x1f29, 0xbf4e, 0xb289, 0xb250, 0x425b, 0x40df, 0xb2b8, 0xab56, 0x1cb4, 0xbac1, 0x4271, 0xbf64, 0x4373, 0x3c6a, 0xbf5a, 0x43bb, 0x429f, 0x1f9e, 0xbac2, 0x404a, 0x0103, 0x4213, 0x46f1, 0x287a, 0x4088, 0xbacf, 0x4331, 0xba4b, 0x32fc, 0x43bb, 0xb02b, 0x4176, 0xa3dc, 0x44e1, 0x1f3a, 0xbfce, 0x3dc6, 0x4227, 0xba11, 0x4148, 0x09b4, 0xbfd3, 0xb245, 0x4394, 0x40ce, 0x07e5, 0x1956, 0x0db9, 0xb238, 0x40f2, 0x412b, 0x1af5, 0xa1f7, 0x466b, 0xba34, 0x4038, 0xa130, 0x404e, 0x19ca, 0x3a04, 0x1d1c, 0x4077, 0x439c, 0xbadb, 0x1f1d, 0x36ff, 0xbf4e, 0x42d1, 0xba5d, 0x4020, 0x0dd2, 0x42a9, 0x1943, 0x405d, 0xba7f, 0x41a1, 0x447d, 0x4181, 0x0963, 0xb038, 0x436e, 0x412f, 0x404f, 0xae5c, 0x41e7, 0x40e5, 0x434b, 0x20c5, 0x1eb2, 0x4010, 0x3a97, 0xbfb1, 0xb047, 0x0ba6, 0x3abe, 0xb252, 0x4104, 0x4346, 0xb206, 0xad63, 0xbf46, 0x4144, 0x41e0, 0x422b, 0xb0ed, 0x4389, 0x423b, 0xba65, 0xbaf3, 0xaaed, 0xb219, 0xba43, 0x243c, 0x197c, 0x421c, 0x18fd, 0x4313, 0x1cae, 0x140a, 0x42a0, 0xbf4e, 0x4015, 0x18f5, 0x42c6, 0x4115, 0x42c0, 0xba0a, 0x437a, 0xbf5f, 0xb0ae, 0x1d9d, 0x4085, 0x4350, 0x1a00, 0x369b, 0xb22b, 0x24f9, 0x4253, 0x360c, 0x41cd, 0x0fb1, 0xb0a6, 0x025d, 0x18c4, 0xb251, 0x40c6, 0x4349, 0xb2cc, 0xa0be, 0x4377, 0x43da, 0x16b2, 0x413d, 0xbf80, 0x44ac, 0xbfdb, 0xb266, 0x0d95, 0x420e, 0xb083, 0x1b6c, 0x4305, 0xbae4, 0xb28f, 0xb236, 0xba09, 0x2da7, 0xb252, 0xba09, 0xa115, 0x447d, 0xb272, 0xbf75, 0x40f6, 0x0b5a, 0xb086, 0x466b, 0x4632, 0xbf0a, 0x43e0, 0x1f0f, 0xb2e7, 0xba3d, 0x36d4, 0x07bc, 0x4172, 0x3697, 0xb221, 0x0e04, 0x28f3, 0x42e6, 0x198a, 0x4089, 0xbf90, 0x3694, 0x2837, 0x4082, 0x4263, 0x4142, 0x4074, 0x2fc6, 0x1e01, 0xab23, 0x0cb5, 0x4033, 0x0067, 0xbfca, 0x111a, 0x4261, 0x29e3, 0x462d, 0xb299, 0x4072, 0xbfe0, 0x4342, 0xbf3d, 0x0830, 0x1afe, 0x419c, 0x1ce9, 0x42e6, 0x40d5, 0x41cc, 0xb072, 0x3bd5, 0xbfdf, 0x1807, 0x44c2, 0xba38, 0x4693, 0x41a2, 0x4072, 0x42e7, 0xbaef, 0x01b3, 0x25c5, 0x4006, 0x096e, 0x4115, 0x0622, 0x43ac, 0xb00c, 0x1f03, 0xbf48, 0x41c4, 0x43dc, 0x415a, 0x20b3, 0x4064, 0xba24, 0x40f8, 0xb23f, 0x0b4b, 0x42ec, 0xb014, 0x4119, 0xbf78, 0x4393, 0x3aa5, 0x410a, 0x0b23, 0x442f, 0xba39, 0x4298, 0xba42, 0x42c5, 0xa365, 0xbfba, 0x40a8, 0x17e3, 0x4057, 0x417c, 0xaa59, 0xafc2, 0x33ad, 0xa425, 0xbfb9, 0x2e0c, 0x0192, 0xaa5d, 0x0448, 0x421e, 0x4357, 0xb2f0, 0x2a8b, 0x378b, 0xb219, 0x416c, 0xbf8e, 0x43ff, 0x4348, 0x4262, 0xba30, 0x202d, 0xa784, 0xadcc, 0xba34, 0x121b, 0x41da, 0xbfd1, 0xb293, 0x435f, 0x31bc, 0xb263, 0x40a0, 0xbf1c, 0x46cd, 0x22d6, 0x3198, 0x250f, 0x2fc5, 0x4100, 0x4090, 0xbfd2, 0xb207, 0xba6f, 0x436b, 0xba5f, 0x4618, 0xb2d4, 0x1123, 0xba54, 0x33e5, 0x43eb, 0x1e8d, 0xb21b, 0xaf42, 0xab0f, 0xb2cb, 0x4101, 0x4026, 0xb2b9, 0xaaf3, 0x1f93, 0x4208, 0x1d01, 0x400d, 0xbf99, 0x3677, 0x182f, 0x3f84, 0x363f, 0x185c, 0xb2d0, 0x0c54, 0x43dd, 0xa014, 0xb23f, 0x41f8, 0xba0b, 0xba39, 0x255a, 0x4313, 0x4449, 0x1934, 0x4317, 0x4102, 0x156d, 0x01fd, 0x41ec, 0x41e1, 0xb023, 0xbf62, 0x41b9, 0x3f1c, 0x3b9c, 0x1930, 0x1e90, 0x429a, 0x1a6c, 0x1dda, 0x1834, 0x440c, 0xb284, 0xb225, 0xae4e, 0x4080, 0xbfca, 0x1cfd, 0x264f, 0x4298, 0x185e, 0x1dc1, 0xbf17, 0x244c, 0x4546, 0x1b6d, 0xbaf7, 0xb286, 0x2054, 0x3c0d, 0x3570, 0x25a7, 0xb261, 0xb21e, 0xa108, 0x13c0, 0x4274, 0x4310, 0xbf42, 0x4212, 0x40c5, 0x438f, 0x0e16, 0x424f, 0xbf90, 0x438e, 0x37c7, 0xbf70, 0x1c3a, 0x437c, 0x06c9, 0x3d63, 0xba3c, 0x1fc0, 0xb223, 0xb245, 0x4003, 0x43aa, 0x0028, 0xba31, 0x038a, 0xba46, 0x1c2d, 0x4435, 0x0726, 0x41d5, 0xbfa6, 0xb2a3, 0xad24, 0x4662, 0x1fdc, 0xb2f7, 0x4012, 0x37dc, 0x418c, 0x1bf3, 0x42b6, 0x44ca, 0x03ed, 0xba5a, 0x431e, 0xbfdf, 0x4315, 0x437b, 0x42ea, 0xbad9, 0xad16, 0xb24d, 0x0b0b, 0xb24e, 0xbfc0, 0xb05b, 0x435f, 0xb255, 0x424e, 0xbae9, 0x4148, 0xb05f, 0xb243, 0x4182, 0x0e5a, 0xb205, 0xbad7, 0x2fd5, 0xbf21, 0x40ac, 0xb2a3, 0xba5c, 0xb2e0, 0x4061, 0x402e, 0xb0a7, 0x3380, 0x42b8, 0xa8cf, 0x2a06, 0x42ab, 0xb296, 0x42c7, 0x41fd, 0xb25b, 0x4333, 0x419f, 0x437b, 0x2ab1, 0xbaf1, 0x17dd, 0x43a2, 0x36ea, 0x4153, 0xbf91, 0x4023, 0x410e, 0xb2b9, 0xb0e9, 0xace2, 0x00d9, 0x2367, 0xb2f9, 0x41df, 0x2087, 0x3147, 0x41f5, 0xb086, 0x40e6, 0x43ef, 0xb21a, 0x41fa, 0xbf6b, 0x311c, 0xb297, 0xba54, 0xa3cd, 0x4189, 0xb252, 0x4186, 0x43d4, 0x4312, 0x4096, 0xb20e, 0x45f6, 0xba7c, 0x3889, 0x4085, 0x4067, 0x4254, 0x1829, 0x414f, 0x4447, 0x2373, 0x4184, 0xb24e, 0x408b, 0x404b, 0xa39a, 0xa843, 0x4007, 0x401e, 0xbf68, 0xba09, 0xb0f7, 0x46a1, 0xb068, 0x427a, 0x42c9, 0x43f4, 0x41e2, 0x40fa, 0xbac6, 0x4377, 0xbf70, 0x3cb1, 0x41b3, 0x43a8, 0xbf74, 0x1f66, 0xb25c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x320c594d, 0xb070758d, 0x7506c560, 0x186ad0f5, 0x6d69bf75, 0xb7cad7d5, 0x7a31742f, 0xa62baad6, 0x3f33b7a4, 0x3237b374, 0x612a830d, 0xd1ce3d3c, 0xdf52c51d, 0x8c1be78a, 0x00000000, 0xa00001f0 }, - FinalRegs = new uint[] { 0xdf52c8e9, 0xfffffffe, 0x0077f7e0, 0x00003048, 0xffffe53e, 0x00000000, 0xffffe539, 0xd3cd7808, 0x3f33b7a4, 0xffffff9b, 0x407d482a, 0x00000000, 0xdf52c51d, 0xdf52c7a1, 0x00000000, 0x800001d0 }, + Instructions = [0x46f3, 0xbfa0, 0xba72, 0x422f, 0x4194, 0x403f, 0x418a, 0x1b2f, 0x1a10, 0xb282, 0xb004, 0xad90, 0xa257, 0x43cc, 0x1e2d, 0x44a9, 0x4093, 0xba76, 0x4158, 0xbfe0, 0x2347, 0x434f, 0x0059, 0x45eb, 0xbf72, 0x40e7, 0xb086, 0x1feb, 0x4339, 0x40e6, 0x42bd, 0x409b, 0x4000, 0x4420, 0xba49, 0x4276, 0xb210, 0x2b38, 0xba5c, 0x1a1e, 0xab1f, 0x2962, 0x20bd, 0x42ae, 0xb0ab, 0x2234, 0x3607, 0x0b88, 0x29e7, 0x4378, 0xb06b, 0x40ec, 0xbf28, 0x43f2, 0x4135, 0xb00e, 0x1c37, 0x4025, 0x3570, 0xbf80, 0x42db, 0x249a, 0x4328, 0x4211, 0x41c7, 0x4239, 0x2924, 0xa5ef, 0x0387, 0x1a9f, 0x4352, 0x1f8f, 0xb031, 0x41bd, 0x1cdd, 0xb2ed, 0x4002, 0x4182, 0x07c7, 0xbf77, 0x406f, 0x431f, 0x42d9, 0x3e9c, 0xbf60, 0x4377, 0x4277, 0x4314, 0xb001, 0xbf6b, 0x4070, 0x41f7, 0xbadf, 0x0139, 0xb246, 0xba0a, 0x439e, 0x433b, 0x18e3, 0x320f, 0x0f77, 0x45a2, 0x1d6b, 0x1a0b, 0x42eb, 0xbf01, 0x1a8f, 0x4286, 0xa09a, 0xbae4, 0x431c, 0x4307, 0x3e46, 0x430d, 0x42ce, 0x433f, 0x109e, 0xa573, 0xba79, 0x1ef6, 0x41cf, 0x29c8, 0x0dca, 0x0e56, 0xbae7, 0x3d0d, 0x4374, 0x1e44, 0x0b81, 0xba51, 0x4087, 0x4425, 0x4283, 0x420e, 0xbf94, 0x409f, 0x42be, 0x4353, 0x436d, 0x4291, 0xbfc4, 0x4365, 0x40b3, 0x418f, 0xbf3e, 0x1e3d, 0x46ba, 0x1f8c, 0x42ea, 0x1c25, 0x4135, 0xb21a, 0xb29b, 0x16e9, 0x401d, 0x4653, 0xa607, 0x43e2, 0x0ec5, 0x4201, 0xbae0, 0xba26, 0xa713, 0x43c5, 0x23cf, 0x10a8, 0xb08e, 0x4232, 0x43cb, 0x43d9, 0x0774, 0xb03b, 0xbf62, 0x4205, 0xbfa0, 0x4661, 0x403b, 0xbf17, 0x40bb, 0xbaee, 0x42a1, 0x42b3, 0x463e, 0xafdf, 0x3543, 0x3528, 0x1eea, 0x4038, 0x1dd7, 0x38ba, 0x4092, 0x41b0, 0xba32, 0x4416, 0x44fd, 0xbfc8, 0x439f, 0x4319, 0xa47d, 0xb275, 0xb244, 0xbf95, 0x1453, 0xb04f, 0x1c40, 0x3477, 0xbf76, 0xaeb7, 0x0406, 0xbad8, 0xbf5e, 0x1a0d, 0xb2d6, 0xba5e, 0x437b, 0x0b3c, 0x1d54, 0x3c58, 0x404e, 0x427b, 0x25f8, 0xbfa0, 0x4053, 0x127f, 0x42e6, 0x438b, 0xbf23, 0xb2d9, 0x4389, 0x4350, 0xade8, 0x439e, 0x4485, 0x3ec6, 0x19a8, 0x0fe2, 0x42fc, 0x4262, 0xada2, 0x40e6, 0xb0e5, 0x4251, 0xb221, 0x1f4c, 0x127c, 0xbf56, 0x25d6, 0x20f9, 0x4329, 0x4123, 0x413d, 0xb2df, 0xb23b, 0x4653, 0xb2e4, 0xb0a9, 0x42ea, 0xb215, 0x4130, 0x4249, 0x4391, 0xb28f, 0x4127, 0x420e, 0x16ab, 0xa580, 0xb26c, 0x29b2, 0xa29e, 0xb09c, 0xb20f, 0xbfd2, 0x42e1, 0x42cf, 0x0a23, 0x4049, 0x433c, 0x45e0, 0xbf46, 0x407f, 0x408f, 0x4165, 0x4148, 0x19e5, 0x4594, 0xb0f1, 0x438d, 0x4000, 0x42b7, 0x4136, 0x31af, 0x40ea, 0xb0b9, 0x4323, 0x0710, 0xbfa2, 0x38a1, 0x40d2, 0x41a9, 0x4149, 0x0c49, 0x4168, 0x3f89, 0x433c, 0xb2fd, 0x42e3, 0x4353, 0x40a7, 0x43e8, 0xba3a, 0xb266, 0x4397, 0x0a3a, 0x40ab, 0x1fc5, 0x1f5f, 0x4117, 0x4573, 0xb01a, 0x418c, 0x44a9, 0xaa7b, 0x13a2, 0xbfe4, 0xb213, 0x41c3, 0xb28f, 0x2ff1, 0x2600, 0x2452, 0x438c, 0xa2cc, 0x1b55, 0x42ad, 0xb2fc, 0x1067, 0xb2b8, 0x41f0, 0x4625, 0x0ac8, 0xb25e, 0x441f, 0x40a8, 0x43d6, 0x18c7, 0xbadb, 0xb292, 0x4453, 0xbf8b, 0x19d8, 0x1f32, 0x18f9, 0x46b5, 0xb22a, 0x088b, 0xba5a, 0xba7f, 0xb068, 0x03a6, 0x444b, 0xb21c, 0x3014, 0x41cb, 0xbf26, 0x4015, 0xb2c5, 0x1a29, 0x1a7f, 0x0b53, 0x4219, 0x3afd, 0xba1c, 0x0def, 0x3b5b, 0x423c, 0x4003, 0x42a3, 0xb0f8, 0x42ce, 0x4357, 0x41ed, 0x4070, 0x42c4, 0x1c75, 0xa517, 0xb0ab, 0xba3f, 0x4341, 0x2c35, 0x1bd9, 0xbf76, 0x07be, 0x4173, 0x4145, 0xb0a5, 0x11a1, 0x4068, 0x43d8, 0x42e2, 0x40f6, 0xbafd, 0x1fc1, 0x407e, 0xba38, 0x4109, 0xb016, 0x40a6, 0x43d5, 0x4274, 0xbf1e, 0x2433, 0x289d, 0x43ca, 0xb25d, 0xba5d, 0x0a85, 0x43d7, 0x3e24, 0x0e1d, 0x1723, 0x444a, 0x18e3, 0xb2ba, 0xba2c, 0xba55, 0x075d, 0x43e8, 0x0247, 0x40fc, 0x1e94, 0xbfa6, 0x1c10, 0x3a69, 0x4023, 0x4581, 0x1925, 0xb0d7, 0x1f3f, 0xb0a9, 0x45e6, 0x2ec7, 0x41c3, 0x046b, 0x1f29, 0xbf4e, 0xb289, 0xb250, 0x425b, 0x40df, 0xb2b8, 0xab56, 0x1cb4, 0xbac1, 0x4271, 0xbf64, 0x4373, 0x3c6a, 0xbf5a, 0x43bb, 0x429f, 0x1f9e, 0xbac2, 0x404a, 0x0103, 0x4213, 0x46f1, 0x287a, 0x4088, 0xbacf, 0x4331, 0xba4b, 0x32fc, 0x43bb, 0xb02b, 0x4176, 0xa3dc, 0x44e1, 0x1f3a, 0xbfce, 0x3dc6, 0x4227, 0xba11, 0x4148, 0x09b4, 0xbfd3, 0xb245, 0x4394, 0x40ce, 0x07e5, 0x1956, 0x0db9, 0xb238, 0x40f2, 0x412b, 0x1af5, 0xa1f7, 0x466b, 0xba34, 0x4038, 0xa130, 0x404e, 0x19ca, 0x3a04, 0x1d1c, 0x4077, 0x439c, 0xbadb, 0x1f1d, 0x36ff, 0xbf4e, 0x42d1, 0xba5d, 0x4020, 0x0dd2, 0x42a9, 0x1943, 0x405d, 0xba7f, 0x41a1, 0x447d, 0x4181, 0x0963, 0xb038, 0x436e, 0x412f, 0x404f, 0xae5c, 0x41e7, 0x40e5, 0x434b, 0x20c5, 0x1eb2, 0x4010, 0x3a97, 0xbfb1, 0xb047, 0x0ba6, 0x3abe, 0xb252, 0x4104, 0x4346, 0xb206, 0xad63, 0xbf46, 0x4144, 0x41e0, 0x422b, 0xb0ed, 0x4389, 0x423b, 0xba65, 0xbaf3, 0xaaed, 0xb219, 0xba43, 0x243c, 0x197c, 0x421c, 0x18fd, 0x4313, 0x1cae, 0x140a, 0x42a0, 0xbf4e, 0x4015, 0x18f5, 0x42c6, 0x4115, 0x42c0, 0xba0a, 0x437a, 0xbf5f, 0xb0ae, 0x1d9d, 0x4085, 0x4350, 0x1a00, 0x369b, 0xb22b, 0x24f9, 0x4253, 0x360c, 0x41cd, 0x0fb1, 0xb0a6, 0x025d, 0x18c4, 0xb251, 0x40c6, 0x4349, 0xb2cc, 0xa0be, 0x4377, 0x43da, 0x16b2, 0x413d, 0xbf80, 0x44ac, 0xbfdb, 0xb266, 0x0d95, 0x420e, 0xb083, 0x1b6c, 0x4305, 0xbae4, 0xb28f, 0xb236, 0xba09, 0x2da7, 0xb252, 0xba09, 0xa115, 0x447d, 0xb272, 0xbf75, 0x40f6, 0x0b5a, 0xb086, 0x466b, 0x4632, 0xbf0a, 0x43e0, 0x1f0f, 0xb2e7, 0xba3d, 0x36d4, 0x07bc, 0x4172, 0x3697, 0xb221, 0x0e04, 0x28f3, 0x42e6, 0x198a, 0x4089, 0xbf90, 0x3694, 0x2837, 0x4082, 0x4263, 0x4142, 0x4074, 0x2fc6, 0x1e01, 0xab23, 0x0cb5, 0x4033, 0x0067, 0xbfca, 0x111a, 0x4261, 0x29e3, 0x462d, 0xb299, 0x4072, 0xbfe0, 0x4342, 0xbf3d, 0x0830, 0x1afe, 0x419c, 0x1ce9, 0x42e6, 0x40d5, 0x41cc, 0xb072, 0x3bd5, 0xbfdf, 0x1807, 0x44c2, 0xba38, 0x4693, 0x41a2, 0x4072, 0x42e7, 0xbaef, 0x01b3, 0x25c5, 0x4006, 0x096e, 0x4115, 0x0622, 0x43ac, 0xb00c, 0x1f03, 0xbf48, 0x41c4, 0x43dc, 0x415a, 0x20b3, 0x4064, 0xba24, 0x40f8, 0xb23f, 0x0b4b, 0x42ec, 0xb014, 0x4119, 0xbf78, 0x4393, 0x3aa5, 0x410a, 0x0b23, 0x442f, 0xba39, 0x4298, 0xba42, 0x42c5, 0xa365, 0xbfba, 0x40a8, 0x17e3, 0x4057, 0x417c, 0xaa59, 0xafc2, 0x33ad, 0xa425, 0xbfb9, 0x2e0c, 0x0192, 0xaa5d, 0x0448, 0x421e, 0x4357, 0xb2f0, 0x2a8b, 0x378b, 0xb219, 0x416c, 0xbf8e, 0x43ff, 0x4348, 0x4262, 0xba30, 0x202d, 0xa784, 0xadcc, 0xba34, 0x121b, 0x41da, 0xbfd1, 0xb293, 0x435f, 0x31bc, 0xb263, 0x40a0, 0xbf1c, 0x46cd, 0x22d6, 0x3198, 0x250f, 0x2fc5, 0x4100, 0x4090, 0xbfd2, 0xb207, 0xba6f, 0x436b, 0xba5f, 0x4618, 0xb2d4, 0x1123, 0xba54, 0x33e5, 0x43eb, 0x1e8d, 0xb21b, 0xaf42, 0xab0f, 0xb2cb, 0x4101, 0x4026, 0xb2b9, 0xaaf3, 0x1f93, 0x4208, 0x1d01, 0x400d, 0xbf99, 0x3677, 0x182f, 0x3f84, 0x363f, 0x185c, 0xb2d0, 0x0c54, 0x43dd, 0xa014, 0xb23f, 0x41f8, 0xba0b, 0xba39, 0x255a, 0x4313, 0x4449, 0x1934, 0x4317, 0x4102, 0x156d, 0x01fd, 0x41ec, 0x41e1, 0xb023, 0xbf62, 0x41b9, 0x3f1c, 0x3b9c, 0x1930, 0x1e90, 0x429a, 0x1a6c, 0x1dda, 0x1834, 0x440c, 0xb284, 0xb225, 0xae4e, 0x4080, 0xbfca, 0x1cfd, 0x264f, 0x4298, 0x185e, 0x1dc1, 0xbf17, 0x244c, 0x4546, 0x1b6d, 0xbaf7, 0xb286, 0x2054, 0x3c0d, 0x3570, 0x25a7, 0xb261, 0xb21e, 0xa108, 0x13c0, 0x4274, 0x4310, 0xbf42, 0x4212, 0x40c5, 0x438f, 0x0e16, 0x424f, 0xbf90, 0x438e, 0x37c7, 0xbf70, 0x1c3a, 0x437c, 0x06c9, 0x3d63, 0xba3c, 0x1fc0, 0xb223, 0xb245, 0x4003, 0x43aa, 0x0028, 0xba31, 0x038a, 0xba46, 0x1c2d, 0x4435, 0x0726, 0x41d5, 0xbfa6, 0xb2a3, 0xad24, 0x4662, 0x1fdc, 0xb2f7, 0x4012, 0x37dc, 0x418c, 0x1bf3, 0x42b6, 0x44ca, 0x03ed, 0xba5a, 0x431e, 0xbfdf, 0x4315, 0x437b, 0x42ea, 0xbad9, 0xad16, 0xb24d, 0x0b0b, 0xb24e, 0xbfc0, 0xb05b, 0x435f, 0xb255, 0x424e, 0xbae9, 0x4148, 0xb05f, 0xb243, 0x4182, 0x0e5a, 0xb205, 0xbad7, 0x2fd5, 0xbf21, 0x40ac, 0xb2a3, 0xba5c, 0xb2e0, 0x4061, 0x402e, 0xb0a7, 0x3380, 0x42b8, 0xa8cf, 0x2a06, 0x42ab, 0xb296, 0x42c7, 0x41fd, 0xb25b, 0x4333, 0x419f, 0x437b, 0x2ab1, 0xbaf1, 0x17dd, 0x43a2, 0x36ea, 0x4153, 0xbf91, 0x4023, 0x410e, 0xb2b9, 0xb0e9, 0xace2, 0x00d9, 0x2367, 0xb2f9, 0x41df, 0x2087, 0x3147, 0x41f5, 0xb086, 0x40e6, 0x43ef, 0xb21a, 0x41fa, 0xbf6b, 0x311c, 0xb297, 0xba54, 0xa3cd, 0x4189, 0xb252, 0x4186, 0x43d4, 0x4312, 0x4096, 0xb20e, 0x45f6, 0xba7c, 0x3889, 0x4085, 0x4067, 0x4254, 0x1829, 0x414f, 0x4447, 0x2373, 0x4184, 0xb24e, 0x408b, 0x404b, 0xa39a, 0xa843, 0x4007, 0x401e, 0xbf68, 0xba09, 0xb0f7, 0x46a1, 0xb068, 0x427a, 0x42c9, 0x43f4, 0x41e2, 0x40fa, 0xbac6, 0x4377, 0xbf70, 0x3cb1, 0x41b3, 0x43a8, 0xbf74, 0x1f66, 0xb25c, 0x4770, 0xe7fe + ], + StartRegs = [0x320c594d, 0xb070758d, 0x7506c560, 0x186ad0f5, 0x6d69bf75, 0xb7cad7d5, 0x7a31742f, 0xa62baad6, 0x3f33b7a4, 0x3237b374, 0x612a830d, 0xd1ce3d3c, 0xdf52c51d, 0x8c1be78a, 0x00000000, 0xa00001f0 + ], + FinalRegs = [0xdf52c8e9, 0xfffffffe, 0x0077f7e0, 0x00003048, 0xffffe53e, 0x00000000, 0xffffe539, 0xd3cd7808, 0x3f33b7a4, 0xffffff9b, 0x407d482a, 0x00000000, 0xdf52c51d, 0xdf52c7a1, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x43ce, 0xba1b, 0xba2e, 0x02ec, 0x4241, 0xb244, 0x0d54, 0x40ed, 0x2352, 0xb025, 0x4172, 0x3f8e, 0x1fc3, 0x423a, 0x43ee, 0x41e7, 0x4155, 0xa91e, 0xbaee, 0x41fb, 0x35a0, 0x1a31, 0x414f, 0x4075, 0xbf8f, 0x39ec, 0x4032, 0x29b2, 0x2093, 0x4196, 0x1b62, 0x4411, 0x3f4e, 0xb242, 0x226a, 0xb2b0, 0x3fc2, 0xba70, 0x43b8, 0xbf7b, 0xa6be, 0x41ab, 0xbae6, 0x401e, 0x46a4, 0xbf2e, 0xb09d, 0x435c, 0x423a, 0xb2a8, 0xac17, 0x4382, 0xb2e8, 0x33df, 0x45a1, 0x11b9, 0x4435, 0xbacf, 0xbf23, 0x2fe4, 0x4137, 0x1be5, 0x1528, 0x41c1, 0xb241, 0xb2e2, 0x2601, 0xb2c8, 0xbace, 0x3e99, 0x417c, 0x4362, 0x426b, 0xb2cb, 0xac16, 0x42dd, 0xab93, 0xbad6, 0x44fb, 0x1c86, 0x445b, 0xa008, 0x41ca, 0xbfe0, 0x45d3, 0xb20a, 0xb06e, 0x443d, 0xbfce, 0x43cf, 0x4278, 0x406a, 0xb23d, 0xac1d, 0x4317, 0x14b6, 0x1aba, 0x4437, 0x409d, 0x40d8, 0x1c08, 0xad81, 0x2e13, 0x43da, 0x354d, 0x418a, 0x1911, 0x3024, 0x40cb, 0xbf4c, 0x190c, 0x400b, 0x4090, 0xbfcf, 0xb09d, 0x3f1b, 0xb235, 0x1f6d, 0x1a67, 0x4078, 0x4045, 0x066d, 0x404d, 0x4148, 0xba75, 0x1c4a, 0xb219, 0x2277, 0x41f9, 0xb0c6, 0xb2a5, 0x0907, 0xbf4b, 0xb244, 0x0cdc, 0xb2ea, 0x4093, 0x42a8, 0x40e0, 0x3381, 0x0521, 0x41dd, 0xb290, 0x4064, 0xb08d, 0x400b, 0x43fa, 0x4349, 0xbf2b, 0xab6c, 0xb0ed, 0x43df, 0x0ae3, 0x24ae, 0xbf67, 0x407d, 0x1041, 0xbae3, 0x43fe, 0xbf63, 0x4185, 0xb033, 0x40df, 0x4362, 0x30bd, 0x455d, 0xb090, 0x411a, 0x44b3, 0x40da, 0xbf80, 0x41d1, 0xb2eb, 0x3e13, 0x4112, 0x40b0, 0x1f92, 0x407e, 0x36db, 0x41cf, 0x4397, 0x1982, 0xbad6, 0xb0be, 0x240e, 0x1c50, 0xba3f, 0x4224, 0xbfdf, 0xa4fd, 0x42c3, 0x4022, 0x4021, 0x1e68, 0xb23d, 0x43c1, 0x46fc, 0x4667, 0xba1c, 0x381b, 0x4189, 0x4186, 0x42da, 0xba72, 0x4230, 0x2b23, 0x40b4, 0x431c, 0x414c, 0xa472, 0x419e, 0xba03, 0x429b, 0x0c07, 0x1985, 0x412a, 0x3faa, 0x4689, 0xbf8f, 0x41e3, 0x427b, 0xb28d, 0xa220, 0xa8e1, 0x42ad, 0x4302, 0x41d7, 0xb224, 0x4240, 0x4063, 0x418d, 0xb2f7, 0x422d, 0x2633, 0x46f8, 0x13db, 0xbf84, 0x3ef1, 0x434c, 0x115c, 0xbf98, 0xba27, 0x1d98, 0xbf95, 0x4273, 0x1cdc, 0x428c, 0xb215, 0x3d32, 0xb219, 0xba4a, 0x4640, 0x4349, 0x4123, 0xba50, 0x447f, 0x3398, 0x4017, 0x325e, 0x1afd, 0xb20b, 0x1f41, 0xb200, 0x422e, 0x16a1, 0x43b4, 0x1f01, 0xbf58, 0x42f1, 0xb2c7, 0xb269, 0x41c9, 0x4445, 0x42fd, 0x4228, 0x1796, 0x1d3a, 0x40d8, 0xbf23, 0x44ac, 0x433c, 0x41d0, 0x280a, 0x4555, 0x428d, 0xbf48, 0xb219, 0x40e5, 0x4178, 0x4072, 0x438f, 0x4351, 0x45a5, 0x42ed, 0xa654, 0xb27b, 0xbfab, 0x1c9b, 0x42b1, 0xb03b, 0xba2d, 0x19b2, 0x4279, 0x429a, 0x4025, 0x41d4, 0xb228, 0x426f, 0xb2dd, 0xb26b, 0x4377, 0x18e1, 0x1a2d, 0x1e4f, 0x40b3, 0x42e2, 0x4249, 0x1b7c, 0xbaec, 0x40c5, 0x193f, 0x414c, 0xba00, 0x437b, 0x40d7, 0xba26, 0xbf4c, 0x43b5, 0x3b21, 0xab9e, 0x44ac, 0x18b3, 0x40c8, 0xbaed, 0x17c8, 0x3a04, 0x1751, 0x41c0, 0x41b2, 0x41c4, 0xb039, 0xbf01, 0x43de, 0x41f5, 0x1b0f, 0x4336, 0xba08, 0xb03b, 0x41d8, 0x366c, 0x0cf1, 0x4615, 0x412e, 0x4541, 0x030a, 0x28f4, 0x419c, 0x45e3, 0x3ee7, 0x3be2, 0xb031, 0x4301, 0x4327, 0x403a, 0xbad8, 0x425e, 0x42f5, 0xbfaa, 0x413e, 0x448c, 0xafe4, 0x40de, 0x417c, 0xbfb0, 0x22f0, 0xb2de, 0x4197, 0x421f, 0x410f, 0xb2d4, 0x40e4, 0x4117, 0x40ef, 0xbf54, 0x415e, 0xa3a1, 0x42bb, 0x40b0, 0x43b0, 0x4176, 0xb0b5, 0xb2e8, 0x3f9f, 0xba16, 0x4130, 0x412a, 0xbf5b, 0x1a0c, 0x42ba, 0x43e9, 0xa069, 0xb287, 0x41fd, 0xb0f8, 0x4275, 0x4443, 0x2643, 0x41ee, 0xba6b, 0xb25d, 0x32bc, 0xacb5, 0x45e2, 0x1049, 0xbf01, 0x4093, 0x4349, 0xaf09, 0xba72, 0xbadf, 0xbf00, 0xbf3c, 0xb0ff, 0x4190, 0xbf70, 0x4246, 0x1fb4, 0x439b, 0x0a5c, 0x265f, 0x409e, 0x1bae, 0xbae4, 0x20cd, 0x1f9b, 0x1ec0, 0x3cf8, 0xbae2, 0xb0d1, 0xaeaf, 0xbac7, 0x44f2, 0x416f, 0xbf1a, 0x415a, 0x2deb, 0x42f6, 0xa78e, 0x26f7, 0x429c, 0x30db, 0xb0d6, 0x4348, 0x4161, 0x409a, 0x432f, 0xbae7, 0x4105, 0x41b1, 0x4103, 0x1f6d, 0x12bd, 0x4362, 0x42d4, 0xbfa2, 0xbaf3, 0x4287, 0x1c0e, 0xb27a, 0x4628, 0x1861, 0x0bdf, 0x4139, 0x3f0a, 0xbfe0, 0x431b, 0x40bf, 0x403c, 0x24d3, 0x11e4, 0x1802, 0x2b5b, 0xa8ce, 0x15cd, 0x0a73, 0x1f3d, 0x1aa4, 0x41e8, 0xbf7c, 0xba36, 0x1a63, 0x1d63, 0x255d, 0x437d, 0x0969, 0xbac2, 0xba01, 0x4053, 0x40a7, 0x46ec, 0xb2f4, 0x1eab, 0xb243, 0x1a9f, 0x40a3, 0x4488, 0xb217, 0x434b, 0xb22e, 0x36e8, 0xb0a1, 0xb2b3, 0xbf25, 0x33da, 0x37e0, 0x43ad, 0x4418, 0x38ba, 0xa987, 0x4139, 0xbf2a, 0xa07a, 0x39a8, 0xb282, 0xba45, 0x43af, 0xba0b, 0x4275, 0x4273, 0xbad6, 0x435a, 0xb088, 0x402a, 0x40a6, 0xb029, 0x4304, 0xaa79, 0xb263, 0x4094, 0x08e2, 0x42cb, 0x42e7, 0x40dc, 0x1604, 0x43ca, 0x2b37, 0xbfc2, 0x4398, 0x300a, 0x41f9, 0xbf9d, 0x4485, 0xa8ec, 0x3bfb, 0xb23f, 0x0380, 0x3972, 0x40d9, 0x4019, 0x1c09, 0x1091, 0xbadf, 0x40c8, 0x43d0, 0x45aa, 0xbf90, 0xb224, 0x43fb, 0xb25c, 0xbf99, 0xbaf7, 0xb08e, 0x1b57, 0xb202, 0xb26b, 0x4160, 0xb03b, 0x1b50, 0x1f3c, 0x4107, 0x4027, 0x446f, 0x4183, 0x323e, 0xa035, 0x41ff, 0x415d, 0xbaff, 0x4634, 0x430a, 0x434f, 0x414d, 0xba3f, 0x1c05, 0xb0e7, 0xbf6b, 0x43e5, 0x3391, 0x1fed, 0x4341, 0x46f3, 0x4280, 0x4103, 0x401e, 0x1e8c, 0xba73, 0x4110, 0x404e, 0x2e56, 0x1b29, 0x1fc5, 0x4562, 0x418f, 0xbfa1, 0x414a, 0xb2fd, 0x42e9, 0xb2c3, 0x4170, 0xb242, 0x4371, 0x160c, 0xb0da, 0x3438, 0xba7e, 0xba02, 0x40ac, 0xbf92, 0x438b, 0x4009, 0x41b3, 0xbae1, 0xb26c, 0x060c, 0x4023, 0x4377, 0x35b8, 0x413d, 0x411a, 0x43b2, 0x0ad3, 0x42a6, 0xbf00, 0x4279, 0x1fe4, 0xb228, 0x42f0, 0x0ab4, 0x41bf, 0x41f0, 0x24fe, 0xbf67, 0x2bbb, 0x0f1e, 0x4101, 0x4402, 0xb2f6, 0x435e, 0xba00, 0xbfb0, 0x41bd, 0x4540, 0xbfb8, 0x1ba4, 0xb25c, 0x1478, 0x415b, 0xb01a, 0x4067, 0xa8f1, 0x429b, 0x1211, 0x42d8, 0xbf6b, 0x42b0, 0xba0f, 0x4175, 0x42a3, 0x3eba, 0x418b, 0x3558, 0x4044, 0x1c92, 0x40ee, 0x4345, 0x429a, 0x42f0, 0xbac9, 0x46b4, 0x429d, 0xbf0a, 0x4338, 0x418b, 0x43c0, 0x4224, 0xbf0f, 0xaa79, 0xba2e, 0x2cfb, 0xa092, 0x4003, 0x2293, 0xb2fb, 0x1a02, 0x4298, 0x4204, 0x41f3, 0x255f, 0x1884, 0xbfc0, 0x403a, 0x407b, 0xb044, 0xbf5d, 0x12b1, 0x3384, 0x4336, 0xb05d, 0x42be, 0x419e, 0xb2ad, 0xba4a, 0x4117, 0xba5b, 0xb292, 0xbafd, 0x428e, 0x43f5, 0x40f8, 0x4601, 0x406b, 0xae07, 0x42e5, 0x4053, 0x4068, 0xb0b4, 0x3961, 0x4340, 0x37c8, 0xbfcb, 0x423c, 0xa03f, 0x4342, 0x423c, 0xbf88, 0x0fdd, 0x4193, 0xb2d9, 0x43da, 0xbfa0, 0x1396, 0x40af, 0x4317, 0xa51a, 0x211a, 0xadb9, 0x433e, 0xba22, 0x41f9, 0x180e, 0x411c, 0xba61, 0x4001, 0x4268, 0x03fc, 0xbf00, 0xb281, 0xb23f, 0xbae2, 0xbf80, 0xbf65, 0x43e1, 0x394f, 0x35a0, 0x329b, 0x422f, 0x4164, 0x0d8f, 0x4237, 0x465a, 0x43b6, 0xbaf0, 0xbfe0, 0xbf11, 0x4267, 0xba2f, 0x41a6, 0xb210, 0x4221, 0x4319, 0x1482, 0x3205, 0xb256, 0x2dfd, 0xba01, 0x402a, 0xb2ca, 0x163f, 0x432d, 0x41fd, 0x4161, 0xb0b4, 0x42f8, 0x40c2, 0x1aa5, 0x4167, 0xb051, 0x0978, 0x4149, 0xbf1f, 0x4175, 0x43fa, 0xb252, 0x4140, 0x4215, 0xba55, 0xb2d2, 0x4210, 0x406a, 0xaf57, 0xacee, 0xa935, 0xba5d, 0x4259, 0x05bf, 0xb015, 0x43e6, 0x4192, 0xa8db, 0x44e2, 0x1588, 0x0d4d, 0x437f, 0x0618, 0xbfdb, 0x41e3, 0x4108, 0xa17e, 0x416f, 0x1b33, 0x42df, 0x438e, 0x41d0, 0xbfb1, 0x0d0f, 0xb28f, 0xba4b, 0x3c20, 0x42e3, 0x0f9b, 0x41af, 0x40fd, 0x415c, 0x40f5, 0x436d, 0xa5a7, 0xa82e, 0xba46, 0x42ac, 0xb204, 0x4067, 0x438d, 0x40e0, 0x09d3, 0xaaf7, 0xbf79, 0x4386, 0x1b23, 0x41ea, 0x4010, 0xbff0, 0x4491, 0xa083, 0xb227, 0xb2d3, 0x4196, 0x1c87, 0xb22a, 0xb09b, 0x01cd, 0x1c6f, 0xafc3, 0x43be, 0xa9d2, 0x42c6, 0x0ad5, 0x4341, 0x432b, 0xba5c, 0xb0bc, 0x4120, 0x412e, 0x4475, 0x4284, 0xb01b, 0xbfda, 0xa893, 0x1afa, 0xa310, 0x40f9, 0xb25d, 0x42b4, 0xb00e, 0xb06b, 0xb26e, 0x43eb, 0x4237, 0x40a9, 0x4369, 0x40cc, 0x4233, 0x40fc, 0x3d00, 0x43aa, 0xb2d7, 0x40bc, 0xbf00, 0xb296, 0xb223, 0x0c49, 0xaaff, 0x4180, 0x18bc, 0xbf70, 0xbf6c, 0x430a, 0xb208, 0x0bd5, 0x1bcd, 0x421c, 0xb289, 0xb250, 0xbf1e, 0x41b7, 0x44fa, 0xb0f3, 0x2760, 0x1c87, 0x189c, 0xb217, 0x41a3, 0xaf06, 0xbfb4, 0x422b, 0x2caf, 0x1b6f, 0x429c, 0x406b, 0x417d, 0x41c5, 0xa01c, 0xb258, 0x43ee, 0x1c6b, 0x4171, 0xb0ab, 0xa87d, 0x40e3, 0x1b3f, 0xba4a, 0xbf46, 0x3418, 0x19da, 0xa67e, 0x4223, 0x3401, 0x3b45, 0x2a8f, 0x45ab, 0xb249, 0xb2d7, 0x416d, 0xbf80, 0x1b06, 0xba61, 0x070c, 0xb2e8, 0x4394, 0x3fb6, 0x41b7, 0xbf56, 0x4087, 0x42fa, 0xb01d, 0x438c, 0x1fb3, 0xbae0, 0xb01a, 0xa6da, 0x4396, 0xb009, 0x3260, 0x4347, 0x4097, 0xb06f, 0x42b9, 0x2e15, 0xb033, 0x4253, 0x43a3, 0x0261, 0x1e9b, 0x4657, 0xb2fb, 0xb288, 0xbf9e, 0x42ed, 0x43d9, 0xba33, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3e63c940, 0xd2f40362, 0xbb77737e, 0x677685e4, 0x97ccf408, 0x3dfa0433, 0x43332c01, 0xa5fc83ef, 0x5b5a10e7, 0x93fd7fe6, 0xe271cf59, 0xac70a2fd, 0xc4be1954, 0x93de22cc, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00000000, 0xfffff05f, 0x00000059, 0x00000000, 0x00000020, 0x00001000, 0xe271cf59, 0x49f6f315, 0x93de1f28, 0xe271cf59, 0x00000000, 0x00000000, 0x93de1f1c, 0x00000000, 0x200001d0 }, + Instructions = [0x43ce, 0xba1b, 0xba2e, 0x02ec, 0x4241, 0xb244, 0x0d54, 0x40ed, 0x2352, 0xb025, 0x4172, 0x3f8e, 0x1fc3, 0x423a, 0x43ee, 0x41e7, 0x4155, 0xa91e, 0xbaee, 0x41fb, 0x35a0, 0x1a31, 0x414f, 0x4075, 0xbf8f, 0x39ec, 0x4032, 0x29b2, 0x2093, 0x4196, 0x1b62, 0x4411, 0x3f4e, 0xb242, 0x226a, 0xb2b0, 0x3fc2, 0xba70, 0x43b8, 0xbf7b, 0xa6be, 0x41ab, 0xbae6, 0x401e, 0x46a4, 0xbf2e, 0xb09d, 0x435c, 0x423a, 0xb2a8, 0xac17, 0x4382, 0xb2e8, 0x33df, 0x45a1, 0x11b9, 0x4435, 0xbacf, 0xbf23, 0x2fe4, 0x4137, 0x1be5, 0x1528, 0x41c1, 0xb241, 0xb2e2, 0x2601, 0xb2c8, 0xbace, 0x3e99, 0x417c, 0x4362, 0x426b, 0xb2cb, 0xac16, 0x42dd, 0xab93, 0xbad6, 0x44fb, 0x1c86, 0x445b, 0xa008, 0x41ca, 0xbfe0, 0x45d3, 0xb20a, 0xb06e, 0x443d, 0xbfce, 0x43cf, 0x4278, 0x406a, 0xb23d, 0xac1d, 0x4317, 0x14b6, 0x1aba, 0x4437, 0x409d, 0x40d8, 0x1c08, 0xad81, 0x2e13, 0x43da, 0x354d, 0x418a, 0x1911, 0x3024, 0x40cb, 0xbf4c, 0x190c, 0x400b, 0x4090, 0xbfcf, 0xb09d, 0x3f1b, 0xb235, 0x1f6d, 0x1a67, 0x4078, 0x4045, 0x066d, 0x404d, 0x4148, 0xba75, 0x1c4a, 0xb219, 0x2277, 0x41f9, 0xb0c6, 0xb2a5, 0x0907, 0xbf4b, 0xb244, 0x0cdc, 0xb2ea, 0x4093, 0x42a8, 0x40e0, 0x3381, 0x0521, 0x41dd, 0xb290, 0x4064, 0xb08d, 0x400b, 0x43fa, 0x4349, 0xbf2b, 0xab6c, 0xb0ed, 0x43df, 0x0ae3, 0x24ae, 0xbf67, 0x407d, 0x1041, 0xbae3, 0x43fe, 0xbf63, 0x4185, 0xb033, 0x40df, 0x4362, 0x30bd, 0x455d, 0xb090, 0x411a, 0x44b3, 0x40da, 0xbf80, 0x41d1, 0xb2eb, 0x3e13, 0x4112, 0x40b0, 0x1f92, 0x407e, 0x36db, 0x41cf, 0x4397, 0x1982, 0xbad6, 0xb0be, 0x240e, 0x1c50, 0xba3f, 0x4224, 0xbfdf, 0xa4fd, 0x42c3, 0x4022, 0x4021, 0x1e68, 0xb23d, 0x43c1, 0x46fc, 0x4667, 0xba1c, 0x381b, 0x4189, 0x4186, 0x42da, 0xba72, 0x4230, 0x2b23, 0x40b4, 0x431c, 0x414c, 0xa472, 0x419e, 0xba03, 0x429b, 0x0c07, 0x1985, 0x412a, 0x3faa, 0x4689, 0xbf8f, 0x41e3, 0x427b, 0xb28d, 0xa220, 0xa8e1, 0x42ad, 0x4302, 0x41d7, 0xb224, 0x4240, 0x4063, 0x418d, 0xb2f7, 0x422d, 0x2633, 0x46f8, 0x13db, 0xbf84, 0x3ef1, 0x434c, 0x115c, 0xbf98, 0xba27, 0x1d98, 0xbf95, 0x4273, 0x1cdc, 0x428c, 0xb215, 0x3d32, 0xb219, 0xba4a, 0x4640, 0x4349, 0x4123, 0xba50, 0x447f, 0x3398, 0x4017, 0x325e, 0x1afd, 0xb20b, 0x1f41, 0xb200, 0x422e, 0x16a1, 0x43b4, 0x1f01, 0xbf58, 0x42f1, 0xb2c7, 0xb269, 0x41c9, 0x4445, 0x42fd, 0x4228, 0x1796, 0x1d3a, 0x40d8, 0xbf23, 0x44ac, 0x433c, 0x41d0, 0x280a, 0x4555, 0x428d, 0xbf48, 0xb219, 0x40e5, 0x4178, 0x4072, 0x438f, 0x4351, 0x45a5, 0x42ed, 0xa654, 0xb27b, 0xbfab, 0x1c9b, 0x42b1, 0xb03b, 0xba2d, 0x19b2, 0x4279, 0x429a, 0x4025, 0x41d4, 0xb228, 0x426f, 0xb2dd, 0xb26b, 0x4377, 0x18e1, 0x1a2d, 0x1e4f, 0x40b3, 0x42e2, 0x4249, 0x1b7c, 0xbaec, 0x40c5, 0x193f, 0x414c, 0xba00, 0x437b, 0x40d7, 0xba26, 0xbf4c, 0x43b5, 0x3b21, 0xab9e, 0x44ac, 0x18b3, 0x40c8, 0xbaed, 0x17c8, 0x3a04, 0x1751, 0x41c0, 0x41b2, 0x41c4, 0xb039, 0xbf01, 0x43de, 0x41f5, 0x1b0f, 0x4336, 0xba08, 0xb03b, 0x41d8, 0x366c, 0x0cf1, 0x4615, 0x412e, 0x4541, 0x030a, 0x28f4, 0x419c, 0x45e3, 0x3ee7, 0x3be2, 0xb031, 0x4301, 0x4327, 0x403a, 0xbad8, 0x425e, 0x42f5, 0xbfaa, 0x413e, 0x448c, 0xafe4, 0x40de, 0x417c, 0xbfb0, 0x22f0, 0xb2de, 0x4197, 0x421f, 0x410f, 0xb2d4, 0x40e4, 0x4117, 0x40ef, 0xbf54, 0x415e, 0xa3a1, 0x42bb, 0x40b0, 0x43b0, 0x4176, 0xb0b5, 0xb2e8, 0x3f9f, 0xba16, 0x4130, 0x412a, 0xbf5b, 0x1a0c, 0x42ba, 0x43e9, 0xa069, 0xb287, 0x41fd, 0xb0f8, 0x4275, 0x4443, 0x2643, 0x41ee, 0xba6b, 0xb25d, 0x32bc, 0xacb5, 0x45e2, 0x1049, 0xbf01, 0x4093, 0x4349, 0xaf09, 0xba72, 0xbadf, 0xbf00, 0xbf3c, 0xb0ff, 0x4190, 0xbf70, 0x4246, 0x1fb4, 0x439b, 0x0a5c, 0x265f, 0x409e, 0x1bae, 0xbae4, 0x20cd, 0x1f9b, 0x1ec0, 0x3cf8, 0xbae2, 0xb0d1, 0xaeaf, 0xbac7, 0x44f2, 0x416f, 0xbf1a, 0x415a, 0x2deb, 0x42f6, 0xa78e, 0x26f7, 0x429c, 0x30db, 0xb0d6, 0x4348, 0x4161, 0x409a, 0x432f, 0xbae7, 0x4105, 0x41b1, 0x4103, 0x1f6d, 0x12bd, 0x4362, 0x42d4, 0xbfa2, 0xbaf3, 0x4287, 0x1c0e, 0xb27a, 0x4628, 0x1861, 0x0bdf, 0x4139, 0x3f0a, 0xbfe0, 0x431b, 0x40bf, 0x403c, 0x24d3, 0x11e4, 0x1802, 0x2b5b, 0xa8ce, 0x15cd, 0x0a73, 0x1f3d, 0x1aa4, 0x41e8, 0xbf7c, 0xba36, 0x1a63, 0x1d63, 0x255d, 0x437d, 0x0969, 0xbac2, 0xba01, 0x4053, 0x40a7, 0x46ec, 0xb2f4, 0x1eab, 0xb243, 0x1a9f, 0x40a3, 0x4488, 0xb217, 0x434b, 0xb22e, 0x36e8, 0xb0a1, 0xb2b3, 0xbf25, 0x33da, 0x37e0, 0x43ad, 0x4418, 0x38ba, 0xa987, 0x4139, 0xbf2a, 0xa07a, 0x39a8, 0xb282, 0xba45, 0x43af, 0xba0b, 0x4275, 0x4273, 0xbad6, 0x435a, 0xb088, 0x402a, 0x40a6, 0xb029, 0x4304, 0xaa79, 0xb263, 0x4094, 0x08e2, 0x42cb, 0x42e7, 0x40dc, 0x1604, 0x43ca, 0x2b37, 0xbfc2, 0x4398, 0x300a, 0x41f9, 0xbf9d, 0x4485, 0xa8ec, 0x3bfb, 0xb23f, 0x0380, 0x3972, 0x40d9, 0x4019, 0x1c09, 0x1091, 0xbadf, 0x40c8, 0x43d0, 0x45aa, 0xbf90, 0xb224, 0x43fb, 0xb25c, 0xbf99, 0xbaf7, 0xb08e, 0x1b57, 0xb202, 0xb26b, 0x4160, 0xb03b, 0x1b50, 0x1f3c, 0x4107, 0x4027, 0x446f, 0x4183, 0x323e, 0xa035, 0x41ff, 0x415d, 0xbaff, 0x4634, 0x430a, 0x434f, 0x414d, 0xba3f, 0x1c05, 0xb0e7, 0xbf6b, 0x43e5, 0x3391, 0x1fed, 0x4341, 0x46f3, 0x4280, 0x4103, 0x401e, 0x1e8c, 0xba73, 0x4110, 0x404e, 0x2e56, 0x1b29, 0x1fc5, 0x4562, 0x418f, 0xbfa1, 0x414a, 0xb2fd, 0x42e9, 0xb2c3, 0x4170, 0xb242, 0x4371, 0x160c, 0xb0da, 0x3438, 0xba7e, 0xba02, 0x40ac, 0xbf92, 0x438b, 0x4009, 0x41b3, 0xbae1, 0xb26c, 0x060c, 0x4023, 0x4377, 0x35b8, 0x413d, 0x411a, 0x43b2, 0x0ad3, 0x42a6, 0xbf00, 0x4279, 0x1fe4, 0xb228, 0x42f0, 0x0ab4, 0x41bf, 0x41f0, 0x24fe, 0xbf67, 0x2bbb, 0x0f1e, 0x4101, 0x4402, 0xb2f6, 0x435e, 0xba00, 0xbfb0, 0x41bd, 0x4540, 0xbfb8, 0x1ba4, 0xb25c, 0x1478, 0x415b, 0xb01a, 0x4067, 0xa8f1, 0x429b, 0x1211, 0x42d8, 0xbf6b, 0x42b0, 0xba0f, 0x4175, 0x42a3, 0x3eba, 0x418b, 0x3558, 0x4044, 0x1c92, 0x40ee, 0x4345, 0x429a, 0x42f0, 0xbac9, 0x46b4, 0x429d, 0xbf0a, 0x4338, 0x418b, 0x43c0, 0x4224, 0xbf0f, 0xaa79, 0xba2e, 0x2cfb, 0xa092, 0x4003, 0x2293, 0xb2fb, 0x1a02, 0x4298, 0x4204, 0x41f3, 0x255f, 0x1884, 0xbfc0, 0x403a, 0x407b, 0xb044, 0xbf5d, 0x12b1, 0x3384, 0x4336, 0xb05d, 0x42be, 0x419e, 0xb2ad, 0xba4a, 0x4117, 0xba5b, 0xb292, 0xbafd, 0x428e, 0x43f5, 0x40f8, 0x4601, 0x406b, 0xae07, 0x42e5, 0x4053, 0x4068, 0xb0b4, 0x3961, 0x4340, 0x37c8, 0xbfcb, 0x423c, 0xa03f, 0x4342, 0x423c, 0xbf88, 0x0fdd, 0x4193, 0xb2d9, 0x43da, 0xbfa0, 0x1396, 0x40af, 0x4317, 0xa51a, 0x211a, 0xadb9, 0x433e, 0xba22, 0x41f9, 0x180e, 0x411c, 0xba61, 0x4001, 0x4268, 0x03fc, 0xbf00, 0xb281, 0xb23f, 0xbae2, 0xbf80, 0xbf65, 0x43e1, 0x394f, 0x35a0, 0x329b, 0x422f, 0x4164, 0x0d8f, 0x4237, 0x465a, 0x43b6, 0xbaf0, 0xbfe0, 0xbf11, 0x4267, 0xba2f, 0x41a6, 0xb210, 0x4221, 0x4319, 0x1482, 0x3205, 0xb256, 0x2dfd, 0xba01, 0x402a, 0xb2ca, 0x163f, 0x432d, 0x41fd, 0x4161, 0xb0b4, 0x42f8, 0x40c2, 0x1aa5, 0x4167, 0xb051, 0x0978, 0x4149, 0xbf1f, 0x4175, 0x43fa, 0xb252, 0x4140, 0x4215, 0xba55, 0xb2d2, 0x4210, 0x406a, 0xaf57, 0xacee, 0xa935, 0xba5d, 0x4259, 0x05bf, 0xb015, 0x43e6, 0x4192, 0xa8db, 0x44e2, 0x1588, 0x0d4d, 0x437f, 0x0618, 0xbfdb, 0x41e3, 0x4108, 0xa17e, 0x416f, 0x1b33, 0x42df, 0x438e, 0x41d0, 0xbfb1, 0x0d0f, 0xb28f, 0xba4b, 0x3c20, 0x42e3, 0x0f9b, 0x41af, 0x40fd, 0x415c, 0x40f5, 0x436d, 0xa5a7, 0xa82e, 0xba46, 0x42ac, 0xb204, 0x4067, 0x438d, 0x40e0, 0x09d3, 0xaaf7, 0xbf79, 0x4386, 0x1b23, 0x41ea, 0x4010, 0xbff0, 0x4491, 0xa083, 0xb227, 0xb2d3, 0x4196, 0x1c87, 0xb22a, 0xb09b, 0x01cd, 0x1c6f, 0xafc3, 0x43be, 0xa9d2, 0x42c6, 0x0ad5, 0x4341, 0x432b, 0xba5c, 0xb0bc, 0x4120, 0x412e, 0x4475, 0x4284, 0xb01b, 0xbfda, 0xa893, 0x1afa, 0xa310, 0x40f9, 0xb25d, 0x42b4, 0xb00e, 0xb06b, 0xb26e, 0x43eb, 0x4237, 0x40a9, 0x4369, 0x40cc, 0x4233, 0x40fc, 0x3d00, 0x43aa, 0xb2d7, 0x40bc, 0xbf00, 0xb296, 0xb223, 0x0c49, 0xaaff, 0x4180, 0x18bc, 0xbf70, 0xbf6c, 0x430a, 0xb208, 0x0bd5, 0x1bcd, 0x421c, 0xb289, 0xb250, 0xbf1e, 0x41b7, 0x44fa, 0xb0f3, 0x2760, 0x1c87, 0x189c, 0xb217, 0x41a3, 0xaf06, 0xbfb4, 0x422b, 0x2caf, 0x1b6f, 0x429c, 0x406b, 0x417d, 0x41c5, 0xa01c, 0xb258, 0x43ee, 0x1c6b, 0x4171, 0xb0ab, 0xa87d, 0x40e3, 0x1b3f, 0xba4a, 0xbf46, 0x3418, 0x19da, 0xa67e, 0x4223, 0x3401, 0x3b45, 0x2a8f, 0x45ab, 0xb249, 0xb2d7, 0x416d, 0xbf80, 0x1b06, 0xba61, 0x070c, 0xb2e8, 0x4394, 0x3fb6, 0x41b7, 0xbf56, 0x4087, 0x42fa, 0xb01d, 0x438c, 0x1fb3, 0xbae0, 0xb01a, 0xa6da, 0x4396, 0xb009, 0x3260, 0x4347, 0x4097, 0xb06f, 0x42b9, 0x2e15, 0xb033, 0x4253, 0x43a3, 0x0261, 0x1e9b, 0x4657, 0xb2fb, 0xb288, 0xbf9e, 0x42ed, 0x43d9, 0xba33, 0x4770, 0xe7fe + ], + StartRegs = [0x3e63c940, 0xd2f40362, 0xbb77737e, 0x677685e4, 0x97ccf408, 0x3dfa0433, 0x43332c01, 0xa5fc83ef, 0x5b5a10e7, 0x93fd7fe6, 0xe271cf59, 0xac70a2fd, 0xc4be1954, 0x93de22cc, 0x00000000, 0x900001f0 + ], + FinalRegs = [0x00000000, 0x00000000, 0xfffff05f, 0x00000059, 0x00000000, 0x00000020, 0x00001000, 0xe271cf59, 0x49f6f315, 0x93de1f28, 0xe271cf59, 0x00000000, 0x00000000, 0x93de1f1c, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x4010, 0x421c, 0x3d78, 0x4344, 0x43d7, 0x401a, 0x1ce0, 0x4051, 0xb2b6, 0x0a48, 0xbad9, 0x4206, 0x4163, 0x1efa, 0x402d, 0x1e69, 0x4221, 0xbfba, 0x4154, 0xb2b8, 0x19e2, 0xb243, 0x15ea, 0x406b, 0x46d3, 0x4546, 0x417a, 0x41b7, 0xba61, 0x41fd, 0x41d5, 0x45bd, 0xb0fa, 0x0951, 0x454f, 0x0377, 0x4262, 0xb097, 0xb04b, 0xb277, 0x37da, 0xbfcc, 0x15dc, 0x4385, 0x18c8, 0xb22d, 0x412b, 0xb029, 0xba75, 0x411d, 0x14c5, 0x456f, 0xbaf2, 0xba3d, 0x45f3, 0xb0da, 0xb087, 0x4253, 0x411a, 0xb2fa, 0x469d, 0x44cd, 0x0459, 0x4410, 0x1378, 0x1239, 0xbf2d, 0x423d, 0x070b, 0x4353, 0x43a9, 0xb015, 0x4301, 0xbae3, 0x0c4b, 0x46bd, 0x4013, 0x3765, 0x4147, 0xbf59, 0x1d79, 0x2918, 0xb014, 0xb223, 0x4202, 0x1ceb, 0x18bb, 0x4274, 0xaa53, 0x4201, 0xbacc, 0xa37f, 0xb0af, 0x411f, 0x41cf, 0x186b, 0x40cd, 0x14ec, 0x4018, 0x435d, 0x327d, 0x43eb, 0x4305, 0xbf64, 0x13ef, 0x40d6, 0x4095, 0x369f, 0x4065, 0x41b3, 0x1cc7, 0xbf8b, 0xb297, 0x432e, 0x4268, 0x4002, 0x430a, 0x4479, 0xb048, 0x421e, 0x1ca3, 0xa979, 0xb01d, 0x4459, 0x07f7, 0xb262, 0x1862, 0xb289, 0xb211, 0xbac9, 0x43cd, 0xbfdf, 0xb072, 0x421a, 0x412d, 0x2962, 0x46ec, 0xb09e, 0x1e20, 0x44c1, 0xbfd1, 0xb00c, 0x437b, 0x18ee, 0x41e2, 0xba0c, 0xba2c, 0x04b5, 0xb05b, 0x4596, 0xa87e, 0x422a, 0x40cc, 0x4002, 0x40a3, 0xb041, 0xbf8b, 0x40d4, 0xb0c0, 0x41b8, 0x45e3, 0x3460, 0xb24b, 0xb285, 0xbf04, 0x4225, 0x4064, 0x420a, 0xbf34, 0x43ed, 0x0cab, 0x4194, 0x0ffb, 0x41b8, 0x43e0, 0x4173, 0xbf9a, 0x3fab, 0x210e, 0xa820, 0x426a, 0x4395, 0x43ee, 0x3657, 0xbfc0, 0x430b, 0x438b, 0x1b6d, 0x1c7b, 0xb231, 0x42f2, 0x439e, 0x4389, 0x41b5, 0x4082, 0x1de1, 0x1ca6, 0xbfd0, 0x34cc, 0x1dda, 0xae7c, 0x4181, 0xbf2f, 0x410f, 0xbaf2, 0x40aa, 0x409e, 0x13c8, 0x4076, 0x1bd4, 0x4020, 0x4128, 0xba1f, 0xb24b, 0xa578, 0xaabf, 0x4049, 0xa063, 0x418b, 0xbafd, 0x407c, 0xb234, 0x4380, 0x4288, 0x43e2, 0xbf38, 0x422b, 0xbf80, 0x43b2, 0x43fc, 0x3c13, 0x4282, 0xab63, 0x41db, 0x298d, 0xba1e, 0x1f37, 0x41e6, 0x464d, 0xb031, 0x4380, 0x467c, 0x1b44, 0xbf07, 0x1891, 0x0bcc, 0x420c, 0x4330, 0x4038, 0x4155, 0x4162, 0x4421, 0x4071, 0xbafd, 0x1b7a, 0x42b8, 0x37f8, 0x46aa, 0x0159, 0xb28a, 0x43cf, 0x43ba, 0xb056, 0x43b4, 0xb067, 0xbf35, 0x46fa, 0x40e7, 0x45c4, 0x42dd, 0xbfa3, 0x1995, 0x407b, 0x3862, 0x43bd, 0x0793, 0xbaf8, 0x1f40, 0x40fd, 0x1a53, 0xbf7f, 0x384d, 0x261a, 0x416d, 0x4200, 0x204f, 0x40e1, 0xb0eb, 0x0a31, 0x43ac, 0xb266, 0x1b0e, 0x4127, 0x27e7, 0x4570, 0x2786, 0x40e4, 0xb23c, 0x44dd, 0x4125, 0xbf6a, 0x402a, 0x40f1, 0x4161, 0x45f1, 0x18cf, 0x1e84, 0xba1e, 0x42dd, 0x406e, 0x09d5, 0xbac2, 0xaa6d, 0x4128, 0x226e, 0xb26e, 0xaf3c, 0x0e65, 0xbf75, 0x45d1, 0x18a2, 0x433e, 0x2402, 0x41e3, 0x43cb, 0x427f, 0xbac3, 0x4180, 0x1df8, 0x41c7, 0x1bf7, 0x439f, 0xab0c, 0x4463, 0xbf4a, 0x43d8, 0x44ba, 0x415a, 0x40d1, 0x4167, 0x4026, 0x0966, 0x423e, 0x1de0, 0x41f5, 0xb07c, 0x4628, 0x4288, 0x460a, 0x1376, 0xbf94, 0x4364, 0x41f7, 0x43de, 0xba74, 0x4027, 0x4453, 0x1dd1, 0x1a65, 0xa7ce, 0xb2c5, 0x4658, 0xb29b, 0xb2b8, 0x18be, 0xb2bc, 0xb022, 0x402c, 0xba7a, 0x0b2a, 0x40d6, 0xba03, 0xbf27, 0x4613, 0x1739, 0x1c8d, 0xb258, 0x1f23, 0xba74, 0x45e6, 0x1b3c, 0x4090, 0x0567, 0xbf4c, 0x1e05, 0xba36, 0xb2a9, 0xbfa5, 0xbae7, 0xafde, 0xba56, 0xb2c6, 0x08f6, 0xb0e6, 0x42dd, 0xbf74, 0xb0a8, 0x2a22, 0x1c73, 0x0bf3, 0xa2ab, 0x4359, 0x07b8, 0x40ea, 0x4207, 0xba17, 0x3f61, 0x1f21, 0x4040, 0x41ed, 0xbae2, 0xba23, 0x42d9, 0xb2e5, 0xa1b9, 0xb0a8, 0xa31a, 0xbf02, 0x1e10, 0xba2a, 0xb20d, 0x4261, 0x4013, 0x1b84, 0x40ce, 0xb218, 0xabc9, 0x1aa3, 0xba7f, 0x42e1, 0x4322, 0x41a1, 0x2a78, 0x4245, 0x46f0, 0x4189, 0x4164, 0xb080, 0x4003, 0x145d, 0xbf67, 0xba42, 0xa206, 0x1c5f, 0x4353, 0x441d, 0xb220, 0xbf3f, 0xba17, 0x416a, 0xb04e, 0x40e8, 0x40f1, 0x41ca, 0xbfb5, 0xba7b, 0xb2e2, 0x1300, 0xb0d2, 0xb03d, 0x435e, 0xb297, 0x1980, 0x4074, 0xbfcc, 0xa9ef, 0x0790, 0x464b, 0x3062, 0x4238, 0x3c74, 0x1fad, 0x34e8, 0x467f, 0xaa62, 0xa96d, 0xbf13, 0xbad9, 0x1c8e, 0xb21f, 0x4236, 0x4249, 0x40d1, 0x4371, 0x4130, 0x4066, 0x274a, 0x4073, 0xb2ee, 0x2f2d, 0x1a18, 0x26db, 0xb206, 0xb26b, 0x44d0, 0xb21e, 0x0cc4, 0xba08, 0x401b, 0xb0a5, 0xbf3b, 0x4362, 0xbf70, 0x4205, 0x432f, 0xba36, 0x4015, 0xb264, 0x4021, 0xb2e6, 0x40ff, 0x4323, 0xbadb, 0x22db, 0x0a58, 0xbf90, 0xb2a7, 0x378b, 0xbfc0, 0x4334, 0x41ff, 0x41a6, 0xab67, 0x4149, 0x42bf, 0x4295, 0xbf00, 0xbf82, 0xa510, 0xb2ac, 0x429a, 0x1e48, 0x2779, 0x4316, 0x1d29, 0x41b7, 0x408a, 0x4213, 0xba3c, 0x1423, 0xbfd2, 0x4647, 0x41ed, 0x219f, 0xbf8f, 0xba7d, 0x1ada, 0x1e7f, 0x3e40, 0x4325, 0x4166, 0x4206, 0x4335, 0x33d2, 0xb22b, 0x1f30, 0x42da, 0x402e, 0x43c6, 0xbfd6, 0x4312, 0xb2d3, 0x41c1, 0xb22a, 0x438d, 0x02af, 0xbf4a, 0x41d6, 0x0ac5, 0x40eb, 0xb00d, 0x41c8, 0x09ce, 0xb276, 0xbfd3, 0x24d8, 0x44b9, 0x4581, 0x4156, 0x071a, 0xba20, 0xb2ee, 0x41cd, 0xa9ca, 0xbf80, 0x2ad3, 0x4242, 0x4040, 0x1ba8, 0xb2c0, 0x41df, 0xbfab, 0xbad7, 0x1efd, 0x418e, 0xba0d, 0x2484, 0x41d0, 0x1b17, 0x402f, 0xb2c3, 0xb062, 0x02be, 0xbfbe, 0x0c82, 0x41c5, 0xba53, 0xa095, 0xa516, 0x1939, 0x43bf, 0x1e52, 0x408a, 0x2dff, 0x4001, 0x4146, 0x439e, 0x4397, 0xbf00, 0x40db, 0xba6a, 0x4445, 0x429d, 0xb2f1, 0x1d3d, 0x43a0, 0xbf74, 0x4246, 0xb096, 0xa063, 0xb269, 0x3cbc, 0x4552, 0xb221, 0xba52, 0xbadc, 0x4211, 0x3825, 0xb2db, 0xbfa0, 0xba0c, 0x3ad0, 0xb261, 0x4170, 0x430c, 0x41ec, 0x1dd5, 0x0d4d, 0x4140, 0x1a8b, 0x1904, 0xbfa5, 0x41f9, 0xba0c, 0x436d, 0x1d2a, 0x3b51, 0xba39, 0x4014, 0x40f5, 0x40a8, 0x415d, 0x2e7c, 0x3625, 0xb283, 0x421b, 0x2b20, 0x205e, 0x2a8e, 0x43be, 0xba39, 0xbf33, 0x4173, 0x2675, 0x10d5, 0x284b, 0x4227, 0xaaa0, 0x1bcb, 0x1c0e, 0x2a8d, 0x43fa, 0x417e, 0x4379, 0x4096, 0x1d43, 0x409a, 0x42b3, 0xba76, 0x0be7, 0x4316, 0xaed0, 0xbf1d, 0x407c, 0x42da, 0x18c3, 0x1f4d, 0x420e, 0x2a5f, 0xbfa9, 0x40a8, 0x1eb0, 0x4273, 0x40ea, 0x43d0, 0x07e3, 0xb210, 0xba4c, 0x41a8, 0xb294, 0xbf5d, 0x1a32, 0xbafd, 0x4031, 0xa0dc, 0xb2d0, 0x40bb, 0x431e, 0xbf73, 0x4186, 0x4054, 0x36b8, 0x40f2, 0x18fa, 0x1dc6, 0x431a, 0x4298, 0x43a4, 0x25c7, 0x1976, 0x1aa5, 0x41e8, 0x43cb, 0xbfb0, 0xbf58, 0x4328, 0xbf02, 0x43ad, 0x4118, 0xb0b3, 0x40cc, 0x24f8, 0x40e8, 0x4127, 0xa3a1, 0x30df, 0xb238, 0x3b0a, 0xb274, 0x4210, 0xb296, 0x4131, 0xb2dc, 0x37ca, 0x4243, 0x405c, 0x45ab, 0xbf2b, 0x270b, 0xbae4, 0x1bcd, 0x4396, 0x438b, 0x1ed0, 0xbf80, 0x2b6e, 0x436a, 0xb2ea, 0x437f, 0x4606, 0x1f3f, 0x4269, 0x0f94, 0xb223, 0x0628, 0xbf98, 0xbf60, 0xb234, 0xb23d, 0x43be, 0x4137, 0x40fe, 0x41f4, 0x40f5, 0xa3f3, 0xb2ba, 0xba6a, 0x4126, 0x4364, 0xb2f1, 0x42e2, 0xba6b, 0xb0b8, 0x199e, 0xb22a, 0x41e9, 0x461f, 0x431f, 0x44cd, 0x1bdb, 0x1b8e, 0x1deb, 0xbf3c, 0x253b, 0x4355, 0x41ad, 0x4340, 0x40ab, 0x1952, 0x40d0, 0x1cee, 0x43cd, 0xbad6, 0x2461, 0xbf28, 0x28e7, 0xbad3, 0x4420, 0xb29b, 0x436d, 0xb01c, 0xa3bc, 0x4173, 0x4194, 0xb2f1, 0x4298, 0xb0d3, 0xbfb0, 0xb200, 0x415d, 0x406e, 0xba4e, 0x4182, 0x41a4, 0x4207, 0x40dc, 0xbaec, 0x193c, 0x415a, 0x4317, 0xbf83, 0x1e0b, 0x3d29, 0x40a1, 0x4333, 0xb046, 0xaf27, 0x1988, 0xb28a, 0xb204, 0x16d6, 0xac6b, 0x425b, 0x1f0d, 0x4251, 0x408e, 0x42de, 0x464c, 0xbfae, 0x40e7, 0x44b8, 0x43fc, 0x4065, 0x4333, 0x4479, 0x0559, 0xbaeb, 0xb252, 0x41f3, 0x4380, 0xb230, 0x46c0, 0x44a0, 0xbf8e, 0xb023, 0x4288, 0x4017, 0x406b, 0x4288, 0x4398, 0x18cc, 0xabdd, 0x429a, 0x42ab, 0xbf95, 0x43f2, 0x4057, 0x4442, 0x40ee, 0x4111, 0x4358, 0xa518, 0x34fa, 0x4180, 0x3ecd, 0x4223, 0xb265, 0x42a4, 0x1f7c, 0xb296, 0x1d3c, 0x430f, 0x442d, 0x4307, 0x437a, 0xbf27, 0x1d82, 0x391c, 0xb2a8, 0xbae1, 0x40a0, 0x41b3, 0x40e2, 0xb27e, 0x43a4, 0xafdf, 0x43ad, 0xb024, 0x40e0, 0x4048, 0x3c42, 0x1d9d, 0x1954, 0x0cd9, 0xbf4b, 0x4236, 0xa2ef, 0x424e, 0xbac2, 0xba67, 0x4103, 0x43eb, 0x1d60, 0x459e, 0x4059, 0x41b5, 0xbf83, 0x4310, 0xba42, 0x3684, 0xb299, 0x43ca, 0x1f66, 0x43e1, 0x1358, 0xb08d, 0x41ee, 0x1b3a, 0x4386, 0x40ad, 0x43fd, 0x4653, 0xb0bc, 0xb2ac, 0x405b, 0x037e, 0x418c, 0x1887, 0x42bd, 0x05ee, 0x46ed, 0x4238, 0x4062, 0x43f9, 0xbfad, 0x461f, 0xb0fa, 0x3e21, 0x411c, 0x403b, 0x2342, 0x3259, 0x076d, 0xbf81, 0x4009, 0x4152, 0xba08, 0x1811, 0x4312, 0x32f2, 0x1b6f, 0x408c, 0x43d8, 0x437e, 0x40c1, 0x40a1, 0x40cd, 0x43af, 0x2042, 0x4342, 0x4082, 0x4029, 0xa300, 0xbf49, 0xb076, 0x421e, 0x45a2, 0x185f, 0xba07, 0x4283, 0x4306, 0x3c84, 0x454f, 0x42d5, 0x4071, 0xae63, 0xb2b0, 0xab50, 0x21b6, 0x4024, 0x4485, 0xb292, 0xb266, 0x424d, 0x1559, 0x0623, 0x42e7, 0xb2e3, 0x4094, 0xbf38, 0x4378, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xfbee3e06, 0xf7bc3994, 0x7ccee582, 0x65c6dfd8, 0x7d765d73, 0x2669bec2, 0x4d20d1a8, 0x414bdcb0, 0x53f02dc6, 0xad07dc25, 0xbd4dd249, 0x070bd4e7, 0x1404f4cb, 0x80985f65, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0x000061d2, 0xfffffdef, 0x00000000, 0x0000007c, 0xffffff7c, 0xffffff4a, 0x0000007c, 0x42000000, 0x0b273264, 0x00a885eb, 0x0b273265, 0xbd4dd249, 0x00000322, 0xbdf6c218, 0x00000000, 0xa00001d0 }, + Instructions = [0x4010, 0x421c, 0x3d78, 0x4344, 0x43d7, 0x401a, 0x1ce0, 0x4051, 0xb2b6, 0x0a48, 0xbad9, 0x4206, 0x4163, 0x1efa, 0x402d, 0x1e69, 0x4221, 0xbfba, 0x4154, 0xb2b8, 0x19e2, 0xb243, 0x15ea, 0x406b, 0x46d3, 0x4546, 0x417a, 0x41b7, 0xba61, 0x41fd, 0x41d5, 0x45bd, 0xb0fa, 0x0951, 0x454f, 0x0377, 0x4262, 0xb097, 0xb04b, 0xb277, 0x37da, 0xbfcc, 0x15dc, 0x4385, 0x18c8, 0xb22d, 0x412b, 0xb029, 0xba75, 0x411d, 0x14c5, 0x456f, 0xbaf2, 0xba3d, 0x45f3, 0xb0da, 0xb087, 0x4253, 0x411a, 0xb2fa, 0x469d, 0x44cd, 0x0459, 0x4410, 0x1378, 0x1239, 0xbf2d, 0x423d, 0x070b, 0x4353, 0x43a9, 0xb015, 0x4301, 0xbae3, 0x0c4b, 0x46bd, 0x4013, 0x3765, 0x4147, 0xbf59, 0x1d79, 0x2918, 0xb014, 0xb223, 0x4202, 0x1ceb, 0x18bb, 0x4274, 0xaa53, 0x4201, 0xbacc, 0xa37f, 0xb0af, 0x411f, 0x41cf, 0x186b, 0x40cd, 0x14ec, 0x4018, 0x435d, 0x327d, 0x43eb, 0x4305, 0xbf64, 0x13ef, 0x40d6, 0x4095, 0x369f, 0x4065, 0x41b3, 0x1cc7, 0xbf8b, 0xb297, 0x432e, 0x4268, 0x4002, 0x430a, 0x4479, 0xb048, 0x421e, 0x1ca3, 0xa979, 0xb01d, 0x4459, 0x07f7, 0xb262, 0x1862, 0xb289, 0xb211, 0xbac9, 0x43cd, 0xbfdf, 0xb072, 0x421a, 0x412d, 0x2962, 0x46ec, 0xb09e, 0x1e20, 0x44c1, 0xbfd1, 0xb00c, 0x437b, 0x18ee, 0x41e2, 0xba0c, 0xba2c, 0x04b5, 0xb05b, 0x4596, 0xa87e, 0x422a, 0x40cc, 0x4002, 0x40a3, 0xb041, 0xbf8b, 0x40d4, 0xb0c0, 0x41b8, 0x45e3, 0x3460, 0xb24b, 0xb285, 0xbf04, 0x4225, 0x4064, 0x420a, 0xbf34, 0x43ed, 0x0cab, 0x4194, 0x0ffb, 0x41b8, 0x43e0, 0x4173, 0xbf9a, 0x3fab, 0x210e, 0xa820, 0x426a, 0x4395, 0x43ee, 0x3657, 0xbfc0, 0x430b, 0x438b, 0x1b6d, 0x1c7b, 0xb231, 0x42f2, 0x439e, 0x4389, 0x41b5, 0x4082, 0x1de1, 0x1ca6, 0xbfd0, 0x34cc, 0x1dda, 0xae7c, 0x4181, 0xbf2f, 0x410f, 0xbaf2, 0x40aa, 0x409e, 0x13c8, 0x4076, 0x1bd4, 0x4020, 0x4128, 0xba1f, 0xb24b, 0xa578, 0xaabf, 0x4049, 0xa063, 0x418b, 0xbafd, 0x407c, 0xb234, 0x4380, 0x4288, 0x43e2, 0xbf38, 0x422b, 0xbf80, 0x43b2, 0x43fc, 0x3c13, 0x4282, 0xab63, 0x41db, 0x298d, 0xba1e, 0x1f37, 0x41e6, 0x464d, 0xb031, 0x4380, 0x467c, 0x1b44, 0xbf07, 0x1891, 0x0bcc, 0x420c, 0x4330, 0x4038, 0x4155, 0x4162, 0x4421, 0x4071, 0xbafd, 0x1b7a, 0x42b8, 0x37f8, 0x46aa, 0x0159, 0xb28a, 0x43cf, 0x43ba, 0xb056, 0x43b4, 0xb067, 0xbf35, 0x46fa, 0x40e7, 0x45c4, 0x42dd, 0xbfa3, 0x1995, 0x407b, 0x3862, 0x43bd, 0x0793, 0xbaf8, 0x1f40, 0x40fd, 0x1a53, 0xbf7f, 0x384d, 0x261a, 0x416d, 0x4200, 0x204f, 0x40e1, 0xb0eb, 0x0a31, 0x43ac, 0xb266, 0x1b0e, 0x4127, 0x27e7, 0x4570, 0x2786, 0x40e4, 0xb23c, 0x44dd, 0x4125, 0xbf6a, 0x402a, 0x40f1, 0x4161, 0x45f1, 0x18cf, 0x1e84, 0xba1e, 0x42dd, 0x406e, 0x09d5, 0xbac2, 0xaa6d, 0x4128, 0x226e, 0xb26e, 0xaf3c, 0x0e65, 0xbf75, 0x45d1, 0x18a2, 0x433e, 0x2402, 0x41e3, 0x43cb, 0x427f, 0xbac3, 0x4180, 0x1df8, 0x41c7, 0x1bf7, 0x439f, 0xab0c, 0x4463, 0xbf4a, 0x43d8, 0x44ba, 0x415a, 0x40d1, 0x4167, 0x4026, 0x0966, 0x423e, 0x1de0, 0x41f5, 0xb07c, 0x4628, 0x4288, 0x460a, 0x1376, 0xbf94, 0x4364, 0x41f7, 0x43de, 0xba74, 0x4027, 0x4453, 0x1dd1, 0x1a65, 0xa7ce, 0xb2c5, 0x4658, 0xb29b, 0xb2b8, 0x18be, 0xb2bc, 0xb022, 0x402c, 0xba7a, 0x0b2a, 0x40d6, 0xba03, 0xbf27, 0x4613, 0x1739, 0x1c8d, 0xb258, 0x1f23, 0xba74, 0x45e6, 0x1b3c, 0x4090, 0x0567, 0xbf4c, 0x1e05, 0xba36, 0xb2a9, 0xbfa5, 0xbae7, 0xafde, 0xba56, 0xb2c6, 0x08f6, 0xb0e6, 0x42dd, 0xbf74, 0xb0a8, 0x2a22, 0x1c73, 0x0bf3, 0xa2ab, 0x4359, 0x07b8, 0x40ea, 0x4207, 0xba17, 0x3f61, 0x1f21, 0x4040, 0x41ed, 0xbae2, 0xba23, 0x42d9, 0xb2e5, 0xa1b9, 0xb0a8, 0xa31a, 0xbf02, 0x1e10, 0xba2a, 0xb20d, 0x4261, 0x4013, 0x1b84, 0x40ce, 0xb218, 0xabc9, 0x1aa3, 0xba7f, 0x42e1, 0x4322, 0x41a1, 0x2a78, 0x4245, 0x46f0, 0x4189, 0x4164, 0xb080, 0x4003, 0x145d, 0xbf67, 0xba42, 0xa206, 0x1c5f, 0x4353, 0x441d, 0xb220, 0xbf3f, 0xba17, 0x416a, 0xb04e, 0x40e8, 0x40f1, 0x41ca, 0xbfb5, 0xba7b, 0xb2e2, 0x1300, 0xb0d2, 0xb03d, 0x435e, 0xb297, 0x1980, 0x4074, 0xbfcc, 0xa9ef, 0x0790, 0x464b, 0x3062, 0x4238, 0x3c74, 0x1fad, 0x34e8, 0x467f, 0xaa62, 0xa96d, 0xbf13, 0xbad9, 0x1c8e, 0xb21f, 0x4236, 0x4249, 0x40d1, 0x4371, 0x4130, 0x4066, 0x274a, 0x4073, 0xb2ee, 0x2f2d, 0x1a18, 0x26db, 0xb206, 0xb26b, 0x44d0, 0xb21e, 0x0cc4, 0xba08, 0x401b, 0xb0a5, 0xbf3b, 0x4362, 0xbf70, 0x4205, 0x432f, 0xba36, 0x4015, 0xb264, 0x4021, 0xb2e6, 0x40ff, 0x4323, 0xbadb, 0x22db, 0x0a58, 0xbf90, 0xb2a7, 0x378b, 0xbfc0, 0x4334, 0x41ff, 0x41a6, 0xab67, 0x4149, 0x42bf, 0x4295, 0xbf00, 0xbf82, 0xa510, 0xb2ac, 0x429a, 0x1e48, 0x2779, 0x4316, 0x1d29, 0x41b7, 0x408a, 0x4213, 0xba3c, 0x1423, 0xbfd2, 0x4647, 0x41ed, 0x219f, 0xbf8f, 0xba7d, 0x1ada, 0x1e7f, 0x3e40, 0x4325, 0x4166, 0x4206, 0x4335, 0x33d2, 0xb22b, 0x1f30, 0x42da, 0x402e, 0x43c6, 0xbfd6, 0x4312, 0xb2d3, 0x41c1, 0xb22a, 0x438d, 0x02af, 0xbf4a, 0x41d6, 0x0ac5, 0x40eb, 0xb00d, 0x41c8, 0x09ce, 0xb276, 0xbfd3, 0x24d8, 0x44b9, 0x4581, 0x4156, 0x071a, 0xba20, 0xb2ee, 0x41cd, 0xa9ca, 0xbf80, 0x2ad3, 0x4242, 0x4040, 0x1ba8, 0xb2c0, 0x41df, 0xbfab, 0xbad7, 0x1efd, 0x418e, 0xba0d, 0x2484, 0x41d0, 0x1b17, 0x402f, 0xb2c3, 0xb062, 0x02be, 0xbfbe, 0x0c82, 0x41c5, 0xba53, 0xa095, 0xa516, 0x1939, 0x43bf, 0x1e52, 0x408a, 0x2dff, 0x4001, 0x4146, 0x439e, 0x4397, 0xbf00, 0x40db, 0xba6a, 0x4445, 0x429d, 0xb2f1, 0x1d3d, 0x43a0, 0xbf74, 0x4246, 0xb096, 0xa063, 0xb269, 0x3cbc, 0x4552, 0xb221, 0xba52, 0xbadc, 0x4211, 0x3825, 0xb2db, 0xbfa0, 0xba0c, 0x3ad0, 0xb261, 0x4170, 0x430c, 0x41ec, 0x1dd5, 0x0d4d, 0x4140, 0x1a8b, 0x1904, 0xbfa5, 0x41f9, 0xba0c, 0x436d, 0x1d2a, 0x3b51, 0xba39, 0x4014, 0x40f5, 0x40a8, 0x415d, 0x2e7c, 0x3625, 0xb283, 0x421b, 0x2b20, 0x205e, 0x2a8e, 0x43be, 0xba39, 0xbf33, 0x4173, 0x2675, 0x10d5, 0x284b, 0x4227, 0xaaa0, 0x1bcb, 0x1c0e, 0x2a8d, 0x43fa, 0x417e, 0x4379, 0x4096, 0x1d43, 0x409a, 0x42b3, 0xba76, 0x0be7, 0x4316, 0xaed0, 0xbf1d, 0x407c, 0x42da, 0x18c3, 0x1f4d, 0x420e, 0x2a5f, 0xbfa9, 0x40a8, 0x1eb0, 0x4273, 0x40ea, 0x43d0, 0x07e3, 0xb210, 0xba4c, 0x41a8, 0xb294, 0xbf5d, 0x1a32, 0xbafd, 0x4031, 0xa0dc, 0xb2d0, 0x40bb, 0x431e, 0xbf73, 0x4186, 0x4054, 0x36b8, 0x40f2, 0x18fa, 0x1dc6, 0x431a, 0x4298, 0x43a4, 0x25c7, 0x1976, 0x1aa5, 0x41e8, 0x43cb, 0xbfb0, 0xbf58, 0x4328, 0xbf02, 0x43ad, 0x4118, 0xb0b3, 0x40cc, 0x24f8, 0x40e8, 0x4127, 0xa3a1, 0x30df, 0xb238, 0x3b0a, 0xb274, 0x4210, 0xb296, 0x4131, 0xb2dc, 0x37ca, 0x4243, 0x405c, 0x45ab, 0xbf2b, 0x270b, 0xbae4, 0x1bcd, 0x4396, 0x438b, 0x1ed0, 0xbf80, 0x2b6e, 0x436a, 0xb2ea, 0x437f, 0x4606, 0x1f3f, 0x4269, 0x0f94, 0xb223, 0x0628, 0xbf98, 0xbf60, 0xb234, 0xb23d, 0x43be, 0x4137, 0x40fe, 0x41f4, 0x40f5, 0xa3f3, 0xb2ba, 0xba6a, 0x4126, 0x4364, 0xb2f1, 0x42e2, 0xba6b, 0xb0b8, 0x199e, 0xb22a, 0x41e9, 0x461f, 0x431f, 0x44cd, 0x1bdb, 0x1b8e, 0x1deb, 0xbf3c, 0x253b, 0x4355, 0x41ad, 0x4340, 0x40ab, 0x1952, 0x40d0, 0x1cee, 0x43cd, 0xbad6, 0x2461, 0xbf28, 0x28e7, 0xbad3, 0x4420, 0xb29b, 0x436d, 0xb01c, 0xa3bc, 0x4173, 0x4194, 0xb2f1, 0x4298, 0xb0d3, 0xbfb0, 0xb200, 0x415d, 0x406e, 0xba4e, 0x4182, 0x41a4, 0x4207, 0x40dc, 0xbaec, 0x193c, 0x415a, 0x4317, 0xbf83, 0x1e0b, 0x3d29, 0x40a1, 0x4333, 0xb046, 0xaf27, 0x1988, 0xb28a, 0xb204, 0x16d6, 0xac6b, 0x425b, 0x1f0d, 0x4251, 0x408e, 0x42de, 0x464c, 0xbfae, 0x40e7, 0x44b8, 0x43fc, 0x4065, 0x4333, 0x4479, 0x0559, 0xbaeb, 0xb252, 0x41f3, 0x4380, 0xb230, 0x46c0, 0x44a0, 0xbf8e, 0xb023, 0x4288, 0x4017, 0x406b, 0x4288, 0x4398, 0x18cc, 0xabdd, 0x429a, 0x42ab, 0xbf95, 0x43f2, 0x4057, 0x4442, 0x40ee, 0x4111, 0x4358, 0xa518, 0x34fa, 0x4180, 0x3ecd, 0x4223, 0xb265, 0x42a4, 0x1f7c, 0xb296, 0x1d3c, 0x430f, 0x442d, 0x4307, 0x437a, 0xbf27, 0x1d82, 0x391c, 0xb2a8, 0xbae1, 0x40a0, 0x41b3, 0x40e2, 0xb27e, 0x43a4, 0xafdf, 0x43ad, 0xb024, 0x40e0, 0x4048, 0x3c42, 0x1d9d, 0x1954, 0x0cd9, 0xbf4b, 0x4236, 0xa2ef, 0x424e, 0xbac2, 0xba67, 0x4103, 0x43eb, 0x1d60, 0x459e, 0x4059, 0x41b5, 0xbf83, 0x4310, 0xba42, 0x3684, 0xb299, 0x43ca, 0x1f66, 0x43e1, 0x1358, 0xb08d, 0x41ee, 0x1b3a, 0x4386, 0x40ad, 0x43fd, 0x4653, 0xb0bc, 0xb2ac, 0x405b, 0x037e, 0x418c, 0x1887, 0x42bd, 0x05ee, 0x46ed, 0x4238, 0x4062, 0x43f9, 0xbfad, 0x461f, 0xb0fa, 0x3e21, 0x411c, 0x403b, 0x2342, 0x3259, 0x076d, 0xbf81, 0x4009, 0x4152, 0xba08, 0x1811, 0x4312, 0x32f2, 0x1b6f, 0x408c, 0x43d8, 0x437e, 0x40c1, 0x40a1, 0x40cd, 0x43af, 0x2042, 0x4342, 0x4082, 0x4029, 0xa300, 0xbf49, 0xb076, 0x421e, 0x45a2, 0x185f, 0xba07, 0x4283, 0x4306, 0x3c84, 0x454f, 0x42d5, 0x4071, 0xae63, 0xb2b0, 0xab50, 0x21b6, 0x4024, 0x4485, 0xb292, 0xb266, 0x424d, 0x1559, 0x0623, 0x42e7, 0xb2e3, 0x4094, 0xbf38, 0x4378, 0x4770, 0xe7fe + ], + StartRegs = [0xfbee3e06, 0xf7bc3994, 0x7ccee582, 0x65c6dfd8, 0x7d765d73, 0x2669bec2, 0x4d20d1a8, 0x414bdcb0, 0x53f02dc6, 0xad07dc25, 0xbd4dd249, 0x070bd4e7, 0x1404f4cb, 0x80985f65, 0x00000000, 0x700001f0 + ], + FinalRegs = [0x000061d2, 0xfffffdef, 0x00000000, 0x0000007c, 0xffffff7c, 0xffffff4a, 0x0000007c, 0x42000000, 0x0b273264, 0x00a885eb, 0x0b273265, 0xbd4dd249, 0x00000322, 0xbdf6c218, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0xba5b, 0x07d6, 0x17ae, 0x42a8, 0x465e, 0x4335, 0x121d, 0xa28d, 0x4605, 0x4319, 0x4115, 0x1eed, 0x40b7, 0x43ba, 0x4680, 0x4079, 0x4604, 0xb239, 0x41f3, 0x40fa, 0xba5e, 0x4247, 0xba6d, 0x42ce, 0xbfb7, 0xba11, 0x4025, 0xbfa0, 0x4034, 0xb096, 0x1948, 0x4194, 0x42a7, 0x43b5, 0x416e, 0x40a9, 0x42db, 0x4601, 0xbf38, 0xb2e6, 0x426f, 0x444a, 0x40ee, 0x44ed, 0x44d1, 0x4000, 0xb215, 0x30a0, 0xba5a, 0xb261, 0x41bb, 0xb00b, 0xbf6c, 0xbae1, 0x0ef2, 0x431c, 0x00d4, 0x446c, 0x4357, 0x42d7, 0x2fd0, 0xb224, 0xb099, 0x424c, 0x1b9f, 0x01d3, 0x40e7, 0x3e10, 0x4648, 0xbfcb, 0x0411, 0xba0b, 0x40bb, 0xbac8, 0x24c9, 0x42cf, 0xba3d, 0x01fa, 0x1a3f, 0x03a8, 0x28e0, 0x42e1, 0x40b4, 0xb24b, 0x1cd5, 0xb2c8, 0x43ef, 0x2f59, 0x18d0, 0xa4b2, 0xba71, 0x2bb4, 0xb088, 0x21d1, 0xb2db, 0xb2b4, 0xbfb7, 0x1d84, 0x1c34, 0x438f, 0x40d3, 0x4542, 0xaf8e, 0xbad0, 0x4106, 0x28c9, 0x4102, 0x40e9, 0x42d2, 0xbf2c, 0xb203, 0xb295, 0x4262, 0x42ab, 0xbfca, 0x4477, 0x43df, 0x425f, 0xb2b8, 0x425d, 0xb2f7, 0x1d27, 0x40e0, 0x41d8, 0x40e2, 0x3bf3, 0x40f4, 0x416c, 0x17a2, 0xa33f, 0xb254, 0xba60, 0xb056, 0xbfd7, 0x4208, 0xb025, 0x4590, 0x18f9, 0xb20c, 0xba78, 0xb059, 0xba72, 0x2cea, 0x0a1e, 0xbf00, 0xaaee, 0x4651, 0x4315, 0xbaf9, 0x42c3, 0x4176, 0xa362, 0x0638, 0x2acd, 0x1a26, 0xb251, 0x40c7, 0x4469, 0x410c, 0xbfd7, 0x43a1, 0x419c, 0x4093, 0x43d5, 0x3b5f, 0x33cf, 0xa83a, 0x4160, 0xb222, 0x41bf, 0xb2c9, 0x4324, 0x1fd8, 0x1cd4, 0xb0ab, 0x427b, 0xbaf5, 0x407f, 0xbf63, 0x19af, 0xa6ef, 0x438b, 0x43cb, 0xbfc0, 0x4367, 0x428f, 0x4088, 0x4219, 0xb273, 0x0619, 0x4385, 0x420f, 0x46e3, 0x4466, 0xb019, 0x4366, 0x402f, 0xbf36, 0xb2b2, 0x2705, 0x1202, 0x0143, 0xbfa7, 0xbfc0, 0xad30, 0x42ee, 0x4279, 0x4273, 0x1d83, 0x432e, 0xb2fd, 0x42af, 0xbfd7, 0x4304, 0xba66, 0x1f02, 0x04b7, 0x4547, 0x0537, 0x4478, 0x4396, 0x421a, 0xbf64, 0x421e, 0x2be3, 0x41cd, 0x43fd, 0x435c, 0x4205, 0xa4ee, 0x439a, 0x4270, 0x42cd, 0x435b, 0x4057, 0x2f2c, 0xb22c, 0x27ee, 0x43df, 0xb2bd, 0x40ce, 0x17f1, 0xbf58, 0x4179, 0xba3d, 0x4036, 0x4150, 0xa831, 0xba54, 0x4278, 0x4270, 0x1454, 0x42e3, 0x4099, 0xb253, 0x41b7, 0x1c6d, 0x4148, 0x4158, 0xb096, 0x4495, 0xb07e, 0xbaca, 0xb2b8, 0x1b78, 0xbf53, 0xb2a8, 0xb2a0, 0x3743, 0xba20, 0x41cc, 0x1435, 0x438c, 0x4074, 0xb09f, 0xb291, 0x1fb0, 0x4040, 0xbafc, 0x1ebc, 0x14da, 0xbfa0, 0x4235, 0xb22c, 0x41b4, 0x3a86, 0x433a, 0xbfa8, 0xb047, 0x4639, 0xbadf, 0x4225, 0x43f8, 0x0dab, 0xa751, 0xbff0, 0x4347, 0xbfb6, 0xba06, 0xbadf, 0xb084, 0x06c0, 0x2b46, 0x42b3, 0x014f, 0x0b86, 0xba4f, 0x44ab, 0xb2c4, 0x154e, 0xb24e, 0xbaf5, 0xa94c, 0x30d0, 0x435b, 0xbaeb, 0xbfa3, 0x41fc, 0xba0e, 0x4180, 0xba0b, 0x1810, 0x0d4e, 0xba04, 0x0f96, 0xb0db, 0x4117, 0x4335, 0x4314, 0x3157, 0xb26d, 0x4554, 0xb23a, 0xb2ad, 0x3ee7, 0x3bcf, 0xba46, 0x42cc, 0x415a, 0x421b, 0x43bf, 0xbf80, 0x1b5d, 0xba10, 0x099c, 0x421d, 0xbf32, 0x20d0, 0xb21d, 0xacf5, 0xba23, 0x4120, 0x4102, 0xbaf4, 0xbfa8, 0x2f4b, 0x1913, 0x2795, 0x43fe, 0x4472, 0x4419, 0x4224, 0x423b, 0xba6a, 0x33f4, 0x466a, 0x0602, 0x42e6, 0x45c5, 0x0a3f, 0xb279, 0xb294, 0x42cb, 0x4013, 0xb2f7, 0x41ce, 0x1fbe, 0x4229, 0x41eb, 0xbf5d, 0x0f87, 0x4120, 0x4233, 0x410a, 0x3a7d, 0x1365, 0x4633, 0x42f0, 0xba0c, 0x415a, 0x438f, 0xb062, 0x42f1, 0x4205, 0xba13, 0xbfa5, 0xb221, 0xb2eb, 0x436a, 0xb2cf, 0xb241, 0x4120, 0x4233, 0x446e, 0x40c9, 0x3943, 0xb2c5, 0x0b33, 0x13f7, 0xb236, 0xa84f, 0x415a, 0xb09b, 0x43e2, 0x4105, 0xbfc0, 0x438e, 0x1901, 0x4146, 0xbf52, 0xa619, 0xba67, 0x4354, 0x3f22, 0x430e, 0x44d5, 0x1fbf, 0x413b, 0xa872, 0x4304, 0xba65, 0xb27e, 0xb20f, 0x41a5, 0xbade, 0x4157, 0xaeb4, 0x423d, 0x42fa, 0xbfc1, 0x4416, 0x434d, 0x44ea, 0xb239, 0x4594, 0x0037, 0xbf1b, 0x1864, 0x42d5, 0xba2f, 0x017e, 0x4065, 0xb0bc, 0x13a1, 0xbfa0, 0x43b2, 0x41a4, 0xb269, 0x46d1, 0xb27b, 0x410e, 0xb24b, 0xbf06, 0xb061, 0x0c0c, 0xb294, 0x4010, 0x1e48, 0x435f, 0xa4ab, 0xb2db, 0x248f, 0xa37f, 0x403a, 0xb0df, 0x4023, 0x42ba, 0x42dd, 0x1e2d, 0x4299, 0x41a2, 0x2d1b, 0x2b1b, 0x41f5, 0x194d, 0x422c, 0xb23b, 0x427d, 0xb2a0, 0xbf1a, 0xab55, 0x43ca, 0xa750, 0xa102, 0xbaed, 0xbff0, 0xba5f, 0x4274, 0xb28e, 0xa5be, 0x40e5, 0xb20e, 0x4173, 0x2778, 0xb26b, 0xa8ff, 0x18f0, 0x4036, 0xbf65, 0x1b9b, 0x46ec, 0xb0bf, 0x4017, 0x4126, 0x2f2d, 0x3504, 0xb05a, 0x45e5, 0x4053, 0x41f7, 0x43d1, 0x417c, 0x421c, 0xbfe2, 0x4377, 0x1723, 0xbff0, 0x46c2, 0xa232, 0xaec0, 0xba6c, 0xb251, 0xb2f6, 0x4060, 0x404f, 0x1ce5, 0xbf88, 0x4655, 0x1a5a, 0x403d, 0xba12, 0x19c7, 0xba50, 0x4169, 0x4106, 0x4250, 0xb291, 0x42c7, 0x4347, 0x27bd, 0x2c35, 0x0626, 0x1ec8, 0x0280, 0x400e, 0x2bf8, 0xb263, 0xb2af, 0xb01d, 0xba2b, 0x1cf0, 0xbfdf, 0x431f, 0x4604, 0xb295, 0xba0c, 0xb218, 0x4325, 0x213d, 0x415a, 0xb0aa, 0x410d, 0x41d0, 0x18ec, 0x445d, 0x4031, 0x1a49, 0xbaf3, 0x4089, 0x4001, 0x42c8, 0x40d9, 0x1fd4, 0xbf3f, 0x41ab, 0xa638, 0x42fa, 0x1c8f, 0xa077, 0x1b97, 0xb204, 0x4210, 0x42f2, 0x1b51, 0xb0ed, 0x1bc5, 0xb25f, 0xba2d, 0x335d, 0x3031, 0x15d4, 0x403d, 0xa32c, 0xbadb, 0x41be, 0xbf33, 0xba5e, 0xba5f, 0x45ba, 0xb01a, 0x4214, 0xbad1, 0xbf82, 0x429c, 0x171a, 0x1728, 0xbfb2, 0x413e, 0xac11, 0x42bc, 0x4149, 0x41b5, 0x433a, 0xb26f, 0x1d40, 0x461b, 0x4046, 0xb243, 0xb2fc, 0x4259, 0x1b06, 0x4253, 0x4179, 0x4369, 0xba48, 0x403d, 0xb2b1, 0xb06f, 0xb21c, 0x4122, 0x2dc7, 0xbf9d, 0x43c5, 0xb2cd, 0xa4b1, 0x417e, 0xb232, 0x42e0, 0xbfdc, 0xb073, 0xb2a0, 0x1caa, 0xb2d4, 0x4037, 0x16f9, 0x05b2, 0xbf00, 0x43f5, 0x4135, 0x43d8, 0x4115, 0x42e9, 0xb248, 0x4037, 0xb274, 0xb249, 0x4284, 0x3542, 0x3c24, 0xa2e5, 0x1a2f, 0x40d1, 0xb2e3, 0x41da, 0x4255, 0xbf0f, 0x2d1a, 0x46d8, 0x422c, 0x28a3, 0x1c9e, 0x1f60, 0xb0a9, 0xb08f, 0x4056, 0x19b4, 0xb20b, 0xba7b, 0x4308, 0x40de, 0xb204, 0x4684, 0x4179, 0x0f4b, 0xb2e6, 0x45f0, 0x43f6, 0x43f6, 0x4181, 0xb2ab, 0xbf82, 0xb242, 0x2355, 0xb227, 0x1e77, 0x403d, 0x4381, 0x404c, 0x427e, 0x4220, 0xbfd0, 0x3630, 0xb282, 0xbf75, 0x1fe1, 0x1f1f, 0x288b, 0x40f3, 0x46f9, 0x39bb, 0x4328, 0x407f, 0x4245, 0x434a, 0xae95, 0x41c9, 0xba43, 0x09d6, 0x4179, 0xa589, 0x1d18, 0x1cdd, 0x42dc, 0xbf02, 0x35d5, 0x43c8, 0x4270, 0x403c, 0xba6d, 0x42ea, 0xbf65, 0x1ade, 0x2288, 0x4660, 0x437f, 0x4281, 0xba01, 0xb2e8, 0x4248, 0x46d1, 0xba30, 0x41b0, 0xb21e, 0x4017, 0x024f, 0x4305, 0x40cb, 0xb29c, 0x40d0, 0x0b3f, 0x0661, 0xb2fc, 0x4083, 0x196d, 0xb2aa, 0x3149, 0xbfc9, 0x41ae, 0x40ea, 0x4126, 0x462a, 0x42e4, 0x434f, 0x4242, 0xb2e1, 0x43de, 0x43e2, 0x41cb, 0x4112, 0xba58, 0x42c6, 0x426d, 0xb082, 0x43e7, 0x419e, 0x43ad, 0x4576, 0x42a1, 0x40a6, 0xbf54, 0x40a9, 0xbac0, 0xb254, 0x1bc9, 0x3ef4, 0xba5a, 0xa96a, 0x40a2, 0x4688, 0xb2a4, 0xba68, 0xb21e, 0xb2a2, 0xbf38, 0x0405, 0xb219, 0x2f28, 0x40fb, 0xb23c, 0xb29e, 0x4035, 0xb0cc, 0x4653, 0x4006, 0x460b, 0xbf3c, 0x427b, 0x4182, 0x4274, 0xbff0, 0x4252, 0x1272, 0xbfa4, 0xae65, 0x0ca1, 0x14f9, 0x00b0, 0x40b8, 0xba23, 0x4349, 0xbfa3, 0x4461, 0x063b, 0xb229, 0x41eb, 0xb224, 0x4124, 0xb0cc, 0x4342, 0x3167, 0x42c9, 0x1d8e, 0x4626, 0x3374, 0x4167, 0x4060, 0x45dd, 0x1ad6, 0x3446, 0x4237, 0x442f, 0x4214, 0x1d7c, 0x46c5, 0x42c7, 0x4491, 0x3e38, 0x1d56, 0x42cc, 0xaec2, 0xbf8e, 0x4090, 0xba77, 0x45d4, 0x40e8, 0x190e, 0x1b87, 0x0e51, 0xba73, 0x0806, 0xb206, 0xbf46, 0x4326, 0x111b, 0xba4a, 0x1b79, 0xa71d, 0x42a8, 0x4294, 0x423c, 0x4667, 0xba77, 0x4110, 0x43a9, 0x1d4d, 0x42c5, 0xb2f7, 0xb216, 0x40d9, 0xb06f, 0x43ba, 0x41b9, 0x467f, 0xa135, 0xbaee, 0x40e7, 0xbfc6, 0xb241, 0xa4a6, 0x423b, 0x408e, 0x364b, 0xa098, 0x4005, 0xb275, 0xb0f2, 0xba79, 0xbfa0, 0x4387, 0x41d9, 0x0761, 0xb251, 0x418c, 0xba33, 0xbf51, 0x4007, 0xb256, 0x44c3, 0xb212, 0x434f, 0x40b4, 0x0edf, 0x4546, 0x4343, 0x45b3, 0xb29c, 0x40fe, 0x341e, 0x1af1, 0x42dc, 0x1c07, 0xba79, 0x08bb, 0xbfc7, 0x16a1, 0x4655, 0x1fe7, 0x4235, 0xbf3d, 0x338e, 0x43a2, 0x36ad, 0x2e82, 0xa991, 0x423e, 0xba76, 0xba17, 0x1a36, 0xbad3, 0x42e4, 0x41d8, 0xb206, 0x41fd, 0x3bb8, 0x42a0, 0xb2ec, 0xbacd, 0x43c3, 0x1bde, 0xba65, 0x4188, 0x41a4, 0x40fb, 0x4225, 0x25ce, 0xbf97, 0xb22b, 0x19e4, 0x43cc, 0x4101, 0x27f0, 0x1f7e, 0x1d8d, 0xb23d, 0x4280, 0x1d99, 0x41ca, 0x4170, 0x440d, 0xbae8, 0x4114, 0x0519, 0x41db, 0x214d, 0x4255, 0xb25f, 0x1b50, 0x14bd, 0xba46, 0xbf0f, 0x43b1, 0x20c0, 0xa4da, 0xb273, 0xbf65, 0x0636, 0x43e3, 0xb006, 0x410e, 0x161c, 0xba02, 0x4471, 0x2f5a, 0x40e6, 0xbf55, 0x4030, 0xba21, 0x412c, 0xb2a7, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd10f75bd, 0x744765d0, 0x4700bcdf, 0x41a4f9ee, 0x0164f011, 0x5d046666, 0xcc6ba3ee, 0xcaed7f40, 0xc754ff08, 0xa741fc6a, 0x1e4ce65a, 0x41d5f9d4, 0xf0c8c8a5, 0x9b837a0d, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x0000004d, 0x00000000, 0x03380000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x5553dda0, 0xd10f75bd, 0xd10f75bd, 0xf0c8c8a5, 0xffffff86, 0x5553ddac, 0x00000000, 0x400001d0 }, + Instructions = [0xba5b, 0x07d6, 0x17ae, 0x42a8, 0x465e, 0x4335, 0x121d, 0xa28d, 0x4605, 0x4319, 0x4115, 0x1eed, 0x40b7, 0x43ba, 0x4680, 0x4079, 0x4604, 0xb239, 0x41f3, 0x40fa, 0xba5e, 0x4247, 0xba6d, 0x42ce, 0xbfb7, 0xba11, 0x4025, 0xbfa0, 0x4034, 0xb096, 0x1948, 0x4194, 0x42a7, 0x43b5, 0x416e, 0x40a9, 0x42db, 0x4601, 0xbf38, 0xb2e6, 0x426f, 0x444a, 0x40ee, 0x44ed, 0x44d1, 0x4000, 0xb215, 0x30a0, 0xba5a, 0xb261, 0x41bb, 0xb00b, 0xbf6c, 0xbae1, 0x0ef2, 0x431c, 0x00d4, 0x446c, 0x4357, 0x42d7, 0x2fd0, 0xb224, 0xb099, 0x424c, 0x1b9f, 0x01d3, 0x40e7, 0x3e10, 0x4648, 0xbfcb, 0x0411, 0xba0b, 0x40bb, 0xbac8, 0x24c9, 0x42cf, 0xba3d, 0x01fa, 0x1a3f, 0x03a8, 0x28e0, 0x42e1, 0x40b4, 0xb24b, 0x1cd5, 0xb2c8, 0x43ef, 0x2f59, 0x18d0, 0xa4b2, 0xba71, 0x2bb4, 0xb088, 0x21d1, 0xb2db, 0xb2b4, 0xbfb7, 0x1d84, 0x1c34, 0x438f, 0x40d3, 0x4542, 0xaf8e, 0xbad0, 0x4106, 0x28c9, 0x4102, 0x40e9, 0x42d2, 0xbf2c, 0xb203, 0xb295, 0x4262, 0x42ab, 0xbfca, 0x4477, 0x43df, 0x425f, 0xb2b8, 0x425d, 0xb2f7, 0x1d27, 0x40e0, 0x41d8, 0x40e2, 0x3bf3, 0x40f4, 0x416c, 0x17a2, 0xa33f, 0xb254, 0xba60, 0xb056, 0xbfd7, 0x4208, 0xb025, 0x4590, 0x18f9, 0xb20c, 0xba78, 0xb059, 0xba72, 0x2cea, 0x0a1e, 0xbf00, 0xaaee, 0x4651, 0x4315, 0xbaf9, 0x42c3, 0x4176, 0xa362, 0x0638, 0x2acd, 0x1a26, 0xb251, 0x40c7, 0x4469, 0x410c, 0xbfd7, 0x43a1, 0x419c, 0x4093, 0x43d5, 0x3b5f, 0x33cf, 0xa83a, 0x4160, 0xb222, 0x41bf, 0xb2c9, 0x4324, 0x1fd8, 0x1cd4, 0xb0ab, 0x427b, 0xbaf5, 0x407f, 0xbf63, 0x19af, 0xa6ef, 0x438b, 0x43cb, 0xbfc0, 0x4367, 0x428f, 0x4088, 0x4219, 0xb273, 0x0619, 0x4385, 0x420f, 0x46e3, 0x4466, 0xb019, 0x4366, 0x402f, 0xbf36, 0xb2b2, 0x2705, 0x1202, 0x0143, 0xbfa7, 0xbfc0, 0xad30, 0x42ee, 0x4279, 0x4273, 0x1d83, 0x432e, 0xb2fd, 0x42af, 0xbfd7, 0x4304, 0xba66, 0x1f02, 0x04b7, 0x4547, 0x0537, 0x4478, 0x4396, 0x421a, 0xbf64, 0x421e, 0x2be3, 0x41cd, 0x43fd, 0x435c, 0x4205, 0xa4ee, 0x439a, 0x4270, 0x42cd, 0x435b, 0x4057, 0x2f2c, 0xb22c, 0x27ee, 0x43df, 0xb2bd, 0x40ce, 0x17f1, 0xbf58, 0x4179, 0xba3d, 0x4036, 0x4150, 0xa831, 0xba54, 0x4278, 0x4270, 0x1454, 0x42e3, 0x4099, 0xb253, 0x41b7, 0x1c6d, 0x4148, 0x4158, 0xb096, 0x4495, 0xb07e, 0xbaca, 0xb2b8, 0x1b78, 0xbf53, 0xb2a8, 0xb2a0, 0x3743, 0xba20, 0x41cc, 0x1435, 0x438c, 0x4074, 0xb09f, 0xb291, 0x1fb0, 0x4040, 0xbafc, 0x1ebc, 0x14da, 0xbfa0, 0x4235, 0xb22c, 0x41b4, 0x3a86, 0x433a, 0xbfa8, 0xb047, 0x4639, 0xbadf, 0x4225, 0x43f8, 0x0dab, 0xa751, 0xbff0, 0x4347, 0xbfb6, 0xba06, 0xbadf, 0xb084, 0x06c0, 0x2b46, 0x42b3, 0x014f, 0x0b86, 0xba4f, 0x44ab, 0xb2c4, 0x154e, 0xb24e, 0xbaf5, 0xa94c, 0x30d0, 0x435b, 0xbaeb, 0xbfa3, 0x41fc, 0xba0e, 0x4180, 0xba0b, 0x1810, 0x0d4e, 0xba04, 0x0f96, 0xb0db, 0x4117, 0x4335, 0x4314, 0x3157, 0xb26d, 0x4554, 0xb23a, 0xb2ad, 0x3ee7, 0x3bcf, 0xba46, 0x42cc, 0x415a, 0x421b, 0x43bf, 0xbf80, 0x1b5d, 0xba10, 0x099c, 0x421d, 0xbf32, 0x20d0, 0xb21d, 0xacf5, 0xba23, 0x4120, 0x4102, 0xbaf4, 0xbfa8, 0x2f4b, 0x1913, 0x2795, 0x43fe, 0x4472, 0x4419, 0x4224, 0x423b, 0xba6a, 0x33f4, 0x466a, 0x0602, 0x42e6, 0x45c5, 0x0a3f, 0xb279, 0xb294, 0x42cb, 0x4013, 0xb2f7, 0x41ce, 0x1fbe, 0x4229, 0x41eb, 0xbf5d, 0x0f87, 0x4120, 0x4233, 0x410a, 0x3a7d, 0x1365, 0x4633, 0x42f0, 0xba0c, 0x415a, 0x438f, 0xb062, 0x42f1, 0x4205, 0xba13, 0xbfa5, 0xb221, 0xb2eb, 0x436a, 0xb2cf, 0xb241, 0x4120, 0x4233, 0x446e, 0x40c9, 0x3943, 0xb2c5, 0x0b33, 0x13f7, 0xb236, 0xa84f, 0x415a, 0xb09b, 0x43e2, 0x4105, 0xbfc0, 0x438e, 0x1901, 0x4146, 0xbf52, 0xa619, 0xba67, 0x4354, 0x3f22, 0x430e, 0x44d5, 0x1fbf, 0x413b, 0xa872, 0x4304, 0xba65, 0xb27e, 0xb20f, 0x41a5, 0xbade, 0x4157, 0xaeb4, 0x423d, 0x42fa, 0xbfc1, 0x4416, 0x434d, 0x44ea, 0xb239, 0x4594, 0x0037, 0xbf1b, 0x1864, 0x42d5, 0xba2f, 0x017e, 0x4065, 0xb0bc, 0x13a1, 0xbfa0, 0x43b2, 0x41a4, 0xb269, 0x46d1, 0xb27b, 0x410e, 0xb24b, 0xbf06, 0xb061, 0x0c0c, 0xb294, 0x4010, 0x1e48, 0x435f, 0xa4ab, 0xb2db, 0x248f, 0xa37f, 0x403a, 0xb0df, 0x4023, 0x42ba, 0x42dd, 0x1e2d, 0x4299, 0x41a2, 0x2d1b, 0x2b1b, 0x41f5, 0x194d, 0x422c, 0xb23b, 0x427d, 0xb2a0, 0xbf1a, 0xab55, 0x43ca, 0xa750, 0xa102, 0xbaed, 0xbff0, 0xba5f, 0x4274, 0xb28e, 0xa5be, 0x40e5, 0xb20e, 0x4173, 0x2778, 0xb26b, 0xa8ff, 0x18f0, 0x4036, 0xbf65, 0x1b9b, 0x46ec, 0xb0bf, 0x4017, 0x4126, 0x2f2d, 0x3504, 0xb05a, 0x45e5, 0x4053, 0x41f7, 0x43d1, 0x417c, 0x421c, 0xbfe2, 0x4377, 0x1723, 0xbff0, 0x46c2, 0xa232, 0xaec0, 0xba6c, 0xb251, 0xb2f6, 0x4060, 0x404f, 0x1ce5, 0xbf88, 0x4655, 0x1a5a, 0x403d, 0xba12, 0x19c7, 0xba50, 0x4169, 0x4106, 0x4250, 0xb291, 0x42c7, 0x4347, 0x27bd, 0x2c35, 0x0626, 0x1ec8, 0x0280, 0x400e, 0x2bf8, 0xb263, 0xb2af, 0xb01d, 0xba2b, 0x1cf0, 0xbfdf, 0x431f, 0x4604, 0xb295, 0xba0c, 0xb218, 0x4325, 0x213d, 0x415a, 0xb0aa, 0x410d, 0x41d0, 0x18ec, 0x445d, 0x4031, 0x1a49, 0xbaf3, 0x4089, 0x4001, 0x42c8, 0x40d9, 0x1fd4, 0xbf3f, 0x41ab, 0xa638, 0x42fa, 0x1c8f, 0xa077, 0x1b97, 0xb204, 0x4210, 0x42f2, 0x1b51, 0xb0ed, 0x1bc5, 0xb25f, 0xba2d, 0x335d, 0x3031, 0x15d4, 0x403d, 0xa32c, 0xbadb, 0x41be, 0xbf33, 0xba5e, 0xba5f, 0x45ba, 0xb01a, 0x4214, 0xbad1, 0xbf82, 0x429c, 0x171a, 0x1728, 0xbfb2, 0x413e, 0xac11, 0x42bc, 0x4149, 0x41b5, 0x433a, 0xb26f, 0x1d40, 0x461b, 0x4046, 0xb243, 0xb2fc, 0x4259, 0x1b06, 0x4253, 0x4179, 0x4369, 0xba48, 0x403d, 0xb2b1, 0xb06f, 0xb21c, 0x4122, 0x2dc7, 0xbf9d, 0x43c5, 0xb2cd, 0xa4b1, 0x417e, 0xb232, 0x42e0, 0xbfdc, 0xb073, 0xb2a0, 0x1caa, 0xb2d4, 0x4037, 0x16f9, 0x05b2, 0xbf00, 0x43f5, 0x4135, 0x43d8, 0x4115, 0x42e9, 0xb248, 0x4037, 0xb274, 0xb249, 0x4284, 0x3542, 0x3c24, 0xa2e5, 0x1a2f, 0x40d1, 0xb2e3, 0x41da, 0x4255, 0xbf0f, 0x2d1a, 0x46d8, 0x422c, 0x28a3, 0x1c9e, 0x1f60, 0xb0a9, 0xb08f, 0x4056, 0x19b4, 0xb20b, 0xba7b, 0x4308, 0x40de, 0xb204, 0x4684, 0x4179, 0x0f4b, 0xb2e6, 0x45f0, 0x43f6, 0x43f6, 0x4181, 0xb2ab, 0xbf82, 0xb242, 0x2355, 0xb227, 0x1e77, 0x403d, 0x4381, 0x404c, 0x427e, 0x4220, 0xbfd0, 0x3630, 0xb282, 0xbf75, 0x1fe1, 0x1f1f, 0x288b, 0x40f3, 0x46f9, 0x39bb, 0x4328, 0x407f, 0x4245, 0x434a, 0xae95, 0x41c9, 0xba43, 0x09d6, 0x4179, 0xa589, 0x1d18, 0x1cdd, 0x42dc, 0xbf02, 0x35d5, 0x43c8, 0x4270, 0x403c, 0xba6d, 0x42ea, 0xbf65, 0x1ade, 0x2288, 0x4660, 0x437f, 0x4281, 0xba01, 0xb2e8, 0x4248, 0x46d1, 0xba30, 0x41b0, 0xb21e, 0x4017, 0x024f, 0x4305, 0x40cb, 0xb29c, 0x40d0, 0x0b3f, 0x0661, 0xb2fc, 0x4083, 0x196d, 0xb2aa, 0x3149, 0xbfc9, 0x41ae, 0x40ea, 0x4126, 0x462a, 0x42e4, 0x434f, 0x4242, 0xb2e1, 0x43de, 0x43e2, 0x41cb, 0x4112, 0xba58, 0x42c6, 0x426d, 0xb082, 0x43e7, 0x419e, 0x43ad, 0x4576, 0x42a1, 0x40a6, 0xbf54, 0x40a9, 0xbac0, 0xb254, 0x1bc9, 0x3ef4, 0xba5a, 0xa96a, 0x40a2, 0x4688, 0xb2a4, 0xba68, 0xb21e, 0xb2a2, 0xbf38, 0x0405, 0xb219, 0x2f28, 0x40fb, 0xb23c, 0xb29e, 0x4035, 0xb0cc, 0x4653, 0x4006, 0x460b, 0xbf3c, 0x427b, 0x4182, 0x4274, 0xbff0, 0x4252, 0x1272, 0xbfa4, 0xae65, 0x0ca1, 0x14f9, 0x00b0, 0x40b8, 0xba23, 0x4349, 0xbfa3, 0x4461, 0x063b, 0xb229, 0x41eb, 0xb224, 0x4124, 0xb0cc, 0x4342, 0x3167, 0x42c9, 0x1d8e, 0x4626, 0x3374, 0x4167, 0x4060, 0x45dd, 0x1ad6, 0x3446, 0x4237, 0x442f, 0x4214, 0x1d7c, 0x46c5, 0x42c7, 0x4491, 0x3e38, 0x1d56, 0x42cc, 0xaec2, 0xbf8e, 0x4090, 0xba77, 0x45d4, 0x40e8, 0x190e, 0x1b87, 0x0e51, 0xba73, 0x0806, 0xb206, 0xbf46, 0x4326, 0x111b, 0xba4a, 0x1b79, 0xa71d, 0x42a8, 0x4294, 0x423c, 0x4667, 0xba77, 0x4110, 0x43a9, 0x1d4d, 0x42c5, 0xb2f7, 0xb216, 0x40d9, 0xb06f, 0x43ba, 0x41b9, 0x467f, 0xa135, 0xbaee, 0x40e7, 0xbfc6, 0xb241, 0xa4a6, 0x423b, 0x408e, 0x364b, 0xa098, 0x4005, 0xb275, 0xb0f2, 0xba79, 0xbfa0, 0x4387, 0x41d9, 0x0761, 0xb251, 0x418c, 0xba33, 0xbf51, 0x4007, 0xb256, 0x44c3, 0xb212, 0x434f, 0x40b4, 0x0edf, 0x4546, 0x4343, 0x45b3, 0xb29c, 0x40fe, 0x341e, 0x1af1, 0x42dc, 0x1c07, 0xba79, 0x08bb, 0xbfc7, 0x16a1, 0x4655, 0x1fe7, 0x4235, 0xbf3d, 0x338e, 0x43a2, 0x36ad, 0x2e82, 0xa991, 0x423e, 0xba76, 0xba17, 0x1a36, 0xbad3, 0x42e4, 0x41d8, 0xb206, 0x41fd, 0x3bb8, 0x42a0, 0xb2ec, 0xbacd, 0x43c3, 0x1bde, 0xba65, 0x4188, 0x41a4, 0x40fb, 0x4225, 0x25ce, 0xbf97, 0xb22b, 0x19e4, 0x43cc, 0x4101, 0x27f0, 0x1f7e, 0x1d8d, 0xb23d, 0x4280, 0x1d99, 0x41ca, 0x4170, 0x440d, 0xbae8, 0x4114, 0x0519, 0x41db, 0x214d, 0x4255, 0xb25f, 0x1b50, 0x14bd, 0xba46, 0xbf0f, 0x43b1, 0x20c0, 0xa4da, 0xb273, 0xbf65, 0x0636, 0x43e3, 0xb006, 0x410e, 0x161c, 0xba02, 0x4471, 0x2f5a, 0x40e6, 0xbf55, 0x4030, 0xba21, 0x412c, 0xb2a7, 0x4770, 0xe7fe + ], + StartRegs = [0xd10f75bd, 0x744765d0, 0x4700bcdf, 0x41a4f9ee, 0x0164f011, 0x5d046666, 0xcc6ba3ee, 0xcaed7f40, 0xc754ff08, 0xa741fc6a, 0x1e4ce65a, 0x41d5f9d4, 0xf0c8c8a5, 0x9b837a0d, 0x00000000, 0x200001f0 + ], + FinalRegs = [0x00000000, 0x0000004d, 0x00000000, 0x03380000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x5553dda0, 0xd10f75bd, 0xd10f75bd, 0xf0c8c8a5, 0xffffff86, 0x5553ddac, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0xa199, 0x43c5, 0x4111, 0x1dd7, 0x4284, 0x4103, 0x41a4, 0xbf24, 0x0c40, 0x44e5, 0x448a, 0x1c19, 0x4275, 0x1e0c, 0xa7fd, 0x1c09, 0x009a, 0x1ee8, 0x459c, 0x43d0, 0x40b2, 0x426f, 0x402e, 0x4421, 0xbae9, 0x2640, 0x402a, 0x1fcd, 0x2ff9, 0x3926, 0xbf1b, 0xb281, 0xaacb, 0x45b0, 0x1c61, 0xba01, 0xb22d, 0x277d, 0x4042, 0x4374, 0x13b1, 0x146d, 0x410f, 0xb09b, 0x179d, 0x421b, 0x1ae6, 0x4085, 0x2920, 0x425a, 0x43df, 0xb244, 0x4080, 0x42dd, 0x4178, 0x43a1, 0x4057, 0xa843, 0xb2ea, 0x4195, 0xbf3f, 0x4058, 0x4042, 0xa1e7, 0x4263, 0x4060, 0x45ea, 0xba42, 0x40c5, 0xbf63, 0x0953, 0x4287, 0x11ec, 0xba1b, 0x2900, 0x1d63, 0x425b, 0xb209, 0x427d, 0x2ffd, 0x40a6, 0xba7b, 0xbfa1, 0xb227, 0x1390, 0xb2ae, 0x413f, 0xb230, 0x1ea6, 0xb063, 0x44d9, 0x43ed, 0x38e6, 0xb266, 0x11c6, 0x4353, 0x4395, 0x423d, 0x4038, 0xb0dd, 0x418d, 0x405b, 0x4165, 0xbf39, 0x1373, 0x4200, 0x458b, 0x42d4, 0x4307, 0x1f3f, 0xbf95, 0x405d, 0x43cd, 0xbaf2, 0xa1f9, 0x40f1, 0x40cf, 0x40ec, 0xb203, 0xbfcc, 0x420f, 0x1ebf, 0x2b1b, 0x4186, 0x1e1f, 0x464a, 0xba6a, 0x423d, 0x4453, 0x1f67, 0x434e, 0x27b3, 0x15d6, 0xb2d8, 0xbf53, 0xba22, 0x413b, 0x187f, 0x42fd, 0xa8c3, 0xba09, 0x41fd, 0x4442, 0x420c, 0xb296, 0xbac5, 0x4215, 0x40f2, 0x4082, 0x1a04, 0x11e2, 0x1cbf, 0x43d9, 0xb216, 0x4026, 0x3608, 0x43ea, 0x4022, 0x4092, 0x0e1f, 0x429b, 0xb2e8, 0x42df, 0xbfad, 0x349f, 0xb2ff, 0x4212, 0x4168, 0xbad1, 0x390c, 0x41e0, 0xa34a, 0x40cf, 0x419f, 0x40db, 0x2fbd, 0xb0a9, 0x4329, 0x4351, 0x4129, 0x4104, 0x4268, 0xb2c4, 0xbf13, 0x1afa, 0x2de8, 0xb0e4, 0x4191, 0xb234, 0x4041, 0xb0b4, 0xb05c, 0xba7f, 0x2b96, 0xbfc6, 0xba54, 0x434b, 0x447f, 0xbfc2, 0x4113, 0xb2ea, 0xae3d, 0x417a, 0x42f8, 0x1884, 0x1f4a, 0xba51, 0xa2aa, 0xbf15, 0x4386, 0xba75, 0x40e8, 0x1f84, 0x4202, 0x42d7, 0x19e7, 0xbf80, 0x4168, 0x45e6, 0xbff0, 0x4152, 0xbf0c, 0xabb2, 0xa8e2, 0x42f0, 0x43d5, 0x405c, 0x4229, 0x42b1, 0xb0d1, 0xbf98, 0xba2d, 0x43c0, 0x024c, 0x3d62, 0xb22e, 0x400d, 0xba54, 0x4002, 0x2696, 0x1c64, 0x1d10, 0xb2f5, 0x40b8, 0xb04f, 0x24dd, 0x43fb, 0x4042, 0x182b, 0xbafd, 0x46d2, 0xbf78, 0x4317, 0x2901, 0xadeb, 0xa020, 0x43de, 0x352d, 0x4025, 0x4067, 0x4184, 0x42af, 0x4197, 0x410b, 0x4240, 0x42ef, 0xbfcc, 0x3013, 0x454d, 0xbf58, 0x4317, 0x0df1, 0x1877, 0x422f, 0xb01b, 0xb083, 0x402d, 0xb24c, 0x3837, 0xb0ad, 0x1a40, 0x0cad, 0xa457, 0x1c71, 0xb0c5, 0x40c7, 0xbf24, 0x4115, 0x4613, 0x41da, 0x1e59, 0x1099, 0xa19d, 0x25c9, 0xba1f, 0x0da3, 0xa9c4, 0x4263, 0x4128, 0xaae7, 0xb051, 0x427c, 0xba0b, 0x41fc, 0xb234, 0x1cec, 0x40be, 0xb221, 0xba4c, 0x1fcd, 0xb21e, 0xbf4c, 0xb0fd, 0x4172, 0x1d00, 0x1b78, 0x424e, 0xbf1e, 0x1f40, 0x0324, 0x4271, 0x41f0, 0xa81e, 0x4692, 0xb21e, 0x4114, 0xbf39, 0x46aa, 0x19a7, 0x2315, 0xbadf, 0xab7d, 0x1edf, 0xba3a, 0x1a7a, 0x1ede, 0xba56, 0xb074, 0xb207, 0x460f, 0xb20f, 0xba15, 0x40de, 0x40d3, 0x4029, 0x3388, 0xb265, 0x4274, 0xba28, 0xbfd4, 0xbac1, 0x403a, 0xb011, 0xb282, 0xb212, 0xbf37, 0x4134, 0x401e, 0x42b3, 0xbaf5, 0xbfbe, 0x417e, 0x4009, 0x14f9, 0xba76, 0xb2d3, 0x40de, 0x43ee, 0x446f, 0x4238, 0xbf90, 0x4302, 0x1f23, 0x0475, 0xb256, 0x40a3, 0x4008, 0xb0d8, 0x4147, 0x3b2a, 0x00cf, 0x4381, 0xb233, 0xbff0, 0xba1c, 0x43ff, 0x41a2, 0x4376, 0xb20f, 0xbf49, 0xb2b4, 0x0dbc, 0x3189, 0x418e, 0xba32, 0x1bd8, 0xbf6f, 0xba48, 0xb207, 0xa2ad, 0x411d, 0x1a87, 0x2df4, 0x03c2, 0x2dfd, 0x4046, 0xbf90, 0x3240, 0xb015, 0x4003, 0xb29c, 0x44a2, 0x43b7, 0x4378, 0x0fd8, 0x42fe, 0x466c, 0x41a6, 0x1940, 0x4087, 0xbfba, 0x4106, 0x3ee3, 0x4219, 0x409b, 0x1976, 0x18e7, 0x24f6, 0x3f8d, 0xbad5, 0x40d9, 0x1c9a, 0x2916, 0x1cd9, 0x41e2, 0x4069, 0x1c0c, 0x45c3, 0xb0e6, 0xbfb9, 0x40dc, 0xb055, 0x0946, 0x349c, 0x4004, 0x42d3, 0x1e78, 0x43f0, 0x427c, 0xb20b, 0xb2da, 0x4206, 0x42aa, 0x1d43, 0x428a, 0x19a6, 0xb04f, 0x1f39, 0x2fdc, 0x0fa5, 0x067d, 0x2bbc, 0x405a, 0x0080, 0xbfdd, 0x1ab5, 0xba61, 0x46ec, 0x2e41, 0x43aa, 0x4080, 0x437a, 0x4112, 0x428a, 0x1efc, 0xbaf3, 0xbfc3, 0x4203, 0x45ed, 0x42d6, 0x4552, 0x0588, 0x2ab8, 0x19d9, 0x4391, 0x1c52, 0xbf4f, 0x422e, 0x43c2, 0x43be, 0x13f3, 0x40da, 0xb2ba, 0x3a04, 0xb2cf, 0x0bb2, 0x40ab, 0x42fd, 0x3dd3, 0x417d, 0xb08a, 0x4494, 0xa6be, 0xb229, 0x426d, 0x341a, 0x4312, 0x4212, 0x4258, 0x4195, 0xb2ff, 0x4011, 0x410a, 0x42c5, 0xbfc3, 0xadc5, 0x4367, 0xb29b, 0x4272, 0x416b, 0x42d9, 0xb0bb, 0x458d, 0x4290, 0xa66c, 0x1b4c, 0xac1d, 0x4092, 0xbfd5, 0xb081, 0x438b, 0x4029, 0x00df, 0xb009, 0x449c, 0x432c, 0x425f, 0x08fe, 0xb2dd, 0xba3c, 0x4053, 0x4111, 0x43e5, 0x42fe, 0xba44, 0xb26b, 0x3581, 0x439c, 0x354a, 0x0240, 0x3da2, 0x1bad, 0x4143, 0x407e, 0xbf76, 0x40ac, 0x403e, 0x402b, 0x1fdf, 0xb2c3, 0x40cf, 0x33fb, 0x42cb, 0xb2de, 0x4075, 0x1f1c, 0x43f7, 0x4081, 0x4386, 0xb248, 0x1b37, 0xb237, 0xb251, 0xbae9, 0xb2fb, 0x43da, 0x41d1, 0xba24, 0xbfc3, 0xad4b, 0x40ad, 0x0935, 0xb2b5, 0x43f4, 0xa290, 0xb24c, 0xaea0, 0xbaf1, 0xba23, 0xab45, 0x1e3d, 0x4219, 0x4350, 0x12e3, 0x0d50, 0x4545, 0xbf70, 0x1c23, 0xb28c, 0xb2df, 0x4375, 0x44d4, 0x42b2, 0x43dd, 0xbaf0, 0x41ef, 0xbf91, 0xb24b, 0xab23, 0x1a7b, 0x285e, 0xb09a, 0x40d1, 0x4149, 0x4084, 0x1cc5, 0xba75, 0x4348, 0xba27, 0xa8ac, 0xa7d2, 0x42b9, 0x334a, 0x4594, 0x40c1, 0x42e5, 0x41a1, 0x43f8, 0x4378, 0xa603, 0xb264, 0xba4d, 0xbf53, 0xb073, 0x1f6a, 0x1d2f, 0x1c93, 0x46b3, 0x4289, 0xa678, 0x1899, 0x434b, 0x438d, 0x43e2, 0xa5b7, 0x1f65, 0x3ea4, 0x44dd, 0x43ba, 0xb2b5, 0x2490, 0x4316, 0x18d2, 0xb257, 0x4472, 0xbfb4, 0x403c, 0x4036, 0x1989, 0xa6ae, 0xb211, 0x1d91, 0x43ea, 0x404a, 0x30c3, 0x43ac, 0x124b, 0x164d, 0x40e4, 0x4271, 0xb2c4, 0x2d41, 0x417b, 0xbf14, 0x40cc, 0xba78, 0x426e, 0x31c8, 0x44c3, 0xafc8, 0x43d0, 0x1d72, 0x0d4e, 0x1c65, 0xa4d5, 0xbf7d, 0x2ea8, 0xb0c3, 0x4424, 0x466c, 0x16b6, 0x43c5, 0x181f, 0x1f13, 0x398f, 0x42e2, 0x4354, 0x18b0, 0x2c22, 0x43c8, 0xae35, 0x44d4, 0x4113, 0x1834, 0x4590, 0xbf27, 0x400e, 0x42e3, 0x4289, 0xb28d, 0x0cf4, 0x32b2, 0x0f02, 0x414b, 0x40d5, 0x43c8, 0x4565, 0x376a, 0x330d, 0x1a0e, 0xbf53, 0xb0bd, 0x42b4, 0x422e, 0xb05a, 0x41bb, 0xa3cb, 0x0947, 0xb064, 0x42c4, 0x4156, 0x1bb2, 0x0104, 0x42c6, 0x4181, 0x4096, 0xba72, 0xb0da, 0x42e1, 0xa882, 0x427e, 0x4078, 0x4174, 0x4165, 0x406c, 0xbf01, 0xb0e3, 0x40ec, 0x29ba, 0xba6a, 0x183d, 0xb22c, 0x1b41, 0xb20d, 0xbf18, 0x027e, 0x42de, 0x429a, 0x4326, 0xbace, 0x412b, 0x4394, 0x43cf, 0xbfa1, 0xaeee, 0x4398, 0x18da, 0x42d5, 0x1c5e, 0x3817, 0x312b, 0x145c, 0xb294, 0x42c0, 0x40b9, 0x42fb, 0x3eb7, 0x44e1, 0x43ef, 0x4137, 0x0b6e, 0x4248, 0x4260, 0x4130, 0x43ea, 0x413f, 0x1ae0, 0x41b9, 0x43dd, 0x40dc, 0xbf8f, 0x42bb, 0x425a, 0x40cf, 0xbaca, 0x1f8a, 0xb243, 0x1802, 0x1e4f, 0x035e, 0x411a, 0x4160, 0xae4e, 0x1d60, 0xbfdb, 0x32ef, 0x42b2, 0x46d4, 0xbf70, 0x1ffa, 0x40bc, 0xb05a, 0xbaef, 0xb2ef, 0xb2aa, 0xbf8c, 0x194e, 0x42e9, 0x46d3, 0x4388, 0x40d0, 0x200f, 0xba17, 0xba0d, 0x443e, 0x2066, 0x410d, 0x40ca, 0xa869, 0xb07f, 0x425e, 0x432d, 0xb2b5, 0x43db, 0x1d95, 0x435a, 0xaf6a, 0xb2b0, 0x1b4d, 0x41de, 0xba5f, 0x1217, 0xbf81, 0xb217, 0xb224, 0x1db7, 0x1a1b, 0x2695, 0x406a, 0x3710, 0xb291, 0x3615, 0x3e59, 0x4181, 0x188d, 0x41fd, 0xbace, 0x46b2, 0x431a, 0x4121, 0x43bf, 0x186f, 0x4178, 0x00f5, 0xbf39, 0xa8c3, 0x0415, 0xba21, 0xbad8, 0x3fc6, 0x4116, 0x41f6, 0x443e, 0x0825, 0x43cf, 0x4388, 0x3e82, 0x171a, 0xb0e0, 0xbfa7, 0x42eb, 0x4006, 0x4029, 0x4128, 0x422a, 0x4279, 0x44a1, 0x45cc, 0x1913, 0x4174, 0xbf54, 0xb2a7, 0x4123, 0x4236, 0xba06, 0x425d, 0x1d1c, 0xbf12, 0x12b2, 0xba57, 0x19cf, 0xba6a, 0xb29e, 0xbfb6, 0x2718, 0xaf18, 0xba0b, 0xb2d7, 0x405e, 0x3f04, 0x268f, 0x426e, 0x1a97, 0xa68b, 0x1dab, 0x4104, 0x4661, 0x280a, 0x4550, 0x29ff, 0x41c9, 0xbf70, 0x432b, 0x1fb6, 0x2eb9, 0x419c, 0xb2cc, 0x2b88, 0x0da0, 0xb2b1, 0x42a6, 0x1ad6, 0xbfc1, 0x4599, 0x40b2, 0xb291, 0x43d2, 0x421a, 0x4209, 0x432a, 0xb04f, 0xbaf6, 0x16c6, 0x46d3, 0xbac0, 0x1dbe, 0xbff0, 0x40e7, 0x2de7, 0xbf21, 0x1d42, 0x0f07, 0x4274, 0x4151, 0x46e4, 0xb00a, 0xbad8, 0xbf34, 0x40a1, 0x2ef9, 0x4396, 0xbf53, 0x40e9, 0x4239, 0x42da, 0x405f, 0xba0c, 0x4368, 0xb2de, 0x4449, 0x4278, 0xb2e9, 0x4317, 0x405f, 0xb063, 0x4100, 0x4698, 0x40b0, 0x45c5, 0xb2df, 0x454f, 0x2aca, 0x42ea, 0x43b0, 0x3976, 0x4327, 0x2cbd, 0xbf7d, 0x1c79, 0x2d95, 0x41cd, 0x1af1, 0x408a, 0x2eae, 0x419d, 0x1859, 0x42bf, 0x4272, 0x412a, 0x42a9, 0x0694, 0x1f68, 0x4653, 0x3a31, 0x4277, 0xa6d1, 0x413c, 0xb23c, 0xbfc0, 0x42f6, 0x4377, 0x418f, 0x464c, 0x4133, 0x4129, 0xb294, 0xbfa9, 0x247d, 0x1b16, 0x21cc, 0xbf70, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x181236f9, 0x459e9e0f, 0xd961342f, 0x122ddd5e, 0x38b78514, 0x9508b2ee, 0x97896aed, 0xad92e120, 0xfd37fa46, 0x2e0a81f8, 0x8cf97fb4, 0x8d4b1243, 0x5e1eda21, 0x54da9be4, 0x00000000, 0x500001f0 }, - FinalRegs = new uint[] { 0x00fffff3, 0x000000cc, 0xffffffce, 0xffffffff, 0x0000007d, 0x00fffff8, 0x00001b20, 0xffff4210, 0x00000007, 0x6e4f1c33, 0xfffffaff, 0xfffffaff, 0x000000c5, 0x54dab658, 0x00000000, 0x400001d0 }, + Instructions = [0xa199, 0x43c5, 0x4111, 0x1dd7, 0x4284, 0x4103, 0x41a4, 0xbf24, 0x0c40, 0x44e5, 0x448a, 0x1c19, 0x4275, 0x1e0c, 0xa7fd, 0x1c09, 0x009a, 0x1ee8, 0x459c, 0x43d0, 0x40b2, 0x426f, 0x402e, 0x4421, 0xbae9, 0x2640, 0x402a, 0x1fcd, 0x2ff9, 0x3926, 0xbf1b, 0xb281, 0xaacb, 0x45b0, 0x1c61, 0xba01, 0xb22d, 0x277d, 0x4042, 0x4374, 0x13b1, 0x146d, 0x410f, 0xb09b, 0x179d, 0x421b, 0x1ae6, 0x4085, 0x2920, 0x425a, 0x43df, 0xb244, 0x4080, 0x42dd, 0x4178, 0x43a1, 0x4057, 0xa843, 0xb2ea, 0x4195, 0xbf3f, 0x4058, 0x4042, 0xa1e7, 0x4263, 0x4060, 0x45ea, 0xba42, 0x40c5, 0xbf63, 0x0953, 0x4287, 0x11ec, 0xba1b, 0x2900, 0x1d63, 0x425b, 0xb209, 0x427d, 0x2ffd, 0x40a6, 0xba7b, 0xbfa1, 0xb227, 0x1390, 0xb2ae, 0x413f, 0xb230, 0x1ea6, 0xb063, 0x44d9, 0x43ed, 0x38e6, 0xb266, 0x11c6, 0x4353, 0x4395, 0x423d, 0x4038, 0xb0dd, 0x418d, 0x405b, 0x4165, 0xbf39, 0x1373, 0x4200, 0x458b, 0x42d4, 0x4307, 0x1f3f, 0xbf95, 0x405d, 0x43cd, 0xbaf2, 0xa1f9, 0x40f1, 0x40cf, 0x40ec, 0xb203, 0xbfcc, 0x420f, 0x1ebf, 0x2b1b, 0x4186, 0x1e1f, 0x464a, 0xba6a, 0x423d, 0x4453, 0x1f67, 0x434e, 0x27b3, 0x15d6, 0xb2d8, 0xbf53, 0xba22, 0x413b, 0x187f, 0x42fd, 0xa8c3, 0xba09, 0x41fd, 0x4442, 0x420c, 0xb296, 0xbac5, 0x4215, 0x40f2, 0x4082, 0x1a04, 0x11e2, 0x1cbf, 0x43d9, 0xb216, 0x4026, 0x3608, 0x43ea, 0x4022, 0x4092, 0x0e1f, 0x429b, 0xb2e8, 0x42df, 0xbfad, 0x349f, 0xb2ff, 0x4212, 0x4168, 0xbad1, 0x390c, 0x41e0, 0xa34a, 0x40cf, 0x419f, 0x40db, 0x2fbd, 0xb0a9, 0x4329, 0x4351, 0x4129, 0x4104, 0x4268, 0xb2c4, 0xbf13, 0x1afa, 0x2de8, 0xb0e4, 0x4191, 0xb234, 0x4041, 0xb0b4, 0xb05c, 0xba7f, 0x2b96, 0xbfc6, 0xba54, 0x434b, 0x447f, 0xbfc2, 0x4113, 0xb2ea, 0xae3d, 0x417a, 0x42f8, 0x1884, 0x1f4a, 0xba51, 0xa2aa, 0xbf15, 0x4386, 0xba75, 0x40e8, 0x1f84, 0x4202, 0x42d7, 0x19e7, 0xbf80, 0x4168, 0x45e6, 0xbff0, 0x4152, 0xbf0c, 0xabb2, 0xa8e2, 0x42f0, 0x43d5, 0x405c, 0x4229, 0x42b1, 0xb0d1, 0xbf98, 0xba2d, 0x43c0, 0x024c, 0x3d62, 0xb22e, 0x400d, 0xba54, 0x4002, 0x2696, 0x1c64, 0x1d10, 0xb2f5, 0x40b8, 0xb04f, 0x24dd, 0x43fb, 0x4042, 0x182b, 0xbafd, 0x46d2, 0xbf78, 0x4317, 0x2901, 0xadeb, 0xa020, 0x43de, 0x352d, 0x4025, 0x4067, 0x4184, 0x42af, 0x4197, 0x410b, 0x4240, 0x42ef, 0xbfcc, 0x3013, 0x454d, 0xbf58, 0x4317, 0x0df1, 0x1877, 0x422f, 0xb01b, 0xb083, 0x402d, 0xb24c, 0x3837, 0xb0ad, 0x1a40, 0x0cad, 0xa457, 0x1c71, 0xb0c5, 0x40c7, 0xbf24, 0x4115, 0x4613, 0x41da, 0x1e59, 0x1099, 0xa19d, 0x25c9, 0xba1f, 0x0da3, 0xa9c4, 0x4263, 0x4128, 0xaae7, 0xb051, 0x427c, 0xba0b, 0x41fc, 0xb234, 0x1cec, 0x40be, 0xb221, 0xba4c, 0x1fcd, 0xb21e, 0xbf4c, 0xb0fd, 0x4172, 0x1d00, 0x1b78, 0x424e, 0xbf1e, 0x1f40, 0x0324, 0x4271, 0x41f0, 0xa81e, 0x4692, 0xb21e, 0x4114, 0xbf39, 0x46aa, 0x19a7, 0x2315, 0xbadf, 0xab7d, 0x1edf, 0xba3a, 0x1a7a, 0x1ede, 0xba56, 0xb074, 0xb207, 0x460f, 0xb20f, 0xba15, 0x40de, 0x40d3, 0x4029, 0x3388, 0xb265, 0x4274, 0xba28, 0xbfd4, 0xbac1, 0x403a, 0xb011, 0xb282, 0xb212, 0xbf37, 0x4134, 0x401e, 0x42b3, 0xbaf5, 0xbfbe, 0x417e, 0x4009, 0x14f9, 0xba76, 0xb2d3, 0x40de, 0x43ee, 0x446f, 0x4238, 0xbf90, 0x4302, 0x1f23, 0x0475, 0xb256, 0x40a3, 0x4008, 0xb0d8, 0x4147, 0x3b2a, 0x00cf, 0x4381, 0xb233, 0xbff0, 0xba1c, 0x43ff, 0x41a2, 0x4376, 0xb20f, 0xbf49, 0xb2b4, 0x0dbc, 0x3189, 0x418e, 0xba32, 0x1bd8, 0xbf6f, 0xba48, 0xb207, 0xa2ad, 0x411d, 0x1a87, 0x2df4, 0x03c2, 0x2dfd, 0x4046, 0xbf90, 0x3240, 0xb015, 0x4003, 0xb29c, 0x44a2, 0x43b7, 0x4378, 0x0fd8, 0x42fe, 0x466c, 0x41a6, 0x1940, 0x4087, 0xbfba, 0x4106, 0x3ee3, 0x4219, 0x409b, 0x1976, 0x18e7, 0x24f6, 0x3f8d, 0xbad5, 0x40d9, 0x1c9a, 0x2916, 0x1cd9, 0x41e2, 0x4069, 0x1c0c, 0x45c3, 0xb0e6, 0xbfb9, 0x40dc, 0xb055, 0x0946, 0x349c, 0x4004, 0x42d3, 0x1e78, 0x43f0, 0x427c, 0xb20b, 0xb2da, 0x4206, 0x42aa, 0x1d43, 0x428a, 0x19a6, 0xb04f, 0x1f39, 0x2fdc, 0x0fa5, 0x067d, 0x2bbc, 0x405a, 0x0080, 0xbfdd, 0x1ab5, 0xba61, 0x46ec, 0x2e41, 0x43aa, 0x4080, 0x437a, 0x4112, 0x428a, 0x1efc, 0xbaf3, 0xbfc3, 0x4203, 0x45ed, 0x42d6, 0x4552, 0x0588, 0x2ab8, 0x19d9, 0x4391, 0x1c52, 0xbf4f, 0x422e, 0x43c2, 0x43be, 0x13f3, 0x40da, 0xb2ba, 0x3a04, 0xb2cf, 0x0bb2, 0x40ab, 0x42fd, 0x3dd3, 0x417d, 0xb08a, 0x4494, 0xa6be, 0xb229, 0x426d, 0x341a, 0x4312, 0x4212, 0x4258, 0x4195, 0xb2ff, 0x4011, 0x410a, 0x42c5, 0xbfc3, 0xadc5, 0x4367, 0xb29b, 0x4272, 0x416b, 0x42d9, 0xb0bb, 0x458d, 0x4290, 0xa66c, 0x1b4c, 0xac1d, 0x4092, 0xbfd5, 0xb081, 0x438b, 0x4029, 0x00df, 0xb009, 0x449c, 0x432c, 0x425f, 0x08fe, 0xb2dd, 0xba3c, 0x4053, 0x4111, 0x43e5, 0x42fe, 0xba44, 0xb26b, 0x3581, 0x439c, 0x354a, 0x0240, 0x3da2, 0x1bad, 0x4143, 0x407e, 0xbf76, 0x40ac, 0x403e, 0x402b, 0x1fdf, 0xb2c3, 0x40cf, 0x33fb, 0x42cb, 0xb2de, 0x4075, 0x1f1c, 0x43f7, 0x4081, 0x4386, 0xb248, 0x1b37, 0xb237, 0xb251, 0xbae9, 0xb2fb, 0x43da, 0x41d1, 0xba24, 0xbfc3, 0xad4b, 0x40ad, 0x0935, 0xb2b5, 0x43f4, 0xa290, 0xb24c, 0xaea0, 0xbaf1, 0xba23, 0xab45, 0x1e3d, 0x4219, 0x4350, 0x12e3, 0x0d50, 0x4545, 0xbf70, 0x1c23, 0xb28c, 0xb2df, 0x4375, 0x44d4, 0x42b2, 0x43dd, 0xbaf0, 0x41ef, 0xbf91, 0xb24b, 0xab23, 0x1a7b, 0x285e, 0xb09a, 0x40d1, 0x4149, 0x4084, 0x1cc5, 0xba75, 0x4348, 0xba27, 0xa8ac, 0xa7d2, 0x42b9, 0x334a, 0x4594, 0x40c1, 0x42e5, 0x41a1, 0x43f8, 0x4378, 0xa603, 0xb264, 0xba4d, 0xbf53, 0xb073, 0x1f6a, 0x1d2f, 0x1c93, 0x46b3, 0x4289, 0xa678, 0x1899, 0x434b, 0x438d, 0x43e2, 0xa5b7, 0x1f65, 0x3ea4, 0x44dd, 0x43ba, 0xb2b5, 0x2490, 0x4316, 0x18d2, 0xb257, 0x4472, 0xbfb4, 0x403c, 0x4036, 0x1989, 0xa6ae, 0xb211, 0x1d91, 0x43ea, 0x404a, 0x30c3, 0x43ac, 0x124b, 0x164d, 0x40e4, 0x4271, 0xb2c4, 0x2d41, 0x417b, 0xbf14, 0x40cc, 0xba78, 0x426e, 0x31c8, 0x44c3, 0xafc8, 0x43d0, 0x1d72, 0x0d4e, 0x1c65, 0xa4d5, 0xbf7d, 0x2ea8, 0xb0c3, 0x4424, 0x466c, 0x16b6, 0x43c5, 0x181f, 0x1f13, 0x398f, 0x42e2, 0x4354, 0x18b0, 0x2c22, 0x43c8, 0xae35, 0x44d4, 0x4113, 0x1834, 0x4590, 0xbf27, 0x400e, 0x42e3, 0x4289, 0xb28d, 0x0cf4, 0x32b2, 0x0f02, 0x414b, 0x40d5, 0x43c8, 0x4565, 0x376a, 0x330d, 0x1a0e, 0xbf53, 0xb0bd, 0x42b4, 0x422e, 0xb05a, 0x41bb, 0xa3cb, 0x0947, 0xb064, 0x42c4, 0x4156, 0x1bb2, 0x0104, 0x42c6, 0x4181, 0x4096, 0xba72, 0xb0da, 0x42e1, 0xa882, 0x427e, 0x4078, 0x4174, 0x4165, 0x406c, 0xbf01, 0xb0e3, 0x40ec, 0x29ba, 0xba6a, 0x183d, 0xb22c, 0x1b41, 0xb20d, 0xbf18, 0x027e, 0x42de, 0x429a, 0x4326, 0xbace, 0x412b, 0x4394, 0x43cf, 0xbfa1, 0xaeee, 0x4398, 0x18da, 0x42d5, 0x1c5e, 0x3817, 0x312b, 0x145c, 0xb294, 0x42c0, 0x40b9, 0x42fb, 0x3eb7, 0x44e1, 0x43ef, 0x4137, 0x0b6e, 0x4248, 0x4260, 0x4130, 0x43ea, 0x413f, 0x1ae0, 0x41b9, 0x43dd, 0x40dc, 0xbf8f, 0x42bb, 0x425a, 0x40cf, 0xbaca, 0x1f8a, 0xb243, 0x1802, 0x1e4f, 0x035e, 0x411a, 0x4160, 0xae4e, 0x1d60, 0xbfdb, 0x32ef, 0x42b2, 0x46d4, 0xbf70, 0x1ffa, 0x40bc, 0xb05a, 0xbaef, 0xb2ef, 0xb2aa, 0xbf8c, 0x194e, 0x42e9, 0x46d3, 0x4388, 0x40d0, 0x200f, 0xba17, 0xba0d, 0x443e, 0x2066, 0x410d, 0x40ca, 0xa869, 0xb07f, 0x425e, 0x432d, 0xb2b5, 0x43db, 0x1d95, 0x435a, 0xaf6a, 0xb2b0, 0x1b4d, 0x41de, 0xba5f, 0x1217, 0xbf81, 0xb217, 0xb224, 0x1db7, 0x1a1b, 0x2695, 0x406a, 0x3710, 0xb291, 0x3615, 0x3e59, 0x4181, 0x188d, 0x41fd, 0xbace, 0x46b2, 0x431a, 0x4121, 0x43bf, 0x186f, 0x4178, 0x00f5, 0xbf39, 0xa8c3, 0x0415, 0xba21, 0xbad8, 0x3fc6, 0x4116, 0x41f6, 0x443e, 0x0825, 0x43cf, 0x4388, 0x3e82, 0x171a, 0xb0e0, 0xbfa7, 0x42eb, 0x4006, 0x4029, 0x4128, 0x422a, 0x4279, 0x44a1, 0x45cc, 0x1913, 0x4174, 0xbf54, 0xb2a7, 0x4123, 0x4236, 0xba06, 0x425d, 0x1d1c, 0xbf12, 0x12b2, 0xba57, 0x19cf, 0xba6a, 0xb29e, 0xbfb6, 0x2718, 0xaf18, 0xba0b, 0xb2d7, 0x405e, 0x3f04, 0x268f, 0x426e, 0x1a97, 0xa68b, 0x1dab, 0x4104, 0x4661, 0x280a, 0x4550, 0x29ff, 0x41c9, 0xbf70, 0x432b, 0x1fb6, 0x2eb9, 0x419c, 0xb2cc, 0x2b88, 0x0da0, 0xb2b1, 0x42a6, 0x1ad6, 0xbfc1, 0x4599, 0x40b2, 0xb291, 0x43d2, 0x421a, 0x4209, 0x432a, 0xb04f, 0xbaf6, 0x16c6, 0x46d3, 0xbac0, 0x1dbe, 0xbff0, 0x40e7, 0x2de7, 0xbf21, 0x1d42, 0x0f07, 0x4274, 0x4151, 0x46e4, 0xb00a, 0xbad8, 0xbf34, 0x40a1, 0x2ef9, 0x4396, 0xbf53, 0x40e9, 0x4239, 0x42da, 0x405f, 0xba0c, 0x4368, 0xb2de, 0x4449, 0x4278, 0xb2e9, 0x4317, 0x405f, 0xb063, 0x4100, 0x4698, 0x40b0, 0x45c5, 0xb2df, 0x454f, 0x2aca, 0x42ea, 0x43b0, 0x3976, 0x4327, 0x2cbd, 0xbf7d, 0x1c79, 0x2d95, 0x41cd, 0x1af1, 0x408a, 0x2eae, 0x419d, 0x1859, 0x42bf, 0x4272, 0x412a, 0x42a9, 0x0694, 0x1f68, 0x4653, 0x3a31, 0x4277, 0xa6d1, 0x413c, 0xb23c, 0xbfc0, 0x42f6, 0x4377, 0x418f, 0x464c, 0x4133, 0x4129, 0xb294, 0xbfa9, 0x247d, 0x1b16, 0x21cc, 0xbf70, 0x4770, 0xe7fe + ], + StartRegs = [0x181236f9, 0x459e9e0f, 0xd961342f, 0x122ddd5e, 0x38b78514, 0x9508b2ee, 0x97896aed, 0xad92e120, 0xfd37fa46, 0x2e0a81f8, 0x8cf97fb4, 0x8d4b1243, 0x5e1eda21, 0x54da9be4, 0x00000000, 0x500001f0 + ], + FinalRegs = [0x00fffff3, 0x000000cc, 0xffffffce, 0xffffffff, 0x0000007d, 0x00fffff8, 0x00001b20, 0xffff4210, 0x00000007, 0x6e4f1c33, 0xfffffaff, 0xfffffaff, 0x000000c5, 0x54dab658, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x4239, 0xba45, 0xa273, 0xbacd, 0xb2e4, 0x0b51, 0x406c, 0x43a9, 0x1ae2, 0xbad9, 0x1eff, 0xbfc2, 0x42b3, 0xb0ef, 0xb0ab, 0x2572, 0x4344, 0x4165, 0xb279, 0x127a, 0xb2e2, 0xac76, 0x35b9, 0xb2d5, 0x41d2, 0x3d37, 0x43f2, 0xbf9a, 0xb207, 0x40b9, 0xba37, 0x21f3, 0x03e4, 0x430f, 0x444d, 0x1d73, 0x4354, 0x07a6, 0x1b8f, 0xb284, 0xb239, 0xbaed, 0xb2b2, 0xb2a6, 0x45da, 0xb20a, 0x1f8f, 0xb21e, 0x40fa, 0xa7cd, 0xb237, 0xbfd7, 0x444e, 0x4113, 0xbad8, 0x34c6, 0xbf43, 0xa315, 0x14bc, 0x416b, 0x4246, 0x3ae5, 0x46a3, 0xac12, 0xba29, 0xad08, 0x11c5, 0xb28e, 0x1443, 0xbf60, 0x41cb, 0xba32, 0x40a7, 0x40a0, 0x4206, 0xb250, 0xb268, 0x435b, 0xbf8f, 0x429d, 0xbfc0, 0x422b, 0x43e4, 0xb070, 0x1d90, 0x405b, 0x40f8, 0x435b, 0xb232, 0x4251, 0xbfac, 0x424d, 0x39e5, 0xb2b8, 0x46e3, 0x0171, 0x46bd, 0xbf90, 0x40c3, 0x36af, 0x429a, 0x41e9, 0xb25d, 0xb000, 0x3c9d, 0x096e, 0x4030, 0xbfd1, 0x1f7e, 0x27fe, 0xb073, 0x41e0, 0xa276, 0xb0ae, 0xb062, 0x1d63, 0xb203, 0xbfaf, 0x4323, 0x4376, 0xbac1, 0xb0e5, 0x43b8, 0x26f1, 0x4120, 0x37ee, 0xbf7a, 0xb232, 0x43ca, 0x43b9, 0xb2c2, 0x46c0, 0x3ea3, 0x152b, 0x4202, 0x4232, 0xb2b0, 0xbf15, 0xb299, 0xba6a, 0x4199, 0x102a, 0x4023, 0x401a, 0xaa93, 0x4190, 0xba4c, 0xa1ab, 0xb2bd, 0xb017, 0x4375, 0x40b6, 0x43b8, 0x18cf, 0x18c8, 0x406c, 0xac65, 0x2956, 0x0fe6, 0x4001, 0x1c31, 0x423a, 0x42c6, 0x41fa, 0x1bf9, 0x40b7, 0x21bc, 0xbf43, 0x405e, 0x1ce7, 0x41a4, 0x415e, 0x41eb, 0x40a9, 0x41fc, 0xb004, 0x42e1, 0x4370, 0x42db, 0xbaee, 0x42df, 0x0d78, 0xb0f8, 0x4394, 0xb2a4, 0x3923, 0x3c97, 0x4206, 0xb0fb, 0xb21c, 0x10cb, 0x4050, 0x3634, 0xbf03, 0xb0ad, 0x46ed, 0x38c3, 0x1945, 0x4236, 0x17c2, 0x282d, 0xbae2, 0x40b6, 0x22e8, 0x42ac, 0x1b6d, 0xba53, 0x414e, 0xb013, 0xb0c2, 0x41ff, 0xb281, 0x1cd3, 0x41da, 0x4141, 0x420f, 0xa91b, 0x35d5, 0xa6d8, 0xba09, 0x4156, 0x278e, 0xbf11, 0x45be, 0xa4ee, 0xb28b, 0x3d9d, 0xb2b3, 0x0dea, 0xa044, 0x43d1, 0x2843, 0x425b, 0xa5dc, 0x26b9, 0x1ef7, 0xba61, 0x028d, 0xa302, 0xb061, 0x4306, 0x2b7d, 0x1b33, 0x4215, 0x1dbe, 0x40cc, 0x41af, 0x1fef, 0xbf77, 0x4308, 0xba38, 0x4306, 0x4099, 0xb275, 0xbf6d, 0xbae5, 0x1f9f, 0x1cc6, 0x1101, 0x42ca, 0x2e58, 0x41a7, 0xb235, 0x29fa, 0x43dd, 0x41d8, 0x402c, 0x4138, 0x41e8, 0x3d38, 0xba10, 0x41f6, 0xb26f, 0x1e35, 0xba03, 0xb2b3, 0x1c33, 0x40f7, 0x3fbf, 0x4359, 0x45ae, 0xbf1f, 0x405e, 0x43f4, 0x419a, 0x207e, 0xa253, 0xb084, 0xac7c, 0xb232, 0xbf00, 0xb01e, 0x1b16, 0x318e, 0xae09, 0x447c, 0x1a2c, 0xaf1f, 0x0953, 0xaf93, 0xb23f, 0xb286, 0x43b0, 0x1cdb, 0xba74, 0x2e38, 0xbf3d, 0x3640, 0x1eba, 0x3f29, 0x4339, 0x43b4, 0x257a, 0xba48, 0xb20d, 0x188c, 0x412b, 0x1232, 0xba24, 0x464e, 0xb2f5, 0x42fe, 0x40d8, 0xa5b3, 0xb210, 0x43ad, 0xaf54, 0xb273, 0x0770, 0x4261, 0x415a, 0x42cf, 0x3104, 0x1c29, 0x368d, 0xba20, 0xbfd2, 0x416b, 0xb2ed, 0x40a7, 0x1ff4, 0xbaf4, 0x1d6a, 0x1d89, 0x4398, 0x1839, 0xb0d7, 0x458e, 0xba38, 0x4019, 0x432c, 0x028b, 0x4323, 0xb09c, 0x1444, 0x423d, 0xb286, 0xbfe0, 0xba19, 0x1439, 0x346c, 0xbfa5, 0xb0ab, 0x2da0, 0x403d, 0x40b0, 0x404a, 0x105c, 0x1c9c, 0x408b, 0x4239, 0x2701, 0x226e, 0x41ba, 0xb246, 0x4123, 0xb0ba, 0x40b6, 0xbfcf, 0xb065, 0x4220, 0x4200, 0x410e, 0x0e39, 0x415f, 0xba6e, 0x43ef, 0x424c, 0x3ba0, 0x3e8d, 0x45b6, 0x4037, 0x4179, 0x4241, 0xb0dd, 0xbf2f, 0x40ff, 0x434a, 0x4336, 0xbada, 0xb279, 0xb0f4, 0x11c7, 0x41c2, 0x1e64, 0x4301, 0x1e52, 0x1892, 0xbfd2, 0x409a, 0xba57, 0x4197, 0x432d, 0xbf25, 0x40a2, 0xac2d, 0xaaed, 0xb257, 0x34e1, 0xba04, 0x4258, 0x18b0, 0x4384, 0x1397, 0xa3ae, 0xb0d7, 0xb28f, 0x425e, 0x422b, 0x4314, 0x222d, 0x3b0e, 0xbf97, 0x41c3, 0x4209, 0x43b1, 0x2442, 0xa92c, 0xb02c, 0xbf35, 0xb293, 0x2e27, 0x41f5, 0x4322, 0x0a11, 0x40ee, 0x0966, 0xbad5, 0xb28e, 0x19b3, 0x4015, 0x45be, 0xb25d, 0x415d, 0x41e0, 0x1bc8, 0xbfd9, 0xb08a, 0x1c28, 0x4281, 0x4309, 0x430a, 0x402c, 0xb2c2, 0x40e4, 0xba22, 0xb00d, 0x418c, 0x32ee, 0x40a5, 0xb2bb, 0x43fb, 0xb2f9, 0x43bc, 0x41b8, 0x4098, 0x1a85, 0x4162, 0x41d2, 0x40be, 0x4613, 0x2b71, 0x0ee4, 0xb0ef, 0xbae0, 0xbf17, 0x43cb, 0x4082, 0xb20f, 0x41a0, 0x198a, 0x2530, 0x2c43, 0x3981, 0x1f52, 0x423e, 0xbf04, 0x43a2, 0x4043, 0x4079, 0x1bb9, 0x4268, 0x2138, 0x1aee, 0xbf88, 0x419c, 0xb2cd, 0x1cf4, 0x03df, 0x1acf, 0x4589, 0xba06, 0x4207, 0x43d8, 0xba09, 0xbfa0, 0x4606, 0x4243, 0x417c, 0x3043, 0xbf6e, 0x4365, 0x4488, 0x405d, 0x2d15, 0x41c4, 0x4111, 0xbf62, 0x4321, 0x4135, 0x3c6e, 0x0893, 0x260f, 0x400c, 0x4091, 0x4135, 0x40a7, 0x116e, 0x467d, 0xbf2e, 0x0fae, 0x4091, 0xa2a7, 0x0bed, 0x4550, 0x4268, 0x4305, 0xbf46, 0xb2e8, 0x3fe3, 0x1942, 0x439f, 0xa9d4, 0xbf9b, 0x4236, 0x1d7a, 0x28a1, 0xb0d2, 0x3a43, 0x40f6, 0x42c5, 0x4275, 0xb245, 0x43c2, 0x3019, 0x1eff, 0xa434, 0x4360, 0x3af7, 0x42bb, 0xbf80, 0x44ab, 0xbf4d, 0xab4f, 0xb068, 0xaf79, 0x4291, 0xb281, 0x4621, 0x42fa, 0xb2fe, 0x10f6, 0xbf80, 0x4018, 0x41ed, 0xb24f, 0xb02e, 0x456f, 0x41da, 0xbf1d, 0xbf90, 0x4118, 0x4307, 0x422d, 0x430e, 0x41c3, 0x0fe8, 0x315d, 0xb2b8, 0x1d2f, 0x1e41, 0x0a83, 0x41ac, 0x1d8c, 0x43b9, 0x4691, 0x45c2, 0xba25, 0x1cf0, 0xba01, 0x0098, 0xbfb2, 0x05fd, 0x404f, 0x4268, 0x0194, 0xabd2, 0xbfd0, 0xbf93, 0x1489, 0xb274, 0x2bec, 0x4225, 0x2a29, 0xba47, 0x23e9, 0xa627, 0xba14, 0x40ea, 0xa9ef, 0x27b9, 0xba57, 0xbf5d, 0x1a24, 0x465d, 0x4319, 0xba31, 0x4170, 0x04ed, 0xb295, 0xbaca, 0x417b, 0x4130, 0xb28a, 0x406b, 0xb252, 0x4090, 0x371e, 0x43fd, 0x1b99, 0x222a, 0x40f2, 0x4607, 0xbf91, 0xa406, 0x0d68, 0x410b, 0x41cb, 0xbfca, 0x43b5, 0x1cc7, 0x3cf1, 0xb275, 0x438c, 0x409d, 0xa26c, 0x433d, 0x1e60, 0xb24f, 0xbf63, 0x1b7e, 0x423d, 0x129a, 0xb0d1, 0x40b2, 0x1f17, 0x1fa4, 0x4095, 0xb068, 0xbf70, 0x40aa, 0x2399, 0x012b, 0x00cb, 0x410b, 0x2251, 0x1eed, 0x1f84, 0xaab2, 0xb064, 0x4090, 0xb043, 0x4180, 0x46a0, 0x2617, 0x4203, 0x4122, 0x136f, 0xbf46, 0x195a, 0x43d9, 0xb025, 0xb02b, 0x42db, 0x41e2, 0xa62b, 0x404e, 0xba7f, 0xbfa9, 0x31f0, 0x43db, 0x46b1, 0x404a, 0x1862, 0x425a, 0xb21e, 0x41a0, 0x4573, 0x40f0, 0xb228, 0x423b, 0x1f8f, 0x410f, 0x0667, 0x44a3, 0x02bf, 0xb280, 0x4008, 0x44d0, 0x4216, 0xbf61, 0x3b93, 0x420f, 0x0b94, 0xa28c, 0x432b, 0x1fa5, 0xbf5e, 0x4305, 0x42dc, 0x42ce, 0x4335, 0x1c24, 0x4615, 0x4295, 0x11a7, 0xba38, 0x42e6, 0x46aa, 0x1faa, 0xb2b0, 0xb222, 0x1112, 0x094a, 0x43d4, 0x4034, 0x1b1b, 0xbf66, 0x1fa4, 0x4082, 0x4228, 0x1b74, 0xb252, 0x3875, 0xb2f6, 0x23ec, 0x420b, 0x40b2, 0x46a8, 0x06f2, 0x1954, 0xb206, 0xbfac, 0x421d, 0xbac3, 0xbf80, 0xb0e5, 0x4274, 0xbfaf, 0xbf70, 0x36bc, 0xb2ae, 0xba44, 0x405c, 0xbf70, 0xb0be, 0xbadf, 0x304b, 0x4231, 0xb250, 0x18ca, 0xba6b, 0x4144, 0xb248, 0x2d0a, 0xbf90, 0x4474, 0x43e4, 0x4307, 0xa8c6, 0x4153, 0x41c6, 0xbf5c, 0x4161, 0x0875, 0x432f, 0xb234, 0xb2f0, 0x417e, 0xb2b2, 0x3ea9, 0x42d7, 0xba5e, 0xb04b, 0x1d7c, 0x4227, 0xbfbd, 0x422f, 0x43db, 0x3b1d, 0x41a3, 0x431b, 0xb29f, 0x433a, 0xb275, 0xa6ed, 0x4035, 0x07e4, 0x1978, 0x4096, 0x1f30, 0x386d, 0x4132, 0x41e5, 0xb254, 0x04e9, 0x1f81, 0xb2c5, 0x1507, 0xbf49, 0x4464, 0x431d, 0xa8cc, 0x41ab, 0x42df, 0x4158, 0x43e5, 0x4243, 0xb230, 0xb24b, 0xb262, 0x0f27, 0x42c5, 0x4321, 0xbad1, 0x0b26, 0x24b1, 0x18e4, 0xb285, 0xbf8d, 0x434a, 0x42f9, 0x4007, 0x4061, 0xbfc3, 0x3a04, 0x45ed, 0xa055, 0x44c8, 0xa20f, 0x423d, 0x1ee2, 0x44b5, 0x1e41, 0xae96, 0x0d96, 0x411b, 0x4384, 0x45ab, 0xbf15, 0x1f8a, 0x0b2d, 0x42e4, 0x437d, 0xb23c, 0x3ca6, 0x1d27, 0x429f, 0xbad6, 0x4056, 0x429a, 0xbf02, 0xb0c7, 0xbfb0, 0x4300, 0x413c, 0x40ca, 0x42e3, 0x426b, 0x08df, 0xa9a2, 0x44ec, 0x42e1, 0x4295, 0x0436, 0xb2e8, 0xbf53, 0x4499, 0xa2c7, 0x4000, 0x4274, 0x4299, 0xb211, 0x40c7, 0x31f0, 0xb25e, 0xb2f4, 0x413b, 0x1d10, 0x3f32, 0xbf22, 0x4381, 0x2c17, 0xb2a3, 0x4075, 0x3d15, 0x4455, 0x1a65, 0x40c1, 0x2389, 0x41eb, 0x1238, 0xb2ab, 0x1fea, 0x4022, 0x1f25, 0x4072, 0x403e, 0xb021, 0x45c5, 0x1c07, 0x421a, 0x4557, 0xbf60, 0x416b, 0xb2f3, 0xbf7d, 0x4005, 0x3e21, 0xbf60, 0xb225, 0x409b, 0x4340, 0x00db, 0x413d, 0x4275, 0x4574, 0x44b1, 0x412f, 0x4049, 0x2295, 0x20e6, 0xbf0c, 0x4021, 0x185e, 0x4317, 0x41a6, 0xb24e, 0x41c4, 0x2d7b, 0xb07b, 0x0b1e, 0x2317, 0x4254, 0x295f, 0x42f9, 0x4644, 0x1a5e, 0xb208, 0xba1e, 0x400d, 0x1bc5, 0xa2fc, 0x194f, 0xbfb5, 0xb26e, 0x40fd, 0x37c1, 0x4314, 0x432e, 0xaa7f, 0x17da, 0x43e1, 0x1ad4, 0xb06b, 0x4001, 0x071f, 0xba54, 0x1eeb, 0x1ddb, 0x2da8, 0x432c, 0x307f, 0x41c2, 0x2eea, 0xbad1, 0x43d7, 0xbf5c, 0x1edb, 0xbaed, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x7050d002, 0x2ad824dc, 0xcda44a5a, 0xbe440822, 0x6fa909fc, 0x5324049c, 0xb3f8f834, 0x42ed399f, 0x207b9830, 0xa4b5347a, 0x1f876040, 0xfb4d4a81, 0x16ce792a, 0x219b1d90, 0x00000000, 0x300001f0 }, - FinalRegs = new uint[] { 0x0000007f, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x17000000, 0xffffffff, 0x00001631, 0x0000160f, 0x00000001, 0x16ce8d4b, 0x16cfdbf9, 0x000166eb, 0x00000000, 0xa00001d0 }, + Instructions = [0x4239, 0xba45, 0xa273, 0xbacd, 0xb2e4, 0x0b51, 0x406c, 0x43a9, 0x1ae2, 0xbad9, 0x1eff, 0xbfc2, 0x42b3, 0xb0ef, 0xb0ab, 0x2572, 0x4344, 0x4165, 0xb279, 0x127a, 0xb2e2, 0xac76, 0x35b9, 0xb2d5, 0x41d2, 0x3d37, 0x43f2, 0xbf9a, 0xb207, 0x40b9, 0xba37, 0x21f3, 0x03e4, 0x430f, 0x444d, 0x1d73, 0x4354, 0x07a6, 0x1b8f, 0xb284, 0xb239, 0xbaed, 0xb2b2, 0xb2a6, 0x45da, 0xb20a, 0x1f8f, 0xb21e, 0x40fa, 0xa7cd, 0xb237, 0xbfd7, 0x444e, 0x4113, 0xbad8, 0x34c6, 0xbf43, 0xa315, 0x14bc, 0x416b, 0x4246, 0x3ae5, 0x46a3, 0xac12, 0xba29, 0xad08, 0x11c5, 0xb28e, 0x1443, 0xbf60, 0x41cb, 0xba32, 0x40a7, 0x40a0, 0x4206, 0xb250, 0xb268, 0x435b, 0xbf8f, 0x429d, 0xbfc0, 0x422b, 0x43e4, 0xb070, 0x1d90, 0x405b, 0x40f8, 0x435b, 0xb232, 0x4251, 0xbfac, 0x424d, 0x39e5, 0xb2b8, 0x46e3, 0x0171, 0x46bd, 0xbf90, 0x40c3, 0x36af, 0x429a, 0x41e9, 0xb25d, 0xb000, 0x3c9d, 0x096e, 0x4030, 0xbfd1, 0x1f7e, 0x27fe, 0xb073, 0x41e0, 0xa276, 0xb0ae, 0xb062, 0x1d63, 0xb203, 0xbfaf, 0x4323, 0x4376, 0xbac1, 0xb0e5, 0x43b8, 0x26f1, 0x4120, 0x37ee, 0xbf7a, 0xb232, 0x43ca, 0x43b9, 0xb2c2, 0x46c0, 0x3ea3, 0x152b, 0x4202, 0x4232, 0xb2b0, 0xbf15, 0xb299, 0xba6a, 0x4199, 0x102a, 0x4023, 0x401a, 0xaa93, 0x4190, 0xba4c, 0xa1ab, 0xb2bd, 0xb017, 0x4375, 0x40b6, 0x43b8, 0x18cf, 0x18c8, 0x406c, 0xac65, 0x2956, 0x0fe6, 0x4001, 0x1c31, 0x423a, 0x42c6, 0x41fa, 0x1bf9, 0x40b7, 0x21bc, 0xbf43, 0x405e, 0x1ce7, 0x41a4, 0x415e, 0x41eb, 0x40a9, 0x41fc, 0xb004, 0x42e1, 0x4370, 0x42db, 0xbaee, 0x42df, 0x0d78, 0xb0f8, 0x4394, 0xb2a4, 0x3923, 0x3c97, 0x4206, 0xb0fb, 0xb21c, 0x10cb, 0x4050, 0x3634, 0xbf03, 0xb0ad, 0x46ed, 0x38c3, 0x1945, 0x4236, 0x17c2, 0x282d, 0xbae2, 0x40b6, 0x22e8, 0x42ac, 0x1b6d, 0xba53, 0x414e, 0xb013, 0xb0c2, 0x41ff, 0xb281, 0x1cd3, 0x41da, 0x4141, 0x420f, 0xa91b, 0x35d5, 0xa6d8, 0xba09, 0x4156, 0x278e, 0xbf11, 0x45be, 0xa4ee, 0xb28b, 0x3d9d, 0xb2b3, 0x0dea, 0xa044, 0x43d1, 0x2843, 0x425b, 0xa5dc, 0x26b9, 0x1ef7, 0xba61, 0x028d, 0xa302, 0xb061, 0x4306, 0x2b7d, 0x1b33, 0x4215, 0x1dbe, 0x40cc, 0x41af, 0x1fef, 0xbf77, 0x4308, 0xba38, 0x4306, 0x4099, 0xb275, 0xbf6d, 0xbae5, 0x1f9f, 0x1cc6, 0x1101, 0x42ca, 0x2e58, 0x41a7, 0xb235, 0x29fa, 0x43dd, 0x41d8, 0x402c, 0x4138, 0x41e8, 0x3d38, 0xba10, 0x41f6, 0xb26f, 0x1e35, 0xba03, 0xb2b3, 0x1c33, 0x40f7, 0x3fbf, 0x4359, 0x45ae, 0xbf1f, 0x405e, 0x43f4, 0x419a, 0x207e, 0xa253, 0xb084, 0xac7c, 0xb232, 0xbf00, 0xb01e, 0x1b16, 0x318e, 0xae09, 0x447c, 0x1a2c, 0xaf1f, 0x0953, 0xaf93, 0xb23f, 0xb286, 0x43b0, 0x1cdb, 0xba74, 0x2e38, 0xbf3d, 0x3640, 0x1eba, 0x3f29, 0x4339, 0x43b4, 0x257a, 0xba48, 0xb20d, 0x188c, 0x412b, 0x1232, 0xba24, 0x464e, 0xb2f5, 0x42fe, 0x40d8, 0xa5b3, 0xb210, 0x43ad, 0xaf54, 0xb273, 0x0770, 0x4261, 0x415a, 0x42cf, 0x3104, 0x1c29, 0x368d, 0xba20, 0xbfd2, 0x416b, 0xb2ed, 0x40a7, 0x1ff4, 0xbaf4, 0x1d6a, 0x1d89, 0x4398, 0x1839, 0xb0d7, 0x458e, 0xba38, 0x4019, 0x432c, 0x028b, 0x4323, 0xb09c, 0x1444, 0x423d, 0xb286, 0xbfe0, 0xba19, 0x1439, 0x346c, 0xbfa5, 0xb0ab, 0x2da0, 0x403d, 0x40b0, 0x404a, 0x105c, 0x1c9c, 0x408b, 0x4239, 0x2701, 0x226e, 0x41ba, 0xb246, 0x4123, 0xb0ba, 0x40b6, 0xbfcf, 0xb065, 0x4220, 0x4200, 0x410e, 0x0e39, 0x415f, 0xba6e, 0x43ef, 0x424c, 0x3ba0, 0x3e8d, 0x45b6, 0x4037, 0x4179, 0x4241, 0xb0dd, 0xbf2f, 0x40ff, 0x434a, 0x4336, 0xbada, 0xb279, 0xb0f4, 0x11c7, 0x41c2, 0x1e64, 0x4301, 0x1e52, 0x1892, 0xbfd2, 0x409a, 0xba57, 0x4197, 0x432d, 0xbf25, 0x40a2, 0xac2d, 0xaaed, 0xb257, 0x34e1, 0xba04, 0x4258, 0x18b0, 0x4384, 0x1397, 0xa3ae, 0xb0d7, 0xb28f, 0x425e, 0x422b, 0x4314, 0x222d, 0x3b0e, 0xbf97, 0x41c3, 0x4209, 0x43b1, 0x2442, 0xa92c, 0xb02c, 0xbf35, 0xb293, 0x2e27, 0x41f5, 0x4322, 0x0a11, 0x40ee, 0x0966, 0xbad5, 0xb28e, 0x19b3, 0x4015, 0x45be, 0xb25d, 0x415d, 0x41e0, 0x1bc8, 0xbfd9, 0xb08a, 0x1c28, 0x4281, 0x4309, 0x430a, 0x402c, 0xb2c2, 0x40e4, 0xba22, 0xb00d, 0x418c, 0x32ee, 0x40a5, 0xb2bb, 0x43fb, 0xb2f9, 0x43bc, 0x41b8, 0x4098, 0x1a85, 0x4162, 0x41d2, 0x40be, 0x4613, 0x2b71, 0x0ee4, 0xb0ef, 0xbae0, 0xbf17, 0x43cb, 0x4082, 0xb20f, 0x41a0, 0x198a, 0x2530, 0x2c43, 0x3981, 0x1f52, 0x423e, 0xbf04, 0x43a2, 0x4043, 0x4079, 0x1bb9, 0x4268, 0x2138, 0x1aee, 0xbf88, 0x419c, 0xb2cd, 0x1cf4, 0x03df, 0x1acf, 0x4589, 0xba06, 0x4207, 0x43d8, 0xba09, 0xbfa0, 0x4606, 0x4243, 0x417c, 0x3043, 0xbf6e, 0x4365, 0x4488, 0x405d, 0x2d15, 0x41c4, 0x4111, 0xbf62, 0x4321, 0x4135, 0x3c6e, 0x0893, 0x260f, 0x400c, 0x4091, 0x4135, 0x40a7, 0x116e, 0x467d, 0xbf2e, 0x0fae, 0x4091, 0xa2a7, 0x0bed, 0x4550, 0x4268, 0x4305, 0xbf46, 0xb2e8, 0x3fe3, 0x1942, 0x439f, 0xa9d4, 0xbf9b, 0x4236, 0x1d7a, 0x28a1, 0xb0d2, 0x3a43, 0x40f6, 0x42c5, 0x4275, 0xb245, 0x43c2, 0x3019, 0x1eff, 0xa434, 0x4360, 0x3af7, 0x42bb, 0xbf80, 0x44ab, 0xbf4d, 0xab4f, 0xb068, 0xaf79, 0x4291, 0xb281, 0x4621, 0x42fa, 0xb2fe, 0x10f6, 0xbf80, 0x4018, 0x41ed, 0xb24f, 0xb02e, 0x456f, 0x41da, 0xbf1d, 0xbf90, 0x4118, 0x4307, 0x422d, 0x430e, 0x41c3, 0x0fe8, 0x315d, 0xb2b8, 0x1d2f, 0x1e41, 0x0a83, 0x41ac, 0x1d8c, 0x43b9, 0x4691, 0x45c2, 0xba25, 0x1cf0, 0xba01, 0x0098, 0xbfb2, 0x05fd, 0x404f, 0x4268, 0x0194, 0xabd2, 0xbfd0, 0xbf93, 0x1489, 0xb274, 0x2bec, 0x4225, 0x2a29, 0xba47, 0x23e9, 0xa627, 0xba14, 0x40ea, 0xa9ef, 0x27b9, 0xba57, 0xbf5d, 0x1a24, 0x465d, 0x4319, 0xba31, 0x4170, 0x04ed, 0xb295, 0xbaca, 0x417b, 0x4130, 0xb28a, 0x406b, 0xb252, 0x4090, 0x371e, 0x43fd, 0x1b99, 0x222a, 0x40f2, 0x4607, 0xbf91, 0xa406, 0x0d68, 0x410b, 0x41cb, 0xbfca, 0x43b5, 0x1cc7, 0x3cf1, 0xb275, 0x438c, 0x409d, 0xa26c, 0x433d, 0x1e60, 0xb24f, 0xbf63, 0x1b7e, 0x423d, 0x129a, 0xb0d1, 0x40b2, 0x1f17, 0x1fa4, 0x4095, 0xb068, 0xbf70, 0x40aa, 0x2399, 0x012b, 0x00cb, 0x410b, 0x2251, 0x1eed, 0x1f84, 0xaab2, 0xb064, 0x4090, 0xb043, 0x4180, 0x46a0, 0x2617, 0x4203, 0x4122, 0x136f, 0xbf46, 0x195a, 0x43d9, 0xb025, 0xb02b, 0x42db, 0x41e2, 0xa62b, 0x404e, 0xba7f, 0xbfa9, 0x31f0, 0x43db, 0x46b1, 0x404a, 0x1862, 0x425a, 0xb21e, 0x41a0, 0x4573, 0x40f0, 0xb228, 0x423b, 0x1f8f, 0x410f, 0x0667, 0x44a3, 0x02bf, 0xb280, 0x4008, 0x44d0, 0x4216, 0xbf61, 0x3b93, 0x420f, 0x0b94, 0xa28c, 0x432b, 0x1fa5, 0xbf5e, 0x4305, 0x42dc, 0x42ce, 0x4335, 0x1c24, 0x4615, 0x4295, 0x11a7, 0xba38, 0x42e6, 0x46aa, 0x1faa, 0xb2b0, 0xb222, 0x1112, 0x094a, 0x43d4, 0x4034, 0x1b1b, 0xbf66, 0x1fa4, 0x4082, 0x4228, 0x1b74, 0xb252, 0x3875, 0xb2f6, 0x23ec, 0x420b, 0x40b2, 0x46a8, 0x06f2, 0x1954, 0xb206, 0xbfac, 0x421d, 0xbac3, 0xbf80, 0xb0e5, 0x4274, 0xbfaf, 0xbf70, 0x36bc, 0xb2ae, 0xba44, 0x405c, 0xbf70, 0xb0be, 0xbadf, 0x304b, 0x4231, 0xb250, 0x18ca, 0xba6b, 0x4144, 0xb248, 0x2d0a, 0xbf90, 0x4474, 0x43e4, 0x4307, 0xa8c6, 0x4153, 0x41c6, 0xbf5c, 0x4161, 0x0875, 0x432f, 0xb234, 0xb2f0, 0x417e, 0xb2b2, 0x3ea9, 0x42d7, 0xba5e, 0xb04b, 0x1d7c, 0x4227, 0xbfbd, 0x422f, 0x43db, 0x3b1d, 0x41a3, 0x431b, 0xb29f, 0x433a, 0xb275, 0xa6ed, 0x4035, 0x07e4, 0x1978, 0x4096, 0x1f30, 0x386d, 0x4132, 0x41e5, 0xb254, 0x04e9, 0x1f81, 0xb2c5, 0x1507, 0xbf49, 0x4464, 0x431d, 0xa8cc, 0x41ab, 0x42df, 0x4158, 0x43e5, 0x4243, 0xb230, 0xb24b, 0xb262, 0x0f27, 0x42c5, 0x4321, 0xbad1, 0x0b26, 0x24b1, 0x18e4, 0xb285, 0xbf8d, 0x434a, 0x42f9, 0x4007, 0x4061, 0xbfc3, 0x3a04, 0x45ed, 0xa055, 0x44c8, 0xa20f, 0x423d, 0x1ee2, 0x44b5, 0x1e41, 0xae96, 0x0d96, 0x411b, 0x4384, 0x45ab, 0xbf15, 0x1f8a, 0x0b2d, 0x42e4, 0x437d, 0xb23c, 0x3ca6, 0x1d27, 0x429f, 0xbad6, 0x4056, 0x429a, 0xbf02, 0xb0c7, 0xbfb0, 0x4300, 0x413c, 0x40ca, 0x42e3, 0x426b, 0x08df, 0xa9a2, 0x44ec, 0x42e1, 0x4295, 0x0436, 0xb2e8, 0xbf53, 0x4499, 0xa2c7, 0x4000, 0x4274, 0x4299, 0xb211, 0x40c7, 0x31f0, 0xb25e, 0xb2f4, 0x413b, 0x1d10, 0x3f32, 0xbf22, 0x4381, 0x2c17, 0xb2a3, 0x4075, 0x3d15, 0x4455, 0x1a65, 0x40c1, 0x2389, 0x41eb, 0x1238, 0xb2ab, 0x1fea, 0x4022, 0x1f25, 0x4072, 0x403e, 0xb021, 0x45c5, 0x1c07, 0x421a, 0x4557, 0xbf60, 0x416b, 0xb2f3, 0xbf7d, 0x4005, 0x3e21, 0xbf60, 0xb225, 0x409b, 0x4340, 0x00db, 0x413d, 0x4275, 0x4574, 0x44b1, 0x412f, 0x4049, 0x2295, 0x20e6, 0xbf0c, 0x4021, 0x185e, 0x4317, 0x41a6, 0xb24e, 0x41c4, 0x2d7b, 0xb07b, 0x0b1e, 0x2317, 0x4254, 0x295f, 0x42f9, 0x4644, 0x1a5e, 0xb208, 0xba1e, 0x400d, 0x1bc5, 0xa2fc, 0x194f, 0xbfb5, 0xb26e, 0x40fd, 0x37c1, 0x4314, 0x432e, 0xaa7f, 0x17da, 0x43e1, 0x1ad4, 0xb06b, 0x4001, 0x071f, 0xba54, 0x1eeb, 0x1ddb, 0x2da8, 0x432c, 0x307f, 0x41c2, 0x2eea, 0xbad1, 0x43d7, 0xbf5c, 0x1edb, 0xbaed, 0x4770, 0xe7fe + ], + StartRegs = [0x7050d002, 0x2ad824dc, 0xcda44a5a, 0xbe440822, 0x6fa909fc, 0x5324049c, 0xb3f8f834, 0x42ed399f, 0x207b9830, 0xa4b5347a, 0x1f876040, 0xfb4d4a81, 0x16ce792a, 0x219b1d90, 0x00000000, 0x300001f0 + ], + FinalRegs = [0x0000007f, 0x00000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x17000000, 0xffffffff, 0x00001631, 0x0000160f, 0x00000001, 0x16ce8d4b, 0x16cfdbf9, 0x000166eb, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x1d91, 0xbae9, 0x3565, 0xb2f7, 0x4627, 0x41f1, 0xbfe8, 0x4294, 0x0fb8, 0x2445, 0x0e33, 0x29fa, 0x116e, 0x345c, 0x44b5, 0xb2d2, 0x4013, 0x4246, 0x2612, 0x4133, 0x42bc, 0xb28a, 0xbf14, 0x4370, 0x194f, 0x4319, 0x4264, 0xb0d1, 0x1c87, 0x4329, 0xbfc4, 0x441e, 0x4212, 0x1b80, 0x4261, 0x0436, 0x46e1, 0x444e, 0x1a0b, 0x40d3, 0xa4e6, 0x407b, 0x4201, 0x426d, 0x43a3, 0x436d, 0x1a3c, 0x1b83, 0xad83, 0xbadf, 0x4016, 0xb058, 0xacc4, 0xbf90, 0x43ea, 0x4445, 0xb2fe, 0x08da, 0xbf29, 0x41a9, 0x0835, 0x0f8d, 0x1e32, 0x0a48, 0x41f4, 0xbaca, 0x41e4, 0x41ac, 0xba02, 0x1db6, 0xb099, 0x1f86, 0xbfd0, 0xa3b6, 0x463a, 0x4108, 0x2cb1, 0xb0ce, 0xb261, 0xba1b, 0x1edc, 0xba7a, 0x4285, 0xb206, 0x4078, 0x4252, 0xa63c, 0x107d, 0xbf9b, 0x4331, 0x40c1, 0x415c, 0x4062, 0x186b, 0x1e9d, 0x4014, 0x32c3, 0x43e7, 0x40e6, 0x4382, 0xba6e, 0x4332, 0x1cea, 0x0bb1, 0x1de5, 0x429c, 0x41f1, 0x4243, 0x0059, 0x41db, 0xa558, 0xbf7c, 0x4203, 0x43a7, 0x43d8, 0x4460, 0x413e, 0x439e, 0x424d, 0x1ae1, 0xbadd, 0x1cb2, 0x415a, 0xb240, 0x311d, 0x41de, 0x155b, 0xa4c4, 0xb25d, 0xb2b4, 0x4329, 0x445c, 0x40be, 0xa150, 0x4284, 0x44eb, 0x456d, 0x40a2, 0x439d, 0xbf6d, 0x4073, 0xa3d2, 0xb036, 0x41c9, 0xbad3, 0x41a2, 0x432a, 0xba1c, 0xbafe, 0x42a1, 0x43e8, 0x4120, 0x414b, 0xb202, 0x251f, 0xba64, 0xbac8, 0x1977, 0x4291, 0x19a1, 0x1459, 0x1af3, 0xb0ca, 0x3165, 0x1a2f, 0xb224, 0xa3d5, 0xbfd5, 0xb20e, 0xb2df, 0x4689, 0x4143, 0xbae5, 0x4169, 0x40e7, 0xa294, 0xaa9c, 0xba66, 0x2969, 0x35a9, 0x4363, 0xbf69, 0x40e8, 0xa271, 0x41f2, 0x4391, 0x426b, 0x40c5, 0x411c, 0x46ed, 0x1839, 0x4345, 0x4202, 0x4056, 0xb26c, 0x406d, 0x16ec, 0x4276, 0x1249, 0xba23, 0x4301, 0x409a, 0xbfa4, 0x408e, 0xb2d2, 0x0054, 0x4092, 0x421f, 0x4313, 0xb2f2, 0x4115, 0x1c95, 0x1ba7, 0xba42, 0x0497, 0x0d14, 0x1c8d, 0x41ca, 0x400e, 0x436d, 0x17de, 0x1cc0, 0x417c, 0x1e15, 0x1250, 0x4288, 0x0add, 0x2783, 0x40d7, 0xbfce, 0xbfa0, 0x41e4, 0x3706, 0x33b9, 0xba5f, 0xb063, 0xb215, 0x421c, 0x04a2, 0xbf0b, 0xa42c, 0xba4a, 0x425f, 0xb2f4, 0x0891, 0xbf60, 0x1796, 0x43d7, 0x1520, 0xb26d, 0xbf9c, 0xb28d, 0x1b2e, 0x4137, 0x41be, 0xa19f, 0x40eb, 0x4247, 0x2c5d, 0x40fd, 0x41e9, 0xb260, 0x4069, 0x2417, 0x407b, 0xbf62, 0x2e6e, 0x42e9, 0x1f8b, 0xbae8, 0x1d37, 0x3234, 0x4287, 0xba75, 0x4232, 0x245c, 0x1176, 0xb025, 0x3f5c, 0xbfd9, 0xba5c, 0x40ad, 0x43d1, 0x189d, 0xba3c, 0x41c0, 0x4240, 0x41f1, 0x4276, 0x42ed, 0x4242, 0x4398, 0x40de, 0x444b, 0xb295, 0x411c, 0x0bf0, 0x3c69, 0x40d3, 0xbf1d, 0x41e0, 0x320b, 0x43bd, 0x02b9, 0x41da, 0xbaf3, 0x1052, 0xb27b, 0x4116, 0x1de7, 0xb2d3, 0x41b7, 0x1b37, 0x15a2, 0xb074, 0x4246, 0x428b, 0x1dbe, 0x1dd3, 0x1a49, 0xba20, 0x04d8, 0xbfe1, 0xb0fc, 0x400a, 0xbaf7, 0xbae1, 0xb043, 0x2790, 0xb273, 0xabe4, 0x405b, 0xa232, 0xbf33, 0x2d1d, 0x40f3, 0x4129, 0x133f, 0x41a7, 0xa789, 0x4264, 0x292e, 0x4056, 0x2f67, 0x40c9, 0x0a78, 0x41b6, 0x43cc, 0x0601, 0x4177, 0x3fd1, 0x42bf, 0x1e48, 0x4256, 0x426d, 0x1342, 0x4279, 0x4341, 0xab7e, 0x43f5, 0xb293, 0x2783, 0x2ef7, 0xbfdb, 0x43e2, 0x4098, 0x41eb, 0x4115, 0x1b25, 0x1f61, 0x43b5, 0x0cf3, 0x3f68, 0x0ce3, 0x004b, 0xb2de, 0x41e2, 0xb07e, 0x1ed0, 0x2e59, 0xba46, 0xba44, 0x3742, 0x17bf, 0x3e63, 0xbf07, 0xa4a5, 0xba1f, 0x4249, 0x3421, 0x435b, 0x434f, 0xba74, 0x0c5d, 0x4121, 0x3700, 0xb226, 0x3869, 0xb279, 0x46dd, 0x441c, 0x43da, 0x40ab, 0xbf2d, 0x1e81, 0x422c, 0x1c93, 0x4090, 0x424c, 0x4108, 0xb213, 0xa996, 0x3006, 0x438e, 0x41f8, 0x1c12, 0x20d7, 0x41d7, 0x0620, 0x4216, 0x22be, 0xba02, 0xbf60, 0x18b1, 0x431f, 0xbad4, 0x0f22, 0x4607, 0xb257, 0x38ed, 0xbfca, 0xb25c, 0xb245, 0x401b, 0x4009, 0x4303, 0x1615, 0xbf23, 0x42e0, 0x42db, 0x428f, 0x42f0, 0xb205, 0x1d0b, 0x404b, 0x2453, 0xba3d, 0x0eb6, 0x4319, 0xb073, 0x0b49, 0x43e2, 0xba38, 0xbf41, 0x1dc4, 0x1ea7, 0x1ffc, 0x408f, 0x3064, 0x189c, 0xa006, 0xbaef, 0x405e, 0x0d23, 0x2a88, 0x43a7, 0x401c, 0x092a, 0x4023, 0x440f, 0x41aa, 0x407f, 0x353c, 0x1de4, 0x4250, 0x4431, 0x4606, 0x4160, 0x42c3, 0xbf5e, 0x1f23, 0x3650, 0x4652, 0xa61a, 0x44db, 0x446f, 0x418b, 0xba3a, 0xb217, 0x03a3, 0xb03c, 0xb00e, 0x42bf, 0x4582, 0x41af, 0xb22c, 0x1c40, 0x42d8, 0xa1af, 0x42a8, 0x40d6, 0x40c3, 0xb27b, 0xbf88, 0xa181, 0x18bd, 0x1d56, 0xb2c3, 0x3309, 0xbfd9, 0x0e90, 0x1b15, 0xb2cf, 0xbafd, 0x446c, 0x4166, 0x427f, 0x2cd4, 0xbff0, 0xb20b, 0xba7f, 0x4374, 0xbf44, 0xb0fa, 0xb2a7, 0x4595, 0x4240, 0x4405, 0xb253, 0xba4d, 0x1879, 0xb231, 0x2937, 0x2c54, 0x1b7c, 0x0fca, 0xb0be, 0xbf00, 0x428c, 0x2f47, 0x4248, 0x4075, 0x121d, 0x40bc, 0xbad3, 0xba4e, 0x44f8, 0xbf7e, 0x42f5, 0x4319, 0xb2d6, 0xa214, 0x41ca, 0x41b6, 0xb001, 0xbf88, 0xa731, 0x4452, 0x1ee4, 0xb2ab, 0x39e6, 0xb092, 0x4097, 0x407b, 0xba6b, 0x464d, 0x44c1, 0x40d8, 0x100e, 0x4010, 0x46eb, 0xbafb, 0x07e0, 0xb2d3, 0x4332, 0x41ab, 0x4022, 0x46b9, 0x3214, 0xbf8d, 0xba7d, 0x407a, 0x42c2, 0x195d, 0x2988, 0xb23d, 0x4382, 0xbf46, 0xb236, 0x44c2, 0x1f13, 0x0599, 0x1edf, 0x1984, 0xba34, 0x25fe, 0xb202, 0x2128, 0xb227, 0xbf5e, 0x1bd5, 0x4265, 0x454a, 0x1485, 0xa79d, 0x1484, 0x409e, 0x431e, 0x4028, 0x4272, 0xba7d, 0xb2d3, 0xb228, 0x4093, 0x3c65, 0xba5d, 0x3bb9, 0xb2cf, 0xbf76, 0xb053, 0x4272, 0x41fd, 0xb052, 0x3908, 0xb042, 0x407f, 0xb29e, 0x43cd, 0x2c83, 0x4310, 0x4680, 0xb210, 0x0762, 0x4350, 0xbf77, 0xb243, 0x1b98, 0xb0f5, 0x4041, 0xb287, 0x4038, 0xbad5, 0x408d, 0xabd0, 0xba34, 0xbf71, 0xb2cd, 0x4168, 0x1b2e, 0x42e3, 0x1824, 0xb21f, 0x3ab2, 0x025b, 0xb23f, 0x45f3, 0xbaf0, 0x1d87, 0x40e1, 0x4177, 0xb21c, 0x4362, 0x43c5, 0x3708, 0x0554, 0x1d4d, 0xb073, 0xbfe4, 0xac1d, 0x4172, 0x0cf2, 0x4048, 0xbaf8, 0x442b, 0x1a0b, 0xbf67, 0x426e, 0x1c1c, 0x40a9, 0xbf60, 0x434d, 0xbae5, 0x4426, 0xb280, 0x150b, 0xb2ac, 0x4421, 0xbf2d, 0x1ede, 0x42c3, 0x426f, 0xbf90, 0x40aa, 0x4175, 0xb205, 0xb2f0, 0xaf19, 0xbfa7, 0x43b3, 0xba7f, 0xada2, 0x40ff, 0x4263, 0x0093, 0x42a8, 0xb2d3, 0x4114, 0x381b, 0x417b, 0xb2e3, 0xb206, 0xa446, 0xb204, 0x4192, 0x2850, 0xbfc0, 0x4078, 0x0d01, 0xbf53, 0x1bf6, 0x4218, 0x4065, 0x435e, 0x016b, 0x3bcd, 0x4326, 0x4335, 0xadc9, 0x1c41, 0x2724, 0xbad3, 0x4125, 0x42f7, 0xae86, 0xb2ac, 0xaced, 0x42fb, 0x4572, 0xba46, 0x4178, 0xbfc0, 0x0a8a, 0x02c0, 0xa6fb, 0x4117, 0x430b, 0xbf73, 0x1ee6, 0x1b3a, 0x42e0, 0x4279, 0x40d8, 0x45a4, 0xb204, 0x40e3, 0x3114, 0x4274, 0xa303, 0x421b, 0xbac2, 0x42c5, 0x4284, 0xbfca, 0x4142, 0x1e76, 0x41f2, 0xb272, 0x1ec0, 0xb2fa, 0x4494, 0x1ec1, 0x1ec0, 0x414a, 0xba7d, 0x4647, 0x439b, 0xbfa0, 0x40fa, 0xbaef, 0x0dd9, 0xb26c, 0xa054, 0x4032, 0x40aa, 0xba37, 0x456f, 0xbfb3, 0x40a4, 0x4027, 0x12fe, 0x25e9, 0x259e, 0x2bbc, 0x4223, 0xba2c, 0x2553, 0xbf24, 0xa784, 0xb2db, 0xb23c, 0x4362, 0x40c8, 0x24fc, 0xa161, 0x08af, 0xb26a, 0x43cc, 0xb2f7, 0x41ad, 0xbfb6, 0x44a3, 0xbfb0, 0x1c2a, 0xb2cc, 0x456f, 0x040a, 0x400e, 0xb270, 0x288c, 0x4056, 0x29c3, 0x4330, 0x1244, 0x128a, 0xbfa6, 0x1f86, 0x3fb5, 0x40ec, 0x40ab, 0x4078, 0xba5d, 0x43a9, 0xbad0, 0x4052, 0x40e3, 0x428e, 0x4603, 0xbf03, 0x416b, 0x0d03, 0xa3b5, 0x1f7e, 0x3e32, 0xb04e, 0x4085, 0xb2d4, 0xb211, 0x4394, 0x3b55, 0xb2d7, 0xbf3b, 0x1379, 0x41d9, 0x4121, 0xb250, 0x43e4, 0xb231, 0x14c6, 0x4245, 0x40ce, 0xa90a, 0x45f4, 0x43bd, 0xb28c, 0xb058, 0x41ac, 0xb276, 0x322f, 0x42b0, 0xa84f, 0x42f0, 0x43da, 0x299e, 0xbfc1, 0x13ef, 0x4298, 0x4304, 0x1aea, 0xb006, 0x4352, 0x41cc, 0x1c38, 0x2f37, 0x439e, 0x4329, 0x45f6, 0x41d2, 0x4253, 0xb209, 0x1129, 0xb27f, 0xbaec, 0x40fd, 0xbf74, 0xa497, 0x372a, 0xbaea, 0xb06a, 0xb24c, 0xba25, 0x45d2, 0x1638, 0xb0b8, 0xba4e, 0x406b, 0xbaf5, 0xbf35, 0x4340, 0x1ffe, 0x4075, 0x1ebb, 0x4029, 0xba36, 0x3d21, 0x0bf9, 0x1dd1, 0x43f4, 0x4316, 0xb241, 0xb212, 0xb2d7, 0x42cc, 0x4379, 0x1e94, 0xb03b, 0x3bc7, 0xbfd0, 0xba35, 0xa8cd, 0x009f, 0x1f3f, 0x436e, 0xbaf2, 0x4369, 0x1f29, 0x4164, 0xbf39, 0x433f, 0x403d, 0x316c, 0x4252, 0x4204, 0xb2b4, 0xba22, 0x19f7, 0x4120, 0x412c, 0x05e0, 0xb2c5, 0x3aa5, 0xbf67, 0x46a0, 0x4076, 0xb2aa, 0x436f, 0x43a9, 0x4183, 0x1c21, 0x12f9, 0x408a, 0x41bb, 0x42a6, 0x220c, 0xb2cf, 0x3de8, 0xbfb5, 0xbf00, 0x2586, 0xb2ce, 0x40ba, 0xa486, 0xa26e, 0x1b02, 0xb063, 0x40d3, 0x07ab, 0x26fd, 0xba10, 0x43ac, 0xbf24, 0x3285, 0x3eb9, 0x1f75, 0xb202, 0x2771, 0xacd9, 0xba3d, 0x4326, 0xbf60, 0xb263, 0x4013, 0x3cb8, 0xbaef, 0x4074, 0x42f5, 0x43f8, 0x40d9, 0x20ec, 0x42f6, 0xbf2b, 0x4336, 0x4321, 0xb06c, 0x2f28, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x45444af8, 0x3713ac06, 0xc0dfa961, 0xa4318add, 0x64c2ab43, 0xd5a78f68, 0x13e65e07, 0x035cff70, 0xf5623146, 0xb8ad178f, 0xade3820c, 0x0224fa96, 0x9850b729, 0xe11a6537, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x000000ec, 0x00000000, 0xffffffff, 0x0000006b, 0x0000014c, 0x71000000, 0xe1eca9ff, 0x00000000, 0x00003ff7, 0x00000000, 0xade3820c, 0xe1ec9c83, 0x9850b74d, 0xe1eca7b7, 0x00000000, 0xa00001d0 }, + Instructions = [0x1d91, 0xbae9, 0x3565, 0xb2f7, 0x4627, 0x41f1, 0xbfe8, 0x4294, 0x0fb8, 0x2445, 0x0e33, 0x29fa, 0x116e, 0x345c, 0x44b5, 0xb2d2, 0x4013, 0x4246, 0x2612, 0x4133, 0x42bc, 0xb28a, 0xbf14, 0x4370, 0x194f, 0x4319, 0x4264, 0xb0d1, 0x1c87, 0x4329, 0xbfc4, 0x441e, 0x4212, 0x1b80, 0x4261, 0x0436, 0x46e1, 0x444e, 0x1a0b, 0x40d3, 0xa4e6, 0x407b, 0x4201, 0x426d, 0x43a3, 0x436d, 0x1a3c, 0x1b83, 0xad83, 0xbadf, 0x4016, 0xb058, 0xacc4, 0xbf90, 0x43ea, 0x4445, 0xb2fe, 0x08da, 0xbf29, 0x41a9, 0x0835, 0x0f8d, 0x1e32, 0x0a48, 0x41f4, 0xbaca, 0x41e4, 0x41ac, 0xba02, 0x1db6, 0xb099, 0x1f86, 0xbfd0, 0xa3b6, 0x463a, 0x4108, 0x2cb1, 0xb0ce, 0xb261, 0xba1b, 0x1edc, 0xba7a, 0x4285, 0xb206, 0x4078, 0x4252, 0xa63c, 0x107d, 0xbf9b, 0x4331, 0x40c1, 0x415c, 0x4062, 0x186b, 0x1e9d, 0x4014, 0x32c3, 0x43e7, 0x40e6, 0x4382, 0xba6e, 0x4332, 0x1cea, 0x0bb1, 0x1de5, 0x429c, 0x41f1, 0x4243, 0x0059, 0x41db, 0xa558, 0xbf7c, 0x4203, 0x43a7, 0x43d8, 0x4460, 0x413e, 0x439e, 0x424d, 0x1ae1, 0xbadd, 0x1cb2, 0x415a, 0xb240, 0x311d, 0x41de, 0x155b, 0xa4c4, 0xb25d, 0xb2b4, 0x4329, 0x445c, 0x40be, 0xa150, 0x4284, 0x44eb, 0x456d, 0x40a2, 0x439d, 0xbf6d, 0x4073, 0xa3d2, 0xb036, 0x41c9, 0xbad3, 0x41a2, 0x432a, 0xba1c, 0xbafe, 0x42a1, 0x43e8, 0x4120, 0x414b, 0xb202, 0x251f, 0xba64, 0xbac8, 0x1977, 0x4291, 0x19a1, 0x1459, 0x1af3, 0xb0ca, 0x3165, 0x1a2f, 0xb224, 0xa3d5, 0xbfd5, 0xb20e, 0xb2df, 0x4689, 0x4143, 0xbae5, 0x4169, 0x40e7, 0xa294, 0xaa9c, 0xba66, 0x2969, 0x35a9, 0x4363, 0xbf69, 0x40e8, 0xa271, 0x41f2, 0x4391, 0x426b, 0x40c5, 0x411c, 0x46ed, 0x1839, 0x4345, 0x4202, 0x4056, 0xb26c, 0x406d, 0x16ec, 0x4276, 0x1249, 0xba23, 0x4301, 0x409a, 0xbfa4, 0x408e, 0xb2d2, 0x0054, 0x4092, 0x421f, 0x4313, 0xb2f2, 0x4115, 0x1c95, 0x1ba7, 0xba42, 0x0497, 0x0d14, 0x1c8d, 0x41ca, 0x400e, 0x436d, 0x17de, 0x1cc0, 0x417c, 0x1e15, 0x1250, 0x4288, 0x0add, 0x2783, 0x40d7, 0xbfce, 0xbfa0, 0x41e4, 0x3706, 0x33b9, 0xba5f, 0xb063, 0xb215, 0x421c, 0x04a2, 0xbf0b, 0xa42c, 0xba4a, 0x425f, 0xb2f4, 0x0891, 0xbf60, 0x1796, 0x43d7, 0x1520, 0xb26d, 0xbf9c, 0xb28d, 0x1b2e, 0x4137, 0x41be, 0xa19f, 0x40eb, 0x4247, 0x2c5d, 0x40fd, 0x41e9, 0xb260, 0x4069, 0x2417, 0x407b, 0xbf62, 0x2e6e, 0x42e9, 0x1f8b, 0xbae8, 0x1d37, 0x3234, 0x4287, 0xba75, 0x4232, 0x245c, 0x1176, 0xb025, 0x3f5c, 0xbfd9, 0xba5c, 0x40ad, 0x43d1, 0x189d, 0xba3c, 0x41c0, 0x4240, 0x41f1, 0x4276, 0x42ed, 0x4242, 0x4398, 0x40de, 0x444b, 0xb295, 0x411c, 0x0bf0, 0x3c69, 0x40d3, 0xbf1d, 0x41e0, 0x320b, 0x43bd, 0x02b9, 0x41da, 0xbaf3, 0x1052, 0xb27b, 0x4116, 0x1de7, 0xb2d3, 0x41b7, 0x1b37, 0x15a2, 0xb074, 0x4246, 0x428b, 0x1dbe, 0x1dd3, 0x1a49, 0xba20, 0x04d8, 0xbfe1, 0xb0fc, 0x400a, 0xbaf7, 0xbae1, 0xb043, 0x2790, 0xb273, 0xabe4, 0x405b, 0xa232, 0xbf33, 0x2d1d, 0x40f3, 0x4129, 0x133f, 0x41a7, 0xa789, 0x4264, 0x292e, 0x4056, 0x2f67, 0x40c9, 0x0a78, 0x41b6, 0x43cc, 0x0601, 0x4177, 0x3fd1, 0x42bf, 0x1e48, 0x4256, 0x426d, 0x1342, 0x4279, 0x4341, 0xab7e, 0x43f5, 0xb293, 0x2783, 0x2ef7, 0xbfdb, 0x43e2, 0x4098, 0x41eb, 0x4115, 0x1b25, 0x1f61, 0x43b5, 0x0cf3, 0x3f68, 0x0ce3, 0x004b, 0xb2de, 0x41e2, 0xb07e, 0x1ed0, 0x2e59, 0xba46, 0xba44, 0x3742, 0x17bf, 0x3e63, 0xbf07, 0xa4a5, 0xba1f, 0x4249, 0x3421, 0x435b, 0x434f, 0xba74, 0x0c5d, 0x4121, 0x3700, 0xb226, 0x3869, 0xb279, 0x46dd, 0x441c, 0x43da, 0x40ab, 0xbf2d, 0x1e81, 0x422c, 0x1c93, 0x4090, 0x424c, 0x4108, 0xb213, 0xa996, 0x3006, 0x438e, 0x41f8, 0x1c12, 0x20d7, 0x41d7, 0x0620, 0x4216, 0x22be, 0xba02, 0xbf60, 0x18b1, 0x431f, 0xbad4, 0x0f22, 0x4607, 0xb257, 0x38ed, 0xbfca, 0xb25c, 0xb245, 0x401b, 0x4009, 0x4303, 0x1615, 0xbf23, 0x42e0, 0x42db, 0x428f, 0x42f0, 0xb205, 0x1d0b, 0x404b, 0x2453, 0xba3d, 0x0eb6, 0x4319, 0xb073, 0x0b49, 0x43e2, 0xba38, 0xbf41, 0x1dc4, 0x1ea7, 0x1ffc, 0x408f, 0x3064, 0x189c, 0xa006, 0xbaef, 0x405e, 0x0d23, 0x2a88, 0x43a7, 0x401c, 0x092a, 0x4023, 0x440f, 0x41aa, 0x407f, 0x353c, 0x1de4, 0x4250, 0x4431, 0x4606, 0x4160, 0x42c3, 0xbf5e, 0x1f23, 0x3650, 0x4652, 0xa61a, 0x44db, 0x446f, 0x418b, 0xba3a, 0xb217, 0x03a3, 0xb03c, 0xb00e, 0x42bf, 0x4582, 0x41af, 0xb22c, 0x1c40, 0x42d8, 0xa1af, 0x42a8, 0x40d6, 0x40c3, 0xb27b, 0xbf88, 0xa181, 0x18bd, 0x1d56, 0xb2c3, 0x3309, 0xbfd9, 0x0e90, 0x1b15, 0xb2cf, 0xbafd, 0x446c, 0x4166, 0x427f, 0x2cd4, 0xbff0, 0xb20b, 0xba7f, 0x4374, 0xbf44, 0xb0fa, 0xb2a7, 0x4595, 0x4240, 0x4405, 0xb253, 0xba4d, 0x1879, 0xb231, 0x2937, 0x2c54, 0x1b7c, 0x0fca, 0xb0be, 0xbf00, 0x428c, 0x2f47, 0x4248, 0x4075, 0x121d, 0x40bc, 0xbad3, 0xba4e, 0x44f8, 0xbf7e, 0x42f5, 0x4319, 0xb2d6, 0xa214, 0x41ca, 0x41b6, 0xb001, 0xbf88, 0xa731, 0x4452, 0x1ee4, 0xb2ab, 0x39e6, 0xb092, 0x4097, 0x407b, 0xba6b, 0x464d, 0x44c1, 0x40d8, 0x100e, 0x4010, 0x46eb, 0xbafb, 0x07e0, 0xb2d3, 0x4332, 0x41ab, 0x4022, 0x46b9, 0x3214, 0xbf8d, 0xba7d, 0x407a, 0x42c2, 0x195d, 0x2988, 0xb23d, 0x4382, 0xbf46, 0xb236, 0x44c2, 0x1f13, 0x0599, 0x1edf, 0x1984, 0xba34, 0x25fe, 0xb202, 0x2128, 0xb227, 0xbf5e, 0x1bd5, 0x4265, 0x454a, 0x1485, 0xa79d, 0x1484, 0x409e, 0x431e, 0x4028, 0x4272, 0xba7d, 0xb2d3, 0xb228, 0x4093, 0x3c65, 0xba5d, 0x3bb9, 0xb2cf, 0xbf76, 0xb053, 0x4272, 0x41fd, 0xb052, 0x3908, 0xb042, 0x407f, 0xb29e, 0x43cd, 0x2c83, 0x4310, 0x4680, 0xb210, 0x0762, 0x4350, 0xbf77, 0xb243, 0x1b98, 0xb0f5, 0x4041, 0xb287, 0x4038, 0xbad5, 0x408d, 0xabd0, 0xba34, 0xbf71, 0xb2cd, 0x4168, 0x1b2e, 0x42e3, 0x1824, 0xb21f, 0x3ab2, 0x025b, 0xb23f, 0x45f3, 0xbaf0, 0x1d87, 0x40e1, 0x4177, 0xb21c, 0x4362, 0x43c5, 0x3708, 0x0554, 0x1d4d, 0xb073, 0xbfe4, 0xac1d, 0x4172, 0x0cf2, 0x4048, 0xbaf8, 0x442b, 0x1a0b, 0xbf67, 0x426e, 0x1c1c, 0x40a9, 0xbf60, 0x434d, 0xbae5, 0x4426, 0xb280, 0x150b, 0xb2ac, 0x4421, 0xbf2d, 0x1ede, 0x42c3, 0x426f, 0xbf90, 0x40aa, 0x4175, 0xb205, 0xb2f0, 0xaf19, 0xbfa7, 0x43b3, 0xba7f, 0xada2, 0x40ff, 0x4263, 0x0093, 0x42a8, 0xb2d3, 0x4114, 0x381b, 0x417b, 0xb2e3, 0xb206, 0xa446, 0xb204, 0x4192, 0x2850, 0xbfc0, 0x4078, 0x0d01, 0xbf53, 0x1bf6, 0x4218, 0x4065, 0x435e, 0x016b, 0x3bcd, 0x4326, 0x4335, 0xadc9, 0x1c41, 0x2724, 0xbad3, 0x4125, 0x42f7, 0xae86, 0xb2ac, 0xaced, 0x42fb, 0x4572, 0xba46, 0x4178, 0xbfc0, 0x0a8a, 0x02c0, 0xa6fb, 0x4117, 0x430b, 0xbf73, 0x1ee6, 0x1b3a, 0x42e0, 0x4279, 0x40d8, 0x45a4, 0xb204, 0x40e3, 0x3114, 0x4274, 0xa303, 0x421b, 0xbac2, 0x42c5, 0x4284, 0xbfca, 0x4142, 0x1e76, 0x41f2, 0xb272, 0x1ec0, 0xb2fa, 0x4494, 0x1ec1, 0x1ec0, 0x414a, 0xba7d, 0x4647, 0x439b, 0xbfa0, 0x40fa, 0xbaef, 0x0dd9, 0xb26c, 0xa054, 0x4032, 0x40aa, 0xba37, 0x456f, 0xbfb3, 0x40a4, 0x4027, 0x12fe, 0x25e9, 0x259e, 0x2bbc, 0x4223, 0xba2c, 0x2553, 0xbf24, 0xa784, 0xb2db, 0xb23c, 0x4362, 0x40c8, 0x24fc, 0xa161, 0x08af, 0xb26a, 0x43cc, 0xb2f7, 0x41ad, 0xbfb6, 0x44a3, 0xbfb0, 0x1c2a, 0xb2cc, 0x456f, 0x040a, 0x400e, 0xb270, 0x288c, 0x4056, 0x29c3, 0x4330, 0x1244, 0x128a, 0xbfa6, 0x1f86, 0x3fb5, 0x40ec, 0x40ab, 0x4078, 0xba5d, 0x43a9, 0xbad0, 0x4052, 0x40e3, 0x428e, 0x4603, 0xbf03, 0x416b, 0x0d03, 0xa3b5, 0x1f7e, 0x3e32, 0xb04e, 0x4085, 0xb2d4, 0xb211, 0x4394, 0x3b55, 0xb2d7, 0xbf3b, 0x1379, 0x41d9, 0x4121, 0xb250, 0x43e4, 0xb231, 0x14c6, 0x4245, 0x40ce, 0xa90a, 0x45f4, 0x43bd, 0xb28c, 0xb058, 0x41ac, 0xb276, 0x322f, 0x42b0, 0xa84f, 0x42f0, 0x43da, 0x299e, 0xbfc1, 0x13ef, 0x4298, 0x4304, 0x1aea, 0xb006, 0x4352, 0x41cc, 0x1c38, 0x2f37, 0x439e, 0x4329, 0x45f6, 0x41d2, 0x4253, 0xb209, 0x1129, 0xb27f, 0xbaec, 0x40fd, 0xbf74, 0xa497, 0x372a, 0xbaea, 0xb06a, 0xb24c, 0xba25, 0x45d2, 0x1638, 0xb0b8, 0xba4e, 0x406b, 0xbaf5, 0xbf35, 0x4340, 0x1ffe, 0x4075, 0x1ebb, 0x4029, 0xba36, 0x3d21, 0x0bf9, 0x1dd1, 0x43f4, 0x4316, 0xb241, 0xb212, 0xb2d7, 0x42cc, 0x4379, 0x1e94, 0xb03b, 0x3bc7, 0xbfd0, 0xba35, 0xa8cd, 0x009f, 0x1f3f, 0x436e, 0xbaf2, 0x4369, 0x1f29, 0x4164, 0xbf39, 0x433f, 0x403d, 0x316c, 0x4252, 0x4204, 0xb2b4, 0xba22, 0x19f7, 0x4120, 0x412c, 0x05e0, 0xb2c5, 0x3aa5, 0xbf67, 0x46a0, 0x4076, 0xb2aa, 0x436f, 0x43a9, 0x4183, 0x1c21, 0x12f9, 0x408a, 0x41bb, 0x42a6, 0x220c, 0xb2cf, 0x3de8, 0xbfb5, 0xbf00, 0x2586, 0xb2ce, 0x40ba, 0xa486, 0xa26e, 0x1b02, 0xb063, 0x40d3, 0x07ab, 0x26fd, 0xba10, 0x43ac, 0xbf24, 0x3285, 0x3eb9, 0x1f75, 0xb202, 0x2771, 0xacd9, 0xba3d, 0x4326, 0xbf60, 0xb263, 0x4013, 0x3cb8, 0xbaef, 0x4074, 0x42f5, 0x43f8, 0x40d9, 0x20ec, 0x42f6, 0xbf2b, 0x4336, 0x4321, 0xb06c, 0x2f28, 0x4770, 0xe7fe + ], + StartRegs = [0x45444af8, 0x3713ac06, 0xc0dfa961, 0xa4318add, 0x64c2ab43, 0xd5a78f68, 0x13e65e07, 0x035cff70, 0xf5623146, 0xb8ad178f, 0xade3820c, 0x0224fa96, 0x9850b729, 0xe11a6537, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x000000ec, 0x00000000, 0xffffffff, 0x0000006b, 0x0000014c, 0x71000000, 0xe1eca9ff, 0x00000000, 0x00003ff7, 0x00000000, 0xade3820c, 0xe1ec9c83, 0x9850b74d, 0xe1eca7b7, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0xa520, 0xb223, 0x4254, 0x04d2, 0xb2bb, 0x0b78, 0x4241, 0x3e94, 0x4367, 0xbf06, 0x40db, 0x409c, 0xbfb0, 0x40bd, 0xb297, 0x44fa, 0xb2b3, 0x406c, 0x4348, 0xb2ac, 0x4158, 0x40b0, 0x2122, 0x3cd3, 0x433b, 0xbf01, 0x42bb, 0xb2b2, 0x3a8d, 0x43f1, 0x4200, 0x1c8e, 0xada7, 0x40f6, 0x403d, 0x40db, 0x422b, 0xbad1, 0xa3da, 0x4319, 0xa9a2, 0xb21f, 0x4231, 0x41b5, 0x4104, 0x043a, 0xba2f, 0xbfb6, 0x41b2, 0x05c3, 0xb0be, 0x1de0, 0xa730, 0xba13, 0x05fe, 0x41ea, 0xbf4a, 0xa3f1, 0x182e, 0xb217, 0xad55, 0x44d9, 0xb0c0, 0x4389, 0x401f, 0xba25, 0x18ab, 0x02e1, 0x46dd, 0xba26, 0xba21, 0xb2bc, 0x42a2, 0x124d, 0xbfd0, 0xb271, 0x01b0, 0x42e0, 0x4011, 0xa094, 0xb02f, 0x43dd, 0xbf74, 0x41b0, 0x41bc, 0x4133, 0x105d, 0xb28f, 0xb0d0, 0xaf65, 0xaf83, 0xbf71, 0x4196, 0xb06b, 0x4122, 0x400d, 0x41ac, 0x1863, 0xb2e0, 0xb218, 0x41b8, 0x4588, 0xb2a0, 0xbfdb, 0x436c, 0x0f45, 0x0994, 0x43ab, 0x4106, 0x2c4b, 0x01db, 0xb048, 0x4495, 0x42a5, 0x40ae, 0x419c, 0x41ca, 0x40be, 0xa8ed, 0x3fe9, 0x42ea, 0x4127, 0x425f, 0x4499, 0x1c46, 0xb258, 0x3f68, 0xa832, 0xbf0c, 0x42cf, 0xa86c, 0x42ce, 0x4113, 0xb24f, 0xb0ec, 0xb0e0, 0x3d7f, 0xa273, 0x40cd, 0xb03f, 0x41ef, 0x4266, 0x413e, 0xb20c, 0x43b9, 0xb019, 0x4097, 0x05f4, 0x3445, 0x408b, 0x409a, 0x2673, 0xbf4f, 0x417b, 0xbaee, 0x443c, 0xbae3, 0x426c, 0xbf2d, 0x4185, 0x4366, 0x431c, 0x3f62, 0x42bd, 0x46c5, 0x416f, 0xb205, 0x4011, 0x07d0, 0x06d4, 0x413a, 0xbf5b, 0xb2b5, 0x1ae2, 0xa9a9, 0xba0e, 0x401c, 0xb22e, 0x44f0, 0x17c2, 0xb036, 0x1cf0, 0x4096, 0x4299, 0xba11, 0xa27d, 0x1e0a, 0xbf7f, 0xb285, 0x4342, 0x24a7, 0x1a9e, 0x2cbc, 0x4218, 0x0e6d, 0xb21d, 0x437c, 0x4392, 0x41e9, 0xb05d, 0x4101, 0xa9d4, 0x4371, 0x41ab, 0x1bc2, 0x4241, 0x4002, 0xb2d4, 0xb016, 0xbac0, 0xb201, 0x4398, 0x40a2, 0xbf49, 0x430c, 0x1c44, 0x3eed, 0xab02, 0xb20f, 0xbf3f, 0x17a7, 0x418f, 0x4151, 0xba01, 0xbf9b, 0x41a4, 0x0136, 0xa343, 0xb29b, 0x2019, 0xab1a, 0x43d2, 0xbf5e, 0x42b3, 0x297f, 0xb2ce, 0x2057, 0x1d80, 0x1633, 0x4310, 0x337b, 0x40bc, 0x4077, 0xb224, 0xb298, 0x2a78, 0x4233, 0x0d0e, 0x32a6, 0x42cb, 0x4396, 0x40a2, 0xb00f, 0x4050, 0xb271, 0x40ee, 0x410a, 0xbfc8, 0xb230, 0x1a49, 0x4360, 0xb03d, 0x0d57, 0x4276, 0x406d, 0xb223, 0x40b9, 0x40b7, 0x1e40, 0xb257, 0x07e4, 0xa579, 0xb217, 0xbf7c, 0xbae9, 0x4333, 0xbae6, 0xb23c, 0xbae4, 0x423d, 0x4121, 0xbacc, 0x41eb, 0xaaae, 0x1c89, 0x1960, 0x42af, 0x2b33, 0x4287, 0x4000, 0xb27b, 0x436d, 0x458d, 0x42aa, 0x43fd, 0x423a, 0x43fd, 0xbfc3, 0x1e10, 0x4317, 0xb272, 0xbaec, 0x4152, 0x4173, 0x30c9, 0x404e, 0x2173, 0x46c8, 0xb260, 0x4084, 0xb234, 0x4217, 0x1fbc, 0xbf13, 0x46b1, 0x41fd, 0xa309, 0x1f35, 0x418e, 0xb21a, 0x43a6, 0x41f1, 0x4219, 0x45d4, 0x45c6, 0x1ac2, 0x1c3e, 0xbad6, 0xbfc0, 0xba74, 0x4342, 0x41e9, 0x43c2, 0x4051, 0xbf88, 0xb2ce, 0xbfb0, 0xb03b, 0x248a, 0x42c8, 0xa7f9, 0xb2dc, 0x4284, 0xb27d, 0x4207, 0x43d4, 0x3a09, 0x43b6, 0xbfd2, 0x4636, 0x431f, 0x359a, 0x4035, 0xa58b, 0xb293, 0xba72, 0x40b4, 0x42fa, 0x08f7, 0x415c, 0x16ac, 0x438c, 0x42d5, 0x4069, 0x18ce, 0xa2a3, 0x4259, 0x245a, 0x2c8c, 0x4104, 0xbf52, 0xa8d4, 0x1a52, 0xae71, 0xb0dc, 0xa6c6, 0xb240, 0x33b4, 0x3314, 0x4183, 0x183d, 0x1fe5, 0xba4f, 0x1b3b, 0x41b3, 0x3897, 0xb209, 0x4380, 0x417f, 0xbaef, 0xb2e6, 0x42a0, 0x4177, 0xbfb2, 0x1e3c, 0x4250, 0xba34, 0x402c, 0x2e43, 0x435b, 0xbf8f, 0x3463, 0x40a0, 0x4174, 0x44dd, 0x40cf, 0x400b, 0x2fca, 0x3ccd, 0x2e2e, 0x3764, 0xa626, 0x40bc, 0xa3ba, 0x44ca, 0xbfa7, 0x43ed, 0xb278, 0x412a, 0xba1a, 0x01d4, 0x185c, 0x4365, 0x389a, 0x37b6, 0x4111, 0x40f7, 0x4114, 0x06a0, 0x4167, 0x3736, 0x42dc, 0x40c3, 0x32cb, 0x41b0, 0x412b, 0x2c08, 0xbacd, 0x1806, 0xb247, 0x3a1f, 0xbf70, 0x4137, 0xbf9e, 0x42a3, 0x3af2, 0x424f, 0x2f4b, 0xba6c, 0x3b5b, 0xbff0, 0xb2bc, 0x414b, 0x4570, 0xb216, 0xb2a1, 0xbad1, 0x40ae, 0x40d0, 0x41ca, 0x4059, 0xacfd, 0x43ae, 0x43de, 0x428c, 0x19ac, 0x2ed4, 0xba26, 0xbfc5, 0x1e66, 0x403a, 0x41a7, 0x3900, 0x432b, 0x4386, 0x3670, 0x1674, 0x0a49, 0x41b9, 0x438a, 0x42b9, 0x41aa, 0x40a8, 0x43c9, 0xba1c, 0x4167, 0xb0ed, 0x4359, 0xa917, 0xbf59, 0xb040, 0x4205, 0x43eb, 0x1811, 0x1e8e, 0x41cd, 0x41f2, 0x4190, 0x41b0, 0x368c, 0x387e, 0x1545, 0x18d3, 0x40d8, 0x4279, 0x438b, 0x0c33, 0xbf28, 0x4218, 0x41c7, 0xa71d, 0x4373, 0x229d, 0x4605, 0x2a5d, 0xb265, 0xbf15, 0x1c05, 0xb006, 0x193f, 0xba38, 0x4338, 0xbf4e, 0x4177, 0x4138, 0x22ae, 0xb268, 0x40e2, 0xbfa0, 0x42a9, 0x4612, 0x267c, 0x41c9, 0xb291, 0xbad0, 0xba3a, 0x45c2, 0xbac5, 0x43df, 0xb00c, 0x43e4, 0x1faf, 0x1c18, 0x1f38, 0x42f0, 0x1ac4, 0xbf2d, 0x4158, 0x40dc, 0x4329, 0xba24, 0x4009, 0xbace, 0x4206, 0x0e36, 0x3b42, 0x023c, 0x0ab2, 0x42f3, 0xb2d2, 0x4165, 0x236b, 0x4125, 0xb239, 0x45db, 0xbf5e, 0x4198, 0x444c, 0x1601, 0x19a8, 0xbaf6, 0xb251, 0x4035, 0x4169, 0x4265, 0x406f, 0x403c, 0x4319, 0xb29f, 0x4052, 0xb273, 0x1bfe, 0x4588, 0x40fe, 0x41cc, 0x40bb, 0x46f3, 0x42ff, 0xa67e, 0x1fff, 0x10c0, 0xbf33, 0x4286, 0x412d, 0xb26d, 0x41bd, 0x436e, 0x439d, 0x417e, 0x0746, 0x42c6, 0x04ce, 0x406d, 0x4249, 0xb22a, 0x43ff, 0x27d4, 0xb2a7, 0xbf95, 0xb287, 0x366b, 0x1cc0, 0x1802, 0xba5c, 0x43e7, 0x4061, 0x4153, 0x150c, 0x4681, 0x44a1, 0x45cd, 0xbad6, 0xbfc9, 0x42f2, 0x1bfc, 0x4180, 0x25a3, 0x42d3, 0x409b, 0xb0e1, 0x4676, 0xbfa1, 0x436a, 0x42b6, 0xba61, 0x424c, 0x4354, 0x340e, 0x43b7, 0x0ce6, 0x45bd, 0xa0d6, 0x42e8, 0xba77, 0x4037, 0x42b2, 0x446d, 0xbae6, 0x439f, 0xb0a1, 0xba6e, 0x4231, 0xa05f, 0x46ca, 0xb081, 0xba3e, 0x1d40, 0x435a, 0x196f, 0x4168, 0x405e, 0xbf9f, 0x4056, 0x30ab, 0x43be, 0x1956, 0xb01d, 0x41d5, 0xba3b, 0xbf48, 0x08f2, 0x42d2, 0x42a7, 0x4291, 0x423d, 0x405e, 0xb2a9, 0x2cb9, 0x43bd, 0x4270, 0xb2d2, 0x420d, 0x1494, 0x4098, 0xa21a, 0x43d1, 0x442e, 0x4559, 0x3192, 0x43d2, 0xbad2, 0x4379, 0x4298, 0xb2d6, 0xbafd, 0xbfc5, 0xbaca, 0xbaf2, 0x1ba9, 0x422c, 0xb2b0, 0x096c, 0x0443, 0xbafe, 0x44e4, 0xba0a, 0x1d8f, 0x15f2, 0xba7b, 0xbad0, 0xb295, 0x41f3, 0xb212, 0xb0dc, 0x24d5, 0x40c8, 0xba3a, 0x4023, 0xb2cd, 0xa317, 0xa11d, 0x4374, 0x1e3e, 0x414d, 0x401b, 0xbf85, 0x418b, 0xae75, 0xb226, 0x37f7, 0x4392, 0x432b, 0x426c, 0x4312, 0x0f46, 0xbfd0, 0x406c, 0xa729, 0x4136, 0x0f4f, 0x40dd, 0x1d25, 0x1a81, 0x41e9, 0x36ab, 0x4694, 0x4558, 0x1868, 0xb220, 0xbfa3, 0x1ecd, 0x4274, 0x1b66, 0x2988, 0x41e0, 0x08f1, 0x4214, 0xb28a, 0xb243, 0x4071, 0x2b56, 0x4038, 0x438f, 0x2441, 0x41bd, 0x41ba, 0x31cf, 0x408b, 0xb036, 0x1db4, 0x19c7, 0xb2c0, 0xbf55, 0x0c41, 0xbaf0, 0xb2ae, 0x4007, 0x1b06, 0xb08f, 0x1d3d, 0x430e, 0x2937, 0x41a0, 0x4209, 0x4448, 0x402a, 0xba03, 0x3597, 0xb20b, 0x45b3, 0x4376, 0x4663, 0x437c, 0x417e, 0xb088, 0xbf9c, 0x14f2, 0xb29a, 0x2554, 0x18c1, 0x180a, 0x417f, 0x0c42, 0xba14, 0xb05c, 0x41ba, 0xbf5e, 0x2562, 0x4243, 0x420f, 0x0a72, 0x438c, 0xb0ab, 0x4210, 0x1dca, 0xb2d9, 0x434a, 0xbf60, 0xad83, 0xbf35, 0xbadb, 0x407a, 0xb2a5, 0xa130, 0x429e, 0xa4e3, 0x142b, 0x35b8, 0xbfc0, 0x40a6, 0xbaf6, 0x3089, 0x4280, 0xba19, 0x43a6, 0x0fef, 0x442e, 0x1cf6, 0xb2ac, 0x18b2, 0xb0c3, 0xbad1, 0x42e0, 0x391a, 0x435c, 0xbf87, 0xb272, 0x05bc, 0x4226, 0xb2f2, 0x4313, 0x459e, 0x4326, 0x4495, 0x4236, 0x1239, 0xbf55, 0x43f8, 0xb289, 0xbf70, 0xb249, 0xb2cd, 0xb224, 0x4017, 0x1d5d, 0x4026, 0x423e, 0x1214, 0x431a, 0x351a, 0x40d3, 0xbf88, 0xba4e, 0x434f, 0x3815, 0x15ac, 0x1693, 0x40ad, 0xbf90, 0x43ac, 0x42c3, 0x060d, 0x4013, 0x3896, 0x428c, 0x2d3e, 0x435b, 0xaeac, 0x42b7, 0xbfbc, 0x42c5, 0x31b5, 0x1b10, 0x0f85, 0xbaf0, 0xbfa5, 0x09a7, 0x0762, 0xb2cb, 0xab8a, 0xba7c, 0x3c28, 0x40a2, 0x173c, 0xa6f8, 0x0788, 0x4623, 0x4324, 0x4310, 0xb208, 0x3297, 0x4667, 0x41c1, 0xbfc7, 0xbf00, 0xb222, 0x0499, 0x422f, 0x46f8, 0xa72c, 0x2e9e, 0xa41b, 0x4370, 0xbf08, 0xb073, 0xbfc0, 0x04bb, 0x2e56, 0xba6a, 0xba56, 0x4206, 0x4306, 0x427b, 0xb060, 0x4260, 0x4298, 0x4360, 0x434f, 0xbf70, 0xa2d2, 0xbae6, 0xbf80, 0xac39, 0x441b, 0xb2e7, 0x40d7, 0x42a2, 0x42b5, 0x08fe, 0xbf05, 0x195f, 0x414a, 0x40a5, 0x4344, 0xbafe, 0x4212, 0xb225, 0x429d, 0x428b, 0x22bc, 0x43e8, 0xb27d, 0xb2ac, 0x4108, 0xb2d2, 0x1d5f, 0x23c3, 0x4257, 0xb060, 0x4105, 0xb208, 0x441f, 0x2f98, 0x1f2b, 0xbf17, 0x43d2, 0x413e, 0xba24, 0x40ca, 0x4101, 0xbf90, 0x43dc, 0x42b6, 0x431d, 0x42db, 0x43e6, 0xac1f, 0x42c9, 0xba0b, 0x46a4, 0xba41, 0x42f3, 0x45a2, 0xbf2e, 0xb088, 0x40fd, 0x0d9d, 0x1a17, 0x2ee0, 0x1b8c, 0x41cc, 0x42b4, 0xb294, 0x436d, 0xabb1, 0xa7ed, 0xba2c, 0x4002, 0x4214, 0x417c, 0x03a3, 0x1b3a, 0x4645, 0xa99a, 0x4661, 0x41b7, 0xbacd, 0x2cb1, 0x1dca, 0x1d24, 0x42c5, 0xba4c, 0xbf9c, 0x1e2b, 0xb24b, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6858fdc0, 0x2c117adb, 0x4e91c10b, 0x490c37fa, 0xdc3cc5ba, 0x19d843cc, 0x38054938, 0xa1f0a710, 0x540c538f, 0x8e7e0cd6, 0x8458328c, 0x917b025c, 0x75c492d1, 0x64488841, 0x00000000, 0x000001f0 }, - FinalRegs = new uint[] { 0xffffa800, 0x540c5724, 0x540c572b, 0x00000024, 0x0c542457, 0x00002457, 0xfffffffc, 0x00001b93, 0x00001730, 0xffffff42, 0xffffff42, 0x00000000, 0x540c5724, 0x540c5688, 0x00000000, 0x800001d0 }, + Instructions = [0xa520, 0xb223, 0x4254, 0x04d2, 0xb2bb, 0x0b78, 0x4241, 0x3e94, 0x4367, 0xbf06, 0x40db, 0x409c, 0xbfb0, 0x40bd, 0xb297, 0x44fa, 0xb2b3, 0x406c, 0x4348, 0xb2ac, 0x4158, 0x40b0, 0x2122, 0x3cd3, 0x433b, 0xbf01, 0x42bb, 0xb2b2, 0x3a8d, 0x43f1, 0x4200, 0x1c8e, 0xada7, 0x40f6, 0x403d, 0x40db, 0x422b, 0xbad1, 0xa3da, 0x4319, 0xa9a2, 0xb21f, 0x4231, 0x41b5, 0x4104, 0x043a, 0xba2f, 0xbfb6, 0x41b2, 0x05c3, 0xb0be, 0x1de0, 0xa730, 0xba13, 0x05fe, 0x41ea, 0xbf4a, 0xa3f1, 0x182e, 0xb217, 0xad55, 0x44d9, 0xb0c0, 0x4389, 0x401f, 0xba25, 0x18ab, 0x02e1, 0x46dd, 0xba26, 0xba21, 0xb2bc, 0x42a2, 0x124d, 0xbfd0, 0xb271, 0x01b0, 0x42e0, 0x4011, 0xa094, 0xb02f, 0x43dd, 0xbf74, 0x41b0, 0x41bc, 0x4133, 0x105d, 0xb28f, 0xb0d0, 0xaf65, 0xaf83, 0xbf71, 0x4196, 0xb06b, 0x4122, 0x400d, 0x41ac, 0x1863, 0xb2e0, 0xb218, 0x41b8, 0x4588, 0xb2a0, 0xbfdb, 0x436c, 0x0f45, 0x0994, 0x43ab, 0x4106, 0x2c4b, 0x01db, 0xb048, 0x4495, 0x42a5, 0x40ae, 0x419c, 0x41ca, 0x40be, 0xa8ed, 0x3fe9, 0x42ea, 0x4127, 0x425f, 0x4499, 0x1c46, 0xb258, 0x3f68, 0xa832, 0xbf0c, 0x42cf, 0xa86c, 0x42ce, 0x4113, 0xb24f, 0xb0ec, 0xb0e0, 0x3d7f, 0xa273, 0x40cd, 0xb03f, 0x41ef, 0x4266, 0x413e, 0xb20c, 0x43b9, 0xb019, 0x4097, 0x05f4, 0x3445, 0x408b, 0x409a, 0x2673, 0xbf4f, 0x417b, 0xbaee, 0x443c, 0xbae3, 0x426c, 0xbf2d, 0x4185, 0x4366, 0x431c, 0x3f62, 0x42bd, 0x46c5, 0x416f, 0xb205, 0x4011, 0x07d0, 0x06d4, 0x413a, 0xbf5b, 0xb2b5, 0x1ae2, 0xa9a9, 0xba0e, 0x401c, 0xb22e, 0x44f0, 0x17c2, 0xb036, 0x1cf0, 0x4096, 0x4299, 0xba11, 0xa27d, 0x1e0a, 0xbf7f, 0xb285, 0x4342, 0x24a7, 0x1a9e, 0x2cbc, 0x4218, 0x0e6d, 0xb21d, 0x437c, 0x4392, 0x41e9, 0xb05d, 0x4101, 0xa9d4, 0x4371, 0x41ab, 0x1bc2, 0x4241, 0x4002, 0xb2d4, 0xb016, 0xbac0, 0xb201, 0x4398, 0x40a2, 0xbf49, 0x430c, 0x1c44, 0x3eed, 0xab02, 0xb20f, 0xbf3f, 0x17a7, 0x418f, 0x4151, 0xba01, 0xbf9b, 0x41a4, 0x0136, 0xa343, 0xb29b, 0x2019, 0xab1a, 0x43d2, 0xbf5e, 0x42b3, 0x297f, 0xb2ce, 0x2057, 0x1d80, 0x1633, 0x4310, 0x337b, 0x40bc, 0x4077, 0xb224, 0xb298, 0x2a78, 0x4233, 0x0d0e, 0x32a6, 0x42cb, 0x4396, 0x40a2, 0xb00f, 0x4050, 0xb271, 0x40ee, 0x410a, 0xbfc8, 0xb230, 0x1a49, 0x4360, 0xb03d, 0x0d57, 0x4276, 0x406d, 0xb223, 0x40b9, 0x40b7, 0x1e40, 0xb257, 0x07e4, 0xa579, 0xb217, 0xbf7c, 0xbae9, 0x4333, 0xbae6, 0xb23c, 0xbae4, 0x423d, 0x4121, 0xbacc, 0x41eb, 0xaaae, 0x1c89, 0x1960, 0x42af, 0x2b33, 0x4287, 0x4000, 0xb27b, 0x436d, 0x458d, 0x42aa, 0x43fd, 0x423a, 0x43fd, 0xbfc3, 0x1e10, 0x4317, 0xb272, 0xbaec, 0x4152, 0x4173, 0x30c9, 0x404e, 0x2173, 0x46c8, 0xb260, 0x4084, 0xb234, 0x4217, 0x1fbc, 0xbf13, 0x46b1, 0x41fd, 0xa309, 0x1f35, 0x418e, 0xb21a, 0x43a6, 0x41f1, 0x4219, 0x45d4, 0x45c6, 0x1ac2, 0x1c3e, 0xbad6, 0xbfc0, 0xba74, 0x4342, 0x41e9, 0x43c2, 0x4051, 0xbf88, 0xb2ce, 0xbfb0, 0xb03b, 0x248a, 0x42c8, 0xa7f9, 0xb2dc, 0x4284, 0xb27d, 0x4207, 0x43d4, 0x3a09, 0x43b6, 0xbfd2, 0x4636, 0x431f, 0x359a, 0x4035, 0xa58b, 0xb293, 0xba72, 0x40b4, 0x42fa, 0x08f7, 0x415c, 0x16ac, 0x438c, 0x42d5, 0x4069, 0x18ce, 0xa2a3, 0x4259, 0x245a, 0x2c8c, 0x4104, 0xbf52, 0xa8d4, 0x1a52, 0xae71, 0xb0dc, 0xa6c6, 0xb240, 0x33b4, 0x3314, 0x4183, 0x183d, 0x1fe5, 0xba4f, 0x1b3b, 0x41b3, 0x3897, 0xb209, 0x4380, 0x417f, 0xbaef, 0xb2e6, 0x42a0, 0x4177, 0xbfb2, 0x1e3c, 0x4250, 0xba34, 0x402c, 0x2e43, 0x435b, 0xbf8f, 0x3463, 0x40a0, 0x4174, 0x44dd, 0x40cf, 0x400b, 0x2fca, 0x3ccd, 0x2e2e, 0x3764, 0xa626, 0x40bc, 0xa3ba, 0x44ca, 0xbfa7, 0x43ed, 0xb278, 0x412a, 0xba1a, 0x01d4, 0x185c, 0x4365, 0x389a, 0x37b6, 0x4111, 0x40f7, 0x4114, 0x06a0, 0x4167, 0x3736, 0x42dc, 0x40c3, 0x32cb, 0x41b0, 0x412b, 0x2c08, 0xbacd, 0x1806, 0xb247, 0x3a1f, 0xbf70, 0x4137, 0xbf9e, 0x42a3, 0x3af2, 0x424f, 0x2f4b, 0xba6c, 0x3b5b, 0xbff0, 0xb2bc, 0x414b, 0x4570, 0xb216, 0xb2a1, 0xbad1, 0x40ae, 0x40d0, 0x41ca, 0x4059, 0xacfd, 0x43ae, 0x43de, 0x428c, 0x19ac, 0x2ed4, 0xba26, 0xbfc5, 0x1e66, 0x403a, 0x41a7, 0x3900, 0x432b, 0x4386, 0x3670, 0x1674, 0x0a49, 0x41b9, 0x438a, 0x42b9, 0x41aa, 0x40a8, 0x43c9, 0xba1c, 0x4167, 0xb0ed, 0x4359, 0xa917, 0xbf59, 0xb040, 0x4205, 0x43eb, 0x1811, 0x1e8e, 0x41cd, 0x41f2, 0x4190, 0x41b0, 0x368c, 0x387e, 0x1545, 0x18d3, 0x40d8, 0x4279, 0x438b, 0x0c33, 0xbf28, 0x4218, 0x41c7, 0xa71d, 0x4373, 0x229d, 0x4605, 0x2a5d, 0xb265, 0xbf15, 0x1c05, 0xb006, 0x193f, 0xba38, 0x4338, 0xbf4e, 0x4177, 0x4138, 0x22ae, 0xb268, 0x40e2, 0xbfa0, 0x42a9, 0x4612, 0x267c, 0x41c9, 0xb291, 0xbad0, 0xba3a, 0x45c2, 0xbac5, 0x43df, 0xb00c, 0x43e4, 0x1faf, 0x1c18, 0x1f38, 0x42f0, 0x1ac4, 0xbf2d, 0x4158, 0x40dc, 0x4329, 0xba24, 0x4009, 0xbace, 0x4206, 0x0e36, 0x3b42, 0x023c, 0x0ab2, 0x42f3, 0xb2d2, 0x4165, 0x236b, 0x4125, 0xb239, 0x45db, 0xbf5e, 0x4198, 0x444c, 0x1601, 0x19a8, 0xbaf6, 0xb251, 0x4035, 0x4169, 0x4265, 0x406f, 0x403c, 0x4319, 0xb29f, 0x4052, 0xb273, 0x1bfe, 0x4588, 0x40fe, 0x41cc, 0x40bb, 0x46f3, 0x42ff, 0xa67e, 0x1fff, 0x10c0, 0xbf33, 0x4286, 0x412d, 0xb26d, 0x41bd, 0x436e, 0x439d, 0x417e, 0x0746, 0x42c6, 0x04ce, 0x406d, 0x4249, 0xb22a, 0x43ff, 0x27d4, 0xb2a7, 0xbf95, 0xb287, 0x366b, 0x1cc0, 0x1802, 0xba5c, 0x43e7, 0x4061, 0x4153, 0x150c, 0x4681, 0x44a1, 0x45cd, 0xbad6, 0xbfc9, 0x42f2, 0x1bfc, 0x4180, 0x25a3, 0x42d3, 0x409b, 0xb0e1, 0x4676, 0xbfa1, 0x436a, 0x42b6, 0xba61, 0x424c, 0x4354, 0x340e, 0x43b7, 0x0ce6, 0x45bd, 0xa0d6, 0x42e8, 0xba77, 0x4037, 0x42b2, 0x446d, 0xbae6, 0x439f, 0xb0a1, 0xba6e, 0x4231, 0xa05f, 0x46ca, 0xb081, 0xba3e, 0x1d40, 0x435a, 0x196f, 0x4168, 0x405e, 0xbf9f, 0x4056, 0x30ab, 0x43be, 0x1956, 0xb01d, 0x41d5, 0xba3b, 0xbf48, 0x08f2, 0x42d2, 0x42a7, 0x4291, 0x423d, 0x405e, 0xb2a9, 0x2cb9, 0x43bd, 0x4270, 0xb2d2, 0x420d, 0x1494, 0x4098, 0xa21a, 0x43d1, 0x442e, 0x4559, 0x3192, 0x43d2, 0xbad2, 0x4379, 0x4298, 0xb2d6, 0xbafd, 0xbfc5, 0xbaca, 0xbaf2, 0x1ba9, 0x422c, 0xb2b0, 0x096c, 0x0443, 0xbafe, 0x44e4, 0xba0a, 0x1d8f, 0x15f2, 0xba7b, 0xbad0, 0xb295, 0x41f3, 0xb212, 0xb0dc, 0x24d5, 0x40c8, 0xba3a, 0x4023, 0xb2cd, 0xa317, 0xa11d, 0x4374, 0x1e3e, 0x414d, 0x401b, 0xbf85, 0x418b, 0xae75, 0xb226, 0x37f7, 0x4392, 0x432b, 0x426c, 0x4312, 0x0f46, 0xbfd0, 0x406c, 0xa729, 0x4136, 0x0f4f, 0x40dd, 0x1d25, 0x1a81, 0x41e9, 0x36ab, 0x4694, 0x4558, 0x1868, 0xb220, 0xbfa3, 0x1ecd, 0x4274, 0x1b66, 0x2988, 0x41e0, 0x08f1, 0x4214, 0xb28a, 0xb243, 0x4071, 0x2b56, 0x4038, 0x438f, 0x2441, 0x41bd, 0x41ba, 0x31cf, 0x408b, 0xb036, 0x1db4, 0x19c7, 0xb2c0, 0xbf55, 0x0c41, 0xbaf0, 0xb2ae, 0x4007, 0x1b06, 0xb08f, 0x1d3d, 0x430e, 0x2937, 0x41a0, 0x4209, 0x4448, 0x402a, 0xba03, 0x3597, 0xb20b, 0x45b3, 0x4376, 0x4663, 0x437c, 0x417e, 0xb088, 0xbf9c, 0x14f2, 0xb29a, 0x2554, 0x18c1, 0x180a, 0x417f, 0x0c42, 0xba14, 0xb05c, 0x41ba, 0xbf5e, 0x2562, 0x4243, 0x420f, 0x0a72, 0x438c, 0xb0ab, 0x4210, 0x1dca, 0xb2d9, 0x434a, 0xbf60, 0xad83, 0xbf35, 0xbadb, 0x407a, 0xb2a5, 0xa130, 0x429e, 0xa4e3, 0x142b, 0x35b8, 0xbfc0, 0x40a6, 0xbaf6, 0x3089, 0x4280, 0xba19, 0x43a6, 0x0fef, 0x442e, 0x1cf6, 0xb2ac, 0x18b2, 0xb0c3, 0xbad1, 0x42e0, 0x391a, 0x435c, 0xbf87, 0xb272, 0x05bc, 0x4226, 0xb2f2, 0x4313, 0x459e, 0x4326, 0x4495, 0x4236, 0x1239, 0xbf55, 0x43f8, 0xb289, 0xbf70, 0xb249, 0xb2cd, 0xb224, 0x4017, 0x1d5d, 0x4026, 0x423e, 0x1214, 0x431a, 0x351a, 0x40d3, 0xbf88, 0xba4e, 0x434f, 0x3815, 0x15ac, 0x1693, 0x40ad, 0xbf90, 0x43ac, 0x42c3, 0x060d, 0x4013, 0x3896, 0x428c, 0x2d3e, 0x435b, 0xaeac, 0x42b7, 0xbfbc, 0x42c5, 0x31b5, 0x1b10, 0x0f85, 0xbaf0, 0xbfa5, 0x09a7, 0x0762, 0xb2cb, 0xab8a, 0xba7c, 0x3c28, 0x40a2, 0x173c, 0xa6f8, 0x0788, 0x4623, 0x4324, 0x4310, 0xb208, 0x3297, 0x4667, 0x41c1, 0xbfc7, 0xbf00, 0xb222, 0x0499, 0x422f, 0x46f8, 0xa72c, 0x2e9e, 0xa41b, 0x4370, 0xbf08, 0xb073, 0xbfc0, 0x04bb, 0x2e56, 0xba6a, 0xba56, 0x4206, 0x4306, 0x427b, 0xb060, 0x4260, 0x4298, 0x4360, 0x434f, 0xbf70, 0xa2d2, 0xbae6, 0xbf80, 0xac39, 0x441b, 0xb2e7, 0x40d7, 0x42a2, 0x42b5, 0x08fe, 0xbf05, 0x195f, 0x414a, 0x40a5, 0x4344, 0xbafe, 0x4212, 0xb225, 0x429d, 0x428b, 0x22bc, 0x43e8, 0xb27d, 0xb2ac, 0x4108, 0xb2d2, 0x1d5f, 0x23c3, 0x4257, 0xb060, 0x4105, 0xb208, 0x441f, 0x2f98, 0x1f2b, 0xbf17, 0x43d2, 0x413e, 0xba24, 0x40ca, 0x4101, 0xbf90, 0x43dc, 0x42b6, 0x431d, 0x42db, 0x43e6, 0xac1f, 0x42c9, 0xba0b, 0x46a4, 0xba41, 0x42f3, 0x45a2, 0xbf2e, 0xb088, 0x40fd, 0x0d9d, 0x1a17, 0x2ee0, 0x1b8c, 0x41cc, 0x42b4, 0xb294, 0x436d, 0xabb1, 0xa7ed, 0xba2c, 0x4002, 0x4214, 0x417c, 0x03a3, 0x1b3a, 0x4645, 0xa99a, 0x4661, 0x41b7, 0xbacd, 0x2cb1, 0x1dca, 0x1d24, 0x42c5, 0xba4c, 0xbf9c, 0x1e2b, 0xb24b, 0x4770, 0xe7fe + ], + StartRegs = [0x6858fdc0, 0x2c117adb, 0x4e91c10b, 0x490c37fa, 0xdc3cc5ba, 0x19d843cc, 0x38054938, 0xa1f0a710, 0x540c538f, 0x8e7e0cd6, 0x8458328c, 0x917b025c, 0x75c492d1, 0x64488841, 0x00000000, 0x000001f0 + ], + FinalRegs = [0xffffa800, 0x540c5724, 0x540c572b, 0x00000024, 0x0c542457, 0x00002457, 0xfffffffc, 0x00001b93, 0x00001730, 0xffffff42, 0xffffff42, 0x00000000, 0x540c5724, 0x540c5688, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0xab86, 0x436f, 0xb06c, 0x401b, 0x4278, 0x4283, 0x4243, 0x1d91, 0x427d, 0x312e, 0xad98, 0x4070, 0x4267, 0x4481, 0x438f, 0xba4e, 0xb280, 0xb2d0, 0x4139, 0x40e3, 0x42f9, 0xbf7f, 0x242c, 0x43f9, 0x40cf, 0xb0cc, 0x410e, 0xb250, 0xb083, 0x2759, 0x434c, 0xbad5, 0x0875, 0xb036, 0x426c, 0x3721, 0x412f, 0xbf4c, 0x1bd7, 0x4137, 0xb04a, 0xb2d2, 0xb017, 0xbae5, 0xb258, 0x41ec, 0x1aa9, 0x1e1b, 0x42d2, 0x42a6, 0xb2a0, 0xbf36, 0xbae1, 0x426e, 0x4011, 0x41fc, 0x3afd, 0x4289, 0x355c, 0xb24f, 0x0e2c, 0x4391, 0xb2b5, 0x4059, 0x4030, 0xb299, 0xb281, 0xb04f, 0xb0d6, 0xbf33, 0x0a54, 0xbfe0, 0x41a6, 0x1b05, 0xbae0, 0xac71, 0xbf00, 0xb042, 0x18f7, 0x4576, 0x4056, 0x0b0d, 0xb224, 0xbf62, 0xba1e, 0x4629, 0xad90, 0x44e5, 0x1a37, 0x41c5, 0xbae3, 0xba68, 0x4436, 0x45b4, 0x4203, 0xba1c, 0x026e, 0x4649, 0x42c6, 0x4166, 0xba1d, 0x1d0b, 0x4006, 0x12f0, 0x0f55, 0x425a, 0xbfe1, 0xb264, 0x4672, 0xb031, 0xbac4, 0x2a1f, 0x42ec, 0x4147, 0x437f, 0x4165, 0x407e, 0x1e5e, 0x429e, 0xb03d, 0x262b, 0x4181, 0xa9bc, 0x1b17, 0xbf60, 0x1a3b, 0xa1c0, 0x18d3, 0xb03d, 0xbf25, 0xbad5, 0x421b, 0xbaeb, 0x18d4, 0x3660, 0x42ad, 0xbad0, 0xbfc0, 0x42b4, 0x0065, 0xba05, 0xb242, 0x41d4, 0x43f1, 0x427a, 0xbaf9, 0x4594, 0x41ba, 0xb004, 0xbf11, 0x3700, 0xb272, 0x4242, 0x1bab, 0xa2be, 0x43af, 0x418a, 0xb2c7, 0x0201, 0xb2c8, 0x425c, 0x405e, 0x4119, 0xb20b, 0x22a8, 0xb0bf, 0x1fd3, 0x0867, 0x4324, 0xbf89, 0xb01e, 0xb0a3, 0x3674, 0x29de, 0x4349, 0xb070, 0x00b9, 0xb27a, 0x4396, 0x45f2, 0x280b, 0x4288, 0xbf9e, 0x42fb, 0x0703, 0x40e5, 0x44e5, 0x1bd1, 0x46a2, 0xb2ca, 0x18e5, 0x010b, 0x16dc, 0x4389, 0x440c, 0x4134, 0x0684, 0x3025, 0x400b, 0x4272, 0xba24, 0x2c2f, 0x43c7, 0x2148, 0x151a, 0x433b, 0x41a2, 0xa6d0, 0xbf57, 0x085a, 0xb2c6, 0x44ba, 0x40a1, 0x43cd, 0xb2bc, 0xba3e, 0xb2d1, 0xba61, 0x0c3e, 0x1cfa, 0xbf84, 0x1b40, 0x372a, 0x3b42, 0xb06c, 0x43b7, 0x1d1f, 0x41fc, 0x41f6, 0x4552, 0xb29d, 0x43dc, 0x1a4e, 0x2de6, 0x4204, 0x407e, 0x16a1, 0xb276, 0x40ba, 0xb223, 0x4377, 0x4073, 0xb007, 0xbfdc, 0x41e3, 0x3889, 0x4117, 0x43bb, 0xba05, 0xb2ac, 0x274e, 0xb0fe, 0x01ee, 0x0c90, 0x46ab, 0x1775, 0x426c, 0xbaf1, 0x1030, 0x2822, 0xbad0, 0x089f, 0x4036, 0xbaf4, 0x1e1b, 0xba3b, 0x428e, 0x420c, 0xbf4e, 0x4228, 0x1bf3, 0x40dd, 0x40c8, 0x4010, 0xa54e, 0x4646, 0xba62, 0xbf84, 0x1d90, 0xb25f, 0xbf0f, 0xbacd, 0x410b, 0xb25c, 0x43ec, 0x25fc, 0xa882, 0x29ac, 0x4339, 0x2a4f, 0x431a, 0x032a, 0x4384, 0x3a9f, 0xb2e9, 0x401d, 0x1d5e, 0xbf64, 0x1da6, 0x062e, 0x4150, 0x0935, 0xa143, 0x2840, 0xbac7, 0xbac8, 0x44dc, 0x1af0, 0x434a, 0xba37, 0x432e, 0x4223, 0xbf00, 0x40be, 0x41ac, 0xb2d9, 0x4373, 0x19dc, 0x402c, 0x3f03, 0x43f9, 0xbf44, 0x4057, 0x07ef, 0xb2e1, 0x4308, 0xba47, 0x4033, 0x4069, 0x1590, 0xb2d7, 0x2ff9, 0xb281, 0x07a2, 0x0caa, 0x4022, 0x42fa, 0x425b, 0xba05, 0x2f80, 0xbadf, 0xa0c2, 0xbf14, 0x41ca, 0xbafb, 0x3b0a, 0x084d, 0x41c2, 0x43d6, 0x016f, 0xba73, 0x40ff, 0x1e2f, 0x4634, 0xa32a, 0x4212, 0x4234, 0x193e, 0xb036, 0xb2d3, 0xb2b5, 0x40f7, 0x40a5, 0x43f4, 0xbf84, 0x4322, 0x431a, 0x40e3, 0x3a14, 0xb2ef, 0xba6a, 0x439a, 0x43e2, 0x40db, 0xba35, 0x279e, 0x41f9, 0xb053, 0x400d, 0x4442, 0x45d4, 0xa582, 0xbf6a, 0x4249, 0x05f6, 0x439d, 0xb29f, 0x41d6, 0xa1a1, 0x1849, 0xbf8e, 0x4215, 0x130c, 0x43c9, 0xbfe0, 0xb2ff, 0x1d87, 0x4378, 0xb062, 0x42de, 0x4335, 0xb0b6, 0x416d, 0x4241, 0x08b9, 0x04fb, 0xba2d, 0x44f2, 0x0af9, 0xba57, 0x17c9, 0x4188, 0x1f59, 0x02cc, 0x42fb, 0xbf8f, 0xb289, 0x4148, 0x0ee2, 0x43ef, 0xba1c, 0x40df, 0x456e, 0xb235, 0x1d34, 0x43b0, 0x44ed, 0x4010, 0x43a1, 0x4096, 0x1a2d, 0xbf9d, 0xb01c, 0x417a, 0x429d, 0xb226, 0x19eb, 0xb20e, 0x434a, 0x46ba, 0x4374, 0xbf48, 0x41ea, 0x23aa, 0x41f7, 0xaef1, 0x4331, 0x41c3, 0x1dff, 0x349b, 0x220e, 0x43ec, 0xaf93, 0xbf7d, 0xba45, 0x33db, 0x41e2, 0x465f, 0x42d7, 0xb268, 0xba51, 0x42bf, 0xba33, 0xb03c, 0x42b2, 0x101c, 0x422b, 0xbf05, 0xb2a6, 0x348a, 0xba46, 0x1691, 0xb055, 0xbf60, 0xb058, 0x40f3, 0x404b, 0x3a1b, 0x44b1, 0x18d2, 0x165e, 0x439a, 0x401c, 0x1860, 0x44ca, 0xba4f, 0xbf7a, 0x1f7f, 0x410a, 0x44e0, 0xa367, 0xa9b9, 0x43e5, 0x41a3, 0x112b, 0xba5f, 0xbf01, 0xbf80, 0x4288, 0x4613, 0x1f10, 0x2223, 0xb2ab, 0xb231, 0xba03, 0x415d, 0x38a5, 0xba64, 0x4287, 0x42c7, 0x3c02, 0x1b36, 0x444e, 0xbf0c, 0x42ec, 0x419b, 0xb08b, 0x0e22, 0xbf58, 0x45a0, 0x3d48, 0xa1d0, 0xba09, 0x2ae7, 0x1240, 0xa3da, 0x430b, 0x41d5, 0xb267, 0x4173, 0xab95, 0x4323, 0xb24f, 0x436b, 0x12fc, 0xbf06, 0xbac0, 0x184d, 0xb2c8, 0x1e2e, 0x1b5c, 0x1f35, 0x414f, 0xb2f4, 0x41c8, 0x1bf7, 0x1c02, 0x4179, 0x054d, 0xa9e5, 0x19de, 0x40d4, 0xba00, 0xbae8, 0x406d, 0x4090, 0x16e9, 0xba19, 0xbf17, 0x4135, 0x2fdd, 0xa4f3, 0x4007, 0x43be, 0x4103, 0x46a4, 0xb201, 0x4061, 0xba27, 0xb056, 0x1c97, 0xb294, 0xba6c, 0x1ed4, 0xbacf, 0x35d1, 0x3094, 0x1c4d, 0xba09, 0x28a4, 0xb0a4, 0x2f5f, 0x4263, 0xb03c, 0x0667, 0x31f0, 0xbfc7, 0x259c, 0x41a9, 0x3f6d, 0x4345, 0x4240, 0x1b3e, 0x40d3, 0xba05, 0x4066, 0xbad7, 0xb0e7, 0x1f93, 0xbff0, 0x1c32, 0x41c5, 0x36e4, 0xb086, 0x3d60, 0x1927, 0x4339, 0x41fc, 0xb27d, 0x4253, 0xa158, 0xba4f, 0x0102, 0xbf2a, 0x353f, 0x1eb5, 0x400c, 0xab8b, 0x402c, 0x44fc, 0x384f, 0xb253, 0xacde, 0xaec7, 0x446b, 0xb2dc, 0x413e, 0x1d6c, 0x4206, 0xb298, 0x4297, 0xb2cf, 0x4008, 0x41b4, 0x2866, 0x4115, 0x4369, 0x46e5, 0xbf70, 0x4006, 0xa904, 0x40c4, 0xbf56, 0xa695, 0x42a2, 0x40c0, 0x4152, 0x409a, 0x411b, 0x408e, 0xbf80, 0xb074, 0x43be, 0x072c, 0x40a7, 0x41e3, 0xb0d3, 0x455e, 0xb2a5, 0x1be1, 0x4178, 0x405a, 0x4066, 0xb242, 0x42da, 0xb205, 0xba4a, 0xbfde, 0xba32, 0x45ce, 0x1dc4, 0x42be, 0x4257, 0xb22d, 0xaad1, 0x41f9, 0xb298, 0x4033, 0xb26c, 0xb08a, 0x4210, 0x4094, 0x40d3, 0x4105, 0x41be, 0x02d9, 0x405f, 0xba3a, 0xbac2, 0xbfde, 0x436d, 0x41f2, 0x42cb, 0x4225, 0x40d2, 0x44e5, 0x42a0, 0x41f1, 0x41b7, 0x1e7e, 0x4385, 0x114c, 0x1e14, 0xbf26, 0x37d0, 0xb00b, 0x2124, 0xb276, 0xbac4, 0x41ad, 0x4077, 0x44d0, 0xba27, 0xbf13, 0x2327, 0x21a0, 0x22e5, 0xb069, 0xba4a, 0xb22a, 0xad1e, 0x4207, 0x2a4e, 0x1a9e, 0xb0a8, 0x4095, 0xb0b5, 0x419e, 0xb2fd, 0x422c, 0x33c7, 0xbfb1, 0x4050, 0xb2ed, 0x29d5, 0x191a, 0x1c19, 0xbfbe, 0x1823, 0x447c, 0x41ee, 0x0ba8, 0x46d3, 0xbfb0, 0xaf6e, 0xbfa3, 0x42cb, 0xb043, 0xaf56, 0x4122, 0x405e, 0x1e9e, 0xb2f6, 0x4171, 0x18c9, 0xba2d, 0x0c08, 0x4200, 0x402a, 0x401b, 0xadfe, 0x4365, 0x1fd0, 0x411b, 0xb03b, 0x43d2, 0x42d3, 0xba5c, 0xbfcf, 0x420b, 0x253c, 0xaf62, 0xbafc, 0x4223, 0x4484, 0x41bd, 0x424a, 0xba4b, 0x41be, 0x2525, 0x4262, 0x432b, 0x3897, 0x29b2, 0xbf42, 0xa188, 0x4004, 0x449b, 0x46e5, 0x42ec, 0x45be, 0x3f6a, 0xbf60, 0x436d, 0x412f, 0xbf60, 0x4284, 0xb227, 0xba46, 0x4329, 0xa61f, 0xb21d, 0xbfb7, 0x43aa, 0x1d94, 0xafd1, 0x4102, 0xa3bc, 0xb240, 0x42d0, 0x1b46, 0x4140, 0x1d73, 0x19e9, 0xb0b2, 0x1ac2, 0xb2be, 0xbf57, 0x42e1, 0x455c, 0xb27d, 0x42fa, 0x3cb0, 0xb218, 0x41fc, 0x3d3a, 0x2b79, 0xb2c3, 0x1853, 0xbfa0, 0x4556, 0x4035, 0x1d83, 0x33c4, 0x131e, 0xbad3, 0x428c, 0x41ff, 0x456a, 0xbf56, 0x41f6, 0x4115, 0x4654, 0xa539, 0x43ae, 0x41d6, 0xba1c, 0x3b02, 0x2859, 0xba41, 0xa4f5, 0x43de, 0x41d6, 0xb251, 0x401d, 0xbfe4, 0x42dc, 0xa953, 0x4129, 0x406e, 0x09c1, 0x3105, 0x2ce2, 0xa65c, 0x42e6, 0x42a8, 0x34ac, 0x4270, 0x42ef, 0x3dc8, 0xb2dd, 0x189c, 0xb2bd, 0x1d7d, 0x44d8, 0xb224, 0xbf6a, 0xba40, 0x4194, 0x0198, 0x436f, 0x423c, 0x429f, 0x4077, 0xbad1, 0x1ac3, 0xb0be, 0x2bdf, 0xb051, 0x435d, 0x1573, 0x1d5f, 0x0b67, 0xb0e6, 0x430f, 0x4025, 0xbad2, 0xbfa7, 0x1896, 0x4386, 0x1e61, 0xb250, 0x2733, 0x13f6, 0xba6c, 0x4246, 0x1d98, 0x41f0, 0x4362, 0xb213, 0x41f1, 0xb074, 0xb050, 0x4139, 0xbac9, 0x420e, 0x416e, 0x0a81, 0xbf61, 0xba0f, 0x41c5, 0x40f4, 0xb2e3, 0x2f84, 0xb278, 0xbf67, 0x46c5, 0xba2e, 0x40f1, 0x1036, 0xbff0, 0x3a3b, 0xbaee, 0x3276, 0xb093, 0x1b72, 0x400d, 0x3cda, 0xbf24, 0x197a, 0x42e5, 0x4623, 0xbfbb, 0x1cc0, 0x42cd, 0x41dd, 0x2127, 0x1817, 0x404e, 0x4207, 0x4331, 0x1bf1, 0xbfd7, 0xa8e1, 0x46eb, 0x4372, 0x406b, 0x4670, 0xbf70, 0x401c, 0x403d, 0x4087, 0x4039, 0x43ce, 0x266c, 0x42c2, 0x1b06, 0x2d2d, 0xb0ad, 0x4613, 0x4029, 0x1cbb, 0x1878, 0x4294, 0x4154, 0xb253, 0xbf9b, 0xba0f, 0x4400, 0x422a, 0x34f1, 0xbfd3, 0xb20e, 0x41bd, 0x1c19, 0x418d, 0x3be1, 0xb056, 0x43cc, 0x40e0, 0x133b, 0x43fa, 0x1a07, 0x4086, 0xb26c, 0xbf46, 0x1caf, 0xbae1, 0xb0bf, 0xb2cc, 0xb024, 0x4345, 0x4474, 0xb031, 0x4553, 0x1c60, 0x2731, 0xb2be, 0x297d, 0x4367, 0x40ff, 0x401c, 0xba33, 0x2258, 0xbfce, 0xb280, 0x40c7, 0x0b15, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x38d6f90d, 0xcd984b26, 0xc8b29dc9, 0x67c34614, 0x14951b86, 0xae2631e0, 0x418035e3, 0x147814c2, 0xb4096d8b, 0xc30ae4ae, 0xb5c6061f, 0x1b3e3fa0, 0x0b9ebe6d, 0x746bc3e8, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0x00000100, 0xffffffff, 0x00000058, 0x31000000, 0x00000000, 0x00000000, 0x00000031, 0x00000000, 0x00fc342b, 0x2eb36651, 0x26796350, 0x00002db3, 0x00002d03, 0x00002fab, 0x00000000, 0x000001d0 }, + Instructions = [0xab86, 0x436f, 0xb06c, 0x401b, 0x4278, 0x4283, 0x4243, 0x1d91, 0x427d, 0x312e, 0xad98, 0x4070, 0x4267, 0x4481, 0x438f, 0xba4e, 0xb280, 0xb2d0, 0x4139, 0x40e3, 0x42f9, 0xbf7f, 0x242c, 0x43f9, 0x40cf, 0xb0cc, 0x410e, 0xb250, 0xb083, 0x2759, 0x434c, 0xbad5, 0x0875, 0xb036, 0x426c, 0x3721, 0x412f, 0xbf4c, 0x1bd7, 0x4137, 0xb04a, 0xb2d2, 0xb017, 0xbae5, 0xb258, 0x41ec, 0x1aa9, 0x1e1b, 0x42d2, 0x42a6, 0xb2a0, 0xbf36, 0xbae1, 0x426e, 0x4011, 0x41fc, 0x3afd, 0x4289, 0x355c, 0xb24f, 0x0e2c, 0x4391, 0xb2b5, 0x4059, 0x4030, 0xb299, 0xb281, 0xb04f, 0xb0d6, 0xbf33, 0x0a54, 0xbfe0, 0x41a6, 0x1b05, 0xbae0, 0xac71, 0xbf00, 0xb042, 0x18f7, 0x4576, 0x4056, 0x0b0d, 0xb224, 0xbf62, 0xba1e, 0x4629, 0xad90, 0x44e5, 0x1a37, 0x41c5, 0xbae3, 0xba68, 0x4436, 0x45b4, 0x4203, 0xba1c, 0x026e, 0x4649, 0x42c6, 0x4166, 0xba1d, 0x1d0b, 0x4006, 0x12f0, 0x0f55, 0x425a, 0xbfe1, 0xb264, 0x4672, 0xb031, 0xbac4, 0x2a1f, 0x42ec, 0x4147, 0x437f, 0x4165, 0x407e, 0x1e5e, 0x429e, 0xb03d, 0x262b, 0x4181, 0xa9bc, 0x1b17, 0xbf60, 0x1a3b, 0xa1c0, 0x18d3, 0xb03d, 0xbf25, 0xbad5, 0x421b, 0xbaeb, 0x18d4, 0x3660, 0x42ad, 0xbad0, 0xbfc0, 0x42b4, 0x0065, 0xba05, 0xb242, 0x41d4, 0x43f1, 0x427a, 0xbaf9, 0x4594, 0x41ba, 0xb004, 0xbf11, 0x3700, 0xb272, 0x4242, 0x1bab, 0xa2be, 0x43af, 0x418a, 0xb2c7, 0x0201, 0xb2c8, 0x425c, 0x405e, 0x4119, 0xb20b, 0x22a8, 0xb0bf, 0x1fd3, 0x0867, 0x4324, 0xbf89, 0xb01e, 0xb0a3, 0x3674, 0x29de, 0x4349, 0xb070, 0x00b9, 0xb27a, 0x4396, 0x45f2, 0x280b, 0x4288, 0xbf9e, 0x42fb, 0x0703, 0x40e5, 0x44e5, 0x1bd1, 0x46a2, 0xb2ca, 0x18e5, 0x010b, 0x16dc, 0x4389, 0x440c, 0x4134, 0x0684, 0x3025, 0x400b, 0x4272, 0xba24, 0x2c2f, 0x43c7, 0x2148, 0x151a, 0x433b, 0x41a2, 0xa6d0, 0xbf57, 0x085a, 0xb2c6, 0x44ba, 0x40a1, 0x43cd, 0xb2bc, 0xba3e, 0xb2d1, 0xba61, 0x0c3e, 0x1cfa, 0xbf84, 0x1b40, 0x372a, 0x3b42, 0xb06c, 0x43b7, 0x1d1f, 0x41fc, 0x41f6, 0x4552, 0xb29d, 0x43dc, 0x1a4e, 0x2de6, 0x4204, 0x407e, 0x16a1, 0xb276, 0x40ba, 0xb223, 0x4377, 0x4073, 0xb007, 0xbfdc, 0x41e3, 0x3889, 0x4117, 0x43bb, 0xba05, 0xb2ac, 0x274e, 0xb0fe, 0x01ee, 0x0c90, 0x46ab, 0x1775, 0x426c, 0xbaf1, 0x1030, 0x2822, 0xbad0, 0x089f, 0x4036, 0xbaf4, 0x1e1b, 0xba3b, 0x428e, 0x420c, 0xbf4e, 0x4228, 0x1bf3, 0x40dd, 0x40c8, 0x4010, 0xa54e, 0x4646, 0xba62, 0xbf84, 0x1d90, 0xb25f, 0xbf0f, 0xbacd, 0x410b, 0xb25c, 0x43ec, 0x25fc, 0xa882, 0x29ac, 0x4339, 0x2a4f, 0x431a, 0x032a, 0x4384, 0x3a9f, 0xb2e9, 0x401d, 0x1d5e, 0xbf64, 0x1da6, 0x062e, 0x4150, 0x0935, 0xa143, 0x2840, 0xbac7, 0xbac8, 0x44dc, 0x1af0, 0x434a, 0xba37, 0x432e, 0x4223, 0xbf00, 0x40be, 0x41ac, 0xb2d9, 0x4373, 0x19dc, 0x402c, 0x3f03, 0x43f9, 0xbf44, 0x4057, 0x07ef, 0xb2e1, 0x4308, 0xba47, 0x4033, 0x4069, 0x1590, 0xb2d7, 0x2ff9, 0xb281, 0x07a2, 0x0caa, 0x4022, 0x42fa, 0x425b, 0xba05, 0x2f80, 0xbadf, 0xa0c2, 0xbf14, 0x41ca, 0xbafb, 0x3b0a, 0x084d, 0x41c2, 0x43d6, 0x016f, 0xba73, 0x40ff, 0x1e2f, 0x4634, 0xa32a, 0x4212, 0x4234, 0x193e, 0xb036, 0xb2d3, 0xb2b5, 0x40f7, 0x40a5, 0x43f4, 0xbf84, 0x4322, 0x431a, 0x40e3, 0x3a14, 0xb2ef, 0xba6a, 0x439a, 0x43e2, 0x40db, 0xba35, 0x279e, 0x41f9, 0xb053, 0x400d, 0x4442, 0x45d4, 0xa582, 0xbf6a, 0x4249, 0x05f6, 0x439d, 0xb29f, 0x41d6, 0xa1a1, 0x1849, 0xbf8e, 0x4215, 0x130c, 0x43c9, 0xbfe0, 0xb2ff, 0x1d87, 0x4378, 0xb062, 0x42de, 0x4335, 0xb0b6, 0x416d, 0x4241, 0x08b9, 0x04fb, 0xba2d, 0x44f2, 0x0af9, 0xba57, 0x17c9, 0x4188, 0x1f59, 0x02cc, 0x42fb, 0xbf8f, 0xb289, 0x4148, 0x0ee2, 0x43ef, 0xba1c, 0x40df, 0x456e, 0xb235, 0x1d34, 0x43b0, 0x44ed, 0x4010, 0x43a1, 0x4096, 0x1a2d, 0xbf9d, 0xb01c, 0x417a, 0x429d, 0xb226, 0x19eb, 0xb20e, 0x434a, 0x46ba, 0x4374, 0xbf48, 0x41ea, 0x23aa, 0x41f7, 0xaef1, 0x4331, 0x41c3, 0x1dff, 0x349b, 0x220e, 0x43ec, 0xaf93, 0xbf7d, 0xba45, 0x33db, 0x41e2, 0x465f, 0x42d7, 0xb268, 0xba51, 0x42bf, 0xba33, 0xb03c, 0x42b2, 0x101c, 0x422b, 0xbf05, 0xb2a6, 0x348a, 0xba46, 0x1691, 0xb055, 0xbf60, 0xb058, 0x40f3, 0x404b, 0x3a1b, 0x44b1, 0x18d2, 0x165e, 0x439a, 0x401c, 0x1860, 0x44ca, 0xba4f, 0xbf7a, 0x1f7f, 0x410a, 0x44e0, 0xa367, 0xa9b9, 0x43e5, 0x41a3, 0x112b, 0xba5f, 0xbf01, 0xbf80, 0x4288, 0x4613, 0x1f10, 0x2223, 0xb2ab, 0xb231, 0xba03, 0x415d, 0x38a5, 0xba64, 0x4287, 0x42c7, 0x3c02, 0x1b36, 0x444e, 0xbf0c, 0x42ec, 0x419b, 0xb08b, 0x0e22, 0xbf58, 0x45a0, 0x3d48, 0xa1d0, 0xba09, 0x2ae7, 0x1240, 0xa3da, 0x430b, 0x41d5, 0xb267, 0x4173, 0xab95, 0x4323, 0xb24f, 0x436b, 0x12fc, 0xbf06, 0xbac0, 0x184d, 0xb2c8, 0x1e2e, 0x1b5c, 0x1f35, 0x414f, 0xb2f4, 0x41c8, 0x1bf7, 0x1c02, 0x4179, 0x054d, 0xa9e5, 0x19de, 0x40d4, 0xba00, 0xbae8, 0x406d, 0x4090, 0x16e9, 0xba19, 0xbf17, 0x4135, 0x2fdd, 0xa4f3, 0x4007, 0x43be, 0x4103, 0x46a4, 0xb201, 0x4061, 0xba27, 0xb056, 0x1c97, 0xb294, 0xba6c, 0x1ed4, 0xbacf, 0x35d1, 0x3094, 0x1c4d, 0xba09, 0x28a4, 0xb0a4, 0x2f5f, 0x4263, 0xb03c, 0x0667, 0x31f0, 0xbfc7, 0x259c, 0x41a9, 0x3f6d, 0x4345, 0x4240, 0x1b3e, 0x40d3, 0xba05, 0x4066, 0xbad7, 0xb0e7, 0x1f93, 0xbff0, 0x1c32, 0x41c5, 0x36e4, 0xb086, 0x3d60, 0x1927, 0x4339, 0x41fc, 0xb27d, 0x4253, 0xa158, 0xba4f, 0x0102, 0xbf2a, 0x353f, 0x1eb5, 0x400c, 0xab8b, 0x402c, 0x44fc, 0x384f, 0xb253, 0xacde, 0xaec7, 0x446b, 0xb2dc, 0x413e, 0x1d6c, 0x4206, 0xb298, 0x4297, 0xb2cf, 0x4008, 0x41b4, 0x2866, 0x4115, 0x4369, 0x46e5, 0xbf70, 0x4006, 0xa904, 0x40c4, 0xbf56, 0xa695, 0x42a2, 0x40c0, 0x4152, 0x409a, 0x411b, 0x408e, 0xbf80, 0xb074, 0x43be, 0x072c, 0x40a7, 0x41e3, 0xb0d3, 0x455e, 0xb2a5, 0x1be1, 0x4178, 0x405a, 0x4066, 0xb242, 0x42da, 0xb205, 0xba4a, 0xbfde, 0xba32, 0x45ce, 0x1dc4, 0x42be, 0x4257, 0xb22d, 0xaad1, 0x41f9, 0xb298, 0x4033, 0xb26c, 0xb08a, 0x4210, 0x4094, 0x40d3, 0x4105, 0x41be, 0x02d9, 0x405f, 0xba3a, 0xbac2, 0xbfde, 0x436d, 0x41f2, 0x42cb, 0x4225, 0x40d2, 0x44e5, 0x42a0, 0x41f1, 0x41b7, 0x1e7e, 0x4385, 0x114c, 0x1e14, 0xbf26, 0x37d0, 0xb00b, 0x2124, 0xb276, 0xbac4, 0x41ad, 0x4077, 0x44d0, 0xba27, 0xbf13, 0x2327, 0x21a0, 0x22e5, 0xb069, 0xba4a, 0xb22a, 0xad1e, 0x4207, 0x2a4e, 0x1a9e, 0xb0a8, 0x4095, 0xb0b5, 0x419e, 0xb2fd, 0x422c, 0x33c7, 0xbfb1, 0x4050, 0xb2ed, 0x29d5, 0x191a, 0x1c19, 0xbfbe, 0x1823, 0x447c, 0x41ee, 0x0ba8, 0x46d3, 0xbfb0, 0xaf6e, 0xbfa3, 0x42cb, 0xb043, 0xaf56, 0x4122, 0x405e, 0x1e9e, 0xb2f6, 0x4171, 0x18c9, 0xba2d, 0x0c08, 0x4200, 0x402a, 0x401b, 0xadfe, 0x4365, 0x1fd0, 0x411b, 0xb03b, 0x43d2, 0x42d3, 0xba5c, 0xbfcf, 0x420b, 0x253c, 0xaf62, 0xbafc, 0x4223, 0x4484, 0x41bd, 0x424a, 0xba4b, 0x41be, 0x2525, 0x4262, 0x432b, 0x3897, 0x29b2, 0xbf42, 0xa188, 0x4004, 0x449b, 0x46e5, 0x42ec, 0x45be, 0x3f6a, 0xbf60, 0x436d, 0x412f, 0xbf60, 0x4284, 0xb227, 0xba46, 0x4329, 0xa61f, 0xb21d, 0xbfb7, 0x43aa, 0x1d94, 0xafd1, 0x4102, 0xa3bc, 0xb240, 0x42d0, 0x1b46, 0x4140, 0x1d73, 0x19e9, 0xb0b2, 0x1ac2, 0xb2be, 0xbf57, 0x42e1, 0x455c, 0xb27d, 0x42fa, 0x3cb0, 0xb218, 0x41fc, 0x3d3a, 0x2b79, 0xb2c3, 0x1853, 0xbfa0, 0x4556, 0x4035, 0x1d83, 0x33c4, 0x131e, 0xbad3, 0x428c, 0x41ff, 0x456a, 0xbf56, 0x41f6, 0x4115, 0x4654, 0xa539, 0x43ae, 0x41d6, 0xba1c, 0x3b02, 0x2859, 0xba41, 0xa4f5, 0x43de, 0x41d6, 0xb251, 0x401d, 0xbfe4, 0x42dc, 0xa953, 0x4129, 0x406e, 0x09c1, 0x3105, 0x2ce2, 0xa65c, 0x42e6, 0x42a8, 0x34ac, 0x4270, 0x42ef, 0x3dc8, 0xb2dd, 0x189c, 0xb2bd, 0x1d7d, 0x44d8, 0xb224, 0xbf6a, 0xba40, 0x4194, 0x0198, 0x436f, 0x423c, 0x429f, 0x4077, 0xbad1, 0x1ac3, 0xb0be, 0x2bdf, 0xb051, 0x435d, 0x1573, 0x1d5f, 0x0b67, 0xb0e6, 0x430f, 0x4025, 0xbad2, 0xbfa7, 0x1896, 0x4386, 0x1e61, 0xb250, 0x2733, 0x13f6, 0xba6c, 0x4246, 0x1d98, 0x41f0, 0x4362, 0xb213, 0x41f1, 0xb074, 0xb050, 0x4139, 0xbac9, 0x420e, 0x416e, 0x0a81, 0xbf61, 0xba0f, 0x41c5, 0x40f4, 0xb2e3, 0x2f84, 0xb278, 0xbf67, 0x46c5, 0xba2e, 0x40f1, 0x1036, 0xbff0, 0x3a3b, 0xbaee, 0x3276, 0xb093, 0x1b72, 0x400d, 0x3cda, 0xbf24, 0x197a, 0x42e5, 0x4623, 0xbfbb, 0x1cc0, 0x42cd, 0x41dd, 0x2127, 0x1817, 0x404e, 0x4207, 0x4331, 0x1bf1, 0xbfd7, 0xa8e1, 0x46eb, 0x4372, 0x406b, 0x4670, 0xbf70, 0x401c, 0x403d, 0x4087, 0x4039, 0x43ce, 0x266c, 0x42c2, 0x1b06, 0x2d2d, 0xb0ad, 0x4613, 0x4029, 0x1cbb, 0x1878, 0x4294, 0x4154, 0xb253, 0xbf9b, 0xba0f, 0x4400, 0x422a, 0x34f1, 0xbfd3, 0xb20e, 0x41bd, 0x1c19, 0x418d, 0x3be1, 0xb056, 0x43cc, 0x40e0, 0x133b, 0x43fa, 0x1a07, 0x4086, 0xb26c, 0xbf46, 0x1caf, 0xbae1, 0xb0bf, 0xb2cc, 0xb024, 0x4345, 0x4474, 0xb031, 0x4553, 0x1c60, 0x2731, 0xb2be, 0x297d, 0x4367, 0x40ff, 0x401c, 0xba33, 0x2258, 0xbfce, 0xb280, 0x40c7, 0x0b15, 0x4770, 0xe7fe + ], + StartRegs = [0x38d6f90d, 0xcd984b26, 0xc8b29dc9, 0x67c34614, 0x14951b86, 0xae2631e0, 0x418035e3, 0x147814c2, 0xb4096d8b, 0xc30ae4ae, 0xb5c6061f, 0x1b3e3fa0, 0x0b9ebe6d, 0x746bc3e8, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0x00000100, 0xffffffff, 0x00000058, 0x31000000, 0x00000000, 0x00000000, 0x00000031, 0x00000000, 0x00fc342b, 0x2eb36651, 0x26796350, 0x00002db3, 0x00002d03, 0x00002fab, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x1971, 0x439c, 0x401d, 0x1924, 0x1fc0, 0x3352, 0xba14, 0x4306, 0x432b, 0xb268, 0x1c6f, 0x4158, 0x4633, 0x37a0, 0xbfbe, 0x4286, 0x410c, 0x41c5, 0xb209, 0xb2f5, 0xa3dd, 0x40f7, 0xb087, 0xae09, 0xb2de, 0xba4c, 0x4349, 0xa6c5, 0x436c, 0xb05c, 0x4575, 0x2190, 0xbf3c, 0x1ed6, 0xa383, 0x4192, 0xbf60, 0xba2a, 0x36db, 0x4116, 0x2df4, 0x41a7, 0x299f, 0x406c, 0xa653, 0xbaca, 0xb282, 0xbac8, 0x40f7, 0x4669, 0xb274, 0xb022, 0xb2eb, 0x0ccf, 0x41b7, 0x20ed, 0x047a, 0xb083, 0xbf33, 0xb2bf, 0xa78d, 0x3ae6, 0x3882, 0xba1b, 0x455f, 0xbaeb, 0xaa73, 0x435d, 0xb201, 0x42d4, 0x4183, 0x415e, 0xba41, 0x41a3, 0xbfa5, 0x43ac, 0x4255, 0x1b2d, 0x422c, 0x4217, 0xbafe, 0x420c, 0x43e3, 0x40e3, 0x4199, 0x42fc, 0xbf4c, 0x41c6, 0x1001, 0x4674, 0x41d0, 0x404c, 0x4193, 0x4301, 0x16cb, 0x2399, 0x3509, 0x419b, 0x43d0, 0x18c3, 0x43d3, 0x40b9, 0x43ed, 0x137b, 0x40be, 0x2372, 0x3e64, 0x0ccb, 0xbf9b, 0x41a1, 0x26ed, 0x4359, 0x1326, 0xa32a, 0x4364, 0x3046, 0x410d, 0x416d, 0x3711, 0x41db, 0x40b5, 0x429f, 0x43a8, 0x42d0, 0xb2f9, 0x0758, 0xadfe, 0x421e, 0xb247, 0x2f6a, 0xbf0e, 0xb2e4, 0x2aad, 0x43a4, 0xb2d4, 0x439a, 0x4206, 0xbad9, 0x4153, 0x0dc3, 0xb217, 0xa3ea, 0x1a60, 0x1768, 0x4555, 0x40f9, 0x4205, 0x463d, 0x3e44, 0x4016, 0x3638, 0xba58, 0xb2c2, 0xba3a, 0xba04, 0x4224, 0x4359, 0x0001, 0x422a, 0xbf3c, 0x4342, 0x1b5e, 0xb22b, 0xb2ef, 0x36ae, 0xb204, 0xbfb0, 0x1858, 0x41da, 0x241b, 0xb04f, 0xb28d, 0xba31, 0x42f0, 0x42e7, 0x4028, 0x1dde, 0x45cd, 0xba2a, 0x40c0, 0x18b0, 0x0b4c, 0xbfbd, 0x1b99, 0x0418, 0x4239, 0x3b1d, 0x23c6, 0xba4f, 0x1f5d, 0xb2b0, 0xbac5, 0x1c2a, 0x45f1, 0x422b, 0x43bd, 0xa17c, 0xbf33, 0xba74, 0xb235, 0x0c06, 0x43b2, 0x40b3, 0xb0d2, 0xbf39, 0x4182, 0x46d9, 0xb2f1, 0x4271, 0x43e5, 0xb2b0, 0x41de, 0xbf00, 0x317f, 0x41e1, 0xa9e4, 0x18b0, 0x2a87, 0x4151, 0x43a1, 0x4179, 0x4204, 0x42c1, 0x44f8, 0x4389, 0x40f0, 0x2442, 0x43af, 0xbfa8, 0x3cac, 0x4365, 0x2149, 0x41ff, 0x443f, 0x4190, 0xb0ba, 0x216f, 0xb225, 0xb248, 0xb0f5, 0xba3e, 0x0b19, 0x1bc6, 0x41a7, 0xb0d7, 0xb2dc, 0xb20b, 0x1da9, 0x432d, 0x4293, 0x4035, 0x01ab, 0x2725, 0xbf93, 0xb264, 0x42b6, 0xb074, 0xb2db, 0xb2b6, 0x1dd3, 0x40fc, 0xba52, 0x4301, 0x1e30, 0xba78, 0x413c, 0xbfab, 0xa981, 0x414a, 0x439f, 0x4015, 0x0769, 0xb23d, 0x43de, 0x2bb2, 0xba4a, 0x4261, 0x412c, 0xbf9c, 0x4135, 0xb2ce, 0x4224, 0x1fcf, 0x42bc, 0x18cd, 0x1b98, 0x2bdb, 0x3605, 0x43df, 0xa64c, 0xbf9a, 0x32a3, 0x43ec, 0xb2d2, 0x43a1, 0xba7d, 0x43ee, 0x0e94, 0x44c9, 0x01d6, 0x4140, 0x2921, 0x424d, 0xb0a4, 0x0caa, 0xbf85, 0x41d4, 0x19a8, 0x0dc9, 0x4161, 0x1b35, 0x43ee, 0xa171, 0x4477, 0x4385, 0xba16, 0x420f, 0x3013, 0x0573, 0x4281, 0x3bf9, 0x181a, 0xb0bd, 0xb046, 0x3254, 0x4654, 0x43fd, 0xba34, 0x42b0, 0x4215, 0xb022, 0x42cf, 0x4225, 0x4281, 0xbf0e, 0x4021, 0x4217, 0x4351, 0x4283, 0xb2d9, 0xb223, 0xbfe0, 0x4209, 0xbfb6, 0xbaeb, 0x078c, 0xb21e, 0x1bc3, 0x2e6e, 0x43d9, 0x41c8, 0x40e0, 0x4361, 0x4225, 0x4078, 0x37fa, 0xb065, 0x4390, 0x40bd, 0x418c, 0xbfcf, 0xba18, 0x40e6, 0x4039, 0xbf00, 0x1bf0, 0x441a, 0x4345, 0x42d6, 0x2c06, 0x238c, 0x4284, 0x413b, 0x4295, 0xb291, 0x21de, 0xaabe, 0xba14, 0x4253, 0x3c60, 0xb29b, 0xbf00, 0xbfbc, 0x4081, 0xb2d5, 0xb2f1, 0x4253, 0x04c1, 0xb055, 0x1f26, 0x1d48, 0xbf88, 0x401d, 0x2150, 0x40ff, 0x08dd, 0xbf45, 0x18ce, 0x4341, 0x4217, 0x40b9, 0x09c6, 0x43a1, 0xbac8, 0xb28f, 0x420c, 0x41ea, 0xb2f7, 0x0e48, 0xa96a, 0xb29e, 0x0631, 0x3cc9, 0x43cb, 0x3771, 0xb23c, 0x46f9, 0xa882, 0xb2d3, 0xba10, 0x4375, 0x17f2, 0x03ab, 0xb2da, 0x43b0, 0x43ef, 0xbfbb, 0x2f20, 0xb051, 0x1ffa, 0x42c9, 0x2d15, 0x2157, 0xa778, 0x432c, 0x421a, 0x4430, 0x43f6, 0x4271, 0x436f, 0xbf62, 0xbac5, 0x4288, 0x24a8, 0x4361, 0xad27, 0x433f, 0x3a4e, 0xba0e, 0x41ed, 0xb2b6, 0xb27a, 0xbf53, 0xa105, 0x1f58, 0xa2f2, 0x43ff, 0xb074, 0x1ac5, 0x421e, 0x4241, 0xb2b7, 0x2ad2, 0x40d9, 0xa5fd, 0x25d8, 0xb2b6, 0xa3c8, 0xb2bf, 0xb226, 0xba6d, 0x07ed, 0x43db, 0x4261, 0x40e7, 0x41a5, 0x4619, 0x3e15, 0xb25a, 0x427f, 0xbff0, 0x1a2f, 0xbfd6, 0xbac4, 0x42ba, 0x0922, 0x11a7, 0x439f, 0x44d0, 0x43ff, 0x3c72, 0xba33, 0x4386, 0x1f3a, 0x40c0, 0x418f, 0x411a, 0x4212, 0x4110, 0x428f, 0x447c, 0xb097, 0xbf77, 0x42b7, 0x0621, 0xbacb, 0x46ca, 0x43af, 0x01f4, 0xba26, 0x1815, 0x41e1, 0x4150, 0x4171, 0x43b4, 0xa937, 0x412f, 0x42df, 0x429a, 0x415e, 0x431c, 0xad19, 0x4282, 0x4073, 0xbf87, 0x43d0, 0xba54, 0x2db6, 0x4350, 0x4237, 0x4164, 0xbae5, 0xb22b, 0x0a33, 0x43f8, 0xbf33, 0x40f2, 0xb2bc, 0xb2a4, 0x40e6, 0x41c9, 0x326c, 0x41c8, 0x42e9, 0x42af, 0xba3b, 0x359d, 0x4109, 0x4028, 0xb269, 0xba16, 0xb2fc, 0x3acb, 0x4063, 0xbf16, 0x09a3, 0xb2d5, 0xba22, 0x4142, 0xbf8b, 0x1c3c, 0x3e0e, 0xb29c, 0x1164, 0x331c, 0x1ce8, 0xbff0, 0x43d7, 0x4137, 0x429b, 0x18a9, 0x4193, 0xb0cc, 0xba49, 0xba38, 0x411f, 0xb205, 0xbfa6, 0x4173, 0x4142, 0x43e0, 0x4089, 0x182e, 0xba01, 0x41ea, 0x3a41, 0x2930, 0x4025, 0x0594, 0x1556, 0x0b43, 0x46f2, 0x248c, 0x4340, 0xbf7b, 0x4257, 0x4328, 0xba28, 0x04e8, 0x42c7, 0x4207, 0x1d28, 0x40d1, 0x2167, 0x43a3, 0x284d, 0xbf05, 0xb2a2, 0x1605, 0xb276, 0x412d, 0x40f3, 0x378b, 0xba41, 0xbaf7, 0x42a3, 0x425d, 0x45b4, 0xbf9b, 0xa2c2, 0xba13, 0x410c, 0x45da, 0x4372, 0x4228, 0x0a0b, 0x4550, 0x4295, 0x06c1, 0xb2cd, 0x1487, 0x31fb, 0xbac1, 0xb200, 0xba13, 0x2c7f, 0x4449, 0x42f8, 0xbaf4, 0xb2b4, 0x24b1, 0x4166, 0xba16, 0xbf7c, 0x4171, 0x4311, 0x32bc, 0x4572, 0x3a43, 0x4690, 0xb2b3, 0xb037, 0x41c0, 0x4198, 0x4459, 0x41e3, 0x42e3, 0x2d4e, 0x05da, 0xb20a, 0x1cfd, 0xb28f, 0xb080, 0xa6d7, 0x4268, 0x243a, 0x43b9, 0xbf27, 0x14b0, 0x2410, 0xba40, 0x1f3a, 0x4008, 0xbfd9, 0x1b4b, 0x40a4, 0x2a6f, 0x14aa, 0x407b, 0xba5c, 0x41ec, 0x4245, 0x1b03, 0x4315, 0x4139, 0x2c74, 0xbfc0, 0x1806, 0x0ae6, 0xbae8, 0x3d2f, 0xb244, 0x0bac, 0xb245, 0x4304, 0xbf90, 0xbf9a, 0xb218, 0x408a, 0x42e1, 0x0fa0, 0xb06d, 0x43d5, 0x41b2, 0xb20e, 0x222f, 0xbfd3, 0x3289, 0xb2d2, 0x45e1, 0xb0ab, 0xbf8b, 0xba5c, 0x41a9, 0x41e2, 0x42ee, 0x446d, 0x41d9, 0x4362, 0x4265, 0xba7d, 0x43c5, 0x2cce, 0xb284, 0xb2fb, 0x40fa, 0x3ddf, 0x4188, 0xb251, 0xba1d, 0xbf26, 0x424b, 0x4566, 0x14d4, 0x3784, 0xbf70, 0x4225, 0xb22b, 0x1f12, 0x4022, 0xb061, 0x4145, 0x42d3, 0xb2c9, 0x2199, 0x42e5, 0x1a4d, 0x25c8, 0xbf56, 0x401e, 0x1c37, 0xba38, 0x1498, 0x4052, 0x4181, 0xba67, 0x41ab, 0x1bc7, 0x43d8, 0x4379, 0x42d0, 0x4211, 0x3a14, 0x00c0, 0x4068, 0x41dd, 0x4138, 0x40cb, 0xb21f, 0xb0c9, 0xba5c, 0x4004, 0xbfd5, 0x43bf, 0x4344, 0x06d0, 0x40ea, 0x2d6a, 0xbfe4, 0x42bc, 0x40a0, 0x40c6, 0xaa16, 0x42bd, 0x421a, 0xb2d7, 0x41ca, 0xb016, 0x43ef, 0xae2d, 0x4341, 0xb0c0, 0xba1b, 0x40c7, 0xb0cd, 0x3c18, 0x2ab4, 0x41d2, 0x0506, 0x2144, 0x183c, 0xba30, 0xb266, 0xb2e5, 0xbf90, 0xbf4a, 0xa979, 0x4300, 0xb26e, 0xbfd0, 0xba66, 0x13dc, 0xb28e, 0x1a28, 0x4158, 0x43ab, 0x4075, 0x40f2, 0x4593, 0x198f, 0x38c5, 0x4061, 0xbf23, 0x3e56, 0xa0ef, 0xba50, 0x4433, 0xba0b, 0xad1b, 0x1df6, 0xbad9, 0xb253, 0x40cc, 0x424c, 0x1a18, 0x1b36, 0x186b, 0xbfdf, 0x4167, 0x0075, 0x431c, 0x400c, 0x3e22, 0x434d, 0xba3b, 0x4388, 0x2f78, 0x407f, 0x4254, 0x1610, 0xba4b, 0x43f8, 0x4089, 0xb231, 0x4050, 0xb29d, 0x0c5a, 0x3afd, 0x42e8, 0x1c7a, 0xb241, 0x0cad, 0xb268, 0xbfc0, 0xbf6a, 0xb2cc, 0x37b0, 0x46eb, 0x4129, 0x1e5b, 0xb216, 0x0748, 0x41d1, 0x4308, 0x45ac, 0xb2a5, 0x43d5, 0x4049, 0x4076, 0xb28d, 0x2611, 0xb26d, 0xba2e, 0x34d4, 0xbafb, 0x3761, 0x417a, 0x4156, 0x4575, 0xb210, 0xbf4d, 0x42ba, 0xba26, 0xa039, 0x422c, 0x4357, 0xaee4, 0x41ab, 0x43eb, 0x1d12, 0x434c, 0x1818, 0x0a20, 0xb208, 0xb2a2, 0x4187, 0xba69, 0x43de, 0xa5ce, 0xbfac, 0xb0db, 0xb274, 0x4347, 0x4151, 0x1f64, 0x1c6b, 0x1db7, 0xbad5, 0x1e0a, 0x198e, 0x416f, 0xbacf, 0x42fe, 0x4173, 0x183b, 0x44f4, 0x4075, 0x43a0, 0xbaf0, 0xbf41, 0x1e71, 0x39a2, 0x1dc5, 0xb212, 0x0159, 0xbaea, 0x1fdd, 0x42d7, 0x4453, 0xb2dc, 0x0817, 0x4698, 0xba22, 0xbf58, 0x04db, 0xb216, 0x1b55, 0x42e8, 0xba7c, 0xbf88, 0xa1f0, 0xba12, 0xb21f, 0x2628, 0x4091, 0x4554, 0x0c86, 0x4098, 0xb0fb, 0x43e1, 0xbaed, 0xb2c1, 0x1f65, 0x4019, 0x4365, 0x0c81, 0x40dd, 0xaf49, 0x40f2, 0x40a3, 0xba56, 0x4378, 0xa9c0, 0xbf81, 0xba7f, 0x404b, 0xaec3, 0x3eec, 0xbadf, 0xacb7, 0x434a, 0xba10, 0xbaeb, 0x1ea3, 0xbf19, 0x413d, 0xb07a, 0x1d45, 0x42ff, 0xb08d, 0x1a6b, 0xa7c4, 0xa3d1, 0x40bb, 0xba7f, 0x460a, 0x45cb, 0x4490, 0xb097, 0x40f8, 0x00c0, 0x3d1a, 0x42bb, 0x30ae, 0x1c4f, 0xad13, 0xbafd, 0x40c3, 0x40e1, 0x4046, 0x434e, 0xbf3a, 0x185c, 0x409a, 0x26fc, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6e009d47, 0x4404ee01, 0xc475426e, 0xc7651e4f, 0x99397e2c, 0xe2311d1e, 0x13b3b0d5, 0x94ee1dcc, 0x8a96e390, 0xfb8d253a, 0x3cd58f7e, 0xf938ad79, 0x61646a13, 0x14d0ae7f, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0x000000ae, 0x00000000, 0x14d0af83, 0x00000000, 0x00000000, 0xffff84af, 0x00000000, 0x14d0af84, 0x14d0b083, 0x00001344, 0x00000000, 0xf938ad79, 0x61646a13, 0x14d0addb, 0x00000000, 0x400001d0 }, + Instructions = [0x1971, 0x439c, 0x401d, 0x1924, 0x1fc0, 0x3352, 0xba14, 0x4306, 0x432b, 0xb268, 0x1c6f, 0x4158, 0x4633, 0x37a0, 0xbfbe, 0x4286, 0x410c, 0x41c5, 0xb209, 0xb2f5, 0xa3dd, 0x40f7, 0xb087, 0xae09, 0xb2de, 0xba4c, 0x4349, 0xa6c5, 0x436c, 0xb05c, 0x4575, 0x2190, 0xbf3c, 0x1ed6, 0xa383, 0x4192, 0xbf60, 0xba2a, 0x36db, 0x4116, 0x2df4, 0x41a7, 0x299f, 0x406c, 0xa653, 0xbaca, 0xb282, 0xbac8, 0x40f7, 0x4669, 0xb274, 0xb022, 0xb2eb, 0x0ccf, 0x41b7, 0x20ed, 0x047a, 0xb083, 0xbf33, 0xb2bf, 0xa78d, 0x3ae6, 0x3882, 0xba1b, 0x455f, 0xbaeb, 0xaa73, 0x435d, 0xb201, 0x42d4, 0x4183, 0x415e, 0xba41, 0x41a3, 0xbfa5, 0x43ac, 0x4255, 0x1b2d, 0x422c, 0x4217, 0xbafe, 0x420c, 0x43e3, 0x40e3, 0x4199, 0x42fc, 0xbf4c, 0x41c6, 0x1001, 0x4674, 0x41d0, 0x404c, 0x4193, 0x4301, 0x16cb, 0x2399, 0x3509, 0x419b, 0x43d0, 0x18c3, 0x43d3, 0x40b9, 0x43ed, 0x137b, 0x40be, 0x2372, 0x3e64, 0x0ccb, 0xbf9b, 0x41a1, 0x26ed, 0x4359, 0x1326, 0xa32a, 0x4364, 0x3046, 0x410d, 0x416d, 0x3711, 0x41db, 0x40b5, 0x429f, 0x43a8, 0x42d0, 0xb2f9, 0x0758, 0xadfe, 0x421e, 0xb247, 0x2f6a, 0xbf0e, 0xb2e4, 0x2aad, 0x43a4, 0xb2d4, 0x439a, 0x4206, 0xbad9, 0x4153, 0x0dc3, 0xb217, 0xa3ea, 0x1a60, 0x1768, 0x4555, 0x40f9, 0x4205, 0x463d, 0x3e44, 0x4016, 0x3638, 0xba58, 0xb2c2, 0xba3a, 0xba04, 0x4224, 0x4359, 0x0001, 0x422a, 0xbf3c, 0x4342, 0x1b5e, 0xb22b, 0xb2ef, 0x36ae, 0xb204, 0xbfb0, 0x1858, 0x41da, 0x241b, 0xb04f, 0xb28d, 0xba31, 0x42f0, 0x42e7, 0x4028, 0x1dde, 0x45cd, 0xba2a, 0x40c0, 0x18b0, 0x0b4c, 0xbfbd, 0x1b99, 0x0418, 0x4239, 0x3b1d, 0x23c6, 0xba4f, 0x1f5d, 0xb2b0, 0xbac5, 0x1c2a, 0x45f1, 0x422b, 0x43bd, 0xa17c, 0xbf33, 0xba74, 0xb235, 0x0c06, 0x43b2, 0x40b3, 0xb0d2, 0xbf39, 0x4182, 0x46d9, 0xb2f1, 0x4271, 0x43e5, 0xb2b0, 0x41de, 0xbf00, 0x317f, 0x41e1, 0xa9e4, 0x18b0, 0x2a87, 0x4151, 0x43a1, 0x4179, 0x4204, 0x42c1, 0x44f8, 0x4389, 0x40f0, 0x2442, 0x43af, 0xbfa8, 0x3cac, 0x4365, 0x2149, 0x41ff, 0x443f, 0x4190, 0xb0ba, 0x216f, 0xb225, 0xb248, 0xb0f5, 0xba3e, 0x0b19, 0x1bc6, 0x41a7, 0xb0d7, 0xb2dc, 0xb20b, 0x1da9, 0x432d, 0x4293, 0x4035, 0x01ab, 0x2725, 0xbf93, 0xb264, 0x42b6, 0xb074, 0xb2db, 0xb2b6, 0x1dd3, 0x40fc, 0xba52, 0x4301, 0x1e30, 0xba78, 0x413c, 0xbfab, 0xa981, 0x414a, 0x439f, 0x4015, 0x0769, 0xb23d, 0x43de, 0x2bb2, 0xba4a, 0x4261, 0x412c, 0xbf9c, 0x4135, 0xb2ce, 0x4224, 0x1fcf, 0x42bc, 0x18cd, 0x1b98, 0x2bdb, 0x3605, 0x43df, 0xa64c, 0xbf9a, 0x32a3, 0x43ec, 0xb2d2, 0x43a1, 0xba7d, 0x43ee, 0x0e94, 0x44c9, 0x01d6, 0x4140, 0x2921, 0x424d, 0xb0a4, 0x0caa, 0xbf85, 0x41d4, 0x19a8, 0x0dc9, 0x4161, 0x1b35, 0x43ee, 0xa171, 0x4477, 0x4385, 0xba16, 0x420f, 0x3013, 0x0573, 0x4281, 0x3bf9, 0x181a, 0xb0bd, 0xb046, 0x3254, 0x4654, 0x43fd, 0xba34, 0x42b0, 0x4215, 0xb022, 0x42cf, 0x4225, 0x4281, 0xbf0e, 0x4021, 0x4217, 0x4351, 0x4283, 0xb2d9, 0xb223, 0xbfe0, 0x4209, 0xbfb6, 0xbaeb, 0x078c, 0xb21e, 0x1bc3, 0x2e6e, 0x43d9, 0x41c8, 0x40e0, 0x4361, 0x4225, 0x4078, 0x37fa, 0xb065, 0x4390, 0x40bd, 0x418c, 0xbfcf, 0xba18, 0x40e6, 0x4039, 0xbf00, 0x1bf0, 0x441a, 0x4345, 0x42d6, 0x2c06, 0x238c, 0x4284, 0x413b, 0x4295, 0xb291, 0x21de, 0xaabe, 0xba14, 0x4253, 0x3c60, 0xb29b, 0xbf00, 0xbfbc, 0x4081, 0xb2d5, 0xb2f1, 0x4253, 0x04c1, 0xb055, 0x1f26, 0x1d48, 0xbf88, 0x401d, 0x2150, 0x40ff, 0x08dd, 0xbf45, 0x18ce, 0x4341, 0x4217, 0x40b9, 0x09c6, 0x43a1, 0xbac8, 0xb28f, 0x420c, 0x41ea, 0xb2f7, 0x0e48, 0xa96a, 0xb29e, 0x0631, 0x3cc9, 0x43cb, 0x3771, 0xb23c, 0x46f9, 0xa882, 0xb2d3, 0xba10, 0x4375, 0x17f2, 0x03ab, 0xb2da, 0x43b0, 0x43ef, 0xbfbb, 0x2f20, 0xb051, 0x1ffa, 0x42c9, 0x2d15, 0x2157, 0xa778, 0x432c, 0x421a, 0x4430, 0x43f6, 0x4271, 0x436f, 0xbf62, 0xbac5, 0x4288, 0x24a8, 0x4361, 0xad27, 0x433f, 0x3a4e, 0xba0e, 0x41ed, 0xb2b6, 0xb27a, 0xbf53, 0xa105, 0x1f58, 0xa2f2, 0x43ff, 0xb074, 0x1ac5, 0x421e, 0x4241, 0xb2b7, 0x2ad2, 0x40d9, 0xa5fd, 0x25d8, 0xb2b6, 0xa3c8, 0xb2bf, 0xb226, 0xba6d, 0x07ed, 0x43db, 0x4261, 0x40e7, 0x41a5, 0x4619, 0x3e15, 0xb25a, 0x427f, 0xbff0, 0x1a2f, 0xbfd6, 0xbac4, 0x42ba, 0x0922, 0x11a7, 0x439f, 0x44d0, 0x43ff, 0x3c72, 0xba33, 0x4386, 0x1f3a, 0x40c0, 0x418f, 0x411a, 0x4212, 0x4110, 0x428f, 0x447c, 0xb097, 0xbf77, 0x42b7, 0x0621, 0xbacb, 0x46ca, 0x43af, 0x01f4, 0xba26, 0x1815, 0x41e1, 0x4150, 0x4171, 0x43b4, 0xa937, 0x412f, 0x42df, 0x429a, 0x415e, 0x431c, 0xad19, 0x4282, 0x4073, 0xbf87, 0x43d0, 0xba54, 0x2db6, 0x4350, 0x4237, 0x4164, 0xbae5, 0xb22b, 0x0a33, 0x43f8, 0xbf33, 0x40f2, 0xb2bc, 0xb2a4, 0x40e6, 0x41c9, 0x326c, 0x41c8, 0x42e9, 0x42af, 0xba3b, 0x359d, 0x4109, 0x4028, 0xb269, 0xba16, 0xb2fc, 0x3acb, 0x4063, 0xbf16, 0x09a3, 0xb2d5, 0xba22, 0x4142, 0xbf8b, 0x1c3c, 0x3e0e, 0xb29c, 0x1164, 0x331c, 0x1ce8, 0xbff0, 0x43d7, 0x4137, 0x429b, 0x18a9, 0x4193, 0xb0cc, 0xba49, 0xba38, 0x411f, 0xb205, 0xbfa6, 0x4173, 0x4142, 0x43e0, 0x4089, 0x182e, 0xba01, 0x41ea, 0x3a41, 0x2930, 0x4025, 0x0594, 0x1556, 0x0b43, 0x46f2, 0x248c, 0x4340, 0xbf7b, 0x4257, 0x4328, 0xba28, 0x04e8, 0x42c7, 0x4207, 0x1d28, 0x40d1, 0x2167, 0x43a3, 0x284d, 0xbf05, 0xb2a2, 0x1605, 0xb276, 0x412d, 0x40f3, 0x378b, 0xba41, 0xbaf7, 0x42a3, 0x425d, 0x45b4, 0xbf9b, 0xa2c2, 0xba13, 0x410c, 0x45da, 0x4372, 0x4228, 0x0a0b, 0x4550, 0x4295, 0x06c1, 0xb2cd, 0x1487, 0x31fb, 0xbac1, 0xb200, 0xba13, 0x2c7f, 0x4449, 0x42f8, 0xbaf4, 0xb2b4, 0x24b1, 0x4166, 0xba16, 0xbf7c, 0x4171, 0x4311, 0x32bc, 0x4572, 0x3a43, 0x4690, 0xb2b3, 0xb037, 0x41c0, 0x4198, 0x4459, 0x41e3, 0x42e3, 0x2d4e, 0x05da, 0xb20a, 0x1cfd, 0xb28f, 0xb080, 0xa6d7, 0x4268, 0x243a, 0x43b9, 0xbf27, 0x14b0, 0x2410, 0xba40, 0x1f3a, 0x4008, 0xbfd9, 0x1b4b, 0x40a4, 0x2a6f, 0x14aa, 0x407b, 0xba5c, 0x41ec, 0x4245, 0x1b03, 0x4315, 0x4139, 0x2c74, 0xbfc0, 0x1806, 0x0ae6, 0xbae8, 0x3d2f, 0xb244, 0x0bac, 0xb245, 0x4304, 0xbf90, 0xbf9a, 0xb218, 0x408a, 0x42e1, 0x0fa0, 0xb06d, 0x43d5, 0x41b2, 0xb20e, 0x222f, 0xbfd3, 0x3289, 0xb2d2, 0x45e1, 0xb0ab, 0xbf8b, 0xba5c, 0x41a9, 0x41e2, 0x42ee, 0x446d, 0x41d9, 0x4362, 0x4265, 0xba7d, 0x43c5, 0x2cce, 0xb284, 0xb2fb, 0x40fa, 0x3ddf, 0x4188, 0xb251, 0xba1d, 0xbf26, 0x424b, 0x4566, 0x14d4, 0x3784, 0xbf70, 0x4225, 0xb22b, 0x1f12, 0x4022, 0xb061, 0x4145, 0x42d3, 0xb2c9, 0x2199, 0x42e5, 0x1a4d, 0x25c8, 0xbf56, 0x401e, 0x1c37, 0xba38, 0x1498, 0x4052, 0x4181, 0xba67, 0x41ab, 0x1bc7, 0x43d8, 0x4379, 0x42d0, 0x4211, 0x3a14, 0x00c0, 0x4068, 0x41dd, 0x4138, 0x40cb, 0xb21f, 0xb0c9, 0xba5c, 0x4004, 0xbfd5, 0x43bf, 0x4344, 0x06d0, 0x40ea, 0x2d6a, 0xbfe4, 0x42bc, 0x40a0, 0x40c6, 0xaa16, 0x42bd, 0x421a, 0xb2d7, 0x41ca, 0xb016, 0x43ef, 0xae2d, 0x4341, 0xb0c0, 0xba1b, 0x40c7, 0xb0cd, 0x3c18, 0x2ab4, 0x41d2, 0x0506, 0x2144, 0x183c, 0xba30, 0xb266, 0xb2e5, 0xbf90, 0xbf4a, 0xa979, 0x4300, 0xb26e, 0xbfd0, 0xba66, 0x13dc, 0xb28e, 0x1a28, 0x4158, 0x43ab, 0x4075, 0x40f2, 0x4593, 0x198f, 0x38c5, 0x4061, 0xbf23, 0x3e56, 0xa0ef, 0xba50, 0x4433, 0xba0b, 0xad1b, 0x1df6, 0xbad9, 0xb253, 0x40cc, 0x424c, 0x1a18, 0x1b36, 0x186b, 0xbfdf, 0x4167, 0x0075, 0x431c, 0x400c, 0x3e22, 0x434d, 0xba3b, 0x4388, 0x2f78, 0x407f, 0x4254, 0x1610, 0xba4b, 0x43f8, 0x4089, 0xb231, 0x4050, 0xb29d, 0x0c5a, 0x3afd, 0x42e8, 0x1c7a, 0xb241, 0x0cad, 0xb268, 0xbfc0, 0xbf6a, 0xb2cc, 0x37b0, 0x46eb, 0x4129, 0x1e5b, 0xb216, 0x0748, 0x41d1, 0x4308, 0x45ac, 0xb2a5, 0x43d5, 0x4049, 0x4076, 0xb28d, 0x2611, 0xb26d, 0xba2e, 0x34d4, 0xbafb, 0x3761, 0x417a, 0x4156, 0x4575, 0xb210, 0xbf4d, 0x42ba, 0xba26, 0xa039, 0x422c, 0x4357, 0xaee4, 0x41ab, 0x43eb, 0x1d12, 0x434c, 0x1818, 0x0a20, 0xb208, 0xb2a2, 0x4187, 0xba69, 0x43de, 0xa5ce, 0xbfac, 0xb0db, 0xb274, 0x4347, 0x4151, 0x1f64, 0x1c6b, 0x1db7, 0xbad5, 0x1e0a, 0x198e, 0x416f, 0xbacf, 0x42fe, 0x4173, 0x183b, 0x44f4, 0x4075, 0x43a0, 0xbaf0, 0xbf41, 0x1e71, 0x39a2, 0x1dc5, 0xb212, 0x0159, 0xbaea, 0x1fdd, 0x42d7, 0x4453, 0xb2dc, 0x0817, 0x4698, 0xba22, 0xbf58, 0x04db, 0xb216, 0x1b55, 0x42e8, 0xba7c, 0xbf88, 0xa1f0, 0xba12, 0xb21f, 0x2628, 0x4091, 0x4554, 0x0c86, 0x4098, 0xb0fb, 0x43e1, 0xbaed, 0xb2c1, 0x1f65, 0x4019, 0x4365, 0x0c81, 0x40dd, 0xaf49, 0x40f2, 0x40a3, 0xba56, 0x4378, 0xa9c0, 0xbf81, 0xba7f, 0x404b, 0xaec3, 0x3eec, 0xbadf, 0xacb7, 0x434a, 0xba10, 0xbaeb, 0x1ea3, 0xbf19, 0x413d, 0xb07a, 0x1d45, 0x42ff, 0xb08d, 0x1a6b, 0xa7c4, 0xa3d1, 0x40bb, 0xba7f, 0x460a, 0x45cb, 0x4490, 0xb097, 0x40f8, 0x00c0, 0x3d1a, 0x42bb, 0x30ae, 0x1c4f, 0xad13, 0xbafd, 0x40c3, 0x40e1, 0x4046, 0x434e, 0xbf3a, 0x185c, 0x409a, 0x26fc, 0x4770, 0xe7fe + ], + StartRegs = [0x6e009d47, 0x4404ee01, 0xc475426e, 0xc7651e4f, 0x99397e2c, 0xe2311d1e, 0x13b3b0d5, 0x94ee1dcc, 0x8a96e390, 0xfb8d253a, 0x3cd58f7e, 0xf938ad79, 0x61646a13, 0x14d0ae7f, 0x00000000, 0x100001f0 + ], + FinalRegs = [0x000000ae, 0x00000000, 0x14d0af83, 0x00000000, 0x00000000, 0xffff84af, 0x00000000, 0x14d0af84, 0x14d0b083, 0x00001344, 0x00000000, 0xf938ad79, 0x61646a13, 0x14d0addb, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0xb08d, 0xba58, 0x1eea, 0x4241, 0x439f, 0x27f1, 0x40eb, 0xb27f, 0x1bed, 0x407c, 0x4327, 0x41ea, 0x27fd, 0x410a, 0xbf6d, 0x4038, 0xa806, 0xba0f, 0xb265, 0xb22d, 0x1b44, 0x1c14, 0x431d, 0xaad5, 0x3ee7, 0x4034, 0x2d0b, 0x2dcc, 0x4334, 0x3e1c, 0xbf00, 0x11eb, 0xb2db, 0xa20c, 0xb058, 0xbfab, 0x4390, 0xb042, 0xb051, 0x2fcb, 0x415c, 0x0a57, 0x408c, 0x1d6e, 0xa072, 0xba55, 0x2581, 0x447b, 0x43a5, 0x440b, 0x1e63, 0xb2cc, 0xa334, 0xba69, 0xabd9, 0x1d2d, 0xbf62, 0x4140, 0x024e, 0xb2ac, 0x40ac, 0x4567, 0xba10, 0x1eb6, 0x3178, 0x0a5f, 0xb2bc, 0x40b0, 0xbfd4, 0x4285, 0x0c35, 0xb21e, 0xbacd, 0x1a41, 0x3ab5, 0x117a, 0x4469, 0xb2a3, 0x2dc3, 0x416d, 0x4541, 0xba7f, 0x1a93, 0x4389, 0xbf57, 0x301f, 0x4320, 0x28ae, 0x4020, 0xbac7, 0x1192, 0xbf45, 0x42ba, 0x43c3, 0x42b2, 0x0233, 0x1fa2, 0xb0b2, 0x41f2, 0xbaf6, 0xbf92, 0x0ec4, 0xb28d, 0x406b, 0xbff0, 0x403f, 0xba61, 0xb204, 0xbaeb, 0xba0b, 0x402a, 0x1ee1, 0x431b, 0x4331, 0x2513, 0x2108, 0xbf62, 0x4257, 0xa533, 0x3fd8, 0x42c7, 0x2195, 0xb2df, 0x42ab, 0x2830, 0x4373, 0xb286, 0x3afb, 0x42a2, 0x2e11, 0x4188, 0xb0c4, 0xba0e, 0x1d2e, 0x4158, 0xa422, 0x1dec, 0x417a, 0xb239, 0x43c5, 0x4074, 0xbf1c, 0x459e, 0x417c, 0x1b2b, 0xb2d6, 0xb296, 0x43ca, 0xbfd6, 0x449d, 0x23aa, 0x4198, 0xb267, 0xa248, 0xbf00, 0x4368, 0xb04a, 0x0734, 0x1ae6, 0x42d9, 0x414f, 0x1ed1, 0x4291, 0x1cde, 0xba3d, 0x4103, 0xa7df, 0x4586, 0xb257, 0x2302, 0x46a2, 0x43e6, 0xba41, 0x4128, 0xb2dc, 0x268d, 0xb235, 0xbfb7, 0x183a, 0x432d, 0xb0be, 0x40c4, 0x46c2, 0x42ae, 0x1cef, 0x16a2, 0x432a, 0x034c, 0xa8cc, 0x1aa9, 0x4635, 0x33d5, 0x42be, 0xb225, 0x4054, 0x1856, 0xb02b, 0x4683, 0xbfd6, 0x3dcb, 0x45ad, 0x4149, 0x42ec, 0xa5a3, 0xbfb0, 0xb04d, 0xb266, 0x405c, 0x40ef, 0xb23d, 0xb2fe, 0x432d, 0x41fe, 0x43ad, 0xb268, 0xa0d6, 0x41d9, 0x023a, 0xb291, 0x4397, 0xb2fb, 0x035e, 0xbf3f, 0x43aa, 0x4371, 0x3540, 0x4013, 0x42bc, 0xba4d, 0xb04e, 0x4156, 0x43be, 0x40b7, 0x40a9, 0x409c, 0x4288, 0x415e, 0x0f3e, 0xb009, 0xbfd7, 0xb0d2, 0x4263, 0x3228, 0x26dd, 0x1b78, 0x4170, 0x408e, 0xbfc7, 0x1ed8, 0x459d, 0x4199, 0x41af, 0x4340, 0x434a, 0x43a6, 0xbfc1, 0x2986, 0xbadc, 0x1d21, 0x00cc, 0x42e0, 0xae51, 0xa7dc, 0xb24e, 0x42fb, 0x1ba5, 0x1a40, 0x1ce0, 0x1e2b, 0x355f, 0x4357, 0x40c2, 0xba61, 0x4182, 0x4383, 0x430e, 0x1593, 0x41d6, 0xb0fa, 0x410f, 0xb21c, 0x4075, 0xbf8f, 0xb2c4, 0x4285, 0x4003, 0x1281, 0x414a, 0x408b, 0x403e, 0x2363, 0x412a, 0x430e, 0xbf45, 0x2282, 0xb24a, 0x330a, 0x4145, 0x4285, 0x43ed, 0x4031, 0x18ea, 0x4227, 0xbf80, 0x2468, 0xba52, 0x41ce, 0x4659, 0x4095, 0xb28c, 0xa9d4, 0x4439, 0x1b5b, 0x1349, 0x41d5, 0xbac3, 0xb09a, 0xba48, 0x4216, 0xbfa1, 0x0eec, 0x205a, 0x1cee, 0x44f9, 0x43c9, 0x0ee8, 0x0e50, 0x4258, 0x4029, 0x403f, 0xb226, 0x42bc, 0x1ba6, 0xbf48, 0x42a7, 0x40f2, 0x4260, 0x4499, 0xbfd3, 0x38e7, 0x40f2, 0x2087, 0x4189, 0x2243, 0x4111, 0x3fa8, 0x40bb, 0xb0be, 0x4026, 0x1b74, 0xbf0e, 0xb047, 0xb20e, 0x1961, 0x4241, 0x4063, 0xba4f, 0x40dd, 0x411b, 0xafbd, 0x39a3, 0x4254, 0x4262, 0x41e0, 0xbacd, 0x2264, 0x40bc, 0xa651, 0xb20c, 0xba0d, 0xb261, 0x4484, 0x432a, 0xbfdf, 0xb01a, 0xb20e, 0x2256, 0xbac1, 0x1ac5, 0xb2eb, 0xb2ee, 0x2927, 0x009a, 0x4291, 0x3575, 0xb21a, 0xb2d1, 0x1a67, 0xbaff, 0x4115, 0x42ef, 0xbf26, 0x0fa4, 0x415d, 0xb253, 0x010c, 0xb0aa, 0x2d7b, 0xb020, 0xb0da, 0xae00, 0x2f87, 0xb095, 0x0ca0, 0x42f8, 0x4037, 0x1c6f, 0x436b, 0x42b4, 0x1d3d, 0x3251, 0x43ff, 0x411a, 0x4394, 0xbf71, 0x1ac3, 0x42b2, 0x37b3, 0x3db9, 0x4388, 0xb080, 0x4314, 0x406c, 0x40ad, 0xb0ac, 0xb047, 0xbaff, 0x4091, 0x4372, 0xb29b, 0x4119, 0x45ab, 0x405d, 0xbf95, 0x3f6d, 0x1d73, 0x1896, 0x4074, 0xbad7, 0x211b, 0xa48f, 0x436d, 0x4181, 0x1e91, 0x1d3a, 0x42d0, 0xb25b, 0x43c6, 0xba43, 0xb284, 0xbfe0, 0x1eed, 0x0218, 0x40a2, 0x42a8, 0x40a7, 0x1c26, 0xbf00, 0xbf38, 0x447c, 0xbae0, 0x40d9, 0x1c9a, 0x42ec, 0x43f7, 0x386f, 0xbf59, 0x189b, 0x4037, 0x4323, 0xb281, 0xba6c, 0x1a55, 0xb2a2, 0x4218, 0x41d1, 0x4215, 0x383f, 0x429f, 0xbf89, 0x2d17, 0x46b9, 0xb0d1, 0xbf70, 0xba01, 0xbf2e, 0x1f89, 0x45a3, 0xb07c, 0xadd1, 0x42dd, 0x400c, 0x1adc, 0x43b9, 0x4072, 0x418c, 0x0a53, 0xad90, 0x1f17, 0x418f, 0xbacf, 0x1fc4, 0xa559, 0xba37, 0x1b9c, 0x461c, 0x42c8, 0x401e, 0x1971, 0x43b5, 0xba29, 0xa499, 0x4366, 0xbf7d, 0x1b05, 0xbadb, 0xbad4, 0x1b87, 0x43f7, 0x45b4, 0xa2ab, 0x43a8, 0xb08b, 0x18c0, 0xb2fe, 0x435d, 0x0129, 0x4200, 0x43fa, 0x33ac, 0xb2f5, 0x411c, 0x423b, 0x418e, 0x3876, 0xb22f, 0xbad0, 0x4464, 0xbf0e, 0x24f1, 0xb21c, 0x42dc, 0x42c1, 0x40f5, 0xa9ad, 0x4283, 0xb2a1, 0x432e, 0xbfb0, 0x428b, 0x42d3, 0x08fd, 0x0f6c, 0x437c, 0x0f32, 0x43ea, 0x0768, 0x4192, 0x4001, 0x01af, 0x22ab, 0x43df, 0x41d1, 0xa87c, 0x1cc1, 0x0e0e, 0xbf55, 0x1b17, 0x4265, 0xb0e6, 0x4359, 0x43ca, 0x43bd, 0x40ff, 0x4110, 0x1cf1, 0x4037, 0xb254, 0x1957, 0xbf41, 0x0fec, 0x45b3, 0xb21a, 0x41e8, 0xb21e, 0x417f, 0xaf50, 0x0c9d, 0x4395, 0x4122, 0x43ef, 0xb01c, 0x42fa, 0x41da, 0x43a3, 0x41c8, 0x3d6b, 0xb06d, 0x41c4, 0xba07, 0x391d, 0x4214, 0xb2f7, 0x44dc, 0xa011, 0x42fa, 0x4483, 0x1ddc, 0xbf7a, 0xb24d, 0x4270, 0x269c, 0xba2a, 0x435a, 0xb29d, 0x1ce6, 0x1852, 0x093e, 0xb0ed, 0xbaf1, 0x1d00, 0x02b5, 0x17ec, 0x42d8, 0xba16, 0x4624, 0x26af, 0x41b1, 0x1631, 0xb2fe, 0x4361, 0x1058, 0x41db, 0x1992, 0xbf1e, 0x41d8, 0x40c2, 0x43a3, 0x42ba, 0x41b7, 0x1d22, 0x43d5, 0xb213, 0x0005, 0x4004, 0x4171, 0x4038, 0x4364, 0x3420, 0x4135, 0x445c, 0x42f6, 0x4282, 0x4110, 0xbf5a, 0x3781, 0xb2f5, 0x40f8, 0xb2bc, 0xb264, 0x4591, 0x1812, 0xb06d, 0xba2f, 0xbf43, 0xa219, 0x46c0, 0xb2f3, 0x40f0, 0xbf5d, 0xbae7, 0xa3f0, 0x423e, 0xb246, 0x36e6, 0x402e, 0x400e, 0xb2af, 0xbfde, 0xba53, 0x085b, 0xab40, 0x43ac, 0x431a, 0x2778, 0x1da4, 0xb029, 0x14e4, 0x439f, 0x15ca, 0xa275, 0x1f63, 0x41ad, 0x3dee, 0xbf97, 0xbff0, 0x40e4, 0x448d, 0xb2d7, 0xbf8a, 0x41e5, 0xba2e, 0x2351, 0x1b2d, 0xbfe0, 0x4261, 0x414d, 0xbf55, 0xb28e, 0x1bb7, 0x439d, 0x41f4, 0x04a2, 0x040e, 0xb2a2, 0x4313, 0x1df1, 0xbac7, 0x41cc, 0x41d6, 0xbfb5, 0x432e, 0x42c0, 0x1cdd, 0x1ccb, 0xbf07, 0xb052, 0x1ead, 0x4281, 0x431d, 0x4365, 0x4206, 0x1b51, 0x43b9, 0x16d4, 0x0878, 0xbf89, 0x40d5, 0xa72b, 0xbad8, 0x3d59, 0x43b9, 0x42ff, 0x454d, 0xbae8, 0x11ea, 0xb2d7, 0x1455, 0xb2bc, 0xb29d, 0xba69, 0x461c, 0x19b1, 0xb282, 0xb054, 0x08a5, 0x45cc, 0x40ec, 0xbf9b, 0x0e9d, 0x1b02, 0x4099, 0x4080, 0x4322, 0x1313, 0x236c, 0x19cb, 0xa05e, 0x4350, 0x4299, 0xba45, 0x1afa, 0x1a45, 0x41f1, 0x058f, 0x18aa, 0x4190, 0xb0b6, 0xbfc8, 0xba6c, 0xb019, 0x4260, 0x40cb, 0x40e2, 0x1c47, 0xae93, 0x340d, 0x0e55, 0xba34, 0xaacd, 0xbfae, 0x416d, 0xb0ef, 0x4056, 0xba07, 0x41eb, 0x4490, 0xba61, 0x402c, 0x469a, 0x3dbe, 0x4015, 0x4560, 0x439c, 0x2497, 0x3ceb, 0x4196, 0xbf2d, 0x3df9, 0xb029, 0x1aa2, 0x1f04, 0xbfb3, 0xb006, 0xb001, 0x4067, 0x405f, 0xbaf8, 0xba17, 0xbf6f, 0xb2a3, 0x32e4, 0x27be, 0x4297, 0x3a02, 0x438b, 0x422b, 0xb0bc, 0x437e, 0x1f3a, 0xba0e, 0x40fa, 0xbf00, 0xa05d, 0x4052, 0x4302, 0x3ae8, 0xb207, 0xb01a, 0x4317, 0x440d, 0x44ca, 0xbad5, 0xa59a, 0x462c, 0xb22a, 0xa1e3, 0x46c4, 0x417a, 0xbf14, 0xbaec, 0xb296, 0x43c8, 0xb213, 0x2bbb, 0xb20d, 0x0e03, 0x43a6, 0x139c, 0xba1a, 0xacf0, 0x406e, 0x0198, 0xbf60, 0x400f, 0x428d, 0x40dc, 0x1881, 0xba24, 0x4222, 0xb0f8, 0x4380, 0x4093, 0x40a8, 0x3f1c, 0xbf49, 0xb2ae, 0xb238, 0x42d6, 0xb20c, 0x24d6, 0x1e47, 0xbf1b, 0x396a, 0x1a86, 0x4184, 0x402e, 0x3053, 0xb26c, 0x0b64, 0x4109, 0x46c2, 0x424b, 0xba29, 0x1c0e, 0x41bd, 0x4459, 0xb21f, 0xb20a, 0x43af, 0x424a, 0x432c, 0xb0db, 0x41c0, 0x4454, 0xbf88, 0x37f0, 0x4129, 0x4137, 0x436b, 0x44b8, 0x4043, 0x310e, 0xba09, 0x258e, 0x40a9, 0x4205, 0x4269, 0xba39, 0xb011, 0xbf00, 0x1e11, 0xba64, 0x1c52, 0x4113, 0x2228, 0xb2bf, 0xb058, 0x2bfe, 0x430f, 0x1d24, 0xbf0e, 0x43f1, 0x4113, 0xb268, 0x189e, 0x43a1, 0xb21a, 0x4193, 0xb287, 0x346a, 0x419b, 0x42a4, 0xad64, 0x41ac, 0x459d, 0x30a2, 0x2363, 0x40ad, 0x462f, 0x459c, 0x3579, 0x298b, 0x4105, 0xbfab, 0x3d00, 0x42dd, 0x4390, 0x1c75, 0x4156, 0x1cb5, 0x4349, 0x43f2, 0x45d6, 0x40f5, 0x4328, 0x41d2, 0x4165, 0xb00f, 0x4023, 0xba7b, 0xb0d4, 0x41f4, 0xbff0, 0x4085, 0x40a0, 0xbf78, 0x1892, 0xb067, 0x4055, 0x4094, 0x42d6, 0xba35, 0x42b0, 0x41e8, 0xac04, 0x42d6, 0x41aa, 0xba6c, 0xb273, 0x1c21, 0x40cf, 0x4492, 0x46d5, 0x1965, 0x4221, 0xb2c4, 0x43e7, 0x415a, 0x432f, 0x407f, 0xbf8c, 0xb283, 0x46a5, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd25485a3, 0x65f9ab76, 0x3fac21bc, 0xb38c4c4b, 0x9ae6ab78, 0xff30a4a6, 0x01b8bb18, 0x9f4c9ead, 0xa09d6abf, 0x3ea9cd0d, 0x60d7d350, 0x04406247, 0x923282a2, 0xf465cdc9, 0x00000000, 0x300001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00280000, 0xd7ff6025, 0x00000028, 0x00000000, 0x28280000, 0x00000028, 0x00000000, 0x55f83e89, 0x3eaa3cd7, 0x2df79e85, 0xb55ae7e5, 0x55f83e88, 0x00000000, 0x00000000, 0x400001d0 }, + Instructions = [0xb08d, 0xba58, 0x1eea, 0x4241, 0x439f, 0x27f1, 0x40eb, 0xb27f, 0x1bed, 0x407c, 0x4327, 0x41ea, 0x27fd, 0x410a, 0xbf6d, 0x4038, 0xa806, 0xba0f, 0xb265, 0xb22d, 0x1b44, 0x1c14, 0x431d, 0xaad5, 0x3ee7, 0x4034, 0x2d0b, 0x2dcc, 0x4334, 0x3e1c, 0xbf00, 0x11eb, 0xb2db, 0xa20c, 0xb058, 0xbfab, 0x4390, 0xb042, 0xb051, 0x2fcb, 0x415c, 0x0a57, 0x408c, 0x1d6e, 0xa072, 0xba55, 0x2581, 0x447b, 0x43a5, 0x440b, 0x1e63, 0xb2cc, 0xa334, 0xba69, 0xabd9, 0x1d2d, 0xbf62, 0x4140, 0x024e, 0xb2ac, 0x40ac, 0x4567, 0xba10, 0x1eb6, 0x3178, 0x0a5f, 0xb2bc, 0x40b0, 0xbfd4, 0x4285, 0x0c35, 0xb21e, 0xbacd, 0x1a41, 0x3ab5, 0x117a, 0x4469, 0xb2a3, 0x2dc3, 0x416d, 0x4541, 0xba7f, 0x1a93, 0x4389, 0xbf57, 0x301f, 0x4320, 0x28ae, 0x4020, 0xbac7, 0x1192, 0xbf45, 0x42ba, 0x43c3, 0x42b2, 0x0233, 0x1fa2, 0xb0b2, 0x41f2, 0xbaf6, 0xbf92, 0x0ec4, 0xb28d, 0x406b, 0xbff0, 0x403f, 0xba61, 0xb204, 0xbaeb, 0xba0b, 0x402a, 0x1ee1, 0x431b, 0x4331, 0x2513, 0x2108, 0xbf62, 0x4257, 0xa533, 0x3fd8, 0x42c7, 0x2195, 0xb2df, 0x42ab, 0x2830, 0x4373, 0xb286, 0x3afb, 0x42a2, 0x2e11, 0x4188, 0xb0c4, 0xba0e, 0x1d2e, 0x4158, 0xa422, 0x1dec, 0x417a, 0xb239, 0x43c5, 0x4074, 0xbf1c, 0x459e, 0x417c, 0x1b2b, 0xb2d6, 0xb296, 0x43ca, 0xbfd6, 0x449d, 0x23aa, 0x4198, 0xb267, 0xa248, 0xbf00, 0x4368, 0xb04a, 0x0734, 0x1ae6, 0x42d9, 0x414f, 0x1ed1, 0x4291, 0x1cde, 0xba3d, 0x4103, 0xa7df, 0x4586, 0xb257, 0x2302, 0x46a2, 0x43e6, 0xba41, 0x4128, 0xb2dc, 0x268d, 0xb235, 0xbfb7, 0x183a, 0x432d, 0xb0be, 0x40c4, 0x46c2, 0x42ae, 0x1cef, 0x16a2, 0x432a, 0x034c, 0xa8cc, 0x1aa9, 0x4635, 0x33d5, 0x42be, 0xb225, 0x4054, 0x1856, 0xb02b, 0x4683, 0xbfd6, 0x3dcb, 0x45ad, 0x4149, 0x42ec, 0xa5a3, 0xbfb0, 0xb04d, 0xb266, 0x405c, 0x40ef, 0xb23d, 0xb2fe, 0x432d, 0x41fe, 0x43ad, 0xb268, 0xa0d6, 0x41d9, 0x023a, 0xb291, 0x4397, 0xb2fb, 0x035e, 0xbf3f, 0x43aa, 0x4371, 0x3540, 0x4013, 0x42bc, 0xba4d, 0xb04e, 0x4156, 0x43be, 0x40b7, 0x40a9, 0x409c, 0x4288, 0x415e, 0x0f3e, 0xb009, 0xbfd7, 0xb0d2, 0x4263, 0x3228, 0x26dd, 0x1b78, 0x4170, 0x408e, 0xbfc7, 0x1ed8, 0x459d, 0x4199, 0x41af, 0x4340, 0x434a, 0x43a6, 0xbfc1, 0x2986, 0xbadc, 0x1d21, 0x00cc, 0x42e0, 0xae51, 0xa7dc, 0xb24e, 0x42fb, 0x1ba5, 0x1a40, 0x1ce0, 0x1e2b, 0x355f, 0x4357, 0x40c2, 0xba61, 0x4182, 0x4383, 0x430e, 0x1593, 0x41d6, 0xb0fa, 0x410f, 0xb21c, 0x4075, 0xbf8f, 0xb2c4, 0x4285, 0x4003, 0x1281, 0x414a, 0x408b, 0x403e, 0x2363, 0x412a, 0x430e, 0xbf45, 0x2282, 0xb24a, 0x330a, 0x4145, 0x4285, 0x43ed, 0x4031, 0x18ea, 0x4227, 0xbf80, 0x2468, 0xba52, 0x41ce, 0x4659, 0x4095, 0xb28c, 0xa9d4, 0x4439, 0x1b5b, 0x1349, 0x41d5, 0xbac3, 0xb09a, 0xba48, 0x4216, 0xbfa1, 0x0eec, 0x205a, 0x1cee, 0x44f9, 0x43c9, 0x0ee8, 0x0e50, 0x4258, 0x4029, 0x403f, 0xb226, 0x42bc, 0x1ba6, 0xbf48, 0x42a7, 0x40f2, 0x4260, 0x4499, 0xbfd3, 0x38e7, 0x40f2, 0x2087, 0x4189, 0x2243, 0x4111, 0x3fa8, 0x40bb, 0xb0be, 0x4026, 0x1b74, 0xbf0e, 0xb047, 0xb20e, 0x1961, 0x4241, 0x4063, 0xba4f, 0x40dd, 0x411b, 0xafbd, 0x39a3, 0x4254, 0x4262, 0x41e0, 0xbacd, 0x2264, 0x40bc, 0xa651, 0xb20c, 0xba0d, 0xb261, 0x4484, 0x432a, 0xbfdf, 0xb01a, 0xb20e, 0x2256, 0xbac1, 0x1ac5, 0xb2eb, 0xb2ee, 0x2927, 0x009a, 0x4291, 0x3575, 0xb21a, 0xb2d1, 0x1a67, 0xbaff, 0x4115, 0x42ef, 0xbf26, 0x0fa4, 0x415d, 0xb253, 0x010c, 0xb0aa, 0x2d7b, 0xb020, 0xb0da, 0xae00, 0x2f87, 0xb095, 0x0ca0, 0x42f8, 0x4037, 0x1c6f, 0x436b, 0x42b4, 0x1d3d, 0x3251, 0x43ff, 0x411a, 0x4394, 0xbf71, 0x1ac3, 0x42b2, 0x37b3, 0x3db9, 0x4388, 0xb080, 0x4314, 0x406c, 0x40ad, 0xb0ac, 0xb047, 0xbaff, 0x4091, 0x4372, 0xb29b, 0x4119, 0x45ab, 0x405d, 0xbf95, 0x3f6d, 0x1d73, 0x1896, 0x4074, 0xbad7, 0x211b, 0xa48f, 0x436d, 0x4181, 0x1e91, 0x1d3a, 0x42d0, 0xb25b, 0x43c6, 0xba43, 0xb284, 0xbfe0, 0x1eed, 0x0218, 0x40a2, 0x42a8, 0x40a7, 0x1c26, 0xbf00, 0xbf38, 0x447c, 0xbae0, 0x40d9, 0x1c9a, 0x42ec, 0x43f7, 0x386f, 0xbf59, 0x189b, 0x4037, 0x4323, 0xb281, 0xba6c, 0x1a55, 0xb2a2, 0x4218, 0x41d1, 0x4215, 0x383f, 0x429f, 0xbf89, 0x2d17, 0x46b9, 0xb0d1, 0xbf70, 0xba01, 0xbf2e, 0x1f89, 0x45a3, 0xb07c, 0xadd1, 0x42dd, 0x400c, 0x1adc, 0x43b9, 0x4072, 0x418c, 0x0a53, 0xad90, 0x1f17, 0x418f, 0xbacf, 0x1fc4, 0xa559, 0xba37, 0x1b9c, 0x461c, 0x42c8, 0x401e, 0x1971, 0x43b5, 0xba29, 0xa499, 0x4366, 0xbf7d, 0x1b05, 0xbadb, 0xbad4, 0x1b87, 0x43f7, 0x45b4, 0xa2ab, 0x43a8, 0xb08b, 0x18c0, 0xb2fe, 0x435d, 0x0129, 0x4200, 0x43fa, 0x33ac, 0xb2f5, 0x411c, 0x423b, 0x418e, 0x3876, 0xb22f, 0xbad0, 0x4464, 0xbf0e, 0x24f1, 0xb21c, 0x42dc, 0x42c1, 0x40f5, 0xa9ad, 0x4283, 0xb2a1, 0x432e, 0xbfb0, 0x428b, 0x42d3, 0x08fd, 0x0f6c, 0x437c, 0x0f32, 0x43ea, 0x0768, 0x4192, 0x4001, 0x01af, 0x22ab, 0x43df, 0x41d1, 0xa87c, 0x1cc1, 0x0e0e, 0xbf55, 0x1b17, 0x4265, 0xb0e6, 0x4359, 0x43ca, 0x43bd, 0x40ff, 0x4110, 0x1cf1, 0x4037, 0xb254, 0x1957, 0xbf41, 0x0fec, 0x45b3, 0xb21a, 0x41e8, 0xb21e, 0x417f, 0xaf50, 0x0c9d, 0x4395, 0x4122, 0x43ef, 0xb01c, 0x42fa, 0x41da, 0x43a3, 0x41c8, 0x3d6b, 0xb06d, 0x41c4, 0xba07, 0x391d, 0x4214, 0xb2f7, 0x44dc, 0xa011, 0x42fa, 0x4483, 0x1ddc, 0xbf7a, 0xb24d, 0x4270, 0x269c, 0xba2a, 0x435a, 0xb29d, 0x1ce6, 0x1852, 0x093e, 0xb0ed, 0xbaf1, 0x1d00, 0x02b5, 0x17ec, 0x42d8, 0xba16, 0x4624, 0x26af, 0x41b1, 0x1631, 0xb2fe, 0x4361, 0x1058, 0x41db, 0x1992, 0xbf1e, 0x41d8, 0x40c2, 0x43a3, 0x42ba, 0x41b7, 0x1d22, 0x43d5, 0xb213, 0x0005, 0x4004, 0x4171, 0x4038, 0x4364, 0x3420, 0x4135, 0x445c, 0x42f6, 0x4282, 0x4110, 0xbf5a, 0x3781, 0xb2f5, 0x40f8, 0xb2bc, 0xb264, 0x4591, 0x1812, 0xb06d, 0xba2f, 0xbf43, 0xa219, 0x46c0, 0xb2f3, 0x40f0, 0xbf5d, 0xbae7, 0xa3f0, 0x423e, 0xb246, 0x36e6, 0x402e, 0x400e, 0xb2af, 0xbfde, 0xba53, 0x085b, 0xab40, 0x43ac, 0x431a, 0x2778, 0x1da4, 0xb029, 0x14e4, 0x439f, 0x15ca, 0xa275, 0x1f63, 0x41ad, 0x3dee, 0xbf97, 0xbff0, 0x40e4, 0x448d, 0xb2d7, 0xbf8a, 0x41e5, 0xba2e, 0x2351, 0x1b2d, 0xbfe0, 0x4261, 0x414d, 0xbf55, 0xb28e, 0x1bb7, 0x439d, 0x41f4, 0x04a2, 0x040e, 0xb2a2, 0x4313, 0x1df1, 0xbac7, 0x41cc, 0x41d6, 0xbfb5, 0x432e, 0x42c0, 0x1cdd, 0x1ccb, 0xbf07, 0xb052, 0x1ead, 0x4281, 0x431d, 0x4365, 0x4206, 0x1b51, 0x43b9, 0x16d4, 0x0878, 0xbf89, 0x40d5, 0xa72b, 0xbad8, 0x3d59, 0x43b9, 0x42ff, 0x454d, 0xbae8, 0x11ea, 0xb2d7, 0x1455, 0xb2bc, 0xb29d, 0xba69, 0x461c, 0x19b1, 0xb282, 0xb054, 0x08a5, 0x45cc, 0x40ec, 0xbf9b, 0x0e9d, 0x1b02, 0x4099, 0x4080, 0x4322, 0x1313, 0x236c, 0x19cb, 0xa05e, 0x4350, 0x4299, 0xba45, 0x1afa, 0x1a45, 0x41f1, 0x058f, 0x18aa, 0x4190, 0xb0b6, 0xbfc8, 0xba6c, 0xb019, 0x4260, 0x40cb, 0x40e2, 0x1c47, 0xae93, 0x340d, 0x0e55, 0xba34, 0xaacd, 0xbfae, 0x416d, 0xb0ef, 0x4056, 0xba07, 0x41eb, 0x4490, 0xba61, 0x402c, 0x469a, 0x3dbe, 0x4015, 0x4560, 0x439c, 0x2497, 0x3ceb, 0x4196, 0xbf2d, 0x3df9, 0xb029, 0x1aa2, 0x1f04, 0xbfb3, 0xb006, 0xb001, 0x4067, 0x405f, 0xbaf8, 0xba17, 0xbf6f, 0xb2a3, 0x32e4, 0x27be, 0x4297, 0x3a02, 0x438b, 0x422b, 0xb0bc, 0x437e, 0x1f3a, 0xba0e, 0x40fa, 0xbf00, 0xa05d, 0x4052, 0x4302, 0x3ae8, 0xb207, 0xb01a, 0x4317, 0x440d, 0x44ca, 0xbad5, 0xa59a, 0x462c, 0xb22a, 0xa1e3, 0x46c4, 0x417a, 0xbf14, 0xbaec, 0xb296, 0x43c8, 0xb213, 0x2bbb, 0xb20d, 0x0e03, 0x43a6, 0x139c, 0xba1a, 0xacf0, 0x406e, 0x0198, 0xbf60, 0x400f, 0x428d, 0x40dc, 0x1881, 0xba24, 0x4222, 0xb0f8, 0x4380, 0x4093, 0x40a8, 0x3f1c, 0xbf49, 0xb2ae, 0xb238, 0x42d6, 0xb20c, 0x24d6, 0x1e47, 0xbf1b, 0x396a, 0x1a86, 0x4184, 0x402e, 0x3053, 0xb26c, 0x0b64, 0x4109, 0x46c2, 0x424b, 0xba29, 0x1c0e, 0x41bd, 0x4459, 0xb21f, 0xb20a, 0x43af, 0x424a, 0x432c, 0xb0db, 0x41c0, 0x4454, 0xbf88, 0x37f0, 0x4129, 0x4137, 0x436b, 0x44b8, 0x4043, 0x310e, 0xba09, 0x258e, 0x40a9, 0x4205, 0x4269, 0xba39, 0xb011, 0xbf00, 0x1e11, 0xba64, 0x1c52, 0x4113, 0x2228, 0xb2bf, 0xb058, 0x2bfe, 0x430f, 0x1d24, 0xbf0e, 0x43f1, 0x4113, 0xb268, 0x189e, 0x43a1, 0xb21a, 0x4193, 0xb287, 0x346a, 0x419b, 0x42a4, 0xad64, 0x41ac, 0x459d, 0x30a2, 0x2363, 0x40ad, 0x462f, 0x459c, 0x3579, 0x298b, 0x4105, 0xbfab, 0x3d00, 0x42dd, 0x4390, 0x1c75, 0x4156, 0x1cb5, 0x4349, 0x43f2, 0x45d6, 0x40f5, 0x4328, 0x41d2, 0x4165, 0xb00f, 0x4023, 0xba7b, 0xb0d4, 0x41f4, 0xbff0, 0x4085, 0x40a0, 0xbf78, 0x1892, 0xb067, 0x4055, 0x4094, 0x42d6, 0xba35, 0x42b0, 0x41e8, 0xac04, 0x42d6, 0x41aa, 0xba6c, 0xb273, 0x1c21, 0x40cf, 0x4492, 0x46d5, 0x1965, 0x4221, 0xb2c4, 0x43e7, 0x415a, 0x432f, 0x407f, 0xbf8c, 0xb283, 0x46a5, 0x4770, 0xe7fe + ], + StartRegs = [0xd25485a3, 0x65f9ab76, 0x3fac21bc, 0xb38c4c4b, 0x9ae6ab78, 0xff30a4a6, 0x01b8bb18, 0x9f4c9ead, 0xa09d6abf, 0x3ea9cd0d, 0x60d7d350, 0x04406247, 0x923282a2, 0xf465cdc9, 0x00000000, 0x300001f0 + ], + FinalRegs = [0x00000000, 0x00280000, 0xd7ff6025, 0x00000028, 0x00000000, 0x28280000, 0x00000028, 0x00000000, 0x55f83e89, 0x3eaa3cd7, 0x2df79e85, 0xb55ae7e5, 0x55f83e88, 0x00000000, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0xbad5, 0x1d59, 0xa4c4, 0x1a8d, 0x1b22, 0xa8c9, 0x45cc, 0x422b, 0x3e2e, 0x4264, 0x4080, 0x3475, 0x4121, 0x41b2, 0x4344, 0xa434, 0x45f0, 0x1e00, 0xbf34, 0x4409, 0x4310, 0x43ce, 0x43ed, 0x4044, 0x4019, 0x41dc, 0x1ea8, 0x4076, 0xbaf0, 0x42b2, 0x41ce, 0x406e, 0xb2e7, 0xbfc0, 0xb202, 0x1d55, 0xbf74, 0x42b3, 0xa20f, 0x41e6, 0x1551, 0x29e3, 0x417b, 0x4037, 0x2314, 0x4311, 0x4163, 0xb2d6, 0x416c, 0xadaa, 0xb258, 0x3667, 0xbfcd, 0x42b1, 0x42ab, 0xbfb0, 0x4591, 0xa1d1, 0xb05f, 0x442c, 0x1b90, 0x42c0, 0xb29a, 0x43e5, 0xb283, 0xba53, 0xb228, 0xbad6, 0x4031, 0x185e, 0xba00, 0xb2d1, 0x4298, 0xb2c9, 0xbfbd, 0x4229, 0xb297, 0xb016, 0x42a1, 0x4022, 0x120d, 0xba0f, 0x1dce, 0x435a, 0x4039, 0x183a, 0xbf70, 0x3a82, 0xa4d5, 0x250f, 0x4341, 0x413b, 0x4209, 0x467a, 0xbfa0, 0x1dc9, 0xbad6, 0x4106, 0x43dd, 0xbf8b, 0x45a0, 0x4253, 0x44d5, 0x1d62, 0x4128, 0xaaf0, 0x40be, 0x4373, 0xba76, 0x4314, 0xbf35, 0x400c, 0x019c, 0x43aa, 0x42dd, 0xba6c, 0xb23f, 0x4437, 0xbfd8, 0x4419, 0x2e1a, 0x4270, 0x429f, 0xba18, 0x2478, 0x3fa1, 0x40b6, 0x4130, 0x43c6, 0xbf9f, 0x401f, 0x01ae, 0x4264, 0xb264, 0x41db, 0xbac5, 0xbfd6, 0x4678, 0xb20e, 0x4244, 0x44c5, 0x1729, 0xba6d, 0x418b, 0x46a2, 0xb0bf, 0x38e1, 0x4386, 0xba49, 0x4387, 0x1dd4, 0x1e09, 0x40dd, 0x45e6, 0x40c6, 0xbf81, 0x05a7, 0xb2a8, 0xba43, 0x0104, 0x0c94, 0x42d5, 0x4153, 0x407a, 0xbfb6, 0x406f, 0x4146, 0x1c98, 0x43cf, 0x40c8, 0x40bf, 0x432b, 0x1ab7, 0xbf0b, 0x0f94, 0x42bb, 0xba05, 0xba0f, 0x43dd, 0x40d1, 0xb28d, 0x1d03, 0xb02f, 0x43f1, 0x430f, 0xbf19, 0xb05c, 0xba78, 0x423d, 0x41d4, 0x44d0, 0xa90f, 0x120b, 0x4649, 0x40b5, 0x3754, 0x42d1, 0x40a8, 0x2a90, 0xb20b, 0x41e6, 0xb066, 0xb290, 0x4188, 0x40c2, 0xb273, 0xbf41, 0x00f2, 0x427b, 0x1c07, 0x4654, 0xab5e, 0x03e3, 0x441a, 0x40c2, 0x4273, 0xb0a5, 0xba56, 0x45bd, 0x42a5, 0x4369, 0x049c, 0x23de, 0xbf76, 0x1a8a, 0x424c, 0xbff0, 0xbfc0, 0x1e0a, 0xb2c1, 0x4238, 0x4388, 0x4485, 0x34b5, 0xa687, 0x4235, 0xb295, 0xb0a0, 0x4175, 0x4280, 0xadc3, 0xa75e, 0x467c, 0x4169, 0xb20c, 0x42cb, 0xbf12, 0x1ad9, 0x1acf, 0x46e8, 0xba62, 0x4180, 0x1e87, 0x4028, 0x093f, 0x1810, 0xb015, 0x42d2, 0x1ba6, 0xbf04, 0xb0d5, 0x4156, 0x43e8, 0x4246, 0xbac6, 0x4204, 0xb272, 0xba2f, 0xb24e, 0x422c, 0x40e9, 0x43ec, 0x4019, 0x41a1, 0x1cad, 0x007a, 0x41b7, 0x4231, 0xbfc1, 0x3779, 0x1010, 0xbafe, 0x4311, 0x45b9, 0x469a, 0x41fe, 0xb205, 0x17e7, 0x0096, 0x166f, 0x4090, 0xb260, 0x4241, 0xb0ad, 0x1c8e, 0xbf4f, 0xb2a7, 0x432d, 0xba6a, 0x4358, 0xb26d, 0x429c, 0x40c8, 0x1de3, 0x244f, 0xa9e5, 0x412a, 0x1bff, 0x40b1, 0xb2c6, 0x469b, 0x0d3c, 0x1ef1, 0xbfb6, 0xa11f, 0x4011, 0xb298, 0x0847, 0x400c, 0xb255, 0xb0a0, 0xbae9, 0xba33, 0x413e, 0xb2a9, 0x40c4, 0x199a, 0xb2b8, 0xbf8b, 0x437d, 0x18dc, 0x19c1, 0x43ee, 0x0ce7, 0x0e99, 0x287c, 0x2f2a, 0x1e51, 0xbf90, 0xb217, 0x41a9, 0xb230, 0xb02b, 0xbf7b, 0x4319, 0x12d0, 0x4279, 0xba78, 0x1950, 0xbf90, 0x0410, 0xb08d, 0x260b, 0xbfa8, 0x3d18, 0x4338, 0x4185, 0x4061, 0x4042, 0x41ad, 0xbaef, 0x419e, 0x194f, 0x249b, 0xb2c1, 0xbf19, 0x1f07, 0x4370, 0x1cd7, 0x439a, 0xab32, 0x4256, 0xbf2f, 0x43cb, 0x412b, 0x41a7, 0x1b51, 0xb20f, 0xb03a, 0x4000, 0x3858, 0x3170, 0x2475, 0xae13, 0xb231, 0x4498, 0xbf9a, 0x45ad, 0x404e, 0x2df8, 0xb25b, 0x3db3, 0xa424, 0xb211, 0xb208, 0x43fb, 0x4241, 0x1937, 0x1c73, 0x40f4, 0x0729, 0x41cd, 0x2eff, 0x4288, 0xb0cc, 0x1be4, 0xbafc, 0xbf21, 0x1150, 0xba5b, 0x41ec, 0x1e5d, 0x4324, 0x430d, 0x189e, 0x416b, 0xb0ed, 0x1958, 0x43c4, 0x439c, 0x40aa, 0x42e3, 0xba03, 0x4255, 0x4014, 0x4583, 0xb2b2, 0xb278, 0xb233, 0x2f6f, 0x31e0, 0x41bb, 0xbfce, 0x439f, 0xa48e, 0x42cf, 0x434c, 0xb25d, 0x4317, 0xb281, 0x439b, 0x4098, 0x4201, 0xae51, 0x4281, 0x43c0, 0x417b, 0xb014, 0x4561, 0xba03, 0xb26b, 0x1e97, 0xb2f8, 0x4131, 0x4191, 0x40fe, 0xbf78, 0x227e, 0x4692, 0xba49, 0x4175, 0x4495, 0xb252, 0xba21, 0x43d7, 0x4317, 0x214c, 0xba01, 0x46d9, 0x41a8, 0x4023, 0xbf4b, 0x28eb, 0xb055, 0x431e, 0x40cb, 0x40d2, 0x1bce, 0x1a62, 0x4004, 0x438d, 0x1f3c, 0xb20b, 0x4025, 0x410f, 0xa075, 0xb262, 0xbf37, 0xbade, 0xb264, 0x1a2d, 0x19a6, 0x1811, 0xbfdd, 0xbad4, 0x4331, 0x2bc6, 0x42d3, 0x42ff, 0x23d1, 0x442b, 0x28f2, 0x1597, 0xbfa5, 0xb0ad, 0x41fc, 0x446c, 0xba71, 0x45d1, 0x24a8, 0x1f6f, 0xba30, 0x4228, 0x40dc, 0x402e, 0x43d7, 0xae6c, 0x403b, 0x4027, 0x4391, 0xbf69, 0xb2c4, 0x45ec, 0xba6a, 0x406c, 0x46a5, 0xba6a, 0xb2dd, 0xbad4, 0x41e5, 0x40a9, 0x41e5, 0x1abf, 0xbf74, 0x1c83, 0x42d6, 0x43d1, 0xba0f, 0x43f6, 0x042d, 0x4341, 0x42b2, 0xbf14, 0x1fe1, 0x4275, 0x4128, 0x401c, 0xb20d, 0x02b4, 0x4493, 0x41ac, 0xb21a, 0x417f, 0x4283, 0x2bd4, 0x40a7, 0xb293, 0x4028, 0xb2d5, 0xbac8, 0xb250, 0xbf2f, 0x426d, 0x424e, 0x433a, 0x1e87, 0x4352, 0xb295, 0xbadd, 0x4369, 0x05ca, 0x415d, 0xb215, 0x4247, 0x4220, 0x3a43, 0x0025, 0x4166, 0xbac9, 0xba2a, 0x4084, 0x0d4f, 0xb07c, 0x43b7, 0x45e5, 0x42de, 0x401b, 0x4382, 0xbf6b, 0x45ae, 0x279c, 0x4117, 0x4138, 0x0998, 0x425f, 0xbf24, 0x08b8, 0xb016, 0x1f7d, 0x2512, 0x19cd, 0xba6d, 0x42d8, 0xba0c, 0x30ef, 0x4407, 0x2342, 0x0c6e, 0x432c, 0x41d3, 0x13e8, 0x1350, 0x363a, 0xb072, 0x3631, 0xbf6f, 0x1a7d, 0x2ed0, 0x43d7, 0x28be, 0x3dc7, 0x15f5, 0x4118, 0xba6c, 0x4604, 0xa826, 0x423a, 0xb2bc, 0xb201, 0xbf0d, 0x41bc, 0x1afd, 0xb061, 0x3a1d, 0x4126, 0x42fe, 0x2aa7, 0x4165, 0xba5b, 0xb078, 0xbfc0, 0x4351, 0x42e4, 0x4183, 0x4211, 0x4651, 0x40b3, 0x4328, 0x43d0, 0x207b, 0xb24b, 0x1018, 0xae51, 0x18f3, 0x4037, 0xba1d, 0x1529, 0x3c02, 0xbf14, 0x0859, 0x40a1, 0x1daf, 0xb296, 0xb0b8, 0x2b0a, 0x4221, 0xbacc, 0x185d, 0x402d, 0x18ff, 0x42a7, 0xb28b, 0xbf6e, 0x43af, 0x419c, 0x3a08, 0x4230, 0x2623, 0x1903, 0x0462, 0x0149, 0xba1a, 0x1eba, 0x436d, 0xb0b8, 0x40df, 0xb279, 0xba60, 0x44f1, 0xba16, 0x4085, 0xb2c5, 0x1e6e, 0x40e0, 0xbf8c, 0x422a, 0x42ea, 0x42fe, 0x4544, 0xbf53, 0x430b, 0x3121, 0x4012, 0x4291, 0xb007, 0xb223, 0xb2a1, 0xb2ce, 0x09bd, 0x1d76, 0x4171, 0x40d3, 0x08b5, 0xacc9, 0x2e88, 0xb2dd, 0xb2e7, 0x42f5, 0x408d, 0x41a0, 0x41ef, 0x1c3f, 0x464e, 0x2766, 0xbf4a, 0x4087, 0xafb7, 0x461c, 0x43d1, 0xa153, 0x34a3, 0xbfa0, 0xba05, 0x0f87, 0x4095, 0xbfbf, 0x4252, 0x4160, 0x41d3, 0xb071, 0x09c2, 0xb05b, 0x4368, 0x40ab, 0x07d6, 0x45dd, 0xb047, 0x43b8, 0x42f8, 0x23c1, 0x19d1, 0x3c53, 0x42a3, 0x2e39, 0x4208, 0x04ed, 0x411c, 0x29ec, 0x43ac, 0xa6b8, 0x403b, 0xba30, 0xbf11, 0xb2fb, 0x1810, 0x05a6, 0x40b2, 0xa664, 0xbfaa, 0x434c, 0xb280, 0x2bd7, 0x22b9, 0x42ca, 0x0fe6, 0x2a39, 0xa493, 0x40ce, 0x424a, 0xba10, 0x42e2, 0xa50a, 0x43b9, 0x456b, 0xb2a1, 0x432b, 0x43ee, 0x05a5, 0x4142, 0x4417, 0x1ccf, 0x40a5, 0x43d8, 0xbfa1, 0xb268, 0x4092, 0xb20f, 0x401f, 0x40ea, 0x1b3d, 0xbaed, 0x0264, 0x0b78, 0x42fb, 0x0836, 0xb2ed, 0x424a, 0x40d1, 0x2cfd, 0x101f, 0x4293, 0x46a9, 0x46cb, 0xbfa3, 0x4058, 0x41d6, 0x40c1, 0xba3a, 0x45dc, 0x11ed, 0x3aa0, 0x468d, 0xbf80, 0xa4dc, 0x1936, 0x1766, 0x280e, 0x1ae8, 0xbfde, 0x33a9, 0x17d0, 0xa82c, 0xba1a, 0x43d1, 0x4310, 0x41b3, 0xb21a, 0x4270, 0xb285, 0x4055, 0xba60, 0x1c37, 0x224c, 0x43ce, 0x43c3, 0x234e, 0x43ca, 0xb213, 0xb29c, 0x4294, 0xba5c, 0xb2b3, 0x2d4b, 0xa6db, 0xbf1e, 0x4240, 0xa2f2, 0x138e, 0x1d24, 0x4235, 0x4569, 0x432e, 0x41ef, 0xa704, 0x25b2, 0x13bc, 0xb0eb, 0x41e4, 0x401e, 0xa704, 0x41ad, 0x41dd, 0x4298, 0x1b03, 0x423c, 0xb248, 0x405c, 0x0b80, 0x40c7, 0xba75, 0x43b0, 0xbfb6, 0x10b0, 0x41ec, 0xa1b4, 0xb26b, 0xb295, 0x412c, 0x44e5, 0x2796, 0x2eb7, 0x4165, 0xbfc9, 0x42b4, 0xac49, 0x40da, 0xba7f, 0x40c1, 0xbf00, 0x4376, 0x0fd1, 0x1a0f, 0x4356, 0x41ac, 0xb00e, 0x45f3, 0x2458, 0x333c, 0x0171, 0xb273, 0x4304, 0xbfe2, 0x45cb, 0xa2d9, 0x40d8, 0x4348, 0x1760, 0x412f, 0x42d4, 0x40a9, 0x424f, 0xbf18, 0xb07a, 0x40b1, 0x00cf, 0x43fa, 0x4299, 0x4367, 0x222f, 0x1212, 0x4401, 0x4388, 0x2451, 0xb29b, 0x4319, 0xb210, 0x420f, 0x40fd, 0x45b0, 0x32f6, 0x43b9, 0x1ca3, 0x1863, 0xbfac, 0xb083, 0x4385, 0x42d0, 0x422c, 0x1fe8, 0x2eaa, 0x1075, 0xb2a0, 0xbf0b, 0x42d9, 0xa9de, 0xb093, 0x42ce, 0x41eb, 0x40a4, 0x4242, 0x43df, 0xb254, 0xa2a0, 0x421b, 0x4305, 0xbf55, 0x10f1, 0xabe9, 0x41fb, 0x4333, 0x2b35, 0x405e, 0x1e82, 0x2a61, 0xbf46, 0x4234, 0xb26c, 0x1935, 0xbad9, 0x4164, 0xb241, 0x43fe, 0xb25b, 0x1df3, 0x4304, 0x1a0c, 0xba35, 0xbf0e, 0x336a, 0x3265, 0x068a, 0xba61, 0x06fd, 0x1c50, 0xb2c0, 0x4124, 0x4418, 0x41c6, 0xabd2, 0x429d, 0xba40, 0x4225, 0xb0e6, 0xb2c8, 0x4148, 0xb2b2, 0x400d, 0x1bc1, 0x24ff, 0xbf6c, 0x43f2, 0xba30, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xb95fc095, 0x46c9af8c, 0x44f999c1, 0xf75c725c, 0xeef9897b, 0x7583419d, 0xd7d5f784, 0xf2f60e6f, 0xa9e0afa9, 0x25abe41c, 0x5498383c, 0x7f430b81, 0xac6b7408, 0xf3f13b36, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x00401400, 0x00000052, 0x00004000, 0xac6b75d0, 0x000000ff, 0x00000000, 0x00144000, 0xffffffae, 0x2206c8a0, 0x00000000, 0x0000007e, 0x00000000, 0xac6b7408, 0xac6b70f0, 0x00000000, 0x000001d0 }, + Instructions = [0xbad5, 0x1d59, 0xa4c4, 0x1a8d, 0x1b22, 0xa8c9, 0x45cc, 0x422b, 0x3e2e, 0x4264, 0x4080, 0x3475, 0x4121, 0x41b2, 0x4344, 0xa434, 0x45f0, 0x1e00, 0xbf34, 0x4409, 0x4310, 0x43ce, 0x43ed, 0x4044, 0x4019, 0x41dc, 0x1ea8, 0x4076, 0xbaf0, 0x42b2, 0x41ce, 0x406e, 0xb2e7, 0xbfc0, 0xb202, 0x1d55, 0xbf74, 0x42b3, 0xa20f, 0x41e6, 0x1551, 0x29e3, 0x417b, 0x4037, 0x2314, 0x4311, 0x4163, 0xb2d6, 0x416c, 0xadaa, 0xb258, 0x3667, 0xbfcd, 0x42b1, 0x42ab, 0xbfb0, 0x4591, 0xa1d1, 0xb05f, 0x442c, 0x1b90, 0x42c0, 0xb29a, 0x43e5, 0xb283, 0xba53, 0xb228, 0xbad6, 0x4031, 0x185e, 0xba00, 0xb2d1, 0x4298, 0xb2c9, 0xbfbd, 0x4229, 0xb297, 0xb016, 0x42a1, 0x4022, 0x120d, 0xba0f, 0x1dce, 0x435a, 0x4039, 0x183a, 0xbf70, 0x3a82, 0xa4d5, 0x250f, 0x4341, 0x413b, 0x4209, 0x467a, 0xbfa0, 0x1dc9, 0xbad6, 0x4106, 0x43dd, 0xbf8b, 0x45a0, 0x4253, 0x44d5, 0x1d62, 0x4128, 0xaaf0, 0x40be, 0x4373, 0xba76, 0x4314, 0xbf35, 0x400c, 0x019c, 0x43aa, 0x42dd, 0xba6c, 0xb23f, 0x4437, 0xbfd8, 0x4419, 0x2e1a, 0x4270, 0x429f, 0xba18, 0x2478, 0x3fa1, 0x40b6, 0x4130, 0x43c6, 0xbf9f, 0x401f, 0x01ae, 0x4264, 0xb264, 0x41db, 0xbac5, 0xbfd6, 0x4678, 0xb20e, 0x4244, 0x44c5, 0x1729, 0xba6d, 0x418b, 0x46a2, 0xb0bf, 0x38e1, 0x4386, 0xba49, 0x4387, 0x1dd4, 0x1e09, 0x40dd, 0x45e6, 0x40c6, 0xbf81, 0x05a7, 0xb2a8, 0xba43, 0x0104, 0x0c94, 0x42d5, 0x4153, 0x407a, 0xbfb6, 0x406f, 0x4146, 0x1c98, 0x43cf, 0x40c8, 0x40bf, 0x432b, 0x1ab7, 0xbf0b, 0x0f94, 0x42bb, 0xba05, 0xba0f, 0x43dd, 0x40d1, 0xb28d, 0x1d03, 0xb02f, 0x43f1, 0x430f, 0xbf19, 0xb05c, 0xba78, 0x423d, 0x41d4, 0x44d0, 0xa90f, 0x120b, 0x4649, 0x40b5, 0x3754, 0x42d1, 0x40a8, 0x2a90, 0xb20b, 0x41e6, 0xb066, 0xb290, 0x4188, 0x40c2, 0xb273, 0xbf41, 0x00f2, 0x427b, 0x1c07, 0x4654, 0xab5e, 0x03e3, 0x441a, 0x40c2, 0x4273, 0xb0a5, 0xba56, 0x45bd, 0x42a5, 0x4369, 0x049c, 0x23de, 0xbf76, 0x1a8a, 0x424c, 0xbff0, 0xbfc0, 0x1e0a, 0xb2c1, 0x4238, 0x4388, 0x4485, 0x34b5, 0xa687, 0x4235, 0xb295, 0xb0a0, 0x4175, 0x4280, 0xadc3, 0xa75e, 0x467c, 0x4169, 0xb20c, 0x42cb, 0xbf12, 0x1ad9, 0x1acf, 0x46e8, 0xba62, 0x4180, 0x1e87, 0x4028, 0x093f, 0x1810, 0xb015, 0x42d2, 0x1ba6, 0xbf04, 0xb0d5, 0x4156, 0x43e8, 0x4246, 0xbac6, 0x4204, 0xb272, 0xba2f, 0xb24e, 0x422c, 0x40e9, 0x43ec, 0x4019, 0x41a1, 0x1cad, 0x007a, 0x41b7, 0x4231, 0xbfc1, 0x3779, 0x1010, 0xbafe, 0x4311, 0x45b9, 0x469a, 0x41fe, 0xb205, 0x17e7, 0x0096, 0x166f, 0x4090, 0xb260, 0x4241, 0xb0ad, 0x1c8e, 0xbf4f, 0xb2a7, 0x432d, 0xba6a, 0x4358, 0xb26d, 0x429c, 0x40c8, 0x1de3, 0x244f, 0xa9e5, 0x412a, 0x1bff, 0x40b1, 0xb2c6, 0x469b, 0x0d3c, 0x1ef1, 0xbfb6, 0xa11f, 0x4011, 0xb298, 0x0847, 0x400c, 0xb255, 0xb0a0, 0xbae9, 0xba33, 0x413e, 0xb2a9, 0x40c4, 0x199a, 0xb2b8, 0xbf8b, 0x437d, 0x18dc, 0x19c1, 0x43ee, 0x0ce7, 0x0e99, 0x287c, 0x2f2a, 0x1e51, 0xbf90, 0xb217, 0x41a9, 0xb230, 0xb02b, 0xbf7b, 0x4319, 0x12d0, 0x4279, 0xba78, 0x1950, 0xbf90, 0x0410, 0xb08d, 0x260b, 0xbfa8, 0x3d18, 0x4338, 0x4185, 0x4061, 0x4042, 0x41ad, 0xbaef, 0x419e, 0x194f, 0x249b, 0xb2c1, 0xbf19, 0x1f07, 0x4370, 0x1cd7, 0x439a, 0xab32, 0x4256, 0xbf2f, 0x43cb, 0x412b, 0x41a7, 0x1b51, 0xb20f, 0xb03a, 0x4000, 0x3858, 0x3170, 0x2475, 0xae13, 0xb231, 0x4498, 0xbf9a, 0x45ad, 0x404e, 0x2df8, 0xb25b, 0x3db3, 0xa424, 0xb211, 0xb208, 0x43fb, 0x4241, 0x1937, 0x1c73, 0x40f4, 0x0729, 0x41cd, 0x2eff, 0x4288, 0xb0cc, 0x1be4, 0xbafc, 0xbf21, 0x1150, 0xba5b, 0x41ec, 0x1e5d, 0x4324, 0x430d, 0x189e, 0x416b, 0xb0ed, 0x1958, 0x43c4, 0x439c, 0x40aa, 0x42e3, 0xba03, 0x4255, 0x4014, 0x4583, 0xb2b2, 0xb278, 0xb233, 0x2f6f, 0x31e0, 0x41bb, 0xbfce, 0x439f, 0xa48e, 0x42cf, 0x434c, 0xb25d, 0x4317, 0xb281, 0x439b, 0x4098, 0x4201, 0xae51, 0x4281, 0x43c0, 0x417b, 0xb014, 0x4561, 0xba03, 0xb26b, 0x1e97, 0xb2f8, 0x4131, 0x4191, 0x40fe, 0xbf78, 0x227e, 0x4692, 0xba49, 0x4175, 0x4495, 0xb252, 0xba21, 0x43d7, 0x4317, 0x214c, 0xba01, 0x46d9, 0x41a8, 0x4023, 0xbf4b, 0x28eb, 0xb055, 0x431e, 0x40cb, 0x40d2, 0x1bce, 0x1a62, 0x4004, 0x438d, 0x1f3c, 0xb20b, 0x4025, 0x410f, 0xa075, 0xb262, 0xbf37, 0xbade, 0xb264, 0x1a2d, 0x19a6, 0x1811, 0xbfdd, 0xbad4, 0x4331, 0x2bc6, 0x42d3, 0x42ff, 0x23d1, 0x442b, 0x28f2, 0x1597, 0xbfa5, 0xb0ad, 0x41fc, 0x446c, 0xba71, 0x45d1, 0x24a8, 0x1f6f, 0xba30, 0x4228, 0x40dc, 0x402e, 0x43d7, 0xae6c, 0x403b, 0x4027, 0x4391, 0xbf69, 0xb2c4, 0x45ec, 0xba6a, 0x406c, 0x46a5, 0xba6a, 0xb2dd, 0xbad4, 0x41e5, 0x40a9, 0x41e5, 0x1abf, 0xbf74, 0x1c83, 0x42d6, 0x43d1, 0xba0f, 0x43f6, 0x042d, 0x4341, 0x42b2, 0xbf14, 0x1fe1, 0x4275, 0x4128, 0x401c, 0xb20d, 0x02b4, 0x4493, 0x41ac, 0xb21a, 0x417f, 0x4283, 0x2bd4, 0x40a7, 0xb293, 0x4028, 0xb2d5, 0xbac8, 0xb250, 0xbf2f, 0x426d, 0x424e, 0x433a, 0x1e87, 0x4352, 0xb295, 0xbadd, 0x4369, 0x05ca, 0x415d, 0xb215, 0x4247, 0x4220, 0x3a43, 0x0025, 0x4166, 0xbac9, 0xba2a, 0x4084, 0x0d4f, 0xb07c, 0x43b7, 0x45e5, 0x42de, 0x401b, 0x4382, 0xbf6b, 0x45ae, 0x279c, 0x4117, 0x4138, 0x0998, 0x425f, 0xbf24, 0x08b8, 0xb016, 0x1f7d, 0x2512, 0x19cd, 0xba6d, 0x42d8, 0xba0c, 0x30ef, 0x4407, 0x2342, 0x0c6e, 0x432c, 0x41d3, 0x13e8, 0x1350, 0x363a, 0xb072, 0x3631, 0xbf6f, 0x1a7d, 0x2ed0, 0x43d7, 0x28be, 0x3dc7, 0x15f5, 0x4118, 0xba6c, 0x4604, 0xa826, 0x423a, 0xb2bc, 0xb201, 0xbf0d, 0x41bc, 0x1afd, 0xb061, 0x3a1d, 0x4126, 0x42fe, 0x2aa7, 0x4165, 0xba5b, 0xb078, 0xbfc0, 0x4351, 0x42e4, 0x4183, 0x4211, 0x4651, 0x40b3, 0x4328, 0x43d0, 0x207b, 0xb24b, 0x1018, 0xae51, 0x18f3, 0x4037, 0xba1d, 0x1529, 0x3c02, 0xbf14, 0x0859, 0x40a1, 0x1daf, 0xb296, 0xb0b8, 0x2b0a, 0x4221, 0xbacc, 0x185d, 0x402d, 0x18ff, 0x42a7, 0xb28b, 0xbf6e, 0x43af, 0x419c, 0x3a08, 0x4230, 0x2623, 0x1903, 0x0462, 0x0149, 0xba1a, 0x1eba, 0x436d, 0xb0b8, 0x40df, 0xb279, 0xba60, 0x44f1, 0xba16, 0x4085, 0xb2c5, 0x1e6e, 0x40e0, 0xbf8c, 0x422a, 0x42ea, 0x42fe, 0x4544, 0xbf53, 0x430b, 0x3121, 0x4012, 0x4291, 0xb007, 0xb223, 0xb2a1, 0xb2ce, 0x09bd, 0x1d76, 0x4171, 0x40d3, 0x08b5, 0xacc9, 0x2e88, 0xb2dd, 0xb2e7, 0x42f5, 0x408d, 0x41a0, 0x41ef, 0x1c3f, 0x464e, 0x2766, 0xbf4a, 0x4087, 0xafb7, 0x461c, 0x43d1, 0xa153, 0x34a3, 0xbfa0, 0xba05, 0x0f87, 0x4095, 0xbfbf, 0x4252, 0x4160, 0x41d3, 0xb071, 0x09c2, 0xb05b, 0x4368, 0x40ab, 0x07d6, 0x45dd, 0xb047, 0x43b8, 0x42f8, 0x23c1, 0x19d1, 0x3c53, 0x42a3, 0x2e39, 0x4208, 0x04ed, 0x411c, 0x29ec, 0x43ac, 0xa6b8, 0x403b, 0xba30, 0xbf11, 0xb2fb, 0x1810, 0x05a6, 0x40b2, 0xa664, 0xbfaa, 0x434c, 0xb280, 0x2bd7, 0x22b9, 0x42ca, 0x0fe6, 0x2a39, 0xa493, 0x40ce, 0x424a, 0xba10, 0x42e2, 0xa50a, 0x43b9, 0x456b, 0xb2a1, 0x432b, 0x43ee, 0x05a5, 0x4142, 0x4417, 0x1ccf, 0x40a5, 0x43d8, 0xbfa1, 0xb268, 0x4092, 0xb20f, 0x401f, 0x40ea, 0x1b3d, 0xbaed, 0x0264, 0x0b78, 0x42fb, 0x0836, 0xb2ed, 0x424a, 0x40d1, 0x2cfd, 0x101f, 0x4293, 0x46a9, 0x46cb, 0xbfa3, 0x4058, 0x41d6, 0x40c1, 0xba3a, 0x45dc, 0x11ed, 0x3aa0, 0x468d, 0xbf80, 0xa4dc, 0x1936, 0x1766, 0x280e, 0x1ae8, 0xbfde, 0x33a9, 0x17d0, 0xa82c, 0xba1a, 0x43d1, 0x4310, 0x41b3, 0xb21a, 0x4270, 0xb285, 0x4055, 0xba60, 0x1c37, 0x224c, 0x43ce, 0x43c3, 0x234e, 0x43ca, 0xb213, 0xb29c, 0x4294, 0xba5c, 0xb2b3, 0x2d4b, 0xa6db, 0xbf1e, 0x4240, 0xa2f2, 0x138e, 0x1d24, 0x4235, 0x4569, 0x432e, 0x41ef, 0xa704, 0x25b2, 0x13bc, 0xb0eb, 0x41e4, 0x401e, 0xa704, 0x41ad, 0x41dd, 0x4298, 0x1b03, 0x423c, 0xb248, 0x405c, 0x0b80, 0x40c7, 0xba75, 0x43b0, 0xbfb6, 0x10b0, 0x41ec, 0xa1b4, 0xb26b, 0xb295, 0x412c, 0x44e5, 0x2796, 0x2eb7, 0x4165, 0xbfc9, 0x42b4, 0xac49, 0x40da, 0xba7f, 0x40c1, 0xbf00, 0x4376, 0x0fd1, 0x1a0f, 0x4356, 0x41ac, 0xb00e, 0x45f3, 0x2458, 0x333c, 0x0171, 0xb273, 0x4304, 0xbfe2, 0x45cb, 0xa2d9, 0x40d8, 0x4348, 0x1760, 0x412f, 0x42d4, 0x40a9, 0x424f, 0xbf18, 0xb07a, 0x40b1, 0x00cf, 0x43fa, 0x4299, 0x4367, 0x222f, 0x1212, 0x4401, 0x4388, 0x2451, 0xb29b, 0x4319, 0xb210, 0x420f, 0x40fd, 0x45b0, 0x32f6, 0x43b9, 0x1ca3, 0x1863, 0xbfac, 0xb083, 0x4385, 0x42d0, 0x422c, 0x1fe8, 0x2eaa, 0x1075, 0xb2a0, 0xbf0b, 0x42d9, 0xa9de, 0xb093, 0x42ce, 0x41eb, 0x40a4, 0x4242, 0x43df, 0xb254, 0xa2a0, 0x421b, 0x4305, 0xbf55, 0x10f1, 0xabe9, 0x41fb, 0x4333, 0x2b35, 0x405e, 0x1e82, 0x2a61, 0xbf46, 0x4234, 0xb26c, 0x1935, 0xbad9, 0x4164, 0xb241, 0x43fe, 0xb25b, 0x1df3, 0x4304, 0x1a0c, 0xba35, 0xbf0e, 0x336a, 0x3265, 0x068a, 0xba61, 0x06fd, 0x1c50, 0xb2c0, 0x4124, 0x4418, 0x41c6, 0xabd2, 0x429d, 0xba40, 0x4225, 0xb0e6, 0xb2c8, 0x4148, 0xb2b2, 0x400d, 0x1bc1, 0x24ff, 0xbf6c, 0x43f2, 0xba30, 0x4770, 0xe7fe + ], + StartRegs = [0xb95fc095, 0x46c9af8c, 0x44f999c1, 0xf75c725c, 0xeef9897b, 0x7583419d, 0xd7d5f784, 0xf2f60e6f, 0xa9e0afa9, 0x25abe41c, 0x5498383c, 0x7f430b81, 0xac6b7408, 0xf3f13b36, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x00401400, 0x00000052, 0x00004000, 0xac6b75d0, 0x000000ff, 0x00000000, 0x00144000, 0xffffffae, 0x2206c8a0, 0x00000000, 0x0000007e, 0x00000000, 0xac6b7408, 0xac6b70f0, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x185d, 0x4287, 0x405b, 0xb0b0, 0x192e, 0xb012, 0x414b, 0x436f, 0xa9b7, 0x438f, 0x108e, 0xb067, 0x418e, 0x4013, 0x3736, 0x4549, 0x4259, 0xb2c8, 0x42a8, 0x415c, 0x43a9, 0xb28b, 0xbfb3, 0xb2f8, 0x43c9, 0x0a66, 0x4216, 0xbf64, 0x1ee1, 0x42e3, 0xb2bd, 0x00ef, 0xbaf4, 0x40be, 0x4353, 0x44a9, 0x4104, 0x1b6b, 0x403d, 0xb266, 0x078d, 0xba6b, 0x3c0d, 0x05b8, 0xbfbd, 0xbaee, 0x4277, 0x42c0, 0x0958, 0x4254, 0x40a3, 0x4250, 0xa6f7, 0x4050, 0x4541, 0xb211, 0x14d3, 0x41ae, 0x46c8, 0xba25, 0x3f96, 0x0fc8, 0xb246, 0xbf45, 0x45ce, 0x130d, 0xbf00, 0x2176, 0x404f, 0x435a, 0xafd3, 0x4093, 0xb2b3, 0x4202, 0x41df, 0x4089, 0x43d4, 0x0739, 0xaa0d, 0x3f8f, 0xba47, 0x1a4c, 0xb224, 0xbf5d, 0xb20e, 0x1e5c, 0x46a1, 0xba65, 0x40af, 0x41e6, 0x4076, 0xb23a, 0x3fa5, 0x438d, 0xba57, 0xae3f, 0x4141, 0xb2f9, 0xbfe0, 0x43d0, 0x1ec1, 0xb2b6, 0xb28b, 0x1ded, 0x055e, 0x41f0, 0x40f8, 0x0692, 0x4051, 0xbf97, 0x4388, 0xacb2, 0xb04b, 0x19ce, 0x32d5, 0x0b66, 0x4368, 0x1627, 0xb288, 0xb241, 0x4042, 0x2698, 0xb0b7, 0x429f, 0x262d, 0x40b3, 0xb065, 0x42f4, 0xbf14, 0x4009, 0x1661, 0x4304, 0x430d, 0xbfb5, 0x417a, 0x428d, 0x1d15, 0x0175, 0x4282, 0x1183, 0xb22c, 0x1fbc, 0x4352, 0x0e63, 0xa412, 0xba64, 0xa285, 0x41f2, 0x41de, 0x4372, 0xbafe, 0x00ef, 0x40d8, 0xb29d, 0x41a1, 0x44b5, 0xbfaa, 0x4668, 0xbaf8, 0x4180, 0x4462, 0x1dbb, 0x4492, 0x4022, 0xba5c, 0x4070, 0xb2b6, 0x4321, 0x4314, 0x4330, 0xa81d, 0x38c2, 0x427a, 0x417c, 0x4691, 0x4111, 0x4065, 0x1c3d, 0xb02f, 0x424a, 0x4047, 0x4349, 0x411a, 0x40fa, 0xbac1, 0xbf7e, 0x36e7, 0x4189, 0x233b, 0xb032, 0x4071, 0x2ae4, 0x2b36, 0x4290, 0x310b, 0xb22c, 0x430a, 0x4204, 0xbf7f, 0x172e, 0xba71, 0x08ee, 0x43bf, 0x1b31, 0xb068, 0x42b5, 0xbf00, 0x4545, 0xb08e, 0xa37d, 0xb234, 0xb011, 0xbfe4, 0xb208, 0xa6ee, 0x0e43, 0x107e, 0x405d, 0x1c5f, 0x0f55, 0x0342, 0x44cd, 0x2b29, 0xb086, 0xa40a, 0xb21d, 0x4028, 0x426b, 0x2a20, 0x4267, 0x406f, 0x419f, 0x4274, 0x4006, 0xa492, 0x18a2, 0x4177, 0x4140, 0x42a6, 0xbf83, 0x2b7b, 0x4242, 0x40a5, 0x079e, 0x46e0, 0x1907, 0x44f5, 0x094d, 0xb295, 0x438d, 0x409c, 0x465c, 0x43db, 0x36e9, 0xba2d, 0xbf95, 0x430f, 0x4129, 0xb2d0, 0x46dc, 0xa2f1, 0xbf16, 0x433f, 0xb27b, 0x4348, 0xaf01, 0xbf35, 0xba7d, 0x1b43, 0xbaf0, 0x4006, 0x2e62, 0x1e1d, 0xae4d, 0xa032, 0x40fd, 0x42bb, 0x4395, 0x423b, 0x420c, 0x41c1, 0x42fc, 0x466f, 0x4604, 0x41be, 0x4283, 0x426c, 0xbfd3, 0xb2d1, 0x4025, 0x42e2, 0x1d04, 0x228c, 0xb052, 0x37a0, 0x1c67, 0x403a, 0xbfa6, 0x0a6e, 0xb06e, 0xb0b7, 0xaeb4, 0x30fd, 0x423a, 0x41ed, 0x4040, 0x4116, 0x3637, 0x4302, 0xb2f8, 0x1e49, 0xb2e1, 0x437a, 0x05e7, 0x408c, 0xb02a, 0xba09, 0x402c, 0x43db, 0x4062, 0x4664, 0x38d1, 0xbfcb, 0xb012, 0x4595, 0xb2d4, 0xb224, 0xba4c, 0xbf06, 0x088c, 0x1077, 0x414a, 0xafd7, 0x1496, 0xbfa0, 0x45b0, 0x1c0c, 0x3354, 0x43e0, 0x1eab, 0x4281, 0x45c1, 0x406b, 0x075b, 0x3898, 0x4242, 0x430f, 0x4612, 0x40fb, 0xb03f, 0xb0f6, 0x400e, 0x4316, 0x418c, 0x270c, 0xbf93, 0xbac5, 0x18ed, 0xa70b, 0x42f6, 0x4238, 0xbf76, 0x3431, 0x4200, 0x46b8, 0x411c, 0x43a6, 0x439b, 0xbaff, 0x1a05, 0x404b, 0xb238, 0xb2f6, 0xba00, 0x0df6, 0x4021, 0x409b, 0xba4f, 0x1fb3, 0x252f, 0x4018, 0xa721, 0x0f4b, 0x40b9, 0x4211, 0x40d7, 0xba5c, 0xb0f1, 0xbfdf, 0x2384, 0xba0a, 0x435a, 0x42d7, 0x4653, 0x401e, 0xac83, 0x4073, 0xba4b, 0xb0df, 0x0b60, 0x4316, 0x4624, 0xa092, 0x0bf5, 0xbfb0, 0xb057, 0x42d6, 0x42fe, 0x156c, 0x41d6, 0xb0bb, 0x13d3, 0x4248, 0xbfbb, 0x437d, 0x0a8b, 0x4317, 0x40db, 0x42b3, 0x40cd, 0x4095, 0x4362, 0x42d2, 0x4475, 0x4137, 0xae4f, 0x400e, 0x0014, 0xbf7c, 0x420f, 0x1b5a, 0xbf70, 0x18ef, 0xb07e, 0x44fb, 0x43cf, 0x404b, 0x4171, 0xb0e2, 0xba20, 0xa7cc, 0x4580, 0xbf0e, 0x385a, 0x43d1, 0xac36, 0x434c, 0xb0d6, 0x4284, 0x12a5, 0x43bd, 0xb26e, 0x438a, 0xb059, 0x4370, 0x18bd, 0x362f, 0x4309, 0xb0fc, 0xb2d3, 0xbf13, 0xb23e, 0x4285, 0xb0fb, 0xba0b, 0x41b6, 0x04d1, 0xb249, 0x1ee9, 0xb2aa, 0x4340, 0x4285, 0x43e9, 0xbac6, 0xba62, 0x40d2, 0xb23d, 0xb0f0, 0x1cca, 0x083a, 0xb0b2, 0x43c6, 0x18d1, 0x2883, 0xbf66, 0x4121, 0xbaeb, 0x402e, 0x40c5, 0xbaf2, 0x41a9, 0x1839, 0xba61, 0xb0cf, 0xb2ae, 0x40ef, 0x405a, 0xb207, 0x1bb5, 0xab4a, 0x4572, 0x41f5, 0x33d6, 0x40a5, 0x1a06, 0xb2c3, 0x403c, 0x4341, 0xa0bd, 0x42a7, 0xb276, 0x1daf, 0x37ad, 0xbf5e, 0x3150, 0x43eb, 0x4213, 0xbf66, 0xb21d, 0x429b, 0x4004, 0x4012, 0x41ab, 0x467e, 0xb2d5, 0x4213, 0x4229, 0x0fbc, 0xa2a8, 0xbfd8, 0x4042, 0x32a7, 0x3304, 0xbf8a, 0x125d, 0x3c49, 0x4596, 0x4060, 0xa368, 0x448b, 0x409c, 0x2f24, 0xb0ca, 0x42ff, 0xb22a, 0x0971, 0x469a, 0xb260, 0x4243, 0x2673, 0x0f84, 0xbf36, 0xa7f5, 0xa907, 0xb081, 0xb2b0, 0x4157, 0x1ad4, 0x4360, 0x1c8f, 0xba6a, 0x40ac, 0x429a, 0x425f, 0xb062, 0xb2cd, 0x4228, 0x1806, 0x1d41, 0xbf0d, 0xba56, 0xbf60, 0xb255, 0x1952, 0x19ca, 0x2d41, 0xb0a0, 0x45e8, 0x3a49, 0xba58, 0x41cc, 0xbf00, 0xb283, 0x462e, 0x18ad, 0xbaf6, 0x26f5, 0x1680, 0x41bb, 0xb2d7, 0x40a9, 0xbf59, 0x40a2, 0xba67, 0x0b0a, 0xa067, 0x1d7b, 0x42ad, 0x2159, 0xbf2a, 0xa8ac, 0x421b, 0x1c35, 0x4381, 0x424c, 0x4216, 0xba6b, 0x4262, 0x432d, 0xb2f3, 0x402b, 0xb29f, 0xb032, 0x0bae, 0x40ba, 0x41a6, 0x4063, 0x405b, 0xb051, 0xbf9e, 0x4242, 0xb2cd, 0x2966, 0x4388, 0xb281, 0xb24f, 0x442a, 0xbae4, 0xb0d7, 0x25c2, 0x4013, 0x308b, 0x4231, 0x3ca8, 0x1fc9, 0x4563, 0x4420, 0xbaf2, 0x0a8b, 0xa349, 0xbada, 0x4188, 0x04c9, 0xb0c5, 0x1db0, 0xb079, 0x4204, 0x4305, 0xbf53, 0xa0e7, 0x434e, 0x1fb1, 0xb079, 0x1c64, 0x43e0, 0x1c51, 0x3ea3, 0x428e, 0x409d, 0x4323, 0x43b9, 0x42fd, 0x22fb, 0xb228, 0x41bb, 0x4320, 0x40f4, 0x2bec, 0x45cc, 0x419d, 0xb2d8, 0x325d, 0x44c3, 0x201f, 0x41d5, 0xbf59, 0xbf70, 0x2ef4, 0xb27b, 0xb03b, 0xa979, 0x24f4, 0xba21, 0x44a8, 0x028d, 0xb207, 0xa84c, 0x409d, 0xbf80, 0xbf26, 0xb2ef, 0xb2c9, 0x2659, 0x430f, 0xb2eb, 0x41d1, 0x10fa, 0x2baa, 0x09a6, 0xb02f, 0xb2c9, 0xba2f, 0xba67, 0x4211, 0xbf57, 0x10f3, 0x185c, 0x419a, 0x4271, 0xad46, 0xb077, 0x4627, 0xb2e2, 0x1a5e, 0x42a8, 0x422f, 0xb27a, 0x40f5, 0x4085, 0x0255, 0xa249, 0x4270, 0x4392, 0xb0ff, 0xb2e3, 0x46b2, 0xb2d1, 0x4001, 0x4639, 0x1fa7, 0x42f2, 0xa470, 0xbaf5, 0xbfdd, 0x1d21, 0x3f09, 0x2d80, 0x1aa9, 0xbf1a, 0x4061, 0x400e, 0xae29, 0xa3a0, 0x4010, 0x1f99, 0x121b, 0x41a0, 0xb2af, 0xbad1, 0xbf1c, 0xb298, 0x3db6, 0xb05b, 0xba33, 0xa3d9, 0xa2e3, 0x4162, 0x4188, 0x413b, 0x2805, 0x40a0, 0x4151, 0x2a6d, 0xbae7, 0x444f, 0x430e, 0x413a, 0x1767, 0xb05b, 0x303f, 0x001c, 0x43b9, 0x28e3, 0x3dad, 0x420e, 0x4205, 0xbf03, 0xb21b, 0x022e, 0x44d1, 0xb283, 0xb2c7, 0x0c1a, 0x4107, 0x198e, 0x43e8, 0x1c24, 0x3d5c, 0xa5ee, 0xbfd0, 0xbf43, 0x2a0c, 0x40ac, 0x4414, 0xa9ce, 0xbf2c, 0xbac9, 0x396d, 0x42fa, 0xbf0b, 0x4292, 0x43ba, 0x424a, 0xb25f, 0x42d6, 0x4188, 0x2f30, 0xb081, 0x38a0, 0x4213, 0x4130, 0x415f, 0x2c4c, 0xadab, 0xba23, 0xadc1, 0xb25f, 0xabf8, 0x45cd, 0x416d, 0x40d1, 0x403b, 0x1dc9, 0x4150, 0xba03, 0xb076, 0xbaf1, 0xbf2d, 0x40dc, 0x0d13, 0x18a9, 0x43a4, 0xb076, 0xba07, 0xb27d, 0x0b40, 0x3d88, 0x40a7, 0x0533, 0x2c71, 0x41cc, 0x42f9, 0x1ef9, 0x4583, 0x41e2, 0xba3b, 0xba44, 0x41b1, 0x42f2, 0xbfdf, 0xb23d, 0xbfc0, 0x071e, 0x19b6, 0x1a1f, 0x417f, 0xb268, 0x4132, 0xbaf6, 0x3af3, 0x1f37, 0x4352, 0x437d, 0xbfa2, 0x05b2, 0x43cb, 0x42a5, 0x43e5, 0x42ac, 0xa525, 0x18ad, 0xbace, 0x2d15, 0x1f1e, 0x01c6, 0xa4ad, 0x433a, 0x436a, 0x1e2a, 0x4389, 0x1898, 0xb2a5, 0x1a20, 0x42ec, 0xa6ed, 0xb038, 0xbacd, 0xbf8e, 0x41b9, 0x43ea, 0x42ba, 0x30cd, 0xaff4, 0x42fb, 0x460d, 0xbfa0, 0x1f87, 0x122b, 0x1b3f, 0x1cd8, 0x4109, 0x1cf9, 0x4146, 0x27b9, 0x4637, 0x43f7, 0xba68, 0x459b, 0xbf8d, 0xbf60, 0x1be6, 0x4691, 0xb267, 0x4062, 0xb2b4, 0xb2ca, 0x4198, 0x4331, 0x2b7d, 0xbf60, 0xbadc, 0xb221, 0x1ca0, 0xb200, 0x4007, 0x1e11, 0x43f6, 0x43af, 0x2b4b, 0x41d0, 0x21a9, 0x43d0, 0x43d1, 0xbfd2, 0x410a, 0xb0a3, 0xb266, 0x4153, 0x42fa, 0x371e, 0x4037, 0x1c33, 0x43de, 0xb0ef, 0xb059, 0x43fe, 0x410f, 0x0ed6, 0xb2ef, 0xbf33, 0xb080, 0xb023, 0x416c, 0x4390, 0x4484, 0x059f, 0x03c7, 0x4176, 0x425b, 0x42b5, 0xbf0b, 0x4680, 0x4202, 0x1ee9, 0x456a, 0xaae9, 0x4333, 0x1c96, 0x20f2, 0x3d1d, 0x434e, 0x39dd, 0x40c9, 0x433b, 0xbf21, 0x444b, 0xb295, 0x3462, 0x3275, 0x4110, 0xb214, 0x1edc, 0x4136, 0xbad1, 0x43a5, 0xb2ae, 0xadf4, 0x40ac, 0xa037, 0x4199, 0x41d7, 0x426e, 0xb2de, 0x43eb, 0xba38, 0xb253, 0x4092, 0xbfba, 0x413c, 0x4238, 0x41a0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd919f6a3, 0x9e176573, 0x3795cb44, 0x666e776e, 0x370d6712, 0xb9f52030, 0x59d84426, 0xcda6b649, 0x3c751555, 0x13a5d9a9, 0x68b254f2, 0x4c783b43, 0xb4ebd830, 0x01180a73, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0x0080fb0e, 0x005002e4, 0x00000000, 0x00000024, 0x00000000, 0x011021db, 0x0000003d, 0x0ffb8000, 0x0001470c, 0xfff80698, 0x00000003, 0x4c784f07, 0xb4ebd7a0, 0x01101e0b, 0x00000000, 0x400001d0 }, + Instructions = [0x185d, 0x4287, 0x405b, 0xb0b0, 0x192e, 0xb012, 0x414b, 0x436f, 0xa9b7, 0x438f, 0x108e, 0xb067, 0x418e, 0x4013, 0x3736, 0x4549, 0x4259, 0xb2c8, 0x42a8, 0x415c, 0x43a9, 0xb28b, 0xbfb3, 0xb2f8, 0x43c9, 0x0a66, 0x4216, 0xbf64, 0x1ee1, 0x42e3, 0xb2bd, 0x00ef, 0xbaf4, 0x40be, 0x4353, 0x44a9, 0x4104, 0x1b6b, 0x403d, 0xb266, 0x078d, 0xba6b, 0x3c0d, 0x05b8, 0xbfbd, 0xbaee, 0x4277, 0x42c0, 0x0958, 0x4254, 0x40a3, 0x4250, 0xa6f7, 0x4050, 0x4541, 0xb211, 0x14d3, 0x41ae, 0x46c8, 0xba25, 0x3f96, 0x0fc8, 0xb246, 0xbf45, 0x45ce, 0x130d, 0xbf00, 0x2176, 0x404f, 0x435a, 0xafd3, 0x4093, 0xb2b3, 0x4202, 0x41df, 0x4089, 0x43d4, 0x0739, 0xaa0d, 0x3f8f, 0xba47, 0x1a4c, 0xb224, 0xbf5d, 0xb20e, 0x1e5c, 0x46a1, 0xba65, 0x40af, 0x41e6, 0x4076, 0xb23a, 0x3fa5, 0x438d, 0xba57, 0xae3f, 0x4141, 0xb2f9, 0xbfe0, 0x43d0, 0x1ec1, 0xb2b6, 0xb28b, 0x1ded, 0x055e, 0x41f0, 0x40f8, 0x0692, 0x4051, 0xbf97, 0x4388, 0xacb2, 0xb04b, 0x19ce, 0x32d5, 0x0b66, 0x4368, 0x1627, 0xb288, 0xb241, 0x4042, 0x2698, 0xb0b7, 0x429f, 0x262d, 0x40b3, 0xb065, 0x42f4, 0xbf14, 0x4009, 0x1661, 0x4304, 0x430d, 0xbfb5, 0x417a, 0x428d, 0x1d15, 0x0175, 0x4282, 0x1183, 0xb22c, 0x1fbc, 0x4352, 0x0e63, 0xa412, 0xba64, 0xa285, 0x41f2, 0x41de, 0x4372, 0xbafe, 0x00ef, 0x40d8, 0xb29d, 0x41a1, 0x44b5, 0xbfaa, 0x4668, 0xbaf8, 0x4180, 0x4462, 0x1dbb, 0x4492, 0x4022, 0xba5c, 0x4070, 0xb2b6, 0x4321, 0x4314, 0x4330, 0xa81d, 0x38c2, 0x427a, 0x417c, 0x4691, 0x4111, 0x4065, 0x1c3d, 0xb02f, 0x424a, 0x4047, 0x4349, 0x411a, 0x40fa, 0xbac1, 0xbf7e, 0x36e7, 0x4189, 0x233b, 0xb032, 0x4071, 0x2ae4, 0x2b36, 0x4290, 0x310b, 0xb22c, 0x430a, 0x4204, 0xbf7f, 0x172e, 0xba71, 0x08ee, 0x43bf, 0x1b31, 0xb068, 0x42b5, 0xbf00, 0x4545, 0xb08e, 0xa37d, 0xb234, 0xb011, 0xbfe4, 0xb208, 0xa6ee, 0x0e43, 0x107e, 0x405d, 0x1c5f, 0x0f55, 0x0342, 0x44cd, 0x2b29, 0xb086, 0xa40a, 0xb21d, 0x4028, 0x426b, 0x2a20, 0x4267, 0x406f, 0x419f, 0x4274, 0x4006, 0xa492, 0x18a2, 0x4177, 0x4140, 0x42a6, 0xbf83, 0x2b7b, 0x4242, 0x40a5, 0x079e, 0x46e0, 0x1907, 0x44f5, 0x094d, 0xb295, 0x438d, 0x409c, 0x465c, 0x43db, 0x36e9, 0xba2d, 0xbf95, 0x430f, 0x4129, 0xb2d0, 0x46dc, 0xa2f1, 0xbf16, 0x433f, 0xb27b, 0x4348, 0xaf01, 0xbf35, 0xba7d, 0x1b43, 0xbaf0, 0x4006, 0x2e62, 0x1e1d, 0xae4d, 0xa032, 0x40fd, 0x42bb, 0x4395, 0x423b, 0x420c, 0x41c1, 0x42fc, 0x466f, 0x4604, 0x41be, 0x4283, 0x426c, 0xbfd3, 0xb2d1, 0x4025, 0x42e2, 0x1d04, 0x228c, 0xb052, 0x37a0, 0x1c67, 0x403a, 0xbfa6, 0x0a6e, 0xb06e, 0xb0b7, 0xaeb4, 0x30fd, 0x423a, 0x41ed, 0x4040, 0x4116, 0x3637, 0x4302, 0xb2f8, 0x1e49, 0xb2e1, 0x437a, 0x05e7, 0x408c, 0xb02a, 0xba09, 0x402c, 0x43db, 0x4062, 0x4664, 0x38d1, 0xbfcb, 0xb012, 0x4595, 0xb2d4, 0xb224, 0xba4c, 0xbf06, 0x088c, 0x1077, 0x414a, 0xafd7, 0x1496, 0xbfa0, 0x45b0, 0x1c0c, 0x3354, 0x43e0, 0x1eab, 0x4281, 0x45c1, 0x406b, 0x075b, 0x3898, 0x4242, 0x430f, 0x4612, 0x40fb, 0xb03f, 0xb0f6, 0x400e, 0x4316, 0x418c, 0x270c, 0xbf93, 0xbac5, 0x18ed, 0xa70b, 0x42f6, 0x4238, 0xbf76, 0x3431, 0x4200, 0x46b8, 0x411c, 0x43a6, 0x439b, 0xbaff, 0x1a05, 0x404b, 0xb238, 0xb2f6, 0xba00, 0x0df6, 0x4021, 0x409b, 0xba4f, 0x1fb3, 0x252f, 0x4018, 0xa721, 0x0f4b, 0x40b9, 0x4211, 0x40d7, 0xba5c, 0xb0f1, 0xbfdf, 0x2384, 0xba0a, 0x435a, 0x42d7, 0x4653, 0x401e, 0xac83, 0x4073, 0xba4b, 0xb0df, 0x0b60, 0x4316, 0x4624, 0xa092, 0x0bf5, 0xbfb0, 0xb057, 0x42d6, 0x42fe, 0x156c, 0x41d6, 0xb0bb, 0x13d3, 0x4248, 0xbfbb, 0x437d, 0x0a8b, 0x4317, 0x40db, 0x42b3, 0x40cd, 0x4095, 0x4362, 0x42d2, 0x4475, 0x4137, 0xae4f, 0x400e, 0x0014, 0xbf7c, 0x420f, 0x1b5a, 0xbf70, 0x18ef, 0xb07e, 0x44fb, 0x43cf, 0x404b, 0x4171, 0xb0e2, 0xba20, 0xa7cc, 0x4580, 0xbf0e, 0x385a, 0x43d1, 0xac36, 0x434c, 0xb0d6, 0x4284, 0x12a5, 0x43bd, 0xb26e, 0x438a, 0xb059, 0x4370, 0x18bd, 0x362f, 0x4309, 0xb0fc, 0xb2d3, 0xbf13, 0xb23e, 0x4285, 0xb0fb, 0xba0b, 0x41b6, 0x04d1, 0xb249, 0x1ee9, 0xb2aa, 0x4340, 0x4285, 0x43e9, 0xbac6, 0xba62, 0x40d2, 0xb23d, 0xb0f0, 0x1cca, 0x083a, 0xb0b2, 0x43c6, 0x18d1, 0x2883, 0xbf66, 0x4121, 0xbaeb, 0x402e, 0x40c5, 0xbaf2, 0x41a9, 0x1839, 0xba61, 0xb0cf, 0xb2ae, 0x40ef, 0x405a, 0xb207, 0x1bb5, 0xab4a, 0x4572, 0x41f5, 0x33d6, 0x40a5, 0x1a06, 0xb2c3, 0x403c, 0x4341, 0xa0bd, 0x42a7, 0xb276, 0x1daf, 0x37ad, 0xbf5e, 0x3150, 0x43eb, 0x4213, 0xbf66, 0xb21d, 0x429b, 0x4004, 0x4012, 0x41ab, 0x467e, 0xb2d5, 0x4213, 0x4229, 0x0fbc, 0xa2a8, 0xbfd8, 0x4042, 0x32a7, 0x3304, 0xbf8a, 0x125d, 0x3c49, 0x4596, 0x4060, 0xa368, 0x448b, 0x409c, 0x2f24, 0xb0ca, 0x42ff, 0xb22a, 0x0971, 0x469a, 0xb260, 0x4243, 0x2673, 0x0f84, 0xbf36, 0xa7f5, 0xa907, 0xb081, 0xb2b0, 0x4157, 0x1ad4, 0x4360, 0x1c8f, 0xba6a, 0x40ac, 0x429a, 0x425f, 0xb062, 0xb2cd, 0x4228, 0x1806, 0x1d41, 0xbf0d, 0xba56, 0xbf60, 0xb255, 0x1952, 0x19ca, 0x2d41, 0xb0a0, 0x45e8, 0x3a49, 0xba58, 0x41cc, 0xbf00, 0xb283, 0x462e, 0x18ad, 0xbaf6, 0x26f5, 0x1680, 0x41bb, 0xb2d7, 0x40a9, 0xbf59, 0x40a2, 0xba67, 0x0b0a, 0xa067, 0x1d7b, 0x42ad, 0x2159, 0xbf2a, 0xa8ac, 0x421b, 0x1c35, 0x4381, 0x424c, 0x4216, 0xba6b, 0x4262, 0x432d, 0xb2f3, 0x402b, 0xb29f, 0xb032, 0x0bae, 0x40ba, 0x41a6, 0x4063, 0x405b, 0xb051, 0xbf9e, 0x4242, 0xb2cd, 0x2966, 0x4388, 0xb281, 0xb24f, 0x442a, 0xbae4, 0xb0d7, 0x25c2, 0x4013, 0x308b, 0x4231, 0x3ca8, 0x1fc9, 0x4563, 0x4420, 0xbaf2, 0x0a8b, 0xa349, 0xbada, 0x4188, 0x04c9, 0xb0c5, 0x1db0, 0xb079, 0x4204, 0x4305, 0xbf53, 0xa0e7, 0x434e, 0x1fb1, 0xb079, 0x1c64, 0x43e0, 0x1c51, 0x3ea3, 0x428e, 0x409d, 0x4323, 0x43b9, 0x42fd, 0x22fb, 0xb228, 0x41bb, 0x4320, 0x40f4, 0x2bec, 0x45cc, 0x419d, 0xb2d8, 0x325d, 0x44c3, 0x201f, 0x41d5, 0xbf59, 0xbf70, 0x2ef4, 0xb27b, 0xb03b, 0xa979, 0x24f4, 0xba21, 0x44a8, 0x028d, 0xb207, 0xa84c, 0x409d, 0xbf80, 0xbf26, 0xb2ef, 0xb2c9, 0x2659, 0x430f, 0xb2eb, 0x41d1, 0x10fa, 0x2baa, 0x09a6, 0xb02f, 0xb2c9, 0xba2f, 0xba67, 0x4211, 0xbf57, 0x10f3, 0x185c, 0x419a, 0x4271, 0xad46, 0xb077, 0x4627, 0xb2e2, 0x1a5e, 0x42a8, 0x422f, 0xb27a, 0x40f5, 0x4085, 0x0255, 0xa249, 0x4270, 0x4392, 0xb0ff, 0xb2e3, 0x46b2, 0xb2d1, 0x4001, 0x4639, 0x1fa7, 0x42f2, 0xa470, 0xbaf5, 0xbfdd, 0x1d21, 0x3f09, 0x2d80, 0x1aa9, 0xbf1a, 0x4061, 0x400e, 0xae29, 0xa3a0, 0x4010, 0x1f99, 0x121b, 0x41a0, 0xb2af, 0xbad1, 0xbf1c, 0xb298, 0x3db6, 0xb05b, 0xba33, 0xa3d9, 0xa2e3, 0x4162, 0x4188, 0x413b, 0x2805, 0x40a0, 0x4151, 0x2a6d, 0xbae7, 0x444f, 0x430e, 0x413a, 0x1767, 0xb05b, 0x303f, 0x001c, 0x43b9, 0x28e3, 0x3dad, 0x420e, 0x4205, 0xbf03, 0xb21b, 0x022e, 0x44d1, 0xb283, 0xb2c7, 0x0c1a, 0x4107, 0x198e, 0x43e8, 0x1c24, 0x3d5c, 0xa5ee, 0xbfd0, 0xbf43, 0x2a0c, 0x40ac, 0x4414, 0xa9ce, 0xbf2c, 0xbac9, 0x396d, 0x42fa, 0xbf0b, 0x4292, 0x43ba, 0x424a, 0xb25f, 0x42d6, 0x4188, 0x2f30, 0xb081, 0x38a0, 0x4213, 0x4130, 0x415f, 0x2c4c, 0xadab, 0xba23, 0xadc1, 0xb25f, 0xabf8, 0x45cd, 0x416d, 0x40d1, 0x403b, 0x1dc9, 0x4150, 0xba03, 0xb076, 0xbaf1, 0xbf2d, 0x40dc, 0x0d13, 0x18a9, 0x43a4, 0xb076, 0xba07, 0xb27d, 0x0b40, 0x3d88, 0x40a7, 0x0533, 0x2c71, 0x41cc, 0x42f9, 0x1ef9, 0x4583, 0x41e2, 0xba3b, 0xba44, 0x41b1, 0x42f2, 0xbfdf, 0xb23d, 0xbfc0, 0x071e, 0x19b6, 0x1a1f, 0x417f, 0xb268, 0x4132, 0xbaf6, 0x3af3, 0x1f37, 0x4352, 0x437d, 0xbfa2, 0x05b2, 0x43cb, 0x42a5, 0x43e5, 0x42ac, 0xa525, 0x18ad, 0xbace, 0x2d15, 0x1f1e, 0x01c6, 0xa4ad, 0x433a, 0x436a, 0x1e2a, 0x4389, 0x1898, 0xb2a5, 0x1a20, 0x42ec, 0xa6ed, 0xb038, 0xbacd, 0xbf8e, 0x41b9, 0x43ea, 0x42ba, 0x30cd, 0xaff4, 0x42fb, 0x460d, 0xbfa0, 0x1f87, 0x122b, 0x1b3f, 0x1cd8, 0x4109, 0x1cf9, 0x4146, 0x27b9, 0x4637, 0x43f7, 0xba68, 0x459b, 0xbf8d, 0xbf60, 0x1be6, 0x4691, 0xb267, 0x4062, 0xb2b4, 0xb2ca, 0x4198, 0x4331, 0x2b7d, 0xbf60, 0xbadc, 0xb221, 0x1ca0, 0xb200, 0x4007, 0x1e11, 0x43f6, 0x43af, 0x2b4b, 0x41d0, 0x21a9, 0x43d0, 0x43d1, 0xbfd2, 0x410a, 0xb0a3, 0xb266, 0x4153, 0x42fa, 0x371e, 0x4037, 0x1c33, 0x43de, 0xb0ef, 0xb059, 0x43fe, 0x410f, 0x0ed6, 0xb2ef, 0xbf33, 0xb080, 0xb023, 0x416c, 0x4390, 0x4484, 0x059f, 0x03c7, 0x4176, 0x425b, 0x42b5, 0xbf0b, 0x4680, 0x4202, 0x1ee9, 0x456a, 0xaae9, 0x4333, 0x1c96, 0x20f2, 0x3d1d, 0x434e, 0x39dd, 0x40c9, 0x433b, 0xbf21, 0x444b, 0xb295, 0x3462, 0x3275, 0x4110, 0xb214, 0x1edc, 0x4136, 0xbad1, 0x43a5, 0xb2ae, 0xadf4, 0x40ac, 0xa037, 0x4199, 0x41d7, 0x426e, 0xb2de, 0x43eb, 0xba38, 0xb253, 0x4092, 0xbfba, 0x413c, 0x4238, 0x41a0, 0x4770, 0xe7fe + ], + StartRegs = [0xd919f6a3, 0x9e176573, 0x3795cb44, 0x666e776e, 0x370d6712, 0xb9f52030, 0x59d84426, 0xcda6b649, 0x3c751555, 0x13a5d9a9, 0x68b254f2, 0x4c783b43, 0xb4ebd830, 0x01180a73, 0x00000000, 0x900001f0 + ], + FinalRegs = [0x0080fb0e, 0x005002e4, 0x00000000, 0x00000024, 0x00000000, 0x011021db, 0x0000003d, 0x0ffb8000, 0x0001470c, 0xfff80698, 0x00000003, 0x4c784f07, 0xb4ebd7a0, 0x01101e0b, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x4139, 0x0239, 0x4470, 0x43b0, 0xa91a, 0xb068, 0x1c4a, 0x2666, 0x43c6, 0xa8cd, 0x4184, 0xbafc, 0xb29e, 0x42dd, 0x1781, 0x4033, 0x35f4, 0x31c2, 0xa3f5, 0xbf3a, 0x1884, 0xbafc, 0x424b, 0x42ab, 0x0955, 0x432a, 0x43f5, 0x410f, 0x4694, 0x401b, 0x41c7, 0xb058, 0x419f, 0x41f2, 0xb2fc, 0x1fd1, 0x464b, 0xbfb0, 0x41c5, 0x2b5f, 0x4330, 0x4152, 0xbfbf, 0xbf70, 0x43fb, 0x0114, 0x439b, 0x4376, 0x35bb, 0xa42b, 0x4130, 0x25df, 0x2ee3, 0x42a8, 0x4128, 0x42df, 0x4220, 0x43ec, 0x2ecd, 0xb291, 0xbf4f, 0xab48, 0x41da, 0x4198, 0x4214, 0x40c7, 0x3fb9, 0x424e, 0x414e, 0x01e3, 0x379f, 0x44b2, 0x4166, 0x42e8, 0x4208, 0xb2aa, 0xbf6f, 0xb05e, 0x40da, 0x463a, 0x193e, 0x42ef, 0x40ed, 0x1cc4, 0x4272, 0x1550, 0x42b1, 0x3bbb, 0x227a, 0x449c, 0x42b0, 0x41bf, 0xa310, 0xb0a6, 0x439e, 0x42a2, 0x4392, 0xbf1d, 0x2af5, 0xb2b1, 0x426b, 0x43dd, 0x4204, 0x466b, 0xb060, 0xbac4, 0xb0d2, 0x4320, 0x4006, 0x4303, 0xbf83, 0xa242, 0x42e1, 0xba65, 0xa4c1, 0xbfe0, 0xb26a, 0x3dc0, 0x1e3f, 0x423d, 0x439e, 0xba4e, 0xab3b, 0xba29, 0x4606, 0x41f2, 0xbac9, 0xb23d, 0xaac3, 0x19e2, 0xbf78, 0x1ad9, 0x4089, 0xba78, 0x46a3, 0xa084, 0xb27c, 0xbf72, 0x1439, 0x4000, 0xb275, 0x40cc, 0x4252, 0xbf7b, 0xbad4, 0x43d2, 0x1ce1, 0x4562, 0xb20b, 0x2fbd, 0xbadd, 0xba61, 0x2a48, 0x405a, 0x4343, 0xbf42, 0xb233, 0x4261, 0x423a, 0x42d4, 0x4330, 0x46f2, 0xbaf3, 0xb240, 0xba69, 0xba78, 0x091c, 0xb296, 0xbae4, 0x2223, 0x40f9, 0x42db, 0x1838, 0xb21f, 0x03b3, 0x43a0, 0xb2eb, 0xbf0f, 0x42ac, 0xb22e, 0xb013, 0xa332, 0xb2d0, 0xb271, 0x110f, 0x2fc7, 0x4668, 0x43dc, 0x41ef, 0x3a07, 0xbacf, 0x4158, 0x4129, 0x00ac, 0xb254, 0x416a, 0x4312, 0xad39, 0x4070, 0x1d12, 0x43e3, 0xaf2e, 0xb2fb, 0x250c, 0xa0c5, 0xbf96, 0x3811, 0x43a2, 0xa7d3, 0x1a37, 0x41b5, 0x414d, 0x43b6, 0xbacc, 0xa587, 0xbf35, 0x1ea8, 0x3706, 0xb0d5, 0x42f9, 0x405f, 0x426e, 0x1c33, 0x4369, 0xb01e, 0x4611, 0xa7cc, 0xbf9d, 0x1e4f, 0x1939, 0xbfe0, 0x43e7, 0x445d, 0xbfbc, 0x4146, 0x4093, 0xb255, 0x0325, 0x42bf, 0xbfe1, 0x45cb, 0x1a8f, 0xb2ca, 0x1912, 0x007c, 0xba33, 0x3771, 0x4355, 0xaa43, 0xbf00, 0xbad0, 0xbf93, 0x1e05, 0x1bb5, 0xb28c, 0x296d, 0xbf9c, 0xafa4, 0xb2e5, 0x4672, 0xbf27, 0xba7a, 0x419e, 0x4047, 0x4025, 0xb238, 0x4046, 0xb211, 0x3e6a, 0x4058, 0xbf32, 0x45c6, 0x3629, 0x42f1, 0x41da, 0xb2c1, 0x4441, 0x412d, 0xb09f, 0x43d8, 0x41c0, 0x40cb, 0x25d4, 0xa604, 0xa1e9, 0xb2b3, 0x42a5, 0x42c7, 0xb223, 0xb2f4, 0x403d, 0x41f9, 0x417e, 0xbf90, 0xbf3c, 0x1adc, 0x41c3, 0x0b57, 0xa98b, 0xace1, 0x19d8, 0x42bc, 0x141e, 0xbfb6, 0xb0bf, 0xba07, 0x425b, 0x3db1, 0x4186, 0x4052, 0x42c9, 0x114a, 0xb2c7, 0x4461, 0xbac5, 0x40f0, 0xa656, 0xa678, 0xb2a0, 0x1fdb, 0x186e, 0x4549, 0xb0c9, 0x2198, 0xb048, 0x4316, 0xa29b, 0xb2df, 0xb269, 0x1cf6, 0xbf8a, 0x418e, 0x012f, 0x1ff4, 0xb060, 0xad7c, 0x42a8, 0x42dd, 0x420e, 0x4153, 0xae8b, 0x03f1, 0x439f, 0x41f3, 0xbf83, 0x1395, 0xb281, 0x41f3, 0x19e3, 0x4002, 0x2ac4, 0x3a17, 0x4225, 0x4007, 0x4201, 0x45b4, 0xb29c, 0x410f, 0xa3ad, 0x43d4, 0xb2b9, 0x1d09, 0xb082, 0x4335, 0xbf58, 0xb297, 0xb0c3, 0x4240, 0xba79, 0xb230, 0xba2a, 0xbf57, 0xb0a6, 0xa975, 0x1f5b, 0x42e8, 0x190f, 0xbfc3, 0x420a, 0xb21a, 0x2c87, 0x417e, 0xbfe0, 0x40b1, 0x339a, 0x2f4c, 0x4353, 0x1b7c, 0x4349, 0x4335, 0x41c6, 0x4283, 0xa0bc, 0xa2da, 0x413b, 0x42c5, 0xbf8b, 0x4572, 0x061e, 0xbf90, 0x4159, 0xb280, 0xb0ef, 0x204a, 0x1dfe, 0x068c, 0x4122, 0x43be, 0x4286, 0xba1e, 0x4333, 0xb272, 0xa671, 0x4002, 0x42ed, 0x14b2, 0x32d9, 0xbf2c, 0x358d, 0x4615, 0x410b, 0x3ecd, 0xb223, 0x2f09, 0x1b6c, 0xbf2c, 0xbae5, 0x1cee, 0xb2fe, 0x42ea, 0xb045, 0x41ca, 0x4016, 0x10c6, 0x0828, 0xabe4, 0x123d, 0xa82a, 0xb04d, 0x45b0, 0xbfb0, 0x4118, 0xba15, 0x442d, 0x4098, 0x2145, 0x1a40, 0x1935, 0x394e, 0x45c2, 0xbf19, 0x402e, 0xb2ba, 0x42cb, 0x40d9, 0x4193, 0x41e8, 0x4261, 0x167e, 0xbad3, 0xbf1a, 0xb24d, 0x09c9, 0xb27f, 0x0295, 0x417d, 0x4362, 0x40a0, 0x4636, 0xba62, 0x2a28, 0x405d, 0x1ac1, 0x2e7e, 0x4027, 0x4222, 0xba7d, 0x429c, 0x40d6, 0x424b, 0x4430, 0xb042, 0xa73d, 0x406e, 0x3722, 0xb2a9, 0x4014, 0x44b1, 0xbfac, 0x4035, 0x4326, 0x0c54, 0x4007, 0xba2c, 0x43a7, 0x4333, 0x4092, 0xa7c2, 0xbf01, 0x27cb, 0xb047, 0x1a86, 0xbade, 0xb2b7, 0x2147, 0x0e71, 0xb295, 0xba38, 0x4388, 0x159c, 0x416b, 0xba1a, 0xb0d2, 0x0162, 0xba33, 0x40cd, 0x465c, 0x420f, 0x368f, 0x42bf, 0xbf60, 0x40f3, 0x4002, 0x0fed, 0x4165, 0x415c, 0xba29, 0xbfcd, 0x42b2, 0x40d4, 0xb0ac, 0x43f7, 0x12b0, 0x416d, 0x2be8, 0x4103, 0x408e, 0x43e6, 0x40d5, 0x427a, 0xba11, 0x1c74, 0x40b9, 0x4066, 0x4254, 0x4081, 0x2821, 0x4003, 0x44ab, 0x431a, 0x4282, 0x4569, 0x2f84, 0xb2ef, 0x4340, 0xb218, 0xbf8f, 0xb024, 0x1c87, 0x289f, 0x43d9, 0xba0a, 0x421d, 0x44f0, 0x42a2, 0x41b4, 0xa51b, 0x1c28, 0xa535, 0x40cb, 0x44b9, 0x40ed, 0x0bbe, 0x413e, 0x1eb8, 0x41ad, 0x1dac, 0x3f25, 0xb0ec, 0x12e7, 0xab9a, 0xbf77, 0xbae9, 0x1b49, 0x40a5, 0x40d7, 0x4392, 0x43e6, 0x190e, 0x40b0, 0xb2dc, 0x425f, 0x41ad, 0x10b1, 0x40f4, 0x43b7, 0x4037, 0xb03c, 0x1a72, 0x407b, 0xba50, 0x466e, 0xbf11, 0xbad4, 0xa393, 0xaa42, 0x41c5, 0x413c, 0x410a, 0xba1f, 0xba17, 0x41f4, 0x2138, 0xbfe0, 0x1ace, 0xba65, 0x40cc, 0x44e1, 0x1646, 0x4228, 0x43b7, 0xa7cf, 0x4160, 0xbfa8, 0xba18, 0x43f1, 0x1ed8, 0x4355, 0x2fce, 0xbacb, 0x41c5, 0x42c2, 0x44f8, 0x1f13, 0xbf5f, 0xaa2a, 0xb2fd, 0x1405, 0x25d1, 0xa644, 0x4134, 0x4280, 0x19f2, 0x0a34, 0x1b5e, 0x4137, 0xba1e, 0xba4c, 0x424c, 0x43d3, 0xb062, 0xb2b4, 0x43c3, 0x42a4, 0xb200, 0x4219, 0x4646, 0xa445, 0x4248, 0xbfe0, 0xbf05, 0x415f, 0x1832, 0x439d, 0xaaa6, 0xb234, 0x43b7, 0xb01a, 0xba02, 0x1f57, 0x43c9, 0x46c0, 0x4558, 0x4116, 0x1707, 0xb0b8, 0xbfc0, 0x41c0, 0x4032, 0x112c, 0x44e4, 0x4290, 0x04f6, 0xa289, 0x4226, 0x43bb, 0x1ee1, 0x434e, 0xbf66, 0x4210, 0x425f, 0xa705, 0x1aff, 0x31fd, 0xbf0e, 0x4295, 0x4107, 0xb283, 0x4067, 0x1dec, 0xb0b8, 0xb089, 0x2a04, 0x4172, 0xbfc0, 0x4217, 0xb2ea, 0x41a8, 0x41a2, 0x1610, 0x4294, 0xb016, 0x406e, 0x4281, 0x42a7, 0x1f7a, 0x1866, 0x4047, 0x4672, 0x20bc, 0x420b, 0x198a, 0xbf8a, 0x43f3, 0x3aed, 0xbfb0, 0x4612, 0x408c, 0x43e6, 0x0f02, 0x4214, 0xbfb5, 0xae8e, 0x408a, 0x41d9, 0x02f0, 0x341b, 0xb07d, 0x413b, 0xb0d9, 0xb2c5, 0x42f0, 0xb2f4, 0xba45, 0xa723, 0x42f1, 0x19aa, 0x4005, 0xb00b, 0x42ec, 0x4239, 0x43c4, 0x40ed, 0xaaa1, 0x1ff0, 0x4215, 0xb005, 0x414d, 0xb037, 0x43d1, 0xbf5b, 0xb24a, 0xb2cc, 0xb0e1, 0xb25e, 0x4298, 0x427a, 0xb0e5, 0x42be, 0x1cf1, 0x43b3, 0xb0b9, 0x4242, 0xbf0b, 0x435b, 0x14c6, 0x43d8, 0xb2e2, 0x414c, 0x4165, 0xad8d, 0xb2f3, 0xb053, 0x42a1, 0x4301, 0xa3c4, 0x43fe, 0x2e37, 0xb019, 0x4112, 0xba58, 0x40c9, 0x4204, 0x1870, 0x4592, 0x4360, 0x24a0, 0x42ab, 0x4066, 0x404b, 0x4144, 0x4252, 0x422c, 0xbfa5, 0x1caa, 0x02c7, 0x09fa, 0x4364, 0x43fe, 0x3b92, 0x4616, 0x4376, 0x1be2, 0x40ee, 0x34a4, 0x2c90, 0xba42, 0x42de, 0x435b, 0xb272, 0x413d, 0x1f64, 0x4099, 0x42b2, 0x43bb, 0x43fb, 0xbfd1, 0xba53, 0xb067, 0x42a2, 0x0f18, 0x43cc, 0x1f8e, 0x1dfe, 0xb28b, 0xbad5, 0x188f, 0x4363, 0x4299, 0x12b3, 0x0831, 0x41fb, 0x40fd, 0xbfa9, 0xba30, 0x4183, 0x42ad, 0x40b2, 0x418b, 0x42ea, 0xb0fb, 0x42aa, 0x42df, 0x1f34, 0x0bd2, 0x3df7, 0xb215, 0xba60, 0xb28d, 0x30e7, 0xb2a0, 0x4567, 0x42a8, 0xbfc3, 0xb0a0, 0x41c7, 0x0f8a, 0x16a1, 0x4168, 0x445e, 0xb236, 0x4271, 0xbf39, 0x4312, 0xbad2, 0x42e4, 0x1cb2, 0xb2c7, 0xbaee, 0x431c, 0x42dd, 0x42f2, 0xb262, 0x403a, 0x1dfb, 0x4330, 0x36a0, 0xba46, 0xb224, 0xbf56, 0x1b15, 0x3160, 0x40e6, 0xb025, 0x1390, 0x42a7, 0x078b, 0x4263, 0x141e, 0x0633, 0x4281, 0x40f5, 0x422b, 0x45f1, 0xba2b, 0x1a8a, 0x41a8, 0xb275, 0xb2a3, 0xb22a, 0xbf7a, 0x4540, 0x43da, 0x42da, 0xaa06, 0xb284, 0x3f4f, 0x42ae, 0x40a2, 0xbfb1, 0x4382, 0xbaf0, 0x1db0, 0x43af, 0x0b87, 0x433d, 0x461a, 0x2502, 0xb234, 0x3130, 0xb2b7, 0x43d2, 0xba2f, 0x37df, 0x3ab5, 0xafcb, 0x0f62, 0x46f8, 0x404f, 0x4560, 0x43fd, 0xbf59, 0x4237, 0x414e, 0x3b8d, 0x43e4, 0x4370, 0x2d12, 0xbf2b, 0x42cd, 0xba1a, 0xb2f9, 0xb2b0, 0xb0ea, 0xbac2, 0xb284, 0xaa89, 0x4041, 0x22ca, 0xb229, 0xafec, 0x438d, 0xbae3, 0x4314, 0x0739, 0xb229, 0xb2f4, 0xbf45, 0x189c, 0x43db, 0x4116, 0x409d, 0xb2b0, 0x4227, 0xb297, 0x469b, 0x31d0, 0x2360, 0x462f, 0xbacf, 0x4277, 0x305e, 0x2d0f, 0x381c, 0xbfcf, 0xb2f4, 0x42db, 0x435f, 0x3aaa, 0xb0ee, 0x44f4, 0x1b64, 0x4372, 0xb284, 0x40cd, 0x46d4, 0x13bf, 0xba5d, 0x4092, 0xba52, 0x41e2, 0x1dc6, 0xbf7d, 0x1eb2, 0x2606, 0x401f, 0x1d2f, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xb856fb9b, 0x192a6db9, 0x8500700e, 0x51377f3b, 0xcf8d1a8e, 0xeb924976, 0xf20bcc21, 0xd216b99a, 0xee51a075, 0x8bdc3aa5, 0x4c0f0144, 0xdedd3f79, 0xfe5590cd, 0x20762c18, 0x00000000, 0x600001f0 }, - FinalRegs = new uint[] { 0x00010041, 0x000000d0, 0x00010046, 0x00000060, 0x00000041, 0x00006000, 0x00000006, 0x00000000, 0x00001756, 0xad5388b8, 0x00000000, 0x000058ca, 0x00000000, 0x20762a7c, 0x00000000, 0x000001d0 }, + Instructions = [0x4139, 0x0239, 0x4470, 0x43b0, 0xa91a, 0xb068, 0x1c4a, 0x2666, 0x43c6, 0xa8cd, 0x4184, 0xbafc, 0xb29e, 0x42dd, 0x1781, 0x4033, 0x35f4, 0x31c2, 0xa3f5, 0xbf3a, 0x1884, 0xbafc, 0x424b, 0x42ab, 0x0955, 0x432a, 0x43f5, 0x410f, 0x4694, 0x401b, 0x41c7, 0xb058, 0x419f, 0x41f2, 0xb2fc, 0x1fd1, 0x464b, 0xbfb0, 0x41c5, 0x2b5f, 0x4330, 0x4152, 0xbfbf, 0xbf70, 0x43fb, 0x0114, 0x439b, 0x4376, 0x35bb, 0xa42b, 0x4130, 0x25df, 0x2ee3, 0x42a8, 0x4128, 0x42df, 0x4220, 0x43ec, 0x2ecd, 0xb291, 0xbf4f, 0xab48, 0x41da, 0x4198, 0x4214, 0x40c7, 0x3fb9, 0x424e, 0x414e, 0x01e3, 0x379f, 0x44b2, 0x4166, 0x42e8, 0x4208, 0xb2aa, 0xbf6f, 0xb05e, 0x40da, 0x463a, 0x193e, 0x42ef, 0x40ed, 0x1cc4, 0x4272, 0x1550, 0x42b1, 0x3bbb, 0x227a, 0x449c, 0x42b0, 0x41bf, 0xa310, 0xb0a6, 0x439e, 0x42a2, 0x4392, 0xbf1d, 0x2af5, 0xb2b1, 0x426b, 0x43dd, 0x4204, 0x466b, 0xb060, 0xbac4, 0xb0d2, 0x4320, 0x4006, 0x4303, 0xbf83, 0xa242, 0x42e1, 0xba65, 0xa4c1, 0xbfe0, 0xb26a, 0x3dc0, 0x1e3f, 0x423d, 0x439e, 0xba4e, 0xab3b, 0xba29, 0x4606, 0x41f2, 0xbac9, 0xb23d, 0xaac3, 0x19e2, 0xbf78, 0x1ad9, 0x4089, 0xba78, 0x46a3, 0xa084, 0xb27c, 0xbf72, 0x1439, 0x4000, 0xb275, 0x40cc, 0x4252, 0xbf7b, 0xbad4, 0x43d2, 0x1ce1, 0x4562, 0xb20b, 0x2fbd, 0xbadd, 0xba61, 0x2a48, 0x405a, 0x4343, 0xbf42, 0xb233, 0x4261, 0x423a, 0x42d4, 0x4330, 0x46f2, 0xbaf3, 0xb240, 0xba69, 0xba78, 0x091c, 0xb296, 0xbae4, 0x2223, 0x40f9, 0x42db, 0x1838, 0xb21f, 0x03b3, 0x43a0, 0xb2eb, 0xbf0f, 0x42ac, 0xb22e, 0xb013, 0xa332, 0xb2d0, 0xb271, 0x110f, 0x2fc7, 0x4668, 0x43dc, 0x41ef, 0x3a07, 0xbacf, 0x4158, 0x4129, 0x00ac, 0xb254, 0x416a, 0x4312, 0xad39, 0x4070, 0x1d12, 0x43e3, 0xaf2e, 0xb2fb, 0x250c, 0xa0c5, 0xbf96, 0x3811, 0x43a2, 0xa7d3, 0x1a37, 0x41b5, 0x414d, 0x43b6, 0xbacc, 0xa587, 0xbf35, 0x1ea8, 0x3706, 0xb0d5, 0x42f9, 0x405f, 0x426e, 0x1c33, 0x4369, 0xb01e, 0x4611, 0xa7cc, 0xbf9d, 0x1e4f, 0x1939, 0xbfe0, 0x43e7, 0x445d, 0xbfbc, 0x4146, 0x4093, 0xb255, 0x0325, 0x42bf, 0xbfe1, 0x45cb, 0x1a8f, 0xb2ca, 0x1912, 0x007c, 0xba33, 0x3771, 0x4355, 0xaa43, 0xbf00, 0xbad0, 0xbf93, 0x1e05, 0x1bb5, 0xb28c, 0x296d, 0xbf9c, 0xafa4, 0xb2e5, 0x4672, 0xbf27, 0xba7a, 0x419e, 0x4047, 0x4025, 0xb238, 0x4046, 0xb211, 0x3e6a, 0x4058, 0xbf32, 0x45c6, 0x3629, 0x42f1, 0x41da, 0xb2c1, 0x4441, 0x412d, 0xb09f, 0x43d8, 0x41c0, 0x40cb, 0x25d4, 0xa604, 0xa1e9, 0xb2b3, 0x42a5, 0x42c7, 0xb223, 0xb2f4, 0x403d, 0x41f9, 0x417e, 0xbf90, 0xbf3c, 0x1adc, 0x41c3, 0x0b57, 0xa98b, 0xace1, 0x19d8, 0x42bc, 0x141e, 0xbfb6, 0xb0bf, 0xba07, 0x425b, 0x3db1, 0x4186, 0x4052, 0x42c9, 0x114a, 0xb2c7, 0x4461, 0xbac5, 0x40f0, 0xa656, 0xa678, 0xb2a0, 0x1fdb, 0x186e, 0x4549, 0xb0c9, 0x2198, 0xb048, 0x4316, 0xa29b, 0xb2df, 0xb269, 0x1cf6, 0xbf8a, 0x418e, 0x012f, 0x1ff4, 0xb060, 0xad7c, 0x42a8, 0x42dd, 0x420e, 0x4153, 0xae8b, 0x03f1, 0x439f, 0x41f3, 0xbf83, 0x1395, 0xb281, 0x41f3, 0x19e3, 0x4002, 0x2ac4, 0x3a17, 0x4225, 0x4007, 0x4201, 0x45b4, 0xb29c, 0x410f, 0xa3ad, 0x43d4, 0xb2b9, 0x1d09, 0xb082, 0x4335, 0xbf58, 0xb297, 0xb0c3, 0x4240, 0xba79, 0xb230, 0xba2a, 0xbf57, 0xb0a6, 0xa975, 0x1f5b, 0x42e8, 0x190f, 0xbfc3, 0x420a, 0xb21a, 0x2c87, 0x417e, 0xbfe0, 0x40b1, 0x339a, 0x2f4c, 0x4353, 0x1b7c, 0x4349, 0x4335, 0x41c6, 0x4283, 0xa0bc, 0xa2da, 0x413b, 0x42c5, 0xbf8b, 0x4572, 0x061e, 0xbf90, 0x4159, 0xb280, 0xb0ef, 0x204a, 0x1dfe, 0x068c, 0x4122, 0x43be, 0x4286, 0xba1e, 0x4333, 0xb272, 0xa671, 0x4002, 0x42ed, 0x14b2, 0x32d9, 0xbf2c, 0x358d, 0x4615, 0x410b, 0x3ecd, 0xb223, 0x2f09, 0x1b6c, 0xbf2c, 0xbae5, 0x1cee, 0xb2fe, 0x42ea, 0xb045, 0x41ca, 0x4016, 0x10c6, 0x0828, 0xabe4, 0x123d, 0xa82a, 0xb04d, 0x45b0, 0xbfb0, 0x4118, 0xba15, 0x442d, 0x4098, 0x2145, 0x1a40, 0x1935, 0x394e, 0x45c2, 0xbf19, 0x402e, 0xb2ba, 0x42cb, 0x40d9, 0x4193, 0x41e8, 0x4261, 0x167e, 0xbad3, 0xbf1a, 0xb24d, 0x09c9, 0xb27f, 0x0295, 0x417d, 0x4362, 0x40a0, 0x4636, 0xba62, 0x2a28, 0x405d, 0x1ac1, 0x2e7e, 0x4027, 0x4222, 0xba7d, 0x429c, 0x40d6, 0x424b, 0x4430, 0xb042, 0xa73d, 0x406e, 0x3722, 0xb2a9, 0x4014, 0x44b1, 0xbfac, 0x4035, 0x4326, 0x0c54, 0x4007, 0xba2c, 0x43a7, 0x4333, 0x4092, 0xa7c2, 0xbf01, 0x27cb, 0xb047, 0x1a86, 0xbade, 0xb2b7, 0x2147, 0x0e71, 0xb295, 0xba38, 0x4388, 0x159c, 0x416b, 0xba1a, 0xb0d2, 0x0162, 0xba33, 0x40cd, 0x465c, 0x420f, 0x368f, 0x42bf, 0xbf60, 0x40f3, 0x4002, 0x0fed, 0x4165, 0x415c, 0xba29, 0xbfcd, 0x42b2, 0x40d4, 0xb0ac, 0x43f7, 0x12b0, 0x416d, 0x2be8, 0x4103, 0x408e, 0x43e6, 0x40d5, 0x427a, 0xba11, 0x1c74, 0x40b9, 0x4066, 0x4254, 0x4081, 0x2821, 0x4003, 0x44ab, 0x431a, 0x4282, 0x4569, 0x2f84, 0xb2ef, 0x4340, 0xb218, 0xbf8f, 0xb024, 0x1c87, 0x289f, 0x43d9, 0xba0a, 0x421d, 0x44f0, 0x42a2, 0x41b4, 0xa51b, 0x1c28, 0xa535, 0x40cb, 0x44b9, 0x40ed, 0x0bbe, 0x413e, 0x1eb8, 0x41ad, 0x1dac, 0x3f25, 0xb0ec, 0x12e7, 0xab9a, 0xbf77, 0xbae9, 0x1b49, 0x40a5, 0x40d7, 0x4392, 0x43e6, 0x190e, 0x40b0, 0xb2dc, 0x425f, 0x41ad, 0x10b1, 0x40f4, 0x43b7, 0x4037, 0xb03c, 0x1a72, 0x407b, 0xba50, 0x466e, 0xbf11, 0xbad4, 0xa393, 0xaa42, 0x41c5, 0x413c, 0x410a, 0xba1f, 0xba17, 0x41f4, 0x2138, 0xbfe0, 0x1ace, 0xba65, 0x40cc, 0x44e1, 0x1646, 0x4228, 0x43b7, 0xa7cf, 0x4160, 0xbfa8, 0xba18, 0x43f1, 0x1ed8, 0x4355, 0x2fce, 0xbacb, 0x41c5, 0x42c2, 0x44f8, 0x1f13, 0xbf5f, 0xaa2a, 0xb2fd, 0x1405, 0x25d1, 0xa644, 0x4134, 0x4280, 0x19f2, 0x0a34, 0x1b5e, 0x4137, 0xba1e, 0xba4c, 0x424c, 0x43d3, 0xb062, 0xb2b4, 0x43c3, 0x42a4, 0xb200, 0x4219, 0x4646, 0xa445, 0x4248, 0xbfe0, 0xbf05, 0x415f, 0x1832, 0x439d, 0xaaa6, 0xb234, 0x43b7, 0xb01a, 0xba02, 0x1f57, 0x43c9, 0x46c0, 0x4558, 0x4116, 0x1707, 0xb0b8, 0xbfc0, 0x41c0, 0x4032, 0x112c, 0x44e4, 0x4290, 0x04f6, 0xa289, 0x4226, 0x43bb, 0x1ee1, 0x434e, 0xbf66, 0x4210, 0x425f, 0xa705, 0x1aff, 0x31fd, 0xbf0e, 0x4295, 0x4107, 0xb283, 0x4067, 0x1dec, 0xb0b8, 0xb089, 0x2a04, 0x4172, 0xbfc0, 0x4217, 0xb2ea, 0x41a8, 0x41a2, 0x1610, 0x4294, 0xb016, 0x406e, 0x4281, 0x42a7, 0x1f7a, 0x1866, 0x4047, 0x4672, 0x20bc, 0x420b, 0x198a, 0xbf8a, 0x43f3, 0x3aed, 0xbfb0, 0x4612, 0x408c, 0x43e6, 0x0f02, 0x4214, 0xbfb5, 0xae8e, 0x408a, 0x41d9, 0x02f0, 0x341b, 0xb07d, 0x413b, 0xb0d9, 0xb2c5, 0x42f0, 0xb2f4, 0xba45, 0xa723, 0x42f1, 0x19aa, 0x4005, 0xb00b, 0x42ec, 0x4239, 0x43c4, 0x40ed, 0xaaa1, 0x1ff0, 0x4215, 0xb005, 0x414d, 0xb037, 0x43d1, 0xbf5b, 0xb24a, 0xb2cc, 0xb0e1, 0xb25e, 0x4298, 0x427a, 0xb0e5, 0x42be, 0x1cf1, 0x43b3, 0xb0b9, 0x4242, 0xbf0b, 0x435b, 0x14c6, 0x43d8, 0xb2e2, 0x414c, 0x4165, 0xad8d, 0xb2f3, 0xb053, 0x42a1, 0x4301, 0xa3c4, 0x43fe, 0x2e37, 0xb019, 0x4112, 0xba58, 0x40c9, 0x4204, 0x1870, 0x4592, 0x4360, 0x24a0, 0x42ab, 0x4066, 0x404b, 0x4144, 0x4252, 0x422c, 0xbfa5, 0x1caa, 0x02c7, 0x09fa, 0x4364, 0x43fe, 0x3b92, 0x4616, 0x4376, 0x1be2, 0x40ee, 0x34a4, 0x2c90, 0xba42, 0x42de, 0x435b, 0xb272, 0x413d, 0x1f64, 0x4099, 0x42b2, 0x43bb, 0x43fb, 0xbfd1, 0xba53, 0xb067, 0x42a2, 0x0f18, 0x43cc, 0x1f8e, 0x1dfe, 0xb28b, 0xbad5, 0x188f, 0x4363, 0x4299, 0x12b3, 0x0831, 0x41fb, 0x40fd, 0xbfa9, 0xba30, 0x4183, 0x42ad, 0x40b2, 0x418b, 0x42ea, 0xb0fb, 0x42aa, 0x42df, 0x1f34, 0x0bd2, 0x3df7, 0xb215, 0xba60, 0xb28d, 0x30e7, 0xb2a0, 0x4567, 0x42a8, 0xbfc3, 0xb0a0, 0x41c7, 0x0f8a, 0x16a1, 0x4168, 0x445e, 0xb236, 0x4271, 0xbf39, 0x4312, 0xbad2, 0x42e4, 0x1cb2, 0xb2c7, 0xbaee, 0x431c, 0x42dd, 0x42f2, 0xb262, 0x403a, 0x1dfb, 0x4330, 0x36a0, 0xba46, 0xb224, 0xbf56, 0x1b15, 0x3160, 0x40e6, 0xb025, 0x1390, 0x42a7, 0x078b, 0x4263, 0x141e, 0x0633, 0x4281, 0x40f5, 0x422b, 0x45f1, 0xba2b, 0x1a8a, 0x41a8, 0xb275, 0xb2a3, 0xb22a, 0xbf7a, 0x4540, 0x43da, 0x42da, 0xaa06, 0xb284, 0x3f4f, 0x42ae, 0x40a2, 0xbfb1, 0x4382, 0xbaf0, 0x1db0, 0x43af, 0x0b87, 0x433d, 0x461a, 0x2502, 0xb234, 0x3130, 0xb2b7, 0x43d2, 0xba2f, 0x37df, 0x3ab5, 0xafcb, 0x0f62, 0x46f8, 0x404f, 0x4560, 0x43fd, 0xbf59, 0x4237, 0x414e, 0x3b8d, 0x43e4, 0x4370, 0x2d12, 0xbf2b, 0x42cd, 0xba1a, 0xb2f9, 0xb2b0, 0xb0ea, 0xbac2, 0xb284, 0xaa89, 0x4041, 0x22ca, 0xb229, 0xafec, 0x438d, 0xbae3, 0x4314, 0x0739, 0xb229, 0xb2f4, 0xbf45, 0x189c, 0x43db, 0x4116, 0x409d, 0xb2b0, 0x4227, 0xb297, 0x469b, 0x31d0, 0x2360, 0x462f, 0xbacf, 0x4277, 0x305e, 0x2d0f, 0x381c, 0xbfcf, 0xb2f4, 0x42db, 0x435f, 0x3aaa, 0xb0ee, 0x44f4, 0x1b64, 0x4372, 0xb284, 0x40cd, 0x46d4, 0x13bf, 0xba5d, 0x4092, 0xba52, 0x41e2, 0x1dc6, 0xbf7d, 0x1eb2, 0x2606, 0x401f, 0x1d2f, 0x4770, 0xe7fe + ], + StartRegs = [0xb856fb9b, 0x192a6db9, 0x8500700e, 0x51377f3b, 0xcf8d1a8e, 0xeb924976, 0xf20bcc21, 0xd216b99a, 0xee51a075, 0x8bdc3aa5, 0x4c0f0144, 0xdedd3f79, 0xfe5590cd, 0x20762c18, 0x00000000, 0x600001f0 + ], + FinalRegs = [0x00010041, 0x000000d0, 0x00010046, 0x00000060, 0x00000041, 0x00006000, 0x00000006, 0x00000000, 0x00001756, 0xad5388b8, 0x00000000, 0x000058ca, 0x00000000, 0x20762a7c, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x404c, 0x424a, 0x2986, 0xb245, 0x4373, 0x4073, 0x4006, 0x41df, 0x02dc, 0x3691, 0x42c5, 0xb2bf, 0x4020, 0x422c, 0x396a, 0xa360, 0xbf6f, 0x1d2b, 0x2d8e, 0x1815, 0x42f8, 0x41e0, 0x0084, 0x42c0, 0x43a4, 0x3d65, 0x11d0, 0xb2ee, 0x21d7, 0xbf8b, 0x3e83, 0x406a, 0x42ba, 0x4370, 0x446d, 0x3c88, 0x0c4e, 0x3ac9, 0x4284, 0xb2a9, 0x3c89, 0xb21a, 0x42df, 0x43e9, 0x4079, 0x1879, 0x40ea, 0xbafd, 0x435f, 0x40c2, 0x2c52, 0xba2c, 0xba4d, 0x45ba, 0xb288, 0x4228, 0x40cd, 0xbf67, 0x4092, 0x41bf, 0xba76, 0xb25f, 0x1c56, 0xb23c, 0xba28, 0x4063, 0x4083, 0xba20, 0xbad0, 0x40c5, 0xb245, 0xba73, 0x37df, 0x405d, 0x3e0c, 0xba79, 0xb241, 0x425a, 0x40c9, 0x4031, 0xb2b4, 0x4288, 0x4333, 0xbf95, 0xb20d, 0x42d8, 0xb0e6, 0x41c3, 0xbad8, 0x417b, 0x1c10, 0x030e, 0x403c, 0xb0e2, 0x12a0, 0x4451, 0x420b, 0xb20c, 0x3174, 0xbf60, 0xbada, 0xb2fd, 0xbf4a, 0xb22e, 0xb0ea, 0x19bf, 0x41cd, 0xbfbc, 0x412a, 0xba0d, 0xba38, 0x4092, 0x42af, 0x1db0, 0x41b5, 0xb281, 0x4059, 0xba6f, 0x410d, 0x4421, 0x410a, 0xa37d, 0xb289, 0x2b11, 0xad56, 0x383f, 0xb20c, 0xbfb3, 0x428f, 0x1f82, 0xba34, 0xb0ef, 0x1c73, 0x401e, 0xba6a, 0x40c8, 0x4554, 0xb0b6, 0x1d62, 0xb092, 0xb000, 0xbf7c, 0x40c0, 0x3aca, 0x1db0, 0x4124, 0x461c, 0xba2f, 0x1a4d, 0x1f44, 0xbfd9, 0x33dc, 0xb2c9, 0x41fe, 0x1921, 0xba75, 0x40ea, 0x424e, 0x43ca, 0xa25a, 0x423e, 0x4175, 0x410a, 0x41e1, 0x41c2, 0xbfca, 0x1f2c, 0xb2ce, 0xae78, 0xb262, 0x4045, 0x4287, 0xb24e, 0x1d5e, 0x4092, 0x2e56, 0xbacd, 0x400e, 0xba42, 0x40f4, 0xbafd, 0x4482, 0x40fc, 0x2f63, 0xb01c, 0x408d, 0x4008, 0x4250, 0xa846, 0xb2a7, 0x376b, 0xb012, 0xbad0, 0xbf7c, 0x4382, 0xb23e, 0x414c, 0x4091, 0xb0ab, 0x40fe, 0x4076, 0x458c, 0xa397, 0x445a, 0xb267, 0x43d7, 0x42c5, 0xa924, 0x41c9, 0x431d, 0x4207, 0x4182, 0x4012, 0x0c79, 0xb26a, 0x1b23, 0xabb2, 0x40df, 0xbf4a, 0x27b0, 0x4467, 0xa236, 0xba10, 0x4386, 0x42c2, 0x41d5, 0x4665, 0x41bb, 0x41d0, 0xba31, 0x4388, 0x1d9c, 0x2d56, 0x420d, 0x432e, 0xba31, 0x1d22, 0x4428, 0x419b, 0x1cd7, 0xb081, 0x4327, 0x4162, 0x42d8, 0x1947, 0xbf2c, 0x43cb, 0xb250, 0x4012, 0x3734, 0x4214, 0xa5bb, 0x4611, 0xba60, 0x2aed, 0xba05, 0x43a1, 0x431d, 0x0608, 0xbade, 0xa596, 0x4312, 0xb0b8, 0xb249, 0xbf6d, 0x42ac, 0xbfe0, 0x42e8, 0xb284, 0x42cd, 0x380e, 0x405b, 0x42e8, 0xb07d, 0xbad9, 0x43ca, 0x4282, 0xb283, 0x4353, 0x1ca4, 0xba3e, 0x41f3, 0x18a3, 0xb2da, 0x41d5, 0x416a, 0x2f3e, 0x46ec, 0xbf9c, 0x430f, 0x434e, 0xb2dd, 0xb27d, 0x1064, 0x43f0, 0xb2c9, 0x15a6, 0x28ab, 0xa5f9, 0x08db, 0xbfbe, 0x41ed, 0x41f9, 0x4385, 0x4197, 0x0b37, 0x418b, 0x133a, 0xb0f9, 0xba40, 0x434b, 0xb2b2, 0xa303, 0x464d, 0x1c7a, 0xbfe0, 0x46ac, 0x028d, 0x445c, 0xb034, 0xbf4f, 0x1af3, 0x1e0d, 0x4148, 0xaf26, 0xb01e, 0x1575, 0xba61, 0x29a4, 0xb238, 0x40ca, 0xbf5e, 0xab8b, 0x351a, 0x4121, 0xba67, 0xbfd2, 0xacfe, 0xba11, 0x4381, 0x186f, 0x36ef, 0xbae7, 0x1389, 0x1a97, 0x42be, 0x4123, 0x21ca, 0xb2ee, 0xb2b4, 0x463f, 0x2825, 0x449c, 0x4225, 0x4271, 0x1f0c, 0xba51, 0x43c4, 0x4148, 0x017d, 0xbf7b, 0x43e6, 0x41ee, 0xb255, 0x43e6, 0xb048, 0x4033, 0x4282, 0x412e, 0xbae8, 0xaede, 0x4125, 0x41c2, 0x4229, 0xb014, 0x403a, 0xb001, 0xba7c, 0xbada, 0x1dc4, 0x25c1, 0xa5f1, 0x43c5, 0xb293, 0x4011, 0x2dea, 0x1912, 0x43cc, 0xa25f, 0xba41, 0xbfaa, 0x41db, 0x4060, 0x1be4, 0x09de, 0x3dd2, 0x1ca8, 0xb200, 0x460d, 0x4066, 0x02af, 0x432e, 0x1dce, 0xb20f, 0x4468, 0x4058, 0xb037, 0x4137, 0x4158, 0xbf96, 0x39fe, 0x40a2, 0x417e, 0xa421, 0x3a98, 0x12e7, 0x4106, 0xb0fc, 0x2564, 0x40e0, 0xb0a6, 0x0a30, 0x42eb, 0x0ad5, 0x42ec, 0xbacc, 0xbff0, 0x13cc, 0x1bdc, 0x33ae, 0xbf90, 0xba18, 0x42f5, 0xb084, 0x410c, 0x4571, 0xbf94, 0x422b, 0x424b, 0x43a2, 0x433b, 0xba17, 0x1b36, 0x4221, 0x40e2, 0x4247, 0x1e2f, 0x3746, 0x43ef, 0xbf26, 0x1a41, 0x40ae, 0xb2f1, 0x4348, 0x43ce, 0x4128, 0xb27e, 0x400f, 0x41c4, 0xb023, 0x4054, 0x40cb, 0xb260, 0x41c9, 0x3d51, 0x42bf, 0x36f6, 0x1d00, 0x2cc0, 0x412b, 0xbf08, 0x03d1, 0xb280, 0x432e, 0xb0a1, 0xb2d1, 0xa60e, 0xb229, 0x418b, 0xbfe2, 0x438a, 0xba58, 0xa4a8, 0x4393, 0xb2ce, 0xbfd0, 0x447d, 0xb0fc, 0x42c8, 0xba09, 0x43eb, 0xbf42, 0xb24c, 0x19f5, 0x426b, 0xb2a7, 0x1baf, 0x1b6b, 0x4276, 0x0857, 0x22f0, 0xb238, 0x41fc, 0x440b, 0xbf88, 0x2db9, 0x1b79, 0x4117, 0xba00, 0x04c4, 0xbafa, 0x42fa, 0x0f86, 0x439c, 0xa156, 0xb274, 0x4223, 0xbfcf, 0x10c5, 0xb28b, 0x43df, 0x41f3, 0xbf8d, 0x43f8, 0x42b4, 0xb031, 0x0817, 0xb261, 0xbfe0, 0x4137, 0x1da3, 0x404b, 0xbae6, 0xb254, 0x412f, 0xbad5, 0xb295, 0x444e, 0xb28e, 0xb279, 0x406f, 0x45ea, 0xb2db, 0x1d07, 0xbfb3, 0x3b0e, 0x4138, 0x2a53, 0x421f, 0x40bd, 0x43cb, 0x430f, 0x21b6, 0x18d6, 0x43a4, 0xb04e, 0x43a3, 0x420e, 0x467e, 0x4134, 0xb060, 0x44fc, 0x41ed, 0xbff0, 0x43a6, 0x217f, 0xbad4, 0x417d, 0x42e7, 0x3065, 0x1ce3, 0x4016, 0xb218, 0x4219, 0xbf1d, 0x3fb0, 0x2c2e, 0x089c, 0xbaf3, 0x42ef, 0xb26b, 0xbf3d, 0x39ec, 0x4375, 0xb2e2, 0x191e, 0x433f, 0x38b8, 0x4217, 0xb074, 0xb272, 0xbfa4, 0x1bb0, 0x223f, 0xbaf3, 0x4192, 0xba64, 0x4278, 0xbace, 0x01b2, 0x431a, 0xa920, 0x40bf, 0x4498, 0x4331, 0x43fa, 0x4212, 0x41d4, 0x0257, 0x4136, 0x3ca6, 0x4229, 0xbad2, 0x199e, 0x08c5, 0x406e, 0x4480, 0xb2c0, 0xbf70, 0xbf23, 0x4295, 0x46d2, 0x159c, 0x40ca, 0x281b, 0x4333, 0xbfab, 0x1fdd, 0xba6f, 0x3ac7, 0xba26, 0x1da2, 0x4216, 0x1ca9, 0xb263, 0x408e, 0x4491, 0xb230, 0xac9f, 0x4098, 0x4302, 0x41ea, 0x181d, 0xb289, 0xb2fa, 0x1e16, 0x424c, 0x414f, 0x443e, 0x1c8d, 0x428f, 0x2079, 0x44d4, 0x437d, 0xbae2, 0x0ba5, 0xbf43, 0x435f, 0x4446, 0x4383, 0x1b2e, 0xb2c1, 0x1ac6, 0x45d5, 0xaa8d, 0xa9ff, 0x4280, 0xab67, 0xb222, 0xba68, 0x435d, 0x43a2, 0x1957, 0x425a, 0xb03f, 0x42dc, 0xba2c, 0x423f, 0x4071, 0xa66f, 0x06e5, 0xbf51, 0x40e0, 0x30d9, 0x4263, 0xba77, 0x18c4, 0x424f, 0x2054, 0x4136, 0xb09d, 0x3276, 0xb0c2, 0x0886, 0xb20e, 0x3afb, 0x41db, 0x31d9, 0x4062, 0x41cb, 0x1813, 0x40fc, 0x4389, 0xb0b2, 0xbaf4, 0xba68, 0xbf8f, 0x40c3, 0x4068, 0x4017, 0x131f, 0x4310, 0x113a, 0x1dad, 0x43ae, 0xb230, 0x2a6e, 0xb221, 0xb274, 0xbadf, 0xbfc9, 0x23d7, 0xba0a, 0xba0c, 0x40fa, 0xb2b1, 0xbfd0, 0xbf0c, 0x06f7, 0x18c9, 0x46ba, 0xba47, 0x422f, 0x04b2, 0xb2f1, 0x0069, 0x4037, 0xb243, 0x41a8, 0xb253, 0x1a27, 0xb069, 0x42e3, 0x007f, 0xa0c1, 0xaafc, 0xbf87, 0xaa98, 0xb2b1, 0x421a, 0xbaf5, 0x3e9b, 0xbfa0, 0xba22, 0x16cb, 0x408a, 0x1721, 0xb2a9, 0xb2c6, 0x158e, 0x40dd, 0x3ac2, 0xbf5a, 0xafd9, 0x4334, 0xba57, 0x3f09, 0xb0e9, 0xb01e, 0x1bb9, 0xbfc7, 0xb2d0, 0xbac9, 0xb042, 0x4138, 0xbfaa, 0x4429, 0x0e51, 0x424d, 0x423e, 0x3928, 0x415a, 0xa9ee, 0x4049, 0x1bfd, 0xb030, 0x417f, 0x1335, 0x4151, 0x41ad, 0xb2e4, 0x1b22, 0x42cb, 0x34dd, 0x4104, 0x186f, 0x3a3b, 0x437a, 0x42c9, 0x43c3, 0xb275, 0xb281, 0xbfb7, 0x1a57, 0x4257, 0xb06e, 0x215e, 0xa0cf, 0xa019, 0x4438, 0xb2ad, 0x446b, 0xba48, 0x4595, 0x44e3, 0xbf33, 0x4078, 0x4366, 0x1a43, 0x4078, 0x43e9, 0xb0c3, 0x44e9, 0xb008, 0x4000, 0x4015, 0x40f3, 0xbf7c, 0x4063, 0x41e7, 0xbf7d, 0xb0ee, 0xb27e, 0xa702, 0xb2b0, 0x414e, 0xbf00, 0xb2d7, 0x4033, 0x1fb8, 0xb06b, 0x2c22, 0xbfb0, 0x42ca, 0xb220, 0xb019, 0x4274, 0x125e, 0x426d, 0xab1b, 0x4046, 0x465a, 0xb2ca, 0xba26, 0xba09, 0xb07a, 0x4565, 0x4253, 0xbaf0, 0x1b4f, 0xbf67, 0x1ace, 0x403a, 0x1e60, 0x3a08, 0xb030, 0xba66, 0x4176, 0x4003, 0x4227, 0xb000, 0xba2d, 0xbf4b, 0x46a2, 0x4343, 0xba26, 0x438b, 0x4217, 0xb23c, 0x41c3, 0x44a0, 0x40dc, 0x40f1, 0xb29a, 0x1be5, 0xb085, 0x421e, 0x10ec, 0x41da, 0xbfd0, 0x423f, 0x40c7, 0x1689, 0xb2bd, 0x4005, 0xbf7e, 0xba14, 0xb234, 0x41a4, 0x2b94, 0x43f5, 0xb048, 0xb059, 0x0639, 0x4255, 0x14a6, 0x400e, 0x1f55, 0x41ad, 0x3822, 0x4218, 0x1cb8, 0xb22a, 0x4410, 0x40c0, 0xa6c5, 0xb03b, 0xbf46, 0x2d61, 0x43f2, 0x15b7, 0x4347, 0xacc9, 0x422d, 0xb2f4, 0xbfd0, 0xbfe4, 0x42fd, 0xb28c, 0x1d63, 0xba3f, 0x432e, 0x40bc, 0x4337, 0xbfa0, 0x05a9, 0x4160, 0xb030, 0x0da5, 0x0cad, 0x42e0, 0xb2fa, 0x3352, 0x4184, 0x4309, 0x4262, 0x1cfc, 0x43b2, 0xbf25, 0xbaf4, 0x1eb8, 0xba24, 0x3854, 0xb2af, 0x4074, 0x16ab, 0xb28c, 0xa7af, 0x348f, 0x415d, 0x2104, 0xa0dc, 0xba00, 0x129c, 0x413e, 0x40a6, 0x439a, 0x407c, 0x1c34, 0x1b66, 0xb256, 0x425d, 0x423c, 0xbf71, 0xa64f, 0x412c, 0xb257, 0x4035, 0x420d, 0x45da, 0x11e7, 0x403b, 0xb0a8, 0xb2c9, 0x420c, 0xba22, 0xb0f6, 0x211b, 0x41f9, 0xb2b1, 0xbf00, 0xba40, 0xbf45, 0xbada, 0xbade, 0xb24b, 0x424c, 0x4050, 0x40a3, 0x4669, 0xaaff, 0xb089, 0x4335, 0x4104, 0x401d, 0x418d, 0x4000, 0x42f2, 0xa8da, 0x4151, 0xbf38, 0x45a4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x10ecc80c, 0x68d834e9, 0x195770d2, 0xf92fff26, 0x0d6457be, 0xa5d13c2e, 0x614b9061, 0xbd8cee14, 0x4cf5750a, 0x29eac697, 0xd29e8d3c, 0x1f3a1fb0, 0xc8c54efa, 0x28709a39, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0x2870a341, 0x50e143f6, 0x2870a3f9, 0x00000000, 0xffffffff, 0xd78f6003, 0x000018dc, 0xffffffff, 0x4cf575b9, 0x525b6130, 0xffffcfff, 0x1bc387ef, 0xfc89683f, 0x28709fd9, 0x00000000, 0x800001d0 }, + Instructions = [0x404c, 0x424a, 0x2986, 0xb245, 0x4373, 0x4073, 0x4006, 0x41df, 0x02dc, 0x3691, 0x42c5, 0xb2bf, 0x4020, 0x422c, 0x396a, 0xa360, 0xbf6f, 0x1d2b, 0x2d8e, 0x1815, 0x42f8, 0x41e0, 0x0084, 0x42c0, 0x43a4, 0x3d65, 0x11d0, 0xb2ee, 0x21d7, 0xbf8b, 0x3e83, 0x406a, 0x42ba, 0x4370, 0x446d, 0x3c88, 0x0c4e, 0x3ac9, 0x4284, 0xb2a9, 0x3c89, 0xb21a, 0x42df, 0x43e9, 0x4079, 0x1879, 0x40ea, 0xbafd, 0x435f, 0x40c2, 0x2c52, 0xba2c, 0xba4d, 0x45ba, 0xb288, 0x4228, 0x40cd, 0xbf67, 0x4092, 0x41bf, 0xba76, 0xb25f, 0x1c56, 0xb23c, 0xba28, 0x4063, 0x4083, 0xba20, 0xbad0, 0x40c5, 0xb245, 0xba73, 0x37df, 0x405d, 0x3e0c, 0xba79, 0xb241, 0x425a, 0x40c9, 0x4031, 0xb2b4, 0x4288, 0x4333, 0xbf95, 0xb20d, 0x42d8, 0xb0e6, 0x41c3, 0xbad8, 0x417b, 0x1c10, 0x030e, 0x403c, 0xb0e2, 0x12a0, 0x4451, 0x420b, 0xb20c, 0x3174, 0xbf60, 0xbada, 0xb2fd, 0xbf4a, 0xb22e, 0xb0ea, 0x19bf, 0x41cd, 0xbfbc, 0x412a, 0xba0d, 0xba38, 0x4092, 0x42af, 0x1db0, 0x41b5, 0xb281, 0x4059, 0xba6f, 0x410d, 0x4421, 0x410a, 0xa37d, 0xb289, 0x2b11, 0xad56, 0x383f, 0xb20c, 0xbfb3, 0x428f, 0x1f82, 0xba34, 0xb0ef, 0x1c73, 0x401e, 0xba6a, 0x40c8, 0x4554, 0xb0b6, 0x1d62, 0xb092, 0xb000, 0xbf7c, 0x40c0, 0x3aca, 0x1db0, 0x4124, 0x461c, 0xba2f, 0x1a4d, 0x1f44, 0xbfd9, 0x33dc, 0xb2c9, 0x41fe, 0x1921, 0xba75, 0x40ea, 0x424e, 0x43ca, 0xa25a, 0x423e, 0x4175, 0x410a, 0x41e1, 0x41c2, 0xbfca, 0x1f2c, 0xb2ce, 0xae78, 0xb262, 0x4045, 0x4287, 0xb24e, 0x1d5e, 0x4092, 0x2e56, 0xbacd, 0x400e, 0xba42, 0x40f4, 0xbafd, 0x4482, 0x40fc, 0x2f63, 0xb01c, 0x408d, 0x4008, 0x4250, 0xa846, 0xb2a7, 0x376b, 0xb012, 0xbad0, 0xbf7c, 0x4382, 0xb23e, 0x414c, 0x4091, 0xb0ab, 0x40fe, 0x4076, 0x458c, 0xa397, 0x445a, 0xb267, 0x43d7, 0x42c5, 0xa924, 0x41c9, 0x431d, 0x4207, 0x4182, 0x4012, 0x0c79, 0xb26a, 0x1b23, 0xabb2, 0x40df, 0xbf4a, 0x27b0, 0x4467, 0xa236, 0xba10, 0x4386, 0x42c2, 0x41d5, 0x4665, 0x41bb, 0x41d0, 0xba31, 0x4388, 0x1d9c, 0x2d56, 0x420d, 0x432e, 0xba31, 0x1d22, 0x4428, 0x419b, 0x1cd7, 0xb081, 0x4327, 0x4162, 0x42d8, 0x1947, 0xbf2c, 0x43cb, 0xb250, 0x4012, 0x3734, 0x4214, 0xa5bb, 0x4611, 0xba60, 0x2aed, 0xba05, 0x43a1, 0x431d, 0x0608, 0xbade, 0xa596, 0x4312, 0xb0b8, 0xb249, 0xbf6d, 0x42ac, 0xbfe0, 0x42e8, 0xb284, 0x42cd, 0x380e, 0x405b, 0x42e8, 0xb07d, 0xbad9, 0x43ca, 0x4282, 0xb283, 0x4353, 0x1ca4, 0xba3e, 0x41f3, 0x18a3, 0xb2da, 0x41d5, 0x416a, 0x2f3e, 0x46ec, 0xbf9c, 0x430f, 0x434e, 0xb2dd, 0xb27d, 0x1064, 0x43f0, 0xb2c9, 0x15a6, 0x28ab, 0xa5f9, 0x08db, 0xbfbe, 0x41ed, 0x41f9, 0x4385, 0x4197, 0x0b37, 0x418b, 0x133a, 0xb0f9, 0xba40, 0x434b, 0xb2b2, 0xa303, 0x464d, 0x1c7a, 0xbfe0, 0x46ac, 0x028d, 0x445c, 0xb034, 0xbf4f, 0x1af3, 0x1e0d, 0x4148, 0xaf26, 0xb01e, 0x1575, 0xba61, 0x29a4, 0xb238, 0x40ca, 0xbf5e, 0xab8b, 0x351a, 0x4121, 0xba67, 0xbfd2, 0xacfe, 0xba11, 0x4381, 0x186f, 0x36ef, 0xbae7, 0x1389, 0x1a97, 0x42be, 0x4123, 0x21ca, 0xb2ee, 0xb2b4, 0x463f, 0x2825, 0x449c, 0x4225, 0x4271, 0x1f0c, 0xba51, 0x43c4, 0x4148, 0x017d, 0xbf7b, 0x43e6, 0x41ee, 0xb255, 0x43e6, 0xb048, 0x4033, 0x4282, 0x412e, 0xbae8, 0xaede, 0x4125, 0x41c2, 0x4229, 0xb014, 0x403a, 0xb001, 0xba7c, 0xbada, 0x1dc4, 0x25c1, 0xa5f1, 0x43c5, 0xb293, 0x4011, 0x2dea, 0x1912, 0x43cc, 0xa25f, 0xba41, 0xbfaa, 0x41db, 0x4060, 0x1be4, 0x09de, 0x3dd2, 0x1ca8, 0xb200, 0x460d, 0x4066, 0x02af, 0x432e, 0x1dce, 0xb20f, 0x4468, 0x4058, 0xb037, 0x4137, 0x4158, 0xbf96, 0x39fe, 0x40a2, 0x417e, 0xa421, 0x3a98, 0x12e7, 0x4106, 0xb0fc, 0x2564, 0x40e0, 0xb0a6, 0x0a30, 0x42eb, 0x0ad5, 0x42ec, 0xbacc, 0xbff0, 0x13cc, 0x1bdc, 0x33ae, 0xbf90, 0xba18, 0x42f5, 0xb084, 0x410c, 0x4571, 0xbf94, 0x422b, 0x424b, 0x43a2, 0x433b, 0xba17, 0x1b36, 0x4221, 0x40e2, 0x4247, 0x1e2f, 0x3746, 0x43ef, 0xbf26, 0x1a41, 0x40ae, 0xb2f1, 0x4348, 0x43ce, 0x4128, 0xb27e, 0x400f, 0x41c4, 0xb023, 0x4054, 0x40cb, 0xb260, 0x41c9, 0x3d51, 0x42bf, 0x36f6, 0x1d00, 0x2cc0, 0x412b, 0xbf08, 0x03d1, 0xb280, 0x432e, 0xb0a1, 0xb2d1, 0xa60e, 0xb229, 0x418b, 0xbfe2, 0x438a, 0xba58, 0xa4a8, 0x4393, 0xb2ce, 0xbfd0, 0x447d, 0xb0fc, 0x42c8, 0xba09, 0x43eb, 0xbf42, 0xb24c, 0x19f5, 0x426b, 0xb2a7, 0x1baf, 0x1b6b, 0x4276, 0x0857, 0x22f0, 0xb238, 0x41fc, 0x440b, 0xbf88, 0x2db9, 0x1b79, 0x4117, 0xba00, 0x04c4, 0xbafa, 0x42fa, 0x0f86, 0x439c, 0xa156, 0xb274, 0x4223, 0xbfcf, 0x10c5, 0xb28b, 0x43df, 0x41f3, 0xbf8d, 0x43f8, 0x42b4, 0xb031, 0x0817, 0xb261, 0xbfe0, 0x4137, 0x1da3, 0x404b, 0xbae6, 0xb254, 0x412f, 0xbad5, 0xb295, 0x444e, 0xb28e, 0xb279, 0x406f, 0x45ea, 0xb2db, 0x1d07, 0xbfb3, 0x3b0e, 0x4138, 0x2a53, 0x421f, 0x40bd, 0x43cb, 0x430f, 0x21b6, 0x18d6, 0x43a4, 0xb04e, 0x43a3, 0x420e, 0x467e, 0x4134, 0xb060, 0x44fc, 0x41ed, 0xbff0, 0x43a6, 0x217f, 0xbad4, 0x417d, 0x42e7, 0x3065, 0x1ce3, 0x4016, 0xb218, 0x4219, 0xbf1d, 0x3fb0, 0x2c2e, 0x089c, 0xbaf3, 0x42ef, 0xb26b, 0xbf3d, 0x39ec, 0x4375, 0xb2e2, 0x191e, 0x433f, 0x38b8, 0x4217, 0xb074, 0xb272, 0xbfa4, 0x1bb0, 0x223f, 0xbaf3, 0x4192, 0xba64, 0x4278, 0xbace, 0x01b2, 0x431a, 0xa920, 0x40bf, 0x4498, 0x4331, 0x43fa, 0x4212, 0x41d4, 0x0257, 0x4136, 0x3ca6, 0x4229, 0xbad2, 0x199e, 0x08c5, 0x406e, 0x4480, 0xb2c0, 0xbf70, 0xbf23, 0x4295, 0x46d2, 0x159c, 0x40ca, 0x281b, 0x4333, 0xbfab, 0x1fdd, 0xba6f, 0x3ac7, 0xba26, 0x1da2, 0x4216, 0x1ca9, 0xb263, 0x408e, 0x4491, 0xb230, 0xac9f, 0x4098, 0x4302, 0x41ea, 0x181d, 0xb289, 0xb2fa, 0x1e16, 0x424c, 0x414f, 0x443e, 0x1c8d, 0x428f, 0x2079, 0x44d4, 0x437d, 0xbae2, 0x0ba5, 0xbf43, 0x435f, 0x4446, 0x4383, 0x1b2e, 0xb2c1, 0x1ac6, 0x45d5, 0xaa8d, 0xa9ff, 0x4280, 0xab67, 0xb222, 0xba68, 0x435d, 0x43a2, 0x1957, 0x425a, 0xb03f, 0x42dc, 0xba2c, 0x423f, 0x4071, 0xa66f, 0x06e5, 0xbf51, 0x40e0, 0x30d9, 0x4263, 0xba77, 0x18c4, 0x424f, 0x2054, 0x4136, 0xb09d, 0x3276, 0xb0c2, 0x0886, 0xb20e, 0x3afb, 0x41db, 0x31d9, 0x4062, 0x41cb, 0x1813, 0x40fc, 0x4389, 0xb0b2, 0xbaf4, 0xba68, 0xbf8f, 0x40c3, 0x4068, 0x4017, 0x131f, 0x4310, 0x113a, 0x1dad, 0x43ae, 0xb230, 0x2a6e, 0xb221, 0xb274, 0xbadf, 0xbfc9, 0x23d7, 0xba0a, 0xba0c, 0x40fa, 0xb2b1, 0xbfd0, 0xbf0c, 0x06f7, 0x18c9, 0x46ba, 0xba47, 0x422f, 0x04b2, 0xb2f1, 0x0069, 0x4037, 0xb243, 0x41a8, 0xb253, 0x1a27, 0xb069, 0x42e3, 0x007f, 0xa0c1, 0xaafc, 0xbf87, 0xaa98, 0xb2b1, 0x421a, 0xbaf5, 0x3e9b, 0xbfa0, 0xba22, 0x16cb, 0x408a, 0x1721, 0xb2a9, 0xb2c6, 0x158e, 0x40dd, 0x3ac2, 0xbf5a, 0xafd9, 0x4334, 0xba57, 0x3f09, 0xb0e9, 0xb01e, 0x1bb9, 0xbfc7, 0xb2d0, 0xbac9, 0xb042, 0x4138, 0xbfaa, 0x4429, 0x0e51, 0x424d, 0x423e, 0x3928, 0x415a, 0xa9ee, 0x4049, 0x1bfd, 0xb030, 0x417f, 0x1335, 0x4151, 0x41ad, 0xb2e4, 0x1b22, 0x42cb, 0x34dd, 0x4104, 0x186f, 0x3a3b, 0x437a, 0x42c9, 0x43c3, 0xb275, 0xb281, 0xbfb7, 0x1a57, 0x4257, 0xb06e, 0x215e, 0xa0cf, 0xa019, 0x4438, 0xb2ad, 0x446b, 0xba48, 0x4595, 0x44e3, 0xbf33, 0x4078, 0x4366, 0x1a43, 0x4078, 0x43e9, 0xb0c3, 0x44e9, 0xb008, 0x4000, 0x4015, 0x40f3, 0xbf7c, 0x4063, 0x41e7, 0xbf7d, 0xb0ee, 0xb27e, 0xa702, 0xb2b0, 0x414e, 0xbf00, 0xb2d7, 0x4033, 0x1fb8, 0xb06b, 0x2c22, 0xbfb0, 0x42ca, 0xb220, 0xb019, 0x4274, 0x125e, 0x426d, 0xab1b, 0x4046, 0x465a, 0xb2ca, 0xba26, 0xba09, 0xb07a, 0x4565, 0x4253, 0xbaf0, 0x1b4f, 0xbf67, 0x1ace, 0x403a, 0x1e60, 0x3a08, 0xb030, 0xba66, 0x4176, 0x4003, 0x4227, 0xb000, 0xba2d, 0xbf4b, 0x46a2, 0x4343, 0xba26, 0x438b, 0x4217, 0xb23c, 0x41c3, 0x44a0, 0x40dc, 0x40f1, 0xb29a, 0x1be5, 0xb085, 0x421e, 0x10ec, 0x41da, 0xbfd0, 0x423f, 0x40c7, 0x1689, 0xb2bd, 0x4005, 0xbf7e, 0xba14, 0xb234, 0x41a4, 0x2b94, 0x43f5, 0xb048, 0xb059, 0x0639, 0x4255, 0x14a6, 0x400e, 0x1f55, 0x41ad, 0x3822, 0x4218, 0x1cb8, 0xb22a, 0x4410, 0x40c0, 0xa6c5, 0xb03b, 0xbf46, 0x2d61, 0x43f2, 0x15b7, 0x4347, 0xacc9, 0x422d, 0xb2f4, 0xbfd0, 0xbfe4, 0x42fd, 0xb28c, 0x1d63, 0xba3f, 0x432e, 0x40bc, 0x4337, 0xbfa0, 0x05a9, 0x4160, 0xb030, 0x0da5, 0x0cad, 0x42e0, 0xb2fa, 0x3352, 0x4184, 0x4309, 0x4262, 0x1cfc, 0x43b2, 0xbf25, 0xbaf4, 0x1eb8, 0xba24, 0x3854, 0xb2af, 0x4074, 0x16ab, 0xb28c, 0xa7af, 0x348f, 0x415d, 0x2104, 0xa0dc, 0xba00, 0x129c, 0x413e, 0x40a6, 0x439a, 0x407c, 0x1c34, 0x1b66, 0xb256, 0x425d, 0x423c, 0xbf71, 0xa64f, 0x412c, 0xb257, 0x4035, 0x420d, 0x45da, 0x11e7, 0x403b, 0xb0a8, 0xb2c9, 0x420c, 0xba22, 0xb0f6, 0x211b, 0x41f9, 0xb2b1, 0xbf00, 0xba40, 0xbf45, 0xbada, 0xbade, 0xb24b, 0x424c, 0x4050, 0x40a3, 0x4669, 0xaaff, 0xb089, 0x4335, 0x4104, 0x401d, 0x418d, 0x4000, 0x42f2, 0xa8da, 0x4151, 0xbf38, 0x45a4, 0x4770, 0xe7fe + ], + StartRegs = [0x10ecc80c, 0x68d834e9, 0x195770d2, 0xf92fff26, 0x0d6457be, 0xa5d13c2e, 0x614b9061, 0xbd8cee14, 0x4cf5750a, 0x29eac697, 0xd29e8d3c, 0x1f3a1fb0, 0xc8c54efa, 0x28709a39, 0x00000000, 0x100001f0 + ], + FinalRegs = [0x2870a341, 0x50e143f6, 0x2870a3f9, 0x00000000, 0xffffffff, 0xd78f6003, 0x000018dc, 0xffffffff, 0x4cf575b9, 0x525b6130, 0xffffcfff, 0x1bc387ef, 0xfc89683f, 0x28709fd9, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x155d, 0x212d, 0x4196, 0x4176, 0x42cb, 0x4436, 0xba13, 0x41cd, 0x4049, 0x42e3, 0x435c, 0xa81a, 0xba0c, 0xba6d, 0xbfa0, 0xb2d5, 0x42bc, 0xbfc0, 0xbf00, 0x45a9, 0xbf19, 0xba0c, 0xb256, 0xba51, 0x393b, 0xb048, 0xbf0f, 0xb2fc, 0x406e, 0x2068, 0x4007, 0xbf15, 0x4022, 0x4100, 0x4268, 0x408b, 0x42f9, 0xba0d, 0x41f9, 0x1b65, 0x4226, 0xb24a, 0x4677, 0x43ab, 0x3cba, 0x43ad, 0x3eae, 0x42df, 0xbf2a, 0x07ab, 0xb27e, 0x1e70, 0x440d, 0xb280, 0xba74, 0xb0a6, 0x1992, 0x275c, 0xb25e, 0xb027, 0x43c7, 0x4274, 0x4399, 0x40cb, 0x420e, 0x40be, 0x411c, 0x3e42, 0x1e52, 0x44ca, 0xb0b2, 0x4499, 0x418b, 0x3ecd, 0xac43, 0xbf76, 0xa566, 0xa33d, 0x4011, 0xbf22, 0x46ba, 0x45a1, 0x431d, 0x43a3, 0x4288, 0xbf02, 0x4157, 0x25bb, 0x24da, 0xbaf0, 0x4260, 0x12c9, 0x215f, 0xbf32, 0x432a, 0x419b, 0x413e, 0x1b77, 0xb0d4, 0x41a6, 0x0aae, 0xbff0, 0xb00f, 0x4091, 0x400e, 0x4036, 0xba1d, 0x1f20, 0x4194, 0xba73, 0x1a36, 0xbfc0, 0x405c, 0xbf93, 0x381b, 0x42d2, 0xba26, 0x41c8, 0xba43, 0xb03a, 0x410a, 0x4142, 0xb2b6, 0x46e1, 0x4227, 0xab57, 0xb29d, 0xbf3d, 0x195a, 0xba11, 0x42b7, 0x418a, 0x40b3, 0x420f, 0xb285, 0xbf41, 0x1aec, 0x10d6, 0x41eb, 0x2252, 0xbf80, 0xb0db, 0x1e20, 0x43c7, 0x41f8, 0xb24a, 0x4605, 0xbadb, 0x41b6, 0x4267, 0x3473, 0x42c0, 0x42e1, 0x42d2, 0x45aa, 0x4240, 0xbf90, 0x43d7, 0xb03a, 0x411f, 0x42ee, 0x4370, 0x4238, 0x4646, 0x1ce2, 0xbf65, 0x2fa6, 0x41fc, 0xba40, 0x40e0, 0x10fd, 0xb0b7, 0x1851, 0x4300, 0xbaf7, 0xb030, 0xb031, 0xa1cf, 0x135c, 0xb09e, 0x4131, 0xb039, 0x4548, 0x4022, 0xbfb2, 0x35c4, 0xb2a0, 0xb05a, 0xbfc3, 0x40bb, 0x4694, 0x419f, 0xbf80, 0x436f, 0x19c2, 0xb210, 0x1efd, 0x4104, 0x0fff, 0xbfc3, 0x4271, 0x4282, 0x2373, 0xb22e, 0x1d4c, 0x41a8, 0x41e0, 0xb264, 0xb0f2, 0xb202, 0x4087, 0xba73, 0x4351, 0x43cb, 0xae08, 0x40d4, 0x2529, 0xb22b, 0x412e, 0xa5ec, 0x42ce, 0x0a48, 0x3422, 0x186a, 0x2588, 0xba79, 0x40dc, 0x041b, 0xbf65, 0x434f, 0x1ca9, 0xb262, 0x299b, 0x4371, 0x43a0, 0x433d, 0x0586, 0x2f06, 0xb267, 0x4695, 0x4287, 0xbf7d, 0x1d88, 0x4665, 0xb282, 0x1912, 0x401e, 0x40cf, 0x1883, 0x4195, 0xba42, 0x45b4, 0xbf53, 0xb22f, 0xa9fe, 0xba1a, 0x3a48, 0xbaea, 0x4000, 0x07fe, 0x405f, 0x4351, 0xbf1d, 0x40f7, 0xb098, 0xb0a6, 0x3be8, 0x1980, 0xb014, 0x405d, 0x42bb, 0xac85, 0x06b7, 0x42a8, 0x42c8, 0x421e, 0xbf19, 0xb2ba, 0xb0b2, 0x4154, 0x42bc, 0x25fb, 0x4612, 0x4112, 0xb290, 0x40a0, 0x4195, 0x1e8b, 0x3ac1, 0x438d, 0x4340, 0x1a9e, 0x426a, 0x402a, 0x2d5c, 0xba5d, 0xb281, 0xb2ca, 0x4365, 0x191e, 0x2171, 0x3a69, 0x409a, 0x4304, 0xbfe1, 0x4316, 0xb2d2, 0xa9b9, 0x42e7, 0x4684, 0x2f78, 0xbaed, 0xbf81, 0x166e, 0x465e, 0xbadd, 0x4662, 0xbacb, 0x4003, 0x428b, 0x3668, 0x42ce, 0x42ab, 0xb22a, 0x40a0, 0x1cd8, 0x4029, 0xb2a7, 0xb061, 0x160d, 0x424f, 0xba7f, 0x4446, 0x3ea4, 0x0dac, 0xbfca, 0x0a49, 0xbae0, 0xb2d8, 0xabe7, 0xba1f, 0x40b2, 0xbafc, 0x4679, 0x37aa, 0x40e8, 0x12a2, 0xb0fa, 0x3fe1, 0x42a3, 0x1866, 0xba6b, 0x00a0, 0x3304, 0xbf5b, 0x4431, 0x40d8, 0x0a5a, 0x42e0, 0x41c7, 0x1980, 0xb096, 0xbfc3, 0xba10, 0x1efd, 0x2704, 0x419c, 0xb235, 0xbf97, 0x4391, 0x0740, 0x4057, 0x0d91, 0x4122, 0x1f06, 0x42d4, 0x42ce, 0x4211, 0x439a, 0x1d59, 0xbf98, 0xba68, 0x4275, 0x413f, 0x1d15, 0x4180, 0x414a, 0x421e, 0x438a, 0xa29c, 0x3fb4, 0xbf0b, 0x4025, 0x41ab, 0x428d, 0xb2b5, 0xb067, 0xbf90, 0xb258, 0xbf18, 0x2023, 0x43e4, 0x44d5, 0x37d4, 0xb09e, 0x427d, 0x29dc, 0x4171, 0x041a, 0xbfba, 0xb29f, 0xb26a, 0x427f, 0x4238, 0x4381, 0x15bc, 0x430b, 0x2760, 0x1aab, 0xb2ff, 0x4282, 0x103e, 0xa10f, 0x0891, 0x4056, 0x408e, 0x0276, 0xbfb6, 0x094c, 0x2c6a, 0xba4e, 0x403b, 0xb24c, 0xabc2, 0xb0f6, 0x4366, 0x1ded, 0x408a, 0x40bf, 0x4352, 0x10a3, 0xb0bc, 0x42e6, 0x40a5, 0x4551, 0x37ad, 0xbf02, 0xb0f1, 0x43e0, 0xb213, 0x4105, 0xb2bc, 0x40c4, 0xb20e, 0x1117, 0x40b2, 0x412b, 0x1dd0, 0x43a6, 0x43f9, 0x4391, 0x26fd, 0x07df, 0xbf13, 0x4152, 0x22a3, 0x1936, 0x1915, 0x40bb, 0x21c5, 0x2a65, 0x2572, 0x4117, 0x19ba, 0x43c3, 0x41ad, 0xb20a, 0x1fd6, 0x37bd, 0xb00b, 0x41b3, 0xa0b2, 0xb2f5, 0xb209, 0x40f3, 0xb244, 0x4380, 0xb20a, 0x41c7, 0xbf9c, 0xba2b, 0x4064, 0x4048, 0xb2f9, 0xbff0, 0x4399, 0x42bb, 0x1c85, 0x31be, 0x322d, 0x102a, 0x4614, 0x1860, 0x42fb, 0x1fd4, 0x1ba5, 0x4395, 0x3c83, 0xa80f, 0x439b, 0xba4a, 0xbf98, 0x40a3, 0x4065, 0x04dc, 0xbf38, 0x4260, 0xaa25, 0x220a, 0x05e2, 0x40ec, 0xbf60, 0x41b3, 0x127f, 0x40de, 0xb0a8, 0x43ba, 0x41be, 0xbf93, 0x2f9a, 0xb059, 0xb0a5, 0x4196, 0x4343, 0x400e, 0xbfb4, 0x4324, 0xb0fd, 0x09ed, 0xbad8, 0xb02d, 0x150b, 0x4016, 0xbfa6, 0xba3e, 0x439a, 0x3d0b, 0x1b7a, 0xba18, 0x241e, 0xa47d, 0xb22f, 0xb281, 0x40be, 0x4096, 0xb046, 0x43c2, 0x0c15, 0xb079, 0xb21e, 0xbf54, 0x42ab, 0xb234, 0x46b0, 0x1c7b, 0x4297, 0x43f4, 0x029f, 0x3405, 0x42d0, 0x42d2, 0x41b3, 0x40fe, 0x45c4, 0xb0db, 0x43ba, 0x4219, 0x4269, 0x1612, 0x41ac, 0x40ce, 0x3511, 0x4339, 0xb023, 0x130e, 0xb281, 0x1d1d, 0xbfcd, 0x419a, 0xba2b, 0x4011, 0xb295, 0x43f1, 0x40f7, 0xb264, 0xba37, 0xb2d0, 0xbf46, 0x18b3, 0x34c0, 0x040f, 0x401a, 0x138a, 0xa805, 0xb259, 0x440a, 0x1bee, 0xa5a7, 0x43f8, 0x407e, 0x424a, 0xb2f0, 0x433a, 0x39aa, 0x19d8, 0x42d2, 0xa041, 0x41c5, 0x214f, 0xb08f, 0x4231, 0x40b5, 0x05df, 0xbfa6, 0xa527, 0x455f, 0x2dc3, 0x1f02, 0xbaf8, 0x45e2, 0x466d, 0xa17d, 0x39d3, 0x1cdb, 0x4353, 0x43d0, 0x1b82, 0x0fc7, 0x4367, 0xba0b, 0xa21c, 0xbf4d, 0xba44, 0xa48c, 0x4185, 0x4168, 0x27d1, 0x21e1, 0x4316, 0x309b, 0x1859, 0x3d8d, 0x41fa, 0xba63, 0x2168, 0x0966, 0x43f5, 0x35ce, 0x3894, 0x412f, 0xbae5, 0x4557, 0x45b2, 0x4601, 0xb240, 0x4301, 0x4237, 0x4608, 0x1707, 0x08e5, 0xbf57, 0x3831, 0x41fe, 0x1722, 0x1f29, 0x45dd, 0x4233, 0x4550, 0xba2f, 0x3c89, 0xbfc0, 0xbf0c, 0xb2ad, 0x4042, 0x3c09, 0x1f76, 0xb29c, 0x43ce, 0x28fc, 0x4661, 0xb28c, 0x432b, 0x4277, 0xa32e, 0x42ae, 0x41c3, 0x1cad, 0x4203, 0x40bc, 0x43c6, 0xbf78, 0xbae9, 0x4222, 0x0094, 0x4350, 0x41d9, 0x415e, 0xb2b7, 0x4088, 0xb060, 0x40bd, 0xbf6b, 0x1a14, 0xa78c, 0xb2cf, 0x4021, 0x1adf, 0xba10, 0x1bfb, 0x41fe, 0x1b0e, 0x4369, 0x40e6, 0xbfab, 0x4077, 0x4673, 0x2c2d, 0x1df1, 0xb2bd, 0x42b0, 0xbf90, 0x03a8, 0xae03, 0x40ea, 0xbf15, 0x388f, 0x43ef, 0x2e69, 0x4130, 0x40b8, 0x3597, 0x4688, 0x1a86, 0x08aa, 0x4479, 0x45ea, 0x433c, 0xbf60, 0x1e2d, 0x1a2d, 0xb001, 0x1932, 0xaf95, 0x41aa, 0x4477, 0xb050, 0x42f6, 0xb219, 0xb03e, 0xb27e, 0xb0e7, 0xbae9, 0x4189, 0x4077, 0xbfb1, 0x407f, 0x454d, 0x044d, 0x410f, 0x46fa, 0x4265, 0x43aa, 0x41e0, 0x19da, 0x3196, 0x403d, 0x435c, 0x40f5, 0x4067, 0x3122, 0x1ea4, 0x40d7, 0x40dd, 0x1cb3, 0xb241, 0xb20d, 0xae94, 0xb20c, 0x42bb, 0x41a6, 0x4084, 0xa88d, 0xbfb8, 0x42c2, 0xb260, 0xba2d, 0x4119, 0xba63, 0xb2cf, 0x2aaa, 0xa2c2, 0x32e4, 0x42eb, 0xb24c, 0x04eb, 0x43fc, 0xb2c5, 0x4158, 0xb26f, 0x4664, 0x2f2a, 0xb0f7, 0x0290, 0x40d7, 0x1955, 0x1cc8, 0x405c, 0x1d87, 0x40b5, 0xbf89, 0xa488, 0xb2db, 0x401e, 0xb25d, 0xb2c8, 0xba28, 0xb09b, 0x0813, 0x06b2, 0xba07, 0x416e, 0x2476, 0x40c1, 0x1902, 0xb0c8, 0x3d59, 0x26cd, 0xbad0, 0x3338, 0xb2d5, 0x41c1, 0x19e0, 0xbfdf, 0x1e0b, 0x4301, 0x00f0, 0xb252, 0xb2be, 0x4614, 0x1c4b, 0xb00a, 0x44b3, 0xba75, 0x416c, 0x4283, 0x0e46, 0xae89, 0xba0e, 0x4287, 0x3290, 0x4296, 0x43fe, 0xa47a, 0x4243, 0xba58, 0x4076, 0xb2d3, 0xb2ee, 0x42c8, 0xbf8a, 0x4087, 0x465d, 0x0812, 0xb0d0, 0x1b04, 0x41c3, 0xba2c, 0x461b, 0x43c2, 0x1d5b, 0x439d, 0x41d2, 0xbf62, 0x4283, 0x41d3, 0x2cd1, 0x19da, 0xba70, 0xba7d, 0xbf4c, 0x4024, 0xa8a8, 0x3533, 0x4356, 0x4360, 0x40e8, 0x1a0c, 0x4217, 0x46ad, 0x2bcf, 0x4136, 0x41ba, 0xa279, 0x25e8, 0xbfe0, 0xb2a5, 0xa2f0, 0xbf15, 0x41e7, 0xbac9, 0x1f73, 0x410f, 0x0d8a, 0x40d3, 0xab54, 0x4219, 0x1984, 0xbada, 0x4384, 0x1b68, 0x44a8, 0x11d9, 0x4048, 0xbfa6, 0xb2f9, 0x42a0, 0x4237, 0x1298, 0xb0ce, 0x42e5, 0xb2c3, 0x40ce, 0x43eb, 0x29fe, 0x437a, 0xb238, 0xb2e5, 0xa899, 0xb05c, 0xbf91, 0x1947, 0x446b, 0x2586, 0x407f, 0xb275, 0x4193, 0x40eb, 0x439a, 0x2b6e, 0x4378, 0xb2b0, 0xba74, 0x438a, 0x1949, 0xab0c, 0xb208, 0xbae5, 0x4631, 0xbfcd, 0x4165, 0xba67, 0x4038, 0xb007, 0x177e, 0x4275, 0x1b62, 0x2fff, 0x45c6, 0x31d9, 0x429d, 0x18c1, 0x46dc, 0xb2c2, 0x41a9, 0x4390, 0x4362, 0xb0a3, 0xbae3, 0x102a, 0xb08c, 0x27c5, 0xbf0d, 0x1b86, 0xadce, 0xb0bb, 0x1d65, 0x412e, 0xb0d9, 0x2bf0, 0x320b, 0x433e, 0xadb6, 0x406a, 0x20e1, 0x1c81, 0x40ba, 0x13e1, 0x19cd, 0xb2a4, 0xbf5a, 0x46aa, 0x43b8, 0xb211, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x35faf52d, 0x178d83c4, 0xd9eed1e5, 0x2d403c23, 0x142e3ba1, 0xfdb96242, 0xb8568fae, 0xd9e9fcd8, 0xdb303d2f, 0xb29babc4, 0x02ba22df, 0x57781ed2, 0x79ab341b, 0x84723a31, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000c5, 0x000000c5, 0x000000c5, 0x0fa51006, 0x79ab341b, 0x000000c5, 0x57781ed2, 0x57781ed2, 0xfffffd5f, 0x00000000, 0x000001d0 }, + Instructions = [0x155d, 0x212d, 0x4196, 0x4176, 0x42cb, 0x4436, 0xba13, 0x41cd, 0x4049, 0x42e3, 0x435c, 0xa81a, 0xba0c, 0xba6d, 0xbfa0, 0xb2d5, 0x42bc, 0xbfc0, 0xbf00, 0x45a9, 0xbf19, 0xba0c, 0xb256, 0xba51, 0x393b, 0xb048, 0xbf0f, 0xb2fc, 0x406e, 0x2068, 0x4007, 0xbf15, 0x4022, 0x4100, 0x4268, 0x408b, 0x42f9, 0xba0d, 0x41f9, 0x1b65, 0x4226, 0xb24a, 0x4677, 0x43ab, 0x3cba, 0x43ad, 0x3eae, 0x42df, 0xbf2a, 0x07ab, 0xb27e, 0x1e70, 0x440d, 0xb280, 0xba74, 0xb0a6, 0x1992, 0x275c, 0xb25e, 0xb027, 0x43c7, 0x4274, 0x4399, 0x40cb, 0x420e, 0x40be, 0x411c, 0x3e42, 0x1e52, 0x44ca, 0xb0b2, 0x4499, 0x418b, 0x3ecd, 0xac43, 0xbf76, 0xa566, 0xa33d, 0x4011, 0xbf22, 0x46ba, 0x45a1, 0x431d, 0x43a3, 0x4288, 0xbf02, 0x4157, 0x25bb, 0x24da, 0xbaf0, 0x4260, 0x12c9, 0x215f, 0xbf32, 0x432a, 0x419b, 0x413e, 0x1b77, 0xb0d4, 0x41a6, 0x0aae, 0xbff0, 0xb00f, 0x4091, 0x400e, 0x4036, 0xba1d, 0x1f20, 0x4194, 0xba73, 0x1a36, 0xbfc0, 0x405c, 0xbf93, 0x381b, 0x42d2, 0xba26, 0x41c8, 0xba43, 0xb03a, 0x410a, 0x4142, 0xb2b6, 0x46e1, 0x4227, 0xab57, 0xb29d, 0xbf3d, 0x195a, 0xba11, 0x42b7, 0x418a, 0x40b3, 0x420f, 0xb285, 0xbf41, 0x1aec, 0x10d6, 0x41eb, 0x2252, 0xbf80, 0xb0db, 0x1e20, 0x43c7, 0x41f8, 0xb24a, 0x4605, 0xbadb, 0x41b6, 0x4267, 0x3473, 0x42c0, 0x42e1, 0x42d2, 0x45aa, 0x4240, 0xbf90, 0x43d7, 0xb03a, 0x411f, 0x42ee, 0x4370, 0x4238, 0x4646, 0x1ce2, 0xbf65, 0x2fa6, 0x41fc, 0xba40, 0x40e0, 0x10fd, 0xb0b7, 0x1851, 0x4300, 0xbaf7, 0xb030, 0xb031, 0xa1cf, 0x135c, 0xb09e, 0x4131, 0xb039, 0x4548, 0x4022, 0xbfb2, 0x35c4, 0xb2a0, 0xb05a, 0xbfc3, 0x40bb, 0x4694, 0x419f, 0xbf80, 0x436f, 0x19c2, 0xb210, 0x1efd, 0x4104, 0x0fff, 0xbfc3, 0x4271, 0x4282, 0x2373, 0xb22e, 0x1d4c, 0x41a8, 0x41e0, 0xb264, 0xb0f2, 0xb202, 0x4087, 0xba73, 0x4351, 0x43cb, 0xae08, 0x40d4, 0x2529, 0xb22b, 0x412e, 0xa5ec, 0x42ce, 0x0a48, 0x3422, 0x186a, 0x2588, 0xba79, 0x40dc, 0x041b, 0xbf65, 0x434f, 0x1ca9, 0xb262, 0x299b, 0x4371, 0x43a0, 0x433d, 0x0586, 0x2f06, 0xb267, 0x4695, 0x4287, 0xbf7d, 0x1d88, 0x4665, 0xb282, 0x1912, 0x401e, 0x40cf, 0x1883, 0x4195, 0xba42, 0x45b4, 0xbf53, 0xb22f, 0xa9fe, 0xba1a, 0x3a48, 0xbaea, 0x4000, 0x07fe, 0x405f, 0x4351, 0xbf1d, 0x40f7, 0xb098, 0xb0a6, 0x3be8, 0x1980, 0xb014, 0x405d, 0x42bb, 0xac85, 0x06b7, 0x42a8, 0x42c8, 0x421e, 0xbf19, 0xb2ba, 0xb0b2, 0x4154, 0x42bc, 0x25fb, 0x4612, 0x4112, 0xb290, 0x40a0, 0x4195, 0x1e8b, 0x3ac1, 0x438d, 0x4340, 0x1a9e, 0x426a, 0x402a, 0x2d5c, 0xba5d, 0xb281, 0xb2ca, 0x4365, 0x191e, 0x2171, 0x3a69, 0x409a, 0x4304, 0xbfe1, 0x4316, 0xb2d2, 0xa9b9, 0x42e7, 0x4684, 0x2f78, 0xbaed, 0xbf81, 0x166e, 0x465e, 0xbadd, 0x4662, 0xbacb, 0x4003, 0x428b, 0x3668, 0x42ce, 0x42ab, 0xb22a, 0x40a0, 0x1cd8, 0x4029, 0xb2a7, 0xb061, 0x160d, 0x424f, 0xba7f, 0x4446, 0x3ea4, 0x0dac, 0xbfca, 0x0a49, 0xbae0, 0xb2d8, 0xabe7, 0xba1f, 0x40b2, 0xbafc, 0x4679, 0x37aa, 0x40e8, 0x12a2, 0xb0fa, 0x3fe1, 0x42a3, 0x1866, 0xba6b, 0x00a0, 0x3304, 0xbf5b, 0x4431, 0x40d8, 0x0a5a, 0x42e0, 0x41c7, 0x1980, 0xb096, 0xbfc3, 0xba10, 0x1efd, 0x2704, 0x419c, 0xb235, 0xbf97, 0x4391, 0x0740, 0x4057, 0x0d91, 0x4122, 0x1f06, 0x42d4, 0x42ce, 0x4211, 0x439a, 0x1d59, 0xbf98, 0xba68, 0x4275, 0x413f, 0x1d15, 0x4180, 0x414a, 0x421e, 0x438a, 0xa29c, 0x3fb4, 0xbf0b, 0x4025, 0x41ab, 0x428d, 0xb2b5, 0xb067, 0xbf90, 0xb258, 0xbf18, 0x2023, 0x43e4, 0x44d5, 0x37d4, 0xb09e, 0x427d, 0x29dc, 0x4171, 0x041a, 0xbfba, 0xb29f, 0xb26a, 0x427f, 0x4238, 0x4381, 0x15bc, 0x430b, 0x2760, 0x1aab, 0xb2ff, 0x4282, 0x103e, 0xa10f, 0x0891, 0x4056, 0x408e, 0x0276, 0xbfb6, 0x094c, 0x2c6a, 0xba4e, 0x403b, 0xb24c, 0xabc2, 0xb0f6, 0x4366, 0x1ded, 0x408a, 0x40bf, 0x4352, 0x10a3, 0xb0bc, 0x42e6, 0x40a5, 0x4551, 0x37ad, 0xbf02, 0xb0f1, 0x43e0, 0xb213, 0x4105, 0xb2bc, 0x40c4, 0xb20e, 0x1117, 0x40b2, 0x412b, 0x1dd0, 0x43a6, 0x43f9, 0x4391, 0x26fd, 0x07df, 0xbf13, 0x4152, 0x22a3, 0x1936, 0x1915, 0x40bb, 0x21c5, 0x2a65, 0x2572, 0x4117, 0x19ba, 0x43c3, 0x41ad, 0xb20a, 0x1fd6, 0x37bd, 0xb00b, 0x41b3, 0xa0b2, 0xb2f5, 0xb209, 0x40f3, 0xb244, 0x4380, 0xb20a, 0x41c7, 0xbf9c, 0xba2b, 0x4064, 0x4048, 0xb2f9, 0xbff0, 0x4399, 0x42bb, 0x1c85, 0x31be, 0x322d, 0x102a, 0x4614, 0x1860, 0x42fb, 0x1fd4, 0x1ba5, 0x4395, 0x3c83, 0xa80f, 0x439b, 0xba4a, 0xbf98, 0x40a3, 0x4065, 0x04dc, 0xbf38, 0x4260, 0xaa25, 0x220a, 0x05e2, 0x40ec, 0xbf60, 0x41b3, 0x127f, 0x40de, 0xb0a8, 0x43ba, 0x41be, 0xbf93, 0x2f9a, 0xb059, 0xb0a5, 0x4196, 0x4343, 0x400e, 0xbfb4, 0x4324, 0xb0fd, 0x09ed, 0xbad8, 0xb02d, 0x150b, 0x4016, 0xbfa6, 0xba3e, 0x439a, 0x3d0b, 0x1b7a, 0xba18, 0x241e, 0xa47d, 0xb22f, 0xb281, 0x40be, 0x4096, 0xb046, 0x43c2, 0x0c15, 0xb079, 0xb21e, 0xbf54, 0x42ab, 0xb234, 0x46b0, 0x1c7b, 0x4297, 0x43f4, 0x029f, 0x3405, 0x42d0, 0x42d2, 0x41b3, 0x40fe, 0x45c4, 0xb0db, 0x43ba, 0x4219, 0x4269, 0x1612, 0x41ac, 0x40ce, 0x3511, 0x4339, 0xb023, 0x130e, 0xb281, 0x1d1d, 0xbfcd, 0x419a, 0xba2b, 0x4011, 0xb295, 0x43f1, 0x40f7, 0xb264, 0xba37, 0xb2d0, 0xbf46, 0x18b3, 0x34c0, 0x040f, 0x401a, 0x138a, 0xa805, 0xb259, 0x440a, 0x1bee, 0xa5a7, 0x43f8, 0x407e, 0x424a, 0xb2f0, 0x433a, 0x39aa, 0x19d8, 0x42d2, 0xa041, 0x41c5, 0x214f, 0xb08f, 0x4231, 0x40b5, 0x05df, 0xbfa6, 0xa527, 0x455f, 0x2dc3, 0x1f02, 0xbaf8, 0x45e2, 0x466d, 0xa17d, 0x39d3, 0x1cdb, 0x4353, 0x43d0, 0x1b82, 0x0fc7, 0x4367, 0xba0b, 0xa21c, 0xbf4d, 0xba44, 0xa48c, 0x4185, 0x4168, 0x27d1, 0x21e1, 0x4316, 0x309b, 0x1859, 0x3d8d, 0x41fa, 0xba63, 0x2168, 0x0966, 0x43f5, 0x35ce, 0x3894, 0x412f, 0xbae5, 0x4557, 0x45b2, 0x4601, 0xb240, 0x4301, 0x4237, 0x4608, 0x1707, 0x08e5, 0xbf57, 0x3831, 0x41fe, 0x1722, 0x1f29, 0x45dd, 0x4233, 0x4550, 0xba2f, 0x3c89, 0xbfc0, 0xbf0c, 0xb2ad, 0x4042, 0x3c09, 0x1f76, 0xb29c, 0x43ce, 0x28fc, 0x4661, 0xb28c, 0x432b, 0x4277, 0xa32e, 0x42ae, 0x41c3, 0x1cad, 0x4203, 0x40bc, 0x43c6, 0xbf78, 0xbae9, 0x4222, 0x0094, 0x4350, 0x41d9, 0x415e, 0xb2b7, 0x4088, 0xb060, 0x40bd, 0xbf6b, 0x1a14, 0xa78c, 0xb2cf, 0x4021, 0x1adf, 0xba10, 0x1bfb, 0x41fe, 0x1b0e, 0x4369, 0x40e6, 0xbfab, 0x4077, 0x4673, 0x2c2d, 0x1df1, 0xb2bd, 0x42b0, 0xbf90, 0x03a8, 0xae03, 0x40ea, 0xbf15, 0x388f, 0x43ef, 0x2e69, 0x4130, 0x40b8, 0x3597, 0x4688, 0x1a86, 0x08aa, 0x4479, 0x45ea, 0x433c, 0xbf60, 0x1e2d, 0x1a2d, 0xb001, 0x1932, 0xaf95, 0x41aa, 0x4477, 0xb050, 0x42f6, 0xb219, 0xb03e, 0xb27e, 0xb0e7, 0xbae9, 0x4189, 0x4077, 0xbfb1, 0x407f, 0x454d, 0x044d, 0x410f, 0x46fa, 0x4265, 0x43aa, 0x41e0, 0x19da, 0x3196, 0x403d, 0x435c, 0x40f5, 0x4067, 0x3122, 0x1ea4, 0x40d7, 0x40dd, 0x1cb3, 0xb241, 0xb20d, 0xae94, 0xb20c, 0x42bb, 0x41a6, 0x4084, 0xa88d, 0xbfb8, 0x42c2, 0xb260, 0xba2d, 0x4119, 0xba63, 0xb2cf, 0x2aaa, 0xa2c2, 0x32e4, 0x42eb, 0xb24c, 0x04eb, 0x43fc, 0xb2c5, 0x4158, 0xb26f, 0x4664, 0x2f2a, 0xb0f7, 0x0290, 0x40d7, 0x1955, 0x1cc8, 0x405c, 0x1d87, 0x40b5, 0xbf89, 0xa488, 0xb2db, 0x401e, 0xb25d, 0xb2c8, 0xba28, 0xb09b, 0x0813, 0x06b2, 0xba07, 0x416e, 0x2476, 0x40c1, 0x1902, 0xb0c8, 0x3d59, 0x26cd, 0xbad0, 0x3338, 0xb2d5, 0x41c1, 0x19e0, 0xbfdf, 0x1e0b, 0x4301, 0x00f0, 0xb252, 0xb2be, 0x4614, 0x1c4b, 0xb00a, 0x44b3, 0xba75, 0x416c, 0x4283, 0x0e46, 0xae89, 0xba0e, 0x4287, 0x3290, 0x4296, 0x43fe, 0xa47a, 0x4243, 0xba58, 0x4076, 0xb2d3, 0xb2ee, 0x42c8, 0xbf8a, 0x4087, 0x465d, 0x0812, 0xb0d0, 0x1b04, 0x41c3, 0xba2c, 0x461b, 0x43c2, 0x1d5b, 0x439d, 0x41d2, 0xbf62, 0x4283, 0x41d3, 0x2cd1, 0x19da, 0xba70, 0xba7d, 0xbf4c, 0x4024, 0xa8a8, 0x3533, 0x4356, 0x4360, 0x40e8, 0x1a0c, 0x4217, 0x46ad, 0x2bcf, 0x4136, 0x41ba, 0xa279, 0x25e8, 0xbfe0, 0xb2a5, 0xa2f0, 0xbf15, 0x41e7, 0xbac9, 0x1f73, 0x410f, 0x0d8a, 0x40d3, 0xab54, 0x4219, 0x1984, 0xbada, 0x4384, 0x1b68, 0x44a8, 0x11d9, 0x4048, 0xbfa6, 0xb2f9, 0x42a0, 0x4237, 0x1298, 0xb0ce, 0x42e5, 0xb2c3, 0x40ce, 0x43eb, 0x29fe, 0x437a, 0xb238, 0xb2e5, 0xa899, 0xb05c, 0xbf91, 0x1947, 0x446b, 0x2586, 0x407f, 0xb275, 0x4193, 0x40eb, 0x439a, 0x2b6e, 0x4378, 0xb2b0, 0xba74, 0x438a, 0x1949, 0xab0c, 0xb208, 0xbae5, 0x4631, 0xbfcd, 0x4165, 0xba67, 0x4038, 0xb007, 0x177e, 0x4275, 0x1b62, 0x2fff, 0x45c6, 0x31d9, 0x429d, 0x18c1, 0x46dc, 0xb2c2, 0x41a9, 0x4390, 0x4362, 0xb0a3, 0xbae3, 0x102a, 0xb08c, 0x27c5, 0xbf0d, 0x1b86, 0xadce, 0xb0bb, 0x1d65, 0x412e, 0xb0d9, 0x2bf0, 0x320b, 0x433e, 0xadb6, 0x406a, 0x20e1, 0x1c81, 0x40ba, 0x13e1, 0x19cd, 0xb2a4, 0xbf5a, 0x46aa, 0x43b8, 0xb211, 0x4770, 0xe7fe + ], + StartRegs = [0x35faf52d, 0x178d83c4, 0xd9eed1e5, 0x2d403c23, 0x142e3ba1, 0xfdb96242, 0xb8568fae, 0xd9e9fcd8, 0xdb303d2f, 0xb29babc4, 0x02ba22df, 0x57781ed2, 0x79ab341b, 0x84723a31, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000c5, 0x000000c5, 0x000000c5, 0x0fa51006, 0x79ab341b, 0x000000c5, 0x57781ed2, 0x57781ed2, 0xfffffd5f, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x0968, 0x41a2, 0x1b65, 0xb07e, 0xba6a, 0x403d, 0x25a7, 0xba28, 0x0ab4, 0x3baf, 0xbf63, 0x300c, 0x16a4, 0x3997, 0xb26e, 0xb094, 0xb27b, 0x4184, 0x26c7, 0x4019, 0xbf84, 0x437f, 0x1beb, 0x40ff, 0x4103, 0x4642, 0x41df, 0x4310, 0xa2cb, 0xbfbf, 0x33f8, 0x4387, 0x3837, 0x41fb, 0x26da, 0xb076, 0x459d, 0x044e, 0xbf19, 0x4041, 0x021c, 0x1051, 0x17ba, 0xba72, 0xb26d, 0x4418, 0x0d16, 0x4235, 0xb299, 0x2c02, 0xb27c, 0xbaf1, 0xac4f, 0x4434, 0xb20c, 0x0a23, 0x41dc, 0xb00f, 0xbf14, 0x3ed6, 0x404c, 0x45c2, 0x3528, 0x2bdb, 0xa5c7, 0x40b6, 0xbf60, 0x4042, 0x43ae, 0xa0f5, 0xbf62, 0x1fdf, 0xba2b, 0xb2eb, 0xa7ef, 0x1c7a, 0x02de, 0x43c3, 0xbfde, 0xb247, 0xba79, 0x4010, 0x43d3, 0x41eb, 0x4211, 0x43a9, 0x238e, 0x44ec, 0x3f4b, 0xb0e7, 0x4338, 0xb2b1, 0x40d2, 0x438c, 0x409e, 0xb285, 0x191c, 0xb2f6, 0x4047, 0x1d63, 0x213a, 0x400d, 0xb2c8, 0xa8b9, 0x04ea, 0x40ca, 0x407b, 0xbfdc, 0xb295, 0x265d, 0x404a, 0x427d, 0x42d7, 0xb03e, 0x1647, 0x4325, 0x183d, 0x0b07, 0x1c1a, 0xa8e1, 0x4147, 0xae6f, 0x2492, 0x10cf, 0x1af3, 0x411e, 0xa991, 0x12a1, 0xbfa1, 0x40df, 0xa2c7, 0x4275, 0x17de, 0x0093, 0x151f, 0x427d, 0x40d9, 0x4171, 0x429b, 0x3fac, 0x4170, 0x0994, 0x4140, 0xb04b, 0xad99, 0xb257, 0x3c21, 0x4301, 0xba22, 0xbae2, 0x3a3d, 0x4290, 0xbf5a, 0x41e3, 0x424d, 0xba3a, 0xb264, 0xb2e8, 0xbfe1, 0x42b7, 0xb217, 0x42a0, 0x404d, 0xb200, 0x42fd, 0x40c3, 0x410d, 0xb231, 0x434c, 0x41a2, 0x2c01, 0x02ff, 0x432f, 0x4335, 0x42a8, 0x426c, 0x4180, 0x446b, 0xbf80, 0xa9b8, 0x4223, 0xbf45, 0x02ae, 0xb2c5, 0xb291, 0xb0a2, 0x1e0f, 0xbaca, 0x44f9, 0x2594, 0xb02c, 0x1697, 0x1a0f, 0xba47, 0xa098, 0x411b, 0xbae1, 0x45eb, 0x42c2, 0xba6b, 0x409f, 0xb02c, 0x4382, 0xba24, 0xba79, 0x2dda, 0x4141, 0x41fc, 0x462d, 0xb0bd, 0xbfa8, 0x43d8, 0x2cda, 0x43dc, 0x401c, 0xba12, 0xb228, 0x436f, 0x423b, 0xb20a, 0x2089, 0xa5eb, 0x421a, 0xb2dc, 0x406c, 0xbf71, 0x439c, 0x43d2, 0xb27d, 0x43a6, 0xaa82, 0x4195, 0x403d, 0x1811, 0x41c9, 0xbafe, 0x41a8, 0x3d5e, 0x414b, 0xbf61, 0x1955, 0x374f, 0x2d82, 0xb23b, 0xb080, 0x0c12, 0x14c7, 0xba50, 0xb25c, 0x40ab, 0x4132, 0x4270, 0x4375, 0x184b, 0xbf3e, 0xbaec, 0x3645, 0x4045, 0x40e8, 0x1939, 0x40de, 0xbf03, 0x406e, 0x4201, 0x4544, 0x40fc, 0x427d, 0x2550, 0x0046, 0xa85e, 0x39dc, 0x419f, 0x401f, 0xb0a7, 0x4299, 0x1635, 0x430f, 0x40e4, 0x4163, 0x40b5, 0x4304, 0xbf80, 0x07b0, 0x1b13, 0xb207, 0x4218, 0x437c, 0xbf86, 0x400f, 0x4334, 0xb26a, 0x288d, 0x4235, 0x4462, 0xb000, 0xa2a9, 0xba54, 0x42e0, 0xb29e, 0x4273, 0xb09b, 0x341f, 0xb281, 0x33e0, 0x38e9, 0x40da, 0x464c, 0xbf9e, 0xa1f8, 0x40a4, 0x3a31, 0x4190, 0x459d, 0x40ec, 0x2a92, 0x463e, 0xba46, 0x014a, 0x4001, 0x1903, 0x428b, 0x38c6, 0x40d0, 0xb27c, 0x4361, 0x4467, 0x411d, 0x4044, 0x4205, 0x196f, 0xbf2b, 0xb2d9, 0x4351, 0xb29b, 0xbaef, 0x15fc, 0x410a, 0x1ac1, 0xb2c9, 0x150f, 0x419a, 0xb266, 0x0f11, 0x46a2, 0x412d, 0xb2da, 0xb259, 0x42ab, 0x0bad, 0x40a5, 0x42a6, 0x42a8, 0x1d2c, 0x42d0, 0xb2a3, 0x1ac2, 0xbf0a, 0x1c92, 0xb0a7, 0xaaa2, 0xbf5a, 0x4210, 0x428a, 0x1d36, 0xbfd4, 0x42d9, 0xb25f, 0x426e, 0x4198, 0x4200, 0x01dd, 0x1a2b, 0x4216, 0x4482, 0xbadf, 0x406f, 0x1839, 0x41f5, 0x43df, 0xb28f, 0xba7f, 0x402b, 0x412b, 0xb031, 0xbf1f, 0x419c, 0x43dc, 0xa31c, 0x43de, 0xb21c, 0x07e8, 0xa414, 0x41e8, 0x190a, 0x1974, 0x43a7, 0x43ec, 0xba51, 0x42a3, 0x4174, 0x1c77, 0x1cce, 0xb217, 0x0fd5, 0xbf4a, 0x07cb, 0x403c, 0x4011, 0xb20f, 0x2d7e, 0x4049, 0x4131, 0x1a6a, 0x187a, 0x420b, 0x4395, 0x24f5, 0x4009, 0xbf44, 0x0822, 0x0457, 0x137e, 0x1dd1, 0xb093, 0x1543, 0xb2df, 0x4022, 0xb0ca, 0xbf0a, 0xba0d, 0x44f5, 0x433e, 0xb274, 0x41ce, 0xb26d, 0x413e, 0x442b, 0xb0b6, 0x405b, 0x45b9, 0xb271, 0x454f, 0x3b98, 0xb250, 0x42ea, 0xbf41, 0x3ab9, 0x18ac, 0x42c8, 0x1f9c, 0x4342, 0x456d, 0x40d6, 0x32e8, 0x1e55, 0x40af, 0x40f6, 0x406d, 0xb2b0, 0x4081, 0xba3f, 0x45c3, 0xbfc9, 0x1197, 0x46e8, 0xb25f, 0x336f, 0x0655, 0xbf47, 0x460b, 0x467f, 0xaad1, 0xb0d9, 0x3dc1, 0xba3c, 0x1986, 0xbf18, 0x410f, 0x42de, 0x18db, 0xb284, 0xb2cb, 0x433c, 0x2e9e, 0x1c28, 0x4316, 0xbf0c, 0xa396, 0x44e4, 0x043d, 0x421d, 0x24f3, 0x46d8, 0xbfdb, 0x43ba, 0xbfe0, 0x3e5d, 0x42ba, 0x4141, 0x42d3, 0xba66, 0x4113, 0xbae7, 0xbfd2, 0x209b, 0xba1f, 0x430b, 0x40da, 0x25ba, 0x4183, 0x1e9b, 0x4160, 0x4321, 0x41ab, 0x1ddb, 0x1c06, 0x41c9, 0x44e5, 0xba67, 0x2f30, 0x42ad, 0x43be, 0xa2cc, 0x41d7, 0x434e, 0x41a1, 0x3017, 0x34dd, 0xbf42, 0xb253, 0x3bb3, 0x42a0, 0x40f5, 0x1c73, 0x42d9, 0xba2a, 0x42aa, 0xb2f7, 0x424f, 0xbf61, 0x427f, 0x319f, 0x4281, 0x0e25, 0x0bf2, 0x40df, 0x4367, 0xbf16, 0x128a, 0x42b4, 0x43af, 0x1d3c, 0x20d8, 0x42d0, 0x4374, 0xb291, 0x3c17, 0x413e, 0xbf67, 0xba0e, 0xb09e, 0x432c, 0x4355, 0x422b, 0x468a, 0xba1f, 0x414c, 0x4092, 0xb24a, 0x4085, 0x0c34, 0xb0e7, 0x055e, 0x4052, 0x350c, 0x00c1, 0x1b27, 0x42ff, 0xb258, 0x46db, 0xb204, 0xbf9a, 0x204b, 0xb228, 0x4438, 0x42aa, 0x1acc, 0x43c5, 0x40ea, 0x4028, 0x1ff9, 0x0634, 0xba3c, 0x41fe, 0x4205, 0x4310, 0x18b9, 0x1c8a, 0x4390, 0x23ab, 0x4131, 0x4632, 0xbf4e, 0x4110, 0x4337, 0x3ef8, 0xa221, 0xa445, 0x3505, 0x4016, 0xb0be, 0x41ca, 0xbff0, 0x40e0, 0xaf82, 0x43d3, 0x4004, 0xbaf2, 0x44fa, 0x43d3, 0xbadb, 0x1a50, 0x42ba, 0x07db, 0xba13, 0xb230, 0xbadf, 0x43a0, 0x18c3, 0xb2a0, 0xb283, 0xbf41, 0x1d95, 0x1070, 0x2958, 0xb047, 0x42fb, 0xb21f, 0x04f0, 0x43b4, 0xba7e, 0x4200, 0x41f2, 0x42ea, 0x42d1, 0x4270, 0x1f13, 0x434b, 0xb24d, 0x2b14, 0x1577, 0x1eae, 0x4207, 0x46d4, 0x41a0, 0x41d7, 0x0088, 0x4069, 0x1ee5, 0x40a1, 0xbf44, 0x4053, 0x440d, 0x1fe8, 0x427b, 0x4048, 0x40fb, 0x4340, 0xb270, 0x25d9, 0xba7a, 0x1859, 0x393f, 0xb2b3, 0x150b, 0x4332, 0x0152, 0x0589, 0xb2e5, 0x4088, 0x20a7, 0xba4d, 0xa406, 0x37d6, 0x40b6, 0xbadd, 0xbfd7, 0x409b, 0x4116, 0x031c, 0x417b, 0x438a, 0xbff0, 0x40a8, 0x1d5e, 0x426d, 0xb2ee, 0x4380, 0xbf0d, 0xb212, 0x1b52, 0x2108, 0x1b29, 0x1b85, 0x43cb, 0x379e, 0x43b6, 0xbfb0, 0xb0ce, 0x0e2c, 0x02eb, 0x223d, 0x4185, 0x400d, 0xb200, 0x435e, 0x4205, 0xba20, 0xbf5f, 0xb06d, 0x18b9, 0x4235, 0x42e5, 0xbaf4, 0xb0fe, 0x0de1, 0x458c, 0x463b, 0x1a59, 0x1efc, 0xb2de, 0x41df, 0x1f03, 0x3cb2, 0x1c76, 0xa923, 0x462f, 0x1abc, 0xbf0d, 0x41e6, 0x42ad, 0x4625, 0x0d75, 0x45bc, 0xba5a, 0x42b3, 0xba0b, 0x4250, 0x4123, 0x1956, 0x275c, 0xbaf5, 0x3f77, 0xba2f, 0x1b93, 0x4209, 0x4370, 0xb2d5, 0x4164, 0xbfe8, 0x40c2, 0x4399, 0x40ee, 0xbacf, 0x4230, 0x4055, 0x4342, 0x428e, 0x4372, 0x1af5, 0xb0f6, 0x4096, 0x1a4a, 0x1c74, 0x1b7b, 0x27d4, 0x1dfb, 0x3d43, 0x0c87, 0x2649, 0xbaf2, 0x40dc, 0xbf70, 0xbff0, 0xb24a, 0x40f6, 0xbf62, 0x42da, 0x46d3, 0x407b, 0x432d, 0xb207, 0x427a, 0x417b, 0x4156, 0x291d, 0x41c1, 0x41c8, 0x42d8, 0xb27c, 0xb0a5, 0x42cf, 0x2f18, 0x4661, 0x426a, 0x4316, 0x3f27, 0xbade, 0x42fd, 0x43e9, 0xbf5b, 0x4172, 0xac9d, 0x429e, 0x444b, 0xa3d2, 0x19ac, 0x411e, 0x211e, 0x40dc, 0x4332, 0x405f, 0x2ae6, 0x1bc6, 0xba2b, 0x1f21, 0x4124, 0x404b, 0x42b0, 0x4217, 0xb2b4, 0xb0cc, 0x2e76, 0x1f91, 0x23f0, 0xb206, 0x0d78, 0x4323, 0x312a, 0xbf46, 0x4198, 0x42de, 0x430c, 0x433a, 0x40f4, 0x41ea, 0x1c1d, 0x447e, 0xbae1, 0xa070, 0x415a, 0x4111, 0xb026, 0x4323, 0xbf72, 0x4419, 0x410e, 0x04c5, 0x422f, 0x16fa, 0x3627, 0x24fc, 0x42b9, 0xbf6e, 0x42ef, 0x1589, 0x05b3, 0xbf84, 0x3920, 0x01a7, 0x0d74, 0x4240, 0x241c, 0x1b1f, 0x408d, 0x1f58, 0x40d2, 0xb072, 0xbf29, 0x1994, 0x16a6, 0x403f, 0x4145, 0x2d03, 0xa4f8, 0x1b74, 0x4195, 0xba79, 0x4418, 0x4037, 0x40f8, 0xba19, 0xba7c, 0x44c8, 0x435a, 0x40e3, 0x43c3, 0x431b, 0x4124, 0x409b, 0x4355, 0x42db, 0x4300, 0x17a9, 0x3dfd, 0xbf0b, 0x41eb, 0xbac5, 0x0b64, 0x1f66, 0x098c, 0xbf60, 0x456a, 0xb0c2, 0x223c, 0x4301, 0xb20e, 0x4628, 0x4062, 0x1d7d, 0x43b7, 0x4369, 0x424c, 0xbaf7, 0xbfa9, 0xbace, 0x41c5, 0x4390, 0x420e, 0x40ff, 0x41f4, 0x4186, 0x4022, 0xbfa0, 0x4151, 0xa81d, 0x4019, 0x4220, 0x41f5, 0xbfcf, 0x43b6, 0xb290, 0xbfc0, 0x4311, 0x437d, 0xbfa0, 0xb2a4, 0xba2a, 0x41e6, 0xbf81, 0x0d08, 0x1e47, 0x1cb0, 0x4370, 0x12b8, 0xb261, 0xb26a, 0x437c, 0xbafe, 0x42b8, 0x43e5, 0xb0e5, 0xba58, 0x4158, 0x42a0, 0x4311, 0x4144, 0x1fc0, 0x1dc0, 0x08a7, 0x171f, 0x4637, 0x445d, 0x0a52, 0x1f8e, 0x1a78, 0xb2e5, 0xbf42, 0xba74, 0xba51, 0x1dd6, 0x45b6, 0x4278, 0x4389, 0x4230, 0xa3e1, 0x0f67, 0x42d0, 0xba44, 0xbfb0, 0x4383, 0x4583, 0xad13, 0x404e, 0x43b2, 0x4295, 0x0b4d, 0x42e6, 0x42bf, 0x107b, 0xbfb8, 0x1fa3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x5384f6cd, 0x93b1eb86, 0x519fcf8e, 0x564cda67, 0xcde58997, 0xf3ec3c43, 0x6c08d4ea, 0x6e3c1d46, 0xe8c48cc6, 0xcea89f8e, 0x2f68758c, 0x0e162d4d, 0xc7597952, 0x77abbef9, 0x00000000, 0xa00001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0xdcbede57, 0xcea8b10a, 0x00011309, 0x0e162d4d, 0x00011309, 0xf5b62f3f, 0x00000000, 0x400001d0 }, + Instructions = [0x0968, 0x41a2, 0x1b65, 0xb07e, 0xba6a, 0x403d, 0x25a7, 0xba28, 0x0ab4, 0x3baf, 0xbf63, 0x300c, 0x16a4, 0x3997, 0xb26e, 0xb094, 0xb27b, 0x4184, 0x26c7, 0x4019, 0xbf84, 0x437f, 0x1beb, 0x40ff, 0x4103, 0x4642, 0x41df, 0x4310, 0xa2cb, 0xbfbf, 0x33f8, 0x4387, 0x3837, 0x41fb, 0x26da, 0xb076, 0x459d, 0x044e, 0xbf19, 0x4041, 0x021c, 0x1051, 0x17ba, 0xba72, 0xb26d, 0x4418, 0x0d16, 0x4235, 0xb299, 0x2c02, 0xb27c, 0xbaf1, 0xac4f, 0x4434, 0xb20c, 0x0a23, 0x41dc, 0xb00f, 0xbf14, 0x3ed6, 0x404c, 0x45c2, 0x3528, 0x2bdb, 0xa5c7, 0x40b6, 0xbf60, 0x4042, 0x43ae, 0xa0f5, 0xbf62, 0x1fdf, 0xba2b, 0xb2eb, 0xa7ef, 0x1c7a, 0x02de, 0x43c3, 0xbfde, 0xb247, 0xba79, 0x4010, 0x43d3, 0x41eb, 0x4211, 0x43a9, 0x238e, 0x44ec, 0x3f4b, 0xb0e7, 0x4338, 0xb2b1, 0x40d2, 0x438c, 0x409e, 0xb285, 0x191c, 0xb2f6, 0x4047, 0x1d63, 0x213a, 0x400d, 0xb2c8, 0xa8b9, 0x04ea, 0x40ca, 0x407b, 0xbfdc, 0xb295, 0x265d, 0x404a, 0x427d, 0x42d7, 0xb03e, 0x1647, 0x4325, 0x183d, 0x0b07, 0x1c1a, 0xa8e1, 0x4147, 0xae6f, 0x2492, 0x10cf, 0x1af3, 0x411e, 0xa991, 0x12a1, 0xbfa1, 0x40df, 0xa2c7, 0x4275, 0x17de, 0x0093, 0x151f, 0x427d, 0x40d9, 0x4171, 0x429b, 0x3fac, 0x4170, 0x0994, 0x4140, 0xb04b, 0xad99, 0xb257, 0x3c21, 0x4301, 0xba22, 0xbae2, 0x3a3d, 0x4290, 0xbf5a, 0x41e3, 0x424d, 0xba3a, 0xb264, 0xb2e8, 0xbfe1, 0x42b7, 0xb217, 0x42a0, 0x404d, 0xb200, 0x42fd, 0x40c3, 0x410d, 0xb231, 0x434c, 0x41a2, 0x2c01, 0x02ff, 0x432f, 0x4335, 0x42a8, 0x426c, 0x4180, 0x446b, 0xbf80, 0xa9b8, 0x4223, 0xbf45, 0x02ae, 0xb2c5, 0xb291, 0xb0a2, 0x1e0f, 0xbaca, 0x44f9, 0x2594, 0xb02c, 0x1697, 0x1a0f, 0xba47, 0xa098, 0x411b, 0xbae1, 0x45eb, 0x42c2, 0xba6b, 0x409f, 0xb02c, 0x4382, 0xba24, 0xba79, 0x2dda, 0x4141, 0x41fc, 0x462d, 0xb0bd, 0xbfa8, 0x43d8, 0x2cda, 0x43dc, 0x401c, 0xba12, 0xb228, 0x436f, 0x423b, 0xb20a, 0x2089, 0xa5eb, 0x421a, 0xb2dc, 0x406c, 0xbf71, 0x439c, 0x43d2, 0xb27d, 0x43a6, 0xaa82, 0x4195, 0x403d, 0x1811, 0x41c9, 0xbafe, 0x41a8, 0x3d5e, 0x414b, 0xbf61, 0x1955, 0x374f, 0x2d82, 0xb23b, 0xb080, 0x0c12, 0x14c7, 0xba50, 0xb25c, 0x40ab, 0x4132, 0x4270, 0x4375, 0x184b, 0xbf3e, 0xbaec, 0x3645, 0x4045, 0x40e8, 0x1939, 0x40de, 0xbf03, 0x406e, 0x4201, 0x4544, 0x40fc, 0x427d, 0x2550, 0x0046, 0xa85e, 0x39dc, 0x419f, 0x401f, 0xb0a7, 0x4299, 0x1635, 0x430f, 0x40e4, 0x4163, 0x40b5, 0x4304, 0xbf80, 0x07b0, 0x1b13, 0xb207, 0x4218, 0x437c, 0xbf86, 0x400f, 0x4334, 0xb26a, 0x288d, 0x4235, 0x4462, 0xb000, 0xa2a9, 0xba54, 0x42e0, 0xb29e, 0x4273, 0xb09b, 0x341f, 0xb281, 0x33e0, 0x38e9, 0x40da, 0x464c, 0xbf9e, 0xa1f8, 0x40a4, 0x3a31, 0x4190, 0x459d, 0x40ec, 0x2a92, 0x463e, 0xba46, 0x014a, 0x4001, 0x1903, 0x428b, 0x38c6, 0x40d0, 0xb27c, 0x4361, 0x4467, 0x411d, 0x4044, 0x4205, 0x196f, 0xbf2b, 0xb2d9, 0x4351, 0xb29b, 0xbaef, 0x15fc, 0x410a, 0x1ac1, 0xb2c9, 0x150f, 0x419a, 0xb266, 0x0f11, 0x46a2, 0x412d, 0xb2da, 0xb259, 0x42ab, 0x0bad, 0x40a5, 0x42a6, 0x42a8, 0x1d2c, 0x42d0, 0xb2a3, 0x1ac2, 0xbf0a, 0x1c92, 0xb0a7, 0xaaa2, 0xbf5a, 0x4210, 0x428a, 0x1d36, 0xbfd4, 0x42d9, 0xb25f, 0x426e, 0x4198, 0x4200, 0x01dd, 0x1a2b, 0x4216, 0x4482, 0xbadf, 0x406f, 0x1839, 0x41f5, 0x43df, 0xb28f, 0xba7f, 0x402b, 0x412b, 0xb031, 0xbf1f, 0x419c, 0x43dc, 0xa31c, 0x43de, 0xb21c, 0x07e8, 0xa414, 0x41e8, 0x190a, 0x1974, 0x43a7, 0x43ec, 0xba51, 0x42a3, 0x4174, 0x1c77, 0x1cce, 0xb217, 0x0fd5, 0xbf4a, 0x07cb, 0x403c, 0x4011, 0xb20f, 0x2d7e, 0x4049, 0x4131, 0x1a6a, 0x187a, 0x420b, 0x4395, 0x24f5, 0x4009, 0xbf44, 0x0822, 0x0457, 0x137e, 0x1dd1, 0xb093, 0x1543, 0xb2df, 0x4022, 0xb0ca, 0xbf0a, 0xba0d, 0x44f5, 0x433e, 0xb274, 0x41ce, 0xb26d, 0x413e, 0x442b, 0xb0b6, 0x405b, 0x45b9, 0xb271, 0x454f, 0x3b98, 0xb250, 0x42ea, 0xbf41, 0x3ab9, 0x18ac, 0x42c8, 0x1f9c, 0x4342, 0x456d, 0x40d6, 0x32e8, 0x1e55, 0x40af, 0x40f6, 0x406d, 0xb2b0, 0x4081, 0xba3f, 0x45c3, 0xbfc9, 0x1197, 0x46e8, 0xb25f, 0x336f, 0x0655, 0xbf47, 0x460b, 0x467f, 0xaad1, 0xb0d9, 0x3dc1, 0xba3c, 0x1986, 0xbf18, 0x410f, 0x42de, 0x18db, 0xb284, 0xb2cb, 0x433c, 0x2e9e, 0x1c28, 0x4316, 0xbf0c, 0xa396, 0x44e4, 0x043d, 0x421d, 0x24f3, 0x46d8, 0xbfdb, 0x43ba, 0xbfe0, 0x3e5d, 0x42ba, 0x4141, 0x42d3, 0xba66, 0x4113, 0xbae7, 0xbfd2, 0x209b, 0xba1f, 0x430b, 0x40da, 0x25ba, 0x4183, 0x1e9b, 0x4160, 0x4321, 0x41ab, 0x1ddb, 0x1c06, 0x41c9, 0x44e5, 0xba67, 0x2f30, 0x42ad, 0x43be, 0xa2cc, 0x41d7, 0x434e, 0x41a1, 0x3017, 0x34dd, 0xbf42, 0xb253, 0x3bb3, 0x42a0, 0x40f5, 0x1c73, 0x42d9, 0xba2a, 0x42aa, 0xb2f7, 0x424f, 0xbf61, 0x427f, 0x319f, 0x4281, 0x0e25, 0x0bf2, 0x40df, 0x4367, 0xbf16, 0x128a, 0x42b4, 0x43af, 0x1d3c, 0x20d8, 0x42d0, 0x4374, 0xb291, 0x3c17, 0x413e, 0xbf67, 0xba0e, 0xb09e, 0x432c, 0x4355, 0x422b, 0x468a, 0xba1f, 0x414c, 0x4092, 0xb24a, 0x4085, 0x0c34, 0xb0e7, 0x055e, 0x4052, 0x350c, 0x00c1, 0x1b27, 0x42ff, 0xb258, 0x46db, 0xb204, 0xbf9a, 0x204b, 0xb228, 0x4438, 0x42aa, 0x1acc, 0x43c5, 0x40ea, 0x4028, 0x1ff9, 0x0634, 0xba3c, 0x41fe, 0x4205, 0x4310, 0x18b9, 0x1c8a, 0x4390, 0x23ab, 0x4131, 0x4632, 0xbf4e, 0x4110, 0x4337, 0x3ef8, 0xa221, 0xa445, 0x3505, 0x4016, 0xb0be, 0x41ca, 0xbff0, 0x40e0, 0xaf82, 0x43d3, 0x4004, 0xbaf2, 0x44fa, 0x43d3, 0xbadb, 0x1a50, 0x42ba, 0x07db, 0xba13, 0xb230, 0xbadf, 0x43a0, 0x18c3, 0xb2a0, 0xb283, 0xbf41, 0x1d95, 0x1070, 0x2958, 0xb047, 0x42fb, 0xb21f, 0x04f0, 0x43b4, 0xba7e, 0x4200, 0x41f2, 0x42ea, 0x42d1, 0x4270, 0x1f13, 0x434b, 0xb24d, 0x2b14, 0x1577, 0x1eae, 0x4207, 0x46d4, 0x41a0, 0x41d7, 0x0088, 0x4069, 0x1ee5, 0x40a1, 0xbf44, 0x4053, 0x440d, 0x1fe8, 0x427b, 0x4048, 0x40fb, 0x4340, 0xb270, 0x25d9, 0xba7a, 0x1859, 0x393f, 0xb2b3, 0x150b, 0x4332, 0x0152, 0x0589, 0xb2e5, 0x4088, 0x20a7, 0xba4d, 0xa406, 0x37d6, 0x40b6, 0xbadd, 0xbfd7, 0x409b, 0x4116, 0x031c, 0x417b, 0x438a, 0xbff0, 0x40a8, 0x1d5e, 0x426d, 0xb2ee, 0x4380, 0xbf0d, 0xb212, 0x1b52, 0x2108, 0x1b29, 0x1b85, 0x43cb, 0x379e, 0x43b6, 0xbfb0, 0xb0ce, 0x0e2c, 0x02eb, 0x223d, 0x4185, 0x400d, 0xb200, 0x435e, 0x4205, 0xba20, 0xbf5f, 0xb06d, 0x18b9, 0x4235, 0x42e5, 0xbaf4, 0xb0fe, 0x0de1, 0x458c, 0x463b, 0x1a59, 0x1efc, 0xb2de, 0x41df, 0x1f03, 0x3cb2, 0x1c76, 0xa923, 0x462f, 0x1abc, 0xbf0d, 0x41e6, 0x42ad, 0x4625, 0x0d75, 0x45bc, 0xba5a, 0x42b3, 0xba0b, 0x4250, 0x4123, 0x1956, 0x275c, 0xbaf5, 0x3f77, 0xba2f, 0x1b93, 0x4209, 0x4370, 0xb2d5, 0x4164, 0xbfe8, 0x40c2, 0x4399, 0x40ee, 0xbacf, 0x4230, 0x4055, 0x4342, 0x428e, 0x4372, 0x1af5, 0xb0f6, 0x4096, 0x1a4a, 0x1c74, 0x1b7b, 0x27d4, 0x1dfb, 0x3d43, 0x0c87, 0x2649, 0xbaf2, 0x40dc, 0xbf70, 0xbff0, 0xb24a, 0x40f6, 0xbf62, 0x42da, 0x46d3, 0x407b, 0x432d, 0xb207, 0x427a, 0x417b, 0x4156, 0x291d, 0x41c1, 0x41c8, 0x42d8, 0xb27c, 0xb0a5, 0x42cf, 0x2f18, 0x4661, 0x426a, 0x4316, 0x3f27, 0xbade, 0x42fd, 0x43e9, 0xbf5b, 0x4172, 0xac9d, 0x429e, 0x444b, 0xa3d2, 0x19ac, 0x411e, 0x211e, 0x40dc, 0x4332, 0x405f, 0x2ae6, 0x1bc6, 0xba2b, 0x1f21, 0x4124, 0x404b, 0x42b0, 0x4217, 0xb2b4, 0xb0cc, 0x2e76, 0x1f91, 0x23f0, 0xb206, 0x0d78, 0x4323, 0x312a, 0xbf46, 0x4198, 0x42de, 0x430c, 0x433a, 0x40f4, 0x41ea, 0x1c1d, 0x447e, 0xbae1, 0xa070, 0x415a, 0x4111, 0xb026, 0x4323, 0xbf72, 0x4419, 0x410e, 0x04c5, 0x422f, 0x16fa, 0x3627, 0x24fc, 0x42b9, 0xbf6e, 0x42ef, 0x1589, 0x05b3, 0xbf84, 0x3920, 0x01a7, 0x0d74, 0x4240, 0x241c, 0x1b1f, 0x408d, 0x1f58, 0x40d2, 0xb072, 0xbf29, 0x1994, 0x16a6, 0x403f, 0x4145, 0x2d03, 0xa4f8, 0x1b74, 0x4195, 0xba79, 0x4418, 0x4037, 0x40f8, 0xba19, 0xba7c, 0x44c8, 0x435a, 0x40e3, 0x43c3, 0x431b, 0x4124, 0x409b, 0x4355, 0x42db, 0x4300, 0x17a9, 0x3dfd, 0xbf0b, 0x41eb, 0xbac5, 0x0b64, 0x1f66, 0x098c, 0xbf60, 0x456a, 0xb0c2, 0x223c, 0x4301, 0xb20e, 0x4628, 0x4062, 0x1d7d, 0x43b7, 0x4369, 0x424c, 0xbaf7, 0xbfa9, 0xbace, 0x41c5, 0x4390, 0x420e, 0x40ff, 0x41f4, 0x4186, 0x4022, 0xbfa0, 0x4151, 0xa81d, 0x4019, 0x4220, 0x41f5, 0xbfcf, 0x43b6, 0xb290, 0xbfc0, 0x4311, 0x437d, 0xbfa0, 0xb2a4, 0xba2a, 0x41e6, 0xbf81, 0x0d08, 0x1e47, 0x1cb0, 0x4370, 0x12b8, 0xb261, 0xb26a, 0x437c, 0xbafe, 0x42b8, 0x43e5, 0xb0e5, 0xba58, 0x4158, 0x42a0, 0x4311, 0x4144, 0x1fc0, 0x1dc0, 0x08a7, 0x171f, 0x4637, 0x445d, 0x0a52, 0x1f8e, 0x1a78, 0xb2e5, 0xbf42, 0xba74, 0xba51, 0x1dd6, 0x45b6, 0x4278, 0x4389, 0x4230, 0xa3e1, 0x0f67, 0x42d0, 0xba44, 0xbfb0, 0x4383, 0x4583, 0xad13, 0x404e, 0x43b2, 0x4295, 0x0b4d, 0x42e6, 0x42bf, 0x107b, 0xbfb8, 0x1fa3, 0x4770, 0xe7fe + ], + StartRegs = [0x5384f6cd, 0x93b1eb86, 0x519fcf8e, 0x564cda67, 0xcde58997, 0xf3ec3c43, 0x6c08d4ea, 0x6e3c1d46, 0xe8c48cc6, 0xcea89f8e, 0x2f68758c, 0x0e162d4d, 0xc7597952, 0x77abbef9, 0x00000000, 0xa00001f0 + ], + FinalRegs = [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0xdcbede57, 0xcea8b10a, 0x00011309, 0x0e162d4d, 0x00011309, 0xf5b62f3f, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x1cdd, 0x1c98, 0xa82c, 0x22bd, 0xabb4, 0x4105, 0x3601, 0x432b, 0x406b, 0xb08c, 0xbacf, 0xb2ee, 0x382b, 0xb055, 0x4418, 0x16af, 0x4171, 0xb284, 0xb2c7, 0x4273, 0x43c5, 0xbf28, 0x4374, 0xb22c, 0xa063, 0x4242, 0x43f9, 0xba6a, 0x42a1, 0x4311, 0x4298, 0xb2b4, 0xbfcf, 0xba03, 0x41ed, 0xba7d, 0x444d, 0x1db4, 0x1de9, 0x192c, 0xbac1, 0x2cd3, 0xbfc9, 0xb224, 0xba09, 0x4098, 0x3ae8, 0x4310, 0xba6a, 0x4366, 0xb05a, 0xbf43, 0x406f, 0xb0a2, 0x0a86, 0x41c1, 0x413c, 0x1e56, 0x224c, 0xbf0e, 0xb016, 0x40d3, 0x40eb, 0x3b28, 0x4131, 0x30c8, 0xb23a, 0x40db, 0x2ff3, 0xb293, 0x1ea8, 0x4283, 0x4071, 0x40a5, 0x40db, 0x1539, 0xb2ff, 0xb0d4, 0xb2a4, 0xb2f4, 0xbf60, 0x433c, 0xbf0b, 0x3bac, 0x134e, 0xb241, 0xba6a, 0x1bf6, 0xb28b, 0xba3f, 0x43b1, 0x1f92, 0xba68, 0xb21e, 0x4272, 0x40a4, 0x2fde, 0xaec9, 0xad72, 0x42f0, 0x433f, 0xaa74, 0x1032, 0xa843, 0x19d7, 0xaf1b, 0xbf23, 0x14cb, 0x41a3, 0x1ff5, 0x40ca, 0xba1e, 0x4205, 0x4123, 0x401d, 0x1f2f, 0xbfc0, 0x3d68, 0x4368, 0x3441, 0x43e1, 0x04bf, 0x1934, 0xb299, 0x41bc, 0x4331, 0x00c2, 0xbf74, 0x4424, 0xb0de, 0x3563, 0xb2ea, 0x4325, 0x425f, 0x4331, 0x1516, 0x2bfa, 0xaa20, 0x4001, 0xb2dd, 0x1b4a, 0x435d, 0x1e15, 0x46fb, 0x1ca3, 0xb240, 0xba1e, 0x43ac, 0x04d1, 0x4288, 0xb053, 0x0649, 0x40ab, 0xbf6a, 0xa873, 0x41bd, 0x40bf, 0x0734, 0x410d, 0xbaf5, 0x431d, 0xb21d, 0x43bc, 0x1a8d, 0x43d1, 0x182f, 0xb2a7, 0xba53, 0xa1e5, 0x1f14, 0x40fa, 0x4595, 0x4373, 0x3a9e, 0x4316, 0x4382, 0x2233, 0x3f1e, 0xbfac, 0x285f, 0x435e, 0xb2e4, 0x1a0c, 0xbae3, 0x432c, 0xbf96, 0x3dd0, 0x4388, 0xb233, 0x1dd2, 0x0628, 0x40f6, 0xad19, 0xbfb0, 0xb01e, 0x3f19, 0x42fb, 0x4397, 0x42fb, 0x4380, 0x088d, 0x1c55, 0x4125, 0x41db, 0x4343, 0x285a, 0xb297, 0x0708, 0x1742, 0x438f, 0x40c9, 0x41ba, 0xb2d7, 0x42f4, 0xbf84, 0xb2be, 0x0ed1, 0xaa8e, 0x1766, 0xb2a2, 0xb23f, 0xb246, 0x42e7, 0xa98e, 0x2ed6, 0xba33, 0x4275, 0x3d19, 0xba01, 0xaf24, 0xba0e, 0x10fe, 0xbf70, 0x40ae, 0x0b85, 0x1b11, 0xba72, 0x1dbd, 0x4218, 0x420f, 0x43df, 0xba42, 0xbf27, 0xba3d, 0x4318, 0x4152, 0x431f, 0x417d, 0xbfaa, 0x1b13, 0x401f, 0x426e, 0xbfb1, 0xb098, 0x1cb5, 0xba05, 0x2f51, 0xa7e9, 0x4238, 0xb2de, 0x4374, 0x3239, 0xb0c3, 0xb2c4, 0xb2db, 0x43d1, 0x17fa, 0x1918, 0xba45, 0x4073, 0x19dc, 0x433b, 0x095c, 0x1f3f, 0x2dfd, 0x2105, 0x4120, 0x4174, 0x42cf, 0x32ac, 0xbf4a, 0xb28e, 0x401d, 0x445e, 0xbf00, 0xbf0d, 0x4353, 0xbfb0, 0x406e, 0x3f79, 0x2e94, 0xb225, 0x40fe, 0xa79f, 0x43fa, 0xb21f, 0x3c1d, 0xbaf9, 0x4178, 0xb224, 0x455b, 0x2da3, 0x36c0, 0x410b, 0xb2bd, 0x1fd4, 0x43ed, 0x4658, 0xbf45, 0xa2bb, 0xba4b, 0x1848, 0x407f, 0x0d0c, 0xb0d2, 0xbfb8, 0xb013, 0x41ff, 0xba13, 0x4246, 0x4413, 0x3ac4, 0xbf25, 0x0c28, 0xba3d, 0xbf00, 0xba77, 0x4115, 0x425e, 0xad5a, 0x44b9, 0x16b5, 0x445c, 0x4030, 0x41ba, 0x4337, 0x435f, 0x25e8, 0xbfe0, 0x43bf, 0x2e8c, 0x2603, 0x1d02, 0x339f, 0xb2da, 0xbf12, 0x4073, 0x46ed, 0x408a, 0x42a4, 0xbfa0, 0x428c, 0x3f60, 0xb264, 0x4656, 0xbf54, 0x4212, 0x1b30, 0x2cc3, 0xb2d3, 0x1c32, 0x4279, 0x2647, 0x4222, 0xba14, 0x1f8d, 0x414a, 0x4244, 0x4316, 0xa3df, 0x42d7, 0x42fc, 0xbf90, 0x4183, 0xa6b7, 0x4002, 0x2fb3, 0x4304, 0xba10, 0xbf80, 0xb21c, 0x414e, 0x1bc7, 0xbfad, 0xb2cd, 0x2f6f, 0xa397, 0x180a, 0xab69, 0xb0db, 0x0d11, 0xba35, 0xbfdb, 0x00c5, 0xa4b1, 0x400a, 0xba74, 0xa723, 0x050c, 0x4318, 0xaa07, 0x4135, 0x4181, 0xba71, 0x4090, 0x41a2, 0x412a, 0x4230, 0x4398, 0xbf18, 0x42c6, 0x441a, 0xb297, 0xb2fa, 0x41b7, 0x4134, 0xb290, 0x41c4, 0xb290, 0x195c, 0x4586, 0x433e, 0x402c, 0x34a4, 0x1add, 0x4316, 0x403b, 0xba51, 0x4257, 0x3d75, 0xba2d, 0x170f, 0x45bb, 0xbf26, 0x43ca, 0xb247, 0x427e, 0x4109, 0x1284, 0xbaf7, 0xbae0, 0xb200, 0x428b, 0x4376, 0x1cfc, 0x4091, 0x2b38, 0x1f17, 0x41c4, 0x40f0, 0xba52, 0x0c05, 0xbfaa, 0x4278, 0x41b2, 0x4334, 0x43b9, 0x42e4, 0x4338, 0x46cb, 0xaecc, 0x2b5b, 0x2407, 0xbace, 0x1ff5, 0x41ba, 0xb013, 0xb283, 0xbf94, 0x1c7b, 0x4444, 0xaf5b, 0x1e40, 0xbfe0, 0x4401, 0x40be, 0xa46a, 0x4229, 0x40a3, 0x43b4, 0x43e9, 0xb268, 0x419f, 0x41b5, 0x43b9, 0x4203, 0xbfa7, 0xb0a5, 0x46b9, 0x42ec, 0x1b9e, 0x400b, 0x06d9, 0xb0b2, 0x4230, 0xb0c6, 0x420e, 0x19d4, 0xbfe1, 0x40f8, 0x1f60, 0x19b8, 0x43c1, 0xb2a7, 0x4357, 0x4364, 0x4320, 0xba6a, 0x15cc, 0x40a4, 0x4378, 0xb0fe, 0x2e96, 0x4183, 0xba02, 0x4387, 0xb27f, 0x42cf, 0xaa6a, 0x404c, 0x4269, 0x036c, 0x42cf, 0x43df, 0x42a2, 0xbfda, 0x078b, 0x402b, 0x1d71, 0x43ee, 0x1a55, 0x1d58, 0x4077, 0x4021, 0x4165, 0xbf4a, 0x42c7, 0x4322, 0xb00e, 0x435a, 0x1fd9, 0xb227, 0x40da, 0x123a, 0x4323, 0x4353, 0xaa7b, 0xbf16, 0x40b0, 0x42df, 0x4334, 0x054d, 0x422d, 0xba0b, 0x46da, 0x44f2, 0xb214, 0x1a61, 0x20d7, 0x43b2, 0xb062, 0x369a, 0xa256, 0xb2f1, 0xb20f, 0x43ba, 0x3b86, 0x4278, 0x1b0f, 0x2c13, 0x4211, 0x46a0, 0xbf88, 0x43b1, 0x4094, 0xba06, 0x45d8, 0x410e, 0x1fc8, 0x1e0c, 0x429a, 0x3c95, 0x45ec, 0x42a6, 0xb2d2, 0x4039, 0x42c0, 0x40a9, 0x41f3, 0x1eb9, 0x04a4, 0xba5d, 0x4256, 0x4469, 0x40f4, 0x1687, 0x4244, 0x400d, 0x2eb0, 0xbf6f, 0xb018, 0xba24, 0x1911, 0x115e, 0x43c1, 0x406a, 0x4008, 0xb076, 0xba5f, 0xb0f5, 0x40a6, 0xb2f4, 0x0d52, 0xba72, 0x4172, 0xbf91, 0x1310, 0x4572, 0xad5e, 0x4399, 0x4081, 0x2c80, 0x258f, 0x1d8c, 0xb067, 0x426e, 0x40c0, 0xb2d0, 0x4544, 0xbf70, 0x4236, 0x43d2, 0x422f, 0x43e9, 0xb0a2, 0xbf3a, 0xa951, 0xb051, 0x1995, 0x42af, 0x4099, 0x40bb, 0x4221, 0x40b8, 0x4234, 0x422e, 0x444a, 0x2d03, 0x145f, 0x0cf6, 0x438c, 0x4358, 0x41e5, 0x4336, 0x0b76, 0x43e5, 0x4305, 0xb0fe, 0x412c, 0xa59e, 0x3a6d, 0xb23e, 0x4010, 0xbf23, 0x3890, 0x00ee, 0x40ec, 0x1a97, 0x1810, 0x436c, 0x43df, 0x4019, 0xb20f, 0xbfc0, 0x17e0, 0x0e47, 0xbfc8, 0x4068, 0x43bf, 0xbafa, 0x41be, 0x355a, 0xbfc3, 0x18e7, 0xbff0, 0x40e2, 0xbff0, 0x4132, 0x4207, 0xb042, 0x26ad, 0x4329, 0xb285, 0x425e, 0x46da, 0x100a, 0x070c, 0x40d9, 0xb2d3, 0xa9b2, 0x44fa, 0x3edc, 0x1d54, 0x435f, 0x3e4f, 0x2d4a, 0xbfcc, 0x4070, 0x4111, 0x42b6, 0x40f8, 0x210e, 0x3003, 0x41f4, 0x41e1, 0x1e19, 0x4152, 0xba39, 0xbaf6, 0x42aa, 0x4086, 0xa1ff, 0x42d5, 0x4294, 0x226a, 0x407c, 0x1f25, 0x3bea, 0x4158, 0x45bc, 0x445a, 0x29b5, 0xb2ed, 0xba7d, 0xbfa9, 0x41af, 0x31bf, 0x1f06, 0xb277, 0x4600, 0x40a6, 0xba24, 0x4023, 0x413b, 0xbac2, 0x1cdb, 0xba24, 0x00b5, 0x400b, 0x14e9, 0xba47, 0x42a3, 0x1eb7, 0x41b1, 0x42d2, 0x3742, 0xbfdc, 0x17d4, 0x1b82, 0x409c, 0x3640, 0x1a72, 0x4055, 0xba27, 0x4357, 0x2367, 0x43b5, 0x4607, 0xbf59, 0xb0c5, 0x1926, 0x4121, 0xba51, 0xb203, 0xbaf7, 0x066a, 0xb2b3, 0x43a6, 0x432b, 0x40b0, 0x085e, 0x0b22, 0xa46e, 0xbae7, 0xb2f0, 0x1d0e, 0xa37d, 0xba21, 0x40eb, 0x1083, 0x1bb3, 0x4223, 0x43a5, 0xb253, 0x402e, 0x4108, 0xbf37, 0xba0c, 0x43c0, 0xb079, 0x422d, 0x4081, 0x40e0, 0x45b9, 0x43b2, 0x4685, 0x189b, 0x400c, 0x0dbd, 0x425a, 0x0e61, 0xba61, 0x1ad3, 0x4335, 0x41a4, 0xbf64, 0x3714, 0x409a, 0x428d, 0x4421, 0xa9d1, 0xb298, 0x1dd4, 0xb028, 0x4600, 0x128e, 0x42da, 0x1a55, 0xb0da, 0xbf16, 0x423b, 0xba54, 0x42fa, 0x17f3, 0x0753, 0x4299, 0x414a, 0x1e9a, 0xb06c, 0x432b, 0xa23d, 0xba29, 0x4367, 0x19f0, 0x40c1, 0x1e5f, 0xb249, 0x1e21, 0x3078, 0x36fa, 0x2c53, 0xb033, 0x4362, 0x43cd, 0xa40c, 0xbf53, 0xba37, 0x4057, 0xb004, 0x411f, 0xbae2, 0x4671, 0x4276, 0x2505, 0x1044, 0x2743, 0x44cb, 0xaaed, 0x44e5, 0x04b3, 0x41bf, 0x1864, 0x4195, 0x4598, 0xb01d, 0xbf49, 0x4264, 0x4005, 0x0615, 0x43d3, 0xbf21, 0x4175, 0xb218, 0xba29, 0x4168, 0x1b8c, 0x407e, 0xbfa0, 0x4181, 0xb22d, 0x4350, 0x0803, 0x04f2, 0x1a2b, 0xba50, 0xbac6, 0xbf8d, 0x14a4, 0x459a, 0x41d1, 0xba19, 0xba51, 0x1cdb, 0xb283, 0xadd2, 0xb0a3, 0x4140, 0x1e4e, 0xb05a, 0x40ee, 0x428d, 0x37d3, 0x401b, 0x029e, 0x4351, 0x4230, 0x40ae, 0x40ab, 0x430f, 0x4121, 0x197e, 0x4307, 0x43ae, 0xb282, 0xab6a, 0xbf96, 0xb083, 0x41dc, 0x1d8b, 0x4131, 0x43f3, 0xb2af, 0x43e5, 0xb0bb, 0xb06d, 0x10ae, 0x42ef, 0x0d29, 0x4252, 0x1ef1, 0x400f, 0x4287, 0x1f0a, 0x0879, 0x38bd, 0x4306, 0x1094, 0x1b2a, 0x42ec, 0x26b2, 0x42fb, 0xbfbf, 0x1e68, 0x400f, 0x4261, 0x4248, 0x4301, 0x03a6, 0x401d, 0x43a6, 0x42ff, 0x412f, 0xb078, 0x2f4c, 0x059e, 0x404d, 0x40d0, 0x4033, 0x4067, 0x41d5, 0x40f7, 0x4044, 0xbff0, 0x4183, 0xbf23, 0xb208, 0x1922, 0x43cb, 0x2b84, 0xbf46, 0x1c9d, 0x2a1d, 0x41f7, 0x43d2, 0x4297, 0x11e1, 0x3929, 0xba74, 0x1b10, 0xb267, 0x1dc6, 0x403a, 0x420d, 0xb246, 0xb2e7, 0x0450, 0x04fc, 0xbf0e, 0x4680, 0xb015, 0x0f61, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x9761e594, 0x04a76bb3, 0xdf9b4478, 0xd3a7ec97, 0xb0bb8660, 0x52cb52ca, 0x60d713aa, 0x30959c7c, 0xca01d692, 0xd5efbf25, 0x11a77f9a, 0x39816f99, 0x60fa61fd, 0xf4de7402, 0x00000000, 0x200001f0 }, - FinalRegs = new uint[] { 0x00000000, 0xffffffd5, 0x00000000, 0x9e100020, 0x00000000, 0x9e100022, 0xffffffa5, 0x00000000, 0x00000000, 0xf4de7411, 0xd5efb38f, 0xcace1224, 0x60fa61fd, 0x60fa67ad, 0x00000000, 0x400001d0 }, + Instructions = [0x1cdd, 0x1c98, 0xa82c, 0x22bd, 0xabb4, 0x4105, 0x3601, 0x432b, 0x406b, 0xb08c, 0xbacf, 0xb2ee, 0x382b, 0xb055, 0x4418, 0x16af, 0x4171, 0xb284, 0xb2c7, 0x4273, 0x43c5, 0xbf28, 0x4374, 0xb22c, 0xa063, 0x4242, 0x43f9, 0xba6a, 0x42a1, 0x4311, 0x4298, 0xb2b4, 0xbfcf, 0xba03, 0x41ed, 0xba7d, 0x444d, 0x1db4, 0x1de9, 0x192c, 0xbac1, 0x2cd3, 0xbfc9, 0xb224, 0xba09, 0x4098, 0x3ae8, 0x4310, 0xba6a, 0x4366, 0xb05a, 0xbf43, 0x406f, 0xb0a2, 0x0a86, 0x41c1, 0x413c, 0x1e56, 0x224c, 0xbf0e, 0xb016, 0x40d3, 0x40eb, 0x3b28, 0x4131, 0x30c8, 0xb23a, 0x40db, 0x2ff3, 0xb293, 0x1ea8, 0x4283, 0x4071, 0x40a5, 0x40db, 0x1539, 0xb2ff, 0xb0d4, 0xb2a4, 0xb2f4, 0xbf60, 0x433c, 0xbf0b, 0x3bac, 0x134e, 0xb241, 0xba6a, 0x1bf6, 0xb28b, 0xba3f, 0x43b1, 0x1f92, 0xba68, 0xb21e, 0x4272, 0x40a4, 0x2fde, 0xaec9, 0xad72, 0x42f0, 0x433f, 0xaa74, 0x1032, 0xa843, 0x19d7, 0xaf1b, 0xbf23, 0x14cb, 0x41a3, 0x1ff5, 0x40ca, 0xba1e, 0x4205, 0x4123, 0x401d, 0x1f2f, 0xbfc0, 0x3d68, 0x4368, 0x3441, 0x43e1, 0x04bf, 0x1934, 0xb299, 0x41bc, 0x4331, 0x00c2, 0xbf74, 0x4424, 0xb0de, 0x3563, 0xb2ea, 0x4325, 0x425f, 0x4331, 0x1516, 0x2bfa, 0xaa20, 0x4001, 0xb2dd, 0x1b4a, 0x435d, 0x1e15, 0x46fb, 0x1ca3, 0xb240, 0xba1e, 0x43ac, 0x04d1, 0x4288, 0xb053, 0x0649, 0x40ab, 0xbf6a, 0xa873, 0x41bd, 0x40bf, 0x0734, 0x410d, 0xbaf5, 0x431d, 0xb21d, 0x43bc, 0x1a8d, 0x43d1, 0x182f, 0xb2a7, 0xba53, 0xa1e5, 0x1f14, 0x40fa, 0x4595, 0x4373, 0x3a9e, 0x4316, 0x4382, 0x2233, 0x3f1e, 0xbfac, 0x285f, 0x435e, 0xb2e4, 0x1a0c, 0xbae3, 0x432c, 0xbf96, 0x3dd0, 0x4388, 0xb233, 0x1dd2, 0x0628, 0x40f6, 0xad19, 0xbfb0, 0xb01e, 0x3f19, 0x42fb, 0x4397, 0x42fb, 0x4380, 0x088d, 0x1c55, 0x4125, 0x41db, 0x4343, 0x285a, 0xb297, 0x0708, 0x1742, 0x438f, 0x40c9, 0x41ba, 0xb2d7, 0x42f4, 0xbf84, 0xb2be, 0x0ed1, 0xaa8e, 0x1766, 0xb2a2, 0xb23f, 0xb246, 0x42e7, 0xa98e, 0x2ed6, 0xba33, 0x4275, 0x3d19, 0xba01, 0xaf24, 0xba0e, 0x10fe, 0xbf70, 0x40ae, 0x0b85, 0x1b11, 0xba72, 0x1dbd, 0x4218, 0x420f, 0x43df, 0xba42, 0xbf27, 0xba3d, 0x4318, 0x4152, 0x431f, 0x417d, 0xbfaa, 0x1b13, 0x401f, 0x426e, 0xbfb1, 0xb098, 0x1cb5, 0xba05, 0x2f51, 0xa7e9, 0x4238, 0xb2de, 0x4374, 0x3239, 0xb0c3, 0xb2c4, 0xb2db, 0x43d1, 0x17fa, 0x1918, 0xba45, 0x4073, 0x19dc, 0x433b, 0x095c, 0x1f3f, 0x2dfd, 0x2105, 0x4120, 0x4174, 0x42cf, 0x32ac, 0xbf4a, 0xb28e, 0x401d, 0x445e, 0xbf00, 0xbf0d, 0x4353, 0xbfb0, 0x406e, 0x3f79, 0x2e94, 0xb225, 0x40fe, 0xa79f, 0x43fa, 0xb21f, 0x3c1d, 0xbaf9, 0x4178, 0xb224, 0x455b, 0x2da3, 0x36c0, 0x410b, 0xb2bd, 0x1fd4, 0x43ed, 0x4658, 0xbf45, 0xa2bb, 0xba4b, 0x1848, 0x407f, 0x0d0c, 0xb0d2, 0xbfb8, 0xb013, 0x41ff, 0xba13, 0x4246, 0x4413, 0x3ac4, 0xbf25, 0x0c28, 0xba3d, 0xbf00, 0xba77, 0x4115, 0x425e, 0xad5a, 0x44b9, 0x16b5, 0x445c, 0x4030, 0x41ba, 0x4337, 0x435f, 0x25e8, 0xbfe0, 0x43bf, 0x2e8c, 0x2603, 0x1d02, 0x339f, 0xb2da, 0xbf12, 0x4073, 0x46ed, 0x408a, 0x42a4, 0xbfa0, 0x428c, 0x3f60, 0xb264, 0x4656, 0xbf54, 0x4212, 0x1b30, 0x2cc3, 0xb2d3, 0x1c32, 0x4279, 0x2647, 0x4222, 0xba14, 0x1f8d, 0x414a, 0x4244, 0x4316, 0xa3df, 0x42d7, 0x42fc, 0xbf90, 0x4183, 0xa6b7, 0x4002, 0x2fb3, 0x4304, 0xba10, 0xbf80, 0xb21c, 0x414e, 0x1bc7, 0xbfad, 0xb2cd, 0x2f6f, 0xa397, 0x180a, 0xab69, 0xb0db, 0x0d11, 0xba35, 0xbfdb, 0x00c5, 0xa4b1, 0x400a, 0xba74, 0xa723, 0x050c, 0x4318, 0xaa07, 0x4135, 0x4181, 0xba71, 0x4090, 0x41a2, 0x412a, 0x4230, 0x4398, 0xbf18, 0x42c6, 0x441a, 0xb297, 0xb2fa, 0x41b7, 0x4134, 0xb290, 0x41c4, 0xb290, 0x195c, 0x4586, 0x433e, 0x402c, 0x34a4, 0x1add, 0x4316, 0x403b, 0xba51, 0x4257, 0x3d75, 0xba2d, 0x170f, 0x45bb, 0xbf26, 0x43ca, 0xb247, 0x427e, 0x4109, 0x1284, 0xbaf7, 0xbae0, 0xb200, 0x428b, 0x4376, 0x1cfc, 0x4091, 0x2b38, 0x1f17, 0x41c4, 0x40f0, 0xba52, 0x0c05, 0xbfaa, 0x4278, 0x41b2, 0x4334, 0x43b9, 0x42e4, 0x4338, 0x46cb, 0xaecc, 0x2b5b, 0x2407, 0xbace, 0x1ff5, 0x41ba, 0xb013, 0xb283, 0xbf94, 0x1c7b, 0x4444, 0xaf5b, 0x1e40, 0xbfe0, 0x4401, 0x40be, 0xa46a, 0x4229, 0x40a3, 0x43b4, 0x43e9, 0xb268, 0x419f, 0x41b5, 0x43b9, 0x4203, 0xbfa7, 0xb0a5, 0x46b9, 0x42ec, 0x1b9e, 0x400b, 0x06d9, 0xb0b2, 0x4230, 0xb0c6, 0x420e, 0x19d4, 0xbfe1, 0x40f8, 0x1f60, 0x19b8, 0x43c1, 0xb2a7, 0x4357, 0x4364, 0x4320, 0xba6a, 0x15cc, 0x40a4, 0x4378, 0xb0fe, 0x2e96, 0x4183, 0xba02, 0x4387, 0xb27f, 0x42cf, 0xaa6a, 0x404c, 0x4269, 0x036c, 0x42cf, 0x43df, 0x42a2, 0xbfda, 0x078b, 0x402b, 0x1d71, 0x43ee, 0x1a55, 0x1d58, 0x4077, 0x4021, 0x4165, 0xbf4a, 0x42c7, 0x4322, 0xb00e, 0x435a, 0x1fd9, 0xb227, 0x40da, 0x123a, 0x4323, 0x4353, 0xaa7b, 0xbf16, 0x40b0, 0x42df, 0x4334, 0x054d, 0x422d, 0xba0b, 0x46da, 0x44f2, 0xb214, 0x1a61, 0x20d7, 0x43b2, 0xb062, 0x369a, 0xa256, 0xb2f1, 0xb20f, 0x43ba, 0x3b86, 0x4278, 0x1b0f, 0x2c13, 0x4211, 0x46a0, 0xbf88, 0x43b1, 0x4094, 0xba06, 0x45d8, 0x410e, 0x1fc8, 0x1e0c, 0x429a, 0x3c95, 0x45ec, 0x42a6, 0xb2d2, 0x4039, 0x42c0, 0x40a9, 0x41f3, 0x1eb9, 0x04a4, 0xba5d, 0x4256, 0x4469, 0x40f4, 0x1687, 0x4244, 0x400d, 0x2eb0, 0xbf6f, 0xb018, 0xba24, 0x1911, 0x115e, 0x43c1, 0x406a, 0x4008, 0xb076, 0xba5f, 0xb0f5, 0x40a6, 0xb2f4, 0x0d52, 0xba72, 0x4172, 0xbf91, 0x1310, 0x4572, 0xad5e, 0x4399, 0x4081, 0x2c80, 0x258f, 0x1d8c, 0xb067, 0x426e, 0x40c0, 0xb2d0, 0x4544, 0xbf70, 0x4236, 0x43d2, 0x422f, 0x43e9, 0xb0a2, 0xbf3a, 0xa951, 0xb051, 0x1995, 0x42af, 0x4099, 0x40bb, 0x4221, 0x40b8, 0x4234, 0x422e, 0x444a, 0x2d03, 0x145f, 0x0cf6, 0x438c, 0x4358, 0x41e5, 0x4336, 0x0b76, 0x43e5, 0x4305, 0xb0fe, 0x412c, 0xa59e, 0x3a6d, 0xb23e, 0x4010, 0xbf23, 0x3890, 0x00ee, 0x40ec, 0x1a97, 0x1810, 0x436c, 0x43df, 0x4019, 0xb20f, 0xbfc0, 0x17e0, 0x0e47, 0xbfc8, 0x4068, 0x43bf, 0xbafa, 0x41be, 0x355a, 0xbfc3, 0x18e7, 0xbff0, 0x40e2, 0xbff0, 0x4132, 0x4207, 0xb042, 0x26ad, 0x4329, 0xb285, 0x425e, 0x46da, 0x100a, 0x070c, 0x40d9, 0xb2d3, 0xa9b2, 0x44fa, 0x3edc, 0x1d54, 0x435f, 0x3e4f, 0x2d4a, 0xbfcc, 0x4070, 0x4111, 0x42b6, 0x40f8, 0x210e, 0x3003, 0x41f4, 0x41e1, 0x1e19, 0x4152, 0xba39, 0xbaf6, 0x42aa, 0x4086, 0xa1ff, 0x42d5, 0x4294, 0x226a, 0x407c, 0x1f25, 0x3bea, 0x4158, 0x45bc, 0x445a, 0x29b5, 0xb2ed, 0xba7d, 0xbfa9, 0x41af, 0x31bf, 0x1f06, 0xb277, 0x4600, 0x40a6, 0xba24, 0x4023, 0x413b, 0xbac2, 0x1cdb, 0xba24, 0x00b5, 0x400b, 0x14e9, 0xba47, 0x42a3, 0x1eb7, 0x41b1, 0x42d2, 0x3742, 0xbfdc, 0x17d4, 0x1b82, 0x409c, 0x3640, 0x1a72, 0x4055, 0xba27, 0x4357, 0x2367, 0x43b5, 0x4607, 0xbf59, 0xb0c5, 0x1926, 0x4121, 0xba51, 0xb203, 0xbaf7, 0x066a, 0xb2b3, 0x43a6, 0x432b, 0x40b0, 0x085e, 0x0b22, 0xa46e, 0xbae7, 0xb2f0, 0x1d0e, 0xa37d, 0xba21, 0x40eb, 0x1083, 0x1bb3, 0x4223, 0x43a5, 0xb253, 0x402e, 0x4108, 0xbf37, 0xba0c, 0x43c0, 0xb079, 0x422d, 0x4081, 0x40e0, 0x45b9, 0x43b2, 0x4685, 0x189b, 0x400c, 0x0dbd, 0x425a, 0x0e61, 0xba61, 0x1ad3, 0x4335, 0x41a4, 0xbf64, 0x3714, 0x409a, 0x428d, 0x4421, 0xa9d1, 0xb298, 0x1dd4, 0xb028, 0x4600, 0x128e, 0x42da, 0x1a55, 0xb0da, 0xbf16, 0x423b, 0xba54, 0x42fa, 0x17f3, 0x0753, 0x4299, 0x414a, 0x1e9a, 0xb06c, 0x432b, 0xa23d, 0xba29, 0x4367, 0x19f0, 0x40c1, 0x1e5f, 0xb249, 0x1e21, 0x3078, 0x36fa, 0x2c53, 0xb033, 0x4362, 0x43cd, 0xa40c, 0xbf53, 0xba37, 0x4057, 0xb004, 0x411f, 0xbae2, 0x4671, 0x4276, 0x2505, 0x1044, 0x2743, 0x44cb, 0xaaed, 0x44e5, 0x04b3, 0x41bf, 0x1864, 0x4195, 0x4598, 0xb01d, 0xbf49, 0x4264, 0x4005, 0x0615, 0x43d3, 0xbf21, 0x4175, 0xb218, 0xba29, 0x4168, 0x1b8c, 0x407e, 0xbfa0, 0x4181, 0xb22d, 0x4350, 0x0803, 0x04f2, 0x1a2b, 0xba50, 0xbac6, 0xbf8d, 0x14a4, 0x459a, 0x41d1, 0xba19, 0xba51, 0x1cdb, 0xb283, 0xadd2, 0xb0a3, 0x4140, 0x1e4e, 0xb05a, 0x40ee, 0x428d, 0x37d3, 0x401b, 0x029e, 0x4351, 0x4230, 0x40ae, 0x40ab, 0x430f, 0x4121, 0x197e, 0x4307, 0x43ae, 0xb282, 0xab6a, 0xbf96, 0xb083, 0x41dc, 0x1d8b, 0x4131, 0x43f3, 0xb2af, 0x43e5, 0xb0bb, 0xb06d, 0x10ae, 0x42ef, 0x0d29, 0x4252, 0x1ef1, 0x400f, 0x4287, 0x1f0a, 0x0879, 0x38bd, 0x4306, 0x1094, 0x1b2a, 0x42ec, 0x26b2, 0x42fb, 0xbfbf, 0x1e68, 0x400f, 0x4261, 0x4248, 0x4301, 0x03a6, 0x401d, 0x43a6, 0x42ff, 0x412f, 0xb078, 0x2f4c, 0x059e, 0x404d, 0x40d0, 0x4033, 0x4067, 0x41d5, 0x40f7, 0x4044, 0xbff0, 0x4183, 0xbf23, 0xb208, 0x1922, 0x43cb, 0x2b84, 0xbf46, 0x1c9d, 0x2a1d, 0x41f7, 0x43d2, 0x4297, 0x11e1, 0x3929, 0xba74, 0x1b10, 0xb267, 0x1dc6, 0x403a, 0x420d, 0xb246, 0xb2e7, 0x0450, 0x04fc, 0xbf0e, 0x4680, 0xb015, 0x0f61, 0x4770, 0xe7fe + ], + StartRegs = [0x9761e594, 0x04a76bb3, 0xdf9b4478, 0xd3a7ec97, 0xb0bb8660, 0x52cb52ca, 0x60d713aa, 0x30959c7c, 0xca01d692, 0xd5efbf25, 0x11a77f9a, 0x39816f99, 0x60fa61fd, 0xf4de7402, 0x00000000, 0x200001f0 + ], + FinalRegs = [0x00000000, 0xffffffd5, 0x00000000, 0x9e100020, 0x00000000, 0x9e100022, 0xffffffa5, 0x00000000, 0x00000000, 0xf4de7411, 0xd5efb38f, 0xcace1224, 0x60fa61fd, 0x60fa67ad, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x203c, 0x4138, 0xb29a, 0x402d, 0xbf0a, 0x4151, 0x42a8, 0x4489, 0x4091, 0xb2e9, 0xbf8d, 0xb205, 0x41e3, 0x08fb, 0x048b, 0x401f, 0xb2c6, 0x4106, 0xbf00, 0xba13, 0x391f, 0xba43, 0x4000, 0x407c, 0xba09, 0xb2bd, 0xbf25, 0x13a2, 0xb2ca, 0xaf42, 0x4327, 0xb2d4, 0xb2be, 0xaf98, 0x416c, 0x2cbd, 0x41c7, 0x401e, 0xb281, 0x4107, 0x42d2, 0xbfd2, 0x1939, 0xb248, 0xa7cd, 0x1ac5, 0xbf00, 0x2d7b, 0xb260, 0x43c6, 0xb28f, 0xb29a, 0x3844, 0x3701, 0xb08b, 0x1d56, 0xbff0, 0x42aa, 0xb2d2, 0xbfd8, 0x21a3, 0x34fc, 0x4617, 0x41a3, 0x284d, 0x447c, 0x42dc, 0xba10, 0x42ad, 0x1858, 0x1b99, 0x009e, 0xba48, 0xaf30, 0x413b, 0xbf6b, 0xba13, 0x1e8b, 0x29ae, 0x40bb, 0x1f0d, 0x1bf6, 0xb0fa, 0xb085, 0x1c93, 0xae0c, 0x44ad, 0xb294, 0x4327, 0x1ea8, 0x0fbb, 0x4172, 0x43e1, 0xb274, 0xab3a, 0x421e, 0x4003, 0x4370, 0x189a, 0x4289, 0xbf1d, 0xba66, 0x1d6f, 0xb2da, 0xbfb0, 0x4017, 0xa419, 0xba6f, 0x127d, 0x43f9, 0x0b3c, 0x1a9d, 0x1c19, 0x2d38, 0xbfa0, 0x38c1, 0x406f, 0x181c, 0x431a, 0x4069, 0x4359, 0xaa68, 0x1e23, 0x0012, 0x047a, 0xbf6e, 0x15c1, 0x4572, 0x4344, 0x0ff8, 0x46e4, 0x41db, 0x3216, 0x421c, 0x4195, 0x23cb, 0x4261, 0xa31a, 0xbad8, 0x06e8, 0x4197, 0xbf69, 0x420d, 0x228b, 0xbae0, 0x302d, 0x4046, 0x4016, 0x4137, 0xbf79, 0x2c74, 0x407b, 0xa65d, 0x401b, 0x43ea, 0x09f7, 0x41ad, 0x401d, 0x3324, 0xb2cb, 0xa421, 0x40b4, 0x43f1, 0xbfbe, 0x3ae0, 0x45c1, 0x4014, 0x41c2, 0x4596, 0xbaf1, 0xbf1f, 0x4035, 0xb29e, 0x4070, 0xb0cc, 0xbfb4, 0xbad1, 0xba09, 0x1b93, 0x414a, 0xbf43, 0x40b8, 0xb0ef, 0x41c2, 0x4157, 0x36c8, 0x42b7, 0x40dd, 0x43ab, 0x0d39, 0x32b9, 0x1cfc, 0x1c79, 0xa753, 0x4613, 0x418a, 0x40e8, 0xb25e, 0x0bf3, 0xbf9f, 0x4100, 0x3e0f, 0xb205, 0xb2d7, 0x12b8, 0x430e, 0x4032, 0x42a7, 0x18fe, 0x1ac1, 0x221c, 0xb086, 0x0cf7, 0x4367, 0x426e, 0xabea, 0x4282, 0x1da5, 0xaca3, 0x4277, 0xbf24, 0x4308, 0xb035, 0x41c0, 0x1434, 0xaf0d, 0xbfa0, 0xb20a, 0xbacd, 0xb2e8, 0x0248, 0x40cb, 0x41be, 0x43c5, 0x43a2, 0x40cb, 0x0c9a, 0x2979, 0x0138, 0x1f54, 0x4166, 0xb2de, 0x1e7e, 0x4132, 0x4194, 0xb2a8, 0xbfc3, 0x419d, 0xbadc, 0x43db, 0x4363, 0x42a6, 0xb02d, 0x40c1, 0x32dc, 0x467d, 0x43b0, 0x4581, 0x431c, 0x4232, 0x3daa, 0x436d, 0x4288, 0x40f7, 0x1554, 0x43f1, 0xbf0d, 0x0509, 0x2371, 0x4387, 0x42bc, 0x1f69, 0xb07f, 0x43e2, 0x29d5, 0x41d7, 0x297a, 0x4285, 0x09c3, 0xb2e8, 0x417d, 0xba00, 0x42d1, 0x4286, 0xb203, 0x40c7, 0x46e4, 0x4558, 0x40d4, 0x12b2, 0x3bf4, 0xb09a, 0x1a12, 0xbf48, 0xbaf4, 0x1858, 0x412f, 0x051a, 0x21cf, 0x4118, 0xbaf9, 0x1a50, 0xb245, 0xbf78, 0x43bd, 0x416a, 0x4178, 0xae37, 0x425a, 0x4038, 0xa7bb, 0x414d, 0x1bcd, 0x395a, 0x411d, 0xba0a, 0x41d4, 0xbf80, 0x059e, 0xb0bb, 0x0522, 0xb276, 0xb2f9, 0x2920, 0xa495, 0xbac2, 0xbfe4, 0xbfe0, 0x4081, 0xb0f1, 0xb258, 0x45b1, 0xa68e, 0x428f, 0xb015, 0x11ae, 0x0d68, 0xb255, 0x44e4, 0x43d2, 0x42ae, 0x310f, 0x1e7e, 0xb030, 0x2a4f, 0xbfa1, 0x1f11, 0xb213, 0x4237, 0x1e41, 0x43d5, 0xb2e0, 0x425f, 0xbf00, 0x432a, 0x0299, 0x18de, 0x434f, 0x4304, 0xb06a, 0x33aa, 0x1e4d, 0xba46, 0x42ca, 0x4115, 0x4116, 0xa597, 0x30fc, 0x10be, 0x41a3, 0xbf48, 0xa37b, 0x40eb, 0xb0e4, 0xb28b, 0x4002, 0x416c, 0x40aa, 0x461b, 0x43b9, 0x18d6, 0x4276, 0x4447, 0x4692, 0x464b, 0x427f, 0xba74, 0xba05, 0x2045, 0x1bad, 0x4097, 0xa1f9, 0x41a4, 0xb2e0, 0xbf34, 0xba77, 0x1ef1, 0xba6f, 0x435f, 0x44fb, 0xbf74, 0x4247, 0x4275, 0x1e8d, 0x40bc, 0x2747, 0x4001, 0x419c, 0x20f8, 0x428d, 0x02eb, 0xbac8, 0x0ba6, 0x44ac, 0x41ce, 0x4314, 0x0bdb, 0x1251, 0xb256, 0x423b, 0x4089, 0x4066, 0xbf63, 0x1cd3, 0x4095, 0xba21, 0x430c, 0x3453, 0x42b6, 0x0ace, 0x4181, 0x40ff, 0x4215, 0x43a8, 0x4244, 0x1aa6, 0x1a97, 0xa74d, 0x428c, 0x400a, 0xbf99, 0x1c2b, 0x2b70, 0x437c, 0x408d, 0x4367, 0xbf68, 0x3c30, 0x4382, 0x4227, 0x4266, 0x0e7d, 0xbae3, 0x1ab4, 0x43aa, 0x45f4, 0x4248, 0x15a1, 0x4152, 0xb2e6, 0x1a40, 0xa73a, 0x424e, 0x0b31, 0x1b75, 0xae32, 0xba41, 0x1b3a, 0x45d9, 0x1b7a, 0xbfd7, 0x4326, 0x46aa, 0x40b1, 0xb233, 0x42c9, 0x1a6b, 0xa894, 0x43ca, 0x433d, 0xbf45, 0x2f43, 0x421c, 0x1234, 0xb0be, 0xba6d, 0x1cc2, 0x43d3, 0xb248, 0x1f29, 0xb2e3, 0x4365, 0xbace, 0x31e2, 0xbf63, 0xa256, 0x1be2, 0x4420, 0x4339, 0xba0b, 0x1d57, 0x4694, 0xb28d, 0xbfad, 0x407f, 0xa64a, 0x4308, 0xbfd0, 0x443f, 0x05d3, 0xbfa3, 0xb27f, 0x3293, 0x40df, 0x41ff, 0x42e4, 0x4213, 0xb04d, 0x3ee4, 0x41d8, 0x1e59, 0xa2f5, 0x049c, 0xb2e5, 0x406f, 0xab82, 0x428f, 0xba3f, 0x41db, 0x415f, 0xbfe0, 0x406c, 0x46c8, 0xb29e, 0x1834, 0x067a, 0x4142, 0x433c, 0xb2d4, 0x045c, 0xbfdd, 0x43cb, 0x4105, 0x307f, 0x42a5, 0xaa0d, 0x1152, 0x4082, 0x338b, 0x1c40, 0x44a3, 0xbf67, 0xb28c, 0x1cfd, 0x1a7c, 0xb289, 0xbaca, 0x4056, 0x0316, 0x459d, 0x188c, 0x4341, 0x424e, 0xaaac, 0x0908, 0x41b4, 0xb233, 0x4150, 0xb2d1, 0x2241, 0x179d, 0xbfc7, 0x4249, 0xa363, 0x4179, 0x4125, 0x40d2, 0x429e, 0x41a1, 0xb23f, 0x386c, 0x0051, 0xba75, 0xba3d, 0xbfce, 0xb000, 0xbae5, 0x4402, 0x4366, 0x4374, 0x4546, 0x4185, 0x3555, 0xbf7b, 0x40ed, 0x39b8, 0x43f7, 0xb05d, 0x40cd, 0x4176, 0xbfd0, 0x2425, 0x1f85, 0x1b56, 0x4265, 0x403c, 0x4043, 0x4308, 0x4164, 0xb20f, 0xb2f7, 0x4336, 0x26a7, 0x026a, 0x45da, 0x236e, 0x4342, 0xa109, 0xa913, 0xbfd7, 0x2392, 0xba4b, 0xb270, 0xba5a, 0xb02f, 0xa1c0, 0xba4a, 0x41c4, 0x411e, 0x20bf, 0x4331, 0x1519, 0x1987, 0x1931, 0x44c5, 0x1546, 0xbac4, 0xbf48, 0xb2eb, 0x403f, 0x237f, 0x435e, 0xb229, 0x1cac, 0xbae2, 0xbacf, 0x42c9, 0x42d2, 0x0630, 0x22af, 0x407b, 0x43d6, 0x1a64, 0xba0e, 0x3269, 0x364a, 0xba0d, 0xae94, 0x4310, 0x357b, 0x41f1, 0xbfc9, 0xb2d1, 0x434d, 0x4223, 0x41b8, 0xb2b9, 0xbf80, 0x41af, 0x401a, 0xbf9e, 0x062f, 0x39e3, 0x4007, 0x41ff, 0x419a, 0x4379, 0x39f6, 0x43be, 0x2e46, 0xbadb, 0x1dc4, 0xa8b1, 0x1e25, 0x431d, 0x42af, 0x41f8, 0x232f, 0xba70, 0x4018, 0x4111, 0x4160, 0x40a1, 0xbfe8, 0x4001, 0x42a3, 0xab81, 0x420a, 0x41c6, 0x4366, 0x40f4, 0x3117, 0x4065, 0xba39, 0xb2f4, 0x1a3c, 0xb2e3, 0x435e, 0xb246, 0x423d, 0x43de, 0xbfcf, 0x42f2, 0x424c, 0x328b, 0xba0e, 0x1f34, 0x462b, 0x456b, 0xbadb, 0xb277, 0xbfb4, 0x40d1, 0xbafa, 0x4248, 0x127c, 0x324a, 0x1b77, 0x40c6, 0xba06, 0x42f0, 0x4043, 0x0313, 0x4542, 0x4084, 0x368e, 0xbf24, 0x4294, 0x1c3c, 0x408d, 0xb2b2, 0x314f, 0x1c72, 0x4267, 0x430a, 0xa020, 0xb0fa, 0x1aa7, 0xb229, 0x41af, 0x404a, 0x12c8, 0x4302, 0xb2b8, 0x406d, 0xbac6, 0x1a94, 0x4306, 0xb284, 0x41a1, 0xbf77, 0xb206, 0x41af, 0x3aea, 0x438f, 0xadb4, 0x1cc3, 0x11cd, 0xbac1, 0x1c4a, 0xa4b3, 0x415b, 0x3cba, 0x43e8, 0x41c0, 0xb29a, 0xb2a1, 0xa433, 0xbf73, 0x4553, 0x4198, 0x4243, 0x21e5, 0xb2a4, 0xbf90, 0x4319, 0x40e5, 0x433b, 0x423d, 0x42a7, 0x4149, 0x4346, 0x1abf, 0xba72, 0xb086, 0x40bf, 0x2f64, 0x43e8, 0x064e, 0xb2bd, 0x4617, 0xbfb5, 0xb2cf, 0x3673, 0x4608, 0xba4b, 0x1f3b, 0x1bcf, 0xbfb0, 0x42f8, 0x42d4, 0x4389, 0x40f2, 0x0335, 0x4337, 0x425b, 0xb26c, 0x422e, 0xb241, 0x42a4, 0x42c0, 0xbf01, 0x362f, 0x38e0, 0x42ee, 0x1944, 0x4312, 0xb2db, 0x12e0, 0x46f0, 0xba2e, 0xb0c2, 0x42c5, 0x1838, 0xbff0, 0x1d87, 0x462f, 0x428f, 0x411a, 0x1dc6, 0xa2d1, 0x45ea, 0x4261, 0x17a2, 0x4012, 0x400d, 0x1ae6, 0x4284, 0x1abf, 0xbf36, 0x40f0, 0x4389, 0x0c78, 0x1d1d, 0xb203, 0x407f, 0x14b5, 0xb2b3, 0x0fce, 0xba7c, 0xb2c9, 0xb25e, 0x2199, 0x419a, 0x4188, 0x430b, 0xb0ef, 0xba69, 0x4171, 0xb212, 0x41f1, 0xba4c, 0xbf8c, 0x45c4, 0xb211, 0x4266, 0x436a, 0x43de, 0xb0b4, 0x41e7, 0xb0d5, 0x424a, 0xba7f, 0xb212, 0x40c1, 0x4323, 0x4241, 0x42f0, 0x42d5, 0x4269, 0x433e, 0x1b80, 0x3715, 0xaafc, 0xba72, 0x4611, 0x1d89, 0xbfaa, 0xb0f9, 0x3a65, 0xb220, 0xb256, 0x4498, 0x40b6, 0x43af, 0x4334, 0x3daf, 0x43ee, 0xb2b8, 0x40fb, 0x3140, 0x4092, 0x412a, 0x4242, 0xaa96, 0x43b0, 0xb0b3, 0x1ccc, 0xbfe8, 0x4139, 0x4377, 0x41ad, 0x187d, 0xbfa4, 0xba15, 0x4166, 0x41a4, 0x3fb1, 0x4005, 0xb2c7, 0x413d, 0x3917, 0xbfe0, 0x41a5, 0xb211, 0x433d, 0x05fd, 0x4409, 0x4475, 0x41cc, 0x1e64, 0xbf89, 0xb28f, 0x1a04, 0xbf90, 0x42b3, 0xb2cc, 0x41a2, 0xa53c, 0xbfc0, 0x19b0, 0x4337, 0xbf48, 0xb282, 0x1f0e, 0x4370, 0x4358, 0xb21a, 0xbad7, 0x4043, 0x431f, 0x4551, 0x4685, 0x19cf, 0x4053, 0x408a, 0xb020, 0x43fd, 0x2dc1, 0x4603, 0xbf0f, 0x0b17, 0x415b, 0xac11, 0x407c, 0x4362, 0xba64, 0x4216, 0x1384, 0x09e0, 0xbad7, 0xba17, 0x426d, 0x438e, 0x33d3, 0x406d, 0x3b44, 0xb210, 0x2ec5, 0x40ab, 0x42e8, 0x195e, 0x1577, 0x425c, 0x4159, 0x42d0, 0x14ae, 0x1cb1, 0x4081, 0x1a6a, 0xbf57, 0xb2f2, 0x4301, 0x2184, 0x41b0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x67423155, 0xe3599f1a, 0xf8825cc1, 0xb4b9fc16, 0xcf447746, 0x4ebf74b8, 0x62e4bf2f, 0x5a51ed64, 0xce8f8c9f, 0x5b8b5b0d, 0xed67892d, 0xb797f36a, 0xb91b1a79, 0x89af40a1, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00000002, 0xfffffffe, 0x43e44438, 0xbc1bbbc8, 0x00000000, 0x00000000, 0x0000021f, 0xff1bffff, 0x5b8b5b0d, 0xfffffff5, 0x5738068c, 0x89af3e59, 0x21f22254, 0x00000000, 0x800001d0 }, + Instructions = [0x203c, 0x4138, 0xb29a, 0x402d, 0xbf0a, 0x4151, 0x42a8, 0x4489, 0x4091, 0xb2e9, 0xbf8d, 0xb205, 0x41e3, 0x08fb, 0x048b, 0x401f, 0xb2c6, 0x4106, 0xbf00, 0xba13, 0x391f, 0xba43, 0x4000, 0x407c, 0xba09, 0xb2bd, 0xbf25, 0x13a2, 0xb2ca, 0xaf42, 0x4327, 0xb2d4, 0xb2be, 0xaf98, 0x416c, 0x2cbd, 0x41c7, 0x401e, 0xb281, 0x4107, 0x42d2, 0xbfd2, 0x1939, 0xb248, 0xa7cd, 0x1ac5, 0xbf00, 0x2d7b, 0xb260, 0x43c6, 0xb28f, 0xb29a, 0x3844, 0x3701, 0xb08b, 0x1d56, 0xbff0, 0x42aa, 0xb2d2, 0xbfd8, 0x21a3, 0x34fc, 0x4617, 0x41a3, 0x284d, 0x447c, 0x42dc, 0xba10, 0x42ad, 0x1858, 0x1b99, 0x009e, 0xba48, 0xaf30, 0x413b, 0xbf6b, 0xba13, 0x1e8b, 0x29ae, 0x40bb, 0x1f0d, 0x1bf6, 0xb0fa, 0xb085, 0x1c93, 0xae0c, 0x44ad, 0xb294, 0x4327, 0x1ea8, 0x0fbb, 0x4172, 0x43e1, 0xb274, 0xab3a, 0x421e, 0x4003, 0x4370, 0x189a, 0x4289, 0xbf1d, 0xba66, 0x1d6f, 0xb2da, 0xbfb0, 0x4017, 0xa419, 0xba6f, 0x127d, 0x43f9, 0x0b3c, 0x1a9d, 0x1c19, 0x2d38, 0xbfa0, 0x38c1, 0x406f, 0x181c, 0x431a, 0x4069, 0x4359, 0xaa68, 0x1e23, 0x0012, 0x047a, 0xbf6e, 0x15c1, 0x4572, 0x4344, 0x0ff8, 0x46e4, 0x41db, 0x3216, 0x421c, 0x4195, 0x23cb, 0x4261, 0xa31a, 0xbad8, 0x06e8, 0x4197, 0xbf69, 0x420d, 0x228b, 0xbae0, 0x302d, 0x4046, 0x4016, 0x4137, 0xbf79, 0x2c74, 0x407b, 0xa65d, 0x401b, 0x43ea, 0x09f7, 0x41ad, 0x401d, 0x3324, 0xb2cb, 0xa421, 0x40b4, 0x43f1, 0xbfbe, 0x3ae0, 0x45c1, 0x4014, 0x41c2, 0x4596, 0xbaf1, 0xbf1f, 0x4035, 0xb29e, 0x4070, 0xb0cc, 0xbfb4, 0xbad1, 0xba09, 0x1b93, 0x414a, 0xbf43, 0x40b8, 0xb0ef, 0x41c2, 0x4157, 0x36c8, 0x42b7, 0x40dd, 0x43ab, 0x0d39, 0x32b9, 0x1cfc, 0x1c79, 0xa753, 0x4613, 0x418a, 0x40e8, 0xb25e, 0x0bf3, 0xbf9f, 0x4100, 0x3e0f, 0xb205, 0xb2d7, 0x12b8, 0x430e, 0x4032, 0x42a7, 0x18fe, 0x1ac1, 0x221c, 0xb086, 0x0cf7, 0x4367, 0x426e, 0xabea, 0x4282, 0x1da5, 0xaca3, 0x4277, 0xbf24, 0x4308, 0xb035, 0x41c0, 0x1434, 0xaf0d, 0xbfa0, 0xb20a, 0xbacd, 0xb2e8, 0x0248, 0x40cb, 0x41be, 0x43c5, 0x43a2, 0x40cb, 0x0c9a, 0x2979, 0x0138, 0x1f54, 0x4166, 0xb2de, 0x1e7e, 0x4132, 0x4194, 0xb2a8, 0xbfc3, 0x419d, 0xbadc, 0x43db, 0x4363, 0x42a6, 0xb02d, 0x40c1, 0x32dc, 0x467d, 0x43b0, 0x4581, 0x431c, 0x4232, 0x3daa, 0x436d, 0x4288, 0x40f7, 0x1554, 0x43f1, 0xbf0d, 0x0509, 0x2371, 0x4387, 0x42bc, 0x1f69, 0xb07f, 0x43e2, 0x29d5, 0x41d7, 0x297a, 0x4285, 0x09c3, 0xb2e8, 0x417d, 0xba00, 0x42d1, 0x4286, 0xb203, 0x40c7, 0x46e4, 0x4558, 0x40d4, 0x12b2, 0x3bf4, 0xb09a, 0x1a12, 0xbf48, 0xbaf4, 0x1858, 0x412f, 0x051a, 0x21cf, 0x4118, 0xbaf9, 0x1a50, 0xb245, 0xbf78, 0x43bd, 0x416a, 0x4178, 0xae37, 0x425a, 0x4038, 0xa7bb, 0x414d, 0x1bcd, 0x395a, 0x411d, 0xba0a, 0x41d4, 0xbf80, 0x059e, 0xb0bb, 0x0522, 0xb276, 0xb2f9, 0x2920, 0xa495, 0xbac2, 0xbfe4, 0xbfe0, 0x4081, 0xb0f1, 0xb258, 0x45b1, 0xa68e, 0x428f, 0xb015, 0x11ae, 0x0d68, 0xb255, 0x44e4, 0x43d2, 0x42ae, 0x310f, 0x1e7e, 0xb030, 0x2a4f, 0xbfa1, 0x1f11, 0xb213, 0x4237, 0x1e41, 0x43d5, 0xb2e0, 0x425f, 0xbf00, 0x432a, 0x0299, 0x18de, 0x434f, 0x4304, 0xb06a, 0x33aa, 0x1e4d, 0xba46, 0x42ca, 0x4115, 0x4116, 0xa597, 0x30fc, 0x10be, 0x41a3, 0xbf48, 0xa37b, 0x40eb, 0xb0e4, 0xb28b, 0x4002, 0x416c, 0x40aa, 0x461b, 0x43b9, 0x18d6, 0x4276, 0x4447, 0x4692, 0x464b, 0x427f, 0xba74, 0xba05, 0x2045, 0x1bad, 0x4097, 0xa1f9, 0x41a4, 0xb2e0, 0xbf34, 0xba77, 0x1ef1, 0xba6f, 0x435f, 0x44fb, 0xbf74, 0x4247, 0x4275, 0x1e8d, 0x40bc, 0x2747, 0x4001, 0x419c, 0x20f8, 0x428d, 0x02eb, 0xbac8, 0x0ba6, 0x44ac, 0x41ce, 0x4314, 0x0bdb, 0x1251, 0xb256, 0x423b, 0x4089, 0x4066, 0xbf63, 0x1cd3, 0x4095, 0xba21, 0x430c, 0x3453, 0x42b6, 0x0ace, 0x4181, 0x40ff, 0x4215, 0x43a8, 0x4244, 0x1aa6, 0x1a97, 0xa74d, 0x428c, 0x400a, 0xbf99, 0x1c2b, 0x2b70, 0x437c, 0x408d, 0x4367, 0xbf68, 0x3c30, 0x4382, 0x4227, 0x4266, 0x0e7d, 0xbae3, 0x1ab4, 0x43aa, 0x45f4, 0x4248, 0x15a1, 0x4152, 0xb2e6, 0x1a40, 0xa73a, 0x424e, 0x0b31, 0x1b75, 0xae32, 0xba41, 0x1b3a, 0x45d9, 0x1b7a, 0xbfd7, 0x4326, 0x46aa, 0x40b1, 0xb233, 0x42c9, 0x1a6b, 0xa894, 0x43ca, 0x433d, 0xbf45, 0x2f43, 0x421c, 0x1234, 0xb0be, 0xba6d, 0x1cc2, 0x43d3, 0xb248, 0x1f29, 0xb2e3, 0x4365, 0xbace, 0x31e2, 0xbf63, 0xa256, 0x1be2, 0x4420, 0x4339, 0xba0b, 0x1d57, 0x4694, 0xb28d, 0xbfad, 0x407f, 0xa64a, 0x4308, 0xbfd0, 0x443f, 0x05d3, 0xbfa3, 0xb27f, 0x3293, 0x40df, 0x41ff, 0x42e4, 0x4213, 0xb04d, 0x3ee4, 0x41d8, 0x1e59, 0xa2f5, 0x049c, 0xb2e5, 0x406f, 0xab82, 0x428f, 0xba3f, 0x41db, 0x415f, 0xbfe0, 0x406c, 0x46c8, 0xb29e, 0x1834, 0x067a, 0x4142, 0x433c, 0xb2d4, 0x045c, 0xbfdd, 0x43cb, 0x4105, 0x307f, 0x42a5, 0xaa0d, 0x1152, 0x4082, 0x338b, 0x1c40, 0x44a3, 0xbf67, 0xb28c, 0x1cfd, 0x1a7c, 0xb289, 0xbaca, 0x4056, 0x0316, 0x459d, 0x188c, 0x4341, 0x424e, 0xaaac, 0x0908, 0x41b4, 0xb233, 0x4150, 0xb2d1, 0x2241, 0x179d, 0xbfc7, 0x4249, 0xa363, 0x4179, 0x4125, 0x40d2, 0x429e, 0x41a1, 0xb23f, 0x386c, 0x0051, 0xba75, 0xba3d, 0xbfce, 0xb000, 0xbae5, 0x4402, 0x4366, 0x4374, 0x4546, 0x4185, 0x3555, 0xbf7b, 0x40ed, 0x39b8, 0x43f7, 0xb05d, 0x40cd, 0x4176, 0xbfd0, 0x2425, 0x1f85, 0x1b56, 0x4265, 0x403c, 0x4043, 0x4308, 0x4164, 0xb20f, 0xb2f7, 0x4336, 0x26a7, 0x026a, 0x45da, 0x236e, 0x4342, 0xa109, 0xa913, 0xbfd7, 0x2392, 0xba4b, 0xb270, 0xba5a, 0xb02f, 0xa1c0, 0xba4a, 0x41c4, 0x411e, 0x20bf, 0x4331, 0x1519, 0x1987, 0x1931, 0x44c5, 0x1546, 0xbac4, 0xbf48, 0xb2eb, 0x403f, 0x237f, 0x435e, 0xb229, 0x1cac, 0xbae2, 0xbacf, 0x42c9, 0x42d2, 0x0630, 0x22af, 0x407b, 0x43d6, 0x1a64, 0xba0e, 0x3269, 0x364a, 0xba0d, 0xae94, 0x4310, 0x357b, 0x41f1, 0xbfc9, 0xb2d1, 0x434d, 0x4223, 0x41b8, 0xb2b9, 0xbf80, 0x41af, 0x401a, 0xbf9e, 0x062f, 0x39e3, 0x4007, 0x41ff, 0x419a, 0x4379, 0x39f6, 0x43be, 0x2e46, 0xbadb, 0x1dc4, 0xa8b1, 0x1e25, 0x431d, 0x42af, 0x41f8, 0x232f, 0xba70, 0x4018, 0x4111, 0x4160, 0x40a1, 0xbfe8, 0x4001, 0x42a3, 0xab81, 0x420a, 0x41c6, 0x4366, 0x40f4, 0x3117, 0x4065, 0xba39, 0xb2f4, 0x1a3c, 0xb2e3, 0x435e, 0xb246, 0x423d, 0x43de, 0xbfcf, 0x42f2, 0x424c, 0x328b, 0xba0e, 0x1f34, 0x462b, 0x456b, 0xbadb, 0xb277, 0xbfb4, 0x40d1, 0xbafa, 0x4248, 0x127c, 0x324a, 0x1b77, 0x40c6, 0xba06, 0x42f0, 0x4043, 0x0313, 0x4542, 0x4084, 0x368e, 0xbf24, 0x4294, 0x1c3c, 0x408d, 0xb2b2, 0x314f, 0x1c72, 0x4267, 0x430a, 0xa020, 0xb0fa, 0x1aa7, 0xb229, 0x41af, 0x404a, 0x12c8, 0x4302, 0xb2b8, 0x406d, 0xbac6, 0x1a94, 0x4306, 0xb284, 0x41a1, 0xbf77, 0xb206, 0x41af, 0x3aea, 0x438f, 0xadb4, 0x1cc3, 0x11cd, 0xbac1, 0x1c4a, 0xa4b3, 0x415b, 0x3cba, 0x43e8, 0x41c0, 0xb29a, 0xb2a1, 0xa433, 0xbf73, 0x4553, 0x4198, 0x4243, 0x21e5, 0xb2a4, 0xbf90, 0x4319, 0x40e5, 0x433b, 0x423d, 0x42a7, 0x4149, 0x4346, 0x1abf, 0xba72, 0xb086, 0x40bf, 0x2f64, 0x43e8, 0x064e, 0xb2bd, 0x4617, 0xbfb5, 0xb2cf, 0x3673, 0x4608, 0xba4b, 0x1f3b, 0x1bcf, 0xbfb0, 0x42f8, 0x42d4, 0x4389, 0x40f2, 0x0335, 0x4337, 0x425b, 0xb26c, 0x422e, 0xb241, 0x42a4, 0x42c0, 0xbf01, 0x362f, 0x38e0, 0x42ee, 0x1944, 0x4312, 0xb2db, 0x12e0, 0x46f0, 0xba2e, 0xb0c2, 0x42c5, 0x1838, 0xbff0, 0x1d87, 0x462f, 0x428f, 0x411a, 0x1dc6, 0xa2d1, 0x45ea, 0x4261, 0x17a2, 0x4012, 0x400d, 0x1ae6, 0x4284, 0x1abf, 0xbf36, 0x40f0, 0x4389, 0x0c78, 0x1d1d, 0xb203, 0x407f, 0x14b5, 0xb2b3, 0x0fce, 0xba7c, 0xb2c9, 0xb25e, 0x2199, 0x419a, 0x4188, 0x430b, 0xb0ef, 0xba69, 0x4171, 0xb212, 0x41f1, 0xba4c, 0xbf8c, 0x45c4, 0xb211, 0x4266, 0x436a, 0x43de, 0xb0b4, 0x41e7, 0xb0d5, 0x424a, 0xba7f, 0xb212, 0x40c1, 0x4323, 0x4241, 0x42f0, 0x42d5, 0x4269, 0x433e, 0x1b80, 0x3715, 0xaafc, 0xba72, 0x4611, 0x1d89, 0xbfaa, 0xb0f9, 0x3a65, 0xb220, 0xb256, 0x4498, 0x40b6, 0x43af, 0x4334, 0x3daf, 0x43ee, 0xb2b8, 0x40fb, 0x3140, 0x4092, 0x412a, 0x4242, 0xaa96, 0x43b0, 0xb0b3, 0x1ccc, 0xbfe8, 0x4139, 0x4377, 0x41ad, 0x187d, 0xbfa4, 0xba15, 0x4166, 0x41a4, 0x3fb1, 0x4005, 0xb2c7, 0x413d, 0x3917, 0xbfe0, 0x41a5, 0xb211, 0x433d, 0x05fd, 0x4409, 0x4475, 0x41cc, 0x1e64, 0xbf89, 0xb28f, 0x1a04, 0xbf90, 0x42b3, 0xb2cc, 0x41a2, 0xa53c, 0xbfc0, 0x19b0, 0x4337, 0xbf48, 0xb282, 0x1f0e, 0x4370, 0x4358, 0xb21a, 0xbad7, 0x4043, 0x431f, 0x4551, 0x4685, 0x19cf, 0x4053, 0x408a, 0xb020, 0x43fd, 0x2dc1, 0x4603, 0xbf0f, 0x0b17, 0x415b, 0xac11, 0x407c, 0x4362, 0xba64, 0x4216, 0x1384, 0x09e0, 0xbad7, 0xba17, 0x426d, 0x438e, 0x33d3, 0x406d, 0x3b44, 0xb210, 0x2ec5, 0x40ab, 0x42e8, 0x195e, 0x1577, 0x425c, 0x4159, 0x42d0, 0x14ae, 0x1cb1, 0x4081, 0x1a6a, 0xbf57, 0xb2f2, 0x4301, 0x2184, 0x41b0, 0x4770, 0xe7fe + ], + StartRegs = [0x67423155, 0xe3599f1a, 0xf8825cc1, 0xb4b9fc16, 0xcf447746, 0x4ebf74b8, 0x62e4bf2f, 0x5a51ed64, 0xce8f8c9f, 0x5b8b5b0d, 0xed67892d, 0xb797f36a, 0xb91b1a79, 0x89af40a1, 0x00000000, 0x100001f0 + ], + FinalRegs = [0x00000000, 0x00000002, 0xfffffffe, 0x43e44438, 0xbc1bbbc8, 0x00000000, 0x00000000, 0x0000021f, 0xff1bffff, 0x5b8b5b0d, 0xfffffff5, 0x5738068c, 0x89af3e59, 0x21f22254, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x351e, 0xb20f, 0x43d6, 0xba50, 0x40d6, 0x40c0, 0xb0f4, 0x41e8, 0xb0e2, 0x4618, 0xb07e, 0x4103, 0xba3c, 0xbafb, 0x0552, 0x41d7, 0xbfab, 0x41e3, 0x40ae, 0xa6e2, 0x2bec, 0xb23a, 0x007d, 0x4264, 0xb07d, 0x432c, 0xbfe8, 0x4279, 0x44d1, 0x225c, 0x21f0, 0x0f23, 0x426d, 0x0b9f, 0x429c, 0x4275, 0xba66, 0x0a83, 0x4227, 0x31d8, 0x1ca1, 0xbfc5, 0x1fc2, 0xbadf, 0x4359, 0x4171, 0x4122, 0x0782, 0xbf51, 0xb06b, 0x4121, 0x408c, 0x3364, 0xb00d, 0xba44, 0x1aaa, 0x43b5, 0x4640, 0xbaf9, 0xaf1b, 0xb2eb, 0xba59, 0x423a, 0x0a7a, 0xb0fa, 0xb2cf, 0x45c8, 0x42e2, 0x2a0c, 0x1c8f, 0xbac4, 0xbf08, 0xb22e, 0x425b, 0xb08a, 0x43f2, 0xbfb7, 0x42fa, 0x4212, 0x1a85, 0x4292, 0xbacc, 0x34d2, 0xb260, 0x1fb1, 0xa08c, 0xbae8, 0x31bf, 0x40fb, 0xa24b, 0xb270, 0x4042, 0x43a4, 0x44b4, 0xb0a3, 0x26c1, 0xbf34, 0x43dc, 0x151d, 0x1be3, 0x40ec, 0xb224, 0xb280, 0x29f4, 0x1afe, 0x4248, 0xbf1a, 0x4282, 0x3389, 0xb25a, 0x1c1f, 0xbf48, 0x3fe4, 0xb25f, 0xa162, 0x2921, 0xbafa, 0x401a, 0x410b, 0xbf0b, 0x42e9, 0xb28a, 0xb270, 0x1a56, 0x2b14, 0x1d39, 0x431f, 0x1f4e, 0xb28e, 0x4177, 0x1a5f, 0xa81b, 0xa73a, 0x4392, 0x416c, 0x420b, 0x4119, 0x40ff, 0xbf65, 0x4039, 0x41cb, 0xb098, 0x41f1, 0x4126, 0xba70, 0xa037, 0x0686, 0x31f0, 0xba02, 0x2c1b, 0xa41f, 0xbf9f, 0x4037, 0x417c, 0x4371, 0x1c48, 0x39f5, 0xb0a2, 0x4271, 0xb201, 0x3107, 0xbf1b, 0x42a8, 0x42c0, 0x465b, 0xb20c, 0x2b6d, 0xbf6c, 0xb2d6, 0xb274, 0x1344, 0x4605, 0xb2a4, 0x359b, 0xba1d, 0xb2fb, 0xbf1b, 0x1dd4, 0x1d7e, 0x4679, 0x4591, 0xba75, 0xbf60, 0x42ce, 0xba57, 0x160d, 0x415e, 0x085d, 0x18d1, 0x1f0b, 0xbfd6, 0x429a, 0x411f, 0x4079, 0x4682, 0xbfbc, 0x44a4, 0x416f, 0x4029, 0x1975, 0x294b, 0xbad1, 0x43f0, 0x2017, 0x4083, 0x416e, 0x41f7, 0xbfd0, 0x45e0, 0x3c14, 0x4647, 0x44f1, 0x4681, 0xb034, 0x4433, 0x4192, 0x4281, 0xb08e, 0xba31, 0xbfb7, 0x427f, 0x4630, 0xbad4, 0x4379, 0x40c7, 0x4318, 0x3267, 0xb2e5, 0x4280, 0x42ee, 0x059f, 0x4054, 0x4585, 0x456d, 0xa855, 0x42f3, 0x0953, 0xba44, 0xb040, 0xb2af, 0x426d, 0x4635, 0x41a1, 0x405a, 0x1d67, 0x1941, 0x43fe, 0x425a, 0xbfba, 0x32e7, 0x1621, 0x41ef, 0x3fae, 0x1be4, 0x036f, 0x40d0, 0x430c, 0xb02e, 0xbace, 0x4060, 0x4299, 0xba14, 0x4557, 0xb22d, 0xbf4f, 0x4188, 0xba3a, 0xb2a1, 0x419f, 0x408e, 0x0dbf, 0xb2de, 0xaa6f, 0x401e, 0x4315, 0xb2f2, 0xbad9, 0xb0c6, 0x0710, 0xb025, 0x431e, 0x42b7, 0x1f99, 0xbf5d, 0x4273, 0x45f4, 0xb2ba, 0x410a, 0x19da, 0xb21e, 0xbafe, 0x32a4, 0xb24e, 0xbafc, 0xa511, 0x4175, 0x4209, 0x15ec, 0x4203, 0x4016, 0x4451, 0xbafd, 0x25f3, 0x409d, 0x1c68, 0xbfd7, 0x43b2, 0x41c1, 0x432d, 0x428c, 0xba10, 0x403a, 0xa089, 0x245f, 0xbf59, 0xb2a4, 0x151d, 0x38b5, 0xa654, 0x44f9, 0x44a3, 0xbfca, 0xb216, 0x1314, 0xba41, 0x289e, 0x0797, 0x40df, 0x409a, 0x430f, 0x40a5, 0x1e10, 0x40d4, 0x41a7, 0x11f6, 0x4384, 0xbf90, 0x42f6, 0x42c5, 0x403c, 0x43a9, 0xa104, 0x1d69, 0x417b, 0xa553, 0xbfe1, 0xb2e2, 0x24d6, 0x4095, 0x1fc7, 0xb243, 0x19ca, 0x419d, 0x40ca, 0x4039, 0x4145, 0xbfa0, 0xbfbb, 0xb233, 0xbf00, 0x40cf, 0x0ac0, 0xa120, 0x1f27, 0x094c, 0x4121, 0xbad4, 0x18a6, 0xbf05, 0x4333, 0xaca2, 0x19b2, 0x0f87, 0xbadf, 0x1653, 0xb251, 0x0c0e, 0xb027, 0x423d, 0x44f3, 0x43cf, 0xb06d, 0xaa68, 0x43d7, 0xaf3d, 0xaac6, 0x30bc, 0xae02, 0x0af9, 0x0a91, 0x40ba, 0x42eb, 0xb271, 0x42a8, 0xbfb8, 0x46d5, 0xa671, 0xb0ea, 0x43d2, 0x1a79, 0x35a2, 0xba41, 0x1a5a, 0x02ce, 0x4339, 0x4053, 0xbfd9, 0xa3d6, 0x2e6e, 0x416f, 0x43f7, 0xbafd, 0x427c, 0xbf76, 0xa945, 0x20fd, 0xba28, 0xb0b4, 0x4062, 0x21e7, 0xb09c, 0x4078, 0xa702, 0x41ce, 0x417a, 0xb219, 0x4196, 0xbf3d, 0xbaf7, 0x192c, 0xa208, 0x425e, 0xb2c4, 0x400a, 0x40f1, 0x4304, 0xb0e2, 0x4031, 0xb211, 0x42c3, 0x0eca, 0x46f1, 0x4072, 0x1c40, 0x40f6, 0x1b35, 0xb2f8, 0x43e3, 0x28f6, 0x43a3, 0x419a, 0x4337, 0x4311, 0x40ff, 0xbfb9, 0x312e, 0x4189, 0xa2f4, 0x45e9, 0x42f6, 0x1db4, 0x0c19, 0x44f1, 0xba6c, 0x425f, 0x4108, 0x41ba, 0x0903, 0xba53, 0x16c7, 0x4112, 0x044b, 0xb02f, 0xb21d, 0x389c, 0x420b, 0x424e, 0x309a, 0xbf87, 0x4161, 0x1fa5, 0x40cf, 0x4060, 0xbfdd, 0x4183, 0x1107, 0x3376, 0x433b, 0xa8eb, 0x352d, 0x1918, 0x0664, 0x4225, 0x401b, 0x42e0, 0xb208, 0x46a8, 0xbf38, 0xb277, 0x0fd4, 0x434e, 0x16bf, 0x43ea, 0xb2f3, 0x4124, 0x198f, 0xba5b, 0x43be, 0x1e44, 0xb2ae, 0xa745, 0xbfde, 0x405d, 0x4151, 0x41ce, 0x1c07, 0x41a7, 0x4166, 0x40fc, 0x38fe, 0x41d9, 0x4084, 0x4128, 0x1817, 0x433a, 0xbf18, 0xb269, 0x420f, 0x442e, 0xb020, 0x42e4, 0x182e, 0x2237, 0xb067, 0x4225, 0x41b4, 0x40cc, 0xbf88, 0x45d2, 0xba2b, 0x2749, 0xadb9, 0x1b34, 0x40e8, 0x0ff1, 0xb20a, 0xba70, 0x3396, 0xb261, 0x4296, 0x4387, 0x4002, 0x436b, 0x435f, 0x434c, 0xbaf7, 0x4077, 0xbfe1, 0x1f0d, 0xba30, 0xba16, 0x4085, 0xb2ad, 0x4029, 0xba54, 0x1c2f, 0xb27b, 0x0dea, 0x4233, 0xb202, 0x0952, 0xba7e, 0x31f6, 0x43fc, 0x4117, 0x45c9, 0xae39, 0xbf3f, 0x4226, 0x43b7, 0x4221, 0x44f2, 0x4157, 0x1efc, 0xbf32, 0x40ab, 0xbfc0, 0x2669, 0x4388, 0xb0a9, 0x406c, 0x28ca, 0x15e3, 0x4337, 0xba26, 0xad3c, 0x106b, 0x340e, 0xbff0, 0xba04, 0x412d, 0x415d, 0x410e, 0xbfbd, 0x427f, 0xb232, 0xac33, 0x4042, 0x40cc, 0xa690, 0x42ce, 0x2cf1, 0xbaf3, 0x40ae, 0xba6b, 0xba26, 0x0b5f, 0xb2e8, 0x4105, 0xbaf2, 0x4348, 0x4240, 0x1f5b, 0x408f, 0xbf38, 0xb282, 0x1c4d, 0x45ab, 0x43c5, 0xb253, 0xb26d, 0x1bfe, 0xbfb5, 0xb018, 0x366a, 0x4065, 0x122e, 0x408b, 0x313d, 0xba7e, 0x4002, 0xbacc, 0x4040, 0x40c3, 0x42dd, 0xb276, 0x0d1e, 0x43ab, 0xba2d, 0x190e, 0x4082, 0xb29e, 0xba38, 0x2855, 0xb074, 0x1ca5, 0x4337, 0x1d60, 0x1cfd, 0xbad9, 0x046c, 0xbfc1, 0xbfd0, 0x42d1, 0xb211, 0x1c31, 0x4694, 0xafe8, 0x43c6, 0x4303, 0x468d, 0xb214, 0x00fa, 0xb03c, 0x4280, 0x43c6, 0x4637, 0xbfde, 0x07a2, 0x4044, 0xba6b, 0xb096, 0xa983, 0x4592, 0x413a, 0x0518, 0x46e2, 0xa242, 0x25c1, 0x4103, 0xba62, 0xb001, 0x455f, 0xbf47, 0x11f2, 0xacab, 0x3992, 0xbad6, 0x439e, 0x4388, 0xb2b8, 0xba17, 0x432a, 0xb221, 0xba03, 0x1730, 0x43cf, 0x4265, 0xba50, 0x1b03, 0x428f, 0xbf2e, 0xb20c, 0x458c, 0x4390, 0x1afe, 0x42b9, 0x1d65, 0x4463, 0x42b5, 0x0dff, 0x4095, 0x42f6, 0x3496, 0x4441, 0x0c8a, 0xba61, 0x4325, 0x20f4, 0xb09c, 0x1c27, 0x420f, 0x40e0, 0xbf70, 0x21c7, 0x4240, 0x459b, 0x40a0, 0xb2ae, 0xbfd2, 0xac93, 0xb0b0, 0x31e9, 0x4131, 0x185d, 0x417c, 0xba60, 0xb24b, 0x2874, 0x40ef, 0xb206, 0xb2e9, 0x44fc, 0xb074, 0xb03b, 0x43a8, 0x426a, 0xba38, 0x43ce, 0x443f, 0xbf4b, 0x4141, 0x1f3c, 0xb2b6, 0x430b, 0xbfcf, 0x4292, 0xba52, 0x4172, 0xa9f9, 0x3050, 0x44e0, 0x43b0, 0x43e8, 0x40b3, 0x4257, 0xba6f, 0x4006, 0x4036, 0x4320, 0x46f5, 0x41f6, 0xa8e5, 0xba6a, 0x429d, 0x0a20, 0x19d7, 0x467f, 0xb20c, 0x400d, 0x4007, 0xbfaa, 0x4367, 0x21b7, 0x4142, 0x428b, 0x4369, 0x45a0, 0x2abb, 0x1af5, 0x4216, 0x1aee, 0xb02b, 0x121e, 0xb241, 0xbaee, 0x2d8b, 0x40d2, 0xbf69, 0x4117, 0x4366, 0x2bbd, 0xba10, 0xb09f, 0x4172, 0x426c, 0x23fc, 0x338e, 0xbf43, 0x4015, 0x42ee, 0xa3f1, 0x0369, 0x42e7, 0x062e, 0x1667, 0xb23b, 0x4433, 0x438e, 0xb0c9, 0x418e, 0xb0d8, 0xba4c, 0xbf13, 0x42e0, 0x1c20, 0x19f8, 0xb232, 0x4083, 0x410f, 0xad20, 0x412c, 0x3662, 0x2a58, 0x4089, 0xb275, 0x117c, 0x3b0c, 0xbf5d, 0x41c1, 0x4011, 0x4063, 0x2178, 0xab2f, 0x42a1, 0x439e, 0x2b3e, 0x45e2, 0xb084, 0xadfb, 0xa056, 0xbaf7, 0x3e15, 0x4464, 0xb046, 0xb24d, 0xb09d, 0x4202, 0x19f1, 0x4211, 0xbf5e, 0x4035, 0x400f, 0x1e45, 0x13ab, 0x40aa, 0x1ad0, 0x429f, 0xb0a4, 0xb05b, 0x0f39, 0xaa55, 0x2864, 0x437f, 0x43ca, 0xb2d1, 0x3846, 0x46e0, 0xb0d4, 0x4411, 0x1ce1, 0xb06d, 0x1246, 0x187d, 0x08ca, 0x46da, 0xbf95, 0xb273, 0xba11, 0x4211, 0x40d3, 0xb040, 0x05fd, 0x1e61, 0xa78d, 0x46f3, 0xb0e7, 0x4168, 0xba4c, 0xba0b, 0x000f, 0x41a0, 0x340c, 0x29e0, 0x2c2e, 0x42ab, 0xb01b, 0x421e, 0x2607, 0x1b58, 0xba0f, 0x442a, 0x4219, 0xb2ac, 0xbfd4, 0x414a, 0x0524, 0x3d35, 0xb0a0, 0x4343, 0x40e8, 0x40a9, 0x18f6, 0x14df, 0x41d4, 0x4542, 0x434a, 0x4306, 0x36f2, 0x1d38, 0x4595, 0x41a2, 0x42fd, 0xbf24, 0x4596, 0xa565, 0x4650, 0xb264, 0x4139, 0xb039, 0x4261, 0x41ae, 0xbaf5, 0x4112, 0x43c3, 0x0409, 0x4168, 0x40e4, 0xbfa8, 0xba31, 0xa175, 0x41ac, 0x2089, 0x423e, 0x40fe, 0x411e, 0x2535, 0x42e2, 0xa13b, 0x44c0, 0xb20f, 0xbf6e, 0x43be, 0xb2a5, 0x40bb, 0x4068, 0x19bb, 0x459d, 0x2ab5, 0x192c, 0x427e, 0x429e, 0x4286, 0x43ee, 0x415e, 0xb0cd, 0x46c3, 0x45a3, 0x4345, 0x4170, 0x064c, 0xb2bd, 0xbf19, 0xb091, 0x02aa, 0x3a96, 0xb2a8, 0x41a0, 0xb0c3, 0x4327, 0x18c6, 0x014d, 0x402a, 0xb299, 0xb207, 0x0b66, 0x3ced, 0xb2bb, 0x4188, 0x3513, 0xbaff, 0x4356, 0x437c, 0x42f2, 0xba74, 0xb239, 0xba67, 0x42b4, 0xbf3a, 0xb2d8, 0x1c3f, 0x2787, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3be9d470, 0x621bd961, 0x561548a7, 0x32c98a3d, 0x487719ff, 0x1c15d826, 0x34d9255e, 0xaae8da54, 0xf65e2145, 0x5153589f, 0x032f5367, 0xf13554cd, 0xda5c80c1, 0x8ef09f26, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0xffffffff, 0xffff8018, 0x00031000, 0x00001880, 0x00000000, 0x00031013, 0x00000000, 0x00000087, 0x00012ad4, 0x00000000, 0xf135552c, 0x00012ad4, 0x0000956a, 0xfffffd74, 0x00000000, 0x600001d0 }, + Instructions = [0x351e, 0xb20f, 0x43d6, 0xba50, 0x40d6, 0x40c0, 0xb0f4, 0x41e8, 0xb0e2, 0x4618, 0xb07e, 0x4103, 0xba3c, 0xbafb, 0x0552, 0x41d7, 0xbfab, 0x41e3, 0x40ae, 0xa6e2, 0x2bec, 0xb23a, 0x007d, 0x4264, 0xb07d, 0x432c, 0xbfe8, 0x4279, 0x44d1, 0x225c, 0x21f0, 0x0f23, 0x426d, 0x0b9f, 0x429c, 0x4275, 0xba66, 0x0a83, 0x4227, 0x31d8, 0x1ca1, 0xbfc5, 0x1fc2, 0xbadf, 0x4359, 0x4171, 0x4122, 0x0782, 0xbf51, 0xb06b, 0x4121, 0x408c, 0x3364, 0xb00d, 0xba44, 0x1aaa, 0x43b5, 0x4640, 0xbaf9, 0xaf1b, 0xb2eb, 0xba59, 0x423a, 0x0a7a, 0xb0fa, 0xb2cf, 0x45c8, 0x42e2, 0x2a0c, 0x1c8f, 0xbac4, 0xbf08, 0xb22e, 0x425b, 0xb08a, 0x43f2, 0xbfb7, 0x42fa, 0x4212, 0x1a85, 0x4292, 0xbacc, 0x34d2, 0xb260, 0x1fb1, 0xa08c, 0xbae8, 0x31bf, 0x40fb, 0xa24b, 0xb270, 0x4042, 0x43a4, 0x44b4, 0xb0a3, 0x26c1, 0xbf34, 0x43dc, 0x151d, 0x1be3, 0x40ec, 0xb224, 0xb280, 0x29f4, 0x1afe, 0x4248, 0xbf1a, 0x4282, 0x3389, 0xb25a, 0x1c1f, 0xbf48, 0x3fe4, 0xb25f, 0xa162, 0x2921, 0xbafa, 0x401a, 0x410b, 0xbf0b, 0x42e9, 0xb28a, 0xb270, 0x1a56, 0x2b14, 0x1d39, 0x431f, 0x1f4e, 0xb28e, 0x4177, 0x1a5f, 0xa81b, 0xa73a, 0x4392, 0x416c, 0x420b, 0x4119, 0x40ff, 0xbf65, 0x4039, 0x41cb, 0xb098, 0x41f1, 0x4126, 0xba70, 0xa037, 0x0686, 0x31f0, 0xba02, 0x2c1b, 0xa41f, 0xbf9f, 0x4037, 0x417c, 0x4371, 0x1c48, 0x39f5, 0xb0a2, 0x4271, 0xb201, 0x3107, 0xbf1b, 0x42a8, 0x42c0, 0x465b, 0xb20c, 0x2b6d, 0xbf6c, 0xb2d6, 0xb274, 0x1344, 0x4605, 0xb2a4, 0x359b, 0xba1d, 0xb2fb, 0xbf1b, 0x1dd4, 0x1d7e, 0x4679, 0x4591, 0xba75, 0xbf60, 0x42ce, 0xba57, 0x160d, 0x415e, 0x085d, 0x18d1, 0x1f0b, 0xbfd6, 0x429a, 0x411f, 0x4079, 0x4682, 0xbfbc, 0x44a4, 0x416f, 0x4029, 0x1975, 0x294b, 0xbad1, 0x43f0, 0x2017, 0x4083, 0x416e, 0x41f7, 0xbfd0, 0x45e0, 0x3c14, 0x4647, 0x44f1, 0x4681, 0xb034, 0x4433, 0x4192, 0x4281, 0xb08e, 0xba31, 0xbfb7, 0x427f, 0x4630, 0xbad4, 0x4379, 0x40c7, 0x4318, 0x3267, 0xb2e5, 0x4280, 0x42ee, 0x059f, 0x4054, 0x4585, 0x456d, 0xa855, 0x42f3, 0x0953, 0xba44, 0xb040, 0xb2af, 0x426d, 0x4635, 0x41a1, 0x405a, 0x1d67, 0x1941, 0x43fe, 0x425a, 0xbfba, 0x32e7, 0x1621, 0x41ef, 0x3fae, 0x1be4, 0x036f, 0x40d0, 0x430c, 0xb02e, 0xbace, 0x4060, 0x4299, 0xba14, 0x4557, 0xb22d, 0xbf4f, 0x4188, 0xba3a, 0xb2a1, 0x419f, 0x408e, 0x0dbf, 0xb2de, 0xaa6f, 0x401e, 0x4315, 0xb2f2, 0xbad9, 0xb0c6, 0x0710, 0xb025, 0x431e, 0x42b7, 0x1f99, 0xbf5d, 0x4273, 0x45f4, 0xb2ba, 0x410a, 0x19da, 0xb21e, 0xbafe, 0x32a4, 0xb24e, 0xbafc, 0xa511, 0x4175, 0x4209, 0x15ec, 0x4203, 0x4016, 0x4451, 0xbafd, 0x25f3, 0x409d, 0x1c68, 0xbfd7, 0x43b2, 0x41c1, 0x432d, 0x428c, 0xba10, 0x403a, 0xa089, 0x245f, 0xbf59, 0xb2a4, 0x151d, 0x38b5, 0xa654, 0x44f9, 0x44a3, 0xbfca, 0xb216, 0x1314, 0xba41, 0x289e, 0x0797, 0x40df, 0x409a, 0x430f, 0x40a5, 0x1e10, 0x40d4, 0x41a7, 0x11f6, 0x4384, 0xbf90, 0x42f6, 0x42c5, 0x403c, 0x43a9, 0xa104, 0x1d69, 0x417b, 0xa553, 0xbfe1, 0xb2e2, 0x24d6, 0x4095, 0x1fc7, 0xb243, 0x19ca, 0x419d, 0x40ca, 0x4039, 0x4145, 0xbfa0, 0xbfbb, 0xb233, 0xbf00, 0x40cf, 0x0ac0, 0xa120, 0x1f27, 0x094c, 0x4121, 0xbad4, 0x18a6, 0xbf05, 0x4333, 0xaca2, 0x19b2, 0x0f87, 0xbadf, 0x1653, 0xb251, 0x0c0e, 0xb027, 0x423d, 0x44f3, 0x43cf, 0xb06d, 0xaa68, 0x43d7, 0xaf3d, 0xaac6, 0x30bc, 0xae02, 0x0af9, 0x0a91, 0x40ba, 0x42eb, 0xb271, 0x42a8, 0xbfb8, 0x46d5, 0xa671, 0xb0ea, 0x43d2, 0x1a79, 0x35a2, 0xba41, 0x1a5a, 0x02ce, 0x4339, 0x4053, 0xbfd9, 0xa3d6, 0x2e6e, 0x416f, 0x43f7, 0xbafd, 0x427c, 0xbf76, 0xa945, 0x20fd, 0xba28, 0xb0b4, 0x4062, 0x21e7, 0xb09c, 0x4078, 0xa702, 0x41ce, 0x417a, 0xb219, 0x4196, 0xbf3d, 0xbaf7, 0x192c, 0xa208, 0x425e, 0xb2c4, 0x400a, 0x40f1, 0x4304, 0xb0e2, 0x4031, 0xb211, 0x42c3, 0x0eca, 0x46f1, 0x4072, 0x1c40, 0x40f6, 0x1b35, 0xb2f8, 0x43e3, 0x28f6, 0x43a3, 0x419a, 0x4337, 0x4311, 0x40ff, 0xbfb9, 0x312e, 0x4189, 0xa2f4, 0x45e9, 0x42f6, 0x1db4, 0x0c19, 0x44f1, 0xba6c, 0x425f, 0x4108, 0x41ba, 0x0903, 0xba53, 0x16c7, 0x4112, 0x044b, 0xb02f, 0xb21d, 0x389c, 0x420b, 0x424e, 0x309a, 0xbf87, 0x4161, 0x1fa5, 0x40cf, 0x4060, 0xbfdd, 0x4183, 0x1107, 0x3376, 0x433b, 0xa8eb, 0x352d, 0x1918, 0x0664, 0x4225, 0x401b, 0x42e0, 0xb208, 0x46a8, 0xbf38, 0xb277, 0x0fd4, 0x434e, 0x16bf, 0x43ea, 0xb2f3, 0x4124, 0x198f, 0xba5b, 0x43be, 0x1e44, 0xb2ae, 0xa745, 0xbfde, 0x405d, 0x4151, 0x41ce, 0x1c07, 0x41a7, 0x4166, 0x40fc, 0x38fe, 0x41d9, 0x4084, 0x4128, 0x1817, 0x433a, 0xbf18, 0xb269, 0x420f, 0x442e, 0xb020, 0x42e4, 0x182e, 0x2237, 0xb067, 0x4225, 0x41b4, 0x40cc, 0xbf88, 0x45d2, 0xba2b, 0x2749, 0xadb9, 0x1b34, 0x40e8, 0x0ff1, 0xb20a, 0xba70, 0x3396, 0xb261, 0x4296, 0x4387, 0x4002, 0x436b, 0x435f, 0x434c, 0xbaf7, 0x4077, 0xbfe1, 0x1f0d, 0xba30, 0xba16, 0x4085, 0xb2ad, 0x4029, 0xba54, 0x1c2f, 0xb27b, 0x0dea, 0x4233, 0xb202, 0x0952, 0xba7e, 0x31f6, 0x43fc, 0x4117, 0x45c9, 0xae39, 0xbf3f, 0x4226, 0x43b7, 0x4221, 0x44f2, 0x4157, 0x1efc, 0xbf32, 0x40ab, 0xbfc0, 0x2669, 0x4388, 0xb0a9, 0x406c, 0x28ca, 0x15e3, 0x4337, 0xba26, 0xad3c, 0x106b, 0x340e, 0xbff0, 0xba04, 0x412d, 0x415d, 0x410e, 0xbfbd, 0x427f, 0xb232, 0xac33, 0x4042, 0x40cc, 0xa690, 0x42ce, 0x2cf1, 0xbaf3, 0x40ae, 0xba6b, 0xba26, 0x0b5f, 0xb2e8, 0x4105, 0xbaf2, 0x4348, 0x4240, 0x1f5b, 0x408f, 0xbf38, 0xb282, 0x1c4d, 0x45ab, 0x43c5, 0xb253, 0xb26d, 0x1bfe, 0xbfb5, 0xb018, 0x366a, 0x4065, 0x122e, 0x408b, 0x313d, 0xba7e, 0x4002, 0xbacc, 0x4040, 0x40c3, 0x42dd, 0xb276, 0x0d1e, 0x43ab, 0xba2d, 0x190e, 0x4082, 0xb29e, 0xba38, 0x2855, 0xb074, 0x1ca5, 0x4337, 0x1d60, 0x1cfd, 0xbad9, 0x046c, 0xbfc1, 0xbfd0, 0x42d1, 0xb211, 0x1c31, 0x4694, 0xafe8, 0x43c6, 0x4303, 0x468d, 0xb214, 0x00fa, 0xb03c, 0x4280, 0x43c6, 0x4637, 0xbfde, 0x07a2, 0x4044, 0xba6b, 0xb096, 0xa983, 0x4592, 0x413a, 0x0518, 0x46e2, 0xa242, 0x25c1, 0x4103, 0xba62, 0xb001, 0x455f, 0xbf47, 0x11f2, 0xacab, 0x3992, 0xbad6, 0x439e, 0x4388, 0xb2b8, 0xba17, 0x432a, 0xb221, 0xba03, 0x1730, 0x43cf, 0x4265, 0xba50, 0x1b03, 0x428f, 0xbf2e, 0xb20c, 0x458c, 0x4390, 0x1afe, 0x42b9, 0x1d65, 0x4463, 0x42b5, 0x0dff, 0x4095, 0x42f6, 0x3496, 0x4441, 0x0c8a, 0xba61, 0x4325, 0x20f4, 0xb09c, 0x1c27, 0x420f, 0x40e0, 0xbf70, 0x21c7, 0x4240, 0x459b, 0x40a0, 0xb2ae, 0xbfd2, 0xac93, 0xb0b0, 0x31e9, 0x4131, 0x185d, 0x417c, 0xba60, 0xb24b, 0x2874, 0x40ef, 0xb206, 0xb2e9, 0x44fc, 0xb074, 0xb03b, 0x43a8, 0x426a, 0xba38, 0x43ce, 0x443f, 0xbf4b, 0x4141, 0x1f3c, 0xb2b6, 0x430b, 0xbfcf, 0x4292, 0xba52, 0x4172, 0xa9f9, 0x3050, 0x44e0, 0x43b0, 0x43e8, 0x40b3, 0x4257, 0xba6f, 0x4006, 0x4036, 0x4320, 0x46f5, 0x41f6, 0xa8e5, 0xba6a, 0x429d, 0x0a20, 0x19d7, 0x467f, 0xb20c, 0x400d, 0x4007, 0xbfaa, 0x4367, 0x21b7, 0x4142, 0x428b, 0x4369, 0x45a0, 0x2abb, 0x1af5, 0x4216, 0x1aee, 0xb02b, 0x121e, 0xb241, 0xbaee, 0x2d8b, 0x40d2, 0xbf69, 0x4117, 0x4366, 0x2bbd, 0xba10, 0xb09f, 0x4172, 0x426c, 0x23fc, 0x338e, 0xbf43, 0x4015, 0x42ee, 0xa3f1, 0x0369, 0x42e7, 0x062e, 0x1667, 0xb23b, 0x4433, 0x438e, 0xb0c9, 0x418e, 0xb0d8, 0xba4c, 0xbf13, 0x42e0, 0x1c20, 0x19f8, 0xb232, 0x4083, 0x410f, 0xad20, 0x412c, 0x3662, 0x2a58, 0x4089, 0xb275, 0x117c, 0x3b0c, 0xbf5d, 0x41c1, 0x4011, 0x4063, 0x2178, 0xab2f, 0x42a1, 0x439e, 0x2b3e, 0x45e2, 0xb084, 0xadfb, 0xa056, 0xbaf7, 0x3e15, 0x4464, 0xb046, 0xb24d, 0xb09d, 0x4202, 0x19f1, 0x4211, 0xbf5e, 0x4035, 0x400f, 0x1e45, 0x13ab, 0x40aa, 0x1ad0, 0x429f, 0xb0a4, 0xb05b, 0x0f39, 0xaa55, 0x2864, 0x437f, 0x43ca, 0xb2d1, 0x3846, 0x46e0, 0xb0d4, 0x4411, 0x1ce1, 0xb06d, 0x1246, 0x187d, 0x08ca, 0x46da, 0xbf95, 0xb273, 0xba11, 0x4211, 0x40d3, 0xb040, 0x05fd, 0x1e61, 0xa78d, 0x46f3, 0xb0e7, 0x4168, 0xba4c, 0xba0b, 0x000f, 0x41a0, 0x340c, 0x29e0, 0x2c2e, 0x42ab, 0xb01b, 0x421e, 0x2607, 0x1b58, 0xba0f, 0x442a, 0x4219, 0xb2ac, 0xbfd4, 0x414a, 0x0524, 0x3d35, 0xb0a0, 0x4343, 0x40e8, 0x40a9, 0x18f6, 0x14df, 0x41d4, 0x4542, 0x434a, 0x4306, 0x36f2, 0x1d38, 0x4595, 0x41a2, 0x42fd, 0xbf24, 0x4596, 0xa565, 0x4650, 0xb264, 0x4139, 0xb039, 0x4261, 0x41ae, 0xbaf5, 0x4112, 0x43c3, 0x0409, 0x4168, 0x40e4, 0xbfa8, 0xba31, 0xa175, 0x41ac, 0x2089, 0x423e, 0x40fe, 0x411e, 0x2535, 0x42e2, 0xa13b, 0x44c0, 0xb20f, 0xbf6e, 0x43be, 0xb2a5, 0x40bb, 0x4068, 0x19bb, 0x459d, 0x2ab5, 0x192c, 0x427e, 0x429e, 0x4286, 0x43ee, 0x415e, 0xb0cd, 0x46c3, 0x45a3, 0x4345, 0x4170, 0x064c, 0xb2bd, 0xbf19, 0xb091, 0x02aa, 0x3a96, 0xb2a8, 0x41a0, 0xb0c3, 0x4327, 0x18c6, 0x014d, 0x402a, 0xb299, 0xb207, 0x0b66, 0x3ced, 0xb2bb, 0x4188, 0x3513, 0xbaff, 0x4356, 0x437c, 0x42f2, 0xba74, 0xb239, 0xba67, 0x42b4, 0xbf3a, 0xb2d8, 0x1c3f, 0x2787, 0x4770, 0xe7fe + ], + StartRegs = [0x3be9d470, 0x621bd961, 0x561548a7, 0x32c98a3d, 0x487719ff, 0x1c15d826, 0x34d9255e, 0xaae8da54, 0xf65e2145, 0x5153589f, 0x032f5367, 0xf13554cd, 0xda5c80c1, 0x8ef09f26, 0x00000000, 0x900001f0 + ], + FinalRegs = [0xffffffff, 0xffff8018, 0x00031000, 0x00001880, 0x00000000, 0x00031013, 0x00000000, 0x00000087, 0x00012ad4, 0x00000000, 0xf135552c, 0x00012ad4, 0x0000956a, 0xfffffd74, 0x00000000, 0x600001d0 + ], }, new() { - Instructions = new ushort[] { 0xb2f7, 0x4028, 0x42dd, 0x4043, 0x422e, 0xbf5c, 0xa6cf, 0xb289, 0x06ce, 0xb229, 0x4065, 0x430d, 0x1986, 0x466b, 0x2c11, 0x0fcb, 0xba22, 0x412a, 0x40f3, 0xbf9d, 0x0cd5, 0x415a, 0x310f, 0xb07e, 0xb2da, 0xbf12, 0x3f1e, 0x3e0e, 0xb22c, 0x4414, 0xb0a3, 0x1a93, 0xbf15, 0x33ee, 0x1c22, 0x4184, 0x416b, 0x43cd, 0x4625, 0xba70, 0x438f, 0x4175, 0x4031, 0xbf53, 0x0d6a, 0x4234, 0x2c94, 0x4288, 0x4196, 0xb0ef, 0x3a5b, 0xb02b, 0xa285, 0x438c, 0x1914, 0xbfb0, 0xbf82, 0x4636, 0x4550, 0x23ad, 0x466e, 0xb04e, 0x4303, 0x4301, 0x1efc, 0xb267, 0xba31, 0x4247, 0xb01d, 0xbfa3, 0x4026, 0x11c3, 0x41fd, 0x40cc, 0x4150, 0x435d, 0xbf3f, 0xa514, 0xbfc0, 0x4293, 0x1e27, 0x42af, 0x405f, 0x3ad4, 0x40a2, 0x0423, 0x406a, 0x4236, 0xb2a5, 0x1ec3, 0x1f33, 0x29aa, 0x2865, 0x0b77, 0x2536, 0x1e74, 0x40a6, 0x43cb, 0x42e1, 0x402c, 0x4414, 0x25f3, 0x0c28, 0xbf7c, 0x0042, 0x4154, 0xbad1, 0x2d5b, 0x45c1, 0x4399, 0x3a0d, 0x41ea, 0x4398, 0xbfa0, 0xba3a, 0x41b8, 0x1f6c, 0xbf75, 0x1579, 0xb29c, 0x1d42, 0x18ce, 0x16f3, 0x44a3, 0x46b1, 0xbadc, 0x1943, 0xb2d6, 0x24b9, 0x4061, 0x2103, 0x1e64, 0x41c5, 0x41f9, 0xbf59, 0xba55, 0x40c0, 0x414f, 0xa5c1, 0x4189, 0x1f1d, 0x1afd, 0x41b6, 0xba58, 0xba3b, 0xb0b7, 0x2acf, 0x4370, 0x41e3, 0xb2d2, 0xb265, 0xb28b, 0x4133, 0xa98a, 0x403b, 0x3a58, 0x4271, 0x447e, 0x41fa, 0x40c7, 0xba58, 0x4319, 0x41e5, 0xb030, 0xbf49, 0x4074, 0xa3ca, 0xbfb0, 0x1928, 0x41a9, 0xba74, 0x4070, 0xb00f, 0x4225, 0xa687, 0x00f0, 0x406c, 0x4148, 0xbf83, 0x19c0, 0x4197, 0xb2da, 0x424c, 0xb2bc, 0xba23, 0x2e66, 0x4089, 0x28dd, 0xb2e4, 0x05cd, 0x4184, 0x05c6, 0x404d, 0xba2e, 0x0f8a, 0x4175, 0x412a, 0x44cc, 0xb0ef, 0xb042, 0xafe8, 0x420a, 0x4253, 0xbf83, 0x1b27, 0x4062, 0x424b, 0xae9c, 0xba7e, 0xb265, 0xb28a, 0x148f, 0xb2d3, 0x2e6d, 0x2efc, 0xba46, 0x40f7, 0x41fd, 0x411b, 0x4566, 0xb2b1, 0x4209, 0xb218, 0x0aeb, 0xb20d, 0x40c9, 0x226c, 0x429a, 0x22d3, 0xbfb0, 0xb286, 0x4275, 0x42a6, 0xbf96, 0x4235, 0x4222, 0x42e3, 0xb237, 0xb220, 0x4624, 0x1d89, 0xb031, 0x389e, 0x4196, 0xb0b4, 0x426e, 0x1ae5, 0x140f, 0x4398, 0x4667, 0x40e5, 0x0fe5, 0x14fe, 0x18e6, 0x44b2, 0x4285, 0x4044, 0x4233, 0x2a71, 0xb0c8, 0xb06f, 0xa688, 0xbfcb, 0x435e, 0x1af2, 0x1de1, 0x0607, 0xabf8, 0xbfc0, 0x42ef, 0x4220, 0xbf70, 0xb271, 0x3965, 0x4132, 0xab6b, 0x1665, 0xb2c5, 0x1fa6, 0x32f2, 0xb0aa, 0x41ca, 0x2064, 0x0cbe, 0x41a5, 0xbf60, 0x1fa4, 0xb02d, 0x4046, 0xa9a9, 0x41b7, 0xbf43, 0x4167, 0x0b2e, 0xa33a, 0x4202, 0xa8c2, 0x42c0, 0x425b, 0x3f6c, 0xbada, 0x1b7a, 0x40ae, 0x18c0, 0x4132, 0x407a, 0x40cb, 0xba02, 0xad3f, 0x4275, 0x4271, 0x1f2e, 0x1dec, 0xbfde, 0x4544, 0x0f82, 0x214e, 0xb284, 0x4089, 0x4334, 0x4251, 0x2dd9, 0x08e2, 0x431d, 0x4036, 0x09d7, 0x432b, 0x434c, 0xb203, 0xbf70, 0x3ce7, 0x3620, 0xbfa0, 0x155a, 0xbfb4, 0x198a, 0xb28e, 0xbf71, 0x047b, 0x1e2d, 0x42c4, 0xaa34, 0xba55, 0x4073, 0x2661, 0x4106, 0x3527, 0x1a73, 0x333f, 0x430d, 0xb26b, 0x3a6a, 0xb2f2, 0xbade, 0x42c5, 0x1d3a, 0xbf2f, 0xa17c, 0x4156, 0x4267, 0xb207, 0x4581, 0xb0f1, 0x4385, 0x1869, 0x4045, 0xb258, 0x0b70, 0x1f7d, 0xad43, 0x1f8d, 0x4235, 0xb24e, 0xb04c, 0xb0e0, 0x0d27, 0x3468, 0xbf9d, 0x189e, 0x1ccd, 0x43bc, 0x4060, 0xb2d5, 0x45bd, 0x1b74, 0x44dc, 0xbaf8, 0xab61, 0xb2d2, 0xb21c, 0x1e49, 0xafa9, 0x432a, 0x4374, 0x1b4d, 0xb24a, 0x4092, 0xb29b, 0xbf62, 0xb2d2, 0x36fc, 0x4131, 0x1d9b, 0x45f1, 0x0d6c, 0x398b, 0xb2f7, 0x424a, 0x4044, 0x03c7, 0xba2e, 0x1adb, 0x43eb, 0x40e2, 0x06a9, 0x07d8, 0x419c, 0xb291, 0xba06, 0xbf3e, 0xb28b, 0x268a, 0x41b9, 0x1119, 0x432f, 0xb29f, 0xab98, 0x4691, 0xb28e, 0x1c91, 0x128e, 0x4432, 0x435b, 0x1ae9, 0x418b, 0x05fb, 0x426f, 0xbfb2, 0x4306, 0x3ff6, 0x42f0, 0x40a1, 0x0abe, 0xba16, 0x0068, 0x4095, 0x09b3, 0x36a2, 0x4362, 0x4226, 0x407a, 0x2f81, 0xbfe2, 0x3c7d, 0x425b, 0x43f0, 0x218b, 0x3826, 0x00fc, 0x19cf, 0xb2a4, 0xba31, 0x4390, 0x43f4, 0x1d18, 0xb28e, 0xbaeb, 0x41a1, 0xbf80, 0x41e0, 0x1c8a, 0xba1e, 0x4212, 0x435d, 0x2bbc, 0xbf90, 0x432c, 0xbfae, 0x4211, 0xba70, 0x43f9, 0x42d5, 0x1ffa, 0x413d, 0xba40, 0xbfb2, 0x232a, 0x429c, 0x4490, 0x02b5, 0x4059, 0x404c, 0xba41, 0xa995, 0x415b, 0x40f7, 0x4041, 0x43e6, 0xba3b, 0xb2d7, 0x425d, 0x197f, 0x411d, 0xbf68, 0xba27, 0x1922, 0x1f2b, 0xbafe, 0x4454, 0x4310, 0x434c, 0xad88, 0x414d, 0xa4a5, 0xba15, 0xbfbc, 0x435d, 0x41ff, 0x41bc, 0x43fd, 0x1b7d, 0x3bc0, 0xb237, 0x1cf3, 0xba44, 0x4019, 0x439a, 0x4151, 0x4265, 0x406d, 0x4247, 0x2b08, 0x410e, 0x2a27, 0x42c5, 0xb2d0, 0xbf8c, 0x40d2, 0x42b5, 0xb075, 0x4324, 0x40d6, 0x431f, 0x40c8, 0x11fe, 0xa8ea, 0xbf5e, 0x4055, 0x1462, 0x091d, 0x194f, 0x0447, 0x045d, 0x4655, 0x37cb, 0xbf78, 0xba5e, 0x419f, 0x3835, 0x1c9d, 0x404a, 0x427e, 0x43c9, 0xbf60, 0x4276, 0x3259, 0x439b, 0x08a9, 0xb071, 0x4117, 0x44d3, 0xbad4, 0x42f7, 0xba45, 0x4469, 0x18e6, 0x42cd, 0x434f, 0x3f51, 0x433e, 0x45cb, 0xbf6d, 0xb268, 0x43ff, 0xbf90, 0x42c4, 0x40cc, 0x3fd6, 0x3d3e, 0x0b24, 0x40e1, 0xab12, 0xb2bf, 0xb0fc, 0xb05f, 0x43b7, 0x1dc3, 0xbf60, 0x44d8, 0xbf60, 0x43a2, 0xb2af, 0x4137, 0x41d8, 0x403e, 0x42ee, 0x32c0, 0x42a1, 0xba3b, 0x39e8, 0xbf01, 0x1a35, 0x43f6, 0x1e36, 0x4382, 0x40e2, 0xba04, 0x06a1, 0x1cc8, 0xa943, 0x4171, 0x415e, 0x4006, 0xba30, 0x411b, 0xbfc5, 0xac02, 0xb29c, 0xba4c, 0xb232, 0xba60, 0x4198, 0x42fc, 0x1a5e, 0x4269, 0xad0e, 0x0366, 0xa38a, 0x4045, 0x0a7b, 0x3899, 0x1bcc, 0xba2c, 0xb2b3, 0x45c5, 0x2575, 0x44ca, 0x4185, 0x06b8, 0x4185, 0x4018, 0xbfcd, 0x403f, 0x391d, 0xa99c, 0x17d1, 0xb280, 0xba7d, 0xba66, 0x1e75, 0x3ad1, 0x1304, 0xbfcb, 0x1e01, 0xbad0, 0x43cf, 0x4425, 0xb230, 0x43d8, 0xbae1, 0xbad7, 0x13f0, 0x42a0, 0x438c, 0x28f8, 0xb0a4, 0xb0a6, 0x196a, 0x1cc0, 0xbfc5, 0x0c99, 0x40e4, 0x1935, 0x45b4, 0xb011, 0x40ec, 0x40e9, 0x3f82, 0x42c8, 0x1aa3, 0x43be, 0x4034, 0xbf1d, 0xa56d, 0x44da, 0x19e3, 0xb2b1, 0xb2bb, 0x40e0, 0x40ef, 0x3c5d, 0x43f5, 0xb26e, 0xbfd5, 0x402f, 0x4023, 0xba3e, 0x38d4, 0xb255, 0x406d, 0x4244, 0xb06b, 0x42e1, 0xb045, 0x408a, 0x4382, 0x4102, 0x17cb, 0x4670, 0xbf21, 0xb28e, 0x4282, 0xb27c, 0x1f26, 0xb091, 0x42c9, 0x1e3a, 0xbad0, 0xbfe2, 0x1b74, 0x42a6, 0xba44, 0x42b2, 0x4291, 0xb21e, 0x404d, 0x4328, 0x4343, 0xad78, 0x42b3, 0x4169, 0x3557, 0x1b59, 0x4372, 0x403d, 0x41f5, 0xba79, 0x0e81, 0xa713, 0x2378, 0xba21, 0x4050, 0x40d7, 0xb050, 0xa3af, 0x417d, 0x4001, 0xbf95, 0xa8cc, 0x437c, 0x436e, 0x408e, 0x43aa, 0x3957, 0xb021, 0x4209, 0xb272, 0xba1e, 0x42a2, 0x4351, 0x467a, 0x13cc, 0x2db1, 0x466e, 0x4234, 0x43c0, 0xb0dc, 0x1fcc, 0xbf5e, 0x41e2, 0x17ab, 0x4173, 0x4110, 0x427b, 0x41b2, 0xa5af, 0x411e, 0xbaf2, 0xba49, 0x4197, 0x4448, 0xb068, 0x4283, 0x4354, 0xbfa0, 0x40f2, 0x1f52, 0x41d3, 0x4571, 0x1aab, 0xb2b5, 0xaa74, 0x4372, 0xbf26, 0xb2cd, 0x42e7, 0x18a8, 0x373f, 0xba7c, 0x40a7, 0x40ec, 0x1deb, 0x4380, 0xb072, 0x43b6, 0xab0a, 0xbf54, 0x42d3, 0xa8e9, 0x1d8b, 0x1f92, 0x4046, 0x1ae7, 0xafbf, 0x20de, 0x45cc, 0x189d, 0x42f4, 0x43e8, 0xb093, 0x292d, 0x412b, 0x430a, 0xbae8, 0x0ffa, 0x4080, 0x3294, 0x4665, 0x4284, 0x22c5, 0x25bf, 0xb27b, 0xbf3c, 0x3912, 0x2d61, 0xbadb, 0x44a3, 0xbf42, 0xb2a4, 0x411f, 0x1d60, 0x40f5, 0x21a9, 0x0250, 0x0a3c, 0x31e6, 0xbf77, 0x43ea, 0x1ff8, 0xbac4, 0xbac2, 0xb209, 0xbf1b, 0x43b9, 0x0791, 0x3579, 0x4447, 0xba5f, 0xbf92, 0x3c03, 0x4383, 0x4044, 0xa95a, 0xba71, 0xb229, 0x4303, 0x316a, 0x4389, 0x1ff4, 0x422e, 0xb2b3, 0x40e3, 0x4085, 0x3342, 0x42a2, 0x1d76, 0xb200, 0xae67, 0x45b2, 0xbf1d, 0xbadc, 0x27d9, 0x18e9, 0x41dd, 0x294b, 0xbf41, 0x0d48, 0x4137, 0x4015, 0x43f4, 0x317c, 0x42bf, 0x4391, 0x1774, 0x0d7f, 0x40b4, 0xba0f, 0x4111, 0xba30, 0x30fe, 0xb2b2, 0x438e, 0x4012, 0x460d, 0xbfc0, 0x2de0, 0xb2aa, 0x00da, 0x42bd, 0x4385, 0xbfa8, 0x1f7e, 0xb203, 0xb293, 0x2c9a, 0x1ea5, 0x2d34, 0x46aa, 0xb288, 0xbf7d, 0xba02, 0x2b0a, 0xb0a2, 0x43ae, 0x435c, 0x406e, 0xb09f, 0x1484, 0x416b, 0x46b3, 0x4314, 0x422f, 0xa751, 0x44e8, 0x43ae, 0xa901, 0xba66, 0x41ca, 0xbf0b, 0x43af, 0x1faf, 0x1fbf, 0xac1d, 0xac02, 0x235c, 0xbfc1, 0x4145, 0x1b22, 0x1c5c, 0x404a, 0xa600, 0x43b0, 0xbad1, 0xbf4b, 0x1b24, 0xa8e3, 0xba03, 0xaf8e, 0x295f, 0x1b40, 0x4178, 0xb205, 0x146f, 0x09ca, 0x2e3c, 0x43f7, 0x439b, 0x3295, 0x408a, 0xbf1a, 0x454f, 0x3bc1, 0xba5b, 0x4100, 0x40f2, 0x1af2, 0x1c9b, 0xa85c, 0xaf0f, 0xbfb0, 0xa8dc, 0x4218, 0x414a, 0xb205, 0xb2a2, 0x4160, 0xa22c, 0x00b4, 0x42e3, 0xba5b, 0xbf52, 0xba23, 0x40bd, 0xb01d, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xe4527cc5, 0xffa5922e, 0xca434c0d, 0x2c3146e6, 0x89b4f1a8, 0xd1d30b0d, 0x90e04460, 0x4d312bcd, 0xd0bf479f, 0x23e96a47, 0x987a7688, 0x7251199f, 0x0415194f, 0xea9d51e2, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0xea9d5adb, 0x00001257, 0x0000187c, 0x105e0000, 0x00005e10, 0x00005a7e, 0x00001784, 0xea9d574a, 0xc6274cdf, 0x00000000, 0xfffffffe, 0x8aff0005, 0x766633dc, 0xea9d570e, 0x00000000, 0x000001d0 }, + Instructions = [0xb2f7, 0x4028, 0x42dd, 0x4043, 0x422e, 0xbf5c, 0xa6cf, 0xb289, 0x06ce, 0xb229, 0x4065, 0x430d, 0x1986, 0x466b, 0x2c11, 0x0fcb, 0xba22, 0x412a, 0x40f3, 0xbf9d, 0x0cd5, 0x415a, 0x310f, 0xb07e, 0xb2da, 0xbf12, 0x3f1e, 0x3e0e, 0xb22c, 0x4414, 0xb0a3, 0x1a93, 0xbf15, 0x33ee, 0x1c22, 0x4184, 0x416b, 0x43cd, 0x4625, 0xba70, 0x438f, 0x4175, 0x4031, 0xbf53, 0x0d6a, 0x4234, 0x2c94, 0x4288, 0x4196, 0xb0ef, 0x3a5b, 0xb02b, 0xa285, 0x438c, 0x1914, 0xbfb0, 0xbf82, 0x4636, 0x4550, 0x23ad, 0x466e, 0xb04e, 0x4303, 0x4301, 0x1efc, 0xb267, 0xba31, 0x4247, 0xb01d, 0xbfa3, 0x4026, 0x11c3, 0x41fd, 0x40cc, 0x4150, 0x435d, 0xbf3f, 0xa514, 0xbfc0, 0x4293, 0x1e27, 0x42af, 0x405f, 0x3ad4, 0x40a2, 0x0423, 0x406a, 0x4236, 0xb2a5, 0x1ec3, 0x1f33, 0x29aa, 0x2865, 0x0b77, 0x2536, 0x1e74, 0x40a6, 0x43cb, 0x42e1, 0x402c, 0x4414, 0x25f3, 0x0c28, 0xbf7c, 0x0042, 0x4154, 0xbad1, 0x2d5b, 0x45c1, 0x4399, 0x3a0d, 0x41ea, 0x4398, 0xbfa0, 0xba3a, 0x41b8, 0x1f6c, 0xbf75, 0x1579, 0xb29c, 0x1d42, 0x18ce, 0x16f3, 0x44a3, 0x46b1, 0xbadc, 0x1943, 0xb2d6, 0x24b9, 0x4061, 0x2103, 0x1e64, 0x41c5, 0x41f9, 0xbf59, 0xba55, 0x40c0, 0x414f, 0xa5c1, 0x4189, 0x1f1d, 0x1afd, 0x41b6, 0xba58, 0xba3b, 0xb0b7, 0x2acf, 0x4370, 0x41e3, 0xb2d2, 0xb265, 0xb28b, 0x4133, 0xa98a, 0x403b, 0x3a58, 0x4271, 0x447e, 0x41fa, 0x40c7, 0xba58, 0x4319, 0x41e5, 0xb030, 0xbf49, 0x4074, 0xa3ca, 0xbfb0, 0x1928, 0x41a9, 0xba74, 0x4070, 0xb00f, 0x4225, 0xa687, 0x00f0, 0x406c, 0x4148, 0xbf83, 0x19c0, 0x4197, 0xb2da, 0x424c, 0xb2bc, 0xba23, 0x2e66, 0x4089, 0x28dd, 0xb2e4, 0x05cd, 0x4184, 0x05c6, 0x404d, 0xba2e, 0x0f8a, 0x4175, 0x412a, 0x44cc, 0xb0ef, 0xb042, 0xafe8, 0x420a, 0x4253, 0xbf83, 0x1b27, 0x4062, 0x424b, 0xae9c, 0xba7e, 0xb265, 0xb28a, 0x148f, 0xb2d3, 0x2e6d, 0x2efc, 0xba46, 0x40f7, 0x41fd, 0x411b, 0x4566, 0xb2b1, 0x4209, 0xb218, 0x0aeb, 0xb20d, 0x40c9, 0x226c, 0x429a, 0x22d3, 0xbfb0, 0xb286, 0x4275, 0x42a6, 0xbf96, 0x4235, 0x4222, 0x42e3, 0xb237, 0xb220, 0x4624, 0x1d89, 0xb031, 0x389e, 0x4196, 0xb0b4, 0x426e, 0x1ae5, 0x140f, 0x4398, 0x4667, 0x40e5, 0x0fe5, 0x14fe, 0x18e6, 0x44b2, 0x4285, 0x4044, 0x4233, 0x2a71, 0xb0c8, 0xb06f, 0xa688, 0xbfcb, 0x435e, 0x1af2, 0x1de1, 0x0607, 0xabf8, 0xbfc0, 0x42ef, 0x4220, 0xbf70, 0xb271, 0x3965, 0x4132, 0xab6b, 0x1665, 0xb2c5, 0x1fa6, 0x32f2, 0xb0aa, 0x41ca, 0x2064, 0x0cbe, 0x41a5, 0xbf60, 0x1fa4, 0xb02d, 0x4046, 0xa9a9, 0x41b7, 0xbf43, 0x4167, 0x0b2e, 0xa33a, 0x4202, 0xa8c2, 0x42c0, 0x425b, 0x3f6c, 0xbada, 0x1b7a, 0x40ae, 0x18c0, 0x4132, 0x407a, 0x40cb, 0xba02, 0xad3f, 0x4275, 0x4271, 0x1f2e, 0x1dec, 0xbfde, 0x4544, 0x0f82, 0x214e, 0xb284, 0x4089, 0x4334, 0x4251, 0x2dd9, 0x08e2, 0x431d, 0x4036, 0x09d7, 0x432b, 0x434c, 0xb203, 0xbf70, 0x3ce7, 0x3620, 0xbfa0, 0x155a, 0xbfb4, 0x198a, 0xb28e, 0xbf71, 0x047b, 0x1e2d, 0x42c4, 0xaa34, 0xba55, 0x4073, 0x2661, 0x4106, 0x3527, 0x1a73, 0x333f, 0x430d, 0xb26b, 0x3a6a, 0xb2f2, 0xbade, 0x42c5, 0x1d3a, 0xbf2f, 0xa17c, 0x4156, 0x4267, 0xb207, 0x4581, 0xb0f1, 0x4385, 0x1869, 0x4045, 0xb258, 0x0b70, 0x1f7d, 0xad43, 0x1f8d, 0x4235, 0xb24e, 0xb04c, 0xb0e0, 0x0d27, 0x3468, 0xbf9d, 0x189e, 0x1ccd, 0x43bc, 0x4060, 0xb2d5, 0x45bd, 0x1b74, 0x44dc, 0xbaf8, 0xab61, 0xb2d2, 0xb21c, 0x1e49, 0xafa9, 0x432a, 0x4374, 0x1b4d, 0xb24a, 0x4092, 0xb29b, 0xbf62, 0xb2d2, 0x36fc, 0x4131, 0x1d9b, 0x45f1, 0x0d6c, 0x398b, 0xb2f7, 0x424a, 0x4044, 0x03c7, 0xba2e, 0x1adb, 0x43eb, 0x40e2, 0x06a9, 0x07d8, 0x419c, 0xb291, 0xba06, 0xbf3e, 0xb28b, 0x268a, 0x41b9, 0x1119, 0x432f, 0xb29f, 0xab98, 0x4691, 0xb28e, 0x1c91, 0x128e, 0x4432, 0x435b, 0x1ae9, 0x418b, 0x05fb, 0x426f, 0xbfb2, 0x4306, 0x3ff6, 0x42f0, 0x40a1, 0x0abe, 0xba16, 0x0068, 0x4095, 0x09b3, 0x36a2, 0x4362, 0x4226, 0x407a, 0x2f81, 0xbfe2, 0x3c7d, 0x425b, 0x43f0, 0x218b, 0x3826, 0x00fc, 0x19cf, 0xb2a4, 0xba31, 0x4390, 0x43f4, 0x1d18, 0xb28e, 0xbaeb, 0x41a1, 0xbf80, 0x41e0, 0x1c8a, 0xba1e, 0x4212, 0x435d, 0x2bbc, 0xbf90, 0x432c, 0xbfae, 0x4211, 0xba70, 0x43f9, 0x42d5, 0x1ffa, 0x413d, 0xba40, 0xbfb2, 0x232a, 0x429c, 0x4490, 0x02b5, 0x4059, 0x404c, 0xba41, 0xa995, 0x415b, 0x40f7, 0x4041, 0x43e6, 0xba3b, 0xb2d7, 0x425d, 0x197f, 0x411d, 0xbf68, 0xba27, 0x1922, 0x1f2b, 0xbafe, 0x4454, 0x4310, 0x434c, 0xad88, 0x414d, 0xa4a5, 0xba15, 0xbfbc, 0x435d, 0x41ff, 0x41bc, 0x43fd, 0x1b7d, 0x3bc0, 0xb237, 0x1cf3, 0xba44, 0x4019, 0x439a, 0x4151, 0x4265, 0x406d, 0x4247, 0x2b08, 0x410e, 0x2a27, 0x42c5, 0xb2d0, 0xbf8c, 0x40d2, 0x42b5, 0xb075, 0x4324, 0x40d6, 0x431f, 0x40c8, 0x11fe, 0xa8ea, 0xbf5e, 0x4055, 0x1462, 0x091d, 0x194f, 0x0447, 0x045d, 0x4655, 0x37cb, 0xbf78, 0xba5e, 0x419f, 0x3835, 0x1c9d, 0x404a, 0x427e, 0x43c9, 0xbf60, 0x4276, 0x3259, 0x439b, 0x08a9, 0xb071, 0x4117, 0x44d3, 0xbad4, 0x42f7, 0xba45, 0x4469, 0x18e6, 0x42cd, 0x434f, 0x3f51, 0x433e, 0x45cb, 0xbf6d, 0xb268, 0x43ff, 0xbf90, 0x42c4, 0x40cc, 0x3fd6, 0x3d3e, 0x0b24, 0x40e1, 0xab12, 0xb2bf, 0xb0fc, 0xb05f, 0x43b7, 0x1dc3, 0xbf60, 0x44d8, 0xbf60, 0x43a2, 0xb2af, 0x4137, 0x41d8, 0x403e, 0x42ee, 0x32c0, 0x42a1, 0xba3b, 0x39e8, 0xbf01, 0x1a35, 0x43f6, 0x1e36, 0x4382, 0x40e2, 0xba04, 0x06a1, 0x1cc8, 0xa943, 0x4171, 0x415e, 0x4006, 0xba30, 0x411b, 0xbfc5, 0xac02, 0xb29c, 0xba4c, 0xb232, 0xba60, 0x4198, 0x42fc, 0x1a5e, 0x4269, 0xad0e, 0x0366, 0xa38a, 0x4045, 0x0a7b, 0x3899, 0x1bcc, 0xba2c, 0xb2b3, 0x45c5, 0x2575, 0x44ca, 0x4185, 0x06b8, 0x4185, 0x4018, 0xbfcd, 0x403f, 0x391d, 0xa99c, 0x17d1, 0xb280, 0xba7d, 0xba66, 0x1e75, 0x3ad1, 0x1304, 0xbfcb, 0x1e01, 0xbad0, 0x43cf, 0x4425, 0xb230, 0x43d8, 0xbae1, 0xbad7, 0x13f0, 0x42a0, 0x438c, 0x28f8, 0xb0a4, 0xb0a6, 0x196a, 0x1cc0, 0xbfc5, 0x0c99, 0x40e4, 0x1935, 0x45b4, 0xb011, 0x40ec, 0x40e9, 0x3f82, 0x42c8, 0x1aa3, 0x43be, 0x4034, 0xbf1d, 0xa56d, 0x44da, 0x19e3, 0xb2b1, 0xb2bb, 0x40e0, 0x40ef, 0x3c5d, 0x43f5, 0xb26e, 0xbfd5, 0x402f, 0x4023, 0xba3e, 0x38d4, 0xb255, 0x406d, 0x4244, 0xb06b, 0x42e1, 0xb045, 0x408a, 0x4382, 0x4102, 0x17cb, 0x4670, 0xbf21, 0xb28e, 0x4282, 0xb27c, 0x1f26, 0xb091, 0x42c9, 0x1e3a, 0xbad0, 0xbfe2, 0x1b74, 0x42a6, 0xba44, 0x42b2, 0x4291, 0xb21e, 0x404d, 0x4328, 0x4343, 0xad78, 0x42b3, 0x4169, 0x3557, 0x1b59, 0x4372, 0x403d, 0x41f5, 0xba79, 0x0e81, 0xa713, 0x2378, 0xba21, 0x4050, 0x40d7, 0xb050, 0xa3af, 0x417d, 0x4001, 0xbf95, 0xa8cc, 0x437c, 0x436e, 0x408e, 0x43aa, 0x3957, 0xb021, 0x4209, 0xb272, 0xba1e, 0x42a2, 0x4351, 0x467a, 0x13cc, 0x2db1, 0x466e, 0x4234, 0x43c0, 0xb0dc, 0x1fcc, 0xbf5e, 0x41e2, 0x17ab, 0x4173, 0x4110, 0x427b, 0x41b2, 0xa5af, 0x411e, 0xbaf2, 0xba49, 0x4197, 0x4448, 0xb068, 0x4283, 0x4354, 0xbfa0, 0x40f2, 0x1f52, 0x41d3, 0x4571, 0x1aab, 0xb2b5, 0xaa74, 0x4372, 0xbf26, 0xb2cd, 0x42e7, 0x18a8, 0x373f, 0xba7c, 0x40a7, 0x40ec, 0x1deb, 0x4380, 0xb072, 0x43b6, 0xab0a, 0xbf54, 0x42d3, 0xa8e9, 0x1d8b, 0x1f92, 0x4046, 0x1ae7, 0xafbf, 0x20de, 0x45cc, 0x189d, 0x42f4, 0x43e8, 0xb093, 0x292d, 0x412b, 0x430a, 0xbae8, 0x0ffa, 0x4080, 0x3294, 0x4665, 0x4284, 0x22c5, 0x25bf, 0xb27b, 0xbf3c, 0x3912, 0x2d61, 0xbadb, 0x44a3, 0xbf42, 0xb2a4, 0x411f, 0x1d60, 0x40f5, 0x21a9, 0x0250, 0x0a3c, 0x31e6, 0xbf77, 0x43ea, 0x1ff8, 0xbac4, 0xbac2, 0xb209, 0xbf1b, 0x43b9, 0x0791, 0x3579, 0x4447, 0xba5f, 0xbf92, 0x3c03, 0x4383, 0x4044, 0xa95a, 0xba71, 0xb229, 0x4303, 0x316a, 0x4389, 0x1ff4, 0x422e, 0xb2b3, 0x40e3, 0x4085, 0x3342, 0x42a2, 0x1d76, 0xb200, 0xae67, 0x45b2, 0xbf1d, 0xbadc, 0x27d9, 0x18e9, 0x41dd, 0x294b, 0xbf41, 0x0d48, 0x4137, 0x4015, 0x43f4, 0x317c, 0x42bf, 0x4391, 0x1774, 0x0d7f, 0x40b4, 0xba0f, 0x4111, 0xba30, 0x30fe, 0xb2b2, 0x438e, 0x4012, 0x460d, 0xbfc0, 0x2de0, 0xb2aa, 0x00da, 0x42bd, 0x4385, 0xbfa8, 0x1f7e, 0xb203, 0xb293, 0x2c9a, 0x1ea5, 0x2d34, 0x46aa, 0xb288, 0xbf7d, 0xba02, 0x2b0a, 0xb0a2, 0x43ae, 0x435c, 0x406e, 0xb09f, 0x1484, 0x416b, 0x46b3, 0x4314, 0x422f, 0xa751, 0x44e8, 0x43ae, 0xa901, 0xba66, 0x41ca, 0xbf0b, 0x43af, 0x1faf, 0x1fbf, 0xac1d, 0xac02, 0x235c, 0xbfc1, 0x4145, 0x1b22, 0x1c5c, 0x404a, 0xa600, 0x43b0, 0xbad1, 0xbf4b, 0x1b24, 0xa8e3, 0xba03, 0xaf8e, 0x295f, 0x1b40, 0x4178, 0xb205, 0x146f, 0x09ca, 0x2e3c, 0x43f7, 0x439b, 0x3295, 0x408a, 0xbf1a, 0x454f, 0x3bc1, 0xba5b, 0x4100, 0x40f2, 0x1af2, 0x1c9b, 0xa85c, 0xaf0f, 0xbfb0, 0xa8dc, 0x4218, 0x414a, 0xb205, 0xb2a2, 0x4160, 0xa22c, 0x00b4, 0x42e3, 0xba5b, 0xbf52, 0xba23, 0x40bd, 0xb01d, 0x4770, 0xe7fe + ], + StartRegs = [0xe4527cc5, 0xffa5922e, 0xca434c0d, 0x2c3146e6, 0x89b4f1a8, 0xd1d30b0d, 0x90e04460, 0x4d312bcd, 0xd0bf479f, 0x23e96a47, 0x987a7688, 0x7251199f, 0x0415194f, 0xea9d51e2, 0x00000000, 0x100001f0 + ], + FinalRegs = [0xea9d5adb, 0x00001257, 0x0000187c, 0x105e0000, 0x00005e10, 0x00005a7e, 0x00001784, 0xea9d574a, 0xc6274cdf, 0x00000000, 0xfffffffe, 0x8aff0005, 0x766633dc, 0xea9d570e, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x4166, 0xba66, 0x4108, 0x43d1, 0x2c5e, 0xb2fb, 0x4067, 0xafc6, 0x1915, 0x25ef, 0xaadd, 0xb016, 0xbac4, 0xba6e, 0x4415, 0x455e, 0xba35, 0xbf09, 0x4108, 0x0586, 0x42f9, 0x41e2, 0x15df, 0x279d, 0x18cb, 0x3d65, 0x40cd, 0xb0fe, 0x430b, 0xb006, 0x40a5, 0xb21d, 0x409f, 0xa0e2, 0xbf8f, 0x4328, 0x4444, 0xbf70, 0xb2be, 0x40b1, 0xb294, 0x4068, 0x414b, 0x13ae, 0x41e2, 0xb21d, 0x43ce, 0xba3d, 0xb26b, 0x1830, 0xb2b0, 0x440c, 0x29fa, 0x4290, 0xba40, 0x37eb, 0x43db, 0x422c, 0x4337, 0x30cc, 0x41cc, 0x4309, 0xb2f7, 0x401d, 0xbf1a, 0x4322, 0x43b8, 0x41b3, 0x33c5, 0x29e3, 0x0c91, 0x4240, 0x419f, 0xbf31, 0x4059, 0x407f, 0xa4cc, 0x179f, 0x42a2, 0xb28b, 0x413f, 0x40b7, 0xb276, 0x42f8, 0x416c, 0xba03, 0x287a, 0xbfa0, 0x3811, 0x4374, 0x44fd, 0x4147, 0x1d8b, 0x2828, 0x13cb, 0x4166, 0x45e0, 0xb206, 0x184e, 0x414d, 0xbfb9, 0xba1c, 0x40c7, 0x41fb, 0x41f5, 0x433c, 0x400e, 0x42da, 0x43a5, 0x1c04, 0x4202, 0x1c75, 0xb20a, 0x41d0, 0x405a, 0xba78, 0x3bb3, 0xbf19, 0xba6a, 0xb223, 0x35a6, 0x40a4, 0x0707, 0xbf61, 0xb2ac, 0x443e, 0x408c, 0x421c, 0x4128, 0x1975, 0xa7e9, 0x09d5, 0x1ffb, 0xb25d, 0x448a, 0x41e9, 0xaf03, 0x1ea5, 0x40bd, 0xb25f, 0x13f0, 0x4639, 0xba67, 0x404e, 0x1701, 0x423f, 0x3cf4, 0x1f10, 0x431e, 0xbfb6, 0xba7c, 0xb2b0, 0x1f0e, 0xba3e, 0x37c8, 0xba46, 0xba74, 0xba30, 0x41b1, 0x4291, 0x40ad, 0xb0ae, 0x4268, 0xb0a1, 0xba4e, 0x0d33, 0x3511, 0x03b1, 0x4383, 0xbf2e, 0x1a28, 0x43ce, 0x0d7a, 0x40e1, 0x4078, 0x13ce, 0xba1b, 0xb0fe, 0x2b59, 0x402c, 0xbfb6, 0xb288, 0xb25a, 0x41ee, 0x4343, 0x1c53, 0xb21d, 0x41af, 0xb2b4, 0x423d, 0xad88, 0x43cd, 0x4382, 0x40fd, 0x1376, 0x3a63, 0x4162, 0x4091, 0xb2fc, 0x43f8, 0x4247, 0x43b5, 0x4622, 0x41da, 0x1e63, 0x40e3, 0x435f, 0x4630, 0xbfd1, 0x19a2, 0x4237, 0x433c, 0x42eb, 0x3f17, 0xbf6a, 0xbacb, 0x4340, 0xb236, 0xbace, 0x43a4, 0xb20b, 0x1f3a, 0x393d, 0x42a8, 0x22da, 0x1b3d, 0x1884, 0x33e2, 0xa02b, 0xb087, 0x2942, 0xb038, 0xbad6, 0x4055, 0x418a, 0x4373, 0x411b, 0x4382, 0x4041, 0x41cf, 0x42fe, 0xbf79, 0x43bf, 0x1c07, 0xbac0, 0xb263, 0xba01, 0x429b, 0x0774, 0xb011, 0x4135, 0x42b9, 0xbf72, 0x4466, 0xbf60, 0x422b, 0x3aea, 0xbf1f, 0x1986, 0xb2f1, 0xa844, 0x41f7, 0xb029, 0x4319, 0x3b38, 0x4017, 0xbf34, 0x1bd1, 0xbfc0, 0x4014, 0x4304, 0xb2e2, 0x1824, 0xb28b, 0x430b, 0xa850, 0x2fdd, 0x1eb3, 0x46f2, 0x1974, 0x428c, 0x43c9, 0x42f1, 0xbf6a, 0x1d2a, 0x1f8c, 0x41ef, 0x440e, 0x4440, 0x40e9, 0x43a1, 0xaa22, 0x15b9, 0xbf25, 0xb2b8, 0x43f6, 0x40a6, 0x42f1, 0xb28a, 0xb23f, 0x4350, 0x418d, 0x42ea, 0xae84, 0xb062, 0xb297, 0x405c, 0x4132, 0x1943, 0x43da, 0xb012, 0x1d91, 0x3514, 0xbf6a, 0x4202, 0x00f2, 0x4243, 0xafb2, 0x414f, 0xbf11, 0x42aa, 0x40bd, 0x416f, 0x4196, 0xb061, 0x4119, 0x1225, 0x439e, 0x0de1, 0x2cc9, 0x1cdd, 0x3081, 0x431b, 0xb21e, 0x1e40, 0x3105, 0xbf98, 0xb0b5, 0xba65, 0xb2e7, 0x42d3, 0x0bab, 0x1fc2, 0xb0ca, 0x436f, 0xb296, 0x330d, 0x4078, 0xb25d, 0x4285, 0x3335, 0x2608, 0x34e2, 0x411d, 0x38b9, 0x1ab8, 0x023f, 0x10e9, 0x095b, 0x41d9, 0xbf60, 0xbf61, 0x4363, 0x1d56, 0x4658, 0x43f8, 0x41ac, 0x3b35, 0x4203, 0x204d, 0xbfb0, 0x4609, 0x413a, 0x4029, 0xba79, 0xba33, 0x456d, 0xb278, 0xa065, 0x40d8, 0x1c95, 0xb0ee, 0xb20f, 0xbf82, 0x404e, 0x4102, 0x4005, 0xafb3, 0x43ae, 0x1adb, 0x1ef9, 0x04e7, 0xb2b1, 0xbf90, 0x3eae, 0x44d4, 0x10e7, 0xbfaf, 0x42b4, 0x41b9, 0x4661, 0xb0ba, 0xbaf0, 0x4310, 0xba07, 0xadfc, 0x370b, 0x4078, 0xa86c, 0x43bf, 0x46a9, 0xb2c3, 0x438a, 0x0e58, 0x2d29, 0xb2c2, 0x0d85, 0x2025, 0x43be, 0xbf95, 0x43e2, 0x0190, 0xb03b, 0x43af, 0xba48, 0xbf60, 0x280a, 0x45c0, 0xb225, 0xbac3, 0x4171, 0x4286, 0x27a7, 0x4084, 0x1b18, 0x3e85, 0x1d9e, 0x222f, 0x2477, 0x1cd9, 0xba7e, 0xbfd1, 0x0c6e, 0x419b, 0xb284, 0x466c, 0x4076, 0x427f, 0x4657, 0x415f, 0x1d87, 0x0221, 0x346e, 0x4217, 0xbadb, 0x41f4, 0x41e9, 0xbac1, 0x42b2, 0x4177, 0x4118, 0x4128, 0x3828, 0x04a2, 0xbac4, 0xba30, 0xb0f2, 0xbf8a, 0xa678, 0x18bf, 0xb0ad, 0x40dd, 0x416e, 0x43d7, 0x44b9, 0xa0fd, 0x434b, 0xb097, 0x1f28, 0x4320, 0xb00e, 0x4377, 0x1187, 0xba24, 0x4160, 0xb027, 0xb20e, 0x43aa, 0x43cf, 0xbfd4, 0x39e1, 0x1d32, 0x40f2, 0x404a, 0xba4f, 0x00ca, 0xbaee, 0x426d, 0xb2f1, 0x16fd, 0x3012, 0x415e, 0x412c, 0x4221, 0xbf62, 0x1eaf, 0xab08, 0x40b8, 0x0851, 0x3a0d, 0x0010, 0xa39c, 0x0bbb, 0x438e, 0x115e, 0x2965, 0x43c4, 0x448a, 0x447b, 0x4389, 0x42a7, 0xba70, 0x46a5, 0x437f, 0x1a53, 0xb2d0, 0xb2b4, 0x417a, 0xb20f, 0x3ddf, 0x4213, 0xbf03, 0x419b, 0xb229, 0x1cc5, 0x42d9, 0x4307, 0xb0b0, 0x424e, 0xb0c5, 0x2b34, 0x430e, 0x42a2, 0x409c, 0x41eb, 0x4143, 0x4092, 0xbfab, 0x419d, 0x4370, 0x173a, 0xbac9, 0x44ba, 0xba24, 0x4292, 0xbf83, 0x10f4, 0x1352, 0x435f, 0x430a, 0x4113, 0x4556, 0xba04, 0x43b0, 0x43cc, 0x3369, 0xb0c6, 0x43ca, 0x42e2, 0xbf43, 0xb04a, 0xb0cf, 0xb2c0, 0xbff0, 0x436f, 0x40e7, 0xbf72, 0x1cda, 0xba12, 0xb2b6, 0x1294, 0xb083, 0x44f3, 0xbf4a, 0x4379, 0x4206, 0x4168, 0x18aa, 0x43b3, 0xb2d4, 0x442d, 0x4363, 0x4219, 0x3fba, 0xb2f9, 0x4226, 0xbff0, 0xb050, 0x1882, 0x4143, 0x4602, 0x3889, 0x19a3, 0xbf35, 0x4110, 0x429e, 0xb2dd, 0x4087, 0xba4b, 0x4303, 0x415b, 0xb031, 0xb003, 0x4062, 0x1aa9, 0x4066, 0x1ca6, 0xbf80, 0x1970, 0x0840, 0xa6a7, 0xaf8d, 0x40ea, 0x2ad2, 0xb2b7, 0x41aa, 0xbae6, 0x393e, 0x4264, 0x40ae, 0xbaf7, 0xbf6d, 0xb244, 0xba21, 0xba7b, 0x23d2, 0x400a, 0x4059, 0xba4d, 0x1505, 0x1d64, 0x42b9, 0x4197, 0x41f8, 0x4437, 0x41ac, 0x0a56, 0x1d3d, 0x4555, 0xbf8f, 0x4319, 0xbade, 0xba6e, 0x03a1, 0xb2b4, 0x40ac, 0xa7c5, 0xbf14, 0xac04, 0x221e, 0x4246, 0xb2d9, 0x4020, 0xba06, 0xbff0, 0x40d0, 0x2539, 0xba4f, 0x4283, 0x43b5, 0x42f1, 0x43a9, 0xb215, 0xba78, 0x4353, 0xb2ad, 0x0eb2, 0x40b9, 0x05f6, 0x1b03, 0x037a, 0x1922, 0x1d2d, 0x4218, 0xbf42, 0x2674, 0x44fd, 0x41e2, 0xba4d, 0x43f9, 0x10d1, 0x4121, 0x4309, 0xb25a, 0xba68, 0xb2d2, 0x402c, 0x27fb, 0x4143, 0xba48, 0xbfc6, 0x42cd, 0x438f, 0xb23a, 0x253a, 0x19ff, 0x40ed, 0x429a, 0x03f5, 0x412e, 0xba52, 0x43e5, 0xb2bf, 0x1bae, 0x43a5, 0x4389, 0x4253, 0x1bc9, 0xbf8c, 0xb20d, 0xb2be, 0x43ea, 0xa6fd, 0x3b1d, 0x40ad, 0x43d6, 0x43fd, 0x448a, 0x17ff, 0x430b, 0x41e0, 0xba42, 0xbf57, 0xaf35, 0x423c, 0x40b0, 0x43f4, 0xb245, 0x1a09, 0x04e0, 0x398e, 0x4049, 0x4389, 0x43b2, 0xbf00, 0xb0b9, 0x1f41, 0x41a5, 0x4143, 0x403e, 0xa712, 0xab59, 0xbac2, 0x422b, 0x21e4, 0xbfdd, 0xb273, 0x2b57, 0xa6e7, 0xa357, 0xa329, 0x427e, 0xb29d, 0x0b10, 0xbae1, 0xa29b, 0x2e57, 0x41dd, 0x43b3, 0xb2ff, 0xb201, 0xa480, 0x111a, 0x434f, 0x3828, 0x0c1e, 0x40bd, 0x1ddc, 0x4120, 0xbf90, 0x1f65, 0x4387, 0x4307, 0x4235, 0xbf87, 0xbff0, 0x41c6, 0x36e9, 0x4120, 0x40ca, 0x4383, 0xb211, 0x41f5, 0x4309, 0xbfd5, 0x4332, 0xb23a, 0x4227, 0x4358, 0x2229, 0x41a0, 0xb09b, 0x4162, 0x00af, 0x4017, 0xb270, 0xbf60, 0x4289, 0xba44, 0x415f, 0x3745, 0x1d25, 0xb24f, 0x415b, 0x1dde, 0x41d5, 0x421d, 0x4061, 0xb23d, 0xb0e1, 0xb231, 0xbfce, 0x4479, 0x18ae, 0x429b, 0x3aa6, 0xb031, 0xbf08, 0x4173, 0x4025, 0xbf01, 0xbf80, 0x429a, 0xa140, 0x4241, 0x4004, 0xbaf0, 0x1950, 0xbf00, 0x4069, 0xbf90, 0x42f8, 0x4149, 0x4352, 0x40ee, 0x1a2e, 0x1888, 0x2be6, 0xa75e, 0xb040, 0x42ed, 0x4158, 0xbf7a, 0x45aa, 0x0e95, 0x1014, 0x0d0c, 0x22e9, 0x1dc7, 0xbfa0, 0xb092, 0xbfb0, 0x41c7, 0x0377, 0xb2c9, 0x4260, 0x4371, 0x1ba6, 0x4273, 0x426c, 0x1a58, 0x1e6b, 0x0f52, 0x1c50, 0x3528, 0x4157, 0x4296, 0xbf43, 0x345e, 0x40f5, 0x429c, 0x42bc, 0x4312, 0xa05d, 0x1ea4, 0x40e2, 0xbf92, 0x38a7, 0x43b2, 0xbfb0, 0x1d58, 0xba54, 0xb256, 0xb255, 0x442e, 0x4293, 0xba67, 0x1804, 0xb27c, 0x425a, 0x4173, 0xba62, 0x4221, 0x41c7, 0x3475, 0xbfb8, 0x4002, 0xb0b4, 0x412c, 0x4589, 0xa77d, 0xb020, 0xbaff, 0xa2d3, 0x4344, 0xb205, 0x46b8, 0x1801, 0x1ee2, 0x4131, 0x43ef, 0x408a, 0x1107, 0x4168, 0xbf41, 0xb20c, 0x432c, 0x2c41, 0x3ee4, 0xa926, 0x40aa, 0xb0b8, 0x3a6f, 0x469a, 0x4379, 0xbf7c, 0x1f14, 0xb2c5, 0xb2bb, 0x1c36, 0xb265, 0xba1d, 0x41af, 0x374d, 0xb28e, 0x42b4, 0xbae7, 0x4258, 0x40f9, 0xa16f, 0xae72, 0x1f30, 0xbad1, 0x1e7c, 0x4319, 0xbfd9, 0xbae6, 0xb0d2, 0xb28f, 0xb29e, 0xb03f, 0x41eb, 0x416e, 0x4095, 0x3136, 0xa0cf, 0x1dd8, 0x40e6, 0x06b2, 0xb2a3, 0x0458, 0xb036, 0x435d, 0x43f2, 0x43b0, 0x315c, 0xba07, 0xb0ba, 0x439a, 0xb21d, 0x1079, 0xba14, 0xbf22, 0x433f, 0x40cd, 0xbfe0, 0xa72f, 0xbac2, 0x4134, 0xb0ed, 0xbfda, 0xb2d7, 0x41e2, 0xba61, 0x1b57, 0x406a, 0x4217, 0x4064, 0xba66, 0x3ffd, 0x41b3, 0x343a, 0xb233, 0xbfd3, 0x4111, 0x4213, 0x4093, 0x40c3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x6a1fb324, 0x37d1732c, 0x1194c5d3, 0x5a48240b, 0xf3985d54, 0xf7ed5c2f, 0xf3b4ec29, 0x13619425, 0x3b477912, 0x36e07690, 0x5d185c63, 0x32e603e4, 0xdff550bc, 0xbcb83fd1, 0x00000000, 0x300001f0 }, - FinalRegs = new uint[] { 0x1a1c0000, 0x00000e0d, 0xffff8d0e, 0x00000000, 0x0000003a, 0xffff8d0e, 0x00000000, 0x000071f5, 0x00001419, 0x868c5020, 0xffffffff, 0x32e603e4, 0xdff550bc, 0x000217f8, 0x00000000, 0x400001d0 }, + Instructions = [0x4166, 0xba66, 0x4108, 0x43d1, 0x2c5e, 0xb2fb, 0x4067, 0xafc6, 0x1915, 0x25ef, 0xaadd, 0xb016, 0xbac4, 0xba6e, 0x4415, 0x455e, 0xba35, 0xbf09, 0x4108, 0x0586, 0x42f9, 0x41e2, 0x15df, 0x279d, 0x18cb, 0x3d65, 0x40cd, 0xb0fe, 0x430b, 0xb006, 0x40a5, 0xb21d, 0x409f, 0xa0e2, 0xbf8f, 0x4328, 0x4444, 0xbf70, 0xb2be, 0x40b1, 0xb294, 0x4068, 0x414b, 0x13ae, 0x41e2, 0xb21d, 0x43ce, 0xba3d, 0xb26b, 0x1830, 0xb2b0, 0x440c, 0x29fa, 0x4290, 0xba40, 0x37eb, 0x43db, 0x422c, 0x4337, 0x30cc, 0x41cc, 0x4309, 0xb2f7, 0x401d, 0xbf1a, 0x4322, 0x43b8, 0x41b3, 0x33c5, 0x29e3, 0x0c91, 0x4240, 0x419f, 0xbf31, 0x4059, 0x407f, 0xa4cc, 0x179f, 0x42a2, 0xb28b, 0x413f, 0x40b7, 0xb276, 0x42f8, 0x416c, 0xba03, 0x287a, 0xbfa0, 0x3811, 0x4374, 0x44fd, 0x4147, 0x1d8b, 0x2828, 0x13cb, 0x4166, 0x45e0, 0xb206, 0x184e, 0x414d, 0xbfb9, 0xba1c, 0x40c7, 0x41fb, 0x41f5, 0x433c, 0x400e, 0x42da, 0x43a5, 0x1c04, 0x4202, 0x1c75, 0xb20a, 0x41d0, 0x405a, 0xba78, 0x3bb3, 0xbf19, 0xba6a, 0xb223, 0x35a6, 0x40a4, 0x0707, 0xbf61, 0xb2ac, 0x443e, 0x408c, 0x421c, 0x4128, 0x1975, 0xa7e9, 0x09d5, 0x1ffb, 0xb25d, 0x448a, 0x41e9, 0xaf03, 0x1ea5, 0x40bd, 0xb25f, 0x13f0, 0x4639, 0xba67, 0x404e, 0x1701, 0x423f, 0x3cf4, 0x1f10, 0x431e, 0xbfb6, 0xba7c, 0xb2b0, 0x1f0e, 0xba3e, 0x37c8, 0xba46, 0xba74, 0xba30, 0x41b1, 0x4291, 0x40ad, 0xb0ae, 0x4268, 0xb0a1, 0xba4e, 0x0d33, 0x3511, 0x03b1, 0x4383, 0xbf2e, 0x1a28, 0x43ce, 0x0d7a, 0x40e1, 0x4078, 0x13ce, 0xba1b, 0xb0fe, 0x2b59, 0x402c, 0xbfb6, 0xb288, 0xb25a, 0x41ee, 0x4343, 0x1c53, 0xb21d, 0x41af, 0xb2b4, 0x423d, 0xad88, 0x43cd, 0x4382, 0x40fd, 0x1376, 0x3a63, 0x4162, 0x4091, 0xb2fc, 0x43f8, 0x4247, 0x43b5, 0x4622, 0x41da, 0x1e63, 0x40e3, 0x435f, 0x4630, 0xbfd1, 0x19a2, 0x4237, 0x433c, 0x42eb, 0x3f17, 0xbf6a, 0xbacb, 0x4340, 0xb236, 0xbace, 0x43a4, 0xb20b, 0x1f3a, 0x393d, 0x42a8, 0x22da, 0x1b3d, 0x1884, 0x33e2, 0xa02b, 0xb087, 0x2942, 0xb038, 0xbad6, 0x4055, 0x418a, 0x4373, 0x411b, 0x4382, 0x4041, 0x41cf, 0x42fe, 0xbf79, 0x43bf, 0x1c07, 0xbac0, 0xb263, 0xba01, 0x429b, 0x0774, 0xb011, 0x4135, 0x42b9, 0xbf72, 0x4466, 0xbf60, 0x422b, 0x3aea, 0xbf1f, 0x1986, 0xb2f1, 0xa844, 0x41f7, 0xb029, 0x4319, 0x3b38, 0x4017, 0xbf34, 0x1bd1, 0xbfc0, 0x4014, 0x4304, 0xb2e2, 0x1824, 0xb28b, 0x430b, 0xa850, 0x2fdd, 0x1eb3, 0x46f2, 0x1974, 0x428c, 0x43c9, 0x42f1, 0xbf6a, 0x1d2a, 0x1f8c, 0x41ef, 0x440e, 0x4440, 0x40e9, 0x43a1, 0xaa22, 0x15b9, 0xbf25, 0xb2b8, 0x43f6, 0x40a6, 0x42f1, 0xb28a, 0xb23f, 0x4350, 0x418d, 0x42ea, 0xae84, 0xb062, 0xb297, 0x405c, 0x4132, 0x1943, 0x43da, 0xb012, 0x1d91, 0x3514, 0xbf6a, 0x4202, 0x00f2, 0x4243, 0xafb2, 0x414f, 0xbf11, 0x42aa, 0x40bd, 0x416f, 0x4196, 0xb061, 0x4119, 0x1225, 0x439e, 0x0de1, 0x2cc9, 0x1cdd, 0x3081, 0x431b, 0xb21e, 0x1e40, 0x3105, 0xbf98, 0xb0b5, 0xba65, 0xb2e7, 0x42d3, 0x0bab, 0x1fc2, 0xb0ca, 0x436f, 0xb296, 0x330d, 0x4078, 0xb25d, 0x4285, 0x3335, 0x2608, 0x34e2, 0x411d, 0x38b9, 0x1ab8, 0x023f, 0x10e9, 0x095b, 0x41d9, 0xbf60, 0xbf61, 0x4363, 0x1d56, 0x4658, 0x43f8, 0x41ac, 0x3b35, 0x4203, 0x204d, 0xbfb0, 0x4609, 0x413a, 0x4029, 0xba79, 0xba33, 0x456d, 0xb278, 0xa065, 0x40d8, 0x1c95, 0xb0ee, 0xb20f, 0xbf82, 0x404e, 0x4102, 0x4005, 0xafb3, 0x43ae, 0x1adb, 0x1ef9, 0x04e7, 0xb2b1, 0xbf90, 0x3eae, 0x44d4, 0x10e7, 0xbfaf, 0x42b4, 0x41b9, 0x4661, 0xb0ba, 0xbaf0, 0x4310, 0xba07, 0xadfc, 0x370b, 0x4078, 0xa86c, 0x43bf, 0x46a9, 0xb2c3, 0x438a, 0x0e58, 0x2d29, 0xb2c2, 0x0d85, 0x2025, 0x43be, 0xbf95, 0x43e2, 0x0190, 0xb03b, 0x43af, 0xba48, 0xbf60, 0x280a, 0x45c0, 0xb225, 0xbac3, 0x4171, 0x4286, 0x27a7, 0x4084, 0x1b18, 0x3e85, 0x1d9e, 0x222f, 0x2477, 0x1cd9, 0xba7e, 0xbfd1, 0x0c6e, 0x419b, 0xb284, 0x466c, 0x4076, 0x427f, 0x4657, 0x415f, 0x1d87, 0x0221, 0x346e, 0x4217, 0xbadb, 0x41f4, 0x41e9, 0xbac1, 0x42b2, 0x4177, 0x4118, 0x4128, 0x3828, 0x04a2, 0xbac4, 0xba30, 0xb0f2, 0xbf8a, 0xa678, 0x18bf, 0xb0ad, 0x40dd, 0x416e, 0x43d7, 0x44b9, 0xa0fd, 0x434b, 0xb097, 0x1f28, 0x4320, 0xb00e, 0x4377, 0x1187, 0xba24, 0x4160, 0xb027, 0xb20e, 0x43aa, 0x43cf, 0xbfd4, 0x39e1, 0x1d32, 0x40f2, 0x404a, 0xba4f, 0x00ca, 0xbaee, 0x426d, 0xb2f1, 0x16fd, 0x3012, 0x415e, 0x412c, 0x4221, 0xbf62, 0x1eaf, 0xab08, 0x40b8, 0x0851, 0x3a0d, 0x0010, 0xa39c, 0x0bbb, 0x438e, 0x115e, 0x2965, 0x43c4, 0x448a, 0x447b, 0x4389, 0x42a7, 0xba70, 0x46a5, 0x437f, 0x1a53, 0xb2d0, 0xb2b4, 0x417a, 0xb20f, 0x3ddf, 0x4213, 0xbf03, 0x419b, 0xb229, 0x1cc5, 0x42d9, 0x4307, 0xb0b0, 0x424e, 0xb0c5, 0x2b34, 0x430e, 0x42a2, 0x409c, 0x41eb, 0x4143, 0x4092, 0xbfab, 0x419d, 0x4370, 0x173a, 0xbac9, 0x44ba, 0xba24, 0x4292, 0xbf83, 0x10f4, 0x1352, 0x435f, 0x430a, 0x4113, 0x4556, 0xba04, 0x43b0, 0x43cc, 0x3369, 0xb0c6, 0x43ca, 0x42e2, 0xbf43, 0xb04a, 0xb0cf, 0xb2c0, 0xbff0, 0x436f, 0x40e7, 0xbf72, 0x1cda, 0xba12, 0xb2b6, 0x1294, 0xb083, 0x44f3, 0xbf4a, 0x4379, 0x4206, 0x4168, 0x18aa, 0x43b3, 0xb2d4, 0x442d, 0x4363, 0x4219, 0x3fba, 0xb2f9, 0x4226, 0xbff0, 0xb050, 0x1882, 0x4143, 0x4602, 0x3889, 0x19a3, 0xbf35, 0x4110, 0x429e, 0xb2dd, 0x4087, 0xba4b, 0x4303, 0x415b, 0xb031, 0xb003, 0x4062, 0x1aa9, 0x4066, 0x1ca6, 0xbf80, 0x1970, 0x0840, 0xa6a7, 0xaf8d, 0x40ea, 0x2ad2, 0xb2b7, 0x41aa, 0xbae6, 0x393e, 0x4264, 0x40ae, 0xbaf7, 0xbf6d, 0xb244, 0xba21, 0xba7b, 0x23d2, 0x400a, 0x4059, 0xba4d, 0x1505, 0x1d64, 0x42b9, 0x4197, 0x41f8, 0x4437, 0x41ac, 0x0a56, 0x1d3d, 0x4555, 0xbf8f, 0x4319, 0xbade, 0xba6e, 0x03a1, 0xb2b4, 0x40ac, 0xa7c5, 0xbf14, 0xac04, 0x221e, 0x4246, 0xb2d9, 0x4020, 0xba06, 0xbff0, 0x40d0, 0x2539, 0xba4f, 0x4283, 0x43b5, 0x42f1, 0x43a9, 0xb215, 0xba78, 0x4353, 0xb2ad, 0x0eb2, 0x40b9, 0x05f6, 0x1b03, 0x037a, 0x1922, 0x1d2d, 0x4218, 0xbf42, 0x2674, 0x44fd, 0x41e2, 0xba4d, 0x43f9, 0x10d1, 0x4121, 0x4309, 0xb25a, 0xba68, 0xb2d2, 0x402c, 0x27fb, 0x4143, 0xba48, 0xbfc6, 0x42cd, 0x438f, 0xb23a, 0x253a, 0x19ff, 0x40ed, 0x429a, 0x03f5, 0x412e, 0xba52, 0x43e5, 0xb2bf, 0x1bae, 0x43a5, 0x4389, 0x4253, 0x1bc9, 0xbf8c, 0xb20d, 0xb2be, 0x43ea, 0xa6fd, 0x3b1d, 0x40ad, 0x43d6, 0x43fd, 0x448a, 0x17ff, 0x430b, 0x41e0, 0xba42, 0xbf57, 0xaf35, 0x423c, 0x40b0, 0x43f4, 0xb245, 0x1a09, 0x04e0, 0x398e, 0x4049, 0x4389, 0x43b2, 0xbf00, 0xb0b9, 0x1f41, 0x41a5, 0x4143, 0x403e, 0xa712, 0xab59, 0xbac2, 0x422b, 0x21e4, 0xbfdd, 0xb273, 0x2b57, 0xa6e7, 0xa357, 0xa329, 0x427e, 0xb29d, 0x0b10, 0xbae1, 0xa29b, 0x2e57, 0x41dd, 0x43b3, 0xb2ff, 0xb201, 0xa480, 0x111a, 0x434f, 0x3828, 0x0c1e, 0x40bd, 0x1ddc, 0x4120, 0xbf90, 0x1f65, 0x4387, 0x4307, 0x4235, 0xbf87, 0xbff0, 0x41c6, 0x36e9, 0x4120, 0x40ca, 0x4383, 0xb211, 0x41f5, 0x4309, 0xbfd5, 0x4332, 0xb23a, 0x4227, 0x4358, 0x2229, 0x41a0, 0xb09b, 0x4162, 0x00af, 0x4017, 0xb270, 0xbf60, 0x4289, 0xba44, 0x415f, 0x3745, 0x1d25, 0xb24f, 0x415b, 0x1dde, 0x41d5, 0x421d, 0x4061, 0xb23d, 0xb0e1, 0xb231, 0xbfce, 0x4479, 0x18ae, 0x429b, 0x3aa6, 0xb031, 0xbf08, 0x4173, 0x4025, 0xbf01, 0xbf80, 0x429a, 0xa140, 0x4241, 0x4004, 0xbaf0, 0x1950, 0xbf00, 0x4069, 0xbf90, 0x42f8, 0x4149, 0x4352, 0x40ee, 0x1a2e, 0x1888, 0x2be6, 0xa75e, 0xb040, 0x42ed, 0x4158, 0xbf7a, 0x45aa, 0x0e95, 0x1014, 0x0d0c, 0x22e9, 0x1dc7, 0xbfa0, 0xb092, 0xbfb0, 0x41c7, 0x0377, 0xb2c9, 0x4260, 0x4371, 0x1ba6, 0x4273, 0x426c, 0x1a58, 0x1e6b, 0x0f52, 0x1c50, 0x3528, 0x4157, 0x4296, 0xbf43, 0x345e, 0x40f5, 0x429c, 0x42bc, 0x4312, 0xa05d, 0x1ea4, 0x40e2, 0xbf92, 0x38a7, 0x43b2, 0xbfb0, 0x1d58, 0xba54, 0xb256, 0xb255, 0x442e, 0x4293, 0xba67, 0x1804, 0xb27c, 0x425a, 0x4173, 0xba62, 0x4221, 0x41c7, 0x3475, 0xbfb8, 0x4002, 0xb0b4, 0x412c, 0x4589, 0xa77d, 0xb020, 0xbaff, 0xa2d3, 0x4344, 0xb205, 0x46b8, 0x1801, 0x1ee2, 0x4131, 0x43ef, 0x408a, 0x1107, 0x4168, 0xbf41, 0xb20c, 0x432c, 0x2c41, 0x3ee4, 0xa926, 0x40aa, 0xb0b8, 0x3a6f, 0x469a, 0x4379, 0xbf7c, 0x1f14, 0xb2c5, 0xb2bb, 0x1c36, 0xb265, 0xba1d, 0x41af, 0x374d, 0xb28e, 0x42b4, 0xbae7, 0x4258, 0x40f9, 0xa16f, 0xae72, 0x1f30, 0xbad1, 0x1e7c, 0x4319, 0xbfd9, 0xbae6, 0xb0d2, 0xb28f, 0xb29e, 0xb03f, 0x41eb, 0x416e, 0x4095, 0x3136, 0xa0cf, 0x1dd8, 0x40e6, 0x06b2, 0xb2a3, 0x0458, 0xb036, 0x435d, 0x43f2, 0x43b0, 0x315c, 0xba07, 0xb0ba, 0x439a, 0xb21d, 0x1079, 0xba14, 0xbf22, 0x433f, 0x40cd, 0xbfe0, 0xa72f, 0xbac2, 0x4134, 0xb0ed, 0xbfda, 0xb2d7, 0x41e2, 0xba61, 0x1b57, 0x406a, 0x4217, 0x4064, 0xba66, 0x3ffd, 0x41b3, 0x343a, 0xb233, 0xbfd3, 0x4111, 0x4213, 0x4093, 0x40c3, 0x4770, 0xe7fe + ], + StartRegs = [0x6a1fb324, 0x37d1732c, 0x1194c5d3, 0x5a48240b, 0xf3985d54, 0xf7ed5c2f, 0xf3b4ec29, 0x13619425, 0x3b477912, 0x36e07690, 0x5d185c63, 0x32e603e4, 0xdff550bc, 0xbcb83fd1, 0x00000000, 0x300001f0 + ], + FinalRegs = [0x1a1c0000, 0x00000e0d, 0xffff8d0e, 0x00000000, 0x0000003a, 0xffff8d0e, 0x00000000, 0x000071f5, 0x00001419, 0x868c5020, 0xffffffff, 0x32e603e4, 0xdff550bc, 0x000217f8, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0xb2dc, 0x425f, 0xb2d1, 0xb20b, 0x1b94, 0xbf39, 0x1983, 0x4350, 0x426e, 0x43a5, 0x4377, 0x1ee2, 0x1e44, 0x1b2d, 0x1ad2, 0x1cc0, 0x402d, 0xb2f6, 0x02f0, 0x3eb0, 0x4037, 0x0a3e, 0x418c, 0xbf8a, 0x405e, 0xa376, 0xb075, 0x420d, 0xb2b6, 0xb022, 0x440a, 0xb0cc, 0x46a9, 0x40e7, 0x21fc, 0xb27b, 0x437c, 0xa9bc, 0x1c9d, 0x42bd, 0x4197, 0xbf9f, 0x441e, 0xba11, 0x424e, 0xbff0, 0x41cb, 0xb21c, 0x428b, 0x1a18, 0x4007, 0x1795, 0x2000, 0x4006, 0x43b6, 0xbf3b, 0x42ec, 0x422d, 0x2e16, 0x29b0, 0x1bee, 0x407d, 0xb02d, 0x4075, 0xbf64, 0x407e, 0x4547, 0x4159, 0xb0eb, 0xb21d, 0x41f2, 0x09e7, 0x410d, 0x462b, 0x4583, 0xb2f8, 0x409e, 0x40a4, 0xbfd0, 0xb051, 0x4029, 0x3874, 0x4642, 0xbfba, 0x40d1, 0xb217, 0xb083, 0x2a1f, 0x4263, 0x468a, 0x322b, 0xba31, 0x0de5, 0x4091, 0xb243, 0xb296, 0x4259, 0xac7d, 0x2a5a, 0x4010, 0xbf98, 0x4116, 0x4166, 0x19d7, 0xba43, 0x0e2e, 0xbff0, 0x430f, 0x439b, 0xa2f3, 0x1914, 0x3b48, 0x18d2, 0x4065, 0xb07d, 0xb02c, 0xb2a7, 0xb2c8, 0x03b0, 0xa9b3, 0x45de, 0xbf00, 0xb27c, 0x4347, 0x1fc8, 0x40cc, 0x4095, 0xbf74, 0x2dfe, 0x4223, 0x42f8, 0x3a83, 0x1b47, 0x1be1, 0x1281, 0x42da, 0x03dc, 0x40f1, 0xb2c1, 0x4648, 0x44b0, 0xba72, 0xba36, 0x0d2d, 0x4001, 0xbf9b, 0x1890, 0x45d4, 0x42b6, 0x40f9, 0x420a, 0x410e, 0xaa69, 0xb263, 0xbf77, 0x00be, 0x4092, 0x40e7, 0xb2b1, 0x435a, 0x42b4, 0xb09f, 0x420d, 0xb06a, 0xba63, 0x4272, 0x42d0, 0x32b7, 0x43ce, 0x1af8, 0xb06d, 0x430c, 0x404c, 0x097a, 0xb2c9, 0xbf3c, 0x2533, 0xbadd, 0x46b0, 0x441f, 0xb0f8, 0x4384, 0x45da, 0x42fb, 0x4380, 0xbac6, 0x35c4, 0x1564, 0x0e66, 0xbfe0, 0x3645, 0xba64, 0x4229, 0xa6c0, 0xbf14, 0xb07b, 0x40fe, 0x4353, 0x1856, 0xa5a8, 0x1bb5, 0xaa8b, 0x40bf, 0xabf0, 0x4389, 0xbac0, 0xba7b, 0x43e4, 0x1ee2, 0x42ce, 0xbf0e, 0x46a0, 0x4279, 0x45ae, 0x4096, 0x0e54, 0x4106, 0xb25d, 0x40ec, 0x3483, 0x4090, 0x42cf, 0x1a7a, 0x406b, 0xb02c, 0x43b1, 0x4029, 0x2399, 0x19ce, 0xb233, 0x4303, 0xbfd0, 0x2c0c, 0x43d7, 0xb254, 0x27fa, 0x2ea7, 0x0a4b, 0x40b1, 0xbfc4, 0x1b4d, 0x420e, 0xb2b7, 0xb234, 0x4210, 0x43f8, 0x466b, 0x4134, 0xb2f1, 0x1f53, 0xb06b, 0x40a2, 0xb0f1, 0x40ea, 0xb0f5, 0x421d, 0x42df, 0x28d3, 0xba66, 0x42fc, 0xbfd5, 0xbfe0, 0xbfa0, 0xba2f, 0x45c1, 0xbae4, 0xb290, 0x4030, 0x436c, 0x466e, 0x44d9, 0xba3a, 0xba5f, 0xa987, 0x247e, 0x1273, 0x1925, 0xb240, 0xa2a8, 0x1d6a, 0xbf94, 0x42e4, 0x43e1, 0x42ff, 0xbf49, 0x454d, 0x442d, 0xb26b, 0xb054, 0x41d3, 0x402d, 0x40b2, 0x43e0, 0xbf2e, 0x0098, 0x4047, 0xb2af, 0x42e4, 0x4315, 0x41c2, 0xab7f, 0xb279, 0xb253, 0x4101, 0xb2fe, 0xa41d, 0xb2f0, 0x4357, 0x1b5e, 0x3f79, 0xb26e, 0x41bd, 0xbf69, 0x1813, 0x0a71, 0x0efc, 0x4215, 0x16f2, 0x4108, 0x4191, 0xbf2a, 0xb2a0, 0x1c23, 0xaeff, 0x21f2, 0x2a43, 0xbad6, 0xac3a, 0x43ee, 0x4226, 0xbf42, 0x412a, 0x04ce, 0x3044, 0x42fd, 0x430f, 0x3e1c, 0x4063, 0xbfac, 0x3557, 0x4258, 0x06d8, 0x4250, 0x43fa, 0xbaf8, 0x40e1, 0x11e8, 0x4000, 0x40ff, 0x1adf, 0x4693, 0x4257, 0x46d0, 0xbfba, 0xb2b9, 0xb23d, 0xba49, 0x4266, 0x4210, 0xa557, 0x1df4, 0xba45, 0x454c, 0xa556, 0x434e, 0x1a7a, 0x4380, 0xb09a, 0x4087, 0x1937, 0xb20f, 0x4067, 0xbfd3, 0x42b7, 0xb227, 0x41f9, 0xbaee, 0x4191, 0x4011, 0x2bf8, 0x41c0, 0x4599, 0x428a, 0x40ba, 0x1e9f, 0x12b1, 0x2cdc, 0xb285, 0xaa95, 0xbfbe, 0x4022, 0x466c, 0xba77, 0xb041, 0x42bc, 0x4016, 0x434b, 0x41c6, 0xba0a, 0x416d, 0x3ddc, 0xba28, 0x40f3, 0x3d50, 0x41fb, 0x437d, 0x42e3, 0x4343, 0x143b, 0xbf4b, 0x1a96, 0x43cd, 0x05a6, 0x41bf, 0x413e, 0x1de5, 0xb0c7, 0x436d, 0xbac4, 0x43cf, 0x42e9, 0x4294, 0x07b5, 0xa1ea, 0x4577, 0xbae6, 0x4387, 0x42eb, 0x2ba4, 0x4117, 0x4229, 0x4171, 0xb0b0, 0xbade, 0x4226, 0x43a4, 0xa8c8, 0x4213, 0xbf00, 0xbf88, 0xb07b, 0x4229, 0x322d, 0x2ed2, 0x42d6, 0x2426, 0x427b, 0xbf28, 0x039a, 0x4377, 0x1baf, 0x2d7d, 0x42fd, 0x4699, 0x4004, 0x4166, 0x4164, 0x0761, 0xb0da, 0xb2c5, 0x4178, 0x19b8, 0x42a1, 0xbfb9, 0x4299, 0x4192, 0x40f5, 0x42d0, 0xbf7f, 0x4353, 0x40d7, 0x4261, 0x09af, 0x1c71, 0x4492, 0x421b, 0xba64, 0x41a2, 0x4391, 0xbfe0, 0x18ad, 0x4114, 0x42ba, 0xbafa, 0xb0e0, 0xbf12, 0x3c22, 0x13d3, 0xb270, 0x1297, 0x4256, 0x4227, 0x4148, 0xbfa1, 0xbf80, 0x1863, 0x075c, 0xa63a, 0x192a, 0xb285, 0x415f, 0x371f, 0x36d4, 0x41f9, 0xb09f, 0x4246, 0xb2f3, 0xb000, 0x420d, 0x4315, 0xb2b3, 0x0bc4, 0x2021, 0x0dda, 0xb0c5, 0xbf7a, 0x432f, 0xa889, 0x4112, 0x42ea, 0x4310, 0xbf3e, 0xa3e2, 0x4291, 0x1be6, 0x43bd, 0x40b7, 0x205f, 0x4014, 0x31dc, 0xa38c, 0x4117, 0x4230, 0x4381, 0xbf66, 0x4002, 0x41df, 0x42f0, 0xbaf0, 0x4171, 0xba79, 0x1339, 0x45cb, 0x409d, 0xbf18, 0x4163, 0xb07c, 0x4172, 0x40c2, 0x2cb7, 0x4309, 0x4068, 0x1788, 0xba35, 0x42b2, 0x43a5, 0x43c5, 0x442f, 0xba0c, 0x014d, 0x432c, 0xb2d3, 0x3076, 0x4274, 0xb283, 0xa8fe, 0x1c15, 0x46d1, 0xb075, 0xbf1e, 0x42b9, 0x31df, 0xba3b, 0x414e, 0xbae5, 0xa161, 0xb2c0, 0x436c, 0xbf9c, 0x43c1, 0xbadb, 0x18b0, 0xbfe2, 0xaf82, 0x39f6, 0x41b3, 0x2696, 0x38ad, 0x42b5, 0xb043, 0x43dd, 0x40ca, 0x42f0, 0xba54, 0x4369, 0x0412, 0x4349, 0x438f, 0x4555, 0x4022, 0x412f, 0x41f4, 0x4139, 0xa343, 0x41c4, 0xba2c, 0xad94, 0xbfb4, 0x0d58, 0x3a42, 0x43a9, 0x41fb, 0xbaf7, 0x463c, 0x0151, 0x44e8, 0x43bf, 0x42b2, 0x42e1, 0x0479, 0x1801, 0xba2e, 0x1614, 0x41fe, 0x4204, 0xbad0, 0x18ad, 0x4056, 0xb0e2, 0xb2a8, 0x06e3, 0xb260, 0xbf3f, 0xba59, 0x4620, 0xba29, 0x3348, 0x45c4, 0xbaef, 0xb293, 0xbadb, 0x40d2, 0x4374, 0xba7f, 0x35fa, 0x1b6c, 0xb23b, 0x2a15, 0x1ed7, 0xa687, 0xa2c0, 0x01fc, 0xa940, 0xba6e, 0x459a, 0x4044, 0x437d, 0xb2ab, 0x3190, 0x2415, 0x2092, 0xbf87, 0x427d, 0xb271, 0x2f34, 0x21c7, 0x404d, 0xb08a, 0x1ce7, 0x30cd, 0x433c, 0x45ab, 0xb234, 0x438d, 0x3eae, 0x4062, 0xb224, 0x3c04, 0xb2ce, 0xb23a, 0x17a3, 0xbfbc, 0x1af8, 0x430c, 0x4264, 0x43d9, 0xb2b5, 0x40dc, 0xbad1, 0x1ad9, 0x41d7, 0x40b1, 0xb0e2, 0x43b9, 0x41ca, 0x352f, 0xbf70, 0x33cb, 0xac4b, 0xba11, 0xb0d1, 0x42c3, 0xbf0e, 0xb277, 0x1c5f, 0xb2f3, 0x4278, 0x4005, 0x40d3, 0xa013, 0x441a, 0x44b4, 0x089a, 0xad41, 0x1c00, 0xb238, 0x46a9, 0x40a7, 0xba4e, 0x43ab, 0x2692, 0x1f89, 0xb021, 0x41a7, 0xbfa2, 0x106c, 0x4213, 0xb251, 0x423c, 0x43fd, 0x423d, 0x406b, 0x40b7, 0x1cc0, 0xacca, 0x433f, 0x3dda, 0xba4a, 0x3137, 0x2707, 0x4167, 0x4016, 0xbf45, 0x40d7, 0xba6a, 0x403b, 0xae6b, 0x42ae, 0x4351, 0xb0bf, 0x420c, 0x2052, 0xb037, 0x1b19, 0x43cf, 0x42aa, 0x40cd, 0x4329, 0x0139, 0xbf32, 0x2fda, 0x1320, 0x256b, 0x421c, 0x41e4, 0x4080, 0x40b8, 0x07be, 0x3f93, 0x4270, 0xb2d8, 0x4295, 0x41ba, 0xb013, 0x440f, 0x4157, 0x42b1, 0x40f4, 0xb0f6, 0x1b7d, 0x408b, 0xbfe0, 0xba53, 0x433a, 0x464f, 0xbf25, 0x406e, 0xae0f, 0x1c12, 0xb230, 0xbacf, 0xbacb, 0x1fe3, 0xbf90, 0x4602, 0xbf82, 0xba73, 0x4481, 0x23b5, 0x4394, 0x4320, 0xbad1, 0x1aec, 0x27c6, 0x41bd, 0x4157, 0x1de8, 0xbfe0, 0x435e, 0x41de, 0x25df, 0x01fe, 0x40d6, 0x467f, 0xb081, 0xb0b2, 0x3885, 0x192d, 0x2974, 0x31f9, 0x458d, 0x2fc1, 0xb048, 0xbf18, 0x10c7, 0x4272, 0xb25a, 0x4198, 0xb221, 0x400f, 0xa6c2, 0x42d2, 0x1b23, 0x417b, 0x4456, 0x4465, 0x1fdf, 0x1c70, 0x4068, 0xb2d8, 0x4582, 0xb279, 0x40b9, 0xba17, 0x4243, 0x4060, 0x1936, 0xbf0f, 0xa1bc, 0xb0fa, 0x439d, 0x41e8, 0x39be, 0xb2e1, 0x4430, 0x40ff, 0x1a28, 0x42de, 0x1e90, 0x417e, 0x03bc, 0x4240, 0x435c, 0xbad7, 0x1de9, 0xa31a, 0x1135, 0x4198, 0x441f, 0x4276, 0xbf70, 0x1d98, 0xbfa4, 0x418f, 0xba2f, 0x41f1, 0x4182, 0x41e0, 0x425b, 0xb269, 0x1ff1, 0x4330, 0xb29e, 0x2039, 0x41b9, 0xa5d6, 0x42bb, 0xb2dd, 0x4025, 0x2734, 0x469b, 0x4368, 0x1c15, 0x41c3, 0xbfb1, 0x0bef, 0x4469, 0xb214, 0x3073, 0x423d, 0x1ecf, 0x437f, 0x41e6, 0xac31, 0xbf6d, 0x18aa, 0x4641, 0x2805, 0x43e1, 0xa531, 0x42a7, 0xb246, 0x1f48, 0x42a0, 0x1e10, 0x4263, 0x43eb, 0xb090, 0x4020, 0xa807, 0x4149, 0x42b1, 0xb291, 0xbf90, 0x2fbf, 0x1edd, 0x3d40, 0x433f, 0x3eb8, 0xbf5f, 0xb212, 0x4151, 0x43b7, 0x4415, 0x03b7, 0x40cb, 0xba3f, 0x438d, 0x41fd, 0x0518, 0x42cf, 0xa79a, 0xa354, 0x2ac3, 0xb25a, 0x4145, 0xa5e8, 0x400e, 0x1851, 0xbf87, 0x1c05, 0x4377, 0x405d, 0xba00, 0xb2d5, 0x4232, 0x319c, 0x4409, 0x1f3d, 0x41e6, 0x4069, 0xbfb4, 0x41d9, 0x18d0, 0x4307, 0x4567, 0x433e, 0x421c, 0x429c, 0x055c, 0x41ab, 0x40b1, 0x40f1, 0x353d, 0xaae0, 0x4237, 0xaadc, 0x23f3, 0xb0b0, 0xbf47, 0x401a, 0xaeea, 0x4077, 0xa7bd, 0x4209, 0x41a4, 0x46eb, 0x437f, 0x4226, 0xb2e2, 0xb04a, 0x4233, 0x4387, 0xbfc8, 0x46dc, 0x4381, 0xbada, 0x0d3d, 0x44cb, 0x405c, 0x4544, 0x438e, 0x419a, 0x40f9, 0x442a, 0xb000, 0xb2da, 0x1aa8, 0x1e51, 0x1dd4, 0x1319, 0xba33, 0x4176, 0x40eb, 0xbff0, 0xbf62, 0x42d7, 0x40e7, 0x413e, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xec5af9f4, 0x9436eb06, 0x9ba4ad42, 0x6f255f58, 0x3f12d10f, 0x0928b6c9, 0x415b7bf8, 0x054f2f3e, 0x41a3cd86, 0x6af229e8, 0xc9f61355, 0xeb58ff68, 0x0c0e2ab2, 0xe150fa69, 0x00000000, 0xe00001f0 }, - FinalRegs = new uint[] { 0xffffff39, 0x00000000, 0x000000f3, 0x00000000, 0x000000fa, 0x0000002c, 0x2eb370e8, 0x02c5a110, 0xe151009d, 0xe150fdb5, 0xffffffff, 0xc2a1f61a, 0xe150f865, 0xe150f98d, 0x00000000, 0x400001d0 }, + Instructions = [0xb2dc, 0x425f, 0xb2d1, 0xb20b, 0x1b94, 0xbf39, 0x1983, 0x4350, 0x426e, 0x43a5, 0x4377, 0x1ee2, 0x1e44, 0x1b2d, 0x1ad2, 0x1cc0, 0x402d, 0xb2f6, 0x02f0, 0x3eb0, 0x4037, 0x0a3e, 0x418c, 0xbf8a, 0x405e, 0xa376, 0xb075, 0x420d, 0xb2b6, 0xb022, 0x440a, 0xb0cc, 0x46a9, 0x40e7, 0x21fc, 0xb27b, 0x437c, 0xa9bc, 0x1c9d, 0x42bd, 0x4197, 0xbf9f, 0x441e, 0xba11, 0x424e, 0xbff0, 0x41cb, 0xb21c, 0x428b, 0x1a18, 0x4007, 0x1795, 0x2000, 0x4006, 0x43b6, 0xbf3b, 0x42ec, 0x422d, 0x2e16, 0x29b0, 0x1bee, 0x407d, 0xb02d, 0x4075, 0xbf64, 0x407e, 0x4547, 0x4159, 0xb0eb, 0xb21d, 0x41f2, 0x09e7, 0x410d, 0x462b, 0x4583, 0xb2f8, 0x409e, 0x40a4, 0xbfd0, 0xb051, 0x4029, 0x3874, 0x4642, 0xbfba, 0x40d1, 0xb217, 0xb083, 0x2a1f, 0x4263, 0x468a, 0x322b, 0xba31, 0x0de5, 0x4091, 0xb243, 0xb296, 0x4259, 0xac7d, 0x2a5a, 0x4010, 0xbf98, 0x4116, 0x4166, 0x19d7, 0xba43, 0x0e2e, 0xbff0, 0x430f, 0x439b, 0xa2f3, 0x1914, 0x3b48, 0x18d2, 0x4065, 0xb07d, 0xb02c, 0xb2a7, 0xb2c8, 0x03b0, 0xa9b3, 0x45de, 0xbf00, 0xb27c, 0x4347, 0x1fc8, 0x40cc, 0x4095, 0xbf74, 0x2dfe, 0x4223, 0x42f8, 0x3a83, 0x1b47, 0x1be1, 0x1281, 0x42da, 0x03dc, 0x40f1, 0xb2c1, 0x4648, 0x44b0, 0xba72, 0xba36, 0x0d2d, 0x4001, 0xbf9b, 0x1890, 0x45d4, 0x42b6, 0x40f9, 0x420a, 0x410e, 0xaa69, 0xb263, 0xbf77, 0x00be, 0x4092, 0x40e7, 0xb2b1, 0x435a, 0x42b4, 0xb09f, 0x420d, 0xb06a, 0xba63, 0x4272, 0x42d0, 0x32b7, 0x43ce, 0x1af8, 0xb06d, 0x430c, 0x404c, 0x097a, 0xb2c9, 0xbf3c, 0x2533, 0xbadd, 0x46b0, 0x441f, 0xb0f8, 0x4384, 0x45da, 0x42fb, 0x4380, 0xbac6, 0x35c4, 0x1564, 0x0e66, 0xbfe0, 0x3645, 0xba64, 0x4229, 0xa6c0, 0xbf14, 0xb07b, 0x40fe, 0x4353, 0x1856, 0xa5a8, 0x1bb5, 0xaa8b, 0x40bf, 0xabf0, 0x4389, 0xbac0, 0xba7b, 0x43e4, 0x1ee2, 0x42ce, 0xbf0e, 0x46a0, 0x4279, 0x45ae, 0x4096, 0x0e54, 0x4106, 0xb25d, 0x40ec, 0x3483, 0x4090, 0x42cf, 0x1a7a, 0x406b, 0xb02c, 0x43b1, 0x4029, 0x2399, 0x19ce, 0xb233, 0x4303, 0xbfd0, 0x2c0c, 0x43d7, 0xb254, 0x27fa, 0x2ea7, 0x0a4b, 0x40b1, 0xbfc4, 0x1b4d, 0x420e, 0xb2b7, 0xb234, 0x4210, 0x43f8, 0x466b, 0x4134, 0xb2f1, 0x1f53, 0xb06b, 0x40a2, 0xb0f1, 0x40ea, 0xb0f5, 0x421d, 0x42df, 0x28d3, 0xba66, 0x42fc, 0xbfd5, 0xbfe0, 0xbfa0, 0xba2f, 0x45c1, 0xbae4, 0xb290, 0x4030, 0x436c, 0x466e, 0x44d9, 0xba3a, 0xba5f, 0xa987, 0x247e, 0x1273, 0x1925, 0xb240, 0xa2a8, 0x1d6a, 0xbf94, 0x42e4, 0x43e1, 0x42ff, 0xbf49, 0x454d, 0x442d, 0xb26b, 0xb054, 0x41d3, 0x402d, 0x40b2, 0x43e0, 0xbf2e, 0x0098, 0x4047, 0xb2af, 0x42e4, 0x4315, 0x41c2, 0xab7f, 0xb279, 0xb253, 0x4101, 0xb2fe, 0xa41d, 0xb2f0, 0x4357, 0x1b5e, 0x3f79, 0xb26e, 0x41bd, 0xbf69, 0x1813, 0x0a71, 0x0efc, 0x4215, 0x16f2, 0x4108, 0x4191, 0xbf2a, 0xb2a0, 0x1c23, 0xaeff, 0x21f2, 0x2a43, 0xbad6, 0xac3a, 0x43ee, 0x4226, 0xbf42, 0x412a, 0x04ce, 0x3044, 0x42fd, 0x430f, 0x3e1c, 0x4063, 0xbfac, 0x3557, 0x4258, 0x06d8, 0x4250, 0x43fa, 0xbaf8, 0x40e1, 0x11e8, 0x4000, 0x40ff, 0x1adf, 0x4693, 0x4257, 0x46d0, 0xbfba, 0xb2b9, 0xb23d, 0xba49, 0x4266, 0x4210, 0xa557, 0x1df4, 0xba45, 0x454c, 0xa556, 0x434e, 0x1a7a, 0x4380, 0xb09a, 0x4087, 0x1937, 0xb20f, 0x4067, 0xbfd3, 0x42b7, 0xb227, 0x41f9, 0xbaee, 0x4191, 0x4011, 0x2bf8, 0x41c0, 0x4599, 0x428a, 0x40ba, 0x1e9f, 0x12b1, 0x2cdc, 0xb285, 0xaa95, 0xbfbe, 0x4022, 0x466c, 0xba77, 0xb041, 0x42bc, 0x4016, 0x434b, 0x41c6, 0xba0a, 0x416d, 0x3ddc, 0xba28, 0x40f3, 0x3d50, 0x41fb, 0x437d, 0x42e3, 0x4343, 0x143b, 0xbf4b, 0x1a96, 0x43cd, 0x05a6, 0x41bf, 0x413e, 0x1de5, 0xb0c7, 0x436d, 0xbac4, 0x43cf, 0x42e9, 0x4294, 0x07b5, 0xa1ea, 0x4577, 0xbae6, 0x4387, 0x42eb, 0x2ba4, 0x4117, 0x4229, 0x4171, 0xb0b0, 0xbade, 0x4226, 0x43a4, 0xa8c8, 0x4213, 0xbf00, 0xbf88, 0xb07b, 0x4229, 0x322d, 0x2ed2, 0x42d6, 0x2426, 0x427b, 0xbf28, 0x039a, 0x4377, 0x1baf, 0x2d7d, 0x42fd, 0x4699, 0x4004, 0x4166, 0x4164, 0x0761, 0xb0da, 0xb2c5, 0x4178, 0x19b8, 0x42a1, 0xbfb9, 0x4299, 0x4192, 0x40f5, 0x42d0, 0xbf7f, 0x4353, 0x40d7, 0x4261, 0x09af, 0x1c71, 0x4492, 0x421b, 0xba64, 0x41a2, 0x4391, 0xbfe0, 0x18ad, 0x4114, 0x42ba, 0xbafa, 0xb0e0, 0xbf12, 0x3c22, 0x13d3, 0xb270, 0x1297, 0x4256, 0x4227, 0x4148, 0xbfa1, 0xbf80, 0x1863, 0x075c, 0xa63a, 0x192a, 0xb285, 0x415f, 0x371f, 0x36d4, 0x41f9, 0xb09f, 0x4246, 0xb2f3, 0xb000, 0x420d, 0x4315, 0xb2b3, 0x0bc4, 0x2021, 0x0dda, 0xb0c5, 0xbf7a, 0x432f, 0xa889, 0x4112, 0x42ea, 0x4310, 0xbf3e, 0xa3e2, 0x4291, 0x1be6, 0x43bd, 0x40b7, 0x205f, 0x4014, 0x31dc, 0xa38c, 0x4117, 0x4230, 0x4381, 0xbf66, 0x4002, 0x41df, 0x42f0, 0xbaf0, 0x4171, 0xba79, 0x1339, 0x45cb, 0x409d, 0xbf18, 0x4163, 0xb07c, 0x4172, 0x40c2, 0x2cb7, 0x4309, 0x4068, 0x1788, 0xba35, 0x42b2, 0x43a5, 0x43c5, 0x442f, 0xba0c, 0x014d, 0x432c, 0xb2d3, 0x3076, 0x4274, 0xb283, 0xa8fe, 0x1c15, 0x46d1, 0xb075, 0xbf1e, 0x42b9, 0x31df, 0xba3b, 0x414e, 0xbae5, 0xa161, 0xb2c0, 0x436c, 0xbf9c, 0x43c1, 0xbadb, 0x18b0, 0xbfe2, 0xaf82, 0x39f6, 0x41b3, 0x2696, 0x38ad, 0x42b5, 0xb043, 0x43dd, 0x40ca, 0x42f0, 0xba54, 0x4369, 0x0412, 0x4349, 0x438f, 0x4555, 0x4022, 0x412f, 0x41f4, 0x4139, 0xa343, 0x41c4, 0xba2c, 0xad94, 0xbfb4, 0x0d58, 0x3a42, 0x43a9, 0x41fb, 0xbaf7, 0x463c, 0x0151, 0x44e8, 0x43bf, 0x42b2, 0x42e1, 0x0479, 0x1801, 0xba2e, 0x1614, 0x41fe, 0x4204, 0xbad0, 0x18ad, 0x4056, 0xb0e2, 0xb2a8, 0x06e3, 0xb260, 0xbf3f, 0xba59, 0x4620, 0xba29, 0x3348, 0x45c4, 0xbaef, 0xb293, 0xbadb, 0x40d2, 0x4374, 0xba7f, 0x35fa, 0x1b6c, 0xb23b, 0x2a15, 0x1ed7, 0xa687, 0xa2c0, 0x01fc, 0xa940, 0xba6e, 0x459a, 0x4044, 0x437d, 0xb2ab, 0x3190, 0x2415, 0x2092, 0xbf87, 0x427d, 0xb271, 0x2f34, 0x21c7, 0x404d, 0xb08a, 0x1ce7, 0x30cd, 0x433c, 0x45ab, 0xb234, 0x438d, 0x3eae, 0x4062, 0xb224, 0x3c04, 0xb2ce, 0xb23a, 0x17a3, 0xbfbc, 0x1af8, 0x430c, 0x4264, 0x43d9, 0xb2b5, 0x40dc, 0xbad1, 0x1ad9, 0x41d7, 0x40b1, 0xb0e2, 0x43b9, 0x41ca, 0x352f, 0xbf70, 0x33cb, 0xac4b, 0xba11, 0xb0d1, 0x42c3, 0xbf0e, 0xb277, 0x1c5f, 0xb2f3, 0x4278, 0x4005, 0x40d3, 0xa013, 0x441a, 0x44b4, 0x089a, 0xad41, 0x1c00, 0xb238, 0x46a9, 0x40a7, 0xba4e, 0x43ab, 0x2692, 0x1f89, 0xb021, 0x41a7, 0xbfa2, 0x106c, 0x4213, 0xb251, 0x423c, 0x43fd, 0x423d, 0x406b, 0x40b7, 0x1cc0, 0xacca, 0x433f, 0x3dda, 0xba4a, 0x3137, 0x2707, 0x4167, 0x4016, 0xbf45, 0x40d7, 0xba6a, 0x403b, 0xae6b, 0x42ae, 0x4351, 0xb0bf, 0x420c, 0x2052, 0xb037, 0x1b19, 0x43cf, 0x42aa, 0x40cd, 0x4329, 0x0139, 0xbf32, 0x2fda, 0x1320, 0x256b, 0x421c, 0x41e4, 0x4080, 0x40b8, 0x07be, 0x3f93, 0x4270, 0xb2d8, 0x4295, 0x41ba, 0xb013, 0x440f, 0x4157, 0x42b1, 0x40f4, 0xb0f6, 0x1b7d, 0x408b, 0xbfe0, 0xba53, 0x433a, 0x464f, 0xbf25, 0x406e, 0xae0f, 0x1c12, 0xb230, 0xbacf, 0xbacb, 0x1fe3, 0xbf90, 0x4602, 0xbf82, 0xba73, 0x4481, 0x23b5, 0x4394, 0x4320, 0xbad1, 0x1aec, 0x27c6, 0x41bd, 0x4157, 0x1de8, 0xbfe0, 0x435e, 0x41de, 0x25df, 0x01fe, 0x40d6, 0x467f, 0xb081, 0xb0b2, 0x3885, 0x192d, 0x2974, 0x31f9, 0x458d, 0x2fc1, 0xb048, 0xbf18, 0x10c7, 0x4272, 0xb25a, 0x4198, 0xb221, 0x400f, 0xa6c2, 0x42d2, 0x1b23, 0x417b, 0x4456, 0x4465, 0x1fdf, 0x1c70, 0x4068, 0xb2d8, 0x4582, 0xb279, 0x40b9, 0xba17, 0x4243, 0x4060, 0x1936, 0xbf0f, 0xa1bc, 0xb0fa, 0x439d, 0x41e8, 0x39be, 0xb2e1, 0x4430, 0x40ff, 0x1a28, 0x42de, 0x1e90, 0x417e, 0x03bc, 0x4240, 0x435c, 0xbad7, 0x1de9, 0xa31a, 0x1135, 0x4198, 0x441f, 0x4276, 0xbf70, 0x1d98, 0xbfa4, 0x418f, 0xba2f, 0x41f1, 0x4182, 0x41e0, 0x425b, 0xb269, 0x1ff1, 0x4330, 0xb29e, 0x2039, 0x41b9, 0xa5d6, 0x42bb, 0xb2dd, 0x4025, 0x2734, 0x469b, 0x4368, 0x1c15, 0x41c3, 0xbfb1, 0x0bef, 0x4469, 0xb214, 0x3073, 0x423d, 0x1ecf, 0x437f, 0x41e6, 0xac31, 0xbf6d, 0x18aa, 0x4641, 0x2805, 0x43e1, 0xa531, 0x42a7, 0xb246, 0x1f48, 0x42a0, 0x1e10, 0x4263, 0x43eb, 0xb090, 0x4020, 0xa807, 0x4149, 0x42b1, 0xb291, 0xbf90, 0x2fbf, 0x1edd, 0x3d40, 0x433f, 0x3eb8, 0xbf5f, 0xb212, 0x4151, 0x43b7, 0x4415, 0x03b7, 0x40cb, 0xba3f, 0x438d, 0x41fd, 0x0518, 0x42cf, 0xa79a, 0xa354, 0x2ac3, 0xb25a, 0x4145, 0xa5e8, 0x400e, 0x1851, 0xbf87, 0x1c05, 0x4377, 0x405d, 0xba00, 0xb2d5, 0x4232, 0x319c, 0x4409, 0x1f3d, 0x41e6, 0x4069, 0xbfb4, 0x41d9, 0x18d0, 0x4307, 0x4567, 0x433e, 0x421c, 0x429c, 0x055c, 0x41ab, 0x40b1, 0x40f1, 0x353d, 0xaae0, 0x4237, 0xaadc, 0x23f3, 0xb0b0, 0xbf47, 0x401a, 0xaeea, 0x4077, 0xa7bd, 0x4209, 0x41a4, 0x46eb, 0x437f, 0x4226, 0xb2e2, 0xb04a, 0x4233, 0x4387, 0xbfc8, 0x46dc, 0x4381, 0xbada, 0x0d3d, 0x44cb, 0x405c, 0x4544, 0x438e, 0x419a, 0x40f9, 0x442a, 0xb000, 0xb2da, 0x1aa8, 0x1e51, 0x1dd4, 0x1319, 0xba33, 0x4176, 0x40eb, 0xbff0, 0xbf62, 0x42d7, 0x40e7, 0x413e, 0x4770, 0xe7fe + ], + StartRegs = [0xec5af9f4, 0x9436eb06, 0x9ba4ad42, 0x6f255f58, 0x3f12d10f, 0x0928b6c9, 0x415b7bf8, 0x054f2f3e, 0x41a3cd86, 0x6af229e8, 0xc9f61355, 0xeb58ff68, 0x0c0e2ab2, 0xe150fa69, 0x00000000, 0xe00001f0 + ], + FinalRegs = [0xffffff39, 0x00000000, 0x000000f3, 0x00000000, 0x000000fa, 0x0000002c, 0x2eb370e8, 0x02c5a110, 0xe151009d, 0xe150fdb5, 0xffffffff, 0xc2a1f61a, 0xe150f865, 0xe150f98d, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x368f, 0x4181, 0xba43, 0x438d, 0xb2ff, 0x43b4, 0x1f09, 0xb23a, 0x4230, 0x293c, 0x4083, 0x243f, 0x2f0b, 0xba43, 0x4022, 0xbf99, 0x2d22, 0xb03a, 0xb2bd, 0x44d3, 0x08ec, 0x425e, 0xb00c, 0x407d, 0xba24, 0xafc8, 0x1de9, 0xbf70, 0x41a6, 0xbf58, 0x42e9, 0x264c, 0x45c3, 0x40bd, 0x4029, 0xba3a, 0x1fda, 0x405c, 0x4005, 0xb2cd, 0x4079, 0x3285, 0xa715, 0x411f, 0x4560, 0xbfb1, 0x406c, 0x4091, 0xa6a9, 0xb22f, 0x41d6, 0xb20e, 0x40ad, 0xbff0, 0xad3c, 0x443a, 0xbf80, 0xb256, 0x4025, 0x43b3, 0x1fd2, 0x00f7, 0x4160, 0xbf1f, 0x36b9, 0x19d7, 0xb26e, 0x4101, 0x41d5, 0x1d7a, 0xba56, 0x43a6, 0xbf83, 0xb2dc, 0x424b, 0x4124, 0xba59, 0x4307, 0xb0cf, 0x4328, 0x4065, 0xbafa, 0xb0c7, 0xb0af, 0xbf83, 0x43b6, 0xb2b8, 0x408c, 0x0730, 0xbfb4, 0xbff0, 0x02a9, 0xb286, 0x4258, 0x45b2, 0x42dd, 0x427e, 0x1faf, 0x1af5, 0x40fb, 0xb092, 0x4615, 0xbf29, 0x1b44, 0xbf60, 0xa826, 0xb250, 0x40cc, 0xb0ad, 0x23d8, 0x10b2, 0x4183, 0x426a, 0x4152, 0xbaf9, 0xacfe, 0x1cd8, 0xbfa2, 0x2419, 0x3078, 0x4083, 0xb2c7, 0x45ae, 0x38db, 0x1879, 0x40cf, 0x4220, 0xb23d, 0x20b8, 0xba32, 0x4031, 0x455b, 0x105c, 0xb295, 0x1af1, 0x12d9, 0xbfc9, 0x403c, 0x4133, 0x4261, 0x41aa, 0x4369, 0x032b, 0xb049, 0xad38, 0x27b3, 0xb20c, 0x424c, 0x4238, 0x1923, 0xb283, 0xb050, 0x424a, 0x1c55, 0x0a49, 0xb0f6, 0x43e2, 0x0e4f, 0x4219, 0x400a, 0x42ac, 0x414e, 0xa73b, 0xbf0f, 0x437b, 0x41ef, 0xa1bd, 0x4051, 0x4308, 0x16a2, 0xbfa0, 0xb26d, 0xba3c, 0x181e, 0xba7e, 0x42c2, 0xba45, 0xac7d, 0x087f, 0x4225, 0xba6c, 0x188b, 0xbf0a, 0xa98e, 0xb2da, 0x1f20, 0x19c1, 0xbf08, 0x40fe, 0x4137, 0xb23a, 0xbfb0, 0x4098, 0x1814, 0x4026, 0x2027, 0x4269, 0xb060, 0x1807, 0xb28e, 0x1ae8, 0xb2a0, 0x4308, 0x414a, 0x416e, 0x1358, 0x43c5, 0xb257, 0x4412, 0xbfc0, 0x2c84, 0x4212, 0xbf7f, 0x40b3, 0xb0cc, 0x404b, 0x0a2d, 0x1a49, 0x1eb1, 0x4342, 0x43b1, 0x1bc8, 0xa36f, 0x42b3, 0x1995, 0x43d8, 0x41c3, 0x407f, 0x410b, 0x40b9, 0x416c, 0xac31, 0x4010, 0xb08d, 0x4007, 0xb209, 0xb091, 0x4383, 0xb21e, 0x411d, 0xb02b, 0x44ad, 0xbf82, 0x18f7, 0x422a, 0xb01d, 0x3f8a, 0xb05f, 0x4589, 0x45a6, 0x4161, 0xba59, 0x41e8, 0xb280, 0x4052, 0xae0d, 0x43b8, 0x4297, 0xb2e8, 0xb260, 0x44a9, 0xbad8, 0x429b, 0x1271, 0x412a, 0x43ef, 0x403f, 0x1f4c, 0xbf7e, 0xa769, 0x40fa, 0xb2a7, 0x3cc5, 0xbf70, 0x17d1, 0x41de, 0x414f, 0xbf7f, 0xba4d, 0xa1df, 0x022b, 0xa268, 0x4237, 0x1a45, 0x40ce, 0x4324, 0x129a, 0x4087, 0x1820, 0x4287, 0x401a, 0x43a3, 0x268b, 0x1b43, 0xa18b, 0x1855, 0x4046, 0x406f, 0x43ee, 0x140b, 0xba3c, 0xb27d, 0x4227, 0xb2fc, 0xab9c, 0x418c, 0xbf2d, 0x42bc, 0x41a9, 0x02ae, 0xb203, 0x401d, 0x4250, 0x431a, 0x40b4, 0xba7c, 0x40db, 0x20f2, 0xb200, 0xa5a0, 0x31f7, 0x028e, 0xbfa0, 0xb2c0, 0x1584, 0xbadf, 0x4278, 0x43ab, 0x0582, 0x414a, 0x1a67, 0x3b4c, 0x1c8a, 0x42c3, 0x40e1, 0x4272, 0xbf41, 0xba3c, 0x42b7, 0x40fa, 0x0974, 0x42b7, 0x1c59, 0xbf17, 0x1c3b, 0x42b2, 0x42c7, 0x1feb, 0x419f, 0x24bb, 0x0932, 0x46c4, 0x42fd, 0x16d0, 0x42f3, 0xbac8, 0x125a, 0xb275, 0x18b1, 0x4432, 0x2522, 0xbf6c, 0x43e3, 0xba24, 0xb053, 0x439c, 0xa9a6, 0x1aa2, 0x3eaf, 0x402d, 0x0b2b, 0xa543, 0xbfa0, 0x4055, 0xbf12, 0x4168, 0x437e, 0x1ea7, 0x4022, 0xa4e7, 0xba4b, 0x394d, 0x195c, 0x1ab5, 0x41fd, 0x436d, 0xaa65, 0x2437, 0xbac6, 0x424a, 0xbfca, 0xba0e, 0xbaec, 0x4038, 0x1252, 0x258d, 0x4186, 0x45d2, 0x42a3, 0x45b8, 0x4160, 0xbf3e, 0x3d8d, 0xb2a1, 0xb277, 0xb2b9, 0xba2a, 0x42e5, 0x4149, 0x4345, 0xba37, 0x43a0, 0x4104, 0x20f0, 0xbac7, 0x43d0, 0x42a9, 0x4215, 0x4576, 0x0a5a, 0xb21c, 0x0657, 0xba38, 0x0f44, 0x1b98, 0x1deb, 0x43af, 0x4198, 0x40bf, 0x3af8, 0xbfd4, 0x03ec, 0x2f69, 0xb05c, 0x2d36, 0x1505, 0xb2be, 0x40ba, 0xb016, 0x40e9, 0x0007, 0xbf66, 0xb284, 0xb2fa, 0x19c8, 0x11bc, 0xba48, 0x4172, 0xa0c2, 0x41de, 0x42d9, 0xb224, 0x1e05, 0x42df, 0x1bf1, 0x272b, 0x4143, 0xbf97, 0xba04, 0x43a9, 0x16d4, 0xb2b7, 0xbafe, 0x033a, 0xba53, 0xb2a6, 0x432c, 0x425e, 0x35c4, 0x43d7, 0x43a1, 0xb209, 0x40d7, 0xbad6, 0x434c, 0x4380, 0xbf61, 0x43db, 0xa3c6, 0x4202, 0x41a0, 0x4370, 0x42d2, 0xb241, 0x0725, 0xb24a, 0x41b8, 0x1e71, 0x42dc, 0x419c, 0x1ccf, 0xb267, 0x4427, 0xb2f7, 0xb235, 0x2c94, 0x19eb, 0xb2b2, 0xbf76, 0x3401, 0x41d7, 0x4212, 0x1e3e, 0xae23, 0x3934, 0x4128, 0xb245, 0x1fcb, 0xbfcb, 0x1a32, 0x44dc, 0x41a4, 0x3ec2, 0x4381, 0x318a, 0x408b, 0x4076, 0x42be, 0x4214, 0x0530, 0x4351, 0x2735, 0xad1b, 0x436c, 0x43dc, 0xba34, 0x4276, 0x41eb, 0xb01f, 0x3246, 0x0717, 0x437e, 0x4021, 0x4043, 0xb237, 0x1876, 0x417d, 0x41d4, 0xbf57, 0xba07, 0xb2e7, 0x1f8b, 0xb28c, 0xbf21, 0x4243, 0x4157, 0x3d59, 0x40be, 0xb22b, 0xb21f, 0x2afc, 0x0525, 0x4291, 0x465e, 0x402d, 0x45ce, 0x0f5f, 0x3952, 0xaaf9, 0x414a, 0xbacc, 0x0081, 0x2e90, 0x4280, 0xbfa5, 0x404c, 0x413e, 0xb2d4, 0x38c8, 0xbf0a, 0x3124, 0x402c, 0x404e, 0x3c59, 0x41f1, 0xba4a, 0xbadc, 0x4117, 0xa1c4, 0x414e, 0x46b4, 0x40f7, 0xb251, 0x46a9, 0xa050, 0xb28c, 0x4369, 0x029c, 0x424c, 0x469b, 0x4266, 0x43b8, 0x2c0e, 0xbfbc, 0x1825, 0xadd6, 0x1b78, 0xba75, 0x10ef, 0x26bd, 0xb09b, 0x42b8, 0xba65, 0x3f0f, 0x0476, 0xb0dc, 0xb21f, 0xb02a, 0x1cb4, 0x468d, 0x3cbe, 0xbf29, 0xbad6, 0x439d, 0xb2d8, 0x1fc1, 0x4260, 0x4541, 0xb271, 0xbac0, 0x1d46, 0xb273, 0x197c, 0x4280, 0x426a, 0x1f19, 0x426c, 0xb284, 0x4230, 0xbf60, 0xb2fd, 0xb203, 0x18b1, 0xbf58, 0x39ee, 0x1ff4, 0x27de, 0xbfa0, 0xb27d, 0xbfe0, 0xb21c, 0x4165, 0x404d, 0xb2d9, 0x45c5, 0x4333, 0x1ba5, 0x4568, 0x43d8, 0xb277, 0x1ef0, 0x124f, 0xb251, 0x1d1d, 0xbf4a, 0x409b, 0xb23c, 0x4400, 0x4391, 0x293e, 0x1a99, 0x40be, 0x0314, 0x43bb, 0x41f5, 0xb28c, 0x1db7, 0x40c4, 0xb00c, 0x4175, 0x40af, 0x4291, 0x3db2, 0xa7cb, 0x4031, 0xba26, 0x43fa, 0x188c, 0x403e, 0x0de1, 0x432b, 0xb027, 0x2431, 0xbf74, 0x41e4, 0x432b, 0xb20f, 0x2b39, 0x4352, 0xaff4, 0xb2eb, 0x45ca, 0x4273, 0x4142, 0x4366, 0x40c1, 0x44fb, 0x1930, 0xb2a5, 0x1bf9, 0xb294, 0x42ec, 0x431c, 0x4345, 0xbf55, 0x0d4b, 0xb07f, 0x0095, 0x2cff, 0xb284, 0x14a1, 0x42bb, 0x4643, 0x436c, 0xb2f1, 0x44e8, 0xb23f, 0x4207, 0x2f1e, 0xb2d7, 0xa512, 0xac75, 0x3a91, 0x231d, 0x3c3d, 0x4151, 0x3341, 0x01ad, 0x44d5, 0xbf3c, 0x1763, 0xa0da, 0x41af, 0x1a77, 0x406d, 0x40fa, 0x18ed, 0x429f, 0x1a22, 0x295a, 0x2dbf, 0x4007, 0x0072, 0xbae7, 0x4343, 0x425d, 0xb2db, 0xb2d4, 0xac1e, 0x40cc, 0x1068, 0x46ca, 0x40c0, 0x417f, 0x4025, 0x4121, 0xbf1d, 0xb297, 0x1c35, 0x43f0, 0xba3f, 0x1e51, 0x43c9, 0x40de, 0x435b, 0xba05, 0x42b9, 0xb270, 0xbf05, 0x3d22, 0x4206, 0x1c39, 0xa97f, 0xba7e, 0xba1b, 0x31a6, 0x414f, 0x39ef, 0xb26a, 0xbad8, 0x2fd1, 0x1abe, 0x1f4e, 0x43a4, 0xb289, 0xb069, 0xb256, 0x4150, 0x181b, 0xbf6a, 0xa9e8, 0xb299, 0x260b, 0x1b81, 0x1356, 0x09f9, 0x16e5, 0x4353, 0x0218, 0x41e3, 0x42c2, 0x2b68, 0xba77, 0x2cc6, 0x4577, 0x42d2, 0x212f, 0x42b8, 0x4063, 0xb235, 0x195a, 0x3085, 0xbf69, 0x4208, 0x2c24, 0x0117, 0x27bc, 0x421d, 0x4165, 0x4033, 0xbf65, 0x38d0, 0x3e41, 0x46c4, 0x40d8, 0xb2d5, 0xbf60, 0x1ab8, 0x402b, 0x23ec, 0xbfc0, 0xbf21, 0xba39, 0x4176, 0x22b6, 0xa1ca, 0x4041, 0x1e24, 0x2334, 0xb079, 0x1ac9, 0x428c, 0x43a1, 0x4556, 0x1ebd, 0xa512, 0xba5c, 0x2319, 0x1ffe, 0xb25d, 0x421b, 0xbf9b, 0x4012, 0x41de, 0x41ad, 0xbaee, 0x42c6, 0x41d7, 0xb20a, 0x33f2, 0x42de, 0x41a2, 0x0d16, 0xba7a, 0x4289, 0xba26, 0xbf49, 0xb2ae, 0x129d, 0xb2eb, 0x4223, 0x1864, 0x0aad, 0xbf57, 0x412c, 0x404f, 0xaa07, 0x41c6, 0x40ef, 0x114a, 0x46f8, 0xbac8, 0x45f1, 0xa8a5, 0x4338, 0x43ab, 0x0833, 0x2140, 0x41b6, 0x2a3e, 0xb018, 0x4215, 0xbf05, 0xba24, 0xa61c, 0xbae2, 0x3218, 0x1078, 0xa5bb, 0x3cf2, 0x34b0, 0xbacd, 0xb085, 0xbf6d, 0xbac5, 0x46d2, 0x4335, 0x421e, 0xb2e6, 0x1df5, 0x412e, 0xbf08, 0x4060, 0x1c63, 0x1c85, 0xba0b, 0xb25a, 0x430b, 0xbfbe, 0xb072, 0x4307, 0x43f1, 0x436c, 0x463f, 0x0028, 0x4311, 0xa4ad, 0x4648, 0x4361, 0x4175, 0x228c, 0x42e9, 0x40e8, 0x0f81, 0x081b, 0x4146, 0xbf81, 0x42a1, 0xac30, 0x40f1, 0x4492, 0x4336, 0xb2fb, 0x1b1d, 0xb2ac, 0x23c8, 0x44ad, 0x1f91, 0x43fe, 0x42b7, 0x1bed, 0x1cb1, 0x3518, 0x0864, 0x4183, 0x42de, 0x4307, 0xb283, 0x43af, 0xb2cc, 0xba5f, 0x1411, 0xb298, 0x4071, 0xbf16, 0x40c9, 0x4637, 0x4307, 0xbf53, 0x1a70, 0x40ca, 0xb26b, 0x42e6, 0xb079, 0xa782, 0x1c70, 0x4623, 0x40b1, 0x41f2, 0x46a4, 0x2ac3, 0x4229, 0x3f2d, 0x4302, 0x030f, 0xa7bd, 0xbf81, 0x4040, 0xbafc, 0xa376, 0xb05e, 0xbf6b, 0x42ec, 0xa754, 0x41e9, 0x433d, 0x4325, 0x2462, 0x4205, 0xa968, 0xbff0, 0x00c8, 0x4378, 0x430f, 0x4136, 0x41f5, 0x2f8e, 0x44fa, 0x413c, 0xbfb9, 0xb097, 0xbaf6, 0xb03e, 0x43d0, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x8b2100eb, 0x3af85a8f, 0x0bb662e6, 0x7ac5449f, 0x6c8b9706, 0x2d86ea00, 0xd9186e8c, 0xb3755866, 0x7227be38, 0x7f97e5fb, 0xc176d2f9, 0x1ff0913a, 0xcb8e1a87, 0x6b0408ce, 0x00000000, 0x800001f0 }, - FinalRegs = new uint[] { 0xffffff72, 0xc176c228, 0x0000008d, 0x00000002, 0x00000000, 0xffffff36, 0x00000000, 0xc176db3c, 0x000016e4, 0x00000000, 0x000017e2, 0x0000206e, 0x00000002, 0xc176c180, 0x00000000, 0x400001d0 }, + Instructions = [0x368f, 0x4181, 0xba43, 0x438d, 0xb2ff, 0x43b4, 0x1f09, 0xb23a, 0x4230, 0x293c, 0x4083, 0x243f, 0x2f0b, 0xba43, 0x4022, 0xbf99, 0x2d22, 0xb03a, 0xb2bd, 0x44d3, 0x08ec, 0x425e, 0xb00c, 0x407d, 0xba24, 0xafc8, 0x1de9, 0xbf70, 0x41a6, 0xbf58, 0x42e9, 0x264c, 0x45c3, 0x40bd, 0x4029, 0xba3a, 0x1fda, 0x405c, 0x4005, 0xb2cd, 0x4079, 0x3285, 0xa715, 0x411f, 0x4560, 0xbfb1, 0x406c, 0x4091, 0xa6a9, 0xb22f, 0x41d6, 0xb20e, 0x40ad, 0xbff0, 0xad3c, 0x443a, 0xbf80, 0xb256, 0x4025, 0x43b3, 0x1fd2, 0x00f7, 0x4160, 0xbf1f, 0x36b9, 0x19d7, 0xb26e, 0x4101, 0x41d5, 0x1d7a, 0xba56, 0x43a6, 0xbf83, 0xb2dc, 0x424b, 0x4124, 0xba59, 0x4307, 0xb0cf, 0x4328, 0x4065, 0xbafa, 0xb0c7, 0xb0af, 0xbf83, 0x43b6, 0xb2b8, 0x408c, 0x0730, 0xbfb4, 0xbff0, 0x02a9, 0xb286, 0x4258, 0x45b2, 0x42dd, 0x427e, 0x1faf, 0x1af5, 0x40fb, 0xb092, 0x4615, 0xbf29, 0x1b44, 0xbf60, 0xa826, 0xb250, 0x40cc, 0xb0ad, 0x23d8, 0x10b2, 0x4183, 0x426a, 0x4152, 0xbaf9, 0xacfe, 0x1cd8, 0xbfa2, 0x2419, 0x3078, 0x4083, 0xb2c7, 0x45ae, 0x38db, 0x1879, 0x40cf, 0x4220, 0xb23d, 0x20b8, 0xba32, 0x4031, 0x455b, 0x105c, 0xb295, 0x1af1, 0x12d9, 0xbfc9, 0x403c, 0x4133, 0x4261, 0x41aa, 0x4369, 0x032b, 0xb049, 0xad38, 0x27b3, 0xb20c, 0x424c, 0x4238, 0x1923, 0xb283, 0xb050, 0x424a, 0x1c55, 0x0a49, 0xb0f6, 0x43e2, 0x0e4f, 0x4219, 0x400a, 0x42ac, 0x414e, 0xa73b, 0xbf0f, 0x437b, 0x41ef, 0xa1bd, 0x4051, 0x4308, 0x16a2, 0xbfa0, 0xb26d, 0xba3c, 0x181e, 0xba7e, 0x42c2, 0xba45, 0xac7d, 0x087f, 0x4225, 0xba6c, 0x188b, 0xbf0a, 0xa98e, 0xb2da, 0x1f20, 0x19c1, 0xbf08, 0x40fe, 0x4137, 0xb23a, 0xbfb0, 0x4098, 0x1814, 0x4026, 0x2027, 0x4269, 0xb060, 0x1807, 0xb28e, 0x1ae8, 0xb2a0, 0x4308, 0x414a, 0x416e, 0x1358, 0x43c5, 0xb257, 0x4412, 0xbfc0, 0x2c84, 0x4212, 0xbf7f, 0x40b3, 0xb0cc, 0x404b, 0x0a2d, 0x1a49, 0x1eb1, 0x4342, 0x43b1, 0x1bc8, 0xa36f, 0x42b3, 0x1995, 0x43d8, 0x41c3, 0x407f, 0x410b, 0x40b9, 0x416c, 0xac31, 0x4010, 0xb08d, 0x4007, 0xb209, 0xb091, 0x4383, 0xb21e, 0x411d, 0xb02b, 0x44ad, 0xbf82, 0x18f7, 0x422a, 0xb01d, 0x3f8a, 0xb05f, 0x4589, 0x45a6, 0x4161, 0xba59, 0x41e8, 0xb280, 0x4052, 0xae0d, 0x43b8, 0x4297, 0xb2e8, 0xb260, 0x44a9, 0xbad8, 0x429b, 0x1271, 0x412a, 0x43ef, 0x403f, 0x1f4c, 0xbf7e, 0xa769, 0x40fa, 0xb2a7, 0x3cc5, 0xbf70, 0x17d1, 0x41de, 0x414f, 0xbf7f, 0xba4d, 0xa1df, 0x022b, 0xa268, 0x4237, 0x1a45, 0x40ce, 0x4324, 0x129a, 0x4087, 0x1820, 0x4287, 0x401a, 0x43a3, 0x268b, 0x1b43, 0xa18b, 0x1855, 0x4046, 0x406f, 0x43ee, 0x140b, 0xba3c, 0xb27d, 0x4227, 0xb2fc, 0xab9c, 0x418c, 0xbf2d, 0x42bc, 0x41a9, 0x02ae, 0xb203, 0x401d, 0x4250, 0x431a, 0x40b4, 0xba7c, 0x40db, 0x20f2, 0xb200, 0xa5a0, 0x31f7, 0x028e, 0xbfa0, 0xb2c0, 0x1584, 0xbadf, 0x4278, 0x43ab, 0x0582, 0x414a, 0x1a67, 0x3b4c, 0x1c8a, 0x42c3, 0x40e1, 0x4272, 0xbf41, 0xba3c, 0x42b7, 0x40fa, 0x0974, 0x42b7, 0x1c59, 0xbf17, 0x1c3b, 0x42b2, 0x42c7, 0x1feb, 0x419f, 0x24bb, 0x0932, 0x46c4, 0x42fd, 0x16d0, 0x42f3, 0xbac8, 0x125a, 0xb275, 0x18b1, 0x4432, 0x2522, 0xbf6c, 0x43e3, 0xba24, 0xb053, 0x439c, 0xa9a6, 0x1aa2, 0x3eaf, 0x402d, 0x0b2b, 0xa543, 0xbfa0, 0x4055, 0xbf12, 0x4168, 0x437e, 0x1ea7, 0x4022, 0xa4e7, 0xba4b, 0x394d, 0x195c, 0x1ab5, 0x41fd, 0x436d, 0xaa65, 0x2437, 0xbac6, 0x424a, 0xbfca, 0xba0e, 0xbaec, 0x4038, 0x1252, 0x258d, 0x4186, 0x45d2, 0x42a3, 0x45b8, 0x4160, 0xbf3e, 0x3d8d, 0xb2a1, 0xb277, 0xb2b9, 0xba2a, 0x42e5, 0x4149, 0x4345, 0xba37, 0x43a0, 0x4104, 0x20f0, 0xbac7, 0x43d0, 0x42a9, 0x4215, 0x4576, 0x0a5a, 0xb21c, 0x0657, 0xba38, 0x0f44, 0x1b98, 0x1deb, 0x43af, 0x4198, 0x40bf, 0x3af8, 0xbfd4, 0x03ec, 0x2f69, 0xb05c, 0x2d36, 0x1505, 0xb2be, 0x40ba, 0xb016, 0x40e9, 0x0007, 0xbf66, 0xb284, 0xb2fa, 0x19c8, 0x11bc, 0xba48, 0x4172, 0xa0c2, 0x41de, 0x42d9, 0xb224, 0x1e05, 0x42df, 0x1bf1, 0x272b, 0x4143, 0xbf97, 0xba04, 0x43a9, 0x16d4, 0xb2b7, 0xbafe, 0x033a, 0xba53, 0xb2a6, 0x432c, 0x425e, 0x35c4, 0x43d7, 0x43a1, 0xb209, 0x40d7, 0xbad6, 0x434c, 0x4380, 0xbf61, 0x43db, 0xa3c6, 0x4202, 0x41a0, 0x4370, 0x42d2, 0xb241, 0x0725, 0xb24a, 0x41b8, 0x1e71, 0x42dc, 0x419c, 0x1ccf, 0xb267, 0x4427, 0xb2f7, 0xb235, 0x2c94, 0x19eb, 0xb2b2, 0xbf76, 0x3401, 0x41d7, 0x4212, 0x1e3e, 0xae23, 0x3934, 0x4128, 0xb245, 0x1fcb, 0xbfcb, 0x1a32, 0x44dc, 0x41a4, 0x3ec2, 0x4381, 0x318a, 0x408b, 0x4076, 0x42be, 0x4214, 0x0530, 0x4351, 0x2735, 0xad1b, 0x436c, 0x43dc, 0xba34, 0x4276, 0x41eb, 0xb01f, 0x3246, 0x0717, 0x437e, 0x4021, 0x4043, 0xb237, 0x1876, 0x417d, 0x41d4, 0xbf57, 0xba07, 0xb2e7, 0x1f8b, 0xb28c, 0xbf21, 0x4243, 0x4157, 0x3d59, 0x40be, 0xb22b, 0xb21f, 0x2afc, 0x0525, 0x4291, 0x465e, 0x402d, 0x45ce, 0x0f5f, 0x3952, 0xaaf9, 0x414a, 0xbacc, 0x0081, 0x2e90, 0x4280, 0xbfa5, 0x404c, 0x413e, 0xb2d4, 0x38c8, 0xbf0a, 0x3124, 0x402c, 0x404e, 0x3c59, 0x41f1, 0xba4a, 0xbadc, 0x4117, 0xa1c4, 0x414e, 0x46b4, 0x40f7, 0xb251, 0x46a9, 0xa050, 0xb28c, 0x4369, 0x029c, 0x424c, 0x469b, 0x4266, 0x43b8, 0x2c0e, 0xbfbc, 0x1825, 0xadd6, 0x1b78, 0xba75, 0x10ef, 0x26bd, 0xb09b, 0x42b8, 0xba65, 0x3f0f, 0x0476, 0xb0dc, 0xb21f, 0xb02a, 0x1cb4, 0x468d, 0x3cbe, 0xbf29, 0xbad6, 0x439d, 0xb2d8, 0x1fc1, 0x4260, 0x4541, 0xb271, 0xbac0, 0x1d46, 0xb273, 0x197c, 0x4280, 0x426a, 0x1f19, 0x426c, 0xb284, 0x4230, 0xbf60, 0xb2fd, 0xb203, 0x18b1, 0xbf58, 0x39ee, 0x1ff4, 0x27de, 0xbfa0, 0xb27d, 0xbfe0, 0xb21c, 0x4165, 0x404d, 0xb2d9, 0x45c5, 0x4333, 0x1ba5, 0x4568, 0x43d8, 0xb277, 0x1ef0, 0x124f, 0xb251, 0x1d1d, 0xbf4a, 0x409b, 0xb23c, 0x4400, 0x4391, 0x293e, 0x1a99, 0x40be, 0x0314, 0x43bb, 0x41f5, 0xb28c, 0x1db7, 0x40c4, 0xb00c, 0x4175, 0x40af, 0x4291, 0x3db2, 0xa7cb, 0x4031, 0xba26, 0x43fa, 0x188c, 0x403e, 0x0de1, 0x432b, 0xb027, 0x2431, 0xbf74, 0x41e4, 0x432b, 0xb20f, 0x2b39, 0x4352, 0xaff4, 0xb2eb, 0x45ca, 0x4273, 0x4142, 0x4366, 0x40c1, 0x44fb, 0x1930, 0xb2a5, 0x1bf9, 0xb294, 0x42ec, 0x431c, 0x4345, 0xbf55, 0x0d4b, 0xb07f, 0x0095, 0x2cff, 0xb284, 0x14a1, 0x42bb, 0x4643, 0x436c, 0xb2f1, 0x44e8, 0xb23f, 0x4207, 0x2f1e, 0xb2d7, 0xa512, 0xac75, 0x3a91, 0x231d, 0x3c3d, 0x4151, 0x3341, 0x01ad, 0x44d5, 0xbf3c, 0x1763, 0xa0da, 0x41af, 0x1a77, 0x406d, 0x40fa, 0x18ed, 0x429f, 0x1a22, 0x295a, 0x2dbf, 0x4007, 0x0072, 0xbae7, 0x4343, 0x425d, 0xb2db, 0xb2d4, 0xac1e, 0x40cc, 0x1068, 0x46ca, 0x40c0, 0x417f, 0x4025, 0x4121, 0xbf1d, 0xb297, 0x1c35, 0x43f0, 0xba3f, 0x1e51, 0x43c9, 0x40de, 0x435b, 0xba05, 0x42b9, 0xb270, 0xbf05, 0x3d22, 0x4206, 0x1c39, 0xa97f, 0xba7e, 0xba1b, 0x31a6, 0x414f, 0x39ef, 0xb26a, 0xbad8, 0x2fd1, 0x1abe, 0x1f4e, 0x43a4, 0xb289, 0xb069, 0xb256, 0x4150, 0x181b, 0xbf6a, 0xa9e8, 0xb299, 0x260b, 0x1b81, 0x1356, 0x09f9, 0x16e5, 0x4353, 0x0218, 0x41e3, 0x42c2, 0x2b68, 0xba77, 0x2cc6, 0x4577, 0x42d2, 0x212f, 0x42b8, 0x4063, 0xb235, 0x195a, 0x3085, 0xbf69, 0x4208, 0x2c24, 0x0117, 0x27bc, 0x421d, 0x4165, 0x4033, 0xbf65, 0x38d0, 0x3e41, 0x46c4, 0x40d8, 0xb2d5, 0xbf60, 0x1ab8, 0x402b, 0x23ec, 0xbfc0, 0xbf21, 0xba39, 0x4176, 0x22b6, 0xa1ca, 0x4041, 0x1e24, 0x2334, 0xb079, 0x1ac9, 0x428c, 0x43a1, 0x4556, 0x1ebd, 0xa512, 0xba5c, 0x2319, 0x1ffe, 0xb25d, 0x421b, 0xbf9b, 0x4012, 0x41de, 0x41ad, 0xbaee, 0x42c6, 0x41d7, 0xb20a, 0x33f2, 0x42de, 0x41a2, 0x0d16, 0xba7a, 0x4289, 0xba26, 0xbf49, 0xb2ae, 0x129d, 0xb2eb, 0x4223, 0x1864, 0x0aad, 0xbf57, 0x412c, 0x404f, 0xaa07, 0x41c6, 0x40ef, 0x114a, 0x46f8, 0xbac8, 0x45f1, 0xa8a5, 0x4338, 0x43ab, 0x0833, 0x2140, 0x41b6, 0x2a3e, 0xb018, 0x4215, 0xbf05, 0xba24, 0xa61c, 0xbae2, 0x3218, 0x1078, 0xa5bb, 0x3cf2, 0x34b0, 0xbacd, 0xb085, 0xbf6d, 0xbac5, 0x46d2, 0x4335, 0x421e, 0xb2e6, 0x1df5, 0x412e, 0xbf08, 0x4060, 0x1c63, 0x1c85, 0xba0b, 0xb25a, 0x430b, 0xbfbe, 0xb072, 0x4307, 0x43f1, 0x436c, 0x463f, 0x0028, 0x4311, 0xa4ad, 0x4648, 0x4361, 0x4175, 0x228c, 0x42e9, 0x40e8, 0x0f81, 0x081b, 0x4146, 0xbf81, 0x42a1, 0xac30, 0x40f1, 0x4492, 0x4336, 0xb2fb, 0x1b1d, 0xb2ac, 0x23c8, 0x44ad, 0x1f91, 0x43fe, 0x42b7, 0x1bed, 0x1cb1, 0x3518, 0x0864, 0x4183, 0x42de, 0x4307, 0xb283, 0x43af, 0xb2cc, 0xba5f, 0x1411, 0xb298, 0x4071, 0xbf16, 0x40c9, 0x4637, 0x4307, 0xbf53, 0x1a70, 0x40ca, 0xb26b, 0x42e6, 0xb079, 0xa782, 0x1c70, 0x4623, 0x40b1, 0x41f2, 0x46a4, 0x2ac3, 0x4229, 0x3f2d, 0x4302, 0x030f, 0xa7bd, 0xbf81, 0x4040, 0xbafc, 0xa376, 0xb05e, 0xbf6b, 0x42ec, 0xa754, 0x41e9, 0x433d, 0x4325, 0x2462, 0x4205, 0xa968, 0xbff0, 0x00c8, 0x4378, 0x430f, 0x4136, 0x41f5, 0x2f8e, 0x44fa, 0x413c, 0xbfb9, 0xb097, 0xbaf6, 0xb03e, 0x43d0, 0x4770, 0xe7fe + ], + StartRegs = [0x8b2100eb, 0x3af85a8f, 0x0bb662e6, 0x7ac5449f, 0x6c8b9706, 0x2d86ea00, 0xd9186e8c, 0xb3755866, 0x7227be38, 0x7f97e5fb, 0xc176d2f9, 0x1ff0913a, 0xcb8e1a87, 0x6b0408ce, 0x00000000, 0x800001f0 + ], + FinalRegs = [0xffffff72, 0xc176c228, 0x0000008d, 0x00000002, 0x00000000, 0xffffff36, 0x00000000, 0xc176db3c, 0x000016e4, 0x00000000, 0x000017e2, 0x0000206e, 0x00000002, 0xc176c180, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0xbac5, 0x426b, 0x16bc, 0x2d44, 0x43aa, 0xbf7b, 0x43f8, 0x42b9, 0x458b, 0x1f7e, 0xb0ac, 0xb292, 0x42e3, 0xb251, 0xb2dd, 0x1b86, 0x35fd, 0x410c, 0xac53, 0x3357, 0x35fb, 0x4355, 0x413e, 0xb2b9, 0x42f8, 0xbfa3, 0x408f, 0x1d27, 0xb0dd, 0xbf70, 0x2c41, 0x1bb6, 0xbf0d, 0xb208, 0x2cad, 0xb296, 0x4132, 0x4119, 0x411d, 0x403a, 0x4332, 0xb2cb, 0xbac4, 0x4074, 0x403d, 0x18a4, 0x45ae, 0x42c9, 0xb043, 0xb0b4, 0x40c4, 0xba53, 0x409b, 0xbf63, 0x1a75, 0xb040, 0x4166, 0x3f7e, 0xa55e, 0x428d, 0x4235, 0x459c, 0x42d5, 0x4111, 0x42dc, 0x43ca, 0x4049, 0x4091, 0x29d5, 0xbf61, 0x40cd, 0x422d, 0x4170, 0x4541, 0x1062, 0x1cf3, 0x4248, 0x422e, 0x1cdc, 0xabfc, 0xa3f2, 0x0677, 0x28d6, 0x143c, 0xb2d6, 0xba55, 0xb261, 0x41f7, 0x439c, 0x2b7b, 0x1c82, 0xb008, 0x2432, 0xbf62, 0xa8ee, 0x37a9, 0x1e86, 0xa85b, 0xb25c, 0x434c, 0xbf96, 0x423e, 0x4093, 0x44e1, 0x42ff, 0x41bf, 0xa8c3, 0x43cb, 0x3a77, 0x2b99, 0x0976, 0x3160, 0x4030, 0xb2db, 0xba36, 0x3ef4, 0x4617, 0x1ab5, 0x02d3, 0xb018, 0x43ad, 0x40cd, 0xbf89, 0x4390, 0x15d6, 0x4255, 0x46dc, 0xac0e, 0x11b4, 0xbf05, 0xac46, 0x4392, 0xbac5, 0x1842, 0x40df, 0x4113, 0x4126, 0x1cac, 0x3e49, 0x4051, 0xb2cf, 0x43b7, 0xbf78, 0x07e7, 0xb210, 0xb26b, 0x1f7b, 0x03b0, 0x42db, 0x2d35, 0x43eb, 0xb23a, 0x418a, 0xaddb, 0x1c63, 0xbf33, 0x35a5, 0x4349, 0x0da2, 0x428e, 0x4132, 0x40f8, 0xba40, 0x41e8, 0x40e8, 0x2f5d, 0x417c, 0x1bc0, 0x41b3, 0xaa64, 0x1b12, 0x0f9c, 0x435b, 0x2204, 0x42d7, 0x19ce, 0x4059, 0x40b3, 0xad3a, 0x43a1, 0x44b9, 0x42f0, 0xb2d8, 0x2938, 0xbf8c, 0x0c53, 0x41c7, 0x4177, 0xbaca, 0x40a7, 0x4607, 0x4238, 0x4100, 0x14e5, 0x4271, 0x4148, 0x24b6, 0x108d, 0xb234, 0xafb1, 0x20a6, 0xbf2e, 0x1ff8, 0xba48, 0x42a8, 0x43a6, 0x40f7, 0x3723, 0x1e21, 0x4004, 0x14b3, 0xbae8, 0x43f2, 0x4223, 0xa5a7, 0x4021, 0xbf60, 0xb2dd, 0xb2fa, 0x4144, 0xb284, 0x135c, 0xbf8b, 0x40a8, 0x4238, 0xb26e, 0x42b4, 0x43c5, 0x3a5f, 0x43e5, 0x2fe1, 0xbf5e, 0x039d, 0x3102, 0x4076, 0x40ec, 0x1e43, 0xbfc1, 0x1f10, 0x212d, 0xa889, 0xb2af, 0x1ccd, 0xb22b, 0x4373, 0x09c1, 0xbf49, 0x40ab, 0xb2f7, 0x4037, 0xb28e, 0x41fd, 0x0334, 0x1a33, 0x41ce, 0x462f, 0x41a4, 0x4181, 0x1ac3, 0xbf46, 0xb054, 0xaf5f, 0x41f6, 0x3343, 0x42e6, 0x4281, 0x0710, 0x0255, 0x41fa, 0x43ca, 0x1bf1, 0x4138, 0x2a43, 0x4388, 0xb0b1, 0xb2d3, 0x41ef, 0x43f1, 0x4090, 0x4195, 0x4151, 0x15b9, 0x1eb1, 0x1923, 0x1b16, 0x4352, 0xbfde, 0x42e7, 0x4130, 0xb248, 0x43a6, 0x460a, 0xbf39, 0x1a10, 0x4375, 0x4089, 0xbacc, 0x26f9, 0x4582, 0xbf6d, 0xb20a, 0xba36, 0x41c7, 0xb22a, 0xb05e, 0xba3f, 0x1ffe, 0x34c2, 0xb244, 0x2181, 0xb2f0, 0x3c08, 0x08a6, 0xba2d, 0x4221, 0x33fb, 0x4162, 0x439d, 0x43e9, 0x1eb8, 0x430e, 0x1f07, 0xbadb, 0xba6e, 0x02d2, 0xbf4e, 0xb294, 0xb2a7, 0xba6c, 0x41a4, 0x4647, 0xb231, 0x41c2, 0xb29e, 0x0648, 0x0ca8, 0x4273, 0x425d, 0xbf33, 0xa38e, 0xba5e, 0x407a, 0x1415, 0x3523, 0x4023, 0x2600, 0x4029, 0x426a, 0xb25a, 0xb2c1, 0x1b6e, 0x42aa, 0x4040, 0xb2bd, 0xab1b, 0x40de, 0xb05c, 0x427f, 0xbf2e, 0xb004, 0xba52, 0x1b44, 0x413d, 0x4147, 0x41a7, 0xbac9, 0xb27d, 0x1c52, 0x42aa, 0x1c6e, 0x43d7, 0xb04a, 0x4676, 0x1f18, 0x41fe, 0x42db, 0x4252, 0xbf4d, 0xb098, 0x3625, 0xb29f, 0x43c0, 0xa08e, 0xbf8c, 0x4317, 0xba78, 0x40ae, 0x3641, 0x42c7, 0xaf31, 0x40ae, 0x4360, 0x4066, 0x1a32, 0x4138, 0xba1f, 0xba21, 0x23aa, 0xba5f, 0x45e9, 0xba0c, 0xbfc6, 0xb2ad, 0x4389, 0x0aea, 0x0da6, 0x17ad, 0x1de4, 0x4247, 0x4040, 0xb2e0, 0x43d1, 0x1a71, 0xb088, 0xba62, 0x4034, 0x4077, 0x40dc, 0x1a7b, 0x05a4, 0xba3d, 0x4424, 0xbf55, 0xbfb0, 0x1408, 0x408c, 0x43c3, 0x42dd, 0x4464, 0xa818, 0x1161, 0x19ea, 0xb0ce, 0x24ce, 0xb2af, 0x15fa, 0x027b, 0xba01, 0xa369, 0x014f, 0x4036, 0x43ed, 0x40e5, 0x320e, 0x4214, 0xbaed, 0x275f, 0x400c, 0xba13, 0xa866, 0xbfb0, 0x41b7, 0xbfcd, 0x2c19, 0xbaea, 0x421e, 0xb296, 0xbf42, 0x42cc, 0x1726, 0xb08d, 0x4314, 0xbf87, 0x4107, 0x0425, 0x4586, 0x3b4d, 0x40c1, 0xbafc, 0xb0d5, 0xbf1e, 0x0b9a, 0xba4c, 0xb0e4, 0x3056, 0xbf80, 0xafd4, 0xb2fb, 0x4395, 0x4669, 0xb296, 0x1914, 0x4009, 0x2ac8, 0x4102, 0x4116, 0x40c1, 0x4130, 0x4493, 0x1bc0, 0xb250, 0x463b, 0x0469, 0x424b, 0x1b6b, 0x3e46, 0xb2fa, 0x4151, 0xbfac, 0x44d9, 0x1c7a, 0x1a00, 0x420b, 0xbaf5, 0x407e, 0xb21e, 0xad7b, 0x425c, 0xbf7a, 0x1db5, 0xae92, 0x1b35, 0x1ea1, 0x2cf5, 0x1af1, 0x4210, 0xbaf4, 0x42a0, 0x4124, 0x41dd, 0x4215, 0x13b4, 0x43e6, 0xbfa4, 0x416b, 0x1e6a, 0xbfc0, 0x0d58, 0x40c0, 0x454e, 0x0202, 0x40b5, 0xb276, 0x4333, 0x4574, 0xa2ac, 0x2a76, 0x425d, 0x40fc, 0x40da, 0xba47, 0x2428, 0xbf19, 0xb2a3, 0xb269, 0x2843, 0x3a89, 0x1f48, 0xbf7f, 0x416c, 0x4208, 0x4356, 0x43f2, 0xbae5, 0xb274, 0x4037, 0xb237, 0xaa79, 0x42d2, 0x1d34, 0x426f, 0xb236, 0x43a3, 0x4200, 0xbf60, 0x18b8, 0x1d7f, 0xbf8d, 0xb273, 0x4190, 0x3d1e, 0x415c, 0xba38, 0xbfc0, 0x13f8, 0x4117, 0xba3e, 0xb274, 0xbfb5, 0x4077, 0xb279, 0x4009, 0x3ac8, 0xaa7c, 0x0983, 0xbf8b, 0xba24, 0xb27b, 0x1e7e, 0xb0d1, 0x42c2, 0xaba6, 0xba50, 0x1eea, 0x056b, 0xa171, 0x43b3, 0x35ca, 0xb0e3, 0xb0c5, 0x08e0, 0xb22e, 0x414b, 0x41e6, 0x40bc, 0x2800, 0x402f, 0x409f, 0x164c, 0x44b3, 0x4154, 0x4158, 0x418a, 0x4028, 0xbf94, 0xb28b, 0xaff1, 0x41ec, 0x0d8d, 0x41a2, 0x1b3b, 0xaf95, 0xba4a, 0x1ee5, 0x40cd, 0x1840, 0xae03, 0xb0bc, 0x4643, 0x434f, 0x0c96, 0xba07, 0x3748, 0x46d8, 0xbf26, 0x4195, 0x0b00, 0x41ab, 0x4315, 0x405a, 0x4145, 0x14f4, 0xa261, 0x42dc, 0x3318, 0x424c, 0x1fdc, 0x0500, 0x1acf, 0xba4d, 0x1f49, 0x40c1, 0x1825, 0x42cf, 0x4175, 0x4097, 0x293b, 0xba0d, 0x4014, 0x207a, 0x407d, 0x4361, 0x437a, 0xbf4b, 0x4086, 0x41a0, 0x3c12, 0xb0ca, 0x460c, 0x4162, 0xb24d, 0x425e, 0xb2cd, 0x0dcb, 0x13ba, 0x40c2, 0x41af, 0x29cb, 0x0956, 0x41aa, 0xb216, 0x4112, 0x4349, 0x4431, 0x2734, 0x422e, 0xbf2a, 0x40b8, 0x4649, 0xb068, 0x438c, 0x426d, 0xabc5, 0xb0a7, 0xbf9c, 0x4671, 0x42e1, 0x43ee, 0xb02a, 0x4217, 0xb0ce, 0x4026, 0x4269, 0x4374, 0x3931, 0x02f5, 0x42c6, 0x43aa, 0x2532, 0x2c53, 0x4231, 0xb2dd, 0x43a9, 0x1c6d, 0x4274, 0x2948, 0x4162, 0xbfa3, 0x427f, 0xb01c, 0x0396, 0x4174, 0x1327, 0x36ab, 0x41f4, 0x41b6, 0x3fda, 0x4648, 0x4095, 0x1c98, 0x41a0, 0xbf56, 0x4144, 0xb0dd, 0xb28c, 0x42d5, 0x4280, 0xbf81, 0xaccd, 0x45ee, 0x4145, 0x4342, 0xbfb7, 0x4261, 0xba45, 0xb01f, 0x418a, 0x439f, 0x42bf, 0x43fc, 0xba22, 0xbfe0, 0x2446, 0xbfde, 0x1c19, 0xb0f5, 0xba68, 0x1b4a, 0x00d7, 0x4377, 0x425d, 0x46db, 0x411e, 0xb2b8, 0x406a, 0x1945, 0x43b9, 0xa423, 0x42af, 0xbf76, 0x412e, 0x1fa8, 0xb25f, 0x4591, 0xb27f, 0x461b, 0x41e3, 0x0cc4, 0x0236, 0x4157, 0x288b, 0x05d7, 0xbf87, 0xba66, 0x43bf, 0xba33, 0x18c4, 0x416c, 0xbacb, 0x0077, 0x398d, 0x414d, 0x1fc4, 0x447d, 0xbaef, 0xb2a8, 0x1833, 0xba42, 0xbf51, 0x41c6, 0x43ae, 0x420b, 0x2a87, 0x437e, 0x4206, 0x42ff, 0x4221, 0xa594, 0x2023, 0x4311, 0xb241, 0x416f, 0x40e2, 0x0418, 0x422b, 0x43c2, 0x4385, 0xbf81, 0xb284, 0x408d, 0x40ee, 0x4377, 0x43b3, 0x416d, 0x4353, 0x432b, 0x44a1, 0x43d3, 0xbf81, 0xbaf1, 0x40a6, 0x42c2, 0x0cf8, 0x4068, 0x1ff8, 0xb231, 0x41f9, 0x430f, 0x43a0, 0x1705, 0x0110, 0x09ac, 0xbace, 0x4230, 0x46d4, 0xaec3, 0x4353, 0x416e, 0xb20e, 0x43fc, 0xba7d, 0xbf17, 0x41b0, 0x33b5, 0xba1c, 0x4046, 0x400a, 0xbf8f, 0xb0bd, 0x42d2, 0xacb0, 0x1ddc, 0xb2f1, 0x40a3, 0x4082, 0x4318, 0x2d71, 0x19ec, 0xb0fd, 0x4336, 0xb2cd, 0x40cc, 0xaba4, 0x1a86, 0x42f0, 0x4668, 0x38ff, 0x1e05, 0x4040, 0x184a, 0x4015, 0xbf38, 0x4242, 0x4626, 0xad8d, 0x43c2, 0xb277, 0x4030, 0xbae2, 0x41a5, 0x4215, 0x1513, 0xbf6a, 0x4142, 0x43ba, 0x44f0, 0x4178, 0x2703, 0x428d, 0x42c0, 0x2ffb, 0x438b, 0x42cd, 0x40b5, 0x4435, 0x445d, 0xa385, 0x4082, 0x4148, 0xb2eb, 0x022f, 0x423b, 0x42f5, 0xbf5f, 0x04f0, 0xb098, 0x40a5, 0xba1f, 0x44c1, 0x3b57, 0x4094, 0x41ed, 0xb208, 0x3d9b, 0x0060, 0xb0d1, 0x4352, 0x2507, 0x4282, 0x4273, 0xa9fa, 0xa561, 0xb2b5, 0x3a86, 0x4076, 0xa2e9, 0xbfc3, 0x2a84, 0xbad6, 0xba74, 0x4361, 0x074c, 0x4169, 0xba42, 0xb086, 0xb070, 0xb23e, 0x3b35, 0x387f, 0x4303, 0x1fb5, 0x4267, 0xba3a, 0xbade, 0xbfa8, 0x41aa, 0x41e6, 0xbf80, 0x43fb, 0xbf90, 0x1deb, 0x43bc, 0x4019, 0xb21d, 0x409f, 0xb24c, 0x197a, 0x4264, 0xb2c1, 0xba06, 0xba7d, 0xb00e, 0x43e2, 0x4624, 0xabe7, 0x4348, 0x42b3, 0xbfc5, 0xb209, 0x40ef, 0x43e5, 0x3ada, 0x3431, 0x414a, 0x41de, 0x136c, 0xb01d, 0x413b, 0xba68, 0xbfa0, 0x1ecb, 0x402f, 0x43df, 0x43ca, 0x1de1, 0xbf34, 0x1d54, 0x2ffe, 0x43bf, 0x1dcb, 0x41fd, 0x438d, 0xb2c1, 0xbf8c, 0xaf57, 0x46d3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x83fd023f, 0x982a2ada, 0x932883b1, 0x8b07a16b, 0x6509d713, 0x387a315c, 0x306e7acf, 0x817d06d5, 0xc0872b3a, 0x0acac3f9, 0x3a05fe03, 0x78554f05, 0x868e89dd, 0x6a74d709, 0x00000000, 0x400001f0 }, - FinalRegs = new uint[] { 0x80000000, 0x00000000, 0xffffff4a, 0x0000040e, 0xffffff4f, 0x00800000, 0x5a9b0180, 0x00000000, 0x78554db0, 0x8204e12c, 0x3a05fe03, 0x3a05fe03, 0x3a05fe03, 0x6a74d1d9, 0x00000000, 0x000001d0 }, + Instructions = [0xbac5, 0x426b, 0x16bc, 0x2d44, 0x43aa, 0xbf7b, 0x43f8, 0x42b9, 0x458b, 0x1f7e, 0xb0ac, 0xb292, 0x42e3, 0xb251, 0xb2dd, 0x1b86, 0x35fd, 0x410c, 0xac53, 0x3357, 0x35fb, 0x4355, 0x413e, 0xb2b9, 0x42f8, 0xbfa3, 0x408f, 0x1d27, 0xb0dd, 0xbf70, 0x2c41, 0x1bb6, 0xbf0d, 0xb208, 0x2cad, 0xb296, 0x4132, 0x4119, 0x411d, 0x403a, 0x4332, 0xb2cb, 0xbac4, 0x4074, 0x403d, 0x18a4, 0x45ae, 0x42c9, 0xb043, 0xb0b4, 0x40c4, 0xba53, 0x409b, 0xbf63, 0x1a75, 0xb040, 0x4166, 0x3f7e, 0xa55e, 0x428d, 0x4235, 0x459c, 0x42d5, 0x4111, 0x42dc, 0x43ca, 0x4049, 0x4091, 0x29d5, 0xbf61, 0x40cd, 0x422d, 0x4170, 0x4541, 0x1062, 0x1cf3, 0x4248, 0x422e, 0x1cdc, 0xabfc, 0xa3f2, 0x0677, 0x28d6, 0x143c, 0xb2d6, 0xba55, 0xb261, 0x41f7, 0x439c, 0x2b7b, 0x1c82, 0xb008, 0x2432, 0xbf62, 0xa8ee, 0x37a9, 0x1e86, 0xa85b, 0xb25c, 0x434c, 0xbf96, 0x423e, 0x4093, 0x44e1, 0x42ff, 0x41bf, 0xa8c3, 0x43cb, 0x3a77, 0x2b99, 0x0976, 0x3160, 0x4030, 0xb2db, 0xba36, 0x3ef4, 0x4617, 0x1ab5, 0x02d3, 0xb018, 0x43ad, 0x40cd, 0xbf89, 0x4390, 0x15d6, 0x4255, 0x46dc, 0xac0e, 0x11b4, 0xbf05, 0xac46, 0x4392, 0xbac5, 0x1842, 0x40df, 0x4113, 0x4126, 0x1cac, 0x3e49, 0x4051, 0xb2cf, 0x43b7, 0xbf78, 0x07e7, 0xb210, 0xb26b, 0x1f7b, 0x03b0, 0x42db, 0x2d35, 0x43eb, 0xb23a, 0x418a, 0xaddb, 0x1c63, 0xbf33, 0x35a5, 0x4349, 0x0da2, 0x428e, 0x4132, 0x40f8, 0xba40, 0x41e8, 0x40e8, 0x2f5d, 0x417c, 0x1bc0, 0x41b3, 0xaa64, 0x1b12, 0x0f9c, 0x435b, 0x2204, 0x42d7, 0x19ce, 0x4059, 0x40b3, 0xad3a, 0x43a1, 0x44b9, 0x42f0, 0xb2d8, 0x2938, 0xbf8c, 0x0c53, 0x41c7, 0x4177, 0xbaca, 0x40a7, 0x4607, 0x4238, 0x4100, 0x14e5, 0x4271, 0x4148, 0x24b6, 0x108d, 0xb234, 0xafb1, 0x20a6, 0xbf2e, 0x1ff8, 0xba48, 0x42a8, 0x43a6, 0x40f7, 0x3723, 0x1e21, 0x4004, 0x14b3, 0xbae8, 0x43f2, 0x4223, 0xa5a7, 0x4021, 0xbf60, 0xb2dd, 0xb2fa, 0x4144, 0xb284, 0x135c, 0xbf8b, 0x40a8, 0x4238, 0xb26e, 0x42b4, 0x43c5, 0x3a5f, 0x43e5, 0x2fe1, 0xbf5e, 0x039d, 0x3102, 0x4076, 0x40ec, 0x1e43, 0xbfc1, 0x1f10, 0x212d, 0xa889, 0xb2af, 0x1ccd, 0xb22b, 0x4373, 0x09c1, 0xbf49, 0x40ab, 0xb2f7, 0x4037, 0xb28e, 0x41fd, 0x0334, 0x1a33, 0x41ce, 0x462f, 0x41a4, 0x4181, 0x1ac3, 0xbf46, 0xb054, 0xaf5f, 0x41f6, 0x3343, 0x42e6, 0x4281, 0x0710, 0x0255, 0x41fa, 0x43ca, 0x1bf1, 0x4138, 0x2a43, 0x4388, 0xb0b1, 0xb2d3, 0x41ef, 0x43f1, 0x4090, 0x4195, 0x4151, 0x15b9, 0x1eb1, 0x1923, 0x1b16, 0x4352, 0xbfde, 0x42e7, 0x4130, 0xb248, 0x43a6, 0x460a, 0xbf39, 0x1a10, 0x4375, 0x4089, 0xbacc, 0x26f9, 0x4582, 0xbf6d, 0xb20a, 0xba36, 0x41c7, 0xb22a, 0xb05e, 0xba3f, 0x1ffe, 0x34c2, 0xb244, 0x2181, 0xb2f0, 0x3c08, 0x08a6, 0xba2d, 0x4221, 0x33fb, 0x4162, 0x439d, 0x43e9, 0x1eb8, 0x430e, 0x1f07, 0xbadb, 0xba6e, 0x02d2, 0xbf4e, 0xb294, 0xb2a7, 0xba6c, 0x41a4, 0x4647, 0xb231, 0x41c2, 0xb29e, 0x0648, 0x0ca8, 0x4273, 0x425d, 0xbf33, 0xa38e, 0xba5e, 0x407a, 0x1415, 0x3523, 0x4023, 0x2600, 0x4029, 0x426a, 0xb25a, 0xb2c1, 0x1b6e, 0x42aa, 0x4040, 0xb2bd, 0xab1b, 0x40de, 0xb05c, 0x427f, 0xbf2e, 0xb004, 0xba52, 0x1b44, 0x413d, 0x4147, 0x41a7, 0xbac9, 0xb27d, 0x1c52, 0x42aa, 0x1c6e, 0x43d7, 0xb04a, 0x4676, 0x1f18, 0x41fe, 0x42db, 0x4252, 0xbf4d, 0xb098, 0x3625, 0xb29f, 0x43c0, 0xa08e, 0xbf8c, 0x4317, 0xba78, 0x40ae, 0x3641, 0x42c7, 0xaf31, 0x40ae, 0x4360, 0x4066, 0x1a32, 0x4138, 0xba1f, 0xba21, 0x23aa, 0xba5f, 0x45e9, 0xba0c, 0xbfc6, 0xb2ad, 0x4389, 0x0aea, 0x0da6, 0x17ad, 0x1de4, 0x4247, 0x4040, 0xb2e0, 0x43d1, 0x1a71, 0xb088, 0xba62, 0x4034, 0x4077, 0x40dc, 0x1a7b, 0x05a4, 0xba3d, 0x4424, 0xbf55, 0xbfb0, 0x1408, 0x408c, 0x43c3, 0x42dd, 0x4464, 0xa818, 0x1161, 0x19ea, 0xb0ce, 0x24ce, 0xb2af, 0x15fa, 0x027b, 0xba01, 0xa369, 0x014f, 0x4036, 0x43ed, 0x40e5, 0x320e, 0x4214, 0xbaed, 0x275f, 0x400c, 0xba13, 0xa866, 0xbfb0, 0x41b7, 0xbfcd, 0x2c19, 0xbaea, 0x421e, 0xb296, 0xbf42, 0x42cc, 0x1726, 0xb08d, 0x4314, 0xbf87, 0x4107, 0x0425, 0x4586, 0x3b4d, 0x40c1, 0xbafc, 0xb0d5, 0xbf1e, 0x0b9a, 0xba4c, 0xb0e4, 0x3056, 0xbf80, 0xafd4, 0xb2fb, 0x4395, 0x4669, 0xb296, 0x1914, 0x4009, 0x2ac8, 0x4102, 0x4116, 0x40c1, 0x4130, 0x4493, 0x1bc0, 0xb250, 0x463b, 0x0469, 0x424b, 0x1b6b, 0x3e46, 0xb2fa, 0x4151, 0xbfac, 0x44d9, 0x1c7a, 0x1a00, 0x420b, 0xbaf5, 0x407e, 0xb21e, 0xad7b, 0x425c, 0xbf7a, 0x1db5, 0xae92, 0x1b35, 0x1ea1, 0x2cf5, 0x1af1, 0x4210, 0xbaf4, 0x42a0, 0x4124, 0x41dd, 0x4215, 0x13b4, 0x43e6, 0xbfa4, 0x416b, 0x1e6a, 0xbfc0, 0x0d58, 0x40c0, 0x454e, 0x0202, 0x40b5, 0xb276, 0x4333, 0x4574, 0xa2ac, 0x2a76, 0x425d, 0x40fc, 0x40da, 0xba47, 0x2428, 0xbf19, 0xb2a3, 0xb269, 0x2843, 0x3a89, 0x1f48, 0xbf7f, 0x416c, 0x4208, 0x4356, 0x43f2, 0xbae5, 0xb274, 0x4037, 0xb237, 0xaa79, 0x42d2, 0x1d34, 0x426f, 0xb236, 0x43a3, 0x4200, 0xbf60, 0x18b8, 0x1d7f, 0xbf8d, 0xb273, 0x4190, 0x3d1e, 0x415c, 0xba38, 0xbfc0, 0x13f8, 0x4117, 0xba3e, 0xb274, 0xbfb5, 0x4077, 0xb279, 0x4009, 0x3ac8, 0xaa7c, 0x0983, 0xbf8b, 0xba24, 0xb27b, 0x1e7e, 0xb0d1, 0x42c2, 0xaba6, 0xba50, 0x1eea, 0x056b, 0xa171, 0x43b3, 0x35ca, 0xb0e3, 0xb0c5, 0x08e0, 0xb22e, 0x414b, 0x41e6, 0x40bc, 0x2800, 0x402f, 0x409f, 0x164c, 0x44b3, 0x4154, 0x4158, 0x418a, 0x4028, 0xbf94, 0xb28b, 0xaff1, 0x41ec, 0x0d8d, 0x41a2, 0x1b3b, 0xaf95, 0xba4a, 0x1ee5, 0x40cd, 0x1840, 0xae03, 0xb0bc, 0x4643, 0x434f, 0x0c96, 0xba07, 0x3748, 0x46d8, 0xbf26, 0x4195, 0x0b00, 0x41ab, 0x4315, 0x405a, 0x4145, 0x14f4, 0xa261, 0x42dc, 0x3318, 0x424c, 0x1fdc, 0x0500, 0x1acf, 0xba4d, 0x1f49, 0x40c1, 0x1825, 0x42cf, 0x4175, 0x4097, 0x293b, 0xba0d, 0x4014, 0x207a, 0x407d, 0x4361, 0x437a, 0xbf4b, 0x4086, 0x41a0, 0x3c12, 0xb0ca, 0x460c, 0x4162, 0xb24d, 0x425e, 0xb2cd, 0x0dcb, 0x13ba, 0x40c2, 0x41af, 0x29cb, 0x0956, 0x41aa, 0xb216, 0x4112, 0x4349, 0x4431, 0x2734, 0x422e, 0xbf2a, 0x40b8, 0x4649, 0xb068, 0x438c, 0x426d, 0xabc5, 0xb0a7, 0xbf9c, 0x4671, 0x42e1, 0x43ee, 0xb02a, 0x4217, 0xb0ce, 0x4026, 0x4269, 0x4374, 0x3931, 0x02f5, 0x42c6, 0x43aa, 0x2532, 0x2c53, 0x4231, 0xb2dd, 0x43a9, 0x1c6d, 0x4274, 0x2948, 0x4162, 0xbfa3, 0x427f, 0xb01c, 0x0396, 0x4174, 0x1327, 0x36ab, 0x41f4, 0x41b6, 0x3fda, 0x4648, 0x4095, 0x1c98, 0x41a0, 0xbf56, 0x4144, 0xb0dd, 0xb28c, 0x42d5, 0x4280, 0xbf81, 0xaccd, 0x45ee, 0x4145, 0x4342, 0xbfb7, 0x4261, 0xba45, 0xb01f, 0x418a, 0x439f, 0x42bf, 0x43fc, 0xba22, 0xbfe0, 0x2446, 0xbfde, 0x1c19, 0xb0f5, 0xba68, 0x1b4a, 0x00d7, 0x4377, 0x425d, 0x46db, 0x411e, 0xb2b8, 0x406a, 0x1945, 0x43b9, 0xa423, 0x42af, 0xbf76, 0x412e, 0x1fa8, 0xb25f, 0x4591, 0xb27f, 0x461b, 0x41e3, 0x0cc4, 0x0236, 0x4157, 0x288b, 0x05d7, 0xbf87, 0xba66, 0x43bf, 0xba33, 0x18c4, 0x416c, 0xbacb, 0x0077, 0x398d, 0x414d, 0x1fc4, 0x447d, 0xbaef, 0xb2a8, 0x1833, 0xba42, 0xbf51, 0x41c6, 0x43ae, 0x420b, 0x2a87, 0x437e, 0x4206, 0x42ff, 0x4221, 0xa594, 0x2023, 0x4311, 0xb241, 0x416f, 0x40e2, 0x0418, 0x422b, 0x43c2, 0x4385, 0xbf81, 0xb284, 0x408d, 0x40ee, 0x4377, 0x43b3, 0x416d, 0x4353, 0x432b, 0x44a1, 0x43d3, 0xbf81, 0xbaf1, 0x40a6, 0x42c2, 0x0cf8, 0x4068, 0x1ff8, 0xb231, 0x41f9, 0x430f, 0x43a0, 0x1705, 0x0110, 0x09ac, 0xbace, 0x4230, 0x46d4, 0xaec3, 0x4353, 0x416e, 0xb20e, 0x43fc, 0xba7d, 0xbf17, 0x41b0, 0x33b5, 0xba1c, 0x4046, 0x400a, 0xbf8f, 0xb0bd, 0x42d2, 0xacb0, 0x1ddc, 0xb2f1, 0x40a3, 0x4082, 0x4318, 0x2d71, 0x19ec, 0xb0fd, 0x4336, 0xb2cd, 0x40cc, 0xaba4, 0x1a86, 0x42f0, 0x4668, 0x38ff, 0x1e05, 0x4040, 0x184a, 0x4015, 0xbf38, 0x4242, 0x4626, 0xad8d, 0x43c2, 0xb277, 0x4030, 0xbae2, 0x41a5, 0x4215, 0x1513, 0xbf6a, 0x4142, 0x43ba, 0x44f0, 0x4178, 0x2703, 0x428d, 0x42c0, 0x2ffb, 0x438b, 0x42cd, 0x40b5, 0x4435, 0x445d, 0xa385, 0x4082, 0x4148, 0xb2eb, 0x022f, 0x423b, 0x42f5, 0xbf5f, 0x04f0, 0xb098, 0x40a5, 0xba1f, 0x44c1, 0x3b57, 0x4094, 0x41ed, 0xb208, 0x3d9b, 0x0060, 0xb0d1, 0x4352, 0x2507, 0x4282, 0x4273, 0xa9fa, 0xa561, 0xb2b5, 0x3a86, 0x4076, 0xa2e9, 0xbfc3, 0x2a84, 0xbad6, 0xba74, 0x4361, 0x074c, 0x4169, 0xba42, 0xb086, 0xb070, 0xb23e, 0x3b35, 0x387f, 0x4303, 0x1fb5, 0x4267, 0xba3a, 0xbade, 0xbfa8, 0x41aa, 0x41e6, 0xbf80, 0x43fb, 0xbf90, 0x1deb, 0x43bc, 0x4019, 0xb21d, 0x409f, 0xb24c, 0x197a, 0x4264, 0xb2c1, 0xba06, 0xba7d, 0xb00e, 0x43e2, 0x4624, 0xabe7, 0x4348, 0x42b3, 0xbfc5, 0xb209, 0x40ef, 0x43e5, 0x3ada, 0x3431, 0x414a, 0x41de, 0x136c, 0xb01d, 0x413b, 0xba68, 0xbfa0, 0x1ecb, 0x402f, 0x43df, 0x43ca, 0x1de1, 0xbf34, 0x1d54, 0x2ffe, 0x43bf, 0x1dcb, 0x41fd, 0x438d, 0xb2c1, 0xbf8c, 0xaf57, 0x46d3, 0x4770, 0xe7fe + ], + StartRegs = [0x83fd023f, 0x982a2ada, 0x932883b1, 0x8b07a16b, 0x6509d713, 0x387a315c, 0x306e7acf, 0x817d06d5, 0xc0872b3a, 0x0acac3f9, 0x3a05fe03, 0x78554f05, 0x868e89dd, 0x6a74d709, 0x00000000, 0x400001f0 + ], + FinalRegs = [0x80000000, 0x00000000, 0xffffff4a, 0x0000040e, 0xffffff4f, 0x00800000, 0x5a9b0180, 0x00000000, 0x78554db0, 0x8204e12c, 0x3a05fe03, 0x3a05fe03, 0x3a05fe03, 0x6a74d1d9, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x3ec5, 0x42d3, 0x06b4, 0xbf80, 0x430d, 0x40b3, 0x3a02, 0x43fd, 0x1ef3, 0x4051, 0x426b, 0xa108, 0xbf48, 0xba7c, 0xba08, 0x2831, 0xb055, 0xbad1, 0xb278, 0x0b30, 0xbff0, 0xa224, 0x1beb, 0x24d4, 0x1873, 0xb2c9, 0x44d9, 0x1eb9, 0x4086, 0xb2b6, 0x4172, 0x40e2, 0x1f7c, 0x403a, 0xbf9c, 0xa542, 0x19da, 0x429c, 0x42c9, 0x431d, 0x1d07, 0xb059, 0x3791, 0x306d, 0xa7cc, 0xb28a, 0x43c8, 0xbf62, 0xb02d, 0xba06, 0x1b78, 0x21ea, 0x41b6, 0xbfae, 0x0ca8, 0x1ae7, 0x4307, 0x39e3, 0x1e5e, 0x03f8, 0x04c8, 0x427d, 0x0676, 0x3256, 0x1b57, 0xb080, 0xb2cb, 0x418d, 0xb2ae, 0xbf51, 0x412f, 0xba3c, 0x1916, 0x4198, 0x40da, 0x3425, 0x43bb, 0x4339, 0xbf59, 0x42ff, 0x3058, 0x4108, 0xba09, 0x1c3b, 0x1f5b, 0x3703, 0x404a, 0x4259, 0x40b3, 0x40a8, 0x3e59, 0xa7ab, 0xbf66, 0x404f, 0x42bc, 0xbaf0, 0x22c3, 0xbfc0, 0xb03d, 0x4018, 0x1a56, 0x4383, 0x4446, 0x42c1, 0xb292, 0x246e, 0x4426, 0x1aec, 0x1fa7, 0xbf07, 0x3231, 0x4116, 0x1177, 0x45c6, 0x3f2b, 0xa87c, 0x4170, 0xba41, 0x436e, 0x4012, 0x4553, 0xadc9, 0xae57, 0x4034, 0xbaf0, 0xa094, 0x293a, 0x412d, 0x4145, 0xbfc7, 0xb0ed, 0x164e, 0x2376, 0x19ae, 0x404e, 0x338a, 0x42a5, 0xbad0, 0xb275, 0x4217, 0x40c3, 0x40a8, 0x4015, 0x1ce6, 0xb2f5, 0x435d, 0x403b, 0xaaed, 0x41e0, 0x1b07, 0x4390, 0x08eb, 0x2e05, 0x41c0, 0x193f, 0x421f, 0x2648, 0x4074, 0xa3c0, 0xbf0d, 0x0eb2, 0x29cd, 0x403b, 0xafe2, 0xba0a, 0xbff0, 0x40db, 0x1f18, 0xba01, 0xbf90, 0xb0e6, 0xb096, 0xbaf6, 0xbf90, 0x18a5, 0xbfbb, 0x40eb, 0x1d3b, 0x4150, 0x1993, 0xbf9d, 0x413c, 0xb2e0, 0x1b5d, 0x415a, 0xb244, 0x0152, 0xb2ed, 0x19ce, 0xba30, 0xba2e, 0xb277, 0xb271, 0x0387, 0xa74d, 0x4088, 0x4141, 0x4226, 0xbf5c, 0x46e2, 0x0897, 0x41c1, 0x428a, 0xb272, 0x1e00, 0x42d3, 0xb297, 0xba46, 0x40e1, 0x18fb, 0xbf0b, 0xba08, 0xb222, 0xbfb0, 0xbacf, 0x1a87, 0x428a, 0x42ee, 0x414c, 0x4606, 0x4375, 0x45db, 0x4171, 0x40f1, 0xb297, 0x4133, 0x3d66, 0x4206, 0x43ec, 0x43f8, 0xbf2e, 0xbfc0, 0xba27, 0x43ef, 0x407f, 0xbaef, 0x4306, 0x4350, 0x1e3c, 0x4085, 0xb25f, 0x4039, 0xb2dd, 0x40e1, 0x462b, 0x4633, 0x4048, 0x17ca, 0xba44, 0xbfa3, 0x4208, 0xb282, 0xba26, 0xb2da, 0x00d2, 0x4151, 0x40f7, 0x42e9, 0x4203, 0xba5a, 0x203f, 0x465b, 0xb20a, 0xbfdc, 0xa24b, 0x2188, 0x144b, 0xbfc0, 0x4001, 0xbf74, 0x41c4, 0x15cf, 0x42fc, 0x4269, 0xaad7, 0x4353, 0x308d, 0xb27f, 0x4242, 0x4276, 0x43b6, 0x4243, 0xa999, 0xba34, 0xa8cb, 0xbfe8, 0xb0e3, 0x40c0, 0x402e, 0xb22d, 0xb06b, 0x1b53, 0xb0bb, 0x447f, 0x459a, 0x4083, 0x31f0, 0xb018, 0x3814, 0x43e1, 0x1c61, 0x417d, 0xa3ab, 0xbac9, 0x0d83, 0xa3e9, 0xbfcb, 0x1c34, 0x0847, 0x012c, 0x34c5, 0x412f, 0xb21c, 0x4286, 0xb24c, 0x40eb, 0x1dc0, 0x4006, 0x437d, 0xb01b, 0xbf45, 0x38bb, 0x4092, 0x41ab, 0xb283, 0x424c, 0xb036, 0xa4ec, 0x1f66, 0x1f00, 0xbac8, 0xbf8a, 0x42d7, 0x42aa, 0x4140, 0x09ec, 0x183a, 0x1e06, 0x405c, 0xb05b, 0xb0ef, 0x1d87, 0x1807, 0x41bf, 0x411c, 0x4168, 0xbf19, 0xb050, 0xad8f, 0x1cd4, 0x0d12, 0x411f, 0x4071, 0x187d, 0xa451, 0x4354, 0x4170, 0x17d0, 0x419b, 0x41ca, 0x4293, 0x1d2e, 0x41e0, 0x4131, 0xba25, 0xbf4c, 0x4313, 0x22f1, 0xbf91, 0x4601, 0xb2d8, 0x39d6, 0xb2d3, 0x1e51, 0x46c0, 0xba66, 0x2408, 0xb0aa, 0xb0b7, 0xbf5d, 0xbfc0, 0x438d, 0x24bb, 0x23a9, 0x4285, 0x1d19, 0x431b, 0xa1e4, 0x43b2, 0x1015, 0xbad8, 0x408d, 0x40c5, 0x401d, 0xbf77, 0xb0a3, 0x40d9, 0x3dd4, 0x4291, 0xb2ad, 0x4611, 0x4243, 0x42d3, 0x4274, 0x430f, 0x1f8f, 0x4458, 0xbf43, 0xbaf1, 0xb05f, 0xba34, 0xb2bd, 0xb2f2, 0xa7ef, 0x4368, 0xb2b9, 0xbfae, 0xbf00, 0xbad8, 0xbaf8, 0x40f2, 0x403e, 0xbf3d, 0xbaff, 0x4352, 0xb0b8, 0x414a, 0xa4e6, 0x1278, 0x419d, 0x41be, 0x1ef6, 0x4611, 0xb240, 0x4300, 0x4151, 0xba3a, 0x2800, 0x40c0, 0x40f1, 0x433b, 0x1e6b, 0xbf83, 0x40e0, 0x43cc, 0xb089, 0x42ff, 0xafd5, 0x4288, 0x1bd6, 0xbfc0, 0xb2e9, 0x403b, 0x40e1, 0x1ff6, 0x408d, 0xb284, 0x40f6, 0x41eb, 0x1c1c, 0x411c, 0x439d, 0x4546, 0x418d, 0xb288, 0x4026, 0x31bb, 0xbfb9, 0xb032, 0x421e, 0x0492, 0x4349, 0xac8e, 0xb272, 0x40d2, 0x4017, 0xbf90, 0xbf00, 0x2e71, 0xba43, 0x421b, 0x4094, 0x4223, 0xbf49, 0xb2a3, 0xb286, 0x02b5, 0x424a, 0x426f, 0xb21c, 0xb277, 0x4137, 0x43fe, 0xbf4d, 0x418a, 0xba41, 0x05a2, 0x4005, 0xbf34, 0x4591, 0xb209, 0xba3e, 0x418c, 0x4190, 0xb2ab, 0x4243, 0x04ac, 0x40b1, 0x3fd9, 0xbfcf, 0x1bd4, 0xb2b3, 0x42ba, 0xb0e0, 0x1cf2, 0x3fc6, 0x042d, 0xbf26, 0xba72, 0xa972, 0x018f, 0x42e3, 0xab4b, 0xb253, 0x40a4, 0x43bc, 0xbad4, 0x444a, 0xb298, 0x4095, 0x05a4, 0x3e20, 0x41dc, 0xba4d, 0xb29a, 0x4210, 0xba2d, 0x40e4, 0x3b94, 0xbfe0, 0x405d, 0x43cc, 0x4282, 0xbfca, 0x4296, 0x41d1, 0x4319, 0xba33, 0x417f, 0xbfd9, 0xb24d, 0xa08c, 0x405c, 0x4397, 0x4201, 0xb2ff, 0x2561, 0x00f1, 0x3ee1, 0x43d3, 0x4177, 0xb289, 0x407f, 0xbacb, 0x30e3, 0x37a9, 0xba34, 0x432c, 0x43d7, 0x4017, 0x428b, 0xa7e4, 0x42be, 0xbf3c, 0xba26, 0xb25c, 0x414c, 0x3494, 0xaeb7, 0x42f3, 0x1325, 0xbf96, 0x089b, 0xbf60, 0x4147, 0x0189, 0x42fc, 0xbfa4, 0x4137, 0xbac5, 0x1f1c, 0x42ea, 0xb2a0, 0x39d2, 0x1068, 0xb2a7, 0x4371, 0x4086, 0xbad1, 0x418e, 0x211d, 0x1284, 0x0ab4, 0x359e, 0x4161, 0x1eab, 0x0245, 0x430b, 0x42ea, 0xba51, 0x4082, 0x43a9, 0x03f5, 0xa5cb, 0x1316, 0xbf36, 0x4611, 0xbaee, 0xba0a, 0xbfd2, 0x409c, 0xb091, 0x43b3, 0x4248, 0x426e, 0xba02, 0x0db8, 0x1a5b, 0xbfb5, 0x43b0, 0xb2ad, 0x09aa, 0x1205, 0xb266, 0x415b, 0x434d, 0x1fe3, 0xb0a3, 0xbf93, 0x4559, 0x4439, 0x212b, 0x3af6, 0x189c, 0x1be0, 0x4248, 0xb285, 0xbf96, 0x41c3, 0xb254, 0x0c55, 0x4274, 0x3ed3, 0x431c, 0x407a, 0x43fe, 0x1e2d, 0x18a3, 0x4126, 0x42ad, 0x06fe, 0x29b3, 0x144b, 0x4051, 0x4114, 0x1f76, 0x1e83, 0x1855, 0xbadb, 0xbf34, 0xb291, 0xb2d4, 0xb253, 0x414e, 0xb282, 0xba7a, 0x41f3, 0xba13, 0xb20a, 0xbf36, 0x428d, 0x1d7b, 0xbad0, 0xb2bf, 0xb254, 0xb0a6, 0xb078, 0x4053, 0x43d9, 0x4162, 0xb274, 0x41fd, 0x184a, 0x4399, 0x2dd4, 0x4307, 0x40f4, 0xba36, 0x43c2, 0x4197, 0x436c, 0x4203, 0x1fbe, 0xbf31, 0x408d, 0xb2ee, 0x4226, 0x414e, 0xbf3a, 0x23bf, 0x46c9, 0x3892, 0xba42, 0x41b5, 0x1b55, 0x4282, 0x401d, 0x1d0c, 0x1a9c, 0x257a, 0xb2b4, 0x42c1, 0x4201, 0xb23b, 0x43a1, 0x43bd, 0x407e, 0x43d6, 0x1b28, 0x13fb, 0x4064, 0x1cb2, 0x314e, 0x2ae2, 0xba18, 0xbf0b, 0xa9ec, 0x4165, 0x43d1, 0xb2ab, 0x1879, 0xb0fe, 0xb290, 0x380d, 0xb22c, 0x1d2e, 0x17c1, 0x4011, 0x43f2, 0xbf87, 0xba26, 0xb293, 0x1854, 0x34a5, 0xb2f5, 0x43c1, 0x2ea9, 0xa962, 0xb266, 0x0e46, 0xb055, 0x412d, 0x43e8, 0x419a, 0xb23e, 0x1b36, 0x180b, 0x434f, 0x1a50, 0xbac0, 0xbaf0, 0x09f6, 0x18d9, 0xba51, 0xb2ee, 0x32fe, 0x403b, 0x1db0, 0x0fa6, 0xbf97, 0xb26b, 0x4315, 0x42a2, 0xba2a, 0x431b, 0x1a42, 0x1f3a, 0xbf4e, 0x40cc, 0x41da, 0x4109, 0x422d, 0x1bd6, 0x439f, 0xb203, 0xbfd1, 0x462d, 0x404b, 0x420b, 0x4298, 0x153f, 0xb0c7, 0xba66, 0xb258, 0xb27a, 0x417e, 0x1ca0, 0x46f9, 0x0c87, 0x401d, 0x42e3, 0xbacc, 0x2a1c, 0x21ff, 0x4187, 0xb001, 0x4054, 0xbae9, 0xbf98, 0x411c, 0xb27f, 0x2f39, 0x42cc, 0x4602, 0xb07f, 0xb21b, 0x418b, 0x03f0, 0xb021, 0xb03f, 0xbf5a, 0x410c, 0x40ac, 0xa162, 0x4021, 0xba5b, 0xa977, 0x204c, 0x43f6, 0x40a9, 0x1e9c, 0x4283, 0xbf2d, 0x2abd, 0x4249, 0xba02, 0xa9c6, 0x4008, 0x4424, 0x2c94, 0xbf61, 0x18ae, 0xb07d, 0x46c3, 0x185f, 0xb286, 0xb2b7, 0x1ada, 0x4147, 0x403a, 0x2702, 0x4065, 0x404c, 0x4274, 0x42aa, 0x434f, 0xb0a5, 0x4315, 0x0ac8, 0x19eb, 0xa9ea, 0x2541, 0x460f, 0x4634, 0xbf25, 0x436c, 0x42a5, 0xb256, 0x425f, 0xb20d, 0x4225, 0x4669, 0x23f8, 0xab09, 0x43c7, 0x34cf, 0x0f49, 0x415d, 0xba25, 0x4230, 0xac19, 0xb243, 0x42d7, 0x42e5, 0x182d, 0x424d, 0x4213, 0xba2c, 0x1ad0, 0x4301, 0x2446, 0x2b9e, 0xabb5, 0x426d, 0xbfad, 0xa4d2, 0x41c1, 0x1de8, 0x28af, 0xb252, 0x18f0, 0x342f, 0x2d6e, 0xb240, 0x427e, 0xbf5a, 0x41c0, 0x446a, 0x1a36, 0xb223, 0x1b1a, 0x4319, 0xba13, 0x4332, 0x4293, 0x1cc3, 0xb092, 0x4339, 0x41b6, 0x21e9, 0xb237, 0xbaeb, 0xbf06, 0x1d64, 0xa016, 0x41ec, 0x413a, 0x1abc, 0x42fc, 0xb274, 0xb0bc, 0x4016, 0x42d6, 0xb220, 0x43b0, 0x44fa, 0x44cb, 0xbf1c, 0x1ed5, 0x4229, 0x45f4, 0xbf67, 0x4142, 0x1e8e, 0x434c, 0x418e, 0xb0fb, 0x4369, 0x46b2, 0xae1c, 0xbfa6, 0xb294, 0xba4c, 0x0ff8, 0x149e, 0x4201, 0xba72, 0x44a9, 0x465f, 0x42c9, 0xbad2, 0x3fc6, 0x4379, 0x1969, 0x417e, 0x409b, 0x46e8, 0x40a2, 0xba58, 0x1c75, 0x42f0, 0x40ba, 0x12ae, 0x32c5, 0x348d, 0x402a, 0x2812, 0x40e9, 0x41b1, 0xbf89, 0x1914, 0x41ac, 0x07c5, 0x406e, 0x43a2, 0x42f0, 0x1150, 0x3395, 0x3055, 0xbfb6, 0x00f6, 0x40d4, 0x1c99, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x12c1cca9, 0x2d72bbb5, 0x1bcf8ad0, 0x4c840915, 0x42730230, 0xb7a8e9c4, 0xcb0a2f1b, 0xf9eb0e6a, 0x3ce2afc4, 0x2182885a, 0x1ed96c99, 0x0cf55f95, 0xb8e6e008, 0xecaa7d5b, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0x00000055, 0xfffcc2a2, 0x00000001, 0x00000795, 0x79854540, 0x0cf57523, 0x00033d5d, 0x0cf57521, 0xecaa795b, 0x0000164f, 0xffffff17, 0x0cf575e7, 0xb8e6e008, 0xecaa795b, 0x00000000, 0x000001d0 }, + Instructions = [0x3ec5, 0x42d3, 0x06b4, 0xbf80, 0x430d, 0x40b3, 0x3a02, 0x43fd, 0x1ef3, 0x4051, 0x426b, 0xa108, 0xbf48, 0xba7c, 0xba08, 0x2831, 0xb055, 0xbad1, 0xb278, 0x0b30, 0xbff0, 0xa224, 0x1beb, 0x24d4, 0x1873, 0xb2c9, 0x44d9, 0x1eb9, 0x4086, 0xb2b6, 0x4172, 0x40e2, 0x1f7c, 0x403a, 0xbf9c, 0xa542, 0x19da, 0x429c, 0x42c9, 0x431d, 0x1d07, 0xb059, 0x3791, 0x306d, 0xa7cc, 0xb28a, 0x43c8, 0xbf62, 0xb02d, 0xba06, 0x1b78, 0x21ea, 0x41b6, 0xbfae, 0x0ca8, 0x1ae7, 0x4307, 0x39e3, 0x1e5e, 0x03f8, 0x04c8, 0x427d, 0x0676, 0x3256, 0x1b57, 0xb080, 0xb2cb, 0x418d, 0xb2ae, 0xbf51, 0x412f, 0xba3c, 0x1916, 0x4198, 0x40da, 0x3425, 0x43bb, 0x4339, 0xbf59, 0x42ff, 0x3058, 0x4108, 0xba09, 0x1c3b, 0x1f5b, 0x3703, 0x404a, 0x4259, 0x40b3, 0x40a8, 0x3e59, 0xa7ab, 0xbf66, 0x404f, 0x42bc, 0xbaf0, 0x22c3, 0xbfc0, 0xb03d, 0x4018, 0x1a56, 0x4383, 0x4446, 0x42c1, 0xb292, 0x246e, 0x4426, 0x1aec, 0x1fa7, 0xbf07, 0x3231, 0x4116, 0x1177, 0x45c6, 0x3f2b, 0xa87c, 0x4170, 0xba41, 0x436e, 0x4012, 0x4553, 0xadc9, 0xae57, 0x4034, 0xbaf0, 0xa094, 0x293a, 0x412d, 0x4145, 0xbfc7, 0xb0ed, 0x164e, 0x2376, 0x19ae, 0x404e, 0x338a, 0x42a5, 0xbad0, 0xb275, 0x4217, 0x40c3, 0x40a8, 0x4015, 0x1ce6, 0xb2f5, 0x435d, 0x403b, 0xaaed, 0x41e0, 0x1b07, 0x4390, 0x08eb, 0x2e05, 0x41c0, 0x193f, 0x421f, 0x2648, 0x4074, 0xa3c0, 0xbf0d, 0x0eb2, 0x29cd, 0x403b, 0xafe2, 0xba0a, 0xbff0, 0x40db, 0x1f18, 0xba01, 0xbf90, 0xb0e6, 0xb096, 0xbaf6, 0xbf90, 0x18a5, 0xbfbb, 0x40eb, 0x1d3b, 0x4150, 0x1993, 0xbf9d, 0x413c, 0xb2e0, 0x1b5d, 0x415a, 0xb244, 0x0152, 0xb2ed, 0x19ce, 0xba30, 0xba2e, 0xb277, 0xb271, 0x0387, 0xa74d, 0x4088, 0x4141, 0x4226, 0xbf5c, 0x46e2, 0x0897, 0x41c1, 0x428a, 0xb272, 0x1e00, 0x42d3, 0xb297, 0xba46, 0x40e1, 0x18fb, 0xbf0b, 0xba08, 0xb222, 0xbfb0, 0xbacf, 0x1a87, 0x428a, 0x42ee, 0x414c, 0x4606, 0x4375, 0x45db, 0x4171, 0x40f1, 0xb297, 0x4133, 0x3d66, 0x4206, 0x43ec, 0x43f8, 0xbf2e, 0xbfc0, 0xba27, 0x43ef, 0x407f, 0xbaef, 0x4306, 0x4350, 0x1e3c, 0x4085, 0xb25f, 0x4039, 0xb2dd, 0x40e1, 0x462b, 0x4633, 0x4048, 0x17ca, 0xba44, 0xbfa3, 0x4208, 0xb282, 0xba26, 0xb2da, 0x00d2, 0x4151, 0x40f7, 0x42e9, 0x4203, 0xba5a, 0x203f, 0x465b, 0xb20a, 0xbfdc, 0xa24b, 0x2188, 0x144b, 0xbfc0, 0x4001, 0xbf74, 0x41c4, 0x15cf, 0x42fc, 0x4269, 0xaad7, 0x4353, 0x308d, 0xb27f, 0x4242, 0x4276, 0x43b6, 0x4243, 0xa999, 0xba34, 0xa8cb, 0xbfe8, 0xb0e3, 0x40c0, 0x402e, 0xb22d, 0xb06b, 0x1b53, 0xb0bb, 0x447f, 0x459a, 0x4083, 0x31f0, 0xb018, 0x3814, 0x43e1, 0x1c61, 0x417d, 0xa3ab, 0xbac9, 0x0d83, 0xa3e9, 0xbfcb, 0x1c34, 0x0847, 0x012c, 0x34c5, 0x412f, 0xb21c, 0x4286, 0xb24c, 0x40eb, 0x1dc0, 0x4006, 0x437d, 0xb01b, 0xbf45, 0x38bb, 0x4092, 0x41ab, 0xb283, 0x424c, 0xb036, 0xa4ec, 0x1f66, 0x1f00, 0xbac8, 0xbf8a, 0x42d7, 0x42aa, 0x4140, 0x09ec, 0x183a, 0x1e06, 0x405c, 0xb05b, 0xb0ef, 0x1d87, 0x1807, 0x41bf, 0x411c, 0x4168, 0xbf19, 0xb050, 0xad8f, 0x1cd4, 0x0d12, 0x411f, 0x4071, 0x187d, 0xa451, 0x4354, 0x4170, 0x17d0, 0x419b, 0x41ca, 0x4293, 0x1d2e, 0x41e0, 0x4131, 0xba25, 0xbf4c, 0x4313, 0x22f1, 0xbf91, 0x4601, 0xb2d8, 0x39d6, 0xb2d3, 0x1e51, 0x46c0, 0xba66, 0x2408, 0xb0aa, 0xb0b7, 0xbf5d, 0xbfc0, 0x438d, 0x24bb, 0x23a9, 0x4285, 0x1d19, 0x431b, 0xa1e4, 0x43b2, 0x1015, 0xbad8, 0x408d, 0x40c5, 0x401d, 0xbf77, 0xb0a3, 0x40d9, 0x3dd4, 0x4291, 0xb2ad, 0x4611, 0x4243, 0x42d3, 0x4274, 0x430f, 0x1f8f, 0x4458, 0xbf43, 0xbaf1, 0xb05f, 0xba34, 0xb2bd, 0xb2f2, 0xa7ef, 0x4368, 0xb2b9, 0xbfae, 0xbf00, 0xbad8, 0xbaf8, 0x40f2, 0x403e, 0xbf3d, 0xbaff, 0x4352, 0xb0b8, 0x414a, 0xa4e6, 0x1278, 0x419d, 0x41be, 0x1ef6, 0x4611, 0xb240, 0x4300, 0x4151, 0xba3a, 0x2800, 0x40c0, 0x40f1, 0x433b, 0x1e6b, 0xbf83, 0x40e0, 0x43cc, 0xb089, 0x42ff, 0xafd5, 0x4288, 0x1bd6, 0xbfc0, 0xb2e9, 0x403b, 0x40e1, 0x1ff6, 0x408d, 0xb284, 0x40f6, 0x41eb, 0x1c1c, 0x411c, 0x439d, 0x4546, 0x418d, 0xb288, 0x4026, 0x31bb, 0xbfb9, 0xb032, 0x421e, 0x0492, 0x4349, 0xac8e, 0xb272, 0x40d2, 0x4017, 0xbf90, 0xbf00, 0x2e71, 0xba43, 0x421b, 0x4094, 0x4223, 0xbf49, 0xb2a3, 0xb286, 0x02b5, 0x424a, 0x426f, 0xb21c, 0xb277, 0x4137, 0x43fe, 0xbf4d, 0x418a, 0xba41, 0x05a2, 0x4005, 0xbf34, 0x4591, 0xb209, 0xba3e, 0x418c, 0x4190, 0xb2ab, 0x4243, 0x04ac, 0x40b1, 0x3fd9, 0xbfcf, 0x1bd4, 0xb2b3, 0x42ba, 0xb0e0, 0x1cf2, 0x3fc6, 0x042d, 0xbf26, 0xba72, 0xa972, 0x018f, 0x42e3, 0xab4b, 0xb253, 0x40a4, 0x43bc, 0xbad4, 0x444a, 0xb298, 0x4095, 0x05a4, 0x3e20, 0x41dc, 0xba4d, 0xb29a, 0x4210, 0xba2d, 0x40e4, 0x3b94, 0xbfe0, 0x405d, 0x43cc, 0x4282, 0xbfca, 0x4296, 0x41d1, 0x4319, 0xba33, 0x417f, 0xbfd9, 0xb24d, 0xa08c, 0x405c, 0x4397, 0x4201, 0xb2ff, 0x2561, 0x00f1, 0x3ee1, 0x43d3, 0x4177, 0xb289, 0x407f, 0xbacb, 0x30e3, 0x37a9, 0xba34, 0x432c, 0x43d7, 0x4017, 0x428b, 0xa7e4, 0x42be, 0xbf3c, 0xba26, 0xb25c, 0x414c, 0x3494, 0xaeb7, 0x42f3, 0x1325, 0xbf96, 0x089b, 0xbf60, 0x4147, 0x0189, 0x42fc, 0xbfa4, 0x4137, 0xbac5, 0x1f1c, 0x42ea, 0xb2a0, 0x39d2, 0x1068, 0xb2a7, 0x4371, 0x4086, 0xbad1, 0x418e, 0x211d, 0x1284, 0x0ab4, 0x359e, 0x4161, 0x1eab, 0x0245, 0x430b, 0x42ea, 0xba51, 0x4082, 0x43a9, 0x03f5, 0xa5cb, 0x1316, 0xbf36, 0x4611, 0xbaee, 0xba0a, 0xbfd2, 0x409c, 0xb091, 0x43b3, 0x4248, 0x426e, 0xba02, 0x0db8, 0x1a5b, 0xbfb5, 0x43b0, 0xb2ad, 0x09aa, 0x1205, 0xb266, 0x415b, 0x434d, 0x1fe3, 0xb0a3, 0xbf93, 0x4559, 0x4439, 0x212b, 0x3af6, 0x189c, 0x1be0, 0x4248, 0xb285, 0xbf96, 0x41c3, 0xb254, 0x0c55, 0x4274, 0x3ed3, 0x431c, 0x407a, 0x43fe, 0x1e2d, 0x18a3, 0x4126, 0x42ad, 0x06fe, 0x29b3, 0x144b, 0x4051, 0x4114, 0x1f76, 0x1e83, 0x1855, 0xbadb, 0xbf34, 0xb291, 0xb2d4, 0xb253, 0x414e, 0xb282, 0xba7a, 0x41f3, 0xba13, 0xb20a, 0xbf36, 0x428d, 0x1d7b, 0xbad0, 0xb2bf, 0xb254, 0xb0a6, 0xb078, 0x4053, 0x43d9, 0x4162, 0xb274, 0x41fd, 0x184a, 0x4399, 0x2dd4, 0x4307, 0x40f4, 0xba36, 0x43c2, 0x4197, 0x436c, 0x4203, 0x1fbe, 0xbf31, 0x408d, 0xb2ee, 0x4226, 0x414e, 0xbf3a, 0x23bf, 0x46c9, 0x3892, 0xba42, 0x41b5, 0x1b55, 0x4282, 0x401d, 0x1d0c, 0x1a9c, 0x257a, 0xb2b4, 0x42c1, 0x4201, 0xb23b, 0x43a1, 0x43bd, 0x407e, 0x43d6, 0x1b28, 0x13fb, 0x4064, 0x1cb2, 0x314e, 0x2ae2, 0xba18, 0xbf0b, 0xa9ec, 0x4165, 0x43d1, 0xb2ab, 0x1879, 0xb0fe, 0xb290, 0x380d, 0xb22c, 0x1d2e, 0x17c1, 0x4011, 0x43f2, 0xbf87, 0xba26, 0xb293, 0x1854, 0x34a5, 0xb2f5, 0x43c1, 0x2ea9, 0xa962, 0xb266, 0x0e46, 0xb055, 0x412d, 0x43e8, 0x419a, 0xb23e, 0x1b36, 0x180b, 0x434f, 0x1a50, 0xbac0, 0xbaf0, 0x09f6, 0x18d9, 0xba51, 0xb2ee, 0x32fe, 0x403b, 0x1db0, 0x0fa6, 0xbf97, 0xb26b, 0x4315, 0x42a2, 0xba2a, 0x431b, 0x1a42, 0x1f3a, 0xbf4e, 0x40cc, 0x41da, 0x4109, 0x422d, 0x1bd6, 0x439f, 0xb203, 0xbfd1, 0x462d, 0x404b, 0x420b, 0x4298, 0x153f, 0xb0c7, 0xba66, 0xb258, 0xb27a, 0x417e, 0x1ca0, 0x46f9, 0x0c87, 0x401d, 0x42e3, 0xbacc, 0x2a1c, 0x21ff, 0x4187, 0xb001, 0x4054, 0xbae9, 0xbf98, 0x411c, 0xb27f, 0x2f39, 0x42cc, 0x4602, 0xb07f, 0xb21b, 0x418b, 0x03f0, 0xb021, 0xb03f, 0xbf5a, 0x410c, 0x40ac, 0xa162, 0x4021, 0xba5b, 0xa977, 0x204c, 0x43f6, 0x40a9, 0x1e9c, 0x4283, 0xbf2d, 0x2abd, 0x4249, 0xba02, 0xa9c6, 0x4008, 0x4424, 0x2c94, 0xbf61, 0x18ae, 0xb07d, 0x46c3, 0x185f, 0xb286, 0xb2b7, 0x1ada, 0x4147, 0x403a, 0x2702, 0x4065, 0x404c, 0x4274, 0x42aa, 0x434f, 0xb0a5, 0x4315, 0x0ac8, 0x19eb, 0xa9ea, 0x2541, 0x460f, 0x4634, 0xbf25, 0x436c, 0x42a5, 0xb256, 0x425f, 0xb20d, 0x4225, 0x4669, 0x23f8, 0xab09, 0x43c7, 0x34cf, 0x0f49, 0x415d, 0xba25, 0x4230, 0xac19, 0xb243, 0x42d7, 0x42e5, 0x182d, 0x424d, 0x4213, 0xba2c, 0x1ad0, 0x4301, 0x2446, 0x2b9e, 0xabb5, 0x426d, 0xbfad, 0xa4d2, 0x41c1, 0x1de8, 0x28af, 0xb252, 0x18f0, 0x342f, 0x2d6e, 0xb240, 0x427e, 0xbf5a, 0x41c0, 0x446a, 0x1a36, 0xb223, 0x1b1a, 0x4319, 0xba13, 0x4332, 0x4293, 0x1cc3, 0xb092, 0x4339, 0x41b6, 0x21e9, 0xb237, 0xbaeb, 0xbf06, 0x1d64, 0xa016, 0x41ec, 0x413a, 0x1abc, 0x42fc, 0xb274, 0xb0bc, 0x4016, 0x42d6, 0xb220, 0x43b0, 0x44fa, 0x44cb, 0xbf1c, 0x1ed5, 0x4229, 0x45f4, 0xbf67, 0x4142, 0x1e8e, 0x434c, 0x418e, 0xb0fb, 0x4369, 0x46b2, 0xae1c, 0xbfa6, 0xb294, 0xba4c, 0x0ff8, 0x149e, 0x4201, 0xba72, 0x44a9, 0x465f, 0x42c9, 0xbad2, 0x3fc6, 0x4379, 0x1969, 0x417e, 0x409b, 0x46e8, 0x40a2, 0xba58, 0x1c75, 0x42f0, 0x40ba, 0x12ae, 0x32c5, 0x348d, 0x402a, 0x2812, 0x40e9, 0x41b1, 0xbf89, 0x1914, 0x41ac, 0x07c5, 0x406e, 0x43a2, 0x42f0, 0x1150, 0x3395, 0x3055, 0xbfb6, 0x00f6, 0x40d4, 0x1c99, 0x4770, 0xe7fe + ], + StartRegs = [0x12c1cca9, 0x2d72bbb5, 0x1bcf8ad0, 0x4c840915, 0x42730230, 0xb7a8e9c4, 0xcb0a2f1b, 0xf9eb0e6a, 0x3ce2afc4, 0x2182885a, 0x1ed96c99, 0x0cf55f95, 0xb8e6e008, 0xecaa7d5b, 0x00000000, 0x100001f0 + ], + FinalRegs = [0x00000055, 0xfffcc2a2, 0x00000001, 0x00000795, 0x79854540, 0x0cf57523, 0x00033d5d, 0x0cf57521, 0xecaa795b, 0x0000164f, 0xffffff17, 0x0cf575e7, 0xb8e6e008, 0xecaa795b, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x4393, 0x413f, 0x4166, 0xa433, 0x409c, 0xb2e8, 0x1cc5, 0xba5a, 0xaf1d, 0x4249, 0x158a, 0x400c, 0xbf02, 0xba4d, 0x1b2a, 0x0683, 0x409b, 0x4033, 0x2766, 0xbf00, 0x43bc, 0x4593, 0x4623, 0x40f0, 0xba2d, 0x433c, 0xbfcc, 0x0712, 0xa0ee, 0x301a, 0x400e, 0x4218, 0x428a, 0xa5a0, 0x4362, 0xb28f, 0x4270, 0x3fd6, 0x40b4, 0x2c32, 0x4494, 0xb0e0, 0xba73, 0x2cfd, 0x4118, 0xba2a, 0xb24c, 0x2d2c, 0x1a18, 0x00d8, 0xbacb, 0x4396, 0xbf0b, 0xb244, 0x1eb5, 0x4154, 0xbacc, 0xb258, 0x1b71, 0xbfb7, 0xb2f8, 0xb0c5, 0x01d6, 0xbad7, 0x240f, 0x1dd7, 0x42f5, 0x4691, 0xbfb0, 0x1ca2, 0x15b5, 0x3be3, 0x4127, 0x4122, 0x403e, 0x4065, 0x4314, 0x1a38, 0x1e93, 0xba0d, 0x1ea0, 0xbaf7, 0xa3e8, 0x42c5, 0x1f42, 0xbf1b, 0x40c5, 0x461d, 0xb013, 0x40a2, 0x1903, 0x4388, 0xb090, 0xbfc1, 0x42fe, 0x42a9, 0x4353, 0x41c2, 0xba5c, 0x406b, 0x4351, 0x41ba, 0xbfe0, 0xb254, 0x1057, 0x41ba, 0xba06, 0xb259, 0x067d, 0x40f4, 0xba18, 0x45b0, 0x3200, 0x405a, 0xba03, 0xbfde, 0x4127, 0x4379, 0x400c, 0xb20e, 0x0f5d, 0x41b4, 0x1f75, 0x416d, 0x413c, 0x1d18, 0x3c86, 0x41e6, 0x1d1e, 0xb281, 0x1f3c, 0x4218, 0x40f8, 0xbf29, 0x286f, 0xa620, 0xb2bb, 0x0150, 0xbac4, 0xac02, 0x439c, 0xb0fa, 0x40df, 0x1f98, 0x4316, 0x3d6d, 0x414e, 0x4159, 0xba17, 0xbfb1, 0x1a85, 0x4214, 0x423d, 0x0134, 0x4669, 0xb254, 0xbf95, 0xb2ed, 0x428b, 0x4328, 0x4256, 0x12d9, 0x40cc, 0xb23e, 0xb025, 0x42fe, 0x4022, 0xb0da, 0x42a9, 0xad61, 0x1f53, 0x46f9, 0x4462, 0xba7b, 0x3985, 0x4142, 0xa656, 0x21c4, 0x4255, 0xba64, 0xb20b, 0xa593, 0x43be, 0xbf8f, 0x463b, 0xb038, 0xb030, 0x4055, 0x17ca, 0xbacb, 0x1f67, 0x4055, 0x1923, 0x1a46, 0xb2a0, 0x41af, 0x4285, 0xbfa4, 0x3160, 0x42c8, 0x29ec, 0x1c50, 0x412c, 0xbaec, 0xb225, 0x44d4, 0xba56, 0xb23d, 0xbfdb, 0x275b, 0x415f, 0xb0ea, 0x21fb, 0x40d9, 0x4325, 0xb20c, 0x43d8, 0xa916, 0x4239, 0x438b, 0x418f, 0x4275, 0xb25f, 0x2252, 0xb262, 0x4688, 0x1c27, 0xb234, 0x19e4, 0x41b6, 0xbfb4, 0x3226, 0xa8bd, 0x40b1, 0xb24f, 0x1848, 0x436f, 0x4372, 0x436f, 0x426f, 0xb2b6, 0xba5a, 0xb2c6, 0x2bac, 0x4160, 0x4002, 0x40b0, 0xba46, 0x319b, 0xb251, 0x2a9a, 0x428b, 0x4239, 0x28d5, 0x46e9, 0x4030, 0x4167, 0xbf2e, 0xbf00, 0x41cc, 0xb2e1, 0xba20, 0x4080, 0x1179, 0x4484, 0xbaf4, 0xbf48, 0xb2f8, 0x4320, 0x426b, 0xb2ee, 0x350c, 0xb241, 0x4386, 0x3af4, 0x42b4, 0xa8e5, 0x4369, 0x4315, 0x4110, 0x407b, 0xbaff, 0x419e, 0xbf52, 0x40f2, 0x45b5, 0x41ec, 0x402a, 0xb21b, 0xbf6c, 0xb0ad, 0x40cd, 0x4094, 0xb07c, 0x1fbb, 0x286b, 0x422d, 0x1f2b, 0x401a, 0x42aa, 0x406b, 0x4473, 0x41d8, 0xb08d, 0xba59, 0xb03e, 0x1d7d, 0xaf13, 0x45e8, 0x4169, 0x418a, 0x4366, 0xb001, 0x3913, 0x40ef, 0x40fa, 0xbf74, 0x1bcd, 0x42e7, 0x40cf, 0x1959, 0xb20a, 0xb2ec, 0x1261, 0x40ab, 0x4062, 0x34eb, 0x40fb, 0x4255, 0xb052, 0x40e4, 0x414f, 0x4241, 0xb21f, 0xb2f9, 0x2894, 0x4546, 0x2e67, 0xbf0a, 0x2dcd, 0x3df4, 0x1431, 0x426d, 0x162d, 0xbfd8, 0x4255, 0xbaf2, 0x4263, 0xa5ca, 0x43e9, 0xb06b, 0x2b34, 0xba1b, 0xbf60, 0x42bc, 0x0a25, 0x4584, 0x40f2, 0xb07f, 0x3185, 0xb0b6, 0xbaf2, 0xbf86, 0xafbf, 0xb2a6, 0x10ea, 0x4379, 0x43ec, 0x4291, 0x2f80, 0xb2a8, 0x400b, 0xb2a7, 0x4007, 0xb23c, 0x454b, 0x40ab, 0xbad0, 0xbf84, 0x43ab, 0x4252, 0x40c8, 0x400f, 0x43ae, 0xa451, 0x458e, 0xbae0, 0x4683, 0x412d, 0x3ea7, 0x2233, 0x4564, 0x3aa8, 0x421a, 0x1fc8, 0xa2ab, 0xba49, 0x18b2, 0x2a32, 0x40b7, 0xb25e, 0xba1f, 0xb025, 0xb2d7, 0x41f2, 0xbfe1, 0x1fa1, 0xb0a2, 0x43bd, 0x1812, 0x0fdf, 0xba2f, 0x42e5, 0xb238, 0x197b, 0x1d3f, 0xbfa1, 0x1def, 0x1a08, 0x41f5, 0x352c, 0xb021, 0x1891, 0x004f, 0x427c, 0x402a, 0x41fb, 0x4303, 0x4396, 0x3d52, 0xbac4, 0xba78, 0x40b0, 0x1d86, 0xb249, 0x40c1, 0x4030, 0xbac9, 0xbf3a, 0x412d, 0x4335, 0x3fe3, 0xb2f3, 0x0403, 0xb24c, 0x4194, 0x402f, 0x4245, 0x43a7, 0x4298, 0x2c2c, 0x1d25, 0x0a9b, 0xba72, 0x41f4, 0x4083, 0x1161, 0xba17, 0xac8c, 0x4595, 0x42b2, 0x4457, 0x2b24, 0xba1b, 0x4135, 0xb0ba, 0xbf14, 0x41e8, 0x2741, 0x1bcb, 0x3afa, 0x438c, 0xbf36, 0x4028, 0x40d6, 0x42dd, 0xb2cf, 0x4334, 0x4390, 0x41f0, 0xbf8d, 0x4576, 0x2bc5, 0x46b2, 0xa44d, 0x438e, 0x2439, 0xb2c1, 0x181c, 0xa1d4, 0x4448, 0xbf67, 0x4360, 0xb00a, 0xbfa0, 0x423f, 0x32f8, 0x3dbe, 0x4301, 0x43aa, 0x1ba3, 0x4258, 0xbf80, 0x41df, 0xb242, 0x1e9a, 0x0f0a, 0x389a, 0xb2fa, 0x4220, 0x401f, 0x4561, 0x1a77, 0xbf5b, 0xb2e7, 0x1879, 0x4132, 0x46db, 0xb2e1, 0x1aa2, 0x4100, 0x25d0, 0x403b, 0x13ba, 0xbf69, 0x4238, 0xba3f, 0xa5ad, 0x1b87, 0x4406, 0xa157, 0x006d, 0xbfc0, 0x4349, 0x16fb, 0x18ca, 0x406f, 0xb049, 0x43cb, 0x435e, 0xabbe, 0xba66, 0xbf8f, 0x29de, 0xbfe0, 0x35d1, 0x21e8, 0xb2b1, 0x4019, 0x1f16, 0xb07f, 0x4124, 0x437b, 0x324a, 0x4641, 0x4192, 0x40cb, 0xbf5b, 0xb257, 0x1a8b, 0x0f49, 0x0eeb, 0x4244, 0x4038, 0x4499, 0x43ce, 0xbf18, 0x1b06, 0x1fb0, 0xbfa0, 0x2f5c, 0x44dd, 0x4381, 0x4245, 0xb223, 0x4260, 0x1c09, 0x12f5, 0x0433, 0x4285, 0xbf48, 0x43fa, 0x05a8, 0x3557, 0x42ed, 0xb03e, 0xba76, 0x4124, 0x1ab2, 0xbf95, 0x4010, 0x4581, 0x459a, 0xb229, 0x0b3c, 0x4452, 0xa755, 0x4476, 0xb066, 0x13df, 0xb0b4, 0x41f9, 0xb2ac, 0x432a, 0x409f, 0x2410, 0xba48, 0xbade, 0x4291, 0x085f, 0xb2dd, 0x4346, 0xbfc6, 0x4069, 0x408a, 0x45ed, 0x4370, 0x2b4f, 0x463d, 0x1f7a, 0xba33, 0x4119, 0x4119, 0x4277, 0x08b3, 0x24d8, 0x018b, 0x1dd1, 0x4190, 0xb259, 0x408e, 0xb094, 0x434b, 0xa16e, 0x417b, 0xb28c, 0xbf92, 0x1ae1, 0x14f3, 0x1b4a, 0x4549, 0xbf48, 0x3edd, 0x0f59, 0x3f27, 0x18da, 0xb2ee, 0x412b, 0xa606, 0xba3a, 0xb236, 0x41c3, 0xb024, 0xb0d3, 0x40f2, 0x4301, 0xb0eb, 0x40a1, 0x284b, 0x40bd, 0x1e28, 0x41d3, 0x4243, 0xbfca, 0xa24e, 0x4105, 0x0a58, 0x1fd6, 0x41f4, 0xbfc8, 0xb268, 0x42ac, 0x413b, 0xb285, 0xb0d4, 0x400b, 0x43e2, 0x3133, 0x4316, 0x4319, 0x4398, 0xb27b, 0x2780, 0x4343, 0x17d6, 0xb242, 0x1282, 0x1f3e, 0x4285, 0x42a2, 0xb0ed, 0x40a5, 0x439a, 0x1c5f, 0x1d3b, 0xb032, 0xbfbd, 0xb26f, 0x42e2, 0x4350, 0x4353, 0x1d6d, 0xb2af, 0x40ad, 0x41e6, 0x4080, 0x43b6, 0x4064, 0x4007, 0x40a8, 0x4302, 0x11e1, 0x41dd, 0xb2cd, 0x4350, 0xba24, 0x4208, 0xb24d, 0x1c89, 0x4262, 0xba71, 0xbf89, 0x4357, 0x42ef, 0xb2d6, 0xb26e, 0xb208, 0xb275, 0xbf1d, 0xb2ee, 0x1944, 0xb2ce, 0xba7f, 0x36b1, 0x388f, 0x40ce, 0x4368, 0x19b9, 0x01c7, 0x24f5, 0xba7b, 0x4267, 0x4143, 0xbf32, 0x4205, 0xba59, 0x40c0, 0x3dbe, 0x46d5, 0x1ac7, 0x4195, 0x41db, 0xb2bb, 0x43c4, 0x1fcd, 0x42f1, 0x42d8, 0x1df1, 0xb2fa, 0x41d5, 0xbf0c, 0x41a8, 0x4201, 0xa7e8, 0xbf02, 0x42d1, 0x4116, 0x1c10, 0x43f6, 0x40df, 0x0a6b, 0x41ac, 0x42f3, 0xb2b6, 0x43bb, 0x1010, 0xba5d, 0x43c6, 0xb022, 0x3144, 0x41f9, 0xac9e, 0x43b2, 0x3daf, 0xa1b3, 0x19fa, 0xbfae, 0x42b3, 0x467d, 0x4000, 0xaa59, 0xba2c, 0x090f, 0x1860, 0xb022, 0x2209, 0x1d3a, 0xba15, 0x4138, 0x43fb, 0x424b, 0xbaf1, 0x41fd, 0xba49, 0x461b, 0x41b4, 0xae22, 0xa412, 0x1d38, 0xbf4a, 0x4239, 0xb25f, 0x258a, 0xab14, 0x4021, 0x33b7, 0x400d, 0x44eb, 0x439c, 0x1ff6, 0x4056, 0x414b, 0x18e1, 0x34b5, 0xb23e, 0x465d, 0xa16f, 0x41a9, 0x1047, 0x2a0d, 0x290c, 0xa552, 0x403b, 0xbf43, 0x46d2, 0xb07c, 0x42ca, 0xb007, 0xbae7, 0x45e5, 0x41aa, 0xa900, 0x4148, 0xb203, 0x411a, 0x44d0, 0xb236, 0x40bf, 0x2b7a, 0xbfd1, 0x423c, 0x4323, 0xba6d, 0x4325, 0x45b0, 0x4173, 0xbf46, 0xbada, 0x430e, 0x42d7, 0x415f, 0x4335, 0x445e, 0x4038, 0x4170, 0x4041, 0x422f, 0x4206, 0x4306, 0xba01, 0xb080, 0x0116, 0x1e6f, 0x31c7, 0xb210, 0xba4a, 0xb26a, 0xb2a4, 0x3127, 0x4140, 0xafb4, 0xb28c, 0xb279, 0xbf31, 0x4456, 0x40c0, 0x344c, 0x43eb, 0x0763, 0x042b, 0x4160, 0x0f4f, 0x4484, 0xa6f6, 0x4115, 0x436f, 0x3b87, 0xb283, 0x39a6, 0x4013, 0x2aca, 0x414d, 0x4008, 0xb29b, 0xbfe4, 0x466c, 0x43db, 0x42c5, 0xbac7, 0x22cb, 0x4678, 0x4017, 0xb218, 0x1bfe, 0x43a6, 0xb2e2, 0x1b61, 0x4423, 0x2a87, 0x430c, 0x1d9a, 0xb206, 0x425d, 0xb21c, 0xbaeb, 0x1d87, 0x4123, 0xb030, 0xbfc8, 0xb25a, 0xa621, 0x16b0, 0xba19, 0x411f, 0x43b7, 0x26fe, 0x41c8, 0x419f, 0x40cc, 0xa286, 0xba7d, 0xbf4e, 0xb2a6, 0xb21e, 0x19e8, 0x22f9, 0x43e2, 0x1b9a, 0xb0d5, 0xbae9, 0x403a, 0xb2d7, 0x420a, 0x4345, 0xbfd8, 0x434e, 0x2382, 0x40dc, 0xb2dc, 0x1efb, 0xbfaf, 0xbfb0, 0xbaed, 0xbaea, 0x4249, 0x1806, 0x4459, 0xba0d, 0x1be8, 0xb2c6, 0x4346, 0x4302, 0x1483, 0x36d3, 0xb25d, 0x1e58, 0x0383, 0x42e7, 0xb0c2, 0x2be8, 0x1172, 0x1f26, 0x40d3, 0x1c1f, 0x42f0, 0x0b5c, 0xbf41, 0xa6e6, 0x4318, 0x3b45, 0x3690, 0x43c9, 0x40c7, 0x43c9, 0xbf38, 0x44f5, 0xbf00, 0x1d4e, 0xb055, 0x40d0, 0x298a, 0x4352, 0xba74, 0xa308, 0x1c72, 0x44f4, 0xb28c, 0xba4a, 0x438c, 0x4208, 0x1ce7, 0x4581, 0xbf93, 0x445f, 0x4041, 0xb06f, 0x40e4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xd71e5741, 0xc26ca9a0, 0xc815b4b8, 0x2e87799c, 0xd6d7ab03, 0x28643399, 0xee47b812, 0x4d2e6ed2, 0xb0352da7, 0xaedffe24, 0x03886f34, 0xf8a78ddb, 0x3400fdbb, 0x65c78639, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x0388d025, 0x880325d0, 0x000017f8, 0x00000000, 0x00000074, 0x0388d02a, 0x00000003, 0x694ff1d5, 0x65c78249, 0x03886f34, 0x0388b858, 0x7789f72c, 0x038871d4, 0x00000000, 0x200001d0 }, + Instructions = [0x4393, 0x413f, 0x4166, 0xa433, 0x409c, 0xb2e8, 0x1cc5, 0xba5a, 0xaf1d, 0x4249, 0x158a, 0x400c, 0xbf02, 0xba4d, 0x1b2a, 0x0683, 0x409b, 0x4033, 0x2766, 0xbf00, 0x43bc, 0x4593, 0x4623, 0x40f0, 0xba2d, 0x433c, 0xbfcc, 0x0712, 0xa0ee, 0x301a, 0x400e, 0x4218, 0x428a, 0xa5a0, 0x4362, 0xb28f, 0x4270, 0x3fd6, 0x40b4, 0x2c32, 0x4494, 0xb0e0, 0xba73, 0x2cfd, 0x4118, 0xba2a, 0xb24c, 0x2d2c, 0x1a18, 0x00d8, 0xbacb, 0x4396, 0xbf0b, 0xb244, 0x1eb5, 0x4154, 0xbacc, 0xb258, 0x1b71, 0xbfb7, 0xb2f8, 0xb0c5, 0x01d6, 0xbad7, 0x240f, 0x1dd7, 0x42f5, 0x4691, 0xbfb0, 0x1ca2, 0x15b5, 0x3be3, 0x4127, 0x4122, 0x403e, 0x4065, 0x4314, 0x1a38, 0x1e93, 0xba0d, 0x1ea0, 0xbaf7, 0xa3e8, 0x42c5, 0x1f42, 0xbf1b, 0x40c5, 0x461d, 0xb013, 0x40a2, 0x1903, 0x4388, 0xb090, 0xbfc1, 0x42fe, 0x42a9, 0x4353, 0x41c2, 0xba5c, 0x406b, 0x4351, 0x41ba, 0xbfe0, 0xb254, 0x1057, 0x41ba, 0xba06, 0xb259, 0x067d, 0x40f4, 0xba18, 0x45b0, 0x3200, 0x405a, 0xba03, 0xbfde, 0x4127, 0x4379, 0x400c, 0xb20e, 0x0f5d, 0x41b4, 0x1f75, 0x416d, 0x413c, 0x1d18, 0x3c86, 0x41e6, 0x1d1e, 0xb281, 0x1f3c, 0x4218, 0x40f8, 0xbf29, 0x286f, 0xa620, 0xb2bb, 0x0150, 0xbac4, 0xac02, 0x439c, 0xb0fa, 0x40df, 0x1f98, 0x4316, 0x3d6d, 0x414e, 0x4159, 0xba17, 0xbfb1, 0x1a85, 0x4214, 0x423d, 0x0134, 0x4669, 0xb254, 0xbf95, 0xb2ed, 0x428b, 0x4328, 0x4256, 0x12d9, 0x40cc, 0xb23e, 0xb025, 0x42fe, 0x4022, 0xb0da, 0x42a9, 0xad61, 0x1f53, 0x46f9, 0x4462, 0xba7b, 0x3985, 0x4142, 0xa656, 0x21c4, 0x4255, 0xba64, 0xb20b, 0xa593, 0x43be, 0xbf8f, 0x463b, 0xb038, 0xb030, 0x4055, 0x17ca, 0xbacb, 0x1f67, 0x4055, 0x1923, 0x1a46, 0xb2a0, 0x41af, 0x4285, 0xbfa4, 0x3160, 0x42c8, 0x29ec, 0x1c50, 0x412c, 0xbaec, 0xb225, 0x44d4, 0xba56, 0xb23d, 0xbfdb, 0x275b, 0x415f, 0xb0ea, 0x21fb, 0x40d9, 0x4325, 0xb20c, 0x43d8, 0xa916, 0x4239, 0x438b, 0x418f, 0x4275, 0xb25f, 0x2252, 0xb262, 0x4688, 0x1c27, 0xb234, 0x19e4, 0x41b6, 0xbfb4, 0x3226, 0xa8bd, 0x40b1, 0xb24f, 0x1848, 0x436f, 0x4372, 0x436f, 0x426f, 0xb2b6, 0xba5a, 0xb2c6, 0x2bac, 0x4160, 0x4002, 0x40b0, 0xba46, 0x319b, 0xb251, 0x2a9a, 0x428b, 0x4239, 0x28d5, 0x46e9, 0x4030, 0x4167, 0xbf2e, 0xbf00, 0x41cc, 0xb2e1, 0xba20, 0x4080, 0x1179, 0x4484, 0xbaf4, 0xbf48, 0xb2f8, 0x4320, 0x426b, 0xb2ee, 0x350c, 0xb241, 0x4386, 0x3af4, 0x42b4, 0xa8e5, 0x4369, 0x4315, 0x4110, 0x407b, 0xbaff, 0x419e, 0xbf52, 0x40f2, 0x45b5, 0x41ec, 0x402a, 0xb21b, 0xbf6c, 0xb0ad, 0x40cd, 0x4094, 0xb07c, 0x1fbb, 0x286b, 0x422d, 0x1f2b, 0x401a, 0x42aa, 0x406b, 0x4473, 0x41d8, 0xb08d, 0xba59, 0xb03e, 0x1d7d, 0xaf13, 0x45e8, 0x4169, 0x418a, 0x4366, 0xb001, 0x3913, 0x40ef, 0x40fa, 0xbf74, 0x1bcd, 0x42e7, 0x40cf, 0x1959, 0xb20a, 0xb2ec, 0x1261, 0x40ab, 0x4062, 0x34eb, 0x40fb, 0x4255, 0xb052, 0x40e4, 0x414f, 0x4241, 0xb21f, 0xb2f9, 0x2894, 0x4546, 0x2e67, 0xbf0a, 0x2dcd, 0x3df4, 0x1431, 0x426d, 0x162d, 0xbfd8, 0x4255, 0xbaf2, 0x4263, 0xa5ca, 0x43e9, 0xb06b, 0x2b34, 0xba1b, 0xbf60, 0x42bc, 0x0a25, 0x4584, 0x40f2, 0xb07f, 0x3185, 0xb0b6, 0xbaf2, 0xbf86, 0xafbf, 0xb2a6, 0x10ea, 0x4379, 0x43ec, 0x4291, 0x2f80, 0xb2a8, 0x400b, 0xb2a7, 0x4007, 0xb23c, 0x454b, 0x40ab, 0xbad0, 0xbf84, 0x43ab, 0x4252, 0x40c8, 0x400f, 0x43ae, 0xa451, 0x458e, 0xbae0, 0x4683, 0x412d, 0x3ea7, 0x2233, 0x4564, 0x3aa8, 0x421a, 0x1fc8, 0xa2ab, 0xba49, 0x18b2, 0x2a32, 0x40b7, 0xb25e, 0xba1f, 0xb025, 0xb2d7, 0x41f2, 0xbfe1, 0x1fa1, 0xb0a2, 0x43bd, 0x1812, 0x0fdf, 0xba2f, 0x42e5, 0xb238, 0x197b, 0x1d3f, 0xbfa1, 0x1def, 0x1a08, 0x41f5, 0x352c, 0xb021, 0x1891, 0x004f, 0x427c, 0x402a, 0x41fb, 0x4303, 0x4396, 0x3d52, 0xbac4, 0xba78, 0x40b0, 0x1d86, 0xb249, 0x40c1, 0x4030, 0xbac9, 0xbf3a, 0x412d, 0x4335, 0x3fe3, 0xb2f3, 0x0403, 0xb24c, 0x4194, 0x402f, 0x4245, 0x43a7, 0x4298, 0x2c2c, 0x1d25, 0x0a9b, 0xba72, 0x41f4, 0x4083, 0x1161, 0xba17, 0xac8c, 0x4595, 0x42b2, 0x4457, 0x2b24, 0xba1b, 0x4135, 0xb0ba, 0xbf14, 0x41e8, 0x2741, 0x1bcb, 0x3afa, 0x438c, 0xbf36, 0x4028, 0x40d6, 0x42dd, 0xb2cf, 0x4334, 0x4390, 0x41f0, 0xbf8d, 0x4576, 0x2bc5, 0x46b2, 0xa44d, 0x438e, 0x2439, 0xb2c1, 0x181c, 0xa1d4, 0x4448, 0xbf67, 0x4360, 0xb00a, 0xbfa0, 0x423f, 0x32f8, 0x3dbe, 0x4301, 0x43aa, 0x1ba3, 0x4258, 0xbf80, 0x41df, 0xb242, 0x1e9a, 0x0f0a, 0x389a, 0xb2fa, 0x4220, 0x401f, 0x4561, 0x1a77, 0xbf5b, 0xb2e7, 0x1879, 0x4132, 0x46db, 0xb2e1, 0x1aa2, 0x4100, 0x25d0, 0x403b, 0x13ba, 0xbf69, 0x4238, 0xba3f, 0xa5ad, 0x1b87, 0x4406, 0xa157, 0x006d, 0xbfc0, 0x4349, 0x16fb, 0x18ca, 0x406f, 0xb049, 0x43cb, 0x435e, 0xabbe, 0xba66, 0xbf8f, 0x29de, 0xbfe0, 0x35d1, 0x21e8, 0xb2b1, 0x4019, 0x1f16, 0xb07f, 0x4124, 0x437b, 0x324a, 0x4641, 0x4192, 0x40cb, 0xbf5b, 0xb257, 0x1a8b, 0x0f49, 0x0eeb, 0x4244, 0x4038, 0x4499, 0x43ce, 0xbf18, 0x1b06, 0x1fb0, 0xbfa0, 0x2f5c, 0x44dd, 0x4381, 0x4245, 0xb223, 0x4260, 0x1c09, 0x12f5, 0x0433, 0x4285, 0xbf48, 0x43fa, 0x05a8, 0x3557, 0x42ed, 0xb03e, 0xba76, 0x4124, 0x1ab2, 0xbf95, 0x4010, 0x4581, 0x459a, 0xb229, 0x0b3c, 0x4452, 0xa755, 0x4476, 0xb066, 0x13df, 0xb0b4, 0x41f9, 0xb2ac, 0x432a, 0x409f, 0x2410, 0xba48, 0xbade, 0x4291, 0x085f, 0xb2dd, 0x4346, 0xbfc6, 0x4069, 0x408a, 0x45ed, 0x4370, 0x2b4f, 0x463d, 0x1f7a, 0xba33, 0x4119, 0x4119, 0x4277, 0x08b3, 0x24d8, 0x018b, 0x1dd1, 0x4190, 0xb259, 0x408e, 0xb094, 0x434b, 0xa16e, 0x417b, 0xb28c, 0xbf92, 0x1ae1, 0x14f3, 0x1b4a, 0x4549, 0xbf48, 0x3edd, 0x0f59, 0x3f27, 0x18da, 0xb2ee, 0x412b, 0xa606, 0xba3a, 0xb236, 0x41c3, 0xb024, 0xb0d3, 0x40f2, 0x4301, 0xb0eb, 0x40a1, 0x284b, 0x40bd, 0x1e28, 0x41d3, 0x4243, 0xbfca, 0xa24e, 0x4105, 0x0a58, 0x1fd6, 0x41f4, 0xbfc8, 0xb268, 0x42ac, 0x413b, 0xb285, 0xb0d4, 0x400b, 0x43e2, 0x3133, 0x4316, 0x4319, 0x4398, 0xb27b, 0x2780, 0x4343, 0x17d6, 0xb242, 0x1282, 0x1f3e, 0x4285, 0x42a2, 0xb0ed, 0x40a5, 0x439a, 0x1c5f, 0x1d3b, 0xb032, 0xbfbd, 0xb26f, 0x42e2, 0x4350, 0x4353, 0x1d6d, 0xb2af, 0x40ad, 0x41e6, 0x4080, 0x43b6, 0x4064, 0x4007, 0x40a8, 0x4302, 0x11e1, 0x41dd, 0xb2cd, 0x4350, 0xba24, 0x4208, 0xb24d, 0x1c89, 0x4262, 0xba71, 0xbf89, 0x4357, 0x42ef, 0xb2d6, 0xb26e, 0xb208, 0xb275, 0xbf1d, 0xb2ee, 0x1944, 0xb2ce, 0xba7f, 0x36b1, 0x388f, 0x40ce, 0x4368, 0x19b9, 0x01c7, 0x24f5, 0xba7b, 0x4267, 0x4143, 0xbf32, 0x4205, 0xba59, 0x40c0, 0x3dbe, 0x46d5, 0x1ac7, 0x4195, 0x41db, 0xb2bb, 0x43c4, 0x1fcd, 0x42f1, 0x42d8, 0x1df1, 0xb2fa, 0x41d5, 0xbf0c, 0x41a8, 0x4201, 0xa7e8, 0xbf02, 0x42d1, 0x4116, 0x1c10, 0x43f6, 0x40df, 0x0a6b, 0x41ac, 0x42f3, 0xb2b6, 0x43bb, 0x1010, 0xba5d, 0x43c6, 0xb022, 0x3144, 0x41f9, 0xac9e, 0x43b2, 0x3daf, 0xa1b3, 0x19fa, 0xbfae, 0x42b3, 0x467d, 0x4000, 0xaa59, 0xba2c, 0x090f, 0x1860, 0xb022, 0x2209, 0x1d3a, 0xba15, 0x4138, 0x43fb, 0x424b, 0xbaf1, 0x41fd, 0xba49, 0x461b, 0x41b4, 0xae22, 0xa412, 0x1d38, 0xbf4a, 0x4239, 0xb25f, 0x258a, 0xab14, 0x4021, 0x33b7, 0x400d, 0x44eb, 0x439c, 0x1ff6, 0x4056, 0x414b, 0x18e1, 0x34b5, 0xb23e, 0x465d, 0xa16f, 0x41a9, 0x1047, 0x2a0d, 0x290c, 0xa552, 0x403b, 0xbf43, 0x46d2, 0xb07c, 0x42ca, 0xb007, 0xbae7, 0x45e5, 0x41aa, 0xa900, 0x4148, 0xb203, 0x411a, 0x44d0, 0xb236, 0x40bf, 0x2b7a, 0xbfd1, 0x423c, 0x4323, 0xba6d, 0x4325, 0x45b0, 0x4173, 0xbf46, 0xbada, 0x430e, 0x42d7, 0x415f, 0x4335, 0x445e, 0x4038, 0x4170, 0x4041, 0x422f, 0x4206, 0x4306, 0xba01, 0xb080, 0x0116, 0x1e6f, 0x31c7, 0xb210, 0xba4a, 0xb26a, 0xb2a4, 0x3127, 0x4140, 0xafb4, 0xb28c, 0xb279, 0xbf31, 0x4456, 0x40c0, 0x344c, 0x43eb, 0x0763, 0x042b, 0x4160, 0x0f4f, 0x4484, 0xa6f6, 0x4115, 0x436f, 0x3b87, 0xb283, 0x39a6, 0x4013, 0x2aca, 0x414d, 0x4008, 0xb29b, 0xbfe4, 0x466c, 0x43db, 0x42c5, 0xbac7, 0x22cb, 0x4678, 0x4017, 0xb218, 0x1bfe, 0x43a6, 0xb2e2, 0x1b61, 0x4423, 0x2a87, 0x430c, 0x1d9a, 0xb206, 0x425d, 0xb21c, 0xbaeb, 0x1d87, 0x4123, 0xb030, 0xbfc8, 0xb25a, 0xa621, 0x16b0, 0xba19, 0x411f, 0x43b7, 0x26fe, 0x41c8, 0x419f, 0x40cc, 0xa286, 0xba7d, 0xbf4e, 0xb2a6, 0xb21e, 0x19e8, 0x22f9, 0x43e2, 0x1b9a, 0xb0d5, 0xbae9, 0x403a, 0xb2d7, 0x420a, 0x4345, 0xbfd8, 0x434e, 0x2382, 0x40dc, 0xb2dc, 0x1efb, 0xbfaf, 0xbfb0, 0xbaed, 0xbaea, 0x4249, 0x1806, 0x4459, 0xba0d, 0x1be8, 0xb2c6, 0x4346, 0x4302, 0x1483, 0x36d3, 0xb25d, 0x1e58, 0x0383, 0x42e7, 0xb0c2, 0x2be8, 0x1172, 0x1f26, 0x40d3, 0x1c1f, 0x42f0, 0x0b5c, 0xbf41, 0xa6e6, 0x4318, 0x3b45, 0x3690, 0x43c9, 0x40c7, 0x43c9, 0xbf38, 0x44f5, 0xbf00, 0x1d4e, 0xb055, 0x40d0, 0x298a, 0x4352, 0xba74, 0xa308, 0x1c72, 0x44f4, 0xb28c, 0xba4a, 0x438c, 0x4208, 0x1ce7, 0x4581, 0xbf93, 0x445f, 0x4041, 0xb06f, 0x40e4, 0x4770, 0xe7fe + ], + StartRegs = [0xd71e5741, 0xc26ca9a0, 0xc815b4b8, 0x2e87799c, 0xd6d7ab03, 0x28643399, 0xee47b812, 0x4d2e6ed2, 0xb0352da7, 0xaedffe24, 0x03886f34, 0xf8a78ddb, 0x3400fdbb, 0x65c78639, 0x00000000, 0x700001f0 + ], + FinalRegs = [0x00000000, 0x0388d025, 0x880325d0, 0x000017f8, 0x00000000, 0x00000074, 0x0388d02a, 0x00000003, 0x694ff1d5, 0x65c78249, 0x03886f34, 0x0388b858, 0x7789f72c, 0x038871d4, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x45a4, 0x08a7, 0xa344, 0xba0d, 0xba6a, 0x18aa, 0xb2ed, 0x027f, 0x414e, 0x3b58, 0xb06c, 0x4019, 0x443a, 0x43d5, 0x43d9, 0x3988, 0xb2fb, 0x3731, 0x42e1, 0x4198, 0xbade, 0x1852, 0x414d, 0xb2bf, 0xb272, 0xbfb3, 0x4083, 0x42cb, 0x4084, 0x023d, 0x4218, 0xba3e, 0x434c, 0xb2bb, 0x41ee, 0x1d8f, 0xbf08, 0xb2d7, 0x1ade, 0x20d7, 0x0a8f, 0x4679, 0xba77, 0x4156, 0x44c8, 0xbf0f, 0xba07, 0xb234, 0x4326, 0xb018, 0xb28c, 0x159a, 0xb050, 0x442f, 0xa0b3, 0xb0b2, 0x1cae, 0xbfc3, 0x42bf, 0xb23d, 0x4296, 0x409b, 0x46fa, 0x40c7, 0x41a1, 0xbf0f, 0x44f9, 0x28e2, 0x3304, 0x41f9, 0xbf00, 0x462c, 0x4233, 0x1f2f, 0xbad2, 0x2961, 0x2bad, 0xb0ab, 0xbf60, 0x40d6, 0x1633, 0x4280, 0xbf8f, 0x445a, 0x4398, 0x42e2, 0x40f3, 0xb05e, 0x1e98, 0x467e, 0x11ff, 0x1a98, 0x42c5, 0x4038, 0xb223, 0x1e66, 0xbae3, 0x1dcf, 0x23d7, 0xbfd1, 0x4431, 0x43ee, 0x2d7b, 0x4275, 0x07dc, 0x4320, 0x41ea, 0xb25b, 0x0fe5, 0x4131, 0x4108, 0x4338, 0xba61, 0x42d0, 0x0f3d, 0x1a3d, 0x1c5e, 0x4244, 0x40e1, 0xb094, 0xb207, 0x4499, 0xbf6e, 0xb209, 0x41a2, 0x37d8, 0xb018, 0xa0e3, 0xb217, 0x4626, 0x4466, 0x15ef, 0x433b, 0x1cf5, 0x0846, 0x191b, 0xb203, 0x4396, 0x4217, 0xbf69, 0xb090, 0x436a, 0x1b63, 0x426f, 0x0022, 0x4110, 0x2019, 0xb26d, 0x2962, 0xaf0d, 0x43d9, 0xb246, 0x085b, 0xb049, 0x43df, 0x412e, 0x42a5, 0x027f, 0xbf89, 0xb237, 0x42ae, 0x42a7, 0x36db, 0xb25a, 0x43cf, 0x1d28, 0xb0ca, 0x404e, 0xb2a9, 0x402d, 0x4268, 0xad94, 0xbf32, 0x2cef, 0x40c2, 0xba2e, 0x43fd, 0x4168, 0x43d1, 0xb2a8, 0xba30, 0x1b80, 0x40dc, 0x4035, 0x4676, 0xb08c, 0x4267, 0x409b, 0x462f, 0x408d, 0x3b28, 0x18fc, 0x4344, 0x4016, 0x42b4, 0x41a1, 0xbfdb, 0x4156, 0xa1fb, 0xb2b5, 0x1860, 0xb2aa, 0x033d, 0x42cf, 0x4399, 0x430f, 0x410f, 0xba6d, 0xbf51, 0x41fe, 0x2855, 0x45c1, 0x1740, 0x4321, 0xa3e5, 0x422e, 0x4289, 0x01e5, 0x14b8, 0xaef7, 0x4012, 0x1c72, 0x4261, 0xa856, 0x069e, 0xba61, 0x40c1, 0x0edc, 0x4040, 0xba69, 0x4012, 0x4157, 0xba5b, 0x45d6, 0xba32, 0xb000, 0x1efb, 0x4351, 0xbf36, 0x4548, 0xb0b2, 0x344a, 0xba1b, 0x1ff8, 0x4104, 0x43c9, 0xac71, 0x3da1, 0xb095, 0x423a, 0x410a, 0x43c1, 0x10b8, 0x431c, 0x42c6, 0x4100, 0xbfda, 0x3ae2, 0x46d0, 0x4241, 0xbae3, 0x0dba, 0x4297, 0xaa48, 0x286a, 0x42b0, 0x43d8, 0x00e7, 0x10ae, 0x0281, 0xb013, 0x4556, 0x1b24, 0x4093, 0x2ab6, 0x40cd, 0x41aa, 0x193f, 0x2446, 0x4344, 0x4161, 0xb2e5, 0x42e9, 0xbfb4, 0x25e1, 0x40c6, 0x4320, 0x4214, 0x4185, 0x076d, 0xb273, 0x4149, 0x0f14, 0x43bd, 0x109a, 0x4636, 0x411c, 0x43f5, 0xbfe1, 0x1ed8, 0x437e, 0x40b7, 0x0795, 0x1f94, 0x4678, 0x00c4, 0x0040, 0x1f3a, 0xbaef, 0x096f, 0x3ce4, 0x4061, 0x4241, 0x42ca, 0xb250, 0x458e, 0x308f, 0x45ba, 0x41f6, 0xb22d, 0xb0a2, 0xbaf1, 0xbfb6, 0x0318, 0x0f57, 0xac8a, 0xb2bf, 0xbfd0, 0x438d, 0x1a76, 0x4447, 0x42c0, 0xbfae, 0x182a, 0x1469, 0xa377, 0x1b30, 0xb2f1, 0x1354, 0x42e2, 0xaf4d, 0xa156, 0x40f8, 0xb26a, 0x416e, 0x2cdc, 0x2741, 0xb06b, 0x4322, 0x4689, 0x41d1, 0x462a, 0x1f1d, 0xb297, 0x415d, 0x26de, 0x4089, 0xbf78, 0x4359, 0x42f6, 0xa6c6, 0x19f5, 0x29df, 0x4285, 0x459e, 0xb297, 0x2047, 0xbf4c, 0x0551, 0x1b21, 0xb27c, 0x413a, 0x4369, 0x4052, 0xbaeb, 0x3da1, 0x06a6, 0x40de, 0x4154, 0x18f7, 0x45ea, 0x44e4, 0x43e9, 0xba2e, 0x30a4, 0xaf60, 0x430e, 0xbac3, 0x1af2, 0x4158, 0xb21a, 0xbf2b, 0xbadf, 0x4055, 0x41d9, 0x4018, 0x44cd, 0xbfd0, 0x3e73, 0xa07c, 0xbad5, 0xb2a1, 0x1a51, 0x41e0, 0xbfe0, 0x462f, 0x409f, 0x4095, 0xba69, 0x04c2, 0x426e, 0xbf00, 0x40ae, 0x409d, 0x4312, 0x417f, 0x4312, 0x098f, 0xb0e9, 0xbfa4, 0x416a, 0xb074, 0x44f1, 0x421b, 0xb02c, 0x3394, 0xaced, 0x4636, 0x43b6, 0x2b1c, 0x1f46, 0x1ab5, 0x4235, 0x4030, 0x40e0, 0xba47, 0xb207, 0xb25c, 0x1786, 0xbaf3, 0x25bc, 0x430b, 0x4179, 0x436c, 0xbf7b, 0x4616, 0xb033, 0xa35a, 0x0a2f, 0x433c, 0x434f, 0xb254, 0xb2b7, 0x40a2, 0x140c, 0x1d7a, 0xb0df, 0xbf9b, 0x1396, 0x4323, 0x04ee, 0x1ad3, 0x1df6, 0x4001, 0x0825, 0xa444, 0x4221, 0x2085, 0xbfb0, 0x42fc, 0xa67e, 0x419c, 0xba0a, 0xa828, 0x40ec, 0x28b6, 0x4364, 0x4362, 0x2892, 0x419c, 0xb206, 0xb2f1, 0x1795, 0xbf6d, 0x0f94, 0x43e5, 0x1e8c, 0xa665, 0xb0e9, 0x06c5, 0xb22e, 0xbac4, 0x1f02, 0xba21, 0x0048, 0x43f7, 0x402f, 0xbf69, 0x43e2, 0x39d0, 0x1c2b, 0x0c3d, 0x41f5, 0x40a7, 0x4254, 0x4303, 0xa98f, 0x19bb, 0x27cd, 0x43bc, 0xb219, 0x4208, 0x43db, 0xb0e1, 0x42ac, 0x43c3, 0x400d, 0x4151, 0x45e1, 0x4097, 0xba76, 0x0cb1, 0x420d, 0x42eb, 0x466a, 0xbf9b, 0x409e, 0x46c0, 0x4168, 0xaba2, 0x01b0, 0x358b, 0x42e1, 0xbad1, 0x43e7, 0x415f, 0x42bf, 0xb09d, 0x1b7c, 0x38eb, 0xb212, 0xb298, 0x1b3e, 0x3148, 0xbfbd, 0xb038, 0xb003, 0x40b0, 0x1604, 0xbf5b, 0x45a4, 0x1e35, 0x2f5a, 0x0a27, 0x40ff, 0x42d9, 0x4196, 0x0bf3, 0xb0cf, 0x43c3, 0x14c9, 0x41c2, 0x419c, 0xb05f, 0xba3d, 0x407e, 0x4118, 0xbaed, 0x2f0a, 0x066f, 0x409c, 0x4132, 0x40c5, 0xbff0, 0x4592, 0xbf26, 0x1bfb, 0x1004, 0x439a, 0x41bb, 0xbf5e, 0x4543, 0x4243, 0x1faa, 0x4099, 0xb2c4, 0x1c03, 0xb2a7, 0xb200, 0x42e0, 0x01fa, 0x4083, 0x40dd, 0x19d7, 0xb2a3, 0xb2e3, 0xbf8a, 0x19a1, 0xa995, 0x40ad, 0x4564, 0x1a6c, 0x44b1, 0xbf82, 0x29f0, 0x407f, 0x4032, 0x0d94, 0x43c7, 0x1cd1, 0xbfdc, 0xb02a, 0xba7c, 0xa53e, 0x191e, 0x3274, 0x06ff, 0xbf0d, 0xa643, 0x19ed, 0x1ab6, 0x4292, 0xade2, 0x4138, 0x35a7, 0x42a6, 0x2df3, 0xbfc8, 0x410c, 0x194b, 0x40d9, 0x4350, 0xbac2, 0x42b8, 0xba17, 0x408f, 0x430c, 0xb2b4, 0x425b, 0x4319, 0x423d, 0x42c0, 0xb2cf, 0xb233, 0x4601, 0xba6b, 0x448d, 0x435f, 0x4133, 0x421b, 0xbfd7, 0xb263, 0xba08, 0x4386, 0x40c0, 0xba74, 0xb283, 0x4275, 0x405a, 0xa597, 0x3eab, 0xa03e, 0x4317, 0x4194, 0x46d5, 0x40d6, 0x4626, 0x407a, 0x4618, 0xba4b, 0x4185, 0x1fd4, 0xbac4, 0x4676, 0xbad6, 0xbade, 0x42a0, 0x425b, 0x43ee, 0xbf5a, 0x4137, 0xba4e, 0x40aa, 0x43e6, 0xb283, 0x4295, 0xa6de, 0x418f, 0x4314, 0x0bb1, 0x4278, 0xbaea, 0xb256, 0xb0c2, 0x0164, 0x218f, 0xbfb1, 0x40d5, 0x40d7, 0x19d6, 0x4197, 0x4255, 0x42cf, 0x4220, 0x41f8, 0x455e, 0x42fc, 0x42b1, 0x40e2, 0xb01b, 0xb207, 0x4362, 0x0dc2, 0x2f3b, 0x2d06, 0xb259, 0x46ec, 0x46c9, 0xba27, 0x400c, 0xba15, 0xba27, 0x28db, 0x416d, 0x1f98, 0xbf66, 0x4101, 0x4379, 0x4008, 0x26ab, 0x2a72, 0x14da, 0x4675, 0x40b5, 0xbaf2, 0xb2a0, 0x26d3, 0x44c5, 0x094c, 0x41cc, 0xbad0, 0xb255, 0x40f8, 0xbaf0, 0x41d1, 0x1a2c, 0x19e9, 0xb213, 0x263a, 0x429b, 0x4443, 0x1d60, 0x401d, 0xb2b7, 0xbf25, 0x1edf, 0x437a, 0xb0e0, 0x1fdb, 0x1eff, 0xbf08, 0x40c6, 0x418d, 0xac60, 0x41c8, 0x4311, 0xb056, 0x43fd, 0xba3a, 0x1e0a, 0x1c07, 0x4110, 0xba6f, 0xba05, 0x465e, 0x198e, 0xba67, 0x40eb, 0xbfae, 0xb2af, 0x4272, 0xa551, 0xb29a, 0x43dc, 0x42df, 0xba5c, 0x400b, 0x1e9c, 0xae12, 0x447c, 0x429a, 0x456d, 0x41f1, 0x4650, 0xba05, 0x40b7, 0x4385, 0xb2de, 0x4067, 0xbf2a, 0x4065, 0xb20c, 0xbf80, 0x26f3, 0x4060, 0xb27a, 0xba1e, 0xb2e5, 0x1006, 0xbfd0, 0xb226, 0xb225, 0x430a, 0x412a, 0xbf83, 0x1af2, 0x1ce9, 0x413e, 0xa670, 0x43ef, 0x43c2, 0x24d3, 0x1cdf, 0xba14, 0xbf07, 0x4635, 0x432c, 0x2b26, 0x0b9d, 0x443a, 0x1dff, 0x1813, 0xb232, 0xbf77, 0x4308, 0x0d17, 0x1c3f, 0xba68, 0x1bac, 0x445e, 0xb228, 0x43a3, 0x1d1d, 0x1fa3, 0x0765, 0x421b, 0x4133, 0x422d, 0x4113, 0x4169, 0xba43, 0x404c, 0x416f, 0x423d, 0x442f, 0xba0a, 0xbacb, 0x201f, 0xb2d1, 0x42ec, 0x32d0, 0x419e, 0xbf83, 0xbac6, 0x41a1, 0x09d4, 0x1866, 0x422b, 0x4190, 0x422c, 0x4120, 0x1b77, 0x1aa2, 0x43b8, 0x400c, 0x43c2, 0x20d1, 0xb283, 0x421d, 0x1c4a, 0x4105, 0xba4e, 0xb2d5, 0xb257, 0x420e, 0x1800, 0x434b, 0xb256, 0x4365, 0xbf33, 0x412e, 0x1fb4, 0x18f4, 0x4175, 0x4122, 0x1309, 0x41dd, 0xb2a7, 0x4093, 0x2718, 0x223b, 0xb2cd, 0xba41, 0xbf57, 0x435c, 0xa9d4, 0x40c6, 0x4628, 0xa687, 0x1abd, 0xba66, 0x42ef, 0x1edb, 0xb2a1, 0x4174, 0xac29, 0x1832, 0x3f4b, 0x40c1, 0xba29, 0x428f, 0xa663, 0xbf29, 0x437a, 0x44d5, 0x3e25, 0x1e7c, 0x46d4, 0x42d5, 0x0605, 0x3dfc, 0xb25f, 0x415b, 0xbfc3, 0x26e3, 0x3d32, 0x43a2, 0xb063, 0x4216, 0xba27, 0x4147, 0xbfc1, 0xb203, 0x40bf, 0x404c, 0x4498, 0x28ea, 0xba56, 0x456c, 0xb0f5, 0xbf80, 0x230a, 0xb21b, 0x1e7c, 0x3ee1, 0x435f, 0x1e9a, 0x417d, 0x404c, 0xbf0a, 0xba00, 0x41c0, 0xb21d, 0x4261, 0x1f4a, 0x4043, 0x41ec, 0x438f, 0xb0f5, 0xb275, 0xbfc6, 0xb0e6, 0x2fb0, 0x430d, 0x06b2, 0x435a, 0xa453, 0x46a8, 0x4074, 0x43a7, 0x0363, 0x404d, 0xbaf1, 0xba12, 0x1a9d, 0x420c, 0x447c, 0x41f8, 0x434c, 0xb292, 0xbf18, 0xb2c0, 0x4294, 0x4258, 0x4060, 0xbf9f, 0xb2b3, 0x3a02, 0xae29, 0xba20, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3cccdcbb, 0xb8b42a16, 0x5515dd66, 0x79ed5e7e, 0x48648228, 0x836897c4, 0x72bc80f9, 0xe9ea3611, 0xd38985d1, 0x943bed5a, 0x921c041b, 0x24eee228, 0x42062aa5, 0xb425effb, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0x5058e007, 0x00001f30, 0x000000d6, 0x0000301f, 0x07e05850, 0x051ddf28, 0x00001ba0, 0x01000000, 0x0000001f, 0x000010d8, 0x00001080, 0x24eee228, 0x00001080, 0x00001afc, 0x00000000, 0x800001d0 }, + Instructions = [0x45a4, 0x08a7, 0xa344, 0xba0d, 0xba6a, 0x18aa, 0xb2ed, 0x027f, 0x414e, 0x3b58, 0xb06c, 0x4019, 0x443a, 0x43d5, 0x43d9, 0x3988, 0xb2fb, 0x3731, 0x42e1, 0x4198, 0xbade, 0x1852, 0x414d, 0xb2bf, 0xb272, 0xbfb3, 0x4083, 0x42cb, 0x4084, 0x023d, 0x4218, 0xba3e, 0x434c, 0xb2bb, 0x41ee, 0x1d8f, 0xbf08, 0xb2d7, 0x1ade, 0x20d7, 0x0a8f, 0x4679, 0xba77, 0x4156, 0x44c8, 0xbf0f, 0xba07, 0xb234, 0x4326, 0xb018, 0xb28c, 0x159a, 0xb050, 0x442f, 0xa0b3, 0xb0b2, 0x1cae, 0xbfc3, 0x42bf, 0xb23d, 0x4296, 0x409b, 0x46fa, 0x40c7, 0x41a1, 0xbf0f, 0x44f9, 0x28e2, 0x3304, 0x41f9, 0xbf00, 0x462c, 0x4233, 0x1f2f, 0xbad2, 0x2961, 0x2bad, 0xb0ab, 0xbf60, 0x40d6, 0x1633, 0x4280, 0xbf8f, 0x445a, 0x4398, 0x42e2, 0x40f3, 0xb05e, 0x1e98, 0x467e, 0x11ff, 0x1a98, 0x42c5, 0x4038, 0xb223, 0x1e66, 0xbae3, 0x1dcf, 0x23d7, 0xbfd1, 0x4431, 0x43ee, 0x2d7b, 0x4275, 0x07dc, 0x4320, 0x41ea, 0xb25b, 0x0fe5, 0x4131, 0x4108, 0x4338, 0xba61, 0x42d0, 0x0f3d, 0x1a3d, 0x1c5e, 0x4244, 0x40e1, 0xb094, 0xb207, 0x4499, 0xbf6e, 0xb209, 0x41a2, 0x37d8, 0xb018, 0xa0e3, 0xb217, 0x4626, 0x4466, 0x15ef, 0x433b, 0x1cf5, 0x0846, 0x191b, 0xb203, 0x4396, 0x4217, 0xbf69, 0xb090, 0x436a, 0x1b63, 0x426f, 0x0022, 0x4110, 0x2019, 0xb26d, 0x2962, 0xaf0d, 0x43d9, 0xb246, 0x085b, 0xb049, 0x43df, 0x412e, 0x42a5, 0x027f, 0xbf89, 0xb237, 0x42ae, 0x42a7, 0x36db, 0xb25a, 0x43cf, 0x1d28, 0xb0ca, 0x404e, 0xb2a9, 0x402d, 0x4268, 0xad94, 0xbf32, 0x2cef, 0x40c2, 0xba2e, 0x43fd, 0x4168, 0x43d1, 0xb2a8, 0xba30, 0x1b80, 0x40dc, 0x4035, 0x4676, 0xb08c, 0x4267, 0x409b, 0x462f, 0x408d, 0x3b28, 0x18fc, 0x4344, 0x4016, 0x42b4, 0x41a1, 0xbfdb, 0x4156, 0xa1fb, 0xb2b5, 0x1860, 0xb2aa, 0x033d, 0x42cf, 0x4399, 0x430f, 0x410f, 0xba6d, 0xbf51, 0x41fe, 0x2855, 0x45c1, 0x1740, 0x4321, 0xa3e5, 0x422e, 0x4289, 0x01e5, 0x14b8, 0xaef7, 0x4012, 0x1c72, 0x4261, 0xa856, 0x069e, 0xba61, 0x40c1, 0x0edc, 0x4040, 0xba69, 0x4012, 0x4157, 0xba5b, 0x45d6, 0xba32, 0xb000, 0x1efb, 0x4351, 0xbf36, 0x4548, 0xb0b2, 0x344a, 0xba1b, 0x1ff8, 0x4104, 0x43c9, 0xac71, 0x3da1, 0xb095, 0x423a, 0x410a, 0x43c1, 0x10b8, 0x431c, 0x42c6, 0x4100, 0xbfda, 0x3ae2, 0x46d0, 0x4241, 0xbae3, 0x0dba, 0x4297, 0xaa48, 0x286a, 0x42b0, 0x43d8, 0x00e7, 0x10ae, 0x0281, 0xb013, 0x4556, 0x1b24, 0x4093, 0x2ab6, 0x40cd, 0x41aa, 0x193f, 0x2446, 0x4344, 0x4161, 0xb2e5, 0x42e9, 0xbfb4, 0x25e1, 0x40c6, 0x4320, 0x4214, 0x4185, 0x076d, 0xb273, 0x4149, 0x0f14, 0x43bd, 0x109a, 0x4636, 0x411c, 0x43f5, 0xbfe1, 0x1ed8, 0x437e, 0x40b7, 0x0795, 0x1f94, 0x4678, 0x00c4, 0x0040, 0x1f3a, 0xbaef, 0x096f, 0x3ce4, 0x4061, 0x4241, 0x42ca, 0xb250, 0x458e, 0x308f, 0x45ba, 0x41f6, 0xb22d, 0xb0a2, 0xbaf1, 0xbfb6, 0x0318, 0x0f57, 0xac8a, 0xb2bf, 0xbfd0, 0x438d, 0x1a76, 0x4447, 0x42c0, 0xbfae, 0x182a, 0x1469, 0xa377, 0x1b30, 0xb2f1, 0x1354, 0x42e2, 0xaf4d, 0xa156, 0x40f8, 0xb26a, 0x416e, 0x2cdc, 0x2741, 0xb06b, 0x4322, 0x4689, 0x41d1, 0x462a, 0x1f1d, 0xb297, 0x415d, 0x26de, 0x4089, 0xbf78, 0x4359, 0x42f6, 0xa6c6, 0x19f5, 0x29df, 0x4285, 0x459e, 0xb297, 0x2047, 0xbf4c, 0x0551, 0x1b21, 0xb27c, 0x413a, 0x4369, 0x4052, 0xbaeb, 0x3da1, 0x06a6, 0x40de, 0x4154, 0x18f7, 0x45ea, 0x44e4, 0x43e9, 0xba2e, 0x30a4, 0xaf60, 0x430e, 0xbac3, 0x1af2, 0x4158, 0xb21a, 0xbf2b, 0xbadf, 0x4055, 0x41d9, 0x4018, 0x44cd, 0xbfd0, 0x3e73, 0xa07c, 0xbad5, 0xb2a1, 0x1a51, 0x41e0, 0xbfe0, 0x462f, 0x409f, 0x4095, 0xba69, 0x04c2, 0x426e, 0xbf00, 0x40ae, 0x409d, 0x4312, 0x417f, 0x4312, 0x098f, 0xb0e9, 0xbfa4, 0x416a, 0xb074, 0x44f1, 0x421b, 0xb02c, 0x3394, 0xaced, 0x4636, 0x43b6, 0x2b1c, 0x1f46, 0x1ab5, 0x4235, 0x4030, 0x40e0, 0xba47, 0xb207, 0xb25c, 0x1786, 0xbaf3, 0x25bc, 0x430b, 0x4179, 0x436c, 0xbf7b, 0x4616, 0xb033, 0xa35a, 0x0a2f, 0x433c, 0x434f, 0xb254, 0xb2b7, 0x40a2, 0x140c, 0x1d7a, 0xb0df, 0xbf9b, 0x1396, 0x4323, 0x04ee, 0x1ad3, 0x1df6, 0x4001, 0x0825, 0xa444, 0x4221, 0x2085, 0xbfb0, 0x42fc, 0xa67e, 0x419c, 0xba0a, 0xa828, 0x40ec, 0x28b6, 0x4364, 0x4362, 0x2892, 0x419c, 0xb206, 0xb2f1, 0x1795, 0xbf6d, 0x0f94, 0x43e5, 0x1e8c, 0xa665, 0xb0e9, 0x06c5, 0xb22e, 0xbac4, 0x1f02, 0xba21, 0x0048, 0x43f7, 0x402f, 0xbf69, 0x43e2, 0x39d0, 0x1c2b, 0x0c3d, 0x41f5, 0x40a7, 0x4254, 0x4303, 0xa98f, 0x19bb, 0x27cd, 0x43bc, 0xb219, 0x4208, 0x43db, 0xb0e1, 0x42ac, 0x43c3, 0x400d, 0x4151, 0x45e1, 0x4097, 0xba76, 0x0cb1, 0x420d, 0x42eb, 0x466a, 0xbf9b, 0x409e, 0x46c0, 0x4168, 0xaba2, 0x01b0, 0x358b, 0x42e1, 0xbad1, 0x43e7, 0x415f, 0x42bf, 0xb09d, 0x1b7c, 0x38eb, 0xb212, 0xb298, 0x1b3e, 0x3148, 0xbfbd, 0xb038, 0xb003, 0x40b0, 0x1604, 0xbf5b, 0x45a4, 0x1e35, 0x2f5a, 0x0a27, 0x40ff, 0x42d9, 0x4196, 0x0bf3, 0xb0cf, 0x43c3, 0x14c9, 0x41c2, 0x419c, 0xb05f, 0xba3d, 0x407e, 0x4118, 0xbaed, 0x2f0a, 0x066f, 0x409c, 0x4132, 0x40c5, 0xbff0, 0x4592, 0xbf26, 0x1bfb, 0x1004, 0x439a, 0x41bb, 0xbf5e, 0x4543, 0x4243, 0x1faa, 0x4099, 0xb2c4, 0x1c03, 0xb2a7, 0xb200, 0x42e0, 0x01fa, 0x4083, 0x40dd, 0x19d7, 0xb2a3, 0xb2e3, 0xbf8a, 0x19a1, 0xa995, 0x40ad, 0x4564, 0x1a6c, 0x44b1, 0xbf82, 0x29f0, 0x407f, 0x4032, 0x0d94, 0x43c7, 0x1cd1, 0xbfdc, 0xb02a, 0xba7c, 0xa53e, 0x191e, 0x3274, 0x06ff, 0xbf0d, 0xa643, 0x19ed, 0x1ab6, 0x4292, 0xade2, 0x4138, 0x35a7, 0x42a6, 0x2df3, 0xbfc8, 0x410c, 0x194b, 0x40d9, 0x4350, 0xbac2, 0x42b8, 0xba17, 0x408f, 0x430c, 0xb2b4, 0x425b, 0x4319, 0x423d, 0x42c0, 0xb2cf, 0xb233, 0x4601, 0xba6b, 0x448d, 0x435f, 0x4133, 0x421b, 0xbfd7, 0xb263, 0xba08, 0x4386, 0x40c0, 0xba74, 0xb283, 0x4275, 0x405a, 0xa597, 0x3eab, 0xa03e, 0x4317, 0x4194, 0x46d5, 0x40d6, 0x4626, 0x407a, 0x4618, 0xba4b, 0x4185, 0x1fd4, 0xbac4, 0x4676, 0xbad6, 0xbade, 0x42a0, 0x425b, 0x43ee, 0xbf5a, 0x4137, 0xba4e, 0x40aa, 0x43e6, 0xb283, 0x4295, 0xa6de, 0x418f, 0x4314, 0x0bb1, 0x4278, 0xbaea, 0xb256, 0xb0c2, 0x0164, 0x218f, 0xbfb1, 0x40d5, 0x40d7, 0x19d6, 0x4197, 0x4255, 0x42cf, 0x4220, 0x41f8, 0x455e, 0x42fc, 0x42b1, 0x40e2, 0xb01b, 0xb207, 0x4362, 0x0dc2, 0x2f3b, 0x2d06, 0xb259, 0x46ec, 0x46c9, 0xba27, 0x400c, 0xba15, 0xba27, 0x28db, 0x416d, 0x1f98, 0xbf66, 0x4101, 0x4379, 0x4008, 0x26ab, 0x2a72, 0x14da, 0x4675, 0x40b5, 0xbaf2, 0xb2a0, 0x26d3, 0x44c5, 0x094c, 0x41cc, 0xbad0, 0xb255, 0x40f8, 0xbaf0, 0x41d1, 0x1a2c, 0x19e9, 0xb213, 0x263a, 0x429b, 0x4443, 0x1d60, 0x401d, 0xb2b7, 0xbf25, 0x1edf, 0x437a, 0xb0e0, 0x1fdb, 0x1eff, 0xbf08, 0x40c6, 0x418d, 0xac60, 0x41c8, 0x4311, 0xb056, 0x43fd, 0xba3a, 0x1e0a, 0x1c07, 0x4110, 0xba6f, 0xba05, 0x465e, 0x198e, 0xba67, 0x40eb, 0xbfae, 0xb2af, 0x4272, 0xa551, 0xb29a, 0x43dc, 0x42df, 0xba5c, 0x400b, 0x1e9c, 0xae12, 0x447c, 0x429a, 0x456d, 0x41f1, 0x4650, 0xba05, 0x40b7, 0x4385, 0xb2de, 0x4067, 0xbf2a, 0x4065, 0xb20c, 0xbf80, 0x26f3, 0x4060, 0xb27a, 0xba1e, 0xb2e5, 0x1006, 0xbfd0, 0xb226, 0xb225, 0x430a, 0x412a, 0xbf83, 0x1af2, 0x1ce9, 0x413e, 0xa670, 0x43ef, 0x43c2, 0x24d3, 0x1cdf, 0xba14, 0xbf07, 0x4635, 0x432c, 0x2b26, 0x0b9d, 0x443a, 0x1dff, 0x1813, 0xb232, 0xbf77, 0x4308, 0x0d17, 0x1c3f, 0xba68, 0x1bac, 0x445e, 0xb228, 0x43a3, 0x1d1d, 0x1fa3, 0x0765, 0x421b, 0x4133, 0x422d, 0x4113, 0x4169, 0xba43, 0x404c, 0x416f, 0x423d, 0x442f, 0xba0a, 0xbacb, 0x201f, 0xb2d1, 0x42ec, 0x32d0, 0x419e, 0xbf83, 0xbac6, 0x41a1, 0x09d4, 0x1866, 0x422b, 0x4190, 0x422c, 0x4120, 0x1b77, 0x1aa2, 0x43b8, 0x400c, 0x43c2, 0x20d1, 0xb283, 0x421d, 0x1c4a, 0x4105, 0xba4e, 0xb2d5, 0xb257, 0x420e, 0x1800, 0x434b, 0xb256, 0x4365, 0xbf33, 0x412e, 0x1fb4, 0x18f4, 0x4175, 0x4122, 0x1309, 0x41dd, 0xb2a7, 0x4093, 0x2718, 0x223b, 0xb2cd, 0xba41, 0xbf57, 0x435c, 0xa9d4, 0x40c6, 0x4628, 0xa687, 0x1abd, 0xba66, 0x42ef, 0x1edb, 0xb2a1, 0x4174, 0xac29, 0x1832, 0x3f4b, 0x40c1, 0xba29, 0x428f, 0xa663, 0xbf29, 0x437a, 0x44d5, 0x3e25, 0x1e7c, 0x46d4, 0x42d5, 0x0605, 0x3dfc, 0xb25f, 0x415b, 0xbfc3, 0x26e3, 0x3d32, 0x43a2, 0xb063, 0x4216, 0xba27, 0x4147, 0xbfc1, 0xb203, 0x40bf, 0x404c, 0x4498, 0x28ea, 0xba56, 0x456c, 0xb0f5, 0xbf80, 0x230a, 0xb21b, 0x1e7c, 0x3ee1, 0x435f, 0x1e9a, 0x417d, 0x404c, 0xbf0a, 0xba00, 0x41c0, 0xb21d, 0x4261, 0x1f4a, 0x4043, 0x41ec, 0x438f, 0xb0f5, 0xb275, 0xbfc6, 0xb0e6, 0x2fb0, 0x430d, 0x06b2, 0x435a, 0xa453, 0x46a8, 0x4074, 0x43a7, 0x0363, 0x404d, 0xbaf1, 0xba12, 0x1a9d, 0x420c, 0x447c, 0x41f8, 0x434c, 0xb292, 0xbf18, 0xb2c0, 0x4294, 0x4258, 0x4060, 0xbf9f, 0xb2b3, 0x3a02, 0xae29, 0xba20, 0x4770, 0xe7fe + ], + StartRegs = [0x3cccdcbb, 0xb8b42a16, 0x5515dd66, 0x79ed5e7e, 0x48648228, 0x836897c4, 0x72bc80f9, 0xe9ea3611, 0xd38985d1, 0x943bed5a, 0x921c041b, 0x24eee228, 0x42062aa5, 0xb425effb, 0x00000000, 0x700001f0 + ], + FinalRegs = [0x5058e007, 0x00001f30, 0x000000d6, 0x0000301f, 0x07e05850, 0x051ddf28, 0x00001ba0, 0x01000000, 0x0000001f, 0x000010d8, 0x00001080, 0x24eee228, 0x00001080, 0x00001afc, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x4037, 0x4485, 0x422f, 0x1977, 0x42be, 0x400d, 0x43d8, 0x4058, 0x423d, 0x2582, 0x1864, 0xbfc1, 0x4207, 0x4056, 0x1ff5, 0xb2e1, 0x4389, 0xac7e, 0x45ac, 0x41ad, 0x408a, 0x429a, 0x1539, 0xba4c, 0xa1e6, 0xba01, 0xba09, 0xba5e, 0x421d, 0x4005, 0x247d, 0x40f4, 0xbf52, 0x42ac, 0xb214, 0xba5d, 0x100c, 0x448b, 0x080c, 0x4371, 0xbac9, 0xb2db, 0x4319, 0x43a1, 0x4219, 0x43fe, 0x422b, 0x3cd5, 0xb080, 0x4107, 0x403e, 0x4196, 0x0c01, 0xb2a8, 0x2e67, 0xb242, 0x439e, 0x42c0, 0x047e, 0xbfaf, 0x1b5d, 0x43ec, 0x406f, 0x11e0, 0xb2c9, 0x2097, 0xba48, 0x43a2, 0xbf23, 0xb213, 0x43d8, 0xba5c, 0x0e20, 0x43e3, 0x4052, 0x43ad, 0x2a92, 0x1b79, 0x421d, 0xba10, 0x4612, 0x4408, 0xba35, 0x411e, 0xb273, 0xb241, 0x43ec, 0xb017, 0x2b0d, 0x41fb, 0x3ce9, 0xb2b0, 0x40b7, 0xbff0, 0x4191, 0xb226, 0x2331, 0xbf3f, 0xb0e7, 0xba0c, 0xb016, 0xba4c, 0x4323, 0x4241, 0x40ad, 0xbf23, 0x426d, 0x4083, 0x1bd2, 0xa309, 0x1e36, 0xa492, 0xb0c1, 0x1ba7, 0xba32, 0xb2e5, 0x4340, 0x43a3, 0x41af, 0x1493, 0x11be, 0xba11, 0x4274, 0xba14, 0xb056, 0x1c8c, 0x2879, 0x4028, 0x077b, 0x406e, 0x3ff9, 0xbf85, 0x4284, 0x46b9, 0xb247, 0xa8d2, 0x409f, 0xb2c5, 0xba69, 0x050c, 0x1b37, 0x1086, 0x4247, 0x40d0, 0xac04, 0x41e5, 0x41b2, 0x40ff, 0xac10, 0x431d, 0xa41c, 0x4147, 0x44c9, 0xb2b5, 0x4333, 0xbf51, 0x46a9, 0x4598, 0x4110, 0x403c, 0xb26d, 0xb0aa, 0x2212, 0x449a, 0x2adb, 0x1f40, 0xb0c6, 0xba43, 0x3c79, 0x4152, 0xba29, 0x414a, 0x4285, 0x01b1, 0x3d68, 0x1ff0, 0x43ae, 0x410e, 0xbf6f, 0xba00, 0xa19f, 0xb071, 0x4007, 0x41f6, 0xb28f, 0x435e, 0x0d65, 0xa66a, 0x41db, 0x42d0, 0xb006, 0xb246, 0x4142, 0xbf00, 0xb28b, 0x0d98, 0xb297, 0xbf24, 0x409d, 0x4090, 0x434a, 0x4085, 0x42df, 0x40f4, 0x4009, 0x41af, 0x4157, 0x416f, 0x423d, 0x4281, 0xb05e, 0x4370, 0xba4f, 0x19da, 0xb206, 0xba78, 0xba32, 0xbfa5, 0x43f3, 0x2473, 0x28a5, 0x42ca, 0xbf78, 0xb229, 0xbaee, 0xba52, 0x4157, 0x40e9, 0xaa96, 0x409d, 0x4090, 0xb269, 0x4361, 0x466d, 0x434c, 0x43ab, 0x45b9, 0xba6b, 0x1c45, 0x18f8, 0xbfc7, 0x0236, 0x42ff, 0x35f7, 0x1e55, 0x4148, 0xb2f9, 0x16a8, 0x417e, 0x402d, 0x40cd, 0xb0a4, 0x313e, 0x225a, 0x1136, 0xa497, 0x45f4, 0xbfb6, 0x418e, 0x4639, 0x1c68, 0x419e, 0x3bee, 0x1b1a, 0xb030, 0x0ae1, 0x40bd, 0x41c8, 0xa186, 0xbf13, 0x35f5, 0x4172, 0xb2a5, 0x433d, 0x41de, 0xba70, 0x4194, 0x4157, 0x1c65, 0x2daa, 0xbfd0, 0xbf07, 0x4303, 0x4226, 0xba1d, 0xb0ad, 0xbf4c, 0x40b3, 0xbad6, 0xafc9, 0x13c7, 0x0dfe, 0xbad5, 0x4008, 0x1b04, 0x1317, 0xba12, 0x40a5, 0x43c5, 0xb045, 0x18e6, 0x414c, 0x0165, 0xb23a, 0x1c08, 0x305f, 0x3885, 0x4310, 0x4179, 0x4093, 0xb236, 0x407c, 0xb096, 0x405f, 0xbf4e, 0x1d98, 0x17f0, 0x41d5, 0x404c, 0x466b, 0x41e0, 0x41c7, 0xbfd0, 0x4302, 0xba29, 0x428b, 0x429c, 0xb01c, 0x2dec, 0x415c, 0x43d0, 0xb29e, 0x0b28, 0x2572, 0x41c2, 0xb23e, 0xbfb3, 0x1fcc, 0xb23b, 0xb29b, 0xb253, 0x4133, 0x42f0, 0x4555, 0xb00e, 0x3f9e, 0x4352, 0xba62, 0x458a, 0xbf0a, 0xb21b, 0xb2f8, 0x2bd1, 0x4347, 0xbfa8, 0x4140, 0x09a8, 0x16d2, 0x42ad, 0x40a0, 0xb29b, 0x056b, 0xa54c, 0x4224, 0xb2d8, 0x4360, 0xba52, 0x4606, 0x1ea5, 0xb20d, 0xb26c, 0x273f, 0x4062, 0x409c, 0x454c, 0xbf7f, 0x2edf, 0x4290, 0xb06e, 0x422c, 0x4244, 0x1f4d, 0xbf64, 0x432a, 0x1595, 0x413c, 0xbf2d, 0xb0c2, 0x4133, 0x41f7, 0x412b, 0x4482, 0x4347, 0xae85, 0x434d, 0x41a1, 0x42e2, 0xbae1, 0x42ed, 0xb29b, 0x4330, 0x42ba, 0x40df, 0x41eb, 0x3c9f, 0x43a2, 0x3e6f, 0x41e3, 0x229a, 0x41e4, 0x1d5e, 0xbfb6, 0x402f, 0xb201, 0x4024, 0xb030, 0x195a, 0xba4d, 0x464b, 0x4025, 0x0420, 0x1a5a, 0xb25e, 0x1a8d, 0x4133, 0x3e2c, 0x15ef, 0x45be, 0x1cb5, 0x0ec0, 0x1d99, 0x1419, 0x430b, 0x4009, 0x0d89, 0x0030, 0xb22e, 0xbfb3, 0xa6c3, 0x1c87, 0x2728, 0x2023, 0xbfb8, 0x1ee3, 0x413e, 0x41c4, 0x4384, 0x4433, 0xb04b, 0x28c5, 0xb003, 0xbf49, 0x0673, 0x1a62, 0xb2e5, 0x316f, 0xb2bb, 0xb2fe, 0x2ed3, 0x1c7c, 0x1b45, 0x41a2, 0xb29d, 0x16cb, 0x4267, 0xb284, 0x4235, 0x42d2, 0x1dff, 0x1d0a, 0x1ca3, 0x414b, 0xadb4, 0x43cd, 0x3db7, 0x410a, 0xb082, 0x1d92, 0x0461, 0xa273, 0x29f0, 0xbf77, 0x0edf, 0x1957, 0x1d7e, 0x4676, 0x4085, 0x43aa, 0xbff0, 0xb0f1, 0x4249, 0x4045, 0xb2ab, 0xad44, 0x41b4, 0x4129, 0xba75, 0x1dda, 0xaf01, 0x1aa6, 0x1e4d, 0xb27c, 0xb2eb, 0xaf98, 0x35e7, 0xbf07, 0x2f6f, 0x44f9, 0xb2b3, 0x1ed8, 0x3699, 0xbae5, 0x2d3b, 0x4017, 0x26dc, 0x2d2b, 0xba0e, 0xbf60, 0x1718, 0xbf00, 0x2c1a, 0x411e, 0x1a13, 0xb2b4, 0x219d, 0xbf07, 0x424b, 0x43bf, 0x4252, 0x098e, 0x4302, 0x250d, 0x4064, 0xb017, 0x3af3, 0x4222, 0xadfc, 0x41e5, 0xbad6, 0xa529, 0x4085, 0x41e1, 0xba1c, 0x4279, 0x43ba, 0x03fb, 0x2279, 0xb224, 0xb28e, 0x2e71, 0xb230, 0x3733, 0xb085, 0x41cb, 0xb2a8, 0xbf77, 0x4113, 0xa77d, 0x403b, 0x1d4f, 0x3e00, 0xa3df, 0xb243, 0xb2b5, 0x4396, 0x19ea, 0xba1c, 0xbfbc, 0xb23e, 0x410e, 0xba2e, 0x405f, 0x1df6, 0x1b93, 0x4148, 0x401a, 0x41ec, 0xb06d, 0x4277, 0x0f45, 0xb2c0, 0x42b2, 0x4326, 0x1426, 0x2c0d, 0xbf47, 0xba26, 0xb296, 0x1907, 0x43a4, 0x407c, 0x406f, 0x4332, 0x2146, 0x403c, 0x4173, 0x43c5, 0x1463, 0x3d72, 0xa539, 0x02d3, 0xbf85, 0xb2e9, 0x080e, 0x3996, 0xb0c8, 0x3133, 0x422c, 0xbaf6, 0x1e96, 0x414d, 0xb236, 0x4071, 0x1b45, 0x41a3, 0x1b5a, 0x04f2, 0xaaed, 0x43d5, 0x40c1, 0x43ee, 0x4631, 0xb0c0, 0x4616, 0x432f, 0x06c9, 0x1dca, 0xbfe1, 0x2a04, 0x106d, 0x40fd, 0x4417, 0xb245, 0x40c4, 0x4279, 0x1ab5, 0x424d, 0x1c8c, 0x2adf, 0xb215, 0x41fb, 0x1014, 0x41bc, 0x43a2, 0x428a, 0xba77, 0x2e89, 0xba5f, 0xb285, 0xb26f, 0x4071, 0x3346, 0xb22b, 0x4350, 0xbf01, 0x403f, 0x42ef, 0x2d94, 0xba29, 0x421b, 0xbf5c, 0x4164, 0x4616, 0x2ad2, 0xb22d, 0x1fea, 0xbf70, 0x42be, 0x409e, 0x42ef, 0x42fa, 0xb28e, 0xba3b, 0xba70, 0xb25a, 0x07ec, 0x405c, 0x40bf, 0x404e, 0x1bc1, 0xba1a, 0xba63, 0xb2e8, 0x3845, 0x4072, 0x1cc5, 0xbf6f, 0x1fd3, 0x1fd9, 0xb2f7, 0x4077, 0x423b, 0x402d, 0x1abd, 0xbf99, 0x4192, 0xbaf0, 0x3122, 0x2e08, 0x4029, 0xbafe, 0xb263, 0x42e5, 0x38e5, 0x43b0, 0xa37a, 0x3088, 0x421d, 0x2339, 0x1d50, 0xb232, 0x2ba9, 0x0059, 0x442f, 0x1e1a, 0x403d, 0x4223, 0x406b, 0xb005, 0xb2e7, 0xbf21, 0x4391, 0xbad2, 0x40bb, 0x04c5, 0x1e4a, 0x424a, 0x415e, 0x0467, 0xbad2, 0x40c5, 0xa1c5, 0x45d3, 0x43d3, 0xb24f, 0x3261, 0xb05b, 0x4364, 0x420b, 0x19f9, 0x2464, 0xbfd7, 0x240f, 0x411a, 0x0a1e, 0xbaf0, 0xb0bb, 0x40fa, 0xb232, 0x4480, 0x401a, 0x40ea, 0xaa93, 0xbff0, 0x0dd7, 0x43ce, 0x4279, 0xba2c, 0xb20b, 0x3d38, 0xbae1, 0xa965, 0x4201, 0x425a, 0x4217, 0x4469, 0x03f7, 0xbf3e, 0xb0d5, 0xb297, 0x42c4, 0x42b9, 0x42d7, 0x417f, 0x194b, 0x3e69, 0x409f, 0xbf60, 0x4219, 0xa318, 0x3a6a, 0xbf29, 0xb2a3, 0x4649, 0x467b, 0x1528, 0xb0b6, 0x40d0, 0xa445, 0xa6a6, 0x4153, 0x15db, 0x0d2b, 0xa059, 0x3ca7, 0x0813, 0x43fe, 0x199d, 0xbfd4, 0x4138, 0xb00a, 0x1936, 0x4111, 0xa06a, 0x43f8, 0x4041, 0xb2f4, 0x4293, 0xba58, 0x437f, 0x155d, 0x0878, 0xbad2, 0xb0cb, 0x1c3e, 0xbf19, 0x427a, 0x1a09, 0x17be, 0x1742, 0x1f52, 0xb282, 0x404e, 0xb263, 0xba0d, 0x425c, 0xb095, 0x41cd, 0x1d19, 0x0352, 0x1841, 0x26ff, 0xbf7c, 0xbadf, 0x1407, 0x42a3, 0x4025, 0x4330, 0xbaf6, 0xbf91, 0xa711, 0x4002, 0xa488, 0x1a65, 0x4052, 0x19a3, 0x1819, 0x43e7, 0xb239, 0x40a4, 0x31d2, 0xa11f, 0x42e6, 0x43d7, 0x4110, 0x4012, 0x2c2f, 0x43b5, 0x45a1, 0xb2dc, 0x12f9, 0x268b, 0x1993, 0x4228, 0xb20b, 0x419b, 0xb27b, 0x42bb, 0x46a2, 0xbfa9, 0x24ed, 0x41a1, 0x0d0a, 0x1559, 0x4114, 0x42f0, 0xa900, 0x4413, 0x4008, 0xa9f6, 0x05d6, 0xb2a4, 0x42e2, 0x3bdb, 0x435c, 0x1d9f, 0x183f, 0x4063, 0x0c6b, 0x30e3, 0xbf7c, 0x430f, 0x1169, 0xb20a, 0x1ce1, 0x3691, 0xa65e, 0xb20f, 0x40d9, 0x28c6, 0xba56, 0x403d, 0x43e8, 0x1e4e, 0xa2a3, 0xb21f, 0xa649, 0x4428, 0xa8cf, 0x4068, 0xb0f4, 0xb2b0, 0xbfcb, 0xb275, 0x1a56, 0x409b, 0x1ed9, 0x3908, 0x41ca, 0xb0d0, 0x1a06, 0x4230, 0x1f36, 0xbf90, 0xba26, 0x4020, 0xbf78, 0x42fe, 0x46b9, 0x3e8c, 0xa5e7, 0x4272, 0x0d53, 0x4159, 0x41b4, 0x4484, 0xbfc0, 0x4281, 0x414a, 0xad25, 0x195b, 0x43b8, 0x1f77, 0xbf67, 0x404e, 0xba33, 0xa665, 0x45ba, 0xb0ec, 0x41dd, 0x3f03, 0x343b, 0x43a5, 0xa8f0, 0x0ac1, 0x46ab, 0x4223, 0xb060, 0x4240, 0x41fc, 0x0d95, 0x1df4, 0x4299, 0xbff0, 0x0e19, 0xbaf4, 0x4137, 0x40e0, 0x4317, 0x3f08, 0xbf49, 0x1ad3, 0x1977, 0x1e1b, 0x434f, 0xb2ab, 0x22ae, 0xbfcc, 0x4435, 0x0e38, 0x414b, 0x2b42, 0x400f, 0x36e1, 0x41dd, 0xbade, 0x4190, 0xbf6f, 0xa805, 0x4073, 0x41bd, 0x05d3, 0x41b6, 0x1a96, 0x4075, 0x35a1, 0x3336, 0xa35c, 0x4332, 0x431f, 0x26bc, 0xb228, 0x0f68, 0x41ff, 0x438a, 0xb227, 0xbac0, 0xba78, 0xb073, 0x4083, 0x1d03, 0xbf41, 0x4159, 0x2f5c, 0x4081, 0x4337, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x3a4c2871, 0xacd9f7e9, 0x7bcd3cce, 0xadebfcc6, 0xde673e7c, 0x7dd2cf41, 0x7006af38, 0x2bb0bab5, 0xe2b978ed, 0x142f0bcb, 0x8bc78472, 0x492faf1e, 0x7421150a, 0x1ef52200, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0xffff18fc, 0x00000000, 0x000000a6, 0xffff1900, 0xfffffc18, 0x00063f47, 0x000000bc, 0xfffffcbc, 0xe2b978f1, 0x00000000, 0x000000b8, 0xaca0a530, 0x7421150a, 0x59414be9, 0x00000000, 0xa00001d0 }, + Instructions = [0x4037, 0x4485, 0x422f, 0x1977, 0x42be, 0x400d, 0x43d8, 0x4058, 0x423d, 0x2582, 0x1864, 0xbfc1, 0x4207, 0x4056, 0x1ff5, 0xb2e1, 0x4389, 0xac7e, 0x45ac, 0x41ad, 0x408a, 0x429a, 0x1539, 0xba4c, 0xa1e6, 0xba01, 0xba09, 0xba5e, 0x421d, 0x4005, 0x247d, 0x40f4, 0xbf52, 0x42ac, 0xb214, 0xba5d, 0x100c, 0x448b, 0x080c, 0x4371, 0xbac9, 0xb2db, 0x4319, 0x43a1, 0x4219, 0x43fe, 0x422b, 0x3cd5, 0xb080, 0x4107, 0x403e, 0x4196, 0x0c01, 0xb2a8, 0x2e67, 0xb242, 0x439e, 0x42c0, 0x047e, 0xbfaf, 0x1b5d, 0x43ec, 0x406f, 0x11e0, 0xb2c9, 0x2097, 0xba48, 0x43a2, 0xbf23, 0xb213, 0x43d8, 0xba5c, 0x0e20, 0x43e3, 0x4052, 0x43ad, 0x2a92, 0x1b79, 0x421d, 0xba10, 0x4612, 0x4408, 0xba35, 0x411e, 0xb273, 0xb241, 0x43ec, 0xb017, 0x2b0d, 0x41fb, 0x3ce9, 0xb2b0, 0x40b7, 0xbff0, 0x4191, 0xb226, 0x2331, 0xbf3f, 0xb0e7, 0xba0c, 0xb016, 0xba4c, 0x4323, 0x4241, 0x40ad, 0xbf23, 0x426d, 0x4083, 0x1bd2, 0xa309, 0x1e36, 0xa492, 0xb0c1, 0x1ba7, 0xba32, 0xb2e5, 0x4340, 0x43a3, 0x41af, 0x1493, 0x11be, 0xba11, 0x4274, 0xba14, 0xb056, 0x1c8c, 0x2879, 0x4028, 0x077b, 0x406e, 0x3ff9, 0xbf85, 0x4284, 0x46b9, 0xb247, 0xa8d2, 0x409f, 0xb2c5, 0xba69, 0x050c, 0x1b37, 0x1086, 0x4247, 0x40d0, 0xac04, 0x41e5, 0x41b2, 0x40ff, 0xac10, 0x431d, 0xa41c, 0x4147, 0x44c9, 0xb2b5, 0x4333, 0xbf51, 0x46a9, 0x4598, 0x4110, 0x403c, 0xb26d, 0xb0aa, 0x2212, 0x449a, 0x2adb, 0x1f40, 0xb0c6, 0xba43, 0x3c79, 0x4152, 0xba29, 0x414a, 0x4285, 0x01b1, 0x3d68, 0x1ff0, 0x43ae, 0x410e, 0xbf6f, 0xba00, 0xa19f, 0xb071, 0x4007, 0x41f6, 0xb28f, 0x435e, 0x0d65, 0xa66a, 0x41db, 0x42d0, 0xb006, 0xb246, 0x4142, 0xbf00, 0xb28b, 0x0d98, 0xb297, 0xbf24, 0x409d, 0x4090, 0x434a, 0x4085, 0x42df, 0x40f4, 0x4009, 0x41af, 0x4157, 0x416f, 0x423d, 0x4281, 0xb05e, 0x4370, 0xba4f, 0x19da, 0xb206, 0xba78, 0xba32, 0xbfa5, 0x43f3, 0x2473, 0x28a5, 0x42ca, 0xbf78, 0xb229, 0xbaee, 0xba52, 0x4157, 0x40e9, 0xaa96, 0x409d, 0x4090, 0xb269, 0x4361, 0x466d, 0x434c, 0x43ab, 0x45b9, 0xba6b, 0x1c45, 0x18f8, 0xbfc7, 0x0236, 0x42ff, 0x35f7, 0x1e55, 0x4148, 0xb2f9, 0x16a8, 0x417e, 0x402d, 0x40cd, 0xb0a4, 0x313e, 0x225a, 0x1136, 0xa497, 0x45f4, 0xbfb6, 0x418e, 0x4639, 0x1c68, 0x419e, 0x3bee, 0x1b1a, 0xb030, 0x0ae1, 0x40bd, 0x41c8, 0xa186, 0xbf13, 0x35f5, 0x4172, 0xb2a5, 0x433d, 0x41de, 0xba70, 0x4194, 0x4157, 0x1c65, 0x2daa, 0xbfd0, 0xbf07, 0x4303, 0x4226, 0xba1d, 0xb0ad, 0xbf4c, 0x40b3, 0xbad6, 0xafc9, 0x13c7, 0x0dfe, 0xbad5, 0x4008, 0x1b04, 0x1317, 0xba12, 0x40a5, 0x43c5, 0xb045, 0x18e6, 0x414c, 0x0165, 0xb23a, 0x1c08, 0x305f, 0x3885, 0x4310, 0x4179, 0x4093, 0xb236, 0x407c, 0xb096, 0x405f, 0xbf4e, 0x1d98, 0x17f0, 0x41d5, 0x404c, 0x466b, 0x41e0, 0x41c7, 0xbfd0, 0x4302, 0xba29, 0x428b, 0x429c, 0xb01c, 0x2dec, 0x415c, 0x43d0, 0xb29e, 0x0b28, 0x2572, 0x41c2, 0xb23e, 0xbfb3, 0x1fcc, 0xb23b, 0xb29b, 0xb253, 0x4133, 0x42f0, 0x4555, 0xb00e, 0x3f9e, 0x4352, 0xba62, 0x458a, 0xbf0a, 0xb21b, 0xb2f8, 0x2bd1, 0x4347, 0xbfa8, 0x4140, 0x09a8, 0x16d2, 0x42ad, 0x40a0, 0xb29b, 0x056b, 0xa54c, 0x4224, 0xb2d8, 0x4360, 0xba52, 0x4606, 0x1ea5, 0xb20d, 0xb26c, 0x273f, 0x4062, 0x409c, 0x454c, 0xbf7f, 0x2edf, 0x4290, 0xb06e, 0x422c, 0x4244, 0x1f4d, 0xbf64, 0x432a, 0x1595, 0x413c, 0xbf2d, 0xb0c2, 0x4133, 0x41f7, 0x412b, 0x4482, 0x4347, 0xae85, 0x434d, 0x41a1, 0x42e2, 0xbae1, 0x42ed, 0xb29b, 0x4330, 0x42ba, 0x40df, 0x41eb, 0x3c9f, 0x43a2, 0x3e6f, 0x41e3, 0x229a, 0x41e4, 0x1d5e, 0xbfb6, 0x402f, 0xb201, 0x4024, 0xb030, 0x195a, 0xba4d, 0x464b, 0x4025, 0x0420, 0x1a5a, 0xb25e, 0x1a8d, 0x4133, 0x3e2c, 0x15ef, 0x45be, 0x1cb5, 0x0ec0, 0x1d99, 0x1419, 0x430b, 0x4009, 0x0d89, 0x0030, 0xb22e, 0xbfb3, 0xa6c3, 0x1c87, 0x2728, 0x2023, 0xbfb8, 0x1ee3, 0x413e, 0x41c4, 0x4384, 0x4433, 0xb04b, 0x28c5, 0xb003, 0xbf49, 0x0673, 0x1a62, 0xb2e5, 0x316f, 0xb2bb, 0xb2fe, 0x2ed3, 0x1c7c, 0x1b45, 0x41a2, 0xb29d, 0x16cb, 0x4267, 0xb284, 0x4235, 0x42d2, 0x1dff, 0x1d0a, 0x1ca3, 0x414b, 0xadb4, 0x43cd, 0x3db7, 0x410a, 0xb082, 0x1d92, 0x0461, 0xa273, 0x29f0, 0xbf77, 0x0edf, 0x1957, 0x1d7e, 0x4676, 0x4085, 0x43aa, 0xbff0, 0xb0f1, 0x4249, 0x4045, 0xb2ab, 0xad44, 0x41b4, 0x4129, 0xba75, 0x1dda, 0xaf01, 0x1aa6, 0x1e4d, 0xb27c, 0xb2eb, 0xaf98, 0x35e7, 0xbf07, 0x2f6f, 0x44f9, 0xb2b3, 0x1ed8, 0x3699, 0xbae5, 0x2d3b, 0x4017, 0x26dc, 0x2d2b, 0xba0e, 0xbf60, 0x1718, 0xbf00, 0x2c1a, 0x411e, 0x1a13, 0xb2b4, 0x219d, 0xbf07, 0x424b, 0x43bf, 0x4252, 0x098e, 0x4302, 0x250d, 0x4064, 0xb017, 0x3af3, 0x4222, 0xadfc, 0x41e5, 0xbad6, 0xa529, 0x4085, 0x41e1, 0xba1c, 0x4279, 0x43ba, 0x03fb, 0x2279, 0xb224, 0xb28e, 0x2e71, 0xb230, 0x3733, 0xb085, 0x41cb, 0xb2a8, 0xbf77, 0x4113, 0xa77d, 0x403b, 0x1d4f, 0x3e00, 0xa3df, 0xb243, 0xb2b5, 0x4396, 0x19ea, 0xba1c, 0xbfbc, 0xb23e, 0x410e, 0xba2e, 0x405f, 0x1df6, 0x1b93, 0x4148, 0x401a, 0x41ec, 0xb06d, 0x4277, 0x0f45, 0xb2c0, 0x42b2, 0x4326, 0x1426, 0x2c0d, 0xbf47, 0xba26, 0xb296, 0x1907, 0x43a4, 0x407c, 0x406f, 0x4332, 0x2146, 0x403c, 0x4173, 0x43c5, 0x1463, 0x3d72, 0xa539, 0x02d3, 0xbf85, 0xb2e9, 0x080e, 0x3996, 0xb0c8, 0x3133, 0x422c, 0xbaf6, 0x1e96, 0x414d, 0xb236, 0x4071, 0x1b45, 0x41a3, 0x1b5a, 0x04f2, 0xaaed, 0x43d5, 0x40c1, 0x43ee, 0x4631, 0xb0c0, 0x4616, 0x432f, 0x06c9, 0x1dca, 0xbfe1, 0x2a04, 0x106d, 0x40fd, 0x4417, 0xb245, 0x40c4, 0x4279, 0x1ab5, 0x424d, 0x1c8c, 0x2adf, 0xb215, 0x41fb, 0x1014, 0x41bc, 0x43a2, 0x428a, 0xba77, 0x2e89, 0xba5f, 0xb285, 0xb26f, 0x4071, 0x3346, 0xb22b, 0x4350, 0xbf01, 0x403f, 0x42ef, 0x2d94, 0xba29, 0x421b, 0xbf5c, 0x4164, 0x4616, 0x2ad2, 0xb22d, 0x1fea, 0xbf70, 0x42be, 0x409e, 0x42ef, 0x42fa, 0xb28e, 0xba3b, 0xba70, 0xb25a, 0x07ec, 0x405c, 0x40bf, 0x404e, 0x1bc1, 0xba1a, 0xba63, 0xb2e8, 0x3845, 0x4072, 0x1cc5, 0xbf6f, 0x1fd3, 0x1fd9, 0xb2f7, 0x4077, 0x423b, 0x402d, 0x1abd, 0xbf99, 0x4192, 0xbaf0, 0x3122, 0x2e08, 0x4029, 0xbafe, 0xb263, 0x42e5, 0x38e5, 0x43b0, 0xa37a, 0x3088, 0x421d, 0x2339, 0x1d50, 0xb232, 0x2ba9, 0x0059, 0x442f, 0x1e1a, 0x403d, 0x4223, 0x406b, 0xb005, 0xb2e7, 0xbf21, 0x4391, 0xbad2, 0x40bb, 0x04c5, 0x1e4a, 0x424a, 0x415e, 0x0467, 0xbad2, 0x40c5, 0xa1c5, 0x45d3, 0x43d3, 0xb24f, 0x3261, 0xb05b, 0x4364, 0x420b, 0x19f9, 0x2464, 0xbfd7, 0x240f, 0x411a, 0x0a1e, 0xbaf0, 0xb0bb, 0x40fa, 0xb232, 0x4480, 0x401a, 0x40ea, 0xaa93, 0xbff0, 0x0dd7, 0x43ce, 0x4279, 0xba2c, 0xb20b, 0x3d38, 0xbae1, 0xa965, 0x4201, 0x425a, 0x4217, 0x4469, 0x03f7, 0xbf3e, 0xb0d5, 0xb297, 0x42c4, 0x42b9, 0x42d7, 0x417f, 0x194b, 0x3e69, 0x409f, 0xbf60, 0x4219, 0xa318, 0x3a6a, 0xbf29, 0xb2a3, 0x4649, 0x467b, 0x1528, 0xb0b6, 0x40d0, 0xa445, 0xa6a6, 0x4153, 0x15db, 0x0d2b, 0xa059, 0x3ca7, 0x0813, 0x43fe, 0x199d, 0xbfd4, 0x4138, 0xb00a, 0x1936, 0x4111, 0xa06a, 0x43f8, 0x4041, 0xb2f4, 0x4293, 0xba58, 0x437f, 0x155d, 0x0878, 0xbad2, 0xb0cb, 0x1c3e, 0xbf19, 0x427a, 0x1a09, 0x17be, 0x1742, 0x1f52, 0xb282, 0x404e, 0xb263, 0xba0d, 0x425c, 0xb095, 0x41cd, 0x1d19, 0x0352, 0x1841, 0x26ff, 0xbf7c, 0xbadf, 0x1407, 0x42a3, 0x4025, 0x4330, 0xbaf6, 0xbf91, 0xa711, 0x4002, 0xa488, 0x1a65, 0x4052, 0x19a3, 0x1819, 0x43e7, 0xb239, 0x40a4, 0x31d2, 0xa11f, 0x42e6, 0x43d7, 0x4110, 0x4012, 0x2c2f, 0x43b5, 0x45a1, 0xb2dc, 0x12f9, 0x268b, 0x1993, 0x4228, 0xb20b, 0x419b, 0xb27b, 0x42bb, 0x46a2, 0xbfa9, 0x24ed, 0x41a1, 0x0d0a, 0x1559, 0x4114, 0x42f0, 0xa900, 0x4413, 0x4008, 0xa9f6, 0x05d6, 0xb2a4, 0x42e2, 0x3bdb, 0x435c, 0x1d9f, 0x183f, 0x4063, 0x0c6b, 0x30e3, 0xbf7c, 0x430f, 0x1169, 0xb20a, 0x1ce1, 0x3691, 0xa65e, 0xb20f, 0x40d9, 0x28c6, 0xba56, 0x403d, 0x43e8, 0x1e4e, 0xa2a3, 0xb21f, 0xa649, 0x4428, 0xa8cf, 0x4068, 0xb0f4, 0xb2b0, 0xbfcb, 0xb275, 0x1a56, 0x409b, 0x1ed9, 0x3908, 0x41ca, 0xb0d0, 0x1a06, 0x4230, 0x1f36, 0xbf90, 0xba26, 0x4020, 0xbf78, 0x42fe, 0x46b9, 0x3e8c, 0xa5e7, 0x4272, 0x0d53, 0x4159, 0x41b4, 0x4484, 0xbfc0, 0x4281, 0x414a, 0xad25, 0x195b, 0x43b8, 0x1f77, 0xbf67, 0x404e, 0xba33, 0xa665, 0x45ba, 0xb0ec, 0x41dd, 0x3f03, 0x343b, 0x43a5, 0xa8f0, 0x0ac1, 0x46ab, 0x4223, 0xb060, 0x4240, 0x41fc, 0x0d95, 0x1df4, 0x4299, 0xbff0, 0x0e19, 0xbaf4, 0x4137, 0x40e0, 0x4317, 0x3f08, 0xbf49, 0x1ad3, 0x1977, 0x1e1b, 0x434f, 0xb2ab, 0x22ae, 0xbfcc, 0x4435, 0x0e38, 0x414b, 0x2b42, 0x400f, 0x36e1, 0x41dd, 0xbade, 0x4190, 0xbf6f, 0xa805, 0x4073, 0x41bd, 0x05d3, 0x41b6, 0x1a96, 0x4075, 0x35a1, 0x3336, 0xa35c, 0x4332, 0x431f, 0x26bc, 0xb228, 0x0f68, 0x41ff, 0x438a, 0xb227, 0xbac0, 0xba78, 0xb073, 0x4083, 0x1d03, 0xbf41, 0x4159, 0x2f5c, 0x4081, 0x4337, 0x4770, 0xe7fe + ], + StartRegs = [0x3a4c2871, 0xacd9f7e9, 0x7bcd3cce, 0xadebfcc6, 0xde673e7c, 0x7dd2cf41, 0x7006af38, 0x2bb0bab5, 0xe2b978ed, 0x142f0bcb, 0x8bc78472, 0x492faf1e, 0x7421150a, 0x1ef52200, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0xffff18fc, 0x00000000, 0x000000a6, 0xffff1900, 0xfffffc18, 0x00063f47, 0x000000bc, 0xfffffcbc, 0xe2b978f1, 0x00000000, 0x000000b8, 0xaca0a530, 0x7421150a, 0x59414be9, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0xb25e, 0x4201, 0xb0f6, 0x437b, 0xbf28, 0x1a61, 0x41f3, 0xb2af, 0xba52, 0xb0be, 0x0ee9, 0x18cb, 0x2ddc, 0x3e47, 0x4216, 0xb2e8, 0x40c7, 0x33d7, 0x42a9, 0x412a, 0x4322, 0x4313, 0x42b0, 0xbfbc, 0x42d1, 0x4309, 0xb2bc, 0xa626, 0xbfaf, 0x41e6, 0x4026, 0x4028, 0xa235, 0x40c3, 0xb030, 0xbfa0, 0x4331, 0xacd4, 0x2a6c, 0x4058, 0x353b, 0x42eb, 0x199e, 0x1a78, 0x1e98, 0x1222, 0x4677, 0x180d, 0x1b21, 0x36a8, 0x1d5e, 0xba01, 0x42b0, 0x4110, 0x416f, 0x4007, 0x1bb0, 0xab34, 0xbf31, 0x40f0, 0x46d4, 0x422e, 0xb2db, 0xa831, 0x2443, 0x40a8, 0xb002, 0xba2f, 0x41df, 0x4363, 0xa95d, 0xba57, 0xb2bf, 0x43b9, 0x427a, 0x4550, 0x1af8, 0xbad9, 0xb2cf, 0xbfb0, 0x4300, 0x4301, 0xbf4f, 0x42f3, 0xb2c5, 0xba77, 0x4157, 0xb2cc, 0x12ef, 0x187c, 0x46d9, 0xa1ec, 0x1c3f, 0xa4c0, 0x34a8, 0xa8ec, 0xb25d, 0x4253, 0x40d1, 0x4122, 0xbafd, 0x42fe, 0x19fb, 0x4566, 0xba75, 0x3820, 0x4115, 0x412e, 0x1f3f, 0xbf8d, 0x10fe, 0x4231, 0x40d3, 0xb054, 0x1750, 0xb07a, 0x1be5, 0x41a9, 0xb227, 0x431e, 0x41a3, 0xbae7, 0x43c0, 0x2338, 0x41c9, 0x4026, 0x4368, 0x4371, 0x42ad, 0xb2be, 0x1d31, 0x1cfb, 0x41f2, 0x3242, 0xbf33, 0x3a13, 0xbae1, 0xb03a, 0x4698, 0x4130, 0x44e0, 0xb238, 0x417b, 0x40f2, 0xbfbe, 0x4233, 0x4115, 0x45a8, 0x41cb, 0x46c3, 0x30b0, 0x42df, 0xa26e, 0xb2b7, 0x4205, 0xbf5b, 0xba12, 0xa0ae, 0x4247, 0x46e0, 0xb2c5, 0x41ed, 0x4068, 0x41e9, 0x19fd, 0x435a, 0x41e7, 0xb2f1, 0xb2b0, 0x41a1, 0x43c4, 0x45dc, 0x4387, 0x40b8, 0x2a85, 0x19fc, 0x4360, 0x4545, 0x1930, 0x41b3, 0x24ec, 0xbfa0, 0x42bc, 0x403f, 0xbf7d, 0xaf68, 0xb2d1, 0x4238, 0xb2a9, 0x4346, 0xb09b, 0xa482, 0x41d9, 0xba36, 0x4108, 0xb281, 0xba17, 0x28a4, 0x16f0, 0x10b0, 0x22f2, 0x467d, 0xac2a, 0x133e, 0x4195, 0x0338, 0x41dc, 0xbf03, 0x41c7, 0x4375, 0x41db, 0x4608, 0x45a0, 0x401a, 0x1b82, 0x42ca, 0xb01b, 0x206b, 0x4610, 0x1db7, 0x44dd, 0xa4e6, 0x0c75, 0x4064, 0x41ec, 0x27c6, 0x4371, 0x42f1, 0x418f, 0xb2d6, 0x237a, 0x209a, 0x364f, 0x4183, 0x4252, 0xbac8, 0xbf48, 0x32a8, 0x1805, 0x42d8, 0x1fab, 0x18b3, 0x41fa, 0x04ab, 0xbf80, 0x19b6, 0x1a4d, 0x41c2, 0x1b8f, 0xb23a, 0x40a9, 0xbaff, 0x40ec, 0x4313, 0x40d2, 0xb09a, 0xb218, 0x42da, 0x1f49, 0x41ab, 0xb22b, 0xbf58, 0xba62, 0x4020, 0x1f31, 0xb293, 0x4136, 0x24c0, 0x088e, 0x4252, 0x2136, 0x3252, 0x2efa, 0xa1bf, 0x04ad, 0x1c79, 0xb01c, 0x43f7, 0x42e6, 0x426d, 0x4364, 0x4236, 0xb298, 0xbf24, 0x26e7, 0xb27d, 0xae82, 0x414b, 0xa71c, 0x44f0, 0x4395, 0x421c, 0xb29b, 0x409f, 0xbfd9, 0xb206, 0x43c8, 0x19f8, 0xb24d, 0x4265, 0x419f, 0x414d, 0x429b, 0x45c5, 0x435a, 0x11d9, 0xb259, 0x4188, 0xba06, 0x204d, 0x1b38, 0x4296, 0xa47f, 0xbf03, 0x45ad, 0x167f, 0x23eb, 0xb237, 0xb289, 0x1c1c, 0x43ef, 0x42ad, 0xa496, 0x438e, 0xb0a6, 0x3afb, 0xb229, 0x2661, 0x4159, 0x4384, 0x3b07, 0x45b8, 0x09ae, 0x3811, 0xbfa1, 0x3db5, 0xb217, 0x2dff, 0x43a2, 0xb28a, 0xbfa3, 0xba3f, 0xb2ec, 0xb2e0, 0xb067, 0x0a10, 0xb20a, 0xa2ad, 0x446b, 0xb27d, 0x05f3, 0x4248, 0xb02b, 0x43be, 0xba20, 0xbf90, 0x2133, 0x0c37, 0x254d, 0x4144, 0xb213, 0x403f, 0x1356, 0xa35e, 0x4219, 0x438d, 0xb211, 0x42ae, 0xbfbd, 0x1e52, 0x3cf3, 0x1d3c, 0xb287, 0x0781, 0x405e, 0x41a9, 0x436e, 0x1ebf, 0xbf01, 0x0041, 0x29a5, 0x422e, 0xba5a, 0xb0f3, 0x4355, 0x41b5, 0x421c, 0x4191, 0x4276, 0x43cb, 0xbae3, 0x42d1, 0xba32, 0xbfc0, 0xb232, 0xbf6a, 0x4013, 0x4256, 0xba73, 0x40a9, 0xba05, 0x1de9, 0xbf04, 0x4170, 0x42da, 0x40a6, 0x13a4, 0x4084, 0x42da, 0xbfa0, 0x4081, 0xbfd9, 0x220b, 0xb26f, 0x41ee, 0xba5b, 0xba52, 0x43e1, 0xb2b4, 0x1ffd, 0xbf6b, 0xb278, 0x4690, 0x4370, 0x3669, 0xb21e, 0xb017, 0x375d, 0x4131, 0x407e, 0x40e7, 0x4638, 0x0d44, 0x4254, 0x3476, 0x41ec, 0x42fd, 0x1ccd, 0xb295, 0xbfd0, 0x401c, 0x3235, 0x4645, 0x155b, 0x0311, 0x41db, 0x40c0, 0x396d, 0x0ba6, 0xbfaf, 0x0e6d, 0x43fd, 0xa6bc, 0x401a, 0xbafc, 0x421e, 0xbf18, 0x1886, 0x4106, 0xbf27, 0x12cb, 0x43c8, 0xba28, 0x4011, 0xba7f, 0x1103, 0xbac5, 0x193b, 0x466d, 0x42c5, 0x184a, 0x0d38, 0xbf62, 0x3f92, 0x43e9, 0xaa66, 0xb093, 0x334d, 0xba06, 0x1ebb, 0xb2ff, 0x465e, 0xb24e, 0xbade, 0xbfa3, 0x2abf, 0x3186, 0x430a, 0x448a, 0x434f, 0xb291, 0x4215, 0x1952, 0xb003, 0x41ec, 0x44ed, 0x438f, 0x42f3, 0x424c, 0x4025, 0xb0d7, 0x18f0, 0xb25d, 0x416e, 0x4120, 0x45a9, 0xb0f9, 0xb2fd, 0xbaed, 0xba7d, 0xbfd3, 0x41ec, 0xb22b, 0x428a, 0x42e5, 0xb02c, 0x1b7c, 0x37e0, 0x430a, 0x190a, 0x25db, 0x2eff, 0xb276, 0x0b11, 0xbfe2, 0xab47, 0x251c, 0xb223, 0x31c7, 0xbaf2, 0xb001, 0xb212, 0x30f1, 0xa44c, 0x41ae, 0x418d, 0x40a4, 0xb0b6, 0x4331, 0x425a, 0x4040, 0x1849, 0xb03a, 0x1959, 0xb092, 0x429d, 0x4188, 0xbf12, 0x4619, 0xba68, 0xbf60, 0xbf80, 0x42b8, 0x0a84, 0xb2fe, 0x456c, 0xb0f3, 0x4194, 0xb272, 0xb0d7, 0xb2de, 0x4353, 0x0e33, 0x1c0a, 0xbac8, 0x42c6, 0x19ff, 0x43af, 0x4089, 0xbfb8, 0x3b9b, 0x096d, 0x31ac, 0x0234, 0x40cf, 0x24b8, 0x4278, 0x417a, 0x4309, 0x427e, 0xb070, 0x42cf, 0x40a9, 0x433b, 0x418d, 0xb2be, 0x1969, 0x429e, 0x43af, 0xbf1f, 0x0b1a, 0x4286, 0x41ce, 0x426d, 0x4136, 0x1ec7, 0x3425, 0xa663, 0x4457, 0xb2a4, 0x43b1, 0x41e0, 0xb2cc, 0x26cc, 0xbad6, 0xbacc, 0xb2e0, 0x4018, 0x3a50, 0xb2bf, 0xba3b, 0xbadb, 0xb0c4, 0xbf09, 0x1167, 0x4099, 0x044b, 0xba75, 0x43d6, 0xba3a, 0x43f5, 0x2c1c, 0xba5a, 0x43bc, 0x42a9, 0x1c95, 0xad4c, 0x43e4, 0x46cc, 0x42cc, 0x2605, 0x4009, 0x1871, 0x4069, 0xba37, 0x411d, 0x1807, 0x426d, 0x423b, 0x0fab, 0x4159, 0xbf83, 0x4290, 0x1d71, 0x3601, 0xa5d0, 0xb23a, 0x1cfb, 0x42fc, 0x435f, 0x4003, 0xa2b5, 0x4163, 0x4185, 0x403c, 0xb0d0, 0x1ae1, 0xb271, 0xafbc, 0x40cb, 0x4174, 0xbf69, 0xb258, 0xb2ec, 0x42c0, 0x41dd, 0x197d, 0xbf14, 0xa735, 0x38c4, 0x4188, 0xbfb0, 0xbf0d, 0x4117, 0x41ae, 0xb0e8, 0x411b, 0x4155, 0x43bb, 0xba44, 0x4198, 0xb2cd, 0xbfc7, 0xbae2, 0xb2c4, 0x43d7, 0x1e4d, 0x34ca, 0xb223, 0x439c, 0xb294, 0xbae1, 0x1d72, 0xbfe0, 0xb2ef, 0x4363, 0xbfb9, 0x413e, 0x408b, 0xa5be, 0x2675, 0x42d3, 0xb204, 0x1ff1, 0x096f, 0x41dd, 0x3c1e, 0xb2bd, 0x40c6, 0x2575, 0xb2b1, 0x1910, 0x4607, 0x42b8, 0x43dd, 0x4329, 0x4112, 0x1ea0, 0x1b9b, 0xa27c, 0xbadf, 0xbf81, 0x4088, 0x41a7, 0xada0, 0x0db4, 0xb2fe, 0x408a, 0x18da, 0xb026, 0xb0b3, 0x43f1, 0x4467, 0xbfaf, 0x4367, 0xbad4, 0x405f, 0x4286, 0x1a0d, 0xb2b7, 0x4571, 0x183e, 0x43cf, 0x1a0d, 0x4036, 0x424f, 0x41a4, 0x410f, 0x46a2, 0xaf85, 0xa17c, 0x433b, 0xbf0e, 0x4022, 0x43f0, 0x11a4, 0x40c4, 0xba2c, 0x18a6, 0x1a93, 0x41d1, 0xa8a3, 0xbaf8, 0x4584, 0xbff0, 0xb23a, 0x4385, 0x43d8, 0xb29b, 0x4362, 0xb20f, 0xb0a7, 0xad67, 0xb252, 0xbf8a, 0x1cb1, 0xb215, 0x41a4, 0x40b3, 0x2a7b, 0x0d23, 0x4199, 0x18ce, 0x4618, 0x144a, 0x3082, 0x1c3e, 0xbf57, 0x32de, 0x412d, 0xb298, 0x4648, 0x1c4d, 0x1df9, 0x3e54, 0xbf8e, 0x4488, 0x4092, 0xb200, 0xba13, 0x41a1, 0xba23, 0x1d7d, 0xba09, 0x2b1c, 0x4691, 0x397f, 0x4032, 0xbf0e, 0xba67, 0x40e5, 0xb2f3, 0xbff0, 0xba04, 0x3ec6, 0x1a0f, 0x408b, 0xb2e2, 0xbfe2, 0x4224, 0x195a, 0x3204, 0x430d, 0x39cb, 0x1c36, 0xb23f, 0x1977, 0xb030, 0x46f4, 0xb2fe, 0xba77, 0x4141, 0xb276, 0x4217, 0xbf60, 0xb223, 0xb2ca, 0x43bd, 0x4204, 0x41d0, 0xa049, 0x4352, 0xb035, 0xbf05, 0x4396, 0x429b, 0xa066, 0x0975, 0x409b, 0x46bd, 0x2aa5, 0xb2b9, 0xba09, 0xb05e, 0x422d, 0x1d65, 0x42c5, 0x42d4, 0x0533, 0x221b, 0x42c2, 0xa9dd, 0x2ac2, 0xad89, 0x4263, 0x4378, 0x40ff, 0x429b, 0x4282, 0x421f, 0xb0c4, 0xbf56, 0xb0c4, 0xb070, 0xbac9, 0x43ff, 0x1bd4, 0x418f, 0x09b8, 0xb0a8, 0xbfc7, 0x455a, 0x04bf, 0xba69, 0x4283, 0x404a, 0x43a2, 0x449b, 0x1e46, 0x4130, 0x4305, 0xb272, 0x1203, 0x43f4, 0x437e, 0xb066, 0x4273, 0x0f4c, 0x4612, 0xaa6e, 0x08d1, 0x437c, 0x461d, 0x44ac, 0xa824, 0xb2cd, 0xb01f, 0xbf53, 0xbfa0, 0xb283, 0x4151, 0xb284, 0x41f4, 0x406e, 0xb038, 0x4330, 0x420d, 0x44b5, 0xb2b2, 0xa730, 0xb2e0, 0x2b11, 0x4698, 0x4142, 0xb2f9, 0x42ec, 0xb08e, 0x3c8b, 0x42bc, 0xb22e, 0x4226, 0x400b, 0xb219, 0xbf25, 0x43c3, 0xbf00, 0x4345, 0x40aa, 0xb0a0, 0x1a70, 0x429e, 0x4074, 0x41af, 0xb272, 0xb0af, 0xb0f4, 0x42ff, 0xba34, 0x4342, 0x399a, 0x46cd, 0x19e4, 0x3c64, 0xbfcf, 0x40e9, 0x40c2, 0x3ac5, 0x323c, 0x307e, 0xba37, 0xba17, 0xb2f7, 0x207f, 0x431e, 0xac1e, 0xb0c8, 0x41b1, 0x436b, 0x40d1, 0xb02b, 0xbfe8, 0x4335, 0x41ba, 0x1cad, 0xa482, 0xbacd, 0xb285, 0x401c, 0xa85b, 0x4199, 0x4392, 0xbfbb, 0xb045, 0x0935, 0x30e0, 0x4226, 0xb22e, 0x282a, 0xb2e5, 0x40c8, 0x4326, 0x2bf9, 0x4197, 0xbf16, 0x4371, 0xb2ea, 0x40c4, 0x3f3c, 0xb285, 0x4170, 0x40ce, 0x2706, 0x308f, 0xbfbe, 0x4113, 0x0553, 0xbad5, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x9b4ed9e3, 0xfb4d9b4f, 0xf2becf95, 0xee40ea2c, 0x9b566ffa, 0x1e8d47a2, 0xeeda6eed, 0x8e4fe94e, 0x87b89292, 0x5bc99f48, 0xcdbc076e, 0x49f2a792, 0x65012e66, 0x2d75e18d, 0x00000000, 0xa00001f0 }, - FinalRegs = new uint[] { 0x40001b7a, 0x000019ff, 0x00000000, 0xffffffff, 0x00000000, 0x000000ec, 0x00000000, 0x00000006, 0xef680aac, 0x80000000, 0xffffffff, 0xc2cc9a01, 0xef680aac, 0x7fffff8c, 0x00000000, 0x000001d0 }, + Instructions = [0xb25e, 0x4201, 0xb0f6, 0x437b, 0xbf28, 0x1a61, 0x41f3, 0xb2af, 0xba52, 0xb0be, 0x0ee9, 0x18cb, 0x2ddc, 0x3e47, 0x4216, 0xb2e8, 0x40c7, 0x33d7, 0x42a9, 0x412a, 0x4322, 0x4313, 0x42b0, 0xbfbc, 0x42d1, 0x4309, 0xb2bc, 0xa626, 0xbfaf, 0x41e6, 0x4026, 0x4028, 0xa235, 0x40c3, 0xb030, 0xbfa0, 0x4331, 0xacd4, 0x2a6c, 0x4058, 0x353b, 0x42eb, 0x199e, 0x1a78, 0x1e98, 0x1222, 0x4677, 0x180d, 0x1b21, 0x36a8, 0x1d5e, 0xba01, 0x42b0, 0x4110, 0x416f, 0x4007, 0x1bb0, 0xab34, 0xbf31, 0x40f0, 0x46d4, 0x422e, 0xb2db, 0xa831, 0x2443, 0x40a8, 0xb002, 0xba2f, 0x41df, 0x4363, 0xa95d, 0xba57, 0xb2bf, 0x43b9, 0x427a, 0x4550, 0x1af8, 0xbad9, 0xb2cf, 0xbfb0, 0x4300, 0x4301, 0xbf4f, 0x42f3, 0xb2c5, 0xba77, 0x4157, 0xb2cc, 0x12ef, 0x187c, 0x46d9, 0xa1ec, 0x1c3f, 0xa4c0, 0x34a8, 0xa8ec, 0xb25d, 0x4253, 0x40d1, 0x4122, 0xbafd, 0x42fe, 0x19fb, 0x4566, 0xba75, 0x3820, 0x4115, 0x412e, 0x1f3f, 0xbf8d, 0x10fe, 0x4231, 0x40d3, 0xb054, 0x1750, 0xb07a, 0x1be5, 0x41a9, 0xb227, 0x431e, 0x41a3, 0xbae7, 0x43c0, 0x2338, 0x41c9, 0x4026, 0x4368, 0x4371, 0x42ad, 0xb2be, 0x1d31, 0x1cfb, 0x41f2, 0x3242, 0xbf33, 0x3a13, 0xbae1, 0xb03a, 0x4698, 0x4130, 0x44e0, 0xb238, 0x417b, 0x40f2, 0xbfbe, 0x4233, 0x4115, 0x45a8, 0x41cb, 0x46c3, 0x30b0, 0x42df, 0xa26e, 0xb2b7, 0x4205, 0xbf5b, 0xba12, 0xa0ae, 0x4247, 0x46e0, 0xb2c5, 0x41ed, 0x4068, 0x41e9, 0x19fd, 0x435a, 0x41e7, 0xb2f1, 0xb2b0, 0x41a1, 0x43c4, 0x45dc, 0x4387, 0x40b8, 0x2a85, 0x19fc, 0x4360, 0x4545, 0x1930, 0x41b3, 0x24ec, 0xbfa0, 0x42bc, 0x403f, 0xbf7d, 0xaf68, 0xb2d1, 0x4238, 0xb2a9, 0x4346, 0xb09b, 0xa482, 0x41d9, 0xba36, 0x4108, 0xb281, 0xba17, 0x28a4, 0x16f0, 0x10b0, 0x22f2, 0x467d, 0xac2a, 0x133e, 0x4195, 0x0338, 0x41dc, 0xbf03, 0x41c7, 0x4375, 0x41db, 0x4608, 0x45a0, 0x401a, 0x1b82, 0x42ca, 0xb01b, 0x206b, 0x4610, 0x1db7, 0x44dd, 0xa4e6, 0x0c75, 0x4064, 0x41ec, 0x27c6, 0x4371, 0x42f1, 0x418f, 0xb2d6, 0x237a, 0x209a, 0x364f, 0x4183, 0x4252, 0xbac8, 0xbf48, 0x32a8, 0x1805, 0x42d8, 0x1fab, 0x18b3, 0x41fa, 0x04ab, 0xbf80, 0x19b6, 0x1a4d, 0x41c2, 0x1b8f, 0xb23a, 0x40a9, 0xbaff, 0x40ec, 0x4313, 0x40d2, 0xb09a, 0xb218, 0x42da, 0x1f49, 0x41ab, 0xb22b, 0xbf58, 0xba62, 0x4020, 0x1f31, 0xb293, 0x4136, 0x24c0, 0x088e, 0x4252, 0x2136, 0x3252, 0x2efa, 0xa1bf, 0x04ad, 0x1c79, 0xb01c, 0x43f7, 0x42e6, 0x426d, 0x4364, 0x4236, 0xb298, 0xbf24, 0x26e7, 0xb27d, 0xae82, 0x414b, 0xa71c, 0x44f0, 0x4395, 0x421c, 0xb29b, 0x409f, 0xbfd9, 0xb206, 0x43c8, 0x19f8, 0xb24d, 0x4265, 0x419f, 0x414d, 0x429b, 0x45c5, 0x435a, 0x11d9, 0xb259, 0x4188, 0xba06, 0x204d, 0x1b38, 0x4296, 0xa47f, 0xbf03, 0x45ad, 0x167f, 0x23eb, 0xb237, 0xb289, 0x1c1c, 0x43ef, 0x42ad, 0xa496, 0x438e, 0xb0a6, 0x3afb, 0xb229, 0x2661, 0x4159, 0x4384, 0x3b07, 0x45b8, 0x09ae, 0x3811, 0xbfa1, 0x3db5, 0xb217, 0x2dff, 0x43a2, 0xb28a, 0xbfa3, 0xba3f, 0xb2ec, 0xb2e0, 0xb067, 0x0a10, 0xb20a, 0xa2ad, 0x446b, 0xb27d, 0x05f3, 0x4248, 0xb02b, 0x43be, 0xba20, 0xbf90, 0x2133, 0x0c37, 0x254d, 0x4144, 0xb213, 0x403f, 0x1356, 0xa35e, 0x4219, 0x438d, 0xb211, 0x42ae, 0xbfbd, 0x1e52, 0x3cf3, 0x1d3c, 0xb287, 0x0781, 0x405e, 0x41a9, 0x436e, 0x1ebf, 0xbf01, 0x0041, 0x29a5, 0x422e, 0xba5a, 0xb0f3, 0x4355, 0x41b5, 0x421c, 0x4191, 0x4276, 0x43cb, 0xbae3, 0x42d1, 0xba32, 0xbfc0, 0xb232, 0xbf6a, 0x4013, 0x4256, 0xba73, 0x40a9, 0xba05, 0x1de9, 0xbf04, 0x4170, 0x42da, 0x40a6, 0x13a4, 0x4084, 0x42da, 0xbfa0, 0x4081, 0xbfd9, 0x220b, 0xb26f, 0x41ee, 0xba5b, 0xba52, 0x43e1, 0xb2b4, 0x1ffd, 0xbf6b, 0xb278, 0x4690, 0x4370, 0x3669, 0xb21e, 0xb017, 0x375d, 0x4131, 0x407e, 0x40e7, 0x4638, 0x0d44, 0x4254, 0x3476, 0x41ec, 0x42fd, 0x1ccd, 0xb295, 0xbfd0, 0x401c, 0x3235, 0x4645, 0x155b, 0x0311, 0x41db, 0x40c0, 0x396d, 0x0ba6, 0xbfaf, 0x0e6d, 0x43fd, 0xa6bc, 0x401a, 0xbafc, 0x421e, 0xbf18, 0x1886, 0x4106, 0xbf27, 0x12cb, 0x43c8, 0xba28, 0x4011, 0xba7f, 0x1103, 0xbac5, 0x193b, 0x466d, 0x42c5, 0x184a, 0x0d38, 0xbf62, 0x3f92, 0x43e9, 0xaa66, 0xb093, 0x334d, 0xba06, 0x1ebb, 0xb2ff, 0x465e, 0xb24e, 0xbade, 0xbfa3, 0x2abf, 0x3186, 0x430a, 0x448a, 0x434f, 0xb291, 0x4215, 0x1952, 0xb003, 0x41ec, 0x44ed, 0x438f, 0x42f3, 0x424c, 0x4025, 0xb0d7, 0x18f0, 0xb25d, 0x416e, 0x4120, 0x45a9, 0xb0f9, 0xb2fd, 0xbaed, 0xba7d, 0xbfd3, 0x41ec, 0xb22b, 0x428a, 0x42e5, 0xb02c, 0x1b7c, 0x37e0, 0x430a, 0x190a, 0x25db, 0x2eff, 0xb276, 0x0b11, 0xbfe2, 0xab47, 0x251c, 0xb223, 0x31c7, 0xbaf2, 0xb001, 0xb212, 0x30f1, 0xa44c, 0x41ae, 0x418d, 0x40a4, 0xb0b6, 0x4331, 0x425a, 0x4040, 0x1849, 0xb03a, 0x1959, 0xb092, 0x429d, 0x4188, 0xbf12, 0x4619, 0xba68, 0xbf60, 0xbf80, 0x42b8, 0x0a84, 0xb2fe, 0x456c, 0xb0f3, 0x4194, 0xb272, 0xb0d7, 0xb2de, 0x4353, 0x0e33, 0x1c0a, 0xbac8, 0x42c6, 0x19ff, 0x43af, 0x4089, 0xbfb8, 0x3b9b, 0x096d, 0x31ac, 0x0234, 0x40cf, 0x24b8, 0x4278, 0x417a, 0x4309, 0x427e, 0xb070, 0x42cf, 0x40a9, 0x433b, 0x418d, 0xb2be, 0x1969, 0x429e, 0x43af, 0xbf1f, 0x0b1a, 0x4286, 0x41ce, 0x426d, 0x4136, 0x1ec7, 0x3425, 0xa663, 0x4457, 0xb2a4, 0x43b1, 0x41e0, 0xb2cc, 0x26cc, 0xbad6, 0xbacc, 0xb2e0, 0x4018, 0x3a50, 0xb2bf, 0xba3b, 0xbadb, 0xb0c4, 0xbf09, 0x1167, 0x4099, 0x044b, 0xba75, 0x43d6, 0xba3a, 0x43f5, 0x2c1c, 0xba5a, 0x43bc, 0x42a9, 0x1c95, 0xad4c, 0x43e4, 0x46cc, 0x42cc, 0x2605, 0x4009, 0x1871, 0x4069, 0xba37, 0x411d, 0x1807, 0x426d, 0x423b, 0x0fab, 0x4159, 0xbf83, 0x4290, 0x1d71, 0x3601, 0xa5d0, 0xb23a, 0x1cfb, 0x42fc, 0x435f, 0x4003, 0xa2b5, 0x4163, 0x4185, 0x403c, 0xb0d0, 0x1ae1, 0xb271, 0xafbc, 0x40cb, 0x4174, 0xbf69, 0xb258, 0xb2ec, 0x42c0, 0x41dd, 0x197d, 0xbf14, 0xa735, 0x38c4, 0x4188, 0xbfb0, 0xbf0d, 0x4117, 0x41ae, 0xb0e8, 0x411b, 0x4155, 0x43bb, 0xba44, 0x4198, 0xb2cd, 0xbfc7, 0xbae2, 0xb2c4, 0x43d7, 0x1e4d, 0x34ca, 0xb223, 0x439c, 0xb294, 0xbae1, 0x1d72, 0xbfe0, 0xb2ef, 0x4363, 0xbfb9, 0x413e, 0x408b, 0xa5be, 0x2675, 0x42d3, 0xb204, 0x1ff1, 0x096f, 0x41dd, 0x3c1e, 0xb2bd, 0x40c6, 0x2575, 0xb2b1, 0x1910, 0x4607, 0x42b8, 0x43dd, 0x4329, 0x4112, 0x1ea0, 0x1b9b, 0xa27c, 0xbadf, 0xbf81, 0x4088, 0x41a7, 0xada0, 0x0db4, 0xb2fe, 0x408a, 0x18da, 0xb026, 0xb0b3, 0x43f1, 0x4467, 0xbfaf, 0x4367, 0xbad4, 0x405f, 0x4286, 0x1a0d, 0xb2b7, 0x4571, 0x183e, 0x43cf, 0x1a0d, 0x4036, 0x424f, 0x41a4, 0x410f, 0x46a2, 0xaf85, 0xa17c, 0x433b, 0xbf0e, 0x4022, 0x43f0, 0x11a4, 0x40c4, 0xba2c, 0x18a6, 0x1a93, 0x41d1, 0xa8a3, 0xbaf8, 0x4584, 0xbff0, 0xb23a, 0x4385, 0x43d8, 0xb29b, 0x4362, 0xb20f, 0xb0a7, 0xad67, 0xb252, 0xbf8a, 0x1cb1, 0xb215, 0x41a4, 0x40b3, 0x2a7b, 0x0d23, 0x4199, 0x18ce, 0x4618, 0x144a, 0x3082, 0x1c3e, 0xbf57, 0x32de, 0x412d, 0xb298, 0x4648, 0x1c4d, 0x1df9, 0x3e54, 0xbf8e, 0x4488, 0x4092, 0xb200, 0xba13, 0x41a1, 0xba23, 0x1d7d, 0xba09, 0x2b1c, 0x4691, 0x397f, 0x4032, 0xbf0e, 0xba67, 0x40e5, 0xb2f3, 0xbff0, 0xba04, 0x3ec6, 0x1a0f, 0x408b, 0xb2e2, 0xbfe2, 0x4224, 0x195a, 0x3204, 0x430d, 0x39cb, 0x1c36, 0xb23f, 0x1977, 0xb030, 0x46f4, 0xb2fe, 0xba77, 0x4141, 0xb276, 0x4217, 0xbf60, 0xb223, 0xb2ca, 0x43bd, 0x4204, 0x41d0, 0xa049, 0x4352, 0xb035, 0xbf05, 0x4396, 0x429b, 0xa066, 0x0975, 0x409b, 0x46bd, 0x2aa5, 0xb2b9, 0xba09, 0xb05e, 0x422d, 0x1d65, 0x42c5, 0x42d4, 0x0533, 0x221b, 0x42c2, 0xa9dd, 0x2ac2, 0xad89, 0x4263, 0x4378, 0x40ff, 0x429b, 0x4282, 0x421f, 0xb0c4, 0xbf56, 0xb0c4, 0xb070, 0xbac9, 0x43ff, 0x1bd4, 0x418f, 0x09b8, 0xb0a8, 0xbfc7, 0x455a, 0x04bf, 0xba69, 0x4283, 0x404a, 0x43a2, 0x449b, 0x1e46, 0x4130, 0x4305, 0xb272, 0x1203, 0x43f4, 0x437e, 0xb066, 0x4273, 0x0f4c, 0x4612, 0xaa6e, 0x08d1, 0x437c, 0x461d, 0x44ac, 0xa824, 0xb2cd, 0xb01f, 0xbf53, 0xbfa0, 0xb283, 0x4151, 0xb284, 0x41f4, 0x406e, 0xb038, 0x4330, 0x420d, 0x44b5, 0xb2b2, 0xa730, 0xb2e0, 0x2b11, 0x4698, 0x4142, 0xb2f9, 0x42ec, 0xb08e, 0x3c8b, 0x42bc, 0xb22e, 0x4226, 0x400b, 0xb219, 0xbf25, 0x43c3, 0xbf00, 0x4345, 0x40aa, 0xb0a0, 0x1a70, 0x429e, 0x4074, 0x41af, 0xb272, 0xb0af, 0xb0f4, 0x42ff, 0xba34, 0x4342, 0x399a, 0x46cd, 0x19e4, 0x3c64, 0xbfcf, 0x40e9, 0x40c2, 0x3ac5, 0x323c, 0x307e, 0xba37, 0xba17, 0xb2f7, 0x207f, 0x431e, 0xac1e, 0xb0c8, 0x41b1, 0x436b, 0x40d1, 0xb02b, 0xbfe8, 0x4335, 0x41ba, 0x1cad, 0xa482, 0xbacd, 0xb285, 0x401c, 0xa85b, 0x4199, 0x4392, 0xbfbb, 0xb045, 0x0935, 0x30e0, 0x4226, 0xb22e, 0x282a, 0xb2e5, 0x40c8, 0x4326, 0x2bf9, 0x4197, 0xbf16, 0x4371, 0xb2ea, 0x40c4, 0x3f3c, 0xb285, 0x4170, 0x40ce, 0x2706, 0x308f, 0xbfbe, 0x4113, 0x0553, 0xbad5, 0x4770, 0xe7fe + ], + StartRegs = [0x9b4ed9e3, 0xfb4d9b4f, 0xf2becf95, 0xee40ea2c, 0x9b566ffa, 0x1e8d47a2, 0xeeda6eed, 0x8e4fe94e, 0x87b89292, 0x5bc99f48, 0xcdbc076e, 0x49f2a792, 0x65012e66, 0x2d75e18d, 0x00000000, 0xa00001f0 + ], + FinalRegs = [0x40001b7a, 0x000019ff, 0x00000000, 0xffffffff, 0x00000000, 0x000000ec, 0x00000000, 0x00000006, 0xef680aac, 0x80000000, 0xffffffff, 0xc2cc9a01, 0xef680aac, 0x7fffff8c, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xba64, 0xba1a, 0x40a5, 0xba40, 0x1307, 0xb2a5, 0xb24d, 0x4102, 0xbfc0, 0xa0b9, 0xb20f, 0x181b, 0x439c, 0xa7dd, 0x1c89, 0xb011, 0x43c1, 0x1c4a, 0x418e, 0x1924, 0xa84d, 0xb235, 0x1f2a, 0x422d, 0xbf81, 0xb23e, 0x4057, 0x4036, 0xb2a5, 0xbf48, 0xb013, 0x42cf, 0x432a, 0xbfb6, 0x437b, 0x436d, 0x418a, 0x41cb, 0x2910, 0x1797, 0x424a, 0xa593, 0xb0aa, 0x429d, 0x40e6, 0x45c0, 0xb201, 0x4317, 0x4349, 0xb0a8, 0x4148, 0x19d4, 0x4255, 0x412a, 0xa20f, 0x1e2b, 0xbf1d, 0x403e, 0x42b4, 0x1a38, 0x4476, 0x436a, 0xab06, 0xb0e1, 0xbf82, 0x410d, 0xb2d0, 0x401a, 0x4356, 0xba0e, 0x40cc, 0x43e6, 0xba47, 0x408c, 0x43ae, 0xbf4a, 0x42cd, 0x1b95, 0x4046, 0x4299, 0x4380, 0x27bd, 0x431c, 0x4129, 0xbacc, 0x18be, 0x4380, 0xbf7c, 0x41ec, 0x19d7, 0xbf22, 0x40e2, 0x24c3, 0xb294, 0x4430, 0xb27b, 0x4648, 0x4360, 0xb24b, 0xb003, 0x4051, 0x42e7, 0x43d3, 0x41d4, 0x1bf1, 0xb035, 0xb2d4, 0xb2e9, 0x40e4, 0x435d, 0x3083, 0x464b, 0x41dd, 0x1b19, 0xb27e, 0x4224, 0x2dc0, 0x4181, 0x1624, 0xbf7d, 0xbae9, 0x4317, 0xabcc, 0x43d7, 0x438e, 0x4254, 0xb287, 0x40d0, 0xbf4e, 0xbaf3, 0x43f9, 0x4350, 0xa956, 0x1fc1, 0x4374, 0x44e5, 0xa792, 0xb2f3, 0x412b, 0xb201, 0xb241, 0xb2d3, 0xbfc0, 0xba76, 0x4246, 0xb019, 0x40e3, 0x198a, 0x2b9a, 0x3b90, 0x46d9, 0x072a, 0xba25, 0x3d43, 0x4097, 0x41e1, 0xbfc6, 0x4205, 0x04d8, 0x40f9, 0x1cd1, 0x1f55, 0x1f1e, 0xaa31, 0xb23e, 0x4598, 0x13f6, 0x4179, 0xaf2e, 0xbfae, 0x4357, 0x1374, 0x1ad4, 0xad33, 0x4156, 0x427e, 0xbfe4, 0x44e0, 0x4331, 0x43f4, 0x42c9, 0xbf85, 0x1a24, 0xa2f6, 0x41f2, 0xa107, 0x4232, 0xbf90, 0xa2a0, 0xb23e, 0x1f9e, 0x4187, 0x1bb0, 0xb26d, 0x426f, 0xb223, 0x4088, 0xacf5, 0x405e, 0x309e, 0x41ef, 0x22b8, 0xbfaa, 0x41bd, 0xbac2, 0x1c97, 0x4673, 0xb257, 0x41bf, 0x4055, 0xb287, 0x1bef, 0x44d5, 0x1b5a, 0xb06d, 0x42f0, 0x3c79, 0x420f, 0x1cc2, 0xbf2f, 0x44ca, 0x40ec, 0x41e5, 0xba3c, 0x4118, 0xba6d, 0xa231, 0xb266, 0xae71, 0xba56, 0xa854, 0x21c1, 0x39da, 0x18f7, 0x162a, 0x0af5, 0x4246, 0x43c3, 0x1839, 0xb0f9, 0x40d0, 0x1f0f, 0x46ac, 0x186e, 0x44a1, 0x40aa, 0xbfd1, 0x404c, 0x2780, 0x43f3, 0x4391, 0xbfc0, 0x439d, 0x0446, 0xba07, 0x411e, 0x4358, 0x40a1, 0x42eb, 0x408f, 0xa392, 0x25c7, 0x4289, 0xb203, 0x4220, 0xbfe0, 0xba43, 0xa384, 0x10d1, 0xbf4c, 0xba61, 0xbf90, 0x2fe4, 0x4339, 0x419e, 0xa2e4, 0xbf90, 0xa1b8, 0xb2ca, 0x431e, 0xa96f, 0xbaeb, 0x0eab, 0xba3f, 0x42da, 0x4092, 0xba50, 0x419f, 0x42ae, 0x428f, 0xbf7e, 0x43b6, 0x3644, 0xb0e6, 0xa3fd, 0x46c8, 0x4049, 0xb22e, 0x434c, 0x1dec, 0xb233, 0xb2de, 0x42f1, 0xb2d6, 0xb2ed, 0x3db5, 0x4326, 0x4279, 0x22e0, 0x2801, 0x42ac, 0x4331, 0x4192, 0x2136, 0xbf80, 0x4358, 0xbf48, 0xb09e, 0x0395, 0xb232, 0x41d8, 0xbfb0, 0x18fd, 0xba3e, 0x1da0, 0x45d5, 0x43a3, 0x41c0, 0x4028, 0x446a, 0x00dc, 0xbfa8, 0x2ac3, 0x292e, 0x439b, 0x421c, 0x1924, 0xb25b, 0x464b, 0x427e, 0x40a9, 0xbae4, 0x42ed, 0xb0be, 0x4650, 0x4205, 0x4062, 0x400c, 0xb283, 0x40a1, 0xb26e, 0x4438, 0x4210, 0xaf94, 0xb270, 0x18ad, 0xbf3c, 0x3d88, 0x41c3, 0x42eb, 0xbf51, 0x40f4, 0xba01, 0x4119, 0x42b6, 0x13e7, 0x2c7e, 0xb248, 0x3088, 0x2d04, 0xb22c, 0x45ce, 0x006d, 0x446f, 0x1a24, 0x4059, 0x40f6, 0x4360, 0xa82e, 0xb240, 0x42e0, 0xba21, 0x2130, 0x42b4, 0xb033, 0xbf04, 0x4020, 0x4093, 0x409d, 0x0fb2, 0x455f, 0x40d7, 0x168b, 0xba34, 0x2d4c, 0x426e, 0xba7b, 0x1b47, 0xb0a4, 0x4252, 0x38dd, 0x3e12, 0xb034, 0x429f, 0x4195, 0xbfd9, 0xb2f8, 0x427a, 0x3ecb, 0xaba8, 0xb27d, 0x44a4, 0xb2d5, 0x42cc, 0x43f0, 0x4369, 0x4281, 0x2b77, 0xbaf3, 0x1827, 0x3984, 0xb008, 0xba71, 0xbaeb, 0xbf68, 0xba04, 0xbf48, 0x40da, 0xb025, 0x324b, 0x41b9, 0xb0a9, 0xb02e, 0x45dc, 0x2fa9, 0x435c, 0x1b90, 0xbf7a, 0x41da, 0x1990, 0xba5a, 0xb206, 0x40c1, 0x4188, 0x4063, 0x4182, 0xb2d3, 0xba04, 0xbad2, 0x1f08, 0x031c, 0x179d, 0x1dcc, 0x1ed3, 0xa42e, 0x416d, 0x2dae, 0x05e5, 0x3b23, 0x09b7, 0x40c8, 0x1aa2, 0xb247, 0x1462, 0x40d1, 0x4049, 0xbf77, 0xb277, 0x1eee, 0xb298, 0xbf00, 0x42bb, 0x1f09, 0x423a, 0xba7f, 0x4217, 0xbaf5, 0xba2f, 0x3e9d, 0xbf3e, 0x40c8, 0x2bf6, 0xba24, 0xba43, 0x31ec, 0x2cae, 0x4211, 0xbf21, 0x1433, 0x467f, 0x1eab, 0xb2f5, 0x437e, 0x4143, 0xba44, 0xafe7, 0x4173, 0x418d, 0xad21, 0x0b5f, 0xa2f0, 0xba57, 0xbfaf, 0xb2ef, 0x3b63, 0x4155, 0xba08, 0xb20c, 0x4565, 0x407e, 0x4006, 0x27ce, 0xba15, 0xb2f7, 0x403e, 0xbafe, 0x4385, 0xb263, 0x4092, 0x43ba, 0xb2a9, 0x43bd, 0x424f, 0x4101, 0x45e3, 0x3773, 0xbfba, 0x1dbc, 0xb2ea, 0xb242, 0x40c7, 0xb057, 0xb2ee, 0x41d9, 0xb20d, 0x4052, 0x4391, 0xa641, 0xa730, 0xb20d, 0x3c10, 0x4477, 0x3eab, 0xa994, 0x2ce4, 0xbaf4, 0xbf62, 0xb252, 0xb2d1, 0x14c9, 0xbfc2, 0x4064, 0x4185, 0x1baf, 0x4298, 0xb2ab, 0xa44e, 0x40ea, 0xa273, 0x439d, 0x44d5, 0xba28, 0x41b2, 0x0318, 0x1e74, 0x4310, 0xbf0d, 0x1b3e, 0xba2c, 0x3286, 0x412d, 0x199a, 0xa2d6, 0x41de, 0xbfb0, 0x43e6, 0xa815, 0x162b, 0x16a3, 0x429e, 0xb210, 0x130d, 0xba4b, 0xba20, 0xbfbd, 0x2828, 0x00c1, 0x425e, 0x0047, 0x4324, 0x41af, 0x2141, 0x42c6, 0x42a2, 0xad20, 0x163f, 0x4385, 0x288d, 0xb0ad, 0x40a2, 0xba7a, 0xba4b, 0xb0ba, 0x4044, 0x0501, 0x33f5, 0x1845, 0xa3c5, 0xa7d3, 0x4274, 0xb270, 0xbafc, 0x4485, 0xbf35, 0x421e, 0x41a2, 0x4250, 0x421b, 0x04da, 0xb222, 0x1cd3, 0x0958, 0x4085, 0xa75d, 0x1d39, 0x059a, 0x43cb, 0xba2c, 0x40e8, 0x41e4, 0x4664, 0x40d9, 0xbf18, 0x43f1, 0x4350, 0x4267, 0x4027, 0xbf21, 0x1afb, 0x1264, 0xb258, 0x4575, 0x4124, 0xb215, 0x466d, 0x1870, 0x4319, 0xaa64, 0xbfc1, 0x4376, 0xb2fb, 0x437b, 0x438f, 0xb011, 0x2417, 0xb206, 0xbf00, 0xbaf8, 0xbfc5, 0xba1e, 0xa11d, 0xb27d, 0xadf2, 0x1b0f, 0x40c8, 0xbf05, 0x46d4, 0x43b0, 0x43e4, 0x4008, 0x426d, 0x1f5a, 0x423b, 0x1b37, 0x1df6, 0x2bde, 0xbadc, 0x1ff8, 0xbf3b, 0x43a8, 0x41de, 0x4239, 0x1def, 0x4184, 0x43ee, 0x431b, 0x41f0, 0x43f5, 0x4290, 0x422c, 0x3066, 0x19fd, 0xaeba, 0x409f, 0x1f41, 0x2c3e, 0x1f68, 0x40c7, 0x4146, 0x2ff8, 0xb2f6, 0xb026, 0xba41, 0xb220, 0x443f, 0x205a, 0xb2e6, 0x44cb, 0xbf3b, 0xbf90, 0xb2de, 0x0b90, 0x0e8f, 0xba26, 0x06c0, 0xbaed, 0x0acd, 0x408e, 0x31fb, 0x048f, 0x4577, 0x40db, 0xbfd5, 0x4181, 0xaa2b, 0x16a1, 0x401d, 0xbf19, 0x2bed, 0x4053, 0x3875, 0xb265, 0xad06, 0x4044, 0x11f9, 0xb289, 0x4602, 0xb0da, 0x461b, 0x40a1, 0xba3d, 0x13fd, 0x41a4, 0x41b3, 0x41eb, 0xb000, 0x4385, 0x46ec, 0x2780, 0x45be, 0x33bd, 0xbf34, 0x1963, 0x4266, 0x422e, 0x1c54, 0x1b2a, 0xa37d, 0xba7c, 0xba54, 0x4221, 0xba78, 0x1ef2, 0x425a, 0x40c8, 0x24fa, 0xbfcb, 0xb237, 0x420a, 0xb0bb, 0x1eeb, 0x40c3, 0x0071, 0x0ce2, 0xbf2e, 0x4297, 0x4227, 0x432c, 0xb01b, 0xae0a, 0xa328, 0x09dc, 0xb2cb, 0x4014, 0x1897, 0xbf54, 0xb07e, 0x234a, 0x284d, 0x44b1, 0x46fb, 0xb26b, 0x0044, 0xaf0c, 0xa318, 0x43b4, 0xa43d, 0xb2b1, 0x4082, 0x42ab, 0x108f, 0x41d8, 0xba0c, 0x4318, 0xbf12, 0x31db, 0x4296, 0x4376, 0x466e, 0x1702, 0xb08c, 0x1446, 0xb2c3, 0xb262, 0xb06b, 0x33ac, 0xb285, 0x1c39, 0x0554, 0xb254, 0x4010, 0x0807, 0x406d, 0x3fd4, 0xb2f0, 0x41d8, 0xb03d, 0xbf31, 0x0072, 0x4300, 0xabf2, 0x3778, 0x41ce, 0x425d, 0xa931, 0xb088, 0x104d, 0x1902, 0xb237, 0x1adb, 0x40fb, 0x4310, 0x03b3, 0x409c, 0xb0af, 0xb2e6, 0x06ba, 0x439d, 0x41c4, 0xbfc5, 0x4290, 0xb086, 0xb274, 0x1ff7, 0xbfca, 0x179a, 0x24c7, 0x407e, 0xba61, 0xbf1f, 0xb281, 0x41b6, 0x2aec, 0x41f5, 0x40fe, 0x27f0, 0x03f3, 0x1a45, 0x2020, 0x0c37, 0x18c6, 0x4420, 0xb225, 0x42fd, 0xbf87, 0x429e, 0x3085, 0x4240, 0x18df, 0x3b5f, 0x3e59, 0x42ba, 0x4369, 0x093c, 0x43df, 0xb2a3, 0x1f17, 0x427c, 0x1c1f, 0x17ae, 0x188a, 0x418f, 0xa2c1, 0x1b58, 0x4160, 0xbff0, 0x404f, 0x1985, 0xbf90, 0x1915, 0x434c, 0xbf11, 0x4177, 0x408b, 0x0d62, 0x186b, 0x1168, 0x18e3, 0xb235, 0x3037, 0x4695, 0xba1b, 0xa33d, 0xba31, 0xb2c3, 0x40f3, 0xb0c4, 0x08b1, 0x4207, 0x4398, 0x41d5, 0x2398, 0x440a, 0x2c54, 0xba66, 0x1c94, 0xbaf5, 0xbf9c, 0x437b, 0xb2f5, 0x4674, 0x40c3, 0x435f, 0x41d5, 0x4233, 0xac76, 0xbae1, 0xba0c, 0xba07, 0x46ba, 0xb220, 0x22a5, 0xb25d, 0xb204, 0x41f3, 0x04e6, 0x46b9, 0x43a2, 0x41bd, 0x40b6, 0x1d71, 0xbfb1, 0x41cf, 0x32a2, 0x1e0c, 0x43e4, 0xb05c, 0xbf8c, 0xb273, 0x4072, 0x462b, 0x2863, 0x415a, 0x4000, 0xb22a, 0x42f5, 0x41c1, 0xa19b, 0x436f, 0xa5ad, 0x0a9d, 0x40e3, 0x4066, 0xa244, 0x41c8, 0x40a8, 0x43e4, 0x4301, 0xbf64, 0x36fb, 0x3220, 0x45e5, 0xa505, 0xb222, 0xb2a2, 0xb09c, 0x4418, 0xb02c, 0x1dcc, 0x40ad, 0x0709, 0xa73b, 0x4374, 0x33ea, 0xbad1, 0xbfa2, 0x4021, 0x4082, 0x4449, 0x41b6, 0x1df3, 0x42a8, 0x0838, 0x41e1, 0x4104, 0x218c, 0x4384, 0x2d58, 0x006d, 0x4561, 0x4374, 0xb299, 0x4177, 0x4064, 0xa457, 0x3187, 0x1b34, 0xbf63, 0x4261, 0x4158, 0x2bf6, 0x435e, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xddc07271, 0x377926ce, 0x9a93827d, 0xcbef0283, 0x5bc182ba, 0xa9bfdede, 0x4f15e679, 0xd23d8725, 0x59c353e8, 0x9a2b180a, 0x2b318b54, 0xd61dea1b, 0x8cc70559, 0xca220005, 0x00000000, 0x300001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x0000008d, 0x00000000, 0x00000006, 0xffffe6b3, 0x00000000, 0xfffffffa, 0x000018ab, 0xc35cf61b, 0x00010000, 0x00010000, 0x00001630, 0xad4c19c4, 0x00001aa0, 0x00000000, 0xa00001d0 }, + Instructions = [0xba64, 0xba1a, 0x40a5, 0xba40, 0x1307, 0xb2a5, 0xb24d, 0x4102, 0xbfc0, 0xa0b9, 0xb20f, 0x181b, 0x439c, 0xa7dd, 0x1c89, 0xb011, 0x43c1, 0x1c4a, 0x418e, 0x1924, 0xa84d, 0xb235, 0x1f2a, 0x422d, 0xbf81, 0xb23e, 0x4057, 0x4036, 0xb2a5, 0xbf48, 0xb013, 0x42cf, 0x432a, 0xbfb6, 0x437b, 0x436d, 0x418a, 0x41cb, 0x2910, 0x1797, 0x424a, 0xa593, 0xb0aa, 0x429d, 0x40e6, 0x45c0, 0xb201, 0x4317, 0x4349, 0xb0a8, 0x4148, 0x19d4, 0x4255, 0x412a, 0xa20f, 0x1e2b, 0xbf1d, 0x403e, 0x42b4, 0x1a38, 0x4476, 0x436a, 0xab06, 0xb0e1, 0xbf82, 0x410d, 0xb2d0, 0x401a, 0x4356, 0xba0e, 0x40cc, 0x43e6, 0xba47, 0x408c, 0x43ae, 0xbf4a, 0x42cd, 0x1b95, 0x4046, 0x4299, 0x4380, 0x27bd, 0x431c, 0x4129, 0xbacc, 0x18be, 0x4380, 0xbf7c, 0x41ec, 0x19d7, 0xbf22, 0x40e2, 0x24c3, 0xb294, 0x4430, 0xb27b, 0x4648, 0x4360, 0xb24b, 0xb003, 0x4051, 0x42e7, 0x43d3, 0x41d4, 0x1bf1, 0xb035, 0xb2d4, 0xb2e9, 0x40e4, 0x435d, 0x3083, 0x464b, 0x41dd, 0x1b19, 0xb27e, 0x4224, 0x2dc0, 0x4181, 0x1624, 0xbf7d, 0xbae9, 0x4317, 0xabcc, 0x43d7, 0x438e, 0x4254, 0xb287, 0x40d0, 0xbf4e, 0xbaf3, 0x43f9, 0x4350, 0xa956, 0x1fc1, 0x4374, 0x44e5, 0xa792, 0xb2f3, 0x412b, 0xb201, 0xb241, 0xb2d3, 0xbfc0, 0xba76, 0x4246, 0xb019, 0x40e3, 0x198a, 0x2b9a, 0x3b90, 0x46d9, 0x072a, 0xba25, 0x3d43, 0x4097, 0x41e1, 0xbfc6, 0x4205, 0x04d8, 0x40f9, 0x1cd1, 0x1f55, 0x1f1e, 0xaa31, 0xb23e, 0x4598, 0x13f6, 0x4179, 0xaf2e, 0xbfae, 0x4357, 0x1374, 0x1ad4, 0xad33, 0x4156, 0x427e, 0xbfe4, 0x44e0, 0x4331, 0x43f4, 0x42c9, 0xbf85, 0x1a24, 0xa2f6, 0x41f2, 0xa107, 0x4232, 0xbf90, 0xa2a0, 0xb23e, 0x1f9e, 0x4187, 0x1bb0, 0xb26d, 0x426f, 0xb223, 0x4088, 0xacf5, 0x405e, 0x309e, 0x41ef, 0x22b8, 0xbfaa, 0x41bd, 0xbac2, 0x1c97, 0x4673, 0xb257, 0x41bf, 0x4055, 0xb287, 0x1bef, 0x44d5, 0x1b5a, 0xb06d, 0x42f0, 0x3c79, 0x420f, 0x1cc2, 0xbf2f, 0x44ca, 0x40ec, 0x41e5, 0xba3c, 0x4118, 0xba6d, 0xa231, 0xb266, 0xae71, 0xba56, 0xa854, 0x21c1, 0x39da, 0x18f7, 0x162a, 0x0af5, 0x4246, 0x43c3, 0x1839, 0xb0f9, 0x40d0, 0x1f0f, 0x46ac, 0x186e, 0x44a1, 0x40aa, 0xbfd1, 0x404c, 0x2780, 0x43f3, 0x4391, 0xbfc0, 0x439d, 0x0446, 0xba07, 0x411e, 0x4358, 0x40a1, 0x42eb, 0x408f, 0xa392, 0x25c7, 0x4289, 0xb203, 0x4220, 0xbfe0, 0xba43, 0xa384, 0x10d1, 0xbf4c, 0xba61, 0xbf90, 0x2fe4, 0x4339, 0x419e, 0xa2e4, 0xbf90, 0xa1b8, 0xb2ca, 0x431e, 0xa96f, 0xbaeb, 0x0eab, 0xba3f, 0x42da, 0x4092, 0xba50, 0x419f, 0x42ae, 0x428f, 0xbf7e, 0x43b6, 0x3644, 0xb0e6, 0xa3fd, 0x46c8, 0x4049, 0xb22e, 0x434c, 0x1dec, 0xb233, 0xb2de, 0x42f1, 0xb2d6, 0xb2ed, 0x3db5, 0x4326, 0x4279, 0x22e0, 0x2801, 0x42ac, 0x4331, 0x4192, 0x2136, 0xbf80, 0x4358, 0xbf48, 0xb09e, 0x0395, 0xb232, 0x41d8, 0xbfb0, 0x18fd, 0xba3e, 0x1da0, 0x45d5, 0x43a3, 0x41c0, 0x4028, 0x446a, 0x00dc, 0xbfa8, 0x2ac3, 0x292e, 0x439b, 0x421c, 0x1924, 0xb25b, 0x464b, 0x427e, 0x40a9, 0xbae4, 0x42ed, 0xb0be, 0x4650, 0x4205, 0x4062, 0x400c, 0xb283, 0x40a1, 0xb26e, 0x4438, 0x4210, 0xaf94, 0xb270, 0x18ad, 0xbf3c, 0x3d88, 0x41c3, 0x42eb, 0xbf51, 0x40f4, 0xba01, 0x4119, 0x42b6, 0x13e7, 0x2c7e, 0xb248, 0x3088, 0x2d04, 0xb22c, 0x45ce, 0x006d, 0x446f, 0x1a24, 0x4059, 0x40f6, 0x4360, 0xa82e, 0xb240, 0x42e0, 0xba21, 0x2130, 0x42b4, 0xb033, 0xbf04, 0x4020, 0x4093, 0x409d, 0x0fb2, 0x455f, 0x40d7, 0x168b, 0xba34, 0x2d4c, 0x426e, 0xba7b, 0x1b47, 0xb0a4, 0x4252, 0x38dd, 0x3e12, 0xb034, 0x429f, 0x4195, 0xbfd9, 0xb2f8, 0x427a, 0x3ecb, 0xaba8, 0xb27d, 0x44a4, 0xb2d5, 0x42cc, 0x43f0, 0x4369, 0x4281, 0x2b77, 0xbaf3, 0x1827, 0x3984, 0xb008, 0xba71, 0xbaeb, 0xbf68, 0xba04, 0xbf48, 0x40da, 0xb025, 0x324b, 0x41b9, 0xb0a9, 0xb02e, 0x45dc, 0x2fa9, 0x435c, 0x1b90, 0xbf7a, 0x41da, 0x1990, 0xba5a, 0xb206, 0x40c1, 0x4188, 0x4063, 0x4182, 0xb2d3, 0xba04, 0xbad2, 0x1f08, 0x031c, 0x179d, 0x1dcc, 0x1ed3, 0xa42e, 0x416d, 0x2dae, 0x05e5, 0x3b23, 0x09b7, 0x40c8, 0x1aa2, 0xb247, 0x1462, 0x40d1, 0x4049, 0xbf77, 0xb277, 0x1eee, 0xb298, 0xbf00, 0x42bb, 0x1f09, 0x423a, 0xba7f, 0x4217, 0xbaf5, 0xba2f, 0x3e9d, 0xbf3e, 0x40c8, 0x2bf6, 0xba24, 0xba43, 0x31ec, 0x2cae, 0x4211, 0xbf21, 0x1433, 0x467f, 0x1eab, 0xb2f5, 0x437e, 0x4143, 0xba44, 0xafe7, 0x4173, 0x418d, 0xad21, 0x0b5f, 0xa2f0, 0xba57, 0xbfaf, 0xb2ef, 0x3b63, 0x4155, 0xba08, 0xb20c, 0x4565, 0x407e, 0x4006, 0x27ce, 0xba15, 0xb2f7, 0x403e, 0xbafe, 0x4385, 0xb263, 0x4092, 0x43ba, 0xb2a9, 0x43bd, 0x424f, 0x4101, 0x45e3, 0x3773, 0xbfba, 0x1dbc, 0xb2ea, 0xb242, 0x40c7, 0xb057, 0xb2ee, 0x41d9, 0xb20d, 0x4052, 0x4391, 0xa641, 0xa730, 0xb20d, 0x3c10, 0x4477, 0x3eab, 0xa994, 0x2ce4, 0xbaf4, 0xbf62, 0xb252, 0xb2d1, 0x14c9, 0xbfc2, 0x4064, 0x4185, 0x1baf, 0x4298, 0xb2ab, 0xa44e, 0x40ea, 0xa273, 0x439d, 0x44d5, 0xba28, 0x41b2, 0x0318, 0x1e74, 0x4310, 0xbf0d, 0x1b3e, 0xba2c, 0x3286, 0x412d, 0x199a, 0xa2d6, 0x41de, 0xbfb0, 0x43e6, 0xa815, 0x162b, 0x16a3, 0x429e, 0xb210, 0x130d, 0xba4b, 0xba20, 0xbfbd, 0x2828, 0x00c1, 0x425e, 0x0047, 0x4324, 0x41af, 0x2141, 0x42c6, 0x42a2, 0xad20, 0x163f, 0x4385, 0x288d, 0xb0ad, 0x40a2, 0xba7a, 0xba4b, 0xb0ba, 0x4044, 0x0501, 0x33f5, 0x1845, 0xa3c5, 0xa7d3, 0x4274, 0xb270, 0xbafc, 0x4485, 0xbf35, 0x421e, 0x41a2, 0x4250, 0x421b, 0x04da, 0xb222, 0x1cd3, 0x0958, 0x4085, 0xa75d, 0x1d39, 0x059a, 0x43cb, 0xba2c, 0x40e8, 0x41e4, 0x4664, 0x40d9, 0xbf18, 0x43f1, 0x4350, 0x4267, 0x4027, 0xbf21, 0x1afb, 0x1264, 0xb258, 0x4575, 0x4124, 0xb215, 0x466d, 0x1870, 0x4319, 0xaa64, 0xbfc1, 0x4376, 0xb2fb, 0x437b, 0x438f, 0xb011, 0x2417, 0xb206, 0xbf00, 0xbaf8, 0xbfc5, 0xba1e, 0xa11d, 0xb27d, 0xadf2, 0x1b0f, 0x40c8, 0xbf05, 0x46d4, 0x43b0, 0x43e4, 0x4008, 0x426d, 0x1f5a, 0x423b, 0x1b37, 0x1df6, 0x2bde, 0xbadc, 0x1ff8, 0xbf3b, 0x43a8, 0x41de, 0x4239, 0x1def, 0x4184, 0x43ee, 0x431b, 0x41f0, 0x43f5, 0x4290, 0x422c, 0x3066, 0x19fd, 0xaeba, 0x409f, 0x1f41, 0x2c3e, 0x1f68, 0x40c7, 0x4146, 0x2ff8, 0xb2f6, 0xb026, 0xba41, 0xb220, 0x443f, 0x205a, 0xb2e6, 0x44cb, 0xbf3b, 0xbf90, 0xb2de, 0x0b90, 0x0e8f, 0xba26, 0x06c0, 0xbaed, 0x0acd, 0x408e, 0x31fb, 0x048f, 0x4577, 0x40db, 0xbfd5, 0x4181, 0xaa2b, 0x16a1, 0x401d, 0xbf19, 0x2bed, 0x4053, 0x3875, 0xb265, 0xad06, 0x4044, 0x11f9, 0xb289, 0x4602, 0xb0da, 0x461b, 0x40a1, 0xba3d, 0x13fd, 0x41a4, 0x41b3, 0x41eb, 0xb000, 0x4385, 0x46ec, 0x2780, 0x45be, 0x33bd, 0xbf34, 0x1963, 0x4266, 0x422e, 0x1c54, 0x1b2a, 0xa37d, 0xba7c, 0xba54, 0x4221, 0xba78, 0x1ef2, 0x425a, 0x40c8, 0x24fa, 0xbfcb, 0xb237, 0x420a, 0xb0bb, 0x1eeb, 0x40c3, 0x0071, 0x0ce2, 0xbf2e, 0x4297, 0x4227, 0x432c, 0xb01b, 0xae0a, 0xa328, 0x09dc, 0xb2cb, 0x4014, 0x1897, 0xbf54, 0xb07e, 0x234a, 0x284d, 0x44b1, 0x46fb, 0xb26b, 0x0044, 0xaf0c, 0xa318, 0x43b4, 0xa43d, 0xb2b1, 0x4082, 0x42ab, 0x108f, 0x41d8, 0xba0c, 0x4318, 0xbf12, 0x31db, 0x4296, 0x4376, 0x466e, 0x1702, 0xb08c, 0x1446, 0xb2c3, 0xb262, 0xb06b, 0x33ac, 0xb285, 0x1c39, 0x0554, 0xb254, 0x4010, 0x0807, 0x406d, 0x3fd4, 0xb2f0, 0x41d8, 0xb03d, 0xbf31, 0x0072, 0x4300, 0xabf2, 0x3778, 0x41ce, 0x425d, 0xa931, 0xb088, 0x104d, 0x1902, 0xb237, 0x1adb, 0x40fb, 0x4310, 0x03b3, 0x409c, 0xb0af, 0xb2e6, 0x06ba, 0x439d, 0x41c4, 0xbfc5, 0x4290, 0xb086, 0xb274, 0x1ff7, 0xbfca, 0x179a, 0x24c7, 0x407e, 0xba61, 0xbf1f, 0xb281, 0x41b6, 0x2aec, 0x41f5, 0x40fe, 0x27f0, 0x03f3, 0x1a45, 0x2020, 0x0c37, 0x18c6, 0x4420, 0xb225, 0x42fd, 0xbf87, 0x429e, 0x3085, 0x4240, 0x18df, 0x3b5f, 0x3e59, 0x42ba, 0x4369, 0x093c, 0x43df, 0xb2a3, 0x1f17, 0x427c, 0x1c1f, 0x17ae, 0x188a, 0x418f, 0xa2c1, 0x1b58, 0x4160, 0xbff0, 0x404f, 0x1985, 0xbf90, 0x1915, 0x434c, 0xbf11, 0x4177, 0x408b, 0x0d62, 0x186b, 0x1168, 0x18e3, 0xb235, 0x3037, 0x4695, 0xba1b, 0xa33d, 0xba31, 0xb2c3, 0x40f3, 0xb0c4, 0x08b1, 0x4207, 0x4398, 0x41d5, 0x2398, 0x440a, 0x2c54, 0xba66, 0x1c94, 0xbaf5, 0xbf9c, 0x437b, 0xb2f5, 0x4674, 0x40c3, 0x435f, 0x41d5, 0x4233, 0xac76, 0xbae1, 0xba0c, 0xba07, 0x46ba, 0xb220, 0x22a5, 0xb25d, 0xb204, 0x41f3, 0x04e6, 0x46b9, 0x43a2, 0x41bd, 0x40b6, 0x1d71, 0xbfb1, 0x41cf, 0x32a2, 0x1e0c, 0x43e4, 0xb05c, 0xbf8c, 0xb273, 0x4072, 0x462b, 0x2863, 0x415a, 0x4000, 0xb22a, 0x42f5, 0x41c1, 0xa19b, 0x436f, 0xa5ad, 0x0a9d, 0x40e3, 0x4066, 0xa244, 0x41c8, 0x40a8, 0x43e4, 0x4301, 0xbf64, 0x36fb, 0x3220, 0x45e5, 0xa505, 0xb222, 0xb2a2, 0xb09c, 0x4418, 0xb02c, 0x1dcc, 0x40ad, 0x0709, 0xa73b, 0x4374, 0x33ea, 0xbad1, 0xbfa2, 0x4021, 0x4082, 0x4449, 0x41b6, 0x1df3, 0x42a8, 0x0838, 0x41e1, 0x4104, 0x218c, 0x4384, 0x2d58, 0x006d, 0x4561, 0x4374, 0xb299, 0x4177, 0x4064, 0xa457, 0x3187, 0x1b34, 0xbf63, 0x4261, 0x4158, 0x2bf6, 0x435e, 0x4770, 0xe7fe + ], + StartRegs = [0xddc07271, 0x377926ce, 0x9a93827d, 0xcbef0283, 0x5bc182ba, 0xa9bfdede, 0x4f15e679, 0xd23d8725, 0x59c353e8, 0x9a2b180a, 0x2b318b54, 0xd61dea1b, 0x8cc70559, 0xca220005, 0x00000000, 0x300001f0 + ], + FinalRegs = [0x00000000, 0x0000008d, 0x00000000, 0x00000006, 0xffffe6b3, 0x00000000, 0xfffffffa, 0x000018ab, 0xc35cf61b, 0x00010000, 0x00010000, 0x00001630, 0xad4c19c4, 0x00001aa0, 0x00000000, 0xa00001d0 + ], }, new() { - Instructions = new ushort[] { 0x418a, 0x18b4, 0xb262, 0x1dbf, 0xb028, 0x2f39, 0xba6e, 0x1e05, 0x41b8, 0x1a37, 0xbfc2, 0x3a0d, 0xaacb, 0x435a, 0x411a, 0x43c3, 0xbfc1, 0x4241, 0x1c8d, 0x46db, 0x2c85, 0x420a, 0xb29c, 0x35a9, 0xad4a, 0xb007, 0x433d, 0x42a9, 0x2e9d, 0x42dc, 0xba41, 0xba2b, 0xb236, 0x40ad, 0x2a1f, 0xa550, 0xb2ae, 0x0dd7, 0xbaea, 0x456a, 0x4299, 0x40d9, 0xa992, 0xbf0a, 0xbaff, 0xbad1, 0x4667, 0xaf90, 0x4281, 0x4310, 0xba51, 0xbf7c, 0x30f1, 0x43ff, 0x41c9, 0xb2f2, 0x412e, 0x43f1, 0xba1d, 0x45da, 0x275c, 0xb2d2, 0x337c, 0x4200, 0xbfb5, 0xb292, 0xba70, 0x4174, 0x40b0, 0x41e1, 0x42ed, 0x41e6, 0x439f, 0x224e, 0xba2c, 0x12e8, 0x411c, 0x1dea, 0x40f4, 0x4199, 0x43ac, 0x40fb, 0xb23b, 0x0f39, 0x4093, 0x45cb, 0x431a, 0x13c1, 0xbf73, 0xb271, 0x398f, 0xb018, 0x402a, 0xb002, 0xaac0, 0x1bc9, 0x2243, 0x0ec2, 0x3f51, 0xbf1b, 0x408c, 0xb0d0, 0x1c15, 0x03fc, 0x39ff, 0xb2a6, 0x02ca, 0x46ba, 0x3b17, 0x19ea, 0x40ef, 0x064f, 0x43f8, 0xbfda, 0x4268, 0x4074, 0x35bd, 0x44fa, 0x1ceb, 0xbf2d, 0x4325, 0x4157, 0x415c, 0x431a, 0xbaf1, 0xa1b0, 0x1b83, 0x01c9, 0x4306, 0x42e5, 0x172c, 0x0b7d, 0x405a, 0x4140, 0x4393, 0x4056, 0x1e6e, 0x414e, 0x40f4, 0x43a2, 0xb292, 0xbf3f, 0x4445, 0x190a, 0x431b, 0x1b32, 0xbf59, 0x4625, 0xad4e, 0x45bb, 0x446d, 0x44cc, 0x195c, 0x4619, 0xafd9, 0x0a89, 0x23e7, 0xa8ec, 0x425c, 0x41d0, 0x362d, 0x4257, 0xb036, 0xbf39, 0x44ec, 0xb00c, 0xb214, 0x1f74, 0xba33, 0x4574, 0x44f9, 0x41aa, 0x3e33, 0xbf7e, 0xb089, 0x4260, 0x44fd, 0xbfa8, 0x4262, 0x4348, 0xa90d, 0xaee0, 0xbf97, 0xba70, 0xba28, 0x4370, 0xb2c6, 0x41d4, 0xb21b, 0xb281, 0x43fc, 0xbfd3, 0x1a9f, 0xbac9, 0xbf60, 0x3f4b, 0x25a2, 0x4149, 0xbaeb, 0x4009, 0x238f, 0xba6d, 0xba55, 0xbfa0, 0x3191, 0x22ce, 0x3c36, 0xa50f, 0xaba5, 0xb0dc, 0x4216, 0xb2ff, 0x4322, 0x40fa, 0x418f, 0xba57, 0x4553, 0x1f57, 0xbf89, 0x0fe2, 0x3db5, 0xb201, 0x4111, 0xa77b, 0x42f0, 0x18c1, 0xbfa1, 0x1797, 0xbf80, 0x415c, 0xa873, 0x1a6f, 0x43c4, 0x41dc, 0x42d8, 0x4107, 0x40fa, 0x44d3, 0x401b, 0x0e14, 0xbfe0, 0xbacb, 0x0018, 0xb029, 0x403e, 0x4259, 0x408c, 0xb021, 0x0d72, 0x409f, 0x3e97, 0x0710, 0x422a, 0xbf23, 0xb08d, 0x1777, 0x2940, 0x40b2, 0xbae8, 0x1d10, 0x2a49, 0x24f4, 0x4297, 0x44d2, 0x405b, 0xbfb4, 0x4036, 0x3cc2, 0xbac2, 0x4287, 0x408f, 0x04cf, 0x4402, 0xbf36, 0x18a3, 0x1153, 0x4222, 0xb058, 0x403b, 0x424e, 0x1f0a, 0x419f, 0x43cd, 0xba14, 0x403f, 0xbae3, 0x1a87, 0xb275, 0x4053, 0x433d, 0xb2b7, 0x20a2, 0x40ed, 0x425c, 0x405e, 0xb2f0, 0x169c, 0x43de, 0xb2b4, 0xb030, 0x401e, 0xbf75, 0x4329, 0x1f63, 0x40ed, 0xb2e5, 0xb21e, 0x2dae, 0x13ff, 0xb246, 0x19fb, 0x43a2, 0x4179, 0x4304, 0x25a9, 0x1d4e, 0x1804, 0xb2d8, 0x41ba, 0xb28c, 0x4264, 0x4237, 0x27ff, 0x400a, 0xb00e, 0xb0c7, 0x42af, 0x33d3, 0x0b19, 0x42f9, 0xbf29, 0x41be, 0xb20e, 0xba0a, 0x25c7, 0x4215, 0x1b76, 0x16d0, 0xb08c, 0xb299, 0x4305, 0xbf94, 0xa65b, 0x02f3, 0xb226, 0x40c5, 0x185a, 0x42a4, 0xbf92, 0x1a1f, 0xb29b, 0x40d5, 0xba22, 0xb27b, 0xb0ac, 0x2ee1, 0x424e, 0xb2f8, 0x4299, 0xb26d, 0x0c8c, 0x4350, 0x4191, 0x1a7a, 0x439f, 0x1f7b, 0xb0f6, 0x442d, 0x0997, 0xbf36, 0x418d, 0xba3f, 0xb096, 0x0faa, 0xb201, 0x4302, 0x1919, 0x1d75, 0xb2f2, 0x4288, 0xbf00, 0xb203, 0x413f, 0x40ea, 0xbfd0, 0x198b, 0x4117, 0x439c, 0x09e7, 0xb277, 0x0cce, 0x43a1, 0xba4e, 0x466d, 0x18cf, 0x1e3e, 0xba56, 0xad9d, 0xbf71, 0x428e, 0x0a44, 0x434f, 0x4335, 0x401c, 0x403a, 0xbac5, 0xb0eb, 0xb075, 0x1ee0, 0x300b, 0x419a, 0x4152, 0x1833, 0x412f, 0x42cd, 0x42b6, 0x0e30, 0xa3fc, 0x40d4, 0xb226, 0x409d, 0x0a68, 0x3bb8, 0x1b5d, 0x1a26, 0xb2bb, 0xb290, 0x4294, 0xbfb8, 0x1d4a, 0x431a, 0xb071, 0x41f8, 0x42d3, 0x23e3, 0xb2c7, 0xb217, 0x436d, 0xba56, 0xb2c6, 0x417d, 0x1b54, 0xba72, 0x40eb, 0x0b91, 0xbf2f, 0xb242, 0xa679, 0x41bd, 0xba15, 0x4394, 0x419e, 0x42ad, 0x2bbf, 0x405e, 0x4128, 0x3858, 0x46cb, 0xbf79, 0x40e6, 0x42e0, 0x411c, 0x23b9, 0x42c2, 0x42f9, 0x00d5, 0x435b, 0x08e8, 0x2279, 0xbf94, 0xad4a, 0x4014, 0x40b4, 0x21dc, 0x435a, 0x46b9, 0xb2c5, 0xa749, 0x43b4, 0x40d2, 0x4408, 0x43d5, 0xbf60, 0x43d3, 0x408f, 0x2e00, 0x1ec6, 0x4186, 0xa036, 0x4147, 0xb227, 0xbf9d, 0x1a4b, 0x418f, 0x44b2, 0x40d9, 0xbf37, 0xb2ac, 0x1173, 0xb0e2, 0x409d, 0xb23e, 0xb230, 0x42da, 0x4081, 0x413d, 0xafe1, 0x1d08, 0x408b, 0x412a, 0x334a, 0x4023, 0x4028, 0xb014, 0xba0d, 0x05a5, 0x118a, 0x4090, 0x40cc, 0xb2da, 0x2c35, 0x4057, 0x40ee, 0x408c, 0xb259, 0x3bb3, 0xbf3d, 0x4323, 0x4384, 0xb286, 0x43a6, 0x41e6, 0x2ac2, 0x434b, 0x2a9c, 0x40bc, 0x43c4, 0x1f48, 0x2920, 0xab0a, 0x439e, 0xb0c9, 0xbf7a, 0x4081, 0xba67, 0xbf70, 0x42bc, 0x2f3c, 0x41b1, 0xa46f, 0xbace, 0x3c3d, 0xb2f1, 0x43c7, 0x4049, 0x11d4, 0xbf45, 0x4042, 0x1115, 0x4113, 0xba1b, 0xa069, 0x4571, 0xbacd, 0x1aee, 0x4499, 0xb06a, 0x42ac, 0x4069, 0xa4cd, 0x402a, 0x416b, 0x429c, 0x4362, 0x1314, 0x38c5, 0x400a, 0x4122, 0x3473, 0x413a, 0xba66, 0x27a8, 0x42ca, 0x4369, 0xbfce, 0x4268, 0xa867, 0x4072, 0x04f5, 0xba27, 0x43b5, 0x3c3f, 0xbf25, 0xba45, 0x439c, 0x1cd7, 0xb203, 0x45a3, 0xba2b, 0x41bd, 0x4013, 0x41a0, 0x43cd, 0xb2c4, 0xba18, 0x4097, 0x1507, 0xba2e, 0xaa23, 0x417a, 0x42fc, 0x1df3, 0x40c1, 0xba68, 0x41b6, 0xa65b, 0x438f, 0x1cbe, 0x01aa, 0xbf5d, 0x42a5, 0x070b, 0x423f, 0x465f, 0x4350, 0xa044, 0xb287, 0xb289, 0x42ad, 0x40fc, 0xafbe, 0x0b8c, 0xb2aa, 0x40d3, 0x463c, 0x4314, 0x1d39, 0x40e1, 0x1d12, 0x0eb4, 0xbf23, 0x43b0, 0xb2ca, 0x1b06, 0x414d, 0x1813, 0xb2f0, 0x1cec, 0xa02b, 0x454e, 0x4111, 0x19e3, 0x41f2, 0x4228, 0xbada, 0xb20f, 0x4342, 0x418c, 0x435d, 0x2d58, 0xb2af, 0x429b, 0x4020, 0xb2ae, 0x198b, 0x4256, 0xbf7c, 0xbaf9, 0xa179, 0xb012, 0xb2ed, 0x466e, 0x42b8, 0xb003, 0xb0c2, 0x429c, 0xb2fe, 0x00cb, 0x4440, 0x428e, 0xb033, 0x467e, 0x419e, 0x4396, 0xb261, 0x29a3, 0x434c, 0x1f85, 0x2734, 0x4068, 0xbf52, 0x44cb, 0xbac6, 0x4374, 0xb013, 0x42b7, 0x3f89, 0x163d, 0x1db9, 0xbf19, 0x430c, 0x4326, 0x440e, 0xba28, 0xba31, 0x43e2, 0x41b9, 0xad58, 0x4108, 0x1ad5, 0x428b, 0x1393, 0x4290, 0xb2b9, 0x403d, 0xb23d, 0xb00e, 0xaf72, 0x420e, 0x438e, 0x1298, 0x40db, 0x41ce, 0x40b8, 0x1da4, 0xb085, 0x420b, 0xbf18, 0x025d, 0x1b8b, 0x1038, 0x4191, 0x1e3f, 0x3912, 0x4015, 0x1b40, 0xba0a, 0xb0a5, 0x2dfa, 0x405a, 0xb2dc, 0x419f, 0x020d, 0xbf03, 0x420b, 0x4185, 0xbaca, 0xb0a1, 0x32e6, 0xbae1, 0x40ad, 0x0c4c, 0x426a, 0x442d, 0x0cbc, 0x3f03, 0x4220, 0xb025, 0xb05d, 0x0a54, 0x4253, 0x40e4, 0x0628, 0xba74, 0x4130, 0xb201, 0x3d5a, 0x1f92, 0x42fb, 0x2807, 0x3fd0, 0x434e, 0xbfd5, 0x433e, 0x4171, 0xb0c9, 0x4389, 0x0633, 0xbadd, 0x4468, 0xae94, 0x1efb, 0xb0ba, 0x4066, 0x18b4, 0xbf9b, 0x0986, 0x4373, 0x3dfe, 0xb2cf, 0x4276, 0x37fc, 0x4154, 0xb03b, 0x34e0, 0x1e93, 0x4394, 0x4261, 0x43ce, 0xb0b7, 0xb234, 0xb242, 0x406a, 0x42e3, 0x2ae2, 0x1b93, 0xbf96, 0xb07a, 0x4317, 0x1e51, 0x42e5, 0x430d, 0x324b, 0x4354, 0x410d, 0x41b8, 0x1eb2, 0x4035, 0x06cb, 0x4353, 0x43ca, 0xa102, 0x203d, 0x414e, 0xba16, 0x1b5a, 0xb2d4, 0xb292, 0xbf2d, 0x411e, 0xba6a, 0xb29e, 0x430b, 0x418f, 0xb017, 0x3d40, 0x4271, 0x43ca, 0xb20d, 0x42d1, 0x1ae9, 0x419d, 0x4021, 0x466a, 0x2bb4, 0x1ef8, 0x24be, 0x4146, 0xbf77, 0x423e, 0x4075, 0x4145, 0xb23b, 0xbae8, 0x0db2, 0xb20b, 0xb2bf, 0x0cbf, 0x183f, 0x0f19, 0x21e3, 0x4231, 0x46f9, 0x400b, 0xb0bf, 0x405f, 0xb047, 0x3f77, 0x1c33, 0x3d13, 0x3476, 0xb218, 0xbf7c, 0x4060, 0x43b8, 0xbf80, 0xb0c4, 0x40e7, 0x421c, 0xbf64, 0xb0de, 0x436e, 0x41b5, 0xb0bc, 0x4065, 0x40f4, 0x2bb9, 0xaf92, 0x4624, 0x1e4c, 0x4318, 0x41e2, 0x0adf, 0xb2d4, 0x1e99, 0x1e3b, 0x46f0, 0xa8b3, 0xbf7e, 0x32ac, 0x2b7a, 0x41fb, 0x40fd, 0xba62, 0xbf21, 0x0d64, 0x42b0, 0x3a8c, 0x4270, 0x1e40, 0xbfd4, 0xb298, 0x4084, 0x43e2, 0xbaf3, 0xb256, 0x422d, 0x2965, 0xb29d, 0xb260, 0x41ec, 0x41fb, 0x071c, 0xbf4e, 0x403a, 0x41c6, 0xbad3, 0x41b6, 0x4651, 0xb2c7, 0x44e2, 0x43fd, 0x421f, 0x09c3, 0x4018, 0xbaf3, 0xbff0, 0x106b, 0x40bc, 0x46bc, 0x41ba, 0x41be, 0xb297, 0x4270, 0x4369, 0xbf6c, 0x46b4, 0xb21a, 0x0857, 0x37bc, 0x41c4, 0x1cc5, 0xaddc, 0xb014, 0xb2e3, 0xb0fb, 0x1f42, 0x06c9, 0x412d, 0xa6cd, 0xb2bc, 0x40a6, 0xb0e1, 0x4174, 0xb29f, 0x4200, 0xbf55, 0xba34, 0x4080, 0x434f, 0xb249, 0x43f7, 0x44e1, 0xa252, 0x409d, 0x42bc, 0x4195, 0x4274, 0xba0f, 0x41ce, 0x43e9, 0x45e3, 0xb21b, 0x2ffd, 0xa5c2, 0xba7b, 0x4068, 0x4062, 0x0ea1, 0xbf68, 0x0330, 0x4041, 0x2f6d, 0x0761, 0x4354, 0x3531, 0x40c5, 0xac1f, 0x0a0d, 0x4104, 0x4338, 0x428a, 0x4293, 0xba73, 0x0b8b, 0x0958, 0xbfa3, 0x00ff, 0x43b3, 0x1bca, 0x4146, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xca173107, 0x59131982, 0xd9386e54, 0x24fdf592, 0x3f36eb46, 0x7926dfe1, 0x64131655, 0x72501df8, 0xd923625a, 0xfe222377, 0xf0f7cf65, 0x2d44a91d, 0x61d44f3a, 0x2f3c5836, 0x00000000, 0x300001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00000000, 0xffffffc0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x000016c0, 0x8f32eca2, 0xfe2234ce, 0x00000000, 0x2f3c6602, 0x00000000, 0x400001d0 }, + Instructions = [0x418a, 0x18b4, 0xb262, 0x1dbf, 0xb028, 0x2f39, 0xba6e, 0x1e05, 0x41b8, 0x1a37, 0xbfc2, 0x3a0d, 0xaacb, 0x435a, 0x411a, 0x43c3, 0xbfc1, 0x4241, 0x1c8d, 0x46db, 0x2c85, 0x420a, 0xb29c, 0x35a9, 0xad4a, 0xb007, 0x433d, 0x42a9, 0x2e9d, 0x42dc, 0xba41, 0xba2b, 0xb236, 0x40ad, 0x2a1f, 0xa550, 0xb2ae, 0x0dd7, 0xbaea, 0x456a, 0x4299, 0x40d9, 0xa992, 0xbf0a, 0xbaff, 0xbad1, 0x4667, 0xaf90, 0x4281, 0x4310, 0xba51, 0xbf7c, 0x30f1, 0x43ff, 0x41c9, 0xb2f2, 0x412e, 0x43f1, 0xba1d, 0x45da, 0x275c, 0xb2d2, 0x337c, 0x4200, 0xbfb5, 0xb292, 0xba70, 0x4174, 0x40b0, 0x41e1, 0x42ed, 0x41e6, 0x439f, 0x224e, 0xba2c, 0x12e8, 0x411c, 0x1dea, 0x40f4, 0x4199, 0x43ac, 0x40fb, 0xb23b, 0x0f39, 0x4093, 0x45cb, 0x431a, 0x13c1, 0xbf73, 0xb271, 0x398f, 0xb018, 0x402a, 0xb002, 0xaac0, 0x1bc9, 0x2243, 0x0ec2, 0x3f51, 0xbf1b, 0x408c, 0xb0d0, 0x1c15, 0x03fc, 0x39ff, 0xb2a6, 0x02ca, 0x46ba, 0x3b17, 0x19ea, 0x40ef, 0x064f, 0x43f8, 0xbfda, 0x4268, 0x4074, 0x35bd, 0x44fa, 0x1ceb, 0xbf2d, 0x4325, 0x4157, 0x415c, 0x431a, 0xbaf1, 0xa1b0, 0x1b83, 0x01c9, 0x4306, 0x42e5, 0x172c, 0x0b7d, 0x405a, 0x4140, 0x4393, 0x4056, 0x1e6e, 0x414e, 0x40f4, 0x43a2, 0xb292, 0xbf3f, 0x4445, 0x190a, 0x431b, 0x1b32, 0xbf59, 0x4625, 0xad4e, 0x45bb, 0x446d, 0x44cc, 0x195c, 0x4619, 0xafd9, 0x0a89, 0x23e7, 0xa8ec, 0x425c, 0x41d0, 0x362d, 0x4257, 0xb036, 0xbf39, 0x44ec, 0xb00c, 0xb214, 0x1f74, 0xba33, 0x4574, 0x44f9, 0x41aa, 0x3e33, 0xbf7e, 0xb089, 0x4260, 0x44fd, 0xbfa8, 0x4262, 0x4348, 0xa90d, 0xaee0, 0xbf97, 0xba70, 0xba28, 0x4370, 0xb2c6, 0x41d4, 0xb21b, 0xb281, 0x43fc, 0xbfd3, 0x1a9f, 0xbac9, 0xbf60, 0x3f4b, 0x25a2, 0x4149, 0xbaeb, 0x4009, 0x238f, 0xba6d, 0xba55, 0xbfa0, 0x3191, 0x22ce, 0x3c36, 0xa50f, 0xaba5, 0xb0dc, 0x4216, 0xb2ff, 0x4322, 0x40fa, 0x418f, 0xba57, 0x4553, 0x1f57, 0xbf89, 0x0fe2, 0x3db5, 0xb201, 0x4111, 0xa77b, 0x42f0, 0x18c1, 0xbfa1, 0x1797, 0xbf80, 0x415c, 0xa873, 0x1a6f, 0x43c4, 0x41dc, 0x42d8, 0x4107, 0x40fa, 0x44d3, 0x401b, 0x0e14, 0xbfe0, 0xbacb, 0x0018, 0xb029, 0x403e, 0x4259, 0x408c, 0xb021, 0x0d72, 0x409f, 0x3e97, 0x0710, 0x422a, 0xbf23, 0xb08d, 0x1777, 0x2940, 0x40b2, 0xbae8, 0x1d10, 0x2a49, 0x24f4, 0x4297, 0x44d2, 0x405b, 0xbfb4, 0x4036, 0x3cc2, 0xbac2, 0x4287, 0x408f, 0x04cf, 0x4402, 0xbf36, 0x18a3, 0x1153, 0x4222, 0xb058, 0x403b, 0x424e, 0x1f0a, 0x419f, 0x43cd, 0xba14, 0x403f, 0xbae3, 0x1a87, 0xb275, 0x4053, 0x433d, 0xb2b7, 0x20a2, 0x40ed, 0x425c, 0x405e, 0xb2f0, 0x169c, 0x43de, 0xb2b4, 0xb030, 0x401e, 0xbf75, 0x4329, 0x1f63, 0x40ed, 0xb2e5, 0xb21e, 0x2dae, 0x13ff, 0xb246, 0x19fb, 0x43a2, 0x4179, 0x4304, 0x25a9, 0x1d4e, 0x1804, 0xb2d8, 0x41ba, 0xb28c, 0x4264, 0x4237, 0x27ff, 0x400a, 0xb00e, 0xb0c7, 0x42af, 0x33d3, 0x0b19, 0x42f9, 0xbf29, 0x41be, 0xb20e, 0xba0a, 0x25c7, 0x4215, 0x1b76, 0x16d0, 0xb08c, 0xb299, 0x4305, 0xbf94, 0xa65b, 0x02f3, 0xb226, 0x40c5, 0x185a, 0x42a4, 0xbf92, 0x1a1f, 0xb29b, 0x40d5, 0xba22, 0xb27b, 0xb0ac, 0x2ee1, 0x424e, 0xb2f8, 0x4299, 0xb26d, 0x0c8c, 0x4350, 0x4191, 0x1a7a, 0x439f, 0x1f7b, 0xb0f6, 0x442d, 0x0997, 0xbf36, 0x418d, 0xba3f, 0xb096, 0x0faa, 0xb201, 0x4302, 0x1919, 0x1d75, 0xb2f2, 0x4288, 0xbf00, 0xb203, 0x413f, 0x40ea, 0xbfd0, 0x198b, 0x4117, 0x439c, 0x09e7, 0xb277, 0x0cce, 0x43a1, 0xba4e, 0x466d, 0x18cf, 0x1e3e, 0xba56, 0xad9d, 0xbf71, 0x428e, 0x0a44, 0x434f, 0x4335, 0x401c, 0x403a, 0xbac5, 0xb0eb, 0xb075, 0x1ee0, 0x300b, 0x419a, 0x4152, 0x1833, 0x412f, 0x42cd, 0x42b6, 0x0e30, 0xa3fc, 0x40d4, 0xb226, 0x409d, 0x0a68, 0x3bb8, 0x1b5d, 0x1a26, 0xb2bb, 0xb290, 0x4294, 0xbfb8, 0x1d4a, 0x431a, 0xb071, 0x41f8, 0x42d3, 0x23e3, 0xb2c7, 0xb217, 0x436d, 0xba56, 0xb2c6, 0x417d, 0x1b54, 0xba72, 0x40eb, 0x0b91, 0xbf2f, 0xb242, 0xa679, 0x41bd, 0xba15, 0x4394, 0x419e, 0x42ad, 0x2bbf, 0x405e, 0x4128, 0x3858, 0x46cb, 0xbf79, 0x40e6, 0x42e0, 0x411c, 0x23b9, 0x42c2, 0x42f9, 0x00d5, 0x435b, 0x08e8, 0x2279, 0xbf94, 0xad4a, 0x4014, 0x40b4, 0x21dc, 0x435a, 0x46b9, 0xb2c5, 0xa749, 0x43b4, 0x40d2, 0x4408, 0x43d5, 0xbf60, 0x43d3, 0x408f, 0x2e00, 0x1ec6, 0x4186, 0xa036, 0x4147, 0xb227, 0xbf9d, 0x1a4b, 0x418f, 0x44b2, 0x40d9, 0xbf37, 0xb2ac, 0x1173, 0xb0e2, 0x409d, 0xb23e, 0xb230, 0x42da, 0x4081, 0x413d, 0xafe1, 0x1d08, 0x408b, 0x412a, 0x334a, 0x4023, 0x4028, 0xb014, 0xba0d, 0x05a5, 0x118a, 0x4090, 0x40cc, 0xb2da, 0x2c35, 0x4057, 0x40ee, 0x408c, 0xb259, 0x3bb3, 0xbf3d, 0x4323, 0x4384, 0xb286, 0x43a6, 0x41e6, 0x2ac2, 0x434b, 0x2a9c, 0x40bc, 0x43c4, 0x1f48, 0x2920, 0xab0a, 0x439e, 0xb0c9, 0xbf7a, 0x4081, 0xba67, 0xbf70, 0x42bc, 0x2f3c, 0x41b1, 0xa46f, 0xbace, 0x3c3d, 0xb2f1, 0x43c7, 0x4049, 0x11d4, 0xbf45, 0x4042, 0x1115, 0x4113, 0xba1b, 0xa069, 0x4571, 0xbacd, 0x1aee, 0x4499, 0xb06a, 0x42ac, 0x4069, 0xa4cd, 0x402a, 0x416b, 0x429c, 0x4362, 0x1314, 0x38c5, 0x400a, 0x4122, 0x3473, 0x413a, 0xba66, 0x27a8, 0x42ca, 0x4369, 0xbfce, 0x4268, 0xa867, 0x4072, 0x04f5, 0xba27, 0x43b5, 0x3c3f, 0xbf25, 0xba45, 0x439c, 0x1cd7, 0xb203, 0x45a3, 0xba2b, 0x41bd, 0x4013, 0x41a0, 0x43cd, 0xb2c4, 0xba18, 0x4097, 0x1507, 0xba2e, 0xaa23, 0x417a, 0x42fc, 0x1df3, 0x40c1, 0xba68, 0x41b6, 0xa65b, 0x438f, 0x1cbe, 0x01aa, 0xbf5d, 0x42a5, 0x070b, 0x423f, 0x465f, 0x4350, 0xa044, 0xb287, 0xb289, 0x42ad, 0x40fc, 0xafbe, 0x0b8c, 0xb2aa, 0x40d3, 0x463c, 0x4314, 0x1d39, 0x40e1, 0x1d12, 0x0eb4, 0xbf23, 0x43b0, 0xb2ca, 0x1b06, 0x414d, 0x1813, 0xb2f0, 0x1cec, 0xa02b, 0x454e, 0x4111, 0x19e3, 0x41f2, 0x4228, 0xbada, 0xb20f, 0x4342, 0x418c, 0x435d, 0x2d58, 0xb2af, 0x429b, 0x4020, 0xb2ae, 0x198b, 0x4256, 0xbf7c, 0xbaf9, 0xa179, 0xb012, 0xb2ed, 0x466e, 0x42b8, 0xb003, 0xb0c2, 0x429c, 0xb2fe, 0x00cb, 0x4440, 0x428e, 0xb033, 0x467e, 0x419e, 0x4396, 0xb261, 0x29a3, 0x434c, 0x1f85, 0x2734, 0x4068, 0xbf52, 0x44cb, 0xbac6, 0x4374, 0xb013, 0x42b7, 0x3f89, 0x163d, 0x1db9, 0xbf19, 0x430c, 0x4326, 0x440e, 0xba28, 0xba31, 0x43e2, 0x41b9, 0xad58, 0x4108, 0x1ad5, 0x428b, 0x1393, 0x4290, 0xb2b9, 0x403d, 0xb23d, 0xb00e, 0xaf72, 0x420e, 0x438e, 0x1298, 0x40db, 0x41ce, 0x40b8, 0x1da4, 0xb085, 0x420b, 0xbf18, 0x025d, 0x1b8b, 0x1038, 0x4191, 0x1e3f, 0x3912, 0x4015, 0x1b40, 0xba0a, 0xb0a5, 0x2dfa, 0x405a, 0xb2dc, 0x419f, 0x020d, 0xbf03, 0x420b, 0x4185, 0xbaca, 0xb0a1, 0x32e6, 0xbae1, 0x40ad, 0x0c4c, 0x426a, 0x442d, 0x0cbc, 0x3f03, 0x4220, 0xb025, 0xb05d, 0x0a54, 0x4253, 0x40e4, 0x0628, 0xba74, 0x4130, 0xb201, 0x3d5a, 0x1f92, 0x42fb, 0x2807, 0x3fd0, 0x434e, 0xbfd5, 0x433e, 0x4171, 0xb0c9, 0x4389, 0x0633, 0xbadd, 0x4468, 0xae94, 0x1efb, 0xb0ba, 0x4066, 0x18b4, 0xbf9b, 0x0986, 0x4373, 0x3dfe, 0xb2cf, 0x4276, 0x37fc, 0x4154, 0xb03b, 0x34e0, 0x1e93, 0x4394, 0x4261, 0x43ce, 0xb0b7, 0xb234, 0xb242, 0x406a, 0x42e3, 0x2ae2, 0x1b93, 0xbf96, 0xb07a, 0x4317, 0x1e51, 0x42e5, 0x430d, 0x324b, 0x4354, 0x410d, 0x41b8, 0x1eb2, 0x4035, 0x06cb, 0x4353, 0x43ca, 0xa102, 0x203d, 0x414e, 0xba16, 0x1b5a, 0xb2d4, 0xb292, 0xbf2d, 0x411e, 0xba6a, 0xb29e, 0x430b, 0x418f, 0xb017, 0x3d40, 0x4271, 0x43ca, 0xb20d, 0x42d1, 0x1ae9, 0x419d, 0x4021, 0x466a, 0x2bb4, 0x1ef8, 0x24be, 0x4146, 0xbf77, 0x423e, 0x4075, 0x4145, 0xb23b, 0xbae8, 0x0db2, 0xb20b, 0xb2bf, 0x0cbf, 0x183f, 0x0f19, 0x21e3, 0x4231, 0x46f9, 0x400b, 0xb0bf, 0x405f, 0xb047, 0x3f77, 0x1c33, 0x3d13, 0x3476, 0xb218, 0xbf7c, 0x4060, 0x43b8, 0xbf80, 0xb0c4, 0x40e7, 0x421c, 0xbf64, 0xb0de, 0x436e, 0x41b5, 0xb0bc, 0x4065, 0x40f4, 0x2bb9, 0xaf92, 0x4624, 0x1e4c, 0x4318, 0x41e2, 0x0adf, 0xb2d4, 0x1e99, 0x1e3b, 0x46f0, 0xa8b3, 0xbf7e, 0x32ac, 0x2b7a, 0x41fb, 0x40fd, 0xba62, 0xbf21, 0x0d64, 0x42b0, 0x3a8c, 0x4270, 0x1e40, 0xbfd4, 0xb298, 0x4084, 0x43e2, 0xbaf3, 0xb256, 0x422d, 0x2965, 0xb29d, 0xb260, 0x41ec, 0x41fb, 0x071c, 0xbf4e, 0x403a, 0x41c6, 0xbad3, 0x41b6, 0x4651, 0xb2c7, 0x44e2, 0x43fd, 0x421f, 0x09c3, 0x4018, 0xbaf3, 0xbff0, 0x106b, 0x40bc, 0x46bc, 0x41ba, 0x41be, 0xb297, 0x4270, 0x4369, 0xbf6c, 0x46b4, 0xb21a, 0x0857, 0x37bc, 0x41c4, 0x1cc5, 0xaddc, 0xb014, 0xb2e3, 0xb0fb, 0x1f42, 0x06c9, 0x412d, 0xa6cd, 0xb2bc, 0x40a6, 0xb0e1, 0x4174, 0xb29f, 0x4200, 0xbf55, 0xba34, 0x4080, 0x434f, 0xb249, 0x43f7, 0x44e1, 0xa252, 0x409d, 0x42bc, 0x4195, 0x4274, 0xba0f, 0x41ce, 0x43e9, 0x45e3, 0xb21b, 0x2ffd, 0xa5c2, 0xba7b, 0x4068, 0x4062, 0x0ea1, 0xbf68, 0x0330, 0x4041, 0x2f6d, 0x0761, 0x4354, 0x3531, 0x40c5, 0xac1f, 0x0a0d, 0x4104, 0x4338, 0x428a, 0x4293, 0xba73, 0x0b8b, 0x0958, 0xbfa3, 0x00ff, 0x43b3, 0x1bca, 0x4146, 0x4770, 0xe7fe + ], + StartRegs = [0xca173107, 0x59131982, 0xd9386e54, 0x24fdf592, 0x3f36eb46, 0x7926dfe1, 0x64131655, 0x72501df8, 0xd923625a, 0xfe222377, 0xf0f7cf65, 0x2d44a91d, 0x61d44f3a, 0x2f3c5836, 0x00000000, 0x300001f0 + ], + FinalRegs = [0x00000000, 0x00000000, 0xffffffc0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x000016c0, 0x8f32eca2, 0xfe2234ce, 0x00000000, 0x2f3c6602, 0x00000000, 0x400001d0 + ], }, new() { - Instructions = new ushort[] { 0x23f8, 0xbfae, 0x415e, 0xbf00, 0x00dd, 0x1949, 0xb2d0, 0x45e8, 0x4179, 0x1814, 0xb001, 0xb239, 0x2993, 0xbfd8, 0x42ec, 0x3367, 0xbf7c, 0xb2a5, 0x3158, 0x4273, 0xbf16, 0x4099, 0x2952, 0x1ff7, 0xbfa8, 0x4059, 0xac74, 0x413a, 0xb03e, 0x1e71, 0x2513, 0x4293, 0x1e93, 0x4321, 0x16a0, 0x410e, 0x1d63, 0xb048, 0x43eb, 0x417c, 0xbf7f, 0xab52, 0xaa4f, 0x4267, 0xb2bd, 0xb227, 0x40ce, 0x0c3d, 0x09b8, 0x4218, 0xa803, 0x1b80, 0x4037, 0x185b, 0x3a2a, 0xbfdc, 0x4345, 0x42e2, 0x2885, 0xb0f7, 0xb2ca, 0x46aa, 0x2e1d, 0x436c, 0xba12, 0x4227, 0x0c58, 0xb075, 0x08a1, 0xba6b, 0xada7, 0xb034, 0xa86d, 0x426e, 0x428f, 0x4218, 0x4389, 0x1a12, 0xaab7, 0xbfe0, 0xb299, 0xbf3e, 0x41c7, 0x4200, 0x40cd, 0x4073, 0xb00b, 0x1122, 0x4270, 0x1516, 0xb0fe, 0x306c, 0x412d, 0x40ce, 0x3c5c, 0x1fab, 0x43bb, 0x4446, 0x405e, 0x40c6, 0xb03b, 0xba37, 0x403e, 0x46fc, 0xbf15, 0xb262, 0x1b66, 0xb26f, 0x4461, 0x22a8, 0x4276, 0x4289, 0x42e4, 0xbaf7, 0x404b, 0x166d, 0x44d9, 0x43fe, 0xb0eb, 0x43d9, 0xaa3b, 0x0b0e, 0xbf0a, 0x332e, 0xba4f, 0x1f48, 0x446d, 0x2fcc, 0x4009, 0x431a, 0x4006, 0x1f9b, 0x42c6, 0xb01d, 0x17a0, 0x4369, 0xbfc0, 0x07be, 0x4026, 0xb00f, 0x4412, 0x30d4, 0x4089, 0x461c, 0x432e, 0xbf36, 0xba17, 0x40ab, 0x432a, 0xa280, 0x1f32, 0xb0e4, 0x23c0, 0x1a9e, 0x4080, 0xba1f, 0xba5e, 0x2887, 0xad8b, 0x282d, 0x1882, 0x41ab, 0xb2e0, 0xb2e7, 0x4373, 0x41c2, 0x41ed, 0x45eb, 0xb00f, 0xb07f, 0xba27, 0xbf63, 0x1bcc, 0x4098, 0xa2a7, 0x189c, 0x4338, 0x4308, 0xbace, 0x1ff4, 0x40fd, 0x4279, 0x0ae8, 0x3b6d, 0x4315, 0x4654, 0x00d0, 0x425e, 0x40ef, 0x4357, 0x192b, 0xbf94, 0x43ce, 0x37fa, 0x1c40, 0x2cbf, 0x26f3, 0x1fe8, 0xb227, 0xabe3, 0x401e, 0x310b, 0x40ce, 0x4223, 0xbf65, 0xba30, 0x4352, 0x4241, 0x0f84, 0x1941, 0x4098, 0x40f7, 0x409a, 0x4081, 0x400c, 0x41da, 0xb256, 0x45cd, 0x1f42, 0x42f2, 0xbaef, 0x0335, 0xa8e0, 0x429a, 0xba0e, 0x40a3, 0x3d57, 0x439d, 0x406f, 0xbae3, 0xbfc6, 0x2f1b, 0xb2f5, 0xa396, 0x41ff, 0x40e4, 0x4401, 0x43f9, 0x4169, 0x40cb, 0x1f8b, 0x4335, 0xb25a, 0x4407, 0xba60, 0x4286, 0xa2ee, 0x4027, 0xbf3f, 0x1c86, 0x435c, 0x40bc, 0x41cc, 0x1bda, 0x2ad1, 0x1c02, 0xb04d, 0x42cb, 0x4084, 0x1dd2, 0xb2fd, 0xb0ac, 0xb280, 0x1dad, 0xb06c, 0x43a1, 0x4310, 0x40e4, 0x435f, 0xb2be, 0x4201, 0xbf7b, 0x1e70, 0x0de8, 0x02bf, 0x407d, 0x45d2, 0x1d92, 0x43c8, 0xbfa4, 0x401d, 0x431e, 0x4030, 0x40a1, 0x1fb9, 0x2bdc, 0xbf44, 0x423c, 0x41f8, 0x0525, 0xbf03, 0xbae5, 0x4316, 0x2fa1, 0xb042, 0x438d, 0x3f53, 0x424a, 0xa7ee, 0x4470, 0x0dc7, 0x4408, 0x18e7, 0xb2f9, 0xb01f, 0xa1af, 0xbf28, 0xbfc0, 0xb26b, 0xa1cc, 0xbf6c, 0x0855, 0x3e49, 0x45e1, 0x41a7, 0xba1b, 0x2d90, 0x4216, 0xb215, 0xb224, 0x4136, 0xb0fb, 0x4676, 0x1127, 0x4151, 0xba11, 0xb287, 0xb2e4, 0x4074, 0x4313, 0x060e, 0x1dc1, 0xb213, 0x4000, 0x42ca, 0x4085, 0x264b, 0xbf84, 0xa3c4, 0xb045, 0x0f04, 0x425a, 0xba22, 0x414a, 0x4155, 0x40ae, 0x12ca, 0x3ed5, 0xb0e1, 0x4080, 0xba16, 0xb04b, 0xba70, 0xbfa0, 0x40d5, 0x402b, 0xbaf1, 0x46b8, 0x1f45, 0xbf60, 0x423d, 0xb2ee, 0x2b14, 0x1e82, 0xbfc9, 0x1e6e, 0x415b, 0xba48, 0x2cf4, 0x43ee, 0x4322, 0xba57, 0xba68, 0x434d, 0xba0d, 0x31f2, 0xbf86, 0xa72b, 0x43d1, 0xb22c, 0xb29a, 0x3a3a, 0x433b, 0x41ad, 0x401a, 0x1df5, 0x0084, 0xa1db, 0xbfe0, 0x4091, 0xb294, 0x43f7, 0xbfde, 0x1d6a, 0x40c1, 0x4052, 0x14ba, 0x4315, 0x1b64, 0x4370, 0x1ef0, 0x0bf2, 0xb09b, 0xbf2e, 0x4260, 0xba0d, 0x0a68, 0xbfd0, 0x4197, 0x1e0a, 0xb204, 0x4282, 0x1afb, 0x4369, 0x438d, 0x41b4, 0x40e6, 0xba10, 0xb2e6, 0x436f, 0x40f8, 0x4207, 0x1986, 0x4342, 0xa33e, 0xb2e6, 0x1fe0, 0x402c, 0xbf48, 0xb03e, 0x40df, 0x0251, 0x1e47, 0x42dd, 0xb2d3, 0x1c88, 0xbf42, 0x36f1, 0xbaf1, 0x15ed, 0x433c, 0xbac4, 0xb0aa, 0x4315, 0xb242, 0x1fcd, 0x40b2, 0x420b, 0xb0e1, 0xba7c, 0xa872, 0x2966, 0xba76, 0x4635, 0x438b, 0x40b4, 0xbf80, 0xba5a, 0xbf80, 0x4350, 0xbfcf, 0x3a60, 0x45f4, 0x21f6, 0x2fc8, 0x425f, 0x2511, 0x42cf, 0x1945, 0x2264, 0x40ab, 0xbf8e, 0xb27e, 0xba02, 0x415f, 0xbfd7, 0x1026, 0x40a9, 0x1a50, 0xaca5, 0x4569, 0x1a72, 0x1ca3, 0x407a, 0xbac3, 0x402a, 0x1d13, 0x1ba5, 0x43bb, 0xb2fa, 0x3dc5, 0xb25f, 0xb2cd, 0x1eda, 0xba67, 0x39d3, 0x16ad, 0x1c10, 0x0b53, 0xb225, 0xbf55, 0xb20a, 0x29be, 0xb2cc, 0x43f5, 0x0c83, 0xb21f, 0x439e, 0x45d1, 0xb2b1, 0x0286, 0x441f, 0x0eb2, 0xbae9, 0xba76, 0xb2c4, 0x18f1, 0x40f6, 0xb2c9, 0x052d, 0xbaf3, 0x427f, 0x0215, 0x43ba, 0x4561, 0x14e4, 0xba1e, 0x41b5, 0xaf51, 0x42a3, 0xbf52, 0x4037, 0x410b, 0xba44, 0xbf70, 0x2dee, 0x005e, 0x4181, 0x1d78, 0x0559, 0xbf48, 0xb0ef, 0x40d1, 0x1bc3, 0x4012, 0x4613, 0x0053, 0x4351, 0xb2bd, 0x4381, 0x1a6a, 0x45c6, 0xb200, 0x4443, 0x08ef, 0xbfaf, 0x425e, 0x42e9, 0x437d, 0x10d0, 0xb25b, 0x441c, 0xbad8, 0x4263, 0x2561, 0xb02c, 0xbaf6, 0x428d, 0xb2d5, 0x406d, 0x4015, 0xb0dd, 0x45ac, 0x43d0, 0x365f, 0xb0df, 0xb2c3, 0x1829, 0xb0b3, 0x42e6, 0x02a5, 0x46d2, 0xbf0c, 0x4132, 0x409e, 0x30b6, 0xb25a, 0x42ef, 0x42f1, 0x0405, 0x41b2, 0x41e6, 0xb254, 0x4107, 0x40c6, 0x41a8, 0x0bec, 0x4134, 0xa686, 0xa857, 0xbf04, 0xab3f, 0xbfb0, 0xbf16, 0x4240, 0x42f4, 0xb2fb, 0xb2db, 0xb0f2, 0x197c, 0x0476, 0x406d, 0xb265, 0x40a1, 0x4389, 0x433e, 0xba5f, 0x41e8, 0x0e2f, 0x42f7, 0x4088, 0x3609, 0x24cb, 0x06bb, 0x428c, 0x1544, 0xbf19, 0xba5b, 0xba74, 0x4317, 0x42cc, 0xb261, 0xab8d, 0xa8bf, 0x003f, 0xa63e, 0xba06, 0x4061, 0x1a1d, 0x1baa, 0xbfb5, 0x42e0, 0x4273, 0xba55, 0xa83f, 0x46e0, 0x4324, 0x4556, 0x40e0, 0x421d, 0x2fcd, 0x42b4, 0x3700, 0xbae7, 0x19a2, 0xba1c, 0xba30, 0xb269, 0x1717, 0x413f, 0x1d62, 0x412e, 0x1196, 0x1c42, 0xbf66, 0x4017, 0x4238, 0x4351, 0x405a, 0x28e5, 0x29e7, 0x4555, 0x4052, 0x4356, 0x42bb, 0x079e, 0x42cc, 0xb245, 0xba69, 0x41c6, 0x4158, 0x3c55, 0x1ea8, 0xb25d, 0xbfdb, 0xbae1, 0x2de6, 0x19fe, 0x1b24, 0x4076, 0x46f1, 0xb020, 0xbadf, 0x4373, 0x4332, 0xacca, 0xb072, 0x440d, 0x445c, 0x192d, 0x317a, 0xbf48, 0x2038, 0x08bd, 0xaf9f, 0x0031, 0x4336, 0x15e1, 0xbfb5, 0x4387, 0xbacb, 0x4379, 0xb215, 0xb254, 0xbf7c, 0x19bc, 0x04e4, 0x4574, 0x432f, 0xb279, 0xbf6b, 0xbfd0, 0x2ec6, 0x41a4, 0x2665, 0xb0d5, 0x40e9, 0x435a, 0x4064, 0x1f9b, 0xb2ca, 0x0bee, 0x3d64, 0x3530, 0xbada, 0xa670, 0x42d5, 0x4200, 0x42f5, 0x42b8, 0xbad3, 0xba31, 0xbf71, 0x1cb2, 0xb205, 0x41eb, 0xba50, 0x4126, 0xbfad, 0xb0d7, 0x0788, 0xba09, 0x4246, 0x464a, 0x07d1, 0x438e, 0x4336, 0x2594, 0x3309, 0x4373, 0x4324, 0xb097, 0x428b, 0xbf90, 0x40e8, 0xa8ec, 0xbf3a, 0x0a6a, 0x2d9b, 0x04d6, 0x407d, 0xb233, 0x10b7, 0x40e0, 0x42a7, 0x43fd, 0xa709, 0x19a8, 0x40c3, 0x1b39, 0x19ea, 0x4492, 0x4046, 0xbae9, 0xba67, 0xaee3, 0x435c, 0x43ef, 0x409e, 0x4397, 0x3a1d, 0xbfa0, 0x4158, 0x4135, 0x1f07, 0xbf25, 0xb24f, 0x428f, 0xb2c9, 0x411e, 0xbf00, 0xba6c, 0x26ae, 0xb00f, 0x35f8, 0x419c, 0x1ea4, 0x42d4, 0xb207, 0x1611, 0x4399, 0xbf5c, 0x4283, 0x07d5, 0x10a8, 0x4387, 0x42db, 0xb259, 0xbf04, 0x1f26, 0x413c, 0x40b0, 0x4389, 0x1526, 0x212f, 0xbf63, 0xb0d6, 0xbad7, 0x33b4, 0x4322, 0x4317, 0x4188, 0x43eb, 0x40ea, 0xbfe4, 0x0285, 0x22a7, 0x4291, 0xbaf8, 0xb0ef, 0x438a, 0x1dd5, 0x4344, 0x266e, 0x41ca, 0x4155, 0x430a, 0xb2b7, 0x3f6f, 0xba27, 0x4372, 0xba32, 0x291c, 0x129c, 0xbfb2, 0xac6e, 0x4046, 0x4248, 0x4338, 0x12c1, 0xb227, 0x4168, 0x0f8e, 0x4038, 0x3caa, 0x43b0, 0x1a4b, 0xbf33, 0x21dd, 0xbae6, 0x1bab, 0x43a6, 0xbada, 0x1c96, 0x40a7, 0x4065, 0xb264, 0x1b34, 0x103f, 0x10e0, 0x007e, 0x0742, 0x405b, 0xbada, 0x466f, 0x438a, 0x40f5, 0xb287, 0x43a5, 0xb237, 0x4350, 0x44e5, 0x4222, 0x4067, 0x405e, 0xbfc6, 0x411e, 0x4222, 0x289f, 0xba0c, 0x2535, 0xb29e, 0xba3c, 0xb2a9, 0x1d5c, 0x1afb, 0x4033, 0x1ea6, 0xa772, 0x2d80, 0xa777, 0x43e4, 0x40c9, 0x401f, 0x315d, 0xba55, 0x4595, 0xb2a3, 0x409a, 0xbfaf, 0x46db, 0x4328, 0x4373, 0xb23b, 0xb0a6, 0x4093, 0xa89e, 0xb248, 0x43c9, 0x1643, 0xb04f, 0xb21b, 0x4365, 0xb2d3, 0x4660, 0x42b9, 0xb273, 0x0942, 0x4335, 0x1def, 0xab0c, 0xbf0e, 0x43af, 0x317b, 0x407e, 0x435d, 0x361a, 0x454c, 0x4304, 0x3b0b, 0x4046, 0xbf76, 0x4368, 0xb0fc, 0x4277, 0xa54e, 0x15dd, 0x43ef, 0x42ba, 0x436a, 0x3be5, 0x410e, 0x2870, 0xbf7e, 0x1890, 0x18a3, 0x4203, 0x4384, 0x4371, 0x0e8e, 0x42a8, 0x288f, 0x1920, 0x447b, 0xba58, 0x41e2, 0xb296, 0x42a4, 0x4151, 0xae23, 0x4268, 0x42ea, 0xb2dc, 0x42b5, 0x1ac1, 0x43af, 0xba4d, 0xbf3e, 0xb238, 0x4208, 0x2d85, 0xb284, 0x183c, 0x40c6, 0xa6b9, 0x429f, 0x0428, 0xb080, 0x23ff, 0x4191, 0xb286, 0xab3d, 0xbf23, 0xb2ab, 0x4101, 0xba54, 0x42ae, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xe99b8527, 0x3e866f78, 0xbb8f4079, 0xc9ef19b8, 0xaaf5b29d, 0x98cec417, 0x79e91cc3, 0x8e2e7557, 0xc691e551, 0x2095f998, 0xe3609aa0, 0xb521524b, 0xcc39afbb, 0xcf08047d, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0x161c0000, 0x0cd2dc16, 0xf32d3fff, 0xcf08105b, 0x000000c2, 0x0000161c, 0x00000000, 0x00000061, 0x000010d2, 0x00000000, 0x00001643, 0xb521524b, 0x000010d2, 0xcf080f67, 0x00000000, 0x800001d0 }, + Instructions = [0x23f8, 0xbfae, 0x415e, 0xbf00, 0x00dd, 0x1949, 0xb2d0, 0x45e8, 0x4179, 0x1814, 0xb001, 0xb239, 0x2993, 0xbfd8, 0x42ec, 0x3367, 0xbf7c, 0xb2a5, 0x3158, 0x4273, 0xbf16, 0x4099, 0x2952, 0x1ff7, 0xbfa8, 0x4059, 0xac74, 0x413a, 0xb03e, 0x1e71, 0x2513, 0x4293, 0x1e93, 0x4321, 0x16a0, 0x410e, 0x1d63, 0xb048, 0x43eb, 0x417c, 0xbf7f, 0xab52, 0xaa4f, 0x4267, 0xb2bd, 0xb227, 0x40ce, 0x0c3d, 0x09b8, 0x4218, 0xa803, 0x1b80, 0x4037, 0x185b, 0x3a2a, 0xbfdc, 0x4345, 0x42e2, 0x2885, 0xb0f7, 0xb2ca, 0x46aa, 0x2e1d, 0x436c, 0xba12, 0x4227, 0x0c58, 0xb075, 0x08a1, 0xba6b, 0xada7, 0xb034, 0xa86d, 0x426e, 0x428f, 0x4218, 0x4389, 0x1a12, 0xaab7, 0xbfe0, 0xb299, 0xbf3e, 0x41c7, 0x4200, 0x40cd, 0x4073, 0xb00b, 0x1122, 0x4270, 0x1516, 0xb0fe, 0x306c, 0x412d, 0x40ce, 0x3c5c, 0x1fab, 0x43bb, 0x4446, 0x405e, 0x40c6, 0xb03b, 0xba37, 0x403e, 0x46fc, 0xbf15, 0xb262, 0x1b66, 0xb26f, 0x4461, 0x22a8, 0x4276, 0x4289, 0x42e4, 0xbaf7, 0x404b, 0x166d, 0x44d9, 0x43fe, 0xb0eb, 0x43d9, 0xaa3b, 0x0b0e, 0xbf0a, 0x332e, 0xba4f, 0x1f48, 0x446d, 0x2fcc, 0x4009, 0x431a, 0x4006, 0x1f9b, 0x42c6, 0xb01d, 0x17a0, 0x4369, 0xbfc0, 0x07be, 0x4026, 0xb00f, 0x4412, 0x30d4, 0x4089, 0x461c, 0x432e, 0xbf36, 0xba17, 0x40ab, 0x432a, 0xa280, 0x1f32, 0xb0e4, 0x23c0, 0x1a9e, 0x4080, 0xba1f, 0xba5e, 0x2887, 0xad8b, 0x282d, 0x1882, 0x41ab, 0xb2e0, 0xb2e7, 0x4373, 0x41c2, 0x41ed, 0x45eb, 0xb00f, 0xb07f, 0xba27, 0xbf63, 0x1bcc, 0x4098, 0xa2a7, 0x189c, 0x4338, 0x4308, 0xbace, 0x1ff4, 0x40fd, 0x4279, 0x0ae8, 0x3b6d, 0x4315, 0x4654, 0x00d0, 0x425e, 0x40ef, 0x4357, 0x192b, 0xbf94, 0x43ce, 0x37fa, 0x1c40, 0x2cbf, 0x26f3, 0x1fe8, 0xb227, 0xabe3, 0x401e, 0x310b, 0x40ce, 0x4223, 0xbf65, 0xba30, 0x4352, 0x4241, 0x0f84, 0x1941, 0x4098, 0x40f7, 0x409a, 0x4081, 0x400c, 0x41da, 0xb256, 0x45cd, 0x1f42, 0x42f2, 0xbaef, 0x0335, 0xa8e0, 0x429a, 0xba0e, 0x40a3, 0x3d57, 0x439d, 0x406f, 0xbae3, 0xbfc6, 0x2f1b, 0xb2f5, 0xa396, 0x41ff, 0x40e4, 0x4401, 0x43f9, 0x4169, 0x40cb, 0x1f8b, 0x4335, 0xb25a, 0x4407, 0xba60, 0x4286, 0xa2ee, 0x4027, 0xbf3f, 0x1c86, 0x435c, 0x40bc, 0x41cc, 0x1bda, 0x2ad1, 0x1c02, 0xb04d, 0x42cb, 0x4084, 0x1dd2, 0xb2fd, 0xb0ac, 0xb280, 0x1dad, 0xb06c, 0x43a1, 0x4310, 0x40e4, 0x435f, 0xb2be, 0x4201, 0xbf7b, 0x1e70, 0x0de8, 0x02bf, 0x407d, 0x45d2, 0x1d92, 0x43c8, 0xbfa4, 0x401d, 0x431e, 0x4030, 0x40a1, 0x1fb9, 0x2bdc, 0xbf44, 0x423c, 0x41f8, 0x0525, 0xbf03, 0xbae5, 0x4316, 0x2fa1, 0xb042, 0x438d, 0x3f53, 0x424a, 0xa7ee, 0x4470, 0x0dc7, 0x4408, 0x18e7, 0xb2f9, 0xb01f, 0xa1af, 0xbf28, 0xbfc0, 0xb26b, 0xa1cc, 0xbf6c, 0x0855, 0x3e49, 0x45e1, 0x41a7, 0xba1b, 0x2d90, 0x4216, 0xb215, 0xb224, 0x4136, 0xb0fb, 0x4676, 0x1127, 0x4151, 0xba11, 0xb287, 0xb2e4, 0x4074, 0x4313, 0x060e, 0x1dc1, 0xb213, 0x4000, 0x42ca, 0x4085, 0x264b, 0xbf84, 0xa3c4, 0xb045, 0x0f04, 0x425a, 0xba22, 0x414a, 0x4155, 0x40ae, 0x12ca, 0x3ed5, 0xb0e1, 0x4080, 0xba16, 0xb04b, 0xba70, 0xbfa0, 0x40d5, 0x402b, 0xbaf1, 0x46b8, 0x1f45, 0xbf60, 0x423d, 0xb2ee, 0x2b14, 0x1e82, 0xbfc9, 0x1e6e, 0x415b, 0xba48, 0x2cf4, 0x43ee, 0x4322, 0xba57, 0xba68, 0x434d, 0xba0d, 0x31f2, 0xbf86, 0xa72b, 0x43d1, 0xb22c, 0xb29a, 0x3a3a, 0x433b, 0x41ad, 0x401a, 0x1df5, 0x0084, 0xa1db, 0xbfe0, 0x4091, 0xb294, 0x43f7, 0xbfde, 0x1d6a, 0x40c1, 0x4052, 0x14ba, 0x4315, 0x1b64, 0x4370, 0x1ef0, 0x0bf2, 0xb09b, 0xbf2e, 0x4260, 0xba0d, 0x0a68, 0xbfd0, 0x4197, 0x1e0a, 0xb204, 0x4282, 0x1afb, 0x4369, 0x438d, 0x41b4, 0x40e6, 0xba10, 0xb2e6, 0x436f, 0x40f8, 0x4207, 0x1986, 0x4342, 0xa33e, 0xb2e6, 0x1fe0, 0x402c, 0xbf48, 0xb03e, 0x40df, 0x0251, 0x1e47, 0x42dd, 0xb2d3, 0x1c88, 0xbf42, 0x36f1, 0xbaf1, 0x15ed, 0x433c, 0xbac4, 0xb0aa, 0x4315, 0xb242, 0x1fcd, 0x40b2, 0x420b, 0xb0e1, 0xba7c, 0xa872, 0x2966, 0xba76, 0x4635, 0x438b, 0x40b4, 0xbf80, 0xba5a, 0xbf80, 0x4350, 0xbfcf, 0x3a60, 0x45f4, 0x21f6, 0x2fc8, 0x425f, 0x2511, 0x42cf, 0x1945, 0x2264, 0x40ab, 0xbf8e, 0xb27e, 0xba02, 0x415f, 0xbfd7, 0x1026, 0x40a9, 0x1a50, 0xaca5, 0x4569, 0x1a72, 0x1ca3, 0x407a, 0xbac3, 0x402a, 0x1d13, 0x1ba5, 0x43bb, 0xb2fa, 0x3dc5, 0xb25f, 0xb2cd, 0x1eda, 0xba67, 0x39d3, 0x16ad, 0x1c10, 0x0b53, 0xb225, 0xbf55, 0xb20a, 0x29be, 0xb2cc, 0x43f5, 0x0c83, 0xb21f, 0x439e, 0x45d1, 0xb2b1, 0x0286, 0x441f, 0x0eb2, 0xbae9, 0xba76, 0xb2c4, 0x18f1, 0x40f6, 0xb2c9, 0x052d, 0xbaf3, 0x427f, 0x0215, 0x43ba, 0x4561, 0x14e4, 0xba1e, 0x41b5, 0xaf51, 0x42a3, 0xbf52, 0x4037, 0x410b, 0xba44, 0xbf70, 0x2dee, 0x005e, 0x4181, 0x1d78, 0x0559, 0xbf48, 0xb0ef, 0x40d1, 0x1bc3, 0x4012, 0x4613, 0x0053, 0x4351, 0xb2bd, 0x4381, 0x1a6a, 0x45c6, 0xb200, 0x4443, 0x08ef, 0xbfaf, 0x425e, 0x42e9, 0x437d, 0x10d0, 0xb25b, 0x441c, 0xbad8, 0x4263, 0x2561, 0xb02c, 0xbaf6, 0x428d, 0xb2d5, 0x406d, 0x4015, 0xb0dd, 0x45ac, 0x43d0, 0x365f, 0xb0df, 0xb2c3, 0x1829, 0xb0b3, 0x42e6, 0x02a5, 0x46d2, 0xbf0c, 0x4132, 0x409e, 0x30b6, 0xb25a, 0x42ef, 0x42f1, 0x0405, 0x41b2, 0x41e6, 0xb254, 0x4107, 0x40c6, 0x41a8, 0x0bec, 0x4134, 0xa686, 0xa857, 0xbf04, 0xab3f, 0xbfb0, 0xbf16, 0x4240, 0x42f4, 0xb2fb, 0xb2db, 0xb0f2, 0x197c, 0x0476, 0x406d, 0xb265, 0x40a1, 0x4389, 0x433e, 0xba5f, 0x41e8, 0x0e2f, 0x42f7, 0x4088, 0x3609, 0x24cb, 0x06bb, 0x428c, 0x1544, 0xbf19, 0xba5b, 0xba74, 0x4317, 0x42cc, 0xb261, 0xab8d, 0xa8bf, 0x003f, 0xa63e, 0xba06, 0x4061, 0x1a1d, 0x1baa, 0xbfb5, 0x42e0, 0x4273, 0xba55, 0xa83f, 0x46e0, 0x4324, 0x4556, 0x40e0, 0x421d, 0x2fcd, 0x42b4, 0x3700, 0xbae7, 0x19a2, 0xba1c, 0xba30, 0xb269, 0x1717, 0x413f, 0x1d62, 0x412e, 0x1196, 0x1c42, 0xbf66, 0x4017, 0x4238, 0x4351, 0x405a, 0x28e5, 0x29e7, 0x4555, 0x4052, 0x4356, 0x42bb, 0x079e, 0x42cc, 0xb245, 0xba69, 0x41c6, 0x4158, 0x3c55, 0x1ea8, 0xb25d, 0xbfdb, 0xbae1, 0x2de6, 0x19fe, 0x1b24, 0x4076, 0x46f1, 0xb020, 0xbadf, 0x4373, 0x4332, 0xacca, 0xb072, 0x440d, 0x445c, 0x192d, 0x317a, 0xbf48, 0x2038, 0x08bd, 0xaf9f, 0x0031, 0x4336, 0x15e1, 0xbfb5, 0x4387, 0xbacb, 0x4379, 0xb215, 0xb254, 0xbf7c, 0x19bc, 0x04e4, 0x4574, 0x432f, 0xb279, 0xbf6b, 0xbfd0, 0x2ec6, 0x41a4, 0x2665, 0xb0d5, 0x40e9, 0x435a, 0x4064, 0x1f9b, 0xb2ca, 0x0bee, 0x3d64, 0x3530, 0xbada, 0xa670, 0x42d5, 0x4200, 0x42f5, 0x42b8, 0xbad3, 0xba31, 0xbf71, 0x1cb2, 0xb205, 0x41eb, 0xba50, 0x4126, 0xbfad, 0xb0d7, 0x0788, 0xba09, 0x4246, 0x464a, 0x07d1, 0x438e, 0x4336, 0x2594, 0x3309, 0x4373, 0x4324, 0xb097, 0x428b, 0xbf90, 0x40e8, 0xa8ec, 0xbf3a, 0x0a6a, 0x2d9b, 0x04d6, 0x407d, 0xb233, 0x10b7, 0x40e0, 0x42a7, 0x43fd, 0xa709, 0x19a8, 0x40c3, 0x1b39, 0x19ea, 0x4492, 0x4046, 0xbae9, 0xba67, 0xaee3, 0x435c, 0x43ef, 0x409e, 0x4397, 0x3a1d, 0xbfa0, 0x4158, 0x4135, 0x1f07, 0xbf25, 0xb24f, 0x428f, 0xb2c9, 0x411e, 0xbf00, 0xba6c, 0x26ae, 0xb00f, 0x35f8, 0x419c, 0x1ea4, 0x42d4, 0xb207, 0x1611, 0x4399, 0xbf5c, 0x4283, 0x07d5, 0x10a8, 0x4387, 0x42db, 0xb259, 0xbf04, 0x1f26, 0x413c, 0x40b0, 0x4389, 0x1526, 0x212f, 0xbf63, 0xb0d6, 0xbad7, 0x33b4, 0x4322, 0x4317, 0x4188, 0x43eb, 0x40ea, 0xbfe4, 0x0285, 0x22a7, 0x4291, 0xbaf8, 0xb0ef, 0x438a, 0x1dd5, 0x4344, 0x266e, 0x41ca, 0x4155, 0x430a, 0xb2b7, 0x3f6f, 0xba27, 0x4372, 0xba32, 0x291c, 0x129c, 0xbfb2, 0xac6e, 0x4046, 0x4248, 0x4338, 0x12c1, 0xb227, 0x4168, 0x0f8e, 0x4038, 0x3caa, 0x43b0, 0x1a4b, 0xbf33, 0x21dd, 0xbae6, 0x1bab, 0x43a6, 0xbada, 0x1c96, 0x40a7, 0x4065, 0xb264, 0x1b34, 0x103f, 0x10e0, 0x007e, 0x0742, 0x405b, 0xbada, 0x466f, 0x438a, 0x40f5, 0xb287, 0x43a5, 0xb237, 0x4350, 0x44e5, 0x4222, 0x4067, 0x405e, 0xbfc6, 0x411e, 0x4222, 0x289f, 0xba0c, 0x2535, 0xb29e, 0xba3c, 0xb2a9, 0x1d5c, 0x1afb, 0x4033, 0x1ea6, 0xa772, 0x2d80, 0xa777, 0x43e4, 0x40c9, 0x401f, 0x315d, 0xba55, 0x4595, 0xb2a3, 0x409a, 0xbfaf, 0x46db, 0x4328, 0x4373, 0xb23b, 0xb0a6, 0x4093, 0xa89e, 0xb248, 0x43c9, 0x1643, 0xb04f, 0xb21b, 0x4365, 0xb2d3, 0x4660, 0x42b9, 0xb273, 0x0942, 0x4335, 0x1def, 0xab0c, 0xbf0e, 0x43af, 0x317b, 0x407e, 0x435d, 0x361a, 0x454c, 0x4304, 0x3b0b, 0x4046, 0xbf76, 0x4368, 0xb0fc, 0x4277, 0xa54e, 0x15dd, 0x43ef, 0x42ba, 0x436a, 0x3be5, 0x410e, 0x2870, 0xbf7e, 0x1890, 0x18a3, 0x4203, 0x4384, 0x4371, 0x0e8e, 0x42a8, 0x288f, 0x1920, 0x447b, 0xba58, 0x41e2, 0xb296, 0x42a4, 0x4151, 0xae23, 0x4268, 0x42ea, 0xb2dc, 0x42b5, 0x1ac1, 0x43af, 0xba4d, 0xbf3e, 0xb238, 0x4208, 0x2d85, 0xb284, 0x183c, 0x40c6, 0xa6b9, 0x429f, 0x0428, 0xb080, 0x23ff, 0x4191, 0xb286, 0xab3d, 0xbf23, 0xb2ab, 0x4101, 0xba54, 0x42ae, 0x4770, 0xe7fe + ], + StartRegs = [0xe99b8527, 0x3e866f78, 0xbb8f4079, 0xc9ef19b8, 0xaaf5b29d, 0x98cec417, 0x79e91cc3, 0x8e2e7557, 0xc691e551, 0x2095f998, 0xe3609aa0, 0xb521524b, 0xcc39afbb, 0xcf08047d, 0x00000000, 0x100001f0 + ], + FinalRegs = [0x161c0000, 0x0cd2dc16, 0xf32d3fff, 0xcf08105b, 0x000000c2, 0x0000161c, 0x00000000, 0x00000061, 0x000010d2, 0x00000000, 0x00001643, 0xb521524b, 0x000010d2, 0xcf080f67, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0xbf78, 0xb251, 0x1eb2, 0x15c1, 0x1b9e, 0xb26c, 0x46ba, 0x4392, 0x42d2, 0x42bd, 0x40e0, 0x1474, 0xba55, 0x4199, 0xb255, 0xbf64, 0x4214, 0x44fb, 0x437e, 0x426f, 0x4258, 0x4079, 0x409b, 0x4240, 0x42da, 0x02ff, 0x41f7, 0x1e1c, 0xbafd, 0x4108, 0x1976, 0x4304, 0x4363, 0x4376, 0x422f, 0x4448, 0x4164, 0x41f6, 0xaada, 0xbf0d, 0x43b8, 0xb0ab, 0x43c9, 0xb084, 0x0010, 0x419f, 0x4158, 0xb241, 0x4008, 0x44a8, 0x41dc, 0x42f1, 0x4083, 0x2913, 0x43e7, 0x4226, 0x1f85, 0xbf57, 0x40f3, 0xbac0, 0x43e2, 0x17b4, 0x401b, 0xa764, 0x19f8, 0xa5d3, 0xba04, 0x42c5, 0x410c, 0x0045, 0x40df, 0x45c4, 0x4370, 0xb0e6, 0x40f9, 0x1994, 0x42ea, 0xa907, 0xbf67, 0x4016, 0x1d1c, 0x0fd3, 0xb022, 0x1d1e, 0x4688, 0x44a4, 0x4357, 0x18dd, 0x3d71, 0x1ab6, 0x19b6, 0x1f8f, 0xaaf6, 0xb23a, 0x1b6a, 0x4137, 0x40a8, 0xbfe8, 0x4388, 0x422d, 0x434b, 0x0732, 0x4068, 0x42d5, 0x42f3, 0x41ad, 0xb20a, 0x4091, 0x411a, 0xba44, 0xa7d9, 0x1688, 0xb09c, 0x1d2f, 0x1cf1, 0xb2ca, 0x409c, 0x0873, 0x19b1, 0x409d, 0xb2e0, 0x4071, 0x425a, 0x04b0, 0xbf3a, 0x412f, 0x44e1, 0x3786, 0x412e, 0x419b, 0x4012, 0x4547, 0x19fb, 0xb0be, 0x4209, 0x4001, 0x43af, 0x429b, 0x20fd, 0x43d4, 0xbfa0, 0x40ee, 0x1a3d, 0xbfc0, 0x4418, 0xb2f9, 0x0a05, 0x2b88, 0xb23b, 0xbf5c, 0x183d, 0x4122, 0x463b, 0x3ed8, 0xbf70, 0x4381, 0xba5f, 0xba7d, 0x41ec, 0xba39, 0xbf70, 0x4596, 0x1660, 0x1e85, 0x4278, 0x43a4, 0xad91, 0x4046, 0x41fd, 0xba79, 0x408b, 0xbf4e, 0x0e75, 0xb22b, 0x1ee0, 0x4195, 0x1e6c, 0xb040, 0x43e2, 0x3745, 0xba65, 0x40e0, 0xa8ab, 0x4126, 0xbf41, 0xb20d, 0x4235, 0x0483, 0x43c5, 0x36d5, 0xaf62, 0xb0c7, 0x1e22, 0xbfa1, 0xb2e7, 0x17de, 0x3fa1, 0x2a2d, 0xb035, 0x4308, 0xa38f, 0x4115, 0xb001, 0xba31, 0x1d3f, 0x4093, 0xad99, 0x425f, 0x187a, 0x4206, 0xaaec, 0x41c2, 0x1b58, 0x4299, 0x419f, 0xbf59, 0x4252, 0xb275, 0x4157, 0x4314, 0x40c5, 0x4002, 0x4156, 0x4040, 0x1c34, 0xba34, 0x0b6f, 0x19d4, 0xba24, 0x40fd, 0x41cb, 0x4141, 0x3190, 0x19c1, 0xbad9, 0x1fdb, 0xbfab, 0x41ed, 0x43de, 0x4080, 0x3d58, 0x2532, 0x466a, 0xbfc0, 0xb049, 0x412a, 0xa8ca, 0xb2af, 0x420f, 0xbacd, 0x432a, 0xbfde, 0xb0e2, 0x43ea, 0x4100, 0x404d, 0x426e, 0xbf71, 0x124a, 0xb259, 0x407a, 0x43f7, 0x4215, 0x416f, 0x34fa, 0x4367, 0x40b1, 0xb239, 0x419f, 0xba28, 0xae76, 0x1a0e, 0xbf82, 0x4174, 0xb27d, 0xa2f6, 0x422b, 0x401c, 0x439a, 0xba51, 0x2d8f, 0xb063, 0x1d7c, 0x40f6, 0xb0f9, 0xb2aa, 0xbfaf, 0xaaaf, 0x40e9, 0x41a9, 0x16c4, 0xbad8, 0x1dda, 0x17ae, 0x26f9, 0xba47, 0xbad9, 0x41eb, 0x4086, 0x424f, 0x4234, 0xb290, 0x4236, 0xa8ce, 0x40fd, 0x18c3, 0x4291, 0xb2e9, 0x4240, 0xbf88, 0xbad6, 0x02a2, 0x439e, 0x1c1b, 0x1e78, 0xabba, 0x40c4, 0x42e9, 0xa4b2, 0x21f3, 0x1f64, 0x1c05, 0xbf6a, 0xb20b, 0x4034, 0x20f5, 0xbaf9, 0xac9b, 0xbfb0, 0xb02d, 0x43c9, 0x4020, 0x41f1, 0xb26e, 0x1c9d, 0xba7e, 0x4047, 0x41f4, 0x1bce, 0x412c, 0x4378, 0x3857, 0x43da, 0x419f, 0x4296, 0xba50, 0xbafd, 0x1f01, 0xbaf8, 0xa978, 0xbfb2, 0xb291, 0x42df, 0x410c, 0x40d3, 0x469b, 0x4388, 0x41eb, 0xbad7, 0x4367, 0x1aed, 0x411f, 0xba27, 0xb220, 0x417a, 0x1839, 0xb256, 0xb22e, 0xaeb8, 0xad5b, 0x0842, 0x2af8, 0x423d, 0xba02, 0xb256, 0xb093, 0xbfb5, 0x431d, 0xb01b, 0xb2cd, 0xba7c, 0x19f9, 0xbfa9, 0x1c2b, 0x40b2, 0xb024, 0xaf9c, 0xad91, 0x0191, 0x4152, 0x40b1, 0xbacb, 0xa5d4, 0x42e8, 0xb0b6, 0x080a, 0x41da, 0x4195, 0x40f4, 0x4329, 0xaa3c, 0x4602, 0x40f8, 0x1d9f, 0xbf86, 0x1d1d, 0xb041, 0x4294, 0xb215, 0x41a0, 0x4336, 0xb07c, 0xba73, 0x1537, 0xa583, 0x4332, 0xbfa3, 0xb03a, 0x2082, 0x405f, 0xb0e5, 0x4083, 0x3b48, 0x1fdd, 0x4399, 0x38f1, 0x41d9, 0xb09f, 0x1377, 0xb076, 0x195c, 0x4341, 0x1faa, 0x1a14, 0x1c98, 0x4177, 0xbf64, 0xbff0, 0x4341, 0x199c, 0xba2d, 0x4001, 0x4294, 0x271a, 0xbf49, 0xb2eb, 0x4625, 0xb2c7, 0x4282, 0x42c2, 0xbf90, 0x42cf, 0x4057, 0xbaef, 0x414a, 0xbf2b, 0x4196, 0x1071, 0x02c2, 0xa540, 0x424a, 0x032e, 0xb21b, 0x4331, 0x4049, 0x4673, 0xbfd2, 0x421f, 0x42ee, 0x417e, 0xa3ed, 0xb21e, 0xb0ba, 0xbac9, 0x4071, 0x3b78, 0x436b, 0xa792, 0xb0ea, 0xb271, 0xa5df, 0x1a45, 0x2020, 0x43ff, 0xb282, 0xb24f, 0xbfb6, 0x022c, 0xbae8, 0x3ac4, 0xb016, 0xba5a, 0x41e5, 0x407b, 0x0f5d, 0xb245, 0x1f55, 0x41ae, 0x43ba, 0x0399, 0x42df, 0x0d93, 0x4355, 0xba29, 0x4670, 0x4558, 0x047d, 0xbf86, 0x29a9, 0x19d7, 0x1f16, 0xb0fe, 0xbaf9, 0x21a5, 0x46fc, 0x2750, 0x1398, 0x2284, 0x0309, 0x461b, 0xb2cd, 0x29de, 0xbf0a, 0xba3f, 0x119d, 0xb24a, 0xa8e5, 0x4069, 0x148f, 0xb04d, 0xb264, 0xa8c6, 0x1dd3, 0x46b4, 0x18c7, 0x43bc, 0x40e3, 0xba4e, 0x405b, 0x4101, 0x1d87, 0x3d58, 0x43e6, 0x2199, 0xb21f, 0x1a00, 0x4301, 0x2a14, 0x02f4, 0xbfb7, 0x4441, 0xa4bf, 0x40bf, 0xb2d4, 0x4117, 0x11d9, 0x1f4a, 0x1923, 0x02f0, 0x4350, 0x1f6a, 0x4176, 0xb2f9, 0xb233, 0x31f5, 0x4012, 0xbfdd, 0x4297, 0x4575, 0x40ae, 0xba01, 0x42b1, 0xbacd, 0x40fa, 0x3d82, 0x4338, 0xba51, 0x411c, 0x4153, 0x2556, 0x4398, 0x1d63, 0x4305, 0x28c7, 0xbf0a, 0x4309, 0xb051, 0x42e7, 0x37b1, 0xb28c, 0x41f8, 0xb263, 0xbf60, 0x1f06, 0x421f, 0x4294, 0x401c, 0x43d3, 0xb2b3, 0x1a06, 0x428e, 0x42fe, 0xb246, 0xb27b, 0x43e7, 0x4135, 0x2f59, 0xbf6e, 0xac94, 0xbaf0, 0x12fd, 0x41da, 0x4337, 0xb294, 0xb06f, 0x4156, 0x42d8, 0x2309, 0x1de4, 0xb021, 0x0d01, 0x42fd, 0x1957, 0x44e1, 0x0a23, 0xb21d, 0xba2e, 0x2c2f, 0xa0c8, 0x40f8, 0x41f6, 0xbaed, 0x4224, 0xada8, 0x42ff, 0x4227, 0xbfc1, 0x2336, 0xbad7, 0xba01, 0xba5b, 0x1eec, 0xba44, 0x43d7, 0xbae3, 0xba1f, 0x417f, 0x3fbb, 0xb2aa, 0xb202, 0x07f6, 0xb249, 0x414f, 0x4144, 0xb25e, 0xba30, 0x413d, 0xb2c9, 0xb0a8, 0x029f, 0x19a0, 0xbf58, 0x4140, 0xb260, 0x0f52, 0xb23b, 0x42c4, 0x43db, 0xad0e, 0x43f0, 0x028d, 0xbf24, 0xbac3, 0x1c7e, 0x1094, 0xbff0, 0x41b1, 0x30a0, 0x01a0, 0x094c, 0x149b, 0xbfdf, 0x32f6, 0x41b3, 0x43d5, 0x35b7, 0x468c, 0x2936, 0x1877, 0x2db5, 0x436e, 0x18bc, 0x1c4b, 0xbf00, 0xb276, 0xbf00, 0xb262, 0xba52, 0x240e, 0x4281, 0x410b, 0xbfa2, 0x4173, 0x2aba, 0x43de, 0x2801, 0x432c, 0x40b4, 0x4119, 0xb2da, 0xaa5d, 0x43dd, 0x1c35, 0x4357, 0x4237, 0x191a, 0xba06, 0x3b92, 0x4018, 0xb299, 0x46c2, 0x1f3c, 0xba7a, 0x438e, 0x44b9, 0xba71, 0x401f, 0xbfd7, 0xbaf6, 0x41b4, 0x0e92, 0x4151, 0xb225, 0xb08b, 0x4035, 0x428c, 0x42b2, 0x41cb, 0xb2a3, 0xbae6, 0x41cd, 0xb2b9, 0xba59, 0x4022, 0xba11, 0x4246, 0x4625, 0x1b37, 0xad1c, 0x108d, 0x2de7, 0x1a8b, 0xbf9d, 0x1bc9, 0x43c4, 0x432a, 0x1a06, 0x4196, 0x3937, 0xb08f, 0xbad4, 0x18f6, 0x3f38, 0xbfc6, 0xb2d1, 0xb03a, 0x4246, 0x3ea1, 0x42bb, 0xb259, 0x43b0, 0xb2bb, 0xba47, 0xb28d, 0x1907, 0xbf6a, 0xb089, 0x4372, 0x4469, 0x182d, 0xb03d, 0xbf90, 0x4399, 0x4237, 0xb223, 0x36ba, 0x4173, 0x4233, 0x4616, 0x21de, 0x25e2, 0x4287, 0xb20a, 0x4612, 0x409c, 0xb24c, 0x40d6, 0x400f, 0xbad9, 0xbf01, 0x4324, 0x4374, 0xb0d1, 0xb21a, 0x1e51, 0xb2e8, 0x41ed, 0xbf60, 0x4664, 0x4043, 0x463a, 0xb21d, 0x430d, 0xbf19, 0x4203, 0x4339, 0x4549, 0xa026, 0x1ca7, 0xbaf4, 0xaaac, 0x4360, 0x2a0a, 0x125d, 0xb2de, 0x313b, 0x4025, 0xb221, 0xba16, 0x42e4, 0x4087, 0xba4e, 0x1f06, 0x31b6, 0x1af5, 0xbf3b, 0xb217, 0xb227, 0x3022, 0xba71, 0xbf11, 0x40db, 0x40a6, 0x4219, 0x4274, 0x4349, 0x4168, 0xbfb1, 0x4219, 0xb27f, 0x415d, 0x0685, 0x42f3, 0x4321, 0x400e, 0x4041, 0x3c1d, 0x41c8, 0xbacf, 0xa885, 0x425b, 0xa833, 0xb0ed, 0x4111, 0x408a, 0xbf60, 0x4048, 0xb2e6, 0x314a, 0xb21c, 0x2119, 0x4349, 0x1d8f, 0x43e4, 0x1ce5, 0xb2db, 0x4281, 0xbf3c, 0x1907, 0x431e, 0x41f2, 0x4309, 0x413f, 0x3c15, 0x1e57, 0x1875, 0x2a86, 0x1cde, 0x444d, 0xb26f, 0x40ad, 0x3408, 0x05f4, 0x42b4, 0x418f, 0x1bdb, 0x437c, 0xb29e, 0xa7c4, 0x44b8, 0x4254, 0x4198, 0x4568, 0xbf29, 0xba58, 0x42e5, 0x413d, 0xbae2, 0x42d2, 0x44a0, 0xb2b6, 0x431a, 0x3165, 0x1d28, 0x0b29, 0xb234, 0x409b, 0xb296, 0xbf5d, 0x13ee, 0x4310, 0x4015, 0x42b6, 0x1919, 0x21c3, 0xb249, 0x43dc, 0x459d, 0xbfc0, 0x4073, 0x4251, 0x428e, 0x42a6, 0xb212, 0xb20d, 0xbfc0, 0x40b8, 0xba7e, 0x42d8, 0xb234, 0x05c8, 0x4120, 0x1a7d, 0xb05f, 0x4608, 0x411a, 0xbf47, 0xba36, 0x19e1, 0x4019, 0x0eb2, 0x4090, 0x43f4, 0x42a7, 0xba3a, 0x0080, 0x42b9, 0xba72, 0xbf90, 0xb0ff, 0xb295, 0xa5d3, 0x4215, 0x36ac, 0x40be, 0x1a4a, 0xbad4, 0x09b5, 0xba41, 0x465c, 0xba6f, 0xb25f, 0xbfa2, 0x14b7, 0x09c9, 0x1ee3, 0x4397, 0x280b, 0xbf53, 0xb230, 0x42c9, 0x1896, 0x4454, 0xbafa, 0x0535, 0x42f0, 0x395d, 0x1d22, 0x4191, 0x4481, 0x1b2e, 0xba36, 0x4103, 0x1a29, 0x2b7c, 0x326a, 0x407a, 0x42a4, 0x0308, 0x4673, 0xbfd0, 0xb24d, 0x184f, 0x439d, 0xba62, 0x42f7, 0xbf93, 0x24a2, 0xb2d0, 0xb0f4, 0x13d7, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x7f786d81, 0xed0589af, 0xd3e5419b, 0x0129696d, 0xe25706db, 0x2c5ca927, 0x6d81e353, 0x64845d90, 0x7114f20e, 0x7890cd21, 0xe05b5922, 0xe345d064, 0xda1b31e1, 0xa9b62e07, 0x00000000, 0x000001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x00000000, 0xb6a9df2b, 0x00000000, 0x000000a2, 0x00000000, 0x21d44956, 0xffff6d53, 0x347f7fc7, 0x188dd287, 0xa9b62bdf, 0x00000000, 0xffffffff, 0xa9b62c9f, 0x00000000, 0x000001d0 }, + Instructions = [0xbf78, 0xb251, 0x1eb2, 0x15c1, 0x1b9e, 0xb26c, 0x46ba, 0x4392, 0x42d2, 0x42bd, 0x40e0, 0x1474, 0xba55, 0x4199, 0xb255, 0xbf64, 0x4214, 0x44fb, 0x437e, 0x426f, 0x4258, 0x4079, 0x409b, 0x4240, 0x42da, 0x02ff, 0x41f7, 0x1e1c, 0xbafd, 0x4108, 0x1976, 0x4304, 0x4363, 0x4376, 0x422f, 0x4448, 0x4164, 0x41f6, 0xaada, 0xbf0d, 0x43b8, 0xb0ab, 0x43c9, 0xb084, 0x0010, 0x419f, 0x4158, 0xb241, 0x4008, 0x44a8, 0x41dc, 0x42f1, 0x4083, 0x2913, 0x43e7, 0x4226, 0x1f85, 0xbf57, 0x40f3, 0xbac0, 0x43e2, 0x17b4, 0x401b, 0xa764, 0x19f8, 0xa5d3, 0xba04, 0x42c5, 0x410c, 0x0045, 0x40df, 0x45c4, 0x4370, 0xb0e6, 0x40f9, 0x1994, 0x42ea, 0xa907, 0xbf67, 0x4016, 0x1d1c, 0x0fd3, 0xb022, 0x1d1e, 0x4688, 0x44a4, 0x4357, 0x18dd, 0x3d71, 0x1ab6, 0x19b6, 0x1f8f, 0xaaf6, 0xb23a, 0x1b6a, 0x4137, 0x40a8, 0xbfe8, 0x4388, 0x422d, 0x434b, 0x0732, 0x4068, 0x42d5, 0x42f3, 0x41ad, 0xb20a, 0x4091, 0x411a, 0xba44, 0xa7d9, 0x1688, 0xb09c, 0x1d2f, 0x1cf1, 0xb2ca, 0x409c, 0x0873, 0x19b1, 0x409d, 0xb2e0, 0x4071, 0x425a, 0x04b0, 0xbf3a, 0x412f, 0x44e1, 0x3786, 0x412e, 0x419b, 0x4012, 0x4547, 0x19fb, 0xb0be, 0x4209, 0x4001, 0x43af, 0x429b, 0x20fd, 0x43d4, 0xbfa0, 0x40ee, 0x1a3d, 0xbfc0, 0x4418, 0xb2f9, 0x0a05, 0x2b88, 0xb23b, 0xbf5c, 0x183d, 0x4122, 0x463b, 0x3ed8, 0xbf70, 0x4381, 0xba5f, 0xba7d, 0x41ec, 0xba39, 0xbf70, 0x4596, 0x1660, 0x1e85, 0x4278, 0x43a4, 0xad91, 0x4046, 0x41fd, 0xba79, 0x408b, 0xbf4e, 0x0e75, 0xb22b, 0x1ee0, 0x4195, 0x1e6c, 0xb040, 0x43e2, 0x3745, 0xba65, 0x40e0, 0xa8ab, 0x4126, 0xbf41, 0xb20d, 0x4235, 0x0483, 0x43c5, 0x36d5, 0xaf62, 0xb0c7, 0x1e22, 0xbfa1, 0xb2e7, 0x17de, 0x3fa1, 0x2a2d, 0xb035, 0x4308, 0xa38f, 0x4115, 0xb001, 0xba31, 0x1d3f, 0x4093, 0xad99, 0x425f, 0x187a, 0x4206, 0xaaec, 0x41c2, 0x1b58, 0x4299, 0x419f, 0xbf59, 0x4252, 0xb275, 0x4157, 0x4314, 0x40c5, 0x4002, 0x4156, 0x4040, 0x1c34, 0xba34, 0x0b6f, 0x19d4, 0xba24, 0x40fd, 0x41cb, 0x4141, 0x3190, 0x19c1, 0xbad9, 0x1fdb, 0xbfab, 0x41ed, 0x43de, 0x4080, 0x3d58, 0x2532, 0x466a, 0xbfc0, 0xb049, 0x412a, 0xa8ca, 0xb2af, 0x420f, 0xbacd, 0x432a, 0xbfde, 0xb0e2, 0x43ea, 0x4100, 0x404d, 0x426e, 0xbf71, 0x124a, 0xb259, 0x407a, 0x43f7, 0x4215, 0x416f, 0x34fa, 0x4367, 0x40b1, 0xb239, 0x419f, 0xba28, 0xae76, 0x1a0e, 0xbf82, 0x4174, 0xb27d, 0xa2f6, 0x422b, 0x401c, 0x439a, 0xba51, 0x2d8f, 0xb063, 0x1d7c, 0x40f6, 0xb0f9, 0xb2aa, 0xbfaf, 0xaaaf, 0x40e9, 0x41a9, 0x16c4, 0xbad8, 0x1dda, 0x17ae, 0x26f9, 0xba47, 0xbad9, 0x41eb, 0x4086, 0x424f, 0x4234, 0xb290, 0x4236, 0xa8ce, 0x40fd, 0x18c3, 0x4291, 0xb2e9, 0x4240, 0xbf88, 0xbad6, 0x02a2, 0x439e, 0x1c1b, 0x1e78, 0xabba, 0x40c4, 0x42e9, 0xa4b2, 0x21f3, 0x1f64, 0x1c05, 0xbf6a, 0xb20b, 0x4034, 0x20f5, 0xbaf9, 0xac9b, 0xbfb0, 0xb02d, 0x43c9, 0x4020, 0x41f1, 0xb26e, 0x1c9d, 0xba7e, 0x4047, 0x41f4, 0x1bce, 0x412c, 0x4378, 0x3857, 0x43da, 0x419f, 0x4296, 0xba50, 0xbafd, 0x1f01, 0xbaf8, 0xa978, 0xbfb2, 0xb291, 0x42df, 0x410c, 0x40d3, 0x469b, 0x4388, 0x41eb, 0xbad7, 0x4367, 0x1aed, 0x411f, 0xba27, 0xb220, 0x417a, 0x1839, 0xb256, 0xb22e, 0xaeb8, 0xad5b, 0x0842, 0x2af8, 0x423d, 0xba02, 0xb256, 0xb093, 0xbfb5, 0x431d, 0xb01b, 0xb2cd, 0xba7c, 0x19f9, 0xbfa9, 0x1c2b, 0x40b2, 0xb024, 0xaf9c, 0xad91, 0x0191, 0x4152, 0x40b1, 0xbacb, 0xa5d4, 0x42e8, 0xb0b6, 0x080a, 0x41da, 0x4195, 0x40f4, 0x4329, 0xaa3c, 0x4602, 0x40f8, 0x1d9f, 0xbf86, 0x1d1d, 0xb041, 0x4294, 0xb215, 0x41a0, 0x4336, 0xb07c, 0xba73, 0x1537, 0xa583, 0x4332, 0xbfa3, 0xb03a, 0x2082, 0x405f, 0xb0e5, 0x4083, 0x3b48, 0x1fdd, 0x4399, 0x38f1, 0x41d9, 0xb09f, 0x1377, 0xb076, 0x195c, 0x4341, 0x1faa, 0x1a14, 0x1c98, 0x4177, 0xbf64, 0xbff0, 0x4341, 0x199c, 0xba2d, 0x4001, 0x4294, 0x271a, 0xbf49, 0xb2eb, 0x4625, 0xb2c7, 0x4282, 0x42c2, 0xbf90, 0x42cf, 0x4057, 0xbaef, 0x414a, 0xbf2b, 0x4196, 0x1071, 0x02c2, 0xa540, 0x424a, 0x032e, 0xb21b, 0x4331, 0x4049, 0x4673, 0xbfd2, 0x421f, 0x42ee, 0x417e, 0xa3ed, 0xb21e, 0xb0ba, 0xbac9, 0x4071, 0x3b78, 0x436b, 0xa792, 0xb0ea, 0xb271, 0xa5df, 0x1a45, 0x2020, 0x43ff, 0xb282, 0xb24f, 0xbfb6, 0x022c, 0xbae8, 0x3ac4, 0xb016, 0xba5a, 0x41e5, 0x407b, 0x0f5d, 0xb245, 0x1f55, 0x41ae, 0x43ba, 0x0399, 0x42df, 0x0d93, 0x4355, 0xba29, 0x4670, 0x4558, 0x047d, 0xbf86, 0x29a9, 0x19d7, 0x1f16, 0xb0fe, 0xbaf9, 0x21a5, 0x46fc, 0x2750, 0x1398, 0x2284, 0x0309, 0x461b, 0xb2cd, 0x29de, 0xbf0a, 0xba3f, 0x119d, 0xb24a, 0xa8e5, 0x4069, 0x148f, 0xb04d, 0xb264, 0xa8c6, 0x1dd3, 0x46b4, 0x18c7, 0x43bc, 0x40e3, 0xba4e, 0x405b, 0x4101, 0x1d87, 0x3d58, 0x43e6, 0x2199, 0xb21f, 0x1a00, 0x4301, 0x2a14, 0x02f4, 0xbfb7, 0x4441, 0xa4bf, 0x40bf, 0xb2d4, 0x4117, 0x11d9, 0x1f4a, 0x1923, 0x02f0, 0x4350, 0x1f6a, 0x4176, 0xb2f9, 0xb233, 0x31f5, 0x4012, 0xbfdd, 0x4297, 0x4575, 0x40ae, 0xba01, 0x42b1, 0xbacd, 0x40fa, 0x3d82, 0x4338, 0xba51, 0x411c, 0x4153, 0x2556, 0x4398, 0x1d63, 0x4305, 0x28c7, 0xbf0a, 0x4309, 0xb051, 0x42e7, 0x37b1, 0xb28c, 0x41f8, 0xb263, 0xbf60, 0x1f06, 0x421f, 0x4294, 0x401c, 0x43d3, 0xb2b3, 0x1a06, 0x428e, 0x42fe, 0xb246, 0xb27b, 0x43e7, 0x4135, 0x2f59, 0xbf6e, 0xac94, 0xbaf0, 0x12fd, 0x41da, 0x4337, 0xb294, 0xb06f, 0x4156, 0x42d8, 0x2309, 0x1de4, 0xb021, 0x0d01, 0x42fd, 0x1957, 0x44e1, 0x0a23, 0xb21d, 0xba2e, 0x2c2f, 0xa0c8, 0x40f8, 0x41f6, 0xbaed, 0x4224, 0xada8, 0x42ff, 0x4227, 0xbfc1, 0x2336, 0xbad7, 0xba01, 0xba5b, 0x1eec, 0xba44, 0x43d7, 0xbae3, 0xba1f, 0x417f, 0x3fbb, 0xb2aa, 0xb202, 0x07f6, 0xb249, 0x414f, 0x4144, 0xb25e, 0xba30, 0x413d, 0xb2c9, 0xb0a8, 0x029f, 0x19a0, 0xbf58, 0x4140, 0xb260, 0x0f52, 0xb23b, 0x42c4, 0x43db, 0xad0e, 0x43f0, 0x028d, 0xbf24, 0xbac3, 0x1c7e, 0x1094, 0xbff0, 0x41b1, 0x30a0, 0x01a0, 0x094c, 0x149b, 0xbfdf, 0x32f6, 0x41b3, 0x43d5, 0x35b7, 0x468c, 0x2936, 0x1877, 0x2db5, 0x436e, 0x18bc, 0x1c4b, 0xbf00, 0xb276, 0xbf00, 0xb262, 0xba52, 0x240e, 0x4281, 0x410b, 0xbfa2, 0x4173, 0x2aba, 0x43de, 0x2801, 0x432c, 0x40b4, 0x4119, 0xb2da, 0xaa5d, 0x43dd, 0x1c35, 0x4357, 0x4237, 0x191a, 0xba06, 0x3b92, 0x4018, 0xb299, 0x46c2, 0x1f3c, 0xba7a, 0x438e, 0x44b9, 0xba71, 0x401f, 0xbfd7, 0xbaf6, 0x41b4, 0x0e92, 0x4151, 0xb225, 0xb08b, 0x4035, 0x428c, 0x42b2, 0x41cb, 0xb2a3, 0xbae6, 0x41cd, 0xb2b9, 0xba59, 0x4022, 0xba11, 0x4246, 0x4625, 0x1b37, 0xad1c, 0x108d, 0x2de7, 0x1a8b, 0xbf9d, 0x1bc9, 0x43c4, 0x432a, 0x1a06, 0x4196, 0x3937, 0xb08f, 0xbad4, 0x18f6, 0x3f38, 0xbfc6, 0xb2d1, 0xb03a, 0x4246, 0x3ea1, 0x42bb, 0xb259, 0x43b0, 0xb2bb, 0xba47, 0xb28d, 0x1907, 0xbf6a, 0xb089, 0x4372, 0x4469, 0x182d, 0xb03d, 0xbf90, 0x4399, 0x4237, 0xb223, 0x36ba, 0x4173, 0x4233, 0x4616, 0x21de, 0x25e2, 0x4287, 0xb20a, 0x4612, 0x409c, 0xb24c, 0x40d6, 0x400f, 0xbad9, 0xbf01, 0x4324, 0x4374, 0xb0d1, 0xb21a, 0x1e51, 0xb2e8, 0x41ed, 0xbf60, 0x4664, 0x4043, 0x463a, 0xb21d, 0x430d, 0xbf19, 0x4203, 0x4339, 0x4549, 0xa026, 0x1ca7, 0xbaf4, 0xaaac, 0x4360, 0x2a0a, 0x125d, 0xb2de, 0x313b, 0x4025, 0xb221, 0xba16, 0x42e4, 0x4087, 0xba4e, 0x1f06, 0x31b6, 0x1af5, 0xbf3b, 0xb217, 0xb227, 0x3022, 0xba71, 0xbf11, 0x40db, 0x40a6, 0x4219, 0x4274, 0x4349, 0x4168, 0xbfb1, 0x4219, 0xb27f, 0x415d, 0x0685, 0x42f3, 0x4321, 0x400e, 0x4041, 0x3c1d, 0x41c8, 0xbacf, 0xa885, 0x425b, 0xa833, 0xb0ed, 0x4111, 0x408a, 0xbf60, 0x4048, 0xb2e6, 0x314a, 0xb21c, 0x2119, 0x4349, 0x1d8f, 0x43e4, 0x1ce5, 0xb2db, 0x4281, 0xbf3c, 0x1907, 0x431e, 0x41f2, 0x4309, 0x413f, 0x3c15, 0x1e57, 0x1875, 0x2a86, 0x1cde, 0x444d, 0xb26f, 0x40ad, 0x3408, 0x05f4, 0x42b4, 0x418f, 0x1bdb, 0x437c, 0xb29e, 0xa7c4, 0x44b8, 0x4254, 0x4198, 0x4568, 0xbf29, 0xba58, 0x42e5, 0x413d, 0xbae2, 0x42d2, 0x44a0, 0xb2b6, 0x431a, 0x3165, 0x1d28, 0x0b29, 0xb234, 0x409b, 0xb296, 0xbf5d, 0x13ee, 0x4310, 0x4015, 0x42b6, 0x1919, 0x21c3, 0xb249, 0x43dc, 0x459d, 0xbfc0, 0x4073, 0x4251, 0x428e, 0x42a6, 0xb212, 0xb20d, 0xbfc0, 0x40b8, 0xba7e, 0x42d8, 0xb234, 0x05c8, 0x4120, 0x1a7d, 0xb05f, 0x4608, 0x411a, 0xbf47, 0xba36, 0x19e1, 0x4019, 0x0eb2, 0x4090, 0x43f4, 0x42a7, 0xba3a, 0x0080, 0x42b9, 0xba72, 0xbf90, 0xb0ff, 0xb295, 0xa5d3, 0x4215, 0x36ac, 0x40be, 0x1a4a, 0xbad4, 0x09b5, 0xba41, 0x465c, 0xba6f, 0xb25f, 0xbfa2, 0x14b7, 0x09c9, 0x1ee3, 0x4397, 0x280b, 0xbf53, 0xb230, 0x42c9, 0x1896, 0x4454, 0xbafa, 0x0535, 0x42f0, 0x395d, 0x1d22, 0x4191, 0x4481, 0x1b2e, 0xba36, 0x4103, 0x1a29, 0x2b7c, 0x326a, 0x407a, 0x42a4, 0x0308, 0x4673, 0xbfd0, 0xb24d, 0x184f, 0x439d, 0xba62, 0x42f7, 0xbf93, 0x24a2, 0xb2d0, 0xb0f4, 0x13d7, 0x4770, 0xe7fe + ], + StartRegs = [0x7f786d81, 0xed0589af, 0xd3e5419b, 0x0129696d, 0xe25706db, 0x2c5ca927, 0x6d81e353, 0x64845d90, 0x7114f20e, 0x7890cd21, 0xe05b5922, 0xe345d064, 0xda1b31e1, 0xa9b62e07, 0x00000000, 0x000001f0 + ], + FinalRegs = [0x00000000, 0x00000000, 0xb6a9df2b, 0x00000000, 0x000000a2, 0x00000000, 0x21d44956, 0xffff6d53, 0x347f7fc7, 0x188dd287, 0xa9b62bdf, 0x00000000, 0xffffffff, 0xa9b62c9f, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x1e54, 0x40d8, 0x2f66, 0x276c, 0x416f, 0x1987, 0xb06a, 0x45ec, 0xba67, 0x408a, 0xba2f, 0xacd5, 0x29cf, 0x1872, 0x111e, 0x1b04, 0xbafd, 0x41a5, 0xbf97, 0x43df, 0xb06f, 0x1c82, 0x268b, 0xb2ba, 0xb08a, 0x407f, 0xbaea, 0x1d52, 0x06cb, 0x41e7, 0x4475, 0x43b8, 0xba6b, 0x1fb1, 0xbf3e, 0x4241, 0x3d38, 0x4120, 0x2a6b, 0xb217, 0xbfb8, 0x1f4e, 0xb218, 0xb2cc, 0x1ad6, 0x4128, 0x169b, 0xaa87, 0xaf67, 0xb2aa, 0xbfc0, 0xb0e8, 0x33a9, 0x43fb, 0x195b, 0x4091, 0x3613, 0x00c8, 0xbf09, 0xbff0, 0x0ab2, 0x4211, 0xbadc, 0x4100, 0xba4d, 0x0f34, 0xba3f, 0xb250, 0x1425, 0x1ad6, 0x1f20, 0xb0e6, 0xae48, 0x41f4, 0x4117, 0xb0d0, 0xba25, 0xb2f9, 0xba7d, 0x4063, 0x1e53, 0x40ef, 0x401c, 0x1b23, 0x059d, 0x4021, 0x4126, 0xbf0c, 0x3318, 0x4087, 0x4135, 0x430e, 0xbf69, 0x18c0, 0xb285, 0x4164, 0xbf90, 0x40e9, 0x43bf, 0xba12, 0x2a34, 0x4009, 0x4593, 0xbf06, 0x07c3, 0xb295, 0x369a, 0x41f4, 0x434a, 0xb01e, 0x42a5, 0x0343, 0x2ad7, 0x1be0, 0xbfce, 0x1bdd, 0x4484, 0x439c, 0x461b, 0x10f4, 0x2207, 0x0503, 0x40ab, 0xbf60, 0x4108, 0x4271, 0x1c07, 0x40d7, 0x1820, 0x01a5, 0x3519, 0xb283, 0xb0c1, 0xb28f, 0xb241, 0x238f, 0x43da, 0x2f61, 0xbfb2, 0xa2bd, 0xbae8, 0x410c, 0x46e2, 0xb012, 0x1e36, 0xb236, 0x45ba, 0xb23b, 0x2e93, 0x4369, 0x18a6, 0xb257, 0x4340, 0xba50, 0x4240, 0x4181, 0x1a86, 0xba64, 0x0cb1, 0x4065, 0xb21a, 0x1b54, 0xbf70, 0x462e, 0xb236, 0x01af, 0x41c3, 0xbf89, 0x4324, 0x4357, 0x41ae, 0x4654, 0x408c, 0x1c4d, 0x43ca, 0x405e, 0x19cc, 0x429b, 0xb026, 0x4337, 0x404b, 0x1c2f, 0xba75, 0x42f1, 0x1e97, 0xb27f, 0x425d, 0x049c, 0xb2e2, 0x1385, 0xb270, 0x1eb3, 0xa556, 0xbade, 0x4064, 0x22e3, 0xbfd1, 0x1cf0, 0x0f0c, 0x4266, 0xb0e2, 0x02c3, 0xb092, 0x1212, 0x3b16, 0x4349, 0x458d, 0x317f, 0x4263, 0x19ee, 0x3fde, 0x085c, 0x0f9e, 0x21c4, 0x41e8, 0xb27f, 0x1ae4, 0x425c, 0x2207, 0x43b9, 0xba3e, 0xb24a, 0xbfcc, 0x40b9, 0x40df, 0x4026, 0x415a, 0xb2db, 0x41e2, 0xbae2, 0x410a, 0x420e, 0xbfa5, 0x43d6, 0xb237, 0x40a9, 0x407f, 0x4075, 0xb23b, 0x1dbb, 0x4021, 0x16c5, 0x430d, 0xb258, 0x1fee, 0x44a5, 0xb03f, 0x4367, 0x43e4, 0x435a, 0x37aa, 0x1bd9, 0xbf08, 0x4143, 0xaea3, 0x2a14, 0x41ef, 0xb076, 0x1e69, 0x4644, 0x1971, 0x2fe4, 0x0aef, 0x3651, 0x43e0, 0x4171, 0x1c89, 0x417b, 0x4354, 0x43fa, 0x418d, 0x411b, 0x425a, 0xbf3a, 0x42b3, 0xa73a, 0x4396, 0xbfc0, 0xb258, 0x429c, 0x44c8, 0x4195, 0xba65, 0x46ed, 0xb0ec, 0x18f8, 0x43b9, 0xb246, 0x4306, 0x465f, 0xb2d4, 0xbf7e, 0x37f6, 0x4173, 0x4685, 0x0536, 0x3e40, 0x0691, 0x2372, 0xbf2e, 0xb213, 0xba2c, 0x1c23, 0x41e6, 0x30e0, 0x4062, 0x4030, 0xb229, 0x43d9, 0x2e16, 0x25b3, 0xb2ae, 0x439f, 0x18bb, 0x16b6, 0x4048, 0x4418, 0x42f7, 0xa615, 0xb008, 0xb2d6, 0x1958, 0x1b00, 0xb0d0, 0x4281, 0xb225, 0xab07, 0xbf82, 0x4276, 0x2565, 0x4156, 0x43eb, 0xb2fe, 0xba25, 0x4143, 0x435c, 0x41cf, 0x428c, 0xb2b4, 0x1772, 0x4398, 0x1b8d, 0xb016, 0x435d, 0xba5c, 0xbf63, 0xba66, 0x4100, 0xba5f, 0x43ac, 0xbfb1, 0x41c5, 0x3555, 0x3b44, 0x4305, 0x3e89, 0xba59, 0x1f34, 0x1828, 0x3d4b, 0xa344, 0xb2c2, 0x3ca8, 0x42ea, 0xbf88, 0x4250, 0xb2ac, 0x43fd, 0xb02a, 0x30bb, 0x0fba, 0x43b6, 0x4336, 0x432b, 0xb256, 0x432f, 0xb0bf, 0x4353, 0x4069, 0x095a, 0xa6cb, 0xbf47, 0x3074, 0x165b, 0x1fe4, 0x2ed8, 0xb272, 0x43d0, 0x43a8, 0x2770, 0xb05c, 0x4279, 0x4055, 0xbfd0, 0xbf84, 0x41aa, 0x43ec, 0x1daf, 0x4663, 0x40c5, 0x34e8, 0x447f, 0xa971, 0x145d, 0x00c3, 0x4281, 0x4392, 0xba2d, 0x3677, 0x42eb, 0x42d3, 0x28df, 0xb2c4, 0x4004, 0xa6ed, 0x40fb, 0x1947, 0xbf33, 0xbaee, 0x446b, 0x40b7, 0x402b, 0x460f, 0x1ef9, 0x4130, 0x28f6, 0xad23, 0x4042, 0x2583, 0x45b5, 0x41c8, 0x462e, 0x19f1, 0x4008, 0x4144, 0x421d, 0x4305, 0xba2b, 0x4103, 0xb2fd, 0xb239, 0x4365, 0xbf9a, 0xb219, 0x4461, 0x41a7, 0x43ac, 0xb2a4, 0x416a, 0xbfe0, 0xb09b, 0x4214, 0xae01, 0x2c45, 0x0c53, 0x4107, 0x43b4, 0x4005, 0xb22f, 0x1966, 0xbf60, 0x182c, 0x4011, 0x430e, 0x4291, 0x34de, 0xbfcc, 0xabcf, 0x4255, 0xba1e, 0xba3b, 0x4556, 0x0971, 0x1926, 0xb2ff, 0xaffe, 0x0c75, 0x401a, 0xbf69, 0x4026, 0x402a, 0x4406, 0x4213, 0xba16, 0x41da, 0x43f0, 0x41d3, 0x4312, 0x4228, 0x43fb, 0x44a8, 0x413c, 0x1e14, 0x1924, 0x435d, 0x409c, 0xb27c, 0x4113, 0x405c, 0x4180, 0xba02, 0x42c0, 0xba36, 0x4197, 0x4359, 0x319f, 0xbf82, 0x4092, 0x1fec, 0x1ee0, 0x43fa, 0x4170, 0x45b4, 0x1e51, 0x4109, 0x40e2, 0x2867, 0x30ff, 0x41f8, 0xbf69, 0x17f9, 0x0d33, 0x06dd, 0x1990, 0xa9a2, 0x3666, 0x1d0f, 0xa2cf, 0x4150, 0x4073, 0x217c, 0x1c58, 0x3267, 0x42d9, 0xb217, 0x439f, 0xbafd, 0x4054, 0x1a4c, 0x42e3, 0xbfc9, 0x2489, 0x4620, 0x00d9, 0x41c0, 0xbf90, 0xb23e, 0xb2a1, 0x27f9, 0x423a, 0x417f, 0x2922, 0xbac3, 0x1a8e, 0x1ff5, 0xb220, 0x421f, 0x4378, 0x433e, 0xa84c, 0xb081, 0x1a72, 0x4684, 0xb280, 0x1acb, 0x1d52, 0x43cb, 0x4125, 0x1b4d, 0xbf1b, 0x4190, 0x192c, 0x42fc, 0xaf1e, 0xbf3f, 0x42a6, 0x1ef6, 0x1a9b, 0xb076, 0x30ec, 0xb25b, 0x19f6, 0x29fb, 0x43f2, 0xb2b7, 0x40af, 0x438e, 0x1bbe, 0xb20b, 0x4166, 0x1a51, 0x4140, 0xb250, 0x23de, 0x4062, 0x39c9, 0xbf0d, 0x1ff7, 0xb04e, 0x4670, 0xb233, 0x40ca, 0x4280, 0x17e1, 0x4572, 0x435a, 0xb248, 0x198a, 0x427a, 0x21aa, 0x412d, 0x0d38, 0x1b5c, 0x1cda, 0x40ad, 0x081c, 0xb2ab, 0xbf98, 0x05b0, 0x157a, 0x42ad, 0x43dc, 0x09b2, 0xa299, 0x1def, 0x41dd, 0x2faa, 0x4089, 0x4161, 0x40eb, 0x400d, 0x42e7, 0xbf70, 0x408f, 0x439c, 0x11bc, 0x40c6, 0x1277, 0x2045, 0x426e, 0x420f, 0xbf70, 0xba1a, 0xbfc4, 0x088e, 0x4437, 0x19aa, 0xb095, 0xba24, 0x1d2b, 0x19d9, 0xb200, 0xb26c, 0xbac0, 0x42c3, 0xbf19, 0x3ab5, 0x185a, 0x1e03, 0x42bd, 0xb040, 0x456d, 0x0e83, 0x4244, 0x4001, 0xb257, 0xb255, 0x4016, 0x21f4, 0x134a, 0x1c09, 0xb2eb, 0xb2d5, 0x103c, 0x412f, 0xb2f8, 0x4645, 0x41ca, 0xbad7, 0x3c4c, 0x43f2, 0x4469, 0xbf7f, 0xb096, 0x404c, 0xb20e, 0x408f, 0xb293, 0x44f4, 0xb2ac, 0x4300, 0xb0d5, 0xb044, 0xb298, 0x401d, 0x40a5, 0x0257, 0xb2bd, 0x427d, 0x42d6, 0x432a, 0x41e0, 0xbf48, 0x3377, 0xb282, 0xabfc, 0xb0a9, 0xb2cf, 0x1ba6, 0x45c8, 0x4080, 0x1e90, 0xb0f0, 0x462e, 0xb229, 0x02cf, 0x41ba, 0x41b8, 0x4210, 0x3f35, 0x398c, 0xba39, 0x413b, 0xbf64, 0x21a7, 0x40b8, 0x0509, 0x4388, 0x20cc, 0xba62, 0x41b9, 0x1efd, 0x41c7, 0x413e, 0x40a3, 0x4136, 0x1b72, 0x4366, 0xba01, 0xb2e0, 0x428b, 0x438e, 0xa279, 0x43d2, 0x1b4e, 0x43ac, 0xbf99, 0x0ff8, 0x36ad, 0x46c3, 0x43e4, 0x42ae, 0xba6e, 0x368c, 0x12b7, 0x43cf, 0x405e, 0x1e52, 0xb28e, 0x0282, 0x280c, 0x4294, 0x2cf6, 0xbfd8, 0x418c, 0xa006, 0x4179, 0xb2b4, 0x415d, 0x0cba, 0x1502, 0x46da, 0x43cf, 0x42bd, 0x411a, 0x4037, 0x4265, 0x4268, 0xbfa9, 0xa149, 0x1de5, 0xb2d1, 0x416a, 0xb0af, 0x4390, 0x4302, 0xbf37, 0x36bf, 0x40ef, 0xaa8e, 0x1731, 0x2537, 0xaa7a, 0x439d, 0xbfdd, 0x416c, 0xb271, 0xb0a0, 0xb0cb, 0x462a, 0xa0ff, 0xaf7c, 0x4338, 0x41c6, 0x40e4, 0x430f, 0xbfae, 0x24ea, 0x41d3, 0x1baf, 0xbf0a, 0xb2b5, 0x415b, 0x4574, 0x42dd, 0x1886, 0xb298, 0x40e3, 0x23f6, 0x43b1, 0x4179, 0x421d, 0x00f3, 0x44fb, 0x43f2, 0xb2da, 0xbf43, 0x329d, 0x40df, 0x41f5, 0x43a4, 0x410f, 0xb070, 0x40c3, 0x0290, 0xba76, 0x40c0, 0x03b8, 0x449a, 0x1b97, 0x0f78, 0x419b, 0x422e, 0x179f, 0x4123, 0xa591, 0x1e2b, 0x1fda, 0x24bb, 0x412f, 0x4204, 0x4331, 0x40cc, 0x3aa9, 0xbfd7, 0x443b, 0x43ac, 0x130f, 0x4328, 0x2575, 0xba56, 0xb246, 0xa7fe, 0x46ac, 0x3801, 0x43dd, 0xba2b, 0x39e7, 0x0bd0, 0x42b3, 0x4038, 0x41f9, 0x4393, 0x4102, 0xb203, 0xb2f8, 0xa22e, 0xa526, 0xb08e, 0x2e59, 0x2b55, 0xb25f, 0x4663, 0xbf3e, 0x4005, 0x43c8, 0xb034, 0x3d71, 0x3d1d, 0xb258, 0x4322, 0x43a8, 0x4052, 0x2a11, 0x434d, 0xba44, 0xb283, 0x0014, 0x18b3, 0xbf85, 0x4236, 0x370f, 0xa4a4, 0x4081, 0xbfae, 0x3107, 0x4246, 0x4159, 0x40f4, 0xb262, 0x1bd6, 0xb275, 0x41ea, 0xbf8e, 0x40f6, 0x4004, 0xba73, 0xbf01, 0x42a3, 0x419b, 0x418a, 0x4309, 0x4300, 0x4053, 0xa24b, 0x43b2, 0x4105, 0x417a, 0x42ee, 0x3a99, 0x41b6, 0x1c97, 0x43e8, 0xbf95, 0x421b, 0xb22f, 0x468c, 0xba30, 0x171d, 0x42e5, 0x4283, 0xbf78, 0x1e0f, 0xb02e, 0x3bce, 0x46f2, 0xbaeb, 0x1a73, 0x1d12, 0xba2a, 0xa2cb, 0xb23a, 0x42a8, 0xa26b, 0x3c45, 0x0a4d, 0x1ce2, 0x1a89, 0xbfa3, 0x462f, 0x45f1, 0x0ccd, 0x19fc, 0x4432, 0xba68, 0x402c, 0x43bd, 0x4106, 0x2d24, 0x08ae, 0x41ee, 0x4395, 0x438a, 0x410d, 0x414e, 0x40c1, 0x41f5, 0xbae6, 0x2a67, 0x0307, 0x1b7c, 0x42fa, 0xba7a, 0x40e7, 0xbad0, 0xb218, 0x4551, 0xbfbc, 0xbfc0, 0x44e1, 0x19e1, 0xb2fc, 0x423b, 0xbf07, 0xb295, 0xb295, 0x4409, 0x42c5, 0xb285, 0x3d52, 0xbf66, 0xbf70, 0x4244, 0xba58, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x35dcd53f, 0x329b21b1, 0x5b679e3c, 0x95697b24, 0xded610ce, 0x5fb2bf66, 0xe3f3845c, 0xe4e7d67e, 0xb27d6955, 0x52a7f817, 0xf1c67637, 0xa8f2cd39, 0x50a9900e, 0xbf067896, 0x00000000, 0xb00001f0 }, - FinalRegs = new uint[] { 0xe8fef8ea, 0x08800000, 0x20020000, 0xfee8eaf8, 0x00000000, 0x0000eaa6, 0x00000000, 0x02200000, 0x0525616d, 0x52a7f817, 0x00000000, 0x052577df, 0x01171508, 0x00011300, 0x00000000, 0x200001d0 }, + Instructions = [0x1e54, 0x40d8, 0x2f66, 0x276c, 0x416f, 0x1987, 0xb06a, 0x45ec, 0xba67, 0x408a, 0xba2f, 0xacd5, 0x29cf, 0x1872, 0x111e, 0x1b04, 0xbafd, 0x41a5, 0xbf97, 0x43df, 0xb06f, 0x1c82, 0x268b, 0xb2ba, 0xb08a, 0x407f, 0xbaea, 0x1d52, 0x06cb, 0x41e7, 0x4475, 0x43b8, 0xba6b, 0x1fb1, 0xbf3e, 0x4241, 0x3d38, 0x4120, 0x2a6b, 0xb217, 0xbfb8, 0x1f4e, 0xb218, 0xb2cc, 0x1ad6, 0x4128, 0x169b, 0xaa87, 0xaf67, 0xb2aa, 0xbfc0, 0xb0e8, 0x33a9, 0x43fb, 0x195b, 0x4091, 0x3613, 0x00c8, 0xbf09, 0xbff0, 0x0ab2, 0x4211, 0xbadc, 0x4100, 0xba4d, 0x0f34, 0xba3f, 0xb250, 0x1425, 0x1ad6, 0x1f20, 0xb0e6, 0xae48, 0x41f4, 0x4117, 0xb0d0, 0xba25, 0xb2f9, 0xba7d, 0x4063, 0x1e53, 0x40ef, 0x401c, 0x1b23, 0x059d, 0x4021, 0x4126, 0xbf0c, 0x3318, 0x4087, 0x4135, 0x430e, 0xbf69, 0x18c0, 0xb285, 0x4164, 0xbf90, 0x40e9, 0x43bf, 0xba12, 0x2a34, 0x4009, 0x4593, 0xbf06, 0x07c3, 0xb295, 0x369a, 0x41f4, 0x434a, 0xb01e, 0x42a5, 0x0343, 0x2ad7, 0x1be0, 0xbfce, 0x1bdd, 0x4484, 0x439c, 0x461b, 0x10f4, 0x2207, 0x0503, 0x40ab, 0xbf60, 0x4108, 0x4271, 0x1c07, 0x40d7, 0x1820, 0x01a5, 0x3519, 0xb283, 0xb0c1, 0xb28f, 0xb241, 0x238f, 0x43da, 0x2f61, 0xbfb2, 0xa2bd, 0xbae8, 0x410c, 0x46e2, 0xb012, 0x1e36, 0xb236, 0x45ba, 0xb23b, 0x2e93, 0x4369, 0x18a6, 0xb257, 0x4340, 0xba50, 0x4240, 0x4181, 0x1a86, 0xba64, 0x0cb1, 0x4065, 0xb21a, 0x1b54, 0xbf70, 0x462e, 0xb236, 0x01af, 0x41c3, 0xbf89, 0x4324, 0x4357, 0x41ae, 0x4654, 0x408c, 0x1c4d, 0x43ca, 0x405e, 0x19cc, 0x429b, 0xb026, 0x4337, 0x404b, 0x1c2f, 0xba75, 0x42f1, 0x1e97, 0xb27f, 0x425d, 0x049c, 0xb2e2, 0x1385, 0xb270, 0x1eb3, 0xa556, 0xbade, 0x4064, 0x22e3, 0xbfd1, 0x1cf0, 0x0f0c, 0x4266, 0xb0e2, 0x02c3, 0xb092, 0x1212, 0x3b16, 0x4349, 0x458d, 0x317f, 0x4263, 0x19ee, 0x3fde, 0x085c, 0x0f9e, 0x21c4, 0x41e8, 0xb27f, 0x1ae4, 0x425c, 0x2207, 0x43b9, 0xba3e, 0xb24a, 0xbfcc, 0x40b9, 0x40df, 0x4026, 0x415a, 0xb2db, 0x41e2, 0xbae2, 0x410a, 0x420e, 0xbfa5, 0x43d6, 0xb237, 0x40a9, 0x407f, 0x4075, 0xb23b, 0x1dbb, 0x4021, 0x16c5, 0x430d, 0xb258, 0x1fee, 0x44a5, 0xb03f, 0x4367, 0x43e4, 0x435a, 0x37aa, 0x1bd9, 0xbf08, 0x4143, 0xaea3, 0x2a14, 0x41ef, 0xb076, 0x1e69, 0x4644, 0x1971, 0x2fe4, 0x0aef, 0x3651, 0x43e0, 0x4171, 0x1c89, 0x417b, 0x4354, 0x43fa, 0x418d, 0x411b, 0x425a, 0xbf3a, 0x42b3, 0xa73a, 0x4396, 0xbfc0, 0xb258, 0x429c, 0x44c8, 0x4195, 0xba65, 0x46ed, 0xb0ec, 0x18f8, 0x43b9, 0xb246, 0x4306, 0x465f, 0xb2d4, 0xbf7e, 0x37f6, 0x4173, 0x4685, 0x0536, 0x3e40, 0x0691, 0x2372, 0xbf2e, 0xb213, 0xba2c, 0x1c23, 0x41e6, 0x30e0, 0x4062, 0x4030, 0xb229, 0x43d9, 0x2e16, 0x25b3, 0xb2ae, 0x439f, 0x18bb, 0x16b6, 0x4048, 0x4418, 0x42f7, 0xa615, 0xb008, 0xb2d6, 0x1958, 0x1b00, 0xb0d0, 0x4281, 0xb225, 0xab07, 0xbf82, 0x4276, 0x2565, 0x4156, 0x43eb, 0xb2fe, 0xba25, 0x4143, 0x435c, 0x41cf, 0x428c, 0xb2b4, 0x1772, 0x4398, 0x1b8d, 0xb016, 0x435d, 0xba5c, 0xbf63, 0xba66, 0x4100, 0xba5f, 0x43ac, 0xbfb1, 0x41c5, 0x3555, 0x3b44, 0x4305, 0x3e89, 0xba59, 0x1f34, 0x1828, 0x3d4b, 0xa344, 0xb2c2, 0x3ca8, 0x42ea, 0xbf88, 0x4250, 0xb2ac, 0x43fd, 0xb02a, 0x30bb, 0x0fba, 0x43b6, 0x4336, 0x432b, 0xb256, 0x432f, 0xb0bf, 0x4353, 0x4069, 0x095a, 0xa6cb, 0xbf47, 0x3074, 0x165b, 0x1fe4, 0x2ed8, 0xb272, 0x43d0, 0x43a8, 0x2770, 0xb05c, 0x4279, 0x4055, 0xbfd0, 0xbf84, 0x41aa, 0x43ec, 0x1daf, 0x4663, 0x40c5, 0x34e8, 0x447f, 0xa971, 0x145d, 0x00c3, 0x4281, 0x4392, 0xba2d, 0x3677, 0x42eb, 0x42d3, 0x28df, 0xb2c4, 0x4004, 0xa6ed, 0x40fb, 0x1947, 0xbf33, 0xbaee, 0x446b, 0x40b7, 0x402b, 0x460f, 0x1ef9, 0x4130, 0x28f6, 0xad23, 0x4042, 0x2583, 0x45b5, 0x41c8, 0x462e, 0x19f1, 0x4008, 0x4144, 0x421d, 0x4305, 0xba2b, 0x4103, 0xb2fd, 0xb239, 0x4365, 0xbf9a, 0xb219, 0x4461, 0x41a7, 0x43ac, 0xb2a4, 0x416a, 0xbfe0, 0xb09b, 0x4214, 0xae01, 0x2c45, 0x0c53, 0x4107, 0x43b4, 0x4005, 0xb22f, 0x1966, 0xbf60, 0x182c, 0x4011, 0x430e, 0x4291, 0x34de, 0xbfcc, 0xabcf, 0x4255, 0xba1e, 0xba3b, 0x4556, 0x0971, 0x1926, 0xb2ff, 0xaffe, 0x0c75, 0x401a, 0xbf69, 0x4026, 0x402a, 0x4406, 0x4213, 0xba16, 0x41da, 0x43f0, 0x41d3, 0x4312, 0x4228, 0x43fb, 0x44a8, 0x413c, 0x1e14, 0x1924, 0x435d, 0x409c, 0xb27c, 0x4113, 0x405c, 0x4180, 0xba02, 0x42c0, 0xba36, 0x4197, 0x4359, 0x319f, 0xbf82, 0x4092, 0x1fec, 0x1ee0, 0x43fa, 0x4170, 0x45b4, 0x1e51, 0x4109, 0x40e2, 0x2867, 0x30ff, 0x41f8, 0xbf69, 0x17f9, 0x0d33, 0x06dd, 0x1990, 0xa9a2, 0x3666, 0x1d0f, 0xa2cf, 0x4150, 0x4073, 0x217c, 0x1c58, 0x3267, 0x42d9, 0xb217, 0x439f, 0xbafd, 0x4054, 0x1a4c, 0x42e3, 0xbfc9, 0x2489, 0x4620, 0x00d9, 0x41c0, 0xbf90, 0xb23e, 0xb2a1, 0x27f9, 0x423a, 0x417f, 0x2922, 0xbac3, 0x1a8e, 0x1ff5, 0xb220, 0x421f, 0x4378, 0x433e, 0xa84c, 0xb081, 0x1a72, 0x4684, 0xb280, 0x1acb, 0x1d52, 0x43cb, 0x4125, 0x1b4d, 0xbf1b, 0x4190, 0x192c, 0x42fc, 0xaf1e, 0xbf3f, 0x42a6, 0x1ef6, 0x1a9b, 0xb076, 0x30ec, 0xb25b, 0x19f6, 0x29fb, 0x43f2, 0xb2b7, 0x40af, 0x438e, 0x1bbe, 0xb20b, 0x4166, 0x1a51, 0x4140, 0xb250, 0x23de, 0x4062, 0x39c9, 0xbf0d, 0x1ff7, 0xb04e, 0x4670, 0xb233, 0x40ca, 0x4280, 0x17e1, 0x4572, 0x435a, 0xb248, 0x198a, 0x427a, 0x21aa, 0x412d, 0x0d38, 0x1b5c, 0x1cda, 0x40ad, 0x081c, 0xb2ab, 0xbf98, 0x05b0, 0x157a, 0x42ad, 0x43dc, 0x09b2, 0xa299, 0x1def, 0x41dd, 0x2faa, 0x4089, 0x4161, 0x40eb, 0x400d, 0x42e7, 0xbf70, 0x408f, 0x439c, 0x11bc, 0x40c6, 0x1277, 0x2045, 0x426e, 0x420f, 0xbf70, 0xba1a, 0xbfc4, 0x088e, 0x4437, 0x19aa, 0xb095, 0xba24, 0x1d2b, 0x19d9, 0xb200, 0xb26c, 0xbac0, 0x42c3, 0xbf19, 0x3ab5, 0x185a, 0x1e03, 0x42bd, 0xb040, 0x456d, 0x0e83, 0x4244, 0x4001, 0xb257, 0xb255, 0x4016, 0x21f4, 0x134a, 0x1c09, 0xb2eb, 0xb2d5, 0x103c, 0x412f, 0xb2f8, 0x4645, 0x41ca, 0xbad7, 0x3c4c, 0x43f2, 0x4469, 0xbf7f, 0xb096, 0x404c, 0xb20e, 0x408f, 0xb293, 0x44f4, 0xb2ac, 0x4300, 0xb0d5, 0xb044, 0xb298, 0x401d, 0x40a5, 0x0257, 0xb2bd, 0x427d, 0x42d6, 0x432a, 0x41e0, 0xbf48, 0x3377, 0xb282, 0xabfc, 0xb0a9, 0xb2cf, 0x1ba6, 0x45c8, 0x4080, 0x1e90, 0xb0f0, 0x462e, 0xb229, 0x02cf, 0x41ba, 0x41b8, 0x4210, 0x3f35, 0x398c, 0xba39, 0x413b, 0xbf64, 0x21a7, 0x40b8, 0x0509, 0x4388, 0x20cc, 0xba62, 0x41b9, 0x1efd, 0x41c7, 0x413e, 0x40a3, 0x4136, 0x1b72, 0x4366, 0xba01, 0xb2e0, 0x428b, 0x438e, 0xa279, 0x43d2, 0x1b4e, 0x43ac, 0xbf99, 0x0ff8, 0x36ad, 0x46c3, 0x43e4, 0x42ae, 0xba6e, 0x368c, 0x12b7, 0x43cf, 0x405e, 0x1e52, 0xb28e, 0x0282, 0x280c, 0x4294, 0x2cf6, 0xbfd8, 0x418c, 0xa006, 0x4179, 0xb2b4, 0x415d, 0x0cba, 0x1502, 0x46da, 0x43cf, 0x42bd, 0x411a, 0x4037, 0x4265, 0x4268, 0xbfa9, 0xa149, 0x1de5, 0xb2d1, 0x416a, 0xb0af, 0x4390, 0x4302, 0xbf37, 0x36bf, 0x40ef, 0xaa8e, 0x1731, 0x2537, 0xaa7a, 0x439d, 0xbfdd, 0x416c, 0xb271, 0xb0a0, 0xb0cb, 0x462a, 0xa0ff, 0xaf7c, 0x4338, 0x41c6, 0x40e4, 0x430f, 0xbfae, 0x24ea, 0x41d3, 0x1baf, 0xbf0a, 0xb2b5, 0x415b, 0x4574, 0x42dd, 0x1886, 0xb298, 0x40e3, 0x23f6, 0x43b1, 0x4179, 0x421d, 0x00f3, 0x44fb, 0x43f2, 0xb2da, 0xbf43, 0x329d, 0x40df, 0x41f5, 0x43a4, 0x410f, 0xb070, 0x40c3, 0x0290, 0xba76, 0x40c0, 0x03b8, 0x449a, 0x1b97, 0x0f78, 0x419b, 0x422e, 0x179f, 0x4123, 0xa591, 0x1e2b, 0x1fda, 0x24bb, 0x412f, 0x4204, 0x4331, 0x40cc, 0x3aa9, 0xbfd7, 0x443b, 0x43ac, 0x130f, 0x4328, 0x2575, 0xba56, 0xb246, 0xa7fe, 0x46ac, 0x3801, 0x43dd, 0xba2b, 0x39e7, 0x0bd0, 0x42b3, 0x4038, 0x41f9, 0x4393, 0x4102, 0xb203, 0xb2f8, 0xa22e, 0xa526, 0xb08e, 0x2e59, 0x2b55, 0xb25f, 0x4663, 0xbf3e, 0x4005, 0x43c8, 0xb034, 0x3d71, 0x3d1d, 0xb258, 0x4322, 0x43a8, 0x4052, 0x2a11, 0x434d, 0xba44, 0xb283, 0x0014, 0x18b3, 0xbf85, 0x4236, 0x370f, 0xa4a4, 0x4081, 0xbfae, 0x3107, 0x4246, 0x4159, 0x40f4, 0xb262, 0x1bd6, 0xb275, 0x41ea, 0xbf8e, 0x40f6, 0x4004, 0xba73, 0xbf01, 0x42a3, 0x419b, 0x418a, 0x4309, 0x4300, 0x4053, 0xa24b, 0x43b2, 0x4105, 0x417a, 0x42ee, 0x3a99, 0x41b6, 0x1c97, 0x43e8, 0xbf95, 0x421b, 0xb22f, 0x468c, 0xba30, 0x171d, 0x42e5, 0x4283, 0xbf78, 0x1e0f, 0xb02e, 0x3bce, 0x46f2, 0xbaeb, 0x1a73, 0x1d12, 0xba2a, 0xa2cb, 0xb23a, 0x42a8, 0xa26b, 0x3c45, 0x0a4d, 0x1ce2, 0x1a89, 0xbfa3, 0x462f, 0x45f1, 0x0ccd, 0x19fc, 0x4432, 0xba68, 0x402c, 0x43bd, 0x4106, 0x2d24, 0x08ae, 0x41ee, 0x4395, 0x438a, 0x410d, 0x414e, 0x40c1, 0x41f5, 0xbae6, 0x2a67, 0x0307, 0x1b7c, 0x42fa, 0xba7a, 0x40e7, 0xbad0, 0xb218, 0x4551, 0xbfbc, 0xbfc0, 0x44e1, 0x19e1, 0xb2fc, 0x423b, 0xbf07, 0xb295, 0xb295, 0x4409, 0x42c5, 0xb285, 0x3d52, 0xbf66, 0xbf70, 0x4244, 0xba58, 0x4770, 0xe7fe + ], + StartRegs = [0x35dcd53f, 0x329b21b1, 0x5b679e3c, 0x95697b24, 0xded610ce, 0x5fb2bf66, 0xe3f3845c, 0xe4e7d67e, 0xb27d6955, 0x52a7f817, 0xf1c67637, 0xa8f2cd39, 0x50a9900e, 0xbf067896, 0x00000000, 0xb00001f0 + ], + FinalRegs = [0xe8fef8ea, 0x08800000, 0x20020000, 0xfee8eaf8, 0x00000000, 0x0000eaa6, 0x00000000, 0x02200000, 0x0525616d, 0x52a7f817, 0x00000000, 0x052577df, 0x01171508, 0x00011300, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x2155, 0x1e10, 0x3dda, 0xa4a1, 0x40e5, 0xba3b, 0x40e6, 0x1cbe, 0xbf21, 0x3982, 0x403a, 0x3b83, 0x40d0, 0x1dbd, 0x4633, 0xbf27, 0x40fa, 0x4217, 0xba03, 0xa0e8, 0x4051, 0x43d7, 0xb2ad, 0xb23a, 0x4456, 0x40ca, 0xb28a, 0x4598, 0x414f, 0x183b, 0xbf47, 0xb04c, 0x2d55, 0xb200, 0x410d, 0x423c, 0x427c, 0x43e2, 0xbf75, 0x438e, 0x420c, 0xb040, 0x431f, 0xaaec, 0x1ea1, 0x4219, 0x0e67, 0x4107, 0x258a, 0x4363, 0x4209, 0xbfa0, 0x4244, 0x1fed, 0x082e, 0xa5ef, 0xba10, 0xb215, 0xbf60, 0xbadd, 0x441f, 0x4360, 0x4416, 0x0ced, 0x4396, 0xb2a5, 0xbfbd, 0x020b, 0x10f7, 0x40bc, 0x43fa, 0xba04, 0xb203, 0x424b, 0x3ef2, 0xb21f, 0xb2db, 0x18b7, 0x41eb, 0x32b6, 0x4415, 0x405d, 0x19be, 0x124d, 0xb067, 0x4048, 0xbf7e, 0x4163, 0x4494, 0x2c27, 0x41a4, 0x4094, 0x417b, 0xbadb, 0xb221, 0xac56, 0x4045, 0xbf00, 0xbf9e, 0xb02c, 0x1467, 0xa9eb, 0xb28c, 0x42f0, 0x42f1, 0x2b99, 0x10b3, 0x4181, 0x4565, 0x16bf, 0xbaf0, 0x3ce0, 0x0fdb, 0x182c, 0x4008, 0xb253, 0x405c, 0x4291, 0x427d, 0x1b26, 0x4275, 0x424d, 0x400e, 0xbf97, 0x24cc, 0xb0ac, 0x00e5, 0x4646, 0x2dad, 0xbfd5, 0x416b, 0x43dc, 0x15af, 0x405f, 0x42ae, 0xaffc, 0x435c, 0x407e, 0x25a2, 0xb0a1, 0x26af, 0x4440, 0x2f9f, 0x0c00, 0x44e2, 0x4079, 0x0965, 0xb21f, 0x43b0, 0x081f, 0x441c, 0xbf5c, 0x4350, 0x1b32, 0x41d9, 0x46d8, 0xba76, 0x42cf, 0x426e, 0x438e, 0x0cf5, 0xb00b, 0x414f, 0xba7f, 0x2ea0, 0x4601, 0x43de, 0x2e67, 0x0090, 0xb095, 0x43b4, 0x1edf, 0x4695, 0xb264, 0x0acf, 0xbf11, 0x42f8, 0xa71c, 0x42c7, 0xb29e, 0xb223, 0x08a7, 0x4425, 0x40c5, 0x4342, 0x466f, 0x1e7a, 0x425e, 0xba7c, 0xbaef, 0x4195, 0x40f0, 0x4105, 0x182a, 0xb249, 0x01b6, 0x43db, 0x33cd, 0xb098, 0x22ef, 0x4670, 0x1c06, 0x4143, 0xb2ad, 0xbfdd, 0x44ea, 0xba3e, 0x43d7, 0xb251, 0xba39, 0xba0d, 0x40bf, 0x46a2, 0x20a1, 0x41ab, 0x3578, 0xafc6, 0x19e4, 0x4127, 0xb06d, 0xacfe, 0x1d9e, 0xbf31, 0x43da, 0x0408, 0x42e6, 0xb2ca, 0x400e, 0xa0f7, 0x42c4, 0xb24e, 0x401f, 0xb220, 0x4494, 0x4410, 0xbf15, 0x417b, 0x42eb, 0x151d, 0x4295, 0x4188, 0xbae2, 0x40d5, 0x40c3, 0x1d6c, 0xa78d, 0x4059, 0x46ad, 0x1903, 0x1b14, 0x407f, 0xb249, 0x43cf, 0x415f, 0x4423, 0x410e, 0xba10, 0x0aac, 0x40ae, 0xa148, 0x0bda, 0xbfb6, 0x4161, 0xb0c0, 0xb2b3, 0xacde, 0x43b8, 0x40c4, 0xb2b5, 0x4476, 0x41cf, 0x4245, 0xbf2a, 0x1c2a, 0x34fe, 0x089d, 0x1943, 0xa5a5, 0x4611, 0x4013, 0x305a, 0x1a16, 0x43f1, 0x4118, 0xb2a5, 0x44a3, 0x1aa6, 0x4055, 0x412d, 0xb2c1, 0x43cf, 0x0ae2, 0xbf28, 0x4299, 0x42ac, 0xb203, 0xa899, 0x4160, 0xbf56, 0xbafe, 0x40d0, 0xb2ea, 0xb2b1, 0x1f3a, 0x1cf9, 0x43fd, 0xbf76, 0xba48, 0xbaca, 0xb2d1, 0x4268, 0x43a9, 0x465a, 0x1f70, 0xb0a5, 0xb021, 0x4016, 0xae2f, 0x4012, 0x3ad1, 0x402f, 0x3c2d, 0x425e, 0x40a7, 0xba78, 0xbf2f, 0x226a, 0x44a0, 0x417a, 0x040e, 0x0659, 0xb288, 0x41b4, 0xba78, 0x0a09, 0x4165, 0x2bfb, 0xbf05, 0x4222, 0x1bfa, 0xa40a, 0x43ab, 0x41db, 0x43e3, 0x419f, 0x4694, 0x43d0, 0x35e8, 0x1f83, 0x4116, 0x4206, 0xac92, 0x4034, 0x220e, 0x413e, 0xad23, 0x4116, 0x4430, 0xbf60, 0x0e3f, 0x1c57, 0xac22, 0x3c5b, 0xb208, 0x098b, 0xbf0c, 0x42db, 0x3b41, 0x435e, 0x4302, 0xbf19, 0x3fc7, 0x4222, 0xbac3, 0x1528, 0x427e, 0x428a, 0xb2ce, 0xb09d, 0x41f4, 0x435c, 0xba54, 0xbf3f, 0x2dc4, 0x1526, 0x4335, 0xba05, 0xbf5f, 0xb252, 0x4431, 0x2474, 0x4260, 0x4278, 0x41eb, 0x43f7, 0x41bc, 0x4274, 0x2a23, 0x1ea8, 0xb024, 0x163b, 0x4365, 0x3c89, 0x424f, 0xba1c, 0x43d1, 0x42ac, 0xbac7, 0x405a, 0xb2d1, 0x1d69, 0xb2a2, 0x41bf, 0x412b, 0x42f5, 0x141d, 0xbf5b, 0x43f7, 0x0b65, 0x4124, 0xbacc, 0x414a, 0x39dc, 0x4290, 0x160f, 0xb2c6, 0x46b2, 0x43b8, 0xbf90, 0x417c, 0x41ea, 0x4280, 0x438c, 0x40b9, 0x1fc0, 0x0291, 0x46e2, 0x432a, 0x4206, 0x2149, 0x06e2, 0xb218, 0xba0d, 0x3fc3, 0xbf68, 0x46c8, 0x4166, 0x437d, 0x41a0, 0xb00f, 0x26f5, 0x42b6, 0x466c, 0xaf14, 0xba28, 0x0364, 0x0f78, 0xa3a4, 0xbf6e, 0x4572, 0xb2fe, 0xb046, 0x413c, 0xbaf3, 0x4370, 0x4005, 0x2268, 0x42af, 0x4278, 0x4089, 0x439f, 0xbfd6, 0xaed2, 0x4305, 0xb2e2, 0xb2f6, 0xbf18, 0x42a3, 0x1ee9, 0x41bc, 0x1d48, 0x4313, 0xa6e2, 0x407a, 0xb09e, 0x459c, 0xb24b, 0xb015, 0xaa03, 0x18b9, 0xacea, 0x1e86, 0x4169, 0xbfc8, 0x1f6a, 0x4396, 0x347f, 0x182d, 0x3184, 0xba54, 0x221f, 0x40d0, 0x337e, 0x4272, 0x40c0, 0xb0de, 0x430d, 0x4105, 0x315e, 0x11cc, 0xbf90, 0x228a, 0x4273, 0xbada, 0x006d, 0xbf2a, 0x4334, 0x18c8, 0xb2d9, 0x1cf8, 0xba7c, 0xbaef, 0x4461, 0x2973, 0x2d26, 0x4042, 0xaba4, 0x4186, 0xb05c, 0xbfd4, 0x4254, 0x1e78, 0x4643, 0xb29a, 0x427a, 0x4370, 0x1f71, 0x419a, 0xa4c1, 0x07c9, 0xbf80, 0x3f05, 0x405f, 0x3150, 0xbf37, 0x40ce, 0xba27, 0xb2a0, 0x2398, 0xbfca, 0x43e4, 0xaa17, 0xba74, 0xb0d6, 0xb08f, 0x42c9, 0x42cd, 0xb224, 0x1ccf, 0xafbc, 0x4060, 0xb0f5, 0x423d, 0x43c4, 0xb2fc, 0xbac2, 0x4017, 0xb265, 0x431a, 0xbfca, 0x43a8, 0x415f, 0x40ff, 0xb0d7, 0xbae4, 0x1b93, 0xb2e9, 0x1a43, 0x28ac, 0x427c, 0xb215, 0x4017, 0xbf3d, 0xb2d0, 0x42be, 0x1d8f, 0x447c, 0x40ec, 0xba4e, 0x1910, 0xb041, 0x1fdd, 0x41b7, 0x40c9, 0x42c8, 0xbf60, 0x404f, 0xb27d, 0x4661, 0x4399, 0x43eb, 0xb20a, 0x460b, 0x1c22, 0xb26f, 0xbae0, 0xbff0, 0x421f, 0x1f27, 0x4264, 0x4290, 0xbf93, 0xb2a4, 0xb2a7, 0xbaff, 0xad42, 0x4391, 0xba27, 0x40f4, 0xbfd6, 0x42f8, 0x429f, 0x03c8, 0x40c6, 0x32d1, 0x40c8, 0xaf82, 0x02cf, 0x046b, 0x4285, 0x4291, 0xba45, 0xbadd, 0x40f2, 0x33e6, 0xba09, 0xba1e, 0x4607, 0x45d9, 0x4453, 0xb00d, 0x4222, 0x40b0, 0xbf19, 0xb20c, 0x1ab7, 0x41dc, 0x439e, 0x4221, 0x1f89, 0x400c, 0xb288, 0x42f2, 0x4543, 0x3d97, 0x43e3, 0xba58, 0xaa3d, 0x42d0, 0x1870, 0x26b1, 0xbfab, 0x4112, 0x42d9, 0x467c, 0x4052, 0x4631, 0xb286, 0xbf5e, 0x43c5, 0x44d0, 0x2fb1, 0x43b3, 0xb2ea, 0x1d46, 0x4076, 0x415a, 0x3bbe, 0xbf03, 0x0812, 0x2d4f, 0x1f62, 0x4322, 0x0a58, 0x40e4, 0x1fcd, 0xba52, 0x15b6, 0x43b0, 0x43a0, 0x400a, 0x4303, 0x4297, 0x40e7, 0xb0cf, 0x43e8, 0x15c1, 0x4134, 0x4248, 0x4576, 0x0870, 0x01c4, 0xbf63, 0xbac5, 0x42cd, 0x437d, 0x43e7, 0xb261, 0x42e2, 0xbf18, 0xbac0, 0x4037, 0x40d0, 0x1c84, 0x4149, 0xbf80, 0xb2c6, 0xbfe0, 0x30f1, 0xa467, 0x2e0e, 0xbf6b, 0x46e2, 0x4216, 0x43df, 0x1ab8, 0xbf23, 0x46d3, 0xba71, 0xb208, 0x099f, 0xbf60, 0xba1f, 0x40a5, 0x42d4, 0x21cb, 0x1ffd, 0x40c9, 0x42dc, 0x15f1, 0x279d, 0x2437, 0x0cea, 0xbfdd, 0xbae4, 0x438b, 0x4378, 0x463c, 0x0a74, 0x4005, 0xba1e, 0x41d7, 0x4481, 0x4274, 0x45da, 0xbf46, 0xb0e9, 0x3f19, 0x1bb1, 0x4581, 0x42ce, 0xb2df, 0xba6f, 0xb22f, 0x343f, 0x40d8, 0xae4d, 0x4225, 0x404d, 0x3748, 0x4641, 0x1924, 0xba34, 0xbf27, 0x42ba, 0x1e38, 0x40c4, 0x1e29, 0xbfb8, 0xa804, 0xbaf2, 0xbaec, 0x411a, 0x42e3, 0x402b, 0x404a, 0x4654, 0x403c, 0x229e, 0x4343, 0x4278, 0x420e, 0x414e, 0x1b28, 0x1ec8, 0x4137, 0xbf74, 0x4132, 0x40db, 0xba2b, 0x424e, 0x400f, 0x4342, 0xa268, 0x45cc, 0x41a1, 0xb210, 0x1e13, 0xba32, 0x405f, 0x4070, 0x40a8, 0x4495, 0xaf59, 0x1a8a, 0x4335, 0x1aaf, 0xa0de, 0x4557, 0x429b, 0xbf2b, 0x1a1f, 0xb24a, 0x20ba, 0x4026, 0x4426, 0x415d, 0xba49, 0x1a0f, 0xa6ba, 0x408e, 0xba37, 0xb067, 0xa1be, 0x43f0, 0xb26f, 0x06e2, 0x4101, 0x424b, 0xb004, 0x17fe, 0x417d, 0x4053, 0x133e, 0xbfa1, 0xa51b, 0xaf80, 0x43e6, 0x4031, 0x0893, 0x42a2, 0x113a, 0xbf86, 0xb211, 0xb2e9, 0x1955, 0xb2e0, 0x4249, 0x1fee, 0x43bf, 0x1f72, 0xb29c, 0x41ce, 0x1c6c, 0x1ac1, 0x4216, 0x4309, 0xbf90, 0x4176, 0x4114, 0x0c13, 0xb22a, 0x10be, 0x4293, 0x1255, 0x40dd, 0x1f80, 0xba69, 0xb298, 0x430c, 0x3114, 0xbfc2, 0x4209, 0x4682, 0x4160, 0x461f, 0x4003, 0x4104, 0x27e8, 0xb27f, 0x13b2, 0x4034, 0x061d, 0xb093, 0x30b2, 0x4252, 0xa0b3, 0xa03e, 0x4489, 0x4458, 0xbad3, 0xbf2e, 0x4301, 0x401f, 0x40ed, 0xba6c, 0x41bf, 0xb017, 0xbf5b, 0x4549, 0x4316, 0xb2ac, 0x2a29, 0x19a6, 0x437d, 0xaba0, 0x3226, 0xa26e, 0x1bde, 0x4143, 0x40a4, 0x46ac, 0x420e, 0x43d6, 0x40d2, 0x40e5, 0x059e, 0x41eb, 0xbfb2, 0xaf76, 0x4194, 0x425c, 0x3ca9, 0xbafa, 0x1cd4, 0x40b9, 0xb29b, 0x439a, 0x3586, 0xb28f, 0x43a5, 0x438b, 0x45ad, 0xb200, 0xbf90, 0x387c, 0x1693, 0x40a5, 0x43c8, 0x065e, 0x37af, 0xbf55, 0x4319, 0x41ee, 0x1ee5, 0x1d3e, 0x43f1, 0x1d52, 0x462d, 0x0129, 0xbae8, 0x4613, 0x1d81, 0x2a54, 0xba46, 0x432c, 0x101c, 0xb29a, 0x42c2, 0xbfd0, 0x2520, 0x32e6, 0xba32, 0xba5a, 0x40ef, 0xbf70, 0xa438, 0xbf48, 0x42cf, 0x4220, 0x40f8, 0x0b4e, 0x434e, 0x1909, 0x417e, 0x42ee, 0xbf02, 0xbfd0, 0x157f, 0x408d, 0x42dc, 0xba68, 0xb219, 0xb075, 0xbfa5, 0x2f93, 0x1fb8, 0x40f1, 0xb240, 0xb2b3, 0x2097, 0x42f4, 0x188b, 0xb0e8, 0x4326, 0x4157, 0x2694, 0x404c, 0xbaf8, 0x431a, 0x4308, 0x2760, 0x359d, 0xb290, 0x1cc4, 0x4133, 0x1771, 0x408f, 0x4159, 0xba63, 0x4222, 0xbf7d, 0x44f8, 0x4088, 0xbad6, 0x0287, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x8f725d16, 0x8f2d1fe5, 0xd2b28a66, 0x47a47346, 0xc0b4401b, 0xf8e7fb12, 0x4ba63b76, 0xa9e6ad4c, 0xa1d2cdf2, 0x35a0c989, 0xc174909a, 0x846af94c, 0xe89071ad, 0x3db39c20, 0x00000000, 0x000001f0 }, - FinalRegs = new uint[] { 0x0000414c, 0x00000000, 0x0000414c, 0x00004f41, 0x0000414f, 0x000000bd, 0x00004c41, 0x00000060, 0x08d61086, 0x35a0d48c, 0x00000000, 0x846afcc2, 0x00000000, 0x17fffbb8, 0x00000000, 0x000001d0 }, + Instructions = [0x2155, 0x1e10, 0x3dda, 0xa4a1, 0x40e5, 0xba3b, 0x40e6, 0x1cbe, 0xbf21, 0x3982, 0x403a, 0x3b83, 0x40d0, 0x1dbd, 0x4633, 0xbf27, 0x40fa, 0x4217, 0xba03, 0xa0e8, 0x4051, 0x43d7, 0xb2ad, 0xb23a, 0x4456, 0x40ca, 0xb28a, 0x4598, 0x414f, 0x183b, 0xbf47, 0xb04c, 0x2d55, 0xb200, 0x410d, 0x423c, 0x427c, 0x43e2, 0xbf75, 0x438e, 0x420c, 0xb040, 0x431f, 0xaaec, 0x1ea1, 0x4219, 0x0e67, 0x4107, 0x258a, 0x4363, 0x4209, 0xbfa0, 0x4244, 0x1fed, 0x082e, 0xa5ef, 0xba10, 0xb215, 0xbf60, 0xbadd, 0x441f, 0x4360, 0x4416, 0x0ced, 0x4396, 0xb2a5, 0xbfbd, 0x020b, 0x10f7, 0x40bc, 0x43fa, 0xba04, 0xb203, 0x424b, 0x3ef2, 0xb21f, 0xb2db, 0x18b7, 0x41eb, 0x32b6, 0x4415, 0x405d, 0x19be, 0x124d, 0xb067, 0x4048, 0xbf7e, 0x4163, 0x4494, 0x2c27, 0x41a4, 0x4094, 0x417b, 0xbadb, 0xb221, 0xac56, 0x4045, 0xbf00, 0xbf9e, 0xb02c, 0x1467, 0xa9eb, 0xb28c, 0x42f0, 0x42f1, 0x2b99, 0x10b3, 0x4181, 0x4565, 0x16bf, 0xbaf0, 0x3ce0, 0x0fdb, 0x182c, 0x4008, 0xb253, 0x405c, 0x4291, 0x427d, 0x1b26, 0x4275, 0x424d, 0x400e, 0xbf97, 0x24cc, 0xb0ac, 0x00e5, 0x4646, 0x2dad, 0xbfd5, 0x416b, 0x43dc, 0x15af, 0x405f, 0x42ae, 0xaffc, 0x435c, 0x407e, 0x25a2, 0xb0a1, 0x26af, 0x4440, 0x2f9f, 0x0c00, 0x44e2, 0x4079, 0x0965, 0xb21f, 0x43b0, 0x081f, 0x441c, 0xbf5c, 0x4350, 0x1b32, 0x41d9, 0x46d8, 0xba76, 0x42cf, 0x426e, 0x438e, 0x0cf5, 0xb00b, 0x414f, 0xba7f, 0x2ea0, 0x4601, 0x43de, 0x2e67, 0x0090, 0xb095, 0x43b4, 0x1edf, 0x4695, 0xb264, 0x0acf, 0xbf11, 0x42f8, 0xa71c, 0x42c7, 0xb29e, 0xb223, 0x08a7, 0x4425, 0x40c5, 0x4342, 0x466f, 0x1e7a, 0x425e, 0xba7c, 0xbaef, 0x4195, 0x40f0, 0x4105, 0x182a, 0xb249, 0x01b6, 0x43db, 0x33cd, 0xb098, 0x22ef, 0x4670, 0x1c06, 0x4143, 0xb2ad, 0xbfdd, 0x44ea, 0xba3e, 0x43d7, 0xb251, 0xba39, 0xba0d, 0x40bf, 0x46a2, 0x20a1, 0x41ab, 0x3578, 0xafc6, 0x19e4, 0x4127, 0xb06d, 0xacfe, 0x1d9e, 0xbf31, 0x43da, 0x0408, 0x42e6, 0xb2ca, 0x400e, 0xa0f7, 0x42c4, 0xb24e, 0x401f, 0xb220, 0x4494, 0x4410, 0xbf15, 0x417b, 0x42eb, 0x151d, 0x4295, 0x4188, 0xbae2, 0x40d5, 0x40c3, 0x1d6c, 0xa78d, 0x4059, 0x46ad, 0x1903, 0x1b14, 0x407f, 0xb249, 0x43cf, 0x415f, 0x4423, 0x410e, 0xba10, 0x0aac, 0x40ae, 0xa148, 0x0bda, 0xbfb6, 0x4161, 0xb0c0, 0xb2b3, 0xacde, 0x43b8, 0x40c4, 0xb2b5, 0x4476, 0x41cf, 0x4245, 0xbf2a, 0x1c2a, 0x34fe, 0x089d, 0x1943, 0xa5a5, 0x4611, 0x4013, 0x305a, 0x1a16, 0x43f1, 0x4118, 0xb2a5, 0x44a3, 0x1aa6, 0x4055, 0x412d, 0xb2c1, 0x43cf, 0x0ae2, 0xbf28, 0x4299, 0x42ac, 0xb203, 0xa899, 0x4160, 0xbf56, 0xbafe, 0x40d0, 0xb2ea, 0xb2b1, 0x1f3a, 0x1cf9, 0x43fd, 0xbf76, 0xba48, 0xbaca, 0xb2d1, 0x4268, 0x43a9, 0x465a, 0x1f70, 0xb0a5, 0xb021, 0x4016, 0xae2f, 0x4012, 0x3ad1, 0x402f, 0x3c2d, 0x425e, 0x40a7, 0xba78, 0xbf2f, 0x226a, 0x44a0, 0x417a, 0x040e, 0x0659, 0xb288, 0x41b4, 0xba78, 0x0a09, 0x4165, 0x2bfb, 0xbf05, 0x4222, 0x1bfa, 0xa40a, 0x43ab, 0x41db, 0x43e3, 0x419f, 0x4694, 0x43d0, 0x35e8, 0x1f83, 0x4116, 0x4206, 0xac92, 0x4034, 0x220e, 0x413e, 0xad23, 0x4116, 0x4430, 0xbf60, 0x0e3f, 0x1c57, 0xac22, 0x3c5b, 0xb208, 0x098b, 0xbf0c, 0x42db, 0x3b41, 0x435e, 0x4302, 0xbf19, 0x3fc7, 0x4222, 0xbac3, 0x1528, 0x427e, 0x428a, 0xb2ce, 0xb09d, 0x41f4, 0x435c, 0xba54, 0xbf3f, 0x2dc4, 0x1526, 0x4335, 0xba05, 0xbf5f, 0xb252, 0x4431, 0x2474, 0x4260, 0x4278, 0x41eb, 0x43f7, 0x41bc, 0x4274, 0x2a23, 0x1ea8, 0xb024, 0x163b, 0x4365, 0x3c89, 0x424f, 0xba1c, 0x43d1, 0x42ac, 0xbac7, 0x405a, 0xb2d1, 0x1d69, 0xb2a2, 0x41bf, 0x412b, 0x42f5, 0x141d, 0xbf5b, 0x43f7, 0x0b65, 0x4124, 0xbacc, 0x414a, 0x39dc, 0x4290, 0x160f, 0xb2c6, 0x46b2, 0x43b8, 0xbf90, 0x417c, 0x41ea, 0x4280, 0x438c, 0x40b9, 0x1fc0, 0x0291, 0x46e2, 0x432a, 0x4206, 0x2149, 0x06e2, 0xb218, 0xba0d, 0x3fc3, 0xbf68, 0x46c8, 0x4166, 0x437d, 0x41a0, 0xb00f, 0x26f5, 0x42b6, 0x466c, 0xaf14, 0xba28, 0x0364, 0x0f78, 0xa3a4, 0xbf6e, 0x4572, 0xb2fe, 0xb046, 0x413c, 0xbaf3, 0x4370, 0x4005, 0x2268, 0x42af, 0x4278, 0x4089, 0x439f, 0xbfd6, 0xaed2, 0x4305, 0xb2e2, 0xb2f6, 0xbf18, 0x42a3, 0x1ee9, 0x41bc, 0x1d48, 0x4313, 0xa6e2, 0x407a, 0xb09e, 0x459c, 0xb24b, 0xb015, 0xaa03, 0x18b9, 0xacea, 0x1e86, 0x4169, 0xbfc8, 0x1f6a, 0x4396, 0x347f, 0x182d, 0x3184, 0xba54, 0x221f, 0x40d0, 0x337e, 0x4272, 0x40c0, 0xb0de, 0x430d, 0x4105, 0x315e, 0x11cc, 0xbf90, 0x228a, 0x4273, 0xbada, 0x006d, 0xbf2a, 0x4334, 0x18c8, 0xb2d9, 0x1cf8, 0xba7c, 0xbaef, 0x4461, 0x2973, 0x2d26, 0x4042, 0xaba4, 0x4186, 0xb05c, 0xbfd4, 0x4254, 0x1e78, 0x4643, 0xb29a, 0x427a, 0x4370, 0x1f71, 0x419a, 0xa4c1, 0x07c9, 0xbf80, 0x3f05, 0x405f, 0x3150, 0xbf37, 0x40ce, 0xba27, 0xb2a0, 0x2398, 0xbfca, 0x43e4, 0xaa17, 0xba74, 0xb0d6, 0xb08f, 0x42c9, 0x42cd, 0xb224, 0x1ccf, 0xafbc, 0x4060, 0xb0f5, 0x423d, 0x43c4, 0xb2fc, 0xbac2, 0x4017, 0xb265, 0x431a, 0xbfca, 0x43a8, 0x415f, 0x40ff, 0xb0d7, 0xbae4, 0x1b93, 0xb2e9, 0x1a43, 0x28ac, 0x427c, 0xb215, 0x4017, 0xbf3d, 0xb2d0, 0x42be, 0x1d8f, 0x447c, 0x40ec, 0xba4e, 0x1910, 0xb041, 0x1fdd, 0x41b7, 0x40c9, 0x42c8, 0xbf60, 0x404f, 0xb27d, 0x4661, 0x4399, 0x43eb, 0xb20a, 0x460b, 0x1c22, 0xb26f, 0xbae0, 0xbff0, 0x421f, 0x1f27, 0x4264, 0x4290, 0xbf93, 0xb2a4, 0xb2a7, 0xbaff, 0xad42, 0x4391, 0xba27, 0x40f4, 0xbfd6, 0x42f8, 0x429f, 0x03c8, 0x40c6, 0x32d1, 0x40c8, 0xaf82, 0x02cf, 0x046b, 0x4285, 0x4291, 0xba45, 0xbadd, 0x40f2, 0x33e6, 0xba09, 0xba1e, 0x4607, 0x45d9, 0x4453, 0xb00d, 0x4222, 0x40b0, 0xbf19, 0xb20c, 0x1ab7, 0x41dc, 0x439e, 0x4221, 0x1f89, 0x400c, 0xb288, 0x42f2, 0x4543, 0x3d97, 0x43e3, 0xba58, 0xaa3d, 0x42d0, 0x1870, 0x26b1, 0xbfab, 0x4112, 0x42d9, 0x467c, 0x4052, 0x4631, 0xb286, 0xbf5e, 0x43c5, 0x44d0, 0x2fb1, 0x43b3, 0xb2ea, 0x1d46, 0x4076, 0x415a, 0x3bbe, 0xbf03, 0x0812, 0x2d4f, 0x1f62, 0x4322, 0x0a58, 0x40e4, 0x1fcd, 0xba52, 0x15b6, 0x43b0, 0x43a0, 0x400a, 0x4303, 0x4297, 0x40e7, 0xb0cf, 0x43e8, 0x15c1, 0x4134, 0x4248, 0x4576, 0x0870, 0x01c4, 0xbf63, 0xbac5, 0x42cd, 0x437d, 0x43e7, 0xb261, 0x42e2, 0xbf18, 0xbac0, 0x4037, 0x40d0, 0x1c84, 0x4149, 0xbf80, 0xb2c6, 0xbfe0, 0x30f1, 0xa467, 0x2e0e, 0xbf6b, 0x46e2, 0x4216, 0x43df, 0x1ab8, 0xbf23, 0x46d3, 0xba71, 0xb208, 0x099f, 0xbf60, 0xba1f, 0x40a5, 0x42d4, 0x21cb, 0x1ffd, 0x40c9, 0x42dc, 0x15f1, 0x279d, 0x2437, 0x0cea, 0xbfdd, 0xbae4, 0x438b, 0x4378, 0x463c, 0x0a74, 0x4005, 0xba1e, 0x41d7, 0x4481, 0x4274, 0x45da, 0xbf46, 0xb0e9, 0x3f19, 0x1bb1, 0x4581, 0x42ce, 0xb2df, 0xba6f, 0xb22f, 0x343f, 0x40d8, 0xae4d, 0x4225, 0x404d, 0x3748, 0x4641, 0x1924, 0xba34, 0xbf27, 0x42ba, 0x1e38, 0x40c4, 0x1e29, 0xbfb8, 0xa804, 0xbaf2, 0xbaec, 0x411a, 0x42e3, 0x402b, 0x404a, 0x4654, 0x403c, 0x229e, 0x4343, 0x4278, 0x420e, 0x414e, 0x1b28, 0x1ec8, 0x4137, 0xbf74, 0x4132, 0x40db, 0xba2b, 0x424e, 0x400f, 0x4342, 0xa268, 0x45cc, 0x41a1, 0xb210, 0x1e13, 0xba32, 0x405f, 0x4070, 0x40a8, 0x4495, 0xaf59, 0x1a8a, 0x4335, 0x1aaf, 0xa0de, 0x4557, 0x429b, 0xbf2b, 0x1a1f, 0xb24a, 0x20ba, 0x4026, 0x4426, 0x415d, 0xba49, 0x1a0f, 0xa6ba, 0x408e, 0xba37, 0xb067, 0xa1be, 0x43f0, 0xb26f, 0x06e2, 0x4101, 0x424b, 0xb004, 0x17fe, 0x417d, 0x4053, 0x133e, 0xbfa1, 0xa51b, 0xaf80, 0x43e6, 0x4031, 0x0893, 0x42a2, 0x113a, 0xbf86, 0xb211, 0xb2e9, 0x1955, 0xb2e0, 0x4249, 0x1fee, 0x43bf, 0x1f72, 0xb29c, 0x41ce, 0x1c6c, 0x1ac1, 0x4216, 0x4309, 0xbf90, 0x4176, 0x4114, 0x0c13, 0xb22a, 0x10be, 0x4293, 0x1255, 0x40dd, 0x1f80, 0xba69, 0xb298, 0x430c, 0x3114, 0xbfc2, 0x4209, 0x4682, 0x4160, 0x461f, 0x4003, 0x4104, 0x27e8, 0xb27f, 0x13b2, 0x4034, 0x061d, 0xb093, 0x30b2, 0x4252, 0xa0b3, 0xa03e, 0x4489, 0x4458, 0xbad3, 0xbf2e, 0x4301, 0x401f, 0x40ed, 0xba6c, 0x41bf, 0xb017, 0xbf5b, 0x4549, 0x4316, 0xb2ac, 0x2a29, 0x19a6, 0x437d, 0xaba0, 0x3226, 0xa26e, 0x1bde, 0x4143, 0x40a4, 0x46ac, 0x420e, 0x43d6, 0x40d2, 0x40e5, 0x059e, 0x41eb, 0xbfb2, 0xaf76, 0x4194, 0x425c, 0x3ca9, 0xbafa, 0x1cd4, 0x40b9, 0xb29b, 0x439a, 0x3586, 0xb28f, 0x43a5, 0x438b, 0x45ad, 0xb200, 0xbf90, 0x387c, 0x1693, 0x40a5, 0x43c8, 0x065e, 0x37af, 0xbf55, 0x4319, 0x41ee, 0x1ee5, 0x1d3e, 0x43f1, 0x1d52, 0x462d, 0x0129, 0xbae8, 0x4613, 0x1d81, 0x2a54, 0xba46, 0x432c, 0x101c, 0xb29a, 0x42c2, 0xbfd0, 0x2520, 0x32e6, 0xba32, 0xba5a, 0x40ef, 0xbf70, 0xa438, 0xbf48, 0x42cf, 0x4220, 0x40f8, 0x0b4e, 0x434e, 0x1909, 0x417e, 0x42ee, 0xbf02, 0xbfd0, 0x157f, 0x408d, 0x42dc, 0xba68, 0xb219, 0xb075, 0xbfa5, 0x2f93, 0x1fb8, 0x40f1, 0xb240, 0xb2b3, 0x2097, 0x42f4, 0x188b, 0xb0e8, 0x4326, 0x4157, 0x2694, 0x404c, 0xbaf8, 0x431a, 0x4308, 0x2760, 0x359d, 0xb290, 0x1cc4, 0x4133, 0x1771, 0x408f, 0x4159, 0xba63, 0x4222, 0xbf7d, 0x44f8, 0x4088, 0xbad6, 0x0287, 0x4770, 0xe7fe + ], + StartRegs = [0x8f725d16, 0x8f2d1fe5, 0xd2b28a66, 0x47a47346, 0xc0b4401b, 0xf8e7fb12, 0x4ba63b76, 0xa9e6ad4c, 0xa1d2cdf2, 0x35a0c989, 0xc174909a, 0x846af94c, 0xe89071ad, 0x3db39c20, 0x00000000, 0x000001f0 + ], + FinalRegs = [0x0000414c, 0x00000000, 0x0000414c, 0x00004f41, 0x0000414f, 0x000000bd, 0x00004c41, 0x00000060, 0x08d61086, 0x35a0d48c, 0x00000000, 0x846afcc2, 0x00000000, 0x17fffbb8, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xbafe, 0xb286, 0x0988, 0xb25a, 0x4061, 0x1ed9, 0x4663, 0x430f, 0xb280, 0x2590, 0xb0a2, 0x43b0, 0x0a42, 0xa6b5, 0x4171, 0x3320, 0x4145, 0xb286, 0xba32, 0x1307, 0xbf7c, 0x435e, 0x1bc9, 0x41ff, 0x1e42, 0xb09a, 0x444e, 0x40b1, 0x4016, 0xbaca, 0x411c, 0x2fb8, 0x431a, 0xbf01, 0x4360, 0x41d8, 0x1e44, 0x1331, 0x3c8c, 0xb04e, 0x4296, 0x4548, 0xbf2e, 0x2139, 0x403d, 0x197a, 0xbf90, 0x1c14, 0x4472, 0x3fa6, 0x0f32, 0x21ac, 0x407e, 0xbaf8, 0xb255, 0xba53, 0x1b89, 0xbf65, 0x18ef, 0xba18, 0x405b, 0xb0bd, 0x0ebd, 0xb204, 0xba30, 0x413b, 0x4143, 0x4316, 0x41e9, 0x4367, 0x41c5, 0x1673, 0x103e, 0x09a5, 0x2ef0, 0xb263, 0x43e6, 0x42ec, 0x1c44, 0x082b, 0x45c5, 0x439b, 0xb2e9, 0xa969, 0xbf7b, 0xbfd0, 0x438b, 0x4132, 0xb0ec, 0x431b, 0x34ab, 0x0f49, 0xa401, 0x4124, 0xacc3, 0x4314, 0x1cf2, 0x3c2e, 0x309c, 0xb0be, 0xb0a3, 0x40e6, 0x4314, 0x41ab, 0x122b, 0xb2c2, 0x13c9, 0x423d, 0x423e, 0xbfce, 0x4175, 0xaa5d, 0x0876, 0x1c1c, 0xbad3, 0x4248, 0xb298, 0x0069, 0x16ba, 0x40c0, 0xbfc1, 0x43c4, 0x17a8, 0xa13f, 0x41a8, 0x40d6, 0x4680, 0x4319, 0xba2a, 0x44b8, 0x4470, 0xb0c8, 0xbf6d, 0x4303, 0x1c1a, 0x439b, 0xb271, 0xba0b, 0xb236, 0x41a2, 0x4071, 0x431e, 0x395c, 0xadd7, 0xba48, 0x4163, 0x40ee, 0x4195, 0x2da0, 0x19e4, 0x32b4, 0xb2ca, 0xb0b7, 0x45f5, 0xbfbd, 0x3c50, 0x23c9, 0x2092, 0x4424, 0x410a, 0x40d8, 0x43ee, 0xb2a8, 0x1d9f, 0x416e, 0x418c, 0x3fb8, 0x1557, 0xbac8, 0x4659, 0x4131, 0x0f9d, 0x434f, 0xb2a4, 0x41b5, 0xb2a8, 0xbf6c, 0x415e, 0xbacf, 0xb2f5, 0xb20a, 0xb059, 0xbaf2, 0x4003, 0x0bf5, 0x40b9, 0x4480, 0x0151, 0x0a9f, 0x4269, 0x439f, 0xb029, 0x4224, 0x04a3, 0x4365, 0x4071, 0x4630, 0x2d00, 0x4436, 0x1904, 0x3861, 0xbf71, 0x198a, 0xb2ad, 0x0641, 0x3aad, 0x425e, 0xb2e0, 0x00d3, 0xb030, 0xbf78, 0x4089, 0xba44, 0x1789, 0x0fb3, 0x45ba, 0xb2dc, 0xbf3a, 0x186d, 0x42c9, 0x432b, 0xb2ea, 0xb0cf, 0x42d5, 0xb22c, 0xb21e, 0x2355, 0xba01, 0xa56e, 0x41fd, 0xbad1, 0x2bcf, 0x1b37, 0xb2a4, 0x411f, 0x4018, 0x4342, 0x20f4, 0x43c4, 0x43be, 0xbfa1, 0x4139, 0x468b, 0x42c4, 0x1b6e, 0x21aa, 0x42a3, 0xb0cd, 0xb0d2, 0x431e, 0x431d, 0xbfa0, 0x428d, 0x35d6, 0xbf32, 0xae52, 0x431c, 0x1e62, 0xbaf6, 0x4099, 0xb015, 0x4122, 0x19f9, 0x01c1, 0xb2ef, 0xa849, 0x2614, 0xb24a, 0x02c0, 0x43ec, 0x0216, 0x42a0, 0x42c1, 0x43e2, 0x43d9, 0x1ae7, 0x1285, 0xb23e, 0x1d33, 0x187a, 0x3872, 0x4661, 0x3d9c, 0xbfaa, 0x4033, 0x4089, 0x41c3, 0x328b, 0x43d5, 0xb2ab, 0x06f1, 0xbaf9, 0x432e, 0x3160, 0x416a, 0x2c76, 0x4232, 0xbfe8, 0xbf70, 0xbf4f, 0xb20a, 0xb29a, 0x16b0, 0xb2f3, 0xb02f, 0x1ed3, 0x42e1, 0x44f8, 0xb279, 0xba78, 0xbff0, 0xb2ae, 0x433e, 0x388b, 0x3cac, 0xbf3f, 0xb2ab, 0x31d8, 0x34a0, 0xaa1a, 0xb22d, 0x3df9, 0xb28a, 0x43d6, 0x37ab, 0xb228, 0xbf1b, 0x41d9, 0x062a, 0xb256, 0x1c7f, 0xa48c, 0x441d, 0x403b, 0x20fc, 0x1841, 0x4260, 0xb280, 0xbfb0, 0x41ee, 0x4340, 0xb0dc, 0x415d, 0x41c7, 0x41c2, 0x4565, 0xb239, 0xba36, 0x435e, 0xb2c3, 0x0432, 0x434a, 0xbfd7, 0x4127, 0x26c1, 0x38e4, 0x4210, 0x400c, 0xb0ac, 0x46f9, 0xba4d, 0x4331, 0x2faf, 0x4088, 0x4014, 0x2e91, 0x42e5, 0xb0dc, 0xbfb3, 0x0e14, 0x42b4, 0xb251, 0x45a4, 0xbf13, 0x4460, 0xba07, 0x2702, 0x406e, 0xbfc0, 0x40d8, 0x3d8d, 0xb231, 0xb067, 0xb0cf, 0xba32, 0x4334, 0x29fc, 0x4051, 0x4068, 0x4617, 0x361f, 0x4013, 0x42c3, 0x1ff9, 0x437f, 0xba51, 0xb24f, 0x4150, 0xbf4f, 0xb2b8, 0x1a70, 0xaf84, 0x410e, 0xb207, 0x4041, 0x42f2, 0x4637, 0x00ae, 0x41b1, 0x411f, 0x4333, 0x41ae, 0x1d1b, 0xbf5b, 0x4313, 0x393e, 0xb277, 0xbfc0, 0x4103, 0x18c6, 0xae36, 0x429a, 0x42c7, 0x464b, 0x1569, 0x035a, 0x41c4, 0x3350, 0x209f, 0x43c8, 0x416e, 0x4305, 0x1daa, 0x43a6, 0x4325, 0x4248, 0x3079, 0xbf01, 0x4072, 0xafc0, 0xb299, 0x42a7, 0x422d, 0x40f4, 0xb2d7, 0xb2d8, 0xb006, 0x4318, 0xbf61, 0xb2c3, 0x2017, 0x4172, 0xa800, 0x43b6, 0xba42, 0x4367, 0x43a3, 0xb08f, 0x4267, 0x43c8, 0xb0f0, 0x0970, 0xbacc, 0x1b86, 0x4177, 0x439a, 0x41ce, 0x4053, 0x4307, 0xb29b, 0x3708, 0xb29f, 0x25a5, 0xb279, 0x4329, 0xb2df, 0xbf3c, 0x40c9, 0x435c, 0xbfd9, 0x4180, 0x01f8, 0x37cd, 0x4087, 0xbf80, 0x41fb, 0x43c3, 0xba0f, 0xb214, 0x1f01, 0x43e2, 0xbf28, 0xb2ce, 0x4181, 0x19db, 0x4124, 0xbff0, 0x170e, 0xb078, 0x41d6, 0x4325, 0x4033, 0xba21, 0x42b9, 0x15d9, 0x42c2, 0x0491, 0x42b1, 0x40c8, 0xba19, 0x4411, 0xbae6, 0xbac3, 0xbf61, 0x427b, 0x4341, 0xb2ba, 0xb233, 0xb2fa, 0x40c7, 0xb0b5, 0xb2b9, 0xb23a, 0x433a, 0x418e, 0xb240, 0xbf3d, 0x12df, 0x405d, 0x0bfe, 0x1c0d, 0xbff0, 0xb2a2, 0x42dc, 0x08fb, 0x42c4, 0x4129, 0x1eee, 0xba63, 0x41f4, 0xbfdd, 0x4239, 0xa32e, 0xbac6, 0x41dc, 0x1a05, 0x41dc, 0x3616, 0x4401, 0x40da, 0x4278, 0x15fd, 0x19be, 0xafdf, 0xada3, 0xbf22, 0x0b84, 0xbf90, 0x4558, 0x425f, 0x12b9, 0x42de, 0x43a1, 0x31dc, 0x1fb3, 0x1f66, 0x4313, 0x0dee, 0xa10b, 0x4272, 0x0ff7, 0x40cf, 0xbfb0, 0x4614, 0x4263, 0xbfd7, 0xa80c, 0x43d9, 0x4690, 0xba05, 0x40b9, 0x1a89, 0x3326, 0x43eb, 0x0377, 0x43f4, 0x4182, 0xb066, 0x25ac, 0x4076, 0x1848, 0x02ff, 0xbf2b, 0xb291, 0x4646, 0xa320, 0xb077, 0x41b0, 0x412b, 0x422b, 0x0c68, 0xbf62, 0x4139, 0x413d, 0x2f7a, 0x41a3, 0x417e, 0xb0c1, 0x3b6a, 0xb0d5, 0xb2a6, 0x43ef, 0x1a5e, 0x1de5, 0x4215, 0x211f, 0xbfd5, 0x1f96, 0x4694, 0x05d2, 0x2a85, 0x4460, 0x4180, 0x41bc, 0x30a7, 0x419a, 0x401d, 0x26d1, 0xb009, 0x4267, 0x40f1, 0x413e, 0xae3b, 0x4351, 0xa082, 0x3aec, 0xbf49, 0x42b4, 0x3cdf, 0xb031, 0xb225, 0xbf90, 0xb21e, 0xa23e, 0x3d65, 0x2014, 0xa8dc, 0xba0c, 0x4217, 0x17df, 0x4234, 0x18ea, 0x41f5, 0x0639, 0x45e4, 0x34d4, 0x4207, 0x0eb1, 0x421c, 0x408c, 0x405e, 0xa02e, 0xb273, 0x4109, 0x0240, 0x42a9, 0xbfcf, 0x0d28, 0x43ce, 0x2281, 0x430e, 0x2cde, 0xb08c, 0x4013, 0x165a, 0xb0db, 0xad8f, 0x3ed1, 0x111b, 0x461d, 0x08fb, 0x4074, 0x4076, 0x4030, 0x41a4, 0xb210, 0x144d, 0x24dc, 0x4063, 0x1890, 0x4313, 0x38c2, 0x416f, 0xbfc9, 0x270d, 0xb276, 0x4308, 0x1f80, 0x2858, 0x3b1a, 0x397f, 0x3b6e, 0x19f9, 0x43b3, 0x4249, 0xb2c7, 0x1f5a, 0xba0f, 0x42f8, 0xbfc3, 0xb09c, 0x1cc4, 0xa140, 0x4315, 0x4080, 0xb22d, 0x437d, 0x461f, 0xbada, 0x41af, 0xbf3c, 0x306b, 0x43ce, 0xb244, 0xba73, 0x4193, 0x400a, 0x1af3, 0x403f, 0xb26e, 0x1bee, 0x43a8, 0xba08, 0x400d, 0x4215, 0x3529, 0xba5b, 0x2623, 0xba16, 0x4025, 0x40d8, 0x43e9, 0x4225, 0x4112, 0xb2f4, 0x41db, 0x1c09, 0x1ece, 0xbf27, 0x1ac8, 0x4338, 0x4015, 0x4299, 0x4094, 0x4662, 0xba14, 0x43bd, 0x4082, 0x0e05, 0x40c2, 0x413e, 0x43bb, 0x42a6, 0x4146, 0x0cc0, 0x1a0b, 0x1c27, 0x4104, 0xbf93, 0x2799, 0x46ed, 0x1c30, 0xbfc0, 0x422b, 0xa622, 0x1866, 0x15a6, 0xbf80, 0x4334, 0x4060, 0x07a4, 0x14d3, 0xa26f, 0xbae9, 0xbf44, 0x4033, 0xba7e, 0xad85, 0x4045, 0x1bc4, 0x43b8, 0x43ed, 0x10c5, 0x4200, 0x4330, 0x44cd, 0x36e3, 0x4004, 0x4114, 0x438e, 0xba11, 0x4297, 0x19b2, 0x4222, 0xa7bb, 0xbfb4, 0xb0db, 0xba70, 0x430d, 0x4017, 0x1848, 0x1390, 0x4078, 0x4204, 0x42df, 0xba34, 0x414f, 0x4353, 0x4205, 0x01ea, 0xb249, 0xbf17, 0x4208, 0x42a3, 0x456e, 0xba29, 0xbf32, 0x430b, 0x19a9, 0xb09a, 0x41e6, 0xb0a6, 0x401f, 0xa293, 0x40bc, 0x1df0, 0x40df, 0x3ec9, 0x063a, 0x4255, 0xba51, 0xbf34, 0x405f, 0xb0d1, 0x3863, 0x0052, 0x1541, 0xa37a, 0x429d, 0x4285, 0x2a8b, 0xbf8b, 0x429e, 0x1dc2, 0x4193, 0xb249, 0xb0fe, 0x4135, 0x1864, 0xa8fd, 0xbfc0, 0x23fa, 0x4029, 0xb2b7, 0x4319, 0x408a, 0x4315, 0x4221, 0x1257, 0xb041, 0x0dcb, 0xbfb3, 0x4262, 0xb293, 0xbac4, 0xb20c, 0xa4ca, 0xbad8, 0x4215, 0x4188, 0x401a, 0x1a27, 0x41ce, 0xb282, 0x0e98, 0x4075, 0x40a9, 0xbafe, 0x3362, 0xb25e, 0x4165, 0x1cb7, 0x4025, 0x374e, 0xb2ac, 0x1b9c, 0xb28a, 0xbacb, 0xbf57, 0x2d7c, 0xb010, 0xa274, 0x3dab, 0x41a6, 0x44b9, 0x3456, 0xa547, 0x4304, 0x4056, 0x4359, 0x1e93, 0x416e, 0x4009, 0xba31, 0xbf6f, 0x410e, 0x40ac, 0x1854, 0xb0c6, 0xba4c, 0xa9db, 0xb2c3, 0x1cc0, 0x053b, 0xbf51, 0x04d7, 0x44f3, 0x4598, 0x4157, 0x4483, 0xb2f7, 0xbf5a, 0x40f9, 0x4075, 0xa00f, 0xbae4, 0xb0d9, 0x3a47, 0xbaec, 0x43b8, 0xb28f, 0x4308, 0xa8af, 0x4159, 0xb2c7, 0x4025, 0x2d96, 0x406f, 0xb28e, 0xb0e9, 0xbf44, 0xb2ba, 0x4236, 0x0e9d, 0x43cf, 0x420d, 0xb2f9, 0xb228, 0xb038, 0x42de, 0xb283, 0x43a7, 0x013a, 0xba3d, 0xb208, 0xa6da, 0x44fa, 0xb2cf, 0x3eb1, 0x1b4e, 0x404b, 0xbf60, 0xb2ae, 0x43a6, 0x44cb, 0x4297, 0xa637, 0x403f, 0xbfd8, 0xbfe0, 0x40ee, 0x41ed, 0x407c, 0x1927, 0x1c96, 0x4239, 0x19b4, 0xb25c, 0xbf3d, 0x20cf, 0xb025, 0xb2a8, 0x1849, 0x297d, 0x427e, 0x15b8, 0x42df, 0x4050, 0xb2fa, 0x4151, 0xbf3d, 0x267a, 0xb23f, 0x4098, 0x42cf, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xc83b3c92, 0xbd911bb4, 0xd5a5a9bb, 0xeab26e45, 0xe6aa6cea, 0xa200e8c6, 0x4e453677, 0x79cc53e1, 0x299e08fa, 0xe4a48c55, 0x96623e63, 0x103ae3c6, 0x15c81382, 0xac554abf, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0x00000000, 0x000001fd, 0x000000fe, 0x000000fd, 0xfffffffd, 0xff5e0000, 0x0000007a, 0x000043fe, 0xbfc51110, 0x00001384, 0x966255f3, 0x00004087, 0xfffffea7, 0xac554d4d, 0x00000000, 0x000001d0 }, + Instructions = [0xbafe, 0xb286, 0x0988, 0xb25a, 0x4061, 0x1ed9, 0x4663, 0x430f, 0xb280, 0x2590, 0xb0a2, 0x43b0, 0x0a42, 0xa6b5, 0x4171, 0x3320, 0x4145, 0xb286, 0xba32, 0x1307, 0xbf7c, 0x435e, 0x1bc9, 0x41ff, 0x1e42, 0xb09a, 0x444e, 0x40b1, 0x4016, 0xbaca, 0x411c, 0x2fb8, 0x431a, 0xbf01, 0x4360, 0x41d8, 0x1e44, 0x1331, 0x3c8c, 0xb04e, 0x4296, 0x4548, 0xbf2e, 0x2139, 0x403d, 0x197a, 0xbf90, 0x1c14, 0x4472, 0x3fa6, 0x0f32, 0x21ac, 0x407e, 0xbaf8, 0xb255, 0xba53, 0x1b89, 0xbf65, 0x18ef, 0xba18, 0x405b, 0xb0bd, 0x0ebd, 0xb204, 0xba30, 0x413b, 0x4143, 0x4316, 0x41e9, 0x4367, 0x41c5, 0x1673, 0x103e, 0x09a5, 0x2ef0, 0xb263, 0x43e6, 0x42ec, 0x1c44, 0x082b, 0x45c5, 0x439b, 0xb2e9, 0xa969, 0xbf7b, 0xbfd0, 0x438b, 0x4132, 0xb0ec, 0x431b, 0x34ab, 0x0f49, 0xa401, 0x4124, 0xacc3, 0x4314, 0x1cf2, 0x3c2e, 0x309c, 0xb0be, 0xb0a3, 0x40e6, 0x4314, 0x41ab, 0x122b, 0xb2c2, 0x13c9, 0x423d, 0x423e, 0xbfce, 0x4175, 0xaa5d, 0x0876, 0x1c1c, 0xbad3, 0x4248, 0xb298, 0x0069, 0x16ba, 0x40c0, 0xbfc1, 0x43c4, 0x17a8, 0xa13f, 0x41a8, 0x40d6, 0x4680, 0x4319, 0xba2a, 0x44b8, 0x4470, 0xb0c8, 0xbf6d, 0x4303, 0x1c1a, 0x439b, 0xb271, 0xba0b, 0xb236, 0x41a2, 0x4071, 0x431e, 0x395c, 0xadd7, 0xba48, 0x4163, 0x40ee, 0x4195, 0x2da0, 0x19e4, 0x32b4, 0xb2ca, 0xb0b7, 0x45f5, 0xbfbd, 0x3c50, 0x23c9, 0x2092, 0x4424, 0x410a, 0x40d8, 0x43ee, 0xb2a8, 0x1d9f, 0x416e, 0x418c, 0x3fb8, 0x1557, 0xbac8, 0x4659, 0x4131, 0x0f9d, 0x434f, 0xb2a4, 0x41b5, 0xb2a8, 0xbf6c, 0x415e, 0xbacf, 0xb2f5, 0xb20a, 0xb059, 0xbaf2, 0x4003, 0x0bf5, 0x40b9, 0x4480, 0x0151, 0x0a9f, 0x4269, 0x439f, 0xb029, 0x4224, 0x04a3, 0x4365, 0x4071, 0x4630, 0x2d00, 0x4436, 0x1904, 0x3861, 0xbf71, 0x198a, 0xb2ad, 0x0641, 0x3aad, 0x425e, 0xb2e0, 0x00d3, 0xb030, 0xbf78, 0x4089, 0xba44, 0x1789, 0x0fb3, 0x45ba, 0xb2dc, 0xbf3a, 0x186d, 0x42c9, 0x432b, 0xb2ea, 0xb0cf, 0x42d5, 0xb22c, 0xb21e, 0x2355, 0xba01, 0xa56e, 0x41fd, 0xbad1, 0x2bcf, 0x1b37, 0xb2a4, 0x411f, 0x4018, 0x4342, 0x20f4, 0x43c4, 0x43be, 0xbfa1, 0x4139, 0x468b, 0x42c4, 0x1b6e, 0x21aa, 0x42a3, 0xb0cd, 0xb0d2, 0x431e, 0x431d, 0xbfa0, 0x428d, 0x35d6, 0xbf32, 0xae52, 0x431c, 0x1e62, 0xbaf6, 0x4099, 0xb015, 0x4122, 0x19f9, 0x01c1, 0xb2ef, 0xa849, 0x2614, 0xb24a, 0x02c0, 0x43ec, 0x0216, 0x42a0, 0x42c1, 0x43e2, 0x43d9, 0x1ae7, 0x1285, 0xb23e, 0x1d33, 0x187a, 0x3872, 0x4661, 0x3d9c, 0xbfaa, 0x4033, 0x4089, 0x41c3, 0x328b, 0x43d5, 0xb2ab, 0x06f1, 0xbaf9, 0x432e, 0x3160, 0x416a, 0x2c76, 0x4232, 0xbfe8, 0xbf70, 0xbf4f, 0xb20a, 0xb29a, 0x16b0, 0xb2f3, 0xb02f, 0x1ed3, 0x42e1, 0x44f8, 0xb279, 0xba78, 0xbff0, 0xb2ae, 0x433e, 0x388b, 0x3cac, 0xbf3f, 0xb2ab, 0x31d8, 0x34a0, 0xaa1a, 0xb22d, 0x3df9, 0xb28a, 0x43d6, 0x37ab, 0xb228, 0xbf1b, 0x41d9, 0x062a, 0xb256, 0x1c7f, 0xa48c, 0x441d, 0x403b, 0x20fc, 0x1841, 0x4260, 0xb280, 0xbfb0, 0x41ee, 0x4340, 0xb0dc, 0x415d, 0x41c7, 0x41c2, 0x4565, 0xb239, 0xba36, 0x435e, 0xb2c3, 0x0432, 0x434a, 0xbfd7, 0x4127, 0x26c1, 0x38e4, 0x4210, 0x400c, 0xb0ac, 0x46f9, 0xba4d, 0x4331, 0x2faf, 0x4088, 0x4014, 0x2e91, 0x42e5, 0xb0dc, 0xbfb3, 0x0e14, 0x42b4, 0xb251, 0x45a4, 0xbf13, 0x4460, 0xba07, 0x2702, 0x406e, 0xbfc0, 0x40d8, 0x3d8d, 0xb231, 0xb067, 0xb0cf, 0xba32, 0x4334, 0x29fc, 0x4051, 0x4068, 0x4617, 0x361f, 0x4013, 0x42c3, 0x1ff9, 0x437f, 0xba51, 0xb24f, 0x4150, 0xbf4f, 0xb2b8, 0x1a70, 0xaf84, 0x410e, 0xb207, 0x4041, 0x42f2, 0x4637, 0x00ae, 0x41b1, 0x411f, 0x4333, 0x41ae, 0x1d1b, 0xbf5b, 0x4313, 0x393e, 0xb277, 0xbfc0, 0x4103, 0x18c6, 0xae36, 0x429a, 0x42c7, 0x464b, 0x1569, 0x035a, 0x41c4, 0x3350, 0x209f, 0x43c8, 0x416e, 0x4305, 0x1daa, 0x43a6, 0x4325, 0x4248, 0x3079, 0xbf01, 0x4072, 0xafc0, 0xb299, 0x42a7, 0x422d, 0x40f4, 0xb2d7, 0xb2d8, 0xb006, 0x4318, 0xbf61, 0xb2c3, 0x2017, 0x4172, 0xa800, 0x43b6, 0xba42, 0x4367, 0x43a3, 0xb08f, 0x4267, 0x43c8, 0xb0f0, 0x0970, 0xbacc, 0x1b86, 0x4177, 0x439a, 0x41ce, 0x4053, 0x4307, 0xb29b, 0x3708, 0xb29f, 0x25a5, 0xb279, 0x4329, 0xb2df, 0xbf3c, 0x40c9, 0x435c, 0xbfd9, 0x4180, 0x01f8, 0x37cd, 0x4087, 0xbf80, 0x41fb, 0x43c3, 0xba0f, 0xb214, 0x1f01, 0x43e2, 0xbf28, 0xb2ce, 0x4181, 0x19db, 0x4124, 0xbff0, 0x170e, 0xb078, 0x41d6, 0x4325, 0x4033, 0xba21, 0x42b9, 0x15d9, 0x42c2, 0x0491, 0x42b1, 0x40c8, 0xba19, 0x4411, 0xbae6, 0xbac3, 0xbf61, 0x427b, 0x4341, 0xb2ba, 0xb233, 0xb2fa, 0x40c7, 0xb0b5, 0xb2b9, 0xb23a, 0x433a, 0x418e, 0xb240, 0xbf3d, 0x12df, 0x405d, 0x0bfe, 0x1c0d, 0xbff0, 0xb2a2, 0x42dc, 0x08fb, 0x42c4, 0x4129, 0x1eee, 0xba63, 0x41f4, 0xbfdd, 0x4239, 0xa32e, 0xbac6, 0x41dc, 0x1a05, 0x41dc, 0x3616, 0x4401, 0x40da, 0x4278, 0x15fd, 0x19be, 0xafdf, 0xada3, 0xbf22, 0x0b84, 0xbf90, 0x4558, 0x425f, 0x12b9, 0x42de, 0x43a1, 0x31dc, 0x1fb3, 0x1f66, 0x4313, 0x0dee, 0xa10b, 0x4272, 0x0ff7, 0x40cf, 0xbfb0, 0x4614, 0x4263, 0xbfd7, 0xa80c, 0x43d9, 0x4690, 0xba05, 0x40b9, 0x1a89, 0x3326, 0x43eb, 0x0377, 0x43f4, 0x4182, 0xb066, 0x25ac, 0x4076, 0x1848, 0x02ff, 0xbf2b, 0xb291, 0x4646, 0xa320, 0xb077, 0x41b0, 0x412b, 0x422b, 0x0c68, 0xbf62, 0x4139, 0x413d, 0x2f7a, 0x41a3, 0x417e, 0xb0c1, 0x3b6a, 0xb0d5, 0xb2a6, 0x43ef, 0x1a5e, 0x1de5, 0x4215, 0x211f, 0xbfd5, 0x1f96, 0x4694, 0x05d2, 0x2a85, 0x4460, 0x4180, 0x41bc, 0x30a7, 0x419a, 0x401d, 0x26d1, 0xb009, 0x4267, 0x40f1, 0x413e, 0xae3b, 0x4351, 0xa082, 0x3aec, 0xbf49, 0x42b4, 0x3cdf, 0xb031, 0xb225, 0xbf90, 0xb21e, 0xa23e, 0x3d65, 0x2014, 0xa8dc, 0xba0c, 0x4217, 0x17df, 0x4234, 0x18ea, 0x41f5, 0x0639, 0x45e4, 0x34d4, 0x4207, 0x0eb1, 0x421c, 0x408c, 0x405e, 0xa02e, 0xb273, 0x4109, 0x0240, 0x42a9, 0xbfcf, 0x0d28, 0x43ce, 0x2281, 0x430e, 0x2cde, 0xb08c, 0x4013, 0x165a, 0xb0db, 0xad8f, 0x3ed1, 0x111b, 0x461d, 0x08fb, 0x4074, 0x4076, 0x4030, 0x41a4, 0xb210, 0x144d, 0x24dc, 0x4063, 0x1890, 0x4313, 0x38c2, 0x416f, 0xbfc9, 0x270d, 0xb276, 0x4308, 0x1f80, 0x2858, 0x3b1a, 0x397f, 0x3b6e, 0x19f9, 0x43b3, 0x4249, 0xb2c7, 0x1f5a, 0xba0f, 0x42f8, 0xbfc3, 0xb09c, 0x1cc4, 0xa140, 0x4315, 0x4080, 0xb22d, 0x437d, 0x461f, 0xbada, 0x41af, 0xbf3c, 0x306b, 0x43ce, 0xb244, 0xba73, 0x4193, 0x400a, 0x1af3, 0x403f, 0xb26e, 0x1bee, 0x43a8, 0xba08, 0x400d, 0x4215, 0x3529, 0xba5b, 0x2623, 0xba16, 0x4025, 0x40d8, 0x43e9, 0x4225, 0x4112, 0xb2f4, 0x41db, 0x1c09, 0x1ece, 0xbf27, 0x1ac8, 0x4338, 0x4015, 0x4299, 0x4094, 0x4662, 0xba14, 0x43bd, 0x4082, 0x0e05, 0x40c2, 0x413e, 0x43bb, 0x42a6, 0x4146, 0x0cc0, 0x1a0b, 0x1c27, 0x4104, 0xbf93, 0x2799, 0x46ed, 0x1c30, 0xbfc0, 0x422b, 0xa622, 0x1866, 0x15a6, 0xbf80, 0x4334, 0x4060, 0x07a4, 0x14d3, 0xa26f, 0xbae9, 0xbf44, 0x4033, 0xba7e, 0xad85, 0x4045, 0x1bc4, 0x43b8, 0x43ed, 0x10c5, 0x4200, 0x4330, 0x44cd, 0x36e3, 0x4004, 0x4114, 0x438e, 0xba11, 0x4297, 0x19b2, 0x4222, 0xa7bb, 0xbfb4, 0xb0db, 0xba70, 0x430d, 0x4017, 0x1848, 0x1390, 0x4078, 0x4204, 0x42df, 0xba34, 0x414f, 0x4353, 0x4205, 0x01ea, 0xb249, 0xbf17, 0x4208, 0x42a3, 0x456e, 0xba29, 0xbf32, 0x430b, 0x19a9, 0xb09a, 0x41e6, 0xb0a6, 0x401f, 0xa293, 0x40bc, 0x1df0, 0x40df, 0x3ec9, 0x063a, 0x4255, 0xba51, 0xbf34, 0x405f, 0xb0d1, 0x3863, 0x0052, 0x1541, 0xa37a, 0x429d, 0x4285, 0x2a8b, 0xbf8b, 0x429e, 0x1dc2, 0x4193, 0xb249, 0xb0fe, 0x4135, 0x1864, 0xa8fd, 0xbfc0, 0x23fa, 0x4029, 0xb2b7, 0x4319, 0x408a, 0x4315, 0x4221, 0x1257, 0xb041, 0x0dcb, 0xbfb3, 0x4262, 0xb293, 0xbac4, 0xb20c, 0xa4ca, 0xbad8, 0x4215, 0x4188, 0x401a, 0x1a27, 0x41ce, 0xb282, 0x0e98, 0x4075, 0x40a9, 0xbafe, 0x3362, 0xb25e, 0x4165, 0x1cb7, 0x4025, 0x374e, 0xb2ac, 0x1b9c, 0xb28a, 0xbacb, 0xbf57, 0x2d7c, 0xb010, 0xa274, 0x3dab, 0x41a6, 0x44b9, 0x3456, 0xa547, 0x4304, 0x4056, 0x4359, 0x1e93, 0x416e, 0x4009, 0xba31, 0xbf6f, 0x410e, 0x40ac, 0x1854, 0xb0c6, 0xba4c, 0xa9db, 0xb2c3, 0x1cc0, 0x053b, 0xbf51, 0x04d7, 0x44f3, 0x4598, 0x4157, 0x4483, 0xb2f7, 0xbf5a, 0x40f9, 0x4075, 0xa00f, 0xbae4, 0xb0d9, 0x3a47, 0xbaec, 0x43b8, 0xb28f, 0x4308, 0xa8af, 0x4159, 0xb2c7, 0x4025, 0x2d96, 0x406f, 0xb28e, 0xb0e9, 0xbf44, 0xb2ba, 0x4236, 0x0e9d, 0x43cf, 0x420d, 0xb2f9, 0xb228, 0xb038, 0x42de, 0xb283, 0x43a7, 0x013a, 0xba3d, 0xb208, 0xa6da, 0x44fa, 0xb2cf, 0x3eb1, 0x1b4e, 0x404b, 0xbf60, 0xb2ae, 0x43a6, 0x44cb, 0x4297, 0xa637, 0x403f, 0xbfd8, 0xbfe0, 0x40ee, 0x41ed, 0x407c, 0x1927, 0x1c96, 0x4239, 0x19b4, 0xb25c, 0xbf3d, 0x20cf, 0xb025, 0xb2a8, 0x1849, 0x297d, 0x427e, 0x15b8, 0x42df, 0x4050, 0xb2fa, 0x4151, 0xbf3d, 0x267a, 0xb23f, 0x4098, 0x42cf, 0x4770, 0xe7fe + ], + StartRegs = [0xc83b3c92, 0xbd911bb4, 0xd5a5a9bb, 0xeab26e45, 0xe6aa6cea, 0xa200e8c6, 0x4e453677, 0x79cc53e1, 0x299e08fa, 0xe4a48c55, 0x96623e63, 0x103ae3c6, 0x15c81382, 0xac554abf, 0x00000000, 0x900001f0 + ], + FinalRegs = [0x00000000, 0x000001fd, 0x000000fe, 0x000000fd, 0xfffffffd, 0xff5e0000, 0x0000007a, 0x000043fe, 0xbfc51110, 0x00001384, 0x966255f3, 0x00004087, 0xfffffea7, 0xac554d4d, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0xba07, 0x1e95, 0x30c3, 0x4194, 0x2be0, 0x1a8a, 0x404b, 0x4110, 0x4339, 0x444c, 0x46ec, 0xb2bb, 0xba43, 0x2218, 0x4228, 0x40af, 0xa05c, 0xb02b, 0xb297, 0xb2a6, 0x41fe, 0xbf38, 0x43f7, 0x43a4, 0x06aa, 0x41ce, 0x4586, 0x42ed, 0xbafd, 0xb020, 0x4274, 0xa264, 0x356c, 0x43f1, 0x3264, 0xac1d, 0xb252, 0x430b, 0xab27, 0xb2e9, 0xbf90, 0x1aea, 0xbfdb, 0x193b, 0x4338, 0x1bee, 0xb2c8, 0xbac2, 0x420f, 0xbf0d, 0x4206, 0xb266, 0x2a23, 0xbae6, 0x40ff, 0xbfb0, 0xb06e, 0x1a93, 0x1bfa, 0x3b77, 0x4167, 0x420b, 0xba05, 0x2a9d, 0xba3d, 0x431f, 0xba6f, 0x41e5, 0x406a, 0x307a, 0x4298, 0x41cc, 0xb202, 0xb0a0, 0xafbe, 0xbfde, 0x4625, 0x43f4, 0x1b22, 0x41c9, 0x0924, 0xbac1, 0x424e, 0x4024, 0xbf28, 0x4128, 0xb2f2, 0xa079, 0xb078, 0xb252, 0x2be8, 0x41f0, 0x4207, 0x035e, 0x42cc, 0x3a3d, 0x43d3, 0xb2ac, 0xb2e1, 0x40ec, 0xa1c3, 0xb0ae, 0xb226, 0x4084, 0xb0b4, 0xae1e, 0xb206, 0xbf2c, 0x3a9c, 0x42e1, 0x40a8, 0x0650, 0xbfe0, 0x1d2d, 0x1ddf, 0x40fe, 0xbaf2, 0x400a, 0x01fa, 0x1bc9, 0x45bc, 0x4111, 0x467b, 0x1255, 0xa90c, 0x422e, 0x1d2f, 0x00a2, 0x434f, 0x383d, 0x3bbd, 0x41b1, 0x42c7, 0xb2d2, 0x0a93, 0xbf73, 0x403d, 0xba68, 0x428b, 0xb087, 0x1943, 0x1ea1, 0x1cfe, 0x43b4, 0x1c92, 0xb215, 0x1ffa, 0xb20e, 0x40a8, 0x0631, 0xb2fe, 0x42fb, 0x4690, 0xb2e8, 0x411b, 0xa461, 0x415d, 0xb0dd, 0xbfdc, 0xbac6, 0x40b3, 0xb269, 0xb2c0, 0x10c9, 0xbac9, 0xba5d, 0x40c1, 0xbf6e, 0xa5fa, 0x1681, 0xb0da, 0x1f93, 0xb20c, 0x4624, 0xb067, 0x414c, 0x179d, 0xba2a, 0x41f6, 0x4320, 0xbf90, 0x430e, 0x45b1, 0x4008, 0x4273, 0x1619, 0xbf18, 0x093d, 0x42f5, 0x101c, 0x408e, 0xb2a8, 0x4068, 0xba64, 0x1b43, 0x445e, 0x4130, 0x424f, 0x1af2, 0xb2a9, 0xb2c7, 0x1aeb, 0x0e84, 0xb2fc, 0x42a0, 0x06a4, 0x408a, 0xbf8f, 0x40e0, 0xbf70, 0x4673, 0x3809, 0x432d, 0x4011, 0x41de, 0xb03e, 0x42e6, 0xbaf3, 0xb0ef, 0x40e5, 0x4616, 0x40e3, 0x445b, 0xbf60, 0x46d3, 0x41a9, 0x4012, 0x189d, 0xba3b, 0x42ea, 0x418b, 0xbfba, 0x4306, 0x4106, 0x4177, 0x1a98, 0x1fa5, 0x4220, 0x466e, 0xb272, 0x42ab, 0xae2c, 0x41d9, 0x4335, 0x400a, 0xbf80, 0x34cf, 0x060e, 0xb233, 0xba1c, 0x2797, 0xb0a7, 0x446d, 0xb265, 0xadc0, 0xaf88, 0xbf5b, 0x418b, 0x40b3, 0xa037, 0x40fc, 0x4186, 0x4294, 0x43d1, 0x415d, 0x43a0, 0x438f, 0xbf9e, 0x461d, 0x198d, 0x388a, 0xada6, 0x41f7, 0x4335, 0xb24f, 0x2507, 0x1d8e, 0xb29a, 0x1f43, 0x42d2, 0xbae6, 0x42de, 0xa28d, 0x1aeb, 0x43dd, 0x40f9, 0x4253, 0x22a2, 0xa9b0, 0xb232, 0xbacb, 0xba56, 0xa533, 0xba38, 0x4154, 0xba5c, 0xbf15, 0x35e5, 0xb2c0, 0x43ce, 0x0e9c, 0x46eb, 0xbfc0, 0x40eb, 0x44fc, 0x42f3, 0x4337, 0x439c, 0x1aa7, 0x435e, 0x4215, 0x0762, 0x4186, 0x403d, 0x41b2, 0xbf5a, 0x42dc, 0x4097, 0x40f6, 0xb284, 0xba73, 0x4648, 0x408f, 0x407a, 0x1cd9, 0x4446, 0x43aa, 0xbf12, 0x11a8, 0x4164, 0x11f9, 0xae18, 0xb0c6, 0xb0de, 0x43af, 0x405a, 0x4328, 0x4236, 0xace1, 0xa3a0, 0xa0ac, 0x1c62, 0x1dc2, 0x431e, 0xba78, 0x433c, 0x42f8, 0x467f, 0x102a, 0xba5f, 0x422f, 0x4168, 0x431e, 0xa297, 0xbf41, 0x1ac0, 0xb0c8, 0xb2b8, 0x4290, 0x1a1a, 0x2d4d, 0x409e, 0x1b2d, 0x430c, 0xbfe1, 0x41e9, 0xba38, 0x1dc3, 0x400f, 0xba5e, 0x4158, 0xb011, 0x43bb, 0x40f6, 0x1d74, 0xba3c, 0x1af3, 0x4607, 0x2a9a, 0x44c8, 0x40cd, 0x43cd, 0x4253, 0x0b40, 0x419c, 0x1afb, 0x405f, 0x1664, 0xb076, 0x3250, 0x3abc, 0x4282, 0x425d, 0xbf8a, 0xb0dc, 0x2556, 0x41d1, 0x4251, 0x4046, 0x14af, 0x1b2e, 0xb22f, 0x1cbc, 0xb21d, 0x401d, 0x18e1, 0x436a, 0xbfd3, 0x07d1, 0xb2df, 0x24c2, 0x416b, 0x1bd4, 0x1d69, 0x4172, 0x4049, 0x3a4d, 0xacb4, 0x19c2, 0x45a5, 0x1236, 0x2647, 0x3ed1, 0xb03f, 0x43f8, 0xac19, 0x41b9, 0xbf34, 0xba5f, 0xb23c, 0x238f, 0xba3e, 0x4630, 0x4376, 0xb263, 0xb261, 0x431e, 0x4069, 0x1a93, 0x407f, 0x4000, 0x40a3, 0x42c8, 0xbfd4, 0x4322, 0xb2e4, 0xb0ad, 0xb2e1, 0xb273, 0xb203, 0x4064, 0x43b4, 0x144b, 0x41a3, 0x4143, 0xacf2, 0xa4dc, 0xbfe2, 0x4101, 0x406d, 0x4075, 0xba34, 0xb0e0, 0x4010, 0xb247, 0x437a, 0x2989, 0x4375, 0x290c, 0x464a, 0x43b0, 0xb201, 0x4320, 0x4097, 0x2155, 0xaa34, 0x1967, 0xb211, 0x3a11, 0x1522, 0xba36, 0x1b4a, 0xbf6d, 0xb216, 0xb2e3, 0x1c04, 0xa4c9, 0x1b2f, 0xbfe0, 0x43bb, 0xb2af, 0xa800, 0xbf90, 0x4016, 0xba5e, 0xbf7c, 0x4193, 0x19a4, 0x1235, 0x0b1f, 0x429d, 0x2f62, 0x43d7, 0x4341, 0x2659, 0xba31, 0x094f, 0x44db, 0x4034, 0x418e, 0x1f48, 0x46a2, 0xba6a, 0xbf4d, 0xb23d, 0x404d, 0x4111, 0x0d4b, 0x40fd, 0x41d2, 0x403e, 0x30ee, 0xb26f, 0x1ebb, 0x4201, 0xa2a4, 0x402e, 0x40df, 0x2596, 0x4395, 0x2ab3, 0xb276, 0x4287, 0x14a6, 0x4313, 0xbf85, 0x1cc0, 0x46cc, 0x440b, 0x243b, 0x4123, 0x15af, 0x40ae, 0x4336, 0x41b3, 0xb207, 0x40b7, 0x40ea, 0x4288, 0xa9af, 0x40ae, 0x4173, 0x4293, 0x40a2, 0x2d32, 0x12f0, 0x4265, 0x339c, 0x2d1d, 0x4273, 0x4033, 0xb273, 0xa8dd, 0x4088, 0x4393, 0xbf85, 0x200b, 0xbfc0, 0x4370, 0x416a, 0xba73, 0xbafc, 0x40d6, 0xb20a, 0x09bc, 0x366a, 0x3509, 0xbf84, 0x2e0f, 0x419a, 0xb06a, 0x41cd, 0x4115, 0x433e, 0x1cdb, 0x42d0, 0x46f3, 0xb06c, 0x388e, 0x43b6, 0x41ed, 0x190c, 0x43ab, 0x1654, 0x4043, 0x427d, 0x0edd, 0x4022, 0xbaca, 0x0775, 0x18b0, 0xa255, 0xbfb9, 0x1cb8, 0x41c3, 0xb245, 0xa4a7, 0x07dd, 0x37c1, 0x41fb, 0x42d0, 0x349d, 0x42db, 0xbf9b, 0xba23, 0x40a2, 0x43f6, 0x43d2, 0xba6f, 0x368e, 0x4004, 0x1d3f, 0x43ee, 0x4127, 0xbf80, 0xbaec, 0x410a, 0x2bd6, 0x2a9f, 0x40cc, 0x40dc, 0xba0b, 0x43c4, 0x4554, 0x1afc, 0xa651, 0x1ebe, 0x41aa, 0xbf60, 0xb23f, 0xa420, 0xbf4b, 0x4412, 0x4168, 0xb200, 0x42bd, 0x4439, 0x188c, 0x0cce, 0x43a1, 0x1936, 0x36b8, 0x41a5, 0x1fd1, 0x193d, 0x44c9, 0x38d3, 0x40d8, 0xb22e, 0xbfac, 0x1893, 0x2638, 0x17ae, 0x404a, 0x44c8, 0xb257, 0x4097, 0x4328, 0x414e, 0x1e25, 0x424e, 0x41f0, 0x08f4, 0xbfd0, 0xb081, 0x4348, 0x4062, 0x43af, 0xb2fa, 0xbfdf, 0xad9a, 0x14a9, 0x1b10, 0x40c4, 0x430b, 0xba6c, 0xbaee, 0x4670, 0x40cf, 0x415c, 0xb29c, 0x4095, 0xa03c, 0x45f3, 0xbfa0, 0x1b48, 0xbf53, 0xad0c, 0x1f88, 0x3697, 0x42a2, 0x2c12, 0x2442, 0xbad7, 0xa0c2, 0xb277, 0xb0d9, 0x43e8, 0xa0c3, 0x4006, 0x4399, 0xbfca, 0x0cbc, 0xb261, 0x2cc7, 0x417e, 0x40d9, 0x43f3, 0xb27c, 0x09c8, 0xb0b9, 0x125f, 0x429f, 0xbfc3, 0x3d9c, 0x0f46, 0x0047, 0x4258, 0x4081, 0x1968, 0x45a1, 0x292c, 0x4002, 0x4463, 0x1a41, 0x414a, 0xba3f, 0x3ebb, 0x152e, 0x41f9, 0xb25f, 0x4005, 0x36c5, 0x22ec, 0xba69, 0x1ab9, 0x32de, 0xba32, 0x1867, 0xb296, 0xb2c2, 0x06f3, 0xb2e9, 0xbf8d, 0x1ea4, 0x406a, 0x46ad, 0xbacc, 0x4677, 0x4097, 0xbfa0, 0x2090, 0x0a7d, 0x400a, 0x42b6, 0xba75, 0xbaf3, 0x43e5, 0xa474, 0x419e, 0x4425, 0x3cd2, 0x46fc, 0x4043, 0xbfc5, 0x32fe, 0xaf8a, 0x1802, 0x1dfe, 0x432f, 0xb002, 0x42ef, 0xba54, 0x363d, 0x1fc4, 0x4619, 0x4206, 0x4247, 0xb0ef, 0xac69, 0xb276, 0x45b6, 0x4322, 0x3c86, 0x42fd, 0xbf5c, 0x1e9d, 0x0ef5, 0x4118, 0xb037, 0x315b, 0x42a2, 0xb083, 0x4245, 0xba51, 0x46f9, 0xbf70, 0x34d3, 0xb281, 0x43b7, 0xba6b, 0xb0d4, 0xba17, 0x431b, 0x4084, 0x425a, 0x0967, 0x40e1, 0x4571, 0x4429, 0xbf87, 0xb265, 0x4011, 0x4066, 0xba0f, 0xb0f6, 0x4334, 0x1a54, 0x0d0c, 0xb271, 0x4394, 0xbf48, 0x1fae, 0xac17, 0x1fea, 0xb2d6, 0x2631, 0x3ebb, 0x1d7f, 0x46c4, 0xba4f, 0xbf7b, 0x45aa, 0x4240, 0x3de4, 0xbafa, 0x41c2, 0x45b5, 0xba4c, 0x4129, 0x4202, 0x4489, 0x4220, 0x43f3, 0xbfd0, 0x421e, 0xbfa0, 0x0784, 0x4181, 0x42f5, 0x42ae, 0xbfb6, 0x40f3, 0xbaf7, 0x030d, 0x430c, 0xb024, 0x4162, 0x4055, 0x444b, 0x4278, 0xb2f9, 0xbfc5, 0x2d34, 0x41c2, 0x4260, 0xa8c5, 0x0235, 0xb0a5, 0x44b0, 0x2efc, 0x1bbd, 0x41d0, 0x062f, 0xbfba, 0xb25a, 0xb023, 0x46fa, 0xbac7, 0xbfd0, 0x0a43, 0xbf14, 0x3ff5, 0x4073, 0x4130, 0x41a7, 0x2bd7, 0xbf90, 0xb2e5, 0x4030, 0x41bb, 0x4262, 0x2062, 0x4021, 0xb266, 0x1a01, 0x4264, 0xb234, 0x40cb, 0x425d, 0x25e2, 0x414a, 0x3c20, 0xb0ea, 0xa1c7, 0x14e0, 0xbfb7, 0x4170, 0x42fc, 0x43d7, 0x4580, 0xb26d, 0x1a13, 0x44dc, 0xb244, 0x00e2, 0xb088, 0x422a, 0xb203, 0x1ac1, 0xba09, 0xa3ad, 0xbfd0, 0x1c62, 0xbf26, 0x02ce, 0x167e, 0x4108, 0x1b88, 0x4351, 0x4259, 0xb05d, 0x40e7, 0xbf00, 0x42aa, 0x1aac, 0xb201, 0xb036, 0xba1c, 0x429f, 0x033c, 0x462b, 0xa687, 0xbf60, 0x4216, 0xb2b0, 0xb24c, 0x4381, 0xbf75, 0x3c94, 0x4360, 0x143b, 0x40a5, 0xbaca, 0x32ca, 0x109f, 0x353e, 0x1e88, 0x4123, 0x1418, 0x4040, 0x40ae, 0x4332, 0x134c, 0x4211, 0x4271, 0x1ddd, 0x2885, 0x431f, 0xbfc5, 0x1dc1, 0x4296, 0xb2af, 0xb2b3, 0xb2d0, 0x2abd, 0x296b, 0x3323, 0x418f, 0x438a, 0xa4d6, 0x1ae8, 0x0ab5, 0x4173, 0xb095, 0x42db, 0xb226, 0xb03d, 0xbf2f, 0xb210, 0xb247, 0x437f, 0xb2f5, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x804206f6, 0x99583a3f, 0xad754391, 0x26941fad, 0x139e5e23, 0x688cb146, 0x1ba6feec, 0x7e394ee6, 0x68aeb641, 0x77239003, 0x176ac985, 0x4d825eb1, 0xa99614a6, 0x1716467f, 0x00000000, 0x900001f0 }, - FinalRegs = new uint[] { 0xffffffe4, 0x00000000, 0x000021b0, 0x00000023, 0x00001b18, 0x00000018, 0x00001b18, 0x00000310, 0x4a3eb53f, 0x0000169f, 0x00000010, 0x00000000, 0x4a3eb5c9, 0x0603ff82, 0x00000000, 0x000001d0 }, + Instructions = [0xba07, 0x1e95, 0x30c3, 0x4194, 0x2be0, 0x1a8a, 0x404b, 0x4110, 0x4339, 0x444c, 0x46ec, 0xb2bb, 0xba43, 0x2218, 0x4228, 0x40af, 0xa05c, 0xb02b, 0xb297, 0xb2a6, 0x41fe, 0xbf38, 0x43f7, 0x43a4, 0x06aa, 0x41ce, 0x4586, 0x42ed, 0xbafd, 0xb020, 0x4274, 0xa264, 0x356c, 0x43f1, 0x3264, 0xac1d, 0xb252, 0x430b, 0xab27, 0xb2e9, 0xbf90, 0x1aea, 0xbfdb, 0x193b, 0x4338, 0x1bee, 0xb2c8, 0xbac2, 0x420f, 0xbf0d, 0x4206, 0xb266, 0x2a23, 0xbae6, 0x40ff, 0xbfb0, 0xb06e, 0x1a93, 0x1bfa, 0x3b77, 0x4167, 0x420b, 0xba05, 0x2a9d, 0xba3d, 0x431f, 0xba6f, 0x41e5, 0x406a, 0x307a, 0x4298, 0x41cc, 0xb202, 0xb0a0, 0xafbe, 0xbfde, 0x4625, 0x43f4, 0x1b22, 0x41c9, 0x0924, 0xbac1, 0x424e, 0x4024, 0xbf28, 0x4128, 0xb2f2, 0xa079, 0xb078, 0xb252, 0x2be8, 0x41f0, 0x4207, 0x035e, 0x42cc, 0x3a3d, 0x43d3, 0xb2ac, 0xb2e1, 0x40ec, 0xa1c3, 0xb0ae, 0xb226, 0x4084, 0xb0b4, 0xae1e, 0xb206, 0xbf2c, 0x3a9c, 0x42e1, 0x40a8, 0x0650, 0xbfe0, 0x1d2d, 0x1ddf, 0x40fe, 0xbaf2, 0x400a, 0x01fa, 0x1bc9, 0x45bc, 0x4111, 0x467b, 0x1255, 0xa90c, 0x422e, 0x1d2f, 0x00a2, 0x434f, 0x383d, 0x3bbd, 0x41b1, 0x42c7, 0xb2d2, 0x0a93, 0xbf73, 0x403d, 0xba68, 0x428b, 0xb087, 0x1943, 0x1ea1, 0x1cfe, 0x43b4, 0x1c92, 0xb215, 0x1ffa, 0xb20e, 0x40a8, 0x0631, 0xb2fe, 0x42fb, 0x4690, 0xb2e8, 0x411b, 0xa461, 0x415d, 0xb0dd, 0xbfdc, 0xbac6, 0x40b3, 0xb269, 0xb2c0, 0x10c9, 0xbac9, 0xba5d, 0x40c1, 0xbf6e, 0xa5fa, 0x1681, 0xb0da, 0x1f93, 0xb20c, 0x4624, 0xb067, 0x414c, 0x179d, 0xba2a, 0x41f6, 0x4320, 0xbf90, 0x430e, 0x45b1, 0x4008, 0x4273, 0x1619, 0xbf18, 0x093d, 0x42f5, 0x101c, 0x408e, 0xb2a8, 0x4068, 0xba64, 0x1b43, 0x445e, 0x4130, 0x424f, 0x1af2, 0xb2a9, 0xb2c7, 0x1aeb, 0x0e84, 0xb2fc, 0x42a0, 0x06a4, 0x408a, 0xbf8f, 0x40e0, 0xbf70, 0x4673, 0x3809, 0x432d, 0x4011, 0x41de, 0xb03e, 0x42e6, 0xbaf3, 0xb0ef, 0x40e5, 0x4616, 0x40e3, 0x445b, 0xbf60, 0x46d3, 0x41a9, 0x4012, 0x189d, 0xba3b, 0x42ea, 0x418b, 0xbfba, 0x4306, 0x4106, 0x4177, 0x1a98, 0x1fa5, 0x4220, 0x466e, 0xb272, 0x42ab, 0xae2c, 0x41d9, 0x4335, 0x400a, 0xbf80, 0x34cf, 0x060e, 0xb233, 0xba1c, 0x2797, 0xb0a7, 0x446d, 0xb265, 0xadc0, 0xaf88, 0xbf5b, 0x418b, 0x40b3, 0xa037, 0x40fc, 0x4186, 0x4294, 0x43d1, 0x415d, 0x43a0, 0x438f, 0xbf9e, 0x461d, 0x198d, 0x388a, 0xada6, 0x41f7, 0x4335, 0xb24f, 0x2507, 0x1d8e, 0xb29a, 0x1f43, 0x42d2, 0xbae6, 0x42de, 0xa28d, 0x1aeb, 0x43dd, 0x40f9, 0x4253, 0x22a2, 0xa9b0, 0xb232, 0xbacb, 0xba56, 0xa533, 0xba38, 0x4154, 0xba5c, 0xbf15, 0x35e5, 0xb2c0, 0x43ce, 0x0e9c, 0x46eb, 0xbfc0, 0x40eb, 0x44fc, 0x42f3, 0x4337, 0x439c, 0x1aa7, 0x435e, 0x4215, 0x0762, 0x4186, 0x403d, 0x41b2, 0xbf5a, 0x42dc, 0x4097, 0x40f6, 0xb284, 0xba73, 0x4648, 0x408f, 0x407a, 0x1cd9, 0x4446, 0x43aa, 0xbf12, 0x11a8, 0x4164, 0x11f9, 0xae18, 0xb0c6, 0xb0de, 0x43af, 0x405a, 0x4328, 0x4236, 0xace1, 0xa3a0, 0xa0ac, 0x1c62, 0x1dc2, 0x431e, 0xba78, 0x433c, 0x42f8, 0x467f, 0x102a, 0xba5f, 0x422f, 0x4168, 0x431e, 0xa297, 0xbf41, 0x1ac0, 0xb0c8, 0xb2b8, 0x4290, 0x1a1a, 0x2d4d, 0x409e, 0x1b2d, 0x430c, 0xbfe1, 0x41e9, 0xba38, 0x1dc3, 0x400f, 0xba5e, 0x4158, 0xb011, 0x43bb, 0x40f6, 0x1d74, 0xba3c, 0x1af3, 0x4607, 0x2a9a, 0x44c8, 0x40cd, 0x43cd, 0x4253, 0x0b40, 0x419c, 0x1afb, 0x405f, 0x1664, 0xb076, 0x3250, 0x3abc, 0x4282, 0x425d, 0xbf8a, 0xb0dc, 0x2556, 0x41d1, 0x4251, 0x4046, 0x14af, 0x1b2e, 0xb22f, 0x1cbc, 0xb21d, 0x401d, 0x18e1, 0x436a, 0xbfd3, 0x07d1, 0xb2df, 0x24c2, 0x416b, 0x1bd4, 0x1d69, 0x4172, 0x4049, 0x3a4d, 0xacb4, 0x19c2, 0x45a5, 0x1236, 0x2647, 0x3ed1, 0xb03f, 0x43f8, 0xac19, 0x41b9, 0xbf34, 0xba5f, 0xb23c, 0x238f, 0xba3e, 0x4630, 0x4376, 0xb263, 0xb261, 0x431e, 0x4069, 0x1a93, 0x407f, 0x4000, 0x40a3, 0x42c8, 0xbfd4, 0x4322, 0xb2e4, 0xb0ad, 0xb2e1, 0xb273, 0xb203, 0x4064, 0x43b4, 0x144b, 0x41a3, 0x4143, 0xacf2, 0xa4dc, 0xbfe2, 0x4101, 0x406d, 0x4075, 0xba34, 0xb0e0, 0x4010, 0xb247, 0x437a, 0x2989, 0x4375, 0x290c, 0x464a, 0x43b0, 0xb201, 0x4320, 0x4097, 0x2155, 0xaa34, 0x1967, 0xb211, 0x3a11, 0x1522, 0xba36, 0x1b4a, 0xbf6d, 0xb216, 0xb2e3, 0x1c04, 0xa4c9, 0x1b2f, 0xbfe0, 0x43bb, 0xb2af, 0xa800, 0xbf90, 0x4016, 0xba5e, 0xbf7c, 0x4193, 0x19a4, 0x1235, 0x0b1f, 0x429d, 0x2f62, 0x43d7, 0x4341, 0x2659, 0xba31, 0x094f, 0x44db, 0x4034, 0x418e, 0x1f48, 0x46a2, 0xba6a, 0xbf4d, 0xb23d, 0x404d, 0x4111, 0x0d4b, 0x40fd, 0x41d2, 0x403e, 0x30ee, 0xb26f, 0x1ebb, 0x4201, 0xa2a4, 0x402e, 0x40df, 0x2596, 0x4395, 0x2ab3, 0xb276, 0x4287, 0x14a6, 0x4313, 0xbf85, 0x1cc0, 0x46cc, 0x440b, 0x243b, 0x4123, 0x15af, 0x40ae, 0x4336, 0x41b3, 0xb207, 0x40b7, 0x40ea, 0x4288, 0xa9af, 0x40ae, 0x4173, 0x4293, 0x40a2, 0x2d32, 0x12f0, 0x4265, 0x339c, 0x2d1d, 0x4273, 0x4033, 0xb273, 0xa8dd, 0x4088, 0x4393, 0xbf85, 0x200b, 0xbfc0, 0x4370, 0x416a, 0xba73, 0xbafc, 0x40d6, 0xb20a, 0x09bc, 0x366a, 0x3509, 0xbf84, 0x2e0f, 0x419a, 0xb06a, 0x41cd, 0x4115, 0x433e, 0x1cdb, 0x42d0, 0x46f3, 0xb06c, 0x388e, 0x43b6, 0x41ed, 0x190c, 0x43ab, 0x1654, 0x4043, 0x427d, 0x0edd, 0x4022, 0xbaca, 0x0775, 0x18b0, 0xa255, 0xbfb9, 0x1cb8, 0x41c3, 0xb245, 0xa4a7, 0x07dd, 0x37c1, 0x41fb, 0x42d0, 0x349d, 0x42db, 0xbf9b, 0xba23, 0x40a2, 0x43f6, 0x43d2, 0xba6f, 0x368e, 0x4004, 0x1d3f, 0x43ee, 0x4127, 0xbf80, 0xbaec, 0x410a, 0x2bd6, 0x2a9f, 0x40cc, 0x40dc, 0xba0b, 0x43c4, 0x4554, 0x1afc, 0xa651, 0x1ebe, 0x41aa, 0xbf60, 0xb23f, 0xa420, 0xbf4b, 0x4412, 0x4168, 0xb200, 0x42bd, 0x4439, 0x188c, 0x0cce, 0x43a1, 0x1936, 0x36b8, 0x41a5, 0x1fd1, 0x193d, 0x44c9, 0x38d3, 0x40d8, 0xb22e, 0xbfac, 0x1893, 0x2638, 0x17ae, 0x404a, 0x44c8, 0xb257, 0x4097, 0x4328, 0x414e, 0x1e25, 0x424e, 0x41f0, 0x08f4, 0xbfd0, 0xb081, 0x4348, 0x4062, 0x43af, 0xb2fa, 0xbfdf, 0xad9a, 0x14a9, 0x1b10, 0x40c4, 0x430b, 0xba6c, 0xbaee, 0x4670, 0x40cf, 0x415c, 0xb29c, 0x4095, 0xa03c, 0x45f3, 0xbfa0, 0x1b48, 0xbf53, 0xad0c, 0x1f88, 0x3697, 0x42a2, 0x2c12, 0x2442, 0xbad7, 0xa0c2, 0xb277, 0xb0d9, 0x43e8, 0xa0c3, 0x4006, 0x4399, 0xbfca, 0x0cbc, 0xb261, 0x2cc7, 0x417e, 0x40d9, 0x43f3, 0xb27c, 0x09c8, 0xb0b9, 0x125f, 0x429f, 0xbfc3, 0x3d9c, 0x0f46, 0x0047, 0x4258, 0x4081, 0x1968, 0x45a1, 0x292c, 0x4002, 0x4463, 0x1a41, 0x414a, 0xba3f, 0x3ebb, 0x152e, 0x41f9, 0xb25f, 0x4005, 0x36c5, 0x22ec, 0xba69, 0x1ab9, 0x32de, 0xba32, 0x1867, 0xb296, 0xb2c2, 0x06f3, 0xb2e9, 0xbf8d, 0x1ea4, 0x406a, 0x46ad, 0xbacc, 0x4677, 0x4097, 0xbfa0, 0x2090, 0x0a7d, 0x400a, 0x42b6, 0xba75, 0xbaf3, 0x43e5, 0xa474, 0x419e, 0x4425, 0x3cd2, 0x46fc, 0x4043, 0xbfc5, 0x32fe, 0xaf8a, 0x1802, 0x1dfe, 0x432f, 0xb002, 0x42ef, 0xba54, 0x363d, 0x1fc4, 0x4619, 0x4206, 0x4247, 0xb0ef, 0xac69, 0xb276, 0x45b6, 0x4322, 0x3c86, 0x42fd, 0xbf5c, 0x1e9d, 0x0ef5, 0x4118, 0xb037, 0x315b, 0x42a2, 0xb083, 0x4245, 0xba51, 0x46f9, 0xbf70, 0x34d3, 0xb281, 0x43b7, 0xba6b, 0xb0d4, 0xba17, 0x431b, 0x4084, 0x425a, 0x0967, 0x40e1, 0x4571, 0x4429, 0xbf87, 0xb265, 0x4011, 0x4066, 0xba0f, 0xb0f6, 0x4334, 0x1a54, 0x0d0c, 0xb271, 0x4394, 0xbf48, 0x1fae, 0xac17, 0x1fea, 0xb2d6, 0x2631, 0x3ebb, 0x1d7f, 0x46c4, 0xba4f, 0xbf7b, 0x45aa, 0x4240, 0x3de4, 0xbafa, 0x41c2, 0x45b5, 0xba4c, 0x4129, 0x4202, 0x4489, 0x4220, 0x43f3, 0xbfd0, 0x421e, 0xbfa0, 0x0784, 0x4181, 0x42f5, 0x42ae, 0xbfb6, 0x40f3, 0xbaf7, 0x030d, 0x430c, 0xb024, 0x4162, 0x4055, 0x444b, 0x4278, 0xb2f9, 0xbfc5, 0x2d34, 0x41c2, 0x4260, 0xa8c5, 0x0235, 0xb0a5, 0x44b0, 0x2efc, 0x1bbd, 0x41d0, 0x062f, 0xbfba, 0xb25a, 0xb023, 0x46fa, 0xbac7, 0xbfd0, 0x0a43, 0xbf14, 0x3ff5, 0x4073, 0x4130, 0x41a7, 0x2bd7, 0xbf90, 0xb2e5, 0x4030, 0x41bb, 0x4262, 0x2062, 0x4021, 0xb266, 0x1a01, 0x4264, 0xb234, 0x40cb, 0x425d, 0x25e2, 0x414a, 0x3c20, 0xb0ea, 0xa1c7, 0x14e0, 0xbfb7, 0x4170, 0x42fc, 0x43d7, 0x4580, 0xb26d, 0x1a13, 0x44dc, 0xb244, 0x00e2, 0xb088, 0x422a, 0xb203, 0x1ac1, 0xba09, 0xa3ad, 0xbfd0, 0x1c62, 0xbf26, 0x02ce, 0x167e, 0x4108, 0x1b88, 0x4351, 0x4259, 0xb05d, 0x40e7, 0xbf00, 0x42aa, 0x1aac, 0xb201, 0xb036, 0xba1c, 0x429f, 0x033c, 0x462b, 0xa687, 0xbf60, 0x4216, 0xb2b0, 0xb24c, 0x4381, 0xbf75, 0x3c94, 0x4360, 0x143b, 0x40a5, 0xbaca, 0x32ca, 0x109f, 0x353e, 0x1e88, 0x4123, 0x1418, 0x4040, 0x40ae, 0x4332, 0x134c, 0x4211, 0x4271, 0x1ddd, 0x2885, 0x431f, 0xbfc5, 0x1dc1, 0x4296, 0xb2af, 0xb2b3, 0xb2d0, 0x2abd, 0x296b, 0x3323, 0x418f, 0x438a, 0xa4d6, 0x1ae8, 0x0ab5, 0x4173, 0xb095, 0x42db, 0xb226, 0xb03d, 0xbf2f, 0xb210, 0xb247, 0x437f, 0xb2f5, 0x4770, 0xe7fe + ], + StartRegs = [0x804206f6, 0x99583a3f, 0xad754391, 0x26941fad, 0x139e5e23, 0x688cb146, 0x1ba6feec, 0x7e394ee6, 0x68aeb641, 0x77239003, 0x176ac985, 0x4d825eb1, 0xa99614a6, 0x1716467f, 0x00000000, 0x900001f0 + ], + FinalRegs = [0xffffffe4, 0x00000000, 0x000021b0, 0x00000023, 0x00001b18, 0x00000018, 0x00001b18, 0x00000310, 0x4a3eb53f, 0x0000169f, 0x00000010, 0x00000000, 0x4a3eb5c9, 0x0603ff82, 0x00000000, 0x000001d0 + ], }, new() { - Instructions = new ushort[] { 0x42b1, 0x434a, 0x1868, 0x1910, 0x4205, 0x3246, 0x2096, 0x439d, 0xba7d, 0xba78, 0x180e, 0xa168, 0xafc3, 0x40e6, 0xb2c6, 0xbf60, 0xbf80, 0x46ca, 0x2a71, 0xa766, 0xb269, 0x1f80, 0x14d9, 0x4050, 0xb209, 0xbf72, 0x0b06, 0x4024, 0x41fe, 0xa917, 0xba63, 0xb282, 0x41f2, 0x4171, 0x4288, 0x23f7, 0x032e, 0x4043, 0xb23d, 0xbf12, 0x430e, 0x1c8f, 0x1851, 0x4341, 0x0360, 0x4090, 0x2675, 0x4281, 0x411e, 0x4255, 0xba5b, 0xb283, 0x1af5, 0xb28d, 0xbf33, 0x41ed, 0xb07c, 0xae17, 0x1e11, 0x19ce, 0xb296, 0x33f9, 0x4392, 0xbaf3, 0x40bd, 0x433e, 0x40f9, 0xa383, 0x1b86, 0x1c9f, 0xb096, 0xbf00, 0x4369, 0x42ce, 0x1708, 0x37f1, 0xbf11, 0x431e, 0x28cb, 0x245a, 0x434f, 0x4298, 0x0366, 0x1b85, 0x22a8, 0x4214, 0x42fc, 0x43ca, 0x33ae, 0x42da, 0x1828, 0xabe1, 0x40e4, 0x39be, 0x1a59, 0xb01f, 0xbfb8, 0xb20e, 0x41cc, 0xb2ce, 0x4122, 0xac37, 0x435d, 0xbfc3, 0x4261, 0xb071, 0x24ed, 0xbadd, 0xba07, 0x19a6, 0x1e22, 0x4241, 0x4265, 0xb2f8, 0x401a, 0xb043, 0x4034, 0xb236, 0xb28b, 0x3189, 0xb085, 0xb239, 0x4409, 0x429d, 0x41c2, 0x30cc, 0xbfdf, 0xbaea, 0x40da, 0xb247, 0x1e98, 0xb20e, 0xbad2, 0x4136, 0x1f95, 0xaf3a, 0x2cae, 0x427a, 0x4015, 0x409f, 0x025c, 0xafcb, 0xb20f, 0x43a1, 0x1b77, 0x4222, 0x400b, 0x42c5, 0x1f2f, 0xbfc7, 0xb2ce, 0x4608, 0x4694, 0x42cb, 0x2963, 0x3619, 0x41dd, 0x43ac, 0xb204, 0x3c86, 0xbf05, 0xbac9, 0x1f7c, 0xba2e, 0x0be5, 0x38aa, 0x41aa, 0xa6f7, 0x432b, 0x4124, 0x43fa, 0x1d2d, 0x42d4, 0x1acf, 0x465e, 0x1aa0, 0x32b0, 0x410a, 0x4205, 0xb0b0, 0xbf9c, 0x409d, 0x3b35, 0x1b4f, 0x43eb, 0x189c, 0xbfb3, 0x43f9, 0x42a9, 0x19b1, 0x45cc, 0x1f2f, 0x2d27, 0x1f79, 0x41aa, 0xb20a, 0x420d, 0x45e0, 0xbf1e, 0xb008, 0x4254, 0x2b5d, 0x2382, 0xbf6a, 0x416f, 0xba16, 0x11bf, 0x40de, 0x1a5a, 0x182a, 0x4051, 0x40a8, 0xbf92, 0x41bc, 0xa479, 0x44ed, 0xa6bd, 0x449d, 0x35e7, 0xa2eb, 0x3f57, 0xb0a6, 0x191c, 0x401b, 0xb265, 0x4155, 0x4227, 0x42a1, 0x3f24, 0x1de3, 0x4312, 0x434f, 0x467f, 0xbfce, 0x4054, 0x42c8, 0x18a8, 0x4355, 0x42ad, 0x4139, 0x0b84, 0x2b9b, 0x3f55, 0x42ba, 0xbfc5, 0xa96c, 0x33cc, 0x41c6, 0xba77, 0x405f, 0x4009, 0x4106, 0x1ace, 0x0146, 0xbf1a, 0x1e1b, 0x41fb, 0x42b8, 0xbf82, 0x3dac, 0xaba4, 0xa622, 0x42d3, 0xb060, 0xba3f, 0xbaf0, 0x41b1, 0x4030, 0x410b, 0x1f0b, 0x03e5, 0x42a7, 0x2640, 0x416b, 0xb261, 0x1eaa, 0x4118, 0xba72, 0x4083, 0xbf31, 0x3606, 0xbac0, 0x25ff, 0xa90b, 0xa970, 0x4680, 0xb219, 0x4312, 0xb2b2, 0x4400, 0x1f32, 0xba03, 0x4371, 0x420f, 0x424b, 0xba02, 0x41f4, 0x46c1, 0x3158, 0xab7d, 0xba0b, 0xba2b, 0x42a4, 0x3e0b, 0x02c5, 0x4039, 0x4111, 0xb2f1, 0x0250, 0xbf5d, 0xbaf8, 0x464c, 0x43e7, 0x1baf, 0x41a3, 0x45c1, 0x4369, 0x4113, 0x415e, 0xbff0, 0x2a72, 0x1e9d, 0xba79, 0x083f, 0x41fe, 0x418c, 0x467e, 0x4472, 0x4484, 0xbf62, 0x4671, 0x4698, 0x4141, 0x41d0, 0x29ea, 0x1d92, 0xba36, 0xba01, 0x188a, 0x3f58, 0x43ec, 0x4396, 0xa1b9, 0x4266, 0x40ba, 0x4122, 0x43a4, 0xb269, 0x401f, 0x18f0, 0xb241, 0x4119, 0xb07a, 0xbf95, 0x08c9, 0x37d4, 0x21c0, 0x43e4, 0x4165, 0x468a, 0x40b6, 0xba3b, 0x0e8d, 0xba2f, 0xb287, 0x4223, 0x1bab, 0xb2e8, 0x41dd, 0x4065, 0xbf6c, 0xb23f, 0x2e6d, 0xb2fa, 0x4252, 0x0c56, 0xa14e, 0x4313, 0x42c3, 0x427c, 0x41ca, 0x430f, 0x4187, 0x11c1, 0x17df, 0x40ac, 0xb2c7, 0xb23e, 0xb0b3, 0xa0f6, 0x430f, 0xb25b, 0xbf81, 0xa50d, 0xb258, 0x217d, 0x40a7, 0x1bd7, 0xa080, 0x4248, 0x2643, 0xba66, 0xba2b, 0x4349, 0x1edb, 0x428e, 0x40a9, 0x2b5e, 0x439b, 0x417e, 0x402e, 0x12a6, 0x0e8d, 0xbfbb, 0x424f, 0xb06e, 0x4032, 0xa1c4, 0x4271, 0xb2e8, 0x4674, 0xb0cc, 0x427d, 0x42ac, 0x469b, 0x416b, 0xb201, 0xb2d2, 0x401a, 0x42b5, 0x4397, 0x4299, 0xb238, 0x4664, 0x40a4, 0xbafc, 0xbf7b, 0x1f88, 0x4334, 0x414b, 0x4365, 0x3112, 0x1aa7, 0x1ea7, 0x40f3, 0x1197, 0x45da, 0x411f, 0xbfdb, 0xb020, 0xba4b, 0x1e98, 0x42ea, 0x4388, 0x4344, 0x1956, 0x4225, 0x45c5, 0xb2b9, 0x435c, 0x1e1b, 0x40b7, 0x1bb0, 0x0400, 0x40d0, 0x43e1, 0x4071, 0x40ea, 0xb0b7, 0x122c, 0xb27d, 0x40d4, 0x4470, 0xbfc8, 0x4002, 0x408c, 0x0287, 0xb201, 0x4221, 0x408d, 0x42f2, 0x4009, 0xb2dd, 0x43ae, 0xba01, 0xbf17, 0xb2fb, 0xb271, 0x209a, 0x4201, 0xb203, 0x4202, 0x43e9, 0x2338, 0x40af, 0x2f11, 0x40c6, 0xbf70, 0x0018, 0xa318, 0xbae2, 0xb063, 0x1bbf, 0xba6f, 0xbf60, 0xb2fa, 0xb2c2, 0x40f1, 0xba51, 0xa87a, 0xbf1b, 0x43fe, 0x408f, 0x42b4, 0x09d9, 0xb2a1, 0xbae5, 0xbf32, 0x41fe, 0xa3c9, 0x42ec, 0x1bf6, 0x4151, 0xb2ac, 0xb26c, 0xa3e7, 0x1c0c, 0x4298, 0xb291, 0x41c3, 0x428b, 0xb278, 0xb062, 0x4054, 0xb232, 0x40c4, 0x1067, 0x43ea, 0x4261, 0x43c9, 0x1dca, 0xb044, 0xbfd4, 0xb2e7, 0xb221, 0xabdc, 0x42e2, 0x417e, 0x43fa, 0x42f2, 0xbaf1, 0xb237, 0x46b1, 0xbf70, 0x1b90, 0x1baf, 0x4029, 0xba6d, 0x4112, 0x4305, 0x2569, 0xb0c6, 0xbf2a, 0x430a, 0x434e, 0x411a, 0x4233, 0x41a0, 0x175a, 0x41c1, 0x4235, 0x404a, 0xb090, 0x40f4, 0xb25c, 0xb2b1, 0x41cb, 0xba1a, 0x4064, 0x1f35, 0x423d, 0x4124, 0x4264, 0x4344, 0xbf6b, 0xb0d3, 0x0de7, 0x40c9, 0xb204, 0xb257, 0x1d42, 0x4340, 0xba64, 0x2cc3, 0x23ec, 0xb223, 0x1ea1, 0x3050, 0x402c, 0x43e3, 0x2354, 0x4044, 0xbac8, 0xb262, 0x42c0, 0xb2c2, 0x40d2, 0x42e3, 0x45a2, 0x4176, 0x40c3, 0xbf45, 0xb069, 0x467a, 0xb00e, 0x4571, 0x412b, 0xbfb0, 0x42ab, 0x2c01, 0x461d, 0x33c4, 0x4124, 0x2d04, 0xbac0, 0xba2d, 0xb04a, 0x431c, 0xbf05, 0xb220, 0xb057, 0x2eb8, 0xba23, 0xbace, 0x38d4, 0xbfe0, 0x4076, 0xb2b3, 0x429a, 0xb041, 0x43c3, 0x3b35, 0x43f0, 0xb203, 0xa113, 0x2d45, 0xbff0, 0x1f05, 0xbf67, 0x422b, 0xba7c, 0x2794, 0x40c5, 0xbfba, 0x41a3, 0x43be, 0xbff0, 0xb27b, 0xb23c, 0x2e8b, 0x3d1e, 0x0282, 0x425e, 0xbad1, 0x4005, 0xbad3, 0xb0e5, 0x4227, 0xb010, 0x4381, 0xb2b3, 0xbf46, 0xb2ce, 0x1f53, 0x44ea, 0xa888, 0xae43, 0x424c, 0x1e4e, 0x18c7, 0x4424, 0xb0ff, 0xb274, 0x4294, 0x341d, 0x40bb, 0xa1b2, 0x4564, 0xba76, 0xbad6, 0x4177, 0xb000, 0xbae7, 0xbf8c, 0xb24e, 0x0516, 0x178a, 0xa2d3, 0x42bc, 0xbf32, 0x2fc5, 0x3c82, 0x188b, 0xb265, 0x4087, 0xb2c3, 0x293d, 0xba08, 0x438a, 0x0d71, 0x22c9, 0xb09a, 0xb2c6, 0xb259, 0x3f8c, 0x43bf, 0xbfd0, 0xbfc4, 0xb28a, 0x1f75, 0xb0dc, 0x418f, 0xae2d, 0x193f, 0xbadd, 0x31f3, 0x403c, 0x1537, 0xbaf9, 0xb299, 0x27eb, 0x4330, 0xb2df, 0xbf1d, 0xb253, 0xa5e3, 0x1b97, 0x40e3, 0x229a, 0xb0e9, 0x204d, 0x1e6b, 0x4217, 0xb056, 0x3e7d, 0x4347, 0x4151, 0x24fa, 0x231c, 0x4151, 0xb0bf, 0x4261, 0x4294, 0x1499, 0xa071, 0x4389, 0x40f0, 0xbf24, 0x43f0, 0xa34e, 0x3d28, 0x40fc, 0xba75, 0x42b5, 0xb235, 0x276f, 0xa13d, 0x4045, 0xae0d, 0x4339, 0xba7f, 0x46e0, 0x3011, 0xb222, 0x106e, 0x421e, 0x43fc, 0x306e, 0xbf6e, 0xb293, 0x410b, 0x1cf9, 0x4073, 0x38a8, 0xba4f, 0x0e8e, 0xba5a, 0x46e5, 0x0c13, 0x438c, 0x0dc5, 0xbf00, 0x42e2, 0x4098, 0x3453, 0x1904, 0xba61, 0x4475, 0xbf3c, 0x4280, 0x431e, 0x4411, 0x12e6, 0x3dce, 0x1d7d, 0x41f3, 0xb204, 0x1e51, 0x1e1c, 0x4082, 0x4220, 0x0544, 0x40eb, 0x40f7, 0x4161, 0x1ae9, 0x43e3, 0x4071, 0x2ecb, 0x401e, 0x44b5, 0xb2b8, 0xbf9a, 0x41ec, 0x324e, 0x19af, 0x44f2, 0xb2ce, 0xb248, 0x42dc, 0xba09, 0x3d53, 0x1a5c, 0xa24d, 0xa580, 0x08df, 0xba14, 0x4695, 0x4409, 0x4212, 0x0169, 0x41b5, 0xb2ae, 0x2638, 0x42b9, 0xbfcf, 0xb292, 0x441a, 0x19f3, 0x1831, 0xb200, 0xb2b0, 0xb2f8, 0xba7e, 0x43bf, 0x108a, 0x4113, 0xab7b, 0x42e2, 0x43bb, 0x406e, 0x44fa, 0x4225, 0xb2bb, 0x4416, 0x32c6, 0x41d4, 0x033a, 0x40f5, 0xba4d, 0xbfdb, 0xbf90, 0x3054, 0x1bc7, 0x2374, 0x40b9, 0xb2a7, 0x2123, 0x42c4, 0x2200, 0xb24b, 0xb096, 0xa563, 0x415a, 0x099a, 0x1bdd, 0x4279, 0x3b38, 0x421b, 0x3c50, 0x1efa, 0xb2ed, 0xb0ab, 0x1914, 0x34d6, 0x2af8, 0xba20, 0x056e, 0xbf52, 0x427b, 0x41dc, 0xbfc0, 0x0e3c, 0x4107, 0x439d, 0xb260, 0xb25d, 0x429c, 0x46b3, 0x179c, 0xbfc7, 0x43c5, 0xb27f, 0x197b, 0x402d, 0xb264, 0x4117, 0x2330, 0xbf70, 0x4073, 0xbf00, 0xbad5, 0xb069, 0x42ef, 0xaf7f, 0x4002, 0x436d, 0x4121, 0x1410, 0x1f1a, 0x042f, 0x423d, 0x3abd, 0xbf33, 0xb0cc, 0x425d, 0xb0ec, 0x41da, 0x4335, 0x4263, 0xb2b0, 0x047c, 0x0a77, 0x4326, 0xbac0, 0xabe5, 0x417c, 0x4141, 0xadbf, 0xbf62, 0xb051, 0x2cbe, 0x1cfa, 0x428d, 0x10c9, 0xa7b6, 0xba01, 0xbfd0, 0x4247, 0x43fe, 0x441a, 0x2a92, 0xab72, 0x406b, 0x2f61, 0xbfcc, 0x189e, 0x0ed2, 0x4337, 0x41fa, 0x4049, 0xb207, 0xa86f, 0x439d, 0xa2fa, 0xbf93, 0x1b7d, 0xb0b2, 0x2ea1, 0xaf72, 0xae7d, 0x436a, 0x415b, 0x412c, 0x1964, 0x1660, 0x3250, 0x40bb, 0x41b4, 0xa262, 0x430c, 0xbf22, 0xabab, 0x3c05, 0xb04a, 0x4322, 0x410c, 0xb23a, 0x26f1, 0x43db, 0xba7c, 0x42f8, 0x1fa5, 0x43f5, 0xad41, 0x4276, 0xbf85, 0x42e1, 0xb06d, 0x0bee, 0x43e4, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xe4628e3c, 0xb130dc40, 0x301f3068, 0x711e026e, 0x29a5a394, 0xa6eb85b1, 0xcd2f7a79, 0x2ec8b90f, 0xd90284cf, 0xe8b9b1aa, 0xa23589aa, 0x4701154b, 0x09e98069, 0x05583b86, 0x00000000, 0x000001f0 }, - FinalRegs = new uint[] { 0xffffffff, 0x00000000, 0x00001870, 0xffffe6ab, 0x00007018, 0x000018d4, 0x00000000, 0x00001870, 0x09e98068, 0xffffffff, 0x05585795, 0x0c600000, 0x09e98068, 0x000017d0, 0x00000000, 0x800001d0 }, + Instructions = [0x42b1, 0x434a, 0x1868, 0x1910, 0x4205, 0x3246, 0x2096, 0x439d, 0xba7d, 0xba78, 0x180e, 0xa168, 0xafc3, 0x40e6, 0xb2c6, 0xbf60, 0xbf80, 0x46ca, 0x2a71, 0xa766, 0xb269, 0x1f80, 0x14d9, 0x4050, 0xb209, 0xbf72, 0x0b06, 0x4024, 0x41fe, 0xa917, 0xba63, 0xb282, 0x41f2, 0x4171, 0x4288, 0x23f7, 0x032e, 0x4043, 0xb23d, 0xbf12, 0x430e, 0x1c8f, 0x1851, 0x4341, 0x0360, 0x4090, 0x2675, 0x4281, 0x411e, 0x4255, 0xba5b, 0xb283, 0x1af5, 0xb28d, 0xbf33, 0x41ed, 0xb07c, 0xae17, 0x1e11, 0x19ce, 0xb296, 0x33f9, 0x4392, 0xbaf3, 0x40bd, 0x433e, 0x40f9, 0xa383, 0x1b86, 0x1c9f, 0xb096, 0xbf00, 0x4369, 0x42ce, 0x1708, 0x37f1, 0xbf11, 0x431e, 0x28cb, 0x245a, 0x434f, 0x4298, 0x0366, 0x1b85, 0x22a8, 0x4214, 0x42fc, 0x43ca, 0x33ae, 0x42da, 0x1828, 0xabe1, 0x40e4, 0x39be, 0x1a59, 0xb01f, 0xbfb8, 0xb20e, 0x41cc, 0xb2ce, 0x4122, 0xac37, 0x435d, 0xbfc3, 0x4261, 0xb071, 0x24ed, 0xbadd, 0xba07, 0x19a6, 0x1e22, 0x4241, 0x4265, 0xb2f8, 0x401a, 0xb043, 0x4034, 0xb236, 0xb28b, 0x3189, 0xb085, 0xb239, 0x4409, 0x429d, 0x41c2, 0x30cc, 0xbfdf, 0xbaea, 0x40da, 0xb247, 0x1e98, 0xb20e, 0xbad2, 0x4136, 0x1f95, 0xaf3a, 0x2cae, 0x427a, 0x4015, 0x409f, 0x025c, 0xafcb, 0xb20f, 0x43a1, 0x1b77, 0x4222, 0x400b, 0x42c5, 0x1f2f, 0xbfc7, 0xb2ce, 0x4608, 0x4694, 0x42cb, 0x2963, 0x3619, 0x41dd, 0x43ac, 0xb204, 0x3c86, 0xbf05, 0xbac9, 0x1f7c, 0xba2e, 0x0be5, 0x38aa, 0x41aa, 0xa6f7, 0x432b, 0x4124, 0x43fa, 0x1d2d, 0x42d4, 0x1acf, 0x465e, 0x1aa0, 0x32b0, 0x410a, 0x4205, 0xb0b0, 0xbf9c, 0x409d, 0x3b35, 0x1b4f, 0x43eb, 0x189c, 0xbfb3, 0x43f9, 0x42a9, 0x19b1, 0x45cc, 0x1f2f, 0x2d27, 0x1f79, 0x41aa, 0xb20a, 0x420d, 0x45e0, 0xbf1e, 0xb008, 0x4254, 0x2b5d, 0x2382, 0xbf6a, 0x416f, 0xba16, 0x11bf, 0x40de, 0x1a5a, 0x182a, 0x4051, 0x40a8, 0xbf92, 0x41bc, 0xa479, 0x44ed, 0xa6bd, 0x449d, 0x35e7, 0xa2eb, 0x3f57, 0xb0a6, 0x191c, 0x401b, 0xb265, 0x4155, 0x4227, 0x42a1, 0x3f24, 0x1de3, 0x4312, 0x434f, 0x467f, 0xbfce, 0x4054, 0x42c8, 0x18a8, 0x4355, 0x42ad, 0x4139, 0x0b84, 0x2b9b, 0x3f55, 0x42ba, 0xbfc5, 0xa96c, 0x33cc, 0x41c6, 0xba77, 0x405f, 0x4009, 0x4106, 0x1ace, 0x0146, 0xbf1a, 0x1e1b, 0x41fb, 0x42b8, 0xbf82, 0x3dac, 0xaba4, 0xa622, 0x42d3, 0xb060, 0xba3f, 0xbaf0, 0x41b1, 0x4030, 0x410b, 0x1f0b, 0x03e5, 0x42a7, 0x2640, 0x416b, 0xb261, 0x1eaa, 0x4118, 0xba72, 0x4083, 0xbf31, 0x3606, 0xbac0, 0x25ff, 0xa90b, 0xa970, 0x4680, 0xb219, 0x4312, 0xb2b2, 0x4400, 0x1f32, 0xba03, 0x4371, 0x420f, 0x424b, 0xba02, 0x41f4, 0x46c1, 0x3158, 0xab7d, 0xba0b, 0xba2b, 0x42a4, 0x3e0b, 0x02c5, 0x4039, 0x4111, 0xb2f1, 0x0250, 0xbf5d, 0xbaf8, 0x464c, 0x43e7, 0x1baf, 0x41a3, 0x45c1, 0x4369, 0x4113, 0x415e, 0xbff0, 0x2a72, 0x1e9d, 0xba79, 0x083f, 0x41fe, 0x418c, 0x467e, 0x4472, 0x4484, 0xbf62, 0x4671, 0x4698, 0x4141, 0x41d0, 0x29ea, 0x1d92, 0xba36, 0xba01, 0x188a, 0x3f58, 0x43ec, 0x4396, 0xa1b9, 0x4266, 0x40ba, 0x4122, 0x43a4, 0xb269, 0x401f, 0x18f0, 0xb241, 0x4119, 0xb07a, 0xbf95, 0x08c9, 0x37d4, 0x21c0, 0x43e4, 0x4165, 0x468a, 0x40b6, 0xba3b, 0x0e8d, 0xba2f, 0xb287, 0x4223, 0x1bab, 0xb2e8, 0x41dd, 0x4065, 0xbf6c, 0xb23f, 0x2e6d, 0xb2fa, 0x4252, 0x0c56, 0xa14e, 0x4313, 0x42c3, 0x427c, 0x41ca, 0x430f, 0x4187, 0x11c1, 0x17df, 0x40ac, 0xb2c7, 0xb23e, 0xb0b3, 0xa0f6, 0x430f, 0xb25b, 0xbf81, 0xa50d, 0xb258, 0x217d, 0x40a7, 0x1bd7, 0xa080, 0x4248, 0x2643, 0xba66, 0xba2b, 0x4349, 0x1edb, 0x428e, 0x40a9, 0x2b5e, 0x439b, 0x417e, 0x402e, 0x12a6, 0x0e8d, 0xbfbb, 0x424f, 0xb06e, 0x4032, 0xa1c4, 0x4271, 0xb2e8, 0x4674, 0xb0cc, 0x427d, 0x42ac, 0x469b, 0x416b, 0xb201, 0xb2d2, 0x401a, 0x42b5, 0x4397, 0x4299, 0xb238, 0x4664, 0x40a4, 0xbafc, 0xbf7b, 0x1f88, 0x4334, 0x414b, 0x4365, 0x3112, 0x1aa7, 0x1ea7, 0x40f3, 0x1197, 0x45da, 0x411f, 0xbfdb, 0xb020, 0xba4b, 0x1e98, 0x42ea, 0x4388, 0x4344, 0x1956, 0x4225, 0x45c5, 0xb2b9, 0x435c, 0x1e1b, 0x40b7, 0x1bb0, 0x0400, 0x40d0, 0x43e1, 0x4071, 0x40ea, 0xb0b7, 0x122c, 0xb27d, 0x40d4, 0x4470, 0xbfc8, 0x4002, 0x408c, 0x0287, 0xb201, 0x4221, 0x408d, 0x42f2, 0x4009, 0xb2dd, 0x43ae, 0xba01, 0xbf17, 0xb2fb, 0xb271, 0x209a, 0x4201, 0xb203, 0x4202, 0x43e9, 0x2338, 0x40af, 0x2f11, 0x40c6, 0xbf70, 0x0018, 0xa318, 0xbae2, 0xb063, 0x1bbf, 0xba6f, 0xbf60, 0xb2fa, 0xb2c2, 0x40f1, 0xba51, 0xa87a, 0xbf1b, 0x43fe, 0x408f, 0x42b4, 0x09d9, 0xb2a1, 0xbae5, 0xbf32, 0x41fe, 0xa3c9, 0x42ec, 0x1bf6, 0x4151, 0xb2ac, 0xb26c, 0xa3e7, 0x1c0c, 0x4298, 0xb291, 0x41c3, 0x428b, 0xb278, 0xb062, 0x4054, 0xb232, 0x40c4, 0x1067, 0x43ea, 0x4261, 0x43c9, 0x1dca, 0xb044, 0xbfd4, 0xb2e7, 0xb221, 0xabdc, 0x42e2, 0x417e, 0x43fa, 0x42f2, 0xbaf1, 0xb237, 0x46b1, 0xbf70, 0x1b90, 0x1baf, 0x4029, 0xba6d, 0x4112, 0x4305, 0x2569, 0xb0c6, 0xbf2a, 0x430a, 0x434e, 0x411a, 0x4233, 0x41a0, 0x175a, 0x41c1, 0x4235, 0x404a, 0xb090, 0x40f4, 0xb25c, 0xb2b1, 0x41cb, 0xba1a, 0x4064, 0x1f35, 0x423d, 0x4124, 0x4264, 0x4344, 0xbf6b, 0xb0d3, 0x0de7, 0x40c9, 0xb204, 0xb257, 0x1d42, 0x4340, 0xba64, 0x2cc3, 0x23ec, 0xb223, 0x1ea1, 0x3050, 0x402c, 0x43e3, 0x2354, 0x4044, 0xbac8, 0xb262, 0x42c0, 0xb2c2, 0x40d2, 0x42e3, 0x45a2, 0x4176, 0x40c3, 0xbf45, 0xb069, 0x467a, 0xb00e, 0x4571, 0x412b, 0xbfb0, 0x42ab, 0x2c01, 0x461d, 0x33c4, 0x4124, 0x2d04, 0xbac0, 0xba2d, 0xb04a, 0x431c, 0xbf05, 0xb220, 0xb057, 0x2eb8, 0xba23, 0xbace, 0x38d4, 0xbfe0, 0x4076, 0xb2b3, 0x429a, 0xb041, 0x43c3, 0x3b35, 0x43f0, 0xb203, 0xa113, 0x2d45, 0xbff0, 0x1f05, 0xbf67, 0x422b, 0xba7c, 0x2794, 0x40c5, 0xbfba, 0x41a3, 0x43be, 0xbff0, 0xb27b, 0xb23c, 0x2e8b, 0x3d1e, 0x0282, 0x425e, 0xbad1, 0x4005, 0xbad3, 0xb0e5, 0x4227, 0xb010, 0x4381, 0xb2b3, 0xbf46, 0xb2ce, 0x1f53, 0x44ea, 0xa888, 0xae43, 0x424c, 0x1e4e, 0x18c7, 0x4424, 0xb0ff, 0xb274, 0x4294, 0x341d, 0x40bb, 0xa1b2, 0x4564, 0xba76, 0xbad6, 0x4177, 0xb000, 0xbae7, 0xbf8c, 0xb24e, 0x0516, 0x178a, 0xa2d3, 0x42bc, 0xbf32, 0x2fc5, 0x3c82, 0x188b, 0xb265, 0x4087, 0xb2c3, 0x293d, 0xba08, 0x438a, 0x0d71, 0x22c9, 0xb09a, 0xb2c6, 0xb259, 0x3f8c, 0x43bf, 0xbfd0, 0xbfc4, 0xb28a, 0x1f75, 0xb0dc, 0x418f, 0xae2d, 0x193f, 0xbadd, 0x31f3, 0x403c, 0x1537, 0xbaf9, 0xb299, 0x27eb, 0x4330, 0xb2df, 0xbf1d, 0xb253, 0xa5e3, 0x1b97, 0x40e3, 0x229a, 0xb0e9, 0x204d, 0x1e6b, 0x4217, 0xb056, 0x3e7d, 0x4347, 0x4151, 0x24fa, 0x231c, 0x4151, 0xb0bf, 0x4261, 0x4294, 0x1499, 0xa071, 0x4389, 0x40f0, 0xbf24, 0x43f0, 0xa34e, 0x3d28, 0x40fc, 0xba75, 0x42b5, 0xb235, 0x276f, 0xa13d, 0x4045, 0xae0d, 0x4339, 0xba7f, 0x46e0, 0x3011, 0xb222, 0x106e, 0x421e, 0x43fc, 0x306e, 0xbf6e, 0xb293, 0x410b, 0x1cf9, 0x4073, 0x38a8, 0xba4f, 0x0e8e, 0xba5a, 0x46e5, 0x0c13, 0x438c, 0x0dc5, 0xbf00, 0x42e2, 0x4098, 0x3453, 0x1904, 0xba61, 0x4475, 0xbf3c, 0x4280, 0x431e, 0x4411, 0x12e6, 0x3dce, 0x1d7d, 0x41f3, 0xb204, 0x1e51, 0x1e1c, 0x4082, 0x4220, 0x0544, 0x40eb, 0x40f7, 0x4161, 0x1ae9, 0x43e3, 0x4071, 0x2ecb, 0x401e, 0x44b5, 0xb2b8, 0xbf9a, 0x41ec, 0x324e, 0x19af, 0x44f2, 0xb2ce, 0xb248, 0x42dc, 0xba09, 0x3d53, 0x1a5c, 0xa24d, 0xa580, 0x08df, 0xba14, 0x4695, 0x4409, 0x4212, 0x0169, 0x41b5, 0xb2ae, 0x2638, 0x42b9, 0xbfcf, 0xb292, 0x441a, 0x19f3, 0x1831, 0xb200, 0xb2b0, 0xb2f8, 0xba7e, 0x43bf, 0x108a, 0x4113, 0xab7b, 0x42e2, 0x43bb, 0x406e, 0x44fa, 0x4225, 0xb2bb, 0x4416, 0x32c6, 0x41d4, 0x033a, 0x40f5, 0xba4d, 0xbfdb, 0xbf90, 0x3054, 0x1bc7, 0x2374, 0x40b9, 0xb2a7, 0x2123, 0x42c4, 0x2200, 0xb24b, 0xb096, 0xa563, 0x415a, 0x099a, 0x1bdd, 0x4279, 0x3b38, 0x421b, 0x3c50, 0x1efa, 0xb2ed, 0xb0ab, 0x1914, 0x34d6, 0x2af8, 0xba20, 0x056e, 0xbf52, 0x427b, 0x41dc, 0xbfc0, 0x0e3c, 0x4107, 0x439d, 0xb260, 0xb25d, 0x429c, 0x46b3, 0x179c, 0xbfc7, 0x43c5, 0xb27f, 0x197b, 0x402d, 0xb264, 0x4117, 0x2330, 0xbf70, 0x4073, 0xbf00, 0xbad5, 0xb069, 0x42ef, 0xaf7f, 0x4002, 0x436d, 0x4121, 0x1410, 0x1f1a, 0x042f, 0x423d, 0x3abd, 0xbf33, 0xb0cc, 0x425d, 0xb0ec, 0x41da, 0x4335, 0x4263, 0xb2b0, 0x047c, 0x0a77, 0x4326, 0xbac0, 0xabe5, 0x417c, 0x4141, 0xadbf, 0xbf62, 0xb051, 0x2cbe, 0x1cfa, 0x428d, 0x10c9, 0xa7b6, 0xba01, 0xbfd0, 0x4247, 0x43fe, 0x441a, 0x2a92, 0xab72, 0x406b, 0x2f61, 0xbfcc, 0x189e, 0x0ed2, 0x4337, 0x41fa, 0x4049, 0xb207, 0xa86f, 0x439d, 0xa2fa, 0xbf93, 0x1b7d, 0xb0b2, 0x2ea1, 0xaf72, 0xae7d, 0x436a, 0x415b, 0x412c, 0x1964, 0x1660, 0x3250, 0x40bb, 0x41b4, 0xa262, 0x430c, 0xbf22, 0xabab, 0x3c05, 0xb04a, 0x4322, 0x410c, 0xb23a, 0x26f1, 0x43db, 0xba7c, 0x42f8, 0x1fa5, 0x43f5, 0xad41, 0x4276, 0xbf85, 0x42e1, 0xb06d, 0x0bee, 0x43e4, 0x4770, 0xe7fe + ], + StartRegs = [0xe4628e3c, 0xb130dc40, 0x301f3068, 0x711e026e, 0x29a5a394, 0xa6eb85b1, 0xcd2f7a79, 0x2ec8b90f, 0xd90284cf, 0xe8b9b1aa, 0xa23589aa, 0x4701154b, 0x09e98069, 0x05583b86, 0x00000000, 0x000001f0 + ], + FinalRegs = [0xffffffff, 0x00000000, 0x00001870, 0xffffe6ab, 0x00007018, 0x000018d4, 0x00000000, 0x00001870, 0x09e98068, 0xffffffff, 0x05585795, 0x0c600000, 0x09e98068, 0x000017d0, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0x190c, 0x41dd, 0xb2fe, 0x408e, 0x4222, 0x32ca, 0x40b9, 0x3388, 0xba3b, 0x455c, 0xbfd0, 0x0a17, 0x40b6, 0x1dc6, 0x316f, 0x1fe4, 0x1ddd, 0x4312, 0x1f2e, 0x41c8, 0x4142, 0x43e6, 0xbf64, 0x4407, 0x4230, 0x46a5, 0x43bc, 0x422b, 0x43b7, 0x4111, 0x4125, 0x42fc, 0xb0eb, 0xba23, 0x4375, 0xb002, 0xba10, 0x4272, 0xb282, 0xb0f4, 0x2703, 0x4192, 0xb2c8, 0xbf3a, 0x415a, 0x41dc, 0x2e6f, 0x4326, 0xa155, 0x1c7e, 0x43a5, 0x3588, 0xbf33, 0x434c, 0x3d8b, 0xa455, 0x4028, 0x42b9, 0x42e8, 0x4117, 0x12c6, 0xb2ea, 0x0555, 0x39c4, 0x4674, 0x4339, 0xb2fd, 0xb241, 0xba30, 0x42f0, 0x2e82, 0x418f, 0xbad0, 0x4253, 0x075f, 0x4412, 0x1dbd, 0xb229, 0x43c2, 0xbfae, 0xb085, 0xb2f3, 0xb0e9, 0x1b1f, 0x1f0e, 0x281f, 0x18e7, 0x30b9, 0xbadf, 0xba64, 0x42ec, 0x4208, 0x2e04, 0x2730, 0x430e, 0xb2aa, 0xb244, 0x4103, 0x1eb8, 0x4229, 0x1e5c, 0x40b5, 0x3def, 0xa5b2, 0x33b8, 0x4389, 0x42a1, 0xba14, 0xbf98, 0xa852, 0x4343, 0x40e5, 0xbaf5, 0x188e, 0x1ac6, 0x4073, 0x0c0c, 0xbfc2, 0x4028, 0x404d, 0x1860, 0x442f, 0xb0f6, 0xbf61, 0x3c74, 0xbf60, 0x41a0, 0x1c6a, 0xba14, 0x12cd, 0x40bb, 0xbf70, 0x4034, 0xbfc2, 0xbf00, 0x40d4, 0xb2f2, 0x433a, 0x001a, 0xac53, 0x0ab7, 0x428d, 0x443b, 0x4335, 0x27cc, 0x1e0a, 0x40e1, 0x17e2, 0xbad0, 0xb297, 0x405b, 0xb270, 0x429a, 0xbad7, 0x41de, 0x4210, 0x1acf, 0x42a3, 0x443b, 0x1d64, 0x460d, 0xbf06, 0xbad0, 0xb2b7, 0x4092, 0xba0f, 0x438c, 0x439f, 0x291d, 0x2fba, 0xb2b8, 0x435c, 0xbf9b, 0xac65, 0x4277, 0x4171, 0x2bd5, 0x0832, 0x46c5, 0xb275, 0xb292, 0x4012, 0x1396, 0x4014, 0xb046, 0xba1d, 0xb2a1, 0x067f, 0xb26b, 0x432a, 0x1630, 0x2119, 0xb202, 0x42cc, 0xbf54, 0xb004, 0x43df, 0xaad2, 0xa411, 0x1ea9, 0x40d3, 0x1fe2, 0xaf6c, 0xb068, 0x40ab, 0x2124, 0x39a3, 0x1a23, 0xba65, 0xb2eb, 0xbfa4, 0xb035, 0xba7c, 0x40b7, 0x4013, 0xb292, 0x444c, 0xb0d2, 0x401e, 0xba6a, 0xba5b, 0x4368, 0x46ec, 0x4493, 0x4016, 0x4601, 0x4049, 0x15b2, 0xb298, 0x18e4, 0xb22a, 0x1f07, 0x101f, 0x1908, 0xbfaf, 0x434e, 0x1125, 0x41d5, 0x1322, 0x41d0, 0xbfa2, 0x4349, 0x1fa5, 0x4289, 0x1ebd, 0x10be, 0x4328, 0x4084, 0x4076, 0xa326, 0x4262, 0xba59, 0xb017, 0x1eb2, 0x43e8, 0x43a9, 0xb014, 0x089a, 0xb22b, 0x1cf0, 0x4490, 0x1529, 0x4371, 0xbfa0, 0x43cc, 0x4127, 0xbfb7, 0xba00, 0xba0d, 0x41f4, 0xb0ea, 0x1e04, 0xbacd, 0x40bf, 0x46bc, 0x403b, 0x2642, 0x400b, 0x1d25, 0x4339, 0x4124, 0x43fb, 0x4203, 0x40f2, 0xb0f1, 0xac2d, 0xbfc0, 0x1f1c, 0x3447, 0x40b2, 0xbfa8, 0xbfb0, 0xbfb2, 0x4373, 0xabab, 0x428b, 0x400a, 0xaa61, 0xbff0, 0x46c0, 0x45e8, 0x1f40, 0xbae0, 0x2815, 0x4130, 0x39ef, 0xbace, 0x3978, 0x1c85, 0x4023, 0x1fbc, 0xbf01, 0x413b, 0x1f38, 0x4248, 0xa2f5, 0x1354, 0xa20b, 0x4287, 0x2088, 0x377f, 0x4029, 0x41a5, 0x0b8a, 0xb2ff, 0x419e, 0x003c, 0xb28e, 0xbf2a, 0xbad0, 0x3fea, 0x4138, 0x434b, 0x41c3, 0x4371, 0xb08c, 0xb240, 0x41d3, 0x42c1, 0x43ee, 0x42ae, 0x41e0, 0xb287, 0x1c7c, 0x41fc, 0x4130, 0x46e1, 0x4391, 0x1d6d, 0x401f, 0x189e, 0xbf24, 0x206b, 0xb27e, 0xb2e3, 0x432a, 0xba3f, 0x43b6, 0x1e9c, 0x41e6, 0x1943, 0x411a, 0x40d7, 0x4367, 0xa70f, 0x1088, 0x422f, 0x1d6e, 0x197a, 0x42ae, 0x3fb9, 0x01b5, 0xb226, 0x40c7, 0x3246, 0xbf58, 0xb07e, 0x4250, 0xba4e, 0xa4d2, 0xa9fa, 0x2365, 0xb28d, 0xa57c, 0xbaf7, 0xba5b, 0xb010, 0xba53, 0xbadf, 0x4122, 0xbf57, 0xb010, 0x4374, 0xbae0, 0xb2fb, 0x1fda, 0x41c7, 0x432a, 0xaa9f, 0x19da, 0x1f13, 0xb2e1, 0x1d38, 0x44a4, 0xbfb7, 0x438e, 0x054a, 0x425a, 0x3229, 0xbac4, 0x40a6, 0x404f, 0x4348, 0x41da, 0x40db, 0xafa8, 0xb0ba, 0x4004, 0x432c, 0xb058, 0x4324, 0x1daf, 0x4309, 0x42bd, 0x18cf, 0xbf6e, 0x42ee, 0x418a, 0xb270, 0xb287, 0xb209, 0x4271, 0xb0e0, 0x3c45, 0x1a47, 0xb284, 0xb224, 0x410f, 0x4230, 0xb239, 0x41d8, 0xb09f, 0x4125, 0xba3f, 0x18ea, 0x1a7b, 0x3bb4, 0xb018, 0xbf4a, 0x2a5f, 0x31f9, 0x411f, 0x4142, 0x423b, 0x4573, 0xbfb0, 0xba72, 0x1940, 0xb032, 0xbae0, 0x43e3, 0xba0c, 0x2537, 0x4081, 0xb211, 0x15fa, 0x41fa, 0xbfa0, 0xab62, 0xb0d6, 0xba2d, 0xbf51, 0x400b, 0x30b2, 0x4036, 0xaea0, 0xbf00, 0x42e8, 0x2b15, 0x1f0d, 0x381f, 0x4103, 0x4097, 0x41be, 0x235b, 0x4091, 0xbaf5, 0xb296, 0x455e, 0xb252, 0x4223, 0xba21, 0xbf90, 0x2bb5, 0x4153, 0xbf31, 0xa17a, 0x1938, 0x4210, 0x4274, 0x2b0c, 0x43b2, 0x411d, 0x1a71, 0x40e4, 0x2d1a, 0x4041, 0x4091, 0x40c5, 0x4082, 0xb256, 0x43a8, 0x4365, 0x426f, 0x42fc, 0xb058, 0xb098, 0x4077, 0xb074, 0x426f, 0x2362, 0x40fd, 0xbf22, 0xb2ba, 0xbf60, 0x438c, 0x4005, 0x4240, 0xbfd6, 0x4120, 0x42ab, 0xb0fa, 0x4674, 0x40ef, 0xbfce, 0x42fb, 0xb03e, 0x426b, 0x4116, 0x426b, 0xb29c, 0x419f, 0x4106, 0x437d, 0x43f6, 0x4625, 0x0a71, 0x424b, 0xb287, 0xa587, 0x40c2, 0xa389, 0x4043, 0xb23a, 0x0f83, 0x0e74, 0xbfa3, 0x42c8, 0x1837, 0xb04a, 0xb215, 0x1f63, 0x409b, 0x466f, 0x4020, 0x40cb, 0x1fc4, 0x424a, 0x4041, 0xab3f, 0x2513, 0xba39, 0x2761, 0x08ef, 0xb01c, 0x40ec, 0x4344, 0x432a, 0x423a, 0xbac6, 0x008b, 0x43cc, 0x1f37, 0x0f45, 0xbf11, 0x4088, 0x4359, 0x42cc, 0x1c92, 0xbacb, 0xb06c, 0xaf25, 0xb299, 0xbfde, 0x4184, 0x3ea1, 0xaab7, 0xbfc0, 0x2538, 0xbfd4, 0x4100, 0x2625, 0x419a, 0xb210, 0x231f, 0x40b5, 0xbfd9, 0x1dd1, 0x1c34, 0x41a3, 0x1c6a, 0xa756, 0xbf70, 0x430f, 0x42c1, 0x4077, 0x404f, 0x41fc, 0x4245, 0xbff0, 0x42cb, 0x3c1f, 0x1c6b, 0xab3a, 0x4083, 0x4131, 0x4234, 0x41a8, 0x41fe, 0x435e, 0x4086, 0xbf98, 0xb2c8, 0xbae1, 0x3ccd, 0x441d, 0xb29c, 0x4047, 0xbf92, 0x42ea, 0x4077, 0x1f00, 0x2d3c, 0x434f, 0x1d83, 0x2a97, 0x4238, 0x43d0, 0xb274, 0x4000, 0x438d, 0x407a, 0x199e, 0x1ec9, 0x4041, 0x4133, 0x0b38, 0x437e, 0xbadb, 0x0c6c, 0x43c9, 0x436d, 0xb2b7, 0x1b76, 0x1207, 0x403a, 0xbfa2, 0x0e8e, 0x1b82, 0x2840, 0x4018, 0xbfa5, 0x2ffa, 0x4493, 0x1cf6, 0xbfe0, 0x243e, 0x4113, 0xb28a, 0x4057, 0xb2d6, 0x43a2, 0xb2ac, 0x40d0, 0x4198, 0xae4e, 0x42f7, 0x3681, 0x4231, 0x4455, 0x35d7, 0x1e5f, 0x411e, 0xb2dc, 0x422d, 0x1edd, 0x4164, 0x2df7, 0xa616, 0x1734, 0xbf53, 0x404c, 0x4061, 0x44c8, 0x43d0, 0xbfdb, 0x415f, 0x1c73, 0xb2de, 0x40bf, 0x462e, 0x4218, 0x1dcc, 0xba45, 0xaef1, 0x425a, 0xa89f, 0xb25a, 0xa25f, 0x1fa5, 0x417a, 0xba13, 0x418e, 0x42a4, 0x35d6, 0x1b4b, 0xba13, 0xba40, 0x1b23, 0x0b14, 0xb20c, 0x2bba, 0xba45, 0x3b65, 0x256f, 0xbfd7, 0xba0d, 0xb2d5, 0x4267, 0x24e6, 0x2d6d, 0x11bc, 0x42b6, 0xbf15, 0xb217, 0xb2d8, 0x405f, 0x4143, 0xa6e6, 0xa92f, 0x42fb, 0x42bd, 0x438b, 0x458a, 0x43c3, 0x420c, 0x43bb, 0x4068, 0x43d4, 0x3fa0, 0x1968, 0x03e1, 0xb291, 0xbf90, 0x2968, 0x4029, 0x38bc, 0x431d, 0x43af, 0x1b23, 0x41a3, 0xbfd9, 0x43f3, 0x229b, 0x0925, 0xb295, 0x15ec, 0xb223, 0x19d3, 0xba1c, 0xb080, 0xb27a, 0xbf7e, 0xba7d, 0xb236, 0x4365, 0x4273, 0x1c90, 0x21b5, 0x42cf, 0x40d6, 0x18c8, 0x0777, 0x281d, 0xbfc0, 0x40ca, 0x1b92, 0x412d, 0xa3aa, 0x44c3, 0x4220, 0x4087, 0x4110, 0x43b0, 0x1aad, 0x3f60, 0x1515, 0xb2fd, 0x40ea, 0xbf0c, 0x19d3, 0x41ba, 0x4003, 0x4040, 0xb239, 0x4057, 0xbfd0, 0x439d, 0x41c6, 0x4382, 0x4122, 0x30b4, 0xbff0, 0x4285, 0x4112, 0x0eec, 0x41f2, 0x4165, 0xba79, 0xbfc0, 0xbac0, 0x43bc, 0x1fa0, 0xbf3b, 0x17fb, 0xba32, 0xba37, 0xb218, 0x4397, 0x40c6, 0xb2e3, 0xbfe4, 0xb23e, 0xb07d, 0x42cb, 0x424e, 0x4269, 0x41e7, 0x4323, 0x40f6, 0x3575, 0x4110, 0x41bc, 0xb2e8, 0x4228, 0xb242, 0x403a, 0x4262, 0xba27, 0x153a, 0xba00, 0xba70, 0x2dde, 0xb290, 0xbf91, 0x40bd, 0x427b, 0x0a83, 0x2605, 0x40ca, 0xa13e, 0x408a, 0x2078, 0xa34c, 0xbfc0, 0x4671, 0x1ae9, 0xbaed, 0x2113, 0xb27b, 0x4138, 0xb268, 0x0f57, 0xbfa5, 0xaeb6, 0xbac7, 0x4304, 0xb03a, 0x1524, 0x4439, 0xb2cf, 0xbfb0, 0xb252, 0xb083, 0x1b1f, 0x4297, 0xa384, 0x4077, 0x1b4d, 0x4386, 0x41da, 0x29a1, 0xbfc0, 0x1f1a, 0x3f17, 0x4007, 0x42f5, 0x4192, 0xbfe8, 0x2373, 0x40b8, 0x4160, 0x4621, 0xb02b, 0xae8c, 0x13f9, 0xba3d, 0x25d3, 0x3d46, 0x41df, 0x4481, 0x1289, 0xa8ac, 0x4257, 0x1157, 0x423d, 0xbff0, 0xb2f2, 0xab13, 0xbfde, 0x412c, 0xb09e, 0x40ba, 0xb0a4, 0x4356, 0x43fe, 0x4209, 0xbf3a, 0x40f3, 0x43df, 0x39a1, 0xb0c3, 0x0992, 0x46ca, 0x4269, 0x417e, 0xb200, 0x46bb, 0x41d6, 0xba1c, 0xbfe0, 0x42a5, 0x3e74, 0x4651, 0x4371, 0x435c, 0x437a, 0x23a1, 0xb217, 0x1bd7, 0x1920, 0x449b, 0xb24c, 0xbf26, 0x4551, 0x41d7, 0x43d9, 0xae4b, 0x4008, 0x403d, 0xba74, 0x43e3, 0x185b, 0xba5c, 0xbf16, 0xba06, 0xbff0, 0x4118, 0x2b3b, 0x435a, 0x409b, 0x4085, 0x434b, 0xa0a7, 0xbf02, 0x1b80, 0xb2a7, 0x1fb5, 0x2ab4, 0x4102, 0x40ec, 0x2d72, 0xba16, 0x4076, 0x23fd, 0xab93, 0xba7e, 0xbf5d, 0x41a0, 0x1d5c, 0x43cc, 0x3cb3, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x96070e06, 0x60f8a631, 0x6d122e21, 0xad567bfc, 0x291715df, 0x4658e055, 0x3efa71b8, 0x42812292, 0x84889393, 0xde7eb11f, 0x47c9ca7e, 0x0ba82b44, 0x8ffeeee8, 0x71d424e5, 0x00000000, 0x100001f0 }, - FinalRegs = new uint[] { 0xb75339fa, 0xfffcaf4b, 0x00000000, 0x8488a09f, 0x000350b4, 0x48ace04c, 0x00002fab, 0x0000ab2f, 0x84889836, 0x00000741, 0x00000741, 0x000000a0, 0x00001640, 0x84889e53, 0x00000000, 0x200001d0 }, + Instructions = [0x190c, 0x41dd, 0xb2fe, 0x408e, 0x4222, 0x32ca, 0x40b9, 0x3388, 0xba3b, 0x455c, 0xbfd0, 0x0a17, 0x40b6, 0x1dc6, 0x316f, 0x1fe4, 0x1ddd, 0x4312, 0x1f2e, 0x41c8, 0x4142, 0x43e6, 0xbf64, 0x4407, 0x4230, 0x46a5, 0x43bc, 0x422b, 0x43b7, 0x4111, 0x4125, 0x42fc, 0xb0eb, 0xba23, 0x4375, 0xb002, 0xba10, 0x4272, 0xb282, 0xb0f4, 0x2703, 0x4192, 0xb2c8, 0xbf3a, 0x415a, 0x41dc, 0x2e6f, 0x4326, 0xa155, 0x1c7e, 0x43a5, 0x3588, 0xbf33, 0x434c, 0x3d8b, 0xa455, 0x4028, 0x42b9, 0x42e8, 0x4117, 0x12c6, 0xb2ea, 0x0555, 0x39c4, 0x4674, 0x4339, 0xb2fd, 0xb241, 0xba30, 0x42f0, 0x2e82, 0x418f, 0xbad0, 0x4253, 0x075f, 0x4412, 0x1dbd, 0xb229, 0x43c2, 0xbfae, 0xb085, 0xb2f3, 0xb0e9, 0x1b1f, 0x1f0e, 0x281f, 0x18e7, 0x30b9, 0xbadf, 0xba64, 0x42ec, 0x4208, 0x2e04, 0x2730, 0x430e, 0xb2aa, 0xb244, 0x4103, 0x1eb8, 0x4229, 0x1e5c, 0x40b5, 0x3def, 0xa5b2, 0x33b8, 0x4389, 0x42a1, 0xba14, 0xbf98, 0xa852, 0x4343, 0x40e5, 0xbaf5, 0x188e, 0x1ac6, 0x4073, 0x0c0c, 0xbfc2, 0x4028, 0x404d, 0x1860, 0x442f, 0xb0f6, 0xbf61, 0x3c74, 0xbf60, 0x41a0, 0x1c6a, 0xba14, 0x12cd, 0x40bb, 0xbf70, 0x4034, 0xbfc2, 0xbf00, 0x40d4, 0xb2f2, 0x433a, 0x001a, 0xac53, 0x0ab7, 0x428d, 0x443b, 0x4335, 0x27cc, 0x1e0a, 0x40e1, 0x17e2, 0xbad0, 0xb297, 0x405b, 0xb270, 0x429a, 0xbad7, 0x41de, 0x4210, 0x1acf, 0x42a3, 0x443b, 0x1d64, 0x460d, 0xbf06, 0xbad0, 0xb2b7, 0x4092, 0xba0f, 0x438c, 0x439f, 0x291d, 0x2fba, 0xb2b8, 0x435c, 0xbf9b, 0xac65, 0x4277, 0x4171, 0x2bd5, 0x0832, 0x46c5, 0xb275, 0xb292, 0x4012, 0x1396, 0x4014, 0xb046, 0xba1d, 0xb2a1, 0x067f, 0xb26b, 0x432a, 0x1630, 0x2119, 0xb202, 0x42cc, 0xbf54, 0xb004, 0x43df, 0xaad2, 0xa411, 0x1ea9, 0x40d3, 0x1fe2, 0xaf6c, 0xb068, 0x40ab, 0x2124, 0x39a3, 0x1a23, 0xba65, 0xb2eb, 0xbfa4, 0xb035, 0xba7c, 0x40b7, 0x4013, 0xb292, 0x444c, 0xb0d2, 0x401e, 0xba6a, 0xba5b, 0x4368, 0x46ec, 0x4493, 0x4016, 0x4601, 0x4049, 0x15b2, 0xb298, 0x18e4, 0xb22a, 0x1f07, 0x101f, 0x1908, 0xbfaf, 0x434e, 0x1125, 0x41d5, 0x1322, 0x41d0, 0xbfa2, 0x4349, 0x1fa5, 0x4289, 0x1ebd, 0x10be, 0x4328, 0x4084, 0x4076, 0xa326, 0x4262, 0xba59, 0xb017, 0x1eb2, 0x43e8, 0x43a9, 0xb014, 0x089a, 0xb22b, 0x1cf0, 0x4490, 0x1529, 0x4371, 0xbfa0, 0x43cc, 0x4127, 0xbfb7, 0xba00, 0xba0d, 0x41f4, 0xb0ea, 0x1e04, 0xbacd, 0x40bf, 0x46bc, 0x403b, 0x2642, 0x400b, 0x1d25, 0x4339, 0x4124, 0x43fb, 0x4203, 0x40f2, 0xb0f1, 0xac2d, 0xbfc0, 0x1f1c, 0x3447, 0x40b2, 0xbfa8, 0xbfb0, 0xbfb2, 0x4373, 0xabab, 0x428b, 0x400a, 0xaa61, 0xbff0, 0x46c0, 0x45e8, 0x1f40, 0xbae0, 0x2815, 0x4130, 0x39ef, 0xbace, 0x3978, 0x1c85, 0x4023, 0x1fbc, 0xbf01, 0x413b, 0x1f38, 0x4248, 0xa2f5, 0x1354, 0xa20b, 0x4287, 0x2088, 0x377f, 0x4029, 0x41a5, 0x0b8a, 0xb2ff, 0x419e, 0x003c, 0xb28e, 0xbf2a, 0xbad0, 0x3fea, 0x4138, 0x434b, 0x41c3, 0x4371, 0xb08c, 0xb240, 0x41d3, 0x42c1, 0x43ee, 0x42ae, 0x41e0, 0xb287, 0x1c7c, 0x41fc, 0x4130, 0x46e1, 0x4391, 0x1d6d, 0x401f, 0x189e, 0xbf24, 0x206b, 0xb27e, 0xb2e3, 0x432a, 0xba3f, 0x43b6, 0x1e9c, 0x41e6, 0x1943, 0x411a, 0x40d7, 0x4367, 0xa70f, 0x1088, 0x422f, 0x1d6e, 0x197a, 0x42ae, 0x3fb9, 0x01b5, 0xb226, 0x40c7, 0x3246, 0xbf58, 0xb07e, 0x4250, 0xba4e, 0xa4d2, 0xa9fa, 0x2365, 0xb28d, 0xa57c, 0xbaf7, 0xba5b, 0xb010, 0xba53, 0xbadf, 0x4122, 0xbf57, 0xb010, 0x4374, 0xbae0, 0xb2fb, 0x1fda, 0x41c7, 0x432a, 0xaa9f, 0x19da, 0x1f13, 0xb2e1, 0x1d38, 0x44a4, 0xbfb7, 0x438e, 0x054a, 0x425a, 0x3229, 0xbac4, 0x40a6, 0x404f, 0x4348, 0x41da, 0x40db, 0xafa8, 0xb0ba, 0x4004, 0x432c, 0xb058, 0x4324, 0x1daf, 0x4309, 0x42bd, 0x18cf, 0xbf6e, 0x42ee, 0x418a, 0xb270, 0xb287, 0xb209, 0x4271, 0xb0e0, 0x3c45, 0x1a47, 0xb284, 0xb224, 0x410f, 0x4230, 0xb239, 0x41d8, 0xb09f, 0x4125, 0xba3f, 0x18ea, 0x1a7b, 0x3bb4, 0xb018, 0xbf4a, 0x2a5f, 0x31f9, 0x411f, 0x4142, 0x423b, 0x4573, 0xbfb0, 0xba72, 0x1940, 0xb032, 0xbae0, 0x43e3, 0xba0c, 0x2537, 0x4081, 0xb211, 0x15fa, 0x41fa, 0xbfa0, 0xab62, 0xb0d6, 0xba2d, 0xbf51, 0x400b, 0x30b2, 0x4036, 0xaea0, 0xbf00, 0x42e8, 0x2b15, 0x1f0d, 0x381f, 0x4103, 0x4097, 0x41be, 0x235b, 0x4091, 0xbaf5, 0xb296, 0x455e, 0xb252, 0x4223, 0xba21, 0xbf90, 0x2bb5, 0x4153, 0xbf31, 0xa17a, 0x1938, 0x4210, 0x4274, 0x2b0c, 0x43b2, 0x411d, 0x1a71, 0x40e4, 0x2d1a, 0x4041, 0x4091, 0x40c5, 0x4082, 0xb256, 0x43a8, 0x4365, 0x426f, 0x42fc, 0xb058, 0xb098, 0x4077, 0xb074, 0x426f, 0x2362, 0x40fd, 0xbf22, 0xb2ba, 0xbf60, 0x438c, 0x4005, 0x4240, 0xbfd6, 0x4120, 0x42ab, 0xb0fa, 0x4674, 0x40ef, 0xbfce, 0x42fb, 0xb03e, 0x426b, 0x4116, 0x426b, 0xb29c, 0x419f, 0x4106, 0x437d, 0x43f6, 0x4625, 0x0a71, 0x424b, 0xb287, 0xa587, 0x40c2, 0xa389, 0x4043, 0xb23a, 0x0f83, 0x0e74, 0xbfa3, 0x42c8, 0x1837, 0xb04a, 0xb215, 0x1f63, 0x409b, 0x466f, 0x4020, 0x40cb, 0x1fc4, 0x424a, 0x4041, 0xab3f, 0x2513, 0xba39, 0x2761, 0x08ef, 0xb01c, 0x40ec, 0x4344, 0x432a, 0x423a, 0xbac6, 0x008b, 0x43cc, 0x1f37, 0x0f45, 0xbf11, 0x4088, 0x4359, 0x42cc, 0x1c92, 0xbacb, 0xb06c, 0xaf25, 0xb299, 0xbfde, 0x4184, 0x3ea1, 0xaab7, 0xbfc0, 0x2538, 0xbfd4, 0x4100, 0x2625, 0x419a, 0xb210, 0x231f, 0x40b5, 0xbfd9, 0x1dd1, 0x1c34, 0x41a3, 0x1c6a, 0xa756, 0xbf70, 0x430f, 0x42c1, 0x4077, 0x404f, 0x41fc, 0x4245, 0xbff0, 0x42cb, 0x3c1f, 0x1c6b, 0xab3a, 0x4083, 0x4131, 0x4234, 0x41a8, 0x41fe, 0x435e, 0x4086, 0xbf98, 0xb2c8, 0xbae1, 0x3ccd, 0x441d, 0xb29c, 0x4047, 0xbf92, 0x42ea, 0x4077, 0x1f00, 0x2d3c, 0x434f, 0x1d83, 0x2a97, 0x4238, 0x43d0, 0xb274, 0x4000, 0x438d, 0x407a, 0x199e, 0x1ec9, 0x4041, 0x4133, 0x0b38, 0x437e, 0xbadb, 0x0c6c, 0x43c9, 0x436d, 0xb2b7, 0x1b76, 0x1207, 0x403a, 0xbfa2, 0x0e8e, 0x1b82, 0x2840, 0x4018, 0xbfa5, 0x2ffa, 0x4493, 0x1cf6, 0xbfe0, 0x243e, 0x4113, 0xb28a, 0x4057, 0xb2d6, 0x43a2, 0xb2ac, 0x40d0, 0x4198, 0xae4e, 0x42f7, 0x3681, 0x4231, 0x4455, 0x35d7, 0x1e5f, 0x411e, 0xb2dc, 0x422d, 0x1edd, 0x4164, 0x2df7, 0xa616, 0x1734, 0xbf53, 0x404c, 0x4061, 0x44c8, 0x43d0, 0xbfdb, 0x415f, 0x1c73, 0xb2de, 0x40bf, 0x462e, 0x4218, 0x1dcc, 0xba45, 0xaef1, 0x425a, 0xa89f, 0xb25a, 0xa25f, 0x1fa5, 0x417a, 0xba13, 0x418e, 0x42a4, 0x35d6, 0x1b4b, 0xba13, 0xba40, 0x1b23, 0x0b14, 0xb20c, 0x2bba, 0xba45, 0x3b65, 0x256f, 0xbfd7, 0xba0d, 0xb2d5, 0x4267, 0x24e6, 0x2d6d, 0x11bc, 0x42b6, 0xbf15, 0xb217, 0xb2d8, 0x405f, 0x4143, 0xa6e6, 0xa92f, 0x42fb, 0x42bd, 0x438b, 0x458a, 0x43c3, 0x420c, 0x43bb, 0x4068, 0x43d4, 0x3fa0, 0x1968, 0x03e1, 0xb291, 0xbf90, 0x2968, 0x4029, 0x38bc, 0x431d, 0x43af, 0x1b23, 0x41a3, 0xbfd9, 0x43f3, 0x229b, 0x0925, 0xb295, 0x15ec, 0xb223, 0x19d3, 0xba1c, 0xb080, 0xb27a, 0xbf7e, 0xba7d, 0xb236, 0x4365, 0x4273, 0x1c90, 0x21b5, 0x42cf, 0x40d6, 0x18c8, 0x0777, 0x281d, 0xbfc0, 0x40ca, 0x1b92, 0x412d, 0xa3aa, 0x44c3, 0x4220, 0x4087, 0x4110, 0x43b0, 0x1aad, 0x3f60, 0x1515, 0xb2fd, 0x40ea, 0xbf0c, 0x19d3, 0x41ba, 0x4003, 0x4040, 0xb239, 0x4057, 0xbfd0, 0x439d, 0x41c6, 0x4382, 0x4122, 0x30b4, 0xbff0, 0x4285, 0x4112, 0x0eec, 0x41f2, 0x4165, 0xba79, 0xbfc0, 0xbac0, 0x43bc, 0x1fa0, 0xbf3b, 0x17fb, 0xba32, 0xba37, 0xb218, 0x4397, 0x40c6, 0xb2e3, 0xbfe4, 0xb23e, 0xb07d, 0x42cb, 0x424e, 0x4269, 0x41e7, 0x4323, 0x40f6, 0x3575, 0x4110, 0x41bc, 0xb2e8, 0x4228, 0xb242, 0x403a, 0x4262, 0xba27, 0x153a, 0xba00, 0xba70, 0x2dde, 0xb290, 0xbf91, 0x40bd, 0x427b, 0x0a83, 0x2605, 0x40ca, 0xa13e, 0x408a, 0x2078, 0xa34c, 0xbfc0, 0x4671, 0x1ae9, 0xbaed, 0x2113, 0xb27b, 0x4138, 0xb268, 0x0f57, 0xbfa5, 0xaeb6, 0xbac7, 0x4304, 0xb03a, 0x1524, 0x4439, 0xb2cf, 0xbfb0, 0xb252, 0xb083, 0x1b1f, 0x4297, 0xa384, 0x4077, 0x1b4d, 0x4386, 0x41da, 0x29a1, 0xbfc0, 0x1f1a, 0x3f17, 0x4007, 0x42f5, 0x4192, 0xbfe8, 0x2373, 0x40b8, 0x4160, 0x4621, 0xb02b, 0xae8c, 0x13f9, 0xba3d, 0x25d3, 0x3d46, 0x41df, 0x4481, 0x1289, 0xa8ac, 0x4257, 0x1157, 0x423d, 0xbff0, 0xb2f2, 0xab13, 0xbfde, 0x412c, 0xb09e, 0x40ba, 0xb0a4, 0x4356, 0x43fe, 0x4209, 0xbf3a, 0x40f3, 0x43df, 0x39a1, 0xb0c3, 0x0992, 0x46ca, 0x4269, 0x417e, 0xb200, 0x46bb, 0x41d6, 0xba1c, 0xbfe0, 0x42a5, 0x3e74, 0x4651, 0x4371, 0x435c, 0x437a, 0x23a1, 0xb217, 0x1bd7, 0x1920, 0x449b, 0xb24c, 0xbf26, 0x4551, 0x41d7, 0x43d9, 0xae4b, 0x4008, 0x403d, 0xba74, 0x43e3, 0x185b, 0xba5c, 0xbf16, 0xba06, 0xbff0, 0x4118, 0x2b3b, 0x435a, 0x409b, 0x4085, 0x434b, 0xa0a7, 0xbf02, 0x1b80, 0xb2a7, 0x1fb5, 0x2ab4, 0x4102, 0x40ec, 0x2d72, 0xba16, 0x4076, 0x23fd, 0xab93, 0xba7e, 0xbf5d, 0x41a0, 0x1d5c, 0x43cc, 0x3cb3, 0x4770, 0xe7fe + ], + StartRegs = [0x96070e06, 0x60f8a631, 0x6d122e21, 0xad567bfc, 0x291715df, 0x4658e055, 0x3efa71b8, 0x42812292, 0x84889393, 0xde7eb11f, 0x47c9ca7e, 0x0ba82b44, 0x8ffeeee8, 0x71d424e5, 0x00000000, 0x100001f0 + ], + FinalRegs = [0xb75339fa, 0xfffcaf4b, 0x00000000, 0x8488a09f, 0x000350b4, 0x48ace04c, 0x00002fab, 0x0000ab2f, 0x84889836, 0x00000741, 0x00000741, 0x000000a0, 0x00001640, 0x84889e53, 0x00000000, 0x200001d0 + ], }, new() { - Instructions = new ushort[] { 0x4361, 0xb2d9, 0x43f4, 0x2def, 0x1e99, 0x1afe, 0xbfc7, 0x43d0, 0x404f, 0xafd3, 0x4601, 0x4586, 0x4143, 0x42bd, 0x4118, 0x4128, 0x431b, 0xa978, 0x2d56, 0x4607, 0x4124, 0x401b, 0x40a2, 0x430f, 0xba2a, 0xae2f, 0xb035, 0x3079, 0xa7cc, 0x4374, 0x2f83, 0xb20d, 0xbf6c, 0xacbf, 0x40e3, 0xb23c, 0x02c5, 0x433b, 0x40fe, 0x284b, 0x4208, 0x4616, 0x444a, 0xbfc8, 0x3a02, 0x4427, 0x3cd7, 0xa66c, 0x3bf0, 0x4176, 0xb277, 0x0c72, 0x033a, 0x4374, 0x3b46, 0x4039, 0x4646, 0xbaef, 0x4694, 0x43d8, 0xbff0, 0x18d4, 0x191f, 0x1ba0, 0x34cd, 0x09c2, 0x41f8, 0x08e6, 0x22f3, 0xbf76, 0xb0c1, 0x4267, 0xba61, 0xb2cc, 0x412e, 0x41fc, 0x2b38, 0xba61, 0x4130, 0x3f3b, 0x19f1, 0xb2e9, 0x43d3, 0x429d, 0x3b51, 0x42a9, 0x3dcd, 0x06c6, 0x42e0, 0x404e, 0xbf2b, 0xa69c, 0xb26a, 0x4013, 0x2ddf, 0xba2c, 0xafc1, 0xb0c8, 0xb0e1, 0x0dbf, 0x42e7, 0x4102, 0xbf90, 0x4034, 0xb013, 0x1c3c, 0x41fb, 0x1961, 0xb26d, 0x45d2, 0xb07e, 0xbf87, 0x4085, 0x1cf2, 0xbfc0, 0x42ff, 0xa589, 0x43c3, 0xb24f, 0x418e, 0x4261, 0xab43, 0x1b92, 0xbf05, 0x4388, 0x43bb, 0x4038, 0x4393, 0x4187, 0xa081, 0xb0d2, 0x42e2, 0xbf00, 0x2535, 0x43fe, 0x42c1, 0xb24a, 0x408a, 0x1f7d, 0xbf92, 0x1bcb, 0x1b0c, 0x3141, 0xb262, 0xbf86, 0x08aa, 0xb2f5, 0x4262, 0xbfdf, 0x42ea, 0x460c, 0x424f, 0x1ada, 0x42f2, 0xa012, 0x081b, 0x4046, 0x42b5, 0xb008, 0xb231, 0xb0e8, 0x42c3, 0x4187, 0x464b, 0x4016, 0x1abe, 0x098f, 0x1e7f, 0xba68, 0x2a45, 0x1b1a, 0xbf96, 0x402f, 0x1350, 0x3bc2, 0x411b, 0x04a8, 0xb076, 0xb03b, 0x4550, 0xba39, 0xb22a, 0x42f4, 0x4334, 0x4249, 0xb268, 0x12a7, 0x414b, 0x45b1, 0x2e3a, 0xb021, 0x10fa, 0x4249, 0x40b0, 0xbf71, 0x422f, 0x1c42, 0xba7b, 0x41f7, 0xbacd, 0x3d7d, 0xba1d, 0x44d8, 0x45e3, 0x4021, 0x1933, 0xbac1, 0x386d, 0x2777, 0x2151, 0x425a, 0xb251, 0x4376, 0xb008, 0xb2fd, 0xbf42, 0x4191, 0x1724, 0x41da, 0x418a, 0x1a0b, 0x3c2d, 0x345d, 0x0f74, 0xa44e, 0x461c, 0x18d4, 0xa030, 0xb2e0, 0xba75, 0x3710, 0xbf81, 0xba2d, 0x2b8b, 0x1c31, 0x44e1, 0xbfbc, 0x40f3, 0x398e, 0xb260, 0x4567, 0x46e8, 0xb240, 0x1c35, 0xba1b, 0x46c1, 0x4109, 0x43b7, 0xb094, 0x1676, 0x4143, 0x43f1, 0xbf87, 0x136c, 0x4058, 0x1e68, 0x4234, 0x059a, 0x430d, 0x1631, 0x41fe, 0x43b6, 0xb2ed, 0xbff0, 0x4024, 0x406d, 0x4367, 0x418a, 0x4307, 0xbfaf, 0x4374, 0xbae2, 0x4097, 0x3185, 0xb0ec, 0xb051, 0x4052, 0xba60, 0x433d, 0xb210, 0x4347, 0x402e, 0x43d1, 0x412f, 0xb0f2, 0x2310, 0xbfac, 0x4191, 0xb2fd, 0x1db4, 0x4559, 0xb08f, 0xb2aa, 0x4182, 0x42ae, 0x4036, 0xaf83, 0xb234, 0x418d, 0xbf8c, 0x407b, 0xba34, 0x41cf, 0x4351, 0x41c5, 0xba77, 0x1cfd, 0xa0cd, 0xbac7, 0xbf43, 0xba21, 0x425d, 0xba4c, 0xba13, 0x413c, 0x4095, 0xa127, 0x4198, 0xb2f3, 0x1f4e, 0x40e9, 0x19cc, 0xba4c, 0xb2e0, 0x4241, 0xbf90, 0xb214, 0x4224, 0x40f4, 0x3c7c, 0x07b9, 0x43e1, 0x41c7, 0x4339, 0x4181, 0xba11, 0x0bcc, 0xbf29, 0x4051, 0x1dbf, 0xb25a, 0x07c0, 0xba76, 0x413e, 0x417f, 0x1d87, 0xa388, 0x1d2e, 0x40e6, 0x4165, 0x432e, 0x050e, 0xb0fd, 0x43f4, 0x1895, 0xbf32, 0xb090, 0x40ba, 0x1e9a, 0x1f13, 0x45d2, 0x4044, 0x1f04, 0xb2ea, 0x43fa, 0x4197, 0x43d6, 0x1de6, 0x4671, 0x402d, 0x4058, 0x1aca, 0x43c5, 0xadd4, 0x41e8, 0xba3b, 0xb273, 0xbf9c, 0x197a, 0xbaf6, 0xbfb0, 0xba0e, 0x45d1, 0x1f11, 0x4379, 0xaf6e, 0xbff0, 0xb019, 0xa676, 0xbf4e, 0x4264, 0x4351, 0xb051, 0xbae2, 0x415e, 0x4355, 0x4016, 0x437f, 0xbfca, 0x408e, 0x42ef, 0xb240, 0x40cc, 0x311b, 0x435a, 0xab55, 0x43de, 0xaeae, 0x20fa, 0xbacb, 0x4301, 0x43bd, 0x42b6, 0xbfb0, 0x403c, 0xaf7d, 0x1941, 0xbf05, 0xba02, 0x0c49, 0x42cc, 0x1e9d, 0x1efc, 0x0a69, 0x42a6, 0x42e6, 0x1ae2, 0xba55, 0xbfd0, 0x407b, 0xbaf9, 0xa02b, 0xba5d, 0xbf16, 0xb239, 0xbfa0, 0xba47, 0x418f, 0x41e9, 0xafc4, 0x23c8, 0xb04e, 0x42fb, 0xaf00, 0x402a, 0x4270, 0x4380, 0x4214, 0x4466, 0x2297, 0x441a, 0xbf6d, 0x4298, 0x1836, 0x1918, 0x3cff, 0x42ec, 0x4363, 0xbf60, 0x4311, 0xbfa3, 0x4004, 0x0c27, 0x41fe, 0x4346, 0xb0f2, 0x1544, 0x43b7, 0x412d, 0xab14, 0x1f41, 0xb2ab, 0x190f, 0x218f, 0xb2d9, 0x0e76, 0x40b8, 0xb2d0, 0x41da, 0xbf09, 0x1a5e, 0x4340, 0x4004, 0x0884, 0x437a, 0xbf90, 0x428a, 0x19e6, 0x4283, 0x439b, 0xbfb8, 0x43d1, 0xba5f, 0x4366, 0x06b4, 0x4390, 0xb20c, 0x2116, 0x10b5, 0x4266, 0x43d3, 0x17f9, 0x42d4, 0xbac7, 0x437c, 0x434e, 0x410d, 0xaef0, 0xad99, 0x231d, 0x41a0, 0xb2ac, 0x0716, 0x3728, 0x1cbc, 0xbac7, 0x42d9, 0xbf05, 0xb2fb, 0x438a, 0x08e7, 0x42f7, 0xa411, 0x35d7, 0x4631, 0x46f2, 0xa304, 0x4650, 0x4055, 0x416c, 0x4336, 0x0e29, 0x41cb, 0x40e5, 0xb2e9, 0x0e4d, 0x4172, 0x1d2c, 0x3f5c, 0x301e, 0x4245, 0xba5e, 0x0d11, 0xbf99, 0x4155, 0x02c2, 0xbfb0, 0x40ec, 0xb0a7, 0xb20a, 0xba21, 0xba5e, 0x41b8, 0x42cf, 0x41ab, 0xbfe2, 0xbae1, 0x3b4b, 0xb01c, 0x46cd, 0x43db, 0xb2c6, 0x46f0, 0x4141, 0x1c08, 0x41e4, 0xba11, 0x4127, 0xb220, 0xba75, 0x1846, 0xbf43, 0x1be2, 0x4073, 0x418f, 0x37e6, 0x2c57, 0xaf36, 0xb23b, 0x4095, 0x412e, 0x0e71, 0x42ba, 0x19ec, 0xb0ab, 0x19d9, 0xa24a, 0x362e, 0x408b, 0x1094, 0xb21f, 0x40c9, 0x42be, 0xb2c7, 0x409e, 0xbf15, 0xb0cf, 0xb00b, 0x415c, 0x4009, 0x4186, 0xb0c7, 0x4257, 0x1992, 0x40c9, 0xbf00, 0xb2d0, 0x4168, 0xbf9d, 0x43c4, 0xbaf8, 0xba68, 0xba26, 0x45bc, 0x4214, 0x1231, 0xbfd4, 0x4009, 0xba00, 0x3e72, 0xbf1e, 0xb29b, 0xbacb, 0xbaf9, 0x4352, 0x4105, 0x42e7, 0xaa0f, 0xb2b3, 0x43a6, 0x4699, 0x2170, 0x0c8e, 0xae4a, 0xbfe0, 0xb004, 0xb237, 0x1a88, 0xbf41, 0xb2ad, 0xbf00, 0x13a8, 0x42a5, 0x00cb, 0xa3f6, 0x1bd6, 0x44d1, 0xba06, 0x4278, 0xba65, 0xbfc0, 0x098f, 0x029d, 0x2a7b, 0xb2df, 0x07a7, 0x0105, 0xad3c, 0x43ac, 0x40bf, 0x428f, 0x339a, 0x40fb, 0x43b9, 0x446d, 0x42ac, 0x1083, 0xad05, 0xbf8c, 0x4264, 0x42e4, 0xbaf2, 0xbad8, 0xb21f, 0x4244, 0x25d1, 0xb282, 0x405c, 0x1a04, 0x4399, 0x414d, 0xb2fa, 0xba6b, 0xb216, 0xb250, 0x438b, 0x2b3c, 0x40b0, 0x425b, 0x412e, 0xb220, 0xb25f, 0xb2c2, 0x2ec8, 0xbf3a, 0xba70, 0x43bc, 0xb299, 0x4284, 0x369c, 0xbaff, 0x058f, 0xba2c, 0x1699, 0x42e3, 0x41ce, 0xabfc, 0xb2cc, 0x2a1e, 0xb201, 0x19d3, 0xb099, 0xbf34, 0x332f, 0x0535, 0x4422, 0x42b9, 0xbfdf, 0xb270, 0x400a, 0x40d7, 0x4024, 0x1f9e, 0x196d, 0x434c, 0x1dd6, 0x41df, 0xb219, 0x405d, 0x4022, 0x1e04, 0x41dc, 0x4296, 0x43c4, 0xba25, 0x145b, 0x42a6, 0x4154, 0xbf0a, 0x4061, 0x28b4, 0x1c9f, 0x4310, 0x274b, 0x4191, 0x4034, 0xbf7f, 0x439a, 0x42d8, 0xb0eb, 0xba0f, 0xba5a, 0x41a7, 0x43c1, 0x0538, 0x41ad, 0x42a1, 0x43ce, 0xbf04, 0xa79a, 0x1b98, 0xb018, 0xb0e0, 0x42f5, 0x4476, 0xaf71, 0x433b, 0xb212, 0xbf73, 0x0a7e, 0x2b1f, 0xbafb, 0xba4e, 0x0425, 0x420d, 0x43e2, 0x43e0, 0x4065, 0x4117, 0xba07, 0x2562, 0xa532, 0x43b3, 0xba29, 0x2779, 0x4353, 0x440b, 0x4140, 0xbf58, 0x27dc, 0x4286, 0xa57a, 0x42b2, 0x425d, 0xb2a9, 0xba52, 0x43de, 0x41ee, 0x0796, 0x1fa7, 0x2c5f, 0x2a61, 0x1c25, 0x425a, 0x40b7, 0x42f8, 0x4180, 0x40b4, 0xbfc5, 0x428e, 0x4205, 0xba23, 0x4003, 0x1f55, 0x3e3c, 0x416c, 0x42e0, 0xb234, 0x1d80, 0x432c, 0x417f, 0x4079, 0x3538, 0x1eff, 0x4475, 0xbf34, 0xb277, 0x43b6, 0x4355, 0x40d3, 0xb023, 0x17b5, 0x1d0a, 0x2b3a, 0x4455, 0x0615, 0xbf0b, 0x4045, 0x40ad, 0x2759, 0xb068, 0x40aa, 0x1f85, 0x436b, 0x4268, 0xb282, 0x40d6, 0xb0ed, 0xb01d, 0x422d, 0x4104, 0x4114, 0x1d54, 0xbf70, 0x1d50, 0xbf98, 0x432f, 0x403a, 0x417f, 0x4622, 0xb08c, 0x1bf4, 0x3219, 0x4079, 0x23f2, 0xba10, 0x29d4, 0x4224, 0x431b, 0x41ea, 0x4440, 0x41f5, 0x40c6, 0x1e5e, 0x01c4, 0x34a9, 0x1bde, 0x43b6, 0xb2e9, 0xbf24, 0x3fa4, 0xb2c1, 0x41d5, 0x4002, 0x4215, 0x185d, 0x1a17, 0xb27f, 0xb23a, 0x1397, 0x1e78, 0xb03b, 0x1cad, 0xba6a, 0x2a81, 0x0ee6, 0x4351, 0xbfbe, 0xb2fa, 0x225e, 0x429d, 0x410b, 0x4080, 0xba53, 0x4196, 0x40a2, 0x437b, 0x0a59, 0xb2aa, 0xbae9, 0x0534, 0x40a9, 0x465a, 0x448c, 0xb26a, 0xb213, 0x41c5, 0x424c, 0x18e1, 0x30fe, 0x4046, 0x40d8, 0xbf39, 0x1f57, 0x1865, 0x4059, 0x4376, 0x4564, 0x4438, 0x41e0, 0x12d8, 0xb06b, 0x4329, 0x42b6, 0x40f5, 0x41e4, 0xbac3, 0xb265, 0x4570, 0x42f8, 0x2fb0, 0x432d, 0x438e, 0x4222, 0x438f, 0xbf02, 0x43d6, 0x4179, 0x278d, 0x25df, 0xbafc, 0x251e, 0x1cfc, 0xba69, 0xbf31, 0x0ac3, 0xb0ad, 0x4205, 0x441e, 0x410c, 0xb273, 0x42be, 0x1e0d, 0xbf07, 0x468c, 0x4016, 0xa105, 0x437e, 0x416e, 0xbaf0, 0x418d, 0x3851, 0x2464, 0x43b8, 0x43e5, 0xbac0, 0x4146, 0x3c61, 0x2797, 0x4094, 0x41fb, 0x181a, 0x4437, 0xb273, 0x4365, 0x4321, 0x1fe4, 0x4199, 0x269e, 0x1c0a, 0xbf77, 0x40b0, 0x3eaf, 0x1f30, 0xa473, 0x26a3, 0x42f4, 0xb0a2, 0x4280, 0xb2d0, 0x2fb3, 0xb017, 0xb07d, 0x43f7, 0x439e, 0x43f1, 0xbfe0, 0x459e, 0x3cb3, 0xbfd6, 0x1244, 0x2ba2, 0x4391, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0xfaefb3b8, 0x78bd4750, 0x110d5992, 0x6de9a720, 0x42910210, 0xa47797d3, 0xb17bbffb, 0x69ee994d, 0xbfeace8e, 0x33a9e570, 0x6e9aadf6, 0xc053407f, 0x87f3e955, 0x34a56210, 0x00000000, 0x700001f0 }, - FinalRegs = new uint[] { 0x000000a1, 0xffffe85e, 0x000017a1, 0x00000002, 0x000018e1, 0x00000000, 0x000000a1, 0xffffff5c, 0x00000000, 0x0000ffbc, 0x00000000, 0xc053407f, 0x00021000, 0x34a56118, 0x00000000, 0x800001d0 }, + Instructions = [0x4361, 0xb2d9, 0x43f4, 0x2def, 0x1e99, 0x1afe, 0xbfc7, 0x43d0, 0x404f, 0xafd3, 0x4601, 0x4586, 0x4143, 0x42bd, 0x4118, 0x4128, 0x431b, 0xa978, 0x2d56, 0x4607, 0x4124, 0x401b, 0x40a2, 0x430f, 0xba2a, 0xae2f, 0xb035, 0x3079, 0xa7cc, 0x4374, 0x2f83, 0xb20d, 0xbf6c, 0xacbf, 0x40e3, 0xb23c, 0x02c5, 0x433b, 0x40fe, 0x284b, 0x4208, 0x4616, 0x444a, 0xbfc8, 0x3a02, 0x4427, 0x3cd7, 0xa66c, 0x3bf0, 0x4176, 0xb277, 0x0c72, 0x033a, 0x4374, 0x3b46, 0x4039, 0x4646, 0xbaef, 0x4694, 0x43d8, 0xbff0, 0x18d4, 0x191f, 0x1ba0, 0x34cd, 0x09c2, 0x41f8, 0x08e6, 0x22f3, 0xbf76, 0xb0c1, 0x4267, 0xba61, 0xb2cc, 0x412e, 0x41fc, 0x2b38, 0xba61, 0x4130, 0x3f3b, 0x19f1, 0xb2e9, 0x43d3, 0x429d, 0x3b51, 0x42a9, 0x3dcd, 0x06c6, 0x42e0, 0x404e, 0xbf2b, 0xa69c, 0xb26a, 0x4013, 0x2ddf, 0xba2c, 0xafc1, 0xb0c8, 0xb0e1, 0x0dbf, 0x42e7, 0x4102, 0xbf90, 0x4034, 0xb013, 0x1c3c, 0x41fb, 0x1961, 0xb26d, 0x45d2, 0xb07e, 0xbf87, 0x4085, 0x1cf2, 0xbfc0, 0x42ff, 0xa589, 0x43c3, 0xb24f, 0x418e, 0x4261, 0xab43, 0x1b92, 0xbf05, 0x4388, 0x43bb, 0x4038, 0x4393, 0x4187, 0xa081, 0xb0d2, 0x42e2, 0xbf00, 0x2535, 0x43fe, 0x42c1, 0xb24a, 0x408a, 0x1f7d, 0xbf92, 0x1bcb, 0x1b0c, 0x3141, 0xb262, 0xbf86, 0x08aa, 0xb2f5, 0x4262, 0xbfdf, 0x42ea, 0x460c, 0x424f, 0x1ada, 0x42f2, 0xa012, 0x081b, 0x4046, 0x42b5, 0xb008, 0xb231, 0xb0e8, 0x42c3, 0x4187, 0x464b, 0x4016, 0x1abe, 0x098f, 0x1e7f, 0xba68, 0x2a45, 0x1b1a, 0xbf96, 0x402f, 0x1350, 0x3bc2, 0x411b, 0x04a8, 0xb076, 0xb03b, 0x4550, 0xba39, 0xb22a, 0x42f4, 0x4334, 0x4249, 0xb268, 0x12a7, 0x414b, 0x45b1, 0x2e3a, 0xb021, 0x10fa, 0x4249, 0x40b0, 0xbf71, 0x422f, 0x1c42, 0xba7b, 0x41f7, 0xbacd, 0x3d7d, 0xba1d, 0x44d8, 0x45e3, 0x4021, 0x1933, 0xbac1, 0x386d, 0x2777, 0x2151, 0x425a, 0xb251, 0x4376, 0xb008, 0xb2fd, 0xbf42, 0x4191, 0x1724, 0x41da, 0x418a, 0x1a0b, 0x3c2d, 0x345d, 0x0f74, 0xa44e, 0x461c, 0x18d4, 0xa030, 0xb2e0, 0xba75, 0x3710, 0xbf81, 0xba2d, 0x2b8b, 0x1c31, 0x44e1, 0xbfbc, 0x40f3, 0x398e, 0xb260, 0x4567, 0x46e8, 0xb240, 0x1c35, 0xba1b, 0x46c1, 0x4109, 0x43b7, 0xb094, 0x1676, 0x4143, 0x43f1, 0xbf87, 0x136c, 0x4058, 0x1e68, 0x4234, 0x059a, 0x430d, 0x1631, 0x41fe, 0x43b6, 0xb2ed, 0xbff0, 0x4024, 0x406d, 0x4367, 0x418a, 0x4307, 0xbfaf, 0x4374, 0xbae2, 0x4097, 0x3185, 0xb0ec, 0xb051, 0x4052, 0xba60, 0x433d, 0xb210, 0x4347, 0x402e, 0x43d1, 0x412f, 0xb0f2, 0x2310, 0xbfac, 0x4191, 0xb2fd, 0x1db4, 0x4559, 0xb08f, 0xb2aa, 0x4182, 0x42ae, 0x4036, 0xaf83, 0xb234, 0x418d, 0xbf8c, 0x407b, 0xba34, 0x41cf, 0x4351, 0x41c5, 0xba77, 0x1cfd, 0xa0cd, 0xbac7, 0xbf43, 0xba21, 0x425d, 0xba4c, 0xba13, 0x413c, 0x4095, 0xa127, 0x4198, 0xb2f3, 0x1f4e, 0x40e9, 0x19cc, 0xba4c, 0xb2e0, 0x4241, 0xbf90, 0xb214, 0x4224, 0x40f4, 0x3c7c, 0x07b9, 0x43e1, 0x41c7, 0x4339, 0x4181, 0xba11, 0x0bcc, 0xbf29, 0x4051, 0x1dbf, 0xb25a, 0x07c0, 0xba76, 0x413e, 0x417f, 0x1d87, 0xa388, 0x1d2e, 0x40e6, 0x4165, 0x432e, 0x050e, 0xb0fd, 0x43f4, 0x1895, 0xbf32, 0xb090, 0x40ba, 0x1e9a, 0x1f13, 0x45d2, 0x4044, 0x1f04, 0xb2ea, 0x43fa, 0x4197, 0x43d6, 0x1de6, 0x4671, 0x402d, 0x4058, 0x1aca, 0x43c5, 0xadd4, 0x41e8, 0xba3b, 0xb273, 0xbf9c, 0x197a, 0xbaf6, 0xbfb0, 0xba0e, 0x45d1, 0x1f11, 0x4379, 0xaf6e, 0xbff0, 0xb019, 0xa676, 0xbf4e, 0x4264, 0x4351, 0xb051, 0xbae2, 0x415e, 0x4355, 0x4016, 0x437f, 0xbfca, 0x408e, 0x42ef, 0xb240, 0x40cc, 0x311b, 0x435a, 0xab55, 0x43de, 0xaeae, 0x20fa, 0xbacb, 0x4301, 0x43bd, 0x42b6, 0xbfb0, 0x403c, 0xaf7d, 0x1941, 0xbf05, 0xba02, 0x0c49, 0x42cc, 0x1e9d, 0x1efc, 0x0a69, 0x42a6, 0x42e6, 0x1ae2, 0xba55, 0xbfd0, 0x407b, 0xbaf9, 0xa02b, 0xba5d, 0xbf16, 0xb239, 0xbfa0, 0xba47, 0x418f, 0x41e9, 0xafc4, 0x23c8, 0xb04e, 0x42fb, 0xaf00, 0x402a, 0x4270, 0x4380, 0x4214, 0x4466, 0x2297, 0x441a, 0xbf6d, 0x4298, 0x1836, 0x1918, 0x3cff, 0x42ec, 0x4363, 0xbf60, 0x4311, 0xbfa3, 0x4004, 0x0c27, 0x41fe, 0x4346, 0xb0f2, 0x1544, 0x43b7, 0x412d, 0xab14, 0x1f41, 0xb2ab, 0x190f, 0x218f, 0xb2d9, 0x0e76, 0x40b8, 0xb2d0, 0x41da, 0xbf09, 0x1a5e, 0x4340, 0x4004, 0x0884, 0x437a, 0xbf90, 0x428a, 0x19e6, 0x4283, 0x439b, 0xbfb8, 0x43d1, 0xba5f, 0x4366, 0x06b4, 0x4390, 0xb20c, 0x2116, 0x10b5, 0x4266, 0x43d3, 0x17f9, 0x42d4, 0xbac7, 0x437c, 0x434e, 0x410d, 0xaef0, 0xad99, 0x231d, 0x41a0, 0xb2ac, 0x0716, 0x3728, 0x1cbc, 0xbac7, 0x42d9, 0xbf05, 0xb2fb, 0x438a, 0x08e7, 0x42f7, 0xa411, 0x35d7, 0x4631, 0x46f2, 0xa304, 0x4650, 0x4055, 0x416c, 0x4336, 0x0e29, 0x41cb, 0x40e5, 0xb2e9, 0x0e4d, 0x4172, 0x1d2c, 0x3f5c, 0x301e, 0x4245, 0xba5e, 0x0d11, 0xbf99, 0x4155, 0x02c2, 0xbfb0, 0x40ec, 0xb0a7, 0xb20a, 0xba21, 0xba5e, 0x41b8, 0x42cf, 0x41ab, 0xbfe2, 0xbae1, 0x3b4b, 0xb01c, 0x46cd, 0x43db, 0xb2c6, 0x46f0, 0x4141, 0x1c08, 0x41e4, 0xba11, 0x4127, 0xb220, 0xba75, 0x1846, 0xbf43, 0x1be2, 0x4073, 0x418f, 0x37e6, 0x2c57, 0xaf36, 0xb23b, 0x4095, 0x412e, 0x0e71, 0x42ba, 0x19ec, 0xb0ab, 0x19d9, 0xa24a, 0x362e, 0x408b, 0x1094, 0xb21f, 0x40c9, 0x42be, 0xb2c7, 0x409e, 0xbf15, 0xb0cf, 0xb00b, 0x415c, 0x4009, 0x4186, 0xb0c7, 0x4257, 0x1992, 0x40c9, 0xbf00, 0xb2d0, 0x4168, 0xbf9d, 0x43c4, 0xbaf8, 0xba68, 0xba26, 0x45bc, 0x4214, 0x1231, 0xbfd4, 0x4009, 0xba00, 0x3e72, 0xbf1e, 0xb29b, 0xbacb, 0xbaf9, 0x4352, 0x4105, 0x42e7, 0xaa0f, 0xb2b3, 0x43a6, 0x4699, 0x2170, 0x0c8e, 0xae4a, 0xbfe0, 0xb004, 0xb237, 0x1a88, 0xbf41, 0xb2ad, 0xbf00, 0x13a8, 0x42a5, 0x00cb, 0xa3f6, 0x1bd6, 0x44d1, 0xba06, 0x4278, 0xba65, 0xbfc0, 0x098f, 0x029d, 0x2a7b, 0xb2df, 0x07a7, 0x0105, 0xad3c, 0x43ac, 0x40bf, 0x428f, 0x339a, 0x40fb, 0x43b9, 0x446d, 0x42ac, 0x1083, 0xad05, 0xbf8c, 0x4264, 0x42e4, 0xbaf2, 0xbad8, 0xb21f, 0x4244, 0x25d1, 0xb282, 0x405c, 0x1a04, 0x4399, 0x414d, 0xb2fa, 0xba6b, 0xb216, 0xb250, 0x438b, 0x2b3c, 0x40b0, 0x425b, 0x412e, 0xb220, 0xb25f, 0xb2c2, 0x2ec8, 0xbf3a, 0xba70, 0x43bc, 0xb299, 0x4284, 0x369c, 0xbaff, 0x058f, 0xba2c, 0x1699, 0x42e3, 0x41ce, 0xabfc, 0xb2cc, 0x2a1e, 0xb201, 0x19d3, 0xb099, 0xbf34, 0x332f, 0x0535, 0x4422, 0x42b9, 0xbfdf, 0xb270, 0x400a, 0x40d7, 0x4024, 0x1f9e, 0x196d, 0x434c, 0x1dd6, 0x41df, 0xb219, 0x405d, 0x4022, 0x1e04, 0x41dc, 0x4296, 0x43c4, 0xba25, 0x145b, 0x42a6, 0x4154, 0xbf0a, 0x4061, 0x28b4, 0x1c9f, 0x4310, 0x274b, 0x4191, 0x4034, 0xbf7f, 0x439a, 0x42d8, 0xb0eb, 0xba0f, 0xba5a, 0x41a7, 0x43c1, 0x0538, 0x41ad, 0x42a1, 0x43ce, 0xbf04, 0xa79a, 0x1b98, 0xb018, 0xb0e0, 0x42f5, 0x4476, 0xaf71, 0x433b, 0xb212, 0xbf73, 0x0a7e, 0x2b1f, 0xbafb, 0xba4e, 0x0425, 0x420d, 0x43e2, 0x43e0, 0x4065, 0x4117, 0xba07, 0x2562, 0xa532, 0x43b3, 0xba29, 0x2779, 0x4353, 0x440b, 0x4140, 0xbf58, 0x27dc, 0x4286, 0xa57a, 0x42b2, 0x425d, 0xb2a9, 0xba52, 0x43de, 0x41ee, 0x0796, 0x1fa7, 0x2c5f, 0x2a61, 0x1c25, 0x425a, 0x40b7, 0x42f8, 0x4180, 0x40b4, 0xbfc5, 0x428e, 0x4205, 0xba23, 0x4003, 0x1f55, 0x3e3c, 0x416c, 0x42e0, 0xb234, 0x1d80, 0x432c, 0x417f, 0x4079, 0x3538, 0x1eff, 0x4475, 0xbf34, 0xb277, 0x43b6, 0x4355, 0x40d3, 0xb023, 0x17b5, 0x1d0a, 0x2b3a, 0x4455, 0x0615, 0xbf0b, 0x4045, 0x40ad, 0x2759, 0xb068, 0x40aa, 0x1f85, 0x436b, 0x4268, 0xb282, 0x40d6, 0xb0ed, 0xb01d, 0x422d, 0x4104, 0x4114, 0x1d54, 0xbf70, 0x1d50, 0xbf98, 0x432f, 0x403a, 0x417f, 0x4622, 0xb08c, 0x1bf4, 0x3219, 0x4079, 0x23f2, 0xba10, 0x29d4, 0x4224, 0x431b, 0x41ea, 0x4440, 0x41f5, 0x40c6, 0x1e5e, 0x01c4, 0x34a9, 0x1bde, 0x43b6, 0xb2e9, 0xbf24, 0x3fa4, 0xb2c1, 0x41d5, 0x4002, 0x4215, 0x185d, 0x1a17, 0xb27f, 0xb23a, 0x1397, 0x1e78, 0xb03b, 0x1cad, 0xba6a, 0x2a81, 0x0ee6, 0x4351, 0xbfbe, 0xb2fa, 0x225e, 0x429d, 0x410b, 0x4080, 0xba53, 0x4196, 0x40a2, 0x437b, 0x0a59, 0xb2aa, 0xbae9, 0x0534, 0x40a9, 0x465a, 0x448c, 0xb26a, 0xb213, 0x41c5, 0x424c, 0x18e1, 0x30fe, 0x4046, 0x40d8, 0xbf39, 0x1f57, 0x1865, 0x4059, 0x4376, 0x4564, 0x4438, 0x41e0, 0x12d8, 0xb06b, 0x4329, 0x42b6, 0x40f5, 0x41e4, 0xbac3, 0xb265, 0x4570, 0x42f8, 0x2fb0, 0x432d, 0x438e, 0x4222, 0x438f, 0xbf02, 0x43d6, 0x4179, 0x278d, 0x25df, 0xbafc, 0x251e, 0x1cfc, 0xba69, 0xbf31, 0x0ac3, 0xb0ad, 0x4205, 0x441e, 0x410c, 0xb273, 0x42be, 0x1e0d, 0xbf07, 0x468c, 0x4016, 0xa105, 0x437e, 0x416e, 0xbaf0, 0x418d, 0x3851, 0x2464, 0x43b8, 0x43e5, 0xbac0, 0x4146, 0x3c61, 0x2797, 0x4094, 0x41fb, 0x181a, 0x4437, 0xb273, 0x4365, 0x4321, 0x1fe4, 0x4199, 0x269e, 0x1c0a, 0xbf77, 0x40b0, 0x3eaf, 0x1f30, 0xa473, 0x26a3, 0x42f4, 0xb0a2, 0x4280, 0xb2d0, 0x2fb3, 0xb017, 0xb07d, 0x43f7, 0x439e, 0x43f1, 0xbfe0, 0x459e, 0x3cb3, 0xbfd6, 0x1244, 0x2ba2, 0x4391, 0x4770, 0xe7fe + ], + StartRegs = [0xfaefb3b8, 0x78bd4750, 0x110d5992, 0x6de9a720, 0x42910210, 0xa47797d3, 0xb17bbffb, 0x69ee994d, 0xbfeace8e, 0x33a9e570, 0x6e9aadf6, 0xc053407f, 0x87f3e955, 0x34a56210, 0x00000000, 0x700001f0 + ], + FinalRegs = [0x000000a1, 0xffffe85e, 0x000017a1, 0x00000002, 0x000018e1, 0x00000000, 0x000000a1, 0xffffff5c, 0x00000000, 0x0000ffbc, 0x00000000, 0xc053407f, 0x00021000, 0x34a56118, 0x00000000, 0x800001d0 + ], }, new() { - Instructions = new ushort[] { 0xba27, 0x42db, 0x40d3, 0x4362, 0x409f, 0x1812, 0xbac7, 0xa7df, 0x34cd, 0xa70f, 0x4280, 0x40b0, 0xb0ee, 0x01be, 0xb211, 0x4052, 0xb2a7, 0x4063, 0x406f, 0x4654, 0x434e, 0x42fb, 0xbf25, 0x4269, 0x1119, 0xb264, 0x4301, 0xba63, 0x1a18, 0xb2fb, 0x1887, 0x2f9b, 0xb233, 0x440e, 0x4206, 0xbad1, 0xb09d, 0x262b, 0xb2d3, 0xba06, 0xab5c, 0x2ee6, 0x4419, 0x339c, 0xb2d1, 0x4192, 0xbf72, 0xbae1, 0x410e, 0x41fe, 0x4193, 0xbf00, 0xba7d, 0xb2b6, 0x4318, 0x1eee, 0xb2f0, 0x413c, 0xba4b, 0x41e0, 0xb02d, 0x4287, 0x4467, 0xba35, 0x46d4, 0xa117, 0xbf5c, 0x40b4, 0xa074, 0x2102, 0x4230, 0x0167, 0x44e9, 0x0471, 0x4106, 0x42b1, 0x00af, 0x1a8c, 0x1ae2, 0xabbf, 0x42c5, 0x1b0b, 0x123f, 0x406d, 0xbf91, 0xb09b, 0xb276, 0xb07c, 0x4383, 0x18ab, 0x4156, 0xb2aa, 0xbf7b, 0x191b, 0xb228, 0xb263, 0x0dda, 0x4062, 0x46fa, 0x3720, 0x1f98, 0xb045, 0xb235, 0x1fa8, 0x4276, 0xb27a, 0xa3a8, 0x434b, 0x2044, 0x1f00, 0x169e, 0xbae6, 0xadf8, 0x4272, 0x4004, 0x42de, 0x2bee, 0xba2c, 0xbfb6, 0xb043, 0x415d, 0xb27f, 0x4213, 0x1ebb, 0x4077, 0xb284, 0xa9ab, 0x40a5, 0xb2a9, 0xb254, 0x4593, 0xa036, 0xb058, 0xb2ab, 0x3458, 0x1fa6, 0x3798, 0x4180, 0x41c0, 0x46cd, 0x1155, 0x42cd, 0xbf58, 0xba33, 0xa87e, 0xb012, 0x43eb, 0x2dc8, 0x42f8, 0x1e62, 0xb24f, 0x413d, 0x412d, 0x4335, 0x1915, 0x1ecf, 0x1358, 0x4419, 0x40ec, 0x438f, 0x2cb3, 0x360d, 0x2b61, 0x1cea, 0x0ed4, 0xb2e1, 0xb206, 0xb255, 0xbfa1, 0x1bc7, 0xb011, 0x4306, 0x3b69, 0xa9a9, 0xb20b, 0xad51, 0x420f, 0x1493, 0x4140, 0x405f, 0xb03f, 0x4107, 0x422c, 0x186c, 0xb285, 0x4350, 0x4115, 0x196d, 0xba29, 0xbaeb, 0x4340, 0x404c, 0x4195, 0xba1d, 0x4156, 0x4257, 0xbf45, 0x19bf, 0x4356, 0x3366, 0x40fa, 0x4022, 0x40e4, 0xa663, 0x284c, 0xbf4a, 0x415c, 0x0de3, 0x411d, 0x4268, 0x36e8, 0xbafe, 0xb0b5, 0x40b6, 0x406c, 0x4131, 0xb01b, 0x4281, 0x174c, 0xb06b, 0x421d, 0x412e, 0x4159, 0x4346, 0x01c4, 0x2f52, 0xbfd7, 0xb0f4, 0xb0b7, 0x4053, 0x1ce2, 0xbfdd, 0x40ae, 0xb286, 0x41d1, 0x4156, 0x1b8d, 0x41e1, 0x4281, 0x1844, 0xb297, 0x1c04, 0x405e, 0x1841, 0x412a, 0x414d, 0x45c8, 0xba0a, 0xb25d, 0xadc5, 0xa7eb, 0xbfad, 0x45e0, 0x41ce, 0x4230, 0x4232, 0x41e4, 0x42f1, 0x4566, 0x46d3, 0x1f16, 0x419c, 0x2db3, 0x4312, 0x30ff, 0x28e3, 0xbfd2, 0x4277, 0xa610, 0x41b8, 0xbad9, 0x42db, 0x1ff4, 0x088c, 0x41e5, 0x4104, 0xbf60, 0x0a11, 0x380e, 0xb24f, 0xb287, 0x42a9, 0xb006, 0xba45, 0x408d, 0x414f, 0x1d4e, 0xbf03, 0x3191, 0x41f3, 0xb260, 0x1f59, 0x4347, 0x42f8, 0x412d, 0x43f0, 0x1d4e, 0x42ba, 0xab0a, 0x1f8d, 0x432c, 0xaf72, 0x1bbd, 0x4130, 0x43ab, 0x41ba, 0x0066, 0xbf01, 0x1477, 0x410f, 0x40f3, 0x415c, 0x197b, 0x2fe1, 0x4542, 0xbf31, 0x4020, 0x420c, 0xa16c, 0xb231, 0xba34, 0x420e, 0x46f5, 0x0851, 0x4374, 0xbf22, 0xba20, 0x1df1, 0xb2fb, 0xb090, 0x431f, 0x44cc, 0x411a, 0xb2dd, 0x46b3, 0xba7b, 0x42b1, 0xb267, 0x41e5, 0x41c9, 0x414b, 0x40df, 0xa37b, 0xb2ef, 0x411d, 0xb29b, 0x1380, 0xbf2a, 0x41f5, 0xb280, 0xb2f2, 0x0ed2, 0x4329, 0xb248, 0x0969, 0x4631, 0x40f3, 0x43d0, 0xb093, 0xbf5f, 0xb204, 0x4463, 0x1d6d, 0x4382, 0x41a4, 0x40dc, 0x43f2, 0x460d, 0x42a1, 0x0a18, 0xb097, 0x23aa, 0x1acb, 0x1ff4, 0xb270, 0x0311, 0x0baa, 0x338c, 0xbf01, 0xb22a, 0x422c, 0xb2ae, 0x4369, 0x43d4, 0xba01, 0x41c8, 0xbafb, 0xb034, 0x0c66, 0xb221, 0x432c, 0x1b48, 0x413f, 0x4014, 0xa721, 0xbae1, 0xbae8, 0x192f, 0xba20, 0x416b, 0xb2cd, 0x408f, 0xbf61, 0x42a8, 0x3999, 0xbaff, 0x43a6, 0x416a, 0x4148, 0xb00e, 0x10c7, 0x1a90, 0xba63, 0xbf81, 0xb03e, 0xbaf7, 0x4046, 0x40a1, 0x439d, 0x4141, 0x2c5c, 0x29a6, 0x2b42, 0x0a7a, 0x3b4a, 0x42d6, 0x249b, 0x3240, 0x2ca8, 0xb2e1, 0xbfb8, 0x4059, 0x19ad, 0xb27c, 0xba73, 0x4270, 0x171d, 0x4183, 0xbac4, 0x43bf, 0x4418, 0x4169, 0x422e, 0x41e2, 0x43c2, 0xbf6d, 0x40de, 0xb283, 0x432a, 0x437e, 0xb2b8, 0x4277, 0x4338, 0x40d1, 0x42f7, 0xb2b2, 0xbaef, 0x16a7, 0x4124, 0x4341, 0xbf80, 0xb262, 0x021b, 0xb042, 0x18df, 0x1038, 0xb292, 0x1d14, 0xb0ee, 0x429e, 0x4019, 0xb293, 0x4216, 0xbf62, 0x07a6, 0xb281, 0x1f1b, 0x4660, 0x4568, 0x279d, 0x43e9, 0x45e1, 0xb27b, 0x40fe, 0xb242, 0x42d7, 0x2b9f, 0xb28d, 0xbfb1, 0xb2d4, 0x40ed, 0x43f7, 0xb05a, 0x34cd, 0xb2cc, 0x426d, 0x1c09, 0x414c, 0x4146, 0xb0ac, 0x434e, 0xb2f2, 0xba3c, 0xa981, 0x224b, 0xba0d, 0xb239, 0xbf8a, 0x3ae8, 0x40aa, 0x3459, 0xbf90, 0x4491, 0xb2e0, 0xba62, 0x425b, 0x41b8, 0x427e, 0xb24e, 0x4117, 0xbfc8, 0xa2f2, 0x1c4d, 0xaae2, 0x2776, 0xba4b, 0xbf03, 0x1f0e, 0x41ff, 0xa3a7, 0x21d9, 0x1520, 0xb2d1, 0x4344, 0x4669, 0x42b5, 0xba0a, 0x3274, 0xb23b, 0x1a2d, 0xbf60, 0x4424, 0x43e3, 0x4236, 0xbfa1, 0x4335, 0x41d8, 0xb2fa, 0xba3b, 0x3433, 0xb099, 0xbf26, 0x415a, 0x149b, 0x1e17, 0x2be1, 0x41c8, 0x26ac, 0x18c2, 0xbfe4, 0x27e9, 0x2413, 0x41c9, 0x29b1, 0xa042, 0xba56, 0xba44, 0x1c5f, 0xba32, 0xba60, 0xbac1, 0xa246, 0x1a6e, 0x41dc, 0xb2f1, 0x18f1, 0x1b38, 0x331a, 0x2a6f, 0x40e4, 0x0350, 0x1ff6, 0x43fb, 0xbf77, 0x2b4e, 0x1f7b, 0xa24e, 0xb05b, 0xbf51, 0x1b2f, 0xbaf4, 0x0756, 0x4238, 0x1c0d, 0x2351, 0xb03c, 0x2234, 0xb2c8, 0xb073, 0x1a1e, 0x4171, 0x3256, 0x0169, 0xa84a, 0x43f6, 0x2cb9, 0x429b, 0xba22, 0xbf9a, 0x43ba, 0x46cd, 0x30ba, 0x02fa, 0x42c5, 0x0ca2, 0x326a, 0x428b, 0x43be, 0x114e, 0xbf2c, 0x0816, 0x0903, 0x1a3d, 0xb291, 0x4025, 0xab9a, 0xa63e, 0x426f, 0x42f1, 0x1d96, 0x1e6c, 0x4117, 0x403d, 0x1ecb, 0x438c, 0xbfc4, 0x4110, 0xba01, 0x458c, 0x442e, 0xb07a, 0xb2fb, 0x43dc, 0xb2d4, 0x1bec, 0x407a, 0x19ff, 0x0fd7, 0x4321, 0x1e0c, 0x2ff7, 0xbf91, 0x4266, 0x1dd1, 0x42de, 0xbf90, 0xb208, 0x40a4, 0x1ff9, 0x41c7, 0xb276, 0x408b, 0xbfaf, 0xb2f4, 0x4056, 0xa933, 0x42c6, 0x4198, 0x42ee, 0xbad7, 0xb288, 0xb28f, 0x42b7, 0x43f8, 0xb27b, 0xaa4e, 0x4066, 0x30f5, 0x4242, 0x41e1, 0xba7e, 0xa066, 0x4038, 0x1c69, 0xba0c, 0x4372, 0xb08a, 0xbaef, 0x4314, 0x41c4, 0xbf9f, 0x4355, 0xb2be, 0xb096, 0x402d, 0xb206, 0xb2d6, 0x3674, 0x159d, 0x4093, 0x41dd, 0x427c, 0x40a7, 0xb0ca, 0xb214, 0xb25c, 0xbf1e, 0x4043, 0xa1bb, 0x41c7, 0x4655, 0x1805, 0x4313, 0xba4b, 0xb03c, 0xb2d9, 0xa67b, 0x291b, 0x0eb7, 0x425b, 0xb007, 0x4669, 0xb2aa, 0x41e8, 0x41b0, 0x4015, 0xa496, 0x3460, 0x43cd, 0x44f4, 0xbf01, 0x41cd, 0x4393, 0xad38, 0xba1a, 0xbf4b, 0x2960, 0x43a0, 0xba2d, 0x4559, 0xb0c7, 0x173a, 0x263a, 0xb23e, 0x43c1, 0x43aa, 0xa3b5, 0xba78, 0x0bf1, 0x4126, 0x067a, 0x42fc, 0x446f, 0x0b51, 0x2b2a, 0x439e, 0xb23c, 0xbf23, 0xb078, 0xbae6, 0x0398, 0xa8d3, 0x42ec, 0x431c, 0x41ed, 0x40d1, 0xba3d, 0x2317, 0xbac5, 0x42e1, 0x4268, 0x361b, 0x4235, 0x4151, 0x4596, 0x1ac6, 0x4215, 0xbfbc, 0xb0c0, 0x4296, 0x2525, 0x4287, 0xbf69, 0x24a2, 0x425c, 0xb258, 0xb01f, 0xbf3d, 0xb246, 0xb2cb, 0xbae2, 0xb284, 0xbac2, 0x4339, 0x4580, 0x3c52, 0x40f7, 0x04a0, 0xa9ab, 0x416b, 0xadba, 0x429d, 0x4270, 0x3def, 0x1a98, 0xbf65, 0x4286, 0x4056, 0x3ef0, 0xb287, 0x0bfb, 0x45e1, 0xb270, 0x0e86, 0x4006, 0x4593, 0xaf1d, 0x403a, 0x4113, 0x401e, 0x4209, 0x4018, 0x4130, 0x41ac, 0x425d, 0x42ba, 0xa052, 0x43de, 0x073f, 0x4018, 0xba5b, 0xb2e8, 0x1b83, 0x424a, 0x4000, 0xbf61, 0x1f92, 0x4086, 0x404a, 0x2004, 0x45e1, 0x4221, 0x4257, 0xbf9a, 0x1c3a, 0x20b9, 0x41b2, 0x429b, 0x4097, 0x40cb, 0xbfdb, 0x41de, 0x4107, 0xa45c, 0x426d, 0xafd3, 0x412f, 0x199b, 0x42ac, 0x4389, 0xbf41, 0xb20a, 0xa51d, 0x439f, 0x41ff, 0x4215, 0x3e5e, 0xba14, 0x18f3, 0x428a, 0x43fd, 0x438e, 0x4272, 0x1b74, 0x42ad, 0x417d, 0x1ff0, 0x1b9c, 0x41b7, 0x41b6, 0x405f, 0x17e5, 0xb2a3, 0x07dc, 0xbf22, 0xb08c, 0x409e, 0xb23e, 0xb2b4, 0x29f8, 0x44e8, 0x41ad, 0xba65, 0x4200, 0x41b5, 0xbf8c, 0x1ee4, 0x41ff, 0x40f0, 0xb2b3, 0x45dd, 0xba63, 0x1e16, 0xbfe2, 0x1ee9, 0xa4e7, 0xb07c, 0xae9f, 0xba20, 0x403a, 0x4260, 0x439a, 0x444f, 0x40bb, 0x430f, 0xbf57, 0x18d5, 0x43ba, 0x0350, 0x2a39, 0xaade, 0x0a7a, 0xb239, 0xb2c2, 0xb0a4, 0x0999, 0x4270, 0x4390, 0xbfb6, 0x4048, 0xbfa0, 0xb20d, 0x4026, 0xba4e, 0x430e, 0x4375, 0x4171, 0xb278, 0x4256, 0x40bd, 0x42e4, 0x1c1e, 0xb2de, 0xbf58, 0x059b, 0xb243, 0x197d, 0x4084, 0xa945, 0xb03f, 0x4430, 0x1c82, 0xa4a0, 0x43c7, 0x41e8, 0x41a5, 0xba57, 0x0ecc, 0x2e03, 0xba50, 0x42f7, 0xb017, 0x42b2, 0xbac1, 0xbfbc, 0x408a, 0x0c66, 0xa768, 0xb223, 0x427c, 0x448d, 0x445f, 0x437d, 0x405e, 0x42a3, 0x257d, 0x4485, 0x44ec, 0xba2b, 0x4177, 0x42ea, 0x42f5, 0x43cc, 0x4681, 0x4211, 0x416c, 0xb038, 0xba19, 0x4669, 0xbfbb, 0x08f8, 0x4338, 0xb2cf, 0x4653, 0xa218, 0xb2f6, 0x1894, 0xbaed, 0xb2c1, 0x19ae, 0x1138, 0x1b80, 0x4158, 0x41ea, 0xb083, 0xbfe2, 0xacb0, 0x1d95, 0xa07c, 0x4770, 0xe7fe }, - StartRegs = new uint[] { 0x53e412bb, 0xf8075b4a, 0xc06d1392, 0xad332bbd, 0x27e72f7d, 0xac8f8bd5, 0x3a5b2232, 0xc5e2c8ec, 0xe032a7a7, 0x2b035634, 0x4a720b19, 0x0f87e928, 0x73db65d8, 0x6c7bc94f, 0x00000000, 0xf00001f0 }, - FinalRegs = new uint[] { 0x000019d4, 0x00000000, 0x00001828, 0x7d000000, 0x977f681b, 0x0000182e, 0x00007d12, 0x00000067, 0x77b1c835, 0x00004100, 0x000010c8, 0x0000000e, 0x79708dab, 0x977f655b, 0x00000000, 0x200001d0 }, - }, - }; + Instructions = [0xba27, 0x42db, 0x40d3, 0x4362, 0x409f, 0x1812, 0xbac7, 0xa7df, 0x34cd, 0xa70f, 0x4280, 0x40b0, 0xb0ee, 0x01be, 0xb211, 0x4052, 0xb2a7, 0x4063, 0x406f, 0x4654, 0x434e, 0x42fb, 0xbf25, 0x4269, 0x1119, 0xb264, 0x4301, 0xba63, 0x1a18, 0xb2fb, 0x1887, 0x2f9b, 0xb233, 0x440e, 0x4206, 0xbad1, 0xb09d, 0x262b, 0xb2d3, 0xba06, 0xab5c, 0x2ee6, 0x4419, 0x339c, 0xb2d1, 0x4192, 0xbf72, 0xbae1, 0x410e, 0x41fe, 0x4193, 0xbf00, 0xba7d, 0xb2b6, 0x4318, 0x1eee, 0xb2f0, 0x413c, 0xba4b, 0x41e0, 0xb02d, 0x4287, 0x4467, 0xba35, 0x46d4, 0xa117, 0xbf5c, 0x40b4, 0xa074, 0x2102, 0x4230, 0x0167, 0x44e9, 0x0471, 0x4106, 0x42b1, 0x00af, 0x1a8c, 0x1ae2, 0xabbf, 0x42c5, 0x1b0b, 0x123f, 0x406d, 0xbf91, 0xb09b, 0xb276, 0xb07c, 0x4383, 0x18ab, 0x4156, 0xb2aa, 0xbf7b, 0x191b, 0xb228, 0xb263, 0x0dda, 0x4062, 0x46fa, 0x3720, 0x1f98, 0xb045, 0xb235, 0x1fa8, 0x4276, 0xb27a, 0xa3a8, 0x434b, 0x2044, 0x1f00, 0x169e, 0xbae6, 0xadf8, 0x4272, 0x4004, 0x42de, 0x2bee, 0xba2c, 0xbfb6, 0xb043, 0x415d, 0xb27f, 0x4213, 0x1ebb, 0x4077, 0xb284, 0xa9ab, 0x40a5, 0xb2a9, 0xb254, 0x4593, 0xa036, 0xb058, 0xb2ab, 0x3458, 0x1fa6, 0x3798, 0x4180, 0x41c0, 0x46cd, 0x1155, 0x42cd, 0xbf58, 0xba33, 0xa87e, 0xb012, 0x43eb, 0x2dc8, 0x42f8, 0x1e62, 0xb24f, 0x413d, 0x412d, 0x4335, 0x1915, 0x1ecf, 0x1358, 0x4419, 0x40ec, 0x438f, 0x2cb3, 0x360d, 0x2b61, 0x1cea, 0x0ed4, 0xb2e1, 0xb206, 0xb255, 0xbfa1, 0x1bc7, 0xb011, 0x4306, 0x3b69, 0xa9a9, 0xb20b, 0xad51, 0x420f, 0x1493, 0x4140, 0x405f, 0xb03f, 0x4107, 0x422c, 0x186c, 0xb285, 0x4350, 0x4115, 0x196d, 0xba29, 0xbaeb, 0x4340, 0x404c, 0x4195, 0xba1d, 0x4156, 0x4257, 0xbf45, 0x19bf, 0x4356, 0x3366, 0x40fa, 0x4022, 0x40e4, 0xa663, 0x284c, 0xbf4a, 0x415c, 0x0de3, 0x411d, 0x4268, 0x36e8, 0xbafe, 0xb0b5, 0x40b6, 0x406c, 0x4131, 0xb01b, 0x4281, 0x174c, 0xb06b, 0x421d, 0x412e, 0x4159, 0x4346, 0x01c4, 0x2f52, 0xbfd7, 0xb0f4, 0xb0b7, 0x4053, 0x1ce2, 0xbfdd, 0x40ae, 0xb286, 0x41d1, 0x4156, 0x1b8d, 0x41e1, 0x4281, 0x1844, 0xb297, 0x1c04, 0x405e, 0x1841, 0x412a, 0x414d, 0x45c8, 0xba0a, 0xb25d, 0xadc5, 0xa7eb, 0xbfad, 0x45e0, 0x41ce, 0x4230, 0x4232, 0x41e4, 0x42f1, 0x4566, 0x46d3, 0x1f16, 0x419c, 0x2db3, 0x4312, 0x30ff, 0x28e3, 0xbfd2, 0x4277, 0xa610, 0x41b8, 0xbad9, 0x42db, 0x1ff4, 0x088c, 0x41e5, 0x4104, 0xbf60, 0x0a11, 0x380e, 0xb24f, 0xb287, 0x42a9, 0xb006, 0xba45, 0x408d, 0x414f, 0x1d4e, 0xbf03, 0x3191, 0x41f3, 0xb260, 0x1f59, 0x4347, 0x42f8, 0x412d, 0x43f0, 0x1d4e, 0x42ba, 0xab0a, 0x1f8d, 0x432c, 0xaf72, 0x1bbd, 0x4130, 0x43ab, 0x41ba, 0x0066, 0xbf01, 0x1477, 0x410f, 0x40f3, 0x415c, 0x197b, 0x2fe1, 0x4542, 0xbf31, 0x4020, 0x420c, 0xa16c, 0xb231, 0xba34, 0x420e, 0x46f5, 0x0851, 0x4374, 0xbf22, 0xba20, 0x1df1, 0xb2fb, 0xb090, 0x431f, 0x44cc, 0x411a, 0xb2dd, 0x46b3, 0xba7b, 0x42b1, 0xb267, 0x41e5, 0x41c9, 0x414b, 0x40df, 0xa37b, 0xb2ef, 0x411d, 0xb29b, 0x1380, 0xbf2a, 0x41f5, 0xb280, 0xb2f2, 0x0ed2, 0x4329, 0xb248, 0x0969, 0x4631, 0x40f3, 0x43d0, 0xb093, 0xbf5f, 0xb204, 0x4463, 0x1d6d, 0x4382, 0x41a4, 0x40dc, 0x43f2, 0x460d, 0x42a1, 0x0a18, 0xb097, 0x23aa, 0x1acb, 0x1ff4, 0xb270, 0x0311, 0x0baa, 0x338c, 0xbf01, 0xb22a, 0x422c, 0xb2ae, 0x4369, 0x43d4, 0xba01, 0x41c8, 0xbafb, 0xb034, 0x0c66, 0xb221, 0x432c, 0x1b48, 0x413f, 0x4014, 0xa721, 0xbae1, 0xbae8, 0x192f, 0xba20, 0x416b, 0xb2cd, 0x408f, 0xbf61, 0x42a8, 0x3999, 0xbaff, 0x43a6, 0x416a, 0x4148, 0xb00e, 0x10c7, 0x1a90, 0xba63, 0xbf81, 0xb03e, 0xbaf7, 0x4046, 0x40a1, 0x439d, 0x4141, 0x2c5c, 0x29a6, 0x2b42, 0x0a7a, 0x3b4a, 0x42d6, 0x249b, 0x3240, 0x2ca8, 0xb2e1, 0xbfb8, 0x4059, 0x19ad, 0xb27c, 0xba73, 0x4270, 0x171d, 0x4183, 0xbac4, 0x43bf, 0x4418, 0x4169, 0x422e, 0x41e2, 0x43c2, 0xbf6d, 0x40de, 0xb283, 0x432a, 0x437e, 0xb2b8, 0x4277, 0x4338, 0x40d1, 0x42f7, 0xb2b2, 0xbaef, 0x16a7, 0x4124, 0x4341, 0xbf80, 0xb262, 0x021b, 0xb042, 0x18df, 0x1038, 0xb292, 0x1d14, 0xb0ee, 0x429e, 0x4019, 0xb293, 0x4216, 0xbf62, 0x07a6, 0xb281, 0x1f1b, 0x4660, 0x4568, 0x279d, 0x43e9, 0x45e1, 0xb27b, 0x40fe, 0xb242, 0x42d7, 0x2b9f, 0xb28d, 0xbfb1, 0xb2d4, 0x40ed, 0x43f7, 0xb05a, 0x34cd, 0xb2cc, 0x426d, 0x1c09, 0x414c, 0x4146, 0xb0ac, 0x434e, 0xb2f2, 0xba3c, 0xa981, 0x224b, 0xba0d, 0xb239, 0xbf8a, 0x3ae8, 0x40aa, 0x3459, 0xbf90, 0x4491, 0xb2e0, 0xba62, 0x425b, 0x41b8, 0x427e, 0xb24e, 0x4117, 0xbfc8, 0xa2f2, 0x1c4d, 0xaae2, 0x2776, 0xba4b, 0xbf03, 0x1f0e, 0x41ff, 0xa3a7, 0x21d9, 0x1520, 0xb2d1, 0x4344, 0x4669, 0x42b5, 0xba0a, 0x3274, 0xb23b, 0x1a2d, 0xbf60, 0x4424, 0x43e3, 0x4236, 0xbfa1, 0x4335, 0x41d8, 0xb2fa, 0xba3b, 0x3433, 0xb099, 0xbf26, 0x415a, 0x149b, 0x1e17, 0x2be1, 0x41c8, 0x26ac, 0x18c2, 0xbfe4, 0x27e9, 0x2413, 0x41c9, 0x29b1, 0xa042, 0xba56, 0xba44, 0x1c5f, 0xba32, 0xba60, 0xbac1, 0xa246, 0x1a6e, 0x41dc, 0xb2f1, 0x18f1, 0x1b38, 0x331a, 0x2a6f, 0x40e4, 0x0350, 0x1ff6, 0x43fb, 0xbf77, 0x2b4e, 0x1f7b, 0xa24e, 0xb05b, 0xbf51, 0x1b2f, 0xbaf4, 0x0756, 0x4238, 0x1c0d, 0x2351, 0xb03c, 0x2234, 0xb2c8, 0xb073, 0x1a1e, 0x4171, 0x3256, 0x0169, 0xa84a, 0x43f6, 0x2cb9, 0x429b, 0xba22, 0xbf9a, 0x43ba, 0x46cd, 0x30ba, 0x02fa, 0x42c5, 0x0ca2, 0x326a, 0x428b, 0x43be, 0x114e, 0xbf2c, 0x0816, 0x0903, 0x1a3d, 0xb291, 0x4025, 0xab9a, 0xa63e, 0x426f, 0x42f1, 0x1d96, 0x1e6c, 0x4117, 0x403d, 0x1ecb, 0x438c, 0xbfc4, 0x4110, 0xba01, 0x458c, 0x442e, 0xb07a, 0xb2fb, 0x43dc, 0xb2d4, 0x1bec, 0x407a, 0x19ff, 0x0fd7, 0x4321, 0x1e0c, 0x2ff7, 0xbf91, 0x4266, 0x1dd1, 0x42de, 0xbf90, 0xb208, 0x40a4, 0x1ff9, 0x41c7, 0xb276, 0x408b, 0xbfaf, 0xb2f4, 0x4056, 0xa933, 0x42c6, 0x4198, 0x42ee, 0xbad7, 0xb288, 0xb28f, 0x42b7, 0x43f8, 0xb27b, 0xaa4e, 0x4066, 0x30f5, 0x4242, 0x41e1, 0xba7e, 0xa066, 0x4038, 0x1c69, 0xba0c, 0x4372, 0xb08a, 0xbaef, 0x4314, 0x41c4, 0xbf9f, 0x4355, 0xb2be, 0xb096, 0x402d, 0xb206, 0xb2d6, 0x3674, 0x159d, 0x4093, 0x41dd, 0x427c, 0x40a7, 0xb0ca, 0xb214, 0xb25c, 0xbf1e, 0x4043, 0xa1bb, 0x41c7, 0x4655, 0x1805, 0x4313, 0xba4b, 0xb03c, 0xb2d9, 0xa67b, 0x291b, 0x0eb7, 0x425b, 0xb007, 0x4669, 0xb2aa, 0x41e8, 0x41b0, 0x4015, 0xa496, 0x3460, 0x43cd, 0x44f4, 0xbf01, 0x41cd, 0x4393, 0xad38, 0xba1a, 0xbf4b, 0x2960, 0x43a0, 0xba2d, 0x4559, 0xb0c7, 0x173a, 0x263a, 0xb23e, 0x43c1, 0x43aa, 0xa3b5, 0xba78, 0x0bf1, 0x4126, 0x067a, 0x42fc, 0x446f, 0x0b51, 0x2b2a, 0x439e, 0xb23c, 0xbf23, 0xb078, 0xbae6, 0x0398, 0xa8d3, 0x42ec, 0x431c, 0x41ed, 0x40d1, 0xba3d, 0x2317, 0xbac5, 0x42e1, 0x4268, 0x361b, 0x4235, 0x4151, 0x4596, 0x1ac6, 0x4215, 0xbfbc, 0xb0c0, 0x4296, 0x2525, 0x4287, 0xbf69, 0x24a2, 0x425c, 0xb258, 0xb01f, 0xbf3d, 0xb246, 0xb2cb, 0xbae2, 0xb284, 0xbac2, 0x4339, 0x4580, 0x3c52, 0x40f7, 0x04a0, 0xa9ab, 0x416b, 0xadba, 0x429d, 0x4270, 0x3def, 0x1a98, 0xbf65, 0x4286, 0x4056, 0x3ef0, 0xb287, 0x0bfb, 0x45e1, 0xb270, 0x0e86, 0x4006, 0x4593, 0xaf1d, 0x403a, 0x4113, 0x401e, 0x4209, 0x4018, 0x4130, 0x41ac, 0x425d, 0x42ba, 0xa052, 0x43de, 0x073f, 0x4018, 0xba5b, 0xb2e8, 0x1b83, 0x424a, 0x4000, 0xbf61, 0x1f92, 0x4086, 0x404a, 0x2004, 0x45e1, 0x4221, 0x4257, 0xbf9a, 0x1c3a, 0x20b9, 0x41b2, 0x429b, 0x4097, 0x40cb, 0xbfdb, 0x41de, 0x4107, 0xa45c, 0x426d, 0xafd3, 0x412f, 0x199b, 0x42ac, 0x4389, 0xbf41, 0xb20a, 0xa51d, 0x439f, 0x41ff, 0x4215, 0x3e5e, 0xba14, 0x18f3, 0x428a, 0x43fd, 0x438e, 0x4272, 0x1b74, 0x42ad, 0x417d, 0x1ff0, 0x1b9c, 0x41b7, 0x41b6, 0x405f, 0x17e5, 0xb2a3, 0x07dc, 0xbf22, 0xb08c, 0x409e, 0xb23e, 0xb2b4, 0x29f8, 0x44e8, 0x41ad, 0xba65, 0x4200, 0x41b5, 0xbf8c, 0x1ee4, 0x41ff, 0x40f0, 0xb2b3, 0x45dd, 0xba63, 0x1e16, 0xbfe2, 0x1ee9, 0xa4e7, 0xb07c, 0xae9f, 0xba20, 0x403a, 0x4260, 0x439a, 0x444f, 0x40bb, 0x430f, 0xbf57, 0x18d5, 0x43ba, 0x0350, 0x2a39, 0xaade, 0x0a7a, 0xb239, 0xb2c2, 0xb0a4, 0x0999, 0x4270, 0x4390, 0xbfb6, 0x4048, 0xbfa0, 0xb20d, 0x4026, 0xba4e, 0x430e, 0x4375, 0x4171, 0xb278, 0x4256, 0x40bd, 0x42e4, 0x1c1e, 0xb2de, 0xbf58, 0x059b, 0xb243, 0x197d, 0x4084, 0xa945, 0xb03f, 0x4430, 0x1c82, 0xa4a0, 0x43c7, 0x41e8, 0x41a5, 0xba57, 0x0ecc, 0x2e03, 0xba50, 0x42f7, 0xb017, 0x42b2, 0xbac1, 0xbfbc, 0x408a, 0x0c66, 0xa768, 0xb223, 0x427c, 0x448d, 0x445f, 0x437d, 0x405e, 0x42a3, 0x257d, 0x4485, 0x44ec, 0xba2b, 0x4177, 0x42ea, 0x42f5, 0x43cc, 0x4681, 0x4211, 0x416c, 0xb038, 0xba19, 0x4669, 0xbfbb, 0x08f8, 0x4338, 0xb2cf, 0x4653, 0xa218, 0xb2f6, 0x1894, 0xbaed, 0xb2c1, 0x19ae, 0x1138, 0x1b80, 0x4158, 0x41ea, 0xb083, 0xbfe2, 0xacb0, 0x1d95, 0xa07c, 0x4770, 0xe7fe + ], + StartRegs = [0x53e412bb, 0xf8075b4a, 0xc06d1392, 0xad332bbd, 0x27e72f7d, 0xac8f8bd5, 0x3a5b2232, 0xc5e2c8ec, 0xe032a7a7, 0x2b035634, 0x4a720b19, 0x0f87e928, 0x73db65d8, 0x6c7bc94f, 0x00000000, 0xf00001f0 + ], + FinalRegs = [0x000019d4, 0x00000000, 0x00001828, 0x7d000000, 0x977f681b, 0x0000182e, 0x00007d12, 0x00000067, 0x77b1c835, 0x00004100, 0x000010c8, 0x0000000e, 0x79708dab, 0x977f655b, 0x00000000, 0x200001d0 + ], + } + ]; } } diff --git a/src/Ryujinx.Tests/HLE/SoftwareKeyboardTests.cs b/src/Ryujinx.Tests/HLE/SoftwareKeyboardTests.cs index 79ca2d480..89b558597 100644 --- a/src/Ryujinx.Tests/HLE/SoftwareKeyboardTests.cs +++ b/src/Ryujinx.Tests/HLE/SoftwareKeyboardTests.cs @@ -21,7 +21,8 @@ namespace Ryujinx.Tests.HLE [Test] public void StripUnicodeControlCodes_Passthrough() { - string[] prompts = { + string[] prompts = + [ "Please name him.", "Name her, too.", "Name your friend.", @@ -29,8 +30,8 @@ namespace Ryujinx.Tests.HLE "Name your pet.", "Favorite homemade food?", "What’s your favorite thing?", - "Are you sure?", - }; + "Are you sure?" + ]; foreach (string prompt in prompts) { diff --git a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs index b197dee20..e723a3c74 100644 --- a/src/Ryujinx.Tests/Memory/PartialUnmaps.cs +++ b/src/Ryujinx.Tests/Memory/PartialUnmaps.cs @@ -377,7 +377,7 @@ namespace Ryujinx.Tests.Memory public void NativeReaderWriterLock() { NativeReaderWriterLock rwLock = new(); - List threads = new(); + List threads = []; int value = 0; diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 3dc62f3d9..f8b4b2beb 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -434,7 +434,8 @@ namespace Ryujinx.Ava // On macOS, ensure that we remove the quarantine bit to prevent Gatekeeper from blocking execution. if (OperatingSystem.IsMacOS()) { - using Process xattrProcess = Process.Start("xattr", new List { "-d", "com.apple.quarantine", updateFile }); + using Process xattrProcess = Process.Start("xattr", + [ "-d", "com.apple.quarantine", updateFile ]); xattrProcess.WaitForExit(); } -- 2.47.1 From f3942968f97015c94f5728d8689219383c610b1e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 26 Jan 2025 17:18:27 -0600 Subject: [PATCH 479/722] UI: Convert the various options for LED into a popup window similar to motion & rumble config. --- src/Ryujinx/Assets/locales.json | 52 ++++++++++++- .../Input/ControllerInputViewModel.cs | 14 ++-- .../UI/ViewModels/Input/LedInputViewModel.cs | 53 +++++++++++++ .../UI/Views/Input/ControllerInputView.axaml | 39 ++-------- .../Views/Input/ControllerInputView.axaml.cs | 21 ------ src/Ryujinx/UI/Views/Input/LedInputView.axaml | 46 ++++++++++++ .../UI/Views/Input/LedInputView.axaml.cs | 75 +++++++++++++++++++ 7 files changed, 236 insertions(+), 64 deletions(-) create mode 100644 src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs create mode 100644 src/Ryujinx/UI/Views/Input/LedInputView.axaml create mode 100644 src/Ryujinx/UI/Views/Input/LedInputView.axaml.cs diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index ff12ca1f3..d96682956 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -7623,7 +7623,7 @@ } }, { - "ID": "ControllerSettingsLedColor", + "ID": "ControllerSettingsLed", "Translations": { "ar_SA": "", "de_DE": "", @@ -7697,6 +7697,31 @@ "zh_TW": "" } }, + { + "ID": "ControllerSettingsLedColor", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Color", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "ControllerSettingsSave", "Translations": { @@ -18897,6 +18922,31 @@ "zh_TW": "震動設定" } }, + { + "ID": "ControllerLedTitle", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "LED Settings", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "SettingsSelectThemeFileDialogTitle", "Translations": { diff --git a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs index d291f09a0..9fcf31a9b 100644 --- a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs @@ -5,6 +5,7 @@ using FluentAvalonia.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Views.Input; +using Ryujinx.UI.Views.Input; namespace Ryujinx.Ava.UI.ViewModels.Input { @@ -59,16 +60,11 @@ namespace Ryujinx.Ava.UI.ViewModels.Input { await RumbleInputView.Show(this); } - - public RelayCommand LedDisabledChanged => Commands.Create(() => + + public async void ShowLedConfig() { - if (!Config.EnableLedChanging) return; - - if (Config.TurnOffLed) - ParentModel.SelectedGamepad.ClearLed(); - else - ParentModel.SelectedGamepad.SetLed(Config.LedColor.ToUInt32()); - }); + await LedInputView.Show(this); + } public void OnParentModelChanged() { diff --git a/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs new file mode 100644 index 000000000..a9d14d894 --- /dev/null +++ b/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs @@ -0,0 +1,53 @@ +using Avalonia.Media; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using Ryujinx.Ava.UI.Helpers; + +namespace Ryujinx.Ava.UI.ViewModels.Input +{ + public partial class LedInputViewModel : BaseModel + { + public required InputViewModel ParentModel { get; init; } + + public RelayCommand LedDisabledChanged => Commands.Create(() => + { + if (!EnableLedChanging) return; + + if (TurnOffLed) + ParentModel.SelectedGamepad.ClearLed(); + else + ParentModel.SelectedGamepad.SetLed(LedColor.ToUInt32()); + }); + + [ObservableProperty] private bool _enableLedChanging; + [ObservableProperty] private Color _ledColor; + + public bool ShowLedColorPicker => !TurnOffLed && !UseRainbowLed; + + private bool _turnOffLed; + + public bool TurnOffLed + { + get => _turnOffLed; + set + { + _turnOffLed = value; + OnPropertyChanged(); + OnPropertyChanged(nameof(ShowLedColorPicker)); + } + } + + private bool _useRainbowLed; + + public bool UseRainbowLed + { + get => _useRainbowLed; + set + { + _useRainbowLed = value; + OnPropertyChanged(); + OnPropertyChanged(nameof(ShowLedColorPicker)); + } + } + } +} diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml index 1662f4a3d..5cf0fa03a 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml @@ -495,8 +495,6 @@ Margin="0,-1,0,0"> - - @@ -505,39 +503,14 @@ MinWidth="0" Grid.Column="0" IsChecked="{Binding Config.EnableLedChanging, Mode=TwoWay}"> - + - - - - - - - - + Command="{Binding ShowLedConfig}"> + + diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs index 99ac3f008..e7221bac4 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs @@ -6,12 +6,10 @@ using Avalonia.Interactivity; using Avalonia.LogicalTree; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.UI.Helpers; -using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.ViewModels.Input; using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Input; using Ryujinx.Input.Assigner; -using System.Linq; using Button = Ryujinx.Input.Button; using StickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId; @@ -246,24 +244,5 @@ namespace Ryujinx.Ava.UI.Views.Input _currentAssigner?.Cancel(); _currentAssigner = null; } - - private void ColorPickerButton_OnColorChanged(ColorPickerButton sender, ColorButtonColorChangedEventArgs args) - { - if (!args.NewColor.HasValue) return; - if (DataContext is not ControllerInputViewModel cVm) return; - if (!cVm.Config.EnableLedChanging) return; - if (cVm.Config.TurnOffLed) return; - - cVm.ParentModel.SelectedGamepad.SetLed(args.NewColor.Value.ToUInt32()); - } - - private void ColorPickerButton_OnAttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e) - { - if (DataContext is not ControllerInputViewModel cVm) return; - if (!cVm.Config.EnableLedChanging) return; - if (cVm.Config.TurnOffLed) return; - - cVm.ParentModel.SelectedGamepad.SetLed(cVm.Config.LedColor.ToUInt32()); - } } } diff --git a/src/Ryujinx/UI/Views/Input/LedInputView.axaml b/src/Ryujinx/UI/Views/Input/LedInputView.axaml new file mode 100644 index 000000000..39e464224 --- /dev/null +++ b/src/Ryujinx/UI/Views/Input/LedInputView.axaml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Views/Input/LedInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/LedInputView.axaml.cs new file mode 100644 index 000000000..2fbb40ff2 --- /dev/null +++ b/src/Ryujinx/UI/Views/Input/LedInputView.axaml.cs @@ -0,0 +1,75 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using FluentAvalonia.UI.Controls; +using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.Models.Input; +using Ryujinx.Ava.UI.ViewModels.Input; +using Ryujinx.Ava.UI.Views.Input; +using System.Threading.Tasks; + +namespace Ryujinx.UI.Views.Input +{ + public partial class LedInputView : UserControl + { + private readonly LedInputViewModel _viewModel; + + public LedInputView(ControllerInputViewModel viewModel) + { + DataContext = _viewModel = new LedInputViewModel + { + ParentModel = viewModel.ParentModel, + TurnOffLed = viewModel.Config.TurnOffLed, + EnableLedChanging = viewModel.Config.EnableLedChanging, + LedColor = viewModel.Config.LedColor, + UseRainbowLed = viewModel.Config.UseRainbowLed, + }; + + InitializeComponent(); + } + + private void ColorPickerButton_OnColorChanged(ColorPickerButton sender, ColorButtonColorChangedEventArgs args) + { + if (!args.NewColor.HasValue) return; + if (DataContext is not LedInputViewModel lvm) return; + if (!lvm.EnableLedChanging) return; + if (lvm.TurnOffLed) return; + + lvm.ParentModel.SelectedGamepad.SetLed(args.NewColor.Value.ToUInt32()); + } + + private void ColorPickerButton_OnAttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e) + { + if (DataContext is not LedInputViewModel lvm) return; + if (!lvm.EnableLedChanging) return; + if (lvm.TurnOffLed) return; + + lvm.ParentModel.SelectedGamepad.SetLed(lvm.LedColor.ToUInt32()); + } + + public static async Task Show(ControllerInputViewModel viewModel) + { + LedInputView content = new(viewModel); + + ContentDialog contentDialog = new() + { + Title = LocaleManager.Instance[LocaleKeys.ControllerLedTitle], + PrimaryButtonText = LocaleManager.Instance[LocaleKeys.ControllerSettingsSave], + SecondaryButtonText = string.Empty, + CloseButtonText = LocaleManager.Instance[LocaleKeys.ControllerSettingsClose], + Content = content, + }; + contentDialog.PrimaryButtonClick += (sender, args) => + { + GamepadInputConfig config = viewModel.Config; + config.EnableLedChanging = content._viewModel.EnableLedChanging; + config.LedColor = content._viewModel.LedColor; + config.UseRainbowLed = content._viewModel.UseRainbowLed; + config.TurnOffLed = content._viewModel.TurnOffLed; + }; + + await contentDialog.ShowAsync(); + } + } +} + -- 2.47.1 From 31de0bf8c68fb96215f17209dbe9fc83ec1f8df5 Mon Sep 17 00:00:00 2001 From: Josh <48849543+kruumy@users.noreply.github.com> Date: Sun, 26 Jan 2025 20:40:10 -0500 Subject: [PATCH 480/722] Increase NAT discovery timeout to 5000ms (#589) 1000ms was too fast on some slower networks. It would lead to an early cancellation before device could be found. --- .../Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs index d2121c047..4a217b88b 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/Proxy/P2pProxyServer.cs @@ -113,7 +113,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy public async Task NatPunch() { NatDiscoverer discoverer = new(); - CancellationTokenSource cts = new(1000); + CancellationTokenSource cts = new(5000); NatDevice device; -- 2.47.1 From 082c718f5d24b0d22e2baaceba6019dd946f6df8 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 27 Jan 2025 15:04:14 -0600 Subject: [PATCH 481/722] fix canary URL --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ce8cc9a61..549bb41d6 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ [![Latest release](https://img.shields.io/github/v/release/GreemDev/Ryujinx)](https://github.com/Ryubing/Ryujinx/releases/latest)
[![Canary workflow](https://github.com/Ryubing/Ryujinx/actions/workflows/canary.yml/badge.svg)](https://github.com/Ryubing/Ryujinx/actions/workflows/canary.yml) -[![Latest canary release](https://img.shields.io/github/v/release/GreemDev/Ryujinx-Canary?label=canary)](https://github.com/Ryubing/Ryujinx-Canary/releases/latest) +[![Latest canary release](https://img.shields.io/github/v/release/GreemDev/Canary-Releases?label=canary)](https://github.com/Ryubing/Canary-Releases/releases/latest) @@ -64,7 +64,7 @@ Canary builds are compiled automatically for each commit on the `master` branch. While we strive to ensure optimal stability and performance prior to pushing an update, these builds **may be unstable or completely broken**. These canary builds are only recommended for experienced users. -You can find the latest canary release [here](https://github.com/Ryubing/Ryujinx-Canary/releases/latest). +You can find the latest canary release [here](https://github.com/Ryubing/Canary-Releases/releases/latest). ## Documentation -- 2.47.1 From cdf4016c25577ddbb329df73251573790fd9d2b5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 27 Jan 2025 15:04:57 -0600 Subject: [PATCH 482/722] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 549bb41d6..ef3e683e6 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ [![Latest release](https://img.shields.io/github/v/release/GreemDev/Ryujinx)](https://github.com/Ryubing/Ryujinx/releases/latest)
[![Canary workflow](https://github.com/Ryubing/Ryujinx/actions/workflows/canary.yml/badge.svg)](https://github.com/Ryubing/Ryujinx/actions/workflows/canary.yml) -[![Latest canary release](https://img.shields.io/github/v/release/GreemDev/Canary-Releases?label=canary)](https://github.com/Ryubing/Canary-Releases/releases/latest) +[![Latest canary release](https://img.shields.io/github/v/release/Ryubing/Canary-Releases?label=canary)](https://github.com/Ryubing/Canary-Releases/releases/latest) -- 2.47.1 From 9d28af935d3b22341f9daf9ba51a04cc9610552e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 28 Jan 2025 20:16:41 -0600 Subject: [PATCH 483/722] headless: Enable Rainbow cycling if any input configs have UseRainbow enabled --- src/Ryujinx.HLE/HLEConfiguration.cs | 1 + src/Ryujinx/Headless/HeadlessRyujinx.cs | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/src/Ryujinx.HLE/HLEConfiguration.cs b/src/Ryujinx.HLE/HLEConfiguration.cs index 8ac76508f..0b7ae3974 100644 --- a/src/Ryujinx.HLE/HLEConfiguration.cs +++ b/src/Ryujinx.HLE/HLEConfiguration.cs @@ -192,6 +192,7 @@ namespace Ryujinx.HLE /// /// The desired hacky workarounds. /// + /// This cannot be changed after instantiation. public EnabledDirtyHack[] Hacks { internal get; set; } public HLEConfiguration(VirtualFileSystem virtualFileSystem, diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index 18efdceee..fafcbf01e 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -5,6 +5,7 @@ using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; +using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.GraphicsDriver; using Ryujinx.Common.Logging; using Ryujinx.Common.Logging.Targets; @@ -26,6 +27,7 @@ using Ryujinx.SDL2.Common; using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading; namespace Ryujinx.Headless @@ -286,6 +288,9 @@ namespace Ryujinx.Headless GraphicsConfig.EnableMacroHLE = !option.DisableMacroHLE; DriverUtilities.InitDriverConfig(option.BackendThreading == BackendThreading.Off); + + if (_inputConfiguration.OfType().Any(ic => ic.Led.UseRainbow)) + Rainbow.Enable(); while (true) { -- 2.47.1 From 7085bafa60272a0cbb707c5b4b96abcddec78bd0 Mon Sep 17 00:00:00 2001 From: LotP1 <68976644+LotP1@users.noreply.github.com> Date: Wed, 29 Jan 2025 03:36:58 +0100 Subject: [PATCH 484/722] PPTC Profiles (#370) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added functionality that allows ExeFS mods to compile to their own PPTC Profile and therefore store PTC data between sessions. The feature calculates the hash of the currently loaded ExeFS mods and stores the PPTC data in a profile that matches said hash, so you can have multiple ExeFS loadouts without causing issues. This includes different versions of the same mod as their hashes will be different. Using this PR should be seamless as the JIT Sparse PR already laid the groundwork for PPTC Profiles and this PR just allows ExeFS mods to load and store their own profiles besides the `default` profile. ❗❗❗ **WARNING!** ❗❗❗ **This will update your PPTC profile version, which means the PPTC profile will be invalidated if you try to run a PR/Build/Branch that does not include this change!** **This is only relevant for the default PPTC Profile, as any other profiles do not exist to older versions!** --- src/ARMeilleure/Translation/PTC/Ptc.cs | 56 ++++++++++-- .../Translation/PTC/PtcProfiler.cs | 90 ++++++++++++++++--- src/ARMeilleure/Translation/Translator.cs | 10 +++ .../HOS/ArmProcessContextFactory.cs | 5 +- src/Ryujinx.HLE/HOS/ModLoader.cs | 26 +++++- .../Extensions/FileSystemExtensions.cs | 10 +-- .../Loaders/Processes/ProcessLoader.cs | 1 + .../Loaders/Processes/ProcessLoaderHelper.cs | 3 + src/Ryujinx/Assets/locales.json | 75 ++++++++++++++++ .../UI/Controls/ApplicationContextMenu.axaml | 5 ++ .../Controls/ApplicationContextMenu.axaml.cs | 46 ++++++++++ 11 files changed, 299 insertions(+), 28 deletions(-) diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index b53fdd4df..d1ffda830 100644 --- a/src/ARMeilleure/Translation/PTC/Ptc.cs +++ b/src/ARMeilleure/Translation/PTC/Ptc.cs @@ -3,6 +3,7 @@ using ARMeilleure.CodeGen.Linking; using ARMeilleure.CodeGen.Unwinding; using ARMeilleure.Common; using ARMeilleure.Memory; +using ARMeilleure.State; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; @@ -30,8 +31,8 @@ namespace ARMeilleure.Translation.PTC { private const string OuterHeaderMagicString = "PTCohd\0\0"; private const string InnerHeaderMagicString = "PTCihd\0\0"; - - private const uint InternalVersion = 6998; //! To be incremented manually for each change to the ARMeilleure project. + + private const uint InternalVersion = 7007; //! To be incremented manually for each change to the ARMeilleure project. private const string ActualDir = "0"; private const string BackupDir = "1"; @@ -184,6 +185,36 @@ namespace ARMeilleure.Translation.PTC InitializeCarriers(); } + private bool ContainsBlacklistedFunctions() + { + List blacklist = Profiler.GetBlacklistedFunctions(); + bool containsBlacklistedFunctions = false; + _infosStream.Seek(0L, SeekOrigin.Begin); + bool foundBadFunction = false; + + for (int index = 0; index < GetEntriesCount(); index++) + { + InfoEntry infoEntry = DeserializeStructure(_infosStream); + foreach (ulong address in blacklist) + { + if (infoEntry.Address == address) + { + containsBlacklistedFunctions = true; + Logger.Warning?.Print(LogClass.Ptc, "PPTC cache invalidated: Found blacklisted functions in PPTC cache"); + foundBadFunction = true; + break; + } + } + + if (foundBadFunction) + { + break; + } + } + + return containsBlacklistedFunctions; + } + private void PreLoad() { string fileNameActual = $"{CachePathActual}.cache"; @@ -532,7 +563,7 @@ namespace ARMeilleure.Translation.PTC public void LoadTranslations(Translator translator) { - if (AreCarriersEmpty()) + if (AreCarriersEmpty() || ContainsBlacklistedFunctions()) { return; } @@ -835,10 +866,18 @@ namespace ARMeilleure.Translation.PTC while (profiledFuncsToTranslate.TryDequeue(out (ulong address, PtcProfiler.FuncProfile funcProfile) item)) { ulong address = item.address; + ExecutionMode executionMode = item.funcProfile.Mode; + bool highCq = item.funcProfile.HighCq; Debug.Assert(Profiler.IsAddressInStaticCodeRange(address)); - TranslatedFunction func = translator.Translate(address, item.funcProfile.Mode, item.funcProfile.HighCq); + TranslatedFunction func = translator.Translate(address, executionMode, highCq); + + if (func == null) + { + Profiler.UpdateEntry(address, executionMode, true, true); + continue; + } bool isAddressUnique = translator.Functions.TryAdd(address, func.GuestSize, func); @@ -885,7 +924,14 @@ namespace ARMeilleure.Translation.PTC PtcStateChanged?.Invoke(PtcLoadingState.Loaded, _translateCount, _translateTotalCount); - Logger.Info?.Print(LogClass.Ptc, $"{_translateCount} of {_translateTotalCount} functions translated | Thread count: {degreeOfParallelism} in {sw.Elapsed.TotalSeconds} s"); + if (_translateCount == _translateTotalCount) + { + Logger.Info?.Print(LogClass.Ptc, $"{_translateCount} of {_translateTotalCount} functions translated | Thread count: {degreeOfParallelism} in {sw.Elapsed.TotalSeconds} s"); + } + else + { + Logger.Info?.Print(LogClass.Ptc, $"{_translateCount} of {_translateTotalCount} functions translated | {_translateTotalCount - _translateCount} function{(_translateTotalCount - _translateCount != 1 ? "s" : "")} blacklisted | Thread count: {degreeOfParallelism} in {sw.Elapsed.TotalSeconds} s"); + } Thread preSaveThread = new(PreSave) { diff --git a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs index 21987f72d..de0b78dbe 100644 --- a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs +++ b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs @@ -24,11 +24,12 @@ namespace ARMeilleure.Translation.PTC { private const string OuterHeaderMagicString = "Pohd\0\0\0\0"; - private const uint InternalVersion = 5518; //! Not to be incremented manually for each change to the ARMeilleure project. + private const uint InternalVersion = 7007; //! Not to be incremented manually for each change to the ARMeilleure project. - private static readonly uint[] _migrateInternalVersions = + private static readonly uint[] _migrateInternalVersions = [ - 1866 + 1866, + 5518, ]; private const int SaveInterval = 30; // Seconds. @@ -77,20 +78,30 @@ namespace ARMeilleure.Translation.PTC private void TimerElapsed(object _, ElapsedEventArgs __) => new Thread(PreSave) { Name = "Ptc.DiskWriter" }.Start(); - public void AddEntry(ulong address, ExecutionMode mode, bool highCq) + public void AddEntry(ulong address, ExecutionMode mode, bool highCq, bool blacklist = false) { if (IsAddressInStaticCodeRange(address)) { Debug.Assert(!highCq); - lock (_lock) + if (blacklist) { - ProfiledFuncs.TryAdd(address, new FuncProfile(mode, highCq: false)); + lock (_lock) + { + ProfiledFuncs[address] = new FuncProfile(mode, highCq: false, true); + } + } + else + { + lock (_lock) + { + ProfiledFuncs.TryAdd(address, new FuncProfile(mode, highCq: false, false)); + } } } } - public void UpdateEntry(ulong address, ExecutionMode mode, bool highCq) + public void UpdateEntry(ulong address, ExecutionMode mode, bool highCq, bool? blacklist = null) { if (IsAddressInStaticCodeRange(address)) { @@ -100,7 +111,7 @@ namespace ARMeilleure.Translation.PTC { Debug.Assert(ProfiledFuncs.ContainsKey(address)); - ProfiledFuncs[address] = new FuncProfile(mode, highCq: true); + ProfiledFuncs[address] = new FuncProfile(mode, highCq: true, blacklist ?? ProfiledFuncs[address].Blacklist); } } } @@ -116,7 +127,7 @@ namespace ARMeilleure.Translation.PTC foreach (KeyValuePair profiledFunc in ProfiledFuncs) { - if (!funcs.ContainsKey(profiledFunc.Key)) + if (!funcs.ContainsKey(profiledFunc.Key) && !profiledFunc.Value.Blacklist) { profiledFuncsToTranslate.Enqueue((profiledFunc.Key, profiledFunc.Value)); } @@ -131,6 +142,24 @@ namespace ARMeilleure.Translation.PTC ProfiledFuncs.TrimExcess(); } + public List GetBlacklistedFunctions() + { + List funcs = new List(); + + foreach (var profiledFunc in ProfiledFuncs) + { + if (profiledFunc.Value.Blacklist) + { + if (!funcs.Contains(profiledFunc.Key)) + { + funcs.Add(profiledFunc.Key); + } + } + } + + return funcs; + } + public void PreLoad() { _lastHash = default; @@ -221,13 +250,18 @@ namespace ARMeilleure.Translation.PTC return false; } + Func migrateEntryFunc = null; + switch (outerHeader.InfoFileVersion) { case InternalVersion: ProfiledFuncs = Deserialize(stream); break; case 1866: - ProfiledFuncs = Deserialize(stream, (address, profile) => (address + 0x500000UL, profile)); + migrateEntryFunc = (address, profile) => (address + 0x500000UL, profile); + goto case 5518; + case 5518: + ProfiledFuncs = DeserializeAddBlacklist(stream, migrateEntryFunc); break; default: Logger.Error?.Print(LogClass.Ptc, $"No migration path for {nameof(outerHeader.InfoFileVersion)} '{outerHeader.InfoFileVersion}'. Discarding cache."); @@ -257,6 +291,16 @@ namespace ARMeilleure.Translation.PTC return DeserializeDictionary(stream, DeserializeStructure); } + private static Dictionary DeserializeAddBlacklist(Stream stream, Func migrateEntryFunc = null) + { + if (migrateEntryFunc != null) + { + return DeserializeAndUpdateDictionary(stream, (Stream stream) => { return new FuncProfile(DeserializeStructure(stream)); }, migrateEntryFunc); + } + + return DeserializeDictionary(stream, (Stream stream) => { return new FuncProfile(DeserializeStructure(stream)); }); + } + private static ReadOnlySpan GetReadOnlySpan(MemoryStream memoryStream) { return new(memoryStream.GetBuffer(), (int)memoryStream.Position, (int)memoryStream.Length - (int)memoryStream.Position); @@ -388,13 +432,35 @@ namespace ARMeilleure.Translation.PTC } } - [StructLayout(LayoutKind.Sequential, Pack = 1/*, Size = 5*/)] + [StructLayout(LayoutKind.Sequential, Pack = 1/*, Size = 6*/)] public struct FuncProfile { public ExecutionMode Mode; public bool HighCq; + public bool Blacklist; - public FuncProfile(ExecutionMode mode, bool highCq) + public FuncProfile(ExecutionMode mode, bool highCq, bool blacklist) + { + Mode = mode; + HighCq = highCq; + Blacklist = blacklist; + } + + public FuncProfile(FuncProfilePreBlacklist fp) + { + Mode = fp.Mode; + HighCq = fp.HighCq; + Blacklist = false; + } + } + + [StructLayout(LayoutKind.Sequential, Pack = 1/*, Size = 5*/)] + public struct FuncProfilePreBlacklist + { + public ExecutionMode Mode; + public bool HighCq; + + public FuncProfilePreBlacklist(ExecutionMode mode, bool highCq) { Mode = mode; HighCq = highCq; diff --git a/src/ARMeilleure/Translation/Translator.cs b/src/ARMeilleure/Translation/Translator.cs index 0f18c8045..a50702add 100644 --- a/src/ARMeilleure/Translation/Translator.cs +++ b/src/ARMeilleure/Translation/Translator.cs @@ -249,6 +249,11 @@ namespace ARMeilleure.Translation ControlFlowGraph cfg = EmitAndGetCFG(context, blocks, out Range funcRange, out Counter counter); + if (cfg == null) + { + return null; + } + ulong funcSize = funcRange.End - funcRange.Start; Logger.EndPass(PassName.Translation, cfg); @@ -407,6 +412,11 @@ namespace ARMeilleure.Translation if (opCode.Instruction.Emitter != null) { opCode.Instruction.Emitter(context); + if (opCode.Instruction.Name == InstName.Und && blkIndex == 0) + { + range = new Range(rangeStart, rangeEnd); + return null; + } } else { diff --git a/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs b/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs index 95b6167f3..08d929bf0 100644 --- a/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs +++ b/src/Ryujinx.HLE/HOS/ArmProcessContextFactory.cs @@ -20,6 +20,7 @@ namespace Ryujinx.HLE.HOS private readonly string _titleIdText; private readonly string _displayVersion; private readonly bool _diskCacheEnabled; + private readonly string _diskCacheSelector; private readonly ulong _codeAddress; private readonly ulong _codeSize; @@ -31,6 +32,7 @@ namespace Ryujinx.HLE.HOS string titleIdText, string displayVersion, bool diskCacheEnabled, + string diskCacheSelector, ulong codeAddress, ulong codeSize) { @@ -39,6 +41,7 @@ namespace Ryujinx.HLE.HOS _titleIdText = titleIdText; _displayVersion = displayVersion; _diskCacheEnabled = diskCacheEnabled; + _diskCacheSelector = diskCacheSelector; _codeAddress = codeAddress; _codeSize = codeSize; } @@ -114,7 +117,7 @@ namespace Ryujinx.HLE.HOS } } - DiskCacheLoadState = processContext.Initialize(_titleIdText, _displayVersion, _diskCacheEnabled, _codeAddress, _codeSize, "default"); //Ready for exefs profiles + DiskCacheLoadState = processContext.Initialize(_titleIdText, _displayVersion, _diskCacheEnabled, _codeAddress, _codeSize, _diskCacheSelector ?? "default"); return processContext; } diff --git a/src/Ryujinx.HLE/HOS/ModLoader.cs b/src/Ryujinx.HLE/HOS/ModLoader.cs index ff691914c..6c97e6fed 100644 --- a/src/Ryujinx.HLE/HOS/ModLoader.cs +++ b/src/Ryujinx.HLE/HOS/ModLoader.cs @@ -6,6 +6,7 @@ using LibHac.Loader; using LibHac.Tools.Fs; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.RomFs; +using LibHac.Util; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; @@ -19,6 +20,7 @@ using System.Collections.Specialized; using System.Globalization; using System.IO; using System.Linq; +using System.Security.Cryptography; using LazyFile = Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy.LazyFile; using Path = System.IO.Path; @@ -581,6 +583,7 @@ namespace Ryujinx.HLE.HOS public BitVector32 Stubs; public BitVector32 Replaces; public MetaLoader Npdm; + public string Hash; public bool Modified => (Stubs.Data | Replaces.Data) != 0; } @@ -591,8 +594,11 @@ namespace Ryujinx.HLE.HOS { Stubs = new BitVector32(), Replaces = new BitVector32(), + Hash = null, }; + string tempHash = string.Empty; + if (!_appMods.TryGetValue(applicationId, out ModCache mods) || mods.ExefsDirs.Count == 0) { return modLoadResult; @@ -628,8 +634,16 @@ namespace Ryujinx.HLE.HOS modLoadResult.Replaces[1 << i] = true; - nsos[i] = new NsoExecutable(nsoFile.OpenRead().AsStorage(), nsoName); - Logger.Info?.Print(LogClass.ModLoader, $"NSO '{nsoName}' replaced"); + using (FileStream stream = nsoFile.OpenRead()) + { + nsos[i] = new NsoExecutable(stream.AsStorage(), nsoName); + Logger.Info?.Print(LogClass.ModLoader, $"NSO '{nsoName}' replaced"); + using (MD5 md5 = MD5.Create()) + { + stream.Seek(0, SeekOrigin.Begin); + tempHash += BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToLowerInvariant(); + } + } } modLoadResult.Stubs[1 << i] |= File.Exists(Path.Combine(mod.Path.FullName, nsoName + StubExtension)); @@ -661,6 +675,14 @@ namespace Ryujinx.HLE.HOS } } + if (!string.IsNullOrEmpty(tempHash)) + { + using (MD5 md5 = MD5.Create()) + { + modLoadResult.Hash += BitConverter.ToString(md5.ComputeHash(tempHash.ToBytes())).Replace("-", "").ToLowerInvariant(); + } + } + return modLoadResult; } diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs index 5874636e7..01f65206f 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs @@ -84,13 +84,6 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions // Apply Nsos patches. device.Configuration.VirtualFileSystem.ModLoader.ApplyNsoPatches(programId, nsoExecutables); - // Don't use PTC if ExeFS files have been replaced. - bool enablePtc = device.System.EnablePtc && !modLoadResult.Modified; - if (!enablePtc) - { - Logger.Warning?.Print(LogClass.Ptc, "Detected unsupported ExeFs modifications. PTC disabled."); - } - string programName = string.Empty; if (!isHomebrew && programId > 0x010000000000FFFF) @@ -117,7 +110,8 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions device.System.KernelContext, metaLoader, nacpData, - enablePtc, + device.System.EnablePtc, + modLoadResult.Hash, true, programName, metaLoader.GetProgramId(), diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs index 726b017b6..4c0866531 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs @@ -235,6 +235,7 @@ namespace Ryujinx.HLE.Loaders.Processes dummyExeFs.GetNpdm(), nacpData, diskCacheEnabled: false, + diskCacheSelector: null, allowCodeMemoryForJit: true, programName, programId, diff --git a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs index b11057da2..badced1b9 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/ProcessLoaderHelper.cs @@ -186,6 +186,7 @@ namespace Ryujinx.HLE.Loaders.Processes string.Empty, string.Empty, false, + null, codeAddress, codeSize); @@ -226,6 +227,7 @@ namespace Ryujinx.HLE.Loaders.Processes MetaLoader metaLoader, BlitStruct applicationControlProperties, bool diskCacheEnabled, + string diskCacheSelector, bool allowCodeMemoryForJit, string name, ulong programId, @@ -379,6 +381,7 @@ namespace Ryujinx.HLE.Loaders.Processes $"{programId:x16}", displayVersion, diskCacheEnabled, + diskCacheSelector, codeStart, codeSize); diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index d96682956..ed1f8a1f0 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -2022,6 +2022,56 @@ "zh_TW": "下一次啟動遊戲時,觸發 PPTC 進行重建" } }, + { + "ID": "GameListContextMenuCacheManagementNukePptc", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Purge PPTC cache", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "GameListContextMenuCacheManagementNukePptcToolTip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Deletes all PPTC cache files for the Application", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "GameListContextMenuCacheManagementPurgeShaderCache", "Translations": { @@ -12947,6 +12997,31 @@ "zh_TW": "在 {0} 清除 PPTC 快取時出錯: {1}" } }, + { + "ID": "DialogPPTCNukeMessage", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "You are about to purge all PPTC data from:\n\n{0}\n\nAre you sure you want to proceed?", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "DialogShaderDeletionMessage", "Translations": { diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml index 9fed95aa7..475b26787 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml @@ -81,6 +81,11 @@ Header="{ext:Locale GameListContextMenuCacheManagementPurgePptc}" Icon="{ext:Icon mdi-refresh}" ToolTip.Tip="{ext:Locale GameListContextMenuCacheManagementPurgePptcToolTip}" /> + cacheFiles = new(); + + if (mainDir.Exists) + { + cacheFiles.AddRange(mainDir.EnumerateFiles("*.cache")); + cacheFiles.AddRange(mainDir.EnumerateFiles("*.info")); + } + + if (backupDir.Exists) + { + cacheFiles.AddRange(backupDir.EnumerateFiles("*.cache")); + cacheFiles.AddRange(mainDir.EnumerateFiles("*.info")); + } + + if (cacheFiles.Count > 0) + { + foreach (FileInfo file in cacheFiles) + { + try + { + file.Delete(); + } + catch (Exception ex) + { + await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogPPTCDeletionErrorMessage, file.Name, ex)); + } + } + } + } + } + public async void PurgeShaderCache_Click(object sender, RoutedEventArgs args) { if (sender is not MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel }) -- 2.47.1 From 502ce98b3a313c718b3f6ca880bf5efc705e1783 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 28 Jan 2025 21:18:49 -0600 Subject: [PATCH 485/722] UI: [ci skip] Make cheat window larger by default --- src/Ryujinx/UI/Models/CheatNode.cs | 2 +- src/Ryujinx/UI/Windows/CheatWindow.axaml | 4 ++-- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx/UI/Models/CheatNode.cs b/src/Ryujinx/UI/Models/CheatNode.cs index 4fc249e20..b036ba6b9 100644 --- a/src/Ryujinx/UI/Models/CheatNode.cs +++ b/src/Ryujinx/UI/Models/CheatNode.cs @@ -9,7 +9,7 @@ namespace Ryujinx.Ava.UI.Models { private bool _isEnabled = false; public ObservableCollection SubNodes { get; } = []; - public string CleanName => Name[1..^7]; + public string CleanName => Name.Length > 0 ? Name[1..^7] : Name; public string BuildIdKey => $"{BuildId}-{Name}"; public bool IsRootNode { get; } public string Name { get; } diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml b/src/Ryujinx/UI/Windows/CheatWindow.axaml index c6d485c9b..32f914019 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml @@ -6,8 +6,8 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows" - Width="500" - Height="500" + Width="600" + Height="750" MinWidth="500" MinHeight="500" x:DataType="window:CheatWindow" diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index ba384359a..e0ba9e419 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -34,6 +34,9 @@ namespace Ryujinx.Ava.UI.Windows public CheatWindow(VirtualFileSystem virtualFileSystem, string titleId, string titleName, string titlePath) { + MinWidth = 500; + MinHeight = 650; + LoadedCheats = []; IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid -- 2.47.1 From 1b3656bca98a7db08868179afcaf07093548724d Mon Sep 17 00:00:00 2001 From: shinyoyo Date: Wed, 29 Jan 2025 11:29:06 +0800 Subject: [PATCH 486/722] LED Color & LED settings header (zh_CN) (#590) --- src/Ryujinx/Assets/locales.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index ed1f8a1f0..4706abc68 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -7768,7 +7768,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "颜色", "zh_TW": "" } }, @@ -19018,7 +19018,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "LED 设置", "zh_TW": "" } }, -- 2.47.1 From a469f3d710787d535b5efbd762ee32c7603ec6e7 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 28 Jan 2025 21:47:29 -0600 Subject: [PATCH 487/722] UI: Remove empty StackPanel in UserSelectorDialog --- src/Ryujinx/UI/Applet/UserSelectorDialog.axaml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml index ed22fb088..626ad2e21 100644 --- a/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml +++ b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml @@ -110,12 +110,5 @@ - - -- 2.47.1 From 191e1582897e4485c5d621efca3006fb58a06883 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 28 Jan 2025 22:11:48 -0600 Subject: [PATCH 488/722] misc: chore: Use static instances of converters instead of using control resources --- .../UI/Applet/UserSelectorDialog.axaml | 7 +-- .../UI/Controls/ApplicationGridView.axaml | 5 +- .../UI/Controls/ApplicationListView.axaml | 5 +- .../Converters/BitmapArrayValueConverter.cs | 2 +- .../DownloadableContentLabelConverter.cs | 2 +- .../Helpers/Converters/KeyValueConverter.cs | 2 +- .../Converters/MultiplayerInfoConverter.cs | 12 +--- .../Converters/TitleUpdateLabelConverter.cs | 2 +- .../XCITrimmerFileSpaceSavingsConverter.cs | 2 +- .../UI/Views/Input/ControllerInputView.axaml | 47 +++++++-------- .../UI/Views/Input/KeyboardInputView.axaml | 59 +++++++++---------- .../Views/Settings/SettingsHotkeysView.axaml | 25 ++++---- .../Views/Settings/SettingsSystemView.axaml | 5 +- .../UI/Views/User/UserEditorView.axaml | 5 +- .../User/UserFirmwareAvatarSelectorView.axaml | 5 +- .../UI/Views/User/UserSaveManagerView.axaml | 5 +- .../UI/Views/User/UserSelectorView.axaml | 5 +- src/Ryujinx/UI/Windows/MainWindow.axaml | 5 +- .../UI/Windows/TitleUpdateWindow.axaml | 5 +- src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml | 11 +--- 20 files changed, 82 insertions(+), 134 deletions(-) diff --git a/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml index 626ad2e21..2816afbce 100644 --- a/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml +++ b/src/Ryujinx/UI/Applet/UserSelectorDialog.axaml @@ -13,11 +13,6 @@ mc:Ignorable="d" Focusable="True" x:DataType="viewModels:UserSelectorDialogViewModel"> - - - - - @@ -80,7 +75,7 @@ Height="96" HorizontalAlignment="Stretch" VerticalAlignment="Top" - Source="{Binding Image, Converter={StaticResource ByteImage}}" /> + Source="{Binding Image, Converter={x:Static helpers:BitmapArrayValueConverter.Instance}}" /> - - - @@ -68,7 +65,7 @@ Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" - Source="{Binding Icon, Converter={StaticResource ByteImage}}" /> + Source="{Binding Icon, Converter={x:Static helpers:BitmapArrayValueConverter.Instance}}" /> - - - @@ -62,7 +59,7 @@ Classes.large="{Binding $parent[UserControl].((viewModels:MainWindowViewModel)DataContext).IsGridLarge}" Classes.normal="{Binding $parent[UserControl].((viewModels:MainWindowViewModel)DataContext).IsGridMedium}" Classes.small="{Binding $parent[UserControl].((viewModels:MainWindowViewModel)DataContext).IsGridSmall}" - Source="{Binding Icon, Converter={StaticResource ByteImage}}" /> + Source="{Binding Icon, Converter={x:Static helpers:BitmapArrayValueConverter.Instance}}" /> values, Type targetType, object parameter, CultureInfo culture) { diff --git a/src/Ryujinx/UI/Helpers/Converters/KeyValueConverter.cs b/src/Ryujinx/UI/Helpers/Converters/KeyValueConverter.cs index d20098426..e7a157892 100644 --- a/src/Ryujinx/UI/Helpers/Converters/KeyValueConverter.cs +++ b/src/Ryujinx/UI/Helpers/Converters/KeyValueConverter.cs @@ -10,7 +10,7 @@ namespace Ryujinx.Ava.UI.Helpers { internal class KeyValueConverter : IValueConverter { - public static KeyValueConverter Instance = new(); + public static readonly KeyValueConverter Instance = new(); private static readonly Dictionary _keysMap = new() { diff --git a/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs index 09a2ad367..47d0b94d0 100644 --- a/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs +++ b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs @@ -1,6 +1,5 @@ using Avalonia.Data.Converters; using Avalonia.Markup.Xaml; -using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Utilities.AppLibrary; using System; using System.Globalization; @@ -19,15 +18,10 @@ namespace Ryujinx.Ava.UI.Helpers { return $"Hosted Games: {applicationData.GameCount}\nOnline Players: {applicationData.PlayerCount}"; } - else - { - return ""; - } - } - else - { - return ""; } + + return ""; + } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/src/Ryujinx/UI/Helpers/Converters/TitleUpdateLabelConverter.cs b/src/Ryujinx/UI/Helpers/Converters/TitleUpdateLabelConverter.cs index d462b9463..f1e6b8958 100644 --- a/src/Ryujinx/UI/Helpers/Converters/TitleUpdateLabelConverter.cs +++ b/src/Ryujinx/UI/Helpers/Converters/TitleUpdateLabelConverter.cs @@ -11,7 +11,7 @@ namespace Ryujinx.Ava.UI.Helpers { internal class TitleUpdateLabelConverter : IMultiValueConverter { - public static TitleUpdateLabelConverter Instance = new(); + public static readonly TitleUpdateLabelConverter Instance = new(); public object Convert(IList values, Type targetType, object parameter, CultureInfo culture) { diff --git a/src/Ryujinx/UI/Helpers/Converters/XCITrimmerFileSpaceSavingsConverter.cs b/src/Ryujinx/UI/Helpers/Converters/XCITrimmerFileSpaceSavingsConverter.cs index ab6199c3f..d70a795c0 100644 --- a/src/Ryujinx/UI/Helpers/Converters/XCITrimmerFileSpaceSavingsConverter.cs +++ b/src/Ryujinx/UI/Helpers/Converters/XCITrimmerFileSpaceSavingsConverter.cs @@ -12,7 +12,7 @@ namespace Ryujinx.Ava.UI.Helpers internal class XCITrimmerFileSpaceSavingsConverter : IValueConverter { private const long _bytesPerMB = 1024 * 1024; - public static XCITrimmerFileSpaceSavingsConverter Instance = new(); + public static readonly XCITrimmerFileSpaceSavingsConverter Instance = new(); public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml index 5cf0fa03a..49c2cfd4c 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml @@ -20,9 +20,6 @@ - - - - - - diff --git a/src/Ryujinx/Assets/Styles/Styles.xaml b/src/Ryujinx/Assets/Styles/Styles.xaml index 3d0c91840..5523f551a 100644 --- a/src/Ryujinx/Assets/Styles/Styles.xaml +++ b/src/Ryujinx/Assets/Styles/Styles.xaml @@ -218,6 +218,15 @@ + + + + appData = + ApplicationLibrary.Applications.Lookup(SelectedApplication.Id); + + return appData.HasValue && appData.Value.HasPlayabilityInfo; + } + } + public bool OpenUserSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.UserAccountSaveDataSize > 0; public bool OpenDeviceSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.DeviceSaveDataSize > 0; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index f6c43aade..a0bcd1aa2 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -50,7 +50,7 @@ namespace Ryujinx.Ava.UI.Views.Main UninstallFileTypesMenuItem.Command = Commands.Create(UninstallFileTypes); XciTrimmerMenuItem.Command = Commands.Create(XCITrimmerWindow.Show); AboutWindowMenuItem.Command = Commands.Create(AboutWindow.Show); - CompatibilityListMenuItem.Command = Commands.Create(CompatibilityList.Show); + CompatibilityListMenuItem.Command = Commands.Create(() => CompatibilityList.Show()); UpdateMenuItem.Command = Commands.Create(async () => { diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index dec265623..ee86a4a33 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -135,6 +135,14 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return id.ToString("X16"); } + public bool FindApplication(ulong id, out ApplicationData foundData) + { + DynamicData.Kernel.Optional appData = Applications.Lookup(id); + foundData = appData.HasValue ? appData.Value : null; + + return appData.HasValue; + } + /// The configured key set is missing a key. /// The NCA header could not be decrypted. /// The NCA version is not supported. diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs index d0e251fe0..c3fcf99ca 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -113,20 +113,17 @@ namespace Ryujinx.Ava.Utilities.Compat .Select(FormatLabelName) .JoinToString(", "); - public override string ToString() - { - StringBuilder sb = new("CompatibilityEntry: {"); - sb.Append($"{nameof(GameName)}=\"{GameName}\", "); - sb.Append($"{nameof(TitleId)}={TitleId}, "); - sb.Append($"{nameof(Labels)}={ - Labels.FormatCollection(it => $"\"{it}\"", separator: ", ", prefix: "[", suffix: "]") - }, "); - sb.Append($"{nameof(Status)}=\"{Status}\", "); - sb.Append($"{nameof(LastUpdated)}=\"{LastUpdated}\""); - sb.Append('}'); - - return sb.ToString(); - } + public override string ToString() => + new StringBuilder("CompatibilityEntry: {") + .Append($"{nameof(GameName)}=\"{GameName}\", ") + .Append($"{nameof(TitleId)}={TitleId}, ") + .Append($"{nameof(Labels)}={ + Labels.FormatCollection(it => $"\"{it}\"", separator: ", ", prefix: "[", suffix: "]") + }, ") + .Append($"{nameof(Status)}=\"{Status}\", ") + .Append($"{nameof(LastUpdated)}=\"{LastUpdated}\"") + .Append('}') + .ToString(); public static string FormatLabelName(string labelName) => labelName.ToLower() switch { diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml index 73ec84c53..132b10e26 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml @@ -34,7 +34,7 @@ Text="{ext:Locale CompatibilityListWarning}" /> - + diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs index e0d3b0c56..30d2649bc 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -9,7 +9,7 @@ namespace Ryujinx.Ava.Utilities.Compat { public partial class CompatibilityList : UserControl { - public static async Task Show() + public static async Task Show(string titleId = null) { ContentDialog contentDialog = new() { @@ -18,7 +18,10 @@ namespace Ryujinx.Ava.Utilities.Compat CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose], Content = new CompatibilityList { - DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) + DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary), + SearchBox = { + Text = titleId ?? "" + } } }; -- 2.47.1 From fafb99c702a83a294838359535100f5883b86822 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 15:57:32 -0600 Subject: [PATCH 547/722] misc: chore: [ci skip] don't even bother looking up the application; the tag present on the control *is* a valid title ID and can't reasonably change in between the tag being set and playability information being requested. Even if it does, worst case scenario the compat list that pops up has no results. --- src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs index 95fc911d0..7c6b0cf15 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs @@ -39,13 +39,7 @@ namespace Ryujinx.Ava.UI.Controls if (sender is not Button { Content: TextBlock playabilityLabel }) return; - if (!ulong.TryParse((string)playabilityLabel.Tag, NumberStyles.HexNumber, null, out ulong titleId)) - return; - - if (!mwvm.ApplicationLibrary.FindApplication(titleId, out ApplicationData appData)) - return; - - await CompatibilityList.Show(appData.IdString); + await CompatibilityList.Show((string)playabilityLabel.Tag); } private async void IdString_OnClick(object sender, RoutedEventArgs e) -- 2.47.1 From e8a7d5b0b74d1d5ad2ba09cc7c07f6ba333972d3 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 17:21:54 -0600 Subject: [PATCH 548/722] UI: Only show DLC RomFS button under Extract Data when DLCs are available. Also convert the constructor of DlcSelectViewModel to expect a normal title id and not one already converted to the base ID. --- .../UI/Controls/ApplicationContextMenu.axaml | 1 + .../Controls/ApplicationContextMenu.axaml.cs | 2 +- .../UI/ViewModels/DlcSelectViewModel.cs | 4 +--- .../UI/ViewModels/MainWindowViewModel.cs | 2 ++ .../Utilities/AppLibrary/ApplicationLibrary.cs | 18 ++++++++++++++++++ 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml index 797bc27e0..2804485fe 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml @@ -117,6 +117,7 @@ Header="{ext:Locale GameListContextMenuExtractDataRomFS}" ToolTip.Tip="{ext:Locale GameListContextMenuExtractDataRomFSToolTip}" /> diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index f29f70432..0d81484ba 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -334,7 +334,7 @@ namespace Ryujinx.Ava.UI.Controls if (sender is not MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel }) return; - DownloadableContentModel selectedDlc = await DlcSelectView.Show(viewModel.SelectedApplication.IdBase, viewModel.ApplicationLibrary); + DownloadableContentModel selectedDlc = await DlcSelectView.Show(viewModel.SelectedApplication.Id, viewModel.ApplicationLibrary); if (selectedDlc is not null) { diff --git a/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs b/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs index d50d8249a..b486aa766 100644 --- a/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs @@ -14,9 +14,7 @@ namespace Ryujinx.Ava.UI.ViewModels public DlcSelectViewModel(ulong titleId, ApplicationLibrary appLibrary) { - _dlcs = appLibrary.DownloadableContents.Items - .Where(x => x.Dlc.TitleIdBase == titleId) - .Select(x => x.Dlc) + _dlcs = appLibrary.FindDlcsFor(titleId) .OrderBy(it => it.IsBundled ? 0 : 1) .ThenBy(it => it.TitleId) .ToArray(); diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index f0e05d517..632e3b4f0 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -360,6 +360,8 @@ namespace Ryujinx.Ava.UI.ViewModels } } + public bool HasDlc => ApplicationLibrary.HasDlcs(SelectedApplication.Id); + public bool OpenUserSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.UserAccountSaveDataSize > 0; public bool OpenDeviceSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.DeviceSaveDataSize > 0; diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index ee86a4a33..75737c3e5 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -142,6 +142,24 @@ namespace Ryujinx.Ava.Utilities.AppLibrary return appData.HasValue; } + + public bool FindUpdate(ulong id, out TitleUpdateModel foundData) + { + Gommon.Optional appData = + TitleUpdates.Keys.FindFirst(x => x.TitleId == id); + foundData = appData.HasValue ? appData.Value : null; + + return appData.HasValue; + } + + public TitleUpdateModel[] FindUpdatesFor(ulong id) + => TitleUpdates.Keys.Where(x => x.TitleIdBase == (id & ~0x1FFFUL)).ToArray(); + + public DownloadableContentModel[] FindDlcsFor(ulong id) + => DownloadableContents.Keys.Where(x => x.TitleIdBase == (id & ~0x1FFFUL)).ToArray(); + + public bool HasDlcs(ulong id) + => DownloadableContents.Keys.Any(x => x.TitleIdBase == (id & ~0x1FFFUL)); /// The configured key set is missing a key. /// The NCA header could not be decrypted. -- 2.47.1 From 820e8f73750b7348f73b69f38b033ccb8d87adff Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 18:10:28 -0600 Subject: [PATCH 549/722] [ci skip] UI: Strip dumped file information out of the DLC name --- .../Utilities/AppLibrary/ApplicationLibrary.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index 75737c3e5..9571394fe 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -128,11 +128,16 @@ namespace Ryujinx.Ava.Utilities.AppLibrary DynamicData.Kernel.Optional appData = Applications.Lookup(id); if (appData.HasValue) return appData.Value.Name; - - if (DownloadableContents.Keys.FindFirst(x => x.TitleId == id).TryGet(out DownloadableContentModel dlcData)) - return Path.GetFileNameWithoutExtension(dlcData.FileName); - return id.ToString("X16"); + if (!DownloadableContents.Keys.FindFirst(x => x.TitleId == id).TryGet(out DownloadableContentModel dlcData)) + return id.ToString("X16"); + + string name = Path.GetFileNameWithoutExtension(dlcData.FileName)!; + int idx = name.IndexOf('['); + if (idx != -1) + name = name[..idx]; + + return name; } public bool FindApplication(ulong id, out ApplicationData foundData) -- 2.47.1 From b0fcc5bee1674c075c125ccb65773db8b3c466fe Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 18:21:24 -0600 Subject: [PATCH 550/722] misc: chore: Simplify HasCompatibilityEntry (Totally didn't realize that SelectedApplication is already an ApplicationData) --- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 632e3b4f0..d7a09a0e3 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -349,16 +349,7 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public bool HasCompatibilityEntry - { - get - { - DynamicData.Kernel.Optional appData = - ApplicationLibrary.Applications.Lookup(SelectedApplication.Id); - - return appData.HasValue && appData.Value.HasPlayabilityInfo; - } - } + public bool HasCompatibilityEntry => SelectedApplication.HasPlayabilityInfo; public bool HasDlc => ApplicationLibrary.HasDlcs(SelectedApplication.Id); -- 2.47.1 From 222ceb818b9f5c49f854762a9b544b349a9a6ea0 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 18:21:49 -0600 Subject: [PATCH 551/722] misc: chore: Use ApplicationLibrary helpers for getting DLCs & Updates for a game --- .../UI/ViewModels/DownloadableContentManagerViewModel.cs | 3 +-- src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs | 3 +-- src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs | 6 ++++++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index 1533b7d5d..a16a06ff5 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -69,8 +69,7 @@ namespace Ryujinx.Ava.UI.ViewModels private void LoadDownloadableContents() { - IEnumerable<(DownloadableContentModel Dlc, bool IsEnabled)> dlcs = _applicationLibrary.DownloadableContents.Items - .Where(it => it.Dlc.TitleIdBase == _applicationData.IdBase); + (DownloadableContentModel Dlc, bool IsEnabled)[] dlcs = _applicationLibrary.FindDlcConfigurationFor(_applicationData.Id); bool hasBundledContent = false; foreach ((DownloadableContentModel dlc, bool isEnabled) in dlcs) diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index aaafc3913..2b88aceed 100644 --- a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -41,8 +41,7 @@ namespace Ryujinx.Ava.UI.ViewModels private void LoadUpdates() { - IEnumerable<(TitleUpdateModel TitleUpdate, bool IsSelected)> updates = ApplicationLibrary.TitleUpdates.Items - .Where(it => it.TitleUpdate.TitleIdBase == ApplicationData.IdBase); + (TitleUpdateModel TitleUpdate, bool IsSelected)[] updates = ApplicationLibrary.FindUpdateConfigurationFor(ApplicationData.Id); bool hasBundledContent = false; SelectedUpdate = new TitleUpdateViewModelNoUpdate(); diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index 9571394fe..79cac1a0e 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -160,9 +160,15 @@ namespace Ryujinx.Ava.Utilities.AppLibrary public TitleUpdateModel[] FindUpdatesFor(ulong id) => TitleUpdates.Keys.Where(x => x.TitleIdBase == (id & ~0x1FFFUL)).ToArray(); + public (TitleUpdateModel TitleUpdate, bool IsSelected)[] FindUpdateConfigurationFor(ulong id) + => TitleUpdates.Items.Where(x => x.TitleUpdate.TitleIdBase == (id & ~0x1FFFUL)).ToArray(); + public DownloadableContentModel[] FindDlcsFor(ulong id) => DownloadableContents.Keys.Where(x => x.TitleIdBase == (id & ~0x1FFFUL)).ToArray(); + public (DownloadableContentModel Dlc, bool IsEnabled)[] FindDlcConfigurationFor(ulong id) + => DownloadableContents.Items.Where(x => x.Dlc.TitleIdBase == (id & ~0x1FFFUL)).ToArray(); + public bool HasDlcs(ulong id) => DownloadableContents.Keys.Any(x => x.TitleIdBase == (id & ~0x1FFFUL)); -- 2.47.1 From 1972a47f39014e8df9bcfcf3a61ca7d27eaaa030 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 19:32:17 -0600 Subject: [PATCH 552/722] UI: Game stats button on right click for Grid view users --- src/Ryujinx/Assets/locales.json | 50 ++++++++ src/Ryujinx/RyujinxApp.axaml.cs | 3 + .../UI/Controls/ApplicationContextMenu.axaml | 6 + .../Controls/ApplicationContextMenu.axaml.cs | 12 +- .../UI/Controls/ApplicationDataView.axaml | 116 ++++++++++++++++++ .../UI/Controls/ApplicationDataView.axaml.cs | 84 +++++++++++++ 6 files changed, 266 insertions(+), 5 deletions(-) create mode 100644 src/Ryujinx/UI/Controls/ApplicationDataView.axaml create mode 100644 src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 3da0b1728..9f9053ae0 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -2572,6 +2572,56 @@ "zh_TW": "" } }, + { + "ID": "GameListContextMenuShowGameData", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Show Game Stats", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "GameListContextMenuShowGameDataToolTip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Show the other various information about the currently selected game that is missing from the Grid view layout.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "GameListContextMenuOpenModsDirectory", "Translations": { diff --git a/src/Ryujinx/RyujinxApp.axaml.cs b/src/Ryujinx/RyujinxApp.axaml.cs index be24315f6..32318776a 100644 --- a/src/Ryujinx/RyujinxApp.axaml.cs +++ b/src/Ryujinx/RyujinxApp.axaml.cs @@ -32,6 +32,9 @@ namespace Ryujinx.Ava public static MainWindow MainWindow => Current! .ApplicationLifetime.Cast() .MainWindow.Cast(); + + public static IClassicDesktopStyleApplicationLifetime AppLifetime => Current! + .ApplicationLifetime.Cast(); public static bool IsClipboardAvailable(out IClipboard clipboard) { diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml index 2804485fe..acade1df9 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml @@ -25,6 +25,12 @@ Header="{ext:Locale GameListContextMenuShowCompatEntry}" Icon="{ext:Icon mdi-gamepad}" ToolTip.Tip="{ext:Locale GameListContextMenuShowCompatEntryToolTip}"/> + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs new file mode 100644 index 000000000..0bd22a243 --- /dev/null +++ b/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs @@ -0,0 +1,84 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Input.Platform; +using Avalonia.Interactivity; +using Avalonia.Styling; +using FluentAvalonia.UI.Controls; +using Ryujinx.Ava; +using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.Controls; +using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Compat; +using System.Linq; +using System.Threading.Tasks; + +namespace Ryujinx.Ava.UI.Controls +{ + public partial class ApplicationDataView : UserControl + { + public static async Task Show(ApplicationData appData) + { + ContentDialog contentDialog = new() + { + PrimaryButtonText = string.Empty, + SecondaryButtonText = string.Empty, + CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose], + Content = new ApplicationDataView { DataContext = appData } + }; + + Style closeButton = new(x => x.Name("CloseButton")); + closeButton.Setters.Add(new Setter(WidthProperty, 160d)); + + Style closeButtonParent = new(x => x.Name("CommandSpace")); + closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, + Avalonia.Layout.HorizontalAlignment.Center)); + + contentDialog.Styles.Add(closeButton); + contentDialog.Styles.Add(closeButtonParent); + + await ContentDialogHelper.ShowAsync(contentDialog); + } + + public ApplicationDataView() + { + InitializeComponent(); + } + + private async void PlayabilityStatus_OnClick(object sender, RoutedEventArgs e) + { + if (sender is not Button { Content: TextBlock playabilityLabel }) + return; + + if (RyujinxApp.AppLifetime.Windows.TryGetFirst(x => x is ContentDialogOverlayWindow, out Window window)) + window.Close(ContentDialogResult.None); + + await CompatibilityList.Show((string)playabilityLabel.Tag); + } + + private async void IdString_OnClick(object sender, RoutedEventArgs e) + { + if (DataContext is not MainWindowViewModel mwvm) + return; + + if (sender is not Button { Content: TextBlock idText }) + return; + + if (!RyujinxApp.IsClipboardAvailable(out IClipboard clipboard)) + return; + + ApplicationData appData = mwvm.Applications.FirstOrDefault(it => it.IdString == idText.Text); + if (appData is null) + return; + + await clipboard.SetTextAsync(appData.IdString); + + NotificationHelper.ShowInformation( + "Copied Title ID", + $"{appData.Name} ({appData.IdString})"); + } + } +} + -- 2.47.1 From bd08a111a8829a3e958f606890b2ad4b4642fc6b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 22:47:12 -0600 Subject: [PATCH 553/722] UI: Show what each value is in the Game Info dialog, add game icon --- src/Ryujinx/Assets/locales.json | 6 +- .../UI/Controls/ApplicationContextMenu.axaml | 1 - .../UI/Controls/ApplicationDataView.axaml | 212 +++++++++--------- .../UI/Controls/ApplicationDataView.axaml.cs | 3 +- .../UI/Controls/ApplicationListView.axaml | 1 + .../Converters/MultiplayerInfoConverter.cs | 7 +- .../UI/ViewModels/ApplicationDataViewModel.cs | 34 +++ .../Utilities/AppLibrary/ApplicationData.cs | 3 + 8 files changed, 155 insertions(+), 112 deletions(-) create mode 100644 src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 9f9053ae0..d597e8a4c 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -2578,7 +2578,7 @@ "ar_SA": "", "de_DE": "", "el_GR": "", - "en_US": "Show Game Stats", + "en_US": "Show Game Info", "es_ES": "", "fr_FR": "", "he_IL": "", @@ -2603,7 +2603,7 @@ "ar_SA": "", "de_DE": "", "el_GR": "", - "en_US": "Show the other various information about the currently selected game that is missing from the Grid view layout.", + "en_US": "Show stats & details about the currently selected game.", "es_ES": "", "fr_FR": "", "he_IL": "", @@ -23298,4 +23298,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml index acade1df9..3e47a1910 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml @@ -26,7 +26,6 @@ Icon="{ext:Icon mdi-gamepad}" ToolTip.Tip="{ext:Locale GameListContextMenuShowCompatEntryToolTip}"/> - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + diff --git a/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs index 0bd22a243..cc8091d4d 100644 --- a/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs @@ -26,7 +26,8 @@ namespace Ryujinx.Ava.UI.Controls PrimaryButtonText = string.Empty, SecondaryButtonText = string.Empty, CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose], - Content = new ApplicationDataView { DataContext = appData } + MinWidth = 256, + Content = new ApplicationDataView { DataContext = new ApplicationDataViewModel(appData) } }; Style closeButton = new(x => x.Name("CloseButton")); diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml b/src/Ryujinx/UI/Controls/ApplicationListView.axaml index 151bf5b32..c01c4e8be 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml @@ -140,6 +140,7 @@ TextWrapping="Wrap" /> diff --git a/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs index 47d0b94d0..dc36098a1 100644 --- a/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs +++ b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs @@ -12,12 +12,9 @@ namespace Ryujinx.Ava.UI.Helpers public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - if (value is ApplicationData applicationData) + if (value is ApplicationData { HasLdnGames: true } applicationData) { - if (applicationData.PlayerCount != 0 && applicationData.GameCount != 0) - { - return $"Hosted Games: {applicationData.GameCount}\nOnline Players: {applicationData.PlayerCount}"; - } + return $"Hosted Games: {applicationData.GameCount}\nOnline Players: {applicationData.PlayerCount}"; } return ""; diff --git a/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs b/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs new file mode 100644 index 000000000..73d555389 --- /dev/null +++ b/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs @@ -0,0 +1,34 @@ +using Gommon; +using Ryujinx.Ava.Utilities.AppLibrary; + +namespace Ryujinx.Ava.UI.ViewModels +{ + public class ApplicationDataViewModel : BaseModel + { + private const string FormatVersion = "Current Version: {0}"; + private const string FormatDeveloper = "Developed by {0}"; + + private const string FormatExtension = "Game type: {0}"; + private const string FormatLastPlayed = "Last played: {0}"; + private const string FormatPlayTime = "Play time: {0}"; + private const string FormatSize = "Size: {0}"; + + private const string FormatHostedGames = "Hosted Games: {0}"; + private const string FormatPlayerCount = "Online Players: {0}"; + + public ApplicationData AppData { get; } + + public ApplicationDataViewModel(ApplicationData appData) => AppData = appData; + + public string FormattedVersion => FormatVersion.Format(AppData.Version); + public string FormattedDeveloper => FormatDeveloper.Format(AppData.Developer); + + public string FormattedFileExtension => FormatExtension.Format(AppData.FileExtension); + public string FormattedLastPlayed => FormatLastPlayed.Format(AppData.LastPlayedString); + public string FormattedPlayTime => FormatPlayTime.Format(AppData.TimePlayedString); + public string FormattedFileSize => FormatSize.Format(AppData.FileSizeString); + + public string FormattedLdnInfo => + $"{FormatHostedGames.Format(AppData.GameCount)}\n{FormatPlayerCount.Format(AppData.PlayerCount)}"; + } +} diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs index aef54819e..48e30e663 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs @@ -49,6 +49,9 @@ namespace Ryujinx.Ava.Utilities.AppLibrary public int PlayerCount { get; set; } public int GameCount { get; set; } + + public bool HasLdnGames => PlayerCount != 0 && GameCount != 0; + public TimeSpan TimePlayed { get; set; } public DateTime? LastPlayed { get; set; } public string FileExtension { get; set; } -- 2.47.1 From 717851985e352b87934ab74739d601ea30c34758 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 23:28:37 -0600 Subject: [PATCH 554/722] UI: Reorganize Game Info dialog popup + localization --- src/Ryujinx/Assets/locales.json | 336 ++++++++++++------ .../UI/Controls/ApplicationDataView.axaml | 186 +++++----- .../UI/Controls/ApplicationDataView.axaml.cs | 1 + .../UI/ViewModels/ApplicationDataViewModel.cs | 28 +- 4 files changed, 317 insertions(+), 234 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index d597e8a4c..cb222e935 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1525,151 +1525,151 @@ { "ID": "GameListHeaderDeveloper", "Translations": { - "ar_SA": "المطور", - "de_DE": "Entwickler", - "el_GR": "Προγραμματιστής", - "en_US": "Developer", - "es_ES": "Desarrollador", - "fr_FR": "Développeur", - "he_IL": "מפתח", - "it_IT": "Sviluppatore", - "ja_JP": "開発元", - "ko_KR": "개발자", - "no_NO": "Utvikler", - "pl_PL": "Twórca", - "pt_BR": "Desenvolvedor", - "ru_RU": "Разработчик", - "sv_SE": "Utvecklare", - "th_TH": "ผู้พัฒนา", - "tr_TR": "Geliştirici", - "uk_UA": "Розробник", - "zh_CN": "制作商", - "zh_TW": "開發者" + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Developed by {0}", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" } }, { "ID": "GameListHeaderVersion", "Translations": { - "ar_SA": "الإصدار", + "ar_SA": "", "de_DE": "", - "el_GR": "Έκδοση", - "en_US": "Version", - "es_ES": "Versión", + "el_GR": "Έκδοση: {0}", + "en_US": "Version: {0}", + "es_ES": "Versión: {0}", "fr_FR": "", - "he_IL": "גרסה", - "it_IT": "Versione", - "ja_JP": "バージョン", - "ko_KR": "버전", - "no_NO": "Versjon", - "pl_PL": "Wersja", - "pt_BR": "Versão", - "ru_RU": "Версия", + "he_IL": "", + "it_IT": "Versione: {0}", + "ja_JP": "バージョン: {0}", + "ko_KR": "버전: {0}", + "no_NO": "Versjon: {0}", + "pl_PL": "Wersja: {0}", + "pt_BR": "Versão: {0}", + "ru_RU": "Версия: {0}", "sv_SE": "", - "th_TH": "เวอร์ชั่น", - "tr_TR": "Sürüm", - "uk_UA": "Версія", - "zh_CN": "版本", - "zh_TW": "版本" + "th_TH": "เวอร์ชั่น: {0}", + "tr_TR": "Sürüm: {0}", + "uk_UA": "Версія: {0}", + "zh_CN": "版本: {0}", + "zh_TW": "版本: {0}" } }, { "ID": "GameListHeaderTimePlayed", "Translations": { - "ar_SA": "وقت اللعب", - "de_DE": "Spielzeit", - "el_GR": "Χρόνος", - "en_US": "Play Time", - "es_ES": "Tiempo jugado", - "fr_FR": "Temps de jeu", - "he_IL": "זמן משחק", - "it_IT": "Tempo di gioco", - "ja_JP": "プレイ時間", - "ko_KR": "플레이 타임", - "no_NO": "Spilletid", - "pl_PL": "Czas w grze:", - "pt_BR": "Tempo de jogo", - "ru_RU": "Время в игре", - "sv_SE": "Speltid", - "th_TH": "เล่นไปแล้ว", - "tr_TR": "Oynama Süresi", - "uk_UA": "Зіграно часу", - "zh_CN": "游玩时长", - "zh_TW": "遊玩時數" + "ar_SA": "", + "de_DE": "Spielzeit: {0}", + "el_GR": "Χρόνος: {0}", + "en_US": "Play Time: {0}", + "es_ES": "Tiempo jugado: {0}", + "fr_FR": "Temps de jeu: {0}", + "he_IL": "", + "it_IT": "Tempo di gioco: {0}", + "ja_JP": "プレイ時間: {0}", + "ko_KR": "플레이 타임: {0}", + "no_NO": "Spilletid: {0}", + "pl_PL": "Czas w grze: {0}", + "pt_BR": "Tempo de jogo: {0}", + "ru_RU": "Время в игре: {0}", + "sv_SE": "Speltid: {0}", + "th_TH": "เล่นไปแล้ว: {0}", + "tr_TR": "Oynama Süresi: {0}", + "uk_UA": "Зіграно часу: {0}", + "zh_CN": "游玩时长: {0}", + "zh_TW": "遊玩時數: {0}" } }, { "ID": "GameListHeaderLastPlayed", "Translations": { - "ar_SA": "آخر مرة لُعبت", - "de_DE": "Zuletzt gespielt", - "el_GR": "Παίχτηκε", - "en_US": "Last Played", - "es_ES": "Jugado por última vez", - "fr_FR": "Dernière partie jouée", - "he_IL": "שוחק לאחרונה", - "it_IT": "Ultima partita", - "ja_JP": "最終プレイ日時", - "ko_KR": "마지막 플레이", - "no_NO": "Sist Spilt", - "pl_PL": "Ostatnio grane", - "pt_BR": "Último jogo", - "ru_RU": "Последний запуск", - "sv_SE": "Senast spelad", - "th_TH": "เล่นล่าสุด", - "tr_TR": "Son Oynama Tarihi", - "uk_UA": "Востаннє зіграно", - "zh_CN": "最近游玩", - "zh_TW": "最近遊玩" + "ar_SA": "", + "de_DE": "Zuletzt gespielt: {0}", + "el_GR": "Παίχτηκε: {0}", + "en_US": "Last Played: {0}", + "es_ES": "Jugado por última vez: {0}", + "fr_FR": "Dernière partie jouée: {0}", + "he_IL": "", + "it_IT": "Ultima partita: {0}", + "ja_JP": "最終プレイ日時: {0}", + "ko_KR": "마지막 플레이: {0}", + "no_NO": "Sist Spilt: {0}", + "pl_PL": "Ostatnio grane: {0}", + "pt_BR": "Último jogo: {0}", + "ru_RU": "Последний запуск: {0}", + "sv_SE": "Senast spelad: {0}", + "th_TH": "เล่นล่าสุด: {0}", + "tr_TR": "Son Oynama Tarihi: {0}", + "uk_UA": "Востаннє зіграно: {0}", + "zh_CN": "最近游玩: {0}", + "zh_TW": "最近遊玩: {0}" } }, { "ID": "GameListHeaderFileExtension", "Translations": { - "ar_SA": "صيغة الملف", - "de_DE": "Dateiformat", - "el_GR": "Κατάληξη", - "en_US": "File Ext", - "es_ES": "Extensión", - "fr_FR": "Extension du Fichier", - "he_IL": "סיומת קובץ", - "it_IT": "Estensione", - "ja_JP": "ファイル拡張子", - "ko_KR": "파일 확장자", - "no_NO": "Fil Eks.", - "pl_PL": "Rozszerzenie pliku", - "pt_BR": "Extensão", - "ru_RU": "Расширение файла", - "sv_SE": "Filänd", - "th_TH": "นามสกุลไฟล์", - "tr_TR": "Dosya Uzantısı", - "uk_UA": "Розширення файлу", - "zh_CN": "扩展名", - "zh_TW": "副檔名" + "ar_SA": "", + "de_DE": "Dateiformat: {0}", + "el_GR": "Κατάληξη: {0}", + "en_US": "Extension: {0}", + "es_ES": "Extensión: {0}", + "fr_FR": "Extension du Fichier: {0}", + "he_IL": "", + "it_IT": "Estensione: {0}", + "ja_JP": "ファイル拡張子: {0}", + "ko_KR": "파일 확장자: {0}", + "no_NO": "Fil Eks.: {0}", + "pl_PL": "Rozszerzenie pliku: {0}", + "pt_BR": "Extensão: {0}", + "ru_RU": "Расширение файла: {0}", + "sv_SE": "Filänd: {0}", + "th_TH": "นามสกุลไฟล์: {0}", + "tr_TR": "Dosya Uzantısı: {0}", + "uk_UA": "Розширення файлу: {0}", + "zh_CN": "扩展名: {0}", + "zh_TW": "副檔名: {0}" } }, { "ID": "GameListHeaderFileSize", "Translations": { - "ar_SA": "حجم الملف", - "de_DE": "Dateigröße", - "el_GR": "Μέγεθος Αρχείου", - "en_US": "File Size", - "es_ES": "Tamaño del archivo", - "fr_FR": "Taille du Fichier", - "he_IL": "גודל הקובץ", - "it_IT": "Dimensione file", - "ja_JP": "ファイルサイズ", - "ko_KR": "파일 크기", - "no_NO": "Fil Størrelse", - "pl_PL": "Rozmiar pliku", - "pt_BR": "Tamanho", - "ru_RU": "Размер файла", - "sv_SE": "Filstorlek", - "th_TH": "ขนาดไฟล์", - "tr_TR": "Dosya Boyutu", - "uk_UA": "Розмір файлу", - "zh_CN": "大小", - "zh_TW": "檔案大小" + "ar_SA": "", + "de_DE": "Dateigröße: {0}", + "el_GR": "Μέγεθος Αρχείου: {0}", + "en_US": "File Size: {0}", + "es_ES": "Tamaño del archivo: {0}", + "fr_FR": "Taille du Fichier: {0}", + "he_IL": "", + "it_IT": "Dimensione file: {0}", + "ja_JP": "ファイルサイズ: {0}", + "ko_KR": "파일 크기: {0}", + "no_NO": "Fil Størrelse: {0}", + "pl_PL": "Rozmiar pliku: {0}", + "pt_BR": "Tamanho: {0}", + "ru_RU": "Размер файла: {0}", + "sv_SE": "Filstorlek: {0}", + "th_TH": "ขนาดไฟล์: {0}", + "tr_TR": "Dosya Boyutu: {0}", + "uk_UA": "Розмір файлу: {0}", + "zh_CN": "大小: {0}", + "zh_TW": "檔案大小: {0}" } }, { @@ -1697,6 +1697,106 @@ "zh_TW": "路徑" } }, + { + "ID": "GameListHeaderCompatibilityStatus", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Compatibility:", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "GameListHeaderTitleId", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Title ID:", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "GameListHeaderHostedGames", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Hosted Games: {0}", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "GameListHeaderPlayerCount", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Online Players: {0}", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "GameListContextMenuOpenUserSaveDirectory", "Translations": { @@ -23298,4 +23398,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/Ryujinx/UI/Controls/ApplicationDataView.axaml b/src/Ryujinx/UI/Controls/ApplicationDataView.axaml index dafd75087..a18fec656 100644 --- a/src/Ryujinx/UI/Controls/ApplicationDataView.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationDataView.axaml @@ -2,7 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" - xmlns:appLibrary="using:Ryujinx.Ava.Utilities.AppLibrary" + xmlns:ext="using:Ryujinx.Ava.Common.Markup" xmlns:viewModels="using:Ryujinx.Ava.UI.ViewModels" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" @@ -13,112 +13,102 @@ MaxWidth="256" MinWidth="256" Source="{Binding AppData.Icon, Converter={x:Static helpers:BitmapArrayValueConverter.Instance}}" /> - + - - - - - - + + + + + - - - - + - - - - - - - + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs index cc8091d4d..e85e1188e 100644 --- a/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationDataView.axaml.cs @@ -23,6 +23,7 @@ namespace Ryujinx.Ava.UI.Controls { ContentDialog contentDialog = new() { + Title = appData.Name, PrimaryButtonText = string.Empty, SecondaryButtonText = string.Empty, CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose], diff --git a/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs b/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs index 73d555389..9e0a3554a 100644 --- a/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs @@ -1,34 +1,26 @@ using Gommon; +using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Utilities.AppLibrary; namespace Ryujinx.Ava.UI.ViewModels { public class ApplicationDataViewModel : BaseModel { - private const string FormatVersion = "Current Version: {0}"; - private const string FormatDeveloper = "Developed by {0}"; - - private const string FormatExtension = "Game type: {0}"; - private const string FormatLastPlayed = "Last played: {0}"; - private const string FormatPlayTime = "Play time: {0}"; - private const string FormatSize = "Size: {0}"; - - private const string FormatHostedGames = "Hosted Games: {0}"; - private const string FormatPlayerCount = "Online Players: {0}"; - public ApplicationData AppData { get; } public ApplicationDataViewModel(ApplicationData appData) => AppData = appData; - public string FormattedVersion => FormatVersion.Format(AppData.Version); - public string FormattedDeveloper => FormatDeveloper.Format(AppData.Developer); + public string FormattedVersion => LocaleManager.Instance[LocaleKeys.GameListHeaderVersion].Format(AppData.Version); + public string FormattedDeveloper => LocaleManager.Instance[LocaleKeys.GameListHeaderDeveloper].Format(AppData.Developer); - public string FormattedFileExtension => FormatExtension.Format(AppData.FileExtension); - public string FormattedLastPlayed => FormatLastPlayed.Format(AppData.LastPlayedString); - public string FormattedPlayTime => FormatPlayTime.Format(AppData.TimePlayedString); - public string FormattedFileSize => FormatSize.Format(AppData.FileSizeString); + public string FormattedFileExtension => LocaleManager.Instance[LocaleKeys.GameListHeaderFileExtension].Format(AppData.FileExtension); + public string FormattedLastPlayed => LocaleManager.Instance[LocaleKeys.GameListHeaderLastPlayed].Format(AppData.LastPlayedString); + public string FormattedPlayTime => LocaleManager.Instance[LocaleKeys.GameListHeaderTimePlayed].Format(AppData.TimePlayedString); + public string FormattedFileSize => LocaleManager.Instance[LocaleKeys.GameListHeaderFileSize].Format(AppData.FileSizeString); public string FormattedLdnInfo => - $"{FormatHostedGames.Format(AppData.GameCount)}\n{FormatPlayerCount.Format(AppData.PlayerCount)}"; + $"{LocaleManager.Instance[LocaleKeys.GameListHeaderHostedGames].Format(AppData.GameCount)}" + + $"\n" + + $"{LocaleManager.Instance[LocaleKeys.GameListHeaderPlayerCount].Format(AppData.PlayerCount)}"; } } -- 2.47.1 From 4ae9f1c0d210d8a0af9b43e8ebaca59292ec5510 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 23:31:31 -0600 Subject: [PATCH 555/722] UI: Use Hosted Games & Player Count localization keys in list view too --- .../Converters/MultiplayerInfoConverter.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs index dc36098a1..f23a2beae 100644 --- a/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs +++ b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs @@ -1,8 +1,11 @@ using Avalonia.Data.Converters; using Avalonia.Markup.Xaml; +using Gommon; +using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Utilities.AppLibrary; using System; using System.Globalization; +using System.Text; namespace Ryujinx.Ava.UI.Helpers { @@ -12,13 +15,17 @@ namespace Ryujinx.Ava.UI.Helpers public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - if (value is ApplicationData { HasLdnGames: true } applicationData) - { - return $"Hosted Games: {applicationData.GameCount}\nOnline Players: {applicationData.PlayerCount}"; - } - - return ""; + if (value is not ApplicationData { HasLdnGames: true } applicationData) + return ""; + return new StringBuilder() + .AppendLine( + LocaleManager.Instance[LocaleKeys.GameListHeaderHostedGames] + .Format(applicationData.GameCount)) + .Append( + LocaleManager.Instance[LocaleKeys.GameListHeaderPlayerCount] + .Format(applicationData.PlayerCount)) + .ToString(); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) -- 2.47.1 From 4b1d94ccd8e468979eff1c061d51584a1b901747 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 23:36:36 -0600 Subject: [PATCH 556/722] misc: chore: [ci skip] use MultiplayerInfoConverter instance instead of constructing for every use --- src/Ryujinx/UI/Controls/ApplicationListView.axaml | 2 +- src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml b/src/Ryujinx/UI/Controls/ApplicationListView.axaml index c01c4e8be..ab4b38621 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml @@ -141,7 +141,7 @@ diff --git a/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs index f23a2beae..7694e8883 100644 --- a/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs +++ b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs @@ -11,7 +11,7 @@ namespace Ryujinx.Ava.UI.Helpers { internal class MultiplayerInfoConverter : MarkupExtension, IValueConverter { - private static readonly MultiplayerInfoConverter _instance = new(); + public static readonly MultiplayerInfoConverter Instance = new(); public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { @@ -35,7 +35,7 @@ namespace Ryujinx.Ava.UI.Helpers public override object ProvideValue(IServiceProvider serviceProvider) { - return _instance; + return Instance; } } } -- 2.47.1 From 3ecc7819cc1b259e06adf1340b5e5ac843921c1d Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Feb 2025 23:47:24 -0600 Subject: [PATCH 557/722] UI: Fix the app list sort types using the newly changed localization keys --- src/Ryujinx/Assets/locales.json | 127 +++++++++++++++++- .../UI/ViewModels/MainWindowViewModel.cs | 14 +- .../UI/Views/Main/MainViewControls.axaml | 12 +- 3 files changed, 139 insertions(+), 14 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index cb222e935..8ec664c81 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1673,7 +1673,132 @@ } }, { - "ID": "GameListHeaderPath", + "ID": "GameListSortDeveloper", + "Translations": { + "ar_SA": "المطور", + "de_DE": "Entwickler", + "el_GR": "Προγραμματιστής", + "en_US": "Developer", + "es_ES": "Desarrollador", + "fr_FR": "Développeur", + "he_IL": "מפתח", + "it_IT": "Sviluppatore", + "ja_JP": "開発元", + "ko_KR": "개발자", + "no_NO": "Utvikler", + "pl_PL": "Twórca", + "pt_BR": "Desenvolvedor", + "ru_RU": "Разработчик", + "sv_SE": "Utvecklare", + "th_TH": "ผู้พัฒนา", + "tr_TR": "Geliştirici", + "uk_UA": "Розробник", + "zh_CN": "制作商", + "zh_TW": "開發者" + } + }, + { + "ID": "GameListSortTimePlayed", + "Translations": { + "ar_SA": "وقت اللعب", + "de_DE": "Spielzeit", + "el_GR": "Χρόνος", + "en_US": "Play Time", + "es_ES": "Tiempo jugado", + "fr_FR": "Temps de jeu", + "he_IL": "זמן משחק", + "it_IT": "Tempo di gioco", + "ja_JP": "プレイ時間", + "ko_KR": "플레이 타임", + "no_NO": "Spilletid", + "pl_PL": "Czas w grze:", + "pt_BR": "Tempo de jogo", + "ru_RU": "Время в игре", + "sv_SE": "Speltid", + "th_TH": "เล่นไปแล้ว", + "tr_TR": "Oynama Süresi", + "uk_UA": "Зіграно часу", + "zh_CN": "游玩时长", + "zh_TW": "遊玩時數" + } + }, + { + "ID": "GameListSortLastPlayed", + "Translations": { + "ar_SA": "آخر مرة لُعبت", + "de_DE": "Zuletzt gespielt", + "el_GR": "Παίχτηκε", + "en_US": "Last Played", + "es_ES": "Jugado por última vez", + "fr_FR": "Dernière partie jouée", + "he_IL": "שוחק לאחרונה", + "it_IT": "Ultima partita", + "ja_JP": "最終プレイ日時", + "ko_KR": "마지막 플레이", + "no_NO": "Sist Spilt", + "pl_PL": "Ostatnio grane", + "pt_BR": "Último jogo", + "ru_RU": "Последний запуск", + "sv_SE": "Senast spelad", + "th_TH": "เล่นล่าสุด", + "tr_TR": "Son Oynama Tarihi", + "uk_UA": "Востаннє зіграно", + "zh_CN": "最近游玩", + "zh_TW": "最近遊玩" + } + }, + { + "ID": "GameListSortFileExtension", + "Translations": { + "ar_SA": "صيغة الملف", + "de_DE": "Dateiformat", + "el_GR": "Κατάληξη", + "en_US": "File Ext", + "es_ES": "Extensión", + "fr_FR": "Extension du Fichier", + "he_IL": "סיומת קובץ", + "it_IT": "Estensione", + "ja_JP": "ファイル拡張子", + "ko_KR": "파일 확장자", + "no_NO": "Fil Eks.", + "pl_PL": "Rozszerzenie pliku", + "pt_BR": "Extensão", + "ru_RU": "Расширение файла", + "sv_SE": "Filänd", + "th_TH": "นามสกุลไฟล์", + "tr_TR": "Dosya Uzantısı", + "uk_UA": "Розширення файлу", + "zh_CN": "扩展名", + "zh_TW": "副檔名" + } + }, + { + "ID": "GameListSortFileSize", + "Translations": { + "ar_SA": "حجم الملف", + "de_DE": "Dateigröße", + "el_GR": "Μέγεθος Αρχείου", + "en_US": "File Size", + "es_ES": "Tamaño del archivo", + "fr_FR": "Taille du Fichier", + "he_IL": "גודל הקובץ", + "it_IT": "Dimensione file", + "ja_JP": "ファイルサイズ", + "ko_KR": "파일 크기", + "no_NO": "Fil Størrelse", + "pl_PL": "Rozmiar pliku", + "pt_BR": "Tamanho", + "ru_RU": "Размер файла", + "sv_SE": "Filstorlek", + "th_TH": "ขนาดไฟล์", + "tr_TR": "Dosya Boyutu", + "uk_UA": "Розмір файлу", + "zh_CN": "大小", + "zh_TW": "檔案大小" + } + }, + { + "ID": "GameListSortPath", "Translations": { "ar_SA": "المسار", "de_DE": "Pfad", diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index d7a09a0e3..499eedc8d 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -633,15 +633,15 @@ namespace Ryujinx.Ava.UI.ViewModels { return SortMode switch { - ApplicationSort.Title => LocaleManager.Instance[LocaleKeys.GameListHeaderApplication], - ApplicationSort.Developer => LocaleManager.Instance[LocaleKeys.GameListHeaderDeveloper], - ApplicationSort.LastPlayed => LocaleManager.Instance[LocaleKeys.GameListHeaderLastPlayed], - ApplicationSort.TotalTimePlayed => LocaleManager.Instance[LocaleKeys.GameListHeaderTimePlayed], - ApplicationSort.FileType => LocaleManager.Instance[LocaleKeys.GameListHeaderFileExtension], - ApplicationSort.FileSize => LocaleManager.Instance[LocaleKeys.GameListHeaderFileSize], - ApplicationSort.Path => LocaleManager.Instance[LocaleKeys.GameListHeaderPath], ApplicationSort.Favorite => LocaleManager.Instance[LocaleKeys.CommonFavorite], ApplicationSort.TitleId => LocaleManager.Instance[LocaleKeys.DlcManagerTableHeadingTitleIdLabel], + ApplicationSort.Title => LocaleManager.Instance[LocaleKeys.GameListHeaderApplication], + ApplicationSort.Developer => LocaleManager.Instance[LocaleKeys.GameListSortDeveloper], + ApplicationSort.LastPlayed => LocaleManager.Instance[LocaleKeys.GameListSortLastPlayed], + ApplicationSort.TotalTimePlayed => LocaleManager.Instance[LocaleKeys.GameListSortTimePlayed], + ApplicationSort.FileType => LocaleManager.Instance[LocaleKeys.GameListSortFileExtension], + ApplicationSort.FileSize => LocaleManager.Instance[LocaleKeys.GameListSortFileSize], + ApplicationSort.Path => LocaleManager.Instance[LocaleKeys.GameListSortPath], _ => string.Empty, }; } diff --git a/src/Ryujinx/UI/Views/Main/MainViewControls.axaml b/src/Ryujinx/UI/Views/Main/MainViewControls.axaml index cdc66a138..db557b417 100644 --- a/src/Ryujinx/UI/Views/Main/MainViewControls.axaml +++ b/src/Ryujinx/UI/Views/Main/MainViewControls.axaml @@ -113,37 +113,37 @@ Tag="TitleId" /> -- 2.47.1 From 479b38f035b35ceffe2d4d87999d18eafc29573f Mon Sep 17 00:00:00 2001 From: FluffyOMC <45863583+FluffyOMC@users.noreply.github.com> Date: Wed, 5 Feb 2025 01:42:20 -0500 Subject: [PATCH 558/722] Add tooltips to game status (#625) --- src/Ryujinx/Assets/locales.json | 125 ++++++++++++++++++ .../UI/Controls/ApplicationDataView.axaml | 4 +- .../UI/Controls/ApplicationListView.axaml | 3 +- .../Utilities/AppLibrary/ApplicationData.cs | 14 +- .../Utilities/Compat/CompatibilityCsv.cs | 15 ++- .../Utilities/Compat/CompatibilityList.axaml | 2 + 6 files changed, 158 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 8ec664c81..c3044f639 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -23497,6 +23497,131 @@ "zh_TW": "無法啟動" } }, + { + "ID": "CompatibilityListPlayableTooltip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Boots and plays without any crashes or GPU bugs of any kind, and at a speed fast enough to reasonably enjoy on an average PC.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListIngameTooltip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Boots and goes in-game but suffers from one or more of the following: crashes, deadlocks, GPU bugs, distractingly bad audio, or is simply too slow. Game still might able to be played all the way through, but not as the game is intended to play.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListMenusTooltip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Boots and goes past the title screen but does not make it into main gameplay.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListBootsTooltip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Boots but does not make it past the title screen.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListNothingTooltip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Does not boot or shows no signs of activity.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "ExtractAocListHeader", "Translations": { diff --git a/src/Ryujinx/UI/Controls/ApplicationDataView.axaml b/src/Ryujinx/UI/Controls/ApplicationDataView.axaml index a18fec656..45ae75639 100644 --- a/src/Ryujinx/UI/Controls/ApplicationDataView.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationDataView.axaml @@ -41,13 +41,12 @@ HorizontalAlignment="Left" Orientation="Vertical" Spacing="5"> - +

@@ -48,7 +46,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw 1, 1, 1, - 1, + format.GetBytesPerElement(), format, DepthStencilMode.Depth, Target.TextureBuffer, @@ -521,21 +519,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw return new BufferRange(_geometryIndexDataBuffer.Handle, offset, size, write); } - /// - /// Gets the range for a dummy 16 bytes buffer, filled with zeros. - /// - /// Dummy buffer range - public BufferRange GetDummyBufferRange() - { - if (_dummyBuffer == BufferHandle.Null) - { - _dummyBuffer = _context.Renderer.CreateBuffer(DummyBufferSize, BufferAccess.DeviceMemory); - _context.Renderer.Pipeline.ClearBuffer(_dummyBuffer, 0, DummyBufferSize, 0); - } - - return new BufferRange(_dummyBuffer, 0, DummyBufferSize); - } - /// /// Gets the range for a sequential index buffer, with ever incrementing index values. /// diff --git a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs index 73682866b..2de324392 100644 --- a/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs +++ b/src/Ryujinx.Graphics.Gpu/Engine/Threed/ComputeDraw/VtgAsComputeState.cs @@ -147,7 +147,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw { _vacContext.VertexInfoBufferUpdater.SetVertexStride(index, 0, componentsCount); _vacContext.VertexInfoBufferUpdater.SetVertexOffset(index, 0, 0); - SetDummyBufferTexture(_vertexAsCompute.Reservations, index, format); continue; } @@ -163,15 +162,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw { _vacContext.VertexInfoBufferUpdater.SetVertexStride(index, 0, componentsCount); _vacContext.VertexInfoBufferUpdater.SetVertexOffset(index, 0, 0); - SetDummyBufferTexture(_vertexAsCompute.Reservations, index, format); continue; } int vbStride = vertexBuffer.UnpackStride(); ulong vbSize = GetVertexBufferSize(address, endAddress.Pack(), vbStride, _indexed, instanced, _firstVertex, _count); - ulong oldVbSize = vbSize; - ulong attributeOffset = (ulong)vertexAttrib.UnpackOffset(); int componentSize = format.GetScalarSize(); @@ -345,20 +341,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed.ComputeDraw return maxOutputVertices / verticesPerPrimitive; } - /// - /// Binds a dummy buffer as vertex buffer into a buffer texture. - /// - /// Shader resource binding reservations - /// Buffer texture index - /// Buffer texture format - private readonly void SetDummyBufferTexture(ResourceReservations reservations, int index, Format format) - { - ITexture bufferTexture = _vacContext.EnsureBufferTexture(index + 2, format); - bufferTexture.SetStorage(_vacContext.GetDummyBufferRange()); - - _context.Renderer.Pipeline.SetTextureAndSampler(ShaderStage.Compute, reservations.GetVertexBufferTextureBinding(index), bufferTexture, null); - } - /// /// Binds a vertex buffer into a buffer texture. /// diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs index c36fc0ada..b6b811389 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/DiskCacheHostStorage.cs @@ -324,6 +324,11 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache bool loadHostCache = header.CodeGenVersion == CodeGenVersion; + if (context.Capabilities.Api == TargetApi.Metal) + { + loadHostCache = false; + } + int programIndex = 0; DataEntry entry = new(); @@ -392,7 +397,8 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache context, shaders, specState.PipelineState, - specState.TransformFeedbackDescriptors != null); + specState.TransformFeedbackDescriptors != null, + specState.ComputeState.GetLocalSize()); IProgram hostProgram; @@ -629,7 +635,10 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache return; } - WriteHostCode(context, hostCode, program.Shaders, streams, timestamp); + if (context.Capabilities.Api != TargetApi.Metal) + { + WriteHostCode(context, hostCode, program.Shaders, streams, timestamp); + } } /// diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 20f96462e..74922d1e3 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -490,7 +490,12 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { ShaderSource[] shaderSources = new ShaderSource[compilation.TranslatedStages.Length]; - ShaderInfoBuilder shaderInfoBuilder = new(_context, compilation.SpecializationState.TransformFeedbackDescriptors != null); + ref GpuChannelComputeState computeState = ref compilation.SpecializationState.ComputeState; + + ShaderInfoBuilder shaderInfoBuilder = new( + _context, + compilation.SpecializationState.TransformFeedbackDescriptors != null, + computeLocalSize: computeState.GetLocalSize()); for (int index = 0; index < compilation.TranslatedStages.Length; index++) { diff --git a/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs b/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs index 1be75f242..4e9134291 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessor.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Graphics.Gpu.Shader private readonly GpuAccessorState _state; private readonly int _stageIndex; private readonly bool _compute; - private readonly bool _isVulkan; + private readonly bool _isOpenGL; private readonly bool _hasGeometryShader; private readonly bool _supportsQuads; @@ -38,7 +38,7 @@ namespace Ryujinx.Graphics.Gpu.Shader _channel = channel; _state = state; _stageIndex = stageIndex; - _isVulkan = context.Capabilities.Api == TargetApi.Vulkan; + _isOpenGL = context.Capabilities.Api == TargetApi.OpenGL; _hasGeometryShader = hasGeometryShader; _supportsQuads = context.Capabilities.SupportsQuads; @@ -116,10 +116,10 @@ namespace Ryujinx.Graphics.Gpu.Shader public GpuGraphicsState QueryGraphicsState() { return _state.GraphicsState.CreateShaderGraphicsState( - !_isVulkan, + _isOpenGL, _supportsQuads, _hasGeometryShader, - _isVulkan || _state.GraphicsState.YNegateEnabled); + !_isOpenGL || _state.GraphicsState.YNegateEnabled); } /// diff --git a/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs b/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs index d89eebabf..701ff764a 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/GpuAccessorBase.cs @@ -55,7 +55,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { int binding; - if (_context.Capabilities.Api == TargetApi.Vulkan) + if (_context.Capabilities.Api != TargetApi.OpenGL) { binding = GetBindingFromIndex(index, _context.Capabilities.MaximumUniformBuffersPerStage, "Uniform buffer"); } @@ -71,7 +71,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { int binding; - if (_context.Capabilities.Api == TargetApi.Vulkan) + if (_context.Capabilities.Api != TargetApi.OpenGL) { if (count == 1) { @@ -103,7 +103,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { int binding; - if (_context.Capabilities.Api == TargetApi.Vulkan) + if (_context.Capabilities.Api != TargetApi.OpenGL) { binding = GetBindingFromIndex(index, _context.Capabilities.MaximumStorageBuffersPerStage, "Storage buffer"); } @@ -119,7 +119,7 @@ namespace Ryujinx.Graphics.Gpu.Shader { int binding; - if (_context.Capabilities.Api == TargetApi.Vulkan) + if (_context.Capabilities.Api != TargetApi.OpenGL) { if (count == 1) { diff --git a/src/Ryujinx.Graphics.Gpu/Shader/GpuChannelComputeState.cs b/src/Ryujinx.Graphics.Gpu/Shader/GpuChannelComputeState.cs index d8cdbc348..720f7e796 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/GpuChannelComputeState.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/GpuChannelComputeState.cs @@ -1,3 +1,5 @@ +using Ryujinx.Graphics.GAL; + namespace Ryujinx.Graphics.Gpu.Shader { /// @@ -61,5 +63,14 @@ namespace Ryujinx.Graphics.Gpu.Shader SharedMemorySize = sharedMemorySize; HasUnalignedStorageBuffer = hasUnalignedStorageBuffer; } + + /// + /// Gets the local group size of the shader in a GAL compatible struct. + /// + /// Local group size + public ComputeSize GetLocalSize() + { + return new ComputeSize(LocalSizeX, LocalSizeY, LocalSizeZ); + } } } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs index 4fc66c4c0..4473e8cb3 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs @@ -224,7 +224,10 @@ namespace Ryujinx.Graphics.Gpu.Shader TranslatedShader translatedShader = TranslateShader(_dumper, channel, translatorContext, cachedGuestCode, asCompute: false); ShaderSource[] shaderSourcesArray = new ShaderSource[] { CreateShaderSource(translatedShader.Program) }; - ShaderInfo info = ShaderInfoBuilder.BuildForCompute(_context, translatedShader.Program.Info); + ShaderInfo info = ShaderInfoBuilder.BuildForCompute( + _context, + translatedShader.Program.Info, + computeState.GetLocalSize()); IProgram hostProgram = _context.Renderer.CreateProgram(shaderSourcesArray, info); cpShader = new CachedShaderProgram(hostProgram, specState, translatedShader.Shader); @@ -425,7 +428,8 @@ namespace Ryujinx.Graphics.Gpu.Shader TranslatorContext lastInVertexPipeline = geometryToCompute ? translatorContexts[4] ?? currentStage : currentStage; - program = lastInVertexPipeline.GenerateVertexPassthroughForCompute(); + (program, ShaderProgramInfo vacInfo) = lastInVertexPipeline.GenerateVertexPassthroughForCompute(); + infoBuilder.AddStageInfoVac(vacInfo); } else { @@ -530,7 +534,7 @@ namespace Ryujinx.Graphics.Gpu.Shader private ShaderAsCompute CreateHostVertexAsComputeProgram(ShaderProgram program, TranslatorContext context, bool tfEnabled) { ShaderSource source = new(program.Code, program.BinaryCode, ShaderStage.Compute, program.Language); - ShaderInfo info = ShaderInfoBuilder.BuildForVertexAsCompute(_context, program.Info, tfEnabled); + ShaderInfo info = ShaderInfoBuilder.BuildForVertexAsCompute(_context, program.Info, context.GetVertexAsComputeInfo(), tfEnabled); return new(_context.Renderer.CreateProgram(new[] { source }, info), program.Info, context.GetResourceReservations()); } @@ -822,16 +826,19 @@ namespace Ryujinx.Graphics.Gpu.Shader /// /// Creates shader translation options with the requested graphics API and flags. - /// The shader language is choosen based on the current configuration and graphics API. + /// The shader language is chosen based on the current configuration and graphics API. /// /// Target graphics API /// Translation flags /// Translation options private static TranslationOptions CreateTranslationOptions(TargetApi api, TranslationFlags flags) { - TargetLanguage lang = GraphicsConfig.EnableSpirvCompilationOnVulkan && api == TargetApi.Vulkan - ? TargetLanguage.Spirv - : TargetLanguage.Glsl; + TargetLanguage lang = api switch + { + TargetApi.OpenGL => TargetLanguage.Glsl, + TargetApi.Vulkan => GraphicsConfig.EnableSpirvCompilationOnVulkan ? TargetLanguage.Spirv : TargetLanguage.Glsl, + TargetApi.Metal => TargetLanguage.Msl, + }; return new TranslationOptions(lang, api, flags); } diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs index 49823562f..e283d0832 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderInfoBuilder.cs @@ -22,6 +22,7 @@ namespace Ryujinx.Graphics.Gpu.Shader ResourceStages.Geometry; private readonly GpuContext _context; + private readonly ComputeSize _computeLocalSize; private int _fragmentOutputMap; @@ -39,9 +40,11 @@ namespace Ryujinx.Graphics.Gpu.Shader /// GPU context that owns the shaders that will be added to the builder /// Indicates if the graphics shader is used with transform feedback enabled /// Indicates that the vertex shader will be emulated on a compute shader - public ShaderInfoBuilder(GpuContext context, bool tfEnabled, bool vertexAsCompute = false) + /// Indicates the local thread size for a compute shader + public ShaderInfoBuilder(GpuContext context, bool tfEnabled, bool vertexAsCompute = false, ComputeSize computeLocalSize = default) { _context = context; + _computeLocalSize = computeLocalSize; _fragmentOutputMap = -1; @@ -95,7 +98,7 @@ namespace Ryujinx.Graphics.Gpu.Shader private void PopulateDescriptorAndUsages(ResourceStages stages, ResourceType type, int setIndex, int start, int count, bool write = false) { AddDescriptor(stages, type, setIndex, start, count); - AddUsage(stages, type, setIndex, start, count, write); + // AddUsage(stages, type, setIndex, start, count, write); } /// @@ -159,6 +162,25 @@ namespace Ryujinx.Graphics.Gpu.Shader AddUsage(info.Images, stages, isImage: true); } + public void AddStageInfoVac(ShaderProgramInfo info) + { + ResourceStages stages = info.Stage switch + { + ShaderStage.Compute => ResourceStages.Compute, + ShaderStage.Vertex => ResourceStages.Vertex, + ShaderStage.TessellationControl => ResourceStages.TessellationControl, + ShaderStage.TessellationEvaluation => ResourceStages.TessellationEvaluation, + ShaderStage.Geometry => ResourceStages.Geometry, + ShaderStage.Fragment => ResourceStages.Fragment, + _ => ResourceStages.None, + }; + + AddUsage(info.CBuffers, stages, isStorage: false); + AddUsage(info.SBuffers, stages, isStorage: true); + AddUsage(info.Textures, stages, isImage: false); + AddUsage(info.Images, stages, isImage: true); + } + /// /// Adds a resource descriptor to the list of descriptors. /// @@ -361,14 +383,7 @@ namespace Ryujinx.Graphics.Gpu.Shader ResourceLayout resourceLayout = new(descriptors.AsReadOnly(), usages.AsReadOnly()); - if (pipeline.HasValue) - { - return new ShaderInfo(_fragmentOutputMap, resourceLayout, pipeline.Value, fromCache); - } - else - { - return new ShaderInfo(_fragmentOutputMap, resourceLayout, fromCache); - } + return new ShaderInfo(_fragmentOutputMap, resourceLayout, _computeLocalSize, pipeline, fromCache); } /// @@ -378,14 +393,16 @@ namespace Ryujinx.Graphics.Gpu.Shader /// Shaders from the disk cache /// Optional pipeline for background compilation /// Indicates if the graphics shader is used with transform feedback enabled + /// Compute local thread size /// Shader information public static ShaderInfo BuildForCache( GpuContext context, IEnumerable programs, ProgramPipelineState? pipeline, - bool tfEnabled) + bool tfEnabled, + ComputeSize computeLocalSize) { - ShaderInfoBuilder builder = new(context, tfEnabled); + ShaderInfoBuilder builder = new(context, tfEnabled, computeLocalSize: computeLocalSize); foreach (CachedShaderStage program in programs) { @@ -403,11 +420,12 @@ namespace Ryujinx.Graphics.Gpu.Shader /// /// GPU context that owns the shader /// Compute shader information + /// Compute local thread size /// True if the compute shader comes from a disk cache, false otherwise /// Shader information - public static ShaderInfo BuildForCompute(GpuContext context, ShaderProgramInfo info, bool fromCache = false) + public static ShaderInfo BuildForCompute(GpuContext context, ShaderProgramInfo info, ComputeSize computeLocalSize, bool fromCache = false) { - ShaderInfoBuilder builder = new(context, tfEnabled: false, vertexAsCompute: false); + ShaderInfoBuilder builder = new(context, tfEnabled: false, vertexAsCompute: false, computeLocalSize: computeLocalSize); builder.AddStageInfo(info); @@ -422,10 +440,11 @@ namespace Ryujinx.Graphics.Gpu.Shader /// Indicates if the graphics shader is used with transform feedback enabled /// True if the compute shader comes from a disk cache, false otherwise /// Shader information - public static ShaderInfo BuildForVertexAsCompute(GpuContext context, ShaderProgramInfo info, bool tfEnabled, bool fromCache = false) + public static ShaderInfo BuildForVertexAsCompute(GpuContext context, ShaderProgramInfo info, ShaderProgramInfo info2, bool tfEnabled, bool fromCache = false) { - ShaderInfoBuilder builder = new(context, tfEnabled, vertexAsCompute: true); + ShaderInfoBuilder builder = new(context, tfEnabled, vertexAsCompute: true, computeLocalSize: ComputeSize.VtgAsCompute); + builder.AddStageInfoVac(info2); builder.AddStageInfo(info, vertexAsCompute: true); return builder.Build(null, fromCache); diff --git a/src/Ryujinx.Graphics.Metal/Auto.cs b/src/Ryujinx.Graphics.Metal/Auto.cs new file mode 100644 index 000000000..7e79ecbc3 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Auto.cs @@ -0,0 +1,146 @@ +using System; +using System.Diagnostics; +using System.Runtime.Versioning; +using System.Threading; + +namespace Ryujinx.Graphics.Metal +{ + interface IAuto + { + bool HasCommandBufferDependency(CommandBufferScoped cbs); + + void IncrementReferenceCount(); + void DecrementReferenceCount(int cbIndex); + void DecrementReferenceCount(); + } + + interface IAutoPrivate : IAuto + { + void AddCommandBufferDependencies(CommandBufferScoped cbs); + } + + [SupportedOSPlatform("macos")] + class Auto : IAutoPrivate, IDisposable where T : IDisposable + { + private int _referenceCount; + private T _value; + + private readonly BitMap _cbOwnership; + private readonly MultiFenceHolder _waitable; + + private bool _disposed; + private bool _destroyed; + + public Auto(T value) + { + _referenceCount = 1; + _value = value; + _cbOwnership = new BitMap(CommandBufferPool.MaxCommandBuffers); + } + + public Auto(T value, MultiFenceHolder waitable) : this(value) + { + _waitable = waitable; + } + + public T Get(CommandBufferScoped cbs, int offset, int size, bool write = false) + { + _waitable?.AddBufferUse(cbs.CommandBufferIndex, offset, size, write); + return Get(cbs); + } + + public T GetUnsafe() + { + return _value; + } + + public T Get(CommandBufferScoped cbs) + { + if (!_destroyed) + { + AddCommandBufferDependencies(cbs); + } + + return _value; + } + + public bool HasCommandBufferDependency(CommandBufferScoped cbs) + { + return _cbOwnership.IsSet(cbs.CommandBufferIndex); + } + + public bool HasRentedCommandBufferDependency(CommandBufferPool cbp) + { + return _cbOwnership.AnySet(); + } + + public void AddCommandBufferDependencies(CommandBufferScoped cbs) + { + // We don't want to add a reference to this object to the command buffer + // more than once, so if we detect that the command buffer already has ownership + // of this object, then we can just return without doing anything else. + if (_cbOwnership.Set(cbs.CommandBufferIndex)) + { + if (_waitable != null) + { + cbs.AddWaitable(_waitable); + } + + cbs.AddDependant(this); + } + } + + public bool TryIncrementReferenceCount() + { + int lastValue; + do + { + lastValue = _referenceCount; + + if (lastValue == 0) + { + return false; + } + } + while (Interlocked.CompareExchange(ref _referenceCount, lastValue + 1, lastValue) != lastValue); + + return true; + } + + public void IncrementReferenceCount() + { + if (Interlocked.Increment(ref _referenceCount) == 1) + { + Interlocked.Decrement(ref _referenceCount); + throw new InvalidOperationException("Attempted to increment the reference count of an object that was already destroyed."); + } + } + + public void DecrementReferenceCount(int cbIndex) + { + _cbOwnership.Clear(cbIndex); + DecrementReferenceCount(); + } + + public void DecrementReferenceCount() + { + if (Interlocked.Decrement(ref _referenceCount) == 0) + { + _value.Dispose(); + _value = default; + _destroyed = true; + } + + Debug.Assert(_referenceCount >= 0); + } + + public void Dispose() + { + if (!_disposed) + { + DecrementReferenceCount(); + _disposed = true; + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/BackgroundResources.cs b/src/Ryujinx.Graphics.Metal/BackgroundResources.cs new file mode 100644 index 000000000..8bf6b92bd --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/BackgroundResources.cs @@ -0,0 +1,107 @@ +using SharpMetal.Metal; +using System; +using System.Collections.Generic; +using System.Runtime.Versioning; +using System.Threading; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class BackgroundResource : IDisposable + { + private readonly MetalRenderer _renderer; + + private CommandBufferPool _pool; + private PersistentFlushBuffer _flushBuffer; + + public BackgroundResource(MetalRenderer renderer) + { + _renderer = renderer; + } + + public CommandBufferPool GetPool() + { + if (_pool == null) + { + MTLCommandQueue queue = _renderer.BackgroundQueue; + _pool = new CommandBufferPool(queue, true); + _pool.Initialize(null); // TODO: Proper encoder factory for background render/compute + } + + return _pool; + } + + public PersistentFlushBuffer GetFlushBuffer() + { + _flushBuffer ??= new PersistentFlushBuffer(_renderer); + + return _flushBuffer; + } + + public void Dispose() + { + _pool?.Dispose(); + _flushBuffer?.Dispose(); + } + } + + [SupportedOSPlatform("macos")] + class BackgroundResources : IDisposable + { + private readonly MetalRenderer _renderer; + + private readonly Dictionary _resources; + + public BackgroundResources(MetalRenderer renderer) + { + _renderer = renderer; + + _resources = new Dictionary(); + } + + private void Cleanup() + { + lock (_resources) + { + foreach (KeyValuePair tuple in _resources) + { + if (!tuple.Key.IsAlive) + { + tuple.Value.Dispose(); + _resources.Remove(tuple.Key); + } + } + } + } + + public BackgroundResource Get() + { + Thread thread = Thread.CurrentThread; + + lock (_resources) + { + if (!_resources.TryGetValue(thread, out BackgroundResource resource)) + { + Cleanup(); + + resource = new BackgroundResource(_renderer); + + _resources[thread] = resource; + } + + return resource; + } + } + + public void Dispose() + { + lock (_resources) + { + foreach (var resource in _resources.Values) + { + resource.Dispose(); + } + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/BitMap.cs b/src/Ryujinx.Graphics.Metal/BitMap.cs new file mode 100644 index 000000000..4ddc438c1 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/BitMap.cs @@ -0,0 +1,157 @@ +namespace Ryujinx.Graphics.Metal +{ + readonly struct BitMap + { + public const int IntSize = 64; + + private const int IntShift = 6; + private const int IntMask = IntSize - 1; + + private readonly long[] _masks; + + public BitMap(int count) + { + _masks = new long[(count + IntMask) / IntSize]; + } + + public bool AnySet() + { + for (int i = 0; i < _masks.Length; i++) + { + if (_masks[i] != 0) + { + return true; + } + } + + return false; + } + + public bool IsSet(int bit) + { + int wordIndex = bit >> IntShift; + int wordBit = bit & IntMask; + + long wordMask = 1L << wordBit; + + return (_masks[wordIndex] & wordMask) != 0; + } + + public bool IsSet(int start, int end) + { + if (start == end) + { + return IsSet(start); + } + + int startIndex = start >> IntShift; + int startBit = start & IntMask; + long startMask = -1L << startBit; + + int endIndex = end >> IntShift; + int endBit = end & IntMask; + long endMask = (long)(ulong.MaxValue >> (IntMask - endBit)); + + if (startIndex == endIndex) + { + return (_masks[startIndex] & startMask & endMask) != 0; + } + + if ((_masks[startIndex] & startMask) != 0) + { + return true; + } + + for (int i = startIndex + 1; i < endIndex; i++) + { + if (_masks[i] != 0) + { + return true; + } + } + + if ((_masks[endIndex] & endMask) != 0) + { + return true; + } + + return false; + } + + public bool Set(int bit) + { + int wordIndex = bit >> IntShift; + int wordBit = bit & IntMask; + + long wordMask = 1L << wordBit; + + if ((_masks[wordIndex] & wordMask) != 0) + { + return false; + } + + _masks[wordIndex] |= wordMask; + + return true; + } + + public void SetRange(int start, int end) + { + if (start == end) + { + Set(start); + return; + } + + int startIndex = start >> IntShift; + int startBit = start & IntMask; + long startMask = -1L << startBit; + + int endIndex = end >> IntShift; + int endBit = end & IntMask; + long endMask = (long)(ulong.MaxValue >> (IntMask - endBit)); + + if (startIndex == endIndex) + { + _masks[startIndex] |= startMask & endMask; + } + else + { + _masks[startIndex] |= startMask; + + for (int i = startIndex + 1; i < endIndex; i++) + { + _masks[i] |= -1; + } + + _masks[endIndex] |= endMask; + } + } + + public void Clear(int bit) + { + int wordIndex = bit >> IntShift; + int wordBit = bit & IntMask; + + long wordMask = 1L << wordBit; + + _masks[wordIndex] &= ~wordMask; + } + + public void Clear() + { + for (int i = 0; i < _masks.Length; i++) + { + _masks[i] = 0; + } + } + + public void ClearInt(int start, int end) + { + for (int i = start; i <= end; i++) + { + _masks[i] = 0; + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/BufferHolder.cs b/src/Ryujinx.Graphics.Metal/BufferHolder.cs new file mode 100644 index 000000000..cc86a403f --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/BufferHolder.cs @@ -0,0 +1,385 @@ +using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; +using System; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; +using System.Threading; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class BufferHolder : IDisposable + { + private CacheByRange _cachedConvertedBuffers; + + public int Size { get; } + + private readonly IntPtr _map; + private readonly MetalRenderer _renderer; + private readonly Pipeline _pipeline; + + private readonly MultiFenceHolder _waitable; + private readonly Auto _buffer; + + private readonly ReaderWriterLockSlim _flushLock; + private FenceHolder _flushFence; + private int _flushWaiting; + + public BufferHolder(MetalRenderer renderer, Pipeline pipeline, MTLBuffer buffer, int size) + { + _renderer = renderer; + _pipeline = pipeline; + _map = buffer.Contents; + _waitable = new MultiFenceHolder(size); + _buffer = new Auto(new(buffer), _waitable); + + _flushLock = new ReaderWriterLockSlim(); + + Size = size; + } + + public Auto GetBuffer() + { + return _buffer; + } + + public Auto GetBuffer(bool isWrite) + { + if (isWrite) + { + SignalWrite(0, Size); + } + + return _buffer; + } + + public Auto GetBuffer(int offset, int size, bool isWrite) + { + if (isWrite) + { + SignalWrite(offset, size); + } + + return _buffer; + } + + public void SignalWrite(int offset, int size) + { + if (offset == 0 && size == Size) + { + _cachedConvertedBuffers.Clear(); + } + else + { + _cachedConvertedBuffers.ClearRange(offset, size); + } + } + + private void ClearFlushFence() + { + // Assumes _flushLock is held as writer. + + if (_flushFence != null) + { + if (_flushWaiting == 0) + { + _flushFence.Put(); + } + + _flushFence = null; + } + } + + private void WaitForFlushFence() + { + if (_flushFence == null) + { + return; + } + + // If storage has changed, make sure the fence has been reached so that the data is in place. + _flushLock.ExitReadLock(); + _flushLock.EnterWriteLock(); + + if (_flushFence != null) + { + var fence = _flushFence; + Interlocked.Increment(ref _flushWaiting); + + // Don't wait in the lock. + + _flushLock.ExitWriteLock(); + + fence.Wait(); + + _flushLock.EnterWriteLock(); + + if (Interlocked.Decrement(ref _flushWaiting) == 0) + { + fence.Put(); + } + + _flushFence = null; + } + + // Assumes the _flushLock is held as reader, returns in same state. + _flushLock.ExitWriteLock(); + _flushLock.EnterReadLock(); + } + + public PinnedSpan GetData(int offset, int size) + { + _flushLock.EnterReadLock(); + + WaitForFlushFence(); + + Span result; + + if (_map != IntPtr.Zero) + { + result = GetDataStorage(offset, size); + + // Need to be careful here, the buffer can't be unmapped while the data is being used. + _buffer.IncrementReferenceCount(); + + _flushLock.ExitReadLock(); + + return PinnedSpan.UnsafeFromSpan(result, _buffer.DecrementReferenceCount); + } + + throw new InvalidOperationException("The buffer is not mapped"); + } + + public unsafe Span GetDataStorage(int offset, int size) + { + int mappingSize = Math.Min(size, Size - offset); + + if (_map != IntPtr.Zero) + { + return new Span((void*)(_map + offset), mappingSize); + } + + throw new InvalidOperationException("The buffer is not mapped."); + } + + public unsafe void SetData(int offset, ReadOnlySpan data, CommandBufferScoped? cbs = null, bool allowCbsWait = true) + { + int dataSize = Math.Min(data.Length, Size - offset); + if (dataSize == 0) + { + return; + } + + if (_map != IntPtr.Zero) + { + // If persistently mapped, set the data directly if the buffer is not currently in use. + bool isRented = _buffer.HasRentedCommandBufferDependency(_renderer.CommandBufferPool); + + // If the buffer is rented, take a little more time and check if the use overlaps this handle. + bool needsFlush = isRented && _waitable.IsBufferRangeInUse(offset, dataSize, false); + + if (!needsFlush) + { + WaitForFences(offset, dataSize); + + data[..dataSize].CopyTo(new Span((void*)(_map + offset), dataSize)); + + SignalWrite(offset, dataSize); + + return; + } + } + + if (cbs != null && + cbs.Value.Encoders.CurrentEncoderType == EncoderType.Render && + !(_buffer.HasCommandBufferDependency(cbs.Value) && + _waitable.IsBufferRangeInUse(cbs.Value.CommandBufferIndex, offset, dataSize))) + { + // If the buffer hasn't been used on the command buffer yet, try to preload the data. + // This avoids ending and beginning render passes on each buffer data upload. + + cbs = _pipeline.GetPreloadCommandBuffer(); + } + + if (allowCbsWait) + { + _renderer.BufferManager.StagingBuffer.PushData(_renderer.CommandBufferPool, cbs, this, offset, data); + } + else + { + bool rentCbs = cbs == null; + if (rentCbs) + { + cbs = _renderer.CommandBufferPool.Rent(); + } + + if (!_renderer.BufferManager.StagingBuffer.TryPushData(cbs.Value, this, offset, data)) + { + // Need to do a slow upload. + BufferHolder srcHolder = _renderer.BufferManager.Create(dataSize); + srcHolder.SetDataUnchecked(0, data); + + var srcBuffer = srcHolder.GetBuffer(); + var dstBuffer = this.GetBuffer(true); + + Copy(cbs.Value, srcBuffer, dstBuffer, 0, offset, dataSize); + + srcHolder.Dispose(); + } + + if (rentCbs) + { + cbs.Value.Dispose(); + } + } + } + + public unsafe void SetDataUnchecked(int offset, ReadOnlySpan data) + { + int dataSize = Math.Min(data.Length, Size - offset); + if (dataSize == 0) + { + return; + } + + if (_map != IntPtr.Zero) + { + data[..dataSize].CopyTo(new Span((void*)(_map + offset), dataSize)); + } + } + + public void SetDataUnchecked(int offset, ReadOnlySpan data) where T : unmanaged + { + SetDataUnchecked(offset, MemoryMarshal.AsBytes(data)); + } + + public static void Copy( + CommandBufferScoped cbs, + Auto src, + Auto dst, + int srcOffset, + int dstOffset, + int size, + bool registerSrcUsage = true) + { + var srcBuffer = registerSrcUsage ? src.Get(cbs, srcOffset, size).Value : src.GetUnsafe().Value; + var dstbuffer = dst.Get(cbs, dstOffset, size, true).Value; + + cbs.Encoders.EnsureBlitEncoder().CopyFromBuffer( + srcBuffer, + (ulong)srcOffset, + dstbuffer, + (ulong)dstOffset, + (ulong)size); + } + + public void WaitForFences() + { + _waitable.WaitForFences(); + } + + public void WaitForFences(int offset, int size) + { + _waitable.WaitForFences(offset, size); + } + + private bool BoundToRange(int offset, ref int size) + { + if (offset >= Size) + { + return false; + } + + size = Math.Min(Size - offset, size); + + return true; + } + + public Auto GetBufferI8ToI16(CommandBufferScoped cbs, int offset, int size) + { + if (!BoundToRange(offset, ref size)) + { + return null; + } + + var key = new I8ToI16CacheKey(_renderer); + + if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out var holder)) + { + holder = _renderer.BufferManager.Create((size * 2 + 3) & ~3); + + _renderer.HelperShader.ConvertI8ToI16(cbs, this, holder, offset, size); + + key.SetBuffer(holder.GetBuffer()); + + _cachedConvertedBuffers.Add(offset, size, key, holder); + } + + return holder.GetBuffer(); + } + + public Auto GetBufferTopologyConversion(CommandBufferScoped cbs, int offset, int size, IndexBufferPattern pattern, int indexSize) + { + if (!BoundToRange(offset, ref size)) + { + return null; + } + + var key = new TopologyConversionCacheKey(_renderer, pattern, indexSize); + + if (!_cachedConvertedBuffers.TryGetValue(offset, size, key, out var holder)) + { + // The destination index size is always I32. + + int indexCount = size / indexSize; + + int convertedCount = pattern.GetConvertedCount(indexCount); + + holder = _renderer.BufferManager.Create(convertedCount * 4); + + _renderer.HelperShader.ConvertIndexBuffer(cbs, this, holder, pattern, indexSize, offset, indexCount); + + key.SetBuffer(holder.GetBuffer()); + + _cachedConvertedBuffers.Add(offset, size, key, holder); + } + + return holder.GetBuffer(); + } + + public bool TryGetCachedConvertedBuffer(int offset, int size, ICacheKey key, out BufferHolder holder) + { + return _cachedConvertedBuffers.TryGetValue(offset, size, key, out holder); + } + + public void AddCachedConvertedBuffer(int offset, int size, ICacheKey key, BufferHolder holder) + { + _cachedConvertedBuffers.Add(offset, size, key, holder); + } + + public void AddCachedConvertedBufferDependency(int offset, int size, ICacheKey key, Dependency dependency) + { + _cachedConvertedBuffers.AddDependency(offset, size, key, dependency); + } + + public void RemoveCachedConvertedBuffer(int offset, int size, ICacheKey key) + { + _cachedConvertedBuffers.Remove(offset, size, key); + } + + + public void Dispose() + { + _pipeline.FlushCommandsIfWeightExceeding(_buffer, (ulong)Size); + + _buffer.Dispose(); + _cachedConvertedBuffers.Dispose(); + + _flushLock.EnterWriteLock(); + + ClearFlushFence(); + + _flushLock.ExitWriteLock(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/BufferManager.cs b/src/Ryujinx.Graphics.Metal/BufferManager.cs new file mode 100644 index 000000000..07a686223 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/BufferManager.cs @@ -0,0 +1,237 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + readonly struct ScopedTemporaryBuffer : IDisposable + { + private readonly BufferManager _bufferManager; + private readonly bool _isReserved; + + public readonly BufferRange Range; + public readonly BufferHolder Holder; + + public BufferHandle Handle => Range.Handle; + public int Offset => Range.Offset; + + public ScopedTemporaryBuffer(BufferManager bufferManager, BufferHolder holder, BufferHandle handle, int offset, int size, bool isReserved) + { + _bufferManager = bufferManager; + + Range = new BufferRange(handle, offset, size); + Holder = holder; + + _isReserved = isReserved; + } + + public void Dispose() + { + if (!_isReserved) + { + _bufferManager.Delete(Range.Handle); + } + } + } + + [SupportedOSPlatform("macos")] + class BufferManager : IDisposable + { + private readonly IdList _buffers; + + private readonly MTLDevice _device; + private readonly MetalRenderer _renderer; + private readonly Pipeline _pipeline; + + public int BufferCount { get; private set; } + + public StagingBuffer StagingBuffer { get; } + + public BufferManager(MTLDevice device, MetalRenderer renderer, Pipeline pipeline) + { + _device = device; + _renderer = renderer; + _pipeline = pipeline; + _buffers = new IdList(); + + StagingBuffer = new StagingBuffer(_renderer, this); + } + + public BufferHandle Create(nint pointer, int size) + { + // TODO: This is the wrong Metal method, we need no-copy which SharpMetal isn't giving us. + var buffer = _device.NewBuffer(pointer, (ulong)size, MTLResourceOptions.ResourceStorageModeShared); + + if (buffer == IntPtr.Zero) + { + Logger.Error?.PrintMsg(LogClass.Gpu, $"Failed to create buffer with size 0x{size:X}, and pointer 0x{pointer:X}."); + + return BufferHandle.Null; + } + + var holder = new BufferHolder(_renderer, _pipeline, buffer, size); + + BufferCount++; + + ulong handle64 = (uint)_buffers.Add(holder); + + return Unsafe.As(ref handle64); + } + + public BufferHandle CreateWithHandle(int size) + { + return CreateWithHandle(size, out _); + } + + public BufferHandle CreateWithHandle(int size, out BufferHolder holder) + { + holder = Create(size); + + if (holder == null) + { + return BufferHandle.Null; + } + + BufferCount++; + + ulong handle64 = (uint)_buffers.Add(holder); + + return Unsafe.As(ref handle64); + } + + public ScopedTemporaryBuffer ReserveOrCreate(CommandBufferScoped cbs, int size) + { + StagingBufferReserved? result = StagingBuffer.TryReserveData(cbs, size); + + if (result.HasValue) + { + return new ScopedTemporaryBuffer(this, result.Value.Buffer, StagingBuffer.Handle, result.Value.Offset, result.Value.Size, true); + } + else + { + // Create a temporary buffer. + BufferHandle handle = CreateWithHandle(size, out BufferHolder holder); + + return new ScopedTemporaryBuffer(this, holder, handle, 0, size, false); + } + } + + public BufferHolder Create(int size) + { + var buffer = _device.NewBuffer((ulong)size, MTLResourceOptions.ResourceStorageModeShared); + + if (buffer != IntPtr.Zero) + { + return new BufferHolder(_renderer, _pipeline, buffer, size); + } + + Logger.Error?.PrintMsg(LogClass.Gpu, $"Failed to create buffer with size 0x{size:X}."); + + return null; + } + + public Auto GetBuffer(BufferHandle handle, bool isWrite, out int size) + { + if (TryGetBuffer(handle, out var holder)) + { + size = holder.Size; + return holder.GetBuffer(isWrite); + } + + size = 0; + return null; + } + + public Auto GetBuffer(BufferHandle handle, int offset, int size, bool isWrite) + { + if (TryGetBuffer(handle, out var holder)) + { + return holder.GetBuffer(offset, size, isWrite); + } + + return null; + } + + public Auto GetBuffer(BufferHandle handle, bool isWrite) + { + if (TryGetBuffer(handle, out var holder)) + { + return holder.GetBuffer(isWrite); + } + + return null; + } + + public Auto GetBufferI8ToI16(CommandBufferScoped cbs, BufferHandle handle, int offset, int size) + { + if (TryGetBuffer(handle, out var holder)) + { + return holder.GetBufferI8ToI16(cbs, offset, size); + } + + return null; + } + + public Auto GetBufferTopologyConversion(CommandBufferScoped cbs, BufferHandle handle, int offset, int size, IndexBufferPattern pattern, int indexSize) + { + if (TryGetBuffer(handle, out var holder)) + { + return holder.GetBufferTopologyConversion(cbs, offset, size, pattern, indexSize); + } + + return null; + } + + public PinnedSpan GetData(BufferHandle handle, int offset, int size) + { + if (TryGetBuffer(handle, out var holder)) + { + return holder.GetData(offset, size); + } + + return new PinnedSpan(); + } + + public void SetData(BufferHandle handle, int offset, ReadOnlySpan data) where T : unmanaged + { + SetData(handle, offset, MemoryMarshal.Cast(data), null); + } + + public void SetData(BufferHandle handle, int offset, ReadOnlySpan data, CommandBufferScoped? cbs) + { + if (TryGetBuffer(handle, out var holder)) + { + holder.SetData(offset, data, cbs); + } + } + + public void Delete(BufferHandle handle) + { + if (TryGetBuffer(handle, out var holder)) + { + holder.Dispose(); + _buffers.Remove((int)Unsafe.As(ref handle)); + } + } + + private bool TryGetBuffer(BufferHandle handle, out BufferHolder holder) + { + return _buffers.TryGetValue((int)Unsafe.As(ref handle), out holder); + } + + public void Dispose() + { + StagingBuffer.Dispose(); + + foreach (var buffer in _buffers) + { + buffer.Dispose(); + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/BufferUsageBitmap.cs b/src/Ryujinx.Graphics.Metal/BufferUsageBitmap.cs new file mode 100644 index 000000000..379e27407 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/BufferUsageBitmap.cs @@ -0,0 +1,85 @@ +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + internal class BufferUsageBitmap + { + private readonly BitMap _bitmap; + private readonly int _size; + private readonly int _granularity; + private readonly int _bits; + private readonly int _writeBitOffset; + + private readonly int _intsPerCb; + private readonly int _bitsPerCb; + + public BufferUsageBitmap(int size, int granularity) + { + _size = size; + _granularity = granularity; + + // There are two sets of bits - one for read tracking, and the other for write. + int bits = (size + (granularity - 1)) / granularity; + _writeBitOffset = bits; + _bits = bits << 1; + + _intsPerCb = (_bits + (BitMap.IntSize - 1)) / BitMap.IntSize; + _bitsPerCb = _intsPerCb * BitMap.IntSize; + + _bitmap = new BitMap(_bitsPerCb * CommandBufferPool.MaxCommandBuffers); + } + + public void Add(int cbIndex, int offset, int size, bool write) + { + if (size == 0) + { + return; + } + + // Some usages can be out of bounds (vertex buffer on amd), so bound if necessary. + if (offset + size > _size) + { + size = _size - offset; + } + + int cbBase = cbIndex * _bitsPerCb + (write ? _writeBitOffset : 0); + int start = cbBase + offset / _granularity; + int end = cbBase + (offset + size - 1) / _granularity; + + _bitmap.SetRange(start, end); + } + + public bool OverlapsWith(int cbIndex, int offset, int size, bool write = false) + { + if (size == 0) + { + return false; + } + + int cbBase = cbIndex * _bitsPerCb + (write ? _writeBitOffset : 0); + int start = cbBase + offset / _granularity; + int end = cbBase + (offset + size - 1) / _granularity; + + return _bitmap.IsSet(start, end); + } + + public bool OverlapsWith(int offset, int size, bool write) + { + for (int i = 0; i < CommandBufferPool.MaxCommandBuffers; i++) + { + if (OverlapsWith(i, offset, size, write)) + { + return true; + } + } + + return false; + } + + public void Clear(int cbIndex) + { + _bitmap.ClearInt(cbIndex * _intsPerCb, (cbIndex + 1) * _intsPerCb - 1); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/CacheByRange.cs b/src/Ryujinx.Graphics.Metal/CacheByRange.cs new file mode 100644 index 000000000..76515808f --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/CacheByRange.cs @@ -0,0 +1,294 @@ +using System; +using System.Collections.Generic; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + interface ICacheKey : IDisposable + { + bool KeyEqual(ICacheKey other); + } + + [SupportedOSPlatform("macos")] + struct I8ToI16CacheKey : ICacheKey + { + // Used to notify the pipeline that bindings have invalidated on dispose. + // private readonly MetalRenderer _renderer; + // private Auto _buffer; + + public I8ToI16CacheKey(MetalRenderer renderer) + { + // _renderer = renderer; + // _buffer = null; + } + + public readonly bool KeyEqual(ICacheKey other) + { + return other is I8ToI16CacheKey; + } + + public readonly void SetBuffer(Auto buffer) + { + // _buffer = buffer; + } + + public readonly void Dispose() + { + // TODO: Tell pipeline buffer is dirty! + // _renderer.PipelineInternal.DirtyIndexBuffer(_buffer); + } + } + + [SupportedOSPlatform("macos")] + readonly struct TopologyConversionCacheKey : ICacheKey + { + private readonly IndexBufferPattern _pattern; + private readonly int _indexSize; + + // Used to notify the pipeline that bindings have invalidated on dispose. + // private readonly MetalRenderer _renderer; + // private Auto _buffer; + + public TopologyConversionCacheKey(MetalRenderer renderer, IndexBufferPattern pattern, int indexSize) + { + // _renderer = renderer; + // _buffer = null; + _pattern = pattern; + _indexSize = indexSize; + } + + public readonly bool KeyEqual(ICacheKey other) + { + return other is TopologyConversionCacheKey entry && + entry._pattern == _pattern && + entry._indexSize == _indexSize; + } + + public void SetBuffer(Auto buffer) + { + // _buffer = buffer; + } + + public readonly void Dispose() + { + // TODO: Tell pipeline buffer is dirty! + // _renderer.PipelineInternal.DirtyVertexBuffer(_buffer); + } + } + + [SupportedOSPlatform("macos")] + readonly struct Dependency + { + private readonly BufferHolder _buffer; + private readonly int _offset; + private readonly int _size; + private readonly ICacheKey _key; + + public Dependency(BufferHolder buffer, int offset, int size, ICacheKey key) + { + _buffer = buffer; + _offset = offset; + _size = size; + _key = key; + } + + public void RemoveFromOwner() + { + _buffer.RemoveCachedConvertedBuffer(_offset, _size, _key); + } + } + + [SupportedOSPlatform("macos")] + struct CacheByRange where T : IDisposable + { + private struct Entry + { + public readonly ICacheKey Key; + public readonly T Value; + public List DependencyList; + + public Entry(ICacheKey key, T value) + { + Key = key; + Value = value; + DependencyList = null; + } + + public readonly void InvalidateDependencies() + { + if (DependencyList != null) + { + foreach (Dependency dependency in DependencyList) + { + dependency.RemoveFromOwner(); + } + + DependencyList.Clear(); + } + } + } + + private Dictionary> _ranges; + + public void Add(int offset, int size, ICacheKey key, T value) + { + List entries = GetEntries(offset, size); + + entries.Add(new Entry(key, value)); + } + + public void AddDependency(int offset, int size, ICacheKey key, Dependency dependency) + { + List entries = GetEntries(offset, size); + + for (int i = 0; i < entries.Count; i++) + { + Entry entry = entries[i]; + + if (entry.Key.KeyEqual(key)) + { + if (entry.DependencyList == null) + { + entry.DependencyList = new List(); + entries[i] = entry; + } + + entry.DependencyList.Add(dependency); + + break; + } + } + } + + public void Remove(int offset, int size, ICacheKey key) + { + List entries = GetEntries(offset, size); + + for (int i = 0; i < entries.Count; i++) + { + Entry entry = entries[i]; + + if (entry.Key.KeyEqual(key)) + { + entries.RemoveAt(i--); + + DestroyEntry(entry); + } + } + + if (entries.Count == 0) + { + _ranges.Remove(PackRange(offset, size)); + } + } + + public bool TryGetValue(int offset, int size, ICacheKey key, out T value) + { + List entries = GetEntries(offset, size); + + foreach (Entry entry in entries) + { + if (entry.Key.KeyEqual(key)) + { + value = entry.Value; + + return true; + } + } + + value = default; + return false; + } + + public void Clear() + { + if (_ranges != null) + { + foreach (List entries in _ranges.Values) + { + foreach (Entry entry in entries) + { + DestroyEntry(entry); + } + } + + _ranges.Clear(); + _ranges = null; + } + } + + public readonly void ClearRange(int offset, int size) + { + if (_ranges != null && _ranges.Count > 0) + { + int end = offset + size; + + List toRemove = null; + + foreach (KeyValuePair> range in _ranges) + { + (int rOffset, int rSize) = UnpackRange(range.Key); + + int rEnd = rOffset + rSize; + + if (rEnd > offset && rOffset < end) + { + List entries = range.Value; + + foreach (Entry entry in entries) + { + DestroyEntry(entry); + } + + (toRemove ??= new List()).Add(range.Key); + } + } + + if (toRemove != null) + { + foreach (ulong range in toRemove) + { + _ranges.Remove(range); + } + } + } + } + + private List GetEntries(int offset, int size) + { + _ranges ??= new Dictionary>(); + + ulong key = PackRange(offset, size); + + if (!_ranges.TryGetValue(key, out List value)) + { + value = new List(); + _ranges.Add(key, value); + } + + return value; + } + + private static void DestroyEntry(Entry entry) + { + entry.Key.Dispose(); + entry.Value?.Dispose(); + entry.InvalidateDependencies(); + } + + private static ulong PackRange(int offset, int size) + { + return (uint)offset | ((ulong)size << 32); + } + + private static (int offset, int size) UnpackRange(ulong range) + { + return ((int)range, (int)(range >> 32)); + } + + public void Dispose() + { + Clear(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs b/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs new file mode 100644 index 000000000..ec4150030 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/CommandBufferEncoder.cs @@ -0,0 +1,170 @@ +using Ryujinx.Graphics.Metal; +using SharpMetal.Metal; +using System; +using System.Runtime.CompilerServices; +using System.Runtime.Versioning; + +interface IEncoderFactory +{ + MTLRenderCommandEncoder CreateRenderCommandEncoder(); + MTLComputeCommandEncoder CreateComputeCommandEncoder(); +} + +/// +/// Tracks active encoder object for a command buffer. +/// +[SupportedOSPlatform("macos")] +class CommandBufferEncoder +{ + public EncoderType CurrentEncoderType { get; private set; } = EncoderType.None; + + public MTLBlitCommandEncoder BlitEncoder => new(CurrentEncoder.Value); + + public MTLComputeCommandEncoder ComputeEncoder => new(CurrentEncoder.Value); + + public MTLRenderCommandEncoder RenderEncoder => new(CurrentEncoder.Value); + + internal MTLCommandEncoder? CurrentEncoder { get; private set; } + + private MTLCommandBuffer _commandBuffer; + private IEncoderFactory _encoderFactory; + + public void Initialize(MTLCommandBuffer commandBuffer, IEncoderFactory encoderFactory) + { + _commandBuffer = commandBuffer; + _encoderFactory = encoderFactory; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public MTLRenderCommandEncoder EnsureRenderEncoder() + { + if (CurrentEncoderType != EncoderType.Render) + { + return BeginRenderPass(); + } + + return RenderEncoder; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public MTLBlitCommandEncoder EnsureBlitEncoder() + { + if (CurrentEncoderType != EncoderType.Blit) + { + return BeginBlitPass(); + } + + return BlitEncoder; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public MTLComputeCommandEncoder EnsureComputeEncoder() + { + if (CurrentEncoderType != EncoderType.Compute) + { + return BeginComputePass(); + } + + return ComputeEncoder; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryGetRenderEncoder(out MTLRenderCommandEncoder encoder) + { + if (CurrentEncoderType != EncoderType.Render) + { + encoder = default; + return false; + } + + encoder = RenderEncoder; + return true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryGetBlitEncoder(out MTLBlitCommandEncoder encoder) + { + if (CurrentEncoderType != EncoderType.Blit) + { + encoder = default; + return false; + } + + encoder = BlitEncoder; + return true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool TryGetComputeEncoder(out MTLComputeCommandEncoder encoder) + { + if (CurrentEncoderType != EncoderType.Compute) + { + encoder = default; + return false; + } + + encoder = ComputeEncoder; + return true; + } + + public void EndCurrentPass() + { + if (CurrentEncoder != null) + { + switch (CurrentEncoderType) + { + case EncoderType.Blit: + BlitEncoder.EndEncoding(); + CurrentEncoder = null; + break; + case EncoderType.Compute: + ComputeEncoder.EndEncoding(); + CurrentEncoder = null; + break; + case EncoderType.Render: + RenderEncoder.EndEncoding(); + CurrentEncoder = null; + break; + default: + throw new InvalidOperationException(); + } + + CurrentEncoderType = EncoderType.None; + } + } + + private MTLRenderCommandEncoder BeginRenderPass() + { + EndCurrentPass(); + + var renderCommandEncoder = _encoderFactory.CreateRenderCommandEncoder(); + + CurrentEncoder = renderCommandEncoder; + CurrentEncoderType = EncoderType.Render; + + return renderCommandEncoder; + } + + private MTLBlitCommandEncoder BeginBlitPass() + { + EndCurrentPass(); + + using var descriptor = new MTLBlitPassDescriptor(); + var blitCommandEncoder = _commandBuffer.BlitCommandEncoder(descriptor); + + CurrentEncoder = blitCommandEncoder; + CurrentEncoderType = EncoderType.Blit; + return blitCommandEncoder; + } + + private MTLComputeCommandEncoder BeginComputePass() + { + EndCurrentPass(); + + var computeCommandEncoder = _encoderFactory.CreateComputeCommandEncoder(); + + CurrentEncoder = computeCommandEncoder; + CurrentEncoderType = EncoderType.Compute; + return computeCommandEncoder; + } +} diff --git a/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs b/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs new file mode 100644 index 000000000..5e7576b37 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/CommandBufferPool.cs @@ -0,0 +1,289 @@ +using SharpMetal.Metal; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.Versioning; +using System.Threading; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class CommandBufferPool : IDisposable + { + public const int MaxCommandBuffers = 16; + + private readonly int _totalCommandBuffers; + private readonly int _totalCommandBuffersMask; + private readonly MTLCommandQueue _queue; + private readonly Thread _owner; + private IEncoderFactory _defaultEncoderFactory; + + public bool OwnedByCurrentThread => _owner == Thread.CurrentThread; + + [SupportedOSPlatform("macos")] + private struct ReservedCommandBuffer + { + public bool InUse; + public bool InConsumption; + public int SubmissionCount; + public MTLCommandBuffer CommandBuffer; + public CommandBufferEncoder Encoders; + public FenceHolder Fence; + + public List Dependants; + public List Waitables; + + public void Use(MTLCommandQueue queue, IEncoderFactory stateManager) + { + MTLCommandBufferDescriptor descriptor = new(); +#if DEBUG + descriptor.ErrorOptions = MTLCommandBufferErrorOption.EncoderExecutionStatus; +#endif + + CommandBuffer = queue.CommandBuffer(descriptor); + Fence = new FenceHolder(CommandBuffer); + + Encoders.Initialize(CommandBuffer, stateManager); + + InUse = true; + } + + public void Initialize() + { + Dependants = new List(); + Waitables = new List(); + Encoders = new CommandBufferEncoder(); + } + } + + private readonly ReservedCommandBuffer[] _commandBuffers; + + private readonly int[] _queuedIndexes; + private int _queuedIndexesPtr; + private int _queuedCount; + private int _inUseCount; + + public CommandBufferPool(MTLCommandQueue queue, bool isLight = false) + { + _queue = queue; + _owner = Thread.CurrentThread; + + _totalCommandBuffers = isLight ? 2 : MaxCommandBuffers; + _totalCommandBuffersMask = _totalCommandBuffers - 1; + + _commandBuffers = new ReservedCommandBuffer[_totalCommandBuffers]; + + _queuedIndexes = new int[_totalCommandBuffers]; + _queuedIndexesPtr = 0; + _queuedCount = 0; + } + + public void Initialize(IEncoderFactory encoderFactory) + { + _defaultEncoderFactory = encoderFactory; + + for (int i = 0; i < _totalCommandBuffers; i++) + { + _commandBuffers[i].Initialize(); + WaitAndDecrementRef(i); + } + } + + public void AddDependant(int cbIndex, IAuto dependant) + { + dependant.IncrementReferenceCount(); + _commandBuffers[cbIndex].Dependants.Add(dependant); + } + + public void AddWaitable(MultiFenceHolder waitable) + { + lock (_commandBuffers) + { + for (int i = 0; i < _totalCommandBuffers; i++) + { + ref var entry = ref _commandBuffers[i]; + + if (entry.InConsumption) + { + AddWaitable(i, waitable); + } + } + } + } + + public void AddInUseWaitable(MultiFenceHolder waitable) + { + lock (_commandBuffers) + { + for (int i = 0; i < _totalCommandBuffers; i++) + { + ref var entry = ref _commandBuffers[i]; + + if (entry.InUse) + { + AddWaitable(i, waitable); + } + } + } + } + + public void AddWaitable(int cbIndex, MultiFenceHolder waitable) + { + ref var entry = ref _commandBuffers[cbIndex]; + if (waitable.AddFence(cbIndex, entry.Fence)) + { + entry.Waitables.Add(waitable); + } + } + + public bool IsFenceOnRentedCommandBuffer(FenceHolder fence) + { + lock (_commandBuffers) + { + for (int i = 0; i < _totalCommandBuffers; i++) + { + ref var entry = ref _commandBuffers[i]; + + if (entry.InUse && entry.Fence == fence) + { + return true; + } + } + } + + return false; + } + + public FenceHolder GetFence(int cbIndex) + { + return _commandBuffers[cbIndex].Fence; + } + + public int GetSubmissionCount(int cbIndex) + { + return _commandBuffers[cbIndex].SubmissionCount; + } + + private int FreeConsumed(bool wait) + { + int freeEntry = 0; + + while (_queuedCount > 0) + { + int index = _queuedIndexes[_queuedIndexesPtr]; + + ref var entry = ref _commandBuffers[index]; + + if (wait || !entry.InConsumption || entry.Fence.IsSignaled()) + { + WaitAndDecrementRef(index); + + wait = false; + freeEntry = index; + + _queuedCount--; + _queuedIndexesPtr = (_queuedIndexesPtr + 1) % _totalCommandBuffers; + } + else + { + break; + } + } + + return freeEntry; + } + + public CommandBufferScoped ReturnAndRent(CommandBufferScoped cbs) + { + Return(cbs); + return Rent(); + } + + public CommandBufferScoped Rent() + { + lock (_commandBuffers) + { + int cursor = FreeConsumed(_inUseCount + _queuedCount == _totalCommandBuffers); + + for (int i = 0; i < _totalCommandBuffers; i++) + { + ref var entry = ref _commandBuffers[cursor]; + + if (!entry.InUse && !entry.InConsumption) + { + entry.Use(_queue, _defaultEncoderFactory); + + _inUseCount++; + + return new CommandBufferScoped(this, entry.CommandBuffer, entry.Encoders, cursor); + } + + cursor = (cursor + 1) & _totalCommandBuffersMask; + } + } + + throw new InvalidOperationException($"Out of command buffers (In use: {_inUseCount}, queued: {_queuedCount}, total: {_totalCommandBuffers})"); + } + + public void Return(CommandBufferScoped cbs) + { + // Ensure the encoder is committed. + cbs.Encoders.EndCurrentPass(); + + lock (_commandBuffers) + { + int cbIndex = cbs.CommandBufferIndex; + + ref var entry = ref _commandBuffers[cbIndex]; + + Debug.Assert(entry.InUse); + Debug.Assert(entry.CommandBuffer.NativePtr == cbs.CommandBuffer.NativePtr); + entry.InUse = false; + entry.InConsumption = true; + entry.SubmissionCount++; + _inUseCount--; + + var commandBuffer = entry.CommandBuffer; + commandBuffer.Commit(); + + int ptr = (_queuedIndexesPtr + _queuedCount) % _totalCommandBuffers; + _queuedIndexes[ptr] = cbIndex; + _queuedCount++; + } + } + + private void WaitAndDecrementRef(int cbIndex) + { + ref var entry = ref _commandBuffers[cbIndex]; + + if (entry.InConsumption) + { + entry.Fence.Wait(); + entry.InConsumption = false; + } + + foreach (var dependant in entry.Dependants) + { + dependant.DecrementReferenceCount(cbIndex); + } + + foreach (var waitable in entry.Waitables) + { + waitable.RemoveFence(cbIndex); + waitable.RemoveBufferUses(cbIndex); + } + + entry.Dependants.Clear(); + entry.Waitables.Clear(); + entry.Fence?.Dispose(); + } + + public void Dispose() + { + for (int i = 0; i < _totalCommandBuffers; i++) + { + WaitAndDecrementRef(i); + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/CommandBufferScoped.cs b/src/Ryujinx.Graphics.Metal/CommandBufferScoped.cs new file mode 100644 index 000000000..822f69b46 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/CommandBufferScoped.cs @@ -0,0 +1,43 @@ +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + readonly struct CommandBufferScoped : IDisposable + { + private readonly CommandBufferPool _pool; + public MTLCommandBuffer CommandBuffer { get; } + public CommandBufferEncoder Encoders { get; } + public int CommandBufferIndex { get; } + + public CommandBufferScoped(CommandBufferPool pool, MTLCommandBuffer commandBuffer, CommandBufferEncoder encoders, int commandBufferIndex) + { + _pool = pool; + CommandBuffer = commandBuffer; + Encoders = encoders; + CommandBufferIndex = commandBufferIndex; + } + + public void AddDependant(IAuto dependant) + { + _pool.AddDependant(CommandBufferIndex, dependant); + } + + public void AddWaitable(MultiFenceHolder waitable) + { + _pool.AddWaitable(CommandBufferIndex, waitable); + } + + public FenceHolder GetFence() + { + return _pool.GetFence(CommandBufferIndex); + } + + public void Dispose() + { + _pool?.Return(this); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/Constants.cs b/src/Ryujinx.Graphics.Metal/Constants.cs new file mode 100644 index 000000000..43baf722a --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Constants.cs @@ -0,0 +1,41 @@ +namespace Ryujinx.Graphics.Metal +{ + static class Constants + { + public const int MaxShaderStages = 5; + public const int MaxVertexBuffers = 16; + public const int MaxUniformBuffersPerStage = 18; + public const int MaxStorageBuffersPerStage = 16; + public const int MaxTexturesPerStage = 64; + public const int MaxImagesPerStage = 16; + + public const int MaxUniformBufferBindings = MaxUniformBuffersPerStage * MaxShaderStages; + public const int MaxStorageBufferBindings = MaxStorageBuffersPerStage * MaxShaderStages; + public const int MaxTextureBindings = MaxTexturesPerStage * MaxShaderStages; + public const int MaxImageBindings = MaxImagesPerStage * MaxShaderStages; + public const int MaxColorAttachments = 8; + public const int MaxViewports = 16; + // TODO: Check this value + public const int MaxVertexAttributes = 31; + + public const int MinResourceAlignment = 16; + + // Must match constants set in shader generation + public const uint ZeroBufferIndex = MaxVertexBuffers; + public const uint BaseSetIndex = MaxVertexBuffers + 1; + + public const uint ConstantBuffersIndex = BaseSetIndex; + public const uint StorageBuffersIndex = BaseSetIndex + 1; + public const uint TexturesIndex = BaseSetIndex + 2; + public const uint ImagesIndex = BaseSetIndex + 3; + + public const uint ConstantBuffersSetIndex = 0; + public const uint StorageBuffersSetIndex = 1; + public const uint TexturesSetIndex = 2; + public const uint ImagesSetIndex = 3; + + public const uint MaximumBufferArgumentTableEntries = 31; + + public const uint MaximumExtraSets = MaximumBufferArgumentTableEntries - ImagesIndex; + } +} diff --git a/src/Ryujinx.Graphics.Metal/CounterEvent.cs b/src/Ryujinx.Graphics.Metal/CounterEvent.cs new file mode 100644 index 000000000..46b04997e --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/CounterEvent.cs @@ -0,0 +1,22 @@ +using Ryujinx.Graphics.GAL; + +namespace Ryujinx.Graphics.Metal +{ + class CounterEvent : ICounterEvent + { + public CounterEvent() + { + Invalid = false; + } + + public bool Invalid { get; set; } + public bool ReserveForHostAccess() + { + return true; + } + + public void Flush() { } + + public void Dispose() { } + } +} diff --git a/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs b/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs new file mode 100644 index 000000000..bb6e4c180 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/DepthStencilCache.cs @@ -0,0 +1,68 @@ +using Ryujinx.Graphics.Metal.State; +using SharpMetal.Metal; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class DepthStencilCache : StateCache + { + private readonly MTLDevice _device; + + public DepthStencilCache(MTLDevice device) + { + _device = device; + } + + protected override DepthStencilUid GetHash(DepthStencilUid descriptor) + { + return descriptor; + } + + protected override MTLDepthStencilState CreateValue(DepthStencilUid descriptor) + { + // Create descriptors + + ref StencilUid frontUid = ref descriptor.FrontFace; + + using var frontFaceStencil = new MTLStencilDescriptor + { + StencilFailureOperation = frontUid.StencilFailureOperation, + DepthFailureOperation = frontUid.DepthFailureOperation, + DepthStencilPassOperation = frontUid.DepthStencilPassOperation, + StencilCompareFunction = frontUid.StencilCompareFunction, + ReadMask = frontUid.ReadMask, + WriteMask = frontUid.WriteMask + }; + + ref StencilUid backUid = ref descriptor.BackFace; + + using var backFaceStencil = new MTLStencilDescriptor + { + StencilFailureOperation = backUid.StencilFailureOperation, + DepthFailureOperation = backUid.DepthFailureOperation, + DepthStencilPassOperation = backUid.DepthStencilPassOperation, + StencilCompareFunction = backUid.StencilCompareFunction, + ReadMask = backUid.ReadMask, + WriteMask = backUid.WriteMask + }; + + var mtlDescriptor = new MTLDepthStencilDescriptor + { + DepthCompareFunction = descriptor.DepthCompareFunction, + DepthWriteEnabled = descriptor.DepthWriteEnabled + }; + + if (descriptor.StencilTestEnabled) + { + mtlDescriptor.BackFaceStencil = backFaceStencil; + mtlDescriptor.FrontFaceStencil = frontFaceStencil; + } + + using (mtlDescriptor) + { + return _device.NewDepthStencilState(mtlDescriptor); + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/DisposableBuffer.cs b/src/Ryujinx.Graphics.Metal/DisposableBuffer.cs new file mode 100644 index 000000000..a2d2247c4 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/DisposableBuffer.cs @@ -0,0 +1,26 @@ +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + readonly struct DisposableBuffer : IDisposable + { + public MTLBuffer Value { get; } + + public DisposableBuffer(MTLBuffer buffer) + { + Value = buffer; + } + + public void Dispose() + { + if (Value != IntPtr.Zero) + { + Value.SetPurgeableState(MTLPurgeableState.Empty); + Value.Dispose(); + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/DisposableSampler.cs b/src/Ryujinx.Graphics.Metal/DisposableSampler.cs new file mode 100644 index 000000000..ba041be89 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/DisposableSampler.cs @@ -0,0 +1,22 @@ +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + readonly struct DisposableSampler : IDisposable + { + public MTLSamplerState Value { get; } + + public DisposableSampler(MTLSamplerState sampler) + { + Value = sampler; + } + + public void Dispose() + { + Value.Dispose(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/Effects/IPostProcessingEffect.cs b/src/Ryujinx.Graphics.Metal/Effects/IPostProcessingEffect.cs new file mode 100644 index 000000000..d575d521f --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Effects/IPostProcessingEffect.cs @@ -0,0 +1,10 @@ +using System; + +namespace Ryujinx.Graphics.Metal.Effects +{ + internal interface IPostProcessingEffect : IDisposable + { + const int LocalGroupSize = 64; + Texture Run(Texture view, int width, int height); + } +} diff --git a/src/Ryujinx.Graphics.Metal/Effects/IScalingFilter.cs b/src/Ryujinx.Graphics.Metal/Effects/IScalingFilter.cs new file mode 100644 index 000000000..19f1a3c3d --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Effects/IScalingFilter.cs @@ -0,0 +1,18 @@ +using Ryujinx.Graphics.GAL; +using System; + +namespace Ryujinx.Graphics.Metal.Effects +{ + internal interface IScalingFilter : IDisposable + { + float Level { get; set; } + void Run( + Texture view, + Texture destinationTexture, + Format format, + int width, + int height, + Extents2D source, + Extents2D destination); + } +} diff --git a/src/Ryujinx.Graphics.Metal/EncoderResources.cs b/src/Ryujinx.Graphics.Metal/EncoderResources.cs new file mode 100644 index 000000000..562500d76 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/EncoderResources.cs @@ -0,0 +1,63 @@ +using SharpMetal.Metal; +using System.Collections.Generic; + +namespace Ryujinx.Graphics.Metal +{ + public struct RenderEncoderBindings + { + public List Resources = new(); + public List VertexBuffers = new(); + public List FragmentBuffers = new(); + + public RenderEncoderBindings() { } + + public readonly void Clear() + { + Resources.Clear(); + VertexBuffers.Clear(); + FragmentBuffers.Clear(); + } + } + + public struct ComputeEncoderBindings + { + public List Resources = new(); + public List Buffers = new(); + + public ComputeEncoderBindings() { } + + public readonly void Clear() + { + Resources.Clear(); + Buffers.Clear(); + } + } + + public struct BufferResource + { + public MTLBuffer Buffer; + public ulong Offset; + public ulong Binding; + + public BufferResource(MTLBuffer buffer, ulong offset, ulong binding) + { + Buffer = buffer; + Offset = offset; + Binding = binding; + } + } + + public struct Resource + { + public MTLResource MtlResource; + public MTLResourceUsage ResourceUsage; + public MTLRenderStages Stages; + + public Resource(MTLResource resource, MTLResourceUsage resourceUsage, MTLRenderStages stages) + { + MtlResource = resource; + ResourceUsage = resourceUsage; + Stages = stages; + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/EncoderState.cs b/src/Ryujinx.Graphics.Metal/EncoderState.cs new file mode 100644 index 000000000..34de168a6 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/EncoderState.cs @@ -0,0 +1,206 @@ +using Ryujinx.Common.Memory; +using Ryujinx.Graphics.GAL; +using Ryujinx.Graphics.Metal.State; +using Ryujinx.Graphics.Shader; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [Flags] + enum DirtyFlags + { + None = 0, + RenderPipeline = 1 << 0, + ComputePipeline = 1 << 1, + DepthStencil = 1 << 2, + DepthClamp = 1 << 3, + DepthBias = 1 << 4, + CullMode = 1 << 5, + FrontFace = 1 << 6, + StencilRef = 1 << 7, + Viewports = 1 << 8, + Scissors = 1 << 9, + Uniforms = 1 << 10, + Storages = 1 << 11, + Textures = 1 << 12, + Images = 1 << 13, + + ArgBuffers = Uniforms | Storages | Textures | Images, + + RenderAll = RenderPipeline | DepthStencil | DepthClamp | DepthBias | CullMode | FrontFace | StencilRef | Viewports | Scissors | ArgBuffers, + ComputeAll = ComputePipeline | ArgBuffers, + All = RenderAll | ComputeAll, + } + + record struct BufferRef + { + public Auto Buffer; + public BufferRange? Range; + + public BufferRef(Auto buffer) + { + Buffer = buffer; + } + + public BufferRef(Auto buffer, ref BufferRange range) + { + Buffer = buffer; + Range = range; + } + } + + record struct TextureRef + { + public ShaderStage Stage; + public TextureBase Storage; + public Auto Sampler; + public Format ImageFormat; + + public TextureRef(ShaderStage stage, TextureBase storage, Auto sampler) + { + Stage = stage; + Storage = storage; + Sampler = sampler; + } + } + + record struct ImageRef + { + public ShaderStage Stage; + public Texture Storage; + + public ImageRef(ShaderStage stage, Texture storage) + { + Stage = stage; + Storage = storage; + } + } + + struct PredrawState + { + public MTLCullMode CullMode; + public DepthStencilUid DepthStencilUid; + public PrimitiveTopology Topology; + public MTLViewport[] Viewports; + } + + struct RenderTargetCopy + { + public MTLScissorRect[] Scissors; + public Texture DepthStencil; + public Texture[] RenderTargets; + } + + [SupportedOSPlatform("macos")] + class EncoderState + { + public Program RenderProgram = null; + public Program ComputeProgram = null; + + public PipelineState Pipeline; + public DepthStencilUid DepthStencilUid; + + public readonly record struct ArrayRef(ShaderStage Stage, T Array); + + public readonly BufferRef[] UniformBufferRefs = new BufferRef[Constants.MaxUniformBufferBindings]; + public readonly BufferRef[] StorageBufferRefs = new BufferRef[Constants.MaxStorageBufferBindings]; + public readonly TextureRef[] TextureRefs = new TextureRef[Constants.MaxTextureBindings * 2]; + public readonly ImageRef[] ImageRefs = new ImageRef[Constants.MaxImageBindings * 2]; + + public ArrayRef[] TextureArrayRefs = []; + public ArrayRef[] ImageArrayRefs = []; + + public ArrayRef[] TextureArrayExtraRefs = []; + public ArrayRef[] ImageArrayExtraRefs = []; + + public IndexBufferState IndexBuffer = default; + + public MTLDepthClipMode DepthClipMode = MTLDepthClipMode.Clip; + + public float DepthBias; + public float SlopeScale; + public float Clamp; + + public int BackRefValue = 0; + public int FrontRefValue = 0; + + public PrimitiveTopology Topology = PrimitiveTopology.Triangles; + public MTLCullMode CullMode = MTLCullMode.None; + public MTLWinding Winding = MTLWinding.CounterClockwise; + public bool CullBoth = false; + + public MTLViewport[] Viewports = new MTLViewport[Constants.MaxViewports]; + public MTLScissorRect[] Scissors = new MTLScissorRect[Constants.MaxViewports]; + + // Changes to attachments take recreation! + public Texture DepthStencil; + public Texture[] RenderTargets = new Texture[Constants.MaxColorAttachments]; + public ITexture PreMaskDepthStencil = default; + public ITexture[] PreMaskRenderTargets; + public bool FramebufferUsingColorWriteMask; + + public Array8 StoredBlend; + public ColorF BlendColor = new(); + + public readonly VertexBufferState[] VertexBuffers = new VertexBufferState[Constants.MaxVertexBuffers]; + public readonly VertexAttribDescriptor[] VertexAttribs = new VertexAttribDescriptor[Constants.MaxVertexAttributes]; + // Dirty flags + public DirtyFlags Dirty = DirtyFlags.None; + + // Only to be used for present + public bool ClearLoadAction = false; + + public RenderEncoderBindings RenderEncoderBindings = new(); + public ComputeEncoderBindings ComputeEncoderBindings = new(); + + public EncoderState() + { + Pipeline.Initialize(); + DepthStencilUid.DepthCompareFunction = MTLCompareFunction.Always; + } + + public RenderTargetCopy InheritForClear(EncoderState other, bool depth, int singleIndex = -1) + { + // Inherit render target related information without causing a render encoder split. + + var oldState = new RenderTargetCopy + { + Scissors = other.Scissors, + RenderTargets = other.RenderTargets, + DepthStencil = other.DepthStencil + }; + + Scissors = other.Scissors; + RenderTargets = other.RenderTargets; + DepthStencil = other.DepthStencil; + + Pipeline.ColorBlendAttachmentStateCount = other.Pipeline.ColorBlendAttachmentStateCount; + Pipeline.Internal.ColorBlendState = other.Pipeline.Internal.ColorBlendState; + Pipeline.DepthStencilFormat = other.Pipeline.DepthStencilFormat; + + ref var blendStates = ref Pipeline.Internal.ColorBlendState; + + // Mask out irrelevant attachments. + for (int i = 0; i < blendStates.Length; i++) + { + if (depth || (singleIndex != -1 && singleIndex != i)) + { + blendStates[i].WriteMask = MTLColorWriteMask.None; + } + } + + return oldState; + } + + public void Restore(RenderTargetCopy copy) + { + Scissors = copy.Scissors; + RenderTargets = copy.RenderTargets; + DepthStencil = copy.DepthStencil; + + Pipeline.Internal.ResetColorState(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs b/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs new file mode 100644 index 000000000..0093ac148 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs @@ -0,0 +1,1788 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using Ryujinx.Graphics.Metal.State; +using Ryujinx.Graphics.Shader; +using SharpMetal.Metal; +using System; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; +using BufferAssignment = Ryujinx.Graphics.GAL.BufferAssignment; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + struct EncoderStateManager : IDisposable + { + private const int ArrayGrowthSize = 16; + + private readonly MTLDevice _device; + private readonly Pipeline _pipeline; + private readonly BufferManager _bufferManager; + + private readonly DepthStencilCache _depthStencilCache; + private readonly MTLDepthStencilState _defaultState; + + private readonly EncoderState _mainState = new(); + private EncoderState _currentState; + + public readonly IndexBufferState IndexBuffer => _currentState.IndexBuffer; + public readonly PrimitiveTopology Topology => _currentState.Topology; + public readonly Texture[] RenderTargets => _currentState.RenderTargets; + public readonly Texture DepthStencil => _currentState.DepthStencil; + public readonly ComputeSize ComputeLocalSize => _currentState.ComputeProgram.ComputeLocalSize; + + // RGBA32F is the biggest format + private const int ZeroBufferSize = 4 * 4; + private readonly BufferHandle _zeroBuffer; + + public unsafe EncoderStateManager(MTLDevice device, BufferManager bufferManager, Pipeline pipeline) + { + _device = device; + _pipeline = pipeline; + _bufferManager = bufferManager; + + _depthStencilCache = new(device); + _currentState = _mainState; + + _defaultState = _depthStencilCache.GetOrCreate(_currentState.DepthStencilUid); + + // Zero buffer + byte[] zeros = new byte[ZeroBufferSize]; + fixed (byte* ptr = zeros) + { + _zeroBuffer = _bufferManager.Create((IntPtr)ptr, ZeroBufferSize); + } + } + + public readonly void Dispose() + { + _depthStencilCache.Dispose(); + } + + private readonly void SignalDirty(DirtyFlags flags) + { + _currentState.Dirty |= flags; + } + + public readonly void SignalRenderDirty() + { + SignalDirty(DirtyFlags.RenderAll); + } + + public readonly void SignalComputeDirty() + { + SignalDirty(DirtyFlags.ComputeAll); + } + + public EncoderState SwapState(EncoderState state, DirtyFlags flags = DirtyFlags.All) + { + _currentState = state ?? _mainState; + + SignalDirty(flags); + + return _mainState; + } + + public PredrawState SavePredrawState() + { + return new PredrawState + { + CullMode = _currentState.CullMode, + DepthStencilUid = _currentState.DepthStencilUid, + Topology = _currentState.Topology, + Viewports = _currentState.Viewports.ToArray(), + }; + } + + public readonly void RestorePredrawState(PredrawState state) + { + _currentState.CullMode = state.CullMode; + _currentState.DepthStencilUid = state.DepthStencilUid; + _currentState.Topology = state.Topology; + _currentState.Viewports = state.Viewports; + + SignalDirty(DirtyFlags.CullMode | DirtyFlags.DepthStencil | DirtyFlags.Viewports); + } + + public readonly void SetClearLoadAction(bool clear) + { + _currentState.ClearLoadAction = clear; + } + + public readonly void DirtyTextures() + { + SignalDirty(DirtyFlags.Textures); + } + + public readonly void DirtyImages() + { + SignalDirty(DirtyFlags.Images); + } + + public readonly MTLRenderCommandEncoder CreateRenderCommandEncoder() + { + // Initialise Pass & State + using var renderPassDescriptor = new MTLRenderPassDescriptor(); + + for (int i = 0; i < Constants.MaxColorAttachments; i++) + { + if (_currentState.RenderTargets[i] is Texture tex) + { + var passAttachment = renderPassDescriptor.ColorAttachments.Object((ulong)i); + tex.PopulateRenderPassAttachment(passAttachment); + passAttachment.LoadAction = _currentState.ClearLoadAction ? MTLLoadAction.Clear : MTLLoadAction.Load; + passAttachment.StoreAction = MTLStoreAction.Store; + } + } + + var depthAttachment = renderPassDescriptor.DepthAttachment; + var stencilAttachment = renderPassDescriptor.StencilAttachment; + + if (_currentState.DepthStencil != null) + { + switch (_currentState.DepthStencil.GetHandle().PixelFormat) + { + // Depth Only Attachment + case MTLPixelFormat.Depth16Unorm: + case MTLPixelFormat.Depth32Float: + depthAttachment.Texture = _currentState.DepthStencil.GetHandle(); + depthAttachment.LoadAction = MTLLoadAction.Load; + depthAttachment.StoreAction = MTLStoreAction.Store; + break; + + // Stencil Only Attachment + case MTLPixelFormat.Stencil8: + stencilAttachment.Texture = _currentState.DepthStencil.GetHandle(); + stencilAttachment.LoadAction = MTLLoadAction.Load; + stencilAttachment.StoreAction = MTLStoreAction.Store; + break; + + // Combined Attachment + case MTLPixelFormat.Depth24UnormStencil8: + case MTLPixelFormat.Depth32FloatStencil8: + depthAttachment.Texture = _currentState.DepthStencil.GetHandle(); + depthAttachment.LoadAction = MTLLoadAction.Load; + depthAttachment.StoreAction = MTLStoreAction.Store; + + stencilAttachment.Texture = _currentState.DepthStencil.GetHandle(); + stencilAttachment.LoadAction = MTLLoadAction.Load; + stencilAttachment.StoreAction = MTLStoreAction.Store; + break; + default: + Logger.Error?.PrintMsg(LogClass.Gpu, $"Unsupported Depth/Stencil Format: {_currentState.DepthStencil.GetHandle().PixelFormat}!"); + break; + } + } + + // Initialise Encoder + var renderCommandEncoder = _pipeline.CommandBuffer.RenderCommandEncoder(renderPassDescriptor); + + return renderCommandEncoder; + } + + public readonly MTLComputeCommandEncoder CreateComputeCommandEncoder() + { + using var descriptor = new MTLComputePassDescriptor(); + var computeCommandEncoder = _pipeline.CommandBuffer.ComputeCommandEncoder(descriptor); + + return computeCommandEncoder; + } + + public readonly void RenderResourcesPrepass() + { + _currentState.RenderEncoderBindings.Clear(); + + if ((_currentState.Dirty & DirtyFlags.RenderPipeline) != 0) + { + SetVertexBuffers(_currentState.VertexBuffers, ref _currentState.RenderEncoderBindings); + } + + if ((_currentState.Dirty & DirtyFlags.Uniforms) != 0) + { + UpdateAndBind(_currentState.RenderProgram, Constants.ConstantBuffersSetIndex, ref _currentState.RenderEncoderBindings); + } + + if ((_currentState.Dirty & DirtyFlags.Storages) != 0) + { + UpdateAndBind(_currentState.RenderProgram, Constants.StorageBuffersSetIndex, ref _currentState.RenderEncoderBindings); + } + + if ((_currentState.Dirty & DirtyFlags.Textures) != 0) + { + UpdateAndBind(_currentState.RenderProgram, Constants.TexturesSetIndex, ref _currentState.RenderEncoderBindings); + } + + if ((_currentState.Dirty & DirtyFlags.Images) != 0) + { + UpdateAndBind(_currentState.RenderProgram, Constants.ImagesSetIndex, ref _currentState.RenderEncoderBindings); + } + } + + public readonly void ComputeResourcesPrepass() + { + _currentState.ComputeEncoderBindings.Clear(); + + if ((_currentState.Dirty & DirtyFlags.Uniforms) != 0) + { + UpdateAndBind(_currentState.ComputeProgram, Constants.ConstantBuffersSetIndex, ref _currentState.ComputeEncoderBindings); + } + + if ((_currentState.Dirty & DirtyFlags.Storages) != 0) + { + UpdateAndBind(_currentState.ComputeProgram, Constants.StorageBuffersSetIndex, ref _currentState.ComputeEncoderBindings); + } + + if ((_currentState.Dirty & DirtyFlags.Textures) != 0) + { + UpdateAndBind(_currentState.ComputeProgram, Constants.TexturesSetIndex, ref _currentState.ComputeEncoderBindings); + } + + if ((_currentState.Dirty & DirtyFlags.Images) != 0) + { + UpdateAndBind(_currentState.ComputeProgram, Constants.ImagesSetIndex, ref _currentState.ComputeEncoderBindings); + } + } + + public void RebindRenderState(MTLRenderCommandEncoder renderCommandEncoder) + { + if ((_currentState.Dirty & DirtyFlags.RenderPipeline) != 0) + { + SetRenderPipelineState(renderCommandEncoder); + } + + if ((_currentState.Dirty & DirtyFlags.DepthStencil) != 0) + { + SetDepthStencilState(renderCommandEncoder); + } + + if ((_currentState.Dirty & DirtyFlags.DepthClamp) != 0) + { + SetDepthClamp(renderCommandEncoder); + } + + if ((_currentState.Dirty & DirtyFlags.DepthBias) != 0) + { + SetDepthBias(renderCommandEncoder); + } + + if ((_currentState.Dirty & DirtyFlags.CullMode) != 0) + { + SetCullMode(renderCommandEncoder); + } + + if ((_currentState.Dirty & DirtyFlags.FrontFace) != 0) + { + SetFrontFace(renderCommandEncoder); + } + + if ((_currentState.Dirty & DirtyFlags.StencilRef) != 0) + { + SetStencilRefValue(renderCommandEncoder); + } + + if ((_currentState.Dirty & DirtyFlags.Viewports) != 0) + { + SetViewports(renderCommandEncoder); + } + + if ((_currentState.Dirty & DirtyFlags.Scissors) != 0) + { + SetScissors(renderCommandEncoder); + } + + foreach (var resource in _currentState.RenderEncoderBindings.Resources) + { + renderCommandEncoder.UseResource(resource.MtlResource, resource.ResourceUsage, resource.Stages); + } + + foreach (var buffer in _currentState.RenderEncoderBindings.VertexBuffers) + { + renderCommandEncoder.SetVertexBuffer(buffer.Buffer, buffer.Offset, buffer.Binding); + } + + foreach (var buffer in _currentState.RenderEncoderBindings.FragmentBuffers) + { + renderCommandEncoder.SetFragmentBuffer(buffer.Buffer, buffer.Offset, buffer.Binding); + } + + _currentState.Dirty &= ~DirtyFlags.RenderAll; + } + + public readonly void RebindComputeState(MTLComputeCommandEncoder computeCommandEncoder) + { + if ((_currentState.Dirty & DirtyFlags.ComputePipeline) != 0) + { + SetComputePipelineState(computeCommandEncoder); + } + + foreach (var resource in _currentState.ComputeEncoderBindings.Resources) + { + computeCommandEncoder.UseResource(resource.MtlResource, resource.ResourceUsage); + } + + foreach (var buffer in _currentState.ComputeEncoderBindings.Buffers) + { + computeCommandEncoder.SetBuffer(buffer.Buffer, buffer.Offset, buffer.Binding); + } + + _currentState.Dirty &= ~DirtyFlags.ComputeAll; + } + + private readonly void SetRenderPipelineState(MTLRenderCommandEncoder renderCommandEncoder) + { + MTLRenderPipelineState pipelineState = _currentState.Pipeline.CreateRenderPipeline(_device, _currentState.RenderProgram); + + renderCommandEncoder.SetRenderPipelineState(pipelineState); + + renderCommandEncoder.SetBlendColor( + _currentState.BlendColor.Red, + _currentState.BlendColor.Green, + _currentState.BlendColor.Blue, + _currentState.BlendColor.Alpha); + } + + private readonly void SetComputePipelineState(MTLComputeCommandEncoder computeCommandEncoder) + { + if (_currentState.ComputeProgram == null) + { + return; + } + + var pipelineState = PipelineState.CreateComputePipeline(_device, _currentState.ComputeProgram); + + computeCommandEncoder.SetComputePipelineState(pipelineState); + } + + public readonly void UpdateIndexBuffer(BufferRange buffer, IndexType type) + { + if (buffer.Handle != BufferHandle.Null) + { + _currentState.IndexBuffer = new IndexBufferState(buffer.Handle, buffer.Offset, buffer.Size, type); + } + else + { + _currentState.IndexBuffer = IndexBufferState.Null; + } + } + + public readonly void UpdatePrimitiveTopology(PrimitiveTopology topology) + { + _currentState.Topology = topology; + } + + public readonly void UpdateProgram(IProgram program) + { + Program prg = (Program)program; + + if (prg.VertexFunction == IntPtr.Zero && prg.ComputeFunction == IntPtr.Zero) + { + if (prg.FragmentFunction == IntPtr.Zero) + { + Logger.Error?.PrintMsg(LogClass.Gpu, "No compute function"); + } + else + { + Logger.Error?.PrintMsg(LogClass.Gpu, "No vertex function"); + } + return; + } + + if (prg.VertexFunction != IntPtr.Zero) + { + _currentState.RenderProgram = prg; + + SignalDirty(DirtyFlags.RenderPipeline | DirtyFlags.ArgBuffers); + } + else if (prg.ComputeFunction != IntPtr.Zero) + { + _currentState.ComputeProgram = prg; + + SignalDirty(DirtyFlags.ComputePipeline | DirtyFlags.ArgBuffers); + } + } + + public readonly void UpdateRasterizerDiscard(bool discard) + { + _currentState.Pipeline.RasterizerDiscardEnable = discard; + + SignalDirty(DirtyFlags.RenderPipeline); + } + + public readonly void UpdateRenderTargets(ITexture[] colors, ITexture depthStencil) + { + _currentState.FramebufferUsingColorWriteMask = false; + UpdateRenderTargetsInternal(colors, depthStencil); + } + + public readonly void UpdateRenderTargetColorMasks(ReadOnlySpan componentMask) + { + ref var blendState = ref _currentState.Pipeline.Internal.ColorBlendState; + + for (int i = 0; i < componentMask.Length; i++) + { + bool red = (componentMask[i] & (0x1 << 0)) != 0; + bool green = (componentMask[i] & (0x1 << 1)) != 0; + bool blue = (componentMask[i] & (0x1 << 2)) != 0; + bool alpha = (componentMask[i] & (0x1 << 3)) != 0; + + var mask = MTLColorWriteMask.None; + + mask |= red ? MTLColorWriteMask.Red : 0; + mask |= green ? MTLColorWriteMask.Green : 0; + mask |= blue ? MTLColorWriteMask.Blue : 0; + mask |= alpha ? MTLColorWriteMask.Alpha : 0; + + ref ColorBlendStateUid mtlBlend = ref blendState[i]; + + // When color write mask is 0, remove all blend state to help the pipeline cache. + // Restore it when the mask becomes non-zero. + if (mtlBlend.WriteMask != mask) + { + if (mask == 0) + { + _currentState.StoredBlend[i] = mtlBlend; + + mtlBlend.Swap(new ColorBlendStateUid()); + } + else if (mtlBlend.WriteMask == 0) + { + mtlBlend.Swap(_currentState.StoredBlend[i]); + } + } + + blendState[i].WriteMask = mask; + } + + if (_currentState.FramebufferUsingColorWriteMask) + { + UpdateRenderTargetsInternal(_currentState.PreMaskRenderTargets, _currentState.PreMaskDepthStencil); + } + else + { + // Requires recreating pipeline + if (_pipeline.CurrentEncoderType == EncoderType.Render) + { + _pipeline.EndCurrentPass(); + } + } + } + + private readonly void UpdateRenderTargetsInternal(ITexture[] colors, ITexture depthStencil) + { + // TBDR GPUs don't work properly if the same attachment is bound to multiple targets, + // due to each attachment being a copy of the real attachment, rather than a direct write. + // + // Just try to remove duplicate attachments. + // Save a copy of the array to rebind when mask changes. + + // Look for textures that are masked out. + + ref PipelineState pipeline = ref _currentState.Pipeline; + ref var blendState = ref pipeline.Internal.ColorBlendState; + + pipeline.ColorBlendAttachmentStateCount = (uint)colors.Length; + + for (int i = 0; i < colors.Length; i++) + { + if (colors[i] == null) + { + continue; + } + + var mtlMask = blendState[i].WriteMask; + + for (int j = 0; j < i; j++) + { + // Check each binding for a duplicate binding before it. + + if (colors[i] == colors[j]) + { + // Prefer the binding with no write mask. + + var mtlMask2 = blendState[j].WriteMask; + + if (mtlMask == 0) + { + colors[i] = null; + MaskOut(colors, depthStencil); + } + else if (mtlMask2 == 0) + { + colors[j] = null; + MaskOut(colors, depthStencil); + } + } + } + } + + _currentState.RenderTargets = new Texture[Constants.MaxColorAttachments]; + + for (int i = 0; i < colors.Length; i++) + { + if (colors[i] is not Texture tex) + { + blendState[i].PixelFormat = MTLPixelFormat.Invalid; + + continue; + } + + blendState[i].PixelFormat = tex.GetHandle().PixelFormat; // TODO: cache this + _currentState.RenderTargets[i] = tex; + } + + if (depthStencil is Texture depthTexture) + { + pipeline.DepthStencilFormat = depthTexture.GetHandle().PixelFormat; // TODO: cache this + _currentState.DepthStencil = depthTexture; + } + else if (depthStencil == null) + { + pipeline.DepthStencilFormat = MTLPixelFormat.Invalid; + _currentState.DepthStencil = null; + } + + // Requires recreating pipeline + if (_pipeline.CurrentEncoderType == EncoderType.Render) + { + _pipeline.EndCurrentPass(); + } + } + + private readonly void MaskOut(ITexture[] colors, ITexture depthStencil) + { + if (!_currentState.FramebufferUsingColorWriteMask) + { + _currentState.PreMaskRenderTargets = colors; + _currentState.PreMaskDepthStencil = depthStencil; + } + + // If true, then the framebuffer must be recreated when the mask changes. + _currentState.FramebufferUsingColorWriteMask = true; + } + + public readonly void UpdateVertexAttribs(ReadOnlySpan vertexAttribs) + { + vertexAttribs.CopyTo(_currentState.VertexAttribs); + + // Update the buffers on the pipeline + UpdatePipelineVertexState(_currentState.VertexBuffers, _currentState.VertexAttribs); + + SignalDirty(DirtyFlags.RenderPipeline); + } + + public readonly void UpdateBlendDescriptors(int index, BlendDescriptor blend) + { + ref var blendState = ref _currentState.Pipeline.Internal.ColorBlendState[index]; + + blendState.Enable = blend.Enable; + blendState.AlphaBlendOperation = blend.AlphaOp.Convert(); + blendState.RgbBlendOperation = blend.ColorOp.Convert(); + blendState.SourceAlphaBlendFactor = blend.AlphaSrcFactor.Convert(); + blendState.DestinationAlphaBlendFactor = blend.AlphaDstFactor.Convert(); + blendState.SourceRGBBlendFactor = blend.ColorSrcFactor.Convert(); + blendState.DestinationRGBBlendFactor = blend.ColorDstFactor.Convert(); + + if (blendState.WriteMask == 0) + { + _currentState.StoredBlend[index] = blendState; + + blendState.Swap(new ColorBlendStateUid()); + } + + _currentState.BlendColor = blend.BlendConstant; + + SignalDirty(DirtyFlags.RenderPipeline); + } + + public void UpdateStencilState(StencilTestDescriptor stencilTest) + { + ref DepthStencilUid uid = ref _currentState.DepthStencilUid; + + uid.FrontFace = new StencilUid + { + StencilFailureOperation = stencilTest.FrontSFail.Convert(), + DepthFailureOperation = stencilTest.FrontDpFail.Convert(), + DepthStencilPassOperation = stencilTest.FrontDpPass.Convert(), + StencilCompareFunction = stencilTest.FrontFunc.Convert(), + ReadMask = (uint)stencilTest.FrontFuncMask, + WriteMask = (uint)stencilTest.FrontMask + }; + + uid.BackFace = new StencilUid + { + StencilFailureOperation = stencilTest.BackSFail.Convert(), + DepthFailureOperation = stencilTest.BackDpFail.Convert(), + DepthStencilPassOperation = stencilTest.BackDpPass.Convert(), + StencilCompareFunction = stencilTest.BackFunc.Convert(), + ReadMask = (uint)stencilTest.BackFuncMask, + WriteMask = (uint)stencilTest.BackMask + }; + + uid.StencilTestEnabled = stencilTest.TestEnable; + + UpdateStencilRefValue(stencilTest.FrontFuncRef, stencilTest.BackFuncRef); + + SignalDirty(DirtyFlags.DepthStencil); + } + + public readonly void UpdateDepthState(DepthTestDescriptor depthTest) + { + ref DepthStencilUid uid = ref _currentState.DepthStencilUid; + + uid.DepthCompareFunction = depthTest.TestEnable ? depthTest.Func.Convert() : MTLCompareFunction.Always; + uid.DepthWriteEnabled = depthTest.TestEnable && depthTest.WriteEnable; + + SignalDirty(DirtyFlags.DepthStencil); + } + + public readonly void UpdateDepthClamp(bool clamp) + { + _currentState.DepthClipMode = clamp ? MTLDepthClipMode.Clamp : MTLDepthClipMode.Clip; + + // Inline update + if (_pipeline.Encoders.TryGetRenderEncoder(out MTLRenderCommandEncoder renderCommandEncoder)) + { + SetDepthClamp(renderCommandEncoder); + return; + } + + SignalDirty(DirtyFlags.DepthClamp); + } + + public readonly void UpdateDepthBias(float depthBias, float slopeScale, float clamp) + { + _currentState.DepthBias = depthBias; + _currentState.SlopeScale = slopeScale; + _currentState.Clamp = clamp; + + // Inline update + if (_pipeline.Encoders.TryGetRenderEncoder(out MTLRenderCommandEncoder renderCommandEncoder)) + { + SetDepthBias(renderCommandEncoder); + return; + } + + SignalDirty(DirtyFlags.DepthBias); + } + + public readonly void UpdateLogicOpState(bool enable, LogicalOp op) + { + _currentState.Pipeline.LogicOpEnable = enable; + _currentState.Pipeline.LogicOp = op.Convert(); + + SignalDirty(DirtyFlags.RenderPipeline); + } + + public readonly void UpdateMultisampleState(MultisampleDescriptor multisample) + { + _currentState.Pipeline.AlphaToCoverageEnable = multisample.AlphaToCoverageEnable; + _currentState.Pipeline.AlphaToOneEnable = multisample.AlphaToOneEnable; + + SignalDirty(DirtyFlags.RenderPipeline); + } + + public void UpdateScissors(ReadOnlySpan> regions) + { + for (int i = 0; i < regions.Length; i++) + { + var region = regions[i]; + + _currentState.Scissors[i] = new MTLScissorRect + { + height = (ulong)region.Height, + width = (ulong)region.Width, + x = (ulong)region.X, + y = (ulong)region.Y + }; + } + + // Inline update + if (_pipeline.Encoders.TryGetRenderEncoder(out MTLRenderCommandEncoder renderCommandEncoder)) + { + SetScissors(renderCommandEncoder); + return; + } + + SignalDirty(DirtyFlags.Scissors); + } + + public void UpdateViewports(ReadOnlySpan viewports) + { + static float Clamp(float value) + { + return Math.Clamp(value, 0f, 1f); + } + + for (int i = 0; i < viewports.Length; i++) + { + var viewport = viewports[i]; + // Y coordinate is inverted + _currentState.Viewports[i] = new MTLViewport + { + originX = viewport.Region.X, + originY = viewport.Region.Y + viewport.Region.Height, + width = viewport.Region.Width, + height = -viewport.Region.Height, + znear = Clamp(viewport.DepthNear), + zfar = Clamp(viewport.DepthFar) + }; + } + + // Inline update + if (_pipeline.Encoders.TryGetRenderEncoder(out MTLRenderCommandEncoder renderCommandEncoder)) + { + SetViewports(renderCommandEncoder); + return; + } + + SignalDirty(DirtyFlags.Viewports); + } + + public readonly void UpdateVertexBuffers(ReadOnlySpan vertexBuffers) + { + for (int i = 0; i < Constants.MaxVertexBuffers; i++) + { + if (i < vertexBuffers.Length) + { + var vertexBuffer = vertexBuffers[i]; + + _currentState.VertexBuffers[i] = new VertexBufferState( + vertexBuffer.Buffer.Handle, + vertexBuffer.Buffer.Offset, + vertexBuffer.Buffer.Size, + vertexBuffer.Divisor, + vertexBuffer.Stride); + } + else + { + _currentState.VertexBuffers[i] = VertexBufferState.Null; + } + } + + // Update the buffers on the pipeline + UpdatePipelineVertexState(_currentState.VertexBuffers, _currentState.VertexAttribs); + + SignalDirty(DirtyFlags.RenderPipeline); + } + + public readonly void UpdateUniformBuffers(ReadOnlySpan buffers) + { + foreach (BufferAssignment assignment in buffers) + { + var buffer = assignment.Range; + int index = assignment.Binding; + + Auto mtlBuffer = buffer.Handle == BufferHandle.Null + ? null + : _bufferManager.GetBuffer(buffer.Handle, buffer.Write); + + _currentState.UniformBufferRefs[index] = new BufferRef(mtlBuffer, ref buffer); + } + + SignalDirty(DirtyFlags.Uniforms); + } + + public readonly void UpdateStorageBuffers(ReadOnlySpan buffers) + { + foreach (BufferAssignment assignment in buffers) + { + var buffer = assignment.Range; + int index = assignment.Binding; + + Auto mtlBuffer = buffer.Handle == BufferHandle.Null + ? null + : _bufferManager.GetBuffer(buffer.Handle, buffer.Write); + + _currentState.StorageBufferRefs[index] = new BufferRef(mtlBuffer, ref buffer); + } + + SignalDirty(DirtyFlags.Storages); + } + + public readonly void UpdateStorageBuffers(int first, ReadOnlySpan> buffers) + { + for (int i = 0; i < buffers.Length; i++) + { + var mtlBuffer = buffers[i]; + int index = first + i; + + _currentState.StorageBufferRefs[index] = new BufferRef(mtlBuffer); + } + + SignalDirty(DirtyFlags.Storages); + } + + public void UpdateCullMode(bool enable, Face face) + { + var dirtyScissor = (face == Face.FrontAndBack) != _currentState.CullBoth; + + _currentState.CullMode = enable ? face.Convert() : MTLCullMode.None; + _currentState.CullBoth = face == Face.FrontAndBack; + + // Inline update + if (_pipeline.Encoders.TryGetRenderEncoder(out MTLRenderCommandEncoder renderCommandEncoder)) + { + SetCullMode(renderCommandEncoder); + SetScissors(renderCommandEncoder); + return; + } + + // Mark dirty + SignalDirty(DirtyFlags.CullMode); + + if (dirtyScissor) + { + SignalDirty(DirtyFlags.Scissors); + } + } + + public readonly void UpdateFrontFace(FrontFace frontFace) + { + _currentState.Winding = frontFace.Convert(); + + // Inline update + if (_pipeline.Encoders.TryGetRenderEncoder(out MTLRenderCommandEncoder renderCommandEncoder)) + { + SetFrontFace(renderCommandEncoder); + return; + } + + SignalDirty(DirtyFlags.FrontFace); + } + + private readonly void UpdateStencilRefValue(int frontRef, int backRef) + { + _currentState.FrontRefValue = frontRef; + _currentState.BackRefValue = backRef; + + // Inline update + if (_pipeline.Encoders.TryGetRenderEncoder(out MTLRenderCommandEncoder renderCommandEncoder)) + { + SetStencilRefValue(renderCommandEncoder); + } + + SignalDirty(DirtyFlags.StencilRef); + } + + public readonly void UpdateTextureAndSampler(ShaderStage stage, int binding, TextureBase texture, SamplerHolder samplerHolder) + { + if (texture != null) + { + _currentState.TextureRefs[binding] = new(stage, texture, samplerHolder?.GetSampler()); + } + else + { + _currentState.TextureRefs[binding] = default; + } + + SignalDirty(DirtyFlags.Textures); + } + + public readonly void UpdateImage(ShaderStage stage, int binding, TextureBase image) + { + if (image is Texture view) + { + _currentState.ImageRefs[binding] = new(stage, view); + } + else + { + _currentState.ImageRefs[binding] = default; + } + + SignalDirty(DirtyFlags.Images); + } + + public readonly void UpdateTextureArray(ShaderStage stage, int binding, TextureArray array) + { + ref EncoderState.ArrayRef arrayRef = ref GetArrayRef(ref _currentState.TextureArrayRefs, binding, ArrayGrowthSize); + + if (arrayRef.Stage != stage || arrayRef.Array != array) + { + arrayRef = new EncoderState.ArrayRef(stage, array); + + SignalDirty(DirtyFlags.Textures); + } + } + + public readonly void UpdateTextureArraySeparate(ShaderStage stage, int setIndex, TextureArray array) + { + ref EncoderState.ArrayRef arrayRef = ref GetArrayRef(ref _currentState.TextureArrayExtraRefs, setIndex - MetalRenderer.TotalSets); + + if (arrayRef.Stage != stage || arrayRef.Array != array) + { + arrayRef = new EncoderState.ArrayRef(stage, array); + + SignalDirty(DirtyFlags.Textures); + } + } + + public readonly void UpdateImageArray(ShaderStage stage, int binding, ImageArray array) + { + ref EncoderState.ArrayRef arrayRef = ref GetArrayRef(ref _currentState.ImageArrayRefs, binding, ArrayGrowthSize); + + if (arrayRef.Stage != stage || arrayRef.Array != array) + { + arrayRef = new EncoderState.ArrayRef(stage, array); + + SignalDirty(DirtyFlags.Images); + } + } + + public readonly void UpdateImageArraySeparate(ShaderStage stage, int setIndex, ImageArray array) + { + ref EncoderState.ArrayRef arrayRef = ref GetArrayRef(ref _currentState.ImageArrayExtraRefs, setIndex - MetalRenderer.TotalSets); + + if (arrayRef.Stage != stage || arrayRef.Array != array) + { + arrayRef = new EncoderState.ArrayRef(stage, array); + + SignalDirty(DirtyFlags.Images); + } + } + + private static ref EncoderState.ArrayRef GetArrayRef(ref EncoderState.ArrayRef[] array, int index, int growthSize = 1) + { + ArgumentOutOfRangeException.ThrowIfNegative(index); + + if (array.Length <= index) + { + Array.Resize(ref array, index + growthSize); + } + + return ref array[index]; + } + + private readonly void SetDepthStencilState(MTLRenderCommandEncoder renderCommandEncoder) + { + if (DepthStencil != null) + { + MTLDepthStencilState state = _depthStencilCache.GetOrCreate(_currentState.DepthStencilUid); + + renderCommandEncoder.SetDepthStencilState(state); + } + else + { + renderCommandEncoder.SetDepthStencilState(_defaultState); + } + } + + private readonly void SetDepthClamp(MTLRenderCommandEncoder renderCommandEncoder) + { + renderCommandEncoder.SetDepthClipMode(_currentState.DepthClipMode); + } + + private readonly void SetDepthBias(MTLRenderCommandEncoder renderCommandEncoder) + { + renderCommandEncoder.SetDepthBias(_currentState.DepthBias, _currentState.SlopeScale, _currentState.Clamp); + } + + private unsafe void SetScissors(MTLRenderCommandEncoder renderCommandEncoder) + { + var isTriangles = (_currentState.Topology == PrimitiveTopology.Triangles) || + (_currentState.Topology == PrimitiveTopology.TriangleStrip); + + if (_currentState.CullBoth && isTriangles) + { + renderCommandEncoder.SetScissorRect(new MTLScissorRect { x = 0, y = 0, width = 0, height = 0 }); + } + else + { + if (_currentState.Scissors.Length > 0) + { + fixed (MTLScissorRect* pMtlScissors = _currentState.Scissors) + { + renderCommandEncoder.SetScissorRects((IntPtr)pMtlScissors, (ulong)_currentState.Scissors.Length); + } + } + } + } + + private readonly unsafe void SetViewports(MTLRenderCommandEncoder renderCommandEncoder) + { + if (_currentState.Viewports.Length > 0) + { + fixed (MTLViewport* pMtlViewports = _currentState.Viewports) + { + renderCommandEncoder.SetViewports((IntPtr)pMtlViewports, (ulong)_currentState.Viewports.Length); + } + } + } + + private readonly void UpdatePipelineVertexState(VertexBufferState[] bufferDescriptors, VertexAttribDescriptor[] attribDescriptors) + { + ref PipelineState pipeline = ref _currentState.Pipeline; + uint indexMask = 0; + + for (int i = 0; i < attribDescriptors.Length; i++) + { + ref var attrib = ref pipeline.Internal.VertexAttributes[i]; + + if (attribDescriptors[i].IsZero) + { + attrib.Format = attribDescriptors[i].Format.Convert(); + indexMask |= 1u << (int)Constants.ZeroBufferIndex; + attrib.BufferIndex = Constants.ZeroBufferIndex; + attrib.Offset = 0; + } + else + { + attrib.Format = attribDescriptors[i].Format.Convert(); + indexMask |= 1u << attribDescriptors[i].BufferIndex; + attrib.BufferIndex = (ulong)attribDescriptors[i].BufferIndex; + attrib.Offset = (ulong)attribDescriptors[i].Offset; + } + } + + for (int i = 0; i < bufferDescriptors.Length; i++) + { + ref var layout = ref pipeline.Internal.VertexBindings[i]; + + if ((indexMask & (1u << i)) != 0) + { + layout.Stride = (uint)bufferDescriptors[i].Stride; + + if (layout.Stride == 0) + { + layout.Stride = 1; + layout.StepFunction = MTLVertexStepFunction.Constant; + layout.StepRate = 0; + } + else + { + if (bufferDescriptors[i].Divisor > 0) + { + layout.StepFunction = MTLVertexStepFunction.PerInstance; + layout.StepRate = (uint)bufferDescriptors[i].Divisor; + } + else + { + layout.StepFunction = MTLVertexStepFunction.PerVertex; + layout.StepRate = 1; + } + } + } + else + { + layout = new(); + } + } + + ref var zeroBufLayout = ref pipeline.Internal.VertexBindings[(int)Constants.ZeroBufferIndex]; + + // Zero buffer + if ((indexMask & (1u << (int)Constants.ZeroBufferIndex)) != 0) + { + zeroBufLayout.Stride = 1; + zeroBufLayout.StepFunction = MTLVertexStepFunction.Constant; + zeroBufLayout.StepRate = 0; + } + else + { + zeroBufLayout = new(); + } + + pipeline.VertexAttributeDescriptionsCount = (uint)attribDescriptors.Length; + pipeline.VertexBindingDescriptionsCount = Constants.ZeroBufferIndex + 1; // TODO: move this out? + } + + private readonly void SetVertexBuffers(VertexBufferState[] bufferStates, ref readonly RenderEncoderBindings bindings) + { + for (int i = 0; i < bufferStates.Length; i++) + { + (MTLBuffer mtlBuffer, int offset) = bufferStates[i].GetVertexBuffer(_bufferManager, _pipeline.Cbs); + + if (mtlBuffer.NativePtr != IntPtr.Zero) + { + bindings.VertexBuffers.Add(new BufferResource(mtlBuffer, (ulong)offset, (ulong)i)); + } + } + + Auto autoZeroBuffer = _zeroBuffer == BufferHandle.Null + ? null + : _bufferManager.GetBuffer(_zeroBuffer, false); + + if (autoZeroBuffer == null) + { + return; + } + + var zeroMtlBuffer = autoZeroBuffer.Get(_pipeline.Cbs).Value; + bindings.VertexBuffers.Add(new BufferResource(zeroMtlBuffer, 0, Constants.ZeroBufferIndex)); + } + + private readonly (ulong gpuAddress, IntPtr nativePtr) AddressForBuffer(ref BufferRef buffer) + { + ulong gpuAddress = 0; + IntPtr nativePtr = IntPtr.Zero; + + var range = buffer.Range; + var autoBuffer = buffer.Buffer; + + if (autoBuffer != null) + { + var offset = 0; + MTLBuffer mtlBuffer; + + if (range.HasValue) + { + offset = range.Value.Offset; + mtlBuffer = autoBuffer.Get(_pipeline.Cbs, offset, range.Value.Size, range.Value.Write).Value; + } + else + { + mtlBuffer = autoBuffer.Get(_pipeline.Cbs).Value; + } + + gpuAddress = mtlBuffer.GpuAddress + (ulong)offset; + nativePtr = mtlBuffer.NativePtr; + } + + return (gpuAddress, nativePtr); + } + + private readonly (ulong gpuAddress, IntPtr nativePtr) AddressForTexture(ref TextureRef texture) + { + var storage = texture.Storage; + + ulong gpuAddress = 0; + IntPtr nativePtr = IntPtr.Zero; + + if (storage != null) + { + if (storage is TextureBuffer textureBuffer) + { + textureBuffer.RebuildStorage(false); + } + + var mtlTexture = storage.GetHandle(); + + gpuAddress = mtlTexture.GpuResourceID._impl; + nativePtr = mtlTexture.NativePtr; + } + + return (gpuAddress, nativePtr); + } + + private readonly (ulong gpuAddress, IntPtr nativePtr) AddressForImage(ref ImageRef image) + { + var storage = image.Storage; + + ulong gpuAddress = 0; + IntPtr nativePtr = IntPtr.Zero; + + if (storage != null) + { + var mtlTexture = storage.GetHandle(); + + gpuAddress = mtlTexture.GpuResourceID._impl; + nativePtr = mtlTexture.NativePtr; + } + + return (gpuAddress, nativePtr); + } + + private readonly (ulong gpuAddress, IntPtr nativePtr) AddressForTextureBuffer(ref TextureBuffer bufferTexture) + { + ulong gpuAddress = 0; + IntPtr nativePtr = IntPtr.Zero; + + if (bufferTexture != null) + { + bufferTexture.RebuildStorage(false); + + var mtlTexture = bufferTexture.GetHandle(); + + gpuAddress = mtlTexture.GpuResourceID._impl; + nativePtr = mtlTexture.NativePtr; + } + + return (gpuAddress, nativePtr); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void AddResource(IntPtr resourcePointer, MTLResourceUsage usage, MTLRenderStages stages, ref readonly RenderEncoderBindings bindings) + { + if (resourcePointer != IntPtr.Zero) + { + bindings.Resources.Add(new Resource(new MTLResource(resourcePointer), usage, stages)); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void AddResource(IntPtr resourcePointer, MTLResourceUsage usage, ref readonly ComputeEncoderBindings bindings) + { + if (resourcePointer != IntPtr.Zero) + { + bindings.Resources.Add(new Resource(new MTLResource(resourcePointer), usage, 0)); + } + } + + private readonly void UpdateAndBind(Program program, uint setIndex, ref readonly RenderEncoderBindings bindings) + { + var bindingSegments = program.BindingSegments[setIndex]; + + if (bindingSegments.Length == 0) + { + return; + } + + ScopedTemporaryBuffer vertArgBuffer = default; + ScopedTemporaryBuffer fragArgBuffer = default; + + if (program.ArgumentBufferSizes[setIndex] > 0) + { + vertArgBuffer = _bufferManager.ReserveOrCreate(_pipeline.Cbs, program.ArgumentBufferSizes[setIndex] * sizeof(ulong)); + } + + if (program.FragArgumentBufferSizes[setIndex] > 0) + { + fragArgBuffer = _bufferManager.ReserveOrCreate(_pipeline.Cbs, program.FragArgumentBufferSizes[setIndex] * sizeof(ulong)); + } + + Span vertResourceIds = stackalloc ulong[program.ArgumentBufferSizes[setIndex]]; + Span fragResourceIds = stackalloc ulong[program.FragArgumentBufferSizes[setIndex]]; + + var vertResourceIdIndex = 0; + var fragResourceIdIndex = 0; + + foreach (ResourceBindingSegment segment in bindingSegments) + { + int binding = segment.Binding; + int count = segment.Count; + + switch (setIndex) + { + case Constants.ConstantBuffersSetIndex: + for (int i = 0; i < count; i++) + { + int index = binding + i; + + ref BufferRef buffer = ref _currentState.UniformBufferRefs[index]; + var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer); + + MTLRenderStages renderStages = 0; + + if ((segment.Stages & ResourceStages.Vertex) != 0) + { + vertResourceIds[vertResourceIdIndex] = gpuAddress; + vertResourceIdIndex++; + + renderStages |= MTLRenderStages.RenderStageVertex; + } + + if ((segment.Stages & ResourceStages.Fragment) != 0) + { + fragResourceIds[fragResourceIdIndex] = gpuAddress; + fragResourceIdIndex++; + + renderStages |= MTLRenderStages.RenderStageFragment; + } + + AddResource(nativePtr, MTLResourceUsage.Read, renderStages, in bindings); + } + break; + case Constants.StorageBuffersSetIndex: + for (int i = 0; i < count; i++) + { + int index = binding + i; + + ref BufferRef buffer = ref _currentState.StorageBufferRefs[index]; + var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer); + + MTLRenderStages renderStages = 0; + + if ((segment.Stages & ResourceStages.Vertex) != 0) + { + vertResourceIds[vertResourceIdIndex] = gpuAddress; + vertResourceIdIndex++; + + renderStages |= MTLRenderStages.RenderStageVertex; + } + + if ((segment.Stages & ResourceStages.Fragment) != 0) + { + fragResourceIds[fragResourceIdIndex] = gpuAddress; + fragResourceIdIndex++; + + renderStages |= MTLRenderStages.RenderStageFragment; + } + + AddResource(nativePtr, MTLResourceUsage.Read, renderStages, in bindings); + } + break; + case Constants.TexturesSetIndex: + if (!segment.IsArray) + { + for (int i = 0; i < count; i++) + { + int index = binding + i; + + ref var texture = ref _currentState.TextureRefs[index]; + var (gpuAddress, nativePtr) = AddressForTexture(ref texture); + + MTLRenderStages renderStages = 0; + + if ((segment.Stages & ResourceStages.Vertex) != 0) + { + vertResourceIds[vertResourceIdIndex] = gpuAddress; + vertResourceIdIndex++; + + if (texture.Sampler != null) + { + vertResourceIds[vertResourceIdIndex] = texture.Sampler.Get(_pipeline.Cbs).Value.GpuResourceID._impl; + vertResourceIdIndex++; + } + + renderStages |= MTLRenderStages.RenderStageVertex; + } + + if ((segment.Stages & ResourceStages.Fragment) != 0) + { + fragResourceIds[fragResourceIdIndex] = gpuAddress; + fragResourceIdIndex++; + + if (texture.Sampler != null) + { + fragResourceIds[fragResourceIdIndex] = texture.Sampler.Get(_pipeline.Cbs).Value.GpuResourceID._impl; + fragResourceIdIndex++; + } + + renderStages |= MTLRenderStages.RenderStageFragment; + } + + AddResource(nativePtr, MTLResourceUsage.Read, renderStages, in bindings); + } + } + else + { + var textureArray = _currentState.TextureArrayRefs[binding].Array; + + if (segment.Type != ResourceType.BufferTexture) + { + var textures = textureArray.GetTextureRefs(); + var samplers = new Auto[textures.Length]; + + for (int i = 0; i < textures.Length; i++) + { + TextureRef texture = textures[i]; + var (gpuAddress, nativePtr) = AddressForTexture(ref texture); + + samplers[i] = texture.Sampler; + + MTLRenderStages renderStages = 0; + + if ((segment.Stages & ResourceStages.Vertex) != 0) + { + vertResourceIds[vertResourceIdIndex] = gpuAddress; + vertResourceIdIndex++; + + renderStages |= MTLRenderStages.RenderStageVertex; + } + + if ((segment.Stages & ResourceStages.Fragment) != 0) + { + fragResourceIds[fragResourceIdIndex] = gpuAddress; + fragResourceIdIndex++; + + renderStages |= MTLRenderStages.RenderStageFragment; + } + + AddResource(nativePtr, MTLResourceUsage.Read, renderStages, in bindings); + } + + foreach (var sampler in samplers) + { + ulong gpuAddress = 0; + + if (sampler != null) + { + gpuAddress = sampler.Get(_pipeline.Cbs).Value.GpuResourceID._impl; + } + + if ((segment.Stages & ResourceStages.Vertex) != 0) + { + vertResourceIds[vertResourceIdIndex] = gpuAddress; + vertResourceIdIndex++; + } + + if ((segment.Stages & ResourceStages.Fragment) != 0) + { + fragResourceIds[fragResourceIdIndex] = gpuAddress; + fragResourceIdIndex++; + } + } + } + else + { + var bufferTextures = textureArray.GetBufferTextureRefs(); + + for (int i = 0; i < bufferTextures.Length; i++) + { + TextureBuffer bufferTexture = bufferTextures[i]; + var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref bufferTexture); + + MTLRenderStages renderStages = 0; + + if ((segment.Stages & ResourceStages.Vertex) != 0) + { + vertResourceIds[vertResourceIdIndex] = gpuAddress; + vertResourceIdIndex++; + + renderStages |= MTLRenderStages.RenderStageVertex; + } + + if ((segment.Stages & ResourceStages.Fragment) != 0) + { + fragResourceIds[fragResourceIdIndex] = gpuAddress; + fragResourceIdIndex++; + + renderStages |= MTLRenderStages.RenderStageFragment; + } + + AddResource(nativePtr, MTLResourceUsage.Read, renderStages, in bindings); + } + } + } + break; + case Constants.ImagesSetIndex: + if (!segment.IsArray) + { + for (int i = 0; i < count; i++) + { + int index = binding + i; + + ref var image = ref _currentState.ImageRefs[index]; + var (gpuAddress, nativePtr) = AddressForImage(ref image); + + MTLRenderStages renderStages = 0; + + if ((segment.Stages & ResourceStages.Vertex) != 0) + { + vertResourceIds[vertResourceIdIndex] = gpuAddress; + vertResourceIdIndex++; + renderStages |= MTLRenderStages.RenderStageVertex; + } + + if ((segment.Stages & ResourceStages.Fragment) != 0) + { + fragResourceIds[fragResourceIdIndex] = gpuAddress; + fragResourceIdIndex++; + renderStages |= MTLRenderStages.RenderStageFragment; + } + + AddResource(nativePtr, MTLResourceUsage.Read | MTLResourceUsage.Write, renderStages, in bindings); + } + } + else + { + var imageArray = _currentState.ImageArrayRefs[binding].Array; + + if (segment.Type != ResourceType.BufferImage) + { + var images = imageArray.GetTextureRefs(); + + for (int i = 0; i < images.Length; i++) + { + TextureRef image = images[i]; + var (gpuAddress, nativePtr) = AddressForTexture(ref image); + + MTLRenderStages renderStages = 0; + + if ((segment.Stages & ResourceStages.Vertex) != 0) + { + vertResourceIds[vertResourceIdIndex] = gpuAddress; + vertResourceIdIndex++; + renderStages |= MTLRenderStages.RenderStageVertex; + } + + if ((segment.Stages & ResourceStages.Fragment) != 0) + { + fragResourceIds[fragResourceIdIndex] = gpuAddress; + fragResourceIdIndex++; + renderStages |= MTLRenderStages.RenderStageFragment; + } + + AddResource(nativePtr, MTLResourceUsage.Read | MTLResourceUsage.Write, renderStages, in bindings); + } + } + else + { + var bufferImages = imageArray.GetBufferTextureRefs(); + + for (int i = 0; i < bufferImages.Length; i++) + { + TextureBuffer image = bufferImages[i]; + var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref image); + + MTLRenderStages renderStages = 0; + + if ((segment.Stages & ResourceStages.Vertex) != 0) + { + vertResourceIds[vertResourceIdIndex] = gpuAddress; + vertResourceIdIndex++; + renderStages |= MTLRenderStages.RenderStageVertex; + } + + if ((segment.Stages & ResourceStages.Fragment) != 0) + { + fragResourceIds[fragResourceIdIndex] = gpuAddress; + fragResourceIdIndex++; + renderStages |= MTLRenderStages.RenderStageFragment; + } + + AddResource(nativePtr, MTLResourceUsage.Read | MTLResourceUsage.Write, renderStages, in bindings); + } + } + } + break; + } + } + + if (program.ArgumentBufferSizes[setIndex] > 0) + { + vertArgBuffer.Holder.SetDataUnchecked(vertArgBuffer.Offset, MemoryMarshal.AsBytes(vertResourceIds)); + var mtlVertArgBuffer = _bufferManager.GetBuffer(vertArgBuffer.Handle, false).Get(_pipeline.Cbs).Value; + bindings.VertexBuffers.Add(new BufferResource(mtlVertArgBuffer, (uint)vertArgBuffer.Range.Offset, SetIndexToBindingIndex(setIndex))); + } + + if (program.FragArgumentBufferSizes[setIndex] > 0) + { + fragArgBuffer.Holder.SetDataUnchecked(fragArgBuffer.Offset, MemoryMarshal.AsBytes(fragResourceIds)); + var mtlFragArgBuffer = _bufferManager.GetBuffer(fragArgBuffer.Handle, false).Get(_pipeline.Cbs).Value; + bindings.FragmentBuffers.Add(new BufferResource(mtlFragArgBuffer, (uint)fragArgBuffer.Range.Offset, SetIndexToBindingIndex(setIndex))); + } + } + + private readonly void UpdateAndBind(Program program, uint setIndex, ref readonly ComputeEncoderBindings bindings) + { + var bindingSegments = program.BindingSegments[setIndex]; + + if (bindingSegments.Length == 0) + { + return; + } + + ScopedTemporaryBuffer argBuffer = default; + + if (program.ArgumentBufferSizes[setIndex] > 0) + { + argBuffer = _bufferManager.ReserveOrCreate(_pipeline.Cbs, program.ArgumentBufferSizes[setIndex] * sizeof(ulong)); + } + + Span resourceIds = stackalloc ulong[program.ArgumentBufferSizes[setIndex]]; + var resourceIdIndex = 0; + + foreach (ResourceBindingSegment segment in bindingSegments) + { + int binding = segment.Binding; + int count = segment.Count; + + switch (setIndex) + { + case Constants.ConstantBuffersSetIndex: + for (int i = 0; i < count; i++) + { + int index = binding + i; + + ref BufferRef buffer = ref _currentState.UniformBufferRefs[index]; + var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer); + + if ((segment.Stages & ResourceStages.Compute) != 0) + { + AddResource(nativePtr, MTLResourceUsage.Read, in bindings); + bindings.Resources.Add(new Resource(new MTLResource(nativePtr), MTLResourceUsage.Read, 0)); + resourceIds[resourceIdIndex] = gpuAddress; + resourceIdIndex++; + } + } + break; + case Constants.StorageBuffersSetIndex: + for (int i = 0; i < count; i++) + { + int index = binding + i; + + ref BufferRef buffer = ref _currentState.StorageBufferRefs[index]; + var (gpuAddress, nativePtr) = AddressForBuffer(ref buffer); + + if ((segment.Stages & ResourceStages.Compute) != 0) + { + AddResource(nativePtr, MTLResourceUsage.Read | MTLResourceUsage.Write, in bindings); + resourceIds[resourceIdIndex] = gpuAddress; + resourceIdIndex++; + } + } + break; + case Constants.TexturesSetIndex: + if (!segment.IsArray) + { + for (int i = 0; i < count; i++) + { + int index = binding + i; + + ref var texture = ref _currentState.TextureRefs[index]; + var (gpuAddress, nativePtr) = AddressForTexture(ref texture); + + if ((segment.Stages & ResourceStages.Compute) != 0) + { + AddResource(nativePtr, MTLResourceUsage.Read, in bindings); + resourceIds[resourceIdIndex] = gpuAddress; + resourceIdIndex++; + + if (texture.Sampler != null) + { + resourceIds[resourceIdIndex] = texture.Sampler.Get(_pipeline.Cbs).Value.GpuResourceID._impl; + resourceIdIndex++; + } + } + } + } + else + { + var textureArray = _currentState.TextureArrayRefs[binding].Array; + + if (segment.Type != ResourceType.BufferTexture) + { + var textures = textureArray.GetTextureRefs(); + var samplers = new Auto[textures.Length]; + + for (int i = 0; i < textures.Length; i++) + { + TextureRef texture = textures[i]; + var (gpuAddress, nativePtr) = AddressForTexture(ref texture); + + if ((segment.Stages & ResourceStages.Compute) != 0) + { + AddResource(nativePtr, MTLResourceUsage.Read, in bindings); + resourceIds[resourceIdIndex] = gpuAddress; + resourceIdIndex++; + + samplers[i] = texture.Sampler; + } + } + + foreach (var sampler in samplers) + { + if (sampler != null) + { + resourceIds[resourceIdIndex] = sampler.Get(_pipeline.Cbs).Value.GpuResourceID._impl; + resourceIdIndex++; + } + } + } + else + { + var bufferTextures = textureArray.GetBufferTextureRefs(); + + for (int i = 0; i < bufferTextures.Length; i++) + { + TextureBuffer bufferTexture = bufferTextures[i]; + var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref bufferTexture); + + if ((segment.Stages & ResourceStages.Compute) != 0) + { + AddResource(nativePtr, MTLResourceUsage.Read, in bindings); + resourceIds[resourceIdIndex] = gpuAddress; + resourceIdIndex++; + } + } + } + } + break; + case Constants.ImagesSetIndex: + if (!segment.IsArray) + { + for (int i = 0; i < count; i++) + { + int index = binding + i; + + ref var image = ref _currentState.ImageRefs[index]; + var (gpuAddress, nativePtr) = AddressForImage(ref image); + + if ((segment.Stages & ResourceStages.Compute) != 0) + { + AddResource(nativePtr, MTLResourceUsage.Read | MTLResourceUsage.Write, in bindings); + resourceIds[resourceIdIndex] = gpuAddress; + resourceIdIndex++; + } + } + } + else + { + var imageArray = _currentState.ImageArrayRefs[binding].Array; + + if (segment.Type != ResourceType.BufferImage) + { + var images = imageArray.GetTextureRefs(); + + for (int i = 0; i < images.Length; i++) + { + TextureRef image = images[i]; + var (gpuAddress, nativePtr) = AddressForTexture(ref image); + + if ((segment.Stages & ResourceStages.Compute) != 0) + { + AddResource(nativePtr, MTLResourceUsage.Read | MTLResourceUsage.Write, in bindings); + resourceIds[resourceIdIndex] = gpuAddress; + resourceIdIndex++; + } + } + } + else + { + var bufferImages = imageArray.GetBufferTextureRefs(); + + for (int i = 0; i < bufferImages.Length; i++) + { + TextureBuffer image = bufferImages[i]; + var (gpuAddress, nativePtr) = AddressForTextureBuffer(ref image); + + if ((segment.Stages & ResourceStages.Compute) != 0) + { + AddResource(nativePtr, MTLResourceUsage.Read | MTLResourceUsage.Write, in bindings); + resourceIds[resourceIdIndex] = gpuAddress; + resourceIdIndex++; + } + } + } + } + break; + } + } + + if (program.ArgumentBufferSizes[setIndex] > 0) + { + argBuffer.Holder.SetDataUnchecked(argBuffer.Offset, MemoryMarshal.AsBytes(resourceIds)); + var mtlArgBuffer = _bufferManager.GetBuffer(argBuffer.Handle, false).Get(_pipeline.Cbs).Value; + bindings.Buffers.Add(new BufferResource(mtlArgBuffer, (uint)argBuffer.Range.Offset, SetIndexToBindingIndex(setIndex))); + } + } + + private static uint SetIndexToBindingIndex(uint setIndex) + { + return setIndex switch + { + Constants.ConstantBuffersSetIndex => Constants.ConstantBuffersIndex, + Constants.StorageBuffersSetIndex => Constants.StorageBuffersIndex, + Constants.TexturesSetIndex => Constants.TexturesIndex, + Constants.ImagesSetIndex => Constants.ImagesIndex, + }; + } + + private readonly void SetCullMode(MTLRenderCommandEncoder renderCommandEncoder) + { + renderCommandEncoder.SetCullMode(_currentState.CullMode); + } + + private readonly void SetFrontFace(MTLRenderCommandEncoder renderCommandEncoder) + { + renderCommandEncoder.SetFrontFacingWinding(_currentState.Winding); + } + + private readonly void SetStencilRefValue(MTLRenderCommandEncoder renderCommandEncoder) + { + renderCommandEncoder.SetStencilReferenceValues((uint)_currentState.FrontRefValue, (uint)_currentState.BackRefValue); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/EnumConversion.cs b/src/Ryujinx.Graphics.Metal/EnumConversion.cs new file mode 100644 index 000000000..e498546e8 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/EnumConversion.cs @@ -0,0 +1,293 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + static class EnumConversion + { + public static MTLSamplerAddressMode Convert(this AddressMode mode) + { + return mode switch + { + AddressMode.Clamp => MTLSamplerAddressMode.ClampToEdge, // TODO: Should be clamp. + AddressMode.Repeat => MTLSamplerAddressMode.Repeat, + AddressMode.MirrorClamp => MTLSamplerAddressMode.MirrorClampToEdge, // TODO: Should be mirror clamp. + AddressMode.MirroredRepeat => MTLSamplerAddressMode.MirrorRepeat, + AddressMode.ClampToBorder => MTLSamplerAddressMode.ClampToBorderColor, + AddressMode.ClampToEdge => MTLSamplerAddressMode.ClampToEdge, + AddressMode.MirrorClampToEdge => MTLSamplerAddressMode.MirrorClampToEdge, + AddressMode.MirrorClampToBorder => MTLSamplerAddressMode.ClampToBorderColor, // TODO: Should be mirror clamp to border. + _ => LogInvalidAndReturn(mode, nameof(AddressMode), MTLSamplerAddressMode.ClampToEdge) // TODO: Should be clamp. + }; + } + + public static MTLBlendFactor Convert(this BlendFactor factor) + { + return factor switch + { + BlendFactor.Zero or BlendFactor.ZeroGl => MTLBlendFactor.Zero, + BlendFactor.One or BlendFactor.OneGl => MTLBlendFactor.One, + BlendFactor.SrcColor or BlendFactor.SrcColorGl => MTLBlendFactor.SourceColor, + BlendFactor.OneMinusSrcColor or BlendFactor.OneMinusSrcColorGl => MTLBlendFactor.OneMinusSourceColor, + BlendFactor.SrcAlpha or BlendFactor.SrcAlphaGl => MTLBlendFactor.SourceAlpha, + BlendFactor.OneMinusSrcAlpha or BlendFactor.OneMinusSrcAlphaGl => MTLBlendFactor.OneMinusSourceAlpha, + BlendFactor.DstAlpha or BlendFactor.DstAlphaGl => MTLBlendFactor.DestinationAlpha, + BlendFactor.OneMinusDstAlpha or BlendFactor.OneMinusDstAlphaGl => MTLBlendFactor.OneMinusDestinationAlpha, + BlendFactor.DstColor or BlendFactor.DstColorGl => MTLBlendFactor.DestinationColor, + BlendFactor.OneMinusDstColor or BlendFactor.OneMinusDstColorGl => MTLBlendFactor.OneMinusDestinationColor, + BlendFactor.SrcAlphaSaturate or BlendFactor.SrcAlphaSaturateGl => MTLBlendFactor.SourceAlphaSaturated, + BlendFactor.Src1Color or BlendFactor.Src1ColorGl => MTLBlendFactor.Source1Color, + BlendFactor.OneMinusSrc1Color or BlendFactor.OneMinusSrc1ColorGl => MTLBlendFactor.OneMinusSource1Color, + BlendFactor.Src1Alpha or BlendFactor.Src1AlphaGl => MTLBlendFactor.Source1Alpha, + BlendFactor.OneMinusSrc1Alpha or BlendFactor.OneMinusSrc1AlphaGl => MTLBlendFactor.OneMinusSource1Alpha, + BlendFactor.ConstantColor => MTLBlendFactor.BlendColor, + BlendFactor.OneMinusConstantColor => MTLBlendFactor.OneMinusBlendColor, + BlendFactor.ConstantAlpha => MTLBlendFactor.BlendAlpha, + BlendFactor.OneMinusConstantAlpha => MTLBlendFactor.OneMinusBlendAlpha, + _ => LogInvalidAndReturn(factor, nameof(BlendFactor), MTLBlendFactor.Zero) + }; + } + + public static MTLBlendOperation Convert(this BlendOp op) + { + return op switch + { + BlendOp.Add or BlendOp.AddGl => MTLBlendOperation.Add, + BlendOp.Subtract or BlendOp.SubtractGl => MTLBlendOperation.Subtract, + BlendOp.ReverseSubtract or BlendOp.ReverseSubtractGl => MTLBlendOperation.ReverseSubtract, + BlendOp.Minimum => MTLBlendOperation.Min, + BlendOp.Maximum => MTLBlendOperation.Max, + _ => LogInvalidAndReturn(op, nameof(BlendOp), MTLBlendOperation.Add) + }; + } + + public static MTLCompareFunction Convert(this CompareOp op) + { + return op switch + { + CompareOp.Never or CompareOp.NeverGl => MTLCompareFunction.Never, + CompareOp.Less or CompareOp.LessGl => MTLCompareFunction.Less, + CompareOp.Equal or CompareOp.EqualGl => MTLCompareFunction.Equal, + CompareOp.LessOrEqual or CompareOp.LessOrEqualGl => MTLCompareFunction.LessEqual, + CompareOp.Greater or CompareOp.GreaterGl => MTLCompareFunction.Greater, + CompareOp.NotEqual or CompareOp.NotEqualGl => MTLCompareFunction.NotEqual, + CompareOp.GreaterOrEqual or CompareOp.GreaterOrEqualGl => MTLCompareFunction.GreaterEqual, + CompareOp.Always or CompareOp.AlwaysGl => MTLCompareFunction.Always, + _ => LogInvalidAndReturn(op, nameof(CompareOp), MTLCompareFunction.Never) + }; + } + + public static MTLCullMode Convert(this Face face) + { + return face switch + { + Face.Back => MTLCullMode.Back, + Face.Front => MTLCullMode.Front, + Face.FrontAndBack => MTLCullMode.None, + _ => LogInvalidAndReturn(face, nameof(Face), MTLCullMode.Back) + }; + } + + public static MTLWinding Convert(this FrontFace frontFace) + { + // The viewport is flipped vertically, therefore we need to switch the winding order as well + return frontFace switch + { + FrontFace.Clockwise => MTLWinding.CounterClockwise, + FrontFace.CounterClockwise => MTLWinding.Clockwise, + _ => LogInvalidAndReturn(frontFace, nameof(FrontFace), MTLWinding.Clockwise) + }; + } + + public static MTLIndexType Convert(this IndexType type) + { + return type switch + { + IndexType.UShort => MTLIndexType.UInt16, + IndexType.UInt => MTLIndexType.UInt32, + _ => LogInvalidAndReturn(type, nameof(IndexType), MTLIndexType.UInt16) + }; + } + + public static MTLLogicOperation Convert(this LogicalOp op) + { + return op switch + { + LogicalOp.Clear => MTLLogicOperation.Clear, + LogicalOp.And => MTLLogicOperation.And, + LogicalOp.AndReverse => MTLLogicOperation.AndReverse, + LogicalOp.Copy => MTLLogicOperation.Copy, + LogicalOp.AndInverted => MTLLogicOperation.AndInverted, + LogicalOp.Noop => MTLLogicOperation.Noop, + LogicalOp.Xor => MTLLogicOperation.Xor, + LogicalOp.Or => MTLLogicOperation.Or, + LogicalOp.Nor => MTLLogicOperation.Nor, + LogicalOp.Equiv => MTLLogicOperation.Equivalence, + LogicalOp.Invert => MTLLogicOperation.Invert, + LogicalOp.OrReverse => MTLLogicOperation.OrReverse, + LogicalOp.CopyInverted => MTLLogicOperation.CopyInverted, + LogicalOp.OrInverted => MTLLogicOperation.OrInverted, + LogicalOp.Nand => MTLLogicOperation.Nand, + LogicalOp.Set => MTLLogicOperation.Set, + _ => LogInvalidAndReturn(op, nameof(LogicalOp), MTLLogicOperation.And) + }; + } + + public static MTLSamplerMinMagFilter Convert(this MagFilter filter) + { + return filter switch + { + MagFilter.Nearest => MTLSamplerMinMagFilter.Nearest, + MagFilter.Linear => MTLSamplerMinMagFilter.Linear, + _ => LogInvalidAndReturn(filter, nameof(MagFilter), MTLSamplerMinMagFilter.Nearest) + }; + } + + public static (MTLSamplerMinMagFilter, MTLSamplerMipFilter) Convert(this MinFilter filter) + { + return filter switch + { + MinFilter.Nearest => (MTLSamplerMinMagFilter.Nearest, MTLSamplerMipFilter.Nearest), + MinFilter.Linear => (MTLSamplerMinMagFilter.Linear, MTLSamplerMipFilter.Linear), + MinFilter.NearestMipmapNearest => (MTLSamplerMinMagFilter.Nearest, MTLSamplerMipFilter.Nearest), + MinFilter.LinearMipmapNearest => (MTLSamplerMinMagFilter.Linear, MTLSamplerMipFilter.Nearest), + MinFilter.NearestMipmapLinear => (MTLSamplerMinMagFilter.Nearest, MTLSamplerMipFilter.Linear), + MinFilter.LinearMipmapLinear => (MTLSamplerMinMagFilter.Linear, MTLSamplerMipFilter.Linear), + _ => LogInvalidAndReturn(filter, nameof(MinFilter), (MTLSamplerMinMagFilter.Nearest, MTLSamplerMipFilter.Nearest)) + + }; + } + + public static MTLPrimitiveType Convert(this PrimitiveTopology topology) + { + return topology switch + { + PrimitiveTopology.Points => MTLPrimitiveType.Point, + PrimitiveTopology.Lines => MTLPrimitiveType.Line, + PrimitiveTopology.LineStrip => MTLPrimitiveType.LineStrip, + PrimitiveTopology.Triangles => MTLPrimitiveType.Triangle, + PrimitiveTopology.TriangleStrip => MTLPrimitiveType.TriangleStrip, + _ => LogInvalidAndReturn(topology, nameof(PrimitiveTopology), MTLPrimitiveType.Triangle) + }; + } + + public static MTLStencilOperation Convert(this StencilOp op) + { + return op switch + { + StencilOp.Keep or StencilOp.KeepGl => MTLStencilOperation.Keep, + StencilOp.Zero or StencilOp.ZeroGl => MTLStencilOperation.Zero, + StencilOp.Replace or StencilOp.ReplaceGl => MTLStencilOperation.Replace, + StencilOp.IncrementAndClamp or StencilOp.IncrementAndClampGl => MTLStencilOperation.IncrementClamp, + StencilOp.DecrementAndClamp or StencilOp.DecrementAndClampGl => MTLStencilOperation.DecrementClamp, + StencilOp.Invert or StencilOp.InvertGl => MTLStencilOperation.Invert, + StencilOp.IncrementAndWrap or StencilOp.IncrementAndWrapGl => MTLStencilOperation.IncrementWrap, + StencilOp.DecrementAndWrap or StencilOp.DecrementAndWrapGl => MTLStencilOperation.DecrementWrap, + _ => LogInvalidAndReturn(op, nameof(StencilOp), MTLStencilOperation.Keep) + }; + } + + public static MTLTextureType Convert(this Target target) + { + return target switch + { + Target.TextureBuffer => MTLTextureType.TextureBuffer, + Target.Texture1D => MTLTextureType.Type1D, + Target.Texture1DArray => MTLTextureType.Type1DArray, + Target.Texture2D => MTLTextureType.Type2D, + Target.Texture2DArray => MTLTextureType.Type2DArray, + Target.Texture2DMultisample => MTLTextureType.Type2DMultisample, + Target.Texture2DMultisampleArray => MTLTextureType.Type2DMultisampleArray, + Target.Texture3D => MTLTextureType.Type3D, + Target.Cubemap => MTLTextureType.Cube, + Target.CubemapArray => MTLTextureType.CubeArray, + _ => LogInvalidAndReturn(target, nameof(Target), MTLTextureType.Type2D) + }; + } + + public static MTLTextureSwizzle Convert(this SwizzleComponent swizzleComponent) + { + return swizzleComponent switch + { + SwizzleComponent.Zero => MTLTextureSwizzle.Zero, + SwizzleComponent.One => MTLTextureSwizzle.One, + SwizzleComponent.Red => MTLTextureSwizzle.Red, + SwizzleComponent.Green => MTLTextureSwizzle.Green, + SwizzleComponent.Blue => MTLTextureSwizzle.Blue, + SwizzleComponent.Alpha => MTLTextureSwizzle.Alpha, + _ => LogInvalidAndReturn(swizzleComponent, nameof(SwizzleComponent), MTLTextureSwizzle.Zero) + }; + } + + public static MTLVertexFormat Convert(this Format format) + { + return format switch + { + Format.R16Float => MTLVertexFormat.Half, + Format.R16G16Float => MTLVertexFormat.Half2, + Format.R16G16B16Float => MTLVertexFormat.Half3, + Format.R16G16B16A16Float => MTLVertexFormat.Half4, + Format.R32Float => MTLVertexFormat.Float, + Format.R32G32Float => MTLVertexFormat.Float2, + Format.R32G32B32Float => MTLVertexFormat.Float3, + Format.R11G11B10Float => MTLVertexFormat.FloatRG11B10, + Format.R32G32B32A32Float => MTLVertexFormat.Float4, + Format.R8Uint => MTLVertexFormat.UChar, + Format.R8G8Uint => MTLVertexFormat.UChar2, + Format.R8G8B8Uint => MTLVertexFormat.UChar3, + Format.R8G8B8A8Uint => MTLVertexFormat.UChar4, + Format.R16Uint => MTLVertexFormat.UShort, + Format.R16G16Uint => MTLVertexFormat.UShort2, + Format.R16G16B16Uint => MTLVertexFormat.UShort3, + Format.R16G16B16A16Uint => MTLVertexFormat.UShort4, + Format.R32Uint => MTLVertexFormat.UInt, + Format.R32G32Uint => MTLVertexFormat.UInt2, + Format.R32G32B32Uint => MTLVertexFormat.UInt3, + Format.R32G32B32A32Uint => MTLVertexFormat.UInt4, + Format.R8Sint => MTLVertexFormat.Char, + Format.R8G8Sint => MTLVertexFormat.Char2, + Format.R8G8B8Sint => MTLVertexFormat.Char3, + Format.R8G8B8A8Sint => MTLVertexFormat.Char4, + Format.R16Sint => MTLVertexFormat.Short, + Format.R16G16Sint => MTLVertexFormat.Short2, + Format.R16G16B16Sint => MTLVertexFormat.Short3, + Format.R16G16B16A16Sint => MTLVertexFormat.Short4, + Format.R32Sint => MTLVertexFormat.Int, + Format.R32G32Sint => MTLVertexFormat.Int2, + Format.R32G32B32Sint => MTLVertexFormat.Int3, + Format.R32G32B32A32Sint => MTLVertexFormat.Int4, + Format.R8Unorm => MTLVertexFormat.UCharNormalized, + Format.R8G8Unorm => MTLVertexFormat.UChar2Normalized, + Format.R8G8B8Unorm => MTLVertexFormat.UChar3Normalized, + Format.R8G8B8A8Unorm => MTLVertexFormat.UChar4Normalized, + Format.R16Unorm => MTLVertexFormat.UShortNormalized, + Format.R16G16Unorm => MTLVertexFormat.UShort2Normalized, + Format.R16G16B16Unorm => MTLVertexFormat.UShort3Normalized, + Format.R16G16B16A16Unorm => MTLVertexFormat.UShort4Normalized, + Format.R10G10B10A2Unorm => MTLVertexFormat.UInt1010102Normalized, + Format.R8Snorm => MTLVertexFormat.CharNormalized, + Format.R8G8Snorm => MTLVertexFormat.Char2Normalized, + Format.R8G8B8Snorm => MTLVertexFormat.Char3Normalized, + Format.R8G8B8A8Snorm => MTLVertexFormat.Char4Normalized, + Format.R16Snorm => MTLVertexFormat.ShortNormalized, + Format.R16G16Snorm => MTLVertexFormat.Short2Normalized, + Format.R16G16B16Snorm => MTLVertexFormat.Short3Normalized, + Format.R16G16B16A16Snorm => MTLVertexFormat.Short4Normalized, + Format.R10G10B10A2Snorm => MTLVertexFormat.Int1010102Normalized, + + _ => LogInvalidAndReturn(format, nameof(Format), MTLVertexFormat.Float4) + }; + } + + private static T2 LogInvalidAndReturn(T1 value, string name, T2 defaultValue = default) + { + Logger.Debug?.Print(LogClass.Gpu, $"Invalid {name} enum value: {value}."); + + return defaultValue; + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/FenceHolder.cs b/src/Ryujinx.Graphics.Metal/FenceHolder.cs new file mode 100644 index 000000000..a8dd28c0d --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/FenceHolder.cs @@ -0,0 +1,77 @@ +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; +using System.Threading; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class FenceHolder : IDisposable + { + private MTLCommandBuffer _fence; + private int _referenceCount; + private bool _disposed; + + public FenceHolder(MTLCommandBuffer fence) + { + _fence = fence; + _referenceCount = 1; + } + + public MTLCommandBuffer GetUnsafe() + { + return _fence; + } + + public bool TryGet(out MTLCommandBuffer fence) + { + int lastValue; + do + { + lastValue = _referenceCount; + + if (lastValue == 0) + { + fence = default; + return false; + } + } while (Interlocked.CompareExchange(ref _referenceCount, lastValue + 1, lastValue) != lastValue); + + fence = _fence; + return true; + } + + public MTLCommandBuffer Get() + { + Interlocked.Increment(ref _referenceCount); + return _fence; + } + + public void Put() + { + if (Interlocked.Decrement(ref _referenceCount) == 0) + { + _fence = default; + } + } + + public void Wait() + { + _fence.WaitUntilCompleted(); + } + + public bool IsSignaled() + { + return _fence.Status == MTLCommandBufferStatus.Completed; + } + + public void Dispose() + { + if (!_disposed) + { + Put(); + _disposed = true; + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/FormatConverter.cs b/src/Ryujinx.Graphics.Metal/FormatConverter.cs new file mode 100644 index 000000000..e099187b8 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/FormatConverter.cs @@ -0,0 +1,49 @@ +using System; +using System.Runtime.InteropServices; + +namespace Ryujinx.Graphics.Metal +{ + class FormatConverter + { + public static void ConvertD24S8ToD32FS8(Span output, ReadOnlySpan input) + { + const float UnormToFloat = 1f / 0xffffff; + + Span outputUint = MemoryMarshal.Cast(output); + ReadOnlySpan inputUint = MemoryMarshal.Cast(input); + + int i = 0; + + for (; i < inputUint.Length; i++) + { + uint depthStencil = inputUint[i]; + uint depth = depthStencil >> 8; + uint stencil = depthStencil & 0xff; + + int j = i * 2; + + outputUint[j] = (uint)BitConverter.SingleToInt32Bits(depth * UnormToFloat); + outputUint[j + 1] = stencil; + } + } + + public static void ConvertD32FS8ToD24S8(Span output, ReadOnlySpan input) + { + Span outputUint = MemoryMarshal.Cast(output); + ReadOnlySpan inputUint = MemoryMarshal.Cast(input); + + int i = 0; + + for (; i < inputUint.Length; i += 2) + { + float depth = BitConverter.Int32BitsToSingle((int)inputUint[i]); + uint stencil = inputUint[i + 1]; + uint depthStencil = (Math.Clamp((uint)(depth * 0xffffff), 0, 0xffffff) << 8) | (stencil & 0xff); + + int j = i >> 1; + + outputUint[j] = depthStencil; + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/FormatTable.cs b/src/Ryujinx.Graphics.Metal/FormatTable.cs new file mode 100644 index 000000000..c1f8923f9 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/FormatTable.cs @@ -0,0 +1,196 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + static class FormatTable + { + private static readonly MTLPixelFormat[] _table; + + static FormatTable() + { + _table = new MTLPixelFormat[Enum.GetNames(typeof(Format)).Length]; + + Add(Format.R8Unorm, MTLPixelFormat.R8Unorm); + Add(Format.R8Snorm, MTLPixelFormat.R8Snorm); + Add(Format.R8Uint, MTLPixelFormat.R8Uint); + Add(Format.R8Sint, MTLPixelFormat.R8Sint); + Add(Format.R16Float, MTLPixelFormat.R16Float); + Add(Format.R16Unorm, MTLPixelFormat.R16Unorm); + Add(Format.R16Snorm, MTLPixelFormat.R16Snorm); + Add(Format.R16Uint, MTLPixelFormat.R16Uint); + Add(Format.R16Sint, MTLPixelFormat.R16Sint); + Add(Format.R32Float, MTLPixelFormat.R32Float); + Add(Format.R32Uint, MTLPixelFormat.R32Uint); + Add(Format.R32Sint, MTLPixelFormat.R32Sint); + Add(Format.R8G8Unorm, MTLPixelFormat.RG8Unorm); + Add(Format.R8G8Snorm, MTLPixelFormat.RG8Snorm); + Add(Format.R8G8Uint, MTLPixelFormat.RG8Uint); + Add(Format.R8G8Sint, MTLPixelFormat.RG8Sint); + Add(Format.R16G16Float, MTLPixelFormat.RG16Float); + Add(Format.R16G16Unorm, MTLPixelFormat.RG16Unorm); + Add(Format.R16G16Snorm, MTLPixelFormat.RG16Snorm); + Add(Format.R16G16Uint, MTLPixelFormat.RG16Uint); + Add(Format.R16G16Sint, MTLPixelFormat.RG16Sint); + Add(Format.R32G32Float, MTLPixelFormat.RG32Float); + Add(Format.R32G32Uint, MTLPixelFormat.RG32Uint); + Add(Format.R32G32Sint, MTLPixelFormat.RG32Sint); + // Add(Format.R8G8B8Unorm, MTLPixelFormat.R8G8B8Unorm); + // Add(Format.R8G8B8Snorm, MTLPixelFormat.R8G8B8Snorm); + // Add(Format.R8G8B8Uint, MTLPixelFormat.R8G8B8Uint); + // Add(Format.R8G8B8Sint, MTLPixelFormat.R8G8B8Sint); + // Add(Format.R16G16B16Float, MTLPixelFormat.R16G16B16Float); + // Add(Format.R16G16B16Unorm, MTLPixelFormat.R16G16B16Unorm); + // Add(Format.R16G16B16Snorm, MTLPixelFormat.R16G16B16SNorm); + // Add(Format.R16G16B16Uint, MTLPixelFormat.R16G16B16Uint); + // Add(Format.R16G16B16Sint, MTLPixelFormat.R16G16B16Sint); + // Add(Format.R32G32B32Float, MTLPixelFormat.R32G32B32Sfloat); + // Add(Format.R32G32B32Uint, MTLPixelFormat.R32G32B32Uint); + // Add(Format.R32G32B32Sint, MTLPixelFormat.R32G32B32Sint); + Add(Format.R8G8B8A8Unorm, MTLPixelFormat.RGBA8Unorm); + Add(Format.R8G8B8A8Snorm, MTLPixelFormat.RGBA8Snorm); + Add(Format.R8G8B8A8Uint, MTLPixelFormat.RGBA8Uint); + Add(Format.R8G8B8A8Sint, MTLPixelFormat.RGBA8Sint); + Add(Format.R16G16B16A16Float, MTLPixelFormat.RGBA16Float); + Add(Format.R16G16B16A16Unorm, MTLPixelFormat.RGBA16Unorm); + Add(Format.R16G16B16A16Snorm, MTLPixelFormat.RGBA16Snorm); + Add(Format.R16G16B16A16Uint, MTLPixelFormat.RGBA16Uint); + Add(Format.R16G16B16A16Sint, MTLPixelFormat.RGBA16Sint); + Add(Format.R32G32B32A32Float, MTLPixelFormat.RGBA32Float); + Add(Format.R32G32B32A32Uint, MTLPixelFormat.RGBA32Uint); + Add(Format.R32G32B32A32Sint, MTLPixelFormat.RGBA32Sint); + Add(Format.S8Uint, MTLPixelFormat.Stencil8); + Add(Format.D16Unorm, MTLPixelFormat.Depth16Unorm); + Add(Format.S8UintD24Unorm, MTLPixelFormat.Depth24UnormStencil8); + Add(Format.X8UintD24Unorm, MTLPixelFormat.Depth24UnormStencil8); + Add(Format.D32Float, MTLPixelFormat.Depth32Float); + Add(Format.D24UnormS8Uint, MTLPixelFormat.Depth24UnormStencil8); + Add(Format.D32FloatS8Uint, MTLPixelFormat.Depth32FloatStencil8); + Add(Format.R8G8B8A8Srgb, MTLPixelFormat.RGBA8UnormsRGB); + // Add(Format.R4G4Unorm, MTLPixelFormat.R4G4Unorm); + Add(Format.R4G4B4A4Unorm, MTLPixelFormat.RGBA8Unorm); + // Add(Format.R5G5B5X1Unorm, MTLPixelFormat.R5G5B5X1Unorm); + Add(Format.R5G5B5A1Unorm, MTLPixelFormat.BGR5A1Unorm); + Add(Format.R5G6B5Unorm, MTLPixelFormat.B5G6R5Unorm); + Add(Format.R10G10B10A2Unorm, MTLPixelFormat.RGB10A2Unorm); + Add(Format.R10G10B10A2Uint, MTLPixelFormat.RGB10A2Uint); + Add(Format.R11G11B10Float, MTLPixelFormat.RG11B10Float); + Add(Format.R9G9B9E5Float, MTLPixelFormat.RGB9E5Float); + Add(Format.Bc1RgbaUnorm, MTLPixelFormat.BC1RGBA); + Add(Format.Bc2Unorm, MTLPixelFormat.BC2RGBA); + Add(Format.Bc3Unorm, MTLPixelFormat.BC3RGBA); + Add(Format.Bc1RgbaSrgb, MTLPixelFormat.BC1RGBAsRGB); + Add(Format.Bc2Srgb, MTLPixelFormat.BC2RGBAsRGB); + Add(Format.Bc3Srgb, MTLPixelFormat.BC3RGBAsRGB); + Add(Format.Bc4Unorm, MTLPixelFormat.BC4RUnorm); + Add(Format.Bc4Snorm, MTLPixelFormat.BC4RSnorm); + Add(Format.Bc5Unorm, MTLPixelFormat.BC5RGUnorm); + Add(Format.Bc5Snorm, MTLPixelFormat.BC5RGSnorm); + Add(Format.Bc7Unorm, MTLPixelFormat.BC7RGBAUnorm); + Add(Format.Bc7Srgb, MTLPixelFormat.BC7RGBAUnormsRGB); + Add(Format.Bc6HSfloat, MTLPixelFormat.BC6HRGBFloat); + Add(Format.Bc6HUfloat, MTLPixelFormat.BC6HRGBUfloat); + Add(Format.Etc2RgbUnorm, MTLPixelFormat.ETC2RGB8); + // Add(Format.Etc2RgbaUnorm, MTLPixelFormat.ETC2RGBA8); + Add(Format.Etc2RgbPtaUnorm, MTLPixelFormat.ETC2RGB8A1); + Add(Format.Etc2RgbSrgb, MTLPixelFormat.ETC2RGB8sRGB); + // Add(Format.Etc2RgbaSrgb, MTLPixelFormat.ETC2RGBA8sRGB); + Add(Format.Etc2RgbPtaSrgb, MTLPixelFormat.ETC2RGB8A1sRGB); + // Add(Format.R8Uscaled, MTLPixelFormat.R8Uscaled); + // Add(Format.R8Sscaled, MTLPixelFormat.R8Sscaled); + // Add(Format.R16Uscaled, MTLPixelFormat.R16Uscaled); + // Add(Format.R16Sscaled, MTLPixelFormat.R16Sscaled); + // Add(Format.R32Uscaled, MTLPixelFormat.R32Uscaled); + // Add(Format.R32Sscaled, MTLPixelFormat.R32Sscaled); + // Add(Format.R8G8Uscaled, MTLPixelFormat.R8G8Uscaled); + // Add(Format.R8G8Sscaled, MTLPixelFormat.R8G8Sscaled); + // Add(Format.R16G16Uscaled, MTLPixelFormat.R16G16Uscaled); + // Add(Format.R16G16Sscaled, MTLPixelFormat.R16G16Sscaled); + // Add(Format.R32G32Uscaled, MTLPixelFormat.R32G32Uscaled); + // Add(Format.R32G32Sscaled, MTLPixelFormat.R32G32Sscaled); + // Add(Format.R8G8B8Uscaled, MTLPixelFormat.R8G8B8Uscaled); + // Add(Format.R8G8B8Sscaled, MTLPixelFormat.R8G8B8Sscaled); + // Add(Format.R16G16B16Uscaled, MTLPixelFormat.R16G16B16Uscaled); + // Add(Format.R16G16B16Sscaled, MTLPixelFormat.R16G16B16Sscaled); + // Add(Format.R32G32B32Uscaled, MTLPixelFormat.R32G32B32Uscaled); + // Add(Format.R32G32B32Sscaled, MTLPixelFormat.R32G32B32Sscaled); + // Add(Format.R8G8B8A8Uscaled, MTLPixelFormat.R8G8B8A8Uscaled); + // Add(Format.R8G8B8A8Sscaled, MTLPixelFormat.R8G8B8A8Sscaled); + // Add(Format.R16G16B16A16Uscaled, MTLPixelFormat.R16G16B16A16Uscaled); + // Add(Format.R16G16B16A16Sscaled, MTLPixelFormat.R16G16B16A16Sscaled); + // Add(Format.R32G32B32A32Uscaled, MTLPixelFormat.R32G32B32A32Uscaled); + // Add(Format.R32G32B32A32Sscaled, MTLPixelFormat.R32G32B32A32Sscaled); + // Add(Format.R10G10B10A2Snorm, MTLPixelFormat.A2B10G10R10SNormPack32); + // Add(Format.R10G10B10A2Sint, MTLPixelFormat.A2B10G10R10SintPack32); + // Add(Format.R10G10B10A2Uscaled, MTLPixelFormat.A2B10G10R10UscaledPack32); + // Add(Format.R10G10B10A2Sscaled, MTLPixelFormat.A2B10G10R10SscaledPack32); + Add(Format.Astc4x4Unorm, MTLPixelFormat.ASTC4x4LDR); + Add(Format.Astc5x4Unorm, MTLPixelFormat.ASTC5x4LDR); + Add(Format.Astc5x5Unorm, MTLPixelFormat.ASTC5x5LDR); + Add(Format.Astc6x5Unorm, MTLPixelFormat.ASTC6x5LDR); + Add(Format.Astc6x6Unorm, MTLPixelFormat.ASTC6x6LDR); + Add(Format.Astc8x5Unorm, MTLPixelFormat.ASTC8x5LDR); + Add(Format.Astc8x6Unorm, MTLPixelFormat.ASTC8x6LDR); + Add(Format.Astc8x8Unorm, MTLPixelFormat.ASTC8x8LDR); + Add(Format.Astc10x5Unorm, MTLPixelFormat.ASTC10x5LDR); + Add(Format.Astc10x6Unorm, MTLPixelFormat.ASTC10x6LDR); + Add(Format.Astc10x8Unorm, MTLPixelFormat.ASTC10x8LDR); + Add(Format.Astc10x10Unorm, MTLPixelFormat.ASTC10x10LDR); + Add(Format.Astc12x10Unorm, MTLPixelFormat.ASTC12x10LDR); + Add(Format.Astc12x12Unorm, MTLPixelFormat.ASTC12x12LDR); + Add(Format.Astc4x4Srgb, MTLPixelFormat.ASTC4x4sRGB); + Add(Format.Astc5x4Srgb, MTLPixelFormat.ASTC5x4sRGB); + Add(Format.Astc5x5Srgb, MTLPixelFormat.ASTC5x5sRGB); + Add(Format.Astc6x5Srgb, MTLPixelFormat.ASTC6x5sRGB); + Add(Format.Astc6x6Srgb, MTLPixelFormat.ASTC6x6sRGB); + Add(Format.Astc8x5Srgb, MTLPixelFormat.ASTC8x5sRGB); + Add(Format.Astc8x6Srgb, MTLPixelFormat.ASTC8x6sRGB); + Add(Format.Astc8x8Srgb, MTLPixelFormat.ASTC8x8sRGB); + Add(Format.Astc10x5Srgb, MTLPixelFormat.ASTC10x5sRGB); + Add(Format.Astc10x6Srgb, MTLPixelFormat.ASTC10x6sRGB); + Add(Format.Astc10x8Srgb, MTLPixelFormat.ASTC10x8sRGB); + Add(Format.Astc10x10Srgb, MTLPixelFormat.ASTC10x10sRGB); + Add(Format.Astc12x10Srgb, MTLPixelFormat.ASTC12x10sRGB); + Add(Format.Astc12x12Srgb, MTLPixelFormat.ASTC12x12sRGB); + Add(Format.B5G6R5Unorm, MTLPixelFormat.B5G6R5Unorm); + Add(Format.B5G5R5A1Unorm, MTLPixelFormat.BGR5A1Unorm); + Add(Format.A1B5G5R5Unorm, MTLPixelFormat.A1BGR5Unorm); + Add(Format.B8G8R8A8Unorm, MTLPixelFormat.BGRA8Unorm); + Add(Format.B8G8R8A8Srgb, MTLPixelFormat.BGRA8UnormsRGB); + } + + private static void Add(Format format, MTLPixelFormat mtlFormat) + { + _table[(int)format] = mtlFormat; + } + + public static MTLPixelFormat GetFormat(Format format) + { + var mtlFormat = _table[(int)format]; + + if (IsD24S8(format)) + { + if (!MTLDevice.CreateSystemDefaultDevice().Depth24Stencil8PixelFormatSupported) + { + mtlFormat = MTLPixelFormat.Depth32FloatStencil8; + } + } + + if (mtlFormat == MTLPixelFormat.Invalid) + { + Logger.Error?.PrintMsg(LogClass.Gpu, $"Format {format} is not supported by the host."); + } + + return mtlFormat; + } + + public static bool IsD24S8(Format format) + { + return format == Format.D24UnormS8Uint || format == Format.S8UintD24Unorm || format == Format.X8UintD24Unorm; + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/HardwareInfo.cs b/src/Ryujinx.Graphics.Metal/HardwareInfo.cs new file mode 100644 index 000000000..4b3b710f8 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/HardwareInfo.cs @@ -0,0 +1,82 @@ +using System; +using System.Runtime.InteropServices; + +namespace Ryujinx.Graphics.Metal +{ + static partial class HardwareInfoTools + { + + private readonly static IntPtr _kCFAllocatorDefault = IntPtr.Zero; + private readonly static UInt32 _kCFStringEncodingASCII = 0x0600; + private const string IOKit = "/System/Library/Frameworks/IOKit.framework/IOKit"; + private const string CoreFoundation = "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation"; + + [LibraryImport(IOKit, StringMarshalling = StringMarshalling.Utf8)] + private static partial IntPtr IOServiceMatching(string name); + + [LibraryImport(IOKit)] + private static partial IntPtr IOServiceGetMatchingService(IntPtr mainPort, IntPtr matching); + + [LibraryImport(IOKit)] + private static partial IntPtr IORegistryEntryCreateCFProperty(IntPtr entry, IntPtr key, IntPtr allocator, UInt32 options); + + [LibraryImport(CoreFoundation, StringMarshalling = StringMarshalling.Utf8)] + private static partial IntPtr CFStringCreateWithCString(IntPtr allocator, string cString, UInt32 encoding); + + [LibraryImport(CoreFoundation)] + [return: MarshalAs(UnmanagedType.U1)] + public static partial bool CFStringGetCString(IntPtr theString, IntPtr buffer, long bufferSizes, UInt32 encoding); + + [LibraryImport(CoreFoundation)] + public static partial IntPtr CFDataGetBytePtr(IntPtr theData); + + static string GetNameFromId(uint id) + { + return id switch + { + 0x1002 => "AMD", + 0x106B => "Apple", + 0x10DE => "NVIDIA", + 0x13B5 => "ARM", + 0x8086 => "Intel", + _ => $"0x{id:X}" + }; + } + + public static string GetVendor() + { + var serviceDict = IOServiceMatching("IOGPU"); + var service = IOServiceGetMatchingService(IntPtr.Zero, serviceDict); + var cfString = CFStringCreateWithCString(_kCFAllocatorDefault, "vendor-id", _kCFStringEncodingASCII); + var cfProperty = IORegistryEntryCreateCFProperty(service, cfString, _kCFAllocatorDefault, 0); + + byte[] buffer = new byte[4]; + var bufferPtr = CFDataGetBytePtr(cfProperty); + Marshal.Copy(bufferPtr, buffer, 0, buffer.Length); + + var vendorId = BitConverter.ToUInt32(buffer); + + return GetNameFromId(vendorId); + } + + public static string GetModel() + { + var serviceDict = IOServiceMatching("IOGPU"); + var service = IOServiceGetMatchingService(IntPtr.Zero, serviceDict); + var cfString = CFStringCreateWithCString(_kCFAllocatorDefault, "model", _kCFStringEncodingASCII); + var cfProperty = IORegistryEntryCreateCFProperty(service, cfString, _kCFAllocatorDefault, 0); + + char[] buffer = new char[64]; + IntPtr bufferPtr = Marshal.AllocHGlobal(buffer.Length); + + if (CFStringGetCString(cfProperty, bufferPtr, buffer.Length, _kCFStringEncodingASCII)) + { + var model = Marshal.PtrToStringUTF8(bufferPtr); + Marshal.FreeHGlobal(bufferPtr); + return model; + } + + return ""; + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/HashTableSlim.cs b/src/Ryujinx.Graphics.Metal/HashTableSlim.cs new file mode 100644 index 000000000..a27a53d47 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/HashTableSlim.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace Ryujinx.Graphics.Metal +{ + interface IRefEquatable + { + bool Equals(ref T other); + } + + class HashTableSlim where TKey : IRefEquatable + { + private const int TotalBuckets = 16; // Must be power of 2 + private const int TotalBucketsMask = TotalBuckets - 1; + + private struct Entry + { + public int Hash; + public TKey Key; + public TValue Value; + } + + private struct Bucket + { + public int Length; + public Entry[] Entries; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly Span AsSpan() + { + return Entries == null ? Span.Empty : Entries.AsSpan(0, Length); + } + } + + private readonly Bucket[] _hashTable = new Bucket[TotalBuckets]; + + public IEnumerable Keys + { + get + { + foreach (Bucket bucket in _hashTable) + { + for (int i = 0; i < bucket.Length; i++) + { + yield return bucket.Entries[i].Key; + } + } + } + } + + public IEnumerable Values + { + get + { + foreach (Bucket bucket in _hashTable) + { + for (int i = 0; i < bucket.Length; i++) + { + yield return bucket.Entries[i].Value; + } + } + } + } + + public void Add(ref TKey key, TValue value) + { + var entry = new Entry + { + Hash = key.GetHashCode(), + Key = key, + Value = value, + }; + + int hashCode = key.GetHashCode(); + int bucketIndex = hashCode & TotalBucketsMask; + + ref var bucket = ref _hashTable[bucketIndex]; + if (bucket.Entries != null) + { + int index = bucket.Length; + + if (index >= bucket.Entries.Length) + { + Array.Resize(ref bucket.Entries, index + 1); + } + + bucket.Entries[index] = entry; + } + else + { + bucket.Entries = new[] + { + entry, + }; + } + + bucket.Length++; + } + + public bool Remove(ref TKey key) + { + int hashCode = key.GetHashCode(); + + ref var bucket = ref _hashTable[hashCode & TotalBucketsMask]; + var entries = bucket.AsSpan(); + for (int i = 0; i < entries.Length; i++) + { + ref var entry = ref entries[i]; + + if (entry.Hash == hashCode && entry.Key.Equals(ref key)) + { + entries[(i + 1)..].CopyTo(entries[i..]); + bucket.Length--; + + return true; + } + } + + return false; + } + + public bool TryGetValue(ref TKey key, out TValue value) + { + int hashCode = key.GetHashCode(); + + var entries = _hashTable[hashCode & TotalBucketsMask].AsSpan(); + for (int i = 0; i < entries.Length; i++) + { + ref var entry = ref entries[i]; + + if (entry.Hash == hashCode && entry.Key.Equals(ref key)) + { + value = entry.Value; + return true; + } + } + + value = default; + return false; + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/HelperShader.cs b/src/Ryujinx.Graphics.Metal/HelperShader.cs new file mode 100644 index 000000000..53f503207 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/HelperShader.cs @@ -0,0 +1,868 @@ +using Ryujinx.Common; +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using Ryujinx.Graphics.Shader; +using Ryujinx.Graphics.Shader.Translation; +using SharpMetal.Metal; +using System; +using System.Collections.Generic; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class HelperShader : IDisposable + { + private const int ConvertElementsPerWorkgroup = 32 * 100; // Work group size of 32 times 100 elements. + private const string ShadersSourcePath = "/Ryujinx.Graphics.Metal/Shaders"; + private readonly MetalRenderer _renderer; + private readonly Pipeline _pipeline; + private MTLDevice _device; + + private readonly ISampler _samplerLinear; + private readonly ISampler _samplerNearest; + private readonly IProgram _programColorBlitF; + private readonly IProgram _programColorBlitI; + private readonly IProgram _programColorBlitU; + private readonly IProgram _programColorBlitMsF; + private readonly IProgram _programColorBlitMsI; + private readonly IProgram _programColorBlitMsU; + private readonly List _programsColorClearF = new(); + private readonly List _programsColorClearI = new(); + private readonly List _programsColorClearU = new(); + private readonly IProgram _programDepthStencilClear; + private readonly IProgram _programStrideChange; + private readonly IProgram _programConvertD32S8ToD24S8; + private readonly IProgram _programConvertIndexBuffer; + private readonly IProgram _programDepthBlit; + private readonly IProgram _programDepthBlitMs; + private readonly IProgram _programStencilBlit; + private readonly IProgram _programStencilBlitMs; + + private readonly EncoderState _helperShaderState = new(); + + public HelperShader(MTLDevice device, MetalRenderer renderer, Pipeline pipeline) + { + _device = device; + _renderer = renderer; + _pipeline = pipeline; + + _samplerNearest = new SamplerHolder(renderer, _device, SamplerCreateInfo.Create(MinFilter.Nearest, MagFilter.Nearest)); + _samplerLinear = new SamplerHolder(renderer, _device, SamplerCreateInfo.Create(MinFilter.Linear, MagFilter.Linear)); + + var blitResourceLayout = new ResourceLayoutBuilder() + .Add(ResourceStages.Vertex, ResourceType.UniformBuffer, 0) + .Add(ResourceStages.Fragment, ResourceType.TextureAndSampler, 0).Build(); + + var blitSource = ReadMsl("Blit.metal"); + + var blitSourceF = blitSource.Replace("FORMAT", "float", StringComparison.Ordinal); + _programColorBlitF = new Program(renderer, device, [ + new ShaderSource(blitSourceF, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl) + ], blitResourceLayout); + + var blitSourceI = blitSource.Replace("FORMAT", "int"); + _programColorBlitI = new Program(renderer, device, [ + new ShaderSource(blitSourceI, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(blitSourceI, ShaderStage.Vertex, TargetLanguage.Msl) + ], blitResourceLayout); + + var blitSourceU = blitSource.Replace("FORMAT", "uint"); + _programColorBlitU = new Program(renderer, device, [ + new ShaderSource(blitSourceU, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(blitSourceU, ShaderStage.Vertex, TargetLanguage.Msl) + ], blitResourceLayout); + + var blitMsSource = ReadMsl("BlitMs.metal"); + + var blitMsSourceF = blitMsSource.Replace("FORMAT", "float"); + _programColorBlitMsF = new Program(renderer, device, [ + new ShaderSource(blitMsSourceF, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(blitMsSourceF, ShaderStage.Vertex, TargetLanguage.Msl) + ], blitResourceLayout); + + var blitMsSourceI = blitMsSource.Replace("FORMAT", "int"); + _programColorBlitMsI = new Program(renderer, device, [ + new ShaderSource(blitMsSourceI, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(blitMsSourceI, ShaderStage.Vertex, TargetLanguage.Msl) + ], blitResourceLayout); + + var blitMsSourceU = blitMsSource.Replace("FORMAT", "uint"); + _programColorBlitMsU = new Program(renderer, device, [ + new ShaderSource(blitMsSourceU, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(blitMsSourceU, ShaderStage.Vertex, TargetLanguage.Msl) + ], blitResourceLayout); + + var colorClearResourceLayout = new ResourceLayoutBuilder() + .Add(ResourceStages.Fragment, ResourceType.UniformBuffer, 0).Build(); + + var colorClearSource = ReadMsl("ColorClear.metal"); + + for (int i = 0; i < Constants.MaxColorAttachments; i++) + { + var crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "float"); + _programsColorClearF.Add(new Program(renderer, device, [ + new ShaderSource(crntSource, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(crntSource, ShaderStage.Vertex, TargetLanguage.Msl) + ], colorClearResourceLayout)); + } + + for (int i = 0; i < Constants.MaxColorAttachments; i++) + { + var crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "int"); + _programsColorClearI.Add(new Program(renderer, device, [ + new ShaderSource(crntSource, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(crntSource, ShaderStage.Vertex, TargetLanguage.Msl) + ], colorClearResourceLayout)); + } + + for (int i = 0; i < Constants.MaxColorAttachments; i++) + { + var crntSource = colorClearSource.Replace("COLOR_ATTACHMENT_INDEX", i.ToString()).Replace("FORMAT", "uint"); + _programsColorClearU.Add(new Program(renderer, device, [ + new ShaderSource(crntSource, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(crntSource, ShaderStage.Vertex, TargetLanguage.Msl) + ], colorClearResourceLayout)); + } + + var depthStencilClearSource = ReadMsl("DepthStencilClear.metal"); + _programDepthStencilClear = new Program(renderer, device, [ + new ShaderSource(depthStencilClearSource, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(depthStencilClearSource, ShaderStage.Vertex, TargetLanguage.Msl) + ], colorClearResourceLayout); + + var strideChangeResourceLayout = new ResourceLayoutBuilder() + .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) + .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) + .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build(); + + var strideChangeSource = ReadMsl("ChangeBufferStride.metal"); + _programStrideChange = new Program(renderer, device, [ + new ShaderSource(strideChangeSource, ShaderStage.Compute, TargetLanguage.Msl) + ], strideChangeResourceLayout, new ComputeSize(64, 1, 1)); + + var convertD32S8ToD24S8ResourceLayout = new ResourceLayoutBuilder() + .Add(ResourceStages.Compute, ResourceType.UniformBuffer, 0) + .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) + .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true).Build(); + + var convertD32S8ToD24S8Source = ReadMsl("ConvertD32S8ToD24S8.metal"); + _programConvertD32S8ToD24S8 = new Program(renderer, device, [ + new ShaderSource(convertD32S8ToD24S8Source, ShaderStage.Compute, TargetLanguage.Msl) + ], convertD32S8ToD24S8ResourceLayout, new ComputeSize(64, 1, 1)); + + var convertIndexBufferLayout = new ResourceLayoutBuilder() + .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 1) + .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 2, true) + .Add(ResourceStages.Compute, ResourceType.StorageBuffer, 3).Build(); + + var convertIndexBufferSource = ReadMsl("ConvertIndexBuffer.metal"); + _programConvertIndexBuffer = new Program(renderer, device, [ + new ShaderSource(convertIndexBufferSource, ShaderStage.Compute, TargetLanguage.Msl) + ], convertIndexBufferLayout, new ComputeSize(16, 1, 1)); + + var depthBlitSource = ReadMsl("DepthBlit.metal"); + _programDepthBlit = new Program(renderer, device, [ + new ShaderSource(depthBlitSource, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl) + ], blitResourceLayout); + + var depthBlitMsSource = ReadMsl("DepthBlitMs.metal"); + _programDepthBlitMs = new Program(renderer, device, [ + new ShaderSource(depthBlitMsSource, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl) + ], blitResourceLayout); + + var stencilBlitSource = ReadMsl("StencilBlit.metal"); + _programStencilBlit = new Program(renderer, device, [ + new ShaderSource(stencilBlitSource, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl) + ], blitResourceLayout); + + var stencilBlitMsSource = ReadMsl("StencilBlitMs.metal"); + _programStencilBlitMs = new Program(renderer, device, [ + new ShaderSource(stencilBlitMsSource, ShaderStage.Fragment, TargetLanguage.Msl), + new ShaderSource(blitSourceF, ShaderStage.Vertex, TargetLanguage.Msl) + ], blitResourceLayout); + } + + private static string ReadMsl(string fileName) + { + var msl = EmbeddedResources.ReadAllText(string.Join('/', ShadersSourcePath, fileName)); + +#pragma warning disable IDE0055 // Disable formatting + msl = msl.Replace("CONSTANT_BUFFERS_INDEX", $"{Constants.ConstantBuffersIndex}") + .Replace("STORAGE_BUFFERS_INDEX", $"{Constants.StorageBuffersIndex}") + .Replace("TEXTURES_INDEX", $"{Constants.TexturesIndex}") + .Replace("IMAGES_INDEX", $"{Constants.ImagesIndex}"); +#pragma warning restore IDE0055 + + return msl; + } + + public unsafe void BlitColor( + CommandBufferScoped cbs, + Texture src, + Texture dst, + Extents2D srcRegion, + Extents2D dstRegion, + bool linearFilter, + bool clear = false) + { + _pipeline.SwapState(_helperShaderState); + + const int RegionBufferSize = 16; + + var sampler = linearFilter ? _samplerLinear : _samplerNearest; + + _pipeline.SetTextureAndSampler(ShaderStage.Fragment, 0, src, sampler); + + Span region = stackalloc float[RegionBufferSize / sizeof(float)]; + + region[0] = srcRegion.X1 / (float)src.Width; + region[1] = srcRegion.X2 / (float)src.Width; + region[2] = srcRegion.Y1 / (float)src.Height; + region[3] = srcRegion.Y2 / (float)src.Height; + + if (dstRegion.X1 > dstRegion.X2) + { + (region[0], region[1]) = (region[1], region[0]); + } + + if (dstRegion.Y1 > dstRegion.Y2) + { + (region[2], region[3]) = (region[3], region[2]); + } + + using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, RegionBufferSize); + buffer.Holder.SetDataUnchecked(buffer.Offset, region); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); + + var rect = new Rectangle( + MathF.Min(dstRegion.X1, dstRegion.X2), + MathF.Min(dstRegion.Y1, dstRegion.Y2), + MathF.Abs(dstRegion.X2 - dstRegion.X1), + MathF.Abs(dstRegion.Y2 - dstRegion.Y1)); + + Span viewports = stackalloc Viewport[16]; + + viewports[0] = new Viewport( + rect, + ViewportSwizzle.PositiveX, + ViewportSwizzle.PositiveY, + ViewportSwizzle.PositiveZ, + ViewportSwizzle.PositiveW, + 0f, + 1f); + + bool dstIsDepthOrStencil = dst.Info.Format.IsDepthOrStencil(); + + if (dstIsDepthOrStencil) + { + // TODO: Depth & stencil blit! + Logger.Warning?.PrintMsg(LogClass.Gpu, "Requested a depth or stencil blit!"); + _pipeline.SwapState(null); + return; + } + + var debugGroupName = "Blit Color "; + + if (src.Info.Target.IsMultisample()) + { + if (dst.Info.Format.IsSint()) + { + debugGroupName += "MS Int"; + _pipeline.SetProgram(_programColorBlitMsI); + } + else if (dst.Info.Format.IsUint()) + { + debugGroupName += "MS UInt"; + _pipeline.SetProgram(_programColorBlitMsU); + } + else + { + debugGroupName += "MS Float"; + _pipeline.SetProgram(_programColorBlitMsF); + } + } + else + { + if (dst.Info.Format.IsSint()) + { + debugGroupName += "Int"; + _pipeline.SetProgram(_programColorBlitI); + } + else if (dst.Info.Format.IsUint()) + { + debugGroupName += "UInt"; + _pipeline.SetProgram(_programColorBlitU); + } + else + { + debugGroupName += "Float"; + _pipeline.SetProgram(_programColorBlitF); + } + } + + int dstWidth = dst.Width; + int dstHeight = dst.Height; + + Span> scissors = stackalloc Rectangle[16]; + + scissors[0] = new Rectangle(0, 0, dstWidth, dstHeight); + + _pipeline.SetRenderTargets([dst], null); + _pipeline.SetScissors(scissors); + + _pipeline.SetClearLoadAction(clear); + + _pipeline.SetViewports(viewports); + _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); + _pipeline.Draw(4, 1, 0, 0, debugGroupName); + + // Cleanup + if (clear) + { + _pipeline.SetClearLoadAction(false); + } + + // Restore previous state + _pipeline.SwapState(null); + } + + public unsafe void BlitDepthStencil( + CommandBufferScoped cbs, + Texture src, + Texture dst, + Extents2D srcRegion, + Extents2D dstRegion) + { + _pipeline.SwapState(_helperShaderState); + + const int RegionBufferSize = 16; + + Span region = stackalloc float[RegionBufferSize / sizeof(float)]; + + region[0] = srcRegion.X1 / (float)src.Width; + region[1] = srcRegion.X2 / (float)src.Width; + region[2] = srcRegion.Y1 / (float)src.Height; + region[3] = srcRegion.Y2 / (float)src.Height; + + if (dstRegion.X1 > dstRegion.X2) + { + (region[0], region[1]) = (region[1], region[0]); + } + + if (dstRegion.Y1 > dstRegion.Y2) + { + (region[2], region[3]) = (region[3], region[2]); + } + + using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, RegionBufferSize); + buffer.Holder.SetDataUnchecked(buffer.Offset, region); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); + + Span viewports = stackalloc Viewport[16]; + + var rect = new Rectangle( + MathF.Min(dstRegion.X1, dstRegion.X2), + MathF.Min(dstRegion.Y1, dstRegion.Y2), + MathF.Abs(dstRegion.X2 - dstRegion.X1), + MathF.Abs(dstRegion.Y2 - dstRegion.Y1)); + + viewports[0] = new Viewport( + rect, + ViewportSwizzle.PositiveX, + ViewportSwizzle.PositiveY, + ViewportSwizzle.PositiveZ, + ViewportSwizzle.PositiveW, + 0f, + 1f); + + int dstWidth = dst.Width; + int dstHeight = dst.Height; + + Span> scissors = stackalloc Rectangle[16]; + + scissors[0] = new Rectangle(0, 0, dstWidth, dstHeight); + + _pipeline.SetRenderTargets([], dst); + _pipeline.SetScissors(scissors); + _pipeline.SetViewports(viewports); + _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); + + if (src.Info.Format is + Format.D16Unorm or + Format.D32Float or + Format.X8UintD24Unorm or + Format.D24UnormS8Uint or + Format.D32FloatS8Uint or + Format.S8UintD24Unorm) + { + var depthTexture = CreateDepthOrStencilView(src, DepthStencilMode.Depth); + + BlitDepthStencilDraw(depthTexture, isDepth: true); + + if (depthTexture != src) + { + depthTexture.Release(); + } + } + + if (src.Info.Format is + Format.S8Uint or + Format.D24UnormS8Uint or + Format.D32FloatS8Uint or + Format.S8UintD24Unorm) + { + var stencilTexture = CreateDepthOrStencilView(src, DepthStencilMode.Stencil); + + BlitDepthStencilDraw(stencilTexture, isDepth: false); + + if (stencilTexture != src) + { + stencilTexture.Release(); + } + } + + // Restore previous state + _pipeline.SwapState(null); + } + + private static Texture CreateDepthOrStencilView(Texture depthStencilTexture, DepthStencilMode depthStencilMode) + { + if (depthStencilTexture.Info.DepthStencilMode == depthStencilMode) + { + return depthStencilTexture; + } + + return (Texture)depthStencilTexture.CreateView(new TextureCreateInfo( + depthStencilTexture.Info.Width, + depthStencilTexture.Info.Height, + depthStencilTexture.Info.Depth, + depthStencilTexture.Info.Levels, + depthStencilTexture.Info.Samples, + depthStencilTexture.Info.BlockWidth, + depthStencilTexture.Info.BlockHeight, + depthStencilTexture.Info.BytesPerPixel, + depthStencilTexture.Info.Format, + depthStencilMode, + depthStencilTexture.Info.Target, + SwizzleComponent.Red, + SwizzleComponent.Green, + SwizzleComponent.Blue, + SwizzleComponent.Alpha), 0, 0); + } + + private void BlitDepthStencilDraw(Texture src, bool isDepth) + { + // TODO: Check this https://github.com/Ryujinx/Ryujinx/pull/5003/ + _pipeline.SetTextureAndSampler(ShaderStage.Fragment, 0, src, _samplerNearest); + + string debugGroupName; + + if (isDepth) + { + debugGroupName = "Depth Blit"; + _pipeline.SetProgram(src.Info.Target.IsMultisample() ? _programDepthBlitMs : _programDepthBlit); + _pipeline.SetDepthTest(new DepthTestDescriptor(true, true, CompareOp.Always)); + } + else + { + debugGroupName = "Stencil Blit"; + _pipeline.SetProgram(src.Info.Target.IsMultisample() ? _programStencilBlitMs : _programStencilBlit); + _pipeline.SetStencilTest(CreateStencilTestDescriptor(true)); + } + + _pipeline.Draw(4, 1, 0, 0, debugGroupName); + + if (isDepth) + { + _pipeline.SetDepthTest(new DepthTestDescriptor(false, false, CompareOp.Always)); + } + else + { + _pipeline.SetStencilTest(CreateStencilTestDescriptor(false)); + } + } + + public unsafe void DrawTexture( + ITexture src, + ISampler srcSampler, + Extents2DF srcRegion, + Extents2DF dstRegion) + { + // Save current state + var state = _pipeline.SavePredrawState(); + + _pipeline.SetFaceCulling(false, Face.Front); + _pipeline.SetStencilTest(new StencilTestDescriptor()); + _pipeline.SetDepthTest(new DepthTestDescriptor()); + + const int RegionBufferSize = 16; + + _pipeline.SetTextureAndSampler(ShaderStage.Fragment, 0, src, srcSampler); + + Span region = stackalloc float[RegionBufferSize / sizeof(float)]; + + region[0] = srcRegion.X1 / src.Width; + region[1] = srcRegion.X2 / src.Width; + region[2] = srcRegion.Y1 / src.Height; + region[3] = srcRegion.Y2 / src.Height; + + if (dstRegion.X1 > dstRegion.X2) + { + (region[0], region[1]) = (region[1], region[0]); + } + + if (dstRegion.Y1 > dstRegion.Y2) + { + (region[2], region[3]) = (region[3], region[2]); + } + + var bufferHandle = _renderer.BufferManager.CreateWithHandle(RegionBufferSize); + _renderer.BufferManager.SetData(bufferHandle, 0, region); + _pipeline.SetUniformBuffers([new BufferAssignment(0, new BufferRange(bufferHandle, 0, RegionBufferSize))]); + + Span viewports = stackalloc Viewport[16]; + + var rect = new Rectangle( + MathF.Min(dstRegion.X1, dstRegion.X2), + MathF.Min(dstRegion.Y1, dstRegion.Y2), + MathF.Abs(dstRegion.X2 - dstRegion.X1), + MathF.Abs(dstRegion.Y2 - dstRegion.Y1)); + + viewports[0] = new Viewport( + rect, + ViewportSwizzle.PositiveX, + ViewportSwizzle.PositiveY, + ViewportSwizzle.PositiveZ, + ViewportSwizzle.PositiveW, + 0f, + 1f); + + _pipeline.SetProgram(_programColorBlitF); + _pipeline.SetViewports(viewports); + _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); + _pipeline.Draw(4, 1, 0, 0, "Draw Texture"); + + _renderer.BufferManager.Delete(bufferHandle); + + // Restore previous state + _pipeline.RestorePredrawState(state); + } + + public void ConvertI8ToI16(CommandBufferScoped cbs, BufferHolder src, BufferHolder dst, int srcOffset, int size) + { + ChangeStride(cbs, src, dst, srcOffset, size, 1, 2); + } + + public unsafe void ChangeStride( + CommandBufferScoped cbs, + BufferHolder src, + BufferHolder dst, + int srcOffset, + int size, + int stride, + int newStride) + { + int elems = size / stride; + + var srcBuffer = src.GetBuffer(); + var dstBuffer = dst.GetBuffer(); + + const int ParamsBufferSize = 4 * sizeof(int); + + // Save current state + _pipeline.SwapState(_helperShaderState); + + Span shaderParams = stackalloc int[ParamsBufferSize / sizeof(int)]; + + shaderParams[0] = stride; + shaderParams[1] = newStride; + shaderParams[2] = size; + shaderParams[3] = srcOffset; + + using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize); + buffer.Holder.SetDataUnchecked(buffer.Offset, shaderParams); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); + + Span> sbRanges = new Auto[2]; + + sbRanges[0] = srcBuffer; + sbRanges[1] = dstBuffer; + _pipeline.SetStorageBuffers(1, sbRanges); + + _pipeline.SetProgram(_programStrideChange); + _pipeline.DispatchCompute(1 + elems / ConvertElementsPerWorkgroup, 1, 1, "Change Stride"); + + // Restore previous state + _pipeline.SwapState(null); + } + + public unsafe void ConvertD32S8ToD24S8(CommandBufferScoped cbs, BufferHolder src, Auto dstBuffer, int pixelCount, int dstOffset) + { + int inSize = pixelCount * 2 * sizeof(int); + + var srcBuffer = src.GetBuffer(); + + const int ParamsBufferSize = sizeof(int) * 2; + + // Save current state + _pipeline.SwapState(_helperShaderState); + + Span shaderParams = stackalloc int[2]; + + shaderParams[0] = pixelCount; + shaderParams[1] = dstOffset; + + using var buffer = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize); + buffer.Holder.SetDataUnchecked(buffer.Offset, shaderParams); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); + + Span> sbRanges = new Auto[2]; + + sbRanges[0] = srcBuffer; + sbRanges[1] = dstBuffer; + _pipeline.SetStorageBuffers(1, sbRanges); + + _pipeline.SetProgram(_programConvertD32S8ToD24S8); + _pipeline.DispatchCompute(1 + inSize / ConvertElementsPerWorkgroup, 1, 1, "D32S8 to D24S8 Conversion"); + + // Restore previous state + _pipeline.SwapState(null); + } + + public void ConvertIndexBuffer( + CommandBufferScoped cbs, + BufferHolder src, + BufferHolder dst, + IndexBufferPattern pattern, + int indexSize, + int srcOffset, + int indexCount) + { + // TODO: Support conversion with primitive restart enabled. + + int primitiveCount = pattern.GetPrimitiveCount(indexCount); + int outputIndexSize = 4; + + var srcBuffer = src.GetBuffer(); + var dstBuffer = dst.GetBuffer(); + + const int ParamsBufferSize = 16 * sizeof(int); + + // Save current state + _pipeline.SwapState(_helperShaderState); + + Span shaderParams = stackalloc int[ParamsBufferSize / sizeof(int)]; + + shaderParams[8] = pattern.PrimitiveVertices; + shaderParams[9] = pattern.PrimitiveVerticesOut; + shaderParams[10] = indexSize; + shaderParams[11] = outputIndexSize; + shaderParams[12] = pattern.BaseIndex; + shaderParams[13] = pattern.IndexStride; + shaderParams[14] = srcOffset; + shaderParams[15] = primitiveCount; + + pattern.OffsetIndex.CopyTo(shaderParams[..pattern.OffsetIndex.Length]); + + using var patternScoped = _renderer.BufferManager.ReserveOrCreate(cbs, ParamsBufferSize); + patternScoped.Holder.SetDataUnchecked(patternScoped.Offset, shaderParams); + + Span> sbRanges = new Auto[2]; + + sbRanges[0] = srcBuffer; + sbRanges[1] = dstBuffer; + _pipeline.SetStorageBuffers(1, sbRanges); + _pipeline.SetStorageBuffers([new BufferAssignment(3, patternScoped.Range)]); + + _pipeline.SetProgram(_programConvertIndexBuffer); + _pipeline.DispatchCompute(BitUtils.DivRoundUp(primitiveCount, 16), 1, 1, "Convert Index Buffer"); + + // Restore previous state + _pipeline.SwapState(null); + } + + public unsafe void ClearColor( + int index, + ReadOnlySpan clearColor, + uint componentMask, + int dstWidth, + int dstHeight, + Format format) + { + // Keep original scissor + DirtyFlags clearFlags = DirtyFlags.All & (~DirtyFlags.Scissors); + + // Save current state + EncoderState originalState = _pipeline.SwapState(_helperShaderState, clearFlags, false); + + // Inherit some state without fully recreating render pipeline. + RenderTargetCopy save = _helperShaderState.InheritForClear(originalState, false, index); + + const int ClearColorBufferSize = 16; + + // TODO: Flush + + using var buffer = _renderer.BufferManager.ReserveOrCreate(_pipeline.Cbs, ClearColorBufferSize); + buffer.Holder.SetDataUnchecked(buffer.Offset, clearColor); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); + + Span viewports = stackalloc Viewport[16]; + + // TODO: Set exact viewport! + viewports[0] = new Viewport( + new Rectangle(0, 0, dstWidth, dstHeight), + ViewportSwizzle.PositiveX, + ViewportSwizzle.PositiveY, + ViewportSwizzle.PositiveZ, + ViewportSwizzle.PositiveW, + 0f, + 1f); + + Span componentMasks = stackalloc uint[index + 1]; + componentMasks[index] = componentMask; + + var debugGroupName = "Clear Color "; + + if (format.IsSint()) + { + debugGroupName += "Int"; + _pipeline.SetProgram(_programsColorClearI[index]); + } + else if (format.IsUint()) + { + debugGroupName += "UInt"; + _pipeline.SetProgram(_programsColorClearU[index]); + } + else + { + debugGroupName += "Float"; + _pipeline.SetProgram(_programsColorClearF[index]); + } + + _pipeline.SetBlendState(index, new BlendDescriptor()); + _pipeline.SetFaceCulling(false, Face.Front); + _pipeline.SetDepthTest(new DepthTestDescriptor(false, false, CompareOp.Always)); + _pipeline.SetRenderTargetColorMasks(componentMasks); + _pipeline.SetViewports(viewports); + _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); + _pipeline.Draw(4, 1, 0, 0, debugGroupName); + + // Restore previous state + _pipeline.SwapState(null, clearFlags, false); + + _helperShaderState.Restore(save); + } + + public unsafe void ClearDepthStencil( + float depthValue, + bool depthMask, + int stencilValue, + int stencilMask, + int dstWidth, + int dstHeight) + { + // Keep original scissor + DirtyFlags clearFlags = DirtyFlags.All & (~DirtyFlags.Scissors); + var helperScissors = _helperShaderState.Scissors; + + // Save current state + EncoderState originalState = _pipeline.SwapState(_helperShaderState, clearFlags, false); + + // Inherit some state without fully recreating render pipeline. + RenderTargetCopy save = _helperShaderState.InheritForClear(originalState, true); + + const int ClearDepthBufferSize = 16; + + using var buffer = _renderer.BufferManager.ReserveOrCreate(_pipeline.Cbs, ClearDepthBufferSize); + buffer.Holder.SetDataUnchecked(buffer.Offset, new ReadOnlySpan(ref depthValue)); + _pipeline.SetUniformBuffers([new BufferAssignment(0, buffer.Range)]); + + Span viewports = stackalloc Viewport[1]; + + viewports[0] = new Viewport( + new Rectangle(0, 0, dstWidth, dstHeight), + ViewportSwizzle.PositiveX, + ViewportSwizzle.PositiveY, + ViewportSwizzle.PositiveZ, + ViewportSwizzle.PositiveW, + 0f, + 1f); + + _pipeline.SetProgram(_programDepthStencilClear); + _pipeline.SetFaceCulling(false, Face.Front); + _pipeline.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip); + _pipeline.SetViewports(viewports); + _pipeline.SetDepthTest(new DepthTestDescriptor(true, depthMask, CompareOp.Always)); + _pipeline.SetStencilTest(CreateStencilTestDescriptor(stencilMask != 0, stencilValue, 0xFF, stencilMask)); + _pipeline.Draw(4, 1, 0, 0, "Clear Depth Stencil"); + + // Cleanup + _pipeline.SetDepthTest(new DepthTestDescriptor(false, false, CompareOp.Always)); + _pipeline.SetStencilTest(CreateStencilTestDescriptor(false)); + + // Restore previous state + _pipeline.SwapState(null, clearFlags, false); + + _helperShaderState.Restore(save); + } + + private static StencilTestDescriptor CreateStencilTestDescriptor( + bool enabled, + int refValue = 0, + int compareMask = 0xff, + int writeMask = 0xff) + { + return new StencilTestDescriptor( + enabled, + CompareOp.Always, + StencilOp.Replace, + StencilOp.Replace, + StencilOp.Replace, + refValue, + compareMask, + writeMask, + CompareOp.Always, + StencilOp.Replace, + StencilOp.Replace, + StencilOp.Replace, + refValue, + compareMask, + writeMask); + } + + public void Dispose() + { + _programColorBlitF.Dispose(); + _programColorBlitI.Dispose(); + _programColorBlitU.Dispose(); + _programColorBlitMsF.Dispose(); + _programColorBlitMsI.Dispose(); + _programColorBlitMsU.Dispose(); + + foreach (var programColorClear in _programsColorClearF) + { + programColorClear.Dispose(); + } + + foreach (var programColorClear in _programsColorClearU) + { + programColorClear.Dispose(); + } + + foreach (var programColorClear in _programsColorClearI) + { + programColorClear.Dispose(); + } + + _programDepthStencilClear.Dispose(); + _pipeline.Dispose(); + _samplerLinear.Dispose(); + _samplerNearest.Dispose(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/IdList.cs b/src/Ryujinx.Graphics.Metal/IdList.cs new file mode 100644 index 000000000..2c15a80ef --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/IdList.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; + +namespace Ryujinx.Graphics.Metal +{ + class IdList where T : class + { + private readonly List _list; + private int _freeMin; + + public IdList() + { + _list = new List(); + _freeMin = 0; + } + + public int Add(T value) + { + int id; + int count = _list.Count; + id = _list.IndexOf(null, _freeMin); + + if ((uint)id < (uint)count) + { + _list[id] = value; + } + else + { + id = count; + _freeMin = id + 1; + + _list.Add(value); + } + + return id + 1; + } + + public void Remove(int id) + { + id--; + + int count = _list.Count; + + if ((uint)id >= (uint)count) + { + return; + } + + if (id + 1 == count) + { + // Trim unused items. + int removeIndex = id; + + while (removeIndex > 0 && _list[removeIndex - 1] == null) + { + removeIndex--; + } + + _list.RemoveRange(removeIndex, count - removeIndex); + + if (_freeMin > removeIndex) + { + _freeMin = removeIndex; + } + } + else + { + _list[id] = null; + + if (_freeMin > id) + { + _freeMin = id; + } + } + } + + public bool TryGetValue(int id, out T value) + { + id--; + + try + { + if ((uint)id < (uint)_list.Count) + { + value = _list[id]; + return value != null; + } + + value = null; + return false; + } + catch (ArgumentOutOfRangeException) + { + value = null; + return false; + } + catch (IndexOutOfRangeException) + { + value = null; + return false; + } + } + + public void Clear() + { + _list.Clear(); + _freeMin = 0; + } + + public IEnumerator GetEnumerator() + { + for (int i = 0; i < _list.Count; i++) + { + if (_list[i] != null) + { + yield return _list[i]; + } + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/ImageArray.cs b/src/Ryujinx.Graphics.Metal/ImageArray.cs new file mode 100644 index 000000000..9fa0df09d --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/ImageArray.cs @@ -0,0 +1,74 @@ +using Ryujinx.Graphics.GAL; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + internal class ImageArray : IImageArray + { + private readonly TextureRef[] _textureRefs; + private readonly TextureBuffer[] _bufferTextureRefs; + + private readonly bool _isBuffer; + private readonly Pipeline _pipeline; + + public ImageArray(int size, bool isBuffer, Pipeline pipeline) + { + if (isBuffer) + { + _bufferTextureRefs = new TextureBuffer[size]; + } + else + { + _textureRefs = new TextureRef[size]; + } + + _isBuffer = isBuffer; + _pipeline = pipeline; + } + + public void SetImages(int index, ITexture[] images) + { + for (int i = 0; i < images.Length; i++) + { + ITexture image = images[i]; + + if (image is TextureBuffer textureBuffer) + { + _bufferTextureRefs[index + i] = textureBuffer; + } + else if (image is Texture texture) + { + _textureRefs[index + i].Storage = texture; + } + else if (!_isBuffer) + { + _textureRefs[index + i].Storage = null; + } + else + { + _bufferTextureRefs[index + i] = null; + } + } + + SetDirty(); + } + + public TextureRef[] GetTextureRefs() + { + return _textureRefs; + } + + public TextureBuffer[] GetBufferTextureRefs() + { + return _bufferTextureRefs; + } + + private void SetDirty() + { + _pipeline.DirtyImages(); + } + + public void Dispose() { } + } +} diff --git a/src/Ryujinx.Graphics.Metal/IndexBufferPattern.cs b/src/Ryujinx.Graphics.Metal/IndexBufferPattern.cs new file mode 100644 index 000000000..24e3222fe --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/IndexBufferPattern.cs @@ -0,0 +1,118 @@ +using Ryujinx.Graphics.GAL; +using System; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + internal class IndexBufferPattern : IDisposable + { + public int PrimitiveVertices { get; } + public int PrimitiveVerticesOut { get; } + public int BaseIndex { get; } + public int[] OffsetIndex { get; } + public int IndexStride { get; } + public bool RepeatStart { get; } + + private readonly MetalRenderer _renderer; + private int _currentSize; + private BufferHandle _repeatingBuffer; + + public IndexBufferPattern(MetalRenderer renderer, + int primitiveVertices, + int primitiveVerticesOut, + int baseIndex, + int[] offsetIndex, + int indexStride, + bool repeatStart) + { + PrimitiveVertices = primitiveVertices; + PrimitiveVerticesOut = primitiveVerticesOut; + BaseIndex = baseIndex; + OffsetIndex = offsetIndex; + IndexStride = indexStride; + RepeatStart = repeatStart; + + _renderer = renderer; + } + + public int GetPrimitiveCount(int vertexCount) + { + return Math.Max(0, (vertexCount - BaseIndex) / IndexStride); + } + + public int GetConvertedCount(int indexCount) + { + int primitiveCount = GetPrimitiveCount(indexCount); + return primitiveCount * OffsetIndex.Length; + } + + public BufferHandle GetRepeatingBuffer(int vertexCount, out int indexCount) + { + int primitiveCount = GetPrimitiveCount(vertexCount); + indexCount = primitiveCount * PrimitiveVerticesOut; + + int expectedSize = primitiveCount * OffsetIndex.Length; + + if (expectedSize <= _currentSize && _repeatingBuffer != BufferHandle.Null) + { + return _repeatingBuffer; + } + + // Expand the repeating pattern to the number of requested primitives. + BufferHandle newBuffer = _renderer.BufferManager.CreateWithHandle(expectedSize * sizeof(int)); + + // Copy the old data to the new one. + if (_repeatingBuffer != BufferHandle.Null) + { + _renderer.Pipeline.CopyBuffer(_repeatingBuffer, newBuffer, 0, 0, _currentSize * sizeof(int)); + _renderer.BufferManager.Delete(_repeatingBuffer); + } + + _repeatingBuffer = newBuffer; + + // Add the additional repeats on top. + int newPrimitives = primitiveCount; + int oldPrimitives = (_currentSize) / OffsetIndex.Length; + + int[] newData; + + newPrimitives -= oldPrimitives; + newData = new int[expectedSize - _currentSize]; + + int outOffset = 0; + int index = oldPrimitives * IndexStride + BaseIndex; + + for (int i = 0; i < newPrimitives; i++) + { + if (RepeatStart) + { + // Used for triangle fan + newData[outOffset++] = 0; + } + + for (int j = RepeatStart ? 1 : 0; j < OffsetIndex.Length; j++) + { + newData[outOffset++] = index + OffsetIndex[j]; + } + + index += IndexStride; + } + + _renderer.SetBufferData(newBuffer, _currentSize * sizeof(int), MemoryMarshal.Cast(newData)); + _currentSize = expectedSize; + + return newBuffer; + } + + public void Dispose() + { + if (_repeatingBuffer != BufferHandle.Null) + { + _renderer.BufferManager.Delete(_repeatingBuffer); + _repeatingBuffer = BufferHandle.Null; + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/IndexBufferState.cs b/src/Ryujinx.Graphics.Metal/IndexBufferState.cs new file mode 100644 index 000000000..411df9685 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/IndexBufferState.cs @@ -0,0 +1,103 @@ +using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + readonly internal struct IndexBufferState + { + public static IndexBufferState Null => new(BufferHandle.Null, 0, 0); + + private readonly int _offset; + private readonly int _size; + private readonly IndexType _type; + + private readonly BufferHandle _handle; + + public IndexBufferState(BufferHandle handle, int offset, int size, IndexType type = IndexType.UInt) + { + _handle = handle; + _offset = offset; + _size = size; + _type = type; + } + + public (MTLBuffer, int, MTLIndexType) GetIndexBuffer(MetalRenderer renderer, CommandBufferScoped cbs) + { + Auto autoBuffer; + int offset, size; + MTLIndexType type; + + if (_type == IndexType.UByte) + { + // Index type is not supported. Convert to I16. + autoBuffer = renderer.BufferManager.GetBufferI8ToI16(cbs, _handle, _offset, _size); + + type = MTLIndexType.UInt16; + offset = 0; + size = _size * 2; + } + else + { + autoBuffer = renderer.BufferManager.GetBuffer(_handle, false, out int bufferSize); + + if (_offset >= bufferSize) + { + autoBuffer = null; + } + + type = _type.Convert(); + offset = _offset; + size = _size; + } + + if (autoBuffer != null) + { + DisposableBuffer buffer = autoBuffer.Get(cbs, offset, size); + + return (buffer.Value, offset, type); + } + + return (new MTLBuffer(IntPtr.Zero), 0, MTLIndexType.UInt16); + } + + public (MTLBuffer, int, MTLIndexType) GetConvertedIndexBuffer( + MetalRenderer renderer, + CommandBufferScoped cbs, + int firstIndex, + int indexCount, + int convertedCount, + IndexBufferPattern pattern) + { + // Convert the index buffer using the given pattern. + int indexSize = GetIndexSize(); + + int firstIndexOffset = firstIndex * indexSize; + + var autoBuffer = renderer.BufferManager.GetBufferTopologyConversion(cbs, _handle, _offset + firstIndexOffset, indexCount * indexSize, pattern, indexSize); + + int size = convertedCount * 4; + + if (autoBuffer != null) + { + DisposableBuffer buffer = autoBuffer.Get(cbs, 0, size); + + return (buffer.Value, 0, MTLIndexType.UInt32); + } + + return (new MTLBuffer(IntPtr.Zero), 0, MTLIndexType.UInt32); + } + + private int GetIndexSize() + { + return _type switch + { + IndexType.UInt => 4, + IndexType.UShort => 2, + _ => 1, + }; + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs new file mode 100644 index 000000000..935a5b3b1 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs @@ -0,0 +1,309 @@ +using Ryujinx.Common.Configuration; +using Ryujinx.Graphics.GAL; +using Ryujinx.Graphics.Shader.Translation; +using SharpMetal.Metal; +using SharpMetal.QuartzCore; +using System; +using System.Collections.Generic; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + public sealed class MetalRenderer : IRenderer + { + public const int TotalSets = 4; + + private readonly MTLDevice _device; + private readonly MTLCommandQueue _queue; + private readonly Func _getMetalLayer; + + private Pipeline _pipeline; + private Window _window; + + public uint ProgramCount { get; set; } = 0; + + public event EventHandler ScreenCaptured; + public bool PreferThreading => true; + public IPipeline Pipeline => _pipeline; + public IWindow Window => _window; + + internal MTLCommandQueue BackgroundQueue { get; private set; } + internal HelperShader HelperShader { get; private set; } + internal BufferManager BufferManager { get; private set; } + internal CommandBufferPool CommandBufferPool { get; private set; } + internal BackgroundResources BackgroundResources { get; private set; } + internal Action InterruptAction { get; private set; } + internal SyncManager SyncManager { get; private set; } + + internal HashSet Programs { get; } + internal HashSet Samplers { get; } + + public MetalRenderer(Func metalLayer) + { + _device = MTLDevice.CreateSystemDefaultDevice(); + Programs = new HashSet(); + Samplers = new HashSet(); + + if (_device.ArgumentBuffersSupport != MTLArgumentBuffersTier.Tier2) + { + throw new NotSupportedException("Metal backend requires Tier 2 Argument Buffer support."); + } + + _queue = _device.NewCommandQueue(CommandBufferPool.MaxCommandBuffers + 1); + BackgroundQueue = _device.NewCommandQueue(CommandBufferPool.MaxCommandBuffers); + + _getMetalLayer = metalLayer; + } + + public void Initialize(GraphicsDebugLevel logLevel) + { + var layer = _getMetalLayer(); + layer.Device = _device; + layer.FramebufferOnly = false; + + CommandBufferPool = new CommandBufferPool(_queue); + _window = new Window(this, layer); + _pipeline = new Pipeline(_device, this); + BufferManager = new BufferManager(_device, this, _pipeline); + + _pipeline.InitEncoderStateManager(BufferManager); + + BackgroundResources = new BackgroundResources(this); + HelperShader = new HelperShader(_device, this, _pipeline); + SyncManager = new SyncManager(this); + } + + public void BackgroundContextAction(Action action, bool alwaysBackground = false) + { + // GetData methods should be thread safe, so we can call this directly. + // Texture copy (scaled) may also happen in here, so that should also be thread safe. + + action(); + } + + public BufferHandle CreateBuffer(int size, BufferAccess access) + { + return BufferManager.CreateWithHandle(size); + } + + public BufferHandle CreateBuffer(IntPtr pointer, int size) + { + return BufferManager.Create(pointer, size); + } + + public BufferHandle CreateBufferSparse(ReadOnlySpan storageBuffers) + { + throw new NotImplementedException(); + } + + public IImageArray CreateImageArray(int size, bool isBuffer) + { + return new ImageArray(size, isBuffer, _pipeline); + } + + public IProgram CreateProgram(ShaderSource[] shaders, ShaderInfo info) + { + ProgramCount++; + return new Program(this, _device, shaders, info.ResourceLayout, info.ComputeLocalSize); + } + + public ISampler CreateSampler(SamplerCreateInfo info) + { + return new SamplerHolder(this, _device, info); + } + + public ITexture CreateTexture(TextureCreateInfo info) + { + if (info.Target == Target.TextureBuffer) + { + return new TextureBuffer(_device, this, _pipeline, info); + } + + return new Texture(_device, this, _pipeline, info); + } + + public ITextureArray CreateTextureArray(int size, bool isBuffer) + { + return new TextureArray(size, isBuffer, _pipeline); + } + + public bool PrepareHostMapping(IntPtr address, ulong size) + { + // TODO: Metal Host Mapping + return false; + } + + public void CreateSync(ulong id, bool strict) + { + SyncManager.Create(id, strict); + } + + public void DeleteBuffer(BufferHandle buffer) + { + BufferManager.Delete(buffer); + } + + public PinnedSpan GetBufferData(BufferHandle buffer, int offset, int size) + { + return BufferManager.GetData(buffer, offset, size); + } + + public Capabilities GetCapabilities() + { + // TODO: Finalize these values + return new Capabilities( + api: TargetApi.Metal, + vendorName: HardwareInfoTools.GetVendor(), + SystemMemoryType.UnifiedMemory, + hasFrontFacingBug: false, + hasVectorIndexingBug: false, + needsFragmentOutputSpecialization: true, + reduceShaderPrecision: true, + supportsAstcCompression: true, + supportsBc123Compression: true, + supportsBc45Compression: true, + supportsBc67Compression: true, + supportsEtc2Compression: true, + supports3DTextureCompression: true, + supportsBgraFormat: true, + supportsR4G4Format: false, + supportsR4G4B4A4Format: true, + supportsScaledVertexFormats: false, + supportsSnormBufferTextureFormat: true, + supportsSparseBuffer: false, + supports5BitComponentFormat: true, + supportsBlendEquationAdvanced: false, + supportsFragmentShaderInterlock: true, + supportsFragmentShaderOrderingIntel: false, + supportsGeometryShader: false, + supportsGeometryShaderPassthrough: false, + supportsTransformFeedback: false, + supportsImageLoadFormatted: false, + supportsLayerVertexTessellation: false, + supportsMismatchingViewFormat: true, + supportsCubemapView: true, + supportsNonConstantTextureOffset: false, + supportsQuads: false, + supportsSeparateSampler: true, + supportsShaderBallot: false, + supportsShaderBarrierDivergence: false, + supportsShaderFloat64: false, + supportsTextureGatherOffsets: false, + supportsTextureShadowLod: false, + supportsVertexStoreAndAtomics: false, + supportsViewportIndexVertexTessellation: false, + supportsViewportMask: false, + supportsViewportSwizzle: false, + supportsIndirectParameters: true, + supportsDepthClipControl: false, + uniformBufferSetIndex: (int)Constants.ConstantBuffersSetIndex, + storageBufferSetIndex: (int)Constants.StorageBuffersSetIndex, + textureSetIndex: (int)Constants.TexturesSetIndex, + imageSetIndex: (int)Constants.ImagesSetIndex, + extraSetBaseIndex: TotalSets, + maximumExtraSets: (int)Constants.MaximumExtraSets, + maximumUniformBuffersPerStage: Constants.MaxUniformBuffersPerStage, + maximumStorageBuffersPerStage: Constants.MaxStorageBuffersPerStage, + maximumTexturesPerStage: Constants.MaxTexturesPerStage, + maximumImagesPerStage: Constants.MaxImagesPerStage, + maximumComputeSharedMemorySize: (int)_device.MaxThreadgroupMemoryLength, + maximumSupportedAnisotropy: 16, + shaderSubgroupSize: 256, + storageBufferOffsetAlignment: 16, + textureBufferOffsetAlignment: 16, + gatherBiasPrecision: 0, + maximumGpuMemory: 0 + ); + } + + public ulong GetCurrentSync() + { + return SyncManager.GetCurrent(); + } + + public HardwareInfo GetHardwareInfo() + { + return new HardwareInfo(HardwareInfoTools.GetVendor(), HardwareInfoTools.GetModel(), "Apple"); + } + + public IProgram LoadProgramBinary(byte[] programBinary, bool hasFragmentShader, ShaderInfo info) + { + throw new NotImplementedException(); + } + + public void SetBufferData(BufferHandle buffer, int offset, ReadOnlySpan data) + { + BufferManager.SetData(buffer, offset, data, _pipeline.Cbs); + } + + public void UpdateCounters() + { + // https://developer.apple.com/documentation/metal/gpu_counters_and_counter_sample_buffers/creating_a_counter_sample_buffer_to_store_a_gpu_s_counter_data_during_a_pass?language=objc + } + + public void PreFrame() + { + SyncManager.Cleanup(); + } + + public ICounterEvent ReportCounter(CounterType type, EventHandler resultHandler, float divisor, bool hostReserved) + { + // https://developer.apple.com/documentation/metal/gpu_counters_and_counter_sample_buffers/creating_a_counter_sample_buffer_to_store_a_gpu_s_counter_data_during_a_pass?language=objc + var counterEvent = new CounterEvent(); + resultHandler?.Invoke(counterEvent, type == CounterType.SamplesPassed ? (ulong)1 : 0); + return counterEvent; + } + + public void ResetCounter(CounterType type) + { + // https://developer.apple.com/documentation/metal/gpu_counters_and_counter_sample_buffers/creating_a_counter_sample_buffer_to_store_a_gpu_s_counter_data_during_a_pass?language=objc + } + + public void WaitSync(ulong id) + { + SyncManager.Wait(id); + } + + public void FlushAllCommands() + { + _pipeline.FlushCommandsImpl(); + } + + public void RegisterFlush() + { + SyncManager.RegisterFlush(); + + // Periodically free unused regions of the staging buffer to avoid doing it all at once. + BufferManager.StagingBuffer.FreeCompleted(); + } + + public void SetInterruptAction(Action interruptAction) + { + InterruptAction = interruptAction; + } + + public void Screenshot() + { + // TODO: Screenshots + } + + public void Dispose() + { + BackgroundResources.Dispose(); + + foreach (var program in Programs) + { + program.Dispose(); + } + + foreach (var sampler in Samplers) + { + sampler.Dispose(); + } + + _pipeline.Dispose(); + _window.Dispose(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/MultiFenceHolder.cs b/src/Ryujinx.Graphics.Metal/MultiFenceHolder.cs new file mode 100644 index 000000000..cd5ad08ba --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/MultiFenceHolder.cs @@ -0,0 +1,262 @@ +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + /// + /// Holder for multiple host GPU fences. + /// + [SupportedOSPlatform("macos")] + class MultiFenceHolder + { + private const int BufferUsageTrackingGranularity = 4096; + + private readonly FenceHolder[] _fences; + private readonly BufferUsageBitmap _bufferUsageBitmap; + + /// + /// Creates a new instance of the multiple fence holder. + /// + public MultiFenceHolder() + { + _fences = new FenceHolder[CommandBufferPool.MaxCommandBuffers]; + } + + /// + /// Creates a new instance of the multiple fence holder, with a given buffer size in mind. + /// + /// Size of the buffer + public MultiFenceHolder(int size) + { + _fences = new FenceHolder[CommandBufferPool.MaxCommandBuffers]; + _bufferUsageBitmap = new BufferUsageBitmap(size, BufferUsageTrackingGranularity); + } + + /// + /// Adds read/write buffer usage information to the uses list. + /// + /// Index of the command buffer where the buffer is used + /// Offset of the buffer being used + /// Size of the buffer region being used, in bytes + /// Whether the access is a write or not + public void AddBufferUse(int cbIndex, int offset, int size, bool write) + { + _bufferUsageBitmap.Add(cbIndex, offset, size, false); + + if (write) + { + _bufferUsageBitmap.Add(cbIndex, offset, size, true); + } + } + + /// + /// Removes all buffer usage information for a given command buffer. + /// + /// Index of the command buffer where the buffer is used + public void RemoveBufferUses(int cbIndex) + { + _bufferUsageBitmap?.Clear(cbIndex); + } + + /// + /// Checks if a given range of a buffer is being used by a command buffer still being processed by the GPU. + /// + /// Index of the command buffer where the buffer is used + /// Offset of the buffer being used + /// Size of the buffer region being used, in bytes + /// True if in use, false otherwise + public bool IsBufferRangeInUse(int cbIndex, int offset, int size) + { + return _bufferUsageBitmap.OverlapsWith(cbIndex, offset, size); + } + + /// + /// Checks if a given range of a buffer is being used by any command buffer still being processed by the GPU. + /// + /// Offset of the buffer being used + /// Size of the buffer region being used, in bytes + /// True if only write usages should count + /// True if in use, false otherwise + public bool IsBufferRangeInUse(int offset, int size, bool write) + { + return _bufferUsageBitmap.OverlapsWith(offset, size, write); + } + + /// + /// Adds a fence to the holder. + /// + /// Command buffer index of the command buffer that owns the fence + /// Fence to be added + /// True if the command buffer's previous fence value was null + public bool AddFence(int cbIndex, FenceHolder fence) + { + ref FenceHolder fenceRef = ref _fences[cbIndex]; + + if (fenceRef == null) + { + fenceRef = fence; + return true; + } + + return false; + } + + /// + /// Removes a fence from the holder. + /// + /// Command buffer index of the command buffer that owns the fence + public void RemoveFence(int cbIndex) + { + _fences[cbIndex] = null; + } + + /// + /// Determines if a fence referenced on the given command buffer. + /// + /// Index of the command buffer to check if it's used + /// True if referenced, false otherwise + public bool HasFence(int cbIndex) + { + return _fences[cbIndex] != null; + } + + /// + /// Wait until all the fences on the holder are signaled. + /// + public void WaitForFences() + { + WaitForFencesImpl(0, 0, true); + } + + /// + /// Wait until all the fences on the holder with buffer uses overlapping the specified range are signaled. + /// + /// Start offset of the buffer range + /// Size of the buffer range in bytes + public void WaitForFences(int offset, int size) + { + WaitForFencesImpl(offset, size, true); + } + + /// + /// Wait until all the fences on the holder with buffer uses overlapping the specified range are signaled. + /// + + // TODO: Add a proper timeout! + public bool WaitForFences(bool indefinite) + { + return WaitForFencesImpl(0, 0, indefinite); + } + + /// + /// Wait until all the fences on the holder with buffer uses overlapping the specified range are signaled. + /// + /// Start offset of the buffer range + /// Size of the buffer range in bytes + /// Indicates if this should wait indefinitely + /// True if all fences were signaled before the timeout expired, false otherwise + private bool WaitForFencesImpl(int offset, int size, bool indefinite) + { + Span fenceHolders = new FenceHolder[CommandBufferPool.MaxCommandBuffers]; + + int count = size != 0 ? GetOverlappingFences(fenceHolders, offset, size) : GetFences(fenceHolders); + Span fences = stackalloc MTLCommandBuffer[count]; + + int fenceCount = 0; + + for (int i = 0; i < count; i++) + { + if (fenceHolders[i].TryGet(out MTLCommandBuffer fence)) + { + fences[fenceCount] = fence; + + if (fenceCount < i) + { + fenceHolders[fenceCount] = fenceHolders[i]; + } + + fenceCount++; + } + } + + if (fenceCount == 0) + { + return true; + } + + bool signaled = true; + + if (indefinite) + { + foreach (var fence in fences) + { + fence.WaitUntilCompleted(); + } + } + else + { + foreach (var fence in fences) + { + if (fence.Status != MTLCommandBufferStatus.Completed) + { + signaled = false; + } + } + } + + for (int i = 0; i < fenceCount; i++) + { + fenceHolders[i].Put(); + } + + return signaled; + } + + /// + /// Gets fences to wait for. + /// + /// Span to store fences in + /// Number of fences placed in storage + private int GetFences(Span storage) + { + int count = 0; + + for (int i = 0; i < _fences.Length; i++) + { + var fence = _fences[i]; + + if (fence != null) + { + storage[count++] = fence; + } + } + + return count; + } + + /// + /// Gets fences to wait for use of a given buffer region. + /// + /// Span to store overlapping fences in + /// Offset of the range + /// Size of the range in bytes + /// Number of fences for the specified region placed in storage + private int GetOverlappingFences(Span storage, int offset, int size) + { + int count = 0; + + for (int i = 0; i < _fences.Length; i++) + { + var fence = _fences[i]; + + if (fence != null && _bufferUsageBitmap.OverlapsWith(i, offset, size)) + { + storage[count++] = fence; + } + } + + return count; + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs b/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs new file mode 100644 index 000000000..fa3df47db --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/PersistentFlushBuffer.cs @@ -0,0 +1,99 @@ +using Ryujinx.Graphics.GAL; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + internal class PersistentFlushBuffer : IDisposable + { + private readonly MetalRenderer _renderer; + + private BufferHolder _flushStorage; + + public PersistentFlushBuffer(MetalRenderer renderer) + { + _renderer = renderer; + } + + private BufferHolder ResizeIfNeeded(int size) + { + var flushStorage = _flushStorage; + + if (flushStorage == null || size > _flushStorage.Size) + { + flushStorage?.Dispose(); + + flushStorage = _renderer.BufferManager.Create(size); + _flushStorage = flushStorage; + } + + return flushStorage; + } + + public Span GetBufferData(CommandBufferPool cbp, BufferHolder buffer, int offset, int size) + { + var flushStorage = ResizeIfNeeded(size); + Auto srcBuffer; + + using (var cbs = cbp.Rent()) + { + srcBuffer = buffer.GetBuffer(); + var dstBuffer = flushStorage.GetBuffer(); + + if (srcBuffer.TryIncrementReferenceCount()) + { + BufferHolder.Copy(cbs, srcBuffer, dstBuffer, offset, 0, size, registerSrcUsage: false); + } + else + { + // Source buffer is no longer alive, don't copy anything to flush storage. + srcBuffer = null; + } + } + + flushStorage.WaitForFences(); + srcBuffer?.DecrementReferenceCount(); + return flushStorage.GetDataStorage(0, size); + } + + public Span GetTextureData(CommandBufferPool cbp, Texture view, int size) + { + TextureCreateInfo info = view.Info; + + var flushStorage = ResizeIfNeeded(size); + + using (var cbs = cbp.Rent()) + { + var buffer = flushStorage.GetBuffer().Get(cbs).Value; + var image = view.GetHandle(); + + view.CopyFromOrToBuffer(cbs, buffer, image, size, true, 0, 0, info.GetLayers(), info.Levels, singleSlice: false); + } + + flushStorage.WaitForFences(); + return flushStorage.GetDataStorage(0, size); + } + + public Span GetTextureData(CommandBufferPool cbp, Texture view, int size, int layer, int level) + { + var flushStorage = ResizeIfNeeded(size); + + using (var cbs = cbp.Rent()) + { + var buffer = flushStorage.GetBuffer().Get(cbs).Value; + var image = view.GetHandle(); + + view.CopyFromOrToBuffer(cbs, buffer, image, size, true, layer, level, 1, 1, singleSlice: true); + } + + flushStorage.WaitForFences(); + return flushStorage.GetDataStorage(0, size); + } + + public void Dispose() + { + _flushStorage.Dispose(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/Pipeline.cs b/src/Ryujinx.Graphics.Metal/Pipeline.cs new file mode 100644 index 000000000..113974061 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Pipeline.cs @@ -0,0 +1,877 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using Ryujinx.Graphics.Shader; +using SharpMetal.Foundation; +using SharpMetal.Metal; +using SharpMetal.QuartzCore; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + public enum EncoderType + { + Blit, + Compute, + Render, + None + } + + [SupportedOSPlatform("macos")] + class Pipeline : IPipeline, IEncoderFactory, IDisposable + { + private const ulong MinByteWeightForFlush = 256 * 1024 * 1024; // MiB + + private readonly MTLDevice _device; + private readonly MetalRenderer _renderer; + private EncoderStateManager _encoderStateManager; + private ulong _byteWeight; + + public MTLCommandBuffer CommandBuffer; + + public IndexBufferPattern QuadsToTrisPattern; + public IndexBufferPattern TriFanToTrisPattern; + + internal CommandBufferScoped? PreloadCbs { get; private set; } + internal CommandBufferScoped Cbs { get; private set; } + internal CommandBufferEncoder Encoders => Cbs.Encoders; + internal EncoderType CurrentEncoderType => Encoders.CurrentEncoderType; + + public Pipeline(MTLDevice device, MetalRenderer renderer) + { + _device = device; + _renderer = renderer; + + renderer.CommandBufferPool.Initialize(this); + + CommandBuffer = (Cbs = _renderer.CommandBufferPool.Rent()).CommandBuffer; + } + + internal void InitEncoderStateManager(BufferManager bufferManager) + { + _encoderStateManager = new EncoderStateManager(_device, bufferManager, this); + + QuadsToTrisPattern = new IndexBufferPattern(_renderer, 4, 6, 0, [0, 1, 2, 0, 2, 3], 4, false); + TriFanToTrisPattern = new IndexBufferPattern(_renderer, 3, 3, 2, [int.MinValue, -1, 0], 1, true); + } + + public EncoderState SwapState(EncoderState state, DirtyFlags flags = DirtyFlags.All, bool endRenderPass = true) + { + if (endRenderPass && CurrentEncoderType == EncoderType.Render) + { + EndCurrentPass(); + } + + return _encoderStateManager.SwapState(state, flags); + } + + public PredrawState SavePredrawState() + { + return _encoderStateManager.SavePredrawState(); + } + + public void RestorePredrawState(PredrawState state) + { + _encoderStateManager.RestorePredrawState(state); + } + + public void SetClearLoadAction(bool clear) + { + _encoderStateManager.SetClearLoadAction(clear); + } + + public MTLRenderCommandEncoder GetOrCreateRenderEncoder(bool forDraw = false) + { + // Mark all state as dirty to ensure it is set on the new encoder + if (Cbs.Encoders.CurrentEncoderType != EncoderType.Render) + { + _encoderStateManager.SignalRenderDirty(); + } + + if (forDraw) + { + _encoderStateManager.RenderResourcesPrepass(); + } + + MTLRenderCommandEncoder renderCommandEncoder = Cbs.Encoders.EnsureRenderEncoder(); + + if (forDraw) + { + _encoderStateManager.RebindRenderState(renderCommandEncoder); + } + + return renderCommandEncoder; + } + + public MTLBlitCommandEncoder GetOrCreateBlitEncoder() + { + return Cbs.Encoders.EnsureBlitEncoder(); + } + + public MTLComputeCommandEncoder GetOrCreateComputeEncoder(bool forDispatch = false) + { + // Mark all state as dirty to ensure it is set on the new encoder + if (Cbs.Encoders.CurrentEncoderType != EncoderType.Compute) + { + _encoderStateManager.SignalComputeDirty(); + } + + if (forDispatch) + { + _encoderStateManager.ComputeResourcesPrepass(); + } + + MTLComputeCommandEncoder computeCommandEncoder = Cbs.Encoders.EnsureComputeEncoder(); + + if (forDispatch) + { + _encoderStateManager.RebindComputeState(computeCommandEncoder); + } + + return computeCommandEncoder; + } + + public void EndCurrentPass() + { + Cbs.Encoders.EndCurrentPass(); + } + + public MTLRenderCommandEncoder CreateRenderCommandEncoder() + { + return _encoderStateManager.CreateRenderCommandEncoder(); + } + + public MTLComputeCommandEncoder CreateComputeCommandEncoder() + { + return _encoderStateManager.CreateComputeCommandEncoder(); + } + + public void Present(CAMetalDrawable drawable, Texture src, Extents2D srcRegion, Extents2D dstRegion, bool isLinear) + { + // TODO: Clean this up + var textureInfo = new TextureCreateInfo((int)drawable.Texture.Width, (int)drawable.Texture.Height, (int)drawable.Texture.Depth, (int)drawable.Texture.MipmapLevelCount, (int)drawable.Texture.SampleCount, 0, 0, 0, Format.B8G8R8A8Unorm, 0, Target.Texture2D, SwizzleComponent.Red, SwizzleComponent.Green, SwizzleComponent.Blue, SwizzleComponent.Alpha); + var dst = new Texture(_device, _renderer, this, textureInfo, drawable.Texture, 0, 0); + + _renderer.HelperShader.BlitColor(Cbs, src, dst, srcRegion, dstRegion, isLinear, true); + + EndCurrentPass(); + + Cbs.CommandBuffer.PresentDrawable(drawable); + + FlushCommandsImpl(); + + // TODO: Auto flush counting + _renderer.SyncManager.GetAndResetWaitTicks(); + + // Cleanup + dst.Dispose(); + } + + public CommandBufferScoped GetPreloadCommandBuffer() + { + PreloadCbs ??= _renderer.CommandBufferPool.Rent(); + + return PreloadCbs.Value; + } + + public void FlushCommandsIfWeightExceeding(IAuto disposedResource, ulong byteWeight) + { + bool usedByCurrentCb = disposedResource.HasCommandBufferDependency(Cbs); + + if (PreloadCbs != null && !usedByCurrentCb) + { + usedByCurrentCb = disposedResource.HasCommandBufferDependency(PreloadCbs.Value); + } + + if (usedByCurrentCb) + { + // Since we can only free memory after the command buffer that uses a given resource was executed, + // keeping the command buffer might cause a high amount of memory to be in use. + // To prevent that, we force submit command buffers if the memory usage by resources + // in use by the current command buffer is above a given limit, and those resources were disposed. + _byteWeight += byteWeight; + + if (_byteWeight >= MinByteWeightForFlush) + { + FlushCommandsImpl(); + } + } + } + + public void FlushCommandsImpl() + { + EndCurrentPass(); + + _byteWeight = 0; + + if (PreloadCbs != null) + { + PreloadCbs.Value.Dispose(); + PreloadCbs = null; + } + + CommandBuffer = (Cbs = _renderer.CommandBufferPool.ReturnAndRent(Cbs)).CommandBuffer; + _renderer.RegisterFlush(); + } + + public void DirtyTextures() + { + _encoderStateManager.DirtyTextures(); + } + + public void DirtyImages() + { + _encoderStateManager.DirtyImages(); + } + + public void Blit( + Texture src, + Texture dst, + Extents2D srcRegion, + Extents2D dstRegion, + bool isDepthOrStencil, + bool linearFilter) + { + if (isDepthOrStencil) + { + _renderer.HelperShader.BlitDepthStencil(Cbs, src, dst, srcRegion, dstRegion); + } + else + { + _renderer.HelperShader.BlitColor(Cbs, src, dst, srcRegion, dstRegion, linearFilter); + } + } + + public void Barrier() + { + switch (CurrentEncoderType) + { + case EncoderType.Render: + { + var scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets; + MTLRenderStages stages = MTLRenderStages.RenderStageVertex | MTLRenderStages.RenderStageFragment; + Encoders.RenderEncoder.MemoryBarrier(scope, stages, stages); + break; + } + case EncoderType.Compute: + { + var scope = MTLBarrierScope.Buffers | MTLBarrierScope.Textures | MTLBarrierScope.RenderTargets; + Encoders.ComputeEncoder.MemoryBarrier(scope); + break; + } + } + } + + public void ClearBuffer(BufferHandle destination, int offset, int size, uint value) + { + var blitCommandEncoder = GetOrCreateBlitEncoder(); + + var mtlBuffer = _renderer.BufferManager.GetBuffer(destination, offset, size, true).Get(Cbs, offset, size, true).Value; + + // Might need a closer look, range's count, lower, and upper bound + // must be a multiple of 4 + blitCommandEncoder.FillBuffer(mtlBuffer, + new NSRange + { + location = (ulong)offset, + length = (ulong)size + }, + (byte)value); + } + + public void ClearRenderTargetColor(int index, int layer, int layerCount, uint componentMask, ColorF color) + { + float[] colors = [color.Red, color.Green, color.Blue, color.Alpha]; + var dst = _encoderStateManager.RenderTargets[index]; + + // TODO: Remove workaround for Wonder which has an invalid texture due to unsupported format + if (dst == null) + { + Logger.Warning?.PrintMsg(LogClass.Gpu, "Attempted to clear invalid render target!"); + return; + } + + _renderer.HelperShader.ClearColor(index, colors, componentMask, dst.Width, dst.Height, dst.Info.Format); + } + + public void ClearRenderTargetDepthStencil(int layer, int layerCount, float depthValue, bool depthMask, int stencilValue, int stencilMask) + { + var depthStencil = _encoderStateManager.DepthStencil; + + if (depthStencil == null) + { + return; + } + + _renderer.HelperShader.ClearDepthStencil(depthValue, depthMask, stencilValue, stencilMask, depthStencil.Width, depthStencil.Height); + } + + public void CommandBufferBarrier() + { + Barrier(); + } + + public void CopyBuffer(BufferHandle src, BufferHandle dst, int srcOffset, int dstOffset, int size) + { + var srcBuffer = _renderer.BufferManager.GetBuffer(src, srcOffset, size, false); + var dstBuffer = _renderer.BufferManager.GetBuffer(dst, dstOffset, size, true); + + BufferHolder.Copy(Cbs, srcBuffer, dstBuffer, srcOffset, dstOffset, size); + } + + public void PushDebugGroup(string name) + { + var encoder = Encoders.CurrentEncoder; + var debugGroupName = StringHelper.NSString(name); + + if (encoder == null) + { + return; + } + + switch (Encoders.CurrentEncoderType) + { + case EncoderType.Render: + encoder.Value.PushDebugGroup(debugGroupName); + break; + case EncoderType.Blit: + encoder.Value.PushDebugGroup(debugGroupName); + break; + case EncoderType.Compute: + encoder.Value.PushDebugGroup(debugGroupName); + break; + } + } + + public void PopDebugGroup() + { + var encoder = Encoders.CurrentEncoder; + + if (encoder == null) + { + return; + } + + switch (Encoders.CurrentEncoderType) + { + case EncoderType.Render: + encoder.Value.PopDebugGroup(); + break; + case EncoderType.Blit: + encoder.Value.PopDebugGroup(); + break; + case EncoderType.Compute: + encoder.Value.PopDebugGroup(); + break; + } + } + + public void DispatchCompute(int groupsX, int groupsY, int groupsZ) + { + DispatchCompute(groupsX, groupsY, groupsZ, String.Empty); + } + + public void DispatchCompute(int groupsX, int groupsY, int groupsZ, string debugGroupName) + { + var computeCommandEncoder = GetOrCreateComputeEncoder(true); + + ComputeSize localSize = _encoderStateManager.ComputeLocalSize; + + if (debugGroupName != String.Empty) + { + PushDebugGroup(debugGroupName); + } + + computeCommandEncoder.DispatchThreadgroups( + new MTLSize { width = (ulong)groupsX, height = (ulong)groupsY, depth = (ulong)groupsZ }, + new MTLSize { width = (ulong)localSize.X, height = (ulong)localSize.Y, depth = (ulong)localSize.Z }); + + if (debugGroupName != String.Empty) + { + PopDebugGroup(); + } + } + + public void Draw(int vertexCount, int instanceCount, int firstVertex, int firstInstance) + { + Draw(vertexCount, instanceCount, firstVertex, firstInstance, String.Empty); + } + + public void Draw(int vertexCount, int instanceCount, int firstVertex, int firstInstance, string debugGroupName) + { + if (vertexCount == 0) + { + return; + } + + var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); + + if (TopologyUnsupported(_encoderStateManager.Topology)) + { + var pattern = GetIndexBufferPattern(); + + BufferHandle handle = pattern.GetRepeatingBuffer(vertexCount, out int indexCount); + var buffer = _renderer.BufferManager.GetBuffer(handle, false); + var mtlBuffer = buffer.Get(Cbs, 0, indexCount * sizeof(int)).Value; + + var renderCommandEncoder = GetOrCreateRenderEncoder(true); + + renderCommandEncoder.DrawIndexedPrimitives( + primitiveType, + (ulong)indexCount, + MTLIndexType.UInt32, + mtlBuffer, + 0); + } + else + { + var renderCommandEncoder = GetOrCreateRenderEncoder(true); + + if (debugGroupName != String.Empty) + { + PushDebugGroup(debugGroupName); + } + + renderCommandEncoder.DrawPrimitives( + primitiveType, + (ulong)firstVertex, + (ulong)vertexCount, + (ulong)instanceCount, + (ulong)firstInstance); + + if (debugGroupName != String.Empty) + { + PopDebugGroup(); + } + } + } + + private IndexBufferPattern GetIndexBufferPattern() + { + return _encoderStateManager.Topology switch + { + PrimitiveTopology.Quads => QuadsToTrisPattern, + PrimitiveTopology.TriangleFan or PrimitiveTopology.Polygon => TriFanToTrisPattern, + _ => throw new NotSupportedException($"Unsupported topology: {_encoderStateManager.Topology}"), + }; + } + + private PrimitiveTopology TopologyRemap(PrimitiveTopology topology) + { + return topology switch + { + PrimitiveTopology.Quads => PrimitiveTopology.Triangles, + PrimitiveTopology.QuadStrip => PrimitiveTopology.TriangleStrip, + PrimitiveTopology.TriangleFan or PrimitiveTopology.Polygon => PrimitiveTopology.Triangles, + _ => topology, + }; + } + + private bool TopologyUnsupported(PrimitiveTopology topology) + { + return topology switch + { + PrimitiveTopology.Quads or PrimitiveTopology.TriangleFan or PrimitiveTopology.Polygon => true, + _ => false, + }; + } + + public void DrawIndexed(int indexCount, int instanceCount, int firstIndex, int firstVertex, int firstInstance) + { + if (indexCount == 0) + { + return; + } + + MTLBuffer mtlBuffer; + int offset; + MTLIndexType type; + int finalIndexCount = indexCount; + + var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); + + if (TopologyUnsupported(_encoderStateManager.Topology)) + { + var pattern = GetIndexBufferPattern(); + int convertedCount = pattern.GetConvertedCount(indexCount); + + finalIndexCount = convertedCount; + + (mtlBuffer, offset, type) = _encoderStateManager.IndexBuffer.GetConvertedIndexBuffer(_renderer, Cbs, firstIndex, indexCount, convertedCount, pattern); + } + else + { + (mtlBuffer, offset, type) = _encoderStateManager.IndexBuffer.GetIndexBuffer(_renderer, Cbs); + } + + if (mtlBuffer.NativePtr != IntPtr.Zero) + { + var renderCommandEncoder = GetOrCreateRenderEncoder(true); + + renderCommandEncoder.DrawIndexedPrimitives( + primitiveType, + (ulong)finalIndexCount, + type, + mtlBuffer, + (ulong)offset, + (ulong)instanceCount, + firstVertex, + (ulong)firstInstance); + } + } + + public void DrawIndexedIndirect(BufferRange indirectBuffer) + { + DrawIndexedIndirectOffset(indirectBuffer); + } + + public void DrawIndexedIndirectOffset(BufferRange indirectBuffer, int offset = 0) + { + // TODO: Reindex unsupported topologies + if (TopologyUnsupported(_encoderStateManager.Topology)) + { + Logger.Warning?.Print(LogClass.Gpu, $"Drawing indexed with unsupported topology: {_encoderStateManager.Topology}"); + } + + var buffer = _renderer.BufferManager + .GetBuffer(indirectBuffer.Handle, indirectBuffer.Offset, indirectBuffer.Size, false) + .Get(Cbs, indirectBuffer.Offset, indirectBuffer.Size).Value; + + var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); + + (MTLBuffer indexBuffer, int indexOffset, MTLIndexType type) = _encoderStateManager.IndexBuffer.GetIndexBuffer(_renderer, Cbs); + + if (indexBuffer.NativePtr != IntPtr.Zero && buffer.NativePtr != IntPtr.Zero) + { + var renderCommandEncoder = GetOrCreateRenderEncoder(true); + + renderCommandEncoder.DrawIndexedPrimitives( + primitiveType, + type, + indexBuffer, + (ulong)indexOffset, + buffer, + (ulong)(indirectBuffer.Offset + offset)); + } + } + + public void DrawIndexedIndirectCount(BufferRange indirectBuffer, BufferRange parameterBuffer, int maxDrawCount, int stride) + { + for (int i = 0; i < maxDrawCount; i++) + { + DrawIndexedIndirectOffset(indirectBuffer, stride * i); + } + } + + public void DrawIndirect(BufferRange indirectBuffer) + { + DrawIndirectOffset(indirectBuffer); + } + + public void DrawIndirectOffset(BufferRange indirectBuffer, int offset = 0) + { + if (TopologyUnsupported(_encoderStateManager.Topology)) + { + // TODO: Reindex unsupported topologies + Logger.Warning?.Print(LogClass.Gpu, $"Drawing indirect with unsupported topology: {_encoderStateManager.Topology}"); + } + + var buffer = _renderer.BufferManager + .GetBuffer(indirectBuffer.Handle, indirectBuffer.Offset, indirectBuffer.Size, false) + .Get(Cbs, indirectBuffer.Offset, indirectBuffer.Size).Value; + + var primitiveType = TopologyRemap(_encoderStateManager.Topology).Convert(); + var renderCommandEncoder = GetOrCreateRenderEncoder(true); + + renderCommandEncoder.DrawPrimitives( + primitiveType, + buffer, + (ulong)(indirectBuffer.Offset + offset)); + } + + public void DrawIndirectCount(BufferRange indirectBuffer, BufferRange parameterBuffer, int maxDrawCount, int stride) + { + for (int i = 0; i < maxDrawCount; i++) + { + DrawIndirectOffset(indirectBuffer, stride * i); + } + } + + public void DrawTexture(ITexture texture, ISampler sampler, Extents2DF srcRegion, Extents2DF dstRegion) + { + _renderer.HelperShader.DrawTexture(texture, sampler, srcRegion, dstRegion); + } + + public void SetAlphaTest(bool enable, float reference, CompareOp op) + { + // This is currently handled using shader specialization, as Metal does not support alpha test. + // In the future, we may want to use this to write the reference value into the support buffer, + // to avoid creating one version of the shader per reference value used. + } + + public void SetBlendState(AdvancedBlendDescriptor blend) + { + // Metal does not support advanced blend. + } + + public void SetBlendState(int index, BlendDescriptor blend) + { + _encoderStateManager.UpdateBlendDescriptors(index, blend); + } + + public void SetDepthBias(PolygonModeMask enables, float factor, float units, float clamp) + { + if (enables == 0) + { + _encoderStateManager.UpdateDepthBias(0, 0, 0); + } + else + { + _encoderStateManager.UpdateDepthBias(units, factor, clamp); + } + } + + public void SetDepthClamp(bool clamp) + { + _encoderStateManager.UpdateDepthClamp(clamp); + } + + public void SetDepthMode(DepthMode mode) + { + // Metal does not support depth clip control. + } + + public void SetDepthTest(DepthTestDescriptor depthTest) + { + _encoderStateManager.UpdateDepthState(depthTest); + } + + public void SetFaceCulling(bool enable, Face face) + { + _encoderStateManager.UpdateCullMode(enable, face); + } + + public void SetFrontFace(FrontFace frontFace) + { + _encoderStateManager.UpdateFrontFace(frontFace); + } + + public void SetIndexBuffer(BufferRange buffer, IndexType type) + { + _encoderStateManager.UpdateIndexBuffer(buffer, type); + } + + public void SetImage(ShaderStage stage, int binding, ITexture image) + { + if (image is TextureBase img) + { + _encoderStateManager.UpdateImage(stage, binding, img); + } + } + + public void SetImageArray(ShaderStage stage, int binding, IImageArray array) + { + if (array is ImageArray imageArray) + { + _encoderStateManager.UpdateImageArray(stage, binding, imageArray); + } + } + + public void SetImageArraySeparate(ShaderStage stage, int setIndex, IImageArray array) + { + if (array is ImageArray imageArray) + { + _encoderStateManager.UpdateImageArraySeparate(stage, setIndex, imageArray); + } + } + + public void SetLineParameters(float width, bool smooth) + { + // Metal does not support wide-lines. + } + + public void SetLogicOpState(bool enable, LogicalOp op) + { + _encoderStateManager.UpdateLogicOpState(enable, op); + } + + public void SetMultisampleState(MultisampleDescriptor multisample) + { + _encoderStateManager.UpdateMultisampleState(multisample); + } + + public void SetPatchParameters(int vertices, ReadOnlySpan defaultOuterLevel, ReadOnlySpan defaultInnerLevel) + { + Logger.Warning?.Print(LogClass.Gpu, "Not Implemented!"); + } + + public void SetPointParameters(float size, bool isProgramPointSize, bool enablePointSprite, Origin origin) + { + Logger.Warning?.Print(LogClass.Gpu, "Not Implemented!"); + } + + public void SetPolygonMode(PolygonMode frontMode, PolygonMode backMode) + { + // Metal does not support polygon mode. + } + + public void SetPrimitiveRestart(bool enable, int index) + { + // Always active for LineStrip and TriangleStrip + // https://github.com/gpuweb/gpuweb/issues/1220#issuecomment-732483263 + // https://developer.apple.com/documentation/metal/mtlrendercommandencoder/1515520-drawindexedprimitives + // https://stackoverflow.com/questions/70813665/how-to-render-multiple-trianglestrips-using-metal + + // Emulating disabling this is very difficult. It's unlikely for an index buffer to use the largest possible index, + // so it's fine nearly all of the time. + } + + public void SetPrimitiveTopology(PrimitiveTopology topology) + { + _encoderStateManager.UpdatePrimitiveTopology(topology); + } + + public void SetProgram(IProgram program) + { + _encoderStateManager.UpdateProgram(program); + } + + public void SetRasterizerDiscard(bool discard) + { + _encoderStateManager.UpdateRasterizerDiscard(discard); + } + + public void SetRenderTargetColorMasks(ReadOnlySpan componentMask) + { + _encoderStateManager.UpdateRenderTargetColorMasks(componentMask); + } + + public void SetRenderTargets(ITexture[] colors, ITexture depthStencil) + { + _encoderStateManager.UpdateRenderTargets(colors, depthStencil); + } + + public void SetScissors(ReadOnlySpan> regions) + { + _encoderStateManager.UpdateScissors(regions); + } + + public void SetStencilTest(StencilTestDescriptor stencilTest) + { + _encoderStateManager.UpdateStencilState(stencilTest); + } + + public void SetUniformBuffers(ReadOnlySpan buffers) + { + _encoderStateManager.UpdateUniformBuffers(buffers); + } + + public void SetStorageBuffers(ReadOnlySpan buffers) + { + _encoderStateManager.UpdateStorageBuffers(buffers); + } + + internal void SetStorageBuffers(int first, ReadOnlySpan> buffers) + { + _encoderStateManager.UpdateStorageBuffers(first, buffers); + } + + public void SetTextureAndSampler(ShaderStage stage, int binding, ITexture texture, ISampler sampler) + { + if (texture is TextureBase tex) + { + if (sampler == null || sampler is SamplerHolder) + { + _encoderStateManager.UpdateTextureAndSampler(stage, binding, tex, (SamplerHolder)sampler); + } + } + } + + public void SetTextureArray(ShaderStage stage, int binding, ITextureArray array) + { + if (array is TextureArray textureArray) + { + _encoderStateManager.UpdateTextureArray(stage, binding, textureArray); + } + } + + public void SetTextureArraySeparate(ShaderStage stage, int setIndex, ITextureArray array) + { + if (array is TextureArray textureArray) + { + _encoderStateManager.UpdateTextureArraySeparate(stage, setIndex, textureArray); + } + } + + public void SetUserClipDistance(int index, bool enableClip) + { + // TODO. Same as Vulkan + } + + public void SetVertexAttribs(ReadOnlySpan vertexAttribs) + { + _encoderStateManager.UpdateVertexAttribs(vertexAttribs); + } + + public void SetVertexBuffers(ReadOnlySpan vertexBuffers) + { + _encoderStateManager.UpdateVertexBuffers(vertexBuffers); + } + + public void SetViewports(ReadOnlySpan viewports) + { + _encoderStateManager.UpdateViewports(viewports); + } + + public void TextureBarrier() + { + if (CurrentEncoderType == EncoderType.Render) + { + Encoders.RenderEncoder.MemoryBarrier(MTLBarrierScope.Textures, MTLRenderStages.RenderStageFragment, MTLRenderStages.RenderStageFragment); + } + } + + public void TextureBarrierTiled() + { + TextureBarrier(); + } + + public bool TryHostConditionalRendering(ICounterEvent value, ulong compare, bool isEqual) + { + // TODO: Implementable via indirect draw commands + return false; + } + + public bool TryHostConditionalRendering(ICounterEvent value, ICounterEvent compare, bool isEqual) + { + // TODO: Implementable via indirect draw commands + return false; + } + + public void EndHostConditionalRendering() + { + // TODO: Implementable via indirect draw commands + } + + public void BeginTransformFeedback(PrimitiveTopology topology) + { + // Metal does not support transform feedback. + } + + public void EndTransformFeedback() + { + // Metal does not support transform feedback. + } + + public void SetTransformFeedbackBuffers(ReadOnlySpan buffers) + { + // Metal does not support transform feedback. + } + + public void Dispose() + { + EndCurrentPass(); + _encoderStateManager.Dispose(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/Program.cs b/src/Ryujinx.Graphics.Metal/Program.cs new file mode 100644 index 000000000..37bae5817 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Program.cs @@ -0,0 +1,286 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using Ryujinx.Graphics.Shader; +using SharpMetal.Foundation; +using SharpMetal.Metal; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class Program : IProgram + { + private ProgramLinkStatus _status; + private readonly ShaderSource[] _shaders; + private readonly GCHandle[] _handles; + private int _successCount; + + private readonly MetalRenderer _renderer; + + public MTLFunction VertexFunction; + public MTLFunction FragmentFunction; + public MTLFunction ComputeFunction; + public ComputeSize ComputeLocalSize { get; } + + private HashTableSlim _graphicsPipelineCache; + private MTLComputePipelineState? _computePipelineCache; + private bool _firstBackgroundUse; + + public ResourceBindingSegment[][] BindingSegments { get; } + // Argument buffer sizes for Vertex or Compute stages + public int[] ArgumentBufferSizes { get; } + // Argument buffer sizes for Fragment stage + public int[] FragArgumentBufferSizes { get; } + + public Program( + MetalRenderer renderer, + MTLDevice device, + ShaderSource[] shaders, + ResourceLayout resourceLayout, + ComputeSize computeLocalSize = default) + { + _renderer = renderer; + renderer.Programs.Add(this); + + ComputeLocalSize = computeLocalSize; + _shaders = shaders; + _handles = new GCHandle[_shaders.Length]; + + _status = ProgramLinkStatus.Incomplete; + + for (int i = 0; i < _shaders.Length; i++) + { + ShaderSource shader = _shaders[i]; + + using var compileOptions = new MTLCompileOptions + { + PreserveInvariance = true, + LanguageVersion = MTLLanguageVersion.Version31, + }; + var index = i; + + _handles[i] = device.NewLibrary(StringHelper.NSString(shader.Code), compileOptions, (library, error) => CompilationResultHandler(library, error, index)); + } + + (BindingSegments, ArgumentBufferSizes, FragArgumentBufferSizes) = BuildBindingSegments(resourceLayout.SetUsages); + } + + public void CompilationResultHandler(MTLLibrary library, NSError error, int index) + { + var shader = _shaders[index]; + + if (_handles[index].IsAllocated) + { + _handles[index].Free(); + } + + if (error != IntPtr.Zero) + { + Logger.Warning?.PrintMsg(LogClass.Gpu, shader.Code); + Logger.Warning?.Print(LogClass.Gpu, $"{shader.Stage} shader linking failed: \n{StringHelper.String(error.LocalizedDescription)}"); + _status = ProgramLinkStatus.Failure; + return; + } + + switch (shader.Stage) + { + case ShaderStage.Compute: + ComputeFunction = library.NewFunction(StringHelper.NSString("kernelMain")); + break; + case ShaderStage.Vertex: + VertexFunction = library.NewFunction(StringHelper.NSString("vertexMain")); + break; + case ShaderStage.Fragment: + FragmentFunction = library.NewFunction(StringHelper.NSString("fragmentMain")); + break; + default: + Logger.Warning?.Print(LogClass.Gpu, $"Cannot handle stage {shader.Stage}!"); + break; + } + + _successCount++; + + if (_successCount >= _shaders.Length && _status != ProgramLinkStatus.Failure) + { + _status = ProgramLinkStatus.Success; + } + } + + private static (ResourceBindingSegment[][], int[], int[]) BuildBindingSegments(ReadOnlyCollection setUsages) + { + ResourceBindingSegment[][] segments = new ResourceBindingSegment[setUsages.Count][]; + int[] argBufferSizes = new int[setUsages.Count]; + int[] fragArgBufferSizes = new int[setUsages.Count]; + + for (int setIndex = 0; setIndex < setUsages.Count; setIndex++) + { + List currentSegments = new(); + + ResourceUsage currentUsage = default; + int currentCount = 0; + + for (int index = 0; index < setUsages[setIndex].Usages.Count; index++) + { + ResourceUsage usage = setUsages[setIndex].Usages[index]; + + if (currentUsage.Binding + currentCount != usage.Binding || + currentUsage.Type != usage.Type || + currentUsage.Stages != usage.Stages || + currentUsage.ArrayLength > 1 || + usage.ArrayLength > 1) + { + if (currentCount != 0) + { + currentSegments.Add(new ResourceBindingSegment( + currentUsage.Binding, + currentCount, + currentUsage.Type, + currentUsage.Stages, + currentUsage.ArrayLength > 1)); + + var size = currentCount * ResourcePointerSize(currentUsage.Type); + if (currentUsage.Stages.HasFlag(ResourceStages.Fragment)) + { + fragArgBufferSizes[setIndex] += size; + } + + if (currentUsage.Stages.HasFlag(ResourceStages.Vertex) || + currentUsage.Stages.HasFlag(ResourceStages.Compute)) + { + argBufferSizes[setIndex] += size; + } + } + + currentUsage = usage; + currentCount = usage.ArrayLength; + } + else + { + currentCount++; + } + } + + if (currentCount != 0) + { + currentSegments.Add(new ResourceBindingSegment( + currentUsage.Binding, + currentCount, + currentUsage.Type, + currentUsage.Stages, + currentUsage.ArrayLength > 1)); + + var size = currentCount * ResourcePointerSize(currentUsage.Type); + if (currentUsage.Stages.HasFlag(ResourceStages.Fragment)) + { + fragArgBufferSizes[setIndex] += size; + } + + if (currentUsage.Stages.HasFlag(ResourceStages.Vertex) || + currentUsage.Stages.HasFlag(ResourceStages.Compute)) + { + argBufferSizes[setIndex] += size; + } + } + + segments[setIndex] = currentSegments.ToArray(); + } + + return (segments, argBufferSizes, fragArgBufferSizes); + } + + private static int ResourcePointerSize(ResourceType type) + { + return (type == ResourceType.TextureAndSampler ? 2 : 1); + } + + public ProgramLinkStatus CheckProgramLink(bool blocking) + { + if (blocking) + { + while (_status == ProgramLinkStatus.Incomplete) + { } + + return _status; + } + + return _status; + } + + public byte[] GetBinary() + { + return []; + } + + public void AddGraphicsPipeline(ref PipelineUid key, MTLRenderPipelineState pipeline) + { + (_graphicsPipelineCache ??= new()).Add(ref key, pipeline); + } + + public void AddComputePipeline(MTLComputePipelineState pipeline) + { + _computePipelineCache = pipeline; + } + + public bool TryGetGraphicsPipeline(ref PipelineUid key, out MTLRenderPipelineState pipeline) + { + if (_graphicsPipelineCache == null) + { + pipeline = default; + return false; + } + + if (!_graphicsPipelineCache.TryGetValue(ref key, out pipeline)) + { + if (_firstBackgroundUse) + { + Logger.Warning?.Print(LogClass.Gpu, "Background pipeline compile missed on draw - incorrect pipeline state?"); + _firstBackgroundUse = false; + } + + return false; + } + + _firstBackgroundUse = false; + + return true; + } + + public bool TryGetComputePipeline(out MTLComputePipelineState pipeline) + { + if (_computePipelineCache.HasValue) + { + pipeline = _computePipelineCache.Value; + return true; + } + + pipeline = default; + return false; + } + + public void Dispose() + { + if (!_renderer.Programs.Remove(this)) + { + return; + } + + if (_graphicsPipelineCache != null) + { + foreach (MTLRenderPipelineState pipeline in _graphicsPipelineCache.Values) + { + pipeline.Dispose(); + } + } + + _computePipelineCache?.Dispose(); + + VertexFunction.Dispose(); + FragmentFunction.Dispose(); + ComputeFunction.Dispose(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/ResourceBindingSegment.cs b/src/Ryujinx.Graphics.Metal/ResourceBindingSegment.cs new file mode 100644 index 000000000..8e6d88c4b --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/ResourceBindingSegment.cs @@ -0,0 +1,22 @@ +using Ryujinx.Graphics.GAL; + +namespace Ryujinx.Graphics.Metal +{ + readonly struct ResourceBindingSegment + { + public readonly int Binding; + public readonly int Count; + public readonly ResourceType Type; + public readonly ResourceStages Stages; + public readonly bool IsArray; + + public ResourceBindingSegment(int binding, int count, ResourceType type, ResourceStages stages, bool isArray) + { + Binding = binding; + Count = count; + Type = type; + Stages = stages; + IsArray = isArray; + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs b/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs new file mode 100644 index 000000000..36ae9bac6 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/ResourceLayoutBuilder.cs @@ -0,0 +1,59 @@ +using Ryujinx.Graphics.GAL; +using System; +using System.Collections.Generic; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class ResourceLayoutBuilder + { + private const int TotalSets = MetalRenderer.TotalSets; + + private readonly List[] _resourceDescriptors; + private readonly List[] _resourceUsages; + + public ResourceLayoutBuilder() + { + _resourceDescriptors = new List[TotalSets]; + _resourceUsages = new List[TotalSets]; + + for (int index = 0; index < TotalSets; index++) + { + _resourceDescriptors[index] = new(); + _resourceUsages[index] = new(); + } + } + + public ResourceLayoutBuilder Add(ResourceStages stages, ResourceType type, int binding, bool write = false) + { + uint setIndex = type switch + { + ResourceType.UniformBuffer => Constants.ConstantBuffersSetIndex, + ResourceType.StorageBuffer => Constants.StorageBuffersSetIndex, + ResourceType.TextureAndSampler or ResourceType.BufferTexture => Constants.TexturesSetIndex, + ResourceType.Image or ResourceType.BufferImage => Constants.ImagesSetIndex, + _ => throw new ArgumentException($"Invalid resource type \"{type}\"."), + }; + + _resourceDescriptors[setIndex].Add(new ResourceDescriptor(binding, 1, type, stages)); + _resourceUsages[setIndex].Add(new ResourceUsage(binding, 1, type, stages, write)); + + return this; + } + + public ResourceLayout Build() + { + var descriptors = new ResourceDescriptorCollection[TotalSets]; + var usages = new ResourceUsageCollection[TotalSets]; + + for (int index = 0; index < TotalSets; index++) + { + descriptors[index] = new ResourceDescriptorCollection(_resourceDescriptors[index].ToArray().AsReadOnly()); + usages[index] = new ResourceUsageCollection(_resourceUsages[index].ToArray().AsReadOnly()); + } + + return new ResourceLayout(descriptors.AsReadOnly(), usages.AsReadOnly()); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/Ryujinx.Graphics.Metal.csproj b/src/Ryujinx.Graphics.Metal/Ryujinx.Graphics.Metal.csproj new file mode 100644 index 000000000..02afb150a --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Ryujinx.Graphics.Metal.csproj @@ -0,0 +1,30 @@ + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx.Graphics.Metal/SamplerHolder.cs b/src/Ryujinx.Graphics.Metal/SamplerHolder.cs new file mode 100644 index 000000000..3241efa6d --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/SamplerHolder.cs @@ -0,0 +1,90 @@ +using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class SamplerHolder : ISampler + { + private readonly MetalRenderer _renderer; + private readonly Auto _sampler; + + public SamplerHolder(MetalRenderer renderer, MTLDevice device, SamplerCreateInfo info) + { + _renderer = renderer; + + renderer.Samplers.Add(this); + + (MTLSamplerMinMagFilter minFilter, MTLSamplerMipFilter mipFilter) = info.MinFilter.Convert(); + + MTLSamplerBorderColor borderColor = GetConstrainedBorderColor(info.BorderColor, out _); + + using var descriptor = new MTLSamplerDescriptor + { + BorderColor = borderColor, + MinFilter = minFilter, + MagFilter = info.MagFilter.Convert(), + MipFilter = mipFilter, + CompareFunction = info.CompareOp.Convert(), + LodMinClamp = info.MinLod, + LodMaxClamp = info.MaxLod, + LodAverage = false, + MaxAnisotropy = Math.Max((uint)info.MaxAnisotropy, 1), + SAddressMode = info.AddressU.Convert(), + TAddressMode = info.AddressV.Convert(), + RAddressMode = info.AddressP.Convert(), + SupportArgumentBuffers = true + }; + + var sampler = device.NewSamplerState(descriptor); + + _sampler = new Auto(new DisposableSampler(sampler)); + } + + private static MTLSamplerBorderColor GetConstrainedBorderColor(ColorF arbitraryBorderColor, out bool cantConstrain) + { + float r = arbitraryBorderColor.Red; + float g = arbitraryBorderColor.Green; + float b = arbitraryBorderColor.Blue; + float a = arbitraryBorderColor.Alpha; + + if (r == 0f && g == 0f && b == 0f) + { + if (a == 1f) + { + cantConstrain = false; + return MTLSamplerBorderColor.OpaqueBlack; + } + + if (a == 0f) + { + cantConstrain = false; + return MTLSamplerBorderColor.TransparentBlack; + } + } + else if (r == 1f && g == 1f && b == 1f && a == 1f) + { + cantConstrain = false; + return MTLSamplerBorderColor.OpaqueWhite; + } + + cantConstrain = true; + return MTLSamplerBorderColor.OpaqueBlack; + } + + public Auto GetSampler() + { + return _sampler; + } + + public void Dispose() + { + if (_renderer.Samplers.Remove(this)) + { + _sampler.Dispose(); + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/Blit.metal b/src/Ryujinx.Graphics.Metal/Shaders/Blit.metal new file mode 100644 index 000000000..887878499 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/Blit.metal @@ -0,0 +1,43 @@ +#include + +using namespace metal; + +struct CopyVertexOut { + float4 position [[position]]; + float2 uv; +}; + +struct TexCoords { + float data[4]; +}; + +struct ConstantBuffers { + constant TexCoords* tex_coord; +}; + +struct Textures +{ + texture2d texture; + sampler sampler; +}; + +vertex CopyVertexOut vertexMain(uint vid [[vertex_id]], + constant ConstantBuffers &constant_buffers [[buffer(CONSTANT_BUFFERS_INDEX)]]) { + CopyVertexOut out; + + int low = vid & 1; + int high = vid >> 1; + out.uv.x = constant_buffers.tex_coord->data[low]; + out.uv.y = constant_buffers.tex_coord->data[2 + high]; + out.position.x = (float(low) - 0.5f) * 2.0f; + out.position.y = (float(high) - 0.5f) * 2.0f; + out.position.z = 0.0f; + out.position.w = 1.0f; + + return out; +} + +fragment FORMAT4 fragmentMain(CopyVertexOut in [[stage_in]], + constant Textures &textures [[buffer(TEXTURES_INDEX)]]) { + return textures.texture.sample(textures.sampler, in.uv); +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/BlitMs.metal b/src/Ryujinx.Graphics.Metal/Shaders/BlitMs.metal new file mode 100644 index 000000000..1077b6cea --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/BlitMs.metal @@ -0,0 +1,45 @@ +#include + +using namespace metal; + +struct CopyVertexOut { + float4 position [[position]]; + float2 uv; +}; + +struct TexCoords { + float data[4]; +}; + +struct ConstantBuffers { + constant TexCoords* tex_coord; +}; + +struct Textures +{ + texture2d_ms texture; +}; + +vertex CopyVertexOut vertexMain(uint vid [[vertex_id]], + constant ConstantBuffers &constant_buffers [[buffer(CONSTANT_BUFFERS_INDEX)]]) { + CopyVertexOut out; + + int low = vid & 1; + int high = vid >> 1; + out.uv.x = constant_buffers.tex_coord->data[low]; + out.uv.y = constant_buffers.tex_coord->data[2 + high]; + out.position.x = (float(low) - 0.5f) * 2.0f; + out.position.y = (float(high) - 0.5f) * 2.0f; + out.position.z = 0.0f; + out.position.w = 1.0f; + + return out; +} + +fragment FORMAT4 fragmentMain(CopyVertexOut in [[stage_in]], + constant Textures &textures [[buffer(TEXTURES_INDEX)]], + uint sample_id [[sample_id]]) { + uint2 tex_size = uint2(textures.texture.get_width(), textures.texture.get_height()); + uint2 tex_coord = uint2(in.uv * float2(tex_size)); + return textures.texture.read(tex_coord, sample_id); +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/ChangeBufferStride.metal b/src/Ryujinx.Graphics.Metal/Shaders/ChangeBufferStride.metal new file mode 100644 index 000000000..1a7d2c574 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/ChangeBufferStride.metal @@ -0,0 +1,72 @@ +#include + +using namespace metal; + +struct StrideArguments { + int4 data; +}; + +struct InData { + uint8_t data[1]; +}; + +struct OutData { + uint8_t data[1]; +}; + +struct ConstantBuffers { + constant StrideArguments* stride_arguments; +}; + +struct StorageBuffers { + device InData* in_data; + device OutData* out_data; +}; + +kernel void kernelMain(constant ConstantBuffers &constant_buffers [[buffer(CONSTANT_BUFFERS_INDEX)]], + device StorageBuffers &storage_buffers [[buffer(STORAGE_BUFFERS_INDEX)]], + uint3 thread_position_in_grid [[thread_position_in_grid]], + uint3 threads_per_threadgroup [[threads_per_threadgroup]], + uint3 threadgroups_per_grid [[threadgroups_per_grid]]) +{ + // Determine what slice of the stride copies this invocation will perform. + + int sourceStride = constant_buffers.stride_arguments->data.x; + int targetStride = constant_buffers.stride_arguments->data.y; + int bufferSize = constant_buffers.stride_arguments->data.z; + int sourceOffset = constant_buffers.stride_arguments->data.w; + + int strideRemainder = targetStride - sourceStride; + int invocations = int(threads_per_threadgroup.x * threadgroups_per_grid.x); + + int copiesRequired = bufferSize / sourceStride; + + // Find the copies that this invocation should perform. + + // - Copies that all invocations perform. + int allInvocationCopies = copiesRequired / invocations; + + // - Extra remainder copy that this invocation performs. + int index = int(thread_position_in_grid.x); + int extra = (index < (copiesRequired % invocations)) ? 1 : 0; + + int copyCount = allInvocationCopies + extra; + + // Finally, get the starting offset. Make sure to count extra copies. + + int startCopy = allInvocationCopies * index + min(copiesRequired % invocations, index); + + int srcOffset = sourceOffset + startCopy * sourceStride; + int dstOffset = startCopy * targetStride; + + // Perform the copies for this region + for (int i = 0; i < copyCount; i++) { + for (int j = 0; j < sourceStride; j++) { + storage_buffers.out_data->data[dstOffset++] = storage_buffers.in_data->data[srcOffset++]; + } + + for (int j = 0; j < strideRemainder; j++) { + storage_buffers.out_data->data[dstOffset++] = uint8_t(0); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/ColorClear.metal b/src/Ryujinx.Graphics.Metal/Shaders/ColorClear.metal new file mode 100644 index 000000000..46a57e035 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/ColorClear.metal @@ -0,0 +1,38 @@ +#include + +using namespace metal; + +struct VertexOut { + float4 position [[position]]; +}; + +struct ClearColor { + FORMAT4 data; +}; + +struct ConstantBuffers { + constant ClearColor* clear_color; +}; + +vertex VertexOut vertexMain(ushort vid [[vertex_id]]) { + int low = vid & 1; + int high = vid >> 1; + + VertexOut out; + + out.position.x = (float(low) - 0.5f) * 2.0f; + out.position.y = (float(high) - 0.5f) * 2.0f; + out.position.z = 0.0f; + out.position.w = 1.0f; + + return out; +} + +struct FragmentOut { + FORMAT4 color [[color(COLOR_ATTACHMENT_INDEX)]]; +}; + +fragment FragmentOut fragmentMain(VertexOut in [[stage_in]], + constant ConstantBuffers &constant_buffers [[buffer(CONSTANT_BUFFERS_INDEX)]]) { + return {constant_buffers.clear_color->data}; +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/ConvertD32S8ToD24S8.metal b/src/Ryujinx.Graphics.Metal/Shaders/ConvertD32S8ToD24S8.metal new file mode 100644 index 000000000..870ac3d78 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/ConvertD32S8ToD24S8.metal @@ -0,0 +1,66 @@ +#include + +using namespace metal; + +struct StrideArguments { + int pixelCount; + int dstStartOffset; +}; + +struct InData { + uint data[1]; +}; + +struct OutData { + uint data[1]; +}; + +struct ConstantBuffers { + constant StrideArguments* stride_arguments; +}; + +struct StorageBuffers { + device InData* in_data; + device OutData* out_data; +}; + +kernel void kernelMain(constant ConstantBuffers &constant_buffers [[buffer(CONSTANT_BUFFERS_INDEX)]], + device StorageBuffers &storage_buffers [[buffer(STORAGE_BUFFERS_INDEX)]], + uint3 thread_position_in_grid [[thread_position_in_grid]], + uint3 threads_per_threadgroup [[threads_per_threadgroup]], + uint3 threadgroups_per_grid [[threadgroups_per_grid]]) +{ + // Determine what slice of the stride copies this invocation will perform. + int invocations = int(threads_per_threadgroup.x * threadgroups_per_grid.x); + + int copiesRequired = constant_buffers.stride_arguments->pixelCount; + + // Find the copies that this invocation should perform. + + // - Copies that all invocations perform. + int allInvocationCopies = copiesRequired / invocations; + + // - Extra remainder copy that this invocation performs. + int index = int(thread_position_in_grid.x); + int extra = (index < (copiesRequired % invocations)) ? 1 : 0; + + int copyCount = allInvocationCopies + extra; + + // Finally, get the starting offset. Make sure to count extra copies. + + int startCopy = allInvocationCopies * index + min(copiesRequired % invocations, index); + + int srcOffset = startCopy * 2; + int dstOffset = constant_buffers.stride_arguments->dstStartOffset + startCopy; + + // Perform the conversion for this region. + for (int i = 0; i < copyCount; i++) + { + float depth = as_type(storage_buffers.in_data->data[srcOffset++]); + uint stencil = storage_buffers.in_data->data[srcOffset++]; + + uint rescaledDepth = uint(clamp(depth, 0.0, 1.0) * 16777215.0); + + storage_buffers.out_data->data[dstOffset++] = (rescaledDepth << 8) | (stencil & 0xff); + } +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/ConvertIndexBuffer.metal b/src/Ryujinx.Graphics.Metal/Shaders/ConvertIndexBuffer.metal new file mode 100644 index 000000000..c8fee5818 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/ConvertIndexBuffer.metal @@ -0,0 +1,59 @@ +#include + +using namespace metal; + +struct IndexBufferPattern { + int pattern[8]; + int primitiveVertices; + int primitiveVerticesOut; + int indexSize; + int indexSizeOut; + int baseIndex; + int indexStride; + int srcOffset; + int totalPrimitives; +}; + +struct InData { + uint8_t data[1]; +}; + +struct OutData { + uint8_t data[1]; +}; + +struct StorageBuffers { + device InData* in_data; + device OutData* out_data; + constant IndexBufferPattern* index_buffer_pattern; +}; + +kernel void kernelMain(device StorageBuffers &storage_buffers [[buffer(STORAGE_BUFFERS_INDEX)]], + uint3 thread_position_in_grid [[thread_position_in_grid]]) +{ + int primitiveIndex = int(thread_position_in_grid.x); + if (primitiveIndex >= storage_buffers.index_buffer_pattern->totalPrimitives) + { + return; + } + + int inOffset = primitiveIndex * storage_buffers.index_buffer_pattern->indexStride; + int outOffset = primitiveIndex * storage_buffers.index_buffer_pattern->primitiveVerticesOut; + + for (int i = 0; i < storage_buffers.index_buffer_pattern->primitiveVerticesOut; i++) + { + int j; + int io = max(0, inOffset + storage_buffers.index_buffer_pattern->baseIndex + storage_buffers.index_buffer_pattern->pattern[i]) * storage_buffers.index_buffer_pattern->indexSize; + int oo = (outOffset + i) * storage_buffers.index_buffer_pattern->indexSizeOut; + + for (j = 0; j < storage_buffers.index_buffer_pattern->indexSize; j++) + { + storage_buffers.out_data->data[oo + j] = storage_buffers.in_data->data[storage_buffers.index_buffer_pattern->srcOffset + io + j]; + } + + for(; j < storage_buffers.index_buffer_pattern->indexSizeOut; j++) + { + storage_buffers.out_data->data[oo + j] = uint8_t(0); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/DepthBlit.metal b/src/Ryujinx.Graphics.Metal/Shaders/DepthBlit.metal new file mode 100644 index 000000000..8b8467c2f --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/DepthBlit.metal @@ -0,0 +1,27 @@ +#include + +using namespace metal; + +struct CopyVertexOut { + float4 position [[position]]; + float2 uv; +}; + +struct Textures +{ + texture2d texture; + sampler sampler; +}; + +struct FragmentOut { + float depth [[depth(any)]]; +}; + +fragment FragmentOut fragmentMain(CopyVertexOut in [[stage_in]], + constant Textures &textures [[buffer(TEXTURES_INDEX)]]) { + FragmentOut out; + + out.depth = textures.texture.sample(textures.sampler, in.uv).r; + + return out; +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/DepthBlitMs.metal b/src/Ryujinx.Graphics.Metal/Shaders/DepthBlitMs.metal new file mode 100644 index 000000000..10791f636 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/DepthBlitMs.metal @@ -0,0 +1,29 @@ +#include + +using namespace metal; + +struct CopyVertexOut { + float4 position [[position]]; + float2 uv; +}; + +struct Textures +{ + texture2d_ms texture; +}; + +struct FragmentOut { + float depth [[depth(any)]]; +}; + +fragment FragmentOut fragmentMain(CopyVertexOut in [[stage_in]], + constant Textures &textures [[buffer(TEXTURES_INDEX)]], + uint sample_id [[sample_id]]) { + FragmentOut out; + + uint2 tex_size = uint2(textures.texture.get_width(), textures.texture.get_height()); + uint2 tex_coord = uint2(in.uv * float2(tex_size)); + out.depth = textures.texture.read(tex_coord, sample_id).r; + + return out; +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/DepthStencilClear.metal b/src/Ryujinx.Graphics.Metal/Shaders/DepthStencilClear.metal new file mode 100644 index 000000000..7e50f2ce7 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/DepthStencilClear.metal @@ -0,0 +1,42 @@ +#include + +using namespace metal; + +struct VertexOut { + float4 position [[position]]; +}; + +struct FragmentOut { + float depth [[depth(any)]]; +}; + +struct ClearDepth { + float data; +}; + +struct ConstantBuffers { + constant ClearDepth* clear_depth; +}; + +vertex VertexOut vertexMain(ushort vid [[vertex_id]]) { + int low = vid & 1; + int high = vid >> 1; + + VertexOut out; + + out.position.x = (float(low) - 0.5f) * 2.0f; + out.position.y = (float(high) - 0.5f) * 2.0f; + out.position.z = 0.0f; + out.position.w = 1.0f; + + return out; +} + +fragment FragmentOut fragmentMain(VertexOut in [[stage_in]], + constant ConstantBuffers &constant_buffers [[buffer(CONSTANT_BUFFERS_INDEX)]]) { + FragmentOut out; + + out.depth = constant_buffers.clear_depth->data; + + return out; +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/StencilBlit.metal b/src/Ryujinx.Graphics.Metal/Shaders/StencilBlit.metal new file mode 100644 index 000000000..0b25f322d --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/StencilBlit.metal @@ -0,0 +1,27 @@ +#include + +using namespace metal; + +struct CopyVertexOut { + float4 position [[position]]; + float2 uv; +}; + +struct Textures +{ + texture2d texture; + sampler sampler; +}; + +struct FragmentOut { + uint stencil [[stencil]]; +}; + +fragment FragmentOut fragmentMain(CopyVertexOut in [[stage_in]], + constant Textures &textures [[buffer(TEXTURES_INDEX)]]) { + FragmentOut out; + + out.stencil = textures.texture.sample(textures.sampler, in.uv).r; + + return out; +} diff --git a/src/Ryujinx.Graphics.Metal/Shaders/StencilBlitMs.metal b/src/Ryujinx.Graphics.Metal/Shaders/StencilBlitMs.metal new file mode 100644 index 000000000..e7f2d20b7 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Shaders/StencilBlitMs.metal @@ -0,0 +1,29 @@ +#include + +using namespace metal; + +struct CopyVertexOut { + float4 position [[position]]; + float2 uv; +}; + +struct Textures +{ + texture2d_ms texture; +}; + +struct FragmentOut { + uint stencil [[stencil]]; +}; + +fragment FragmentOut fragmentMain(CopyVertexOut in [[stage_in]], + constant Textures &textures [[buffer(TEXTURES_INDEX)]], + uint sample_id [[sample_id]]) { + FragmentOut out; + + uint2 tex_size = uint2(textures.texture.get_width(), textures.texture.get_height()); + uint2 tex_coord = uint2(in.uv * float2(tex_size)); + out.stencil = textures.texture.read(tex_coord, sample_id).r; + + return out; +} diff --git a/src/Ryujinx.Graphics.Metal/StagingBuffer.cs b/src/Ryujinx.Graphics.Metal/StagingBuffer.cs new file mode 100644 index 000000000..b250b87f2 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/StagingBuffer.cs @@ -0,0 +1,288 @@ +using Ryujinx.Common; +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + readonly struct StagingBufferReserved + { + public readonly BufferHolder Buffer; + public readonly int Offset; + public readonly int Size; + + public StagingBufferReserved(BufferHolder buffer, int offset, int size) + { + Buffer = buffer; + Offset = offset; + Size = size; + } + } + + [SupportedOSPlatform("macos")] + class StagingBuffer : IDisposable + { + private const int BufferSize = 32 * 1024 * 1024; + + private int _freeOffset; + private int _freeSize; + + private readonly MetalRenderer _renderer; + private readonly BufferHolder _buffer; + private readonly int _resourceAlignment; + + public readonly BufferHandle Handle; + + private readonly struct PendingCopy + { + public FenceHolder Fence { get; } + public int Size { get; } + + public PendingCopy(FenceHolder fence, int size) + { + Fence = fence; + Size = size; + fence.Get(); + } + } + + private readonly Queue _pendingCopies; + + public StagingBuffer(MetalRenderer renderer, BufferManager bufferManager) + { + _renderer = renderer; + + Handle = bufferManager.CreateWithHandle(BufferSize, out _buffer); + _pendingCopies = new Queue(); + _freeSize = BufferSize; + _resourceAlignment = Constants.MinResourceAlignment; + } + + public void PushData(CommandBufferPool cbp, CommandBufferScoped? cbs, BufferHolder dst, int dstOffset, ReadOnlySpan data) + { + bool isRender = cbs != null; + CommandBufferScoped scoped = cbs ?? cbp.Rent(); + + // Must push all data to the buffer. If it can't fit, split it up. + + while (data.Length > 0) + { + if (_freeSize < data.Length) + { + FreeCompleted(); + } + + while (_freeSize == 0) + { + if (!WaitFreeCompleted(cbp)) + { + if (isRender) + { + _renderer.FlushAllCommands(); + scoped = cbp.Rent(); + isRender = false; + } + else + { + scoped = cbp.ReturnAndRent(scoped); + } + } + } + + int chunkSize = Math.Min(_freeSize, data.Length); + + PushDataImpl(scoped, dst, dstOffset, data[..chunkSize]); + + dstOffset += chunkSize; + data = data[chunkSize..]; + } + + if (!isRender) + { + scoped.Dispose(); + } + } + + private void PushDataImpl(CommandBufferScoped cbs, BufferHolder dst, int dstOffset, ReadOnlySpan data) + { + var srcBuffer = _buffer.GetBuffer(); + var dstBuffer = dst.GetBuffer(dstOffset, data.Length, true); + + int offset = _freeOffset; + int capacity = BufferSize - offset; + if (capacity < data.Length) + { + _buffer.SetDataUnchecked(offset, data[..capacity]); + _buffer.SetDataUnchecked(0, data[capacity..]); + + BufferHolder.Copy(cbs, srcBuffer, dstBuffer, offset, dstOffset, capacity); + BufferHolder.Copy(cbs, srcBuffer, dstBuffer, 0, dstOffset + capacity, data.Length - capacity); + } + else + { + _buffer.SetDataUnchecked(offset, data); + + BufferHolder.Copy(cbs, srcBuffer, dstBuffer, offset, dstOffset, data.Length); + } + + _freeOffset = (offset + data.Length) & (BufferSize - 1); + _freeSize -= data.Length; + Debug.Assert(_freeSize >= 0); + + _pendingCopies.Enqueue(new PendingCopy(cbs.GetFence(), data.Length)); + } + + public bool TryPushData(CommandBufferScoped cbs, BufferHolder dst, int dstOffset, ReadOnlySpan data) + { + if (data.Length > BufferSize) + { + return false; + } + + if (_freeSize < data.Length) + { + FreeCompleted(); + + if (_freeSize < data.Length) + { + return false; + } + } + + PushDataImpl(cbs, dst, dstOffset, data); + + return true; + } + + private StagingBufferReserved ReserveDataImpl(CommandBufferScoped cbs, int size, int alignment) + { + // Assumes the caller has already determined that there is enough space. + int offset = BitUtils.AlignUp(_freeOffset, alignment); + int padding = offset - _freeOffset; + + int capacity = Math.Min(_freeSize, BufferSize - offset); + int reservedLength = size + padding; + if (capacity < size) + { + offset = 0; // Place at start. + reservedLength += capacity; + } + + _freeOffset = (_freeOffset + reservedLength) & (BufferSize - 1); + _freeSize -= reservedLength; + Debug.Assert(_freeSize >= 0); + + _pendingCopies.Enqueue(new PendingCopy(cbs.GetFence(), reservedLength)); + + return new StagingBufferReserved(_buffer, offset, size); + } + + private int GetContiguousFreeSize(int alignment) + { + int alignedFreeOffset = BitUtils.AlignUp(_freeOffset, alignment); + int padding = alignedFreeOffset - _freeOffset; + + // Free regions: + // - Aligned free offset to end (minimum free size - padding) + // - 0 to _freeOffset + freeSize wrapped (only if free area contains 0) + + int endOffset = (_freeOffset + _freeSize) & (BufferSize - 1); + + return Math.Max( + Math.Min(_freeSize - padding, BufferSize - alignedFreeOffset), + endOffset <= _freeOffset ? Math.Min(_freeSize, endOffset) : 0 + ); + } + + /// + /// Reserve a range on the staging buffer for the current command buffer and upload data to it. + /// + /// Command buffer to reserve the data on + /// The minimum size the reserved data requires + /// The required alignment for the buffer offset + /// The reserved range of the staging buffer + public StagingBufferReserved? TryReserveData(CommandBufferScoped cbs, int size, int alignment) + { + if (size > BufferSize) + { + return null; + } + + // Temporary reserved data cannot be fragmented. + + if (GetContiguousFreeSize(alignment) < size) + { + FreeCompleted(); + + if (GetContiguousFreeSize(alignment) < size) + { + Logger.Debug?.PrintMsg(LogClass.Gpu, $"Staging buffer out of space to reserve data of size {size}."); + return null; + } + } + + return ReserveDataImpl(cbs, size, alignment); + } + + /// + /// Reserve a range on the staging buffer for the current command buffer and upload data to it. + /// Uses the most permissive byte alignment. + /// + /// Command buffer to reserve the data on + /// The minimum size the reserved data requires + /// The reserved range of the staging buffer + public StagingBufferReserved? TryReserveData(CommandBufferScoped cbs, int size) + { + return TryReserveData(cbs, size, _resourceAlignment); + } + + private bool WaitFreeCompleted(CommandBufferPool cbp) + { + if (_pendingCopies.TryPeek(out var pc)) + { + if (!pc.Fence.IsSignaled()) + { + if (cbp.IsFenceOnRentedCommandBuffer(pc.Fence)) + { + return false; + } + + pc.Fence.Wait(); + } + + var dequeued = _pendingCopies.Dequeue(); + Debug.Assert(dequeued.Fence == pc.Fence); + _freeSize += pc.Size; + pc.Fence.Put(); + } + + return true; + } + + public void FreeCompleted() + { + FenceHolder signalledFence = null; + while (_pendingCopies.TryPeek(out var pc) && (pc.Fence == signalledFence || pc.Fence.IsSignaled())) + { + signalledFence = pc.Fence; // Already checked - don't need to do it again. + var dequeued = _pendingCopies.Dequeue(); + Debug.Assert(dequeued.Fence == pc.Fence); + _freeSize += pc.Size; + pc.Fence.Put(); + } + } + + public void Dispose() + { + _renderer.BufferManager.Delete(Handle); + + while (_pendingCopies.TryDequeue(out var pc)) + { + pc.Fence.Put(); + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/State/DepthStencilUid.cs b/src/Ryujinx.Graphics.Metal/State/DepthStencilUid.cs new file mode 100644 index 000000000..63b1d8ef4 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/State/DepthStencilUid.cs @@ -0,0 +1,110 @@ +using SharpMetal.Metal; +using System; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; + +namespace Ryujinx.Graphics.Metal.State +{ + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct StencilUid + { + public uint ReadMask; + public uint WriteMask; + public ushort Operations; + + public MTLStencilOperation StencilFailureOperation + { + readonly get => (MTLStencilOperation)((Operations >> 0) & 0xF); + set => Operations = (ushort)((Operations & 0xFFF0) | ((int)value << 0)); + } + + public MTLStencilOperation DepthFailureOperation + { + readonly get => (MTLStencilOperation)((Operations >> 4) & 0xF); + set => Operations = (ushort)((Operations & 0xFF0F) | ((int)value << 4)); + } + + public MTLStencilOperation DepthStencilPassOperation + { + readonly get => (MTLStencilOperation)((Operations >> 8) & 0xF); + set => Operations = (ushort)((Operations & 0xF0FF) | ((int)value << 8)); + } + + public MTLCompareFunction StencilCompareFunction + { + readonly get => (MTLCompareFunction)((Operations >> 12) & 0xF); + set => Operations = (ushort)((Operations & 0x0FFF) | ((int)value << 12)); + } + } + + + [StructLayout(LayoutKind.Explicit, Size = 24)] + internal struct DepthStencilUid : IEquatable + { + [FieldOffset(0)] + public StencilUid FrontFace; + + [FieldOffset(10)] + public ushort DepthState; + + [FieldOffset(12)] + public StencilUid BackFace; + + [FieldOffset(22)] + private readonly ushort _padding; + + // Quick access aliases +#pragma warning disable IDE0044 // Add readonly modifier + [FieldOffset(0)] + private ulong _id0; + [FieldOffset(8)] + private ulong _id1; + [FieldOffset(0)] + private Vector128 _id01; + [FieldOffset(16)] + private ulong _id2; +#pragma warning restore IDE0044 // Add readonly modifier + + public MTLCompareFunction DepthCompareFunction + { + readonly get => (MTLCompareFunction)((DepthState >> 0) & 0xF); + set => DepthState = (ushort)((DepthState & 0xFFF0) | ((int)value << 0)); + } + + public bool StencilTestEnabled + { + readonly get => ((DepthState >> 4) & 0x1) != 0; + set => DepthState = (ushort)((DepthState & 0xFFEF) | ((value ? 1 : 0) << 4)); + } + + public bool DepthWriteEnabled + { + readonly get => ((DepthState >> 15) & 0x1) != 0; + set => DepthState = (ushort)((DepthState & 0x7FFF) | ((value ? 1 : 0) << 15)); + } + + public readonly override bool Equals(object obj) + { + return obj is DepthStencilUid other && EqualsRef(ref other); + } + + public readonly bool EqualsRef(ref DepthStencilUid other) + { + return _id01.Equals(other._id01) && _id2 == other._id2; + } + + public readonly bool Equals(DepthStencilUid other) + { + return EqualsRef(ref other); + } + + public readonly override int GetHashCode() + { + ulong hash64 = _id0 * 23 ^ + _id1 * 23 ^ + _id2 * 23; + + return (int)hash64 ^ ((int)(hash64 >> 32) * 17); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/State/PipelineState.cs b/src/Ryujinx.Graphics.Metal/State/PipelineState.cs new file mode 100644 index 000000000..9f88f3061 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/State/PipelineState.cs @@ -0,0 +1,341 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using SharpMetal.Foundation; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + struct PipelineState + { + public PipelineUid Internal; + + public uint StagesCount + { + readonly get => (byte)((Internal.Id0 >> 0) & 0xFF); + set => Internal.Id0 = (Internal.Id0 & 0xFFFFFFFFFFFFFF00) | ((ulong)value << 0); + } + + public uint VertexAttributeDescriptionsCount + { + readonly get => (byte)((Internal.Id0 >> 8) & 0xFF); + set => Internal.Id0 = (Internal.Id0 & 0xFFFFFFFFFFFF00FF) | ((ulong)value << 8); + } + + public uint VertexBindingDescriptionsCount + { + readonly get => (byte)((Internal.Id0 >> 16) & 0xFF); + set => Internal.Id0 = (Internal.Id0 & 0xFFFFFFFFFF00FFFF) | ((ulong)value << 16); + } + + public uint ColorBlendAttachmentStateCount + { + readonly get => (byte)((Internal.Id0 >> 24) & 0xFF); + set => Internal.Id0 = (Internal.Id0 & 0xFFFFFFFF00FFFFFF) | ((ulong)value << 24); + } + + /* + * Can be an input to a pipeline, but not sure what the situation for that is. + public PrimitiveTopology Topology + { + readonly get => (PrimitiveTopology)((Internal.Id6 >> 16) & 0xF); + set => Internal.Id6 = (Internal.Id6 & 0xFFFFFFFFFFF0FFFF) | ((ulong)value << 16); + } + */ + + public MTLLogicOperation LogicOp + { + readonly get => (MTLLogicOperation)((Internal.Id0 >> 32) & 0xF); + set => Internal.Id0 = (Internal.Id0 & 0xFFFFFFF0FFFFFFFF) | ((ulong)value << 32); + } + + //? + public bool PrimitiveRestartEnable + { + readonly get => ((Internal.Id0 >> 36) & 0x1) != 0UL; + set => Internal.Id0 = (Internal.Id0 & 0xFFFFFFEFFFFFFFFF) | ((value ? 1UL : 0UL) << 36); + } + + public bool RasterizerDiscardEnable + { + readonly get => ((Internal.Id0 >> 37) & 0x1) != 0UL; + set => Internal.Id0 = (Internal.Id0 & 0xFFFFFFDFFFFFFFFF) | ((value ? 1UL : 0UL) << 37); + } + + public bool LogicOpEnable + { + readonly get => ((Internal.Id0 >> 38) & 0x1) != 0UL; + set => Internal.Id0 = (Internal.Id0 & 0xFFFFFFBFFFFFFFFF) | ((value ? 1UL : 0UL) << 38); + } + + public bool AlphaToCoverageEnable + { + readonly get => ((Internal.Id0 >> 40) & 0x1) != 0UL; + set => Internal.Id0 = (Internal.Id0 & 0xFFFFFEFFFFFFFFFF) | ((value ? 1UL : 0UL) << 40); + } + + public bool AlphaToOneEnable + { + readonly get => ((Internal.Id0 >> 41) & 0x1) != 0UL; + set => Internal.Id0 = (Internal.Id0 & 0xFFFFFDFFFFFFFFFF) | ((value ? 1UL : 0UL) << 41); + } + + public MTLPixelFormat DepthStencilFormat + { + readonly get => (MTLPixelFormat)(Internal.Id0 >> 48); + set => Internal.Id0 = (Internal.Id0 & 0x0000FFFFFFFFFFFF) | ((ulong)value << 48); + } + + // Not sure how to appropriately use this, but it does need to be passed for tess. + public uint PatchControlPoints + { + readonly get => (uint)((Internal.Id1 >> 0) & 0xFFFFFFFF); + set => Internal.Id1 = (Internal.Id1 & 0xFFFFFFFF00000000) | ((ulong)value << 0); + } + + public uint SamplesCount + { + readonly get => (uint)((Internal.Id1 >> 32) & 0xFFFFFFFF); + set => Internal.Id1 = (Internal.Id1 & 0xFFFFFFFF) | ((ulong)value << 32); + } + + // Advanced blend not supported + + private readonly void BuildColorAttachment(MTLRenderPipelineColorAttachmentDescriptor descriptor, ColorBlendStateUid blendState) + { + descriptor.PixelFormat = blendState.PixelFormat; + descriptor.SetBlendingEnabled(blendState.Enable); + descriptor.AlphaBlendOperation = blendState.AlphaBlendOperation; + descriptor.RgbBlendOperation = blendState.RgbBlendOperation; + descriptor.SourceAlphaBlendFactor = blendState.SourceAlphaBlendFactor; + descriptor.DestinationAlphaBlendFactor = blendState.DestinationAlphaBlendFactor; + descriptor.SourceRGBBlendFactor = blendState.SourceRGBBlendFactor; + descriptor.DestinationRGBBlendFactor = blendState.DestinationRGBBlendFactor; + descriptor.WriteMask = blendState.WriteMask; + } + + private readonly MTLVertexDescriptor BuildVertexDescriptor() + { + var vertexDescriptor = new MTLVertexDescriptor(); + + for (int i = 0; i < VertexAttributeDescriptionsCount; i++) + { + VertexInputAttributeUid uid = Internal.VertexAttributes[i]; + + var attrib = vertexDescriptor.Attributes.Object((ulong)i); + attrib.Format = uid.Format; + attrib.Offset = uid.Offset; + attrib.BufferIndex = uid.BufferIndex; + } + + for (int i = 0; i < VertexBindingDescriptionsCount; i++) + { + VertexInputLayoutUid uid = Internal.VertexBindings[i]; + + var layout = vertexDescriptor.Layouts.Object((ulong)i); + + layout.StepFunction = uid.StepFunction; + layout.StepRate = uid.StepRate; + layout.Stride = uid.Stride; + } + + return vertexDescriptor; + } + + private MTLRenderPipelineDescriptor CreateRenderDescriptor(Program program) + { + var renderPipelineDescriptor = new MTLRenderPipelineDescriptor(); + + for (int i = 0; i < Constants.MaxColorAttachments; i++) + { + var blendState = Internal.ColorBlendState[i]; + + if (blendState.PixelFormat != MTLPixelFormat.Invalid) + { + var pipelineAttachment = renderPipelineDescriptor.ColorAttachments.Object((ulong)i); + + BuildColorAttachment(pipelineAttachment, blendState); + } + } + + MTLPixelFormat dsFormat = DepthStencilFormat; + if (dsFormat != MTLPixelFormat.Invalid) + { + switch (dsFormat) + { + // Depth Only Attachment + case MTLPixelFormat.Depth16Unorm: + case MTLPixelFormat.Depth32Float: + renderPipelineDescriptor.DepthAttachmentPixelFormat = dsFormat; + break; + + // Stencil Only Attachment + case MTLPixelFormat.Stencil8: + renderPipelineDescriptor.StencilAttachmentPixelFormat = dsFormat; + break; + + // Combined Attachment + case MTLPixelFormat.Depth24UnormStencil8: + case MTLPixelFormat.Depth32FloatStencil8: + renderPipelineDescriptor.DepthAttachmentPixelFormat = dsFormat; + renderPipelineDescriptor.StencilAttachmentPixelFormat = dsFormat; + break; + default: + Logger.Error?.PrintMsg(LogClass.Gpu, $"Unsupported Depth/Stencil Format: {dsFormat}!"); + break; + } + } + + renderPipelineDescriptor.LogicOperationEnabled = LogicOpEnable; + renderPipelineDescriptor.LogicOperation = LogicOp; + renderPipelineDescriptor.AlphaToCoverageEnabled = AlphaToCoverageEnable; + renderPipelineDescriptor.AlphaToOneEnabled = AlphaToOneEnable; + renderPipelineDescriptor.RasterizationEnabled = !RasterizerDiscardEnable; + renderPipelineDescriptor.SampleCount = Math.Max(1, SamplesCount); + + var vertexDescriptor = BuildVertexDescriptor(); + renderPipelineDescriptor.VertexDescriptor = vertexDescriptor; + + renderPipelineDescriptor.VertexFunction = program.VertexFunction; + + if (program.FragmentFunction.NativePtr != 0) + { + renderPipelineDescriptor.FragmentFunction = program.FragmentFunction; + } + + return renderPipelineDescriptor; + } + + public MTLRenderPipelineState CreateRenderPipeline(MTLDevice device, Program program) + { + if (program.TryGetGraphicsPipeline(ref Internal, out var pipelineState)) + { + return pipelineState; + } + + using var descriptor = CreateRenderDescriptor(program); + + var error = new NSError(IntPtr.Zero); + pipelineState = device.NewRenderPipelineState(descriptor, ref error); + if (error != IntPtr.Zero) + { + Logger.Error?.PrintMsg(LogClass.Gpu, $"Failed to create Render Pipeline State: {StringHelper.String(error.LocalizedDescription)}"); + } + + program.AddGraphicsPipeline(ref Internal, pipelineState); + + return pipelineState; + } + + public static MTLComputePipelineDescriptor CreateComputeDescriptor(Program program) + { + ComputeSize localSize = program.ComputeLocalSize; + + uint maxThreads = (uint)(localSize.X * localSize.Y * localSize.Z); + + if (maxThreads == 0) + { + throw new InvalidOperationException($"Local thread size for compute cannot be 0 in any dimension."); + } + + var descriptor = new MTLComputePipelineDescriptor + { + ComputeFunction = program.ComputeFunction, + MaxTotalThreadsPerThreadgroup = maxThreads, + ThreadGroupSizeIsMultipleOfThreadExecutionWidth = true, + }; + + return descriptor; + } + + public static MTLComputePipelineState CreateComputePipeline(MTLDevice device, Program program) + { + if (program.TryGetComputePipeline(out var pipelineState)) + { + return pipelineState; + } + + using MTLComputePipelineDescriptor descriptor = CreateComputeDescriptor(program); + + var error = new NSError(IntPtr.Zero); + pipelineState = device.NewComputePipelineState(descriptor, MTLPipelineOption.None, 0, ref error); + if (error != IntPtr.Zero) + { + Logger.Error?.PrintMsg(LogClass.Gpu, $"Failed to create Compute Pipeline State: {StringHelper.String(error.LocalizedDescription)}"); + } + + program.AddComputePipeline(pipelineState); + + return pipelineState; + } + + public void Initialize() + { + SamplesCount = 1; + + Internal.ResetColorState(); + } + + /* + * TODO, this is from vulkan. + + private void UpdateVertexAttributeDescriptions(VulkanRenderer gd) + { + // Vertex attributes exceeding the stride are invalid. + // In metal, they cause glitches with the vertex shader fetching incorrect values. + // To work around this, we reduce the format to something that doesn't exceed the stride if possible. + // The assumption is that the exceeding components are not actually accessed on the shader. + + for (int index = 0; index < VertexAttributeDescriptionsCount; index++) + { + var attribute = Internal.VertexAttributeDescriptions[index]; + int vbIndex = GetVertexBufferIndex(attribute.Binding); + + if (vbIndex >= 0) + { + ref var vb = ref Internal.VertexBindingDescriptions[vbIndex]; + + Format format = attribute.Format; + + while (vb.Stride != 0 && attribute.Offset + FormatTable.GetAttributeFormatSize(format) > vb.Stride) + { + Format newFormat = FormatTable.DropLastComponent(format); + + if (newFormat == format) + { + // That case means we failed to find a format that fits within the stride, + // so just restore the original format and give up. + format = attribute.Format; + break; + } + + format = newFormat; + } + + if (attribute.Format != format && gd.FormatCapabilities.BufferFormatSupports(FormatFeatureFlags.VertexBufferBit, format)) + { + attribute.Format = format; + } + } + + _vertexAttributeDescriptions2[index] = attribute; + } + } + + private int GetVertexBufferIndex(uint binding) + { + for (int index = 0; index < VertexBindingDescriptionsCount; index++) + { + if (Internal.VertexBindingDescriptions[index].Binding == binding) + { + return index; + } + } + + return -1; + } + */ + } +} diff --git a/src/Ryujinx.Graphics.Metal/State/PipelineUid.cs b/src/Ryujinx.Graphics.Metal/State/PipelineUid.cs new file mode 100644 index 000000000..c986a7e23 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/State/PipelineUid.cs @@ -0,0 +1,208 @@ +using Ryujinx.Common.Memory; +using SharpMetal.Metal; +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + struct VertexInputAttributeUid + { + public ulong Id0; + + public ulong Offset + { + readonly get => (uint)((Id0 >> 0) & 0xFFFFFFFF); + set => Id0 = (Id0 & 0xFFFFFFFF00000000) | ((ulong)value << 0); + } + + public MTLVertexFormat Format + { + readonly get => (MTLVertexFormat)((Id0 >> 32) & 0xFFFF); + set => Id0 = (Id0 & 0xFFFF0000FFFFFFFF) | ((ulong)value << 32); + } + + public ulong BufferIndex + { + readonly get => ((Id0 >> 48) & 0xFFFF); + set => Id0 = (Id0 & 0x0000FFFFFFFFFFFF) | ((ulong)value << 48); + } + } + + struct VertexInputLayoutUid + { + public ulong Id0; + + public uint Stride + { + readonly get => (uint)((Id0 >> 0) & 0xFFFFFFFF); + set => Id0 = (Id0 & 0xFFFFFFFF00000000) | ((ulong)value << 0); + } + + public uint StepRate + { + readonly get => (uint)((Id0 >> 32) & 0x1FFFFFFF); + set => Id0 = (Id0 & 0xE0000000FFFFFFFF) | ((ulong)value << 32); + } + + public MTLVertexStepFunction StepFunction + { + readonly get => (MTLVertexStepFunction)((Id0 >> 61) & 0x7); + set => Id0 = (Id0 & 0x1FFFFFFFFFFFFFFF) | ((ulong)value << 61); + } + } + + struct ColorBlendStateUid + { + public ulong Id0; + + public MTLPixelFormat PixelFormat + { + readonly get => (MTLPixelFormat)((Id0 >> 0) & 0xFFFF); + set => Id0 = (Id0 & 0xFFFFFFFFFFFF0000) | ((ulong)value << 0); + } + + public MTLBlendFactor SourceRGBBlendFactor + { + readonly get => (MTLBlendFactor)((Id0 >> 16) & 0xFF); + set => Id0 = (Id0 & 0xFFFFFFFFFF00FFFF) | ((ulong)value << 16); + } + + public MTLBlendFactor DestinationRGBBlendFactor + { + readonly get => (MTLBlendFactor)((Id0 >> 24) & 0xFF); + set => Id0 = (Id0 & 0xFFFFFFFF00FFFFFF) | ((ulong)value << 24); + } + + public MTLBlendOperation RgbBlendOperation + { + readonly get => (MTLBlendOperation)((Id0 >> 32) & 0xF); + set => Id0 = (Id0 & 0xFFFFFFF0FFFFFFFF) | ((ulong)value << 32); + } + + public MTLBlendOperation AlphaBlendOperation + { + readonly get => (MTLBlendOperation)((Id0 >> 36) & 0xF); + set => Id0 = (Id0 & 0xFFFFFF0FFFFFFFFF) | ((ulong)value << 36); + } + + public MTLBlendFactor SourceAlphaBlendFactor + { + readonly get => (MTLBlendFactor)((Id0 >> 40) & 0xFF); + set => Id0 = (Id0 & 0xFFFF00FFFFFFFFFF) | ((ulong)value << 40); + } + + public MTLBlendFactor DestinationAlphaBlendFactor + { + readonly get => (MTLBlendFactor)((Id0 >> 48) & 0xFF); + set => Id0 = (Id0 & 0xFF00FFFFFFFFFFFF) | ((ulong)value << 48); + } + + public MTLColorWriteMask WriteMask + { + readonly get => (MTLColorWriteMask)((Id0 >> 56) & 0xF); + set => Id0 = (Id0 & 0xF0FFFFFFFFFFFFFF) | ((ulong)value << 56); + } + + public bool Enable + { + readonly get => ((Id0 >> 63) & 0x1) != 0UL; + set => Id0 = (Id0 & 0x7FFFFFFFFFFFFFFF) | ((value ? 1UL : 0UL) << 63); + } + + public void Swap(ColorBlendStateUid uid) + { + var format = PixelFormat; + + this = uid; + PixelFormat = format; + } + } + + [SupportedOSPlatform("macos")] + struct PipelineUid : IRefEquatable + { + public ulong Id0; + public ulong Id1; + + private readonly uint VertexAttributeDescriptionsCount => (byte)((Id0 >> 8) & 0xFF); + private readonly uint VertexBindingDescriptionsCount => (byte)((Id0 >> 16) & 0xFF); + private readonly uint ColorBlendAttachmentStateCount => (byte)((Id0 >> 24) & 0xFF); + + public Array32 VertexAttributes; + public Array33 VertexBindings; + public Array8 ColorBlendState; + public uint AttachmentIntegerFormatMask; + public bool LogicOpsAllowed; + + public void ResetColorState() + { + ColorBlendState = new(); + + for (int i = 0; i < ColorBlendState.Length; i++) + { + ColorBlendState[i].WriteMask = MTLColorWriteMask.All; + } + } + + public readonly override bool Equals(object obj) + { + return obj is PipelineUid other && Equals(other); + } + + public bool Equals(ref PipelineUid other) + { + if (!Unsafe.As>(ref Id0).Equals(Unsafe.As>(ref other.Id0))) + { + return false; + } + + if (!SequenceEqual(VertexAttributes.AsSpan(), other.VertexAttributes.AsSpan(), VertexAttributeDescriptionsCount)) + { + return false; + } + + if (!SequenceEqual(VertexBindings.AsSpan(), other.VertexBindings.AsSpan(), VertexBindingDescriptionsCount)) + { + return false; + } + + if (!SequenceEqual(ColorBlendState.AsSpan(), other.ColorBlendState.AsSpan(), ColorBlendAttachmentStateCount)) + { + return false; + } + + return true; + } + + private static bool SequenceEqual(ReadOnlySpan x, ReadOnlySpan y, uint count) where T : unmanaged + { + return MemoryMarshal.Cast(x[..(int)count]).SequenceEqual(MemoryMarshal.Cast(y[..(int)count])); + } + + public override int GetHashCode() + { + ulong hash64 = Id0 * 23 ^ + Id1 * 23; + + for (int i = 0; i < (int)VertexAttributeDescriptionsCount; i++) + { + hash64 ^= VertexAttributes[i].Id0 * 23; + } + + for (int i = 0; i < (int)VertexBindingDescriptionsCount; i++) + { + hash64 ^= VertexBindings[i].Id0 * 23; + } + + for (int i = 0; i < (int)ColorBlendAttachmentStateCount; i++) + { + hash64 ^= ColorBlendState[i].Id0 * 23; + } + + return (int)hash64 ^ ((int)(hash64 >> 32) * 17); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/StateCache.cs b/src/Ryujinx.Graphics.Metal/StateCache.cs new file mode 100644 index 000000000..9b8391ffc --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/StateCache.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + abstract class StateCache : IDisposable where T : IDisposable + { + private readonly Dictionary _cache = new(); + + protected abstract THash GetHash(TDescriptor descriptor); + + protected abstract T CreateValue(TDescriptor descriptor); + + public void Dispose() + { + foreach (T value in _cache.Values) + { + value.Dispose(); + } + + GC.SuppressFinalize(this); + } + + public T GetOrCreate(TDescriptor descriptor) + { + var hash = GetHash(descriptor); + if (_cache.TryGetValue(hash, out T value)) + { + return value; + } + else + { + var newValue = CreateValue(descriptor); + _cache.Add(hash, newValue); + + return newValue; + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/StringHelper.cs b/src/Ryujinx.Graphics.Metal/StringHelper.cs new file mode 100644 index 000000000..46e8ad2e9 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/StringHelper.cs @@ -0,0 +1,30 @@ +using SharpMetal.Foundation; +using SharpMetal.ObjectiveCCore; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class StringHelper + { + public static NSString NSString(string source) + { + return new(ObjectiveC.IntPtr_objc_msgSend(new ObjectiveCClass("NSString"), "stringWithUTF8String:", source)); + } + + public static unsafe string String(NSString source) + { + char[] sourceBuffer = new char[source.Length]; + fixed (char* pSourceBuffer = sourceBuffer) + { + ObjectiveC.bool_objc_msgSend(source, + "getCString:maxLength:encoding:", + pSourceBuffer, + source.MaximumLengthOfBytes(NSStringEncoding.UTF16) + 1, + (ulong)NSStringEncoding.UTF16); + } + + return new string(sourceBuffer); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/SyncManager.cs b/src/Ryujinx.Graphics.Metal/SyncManager.cs new file mode 100644 index 000000000..ca49fe263 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/SyncManager.cs @@ -0,0 +1,214 @@ +using Ryujinx.Common.Logging; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class SyncManager + { + private class SyncHandle + { + public ulong ID; + public MultiFenceHolder Waitable; + public ulong FlushId; + public bool Signalled; + + public bool NeedsFlush(ulong currentFlushId) + { + return (long)(FlushId - currentFlushId) >= 0; + } + } + + private ulong _firstHandle; + + private readonly MetalRenderer _renderer; + private readonly List _handles; + private ulong _flushId; + private long _waitTicks; + + public SyncManager(MetalRenderer renderer) + { + _renderer = renderer; + _handles = new List(); + } + + public void RegisterFlush() + { + _flushId++; + } + + public void Create(ulong id, bool strict) + { + ulong flushId = _flushId; + MultiFenceHolder waitable = new(); + if (strict || _renderer.InterruptAction == null) + { + _renderer.FlushAllCommands(); + _renderer.CommandBufferPool.AddWaitable(waitable); + } + else + { + // Don't flush commands, instead wait for the current command buffer to finish. + // If this sync is waited on before the command buffer is submitted, interrupt the gpu thread and flush it manually. + + _renderer.CommandBufferPool.AddInUseWaitable(waitable); + } + + SyncHandle handle = new() + { + ID = id, + Waitable = waitable, + FlushId = flushId, + }; + + lock (_handles) + { + _handles.Add(handle); + } + } + + public ulong GetCurrent() + { + lock (_handles) + { + ulong lastHandle = _firstHandle; + + foreach (SyncHandle handle in _handles) + { + lock (handle) + { + if (handle.Waitable == null) + { + continue; + } + + if (handle.ID > lastHandle) + { + bool signaled = handle.Signalled || handle.Waitable.WaitForFences(false); + if (signaled) + { + lastHandle = handle.ID; + handle.Signalled = true; + } + } + } + } + + return lastHandle; + } + } + + public void Wait(ulong id) + { + SyncHandle result = null; + + lock (_handles) + { + if ((long)(_firstHandle - id) > 0) + { + return; // The handle has already been signalled or deleted. + } + + foreach (SyncHandle handle in _handles) + { + if (handle.ID == id) + { + result = handle; + break; + } + } + } + + if (result != null) + { + if (result.Waitable == null) + { + return; + } + + long beforeTicks = Stopwatch.GetTimestamp(); + + if (result.NeedsFlush(_flushId)) + { + _renderer.InterruptAction(() => + { + if (result.NeedsFlush(_flushId)) + { + _renderer.FlushAllCommands(); + } + }); + } + + lock (result) + { + if (result.Waitable == null) + { + return; + } + + bool signaled = result.Signalled || result.Waitable.WaitForFences(true); + + if (!signaled) + { + Logger.Error?.PrintMsg(LogClass.Gpu, $"Metal Sync Object {result.ID} failed to signal within 1000ms. Continuing..."); + } + else + { + _waitTicks += Stopwatch.GetTimestamp() - beforeTicks; + result.Signalled = true; + } + } + } + } + + public void Cleanup() + { + // Iterate through handles and remove any that have already been signalled. + + while (true) + { + SyncHandle first = null; + lock (_handles) + { + first = _handles.FirstOrDefault(); + } + + if (first == null || first.NeedsFlush(_flushId)) + { + break; + } + + bool signaled = first.Waitable.WaitForFences(false); + if (signaled) + { + // Delete the sync object. + lock (_handles) + { + lock (first) + { + _firstHandle = first.ID + 1; + _handles.RemoveAt(0); + first.Waitable = null; + } + } + } + else + { + // This sync handle and any following have not been reached yet. + break; + } + } + } + + public long GetAndResetWaitTicks() + { + long result = _waitTicks; + _waitTicks = 0; + + return result; + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/Texture.cs b/src/Ryujinx.Graphics.Metal/Texture.cs new file mode 100644 index 000000000..4566d65d8 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Texture.cs @@ -0,0 +1,654 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Common.Memory; +using Ryujinx.Graphics.GAL; +using SharpMetal.Foundation; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class Texture : TextureBase, ITexture + { + private MTLTexture _identitySwizzleHandle; + private readonly bool _identityIsDifferent; + + public Texture(MTLDevice device, MetalRenderer renderer, Pipeline pipeline, TextureCreateInfo info) : base(device, renderer, pipeline, info) + { + MTLPixelFormat pixelFormat = FormatTable.GetFormat(Info.Format); + + var descriptor = new MTLTextureDescriptor + { + PixelFormat = pixelFormat, + Usage = MTLTextureUsage.Unknown, + SampleCount = (ulong)Info.Samples, + TextureType = Info.Target.Convert(), + Width = (ulong)Info.Width, + Height = (ulong)Info.Height, + MipmapLevelCount = (ulong)Info.Levels + }; + + if (info.Target == Target.Texture3D) + { + descriptor.Depth = (ulong)Info.Depth; + } + else if (info.Target != Target.Cubemap) + { + if (info.Target == Target.CubemapArray) + { + descriptor.ArrayLength = (ulong)(Info.Depth / 6); + } + else + { + descriptor.ArrayLength = (ulong)Info.Depth; + } + } + + MTLTextureSwizzleChannels swizzle = GetSwizzle(info, descriptor.PixelFormat); + + _identitySwizzleHandle = Device.NewTexture(descriptor); + + if (SwizzleIsIdentity(swizzle)) + { + MtlTexture = _identitySwizzleHandle; + } + else + { + MtlTexture = CreateDefaultView(_identitySwizzleHandle, swizzle, descriptor); + _identityIsDifferent = true; + } + + MtlFormat = pixelFormat; + descriptor.Dispose(); + } + + public Texture(MTLDevice device, MetalRenderer renderer, Pipeline pipeline, TextureCreateInfo info, MTLTexture sourceTexture, int firstLayer, int firstLevel) : base(device, renderer, pipeline, info) + { + var pixelFormat = FormatTable.GetFormat(Info.Format); + + if (info.DepthStencilMode == DepthStencilMode.Stencil) + { + pixelFormat = pixelFormat switch + { + MTLPixelFormat.Depth32FloatStencil8 => MTLPixelFormat.X32Stencil8, + MTLPixelFormat.Depth24UnormStencil8 => MTLPixelFormat.X24Stencil8, + _ => pixelFormat + }; + } + + var textureType = Info.Target.Convert(); + NSRange levels; + levels.location = (ulong)firstLevel; + levels.length = (ulong)Info.Levels; + NSRange slices; + slices.location = (ulong)firstLayer; + slices.length = textureType == MTLTextureType.Type3D ? 1 : (ulong)info.GetDepthOrLayers(); + + var swizzle = GetSwizzle(info, pixelFormat); + + _identitySwizzleHandle = sourceTexture.NewTextureView(pixelFormat, textureType, levels, slices); + + if (SwizzleIsIdentity(swizzle)) + { + MtlTexture = _identitySwizzleHandle; + } + else + { + MtlTexture = sourceTexture.NewTextureView(pixelFormat, textureType, levels, slices, swizzle); + _identityIsDifferent = true; + } + + MtlFormat = pixelFormat; + FirstLayer = firstLayer; + FirstLevel = firstLevel; + } + + public void PopulateRenderPassAttachment(MTLRenderPassColorAttachmentDescriptor descriptor) + { + descriptor.Texture = _identitySwizzleHandle; + } + + private MTLTexture CreateDefaultView(MTLTexture texture, MTLTextureSwizzleChannels swizzle, MTLTextureDescriptor descriptor) + { + NSRange levels; + levels.location = 0; + levels.length = (ulong)Info.Levels; + NSRange slices; + slices.location = 0; + slices.length = Info.Target == Target.Texture3D ? 1 : (ulong)Info.GetDepthOrLayers(); + + return texture.NewTextureView(descriptor.PixelFormat, descriptor.TextureType, levels, slices, swizzle); + } + + private bool SwizzleIsIdentity(MTLTextureSwizzleChannels swizzle) + { + return swizzle.red == MTLTextureSwizzle.Red && + swizzle.green == MTLTextureSwizzle.Green && + swizzle.blue == MTLTextureSwizzle.Blue && + swizzle.alpha == MTLTextureSwizzle.Alpha; + } + + private MTLTextureSwizzleChannels GetSwizzle(TextureCreateInfo info, MTLPixelFormat pixelFormat) + { + var swizzleR = Info.SwizzleR.Convert(); + var swizzleG = Info.SwizzleG.Convert(); + var swizzleB = Info.SwizzleB.Convert(); + var swizzleA = Info.SwizzleA.Convert(); + + if (info.Format == Format.R5G5B5A1Unorm || + info.Format == Format.R5G5B5X1Unorm || + info.Format == Format.R5G6B5Unorm) + { + (swizzleB, swizzleR) = (swizzleR, swizzleB); + } + else if (pixelFormat == MTLPixelFormat.ABGR4Unorm || info.Format == Format.A1B5G5R5Unorm) + { + var tempB = swizzleB; + var tempA = swizzleA; + + swizzleB = swizzleG; + swizzleA = swizzleR; + swizzleR = tempA; + swizzleG = tempB; + } + + return new MTLTextureSwizzleChannels + { + red = swizzleR, + green = swizzleG, + blue = swizzleB, + alpha = swizzleA + }; + } + + public void CopyTo(ITexture destination, int firstLayer, int firstLevel) + { + CommandBufferScoped cbs = Pipeline.Cbs; + + TextureBase src = this; + TextureBase dst = (TextureBase)destination; + + if (!Valid || !dst.Valid) + { + return; + } + + var srcImage = GetHandle(); + var dstImage = dst.GetHandle(); + + if (!dst.Info.Target.IsMultisample() && Info.Target.IsMultisample()) + { + // int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); + + // _gd.HelperShader.CopyMSToNonMS(_gd, cbs, src, dst, 0, firstLayer, layers); + } + else if (dst.Info.Target.IsMultisample() && !Info.Target.IsMultisample()) + { + // int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); + + // _gd.HelperShader.CopyNonMSToMS(_gd, cbs, src, dst, 0, firstLayer, layers); + } + else if (dst.Info.BytesPerPixel != Info.BytesPerPixel) + { + // int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); + // int levels = Math.Min(Info.Levels, dst.Info.Levels - firstLevel); + + // _gd.HelperShader.CopyIncompatibleFormats(_gd, cbs, src, dst, 0, firstLayer, 0, firstLevel, layers, levels); + } + else if (src.Info.Format.IsDepthOrStencil() != dst.Info.Format.IsDepthOrStencil()) + { + // int layers = Math.Min(Info.GetLayers(), dst.Info.GetLayers() - firstLayer); + // int levels = Math.Min(Info.Levels, dst.Info.Levels - firstLevel); + + // TODO: depth copy? + // _gd.HelperShader.CopyColor(_gd, cbs, src, dst, 0, firstLayer, 0, FirstLevel, layers, levels); + } + else + { + TextureCopy.Copy( + cbs, + srcImage, + dstImage, + src.Info, + dst.Info, + 0, + firstLayer, + 0, + firstLevel); + } + } + + public void CopyTo(ITexture destination, int srcLayer, int dstLayer, int srcLevel, int dstLevel) + { + CommandBufferScoped cbs = Pipeline.Cbs; + + TextureBase src = this; + TextureBase dst = (TextureBase)destination; + + if (!Valid || !dst.Valid) + { + return; + } + + var srcImage = GetHandle(); + var dstImage = dst.GetHandle(); + + if (!dst.Info.Target.IsMultisample() && Info.Target.IsMultisample()) + { + // _gd.HelperShader.CopyMSToNonMS(_gd, cbs, src, dst, srcLayer, dstLayer, 1); + } + else if (dst.Info.Target.IsMultisample() && !Info.Target.IsMultisample()) + { + // _gd.HelperShader.CopyNonMSToMS(_gd, cbs, src, dst, srcLayer, dstLayer, 1); + } + else if (dst.Info.BytesPerPixel != Info.BytesPerPixel) + { + // _gd.HelperShader.CopyIncompatibleFormats(_gd, cbs, src, dst, srcLayer, dstLayer, srcLevel, dstLevel, 1, 1); + } + else if (src.Info.Format.IsDepthOrStencil() != dst.Info.Format.IsDepthOrStencil()) + { + // _gd.HelperShader.CopyColor(_gd, cbs, src, dst, srcLayer, dstLayer, srcLevel, dstLevel, 1, 1); + } + else + { + TextureCopy.Copy( + cbs, + srcImage, + dstImage, + src.Info, + dst.Info, + srcLayer, + dstLayer, + srcLevel, + dstLevel, + 1, + 1); + } + } + + public void CopyTo(ITexture destination, Extents2D srcRegion, Extents2D dstRegion, bool linearFilter) + { + if (!Renderer.CommandBufferPool.OwnedByCurrentThread) + { + Logger.Warning?.PrintMsg(LogClass.Gpu, "Metal doesn't currently support scaled blit on background thread."); + + return; + } + + var dst = (Texture)destination; + + bool isDepthOrStencil = dst.Info.Format.IsDepthOrStencil(); + + Pipeline.Blit(this, dst, srcRegion, dstRegion, isDepthOrStencil, linearFilter); + } + + public void CopyTo(BufferRange range, int layer, int level, int stride) + { + var cbs = Pipeline.Cbs; + + int outSize = Info.GetMipSize(level); + int hostSize = GetBufferDataLength(outSize); + + int offset = range.Offset; + + var autoBuffer = Renderer.BufferManager.GetBuffer(range.Handle, true); + var mtlBuffer = autoBuffer.Get(cbs, range.Offset, outSize).Value; + + if (PrepareOutputBuffer(cbs, hostSize, mtlBuffer, out MTLBuffer copyToBuffer, out BufferHolder tempCopyHolder)) + { + offset = 0; + } + + CopyFromOrToBuffer(cbs, copyToBuffer, MtlTexture, hostSize, true, layer, level, 1, 1, singleSlice: true, offset, stride); + + if (tempCopyHolder != null) + { + CopyDataToOutputBuffer(cbs, tempCopyHolder, autoBuffer, hostSize, range.Offset); + tempCopyHolder.Dispose(); + } + } + + public ITexture CreateView(TextureCreateInfo info, int firstLayer, int firstLevel) + { + return new Texture(Device, Renderer, Pipeline, info, _identitySwizzleHandle, firstLayer, firstLevel); + } + + private void CopyDataToBuffer(Span storage, ReadOnlySpan input) + { + if (NeedsD24S8Conversion()) + { + FormatConverter.ConvertD24S8ToD32FS8(storage, input); + return; + } + + input.CopyTo(storage); + } + + private ReadOnlySpan GetDataFromBuffer(ReadOnlySpan storage, int size, Span output) + { + if (NeedsD24S8Conversion()) + { + if (output.IsEmpty) + { + output = new byte[GetBufferDataLength(size)]; + } + + FormatConverter.ConvertD32FS8ToD24S8(output, storage); + return output; + } + + return storage; + } + + private bool PrepareOutputBuffer(CommandBufferScoped cbs, int hostSize, MTLBuffer target, out MTLBuffer copyTarget, out BufferHolder copyTargetHolder) + { + if (NeedsD24S8Conversion()) + { + copyTargetHolder = Renderer.BufferManager.Create(hostSize); + copyTarget = copyTargetHolder.GetBuffer().Get(cbs, 0, hostSize).Value; + + return true; + } + + copyTarget = target; + copyTargetHolder = null; + + return false; + } + + private void CopyDataToOutputBuffer(CommandBufferScoped cbs, BufferHolder hostData, Auto copyTarget, int hostSize, int dstOffset) + { + if (NeedsD24S8Conversion()) + { + Renderer.HelperShader.ConvertD32S8ToD24S8(cbs, hostData, copyTarget, hostSize / (2 * sizeof(int)), dstOffset); + } + } + + private bool NeedsD24S8Conversion() + { + return FormatTable.IsD24S8(Info.Format) && MtlFormat == MTLPixelFormat.Depth32FloatStencil8; + } + + public void CopyFromOrToBuffer( + CommandBufferScoped cbs, + MTLBuffer buffer, + MTLTexture image, + int size, + bool to, + int dstLayer, + int dstLevel, + int dstLayers, + int dstLevels, + bool singleSlice, + int offset = 0, + int stride = 0) + { + MTLBlitCommandEncoder blitCommandEncoder = cbs.Encoders.EnsureBlitEncoder(); + + bool is3D = Info.Target == Target.Texture3D; + int width = Math.Max(1, Info.Width >> dstLevel); + int height = Math.Max(1, Info.Height >> dstLevel); + int depth = is3D && !singleSlice ? Math.Max(1, Info.Depth >> dstLevel) : 1; + int layers = dstLayers; + int levels = dstLevels; + + for (int oLevel = 0; oLevel < levels; oLevel++) + { + int level = oLevel + dstLevel; + int mipSize = Info.GetMipSize2D(level); + + int mipSizeLevel = GetBufferDataLength(is3D && !singleSlice + ? Info.GetMipSize(level) + : mipSize * dstLayers); + + int endOffset = offset + mipSizeLevel; + + if ((uint)endOffset > (uint)size) + { + break; + } + + for (int oLayer = 0; oLayer < layers; oLayer++) + { + int layer = !is3D ? dstLayer + oLayer : 0; + int z = is3D ? dstLayer + oLayer : 0; + + if (to) + { + blitCommandEncoder.CopyFromTexture( + image, + (ulong)layer, + (ulong)level, + new MTLOrigin { z = (ulong)z }, + new MTLSize { width = (ulong)width, height = (ulong)height, depth = 1 }, + buffer, + (ulong)offset, + (ulong)Info.GetMipStride(level), + (ulong)mipSize + ); + } + else + { + blitCommandEncoder.CopyFromBuffer( + buffer, + (ulong)offset, + (ulong)Info.GetMipStride(level), + (ulong)mipSize, + new MTLSize { width = (ulong)width, height = (ulong)height, depth = 1 }, + image, + (ulong)(layer + oLayer), + (ulong)level, + new MTLOrigin { z = (ulong)z } + ); + } + + offset += mipSize; + } + + width = Math.Max(1, width >> 1); + height = Math.Max(1, height >> 1); + + if (Info.Target == Target.Texture3D) + { + depth = Math.Max(1, depth >> 1); + } + } + } + + private ReadOnlySpan GetData(CommandBufferPool cbp, PersistentFlushBuffer flushBuffer) + { + int size = 0; + + for (int level = 0; level < Info.Levels; level++) + { + size += Info.GetMipSize(level); + } + + size = GetBufferDataLength(size); + + Span result = flushBuffer.GetTextureData(cbp, this, size); + + return GetDataFromBuffer(result, size, result); + } + + private ReadOnlySpan GetData(CommandBufferPool cbp, PersistentFlushBuffer flushBuffer, int layer, int level) + { + int size = GetBufferDataLength(Info.GetMipSize(level)); + + Span result = flushBuffer.GetTextureData(cbp, this, size, layer, level); + + return GetDataFromBuffer(result, size, result); + } + + public PinnedSpan GetData() + { + BackgroundResource resources = Renderer.BackgroundResources.Get(); + + if (Renderer.CommandBufferPool.OwnedByCurrentThread) + { + Renderer.FlushAllCommands(); + + return PinnedSpan.UnsafeFromSpan(GetData(Renderer.CommandBufferPool, resources.GetFlushBuffer())); + } + + return PinnedSpan.UnsafeFromSpan(GetData(resources.GetPool(), resources.GetFlushBuffer())); + } + + public PinnedSpan GetData(int layer, int level) + { + BackgroundResource resources = Renderer.BackgroundResources.Get(); + + if (Renderer.CommandBufferPool.OwnedByCurrentThread) + { + Renderer.FlushAllCommands(); + + return PinnedSpan.UnsafeFromSpan(GetData(Renderer.CommandBufferPool, resources.GetFlushBuffer(), layer, level)); + } + + return PinnedSpan.UnsafeFromSpan(GetData(resources.GetPool(), resources.GetFlushBuffer(), layer, level)); + } + + public void SetData(MemoryOwner data) + { + var blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder(); + + var dataSpan = data.Memory.Span; + + var buffer = Renderer.BufferManager.Create(dataSpan.Length); + buffer.SetDataUnchecked(0, dataSpan); + var mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value; + + int width = Info.Width; + int height = Info.Height; + int depth = Info.Depth; + int levels = Info.Levels; + int layers = Info.GetLayers(); + bool is3D = Info.Target == Target.Texture3D; + + int offset = 0; + + for (int level = 0; level < levels; level++) + { + int mipSize = Info.GetMipSize2D(level); + int endOffset = offset + mipSize; + + if ((uint)endOffset > (uint)dataSpan.Length) + { + return; + } + + for (int layer = 0; layer < layers; layer++) + { + blitCommandEncoder.CopyFromBuffer( + mtlBuffer, + (ulong)offset, + (ulong)Info.GetMipStride(level), + (ulong)mipSize, + new MTLSize { width = (ulong)width, height = (ulong)height, depth = is3D ? (ulong)depth : 1 }, + MtlTexture, + (ulong)layer, + (ulong)level, + new MTLOrigin() + ); + + offset += mipSize; + } + + width = Math.Max(1, width >> 1); + height = Math.Max(1, height >> 1); + + if (is3D) + { + depth = Math.Max(1, depth >> 1); + } + } + + // Cleanup + buffer.Dispose(); + } + + private void SetData(ReadOnlySpan data, int layer, int level, int layers, int levels, bool singleSlice) + { + int bufferDataLength = GetBufferDataLength(data.Length); + + using var bufferHolder = Renderer.BufferManager.Create(bufferDataLength); + + // TODO: loadInline logic + + var cbs = Pipeline.Cbs; + + CopyDataToBuffer(bufferHolder.GetDataStorage(0, bufferDataLength), data); + + var buffer = bufferHolder.GetBuffer().Get(cbs).Value; + var image = GetHandle(); + + CopyFromOrToBuffer(cbs, buffer, image, bufferDataLength, false, layer, level, layers, levels, singleSlice); + } + + public void SetData(MemoryOwner data, int layer, int level) + { + SetData(data.Memory.Span, layer, level, 1, 1, singleSlice: true); + + data.Dispose(); + } + + public void SetData(MemoryOwner data, int layer, int level, Rectangle region) + { + var blitCommandEncoder = Pipeline.GetOrCreateBlitEncoder(); + + ulong bytesPerRow = (ulong)Info.GetMipStride(level); + ulong bytesPerImage = 0; + if (MtlTexture.TextureType == MTLTextureType.Type3D) + { + bytesPerImage = bytesPerRow * (ulong)Info.Height; + } + + var dataSpan = data.Memory.Span; + + var buffer = Renderer.BufferManager.Create(dataSpan.Length); + buffer.SetDataUnchecked(0, dataSpan); + var mtlBuffer = buffer.GetBuffer(false).Get(Pipeline.Cbs).Value; + + blitCommandEncoder.CopyFromBuffer( + mtlBuffer, + 0, + bytesPerRow, + bytesPerImage, + new MTLSize { width = (ulong)region.Width, height = (ulong)region.Height, depth = 1 }, + MtlTexture, + (ulong)layer, + (ulong)level, + new MTLOrigin { x = (ulong)region.X, y = (ulong)region.Y } + ); + + // Cleanup + buffer.Dispose(); + } + + private int GetBufferDataLength(int length) + { + if (NeedsD24S8Conversion()) + { + return length * 2; + } + + return length; + } + + public void SetStorage(BufferRange buffer) + { + throw new NotImplementedException(); + } + + public override void Release() + { + if (_identityIsDifferent) + { + _identitySwizzleHandle.Dispose(); + } + + base.Release(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/TextureArray.cs b/src/Ryujinx.Graphics.Metal/TextureArray.cs new file mode 100644 index 000000000..ea2c74420 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/TextureArray.cs @@ -0,0 +1,93 @@ +using Ryujinx.Graphics.GAL; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + internal class TextureArray : ITextureArray + { + private readonly TextureRef[] _textureRefs; + private readonly TextureBuffer[] _bufferTextureRefs; + + private readonly bool _isBuffer; + private readonly Pipeline _pipeline; + + public TextureArray(int size, bool isBuffer, Pipeline pipeline) + { + if (isBuffer) + { + _bufferTextureRefs = new TextureBuffer[size]; + } + else + { + _textureRefs = new TextureRef[size]; + } + + _isBuffer = isBuffer; + _pipeline = pipeline; + } + + public void SetSamplers(int index, ISampler[] samplers) + { + for (int i = 0; i < samplers.Length; i++) + { + ISampler sampler = samplers[i]; + + if (sampler is SamplerHolder samp) + { + _textureRefs[index + i].Sampler = samp.GetSampler(); + } + else + { + _textureRefs[index + i].Sampler = default; + } + } + + SetDirty(); + } + + public void SetTextures(int index, ITexture[] textures) + { + for (int i = 0; i < textures.Length; i++) + { + ITexture texture = textures[i]; + + if (texture is TextureBuffer textureBuffer) + { + _bufferTextureRefs[index + i] = textureBuffer; + } + else if (texture is Texture tex) + { + _textureRefs[index + i].Storage = tex; + } + else if (!_isBuffer) + { + _textureRefs[index + i].Storage = null; + } + else + { + _bufferTextureRefs[index + i] = null; + } + } + + SetDirty(); + } + + public TextureRef[] GetTextureRefs() + { + return _textureRefs; + } + + public TextureBuffer[] GetBufferTextureRefs() + { + return _bufferTextureRefs; + } + + private void SetDirty() + { + _pipeline.DirtyTextures(); + } + + public void Dispose() { } + } +} diff --git a/src/Ryujinx.Graphics.Metal/TextureBase.cs b/src/Ryujinx.Graphics.Metal/TextureBase.cs new file mode 100644 index 000000000..fecd64958 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/TextureBase.cs @@ -0,0 +1,67 @@ +using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; +using System.Threading; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + abstract class TextureBase : IDisposable + { + private int _isValid = 1; + + public bool Valid => Volatile.Read(ref _isValid) != 0; + + protected readonly Pipeline Pipeline; + protected readonly MTLDevice Device; + protected readonly MetalRenderer Renderer; + + protected MTLTexture MtlTexture; + + public readonly TextureCreateInfo Info; + public int Width => Info.Width; + public int Height => Info.Height; + public int Depth => Info.Depth; + + public MTLPixelFormat MtlFormat { get; protected set; } + public int FirstLayer { get; protected set; } + public int FirstLevel { get; protected set; } + + public TextureBase(MTLDevice device, MetalRenderer renderer, Pipeline pipeline, TextureCreateInfo info) + { + Device = device; + Renderer = renderer; + Pipeline = pipeline; + Info = info; + } + + public MTLTexture GetHandle() + { + if (_isValid == 0) + { + return new MTLTexture(IntPtr.Zero); + } + + return MtlTexture; + } + + public virtual void Release() + { + Dispose(); + } + + public void Dispose() + { + bool wasValid = Interlocked.Exchange(ref _isValid, 0) != 0; + + if (wasValid) + { + if (MtlTexture != IntPtr.Zero) + { + MtlTexture.Dispose(); + } + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/TextureBuffer.cs b/src/Ryujinx.Graphics.Metal/TextureBuffer.cs new file mode 100644 index 000000000..483cef28b --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/TextureBuffer.cs @@ -0,0 +1,132 @@ +using Ryujinx.Common.Memory; +using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class TextureBuffer : TextureBase, ITexture + { + private MTLTextureDescriptor _descriptor; + private BufferHandle _bufferHandle; + private int _offset; + private int _size; + + private int _bufferCount; + private Auto _buffer; + + public TextureBuffer(MTLDevice device, MetalRenderer renderer, Pipeline pipeline, TextureCreateInfo info) : base(device, renderer, pipeline, info) + { + MTLPixelFormat pixelFormat = FormatTable.GetFormat(Info.Format); + + _descriptor = new MTLTextureDescriptor + { + PixelFormat = pixelFormat, + Usage = MTLTextureUsage.Unknown, + TextureType = MTLTextureType.TextureBuffer, + Width = (ulong)Info.Width, + Height = (ulong)Info.Height, + }; + + MtlFormat = pixelFormat; + } + + public void RebuildStorage(bool write) + { + if (MtlTexture != IntPtr.Zero) + { + MtlTexture.Dispose(); + } + + if (_buffer == null) + { + MtlTexture = default; + } + else + { + DisposableBuffer buffer = _buffer.Get(Pipeline.Cbs, _offset, _size, write); + + _descriptor.Width = (uint)(_size / Info.BytesPerPixel); + MtlTexture = buffer.Value.NewTexture(_descriptor, (ulong)_offset, (ulong)_size); + } + } + + public void CopyTo(ITexture destination, int firstLayer, int firstLevel) + { + throw new NotSupportedException(); + } + + public void CopyTo(ITexture destination, int srcLayer, int dstLayer, int srcLevel, int dstLevel) + { + throw new NotSupportedException(); + } + + public void CopyTo(ITexture destination, Extents2D srcRegion, Extents2D dstRegion, bool linearFilter) + { + throw new NotSupportedException(); + } + + public ITexture CreateView(TextureCreateInfo info, int firstLayer, int firstLevel) + { + throw new NotSupportedException(); + } + + public PinnedSpan GetData() + { + return Renderer.GetBufferData(_bufferHandle, _offset, _size); + } + + public PinnedSpan GetData(int layer, int level) + { + return GetData(); + } + + public void CopyTo(BufferRange range, int layer, int level, int stride) + { + throw new NotImplementedException(); + } + + public void SetData(MemoryOwner data) + { + Renderer.SetBufferData(_bufferHandle, _offset, data.Memory.Span); + data.Dispose(); + } + + public void SetData(MemoryOwner data, int layer, int level) + { + throw new NotSupportedException(); + } + + public void SetData(MemoryOwner data, int layer, int level, Rectangle region) + { + throw new NotSupportedException(); + } + + public void SetStorage(BufferRange buffer) + { + if (_bufferHandle == buffer.Handle && + _offset == buffer.Offset && + _size == buffer.Size && + _bufferCount == Renderer.BufferManager.BufferCount) + { + return; + } + + _bufferHandle = buffer.Handle; + _offset = buffer.Offset; + _size = buffer.Size; + _bufferCount = Renderer.BufferManager.BufferCount; + + _buffer = Renderer.BufferManager.GetBuffer(_bufferHandle, false); + } + + public override void Release() + { + _descriptor.Dispose(); + + base.Release(); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/TextureCopy.cs b/src/Ryujinx.Graphics.Metal/TextureCopy.cs new file mode 100644 index 000000000..b91a3cd89 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/TextureCopy.cs @@ -0,0 +1,265 @@ +using Ryujinx.Common; +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + static class TextureCopy + { + public static ulong CopyFromOrToBuffer( + CommandBufferScoped cbs, + MTLBuffer buffer, + MTLTexture image, + TextureCreateInfo info, + bool to, + int dstLayer, + int dstLevel, + int x, + int y, + int width, + int height, + ulong offset = 0) + { + MTLBlitCommandEncoder blitCommandEncoder = cbs.Encoders.EnsureBlitEncoder(); + + bool is3D = info.Target == Target.Texture3D; + + int blockWidth = BitUtils.DivRoundUp(width, info.BlockWidth); + int blockHeight = BitUtils.DivRoundUp(height, info.BlockHeight); + ulong bytesPerRow = (ulong)BitUtils.AlignUp(blockWidth * info.BytesPerPixel, 4); + ulong bytesPerImage = bytesPerRow * (ulong)blockHeight; + + MTLOrigin origin = new MTLOrigin { x = (ulong)x, y = (ulong)y, z = is3D ? (ulong)dstLayer : 0 }; + MTLSize region = new MTLSize { width = (ulong)width, height = (ulong)height, depth = 1 }; + + uint layer = is3D ? 0 : (uint)dstLayer; + + if (to) + { + blitCommandEncoder.CopyFromTexture( + image, + layer, + (ulong)dstLevel, + origin, + region, + buffer, + offset, + bytesPerRow, + bytesPerImage); + } + else + { + blitCommandEncoder.CopyFromBuffer(buffer, offset, bytesPerRow, bytesPerImage, region, image, layer, (ulong)dstLevel, origin); + } + + return offset + bytesPerImage; + } + + public static void Copy( + CommandBufferScoped cbs, + MTLTexture srcImage, + MTLTexture dstImage, + TextureCreateInfo srcInfo, + TextureCreateInfo dstInfo, + int srcLayer, + int dstLayer, + int srcLevel, + int dstLevel) + { + int srcDepth = srcInfo.GetDepthOrLayers(); + int srcLevels = srcInfo.Levels; + + int dstDepth = dstInfo.GetDepthOrLayers(); + int dstLevels = dstInfo.Levels; + + if (dstInfo.Target == Target.Texture3D) + { + dstDepth = Math.Max(1, dstDepth >> dstLevel); + } + + int depth = Math.Min(srcDepth, dstDepth); + int levels = Math.Min(srcLevels, dstLevels); + + Copy( + cbs, + srcImage, + dstImage, + srcInfo, + dstInfo, + srcLayer, + dstLayer, + srcLevel, + dstLevel, + depth, + levels); + } + + public static void Copy( + CommandBufferScoped cbs, + MTLTexture srcImage, + MTLTexture dstImage, + TextureCreateInfo srcInfo, + TextureCreateInfo dstInfo, + int srcDepthOrLayer, + int dstDepthOrLayer, + int srcLevel, + int dstLevel, + int depthOrLayers, + int levels) + { + MTLBlitCommandEncoder blitCommandEncoder = cbs.Encoders.EnsureBlitEncoder(); + + int srcZ; + int srcLayer; + int srcDepth; + int srcLayers; + + if (srcInfo.Target == Target.Texture3D) + { + srcZ = srcDepthOrLayer; + srcLayer = 0; + srcDepth = depthOrLayers; + srcLayers = 1; + } + else + { + srcZ = 0; + srcLayer = srcDepthOrLayer; + srcDepth = 1; + srcLayers = depthOrLayers; + } + + int dstZ; + int dstLayer; + int dstLayers; + + if (dstInfo.Target == Target.Texture3D) + { + dstZ = dstDepthOrLayer; + dstLayer = 0; + dstLayers = 1; + } + else + { + dstZ = 0; + dstLayer = dstDepthOrLayer; + dstLayers = depthOrLayers; + } + + int srcWidth = srcInfo.Width; + int srcHeight = srcInfo.Height; + + int dstWidth = dstInfo.Width; + int dstHeight = dstInfo.Height; + + srcWidth = Math.Max(1, srcWidth >> srcLevel); + srcHeight = Math.Max(1, srcHeight >> srcLevel); + + dstWidth = Math.Max(1, dstWidth >> dstLevel); + dstHeight = Math.Max(1, dstHeight >> dstLevel); + + int blockWidth = 1; + int blockHeight = 1; + bool sizeInBlocks = false; + + MTLBuffer tempBuffer = default; + + if (srcInfo.Format != dstInfo.Format && (srcInfo.IsCompressed || dstInfo.IsCompressed)) + { + // Compressed alias copies need to happen through a temporary buffer. + // The data is copied from the source to the buffer, then the buffer to the destination. + // The length of the buffer should be the maximum slice size for the destination. + + tempBuffer = blitCommandEncoder.Device.NewBuffer((ulong)dstInfo.GetMipSize2D(0), MTLResourceOptions.ResourceStorageModePrivate); + } + + // When copying from a compressed to a non-compressed format, + // the non-compressed texture will have the size of the texture + // in blocks (not in texels), so we must adjust that size to + // match the size in texels of the compressed texture. + if (!srcInfo.IsCompressed && dstInfo.IsCompressed) + { + srcWidth *= dstInfo.BlockWidth; + srcHeight *= dstInfo.BlockHeight; + blockWidth = dstInfo.BlockWidth; + blockHeight = dstInfo.BlockHeight; + + sizeInBlocks = true; + } + else if (srcInfo.IsCompressed && !dstInfo.IsCompressed) + { + dstWidth *= srcInfo.BlockWidth; + dstHeight *= srcInfo.BlockHeight; + blockWidth = srcInfo.BlockWidth; + blockHeight = srcInfo.BlockHeight; + } + + int width = Math.Min(srcWidth, dstWidth); + int height = Math.Min(srcHeight, dstHeight); + + for (int level = 0; level < levels; level++) + { + // Stop copy if we are already out of the levels range. + if (level >= srcInfo.Levels || dstLevel + level >= dstInfo.Levels) + { + break; + } + + int copyWidth = sizeInBlocks ? BitUtils.DivRoundUp(width, blockWidth) : width; + int copyHeight = sizeInBlocks ? BitUtils.DivRoundUp(height, blockHeight) : height; + + int layers = Math.Max(dstLayers - dstLayer, srcLayers); + + for (int layer = 0; layer < layers; layer++) + { + if (tempBuffer.NativePtr != 0) + { + // Copy through the temp buffer + CopyFromOrToBuffer(cbs, tempBuffer, srcImage, srcInfo, true, srcLayer + layer, srcLevel + level, 0, 0, copyWidth, copyHeight); + + int dstBufferWidth = sizeInBlocks ? copyWidth * blockWidth : BitUtils.DivRoundUp(copyWidth, blockWidth); + int dstBufferHeight = sizeInBlocks ? copyHeight * blockHeight : BitUtils.DivRoundUp(copyHeight, blockHeight); + + CopyFromOrToBuffer(cbs, tempBuffer, dstImage, dstInfo, false, dstLayer + layer, dstLevel + level, 0, 0, dstBufferWidth, dstBufferHeight); + } + else if (srcInfo.Samples > 1 && srcInfo.Samples != dstInfo.Samples) + { + // TODO + + Logger.Warning?.PrintMsg(LogClass.Gpu, "Unsupported mismatching sample count copy"); + } + else + { + blitCommandEncoder.CopyFromTexture( + srcImage, + (ulong)(srcLayer + layer), + (ulong)(srcLevel + level), + new MTLOrigin { z = (ulong)srcZ }, + new MTLSize { width = (ulong)copyWidth, height = (ulong)copyHeight, depth = (ulong)srcDepth }, + dstImage, + (ulong)(dstLayer + layer), + (ulong)(dstLevel + level), + new MTLOrigin { z = (ulong)dstZ }); + } + } + + width = Math.Max(1, width >> 1); + height = Math.Max(1, height >> 1); + + if (srcInfo.Target == Target.Texture3D) + { + srcDepth = Math.Max(1, srcDepth >> 1); + } + } + + if (tempBuffer.NativePtr != 0) + { + tempBuffer.Dispose(); + } + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/VertexBufferState.cs b/src/Ryujinx.Graphics.Metal/VertexBufferState.cs new file mode 100644 index 000000000..6591fe6d6 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/VertexBufferState.cs @@ -0,0 +1,60 @@ +using Ryujinx.Graphics.GAL; +using SharpMetal.Metal; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + readonly internal struct VertexBufferState + { + public static VertexBufferState Null => new(BufferHandle.Null, 0, 0, 0); + + private readonly BufferHandle _handle; + private readonly int _offset; + private readonly int _size; + + public readonly int Stride; + public readonly int Divisor; + + public VertexBufferState(BufferHandle handle, int offset, int size, int divisor, int stride = 0) + { + _handle = handle; + _offset = offset; + _size = size; + + Stride = stride; + Divisor = divisor; + } + + public (MTLBuffer, int) GetVertexBuffer(BufferManager bufferManager, CommandBufferScoped cbs) + { + Auto autoBuffer = null; + + if (_handle != BufferHandle.Null) + { + // TODO: Handle restride if necessary + + autoBuffer = bufferManager.GetBuffer(_handle, false, out int size); + + // The original stride must be reapplied in case it was rewritten. + // TODO: Handle restride if necessary + + if (_offset >= size) + { + autoBuffer = null; + } + } + + if (autoBuffer != null) + { + int offset = _offset; + var buffer = autoBuffer.Get(cbs, offset, _size).Value; + + return (buffer, offset); + } + + return (new MTLBuffer(IntPtr.Zero), 0); + } + } +} diff --git a/src/Ryujinx.Graphics.Metal/Window.cs b/src/Ryujinx.Graphics.Metal/Window.cs new file mode 100644 index 000000000..65a47d217 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal/Window.cs @@ -0,0 +1,231 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL; +using Ryujinx.Graphics.Metal.Effects; +using SharpMetal.ObjectiveCCore; +using SharpMetal.QuartzCore; +using System; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal +{ + [SupportedOSPlatform("macos")] + class Window : IWindow, IDisposable + { + public bool ScreenCaptureRequested { get; set; } + + private readonly MetalRenderer _renderer; + private readonly CAMetalLayer _metalLayer; + + private int _width; + private int _height; + + private int _requestedWidth; + private int _requestedHeight; + + // private bool _vsyncEnabled; + private AntiAliasing _currentAntiAliasing; + private bool _updateEffect; + private IPostProcessingEffect _effect; + private IScalingFilter _scalingFilter; + private bool _isLinear; + // private float _scalingFilterLevel; + private bool _updateScalingFilter; + private ScalingFilter _currentScalingFilter; + // private bool _colorSpacePassthroughEnabled; + + public Window(MetalRenderer renderer, CAMetalLayer metalLayer) + { + _renderer = renderer; + _metalLayer = metalLayer; + } + + private unsafe void ResizeIfNeeded() + { + if (_requestedWidth != 0 && _requestedHeight != 0) + { + // TODO: This is actually a CGSize, but there is no overload for that, so fill the first two fields of rect with the size. + var rect = new NSRect(_requestedWidth, _requestedHeight, 0, 0); + + ObjectiveC.objc_msgSend(_metalLayer, "setDrawableSize:", rect); + + _requestedWidth = 0; + _requestedHeight = 0; + } + } + + public unsafe void Present(ITexture texture, ImageCrop crop, Action swapBuffersCallback) + { + if (_renderer.Pipeline is Pipeline pipeline && texture is Texture tex) + { + ResizeIfNeeded(); + + var drawable = new CAMetalDrawable(ObjectiveC.IntPtr_objc_msgSend(_metalLayer, "nextDrawable")); + + _width = (int)drawable.Texture.Width; + _height = (int)drawable.Texture.Height; + + UpdateEffect(); + + if (_effect != null) + { + // TODO: Run Effects + // view = _effect.Run() + } + + int srcX0, srcX1, srcY0, srcY1; + + if (crop.Left == 0 && crop.Right == 0) + { + srcX0 = 0; + srcX1 = tex.Width; + } + else + { + srcX0 = crop.Left; + srcX1 = crop.Right; + } + + if (crop.Top == 0 && crop.Bottom == 0) + { + srcY0 = 0; + srcY1 = tex.Height; + } + else + { + srcY0 = crop.Top; + srcY1 = crop.Bottom; + } + + if (ScreenCaptureRequested) + { + // TODO: Support screen captures + + ScreenCaptureRequested = false; + } + + float ratioX = crop.IsStretched ? 1.0f : MathF.Min(1.0f, _height * crop.AspectRatioX / (_width * crop.AspectRatioY)); + float ratioY = crop.IsStretched ? 1.0f : MathF.Min(1.0f, _width * crop.AspectRatioY / (_height * crop.AspectRatioX)); + + int dstWidth = (int)(_width * ratioX); + int dstHeight = (int)(_height * ratioY); + + int dstPaddingX = (_width - dstWidth) / 2; + int dstPaddingY = (_height - dstHeight) / 2; + + int dstX0 = crop.FlipX ? _width - dstPaddingX : dstPaddingX; + int dstX1 = crop.FlipX ? dstPaddingX : _width - dstPaddingX; + + int dstY0 = crop.FlipY ? _height - dstPaddingY : dstPaddingY; + int dstY1 = crop.FlipY ? dstPaddingY : _height - dstPaddingY; + + if (_scalingFilter != null) + { + // TODO: Run scaling filter + } + + pipeline.Present( + drawable, + tex, + new Extents2D(srcX0, srcY0, srcX1, srcY1), + new Extents2D(dstX0, dstY0, dstX1, dstY1), + _isLinear); + } + } + + public void SetSize(int width, int height) + { + _requestedWidth = width; + _requestedHeight = height; + } + + public void ChangeVSyncMode(VSyncMode vSyncMode) + { + //_vSyncMode = vSyncMode; + } + + public void SetAntiAliasing(AntiAliasing effect) + { + if (_currentAntiAliasing == effect && _effect != null) + { + return; + } + + _currentAntiAliasing = effect; + + _updateEffect = true; + } + + public void SetScalingFilter(ScalingFilter type) + { + if (_currentScalingFilter == type && _effect != null) + { + return; + } + + _currentScalingFilter = type; + + _updateScalingFilter = true; + } + + public void SetScalingFilterLevel(float level) + { + // _scalingFilterLevel = level; + _updateScalingFilter = true; + } + + public void SetColorSpacePassthrough(bool colorSpacePassThroughEnabled) + { + // _colorSpacePassthroughEnabled = colorSpacePassThroughEnabled; + } + + private void UpdateEffect() + { + if (_updateEffect) + { + _updateEffect = false; + + switch (_currentAntiAliasing) + { + case AntiAliasing.Fxaa: + _effect?.Dispose(); + Logger.Warning?.PrintMsg(LogClass.Gpu, "FXAA not implemented for Metal backend!"); + break; + case AntiAliasing.None: + _effect?.Dispose(); + _effect = null; + break; + case AntiAliasing.SmaaLow: + case AntiAliasing.SmaaMedium: + case AntiAliasing.SmaaHigh: + case AntiAliasing.SmaaUltra: + // var quality = _currentAntiAliasing - AntiAliasing.SmaaLow; + Logger.Warning?.PrintMsg(LogClass.Gpu, "SMAA not implemented for Metal backend!"); + break; + } + } + + if (_updateScalingFilter) + { + _updateScalingFilter = false; + + switch (_currentScalingFilter) + { + case ScalingFilter.Bilinear: + case ScalingFilter.Nearest: + _scalingFilter?.Dispose(); + _scalingFilter = null; + _isLinear = _currentScalingFilter == ScalingFilter.Bilinear; + break; + case ScalingFilter.Fsr: + Logger.Warning?.PrintMsg(LogClass.Gpu, "FSR not implemented for Metal backend!"); + break; + } + } + } + + public void Dispose() + { + _metalLayer.Dispose(); + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/CodeGenContext.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/CodeGenContext.cs new file mode 100644 index 000000000..2fa188ea9 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/CodeGenContext.cs @@ -0,0 +1,108 @@ +using Ryujinx.Graphics.Shader.StructuredIr; +using Ryujinx.Graphics.Shader.Translation; +using System.Text; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl +{ + class CodeGenContext + { + public const string Tab = " "; + + // The number of additional arguments that every function (except for the main one) must have (for instance support_buffer) + public const int AdditionalArgCount = 2; + + public StructuredFunction CurrentFunction { get; set; } + + public StructuredProgramInfo Info { get; } + + public AttributeUsage AttributeUsage { get; } + public ShaderDefinitions Definitions { get; } + public ShaderProperties Properties { get; } + public HostCapabilities HostCapabilities { get; } + public ILogger Logger { get; } + public TargetApi TargetApi { get; } + + public OperandManager OperandManager { get; } + + private readonly StringBuilder _sb; + + private int _level; + + private string _indentation; + + public CodeGenContext(StructuredProgramInfo info, CodeGenParameters parameters) + { + Info = info; + AttributeUsage = parameters.AttributeUsage; + Definitions = parameters.Definitions; + Properties = parameters.Properties; + HostCapabilities = parameters.HostCapabilities; + Logger = parameters.Logger; + TargetApi = parameters.TargetApi; + + OperandManager = new OperandManager(); + + _sb = new StringBuilder(); + } + + public void AppendLine() + { + _sb.AppendLine(); + } + + public void AppendLine(string str) + { + _sb.AppendLine(_indentation + str); + } + + public string GetCode() + { + return _sb.ToString(); + } + + public void EnterScope(string prefix = "") + { + AppendLine(prefix + "{"); + + _level++; + + UpdateIndentation(); + } + + public void LeaveScope(string suffix = "") + { + if (_level == 0) + { + return; + } + + _level--; + + UpdateIndentation(); + + AppendLine("}" + suffix); + } + + public StructuredFunction GetFunction(int id) + { + return Info.Functions[id]; + } + + private void UpdateIndentation() + { + _indentation = GetIndentation(_level); + } + + private static string GetIndentation(int level) + { + string indentation = string.Empty; + + for (int index = 0; index < level; index++) + { + indentation += Tab; + } + + return indentation; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Declarations.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Declarations.cs new file mode 100644 index 000000000..912b162d2 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Declarations.cs @@ -0,0 +1,578 @@ +using Ryujinx.Common; +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.Shader.IntermediateRepresentation; +using Ryujinx.Graphics.Shader.StructuredIr; +using Ryujinx.Graphics.Shader.Translation; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl +{ + static class Declarations + { + /* + * Description of MSL Binding Model + * + * There are a few fundamental differences between how GLSL and MSL handle I/O. + * This comment will set out to describe the reasons why things are done certain ways + * and to describe the overall binding model that we're striving for here. + * + * Main I/O Structs + * + * Each stage has a main input and output struct (if applicable) labeled as [Stage][In/Out], i.e VertexIn. + * Every field within these structs is labeled with an [[attribute(n)]] property, + * and the overall struct is labeled with [[stage_in]] for input structs, and defined as the + * output type of the main shader function for the output struct. This struct also contains special + * attribute-based properties like [[position]] that would be "built-ins" in a GLSL context. + * + * These structs are passed as inputs to all inline functions due to containing "built-ins" + * that inline functions assume access to. + * + * Vertex & Zero Buffers + * + * Binding indices 0-16 are reserved for vertex buffers, and binding 18 is reserved for the zero buffer. + * + * Uniforms & Storage Buffers + * + * Uniforms and storage buffers are tightly packed into their respective argument buffers + * (effectively ignoring binding indices at shader level), with each pointer to the corresponding + * struct that defines the layout and fields of these buffers (usually just a single data array), laid + * out one after the other in ascending order of their binding index. + * + * The uniforms argument buffer is always bound at a fixed index of 20. + * The storage buffers argument buffer is always bound at a fixed index of 21. + * + * These structs are passed as inputs to all inline functions as in GLSL or SPIRV, + * uniforms and storage buffers would be globals, and inline functions assume access to these buffers. + * + * Samplers & Textures + * + * Metal does not have a combined image sampler like sampler2D in GLSL, as a result we need to bind + * an individual texture and a sampler object for each instance of a combined image sampler. + * Samplers and textures are bound in a shared argument buffer. This argument buffer is tightly packed + * (effectively ignoring binding indices at shader level), with texture and their samplers (if present) + * laid out one after the other in ascending order of their binding index. + * + * The samplers and textures argument buffer is always bound at a fixed index of 22. + * + */ + + public static int[] Declare(CodeGenContext context, StructuredProgramInfo info) + { + // TODO: Re-enable this warning + context.AppendLine("#pragma clang diagnostic ignored \"-Wunused-variable\""); + context.AppendLine(); + context.AppendLine("#include "); + context.AppendLine("#include "); + context.AppendLine(); + context.AppendLine("using namespace metal;"); + context.AppendLine(); + + var fsi = (info.HelperFunctionsMask & HelperFunctionsMask.FSI) != 0; + + DeclareInputAttributes(context, info.IoDefinitions.Where(x => IsUserDefined(x, StorageKind.Input))); + context.AppendLine(); + DeclareOutputAttributes(context, info.IoDefinitions.Where(x => x.StorageKind == StorageKind.Output)); + context.AppendLine(); + DeclareBufferStructures(context, context.Properties.ConstantBuffers.Values.OrderBy(x => x.Binding).ToArray(), true, fsi); + DeclareBufferStructures(context, context.Properties.StorageBuffers.Values.OrderBy(x => x.Binding).ToArray(), false, fsi); + + // We need to declare each set as a new struct + var textureDefinitions = context.Properties.Textures.Values + .GroupBy(x => x.Set) + .ToDictionary(x => x.Key, x => x.OrderBy(y => y.Binding).ToArray()); + + var imageDefinitions = context.Properties.Images.Values + .GroupBy(x => x.Set) + .ToDictionary(x => x.Key, x => x.OrderBy(y => y.Binding).ToArray()); + + var textureSets = textureDefinitions.Keys.ToArray(); + var imageSets = imageDefinitions.Keys.ToArray(); + + var sets = textureSets.Union(imageSets).ToArray(); + + foreach (var set in textureDefinitions) + { + DeclareTextures(context, set.Value, set.Key); + } + + foreach (var set in imageDefinitions) + { + DeclareImages(context, set.Value, set.Key, fsi); + } + + if ((info.HelperFunctionsMask & HelperFunctionsMask.FindLSB) != 0) + { + AppendHelperFunction(context, "Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindLSB.metal"); + } + + if ((info.HelperFunctionsMask & HelperFunctionsMask.FindMSBS32) != 0) + { + AppendHelperFunction(context, "Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindMSBS32.metal"); + } + + if ((info.HelperFunctionsMask & HelperFunctionsMask.FindMSBU32) != 0) + { + AppendHelperFunction(context, "Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindMSBU32.metal"); + } + + if ((info.HelperFunctionsMask & HelperFunctionsMask.SwizzleAdd) != 0) + { + AppendHelperFunction(context, "Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/SwizzleAdd.metal"); + } + + if ((info.HelperFunctionsMask & HelperFunctionsMask.Precise) != 0) + { + AppendHelperFunction(context, "Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/Precise.metal"); + } + + return sets; + } + + static bool IsUserDefined(IoDefinition ioDefinition, StorageKind storageKind) + { + return ioDefinition.StorageKind == storageKind && ioDefinition.IoVariable == IoVariable.UserDefined; + } + + public static void DeclareLocals(CodeGenContext context, StructuredFunction function, ShaderStage stage, bool isMainFunc = false) + { + if (isMainFunc) + { + // TODO: Support OaIndexing + if (context.Definitions.IaIndexing) + { + context.EnterScope($"array {Defaults.IAttributePrefix} = "); + + for (int i = 0; i < Constants.MaxAttributes; i++) + { + context.AppendLine($"in.{Defaults.IAttributePrefix}{i},"); + } + + context.LeaveScope(";"); + } + + DeclareMemories(context, context.Properties.LocalMemories.Values, isShared: false); + DeclareMemories(context, context.Properties.SharedMemories.Values, isShared: true); + + switch (stage) + { + case ShaderStage.Vertex: + context.AppendLine("VertexOut out = {};"); + // TODO: Only add if necessary + context.AppendLine("uint instance_index = instance_id + base_instance;"); + break; + case ShaderStage.Fragment: + context.AppendLine("FragmentOut out = {};"); + break; + } + + // TODO: Only add if necessary + if (stage != ShaderStage.Compute) + { + // MSL does not give us access to [[thread_index_in_simdgroup]] + // outside compute. But we may still need to provide this value in frag/vert. + context.AppendLine("uint thread_index_in_simdgroup = simd_prefix_exclusive_sum(1);"); + } + } + + foreach (AstOperand decl in function.Locals) + { + string name = context.OperandManager.DeclareLocal(decl); + + context.AppendLine(GetVarTypeName(decl.VarType) + " " + name + ";"); + } + } + + public static string GetVarTypeName(AggregateType type, bool atomic = false) + { + var s32 = atomic ? "atomic_int" : "int"; + var u32 = atomic ? "atomic_uint" : "uint"; + + return type switch + { + AggregateType.Void => "void", + AggregateType.Bool => "bool", + AggregateType.FP32 => "float", + AggregateType.S32 => s32, + AggregateType.U32 => u32, + AggregateType.Vector2 | AggregateType.Bool => "bool2", + AggregateType.Vector2 | AggregateType.FP32 => "float2", + AggregateType.Vector2 | AggregateType.S32 => "int2", + AggregateType.Vector2 | AggregateType.U32 => "uint2", + AggregateType.Vector3 | AggregateType.Bool => "bool3", + AggregateType.Vector3 | AggregateType.FP32 => "float3", + AggregateType.Vector3 | AggregateType.S32 => "int3", + AggregateType.Vector3 | AggregateType.U32 => "uint3", + AggregateType.Vector4 | AggregateType.Bool => "bool4", + AggregateType.Vector4 | AggregateType.FP32 => "float4", + AggregateType.Vector4 | AggregateType.S32 => "int4", + AggregateType.Vector4 | AggregateType.U32 => "uint4", + _ => throw new ArgumentException($"Invalid variable type \"{type}\"."), + }; + } + + private static void DeclareMemories(CodeGenContext context, IEnumerable memories, bool isShared) + { + string prefix = isShared ? "threadgroup " : string.Empty; + + foreach (var memory in memories) + { + string arraySize = ""; + if ((memory.Type & AggregateType.Array) != 0) + { + arraySize = $"[{memory.ArrayLength}]"; + } + var typeName = GetVarTypeName(memory.Type & ~AggregateType.Array); + context.AppendLine($"{prefix}{typeName} {memory.Name}{arraySize};"); + } + } + + private static void DeclareBufferStructures(CodeGenContext context, BufferDefinition[] buffers, bool constant, bool fsi) + { + var name = constant ? "ConstantBuffers" : "StorageBuffers"; + var addressSpace = constant ? "constant" : "device"; + + string[] bufferDec = new string[buffers.Length]; + + for (int i = 0; i < buffers.Length; i++) + { + BufferDefinition buffer = buffers[i]; + + var needsPadding = buffer.Layout == BufferLayout.Std140; + string fsiSuffix = !constant && fsi ? " [[raster_order_group(0)]]" : ""; + + bufferDec[i] = $"{addressSpace} {Defaults.StructPrefix}_{buffer.Name}* {buffer.Name}{fsiSuffix};"; + + context.AppendLine($"struct {Defaults.StructPrefix}_{buffer.Name}"); + context.EnterScope(); + + foreach (StructureField field in buffer.Type.Fields) + { + var type = field.Type; + type |= (needsPadding && (field.Type & AggregateType.Array) != 0) + ? AggregateType.Vector4 + : AggregateType.Invalid; + + type &= ~AggregateType.Array; + + string typeName = GetVarTypeName(type); + string arraySuffix = ""; + + if (field.Type.HasFlag(AggregateType.Array)) + { + if (field.ArrayLength > 0) + { + arraySuffix = $"[{field.ArrayLength}]"; + } + else + { + // Probably UB, but this is the approach that MVK takes + arraySuffix = "[1]"; + } + } + + context.AppendLine($"{typeName} {field.Name}{arraySuffix};"); + } + + context.LeaveScope(";"); + context.AppendLine(); + } + + context.AppendLine($"struct {name}"); + context.EnterScope(); + + foreach (var declaration in bufferDec) + { + context.AppendLine(declaration); + } + + context.LeaveScope(";"); + context.AppendLine(); + } + + private static void DeclareTextures(CodeGenContext context, TextureDefinition[] textures, int set) + { + var setName = GetNameForSet(set); + context.AppendLine($"struct {setName}"); + context.EnterScope(); + + List textureDec = []; + + foreach (TextureDefinition texture in textures) + { + if (texture.Type != SamplerType.None) + { + var textureTypeName = texture.Type.ToMslTextureType(texture.Format.GetComponentType()); + + if (texture.ArrayLength > 1) + { + textureTypeName = $"array<{textureTypeName}, {texture.ArrayLength}>"; + } + + textureDec.Add($"{textureTypeName} tex_{texture.Name};"); + } + + if (!texture.Separate && texture.Type != SamplerType.TextureBuffer) + { + var samplerType = "sampler"; + + if (texture.ArrayLength > 1) + { + samplerType = $"array<{samplerType}, {texture.ArrayLength}>"; + } + + textureDec.Add($"{samplerType} samp_{texture.Name};"); + } + } + + foreach (var declaration in textureDec) + { + context.AppendLine(declaration); + } + + context.LeaveScope(";"); + context.AppendLine(); + } + + private static void DeclareImages(CodeGenContext context, TextureDefinition[] images, int set, bool fsi) + { + var setName = GetNameForSet(set); + context.AppendLine($"struct {setName}"); + context.EnterScope(); + + string[] imageDec = new string[images.Length]; + + for (int i = 0; i < images.Length; i++) + { + TextureDefinition image = images[i]; + + var imageTypeName = image.Type.ToMslTextureType(image.Format.GetComponentType(), true); + if (image.ArrayLength > 1) + { + imageTypeName = $"array<{imageTypeName}, {image.ArrayLength}>"; + } + + string fsiSuffix = fsi ? " [[raster_order_group(0)]]" : ""; + + imageDec[i] = $"{imageTypeName} {image.Name}{fsiSuffix};"; + } + + foreach (var declaration in imageDec) + { + context.AppendLine(declaration); + } + + context.LeaveScope(";"); + context.AppendLine(); + } + + private static void DeclareInputAttributes(CodeGenContext context, IEnumerable inputs) + { + if (context.Definitions.Stage == ShaderStage.Compute) + { + return; + } + + switch (context.Definitions.Stage) + { + case ShaderStage.Vertex: + context.AppendLine("struct VertexIn"); + break; + case ShaderStage.Fragment: + context.AppendLine("struct FragmentIn"); + break; + } + + context.EnterScope(); + + if (context.Definitions.Stage == ShaderStage.Fragment) + { + // TODO: check if it's needed + context.AppendLine("float4 position [[position, invariant]];"); + context.AppendLine("bool front_facing [[front_facing]];"); + context.AppendLine("float2 point_coord [[point_coord]];"); + context.AppendLine("uint primitive_id [[primitive_id]];"); + } + + if (context.Definitions.IaIndexing) + { + // MSL does not support arrays in stage I/O + // We need to use the SPIRV-Cross workaround + for (int i = 0; i < Constants.MaxAttributes; i++) + { + var suffix = context.Definitions.Stage == ShaderStage.Fragment ? $"[[user(loc{i})]]" : $"[[attribute({i})]]"; + context.AppendLine($"float4 {Defaults.IAttributePrefix}{i} {suffix};"); + } + } + + if (inputs.Any()) + { + foreach (var ioDefinition in inputs.OrderBy(x => x.Location)) + { + if (context.Definitions.IaIndexing && ioDefinition.IoVariable == IoVariable.UserDefined) + { + continue; + } + + string iq = string.Empty; + + if (context.Definitions.Stage == ShaderStage.Fragment) + { + iq = context.Definitions.ImapTypes[ioDefinition.Location].GetFirstUsedType() switch + { + PixelImap.Constant => "[[flat]] ", + PixelImap.ScreenLinear => "[[center_no_perspective]] ", + _ => string.Empty, + }; + } + + string type = ioDefinition.IoVariable switch + { + // IoVariable.Position => "float4", + IoVariable.GlobalId => "uint3", + IoVariable.VertexId => "uint", + IoVariable.VertexIndex => "uint", + // IoVariable.PointCoord => "float2", + _ => GetVarTypeName(context.Definitions.GetUserDefinedType(ioDefinition.Location, isOutput: false)) + }; + string name = ioDefinition.IoVariable switch + { + // IoVariable.Position => "position", + IoVariable.GlobalId => "global_id", + IoVariable.VertexId => "vertex_id", + IoVariable.VertexIndex => "vertex_index", + // IoVariable.PointCoord => "point_coord", + _ => $"{Defaults.IAttributePrefix}{ioDefinition.Location}" + }; + string suffix = ioDefinition.IoVariable switch + { + // IoVariable.Position => "[[position, invariant]]", + IoVariable.GlobalId => "[[thread_position_in_grid]]", + IoVariable.VertexId => "[[vertex_id]]", + // TODO: Avoid potential redeclaration + IoVariable.VertexIndex => "[[vertex_id]]", + // IoVariable.PointCoord => "[[point_coord]]", + IoVariable.UserDefined => context.Definitions.Stage == ShaderStage.Fragment ? $"[[user(loc{ioDefinition.Location})]]" : $"[[attribute({ioDefinition.Location})]]", + _ => "" + }; + + context.AppendLine($"{type} {name} {iq}{suffix};"); + } + } + + context.LeaveScope(";"); + } + + private static void DeclareOutputAttributes(CodeGenContext context, IEnumerable outputs) + { + switch (context.Definitions.Stage) + { + case ShaderStage.Vertex: + context.AppendLine("struct VertexOut"); + break; + case ShaderStage.Fragment: + context.AppendLine("struct FragmentOut"); + break; + case ShaderStage.Compute: + context.AppendLine("struct KernelOut"); + break; + } + + context.EnterScope(); + + if (context.Definitions.OaIndexing) + { + // MSL does not support arrays in stage I/O + // We need to use the SPIRV-Cross workaround + for (int i = 0; i < Constants.MaxAttributes; i++) + { + context.AppendLine($"float4 {Defaults.OAttributePrefix}{i} [[user(loc{i})]];"); + } + } + + if (outputs.Any()) + { + outputs = outputs.OrderBy(x => x.Location); + + if (context.Definitions.Stage == ShaderStage.Fragment && context.Definitions.DualSourceBlend) + { + IoDefinition firstOutput = outputs.ElementAtOrDefault(0); + IoDefinition secondOutput = outputs.ElementAtOrDefault(1); + + var type1 = GetVarTypeName(context.Definitions.GetFragmentOutputColorType(firstOutput.Location)); + var type2 = GetVarTypeName(context.Definitions.GetFragmentOutputColorType(secondOutput.Location)); + + var name1 = $"color{firstOutput.Location}"; + var name2 = $"color{firstOutput.Location + 1}"; + + context.AppendLine($"{type1} {name1} [[color({firstOutput.Location}), index(0)]];"); + context.AppendLine($"{type2} {name2} [[color({firstOutput.Location}), index(1)]];"); + + outputs = outputs.Skip(2); + } + + foreach (var ioDefinition in outputs) + { + if (context.Definitions.OaIndexing && ioDefinition.IoVariable == IoVariable.UserDefined) + { + continue; + } + + string type = ioDefinition.IoVariable switch + { + IoVariable.Position => "float4", + IoVariable.PointSize => "float", + IoVariable.FragmentOutputColor => GetVarTypeName(context.Definitions.GetFragmentOutputColorType(ioDefinition.Location)), + IoVariable.FragmentOutputDepth => "float", + IoVariable.ClipDistance => "float", + _ => GetVarTypeName(context.Definitions.GetUserDefinedType(ioDefinition.Location, isOutput: true)) + }; + string name = ioDefinition.IoVariable switch + { + IoVariable.Position => "position", + IoVariable.PointSize => "point_size", + IoVariable.FragmentOutputColor => $"color{ioDefinition.Location}", + IoVariable.FragmentOutputDepth => "depth", + IoVariable.ClipDistance => "clip_distance", + _ => $"{Defaults.OAttributePrefix}{ioDefinition.Location}" + }; + string suffix = ioDefinition.IoVariable switch + { + IoVariable.Position => "[[position, invariant]]", + IoVariable.PointSize => "[[point_size]]", + IoVariable.UserDefined => $"[[user(loc{ioDefinition.Location})]]", + IoVariable.FragmentOutputColor => $"[[color({ioDefinition.Location})]]", + IoVariable.FragmentOutputDepth => "[[depth(any)]]", + IoVariable.ClipDistance => $"[[clip_distance]][{Defaults.TotalClipDistances}]", + _ => "" + }; + + context.AppendLine($"{type} {name} {suffix};"); + } + } + + context.LeaveScope(";"); + } + + private static void AppendHelperFunction(CodeGenContext context, string filename) + { + string code = EmbeddedResources.ReadAllText(filename); + + code = code.Replace("\t", CodeGenContext.Tab); + + context.AppendLine(code); + context.AppendLine(); + } + + public static string GetNameForSet(int set, bool forVar = false) + { + return (uint)set switch + { + Defaults.TexturesSetIndex => forVar ? "textures" : "Textures", + Defaults.ImagesSetIndex => forVar ? "images" : "Images", + _ => $"{(forVar ? "set" : "Set")}{set}" + }; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Defaults.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Defaults.cs new file mode 100644 index 000000000..511a2f606 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Defaults.cs @@ -0,0 +1,34 @@ +namespace Ryujinx.Graphics.Shader.CodeGen.Msl +{ + static class Defaults + { + public const string LocalNamePrefix = "temp"; + + public const string PerPatchAttributePrefix = "patchAttr"; + public const string IAttributePrefix = "inAttr"; + public const string OAttributePrefix = "outAttr"; + + public const string StructPrefix = "struct"; + + public const string ArgumentNamePrefix = "a"; + + public const string UndefinedName = "0"; + + public const int MaxVertexBuffers = 16; + + public const uint ZeroBufferIndex = MaxVertexBuffers; + public const uint BaseSetIndex = MaxVertexBuffers + 1; + + public const uint ConstantBuffersIndex = BaseSetIndex; + public const uint StorageBuffersIndex = BaseSetIndex + 1; + public const uint TexturesIndex = BaseSetIndex + 2; + public const uint ImagesIndex = BaseSetIndex + 3; + + public const uint ConstantBuffersSetIndex = 0; + public const uint StorageBuffersSetIndex = 1; + public const uint TexturesSetIndex = 2; + public const uint ImagesSetIndex = 3; + + public const int TotalClipDistances = 8; + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindLSB.metal b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindLSB.metal new file mode 100644 index 000000000..ad786adb3 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindLSB.metal @@ -0,0 +1,5 @@ +template +inline T findLSB(T x) +{ + return select(ctz(x), T(-1), x == T(0)); +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindMSBS32.metal b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindMSBS32.metal new file mode 100644 index 000000000..af4eb6cbd --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindMSBS32.metal @@ -0,0 +1,5 @@ +template +inline T findMSBS32(T x) +{ + return select(clz(T(0)) - (clz(x) + T(1)), T(-1), x == T(0)); +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindMSBU32.metal b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindMSBU32.metal new file mode 100644 index 000000000..6d97c41a9 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/FindMSBU32.metal @@ -0,0 +1,6 @@ +template +inline T findMSBU32(T x) +{ + T v = select(x, T(-1) - x, x < T(0)); + return select(clz(T(0)) - (clz(v) + T(1)), T(-1), v == T(0)); +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/HelperFunctionNames.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/HelperFunctionNames.cs new file mode 100644 index 000000000..370159a0e --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/HelperFunctionNames.cs @@ -0,0 +1,10 @@ +namespace Ryujinx.Graphics.Shader.CodeGen.Msl +{ + static class HelperFunctionNames + { + public static string FindLSB = "findLSB"; + public static string FindMSBS32 = "findMSBS32"; + public static string FindMSBU32 = "findMSBU32"; + public static string SwizzleAdd = "swizzleAdd"; + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/Precise.metal b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/Precise.metal new file mode 100644 index 000000000..366bea1ac --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/Precise.metal @@ -0,0 +1,14 @@ +template +[[clang::optnone]] T PreciseFAdd(T l, T r) { + return fma(T(1), l, r); +} + +template +[[clang::optnone]] T PreciseFSub(T l, T r) { + return fma(T(-1), r, l); +} + +template +[[clang::optnone]] T PreciseFMul(T l, T r) { + return fma(l, r, T(0)); +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/SwizzleAdd.metal b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/SwizzleAdd.metal new file mode 100644 index 000000000..22a079b01 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/HelperFunctions/SwizzleAdd.metal @@ -0,0 +1,7 @@ +float swizzleAdd(float x, float y, int mask, uint thread_index_in_simdgroup) +{ + float4 xLut = float4(1.0, -1.0, 1.0, 0.0); + float4 yLut = float4(1.0, 1.0, -1.0, 1.0); + int lutIdx = (mask >> (int(thread_index_in_simdgroup & 3u) * 2)) & 3; + return x * xLut[lutIdx] + y * yLut[lutIdx]; +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs new file mode 100644 index 000000000..715688987 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs @@ -0,0 +1,185 @@ +using Ryujinx.Graphics.Shader.IntermediateRepresentation; +using Ryujinx.Graphics.Shader.StructuredIr; +using Ryujinx.Graphics.Shader.Translation; +using System; +using System.Text; +using static Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions.InstGenBallot; +using static Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions.InstGenBarrier; +using static Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions.InstGenCall; +using static Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions.InstGenHelper; +using static Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions.InstGenMemory; +using static Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions.InstGenVector; +using static Ryujinx.Graphics.Shader.StructuredIr.InstructionInfo; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions +{ + static class InstGen + { + public static string GetExpression(CodeGenContext context, IAstNode node) + { + if (node is AstOperation operation) + { + return GetExpression(context, operation); + } + else if (node is AstOperand operand) + { + return context.OperandManager.GetExpression(context, operand); + } + + throw new ArgumentException($"Invalid node type \"{node?.GetType().Name ?? "null"}\"."); + } + + private static string GetExpression(CodeGenContext context, AstOperation operation) + { + Instruction inst = operation.Inst; + + InstInfo info = GetInstructionInfo(inst); + + if ((info.Type & InstType.Call) != 0) + { + bool atomic = (info.Type & InstType.Atomic) != 0; + + int arity = (int)(info.Type & InstType.ArityMask); + + StringBuilder builder = new(); + + if (atomic && (operation.StorageKind == StorageKind.StorageBuffer || operation.StorageKind == StorageKind.SharedMemory)) + { + AggregateType dstType = operation.Inst == Instruction.AtomicMaxS32 || operation.Inst == Instruction.AtomicMinS32 + ? AggregateType.S32 + : AggregateType.U32; + + var shared = operation.StorageKind == StorageKind.SharedMemory; + + builder.Append($"({(shared ? "threadgroup" : "device")} {Declarations.GetVarTypeName(dstType, true)}*)&{GenerateLoadOrStore(context, operation, isStore: false)}"); + + for (int argIndex = operation.SourcesCount - arity + 2; argIndex < operation.SourcesCount; argIndex++) + { + builder.Append($", {GetSourceExpr(context, operation.GetSource(argIndex), dstType)}, memory_order_relaxed"); + } + } + else + { + for (int argIndex = 0; argIndex < arity; argIndex++) + { + if (argIndex != 0) + { + builder.Append(", "); + } + + AggregateType dstType = GetSrcVarType(inst, argIndex); + + builder.Append(GetSourceExpr(context, operation.GetSource(argIndex), dstType)); + } + + if ((operation.Inst & Instruction.Mask) == Instruction.SwizzleAdd) + { + // SwizzleAdd takes one last argument, the thread_index_in_simdgroup + builder.Append(", thread_index_in_simdgroup"); + } + } + + return $"{info.OpName}({builder})"; + } + else if ((info.Type & InstType.Op) != 0) + { + string op = info.OpName; + + if (inst == Instruction.Return && operation.SourcesCount != 0) + { + return $"{op} {GetSourceExpr(context, operation.GetSource(0), context.CurrentFunction.ReturnType)}"; + } + if (inst == Instruction.Return && context.Definitions.Stage is ShaderStage.Vertex or ShaderStage.Fragment) + { + return $"{op} out"; + } + + int arity = (int)(info.Type & InstType.ArityMask); + + string[] expr = new string[arity]; + + for (int index = 0; index < arity; index++) + { + IAstNode src = operation.GetSource(index); + + string srcExpr = GetSourceExpr(context, src, GetSrcVarType(inst, index)); + + bool isLhs = arity == 2 && index == 0; + + expr[index] = Enclose(srcExpr, src, inst, info, isLhs); + } + + switch (arity) + { + case 0: + return op; + + case 1: + return op + expr[0]; + + case 2: + if (operation.ForcePrecise) + { + var func = (inst & Instruction.Mask) switch + { + Instruction.Add => "PreciseFAdd", + Instruction.Subtract => "PreciseFSub", + Instruction.Multiply => "PreciseFMul", + }; + + return $"{func}({expr[0]}, {expr[1]})"; + } + + return $"{expr[0]} {op} {expr[1]}"; + + case 3: + return $"{expr[0]} {op[0]} {expr[1]} {op[1]} {expr[2]}"; + } + } + else if ((info.Type & InstType.Special) != 0) + { + switch (inst & Instruction.Mask) + { + case Instruction.Ballot: + return Ballot(context, operation); + case Instruction.Call: + return Call(context, operation); + case Instruction.FSIBegin: + case Instruction.FSIEnd: + return "// FSI implemented with raster order groups in MSL"; + case Instruction.GroupMemoryBarrier: + case Instruction.MemoryBarrier: + case Instruction.Barrier: + return Barrier(context, operation); + case Instruction.ImageLoad: + case Instruction.ImageStore: + case Instruction.ImageAtomic: + return ImageLoadOrStore(context, operation); + case Instruction.Load: + return Load(context, operation); + case Instruction.Lod: + return Lod(context, operation); + case Instruction.Store: + return Store(context, operation); + case Instruction.TextureSample: + return TextureSample(context, operation); + case Instruction.TextureQuerySamples: + return TextureQuerySamples(context, operation); + case Instruction.TextureQuerySize: + return TextureQuerySize(context, operation); + case Instruction.PackHalf2x16: + return PackHalf2x16(context, operation); + case Instruction.UnpackHalf2x16: + return UnpackHalf2x16(context, operation); + case Instruction.VectorExtract: + return VectorExtract(context, operation); + case Instruction.VoteAllEqual: + return VoteAllEqual(context, operation); + } + } + + // TODO: Return this to being an error + return $"Unexpected instruction type \"{info.Type}\"."; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBallot.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBallot.cs new file mode 100644 index 000000000..19a065d77 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBallot.cs @@ -0,0 +1,30 @@ +using Ryujinx.Graphics.Shader.StructuredIr; +using Ryujinx.Graphics.Shader.Translation; + +using static Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions.InstGenHelper; +using static Ryujinx.Graphics.Shader.StructuredIr.InstructionInfo; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions +{ + static class InstGenBallot + { + public static string Ballot(CodeGenContext context, AstOperation operation) + { + AggregateType dstType = GetSrcVarType(operation.Inst, 0); + + string arg = GetSourceExpr(context, operation.GetSource(0), dstType); + char component = "xyzw"[operation.Index]; + + return $"uint4(as_type((simd_vote::vote_t)simd_ballot({arg})), 0, 0).{component}"; + } + + public static string VoteAllEqual(CodeGenContext context, AstOperation operation) + { + AggregateType dstType = GetSrcVarType(operation.Inst, 0); + + string arg = GetSourceExpr(context, operation.GetSource(0), dstType); + + return $"simd_all({arg}) || !simd_any({arg})"; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBarrier.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBarrier.cs new file mode 100644 index 000000000..77f05defc --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenBarrier.cs @@ -0,0 +1,15 @@ +using Ryujinx.Graphics.Shader.IntermediateRepresentation; +using Ryujinx.Graphics.Shader.StructuredIr; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions +{ + static class InstGenBarrier + { + public static string Barrier(CodeGenContext context, AstOperation operation) + { + var device = (operation.Inst & Instruction.Mask) == Instruction.MemoryBarrier; + + return $"threadgroup_barrier(mem_flags::mem_{(device ? "device" : "threadgroup")})"; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenCall.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenCall.cs new file mode 100644 index 000000000..44881deee --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenCall.cs @@ -0,0 +1,60 @@ +using Ryujinx.Graphics.Shader.StructuredIr; + +using static Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions.InstGenHelper; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions +{ + static class InstGenCall + { + public static string Call(CodeGenContext context, AstOperation operation) + { + AstOperand funcId = (AstOperand)operation.GetSource(0); + + var function = context.GetFunction(funcId.Value); + + int argCount = operation.SourcesCount - 1; + int additionalArgCount = CodeGenContext.AdditionalArgCount + (context.Definitions.Stage != ShaderStage.Compute ? 1 : 0); + bool needsThreadIndex = false; + + // TODO: Replace this with a proper flag + if (function.Name.Contains("Shuffle")) + { + needsThreadIndex = true; + additionalArgCount++; + } + + string[] args = new string[argCount + additionalArgCount]; + + // Additional arguments + if (context.Definitions.Stage != ShaderStage.Compute) + { + args[0] = "in"; + args[1] = "constant_buffers"; + args[2] = "storage_buffers"; + + if (needsThreadIndex) + { + args[3] = "thread_index_in_simdgroup"; + } + } + else + { + args[0] = "constant_buffers"; + args[1] = "storage_buffers"; + + if (needsThreadIndex) + { + args[2] = "thread_index_in_simdgroup"; + } + } + + int argIndex = additionalArgCount; + for (int i = 0; i < argCount; i++) + { + args[argIndex++] = GetSourceExpr(context, operation.GetSource(i + 1), function.GetArgumentType(i)); + } + + return $"{function.Name}({string.Join(", ", args)})"; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenHelper.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenHelper.cs new file mode 100644 index 000000000..49f3c63aa --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenHelper.cs @@ -0,0 +1,222 @@ +using Ryujinx.Graphics.Shader.IntermediateRepresentation; +using Ryujinx.Graphics.Shader.StructuredIr; +using Ryujinx.Graphics.Shader.Translation; + +using static Ryujinx.Graphics.Shader.CodeGen.Msl.TypeConversion; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions +{ + static class InstGenHelper + { + private static readonly InstInfo[] _infoTable; + + static InstGenHelper() + { + _infoTable = new InstInfo[(int)Instruction.Count]; + +#pragma warning disable IDE0055 // Disable formatting + Add(Instruction.AtomicAdd, InstType.AtomicBinary, "atomic_fetch_add_explicit"); + Add(Instruction.AtomicAnd, InstType.AtomicBinary, "atomic_fetch_and_explicit"); + Add(Instruction.AtomicCompareAndSwap, InstType.AtomicBinary, "atomic_compare_exchange_weak_explicit"); + Add(Instruction.AtomicMaxU32, InstType.AtomicBinary, "atomic_fetch_max_explicit"); + Add(Instruction.AtomicMinU32, InstType.AtomicBinary, "atomic_fetch_min_explicit"); + Add(Instruction.AtomicOr, InstType.AtomicBinary, "atomic_fetch_or_explicit"); + Add(Instruction.AtomicSwap, InstType.AtomicBinary, "atomic_exchange_explicit"); + Add(Instruction.AtomicXor, InstType.AtomicBinary, "atomic_fetch_xor_explicit"); + Add(Instruction.Absolute, InstType.CallUnary, "abs"); + Add(Instruction.Add, InstType.OpBinaryCom, "+", 2); + Add(Instruction.Ballot, InstType.Special); + Add(Instruction.Barrier, InstType.Special); + Add(Instruction.BitCount, InstType.CallUnary, "popcount"); + Add(Instruction.BitfieldExtractS32, InstType.CallTernary, "extract_bits"); + Add(Instruction.BitfieldExtractU32, InstType.CallTernary, "extract_bits"); + Add(Instruction.BitfieldInsert, InstType.CallQuaternary, "insert_bits"); + Add(Instruction.BitfieldReverse, InstType.CallUnary, "reverse_bits"); + Add(Instruction.BitwiseAnd, InstType.OpBinaryCom, "&", 6); + Add(Instruction.BitwiseExclusiveOr, InstType.OpBinaryCom, "^", 7); + Add(Instruction.BitwiseNot, InstType.OpUnary, "~", 0); + Add(Instruction.BitwiseOr, InstType.OpBinaryCom, "|", 8); + Add(Instruction.Call, InstType.Special); + Add(Instruction.Ceiling, InstType.CallUnary, "ceil"); + Add(Instruction.Clamp, InstType.CallTernary, "clamp"); + Add(Instruction.ClampU32, InstType.CallTernary, "clamp"); + Add(Instruction.CompareEqual, InstType.OpBinaryCom, "==", 5); + Add(Instruction.CompareGreater, InstType.OpBinary, ">", 4); + Add(Instruction.CompareGreaterOrEqual, InstType.OpBinary, ">=", 4); + Add(Instruction.CompareGreaterOrEqualU32, InstType.OpBinary, ">=", 4); + Add(Instruction.CompareGreaterU32, InstType.OpBinary, ">", 4); + Add(Instruction.CompareLess, InstType.OpBinary, "<", 4); + Add(Instruction.CompareLessOrEqual, InstType.OpBinary, "<=", 4); + Add(Instruction.CompareLessOrEqualU32, InstType.OpBinary, "<=", 4); + Add(Instruction.CompareLessU32, InstType.OpBinary, "<", 4); + Add(Instruction.CompareNotEqual, InstType.OpBinaryCom, "!=", 5); + Add(Instruction.ConditionalSelect, InstType.OpTernary, "?:", 12); + Add(Instruction.ConvertFP32ToFP64, 0); // MSL does not have a 64-bit FP + Add(Instruction.ConvertFP64ToFP32, 0); // MSL does not have a 64-bit FP + Add(Instruction.ConvertFP32ToS32, InstType.CallUnary, "int"); + Add(Instruction.ConvertFP32ToU32, InstType.CallUnary, "uint"); + Add(Instruction.ConvertFP64ToS32, 0); // MSL does not have a 64-bit FP + Add(Instruction.ConvertFP64ToU32, 0); // MSL does not have a 64-bit FP + Add(Instruction.ConvertS32ToFP32, InstType.CallUnary, "float"); + Add(Instruction.ConvertS32ToFP64, 0); // MSL does not have a 64-bit FP + Add(Instruction.ConvertU32ToFP32, InstType.CallUnary, "float"); + Add(Instruction.ConvertU32ToFP64, 0); // MSL does not have a 64-bit FP + Add(Instruction.Cosine, InstType.CallUnary, "cos"); + Add(Instruction.Ddx, InstType.CallUnary, "dfdx"); + Add(Instruction.Ddy, InstType.CallUnary, "dfdy"); + Add(Instruction.Discard, InstType.CallNullary, "discard_fragment"); + Add(Instruction.Divide, InstType.OpBinary, "/", 1); + Add(Instruction.EmitVertex, 0); // MSL does not have geometry shaders + Add(Instruction.EndPrimitive, 0); // MSL does not have geometry shaders + Add(Instruction.ExponentB2, InstType.CallUnary, "exp2"); + Add(Instruction.FSIBegin, InstType.Special); + Add(Instruction.FSIEnd, InstType.Special); + Add(Instruction.FindLSB, InstType.CallUnary, HelperFunctionNames.FindLSB); + Add(Instruction.FindMSBS32, InstType.CallUnary, HelperFunctionNames.FindMSBS32); + Add(Instruction.FindMSBU32, InstType.CallUnary, HelperFunctionNames.FindMSBU32); + Add(Instruction.Floor, InstType.CallUnary, "floor"); + Add(Instruction.FusedMultiplyAdd, InstType.CallTernary, "fma"); + Add(Instruction.GroupMemoryBarrier, InstType.Special); + Add(Instruction.ImageLoad, InstType.Special); + Add(Instruction.ImageStore, InstType.Special); + Add(Instruction.ImageAtomic, InstType.Special); // Metal 3.1+ + Add(Instruction.IsNan, InstType.CallUnary, "isnan"); + Add(Instruction.Load, InstType.Special); + Add(Instruction.Lod, InstType.Special); + Add(Instruction.LogarithmB2, InstType.CallUnary, "log2"); + Add(Instruction.LogicalAnd, InstType.OpBinaryCom, "&&", 9); + Add(Instruction.LogicalExclusiveOr, InstType.OpBinaryCom, "^", 10); + Add(Instruction.LogicalNot, InstType.OpUnary, "!", 0); + Add(Instruction.LogicalOr, InstType.OpBinaryCom, "||", 11); + Add(Instruction.LoopBreak, InstType.OpNullary, "break"); + Add(Instruction.LoopContinue, InstType.OpNullary, "continue"); + Add(Instruction.PackDouble2x32, 0); // MSL does not have a 64-bit FP + Add(Instruction.PackHalf2x16, InstType.Special); + Add(Instruction.Maximum, InstType.CallBinary, "max"); + Add(Instruction.MaximumU32, InstType.CallBinary, "max"); + Add(Instruction.MemoryBarrier, InstType.Special); + Add(Instruction.Minimum, InstType.CallBinary, "min"); + Add(Instruction.MinimumU32, InstType.CallBinary, "min"); + Add(Instruction.Modulo, InstType.CallBinary, "fmod"); + Add(Instruction.Multiply, InstType.OpBinaryCom, "*", 1); + Add(Instruction.MultiplyHighS32, InstType.CallBinary, "mulhi"); + Add(Instruction.MultiplyHighU32, InstType.CallBinary, "mulhi"); + Add(Instruction.Negate, InstType.OpUnary, "-"); + Add(Instruction.ReciprocalSquareRoot, InstType.CallUnary, "rsqrt"); + Add(Instruction.Return, InstType.OpNullary, "return"); + Add(Instruction.Round, InstType.CallUnary, "round"); + Add(Instruction.ShiftLeft, InstType.OpBinary, "<<", 3); + Add(Instruction.ShiftRightS32, InstType.OpBinary, ">>", 3); + Add(Instruction.ShiftRightU32, InstType.OpBinary, ">>", 3); + Add(Instruction.Shuffle, InstType.CallBinary, "simd_shuffle"); + Add(Instruction.ShuffleDown, InstType.CallBinary, "simd_shuffle_down"); + Add(Instruction.ShuffleUp, InstType.CallBinary, "simd_shuffle_up"); + Add(Instruction.ShuffleXor, InstType.CallBinary, "simd_shuffle_xor"); + Add(Instruction.Sine, InstType.CallUnary, "sin"); + Add(Instruction.SquareRoot, InstType.CallUnary, "sqrt"); + Add(Instruction.Store, InstType.Special); + Add(Instruction.Subtract, InstType.OpBinary, "-", 2); + Add(Instruction.SwizzleAdd, InstType.CallTernary, HelperFunctionNames.SwizzleAdd); + Add(Instruction.TextureSample, InstType.Special); + Add(Instruction.TextureQuerySamples, InstType.Special); + Add(Instruction.TextureQuerySize, InstType.Special); + Add(Instruction.Truncate, InstType.CallUnary, "trunc"); + Add(Instruction.UnpackDouble2x32, 0); // MSL does not have a 64-bit FP + Add(Instruction.UnpackHalf2x16, InstType.Special); + Add(Instruction.VectorExtract, InstType.Special); + Add(Instruction.VoteAll, InstType.CallUnary, "simd_all"); + Add(Instruction.VoteAllEqual, InstType.Special); + Add(Instruction.VoteAny, InstType.CallUnary, "simd_any"); +#pragma warning restore IDE0055 + } + + private static void Add(Instruction inst, InstType flags, string opName = null, int precedence = 0) + { + _infoTable[(int)inst] = new InstInfo(flags, opName, precedence); + } + + public static InstInfo GetInstructionInfo(Instruction inst) + { + return _infoTable[(int)(inst & Instruction.Mask)]; + } + + public static string GetSourceExpr(CodeGenContext context, IAstNode node, AggregateType dstType) + { + return ReinterpretCast(context, node, OperandManager.GetNodeDestType(context, node), dstType); + } + + public static string Enclose(string expr, IAstNode node, Instruction pInst, bool isLhs) + { + InstInfo pInfo = GetInstructionInfo(pInst); + + return Enclose(expr, node, pInst, pInfo, isLhs); + } + + public static string Enclose(string expr, IAstNode node, Instruction pInst, InstInfo pInfo, bool isLhs = false) + { + if (NeedsParenthesis(node, pInst, pInfo, isLhs)) + { + expr = "(" + expr + ")"; + } + + return expr; + } + + public static bool NeedsParenthesis(IAstNode node, Instruction pInst, InstInfo pInfo, bool isLhs) + { + // If the node isn't an operation, then it can only be an operand, + // and those never needs to be surrounded in parentheses. + if (node is not AstOperation operation) + { + // This is sort of a special case, if this is a negative constant, + // and it is consumed by a unary operation, we need to put on the parenthesis, + // as in MSL, while a sequence like ~-1 is valid, --2 is not. + if (IsNegativeConst(node) && pInfo.Type == InstType.OpUnary) + { + return true; + } + + return false; + } + + if ((pInfo.Type & (InstType.Call | InstType.Special)) != 0) + { + return false; + } + + InstInfo info = _infoTable[(int)(operation.Inst & Instruction.Mask)]; + + if ((info.Type & (InstType.Call | InstType.Special)) != 0) + { + return false; + } + + if (info.Precedence < pInfo.Precedence) + { + return false; + } + + if (info.Precedence == pInfo.Precedence && isLhs) + { + return false; + } + + if (pInst == operation.Inst && info.Type == InstType.OpBinaryCom) + { + return false; + } + + return true; + } + + private static bool IsNegativeConst(IAstNode node) + { + if (node is not AstOperand operand) + { + return false; + } + + return operand.Type == OperandType.Constant && operand.Value < 0; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs new file mode 100644 index 000000000..6ccacc1c4 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs @@ -0,0 +1,672 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.Shader.IntermediateRepresentation; +using Ryujinx.Graphics.Shader.StructuredIr; +using Ryujinx.Graphics.Shader.Translation; +using System; +using System.Text; +using static Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions.InstGenHelper; +using static Ryujinx.Graphics.Shader.StructuredIr.InstructionInfo; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions +{ + static class InstGenMemory + { + public static string GenerateLoadOrStore(CodeGenContext context, AstOperation operation, bool isStore) + { + StorageKind storageKind = operation.StorageKind; + + string varName; + AggregateType varType; + int srcIndex = 0; + bool isStoreOrAtomic = operation.Inst == Instruction.Store || operation.Inst.IsAtomic(); + int inputsCount = isStoreOrAtomic ? operation.SourcesCount - 1 : operation.SourcesCount; + bool fieldHasPadding = false; + + if (operation.Inst == Instruction.AtomicCompareAndSwap) + { + inputsCount--; + } + + string fieldName = ""; + switch (storageKind) + { + case StorageKind.ConstantBuffer: + case StorageKind.StorageBuffer: + if (operation.GetSource(srcIndex++) is not AstOperand bindingIndex || bindingIndex.Type != OperandType.Constant) + { + throw new InvalidOperationException($"First input of {operation.Inst} with {storageKind} storage must be a constant operand."); + } + + int binding = bindingIndex.Value; + BufferDefinition buffer = storageKind == StorageKind.ConstantBuffer + ? context.Properties.ConstantBuffers[binding] + : context.Properties.StorageBuffers[binding]; + + if (operation.GetSource(srcIndex++) is not AstOperand fieldIndex || fieldIndex.Type != OperandType.Constant) + { + throw new InvalidOperationException($"Second input of {operation.Inst} with {storageKind} storage must be a constant operand."); + } + + StructureField field = buffer.Type.Fields[fieldIndex.Value]; + + fieldHasPadding = buffer.Layout == BufferLayout.Std140 + && ((field.Type & AggregateType.Vector4) == 0) + && ((field.Type & AggregateType.Array) != 0); + + varName = storageKind == StorageKind.ConstantBuffer + ? "constant_buffers" + : "storage_buffers"; + varName += "." + buffer.Name; + varName += "->" + field.Name; + varType = field.Type; + break; + + case StorageKind.LocalMemory: + case StorageKind.SharedMemory: + if (operation.GetSource(srcIndex++) is not AstOperand { Type: OperandType.Constant } bindingId) + { + throw new InvalidOperationException($"First input of {operation.Inst} with {storageKind} storage must be a constant operand."); + } + + MemoryDefinition memory = storageKind == StorageKind.LocalMemory + ? context.Properties.LocalMemories[bindingId.Value] + : context.Properties.SharedMemories[bindingId.Value]; + + varName = memory.Name; + varType = memory.Type; + break; + + case StorageKind.Input: + case StorageKind.InputPerPatch: + case StorageKind.Output: + case StorageKind.OutputPerPatch: + if (operation.GetSource(srcIndex++) is not AstOperand varId || varId.Type != OperandType.Constant) + { + throw new InvalidOperationException($"First input of {operation.Inst} with {storageKind} storage must be a constant operand."); + } + + IoVariable ioVariable = (IoVariable)varId.Value; + bool isOutput = storageKind.IsOutput(); + bool isPerPatch = storageKind.IsPerPatch(); + int location = -1; + int component = 0; + + if (context.Definitions.HasPerLocationInputOrOutput(ioVariable, isOutput)) + { + if (operation.GetSource(srcIndex++) is not AstOperand vecIndex || vecIndex.Type != OperandType.Constant) + { + throw new InvalidOperationException($"Second input of {operation.Inst} with {storageKind} storage must be a constant operand."); + } + + location = vecIndex.Value; + + if (operation.SourcesCount > srcIndex && + operation.GetSource(srcIndex) is AstOperand elemIndex && + elemIndex.Type == OperandType.Constant && + context.Definitions.HasPerLocationInputOrOutputComponent(ioVariable, vecIndex.Value, elemIndex.Value, isOutput)) + { + component = elemIndex.Value; + srcIndex++; + } + } + + (varName, varType) = IoMap.GetMslBuiltIn( + context.Definitions, + ioVariable, + location, + component, + isOutput, + isPerPatch); + break; + + default: + throw new InvalidOperationException($"Invalid storage kind {storageKind}."); + } + + for (; srcIndex < inputsCount; srcIndex++) + { + IAstNode src = operation.GetSource(srcIndex); + + if ((varType & AggregateType.ElementCountMask) != 0 && + srcIndex == inputsCount - 1 && + src is AstOperand elementIndex && + elementIndex.Type == OperandType.Constant) + { + varName += "." + "xyzw"[elementIndex.Value & 3]; + } + else + { + varName += $"[{GetSourceExpr(context, src, AggregateType.S32)}]"; + } + } + varName += fieldName; + varName += fieldHasPadding ? ".x" : ""; + + if (isStore) + { + varType &= AggregateType.ElementTypeMask; + varName = $"{varName} = {GetSourceExpr(context, operation.GetSource(srcIndex), varType)}"; + } + + return varName; + } + + public static string ImageLoadOrStore(CodeGenContext context, AstOperation operation) + { + AstTextureOperation texOp = (AstTextureOperation)operation; + + bool isArray = (texOp.Type & SamplerType.Array) != 0; + + var texCallBuilder = new StringBuilder(); + + int srcIndex = 0; + + string Src(AggregateType type) + { + return GetSourceExpr(context, texOp.GetSource(srcIndex++), type); + } + + string imageName = GetImageName(context, texOp, ref srcIndex); + texCallBuilder.Append(imageName); + texCallBuilder.Append('.'); + + if (texOp.Inst == Instruction.ImageAtomic) + { + texCallBuilder.Append((texOp.Flags & TextureFlags.AtomicMask) switch + { + TextureFlags.Add => "atomic_fetch_add", + TextureFlags.Minimum => "atomic_min", + TextureFlags.Maximum => "atomic_max", + TextureFlags.Increment => "atomic_fetch_add", + TextureFlags.Decrement => "atomic_fetch_sub", + TextureFlags.BitwiseAnd => "atomic_fetch_and", + TextureFlags.BitwiseOr => "atomic_fetch_or", + TextureFlags.BitwiseXor => "atomic_fetch_xor", + TextureFlags.Swap => "atomic_exchange", + TextureFlags.CAS => "atomic_compare_exchange_weak", + _ => "atomic_fetch_add", + }); + } + else + { + texCallBuilder.Append(texOp.Inst == Instruction.ImageLoad ? "read" : "write"); + } + + texCallBuilder.Append('('); + + var coordsBuilder = new StringBuilder(); + + int coordsCount = texOp.Type.GetDimensions(); + + if (coordsCount > 1) + { + string[] elems = new string[coordsCount]; + + for (int index = 0; index < coordsCount; index++) + { + elems[index] = Src(AggregateType.S32); + } + + coordsBuilder.Append($"uint{coordsCount}({string.Join(", ", elems)})"); + } + else + { + coordsBuilder.Append($"uint({Src(AggregateType.S32)})"); + } + + if (isArray) + { + coordsBuilder.Append(", "); + coordsBuilder.Append(Src(AggregateType.S32)); + } + + if (texOp.Inst == Instruction.ImageStore) + { + AggregateType type = texOp.Format.GetComponentType(); + + string[] cElems = new string[4]; + + for (int index = 0; index < 4; index++) + { + if (srcIndex < texOp.SourcesCount) + { + cElems[index] = Src(type); + } + else + { + cElems[index] = type switch + { + AggregateType.S32 => NumberFormatter.FormatInt(0), + AggregateType.U32 => NumberFormatter.FormatUint(0), + _ => NumberFormatter.FormatFloat(0), + }; + } + } + + string prefix = type switch + { + AggregateType.S32 => "int", + AggregateType.U32 => "uint", + AggregateType.FP32 => "float", + _ => string.Empty, + }; + + texCallBuilder.Append($"{prefix}4({string.Join(", ", cElems)})"); + texCallBuilder.Append(", "); + } + + texCallBuilder.Append(coordsBuilder); + + if (texOp.Inst == Instruction.ImageAtomic) + { + texCallBuilder.Append(", "); + + AggregateType type = texOp.Format.GetComponentType(); + + if ((texOp.Flags & TextureFlags.AtomicMask) == TextureFlags.CAS) + { + texCallBuilder.Append(Src(type)); // Compare value. + } + + string value = (texOp.Flags & TextureFlags.AtomicMask) switch + { + TextureFlags.Increment => NumberFormatter.FormatInt(1, type), // TODO: Clamp value + TextureFlags.Decrement => NumberFormatter.FormatInt(-1, type), // TODO: Clamp value + _ => Src(type), + }; + + texCallBuilder.Append(value); + // This doesn't match what the MSL spec document says so either + // it is wrong or the MSL compiler has a bug. + texCallBuilder.Append(")[0]"); + } + else + { + texCallBuilder.Append(')'); + + if (texOp.Inst == Instruction.ImageLoad) + { + texCallBuilder.Append(GetMaskMultiDest(texOp.Index)); + } + } + + return texCallBuilder.ToString(); + } + + public static string Load(CodeGenContext context, AstOperation operation) + { + return GenerateLoadOrStore(context, operation, isStore: false); + } + + public static string Lod(CodeGenContext context, AstOperation operation) + { + AstTextureOperation texOp = (AstTextureOperation)operation; + + int coordsCount = texOp.Type.GetDimensions(); + int coordsIndex = 0; + + string textureName = GetTextureName(context, texOp, ref coordsIndex); + string samplerName = GetSamplerName(context, texOp, ref coordsIndex); + + string coordsExpr; + + if (coordsCount > 1) + { + string[] elems = new string[coordsCount]; + + for (int index = 0; index < coordsCount; index++) + { + elems[index] = GetSourceExpr(context, texOp.GetSource(coordsIndex + index), AggregateType.FP32); + } + + coordsExpr = "float" + coordsCount + "(" + string.Join(", ", elems) + ")"; + } + else + { + coordsExpr = GetSourceExpr(context, texOp.GetSource(coordsIndex), AggregateType.FP32); + } + + var clamped = $"{textureName}.calculate_clamped_lod({samplerName}, {coordsExpr})"; + var unclamped = $"{textureName}.calculate_unclamped_lod({samplerName}, {coordsExpr})"; + + return $"float2({clamped}, {unclamped}){GetMask(texOp.Index)}"; + } + + public static string Store(CodeGenContext context, AstOperation operation) + { + return GenerateLoadOrStore(context, operation, isStore: true); + } + + public static string TextureSample(CodeGenContext context, AstOperation operation) + { + AstTextureOperation texOp = (AstTextureOperation)operation; + + bool isGather = (texOp.Flags & TextureFlags.Gather) != 0; + bool hasDerivatives = (texOp.Flags & TextureFlags.Derivatives) != 0; + bool intCoords = (texOp.Flags & TextureFlags.IntCoords) != 0; + bool hasLodBias = (texOp.Flags & TextureFlags.LodBias) != 0; + bool hasLodLevel = (texOp.Flags & TextureFlags.LodLevel) != 0; + bool hasOffset = (texOp.Flags & TextureFlags.Offset) != 0; + bool hasOffsets = (texOp.Flags & TextureFlags.Offsets) != 0; + + bool isArray = (texOp.Type & SamplerType.Array) != 0; + bool isShadow = (texOp.Type & SamplerType.Shadow) != 0; + + var texCallBuilder = new StringBuilder(); + + bool colorIsVector = isGather || !isShadow; + + int srcIndex = 0; + + string Src(AggregateType type) + { + return GetSourceExpr(context, texOp.GetSource(srcIndex++), type); + } + + string textureName = GetTextureName(context, texOp, ref srcIndex); + string samplerName = GetSamplerName(context, texOp, ref srcIndex); + + texCallBuilder.Append(textureName); + texCallBuilder.Append('.'); + + if (intCoords) + { + texCallBuilder.Append("read("); + } + else + { + if (isGather) + { + texCallBuilder.Append("gather"); + } + else + { + texCallBuilder.Append("sample"); + } + + if (isShadow) + { + texCallBuilder.Append("_compare"); + } + + texCallBuilder.Append($"({samplerName}, "); + } + + int coordsCount = texOp.Type.GetDimensions(); + + int pCount = coordsCount; + + bool appended = false; + void Append(string str) + { + if (appended) + { + texCallBuilder.Append(", "); + } + else + { + appended = true; + } + + texCallBuilder.Append(str); + } + + AggregateType coordType = intCoords ? AggregateType.S32 : AggregateType.FP32; + + string AssemblePVector(int count) + { + string coords; + if (count > 1) + { + string[] elems = new string[count]; + + for (int index = 0; index < count; index++) + { + elems[index] = Src(coordType); + } + + coords = string.Join(", ", elems); + } + else + { + coords = Src(coordType); + } + + string prefix = intCoords ? "uint" : "float"; + + return prefix + (count > 1 ? count : "") + "(" + coords + ")"; + } + + Append(AssemblePVector(pCount)); + + if (isArray) + { + Append(Src(AggregateType.S32)); + } + + if (isShadow) + { + Append(Src(AggregateType.FP32)); + } + + if (hasDerivatives) + { + Logger.Warning?.PrintMsg(LogClass.Gpu, "Unused sampler derivatives!"); + } + + if (hasLodBias) + { + Logger.Warning?.PrintMsg(LogClass.Gpu, "Unused sample LOD bias!"); + } + + if (hasLodLevel) + { + if (intCoords) + { + Append(Src(coordType)); + } + else + { + Append($"level({Src(coordType)})"); + } + } + + string AssembleOffsetVector(int count) + { + if (count > 1) + { + string[] elems = new string[count]; + + for (int index = 0; index < count; index++) + { + elems[index] = Src(AggregateType.S32); + } + + return "int" + count + "(" + string.Join(", ", elems) + ")"; + } + else + { + return Src(AggregateType.S32); + } + } + + // TODO: Support reads with offsets + if (!intCoords) + { + if (hasOffset) + { + Append(AssembleOffsetVector(coordsCount)); + } + else if (hasOffsets) + { + Logger.Warning?.PrintMsg(LogClass.Gpu, "Multiple offsets on gathers are not yet supported!"); + } + } + + texCallBuilder.Append(')'); + texCallBuilder.Append(colorIsVector ? GetMaskMultiDest(texOp.Index) : ""); + + return texCallBuilder.ToString(); + } + + private static string GetTextureName(CodeGenContext context, AstTextureOperation texOp, ref int srcIndex) + { + TextureDefinition textureDefinition = context.Properties.Textures[texOp.GetTextureSetAndBinding()]; + string name = textureDefinition.Name; + string setName = Declarations.GetNameForSet(textureDefinition.Set, true); + + if (textureDefinition.ArrayLength != 1) + { + name = $"{name}[{GetSourceExpr(context, texOp.GetSource(srcIndex++), AggregateType.S32)}]"; + } + + return $"{setName}.tex_{name}"; + } + + private static string GetSamplerName(CodeGenContext context, AstTextureOperation texOp, ref int srcIndex) + { + var index = texOp.IsSeparate ? texOp.GetSamplerSetAndBinding() : texOp.GetTextureSetAndBinding(); + var sourceIndex = texOp.IsSeparate ? srcIndex++ : srcIndex + 1; + + TextureDefinition samplerDefinition = context.Properties.Textures[index]; + string name = samplerDefinition.Name; + string setName = Declarations.GetNameForSet(samplerDefinition.Set, true); + + if (samplerDefinition.ArrayLength != 1) + { + name = $"{name}[{GetSourceExpr(context, texOp.GetSource(sourceIndex), AggregateType.S32)}]"; + } + + return $"{setName}.samp_{name}"; + } + + private static string GetImageName(CodeGenContext context, AstTextureOperation texOp, ref int srcIndex) + { + TextureDefinition imageDefinition = context.Properties.Images[texOp.GetTextureSetAndBinding()]; + string name = imageDefinition.Name; + string setName = Declarations.GetNameForSet(imageDefinition.Set, true); + + if (imageDefinition.ArrayLength != 1) + { + name = $"{name}[{GetSourceExpr(context, texOp.GetSource(srcIndex++), AggregateType.S32)}]"; + } + + return $"{setName}.{name}"; + } + + private static string GetMaskMultiDest(int mask) + { + if (mask == 0x0) + { + return ""; + } + + string swizzle = "."; + + for (int i = 0; i < 4; i++) + { + if ((mask & (1 << i)) != 0) + { + swizzle += "xyzw"[i]; + } + } + + return swizzle; + } + + public static string TextureQuerySamples(CodeGenContext context, AstOperation operation) + { + AstTextureOperation texOp = (AstTextureOperation)operation; + + int srcIndex = 0; + + string textureName = GetTextureName(context, texOp, ref srcIndex); + + return $"{textureName}.get_num_samples()"; + } + + public static string TextureQuerySize(CodeGenContext context, AstOperation operation) + { + AstTextureOperation texOp = (AstTextureOperation)operation; + + var texCallBuilder = new StringBuilder(); + + int srcIndex = 0; + + string textureName = GetTextureName(context, texOp, ref srcIndex); + texCallBuilder.Append(textureName); + texCallBuilder.Append('.'); + + if (texOp.Index == 3) + { + texCallBuilder.Append("get_num_mip_levels()"); + } + else + { + context.Properties.Textures.TryGetValue(texOp.GetTextureSetAndBinding(), out TextureDefinition definition); + bool hasLod = !definition.Type.HasFlag(SamplerType.Multisample) && (definition.Type & SamplerType.Mask) != SamplerType.TextureBuffer; + bool isArray = definition.Type.HasFlag(SamplerType.Array); + texCallBuilder.Append("get_"); + + if (texOp.Index == 0) + { + texCallBuilder.Append("width"); + } + else if (texOp.Index == 1) + { + texCallBuilder.Append("height"); + } + else + { + if (isArray) + { + texCallBuilder.Append("array_size"); + } + else + { + texCallBuilder.Append("depth"); + } + } + + texCallBuilder.Append('('); + + if (hasLod && !isArray) + { + IAstNode lod = operation.GetSource(0); + string lodExpr = GetSourceExpr(context, lod, GetSrcVarType(operation.Inst, 0)); + + texCallBuilder.Append(lodExpr); + } + + texCallBuilder.Append(')'); + } + + return texCallBuilder.ToString(); + } + + public static string PackHalf2x16(CodeGenContext context, AstOperation operation) + { + IAstNode src0 = operation.GetSource(0); + IAstNode src1 = operation.GetSource(1); + + string src0Expr = GetSourceExpr(context, src0, GetSrcVarType(operation.Inst, 0)); + string src1Expr = GetSourceExpr(context, src1, GetSrcVarType(operation.Inst, 1)); + + return $"as_type(half2({src0Expr}, {src1Expr}))"; + } + + public static string UnpackHalf2x16(CodeGenContext context, AstOperation operation) + { + IAstNode src = operation.GetSource(0); + + string srcExpr = GetSourceExpr(context, src, GetSrcVarType(operation.Inst, 0)); + + return $"float2(as_type({srcExpr})){GetMask(operation.Index)}"; + } + + private static string GetMask(int index) + { + return $".{"xy".AsSpan(index, 1)}"; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenVector.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenVector.cs new file mode 100644 index 000000000..9d8dae543 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenVector.cs @@ -0,0 +1,32 @@ +using Ryujinx.Graphics.Shader.IntermediateRepresentation; +using Ryujinx.Graphics.Shader.StructuredIr; + +using static Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions.InstGenHelper; +using static Ryujinx.Graphics.Shader.StructuredIr.InstructionInfo; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions +{ + static class InstGenVector + { + public static string VectorExtract(CodeGenContext context, AstOperation operation) + { + IAstNode vector = operation.GetSource(0); + IAstNode index = operation.GetSource(1); + + string vectorExpr = GetSourceExpr(context, vector, OperandManager.GetNodeDestType(context, vector)); + + if (index is AstOperand indexOperand && indexOperand.Type == OperandType.Constant) + { + char elem = "xyzw"[indexOperand.Value]; + + return $"{vectorExpr}.{elem}"; + } + else + { + string indexExpr = GetSourceExpr(context, index, GetSrcVarType(operation.Inst, 1)); + + return $"{vectorExpr}[{indexExpr}]"; + } + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstInfo.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstInfo.cs new file mode 100644 index 000000000..5e5d04d6b --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstInfo.cs @@ -0,0 +1,18 @@ +namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions +{ + readonly struct InstInfo + { + public InstType Type { get; } + + public string OpName { get; } + + public int Precedence { get; } + + public InstInfo(InstType type, string opName, int precedence) + { + Type = type; + OpName = opName; + Precedence = precedence; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstType.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstType.cs new file mode 100644 index 000000000..d8f6bfed1 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstType.cs @@ -0,0 +1,35 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions +{ + [Flags] + [SuppressMessage("Design", "CA1069: Enums values should not be duplicated")] + public enum InstType + { + OpNullary = Op | 0, + OpUnary = Op | 1, + OpBinary = Op | 2, + OpBinaryCom = Op | 2 | Commutative, + OpTernary = Op | 3, + + CallNullary = Call | 0, + CallUnary = Call | 1, + CallBinary = Call | 2, + CallTernary = Call | 3, + CallQuaternary = Call | 4, + + // The atomic instructions have one extra operand, + // for the storage slot and offset pair. + AtomicBinary = Call | Atomic | 3, + AtomicTernary = Call | Atomic | 4, + + Commutative = 1 << 8, + Op = 1 << 9, + Call = 1 << 10, + Atomic = 1 << 11, + Special = 1 << 12, + + ArityMask = 0xff, + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/IoMap.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/IoMap.cs new file mode 100644 index 000000000..e02d0a61f --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/IoMap.cs @@ -0,0 +1,83 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.Shader.IntermediateRepresentation; +using Ryujinx.Graphics.Shader.Translation; +using System.Globalization; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions +{ + static class IoMap + { + public static (string, AggregateType) GetMslBuiltIn( + ShaderDefinitions definitions, + IoVariable ioVariable, + int location, + int component, + bool isOutput, + bool isPerPatch) + { + var returnValue = ioVariable switch + { + IoVariable.BaseInstance => ("base_instance", AggregateType.U32), + IoVariable.BaseVertex => ("base_vertex", AggregateType.U32), + IoVariable.CtaId => ("threadgroup_position_in_grid", AggregateType.Vector3 | AggregateType.U32), + IoVariable.ClipDistance => ("out.clip_distance", AggregateType.Array | AggregateType.FP32), + IoVariable.FragmentOutputColor => ($"out.color{location}", definitions.GetFragmentOutputColorType(location)), + IoVariable.FragmentOutputDepth => ("out.depth", AggregateType.FP32), + IoVariable.FrontFacing => ("in.front_facing", AggregateType.Bool), + IoVariable.GlobalId => ("thread_position_in_grid", AggregateType.Vector3 | AggregateType.U32), + IoVariable.InstanceId => ("instance_id", AggregateType.U32), + IoVariable.InstanceIndex => ("instance_index", AggregateType.U32), + IoVariable.InvocationId => ("INVOCATION_ID", AggregateType.S32), + IoVariable.PointCoord => ("in.point_coord", AggregateType.Vector2 | AggregateType.FP32), + IoVariable.PointSize => ("out.point_size", AggregateType.FP32), + IoVariable.Position => ("out.position", AggregateType.Vector4 | AggregateType.FP32), + IoVariable.PrimitiveId => ("in.primitive_id", AggregateType.U32), + IoVariable.SubgroupEqMask => ("thread_index_in_simdgroup >= 32 ? uint4(0, (1 << (thread_index_in_simdgroup - 32)), uint2(0)) : uint4(1 << thread_index_in_simdgroup, uint3(0))", AggregateType.Vector4 | AggregateType.U32), + IoVariable.SubgroupGeMask => ("uint4(insert_bits(0u, 0xFFFFFFFF, thread_index_in_simdgroup, 32 - thread_index_in_simdgroup), uint3(0)) & (uint4((uint)((simd_vote::vote_t)simd_ballot(true) & 0xFFFFFFFF), (uint)(((simd_vote::vote_t)simd_ballot(true) >> 32) & 0xFFFFFFFF), 0, 0))", AggregateType.Vector4 | AggregateType.U32), + IoVariable.SubgroupGtMask => ("uint4(insert_bits(0u, 0xFFFFFFFF, thread_index_in_simdgroup + 1, 32 - thread_index_in_simdgroup - 1), uint3(0)) & (uint4((uint)((simd_vote::vote_t)simd_ballot(true) & 0xFFFFFFFF), (uint)(((simd_vote::vote_t)simd_ballot(true) >> 32) & 0xFFFFFFFF), 0, 0))", AggregateType.Vector4 | AggregateType.U32), + IoVariable.SubgroupLaneId => ("thread_index_in_simdgroup", AggregateType.U32), + IoVariable.SubgroupLeMask => ("uint4(extract_bits(0xFFFFFFFF, 0, min(thread_index_in_simdgroup + 1, 32u)), extract_bits(0xFFFFFFFF, 0, (uint)max((int)thread_index_in_simdgroup + 1 - 32, 0)), uint2(0))", AggregateType.Vector4 | AggregateType.U32), + IoVariable.SubgroupLtMask => ("uint4(extract_bits(0xFFFFFFFF, 0, min(thread_index_in_simdgroup, 32u)), extract_bits(0xFFFFFFFF, 0, (uint)max((int)thread_index_in_simdgroup - 32, 0)), uint2(0))", AggregateType.Vector4 | AggregateType.U32), + IoVariable.ThreadKill => ("simd_is_helper_thread()", AggregateType.Bool), + IoVariable.UserDefined => GetUserDefinedVariableName(definitions, location, component, isOutput, isPerPatch), + IoVariable.ThreadId => ("thread_position_in_threadgroup", AggregateType.Vector3 | AggregateType.U32), + IoVariable.VertexId => ("vertex_id", AggregateType.S32), + // gl_VertexIndex does not have a direct equivalent in MSL + IoVariable.VertexIndex => ("vertex_id", AggregateType.U32), + IoVariable.ViewportIndex => ("viewport_array_index", AggregateType.S32), + IoVariable.FragmentCoord => ("in.position", AggregateType.Vector4 | AggregateType.FP32), + _ => (null, AggregateType.Invalid), + }; + + if (returnValue.Item2 == AggregateType.Invalid) + { + Logger.Warning?.PrintMsg(LogClass.Gpu, $"Unable to find type for IoVariable {ioVariable}!"); + } + + return returnValue; + } + + private static (string, AggregateType) GetUserDefinedVariableName(ShaderDefinitions definitions, int location, int component, bool isOutput, bool isPerPatch) + { + string name = isPerPatch + ? Defaults.PerPatchAttributePrefix + : (isOutput ? Defaults.OAttributePrefix : Defaults.IAttributePrefix); + + if (location < 0) + { + return (name, definitions.GetUserDefinedType(0, isOutput)); + } + + name += location.ToString(CultureInfo.InvariantCulture); + + if (definitions.HasPerLocationInputOrOutputComponent(IoVariable.UserDefined, location, component, isOutput)) + { + name += "_" + "xyzw"[component & 3]; + } + + string prefix = isOutput ? "out" : "in"; + + return (prefix + "." + name, definitions.GetUserDefinedType(location, isOutput)); + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs new file mode 100644 index 000000000..7de6ee5dd --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs @@ -0,0 +1,286 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions; +using Ryujinx.Graphics.Shader.StructuredIr; +using Ryujinx.Graphics.Shader.Translation; +using System; +using System.Linq; +using static Ryujinx.Graphics.Shader.CodeGen.Msl.TypeConversion; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl +{ + static class MslGenerator + { + public static string Generate(StructuredProgramInfo info, CodeGenParameters parameters) + { + if (parameters.Definitions.Stage is not (ShaderStage.Vertex or ShaderStage.Fragment or ShaderStage.Compute)) + { + Logger.Warning?.Print(LogClass.Gpu, $"Attempted to generate unsupported shader type {parameters.Definitions.Stage}!"); + return ""; + } + + CodeGenContext context = new(info, parameters); + + var sets = Declarations.Declare(context, info); + + if (info.Functions.Count != 0) + { + for (int i = 1; i < info.Functions.Count; i++) + { + PrintFunction(context, info.Functions[i], parameters.Definitions.Stage, sets); + + context.AppendLine(); + } + } + + PrintFunction(context, info.Functions[0], parameters.Definitions.Stage, sets, true); + + return context.GetCode(); + } + + private static void PrintFunction(CodeGenContext context, StructuredFunction function, ShaderStage stage, int[] sets, bool isMainFunc = false) + { + context.CurrentFunction = function; + + context.AppendLine(GetFunctionSignature(context, function, stage, sets, isMainFunc)); + context.EnterScope(); + + Declarations.DeclareLocals(context, function, stage, isMainFunc); + + PrintBlock(context, function.MainBlock, isMainFunc); + + // In case the shader hasn't returned, return + if (isMainFunc && stage != ShaderStage.Compute) + { + context.AppendLine("return out;"); + } + + context.LeaveScope(); + } + + private static string GetFunctionSignature( + CodeGenContext context, + StructuredFunction function, + ShaderStage stage, + int[] sets, + bool isMainFunc = false) + { + int additionalArgCount = isMainFunc ? 0 : CodeGenContext.AdditionalArgCount + (context.Definitions.Stage != ShaderStage.Compute ? 1 : 0); + bool needsThreadIndex = false; + + // TODO: Replace this with a proper flag + if (function.Name.Contains("Shuffle")) + { + needsThreadIndex = true; + additionalArgCount++; + } + + string[] args = new string[additionalArgCount + function.InArguments.Length + function.OutArguments.Length]; + + // All non-main functions need to be able to access the support_buffer as well + if (!isMainFunc) + { + if (stage != ShaderStage.Compute) + { + args[0] = stage == ShaderStage.Vertex ? "VertexIn in" : "FragmentIn in"; + args[1] = "constant ConstantBuffers &constant_buffers"; + args[2] = "device StorageBuffers &storage_buffers"; + + if (needsThreadIndex) + { + args[3] = "uint thread_index_in_simdgroup"; + } + } + else + { + args[0] = "constant ConstantBuffers &constant_buffers"; + args[1] = "device StorageBuffers &storage_buffers"; + + if (needsThreadIndex) + { + args[2] = "uint thread_index_in_simdgroup"; + } + } + } + + int argIndex = additionalArgCount; + for (int i = 0; i < function.InArguments.Length; i++) + { + args[argIndex++] = $"{Declarations.GetVarTypeName(function.InArguments[i])} {OperandManager.GetArgumentName(i)}"; + } + + for (int i = 0; i < function.OutArguments.Length; i++) + { + int j = i + function.InArguments.Length; + + args[argIndex++] = $"thread {Declarations.GetVarTypeName(function.OutArguments[i])} &{OperandManager.GetArgumentName(j)}"; + } + + string funcKeyword = "inline"; + string funcName = null; + string returnType = Declarations.GetVarTypeName(function.ReturnType); + + if (isMainFunc) + { + if (stage == ShaderStage.Vertex) + { + funcKeyword = "vertex"; + funcName = "vertexMain"; + returnType = "VertexOut"; + } + else if (stage == ShaderStage.Fragment) + { + funcKeyword = "fragment"; + funcName = "fragmentMain"; + returnType = "FragmentOut"; + } + else if (stage == ShaderStage.Compute) + { + funcKeyword = "kernel"; + funcName = "kernelMain"; + returnType = "void"; + } + + if (stage == ShaderStage.Vertex) + { + args = args.Prepend("VertexIn in [[stage_in]]").ToArray(); + } + else if (stage == ShaderStage.Fragment) + { + args = args.Prepend("FragmentIn in [[stage_in]]").ToArray(); + } + + // TODO: add these only if they are used + if (stage == ShaderStage.Vertex) + { + args = args.Append("uint vertex_id [[vertex_id]]").ToArray(); + args = args.Append("uint instance_id [[instance_id]]").ToArray(); + args = args.Append("uint base_instance [[base_instance]]").ToArray(); + args = args.Append("uint base_vertex [[base_vertex]]").ToArray(); + } + else if (stage == ShaderStage.Compute) + { + args = args.Append("uint3 threadgroup_position_in_grid [[threadgroup_position_in_grid]]").ToArray(); + args = args.Append("uint3 thread_position_in_grid [[thread_position_in_grid]]").ToArray(); + args = args.Append("uint3 thread_position_in_threadgroup [[thread_position_in_threadgroup]]").ToArray(); + args = args.Append("uint thread_index_in_simdgroup [[thread_index_in_simdgroup]]").ToArray(); + } + + args = args.Append($"constant ConstantBuffers &constant_buffers [[buffer({Defaults.ConstantBuffersIndex})]]").ToArray(); + args = args.Append($"device StorageBuffers &storage_buffers [[buffer({Defaults.StorageBuffersIndex})]]").ToArray(); + + foreach (var set in sets) + { + var bindingIndex = set + Defaults.BaseSetIndex; + args = args.Append($"constant {Declarations.GetNameForSet(set)} &{Declarations.GetNameForSet(set, true)} [[buffer({bindingIndex})]]").ToArray(); + } + } + + var funcPrefix = $"{funcKeyword} {returnType} {funcName ?? function.Name}("; + var indent = new string(' ', funcPrefix.Length); + + return $"{funcPrefix}{string.Join($", \n{indent}", args)})"; + } + + private static void PrintBlock(CodeGenContext context, AstBlock block, bool isMainFunction) + { + AstBlockVisitor visitor = new(block); + + visitor.BlockEntered += (sender, e) => + { + switch (e.Block.Type) + { + case AstBlockType.DoWhile: + context.AppendLine("do"); + break; + + case AstBlockType.Else: + context.AppendLine("else"); + break; + + case AstBlockType.ElseIf: + context.AppendLine($"else if ({GetCondExpr(context, e.Block.Condition)})"); + break; + + case AstBlockType.If: + context.AppendLine($"if ({GetCondExpr(context, e.Block.Condition)})"); + break; + + default: + throw new InvalidOperationException($"Found unexpected block type \"{e.Block.Type}\"."); + } + + context.EnterScope(); + }; + + visitor.BlockLeft += (sender, e) => + { + context.LeaveScope(); + + if (e.Block.Type == AstBlockType.DoWhile) + { + context.AppendLine($"while ({GetCondExpr(context, e.Block.Condition)});"); + } + }; + + bool supportsBarrierDivergence = context.HostCapabilities.SupportsShaderBarrierDivergence; + bool mayHaveReturned = false; + + foreach (IAstNode node in visitor.Visit()) + { + if (node is AstOperation operation) + { + if (!supportsBarrierDivergence) + { + if (operation.Inst == IntermediateRepresentation.Instruction.Barrier) + { + // Barrier on divergent control flow paths may cause the GPU to hang, + // so skip emitting the barrier for those cases. + if (visitor.Block.Type != AstBlockType.Main || mayHaveReturned || !isMainFunction) + { + context.Logger.Log($"Shader has barrier on potentially divergent block, the barrier will be removed."); + + continue; + } + } + else if (operation.Inst == IntermediateRepresentation.Instruction.Return) + { + mayHaveReturned = true; + } + } + + string expr = InstGen.GetExpression(context, operation); + + if (expr != null) + { + context.AppendLine(expr + ";"); + } + } + else if (node is AstAssignment assignment) + { + AggregateType dstType = OperandManager.GetNodeDestType(context, assignment.Destination); + AggregateType srcType = OperandManager.GetNodeDestType(context, assignment.Source); + + string dest = InstGen.GetExpression(context, assignment.Destination); + string src = ReinterpretCast(context, assignment.Source, srcType, dstType); + + context.AppendLine(dest + " = " + src + ";"); + } + else if (node is AstComment comment) + { + context.AppendLine("// " + comment.Comment); + } + else + { + throw new InvalidOperationException($"Found unexpected node type \"{node?.GetType().Name ?? "null"}\"."); + } + } + } + + private static string GetCondExpr(CodeGenContext context, IAstNode cond) + { + AggregateType srcType = OperandManager.GetNodeDestType(context, cond); + + return ReinterpretCast(context, cond, srcType, AggregateType.Bool); + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/NumberFormatter.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/NumberFormatter.cs new file mode 100644 index 000000000..86cdfc0e6 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/NumberFormatter.cs @@ -0,0 +1,94 @@ +using Ryujinx.Graphics.Shader.Translation; +using System; +using System.Globalization; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl +{ + static class NumberFormatter + { + private const int MaxDecimal = 256; + + public static bool TryFormat(int value, AggregateType dstType, out string formatted) + { + switch (dstType) + { + case AggregateType.FP32: + return TryFormatFloat(BitConverter.Int32BitsToSingle(value), out formatted); + case AggregateType.S32: + formatted = FormatInt(value); + break; + case AggregateType.U32: + formatted = FormatUint((uint)value); + break; + case AggregateType.Bool: + formatted = value != 0 ? "true" : "false"; + break; + default: + throw new ArgumentException($"Invalid variable type \"{dstType}\"."); + } + + return true; + } + + public static string FormatFloat(float value) + { + if (!TryFormatFloat(value, out string formatted)) + { + throw new ArgumentException("Failed to convert float value to string."); + } + + return formatted; + } + + public static bool TryFormatFloat(float value, out string formatted) + { + if (float.IsNaN(value) || float.IsInfinity(value)) + { + formatted = null; + + return false; + } + + formatted = value.ToString("G9", CultureInfo.InvariantCulture); + + if (!(formatted.Contains('.') || + formatted.Contains('e') || + formatted.Contains('E'))) + { + formatted += ".0f"; + } + + return true; + } + + public static string FormatInt(int value, AggregateType dstType) + { + return dstType switch + { + AggregateType.S32 => FormatInt(value), + AggregateType.U32 => FormatUint((uint)value), + _ => throw new ArgumentException($"Invalid variable type \"{dstType}\".") + }; + } + + public static string FormatInt(int value) + { + if (value <= MaxDecimal && value >= -MaxDecimal) + { + return value.ToString(CultureInfo.InvariantCulture); + } + + return $"as_type(0x{value.ToString("X", CultureInfo.InvariantCulture)})"; + } + + public static string FormatUint(uint value) + { + if (value <= MaxDecimal && value >= 0) + { + return value.ToString(CultureInfo.InvariantCulture) + "u"; + } + + return $"as_type(0x{value.ToString("X", CultureInfo.InvariantCulture)})"; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/OperandManager.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/OperandManager.cs new file mode 100644 index 000000000..e131a645e --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/OperandManager.cs @@ -0,0 +1,176 @@ +using Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions; +using Ryujinx.Graphics.Shader.IntermediateRepresentation; +using Ryujinx.Graphics.Shader.StructuredIr; +using Ryujinx.Graphics.Shader.Translation; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using static Ryujinx.Graphics.Shader.StructuredIr.InstructionInfo; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl +{ + class OperandManager + { + private readonly Dictionary _locals; + + public OperandManager() + { + _locals = new Dictionary(); + } + + public string DeclareLocal(AstOperand operand) + { + string name = $"{Defaults.LocalNamePrefix}_{_locals.Count}"; + + _locals.Add(operand, name); + + return name; + } + + public string GetExpression(CodeGenContext context, AstOperand operand) + { + return operand.Type switch + { + OperandType.Argument => GetArgumentName(operand.Value), + OperandType.Constant => NumberFormatter.FormatInt(operand.Value), + OperandType.LocalVariable => _locals[operand], + OperandType.Undefined => Defaults.UndefinedName, + _ => throw new ArgumentException($"Invalid operand type \"{operand.Type}\"."), + }; + } + + public static string GetArgumentName(int argIndex) + { + return $"{Defaults.ArgumentNamePrefix}{argIndex}"; + } + + public static AggregateType GetNodeDestType(CodeGenContext context, IAstNode node) + { + if (node is AstOperation operation) + { + if (operation.Inst == Instruction.Load || operation.Inst.IsAtomic()) + { + switch (operation.StorageKind) + { + case StorageKind.ConstantBuffer: + case StorageKind.StorageBuffer: + if (operation.GetSource(0) is not AstOperand bindingIndex || bindingIndex.Type != OperandType.Constant) + { + throw new InvalidOperationException($"First input of {operation.Inst} with {operation.StorageKind} storage must be a constant operand."); + } + + if (operation.GetSource(1) is not AstOperand fieldIndex || fieldIndex.Type != OperandType.Constant) + { + throw new InvalidOperationException($"Second input of {operation.Inst} with {operation.StorageKind} storage must be a constant operand."); + } + + BufferDefinition buffer = operation.StorageKind == StorageKind.ConstantBuffer + ? context.Properties.ConstantBuffers[bindingIndex.Value] + : context.Properties.StorageBuffers[bindingIndex.Value]; + StructureField field = buffer.Type.Fields[fieldIndex.Value]; + + return field.Type & AggregateType.ElementTypeMask; + + case StorageKind.LocalMemory: + case StorageKind.SharedMemory: + if (operation.GetSource(0) is not AstOperand { Type: OperandType.Constant } bindingId) + { + throw new InvalidOperationException($"First input of {operation.Inst} with {operation.StorageKind} storage must be a constant operand."); + } + + MemoryDefinition memory = operation.StorageKind == StorageKind.LocalMemory + ? context.Properties.LocalMemories[bindingId.Value] + : context.Properties.SharedMemories[bindingId.Value]; + + return memory.Type & AggregateType.ElementTypeMask; + + case StorageKind.Input: + case StorageKind.InputPerPatch: + case StorageKind.Output: + case StorageKind.OutputPerPatch: + if (operation.GetSource(0) is not AstOperand varId || varId.Type != OperandType.Constant) + { + throw new InvalidOperationException($"First input of {operation.Inst} with {operation.StorageKind} storage must be a constant operand."); + } + + IoVariable ioVariable = (IoVariable)varId.Value; + bool isOutput = operation.StorageKind == StorageKind.Output || operation.StorageKind == StorageKind.OutputPerPatch; + bool isPerPatch = operation.StorageKind == StorageKind.InputPerPatch || operation.StorageKind == StorageKind.OutputPerPatch; + int location = 0; + int component = 0; + + if (context.Definitions.HasPerLocationInputOrOutput(ioVariable, isOutput)) + { + if (operation.GetSource(1) is not AstOperand vecIndex || vecIndex.Type != OperandType.Constant) + { + throw new InvalidOperationException($"Second input of {operation.Inst} with {operation.StorageKind} storage must be a constant operand."); + } + + location = vecIndex.Value; + + if (operation.SourcesCount > 2 && + operation.GetSource(2) is AstOperand elemIndex && + elemIndex.Type == OperandType.Constant && + context.Definitions.HasPerLocationInputOrOutputComponent(ioVariable, location, elemIndex.Value, isOutput)) + { + component = elemIndex.Value; + } + } + + (_, AggregateType varType) = IoMap.GetMslBuiltIn( + context.Definitions, + ioVariable, + location, + component, + isOutput, + isPerPatch); + + return varType & AggregateType.ElementTypeMask; + } + } + else if (operation.Inst == Instruction.Call) + { + AstOperand funcId = (AstOperand)operation.GetSource(0); + + Debug.Assert(funcId.Type == OperandType.Constant); + + return context.GetFunction(funcId.Value).ReturnType; + } + else if (operation.Inst == Instruction.VectorExtract) + { + return GetNodeDestType(context, operation.GetSource(0)) & ~AggregateType.ElementCountMask; + } + else if (operation is AstTextureOperation texOp) + { + if (texOp.Inst == Instruction.ImageLoad || + texOp.Inst == Instruction.ImageStore || + texOp.Inst == Instruction.ImageAtomic) + { + return texOp.GetVectorType(texOp.Format.GetComponentType()); + } + else if (texOp.Inst == Instruction.TextureSample) + { + return texOp.GetVectorType(GetDestVarType(operation.Inst)); + } + } + + return GetDestVarType(operation.Inst); + } + else if (node is AstOperand operand) + { + if (operand.Type == OperandType.Argument) + { + int argIndex = operand.Value; + + return context.CurrentFunction.GetArgumentType(argIndex); + } + + return OperandInfo.GetVarType(operand); + } + else + { + throw new ArgumentException($"Invalid node type \"{node?.GetType().Name ?? "null"}\"."); + } + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/TypeConversion.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/TypeConversion.cs new file mode 100644 index 000000000..e145bb8b0 --- /dev/null +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/TypeConversion.cs @@ -0,0 +1,93 @@ +using Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions; +using Ryujinx.Graphics.Shader.IntermediateRepresentation; +using Ryujinx.Graphics.Shader.StructuredIr; +using Ryujinx.Graphics.Shader.Translation; +using System; + +namespace Ryujinx.Graphics.Shader.CodeGen.Msl +{ + static class TypeConversion + { + public static string ReinterpretCast( + CodeGenContext context, + IAstNode node, + AggregateType srcType, + AggregateType dstType) + { + if (node is AstOperand operand && operand.Type == OperandType.Constant) + { + if (NumberFormatter.TryFormat(operand.Value, dstType, out string formatted)) + { + return formatted; + } + } + + string expr = InstGen.GetExpression(context, node); + + return ReinterpretCast(expr, node, srcType, dstType); + } + + private static string ReinterpretCast(string expr, IAstNode node, AggregateType srcType, AggregateType dstType) + { + if (srcType == dstType) + { + return expr; + } + + if (srcType == AggregateType.FP32) + { + switch (dstType) + { + case AggregateType.Bool: + return $"(as_type({expr}) != 0)"; + case AggregateType.S32: + return $"as_type({expr})"; + case AggregateType.U32: + return $"as_type({expr})"; + } + } + else if (dstType == AggregateType.FP32) + { + switch (srcType) + { + case AggregateType.Bool: + return $"as_type({ReinterpretBoolToInt(expr, node, AggregateType.S32)})"; + case AggregateType.S32: + return $"as_type({expr})"; + case AggregateType.U32: + return $"as_type({expr})"; + } + } + else if (srcType == AggregateType.Bool) + { + return ReinterpretBoolToInt(expr, node, dstType); + } + else if (dstType == AggregateType.Bool) + { + expr = InstGenHelper.Enclose(expr, node, Instruction.CompareNotEqual, isLhs: true); + + return $"({expr} != 0)"; + } + else if (dstType == AggregateType.S32) + { + return $"int({expr})"; + } + else if (dstType == AggregateType.U32) + { + return $"uint({expr})"; + } + + throw new ArgumentException($"Invalid reinterpret cast from \"{srcType}\" to \"{dstType}\"."); + } + + private static string ReinterpretBoolToInt(string expr, IAstNode node, AggregateType dstType) + { + string trueExpr = NumberFormatter.FormatInt(IrConsts.True, dstType); + string falseExpr = NumberFormatter.FormatInt(IrConsts.False, dstType); + + expr = InstGenHelper.Enclose(expr, node, Instruction.ConditionalSelect, isLhs: false); + + return $"({expr} ? {trueExpr} : {falseExpr})"; + } + } +} diff --git a/src/Ryujinx.Graphics.Shader/Ryujinx.Graphics.Shader.csproj b/src/Ryujinx.Graphics.Shader/Ryujinx.Graphics.Shader.csproj index cfb188daf..8b05d8829 100644 --- a/src/Ryujinx.Graphics.Shader/Ryujinx.Graphics.Shader.csproj +++ b/src/Ryujinx.Graphics.Shader/Ryujinx.Graphics.Shader.csproj @@ -15,4 +15,11 @@ + + + + + + + diff --git a/src/Ryujinx.Graphics.Shader/SamplerType.cs b/src/Ryujinx.Graphics.Shader/SamplerType.cs index a693495fa..18285cd70 100644 --- a/src/Ryujinx.Graphics.Shader/SamplerType.cs +++ b/src/Ryujinx.Graphics.Shader/SamplerType.cs @@ -155,5 +155,51 @@ namespace Ryujinx.Graphics.Shader return typeName; } + + public static string ToMslTextureType(this SamplerType type, AggregateType aggregateType, bool image = false) + { + string typeName; + + if ((type & SamplerType.Shadow) != 0) + { + typeName = (type & SamplerType.Mask) switch + { + SamplerType.Texture2D => "depth2d", + SamplerType.TextureCube => "depthcube", + _ => throw new ArgumentException($"Invalid shadow texture type \"{type}\"."), + }; + } + else + { + typeName = (type & SamplerType.Mask) switch + { + SamplerType.Texture1D => "texture1d", + SamplerType.TextureBuffer => "texture_buffer", + SamplerType.Texture2D => "texture2d", + SamplerType.Texture3D => "texture3d", + SamplerType.TextureCube => "texturecube", + _ => throw new ArgumentException($"Invalid texture type \"{type}\"."), + }; + } + + if ((type & SamplerType.Multisample) != 0) + { + typeName += "_ms"; + } + + if ((type & SamplerType.Array) != 0) + { + typeName += "_array"; + } + + var format = aggregateType switch + { + AggregateType.S32 => "int", + AggregateType.U32 => "uint", + _ => "float" + }; + + return $"{typeName}<{format}{(image ? ", access::read_write" : "")}>"; + } } } diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs index 2a3d65e75..b70def78c 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs @@ -7,7 +7,14 @@ namespace Ryujinx.Graphics.Shader.StructuredIr { MultiplyHighS32 = 1 << 2, MultiplyHighU32 = 1 << 3, + + FindLSB = 1 << 5, + FindMSBS32 = 1 << 6, + FindMSBU32 = 1 << 7, + SwizzleAdd = 1 << 10, FSI = 1 << 11, + + Precise = 1 << 13 } } diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs index 88053658d..a1aef7f97 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs @@ -18,9 +18,10 @@ namespace Ryujinx.Graphics.Shader.StructuredIr ShaderDefinitions definitions, ResourceManager resourceManager, TargetLanguage targetLanguage, + bool precise, bool debugMode) { - StructuredProgramContext context = new(attributeUsage, definitions, resourceManager, debugMode); + StructuredProgramContext context = new(attributeUsage, definitions, resourceManager, precise, debugMode); for (int funcIndex = 0; funcIndex < functions.Count; funcIndex++) { @@ -321,8 +322,9 @@ namespace Ryujinx.Graphics.Shader.StructuredIr } // Those instructions needs to be emulated by using helper functions, - // because they are NVIDIA specific. Those flags helps the backend to - // decide which helper functions are needed on the final generated code. + // because they are NVIDIA specific or because the target language has + // no direct equivalent. Those flags helps the backend to decide which + // helper functions are needed on the final generated code. switch (operation.Inst) { case Instruction.MultiplyHighS32: @@ -331,6 +333,15 @@ namespace Ryujinx.Graphics.Shader.StructuredIr case Instruction.MultiplyHighU32: context.Info.HelperFunctionsMask |= HelperFunctionsMask.MultiplyHighU32; break; + case Instruction.FindLSB: + context.Info.HelperFunctionsMask |= HelperFunctionsMask.FindLSB; + break; + case Instruction.FindMSBS32: + context.Info.HelperFunctionsMask |= HelperFunctionsMask.FindMSBS32; + break; + case Instruction.FindMSBU32: + context.Info.HelperFunctionsMask |= HelperFunctionsMask.FindMSBU32; + break; case Instruction.SwizzleAdd: context.Info.HelperFunctionsMask |= HelperFunctionsMask.SwizzleAdd; break; diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs index 045662a1e..c26086c72 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs @@ -36,9 +36,10 @@ namespace Ryujinx.Graphics.Shader.StructuredIr AttributeUsage attributeUsage, ShaderDefinitions definitions, ResourceManager resourceManager, + bool precise, bool debugMode) { - Info = new StructuredProgramInfo(); + Info = new StructuredProgramInfo(precise); Definitions = definitions; ResourceManager = resourceManager; diff --git a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs index ded2f2a89..585497ed3 100644 --- a/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs +++ b/src/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs @@ -10,11 +10,16 @@ namespace Ryujinx.Graphics.Shader.StructuredIr public HelperFunctionsMask HelperFunctionsMask { get; set; } - public StructuredProgramInfo() + public StructuredProgramInfo(bool precise) { Functions = new List(); IoDefinitions = new HashSet(); + + if (precise) + { + HelperFunctionsMask |= HelperFunctionsMask.Precise; + } } } } diff --git a/src/Ryujinx.Graphics.Shader/Translation/FeatureFlags.cs b/src/Ryujinx.Graphics.Shader/Translation/FeatureFlags.cs index 82a54db83..26c924e89 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/FeatureFlags.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/FeatureFlags.cs @@ -26,5 +26,6 @@ namespace Ryujinx.Graphics.Shader.Translation SharedMemory = 1 << 11, Store = 1 << 12, VtgAsCompute = 1 << 13, + Precise = 1 << 14, } } diff --git a/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs b/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs index 94691a5b4..83e4dc0ac 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/ResourceManager.cs @@ -43,6 +43,11 @@ namespace Ryujinx.Graphics.Shader.Translation private readonly Dictionary _usedTextures; private readonly Dictionary _usedImages; + private readonly List _vacConstantBuffers; + private readonly List _vacStorageBuffers; + private readonly List _vacTextures; + private readonly List _vacImages; + public int LocalMemoryId { get; private set; } public int SharedMemoryId { get; private set; } @@ -78,6 +83,11 @@ namespace Ryujinx.Graphics.Shader.Translation _usedTextures = new(); _usedImages = new(); + _vacConstantBuffers = new(); + _vacStorageBuffers = new(); + _vacTextures = new(); + _vacImages = new(); + Properties.AddOrUpdateConstantBuffer(new(BufferLayout.Std140, 0, SupportBuffer.Binding, "support_buffer", SupportBuffer.GetStructureType())); LocalMemoryId = -1; @@ -563,6 +573,75 @@ namespace Ryujinx.Graphics.Shader.Translation return descriptors.ToArray(); } + public ShaderProgramInfo GetVertexAsComputeInfo(bool isVertex = false) + { + var cbDescriptors = new BufferDescriptor[_vacConstantBuffers.Count]; + int cbDescriptorIndex = 0; + + foreach (BufferDefinition definition in _vacConstantBuffers) + { + cbDescriptors[cbDescriptorIndex++] = new BufferDescriptor(definition.Set, definition.Binding, 0, 0, 0, BufferUsageFlags.None); + } + + var sbDescriptors = new BufferDescriptor[_vacStorageBuffers.Count]; + int sbDescriptorIndex = 0; + + foreach (BufferDefinition definition in _vacStorageBuffers) + { + sbDescriptors[sbDescriptorIndex++] = new BufferDescriptor(definition.Set, definition.Binding, 0, 0, 0, BufferUsageFlags.Write); + } + + var tDescriptors = new TextureDescriptor[_vacTextures.Count]; + int tDescriptorIndex = 0; + + foreach (TextureDefinition definition in _vacTextures) + { + tDescriptors[tDescriptorIndex++] = new TextureDescriptor( + definition.Set, + definition.Binding, + definition.Type, + definition.Format, + 0, + 0, + definition.ArrayLength, + definition.Separate, + definition.Flags); + } + + var iDescriptors = new TextureDescriptor[_vacImages.Count]; + int iDescriptorIndex = 0; + + foreach (TextureDefinition definition in _vacImages) + { + iDescriptors[iDescriptorIndex++] = new TextureDescriptor( + definition.Set, + definition.Binding, + definition.Type, + definition.Format, + 0, + 0, + definition.ArrayLength, + definition.Separate, + definition.Flags); + } + + return new ShaderProgramInfo( + cbDescriptors, + sbDescriptors, + tDescriptors, + iDescriptors, + isVertex ? ShaderStage.Vertex : ShaderStage.Compute, + 0, + 0, + 0, + false, + false, + false, + false, + 0, + 0); + } + public bool TryGetCbufSlotAndHandleForTexture(int binding, out int cbufSlot, out int handle) { foreach ((TextureInfo info, TextureMeta meta) in _usedTextures) @@ -629,6 +708,30 @@ namespace Ryujinx.Graphics.Shader.Translation Properties.AddOrUpdateStorageBuffer(new(BufferLayout.Std430, setIndex, binding, name, type)); } + public void AddVertexAsComputeConstantBuffer(BufferDefinition definition) + { + _vacConstantBuffers.Add(definition); + Properties.AddOrUpdateConstantBuffer(definition); + } + + public void AddVertexAsComputeStorageBuffer(BufferDefinition definition) + { + _vacStorageBuffers.Add(definition); + Properties.AddOrUpdateStorageBuffer(definition); + } + + public void AddVertexAsComputeTexture(TextureDefinition definition) + { + _vacTextures.Add(definition); + Properties.AddOrUpdateTexture(definition); + } + + public void AddVertexAsComputeImage(TextureDefinition definition) + { + _vacImages.Add(definition); + Properties.AddOrUpdateImage(definition); + } + public static string GetShaderStagePrefix(ShaderStage stage) { uint index = (uint)stage; diff --git a/src/Ryujinx.Graphics.Shader/Translation/TargetApi.cs b/src/Ryujinx.Graphics.Shader/Translation/TargetApi.cs index 519600937..66ed3dd45 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/TargetApi.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/TargetApi.cs @@ -4,5 +4,6 @@ namespace Ryujinx.Graphics.Shader.Translation { OpenGL, Vulkan, + Metal } } diff --git a/src/Ryujinx.Graphics.Shader/Translation/TargetLanguage.cs b/src/Ryujinx.Graphics.Shader/Translation/TargetLanguage.cs index 863c7447b..9d58cb926 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/TargetLanguage.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/TargetLanguage.cs @@ -4,6 +4,6 @@ namespace Ryujinx.Graphics.Shader.Translation { Glsl, Spirv, - Arb, + Msl } } diff --git a/src/Ryujinx.Graphics.Shader/Translation/Transforms/ForcePreciseEnable.cs b/src/Ryujinx.Graphics.Shader/Translation/Transforms/ForcePreciseEnable.cs index 6b7e1410f..c774816a3 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Transforms/ForcePreciseEnable.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Transforms/ForcePreciseEnable.cs @@ -27,6 +27,8 @@ namespace Ryujinx.Graphics.Shader.Translation.Transforms addOp.Inst == (Instruction.FP32 | Instruction.Add) && addOp.GetSource(1).Type == OperandType.Constant) { + context.UsedFeatures |= FeatureFlags.Precise; + addOp.ForcePrecise = true; } diff --git a/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs b/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs index a579433f9..bec20bc2c 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/TranslatorContext.cs @@ -1,5 +1,6 @@ using Ryujinx.Graphics.Shader.CodeGen; using Ryujinx.Graphics.Shader.CodeGen.Glsl; +using Ryujinx.Graphics.Shader.CodeGen.Msl; using Ryujinx.Graphics.Shader.CodeGen.Spirv; using Ryujinx.Graphics.Shader.Decoders; using Ryujinx.Graphics.Shader.IntermediateRepresentation; @@ -331,6 +332,7 @@ namespace Ryujinx.Graphics.Shader.Translation definitions, resourceManager, Options.TargetLanguage, + usedFeatures.HasFlag(FeatureFlags.Precise), Options.Flags.HasFlag(TranslationFlags.DebugMode)); int geometryVerticesPerPrimitive = Definitions.OutputTopology switch @@ -373,6 +375,7 @@ namespace Ryujinx.Graphics.Shader.Translation { TargetLanguage.Glsl => new ShaderProgram(info, TargetLanguage.Glsl, GlslGenerator.Generate(sInfo, parameters)), TargetLanguage.Spirv => new ShaderProgram(info, TargetLanguage.Spirv, SpirvGenerator.Generate(sInfo, parameters)), + TargetLanguage.Msl => new ShaderProgram(info, TargetLanguage.Msl, MslGenerator.Generate(sInfo, parameters)), _ => throw new NotImplementedException(Options.TargetLanguage.ToString()), }; } @@ -392,7 +395,7 @@ namespace Ryujinx.Graphics.Shader.Translation { int binding = resourceManager.Reservations.GetTfeBufferStorageBufferBinding(i); BufferDefinition tfeDataBuffer = new(BufferLayout.Std430, 1, binding, $"tfe_data{i}", tfeDataStruct); - resourceManager.Properties.AddOrUpdateStorageBuffer(tfeDataBuffer); + resourceManager.AddVertexAsComputeStorageBuffer(tfeDataBuffer); } } @@ -400,7 +403,7 @@ namespace Ryujinx.Graphics.Shader.Translation { int vertexInfoCbBinding = resourceManager.Reservations.VertexInfoConstantBufferBinding; BufferDefinition vertexInfoBuffer = new(BufferLayout.Std140, 0, vertexInfoCbBinding, "vb_info", VertexInfoBuffer.GetStructureType()); - resourceManager.Properties.AddOrUpdateConstantBuffer(vertexInfoBuffer); + resourceManager.AddVertexAsComputeConstantBuffer(vertexInfoBuffer); StructureType vertexOutputStruct = new(new StructureField[] { @@ -409,13 +412,13 @@ namespace Ryujinx.Graphics.Shader.Translation int vertexOutputSbBinding = resourceManager.Reservations.VertexOutputStorageBufferBinding; BufferDefinition vertexOutputBuffer = new(BufferLayout.Std430, 1, vertexOutputSbBinding, "vertex_output", vertexOutputStruct); - resourceManager.Properties.AddOrUpdateStorageBuffer(vertexOutputBuffer); + resourceManager.AddVertexAsComputeStorageBuffer(vertexOutputBuffer); if (Stage == ShaderStage.Vertex) { SetBindingPair ibSetAndBinding = resourceManager.Reservations.GetIndexBufferTextureSetAndBinding(); TextureDefinition indexBuffer = new(ibSetAndBinding.SetIndex, ibSetAndBinding.Binding, "ib_data", SamplerType.TextureBuffer); - resourceManager.Properties.AddOrUpdateTexture(indexBuffer); + resourceManager.AddVertexAsComputeTexture(indexBuffer); int inputMap = _program.AttributeUsage.UsedInputAttributes; @@ -424,7 +427,7 @@ namespace Ryujinx.Graphics.Shader.Translation int location = BitOperations.TrailingZeroCount(inputMap); SetBindingPair setAndBinding = resourceManager.Reservations.GetVertexBufferTextureSetAndBinding(location); TextureDefinition vaBuffer = new(setAndBinding.SetIndex, setAndBinding.Binding, $"vb_data{location}", SamplerType.TextureBuffer); - resourceManager.Properties.AddOrUpdateTexture(vaBuffer); + resourceManager.AddVertexAsComputeTexture(vaBuffer); inputMap &= ~(1 << location); } @@ -433,11 +436,11 @@ namespace Ryujinx.Graphics.Shader.Translation { SetBindingPair trbSetAndBinding = resourceManager.Reservations.GetTopologyRemapBufferTextureSetAndBinding(); TextureDefinition remapBuffer = new(trbSetAndBinding.SetIndex, trbSetAndBinding.Binding, "trb_data", SamplerType.TextureBuffer); - resourceManager.Properties.AddOrUpdateTexture(remapBuffer); + resourceManager.AddVertexAsComputeTexture(remapBuffer); int geometryVbOutputSbBinding = resourceManager.Reservations.GeometryVertexOutputStorageBufferBinding; BufferDefinition geometryVbOutputBuffer = new(BufferLayout.Std430, 1, geometryVbOutputSbBinding, "geometry_vb_output", vertexOutputStruct); - resourceManager.Properties.AddOrUpdateStorageBuffer(geometryVbOutputBuffer); + resourceManager.AddVertexAsComputeStorageBuffer(geometryVbOutputBuffer); StructureType geometryIbOutputStruct = new(new StructureField[] { @@ -446,7 +449,7 @@ namespace Ryujinx.Graphics.Shader.Translation int geometryIbOutputSbBinding = resourceManager.Reservations.GeometryIndexOutputStorageBufferBinding; BufferDefinition geometryIbOutputBuffer = new(BufferLayout.Std430, 1, geometryIbOutputSbBinding, "geometry_ib_output", geometryIbOutputStruct); - resourceManager.Properties.AddOrUpdateStorageBuffer(geometryIbOutputBuffer); + resourceManager.AddVertexAsComputeStorageBuffer(geometryIbOutputBuffer); } resourceManager.SetVertexAsComputeLocalMemories(Definitions.Stage, Definitions.InputTopology); @@ -479,12 +482,17 @@ namespace Ryujinx.Graphics.Shader.Translation return new ResourceReservations(GpuAccessor, IsTransformFeedbackEmulated, vertexAsCompute: true, _vertexOutput, ioUsage); } + public ShaderProgramInfo GetVertexAsComputeInfo() + { + return CreateResourceManager(true).GetVertexAsComputeInfo(); + } + public void SetVertexOutputMapForGeometryAsCompute(TranslatorContext vertexContext) { _vertexOutput = vertexContext._program.GetIoUsage(); } - public ShaderProgram GenerateVertexPassthroughForCompute() + public (ShaderProgram, ShaderProgramInfo) GenerateVertexPassthroughForCompute() { var attributeUsage = new AttributeUsage(GpuAccessor); var resourceManager = new ResourceManager(ShaderStage.Vertex, GpuAccessor); @@ -496,7 +504,7 @@ namespace Ryujinx.Graphics.Shader.Translation if (Stage == ShaderStage.Vertex) { BufferDefinition vertexInfoBuffer = new(BufferLayout.Std140, 0, vertexInfoCbBinding, "vb_info", VertexInfoBuffer.GetStructureType()); - resourceManager.Properties.AddOrUpdateConstantBuffer(vertexInfoBuffer); + resourceManager.AddVertexAsComputeConstantBuffer(vertexInfoBuffer); } StructureType vertexInputStruct = new(new StructureField[] @@ -506,7 +514,7 @@ namespace Ryujinx.Graphics.Shader.Translation int vertexDataSbBinding = reservations.VertexOutputStorageBufferBinding; BufferDefinition vertexOutputBuffer = new(BufferLayout.Std430, 1, vertexDataSbBinding, "vb_input", vertexInputStruct); - resourceManager.Properties.AddOrUpdateStorageBuffer(vertexOutputBuffer); + resourceManager.AddVertexAsComputeStorageBuffer(vertexOutputBuffer); var context = new EmitterContext(); @@ -564,14 +572,14 @@ namespace Ryujinx.Graphics.Shader.Translation LastInVertexPipeline = true }; - return Generate( + return (Generate( new[] { function }, attributeUsage, definitions, definitions, resourceManager, FeatureFlags.None, - 0); + 0), resourceManager.GetVertexAsComputeInfo(isVertex: true)); } public ShaderProgram GenerateGeometryPassthrough() diff --git a/src/Ryujinx.Headless.SDL2/Metal/MetalWindow.cs b/src/Ryujinx.Headless.SDL2/Metal/MetalWindow.cs new file mode 100644 index 000000000..5140d639b --- /dev/null +++ b/src/Ryujinx.Headless.SDL2/Metal/MetalWindow.cs @@ -0,0 +1,47 @@ +using Ryujinx.Common.Configuration; +using Ryujinx.Input.HLE; +using Ryujinx.SDL2.Common; +using SharpMetal.QuartzCore; +using System.Runtime.Versioning; +using static SDL2.SDL; + +namespace Ryujinx.Headless.SDL2.Metal +{ + [SupportedOSPlatform("macos")] + class MetalWindow : WindowBase + { + private CAMetalLayer _caMetalLayer; + + public CAMetalLayer GetLayer() + { + return _caMetalLayer; + } + + public MetalWindow( + InputManager inputManager, + GraphicsDebugLevel glLogLevel, + AspectRatio aspectRatio, + bool enableMouse, + HideCursorMode hideCursorMode, + bool ignoreControllerApplet) + : base(inputManager, glLogLevel, aspectRatio, enableMouse, hideCursorMode, ignoreControllerApplet) { } + + public override SDL_WindowFlags GetWindowFlags() => SDL_WindowFlags.SDL_WINDOW_METAL; + + protected override void InitializeWindowRenderer() + { + void CreateLayer() + { + _caMetalLayer = new CAMetalLayer(SDL_Metal_GetLayer(SDL_Metal_CreateView(WindowHandle))); + } + + SDL2Driver.MainThreadDispatcher?.Invoke(CreateLayer); + } + + protected override void InitializeRenderer() { } + + protected override void FinalizeWindowRenderer() { } + + protected override void SwapBuffers() { } + } +} diff --git a/src/Ryujinx.Headless.SDL2/Program.cs b/src/Ryujinx.Headless.SDL2/Program.cs index 12158176a..ea789095e 100644 --- a/src/Ryujinx.Headless.SDL2/Program.cs +++ b/src/Ryujinx.Headless.SDL2/Program.cs @@ -18,9 +18,11 @@ using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; using Ryujinx.Graphics.Gpu; using Ryujinx.Graphics.Gpu.Shader; +using Ryujinx.Graphics.Metal; using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.Graphics.Vulkan.MoltenVK; +using Ryujinx.Headless.SDL2.Metal; using Ryujinx.Headless.SDL2.OpenGL; using Ryujinx.Headless.SDL2.Vulkan; using Ryujinx.HLE; @@ -510,9 +512,14 @@ namespace Ryujinx.Headless.SDL2 private static WindowBase CreateWindow(Options options) { - return options.GraphicsBackend == GraphicsBackend.Vulkan - ? new VulkanWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode, options.IgnoreControllerApplet) - : new OpenGLWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode, options.IgnoreControllerApplet); + return options.GraphicsBackend switch + { + GraphicsBackend.Vulkan => new VulkanWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode, options.IgnoreControllerApplet), + GraphicsBackend.Metal => OperatingSystem.IsMacOS() ? + new MetalWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableKeyboard, options.HideCursorMode, options.IgnoreControllerApplet) : + throw new Exception("Attempted to use Metal renderer on non-macOS platform!"), + _ => new OpenGLWindow(_inputManager, options.LoggingGraphicsDebugLevel, options.AspectRatio, options.EnableMouse, options.HideCursorMode, options.IgnoreControllerApplet) + }; } private static IRenderer CreateRenderer(Options options, WindowBase window) @@ -544,6 +551,11 @@ namespace Ryujinx.Headless.SDL2 preferredGpuId); } + if (options.GraphicsBackend == GraphicsBackend.Metal && window is MetalWindow metalWindow && OperatingSystem.IsMacOS()) + { + return new MetalRenderer(metalWindow.GetLayer); + } + return new OpenGLRenderer(); } diff --git a/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj b/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj index fe535e6d5..d39f2b481 100644 --- a/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj +++ b/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj @@ -29,6 +29,7 @@ + diff --git a/src/Ryujinx.ShaderTools/Program.cs b/src/Ryujinx.ShaderTools/Program.cs index a84d7b466..564960c6f 100644 --- a/src/Ryujinx.ShaderTools/Program.cs +++ b/src/Ryujinx.ShaderTools/Program.cs @@ -116,7 +116,7 @@ namespace Ryujinx.ShaderTools if (options.VertexPassthrough) { - program = translatorContext.GenerateVertexPassthroughForCompute(); + (program, _) = translatorContext.GenerateVertexPassthroughForCompute(); } else { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs index 04ddd442f..90bdc3409 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs @@ -305,14 +305,15 @@ namespace Ryujinx.UI.Common.Configuration private static GraphicsBackend DefaultGraphicsBackend() { - // Any system running macOS or returning any amount of valid Vulkan devices should default to Vulkan. - // Checks for if the Vulkan version and featureset is compatible should be performed within VulkanRenderer. - if (OperatingSystem.IsMacOS() || VulkanRenderer.GetPhysicalDevices().Length > 0) - { - return GraphicsBackend.Vulkan; - } + // Any system running macOS should default to auto, so it uses Vulkan everywhere and Metal in games where it works well. + if (OperatingSystem.IsMacOS()) + return GraphicsBackend.Auto; - return GraphicsBackend.OpenGl; - } - } + // Any system returning any amount of valid Vulkan devices should default to Vulkan. + // Checks for if the Vulkan version and featureset is compatible should be performed within VulkanRenderer. + return VulkanRenderer.GetPhysicalDevices().Length > 0 + ? GraphicsBackend.Vulkan + : GraphicsBackend.OpenGl; } + } +} diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 5872b278f..abcc357a6 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -3,6 +3,7 @@ using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input; using Avalonia.Threading; +using Gommon; using LibHac.Common; using LibHac.Ns; using LibHac.Tools.FsSystem; @@ -28,6 +29,7 @@ using Ryujinx.Common.Utilities; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; using Ryujinx.Graphics.Gpu; +using Ryujinx.Graphics.Metal; using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; @@ -141,6 +143,23 @@ namespace Ryujinx.Ava public ulong ApplicationId { get; private set; } public bool ScreenshotRequested { get; set; } + public bool ShouldInitMetal + { + get + { + return OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64 && + ( + ( + ( + ConfigurationState.Instance.Graphics.GraphicsBackend.Value == GraphicsBackend.Auto && + RendererHost.KnownGreatMetalTitles.ContainsIgnoreCase(ApplicationId.ToString("X16")) + ) || + ConfigurationState.Instance.Graphics.GraphicsBackend.Value == GraphicsBackend.Metal + ) + ); + } + } + public AppHost( RendererHost renderer, InputManager inputManager, @@ -893,12 +912,27 @@ namespace Ryujinx.Ava VirtualFileSystem.ReloadKeySet(); // Initialize Renderer. - IRenderer renderer = ConfigurationState.Instance.Graphics.GraphicsBackend.Value == GraphicsBackend.OpenGl - ? new OpenGLRenderer() - : VulkanRenderer.Create( + IRenderer renderer; + GraphicsBackend backend = ConfigurationState.Instance.Graphics.GraphicsBackend; + + if (ShouldInitMetal) + { +#pragma warning disable CA1416 This call site is reachable on all platforms + // The condition does a check for Mac, on top of checking if it's an ARM Mac. This isn't a problem. + renderer = new MetalRenderer((RendererHost.EmbeddedWindow as EmbeddedWindowMetal)!.CreateSurface); +#pragma warning restore CA1416 + } + else if (backend == GraphicsBackend.Vulkan || (backend == GraphicsBackend.Auto && !ShouldInitMetal)) + { + renderer = VulkanRenderer.Create( ConfigurationState.Instance.Graphics.PreferredGpu, (RendererHost.EmbeddedWindow as EmbeddedWindowVulkan)!.CreateSurface, VulkanHelper.GetRequiredInstanceExtensions); + } + else + { + renderer = new OpenGLRenderer(); + } BackendThreading threadingMode = ConfigurationState.Instance.Graphics.BackendThreading; @@ -1111,10 +1145,11 @@ namespace Ryujinx.Ava public void InitStatus() { - _viewModel.BackendText = ConfigurationState.Instance.Graphics.GraphicsBackend.Value switch + _viewModel.BackendText = RendererHost.Backend switch { GraphicsBackend.Vulkan => "Vulkan", GraphicsBackend.OpenGl => "OpenGL", + GraphicsBackend.Metal => "Metal", _ => throw new NotImplementedException() }; diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 2e86df0aa..cdf43f474 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -19677,6 +19677,54 @@ "zh_TW": "選擇模擬器將使用的圖形後端。\n\n只要驅動程式是最新的,Vulkan 對所有現代顯示卡來說都更好用。Vulkan 還能在所有 GPU 廠商上實現更快的著色器編譯 (減少卡頓)。\n\nOpenGL 在舊式 Nvidia GPU、Linux 上的舊式 AMD GPU 或 VRAM 較低的 GPU 上可能會取得更好的效果,不過著色器編譯的卡頓會更嚴重。\n\n如果不確定,請設定為 Vulkan。如果您的 GPU 使用最新的圖形驅動程式也不支援 Vulkan,請設定為 OpenGL。" } }, + { + "ID": "SettingsTabGraphicsBackendAuto", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Auto", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "SettingsTabGraphicsBackendAutoTooltip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Uses Vulkan.\nOn an ARM Mac, and when playing a game that runs well under it, uses the Metal backend.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "SettingsEnableTextureRecompression", "Translations": { diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 05fd66b90..3c24b8e27 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -198,6 +198,7 @@ namespace Ryujinx.Ava { "opengl" => GraphicsBackend.OpenGl, "vulkan" => GraphicsBackend.Vulkan, + "metal" => GraphicsBackend.Metal, _ => ConfigurationState.Instance.Graphics.GraphicsBackend }; diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index ce75b1d87..d5bad2ee6 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -66,6 +66,7 @@ + diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs new file mode 100644 index 000000000..eaf6f7bdf --- /dev/null +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindowMetal.cs @@ -0,0 +1,20 @@ +using SharpMetal.QuartzCore; +using System; + +namespace Ryujinx.Ava.UI.Renderer +{ + public class EmbeddedWindowMetal : EmbeddedWindow + { + public CAMetalLayer CreateSurface() + { + if (OperatingSystem.IsMacOS()) + { + return new CAMetalLayer(MetalLayer); + } + else + { + throw new NotSupportedException(); + } + } + } +} diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs index 4bf10d0d7..d191a11ed 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs @@ -1,8 +1,10 @@ using Avalonia; using Avalonia.Controls; +using Gommon; using Ryujinx.Common.Configuration; using Ryujinx.UI.Common.Configuration; using System; +using System.Runtime.InteropServices; namespace Ryujinx.Ava.UI.Renderer { @@ -17,18 +19,64 @@ namespace Ryujinx.Ava.UI.Renderer { InitializeComponent(); - if (ConfigurationState.Instance.Graphics.GraphicsBackend.Value == GraphicsBackend.OpenGl) + EmbeddedWindow = ConfigurationState.Instance.Graphics.GraphicsBackend.Value switch { - EmbeddedWindow = new EmbeddedWindowOpenGL(); - } - else - { - EmbeddedWindow = new EmbeddedWindowVulkan(); - } + GraphicsBackend.OpenGl => new EmbeddedWindowOpenGL(), + GraphicsBackend.Metal => new EmbeddedWindowMetal(), + GraphicsBackend.Vulkan or GraphicsBackend.Auto => new EmbeddedWindowVulkan(), + _ => throw new NotSupportedException() + }; Initialize(); } + public static readonly string[] KnownGreatMetalTitles = + [ + "01006A800016E000", // Smash Ultimate + "0100000000010000", // Super Mario Odyessy + "01008C0016544000", // Sea of Stars + "01005CA01580E000", // Persona 5 + "010028600EBDA000", // Mario 3D World + ]; + + public GraphicsBackend Backend => + EmbeddedWindow switch + { + EmbeddedWindowVulkan => GraphicsBackend.Vulkan, + EmbeddedWindowOpenGL => GraphicsBackend.OpenGl, + EmbeddedWindowMetal => GraphicsBackend.Metal, + _ => throw new NotImplementedException() + }; + + public RendererHost(string titleId) + { + InitializeComponent(); + + switch (ConfigurationState.Instance.Graphics.GraphicsBackend.Value) + { + case GraphicsBackend.Auto: + EmbeddedWindow = + OperatingSystem.IsMacOS() && + RuntimeInformation.ProcessArchitecture == Architecture.Arm64 && + KnownGreatMetalTitles.ContainsIgnoreCase(titleId) + ? new EmbeddedWindowMetal() + : new EmbeddedWindowVulkan(); + break; + case GraphicsBackend.OpenGl: + EmbeddedWindow = new EmbeddedWindowOpenGL(); + break; + case GraphicsBackend.Metal: + EmbeddedWindow = new EmbeddedWindowMetal(); + break; + case GraphicsBackend.Vulkan: + EmbeddedWindow = new EmbeddedWindowVulkan(); + break; + } + + Initialize(); + } + + private void Initialize() { EmbeddedWindow.WindowCreated += CurrentWindow_WindowCreated; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index ae373c267..f7cd83ed6 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -1938,7 +1938,7 @@ namespace Ryujinx.Ava.UI.ViewModels PrepareLoadScreen(); - RendererHostControl = new RendererHost(); + RendererHostControl = new RendererHost(application.Id.ToString("X16")); AppHost = new AppHost( RendererHostControl, diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 0824e3f86..85ba203f9 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -122,7 +122,7 @@ namespace Ryujinx.Ava.UI.ViewModels public bool IsOpenGLAvailable => !OperatingSystem.IsMacOS(); - public bool IsHypervisorAvailable => OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64; + public bool IsAppleSiliconMac => OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64; public bool GameDirectoryChanged { @@ -252,7 +252,8 @@ namespace Ryujinx.Ava.UI.ViewModels public bool IsCustomResolutionScaleActive => _resolutionScale == 4; public bool IsScalingFilterActive => _scalingFilter == (int)Ryujinx.Common.Configuration.ScalingFilter.Fsr; - public bool IsVulkanSelected => GraphicsBackendIndex == 0; + public bool IsVulkanSelected => + GraphicsBackendIndex == 1 || (GraphicsBackendIndex == 0 && !OperatingSystem.IsMacOS()); public bool UseHypervisor { get; set; } public bool DisableP2P { get; set; } @@ -432,7 +433,7 @@ namespace Ryujinx.Ava.UI.ViewModels if (devices.Length == 0) { IsVulkanAvailable = false; - GraphicsBackendIndex = 1; + GraphicsBackendIndex = 2; } else { diff --git a/src/Ryujinx/UI/Views/Settings/SettingsCPUView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsCPUView.axaml index c7f03a45d..83f908a9c 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsCPUView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsCPUView.axaml @@ -69,7 +69,7 @@ diff --git a/src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml index 219efcef8..a2559f393 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsGraphicsView.axaml @@ -33,16 +33,24 @@ ToolTip.Tip="{ext:Locale SettingsTabGraphicsBackendTooltip}" Text="{ext:Locale SettingsTabGraphicsBackend}" Width="250" /> - + + + + + + + diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs b/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs index d8c88bed8..b004d9fba 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs @@ -56,34 +56,34 @@ namespace Ryujinx.Ava.UI.Windows { switch (navItem.Tag.ToString()) { - case "UiPage": + case nameof(UiPage): UiPage.ViewModel = ViewModel; NavPanel.Content = UiPage; break; - case "InputPage": + case nameof(InputPage): NavPanel.Content = InputPage; break; - case "HotkeysPage": + case nameof(HotkeysPage): NavPanel.Content = HotkeysPage; break; - case "SystemPage": + case nameof(SystemPage): SystemPage.ViewModel = ViewModel; NavPanel.Content = SystemPage; break; - case "CpuPage": + case nameof(CpuPage): NavPanel.Content = CpuPage; break; - case "GraphicsPage": + case nameof(GraphicsPage): NavPanel.Content = GraphicsPage; break; - case "AudioPage": + case nameof(AudioPage): NavPanel.Content = AudioPage; break; - case "NetworkPage": + case nameof(NetworkPage): NetworkPage.ViewModel = ViewModel; NavPanel.Content = NetworkPage; break; - case "LoggingPage": + case nameof(LoggingPage): NavPanel.Content = LoggingPage; break; default: -- 2.47.1 From 3cb996bf5c56b53eff6c4c43b2d5a8492863c90b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 01:15:23 -0600 Subject: [PATCH 161/722] UI: Log backend used when Auto is selected --- src/Ryujinx/UI/Renderer/RendererHost.axaml.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs index d191a11ed..072c0ba4d 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs @@ -2,6 +2,7 @@ using Avalonia; using Avalonia.Controls; using Gommon; using Ryujinx.Common.Configuration; +using Ryujinx.Common.Logging; using Ryujinx.UI.Common.Configuration; using System; using System.Runtime.InteropServices; @@ -61,6 +62,11 @@ namespace Ryujinx.Ava.UI.Renderer KnownGreatMetalTitles.ContainsIgnoreCase(titleId) ? new EmbeddedWindowMetal() : new EmbeddedWindowVulkan(); + + string backendText = EmbeddedWindow is EmbeddedWindowVulkan ? "Vulkan" : "Metal"; + + Logger.Info?.Print(LogClass.Gpu, $"Auto: Using {backendText}"); + break; case GraphicsBackend.OpenGl: EmbeddedWindow = new EmbeddedWindowOpenGL(); -- 2.47.1 From 2f540dc88cff3709f7e46ad6224dddf6ce9e0056 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 01:23:01 -0600 Subject: [PATCH 162/722] infra: chore: fix/silence compile warnings --- src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs | 1 + src/Ryujinx.Graphics.Metal/EncoderStateManager.cs | 1 + src/Ryujinx.Graphics.Metal/MetalRenderer.cs | 5 ++++- .../CodeGen/Msl/Instructions/InstGen.cs | 1 + src/Ryujinx/AppHost.cs | 2 +- 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs index 4473e8cb3..0924c60f8 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs @@ -838,6 +838,7 @@ namespace Ryujinx.Graphics.Gpu.Shader TargetApi.OpenGL => TargetLanguage.Glsl, TargetApi.Vulkan => GraphicsConfig.EnableSpirvCompilationOnVulkan ? TargetLanguage.Spirv : TargetLanguage.Glsl, TargetApi.Metal => TargetLanguage.Msl, + _ => throw new NotImplementedException() }; return new TranslationOptions(lang, api, flags); diff --git a/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs b/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs index 0093ac148..169e0142d 100644 --- a/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs +++ b/src/Ryujinx.Graphics.Metal/EncoderStateManager.cs @@ -1767,6 +1767,7 @@ namespace Ryujinx.Graphics.Metal Constants.StorageBuffersSetIndex => Constants.StorageBuffersIndex, Constants.TexturesSetIndex => Constants.TexturesIndex, Constants.ImagesSetIndex => Constants.ImagesIndex, + _ => throw new NotImplementedException() }; } diff --git a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs index 935a5b3b1..7afd30886 100644 --- a/src/Ryujinx.Graphics.Metal/MetalRenderer.cs +++ b/src/Ryujinx.Graphics.Metal/MetalRenderer.cs @@ -21,9 +21,12 @@ namespace Ryujinx.Graphics.Metal private Pipeline _pipeline; private Window _window; - public uint ProgramCount { get; set; } = 0; + public uint ProgramCount { get; set; } +#pragma warning disable CS0067 // The event is never used public event EventHandler ScreenCaptured; +#pragma warning restore CS0067 + public bool PreferThreading => true; public IPipeline Pipeline => _pipeline; public IWindow Window => _window; diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs index 715688987..57177e402 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGen.cs @@ -125,6 +125,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions Instruction.Add => "PreciseFAdd", Instruction.Subtract => "PreciseFSub", Instruction.Multiply => "PreciseFMul", + _ => throw new NotImplementedException() }; return $"{func}({expr[0]}, {expr[1]})"; diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index abcc357a6..86b5eafa1 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -917,7 +917,7 @@ namespace Ryujinx.Ava if (ShouldInitMetal) { -#pragma warning disable CA1416 This call site is reachable on all platforms +#pragma warning disable CA1416 // This call site is reachable on all platforms // The condition does a check for Mac, on top of checking if it's an ARM Mac. This isn't a problem. renderer = new MetalRenderer((RendererHost.EmbeddedWindow as EmbeddedWindowMetal)!.CreateSurface); #pragma warning restore CA1416 -- 2.47.1 From ff667a5c84240985e1d5d9a726a9f8d603299763 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 01:35:27 -0600 Subject: [PATCH 163/722] chore: Fix .ctor message source --- src/Ryujinx/UI/Renderer/RendererHost.axaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs index 072c0ba4d..7bc7e9160 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs @@ -65,7 +65,7 @@ namespace Ryujinx.Ava.UI.Renderer string backendText = EmbeddedWindow is EmbeddedWindowVulkan ? "Vulkan" : "Metal"; - Logger.Info?.Print(LogClass.Gpu, $"Auto: Using {backendText}"); + Logger.Info?.PrintMsg(LogClass.Gpu, $"Auto: Using {backendText}"); break; case GraphicsBackend.OpenGl: -- 2.47.1 From b05eab21a2707371a2608c71faa60171a1e93789 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 01:40:29 -0600 Subject: [PATCH 164/722] misc: always log backend when creating embeddedwindow --- src/Ryujinx/UI/Renderer/RendererHost.axaml.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs index 7bc7e9160..c66b266c0 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs @@ -62,11 +62,6 @@ namespace Ryujinx.Ava.UI.Renderer KnownGreatMetalTitles.ContainsIgnoreCase(titleId) ? new EmbeddedWindowMetal() : new EmbeddedWindowVulkan(); - - string backendText = EmbeddedWindow is EmbeddedWindowVulkan ? "Vulkan" : "Metal"; - - Logger.Info?.PrintMsg(LogClass.Gpu, $"Auto: Using {backendText}"); - break; case GraphicsBackend.OpenGl: EmbeddedWindow = new EmbeddedWindowOpenGL(); @@ -78,6 +73,16 @@ namespace Ryujinx.Ava.UI.Renderer EmbeddedWindow = new EmbeddedWindowVulkan(); break; } + + string backendText = EmbeddedWindow switch + { + EmbeddedWindowVulkan => "Vulkan", + EmbeddedWindowOpenGL => "OpenGL", + EmbeddedWindowMetal => "Metal", + _ => throw new NotImplementedException() + }; + + Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend ({ConfigurationState.Instance.Graphics.GraphicsBackend.Value}): {backendText}"); Initialize(); } -- 2.47.1 From 4d7350fc6e512f22d80261b5014fd759d3e5ce74 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 13:23:43 -0600 Subject: [PATCH 165/722] UI: Copy Title ID by clicking on it. --- src/Ryujinx/App.axaml.cs | 3 +++ .../UI/Controls/ApplicationListView.axaml | 20 ++++++++++++---- .../UI/Controls/ApplicationListView.axaml.cs | 23 +++++++++++++++++++ src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 3 +++ 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx/App.axaml.cs b/src/Ryujinx/App.axaml.cs index 15ada201c..9c1170d08 100644 --- a/src/Ryujinx/App.axaml.cs +++ b/src/Ryujinx/App.axaml.cs @@ -32,6 +32,9 @@ namespace Ryujinx.Ava .ApplicationLifetime.Cast() .MainWindow.Cast(); + public static IClassicDesktopStyleApplicationLifetime DesktopLifetime => Current! + .ApplicationLifetime.Cast(); + public static void SetTaskbarProgress(TaskBarProgressBarState state) => MainWindow.PlatformFeatures.SetTaskBarProgressBarState(state); public static void SetTaskbarProgressValue(ulong current, ulong total) => MainWindow.PlatformFeatures.SetTaskBarProgressBarValue(current, total); public static void SetTaskbarProgressValue(long current, long total) => SetTaskbarProgressValue(Convert.ToUInt64(current), Convert.ToUInt64(total)); diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml b/src/Ryujinx/UI/Controls/ApplicationListView.axaml index 8a72ebfbf..90b657ee0 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml @@ -101,11 +101,21 @@ VerticalAlignment="Top" Orientation="Vertical" Spacing="5"> - + it.IdString == idText.Text); + if (appData is null) + return; + + await clipboard.SetTextAsync(appData.IdString); + + NotificationHelper.Show("Copied Title ID", $"{appData.Name} ({appData.IdString})", NotificationType.Information); + } + } } } diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index c433d7fdb..88e82c89e 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -98,6 +98,9 @@ namespace Ryujinx.Ava.UI.Windows StatusBarHeight = StatusBarView.StatusBar.MinHeight; MenuBarHeight = MenuBar.MinHeight; + ApplicationList.DataContext = DataContext; + ApplicationGrid.DataContext = DataContext; + SetWindowSizePosition(); if (Program.PreviewerDetached) -- 2.47.1 From 16a60fdf123c54e5f98d887e8ceb5352c3c5b18f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 13:39:48 -0600 Subject: [PATCH 166/722] UI: Rename App to RyujinxApp Add more NotificationHelper methods Simplify ID copy logic --- src/Ryujinx/Common/ApplicationHelper.cs | 9 ++-- src/Ryujinx/Program.cs | 6 +-- src/Ryujinx/{App.axaml => RyujinxApp.axaml} | 2 +- .../{App.axaml.cs => RyujinxApp.axaml.cs} | 12 +++-- .../UI/Controls/ApplicationListView.axaml.cs | 20 +++++---- src/Ryujinx/UI/Helpers/NotificationHelper.cs | 45 +++++++++++++++++-- .../UI/ViewModels/AboutWindowViewModel.cs | 4 +- .../UI/ViewModels/MainWindowViewModel.cs | 2 +- src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs | 4 +- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 4 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 4 +- .../UI/Windows/SettingsWindow.axaml.cs | 2 +- src/Ryujinx/Updater.cs | 8 ++-- 13 files changed, 82 insertions(+), 40 deletions(-) rename src/Ryujinx/{App.axaml => RyujinxApp.axaml} (94%) rename src/Ryujinx/{App.axaml.cs => RyujinxApp.axaml.cs} (94%) diff --git a/src/Ryujinx/Common/ApplicationHelper.cs b/src/Ryujinx/Common/ApplicationHelper.cs index db5961347..1c6b53dee 100644 --- a/src/Ryujinx/Common/ApplicationHelper.cs +++ b/src/Ryujinx/Common/ApplicationHelper.cs @@ -146,7 +146,7 @@ namespace Ryujinx.Ava.Common var cancellationToken = new CancellationTokenSource(); UpdateWaitWindow waitingDialog = new( - App.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), + RyujinxApp.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogNcaExtractionMessage, ncaSectionType, Path.GetFileName(titleFilePath)), cancellationToken); @@ -268,10 +268,9 @@ namespace Ryujinx.Ava.Common { Dispatcher.UIThread.Post(waitingDialog.Close); - NotificationHelper.Show( - App.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), - $"{titleName}\n\n{LocaleManager.Instance[LocaleKeys.DialogNcaExtractionSuccessMessage]}", - NotificationType.Information); + NotificationHelper.ShowInformation( + RyujinxApp.FormatTitle(LocaleKeys.DialogNcaExtractionTitle), + $"{titleName}\n\n{LocaleManager.Instance[LocaleKeys.DialogNcaExtractionSuccessMessage]}"); } } diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 3c24b8e27..2ec60ac70 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -65,7 +65,7 @@ namespace Ryujinx.Ava } public static AppBuilder BuildAvaloniaApp() => - AppBuilder.Configure() + AppBuilder.Configure() .UsePlatformDetect() .With(new X11PlatformOptions { @@ -100,7 +100,7 @@ namespace Ryujinx.Ava // Delete backup files after updating. Task.Run(Updater.CleanupUpdate); - Console.Title = $"{App.FullAppName} Console {Version}"; + Console.Title = $"{RyujinxApp.FullAppName} Console {Version}"; // Hook unhandled exception and process exit events. AppDomain.CurrentDomain.UnhandledException += (sender, e) @@ -225,7 +225,7 @@ namespace Ryujinx.Ava private static void PrintSystemInfo() { - Logger.Notice.Print(LogClass.Application, $"{App.FullAppName} Version: {Version}"); + Logger.Notice.Print(LogClass.Application, $"{RyujinxApp.FullAppName} Version: {Version}"); SystemInfo.Gather().Print(); var enabledLogLevels = Logger.GetEnabledLevels().ToArray(); diff --git a/src/Ryujinx/App.axaml b/src/Ryujinx/RyujinxApp.axaml similarity index 94% rename from src/Ryujinx/App.axaml rename to src/Ryujinx/RyujinxApp.axaml index 5c96f97f2..e07d7ff26 100644 --- a/src/Ryujinx/App.axaml +++ b/src/Ryujinx/RyujinxApp.axaml @@ -1,5 +1,5 @@ diff --git a/src/Ryujinx/App.axaml.cs b/src/Ryujinx/RyujinxApp.axaml.cs similarity index 94% rename from src/Ryujinx/App.axaml.cs rename to src/Ryujinx/RyujinxApp.axaml.cs index 9c1170d08..bbef20aa0 100644 --- a/src/Ryujinx/App.axaml.cs +++ b/src/Ryujinx/RyujinxApp.axaml.cs @@ -1,5 +1,6 @@ using Avalonia; using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Input.Platform; using Avalonia.Markup.Xaml; using Avalonia.Platform; using Avalonia.Styling; @@ -19,7 +20,7 @@ using System.Diagnostics; namespace Ryujinx.Ava { - public class App : Application + public class RyujinxApp : Application { internal static string FormatTitle(LocaleKeys? windowTitleKey = null) => windowTitleKey is null @@ -32,8 +33,11 @@ namespace Ryujinx.Ava .ApplicationLifetime.Cast() .MainWindow.Cast(); - public static IClassicDesktopStyleApplicationLifetime DesktopLifetime => Current! - .ApplicationLifetime.Cast(); + public static bool IsClipboardAvailable(out IClipboard clipboard) + { + clipboard = MainWindow.Clipboard; + return clipboard != null; + } public static void SetTaskbarProgress(TaskBarProgressBarState state) => MainWindow.PlatformFeatures.SetTaskBarProgressBarState(state); public static void SetTaskbarProgressValue(ulong current, ulong total) => MainWindow.PlatformFeatures.SetTaskBarProgressBarValue(current, total); @@ -135,7 +139,7 @@ namespace Ryujinx.Ava }; public static ThemeVariant DetectSystemTheme() => - Current is App { PlatformSettings: not null } app + Current is RyujinxApp { PlatformSettings: not null } app ? ConvertThemeVariant(app.PlatformSettings.GetColorValues().ThemeVariant) : ThemeVariant.Default; } diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs index 6cdff3463..5b0730d5a 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs @@ -43,17 +43,19 @@ namespace Ryujinx.Ava.UI.Controls if (sender is not Button { Content: TextBlock idText }) return; + + if (!RyujinxApp.IsClipboardAvailable(out var clipboard)) + return; - if (App.MainWindow.Clipboard is { } clipboard) - { - var appData = mwvm.Applications.FirstOrDefault(it => it.IdString == idText.Text); - if (appData is null) - return; + var appData = mwvm.Applications.FirstOrDefault(it => it.IdString == idText.Text); + if (appData is null) + return; + + await clipboard.SetTextAsync(appData.IdString); - await clipboard.SetTextAsync(appData.IdString); - - NotificationHelper.Show("Copied Title ID", $"{appData.Name} ({appData.IdString})", NotificationType.Information); - } + NotificationHelper.ShowInformation( + "Copied Title ID", + $"{appData.Name} ({appData.IdString})"); } } } diff --git a/src/Ryujinx/UI/Helpers/NotificationHelper.cs b/src/Ryujinx/UI/Helpers/NotificationHelper.cs index 656a8b52f..74029a4b1 100644 --- a/src/Ryujinx/UI/Helpers/NotificationHelper.cs +++ b/src/Ryujinx/UI/Helpers/NotificationHelper.cs @@ -62,9 +62,46 @@ namespace Ryujinx.Ava.UI.Helpers _notifications.Add(new Notification(title, text, type, delay, onClick, onClose)); } - public static void ShowError(string message) - { - Show(LocaleManager.Instance[LocaleKeys.DialogErrorTitle], $"{LocaleManager.Instance[LocaleKeys.DialogErrorMessage]}\n\n{message}", NotificationType.Error); - } + public static void ShowError(string message) => + ShowError( + LocaleManager.Instance[LocaleKeys.DialogErrorTitle], + $"{LocaleManager.Instance[LocaleKeys.DialogErrorMessage]}\n\n{message}" + ); + + public static void ShowInformation(string title, string text, bool waitingExit = false, Action onClick = null, Action onClose = null) => + Show( + title, + text, + NotificationType.Information, + waitingExit, + onClick, + onClose); + + public static void ShowSuccess(string title, string text, bool waitingExit = false, Action onClick = null, Action onClose = null) => + Show( + title, + text, + NotificationType.Success, + waitingExit, + onClick, + onClose); + + public static void ShowWarning(string title, string text, bool waitingExit = false, Action onClick = null, Action onClose = null) => + Show( + title, + text, + NotificationType.Warning, + waitingExit, + onClick, + onClose); + + public static void ShowError(string title, string text, bool waitingExit = false, Action onClick = null, Action onClose = null) => + Show( + title, + text, + NotificationType.Error, + waitingExit, + onClick, + onClose); } } diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index 23d0f963c..607bff792 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -51,7 +51,7 @@ namespace Ryujinx.Ava.UI.ViewModels public AboutWindowViewModel() { - Version = App.FullAppName + "\n" + Program.Version; + Version = RyujinxApp.FullAppName + "\n" + Program.Version; UpdateLogoTheme(ConfigurationState.Instance.UI.BaseStyle.Value); ThemeManager.ThemeChanged += ThemeManager_ThemeChanged; @@ -64,7 +64,7 @@ namespace Ryujinx.Ava.UI.ViewModels private void UpdateLogoTheme(string theme) { - bool isDarkTheme = theme == "Dark" || (theme == "Auto" && App.DetectSystemTheme() == ThemeVariant.Dark); + bool isDarkTheme = theme == "Dark" || (theme == "Auto" && RyujinxApp.DetectSystemTheme() == ThemeVariant.Dark); string basePath = "resm:Ryujinx.UI.Common.Resources."; string themeSuffix = isDarkTheme ? "Dark.png" : "Light.png"; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index f7cd83ed6..3ff05785a 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -2051,7 +2051,7 @@ namespace Ryujinx.Ava.UI.ViewModels Dispatcher.UIThread.InvokeAsync(() => { - Title = App.FormatTitle(); + Title = RyujinxApp.FormatTitle(); }); } diff --git a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs index 6182e6b50..9a940c938 100644 --- a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Ava.UI.Windows InitializeComponent(); - Title = App.FormatTitle(LocaleKeys.Amiibo); + Title = RyujinxApp.FormatTitle(LocaleKeys.Amiibo); } public AmiiboWindow() @@ -27,7 +27,7 @@ namespace Ryujinx.Ava.UI.Windows if (Program.PreviewerDetached) { - Title = App.FormatTitle(LocaleKeys.Amiibo); + Title = RyujinxApp.FormatTitle(LocaleKeys.Amiibo); } } diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index 8c8d56b34..2fc9617fb 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -28,7 +28,7 @@ namespace Ryujinx.Ava.UI.Windows InitializeComponent(); - Title = App.FormatTitle(LocaleKeys.CheatWindowTitle); + Title = RyujinxApp.FormatTitle(LocaleKeys.CheatWindowTitle); } public CheatWindow(VirtualFileSystem virtualFileSystem, string titleId, string titleName, string titlePath) @@ -93,7 +93,7 @@ namespace Ryujinx.Ava.UI.Windows DataContext = this; - Title = App.FormatTitle(LocaleKeys.CheatWindowTitle); + Title = RyujinxApp.FormatTitle(LocaleKeys.CheatWindowTitle); } public void Save() diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 88e82c89e..e621b42ec 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -86,7 +86,7 @@ namespace Ryujinx.Ava.UI.Windows UiHandler = new AvaHostUIHandler(this); - ViewModel.Title = App.FormatTitle(); + ViewModel.Title = RyujinxApp.FormatTitle(); TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowTitleBar; TitleBar.TitleBarHitTestType = (ConfigurationState.Instance.ShowTitleBar) ? TitleBarHitTestType.Simple : TitleBarHitTestType.Complex; @@ -117,7 +117,7 @@ namespace Ryujinx.Ava.UI.Windows /// private static void OnPlatformColorValuesChanged(object sender, PlatformColorValues e) { - if (Application.Current is App app) + if (Application.Current is RyujinxApp app) app.ApplyConfiguredTheme(ConfigurationState.Instance.UI.BaseStyle); } diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs b/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs index b004d9fba..0c0345107 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Ava.UI.Windows public SettingsWindow(VirtualFileSystem virtualFileSystem, ContentManager contentManager) { - Title = App.FormatTitle(LocaleKeys.Settings); + Title = RyujinxApp.FormatTitle(LocaleKeys.Settings); DataContext = ViewModel = new SettingsViewModel(virtualFileSystem, contentManager); diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 21d991d97..3d4f11317 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -76,7 +76,7 @@ namespace Ryujinx.Ava if (!Version.TryParse(Program.Version, out Version currentVersion)) { - Logger.Error?.Print(LogClass.Application, $"Failed to convert the current {App.FullAppName} version!"); + Logger.Error?.Print(LogClass.Application, $"Failed to convert the current {RyujinxApp.FullAppName} version!"); await ContentDialogHelper.CreateWarningDialog( LocaleManager.Instance[LocaleKeys.DialogUpdaterConvertFailedMessage], @@ -159,7 +159,7 @@ namespace Ryujinx.Ava if (!Version.TryParse(_buildVer, out Version newVersion)) { - Logger.Error?.Print(LogClass.Application, $"Failed to convert the received {App.FullAppName} version from GitHub!"); + Logger.Error?.Print(LogClass.Application, $"Failed to convert the received {RyujinxApp.FullAppName} version from GitHub!"); await ContentDialogHelper.CreateWarningDialog( LocaleManager.Instance[LocaleKeys.DialogUpdaterConvertFailedGithubMessage], @@ -266,7 +266,7 @@ namespace Ryujinx.Ava SubHeader = LocaleManager.Instance[LocaleKeys.UpdaterDownloading], IconSource = new SymbolIconSource { Symbol = Symbol.Download }, ShowProgressBar = true, - XamlRoot = App.MainWindow, + XamlRoot = RyujinxApp.MainWindow, }; taskDialog.Opened += (s, e) => @@ -490,7 +490,7 @@ namespace Ryujinx.Ava bytesWritten += readSize; taskDialog.SetProgressBarState(GetPercentage(bytesWritten, totalBytes), TaskDialogProgressState.Normal); - App.SetTaskbarProgressValue(bytesWritten, totalBytes); + RyujinxApp.SetTaskbarProgressValue(bytesWritten, totalBytes); updateFileStream.Write(buffer, 0, readSize); } -- 2.47.1 From a0a4f78cff86d44edee680edf3a7ecc1059ebd9c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 20:47:14 -0600 Subject: [PATCH 167/722] UI: Thin down the borders of the app icon a little bit and trim down the file size significantly. --- src/Ryujinx.HLE/FileSystem/ContentManager.cs | 26 ++++++++++-------- .../Resources/Logo_Ryujinx_AntiAlias.png | Bin 0 -> 12236 bytes .../Resources/Logo_Thiccjinx.png | Bin 623701 -> 0 bytes .../Ryujinx.UI.Common.csproj | 2 +- .../UI/ViewModels/MainWindowViewModel.cs | 2 +- .../UI/Views/Main/MainMenuBarView.axaml | 2 +- 6 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 src/Ryujinx.UI.Common/Resources/Logo_Ryujinx_AntiAlias.png delete mode 100644 src/Ryujinx.UI.Common/Resources/Logo_Thiccjinx.png diff --git a/src/Ryujinx.HLE/FileSystem/ContentManager.cs b/src/Ryujinx.HLE/FileSystem/ContentManager.cs index 9bda759a5..ec0f58b01 100644 --- a/src/Ryujinx.HLE/FileSystem/ContentManager.cs +++ b/src/Ryujinx.HLE/FileSystem/ContentManager.cs @@ -1034,16 +1034,16 @@ namespace Ryujinx.HLE.FileSystem switch (fileName) { case "prod.keys": - verified = verifyKeys(lines, genericPattern); + verified = VerifyKeys(lines, genericPattern); break; case "title.keys": - verified = verifyKeys(lines, titlePattern); + verified = VerifyKeys(lines, titlePattern); break; case "console.keys": - verified = verifyKeys(lines, genericPattern); + verified = VerifyKeys(lines, genericPattern); break; case "dev.keys": - verified = verifyKeys(lines, genericPattern); + verified = VerifyKeys(lines, genericPattern); break; default: throw new FormatException($"Keys file name \"{fileName}\" not supported. Only \"prod.keys\", \"title.keys\", \"console.keys\", \"dev.keys\" are supported."); @@ -1056,20 +1056,22 @@ namespace Ryujinx.HLE.FileSystem { throw new FileNotFoundException($"Keys file not found at \"{filePath}\"."); } - } - private bool verifyKeys(string[] lines, string regex) - { - foreach (string line in lines) + return; + + bool VerifyKeys(string[] lines, string regex) { - if (!Regex.IsMatch(line, regex)) + foreach (string line in lines) { - return false; + if (!Regex.IsMatch(line, regex)) + { + return false; + } } + return true; } - return true; } - + public bool AreKeysAlredyPresent(string pathToCheck) { string[] fileNames = { "prod.keys", "title.keys", "console.keys", "dev.keys" }; diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Ryujinx_AntiAlias.png b/src/Ryujinx.UI.Common/Resources/Logo_Ryujinx_AntiAlias.png new file mode 100644 index 0000000000000000000000000000000000000000..a00c7ce68ca8571bef818609284190f2b133159b GIT binary patch literal 12236 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 z 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

$i`fKCNV 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 - + diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 3ff05785a..04881b58d 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -131,7 +131,7 @@ namespace Ryujinx.Ava.UI.ViewModels // For an example of this, download canary 1.2.95, then open the settings menu, and look at the icon in the top-left. // The border gets reduced to colored pixels in the 4 corners. public static readonly Bitmap IconBitmap = - new(Assembly.GetAssembly(typeof(ConfigurationState))!.GetManifestResourceStream("Ryujinx.UI.Common.Resources.Logo_Thiccjinx.png")!); + new(Assembly.GetAssembly(typeof(ConfigurationState))!.GetManifestResourceStream("Ryujinx.UI.Common.Resources.Logo_Ryujinx_AntiAlias.png")!); public MainWindow Window { get; init; } diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 7d8135dcf..8207f8e03 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -18,7 +18,7 @@ Height="25" Width="25" ToolTip.Tip="{Binding Title}" - Source="resm:Ryujinx.UI.Common.Resources.Logo_Thiccjinx.png?assembly=Ryujinx.UI.Common" /> + Source="resm:Ryujinx.UI.Common.Resources.Logo_Ryujinx_AntiAlias.png?assembly=Ryujinx.UI.Common" /> Date: Tue, 24 Dec 2024 21:00:41 -0600 Subject: [PATCH 168/722] UI: Make custom title bar window controls extend exactly as long as the menu bar is tall --- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index e621b42ec..660caa605 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -91,12 +91,14 @@ namespace Ryujinx.Ava.UI.Windows TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowTitleBar; TitleBar.TitleBarHitTestType = (ConfigurationState.Instance.ShowTitleBar) ? TitleBarHitTestType.Simple : TitleBarHitTestType.Complex; - // Correctly size window when 'TitleBar' is enabled (Nov. 14, 2024) - TitleBarHeight = (ConfigurationState.Instance.ShowTitleBar ? TitleBar.Height : 0); - // NOTE: Height of MenuBar and StatusBar is not usable here, since it would still be 0 at this point. StatusBarHeight = StatusBarView.StatusBar.MinHeight; MenuBarHeight = MenuBar.MinHeight; + + TitleBar.Height = MenuBarHeight; + + // Correctly size window when 'TitleBar' is enabled (Nov. 14, 2024) + TitleBarHeight = (ConfigurationState.Instance.ShowTitleBar ? TitleBar.Height : 0); ApplicationList.DataContext = DataContext; ApplicationGrid.DataContext = DataContext; -- 2.47.1 From 41acc4b1f39e6586ee1462e6e42a8b9c3717809a Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 21:14:17 -0600 Subject: [PATCH 169/722] UI: misc: Collapse repeated identical Border usages into a helper control. --- .../UI/Views/Main/MainStatusBarView.axaml | 71 +++---------------- .../UI/Views/Main/MainStatusBarView.axaml.cs | 23 ++++++ 2 files changed, 32 insertions(+), 62 deletions(-) diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml index 6e72a8b4b..ea00927d8 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml @@ -7,6 +7,7 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" + xmlns:local="clr-namespace:Ryujinx.Ava.UI.Views.Main" xmlns:config="clr-namespace:Ryujinx.Common.Configuration;assembly=Ryujinx.Common" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Ryujinx.Ava.UI.Views.Main.MainStatusBarView" @@ -132,14 +133,7 @@ - + - + - + - + - + - + - + - + */ + } } -- 2.47.1 From f0aa7eedf633e8ba2342cc83b5da52692065f961 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 21:15:13 -0600 Subject: [PATCH 170/722] lol --- src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs index ba391ba0a..12d5473ea 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs @@ -85,14 +85,5 @@ namespace Ryujinx.Ava.UI.Views.Main Background = Brushes.Gray; BorderThickness = new Thickness(1); } - /* - */ } } -- 2.47.1 From 0ca4d6e921d3f1ea9827d3a242c9a838c6b7ddf1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 21:55:12 -0600 Subject: [PATCH 171/722] misc: Move StatusBarSeparator into Controls namespace, rename to MiniVerticalSeparator add bulk property change event method give each markup extension its own property name --- src/Ryujinx/Common/LocaleManager.cs | 4 +- .../Common/Markup/BasicMarkupExtension.cs | 2 +- src/Ryujinx/Common/Markup/MarkupExtensions.cs | 3 ++ ...{SliderScroll.axaml.cs => SliderScroll.cs} | 0 src/Ryujinx/UI/Controls/StatusBarSeparator.cs | 19 +++++++ src/Ryujinx/UI/ViewModels/BaseModel.cs | 9 ++++ .../UI/ViewModels/SettingsViewModel.cs | 15 +++--- .../UI/ViewModels/XCITrimmerViewModel.cs | 50 ++++++++++--------- .../UI/Views/Main/MainStatusBarView.axaml | 16 +++--- .../UI/Views/Main/MainStatusBarView.axaml.cs | 21 +------- 10 files changed, 78 insertions(+), 61 deletions(-) rename src/Ryujinx/UI/Controls/{SliderScroll.axaml.cs => SliderScroll.cs} (100%) create mode 100644 src/Ryujinx/UI/Controls/StatusBarSeparator.cs diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index f29efb15a..270b666df 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -109,7 +109,7 @@ namespace Ryujinx.Ava.Common.Locale { _dynamicValues[key] = values; - OnPropertyChanged("Item"); + OnPropertyChanged("Translation"); return this[key]; } @@ -138,7 +138,7 @@ namespace Ryujinx.Ava.Common.Locale _localeStrings[key] = val; } - OnPropertyChanged("Item"); + OnPropertyChanged("Translation"); LocaleChanged?.Invoke(); } diff --git a/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs b/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs index b1b7361a6..364c08c0b 100644 --- a/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs +++ b/src/Ryujinx/Common/Markup/BasicMarkupExtension.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Ava.Common.Markup { internal abstract class BasicMarkupExtension : MarkupExtension { - public virtual string Name => "Item"; + public abstract string Name { get; } public virtual Action? Setter => null; protected abstract T? Value { get; } diff --git a/src/Ryujinx/Common/Markup/MarkupExtensions.cs b/src/Ryujinx/Common/Markup/MarkupExtensions.cs index cae6d8c2c..9e8ff00ef 100644 --- a/src/Ryujinx/Common/Markup/MarkupExtensions.cs +++ b/src/Ryujinx/Common/Markup/MarkupExtensions.cs @@ -6,16 +6,19 @@ namespace Ryujinx.Ava.Common.Markup { internal class IconExtension(string iconString) : BasicMarkupExtension { + public override string Name => "Icon"; protected override Icon Value => new() { Value = iconString }; } internal class SpinningIconExtension(string iconString) : BasicMarkupExtension { + public override string Name => "SIcon"; protected override Icon Value => new() { Value = iconString, Animation = IconAnimation.Spin }; } internal class LocaleExtension(LocaleKeys key) : BasicMarkupExtension { + public override string Name => "Translation"; protected override string Value => LocaleManager.Instance[key]; protected override void ConfigureBindingExtension(CompiledBindingExtension bindingExtension) diff --git a/src/Ryujinx/UI/Controls/SliderScroll.axaml.cs b/src/Ryujinx/UI/Controls/SliderScroll.cs similarity index 100% rename from src/Ryujinx/UI/Controls/SliderScroll.axaml.cs rename to src/Ryujinx/UI/Controls/SliderScroll.cs diff --git a/src/Ryujinx/UI/Controls/StatusBarSeparator.cs b/src/Ryujinx/UI/Controls/StatusBarSeparator.cs new file mode 100644 index 000000000..7888879f5 --- /dev/null +++ b/src/Ryujinx/UI/Controls/StatusBarSeparator.cs @@ -0,0 +1,19 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Media; + +namespace Ryujinx.Ava.UI.Controls +{ + public class MiniVerticalSeparator : Border + { + public MiniVerticalSeparator() + { + Width = 2; + Height = 12; + Margin = new Thickness(); + BorderBrush = Brushes.Gray; + Background = Brushes.Gray; + BorderThickness = new Thickness(1); + } + } +} diff --git a/src/Ryujinx/UI/ViewModels/BaseModel.cs b/src/Ryujinx/UI/ViewModels/BaseModel.cs index 4db9cf812..d8f2e9096 100644 --- a/src/Ryujinx/UI/ViewModels/BaseModel.cs +++ b/src/Ryujinx/UI/ViewModels/BaseModel.cs @@ -1,3 +1,4 @@ +using System; using System.ComponentModel; using System.Runtime.CompilerServices; @@ -11,5 +12,13 @@ namespace Ryujinx.Ava.UI.ViewModels { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } + + protected void OnPropertiesChanged(params ReadOnlySpan propertyNames) + { + foreach (var propertyName in propertyNames) + { + OnPropertyChanged(propertyName); + } + } } } diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 85ba203f9..7504147b2 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -71,8 +71,7 @@ namespace Ryujinx.Ava.UI.ViewModels { _resolutionScale = value; - OnPropertyChanged(nameof(CustomResolutionScale)); - OnPropertyChanged(nameof(IsCustomResolutionScaleActive)); + OnPropertiesChanged(nameof(CustomResolutionScale), nameof(IsCustomResolutionScaleActive)); } } @@ -181,8 +180,9 @@ namespace Ryujinx.Ava.UI.ViewModels int newInterval = (int)((value / 100f) * 60); _customVSyncInterval = newInterval; _customVSyncIntervalPercentageProxy = value; - OnPropertyChanged((nameof(CustomVSyncInterval))); - OnPropertyChanged((nameof(CustomVSyncIntervalPercentageText))); + OnPropertiesChanged( + nameof(CustomVSyncInterval), + nameof(CustomVSyncIntervalPercentageText)); } } @@ -190,7 +190,7 @@ namespace Ryujinx.Ava.UI.ViewModels { get { - string text = CustomVSyncIntervalPercentageProxy.ToString() + "%"; + string text = CustomVSyncIntervalPercentageProxy + "%"; return text; } } @@ -221,8 +221,9 @@ namespace Ryujinx.Ava.UI.ViewModels _customVSyncInterval = value; int newPercent = (int)((value / 60f) * 100); _customVSyncIntervalPercentageProxy = newPercent; - OnPropertyChanged(nameof(CustomVSyncIntervalPercentageProxy)); - OnPropertyChanged(nameof(CustomVSyncIntervalPercentageText)); + OnPropertiesChanged( + nameof(CustomVSyncIntervalPercentageProxy), + nameof(CustomVSyncIntervalPercentageText)); OnPropertyChanged(); } } diff --git a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs index e1f9eead5..1bca27330 100644 --- a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs @@ -91,39 +91,42 @@ namespace Ryujinx.Ava.UI.ViewModels private void SortingChanged() { - OnPropertyChanged(nameof(IsSortedByName)); - OnPropertyChanged(nameof(IsSortedBySaved)); - OnPropertyChanged(nameof(SortingAscending)); - OnPropertyChanged(nameof(SortingField)); - OnPropertyChanged(nameof(SortingFieldName)); + OnPropertiesChanged( + nameof(IsSortedByName), + nameof(IsSortedBySaved), + nameof(SortingAscending), + nameof(SortingField), + nameof(SortingFieldName)); + SortAndFilter(); } private void DisplayedChanged() { - OnPropertyChanged(nameof(Status)); - OnPropertyChanged(nameof(DisplayedXCIFiles)); - OnPropertyChanged(nameof(SelectedDisplayedXCIFiles)); + OnPropertiesChanged(nameof(Status), nameof(DisplayedXCIFiles), nameof(SelectedDisplayedXCIFiles)); } private void ApplicationsChanged() { - OnPropertyChanged(nameof(AllXCIFiles)); - OnPropertyChanged(nameof(Status)); - OnPropertyChanged(nameof(PotentialSavings)); - OnPropertyChanged(nameof(ActualSavings)); - OnPropertyChanged(nameof(CanTrim)); - OnPropertyChanged(nameof(CanUntrim)); + OnPropertiesChanged( + nameof(AllXCIFiles), + nameof(Status), + nameof(PotentialSavings), + nameof(ActualSavings), + nameof(CanTrim), + nameof(CanUntrim)); + DisplayedChanged(); SortAndFilter(); } private void SelectionChanged(bool displayedChanged = true) { - OnPropertyChanged(nameof(Status)); - OnPropertyChanged(nameof(CanTrim)); - OnPropertyChanged(nameof(CanUntrim)); - OnPropertyChanged(nameof(SelectedXCIFiles)); + OnPropertiesChanged( + nameof(Status), + nameof(CanTrim), + nameof(CanUntrim), + nameof(SelectedXCIFiles)); if (displayedChanged) OnPropertyChanged(nameof(SelectedDisplayedXCIFiles)); @@ -131,11 +134,12 @@ namespace Ryujinx.Ava.UI.ViewModels private void ProcessingChanged() { - OnPropertyChanged(nameof(Processing)); - OnPropertyChanged(nameof(Cancel)); - OnPropertyChanged(nameof(Status)); - OnPropertyChanged(nameof(CanTrim)); - OnPropertyChanged(nameof(CanUntrim)); + OnPropertiesChanged( + nameof(Processing), + nameof(Cancel), + nameof(Status), + nameof(CanTrim), + nameof(CanUntrim)); } private IEnumerable GetSelectedDisplayedXCIFiles() diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml index ea00927d8..6871fd3f9 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml @@ -133,7 +133,7 @@ - + - + - + - + - + - + - + - + 0, - > 1 => 1, - _ => newValue, - }; + Window.ViewModel.Volume = Math.Clamp(newValue, 0, 1); e.Handled = true; } } - - public class StatusBarSeparator : Border - { - public StatusBarSeparator() - { - Width = 2; - Height = 12; - Margin = new Thickness(); - BorderBrush = Brushes.Gray; - Background = Brushes.Gray; - BorderThickness = new Thickness(1); - } - } } -- 2.47.1 From 0bacdb8765988d2d9aff3a859d9c6cb64cc5e142 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 24 Dec 2024 22:19:58 -0600 Subject: [PATCH 172/722] Improve locale file parsing error descriptions --- src/Ryujinx/Common/LocaleManager.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index 270b666df..e788a3adc 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -143,11 +143,7 @@ namespace Ryujinx.Ava.Common.Locale LocaleChanged?.Invoke(); } - #nullable enable - private static LocalesJson? _localeData; - - #nullable disable private static Dictionary LoadJsonLanguage(string languageCode) { @@ -158,18 +154,28 @@ namespace Ryujinx.Ava.Common.Locale foreach (LocalesEntry locale in _localeData.Value.Locales) { - if (locale.Translations.Count != _localeData.Value.Languages.Count) + if (locale.Translations.Count < _localeData.Value.Languages.Count) { throw new Exception($"Locale key {{{locale.ID}}} is missing languages! Has {locale.Translations.Count} translations, expected {_localeData.Value.Languages.Count}!"); + } + + if (locale.Translations.Count > _localeData.Value.Languages.Count) + { + throw new Exception($"Locale key {{{locale.ID}}} has too many languages! Has {locale.Translations.Count} translations, expected {_localeData.Value.Languages.Count}!"); } if (!Enum.TryParse(locale.ID, out var localeKey)) continue; localeStrings[localeKey] = - locale.Translations.TryGetValue(languageCode, out string val) && val != string.Empty + locale.Translations.TryGetValue(languageCode, out string val) && !string.IsNullOrEmpty(val) ? val : locale.Translations[DefaultLanguageCode]; + + if (string.IsNullOrEmpty(localeStrings[localeKey])) + { + throw new Exception($"Locale key '{locale.ID}' has no valid translations for desired language {languageCode}! {DefaultLanguageCode} is an empty string or null"); + } } return localeStrings; -- 2.47.1 From e6644626fceaed218b6a393deb7ee382aa304750 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 25 Dec 2024 00:06:29 -0600 Subject: [PATCH 173/722] UI: Fix negative space savings in XCI trimmer --- .../UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs | 5 +++-- src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs b/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs index c6e814e90..14e8e178a 100644 --- a/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs +++ b/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs @@ -1,6 +1,7 @@ using Avalonia; using Avalonia.Data; using Avalonia.Data.Converters; +using Gommon; using Ryujinx.Ava.Common.Locale; using Ryujinx.UI.Common.Models; using System; @@ -32,11 +33,11 @@ namespace Ryujinx.Ava.UI.Helpers if (app.CurrentSavingsB < app.PotentialSavingsB) { - return LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.TitleXCICanSaveLabel, (app.PotentialSavingsB - app.CurrentSavingsB) / _bytesPerMB); + return LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.TitleXCICanSaveLabel, ((app.PotentialSavingsB - app.CurrentSavingsB) / _bytesPerMB).CoerceAtLeast(0)); } else { - return LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.TitleXCISavingLabel, app.CurrentSavingsB / _bytesPerMB); + return LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.TitleXCISavingLabel, (app.CurrentSavingsB / _bytesPerMB).CoerceAtLeast(0)); } } diff --git a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs index 1bca27330..402b182af 100644 --- a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs @@ -364,7 +364,7 @@ namespace Ryujinx.Ava.UI.ViewModels value = _processingApplication.Value with { PercentageProgress = null }; if (value.HasValue) - _displayedXCIFiles.ReplaceWith(value.Value); + _displayedXCIFiles.ReplaceWith(value); _processingApplication = value; OnPropertyChanged(); -- 2.47.1 From 412d4065b89df44ddeb86e96e8e0cc54545e8d05 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 25 Dec 2024 00:56:01 -0600 Subject: [PATCH 174/722] UI: Abstract applet launch logic for future potential applets Optimize locale loading (remove always loading english, that was only needed with the old system) --- .../Helper/AppletMetadata.cs | 64 +++++++++++++++++++ src/Ryujinx/Common/LocaleManager.cs | 47 ++++---------- .../UI/Views/Main/MainMenuBarView.axaml.cs | 25 ++------ 3 files changed, 81 insertions(+), 55 deletions(-) create mode 100644 src/Ryujinx.UI.Common/Helper/AppletMetadata.cs diff --git a/src/Ryujinx.UI.Common/Helper/AppletMetadata.cs b/src/Ryujinx.UI.Common/Helper/AppletMetadata.cs new file mode 100644 index 000000000..644b7fe74 --- /dev/null +++ b/src/Ryujinx.UI.Common/Helper/AppletMetadata.cs @@ -0,0 +1,64 @@ +using LibHac.Common; +using LibHac.Ncm; +using LibHac.Ns; +using LibHac.Tools.FsSystem.NcaUtils; +using Ryujinx.HLE; +using Ryujinx.HLE.FileSystem; +using Ryujinx.UI.App.Common; + +namespace Ryujinx.UI.Common.Helper +{ + public readonly struct AppletMetadata + { + private readonly ContentManager _contentManager; + + public string Name { get; } + public ulong ProgramId { get; } + + public string Version { get; } + + public AppletMetadata(ContentManager contentManager, string name, ulong programId, string version = "1.0.0") + : this(name, programId, version) + { + _contentManager = contentManager; + } + + public AppletMetadata(string name, ulong programId, string version = "1.0.0") + { + Name = name; + ProgramId = programId; + Version = version; + } + + public string GetContentPath(ContentManager contentManager) + => (contentManager ?? _contentManager) + .GetInstalledContentPath(ProgramId, StorageId.BuiltInSystem, NcaContentType.Program); + + public bool CanStart(ContentManager contentManager, out ApplicationData appData, out BlitStruct appControl) + { + contentManager ??= _contentManager; + if (contentManager == null) + { + appData = null; + appControl = new BlitStruct(0); + return false; + } + + appData = new() + { + Name = Name, + Id = ProgramId, + Path = GetContentPath(contentManager) + }; + + if (string.IsNullOrEmpty(appData.Path)) + { + appControl = new BlitStruct(0); + return false; + } + + appControl = StructHelpers.CreateCustomNacpData(Name, Version); + return true; + } + } +} diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index e788a3adc..70b04ec95 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -1,7 +1,6 @@ using Gommon; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Common; -using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.UI.Common.Configuration; using System; @@ -17,7 +16,6 @@ namespace Ryujinx.Ava.Common.Locale private const string DefaultLanguageCode = "en_US"; private readonly Dictionary _localeStrings; - private Dictionary _localeDefaultStrings; private readonly ConcurrentDictionary _dynamicValues; private string _localeLanguageCode; @@ -27,7 +25,6 @@ namespace Ryujinx.Ava.Common.Locale public LocaleManager() { _localeStrings = new Dictionary(); - _localeDefaultStrings = new Dictionary(); _dynamicValues = new ConcurrentDictionary(); Load(); @@ -37,9 +34,7 @@ namespace Ryujinx.Ava.Common.Locale { var localeLanguageCode = !string.IsNullOrEmpty(ConfigurationState.Instance.UI.LanguageCode.Value) ? ConfigurationState.Instance.UI.LanguageCode.Value : CultureInfo.CurrentCulture.Name.Replace('-', '_'); - - // Load en_US as default, if the target language translation is missing or incomplete. - LoadDefaultLanguage(); + LoadLanguage(localeLanguageCode); // Save whatever we ended up with. @@ -66,26 +61,14 @@ namespace Ryujinx.Ava.Common.Locale } catch { - // If formatting failed use the default text instead. - if (_localeDefaultStrings.TryGetValue(key, out value)) - try - { - return string.Format(value, dynamicValue); - } - catch - { - // If formatting the default text failed return the key. - return key.ToString(); - } + // If formatting the text failed, + // continue to the below line & return the text without formatting. } return value; } - - // If the locale doesn't contain the key return the default one. - return _localeDefaultStrings.TryGetValue(key, out string defaultValue) - ? defaultValue - : key.ToString(); // If the locale text doesn't exist return the key. + + return key.ToString(); // If the locale text doesn't exist return the key. } set { @@ -114,11 +97,6 @@ namespace Ryujinx.Ava.Common.Locale return this[key]; } - private void LoadDefaultLanguage() - { - _localeDefaultStrings = LoadJsonLanguage(DefaultLanguageCode); - } - public void LoadLanguage(string languageCode) { var locale = LoadJsonLanguage(languageCode); @@ -126,7 +104,7 @@ namespace Ryujinx.Ava.Common.Locale if (locale == null) { _localeLanguageCode = DefaultLanguageCode; - locale = _localeDefaultStrings; + locale = LoadJsonLanguage(_localeLanguageCode); } else { @@ -167,15 +145,16 @@ namespace Ryujinx.Ava.Common.Locale if (!Enum.TryParse(locale.ID, out var localeKey)) continue; - localeStrings[localeKey] = - locale.Translations.TryGetValue(languageCode, out string val) && !string.IsNullOrEmpty(val) - ? val - : locale.Translations[DefaultLanguageCode]; - - if (string.IsNullOrEmpty(localeStrings[localeKey])) + var str = locale.Translations.TryGetValue(languageCode, out string val) && !string.IsNullOrEmpty(val) + ? val + : locale.Translations[DefaultLanguageCode]; + + if (string.IsNullOrEmpty(str)) { throw new Exception($"Locale key '{locale.ID}' has no valid translations for desired language {languageCode}! {DefaultLanguageCode} is an empty string or null"); } + + localeStrings[localeKey] = str; } return localeStrings; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index fa900be81..be8a000e7 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -3,8 +3,6 @@ using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Threading; using Gommon; -using LibHac.Ncm; -using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; @@ -12,8 +10,6 @@ using Ryujinx.Ava.UI.Windows; using Ryujinx.Common; using Ryujinx.Common.Utilities; using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; -using Ryujinx.HLE; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; @@ -124,26 +120,13 @@ namespace Ryujinx.Ava.UI.Views.Main ViewModel.LoadConfigurableHotKeys(); } + public static readonly AppletMetadata MiiApplet = new("miiEdit", 0x0100000000001009); + public async void OpenMiiApplet(object sender, RoutedEventArgs e) { - const string AppletName = "miiEdit"; - const ulong AppletProgramId = 0x0100000000001009; - const string AppletVersion = "1.0.0"; - - string contentPath = ViewModel.ContentManager.GetInstalledContentPath(AppletProgramId, StorageId.BuiltInSystem, NcaContentType.Program); - - if (!string.IsNullOrEmpty(contentPath)) + if (MiiApplet.CanStart(ViewModel.ContentManager, out var appData, out var nacpData)) { - ApplicationData applicationData = new() - { - Name = AppletName, - Id = AppletProgramId, - Path = contentPath - }; - - var nacpData = StructHelpers.CreateCustomNacpData(AppletName, AppletVersion); - - await ViewModel.LoadApplication(applicationData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen, nacpData); + await ViewModel.LoadApplication(appData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen, nacpData); } } -- 2.47.1 From 2bf48f57d2f63cc2a3e459e38837646c7e15fc60 Mon Sep 17 00:00:00 2001 From: Otozinclus <58051309+Otozinclus@users.noreply.github.com> Date: Wed, 25 Dec 2024 21:19:53 +0100 Subject: [PATCH 175/722] Add more games to metal list (#447) Mario Kart 8 Deluxe and Deltarune got tested by Isaac with help from Peri previosly (His video: https://www.youtube.com/watch?v=GEVre_0ZVUg ) Captain Toad, Cuphead and Animal Crossing I tested myself (side-by-side Video comparison: https://youtu.be/auNS9MmZMPI ) Additional information: Cuphead has flickering issues with certain UI elements on Vulkan via MoltenVK. Metal fixes those and introduces no new issues, according to my testing. Animal Crossing is accurate, except for it having broken backgrounds in interiors, causing them to appear as white instead of black. This is caused by a hardware level sampler bug, that isaac never got to find a workaround for. However, this issue happens with Vulkan via MoltenVK as well, both Metal and Vulkan have this issue, therefore Metal shouldn't have any downside compared to using Vulkan in this game. --- src/Ryujinx/UI/Renderer/RendererHost.axaml.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs index c66b266c0..93481a075 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs @@ -33,11 +33,16 @@ namespace Ryujinx.Ava.UI.Renderer public static readonly string[] KnownGreatMetalTitles = [ + "01006f8002326000", // Animal Crossings: New Horizons + "01009bf0072d4000", // Captain Toad: Treasure Tracker + "0100a5c00d162000", // Cuphead + "010023800d64a000", // Deltarune + "010028600EBDA000", // Mario 3D World + "0100152000022000", // Mario Kart 8 Deluxe + "01005CA01580E000", // Persona 5 + "01008C0016544000", // Sea of Stars "01006A800016E000", // Smash Ultimate "0100000000010000", // Super Mario Odyessy - "01008C0016544000", // Sea of Stars - "01005CA01580E000", // Persona 5 - "010028600EBDA000", // Mario 3D World ]; public GraphicsBackend Backend => -- 2.47.1 From 17233d30da931e9ede25061ef6207e201b3cd7d6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 26 Dec 2024 00:29:00 -0600 Subject: [PATCH 176/722] misc: give various threads dedicated names Move all title ID lists into a TitleIDs class in Ryujinx.Common, with helpers. Unify & simplify Auto graphics backend selection logic --- .../Translation/PTC/PtcProfiler.cs | 12 +- src/Ryujinx.Common/TitleIDs.cs | 190 ++++++++++++++++++ .../Queries/CounterQueue.cs | 2 +- .../Queries/CounterQueue.cs | 2 +- .../HOS/Kernel/Threading/KThread.cs | 2 +- .../DiscordIntegrationModule.cs | 148 +------------- src/Ryujinx/AppHost.cs | 40 +--- src/Ryujinx/UI/Renderer/RendererHost.axaml.cs | 25 +-- 8 files changed, 212 insertions(+), 209 deletions(-) create mode 100644 src/Ryujinx.Common/TitleIDs.cs diff --git a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs index 7e630ae10..bdb9abd05 100644 --- a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs +++ b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs @@ -1,4 +1,5 @@ using ARMeilleure.State; +using Humanizer; using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.Common.Memory; @@ -58,8 +59,8 @@ namespace ARMeilleure.Translation.PTC { _ptc = ptc; - _timer = new Timer(SaveInterval * 1000d); - _timer.Elapsed += PreSave; + _timer = new Timer(SaveInterval.Seconds()); + _timer.Elapsed += TimerElapsed; _outerHeaderMagic = BinaryPrimitives.ReadUInt64LittleEndian(EncodingCache.UTF8NoBOM.GetBytes(OuterHeaderMagicString).AsSpan()); @@ -72,6 +73,9 @@ namespace ARMeilleure.Translation.PTC Enabled = false; } + private void TimerElapsed(object _, ElapsedEventArgs __) + => new Thread(PreSave) { Name = "Ptc.DiskWriter" }.Start(); + public void AddEntry(ulong address, ExecutionMode mode, bool highCq) { if (IsAddressInStaticCodeRange(address)) @@ -262,7 +266,7 @@ namespace ARMeilleure.Translation.PTC compressedStream.SetLength(0L); } - private void PreSave(object source, ElapsedEventArgs e) + private void PreSave() { _waitEvent.Reset(); @@ -428,7 +432,7 @@ namespace ARMeilleure.Translation.PTC { _disposed = true; - _timer.Elapsed -= PreSave; + _timer.Elapsed -= TimerElapsed; _timer.Dispose(); Wait(); diff --git a/src/Ryujinx.Common/TitleIDs.cs b/src/Ryujinx.Common/TitleIDs.cs new file mode 100644 index 000000000..b75ee1299 --- /dev/null +++ b/src/Ryujinx.Common/TitleIDs.cs @@ -0,0 +1,190 @@ +using Gommon; +using Ryujinx.Common.Configuration; +using System; +using System.Linq; +using System.Runtime.InteropServices; + +namespace Ryujinx.Common +{ + public static class TitleIDs + { + public static GraphicsBackend SelectGraphicsBackend(string titleId, GraphicsBackend currentBackend) + { + switch (currentBackend) + { + case GraphicsBackend.OpenGl when OperatingSystem.IsMacOS(): + return GraphicsBackend.Vulkan; + case GraphicsBackend.Vulkan or GraphicsBackend.OpenGl or GraphicsBackend.Metal: + return currentBackend; + } + + if (!(OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture is Architecture.Arm64)) + return GraphicsBackend.Vulkan; + + return GreatMetalTitles.ContainsIgnoreCase(titleId) ? GraphicsBackend.Metal : GraphicsBackend.Vulkan; + } + + public static readonly string[] GreatMetalTitles = + [ + "01006f8002326000", // Animal Crossings: New Horizons + "01009bf0072d4000", // Captain Toad: Treasure Tracker + "0100a5c00d162000", // Cuphead + "010023800d64a000", // Deltarune + "010028600EBDA000", // Mario 3D World + "0100152000022000", // Mario Kart 8 Deluxe + "01005CA01580E000", // Persona 5 + "01008C0016544000", // Sea of Stars + "01006A800016E000", // Smash Ultimate + "0100000000010000", // Super Mario Odyessy + ]; + + public static string GetDiscordGameAsset(string titleId) + => DiscordGameAssetKeys.Contains(titleId) ? titleId : "game"; + + public static readonly string[] DiscordGameAssetKeys = + [ + "010055d009f78000", // Fire Emblem: Three Houses + "0100a12011cc8000", // Fire Emblem: Shadow Dragon + "0100a6301214e000", // Fire Emblem Engage + "0100f15003e64000", // Fire Emblem Warriors + "010071f0143ea000", // Fire Emblem Warriors: Three Hopes + + "01007e3006dda000", // Kirby Star Allies + "01004d300c5ae000", // Kirby and the Forgotten Land + "01006b601380e000", // Kirby's Return to Dream Land Deluxe + "01003fb00c5a8000", // Super Kirby Clash + "0100227010460000", // Kirby Fighters 2 + "0100a8e016236000", // Kirby's Dream Buffet + + "01007ef00011e000", // The Legend of Zelda: Breath of the Wild + "01006bb00c6f0000", // The Legend of Zelda: Link's Awakening + "01002da013484000", // The Legend of Zelda: Skyward Sword HD + "0100f2c0115b6000", // The Legend of Zelda: Tears of the Kingdom + "01008cf01baac000", // The Legend of Zelda: Echoes of Wisdom + "01000b900d8b0000", // Cadence of Hyrule + "0100ae00096ea000", // Hyrule Warriors: Definitive Edition + "01002b00111a2000", // Hyrule Warriors: Age of Calamity + + "010048701995e000", // Luigi's Mansion 2 HD + "0100dca0064a6000", // Luigi's Mansion 3 + + "010093801237c000", // Metroid Dread + "010012101468c000", // Metroid Prime Remastered + + "0100000000010000", // SUPER MARIO ODYSSEY + "0100ea80032ea000", // Super Mario Bros. U Deluxe + "01009b90006dc000", // Super Mario Maker 2 + "010049900f546000", // Super Mario 3D All-Stars + "010049900F546001", // ^ 64 + "010049900F546002", // ^ Sunshine + "010049900F546003", // ^ Galaxy + "010028600ebda000", // Super Mario 3D World + Bowser's Fury + "010015100b514000", // Super Mario Bros. Wonder + "0100152000022000", // Mario Kart 8 Deluxe + "010036b0034e4000", // Super Mario Party + "01006fe013472000", // Mario Party Superstars + "0100965017338000", // Super Mario Party Jamboree + "01006d0017f7a000", // Mario & Luigi: Brothership + "010067300059a000", // Mario + Rabbids: Kingdom Battle + "0100317013770000", // Mario + Rabbids: Sparks of Hope + "0100a3900c3e2000", // Paper Mario: The Origami King + "0100ecd018ebe000", // Paper Mario: The Thousand-Year Door + "0100bc0018138000", // Super Mario RPG + "0100bde00862a000", // Mario Tennis Aces + "0100c9c00e25c000", // Mario Golf: Super Rush + "010019401051c000", // Mario Strikers: Battle League + "010003000e146000", // Mario & Sonic at the Olympic Games Tokyo 2020 + "0100b99019412000", // Mario vs. Donkey Kong + + "0100aa80194b0000", // Pikmin 1 + "0100d680194b2000", // Pikmin 2 + "0100f4c009322000", // Pikmin 3 Deluxe + "0100b7c00933a000", // Pikmin 4 + + "010003f003a34000", // Pokémon: Let's Go Pikachu! + "0100187003a36000", // Pokémon: Let's Go Eevee! + "0100abf008968000", // Pokémon Sword + "01008db008c2c000", // Pokémon Shield + "0100000011d90000", // Pokémon Brilliant Diamond + "010018e011d92000", // Pokémon Shining Pearl + "01001f5010dfa000", // Pokémon Legends: Arceus + "0100a3d008c5c000", // Pokémon Scarlet + "01008f6008c5e000", // Pokémon Violet + "0100b3f000be2000", // Pokkén Tournament DX + "0100f4300bf2c000", // New Pokémon Snap + + "01003bc0000a0000", // Splatoon 2 (US) + "0100f8f0000a2000", // Splatoon 2 (EU) + "01003c700009c000", // Splatoon 2 (JP) + "0100c2500fc20000", // Splatoon 3 + "0100ba0018500000", // Splatoon 3: Splatfest World Premiere + + "010040600c5ce000", // Tetris 99 + "0100277011f1a000", // Super Mario Bros. 35 + "0100ad9012510000", // PAC-MAN 99 + "0100ccf019c8c000", // F-ZERO 99 + "0100d870045b6000", // NES - Nintendo Switch Online + "01008d300c50c000", // SNES - Nintendo Switch Online + "0100c9a00ece6000", // N64 - Nintendo Switch Online + "0100e0601c632000", // N64 - Nintendo Switch Online 18+ + "0100c62011050000", // GB - Nintendo Switch Online + "010012f017576000", // GBA - Nintendo Switch Online + + "01000320000cc000", // 1-2 Switch + "0100300012f2a000", // Advance Wars 1+2: Re-Boot Camp + "01006f8002326000", // Animal Crossing: New Horizons + "0100620012d6e000", // Big Brain Academy: Brain vs. Brain + "010018300d006000", // BOXBOY! + BOXGIRL! + "0100c1f0051b6000", // Donkey Kong Country: Tropical Freeze + "0100ed000d390000", // Dr. Kawashima's Brain Training + "010067b017588000", // Endless Ocean Luminous + "0100d2f00d5c0000", // Nintendo Switch Sports + "01006b5012b32000", // Part Time UFO + "0100704000B3A000", // Snipperclips + "01006a800016e000", // Super Smash Bros. Ultimate + "0100a9400c9c2000", // Tokyo Mirage Sessions #FE Encore + + "010076f0049a2000", // Bayonetta + "01007960049a0000", // Bayonetta 2 + "01004a4010fea000", // Bayonetta 3 + "0100cf5010fec000", // Bayonetta Origins: Cereza and the Lost Demon + + "0100dcd01525a000", // Persona 3 Portable + "010062b01525c000", // Persona 4 Golden + "010075a016a3a000", // Persona 4 Arena Ultimax + "01005ca01580e000", // Persona 5 Royal + "0100801011c3e000", // Persona 5 Strikers + "010087701b092000", // Persona 5 Tactica + + "01009aa000faa000", // Sonic Mania + "01004ad014bf0000", // Sonic Frontiers + "01005ea01c0fc000", // SONIC X SHADOW GENERATIONS + "01005ea01c0fc001", // ^ + + "010056e00853a000", // A Hat in Time + "0100dbf01000a000", // Burnout Paradise Remastered + "0100744001588000", // Cars 3: Driven to Win + "0100b41013c82000", // Cruis'n Blast + "01001b300b9be000", // Diablo III: Eternal Collection + "01008c8012920000", // Dying Light Platinum Edition + "010073c01af34000", // LEGO Horizon Adventures + "0100770008dd8000", // Monster Hunter Generations Ultimate + "0100b04011742000", // Monster Hunter Rise + "0100853015e86000", // No Man's Sky + "01007bb017812000", // Portal + "0100abd01785c000", // Portal 2 + "01008e200c5c2000", // Muse Dash + "01007820196a6000", // Red Dead Redemption + "01002f7013224000", // Rune Factory 5 + "01008d100d43e000", // Saints Row IV + "0100de600beee000", // Saints Row: The Third - The Full Package + "01001180021fa000", // Shovel Knight: Specter of Torment + "0100d7a01b7a2000", // Star Wars: Bounty Hunter + "0100800015926000", // Suika Game + "0100e46006708000", // Terraria + "01000a10041ea000", // The Elder Scrolls V: Skyrim + "010057a01e4d4000", // TSUKIHIME -A piece of blue glass moon- + "010080b00ad66000", // Undertale + ]; + } +} diff --git a/src/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs b/src/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs index 7e0311407..88cdec983 100644 --- a/src/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs +++ b/src/Ryujinx.Graphics.OpenGL/Queries/CounterQueue.cs @@ -42,7 +42,7 @@ namespace Ryujinx.Graphics.OpenGL.Queries _current = new CounterQueueEvent(this, glType, 0); - _consumerThread = new Thread(EventConsumer); + _consumerThread = new Thread(EventConsumer) { Name = "CPU.CounterQueue." + (int)type }; _consumerThread.Start(); } diff --git a/src/Ryujinx.Graphics.Vulkan/Queries/CounterQueue.cs b/src/Ryujinx.Graphics.Vulkan/Queries/CounterQueue.cs index fa10f13b9..8dd94a42d 100644 --- a/src/Ryujinx.Graphics.Vulkan/Queries/CounterQueue.cs +++ b/src/Ryujinx.Graphics.Vulkan/Queries/CounterQueue.cs @@ -52,7 +52,7 @@ namespace Ryujinx.Graphics.Vulkan.Queries _current = new CounterQueueEvent(this, type, 0); - _consumerThread = new Thread(EventConsumer); + _consumerThread = new Thread(EventConsumer) { Name = "CPU.CounterQueue." + (int)type }; _consumerThread.Start(); } diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs index 4abc0ddf3..35ff74cb3 100644 --- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs +++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs @@ -181,7 +181,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading is64Bits = true; } - HostThread = new Thread(ThreadStart); + HostThread = new Thread(ThreadStart) { Name = "HLE.KThread" }; Context = owner?.CreateExecutionContext() ?? new ProcessExecutionContext(); diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs index 338d28531..0cb9779ff 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs @@ -76,7 +76,7 @@ namespace Ryujinx.UI.Common { Assets = new Assets { - LargeImageKey = _discordGameAssetKeys.Contains(procRes.ProgramIdText) ? procRes.ProgramIdText : "game", + LargeImageKey = TitleIDs.GetDiscordGameAsset(procRes.ProgramIdText), LargeImageText = TruncateToByteLength($"{appMeta.Title} (v{procRes.DisplayVersion})"), SmallImageKey = "ryujinx", SmallImageText = TruncateToByteLength(_description) @@ -122,151 +122,5 @@ namespace Ryujinx.UI.Common { _discordClient?.Dispose(); } - - private static readonly string[] _discordGameAssetKeys = - [ - "010055d009f78000", // Fire Emblem: Three Houses - "0100a12011cc8000", // Fire Emblem: Shadow Dragon - "0100a6301214e000", // Fire Emblem Engage - "0100f15003e64000", // Fire Emblem Warriors - "010071f0143ea000", // Fire Emblem Warriors: Three Hopes - - "01007e3006dda000", // Kirby Star Allies - "01004d300c5ae000", // Kirby and the Forgotten Land - "01006b601380e000", // Kirby's Return to Dream Land Deluxe - "01003fb00c5a8000", // Super Kirby Clash - "0100227010460000", // Kirby Fighters 2 - "0100a8e016236000", // Kirby's Dream Buffet - - "01007ef00011e000", // The Legend of Zelda: Breath of the Wild - "01006bb00c6f0000", // The Legend of Zelda: Link's Awakening - "01002da013484000", // The Legend of Zelda: Skyward Sword HD - "0100f2c0115b6000", // The Legend of Zelda: Tears of the Kingdom - "01008cf01baac000", // The Legend of Zelda: Echoes of Wisdom - "01000b900d8b0000", // Cadence of Hyrule - "0100ae00096ea000", // Hyrule Warriors: Definitive Edition - "01002b00111a2000", // Hyrule Warriors: Age of Calamity - - "010048701995e000", // Luigi's Mansion 2 HD - "0100dca0064a6000", // Luigi's Mansion 3 - - "010093801237c000", // Metroid Dread - "010012101468c000", // Metroid Prime Remastered - - "0100000000010000", // SUPER MARIO ODYSSEY - "0100ea80032ea000", // Super Mario Bros. U Deluxe - "01009b90006dc000", // Super Mario Maker 2 - "010049900f546000", // Super Mario 3D All-Stars - "010049900F546001", // ^ 64 - "010049900F546002", // ^ Sunshine - "010049900F546003", // ^ Galaxy - "010028600ebda000", // Super Mario 3D World + Bowser's Fury - "010015100b514000", // Super Mario Bros. Wonder - "0100152000022000", // Mario Kart 8 Deluxe - "010036b0034e4000", // Super Mario Party - "01006fe013472000", // Mario Party Superstars - "0100965017338000", // Super Mario Party Jamboree - "01006d0017f7a000", // Mario & Luigi: Brothership - "010067300059a000", // Mario + Rabbids: Kingdom Battle - "0100317013770000", // Mario + Rabbids: Sparks of Hope - "0100a3900c3e2000", // Paper Mario: The Origami King - "0100ecd018ebe000", // Paper Mario: The Thousand-Year Door - "0100bc0018138000", // Super Mario RPG - "0100bde00862a000", // Mario Tennis Aces - "0100c9c00e25c000", // Mario Golf: Super Rush - "010019401051c000", // Mario Strikers: Battle League - "010003000e146000", // Mario & Sonic at the Olympic Games Tokyo 2020 - "0100b99019412000", // Mario vs. Donkey Kong - - "0100aa80194b0000", // Pikmin 1 - "0100d680194b2000", // Pikmin 2 - "0100f4c009322000", // Pikmin 3 Deluxe - "0100b7c00933a000", // Pikmin 4 - - "010003f003a34000", // Pokémon: Let's Go Pikachu! - "0100187003a36000", // Pokémon: Let's Go Eevee! - "0100abf008968000", // Pokémon Sword - "01008db008c2c000", // Pokémon Shield - "0100000011d90000", // Pokémon Brilliant Diamond - "010018e011d92000", // Pokémon Shining Pearl - "01001f5010dfa000", // Pokémon Legends: Arceus - "0100a3d008c5c000", // Pokémon Scarlet - "01008f6008c5e000", // Pokémon Violet - "0100b3f000be2000", // Pokkén Tournament DX - "0100f4300bf2c000", // New Pokémon Snap - - "01003bc0000a0000", // Splatoon 2 (US) - "0100f8f0000a2000", // Splatoon 2 (EU) - "01003c700009c000", // Splatoon 2 (JP) - "0100c2500fc20000", // Splatoon 3 - "0100ba0018500000", // Splatoon 3: Splatfest World Premiere - - "010040600c5ce000", // Tetris 99 - "0100277011f1a000", // Super Mario Bros. 35 - "0100ad9012510000", // PAC-MAN 99 - "0100ccf019c8c000", // F-ZERO 99 - "0100d870045b6000", // NES - Nintendo Switch Online - "01008d300c50c000", // SNES - Nintendo Switch Online - "0100c9a00ece6000", // N64 - Nintendo Switch Online - "0100e0601c632000", // N64 - Nintendo Switch Online 18+ - "0100c62011050000", // GB - Nintendo Switch Online - "010012f017576000", // GBA - Nintendo Switch Online - - "01000320000cc000", // 1-2 Switch - "0100300012f2a000", // Advance Wars 1+2: Re-Boot Camp - "01006f8002326000", // Animal Crossing: New Horizons - "0100620012d6e000", // Big Brain Academy: Brain vs. Brain - "010018300d006000", // BOXBOY! + BOXGIRL! - "0100c1f0051b6000", // Donkey Kong Country: Tropical Freeze - "0100ed000d390000", // Dr. Kawashima's Brain Training - "010067b017588000", // Endless Ocean Luminous - "0100d2f00d5c0000", // Nintendo Switch Sports - "01006b5012b32000", // Part Time UFO - "0100704000B3A000", // Snipperclips - "01006a800016e000", // Super Smash Bros. Ultimate - "0100a9400c9c2000", // Tokyo Mirage Sessions #FE Encore - - "010076f0049a2000", // Bayonetta - "01007960049a0000", // Bayonetta 2 - "01004a4010fea000", // Bayonetta 3 - "0100cf5010fec000", // Bayonetta Origins: Cereza and the Lost Demon - - "0100dcd01525a000", // Persona 3 Portable - "010062b01525c000", // Persona 4 Golden - "010075a016a3a000", // Persona 4 Arena Ultimax - "01005ca01580e000", // Persona 5 Royal - "0100801011c3e000", // Persona 5 Strikers - "010087701b092000", // Persona 5 Tactica - - "01009aa000faa000", // Sonic Mania - "01004ad014bf0000", // Sonic Frontiers - "01005ea01c0fc000", // SONIC X SHADOW GENERATIONS - "01005ea01c0fc001", // ^ - - "010056e00853a000", // A Hat in Time - "0100dbf01000a000", // Burnout Paradise Remastered - "0100744001588000", // Cars 3: Driven to Win - "0100b41013c82000", // Cruis'n Blast - "01001b300b9be000", // Diablo III: Eternal Collection - "01008c8012920000", // Dying Light Platinum Edition - "010073c01af34000", // LEGO Horizon Adventures - "0100770008dd8000", // Monster Hunter Generations Ultimate - "0100b04011742000", // Monster Hunter Rise - "0100853015e86000", // No Man's Sky - "01007bb017812000", // Portal - "0100abd01785c000", // Portal 2 - "01008e200c5c2000", // Muse Dash - "01007820196a6000", // Red Dead Redemption - "01002f7013224000", // Rune Factory 5 - "01008d100d43e000", // Saints Row IV - "0100de600beee000", // Saints Row: The Third - The Full Package - "01001180021fa000", // Shovel Knight: Specter of Torment - "0100d7a01b7a2000", // Star Wars: Bounty Hunter - "0100800015926000", // Suika Game - "0100e46006708000", // Terraria - "01000a10041ea000", // The Elder Scrolls V: Skyrim - "010057a01e4d4000", // TSUKIHIME -A piece of blue glass moon- - "010080b00ad66000", // Undertale - ]; } } diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 86b5eafa1..f976ecdf1 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -143,23 +143,6 @@ namespace Ryujinx.Ava public ulong ApplicationId { get; private set; } public bool ScreenshotRequested { get; set; } - public bool ShouldInitMetal - { - get - { - return OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64 && - ( - ( - ( - ConfigurationState.Instance.Graphics.GraphicsBackend.Value == GraphicsBackend.Auto && - RendererHost.KnownGreatMetalTitles.ContainsIgnoreCase(ApplicationId.ToString("X16")) - ) || - ConfigurationState.Instance.Graphics.GraphicsBackend.Value == GraphicsBackend.Metal - ) - ); - } - } - public AppHost( RendererHost renderer, InputManager inputManager, @@ -912,27 +895,20 @@ namespace Ryujinx.Ava VirtualFileSystem.ReloadKeySet(); // Initialize Renderer. - IRenderer renderer; - GraphicsBackend backend = ConfigurationState.Instance.Graphics.GraphicsBackend; + GraphicsBackend backend = TitleIDs.SelectGraphicsBackend(ApplicationId.ToString("X16"), ConfigurationState.Instance.Graphics.GraphicsBackend); - if (ShouldInitMetal) + IRenderer renderer = backend switch { #pragma warning disable CA1416 // This call site is reachable on all platforms - // The condition does a check for Mac, on top of checking if it's an ARM Mac. This isn't a problem. - renderer = new MetalRenderer((RendererHost.EmbeddedWindow as EmbeddedWindowMetal)!.CreateSurface); + // SelectGraphicsBackend does a check for Mac, on top of checking if it's an ARM Mac. This isn't a problem. + GraphicsBackend.Metal => new MetalRenderer((RendererHost.EmbeddedWindow as EmbeddedWindowMetal)!.CreateSurface), #pragma warning restore CA1416 - } - else if (backend == GraphicsBackend.Vulkan || (backend == GraphicsBackend.Auto && !ShouldInitMetal)) - { - renderer = VulkanRenderer.Create( + GraphicsBackend.Vulkan => VulkanRenderer.Create( ConfigurationState.Instance.Graphics.PreferredGpu, (RendererHost.EmbeddedWindow as EmbeddedWindowVulkan)!.CreateSurface, - VulkanHelper.GetRequiredInstanceExtensions); - } - else - { - renderer = new OpenGLRenderer(); - } + VulkanHelper.GetRequiredInstanceExtensions), + _ => new OpenGLRenderer() + }; BackendThreading threadingMode = ConfigurationState.Instance.Graphics.BackendThreading; diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs index 93481a075..71c0e1432 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs @@ -1,6 +1,7 @@ using Avalonia; using Avalonia.Controls; using Gommon; +using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.UI.Common.Configuration; @@ -31,20 +32,6 @@ namespace Ryujinx.Ava.UI.Renderer Initialize(); } - public static readonly string[] KnownGreatMetalTitles = - [ - "01006f8002326000", // Animal Crossings: New Horizons - "01009bf0072d4000", // Captain Toad: Treasure Tracker - "0100a5c00d162000", // Cuphead - "010023800d64a000", // Deltarune - "010028600EBDA000", // Mario 3D World - "0100152000022000", // Mario Kart 8 Deluxe - "01005CA01580E000", // Persona 5 - "01008C0016544000", // Sea of Stars - "01006A800016E000", // Smash Ultimate - "0100000000010000", // Super Mario Odyessy - ]; - public GraphicsBackend Backend => EmbeddedWindow switch { @@ -58,16 +45,8 @@ namespace Ryujinx.Ava.UI.Renderer { InitializeComponent(); - switch (ConfigurationState.Instance.Graphics.GraphicsBackend.Value) + switch (TitleIDs.SelectGraphicsBackend(titleId, ConfigurationState.Instance.Graphics.GraphicsBackend)) { - case GraphicsBackend.Auto: - EmbeddedWindow = - OperatingSystem.IsMacOS() && - RuntimeInformation.ProcessArchitecture == Architecture.Arm64 && - KnownGreatMetalTitles.ContainsIgnoreCase(titleId) - ? new EmbeddedWindowMetal() - : new EmbeddedWindowVulkan(); - break; case GraphicsBackend.OpenGl: EmbeddedWindow = new EmbeddedWindowOpenGL(); break; -- 2.47.1 From c9b2a6b1f155b45ee7385be0e1532a1c95fd13a8 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 26 Dec 2024 22:42:39 -0600 Subject: [PATCH 177/722] metal: Try and see if this lets VSync turn off. (cherry picked from commit 9558b3771634d144501dedf3f081afc485a49d9d) --- Ryujinx.sln | 11 ++++++++-- .../CAMetalLayerExtensions.cs | 21 +++++++++++++++++++ ...Graphics.Metal.SharpMetalExtensions.csproj | 10 +++++++++ .../Ryujinx.Graphics.Metal.csproj | 9 +++----- src/Ryujinx.Graphics.Metal/Window.cs | 11 +++++++++- 5 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs create mode 100644 src/Ryujinx.Graphics.Metal.SharpMetalExtensions/Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj diff --git a/Ryujinx.sln b/Ryujinx.sln index 71d5f6dd9..e9f57df39 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -80,11 +80,16 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Generators", "src\Ryujinx.Horizon.Kernel.Generators\Ryujinx.Horizon.Kernel.Generators.csproj", "{7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal", "src\Ryujinx.Graphics.Metal\Ryujinx.Graphics.Metal.csproj", "{C08931FA-1191-417A-864F-3882D93E683B}" ProjectSection(ProjectDependencies) = postProject {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} = {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal.SharpMetalExtensions", "src/Ryujinx.Graphics.Metal.SharpMetalExtensions\Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj", "{81EA598C-DBA1-40B0-8DA4-4796B78F2037}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig @@ -94,8 +99,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .github\workflows\release.yml = .github\workflows\release.yml EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -265,6 +268,10 @@ Global {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs new file mode 100644 index 000000000..361419658 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs @@ -0,0 +1,21 @@ +using SharpMetal; +using SharpMetal.ObjectiveCCore; +using SharpMetal.QuartzCore; +using System.Runtime.Versioning; +// ReSharper disable InconsistentNaming + +namespace Ryujinx.Graphics.Metal.SharpMetalExtensions +{ + [SupportedOSPlatform("OSX")] + public static class CAMetalLayerExtensions + { + private static readonly Selector sel_displaySyncEnabled = "displaySyncEnabled"; + private static readonly Selector sel_setDisplaySyncEnabled = "setDisplaySyncEnabled:"; + + public static bool IsDisplaySyncEnabled(this CAMetalLayer metalLayer) + => ObjectiveCRuntime.bool_objc_msgSend(metalLayer.NativePtr, sel_displaySyncEnabled); + + public static void SetDisplaySyncEnabled(this CAMetalLayer metalLayer, bool enabled) + => ObjectiveCRuntime.objc_msgSend(metalLayer.NativePtr, sel_setDisplaySyncEnabled, enabled); + } +} diff --git a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj new file mode 100644 index 000000000..9836063a3 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj @@ -0,0 +1,10 @@ + + + enable + enable + + + + + + diff --git a/src/Ryujinx.Graphics.Metal/Ryujinx.Graphics.Metal.csproj b/src/Ryujinx.Graphics.Metal/Ryujinx.Graphics.Metal.csproj index 02afb150a..364aa5a8b 100644 --- a/src/Ryujinx.Graphics.Metal/Ryujinx.Graphics.Metal.csproj +++ b/src/Ryujinx.Graphics.Metal/Ryujinx.Graphics.Metal.csproj @@ -5,12 +5,9 @@ - - - - - - + + + diff --git a/src/Ryujinx.Graphics.Metal/Window.cs b/src/Ryujinx.Graphics.Metal/Window.cs index 65a47d217..29099e7b1 100644 --- a/src/Ryujinx.Graphics.Metal/Window.cs +++ b/src/Ryujinx.Graphics.Metal/Window.cs @@ -1,6 +1,7 @@ using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Metal.Effects; +using Ryujinx.Graphics.Metal.SharpMetalExtensions; using SharpMetal.ObjectiveCCore; using SharpMetal.QuartzCore; using System; @@ -140,7 +141,15 @@ namespace Ryujinx.Graphics.Metal public void ChangeVSyncMode(VSyncMode vSyncMode) { - //_vSyncMode = vSyncMode; + switch (vSyncMode) + { + case VSyncMode.Unbounded: + _metalLayer.SetDisplaySyncEnabled(false); + break; + case VSyncMode.Switch: + _metalLayer.SetDisplaySyncEnabled(true); + break; + } } public void SetAntiAliasing(AntiAliasing effect) -- 2.47.1 From d7b3dd12d14ef0409d9dd59328b9fcfcba8ab495 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 26 Dec 2024 22:58:49 -0600 Subject: [PATCH 178/722] UI: Set title bar icon to the already loaded one --- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml | 3 +-- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 8207f8e03..2c07bd8ef 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -17,8 +17,7 @@ Margin="7, 0" Height="25" Width="25" - ToolTip.Tip="{Binding Title}" - Source="resm:Ryujinx.UI.Common.Resources.Logo_Ryujinx_AntiAlias.png?assembly=Ryujinx.UI.Common" /> + ToolTip.Tip="{Binding Title}" /> Date: Thu, 26 Dec 2024 23:13:35 -0600 Subject: [PATCH 179/722] UI: Redirect IME errors to Debug instead of error --- src/Ryujinx/UI/Helpers/LoggerAdapter.cs | 10 +++++----- src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx/UI/Helpers/LoggerAdapter.cs b/src/Ryujinx/UI/Helpers/LoggerAdapter.cs index 7982c17a6..2d26bd090 100644 --- a/src/Ryujinx/UI/Helpers/LoggerAdapter.cs +++ b/src/Ryujinx/UI/Helpers/LoggerAdapter.cs @@ -19,7 +19,7 @@ namespace Ryujinx.Ava.UI.Helpers AvaLogger.Sink = new LoggerAdapter(); } - private static RyuLogger.Log? GetLog(AvaLogLevel level) + private static RyuLogger.Log? GetLog(AvaLogLevel level, string area) { return level switch { @@ -27,7 +27,7 @@ namespace Ryujinx.Ava.UI.Helpers AvaLogLevel.Debug => RyuLogger.Debug, AvaLogLevel.Information => RyuLogger.Debug, AvaLogLevel.Warning => RyuLogger.Debug, - AvaLogLevel.Error => RyuLogger.Error, + AvaLogLevel.Error => area is "IME" ? RyuLogger.Debug : RyuLogger.Error, AvaLogLevel.Fatal => RyuLogger.Error, _ => throw new ArgumentOutOfRangeException(nameof(level), level, null), }; @@ -35,17 +35,17 @@ namespace Ryujinx.Ava.UI.Helpers public bool IsEnabled(AvaLogLevel level, string area) { - return GetLog(level) != null; + return GetLog(level, area) != null; } public void Log(AvaLogLevel level, string area, object source, string messageTemplate) { - GetLog(level)?.PrintMsg(RyuLogClass.UI, Format(level, area, messageTemplate, source, null)); + GetLog(level, area)?.PrintMsg(RyuLogClass.UI, Format(level, area, messageTemplate, source, null)); } public void Log(AvaLogLevel level, string area, object source, string messageTemplate, params object[] propertyValues) { - GetLog(level)?.PrintMsg(RyuLogClass.UI, Format(level, area, messageTemplate, source, propertyValues)); + GetLog(level, area)?.PrintMsg(RyuLogClass.UI, Format(level, area, messageTemplate, source, propertyValues)); } private static string Format(AvaLogLevel level, string area, string template, object source, object[] v) diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml index 6871fd3f9..a0259c723 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml @@ -7,7 +7,6 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" - xmlns:local="clr-namespace:Ryujinx.Ava.UI.Views.Main" xmlns:config="clr-namespace:Ryujinx.Common.Configuration;assembly=Ryujinx.Common" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Ryujinx.Ava.UI.Views.Main.MainStatusBarView" -- 2.47.1 From 9754d247b59a064f9888423ef6c227c6f209e784 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 26 Dec 2024 23:32:53 -0600 Subject: [PATCH 180/722] UI: Directly proxy window properties on the view model back to the stored window --- src/Ryujinx/RyujinxApp.axaml.cs | 7 +-- .../UI/ViewModels/MainWindowViewModel.cs | 45 +++++-------------- src/Ryujinx/UI/Windows/MainWindow.axaml | 5 --- 3 files changed, 14 insertions(+), 43 deletions(-) diff --git a/src/Ryujinx/RyujinxApp.axaml.cs b/src/Ryujinx/RyujinxApp.axaml.cs index bbef20aa0..c2f92f2f7 100644 --- a/src/Ryujinx/RyujinxApp.axaml.cs +++ b/src/Ryujinx/RyujinxApp.axaml.cs @@ -33,11 +33,8 @@ namespace Ryujinx.Ava .ApplicationLifetime.Cast() .MainWindow.Cast(); - public static bool IsClipboardAvailable(out IClipboard clipboard) - { - clipboard = MainWindow.Clipboard; - return clipboard != null; - } + public static bool IsClipboardAvailable(out IClipboard clipboard) + => (clipboard = MainWindow.Clipboard) != null; public static void SetTaskbarProgress(TaskBarProgressBarState state) => MainWindow.PlatformFeatures.SetTaskBarProgressBarState(state); public static void SetTaskbarProgressValue(ulong current, ulong total) => MainWindow.PlatformFeatures.SetTaskBarProgressBarValue(current, total); diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 04881b58d..d0ea64c37 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -109,13 +109,8 @@ namespace Ryujinx.Ava.UI.ViewModels private bool _areMimeTypesRegistered = FileAssociationHelper.AreMimeTypesRegistered; private bool _canUpdate = true; - private Cursor _cursor; - private string _title; private ApplicationData _currentApplicationData; private readonly AutoResetEvent _rendererWaitEvent; - private WindowState _windowState; - private double _windowWidth; - private double _windowHeight; private int _customVSyncInterval; private int _customVSyncIntervalPercentageProxy; @@ -216,7 +211,7 @@ namespace Ryujinx.Ava.UI.ViewModels public bool CanUpdate { - get => _canUpdate && EnableNonGameRunningControls && Updater.CanUpdate(false); + get => _canUpdate && EnableNonGameRunningControls && Updater.CanUpdate(); set { _canUpdate = value; @@ -226,12 +221,8 @@ namespace Ryujinx.Ava.UI.ViewModels public Cursor Cursor { - get => _cursor; - set - { - _cursor = value; - OnPropertyChanged(); - } + get => Window.Cursor; + set => Window.Cursor = value; } public ReadOnlyObservableCollection AppsObservableList @@ -813,35 +804,23 @@ namespace Ryujinx.Ava.UI.ViewModels public WindowState WindowState { - get => _windowState; + get => Window.WindowState; internal set { - _windowState = value; - - OnPropertyChanged(); + Window.WindowState = value; } } public double WindowWidth { - get => _windowWidth; - set - { - _windowWidth = value; - - OnPropertyChanged(); - } + get => Window.Width; + set => Window.Width = value; } public double WindowHeight { - get => _windowHeight; - set - { - _windowHeight = value; - - OnPropertyChanged(); - } + get => Window.Height; + set => Window.Height = value; } public bool IsGrid => Glyph == Glyph.Grid; @@ -889,11 +868,11 @@ namespace Ryujinx.Ava.UI.ViewModels public string Title { - get => _title; + get => Window.Title; set { - _title = value; - + Window.Title = value; + OnPropertyChanged(); } } diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml b/src/Ryujinx/UI/Windows/MainWindow.axaml index cb2e5936d..e3b6cf912 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml @@ -9,11 +9,6 @@ xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls" xmlns:main="clr-namespace:Ryujinx.Ava.UI.Views.Main" - Cursor="{Binding Cursor}" - Title="{Binding Title}" - WindowState="{Binding WindowState}" - Width="{Binding WindowWidth}" - Height="{Binding WindowHeight}" MinWidth="800" MinHeight="500" d:DesignHeight="720" -- 2.47.1 From c73b5bdf4604be24a6ae78c4aa5b5ae94ec0e6fa Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Thu, 26 Dec 2024 23:58:55 -0600 Subject: [PATCH 181/722] metal: wip: allow getting/setting developerHUDProperies --- .../CAMetalLayerExtensions.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs index 361419658..91e94fb2c 100644 --- a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs +++ b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs @@ -6,16 +6,25 @@ using System.Runtime.Versioning; namespace Ryujinx.Graphics.Metal.SharpMetalExtensions { - [SupportedOSPlatform("OSX")] + [SupportedOSPlatform("macOS")] public static class CAMetalLayerExtensions { private static readonly Selector sel_displaySyncEnabled = "displaySyncEnabled"; private static readonly Selector sel_setDisplaySyncEnabled = "setDisplaySyncEnabled:"; + private static readonly Selector sel_developerHUDProperties = "developerHUDProperties"; + private static readonly Selector sel_setDeveloperHUDProperties = "setDeveloperHUDProperties:"; + public static bool IsDisplaySyncEnabled(this CAMetalLayer metalLayer) => ObjectiveCRuntime.bool_objc_msgSend(metalLayer.NativePtr, sel_displaySyncEnabled); public static void SetDisplaySyncEnabled(this CAMetalLayer metalLayer, bool enabled) => ObjectiveCRuntime.objc_msgSend(metalLayer.NativePtr, sel_setDisplaySyncEnabled, enabled); + + public static nint GetDeveloperHudProperties(this CAMetalLayer metalLayer) + => ObjectiveCRuntime.IntPtr_objc_msgSend(metalLayer.NativePtr, sel_developerHUDProperties); + + public static void SetDeveloperHudProperties(this CAMetalLayer metalLayer, nint dictionaryPointer) + => ObjectiveCRuntime.objc_msgSend(metalLayer.NativePtr, sel_setDisplaySyncEnabled, dictionaryPointer); } } -- 2.47.1 From 9df1366fa1d6c149e46148215cb32aad3fa48648 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 00:00:29 -0600 Subject: [PATCH 182/722] I may be stu-- nah. I am here. I am stupid for this one. --- .../CAMetalLayerExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs index 91e94fb2c..0d29a502b 100644 --- a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs +++ b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs @@ -25,6 +25,6 @@ namespace Ryujinx.Graphics.Metal.SharpMetalExtensions => ObjectiveCRuntime.IntPtr_objc_msgSend(metalLayer.NativePtr, sel_developerHUDProperties); public static void SetDeveloperHudProperties(this CAMetalLayer metalLayer, nint dictionaryPointer) - => ObjectiveCRuntime.objc_msgSend(metalLayer.NativePtr, sel_setDisplaySyncEnabled, dictionaryPointer); + => ObjectiveCRuntime.objc_msgSend(metalLayer.NativePtr, sel_setDeveloperHUDProperties, dictionaryPointer); } } -- 2.47.1 From 0733b7d0a1bdfe4063af2c9d73528d03b62f02fe Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 00:38:12 -0600 Subject: [PATCH 183/722] chore: Remove duplicate VSyncMode enum in GAL --- src/Ryujinx.Graphics.GAL/IWindow.cs | 1 + .../Multithreading/ThreadedWindow.cs | 1 + src/Ryujinx.Graphics.GAL/VSyncMode.cs | 9 --------- src/Ryujinx.Graphics.Metal/Window.cs | 3 +++ src/Ryujinx.Graphics.OpenGL/Window.cs | 3 +++ src/Ryujinx.Graphics.Vulkan/Window.cs | 3 +++ src/Ryujinx.Graphics.Vulkan/WindowBase.cs | 3 +++ src/Ryujinx.HLE/HLEConfiguration.cs | 1 - .../HOS/Services/SurfaceFlinger/SurfaceFlinger.cs | 1 - 9 files changed, 14 insertions(+), 11 deletions(-) delete mode 100644 src/Ryujinx.Graphics.GAL/VSyncMode.cs diff --git a/src/Ryujinx.Graphics.GAL/IWindow.cs b/src/Ryujinx.Graphics.GAL/IWindow.cs index 12686cb28..48144f0b0 100644 --- a/src/Ryujinx.Graphics.GAL/IWindow.cs +++ b/src/Ryujinx.Graphics.GAL/IWindow.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common.Configuration; using System; namespace Ryujinx.Graphics.GAL diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs index 102fdb1bb..7a4836982 100644 --- a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs +++ b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common.Configuration; using Ryujinx.Graphics.GAL.Multithreading.Commands.Window; using Ryujinx.Graphics.GAL.Multithreading.Model; using Ryujinx.Graphics.GAL.Multithreading.Resources; diff --git a/src/Ryujinx.Graphics.GAL/VSyncMode.cs b/src/Ryujinx.Graphics.GAL/VSyncMode.cs deleted file mode 100644 index c5794b8f7..000000000 --- a/src/Ryujinx.Graphics.GAL/VSyncMode.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Ryujinx.Graphics.GAL -{ - public enum VSyncMode - { - Switch, - Unbounded, - Custom - } -} diff --git a/src/Ryujinx.Graphics.Metal/Window.cs b/src/Ryujinx.Graphics.Metal/Window.cs index 29099e7b1..203a29ebc 100644 --- a/src/Ryujinx.Graphics.Metal/Window.cs +++ b/src/Ryujinx.Graphics.Metal/Window.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Metal.Effects; @@ -6,6 +7,8 @@ using SharpMetal.ObjectiveCCore; using SharpMetal.QuartzCore; using System; using System.Runtime.Versioning; +using AntiAliasing = Ryujinx.Graphics.GAL.AntiAliasing; +using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter; namespace Ryujinx.Graphics.Metal { diff --git a/src/Ryujinx.Graphics.OpenGL/Window.cs b/src/Ryujinx.Graphics.OpenGL/Window.cs index 1dc8a51f6..8c35663ab 100644 --- a/src/Ryujinx.Graphics.OpenGL/Window.cs +++ b/src/Ryujinx.Graphics.OpenGL/Window.cs @@ -1,9 +1,12 @@ using OpenTK.Graphics.OpenGL; +using Ryujinx.Common.Configuration; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.OpenGL.Effects; using Ryujinx.Graphics.OpenGL.Effects.Smaa; using Ryujinx.Graphics.OpenGL.Image; using System; +using AntiAliasing = Ryujinx.Graphics.GAL.AntiAliasing; +using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter; namespace Ryujinx.Graphics.OpenGL { diff --git a/src/Ryujinx.Graphics.Vulkan/Window.cs b/src/Ryujinx.Graphics.Vulkan/Window.cs index 3e8d3b375..d135d0076 100644 --- a/src/Ryujinx.Graphics.Vulkan/Window.cs +++ b/src/Ryujinx.Graphics.Vulkan/Window.cs @@ -1,9 +1,12 @@ +using Ryujinx.Common.Configuration; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Vulkan.Effects; using Silk.NET.Vulkan; using Silk.NET.Vulkan.Extensions.KHR; using System; using System.Linq; +using AntiAliasing = Ryujinx.Graphics.GAL.AntiAliasing; +using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter; using VkFormat = Silk.NET.Vulkan.Format; namespace Ryujinx.Graphics.Vulkan diff --git a/src/Ryujinx.Graphics.Vulkan/WindowBase.cs b/src/Ryujinx.Graphics.Vulkan/WindowBase.cs index ca06ec0b8..807bb65e5 100644 --- a/src/Ryujinx.Graphics.Vulkan/WindowBase.cs +++ b/src/Ryujinx.Graphics.Vulkan/WindowBase.cs @@ -1,5 +1,8 @@ +using Ryujinx.Common.Configuration; using Ryujinx.Graphics.GAL; using System; +using AntiAliasing = Ryujinx.Graphics.GAL.AntiAliasing; +using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter; namespace Ryujinx.Graphics.Vulkan { diff --git a/src/Ryujinx.HLE/HLEConfiguration.cs b/src/Ryujinx.HLE/HLEConfiguration.cs index f75ead588..52c2b3da4 100644 --- a/src/Ryujinx.HLE/HLEConfiguration.cs +++ b/src/Ryujinx.HLE/HLEConfiguration.cs @@ -9,7 +9,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.UI; using System; -using VSyncMode = Ryujinx.Common.Configuration.VSyncMode; namespace Ryujinx.HLE { diff --git a/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs b/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs index 23bf8bcfc..935e9895e 100644 --- a/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs +++ b/src/Ryujinx.HLE/HOS/Services/SurfaceFlinger/SurfaceFlinger.cs @@ -10,7 +10,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading; -using VSyncMode = Ryujinx.Common.Configuration.VSyncMode; namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger { -- 2.47.1 From 1bc0159139cedcdcf2010d55adef97bad06f750f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 00:41:50 -0600 Subject: [PATCH 184/722] Once again, I am stupid --- src/Ryujinx/AppHost.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index f976ecdf1..9a9c1d226 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -311,7 +311,7 @@ namespace Ryujinx.Ava Device.VSyncMode = e.NewValue; Device.UpdateVSyncInterval(); } - _renderer.Window?.ChangeVSyncMode((Ryujinx.Graphics.GAL.VSyncMode)e.NewValue); + _renderer.Window?.ChangeVSyncMode(e.NewValue); _viewModel.ShowCustomVSyncIntervalPicker = (e.NewValue == VSyncMode.Custom); } @@ -1074,7 +1074,7 @@ namespace Ryujinx.Ava Device.Gpu.SetGpuThread(); Device.Gpu.InitializeShaderCache(_gpuCancellationTokenSource.Token); - _renderer.Window.ChangeVSyncMode((Ryujinx.Graphics.GAL.VSyncMode)Device.VSyncMode); + _renderer.Window.ChangeVSyncMode(Device.VSyncMode); while (_isActive) { -- 2.47.1 From c69881a0a22104986a7141f40f8c4dd0e2963f09 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 00:47:57 -0600 Subject: [PATCH 185/722] UI: chore: remove direct static MainWindowViewModel reference --- src/Ryujinx/UI/Models/SaveModel.cs | 3 ++- src/Ryujinx/UI/ViewModels/SettingsViewModel.cs | 2 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 4 +--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx/UI/Models/SaveModel.cs b/src/Ryujinx/UI/Models/SaveModel.cs index cfc397c6e..578538d21 100644 --- a/src/Ryujinx/UI/Models/SaveModel.cs +++ b/src/Ryujinx/UI/Models/SaveModel.cs @@ -1,3 +1,4 @@ +using Gommon; using LibHac.Fs; using LibHac.Ncm; using Ryujinx.Ava.UI.ViewModels; @@ -47,7 +48,7 @@ namespace Ryujinx.Ava.UI.Models TitleId = info.ProgramId; UserId = info.UserId; - var appData = MainWindow.MainWindowViewModel.Applications.FirstOrDefault(x => x.IdString.Equals(TitleIdString, StringComparison.OrdinalIgnoreCase)); + var appData = RyujinxApp.MainWindow.ViewModel.Applications.FirstOrDefault(x => x.IdString.EqualsIgnoreCase(TitleIdString)); InGameList = appData != null; diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 7504147b2..9feaaba9b 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -750,7 +750,7 @@ namespace Ryujinx.Ava.UI.ViewModels config.ToFileFormat().SaveConfig(Program.ConfigurationPath); MainWindow.UpdateGraphicsConfig(); - MainWindow.MainWindowViewModel.VSyncModeSettingChanged(); + RyujinxApp.MainWindow.ViewModel.VSyncModeSettingChanged(); SaveSettingsEvent?.Invoke(); diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 660caa605..ca91b180f 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -39,8 +39,6 @@ namespace Ryujinx.Ava.UI.Windows { public partial class MainWindow : StyleableAppWindow { - internal static MainWindowViewModel MainWindowViewModel { get; private set; } - public MainWindowViewModel ViewModel { get; } internal readonly AvaHostUIHandler UiHandler; @@ -76,7 +74,7 @@ namespace Ryujinx.Ava.UI.Windows public MainWindow() { - DataContext = ViewModel = MainWindowViewModel = new MainWindowViewModel + DataContext = ViewModel = new MainWindowViewModel { Window = this }; -- 2.47.1 From d3bc3a1081863d07fc8d4bdc48e6b69fafa5e41c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 01:32:23 -0600 Subject: [PATCH 186/722] UI: Simplify LDN data logic --- src/Ryujinx.UI.Common/App/ApplicationData.cs | 2 ++ .../App/ApplicationLibrary.cs | 9 ++++--- src/Ryujinx.UI.Common/App/LdnGameDataList.cs | 24 +++++++++++++++++++ .../UI/ViewModels/MainWindowViewModel.cs | 6 +++-- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 18 ++++++++------ 5 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 src/Ryujinx.UI.Common/App/LdnGameDataList.cs diff --git a/src/Ryujinx.UI.Common/App/ApplicationData.cs b/src/Ryujinx.UI.Common/App/ApplicationData.cs index 657b9a022..ee5545dde 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationData.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationData.cs @@ -36,6 +36,8 @@ namespace Ryujinx.UI.App.Common public string Path { get; set; } public BlitStruct ControlHolder { get; set; } + public bool HasControlHolder => ControlHolder.ByteSpan.Length > 0; + public string TimePlayedString => ValueFormatUtils.FormatTimeSpan(TimePlayed); public string LastPlayedString => ValueFormatUtils.FormatDateTime(LastPlayed)?.Replace(" ", "\n") ?? LocalizedNever(); diff --git a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs index cb6467f5e..e78af3121 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs @@ -789,16 +789,15 @@ namespace Ryujinx.UI.App.Common using HttpClient httpClient = new HttpClient(); string ldnGameDataArrayString = await httpClient.GetStringAsync($"https://{ldnWebHost}/api/public_games"); ldnGameDataArray = JsonHelper.Deserialize(ldnGameDataArrayString, _ldnDataSerializerContext.IEnumerableLdnGameData); - var evt = new LdnGameDataReceivedEventArgs + LdnGameDataReceived?.Invoke(null, new LdnGameDataReceivedEventArgs { LdnData = ldnGameDataArray - }; - LdnGameDataReceived?.Invoke(null, evt); + }); } catch (Exception ex) { Logger.Warning?.Print(LogClass.Application, $"Failed to fetch the public games JSON from the API. Player and game count in the game list will be unavailable.\n{ex.Message}"); - LdnGameDataReceived?.Invoke(null, new LdnGameDataReceivedEventArgs() + LdnGameDataReceived?.Invoke(null, new LdnGameDataReceivedEventArgs { LdnData = Array.Empty() }); @@ -806,7 +805,7 @@ namespace Ryujinx.UI.App.Common } else { - LdnGameDataReceived?.Invoke(null, new LdnGameDataReceivedEventArgs() + LdnGameDataReceived?.Invoke(null, new LdnGameDataReceivedEventArgs { LdnData = Array.Empty() }); diff --git a/src/Ryujinx.UI.Common/App/LdnGameDataList.cs b/src/Ryujinx.UI.Common/App/LdnGameDataList.cs new file mode 100644 index 000000000..d98fd081d --- /dev/null +++ b/src/Ryujinx.UI.Common/App/LdnGameDataList.cs @@ -0,0 +1,24 @@ +using LibHac.Ns; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Ryujinx.UI.App.Common +{ + public class LdnGameDataArray + { + private readonly LdnGameData[] _ldnDatas; + + public LdnGameDataArray(IEnumerable receivedData, ref ApplicationControlProperty acp) + { + LibHac.Common.FixedArrays.Array8 communicationId = acp.LocalCommunicationId; + + _ldnDatas = receivedData.Where(game => + communicationId.Items.Contains(Convert.ToUInt64(game.TitleId, 16)) + ).ToArray(); + } + + public int PlayerCount => _ldnDatas.Sum(it => it.PlayerCount); + public int GameCount => _ldnDatas.Length; + } +} diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index d0ea64c37..3b98a7aa3 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -9,6 +9,7 @@ using Avalonia.Threading; using DynamicData; using DynamicData.Binding; using FluentAvalonia.UI.Controls; +using Gommon; using LibHac.Common; using LibHac.Ns; using Ryujinx.Ava.Common; @@ -119,8 +120,9 @@ namespace Ryujinx.Ava.UI.ViewModels public ApplicationData ListSelectedApplication; public ApplicationData GridSelectedApplication; - - public IEnumerable LastLdnGameData; + + // Key is Title ID + public SafeDictionary LdnData = []; // The UI specifically uses a thicker bordered variant of the icon to avoid crunching out the border at lower resolutions. // For an example of this, download canary 1.2.95, then open the settings menu, and look at the icon in the top-left. diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index ca91b180f..832674541 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -167,24 +167,28 @@ namespace Ryujinx.Ava.UI.Windows { Dispatcher.UIThread.Post(() => { - var ldnGameDataArray = e.LdnData; - ViewModel.LastLdnGameData = ldnGameDataArray; + var ldnGameDataArray = e.LdnData.ToList(); + ViewModel.LdnData.Clear(); foreach (var application in ViewModel.Applications) { + ViewModel.LdnData[application.IdString] = new LdnGameDataArray( + ldnGameDataArray, + ref application.ControlHolder.Value + ); + UpdateApplicationWithLdnData(application); } + ViewModel.RefreshView(); }); } private void UpdateApplicationWithLdnData(ApplicationData application) { - if (application.ControlHolder.ByteSpan.Length > 0 && ViewModel.LastLdnGameData != null) + if (application.HasControlHolder && ViewModel.LdnData.TryGetValue(application.IdString, out var ldnGameDatas)) { - IEnumerable ldnGameData = ViewModel.LastLdnGameData.Where(game => application.ControlHolder.Value.LocalCommunicationId.Items.Contains(Convert.ToUInt64(game.TitleId, 16))); - - application.PlayerCount = ldnGameData.Sum(game => game.PlayerCount); - application.GameCount = ldnGameData.Count(); + application.PlayerCount = ldnGameDatas.PlayerCount; + application.GameCount = ldnGameDatas.GameCount; } else { -- 2.47.1 From 4c646721d6b57d462186f96de69b88de5f9f314e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 01:38:51 -0600 Subject: [PATCH 187/722] infra: Testing moving canary to the future home of this fork --- .github/workflows/canary.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 3100671e9..cc57e7d5b 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -21,7 +21,7 @@ env: DOTNET_CLI_TELEMETRY_OPTOUT: 1 RYUJINX_BASE_VERSION: "1.2" RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "canary" - RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "GreemDev" + RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Hydra-NX" RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO: "Ryujinx" RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Ryujinx-Canary" RELEASE: 1 -- 2.47.1 From 01c2e67334fc84ebc781c9413aa7f3f7a5203555 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 01:41:48 -0600 Subject: [PATCH 188/722] lol --- .github/workflows/canary.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index cc57e7d5b..03247ff6d 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -23,7 +23,7 @@ env: RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "canary" RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Hydra-NX" RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO: "Ryujinx" - RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Ryujinx-Canary" + RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Canary-Releases" RELEASE: 1 jobs: -- 2.47.1 From ccddaa77d1dd422dd8f09dc8f89ab5e4704f8b30 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 01:59:29 -0600 Subject: [PATCH 189/722] infra: Org --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 59c31c71b..825a23ae6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ env: DOTNET_CLI_TELEMETRY_OPTOUT: 1 RYUJINX_BASE_VERSION: "1.2" RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "release" - RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "GreemDev" + RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Hydra-NX" RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Ryujinx" RELEASE: 1 -- 2.47.1 From 9eb273a0f754ac50de1485e3d5782652993af647 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 02:05:37 -0600 Subject: [PATCH 190/722] Org rename (they call me indecisive) --- .github/workflows/canary.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 03247ff6d..ffbf1ebf7 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -21,7 +21,7 @@ env: DOTNET_CLI_TELEMETRY_OPTOUT: 1 RYUJINX_BASE_VERSION: "1.2" RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "canary" - RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Hydra-NX" + RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Ryubing" RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO: "Ryujinx" RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Canary-Releases" RELEASE: 1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 825a23ae6..066b978c5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ env: DOTNET_CLI_TELEMETRY_OPTOUT: 1 RYUJINX_BASE_VERSION: "1.2" RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "release" - RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Hydra-NX" + RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Ryubing" RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Ryujinx" RELEASE: 1 -- 2.47.1 From 07074272ca327cb3ae1c2d34c0d5bbef290e6d26 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 15:24:57 -0600 Subject: [PATCH 191/722] Revert "UI: Directly proxy window properties on the view model back to the stored window" This reverts commit 9754d247b59a064f9888423ef6c227c6f209e784. --- src/Ryujinx/RyujinxApp.axaml.cs | 7 ++- .../UI/ViewModels/MainWindowViewModel.cs | 45 ++++++++++++++----- src/Ryujinx/UI/Windows/MainWindow.axaml | 5 +++ 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/Ryujinx/RyujinxApp.axaml.cs b/src/Ryujinx/RyujinxApp.axaml.cs index c2f92f2f7..bbef20aa0 100644 --- a/src/Ryujinx/RyujinxApp.axaml.cs +++ b/src/Ryujinx/RyujinxApp.axaml.cs @@ -33,8 +33,11 @@ namespace Ryujinx.Ava .ApplicationLifetime.Cast() .MainWindow.Cast(); - public static bool IsClipboardAvailable(out IClipboard clipboard) - => (clipboard = MainWindow.Clipboard) != null; + public static bool IsClipboardAvailable(out IClipboard clipboard) + { + clipboard = MainWindow.Clipboard; + return clipboard != null; + } public static void SetTaskbarProgress(TaskBarProgressBarState state) => MainWindow.PlatformFeatures.SetTaskBarProgressBarState(state); public static void SetTaskbarProgressValue(ulong current, ulong total) => MainWindow.PlatformFeatures.SetTaskBarProgressBarValue(current, total); diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 3b98a7aa3..39799c117 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -110,8 +110,13 @@ namespace Ryujinx.Ava.UI.ViewModels private bool _areMimeTypesRegistered = FileAssociationHelper.AreMimeTypesRegistered; private bool _canUpdate = true; + private Cursor _cursor; + private string _title; private ApplicationData _currentApplicationData; private readonly AutoResetEvent _rendererWaitEvent; + private WindowState _windowState; + private double _windowWidth; + private double _windowHeight; private int _customVSyncInterval; private int _customVSyncIntervalPercentageProxy; @@ -213,7 +218,7 @@ namespace Ryujinx.Ava.UI.ViewModels public bool CanUpdate { - get => _canUpdate && EnableNonGameRunningControls && Updater.CanUpdate(); + get => _canUpdate && EnableNonGameRunningControls && Updater.CanUpdate(false); set { _canUpdate = value; @@ -223,8 +228,12 @@ namespace Ryujinx.Ava.UI.ViewModels public Cursor Cursor { - get => Window.Cursor; - set => Window.Cursor = value; + get => _cursor; + set + { + _cursor = value; + OnPropertyChanged(); + } } public ReadOnlyObservableCollection AppsObservableList @@ -806,23 +815,35 @@ namespace Ryujinx.Ava.UI.ViewModels public WindowState WindowState { - get => Window.WindowState; + get => _windowState; internal set { - Window.WindowState = value; + _windowState = value; + + OnPropertyChanged(); } } public double WindowWidth { - get => Window.Width; - set => Window.Width = value; + get => _windowWidth; + set + { + _windowWidth = value; + + OnPropertyChanged(); + } } public double WindowHeight { - get => Window.Height; - set => Window.Height = value; + get => _windowHeight; + set + { + _windowHeight = value; + + OnPropertyChanged(); + } } public bool IsGrid => Glyph == Glyph.Grid; @@ -870,11 +891,11 @@ namespace Ryujinx.Ava.UI.ViewModels public string Title { - get => Window.Title; + get => _title; set { - Window.Title = value; - + _title = value; + OnPropertyChanged(); } } diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml b/src/Ryujinx/UI/Windows/MainWindow.axaml index e3b6cf912..cb2e5936d 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml @@ -9,6 +9,11 @@ xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls" xmlns:main="clr-namespace:Ryujinx.Ava.UI.Views.Main" + Cursor="{Binding Cursor}" + Title="{Binding Title}" + WindowState="{Binding WindowState}" + Width="{Binding WindowWidth}" + Height="{Binding WindowHeight}" MinWidth="800" MinHeight="500" d:DesignHeight="720" -- 2.47.1 From 56e45ae64861b3d0b61b7e918e7c4c9aad94a0a5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 15:33:31 -0600 Subject: [PATCH 192/722] misc: Collapse LdnGameDataArray into the main class as an inner class - privated the constructor; only obtainable by the static helper on the main LdnGameData class. - constructor logic now in the static helper; constructor just directly sets the data it's given. --- src/Ryujinx.UI.Common/App/LdnGameData.cs | 26 +++++++++++++++++++ src/Ryujinx.UI.Common/App/LdnGameDataList.cs | 24 ----------------- .../UI/ViewModels/MainWindowViewModel.cs | 2 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 9 ++++--- 4 files changed, 33 insertions(+), 28 deletions(-) delete mode 100644 src/Ryujinx.UI.Common/App/LdnGameDataList.cs diff --git a/src/Ryujinx.UI.Common/App/LdnGameData.cs b/src/Ryujinx.UI.Common/App/LdnGameData.cs index 6c784c991..f7a98e136 100644 --- a/src/Ryujinx.UI.Common/App/LdnGameData.cs +++ b/src/Ryujinx.UI.Common/App/LdnGameData.cs @@ -1,4 +1,7 @@ +using LibHac.Ns; +using System; using System.Collections.Generic; +using System.Linq; namespace Ryujinx.UI.App.Common { @@ -12,5 +15,28 @@ namespace Ryujinx.UI.App.Common public string Mode { get; set; } public string Status { get; set; } public IEnumerable Players { get; set; } + + public static Array GetArrayForApp( + IEnumerable receivedData, ref ApplicationControlProperty acp) + { + LibHac.Common.FixedArrays.Array8 communicationId = acp.LocalCommunicationId; + + return new Array(receivedData.Where(game => + communicationId.Items.Contains(Convert.ToUInt64(game.TitleId, 16)) + )); + } + + public class Array + { + private readonly LdnGameData[] _ldnDatas; + + internal Array(IEnumerable receivedData) + { + _ldnDatas = receivedData.ToArray(); + } + + public int PlayerCount => _ldnDatas.Sum(it => it.PlayerCount); + public int GameCount => _ldnDatas.Length; + } } } diff --git a/src/Ryujinx.UI.Common/App/LdnGameDataList.cs b/src/Ryujinx.UI.Common/App/LdnGameDataList.cs deleted file mode 100644 index d98fd081d..000000000 --- a/src/Ryujinx.UI.Common/App/LdnGameDataList.cs +++ /dev/null @@ -1,24 +0,0 @@ -using LibHac.Ns; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Ryujinx.UI.App.Common -{ - public class LdnGameDataArray - { - private readonly LdnGameData[] _ldnDatas; - - public LdnGameDataArray(IEnumerable receivedData, ref ApplicationControlProperty acp) - { - LibHac.Common.FixedArrays.Array8 communicationId = acp.LocalCommunicationId; - - _ldnDatas = receivedData.Where(game => - communicationId.Items.Contains(Convert.ToUInt64(game.TitleId, 16)) - ).ToArray(); - } - - public int PlayerCount => _ldnDatas.Sum(it => it.PlayerCount); - public int GameCount => _ldnDatas.Length; - } -} diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 39799c117..2f1800290 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -127,7 +127,7 @@ namespace Ryujinx.Ava.UI.ViewModels public ApplicationData GridSelectedApplication; // Key is Title ID - public SafeDictionary LdnData = []; + public SafeDictionary LdnData = []; // The UI specifically uses a thicker bordered variant of the icon to avoid crunching out the border at lower resolutions. // For an example of this, download canary 1.2.95, then open the settings menu, and look at the icon in the top-left. diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 832674541..da4314e79 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -171,9 +171,12 @@ namespace Ryujinx.Ava.UI.Windows ViewModel.LdnData.Clear(); foreach (var application in ViewModel.Applications) { - ViewModel.LdnData[application.IdString] = new LdnGameDataArray( - ldnGameDataArray, - ref application.ControlHolder.Value + ref var controlHolder = ref application.ControlHolder.Value; + + ViewModel.LdnData[application.IdString] = + LdnGameData.GetArrayForApp( + ldnGameDataArray, + ref controlHolder ); UpdateApplicationWithLdnData(application); -- 2.47.1 From 1faa72f22f687cf33b77f7a30ff580e83ea2bfdc Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 15:44:20 -0600 Subject: [PATCH 193/722] infra: fix big tables in releases --- .github/workflows/canary.yml | 16 ++++++++-------- .github/workflows/release.yml | 24 ++++++++++++------------ 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index ffbf1ebf7..0172e1fe6 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -64,7 +64,7 @@ jobs: | Windows 64-bit | [Canary Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_x64.zip) | | Linux 64-bit | [Canary Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) | | Linux ARM 64-bit | [Canary Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) | - | macOS | [Canary macOS artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) | + | macOS | [Canary macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) | **Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }} omitBodyDuringUpdate: true @@ -196,16 +196,16 @@ jobs: body: | # Canary builds: - These builds are experimental and may sometimes not work, use [regular builds](https://github.com/GreemDev/Ryujinx/releases/latest) instead if that sounds like something you don't want to deal with. - + These builds are experimental and may sometimes not work, use [regular builds](https://github.com/${{ github.repository }}/releases/latest) instead if that sounds like something you don't want to deal with. + | Platform | Artifact | |--|--| - | Windows 64-bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_x64.zip | - | Linux 64-bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz | - | Linux ARM 64-bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz | - | macOS | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz | + | Windows 64-bit | [Canary Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_x64.zip) | + | Linux 64-bit | [Canary Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) | + | Linux ARM 64-bit | [Canary Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) | + | macOS | [Canary macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) | - "**Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }}" + **Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }} omitBodyDuringUpdate: true allowUpdates: true replacesArtifacts: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 066b978c5..9086a7ff6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,13 +54,13 @@ jobs: name: ${{ steps.version_info.outputs.build_version }} tag: ${{ steps.version_info.outputs.build_version }} body: | - # Regular builds: + # Stable builds: | Platform | Artifact | |--|--| - | Windows 64-bit | [Release Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip) | - | Linux 64-bit | [Release Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) | - | Linux ARM 64-bit | [Release Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) | - | macOS | [Release macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) | + | Windows 64-bit | [Stable Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip) | + | Linux 64-bit | [Stable Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) | + | Linux ARM 64-bit | [Stable Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) | + | macOS | [Stable macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) | **Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }} omitBodyDuringUpdate: true @@ -186,15 +186,15 @@ jobs: artifacts: "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*" tag: ${{ steps.version_info.outputs.build_version }} body: | - # Regular builds: + # Stable builds: | Platform | Artifact | |--|--| - | Windows 64-bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip | - | Linux 64-bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz | - | Linux ARM 64-bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz | - | macOS | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz | - - "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}" + | Windows 64-bit | [Stable Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip) | + | Linux 64-bit | [Stable Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) | + | Linux ARM 64-bit | [Stable Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) | + | macOS | [Stable macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) | + + **Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }} omitBodyDuringUpdate: true allowUpdates: true replacesArtifacts: true -- 2.47.1 From 38833ff60a2b9bd0d90b096a333423488af9a8a3 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 16:07:23 -0600 Subject: [PATCH 194/722] i dont know why this is failing this is stupid --- .github/workflows/canary.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 0172e1fe6..57b2958c7 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -43,8 +43,8 @@ jobs: with: script: | github.rest.git.createRef({ - owner: context.repo.owner, - repo: context.repo.repo, + owner: ${{ RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}, + repo: ${{ RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}, ref: 'refs/tags/Canary-${{ steps.version_info.outputs.build_version }}', sha: context.sha }) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9086a7ff6..e0ae71171 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,8 +42,8 @@ jobs: with: script: | github.rest.git.createRef({ - owner: context.repo.owner, - repo: context.repo.repo, + owner: ${{ RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}, + repo: ${{ RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}, ref: 'refs/tags/${{ steps.version_info.outputs.build_version }}', sha: context.sha }) -- 2.47.1 From 9408452f933fad387fa91f86d0a4d1f302ce96f8 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 16:10:03 -0600 Subject: [PATCH 195/722] ok that one was my fault --- .github/workflows/canary.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index 57b2958c7..a68f4cb97 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -43,8 +43,8 @@ jobs: with: script: | github.rest.git.createRef({ - owner: ${{ RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}, - repo: ${{ RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}, + owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}, + repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}, ref: 'refs/tags/Canary-${{ steps.version_info.outputs.build_version }}', sha: context.sha }) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e0ae71171..bfc04e228 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,8 +42,8 @@ jobs: with: script: | github.rest.git.createRef({ - owner: ${{ RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}, - repo: ${{ RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}, + owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}, + repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}, ref: 'refs/tags/${{ steps.version_info.outputs.build_version }}', sha: context.sha }) -- 2.47.1 From 44ee4190e62d508020ff81b146e0b32260e244ad Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 16:11:23 -0600 Subject: [PATCH 196/722] JAVASCRIPT LOL --- .github/workflows/canary.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index a68f4cb97..c17b06046 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -43,8 +43,8 @@ jobs: with: script: | github.rest.git.createRef({ - owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}, - repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}, + owner: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}", + repo: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}", ref: 'refs/tags/Canary-${{ steps.version_info.outputs.build_version }}', sha: context.sha }) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bfc04e228..a24b58a5d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,8 +42,8 @@ jobs: with: script: | github.rest.git.createRef({ - owner: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}, - repo: ${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}, + owner: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}", + repo: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}", ref: 'refs/tags/${{ steps.version_info.outputs.build_version }}', sha: context.sha }) -- 2.47.1 From e1e4e5d2d58fbc56c4eaea4679900f61b3468a5b Mon Sep 17 00:00:00 2001 From: Daniel Nylander Date: Sat, 28 Dec 2024 00:58:58 +0100 Subject: [PATCH 197/722] Swedish translation (#446) Co-authored-by: LotP1 <68976644+LotP1@users.noreply.github.com> --- src/Ryujinx/Assets/locales.json | 924 +++++++++++++++++++++++++++++++- 1 file changed, 914 insertions(+), 10 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index cdf43f474..6cebc1364 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -14,6 +14,7 @@ "pl_PL", "pt_BR", "ru_RU", + "sv_SE", "th_TH", "tr_TR", "uk_UA", @@ -38,6 +39,7 @@ "pl_PL": "Polski", "pt_BR": "Português (BR)", "ru_RU": "Русский (RU)", + "sv_SE": "Svenska", "th_TH": "ภาษาไทย", "tr_TR": "Türkçe", "uk_UA": "Українська", @@ -62,6 +64,7 @@ "pl_PL": "Otwórz Aplet", "pt_BR": "Abrir Applet", "ru_RU": "Открыть апплет", + "sv_SE": "Öppna applet", "th_TH": "เปิด Applet", "tr_TR": "Applet'i Aç", "uk_UA": "Відкрити аплет", @@ -86,6 +89,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Redigera Mii-applet", "th_TH": "", "tr_TR": "", "uk_UA": "Аплет для редагування Mii", @@ -110,6 +114,7 @@ "pl_PL": "Otwórz aplet Mii Editor w trybie indywidualnym", "pt_BR": "Abrir editor Mii em modo avulso", "ru_RU": "Открывает апплет Mii Editor в автономном режиме", + "sv_SE": "Öppna Mii Editor Applet i fristående läge", "th_TH": "เปิดโปรแกรม Mii Editor Applet", "tr_TR": "Mii Editör Applet'ini Bağımsız Mod'da Aç", "uk_UA": "Відкрити аплет Mii Editor в автономному режимі", @@ -134,6 +139,7 @@ "pl_PL": "Bezpośredni dostęp do myszy", "pt_BR": "Acesso direto ao mouse", "ru_RU": "Прямой ввод мыши", + "sv_SE": "Direkt musåtkomst", "th_TH": "เข้าถึงเมาส์ได้โดยตรง", "tr_TR": "Doğrudan Mouse Erişimi", "uk_UA": "Прямий доступ мишею", @@ -158,6 +164,7 @@ "pl_PL": "Tryb menedżera pamięci:", "pt_BR": "Modo de gerenciamento de memória:", "ru_RU": "Режим менеджера памяти:", + "sv_SE": "Läge för minnehanterare:", "th_TH": "โหมดจัดการหน่วยความจำ:", "tr_TR": "Hafıza Yönetim Modu:", "uk_UA": "Режим диспетчера пам’яті:", @@ -182,6 +189,7 @@ "pl_PL": "Oprogramowanie", "pt_BR": "", "ru_RU": "Программное обеспечение", + "sv_SE": "Programvara", "th_TH": "ซอฟต์แวร์", "tr_TR": "Yazılım", "uk_UA": "Програмне забезпечення", @@ -206,6 +214,7 @@ "pl_PL": "Gospodarz (szybki)", "pt_BR": "Hóspede (rápido)", "ru_RU": "Хост (быстро)", + "sv_SE": "Värd (snabb)", "th_TH": "โฮสต์ (เร็ว)", "tr_TR": "Host (hızlı)", "uk_UA": "Хост (швидко)", @@ -230,6 +239,7 @@ "pl_PL": "Gospodarza (NIESPRAWDZONY, najszybszy, niebezpieczne)", "pt_BR": "Hóspede sem verificação (mais rápido, inseguro)", "ru_RU": "Хост не установлен (самый быстрый, небезопасный)", + "sv_SE": "Värd inte kontrollerad (snabbaste, osäkert)", "th_TH": "ไม่ได้ตรวจสอบโฮสต์ (เร็วที่สุด, แต่ไม่ปลอดภัย)", "tr_TR": "Host Unchecked (en hızlısı, tehlikeli)", "uk_UA": "Неперевірений хост (найшвидший, небезпечний)", @@ -254,6 +264,7 @@ "pl_PL": "Użyj Hipernadzorcy", "pt_BR": "Usar Hipervisor", "ru_RU": "Использовать Hypervisor", + "sv_SE": "Använd Hypervisor", "th_TH": "ใช้งาน Hypervisor", "tr_TR": "Hypervisor Kullan", "uk_UA": "Використовувати гіпервізор", @@ -278,6 +289,7 @@ "pl_PL": "_Plik", "pt_BR": "_Arquivo", "ru_RU": "_Файл", + "sv_SE": "_Arkiv", "th_TH": "ไฟล์", "tr_TR": "_Dosya", "uk_UA": "_Файл", @@ -302,6 +314,7 @@ "pl_PL": "_Załaduj aplikację z pliku", "pt_BR": "_Abrir ROM do jogo...", "ru_RU": "_Добавить приложение из файла", + "sv_SE": "_Läs in applikation från fil", "th_TH": "โหลดแอปพลิเคชั่นจากไฟล์", "tr_TR": "_Dosyadan Uygulama Aç", "uk_UA": "_Завантажити програму з файлу", @@ -326,6 +339,7 @@ "pl_PL": "", "pt_BR": "Nenhum aplicativo encontrado no arquivo selecionado.", "ru_RU": "", + "sv_SE": "Inga applikationer hittades i vald fil.", "th_TH": "ไม่พบแอปพลิเคชั่นจากไฟล์ที่เลือก", "tr_TR": "", "uk_UA": "У вибраному файлі не знайдено жодних додатків.", @@ -350,6 +364,7 @@ "pl_PL": "Załaduj _rozpakowaną grę", "pt_BR": "Abrir jogo _extraído...", "ru_RU": "Добавить _распакованную игру", + "sv_SE": "Läs in _uppackat spel", "th_TH": "โหลดเกมที่แตกไฟล์แล้ว", "tr_TR": "_Sıkıştırılmamış Oyun Aç", "uk_UA": "Завантажити _розпаковану гру", @@ -374,6 +389,7 @@ "pl_PL": "", "pt_BR": "Carregar DLC da Pasta", "ru_RU": "", + "sv_SE": "Läs in DLC från mapp", "th_TH": "โหลด DLC จากโฟลเดอร์", "tr_TR": "", "uk_UA": "Завантажити DLC з теки", @@ -398,6 +414,7 @@ "pl_PL": "", "pt_BR": "Carregar Atualizações de Jogo da Pasta", "ru_RU": "", + "sv_SE": "Läs in titeluppdateringar från mapp", "th_TH": "โหลดไฟล์อัพเดตจากโฟลเดอร์", "tr_TR": "", "uk_UA": "Завантажити оновлення заголовків з теки", @@ -422,6 +439,7 @@ "pl_PL": "Otwórz folder Ryujinx", "pt_BR": "Abrir diretório do e_mulador...", "ru_RU": "Открыть папку Ryujinx", + "sv_SE": "Öppna Ryujinx-mapp", "th_TH": "เปิดโฟลเดอร์ Ryujinx", "tr_TR": "Ryujinx Klasörünü aç", "uk_UA": "Відкрити теку Ryujinx", @@ -446,6 +464,7 @@ "pl_PL": "Otwórz folder plików dziennika zdarzeń", "pt_BR": "Abrir diretório de _logs...", "ru_RU": "Открыть папку с логами", + "sv_SE": "Öppna loggmapp", "th_TH": "เปิดโฟลเดอร์ Logs", "tr_TR": "Logs Klasörünü aç", "uk_UA": "Відкрити теку журналів змін", @@ -470,6 +489,7 @@ "pl_PL": "_Wyjdź", "pt_BR": "_Sair", "ru_RU": "_Выход", + "sv_SE": "A_vsluta", "th_TH": "_ออก", "tr_TR": "_Çıkış", "uk_UA": "_Вихід", @@ -494,6 +514,7 @@ "pl_PL": "_Opcje", "pt_BR": "_Opções", "ru_RU": "_Настройки", + "sv_SE": "I_nställningar", "th_TH": "_ตัวเลือก", "tr_TR": "_Seçenekler", "uk_UA": "_Параметри", @@ -518,6 +539,7 @@ "pl_PL": "Przełącz na tryb pełnoekranowy", "pt_BR": "_Mudar para tela cheia", "ru_RU": "Включить полноэкранный режим", + "sv_SE": "Växla helskärm", "th_TH": "สลับเป็นโหมดเต็มหน้าจอ", "tr_TR": "Tam Ekran Modunu Aç", "uk_UA": "На весь екран", @@ -542,6 +564,7 @@ "pl_PL": "Uruchamiaj gry w trybie pełnoekranowym", "pt_BR": "Iniciar jogos em tela cheia", "ru_RU": "Запускать игры в полноэкранном режиме", + "sv_SE": "Starta spel i helskärmsläge", "th_TH": "เริ่มเกมในโหมดเต็มหน้าจอ", "tr_TR": "Oyunları Tam Ekran Modunda Başlat", "uk_UA": "Запускати ігри на весь екран", @@ -566,6 +589,7 @@ "pl_PL": "Zatrzymaj emulację", "pt_BR": "_Encerrar emulação", "ru_RU": "Остановить эмуляцию", + "sv_SE": "Stoppa emulering", "th_TH": "หยุดการจำลอง", "tr_TR": "Emülasyonu Durdur", "uk_UA": "Зупинити емуляцію", @@ -590,6 +614,7 @@ "pl_PL": "_Ustawienia", "pt_BR": "_Configurações", "ru_RU": "_Параметры", + "sv_SE": "_Inställningar", "th_TH": "_ตั้งค่า", "tr_TR": "_Seçenekler", "uk_UA": "_Налаштування", @@ -614,6 +639,7 @@ "pl_PL": "_Zarządzaj profilami użytkowników", "pt_BR": "_Gerenciar perfis de usuário", "ru_RU": "_Менеджер учетных записей", + "sv_SE": "_Hantera användarprofiler", "th_TH": "_จัดการโปรไฟล์ผู้ใช้งาน", "tr_TR": "_Kullanıcı Profillerini Yönet", "uk_UA": "_Керувати профілями користувачів", @@ -638,6 +664,7 @@ "pl_PL": "_Akcje", "pt_BR": "_Ações", "ru_RU": "_Действия", + "sv_SE": "Åt_gärder", "th_TH": "การดำเนินการ", "tr_TR": "_Eylemler", "uk_UA": "_Дії", @@ -662,6 +689,7 @@ "pl_PL": "Symuluj wiadomość wybudzania", "pt_BR": "_Simular mensagem de acordar console", "ru_RU": "Имитировать сообщение пробуждения", + "sv_SE": "Simulera uppvakningsmeddelande", "th_TH": "จำลองข้อความปลุก", "tr_TR": "Uyandırma Mesajı Simüle Et", "uk_UA": "Симулювати повідомлення про пробудження", @@ -686,6 +714,7 @@ "pl_PL": "Skanuj Amiibo", "pt_BR": "Escanear um Amiibo", "ru_RU": "Сканировать Amiibo", + "sv_SE": "Skanna en Amiibo", "th_TH": "สแกนหา Amiibo", "tr_TR": "Bir Amiibo Tara", "uk_UA": "Сканувати Amiibo", @@ -710,6 +739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Skanna en Amiibo (från bin-fil)", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -734,6 +764,7 @@ "pl_PL": "_Narzędzia", "pt_BR": "_Ferramentas", "ru_RU": "_Инструменты", + "sv_SE": "V_erktyg", "th_TH": "_เครื่องมือ", "tr_TR": "_Araçlar", "uk_UA": "_Інструменти", @@ -758,6 +789,7 @@ "pl_PL": "Zainstaluj oprogramowanie", "pt_BR": "_Instalar firmware", "ru_RU": "Установка прошивки", + "sv_SE": "Installera firmware", "th_TH": "ติดตั้งเฟิร์มแวร์", "tr_TR": "Yazılım Yükle", "uk_UA": "Установити прошивку", @@ -782,6 +814,7 @@ "pl_PL": "Zainstaluj oprogramowanie z XCI lub ZIP", "pt_BR": "Instalar firmware a partir de um arquivo ZIP/XCI", "ru_RU": "Установить прошивку из XCI или ZIP", + "sv_SE": "Installera en firmware från XCI eller ZIP", "th_TH": "ติดตั้งเฟิร์มแวร์จาก ไฟล์ XCI หรือ ไฟล์ ZIP", "tr_TR": "XCI veya ZIP'ten Yazılım Yükle", "uk_UA": "Установити прошивку з XCI або ZIP", @@ -806,6 +839,7 @@ "pl_PL": "Zainstaluj oprogramowanie z katalogu", "pt_BR": "Instalar firmware a partir de um diretório", "ru_RU": "Установить прошивку из папки", + "sv_SE": "Installera en firmware från en katalog", "th_TH": "ติดตั้งเฟิร์มแวร์จากไดเร็กทอรี", "tr_TR": "Bir Dizin Üzerinden Yazılım Yükle", "uk_UA": "Установити прошивку з теки", @@ -830,6 +864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Installera nycklar", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -854,6 +889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Installera nycklar från KEYS eller ZIP", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -878,6 +914,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Installera nycklar från en katalog", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -902,6 +939,7 @@ "pl_PL": "Zarządzaj rodzajami plików", "pt_BR": "Gerenciar tipos de arquivo", "ru_RU": "Управление типами файлов", + "sv_SE": "Hantera filtyper", "th_TH": "จัดการประเภทไฟล์", "tr_TR": "Dosya uzantılarını yönet", "uk_UA": "Керувати типами файлів", @@ -926,6 +964,7 @@ "pl_PL": "Typy plików instalacyjnych", "pt_BR": "Instalar tipos de arquivo", "ru_RU": "Установить типы файлов", + "sv_SE": "Installera filtyper", "th_TH": "ติดตั้งประเภทไฟล์", "tr_TR": "Dosya uzantılarını yükle", "uk_UA": "Установити типи файлів", @@ -950,6 +989,7 @@ "pl_PL": "Typy plików dezinstalacyjnych", "pt_BR": "Desinstalar tipos de arquivos", "ru_RU": "Удалить типы файлов", + "sv_SE": "Avinstallera filtyper", "th_TH": "ถอนการติดตั้งประเภทไฟล์", "tr_TR": "Dosya uzantılarını kaldır", "uk_UA": "Видалити типи файлів", @@ -974,6 +1014,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Optimera XCI-filer", "th_TH": "", "tr_TR": "", "uk_UA": "Обрізати XCI файли", @@ -998,6 +1039,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "_Вид", + "sv_SE": "_Visa", "th_TH": "_มุมมอง", "tr_TR": "_Görüntüle", "uk_UA": "_Вид", @@ -1022,6 +1064,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Размер окна", + "sv_SE": "Fönsterstorlek", "th_TH": "ขนาดหน้าต่าง", "tr_TR": "Pencere Boyutu", "uk_UA": "Розмір вікна", @@ -1046,6 +1089,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "720p", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1070,6 +1114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "1080p", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1094,6 +1139,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "1440p", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1118,6 +1164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "2160p", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1142,6 +1189,7 @@ "pl_PL": "_Pomoc", "pt_BR": "_Ajuda", "ru_RU": "_Помощь", + "sv_SE": "_Hjälp", "th_TH": "_ช่วยเหลือ", "tr_TR": "_Yardım", "uk_UA": "_Допомога", @@ -1166,6 +1214,7 @@ "pl_PL": "Sprawdź aktualizacje", "pt_BR": "_Verificar se há atualizações", "ru_RU": "Проверить наличие обновлений", + "sv_SE": "Leta efter uppdateringar", "th_TH": "ตรวจสอบอัปเดต", "tr_TR": "Güncellemeleri Denetle", "uk_UA": "Перевірити оновлення", @@ -1190,6 +1239,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Frågor, svar och guider", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1214,6 +1264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Frågor, svar och felsökningssida", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1238,6 +1289,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Öppnar Frågor, svar och felsökningssidan på den officiella Ryujinx-wikin", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1262,6 +1314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Konfigurationsguide", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1286,6 +1339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Öppnar konfigurationsguiden på den officiella Ryujinx-wikin", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1310,6 +1364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Flerspelarguide (LDN/LAN)", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1334,6 +1389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Öppnar flerspelarguiden på den officiella Ryujinx-wikin", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1358,6 +1414,7 @@ "pl_PL": "O programie", "pt_BR": "_Sobre", "ru_RU": "О программе", + "sv_SE": "Om", "th_TH": "เกี่ยวกับ", "tr_TR": "Hakkında", "uk_UA": "Про застосунок", @@ -1382,6 +1439,7 @@ "pl_PL": "Wyszukaj...", "pt_BR": "Buscar...", "ru_RU": "Поиск...", + "sv_SE": "Sök...", "th_TH": "กำลังค้นหา...", "tr_TR": "Ara...", "uk_UA": "Пошук...", @@ -1406,6 +1464,7 @@ "pl_PL": "Ulubione", "pt_BR": "Favorito", "ru_RU": "Избранное", + "sv_SE": "Favorit", "th_TH": "ชื่นชอบ", "tr_TR": "Favori", "uk_UA": "Обране", @@ -1430,6 +1489,7 @@ "pl_PL": "Ikona", "pt_BR": "Ícone", "ru_RU": "Значок", + "sv_SE": "Ikon", "th_TH": "ไอคอน", "tr_TR": "Simge", "uk_UA": "Значок", @@ -1454,6 +1514,7 @@ "pl_PL": "Nazwa", "pt_BR": "Nome", "ru_RU": "Название", + "sv_SE": "Namn", "th_TH": "ชื่อ", "tr_TR": "Oyun Adı", "uk_UA": "Назва", @@ -1478,6 +1539,7 @@ "pl_PL": "Twórca", "pt_BR": "Desenvolvedor", "ru_RU": "Разработчик", + "sv_SE": "Utvecklare", "th_TH": "ผู้พัฒนา", "tr_TR": "Geliştirici", "uk_UA": "Розробник", @@ -1502,6 +1564,7 @@ "pl_PL": "Wersja", "pt_BR": "Versão", "ru_RU": "Версия", + "sv_SE": "Version", "th_TH": "เวอร์ชั่น", "tr_TR": "Sürüm", "uk_UA": "Версія", @@ -1526,6 +1589,7 @@ "pl_PL": "Czas w grze:", "pt_BR": "Tempo de jogo", "ru_RU": "Время в игре", + "sv_SE": "Speltid", "th_TH": "เล่นไปแล้ว", "tr_TR": "Oynama Süresi", "uk_UA": "Зіграно часу", @@ -1550,6 +1614,7 @@ "pl_PL": "Ostatnio grane", "pt_BR": "Último jogo", "ru_RU": "Последний запуск", + "sv_SE": "Senast spelad", "th_TH": "เล่นล่าสุด", "tr_TR": "Son Oynama Tarihi", "uk_UA": "Востаннє зіграно", @@ -1574,6 +1639,7 @@ "pl_PL": "Rozszerzenie pliku", "pt_BR": "Extensão", "ru_RU": "Расширение файла", + "sv_SE": "Filänd", "th_TH": "นามสกุลไฟล์", "tr_TR": "Dosya Uzantısı", "uk_UA": "Розширення файлу", @@ -1598,6 +1664,7 @@ "pl_PL": "Rozmiar pliku", "pt_BR": "Tamanho", "ru_RU": "Размер файла", + "sv_SE": "Filstorlek", "th_TH": "ขนาดไฟล์", "tr_TR": "Dosya Boyutu", "uk_UA": "Розмір файлу", @@ -1622,6 +1689,7 @@ "pl_PL": "Ścieżka", "pt_BR": "Caminho", "ru_RU": "Путь", + "sv_SE": "Sökväg", "th_TH": "ที่อยู่ไฟล์", "tr_TR": "Yol", "uk_UA": "Шлях", @@ -1646,6 +1714,7 @@ "pl_PL": "Otwórz katalog zapisów użytkownika", "pt_BR": "Abrir diretório de saves do usuário", "ru_RU": "Открыть папку с сохранениями", + "sv_SE": "Öppna användarkatalog för sparningar", "th_TH": "เปิดไดเร็กทอรี่บันทึกของผู้ใช้", "tr_TR": "Kullanıcı Kayıt Dosyası Dizinini Aç", "uk_UA": "Відкрити теку збереження користувача", @@ -1670,6 +1739,7 @@ "pl_PL": "Otwiera katalog, który zawiera zapis użytkownika dla tej aplikacji", "pt_BR": "Abre o diretório que contém jogos salvos para o usuário atual", "ru_RU": "Открывает папку с пользовательскими сохранениями", + "sv_SE": "Öppnar katalogen som innehåller applikationens användarsparade spel", "th_TH": "เปิดไดเร็กทอรี่ซึ่งมีการบันทึกข้อมูลของผู้ใช้แอปพลิเคชัน", "tr_TR": "Uygulamanın Kullanıcı Kaydı'nın bulunduğu dizini açar", "uk_UA": "Відкриває каталог, який містить збереження користувача програми", @@ -1694,6 +1764,7 @@ "pl_PL": "Otwórz katalog zapisów urządzenia", "pt_BR": "Abrir diretório de saves de dispositivo do usuário", "ru_RU": "Открыть папку сохраненных устройств", + "sv_SE": "Öppna enhetens katalog för sparade spel", "th_TH": "เปิดไดเร็กทอรี่บันทึกของอุปกรณ์", "tr_TR": "Kullanıcı Cihaz Dizinini Aç", "uk_UA": "Відкрити каталог пристроїв користувача", @@ -1718,6 +1789,7 @@ "pl_PL": "Otwiera katalog, który zawiera zapis urządzenia dla tej aplikacji", "pt_BR": "Abre o diretório que contém saves do dispositivo para o usuário atual", "ru_RU": "Открывает папку, содержащую сохраненные устройства", + "sv_SE": "Öppnar katalogen som innehåller applikationens sparade spel på enheten", "th_TH": "เปิดไดเรกทอรี่ซึ่งมีบันทึกข้อมูลของอุปกรณ์ในแอปพลิเคชัน", "tr_TR": "Uygulamanın Kullanıcı Cihaz Kaydı'nın bulunduğu dizini açar", "uk_UA": "Відкриває каталог, який містить збереження пристрою програми", @@ -1742,6 +1814,7 @@ "pl_PL": "Otwórz katalog zapisu BCAT obecnego użytkownika", "pt_BR": "Abrir diretório de saves BCAT do usuário", "ru_RU": "Открыть папку сохраненных BCAT", + "sv_SE": "Öppna katalog för BCAT-sparningar", "th_TH": "เปิดไดเรกทอรี่บันทึกของ BCAT", "tr_TR": "Kullanıcı BCAT Dizinini Aç", "uk_UA": "Відкрити каталог користувача BCAT", @@ -1766,6 +1839,7 @@ "pl_PL": "Otwiera katalog, który zawiera zapis BCAT dla tej aplikacji", "pt_BR": "Abre o diretório que contém saves BCAT para o usuário atual", "ru_RU": "Открывает папку, содержащую сохраненные BCAT", + "sv_SE": "Öppnar katalogen som innehåller applikationens BCAT-sparningar", "th_TH": "เปิดไดเรกทอรี่ซึ่งมีการบันทึกข้อมูลของ BCAT ในแอปพลิเคชัน", "tr_TR": "Uygulamanın Kullanıcı BCAT Kaydı'nın bulunduğu dizini açar", "uk_UA": "Відкриває каталог, який містить BCAT-збереження програми", @@ -1790,6 +1864,7 @@ "pl_PL": "Zarządzaj aktualizacjami", "pt_BR": "Gerenciar atualizações do jogo", "ru_RU": "Управление обновлениями", + "sv_SE": "Hantera speluppdateringar", "th_TH": "จัดการเวอร์ชั่นอัปเดต", "tr_TR": "Oyun Güncellemelerini Yönet", "uk_UA": "Керування оновленнями заголовків", @@ -1814,6 +1889,7 @@ "pl_PL": "Otwiera okno zarządzania aktualizacjami danej aplikacji", "pt_BR": "Abre a janela de gerenciamento de atualizações", "ru_RU": "Открывает окно управления обновлениями приложения", + "sv_SE": "Öppnar spelets hanteringsfönster för uppdateringar", "th_TH": "เปิดหน้าต่างการจัดการเวอร์ชั่นการอัพเดต", "tr_TR": "Oyun Güncelleme Yönetim Penceresini Açar", "uk_UA": "Відкриває вікно керування оновленням заголовка", @@ -1838,6 +1914,7 @@ "pl_PL": "Zarządzaj dodatkową zawartością (DLC)", "pt_BR": "Gerenciar DLCs", "ru_RU": "Управление DLC", + "sv_SE": "Hantera DLC", "th_TH": "จัดการ DLC", "tr_TR": "DLC'leri Yönet", "uk_UA": "Керування DLC", @@ -1862,6 +1939,7 @@ "pl_PL": "Otwiera okno zarządzania dodatkową zawartością", "pt_BR": "Abre a janela de gerenciamento de DLCs", "ru_RU": "Открывает окно управления DLC", + "sv_SE": "Öppnar DLC-hanteringsfönstret", "th_TH": "เปิดหน้าต่างจัดการ DLC", "tr_TR": "DLC yönetim penceresini açar", "uk_UA": "Відкриває вікно керування DLC", @@ -1886,6 +1964,7 @@ "pl_PL": "Zarządzanie Cache", "pt_BR": "Gerenciamento de cache", "ru_RU": "Управление кэшем", + "sv_SE": "Cachehantering", "th_TH": "จัดการแคช", "tr_TR": "Önbellek Yönetimi", "uk_UA": "Керування кешем", @@ -1910,6 +1989,7 @@ "pl_PL": "Zakolejkuj rekompilację PPTC", "pt_BR": "Limpar cache PPTC", "ru_RU": "Перестроить очередь PPTC", + "sv_SE": "Kölägg PPTC Rebuild", "th_TH": "เพิ่มคิวการสร้าง PPTC ใหม่", "tr_TR": "PPTC Yeniden Yapılandırmasını Başlat", "uk_UA": "Очистити кеш PPTC", @@ -1934,6 +2014,7 @@ "pl_PL": "Zainicjuj Rekompilację PPTC przy następnym uruchomieniu gry", "pt_BR": "Deleta o cache PPTC armazenado em disco do jogo", "ru_RU": "Запускает перестройку PPTC во время следующего запуска игры.", + "sv_SE": "Gör så att PPTC bygger om vid uppstart när nästa spel startas", "th_TH": "ให้ PPTC สร้างใหม่ในเวลาบูตเมื่อเปิดเกมครั้งถัดไป", "tr_TR": "Oyunun bir sonraki açılışında PPTC'yi yeniden yapılandır", "uk_UA": "Видаляє кеш PPTC програми", @@ -1958,6 +2039,7 @@ "pl_PL": "Wyczyść pamięć podręczną cieni", "pt_BR": "Limpar cache de Shader", "ru_RU": "Очистить кэш шейдеров", + "sv_SE": "Töm shader cache", "th_TH": "ล้างแคช แสงเงา", "tr_TR": "Shader Önbelleğini Temizle", "uk_UA": "Очистити кеш шейдерів", @@ -1982,6 +2064,7 @@ "pl_PL": "Usuwa pamięć podręczną cieni danej aplikacji", "pt_BR": "Deleta o cache de Shader armazenado em disco do jogo", "ru_RU": "Удаляет кеш шейдеров приложения", + "sv_SE": "Tar bort applikationens shader cache", "th_TH": "ลบแคช แสงเงา ของแอปพลิเคชัน", "tr_TR": "Uygulamanın shader önbelleğini temizler", "uk_UA": "Видаляє кеш шейдерів програми", @@ -2006,6 +2089,7 @@ "pl_PL": "Otwórz katalog PPTC", "pt_BR": "Abrir diretório do cache PPTC", "ru_RU": "Открыть папку PPTC", + "sv_SE": "Öppna PPTC-katalog", "th_TH": "เปิดไดเรกทอรี่ PPTC", "tr_TR": "PPTC Dizinini Aç", "uk_UA": "Відкрити каталог PPTC", @@ -2030,6 +2114,7 @@ "pl_PL": "Otwiera katalog, który zawiera pamięć podręczną PPTC aplikacji", "pt_BR": "Abre o diretório contendo os arquivos do cache PPTC", "ru_RU": "Открывает папку, содержащую PPTC кэш приложений и игр", + "sv_SE": "Öppnar katalogen som innehåller applikationens PPTC-cache", "th_TH": "เปิดไดเร็กทอรี่ของ แคช PPTC ในแอปพลิเคชัน", "tr_TR": "Uygulamanın PPTC Önbelleğinin bulunduğu dizini açar", "uk_UA": "Відкриває каталог, який містить кеш PPTC програми", @@ -2054,6 +2139,7 @@ "pl_PL": "Otwórz katalog pamięci podręcznej cieni", "pt_BR": "Abrir diretório do cache de Shader", "ru_RU": "Открыть папку с кэшем шейдеров", + "sv_SE": "Öppna katalog för shader cache", "th_TH": "เปิดไดเรกทอรี่ แคช แสงเงา", "tr_TR": "Shader Önbelleği Dizinini Aç", "uk_UA": "Відкрити каталог кешу шейдерів", @@ -2078,6 +2164,7 @@ "pl_PL": "Otwiera katalog, który zawiera pamięć podręczną cieni aplikacji", "pt_BR": "Abre o diretório contendo os arquivos do cache de Shader", "ru_RU": "Открывает папку, содержащую кэш шейдеров приложений и игр", + "sv_SE": "Öppnar katalogen som innehåller applikationens shader cache", "th_TH": "เปิดไดเรกทอรี่ของ แคช แสงเงา ในแอปพลิเคชัน", "tr_TR": "Uygulamanın shader önbelleğinin bulunduğu dizini açar", "uk_UA": "Відкриває каталог, який містить кеш шейдерів програми", @@ -2102,6 +2189,7 @@ "pl_PL": "Wypakuj dane", "pt_BR": "Extrair dados", "ru_RU": "Извлечь данные", + "sv_SE": "Extrahera data", "th_TH": "แยกส่วนข้อมูล", "tr_TR": "Veriyi Ayıkla", "uk_UA": "Видобути дані", @@ -2126,6 +2214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "ExeFS", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2150,6 +2239,7 @@ "pl_PL": "Wyodrębnij sekcję ExeFS z bieżącej konfiguracji aplikacji (w tym aktualizacje)", "pt_BR": "Extrai a seção ExeFS do jogo (incluindo atualizações)", "ru_RU": "Извлечение раздела ExeFS из текущих настроек приложения (включая обновления)", + "sv_SE": "Extrahera ExeFS-sektionen från applikationens aktuella konfiguration (inkl uppdateringar)", "th_TH": "แยกส่วน ExeFS ออกจากการตั้งค่าปัจจุบันของแอปพลิเคชัน (รวมถึงอัปเดต)", "tr_TR": "Uygulamanın geçerli yapılandırmasından ExeFS kısmını ayıkla (Güncellemeler dahil)", "uk_UA": "Видобуває розділ ExeFS із поточної конфігурації програми (включаючи оновлення)", @@ -2174,6 +2264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "RomFS", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2198,6 +2289,7 @@ "pl_PL": "Wyodrębnij sekcję RomFS z bieżącej konfiguracji aplikacji (w tym aktualizacje)", "pt_BR": "Extrai a seção RomFS do jogo (incluindo atualizações)", "ru_RU": "Извлечение раздела RomFS из текущих настроек приложения (включая обновления)", + "sv_SE": "Extrahera RomFS-sektionen från applikationens aktuella konfiguration (inkl uppdateringar)", "th_TH": "แยกส่วน RomFS ออกจากการตั้งค่าปัจจุบันของแอปพลิเคชัน (รวมถึงอัพเดต)", "tr_TR": "Uygulamanın geçerli yapılandırmasından RomFS kısmını ayıkla (Güncellemeler dahil)", "uk_UA": "Видобуває розділ RomFS із поточної конфігурації програми (включаючи оновлення)", @@ -2222,6 +2314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Логотип", + "sv_SE": "Logotyp", "th_TH": "โลโก้", "tr_TR": "Simge", "uk_UA": "Логотип", @@ -2246,6 +2339,7 @@ "pl_PL": "Wyodrębnij sekcję z logiem z bieżącej konfiguracji aplikacji (w tym aktualizacje)", "pt_BR": "Extrai a seção Logo do jogo (incluindo atualizações)", "ru_RU": "Извлечение раздела с логотипом из текущих настроек приложения (включая обновления)", + "sv_SE": "Extrahera Logo-sektionen från applikationens aktuella konfiguration (inkl uppdateringar)", "th_TH": "แยกส่วน โลโก้ ออกจากการตั้งค่าปัจจุบันของแอปพลิเคชัน (รวมถึงอัปเดต)", "tr_TR": "Uygulamanın geçerli yapılandırmasından Logo kısmını ayıkla (Güncellemeler dahil)", "uk_UA": "Видобуває розділ логотипу з поточної конфігурації програми (включаючи оновлення)", @@ -2270,6 +2364,7 @@ "pl_PL": "Utwórz skrót aplikacji", "pt_BR": "Criar atalho da aplicação", "ru_RU": "Создать ярлык приложения", + "sv_SE": "Skapa genväg till applikation", "th_TH": "สร้างทางลัดของแอปพลิเคชัน", "tr_TR": "Uygulama Kısayolu Oluştur", "uk_UA": "Створити ярлик застосунку", @@ -2294,6 +2389,7 @@ "pl_PL": "Utwórz skrót na pulpicie, który uruchamia wybraną aplikację", "pt_BR": "Criar um atalho de área de trabalho que inicia o aplicativo selecionado", "ru_RU": "Создает ярлык на рабочем столе, с помощью которого можно запустить игру или приложение", + "sv_SE": "Skapa en skrivbordsgenväg som startar vald applikation", "th_TH": "สร้างทางลัดบนเดสก์ท็อปสำหรับใช้แอปพลิเคชันที่เลือก", "tr_TR": "Seçilmiş uygulamayı çalıştıracak bir masaüstü kısayolu oluştur", "uk_UA": "Створити ярлик на робочому столі, який запускає вибраний застосунок", @@ -2318,6 +2414,7 @@ "pl_PL": "Utwórz skrót w folderze 'Aplikacje' w systemie macOS, który uruchamia wybraną aplikację", "pt_BR": "Crie um atalho na pasta Aplicativos do macOS que abre o Aplicativo selecionado", "ru_RU": "Создает ярлык игры или приложения в папке Программы macOS", + "sv_SE": "Skapa en genväg i macOS-programmapp som startar vald applikation", "th_TH": "สร้างทางลัดในโฟลเดอร์ Applications ของ macOS สำหรับใช้แอปพลิเคชันที่เลือก", "tr_TR": "", "uk_UA": "Створити ярлик у каталозі macOS програм, що запускає обраний Додаток", @@ -2342,6 +2439,7 @@ "pl_PL": "Otwórz katalog modów", "pt_BR": "Abrir pasta de Mods", "ru_RU": "Открыть папку с модами", + "sv_SE": "Öppna Mods-katalog", "th_TH": "เปิดไดเร็กทอรี่ Mods", "tr_TR": "Mod Dizinini Aç", "uk_UA": "Відкрити теку з модами", @@ -2366,6 +2464,7 @@ "pl_PL": "Otwiera katalog zawierający mody dla danej aplikacji", "pt_BR": "Abre a pasta que contém os mods da aplicação ", "ru_RU": "Открывает папку, содержащую моды для приложений и игр", + "sv_SE": "Öppnar katalogen som innehåller applikationens Mods", "th_TH": "เปิดไดเร็กทอรี่ Mods ของแอปพลิเคชัน", "tr_TR": "", "uk_UA": "Відкриває каталог, який містить модифікації Додатків", @@ -2390,6 +2489,7 @@ "pl_PL": "Otwórz katalog modów Atmosphere", "pt_BR": "Abrir diretório de mods Atmosphere", "ru_RU": "Открыть папку с модами Atmosphere", + "sv_SE": "Öppna Atmosphere Mods-katalogen", "th_TH": "เปิดไดเร็กทอรี่ Mods Atmosphere", "tr_TR": "", "uk_UA": "Відкрити каталог модифікацій Atmosphere", @@ -2414,6 +2514,7 @@ "pl_PL": "Otwiera alternatywny katalog Atmosphere na karcie SD, który zawiera mody danej aplikacji. Przydatne dla modów przygotowanych pod prawdziwy sprzęt.", "pt_BR": "", "ru_RU": "Открывает папку Atmosphere на альтернативной SD-карте, которая содержит моды для приложений и игр. Полезно для модов, сделанных для реальной консоли.", + "sv_SE": "Öppnar den alternativa Atmosphere-katalogen på SD-kort som innehåller applikationens Mods. Användbart för Mods som är paketerade för riktig hårdvara.", "th_TH": "เปิดไดเร็กทอรี่ Atmosphere ของการ์ด SD สำรองซึ่งมี Mods ของแอปพลิเคชัน ซึ่งมีประโยชน์สำหรับ Mods ที่บรรจุมากับฮาร์ดแวร์จริง", "tr_TR": "", "uk_UA": "Відкриває альтернативний каталог SD-карти Atmosphere, що містить модифікації Додатків. Корисно для модифікацій, зроблених для реального обладнання.", @@ -2438,6 +2539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Kontrollera och optimera XCI-fil", "th_TH": "", "tr_TR": "", "uk_UA": "Перевірка та Нарізка XCI Файлів", @@ -2462,6 +2564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Kontrollera och optimera XCI-fil för att spara diskutrymme", "th_TH": "", "tr_TR": "", "uk_UA": "Перевірка та Нарізка XCI Файлів для збереження місця на диску", @@ -2486,6 +2589,7 @@ "pl_PL": "{0}/{1} Załadowane gry", "pt_BR": "{0}/{1} jogos carregados", "ru_RU": "{0}/{1} игр загружено", + "sv_SE": "{0}/{1} spel inlästa", "th_TH": "เกมส์โหลดแล้ว {0}/{1}", "tr_TR": "{0}/{1} Oyun Yüklendi", "uk_UA": "{0}/{1} ігор завантажено", @@ -2510,6 +2614,7 @@ "pl_PL": "", "pt_BR": "Versão do firmware: {0}", "ru_RU": "Версия прошивки: {0}", + "sv_SE": "Firmware-version: {0}", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2534,6 +2639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Optimerar XCI-filen '{0}'", "th_TH": "", "tr_TR": "", "uk_UA": "Обрізано XCI Файлів '{0}'", @@ -2558,6 +2664,7 @@ "pl_PL": "Wykryto niski limit dla przypisań pamięci", "pt_BR": "Limite baixo para mapeamentos de memória detectado", "ru_RU": "Обнаружен низкий лимит разметки памяти", + "sv_SE": "Låg gräns för minnesmappningar upptäcktes", "th_TH": "การตั้งค่าหน่วยความถึงขีดจำกัดต่ำสุดแล้ว", "tr_TR": "Bellek Haritaları İçin Düşük Limit Tespit Edildi ", "uk_UA": "Виявлено низьку межу для відображення памʼяті", @@ -2582,6 +2689,7 @@ "pl_PL": "Czy chcesz zwiększyć wartość vm.max_map_count do {0}", "pt_BR": "Você gostaria de aumentar o valor de vm.max_map_count para {0}", "ru_RU": "Хотите увеличить значение vm.max_map_count до {0}", + "sv_SE": "Vill du öka värdet för vm.max_map_count till {0}", "th_TH": "คุณต้องเพิ่มค่า vm.max_map_count ไปยัง {0}", "tr_TR": "vm.max_map_count değerini {0} sayısına yükseltmek ister misiniz", "uk_UA": "Бажаєте збільшити значення vm.max_map_count на {0}", @@ -2606,6 +2714,7 @@ "pl_PL": "Niektóre gry mogą próbować przypisać sobie więcej pamięci niż obecnie, jest to dozwolone. Ryujinx ulegnie awarii, gdy limit zostanie przekroczony.", "pt_BR": "Alguns jogos podem tentar criar mais mapeamentos de memória do que o atualmente permitido. Ryujinx irá falhar assim que este limite for excedido.", "ru_RU": "Некоторые игры могут создавать большую разметку памяти, чем разрешено на данный момент по умолчанию. Ryujinx вылетит при превышении этого лимита.", + "sv_SE": "Vissa spel kan försöka att skapa fler minnesmappningar än vad som tillåts. Ryujinx kommer att krascha så snart som denna gräns överstigs.", "th_TH": "บางเกมอาจพยายามใช้งานหน่วยความจำมากกว่าที่ได้รับอนุญาตในปัจจุบัน Ryujinx จะปิดตัวลงเมื่อเกินขีดจำกัดนี้", "tr_TR": "Bazı oyunlar şu an izin verilen bellek haritası limitinden daha fazlasını yaratmaya çalışabilir. Ryujinx bu limitin geçildiği takdirde kendini kapatıcaktır.", "uk_UA": "Деякі ігри можуть спробувати створити більше відображень памʼяті, ніж дозволено наразі. Ryujinx завершить роботу, щойно цей ліміт буде перевищено.", @@ -2630,6 +2739,7 @@ "pl_PL": "Tak, do następnego ponownego uruchomienia", "pt_BR": "Sim, até a próxima reinicialização", "ru_RU": "Да, до следующего перезапуска", + "sv_SE": "Ja, tills nästa omstart", "th_TH": "ใช่, จนกว่าจะรีสตาร์ทครั้งถัดไป", "tr_TR": "Evet, bir sonraki yeniden başlatmaya kadar", "uk_UA": "Так, до наст. перезапуску", @@ -2654,6 +2764,7 @@ "pl_PL": "Tak, permanentnie ", "pt_BR": "Sim, permanentemente", "ru_RU": "Да, постоянно", + "sv_SE": "Ja, permanent", "th_TH": "ใช่, อย่างถาวร", "tr_TR": "Evet, kalıcı olarak", "uk_UA": "Так, назавжди", @@ -2678,6 +2789,7 @@ "pl_PL": "Maksymalna ilość przypisanej pamięci jest mniejsza niż zalecana.", "pt_BR": "A quantidade máxima de mapeamentos de memória é menor que a recomendada.", "ru_RU": "Максимальная разметка памяти меньше, чем рекомендуется.", + "sv_SE": "Maximal mängd minnesmappningar är lägre än rekommenderat.", "th_TH": "จำนวนสูงสุดของการจัดการหน่วยความจำ ต่ำกว่าที่แนะนำ", "tr_TR": "İzin verilen maksimum bellek haritası değeri tavsiye edildiğinden daha düşük. ", "uk_UA": "Максимальна кількість відображення памʼяті менша, ніж рекомендовано.", @@ -2702,6 +2814,7 @@ "pl_PL": "Obecna wartość vm.max_map_count ({0}) jest mniejsza niż {1}. Niektóre gry mogą próbować stworzyć więcej mapowań pamięci niż obecnie jest to dozwolone. Ryujinx napotka crash, gdy dojdzie do takiej sytuacji.\n\nMożesz chcieć ręcznie zwiększyć limit lub zainstalować pkexec, co pozwala Ryujinx na pomoc w tym zakresie.", "pt_BR": "O valor atual de vm.max_map_count ({0}) é menor que {1}. Alguns jogos podem tentar criar mais mapeamentos de memória do que o permitido no momento. Ryujinx vai falhar assim que este limite for excedido.\n\nTalvez você queira aumentar o limite manualmente ou instalar pkexec, o que permite que Ryujinx ajude com isso.", "ru_RU": "Текущее значение vm.max_map_count ({0}) меньше, чем {1}. Некоторые игры могут попытаться создать большую разметку памяти, чем разрешено в данный момент. Ryujinx вылетит как только этот лимит будет превышен.\n\nВозможно, вам потребуется вручную увеличить лимит или установить pkexec, что позволит Ryujinx помочь справиться с превышением лимита.", + "sv_SE": "Det aktuella värdet för vm.max_map_count ({0}) är lägre än {1}. Vissa spel kan försöka att skapa fler minnesmappningar än vad som tillåts. Ryujinx kommer att krascha så snart som denna gräns överstigs.\n\nDu kanske vill manuellt öka gränsen eller installera pkexec, vilket tillåter att Ryujinx hjälper till med det.", "th_TH": "ค่าปัจจุบันของ vm.max_map_count ({0}) มีค่าต่ำกว่า {1} บางเกมอาจพยายามใช้หน่วยความจำมากกว่าที่ได้รับอนุญาตในปัจจุบัน Ryujinx จะปิดตัวลงเมื่อเกินขีดจำกัดนี้\n\nคุณอาจต้องการตั้งค่าเพิ่มขีดจำกัดด้วยตนเองหรือติดตั้ง pkexec ซึ่งอนุญาตให้ Ryujinx ช่วยเหลือคุณได้", "tr_TR": "Şu anki vm.max_map_count değeri {0}, bu {1} değerinden daha az. Bazı oyunlar şu an izin verilen bellek haritası limitinden daha fazlasını yaratmaya çalışabilir. Ryujinx bu limitin geçildiği takdirde kendini kapatıcaktır.\n\nManuel olarak bu limiti arttırmayı deneyebilir ya da pkexec'i yükleyebilirsiniz, bu da Ryujinx'in yardımcı olmasına izin verir.", "uk_UA": "Поточне значення vm.max_map_count ({0}) менше за {1}. Деякі ігри можуть спробувати створити більше відображень пам’яті, ніж дозволено наразі. Ryujinx завершить роботу, щойно цей ліміт буде перевищено.\n\nВи можете збільшити ліміт вручну або встановити pkexec, який дозволяє Ryujinx допомогти з цим.", @@ -2726,6 +2839,7 @@ "pl_PL": "Ustawienia", "pt_BR": "Configurações", "ru_RU": "Параметры", + "sv_SE": "Inställningar", "th_TH": "ตั้งค่า", "tr_TR": "Ayarlar", "uk_UA": "Налаштування", @@ -2750,6 +2864,7 @@ "pl_PL": "Interfejs użytkownika", "pt_BR": "Geral", "ru_RU": "Интерфейс", + "sv_SE": "Användargränssnitt", "th_TH": "หน้าจอผู้ใช้", "tr_TR": "Kullancı Arayüzü", "uk_UA": "Інтерфейс користувача", @@ -2774,6 +2889,7 @@ "pl_PL": "Ogólne", "pt_BR": "Geral", "ru_RU": "Общее", + "sv_SE": "Allmänt", "th_TH": "ทั่วไป", "tr_TR": "Genel", "uk_UA": "Загальні", @@ -2798,6 +2914,7 @@ "pl_PL": "Włącz Bogatą Obecność Discord", "pt_BR": "Habilitar Rich Presence do Discord", "ru_RU": "Статус активности в Discord", + "sv_SE": "Aktivera Discord Rich Presence", "th_TH": "เปิดใช้งาน Discord Rich Presence", "tr_TR": "Discord Zengin İçerik'i Etkinleştir", "uk_UA": "Увімкнути розширену присутність Discord", @@ -2822,6 +2939,7 @@ "pl_PL": "Sprawdzaj aktualizacje przy uruchomieniu", "pt_BR": "Verificar se há atualizações ao iniciar", "ru_RU": "Проверять наличие обновлений при запуске", + "sv_SE": "Leta efter uppdatering vid uppstart", "th_TH": "ตรวจหาการอัปเดตเมื่อเปิดโปรแกรม", "tr_TR": "Her Açılışta Güncellemeleri Denetle", "uk_UA": "Перевіряти наявність оновлень під час запуску", @@ -2846,6 +2964,7 @@ "pl_PL": "Pokazuj okno dialogowe \"Potwierdź wyjście\"", "pt_BR": "Exibir diálogo de confirmação ao sair", "ru_RU": "Подтверждать выход из приложения", + "sv_SE": "Visa \"Bekräfta avslut\"-dialog", "th_TH": "แสดง \"ปุ่มยืนยันการออก\" เมื่อออกเกม", "tr_TR": "\"Çıkışı Onayla\" Diyaloğunu Göster", "uk_UA": "Показати діалогове вікно «Підтвердити вихід».", @@ -2870,6 +2989,7 @@ "pl_PL": "", "pt_BR": "Lembrar tamanho/posição da Janela", "ru_RU": "Запомнить размер/положение окна", + "sv_SE": "Kom ihåg fönstrets storlek/position", "th_TH": "จดจำ ขนาดหน้าต่างแอพพลิเคชั่น/คำแหน่ง", "tr_TR": "", "uk_UA": "Запам'ятати Розмір/Позицію вікна", @@ -2894,6 +3014,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Visa titelrad (kräver omstart)", "th_TH": "", "tr_TR": "", "uk_UA": "Показувати рядок заголовка (Потрібен перезапуск)", @@ -2918,6 +3039,7 @@ "pl_PL": "Ukryj kursor:", "pt_BR": "Esconder o cursor do mouse:", "ru_RU": "Скрывать курсор", + "sv_SE": "Dölj markör:", "th_TH": "ซ่อน เคอร์เซอร์:", "tr_TR": "İşaretçiyi Gizle:", "uk_UA": "Сховати вказівник:", @@ -2942,6 +3064,7 @@ "pl_PL": "Nigdy", "pt_BR": "Nunca", "ru_RU": "Никогда", + "sv_SE": "Aldrig", "th_TH": "ไม่ต้อง", "tr_TR": "Hiçbir Zaman", "uk_UA": "Ніколи", @@ -2966,6 +3089,7 @@ "pl_PL": "Gdy bezczynny", "pt_BR": "Esconder o cursor quando ocioso", "ru_RU": "В простое", + "sv_SE": "Vid overksam", "th_TH": "เมื่อไม่ได้ใช้งาน", "tr_TR": "Hareketsiz Durumda", "uk_UA": "Сховати у режимі очікування", @@ -2990,6 +3114,7 @@ "pl_PL": "Zawsze", "pt_BR": "Sempre", "ru_RU": "Всегда", + "sv_SE": "Alltid", "th_TH": "ตลอดเวลา", "tr_TR": "Her Zaman", "uk_UA": "Завжди", @@ -3014,6 +3139,7 @@ "pl_PL": "Katalogi gier", "pt_BR": "Diretórios de jogo", "ru_RU": "Папки с играми", + "sv_SE": "Spelkataloger", "th_TH": "ไดเรกทอรี่ของเกม", "tr_TR": "Oyun Dizinleri", "uk_UA": "Тека ігор", @@ -3038,6 +3164,7 @@ "pl_PL": "", "pt_BR": "Carregar Automaticamente Diretórios de DLC/Atualizações", "ru_RU": "", + "sv_SE": "Läs automatisk in DLC/speluppdateringar", "th_TH": "โหลดไดเรกทอรี DLC/ไฟล์อัปเดต อัตโนมัติ", "tr_TR": "", "uk_UA": "Автозавантаження каталогів DLC/Оновлень", @@ -3062,6 +3189,7 @@ "pl_PL": "", "pt_BR": "DLCs e Atualizações que se referem a arquivos ausentes serão descarregadas automaticamente", "ru_RU": "", + "sv_SE": "DLC och speluppdateringar som refererar till saknade filer kommer inte att läsas in automatiskt", "th_TH": "", "tr_TR": "", "uk_UA": "DLC та Оновлення, які посилаються на відсутні файли, будуть автоматично вимкнуті.", @@ -3086,6 +3214,7 @@ "pl_PL": "Dodaj", "pt_BR": "Adicionar", "ru_RU": "Добавить", + "sv_SE": "Lägg till", "th_TH": "เพิ่ม", "tr_TR": "Ekle", "uk_UA": "Додати", @@ -3110,6 +3239,7 @@ "pl_PL": "Usuń", "pt_BR": "Remover", "ru_RU": "Удалить", + "sv_SE": "Ta bort", "th_TH": "เอาออก", "tr_TR": "Kaldır", "uk_UA": "Видалити", @@ -3134,6 +3264,7 @@ "pl_PL": "", "pt_BR": "Sistema", "ru_RU": "Система", + "sv_SE": "System", "th_TH": "ระบบ", "tr_TR": "Sistem", "uk_UA": "Система", @@ -3158,6 +3289,7 @@ "pl_PL": "Główne", "pt_BR": "Principal", "ru_RU": "Основные настройки", + "sv_SE": "Kärna", "th_TH": "แกนกลาง", "tr_TR": "Çekirdek", "uk_UA": "Ядро", @@ -3182,6 +3314,7 @@ "pl_PL": "Region systemu:", "pt_BR": "Região do sistema:", "ru_RU": "Регион прошивки:", + "sv_SE": "Systemregion:", "th_TH": "ภูมิภาคของระบบ:", "tr_TR": "Sistem Bölgesi:", "uk_UA": "Регіон системи:", @@ -3206,6 +3339,7 @@ "pl_PL": "Japonia", "pt_BR": "Japão", "ru_RU": "Япония", + "sv_SE": "Japan", "th_TH": "ญี่ปุ่น", "tr_TR": "Japonya", "uk_UA": "Японія", @@ -3230,6 +3364,7 @@ "pl_PL": "Stany Zjednoczone", "pt_BR": "EUA", "ru_RU": "США", + "sv_SE": "USA", "th_TH": "สหรัฐอเมริกา", "tr_TR": "ABD", "uk_UA": "США", @@ -3254,6 +3389,7 @@ "pl_PL": "Europa", "pt_BR": "Europa", "ru_RU": "Европа", + "sv_SE": "Europa", "th_TH": "ยุโรป", "tr_TR": "Avrupa", "uk_UA": "Європа", @@ -3278,6 +3414,7 @@ "pl_PL": "", "pt_BR": "Austrália", "ru_RU": "Австралия", + "sv_SE": "Australien", "th_TH": "ออสเตรเลีย", "tr_TR": "Avustralya", "uk_UA": "Австралія", @@ -3302,6 +3439,7 @@ "pl_PL": "Chiny", "pt_BR": "", "ru_RU": "Китай", + "sv_SE": "Kina", "th_TH": "จีน", "tr_TR": "Çin", "uk_UA": "Китай", @@ -3326,6 +3464,7 @@ "pl_PL": "", "pt_BR": "Coreia", "ru_RU": "Корея", + "sv_SE": "Korea", "th_TH": "เกาหลี", "tr_TR": "Kore", "uk_UA": "Корея", @@ -3350,6 +3489,7 @@ "pl_PL": "Tajwan", "pt_BR": "", "ru_RU": "Тайвань", + "sv_SE": "Taiwan", "th_TH": "ไต้หวัน", "tr_TR": "Tayvan", "uk_UA": "Тайвань", @@ -3374,6 +3514,7 @@ "pl_PL": "Język systemu:", "pt_BR": "Idioma do sistema:", "ru_RU": "Язык прошивки:", + "sv_SE": "Systemspråk:", "th_TH": "ภาษาของระบบ:", "tr_TR": "Sistem Dili:", "uk_UA": "Мова системи:", @@ -3398,6 +3539,7 @@ "pl_PL": "Japoński", "pt_BR": "Japonês", "ru_RU": "Японский", + "sv_SE": "Japanska", "th_TH": "ญี่ปุ่น", "tr_TR": "Japonca", "uk_UA": "Японська", @@ -3422,6 +3564,7 @@ "pl_PL": "Angielski (Stany Zjednoczone)", "pt_BR": "Inglês americano", "ru_RU": "Английский (США)", + "sv_SE": "Amerikansk engelska", "th_TH": "อังกฤษ (อเมริกัน)", "tr_TR": "Amerikan İngilizcesi", "uk_UA": "Англійська (США)", @@ -3446,6 +3589,7 @@ "pl_PL": "Francuski", "pt_BR": "Francês", "ru_RU": "Французский", + "sv_SE": "Franska", "th_TH": "ฝรั่งเศส", "tr_TR": "Fransızca", "uk_UA": "Французька", @@ -3470,6 +3614,7 @@ "pl_PL": "Niemiecki", "pt_BR": "Alemão", "ru_RU": "Германский", + "sv_SE": "Tyska", "th_TH": "เยอรมัน", "tr_TR": "Almanca", "uk_UA": "Німецька", @@ -3494,6 +3639,7 @@ "pl_PL": "Włoski", "pt_BR": "Italiano", "ru_RU": "Итальянский", + "sv_SE": "Italienska", "th_TH": "อิตาลี", "tr_TR": "İtalyanca", "uk_UA": "Італійська", @@ -3518,6 +3664,7 @@ "pl_PL": "Hiszpański", "pt_BR": "Espanhol", "ru_RU": "Испанский", + "sv_SE": "Spanska", "th_TH": "สเปน", "tr_TR": "İspanyolca", "uk_UA": "Іспанська", @@ -3542,6 +3689,7 @@ "pl_PL": "Chiński", "pt_BR": "Chinês", "ru_RU": "Китайский", + "sv_SE": "Kinesiska", "th_TH": "จีน", "tr_TR": "Çince", "uk_UA": "Китайська", @@ -3566,6 +3714,7 @@ "pl_PL": "Koreański", "pt_BR": "Coreano", "ru_RU": "Корейский", + "sv_SE": "Koreanska", "th_TH": "เกาหลี", "tr_TR": "Korece", "uk_UA": "Корейська", @@ -3590,6 +3739,7 @@ "pl_PL": "Holenderski", "pt_BR": "Holandês", "ru_RU": "Нидерландский", + "sv_SE": "Nederländska", "th_TH": "ดัตช์", "tr_TR": "Flemenkçe", "uk_UA": "Нідерландська", @@ -3614,6 +3764,7 @@ "pl_PL": "Portugalski", "pt_BR": "Português", "ru_RU": "Португальский", + "sv_SE": "Portugisiska", "th_TH": "โปรตุเกส", "tr_TR": "Portekizce", "uk_UA": "Португальська", @@ -3638,6 +3789,7 @@ "pl_PL": "Rosyjski", "pt_BR": "Russo", "ru_RU": "Русский", + "sv_SE": "Ryska", "th_TH": "รัสเซีย", "tr_TR": "Rusça", "uk_UA": "Російська", @@ -3662,6 +3814,7 @@ "pl_PL": "Tajwański", "pt_BR": "Taiwanês", "ru_RU": "Тайванский", + "sv_SE": "Taiwanesiska", "th_TH": "จีนตัวเต็ม (ไต้หวัน)", "tr_TR": "Tayvanca", "uk_UA": "Тайванська", @@ -3686,6 +3839,7 @@ "pl_PL": "Angielski (Wielka Brytania)", "pt_BR": "Inglês britânico", "ru_RU": "Английский (Британия)", + "sv_SE": "Brittisk engelska", "th_TH": "อังกฤษ (บริติช)", "tr_TR": "İngiliz İngilizcesi", "uk_UA": "Англійська (Великобританія)", @@ -3710,6 +3864,7 @@ "pl_PL": "Kanadyjski Francuski", "pt_BR": "Francês canadense", "ru_RU": "Французский (Канада)", + "sv_SE": "Kanadensisk franska", "th_TH": "ฝรั่งเศส (แคนาดา)", "tr_TR": "Kanada Fransızcası", "uk_UA": "Французька (Канада)", @@ -3734,6 +3889,7 @@ "pl_PL": "Hiszpański (Ameryka Łacińska)", "pt_BR": "Espanhol latino", "ru_RU": "Испанский (Латинская Америка)", + "sv_SE": "Latinamerikansk spanska", "th_TH": "สเปน (ลาตินอเมริกา)", "tr_TR": "Latin Amerika İspanyolcası", "uk_UA": "Іспанська (Латиноамериканська)", @@ -3758,6 +3914,7 @@ "pl_PL": "Chiński (Uproszczony)", "pt_BR": "Chinês simplificado", "ru_RU": "Китайский (упрощённый)", + "sv_SE": "Förenklad kinesiska", "th_TH": "จีน (ตัวย่อ)", "tr_TR": "Basitleştirilmiş Çince", "uk_UA": "Спрощена китайська", @@ -3782,6 +3939,7 @@ "pl_PL": "Chiński (Tradycyjny)", "pt_BR": "Chinês tradicional", "ru_RU": "Китайский (традиционный)", + "sv_SE": "Traditionell kinesiska", "th_TH": "จีน (ดั้งเดิม)", "tr_TR": "Geleneksel Çince", "uk_UA": "Традиційна китайська", @@ -3806,6 +3964,7 @@ "pl_PL": "Strefa czasowa systemu:", "pt_BR": "Fuso horário do sistema:", "ru_RU": "Часовой пояс прошивки:", + "sv_SE": "Systemets tidszon:", "th_TH": "เขตเวลาของระบบ:", "tr_TR": "Sistem Saat Dilimi:", "uk_UA": "Часовий пояс системи:", @@ -3830,6 +3989,7 @@ "pl_PL": "Czas systemu:", "pt_BR": "Hora do sistema:", "ru_RU": "Системное время в прошивке:", + "sv_SE": "Systemtid:", "th_TH": "เวลาของระบบ:", "tr_TR": "Sistem Saati:", "uk_UA": "Час системи:", @@ -3854,6 +4014,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Återsynka till datorns datum och tid", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -3878,6 +4039,7 @@ "pl_PL": "PPTC (Profilowana pamięć podręczna trwałych łłumaczeń)", "pt_BR": "Habilitar PPTC (Profiled Persistent Translation Cache)", "ru_RU": "Использовать PPTC (Profiled Persistent Translation Cache)", + "sv_SE": "PPTC (Profilerad bestående översättningscache)", "th_TH": "PPTC (แคชโปรไฟล์การแปลแบบถาวร)", "tr_TR": "PPTC (Profilli Sürekli Çeviri Önbelleği)", "uk_UA": "PPTC (профільований постійний кеш перекладу)", @@ -3902,6 +4064,7 @@ "pl_PL": "Low-power PPTC", "pt_BR": "Low-power PPTC", "ru_RU": "Low-power PPTC", + "sv_SE": "PPTC med låg strömförbrukning", "th_TH": "PPTC แบบพลังงานตํ่า", "tr_TR": "Low-power PPTC", "uk_UA": "Low-power PPTC", @@ -3926,6 +4089,7 @@ "pl_PL": "Sprawdzanie integralności systemu plików", "pt_BR": "Habilitar verificação de integridade do sistema de arquivos", "ru_RU": "Проверка целостности файловой системы", + "sv_SE": "Integritetskontroller av filsystem", "th_TH": "ตรวจสอบความถูกต้องของ FS", "tr_TR": "FS Bütünlük Kontrolleri", "uk_UA": "Перевірка цілісності FS", @@ -3950,6 +4114,7 @@ "pl_PL": "Backend Dżwięku:", "pt_BR": "Biblioteca de saída de áudio:", "ru_RU": "Аудио бэкенд:", + "sv_SE": "Ljudbakände:", "th_TH": "ระบบเสียงเบื้องหลัง:", "tr_TR": "Ses Motoru:", "uk_UA": "Аудіосистема:", @@ -3974,6 +4139,7 @@ "pl_PL": "Atrapa", "pt_BR": "Nenhuma", "ru_RU": "Без звука", + "sv_SE": "Dummy", "th_TH": "", "tr_TR": "Yapay", "uk_UA": "", @@ -3998,6 +4164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "OpenAL", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4022,6 +4189,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "SoundIO", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4046,6 +4214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "SDL2", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4070,6 +4239,7 @@ "pl_PL": "Hacki", "pt_BR": "", "ru_RU": "Хаки", + "sv_SE": "Hack", "th_TH": "แฮ็ก", "tr_TR": "Hack'ler", "uk_UA": "Хитрощі", @@ -4094,6 +4264,7 @@ "pl_PL": " (mogą powodować niestabilność)", "pt_BR": " (Pode causar instabilidade)", "ru_RU": "Возможна нестабильная работа", + "sv_SE": "Kan orsaka instabilitet", "th_TH": "อาจทำให้เกิดข้อผิดพลาดได้", "tr_TR": " (dengesizlik oluşturabilir)", "uk_UA": " (може викликати нестабільність)", @@ -4118,6 +4289,7 @@ "pl_PL": "Użyj alternatywnego układu pamięci (Deweloperzy)", "pt_BR": "Tamanho da DRAM:", "ru_RU": "Использовать альтернативный макет памяти (для разработчиков)", + "sv_SE": "DRAM-storlek:", "th_TH": "ใช้หน่วยความจำสำรอง (โหมดนักพัฒนา)", "tr_TR": "Alternatif bellek düzeni kullan (Geliştirici)", "uk_UA": "Використовувати альтернативне розташування пам'яті (для розробників)", @@ -4142,6 +4314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "4GiB", "th_TH": "", "tr_TR": "", "uk_UA": "4Гб", @@ -4166,6 +4339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "6GiB", "th_TH": "", "tr_TR": "", "uk_UA": "6Гб", @@ -4190,6 +4364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "8GiB", "th_TH": "", "tr_TR": "", "uk_UA": "8Гб", @@ -4214,6 +4389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "12GiB", "th_TH": "", "tr_TR": "", "uk_UA": "12Гб", @@ -4238,6 +4414,7 @@ "pl_PL": "Ignoruj Brakujące Usługi", "pt_BR": "Ignorar serviços não implementados", "ru_RU": "Игнорировать отсутствующие службы", + "sv_SE": "Ignorera saknade tjänster", "th_TH": "เมินเฉยบริการที่หายไป", "tr_TR": "Eksik Servisleri Görmezden Gel", "uk_UA": "Ігнорувати відсутні служби", @@ -4262,6 +4439,7 @@ "pl_PL": "Ignoruj ​​aplet", "pt_BR": "Ignorar applet", "ru_RU": "Игнорировать Апплет", + "sv_SE": "Ignorera applet", "th_TH": "เมินเฉย Applet", "tr_TR": "", "uk_UA": "Ігнорувати Аплет", @@ -4286,6 +4464,7 @@ "pl_PL": "Grafika", "pt_BR": "Gráficos", "ru_RU": "Графика", + "sv_SE": "Grafik", "th_TH": "กราฟฟิก", "tr_TR": "Grafikler", "uk_UA": "Графіка", @@ -4310,6 +4489,7 @@ "pl_PL": "Graficzne API", "pt_BR": "API gráfica", "ru_RU": "Графические API", + "sv_SE": "Grafik-API", "th_TH": "API กราฟฟิก", "tr_TR": "Grafikler API", "uk_UA": "Графічний API", @@ -4334,6 +4514,7 @@ "pl_PL": "Włącz pamięć podręczną cieni", "pt_BR": "Habilitar cache de shader", "ru_RU": "Кэшировать шейдеры", + "sv_SE": "Aktivera Shader Cache", "th_TH": "เปิดใช้งาน แคชแสงเงา", "tr_TR": "Shader Önbelleğini Etkinleştir", "uk_UA": "Увімкнути кеш шейдерів", @@ -4358,6 +4539,7 @@ "pl_PL": "Filtrowanie anizotropowe:", "pt_BR": "Filtragem anisotrópica:", "ru_RU": "Анизотропная фильтрация:", + "sv_SE": "Anisotropisk filtrering:", "th_TH": "ตัวกรองแบบ Anisotropic:", "tr_TR": "Eşyönsüz Doku Süzmesi:", "uk_UA": "Анізотропна фільтрація:", @@ -4382,6 +4564,7 @@ "pl_PL": "Automatyczne", "pt_BR": "Automático", "ru_RU": "Автоматически", + "sv_SE": "Automatiskt", "th_TH": "อัตโนมัติ", "tr_TR": "Otomatik", "uk_UA": "Авто", @@ -4406,6 +4589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "2x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4430,6 +4614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "4x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4454,6 +4639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "8x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4478,6 +4664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "16x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4502,6 +4689,7 @@ "pl_PL": "Skalowanie rozdzielczości:", "pt_BR": "Escala de resolução:", "ru_RU": "Масштабирование:", + "sv_SE": "Upplösningsskalning:", "th_TH": "อัตราส่วนความละเอียด:", "tr_TR": "Çözünürlük Ölçeği:", "uk_UA": "Роздільна здатність:", @@ -4526,6 +4714,7 @@ "pl_PL": "Niestandardowa (Niezalecane)", "pt_BR": "Customizada (não recomendado)", "ru_RU": "Пользовательское (не рекомендуется)", + "sv_SE": "Anpassad (rekommenderas inte)", "th_TH": "กำหนดเอง (ไม่แนะนำ)", "tr_TR": "Özel (Tavsiye Edilmez)", "uk_UA": "Користувацька (не рекомендовано)", @@ -4550,6 +4739,7 @@ "pl_PL": "Natywna (720p/1080p)", "pt_BR": "Nativa (720p/1080p)", "ru_RU": "Нативное (720p/1080p)", + "sv_SE": "Inbyggd (720p/1080p)", "th_TH": "พื้นฐานระบบ (720p/1080p)", "tr_TR": "Yerel (720p/1080p)", "uk_UA": "Стандартний (720p/1080p)", @@ -4574,6 +4764,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "2x (1440p/2160p)", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4598,6 +4789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "3x (2160p/3240p)", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4622,6 +4814,7 @@ "pl_PL": "4x (2880p/4320p) (niezalecane)", "pt_BR": "4x (2880p/4320p) (não recomendado)", "ru_RU": "4x (2880p/4320p) (не рекомендуется)", + "sv_SE": "4x (2880p/4320p) (rekommenderas inte)", "th_TH": "4x (2880p/4320p) (ไม่แนะนำ)", "tr_TR": "4x (2880p/4320p) (Tavsiye Edilmez)", "uk_UA": "4x (2880p/4320p) (Не рекомендується)", @@ -4646,6 +4839,7 @@ "pl_PL": "Format obrazu:", "pt_BR": "Proporção:", "ru_RU": "Соотношение сторон:", + "sv_SE": "Bildförhållande:", "th_TH": "อัตราส่วนภาพ:", "tr_TR": "En-Boy Oranı:", "uk_UA": "Співвідношення сторін:", @@ -4670,6 +4864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "4:3", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4694,6 +4889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "16:9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4718,6 +4914,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "16:10", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4742,6 +4939,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "21:9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4766,6 +4964,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "32:9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4790,6 +4989,7 @@ "pl_PL": "Rozciągnij do Okna", "pt_BR": "Esticar até caber", "ru_RU": "Растянуть до размеров окна", + "sv_SE": "Sträck ut för att passa fönster", "th_TH": "ยืดภาพเพื่อให้พอดีกับหน้าต่าง", "tr_TR": "Pencereye Sığdırmak İçin Genişlet", "uk_UA": "Розтягнути до розміру вікна", @@ -4814,6 +5014,7 @@ "pl_PL": "Opcje programisty", "pt_BR": "Opções do desenvolvedor", "ru_RU": "Параметры разработчика", + "sv_SE": "Utvecklarinställningar", "th_TH": "ตัวเลือกนักพัฒนา", "tr_TR": "Geliştirici Seçenekleri", "uk_UA": "Параметри розробника", @@ -4838,6 +5039,7 @@ "pl_PL": "Ścieżka do zgranych cieni graficznych:", "pt_BR": "Diretório para despejo de shaders:", "ru_RU": "Путь дампа графических шейдеров", + "sv_SE": "Sökväg för Graphics Shader Dump:", "th_TH": "ที่เก็บ ดัมพ์ไฟล์ แสงเงา:", "tr_TR": "Grafik Shader Döküm Yolu:", "uk_UA": "Шлях скидання графічного шейдера:", @@ -4862,6 +5064,7 @@ "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", + "sv_SE": "Loggning", "th_TH": "ประวัติ", "tr_TR": "Loglama", "uk_UA": "Налагодження", @@ -4886,6 +5089,7 @@ "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", + "sv_SE": "Loggning", "th_TH": "ประวัติ", "tr_TR": "Loglama", "uk_UA": "Налагодження", @@ -4910,6 +5114,7 @@ "pl_PL": "Włącz rejestrowanie zdarzeń do pliku", "pt_BR": "Salvar logs em arquivo", "ru_RU": "Включить запись в файл", + "sv_SE": "Aktivera loggning till fil", "th_TH": "เปิดใช้งานการบันทึกประวัติ ไปยังไฟล์", "tr_TR": "Logları Dosyaya Kaydetmeyi Etkinleştir", "uk_UA": "Увімкнути налагодження у файл", @@ -4934,6 +5139,7 @@ "pl_PL": "Wlącz Skróty Logów", "pt_BR": "Habilitar logs de stub", "ru_RU": "Включить журнал-заглушку", + "sv_SE": "Aktivera stubbloggar", "th_TH": "เปิดใช้งานการบันทึกประวัติ", "tr_TR": "Stub Loglarını Etkinleştir", "uk_UA": "Увімкнути журнали заглушки", @@ -4958,6 +5164,7 @@ "pl_PL": "Włącz Logi Informacyjne", "pt_BR": "Habilitar logs de informação", "ru_RU": "Включить информационный журнал", + "sv_SE": "Aktivera informationsloggar", "th_TH": "เปิดใช้งานการบันทึกประวัติการใช้งาน", "tr_TR": "Bilgi Loglarını Etkinleştir", "uk_UA": "Увімкнути інформаційні журнали", @@ -4982,6 +5189,7 @@ "pl_PL": "Włącz Logi Ostrzeżeń", "pt_BR": "Habilitar logs de alerta", "ru_RU": "Включить журнал предупреждений", + "sv_SE": "Aktivera varningsloggar", "th_TH": "เปิดใช้งานการบันทึกประวัติคำเตือน", "tr_TR": "Uyarı Loglarını Etkinleştir", "uk_UA": "Увімкнути журнали попереджень", @@ -5006,6 +5214,7 @@ "pl_PL": "Włącz Logi Błędów", "pt_BR": "Habilitar logs de erro", "ru_RU": "Включить журнал ошибок", + "sv_SE": "Aktivera felloggar", "th_TH": "เปิดใช้งานการบันทึกประวัติข้อผิดพลาด", "tr_TR": "Hata Loglarını Etkinleştir", "uk_UA": "Увімкнути журнали помилок", @@ -5030,6 +5239,7 @@ "pl_PL": "Włącz Logi Śledzenia", "pt_BR": "Habilitar logs de rastreamento", "ru_RU": "Включить журнал трассировки", + "sv_SE": "Aktivera spårloggar", "th_TH": "เปิดใช้งานการบันทึกประวัติการติดตาม", "tr_TR": "Trace Loglarını Etkinleştir", "uk_UA": "Увімкнути журнали трасування", @@ -5054,6 +5264,7 @@ "pl_PL": "Włącz Logi Gości", "pt_BR": "Habilitar logs do programa convidado", "ru_RU": "Включить гостевые журналы", + "sv_SE": "Aktivera gästloggar", "th_TH": "เปิดใช้งานการบันทึกประวัติผู้เยี่ยมชม", "tr_TR": "Guest Loglarını Etkinleştir", "uk_UA": "Увімкнути журнали гостей", @@ -5078,6 +5289,7 @@ "pl_PL": "Włącz Logi Dostępu do Systemu Plików", "pt_BR": "Habilitar logs de acesso ao sistema de arquivos", "ru_RU": "Включить журналы доступа файловой системы", + "sv_SE": "Aktivera loggar för filsystemsåtkomst", "th_TH": "เปิดใช้งานการบันทึกประวัติการเข้าถึง Fs", "tr_TR": "Fs Erişim Loglarını Etkinleştir", "uk_UA": "Увімкнути журнали доступу Fs", @@ -5102,6 +5314,7 @@ "pl_PL": "Tryb globalnego dziennika zdarzeń systemu plików:", "pt_BR": "Modo global de logs do sistema de arquivos:", "ru_RU": "Режим журнала глобального доступа файловой системы:", + "sv_SE": "Loggläge för global filsystemsåtkomst:", "th_TH": "โหมด การเข้าถึงประวัติส่วนกลาง:", "tr_TR": "Fs Evrensel Erişim Log Modu:", "uk_UA": "Режим журналу глобального доступу Fs:", @@ -5126,6 +5339,7 @@ "pl_PL": "Opcje programisty (UWAGA: wpływa na wydajność)", "pt_BR": "Opções do desenvolvedor (AVISO: Vai reduzir a performance)", "ru_RU": "Параметры разработчика", + "sv_SE": "Utvecklarinställningar", "th_TH": "ตัวเลือกนักพัฒนา", "tr_TR": "Geliştirici Seçenekleri (UYARI: Performansı düşürecektir)", "uk_UA": "Параметри розробника (УВАГА: шкодить продуктивності!)", @@ -5150,6 +5364,7 @@ "pl_PL": "UWAGA: Pogrorszy wydajność", "pt_BR": "AVISO: Reduzirá o desempenho", "ru_RU": "ВНИМАНИЕ: эти настройки снижают производительность", + "sv_SE": "VARNING: Kommer att reducera prestandan", "th_TH": "คำเตือน: จะทำให้ประสิทธิภาพลดลง", "tr_TR": "UYARI: Oyun performansı azalacak", "uk_UA": "УВАГА: Зміна параметрів нижче негативно впливає на продуктивність", @@ -5174,6 +5389,7 @@ "pl_PL": "Poziom rejestrowania do dziennika zdarzeń Backendu Graficznego:", "pt_BR": "Nível de log do backend gráfico:", "ru_RU": "Уровень журнала бэкенда графики:", + "sv_SE": "Loggnivå för grafikbakände:", "th_TH": "ระดับการบันทึกประวัติ กราฟิกเบื้องหลัง:", "tr_TR": "Grafik Arka Uç Günlük Düzeyi", "uk_UA": "Рівень журналу графічного сервера:", @@ -5198,6 +5414,7 @@ "pl_PL": "Nic", "pt_BR": "Nenhum", "ru_RU": "Нет", + "sv_SE": "Ingen", "th_TH": "ไม่มี", "tr_TR": "Hiçbiri", "uk_UA": "Немає", @@ -5222,6 +5439,7 @@ "pl_PL": "Błędy", "pt_BR": "Erro", "ru_RU": "Ошибка", + "sv_SE": "Fel", "th_TH": "ผิดพลาด", "tr_TR": "Hata", "uk_UA": "Помилка", @@ -5246,6 +5464,7 @@ "pl_PL": "Spowolnienia", "pt_BR": "Lentidão", "ru_RU": "Замедления", + "sv_SE": "Långsamheter", "th_TH": "ช้าลง", "tr_TR": "Yavaşlamalar", "uk_UA": "Уповільнення", @@ -5270,6 +5489,7 @@ "pl_PL": "Wszystko", "pt_BR": "Todos", "ru_RU": "Всё", + "sv_SE": "Alla", "th_TH": "ทั้งหมด", "tr_TR": "Hepsi", "uk_UA": "Все", @@ -5294,6 +5514,7 @@ "pl_PL": "Włącz dzienniki zdarzeń do debugowania", "pt_BR": "Habilitar logs de depuração", "ru_RU": "Включить журнал отладки", + "sv_SE": "Aktivera felsökningsloggar", "th_TH": "เปิดใช้งาน ประวัติข้อบกพร่อง", "tr_TR": "Hata Ayıklama Loglarını Etkinleştir", "uk_UA": "Увімкнути журнали налагодження", @@ -5318,6 +5539,7 @@ "pl_PL": "Sterowanie", "pt_BR": "Controle", "ru_RU": "Управление", + "sv_SE": "Inmatning", "th_TH": "ป้อนข้อมูล", "tr_TR": "Giriş Yöntemi", "uk_UA": "Введення", @@ -5342,6 +5564,7 @@ "pl_PL": "Tryb zadokowany", "pt_BR": "Habilitar modo TV", "ru_RU": "Стационарный режим", + "sv_SE": "Dockat läge", "th_TH": "ด็อกโหมด", "tr_TR": "Docked Modu Etkinleştir", "uk_UA": "Режим док-станції", @@ -5366,6 +5589,7 @@ "pl_PL": "Bezpośredni dostęp do klawiatury", "pt_BR": "Acesso direto ao teclado", "ru_RU": "Прямой ввод клавиатуры", + "sv_SE": "Direkt tangentbordsåtkomst", "th_TH": "เข้าถึงคีย์บอร์ดโดยตรง", "tr_TR": "Doğrudan Klavye Erişimi", "uk_UA": "Прямий доступ з клавіатури", @@ -5390,6 +5614,7 @@ "pl_PL": "Zapisz", "pt_BR": "Salvar", "ru_RU": "Сохранить", + "sv_SE": "Spara", "th_TH": "บันทึก", "tr_TR": "Kaydet", "uk_UA": "Зберегти", @@ -5414,6 +5639,7 @@ "pl_PL": "Zamknij", "pt_BR": "Fechar", "ru_RU": "Закрыть", + "sv_SE": "Stäng", "th_TH": "ปิด", "tr_TR": "Kapat", "uk_UA": "Закрити", @@ -5438,6 +5664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Ок", + "sv_SE": "Ok", "th_TH": "ตกลง", "tr_TR": "Tamam", "uk_UA": "Гаразд", @@ -5462,6 +5689,7 @@ "pl_PL": "Anuluj", "pt_BR": "Cancelar", "ru_RU": "Отмена", + "sv_SE": "Avbryt", "th_TH": "ยกเลิก", "tr_TR": "İptal", "uk_UA": "Скасувати", @@ -5486,6 +5714,7 @@ "pl_PL": "Zastosuj", "pt_BR": "Aplicar", "ru_RU": "Применить", + "sv_SE": "Verkställ", "th_TH": "นำไปใช้", "tr_TR": "Uygula", "uk_UA": "Застосувати", @@ -5510,6 +5739,7 @@ "pl_PL": "Gracz", "pt_BR": "Jogador", "ru_RU": "Игрок", + "sv_SE": "Spelare", "th_TH": "ผู้เล่น", "tr_TR": "Oyuncu", "uk_UA": "Гравець", @@ -5534,6 +5764,7 @@ "pl_PL": "Gracz 1", "pt_BR": "Jogador 1", "ru_RU": "Игрок 1", + "sv_SE": "Spelare 1", "th_TH": "ผู้เล่นคนที่ 1", "tr_TR": "Oyuncu 1", "uk_UA": "Гравець 1", @@ -5558,6 +5789,7 @@ "pl_PL": "Gracz 2", "pt_BR": "Jogador 2", "ru_RU": "Игрок 2", + "sv_SE": "Spelare 2", "th_TH": "ผู้เล่นคนที่ 2", "tr_TR": "Oyuncu 2", "uk_UA": "Гравець 2", @@ -5582,6 +5814,7 @@ "pl_PL": "Gracz 3", "pt_BR": "Jogador 3", "ru_RU": "Игрок 3", + "sv_SE": "Spelare 3", "th_TH": "ผู้เล่นคนที่ 3", "tr_TR": "Oyuncu 3", "uk_UA": "Гравець 3", @@ -5606,6 +5839,7 @@ "pl_PL": "Gracz 4", "pt_BR": "Jogador 4", "ru_RU": "Игрок 4", + "sv_SE": "Spelare 4", "th_TH": "ผู้เล่นคนที่ 4", "tr_TR": "Oyuncu 4", "uk_UA": "Гравець 4", @@ -5630,6 +5864,7 @@ "pl_PL": "Gracz 5", "pt_BR": "Jogador 5", "ru_RU": "Игрок 5", + "sv_SE": "Spelare 5", "th_TH": "ผู้เล่นคนที่ 5", "tr_TR": "Oyuncu 5", "uk_UA": "Гравець 5", @@ -5654,6 +5889,7 @@ "pl_PL": "Gracz 6", "pt_BR": "Jogador 6", "ru_RU": "Игрок 6", + "sv_SE": "Spelare 6", "th_TH": "ผู้เล่นคนที่ 6", "tr_TR": "Oyuncu 6", "uk_UA": "Гравець 6", @@ -5678,6 +5914,7 @@ "pl_PL": "Gracz 7", "pt_BR": "Jogador 7", "ru_RU": "Игрок 7", + "sv_SE": "Spelare 7", "th_TH": "ผู้เล่นคนที่ 7", "tr_TR": "Oyuncu 7", "uk_UA": "Гравець 7", @@ -5702,6 +5939,7 @@ "pl_PL": "Gracz 8", "pt_BR": "Jogador 8", "ru_RU": "Игрок 8", + "sv_SE": "Spelare 8", "th_TH": "ผู้เล่นคนที่ 8", "tr_TR": "Oyuncu 8", "uk_UA": "Гравець 8", @@ -5726,6 +5964,7 @@ "pl_PL": "Przenośny", "pt_BR": "Portátil", "ru_RU": "Портативный", + "sv_SE": "Handhållen", "th_TH": "แฮนด์เฮลด์โหมด", "tr_TR": "Portatif Mod", "uk_UA": "Портативний", @@ -5750,6 +5989,7 @@ "pl_PL": "Urządzenie wejściowe", "pt_BR": "Dispositivo de entrada", "ru_RU": "Устройство ввода", + "sv_SE": "Inmatningsenhet", "th_TH": "อุปกรณ์ป้อนข้อมูล", "tr_TR": "Giriş Cihazı", "uk_UA": "Пристрій введення", @@ -5774,6 +6014,7 @@ "pl_PL": "Odśwież", "pt_BR": "Atualizar", "ru_RU": "Обновить", + "sv_SE": "Uppdatera", "th_TH": "รีเฟรช", "tr_TR": "Yenile", "uk_UA": "Оновити", @@ -5798,6 +6039,7 @@ "pl_PL": "Wyłączone", "pt_BR": "Desabilitado", "ru_RU": "Отключить", + "sv_SE": "Inaktiverad", "th_TH": "ปิดการใช้งาน", "tr_TR": "Devre Dışı", "uk_UA": "Вимкнено", @@ -5822,6 +6064,7 @@ "pl_PL": "Typ kontrolera", "pt_BR": "Tipo do controle", "ru_RU": "Тип контроллера", + "sv_SE": "Kontrollertyp", "th_TH": "ประเภทคอนโทรลเลอร์", "tr_TR": "Kumanda Tipi", "uk_UA": "Тип контролера", @@ -5846,6 +6089,7 @@ "pl_PL": "Przenośny", "pt_BR": "Portátil", "ru_RU": "Портативный", + "sv_SE": "Handhållen", "th_TH": "แฮนด์เฮลด์", "tr_TR": "Portatif Mod", "uk_UA": "Портативний", @@ -5870,6 +6114,7 @@ "pl_PL": "Pro Kontroler", "pt_BR": "", "ru_RU": "", + "sv_SE": "Pro Controller", "th_TH": "โปรคอนโทรลเลอร์", "tr_TR": "Profesyonel Kumanda", "uk_UA": "Контролер Pro", @@ -5894,6 +6139,7 @@ "pl_PL": "Para JoyCon-ów", "pt_BR": "Par de JoyCon", "ru_RU": "JoyCon (пара)", + "sv_SE": "JoyCon (par)", "th_TH": "จับคู่ จอยคอน", "tr_TR": "JoyCon Çifti", "uk_UA": "Обидва JoyCon", @@ -5918,6 +6164,7 @@ "pl_PL": "Lewy JoyCon", "pt_BR": "JoyCon esquerdo", "ru_RU": "JoyCon (левый)", + "sv_SE": "JoyCon vänster", "th_TH": "จอยคอน ด้านซ้าย", "tr_TR": "JoyCon Sol", "uk_UA": "Лівий JoyCon", @@ -5942,6 +6189,7 @@ "pl_PL": "Prawy JoyCon", "pt_BR": "JoyCon direito", "ru_RU": "JoyCon (правый)", + "sv_SE": "JoyCon höger", "th_TH": "จอยคอน ด้านขวา", "tr_TR": "JoyCon Sağ", "uk_UA": "Правий JoyCon", @@ -5966,6 +6214,7 @@ "pl_PL": "Profil", "pt_BR": "Perfil", "ru_RU": "Профиль", + "sv_SE": "Profil", "th_TH": "โปรไฟล์", "tr_TR": "Profil", "uk_UA": "Профіль", @@ -5990,6 +6239,7 @@ "pl_PL": "Domyślny", "pt_BR": "Padrão", "ru_RU": "По умолчанию", + "sv_SE": "Standard", "th_TH": "ค่าเริ่มต้น", "tr_TR": "Varsayılan", "uk_UA": "Типовий", @@ -6014,6 +6264,7 @@ "pl_PL": "Wczytaj", "pt_BR": "Carregar", "ru_RU": "Загрузить", + "sv_SE": "Läs in", "th_TH": "โหลด", "tr_TR": "Yükle", "uk_UA": "Завантажити", @@ -6038,6 +6289,7 @@ "pl_PL": "Dodaj", "pt_BR": "Adicionar", "ru_RU": "Добавить", + "sv_SE": "Lägg till", "th_TH": "เพิ่ม", "tr_TR": "Ekle", "uk_UA": "Додати", @@ -6062,6 +6314,7 @@ "pl_PL": "Usuń", "pt_BR": "Remover", "ru_RU": "Удалить", + "sv_SE": "Ta bort", "th_TH": "เอาออก", "tr_TR": "Kaldır", "uk_UA": "Видалити", @@ -6086,6 +6339,7 @@ "pl_PL": "Przyciski", "pt_BR": "Botões", "ru_RU": "Кнопки", + "sv_SE": "Knappar", "th_TH": "ปุ่มกด", "tr_TR": "Tuşlar", "uk_UA": "Кнопки", @@ -6110,6 +6364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "A", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6134,6 +6389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "B", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6158,6 +6414,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "X", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6182,6 +6439,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Y", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6206,6 +6464,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "+", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6230,6 +6489,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "-", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6254,6 +6514,7 @@ "pl_PL": "Krzyżak (D-Pad)", "pt_BR": "Direcional", "ru_RU": "Кнопки направления", + "sv_SE": "Riktningsknappar", "th_TH": "ปุ่มลูกศร", "tr_TR": "Yön Tuşları", "uk_UA": "Панель направлення", @@ -6278,6 +6539,7 @@ "pl_PL": "Góra", "pt_BR": "Cima", "ru_RU": "Вверх", + "sv_SE": "Upp", "th_TH": "ขึ้น", "tr_TR": "Yukarı", "uk_UA": "Вгору", @@ -6302,6 +6564,7 @@ "pl_PL": "Dół", "pt_BR": "Baixo", "ru_RU": "Вниз", + "sv_SE": "Ner", "th_TH": "ลง", "tr_TR": "Aşağı", "uk_UA": "Вниз", @@ -6326,6 +6589,7 @@ "pl_PL": "Lewo", "pt_BR": "Esquerda", "ru_RU": "Влево", + "sv_SE": "Vänster", "th_TH": "ซ้าย", "tr_TR": "Sol", "uk_UA": "Вліво", @@ -6350,6 +6614,7 @@ "pl_PL": "Prawo", "pt_BR": "Direita", "ru_RU": "Вправо", + "sv_SE": "Höger", "th_TH": "ขวา", "tr_TR": "Sağ", "uk_UA": "Вправо", @@ -6374,6 +6639,7 @@ "pl_PL": "Przycisk", "pt_BR": "Botão", "ru_RU": "Нажатие на стик", + "sv_SE": "Knapp", "th_TH": "ปุ่ม", "tr_TR": "Tuş", "uk_UA": "Кнопка", @@ -6398,6 +6664,7 @@ "pl_PL": "Góra ", "pt_BR": "Cima", "ru_RU": "Вверх", + "sv_SE": "Upp", "th_TH": "ขึ้น", "tr_TR": "Yukarı", "uk_UA": "Уверх", @@ -6422,6 +6689,7 @@ "pl_PL": "Dół ", "pt_BR": "Baixo", "ru_RU": "Вниз", + "sv_SE": "Ner", "th_TH": "ลง", "tr_TR": "Aşağı", "uk_UA": "Униз", @@ -6446,6 +6714,7 @@ "pl_PL": "Lewo", "pt_BR": "Esquerda", "ru_RU": "Влево", + "sv_SE": "Vänster", "th_TH": "ซ้าย", "tr_TR": "Sol", "uk_UA": "Ліворуч", @@ -6470,6 +6739,7 @@ "pl_PL": "Prawo", "pt_BR": "Direita", "ru_RU": "Вправо", + "sv_SE": "Höger", "th_TH": "ขวา", "tr_TR": "Sağ", "uk_UA": "Праворуч", @@ -6494,6 +6764,7 @@ "pl_PL": "Gałka", "pt_BR": "Analógico", "ru_RU": "Стик", + "sv_SE": "Spak", "th_TH": "จอยสติ๊ก", "tr_TR": "Analog", "uk_UA": "Стик", @@ -6518,6 +6789,7 @@ "pl_PL": "Odwróć gałkę X", "pt_BR": "Inverter eixo X", "ru_RU": "Инвертировать ось X", + "sv_SE": "Invertera Spak X", "th_TH": "กลับทิศทางของแกน X", "tr_TR": "X Eksenini Tersine Çevir", "uk_UA": "Обернути вісь стику X", @@ -6542,6 +6814,7 @@ "pl_PL": "Odwróć gałkę Y", "pt_BR": "Inverter eixo Y", "ru_RU": "Инвертировать ось Y", + "sv_SE": "Invertera Spak Y", "th_TH": "กลับทิศทางของแกน Y", "tr_TR": "Y Eksenini Tersine Çevir", "uk_UA": "Обернути вісь стику Y", @@ -6566,6 +6839,7 @@ "pl_PL": "Martwa strefa:", "pt_BR": "Zona morta:", "ru_RU": "Мёртвая зона:", + "sv_SE": "Dödläge:", "th_TH": "โซนที่ไม่ทำงานของ จอยสติ๊ก:", "tr_TR": "Ölü Bölge", "uk_UA": "Мертва зона:", @@ -6590,6 +6864,7 @@ "pl_PL": "Lewa Gałka", "pt_BR": "Analógico esquerdo", "ru_RU": "Левый стик", + "sv_SE": "Vänster spak", "th_TH": "จอยสติ๊ก ด้านซ้าย", "tr_TR": "Sol Analog", "uk_UA": "Лівий джойстик", @@ -6614,6 +6889,7 @@ "pl_PL": "Prawa Gałka", "pt_BR": "Analógico direito", "ru_RU": "Правый стик", + "sv_SE": "Höger spak", "th_TH": "จอยสติ๊ก ด้านขวา", "tr_TR": "Sağ Analog", "uk_UA": "Правий джойстик", @@ -6638,6 +6914,7 @@ "pl_PL": "Lewe Triggery", "pt_BR": "Gatilhos esquerda", "ru_RU": "Триггеры слева", + "sv_SE": "Avtryckare vänster", "th_TH": "ทริกเกอร์ ด้านซ้าย", "tr_TR": "Tetikler Sol", "uk_UA": "Тригери ліворуч", @@ -6662,6 +6939,7 @@ "pl_PL": "Prawe Triggery", "pt_BR": "Gatilhos direita", "ru_RU": "Триггеры справа", + "sv_SE": "Avtryckare höger", "th_TH": "ทริกเกอร์ ด้านขวา", "tr_TR": "Tetikler Sağ", "uk_UA": "Тригери праворуч", @@ -6686,6 +6964,7 @@ "pl_PL": "Lewe Przyciski Triggerów", "pt_BR": "Botões de gatilho esquerda", "ru_RU": "Триггерные кнопки слева", + "sv_SE": "Avtryckare knappar vänster", "th_TH": "ปุ่มทริกเกอร์ ด้านซ้าย", "tr_TR": "Tetik Tuşları Sol", "uk_UA": "Кнопки тригерів ліворуч", @@ -6710,6 +6989,7 @@ "pl_PL": "Prawe Przyciski Triggerów", "pt_BR": "Botões de gatilho direita", "ru_RU": "Триггерные кнопки справа", + "sv_SE": "Avtryckare knappar höger", "th_TH": "ปุ่มทริกเกอร์ ด้านขวา", "tr_TR": "Tetik Tuşları Sağ", "uk_UA": "Кнопки тригерів праворуч", @@ -6734,6 +7014,7 @@ "pl_PL": "Triggery", "pt_BR": "Gatilhos", "ru_RU": "Триггеры", + "sv_SE": "Avtryckare", "th_TH": "ทริกเกอร์", "tr_TR": "Tetikler", "uk_UA": "Тригери", @@ -6758,6 +7039,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "L", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6782,6 +7064,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "R", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6806,6 +7089,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "ZL", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6830,6 +7114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "ZR", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6854,6 +7139,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "SL", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6878,6 +7164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "SR", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6902,6 +7189,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "SL", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6926,6 +7214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "SR", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6950,6 +7239,7 @@ "pl_PL": "Lewe Przyciski", "pt_BR": "Botões esquerda", "ru_RU": "Левые кнопки", + "sv_SE": "Knappar vänster", "th_TH": "ปุ่มกดเสริม ด้านซ้าย", "tr_TR": "Tuşlar Sol", "uk_UA": "Кнопки ліворуч", @@ -6974,6 +7264,7 @@ "pl_PL": "Prawe Przyciski", "pt_BR": "Botões direita", "ru_RU": "Правые кнопки", + "sv_SE": "Knappar höger", "th_TH": "ปุ่มกดเสริม ด้านขวา", "tr_TR": "Tuşlar Sağ", "uk_UA": "Кнопки праворуч", @@ -6998,6 +7289,7 @@ "pl_PL": "Różne", "pt_BR": "Miscelâneas", "ru_RU": "Разное", + "sv_SE": "Diverse", "th_TH": "การควบคุมเพิ่มเติม", "tr_TR": "Diğer", "uk_UA": "Різне", @@ -7022,6 +7314,7 @@ "pl_PL": "Próg Triggerów:", "pt_BR": "Sensibilidade do gatilho:", "ru_RU": "Порог срабатывания:", + "sv_SE": "Tröskelvärde avtryckare:", "th_TH": "ตั้งค่าขีดจำกัดการกด:", "tr_TR": "Tetik Eşiği:", "uk_UA": "Поріг спрацьовування:", @@ -7046,6 +7339,7 @@ "pl_PL": "Ruch", "pt_BR": "Sensor de movimento", "ru_RU": "Движение", + "sv_SE": "Rörelse", "th_TH": "การเคลื่อนไหว", "tr_TR": "Hareket", "uk_UA": "Рух", @@ -7070,6 +7364,7 @@ "pl_PL": "Użyj ruchu zgodnego z CemuHook", "pt_BR": "Usar sensor compatível com CemuHook", "ru_RU": "Включить совместимость с CemuHook", + "sv_SE": "Använd CemuHook-kompatibel rörelse", "th_TH": "ใช้การเคลื่อนไหวที่เข้ากันได้กับ CemuHook", "tr_TR": "CemuHook uyumlu hareket kullan", "uk_UA": "Використовувати рух, сумісний з CemuHook", @@ -7094,6 +7389,7 @@ "pl_PL": "Slot Kontrolera:", "pt_BR": "Slot do controle:", "ru_RU": "Слот контроллера:", + "sv_SE": "Kontrollerplats:", "th_TH": "ช่องเสียบ คอนโทรลเลอร์:", "tr_TR": "Kumanda Yuvası:", "uk_UA": "Слот контролера:", @@ -7118,6 +7414,7 @@ "pl_PL": "Odzwierciedlaj Sterowanie", "pt_BR": "Espelhar movimento", "ru_RU": "Зеркальный ввод", + "sv_SE": "Spegla inmatning", "th_TH": "นำเข้าการสะท้อน การควบคุม", "tr_TR": "Girişi Aynala", "uk_UA": "Дзеркальний вхід", @@ -7142,6 +7439,7 @@ "pl_PL": "Prawy Slot JoyCon:", "pt_BR": "Slot do JoyCon direito:", "ru_RU": "Слот правого JoyCon:", + "sv_SE": "Höger JoyCon-plats:", "th_TH": "ช่องเสียบ จอยคอน ด้านขวา:", "tr_TR": "Sağ JoyCon Yuvası:", "uk_UA": "Правий слот JoyCon:", @@ -7166,6 +7464,7 @@ "pl_PL": "Host Serwera:", "pt_BR": "Endereço do servidor:", "ru_RU": "Хост сервера:", + "sv_SE": "Servervärd:", "th_TH": "เจ้าของเซิร์ฟเวอร์:", "tr_TR": "Sunucu Sahibi:", "uk_UA": "Хост сервера:", @@ -7190,6 +7489,7 @@ "pl_PL": "Czułość Żyroskopu:", "pt_BR": "Sensibilidade do giroscópio:", "ru_RU": "Чувствительность гироскопа:", + "sv_SE": "Känslighet för gyro:", "th_TH": "ความไวของ Gyro:", "tr_TR": "Gyro Hassasiyeti:", "uk_UA": "Чутливість гіроскопа:", @@ -7214,6 +7514,7 @@ "pl_PL": "Deadzone Żyroskopu:", "pt_BR": "Zona morta do giroscópio:", "ru_RU": "Мертвая зона гироскопа:", + "sv_SE": "Dödläge för gyro:", "th_TH": "ส่วนไม่ทำงานของ Gyro:", "tr_TR": "Gyro Ölü Bölgesi:", "uk_UA": "Мертва зона гіроскопа:", @@ -7238,6 +7539,7 @@ "pl_PL": "Zapisz", "pt_BR": "Salvar", "ru_RU": "Сохранить", + "sv_SE": "Spara", "th_TH": "บันทึก", "tr_TR": "Kaydet", "uk_UA": "Зберегти", @@ -7262,6 +7564,7 @@ "pl_PL": "Zamknij", "pt_BR": "Fechar", "ru_RU": "Закрыть", + "sv_SE": "Stäng", "th_TH": "ปิด", "tr_TR": "Kapat", "uk_UA": "Закрити", @@ -7286,6 +7589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Неизвестно", + "sv_SE": "Okänd", "th_TH": "ไม่รู้จัก", "tr_TR": "", "uk_UA": "Невідома", @@ -7310,6 +7614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый Shift", + "sv_SE": "Skift vänster", "th_TH": "", "tr_TR": "Sol Shift", "uk_UA": "Shift Лівий", @@ -7334,6 +7639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый Shift", + "sv_SE": "Skift höger", "th_TH": "", "tr_TR": "Sağ Shift", "uk_UA": "Shift Правий", @@ -7358,6 +7664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый Ctrl", + "sv_SE": "Ctrl vänster", "th_TH": "", "tr_TR": "Sol Ctrl", "uk_UA": "Ctrl Лівий", @@ -7382,6 +7689,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый ⌃", + "sv_SE": "^ Vänster", "th_TH": "", "tr_TR": "⌃ Sol", "uk_UA": "⌃ Лівий", @@ -7406,6 +7714,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый Ctrl", + "sv_SE": "Ctrl höger", "th_TH": "", "tr_TR": "Sağ Control", "uk_UA": "Ctrl Правий", @@ -7430,6 +7739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый ⌃", + "sv_SE": "^ Höger", "th_TH": "", "tr_TR": "⌃ Sağ", "uk_UA": "⌃ Правий", @@ -7454,6 +7764,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый Alt", + "sv_SE": "Alt vänster", "th_TH": "", "tr_TR": "Sol Alt", "uk_UA": "Alt Лівий", @@ -7478,6 +7789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый ⌥", + "sv_SE": "⌥ vänster", "th_TH": "", "tr_TR": "⌥ Sol", "uk_UA": "⌥ Лівий", @@ -7502,6 +7814,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый Alt", + "sv_SE": "Alt höger", "th_TH": "", "tr_TR": "Sağ Alt", "uk_UA": "Alt Правий", @@ -7526,6 +7839,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый ⌥", + "sv_SE": "⌥ höger", "th_TH": "", "tr_TR": "⌥ Sağ", "uk_UA": "⌥ Правий", @@ -7550,6 +7864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый ⊞", + "sv_SE": "⊞ vänster", "th_TH": "", "tr_TR": "⊞ Sol", "uk_UA": "⊞ Лівий", @@ -7574,6 +7889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый ⌘", + "sv_SE": "⌘ vänster", "th_TH": "", "tr_TR": "⌘ Sol", "uk_UA": "⌘ Лівий", @@ -7598,6 +7914,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый ⊞", + "sv_SE": "⊞ höger", "th_TH": "", "tr_TR": "⊞ Sağ", "uk_UA": "⊞ Правий", @@ -7622,6 +7939,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый ⌘", + "sv_SE": "⌘ höger", "th_TH": "", "tr_TR": "⌘ Sağ", "uk_UA": "⌘ Правий", @@ -7646,6 +7964,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Меню", + "sv_SE": "Meny", "th_TH": "", "tr_TR": "Menü", "uk_UA": "", @@ -7670,6 +7989,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вверх", + "sv_SE": "Upp", "th_TH": "", "tr_TR": "Yukarı", "uk_UA": "", @@ -7694,6 +8014,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вниз", + "sv_SE": "Ner", "th_TH": "", "tr_TR": "Aşağı", "uk_UA": "", @@ -7718,6 +8039,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Влево", + "sv_SE": "Vänster", "th_TH": "", "tr_TR": "Sol", "uk_UA": "Вліво", @@ -7742,6 +8064,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вправо", + "sv_SE": "Höger", "th_TH": "", "tr_TR": "Sağ", "uk_UA": "Вправо", @@ -7766,6 +8089,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Enter", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7790,6 +8114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Escape", "th_TH": "", "tr_TR": "Esc", "uk_UA": "", @@ -7814,6 +8139,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Пробел", + "sv_SE": "Blanksteg", "th_TH": "", "tr_TR": "", "uk_UA": "Пробіл", @@ -7838,6 +8164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Tab", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7862,6 +8189,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Backspace", "th_TH": "", "tr_TR": "Geri tuşu", "uk_UA": "", @@ -7886,6 +8214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Insert", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7910,6 +8239,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Delete", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7934,6 +8264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Page Up", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7958,6 +8289,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Page Down", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7982,6 +8314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Home", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8006,6 +8339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "End", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8030,6 +8364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Caps Lock", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8054,6 +8389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Scroll Lock", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8078,6 +8414,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Print Screen", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8102,6 +8439,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Pause", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8126,6 +8464,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Num Lock", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8150,6 +8489,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Очистить", + "sv_SE": "Töm", "th_TH": "", "tr_TR": "", "uk_UA": "Очистити", @@ -8174,6 +8514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 0", + "sv_SE": "Keypad 0", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8198,6 +8539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 1", + "sv_SE": "Keypad 1", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8222,6 +8564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 2", + "sv_SE": "Keypad 2", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8246,6 +8589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 3", + "sv_SE": "Keypad 3", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8270,6 +8614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 4", + "sv_SE": "Keypad 4", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8294,6 +8639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 5", + "sv_SE": "Keypad 5", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8318,6 +8664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 6", + "sv_SE": "Keypad 6", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8342,6 +8689,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 7", + "sv_SE": "Keypad 7", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8366,6 +8714,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 8", + "sv_SE": "Keypad 8", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8390,6 +8739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 9", + "sv_SE": "Keypad 9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8414,6 +8764,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "/ (блок цифр)", + "sv_SE": "Keypad /", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8438,6 +8789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "* (блок цифр)", + "sv_SE": "Keypad *", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8462,6 +8814,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "- (блок цифр)", + "sv_SE": "Keypad -", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8486,6 +8839,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "+ (блок цифр)", + "sv_SE": "Keypad +", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8510,6 +8864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": ". (блок цифр)", + "sv_SE": "Keypad ,", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8534,6 +8889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Enter (блок цифр)", + "sv_SE": "Keypad Enter", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8558,6 +8914,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8582,6 +8939,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8606,6 +8964,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8630,6 +8989,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8654,6 +9014,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8678,6 +9039,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8702,6 +9064,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8726,6 +9089,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8750,6 +9114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8774,6 +9139,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8798,6 +9164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8822,6 +9189,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8846,6 +9214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8870,6 +9239,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8894,6 +9264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8918,6 +9289,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8942,6 +9314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8966,6 +9339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8990,6 +9364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -9014,6 +9389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -9038,6 +9414,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -9062,6 +9439,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -9086,6 +9464,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Не привязано", + "sv_SE": "Obunden", "th_TH": "", "tr_TR": "", "uk_UA": "Відв'язати", @@ -9110,6 +9489,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Кнопка лев. стика", + "sv_SE": "L-spakknapp", "th_TH": "", "tr_TR": "", "uk_UA": "L Кнопка Стіку", @@ -9134,6 +9514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Кнопка пр. стика", + "sv_SE": "R-spakknapp", "th_TH": "", "tr_TR": "", "uk_UA": "R Кнопка Стіку", @@ -9158,6 +9539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый бампер", + "sv_SE": "Vänster kantknapp", "th_TH": "", "tr_TR": "", "uk_UA": "Лівий Бампер", @@ -9182,6 +9564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый бампер", + "sv_SE": "Höger kantknapp", "th_TH": "", "tr_TR": "", "uk_UA": "Правий Бампер", @@ -9206,6 +9589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый триггер", + "sv_SE": "Vänster avtryckare", "th_TH": "", "tr_TR": "", "uk_UA": "Лівий Тригер", @@ -9230,6 +9614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый триггер", + "sv_SE": "Höger avtryckare", "th_TH": "", "tr_TR": "", "uk_UA": "Правий Тригер", @@ -9254,6 +9639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вверх", + "sv_SE": "Upp", "th_TH": "", "tr_TR": "", "uk_UA": "Вверх", @@ -9278,6 +9664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вниз", + "sv_SE": "Ner", "th_TH": "", "tr_TR": "", "uk_UA": "Вниз", @@ -9302,6 +9689,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Влево", + "sv_SE": "Vänster", "th_TH": "", "tr_TR": "", "uk_UA": "Вліво", @@ -9326,6 +9714,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вправо", + "sv_SE": "Höger", "th_TH": "", "tr_TR": "Sağ", "uk_UA": "Вправо", @@ -9350,6 +9739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -9374,6 +9764,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "4", "uk_UA": "", @@ -9398,6 +9789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Кнопка Xbox", + "sv_SE": "Guide", "th_TH": "", "tr_TR": "Rehber", "uk_UA": "", @@ -9422,6 +9814,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Прочее", + "sv_SE": "Diverse", "th_TH": "", "tr_TR": "Diğer", "uk_UA": "", @@ -9446,6 +9839,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Доп.кнопка 1", + "sv_SE": "", "th_TH": "", "tr_TR": "Pedal 1", "uk_UA": "", @@ -9470,6 +9864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Доп.кнопка 2", + "sv_SE": "", "th_TH": "", "tr_TR": "Pedal 2", "uk_UA": "", @@ -9494,6 +9889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Доп.кнопка 3", + "sv_SE": "", "th_TH": "", "tr_TR": "Pedal 3", "uk_UA": "", @@ -9518,6 +9914,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Доп.кнопка 4", + "sv_SE": "", "th_TH": "", "tr_TR": "Pedal 4", "uk_UA": "", @@ -9542,6 +9939,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Тачпад", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -9566,6 +9964,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый триггер 0", + "sv_SE": "Vänster avtryckare 0", "th_TH": "", "tr_TR": "Sol Tetik 0", "uk_UA": "Лівий Тригер 0", @@ -9590,6 +9989,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый триггер 0", + "sv_SE": "Höger avtryckare 0", "th_TH": "", "tr_TR": "Sağ Tetik 0", "uk_UA": "Правий Тригер 0", @@ -9614,6 +10014,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый триггер 1", + "sv_SE": "Vänster avtryckare 1", "th_TH": "", "tr_TR": "Sol Tetik 1", "uk_UA": "Лівий Тригер 1", @@ -9638,6 +10039,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый триггер 1", + "sv_SE": "Höger avtryckare 1", "th_TH": "", "tr_TR": "Sağ Tetik 1", "uk_UA": "Правий Тригер 1", @@ -9662,6 +10064,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Левый стик", + "sv_SE": "Vänster spak", "th_TH": "", "tr_TR": "Sol Çubuk", "uk_UA": "Лівий Стік", @@ -9686,6 +10089,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Правый стик", + "sv_SE": "Höger spak", "th_TH": "", "tr_TR": "Sağ çubuk", "uk_UA": "Правий Стік", @@ -9710,6 +10114,7 @@ "pl_PL": "Wybrany profil użytkownika:", "pt_BR": "Perfil de usuário selecionado:", "ru_RU": "Выбранный пользовательский профиль:", + "sv_SE": "Vald användarprofil:", "th_TH": "เลือกโปรไฟล์ผู้ใช้งาน:", "tr_TR": "Seçili Kullanıcı Profili:", "uk_UA": "Вибраний профіль користувача:", @@ -9734,6 +10139,7 @@ "pl_PL": "Zapisz nazwę profilu", "pt_BR": "Salvar nome de perfil", "ru_RU": "Сохранить пользовательский профиль", + "sv_SE": "Spara profilnamn", "th_TH": "บันทึกชื่อโปรไฟล์", "tr_TR": "Profil İsmini Kaydet", "uk_UA": "Зберегти ім'я профілю", @@ -9758,6 +10164,7 @@ "pl_PL": "Zmień obrazek profilu", "pt_BR": "Mudar imagem de perfil", "ru_RU": "Изменить аватар", + "sv_SE": "Byt profilbild", "th_TH": "เปลี่ยนรูปโปรไฟล์", "tr_TR": "Profil Resmini Değiştir", "uk_UA": "Змінити зображення профілю", @@ -9782,6 +10189,7 @@ "pl_PL": "Dostępne profile użytkownika:", "pt_BR": "Perfis de usuário disponíveis:", "ru_RU": "Доступные профили пользователей:", + "sv_SE": "Tillgängliga användarprofiler:", "th_TH": "โปรไฟล์ผู้ใช้ที่ใช้งานได้:", "tr_TR": "Mevcut Kullanıcı Profilleri:", "uk_UA": "Доступні профілі користувачів:", @@ -9806,6 +10214,7 @@ "pl_PL": "Utwórz profil", "pt_BR": "Adicionar novo perfil", "ru_RU": "Добавить новый профиль", + "sv_SE": "Skapa profil", "th_TH": "สร้างโปรไฟล์ใหม่", "tr_TR": "Yeni Profil Ekle", "uk_UA": "Створити профіль", @@ -9830,6 +10239,7 @@ "pl_PL": "Usuń", "pt_BR": "Apagar", "ru_RU": "Удалить", + "sv_SE": "Ta bort", "th_TH": "ลบ", "tr_TR": "Sil", "uk_UA": "Видалити", @@ -9854,6 +10264,7 @@ "pl_PL": "Zamknij", "pt_BR": "Fechar", "ru_RU": "Закрыть", + "sv_SE": "Stäng", "th_TH": "ปิด", "tr_TR": "Kapat", "uk_UA": "Закрити", @@ -9878,6 +10289,7 @@ "pl_PL": "Wybierz pseudonim", "pt_BR": "Escolha um apelido", "ru_RU": "Укажите никнейм", + "sv_SE": "Välj ett smeknamn", "th_TH": "เลือก ชื่อเล่น", "tr_TR": "Kullanıcı Adı Seç", "uk_UA": "Оберіть псевдонім", @@ -9902,6 +10314,7 @@ "pl_PL": "Wybór Obrazu Profilu", "pt_BR": "Seleção da imagem de perfil", "ru_RU": "Выбор изображения профиля", + "sv_SE": "Välj profilbild", "th_TH": "เลือก รูปโปรไฟล์ ของคุณ", "tr_TR": "Profil Resmi Seçimi", "uk_UA": "Вибір зображення профілю", @@ -9926,6 +10339,7 @@ "pl_PL": "Wybierz zdjęcie profilowe", "pt_BR": "Escolha uma imagem de perfil", "ru_RU": "Выбор аватара", + "sv_SE": "Välj en profilbild", "th_TH": "เลือก รูปโปรไฟล์", "tr_TR": "Profil Resmi Seç", "uk_UA": "Виберіть зображення профілю", @@ -9950,6 +10364,7 @@ "pl_PL": "Możesz zaimportować niestandardowy obraz profilu lub wybrać awatar z firmware'u systemowego", "pt_BR": "Você pode importar uma imagem customizada, ou selecionar um avatar do firmware", "ru_RU": "Вы можете импортировать собственное изображение или выбрать аватар из системной прошивки.", + "sv_SE": "Du kan importera en anpassad profilbild eller välja en avatar från systemets firmware", "th_TH": "คุณสามารถนำเข้ารูปโปรไฟล์ที่กำหนดเองได้ หรือ เลือกรูปที่มีจากระบบ", "tr_TR": "Özel bir profil resmi içeri aktarabilir veya sistem avatarlarından birini seçebilirsiniz", "uk_UA": "Ви можете імпортувати власне зображення профілю або вибрати аватар із мікропрограми системи", @@ -9974,6 +10389,7 @@ "pl_PL": "Importuj Plik Obrazu", "pt_BR": "Importar arquivo de imagem", "ru_RU": "Импорт изображения", + "sv_SE": "Importera bildfil", "th_TH": "นำเข้า ไฟล์รูปภาพ", "tr_TR": "Resim İçeri Aktar", "uk_UA": "Імпорт файлу зображення", @@ -9998,6 +10414,7 @@ "pl_PL": "Wybierz domyślny awatar z oprogramowania konsoli", "pt_BR": "Selecionar avatar do firmware", "ru_RU": "Встроенные аватары", + "sv_SE": "Välj avatar från firmware", "th_TH": "เลือก รูปอวาต้า จากระบบ", "tr_TR": "Yazılım Avatarı Seç", "uk_UA": "Виберіть аватар прошивки ", @@ -10022,6 +10439,7 @@ "pl_PL": "Okno Dialogowe Wprowadzania", "pt_BR": "Diálogo de texto", "ru_RU": "Диалоговое окно ввода", + "sv_SE": "Inmatningsdialog", "th_TH": "กล่องโต้ตอบการป้อนข้อมูล", "tr_TR": "Giriş Yöntemi Diyaloğu", "uk_UA": "Діалог введення", @@ -10046,6 +10464,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "ОК", + "sv_SE": "Ok", "th_TH": "ตกลง", "tr_TR": "Tamam", "uk_UA": "Гаразд", @@ -10070,6 +10489,7 @@ "pl_PL": "Anuluj", "pt_BR": "Cancelar", "ru_RU": "Отмена", + "sv_SE": "Avbryt", "th_TH": "ยกเลิก", "tr_TR": "İptal", "uk_UA": "Скасувати", @@ -10094,6 +10514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Avbryter", "th_TH": "", "tr_TR": "", "uk_UA": "Скасування", @@ -10118,6 +10539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Stäng", "th_TH": "", "tr_TR": "", "uk_UA": "Закрити", @@ -10142,6 +10564,7 @@ "pl_PL": "Wybierz nazwę profilu", "pt_BR": "Escolha o nome de perfil", "ru_RU": "Выберите никнейм", + "sv_SE": "Välj ett profilnamn", "th_TH": "เลือก ชื่อโปรไฟล์", "tr_TR": "Profil İsmini Seç", "uk_UA": "Виберіть ім'я профілю", @@ -10166,6 +10589,7 @@ "pl_PL": "Wprowadź nazwę profilu", "pt_BR": "Escreva o nome do perfil", "ru_RU": "Пожалуйста, введите никнейм", + "sv_SE": "Ange ett profilnamn", "th_TH": "กรุณาใส่ชื่อโปรไฟล์", "tr_TR": "Lütfen Bir Profil İsmi Girin", "uk_UA": "Будь ласка, введіть ім'я профілю", @@ -10190,6 +10614,7 @@ "pl_PL": "(Maksymalna długość: {0})", "pt_BR": "(Máximo de caracteres: {0})", "ru_RU": "(Максимальная длина: {0})", + "sv_SE": "(Max längd: {0})", "th_TH": "(ความยาวสูงสุด: {0})", "tr_TR": "(Maksimum Uzunluk: {0})", "uk_UA": "(Макс. довжина: {0})", @@ -10214,6 +10639,7 @@ "pl_PL": "Wybierz awatar", "pt_BR": "Escolher", "ru_RU": "Выбрать аватар", + "sv_SE": "Välj avatar", "th_TH": "เลือก รูปอวาต้า ของคุณ", "tr_TR": "Seç", "uk_UA": "Вибрати", @@ -10238,6 +10664,7 @@ "pl_PL": "Ustaw kolor tła", "pt_BR": "Definir cor de fundo", "ru_RU": "Установить цвет фона", + "sv_SE": "Välj bakgrundsfärg", "th_TH": "ตั้งค่าสีพื้นหลัง", "tr_TR": "Arka Plan Rengi Ayarla", "uk_UA": "Встановити колір фону", @@ -10262,6 +10689,7 @@ "pl_PL": "Zamknij", "pt_BR": "Fechar", "ru_RU": "Закрыть", + "sv_SE": "Stäng", "th_TH": "ปิด", "tr_TR": "Kapat", "uk_UA": "Закрити", @@ -10286,6 +10714,7 @@ "pl_PL": "Wczytaj profil", "pt_BR": "Carregar perfil", "ru_RU": "Загрузить профиль", + "sv_SE": "Läs in profil", "th_TH": "โหลด โปรไฟล์", "tr_TR": "Profil Yükle", "uk_UA": "Завантажити профіль", @@ -10310,6 +10739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Visa profil", "th_TH": "", "tr_TR": "", "uk_UA": "Показати профіль", @@ -10334,6 +10764,7 @@ "pl_PL": "Dodaj profil", "pt_BR": "Adicionar perfil", "ru_RU": "Добавить профиль", + "sv_SE": "Lägg till profil", "th_TH": "เพิ่ม โปรไฟล์", "tr_TR": "Profil Ekle", "uk_UA": "Додати профіль", @@ -10358,6 +10789,7 @@ "pl_PL": "Usuń profil", "pt_BR": "Remover perfil", "ru_RU": "Удалить профиль", + "sv_SE": "Ta bort profil", "th_TH": "ลบ โปรไฟล์", "tr_TR": "Profili Kaldır", "uk_UA": "Видалити профіль", @@ -10382,6 +10814,7 @@ "pl_PL": "Zapisz profil", "pt_BR": "Salvar perfil", "ru_RU": "Сохранить профиль", + "sv_SE": "Spara profil", "th_TH": "บันทึก โปรไฟล์", "tr_TR": "Profili Kaydet", "uk_UA": "Зберегти профіль", @@ -10406,6 +10839,7 @@ "pl_PL": "Zrób zrzut ekranu", "pt_BR": "Salvar captura de tela", "ru_RU": "Сделать снимок экрана", + "sv_SE": "Ta skärmbild", "th_TH": "ถ่ายภาพหน้าจอ", "tr_TR": "Ekran Görüntüsü Al", "uk_UA": "Зробити знімок екрана", @@ -10430,6 +10864,7 @@ "pl_PL": "Ukryj interfejs użytkownika", "pt_BR": "Esconder Interface", "ru_RU": "Скрыть интерфейс", + "sv_SE": "Dölj gränssnittet", "th_TH": "ซ่อน UI", "tr_TR": "Arayüzü Gizle", "uk_UA": "Сховати інтерфейс", @@ -10454,6 +10889,7 @@ "pl_PL": "Uruchom aplikację ", "pt_BR": "Executar Aplicativo", "ru_RU": "Запуск приложения", + "sv_SE": "Kör applikation", "th_TH": "เปิดใช้งานแอปพลิเคชัน", "tr_TR": "Uygulamayı Çalıştır", "uk_UA": "Запустити додаток", @@ -10478,6 +10914,7 @@ "pl_PL": "Przełącz na ulubione", "pt_BR": "Alternar favorito", "ru_RU": "Добавить в избранное", + "sv_SE": "Växla som favorit", "th_TH": "สลับรายการโปรด", "tr_TR": "Favori Ayarla", "uk_UA": "Перемкнути вибране", @@ -10502,6 +10939,7 @@ "pl_PL": "Przełącz status Ulubionej Gry", "pt_BR": "Marca ou desmarca jogo como favorito", "ru_RU": "Добавляет игру в избранное и помечает звездочкой", + "sv_SE": "Växla favoritstatus för spelet", "th_TH": "สลับสถานะเกมที่ชื่นชอบ", "tr_TR": "Oyunu Favorilere Ekle/Çıkar", "uk_UA": "Перемкнути улюблений статус гри", @@ -10526,6 +10964,7 @@ "pl_PL": "Motyw:", "pt_BR": "Tema:", "ru_RU": "Тема:", + "sv_SE": "Tema:", "th_TH": "ธีม:", "tr_TR": "Tema:", "uk_UA": "Тема:", @@ -10550,6 +10989,7 @@ "pl_PL": "", "pt_BR": "Automático", "ru_RU": "", + "sv_SE": "Automatiskt", "th_TH": "อัตโนมัติ", "tr_TR": "", "uk_UA": "Авто.", @@ -10574,6 +11014,7 @@ "pl_PL": "Ciemny", "pt_BR": "Escuro", "ru_RU": "Темная", + "sv_SE": "Mörkt", "th_TH": "มืด", "tr_TR": "Karanlık", "uk_UA": "Темна", @@ -10598,6 +11039,7 @@ "pl_PL": "Jasny", "pt_BR": "Claro", "ru_RU": "Светлая", + "sv_SE": "Ljust", "th_TH": "สว่าง", "tr_TR": "Aydınlık", "uk_UA": "Світла", @@ -10622,6 +11064,7 @@ "pl_PL": "Konfiguruj", "pt_BR": "Configurar", "ru_RU": "Настройка", + "sv_SE": "Konfigurera", "th_TH": "กำหนดค่า", "tr_TR": "Ayarla", "uk_UA": "Налаштування", @@ -10646,6 +11089,7 @@ "pl_PL": "Wibracje", "pt_BR": "Vibração", "ru_RU": "Вибрация", + "sv_SE": "Vibration", "th_TH": "การสั่นไหว", "tr_TR": "Titreşim", "uk_UA": "Вібрація", @@ -10670,6 +11114,7 @@ "pl_PL": "Mnożnik mocnych wibracji", "pt_BR": "Multiplicador de vibração forte", "ru_RU": "Множитель сильной вибрации", + "sv_SE": "Försvaga stark vibration", "th_TH": "เพิ่มความแรงการสั่น", "tr_TR": "Güçlü Titreşim Çoklayıcı", "uk_UA": "Множник сильної вібрації", @@ -10694,6 +11139,7 @@ "pl_PL": "Mnożnik słabych wibracji", "pt_BR": "Multiplicador de vibração fraca", "ru_RU": "Множитель слабой вибрации", + "sv_SE": "Förstärk svag vibration", "th_TH": "ลดความแรงการสั่น", "tr_TR": "Zayıf Titreşim Seviyesi", "uk_UA": "Множник слабкої вібрації", @@ -10718,6 +11164,7 @@ "pl_PL": "Nie ma zapisanych danych dla {0} [{1:x16}]", "pt_BR": "Não há jogos salvos para {0} [{1:x16}]", "ru_RU": "Нет сохранений для {0} [{1:x16}]", + "sv_SE": "Det finns inget sparat spel för {0} [{1:x16}]", "th_TH": "ไม่มีข้อมูลบันทึกไว้สำหรับ {0} [{1:x16}]", "tr_TR": "{0} [{1:x16}] için kayıt verisi bulunamadı", "uk_UA": "Немає збережених даних для {0} [{1:x16}]", @@ -10742,6 +11189,7 @@ "pl_PL": "Czy chcesz utworzyć zapis danych dla tej gry?", "pt_BR": "Gostaria de criar o diretório de salvamento para esse jogo?", "ru_RU": "Создать сохранение для этой игры?", + "sv_SE": "Vill du skapa sparat spel för detta spel?", "th_TH": "คุณต้องการสร้างบันทึกข้อมูลสำหรับเกมนี้หรือไม่?", "tr_TR": "Bu oyun için kayıt verisi oluşturmak ister misiniz?", "uk_UA": "Хочете створити дані збереження для цієї гри?", @@ -10766,6 +11214,7 @@ "pl_PL": "Ryujinx - Potwierdzenie", "pt_BR": "Ryujinx - Confirmação", "ru_RU": "Ryujinx - Подтверждение", + "sv_SE": "Ryujinx - Bekräftelse", "th_TH": "Ryujinx - ยืนยัน", "tr_TR": "Ryujinx - Onay", "uk_UA": "Ryujinx - Підтвердження", @@ -10790,6 +11239,7 @@ "pl_PL": "Ryujinx - Asystent aktualizacji", "pt_BR": "Ryujinx - Atualizador", "ru_RU": "Ryujinx - Обновление", + "sv_SE": "Ryujinx - Uppdatering", "th_TH": "Ryujinx - อัพเดต", "tr_TR": "Ryujinx - Güncelleyici", "uk_UA": "Ryujinx - Програма оновлення", @@ -10814,6 +11264,7 @@ "pl_PL": "Ryujinx - Błąd", "pt_BR": "Ryujinx - Erro", "ru_RU": "Ryujinx - Ошибка", + "sv_SE": "Ryujinx - Fel", "th_TH": "Ryujinx - ผิดพลาด", "tr_TR": "Ryujinx - Hata", "uk_UA": "Ryujinx - Помилка", @@ -10838,6 +11289,7 @@ "pl_PL": "Ryujinx - Ostrzeżenie", "pt_BR": "Ryujinx - Alerta", "ru_RU": "Ryujinx - Предупреждение", + "sv_SE": "Ryujinx - Varning", "th_TH": "Ryujinx - คำเตือน", "tr_TR": "Ryujinx - Uyarı", "uk_UA": "Ryujinx - Попередження", @@ -10862,6 +11314,7 @@ "pl_PL": "Ryujinx - Wyjdź", "pt_BR": "Ryujinx - Sair", "ru_RU": "Ryujinx - Выход", + "sv_SE": "Ryujinx - Avslut", "th_TH": "Ryujinx - ออก", "tr_TR": "Ryujinx - Çıkış", "uk_UA": "Ryujinx - Вихід", @@ -10886,6 +11339,7 @@ "pl_PL": "Ryujinx napotkał błąd", "pt_BR": "Ryujinx encontrou um erro", "ru_RU": "Ryujinx обнаружил ошибку", + "sv_SE": "Ryujinx har påträffat ett fel", "th_TH": "Ryujinx พบข้อผิดพลาด", "tr_TR": "Ryujinx bir hata ile karşılaştı", "uk_UA": "У Ryujinx сталася помилка", @@ -10910,6 +11364,7 @@ "pl_PL": "Czy na pewno chcesz zamknąć Ryujinx?", "pt_BR": "Tem certeza que deseja fechar o Ryujinx?", "ru_RU": "Вы уверены, что хотите выйти из Ryujinx?", + "sv_SE": "Är du säker på att du vill avsluta Ryujinx?", "th_TH": "คุณแน่ใจหรือไม่ว่าต้องการปิด Ryujinx หรือไม่?", "tr_TR": "Ryujinx'i kapatmak istediğinizden emin misiniz?", "uk_UA": "Ви впевнені, що бажаєте закрити Ryujinx?", @@ -10934,6 +11389,7 @@ "pl_PL": "Wszystkie niezapisane dane zostaną utracone!", "pt_BR": "Todos os dados que não foram salvos serão perdidos!", "ru_RU": "Все несохраненные данные будут потеряны", + "sv_SE": "Allt data som inte sparats kommer att förloras!", "th_TH": "ข้อมูลทั้งหมดที่ไม่ได้บันทึกทั้งหมดจะสูญหาย!", "tr_TR": "Kaydedilmeyen bütün veriler kaybedilecek!", "uk_UA": "Усі незбережені дані буде втрачено!", @@ -10958,6 +11414,7 @@ "pl_PL": "Wystąpił błąd podczas tworzenia określonych zapisanych danych: {0}", "pt_BR": "Ocorreu um erro ao criar o diretório de salvamento: {0}", "ru_RU": "Произошла ошибка при создании указанных данных сохранения: {0}", + "sv_SE": "Det inträffade ett fel vid skapandet av angivet sparat spel: {0}", "th_TH": "มีข้อผิดพลาดในการสร้างข้อมูลบันทึกที่ระบุ: {0}", "tr_TR": "Belirtilen kayıt verisi oluşturulurken bir hata oluştu: {0}", "uk_UA": "Під час створення вказаних даних збереження сталася помилка: {0}", @@ -10982,6 +11439,7 @@ "pl_PL": "Wystąpił błąd podczas próby znalezienia określonych zapisanych danych: {0}", "pt_BR": "Ocorreu um erro ao tentar encontrar o diretório de salvamento: {0}", "ru_RU": "Произошла ошибка при поиске указанных данных сохранения: {0}", + "sv_SE": "Det inträffade ett fel vid sökandet av angivet sparat spel: {0}", "th_TH": "มีข้อผิดพลาดในการค้นหาข้อมูลบันทึกที่ระบุไว้: {0}", "tr_TR": "Belirtilen kayıt verisi bulunmaya çalışırken hata: {0}", "uk_UA": "Під час пошуку вказаних даних збереження сталася помилка: {0}", @@ -11006,6 +11464,7 @@ "pl_PL": "Wybierz folder, do którego chcesz rozpakować", "pt_BR": "Escolha o diretório onde os arquivos serão extraídos", "ru_RU": "Выберите папку для извлечения", + "sv_SE": "Välj en mapp att extrahera till", "th_TH": "เลือกโฟลเดอร์ที่จะแตกไฟล์เข้าไป", "tr_TR": "İçine ayıklanacak klasörü seç", "uk_UA": "Виберіть теку для видобування", @@ -11030,6 +11489,7 @@ "pl_PL": "Wypakowywanie sekcji {0} z {1}...", "pt_BR": "Extraindo seção {0} de {1}...", "ru_RU": "Извлечение {0} раздела из {1}...", + "sv_SE": "Extraherar {0}-sektion från {1}...", "th_TH": "กำลังแตกไฟล์ {0} จากส่วน {1}...", "tr_TR": "{1} den {0} kısmı ayıklanıyor...", "uk_UA": "Видобування розділу {0} з {1}...", @@ -11054,6 +11514,7 @@ "pl_PL": "Asystent wypakowania sekcji NCA", "pt_BR": "Extrator de seções NCA", "ru_RU": "Извлечение разделов NCA", + "sv_SE": "Ryujinx - Extrahera NCA-sektion", "th_TH": "เครื่องมือแตกไฟล์ของ NCA", "tr_TR": "NCA Kısmı Ayıklayıcısı", "uk_UA": "Екстрактор розділів NCA", @@ -11078,6 +11539,7 @@ "pl_PL": "Niepowodzenie podczas wypakowywania. W wybranym pliku nie było głównego NCA.", "pt_BR": "Falha na extração. O NCA principal não foi encontrado no arquivo selecionado.", "ru_RU": "Ошибка извлечения. Основной NCA не присутствовал в выбранном файле.", + "sv_SE": "Fel vid extrahering. Main NCA hittades inte i vald fil.", "th_TH": "เกิดความล้มเหลวในการแตกไฟล์เนื่องจากไม่พบ NCA หลักในไฟล์ที่เลือก", "tr_TR": "Ayıklama hatası. Ana NCA seçilen dosyada bulunamadı.", "uk_UA": "Помилка видобування. Основний NCA не був присутній у вибраному файлі.", @@ -11102,6 +11564,7 @@ "pl_PL": "Niepowodzenie podczas wypakowywania. Przeczytaj plik dziennika, aby uzyskać więcej informacji.", "pt_BR": "Falha na extração. Leia o arquivo de log para mais informações.", "ru_RU": "Ошибка извлечения. Прочтите файл журнала для получения дополнительной информации.", + "sv_SE": "Fel vid extrahering. Läs i loggfilen för mer information.", "th_TH": "เกิดความล้มเหลวในการแตกไฟล์ โปรดอ่านไฟล์บันทึกประวัติเพื่อดูข้อมูลเพิ่มเติม", "tr_TR": "Ayıklama hatası. Ek bilgi için kayıt dosyasını okuyun.", "uk_UA": "Помилка видобування. Прочитайте файл журналу для отримання додаткової інформації.", @@ -11126,6 +11589,7 @@ "pl_PL": "Wypakowywanie zakończone pomyślnie.", "pt_BR": "Extração concluída com êxito.", "ru_RU": "Извлечение завершено успешно.", + "sv_SE": "Extraheringen lyckades.", "th_TH": "การแตกไฟล์เสร็จสมบูรณ์แล้ว", "tr_TR": "Ayıklama başarıyla tamamlandı.", "uk_UA": "Видобування успішно завершено.", @@ -11150,6 +11614,7 @@ "pl_PL": "Nie udało się przekonwertować obecnej wersji Ryujinx.", "pt_BR": "Falha ao converter a versão atual do Ryujinx.", "ru_RU": "Не удалось преобразовать текущую версию Ryujinx.", + "sv_SE": "Misslyckades med att konvertera aktuell Ryujinx-version.", "th_TH": "ไม่สามารถแปลงเวอร์ชั่น Ryujinx ปัจจุบันได้", "tr_TR": "Güncel Ryujinx sürümü dönüştürülemedi.", "uk_UA": "Не вдалося конвертувати поточну версію Ryujinx.", @@ -11174,6 +11639,7 @@ "pl_PL": "Anulowanie aktualizacji!", "pt_BR": "Cancelando atualização!", "ru_RU": "Отмена обновления...", + "sv_SE": "Avbryter uppdatering!", "th_TH": "ยกเลิกการอัพเดต!", "tr_TR": "Güncelleme iptal ediliyor!", "uk_UA": "Скасування оновлення!", @@ -11198,6 +11664,7 @@ "pl_PL": "Używasz już najnowszej wersji Ryujinx!", "pt_BR": "Você já está usando a versão mais recente do Ryujinx!", "ru_RU": "Вы используете самую последнюю версию Ryujinx", + "sv_SE": "Du använder redan den senaste versionen av Ryujinx!", "th_TH": "คุณกำลังใช้ Ryujinx เวอร์ชั่นที่อัปเดตล่าสุด!", "tr_TR": "Zaten Ryujinx'in en güncel sürümünü kullanıyorsunuz!", "uk_UA": "Ви вже використовуєте останню версію Ryujinx!", @@ -11222,6 +11689,7 @@ "pl_PL": "Wystąpił błąd podczas próby uzyskania informacji o obecnej wersji z GitHub Release. Może to być spowodowane nową wersją kompilowaną przez GitHub Actions. Spróbuj ponownie za kilka minut.", "pt_BR": "Ocorreu um erro ao tentar obter as informações de atualização do GitHub Release. Isso pode ser causado se uma nova versão estiver sendo compilado pelas Ações do GitHub. Tente novamente em alguns minutos.", "ru_RU": "Произошла ошибка при попытке получить информацию о выпуске от GitHub Release. Это может быть вызвано тем, что в данный момент в GitHub Actions компилируется новый релиз. Повторите попытку позже.", + "sv_SE": "Ett fel inträffade vid försök att hämta information om utgåvan från GitHub. Detta kan hända om en ny utgåva har kompilerats av GitHub Actions. Försök igen om några minuter.", "th_TH": "เกิดข้อผิดพลาดขณะพยายามรับข้อมูลเวอร์ชั่นจาก GitHub Release ปัญหานี้อาจเกิดขึ้นได้หากมีการรวบรวมเวอร์ชั่นใหม่โดย GitHub โปรดลองอีกครั้งในอีกไม่กี่นาทีข้างหน้า", "tr_TR": "GitHub tarafından sürüm bilgileri alınırken bir hata oluştu. Eğer yeni sürüm için hazırlıklar yapılıyorsa bu hatayı almanız olasıdır. Lütfen birkaç dakika sonra tekrar deneyiniz.", "uk_UA": "Під час спроби отримати інформацію про випуск із GitHub Release сталася помилка. Це може бути спричинено, якщо новий випуск компілюється GitHub Actions. Повторіть спробу через кілька хвилин.", @@ -11246,6 +11714,7 @@ "pl_PL": "Nie udało się przekonwertować otrzymanej wersji Ryujinx z Github Release.", "pt_BR": "Falha ao converter a versão do Ryujinx recebida do AppVeyor.", "ru_RU": "Не удалось преобразовать полученную версию Ryujinx из GitHub Release.", + "sv_SE": "Misslyckades med att konvertera mottagen Ryujinx-version från GitHub.", "th_TH": "ไม่สามารถแปลงเวอร์ชั่น Ryujinx ที่ได้รับจาก GitHub Release", "tr_TR": "Github Release'den alınan Ryujinx sürümü dönüştürülemedi.", "uk_UA": "Не вдалося конвертувати отриману версію Ryujinx із випуску GitHub.", @@ -11270,6 +11739,7 @@ "pl_PL": "Pobieranie aktualizacji...", "pt_BR": "Baixando atualização...", "ru_RU": "Загрузка обновления...", + "sv_SE": "Hämtar uppdatering...", "th_TH": "กำลังดาวน์โหลดอัปเดต...", "tr_TR": "Güncelleme İndiriliyor...", "uk_UA": "Завантаження оновлення...", @@ -11294,6 +11764,7 @@ "pl_PL": "Wypakowywanie Aktualizacji...", "pt_BR": "Extraindo atualização...", "ru_RU": "Извлечение обновления...", + "sv_SE": "Extraherar uppdatering...", "th_TH": "กำลังแตกไฟล์อัปเดต...", "tr_TR": "Güncelleme Ayıklanıyor...", "uk_UA": "Видобування оновлення...", @@ -11318,6 +11789,7 @@ "pl_PL": "Zmiana Nazwy Aktualizacji...", "pt_BR": "Renomeando atualização...", "ru_RU": "Переименование обновления...", + "sv_SE": "Byter namn på uppdatering...", "th_TH": "กำลังลบไฟล์เก่า...", "tr_TR": "Güncelleme Yeniden Adlandırılıyor...", "uk_UA": "Перейменування оновлення...", @@ -11342,6 +11814,7 @@ "pl_PL": "Dodawanie Nowej Aktualizacji...", "pt_BR": "Adicionando nova atualização...", "ru_RU": "Добавление нового обновления...", + "sv_SE": "Lägger till ny uppdatering...", "th_TH": "กำลังเพิ่มไฟล์อัปเดตใหม่...", "tr_TR": "Yeni Güncelleme Ekleniyor...", "uk_UA": "Додавання нового оновлення...", @@ -11366,6 +11839,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Visa ändringslogg", "th_TH": "", "tr_TR": "", "uk_UA": "Показати список змін", @@ -11390,6 +11864,7 @@ "pl_PL": "Aktualizacja Zakończona!", "pt_BR": "Atualização concluída!", "ru_RU": "Обновление завершено", + "sv_SE": "Uppdatering färdig!", "th_TH": "อัปเดตเสร็จสมบูรณ์แล้ว!", "tr_TR": "Güncelleme Tamamlandı!", "uk_UA": "Оновлення завершено!", @@ -11414,6 +11889,7 @@ "pl_PL": "Czy chcesz teraz zrestartować Ryujinx?", "pt_BR": "Deseja reiniciar o Ryujinx agora?", "ru_RU": "Перезапустить Ryujinx?", + "sv_SE": "Vill du starta om Ryujinx nu?", "th_TH": "คุณต้องการรีสตาร์ท Ryujinx ตอนนี้หรือไม่?", "tr_TR": "Ryujinx'i şimdi yeniden başlatmak istiyor musunuz?", "uk_UA": "Перезапустити Ryujinx зараз?", @@ -11438,6 +11914,7 @@ "pl_PL": "Nie masz połączenia z Internetem!", "pt_BR": "Você não está conectado à Internet!", "ru_RU": "Вы не подключены к интернету", + "sv_SE": "Du är inte ansluten till internet!", "th_TH": "คุณไม่ได้เชื่อมต่อกับอินเทอร์เน็ต!", "tr_TR": "İnternete bağlı değilsiniz!", "uk_UA": "Ви не підключені до Інтернету!", @@ -11462,6 +11939,7 @@ "pl_PL": "Sprawdź, czy masz działające połączenie internetowe!", "pt_BR": "Por favor, certifique-se de que você tem uma conexão funcional à Internet!", "ru_RU": "Убедитесь, что у вас работает подключение к интернету", + "sv_SE": "Försäkra dig om att du har en fungerande internetanslutning!", "th_TH": "โปรดตรวจสอบว่าคุณมีการเชื่อมต่ออินเทอร์เน็ตว่ามีการใช้งานได้หรือไม่!", "tr_TR": "Lütfen aktif bir internet bağlantınız olduğunu kontrol edin!", "uk_UA": "Будь ласка, переконайтеся, що у вас є робоче підключення до Інтернету!", @@ -11486,6 +11964,7 @@ "pl_PL": "Nie możesz zaktualizować Dirty wersji Ryujinx!", "pt_BR": "Você não pode atualizar uma compilação Dirty do Ryujinx!", "ru_RU": "Вы не можете обновлять Dirty Build", + "sv_SE": "Du kan inte uppdatera en Dirty build av Ryujinx!", "th_TH": "คุณไม่สามารถอัปเดต Dirty build ของ Ryujinx ได้!", "tr_TR": "Ryujinx'in Dirty build'lerini güncelleyemezsiniz!", "uk_UA": "Ви не можете оновити брудну збірку Ryujinx!", @@ -11506,10 +11985,11 @@ "it_IT": "Scarica Ryujinx da https://ryujinx.app/download se stai cercando una versione supportata.", "ja_JP": "サポートされているバージョンをお探しなら, https://ryujinx.app/download で Ryujinx をダウンロードしてください.", "ko_KR": "지원되는 버전을 찾으신다면 https://ryujinx.app/download 에서 Ryujinx를 내려받으세요.", - "no_NO": "Vennligst last ned Ryujinx på https://ryujinx.org/ hvis du ser etter en støttet versjon.", + "no_NO": "Vennligst last ned Ryujinx på https://ryujinx.app/download hvis du ser etter en støttet versjon.", "pl_PL": "Pobierz Ryujinx ze strony https://ryujinx.app/download, jeśli szukasz obsługiwanej wersji.", "pt_BR": "Por favor, baixe o Ryujinx em https://ryujinx.app/download se está procurando por uma versão suportada.", "ru_RU": "Загрузите Ryujinx по адресу https://ryujinx.app/download если вам нужна поддерживаемая версия.", + "sv_SE": "Hämta Ryujinx från https://ryujinx.app/download om du letar efter en version som stöds.", "th_TH": "โปรดดาวน์โหลด Ryujinx ได้ที่ https://ryujinx.app/download หากคุณกำลังมองหาเวอร์ชั่นที่รองรับ", "tr_TR": "Desteklenen bir sürüm için lütfen Ryujinx'i https://ryujinx.app/download sitesinden indirin.", "uk_UA": "Будь ласка, завантажте Ryujinx на https://ryujinx.app/download, якщо ви шукаєте підтримувану версію.", @@ -11534,6 +12014,7 @@ "pl_PL": "Wymagane Ponowne Uruchomienie", "pt_BR": "Reinicialização necessária", "ru_RU": "Требуется перезагрузка", + "sv_SE": "Omstart krävs", "th_TH": "จำเป็นต้องรีสตาร์ทเพื่อให้การอัพเดตสามารถให้งานได้", "tr_TR": "Yeniden Başlatma Gerekli", "uk_UA": "Потрібен перезапуск", @@ -11558,6 +12039,7 @@ "pl_PL": "Motyw został zapisany. Aby zastosować motyw, konieczne jest ponowne uruchomienie.", "pt_BR": "O tema foi salvo. Uma reinicialização é necessária para aplicar o tema.", "ru_RU": "Тема сохранена. Для применения темы требуется перезапуск.", + "sv_SE": "Temat har sparats. En omstart krävs för att verkställa ändringen.", "th_TH": "บันทึกธีมแล้ว จำเป็นต้องรีสตาร์ทเพื่อใช้ธีม", "tr_TR": "Tema kaydedildi. Temayı uygulamak için yeniden başlatma gerekiyor.", "uk_UA": "Тему збережено. Щоб застосувати тему, потрібен перезапуск.", @@ -11582,6 +12064,7 @@ "pl_PL": "Czy chcesz uruchomić ponownie?", "pt_BR": "Deseja reiniciar?", "ru_RU": "Хотите перезапустить", + "sv_SE": "Vill du starta om", "th_TH": "คุณต้องการรีสตาร์ทหรือไม่?", "tr_TR": "Yeniden başlatmak ister misiniz", "uk_UA": "Ви хочете перезапустити", @@ -11606,6 +12089,7 @@ "pl_PL": "Czy chcesz zainstalować firmware wbudowany w tę grę? (Firmware {0})", "pt_BR": "Gostaria de instalar o firmware incluso neste jogo? (Firmware {0})", "ru_RU": "Хотите установить прошивку, встроенную в эту игру? (Прошивка {0})", + "sv_SE": "Vill du installera det firmware som är inbäddat i detta spel? (Firmware {0})", "th_TH": "คุณต้องการติดตั้งเฟิร์มแวร์ที่ฝังอยู่ในเกมนี้หรือไม่? (เฟิร์มแวร์ {0})", "tr_TR": "Bu oyunun içine gömülü olan yazılımı yüklemek ister misiniz? (Firmware {0})", "uk_UA": "Бажаєте встановити прошивку, вбудовану в цю гру? (Прошивка {0})", @@ -11630,6 +12114,7 @@ "pl_PL": "Nie znaleziono zainstalowanego oprogramowania, ale Ryujinx był w stanie zainstalować oprogramowanie {0} z dostarczonej gry.\n\nEmulator uruchomi się teraz.", "pt_BR": "Nenhum firmware instalado foi encontrado, mas o Ryujinx conseguiu instalar o firmware {0} a partir do jogo fornecido.\nO emulador será iniciado agora.", "ru_RU": "Установленная прошивка не была найдена, но Ryujinx удалось установить прошивку {0} из предоставленной игры.\nТеперь эмулятор запустится.", + "sv_SE": "Inget installerat firmware hittades men Ryujinx kunde installera firmware {0} från angiven spel.\nEmulatorn kommer nu att startas.", "th_TH": "ไม่พบเฟิร์มแวร์ที่ติดตั้งไว้ แต่ Ryujinx จะติดตั้งเฟิร์มแวร์ได้ {0} จากเกมที่ให้มา\nขณะนี้โปรแกรมจำลองจะเริ่มทำงาน", "tr_TR": "", "uk_UA": "Встановлену прошивку не знайдено, але Ryujinx вдалося встановити прошивку {0} з наданої гри.\nТепер запуститься емулятор.", @@ -11654,6 +12139,7 @@ "pl_PL": "Brak Zainstalowanego Firmware'u", "pt_BR": "Firmware não foi instalado", "ru_RU": "Прошивка не установлена", + "sv_SE": "Inget firmware installerat", "th_TH": "ไม่มีการติดตั้งเฟิร์มแวร์", "tr_TR": "Yazılım Yüklü Değil", "uk_UA": "Прошивка не встановлена", @@ -11678,6 +12164,7 @@ "pl_PL": "Firmware {0} został zainstalowany", "pt_BR": "Firmware {0} foi instalado", "ru_RU": "Прошивка {0} была установлена", + "sv_SE": "Firmware {0} installerades", "th_TH": "เฟิร์มแวร์ {0} ติดตั้งแล้ว", "tr_TR": "Yazılım {0} yüklendi", "uk_UA": "Встановлено прошивку {0}", @@ -11702,6 +12189,7 @@ "pl_PL": "Pomyślnie zainstalowano typy plików!", "pt_BR": "Tipos de arquivo instalados com sucesso!", "ru_RU": "Типы файлов успешно установлены", + "sv_SE": "Filtyper har installerats!", "th_TH": "ติดตั้งตามประเภทของไฟล์สำเร็จแล้ว!", "tr_TR": "Dosya uzantıları başarıyla yüklendi!", "uk_UA": "Успішно встановлено типи файлів!", @@ -11726,6 +12214,7 @@ "pl_PL": "Nie udało się zainstalować typów plików.", "pt_BR": "Falha ao instalar tipos de arquivo.", "ru_RU": "Не удалось установить типы файлов.", + "sv_SE": "Misslyckades med att installera filtyper.", "th_TH": "ติดตั้งตามประเภทของไฟล์ไม่สำเร็จ", "tr_TR": "Dosya uzantıları yükleme işlemi başarısız oldu.", "uk_UA": "Не вдалося встановити типи файлів.", @@ -11750,6 +12239,7 @@ "pl_PL": "Pomyślnie odinstalowano typy plików!", "pt_BR": "Tipos de arquivo desinstalados com sucesso!", "ru_RU": "Типы файлов успешно удалены", + "sv_SE": "Filtyper avinstallerades!", "th_TH": "ถอนการติดตั้งตามประเภทของไฟล์สำเร็จแล้ว!", "tr_TR": "Dosya uzantıları başarıyla kaldırıldı!", "uk_UA": "Успішно видалено типи файлів!", @@ -11774,6 +12264,7 @@ "pl_PL": "Nie udało się odinstalować typów plików.", "pt_BR": "Falha ao desinstalar tipos de arquivo.", "ru_RU": "Не удалось удалить типы файлов.", + "sv_SE": "Misslyckades med att avinstallera filtyper.", "th_TH": "ไม่สามารถถอนการติดตั้งตามประเภทของไฟล์ได้", "tr_TR": "Dosya uzantıları kaldırma işlemi başarısız oldu.", "uk_UA": "Не вдалося видалити типи файлів.", @@ -11798,6 +12289,7 @@ "pl_PL": "Otwórz Okno Ustawień", "pt_BR": "Abrir janela de configurações", "ru_RU": "Открывает окно параметров", + "sv_SE": "Öppna inställningar", "th_TH": "เปิดหน้าต่างการตั้งค่า", "tr_TR": "Seçenekler Penceresini Aç", "uk_UA": "Відкрити вікно налаштувань", @@ -11822,6 +12314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "XCI-optimerare", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -11846,6 +12339,7 @@ "pl_PL": "Aplet Kontrolera", "pt_BR": "Applet de controle", "ru_RU": "Апплет контроллера", + "sv_SE": "Handkontroller-applet", "th_TH": "คอนโทรลเลอร์ Applet", "tr_TR": "Kumanda Applet'i", "uk_UA": "Аплет контролера", @@ -11870,6 +12364,7 @@ "pl_PL": "Błąd wyświetlania okna Dialogowego Wiadomości: {0}", "pt_BR": "Erro ao exibir diálogo de mensagem: {0}", "ru_RU": "Ошибка отображения сообщения: {0}", + "sv_SE": "Fel vid visning av meddelandedialog: {0}", "th_TH": "เกิดข้อผิดพลาดในการแสดงกล่องโต้ตอบข้อความ: {0}", "tr_TR": "Mesaj diyaloğu gösterilirken hata: {0}", "uk_UA": "Помилка показу діалогового вікна повідомлення: {0}", @@ -11894,6 +12389,7 @@ "pl_PL": "Błąd wyświetlania Klawiatury Oprogramowania: {0}", "pt_BR": "Erro ao exibir teclado virtual: {0}", "ru_RU": "Ошибка отображения программной клавиатуры: {0}", + "sv_SE": "Fel vid visning av programvarutangentbord: {0}", "th_TH": "เกิดข้อผิดพลาดในการแสดงซอฟต์แวร์แป้นพิมพ์: {0}", "tr_TR": "Mesaj diyaloğu gösterilirken hata: {0}", "uk_UA": "Помилка показу програмної клавіатури: {0}", @@ -11918,6 +12414,7 @@ "pl_PL": "Błąd wyświetlania okna Dialogowego ErrorApplet: {0}", "pt_BR": "Erro ao exibir applet ErrorApplet: {0}", "ru_RU": "Ошибка отображения диалогового окна ErrorApplet: {0}", + "sv_SE": "Fel vid visning av ErrorApplet-dialog: {0}", "th_TH": "เกิดข้อผิดพลาดในการแสดงกล่องโต้ตอบ ข้อผิดพลาดของ Applet: {0}", "tr_TR": "Applet diyaloğu gösterilirken hata: {0}", "uk_UA": "Помилка показу діалогового вікна ErrorApplet: {0}", @@ -11942,6 +12439,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -11966,6 +12464,7 @@ "pl_PL": "\nAby uzyskać więcej informacji o tym, jak naprawić ten błąd, zapoznaj się z naszym Przewodnikiem instalacji.", "pt_BR": "\nPara mais informações sobre como corrigir esse erro, siga nosso Guia de Configuração.", "ru_RU": "\nДля получения дополнительной информации о том, как исправить эту ошибку, следуйте нашему Руководству по установке.", + "sv_SE": "\nFölj vår konfigurationsguide för mer information om hur man rättar till detta fel.", "th_TH": "\nสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีแก้ไขข้อผิดพลาดนี้ โปรดทำตามคำแนะนำในการตั้งค่าของเรา", "tr_TR": "\nBu hatayı düzeltmek adına daha fazla bilgi için kurulum kılavuzumuzu takip edin.", "uk_UA": "\nДля отримання додаткової інформації про те, як виправити цю помилку, дотримуйтесь нашого посібника з налаштування.", @@ -11990,6 +12489,7 @@ "pl_PL": "Błąd Ryujinxa ({0})", "pt_BR": "Erro do Ryujinx ({0})", "ru_RU": "Ошибка Ryujinx ({0})", + "sv_SE": "Ryujinx-fel ({0}", "th_TH": "ข้อผิดพลาด Ryujinx ({0})", "tr_TR": "Ryujinx Hatası ({0})", "uk_UA": "Помилка Ryujinx ({0})", @@ -12014,6 +12514,7 @@ "pl_PL": "API Amiibo", "pt_BR": "API Amiibo", "ru_RU": "", + "sv_SE": "Amiibo-API", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -12038,6 +12539,7 @@ "pl_PL": "Wystąpił błąd podczas pobierania informacji z API.", "pt_BR": "Um erro ocorreu ao tentar obter informações da API.", "ru_RU": "Произошла ошибка при получении информации из API.", + "sv_SE": "Ett fel inträffade vid hämtning av information från API.", "th_TH": "เกิดข้อผิดพลาดขณะเรียกข้อมูลจาก API", "tr_TR": "API'dan bilgi alırken bir hata oluştu.", "uk_UA": "Під час отримання інформації з API сталася помилка.", @@ -12062,6 +12564,7 @@ "pl_PL": "Nie można połączyć się z serwerem API Amiibo. Usługa może nie działać lub może być konieczne sprawdzenie, czy połączenie internetowe jest online.", "pt_BR": "Não foi possível conectar ao servidor da API Amiibo. O serviço pode estar fora do ar ou você precisa verificar sua conexão com a Internet.", "ru_RU": "Не удалось подключиться к серверу Amiibo API. Служба может быть недоступна или вам может потребоваться проверить ваше интернет-соединение.", + "sv_SE": "Kunde inte ansluta till Amiibo API-server. Tjänsten kanske är nere eller så behöver du kontrollera att din internetanslutning fungerar.", "th_TH": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ Amiibo API บางบริการอาจหยุดทำงาน หรือไม่คุณต้องทำการตรวจสอบว่าอินเทอร์เน็ตของคุณอยู่ในสถานะเชื่อมต่ออยู่หรือไม่", "tr_TR": "Amiibo API sunucusuna bağlanılamadı. Sunucu çevrimdışı olabilir veya uygun bir internet bağlantınızın olduğunu kontrol etmeniz gerekebilir.", "uk_UA": "Неможливо підключитися до сервера Amiibo API. Можливо, служба не працює або вам потрібно перевірити, чи є підключення до Інтернету.", @@ -12086,6 +12589,7 @@ "pl_PL": "Profil {0} jest niezgodny z bieżącym systemem konfiguracji sterowania.", "pt_BR": "Perfil {0} é incompatível com o sistema de configuração de controle atual.", "ru_RU": "Профиль {0} несовместим с текущей системой конфигурации ввода.", + "sv_SE": "Profilen {0} är inte kompatibel med aktuell konfiguration för inmatning.", "th_TH": "โปรไฟล์ {0} ไม่สามารถทำงานได้กับระบบกำหนดค่าอินพุตปัจจุบัน", "tr_TR": "Profil {0} güncel giriş konfigürasyon sistemi ile uyumlu değil.", "uk_UA": "Профіль {0} несумісний із поточною системою конфігурації вводу.", @@ -12110,6 +12614,7 @@ "pl_PL": "Profil Domyślny nie może zostać nadpisany", "pt_BR": "O perfil Padrão não pode ser substituído", "ru_RU": "Профиль по умолчанию не может быть перезаписан", + "sv_SE": "Standardprofilen kan inte skrivas över", "th_TH": "โปรไฟล์เริ่มต้นไม่สามารถเขียนทับได้", "tr_TR": "Varsayılan Profil'in üstüne yazılamaz", "uk_UA": "Стандартний профіль не можна перезаписати", @@ -12134,6 +12639,7 @@ "pl_PL": "Usuwanie Profilu", "pt_BR": "Apagando perfil", "ru_RU": "Удаление профиля", + "sv_SE": "Tar bort profilen", "th_TH": "กำลังลบโปรไฟล์", "tr_TR": "Profil Siliniyor", "uk_UA": "Видалення профілю", @@ -12158,6 +12664,7 @@ "pl_PL": "Ta czynność jest nieodwracalna, czy na pewno chcesz kontynuować?", "pt_BR": "Essa ação é irreversível, tem certeza que deseja continuar?", "ru_RU": "Это действие необратимо. Вы уверены, что хотите продолжить?", + "sv_SE": "Denna åtgärd går inte att ångra. Är du säker på att du vill fortsätta?", "th_TH": "การดำเนินการนี้ไม่สามารถย้อนกลับได้ คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?", "tr_TR": "Bu eylem geri döndürülemez, devam etmek istediğinizden emin misiniz?", "uk_UA": "Цю дію неможливо скасувати. Ви впевнені, що бажаєте продовжити?", @@ -12182,6 +12689,7 @@ "pl_PL": "Uwaga", "pt_BR": "Alerta", "ru_RU": "Внимание", + "sv_SE": "Varning", "th_TH": "คำเตือน", "tr_TR": "Uyarı", "uk_UA": "Увага", @@ -12206,6 +12714,7 @@ "pl_PL": "Masz zamiar umieścić w kolejce rekompilację PPTC przy następnym uruchomieniu:\n\n{0}\n\nCzy na pewno chcesz kontynuować?", "pt_BR": "Você está prestes a apagar o cache PPTC para :\n\n{0}\n\nTem certeza que deseja continuar?", "ru_RU": "Вы собираетесь перестроить кэш PPTC при следующем запуске для:\n\n{0}\n\nВы уверены, что хотите продолжить?", + "sv_SE": "Du är på väg att kölägga en PPTC rebuild vid nästa uppstart av:\n\n{0}\n\nÄr du säker på att du vill fortsätta?", "th_TH": "คุณกำลังตั้งค่าให้มีการสร้าง PPTC ใหม่ในการบูตครั้งถัดไป:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?", "tr_TR": "Belirtilen PPTC cache silinecek :\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?", "uk_UA": "Ви збираєтеся видалити кеш PPTC для:\n\n{0}\n\nВи впевнені, що бажаєте продовжити?", @@ -12230,6 +12739,7 @@ "pl_PL": "Błąd czyszczenia cache PPTC w {0}: {1}", "pt_BR": "Erro apagando cache PPTC em {0}: {1}", "ru_RU": "Ошибка очистки кэша PPTC в {0}: {1}", + "sv_SE": "Fel vid tömning av PPTC-cache i {0}: {1}", "th_TH": "มีข้อผิดพลาดในการล้างแคช PPTC {0}: {1}", "tr_TR": "Belirtilen PPTC cache temizlenirken hata {0}: {1}", "uk_UA": "Помилка очищення кешу PPTC на {0}: {1}", @@ -12254,6 +12764,7 @@ "pl_PL": "Zamierzasz usunąć cache Shaderów dla :\n\n{0}\n\nNa pewno chcesz kontynuować?", "pt_BR": "Você está prestes a apagar o cache de Shader para :\n\n{0}\n\nTem certeza que deseja continuar?", "ru_RU": "Вы собираетесь удалить кэш шейдеров для:\n\n{0}\n\nВы уверены, что хотите продолжить?", + "sv_SE": "Du är på väg att ta bort shader cache för :\n\n{0}\n\nÄr du säker på att du vill fortsätta?", "th_TH": "คุณกำลังจะลบแคชแสงเงา:\n\n{0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อหรือไม่?", "tr_TR": "Belirtilen Shader cache silinecek :\n\n{0}\n\nDevam etmek istediğinizden emin misiniz?", "uk_UA": "Ви збираєтеся видалити кеш шейдерів для:\n\n{0}\n\nВи впевнені, що бажаєте продовжити?", @@ -12278,6 +12789,7 @@ "pl_PL": "Błąd czyszczenia cache Shaderów w {0}: {1}", "pt_BR": "Erro apagando o cache de Shader em {0}: {1}", "ru_RU": "Ошибка очистки кэша шейдеров в {0}: {1}", + "sv_SE": "Fel vid tömning av shader cache i {0}: {1}", "th_TH": "เกิดข้อผิดพลาดในการล้าง แคชแสงเงา {0}: {1}", "tr_TR": "Belirtilen Shader cache temizlenirken hata {0}: {1}", "uk_UA": "Помилка очищення кешу шейдерів на {0}: {1}", @@ -12302,6 +12814,7 @@ "pl_PL": "Ryujinx napotkał błąd", "pt_BR": "Ryujinx encontrou um erro", "ru_RU": "Ryujinx обнаружил ошибку", + "sv_SE": "Ryujinx har påträffat ett fel", "th_TH": "Ryujinx พบข้อผิดพลาด", "tr_TR": "Ryujinx bir hata ile karşılaştı", "uk_UA": "У Ryujinx сталася помилка", @@ -12326,6 +12839,7 @@ "pl_PL": "Błąd UI: Wybrana gra nie miała prawidłowego ID tytułu", "pt_BR": "Erro de interface: O jogo selecionado não tem um ID de título válido", "ru_RU": "Ошибка пользовательского интерфейса: выбранная игра не имеет действительного ID.", + "sv_SE": "Gränssnittsfel: Angivet spel saknar ett giltigt title ID", "th_TH": "ข้อผิดพลาดของ UI: เกมที่เลือกไม่มีชื่อ ID ที่ถูกต้อง", "tr_TR": "Arayüz hatası: Seçilen oyun geçerli bir title ID'ye sahip değil", "uk_UA": "Помилка інтерфейсу: вибрана гра не мала дійсного ідентифікатора назви", @@ -12350,6 +12864,7 @@ "pl_PL": "Nie znaleziono prawidłowego firmware'u systemowego w {0}.", "pt_BR": "Um firmware de sistema válido não foi encontrado em {0}.", "ru_RU": "Валидная системная прошивка не найдена в {0}.", + "sv_SE": "Ett giltigt systemfirmware hittades inte i {0}.", "th_TH": "ไม่พบเฟิร์มแวร์ของระบบที่ถูกต้อง {0}.", "tr_TR": "{0} da geçerli bir sistem firmware'i bulunamadı.", "uk_UA": "Дійсна прошивка системи не знайдена в {0}.", @@ -12374,6 +12889,7 @@ "pl_PL": "Zainstaluj Firmware {0}", "pt_BR": "Instalar firmware {0}", "ru_RU": "Установить прошивку {0}", + "sv_SE": "Installera firmware {0}", "th_TH": "ติดตั้งเฟิร์มแวร์ {0}", "tr_TR": "Firmware {0} Yükle", "uk_UA": "Встановити прошивку {0}", @@ -12398,6 +12914,7 @@ "pl_PL": "Wersja systemu {0} zostanie zainstalowana.", "pt_BR": "A versão do sistema {0} será instalada.", "ru_RU": "Будет установлена версия прошивки {0}.", + "sv_SE": "Systemversion {0} kommer att installeras.", "th_TH": "ระบบเวอร์ชั่น {0} ได้รับการติดตั้งเร็วๆ นี้", "tr_TR": "Sistem sürümü {0} yüklenecek.", "uk_UA": "Буде встановлено версію системи {0}.", @@ -12422,6 +12939,7 @@ "pl_PL": "\n\nZastąpi to obecną wersję systemu {0}.", "pt_BR": "\n\nIsso substituirá a versão do sistema atual {0}.", "ru_RU": "\n\nЭто заменит текущую версию прошивки {0}.", + "sv_SE": "\n\nDetta kommer att ersätta aktuella systemversionen {0}.", "th_TH": "\n\nสิ่งนี้จะแทนที่เวอร์ชั่นของระบบเวอร์ชั่นปัจจุบัน {0}.", "tr_TR": "\n\nBu şimdiki sistem sürümünün yerini alacak {0}.", "uk_UA": "\n\nЦе замінить поточну версію системи {0}.", @@ -12446,6 +12964,7 @@ "pl_PL": "\n\nCzy chcesz kontynuować?", "pt_BR": "\n\nDeseja continuar?", "ru_RU": "\n\nПродолжить?", + "sv_SE": "\n\nVill du fortsätta?", "th_TH": "\n\nคุณต้องการดำเนินการต่อหรือไม่?", "tr_TR": "\n\nDevam etmek istiyor musunuz?", "uk_UA": "\n\nВи хочете продовжити?", @@ -12470,6 +12989,7 @@ "pl_PL": "Instalowanie firmware'u...", "pt_BR": "Instalando firmware...", "ru_RU": "Установка прошивки...", + "sv_SE": "Installerar firmware...", "th_TH": "กำลังติดตั้งเฟิร์มแวร์...", "tr_TR": "Firmware yükleniyor...", "uk_UA": "Встановлення прошивки...", @@ -12494,6 +13014,7 @@ "pl_PL": "Wersja systemu {0} została pomyślnie zainstalowana.", "pt_BR": "Versão do sistema {0} instalada com sucesso.", "ru_RU": "Прошивка версии {0} успешно установлена.", + "sv_SE": "Systemversion {0} har installerats.", "th_TH": "ระบบเวอร์ชั่น {0} ติดตั้งเรียบร้อยแล้ว", "tr_TR": "Sistem sürümü {0} başarıyla yüklendi.", "uk_UA": "Версію системи {0} успішно встановлено.", @@ -12518,6 +13039,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "En ogiltig nyckelfil hittades i {0}", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -12542,6 +13064,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Installera nycklar", "th_TH": "", "tr_TR": "", "uk_UA": "Встановлення Ключів", @@ -12566,6 +13089,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Ny nyckelfil kommer att installeras.", "th_TH": "", "tr_TR": "", "uk_UA": "Новий файл Ключів буде встановлено", @@ -12590,6 +13114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "\n\nDetta kan ersätta några av de redan installerade nycklarna.", "th_TH": "", "tr_TR": "", "uk_UA": "\n\nЦе замінить собою поточні файли Ключів.", @@ -12614,6 +13139,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "\n\nVill du fortsätta?", "th_TH": "", "tr_TR": "", "uk_UA": "\n\nВи хочете продовжити?", @@ -12638,6 +13164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Installerar nycklar...", "th_TH": "", "tr_TR": "", "uk_UA": "Встановлення Ключів...", @@ -12662,6 +13189,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Ny nyckelfil installerades.", "th_TH": "", "tr_TR": "", "uk_UA": "Нові ключі встановлено.", @@ -12686,6 +13214,7 @@ "pl_PL": "Nie będzie innych profili do otwarcia, jeśli wybrany profil zostanie usunięty", "pt_BR": "Não haveria nenhum perfil selecionado se o perfil atual fosse deletado", "ru_RU": "Если выбранный профиль будет удален, другие профили не будут открываться.", + "sv_SE": "Det skulle inte finnas några andra profiler att öppnas om angiven profil tas bort", "th_TH": "จะไม่มีโปรไฟล์อื่นให้เปิดหากโปรไฟล์ที่เลือกถูกลบ", "tr_TR": "Seçilen profil silinirse kullanılabilen başka profil kalmayacak", "uk_UA": "Якщо вибраний профіль буде видалено, інші профілі не відкриватимуться", @@ -12710,6 +13239,7 @@ "pl_PL": "Czy chcesz usunąć wybrany profil", "pt_BR": "Deseja deletar o perfil selecionado", "ru_RU": "Удалить выбранный профиль?", + "sv_SE": "Vill du ta bort den valda profilen", "th_TH": "คุณต้องการลบโปรไฟล์ที่เลือกหรือไม่?", "tr_TR": "Seçilen profili silmek istiyor musunuz", "uk_UA": "Ви хочете видалити вибраний профіль", @@ -12734,6 +13264,7 @@ "pl_PL": "Uwaga - Niezapisane zmiany", "pt_BR": "Alerta - Alterações não salvas", "ru_RU": "Внимание - Несохраненные изменения", + "sv_SE": "Varning - Ej sparade ändringar", "th_TH": "คำเตือน - มีการเปลี่ยนแปลงที่ไม่ได้บันทึก", "tr_TR": "Uyarı - Kaydedilmemiş Değişiklikler", "uk_UA": "Увага — Незбережені зміни", @@ -12758,6 +13289,7 @@ "pl_PL": "Wprowadziłeś zmiany dla tego profilu użytkownika, które nie zostały zapisane.", "pt_BR": "Você fez alterações para este perfil de usuário que não foram salvas.", "ru_RU": "В эту учетную запись внесены изменения, которые не были сохранены.", + "sv_SE": "Du har gjort ändringar i denna användarprofil som inte har sparats.", "th_TH": "คุณได้ทำการเปลี่ยนแปลงโปรไฟล์ผู้ใช้นี้โดยไม่ได้รับการบันทึก", "tr_TR": "Kullanıcı profilinizde kaydedilmemiş değişiklikler var.", "uk_UA": "Ви зробили зміни у цьому профілю користувача які не було збережено.", @@ -12782,6 +13314,7 @@ "pl_PL": "Czy chcesz odrzucić zmiany?", "pt_BR": "Deseja descartar as alterações?", "ru_RU": "Отменить изменения?", + "sv_SE": "Vill du förkasta dina ändringar?", "th_TH": "คุณต้องการทิ้งการเปลี่ยนแปลงของคุณหรือไม่?", "tr_TR": "Yaptığınız değişiklikleri iptal etmek istediğinize emin misiniz?", "uk_UA": "Бажаєте скасувати зміни?", @@ -12806,6 +13339,7 @@ "pl_PL": "Aktualne ustawienia kontrolera zostały zaktualizowane.", "pt_BR": "As configurações de controle atuais foram atualizadas.", "ru_RU": "Текущие настройки управления обновлены.", + "sv_SE": "Aktuella kontrollerinställningar har uppdaterats.", "th_TH": "การตั้งค่าคอนโทรลเลอร์ปัจจุบันได้รับการอัปเดตแล้ว", "tr_TR": "Geçerli kumanda seçenekleri güncellendi.", "uk_UA": "Поточні налаштування контролера оновлено.", @@ -12830,6 +13364,7 @@ "pl_PL": "Czy chcesz zapisać?", "pt_BR": "Deseja salvar?", "ru_RU": "Сохранить?", + "sv_SE": "Vill du spara?", "th_TH": "คุณต้องการบันทึกหรือไม่?", "tr_TR": "Kaydetmek istiyor musunuz?", "uk_UA": "Ви хочете зберегти?", @@ -12854,6 +13389,7 @@ "pl_PL": "{0}. Błędny plik: {1}", "pt_BR": "{0}. Arquivo com erro: {1}", "ru_RU": "{0}. Файл с ошибкой: {1}", + "sv_SE": "{0}. Fel i filen: {1}", "th_TH": "{0} ไฟล์เกิดข้อผิดพลาด: {1}", "tr_TR": "{0}. Hatalı Dosya: {1}", "uk_UA": "{0}. Файл з помилкою: {1}", @@ -12878,6 +13414,7 @@ "pl_PL": "Modyfikacja już istnieje", "pt_BR": "O mod já existe", "ru_RU": "Мод уже существует", + "sv_SE": "Modd finns redan", "th_TH": "มีม็อดนี้อยู่แล้ว", "tr_TR": "Mod zaten var", "uk_UA": "Модифікація вже існує", @@ -12902,6 +13439,7 @@ "pl_PL": "Podany katalog nie zawiera modyfikacji!", "pt_BR": "O diretório especificado não contém um mod!", "ru_RU": "Выбранная папка не содержит модов", + "sv_SE": "Den angivna katalogen innehåller inte en modd!", "th_TH": "ไดเร็กทอรีที่ระบุไม่มี ม็อดอยู่!", "tr_TR": "", "uk_UA": "Вказаний каталог не містить модифікації!", @@ -12926,6 +13464,7 @@ "pl_PL": "Nie udało się usunąć: Nie można odnaleźć katalogu nadrzędnego dla modyfikacji \"{0}\"!", "pt_BR": "Falha ao excluir: Não foi possível encontrar o diretório pai do mod \"{0}\"!", "ru_RU": "Невозможно удалить: не удалось найти папку мода \"{0}\"", + "sv_SE": "Misslyckades med att ta bort: Kunde inte hitta föräldrakatalogen för modden \"{0}\"!", "th_TH": "ไม่สามารถลบ: ไม่พบไดเร็กทอรีหลักสำหรับ ม็อด \"{0}\"!", "tr_TR": "Silme Başarısız: \"{0}\" Modu için üst dizin bulunamadı! ", "uk_UA": "Не видалено: Не знайдено батьківський каталог для модифікації \"{0}\"!", @@ -12950,6 +13489,7 @@ "pl_PL": "Określony plik nie zawiera DLC dla wybranego tytułu!", "pt_BR": "O arquivo especificado não contém DLCs para o título selecionado!", "ru_RU": "Указанный файл не содержит DLC для выбранной игры", + "sv_SE": "Den angivna filen innehåller inte en DLC för angivet spel!", "th_TH": "ไฟล์ที่ระบุไม่มี DLC สำหรับชื่อที่เลือก!", "tr_TR": "Belirtilen dosya seçilen oyun için DLC içermiyor!", "uk_UA": "Зазначений файл не містить DLC для вибраного заголовку!", @@ -12974,6 +13514,7 @@ "pl_PL": "Masz włączone rejestrowanie śledzenia, które jest przeznaczone tylko dla programistów.", "pt_BR": "Os logs de depuração estão ativos, esse recurso é feito para ser usado apenas por desenvolvedores.", "ru_RU": "У вас включено ведение журнала отладки, предназначенное только для разработчиков.", + "sv_SE": "Du har spårloggning aktiverat som endast är designat att användas av utvecklare.", "th_TH": "คุณได้เปิดใช้งานการบันทึกการติดตาม ซึ่งออกแบบมาเพื่อให้นักพัฒนาใช้เท่านั้น", "tr_TR": "Sadece geliştiriler için dizayn edilen Trace Loglama seçeneği etkin.", "uk_UA": "Ви увімкнули журнал налагодження, призначений лише для розробників.", @@ -12998,6 +13539,7 @@ "pl_PL": "Aby uzyskać optymalną wydajność, zaleca się wyłączenie rejestrowania śledzenia. Czy chcesz teraz wyłączyć rejestrowanie śledzenia?", "pt_BR": "Para melhor performance, é recomendável desabilitar os logs de depuração. Gostaria de desabilitar os logs de depuração agora?", "ru_RU": "Для оптимальной производительности рекомендуется отключить ведение журнала отладки. Хотите отключить ведение журнала отладки?", + "sv_SE": "Det rekommenderas att inaktivera spårloggning för optimal prestanda. Vill du inaktivera spårloggning nu?", "th_TH": "เพื่อประสิทธิภาพสูงสุด ขอแนะนำให้ปิดใช้งานการบันทึกการติดตาม คุณต้องการปิดใช้การบันทึกการติดตามตอนนี้หรือไม่?", "tr_TR": "En iyi performans için trace loglama'nın devre dışı bırakılması tavsiye edilir. Trace loglama seçeneğini şimdi devre dışı bırakmak ister misiniz?", "uk_UA": "Для оптимальної продуктивності рекомендується вимкнути ведення журналу налагодження. Ви хочете вимкнути ведення журналу налагодження зараз?", @@ -13022,6 +13564,7 @@ "pl_PL": "Masz włączone zrzucanie shaderów, które jest przeznaczone tylko dla programistów.", "pt_BR": "O despejo de shaders está ativo, esse recurso é feito para ser usado apenas por desenvolvedores.", "ru_RU": "У вас включен дамп шейдеров, который предназначен только для разработчиков.", + "sv_SE": "Du har aktiverat shader dumping som endast är designat att användas av utvecklare.", "th_TH": "คุณได้เปิดใช้งาน การดัมพ์เชเดอร์ ซึ่งออกแบบมาเพื่อให้นักพัฒนาใช้งานเท่านั้น", "tr_TR": "Sadece geliştiriler için dizayn edilen Shader Dumping seçeneği etkin.", "uk_UA": "Ви увімкнули скидання шейдерів, призначений лише для розробників.", @@ -13046,6 +13589,7 @@ "pl_PL": "Aby uzyskać optymalną wydajność, zaleca się wyłączenie zrzucania shaderów. Czy chcesz teraz wyłączyć zrzucanie shaderów?", "pt_BR": "Para melhor performance, é recomendável desabilitar o despejo de shaders. Gostaria de desabilitar o despejo de shaders agora?", "ru_RU": "Для оптимальной производительности рекомендуется отключить дамп шейдеров. Хотите отключить дамп шейдеров?", + "sv_SE": "Det rekommenderas att inaktivera shader dumping för optimal prestanda. Vill du inaktivera shader dumping nu?", "th_TH": "เพื่อประสิทธิภาพสูงสุด ขอแนะนำให้ปิดใช้การดัมพ์เชเดอร์ คุณต้องการปิดการใช้งานการ ดัมพ์เชเดอร์ ตอนนี้หรือไม่?", "tr_TR": "En iyi performans için Shader Dumping'in devre dışı bırakılması tavsiye edilir. Shader Dumping seçeneğini şimdi devre dışı bırakmak ister misiniz?", "uk_UA": "Для оптимальної продуктивності рекомендується вимкнути скидання шейдерів. Ви хочете вимкнути скидання шейдерів зараз?", @@ -13070,6 +13614,7 @@ "pl_PL": "Gra została już załadowana", "pt_BR": "Um jogo já foi carregado", "ru_RU": "Игра уже загружена", + "sv_SE": "Ett spel har redan lästs in", "th_TH": "ทำการโหลดเกมเรียบร้อยแล้ว", "tr_TR": "Bir oyun zaten yüklendi", "uk_UA": "Гру вже завантажено", @@ -13094,6 +13639,7 @@ "pl_PL": "Zatrzymaj emulację lub zamknij emulator przed uruchomieniem innej gry.", "pt_BR": "Por favor, pare a emulação ou feche o emulador antes de abrir outro jogo.", "ru_RU": "Пожалуйста, остановите эмуляцию или закройте эмулятор перед запуском другой игры.", + "sv_SE": "Stoppa emuleringen eller stäng emulatorn innan du startar ett annat spel.", "th_TH": "โปรดหยุดการจำลอง หรือปิดโปรแกรมจำลองก่อนที่จะเปิดเกมอื่น", "tr_TR": "Lütfen yeni bir oyun açmadan önce emülasyonu durdurun veya emülatörü kapatın.", "uk_UA": "Зупиніть емуляцію або закрийте емулятор перед запуском іншої гри.", @@ -13118,6 +13664,7 @@ "pl_PL": "Określony plik nie zawiera aktualizacji dla wybranego tytułu!", "pt_BR": "O arquivo especificado não contém atualizações para o título selecionado!", "ru_RU": "Указанный файл не содержит обновлений для выбранного приложения", + "sv_SE": "Angiven fil innehåller inte en uppdatering för angivet spel!", "th_TH": "ไฟล์ที่ระบุไม่มีการอัพเดตสำหรับชื่อเรื่องที่เลือก!", "tr_TR": "Belirtilen dosya seçilen oyun için güncelleme içermiyor!", "uk_UA": "Зазначений файл не містить оновлення для вибраного заголовка!", @@ -13142,6 +13689,7 @@ "pl_PL": "Ostrzeżenie — Wątki Backend", "pt_BR": "Alerta - Threading da API gráfica", "ru_RU": "Предупреждение: многопоточность в бэкенде", + "sv_SE": "Varning - Backend Threading", "th_TH": "คำเตือน - การทำเธรดแบ็กเอนด์", "tr_TR": "Uyarı - Backend Threading", "uk_UA": "Попередження - потокове керування сервером", @@ -13166,6 +13714,7 @@ "pl_PL": "Ryujinx musi zostać ponownie uruchomiony po zmianie tej opcji, aby działał w pełni. W zależności od platformy może być konieczne ręczne wyłączenie sterownika wielowątkowości podczas korzystania z Ryujinx.", "pt_BR": "Ryujinx precisa ser reiniciado após mudar essa opção para que ela tenha efeito. Dependendo da sua plataforma, pode ser preciso desabilitar o multithreading do driver de vídeo quando usar o Ryujinx.", "ru_RU": "Для применения этой настройки необходимо перезапустить Ryujinx. В зависимости от используемой вами операционной системы вам может потребоваться вручную отключить многопоточность драйвера при использовании Ryujinx.", + "sv_SE": "Ryujinx måste startas om efter att denna inställning ändras för att verkställa den. Beroende på din plattform så kanske du måste manuellt inaktivera drivrutinens egna multithreading när Ryujinx används.", "th_TH": "Ryujinx ต้องรีสตาร์ทหลังจากเปลี่ยนตัวเลือกนี้จึงจะใช้งานได้อย่างสมบูรณ์ คุณอาจต้องปิดการใช้งาน มัลติเธรด ของไดรเวอร์ของคุณด้วยตนเองเมื่อใช้ Ryujinx ทั้งนี้ขึ้นอยู่กับแพลตฟอร์มของคุณ", "tr_TR": "Bu seçeneğin tamamen uygulanması için Ryujinx'in kapatıp açılması gerekir. Kullandığınız işletim sistemine bağlı olarak, Ryujinx'in multithreading'ini kullanırken driver'ınızın multithreading seçeneğini kapatmanız gerekebilir.", "uk_UA": "Ryujinx потрібно перезапустити після зміни цього параметра, щоб він застосовувався повністю. Залежно від вашої платформи вам може знадобитися вручну вимкнути власну багатопотоковість драйвера під час використання Ryujinx.", @@ -13190,6 +13739,7 @@ "pl_PL": "Zamierzasz usunąć modyfikacje: {0}\n\nCzy na pewno chcesz kontynuować?", "pt_BR": "Você está prestes a excluir o mod: {0}\n\nTem certeza de que deseja continuar?", "ru_RU": "Вы сейчас удалите мод: {0}\n\nВы уверены, что хотите продолжить?", + "sv_SE": "Du är på väg att ta bort modden: {0}\n\nÄr du säker på att du vill fortsätta?", "th_TH": "คุณกำลังจะลบ ม็อด: {0}\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?", "tr_TR": "", "uk_UA": "Ви збираєтесь видалити модифікацію: {0}\n\nВи дійсно бажаєте продовжити?", @@ -13214,6 +13764,7 @@ "pl_PL": "Zamierzasz usunąć wszystkie modyfikacje dla wybranego tytułu: {0}\n\nCzy na pewno chcesz kontynuować?", "pt_BR": "Você está prestes a excluir todos os mods para este jogo.\n\nTem certeza de que deseja continuar?", "ru_RU": "Вы сейчас удалите все выбранные моды для этой игры.\n\nВы уверены, что хотите продолжить?", + "sv_SE": "Du är på väg att ta bort alla moddar för detta spel.\n\nÄr du säker på att du vill fortsätta?", "th_TH": "คุณกำลังจะลบม็อดทั้งหมดสำหรับชื่อนี้\n\nคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ?", "tr_TR": "", "uk_UA": "Ви збираєтесь видалити всі модифікації для цього Додатка.\n\nВи дійсно бажаєте продовжити?", @@ -13238,6 +13789,7 @@ "pl_PL": "Funkcje", "pt_BR": "Recursos", "ru_RU": "Функции & Улучшения", + "sv_SE": "Funktioner", "th_TH": "คุณสมบัติ", "tr_TR": "Özellikler", "uk_UA": "Особливості", @@ -13262,6 +13814,7 @@ "pl_PL": "Wielowątkowość Backendu Graficznego:", "pt_BR": "Multithreading da API gráfica:", "ru_RU": "Многопоточность графического бэкенда:", + "sv_SE": "Multithreading för grafikbakände:", "th_TH": "มัลติเธรด กราฟิกเบื้องหลัง:", "tr_TR": "Grafik Backend Multithreading:", "uk_UA": "Багатопотоковість графічного сервера:", @@ -13286,6 +13839,7 @@ "pl_PL": "", "pt_BR": "Automático", "ru_RU": "Автоматически", + "sv_SE": "Automatiskt", "th_TH": "อัตโนมัติ", "tr_TR": "Otomatik", "uk_UA": "Авто", @@ -13310,6 +13864,7 @@ "pl_PL": "Wyłączone", "pt_BR": "Desligado", "ru_RU": "Выключено", + "sv_SE": "Av", "th_TH": "ปิดการใช้งาน", "tr_TR": "Kapalı", "uk_UA": "Вимкнути", @@ -13334,6 +13889,7 @@ "pl_PL": "Włączone", "pt_BR": "Ligado", "ru_RU": "Включено", + "sv_SE": "På", "th_TH": "เปิดใช้งาน", "tr_TR": "Açık", "uk_UA": "Увімкнути", @@ -13358,6 +13914,7 @@ "pl_PL": "Tak", "pt_BR": "Sim", "ru_RU": "Да", + "sv_SE": "Ja", "th_TH": "ใช่", "tr_TR": "Evet", "uk_UA": "Так", @@ -13382,6 +13939,7 @@ "pl_PL": "Nie", "pt_BR": "Não", "ru_RU": "Нет", + "sv_SE": "Nej", "th_TH": "ไม่ใช่", "tr_TR": "Hayır", "uk_UA": "Ні", @@ -13406,6 +13964,7 @@ "pl_PL": "Nazwa pliku zawiera nieprawidłowe znaki. Proszę spróbuj ponownie.", "pt_BR": "O nome do arquivo contém caracteres inválidos. Por favor, tente novamente.", "ru_RU": "Имя файла содержит недопустимые символы. Пожалуйста, попробуйте еще раз.", + "sv_SE": "Filnamnet innehåller ogiltiga tecken. Försök igen.", "th_TH": "ชื่อไฟล์ประกอบด้วยอักขระที่ไม่ถูกต้อง กรุณาลองอีกครั้ง", "tr_TR": "Dosya adı geçersiz karakter içeriyor. Lütfen tekrar deneyin.", "uk_UA": "Ім'я файлу містить неприпустимі символи. Будь ласка, спробуйте ще раз.", @@ -13430,6 +13989,7 @@ "pl_PL": "Pauza", "pt_BR": "Pausar", "ru_RU": "Пауза эмуляции", + "sv_SE": "Paus", "th_TH": "หยุดชั่วคราว", "tr_TR": "Durdur", "uk_UA": "Пауза", @@ -13454,6 +14014,7 @@ "pl_PL": "Wznów", "pt_BR": "Resumir", "ru_RU": "Продолжить", + "sv_SE": "Återuppta", "th_TH": "ดำเนินการต่อ", "tr_TR": "Devam Et", "uk_UA": "Продовжити", @@ -13478,6 +14039,7 @@ "pl_PL": "Kliknij, aby otworzyć stronę Ryujinx w domyślnej przeglądarce.", "pt_BR": "Clique para abrir o site do Ryujinx no seu navegador padrão.", "ru_RU": "Нажмите, чтобы открыть веб-сайт Ryujinx", + "sv_SE": "Klicka för att öppna Ryujinx webbsida i din webbläsare.", "th_TH": "คลิกเพื่อเปิดเว็บไซต์ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", "tr_TR": "Ryujinx'in websitesini varsayılan tarayıcınızda açmak için tıklayın.", "uk_UA": "Натисніть, щоб відкрити сайт Ryujinx у браузері за замовчування.", @@ -13502,6 +14064,7 @@ "pl_PL": "Ryujinx nie jest w żaden sposób powiązany z Nintendo™,\nani z żadnym z jej partnerów.", "pt_BR": "Ryujinx não é afiliado com a Nintendo™,\nou qualquer um de seus parceiros, de nenhum modo.", "ru_RU": "Ryujinx никоим образом не связан ни с Nintendo™, ни с кем-либо из ее партнеров.", + "sv_SE": "Ryujinx har ingen koppling till Nintendo™,\neller någon av dess samarbetspartners.", "th_TH": "ทางผู้พัฒนาโปรแกรม Ryujinx ไม่มีส่วนเกี่ยวข้องกับทางบริษัท Nintendo™\nหรือพันธมิตรใดๆ ทั้งสิ้น!", "tr_TR": "Ryujinx, Nintendo™ veya ortaklarıyla herhangi bir şekilde bağlantılı değildir.", "uk_UA": "Ryujinx жодним чином не пов’язаний з Nintendo™,\nчи будь-яким із їхніх партнерів.", @@ -13526,6 +14089,7 @@ "pl_PL": "AmiiboAPI (www.amiiboapi.com) jest używane\nw naszej emulacji Amiibo.", "pt_BR": "AmiiboAPI (www.amiiboapi.com) é usado\nem nossa emulação de Amiibo.", "ru_RU": "Amiibo API (www.amiiboapi.com) используется для эмуляции Amiibo.", + "sv_SE": "AmiiboAPI (www.amiiboapi.com) används\ni vår Amiibo-emulation.", "th_TH": "AmiiboAPI (www.amiiboapi.com) ถูกใช้\nในการจำลอง อะมิโบ ของเรา", "tr_TR": "Amiibo emülasyonumuzda \nAmiiboAPI (www.amiiboapi.com) kullanılmaktadır.", "uk_UA": "AmiiboAPI (www.amiiboapi.com) використовується в нашій емуляції Amiibo.", @@ -13550,6 +14114,7 @@ "pl_PL": "Kliknij, aby otworzyć stronę GitHub Ryujinx w domyślnej przeglądarce.", "pt_BR": "Clique para abrir a página do GitHub do Ryujinx no seu navegador padrão.", "ru_RU": "Нажмите, чтобы открыть страницу Ryujinx на GitHub", + "sv_SE": "Klicka för att öppna Ryujinx GitHub-sida i din webbläsare.", "th_TH": "คลิกเพื่อเปิดหน้า Github ของ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", "tr_TR": "Ryujinx'in GitHub sayfasını varsayılan tarayıcınızda açmak için tıklayın.", "uk_UA": "Натисніть, щоб відкрити сторінку GitHub Ryujinx у браузері за замовчуванням.", @@ -13574,6 +14139,7 @@ "pl_PL": "Kliknij, aby otworzyć zaproszenie na serwer Discord Ryujinx w domyślnej przeglądarce.", "pt_BR": "Clique para abrir um convite ao servidor do Discord do Ryujinx no seu navegador padrão.", "ru_RU": "Нажмите, чтобы открыть приглашение на сервер Ryujinx в Discord", + "sv_SE": "Klicka för att öppna en inbjudan till Ryujinx Discord-server i din webbläsare.", "th_TH": "คลิกเพื่อเปิดคำเชิญเข้าสู่เซิร์ฟเวอร์ Discord ของ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", "tr_TR": "Varsayılan tarayıcınızda Ryujinx'in Discord'una bir davet açmak için tıklayın.", "uk_UA": "Натисніть, щоб відкрити запрошення на сервер Discord Ryujinx у браузері за замовчуванням.", @@ -13598,6 +14164,7 @@ "pl_PL": "O Aplikacji:", "pt_BR": "Sobre:", "ru_RU": "О программе:", + "sv_SE": "Om:", "th_TH": "เกี่ยวกับ:", "tr_TR": "Hakkında:", "uk_UA": "Про програму:", @@ -13622,6 +14189,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Ryujinx är en emulator för Nintendo Switch™.\nFå de senaste nyheterna via vår Discord.\nUtvecklare som är intresserade att bidra kan hitta mer info på vår GitHub eller Discord.", "th_TH": "", "tr_TR": "", "uk_UA": "Ryujinx — це емулятор для Nintendo Switch™.\nОтримуйте всі останні новини в нашому Discord.\nРозробники, які хочуть зробити внесок, можуть дізнатися більше на нашому GitHub або в Discord.", @@ -13646,6 +14214,7 @@ "pl_PL": "Utrzymywany Przez:", "pt_BR": "Mantido por:", "ru_RU": "Разработка:", + "sv_SE": "Underhålls av:", "th_TH": "ได้รับการดูแลโดย:", "tr_TR": "Geliştiriciler:", "uk_UA": "Підтримується:", @@ -13670,6 +14239,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Underhölls tidigare av:", "th_TH": "", "tr_TR": "", "uk_UA": "Минулі розробники:", @@ -13694,6 +14264,7 @@ "pl_PL": "Kliknij, aby otworzyć stronę Współtwórcy w domyślnej przeglądarce.", "pt_BR": "Clique para abrir a página de contribuidores no seu navegador padrão.", "ru_RU": "Нажмите, чтобы открыть страницу с участниками", + "sv_SE": "Klicka för att öppna sidan över personer som bidragit till projektet i din webbläsare.", "th_TH": "คลิกเพื่อเปิดหน้าผู้มีส่วนร่วมบนเบราว์เซอร์เริ่มต้นของคุณ", "tr_TR": "Katkıda bulunanlar sayfasını varsayılan tarayıcınızda açmak için tıklayın.", "uk_UA": "Натисніть, щоб відкрити сторінку співавторів у вашому браузері за замовчування.", @@ -13718,6 +14289,7 @@ "pl_PL": "Seria Amiibo", "pt_BR": "Franquia Amiibo", "ru_RU": "Серия Amiibo", + "sv_SE": "Amiibo Series", "th_TH": "", "tr_TR": "Amiibo Serisi", "uk_UA": "Серія Amiibo", @@ -13742,6 +14314,7 @@ "pl_PL": "Postać", "pt_BR": "Personagem", "ru_RU": "Персонаж", + "sv_SE": "Karaktär", "th_TH": "ตัวละคร", "tr_TR": "Karakter", "uk_UA": "Персонаж", @@ -13766,6 +14339,7 @@ "pl_PL": "Zeskanuj", "pt_BR": "Escanear", "ru_RU": "Сканировать", + "sv_SE": "Skanna den", "th_TH": "สแกนเลย", "tr_TR": "Tarat", "uk_UA": "Сканувати", @@ -13790,6 +14364,7 @@ "pl_PL": "Pokaż Wszystkie Amiibo", "pt_BR": "Exibir todos os Amiibos", "ru_RU": "Показать все Amiibo", + "sv_SE": "Visa alla Amiibo", "th_TH": "แสดง Amiibo ทั้งหมด", "tr_TR": "Tüm Amiibo'ları Göster", "uk_UA": "Показати всі Amiibo", @@ -13814,6 +14389,7 @@ "pl_PL": "Hack: Użyj losowego UUID tagu", "pt_BR": "Hack: Usar Uuid de tag aleatório", "ru_RU": "Хак: Использовать случайный тег Uuid", + "sv_SE": "Hack: Använd slumpmässig tagg för Uuid", "th_TH": "แฮ็ค: สุ่มแท็ก Uuid", "tr_TR": "Hack: Rastgele bir Uuid kullan", "uk_UA": "Хитрість: Використовувати випадковий тег Uuid", @@ -13838,6 +14414,7 @@ "pl_PL": "Włączone", "pt_BR": "Habilitado", "ru_RU": "Включено", + "sv_SE": "Aktiverad", "th_TH": "เปิดใช้งานแล้ว", "tr_TR": "Etkin", "uk_UA": "Увімкнено", @@ -13862,6 +14439,7 @@ "pl_PL": "ID Tytułu", "pt_BR": "ID do título", "ru_RU": "ID приложения", + "sv_SE": "Titel-ID", "th_TH": "ชื่อไอดี", "tr_TR": "Başlık ID", "uk_UA": "ID заголовка", @@ -13886,6 +14464,7 @@ "pl_PL": "Ścieżka Kontenera", "pt_BR": "Caminho do container", "ru_RU": "Путь к контейнеру", + "sv_SE": "Container-sökväg", "th_TH": "คอนเทนเนอร์เก็บไฟล์", "tr_TR": "Container Yol", "uk_UA": "Шлях до контейнеру", @@ -13910,6 +14489,7 @@ "pl_PL": "Pełna Ścieżka", "pt_BR": "Caminho completo", "ru_RU": "Полный путь", + "sv_SE": "Fullständig sökväg", "th_TH": "ที่เก็บไฟล์แบบเต็ม", "tr_TR": "Tam Yol", "uk_UA": "Повний шлях", @@ -13934,6 +14514,7 @@ "pl_PL": "Usuń Wszystkie", "pt_BR": "Remover todos", "ru_RU": "Удалить все", + "sv_SE": "Ta bort allt", "th_TH": "ลบทั้งหมด", "tr_TR": "Tümünü kaldır", "uk_UA": "Видалити все", @@ -13958,6 +14539,7 @@ "pl_PL": "Włącz Wszystkie", "pt_BR": "Habilitar todos", "ru_RU": "Включить все", + "sv_SE": "Aktivera allt", "th_TH": "เปิดใช้งานทั้งหมด", "tr_TR": "Tümünü Aktif Et", "uk_UA": "Увімкнути всі", @@ -13982,6 +14564,7 @@ "pl_PL": "Wyłącz Wszystkie", "pt_BR": "Desabilitar todos", "ru_RU": "Отключить все", + "sv_SE": "Inaktivera allt", "th_TH": "ปิดใช้งานทั้งหมด", "tr_TR": "Tümünü Devre Dışı Bırak", "uk_UA": "Вимкнути всі", @@ -14006,6 +14589,7 @@ "pl_PL": "Usuń wszystko", "pt_BR": "Apagar Tudo", "ru_RU": "Удалить все", + "sv_SE": "Ta bort allt", "th_TH": "ลบทั้งหมด", "tr_TR": "Hepsini Sil", "uk_UA": "Видалити все", @@ -14030,6 +14614,7 @@ "pl_PL": "Zmień język", "pt_BR": "Mudar idioma", "ru_RU": "Сменить язык", + "sv_SE": "Byt språk", "th_TH": "เปลี่ยนภาษา", "tr_TR": "Dili Değiştir", "uk_UA": "Змінити мову", @@ -14054,6 +14639,7 @@ "pl_PL": "Pokaż typy plików", "pt_BR": "Mostrar tipos de arquivo", "ru_RU": "Показывать форматы файлов", + "sv_SE": "Visa filtyper", "th_TH": "แสดงประเภทของไฟล์", "tr_TR": "Dosya Uzantılarını Göster", "uk_UA": "Показати типи файлів", @@ -14078,6 +14664,7 @@ "pl_PL": "Sortuj", "pt_BR": "Ordenar", "ru_RU": "Сортировка", + "sv_SE": "Sortera", "th_TH": "เรียงลำดับ", "tr_TR": "Sırala", "uk_UA": "Сортувати", @@ -14102,6 +14689,7 @@ "pl_PL": "Pokaż Nazwy", "pt_BR": "Exibir nomes", "ru_RU": "Показывать названия", + "sv_SE": "Visa namn", "th_TH": "แสดงชื่อ", "tr_TR": "İsimleri Göster", "uk_UA": "Показати назви", @@ -14126,6 +14714,7 @@ "pl_PL": "Ulubione", "pt_BR": "Favorito", "ru_RU": "Избранное", + "sv_SE": "Favorit", "th_TH": "สิ่งที่ชื่นชอบ", "tr_TR": "Favori", "uk_UA": "Вибрані", @@ -14150,6 +14739,7 @@ "pl_PL": "Rosnąco", "pt_BR": "Ascendente", "ru_RU": "По возрастанию", + "sv_SE": "Stigande", "th_TH": "จากน้อยไปมาก", "tr_TR": "Artan", "uk_UA": "За зростанням", @@ -14174,6 +14764,7 @@ "pl_PL": "Malejąco", "pt_BR": "Descendente", "ru_RU": "По убыванию", + "sv_SE": "Fallande", "th_TH": "จากมากไปน้อย", "tr_TR": "Azalan", "uk_UA": "За спаданням", @@ -14198,6 +14789,7 @@ "pl_PL": "Funkcje i Ulepszenia", "pt_BR": "Recursos & Melhorias", "ru_RU": "Функции", + "sv_SE": "Funktioner och förbättringar", "th_TH": "คุณสมบัติ และ การเพิ่มประสิทธิภาพ", "tr_TR": "Özellikler & İyileştirmeler", "uk_UA": "Функції та вдосконалення", @@ -14222,6 +14814,7 @@ "pl_PL": "Okno Błędu", "pt_BR": "Janela de erro", "ru_RU": "Окно ошибки", + "sv_SE": "Felfönster", "th_TH": "หน้าต่างแสดงข้อผิดพลาด", "tr_TR": "Hata Penceresi", "uk_UA": "Вікно помилок", @@ -14246,6 +14839,7 @@ "pl_PL": "Wybierz, czy chcesz wyświetlać Ryujinx w swojej \"aktualnie grane\" aktywności Discord", "pt_BR": "Habilita ou desabilita Discord Rich Presence", "ru_RU": "Включает или отключает отображение статуса \"Играет в игру\" в Discord", + "sv_SE": "Välj huruvida Ryujinx ska visas på din \"spelar för tillfället\" Discord-aktivitet", "th_TH": "เลือกว่าจะแสดง Ryujinx ในกิจกรรม Discord \"ที่กำลังเล่นอยู่\" ของคุณหรือไม่?", "tr_TR": "Ryujinx'i \"şimdi oynanıyor\" Discord aktivitesinde göstermeyi veya göstermemeyi seçin", "uk_UA": "Виберіть, чи відображати Ryujinx у вашій «поточній грі» в Discord", @@ -14270,6 +14864,7 @@ "pl_PL": "Wprowadź katalog gier aby dodać go do listy", "pt_BR": "Escreva um diretório de jogo para adicionar à lista", "ru_RU": "Введите путь к папке с играми для добавления ее в список выше", + "sv_SE": "Ange en spelkatalog att lägga till i listan", "th_TH": "ป้อนไดเรกทอรี่เกมที่จะทำการเพิ่มลงในรายการ", "tr_TR": "Listeye eklemek için oyun dizini seçin", "uk_UA": "Введіть каталог ігор, щоб додати до списку", @@ -14294,6 +14889,7 @@ "pl_PL": "Dodaj katalog gier do listy", "pt_BR": "Adicionar um diretório de jogo à lista", "ru_RU": "Добавить папку с играми в список", + "sv_SE": "Lägg till en spelkatalog till listan", "th_TH": "เพิ่มไดเรกทอรี่เกมลงในรายการ", "tr_TR": "Listeye oyun dizini ekle", "uk_UA": "Додати каталог гри до списку", @@ -14318,6 +14914,7 @@ "pl_PL": "Usuń wybrany katalog gier", "pt_BR": "Remover diretório de jogo selecionado", "ru_RU": "Удалить выбранную папку игры", + "sv_SE": "Ta bort vald spelkatalog", "th_TH": "ลบไดเรกทอรี่เกมที่เลือก", "tr_TR": "Seçili oyun dizinini kaldır", "uk_UA": "Видалити вибраний каталог гри", @@ -14342,6 +14939,7 @@ "pl_PL": "", "pt_BR": "Insira um diretório de carregamento automático para adicionar à lista", "ru_RU": "", + "sv_SE": "Ange en katalog att automatiskt läsa in till listan", "th_TH": "ป้อนไดเร็กทอรีสำหรับโหลดอัตโนมัติเพื่อเพิ่มลงในรายการ", "tr_TR": "", "uk_UA": "Введіть шлях автозавантаження для додавання до списку", @@ -14366,6 +14964,7 @@ "pl_PL": "", "pt_BR": "Adicionar um diretório de carregamento automático à lista", "ru_RU": "", + "sv_SE": "Lägg till en katalog att automatiskt läsa in till listan", "th_TH": "ป้อนไดเร็กทอรีสำหรับโหลดอัตโนมัติเพื่อเพิ่มลงในรายการ", "tr_TR": "", "uk_UA": "Додайте шлях автозавантаження для додавання до списку", @@ -14390,6 +14989,7 @@ "pl_PL": "", "pt_BR": "Remover o diretório de carregamento automático selecionado", "ru_RU": "", + "sv_SE": "Ta bort markerad katalog för automatisk inläsning", "th_TH": "ลบไดเรกทอรีสำหรับโหลดอัตโนมัติที่เลือก", "tr_TR": "", "uk_UA": "Видалити вибраний каталог автозавантаження", @@ -14414,6 +15014,7 @@ "pl_PL": "Użyj niestandardowego motywu Avalonia dla GUI, aby zmienić wygląd menu emulatora", "pt_BR": "Habilita ou desabilita temas customizados na interface gráfica", "ru_RU": "Включить или отключить пользовательские темы", + "sv_SE": "Använd ett anpassat Avalonia-tema för gränssnittet för att ändra utseendet i emulatormenyerna", "th_TH": "ใช้ธีม Avalonia แบบกำหนดเองสำหรับ GUI เพื่อเปลี่ยนรูปลักษณ์ของเมนูโปรแกรมจำลอง", "tr_TR": "Emülatör pencerelerinin görünümünü değiştirmek için özel bir Avalonia teması kullan", "uk_UA": "Використовуйте користувацьку тему Avalonia для графічного інтерфейсу, щоб змінити вигляд меню емулятора", @@ -14438,6 +15039,7 @@ "pl_PL": "Ścieżka do niestandardowego motywu GUI", "pt_BR": "Diretório do tema customizado", "ru_RU": "Путь к пользовательской теме для интерфейса", + "sv_SE": "Sökväg till anpassat gränssnittstema", "th_TH": "ไปยังที่เก็บไฟล์ธีม GUI แบบกำหนดเอง", "tr_TR": "Özel arayüz temasının yolu", "uk_UA": "Шлях до користувацької теми графічного інтерфейсу", @@ -14462,6 +15064,7 @@ "pl_PL": "Wyszukaj niestandardowy motyw GUI", "pt_BR": "Navegar até um tema customizado", "ru_RU": "Просмотр пользовательской темы интерфейса", + "sv_SE": "Bläddra efter ett anpassat gränssnittstema", "th_TH": "เรียกดูธีม GUI ที่กำหนดเอง", "tr_TR": "Özel arayüz teması için göz at", "uk_UA": "Огляд користувацької теми графічного інтерфейсу", @@ -14486,6 +15089,7 @@ "pl_PL": "Tryb Zadokowany sprawia, że emulowany system zachowuje się jak zadokowany Nintendo Switch. Poprawia to jakość grafiki w większości gier. I odwrotnie, wyłączenie tej opcji sprawi, że emulowany system będzie zachowywał się jak przenośny Nintendo Switch, zmniejszając jakość grafiki.\n\nSkonfiguruj sterowanie gracza 1, jeśli planujesz używać trybu Zadokowanego; Skonfiguruj sterowanie przenośne, jeśli planujesz używać trybu przenośnego.\n\nPozostaw WŁĄCZONY, jeśli nie masz pewności.", "pt_BR": "O modo TV faz o sistema emulado se comportar como um Nintendo Switch na TV, o que melhora a fidelidade gráfica na maioria dos jogos. Por outro lado, desativar essa opção fará o sistema emulado se comportar como um Nintendo Switch portátil, reduzindo a qualidade gráfica.\n\nConfigure os controles do jogador 1 se planeja usar o modo TV; configure os controles de portátil se planeja usar o modo Portátil.\n\nMantenha ativado se estiver em dúvida.", "ru_RU": "\"Стационарный\" режим запускает эмулятор, как если бы Nintendo Switch находилась в доке, что улучшает графику и разрешение в большинстве игр. И наоборот, при отключении этого режима эмулятор будет запускать игры в \"Портативном\" режиме, снижая качество графики.\n\nНастройте управление для Игрока 1 если планируете использовать в \"Стационарном\" режиме; настройте портативное управление если планируете использовать эмулятор в \"Портативном\" режиме.\n\nРекомендуется оставить включенным.", + "sv_SE": "Dockat läge gör att det emulerade systemet beter sig som en dockad Nintendo Switch. Detta förbättrar grafiken i de flesta spel. Inaktiveras detta så kommer det emulerade systemet att bete sig som en handhållen Nintendo Switch, vilket reducerar grafikkvaliteten.\n\nKonfigurera kontrollen för Spelare 1 om du planerar att använda dockat läge; konfigurera handhållna kontroller om du planerar att använda handhållet läge.\n\nLämna PÅ om du är osäker.", "th_TH": "ด็อกโหมด ทำให้ระบบจำลองการทำงานเสมือน Nintendo ที่กำลังเชื่อมต่ออยู่ด็อก สิ่งนี้จะปรับปรุงความเสถียรภาพของกราฟิกในเกมส่วนใหญ่ ในทางกลับกัน การปิดใช้จะทำให้ระบบจำลองทำงานเหมือนกับ Nintendo Switch แบบพกพา ส่งผลให้คุณภาพกราฟิกลดลง\n\nแนะนำกำหนดค่าควบคุมของผู้เล่น 1 หากวางแผนที่จะใช้ด็อกโหมด กำหนดค่าการควบคุมแบบ แฮนด์เฮลด์ หากวางแผนที่จะใช้โหมดแฮนด์เฮลด์\n\nเปิดทิ้งไว้หากคุณไม่แน่ใจ", "tr_TR": "Docked modu emüle edilen sistemin yerleşik Nintendo Switch gibi davranmasını sağlar. Bu çoğu oyunda grafik kalitesini arttırır. Diğer yandan, bu seçeneği devre dışı bırakmak emüle edilen sistemin portatif Ninendo Switch gibi davranmasını sağlayıp grafik kalitesini düşürür.\n\nDocked modu kullanmayı düşünüyorsanız 1. Oyuncu kontrollerini; Handheld modunu kullanmak istiyorsanız portatif kontrollerini konfigüre edin.\n\nEmin değilseniz aktif halde bırakın.", "uk_UA": "У режимі док-станції емульована система веде себе як приєднаний Nintendo Switch. Це покращує точність графіки в більшості ігор. І навпаки, вимкнення цього призведе до того, що емульована система поводитиметься як портативний комутатор Nintendo, погіршуючи якість графіки.\n\nНалаштуйте елементи керування для гравця 1, якщо плануєте використовувати режим док-станції; налаштуйте ручні елементи керування, якщо плануєте використовувати портативний режим.\n\nЗалиште увімкненим, якщо не впевнені.", @@ -14510,6 +15114,7 @@ "pl_PL": "Obsługa bezpośredniego dostępu do klawiatury (HID). Zapewnia dostęp gier do klawiatury jako urządzenia do wprowadzania tekstu.\n\nDziała tylko z grami, które natywnie wspierają użycie klawiatury w urządzeniu Switch hardware.\n\nPozostaw wyłączone w razie braku pewności.", "pt_BR": "Suporte para acesso direto ao teclado (HID). Permite que os jogos acessem seu teclado como um dispositivo de entrada de texto.\n\nFunciona apenas com jogos que suportam o uso de teclado nativamente no hardware do Switch.\n\nDeixe desativado se estiver em dúvida.", "ru_RU": "Поддержка прямого ввода с клавиатуры (HID). Предоставляет игре прямой доступ к клавиатуре в качестве устройства ввода текста.\nРаботает только с играми, которые изначально поддерживают использование клавиатуры с Switch.\nРекомендуется оставить выключенным.", + "sv_SE": "Stöd för direkt tangentbordsåtkomst (HID). Ger spel åtkomst till ditt tangentbord som en textinmatningsenhet.\n\nFungerar endast med spel som har inbyggt stöd för tangentbordsanvändning på Switch-hårdvara.\n\nLämna AV om du är osäker.", "th_TH": "รองรับการเข้าถึงแป้นพิมพ์โดยตรง (HID) ให้เกมเข้าถึงคีย์บอร์ดของคุณเป็นอุปกรณ์ป้อนข้อความ\n\nใช้งานได้กับเกมที่รองรับการใช้งานคีย์บอร์ดบนฮาร์ดแวร์ของ Switch เท่านั้น\n\nหากคุณไม่แน่ใจให้ปิดใช้งานไว้", "tr_TR": "", "uk_UA": "Підтримка прямого доступу до клавіатури (HID). Надає іграм доступ до клавіатури для вводу тексту.\n\nПрацює тільки з іграми, які підтримують клавіатуру на обладнанні Switch.\n\nЗалиште вимкненим, якщо не впевнені.", @@ -14534,6 +15139,7 @@ "pl_PL": "Obsługa bezpośredniego dostępu do myszy (HID). Zapewnia dostęp gier do myszy jako urządzenia wskazującego.\n\nDziała tylko z grami, które natywnie obsługują przyciski myszy w urządzeniu Switch, które są nieliczne i daleko między nimi.\n\nPo włączeniu funkcja ekranu dotykowego może nie działać.\n\nPozostaw wyłączone w razie wątpliwości.", "pt_BR": "Suporte para acesso direto ao mouse (HID). Permite que os jogos acessem seu mouse como um dispositivo de apontamento.\n\nFunciona apenas com jogos que suportam controles de mouse nativamente no hardware do Switch, o que é raro.\n\nQuando ativado, a funcionalidade de tela sensível ao toque pode não funcionar.\n\nDeixe desativado se estiver em dúvida.", "ru_RU": "Поддержка прямого ввода мыши (HID). Предоставляет игре прямой доступ к мыши в качестве указывающего устройства.\nРаботает только с играми, которые изначально поддерживают использование мыши совместно с железом Switch.\nРекомендуется оставить выключенным.", + "sv_SE": "Stöd för direkt musåtkomst (HID). Ger spel åtkomst till din mus som pekdon.\n\nFungerar endast med spel som har inbyggt stöd för muskontroller på Switch-hårdvara, som är endast ett fåtal.\n\nViss pekskärmsfunktionalitet kanske inte fungerar när aktiverat.\n\nLämna AV om du är osäker.", "th_TH": "รองรับการเข้าถึงเมาส์โดยตรง (HID) ให้เกมเข้าถึงเมาส์ของคุณเป็นอุปกรณ์ชี้ตำแหน่ง\n\nใช้งานได้เฉพาะกับเกมที่รองรับการควบคุมเมาส์บนฮาร์ดแวร์ของ Switch เท่านั้น ซึ่งมีอยู่ไม่มากนัก\n\nเมื่อเปิดใช้งาน ฟังก์ชั่นหน้าจอสัมผัสอาจไม่ทำงาน\n\nหากคุณไม่แน่ใจให้ปิดใช้งานไว้", "tr_TR": "", "uk_UA": "Підтримка прямого доступу до миші (HID). Надає іграм доступ до миші, як пристрій вказування.\n\nПрацює тільки з іграми, які підтримують мишу на обладнанні Switch, їх небагато.\n\nФункціонал сенсорного екрана може не працювати, якщо функція ввімкнена.\n\nЗалиште вимкненим, якщо не впевнені.", @@ -14558,6 +15164,7 @@ "pl_PL": "Zmień Region Systemu", "pt_BR": "Mudar a região do sistema", "ru_RU": "Сменяет регион прошивки", + "sv_SE": "Ändra systemets region", "th_TH": "เปลี่ยนภูมิภาคของระบบ", "tr_TR": "Sistem Bölgesini Değiştir", "uk_UA": "Змінити регіон системи", @@ -14582,6 +15189,7 @@ "pl_PL": "Zmień język systemu", "pt_BR": "Mudar o idioma do sistema", "ru_RU": "Меняет язык прошивки", + "sv_SE": "Ändra systemets språk", "th_TH": "เปลี่ยนภาษาของระบบ", "tr_TR": "Sistem Dilini Değiştir", "uk_UA": "Змінити мову системи", @@ -14606,6 +15214,7 @@ "pl_PL": "Zmień Strefę Czasową Systemu", "pt_BR": "Mudar o fuso-horário do sistema", "ru_RU": "Меняет часовой пояс прошивки", + "sv_SE": "Ändra systemets tidszon", "th_TH": "เปลี่ยนโซนเวลาของระบบ", "tr_TR": "Sistem Saat Dilimini Değiştir", "uk_UA": "Змінити часовий пояс системи", @@ -14630,6 +15239,7 @@ "pl_PL": "Zmień czas systemowy", "pt_BR": "Mudar a hora do sistema", "ru_RU": "Меняет системное время прошивки", + "sv_SE": "Ändra systemtid", "th_TH": "เปลี่ยนเวลาของระบบ", "tr_TR": "Sistem Saatini Değiştir", "uk_UA": "Змінити час системи", @@ -14654,6 +15264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Återsynkronisera systemtiden för att matcha din dators aktuella datum och tid.\n\nDetta är inte en aktiv inställning och den kan tappa synken och om det händer så kan du klicka på denna knapp igen.", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -14678,6 +15289,7 @@ "pl_PL": "Synchronizacja pionowa emulowanej konsoli. Zasadniczo ogranicznik klatek dla większości gier; wyłączenie jej może spowodować, że gry będą działać z większą szybkością, ekrany wczytywania wydłużą się lub nawet utkną.\n\nMoże być przełączana w grze za pomocą preferowanego skrótu klawiszowego. Zalecamy to zrobić, jeśli planujesz ją wyłączyć.\n\nW razie wątpliwości pozostaw WŁĄCZONĄ.", "pt_BR": "V-Sync do console emulado. Funciona essencialmente como um limitador de quadros para a maioria dos jogos; desativá-lo pode fazer com que os jogos rodem em uma velocidade mais alta ou que telas de carregamento demorem mais ou travem.\n\nPode ser alternado durante o jogo com uma tecla de atalho de sua preferência (F1 por padrão). Recomendamos isso caso planeje desativá-lo.\n\nMantenha ligado se estiver em dúvida.", "ru_RU": "Эмуляция вертикальной синхронизации консоли, которая ограничивает количество кадров в секунду в большинстве игр; отключение может привести к тому, что игры будут запущены с более высокой частотой кадров, но загрузка игры может занять больше времени, либо игра не запустится вообще.\n\nМожно включать и выключать эту настройку непосредственно в игре с помощью горячих клавиш (F1 по умолчанию). Если планируете отключить вертикальную синхронизацию, рекомендуем настроить горячие клавиши.\n\nРекомендуется оставить включенным.", + "sv_SE": "Emulerade konsollens vertikala synk. I grund och botten en begränsare för bitrutor för de flesta spel; inaktivera den kan orsaka att spel kör på en högre hastighet eller gör att skärmar tar längre tid att läsa eller fastnar i dem.\n\nKan växlas inne i spelet med en snabbtangent som du väljer (F1 som standard). Vi rekommenderar att göra detta om du planerar att inaktivera den.\n\nLämna PÅ om du är osäker.", "th_TH": "Vertical Sync ของคอนโซลจำลอง โดยพื้นฐานแล้วเป็นตัวจำกัดเฟรมสำหรับเกมส่วนใหญ่ การปิดใช้งานอาจทำให้เกมทำงานด้วยความเร็วสูงขึ้น หรือทำให้หน้าจอการโหลดใช้เวลานานขึ้นหรือค้าง\n\nสามารถสลับได้ในเกมด้วยปุ่มลัดตามที่คุณต้องการ (F1 เป็นค่าเริ่มต้น) เราขอแนะนำให้ทำเช่นนี้หากคุณวางแผนที่จะปิดการใช้งาน\n\nเปิดทิ้งไว้หากคุณไม่แน่ใจ", "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація консолі. По суті, обмежувач кадрів для більшості ігор; його вимкнення може призвести до того, що ігри працюватимуть на вищій швидкості, екрани завантаження триватимуть довше чи зупинятимуться.\n\nМожна перемикати в грі гарячою клавішею (За умовчанням F1). Якщо ви плануєте вимкнути функцію, рекомендуємо зробити це через гарячу клавішу.\n\nЗалиште увімкненим, якщо не впевнені.", @@ -14702,6 +15314,7 @@ "pl_PL": "Zapisuje przetłumaczone funkcje JIT, dzięki czemu nie muszą być tłumaczone za każdym razem, gdy gra się ładuje.\n\nZmniejsza zacinanie się i znacznie przyspiesza uruchamianie po pierwszym uruchomieniu gry.\n\nJeśli nie masz pewności, pozostaw WŁĄCZONE", "pt_BR": "Habilita ou desabilita PPTC", "ru_RU": "Сохраняет скомпилированные JIT-функции для того, чтобы не преобразовывать их по новой каждый раз при запуске игры.\n\nУменьшает статтеры и значительно ускоряет последующую загрузку игр.\n\nРекомендуется оставить включенным.", + "sv_SE": "Sparar översatta JIT-funktioner så att de inte behöver översättas varje gång som spelet läses in.\n\nMinskar stuttering och snabbare på uppstartstiden väsentligt efter första uppstarten av ett spel.\n\nLämna PÅ om du är osäker.", "th_TH": "บันทึกฟังก์ชั่น JIT ที่แปลแล้ว ดังนั้นจึงไม่จำเป็นต้องแปลทุกครั้งที่โหลดเกม\n\nลดอาการกระตุกและเร่งความเร็วการบูตได้อย่างมากหลังจากการบูตครั้งแรกของเกม\n\nเปิดทิ้งไว้หากคุณไม่แน่ใจ", "tr_TR": "Çevrilen JIT fonksiyonlarını oyun her açıldığında çevrilmek zorunda kalmaması için kaydeder.\n\nTeklemeyi azaltır ve ilk açılıştan sonra oyunların ilk açılış süresini ciddi biçimde hızlandırır.\n\nEmin değilseniz aktif halde bırakın.", "uk_UA": "Зберігає перекладені функції JIT, щоб їх не потрібно було перекладати кожного разу, коли гра завантажується.\n\nЗменшує заїкання та значно прискорює час завантаження після першого завантаження гри.\n\nЗалиште увімкненим, якщо не впевнені.", @@ -14726,6 +15339,7 @@ "pl_PL": "", "pt_BR": "Carregar o PPTC usando um terço da quantidade de núcleos.", "ru_RU": "", + "sv_SE": "Läs in PPTC med en tredjedel av mängden kärnor.", "th_TH": "โหลด PPTC โดยใช้หนึ่งในสามของจำนวนคอร์", "tr_TR": "", "uk_UA": "Завантажувати PPTC використовуючи третину від кількості ядер.", @@ -14750,6 +15364,7 @@ "pl_PL": "Sprawdza pliki podczas uruchamiania gry i jeśli zostaną wykryte uszkodzone pliki, wyświetla w dzienniku błąd hash.\n\nNie ma wpływu na wydajność i ma pomóc w rozwiązywaniu problemów.\n\nPozostaw WŁĄCZONE, jeśli nie masz pewności.", "pt_BR": "Habilita ou desabilita verificação de integridade dos arquivos do jogo", "ru_RU": "Проверяет файлы при загрузке игры и если обнаружены поврежденные файлы, выводит сообщение о поврежденном хэше в журнале.\n\nНе влияет на производительность и необходим для помощи в устранении неполадок.\n\nРекомендуется оставить включенным.", + "sv_SE": "Letar efter skadade filer när ett spel startas upp, och om skadade filer hittas, visas ett kontrollsummefel i loggen.\n\nHar ingen påverkan på prestandan och är tänkt att hjälpa felsökningen.\n\nLämna PÅ om du är osäker.", "th_TH": "ตรวจสอบไฟล์ที่เสียหายเมื่อบูตเกม และหากตรวจพบไฟล์ที่เสียหาย จะแสดงข้อผิดพลาดของแฮชในบันทึก\n\nไม่มีผลกระทบต่อประสิทธิภาพการทำงานและมีไว้เพื่อช่วยในการแก้ไขปัญหา\n\nเปิดทิ้งไว้หากคุณไม่แน่ใจ", "tr_TR": "Oyun açarken hatalı dosyaların olup olmadığını kontrol eder, ve hatalı dosya bulursa log dosyasında hash hatası görüntüler.\n\nPerformansa herhangi bir etkisi yoktur ve sorun gidermeye yardımcı olur.\n\nEmin değilseniz aktif halde bırakın.", "uk_UA": "Перевіряє наявність пошкоджених файлів під час завантаження гри, і якщо виявлено пошкоджені файли, показує помилку хешу в журналі.\n\nНе впливає на продуктивність і призначений для усунення несправностей.\n\nЗалиште увімкненим, якщо не впевнені.", @@ -14774,6 +15389,7 @@ "pl_PL": "Zmienia backend używany do renderowania dźwięku.\n\nSDL2 jest preferowany, podczas gdy OpenAL i SoundIO są używane jako rezerwy. Dummy nie będzie odtwarzać dźwięku.\n\nW razie wątpliwości ustaw SDL2.", "pt_BR": "Mudar biblioteca de áudio", "ru_RU": "Изменяет используемый аудио бэкенд для рендера звука.\n\nSDL2 является предпочтительным вариантом, в то время как OpenAL и SoundIO используются в качестве резервных.\n\nРекомендуется использование SDL2.", + "sv_SE": "Ändrar bakänden som används för att rendera ljud.\n\nSDL2 är den föredragna, men OpenAL och SoundIO används för att falla tillbaka på. Dummy har inget ljud.\n\nStäll in till SDL2 om du är osäker.", "th_TH": "เปลี่ยนแบ็กเอนด์ที่ใช้ในการเรนเดอร์เสียง\n\nแนะนำเป็น SDL2 ในขณะที่ OpenAL และ SoundIO ถูกใช้เป็นทางเลือกสำรอง ดัมมี่จะไม่มีเสียง\n\nตั้งค่าเป็น SDL2 หากคุณไม่แน่ใจ", "tr_TR": "Ses çıkış motorunu değiştirir.\n\nSDL2 tercih edilen seçenektir, OpenAL ve SoundIO ise alternatif olarak kullanılabilir. Dummy seçeneğinde ses çıkışı olmayacaktır.\n\nEmin değilseniz SDL2 seçeneğine ayarlayın.", "uk_UA": "Змінює серверну частину, яка використовується для відтворення аудіо.\n\nSDL2 є кращим, тоді як OpenAL і SoundIO використовуються як резервні варіанти. Dummy не матиме звуку.\n\nВстановіть SDL2, якщо не впевнені.", @@ -14798,6 +15414,7 @@ "pl_PL": "Zmień sposób mapowania i uzyskiwania dostępu do pamięci gości. Znacznie wpływa na wydajność emulowanego procesora.\n\nUstaw na HOST UNCHECKED, jeśli nie masz pewności.", "pt_BR": "Muda como a memória do sistema convidado é acessada. Tem um grande impacto na performance da CPU emulada.", "ru_RU": "Меняет разметку и доступ к гостевой памяти. Значительно влияет на производительность процессора.\n\nРекомендуется оставить \"Хост не установлен\"", + "sv_SE": "Ändra hur gästminne mappas och ges åtkomst till. Påverkar emulerad CPU-prestanda mycket.\n\nStäll in till \"Värd inte kontrollerad\" om du är osäker.", "th_TH": "เปลี่ยนวิธีการเข้าถึงหน่วยความจำของผู้เยี่ยมชม ส่งผลอย่างมากต่อประสิทธิภาพการทำงานของ CPU ที่จำลอง\n\nตั้งค่าเป็น ไม่ได้ตรวจสอบโฮสต์ หากคุณไม่แน่ใจ", "tr_TR": "Guest hafızasının nasıl tahsis edilip erişildiğini değiştirir. Emüle edilen CPU performansını ciddi biçimde etkiler.\n\nEmin değilseniz HOST UNCHECKED seçeneğine ayarlayın.", "uk_UA": "Змінює спосіб відображення та доступу до гостьової пам’яті. Значно впливає на продуктивність емульованого ЦП.\n\nВстановіть «Неперевірений хост», якщо не впевнені.", @@ -14822,6 +15439,7 @@ "pl_PL": "Użyj tabeli stron oprogramowania do translacji adresów. Najwyższa celność, ale najwolniejsza wydajność.", "pt_BR": "Usar uma tabela de página via software para tradução de endereços. Maior precisão, porém performance mais baixa.", "ru_RU": "Использует таблицу страниц для преобразования адресов. \nСамая высокая точность, но самая низкая производительность.", + "sv_SE": "Använd en programvarubaserad page table för adressöversättning. Högsta noggrannhet men lägsta prestanda.", "th_TH": "ใช้ตารางหน้าซอฟต์แวร์สำหรับการแปลที่อยู่ ความแม่นยำสูงสุดแต่ประสิทธิภาพช้าที่สุด", "tr_TR": "Adres çevirisi için bir işlemci sayfası kullanır. En yüksek doğruluğu ve en yavaş performansı sunar.", "uk_UA": "Використовує програмну таблицю сторінок для перекладу адрес. Найвища точність, але найповільніша продуктивність.", @@ -14846,6 +15464,7 @@ "pl_PL": "Bezpośrednio mapuj pamięć w przestrzeni adresowej hosta. Znacznie szybsza kompilacja i wykonanie JIT.", "pt_BR": "Mapeia memória no espaço de endereço hóspede diretamente. Compilação e execução do JIT muito mais rápida.", "ru_RU": "Прямая разметка памяти в адресном пространстве хоста. \nЗначительно более быстрые запуск и компиляция JIT.", + "sv_SE": "Direkt mappning av minne i host address space. Mycket snabbare JIT-kompilering och körning.", "th_TH": "แมปหน่วยความจำในพื้นที่ที่อยู่โฮสต์โดยตรง การคอมไพล์และดำเนินการของ JIT เร็วขึ้นมาก", "tr_TR": "Hafızayı doğrudan host adres aralığında tahsis eder. Çok daha hızlı JIT derleme ve işletimi sunar.", "uk_UA": "Пряме відображення пам'яті в адресному просторі хосту. Набагато швидша компіляція та виконання JIT.", @@ -14870,6 +15489,7 @@ "pl_PL": "Bezpośrednio mapuj pamięć, ale nie maskuj adresu w przestrzeni adresowej gościa przed uzyskaniem dostępu. Szybciej, ale kosztem bezpieczeństwa. Aplikacja gościa może uzyskać dostęp do pamięci z dowolnego miejsca w Ryujinx, więc w tym trybie uruchamiaj tylko programy, którym ufasz.", "pt_BR": "Mapeia memória diretamente, mas sem limitar o acesso ao espaço de endereçamento do sistema convidado. Mais rápido, porém menos seguro. O aplicativo convidado pode acessar memória de qualquer parte do Ryujinx, então apenas rode programas em que você confia nesse modo.", "ru_RU": "Производит прямую разметку памяти, но не маскирует адрес в гостевом адресном пространстве перед получением доступа. \nБыстро, но небезопасно. Гостевое приложение может получить доступ к памяти из Ryujinx, поэтому в этом режиме рекомендуется запускать только те программы, которым вы доверяете.", + "sv_SE": "Direkt mappning av minne, men maskera inte adressen inom guest address space innan åtkomst. Snabbare men kostar säkerhet. Gästapplikationen kan komma åt minne från överallt i Ryujinx, så kör endast program som du litar på i detta läge.", "th_TH": "แมปหน่วยความจำโดยตรง แต่อย่าตั้งค่าที่อยู่ของผู้เยี่ยมชมก่อนที่จะเข้าถึง เร็วกว่า แต่ต้องแลกกับความปลอดภัย แอปพลิเคชั่นของผู้เยี่ยมชมสามารถเข้าถึงหน่วยความจำได้จากทุกที่ใน Ryujinx แนะนำให้รันเฉพาะโปรแกรมที่คุณเชื่อถือในโหมดนี้", "tr_TR": "Hafızayı doğrudan tahsis eder, ancak host aralığına erişimden önce adresi maskelemez. Daha iyi performansa karşılık emniyetten ödün verir. Misafir uygulama Ryujinx içerisinden istediği hafızaya erişebilir, bu sebeple bu seçenek ile sadece güvendiğiniz uygulamaları çalıştırın.", "uk_UA": "Пряме відображення пам’яті, але не маскує адресу в гостьовому адресному просторі перед доступом. Швидше, але ціною безпеки. Гостьова програма може отримати доступ до пам’яті з будь-якого місця в Ryujinx, тому запускайте в цьому режимі лише програми, яким ви довіряєте.", @@ -14894,6 +15514,7 @@ "pl_PL": "Użyj Hiperwizora zamiast JIT. Znacznie poprawia wydajność, gdy jest dostępny, ale może być niestabilny w swoim obecnym stanie ", "pt_BR": "Usa o Hypervisor em vez de JIT (recompilador dinâmico). Melhora significativamente o desempenho quando disponível, mas pode ser instável no seu estado atual.", "ru_RU": "Использует Hypervisor вместо JIT. Значительно увеличивает производительность, но может работать нестабильно.", + "sv_SE": "Använd hypervisor istället för JIT. Förbättrar prestandan avsevärt när den finns tillgänglig men kan ge ostabilitet i dess aktuella tillstånd.", "th_TH": "ใช้ Hypervisor แทน JIT ปรับปรุงประสิทธิภาพอย่างมากเมื่อพร้อมใช้งาน แต่อาจไม่เสถียรในสถานะปัจจุบัน", "tr_TR": "JIT yerine Hypervisor kullan. Uygun durumlarda performansı büyük oranda arttırır. Ancak şu anki halinde stabil durumda çalışmayabilir.", "uk_UA": "Використання гіпервізор замість JIT. Значно покращує продуктивність, коли доступний, але може бути нестабільним у поточному стані.", @@ -14918,6 +15539,7 @@ "pl_PL": "Wykorzystuje alternatywny układ MemoryMode, aby naśladować model rozwojowy Switcha.\n\nJest to przydatne tylko w przypadku pakietów tekstur o wyższej rozdzielczości lub modów w rozdzielczości 4k. NIE poprawia wydajności.\n\nW razie wątpliwości pozostaw WYŁĄCZONE.", "pt_BR": "Expande a memória do sistema emulado de 4GiB para 6GiB", "ru_RU": "Использует альтернативный макет MemoryMode для имитации использования Nintendo Switch в режиме разработчика.\n\nПолезно только для пакетов текстур с высоким разрешением или модов добавляющих разрешение 4К. Не улучшает производительность.\n\nРекомендуется оставить выключенным.", + "sv_SE": "Använder ett alternativt minnesläge med 8GiB av DRAM för att efterlikna en utvecklingsmodell av Switch.\n\nDetta är endast användbart för texturpaket med högre upplösning eller moddar för 4k-upplösning. Det förbättrar INTE prestandan.\n\nLämna AV om du är osäker.", "th_TH": "ใช้รูปแบบ MemoryMode ทางเลือกเพื่อเลียนแบบโมเดลการพัฒนาสวิตช์\n\nสิ่งนี้มีประโยชน์สำหรับแพ็กพื้นผิวที่มีความละเอียดสูงกว่าหรือม็อดที่มีความละเอียด 4k เท่านั้น\n\nปล่อยให้ปิดหากคุณไม่แน่ใจ", "tr_TR": "Emüle edilen sistem hafızasını 4GiB'dan 6GiB'a yükseltir.\n\nBu seçenek yalnızca yüksek çözünürlük doku paketleri veya 4k çözünürlük modları için kullanılır. Performansı artırMAZ!\n\nEmin değilseniz devre dışı bırakın.", "uk_UA": "Використовує альтернативний макет MemoryMode для імітації моделі розробки Switch.\n\nЦе корисно лише для пакетів текстур з вищою роздільною здатністю або модифікацій із роздільною здатністю 4K. НЕ покращує продуктивність.\n\nЗалиште вимкненим, якщо не впевнені.", @@ -14942,6 +15564,7 @@ "pl_PL": "Ignoruje niezaimplementowane usługi Horizon OS. Może to pomóc w ominięciu awarii podczas uruchamiania niektórych gier.\n\nW razie wątpliwości pozostaw WYŁĄCZONE.", "pt_BR": "Habilita ou desabilita a opção de ignorar serviços não implementados", "ru_RU": "Игнорирует нереализованные сервисы Horizon в новых прошивках. Эта настройка поможет избежать вылеты при запуске определенных игр.\n\nРекомендуется оставить выключенным.", + "sv_SE": "Ignorerar Horizon OS-tjänster som inte har implementerats. Detta kan avhjälpa krascher när vissa spel startar upp.\n\nLämna AV om du är osäker.", "th_TH": "ละเว้นบริการ Horizon OS ที่ยังไม่ได้ใช้งาน วิธีนี้อาจช่วยในการหลีกเลี่ยงข้อผิดพลาดเมื่อบูตเกมบางเกม\n\nปล่อยให้ปิดหากคุณไม่แน่ใจ", "tr_TR": "Henüz programlanmamış Horizon işletim sistemi servislerini görmezden gelir. Bu seçenek belirli oyunların açılırken çökmesinin önüne geçmeye yardımcı olabilir.\n\nEmin değilseniz devre dışı bırakın.", "uk_UA": "Ігнорує нереалізовані служби Horizon OS. Це може допомогти в обході збоїв під час завантаження певних ігор.\n\nЗалиште вимкненим, якщо не впевнені.", @@ -14966,6 +15589,7 @@ "pl_PL": "Zewnętrzny dialog \"Controller Applet\" nie pojawi się, jeśli gamepad zostanie odłączony podczas rozgrywki. Nie pojawi się monit o zamknięcie dialogu lub skonfigurowanie nowego kontrolera. Po ponownym podłączeniu poprzednio odłączonego kontrolera gra zostanie automatycznie wznowiona.", "pt_BR": "O diálogo externo \"Controller Applet\" não aparecerá se o gamepad for desconectado durante o jogo. Não haverá prompt para fechar o diálogo ou configurar um novo controle. Assim que o controle desconectado anteriormente for reconectado, o jogo será retomado automaticamente.", "ru_RU": "Внешний диалог \"Апплет контроллера\" не появится, если геймпад будет отключен во время игры. Не будет предложено закрыть диалог или настроить новый контроллер. После повторного подключения ранее отключенного контроллера игра автоматически возобновится.", + "sv_SE": "Den externa dialogen \"Handkontroller-applet\" kommer inte att visas om din gamepad är frånkopplad under spel. Det finns ingen fråga att stänga dialogen eller konfigurera en ny handkontroller. När den tidigare frånkopplade handkontrollern återansluts så kommer spelet att automatiskt återupptas.", "th_TH": "กล่องโต้ตอบภายนอก \"แอปเพล็ตตัวควบคุม\" จะไม่ปรากฏขึ้นหากแป้นเกมถูกตัดการเชื่อมต่อระหว่างการเล่นเกม จะไม่มีข้อความแจ้งให้ปิดกล่องโต้ตอบหรือตั้งค่าตัวควบคุมใหม่ เมื่อเชื่อมต่อคอนโทรลเลอร์ที่ตัดการเชื่อมต่อก่อนหน้านี้อีกครั้ง เกมจะดำเนินการต่อโดยอัตโนมัติ", "tr_TR": "Oyun sırasında oyun kumandasının bağlantısı kesilirse, harici \"Controller Applet\" iletişim kutusu görünmez. İletişim kutusunu kapatma veya yeni bir kumanda ayarlama isteği olmaz. Daha önce bağlantısı kesilen kumanda tekrar bağlandığında oyun otomatik olarak devam eder.", "uk_UA": "Зовнішнє діалогове вікно \"Аплет контролера\" не з’являтиметься, якщо геймпад буде від’єднано під час гри. Не буде запиту закрити діалогове вікно чи налаштувати новий контролер. Після повторного підключення раніше від’єднаного контролера гра автоматично відновиться.", @@ -14990,6 +15614,7 @@ "pl_PL": "Wykonuje polecenia backend'u graficznego w drugim wątku.\n\nPrzyspiesza kompilację shaderów, zmniejsza zacinanie się i poprawia wydajność sterowników GPU bez własnej obsługi wielowątkowości. Nieco lepsza wydajność w sterownikach z wielowątkowością.\n\nUstaw na AUTO, jeśli nie masz pewności.", "pt_BR": "Habilita multithreading do backend gráfico", "ru_RU": "Выполняет команды графического бэкенда на втором потоке.\n\nУскоряет компиляцию шейдеров, уменьшает статтеры и повышает производительность на драйверах видеоадаптера без поддержки многопоточности. Производительность на драйверах с многопоточностью немного выше.\n\nРекомендуется оставить Автоматически.", + "sv_SE": "Kör kommandon för grafikbakände i en andra tråd.\n\nSnabbar upp shader compilation, minskar stuttering och förbättrar prestandan på GPU-drivrutiner utan stöd för egen multithreading. Något bättre prestanda på drivrutiner med multithreading.\n\nStäll in till AUTO om du är osäker.", "th_TH": "ดำเนินการคำสั่งแบ็กเอนด์กราฟิกบนเธรดที่สอง\n\nเร่งความเร็วการคอมไพล์ ลดการกระตุก และปรับปรุงประสิทธิภาพการทำงานของไดรเวอร์ GPU โดยไม่ต้องรองรับมัลติเธรดในตัว ประสิทธิภาพที่ดีขึ้นเล็กน้อยสำหรับไดรเวอร์ที่มีมัลติเธรด\n\nตั้งเป็น อัตโนมัติ หากคุณไม่แน่ใจ", "tr_TR": "Grafik arka uç komutlarını ikinci bir iş parçacığında işletir.\n\nKendi multithreading desteği olmayan sürücülerde shader derlemeyi hızlandırıp performansı artırır. Multithreading desteği olan sürücülerde çok az daha iyi performans sağlar.\n\nEmin değilseniz Otomatik seçeneğine ayarlayın.", "uk_UA": "Виконує команди графічного сервера в другому потоці.\n\nПрискорює компіляцію шейдерів, зменшує затримки та покращує продуктивність драйверів GPU без власної підтримки багатопоточності. Трохи краща продуктивність на драйверах з багатопотоковістю.\nВстановіть значення «Авто», якщо не впевнені", @@ -15014,6 +15639,7 @@ "pl_PL": "Wykonuje polecenia backend'u graficznego w drugim wątku.\n\nPrzyspiesza kompilację shaderów, zmniejsza zacinanie się i poprawia wydajność sterowników GPU bez własnej obsługi wielowątkowości. Nieco lepsza wydajność w sterownikach z wielowątkowością.\n\nUstaw na AUTO, jeśli nie masz pewności.", "pt_BR": "Executa comandos do backend gráfico em uma segunda thread. Permite multithreading em tempo de execução da compilação de shader, diminui os travamentos, e melhora performance em drivers sem suporte embutido a multithreading. Pequena variação na performance máxima em drivers com suporte a multithreading. Ryujinx pode precisar ser reiniciado para desabilitar adequadamente o multithreading embutido do driver, ou você pode precisar fazer isso manualmente para ter a melhor performance.", "ru_RU": "Выполняет команды графического бэкенда на втором потоке.\n\nУскоряет компиляцию шейдеров, уменьшает статтеры и повышает производительность на драйверах видеоадаптера без поддержки многопоточности. Производительность на драйверах с многопоточностью немного выше.\n\nРекомендуется оставить Автоматически.", + "sv_SE": "Kör kommandon för grafikbakände i en andra tråd.\n\nSnabbar upp shader compilation, minskar stuttering och förbättrar prestandan på GPU-drivrutiner utan stöd för egen multithreading. Något bättre prestanda på drivrutiner med multithreading.\n\nStäll in till AUTO om du är osäker.", "th_TH": "ดำเนินการคำสั่งแบ็กเอนด์กราฟิกบนเธรดที่สอง\n\nเร่งความเร็วการคอมไพล์เชเดอร์ ลดการกระตุก และปรับปรุงประสิทธิภาพการทำงานของไดรเวอร์ GPU โดยไม่ต้องรองรับมัลติเธรดในตัว ประสิทธิภาพที่ดีขึ้นเล็กน้อยสำหรับไดรเวอร์ที่มีมัลติเธรด\n\nตั้งเป็น อัตโนมัติ หากคุณไม่แน่ใจ", "tr_TR": "Grafik arka uç komutlarını ikinci bir iş parçacığında işletir.\n\nKendi multithreading desteği olmayan sürücülerde shader derlemeyi hızlandırıp performansı artırır. Multithreading desteği olan sürücülerde çok az daha iyi performans sağlar.\n\nEmin değilseniz Otomatik seçeneğine ayarlayın.", "uk_UA": "Виконує команди графічного сервера в другому потоці.\n\nПрискорює компіляцію шейдерів, зменшує затримки та покращує продуктивність драйверів GPU без власної підтримки багатопоточності. Трохи краща продуктивність на драйверах з багатопотоковістю.\n\nВстановіть значення «Авто», якщо не впевнені.", @@ -15038,6 +15664,7 @@ "pl_PL": "Zapisuje pamięć podręczną shaderów na dysku, co zmniejsza zacinanie się w kolejnych uruchomieniach.\n\nPozostaw WŁĄCZONE, jeśli nie masz pewności.", "pt_BR": "Habilita ou desabilita o cache de shader", "ru_RU": "Сохраняет кэш шейдеров на диске, для уменьшения статтеров при последующих запусках.\n\nРекомендуется оставить включенным.", + "sv_SE": "Sparar en disk shader cache som minskar stuttering i efterföljande körningar.\n\nLämna PÅ om du är osäker.", "th_TH": "บันทึกแคชแสงเงาของดิสก์ซึ่งช่วยลดการกระตุกในการรันครั้งต่อๆ ไป\n\nเปิดทิ้งไว้หากคุณไม่แน่ใจ", "tr_TR": "Sonraki çalışmalarda takılmaları engelleyen bir gölgelendirici disk önbelleğine kaydeder.", "uk_UA": "Зберігає кеш дискового шейдера, що зменшує затримки під час наступних запусків.\n\nЗалиште увімкненим, якщо не впевнені.", @@ -15062,6 +15689,7 @@ "pl_PL": "", "pt_BR": "Multiplica a resolução de renderização do jogo.\n\nAlguns jogos podem não funcionar bem com essa opção e apresentar uma aparência pixelada, mesmo com o aumento da resolução; para esses jogos, talvez seja necessário encontrar mods que removam o anti-aliasing ou aumentem a resolução de renderização interna. Ao usar a segunda opção, provavelmente desejará selecionar Nativa.\n\nEssa opção pode ser alterada enquanto um jogo está em execução, clicando em \"Aplicar\" abaixo; basta mover a janela de configurações para o lado e experimentar até encontrar o visual preferido para o jogo.\n\nLembre-se de que 4x é exagerado para praticamente qualquer configuração.", "ru_RU": "Увеличивает разрешение рендера игры.\n\nНекоторые игры могут не работать с этой настройкой и выглядеть смазано даже когда разрешение увеличено. Для таких игр может потребоваться установка модов, которые убирают сглаживание или увеличивают разрешение рендеринга. \nДля использования последнего, вам нужно будет выбрать опцию \"Нативное\".\n\nЭта опция может быть изменена во время игры по нажатию кнопки \"Применить\" ниже. Вы можете просто переместить окно настроек в сторону и поэкспериментировать, пока не подберете подходящие настройки для конкретной игры.\n\nИмейте в виду, что \"4x\" является излишеством.", + "sv_SE": "Multiplicerar spelets renderingsupplösning.\n\nNågra spel kanske inte fungerar med detta och ser pixelerade ut även när upplösningen ökas; för dessa spel så kan du behöva hitta moddar som tar bort anti-aliasing eller som ökar deras interna renderingsupplösning. För att använda det senare, kommer du sannolikt vilja välja Inbyggd.\n\nDet här alternativet kan ändras medan ett spel körs genom att klicka på \"Tillämpa\" nedan. du kan helt enkelt flytta inställningsfönstret åt sidan och experimentera tills du hittar ditt föredragna utseende för ett spel.\n\nTänk på att 4x är overkill för praktiskt taget alla maskiner.", "th_TH": "คูณความละเอียดการเรนเดอร์ของเกม\n\nเกมบางเกมอาจไม่สามารถใช้งานได้และดูเป็นพิกเซลแม้ว่าความละเอียดจะเพิ่มขึ้นก็ตาม สำหรับเกมเหล่านั้น คุณอาจต้องค้นหาม็อดที่ลบรอยหยักของภาพหรือเพิ่มความละเอียดในการเรนเดอร์ภายใน หากต้องการใช้อย่างหลัง คุณอาจต้องเลือก Native\n\nตัวเลือกนี้สามารถเปลี่ยนแปลงได้ในขณะที่เกมกำลังทำงานอยู่โดยคลิก \"นำมาใช้\" ด้านล่าง คุณสามารถย้ายหน้าต่างการตั้งค่าไปด้านข้างและทดลองจนกว่าคุณจะพบรูปลักษณ์ที่คุณต้องการสำหรับเกม\n\nโปรดทราบว่า 4x นั้นเกินความจำเป็นสำหรับการตั้งค่าแทบทุกประเภท", "tr_TR": "", "uk_UA": "Множить роздільну здатність гри.\n\nДеякі ігри можуть не працювати з цією функцією, і виглядатимуть піксельними; для цих ігор треба знайти модифікації, що зупиняють згладжування або підвищують роздільну здатність. Для останніх модифікацій, вибирайте \"Native\".\n\nЦей параметр можна міняти коли гра запущена кліком на \"Застосувати\"; ви можете перемістити вікно налаштувань і поекспериментувати з видом гри.\n\nМайте на увазі, що 4x це занадто для будь-якого комп'ютера.", @@ -15086,6 +15714,7 @@ "pl_PL": "Skala rozdzielczości zmiennoprzecinkowej, np. 1,5. Skale niecałkowite częściej powodują problemy lub awarie.", "pt_BR": "Escala de resolução de ponto flutuante, como 1.5. Valores não inteiros tem probabilidade maior de causar problemas ou quebras.", "ru_RU": "Масштабирование разрешения с плавающей запятой, например 1,5. Неинтегральное масштабирование с большой вероятностью вызовет сбои в работе.", + "sv_SE": "Skala för floating point resolution, såsom 1.5. Icke-heltalsskalor är mer benägna att orsaka problem eller krasch.", "th_TH": "สเกลความละเอียดจุดทศนิยม เช่น 1.5 ไม่ใช่จำนวนเต็มของสเกล มีแนวโน้มที่จะก่อให้เกิดปัญหาหรือความผิดพลาดได้", "tr_TR": "Küsüratlı çözünürlük ölçeği, 1.5 gibi. Küsüratlı ölçekler hata oluşturmaya ve çökmeye daha yatkındır.", "uk_UA": "Масштаб роздільної здатності з плаваючою комою, наприклад 1,5. Не інтегральні масштаби, швидше за все, спричинять проблеми або збій.", @@ -15110,6 +15739,7 @@ "pl_PL": "", "pt_BR": "Nível de Filtragem Anisotrópica. Defina como Automático para usar o valor solicitado pelo jogo.", "ru_RU": "Уровень анизотропной фильтрации. \n\nУстановите значение Автоматически, чтобы использовать значение по умолчанию игры.", + "sv_SE": "Nivå av anisotropisk filtrering. Ställ in till Automatiskt för att använda det värde som begärts av spelet.", "th_TH": "ระดับของ Anisotropic ตั้งค่าเป็นอัตโนมัติเพื่อใช้ค่าพื้นฐานของเกม", "tr_TR": "", "uk_UA": "Рівень анізотропної фільтрації. Встановіть на «Авто», щоб використовувати значення, яке вимагає гра.", @@ -15134,6 +15764,7 @@ "pl_PL": "", "pt_BR": "Proporção de Tela aplicada à janela do renderizador.\n\nAltere isso apenas se estiver usando um mod de proporção para o seu jogo; caso contrário, os gráficos ficarão esticados.\n\nMantenha em 16:9 se estiver em dúvida.", "ru_RU": "Соотношение сторон окна рендерера.\n\nИзмените эту настройку только если вы используете мод для соотношения сторон, иначе изображение будет растянуто.\n\nРекомендуется настройка 16:9.", + "sv_SE": "Bildförhållande att appliceras på renderarfönstret.\n\nÄndra endast detta om du använder en modd för bildförhållande till ditt spel, annars kommer grafiken att sträckas ut.\n\nLämna den till 16:9 om du är osäker.", "th_TH": "อัตราส่วนภาพที่ใช้กับหน้าต่างตัวแสดงภาพ\n\nเปลี่ยนสิ่งนี้หากคุณใช้ตัวดัดแปลงอัตราส่วนกว้างยาวสำหรับเกมของคุณ ไม่เช่นนั้นกราฟิกจะถูกยืดออก\n\nทิ้งไว้ที่ 16:9 หากไม่แน่ใจ", "tr_TR": "", "uk_UA": "Співвідношення сторін застосовано до вікна рендера.\n\nМіняйте тільки, якщо використовуєте модифікацію співвідношення сторін для гри, інакше графіка буде розтягнута.\n\nЗалиште на \"16:9\", якщо не впевнені.", @@ -15158,6 +15789,7 @@ "pl_PL": "Ścieżka Zrzutu Shaderów Grafiki", "pt_BR": "Diretòrio de despejo de shaders", "ru_RU": "Путь с дампами графических шейдеров", + "sv_SE": "Sökväg för Graphics Shaders Dump", "th_TH": "ที่เก็บ ดัมพ์ไฟล์เชเดอร์", "tr_TR": "Grafik Shader Döküm Yolu", "uk_UA": "Шлях скидання графічних шейдерів", @@ -15182,6 +15814,7 @@ "pl_PL": "Zapisuje logowanie konsoli w pliku dziennika na dysku. Nie wpływa na wydajność.", "pt_BR": "Habilita ou desabilita log para um arquivo no disco", "ru_RU": "Включает ведение журнала в файл на диске. Не влияет на производительность.", + "sv_SE": "Sparar konsolloggning till en loggfil på disk. Påverkar inte prestandan.", "th_TH": "บันทึกประวัติคอนโซลลงในไฟล์บันทึก จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Konsol loglarını diskte bir log dosyasına kaydeder. Performansı etkilemez.", "uk_UA": "Зберігає журнал консолі у файл журналу на диску. Не впливає на продуктивність.", @@ -15206,6 +15839,7 @@ "pl_PL": "Wyświetla w konsoli skrótowe komunikaty dziennika. Nie wpływa na wydajność.", "pt_BR": "Habilita ou desabilita exibição de mensagens de stub", "ru_RU": "Включает ведение журнала-заглушки. Не влияет на производительность.", + "sv_SE": "Skriver ut stubbloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความประวัติในคอนโซล จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Stub log mesajlarını konsola yazdırır. Performansı etkilemez.", "uk_UA": "Друкує повідомлення журналу-заглушки на консолі. Не впливає на продуктивність.", @@ -15230,6 +15864,7 @@ "pl_PL": "Wyświetla komunikaty dziennika informacyjnego w konsoli. Nie wpływa na wydajność.", "pt_BR": "Habilita ou desabilita exibição de mensagens informativas", "ru_RU": "Включает вывод сообщений информационного журнала в консоль. Не влияет на производительность.", + "sv_SE": "Skriver ut informationsloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความบันทึกข้อมูลในคอนโซล จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Bilgi log mesajlarını konsola yazdırır. Performansı etkilemez.", "uk_UA": "Друкує повідомлення інформаційного журналу на консолі. Не впливає на продуктивність.", @@ -15254,6 +15889,7 @@ "pl_PL": "Wyświetla komunikaty dziennika ostrzeżeń w konsoli. Nie wpływa na wydajność.", "pt_BR": "Habilita ou desabilita exibição de mensagens de alerta", "ru_RU": "Включает вывод сообщений журнала предупреждений в консоль. Не влияет на производительность.", + "sv_SE": "Skriver ut varningsloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความประวัติการเตือนในคอนโซล จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Uyarı log mesajlarını konsola yazdırır. Performansı etkilemez.", "uk_UA": "Друкує повідомлення журналу попереджень у консолі. Не впливає на продуктивність.", @@ -15278,6 +15914,7 @@ "pl_PL": "Wyświetla w konsoli komunikaty dziennika błędów. Nie wpływa na wydajność.", "pt_BR": "Habilita ou desabilita exibição de mensagens de erro", "ru_RU": "Включает вывод сообщений журнала ошибок. Не влияет на производительность.", + "sv_SE": "Skriver ut felloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความบันทึกข้อผิดพลาดในคอนโซล จะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Hata log mesajlarını konsola yazdırır. Performansı etkilemez.", "uk_UA": "Друкує повідомлення журналу помилок у консолі. Не впливає на продуктивність.", @@ -15302,6 +15939,7 @@ "pl_PL": "Wyświetla komunikaty dziennika śledzenia w konsoli. Nie wpływa na wydajność.", "pt_BR": "Habilita ou desabilita exibição de mensagens de rastreamento", "ru_RU": "Выводит сообщения журнала трассировки в консоли. Не влияет на производительность.", + "sv_SE": "Skriver ut spårloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความประวัติการติดตามในคอนโซล ไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Trace log mesajlarını konsola yazdırır. Performansı etkilemez.", "uk_UA": "Друкує повідомлення журналу трасування на консолі. Не впливає на продуктивність.", @@ -15326,6 +15964,7 @@ "pl_PL": "Wyświetla komunikaty dziennika gości w konsoli. Nie wpływa na wydajność.", "pt_BR": "Habilita ou desabilita exibição de mensagens do programa convidado", "ru_RU": "Включает вывод сообщений гостевого журнала. Не влияет на производительность.", + "sv_SE": "Skriver ut gästloggmeddelanden i konsollen. Påverkar inte prestandan.", "th_TH": "พิมพ์ข้อความประวัติของผู้เยี่ยมชมในคอนโซล ไม่ส่งผลกระทบต่อประสิทธิภาพการทำงาน", "tr_TR": "Guest log mesajlarını konsola yazdırır. Performansı etkilemez.", "uk_UA": "Друкує повідомлення журналу гостей у консолі. Не впливає на продуктивність.", @@ -15350,6 +15989,7 @@ "pl_PL": "Wyświetla w konsoli komunikaty dziennika dostępu do plików.", "pt_BR": "Habilita ou desabilita exibição de mensagens do acesso de arquivos", "ru_RU": "Включает вывод сообщений журнала доступа к файлам.", + "sv_SE": "Skriver ut loggmeddelanden för filåtkomst i konsollen.", "th_TH": "พิมพ์ข้อความบันทึกการเข้าถึงไฟล์ในคอนโซล", "tr_TR": "Dosya sistemi erişim log mesajlarını konsola yazdırır.", "uk_UA": "Друкує повідомлення журналу доступу до файлів у консолі.", @@ -15374,6 +16014,7 @@ "pl_PL": "Włącza wyjście dziennika dostępu FS do konsoli. Możliwe tryby to 0-3", "pt_BR": "Habilita exibição de mensagens de acesso ao sistema de arquivos no console. Modos permitidos são 0-3", "ru_RU": "Включает вывод журнала доступа к файловой системе. Возможные режимы: 0-3", + "sv_SE": "Aktiverar loggutdata för filsystemsåtkomst i konsollen. Möjliga lägen är 0-3", "th_TH": "เปิดใช้งาน เอาต์พุตประวัติการเข้าถึง FS ไปยังคอนโซล โหมดที่เป็นไปได้คือ 0-3", "tr_TR": "Konsola FS erişim loglarının yazılmasını etkinleştirir. Kullanılabilir modlar 0-3'tür", "uk_UA": "Вмикає виведення журналу доступу до FS на консоль. Можливі режими 0-3", @@ -15398,6 +16039,7 @@ "pl_PL": "Używaj ostrożnie", "pt_BR": "Use com cuidado", "ru_RU": "Используйте с осторожностью", + "sv_SE": "Använd med försiktighet", "th_TH": "โปรดใช้ด้วยความระมัดระวัง", "tr_TR": "Dikkatli kullanın", "uk_UA": "Використовуйте з обережністю", @@ -15422,6 +16064,7 @@ "pl_PL": "Wymaga włączonych odpowiednich poziomów logów", "pt_BR": "Requer que os níveis de log apropriados estejaam habilitados", "ru_RU": "Требует включения соответствующих уровней ведения журнала", + "sv_SE": "Kräver att lämpliga loggnivåer aktiveras", "th_TH": "จำเป็นต้องเปิดใช้งานระดับบันทึกที่เหมาะสม", "tr_TR": "Uygun log seviyesinin aktif olmasını gerektirir", "uk_UA": "Потрібно увімкнути відповідні рівні журналу", @@ -15446,6 +16089,7 @@ "pl_PL": "Wyświetla komunikaty dziennika debugowania w konsoli.\n\nUżywaj tego tylko na wyraźne polecenie członka załogi, ponieważ utrudni to odczytanie dzienników i pogorszy wydajność emulatora.", "pt_BR": "Habilita exibição de mensagens de depuração", "ru_RU": "Выводит журнал сообщений отладки в консоли.\n\nИспользуйте только в случае просьбы разработчика, так как включение этой функции затруднит чтение журналов и ухудшит работу эмулятора.", + "sv_SE": "Skriver ut felsökningsloggmeddelanden i konsolen.\n\nAnvänd endast detta om det är specifikt instruerat av en medarbetare, eftersom det kommer att göra loggar svåra att läsa och försämra emulatorprestanda.", "th_TH": "พิมพ์ข้อความประวัติการแก้ไขข้อบกพร่องในคอนโซล\n\nใช้สิ่งนี้เฉพาะเมื่อได้รับคำแนะนำจากผู้ดูแลเท่านั้น เนื่องจากจะทำให้บันทึกอ่านยากและทำให้ประสิทธิภาพของโปรแกรมจำลองแย่ลง", "tr_TR": "Debug log mesajlarını konsola yazdırır.\n\nBu seçeneği yalnızca geliştirici üyemiz belirtirse aktifleştirin, çünkü bu seçenek log dosyasını okumayı zorlaştırır ve emülatörün performansını düşürür.", "uk_UA": "Друкує повідомлення журналу налагодження на консолі.\n\nВикористовуйте це лише за спеціальною вказівкою співробітника, оскільки це ускладнить читання журналів і погіршить роботу емулятора.", @@ -15470,6 +16114,7 @@ "pl_PL": "Otwórz eksplorator plików, aby wybrać plik kompatybilny z Switch do wczytania", "pt_BR": "Abre o navegador de arquivos para seleção de um arquivo do Switch compatível a ser carregado", "ru_RU": "Открывает файловый менеджер для выбора файла, совместимого с Nintendo Switch.", + "sv_SE": "Öppna en filutforskare för att välja en Switch-kompatibel fil att läsa in", "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกไฟล์ที่เข้ากันได้กับ Switch ที่จะโหลด", "tr_TR": "Switch ile uyumlu bir dosya yüklemek için dosya tarayıcısını açar", "uk_UA": "Відкриває файловий провідник, щоб вибрати для завантаження сумісний файл Switch", @@ -15494,6 +16139,7 @@ "pl_PL": "Otwórz eksplorator plików, aby wybrać zgodną z Switch, rozpakowaną aplikację do załadowania", "pt_BR": "Abre o navegador de pastas para seleção de pasta extraída do Switch compatível a ser carregada", "ru_RU": "Открывает файловый менеджер для выбора распакованного приложения, совместимого с Nintendo Switch.", + "sv_SE": "Öppna en filutforskare för att välja en Switch-kompatibel, uppackad applikation att läsa in", "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกไฟล์ที่เข้ากันได้กับ Switch ที่จะโหลด", "tr_TR": "Switch ile uyumlu ayrıştırılmamış bir uygulama yüklemek için dosya tarayıcısını açar", "uk_UA": "Відкриває файловий провідник, щоб вибрати сумісну з комутатором розпаковану програму для завантаження", @@ -15518,6 +16164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Öppna en filutforskare för att välja en eller flera mappar att läsa in alla DLC från", "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกหนึ่งโฟลเดอร์ขึ้นไปเพื่อโหลด DLC จำนวนมาก", "tr_TR": "", "uk_UA": "Відкрийте провідник файлів, щоб вибрати одну або кілька папок для масового завантаження DLC", @@ -15542,6 +16189,7 @@ "pl_PL": "", "pt_BR": "Abra o explorador de arquivos para selecionar uma ou mais pastas e carregar atualizações de jogo em massa.", "ru_RU": "", + "sv_SE": "Öppna en filutforskare för att välja en eller flera mappar att läsa in alla titeluppdateringar från", "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกหนึ่งโฟลเดอร์ขึ้นไปเพื่อโหลดไฟล์อัปเดตจำนวนมาก", "tr_TR": "", "uk_UA": "Відкрийте провідник файлів, щоб вибрати одну або кілька папок для масового завантаження оновлень заголовків", @@ -15566,6 +16214,7 @@ "pl_PL": "Otwórz folder systemu plików Ryujinx", "pt_BR": "Abre o diretório do sistema de arquivos do Ryujinx", "ru_RU": "Открывает папку с файлами Ryujinx. ", + "sv_SE": "Öppna Ryujinx-filsystemsmappen", "th_TH": "เปิดโฟลเดอร์ระบบไฟล์ Ryujinx", "tr_TR": "Ryujinx dosya sistem klasörünü açar", "uk_UA": "Відкриває теку файлової системи Ryujinx", @@ -15590,6 +16239,7 @@ "pl_PL": "Otwiera folder, w którym zapisywane są logi", "pt_BR": "Abre o diretório onde os logs são salvos", "ru_RU": "Открывает папку в которую записываются логи", + "sv_SE": "Öppnar mappen där loggarna har skrivits till", "th_TH": "เปิดโฟลเดอร์ ที่เก็บไฟล์ประวัติ", "tr_TR": "Log dosyalarının bulunduğu klasörü açar", "uk_UA": "Відкриває теку, куди записуються журнали", @@ -15614,6 +16264,7 @@ "pl_PL": "Wyjdź z Ryujinx", "pt_BR": "Sair do Ryujinx", "ru_RU": "Выйти из Ryujinx", + "sv_SE": "Avsluta Ryujinx", "th_TH": "ออกจากโปรแกรม Ryujinx", "tr_TR": "Ryujinx'ten çıkış yapmayı sağlar", "uk_UA": "Виходить з Ryujinx", @@ -15638,6 +16289,7 @@ "pl_PL": "Otwórz okno ustawień", "pt_BR": "Abrir janela de configurações", "ru_RU": "Открывает окно параметров", + "sv_SE": "Öppna inställningar", "th_TH": "เปิดหน้าต่างการตั้งค่า", "tr_TR": "Seçenekler penceresini açar", "uk_UA": "Відкриває вікно налаштувань", @@ -15662,6 +16314,7 @@ "pl_PL": "Otwórz okno Menedżera Profili Użytkownika", "pt_BR": "Abrir janela de gerenciamento de perfis", "ru_RU": "Открыть менеджер учетных записей", + "sv_SE": "Öppna hanterare för användarprofiler", "th_TH": "เปิดหน้าต่างตัวจัดการโปรไฟล์ผู้ใช้", "tr_TR": "Kullanıcı profil yöneticisi penceresini açar", "uk_UA": "Відкриває вікно диспетчера профілів користувачів", @@ -15686,6 +16339,7 @@ "pl_PL": "Zatrzymaj emulację bieżącej gry i wróć do wyboru gier", "pt_BR": "Parar emulação do jogo atual e voltar a seleção de jogos", "ru_RU": "Остановка эмуляции текущей игры и возврат к списку игр", + "sv_SE": "Stoppa emulering av aktuellt spel och återgå till spelväljaren", "th_TH": "หยุดการจำลองของเกมที่เปิดอยู่ในปัจจุบันและกลับไปยังการเลือกเกม", "tr_TR": "Oynanmakta olan oyunun emülasyonunu durdurup oyun seçimine geri döndürür", "uk_UA": "Зупиняє емуляцію поточної гри та повертається до вибору гри", @@ -15710,6 +16364,7 @@ "pl_PL": "Sprawdź aktualizacje Ryujinx", "pt_BR": "Verificar por atualizações para o Ryujinx", "ru_RU": "Проверяет наличие обновлений для Ryujinx", + "sv_SE": "Leta efter uppdateringar för Ryujinx", "th_TH": "ตรวจสอบอัปเดตของ Ryujinx", "tr_TR": "Ryujinx güncellemelerini denetlemeyi sağlar", "uk_UA": "Перевіряє наявність оновлень для Ryujinx", @@ -15734,6 +16389,7 @@ "pl_PL": "Otwórz Okno Informacje", "pt_BR": "Abrir janela sobre", "ru_RU": "Открывает окно «О программе»", + "sv_SE": "Öppna Om-fönstret", "th_TH": "เปิดหน้าต่าง เกี่ยวกับ", "tr_TR": "Hakkında penceresini açar", "uk_UA": "Відкриває вікно «Про програму».", @@ -15758,6 +16414,7 @@ "pl_PL": "Wielkość siatki", "pt_BR": "Tamanho da grade", "ru_RU": "Размер сетки", + "sv_SE": "Rutnätsstorlek", "th_TH": "ขนาดตาราง", "tr_TR": "Öge Boyutu", "uk_UA": "Розмір сітки", @@ -15782,6 +16439,7 @@ "pl_PL": "Zmień rozmiar elementów siatki", "pt_BR": "Mudar tamanho dos items da grade", "ru_RU": "Меняет размер сетки элементов", + "sv_SE": "Ändra objektstorleken för rutnätet", "th_TH": "เปลี่ยนขนาด ของตาราง", "tr_TR": "Grid ögelerinin boyutunu değiştirmeyi sağlar", "uk_UA": "Змінити розмір елементів сітки", @@ -15806,6 +16464,7 @@ "pl_PL": "Brazylijski Portugalski", "pt_BR": "Português do Brasil", "ru_RU": "Португальский язык (Бразилия)", + "sv_SE": "Portugisiska (braziliansk)", "th_TH": "บราซิล โปรตุเกส", "tr_TR": "Brezilya Portekizcesi", "uk_UA": "Португальська (Бразилія)", @@ -15830,6 +16489,7 @@ "pl_PL": "Zobacz Wszystkich Współtwórców", "pt_BR": "Ver todos os contribuidores", "ru_RU": "Посмотреть всех участников", + "sv_SE": "Visa alla som bidragit", "th_TH": "ดูผู้มีส่วนร่วมทั้งหมด", "tr_TR": "Tüm katkıda bulunanları gör", "uk_UA": "Переглянути всіх співавторів", @@ -15854,6 +16514,7 @@ "pl_PL": "Głośność: ", "pt_BR": "Volume:", "ru_RU": "Громкость: ", + "sv_SE": "Volym: ", "th_TH": "ระดับเสียง: ", "tr_TR": "Ses Seviyesi: ", "uk_UA": "Гучність: ", @@ -15878,6 +16539,7 @@ "pl_PL": "Zmień Głośność Dźwięku", "pt_BR": "Mudar volume do áudio", "ru_RU": "Изменяет громкость звука", + "sv_SE": "Ändra ljudvolym", "th_TH": "ปรับระดับเสียง", "tr_TR": "Ses seviyesini değiştirir", "uk_UA": "Змінити гучність звуку", @@ -15902,6 +16564,7 @@ "pl_PL": "Dostęp do Internetu Gościa/Tryb LAN", "pt_BR": "Habilitar acesso à internet do programa convidado", "ru_RU": "Гостевой доступ в интернет/сетевой режим", + "sv_SE": "Gäståtkomst för Internet/LAN-läge", "th_TH": "การเข้าถึงอินเทอร์เน็ตของผู้เยี่ยมชม/โหมด LAN", "tr_TR": "Guest Internet Erişimi/LAN Modu", "uk_UA": "Гостьовий доступ до Інтернету/режим LAN", @@ -15926,6 +16589,7 @@ "pl_PL": "Pozwala emulowanej aplikacji na łączenie się z Internetem.\n\nGry w trybie LAN mogą łączyć się ze sobą, gdy ta opcja jest włączona, a systemy są połączone z tym samym punktem dostępu. Dotyczy to również prawdziwych konsol.\n\nNie pozwala na łączenie się z serwerami Nintendo. Może powodować awarie niektórych gier, które próbują połączyć się z Internetem.\n\nPozostaw WYŁĄCZONE, jeśli nie masz pewności.", "pt_BR": "Habilita acesso à internet do programa convidado. Se habilitado, o aplicativo vai se comportar como se o sistema Switch emulado estivesse conectado a Internet. Note que em alguns casos, aplicativos podem acessar a Internet mesmo com essa opção desabilitada", "ru_RU": "Позволяет эмулированному приложению подключаться к Интернету.\n\nПри включении этой функции игры с возможностью сетевой игры могут подключаться друг к другу, если все эмуляторы (или реальные консоли) подключены к одной и той же точке доступа.\n\nНЕ разрешает подключение к серверам Nintendo. Может вызвать сбой в некоторых играх, которые пытаются подключиться к Интернету.\n\nРекомендутеся оставить выключенным.", + "sv_SE": "Tillåter det emulerade programmet att ansluta till internet.\n\nSpel med ett LAN-läge kan ansluta till varandra när detta är aktiverat och systemen är anslutna till samma åtkomstpunkt. Detta inkluderar riktiga konsoler också.\n\nTillåter INTE anslutning till Nintendo-servrar. Kan orsaka kraschar i vissa spel som försöker ansluta till internet.\n\nLämna AV om du är osäker.", "th_TH": "อนุญาตให้แอปพลิเคชันจำลองเชื่อมต่ออินเทอร์เน็ต\n\nเกมที่มีโหมด LAN สามารถเชื่อมต่อระหว่างกันได้เมื่อเปิดใช้งานและระบบเชื่อมต่อกับจุดเชื่อมต่อเดียวกัน รวมถึงคอนโซลจริงด้วย\n\nไม่อนุญาตให้มีการเชื่อมต่อกับเซิร์ฟเวอร์ Nintendo อาจทำให้เกิดการหยุดทำงานในบางเกมที่พยายามเชื่อมต่ออินเทอร์เน็ต\n\nปล่อยให้ปิดหากคุณไม่แน่ใจ", "tr_TR": "Emüle edilen uygulamanın internete bağlanmasını sağlar.\n\nLAN modu bulunan oyunlar bu seçenek ile birbirine bağlanabilir ve sistemler aynı access point'e bağlanır. Bu gerçek konsolları da kapsar.\n\nNintendo sunucularına bağlanmayı sağlaMAZ. Internete bağlanmaya çalışan baz oyunların çökmesine sebep olabilr.\n\nEmin değilseniz devre dışı bırakın.", "uk_UA": "Дозволяє емульованій програмі підключатися до Інтернету.\n\nІгри з режимом локальної мережі можуть підключатися одна до одної, якщо це увімкнено, і системи підключені до однієї точки доступу. Сюди входять і справжні консолі.\n\nНЕ дозволяє підключатися до серверів Nintendo. Може призвести до збою в деяких іграх, які намагаються підключитися до Інтернету.\n\nЗалиште вимкненим, якщо не впевнені.", @@ -15950,6 +16614,7 @@ "pl_PL": "Zarządzaj Kodami", "pt_BR": "Gerenciar Cheats", "ru_RU": "Открывает окно управления читами", + "sv_SE": "Hantera fusk", "th_TH": "ฟังก์ชั่นจัดการสูตรโกง", "tr_TR": "Hileleri yönetmeyi sağlar", "uk_UA": "Керування читами", @@ -15974,6 +16639,7 @@ "pl_PL": "Zarządzaj Kodami", "pt_BR": "Gerenciar Cheats", "ru_RU": "Управление читами", + "sv_SE": "Hantera fusk", "th_TH": "ฟังก์ชั่นจัดการสูตรโกง", "tr_TR": "Hileleri Yönet", "uk_UA": "Керування читами", @@ -15998,6 +16664,7 @@ "pl_PL": "Zarządzaj modyfikacjami", "pt_BR": "Gerenciar Mods", "ru_RU": "Открывает окно управления модами", + "sv_SE": "Hantera moddar", "th_TH": "ฟังก์ชั่นจัดการม็อด", "tr_TR": "Modları Yönet", "uk_UA": "Керування модами", @@ -16022,6 +16689,7 @@ "pl_PL": "Zarządzaj modyfikacjami", "pt_BR": "Gerenciar Mods", "ru_RU": "Управление модами", + "sv_SE": "Hantera moddar", "th_TH": "ฟังก์ชั่นจัดการม็อด", "tr_TR": "Modları Yönet", "uk_UA": "Керування модами", @@ -16046,6 +16714,7 @@ "pl_PL": "Zasięg:", "pt_BR": "Intervalo:", "ru_RU": "Диапазон:", + "sv_SE": "Omfång:", "th_TH": "ขอบเขต:", "tr_TR": "Menzil:", "uk_UA": "Діапазон:", @@ -16070,6 +16739,7 @@ "pl_PL": "Ryujinx - Zatrzymaj Emulację", "pt_BR": "Ryujinx - Parar emulação", "ru_RU": "Ryujinx - Остановка эмуляции", + "sv_SE": "Ryujinx - Stoppa emulering", "th_TH": "Ryujinx - หยุดการจำลอง", "tr_TR": "Ryujinx - Emülasyonu Durdur", "uk_UA": "Ryujinx - Зупинити емуляцію", @@ -16094,6 +16764,7 @@ "pl_PL": "Czy na pewno chcesz zatrzymać emulację?", "pt_BR": "Tem certeza que deseja parar a emulação?", "ru_RU": "Вы уверены, что хотите остановить эмуляцию?", + "sv_SE": "Är du säker på att du vill stoppa emuleringen?", "th_TH": "คุณแน่ใจหรือไม่ว่าต้องการหยุดการจำลองหรือไม่?", "tr_TR": "Emülasyonu durdurmak istediğinizden emin misiniz?", "uk_UA": "Ви впевнені, що хочете зупинити емуляцію?", @@ -16118,6 +16789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Процессор", + "sv_SE": "Processor", "th_TH": "ซีพียู", "tr_TR": "İşlemci", "uk_UA": "ЦП", @@ -16142,6 +16814,7 @@ "pl_PL": "Dżwięk", "pt_BR": "Áudio", "ru_RU": "Аудио", + "sv_SE": "Ljud", "th_TH": "เสียง", "tr_TR": "Ses", "uk_UA": "Аудіо", @@ -16166,6 +16839,7 @@ "pl_PL": "Sieć", "pt_BR": "Rede", "ru_RU": "Сеть", + "sv_SE": "Nätverk", "th_TH": "เครือข่าย", "tr_TR": "Ağ", "uk_UA": "Мережа", @@ -16190,6 +16864,7 @@ "pl_PL": "Połączenie Sieciowe", "pt_BR": "Conexão de rede", "ru_RU": "Подключение к сети", + "sv_SE": "Nätverksanslutning", "th_TH": "การเชื่อมต่อเครือข่าย", "tr_TR": "Ağ Bağlantısı", "uk_UA": "Підключення до мережі", @@ -16214,6 +16889,7 @@ "pl_PL": "Cache CPU", "pt_BR": "Cache da CPU", "ru_RU": "Кэш процессора", + "sv_SE": "CPU-cache", "th_TH": "แคชซีพียู", "tr_TR": "İşlemci Belleği", "uk_UA": "Кеш ЦП", @@ -16238,6 +16914,7 @@ "pl_PL": "Pamięć CPU", "pt_BR": "Memória da CPU", "ru_RU": "Режим процессора", + "sv_SE": "CPU-läge", "th_TH": "โหมดซีพียู", "tr_TR": "CPU Hafızası", "uk_UA": "Пам'ять ЦП", @@ -16262,6 +16939,7 @@ "pl_PL": "Aktualizator Wyłączony!", "pt_BR": "Atualizador desabilitado!", "ru_RU": "Средство обновления отключено", + "sv_SE": "Uppdateringar inaktiverade!", "th_TH": "ปิดใช้งานการอัปเดตแล้ว!", "tr_TR": "Güncelleyici Devre Dışı!", "uk_UA": "Програму оновлення вимкнено!", @@ -16286,6 +16964,7 @@ "pl_PL": "Obróć o 90° w Prawo", "pt_BR": "Rodar 90° sentido horário", "ru_RU": "Повернуть на 90° по часовой стрелке", + "sv_SE": "Rotera 90° medurs", "th_TH": "หมุน 90 องศา ตามเข็มนาฬิกา", "tr_TR": "Saat yönünde 90° Döndür", "uk_UA": "Повернути на 90° за годинниковою стрілкою", @@ -16310,6 +16989,7 @@ "pl_PL": "Rozmiar ikon", "pt_BR": "Tamanho do ícone", "ru_RU": "Размер обложек", + "sv_SE": "Ikonstorlek", "th_TH": "ขนาดไอคอน", "tr_TR": "Ikon Boyutu", "uk_UA": "Розмір значка", @@ -16334,6 +17014,7 @@ "pl_PL": "Zmień rozmiar ikon gry", "pt_BR": "Muda o tamanho do ícone do jogo", "ru_RU": "Меняет размер обложек", + "sv_SE": "Ändra storleken för spelikonerna", "th_TH": "เปลี่ยนขนาดของไอคอนเกม", "tr_TR": "Oyun ikonlarının boyutunu değiştirmeyi sağlar", "uk_UA": "Змінити розмір значків гри", @@ -16358,6 +17039,7 @@ "pl_PL": "Pokaż Konsolę", "pt_BR": "Exibir console", "ru_RU": "Показать консоль", + "sv_SE": "Visa konsoll", "th_TH": "แสดง คอนโซล", "tr_TR": "Konsol'u Göster", "uk_UA": "Показати консоль", @@ -16382,6 +17064,7 @@ "pl_PL": "Błąd podczas czyszczenia cache shaderów w {0}: {1}", "pt_BR": "Erro ao deletar o shader em {0}: {1}", "ru_RU": "Ошибка очистки кэша шейдеров в {0}: {1}", + "sv_SE": "Fel vid tömning av shader cache i {0}: {1}", "th_TH": "เกิดข้อผิดพลาดในการล้างแคชแสงเงา {0}: {1}", "tr_TR": "Belirtilen shader cache temizlenirken hata {0}: {1}", "uk_UA": "Помилка очищення кешу шейдера {0}: {1}", @@ -16406,6 +17089,7 @@ "pl_PL": "Nie znaleziono kluczy", "pt_BR": "Chaves não encontradas", "ru_RU": "Ключи не найдены", + "sv_SE": "Nycklarna hittades inte", "th_TH": "ไม่พบ คีย์", "tr_TR": "Keys bulunamadı", "uk_UA": "Ключі не знайдено", @@ -16430,6 +17114,7 @@ "pl_PL": "Nie znaleziono firmware'u", "pt_BR": "Firmware não encontrado", "ru_RU": "Прошивка не найдена", + "sv_SE": "Firmware hittades inte", "th_TH": "ไม่พบ เฟิร์มแวร์", "tr_TR": "Firmware bulunamadı", "uk_UA": "Прошивка не знайдена", @@ -16454,6 +17139,7 @@ "pl_PL": "Błąd parsowania firmware'u", "pt_BR": "Erro na leitura do Firmware", "ru_RU": "Ошибка извлечения прошивки", + "sv_SE": "Tolkningsfel i firmware", "th_TH": "เกิดข้อผิดพลาดในการวิเคราะห์เฟิร์มแวร์", "tr_TR": "Firmware çözümleme hatası", "uk_UA": "Помилка аналізу прошивки", @@ -16478,6 +17164,7 @@ "pl_PL": "Aplikacja nie znaleziona", "pt_BR": "Aplicativo não encontrado", "ru_RU": "Приложение не найдено", + "sv_SE": "Applikationen hittades inte", "th_TH": "ไม่พบ แอปพลิเคชัน", "tr_TR": "Uygulama bulunamadı", "uk_UA": "Додаток не знайдено", @@ -16502,6 +17189,7 @@ "pl_PL": "Nieznany błąd", "pt_BR": "Erro desconhecido", "ru_RU": "Неизвестная ошибка", + "sv_SE": "Okänt fel", "th_TH": "ข้อผิดพลาดที่ไม่รู้จัก", "tr_TR": "Bilinmeyen hata", "uk_UA": "Невідома помилка", @@ -16526,6 +17214,7 @@ "pl_PL": "Niezdefiniowany błąd", "pt_BR": "Erro indefinido", "ru_RU": "Неопределенная ошибка", + "sv_SE": "Odefinierat fel", "th_TH": "ข้อผิดพลาดที่ไม่ได้ระบุ", "tr_TR": "Tanımlanmayan hata", "uk_UA": "Невизначена помилка", @@ -16550,6 +17239,7 @@ "pl_PL": "Ryujinx nie mógł znaleźć twojego pliku 'prod.keys'", "pt_BR": "Ryujinx não conseguiu encontrar o seu arquivo 'prod.keys'", "ru_RU": "Ryujinx не удалось найти ваш 'prod.keys' файл", + "sv_SE": "Ryujinx kunde inte hitta din 'prod.keys'-fil", "th_TH": "Ryujinx ไม่พบไฟล์ 'prod.keys' ในเครื่องของคุณ", "tr_TR": "Ryujinx 'prod.keys' dosyasını bulamadı", "uk_UA": "Ryujinx не вдалося знайти ваш файл «prod.keys».", @@ -16574,6 +17264,7 @@ "pl_PL": "Ryujinx nie mógł znaleźć żadnego zainstalowanego firmware'u", "pt_BR": "Ryujinx não conseguiu encontrar nenhum Firmware instalado", "ru_RU": "Ryujinx не удалось найти ни одной установленной прошивки", + "sv_SE": "Ryujinx kunde inte hitta några installerade firmwares", "th_TH": "Ryujinx ไม่พบ เฟิร์มแวร์ที่ติดตั้งไว้ในเครื่องของคุณ", "tr_TR": "Ryujinx yüklü herhangi firmware bulamadı", "uk_UA": "Ryujinx не вдалося знайти встановлену прошивку", @@ -16598,6 +17289,7 @@ "pl_PL": "Ryujinx nie był w stanie zparsować dostarczonego firmware'u. Jest to zwykle spowodowane nieaktualnymi kluczami.", "pt_BR": "Ryujinx não conseguiu ler o Firmware fornecido. Geralmente isso é causado por chaves desatualizadas.", "ru_RU": "Ryujinx не удалось распаковать выбранную прошивку. Обычно это вызвано устаревшими ключами.", + "sv_SE": "Ryujinx kunde inte tolka angiven firmware. Detta sker oftast med utdaterade nycklar.", "th_TH": "Ryujinx ไม่สามารถวิเคราะห์เฟิร์มแวร์ที่ให้มาได้ ซึ่งมักมีสาเหตุมาจากคีย์ที่เก่าจนเกินไป", "tr_TR": "Ryujinx temin edilen firmware'i çözümleyemedi. Bu durum genellikle güncel olmayan keys'den kaynaklanır.", "uk_UA": "Ryujinx не вдалося проаналізувати прошивку. Зазвичай це спричинено застарілими ключами.", @@ -16622,6 +17314,7 @@ "pl_PL": "Ryujinx nie mógł znaleźć prawidłowej aplikacji na podanej ścieżce.", "pt_BR": "Ryujinx não conseguiu encontrar um aplicativo válido no caminho fornecido.", "ru_RU": "Ryujinx не удалось найти валидное приложение по указанному пути.", + "sv_SE": "Ryujinx kunde inte hitta en giltig applikation i angiven sökväg.", "th_TH": "Ryujinx ไม่พบแอปพลิเคชันที่ถูกต้องในที่เก็บไฟล์ที่กำหนด", "tr_TR": "Ryujinx belirtilen yolda geçerli bir uygulama bulamadı.", "uk_UA": "Ryujinx не вдалося знайти дійсний додаток за вказаним шляхом", @@ -16646,6 +17339,7 @@ "pl_PL": "Wystąpił nieznany błąd!", "pt_BR": "Um erro desconhecido foi encontrado!", "ru_RU": "Произошла неизвестная ошибка", + "sv_SE": "Ett okänt fel inträffade!", "th_TH": "เกิดข้อผิดพลาดที่ไม่รู้จัก!", "tr_TR": "Bilinmeyen bir hata oluştu!", "uk_UA": "Сталася невідома помилка!", @@ -16670,6 +17364,7 @@ "pl_PL": "Wystąpił niezdefiniowany błąd! To nie powinno się zdarzyć, skontaktuj się z deweloperem!", "pt_BR": "Um erro indefinido occoreu! Isso não deveria acontecer, por favor contate um desenvolvedor!", "ru_RU": "Произошла неизвестная ошибка. Этого не должно происходить, пожалуйста, свяжитесь с разработчиками.", + "sv_SE": "Ett odefinierat fel inträffade! Detta ska inte hända. Kontakta en utvecklare!", "th_TH": "เกิดข้อผิดพลาดที่ไม่สามารถระบุได้! สิ่งนี้ไม่ควรเกิดขึ้น โปรดติดต่อผู้พัฒนา!", "tr_TR": "Tanımlanmayan bir hata oluştu! Bu durum ile karşılaşılmamalıydı, lütfen bir geliştirici ile iletişime geçin!", "uk_UA": "Сталася невизначена помилка! Цього не повинно статися, зверніться до розробника!", @@ -16694,6 +17389,7 @@ "pl_PL": "Otwórz Podręcznik Konfiguracji", "pt_BR": "Abrir o guia de configuração", "ru_RU": "Открыть руководство по установке", + "sv_SE": "Öppna konfigurationsguiden", "th_TH": "เปิดคู่มือการตั้งค่า", "tr_TR": "Kurulum Kılavuzunu Aç", "uk_UA": "Відкрити посібник із налаштування", @@ -16718,6 +17414,7 @@ "pl_PL": "Brak Aktualizacji", "pt_BR": "Sem atualizações", "ru_RU": "Без обновлений", + "sv_SE": "Ingen uppdatering", "th_TH": "ไม่มีการอัปเดต", "tr_TR": "Güncelleme Yok", "uk_UA": "Немає оновлень", @@ -16731,22 +17428,23 @@ "ar_SA": "الإصدار: {0}", "de_DE": "Version {0} - {1}", "el_GR": "Version {0} - {1}", - "en_US": "Version {0}", + "en_US": "Version {0} - {1}", "es_ES": "Versión {0} - {1}", "fr_FR": "", - "he_IL": "גרסה {0}", - "it_IT": "Versione {0}", + "he_IL": "גרסה {0} - {1}", + "it_IT": "Versione {0} - {1}", "ja_JP": "バージョン {0} - {1}", - "ko_KR": "버전 {0}", - "no_NO": "Versjon {0}", + "ko_KR": "버전 {0} - {1}", + "no_NO": "Versjon {0} - {1}", "pl_PL": "Wersja {0} - {1}", - "pt_BR": "Versão {0}", + "pt_BR": "Versão {0} - {1}", "ru_RU": "Version {0} - {1}", - "th_TH": "เวอร์ชั่น {0}", + "sv_SE": "Version {0} - {1}", + "th_TH": "เวอร์ชั่น {0} - {1}", "tr_TR": "Sürüm {0} - {1}", "uk_UA": "Версія {0} - {1}", - "zh_CN": "游戏更新的版本 {0}", - "zh_TW": "版本 {0}" + "zh_CN": "游戏更新的版本 {0} - {1}", + "zh_TW": "版本 {0} - {1}" } }, { @@ -16766,6 +17464,7 @@ "pl_PL": "", "pt_BR": "Empacotado: Versão {0}", "ru_RU": "", + "sv_SE": "Bundlad: Version {0}", "th_TH": "Bundled: เวอร์ชั่น {0}", "tr_TR": "", "uk_UA": "Комплектні: Версія {0}", @@ -16790,6 +17489,7 @@ "pl_PL": "", "pt_BR": "Empacotado:", "ru_RU": "", + "sv_SE": "Bundlad:", "th_TH": "", "tr_TR": "", "uk_UA": "Комплектні:", @@ -16814,6 +17514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Delvis", "th_TH": "", "tr_TR": "", "uk_UA": "Часткові", @@ -16838,6 +17539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Inte optimerad", "th_TH": "", "tr_TR": "", "uk_UA": "Необрізані", @@ -16862,6 +17564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Optimerad", "th_TH": "", "tr_TR": "", "uk_UA": "Обрізані", @@ -16886,6 +17589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "(misslyckades)", "th_TH": "", "tr_TR": "", "uk_UA": "(Невдача)", @@ -16910,6 +17614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Spara {0:n0} Mb", "th_TH": "", "tr_TR": "", "uk_UA": "Зберегти {0:n0} Мб", @@ -16934,6 +17639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Sparade {0:n0} Mb", "th_TH": "", "tr_TR": "", "uk_UA": "Збережено {0:n0} Мб", @@ -16958,6 +17664,7 @@ "pl_PL": "", "pt_BR": "Ryujinx - Informação", "ru_RU": "Ryujinx - Информация", + "sv_SE": "Ryujinx - Info", "th_TH": "Ryujinx – ข้อมูล", "tr_TR": "Ryujinx - Bilgi", "uk_UA": "Ryujin x - Інформація", @@ -16982,6 +17689,7 @@ "pl_PL": "Ryujinx - Potwierdzenie", "pt_BR": "Ryujinx - Confirmação", "ru_RU": "Ryujinx - Подтверждение", + "sv_SE": "Ryujinx - Bekräfta", "th_TH": "Ryujinx - ยืนยัน", "tr_TR": "Ryujinx - Doğrulama", "uk_UA": "Ryujinx - Підтвердження", @@ -17006,6 +17714,7 @@ "pl_PL": "Wszystkie typy", "pt_BR": "Todos os tipos", "ru_RU": "Все типы", + "sv_SE": "Alla typer", "th_TH": "ทุกประเภท", "tr_TR": "Tüm türler", "uk_UA": "Всі типи", @@ -17030,6 +17739,7 @@ "pl_PL": "Nigdy", "pt_BR": "Nunca", "ru_RU": "Никогда", + "sv_SE": "Aldrig", "th_TH": "ไม่ต้อง", "tr_TR": "Hiçbir Zaman", "uk_UA": "Ніколи", @@ -17054,6 +17764,7 @@ "pl_PL": "Musi mieć co najmniej {0} znaków", "pt_BR": "Deve ter pelo menos {0} caracteres", "ru_RU": "Должно быть не менее {0} символов.", + "sv_SE": "Får endast vara minst {0} tecken långt", "th_TH": "ต้องมีความยาวของตัวอักษรอย่างน้อย {0} ตัว", "tr_TR": "En az {0} karakter uzunluğunda olmalı", "uk_UA": "Мінімальна кількість символів: {0}", @@ -17078,6 +17789,7 @@ "pl_PL": "Musi mieć długość od {0}-{1} znaków", "pt_BR": "Deve ter entre {0}-{1} caracteres", "ru_RU": "Должно быть {0}-{1} символов", + "sv_SE": "Får endast vara {0}-{1} tecken långt", "th_TH": "ต้องมีความยาวของตัวอักษร {0}-{1} ตัว", "tr_TR": "{0}-{1} karakter uzunluğunda olmalı", "uk_UA": "Має бути {0}-{1} символів", @@ -17102,6 +17814,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Cabinet-dialog", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -17126,6 +17839,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Ange nya namnet för din Amiibo", "th_TH": "", "tr_TR": "", "uk_UA": "Вкажіть Ваше нове ім'я Amiibo", @@ -17150,6 +17864,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Skanna din Amiibo nu.", "th_TH": "", "tr_TR": "", "uk_UA": "Будь ласка, проскануйте Ваш Amiibo.", @@ -17174,6 +17889,7 @@ "pl_PL": "Klawiatura Oprogramowania", "pt_BR": "Teclado por Software", "ru_RU": "Программная клавиатура", + "sv_SE": "Programvarutangentbord", "th_TH": "ซอฟต์แวร์คีย์บอร์ด", "tr_TR": "Yazılım Klavyesi", "uk_UA": "Програмна клавіатура", @@ -17198,6 +17914,7 @@ "pl_PL": "Może składać się jedynie z 0-9 lub '.'", "pt_BR": "Deve ser somente 0-9 ou '.'", "ru_RU": "Должно быть в диапазоне 0-9 или '.'", + "sv_SE": "Får endast vara 0-9 eller '.'", "th_TH": "ต้องเป็น 0-9 หรือ '.' เท่านั้น", "tr_TR": "Sadece 0-9 veya '.' olabilir", "uk_UA": "Повинно бути лише 0-9 або “.”", @@ -17222,6 +17939,7 @@ "pl_PL": "Nie może zawierać znaków CJK", "pt_BR": "Apenas devem ser caracteres não CJK.", "ru_RU": "Не должно быть CJK-символов", + "sv_SE": "Får endast vara icke-CJK-tecken", "th_TH": "ต้องเป็นตัวอักษรที่ไม่ใช่ประเภท CJK เท่านั้น", "tr_TR": "Sadece CJK-characters olmayan karakterler olabilir", "uk_UA": "Повинно бути лише не CJK-символи", @@ -17246,6 +17964,7 @@ "pl_PL": "Musi zawierać tylko tekst ASCII", "pt_BR": "Deve ser apenas texto ASCII", "ru_RU": "Текст должен быть только в ASCII кодировке", + "sv_SE": "Får endast vara ASCII-text", "th_TH": "ต้องเป็นตัวอักษร ASCII เท่านั้น", "tr_TR": "Sadece ASCII karakterler olabilir", "uk_UA": "Повинно бути лише ASCII текст", @@ -17270,6 +17989,7 @@ "pl_PL": "Obsługiwane Kontrolery:", "pt_BR": "", "ru_RU": "Поддерживаемые геймпады:", + "sv_SE": "Handkontroller som stöds:", "th_TH": "คอนโทรลเลอร์ที่รองรับ:", "tr_TR": "Desteklenen Kumandalar:", "uk_UA": "Підтримувані контролери:", @@ -17294,6 +18014,7 @@ "pl_PL": "Gracze:", "pt_BR": "Jogadores:", "ru_RU": "Игроки:", + "sv_SE": "Spelare:", "th_TH": "ผู้เล่น:", "tr_TR": "Oyuncular:", "uk_UA": "Гравці:", @@ -17318,6 +18039,7 @@ "pl_PL": "Twoja aktualna konfiguracja jest nieprawidłowa. Otwórz ustawienia i skonfiguruj swoje wejścia.", "pt_BR": "", "ru_RU": "Текущая конфигурация некорректна. Откройте параметры и перенастройте управление.", + "sv_SE": "Din aktuella konfiguration är ogiltig. Öppna inställningarna och konfigurera om din inmatning.", "th_TH": "การกำหนดค่าปัจจุบันของคุณไม่ถูกต้อง กรุณาเปิดการตั้งค่าและกำหนดค่าอินพุตของคุณใหม่", "tr_TR": "Halihazırdaki konfigürasyonunuz geçersiz. Ayarları açın ve girişlerinizi yeniden konfigüre edin.", "uk_UA": "Поточна конфігурація невірна. Відкрийте налаштування та переналаштуйте Ваші дані.", @@ -17342,6 +18064,7 @@ "pl_PL": "Ustawiony tryb zadokowany. Sterowanie przenośne powinno być wyłączone.", "pt_BR": "", "ru_RU": "Используется стационарный режим. Управление в портативном режиме должно быть отключено.", + "sv_SE": "Dockat läge angivet. Handhållna kontroller bör inaktiveras.", "th_TH": "ตั้งค่าด็อกโหมด ควรปิดใช้งานการควบคุมแบบแฮนด์เฮลด์", "tr_TR": "Docked mod ayarlandı. Portatif denetim devre dışı bırakılmalı.", "uk_UA": "Встановлений режим в док-станції. Вимкніть портативні контролери.", @@ -17366,6 +18089,7 @@ "pl_PL": "Zmienianie Nazw Starych Plików...", "pt_BR": "Renomeando arquivos antigos...", "ru_RU": "Переименование старых файлов...", + "sv_SE": "Byter namn på gamla filer...", "th_TH": "กำลังเปลี่ยนชื่อไฟล์เก่า...", "tr_TR": "Eski dosyalar yeniden adlandırılıyor...", "uk_UA": "Перейменування старих файлів...", @@ -17390,6 +18114,7 @@ "pl_PL": "Aktualizator nie mógł zmienić nazwy pliku: {0}", "pt_BR": "O atualizador não conseguiu renomear o arquivo: {0}", "ru_RU": "Программе обновления не удалось переименовать файл: {0}", + "sv_SE": "Uppdateraren kunde inte byta namn på filen: {0}", "th_TH": "โปรแกรมอัปเดตไม่สามารถเปลี่ยนชื่อไฟล์ได้: {0}", "tr_TR": "Güncelleyici belirtilen dosyayı yeniden adlandıramadı: {0}", "uk_UA": "Програмі оновлення не вдалося перейменувати файл: {0}", @@ -17414,6 +18139,7 @@ "pl_PL": "Dodawanie Nowych Plików...", "pt_BR": "Adicionando novos arquivos...", "ru_RU": "Добавление новых файлов...", + "sv_SE": "Lägger till nya filer...", "th_TH": "กำลังเพิ่มไฟล์ใหม่...", "tr_TR": "Yeni Dosyalar Ekleniyor...", "uk_UA": "Додавання нових файлів...", @@ -17438,6 +18164,7 @@ "pl_PL": "Wypakowywanie Aktualizacji...", "pt_BR": "Extraíndo atualização...", "ru_RU": "Извлечение обновления...", + "sv_SE": "Extraherar uppdatering...", "th_TH": "กำลังแยกการอัปเดต...", "tr_TR": "Güncelleme Ayrıştırılıyor...", "uk_UA": "Видобування оновлення...", @@ -17462,6 +18189,7 @@ "pl_PL": "Pobieranie Aktualizacji...", "pt_BR": "Baixando atualização...", "ru_RU": "Загрузка обновления...", + "sv_SE": "Hämtar uppdatering...", "th_TH": "กำลังดาวน์โหลดอัปเดต...", "tr_TR": "Güncelleme İndiriliyor...", "uk_UA": "Завантаження оновлення...", @@ -17486,6 +18214,7 @@ "pl_PL": "Zadokowany", "pt_BR": "TV", "ru_RU": "Стационарный режим", + "sv_SE": "Dockad", "th_TH": "ด็อก", "tr_TR": "", "uk_UA": "Док-станція", @@ -17510,6 +18239,7 @@ "pl_PL": "Przenośny", "pt_BR": "Portátil", "ru_RU": "Портативный режим", + "sv_SE": "Handhållen", "th_TH": "แฮนด์เฮลด์", "tr_TR": "El tipi", "uk_UA": "Портативний", @@ -17534,6 +18264,7 @@ "pl_PL": "Błąd Połączenia.", "pt_BR": "Erro de conexão.", "ru_RU": "Ошибка соединения", + "sv_SE": "Anslutningsfel.", "th_TH": "การเชื่อมต่อล้มเหลว", "tr_TR": "Bağlantı Hatası.", "uk_UA": "Помилка з'єднання.", @@ -17558,6 +18289,7 @@ "pl_PL": "{0} i więcej...", "pt_BR": "{0} e mais...", "ru_RU": "{0} и другие...", + "sv_SE": "{0} och fler...", "th_TH": "{0} และอื่นๆ ...", "tr_TR": "{0} ve daha fazla...", "uk_UA": "{0} та інші...", @@ -17582,6 +18314,7 @@ "pl_PL": "Błąd API.", "pt_BR": "Erro de API.", "ru_RU": "Ошибка API.", + "sv_SE": "API-fel.", "th_TH": "ข้อผิดพลาดของ API", "tr_TR": "API Hatası.", "uk_UA": "Помилка API.", @@ -17606,6 +18339,7 @@ "pl_PL": "Wczytywanie {0}", "pt_BR": "Carregando {0}", "ru_RU": "Загрузка {0}", + "sv_SE": "Läser in {0}", "th_TH": "กำลังโหลด {0}", "tr_TR": "{0} Yükleniyor", "uk_UA": "Завантаження {0}", @@ -17630,6 +18364,7 @@ "pl_PL": "Kompilowanie PTC", "pt_BR": "Compilando PTC", "ru_RU": "Компиляция PTC", + "sv_SE": "Kompilerar PTC", "th_TH": "กำลังคอมไพล์ PTC", "tr_TR": "PTC Derleniyor", "uk_UA": "Компіляція PTC", @@ -17654,6 +18389,7 @@ "pl_PL": "Kompilowanie Shaderów", "pt_BR": "Compilando Shaders", "ru_RU": "Компиляция шейдеров", + "sv_SE": "Kompilerar shaders", "th_TH": "กำลังคอมไพล์ พื้นผิวและแสงเงา", "tr_TR": "Shaderlar Derleniyor", "uk_UA": "Компіляція шейдерів", @@ -17678,6 +18414,7 @@ "pl_PL": "Wszystkie klawiatury", "pt_BR": "Todos os teclados", "ru_RU": "Все клавиатуры", + "sv_SE": "Alla tangentbord", "th_TH": "คีย์บอร์ดทั้งหมด", "tr_TR": "Tüm Klavyeler", "uk_UA": "Всі клавіатури", @@ -17702,6 +18439,7 @@ "pl_PL": "Wybierz obsługiwany plik do otwarcia", "pt_BR": "Selecione um arquivo suportado para abrir", "ru_RU": "Выберите совместимый файл для открытия", + "sv_SE": "Välj en fil som stöds att öppna", "th_TH": "เลือกไฟล์ที่สนับสนุนเพื่อเปิด", "tr_TR": "Açmak için desteklenen bir dosya seçin", "uk_UA": "Виберіть підтримуваний файл для відкриття", @@ -17726,6 +18464,7 @@ "pl_PL": "Wybierz folder z rozpakowaną grą", "pt_BR": "Selecione um diretório com um jogo extraído", "ru_RU": "Выберите папку с распакованной игрой", + "sv_SE": "Välj en mapp med ett uppackat spel", "th_TH": "เลือกโฟลเดอร์ที่มีเกมที่แตกไฟล์แล้ว", "tr_TR": "Ayrıştırılmamış oyun içeren bir klasör seçin", "uk_UA": "Виберіть теку з розпакованою грою", @@ -17750,6 +18489,7 @@ "pl_PL": "Wszystkie Obsługiwane Formaty", "pt_BR": "Todos os formatos suportados", "ru_RU": "Все поддерживаемые форматы", + "sv_SE": "Alla format som stöds", "th_TH": "รูปแบบที่รองรับทั้งหมด", "tr_TR": "Tüm Desteklenen Formatlar", "uk_UA": "Усі підтримувані формати", @@ -17774,6 +18514,7 @@ "pl_PL": "Aktualizator Ryujinx", "pt_BR": "Atualizador do Ryujinx", "ru_RU": "Ryujinx - Обновление", + "sv_SE": "Uppdaterare för Ryujinx", "th_TH": "ตัวอัปเดต Ryujinx", "tr_TR": "Ryujinx Güncelleyicisi", "uk_UA": "Програма оновлення Ryujinx", @@ -17798,6 +18539,7 @@ "pl_PL": "Skróty Klawiszowe Klawiatury", "pt_BR": "Atalhos do teclado", "ru_RU": "Горячие клавиши", + "sv_SE": "Snabbtangenter för tangentbord", "th_TH": "ปุ่มลัดของคีย์บอร์ด", "tr_TR": "Klavye Kısayolları", "uk_UA": "Гарячі клавіші клавіатури", @@ -17822,6 +18564,7 @@ "pl_PL": "Skróty Klawiszowe Klawiatury", "pt_BR": "Atalhos do teclado", "ru_RU": "Горячие клавиши", + "sv_SE": "Snabbtangenter för tangentbord", "th_TH": "ปุ่มลัดของคีย์บอร์ด", "tr_TR": "Klavye Kısayolları", "uk_UA": "Гарячі клавіші клавіатури", @@ -17846,6 +18589,7 @@ "pl_PL": "Zrzut Ekranu:", "pt_BR": "Captura de tela:", "ru_RU": "Сделать скриншот:", + "sv_SE": "Skärmbild:", "th_TH": "ภาพหน้าจอ:", "tr_TR": "Ekran Görüntüsü Al:", "uk_UA": "Знімок екрана:", @@ -17870,6 +18614,7 @@ "pl_PL": "Pokaż UI:", "pt_BR": "Exibir UI:", "ru_RU": "Показать интерфейс:", + "sv_SE": "Visa gränssnitt:", "th_TH": "แสดง UI:", "tr_TR": "Arayüzü Göster:", "uk_UA": "Показати інтерфейс:", @@ -17894,6 +18639,7 @@ "pl_PL": "Pauza:", "pt_BR": "Pausar:", "ru_RU": "Пауза эмуляции:", + "sv_SE": "Paus:", "th_TH": "หยุดชั่วคราว:", "tr_TR": "Durdur:", "uk_UA": "Пауза:", @@ -17918,6 +18664,7 @@ "pl_PL": "Wycisz:", "pt_BR": "Mudo:", "ru_RU": "Выключить звук:", + "sv_SE": "Tyst:", "th_TH": "ปิดเสียง:", "tr_TR": "Sustur:", "uk_UA": "Вимкнути звук:", @@ -17942,6 +18689,7 @@ "pl_PL": "Ustawienia Sterowania Ruchowego", "pt_BR": "Configurações do controle de movimento", "ru_RU": "Настройки управления движением", + "sv_SE": "Inställningar för rörelsekontroller", "th_TH": "ตั้งค่าควบคุมการเคลื่อนไหว", "tr_TR": "Hareket Kontrol Seçenekleri", "uk_UA": "Налаштування керування рухом", @@ -17966,6 +18714,7 @@ "pl_PL": "Ustawienia Wibracji", "pt_BR": "Configurações de vibração", "ru_RU": "Настройки вибрации", + "sv_SE": "Inställningar för vibration", "th_TH": "ตั้งค่าการสั่นไหว", "tr_TR": "Titreşim Seçenekleri", "uk_UA": "Налаштування вібрації", @@ -17990,6 +18739,7 @@ "pl_PL": "Wybierz Plik Motywu", "pt_BR": "Selecionar arquivo do tema", "ru_RU": "Выбрать файл темы", + "sv_SE": "Välj temafil", "th_TH": "เลือกธีมไฟล์", "tr_TR": "Tema Dosyası Seç", "uk_UA": "Виберіть файл теми", @@ -18014,6 +18764,7 @@ "pl_PL": "Plik Motywu Xaml", "pt_BR": "Arquivo de tema Xaml", "ru_RU": "Файл темы Xaml", + "sv_SE": "Xaml-temafil", "th_TH": "ไฟล์ธีมรูปแบบ XAML", "tr_TR": "Xaml Tema Dosyası", "uk_UA": "Файл теми Xaml", @@ -18038,6 +18789,7 @@ "pl_PL": "Zarządzaj Kontami — Avatar", "pt_BR": "Gerenciar contas - Avatar", "ru_RU": "Управление аккаунтами - Аватар", + "sv_SE": "Hantera konton - Avatar", "th_TH": "จัดการบัญชี - อวาต้า", "tr_TR": "Hesapları Yönet - Avatar", "uk_UA": "Керування обліковими записами - Аватар", @@ -18062,6 +18814,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Amiibo", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -18086,6 +18839,7 @@ "pl_PL": "Nieznane", "pt_BR": "Desconhecido", "ru_RU": "Неизвестно", + "sv_SE": "Okänt", "th_TH": "ไม่รู้จัก", "tr_TR": "Bilinmeyen", "uk_UA": "Невідомо", @@ -18110,6 +18864,7 @@ "pl_PL": "Użycie", "pt_BR": "Uso", "ru_RU": "Применение", + "sv_SE": "Användning", "th_TH": "การใช้งาน", "tr_TR": "Kullanım", "uk_UA": "Використання", @@ -18134,6 +18889,7 @@ "pl_PL": "Zapisywalne", "pt_BR": "Gravável", "ru_RU": "Доступно для записи", + "sv_SE": "Skrivbar", "th_TH": "สามารถเขียนทับได้", "tr_TR": "Yazılabilir", "uk_UA": "Можливість запису", @@ -18158,6 +18914,7 @@ "pl_PL": "Wybierz pliki DLC", "pt_BR": "Selecionar arquivos de DLC", "ru_RU": "Выберите файлы DLC", + "sv_SE": "Välj DLC-filer", "th_TH": "เลือกไฟล์ DLC", "tr_TR": "DLC dosyalarını seç", "uk_UA": "Виберіть файли DLC", @@ -18182,6 +18939,7 @@ "pl_PL": "Wybierz pliki aktualizacji", "pt_BR": "Selecionar arquivos de atualização", "ru_RU": "Выберите файлы обновлений", + "sv_SE": "Välj uppdateringsfiler", "th_TH": "เลือกไฟล์อัพเดต", "tr_TR": "Güncelleme dosyalarını seç", "uk_UA": "Виберіть файли оновлення", @@ -18206,6 +18964,7 @@ "pl_PL": "Wybierz katalog modów", "pt_BR": "", "ru_RU": "Выбрать папку с модами", + "sv_SE": "Välj moddkatalog", "th_TH": "เลือกไดเรกทอรี Mods", "tr_TR": "Mod Dizinini Seç", "uk_UA": "Виберіть теку з модами", @@ -18230,6 +18989,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Kontrollera och optimera XCI-filer", "th_TH": "", "tr_TR": "", "uk_UA": "Перевірити та Обрізати XCI файл", @@ -18254,6 +19014,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Denna funktion kommer först att kontrollera ledigt utrymme och sedan optimera XCI-filen för att spara diskutrymme.", "th_TH": "", "tr_TR": "", "uk_UA": "Ця функція спочатку перевірить вільний простір, а потім обрізатиме файл XCI для економії місця на диску.", @@ -18278,6 +19039,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Aktuell filstorlek: {0:n} MB\nStorlek för speldata: {1:n} MB\nSparat diskutrymme: {2:n} MB", "th_TH": "", "tr_TR": "", "uk_UA": "Поточний розмір файла: {0:n} MB\nРозмір файлів гри: {1:n} MB\nЕкономія місця: {2:n} MB", @@ -18302,6 +19064,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "XCI-filen behöver inte optimeras. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", "uk_UA": "XCI файл не потребує обрізання. Перевірте журнали для додаткової інформації", @@ -18326,6 +19089,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "XCI-filen kan inte avoptimeras. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", "uk_UA": "XCI файл не може бути обрізаний. Перевірте журнали для додаткової інформації", @@ -18350,6 +19114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "XCI-filen är skrivskyddad och kunde inte göras skrivbar. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", "uk_UA": "XCI файл Тільки для Читання і не може бути прочитаним. Перевірте журнали додаткової інформації", @@ -18374,6 +19139,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "XCI-filen har ändrats i storlek sedan den lästes av. Kontrollera att filen inte skrivs till och försök igen.", "th_TH": "", "tr_TR": "", "uk_UA": "Розмір файлу XCI змінився з моменту сканування. Перевірте, чи не записується файл, та спробуйте знову", @@ -18398,6 +19164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "XCI-filen har data i det lediga utrymmet. Den är inte säker att optimera", "th_TH": "", "tr_TR": "", "uk_UA": "Файл XCI містить дані в зоні вільного простору, тому обрізка небезпечна", @@ -18422,6 +19189,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "XCI-filen innehåller ogiltig data. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", "uk_UA": "XCI Файл містить недійсні дані. Перевірте журнали для додаткової інформації", @@ -18446,6 +19214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "XCI-filen kunde inte öppnas för skrivning. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", "uk_UA": "XCI Файл файл не вдалося відкрити для запису. Перевірте журнали для додаткової інформації", @@ -18470,6 +19239,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Optimering av XCI-filen misslyckades", "th_TH": "", "tr_TR": "", "uk_UA": "Не вдалося обрізати файл XCI", @@ -18494,6 +19264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Åtgärden avbröts", "th_TH": "", "tr_TR": "", "uk_UA": "Операція перервана", @@ -18518,6 +19289,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Ingen åtgärd genomfördes", "th_TH": "", "tr_TR": "", "uk_UA": "Операція не проводилася", @@ -18542,6 +19314,7 @@ "pl_PL": "Menedżer Profili Użytkowników", "pt_BR": "Gerenciador de perfis de usuário", "ru_RU": "Менеджер учетных записей", + "sv_SE": "Hanterare för användarprofiler", "th_TH": "จัดการโปรไฟล์ผู้ใช้", "tr_TR": "Kullanıcı Profillerini Yönet", "uk_UA": "Менеджер профілів користувачів", @@ -18566,6 +19339,7 @@ "pl_PL": "Menedżer Kodów", "pt_BR": "Gerenciador de Cheats", "ru_RU": "Менеджер читов", + "sv_SE": "Fuskhanterare", "th_TH": "จัดการสูตรโกง", "tr_TR": "Oyun Hilelerini Yönet", "uk_UA": "Менеджер читів", @@ -18590,6 +19364,7 @@ "pl_PL": "Menedżer Zawartości do Pobrania", "pt_BR": "Gerenciador de DLC", "ru_RU": "Управление DLC для {0} ({1})", + "sv_SE": "Hantera hämtningsbart innehåll för {0} ({1})", "th_TH": "จัดการ DLC ที่ดาวน์โหลดได้สำหรับ {0} ({1})", "tr_TR": "Oyun DLC'lerini Yönet", "uk_UA": "Менеджер вмісту для завантаження", @@ -18614,6 +19389,7 @@ "pl_PL": "Zarządzaj modami dla {0} ({1})", "pt_BR": "Gerenciar Mods para {0} ({1})", "ru_RU": "Управление модами для {0} ({1})", + "sv_SE": "Hantera moddar för {0} ({1})", "th_TH": "จัดการม็อดที่ดาวน์โหลดได้สำหรับ {0} ({1})", "tr_TR": "", "uk_UA": "Керувати модами для {0} ({1})", @@ -18638,6 +19414,7 @@ "pl_PL": "Menedżer Aktualizacji Tytułu", "pt_BR": "Gerenciador de atualizações", "ru_RU": "Менеджер обновлений игр", + "sv_SE": "Hanterare för speluppdateringar", "th_TH": "จัดการอัปเดตหัวข้อ", "tr_TR": "Oyun Güncellemelerini Yönet", "uk_UA": "Менеджер оновлення назв", @@ -18662,6 +19439,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Optimera XCI-filer", "th_TH": "", "tr_TR": "", "uk_UA": "Обрізка XCI Файлів", @@ -18686,6 +19464,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "{0} av {1} spel markerade", "th_TH": "", "tr_TR": "", "uk_UA": "{0} з {1} тайтл(ів) обрано", @@ -18710,6 +19489,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "{0} av {1} spel markerade ({2} visade)", "th_TH": "", "tr_TR": "", "uk_UA": "{0} з {1} тайтл(ів) обрано ({2} відображається)", @@ -18734,6 +19514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Optimerar {0} spel...", "th_TH": "", "tr_TR": "", "uk_UA": "Обрізка {0} тайтл(ів)...", @@ -18758,6 +19539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Avoptimerar {0} spel...", "th_TH": "", "tr_TR": "", "uk_UA": "Необрізаних {0} тайтл(ів)...", @@ -18782,6 +19564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Misslyckades", "th_TH": "", "tr_TR": "", "uk_UA": "Невдача", @@ -18806,6 +19589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Möjlig besparning", "th_TH": "", "tr_TR": "", "uk_UA": "Потенційна економія", @@ -18830,6 +19614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Faktisk besparning", "th_TH": "", "tr_TR": "", "uk_UA": "Зекономлено", @@ -18854,6 +19639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "{0:n0} Mb", "th_TH": "", "tr_TR": "", "uk_UA": "{0:n0} Мб", @@ -18878,6 +19664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Markera visade", "th_TH": "", "tr_TR": "", "uk_UA": "Вибрати показане", @@ -18902,6 +19689,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Avmarkera visade", "th_TH": "", "tr_TR": "", "uk_UA": "Скасувати вибір показаного", @@ -18926,6 +19714,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Titel", "th_TH": "", "tr_TR": "", "uk_UA": "Заголовок", @@ -18950,6 +19739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Utrymmesbesparning", "th_TH": "", "tr_TR": "", "uk_UA": "Економія місця", @@ -18974,6 +19764,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Optimera", "th_TH": "", "tr_TR": "", "uk_UA": "Обрізка", @@ -18998,6 +19789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Avoptimera", "th_TH": "", "tr_TR": "", "uk_UA": "Зшивання", @@ -19022,6 +19814,7 @@ "pl_PL": "", "pt_BR": "{0} nova(s) atualização(ões) adicionada(s)", "ru_RU": "", + "sv_SE": "{0} nya uppdatering(ar) lades till", "th_TH": "{0} อัพเดตที่เพิ่มมาใหม่", "tr_TR": "", "uk_UA": "{0} нове оновлення додано", @@ -19046,6 +19839,7 @@ "pl_PL": "", "pt_BR": "Atualizações incorporadas não podem ser removidas, apenas desativadas.", "ru_RU": "", + "sv_SE": "Bundlade uppdateringar kan inte tas bort, endast inaktiveras.", "th_TH": "แพ็คที่อัพเดตมาไม่สามารถลบทิ้งได้ สามารถปิดใช้งานได้เท่านั้น", "tr_TR": "", "uk_UA": "Вбудовані оновлення не можуть бути видалені, лише вимкнені.", @@ -19070,6 +19864,7 @@ "pl_PL": "Kody Dostępne dla {0} [{1}]", "pt_BR": "Cheats disponíveis para {0} [{1}]", "ru_RU": "Доступные читы для {0} [{1}]", + "sv_SE": "Fusk tillgängliga för {0} [{1}]", "th_TH": "สูตรโกงมีให้สำหรับ {0} [{1}]", "tr_TR": "{0} için Hile mevcut [{1}]", "uk_UA": "Коди доступні для {0} [{1}]", @@ -19094,6 +19889,7 @@ "pl_PL": "Identyfikator wersji:", "pt_BR": "ID da Build:", "ru_RU": "ID версии:", + "sv_SE": "Bygg-id:", "th_TH": "รหัสการสร้าง:", "tr_TR": "", "uk_UA": "ID збірки:", @@ -19118,6 +19914,7 @@ "pl_PL": "", "pt_BR": "DLCs incorporadas não podem ser removidas, apenas desativadas.", "ru_RU": "", + "sv_SE": "Bundlade DLC kan inte tas bort, endast inaktiveras.", "th_TH": "แพ็ค DLC ไม่สามารถลบทิ้งได้ สามารถปิดใช้งานได้เท่านั้น", "tr_TR": "", "uk_UA": "Вбудований DLC не може бути видаленим, лише вимкненим.", @@ -19142,6 +19939,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "{0} DLC(er) tillgängliga", "th_TH": "", "tr_TR": "", "uk_UA": "{0} DLC доступно", @@ -19166,6 +19964,7 @@ "pl_PL": "", "pt_BR": "{0} novo(s) conteúdo(s) para download adicionado(s)", "ru_RU": "", + "sv_SE": "{0} nya hämtningsbara innehåll lades till", "th_TH": "{0} DLC ใหม่ที่เพิ่มเข้ามา", "tr_TR": "", "uk_UA": "{0} нового завантажувального вмісту додано", @@ -19190,6 +19989,7 @@ "pl_PL": "", "pt_BR": "{0} novo(s) conteúdo(s) para download adicionado(s)", "ru_RU": "", + "sv_SE": "{0} nya hämtningsbara innehåll lades till", "th_TH": "{0} ใหม่ที่เพิ่มเข้ามา", "tr_TR": "", "uk_UA": "{0} нового завантажувального вмісту додано", @@ -19214,6 +20014,7 @@ "pl_PL": "", "pt_BR": "{0} conteúdo(s) para download ausente(s) removido(s)", "ru_RU": "", + "sv_SE": "{0} saknade hämtningsbara innehåll togs bort", "th_TH": "", "tr_TR": "", "uk_UA": "{0} відсутнього завантажувального вмісту видалено", @@ -19238,6 +20039,7 @@ "pl_PL": "", "pt_BR": "{0} nova(s) atualização(ões) adicionada(s)", "ru_RU": "", + "sv_SE": "{0} nya uppdatering(ar) lades till", "th_TH": "{0} อัพเดตใหม่ที่เพิ่มเข้ามา", "tr_TR": "", "uk_UA": "{0} нових оновлень додано", @@ -19262,6 +20064,7 @@ "pl_PL": "", "pt_BR": "{0} atualização(ões) ausente(s) removida(s)", "ru_RU": "", + "sv_SE": "{0} saknade uppdatering(ar) togs bort", "th_TH": "", "tr_TR": "", "uk_UA": "{0} відсутніх оновлень видалено", @@ -19286,6 +20089,7 @@ "pl_PL": "{0} Mod(y/ów)", "pt_BR": "", "ru_RU": "Моды для {0} ", + "sv_SE": "{0} modd(ar)", "th_TH": "{0} ม็อด", "tr_TR": "{0} Mod(lar)", "uk_UA": "{0} мод(ів)", @@ -19310,6 +20114,7 @@ "pl_PL": "Edytuj Zaznaczone", "pt_BR": "Editar selecionado", "ru_RU": "Изменить выбранные", + "sv_SE": "Redigera markerade", "th_TH": "แก้ไขที่เลือกแล้ว", "tr_TR": "Seçiliyi Düzenle", "uk_UA": "Редагувати вибране", @@ -19334,6 +20139,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Fortsätt", "th_TH": "", "tr_TR": "", "uk_UA": "Продовжити", @@ -19358,6 +20164,7 @@ "pl_PL": "Anuluj", "pt_BR": "Cancelar", "ru_RU": "Отмена", + "sv_SE": "Avbryt", "th_TH": "ยกเลิก", "tr_TR": "İptal", "uk_UA": "Скасувати", @@ -19382,6 +20189,7 @@ "pl_PL": "Zapisz", "pt_BR": "Salvar", "ru_RU": "Сохранить", + "sv_SE": "Spara", "th_TH": "บันทึก", "tr_TR": "Kaydet", "uk_UA": "Зберегти", @@ -19406,6 +20214,7 @@ "pl_PL": "Odrzuć", "pt_BR": "Descartar", "ru_RU": "Отменить", + "sv_SE": "Förkasta", "th_TH": "ละทิ้ง", "tr_TR": "Iskarta", "uk_UA": "Скасувати", @@ -19430,6 +20239,7 @@ "pl_PL": "Wstrzymano", "pt_BR": "", "ru_RU": "Приостановлено", + "sv_SE": "Pausad", "th_TH": "หยุดชั่วคราว", "tr_TR": "Durduruldu", "uk_UA": "Призупинено", @@ -19454,6 +20264,7 @@ "pl_PL": "Ustaw Obraz Profilu", "pt_BR": "Definir imagem de perfil", "ru_RU": "Установить аватар", + "sv_SE": "Välj profilbild", "th_TH": "ตั้งค่ารูปโปรไฟล์", "tr_TR": "Profil Resmi Ayarla", "uk_UA": "Встановити зображення профілю", @@ -19478,6 +20289,7 @@ "pl_PL": "Nazwa jest wymagana", "pt_BR": "É necessário um nome", "ru_RU": "Необходимо ввести никнейм", + "sv_SE": "Namn krävs", "th_TH": "จำเป็นต้องระบุชื่อ", "tr_TR": "İsim gerekli", "uk_UA": "Імʼя обовʼязкове", @@ -19502,6 +20314,7 @@ "pl_PL": "Należy ustawić obraz profilowy", "pt_BR": "A imagem de perfil deve ser definida", "ru_RU": "Необходимо установить аватар", + "sv_SE": "Profilbild måste anges", "th_TH": "จำเป็นต้องตั้งค่ารูปโปรไฟล์", "tr_TR": "Profil resmi ayarlanmalıdır", "uk_UA": "Зображення профілю обовʼязкове", @@ -19526,6 +20339,7 @@ "pl_PL": "{0} Aktualizacje dostępne dla {1} ({2})", "pt_BR": "{0} atualizações disponíveis para {1} ({2})", "ru_RU": "Доступные обновления для {0} ({1})", + "sv_SE": "Hantera uppdateringar för {0} ({1})", "th_TH": "จัดการอัพเดตสำหรับ {0} ({1})", "tr_TR": "{0} için güncellemeler mevcut [{1}]", "uk_UA": "{0} Доступні оновлення для {1} ({2})", @@ -19550,6 +20364,7 @@ "pl_PL": "Zwiększ Rozdzielczość:", "pt_BR": "Aumentar a resolução:", "ru_RU": "Увеличить разрешение:", + "sv_SE": "Öka upplösning:", "th_TH": "เพิ่มความละเอียด:", "tr_TR": "Çözünürlüğü artır:", "uk_UA": "Збільшити роздільність:", @@ -19574,6 +20389,7 @@ "pl_PL": "Zmniejsz Rozdzielczość:", "pt_BR": "Diminuir a resolução:", "ru_RU": "Уменьшить разрешение:", + "sv_SE": "Sänk upplösning:", "th_TH": "ลดความละเอียด:", "tr_TR": "Çözünürlüğü azalt:", "uk_UA": "Зменшити роздільність:", @@ -19598,6 +20414,7 @@ "pl_PL": "Nazwa:", "pt_BR": "Nome:", "ru_RU": "Никнейм:", + "sv_SE": "Namn:", "th_TH": "ชื่อ:", "tr_TR": "İsim:", "uk_UA": "Імʼя", @@ -19622,6 +20439,7 @@ "pl_PL": "ID Użytkownika:", "pt_BR": "ID de usuário:", "ru_RU": "ID пользователя:", + "sv_SE": "Användar-id:", "th_TH": "รหัสผู้ใช้:", "tr_TR": "Kullanıcı Adı:", "uk_UA": "ID користувача:", @@ -19646,6 +20464,7 @@ "pl_PL": "Backend Graficzny", "pt_BR": "Backend gráfico", "ru_RU": "Графический бэкенд", + "sv_SE": "Grafikbakände", "th_TH": "กราฟิกเบื้องหลัง", "tr_TR": "Grafik Arka Ucu", "uk_UA": "Графічний сервер", @@ -19670,6 +20489,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Выберает бэкенд, который будет использован в эмуляторе.\n\nVulkan является лучшим выбором для всех современных графических карт с актуальными драйверами. В Vulkan также включена более быстрая компиляция шейдеров (меньше статтеров) для всех видеоадаптеров.\n\nПри использовании OpenGL можно достичь лучших результатов на старых видеоадаптерах Nvidia и AMD в Linux или на видеоадаптерах с небольшим количеством видеопамяти, хотя статтеров при компиляции шейдеров будет больше.\n\nРекомендуется использовать Vulkan. Используйте OpenGL, если ваш видеоадаптер не поддерживает Vulkan даже с актуальными драйверами.", + "sv_SE": "Väljer den grafikbakände som ska användas i emulatorn.\n\nVulkan är oftast bättre för alla moderna grafikkort, så länge som deras drivrutiner är uppdaterade. Vulkan har också funktioner för snabbare shader compilation (mindre stuttering) för alla GPU-tillverkare.\n\nOpenGL kan nå bättre resultat på gamla Nvidia GPU:er, på äldre AMD GPU:er på Linux, eller på GPU:er med lägre VRAM, även om shader compilation stuttering kommer att vara större.\n\nStäll in till Vulkan om du är osäker. Ställ in till OpenGL om du GPU inte har stöd för Vulkan även med de senaste grafikdrivrutinerna.", "th_TH": "เลือกกราฟิกเบื้องหลังที่จะใช้ในโปรแกรมจำลอง\n\nโดยรวมแล้ว Vulkan นั้นดีกว่าสำหรับการ์ดจอรุ่นใหม่ทั้งหมด ตราบใดที่ไดรเวอร์ยังอัพเดทอยู่เสมอ Vulkan ยังมีคุณสมบัติการคอมไพล์เชเดอร์ที่เร็วขึ้น(และลดอาการกระตุก) สำหรับ GPU อื่นๆทุกอัน\n\nOpenGL อาจได้รับผลลัพธ์ที่ดีกว่าบน Nvidia GPU รุ่นเก่า, AMD GPU รุ่นเก่าบน Linux หรือบน GPU ที่มี VRAM น้อย แม้ว่าการคอมไพล์เชเดอร์ จะทำให้อาการกระตุกมากขึ้นก็ตาม\n\nตั้งค่าเป็น Vulkan หากไม่แน่ใจ ตั้งค่าเป็น OpenGL หาก GPU ของคุณไม่รองรับ Vulkan แม้จะมีไดรเวอร์กราฟิกล่าสุดก็ตาม", "tr_TR": "", "uk_UA": "Виберіть backend графіки, що буде використовуватись в емуляторі.\n\n\"Vulkan\" краще для всіх сучасних відеокарт, якщо драйвери вчасно оновлюються. У Vulkan також швидше компілюються шейдери (менше \"заїкання\" зображення) на відеокартах всіх компаній.\n\n\"OpenGL\" може дати кращі результати на старих відеокартах Nvidia, старих відеокартах AMD на Linux, або на відеокартах з маленькою кількістю VRAM, але \"заїкання\" через компіляцію шейдерів будуть частіші.\n\nЯкщо не впевнені, встановіть на \"Vulkan\". Встановіть на \"OpenGL\", якщо Ваша відеокарта не підтримує Vulkan навіть на останніх драйверах.", @@ -19694,6 +20514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Automatiskt", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -19718,6 +20539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Använder Vulkan.\nPå en ARM Mac och vid spel som körs bra på den så används Metal-bakänden.", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -19742,6 +20564,7 @@ "pl_PL": "Włącz Rekompresję Tekstur", "pt_BR": "Habilitar recompressão de texturas", "ru_RU": "Пережимать текстуры", + "sv_SE": "Aktivera Texture Recompression", "th_TH": "เปิดใช้งาน การบีบอัดพื้นผิวอีกครั้ง", "tr_TR": "Yeniden Doku Sıkıştırılmasını Aktif Et", "uk_UA": "Увімкнути рекомпресію текстури", @@ -19766,6 +20589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Сжатие ASTC текстур для уменьшения использования VRAM. \n\nИгры, использующие этот формат текстур: Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder и The Legend of Zelda: Tears of the Kingdom. \nНа видеоадаптерах с 4GiB видеопамяти или менее возможны вылеты при запуске этих игр. \n\nВключите, только если у вас заканчивается видеопамять в вышеупомянутых играх. \n\nРекомендуется оставить выключенным.", + "sv_SE": "Komprimerar ASTC-texturer för att minska VRAM-användning.\n\nSpel som använder detta texturformat inkluderar Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder och The Legend of Zelda: Tears of the Kingdom.\n\nGrafikkort med 4GiB VRAM eller mindre kommer sannolikt krascha någon gång när du kör dessa spel.\n\nAktivera endast om du har slut på VRAM på ovan nämnda spel. Lämna AV om du är osäker.", "th_TH": "บีบอัดพื้นผิว ASTC เพื่อลดการใช้งาน VRAM\n\nเกมที่ใช้รูปแบบพื้นผิวนี้ ได้แก่ Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder และ The Legend of Zelda: Tears of the Kingdom\n\nการ์ดจอที่มี 4GiB VRAM หรือน้อยกว่ามีแนวโน้มที่จะพังในบางจุดขณะเล่นเกมเหล่านี้\n\nเปิดใช้งานเฉพาะในกรณีที่ VRAM ของคุณใกล้หมดในเกมที่กล่าวมาข้างต้น ปล่อยให้ปิดหากไม่แน่ใจ", "tr_TR": "", "uk_UA": "Стискає текстури ASTC, щоб зменшити використання VRAM.\n\nЦим форматом текстур користуються такі ігри, як Astral Chain, Bayonetta 3, Fire Emblem Engage, Metroid Prime Remastered, Super Mario Bros. Wonder і The Legend of Zelda: Tears of the Kingdom.\n\nЦі ігри, скоріше всього крашнуться на відеокартах з розміром VRAM в 4 Гб і менше.\n\nВмикайте тільки якщо у Вас закінчується VRAM на цих іграх. Залиште на \"Вимкнути\", якщо не впевнені.", @@ -19790,6 +20614,7 @@ "pl_PL": "Preferowane GPU", "pt_BR": "GPU preferencial", "ru_RU": "Предпочтительный видеоадаптер", + "sv_SE": "Föredragen GPU", "th_TH": "GPU ที่ต้องการ", "tr_TR": "Kullanılan GPU", "uk_UA": "Бажаний GPU", @@ -19814,6 +20639,7 @@ "pl_PL": "Wybierz kartę graficzną, która będzie używana z backendem graficznym Vulkan.\n\nNie wpływa na GPU używane przez OpenGL.\n\nW razie wątpliwości ustaw flagę GPU jako \"dGPU\". Jeśli żadnej nie ma, pozostaw nietknięte.", "pt_BR": "Selecione a placa de vídeo que será usada com o backend gráfico Vulkan.\n\nNão afeta a GPU que OpenGL usará.\n\nSelecione \"dGPU\" em caso de dúvida. Se não houver nenhuma, não mexa.", "ru_RU": "Выберает видеоадаптер, который будет использоваться графическим бэкендом Vulkan.\n\nЭта настройка не влияет на видеоадаптер, который будет использоваться с OpenGL.\n\nЕсли вы не уверены что нужно выбрать, используйте графический процессор, помеченный как \"dGPU\". Если его нет, оставьте выбор по умолчанию.", + "sv_SE": "Välj grafikkortet som ska användas med Vulkan-grafikbakänden.\n\nPåverkar inte GPU:n som OpenGL använder.\n\nStäll in till den GPU som flaggats som \"dGPU\" om osäker. Om det inte finns någon, lämna orörd.", "th_TH": "เลือกการ์ดจอที่จะใช้กับแบ็กเอนด์กราฟิก Vulkan\n\nไม่ส่งผลต่อ GPU ที่ OpenGL จะใช้\n\nตั้งค่าเป็น GPU ที่ถูกตั้งค่าสถานะเป็น \"dGPU\" ถ้าหากคุณไม่แน่ใจ ,หากไม่มีก็ปล่อยทิ้งไว้โดยไม่ต้องแตะต้องมัน", "tr_TR": "Vulkan Grafik Arka Ucu ile kullanılacak Ekran Kartını Seçin.\n\nOpenGL'nin kullanacağı GPU'yu etkilemez.\n\n Emin değilseniz \"dGPU\" olarak işaretlenmiş GPU'ya ayarlayın. Eğer yoksa, dokunmadan bırakın.\n", "uk_UA": "Виберіть відеокарту, яка використовуватиметься з графічним сервером Vulkan.\n\nНе впливає на графічний процесор, який використовуватиме OpenGL.\n\nВстановіть графічний процесор, позначений як «dGPU», якщо не впевнені. Якщо такого немає, не чіпайте.", @@ -19838,6 +20664,7 @@ "pl_PL": "Wymagane Zrestartowanie Ryujinx", "pt_BR": "Reinicialização do Ryujinx necessária", "ru_RU": "Требуется перезапуск Ryujinx", + "sv_SE": "Omstart av Ryujinx krävs", "th_TH": "จำเป็นต้องรีสตาร์ท Ryujinx", "tr_TR": "Ryujinx'i Yeniden Başlatma Gerekli", "uk_UA": "Необхідно перезапустити Ryujinx", @@ -19862,6 +20689,7 @@ "pl_PL": "Zmieniono ustawienia Backendu Graficznego lub GPU. Będzie to wymagało ponownego uruchomienia", "pt_BR": "Configurações do backend gráfico ou da GPU foram alteradas. Uma reinicialização é necessária para que as mudanças tenham efeito.", "ru_RU": "Графический бэкенд или настройки графического процессора были изменены. Требуется перезапуск для вступления в силу изменений.", + "sv_SE": "Grafikbakänden eller GPU-inställningar har ändrats. Detta kräver en omstart", "th_TH": "การตั้งค่ากราฟิกเบื้องหลังหรือ GPU ได้รับการแก้ไขแล้ว สิ่งนี้จะต้องมีการรีสตาร์ทจึงจะสามารถใช้งานได้", "tr_TR": "Grafik Motoru ya da GPU ayarları değiştirildi. Bu işlemin uygulanması için yeniden başlatma gerekli.", "uk_UA": "Налаштування графічного сервера або GPU було змінено. Для цього знадобиться перезапуск", @@ -19886,6 +20714,7 @@ "pl_PL": "Czy chcesz zrestartować teraz?", "pt_BR": "Deseja reiniciar agora?", "ru_RU": "Перезапустить сейчас?", + "sv_SE": "Vill du starta om nu?", "th_TH": "คุณต้องการรีสตาร์ทตอนนี้หรือไม่?", "tr_TR": "Şimdi yeniden başlatmak istiyor musunuz?", "uk_UA": "Бажаєте перезапустити зараз?", @@ -19910,6 +20739,7 @@ "pl_PL": "Czy chcesz zaktualizować Ryujinx do najnowszej wersji?", "pt_BR": "Você quer atualizar o Ryujinx para a última versão?", "ru_RU": "Обновить Ryujinx до последней версии?", + "sv_SE": "Vill du uppdatera Ryujinx till senaste versionen?", "th_TH": "คุณต้องการอัพเดต Ryujinx เป็นเวอร์ชั่นล่าสุดหรือไม่?", "tr_TR": "Ryujinx'i en son sürüme güncellemek ister misiniz?", "uk_UA": "Бажаєте оновити Ryujinx до останньої версії?", @@ -19934,6 +20764,7 @@ "pl_PL": "Zwiększ Głośność:", "pt_BR": "Aumentar volume:", "ru_RU": "Увеличить громкость:", + "sv_SE": "Öka volym:", "th_TH": "เพิ่มระดับเสียง:", "tr_TR": "Sesi Arttır:", "uk_UA": "Збільшити гучність:", @@ -19958,6 +20789,7 @@ "pl_PL": "Zmniejsz Głośność:", "pt_BR": "Diminuir volume:", "ru_RU": "Уменьшить громкость:", + "sv_SE": "Sänk volym:", "th_TH": "ลดระดับเสียง:", "tr_TR": "Sesi Azalt:", "uk_UA": "Зменшити гучність:", @@ -19982,6 +20814,7 @@ "pl_PL": "Włącz Macro HLE", "pt_BR": "Habilitar emulação de alto nível para Macros", "ru_RU": "Использовать макрос высокоуровневой эмуляции видеоадаптера", + "sv_SE": "Aktivera Macro HLE", "th_TH": "เปิดใช้งาน มาโคร HLE", "tr_TR": "Macro HLE'yi Aktifleştir", "uk_UA": "Увімкнути макрос HLE", @@ -20006,6 +20839,7 @@ "pl_PL": "Wysokopoziomowa emulacja kodu GPU Macro.\n\nPoprawia wydajność, ale może powodować błędy graficzne w niektórych grach.\n\nW razie wątpliwości pozostaw WŁĄCZONE.", "pt_BR": "Habilita emulação de alto nível de códigos Macro da GPU.\n\nMelhora a performance, mas pode causar problemas gráficos em alguns jogos.\n\nEm caso de dúvida, deixe ATIVADO.", "ru_RU": "Высокоуровневая эмуляции макрокода видеоадаптера.\n\nПовышает производительность, но может вызывать графические артефакты в некоторых играх.\n\nРекомендуется оставить включенным.", + "sv_SE": "Högnivåemulering av GPU Macro-kod.\n\nFörbättrar prestandan men kan orsaka grafiska glitches i vissa spel.\n\nLämna PÅ om du är osäker.", "th_TH": "การจำลองระดับสูงของโค้ดมาโคร GPU\n\nปรับปรุงประสิทธิภาพ แต่อาจทำให้เกิดข้อผิดพลาดด้านกราฟิกในบางเกม\n\nเปิดทิ้งไว้หากคุณไม่แน่ใจ", "tr_TR": "GPU Macro kodunun yüksek seviye emülasyonu.\n\nPerformansı arttırır, ama bazı oyunlarda grafik hatalarına yol açabilir.\n\nEmin değilseniz AÇIK bırakın.", "uk_UA": "Високорівнева емуляція коду макросу GPU.\n\nПокращує продуктивність, але може викликати графічні збої в деяких іграх.\n\nЗалиште увімкненим, якщо не впевнені.", @@ -20030,6 +20864,7 @@ "pl_PL": "Przekazywanie przestrzeni kolorów", "pt_BR": "Passagem de Espaço Cor", "ru_RU": "Пропускать цветовое пространство", + "sv_SE": "Genomströmning av färgrymd", "th_TH": "ทะลุผ่านพื้นที่สี", "tr_TR": "Renk Alanı Geçişi", "uk_UA": "Наскрізний колірний простір", @@ -20054,6 +20889,7 @@ "pl_PL": "Nakazuje API Vulkan przekazywać informacje o kolorze bez określania przestrzeni kolorów. Dla użytkowników z wyświetlaczami o szerokim zakresie kolorów może to skutkować bardziej żywymi kolorami, kosztem ich poprawności.", "pt_BR": "Direciona o backend Vulkan para passar informações de cores sem especificar um espaço de cores. Para usuários com telas de ampla gama, isso pode resultar em cores mais vibrantes, ao custo da correção de cores.", "ru_RU": "Направляет бэкенд Vulkan на передачу информации о цвете без указания цветового пространства. Для пользователей с экранами с расширенной гаммой данная настройка приводит к получению более ярких цветов за счет снижения корректности цветопередачи.", + "sv_SE": "Dirigerar Vulkan-bakänden att skicka genom färginformation utan att ange en färgrymd. För användare med breda gamut-skärmar kan detta resultera i mer levande färger på bekostnad av färgkorrekthet.", "th_TH": "สั่งให้แบ็กเอนด์ Vulkan ส่งผ่านข้อมูลสีโดยไม่ต้องระบุค่าของสี สำหรับผู้ใช้ที่มีการแสดงกระจายตัวของสี อาจส่งผลให้สีสดใสมากขึ้น โดยต้องแลกกับความถูกต้องของสี", "tr_TR": "Vulkan Backend'ini renk alanı belirtmeden renk bilgisinden geçmeye yönlendirir. Geniş gam ekranlı kullanıcılar için bu, renk doğruluğu pahasına daha canlı renklerle sonuçlanabilir.", "uk_UA": "Дозволяє серверу Vulkan передавати інформацію про колір без вказівки колірного простору. Для користувачів з екранами з широкою гамою це може призвести до більш яскравих кольорів, але шляхом втрати коректності передачі кольору.", @@ -20078,6 +20914,7 @@ "pl_PL": "Głoś", "pt_BR": "", "ru_RU": "Громкость", + "sv_SE": "Vol", "th_TH": "ระดับเสียง", "tr_TR": "Ses", "uk_UA": "Гуч.", @@ -20102,6 +20939,7 @@ "pl_PL": "Zarządzaj Zapisami", "pt_BR": "Gerenciar jogos salvos", "ru_RU": "Управление сохранениями", + "sv_SE": "Hantera sparade spel", "th_TH": "จัดการบันทึก", "tr_TR": "Kayıtları Yönet", "uk_UA": "Керувати збереженнями", @@ -20126,6 +20964,7 @@ "pl_PL": "Czy chcesz usunąć zapis użytkownika dla tej gry?", "pt_BR": "Deseja apagar o jogo salvo do usuário para este jogo?", "ru_RU": "Удалить сохранения для этой игры?", + "sv_SE": "Vill du ta bort användarsparade spel för detta spel?", "th_TH": "คุณต้องการลบบันทึกผู้ใช้สำหรับเกมนี้หรือไม่?", "tr_TR": "Bu oyun için kullanıcı kaydını silmek istiyor musunuz?", "uk_UA": "Ви хочете видалити збереження користувача для цієї гри?", @@ -20150,6 +20989,7 @@ "pl_PL": "Ta czynność nie jest odwracalna.", "pt_BR": "Esta ação não é reversível.", "ru_RU": "Данное действие является необратимым.", + "sv_SE": "Denna åtgärd går inte att ångra.", "th_TH": "การดำเนินการนี้ไม่สามารถย้อนกลับได้", "tr_TR": "Bu eylem geri alınamaz.", "uk_UA": "Цю дію не можна скасувати.", @@ -20174,6 +21014,7 @@ "pl_PL": "Zarządzaj Zapisami dla {0}", "pt_BR": "Gerenciar jogos salvos para {0}", "ru_RU": "Редактирование сохранений для {0} ({1})", + "sv_SE": "Hantera sparade spel för {0} ({1})", "th_TH": "จัดการบันทึกสำหรับ {0} ({1})", "tr_TR": "{0} için Kayıt Dosyalarını Yönet", "uk_UA": "Керувати збереженнями для {0}", @@ -20198,6 +21039,7 @@ "pl_PL": "Menedżer Zapisów", "pt_BR": "Gerenciador de jogos salvos", "ru_RU": "Менеджер сохранений", + "sv_SE": "Sparhanterare", "th_TH": "จัดการบันทึก", "tr_TR": "Kayıt Yöneticisi", "uk_UA": "Менеджер збереження", @@ -20222,6 +21064,7 @@ "pl_PL": "Nazwa", "pt_BR": "Nome", "ru_RU": "Название", + "sv_SE": "Namn", "th_TH": "ชื่อ", "tr_TR": "İsim", "uk_UA": "Назва", @@ -20246,6 +21089,7 @@ "pl_PL": "Rozmiar", "pt_BR": "Tamanho", "ru_RU": "Размер", + "sv_SE": "Storlek", "th_TH": "ขนาด", "tr_TR": "Boyut", "uk_UA": "Розмір", @@ -20270,6 +21114,7 @@ "pl_PL": "Wyszukaj", "pt_BR": "Buscar", "ru_RU": "Поиск", + "sv_SE": "Sök", "th_TH": "ค้นหา", "tr_TR": "Ara", "uk_UA": "Пошук", @@ -20294,6 +21139,7 @@ "pl_PL": "Odzyskaj Utracone Konta", "pt_BR": "Recuperar contas perdidas", "ru_RU": "Восстановить учетные записи", + "sv_SE": "Återskapa förlorade konton", "th_TH": "กู้คืนบัญชีที่สูญหาย", "tr_TR": "Kayıp Hesapları Kurtar", "uk_UA": "Відновлення профілів", @@ -20318,6 +21164,7 @@ "pl_PL": "Odzyskaj", "pt_BR": "Recuperar", "ru_RU": "Восстановление", + "sv_SE": "Återskapa", "th_TH": "กู้คืน", "tr_TR": "Kurtar", "uk_UA": "Відновити", @@ -20342,6 +21189,7 @@ "pl_PL": "Znaleziono zapisy dla następujących kont", "pt_BR": "Jogos salvos foram encontrados para as seguintes contas", "ru_RU": "Были найдены сохранения для следующих аккаунтов", + "sv_SE": "Sparade spel hittades för följande konton", "th_TH": "พบบันทึกสำหรับบัญชีดังต่อไปนี้", "tr_TR": "Aşağıdaki hesaplar için kayıtlar bulundu", "uk_UA": "Знайдено збереження для наступних облікових записів", @@ -20366,6 +21214,7 @@ "pl_PL": "Brak profili do odzyskania", "pt_BR": "Nenhum perfil para recuperar", "ru_RU": "Нет учетных записей для восстановления", + "sv_SE": "Inga profiler att återskapa", "th_TH": "ไม่มีโปรไฟล์ที่สามารถกู้คืนได้", "tr_TR": "Kurtarılacak profil bulunamadı", "uk_UA": "Немає профілів для відновлення", @@ -20390,6 +21239,7 @@ "pl_PL": "", "pt_BR": "Aplica anti-aliasing à renderização do jogo.\n\nFXAA borrará a maior parte da imagem, enquanto SMAA tentará identificar e suavizar bordas serrilhadas.\n\nNão é recomendado usar em conjunto com o filtro de escala FSR.\n\nEssa opção pode ser alterada enquanto o jogo está em execução clicando em \"Aplicar\" abaixo; basta mover a janela de configurações para o lado e experimentar até encontrar o visual preferido para o jogo.\n\nDeixe em NENHUM se estiver em dúvida.", "ru_RU": "Применимое сглаживание для рендера.\n\nFXAA размывает большую часть изображения, SMAA попытается найти \"зазубренные\" края и сгладить их.\n\nНе рекомендуется использовать вместе с масштабирующим фильтром FSR.\n\nЭта опция может быть изменена во время игры по нажатию \"Применить\" ниже; \nВы можете просто переместить окно настроек в сторону и поэкспериментировать, пока не найдёте подходящую настройку игры.\n\nРекомендуется использовать \"Нет\".", + "sv_SE": "Tillämpar anti-aliasing på spelrenderaren.\n\nFXAA kommer att sudda det mesta av bilden, medan SMAA kommer att försöka hitta taggiga kanter och släta ut dem.\n\nRekommenderas inte att använda tillsammans med skalfiltret FSR.\n\nDet här alternativet kan ändras medan ett spel körs genom att klicka på \"Tillämpa\" nedan. Du kan helt enkelt flytta inställningsfönstret åt sidan och experimentera tills du hittar ditt föredragna utseende för ett spel.\n\nLämna som INGEN om du är osäker.", "th_TH": "ใช้การลดรอยหยักกับการเรนเดอร์เกม\n\nFXAA จะเบลอภาพส่วนใหญ่ ในขณะที่ SMAA จะพยายามค้นหารอยหยักและปรับให้เรียบ\n\nไม่แนะนำให้ใช้ร่วมกับตัวกรองสเกล FSR\n\nตัวเลือกนี้สามารถเปลี่ยนแปลงได้ในขณะที่เกมกำลังทำงานอยู่โดยคลิก \"นำไปใช้\" ด้านล่าง คุณสามารถย้ายหน้าต่างการตั้งค่าไปด้านข้างและทดลองจนกว่าคุณจะพบรูปลักษณ์ที่คุณต้องการสำหรับเกม\n\nปล่อยไว้ที่ NONE หากไม่แน่ใจ", "tr_TR": "", "uk_UA": "Застосовує згладження до рендера гри.\n\nFXAA розмиє більшість зображення, а SMAA спробує знайти нерівні краї та згладити їх.\n\nНе рекомендується використовувати разом з фільтром масштабування FSR.\n\nЦю опцію можна міняти коли гра запущена кліком на \"Застосувати; ви можете відсунути вікно налаштувань і поекспериментувати з видом гри.\n\nЗалиште на \"Немає\", якщо не впевнені.", @@ -20414,6 +21264,7 @@ "pl_PL": "Antyaliasing:", "pt_BR": "Anti-serrilhado:", "ru_RU": "Сглаживание:", + "sv_SE": "Antialiasing:", "th_TH": "ลดการฉีกขาดของภาพ:", "tr_TR": "Kenar Yumuşatma:", "uk_UA": "Згладжування:", @@ -20438,6 +21289,7 @@ "pl_PL": "Filtr skalowania:", "pt_BR": "Filtro de escala:", "ru_RU": "Интерполяция:", + "sv_SE": "Skalningsfilter:", "th_TH": "ปรับขนาดตัวกรอง:", "tr_TR": "Ölçekleme Filtresi:", "uk_UA": "Фільтр масштабування:", @@ -20462,6 +21314,7 @@ "pl_PL": "Choose the scaling filter that will be applied when using resolution scale.\n\nBilinear works well for 3D games and is a safe default option.\n\nNearest is recommended for pixel art games.\n\nFSR 1.0 is merely a sharpening filter, not recommended for use with FXAA or SMAA.\n\nThis option can be changed while a game is running by clicking \"Apply\" below; you can simply move the settings window aside and experiment until you find your preferred look for a game.\n\nLeave on BILINEAR if unsure.", "pt_BR": "Escolha o filtro de escala que será aplicado ao usar a escala de resolução.\n\nBilinear funciona bem para jogos 3D e é uma opção padrão segura.\n\nNearest é recomendado para jogos em pixel art.\n\nFSR 1.0 é apenas um filtro de nitidez, não recomendado para uso com FXAA ou SMAA.\n\nEssa opção pode ser alterada enquanto o jogo está em execução, clicando em \"Aplicar\" abaixo; basta mover a janela de configurações para o lado e experimentar até encontrar o visual preferido para o jogo.\n\nMantenha em BILINEAR se estiver em dúvida.", "ru_RU": "Фильтрация текстур, которая будет применяться при масштабировании.\n\nБилинейная хорошо работает для 3D-игр и является настройкой по умолчанию.\n\nСтупенчатая рекомендуется для пиксельных игр.\n\nFSR это фильтр резкости, который не рекомендуется использовать с FXAA или SMAA.\n\nЭта опция может быть изменена во время игры по нажатию кнопки \"Применить\" ниже; \nВы можете просто переместить окно настроек в сторону и поэкспериментировать, пока не подберете подходящие настройки для конкретной игры.\n\nРекомендуется использовать \"Билинейная\".", + "sv_SE": "Välj det skalfilter som ska tillämpas vid användning av upplösningsskala.\n\nBilinjär fungerar bra för 3D-spel och är ett säkert standardalternativ.\n\nNärmast rekommenderas för pixel art-spel.\n\nFSR 1.0 är bara ett skarpningsfilter, rekommenderas inte för FXAA eller SMAA.\n\nOmrådesskalning rekommenderas vid nedskalning av upplösning som är större än utdatafönstret. Det kan användas för att uppnå en supersamplad anti-alias-effekt vid nedskalning med mer än 2x.\n\nDetta alternativ kan ändras medan ett spel körs genom att klicka på \"Tillämpa\" nedan. du kan helt enkelt flytta inställningsfönstret åt sidan och experimentera tills du hittar ditt föredragna utseende för ett spel.\n\nLämna som BILINJÄR om du är osäker.", "th_TH": "เลือกตัวกรองสเกลที่จะใช้เมื่อใช้สเกลความละเอียด\n\nBilinear ทำงานได้ดีกับเกม 3D และเป็นตัวเลือกเริ่มต้นที่ปลอดภัย\n\nแนะนำให้ใช้เกมภาพพิกเซลที่ใกล้เคียงที่สุด\n\nFSR 1.0 เป็นเพียงตัวกรองความคมชัด ไม่แนะนำให้ใช้กับ FXAA หรือ SMAA\n\nตัวเลือกนี้สามารถเปลี่ยนแปลงได้ในขณะที่เกมกำลังทำงานอยู่โดยคลิก \"นำไปใช้\" ด้านล่าง คุณสามารถย้ายหน้าต่างการตั้งค่าไปด้านข้างและทดลองจนกว่าคุณจะพบรูปลักษณ์ที่คุณต้องการสำหรับเกม", "tr_TR": "Choose the scaling filter that will be applied when using resolution scale.\n\nBilinear works well for 3D games and is a safe default option.\n\nNearest is recommended for pixel art games.\n\nFSR 1.0 is merely a sharpening filter, not recommended for use with FXAA or SMAA.\n\nThis option can be changed while a game is running by clicking \"Apply\" below; you can simply move the settings window aside and experiment until you find your preferred look for a game.\n\nLeave on BILINEAR if unsure.", "uk_UA": "Виберіть фільтр масштабування, що використається при збільшенні роздільної здатності.\n\n\"Білінійний\" добре виглядає в 3D іграх, і хороше налаштування за умовчуванням.\n\n\"Найближчий\" рекомендується для ігор з піксель-артом.\n\n\"FSR 1.0\" - це просто фільтр різкості, не рекомендується використовувати разом з FXAA або SMAA.\n\nЦю опцію можна міняти коли гра запущена кліком на \"Застосувати; ви можете відсунути вікно налаштувань і поекспериментувати з видом гри.\n\nЗалиште на \"Білінійний\", якщо не впевнені.", @@ -20486,6 +21339,7 @@ "pl_PL": "Dwuliniowe", "pt_BR": "", "ru_RU": "Билинейная", + "sv_SE": "Bilinjär", "th_TH": "", "tr_TR": "", "uk_UA": "Білінійний", @@ -20510,6 +21364,7 @@ "pl_PL": "Najbliższe", "pt_BR": "", "ru_RU": "Ступенчатая", + "sv_SE": "Närmaste", "th_TH": "ใกล้สุด", "tr_TR": "", "uk_UA": "Найближчий", @@ -20534,6 +21389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "FSR", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -20558,6 +21414,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Yta", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -20582,6 +21439,7 @@ "pl_PL": "Poziom", "pt_BR": "Nível", "ru_RU": "Уровень", + "sv_SE": "Nivå", "th_TH": "ระดับ", "tr_TR": "Seviye", "uk_UA": "Рівень", @@ -20606,6 +21464,7 @@ "pl_PL": "Ustaw poziom ostrzeżenia FSR 1.0. Wyższy jest ostrzejszy.", "pt_BR": "Defina o nível de nitidez do FSR 1.0. Quanto maior, mais nítido.", "ru_RU": "Выбор режима работы FSR 1.0. Выше - четче.", + "sv_SE": "Ställ in nivå för FSR 1.0 sharpening. Högre är skarpare.", "th_TH": "ตั้งค่าระดับความคมชัด FSR 1.0 ยิ่งสูงกว่าจะยิ่งคมชัดกว่า", "tr_TR": "", "uk_UA": "Встановити рівень різкості в FSR 1.0. Чим вище - тим різкіше.", @@ -20630,6 +21489,7 @@ "pl_PL": "SMAA Niskie", "pt_BR": "SMAA Baixo", "ru_RU": "SMAA Низкое", + "sv_SE": "SMAA låg", "th_TH": "SMAA ต่ำ", "tr_TR": "Düşük SMAA", "uk_UA": "SMAA Низький", @@ -20654,6 +21514,7 @@ "pl_PL": "SMAA Średnie", "pt_BR": "SMAA Médio", "ru_RU": "SMAA Среднее", + "sv_SE": "SMAA medium", "th_TH": "SMAA ปานกลาง", "tr_TR": "Orta SMAA", "uk_UA": "SMAA Середній", @@ -20678,6 +21539,7 @@ "pl_PL": "SMAA Wysokie", "pt_BR": "SMAA Alto", "ru_RU": "SMAA Высокое", + "sv_SE": "SMAA hög", "th_TH": "SMAA สูง", "tr_TR": "Yüksek SMAA", "uk_UA": "SMAA Високий", @@ -20702,6 +21564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "SMAA Ультра", + "sv_SE": "SMAA ultra", "th_TH": "SMAA สูงมาก", "tr_TR": "En Yüksek SMAA", "uk_UA": "SMAA Ультра", @@ -20726,6 +21589,7 @@ "pl_PL": "Edytuj użytkownika", "pt_BR": "Editar usuário", "ru_RU": "Редактирование пользователя", + "sv_SE": "Redigera användare", "th_TH": "แก้ไขผู้ใช้", "tr_TR": "Kullanıcıyı Düzenle", "uk_UA": "Редагувати користувача", @@ -20750,6 +21614,7 @@ "pl_PL": "Utwórz użytkownika", "pt_BR": "Criar usuário", "ru_RU": "Создание пользователя", + "sv_SE": "Skapa användare", "th_TH": "สร้างผู้ใช้", "tr_TR": "Kullanıcı Oluştur", "uk_UA": "Створити користувача", @@ -20774,6 +21639,7 @@ "pl_PL": "Interfejs sieci:", "pt_BR": "Interface de rede:", "ru_RU": "Сетевой интерфейс:", + "sv_SE": "Nätverksgränssnitt:", "th_TH": "เชื่อมต่อเครือข่าย:", "tr_TR": "Ağ Bağlantısı:", "uk_UA": "Мережевий інтерфейс:", @@ -20798,6 +21664,7 @@ "pl_PL": "Interfejs sieciowy używany dla funkcji LAN/LDN.\n\nw połączeniu z VPN lub XLink Kai i grą z obsługą sieci LAN, może być użyty do spoofowania połączenia z tą samą siecią przez Internet.\n\nZostaw DOMYŚLNE, jeśli nie ma pewności.", "pt_BR": "A interface de rede usada para recursos de LAN/LDN.\n\nEm conjunto com uma VPN ou XLink Kai e um jogo com suporte a LAN, pode ser usada para simular uma conexão na mesma rede pela Internet.\n\nMantenha em PADRÃO se estiver em dúvida.", "ru_RU": "Сетевой интерфейс, используемый для функций LAN/LDN.\n\nМожет использоваться для игры через интернет в сочетании с VPN или XLink Kai и игрой с поддержкой LAN.\n\nРекомендуется использовать \"По умолчанию\".", + "sv_SE": "Nätverksgränssnittet som används för LAN/LDN-funktioner.\n\nTillsammans med en VPN eller XLink Kai och ett spel med LAN-stöd så kan detta användas för att spoofa en same-network-anslutning över internet.\n\nLämna som STANDARD om du är osäker.", "th_TH": "อินเทอร์เฟซเครือข่ายที่ใช้สำหรับคุณสมบัติ LAN/LDN\n\nเมื่อใช้ร่วมกับ VPN หรือ XLink Kai และเกมที่รองรับ LAN สามารถใช้เพื่อปลอมการเชื่อมต่อเครือข่ายเดียวกันผ่านทางอินเทอร์เน็ต\n\nปล่อยให้เป็น ค่าเริ่มต้น หากคุณไม่แน่ใจ", "tr_TR": "", "uk_UA": "Мережевий інтерфейс, що використовується для LAN/LDN.\n\nРазом з VPN або XLink Kai, і грою що підтримує LAN, може імітувати з'єднання в однаковій мережі через Інтернет.", @@ -20822,6 +21689,7 @@ "pl_PL": "Domyślny", "pt_BR": "Padrão", "ru_RU": "По умолчанию", + "sv_SE": "Standard", "th_TH": "ค่าเริ่มต้น", "tr_TR": "Varsayılan", "uk_UA": "Стандартний", @@ -20846,6 +21714,7 @@ "pl_PL": "Pakuje Shadery ", "pt_BR": "Empacotamento de Shaders", "ru_RU": "Упаковка шейдеров", + "sv_SE": "Paketering av Shaders", "th_TH": "รวม Shaders เข้าด้วยกัน", "tr_TR": "Gölgeler Paketleniyor", "uk_UA": "Пакування шейдерів", @@ -20870,6 +21739,7 @@ "pl_PL": "Zobacz listę zmian na GitHubie", "pt_BR": "Ver mudanças no GitHub", "ru_RU": "Список изменений на GitHub", + "sv_SE": "Visa ändringslogg på GitHub", "th_TH": "ดูประวัติการเปลี่ยนแปลงบน GitHub", "tr_TR": "GitHub'da Değişiklikleri Görüntüle", "uk_UA": "Переглянути журнал змін на GitHub", @@ -20894,6 +21764,7 @@ "pl_PL": "Kliknij, aby otworzyć listę zmian dla tej wersji w domyślnej przeglądarce.", "pt_BR": "Clique para abrir o relatório de alterações para esta versão no seu navegador padrão.", "ru_RU": "Нажмите, чтобы открыть список изменений для этой версии", + "sv_SE": "Klicka för att öppna ändringsloggen för denna version i din standardwebbläsare.", "th_TH": "คลิกเพื่อเปิดประวัติการเปลี่ยนแปลงสำหรับเวอร์ชั่นนี้ บนเบราว์เซอร์เริ่มต้นของคุณ", "tr_TR": "Kullandığınız versiyon için olan değişiklikleri varsayılan tarayıcınızda görmek için tıklayın", "uk_UA": "Клацніть, щоб відкрити журнал змін для цієї версії у стандартному браузері.", @@ -20918,6 +21789,7 @@ "pl_PL": "Gra Wieloosobowa", "pt_BR": "", "ru_RU": "Мультиплеер", + "sv_SE": "Flerspelare", "th_TH": "ผู้เล่นหลายคน", "tr_TR": "Çok Oyunculu", "uk_UA": "Мережева гра", @@ -20942,6 +21814,7 @@ "pl_PL": "Tryb:", "pt_BR": "Modo:", "ru_RU": "Режим:", + "sv_SE": "Läge:", "th_TH": "โหมด:", "tr_TR": "Mod:", "uk_UA": "Режим:", @@ -20966,6 +21839,7 @@ "pl_PL": "", "pt_BR": "Alterar o modo multiplayer LDN.\n\nLdnMitm modificará a funcionalidade de jogo sem fio/local nos jogos para funcionar como se fosse LAN, permitindo conexões locais, na mesma rede, com outras instâncias do Ryujinx e consoles Nintendo Switch hackeados que possuem o módulo ldn_mitm instalado.\n\nO multiplayer exige que todos os jogadores estejam na mesma versão do jogo (ex.: Super Smash Bros. Ultimate v13.0.1 não consegue se conectar à v13.0.0).\n\nDeixe DESATIVADO se estiver em dúvida.", "ru_RU": "Меняет многопользовательский режим LDN.\n\nLdnMitm модифицирует функциональность локальной беспроводной/игры на одном устройстве в играх, позволяя играть с другими пользователями Ryujinx или взломанными консолями Nintendo Switch с установленным модулем ldn_mitm, находящимися в одной локальной сети друг с другом.\n\nМногопользовательская игра требует наличия у всех игроков одной и той же версии игры (т.е. Super Smash Bros. Ultimate v13.0.1 не может подключиться к v13.0.0).\n\nРекомендуется оставить отключенным.", + "sv_SE": "Ändra LDN-flerspelarläge\n\nLdnMitm kommer att ändra lokal funktionalitet för trådlös/lokalt spel att fungera som om det vore ett LAN, vilket ger stöd för anslutningar med local och same-network med andra Ryujinx-instanser och hackade Nintendo Switch-konsoller som har modulen ldn_mitm installerad.\n\nFlerspelare kräver att alla spelare har samma spelversion (t.ex. Super Smash Bros. Ultimate v13.0.1 kan inte ansluta till v13.0.0).\n\nLämna INAKTIVERAD om du är osäker.", "th_TH": "เปลี่ยนโหมดผู้เล่นหลายคนของ LDN\n\nLdnMitm จะปรับเปลี่ยนฟังก์ชันการเล่นแบบไร้สาย/ภายใน จะให้เกมทำงานเหมือนกับว่าเป็น LAN ช่วยให้สามารถเชื่อมต่อภายในเครือข่ายเดียวกันกับอินสแตนซ์ Ryujinx อื่น ๆ และคอนโซล Nintendo Switch ที่ถูกแฮ็กซึ่งมีโมดูล ldn_mitm ติดตั้งอยู่\n\nผู้เล่นหลายคนต้องการให้ผู้เล่นทุกคนอยู่ในเกมเวอร์ชันเดียวกัน (เช่น Super Smash Bros. Ultimate v13.0.1 ไม่สามารถเชื่อมต่อกับ v13.0.0)\n\nปล่อยให้ปิดการใช้งานหากไม่แน่ใจ", "tr_TR": "", "uk_UA": "Змінити LDN мультиплеєру.\n\nLdnMitm змінить функціонал бездротової/локальної гри в іграх, щоб вони працювали так, ніби це LAN, що дозволяє локальні підключення в тій самій мережі з іншими екземплярами Ryujinx та хакнутими консолями Nintendo Switch, які мають встановлений модуль ldn_mitm.\n\nМультиплеєр вимагає, щоб усі гравці були на одній і тій же версії гри (наприклад Super Smash Bros. Ultimate v13.0.1 не зможе під'єднатися до v13.0.0).\n\nЗалиште на \"Вимкнено\", якщо не впевнені, ", @@ -20990,6 +21864,7 @@ "pl_PL": "Wyłączone", "pt_BR": "Desativado", "ru_RU": "Отключено", + "sv_SE": "Inaktiverad", "th_TH": "ปิดใช้งาน", "tr_TR": "Devre Dışı", "uk_UA": "Вимкнено", @@ -21014,6 +21889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "ldn_mitm", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21038,6 +21914,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "RyuLDN", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21062,6 +21939,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Inaktivera P2P-nätverkshosting (kan öka latens)", "th_TH": "", "tr_TR": "", "uk_UA": "Вимкнути хостинг P2P мережі (може збільшити затримку)", @@ -21086,6 +21964,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Inaktivera P2P-nätverkshosting, motparter kommer skickas genom masterservern isället för att ansluta direkt till dig.", "th_TH": "", "tr_TR": "", "uk_UA": "Вимкнути хостинг P2P мережі, піри будуть підключатися через майстер-сервер замість прямого з'єднання з вами.", @@ -21110,6 +21989,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Lösenfras för nätverk:", "th_TH": "", "tr_TR": "", "uk_UA": "Мережевий пароль:", @@ -21134,6 +22014,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Du kommer endast kunna se hostade spel med samma lösenfras som du.", "th_TH": "", "tr_TR": "", "uk_UA": "Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.", @@ -21158,6 +22039,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Ange en lösenfras i formatet Ryujinx-<8 hextecken>. Du kommer endast kunna se hostade spel med samma lösenfras som du.", "th_TH": "", "tr_TR": "", "uk_UA": "Введіть пароль у форматі Ryujinx-<8 символів>. Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.", @@ -21182,6 +22064,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "(publik)", "th_TH": "", "tr_TR": "", "uk_UA": "(публічний)", @@ -21206,6 +22089,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Generera slumpmässigt", "th_TH": "", "tr_TR": "", "uk_UA": "Згенерувати випадкову", @@ -21230,6 +22114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Genererar en ny lösenfras som kan delas med andra spelare.", "th_TH": "", "tr_TR": "", "uk_UA": "Генерує новий пароль, яким можна поділитися з іншими гравцями.", @@ -21254,6 +22139,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Töm", "th_TH": "", "tr_TR": "", "uk_UA": "Очистити", @@ -21278,6 +22164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Tömmer aktuell lösenfras och återgår till det publika nätverket.", "th_TH": "", "tr_TR": "", "uk_UA": "Очищає поточну пароль, повертаючись до публічної мережі.", @@ -21302,6 +22189,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Ogiltig lösenfras! Måste vara i formatet \"Ryujinx-<8 hextecken>\"", "th_TH": "", "tr_TR": "", "uk_UA": "Невірний пароль! Має бути в форматі \"Ryujinx-<8 символів>\"", @@ -21326,6 +22214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "VSync:", "th_TH": "", "tr_TR": "", "uk_UA": "Вертикальна синхронізація (VSync):", @@ -21350,6 +22239,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Aktivera anpassad uppdateringsfrekvens (experimentell)", "th_TH": "", "tr_TR": "", "uk_UA": "Увімкнути користувацьку частоту оновлення (Експериментально)", @@ -21374,6 +22264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Switch", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21398,6 +22289,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Obunden", "th_TH": "", "tr_TR": "", "uk_UA": "Безмежна", @@ -21422,6 +22314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Anpassad uppdateringsfrekvens", "th_TH": "", "tr_TR": "", "uk_UA": "Користувацька", @@ -21446,6 +22339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Emulerad vertikal synk. 'Switch' emulerar Switchens uppdateringsfrekvens på 60Hz. 'Obunden' är en obegränsad uppdateringsfrekvens.", "th_TH": "", "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень.", @@ -21470,6 +22364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Emulerad vertikal synk. 'Switch' emulerar Switchens uppdateringsfrekvens på 60Hz. 'Obunden' är en obegränsad uppdateringsfrekvens. 'Anpassad uppdateringsfrekvens' emulerar den angivna anpassade uppdateringsfrekvensen.", "th_TH": "", "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень. 'Користувацька' емулює вказану користувацьку частоту оновлення.", @@ -21494,6 +22389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Låter användaren ange en emulerad uppdateringsfrekvens. För vissa spel så kan detta snabba upp eller ner frekvensen för spellogiken. I andra spel så kan detta tillåta att bildfrekvensen kapas för delar av uppdateringsfrekvensen eller leda till oväntat beteende. Detta är en experimentell funktion utan några garantier för hur spelet påverkas. \n\nLämna AV om du är osäker.", "th_TH": "", "tr_TR": "", "uk_UA": "Дозволяє користувачу вказати емульовану частоту оновлення. У деяких іграх це може прискорити або сповільнити логіку гри. У інших іграх це може дозволити обмежити FPS на певні кратні частоти оновлення або призвести до непередбачуваної поведінки. Це експериментальна функція, без гарантій того, як це вплине на ігровий процес. \n\nЗалиште ВИМКНЕНИМ, якщо не впевнені.", @@ -21518,6 +22414,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Målvärde för anpassad uppdateringsfrekvens.", "th_TH": "", "tr_TR": "", "uk_UA": "Цільове значення користувацької частоти оновлення.", @@ -21542,6 +22439,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Anpassad uppdateringsfrekvens, som en procentdel av den normala uppdateringsfrekvensen för Switch.", "th_TH": "", "tr_TR": "", "uk_UA": "Користувацька частота оновлення, як відсоток від стандартної частоти оновлення Switch.", @@ -21566,6 +22464,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Anpassad uppdateringsfrekvens %:", "th_TH": "", "tr_TR": "", "uk_UA": "Користувацька частота оновлення %:", @@ -21590,6 +22489,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Värde för anpassad uppdateringsfrekvens:", "th_TH": "", "tr_TR": "", "uk_UA": "Значення користувацька частота оновлення:", @@ -21614,6 +22514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Intervall", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21638,6 +22539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Växla VSync-läge:", "th_TH": "", "tr_TR": "", "uk_UA": "Перемкнути VSync режим:", @@ -21662,6 +22564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Höj anpassad uppdateringsfrekvens", "th_TH": "", "tr_TR": "", "uk_UA": "Підвищити користувацьку частоту оновлення", @@ -21686,6 +22589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", + "sv_SE": "Sänk anpassad uppdateringsfrekvens", "th_TH": "", "tr_TR": "", "uk_UA": "Понизити користувацьку частоту оновлення", -- 2.47.1 From 153d1ef06b6f16aa0b21d1733471e941c63538d9 Mon Sep 17 00:00:00 2001 From: Elijah Fronzak Date: Sat, 28 Dec 2024 03:45:42 +0300 Subject: [PATCH 198/722] ru_RU locale update (#450) Co-authored-by: Evan Husted --- src/Ryujinx/Assets/locales.json | 554 ++++++++++++++++---------------- 1 file changed, 277 insertions(+), 277 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 6cebc1364..fc77cf458 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -88,7 +88,7 @@ "no_NO": "Mii-redigeringsapplet", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Апплет Mii Editor", "sv_SE": "Redigera Mii-applet", "th_TH": "", "tr_TR": "", @@ -338,7 +338,7 @@ "no_NO": "Ingen apper ble funnet i valgt fil.", "pl_PL": "", "pt_BR": "Nenhum aplicativo encontrado no arquivo selecionado.", - "ru_RU": "", + "ru_RU": "Приложения в выбранном файле не найдены", "sv_SE": "Inga applikationer hittades i vald fil.", "th_TH": "ไม่พบแอปพลิเคชั่นจากไฟล์ที่เลือก", "tr_TR": "", @@ -388,7 +388,7 @@ "no_NO": "Last inn DLC fra mappe", "pl_PL": "", "pt_BR": "Carregar DLC da Pasta", - "ru_RU": "", + "ru_RU": "Загрузить DLC из папки", "sv_SE": "Läs in DLC från mapp", "th_TH": "โหลด DLC จากโฟลเดอร์", "tr_TR": "", @@ -413,7 +413,7 @@ "no_NO": "Last inn titteloppdateringer fra mappe", "pl_PL": "", "pt_BR": "Carregar Atualizações de Jogo da Pasta", - "ru_RU": "", + "ru_RU": "Загрузить обновления из папки", "sv_SE": "Läs in titeluppdateringar från mapp", "th_TH": "โหลดไฟล์อัพเดตจากโฟลเดอร์", "tr_TR": "", @@ -738,7 +738,7 @@ "no_NO": "Skann en Amiibo (fra bin fil)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Сканировать Amiibo (из папки Bin)", "sv_SE": "Skanna en Amiibo (från bin-fil)", "th_TH": "", "tr_TR": "", @@ -863,7 +863,7 @@ "no_NO": "Installere nøkler", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Установить ключи", "sv_SE": "Installera nycklar", "th_TH": "", "tr_TR": "", @@ -888,7 +888,7 @@ "no_NO": "Installer nøkler fra KEYS eller ZIP", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Установить ключи из файла KEYS или ZIP", "sv_SE": "Installera nycklar från KEYS eller ZIP", "th_TH": "", "tr_TR": "", @@ -913,7 +913,7 @@ "no_NO": "Installer nøkler fra en mappe", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Установить ключи из папки", "sv_SE": "Installera nycklar från en katalog", "th_TH": "", "tr_TR": "", @@ -1013,7 +1013,7 @@ "no_NO": "Trim XCI-filer", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Уменьшить размер XCI файлов", "sv_SE": "Optimera XCI-filer", "th_TH": "", "tr_TR": "", @@ -1085,11 +1085,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "720p", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "720p", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1110,11 +1110,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "1080p", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "1080p", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1139,7 +1139,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "1440p", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1164,7 +1164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "2160p", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -1238,7 +1238,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "FAQ и Руководства", "sv_SE": "Frågor, svar och guider", "th_TH": "", "tr_TR": "", @@ -1263,7 +1263,7 @@ "no_NO": "FAQ- og feilsøkingsside", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "FAQ & Устранение неполадок", "sv_SE": "Frågor, svar och felsökningssida", "th_TH": "", "tr_TR": "", @@ -1288,7 +1288,7 @@ "no_NO": "Åpner FAQ- og feilsøkingssiden på den offisielle Ryujinx-wikien", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Открывает страницы с FAQ и Устранением неполадок на официальной странице вики Ryujinx", "sv_SE": "Öppnar Frågor, svar och felsökningssidan på den officiella Ryujinx-wikin", "th_TH": "", "tr_TR": "", @@ -1313,7 +1313,7 @@ "no_NO": "Oppsett- og konfigurasjonsveiledning", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Руководство по установке и настройке", "sv_SE": "Konfigurationsguide", "th_TH": "", "tr_TR": "", @@ -1338,7 +1338,7 @@ "no_NO": "Åpner oppsett- og konfigurasjonsveiledningen på den offisielle Ryujinx-wikien", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Открывает страницу Руководство по установке и настройке на официальной странице вики Ryujinx", "sv_SE": "Öppnar konfigurationsguiden på den officiella Ryujinx-wikin", "th_TH": "", "tr_TR": "", @@ -1363,7 +1363,7 @@ "no_NO": "Flerspillerveiledning (LDN/LAN)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Гайд по мультиплееру (LDN/LAN)", "sv_SE": "Flerspelarguide (LDN/LAN)", "th_TH": "", "tr_TR": "", @@ -1388,7 +1388,7 @@ "no_NO": "Åpner flerspillerveiledningen på den offisielle Ryujinx-wikien", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Открывает гайд по мультиплееру на официальной странице вики Ryujinx", "sv_SE": "Öppnar flerspelarguiden på den officiella Ryujinx-wikin", "th_TH": "", "tr_TR": "", @@ -2210,10 +2210,10 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "ExeFS", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "ExeFS", "sv_SE": "ExeFS", "th_TH": "", "tr_TR": "", @@ -2260,10 +2260,10 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "RomFS", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "RomFS", "sv_SE": "RomFS", "th_TH": "", "tr_TR": "", @@ -2313,7 +2313,7 @@ "no_NO": "Logo", "pl_PL": "", "pt_BR": "", - "ru_RU": "Логотип", + "ru_RU": "Лого", "sv_SE": "Logotyp", "th_TH": "โลโก้", "tr_TR": "Simge", @@ -2538,7 +2538,7 @@ "no_NO": "Kontroller og trim XCI-filen", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Проверить и обрезать XCI файл", "sv_SE": "Kontrollera och optimera XCI-fil", "th_TH": "", "tr_TR": "", @@ -2563,7 +2563,7 @@ "no_NO": "Kontroller og trimm XCI-filen for å spare diskplass", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Проверить и обрезать XCI файл для уменьшения его размера", "sv_SE": "Kontrollera och optimera XCI-fil för att spara diskutrymme", "th_TH": "", "tr_TR": "", @@ -2638,7 +2638,7 @@ "no_NO": "Trimming av XCI-filen '{0}'", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Обрезается XCI файл '{0}'", "sv_SE": "Optimerar XCI-filen '{0}'", "th_TH": "", "tr_TR": "", @@ -3013,7 +3013,7 @@ "no_NO": "Vis tittellinje (krever omstart)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Показать строку заголовка (требуется перезапуск)", "sv_SE": "Visa titelrad (kräver omstart)", "th_TH": "", "tr_TR": "", @@ -3163,7 +3163,7 @@ "no_NO": "Autoload DLC/Updates-mapper", "pl_PL": "", "pt_BR": "Carregar Automaticamente Diretórios de DLC/Atualizações", - "ru_RU": "", + "ru_RU": "Автозагрузка папки с DLC/Обновлениями", "sv_SE": "Läs automatisk in DLC/speluppdateringar", "th_TH": "โหลดไดเรกทอรี DLC/ไฟล์อัปเดต อัตโนมัติ", "tr_TR": "", @@ -3188,7 +3188,7 @@ "no_NO": "DLC og oppdateringer som henviser til manglende filer, vil bli lastet ned automatisk", "pl_PL": "", "pt_BR": "DLCs e Atualizações que se referem a arquivos ausentes serão descarregadas automaticamente", - "ru_RU": "", + "ru_RU": "DLC и обновления, которые ссылаются на отсутствующие файлы, будут выгружаться автоматически", "sv_SE": "DLC och speluppdateringar som refererar till saknade filer kommer inte att läsas in automatiskt", "th_TH": "", "tr_TR": "", @@ -3513,7 +3513,7 @@ "no_NO": "Systemspråk", "pl_PL": "Język systemu:", "pt_BR": "Idioma do sistema:", - "ru_RU": "Язык прошивки:", + "ru_RU": "Язык системы:", "sv_SE": "Systemspråk:", "th_TH": "ภาษาของระบบ:", "tr_TR": "Sistem Dili:", @@ -3613,7 +3613,7 @@ "no_NO": "Tysk", "pl_PL": "Niemiecki", "pt_BR": "Alemão", - "ru_RU": "Германский", + "ru_RU": "Немецкий", "sv_SE": "Tyska", "th_TH": "เยอรมัน", "tr_TR": "Almanca", @@ -3813,7 +3813,7 @@ "no_NO": "Taiwansk", "pl_PL": "Tajwański", "pt_BR": "Taiwanês", - "ru_RU": "Тайванский", + "ru_RU": "Тайваньский", "sv_SE": "Taiwanesiska", "th_TH": "จีนตัวเต็ม (ไต้หวัน)", "tr_TR": "Tayvanca", @@ -3838,7 +3838,7 @@ "no_NO": "Britisk engelsk", "pl_PL": "Angielski (Wielka Brytania)", "pt_BR": "Inglês britânico", - "ru_RU": "Английский (Британия)", + "ru_RU": "Английский (Великобритания)", "sv_SE": "Brittisk engelska", "th_TH": "อังกฤษ (บริติช)", "tr_TR": "İngiliz İngilizcesi", @@ -3963,7 +3963,7 @@ "no_NO": "System Tidssone:", "pl_PL": "Strefa czasowa systemu:", "pt_BR": "Fuso horário do sistema:", - "ru_RU": "Часовой пояс прошивки:", + "ru_RU": "Часовой пояс системы:", "sv_SE": "Systemets tidszon:", "th_TH": "เขตเวลาของระบบ:", "tr_TR": "Sistem Saat Dilimi:", @@ -3988,7 +3988,7 @@ "no_NO": "System tid:", "pl_PL": "Czas systemu:", "pt_BR": "Hora do sistema:", - "ru_RU": "Системное время в прошивке:", + "ru_RU": "Системное время:", "sv_SE": "Systemtid:", "th_TH": "เวลาของระบบ:", "tr_TR": "Sistem Saati:", @@ -4013,7 +4013,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Повторная синхронизация с датой и временем на компьютере", "sv_SE": "Återsynka till datorns datum och tid", "th_TH": "", "tr_TR": "", @@ -4063,7 +4063,7 @@ "no_NO": "PPTC med lavt strømforbruk", "pl_PL": "Low-power PPTC", "pt_BR": "Low-power PPTC", - "ru_RU": "Low-power PPTC", + "ru_RU": "PPTC с низким электропотреблением", "sv_SE": "PPTC med låg strömförbrukning", "th_TH": "PPTC แบบพลังงานตํ่า", "tr_TR": "Low-power PPTC", @@ -4160,10 +4160,10 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "OpenAL", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "OpenAL", "sv_SE": "OpenAL", "th_TH": "", "tr_TR": "", @@ -4188,7 +4188,7 @@ "no_NO": "Lyd Inn/Ut", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "SoundIO", "sv_SE": "SoundIO", "th_TH": "", "tr_TR": "", @@ -4210,10 +4210,10 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "SDL2", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "SDL2", "sv_SE": "SDL2", "th_TH": "", "tr_TR": "", @@ -4313,7 +4313,7 @@ "no_NO": "4GB", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "4ГиБ", "sv_SE": "4GiB", "th_TH": "", "tr_TR": "", @@ -4338,7 +4338,7 @@ "no_NO": "6GB", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "6ГиБ", "sv_SE": "6GiB", "th_TH": "", "tr_TR": "", @@ -4363,7 +4363,7 @@ "no_NO": "8GB", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "8ГиБ", "sv_SE": "8GiB", "th_TH": "", "tr_TR": "", @@ -4388,7 +4388,7 @@ "no_NO": "12GB", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "12ГиБ", "sv_SE": "12GiB", "th_TH": "", "tr_TR": "", @@ -4588,7 +4588,7 @@ "no_NO": "2x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "2x", "sv_SE": "2x", "th_TH": "", "tr_TR": "", @@ -4613,7 +4613,7 @@ "no_NO": "4x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "4x", "sv_SE": "4x", "th_TH": "", "tr_TR": "", @@ -4638,7 +4638,7 @@ "no_NO": "8x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "8x", "sv_SE": "8x", "th_TH": "", "tr_TR": "", @@ -4663,7 +4663,7 @@ "no_NO": "16x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "16x", "sv_SE": "16x", "th_TH": "", "tr_TR": "", @@ -4763,7 +4763,7 @@ "no_NO": "2x (1440p/2160p)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "2x (1440p/2160p)", "sv_SE": "2x (1440p/2160p)", "th_TH": "", "tr_TR": "", @@ -4788,7 +4788,7 @@ "no_NO": "3x (2160p/3240p)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "3x (2160p/3240p)", "sv_SE": "3x (2160p/3240p)", "th_TH": "", "tr_TR": "", @@ -4860,10 +4860,10 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "4:3", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "4:3", "sv_SE": "4:3", "th_TH": "", "tr_TR": "", @@ -4885,10 +4885,10 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "16:9", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "16:9", "sv_SE": "16:9", "th_TH": "", "tr_TR": "", @@ -4910,10 +4910,10 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "16:10", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "16:10", "sv_SE": "16:10", "th_TH": "", "tr_TR": "", @@ -4935,10 +4935,10 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "21:9", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "21:9", "sv_SE": "21:9", "th_TH": "", "tr_TR": "", @@ -4963,7 +4963,7 @@ "no_NO": "32:9", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "32:9", "sv_SE": "32:9", "th_TH": "", "tr_TR": "", @@ -5652,7 +5652,7 @@ "Translations": { "ar_SA": "موافق", "de_DE": "", - "el_GR": "ΟΚ", + "el_GR": "", "en_US": "OK", "es_ES": "Aceptar", "fr_FR": "", @@ -5660,11 +5660,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "확인", - "no_NO": "OK", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Ок", - "sv_SE": "Ok", + "ru_RU": "", + "sv_SE": "", "th_TH": "ตกลง", "tr_TR": "Tamam", "uk_UA": "Гаразд", @@ -6113,7 +6113,7 @@ "no_NO": "", "pl_PL": "Pro Kontroler", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Pro Controller", "sv_SE": "Pro Controller", "th_TH": "โปรคอนโทรลเลอร์", "tr_TR": "Profesyonel Kumanda", @@ -6360,11 +6360,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "A", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "A", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6385,11 +6385,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "B", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "B", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6410,11 +6410,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "X", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "X", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6435,11 +6435,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "Y", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "Y", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6464,7 +6464,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "+", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6489,7 +6489,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "-", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -6513,7 +6513,7 @@ "no_NO": "Retningsfelt", "pl_PL": "Krzyżak (D-Pad)", "pt_BR": "Direcional", - "ru_RU": "Кнопки направления", + "ru_RU": "Кнопки направления (D-pad)", "sv_SE": "Riktningsknappar", "th_TH": "ปุ่มลูกศร", "tr_TR": "Yön Tuşları", @@ -7039,7 +7039,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "L", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7064,7 +7064,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "R", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7089,7 +7089,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "ZL", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7114,7 +7114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "ZR", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7139,7 +7139,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "SL", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7164,7 +7164,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "SR", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7189,7 +7189,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "SL", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -7214,7 +7214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "", - "sv_SE": "SR", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8088,7 +8088,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Enter", "sv_SE": "Enter", "th_TH": "", "tr_TR": "", @@ -8113,7 +8113,7 @@ "no_NO": "Esc-tast", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Esc", "sv_SE": "Escape", "th_TH": "", "tr_TR": "Esc", @@ -8163,7 +8163,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Tab", "sv_SE": "Tab", "th_TH": "", "tr_TR": "", @@ -8188,7 +8188,7 @@ "no_NO": "Tilbaketast", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Backspace", "sv_SE": "Backspace", "th_TH": "", "tr_TR": "Geri tuşu", @@ -8213,7 +8213,7 @@ "no_NO": "Sett inn", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Insert", "sv_SE": "Insert", "th_TH": "", "tr_TR": "", @@ -8238,7 +8238,7 @@ "no_NO": "Slett", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Delete", "sv_SE": "Delete", "th_TH": "", "tr_TR": "", @@ -8263,7 +8263,7 @@ "no_NO": "Side opp", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Page Up", "sv_SE": "Page Up", "th_TH": "", "tr_TR": "", @@ -8288,7 +8288,7 @@ "no_NO": "Side ned", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Page Down", "sv_SE": "Page Down", "th_TH": "", "tr_TR": "", @@ -8313,7 +8313,7 @@ "no_NO": "Hjem", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Home", "sv_SE": "Home", "th_TH": "", "tr_TR": "", @@ -8338,7 +8338,7 @@ "no_NO": "Avslutt", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "End", "sv_SE": "End", "th_TH": "", "tr_TR": "", @@ -8363,7 +8363,7 @@ "no_NO": "Skiftelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Caps Lock", "sv_SE": "Caps Lock", "th_TH": "", "tr_TR": "", @@ -8388,7 +8388,7 @@ "no_NO": "Rullelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Scroll Lock", "sv_SE": "Scroll Lock", "th_TH": "", "tr_TR": "", @@ -8413,7 +8413,7 @@ "no_NO": "Skjermbilde", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Print Screen", "sv_SE": "Print Screen", "th_TH": "", "tr_TR": "", @@ -8438,7 +8438,7 @@ "no_NO": "Stans midlertidig", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Pause", "sv_SE": "Pause", "th_TH": "", "tr_TR": "", @@ -8463,7 +8463,7 @@ "no_NO": "Numerisk Lås", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Num Lock", "sv_SE": "Num Lock", "th_TH": "", "tr_TR": "", @@ -8488,7 +8488,7 @@ "no_NO": "Tøm", "pl_PL": "", "pt_BR": "", - "ru_RU": "Очистить", + "ru_RU": "", "sv_SE": "Töm", "th_TH": "", "tr_TR": "", @@ -8913,7 +8913,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "0", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8938,7 +8938,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "1", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8963,7 +8963,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "2", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8988,7 +8988,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "3", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9013,7 +9013,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "4", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9038,7 +9038,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "5", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9063,7 +9063,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "6", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9088,7 +9088,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "7", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9113,7 +9113,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "8", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9138,7 +9138,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "9", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9163,7 +9163,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "~", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9188,7 +9188,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "`", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9213,7 +9213,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "-", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9238,7 +9238,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "+", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9263,7 +9263,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "[", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9288,7 +9288,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "]", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9313,7 +9313,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": ";", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9363,7 +9363,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": ",", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9388,7 +9388,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": ".", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9413,7 +9413,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "/", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9738,7 +9738,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "-", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9763,7 +9763,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "+", "sv_SE": "", "th_TH": "", "tr_TR": "4", @@ -9788,7 +9788,7 @@ "no_NO": "Veiledning", "pl_PL": "", "pt_BR": "", - "ru_RU": "Кнопка Xbox", + "ru_RU": "Кнопка меню", "sv_SE": "Guide", "th_TH": "", "tr_TR": "Rehber", @@ -10288,7 +10288,7 @@ "no_NO": "Velg ett kallenavn", "pl_PL": "Wybierz pseudonim", "pt_BR": "Escolha um apelido", - "ru_RU": "Укажите никнейм", + "ru_RU": "Введите никнейм", "sv_SE": "Välj ett smeknamn", "th_TH": "เลือก ชื่อเล่น", "tr_TR": "Kullanıcı Adı Seç", @@ -10513,7 +10513,7 @@ "no_NO": "Kansellerer", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Отмена", "sv_SE": "Avbryter", "th_TH": "", "tr_TR": "", @@ -10538,7 +10538,7 @@ "no_NO": "Lukk", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Закрыть", "sv_SE": "Stäng", "th_TH": "", "tr_TR": "", @@ -10738,7 +10738,7 @@ "no_NO": "Se Profil", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Показать профиль", "sv_SE": "Visa profil", "th_TH": "", "tr_TR": "", @@ -10988,7 +10988,7 @@ "no_NO": "Automatisk", "pl_PL": "", "pt_BR": "Automático", - "ru_RU": "", + "ru_RU": "Авто", "sv_SE": "Automatiskt", "th_TH": "อัตโนมัติ", "tr_TR": "", @@ -11838,7 +11838,7 @@ "no_NO": "Vis endringslogg", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Показать список изменений", "sv_SE": "Visa ändringslogg", "th_TH": "", "tr_TR": "", @@ -12013,7 +12013,7 @@ "no_NO": "Omstart Kreves", "pl_PL": "Wymagane Ponowne Uruchomienie", "pt_BR": "Reinicialização necessária", - "ru_RU": "Требуется перезагрузка", + "ru_RU": "Требуется перезапуск", "sv_SE": "Omstart krävs", "th_TH": "จำเป็นต้องรีสตาร์ทเพื่อให้การอัพเดตสามารถให้งานได้", "tr_TR": "Yeniden Başlatma Gerekli", @@ -12038,7 +12038,7 @@ "no_NO": "Temaet har blitt lagret. En omstart kreves for å bruke temaet.", "pl_PL": "Motyw został zapisany. Aby zastosować motyw, konieczne jest ponowne uruchomienie.", "pt_BR": "O tema foi salvo. Uma reinicialização é necessária para aplicar o tema.", - "ru_RU": "Тема сохранена. Для применения темы требуется перезапуск.", + "ru_RU": "Тема сохранена. Для применения темы требуется выполнить перезапуск.", "sv_SE": "Temat har sparats. En omstart krävs för att verkställa ändringen.", "th_TH": "บันทึกธีมแล้ว จำเป็นต้องรีสตาร์ทเพื่อใช้ธีม", "tr_TR": "Tema kaydedildi. Temayı uygulamak için yeniden başlatma gerekiyor.", @@ -12063,7 +12063,7 @@ "no_NO": "Vil du starte på nytt", "pl_PL": "Czy chcesz uruchomić ponownie?", "pt_BR": "Deseja reiniciar?", - "ru_RU": "Хотите перезапустить", + "ru_RU": "Выполнить перезапуск?", "sv_SE": "Vill du starta om", "th_TH": "คุณต้องการรีสตาร์ทหรือไม่?", "tr_TR": "Yeniden başlatmak ister misiniz", @@ -12313,7 +12313,7 @@ "no_NO": "XCI Trimmervindu", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Окно триммера XCI", "sv_SE": "XCI-optimerare", "th_TH": "", "tr_TR": "", @@ -12438,7 +12438,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "{0}: {1}", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -12513,7 +12513,7 @@ "no_NO": "", "pl_PL": "API Amiibo", "pt_BR": "API Amiibo", - "ru_RU": "", + "ru_RU": "API Amiibo", "sv_SE": "Amiibo-API", "th_TH": "", "tr_TR": "", @@ -13038,7 +13038,7 @@ "no_NO": "En ugyldig Keys-fil ble funnet i {0}.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "В {0} были найдены некорректные ключи", "sv_SE": "En ogiltig nyckelfil hittades i {0}", "th_TH": "", "tr_TR": "", @@ -13063,7 +13063,7 @@ "no_NO": "Installere nøkler", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Установить ключи", "sv_SE": "Installera nycklar", "th_TH": "", "tr_TR": "", @@ -13088,7 +13088,7 @@ "no_NO": "Ny Keys-fil vil bli installert.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Будут установлены новые ключи.", "sv_SE": "Ny nyckelfil kommer att installeras.", "th_TH": "", "tr_TR": "", @@ -13113,7 +13113,7 @@ "no_NO": "\n\nDette kan erstatte noen av de nåværende installerte nøklene.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "\n\nЭто действие может перезаписать установленные ключи.", "sv_SE": "\n\nDetta kan ersätta några av de redan installerade nycklarna.", "th_TH": "", "tr_TR": "", @@ -13138,7 +13138,7 @@ "no_NO": "\n\nVil du fortsette?", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "\n\nХотите продолжить?", "sv_SE": "\n\nVill du fortsätta?", "th_TH": "", "tr_TR": "", @@ -13163,7 +13163,7 @@ "no_NO": "Installere nøkler...", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Установка ключей...", "sv_SE": "Installerar nycklar...", "th_TH": "", "tr_TR": "", @@ -13188,7 +13188,7 @@ "no_NO": "Ny Keys -fil installert.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Новые ключи были успешно установлены.", "sv_SE": "Ny nyckelfil installerades.", "th_TH": "", "tr_TR": "", @@ -13538,7 +13538,7 @@ "no_NO": "For optimal ytelse er det anbefalt å deaktivere spor-logging. Ønsker du å deaktivere spor-logging nå?", "pl_PL": "Aby uzyskać optymalną wydajność, zaleca się wyłączenie rejestrowania śledzenia. Czy chcesz teraz wyłączyć rejestrowanie śledzenia?", "pt_BR": "Para melhor performance, é recomendável desabilitar os logs de depuração. Gostaria de desabilitar os logs de depuração agora?", - "ru_RU": "Для оптимальной производительности рекомендуется отключить ведение журнала отладки. Хотите отключить ведение журнала отладки?", + "ru_RU": "Для оптимальной производительности рекомендуется отключить ведение журнала отладки. Хотите отключить?", "sv_SE": "Det rekommenderas att inaktivera spårloggning för optimal prestanda. Vill du inaktivera spårloggning nu?", "th_TH": "เพื่อประสิทธิภาพสูงสุด ขอแนะนำให้ปิดใช้งานการบันทึกการติดตาม คุณต้องการปิดใช้การบันทึกการติดตามตอนนี้หรือไม่?", "tr_TR": "En iyi performans için trace loglama'nın devre dışı bırakılması tavsiye edilir. Trace loglama seçeneğini şimdi devre dışı bırakmak ister misiniz?", @@ -13713,7 +13713,7 @@ "no_NO": "Ryujinx må startes på nytt etter at dette alternativet er endret slik at det tas i bruk helt. Avhengig av plattformen din, må du kanskje manuelt skru av driveren's egen flertråder når du bruker Ryujinx's.", "pl_PL": "Ryujinx musi zostać ponownie uruchomiony po zmianie tej opcji, aby działał w pełni. W zależności od platformy może być konieczne ręczne wyłączenie sterownika wielowątkowości podczas korzystania z Ryujinx.", "pt_BR": "Ryujinx precisa ser reiniciado após mudar essa opção para que ela tenha efeito. Dependendo da sua plataforma, pode ser preciso desabilitar o multithreading do driver de vídeo quando usar o Ryujinx.", - "ru_RU": "Для применения этой настройки необходимо перезапустить Ryujinx. В зависимости от используемой вами операционной системы вам может потребоваться вручную отключить многопоточность драйвера при использовании Ryujinx.", + "ru_RU": "Для применения этой настройки необходимо перезапустить Ryujinx. В зависимости от используемой вами операционной системы, вам может потребоваться вручную отключить многопоточность драйвера при использовании Ryujinx.", "sv_SE": "Ryujinx måste startas om efter att denna inställning ändras för att verkställa den. Beroende på din plattform så kanske du måste manuellt inaktivera drivrutinens egna multithreading när Ryujinx används.", "th_TH": "Ryujinx ต้องรีสตาร์ทหลังจากเปลี่ยนตัวเลือกนี้จึงจะใช้งานได้อย่างสมบูรณ์ คุณอาจต้องปิดการใช้งาน มัลติเธรด ของไดรเวอร์ของคุณด้วยตนเองเมื่อใช้ Ryujinx ทั้งนี้ขึ้นอยู่กับแพลตฟอร์มของคุณ", "tr_TR": "Bu seçeneğin tamamen uygulanması için Ryujinx'in kapatıp açılması gerekir. Kullandığınız işletim sistemine bağlı olarak, Ryujinx'in multithreading'ini kullanırken driver'ınızın multithreading seçeneğini kapatmanız gerekebilir.", @@ -13788,7 +13788,7 @@ "no_NO": "Funksjoner", "pl_PL": "Funkcje", "pt_BR": "Recursos", - "ru_RU": "Функции & Улучшения", + "ru_RU": "Функции", "sv_SE": "Funktioner", "th_TH": "คุณสมบัติ", "tr_TR": "Özellikler", @@ -14038,7 +14038,7 @@ "no_NO": "Klikk for å åpne Ryujinx nettsiden i din standardnettleser.", "pl_PL": "Kliknij, aby otworzyć stronę Ryujinx w domyślnej przeglądarce.", "pt_BR": "Clique para abrir o site do Ryujinx no seu navegador padrão.", - "ru_RU": "Нажмите, чтобы открыть веб-сайт Ryujinx", + "ru_RU": "Нажмите, чтобы открыть веб-сайт Ryujinx в браузере", "sv_SE": "Klicka för att öppna Ryujinx webbsida i din webbläsare.", "th_TH": "คลิกเพื่อเปิดเว็บไซต์ Ryujinx บนเบราว์เซอร์เริ่มต้นของคุณ", "tr_TR": "Ryujinx'in websitesini varsayılan tarayıcınızda açmak için tıklayın.", @@ -14188,7 +14188,7 @@ "no_NO": "Ryujinx er en emulator for Nintendo SwitchTM.\nVennligst støtt oss på Patreon.\nFå alle de siste nyhetene på vår Twitter eller Discord.\nUtviklere som er interessert i å bidra kan finne ut mer på GitHub eller Discord.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Ryujinx - это эмулятор для Nintendo Switch™.\nПолучайте все последние новости разработки в нашем Discord.\nРазработчики, заинтересованные в участии, могут узнать больше на нашем GitHub или Discord.", "sv_SE": "Ryujinx är en emulator för Nintendo Switch™.\nFå de senaste nyheterna via vår Discord.\nUtvecklare som är intresserade att bidra kan hitta mer info på vår GitHub eller Discord.", "th_TH": "", "tr_TR": "", @@ -14238,7 +14238,7 @@ "no_NO": "Tidligere vedlikeholdt av:", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Поддержка:", "sv_SE": "Underhölls tidigare av:", "th_TH": "", "tr_TR": "", @@ -14788,7 +14788,7 @@ "no_NO": "Funksjoner & forbedringer", "pl_PL": "Funkcje i Ulepszenia", "pt_BR": "Recursos & Melhorias", - "ru_RU": "Функции", + "ru_RU": "Функции и улучшения", "sv_SE": "Funktioner och förbättringar", "th_TH": "คุณสมบัติ และ การเพิ่มประสิทธิภาพ", "tr_TR": "Özellikler & İyileştirmeler", @@ -14938,7 +14938,7 @@ "no_NO": "Angi en autoload-mappe som skal legges til i listen", "pl_PL": "", "pt_BR": "Insira um diretório de carregamento automático para adicionar à lista", - "ru_RU": "", + "ru_RU": "Введите папку автозагрузки для добавления в список", "sv_SE": "Ange en katalog att automatiskt läsa in till listan", "th_TH": "ป้อนไดเร็กทอรีสำหรับโหลดอัตโนมัติเพื่อเพิ่มลงในรายการ", "tr_TR": "", @@ -14963,7 +14963,7 @@ "no_NO": "Legg til en autoload-mappe i listen", "pl_PL": "", "pt_BR": "Adicionar um diretório de carregamento automático à lista", - "ru_RU": "", + "ru_RU": "Добавить папку автозагрузки в список", "sv_SE": "Lägg till en katalog att automatiskt läsa in till listan", "th_TH": "ป้อนไดเร็กทอรีสำหรับโหลดอัตโนมัติเพื่อเพิ่มลงในรายการ", "tr_TR": "", @@ -14988,7 +14988,7 @@ "no_NO": "Fjern valgt autoload-mappe", "pl_PL": "", "pt_BR": "Remover o diretório de carregamento automático selecionado", - "ru_RU": "", + "ru_RU": "Убрать папку автозагрузки из списка", "sv_SE": "Ta bort markerad katalog för automatisk inläsning", "th_TH": "ลบไดเรกทอรีสำหรับโหลดอัตโนมัติที่เลือก", "tr_TR": "", @@ -15038,7 +15038,7 @@ "no_NO": "Bane til egendefinert GUI-tema", "pl_PL": "Ścieżka do niestandardowego motywu GUI", "pt_BR": "Diretório do tema customizado", - "ru_RU": "Путь к пользовательской теме для интерфейса", + "ru_RU": "Путь к пользовательской теме интерфейса", "sv_SE": "Sökväg till anpassat gränssnittstema", "th_TH": "ไปยังที่เก็บไฟล์ธีม GUI แบบกำหนดเอง", "tr_TR": "Özel arayüz temasının yolu", @@ -15088,7 +15088,7 @@ "no_NO": "Forankret modus gjør at systemet oppføre seg som en forankret Nintendo Switch. Dette forbedrer grafikkkvaliteten i de fleste spill. Motsatt vil deaktivering av dette gjøre at systemet oppføre seg som en håndholdt Nintendo Switch, noe som reduserer grafikkkvaliteten.\n\nKonfigurer spiller 1 kontroller hvis du planlegger å bruke forankret modus; konfigurer håndholdte kontroller hvis du planlegger å bruke håndholdte modus.\n\nLa PÅ hvis du er usikker.", "pl_PL": "Tryb Zadokowany sprawia, że emulowany system zachowuje się jak zadokowany Nintendo Switch. Poprawia to jakość grafiki w większości gier. I odwrotnie, wyłączenie tej opcji sprawi, że emulowany system będzie zachowywał się jak przenośny Nintendo Switch, zmniejszając jakość grafiki.\n\nSkonfiguruj sterowanie gracza 1, jeśli planujesz używać trybu Zadokowanego; Skonfiguruj sterowanie przenośne, jeśli planujesz używać trybu przenośnego.\n\nPozostaw WŁĄCZONY, jeśli nie masz pewności.", "pt_BR": "O modo TV faz o sistema emulado se comportar como um Nintendo Switch na TV, o que melhora a fidelidade gráfica na maioria dos jogos. Por outro lado, desativar essa opção fará o sistema emulado se comportar como um Nintendo Switch portátil, reduzindo a qualidade gráfica.\n\nConfigure os controles do jogador 1 se planeja usar o modo TV; configure os controles de portátil se planeja usar o modo Portátil.\n\nMantenha ativado se estiver em dúvida.", - "ru_RU": "\"Стационарный\" режим запускает эмулятор, как если бы Nintendo Switch находилась в доке, что улучшает графику и разрешение в большинстве игр. И наоборот, при отключении этого режима эмулятор будет запускать игры в \"Портативном\" режиме, снижая качество графики.\n\nНастройте управление для Игрока 1 если планируете использовать в \"Стационарном\" режиме; настройте портативное управление если планируете использовать эмулятор в \"Портативном\" режиме.\n\nРекомендуется оставить включенным.", + "ru_RU": "\"Стационарный\" режим запускает эмулятор, как если бы Nintendo Switch находилась в доке, что улучшает графику и разрешение в большинстве игр. И наоборот, при отключении этого режима эмулятор будет запускать игры в \"Портативном\" режиме, снижая качество графики.\n\nНастройте управление для Игрока 1 если планируете использовать эмулятор в \"Стационарном\" режиме; настройте портативное управление если планируете использовать эмулятор в \"Портативном\" режиме.\n\nРекомендуется оставить включенным.", "sv_SE": "Dockat läge gör att det emulerade systemet beter sig som en dockad Nintendo Switch. Detta förbättrar grafiken i de flesta spel. Inaktiveras detta så kommer det emulerade systemet att bete sig som en handhållen Nintendo Switch, vilket reducerar grafikkvaliteten.\n\nKonfigurera kontrollen för Spelare 1 om du planerar att använda dockat läge; konfigurera handhållna kontroller om du planerar att använda handhållet läge.\n\nLämna PÅ om du är osäker.", "th_TH": "ด็อกโหมด ทำให้ระบบจำลองการทำงานเสมือน Nintendo ที่กำลังเชื่อมต่ออยู่ด็อก สิ่งนี้จะปรับปรุงความเสถียรภาพของกราฟิกในเกมส่วนใหญ่ ในทางกลับกัน การปิดใช้จะทำให้ระบบจำลองทำงานเหมือนกับ Nintendo Switch แบบพกพา ส่งผลให้คุณภาพกราฟิกลดลง\n\nแนะนำกำหนดค่าควบคุมของผู้เล่น 1 หากวางแผนที่จะใช้ด็อกโหมด กำหนดค่าการควบคุมแบบ แฮนด์เฮลด์ หากวางแผนที่จะใช้โหมดแฮนด์เฮลด์\n\nเปิดทิ้งไว้หากคุณไม่แน่ใจ", "tr_TR": "Docked modu emüle edilen sistemin yerleşik Nintendo Switch gibi davranmasını sağlar. Bu çoğu oyunda grafik kalitesini arttırır. Diğer yandan, bu seçeneği devre dışı bırakmak emüle edilen sistemin portatif Ninendo Switch gibi davranmasını sağlayıp grafik kalitesini düşürür.\n\nDocked modu kullanmayı düşünüyorsanız 1. Oyuncu kontrollerini; Handheld modunu kullanmak istiyorsanız portatif kontrollerini konfigüre edin.\n\nEmin değilseniz aktif halde bırakın.", @@ -15163,7 +15163,7 @@ "no_NO": "Endre systemregion", "pl_PL": "Zmień Region Systemu", "pt_BR": "Mudar a região do sistema", - "ru_RU": "Сменяет регион прошивки", + "ru_RU": "Сменяет регион системы", "sv_SE": "Ändra systemets region", "th_TH": "เปลี่ยนภูมิภาคของระบบ", "tr_TR": "Sistem Bölgesini Değiştir", @@ -15188,7 +15188,7 @@ "no_NO": "Endre systemspråk", "pl_PL": "Zmień język systemu", "pt_BR": "Mudar o idioma do sistema", - "ru_RU": "Меняет язык прошивки", + "ru_RU": "Меняет язык системы", "sv_SE": "Ändra systemets språk", "th_TH": "เปลี่ยนภาษาของระบบ", "tr_TR": "Sistem Dilini Değiştir", @@ -15213,7 +15213,7 @@ "no_NO": "Endre systemtidssone", "pl_PL": "Zmień Strefę Czasową Systemu", "pt_BR": "Mudar o fuso-horário do sistema", - "ru_RU": "Меняет часовой пояс прошивки", + "ru_RU": "Меняет часовой пояс системы", "sv_SE": "Ändra systemets tidszon", "th_TH": "เปลี่ยนโซนเวลาของระบบ", "tr_TR": "Sistem Saat Dilimini Değiştir", @@ -15238,7 +15238,7 @@ "no_NO": "Endre systemtid", "pl_PL": "Zmień czas systemowy", "pt_BR": "Mudar a hora do sistema", - "ru_RU": "Меняет системное время прошивки", + "ru_RU": "Меняет системное время системы", "sv_SE": "Ändra systemtid", "th_TH": "เปลี่ยนเวลาของระบบ", "tr_TR": "Sistem Saatini Değiştir", @@ -15263,7 +15263,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Повторно синхронизирует системное время, чтобы оно соответствовало текущей дате и времени вашего компьютера.\n\nЭто не активная настройка, она все еще может рассинхронизироваться; в этом случае просто нажмите эту кнопку еще раз.", "sv_SE": "Återsynkronisera systemtiden för att matcha din dators aktuella datum och tid.\n\nDetta är inte en aktiv inställning och den kan tappa synken och om det händer så kan du klicka på denna knapp igen.", "th_TH": "", "tr_TR": "", @@ -15338,7 +15338,7 @@ "no_NO": "Last inn PPTC med en tredjedel av antall kjerner.", "pl_PL": "", "pt_BR": "Carregar o PPTC usando um terço da quantidade de núcleos.", - "ru_RU": "", + "ru_RU": "Загрузить PPTC, используя треть от количества ядер.", "sv_SE": "Läs in PPTC med en tredjedel av mängden kärnor.", "th_TH": "โหลด PPTC โดยใช้หนึ่งในสามของจำนวนคอร์", "tr_TR": "", @@ -16163,7 +16163,7 @@ "no_NO": "Åpne en filutforsker for å velge en eller flere mapper å laste inn DLC fra", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Открывает проводник, для выбора одной или нескольких папок для массовой загрузки DLC", "sv_SE": "Öppna en filutforskare för att välja en eller flera mappar att läsa in alla DLC från", "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกหนึ่งโฟลเดอร์ขึ้นไปเพื่อโหลด DLC จำนวนมาก", "tr_TR": "", @@ -16188,7 +16188,7 @@ "no_NO": "Åpne en filutforsker for å velge en eller flere mapper som du vil laste inn titteloppdateringer fra", "pl_PL": "", "pt_BR": "Abra o explorador de arquivos para selecionar uma ou mais pastas e carregar atualizações de jogo em massa.", - "ru_RU": "", + "ru_RU": "Открывает проводник, чтобы выбрать одну или несколько папок для массовой загрузки обновлений приложений", "sv_SE": "Öppna en filutforskare för att välja en eller flera mappar att läsa in alla titeluppdateringar från", "th_TH": "เปิดตัวสำรวจไฟล์เพื่อเลือกหนึ่งโฟลเดอร์ขึ้นไปเพื่อโหลดไฟล์อัปเดตจำนวนมาก", "tr_TR": "", @@ -16213,7 +16213,7 @@ "no_NO": "Åpne Ryujinx filsystem-mappen", "pl_PL": "Otwórz folder systemu plików Ryujinx", "pt_BR": "Abre o diretório do sistema de arquivos do Ryujinx", - "ru_RU": "Открывает папку с файлами Ryujinx. ", + "ru_RU": "Открывает папку с файлами Ryujinx", "sv_SE": "Öppna Ryujinx-filsystemsmappen", "th_TH": "เปิดโฟลเดอร์ระบบไฟล์ Ryujinx", "tr_TR": "Ryujinx dosya sistem klasörünü açar", @@ -16338,7 +16338,7 @@ "no_NO": "Stopp emuleringen av dette spillet og gå tilbake til spill valg", "pl_PL": "Zatrzymaj emulację bieżącej gry i wróć do wyboru gier", "pt_BR": "Parar emulação do jogo atual e voltar a seleção de jogos", - "ru_RU": "Остановка эмуляции текущей игры и возврат к списку игр", + "ru_RU": "Остановка эмуляции текущей игры с последующим возвратом к списку игр", "sv_SE": "Stoppa emulering av aktuellt spel och återgå till spelväljaren", "th_TH": "หยุดการจำลองของเกมที่เปิดอยู่ในปัจจุบันและกลับไปยังการเลือกเกม", "tr_TR": "Oynanmakta olan oyunun emülasyonunu durdurup oyun seçimine geri döndürür", @@ -16363,7 +16363,7 @@ "no_NO": "Se etter oppdateringer til Ryujinx", "pl_PL": "Sprawdź aktualizacje Ryujinx", "pt_BR": "Verificar por atualizações para o Ryujinx", - "ru_RU": "Проверяет наличие обновлений для Ryujinx", + "ru_RU": "Проверяет наличие обновлений Ryujinx", "sv_SE": "Leta efter uppdateringar för Ryujinx", "th_TH": "ตรวจสอบอัปเดตของ Ryujinx", "tr_TR": "Ryujinx güncellemelerini denetlemeyi sağlar", @@ -16913,7 +16913,7 @@ "no_NO": "Prosessor modus", "pl_PL": "Pamięć CPU", "pt_BR": "Memória da CPU", - "ru_RU": "Режим процессора", + "ru_RU": "Режим работы процессора", "sv_SE": "CPU-läge", "th_TH": "โหมดซีพียู", "tr_TR": "CPU Hafızası", @@ -17438,7 +17438,7 @@ "no_NO": "Versjon {0} - {1}", "pl_PL": "Wersja {0} - {1}", "pt_BR": "Versão {0} - {1}", - "ru_RU": "Version {0} - {1}", + "ru_RU": "Версия {0} - {1}", "sv_SE": "Version {0} - {1}", "th_TH": "เวอร์ชั่น {0} - {1}", "tr_TR": "Sürüm {0} - {1}", @@ -17463,7 +17463,7 @@ "no_NO": "Pakket: Versjon {0}", "pl_PL": "", "pt_BR": "Empacotado: Versão {0}", - "ru_RU": "", + "ru_RU": "Баднл: Версия {0}", "sv_SE": "Bundlad: Version {0}", "th_TH": "Bundled: เวอร์ชั่น {0}", "tr_TR": "", @@ -17488,7 +17488,7 @@ "no_NO": "Pakket:", "pl_PL": "", "pt_BR": "Empacotado:", - "ru_RU": "", + "ru_RU": "Бандл:", "sv_SE": "Bundlad:", "th_TH": "", "tr_TR": "", @@ -17513,7 +17513,7 @@ "no_NO": "Delvis", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Частично", "sv_SE": "Delvis", "th_TH": "", "tr_TR": "", @@ -17538,7 +17538,7 @@ "no_NO": "Ikke trimmet", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Не обрезан", "sv_SE": "Inte optimerad", "th_TH": "", "tr_TR": "", @@ -17563,7 +17563,7 @@ "no_NO": "Trimmet", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Обрезан", "sv_SE": "Optimerad", "th_TH": "", "tr_TR": "", @@ -17588,7 +17588,7 @@ "no_NO": "(Mislyktes)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "(Ошибка)", "sv_SE": "(misslyckades)", "th_TH": "", "tr_TR": "", @@ -17613,7 +17613,7 @@ "no_NO": "Spare {0:n0} Mb", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Сохранить {0:n0} Мб", "sv_SE": "Spara {0:n0} Mb", "th_TH": "", "tr_TR": "", @@ -17638,7 +17638,7 @@ "no_NO": "Spart {0:n0} Mb", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Сохранено {0:n0} Мб", "sv_SE": "Sparade {0:n0} Mb", "th_TH": "", "tr_TR": "", @@ -17813,7 +17813,7 @@ "no_NO": "Dialogboks for kabinett", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Сообщение кабинета", "sv_SE": "Cabinet-dialog", "th_TH": "", "tr_TR": "", @@ -17838,7 +17838,7 @@ "no_NO": "Skriv inn Amiiboens nye navn", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Введите новое имя вашего Amiibo", "sv_SE": "Ange nya namnet för din Amiibo", "th_TH": "", "tr_TR": "", @@ -17863,7 +17863,7 @@ "no_NO": "Vennligst skann Amiiboene dine nå.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Пожалуйста, отсканируйте свой Amiibo.", "sv_SE": "Skanna din Amiibo nu.", "th_TH": "", "tr_TR": "", @@ -18351,25 +18351,25 @@ "ID": "CompilingPPTC", "Translations": { "ar_SA": "تجميع الـ‫(PPTC)", - "de_DE": "PTC wird kompiliert", - "el_GR": "Μεταγλώττιση του PTC", - "en_US": "Compiling PTC", - "es_ES": "Compilando PTC", - "fr_FR": "Compilation PTC", - "he_IL": "קימפול PTC", + "de_DE": "PPTC wird kompiliert", + "el_GR": "Μεταγλώττιση του PPTC", + "en_US": "Compiling PPTC", + "es_ES": "Compilando PPTC", + "fr_FR": "Compilation PPTC", + "he_IL": "קימפול PPTC", "it_IT": "Compilazione PPTC", - "ja_JP": "PTC をコンパイル中", - "ko_KR": "PTC 컴파일", - "no_NO": "Sammensetter PTC", - "pl_PL": "Kompilowanie PTC", - "pt_BR": "Compilando PTC", - "ru_RU": "Компиляция PTC", - "sv_SE": "Kompilerar PTC", - "th_TH": "กำลังคอมไพล์ PTC", - "tr_TR": "PTC Derleniyor", - "uk_UA": "Компіляція PTC", + "ja_JP": "PPTC をコンパイル中", + "ko_KR": "PPTC 컴파일", + "no_NO": "Sammensetter PPTC", + "pl_PL": "Kompilowanie PPTC", + "pt_BR": "Compilando PPTC", + "ru_RU": "Компиляция PPTC", + "sv_SE": "Kompilerar PPTC", + "th_TH": "กำลังคอมไพล์ PPTC", + "tr_TR": "PPTC Derleniyor", + "uk_UA": "Компіляція PPTC", "zh_CN": "编译 PPTC 缓存中", - "zh_TW": "正在編譯 PTC" + "zh_TW": "正在編譯 PPTC" } }, { @@ -18588,7 +18588,7 @@ "no_NO": "Skjermbilde", "pl_PL": "Zrzut Ekranu:", "pt_BR": "Captura de tela:", - "ru_RU": "Сделать скриншот:", + "ru_RU": "Скриншот:", "sv_SE": "Skärmbild:", "th_TH": "ภาพหน้าจอ:", "tr_TR": "Ekran Görüntüsü Al:", @@ -18813,7 +18813,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Amiibo", "sv_SE": "Amiibo", "th_TH": "", "tr_TR": "", @@ -18988,7 +18988,7 @@ "no_NO": "Kontroller og trim XCI-filen", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Проверить и обрезать XCI файл", "sv_SE": "Kontrollera och optimera XCI-filer", "th_TH": "", "tr_TR": "", @@ -19013,7 +19013,7 @@ "no_NO": "Denne funksjonen kontrollerer først hvor mye plass som er ledig, og trimmer deretter XCI-filen for å spare diskplass.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Эта функция сначала проверит наличие пустого пространства, а затем обрежет файл XCI, чтобы сэкономить место на диске.", "sv_SE": "Denna funktion kommer först att kontrollera ledigt utrymme och sedan optimera XCI-filen för att spara diskutrymme.", "th_TH": "", "tr_TR": "", @@ -19038,7 +19038,7 @@ "no_NO": "Nåværende filstørrelse: 0:n MB\nSpilldatastørrelse: {1:n} MB\nDiskplassbesparelse: {2:n} MB", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Размер текущего файла: {0:n} Мб\nРазмер игровых данных: {1:n} MB\nЭкономия дискового пространства: {2:n} Мб", "sv_SE": "Aktuell filstorlek: {0:n} MB\nStorlek för speldata: {1:n} MB\nSparat diskutrymme: {2:n} MB", "th_TH": "", "tr_TR": "", @@ -19063,7 +19063,7 @@ "no_NO": "XCI-filen trenger ikke å trimmes. Sjekk loggene for mer informasjon", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Файл XCI не нуждается в обрезке. Проверьте логи для получения более подробной информации", "sv_SE": "XCI-filen behöver inte optimeras. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", @@ -19088,7 +19088,7 @@ "no_NO": "XCI-filen kan ikke trimmes. Sjekk loggene for mer informasjon", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "XCI файл не может быть обрезан. Проверьте логи для получения более подробной информации", "sv_SE": "XCI-filen kan inte avoptimeras. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", @@ -19113,7 +19113,7 @@ "no_NO": "XCI-filen er skrivebeskyttet og kunne ikke gjøres skrivbar. Sjekk loggene for mer informasjon", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Файл XCI доступен только для чтения и его невозможно сделать доступным для записи. Проверьте логи для получения более подробной информации", "sv_SE": "XCI-filen är skrivskyddad och kunde inte göras skrivbar. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", @@ -19138,7 +19138,7 @@ "no_NO": "XCI File har endret størrelse siden den ble skannet. Kontroller at det ikke skrives til filen, og prøv på nytt.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Файл XCI изменился в размере после сканирования. Проверьте, не производится ли запись в этот файл, и повторите попытку.", "sv_SE": "XCI-filen har ändrats i storlek sedan den lästes av. Kontrollera att filen inte skrivs till och försök igen.", "th_TH": "", "tr_TR": "", @@ -19163,7 +19163,7 @@ "no_NO": "XCI-filen har data i ledig plass, og det er ikke trygt å trimme den", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "XCI файл содержит данные в пустой зоне, обрезать его небезопасно", "sv_SE": "XCI-filen har data i det lediga utrymmet. Den är inte säker att optimera", "th_TH": "", "tr_TR": "", @@ -19188,7 +19188,7 @@ "no_NO": "XCI-filen inneholder ugyldige data. Sjekk loggene for ytterligere detaljer", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Файл XCI содержит недопустимые данные. Проверьте логи для получения дополнительной информации", "sv_SE": "XCI-filen innehåller ogiltig data. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", @@ -19213,7 +19213,7 @@ "no_NO": "XCI-filen kunne ikke åpnes for skriving. Sjekk loggene for ytterligere detaljer", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "XCI файл не удалось открыть для записи. Проверьте логи для получения дополнительной информации", "sv_SE": "XCI-filen kunde inte öppnas för skrivning. Kontrollera loggen för mer information", "th_TH": "", "tr_TR": "", @@ -19238,7 +19238,7 @@ "no_NO": "Trimming av XCI-filen mislyktes", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Обрезка файла XCI не удалась", "sv_SE": "Optimering av XCI-filen misslyckades", "th_TH": "", "tr_TR": "", @@ -19263,7 +19263,7 @@ "no_NO": "Operasjonen ble avlyst", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Операция была отменена", "sv_SE": "Åtgärden avbröts", "th_TH": "", "tr_TR": "", @@ -19288,7 +19288,7 @@ "no_NO": "Ingen operasjon ble utført", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Операция не была проведена", "sv_SE": "Ingen åtgärd genomfördes", "th_TH": "", "tr_TR": "", @@ -19438,7 +19438,7 @@ "no_NO": "XCI File Trimmer", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Уменьшение размера XCI файлов", "sv_SE": "Optimera XCI-filer", "th_TH": "", "tr_TR": "", @@ -19463,7 +19463,7 @@ "no_NO": "{0} av {1} Valgte tittel(er)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "{0} из {1} файла(ов) выбрано", "sv_SE": "{0} av {1} spel markerade", "th_TH": "", "tr_TR": "", @@ -19488,7 +19488,7 @@ "no_NO": "{0} av {1} Tittel(er) valgt ({2} vises)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "{0} из {1} файла(ов) выбрано ({2} показано)", "sv_SE": "{0} av {1} spel markerade ({2} visade)", "th_TH": "", "tr_TR": "", @@ -19513,7 +19513,7 @@ "no_NO": "Trimming av {0} tittel(er)...", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Обрезка {0} файла(ов)...", "sv_SE": "Optimerar {0} spel...", "th_TH": "", "tr_TR": "", @@ -19538,7 +19538,7 @@ "no_NO": "Untrimming {0} Tittel(er)...", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Отмена обрезки {0} файла(ов)...", "sv_SE": "Avoptimerar {0} spel...", "th_TH": "", "tr_TR": "", @@ -19563,7 +19563,7 @@ "no_NO": "Mislyktes", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Ошибка", "sv_SE": "Misslyckades", "th_TH": "", "tr_TR": "", @@ -19588,7 +19588,7 @@ "no_NO": "Potensielle besparelser", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Потенциально освобождено места", "sv_SE": "Möjlig besparning", "th_TH": "", "tr_TR": "", @@ -19613,7 +19613,7 @@ "no_NO": "Faktiske besparelser", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Реально освобождено места", "sv_SE": "Faktisk besparning", "th_TH": "", "tr_TR": "", @@ -19638,7 +19638,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "{0:n0} Мб", "sv_SE": "{0:n0} Mb", "th_TH": "", "tr_TR": "", @@ -19663,7 +19663,7 @@ "no_NO": "Velg vist", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Выбрать то что показано", "sv_SE": "Markera visade", "th_TH": "", "tr_TR": "", @@ -19688,7 +19688,7 @@ "no_NO": "Opphev valg av Vist", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Отменить выбор показанного", "sv_SE": "Avmarkera visade", "th_TH": "", "tr_TR": "", @@ -19713,7 +19713,7 @@ "no_NO": "Tittel", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Приложение", "sv_SE": "Titel", "th_TH": "", "tr_TR": "", @@ -19738,7 +19738,7 @@ "no_NO": "Plassbesparelser", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Сохранение места на диске", "sv_SE": "Utrymmesbesparning", "th_TH": "", "tr_TR": "", @@ -19763,7 +19763,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Обрезать", "sv_SE": "Optimera", "th_TH": "", "tr_TR": "", @@ -19788,7 +19788,7 @@ "no_NO": "Utrim", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Отмена обрезки", "sv_SE": "Avoptimera", "th_TH": "", "tr_TR": "", @@ -19813,7 +19813,7 @@ "no_NO": "{0} ny(e) oppdatering(er) lagt til", "pl_PL": "", "pt_BR": "{0} nova(s) atualização(ões) adicionada(s)", - "ru_RU": "", + "ru_RU": "Добавлено {0} новых обновлений", "sv_SE": "{0} nya uppdatering(ar) lades till", "th_TH": "{0} อัพเดตที่เพิ่มมาใหม่", "tr_TR": "", @@ -19838,7 +19838,7 @@ "no_NO": "Medfølgende oppdateringer kan ikke fjernes, bare deaktiveres.", "pl_PL": "", "pt_BR": "Atualizações incorporadas não podem ser removidas, apenas desativadas.", - "ru_RU": "", + "ru_RU": "Обновления бандлов не могут быть удалены, только отключены.", "sv_SE": "Bundlade uppdateringar kan inte tas bort, endast inaktiveras.", "th_TH": "แพ็คที่อัพเดตมาไม่สามารถลบทิ้งได้ สามารถปิดใช้งานได้เท่านั้น", "tr_TR": "", @@ -19913,7 +19913,7 @@ "no_NO": "Medfølgende DLC kan ikke fjernes, bare deaktiveres.", "pl_PL": "", "pt_BR": "DLCs incorporadas não podem ser removidas, apenas desativadas.", - "ru_RU": "", + "ru_RU": "DLC бандлов не могут быть удалены, только отключены.", "sv_SE": "Bundlade DLC kan inte tas bort, endast inaktiveras.", "th_TH": "แพ็ค DLC ไม่สามารถลบทิ้งได้ สามารถปิดใช้งานได้เท่านั้น", "tr_TR": "", @@ -19938,7 +19938,7 @@ "no_NO": "{0} Nedlastbare innhold(er)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "{0} доступных DLC", "sv_SE": "{0} DLC(er) tillgängliga", "th_TH": "", "tr_TR": "", @@ -19963,7 +19963,7 @@ "no_NO": "{0} nytt nedlastbart innhold lagt til", "pl_PL": "", "pt_BR": "{0} novo(s) conteúdo(s) para download adicionado(s)", - "ru_RU": "", + "ru_RU": "Добавлено {0} новых DLC", "sv_SE": "{0} nya hämtningsbara innehåll lades till", "th_TH": "{0} DLC ใหม่ที่เพิ่มเข้ามา", "tr_TR": "", @@ -19988,7 +19988,7 @@ "no_NO": "{0} nytt nedlastbart innhold lagt til", "pl_PL": "", "pt_BR": "{0} novo(s) conteúdo(s) para download adicionado(s)", - "ru_RU": "", + "ru_RU": "Добавлено {0} новых DLC", "sv_SE": "{0} nya hämtningsbara innehåll lades till", "th_TH": "{0} ใหม่ที่เพิ่มเข้ามา", "tr_TR": "", @@ -20013,7 +20013,7 @@ "no_NO": "{0} manglende nedlastbart innhold fjernet", "pl_PL": "", "pt_BR": "{0} conteúdo(s) para download ausente(s) removido(s)", - "ru_RU": "", + "ru_RU": "{0} отсутствующих DLC удалено", "sv_SE": "{0} saknade hämtningsbara innehåll togs bort", "th_TH": "", "tr_TR": "", @@ -20038,7 +20038,7 @@ "no_NO": "{0} ny(e) oppdatering(er) lagt til", "pl_PL": "", "pt_BR": "{0} nova(s) atualização(ões) adicionada(s)", - "ru_RU": "", + "ru_RU": "{0} новых обновлений добавлено", "sv_SE": "{0} nya uppdatering(ar) lades till", "th_TH": "{0} อัพเดตใหม่ที่เพิ่มเข้ามา", "tr_TR": "", @@ -20063,7 +20063,7 @@ "no_NO": "{0} manglende oppdatering(er) fjernet", "pl_PL": "", "pt_BR": "{0} atualização(ões) ausente(s) removida(s)", - "ru_RU": "", + "ru_RU": "{0} отсутствующих обновлений удалено", "sv_SE": "{0} saknade uppdatering(ar) togs bort", "th_TH": "", "tr_TR": "", @@ -20138,7 +20138,7 @@ "no_NO": "Fortsett", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Продолжить", "sv_SE": "Fortsätt", "th_TH": "", "tr_TR": "", @@ -20488,7 +20488,7 @@ "no_NO": "Velg grafikkbackend som skal brukes i emulatoren.\n\nVulkan er generelt bedre for alle moderne grafikkort, så lenge driverne er oppdatert. Vulkan har også en raskere sammenstilling av Shader (mindre hakkete) på alle GPU-leverandører.\n\nOpenGL kan oppnå bedre resultater for eldre Nvidia GPU-er, på eldre AMD GPU-er på Linux, eller på GPU-er med lavere VRAM, selv om skyggekompileringsutløser vil være større.\n\nSett til Vulkan hvis du er usikker. Sett til OpenGL hvis ikke GPU-en støtter Vulkan selv med de nyeste grafikkdriverne.", "pl_PL": "", "pt_BR": "", - "ru_RU": "Выберает бэкенд, который будет использован в эмуляторе.\n\nVulkan является лучшим выбором для всех современных графических карт с актуальными драйверами. В Vulkan также включена более быстрая компиляция шейдеров (меньше статтеров) для всех видеоадаптеров.\n\nПри использовании OpenGL можно достичь лучших результатов на старых видеоадаптерах Nvidia и AMD в Linux или на видеоадаптерах с небольшим количеством видеопамяти, хотя статтеров при компиляции шейдеров будет больше.\n\nРекомендуется использовать Vulkan. Используйте OpenGL, если ваш видеоадаптер не поддерживает Vulkan даже с актуальными драйверами.", + "ru_RU": "Выбирает бэкенд, который будет использован в эмуляторе.\n\nVulkan является лучшим выбором для всех современных графических карт с актуальными драйверами. В Vulkan также включена более быстрая компиляция шейдеров (меньше статтеров) для всех видеоадаптеров.\n\nПри использовании OpenGL можно достичь лучших результатов на старых видеоадаптерах Nvidia и AMD в Linux или на видеоадаптерах с небольшим количеством видеопамяти, хотя статтеров при компиляции шейдеров будет больше.\n\nРекомендуется использовать Vulkan. Используйте OpenGL, если ваш видеоадаптер не поддерживает Vulkan даже с актуальными драйверами.", "sv_SE": "Väljer den grafikbakände som ska användas i emulatorn.\n\nVulkan är oftast bättre för alla moderna grafikkort, så länge som deras drivrutiner är uppdaterade. Vulkan har också funktioner för snabbare shader compilation (mindre stuttering) för alla GPU-tillverkare.\n\nOpenGL kan nå bättre resultat på gamla Nvidia GPU:er, på äldre AMD GPU:er på Linux, eller på GPU:er med lägre VRAM, även om shader compilation stuttering kommer att vara större.\n\nStäll in till Vulkan om du är osäker. Ställ in till OpenGL om du GPU inte har stöd för Vulkan även med de senaste grafikdrivrutinerna.", "th_TH": "เลือกกราฟิกเบื้องหลังที่จะใช้ในโปรแกรมจำลอง\n\nโดยรวมแล้ว Vulkan นั้นดีกว่าสำหรับการ์ดจอรุ่นใหม่ทั้งหมด ตราบใดที่ไดรเวอร์ยังอัพเดทอยู่เสมอ Vulkan ยังมีคุณสมบัติการคอมไพล์เชเดอร์ที่เร็วขึ้น(และลดอาการกระตุก) สำหรับ GPU อื่นๆทุกอัน\n\nOpenGL อาจได้รับผลลัพธ์ที่ดีกว่าบน Nvidia GPU รุ่นเก่า, AMD GPU รุ่นเก่าบน Linux หรือบน GPU ที่มี VRAM น้อย แม้ว่าการคอมไพล์เชเดอร์ จะทำให้อาการกระตุกมากขึ้นก็ตาม\n\nตั้งค่าเป็น Vulkan หากไม่แน่ใจ ตั้งค่าเป็น OpenGL หาก GPU ของคุณไม่รองรับ Vulkan แม้จะมีไดรเวอร์กราฟิกล่าสุดก็ตาม", "tr_TR": "", @@ -20513,7 +20513,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Авто", "sv_SE": "Automatiskt", "th_TH": "", "tr_TR": "", @@ -20538,7 +20538,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Использует Vulkan.\nНа Mac с ARM процессорами используется Metal, если игра с ним совместима и хорошо работает.", "sv_SE": "Använder Vulkan.\nPå en ARM Mac och vid spel som körs bra på den så används Metal-bakänden.", "th_TH": "", "tr_TR": "", @@ -20838,7 +20838,7 @@ "no_NO": "High-level emulering av GPU makrokode.\n\nForbedrer ytelse, men kan forårsake grafiske glitches i noen spill.\n\nForlat PÅ hvis usikker.", "pl_PL": "Wysokopoziomowa emulacja kodu GPU Macro.\n\nPoprawia wydajność, ale może powodować błędy graficzne w niektórych grach.\n\nW razie wątpliwości pozostaw WŁĄCZONE.", "pt_BR": "Habilita emulação de alto nível de códigos Macro da GPU.\n\nMelhora a performance, mas pode causar problemas gráficos em alguns jogos.\n\nEm caso de dúvida, deixe ATIVADO.", - "ru_RU": "Высокоуровневая эмуляции макрокода видеоадаптера.\n\nПовышает производительность, но может вызывать графические артефакты в некоторых играх.\n\nРекомендуется оставить включенным.", + "ru_RU": "Высокоуровневая эмуляция макрокода видеоадаптера.\n\nПовышает производительность, но может вызывать графические артефакты в некоторых играх.\n\nРекомендуется оставить включенным.", "sv_SE": "Högnivåemulering av GPU Macro-kod.\n\nFörbättrar prestandan men kan orsaka grafiska glitches i vissa spel.\n\nLämna PÅ om du är osäker.", "th_TH": "การจำลองระดับสูงของโค้ดมาโคร GPU\n\nปรับปรุงประสิทธิภาพ แต่อาจทำให้เกิดข้อผิดพลาดด้านกราฟิกในบางเกม\n\nเปิดทิ้งไว้หากคุณไม่แน่ใจ", "tr_TR": "GPU Macro kodunun yüksek seviye emülasyonu.\n\nPerformansı arttırır, ama bazı oyunlarda grafik hatalarına yol açabilir.\n\nEmin değilseniz AÇIK bırakın.", @@ -21388,7 +21388,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "FSR", "sv_SE": "FSR", "th_TH": "", "tr_TR": "", @@ -21413,7 +21413,7 @@ "no_NO": "Område", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Зональная", "sv_SE": "Yta", "th_TH": "", "tr_TR": "", @@ -21738,7 +21738,7 @@ "no_NO": "Vis endringslogg på GitHub", "pl_PL": "Zobacz listę zmian na GitHubie", "pt_BR": "Ver mudanças no GitHub", - "ru_RU": "Список изменений на GitHub", + "ru_RU": "Показать список изменений на GitHub", "sv_SE": "Visa ändringslogg på GitHub", "th_TH": "ดูประวัติการเปลี่ยนแปลงบน GitHub", "tr_TR": "GitHub'da Değişiklikleri Görüntüle", @@ -21888,7 +21888,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "ldn_mitm", "sv_SE": "ldn_mitm", "th_TH": "", "tr_TR": "", @@ -21913,7 +21913,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "RyuLDN", "sv_SE": "RyuLDN", "th_TH": "", "tr_TR": "", @@ -21938,7 +21938,7 @@ "no_NO": "Deaktiver P2P-nettverkshosting (kan øke ventetiden)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Отключить хостинг P2P-сетей (может увеличить задержку)", "sv_SE": "Inaktivera P2P-nätverkshosting (kan öka latens)", "th_TH": "", "tr_TR": "", @@ -21963,7 +21963,7 @@ "no_NO": "Deaktiver P2P-nettverkshosting, så vil andre brukere gå via hovedserveren i stedet for å koble seg direkte til deg.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Отключая хостинг P2P-сетей, пользователи будут проксироваться через главный сервер, а не подключаться к вам напрямую.", "sv_SE": "Inaktivera P2P-nätverkshosting, motparter kommer skickas genom masterservern isället för att ansluta direkt till dig.", "th_TH": "", "tr_TR": "", @@ -21988,7 +21988,7 @@ "no_NO": "Nettverkspassord:", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Cетевой пароль:", "sv_SE": "Lösenfras för nätverk:", "th_TH": "", "tr_TR": "", @@ -22013,7 +22013,7 @@ "no_NO": "Du vil bare kunne se spill som er arrangert med samme passordfrase som deg.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Вы сможете видеть только те игры, в которых используется тот же пароль, что и у вас.", "sv_SE": "Du kommer endast kunna se hostade spel med samma lösenfras som du.", "th_TH": "", "tr_TR": "", @@ -22038,7 +22038,7 @@ "no_NO": "Skriv inn en passordfrase i formatet Ryujinx-<8 heks tegn>. Du vil bare kunne se spill som er arrangert med samme passordfrase som deg.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Введите пароль в формате Ryujinx-<8 шестнадцатеричных символов>. Вы сможете видеть только те игры, в которых используется тот же пароль, что и у вас.", "sv_SE": "Ange en lösenfras i formatet Ryujinx-<8 hextecken>. Du kommer endast kunna se hostade spel med samma lösenfras som du.", "th_TH": "", "tr_TR": "", @@ -22063,7 +22063,7 @@ "no_NO": "(offentlig)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "(публичный)", "sv_SE": "(publik)", "th_TH": "", "tr_TR": "", @@ -22088,7 +22088,7 @@ "no_NO": "Generer tilfeldig", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Сгенерировать рандомно", "sv_SE": "Generera slumpmässigt", "th_TH": "", "tr_TR": "", @@ -22113,7 +22113,7 @@ "no_NO": "Genererer en ny passordfrase, som kan deles med andre spillere.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Генерирует новый пароль, который можно передать другим игрокам.", "sv_SE": "Genererar en ny lösenfras som kan delas med andra spelare.", "th_TH": "", "tr_TR": "", @@ -22138,7 +22138,7 @@ "no_NO": "Slett", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Очистить", "sv_SE": "Töm", "th_TH": "", "tr_TR": "", @@ -22163,7 +22163,7 @@ "no_NO": "Sletter den gjeldende passordfrasen og går tilbake til det offentlige nettverket.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Очищает текущий пароль, возвращаясь в публичную сеть.", "sv_SE": "Tömmer aktuell lösenfras och återgår till det publika nätverket.", "th_TH": "", "tr_TR": "", @@ -22188,7 +22188,7 @@ "no_NO": "Ugyldig passordfrase! Må være i formatet \"Ryujinx-<8 hex tegn>\"", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Неверный пароль! Пароль должен быть в формате \"Ryujinx-<8 шестнадцатеричных символов>\"", "sv_SE": "Ogiltig lösenfras! Måste vara i formatet \"Ryujinx-<8 hextecken>\"", "th_TH": "", "tr_TR": "", @@ -22213,7 +22213,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Вертикальная синхронизация:", "sv_SE": "VSync:", "th_TH": "", "tr_TR": "", @@ -22238,7 +22238,7 @@ "no_NO": "Aktiver egendefinert oppdateringsfrekvens (eksperimentell)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Включить пользовательскую частоту кадров (Экспериментально)", "sv_SE": "Aktivera anpassad uppdateringsfrekvens (experimentell)", "th_TH": "", "tr_TR": "", @@ -22263,7 +22263,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Консоль", "sv_SE": "Switch", "th_TH": "", "tr_TR": "", @@ -22288,7 +22288,7 @@ "no_NO": "Ubegrenset", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Без ограничений", "sv_SE": "Obunden", "th_TH": "", "tr_TR": "", @@ -22313,7 +22313,7 @@ "no_NO": "Egendefinert oppdateringsfrekvens", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Пользовательская частота кадров", "sv_SE": "Anpassad uppdateringsfrekvens", "th_TH": "", "tr_TR": "", @@ -22338,7 +22338,7 @@ "no_NO": "Emulert vertikal synkronisering. «Switch» emulerer Switchs oppdateringsfrekvens på 60 Hz. «Ubegrenset» er en ubegrenset oppdateringsfrekvens.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Эмулированная вертикальная синхронизация. 'Консоль' эмулирует частоту обновления консоли, равную 60 Гц. 'Без ограничений' - неограниченная частота кадров.", "sv_SE": "Emulerad vertikal synk. 'Switch' emulerar Switchens uppdateringsfrekvens på 60Hz. 'Obunden' är en obegränsad uppdateringsfrekvens.", "th_TH": "", "tr_TR": "", @@ -22363,7 +22363,7 @@ "no_NO": "Emulert vertikal synkronisering. «Switch» emulerer Switchs oppdateringsfrekvens på 60 Hz. «Ubegrenset» er en ubegrenset oppdateringsfrekvens. «Egendefinert» emulerer den angitte egendefinerte oppdateringsfrekvensen.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Эмулированная вертикальная синхронизация. 'Консоль' эмулирует частоту обновления консоли, равную 60 Гц. 'Без ограничений' - неограниченная частота кадров. 'Пользовательска частота кадров' эмулирует выбранную пользователем частоту кадров.", "sv_SE": "Emulerad vertikal synk. 'Switch' emulerar Switchens uppdateringsfrekvens på 60Hz. 'Obunden' är en obegränsad uppdateringsfrekvens. 'Anpassad uppdateringsfrekvens' emulerar den angivna anpassade uppdateringsfrekvensen.", "th_TH": "", "tr_TR": "", @@ -22388,7 +22388,7 @@ "no_NO": "Gjør det mulig for brukeren å angi en emulert oppdateringsfrekvens. I noen titler kan dette øke eller senke hastigheten på spillogikken. I andre titler kan det gjøre det mulig å begrense FPS til et multiplum av oppdateringsfrekvensen, eller føre til uforutsigbar oppførsel. Dette er en eksperimentell funksjon, og det gis ingen garantier for hvordan spillingen påvirkes. \n\nLa AV stå hvis du er usikker.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Позволяет пользователю указать эмулируемую частоту кадров. В некоторых играх это может ускорить или замедлить скорость логики игрового процесса. В других играх это может позволить ограничить FPS на уровне, кратном частоте обновления, или привести к непредсказуемому поведению. Это экспериментальная функция, и нет никаких гарантий того, как она повлияет на игровой процесс. \n\nОставьте выключенным, если не уверены.", "sv_SE": "Låter användaren ange en emulerad uppdateringsfrekvens. För vissa spel så kan detta snabba upp eller ner frekvensen för spellogiken. I andra spel så kan detta tillåta att bildfrekvensen kapas för delar av uppdateringsfrekvensen eller leda till oväntat beteende. Detta är en experimentell funktion utan några garantier för hur spelet påverkas. \n\nLämna AV om du är osäker.", "th_TH": "", "tr_TR": "", @@ -22413,7 +22413,7 @@ "no_NO": "Den egendefinerte målverdien for oppdateringsfrekvens.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Заданное значение частоты кадров", "sv_SE": "Målvärde för anpassad uppdateringsfrekvens.", "th_TH": "", "tr_TR": "", @@ -22438,7 +22438,7 @@ "no_NO": "Den egendefinerte oppdateringsfrekvensen, i prosent av den normale oppdateringsfrekvensen for Switch-konsollen.", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Пользовательская частота кадров в процентах от обычной частоты обновления на консоли.", "sv_SE": "Anpassad uppdateringsfrekvens, som en procentdel av den normala uppdateringsfrekvensen för Switch.", "th_TH": "", "tr_TR": "", @@ -22463,7 +22463,7 @@ "no_NO": "Egendefinert oppdateringsfrekvens %:", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Пользовательская частота кадров %:", "sv_SE": "Anpassad uppdateringsfrekvens %:", "th_TH": "", "tr_TR": "", @@ -22488,7 +22488,7 @@ "no_NO": "Egendefinert verdi for oppdateringsfrekvens:", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Значение пользовательской частоты кадров:", "sv_SE": "Värde för anpassad uppdateringsfrekvens:", "th_TH": "", "tr_TR": "", @@ -22513,7 +22513,7 @@ "no_NO": "Intervall", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Интервал", "sv_SE": "Intervall", "th_TH": "", "tr_TR": "", @@ -22538,7 +22538,7 @@ "no_NO": "Veksle mellom VSync-modus:", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Выбрать режим вертикальной синхронизации:", "sv_SE": "Växla VSync-läge:", "th_TH": "", "tr_TR": "", @@ -22563,7 +22563,7 @@ "no_NO": "Øk den egendefinerte oppdateringsfrekvensen", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Повышение пользовательской частоты кадров", "sv_SE": "Höj anpassad uppdateringsfrekvens", "th_TH": "", "tr_TR": "", @@ -22588,7 +22588,7 @@ "no_NO": "Lavere tilpasset oppdateringsfrekvens", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "Понижение пользовательской частоты кадров", "sv_SE": "Sänk anpassad uppdateringsfrekvens", "th_TH": "", "tr_TR": "", @@ -22598,4 +22598,4 @@ } } ] -} +} \ No newline at end of file -- 2.47.1 From 664c63c6a8bf682f42f045f75536c30b250a72af Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 20:47:02 -0600 Subject: [PATCH 199/722] metal: Bump SharpMetal to preview 21 --- Directory.Packages.props | 2 +- .../CAMetalLayerExtensions.cs | 18 ++++-------- .../NSHelper.cs | 28 +++++++++++++++++++ ...Graphics.Metal.SharpMetalExtensions.csproj | 1 + src/Ryujinx.Graphics.Metal/Window.cs | 8 +++--- 5 files changed, 39 insertions(+), 18 deletions(-) create mode 100644 src/Ryujinx.Graphics.Metal.SharpMetalExtensions/NSHelper.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index 07fc8cc28..59abe363c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -44,7 +44,7 @@ - + diff --git a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs index 0d29a502b..f8fe7d2e7 100644 --- a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs +++ b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/CAMetalLayerExtensions.cs @@ -1,4 +1,5 @@ using SharpMetal; +using SharpMetal.Foundation; using SharpMetal.ObjectiveCCore; using SharpMetal.QuartzCore; using System.Runtime.Versioning; @@ -9,22 +10,13 @@ namespace Ryujinx.Graphics.Metal.SharpMetalExtensions [SupportedOSPlatform("macOS")] public static class CAMetalLayerExtensions { - private static readonly Selector sel_displaySyncEnabled = "displaySyncEnabled"; - private static readonly Selector sel_setDisplaySyncEnabled = "setDisplaySyncEnabled:"; - private static readonly Selector sel_developerHUDProperties = "developerHUDProperties"; private static readonly Selector sel_setDeveloperHUDProperties = "setDeveloperHUDProperties:"; - - public static bool IsDisplaySyncEnabled(this CAMetalLayer metalLayer) - => ObjectiveCRuntime.bool_objc_msgSend(metalLayer.NativePtr, sel_displaySyncEnabled); - public static void SetDisplaySyncEnabled(this CAMetalLayer metalLayer, bool enabled) - => ObjectiveCRuntime.objc_msgSend(metalLayer.NativePtr, sel_setDisplaySyncEnabled, enabled); + public static NSDictionary GetDeveloperHudProperties(this CAMetalLayer metalLayer) + => new(ObjectiveCRuntime.IntPtr_objc_msgSend(metalLayer.NativePtr, sel_developerHUDProperties)); - public static nint GetDeveloperHudProperties(this CAMetalLayer metalLayer) - => ObjectiveCRuntime.IntPtr_objc_msgSend(metalLayer.NativePtr, sel_developerHUDProperties); - - public static void SetDeveloperHudProperties(this CAMetalLayer metalLayer, nint dictionaryPointer) - => ObjectiveCRuntime.objc_msgSend(metalLayer.NativePtr, sel_setDeveloperHUDProperties, dictionaryPointer); + public static void SetDeveloperHudProperties(this CAMetalLayer metalLayer, NSDictionary dictionary) + => ObjectiveCRuntime.objc_msgSend(metalLayer.NativePtr, sel_setDeveloperHUDProperties, dictionary); } } diff --git a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/NSHelper.cs b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/NSHelper.cs new file mode 100644 index 000000000..52c192a90 --- /dev/null +++ b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/NSHelper.cs @@ -0,0 +1,28 @@ +using SharpMetal.Foundation; +using SharpMetal.ObjectiveCCore; +using System.Runtime.Versioning; + +namespace Ryujinx.Graphics.Metal.SharpMetalExtensions +{ + [SupportedOSPlatform("macOS")] + public static class NSHelper + { + public static unsafe string ToDotNetString(this NSString source) + { + char[] sourceBuffer = new char[source.Length]; + fixed (char* pSourceBuffer = sourceBuffer) + { + ObjectiveC.bool_objc_msgSend(source, + "getCString:maxLength:encoding:", + pSourceBuffer, + source.MaximumLengthOfBytes(NSStringEncoding.UTF16) + 1, + (ulong)NSStringEncoding.UTF16); + } + + return new string(sourceBuffer); + } + + public static NSString ToNSString(this string source) + => new(ObjectiveC.IntPtr_objc_msgSend(new ObjectiveCClass("NSString"), "stringWithUTF8String:", source)); + } +} diff --git a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj index 9836063a3..1e75b4d26 100644 --- a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj +++ b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj @@ -2,6 +2,7 @@ enable enable + true diff --git a/src/Ryujinx.Graphics.Metal/Window.cs b/src/Ryujinx.Graphics.Metal/Window.cs index 203a29ebc..61137f97d 100644 --- a/src/Ryujinx.Graphics.Metal/Window.cs +++ b/src/Ryujinx.Graphics.Metal/Window.cs @@ -18,7 +18,7 @@ namespace Ryujinx.Graphics.Metal public bool ScreenCaptureRequested { get; set; } private readonly MetalRenderer _renderer; - private readonly CAMetalLayer _metalLayer; + private CAMetalLayer _metalLayer; private int _width; private int _height; @@ -146,11 +146,11 @@ namespace Ryujinx.Graphics.Metal { switch (vSyncMode) { - case VSyncMode.Unbounded: - _metalLayer.SetDisplaySyncEnabled(false); + case VSyncMode.Unbounded: + _metalLayer.DisplaySyncEnabled = false; break; case VSyncMode.Switch: - _metalLayer.SetDisplaySyncEnabled(true); + _metalLayer.DisplaySyncEnabled = true; break; } } -- 2.47.1 From 7d5442404823cdf5a2dafce66be6b6b90d3e0a44 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Fri, 27 Dec 2024 21:31:46 -0600 Subject: [PATCH 200/722] misc: Use selector fields --- .../NSHelper.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/NSHelper.cs b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/NSHelper.cs index 52c192a90..dc2495d07 100644 --- a/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/NSHelper.cs +++ b/src/Ryujinx.Graphics.Metal.SharpMetalExtensions/NSHelper.cs @@ -1,19 +1,23 @@ using SharpMetal.Foundation; using SharpMetal.ObjectiveCCore; using System.Runtime.Versioning; +// ReSharper disable InconsistentNaming namespace Ryujinx.Graphics.Metal.SharpMetalExtensions { [SupportedOSPlatform("macOS")] public static class NSHelper { + private static readonly Selector sel_getCStringMaxLengthEncoding = "getCString:maxLength:encoding:"; + private static readonly Selector sel_stringWithUTF8String = "stringWithUTF8String:"; + public static unsafe string ToDotNetString(this NSString source) { char[] sourceBuffer = new char[source.Length]; fixed (char* pSourceBuffer = sourceBuffer) { ObjectiveC.bool_objc_msgSend(source, - "getCString:maxLength:encoding:", + sel_getCStringMaxLengthEncoding, pSourceBuffer, source.MaximumLengthOfBytes(NSStringEncoding.UTF16) + 1, (ulong)NSStringEncoding.UTF16); @@ -23,6 +27,6 @@ namespace Ryujinx.Graphics.Metal.SharpMetalExtensions } public static NSString ToNSString(this string source) - => new(ObjectiveC.IntPtr_objc_msgSend(new ObjectiveCClass("NSString"), "stringWithUTF8String:", source)); + => new(ObjectiveC.IntPtr_objc_msgSend(new ObjectiveCClass(nameof(NSString)), sel_stringWithUTF8String, source)); } } -- 2.47.1 From 709eeda94ace9fb10e02d65607d4b18249199acc Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 28 Dec 2024 02:00:46 -0600 Subject: [PATCH 201/722] (try) fix PR build comments --- .github/workflows/nightly_pr_comment.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly_pr_comment.yml b/.github/workflows/nightly_pr_comment.yml index 85a6e2de4..9f9fcdcad 100644 --- a/.github/workflows/nightly_pr_comment.yml +++ b/.github/workflows/nightly_pr_comment.yml @@ -41,12 +41,13 @@ jobs: let hidden_headless_artifacts = `\n\n
GUI-less\n`; let hidden_debug_artifacts = `\n\n
Only for Developers\n`; for (const art of artifacts) { + var url = `https://github.com/Ryubing/Ryujinx/actions/runs/${run_id}/artifacts/${art_id}`; if(art.name.includes('Debug')) { - hidden_debug_artifacts += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`; + hidden_debug_artifacts += `\n* [${art.name}](${url})`; } else if(art.name.includes('nogui-ryujinx')) { - hidden_headless_artifacts += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`; + hidden_headless_artifacts += `\n* [${art.name}](${url})`; } else { - body += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`; + body += `\n* [${art.name}](${url})`; } } hidden_headless_artifacts += `\n
`; -- 2.47.1 From 77a9246825ff6358a584478ef095295374496cd7 Mon Sep 17 00:00:00 2001 From: heihei123456780 <103516986+heihei123456780@users.noreply.github.com> Date: Sat, 28 Dec 2024 16:42:25 +0800 Subject: [PATCH 202/722] Updated zh-CN translation (#440) --- src/Ryujinx/Assets/locales.json | 176 ++++++++++++++++---------------- 1 file changed, 88 insertions(+), 88 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index fc77cf458..907a7d7bd 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -93,7 +93,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Аплет для редагування Mii", - "zh_CN": "", + "zh_CN": "Mii 小程序", "zh_TW": "" } }, @@ -743,7 +743,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "从bin文件扫描 Amiibo", "zh_TW": "" } }, @@ -868,7 +868,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "安装密匙", "zh_TW": "" } }, @@ -893,7 +893,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "从.KEYS文件或ZIP压缩包安装密匙", "zh_TW": "" } }, @@ -918,7 +918,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "从一个文件夹安装密匙", "zh_TW": "" } }, @@ -1018,7 +1018,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Обрізати XCI файли", - "zh_CN": "", + "zh_CN": "XCI文件瘦身", "zh_TW": "" } }, @@ -1268,7 +1268,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "常见问题和问题排除页面", "zh_TW": "" } }, @@ -1293,7 +1293,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "打开Ryujinx官方wiki的常见问题和问题排除页面", "zh_TW": "" } }, @@ -1318,7 +1318,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "安装与配置指南", "zh_TW": "" } }, @@ -1343,7 +1343,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "打开Ryujinx官方wiki的安装与配置指南", "zh_TW": "" } }, @@ -1368,7 +1368,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "多人游戏(LDN/LAN)指南", "zh_TW": "" } }, @@ -1393,7 +1393,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "打开Ryujinx官方wiki的多人游戏指南", "zh_TW": "" } }, @@ -2543,7 +2543,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Перевірка та Нарізка XCI Файлів", - "zh_CN": "", + "zh_CN": "检查并瘦身XCI文件", "zh_TW": "" } }, @@ -2568,7 +2568,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Перевірка та Нарізка XCI Файлів для збереження місця на диску", - "zh_CN": "", + "zh_CN": "检查并瘦身XCI文件以节约磁盘空间", "zh_TW": "" } }, @@ -2643,7 +2643,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Обрізано XCI Файлів '{0}'", - "zh_CN": "", + "zh_CN": "XCI文件瘦身中'{0}'", "zh_TW": "" } }, @@ -10518,7 +10518,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Скасування", - "zh_CN": "", + "zh_CN": "正在取消", "zh_TW": "" } }, @@ -10543,7 +10543,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Закрити", - "zh_CN": "", + "zh_CN": "关闭", "zh_TW": "" } }, @@ -11843,7 +11843,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Показати список змін", - "zh_CN": "", + "zh_CN": "显示更新日志", "zh_TW": "" } }, @@ -12318,7 +12318,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "XCI文件瘦身窗口", "zh_TW": "" } }, @@ -13043,7 +13043,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "在{0}发现了一个无效的密匙文件", "zh_TW": "" } }, @@ -13068,7 +13068,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Встановлення Ключів", - "zh_CN": "", + "zh_CN": "安装密匙", "zh_TW": "" } }, @@ -13093,7 +13093,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Новий файл Ключів буде встановлено", - "zh_CN": "", + "zh_CN": "将会安装新密匙文件", "zh_TW": "" } }, @@ -13118,7 +13118,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "\n\nЦе замінить собою поточні файли Ключів.", - "zh_CN": "", + "zh_CN": "\n\n这也许会替换掉一些当前已安装的密匙", "zh_TW": "" } }, @@ -13143,7 +13143,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "\n\nВи хочете продовжити?", - "zh_CN": "", + "zh_CN": "\n\n你想要继续吗?", "zh_TW": "" } }, @@ -13168,7 +13168,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Встановлення Ключів...", - "zh_CN": "", + "zh_CN": "安装密匙中。。。", "zh_TW": "" } }, @@ -13193,7 +13193,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Нові ключі встановлено.", - "zh_CN": "", + "zh_CN": "已成功安装新密匙文件", "zh_TW": "" } }, @@ -14243,7 +14243,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Минулі розробники:", - "zh_CN": "", + "zh_CN": "曾经的维护者:", "zh_TW": "" } }, @@ -15268,7 +15268,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "重新同步系统时间以匹配您电脑的当前日期和时间。\n\n这个操作不会实时同步系统时间与电脑时间,时间仍然可能不同步;在这种情况下,只需再次单击此按钮即可。", "zh_TW": "" } }, @@ -17518,7 +17518,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Часткові", - "zh_CN": "", + "zh_CN": "分区", "zh_TW": "" } }, @@ -17543,7 +17543,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Необрізані", - "zh_CN": "", + "zh_CN": "没有瘦身的", "zh_TW": "" } }, @@ -17568,7 +17568,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Обрізані", - "zh_CN": "", + "zh_CN": "经过瘦身的", "zh_TW": "" } }, @@ -17593,7 +17593,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "(Невдача)", - "zh_CN": "", + "zh_CN": "(失败)", "zh_TW": "" } }, @@ -17618,7 +17618,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Зберегти {0:n0} Мб", - "zh_CN": "", + "zh_CN": "能节约 {0:n0} Mb", "zh_TW": "" } }, @@ -17643,7 +17643,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Збережено {0:n0} Мб", - "zh_CN": "", + "zh_CN": "节约了 {0:n0} Mb", "zh_TW": "" } }, @@ -17843,7 +17843,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Вкажіть Ваше нове ім'я Amiibo", - "zh_CN": "", + "zh_CN": "输入你的 Amiibo 的新名字", "zh_TW": "" } }, @@ -17868,7 +17868,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Будь ласка, проскануйте Ваш Amiibo.", - "zh_CN": "", + "zh_CN": "请现在扫描你的 Amiibo", "zh_TW": "" } }, @@ -18993,7 +18993,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Перевірити та Обрізати XCI файл", - "zh_CN": "", + "zh_CN": "检查并瘦身XCI文件", "zh_TW": "" } }, @@ -19018,7 +19018,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Ця функція спочатку перевірить вільний простір, а потім обрізатиме файл XCI для економії місця на диску.", - "zh_CN": "", + "zh_CN": "这个功能将会先检查XCI文件,再对其执行瘦身操作以节约磁盘空间。", "zh_TW": "" } }, @@ -19043,7 +19043,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Поточний розмір файла: {0:n} MB\nРозмір файлів гри: {1:n} MB\nЕкономія місця: {2:n} MB", - "zh_CN": "", + "zh_CN": "当前文件大小: {0:n} MB\n游戏数据大小: {1:n} MB\n节约的磁盘空间: {2:n} MB", "zh_TW": "" } }, @@ -19068,7 +19068,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "XCI файл не потребує обрізання. Перевірте журнали для додаткової інформації", - "zh_CN": "", + "zh_CN": "XCI文件不需要被瘦身。查看日志以获得更多细节。", "zh_TW": "" } }, @@ -19093,7 +19093,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "XCI файл не може бути обрізаний. Перевірте журнали для додаткової інформації", - "zh_CN": "", + "zh_CN": "XCI文件不能被瘦身。查看日志以获得更多细节。", "zh_TW": "" } }, @@ -19118,7 +19118,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "XCI файл Тільки для Читання і не може бути прочитаним. Перевірте журнали додаткової інформації", - "zh_CN": "", + "zh_CN": "XCI文件是只读的,且不可以被标记为可读取的。查看日志以获得更多细节。", "zh_TW": "" } }, @@ -19143,7 +19143,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Розмір файлу XCI змінився з моменту сканування. Перевірте, чи не записується файл, та спробуйте знову", - "zh_CN": "", + "zh_CN": "XCI文件在扫描后大小发生了变化。请检查文件是否未被写入,然后重试。", "zh_TW": "" } }, @@ -19168,7 +19168,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Файл XCI містить дані в зоні вільного простору, тому обрізка небезпечна", - "zh_CN": "", + "zh_CN": "XCI文件的空闲区域内有数据,不能安全瘦身。", "zh_TW": "" } }, @@ -19193,7 +19193,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "XCI Файл містить недійсні дані. Перевірте журнали для додаткової інформації", - "zh_CN": "", + "zh_CN": "XCI文件含有无效数据。查看日志以获得更多细节。", "zh_TW": "" } }, @@ -19218,7 +19218,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "XCI Файл файл не вдалося відкрити для запису. Перевірте журнали для додаткової інформації", - "zh_CN": "", + "zh_CN": "XCI文件不能被读写。查看日志以获得更多细节。", "zh_TW": "" } }, @@ -19243,7 +19243,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Не вдалося обрізати файл XCI", - "zh_CN": "", + "zh_CN": "XCI文件瘦身失败", "zh_TW": "" } }, @@ -19268,7 +19268,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Операція перервана", - "zh_CN": "", + "zh_CN": "操作已取消", "zh_TW": "" } }, @@ -19293,7 +19293,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Операція не проводилася", - "zh_CN": "", + "zh_CN": "未执行操作", "zh_TW": "" } }, @@ -19443,7 +19443,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Обрізка XCI Файлів", - "zh_CN": "", + "zh_CN": "XCI文件瘦身器", "zh_TW": "" } }, @@ -19468,7 +19468,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "{0} з {1} тайтл(ів) обрано", - "zh_CN": "", + "zh_CN": "在 {1} 中选中了 {0} 个游戏 ", "zh_TW": "" } }, @@ -19493,7 +19493,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "{0} з {1} тайтл(ів) обрано ({2} відображається)", - "zh_CN": "", + "zh_CN": "在 {1} 中选中了 {0} 个游戏 (显示了 {2} 个)", "zh_TW": "" } }, @@ -19518,7 +19518,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Обрізка {0} тайтл(ів)...", - "zh_CN": "", + "zh_CN": "{0} 个游戏瘦身中。。。", "zh_TW": "" } }, @@ -19568,7 +19568,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Невдача", - "zh_CN": "", + "zh_CN": "失败", "zh_TW": "" } }, @@ -19593,7 +19593,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Потенційна економія", - "zh_CN": "", + "zh_CN": "潜在的储存空间节省", "zh_TW": "" } }, @@ -19618,7 +19618,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Зекономлено", - "zh_CN": "", + "zh_CN": "实际的储存空间节省", "zh_TW": "" } }, @@ -19668,7 +19668,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Вибрати показане", - "zh_CN": "", + "zh_CN": "选定显示的", "zh_TW": "" } }, @@ -19693,7 +19693,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Скасувати вибір показаного", - "zh_CN": "", + "zh_CN": "反选显示的", "zh_TW": "" } }, @@ -19768,7 +19768,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Обрізка", - "zh_CN": "", + "zh_CN": "瘦身", "zh_TW": "" } }, @@ -20143,7 +20143,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Продовжити", - "zh_CN": "", + "zh_CN": "继续", "zh_TW": "" } }, @@ -20518,7 +20518,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "自动", "zh_TW": "" } }, @@ -20543,7 +20543,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "使用Vulkan。\n在ARM Mac上,当玩在其下运行良好的游戏时,使用Metal后端。", "zh_TW": "" } }, @@ -21943,7 +21943,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Вимкнути хостинг P2P мережі (може збільшити затримку)", - "zh_CN": "", + "zh_CN": "禁用P2P网络连接 (也许会增加延迟)", "zh_TW": "" } }, @@ -21968,7 +21968,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Вимкнути хостинг P2P мережі, піри будуть підключатися через майстер-сервер замість прямого з'єднання з вами.", - "zh_CN": "", + "zh_CN": "禁用P2P网络连接,对方将通过主服务器进行连接,而不是直接连接到您。", "zh_TW": "" } }, @@ -21993,7 +21993,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Мережевий пароль:", - "zh_CN": "", + "zh_CN": "网络密码:", "zh_TW": "" } }, @@ -22018,7 +22018,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.", - "zh_CN": "", + "zh_CN": "您只能看到与您使用相同密码的游戏房间。", "zh_TW": "" } }, @@ -22043,7 +22043,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Введіть пароль у форматі Ryujinx-<8 символів>. Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.", - "zh_CN": "", + "zh_CN": "以Ryujinx-<8个十六进制字符>的格式输入密码。您只能看到与您使用相同密码的游戏房间。", "zh_TW": "" } }, @@ -22068,7 +22068,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "(публічний)", - "zh_CN": "", + "zh_CN": "(公开的)", "zh_TW": "" } }, @@ -22093,7 +22093,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Згенерувати випадкову", - "zh_CN": "", + "zh_CN": "随机生成", "zh_TW": "" } }, @@ -22118,7 +22118,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Генерує новий пароль, яким можна поділитися з іншими гравцями.", - "zh_CN": "", + "zh_CN": "生成一个新的密码,可以与其他玩家共享。", "zh_TW": "" } }, @@ -22143,7 +22143,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Очистити", - "zh_CN": "", + "zh_CN": "清除", "zh_TW": "" } }, @@ -22168,7 +22168,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Очищає поточну пароль, повертаючись до публічної мережі.", - "zh_CN": "", + "zh_CN": "清除当前密码,返回公共网络。", "zh_TW": "" } }, @@ -22193,7 +22193,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Невірний пароль! Має бути в форматі \"Ryujinx-<8 символів>\"", - "zh_CN": "", + "zh_CN": "无效密码!密码的格式必须是\"Ryujinx-<8个十六进制字符>\"", "zh_TW": "" } }, @@ -22218,7 +22218,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Вертикальна синхронізація (VSync):", - "zh_CN": "", + "zh_CN": "垂直同步(VSync)", "zh_TW": "" } }, @@ -22243,7 +22243,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Увімкнути користувацьку частоту оновлення (Експериментально)", - "zh_CN": "", + "zh_CN": "启动自定义刷新率(实验性功能)", "zh_TW": "" } }, @@ -22293,7 +22293,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Безмежна", - "zh_CN": "", + "zh_CN": "无限制", "zh_TW": "" } }, @@ -22318,7 +22318,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Користувацька", - "zh_CN": "", + "zh_CN": "自定义刷新率", "zh_TW": "" } }, @@ -22343,7 +22343,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень.", - "zh_CN": "", + "zh_CN": "模拟垂直同步。“Switch”模拟了Switch的60Hz刷新率。“无限制”没有刷新率限制。", "zh_TW": "" } }, @@ -22368,7 +22368,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень. 'Користувацька' емулює вказану користувацьку частоту оновлення.", - "zh_CN": "", + "zh_CN": "模拟垂直同步。“Switch”模拟了Switch的60Hz刷新率。“无限制”没有刷新率限制。“自定义刷新率”模拟指定的自定义刷新率。", "zh_TW": "" } }, @@ -22393,7 +22393,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Дозволяє користувачу вказати емульовану частоту оновлення. У деяких іграх це може прискорити або сповільнити логіку гри. У інших іграх це може дозволити обмежити FPS на певні кратні частоти оновлення або призвести до непередбачуваної поведінки. Це експериментальна функція, без гарантій того, як це вплине на ігровий процес. \n\nЗалиште ВИМКНЕНИМ, якщо не впевнені.", - "zh_CN": "", + "zh_CN": "允许用户指定模拟刷新率。在某些游戏中,这可能会加快或减慢游戏逻辑的速度。在其他游戏中,它可能允许将FPS限制在刷新率的某个倍数,或者导致不可预测的行为。这是一个实验性功能,无法保证游戏会受到怎样的影响。\n\n如果不确定,请关闭。", "zh_TW": "" } }, @@ -22418,7 +22418,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Цільове значення користувацької частоти оновлення.", - "zh_CN": "", + "zh_CN": "目标自定义刷新率值。", "zh_TW": "" } }, @@ -22443,7 +22443,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Користувацька частота оновлення, як відсоток від стандартної частоти оновлення Switch.", - "zh_CN": "", + "zh_CN": "自定义刷新率,占正常SWitch刷新率的百分比值。", "zh_TW": "" } }, @@ -22468,7 +22468,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Користувацька частота оновлення %:", - "zh_CN": "", + "zh_CN": "自定义刷新率值 %:", "zh_TW": "" } }, @@ -22493,7 +22493,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Значення користувацька частота оновлення:", - "zh_CN": "", + "zh_CN": "自定义刷新率值:", "zh_TW": "" } }, @@ -22518,7 +22518,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "", - "zh_CN": "", + "zh_CN": "间隔", "zh_TW": "" } }, @@ -22543,7 +22543,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Перемкнути VSync режим:", - "zh_CN": "", + "zh_CN": "设置 VSync 模式:", "zh_TW": "" } }, @@ -22568,7 +22568,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Підвищити користувацьку частоту оновлення", - "zh_CN": "", + "zh_CN": "提高自定义刷新率:", "zh_TW": "" } }, @@ -22593,7 +22593,7 @@ "th_TH": "", "tr_TR": "", "uk_UA": "Понизити користувацьку частоту оновлення", - "zh_CN": "", + "zh_CN": "降低自定义刷新率:", "zh_TW": "" } } -- 2.47.1 From 18625cf77541c66e4c166759e749b4ae80c55a7c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 28 Dec 2024 02:45:33 -0600 Subject: [PATCH 203/722] Update nightly_pr_comment.yml --- .github/workflows/nightly_pr_comment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly_pr_comment.yml b/.github/workflows/nightly_pr_comment.yml index 9f9fcdcad..6023440f5 100644 --- a/.github/workflows/nightly_pr_comment.yml +++ b/.github/workflows/nightly_pr_comment.yml @@ -41,7 +41,7 @@ jobs: let hidden_headless_artifacts = `\n\n
GUI-less\n`; let hidden_debug_artifacts = `\n\n
Only for Developers\n`; for (const art of artifacts) { - var url = `https://github.com/Ryubing/Ryujinx/actions/runs/${run_id}/artifacts/${art_id}`; + var url = `https://github.com/Ryubing/Ryujinx/actions/runs/${run.id}/artifacts/${art.id}`; if(art.name.includes('Debug')) { hidden_debug_artifacts += `\n* [${art.name}](${url})`; } else if(art.name.includes('nogui-ryujinx')) { -- 2.47.1 From 0c21b07f198b5ffaaf67fac0c00725b8761a88fc Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 28 Dec 2024 03:01:59 -0600 Subject: [PATCH 204/722] Update nightly_pr_comment.yml --- .github/workflows/nightly_pr_comment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly_pr_comment.yml b/.github/workflows/nightly_pr_comment.yml index 6023440f5..b9128f13d 100644 --- a/.github/workflows/nightly_pr_comment.yml +++ b/.github/workflows/nightly_pr_comment.yml @@ -41,7 +41,7 @@ jobs: let hidden_headless_artifacts = `\n\n
GUI-less\n`; let hidden_debug_artifacts = `\n\n
Only for Developers\n`; for (const art of artifacts) { - var url = `https://github.com/Ryubing/Ryujinx/actions/runs/${run.id}/artifacts/${art.id}`; + const url = `https://github.com/Ryubing/Ryujinx/actions/runs/${run_id}/artifacts/${art.id}`; if(art.name.includes('Debug')) { hidden_debug_artifacts += `\n* [${art.name}](${url})`; } else if(art.name.includes('nogui-ryujinx')) { -- 2.47.1 From 12b264af44a7491c33154c0c77f798a48fca7804 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 28 Dec 2024 03:49:06 -0600 Subject: [PATCH 205/722] Headless in Avalonia v2 (#448) Launch the Ryujinx.exe, first argument --no-gui or nogui, and the rest of the arguments should be your normal headless script. You can include the new option --use-main-config which will provide any arguments that you don't, filled in from your main config made by the UI. Input config is not inherited at this time. --- .github/workflows/build.yml | 23 - .github/workflows/canary.yml | 20 +- .github/workflows/nightly_pr_comment.yml | 5 - .github/workflows/release.yml | 17 +- Ryujinx.sln | 6 - src/Ryujinx.Common/Logging/Logger.cs | 20 +- .../Logging/Targets/AsyncLogTargetWrapper.cs | 6 +- .../Account/Acc/AccountSaveDataManager.cs | 16 +- .../Ryujinx.Headless.SDL2.csproj | 73 ---- src/Ryujinx.Headless.SDL2/Ryujinx.bmp | Bin 9354 -> 0 bytes .../Configuration/System/Language.cs | 1 + .../Helper/FileAssociationHelper.cs | 2 +- .../HeadlessDynamicTextInputHandler.cs | 2 +- .../Headless}/HeadlessHostUiTheme.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 367 ++++++++++++++++ .../Headless/HeadlessRyujinx.cs} | 397 +++--------------- .../Headless}/Metal/MetalWindow.cs | 2 +- .../Headless}/OpenGL/OpenGLWindow.cs | 2 +- .../Headless}/Options.cs | 159 ++++++- src/Ryujinx/Headless/Ryujinx.bmp | Bin 0 -> 3978 bytes .../Headless}/StatusUpdatedEventArgs.cs | 2 +- .../Headless}/Vulkan/VulkanWindow.cs | 2 +- .../Headless}/WindowBase.cs | 7 +- src/Ryujinx/Program.cs | 17 +- src/Ryujinx/Ryujinx.csproj | 4 +- 25 files changed, 647 insertions(+), 505 deletions(-) delete mode 100644 src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj delete mode 100644 src/Ryujinx.Headless.SDL2/Ryujinx.bmp rename src/{Ryujinx.Headless.SDL2 => Ryujinx/Headless}/HeadlessDynamicTextInputHandler.cs (97%) rename src/{Ryujinx.Headless.SDL2 => Ryujinx/Headless}/HeadlessHostUiTheme.cs (93%) create mode 100644 src/Ryujinx/Headless/HeadlessRyujinx.Init.cs rename src/{Ryujinx.Headless.SDL2/Program.cs => Ryujinx/Headless/HeadlessRyujinx.cs} (53%) rename src/{Ryujinx.Headless.SDL2 => Ryujinx/Headless}/Metal/MetalWindow.cs (97%) rename src/{Ryujinx.Headless.SDL2 => Ryujinx/Headless}/OpenGL/OpenGLWindow.cs (99%) rename src/{Ryujinx.Headless.SDL2 => Ryujinx/Headless}/Options.cs (63%) create mode 100644 src/Ryujinx/Headless/Ryujinx.bmp rename src/{Ryujinx.Headless.SDL2 => Ryujinx/Headless}/StatusUpdatedEventArgs.cs (94%) rename src/{Ryujinx.Headless.SDL2 => Ryujinx/Headless}/Vulkan/VulkanWindow.cs (98%) rename src/{Ryujinx.Headless.SDL2 => Ryujinx/Headless}/WindowBase.cs (98%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 21dc3eb0b..aeb12a575 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,14 +64,9 @@ jobs: run: dotnet publish -c "${{ matrix.configuration }}" -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ env.RYUJINX_BASE_VERSION }}" -p:DebugType=embedded -p:SourceRevisionId="${{ steps.git_short_hash.outputs.result }}" -p:ExtraDefineConstants=DISABLE_UPDATER src/Ryujinx --self-contained if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13' - - name: Publish Ryujinx.Headless.SDL2 - run: dotnet publish -c "${{ matrix.configuration }}" -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless -p:Version="${{ env.RYUJINX_BASE_VERSION }}" -p:DebugType=embedded -p:SourceRevisionId="${{ steps.git_short_hash.outputs.result }}" -p:ExtraDefineConstants=DISABLE_UPDATER src/Ryujinx.Headless.SDL2 --self-contained - if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13' - - name: Set executable bit run: | chmod +x ./publish/Ryujinx ./publish/Ryujinx.sh - chmod +x ./publish_sdl2_headless/Ryujinx.Headless.SDL2 ./publish_sdl2_headless/Ryujinx.sh if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest' - name: Build AppImage @@ -119,13 +114,6 @@ jobs: name: ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }}-AppImage path: publish_appimage - - name: Upload Ryujinx.Headless.SDL2 artifact - uses: actions/upload-artifact@v4 - with: - name: nogui-ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }} - path: publish_sdl2_headless - if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13' - build_macos: name: macOS Universal (${{ matrix.configuration }}) runs-on: ubuntu-latest @@ -171,20 +159,9 @@ jobs: run: | ./distribution/macos/create_macos_build_ava.sh . publish_tmp publish ./distribution/macos/entitlements.xml "${{ env.RYUJINX_BASE_VERSION }}" "${{ steps.git_short_hash.outputs.result }}" "${{ matrix.configuration }}" "-p:ExtraDefineConstants=DISABLE_UPDATER" - - name: Publish macOS Ryujinx.Headless.SDL2 - run: | - ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ env.RYUJINX_BASE_VERSION }}" "${{ steps.git_short_hash.outputs.result }}" "${{ matrix.configuration }}" "-p:ExtraDefineConstants=DISABLE_UPDATER" - - name: Upload Ryujinx artifact uses: actions/upload-artifact@v4 with: name: ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-macos_universal path: "publish/*.tar.gz" if: github.event_name == 'pull_request' - - - name: Upload Ryujinx.Headless.SDL2 artifact - uses: actions/upload-artifact@v4 - with: - name: nogui-ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-macos_universal - path: "publish_headless/*.tar.gz" - if: github.event_name == 'pull_request' diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index c17b06046..a0653f540 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -116,7 +116,6 @@ jobs: - name: Publish run: | dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_ava/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained - dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained - name: Packing Windows builds if: matrix.platform.os == 'windows-latest' @@ -125,11 +124,6 @@ jobs: rm publish/libarmeilleure-jitsupport.dylib 7z a ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish popd - - pushd publish_sdl2_headless - rm publish/libarmeilleure-jitsupport.dylib - 7z a ../release_output/nogui-ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish - popd shell: bash - name: Packing Linux builds @@ -140,12 +134,6 @@ jobs: chmod +x publish/Ryujinx.sh publish/Ryujinx tar -czvf ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish popd - - pushd publish_sdl2_headless - rm publish/libarmeilleure-jitsupport.dylib - chmod +x publish/Ryujinx.sh publish/Ryujinx.Headless.SDL2 - tar -czvf ../release_output/nogui-ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish - popd shell: bash #- name: Build AppImage (Linux) @@ -191,7 +179,7 @@ jobs: with: name: ${{ steps.version_info.outputs.build_version }} artifacts: "release_output/*.tar.gz,release_output/*.zip" - #artifacts: "release_output/*.tar.gz,release_output/*.zip/*AppImage*" + #artifacts: "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*" tag: ${{ steps.version_info.outputs.build_version }} body: | # Canary builds: @@ -262,15 +250,11 @@ jobs: run: | ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish_ava ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 1 - - name: Publish macOS Ryujinx.Headless.SDL2 - run: | - ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 1 - - name: Pushing new release uses: ncipollo/release-action@v1 with: name: "Canary ${{ steps.version_info.outputs.build_version }}" - artifacts: "publish_ava/*.tar.gz, publish_headless/*.tar.gz" + artifacts: "publish_ava/*.tar.gz" tag: ${{ steps.version_info.outputs.build_version }} body: "" omitBodyDuringUpdate: true diff --git a/.github/workflows/nightly_pr_comment.yml b/.github/workflows/nightly_pr_comment.yml index b9128f13d..6ca4710dc 100644 --- a/.github/workflows/nightly_pr_comment.yml +++ b/.github/workflows/nightly_pr_comment.yml @@ -38,21 +38,16 @@ jobs: return core.error(`No artifacts found`); } let body = `Download the artifacts for this pull request:\n`; - let hidden_headless_artifacts = `\n\n
GUI-less\n`; let hidden_debug_artifacts = `\n\n
Only for Developers\n`; for (const art of artifacts) { const url = `https://github.com/Ryubing/Ryujinx/actions/runs/${run_id}/artifacts/${art.id}`; if(art.name.includes('Debug')) { hidden_debug_artifacts += `\n* [${art.name}](${url})`; - } else if(art.name.includes('nogui-ryujinx')) { - hidden_headless_artifacts += `\n* [${art.name}](${url})`; } else { body += `\n* [${art.name}](${url})`; } } - hidden_headless_artifacts += `\n
`; hidden_debug_artifacts += `\n
`; - body += hidden_headless_artifacts; body += hidden_debug_artifacts; const {data: comments} = await github.rest.issues.listComments({repo, owner, issue_number}); diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a24b58a5d..584507d75 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -112,7 +112,6 @@ jobs: - name: Publish run: | dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained - dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained - name: Packing Windows builds if: matrix.platform.os == 'windows-latest' @@ -121,11 +120,6 @@ jobs: rm libarmeilleure-jitsupport.dylib 7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish popd - - pushd publish_sdl2_headless - rm libarmeilleure-jitsupport.dylib - 7z a ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish - popd shell: bash - name: Build AppImage (Linux) @@ -172,11 +166,6 @@ jobs: chmod +x Ryujinx.sh Ryujinx tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish popd - - pushd publish_sdl2_headless - chmod +x Ryujinx.sh Ryujinx.Headless.SDL2 - tar -czvf ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish - popd shell: bash - name: Pushing new release @@ -251,15 +240,11 @@ jobs: run: | ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 0 - - name: Publish macOS Ryujinx.Headless.SDL2 - run: | - ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 0 - - name: Pushing new release uses: ncipollo/release-action@v1 with: name: ${{ steps.version_info.outputs.build_version }} - artifacts: "publish/*.tar.gz, publish_headless/*.tar.gz" + artifacts: "publish/*.tar.gz" tag: ${{ steps.version_info.outputs.build_version }} body: "" omitBodyDuringUpdate: true diff --git a/Ryujinx.sln b/Ryujinx.sln index e9f57df39..87c1021c1 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -57,8 +57,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.SDL2.Common", "src\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL2", "src\Ryujinx.Audio.Backends.SDL2\Ryujinx.Audio.Backends.SDL2.csproj", "{D99A395A-8569-4DB0-B336-900647890052}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Headless.SDL2", "src\Ryujinx.Headless.SDL2\Ryujinx.Headless.SDL2.csproj", "{390DC343-5CB4-4C79-A5DD-E3ED235E4C49}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmpeg", "src\Ryujinx.Graphics.Nvdec.FFmpeg\Ryujinx.Graphics.Nvdec.FFmpeg.csproj", "{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" @@ -213,10 +211,6 @@ Global {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.Build.0 = Debug|Any CPU {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.ActiveCfg = Release|Any CPU {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.Build.0 = Release|Any CPU - {390DC343-5CB4-4C79-A5DD-E3ED235E4C49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {390DC343-5CB4-4C79-A5DD-E3ED235E4C49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {390DC343-5CB4-4C79-A5DD-E3ED235E4C49}.Release|Any CPU.ActiveCfg = Release|Any CPU - {390DC343-5CB4-4C79-A5DD-E3ED235E4C49}.Release|Any CPU.Build.0 = Release|Any CPU {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.Build.0 = Debug|Any CPU {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/Ryujinx.Common/Logging/Logger.cs b/src/Ryujinx.Common/Logging/Logger.cs index 26d343969..6ea6b7ac3 100644 --- a/src/Ryujinx.Common/Logging/Logger.cs +++ b/src/Ryujinx.Common/Logging/Logger.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Linq; using System.Runtime.CompilerServices; using System.Threading; @@ -157,21 +158,16 @@ namespace Ryujinx.Common.Logging _time.Restart(); } - private static ILogTarget GetTarget(string targetName) - { - foreach (var target in _logTargets) - { - if (target.Name.Equals(targetName)) - { - return target; - } - } - - return null; - } + private static ILogTarget GetTarget(string targetName) + => _logTargets.FirstOrDefault(target => target.Name.Equals(targetName)); public static void AddTarget(ILogTarget target) { + if (_logTargets.Any(t => t.Name == target.Name)) + { + return; + } + _logTargets.Add(target); Updated += target.Log; diff --git a/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs b/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs index a9dbe646a..1fcfea4da 100644 --- a/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs +++ b/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs @@ -27,11 +27,7 @@ namespace Ryujinx.Common.Logging.Targets private readonly int _overflowTimeout; - string ILogTarget.Name { get => _target.Name; } - - public AsyncLogTargetWrapper(ILogTarget target) - : this(target, -1) - { } + string ILogTarget.Name => _target.Name; public AsyncLogTargetWrapper(ILogTarget target, int queueLimit = -1, AsyncLogTargetOverflowAction overflowAction = AsyncLogTargetOverflowAction.Block) { diff --git a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs index b1ef0761c..aa57a0310 100644 --- a/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Account/Acc/AccountSaveDataManager.cs @@ -1,3 +1,4 @@ +using Gommon; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; @@ -6,12 +7,13 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; +using System.Linq; namespace Ryujinx.HLE.HOS.Services.Account.Acc { - class AccountSaveDataManager + public class AccountSaveDataManager { - private readonly string _profilesJsonPath = Path.Join(AppDataManager.BaseDirPath, "system", "Profiles.json"); + private static readonly string _profilesJsonPath = Path.Join(AppDataManager.BaseDirPath, "system", "Profiles.json"); private static readonly ProfilesJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); @@ -49,6 +51,16 @@ namespace Ryujinx.HLE.HOS.Services.Account.Acc } } + public static Optional GetLastUsedUser() + { + ProfilesJson profilesJson = JsonHelper.DeserializeFromFile(_profilesJsonPath, _serializerContext.ProfilesJson); + + return profilesJson.Profiles + .FindFirst(profile => profile.AccountState == AccountState.Open) + .Convert(profileJson => new UserProfile(new UserId(profileJson.UserId), profileJson.Name, + profileJson.Image, profileJson.LastModifiedTimestamp)); + } + public void Save(ConcurrentDictionary profiles) { ProfilesJson profilesJson = new() diff --git a/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj b/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj deleted file mode 100644 index d39f2b481..000000000 --- a/src/Ryujinx.Headless.SDL2/Ryujinx.Headless.SDL2.csproj +++ /dev/null @@ -1,73 +0,0 @@ - - - - win-x64;osx-x64;linux-x64 - Exe - true - 1.0.0-dirty - $(DefineConstants);$(ExtraDefineConstants) - - - true - $(DefaultItemExcludes);._* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Always - THIRDPARTY.md - - - Always - LICENSE.txt - - - - - - Always - - - - - - - - - - false - ..\Ryujinx\Ryujinx.ico - - - - true - true - partial - - diff --git a/src/Ryujinx.Headless.SDL2/Ryujinx.bmp b/src/Ryujinx.Headless.SDL2/Ryujinx.bmp deleted file mode 100644 index 1daa7ce9406ae1ad56b4e697582c3e746a52da7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9354 zcmdU!eN2^A9LLY)lBHX$!m=%_+j6d?ISFlR(`2l-^|BHWB)J5LjMbtf%yhNUAC}W) z%RgHFk+YY%_3E0gmswW8r9W_sxm9MO754&8)Us7->C@-?-21@e1>pj&=ef`PaGt~E znV)l>-#O=Z&Mkak{S0GY>-qUC%t;V1ArsUmeBPQBN7eXc8594fs#SP*(NoPWf8JR2 z>9tpe)*cBIZ_b@S%Q^QZg}oKf-eEs2NiBGX;*_5|0L&Z>UTmFR3}kG zeJM$v4ui$-j>BB=!e4D!=J?AY!6eFO z-~`BVB)s;om4CE7;J63yZG@Afcsp(Kg@4ar-xuQDpQ5`T;>YfPeAWMx;iECQ`^|qI z?#I&D|6$xU&p5H2O6iOE$64`HJ4W{*@pHJ}cgO#P{iE#}%w<6nP0RZe?wofl!Sx`763$NS`_W%**aSQKJ4{AnQ->UHf?wcXpZZ^cZyl_F z2G|a4bTV+!7u$U|IeTYh<&^KH`)@JFpY*?zv*B!yuI;0Z8G>V2{P4mm&Rjtra!EW};8+`Ro?TqS?Sy2kG|^12MQA%W-Xm%IOUkF()i zKx4WIa#h!PF~0Xe9VjpLuRnX4n7yB2PZJ56?ntI7z{|}t&YnTh /// Headless text processing class, right now there is no way to forward the input to it. diff --git a/src/Ryujinx.Headless.SDL2/HeadlessHostUiTheme.cs b/src/Ryujinx/Headless/HeadlessHostUiTheme.cs similarity index 93% rename from src/Ryujinx.Headless.SDL2/HeadlessHostUiTheme.cs rename to src/Ryujinx/Headless/HeadlessHostUiTheme.cs index 78cd43ae5..b5e1ce526 100644 --- a/src/Ryujinx.Headless.SDL2/HeadlessHostUiTheme.cs +++ b/src/Ryujinx/Headless/HeadlessHostUiTheme.cs @@ -1,6 +1,6 @@ using Ryujinx.HLE.UI; -namespace Ryujinx.Headless.SDL2 +namespace Ryujinx.Headless { internal class HeadlessHostUiTheme : IHostUITheme { diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs new file mode 100644 index 000000000..ba84e53a5 --- /dev/null +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -0,0 +1,367 @@ +using DiscordRPC; +using LibHac.Tools.FsSystem; +using Ryujinx.Audio.Backends.SDL2; +using Ryujinx.Ava; +using Ryujinx.Common.Configuration; +using Ryujinx.Common.Configuration.Hid; +using Ryujinx.Common.Configuration.Hid.Controller; +using Ryujinx.Common.Configuration.Hid.Controller.Motion; +using Ryujinx.Common.Configuration.Hid.Keyboard; +using Ryujinx.Common.Logging; +using Ryujinx.Common.Utilities; +using Ryujinx.Graphics.GAL; +using Ryujinx.Graphics.GAL.Multithreading; +using Ryujinx.Graphics.Metal; +using Ryujinx.Graphics.OpenGL; +using Ryujinx.Graphics.Vulkan; +using Ryujinx.HLE; +using Ryujinx.Input; +using Ryujinx.UI.Common; +using Ryujinx.UI.Common.Configuration; +using Silk.NET.Vulkan; +using System; +using System.IO; +using System.Text.Json; +using System.Threading.Tasks; +using ConfigGamepadInputId = Ryujinx.Common.Configuration.Hid.Controller.GamepadInputId; +using ConfigStickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId; +using Key = Ryujinx.Common.Configuration.Hid.Key; + +namespace Ryujinx.Headless +{ + public partial class HeadlessRyujinx + { + public static void Initialize() + { + // Ensure Discord presence timestamp begins at the absolute start of when Ryujinx is launched + DiscordIntegrationModule.StartedAt = Timestamps.Now; + + // Delete backup files after updating. + Task.Run(Updater.CleanupUpdate); + + // Hook unhandled exception and process exit events. + AppDomain.CurrentDomain.UnhandledException += (sender, e) + => Program.ProcessUnhandledException(sender, e.ExceptionObject as Exception, e.IsTerminating); + AppDomain.CurrentDomain.ProcessExit += (_, _) => Program.Exit(); + + // Initialize the configuration. + ConfigurationState.Initialize(); + + // Initialize Discord integration. + DiscordIntegrationModule.Initialize(); + + // Logging system information. + Program.PrintSystemInfo(); + } + + private static InputConfig HandlePlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index) + { + if (inputId == null) + { + if (index == PlayerIndex.Player1) + { + Logger.Info?.Print(LogClass.Application, $"{index} not configured, defaulting to default keyboard."); + + // Default to keyboard + inputId = "0"; + } + else + { + Logger.Info?.Print(LogClass.Application, $"{index} not configured"); + + return null; + } + } + + IGamepad gamepad = _inputManager.KeyboardDriver.GetGamepad(inputId); + + bool isKeyboard = true; + + if (gamepad == null) + { + gamepad = _inputManager.GamepadDriver.GetGamepad(inputId); + isKeyboard = false; + + if (gamepad == null) + { + Logger.Error?.Print(LogClass.Application, $"{index} gamepad not found (\"{inputId}\")"); + + return null; + } + } + + string gamepadName = gamepad.Name; + + gamepad.Dispose(); + + InputConfig config; + + if (inputProfileName == null || inputProfileName.Equals("default")) + { + if (isKeyboard) + { + config = new StandardKeyboardInputConfig + { + Version = InputConfig.CurrentVersion, + Backend = InputBackendType.WindowKeyboard, + Id = null, + ControllerType = ControllerType.JoyconPair, + LeftJoycon = new LeftJoyconCommonConfig + { + DpadUp = Key.Up, + DpadDown = Key.Down, + DpadLeft = Key.Left, + DpadRight = Key.Right, + ButtonMinus = Key.Minus, + ButtonL = Key.E, + ButtonZl = Key.Q, + ButtonSl = Key.Unbound, + ButtonSr = Key.Unbound, + }, + + LeftJoyconStick = new JoyconConfigKeyboardStick + { + StickUp = Key.W, + StickDown = Key.S, + StickLeft = Key.A, + StickRight = Key.D, + StickButton = Key.F, + }, + + RightJoycon = new RightJoyconCommonConfig + { + ButtonA = Key.Z, + ButtonB = Key.X, + ButtonX = Key.C, + ButtonY = Key.V, + ButtonPlus = Key.Plus, + ButtonR = Key.U, + ButtonZr = Key.O, + ButtonSl = Key.Unbound, + ButtonSr = Key.Unbound, + }, + + RightJoyconStick = new JoyconConfigKeyboardStick + { + StickUp = Key.I, + StickDown = Key.K, + StickLeft = Key.J, + StickRight = Key.L, + StickButton = Key.H, + }, + }; + } + else + { + bool isNintendoStyle = gamepadName.Contains("Nintendo"); + + config = new StandardControllerInputConfig + { + Version = InputConfig.CurrentVersion, + Backend = InputBackendType.GamepadSDL2, + Id = null, + ControllerType = ControllerType.JoyconPair, + DeadzoneLeft = 0.1f, + DeadzoneRight = 0.1f, + RangeLeft = 1.0f, + RangeRight = 1.0f, + TriggerThreshold = 0.5f, + LeftJoycon = new LeftJoyconCommonConfig + { + DpadUp = ConfigGamepadInputId.DpadUp, + DpadDown = ConfigGamepadInputId.DpadDown, + DpadLeft = ConfigGamepadInputId.DpadLeft, + DpadRight = ConfigGamepadInputId.DpadRight, + ButtonMinus = ConfigGamepadInputId.Minus, + ButtonL = ConfigGamepadInputId.LeftShoulder, + ButtonZl = ConfigGamepadInputId.LeftTrigger, + ButtonSl = ConfigGamepadInputId.Unbound, + ButtonSr = ConfigGamepadInputId.Unbound, + }, + + LeftJoyconStick = new JoyconConfigControllerStick + { + Joystick = ConfigStickInputId.Left, + StickButton = ConfigGamepadInputId.LeftStick, + InvertStickX = false, + InvertStickY = false, + Rotate90CW = false, + }, + + RightJoycon = new RightJoyconCommonConfig + { + ButtonA = isNintendoStyle ? ConfigGamepadInputId.A : ConfigGamepadInputId.B, + ButtonB = isNintendoStyle ? ConfigGamepadInputId.B : ConfigGamepadInputId.A, + ButtonX = isNintendoStyle ? ConfigGamepadInputId.X : ConfigGamepadInputId.Y, + ButtonY = isNintendoStyle ? ConfigGamepadInputId.Y : ConfigGamepadInputId.X, + ButtonPlus = ConfigGamepadInputId.Plus, + ButtonR = ConfigGamepadInputId.RightShoulder, + ButtonZr = ConfigGamepadInputId.RightTrigger, + ButtonSl = ConfigGamepadInputId.Unbound, + ButtonSr = ConfigGamepadInputId.Unbound, + }, + + RightJoyconStick = new JoyconConfigControllerStick + { + Joystick = ConfigStickInputId.Right, + StickButton = ConfigGamepadInputId.RightStick, + InvertStickX = false, + InvertStickY = false, + Rotate90CW = false, + }, + + Motion = new StandardMotionConfigController + { + MotionBackend = MotionInputBackendType.GamepadDriver, + EnableMotion = true, + Sensitivity = 100, + GyroDeadzone = 1, + }, + Rumble = new RumbleConfigController + { + StrongRumble = 1f, + WeakRumble = 1f, + EnableRumble = false, + }, + }; + } + } + else + { + string profileBasePath; + + if (isKeyboard) + { + profileBasePath = Path.Combine(AppDataManager.ProfilesDirPath, "keyboard"); + } + else + { + profileBasePath = Path.Combine(AppDataManager.ProfilesDirPath, "controller"); + } + + string path = Path.Combine(profileBasePath, inputProfileName + ".json"); + + if (!File.Exists(path)) + { + Logger.Error?.Print(LogClass.Application, $"Input profile \"{inputProfileName}\" not found for \"{inputId}\""); + + return null; + } + + try + { + config = JsonHelper.DeserializeFromFile(path, _serializerContext.InputConfig); + } + catch (JsonException) + { + Logger.Error?.Print(LogClass.Application, $"Input profile \"{inputProfileName}\" parsing failed for \"{inputId}\""); + + return null; + } + } + + config.Id = inputId; + config.PlayerIndex = index; + + string inputTypeName = isKeyboard ? "Keyboard" : "Gamepad"; + + Logger.Info?.Print(LogClass.Application, $"{config.PlayerIndex} configured with {inputTypeName} \"{config.Id}\""); + + // If both stick ranges are 0 (usually indicative of an outdated profile load) then both sticks will be set to 1.0. + if (config is StandardControllerInputConfig controllerConfig) + { + if (controllerConfig.RangeLeft <= 0.0f && controllerConfig.RangeRight <= 0.0f) + { + controllerConfig.RangeLeft = 1.0f; + controllerConfig.RangeRight = 1.0f; + + Logger.Info?.Print(LogClass.Application, $"{config.PlayerIndex} stick range reset. Save the profile now to update your configuration"); + } + } + + return config; + } + + private static IRenderer CreateRenderer(Options options, WindowBase window) + { + if (options.GraphicsBackend == GraphicsBackend.Vulkan && window is VulkanWindow vulkanWindow) + { + string preferredGpuId = string.Empty; + Vk api = Vk.GetApi(); + + if (!string.IsNullOrEmpty(options.PreferredGPUVendor)) + { + string preferredGpuVendor = options.PreferredGPUVendor.ToLowerInvariant(); + var devices = VulkanRenderer.GetPhysicalDevices(api); + + foreach (var device in devices) + { + if (device.Vendor.ToLowerInvariant() == preferredGpuVendor) + { + preferredGpuId = device.Id; + break; + } + } + } + + return new VulkanRenderer( + api, + (instance, vk) => new SurfaceKHR((ulong)(vulkanWindow.CreateWindowSurface(instance.Handle))), + vulkanWindow.GetRequiredInstanceExtensions, + preferredGpuId); + } + + if (options.GraphicsBackend == GraphicsBackend.Metal && window is MetalWindow metalWindow && OperatingSystem.IsMacOS()) + { + return new MetalRenderer(metalWindow.GetLayer); + } + + return new OpenGLRenderer(); + } + + private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) + { + BackendThreading threadingMode = options.BackendThreading; + + bool threadedGAL = threadingMode == BackendThreading.On || (threadingMode == BackendThreading.Auto && renderer.PreferThreading); + + if (threadedGAL) + { + renderer = new ThreadedRenderer(renderer); + } + + HLEConfiguration configuration = new(_virtualFileSystem, + _libHacHorizonManager, + _contentManager, + _accountManager, + _userChannelPersistence, + renderer, + new SDL2HardwareDeviceDriver(), + options.DramSize, + window, + options.SystemLanguage, + options.SystemRegion, + options.VSyncMode, + !options.DisableDockedMode, + !options.DisablePTC, + options.EnableInternetAccess, + !options.DisableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None, + options.FsGlobalAccessLogMode, + options.SystemTimeOffset, + options.SystemTimeZone, + options.MemoryManagerMode, + options.IgnoreMissingServices, + options.AspectRatio, + options.AudioVolume, + options.UseHypervisor ?? true, + options.MultiplayerLanInterfaceId, + Common.Configuration.Multiplayer.MultiplayerMode.Disabled, + false, + string.Empty, + string.Empty, + options.CustomVSyncInterval); + + return new Switch(configuration); + } + } +} diff --git a/src/Ryujinx.Headless.SDL2/Program.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs similarity index 53% rename from src/Ryujinx.Headless.SDL2/Program.cs rename to src/Ryujinx/Headless/HeadlessRyujinx.cs index ea789095e..eabe72cbe 100644 --- a/src/Ryujinx.Headless.SDL2/Program.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -1,13 +1,9 @@ using CommandLine; using Gommon; -using LibHac.Tools.FsSystem; -using Ryujinx.Audio.Backends.SDL2; +using Ryujinx.Ava; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; -using Ryujinx.Common.Configuration.Hid.Controller; -using Ryujinx.Common.Configuration.Hid.Controller.Motion; -using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.Common.GraphicsDriver; using Ryujinx.Common.Logging; using Ryujinx.Common.Logging.Targets; @@ -15,16 +11,12 @@ using Ryujinx.Common.SystemInterop; using Ryujinx.Common.Utilities; using Ryujinx.Cpu; using Ryujinx.Graphics.GAL; -using Ryujinx.Graphics.GAL.Multithreading; using Ryujinx.Graphics.Gpu; using Ryujinx.Graphics.Gpu.Shader; using Ryujinx.Graphics.Metal; using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.Graphics.Vulkan.MoltenVK; -using Ryujinx.Headless.SDL2.Metal; -using Ryujinx.Headless.SDL2.OpenGL; -using Ryujinx.Headless.SDL2.Vulkan; using Ryujinx.HLE; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; @@ -33,22 +25,16 @@ using Ryujinx.Input; using Ryujinx.Input.HLE; using Ryujinx.Input.SDL2; using Ryujinx.SDL2.Common; -using Silk.NET.Vulkan; +using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Generic; using System.IO; -using System.Text.Json; using System.Threading; -using ConfigGamepadInputId = Ryujinx.Common.Configuration.Hid.Controller.GamepadInputId; -using ConfigStickInputId = Ryujinx.Common.Configuration.Hid.Controller.StickInputId; -using Key = Ryujinx.Common.Configuration.Hid.Key; -namespace Ryujinx.Headless.SDL2 +namespace Ryujinx.Headless { - class Program + public partial class HeadlessRyujinx { - public static string Version { get; private set; } - private static VirtualFileSystem _virtualFileSystem; private static ContentManager _contentManager; private static AccountManager _accountManager; @@ -58,20 +44,18 @@ namespace Ryujinx.Headless.SDL2 private static Switch _emulationContext; private static WindowBase _window; private static WindowsMultimediaTimerResolution _windowsMultimediaTimerResolution; - private static List _inputConfiguration; + private static List _inputConfiguration = []; private static bool _enableKeyboard; private static bool _enableMouse; private static readonly InputConfigJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions()); - static void Main(string[] args) + public static void Entrypoint(string[] args) { - Version = ReleaseInformation.Version; - // Make process DPI aware for proper window sizing on high-res screens. ForceDpiAware.Windows(); - Console.Title = $"Ryujinx Console {Version} (Headless SDL2)"; + Console.Title = $"Ryujinx Console {Program.Version} (Headless)"; if (OperatingSystem.IsMacOS() || OperatingSystem.IsLinux()) { @@ -99,7 +83,7 @@ namespace Ryujinx.Headless.SDL2 } Parser.Default.ParseArguments(args) - .WithParsed(Load) + .WithParsed(options => Load(args, options)) .WithNotParsed(errors => { Logger.Error?.PrintMsg(LogClass.Application, "Error parsing command-line arguments:"); @@ -107,239 +91,81 @@ namespace Ryujinx.Headless.SDL2 errors.ForEach(err => Logger.Error?.PrintMsg(LogClass.Application, $" - {err.Tag}")); }); } - - private static InputConfig HandlePlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index) + + public static void ReloadConfig(string customConfigPath = null) { - if (inputId == null) + string localConfigurationPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ReleaseInformation.ConfigName); + string appDataConfigurationPath = Path.Combine(AppDataManager.BaseDirPath, ReleaseInformation.ConfigName); + + string configurationPath = null; + + // Now load the configuration as the other subsystems are now registered + if (customConfigPath != null && File.Exists(customConfigPath)) { - if (index == PlayerIndex.Player1) - { - Logger.Info?.Print(LogClass.Application, $"{index} not configured, defaulting to default keyboard."); - - // Default to keyboard - inputId = "0"; - } - else - { - Logger.Info?.Print(LogClass.Application, $"{index} not configured"); - - return null; - } + configurationPath = customConfigPath; + } + else if (File.Exists(localConfigurationPath)) + { + configurationPath = localConfigurationPath; + } + else if (File.Exists(appDataConfigurationPath)) + { + configurationPath = appDataConfigurationPath; } - IGamepad gamepad = _inputManager.KeyboardDriver.GetGamepad(inputId); - - bool isKeyboard = true; - - if (gamepad == null) + if (configurationPath == null) { - gamepad = _inputManager.GamepadDriver.GetGamepad(inputId); - isKeyboard = false; + // No configuration, we load the default values and save it to disk + configurationPath = appDataConfigurationPath; + Logger.Notice.Print(LogClass.Application, $"No configuration file found. Saving default configuration to: {configurationPath}"); - if (gamepad == null) - { - Logger.Error?.Print(LogClass.Application, $"{index} gamepad not found (\"{inputId}\")"); - - return null; - } - } - - string gamepadName = gamepad.Name; - - gamepad.Dispose(); - - InputConfig config; - - if (inputProfileName == null || inputProfileName.Equals("default")) - { - if (isKeyboard) - { - config = new StandardKeyboardInputConfig - { - Version = InputConfig.CurrentVersion, - Backend = InputBackendType.WindowKeyboard, - Id = null, - ControllerType = ControllerType.JoyconPair, - LeftJoycon = new LeftJoyconCommonConfig - { - DpadUp = Key.Up, - DpadDown = Key.Down, - DpadLeft = Key.Left, - DpadRight = Key.Right, - ButtonMinus = Key.Minus, - ButtonL = Key.E, - ButtonZl = Key.Q, - ButtonSl = Key.Unbound, - ButtonSr = Key.Unbound, - }, - - LeftJoyconStick = new JoyconConfigKeyboardStick - { - StickUp = Key.W, - StickDown = Key.S, - StickLeft = Key.A, - StickRight = Key.D, - StickButton = Key.F, - }, - - RightJoycon = new RightJoyconCommonConfig - { - ButtonA = Key.Z, - ButtonB = Key.X, - ButtonX = Key.C, - ButtonY = Key.V, - ButtonPlus = Key.Plus, - ButtonR = Key.U, - ButtonZr = Key.O, - ButtonSl = Key.Unbound, - ButtonSr = Key.Unbound, - }, - - RightJoyconStick = new JoyconConfigKeyboardStick - { - StickUp = Key.I, - StickDown = Key.K, - StickLeft = Key.J, - StickRight = Key.L, - StickButton = Key.H, - }, - }; - } - else - { - bool isNintendoStyle = gamepadName.Contains("Nintendo"); - - config = new StandardControllerInputConfig - { - Version = InputConfig.CurrentVersion, - Backend = InputBackendType.GamepadSDL2, - Id = null, - ControllerType = ControllerType.JoyconPair, - DeadzoneLeft = 0.1f, - DeadzoneRight = 0.1f, - RangeLeft = 1.0f, - RangeRight = 1.0f, - TriggerThreshold = 0.5f, - LeftJoycon = new LeftJoyconCommonConfig - { - DpadUp = ConfigGamepadInputId.DpadUp, - DpadDown = ConfigGamepadInputId.DpadDown, - DpadLeft = ConfigGamepadInputId.DpadLeft, - DpadRight = ConfigGamepadInputId.DpadRight, - ButtonMinus = ConfigGamepadInputId.Minus, - ButtonL = ConfigGamepadInputId.LeftShoulder, - ButtonZl = ConfigGamepadInputId.LeftTrigger, - ButtonSl = ConfigGamepadInputId.Unbound, - ButtonSr = ConfigGamepadInputId.Unbound, - }, - - LeftJoyconStick = new JoyconConfigControllerStick - { - Joystick = ConfigStickInputId.Left, - StickButton = ConfigGamepadInputId.LeftStick, - InvertStickX = false, - InvertStickY = false, - Rotate90CW = false, - }, - - RightJoycon = new RightJoyconCommonConfig - { - ButtonA = isNintendoStyle ? ConfigGamepadInputId.A : ConfigGamepadInputId.B, - ButtonB = isNintendoStyle ? ConfigGamepadInputId.B : ConfigGamepadInputId.A, - ButtonX = isNintendoStyle ? ConfigGamepadInputId.X : ConfigGamepadInputId.Y, - ButtonY = isNintendoStyle ? ConfigGamepadInputId.Y : ConfigGamepadInputId.X, - ButtonPlus = ConfigGamepadInputId.Plus, - ButtonR = ConfigGamepadInputId.RightShoulder, - ButtonZr = ConfigGamepadInputId.RightTrigger, - ButtonSl = ConfigGamepadInputId.Unbound, - ButtonSr = ConfigGamepadInputId.Unbound, - }, - - RightJoyconStick = new JoyconConfigControllerStick - { - Joystick = ConfigStickInputId.Right, - StickButton = ConfigGamepadInputId.RightStick, - InvertStickX = false, - InvertStickY = false, - Rotate90CW = false, - }, - - Motion = new StandardMotionConfigController - { - MotionBackend = MotionInputBackendType.GamepadDriver, - EnableMotion = true, - Sensitivity = 100, - GyroDeadzone = 1, - }, - Rumble = new RumbleConfigController - { - StrongRumble = 1f, - WeakRumble = 1f, - EnableRumble = false, - }, - }; - } + ConfigurationState.Instance.LoadDefault(); + ConfigurationState.Instance.ToFileFormat().SaveConfig(configurationPath); } else { - string profileBasePath; + Logger.Notice.Print(LogClass.Application, $"Loading configuration from: {configurationPath}"); - if (isKeyboard) + if (ConfigurationFileFormat.TryLoad(configurationPath, out ConfigurationFileFormat configurationFileFormat)) { - profileBasePath = Path.Combine(AppDataManager.ProfilesDirPath, "keyboard"); + ConfigurationState.Instance.Load(configurationFileFormat, configurationPath); } else { - profileBasePath = Path.Combine(AppDataManager.ProfilesDirPath, "controller"); - } + Logger.Warning?.PrintMsg(LogClass.Application, $"Failed to load config! Loading the default config instead.\nFailed config location: {configurationPath}"); - string path = Path.Combine(profileBasePath, inputProfileName + ".json"); - - if (!File.Exists(path)) - { - Logger.Error?.Print(LogClass.Application, $"Input profile \"{inputProfileName}\" not found for \"{inputId}\""); - - return null; - } - - try - { - config = JsonHelper.DeserializeFromFile(path, _serializerContext.InputConfig); - } - catch (JsonException) - { - Logger.Error?.Print(LogClass.Application, $"Input profile \"{inputProfileName}\" parsing failed for \"{inputId}\""); - - return null; + ConfigurationState.Instance.LoadDefault(); } } - - config.Id = inputId; - config.PlayerIndex = index; - - string inputTypeName = isKeyboard ? "Keyboard" : "Gamepad"; - - Logger.Info?.Print(LogClass.Application, $"{config.PlayerIndex} configured with {inputTypeName} \"{config.Id}\""); - - // If both stick ranges are 0 (usually indicative of an outdated profile load) then both sticks will be set to 1.0. - if (config is StandardControllerInputConfig controllerConfig) - { - if (controllerConfig.RangeLeft <= 0.0f && controllerConfig.RangeRight <= 0.0f) - { - controllerConfig.RangeLeft = 1.0f; - controllerConfig.RangeRight = 1.0f; - - Logger.Info?.Print(LogClass.Application, $"{config.PlayerIndex} stick range reset. Save the profile now to update your configuration"); - } - } - - return config; } - static void Load(Options option) + static void Load(string[] originalArgs, Options option) { - AppDataManager.Initialize(option.BaseDataDir); + Initialize(); + bool useLastUsedProfile = false; + + if (option.InheritConfig) + { + option.InheritMainConfig(originalArgs, ConfigurationState.Instance, out useLastUsedProfile); + } + + AppDataManager.Initialize(option.BaseDataDir); + + if (useLastUsedProfile && AccountSaveDataManager.GetLastUsedUser().TryGet(out var profile)) + option.UserProfile = profile.Name; + + // Check if keys exists. + if (!File.Exists(Path.Combine(AppDataManager.KeysDirPath, "prod.keys"))) + { + if (!(AppDataManager.Mode == AppDataManager.LaunchMode.UserProfile && File.Exists(Path.Combine(AppDataManager.KeysDirPathUser, "prod.keys")))) + { + Logger.Error?.Print(LogClass.Application, "Keys not found"); + } + } + + ReloadConfig(); + _virtualFileSystem = VirtualFileSystem.CreateInstance(); _libHacHorizonManager = new LibHacHorizonManager(); @@ -354,7 +180,7 @@ namespace Ryujinx.Headless.SDL2 _inputManager = new InputManager(new SDL2KeyboardDriver(), new SDL2GamepadDriver()); - GraphicsConfig.EnableShaderCache = true; + GraphicsConfig.EnableShaderCache = !option.DisableShaderCache; if (OperatingSystem.IsMacOS()) { @@ -365,15 +191,13 @@ namespace Ryujinx.Headless.SDL2 } } - IGamepad gamepad; - if (option.ListInputIds) { Logger.Info?.Print(LogClass.Application, "Input Ids:"); foreach (string id in _inputManager.KeyboardDriver.GamepadsIds) { - gamepad = _inputManager.KeyboardDriver.GetGamepad(id); + IGamepad gamepad = _inputManager.KeyboardDriver.GetGamepad(id); Logger.Info?.Print(LogClass.Application, $"- {id} (\"{gamepad.Name}\")"); @@ -382,7 +206,7 @@ namespace Ryujinx.Headless.SDL2 foreach (string id in _inputManager.GamepadDriver.GamepadsIds) { - gamepad = _inputManager.GamepadDriver.GetGamepad(id); + IGamepad gamepad = _inputManager.GamepadDriver.GetGamepad(id); Logger.Info?.Print(LogClass.Application, $"- {id} (\"{gamepad.Name}\")"); @@ -399,7 +223,7 @@ namespace Ryujinx.Headless.SDL2 return; } - _inputConfiguration = new List(); + _inputConfiguration ??= []; _enableKeyboard = option.EnableKeyboard; _enableMouse = option.EnableMouse; @@ -412,9 +236,9 @@ namespace Ryujinx.Headless.SDL2 _inputConfiguration.Add(inputConfig); } } - + LoadPlayerConfiguration(option.InputProfile1Name, option.InputId1, PlayerIndex.Player1); - LoadPlayerConfiguration(option.InputProfile2Name, option.InputId2, PlayerIndex.Player2); + LoadPlayerConfiguration(option.InputProfile2Name, option.InputId2, PlayerIndex.Player2); LoadPlayerConfiguration(option.InputProfile3Name, option.InputId3, PlayerIndex.Player3); LoadPlayerConfiguration(option.InputProfile4Name, option.InputId4, PlayerIndex.Player4); LoadPlayerConfiguration(option.InputProfile5Name, option.InputId5, PlayerIndex.Player5); @@ -422,6 +246,7 @@ namespace Ryujinx.Headless.SDL2 LoadPlayerConfiguration(option.InputProfile7Name, option.InputId7, PlayerIndex.Player7); LoadPlayerConfiguration(option.InputProfile8Name, option.InputId8, PlayerIndex.Player8); LoadPlayerConfiguration(option.InputProfileHandheldName, option.InputIdHandheld, PlayerIndex.Handheld); + if (_inputConfiguration.Count == 0) { @@ -433,7 +258,7 @@ namespace Ryujinx.Headless.SDL2 Logger.SetEnable(LogLevel.Stub, !option.LoggingDisableStub); Logger.SetEnable(LogLevel.Info, !option.LoggingDisableInfo); Logger.SetEnable(LogLevel.Warning, !option.LoggingDisableWarning); - Logger.SetEnable(LogLevel.Error, option.LoggingEnableError); + Logger.SetEnable(LogLevel.Error, !option.LoggingDisableError); Logger.SetEnable(LogLevel.Trace, option.LoggingEnableTrace); Logger.SetEnable(LogLevel.Guest, !option.LoggingDisableGuest); Logger.SetEnable(LogLevel.AccessLog, option.LoggingEnableFsAccessLog); @@ -522,88 +347,6 @@ namespace Ryujinx.Headless.SDL2 }; } - private static IRenderer CreateRenderer(Options options, WindowBase window) - { - if (options.GraphicsBackend == GraphicsBackend.Vulkan && window is VulkanWindow vulkanWindow) - { - string preferredGpuId = string.Empty; - Vk api = Vk.GetApi(); - - if (!string.IsNullOrEmpty(options.PreferredGPUVendor)) - { - string preferredGpuVendor = options.PreferredGPUVendor.ToLowerInvariant(); - var devices = VulkanRenderer.GetPhysicalDevices(api); - - foreach (var device in devices) - { - if (device.Vendor.ToLowerInvariant() == preferredGpuVendor) - { - preferredGpuId = device.Id; - break; - } - } - } - - return new VulkanRenderer( - api, - (instance, vk) => new SurfaceKHR((ulong)(vulkanWindow.CreateWindowSurface(instance.Handle))), - vulkanWindow.GetRequiredInstanceExtensions, - preferredGpuId); - } - - if (options.GraphicsBackend == GraphicsBackend.Metal && window is MetalWindow metalWindow && OperatingSystem.IsMacOS()) - { - return new MetalRenderer(metalWindow.GetLayer); - } - - return new OpenGLRenderer(); - } - - private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) - { - BackendThreading threadingMode = options.BackendThreading; - - bool threadedGAL = threadingMode == BackendThreading.On || (threadingMode == BackendThreading.Auto && renderer.PreferThreading); - - if (threadedGAL) - { - renderer = new ThreadedRenderer(renderer); - } - - HLEConfiguration configuration = new(_virtualFileSystem, - _libHacHorizonManager, - _contentManager, - _accountManager, - _userChannelPersistence, - renderer, - new SDL2HardwareDeviceDriver(), - options.DramSize, - window, - options.SystemLanguage, - options.SystemRegion, - options.VSyncMode, - !options.DisableDockedMode, - !options.DisablePTC, - options.EnableInternetAccess, - !options.DisableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None, - options.FsGlobalAccessLogMode, - options.SystemTimeOffset, - options.SystemTimeZone, - options.MemoryManagerMode, - options.IgnoreMissingServices, - options.AspectRatio, - options.AudioVolume, - options.UseHypervisor ?? true, - options.MultiplayerLanInterfaceId, - Common.Configuration.Multiplayer.MultiplayerMode.Disabled, - false, - string.Empty, - string.Empty, - options.CustomVSyncInterval); - - return new Switch(configuration); - } - private static void ExecutionEntrypoint() { if (OperatingSystem.IsWindows()) diff --git a/src/Ryujinx.Headless.SDL2/Metal/MetalWindow.cs b/src/Ryujinx/Headless/Metal/MetalWindow.cs similarity index 97% rename from src/Ryujinx.Headless.SDL2/Metal/MetalWindow.cs rename to src/Ryujinx/Headless/Metal/MetalWindow.cs index 5140d639b..a2693c69d 100644 --- a/src/Ryujinx.Headless.SDL2/Metal/MetalWindow.cs +++ b/src/Ryujinx/Headless/Metal/MetalWindow.cs @@ -5,7 +5,7 @@ using SharpMetal.QuartzCore; using System.Runtime.Versioning; using static SDL2.SDL; -namespace Ryujinx.Headless.SDL2.Metal +namespace Ryujinx.Headless { [SupportedOSPlatform("macos")] class MetalWindow : WindowBase diff --git a/src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs b/src/Ryujinx/Headless/OpenGL/OpenGLWindow.cs similarity index 99% rename from src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs rename to src/Ryujinx/Headless/OpenGL/OpenGLWindow.cs index 8c4854a11..c00a0648f 100644 --- a/src/Ryujinx.Headless.SDL2/OpenGL/OpenGLWindow.cs +++ b/src/Ryujinx/Headless/OpenGL/OpenGLWindow.cs @@ -7,7 +7,7 @@ using Ryujinx.Input.HLE; using System; using static SDL2.SDL; -namespace Ryujinx.Headless.SDL2.OpenGL +namespace Ryujinx.Headless { class OpenGLWindow : WindowBase { diff --git a/src/Ryujinx.Headless.SDL2/Options.cs b/src/Ryujinx/Headless/Options.cs similarity index 63% rename from src/Ryujinx.Headless.SDL2/Options.cs rename to src/Ryujinx/Headless/Options.cs index 4e2ad5b58..0dd4216f0 100644 --- a/src/Ryujinx.Headless.SDL2/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -1,13 +1,168 @@ using CommandLine; +using Gommon; using Ryujinx.Common.Configuration; +using Ryujinx.Common.Configuration.Hid; using Ryujinx.HLE; +using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; +using Ryujinx.UI.Common.Configuration; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; -namespace Ryujinx.Headless.SDL2 +namespace Ryujinx.Headless { public class Options { + public void InheritMainConfig(string[] originalArgs, ConfigurationState configurationState, out bool needsProfileSet) + { + needsProfileSet = NeedsOverride(nameof(UserProfile)); + + if (NeedsOverride(nameof(IsFullscreen))) + IsFullscreen = configurationState.UI.StartFullscreen; + + if (NeedsOverride(nameof(EnableKeyboard))) + EnableKeyboard = configurationState.Hid.EnableKeyboard; + + if (NeedsOverride(nameof(EnableMouse))) + EnableMouse = configurationState.Hid.EnableMouse; + + if (NeedsOverride(nameof(HideCursorMode))) + HideCursorMode = configurationState.HideCursor; + + if (NeedsOverride(nameof(DisablePTC))) + DisablePTC = !configurationState.System.EnablePtc; + + if (NeedsOverride(nameof(EnableInternetAccess))) + EnableInternetAccess = configurationState.System.EnableInternetAccess; + + if (NeedsOverride(nameof(DisableFsIntegrityChecks))) + DisableFsIntegrityChecks = configurationState.System.EnableFsIntegrityChecks; + + if (NeedsOverride(nameof(FsGlobalAccessLogMode))) + FsGlobalAccessLogMode = configurationState.System.FsGlobalAccessLogMode; + + if (NeedsOverride(nameof(VSyncMode))) + VSyncMode = configurationState.Graphics.VSyncMode; + + if (NeedsOverride(nameof(CustomVSyncInterval))) + CustomVSyncInterval = configurationState.Graphics.CustomVSyncInterval; + + if (NeedsOverride(nameof(DisableShaderCache))) + DisableShaderCache = !configurationState.Graphics.EnableShaderCache; + + if (NeedsOverride(nameof(EnableTextureRecompression))) + EnableTextureRecompression = configurationState.Graphics.EnableTextureRecompression; + + if (NeedsOverride(nameof(DisableDockedMode))) + DisableDockedMode = !configurationState.System.EnableDockedMode; + + if (NeedsOverride(nameof(SystemLanguage))) + SystemLanguage = (SystemLanguage)(int)configurationState.System.Language.Value; + + if (NeedsOverride(nameof(SystemRegion))) + SystemRegion = (RegionCode)(int)configurationState.System.Region.Value; + + if (NeedsOverride(nameof(SystemTimeZone))) + SystemTimeZone = configurationState.System.TimeZone; + + if (NeedsOverride(nameof(SystemTimeOffset))) + SystemTimeOffset = configurationState.System.SystemTimeOffset; + + if (NeedsOverride(nameof(MemoryManagerMode))) + MemoryManagerMode = configurationState.System.MemoryManagerMode; + + if (NeedsOverride(nameof(AudioVolume))) + AudioVolume = configurationState.System.AudioVolume; + + if (NeedsOverride(nameof(UseHypervisor)) && OperatingSystem.IsMacOS()) + UseHypervisor = configurationState.System.UseHypervisor; + + if (NeedsOverride(nameof(MultiplayerLanInterfaceId))) + MultiplayerLanInterfaceId = configurationState.Multiplayer.LanInterfaceId; + + if (NeedsOverride(nameof(DisableFileLog))) + DisableFileLog = !configurationState.Logger.EnableFileLog; + + if (NeedsOverride(nameof(LoggingEnableDebug))) + LoggingEnableDebug = configurationState.Logger.EnableDebug; + + if (NeedsOverride(nameof(LoggingDisableStub))) + LoggingDisableStub = !configurationState.Logger.EnableStub; + + if (NeedsOverride(nameof(LoggingDisableInfo))) + LoggingDisableInfo = !configurationState.Logger.EnableInfo; + + if (NeedsOverride(nameof(LoggingDisableWarning))) + LoggingDisableWarning = !configurationState.Logger.EnableWarn; + + if (NeedsOverride(nameof(LoggingDisableError))) + LoggingDisableError = !configurationState.Logger.EnableError; + + if (NeedsOverride(nameof(LoggingEnableTrace))) + LoggingEnableTrace = configurationState.Logger.EnableTrace; + + if (NeedsOverride(nameof(LoggingDisableGuest))) + LoggingDisableGuest = !configurationState.Logger.EnableGuest; + + if (NeedsOverride(nameof(LoggingEnableFsAccessLog))) + LoggingEnableFsAccessLog = configurationState.Logger.EnableFsAccessLog; + + if (NeedsOverride(nameof(LoggingGraphicsDebugLevel))) + LoggingGraphicsDebugLevel = configurationState.Logger.GraphicsDebugLevel; + + if (NeedsOverride(nameof(ResScale))) + ResScale = configurationState.Graphics.ResScale; + + if (NeedsOverride(nameof(MaxAnisotropy))) + MaxAnisotropy = configurationState.Graphics.MaxAnisotropy; + + if (NeedsOverride(nameof(AspectRatio))) + AspectRatio = configurationState.Graphics.AspectRatio; + + if (NeedsOverride(nameof(BackendThreading))) + BackendThreading = configurationState.Graphics.BackendThreading; + + if (NeedsOverride(nameof(DisableMacroHLE))) + DisableMacroHLE = !configurationState.Graphics.EnableMacroHLE; + + if (NeedsOverride(nameof(GraphicsShadersDumpPath))) + GraphicsShadersDumpPath = configurationState.Graphics.ShadersDumpPath; + + if (NeedsOverride(nameof(GraphicsBackend))) + GraphicsBackend = configurationState.Graphics.GraphicsBackend; + + if (NeedsOverride(nameof(AntiAliasing))) + AntiAliasing = configurationState.Graphics.AntiAliasing; + + if (NeedsOverride(nameof(ScalingFilter))) + ScalingFilter = configurationState.Graphics.ScalingFilter; + + if (NeedsOverride(nameof(ScalingFilterLevel))) + ScalingFilterLevel = configurationState.Graphics.ScalingFilterLevel; + + if (NeedsOverride(nameof(DramSize))) + DramSize = configurationState.System.DramSize; + + if (NeedsOverride(nameof(IgnoreMissingServices))) + IgnoreMissingServices = configurationState.System.IgnoreMissingServices; + + if (NeedsOverride(nameof(IgnoreControllerApplet))) + IgnoreControllerApplet = configurationState.IgnoreApplet; + + return; + + bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey))); + + string OptionName(string propertyName) => + typeof(Options)!.GetProperty(propertyName)!.GetCustomAttribute()!.LongName; + } + // General + + [Option("use-main-config", Required = false, Default = false, HelpText = "Use the settings from what was configured via the UI.")] + public bool InheritConfig { get; set; } [Option("root-data-dir", Required = false, HelpText = "Set the custom folder path for Ryujinx data.")] public string BaseDataDir { get; set; } @@ -172,7 +327,7 @@ namespace Ryujinx.Headless.SDL2 public bool LoggingDisableWarning { get; set; } [Option("disable-error-logs", Required = false, HelpText = "Disables printing error log messages.")] - public bool LoggingEnableError { get; set; } + public bool LoggingDisableError { get; set; } [Option("enable-trace-logs", Required = false, Default = false, HelpText = "Enables printing trace log messages.")] public bool LoggingEnableTrace { get; set; } diff --git a/src/Ryujinx/Headless/Ryujinx.bmp b/src/Ryujinx/Headless/Ryujinx.bmp new file mode 100644 index 0000000000000000000000000000000000000000..36bf2f8ac129d43565ea345df7bb33b3b86e251b GIT binary patch literal 3978 zcmb`}dr(x@836E)i8v*#uV|(=srEUUO#X6Nz+k7flXlualy=f2{i8{cec#6}%kHv@ zCb*+1J`pCdF)>d5$%B}X1vMce0Txtr#z!QXaS{^{d?1<&q8Jr*&-wbDyL(|5xauFd zeE3^!&)jHelc0Wcjb^G@1S$}-+>jxfxp*nl){{u`({pClTM-V|BLGa#0 zi#*IVX^3GmxO|mqN*{Y)X=iz%BX_{l%ziXE;c`%K@@#pSjk#AC$`|4&9g3se%(|3T z_RsJ!Djq$3M}GkYu|068>PcvNJqNmK7Q?v@7sFYK^ROv>I9L1E%rkZQ`90CR(CNCI%AWe1s@^(l)rn93ytbyb z@X?Q2UxfEM{&Ro%USpb>soPOD(6=Wa&erA6?XAoE-|0H*V0SbdyP_8CrZ}-HAGgMq z4F!*cvsWAq!J1h4JzeiDo~`uL`li&@$Wx4-8iqxs9DAaR9_p>ntx0&o%+}4$`h2Wv zDMH`jkXCXuY$-V&hDa=8?)FeGf6Kx59l3|dO|Ivt*-YjKWCjom?TEegc`L}gZMY)O z&iX~V>Fo$&@!_BrxF5Hb_E9_8ZM2VC$W5-LK8`aB9f-7+Cxw{^s;zF?P?)}sK$^Sy z;07q9rd~qvkMF;S=X!ggdSnDdPeo$n9^l~J&(mFDirOag6sCyosP(p}?P;-|6DHSdYnWm*)^jp5;RdMAK}$(zIVjgyCdFK7 zFrGp0q^ZhHHrI~v3sCe?)cOpR98$)9z;4eV6h0u0K!@O>X**tw(SFDb05aEy@k5?;ZN? z8+;W-PUs@d5Aiihj6WgAILK{eQuq#Vi&Vq3qQJ!3iavG*E@7am3D?D3$=r+_#pp-h zv302Qb)h_r8ohHZ$}pRyUgN)2eqdqs67wscv0srHp>WGB{C70Yv&}(}Hgc=Yj|0L; zT~9H0mXKM!55sRnNBcIlwjxiJOlb(oWx`#c{=oCSH+iW#z$(=vY@gc3!xUS|YgF5L z8TD~t@r^r~b{FO@bK>9xQ{2A`zFlMH@#bhc?JWFb1Gsvo-Jag%tG?V6A zq*}h9@Hw1Dwas*R(p^#8;5c*4o!lICN0`O)I-f#@jl9*AXOv+I#ROfDH@m`FB(uO~yzMW3?U&vhRJ;kTn{rGR23;#>r zY`2VA_GG?yGlQFUpzrwRwDmMRNu1f|1KKV5jwUhx!Lodr0JGL}2|kRD6C^E?%G>;>KMlF(ysvpnf;eyzL2B zyn`JT9Gn|iro+$6D7W7fIWUXzT|@DxTHXVJ4V~7~*Y*vBw?#*-G4lYH~A%NPw) zoMm*jT&6veM|j44o;_&_P1RRm&*l|CzO?y(Y{BRH*cQansOrpddDv%`;_OM zL~T>gY{MR8S{p!L*J&+Md|Bi482O7rzK`+l>}{||ti B6odc( literal 0 HcmV?d00001 diff --git a/src/Ryujinx.Headless.SDL2/StatusUpdatedEventArgs.cs b/src/Ryujinx/Headless/StatusUpdatedEventArgs.cs similarity index 94% rename from src/Ryujinx.Headless.SDL2/StatusUpdatedEventArgs.cs rename to src/Ryujinx/Headless/StatusUpdatedEventArgs.cs index c1dd3805f..6c76a43a1 100644 --- a/src/Ryujinx.Headless.SDL2/StatusUpdatedEventArgs.cs +++ b/src/Ryujinx/Headless/StatusUpdatedEventArgs.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Headless.SDL2 +namespace Ryujinx.Headless { class StatusUpdatedEventArgs( string vSyncMode, diff --git a/src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs b/src/Ryujinx/Headless/Vulkan/VulkanWindow.cs similarity index 98% rename from src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs rename to src/Ryujinx/Headless/Vulkan/VulkanWindow.cs index b88e0fe83..92caad34e 100644 --- a/src/Ryujinx.Headless.SDL2/Vulkan/VulkanWindow.cs +++ b/src/Ryujinx/Headless/Vulkan/VulkanWindow.cs @@ -6,7 +6,7 @@ using System; using System.Runtime.InteropServices; using static SDL2.SDL; -namespace Ryujinx.Headless.SDL2.Vulkan +namespace Ryujinx.Headless { class VulkanWindow : WindowBase { diff --git a/src/Ryujinx.Headless.SDL2/WindowBase.cs b/src/Ryujinx/Headless/WindowBase.cs similarity index 98% rename from src/Ryujinx.Headless.SDL2/WindowBase.cs rename to src/Ryujinx/Headless/WindowBase.cs index fbe7cb49c..21bee368a 100644 --- a/src/Ryujinx.Headless.SDL2/WindowBase.cs +++ b/src/Ryujinx/Headless/WindowBase.cs @@ -1,5 +1,6 @@ using Humanizer; using LibHac.Tools.Fs; +using Ryujinx.Ava; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Logging; @@ -26,7 +27,7 @@ using AntiAliasing = Ryujinx.Common.Configuration.AntiAliasing; using ScalingFilter = Ryujinx.Common.Configuration.ScalingFilter; using Switch = Ryujinx.HLE.Switch; -namespace Ryujinx.Headless.SDL2 +namespace Ryujinx.Headless { abstract partial class WindowBase : IHostUIHandler, IDisposable { @@ -136,7 +137,7 @@ namespace Ryujinx.Headless.SDL2 private void SetWindowIcon() { - Stream iconStream = typeof(WindowBase).Assembly.GetManifestResourceStream("Ryujinx.Headless.SDL2.Ryujinx.bmp"); + Stream iconStream = typeof(Program).Assembly.GetManifestResourceStream("HeadlessLogo"); byte[] iconBytes = new byte[iconStream!.Length]; if (iconStream.Read(iconBytes, 0, iconBytes.Length) != iconBytes.Length) @@ -318,7 +319,7 @@ namespace Ryujinx.Headless.SDL2 Device.VSyncMode.ToString(), dockedMode, Device.Configuration.AspectRatio.ToText(), - $"Game: {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)", + $"{Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)", $"FIFO: {Device.Statistics.GetFifoPercent():0.00} %", $"GPU: {_gpuDriverName}")); diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 2ec60ac70..bde08a372 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -14,6 +14,7 @@ using Ryujinx.Common.GraphicsDriver; using Ryujinx.Common.Logging; using Ryujinx.Common.SystemInterop; using Ryujinx.Graphics.Vulkan.MoltenVK; +using Ryujinx.Headless; using Ryujinx.SDL2.Common; using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; @@ -52,9 +53,15 @@ namespace Ryujinx.Ava } PreviewerDetached = true; + + if (args.Length > 0 && args[0] is "--no-gui" or "nogui") + { + HeadlessRyujinx.Entrypoint(args[1..]); + return 0; + } Initialize(args); - + LoggerAdapter.Register(); IconProvider.Current @@ -106,7 +113,7 @@ namespace Ryujinx.Ava AppDomain.CurrentDomain.UnhandledException += (sender, e) => ProcessUnhandledException(sender, e.ExceptionObject as Exception, e.IsTerminating); AppDomain.CurrentDomain.ProcessExit += (_, _) => Exit(); - + // Setup base data directory. AppDataManager.Initialize(CommandLineState.BaseDirPathArg); @@ -223,7 +230,7 @@ namespace Ryujinx.Ava UseHardwareAcceleration = CommandLineState.OverrideHardwareAcceleration.Value; } - private static void PrintSystemInfo() + internal static void PrintSystemInfo() { Logger.Notice.Print(LogClass.Application, $"{RyujinxApp.FullAppName} Version: {Version}"); SystemInfo.Gather().Print(); @@ -240,7 +247,7 @@ namespace Ryujinx.Ava : $"Launch Mode: {AppDataManager.Mode}"); } - private static void ProcessUnhandledException(object sender, Exception ex, bool isTerminating) + internal static void ProcessUnhandledException(object sender, Exception ex, bool isTerminating) { Logger.Log log = Logger.Error ?? Logger.Notice; string message = $"Unhandled exception caught: {ex}"; @@ -255,7 +262,7 @@ namespace Ryujinx.Ava Exit(); } - public static void Exit() + internal static void Exit() { DiscordIntegrationModule.Exit(); diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index d5bad2ee6..d98e499c2 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -47,6 +47,7 @@ + @@ -66,6 +67,7 @@ + @@ -74,7 +76,6 @@ - @@ -133,6 +134,7 @@ + -- 2.47.1 From 09107b67ff4d2d124dde1211816bc5300b1182fe Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 28 Dec 2024 05:08:21 -0600 Subject: [PATCH 206/722] misc: Remove GAL/Configuration duplicate enums --- .../Configuration/AspectRatioExtensions.cs | 2 ++ .../Configuration/ScalingFilter.cs | 1 + src/Ryujinx.Graphics.GAL/AntiAliasing.cs | 12 ----------- src/Ryujinx.Graphics.GAL/UpscaleType.cs | 10 ---------- src/Ryujinx.Graphics.Metal/Window.cs | 3 --- src/Ryujinx.Graphics.OpenGL/Window.cs | 2 -- src/Ryujinx.Graphics.Vulkan/Window.cs | 2 -- src/Ryujinx.Graphics.Vulkan/WindowBase.cs | 2 -- .../Extensions/FileSystemExtensions.cs | 2 +- .../DiscordIntegrationModule.cs | 1 - src/Ryujinx/AppHost.cs | 20 +++++++++---------- src/Ryujinx/Headless/Options.cs | 6 +++--- src/Ryujinx/Headless/WindowBase.cs | 4 ++-- 13 files changed, 19 insertions(+), 48 deletions(-) delete mode 100644 src/Ryujinx.Graphics.GAL/AntiAliasing.cs delete mode 100644 src/Ryujinx.Graphics.GAL/UpscaleType.cs diff --git a/src/Ryujinx.Common/Configuration/AspectRatioExtensions.cs b/src/Ryujinx.Common/Configuration/AspectRatioExtensions.cs index bae6e35de..05dbe67d9 100644 --- a/src/Ryujinx.Common/Configuration/AspectRatioExtensions.cs +++ b/src/Ryujinx.Common/Configuration/AspectRatioExtensions.cs @@ -35,6 +35,8 @@ namespace Ryujinx.Common.Configuration #pragma warning restore IDE0055 }; } + + public static float ToFloatY(this AspectRatio aspectRatio) { diff --git a/src/Ryujinx.Common/Configuration/ScalingFilter.cs b/src/Ryujinx.Common/Configuration/ScalingFilter.cs index 1c6a74b3a..474685d49 100644 --- a/src/Ryujinx.Common/Configuration/ScalingFilter.cs +++ b/src/Ryujinx.Common/Configuration/ScalingFilter.cs @@ -9,5 +9,6 @@ namespace Ryujinx.Common.Configuration Bilinear, Nearest, Fsr, + Area, } } diff --git a/src/Ryujinx.Graphics.GAL/AntiAliasing.cs b/src/Ryujinx.Graphics.GAL/AntiAliasing.cs deleted file mode 100644 index 04b529764..000000000 --- a/src/Ryujinx.Graphics.GAL/AntiAliasing.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Ryujinx.Graphics.GAL -{ - public enum AntiAliasing - { - None, - Fxaa, - SmaaLow, - SmaaMedium, - SmaaHigh, - SmaaUltra, - } -} diff --git a/src/Ryujinx.Graphics.GAL/UpscaleType.cs b/src/Ryujinx.Graphics.GAL/UpscaleType.cs deleted file mode 100644 index e2482faef..000000000 --- a/src/Ryujinx.Graphics.GAL/UpscaleType.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Ryujinx.Graphics.GAL -{ - public enum ScalingFilter - { - Bilinear, - Nearest, - Fsr, - Area, - } -} diff --git a/src/Ryujinx.Graphics.Metal/Window.cs b/src/Ryujinx.Graphics.Metal/Window.cs index 61137f97d..7d9a51a9e 100644 --- a/src/Ryujinx.Graphics.Metal/Window.cs +++ b/src/Ryujinx.Graphics.Metal/Window.cs @@ -2,13 +2,10 @@ using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Metal.Effects; -using Ryujinx.Graphics.Metal.SharpMetalExtensions; using SharpMetal.ObjectiveCCore; using SharpMetal.QuartzCore; using System; using System.Runtime.Versioning; -using AntiAliasing = Ryujinx.Graphics.GAL.AntiAliasing; -using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter; namespace Ryujinx.Graphics.Metal { diff --git a/src/Ryujinx.Graphics.OpenGL/Window.cs b/src/Ryujinx.Graphics.OpenGL/Window.cs index 8c35663ab..f161be506 100644 --- a/src/Ryujinx.Graphics.OpenGL/Window.cs +++ b/src/Ryujinx.Graphics.OpenGL/Window.cs @@ -5,8 +5,6 @@ using Ryujinx.Graphics.OpenGL.Effects; using Ryujinx.Graphics.OpenGL.Effects.Smaa; using Ryujinx.Graphics.OpenGL.Image; using System; -using AntiAliasing = Ryujinx.Graphics.GAL.AntiAliasing; -using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter; namespace Ryujinx.Graphics.OpenGL { diff --git a/src/Ryujinx.Graphics.Vulkan/Window.cs b/src/Ryujinx.Graphics.Vulkan/Window.cs index d135d0076..8e53e7f7e 100644 --- a/src/Ryujinx.Graphics.Vulkan/Window.cs +++ b/src/Ryujinx.Graphics.Vulkan/Window.cs @@ -5,8 +5,6 @@ using Silk.NET.Vulkan; using Silk.NET.Vulkan.Extensions.KHR; using System; using System.Linq; -using AntiAliasing = Ryujinx.Graphics.GAL.AntiAliasing; -using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter; using VkFormat = Silk.NET.Vulkan.Format; namespace Ryujinx.Graphics.Vulkan diff --git a/src/Ryujinx.Graphics.Vulkan/WindowBase.cs b/src/Ryujinx.Graphics.Vulkan/WindowBase.cs index 807bb65e5..34ac63a83 100644 --- a/src/Ryujinx.Graphics.Vulkan/WindowBase.cs +++ b/src/Ryujinx.Graphics.Vulkan/WindowBase.cs @@ -1,8 +1,6 @@ using Ryujinx.Common.Configuration; using Ryujinx.Graphics.GAL; using System; -using AntiAliasing = Ryujinx.Graphics.GAL.AntiAliasing; -using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter; namespace Ryujinx.Graphics.Vulkan { diff --git a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs index cd215781f..97284f3bb 100644 --- a/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs +++ b/src/Ryujinx.HLE/Loaders/Processes/Extensions/FileSystemExtensions.cs @@ -102,7 +102,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions } // Initialize GPU. - Graphics.Gpu.GraphicsConfig.TitleId = $"{programId:x16}"; + Graphics.Gpu.GraphicsConfig.TitleId = programId.ToString("X16"); device.Gpu.HostInitalized.Set(); if (!MemoryBlock.SupportsFlags(MemoryAllocationFlags.ViewCompatible)) diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs index 0cb9779ff..574aaff87 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs @@ -5,7 +5,6 @@ using Ryujinx.Common; using Ryujinx.HLE.Loaders.Processes; using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Configuration; -using System.Linq; using System.Text; namespace Ryujinx.UI.Common diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 9a9c1d226..909eb05d5 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -289,19 +289,19 @@ namespace Ryujinx.Ava private void UpdateScalingFilterLevel(object sender, ReactiveEventArgs e) { - _renderer.Window?.SetScalingFilter((Graphics.GAL.ScalingFilter)ConfigurationState.Instance.Graphics.ScalingFilter.Value); - _renderer.Window?.SetScalingFilterLevel(ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value); + _renderer.Window?.SetScalingFilter(ConfigurationState.Instance.Graphics.ScalingFilter); + _renderer.Window?.SetScalingFilterLevel(ConfigurationState.Instance.Graphics.ScalingFilterLevel); } private void UpdateScalingFilter(object sender, ReactiveEventArgs e) { - _renderer.Window?.SetScalingFilter((Graphics.GAL.ScalingFilter)ConfigurationState.Instance.Graphics.ScalingFilter.Value); - _renderer.Window?.SetScalingFilterLevel(ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value); + _renderer.Window?.SetScalingFilter(ConfigurationState.Instance.Graphics.ScalingFilter); + _renderer.Window?.SetScalingFilterLevel(ConfigurationState.Instance.Graphics.ScalingFilterLevel); } private void UpdateColorSpacePassthrough(object sender, ReactiveEventArgs e) { - _renderer.Window?.SetColorSpacePassthrough((bool)ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Value); + _renderer.Window?.SetColorSpacePassthrough(ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough); } public void UpdateVSyncMode(object sender, ReactiveEventArgs e) @@ -526,7 +526,7 @@ namespace Ryujinx.Ava private void UpdateAntiAliasing(object sender, ReactiveEventArgs e) { - _renderer?.Window?.SetAntiAliasing((Graphics.GAL.AntiAliasing)e.NewValue); + _renderer?.Window?.SetAntiAliasing(e.NewValue); } private void UpdateDockedModeState(object sender, ReactiveEventArgs e) @@ -1057,10 +1057,10 @@ namespace Ryujinx.Ava Device.Gpu.Renderer.Initialize(_glLogLevel); - _renderer?.Window?.SetAntiAliasing((Graphics.GAL.AntiAliasing)ConfigurationState.Instance.Graphics.AntiAliasing.Value); - _renderer?.Window?.SetScalingFilter((Graphics.GAL.ScalingFilter)ConfigurationState.Instance.Graphics.ScalingFilter.Value); - _renderer?.Window?.SetScalingFilterLevel(ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value); - _renderer?.Window?.SetColorSpacePassthrough(ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Value); + _renderer?.Window?.SetAntiAliasing(ConfigurationState.Instance.Graphics.AntiAliasing); + _renderer?.Window?.SetScalingFilter(ConfigurationState.Instance.Graphics.ScalingFilter); + _renderer?.Window?.SetScalingFilterLevel(ConfigurationState.Instance.Graphics.ScalingFilterLevel); + _renderer?.Window?.SetColorSpacePassthrough(ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough); Width = (int)RendererHost.Bounds.Width; Height = (int)RendererHost.Bounds.Height; diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index 0dd4216f0..b0a349a2b 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -250,10 +250,10 @@ namespace Ryujinx.Headless [Option("hide-cursor", Required = false, Default = HideCursorMode.OnIdle, HelpText = "Change when the cursor gets hidden.")] public HideCursorMode HideCursorMode { get; set; } - [Option("list-input-profiles", Required = false, HelpText = "List inputs profiles.")] + [Option("list-input-profiles", Required = false, HelpText = "List input profiles.")] public bool ListInputProfiles { get; set; } - [Option("list-inputs-ids", Required = false, HelpText = "List inputs ids.")] + [Option("list-input-ids", Required = false, HelpText = "List input IDs.")] public bool ListInputIds { get; set; } // System @@ -370,7 +370,7 @@ namespace Ryujinx.Headless [Option("anti-aliasing", Required = false, Default = AntiAliasing.None, HelpText = "Set the type of anti aliasing being used. [None|Fxaa|SmaaLow|SmaaMedium|SmaaHigh|SmaaUltra]")] public AntiAliasing AntiAliasing { get; set; } - [Option("scaling-filter", Required = false, Default = ScalingFilter.Bilinear, HelpText = "Set the scaling filter. [Bilinear|Nearest|Fsr]")] + [Option("scaling-filter", Required = false, Default = ScalingFilter.Bilinear, HelpText = "Set the scaling filter. [Bilinear|Nearest|Fsr|Area]")] public ScalingFilter ScalingFilter { get; set; } [Option("scaling-filter-level", Required = false, Default = 0, HelpText = "Set the scaling filter intensity (currently only applies to FSR). [0-100]")] diff --git a/src/Ryujinx/Headless/WindowBase.cs b/src/Ryujinx/Headless/WindowBase.cs index 21bee368a..d89638cc1 100644 --- a/src/Ryujinx/Headless/WindowBase.cs +++ b/src/Ryujinx/Headless/WindowBase.cs @@ -255,12 +255,12 @@ namespace Ryujinx.Headless private void SetAntiAliasing() { - Renderer?.Window.SetAntiAliasing((Graphics.GAL.AntiAliasing)AntiAliasing); + Renderer?.Window.SetAntiAliasing(AntiAliasing); } private void SetScalingFilter() { - Renderer?.Window.SetScalingFilter((Graphics.GAL.ScalingFilter)ScalingFilter); + Renderer?.Window.SetScalingFilter(ScalingFilter); Renderer?.Window.SetScalingFilterLevel(ScalingFilterLevel); } -- 2.47.1 From 8b3a945b5f8c8700b809348c2d25aa22bc7af7c7 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sat, 28 Dec 2024 22:04:21 -0600 Subject: [PATCH 207/722] misc: Dirty Hacks Enable this settings screen via a boolean in Config.json First one is the xb2 menu softlock fix --- .../Configuration/DirtyHacks.cs | 11 ++++ src/Ryujinx.Common/TitleIDs.cs | 2 + src/Ryujinx.Graphics.Gpu/GraphicsConfig.cs | 6 --- .../Shader/ShaderCache.cs | 5 +- src/Ryujinx.HLE/HLEConfiguration.cs | 9 +++- .../Services/Fs/FileSystemProxy/IStorage.cs | 12 +++++ .../Extensions/FileSystemExtensions.cs | 3 +- .../Loaders/Processes/ProcessLoader.cs | 3 +- src/Ryujinx.HLE/Switch.cs | 3 ++ .../Configuration/ConfigurationFileFormat.cs | 14 +++++- .../ConfigurationState.Migration.cs | 3 ++ .../Configuration/ConfigurationState.Model.cs | 50 +++++++++++++++++++ .../Configuration/ConfigurationState.cs | 2 + src/Ryujinx/AppHost.cs | 6 ++- src/Ryujinx/Ryujinx.csproj | 6 +++ src/Ryujinx/UI/ViewModels/BaseModel.cs | 3 +- .../UI/ViewModels/SettingsViewModel.cs | 31 +++++++++--- .../UI/Views/Settings/SettingsHacksView.axaml | 48 ++++++++++++++++++ .../Views/Settings/SettingsHacksView.axaml.cs | 17 +++++++ src/Ryujinx/UI/Windows/SettingsWindow.axaml | 6 +++ .../UI/Windows/SettingsWindow.axaml.cs | 4 ++ 21 files changed, 222 insertions(+), 22 deletions(-) create mode 100644 src/Ryujinx.Common/Configuration/DirtyHacks.cs create mode 100644 src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml create mode 100644 src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs diff --git a/src/Ryujinx.Common/Configuration/DirtyHacks.cs b/src/Ryujinx.Common/Configuration/DirtyHacks.cs new file mode 100644 index 000000000..6a6d4949c --- /dev/null +++ b/src/Ryujinx.Common/Configuration/DirtyHacks.cs @@ -0,0 +1,11 @@ +using System; + +namespace Ryujinx.Common.Configuration +{ + [Flags] + public enum DirtyHacks + { + None = 0, + Xc2MenuSoftlockFix = 1 << 10 + } +} diff --git a/src/Ryujinx.Common/TitleIDs.cs b/src/Ryujinx.Common/TitleIDs.cs index b75ee1299..2d4068e4e 100644 --- a/src/Ryujinx.Common/TitleIDs.cs +++ b/src/Ryujinx.Common/TitleIDs.cs @@ -8,6 +8,8 @@ namespace Ryujinx.Common { public static class TitleIDs { + public static Optional CurrentApplication; + public static GraphicsBackend SelectGraphicsBackend(string titleId, GraphicsBackend currentBackend) { switch (currentBackend) diff --git a/src/Ryujinx.Graphics.Gpu/GraphicsConfig.cs b/src/Ryujinx.Graphics.Gpu/GraphicsConfig.cs index fbb7399ca..6b2a57ad9 100644 --- a/src/Ryujinx.Graphics.Gpu/GraphicsConfig.cs +++ b/src/Ryujinx.Graphics.Gpu/GraphicsConfig.cs @@ -47,12 +47,6 @@ namespace Ryujinx.Graphics.Gpu ///
public static bool EnableMacroHLE = true; - /// - /// Title id of the current running game. - /// Used by the shader cache. - /// - public static string TitleId; - /// /// Enables or disables the shader cache. /// diff --git a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs index 0924c60f8..2f4d98b9b 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; @@ -116,8 +117,8 @@ namespace Ryujinx.Graphics.Gpu.Shader ///
private static string GetDiskCachePath() { - return GraphicsConfig.EnableShaderCache && GraphicsConfig.TitleId != null - ? Path.Combine(AppDataManager.GamesDirPath, GraphicsConfig.TitleId, "cache", "shader") + return GraphicsConfig.EnableShaderCache && TitleIDs.CurrentApplication.HasValue + ? Path.Combine(AppDataManager.GamesDirPath, TitleIDs.CurrentApplication, "cache", "shader") : null; } diff --git a/src/Ryujinx.HLE/HLEConfiguration.cs b/src/Ryujinx.HLE/HLEConfiguration.cs index 52c2b3da4..3bfab0be4 100644 --- a/src/Ryujinx.HLE/HLEConfiguration.cs +++ b/src/Ryujinx.HLE/HLEConfiguration.cs @@ -188,6 +188,11 @@ namespace Ryujinx.HLE /// An action called when HLE force a refresh of output after docked mode changed. ///